merge
authorChristian Grothoff <christian@grothoff.org>
Sat, 23 Feb 2019 09:48:08 +0000 (10:48 +0100)
committerChristian Grothoff <christian@grothoff.org>
Sat, 23 Feb 2019 09:48:08 +0000 (10:48 +0100)
283 files changed:
.gitignore
AUTHORS
Makefile.am
README
configure.ac
contrib/apparmor/gnunet-mesh [deleted file]
contrib/branding/logo/gnunet-logo-dark-only-text.svg [new file with mode: 0644]
contrib/gnunet.rb [new file with mode: 0644]
contrib/scripts/gnunet-bugreport
contrib/scripts/gnunet-chk.py.in
contrib/scripts/gnunet_pyexpect.py.in
contrib/scripts/pydiffer.py.in
contrib/scripts/regression.sh
contrib/scripts/terminate.py.in
contrib/tox.ini
doc/handbook/.gitignore
doc/handbook/Makefile.am
doc/handbook/chapters/developer.texi
doc/handbook/chapters/installation.texi
doc/handbook/chapters/keyconcepts.texi
doc/man/gnunet-arm.1
doc/man/gnunet-ats.1
doc/man/gnunet-auto-share.1
doc/man/gnunet-bcd.1
doc/man/gnunet-cadet.1
doc/man/gnunet-config.1
doc/man/gnunet-conversation-test.1
doc/man/gnunet-conversation.1
doc/man/gnunet-core.1
doc/man/gnunet-datastore.1
doc/man/gnunet-directory.1
doc/man/gnunet-dns2gns.1
doc/man/gnunet-download-manager.1
doc/man/gnunet-download.1
doc/man/gnunet-ecc.1
doc/man/gnunet-fs.1
doc/man/gnunet-gns-proxy.1
doc/man/gnunet-gns.1
doc/man/gnunet-identity.1
doc/man/gnunet-namecache.1
doc/man/gnunet-namestore-fcfsd.1
doc/man/gnunet-namestore.1
doc/man/gnunet-nat-auto.1
doc/man/gnunet-nat-server.1
doc/man/gnunet-nat.1
doc/man/gnunet-peerinfo.1
doc/man/gnunet-publish.1
doc/man/gnunet-qr.1
doc/man/gnunet-resolver.1
doc/man/gnunet-revocation.1
doc/man/gnunet-scalarproduct.1
doc/man/gnunet-scrypt.1
doc/man/gnunet-search.1
doc/man/gnunet-testbed-profiler.1
doc/man/gnunet-testing-run-service.1
doc/man/gnunet-testing.1
doc/man/gnunet-timeout.1
doc/man/gnunet-transport-certificate-creation.1
doc/man/gnunet-transport.1
doc/man/gnunet-unindex.1
doc/man/gnunet-uri.1
doc/man/gnunet-vpn.1
doc/man/gnunet-zoneimport.1
doc/man/gnunet.conf.5
doc/tutorial/Makefile.am
doc/tutorial/docstyle.css [new file with mode: 0644]
doc/tutorial/gnunet-tutorial.texi
doc/tutorial/htmlxref.cnf [new file with mode: 0644]
doc/tutorial/manual.css [new file with mode: 0644]
doc/tutorial/reset.css [new file with mode: 0644]
doc/tutorial/run-gendocs.sh [new file with mode: 0755]
doc/tutorial/style.css [new file with mode: 0644]
pkgconfig/Makefile.am
pkgconfig/gnunetdv.pc.in [deleted file]
pkgconfig/gnunetmulticast.pc.in [deleted file]
pkgconfig/gnunetpsyc.pc.in [deleted file]
pkgconfig/gnunetpsycstore.pc.in [deleted file]
pkgconfig/gnunetsocial.pc.in [deleted file]
po/POTFILES.in
po/de.po
po/es.po
po/fr.po
po/it.po
po/sv.po
po/vi.po
po/zh_CN.po
src/Makefile.am
src/arm/arm.conf.in
src/ats-tests/Makefile.am
src/ats/Makefile.am
src/cadet/cadet.h
src/cadet/cadet_api_get_path.c
src/cadet/cadet_test_lib.c
src/cadet/gnunet-cadet.c
src/cadet/gnunet-service-cadet.c
src/consensus/consensus-simulation.py.in
src/consensus/test_consensus.conf
src/datacache/perf_datacache.c
src/datacache/test_datacache.c
src/datacache/test_datacache_quota.c
src/datastore/perf_datastore_api.c
src/datastore/perf_plugin_datastore.c
src/datastore/plugin_datastore_postgres.c
src/datastore/test_datastore_api.c
src/datastore/test_datastore_api_management.c
src/datastore/test_plugin_datastore.c
src/dht/test_dht_tools.py.in
src/dv/.gitignore [deleted file]
src/dv/Makefile.am [deleted file]
src/dv/dv.conf.in [deleted file]
src/dv/dv.h [deleted file]
src/dv/dv_api.c [deleted file]
src/dv/gnunet-dv.c [deleted file]
src/dv/gnunet-service-dv.c [deleted file]
src/dv/plugin_transport_dv.c [deleted file]
src/dv/template_dv.conf [deleted file]
src/dv/test_transport_blacklist.c [deleted file]
src/dv/test_transport_blacklist_data.conf [deleted file]
src/dv/test_transport_dv.c [deleted file]
src/dv/test_transport_dv_data.conf [deleted file]
src/fs/Makefile.am
src/fs/fs.conf.in
src/fs/fs_dirmetascan.c
src/fs/fs_publish.c
src/fs/gnunet-publish.c
src/fs/gnunet-search.c
src/fs/gnunet-service-fs_cadet_client.c
src/fs/test_gnunet_fs_psd.py.in
src/gns/.gitignore
src/gns/Makefile.am
src/gns/gnunet-gns-proxy-setup-ca [deleted file]
src/gns/gnunet-gns-proxy-setup-ca.in [new file with mode: 0644]
src/gns/gnunet-gns-proxy.c
src/gns/openssl.cnf [new file with mode: 0644]
src/gns/test_gns_nick_shorten.conf [deleted file]
src/gns/test_gns_rel_expiration.sh
src/include/Makefile.am
src/include/gnunet_cadet_service.h
src/include/gnunet_common.h
src/include/gnunet_dv_service.h [deleted file]
src/include/gnunet_hello_lib.h
src/include/gnunet_multicast_service.h [deleted file]
src/include/gnunet_namestore_plugin.h
src/include/gnunet_protocols.h
src/include/gnunet_psyc_env.h [deleted file]
src/include/gnunet_psyc_message.h [deleted file]
src/include/gnunet_psyc_service.h [deleted file]
src/include/gnunet_psyc_slicer.h [deleted file]
src/include/gnunet_psyc_util_lib.h [deleted file]
src/include/gnunet_psycstore_plugin.h [deleted file]
src/include/gnunet_psycstore_service.h [deleted file]
src/include/gnunet_rps_service.h
src/include/gnunet_sensor_service.h [deleted file]
src/include/gnunet_sensor_util_lib.h [deleted file]
src/include/gnunet_sensordashboard_service.h [deleted file]
src/include/gnunet_social_service.h [deleted file]
src/include/gnunet_transport_address_service.h [new file with mode: 0644]
src/include/gnunet_transport_hello_service.h
src/include/platform.h
src/integration-tests/confs/c_bootstrap_server.conf
src/integration-tests/confs/c_nat_client.conf
src/integration-tests/confs/c_no_nat_client.conf
src/integration-tests/confs/c_no_nat_client_2.conf
src/integration-tests/gnunet_pyexpect.py.in
src/integration-tests/gnunet_testing.py.in
src/integration-tests/test_integration_bootstrap_and_connect.py.in
src/integration-tests/test_integration_clique.py.in
src/integration-tests/test_integration_disconnect.py.in
src/integration-tests/test_integration_disconnect_nat.py.in
src/integration-tests/test_integration_reconnect.py.in
src/integration-tests/test_integration_reconnect_nat.py.in
src/multicast/.gitignore [deleted file]
src/multicast/Makefile.am [deleted file]
src/multicast/gnunet-multicast.c [deleted file]
src/multicast/gnunet-service-multicast.c [deleted file]
src/multicast/multicast.conf.in [deleted file]
src/multicast/multicast.h [deleted file]
src/multicast/multicast_api.c [deleted file]
src/multicast/test_multicast.c [deleted file]
src/multicast/test_multicast.conf [deleted file]
src/multicast/test_multicast_2peers.c [deleted file]
src/multicast/test_multicast_line.conf [deleted file]
src/multicast/test_multicast_multipeer.c [deleted file]
src/multicast/test_multicast_star.conf [deleted file]
src/namecache/plugin_namecache_flat.c
src/namecache/test_plugin_namecache.c
src/namestore/gnunet-service-namestore.c
src/namestore/plugin_namestore_heap.c
src/namestore/plugin_namestore_postgres.c
src/namestore/plugin_namestore_sqlite.c
src/namestore/test_plugin_namestore.c
src/peerinfo/peerinfo_api.c
src/peerstore/Makefile.am
src/peerstore/peerstore_api.c
src/peerstore/plugin_peerstore_flat.c
src/peerstore/test_plugin_peerstore.c
src/pq/pq_result_helper.c
src/psyc/.gitignore [deleted file]
src/psyc/Makefile.am [deleted file]
src/psyc/gnunet-service-psyc.c [deleted file]
src/psyc/psyc.conf.in [deleted file]
src/psyc/psyc.h [deleted file]
src/psyc/psyc_api.c [deleted file]
src/psyc/psyc_test_lib.h [deleted file]
src/psyc/test_psyc.c [deleted file]
src/psyc/test_psyc.conf [deleted file]
src/psyc/test_psyc2.c [deleted file]
src/psyc/test_psyc_api_join.c [deleted file]
src/psycstore/.gitignore [deleted file]
src/psycstore/Makefile.am [deleted file]
src/psycstore/gnunet-service-psycstore.c [deleted file]
src/psycstore/plugin_psycstore_mysql.c [deleted file]
src/psycstore/plugin_psycstore_postgres.c [deleted file]
src/psycstore/plugin_psycstore_sqlite.c [deleted file]
src/psycstore/psycstore.conf.in [deleted file]
src/psycstore/psycstore.h [deleted file]
src/psycstore/psycstore_api.c [deleted file]
src/psycstore/test_plugin_psycstore.c [deleted file]
src/psycstore/test_plugin_psycstore_mysql.conf [deleted file]
src/psycstore/test_plugin_psycstore_postgres.conf [deleted file]
src/psycstore/test_plugin_psycstore_sqlite.conf [deleted file]
src/psycstore/test_psycstore.c [deleted file]
src/psycstore/test_psycstore.conf [deleted file]
src/psycutil/.gitignore [deleted file]
src/psycutil/Makefile.am [deleted file]
src/psycutil/psyc_env.c [deleted file]
src/psycutil/psyc_message.c [deleted file]
src/psycutil/psyc_slicer.c [deleted file]
src/psycutil/test_psyc_env.c [deleted file]
src/rest-plugins/Makefile.am
src/rest-plugins/plugin_rest_openid_connect.c
src/revocation/test_local_revocation.py.in
src/rps/gnunet-rps-profiler.c
src/rps/gnunet-service-rps.c
src/rps/gnunet-service-rps_custommap.c
src/rps/profiler_rps.conf
src/rps/rps-test_util.c
src/rps/rps-test_util.h
src/rps/rps.h
src/rps/rps_api.c
src/rps/test_rps.c
src/rps/test_rps.conf
src/secretsharing/gnunet-service-secretsharing.c
src/secretsharing/secretsharing.conf.in
src/secretsharing/test_secretsharing.conf
src/social/.gitignore [deleted file]
src/social/Makefile.am [deleted file]
src/social/gnunet-service-social.c [deleted file]
src/social/gnunet-social.c [deleted file]
src/social/social.conf.in [deleted file]
src/social/social.h [deleted file]
src/social/social_api.c [deleted file]
src/social/test_social.c [deleted file]
src/social/test_social.conf [deleted file]
src/sq/sq.c
src/testbed/test_testbed_api_template.conf
src/testing/Makefile.am
src/testing/test_testing_defaults.conf
src/testing/test_testing_sharedservices.conf
src/testing/testing.c
src/topology/friends.c
src/topology/test_gnunet_daemon_topology_data.conf
src/transport/Makefile.am
src/transport/gnunet-communicator-tcp.c
src/transport/gnunet-communicator-udp.c
src/transport/gnunet-service-tng.c
src/transport/gnunet-service-transport_validation.c
src/transport/plugin_transport_tcp.c
src/transport/transport.h
src/transport/transport_api2_address.c [new file with mode: 0644]
src/transport/transport_api_core.c
src/util/.gitignore
src/util/Makefile.am
src/util/container_multihashmap.c
src/util/container_multihashmap32.c
src/util/container_multipeermap.c
src/util/container_multishortmap.c
src/util/dnsparser.c
src/util/gnunet-qr.py.in
src/util/gnunet-service-resolver.c
src/util/mq.c
src/util/scheduler.c
src/util/service.c

index 4f58c79ac23377cf6a7f3738dd066b15ed54f635..230946ed6969082ace69c2878a34fb10fc4b9e31 100644 (file)
@@ -55,3 +55,6 @@ flake8.log
 .cache/
 __pycache__/
 build-aux/
+src/ats/test_ats2_lib
+doc/handbook/gversion.texi
+doc/tutorial/gversion.texi
diff --git a/AUTHORS b/AUTHORS
index 718038ab8fe3315fdd9f5de1267531120867342a..829a0803e1ae4472288301f66d83d44f77547921 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,9 +1,9 @@
 Program: GNUnet
 Homepage: https://gnunet.org/
 Maintainer: Christian Grothoff <christian@grothoff.org>
-Bug reports: https://gnunet.org/bugs/
+Bug reports: https://bugs.gnunet.org
 Security related bug reports: security@gnunet.org
-License: some GPLv2+, mostly GPLv3+
+License: some GPLv2+, mostly AGPLv3+
 
 Primary developers (0.9.x series):
 Alejandra Morales
@@ -123,7 +123,8 @@ Nix:            : viric, rahul
 OpenWrt/LEDE    : Daniel Golle <daniel@makrotopia.org>
 OS X            : Jussi Eloranta <eloranta@cc.jyu.fi>
 Gentoo         : Carlo von lynX <psyc://loupsycedyglgamf.onion/~lynX>
-                  Nils Gillmann <ng0@n0.is>
+                  N. Gillmann <ng0@n0.is>
+NetBSD pkgsrc   : N. Gillmann <ng0@n0.is>
 
 If you have contributed and are not listed here, please
 notify one of the maintainers in order to be added.
index ad32cf9203238b6ab50fbea5a87789071b62daca..fd18d7c3c1e7b0b50b50449818a641351452f56c 100644 (file)
@@ -3,7 +3,7 @@ AM_CPPFLAGS = -I$(top_srcdir)/src/include
 
 if DOCUMENTATION_ONLY
   SUBDIRS = doc
-else 
+else
   SUBDIRS = m4 src po pkgconfig
 if DOCUMENTATION
   SUBDIRS += doc
@@ -17,7 +17,6 @@ endif
 EXTRA_DIST = \
  ABOUT-NLS \
  config.rpath \
- install-sh \
  acinclude.m4 \
  README.1st
 
@@ -28,4 +27,3 @@ docdir = $(datadir)/doc/gnunet/
 doc_DATA = COPYING README
 
 ACLOCAL_AMFLAGS = -I m4
-
diff --git a/README b/README
index 43d6671d719fd2e9db67dcff845910c90c43836f..4cfba40704a45a3dc497717af72dd29dd3e0556b 100644 (file)
--- a/README
+++ b/README
@@ -23,6 +23,8 @@ fork!
 
 Additional documentation about GNUnet can be found at
 https://gnunet.org/ and in the 'doc/' folder.
+Online documentation is provided at
+'https://docs.gnunet.org' and 'https://tutorial.gnunet.org'.
 
 
 Dependencies:
@@ -32,7 +34,7 @@ These are the direct dependencies for running GNUnet:
 
 - libmicrohttpd      >= 0.9.42
 - libgcrypt          >= 1.6
-- libgnurl           >= 7.35.0      (recommended, available from https://gnunet.org/gnurl)
+- libgnurl           >= 7.35.0      (recommended, available from https://gnunet.org/en/gnurl.html)
 - libcurl            >= 7.35.0      (alternative to libgnurl)
 - libunistring       >= 0.9.2
 - gnutls             >= 3.2.12      (highly recommended a gnutls linked against libunbound)
@@ -41,14 +43,17 @@ These are the direct dependencies for running GNUnet:
   or
   - libidn             >= 1.0
 - libextractor       >= 0.6.1       (highly recommended)
-- openssl            >= 1.0         (binary, used to generate X.509 certificate)
+- openssl            >= 1.0         (binary, used to generate X.509 certificate
+                                     for gnunet-gns-proxy-setup-ca)
+- nss                               (certutil binary, for
+                                     gnunet-gns-proxy-setup-ca)
 - libltdl            >= 2.2         (part of GNU libtool)
 - sqlite             >= 3.8         (default database, required)
 - mysql              >= 5.1         (alternative to sqlite)
 - postgres           >= 9.5         (alternative to sqlite)
 - Texinfo            >= 5.2         [*1]
-- makeinfo           >= 4.8         (at least 4.8 at the time of writing is tested) 
-- which                             (for the bootstrap script)
+- makeinfo           >= 4.8
+- which                             (bootstrap script and some Makefiles)
 - gettext
 - zlib
 - pkg-config
@@ -57,8 +62,8 @@ These are the direct dependencies for running GNUnet:
 These are the dependencies for GNUnet's testsuite:
 
 - Bash                              (optional (?), for some tests)
-- python             >= 2.7         (optional, only python 2.7 is supported)
-- python-future      >= 2.7         (optional, only python 2.7 is supported)
+- python             >= 3.7         (optional, only python 3.7 is supported)
+- python-future      >= 3.7         (optional, only python 3.7 is supported)
 
 
 These are the optional dependencies:
@@ -67,13 +72,14 @@ These are the optional dependencies:
 - libpulse           >= 2.0         (optional, for experimental conversation tool)
 - libogg             >= 1.3.0       (optional, for experimental conversation tool)
 - libnss                            (optional, certtool binary (for convenient installation of GNS proxy))
-- python-future                     (optional, for some testcases and utilities)
+- python2.7-future                  (optional, for gnunet-qr)
 - python-zbar        >= 0.10        (optional, for gnunet-qr)
 - TeX Live           >= 2012        (optional, for gnunet-bcd[*])
 - texi2mdoc                         (optional, for automatic mdoc generation [*2])
 - libglpk            >= 4.45        (optional, for experimental code)
 - perl5                             (optional, for some utilities)
-- python             >= 2.7         (optional, for gnunet-qr, only python 2.7 is supported)
+- guile              1.6.4          (or later up to 1.8?, optional for gnunet-download-manager)
+- python2.7          >= 2.7         (optional, for gnunet-qr, only python 2.7 is supported)
 - bluez                             (optional, for bluetooth support)
 - miniupnpc
 - libpbc             >= 0.5.14      (optional, for Attribute-Based Encryption and Identity Provider functionality)
@@ -160,22 +166,12 @@ Building GNUnet from source
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 IMPORTANT: You can read further notes about compilation from source in
-the 'doc/FILENAME' document, which includes notes about specific
+the handbook under doc/handbook/, which includes notes about specific
 requirements for operating systems aswell. If you are a package
 mantainer for an Operating System we invite you to add your notes if
 you feel it is necessary and can not be covered in your Operating
 System's documentation.
 
-If you are building GNUnet from source you are either interested
-in furthering its development (we have further notes for developer
-builds in our 'GNUnet Developer Handbook') or you don't trust other
-people's binaries or your Operating System doesn't provide any
-binary package (at the moment).
-
-If you're on Gentoo you can build GNUnet using the recipes provided
-in the 'youbroketheinternet' overlay. Other Operating Systems may
-unintentionally require you to build GNUnet from source.
-
 Two prominent examples which currently lack cross-compilation
 support in GNUnet (and native binaries) are MS Windows and Apple macOS.
 For macOS we recommend you to do the build process via Homebrew and a
@@ -199,7 +195,7 @@ If you install from source, you need to install GNU libextractor first
 (download from https://www.gnu.org/software/libextractor/).  We also
 recommend installing GNU libmicrohttpd (download from
 https://www.gnu.org/software/libmicrohttpd/). Furthermore we recommend
-libgnurl (from https://gnunet.org/gnurl).
+libgnurl (from https://gnunet.org/en/gnurl.html).
 Then you can start the actual GNUnet compilation process with:
 
 
@@ -311,7 +307,7 @@ Usage
 =====
 
 For detailed usage notes, instructions and examples, refer to the
-included 'GNUnet User Handbook'.
+included 'GNUnet Handbook'.
 
 First, you must obtain an initial list of GNUnet hosts.  Knowing a
 single peer is sufficient since after that GNUnet propagates
@@ -372,7 +368,7 @@ Hacking GNUnet
 ==============
 
 Contributions are welcome. Please submit bugs you find to
-https://gnunet.org/bugs/.
+https://bugs.gnunet.org/ or our bugs mailinglist.
 Please make sure to run the script "contrib/scripts/gnunet-bugreport"
 and include the output with your bug reports.  More about how to
 report bugs can be found in the GNUnet FAQ on the webpage.  Submit
@@ -392,7 +388,7 @@ $ make install
 $ export $GNUNET_PREFIX=$SOMEWHERE
 $ make check
 
-Some of the testcases require python >= 2.7, and the python modules
+Some of the testcases require python >= 3.7, and the python modules
 "python-future" (http://python-future.org/) and "pexpect" to be installed.
 If any testcases fail to pass on your system, run
 "contrib/scripts/gnunet-bugreport" (in the repository) or "gnunet-bugreport"
@@ -457,9 +453,9 @@ Further Reading
   There are currently 2 ways to get them:
 
   * Using git:
-    git clone https://gnunet.org/git/bibliography.git
+    git clone https://git.gnunet.org/bibliography.git
   * Using Drupal:
-    https://gnunet.org/bibliography
+    https://old.gnunet.org/bibliography
 
   The Drupal access will be replaced by a new interface to our
   bibliography in 2019.
@@ -469,8 +465,8 @@ Stay tuned
 ==========
 
 * https://gnunet.org/
-* https://gnunet.org/bugs/
-* https://gnunet.org/git/
+* https://bugs.gnunet.org
+* https://git.gnunet.org
 * http://www.gnu.org/software/gnunet/
 * http://mail.gnu.org/mailman/listinfo/gnunet-developers
 * http://mail.gnu.org/mailman/listinfo/help-gnunet
index 3dd1ce3e61a429771e42c9c4f234d230944e0f99..87a60cb040b3d2ad4d19f992335f2d035ccca153 100644 (file)
@@ -1,5 +1,5 @@
 # This file is part of GNUnet.
-# (C) 2001--2018 GNUnet e.V.
+# (C) 2001--2019 GNUnet e.V.
 #
 # GNUnet is free software: you can redistribute it and/or modify it
 # under the terms of the GNU Affero General Public License as published
@@ -71,6 +71,7 @@ case "$host_os" in
      CPPFLAGS="-D_APPLE_C_SOURCE $CPPFLAGS"
      CFLAGS="-fno-common $CFLAGS"
      AC_MSG_WARN([WARNING: The VPN application cannot be compiled on your OS])
+     AC_CHECK_LIB(intl, gettext)
      build_target="darwin"
      DEFAULT_INTERFACE="\"en0\""
      LIBPREFIX=
@@ -192,8 +193,8 @@ AC_UNALIGNED_64_ACCESS
 
 # some other checks for standard libs
 AC_SEARCH_LIBS([gethostbyname], [nsl ws2_32])
-AC_SEARCH_LIBS([memrchr], [], [],
-               AC_DEFINE(HAVE_MEMRCHR,1,[memrchr supported]))
+AC_SEARCH_LIBS([memrchr], [],
+               AC_DEFINE(HAVE_MEMRCHR,1,[memrchr supported]), [])
 AC_CHECK_LIB(socket, socket)
 AC_CHECK_LIB(m, log)
 AC_CHECK_LIB(c, getloadavg, AC_DEFINE(HAVE_GETLOADAVG,1,[getloadavg supported]))
@@ -206,6 +207,13 @@ AM_CONDITIONAL(HAVE_SSH_BINARY, $VAR_SSH_BINARY)
 AM_CONDITIONAL(HAVE_SSH_KEY,  ssh -D 12345 -o "BatchMode yes" -o "UserKnownHostsFile /tmp/gnunet_test_cosks_ssh_garbage" -o "StrictHostKeyChecking no" 127.0.0.1 echo -n)
 rm -f /tmp/gnunet_test_cosks_ssh_garbage
 
+# autotools' m4 for python has no maximum version!
+# python3.7 for tests
+m4_define_default([_AM_PYTHON_INTERPRETER_LIST],[python3 python3.7 python])
+AM_PATH_PYTHON([3.7],, [:])
+AC_SUBST([PYTHON])
+AM_CONDITIONAL([HAVE_PYTHON], [test "$PYTHON" != :])
+
 # iptables is a soft requirement to run tests
 AC_PATH_TARGET_TOOL(VAR_IPTABLES_BINARY, iptables, false)
 
@@ -369,7 +377,6 @@ AC_ARG_ENABLE(gcc-hardening,
     LDFLAGS="$LDFLAGS -pie"
 fi])
 
-
 # Linker hardening options
 # Currently these options are ELF specific - you can't use this with MacOSX
 AC_ARG_ENABLE(linker-hardening,
@@ -862,7 +869,7 @@ AS_IF([test x$my_with_libidn2 = x1],
                     LIBS="-lidn2 $LIBS"
                    AC_DEFINE_UNQUOTED([HAVE_LIBIDN2],
                                        [1],
-                                        [Define to 1 if you have 'libidn2' (-lidn).])],
+                                        [Define to 1 if you have 'libidn2' (-lidn2).])],
                      [MISSING_DEPS="${MISSING_DEPS}${MISSING_SEP}libidn2"
                      MISSING_SEP=", "])])
 AM_CONDITIONAL(HAVE_LIBIDN2, test x$working_libidn2 = x1)
@@ -1208,10 +1215,6 @@ AM_CONDITIONAL(HAVE_JSON, [test x$jansson = x1])
 # restore LIBS
 LIBS=$SAVE_LIBS
 
-# check for python & pexpect (used for some testcases only)
-AM_PATH_PYTHON([2.6],, [:])
-AM_CONDITIONAL([HAVE_PYTHON], [test "$PYTHON" != :])
-
 # check for gettext
 AM_GNU_GETTEXT([external])
 AM_GNU_GETTEXT_VERSION([0.18.1])
@@ -1297,6 +1300,8 @@ AC_SUBST(LIBPREFIX)
 AC_SUBST(DLLDIR)
 AC_SUBST(EXT_LIB_PATH)
 
+DATAROOTDIR=$datarootdir
+AC_SUBST(DATAROOTDIR)
 
 # test for sudo
 AC_MSG_CHECKING(for sudo)
@@ -1436,23 +1441,6 @@ AC_MSG_RESULT($enable_test_run)
 AM_CONDITIONAL([ENABLE_TEST_RUN], [test "x$enable_tests_run" = "xyes"])
 
 
-# should monkey be used when running (certain) services?
-AC_MSG_CHECKING(whether to run with monkey)
-AC_ARG_ENABLE([monkey],
-   [AS_HELP_STRING([--enable-monkey], [enable running with monkey])],
-   [enable_monkey=${enableval}],
-   [enable_monkey=no])
-AC_MSG_RESULT($enable_monkey)
-AM_CONDITIONAL([ENABLE_MONKEY], [test "x$enable_monkey" = "xyes"])
-if test "x$enable_monkey" = "xyes"
-then
-  MONKEYPREFIX="pathologist -d $(eval echo ${datarootdir}/gnunet/gnunet.sqlite) -p 30 --"
-else
-  MONKEYPREFIX=""
-fi
-AC_SUBST(MONKEYPREFIX)
-
-
 AC_MSG_CHECKING([whether to compile in benchmarks (currently for http and crypto)])
 AC_ARG_ENABLE([benchmark],
    [AS_HELP_STRING([--enable-benchmark], [enable benchmarking])],
@@ -1542,7 +1530,7 @@ AC_MSG_CHECKING(whether to start peer's services on demand by default)
 AC_ARG_ENABLE([autostart],
    [AS_HELP_STRING([--disable-autostart], [do not start peer's services by default])],
    [enable_autostart=${enableval}
-    if test "x$enable_autostart" == "xno"
+    if test "x$enable_autostart" = "xno"
     then
         START_ON_DEMAND="NO"
     fi
@@ -1766,8 +1754,6 @@ src/include/Makefile
 src/integration-tests/Makefile
 src/json/Makefile
 src/hostlist/Makefile
-src/multicast/Makefile
-src/multicast/multicast.conf
 src/my/Makefile
 src/mysql/Makefile
 src/namecache/Makefile
@@ -1787,11 +1773,6 @@ src/peerinfo-tool/Makefile
 src/peerstore/Makefile
 src/peerstore/peerstore.conf
 src/pq/Makefile
-src/psycutil/Makefile
-src/psyc/Makefile
-src/psyc/psyc.conf
-src/psycstore/Makefile
-src/psycstore/psycstore.conf
 src/pt/Makefile
 src/regex/Makefile
 src/regex/regex.conf
@@ -1805,8 +1786,6 @@ src/scalarproduct/Makefile
 src/scalarproduct/scalarproduct.conf
 src/set/Makefile
 src/set/set.conf
-src/social/Makefile
-src/social/social.conf
 src/sq/Makefile
 src/statistics/Makefile
 src/statistics/statistics.conf
@@ -1842,7 +1821,6 @@ pkgconfig/gnunetdatacache.pc
 pkgconfig/gnunetdatastore.pc
 pkgconfig/gnunetdht.pc
 pkgconfig/gnunetdns.pc
-pkgconfig/gnunetdv.pc
 pkgconfig/gnunetenv.pc
 pkgconfig/gnunetfragmentation.pc
 pkgconfig/gnunetfs.pc
@@ -1850,21 +1828,17 @@ pkgconfig/gnunetgns.pc
 pkgconfig/gnunethello.pc
 pkgconfig/gnunetidentity.pc
 pkgconfig/gnunetmicrophone.pc
-pkgconfig/gnunetmulticast.pc
 pkgconfig/gnunetmysql.pc
 pkgconfig/gnunetnamestore.pc
 pkgconfig/gnunetnat.pc
 pkgconfig/gnunetnse.pc
 pkgconfig/gnunetpeerinfo.pc
 pkgconfig/gnunetpq.pc
-pkgconfig/gnunetpsyc.pc
-pkgconfig/gnunetpsycstore.pc
 pkgconfig/gnunetregex.pc
 pkgconfig/gnunetrevocation.pc
 pkgconfig/gnunetrps.pc
 pkgconfig/gnunetscalarproduct.pc
 pkgconfig/gnunetset.pc
-pkgconfig/gnunetsocial.pc
 pkgconfig/gnunetspeaker.pc
 pkgconfig/gnunetstatistics.pc
 pkgconfig/gnunettestbed.pc
@@ -1974,7 +1948,7 @@ require fresh login to come into effect):
 "USERNAME" with the respective login names).  If you have a global IP
 address, no further configuration is required.
 
-For more detailed setup instructions, see https://gnunet.org/installation
+For more detailed setup instructions, see https://docs.gnunet.org/
 
 Optionally, download and compile gnunet-gtk to get a GUI for
 file-sharing and configuration.  This is particularly recommended
diff --git a/contrib/apparmor/gnunet-mesh b/contrib/apparmor/gnunet-mesh
deleted file mode 100644 (file)
index 9f5b07f..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-# Last Modified: Fri Aug  7 18:02:28 2015
-#include <tunables/global>
-#include <tunables/gnunet>
-
-profile @{GNUNET_PREFIX}/bin/gnunet-mesh {
-  #include <abstractions/base>
-  #include <abstractions/gnunet-common>
-
-  @{GNUNET_PREFIX}/bin/gnunet-mesh mr,
-
-  # Site-specific additions and overrides. See local/README for details.
-  #include <local/gnunet>
-}
diff --git a/contrib/branding/logo/gnunet-logo-dark-only-text.svg b/contrib/branding/logo/gnunet-logo-dark-only-text.svg
new file mode 100644 (file)
index 0000000..f4ca0f9
--- /dev/null
@@ -0,0 +1,1144 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   id="svg2"
+   height="42.057301"
+   width="159.35417"
+   sodipodi:docname="gnunet-logo-dark-only-text.svg"
+   inkscape:version="0.92.3 (2405546, 2018-03-11)">
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1130"
+     inkscape:window-height="760"
+     id="namedview5639"
+     showgrid="false"
+     inkscape:zoom="3.2071429"
+     inkscape:cx="-2.4948441"
+     inkscape:cy="7.4954053"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg2" />
+  <title
+     id="title3310">logo for GNUnet</title>
+  <defs
+     id="defs4">
+    <linearGradient
+       id="gnunet">
+      <stop
+         style="stop-color:#ff0000;stop-opacity:0.58431375;"
+         offset="0"
+         id="stop9516" />
+      <stop
+         style="stop-color:#ffcc00;stop-opacity:1;"
+         offset="1"
+         id="stop9518" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4094">
+      <stop
+         style="stop-color:#232323;stop-opacity:1;"
+         offset="0"
+         id="stop4096" />
+      <stop
+         style="stop-color:#4d4d4d;stop-opacity:1;"
+         offset="1"
+         id="stop4098" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4014">
+      <stop
+         style="stop-color:#a0a0a0;stop-opacity:1;"
+         offset="0"
+         id="stop4016" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop4018" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4678">
+      <stop
+         style="stop-color:#e5e5e5;stop-opacity:1;"
+         offset="0"
+         id="stop4680" />
+      <stop
+         style="stop-color:#d3cdcd;stop-opacity:1;"
+         offset="1"
+         id="stop4682" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4341">
+      <stop
+         id="stop4343"
+         offset="0"
+         style="stop-color:#333333;stop-opacity:1;" />
+      <stop
+         id="stop4345"
+         offset="1"
+         style="stop-color:#484848;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4696-5">
+      <stop
+         id="stop4698-6"
+         offset="0"
+         style="stop-color:#ffb638;stop-opacity:1;" />
+      <stop
+         id="stop4700-2"
+         offset="1"
+         style="stop-color:#f0ae26;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4702-3-6">
+      <stop
+         id="stop4704-1"
+         offset="0"
+         style="stop-color:#ff0000;stop-opacity:0.58431375;" />
+      <stop
+         id="stop4706-8"
+         offset="1"
+         style="stop-color:#ffcc00;stop-opacity:1;" />
+    </linearGradient>
+    <color-profile
+       name="Artifex-PS-CMYK-Profile"
+       xlink:href="/usr/share/color/icc/ghostscript/ps_cmyk.icc"
+       id="color-profile5435" />
+    <linearGradient
+       y2="69.791016"
+       x2="177.04297"
+       y1="63.65625"
+       x1="142.96875"
+       gradientTransform="matrix(-0.88803314,0,0,0.88803314,595.57001,1106.9291)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3138"
+       xlink:href="#linearGradient4702-3-6" />
+    <linearGradient
+       y2="1043.709"
+       x2="80.655251"
+       y1="1025.709"
+       x1="108.08774"
+       gradientTransform="matrix(-0.49726789,0,0,0.49726789,555.31016,722.70088)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3141"
+       xlink:href="#linearGradient4696-5" />
+    <linearGradient
+       y2="922.07178"
+       x2="78.000107"
+       y1="1004.8033"
+       x1="113.5146"
+       gradientTransform="matrix(0.88803314,0,0,0.88803314,415.18739,350.00262)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3144"
+       xlink:href="#linearGradient4702-3-6" />
+    <linearGradient
+       y2="70.667412"
+       x2="176.60477"
+       y1="63.65625"
+       x1="142.96875"
+       gradientTransform="matrix(0.88803314,0,0,0.88803314,415.2161,1106.9294)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3148"
+       xlink:href="#linearGradient4702-3-6" />
+    <linearGradient
+       y2="70.667412"
+       x2="176.60477"
+       y1="63.65625"
+       x1="142.96875"
+       gradientTransform="matrix(0.88803314,0,0,0.88803314,415.2161,1106.9294)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3780"
+       xlink:href="#linearGradient4702-3-6" />
+    <linearGradient
+       y2="922.07178"
+       x2="78.000107"
+       y1="1004.8033"
+       x1="113.5146"
+       gradientTransform="matrix(0.88803314,0,0,0.88803314,415.18739,350.00262)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3782"
+       xlink:href="#linearGradient4702-3-6" />
+    <linearGradient
+       y2="1043.709"
+       x2="80.655251"
+       y1="1025.709"
+       x1="108.08774"
+       gradientTransform="matrix(-0.49726789,0,0,0.49726789,555.31016,722.70088)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3784"
+       xlink:href="#linearGradient4696-5" />
+    <linearGradient
+       y2="69.791016"
+       x2="177.04297"
+       y1="63.65625"
+       x1="142.96875"
+       gradientTransform="matrix(-0.88803314,0,0,0.88803314,595.57001,1106.9291)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3786"
+       xlink:href="#linearGradient4702-3-6" />
+    <filter
+       id="filter9204"
+       style="color-interpolation-filters:sRGB">
+      <feColorMatrix
+         id="feColorMatrix9194"
+         result="colormatrix"
+         values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 -0.2125 -0.7154 -0.0721 1 0 "
+         in="SourceGraphic" />
+      <feComposite
+         k1="0"
+         id="feComposite9196"
+         result="composite"
+         k4="0"
+         k3="0"
+         k2="1"
+         operator="arithmetic"
+         in2="colormatrix"
+         in="SourceGraphic" />
+      <feGaussianBlur
+         id="feGaussianBlur9198"
+         result="blur1"
+         stdDeviation="5 0.01" />
+      <feGaussianBlur
+         id="feGaussianBlur9200"
+         result="blur2"
+         stdDeviation="0.01 5"
+         in="composite" />
+      <feBlend
+         id="feBlend9202"
+         result="blend"
+         mode="darken"
+         in2="blur1"
+         in="blur2" />
+    </filter>
+    <filter
+       id="filter9330"
+       style="color-interpolation-filters:sRGB">
+      <feGaussianBlur
+         id="feGaussianBlur9328"
+         result="blur"
+         stdDeviation="2 2" />
+    </filter>
+  </defs>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title>logo for GNUnet</dc:title>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Luis Felipe López Acevedo, Amirouche Boubekki, carlo von lynX</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:rights>
+          <cc:Agent>
+            <dc:title>GNUnet e.V.</dc:title>
+          </cc:Agent>
+        </dc:rights>
+        <cc:license
+           rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
+        <dc:description />
+      </cc:Work>
+      <cc:License
+         rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Reproduction" />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Distribution" />
+        <cc:requires
+           rdf:resource="http://creativecommons.org/ns#Notice" />
+        <cc:requires
+           rdf:resource="http://creativecommons.org/ns#Attribution" />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+        <cc:requires
+           rdf:resource="http://creativecommons.org/ns#ShareAlike" />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="g5346"
+     style="display:none"
+     transform="translate(-467.72664,-836.92541)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.53852463px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.03365779px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="453.95291"
+       y="869.96057"
+       id="text5344"><tspan
+         id="tspan5342"
+         x="453.95291"
+         y="869.96057"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:49.33333206px;font-family:'Ubuntu Bold';-inkscape-font-specification:'Ubuntu Bold, ';fill:#ffffff;stroke-width:1.03365779px"
+         dx="0 0 0">gnu net</tspan></text>
+  </g>
+  <g
+     transform="translate(-467.72664,-836.92541)"
+     style="display:none"
+     id="g950">
+    <text
+       id="text948"
+       y="869.21057"
+       x="467.77612"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.53852463px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.03365779px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         dx="0 -2.5 -3 0 -19.25 -2.5 -3"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:50.66666794px;font-family:'Anonymous Pro';-inkscape-font-specification:'Anonymous Pro Bold';fill:#ffffff;stroke-width:1.03365779px"
+         y="869.21057"
+         x="467.77612"
+         id="tspan946">gnu net</tspan></text>
+  </g>
+  <g
+     id="g941"
+     style="display:none"
+     transform="translate(-80.31201,-247.1061)">
+    <ellipse
+       ry="17.690269"
+       rx="17.68549"
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#ee0000;stroke-width:1.68696308;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.97635139"
+       id="ellipse937"
+       cx="157.97346"
+       cy="180.65355" />
+    <ellipse
+       ry="17.690269"
+       rx="17.68549"
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#ee0000;stroke-width:1.68696308;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.97635139"
+       id="ellipse939"
+       cx="157.97346"
+       cy="111.16864" />
+  </g>
+  <g
+     transform="translate(-467.72664,-836.92541)"
+     style="display:none"
+     id="g935">
+    <g
+       aria-label="gnu net"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.53852463px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.03365779px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;image-rendering:auto"
+       id="g933">
+      <path
+         d="m 423.90503,684.79003 h 22.14128 v 61.61056 q 0,11.55196 4.3855,16.04443 4.38546,4.49242 12.72857,4.49242 12.19374,0 20.00203,-9.94753 7.80828,-9.94753 7.80828,-27.48942 v -44.71046 h 22.14128 v 99.6893 h -22.14128 v -24.92231 q -3.31586,12.83553 -12.30071,20.10899 -8.98489,7.27346 -22.14132,7.27346 -15.29567,0 -23.95963,-9.94753 -8.664,-10.0545 -8.664,-30.59135 z"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:50.66666794px;font-family:'Anonymous Pro';-inkscape-font-specification:'Anonymous Pro Bold';fill:#ffffff;stroke-width:4.46906853px"
+         id="path925"
+         inkscape:connector-curvature="0" />
+      <path
+         d="m 669.48029,784.47933 h -22.14128 v -61.50359 q 0,-11.65892 -4.3855,-16.15139 -4.38546,-4.49243 -12.72857,-4.49243 -12.30071,0 -20.10899,9.94753 -7.70132,9.94754 -7.70132,27.48947 v 44.71041 h -22.14128 v -99.6893 h 22.14128 v 25.02928 q 3.31586,-12.94249 12.30071,-20.10899 8.98489,-7.27346 22.14132,-7.27346 15.29567,0 23.95967,9.94753 8.66396,9.94753 8.66396,30.59135 z"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:50.66666794px;font-family:'Anonymous Pro';-inkscape-font-specification:'Anonymous Pro Bold';fill:#ffffff;stroke-width:4.46906853px"
+         id="path927"
+         inkscape:connector-curvature="0" />
+    </g>
+  </g>
+  <g
+     id="g1296"
+     style="display:none"
+     transform="translate(-80.31201,-294.38421)">
+    <path
+       style="fill:none;stroke:#dddddd;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 62.698223,85.778107 -39.5,48.000003 v 0 l -1,2"
+       id="path1256"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#dddddd;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 12.698223,104.77811 10,29 21,-10.5 v 0 0"
+       id="path1258"
+       inkscape:connector-curvature="0" />
+    <path
+       style="display:inline;fill:none;fill-rule:evenodd;stroke:#dddddd;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 11.809253,105.24526 63.6227,34.91188 23.31802,-11.09978 -35.03955,28.74946 11.86161,-17.77468 -53.18435,-5.79678 40.95076,23.69646 25.32406,0.49689 24.193047,3.02495 v 48.02104 l 21.04995,-32.14943 -20.559,-15.87161 32.52749,48.02104 -8.06937,31.38386 -24.94907,-31.76198 24.94907,77.51429 22.25436,-36.69889 21.97354,37.07701 -43.59987,-0.37188 41.32877,-28.87448 22.05899,-21.17152 -19.90986,50.171 -3.71591,-29.60613 -8.57843,-31.7682 -9.69437,24.71516 54.37611,-52.19866 -24.96716,8.94671 -18.39175,19.15282 18.27579,-55.07718 25.20812,27.362 20.66591,-41.35238 -46.00204,14.12783 22.94304,-37.07431 23.05297,23.0777 31.8814,-26.48075 40.07874,-25.58708 -15.26372,39.20869 -24.69305,-13.74039 -55.05634,4.03119 79.62738,9.58108 -56.57441,12.73416"
+       id="path1260"
+       inkscape:connector-curvature="0" />
+    <path
+       style="display:inline;fill:none;fill-rule:evenodd;stroke:#dddddd;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 98.868943,129.31358 37.045597,48.02106"
+       id="path1262"
+       inkscape:connector-curvature="0" />
+    <path
+       style="display:inline;fill:none;fill-rule:evenodd;stroke:#dddddd;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 88.284483,158.4287 10.96248,-29.11512 12.474537,32.51819"
+       id="path1264"
+       inkscape:connector-curvature="0" />
+    <path
+       style="display:inline;fill:none;fill-rule:evenodd;stroke:#dddddd;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 212.13974,133.78236 54.69043,-3.64603 -31.75647,27.04795"
+       id="path1266"
+       inkscape:connector-curvature="0" />
+    <path
+       transform="translate(-387.41463,-542.5412)"
+       style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:#dddddd;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 399.11285,648.31931 50.5,-19.5 -14.05,28.1 0.925,-1.725 -5.875,11.75 -0.25,-0.75"
+       id="path1268"
+       inkscape:connector-curvature="0" />
+    <path
+       transform="translate(-387.41463,-542.5412)"
+       style="display:inline;opacity:1;fill:#729fcf;fill-rule:evenodd;stroke:#dddddd;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 601.57854,741.42859 -2.26809,-64.28015"
+       id="path1270"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#dddddd;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 189.57322,206.52811 -44,2.625 25.375,17.125 v 0"
+       id="path1272"
+       inkscape:connector-curvature="0" />
+    <path
+       transform="translate(-387.41463,-542.5412)"
+       style="display:inline;opacity:1;fill:none;fill-rule:evenodd;stroke:#dddddd;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 475.69911,700.21367 24.57107,51.42411"
+       id="path1274"
+       inkscape:connector-curvature="0" />
+    <path
+       transform="translate(-387.41463,-542.5412)"
+       style="display:inline;opacity:1;fill:none;fill-rule:evenodd;stroke:#dddddd;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 534.29164,751.63778 12.85257,40.08057"
+       id="path1276"
+       inkscape:connector-curvature="0" />
+    <path
+       transform="translate(-387.41463,-542.5412)"
+       style="display:inline;opacity:1;fill:none;fill-rule:evenodd;stroke:#dddddd;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 525.21925,783.02162 0.37803,45.75234"
+       id="path1278"
+       inkscape:connector-curvature="0" />
+    <path
+       transform="translate(-387.41463,-542.5412)"
+       style="display:inline;opacity:1;fill:none;fill-rule:evenodd;stroke:#dddddd;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 601.95657,742.56293 -12.09653,36.6775"
+       id="path1280"
+       inkscape:connector-curvature="0" />
+    <path
+       transform="translate(-387.41463,-542.5412)"
+       style="display:inline;opacity:1;fill:none;fill-rule:evenodd;stroke:#dddddd;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 475.69911,700.59178 46.98395,22.0278 10.85256,28.26194"
+       id="path1282"
+       inkscape:connector-curvature="0" />
+    <path
+       transform="translate(-387.41463,-542.5412)"
+       style="display:inline;opacity:1;fill:none;fill-rule:evenodd;stroke:#dddddd;stroke-width:1.58654225px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 589.104,778.86231 -12.85255,-66.17074 v 36.6775 z"
+       id="path1284"
+       inkscape:connector-curvature="0" />
+    <path
+       transform="translate(-387.41463,-542.5412)"
+       style="display:inline;opacity:1;fill:none;fill-rule:evenodd;stroke:#dddddd;stroke-width:1.58654225px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 557.35064,768.27501 31.75336,10.5873"
+       id="path1286"
+       inkscape:connector-curvature="0" />
+    <path
+       transform="translate(-387.41463,-542.5412)"
+       style="display:inline;opacity:1;fill:none;fill-rule:evenodd;stroke:#dddddd;stroke-width:1.58654225px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 500.27018,704.37298 v 48.77728 l 24.57105,30.2495 23.81505,9.45293"
+       id="path1288"
+       inkscape:connector-curvature="0" />
+    <path
+       transform="translate(-387.41463,-542.5412)"
+       style="display:inline;opacity:1;fill:none;fill-rule:evenodd;stroke:#dddddd;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 524.46323,829.53019 44.98392,-0.37812"
+       id="path1290"
+       inkscape:connector-curvature="0" />
+    <path
+       transform="translate(-387.41463,-542.5412)"
+       style="display:inline;opacity:1;fill:none;stroke:#dddddd;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 694.61285,647.31931 -40.285,-17.00922 -4.715,-1.99078 29,57.5 v -0.5 0 h 0.5 v 0"
+       id="path1292"
+       inkscape:connector-curvature="0" />
+    <path
+       transform="translate(-387.41463,-542.5412)"
+       style="display:inline;opacity:1;fill:none;fill-rule:evenodd;stroke:#dddddd;stroke-width:1.58654225px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 409.92428,677.14844 54.05634,6.0499"
+       id="path1294"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     transform="translate(-80.31201,-294.38421)"
+     style="display:none"
+     id="g1254">
+    <ellipse
+       transform="translate(-387.41463,-542.5412)"
+       ry="4.1593032"
+       rx="4.1581793"
+       cy="829.24042"
+       cx="568.98083"
+       id="ellipse1194"
+       style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#eeeeee;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <ellipse
+       transform="translate(-387.41463,-542.5412)"
+       ry="4.1593032"
+       rx="4.1581793"
+       style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#eeeeee;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse1196"
+       cx="588.85413"
+       cy="778.67493" />
+    <ellipse
+       transform="translate(-387.41463,-542.5412)"
+       ry="4.1593032"
+       rx="4.1581793"
+       cy="740.67249"
+       cx="601.57867"
+       id="ellipse1198"
+       style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#eeeeee;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <ellipse
+       transform="translate(-387.41463,-542.5412)"
+       ry="4.1593032"
+       rx="4.1581793"
+       style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#eeeeee;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse1200"
+       cx="525.79852"
+       cy="829.24042" />
+    <ellipse
+       transform="translate(-387.41463,-542.5412)"
+       ry="4.1593032"
+       rx="4.1581793"
+       style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#eeeeee;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse1202"
+       cx="557.82654"
+       cy="768.71582" />
+    <ellipse
+       transform="translate(-387.41463,-542.5412)"
+       ry="4.1593032"
+       rx="4.1581793"
+       cy="783.02173"
+       cx="525.21936"
+       id="ellipse1204"
+       style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#eeeeee;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <ellipse
+       transform="translate(-387.41463,-542.5412)"
+       ry="4.1593032"
+       rx="4.1581793"
+       style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#eeeeee;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse1206"
+       cx="400.09586"
+       cy="647.34271" />
+    <ellipse
+       transform="translate(-387.41463,-542.5412)"
+       ry="4.1593032"
+       rx="4.1581793"
+       style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#eeeeee;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse1208"
+       cx="450.11285"
+       cy="628.31934" />
+    <ellipse
+       transform="translate(-387.41463,-542.5412)"
+       ry="4.1593032"
+       rx="4.1581793"
+       style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#eeeeee;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse1210"
+       cx="622.36951"
+       cy="699.45752" />
+    <ellipse
+       transform="translate(-387.41463,-542.5412)"
+       ry="4.1593032"
+       rx="4.1581793"
+       style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#eeeeee;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse1212"
+       cx="547.21771"
+       cy="792.29773" />
+    <ellipse
+       transform="translate(-387.41463,-542.5412)"
+       ry="4.1593032"
+       rx="4.1581793"
+       style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#eeeeee;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse1214"
+       cx="566.20697"
+       cy="800.12549" />
+    <ellipse
+       transform="translate(-387.41463,-542.5412)"
+       ry="4.1593032"
+       rx="4.1581793"
+       cy="751.63794"
+       cx="500.64822"
+       id="ellipse1216"
+       style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#eeeeee;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <ellipse
+       transform="translate(-387.41463,-542.5412)"
+       ry="4.1593032"
+       rx="4.1581793"
+       style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#eeeeee;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse1218"
+       cx="533.33447"
+       cy="751.72632" />
+    <ellipse
+       transform="translate(-387.41463,-542.5412)"
+       ry="4.1593032"
+       rx="4.1581793"
+       style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#eeeeee;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse1220"
+       cx="450.75012"
+       cy="699.83545" />
+    <ellipse
+       transform="translate(-387.41463,-542.5412)"
+       ry="4.1593032"
+       rx="4.1581793"
+       cy="700.59174"
+       cx="476.07718"
+       id="ellipse1222"
+       style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#eeeeee;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <ellipse
+       transform="translate(-387.41463,-542.5412)"
+       ry="4.1593032"
+       rx="4.1581793"
+       style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#eeeeee;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse1224"
+       cx="521.49146"
+       cy="719.65314" />
+    <ellipse
+       transform="translate(-387.41463,-542.5412)"
+       ry="4.1593032"
+       rx="4.1581793"
+       style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#eeeeee;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse1226"
+       cx="500.6362"
+       cy="703.87305" />
+    <ellipse
+       ry="4.1593032"
+       rx="4.1581793"
+       cy="134.28851"
+       cx="211.9584"
+       id="ellipse1228"
+       style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#eeeeee;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <ellipse
+       transform="translate(-387.41463,-542.5412)"
+       ry="4.1593032"
+       rx="4.1581793"
+       style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#eeeeee;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse1230"
+       cx="576.62964"
+       cy="713.44794" />
+    <ellipse
+       ry="4.1593032"
+       rx="4.1581793"
+       cy="123.16669"
+       cx="43.166531"
+       id="ellipse1232"
+       style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#eeeeee;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <ellipse
+       ry="4.1593032"
+       rx="4.1581793"
+       style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#eeeeee;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse1234"
+       cx="98.865997"
+       cy="129.43542" />
+    <ellipse
+       ry="4.1593032"
+       rx="4.1581793"
+       cy="130.05022"
+       cx="267.08618"
+       id="ellipse1236"
+       style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#eeeeee;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <ellipse
+       transform="translate(-387.41463,-542.5412)"
+       ry="4.1593032"
+       rx="4.1581793"
+       style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#eeeeee;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse1238"
+       cx="679.07196"
+       cy="686.22339" />
+    <ellipse
+       transform="translate(-387.41463,-542.5412)"
+       ry="4.1593032"
+       rx="4.1581793"
+       cy="748.99109"
+       cx="577.00763"
+       id="ellipse1240"
+       style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#eeeeee;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <ellipse
+       transform="translate(-387.41463,-542.5412)"
+       ry="4.1593032"
+       rx="4.1581793"
+       style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#eeeeee;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse1242"
+       cx="577.00763"
+       cy="748.99109" />
+    <ellipse
+       transform="translate(-387.41463,-542.5412)"
+       ry="4.1593032"
+       rx="4.1581793"
+       cy="748.99109"
+       cx="577.07013"
+       id="ellipse1244"
+       style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#eeeeee;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <ellipse
+       transform="translate(0,-3e-6)"
+       ry="4.1593032"
+       rx="4.1581793"
+       cy="133.85095"
+       cx="22.887779"
+       id="ellipse1246"
+       style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#eeeeee;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <ellipse
+       transform="translate(-387.41463,-542.5412)"
+       ry="4.1593032"
+       rx="4.1581793"
+       cy="682.1922"
+       cx="462.47165"
+       id="ellipse1248"
+       style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#eeeeee;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <ellipse
+       transform="translate(-387.41463,-542.5412)"
+       ry="4.1593032"
+       rx="4.1581793"
+       cy="647.3053"
+       cx="694.58264"
+       id="ellipse1250"
+       style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#eeeeee;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <ellipse
+       transform="translate(-387.41463,-542.5412)"
+       ry="4.1593032"
+       rx="4.1581793"
+       style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#eeeeee;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse1252"
+       cx="649.61285"
+       cy="628.31934" />
+  </g>
+  <g
+     id="g1539"
+     style="display:inline"
+     transform="translate(-80.31201,-247.1061)">
+    <ellipse
+       ry="4.1593032"
+       rx="4.1581793"
+       style="display:inline;opacity:1;fill:#3399cc;fill-opacity:1;stroke:#3399cc;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse1535"
+       cx="159.80099"
+       cy="276.32968" />
+    <ellipse
+       ry="4.1593032"
+       rx="4.1581793"
+       style="display:inline;opacity:1;fill:#3399cc;fill-opacity:1;stroke:#3399cc;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse1537"
+       cx="159.80099"
+       cy="259.99252" />
+  </g>
+  <g
+     transform="translate(-80.31201,-294.38421)"
+     style="display:none"
+     id="layer3">
+    <path
+       id="path5313"
+       d="m 62.698223,85.778107 -39.5,48.000003 v 0 l -1,2"
+       style="fill:none;stroke:#cc0000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path5311"
+       d="m 12.698223,104.77811 10,29 21,-10.5 v 0 0"
+       style="fill:none;stroke:#cc0000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path9316"
+       d="m 11.809253,105.24526 63.6227,34.91188 23.31802,-11.09978 -35.03955,28.74946 11.86161,-17.77468 -53.18435,-5.79678 40.95076,23.69646 25.32406,0.49689 24.193047,3.02495 v 48.02104 l 21.04995,-32.14943 -20.559,-15.87161 32.52749,48.02104 -8.06937,31.38386 -24.94907,-31.76198 24.94907,77.51429 22.25436,-36.69889 21.97354,37.07701 -43.59987,-0.37188 41.32877,-28.87448 22.05899,-21.17152 -19.90986,50.171 -3.71591,-29.60613 -8.57843,-31.7682 -9.69437,24.71516 54.37611,-52.19866 -24.96716,8.94671 -18.39175,19.15282 18.27579,-55.07718 25.20812,27.362 20.66591,-41.35238 -46.00204,14.12783 22.94304,-37.07431 23.05297,23.0777 31.8814,-26.48075 40.07874,-25.58708 -15.26372,39.20869 -24.69305,-13.74039 -55.05634,4.03119 79.62738,9.58108 -56.57441,12.73416"
+       style="display:inline;fill:none;fill-rule:evenodd;stroke:#cc0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path9318"
+       d="m 98.868943,129.31358 37.045597,48.02106"
+       style="display:inline;fill:none;fill-rule:evenodd;stroke:#cc0000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path12058"
+       d="m 88.284483,158.4287 10.96248,-29.11512 12.474537,32.51819"
+       style="display:inline;fill:none;fill-rule:evenodd;stroke:#cc0000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path12250"
+       d="m 212.13974,133.78236 54.69043,-3.64603 -31.75647,27.04795"
+       style="display:inline;fill:none;fill-rule:evenodd;stroke:#cc0000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path5161"
+       d="m 399.11285,648.31931 50.5,-19.5 -14.05,28.1 0.925,-1.725 -5.875,11.75 -0.25,-0.75"
+       style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:#cc0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+       transform="translate(-387.41463,-542.5412)"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path12206"
+       d="m 601.57854,741.42859 -2.26809,-64.28015"
+       style="display:inline;opacity:1;fill:#729fcf;fill-rule:evenodd;stroke:#cc0000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+       transform="translate(-387.41463,-542.5412)"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path5331"
+       d="m 189.57322,206.52811 -44,2.625 25.375,17.125 v 0"
+       style="fill:none;stroke:#cc0000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path9320"
+       d="m 475.69911,700.21367 24.57107,51.42411"
+       style="display:inline;opacity:1;fill:none;fill-rule:evenodd;stroke:#cc0000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+       transform="translate(-387.41463,-542.5412)"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path9322"
+       d="m 534.29164,751.63778 12.85257,40.08057"
+       style="display:inline;opacity:1;fill:none;fill-rule:evenodd;stroke:#cc0000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+       transform="translate(-387.41463,-542.5412)"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path9324"
+       d="m 525.21925,783.02162 0.37803,45.75234"
+       style="display:inline;opacity:1;fill:none;fill-rule:evenodd;stroke:#cc0000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+       transform="translate(-387.41463,-542.5412)"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path9326"
+       d="m 601.95657,742.56293 -12.09653,36.6775"
+       style="display:inline;opacity:1;fill:none;fill-rule:evenodd;stroke:#cc0000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+       transform="translate(-387.41463,-542.5412)"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path12060"
+       d="m 475.69911,700.59178 46.98395,22.0278 10.85256,28.26194"
+       style="display:inline;opacity:1;fill:none;fill-rule:evenodd;stroke:#cc0000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+       transform="translate(-387.41463,-542.5412)"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path12208"
+       d="m 589.104,778.86231 -12.85255,-66.17074 v 36.6775 z"
+       style="display:inline;opacity:1;fill:none;fill-rule:evenodd;stroke:#cc0000;stroke-width:1.58654225px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.99607843"
+       transform="translate(-387.41463,-542.5412)"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path12210"
+       d="m 557.35064,768.27501 31.75336,10.5873"
+       style="display:inline;opacity:1;fill:none;fill-rule:evenodd;stroke:#cc0000;stroke-width:1.58654225px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.99607843"
+       transform="translate(-387.41463,-542.5412)"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path12212"
+       d="m 500.27018,704.37298 v 48.77728 l 24.57105,30.2495 23.81505,9.45293"
+       style="display:inline;opacity:1;fill:none;fill-rule:evenodd;stroke:#cc0000;stroke-width:1.58654225px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.99607843"
+       transform="translate(-387.41463,-542.5412)"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path12216"
+       d="m 524.46323,829.53019 44.98392,-0.37812"
+       style="display:inline;opacity:1;fill:none;fill-rule:evenodd;stroke:#cc0000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+       transform="translate(-387.41463,-542.5412)"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path5163"
+       d="m 694.61285,647.31931 -40.285,-17.00922 -4.715,-1.99078 29,57.5 v -0.5 0 h 0.5 v 0"
+       style="display:inline;opacity:1;fill:none;stroke:#cc0000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.99607843"
+       transform="translate(-387.41463,-542.5412)"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path12214"
+       d="m 409.92428,677.14844 54.05634,6.0499"
+       style="display:inline;opacity:1;fill:none;fill-rule:evenodd;stroke:#cc0000;stroke-width:1.58654225px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.99607843"
+       transform="translate(-387.41463,-542.5412)"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     id="g325"
+     style="display:none"
+     transform="translate(-80.31201,-294.38421)">
+    <ellipse
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#cc0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse12254"
+       cx="568.98083"
+       cy="829.24042"
+       rx="4.1581793"
+       ry="4.1593032"
+       transform="translate(-387.41463,-542.5412)" />
+    <ellipse
+       cy="778.67493"
+       cx="588.85413"
+       id="ellipse12290"
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#cc0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       rx="4.1581793"
+       ry="4.1593032"
+       transform="translate(-387.41463,-542.5412)" />
+    <ellipse
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#cc0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse12284"
+       cx="601.57867"
+       cy="740.67249"
+       rx="4.1581793"
+       ry="4.1593032"
+       transform="translate(-387.41463,-542.5412)" />
+    <ellipse
+       cy="829.24042"
+       cx="525.79852"
+       id="ellipse12256"
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#cc0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       rx="4.1581793"
+       ry="4.1593032"
+       transform="translate(-387.41463,-542.5412)" />
+    <ellipse
+       cy="768.71582"
+       cx="557.82654"
+       id="ellipse12306"
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#cc0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       rx="4.1581793"
+       ry="4.1593032"
+       transform="translate(-387.41463,-542.5412)" />
+    <ellipse
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#cc0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse12280"
+       cx="525.21936"
+       cy="783.02173"
+       rx="4.1581793"
+       ry="4.1593032"
+       transform="translate(-387.41463,-542.5412)" />
+    <ellipse
+       cy="647.34271"
+       cx="400.09586"
+       id="ellipse12258"
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#cc0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       rx="4.1581793"
+       ry="4.1593032"
+       transform="translate(-387.41463,-542.5412)" />
+    <ellipse
+       cy="628.31934"
+       cx="450.11285"
+       id="ellipse12258-3"
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#cc0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       rx="4.1581793"
+       ry="4.1593032"
+       transform="translate(-387.41463,-542.5412)" />
+    <ellipse
+       cy="699.45752"
+       cx="622.36951"
+       id="ellipse12294"
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#cc0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       rx="4.1581793"
+       ry="4.1593032"
+       transform="translate(-387.41463,-542.5412)" />
+    <ellipse
+       cy="792.29773"
+       cx="547.21771"
+       id="ellipse12252"
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#cc0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       rx="4.1581793"
+       ry="4.1593032"
+       transform="translate(-387.41463,-542.5412)" />
+    <ellipse
+       cy="800.12549"
+       cx="566.20697"
+       id="ellipse12282"
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#cc0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       rx="4.1581793"
+       ry="4.1593032"
+       transform="translate(-387.41463,-542.5412)" />
+    <ellipse
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#cc0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse12276"
+       cx="500.64822"
+       cy="751.63794"
+       rx="4.1581793"
+       ry="4.1593032"
+       transform="translate(-387.41463,-542.5412)" />
+    <ellipse
+       cy="751.72632"
+       cx="533.33447"
+       id="ellipse12278"
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#cc0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       rx="4.1581793"
+       ry="4.1593032"
+       transform="translate(-387.41463,-542.5412)" />
+    <ellipse
+       cy="699.83545"
+       cx="450.75012"
+       id="ellipse12262"
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#cc0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       rx="4.1581793"
+       ry="4.1593032"
+       transform="translate(-387.41463,-542.5412)" />
+    <ellipse
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#cc0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse12268"
+       cx="476.07718"
+       cy="700.59174"
+       rx="4.1581793"
+       ry="4.1593032"
+       transform="translate(-387.41463,-542.5412)" />
+    <ellipse
+       cy="719.65314"
+       cx="521.49146"
+       id="ellipse12270"
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#cc0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       rx="4.1581793"
+       ry="4.1593032"
+       transform="translate(-387.41463,-542.5412)" />
+    <ellipse
+       cy="703.87305"
+       cx="500.6362"
+       id="ellipse12274"
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#cc0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       rx="4.1581793"
+       ry="4.1593032"
+       transform="translate(-387.41463,-542.5412)" />
+    <ellipse
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#cc0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse12292"
+       cx="211.9584"
+       cy="134.28851"
+       rx="4.1581793"
+       ry="4.1593032" />
+    <ellipse
+       cy="713.44794"
+       cx="576.62964"
+       id="ellipse12286"
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#cc0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       rx="4.1581793"
+       ry="4.1593032"
+       transform="translate(-387.41463,-542.5412)" />
+    <ellipse
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#cc0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse12260"
+       cx="43.166531"
+       cy="123.16669"
+       rx="4.1581793"
+       ry="4.1593032" />
+    <ellipse
+       cy="129.43542"
+       cx="98.865997"
+       id="ellipse12266"
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#cc0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       rx="4.1581793"
+       ry="4.1593032" />
+    <ellipse
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#cc0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse12296"
+       cx="267.08618"
+       cy="130.05022"
+       rx="4.1581793"
+       ry="4.1593032" />
+    <ellipse
+       cy="686.22339"
+       cx="679.07196"
+       id="ellipse12298"
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#cc0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       rx="4.1581793"
+       ry="4.1593032"
+       transform="translate(-387.41463,-542.5412)" />
+    <ellipse
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#cc0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse12288"
+       cx="577.00763"
+       cy="748.99109"
+       rx="4.1581793"
+       ry="4.1593032"
+       transform="translate(-387.41463,-542.5412)" />
+    <ellipse
+       cy="748.99109"
+       cx="577.00763"
+       id="ellipse12302"
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#cc0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       rx="4.1581793"
+       ry="4.1593032"
+       transform="translate(-387.41463,-542.5412)" />
+    <ellipse
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#cc0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse12304"
+       cx="577.07013"
+       cy="748.99109"
+       rx="4.1581793"
+       ry="4.1593032"
+       transform="translate(-387.41463,-542.5412)" />
+    <ellipse
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#cc0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse12264"
+       cx="22.887779"
+       cy="133.85095"
+       rx="4.1581793"
+       ry="4.1593032"
+       transform="translate(0,-3e-6)" />
+    <ellipse
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#cc0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse12272"
+       cx="462.47165"
+       cy="682.1922"
+       rx="4.1581793"
+       ry="4.1593032"
+       transform="translate(-387.41463,-542.5412)" />
+    <ellipse
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#cc0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="ellipse12300"
+       cx="694.58264"
+       cy="647.3053"
+       rx="4.1581793"
+       ry="4.1593032"
+       transform="translate(-387.41463,-542.5412)" />
+    <ellipse
+       cy="628.31934"
+       cx="649.61285"
+       id="ellipse12258-3-0"
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#cc0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       rx="4.1581793"
+       ry="4.1593032"
+       transform="translate(-387.41463,-542.5412)" />
+  </g>
+  <g
+     transform="translate(-80.31201,-247.1061)"
+     style="display:none"
+     id="layer6">
+    <ellipse
+       cy="276.32968"
+       cx="159.80099"
+       id="ellipse12282-8-9-0"
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#ee0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.97635139"
+       rx="4.1581793"
+       ry="4.1593032" />
+    <ellipse
+       cy="259.99252"
+       cx="159.80099"
+       id="ellipse12282-8-9"
+       style="display:inline;opacity:1;fill:#ee0000;fill-opacity:1;stroke:#ee0000;stroke-width:0.39663559;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.97635139"
+       rx="4.1581793"
+       ry="4.1593032" />
+  </g>
+  <g
+     id="g975"
+     style="display:inline"
+     transform="translate(-467.72664,-836.92541)">
+    <g
+       id="text973"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.53852463px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.03365779px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;image-rendering:auto"
+       aria-label="gnu net">
+      <path
+         id="path977"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:50.66666794px;font-family:'Anonymous Pro';-inkscape-font-specification:'Anonymous Pro Bold';fill:#292929;fill-opacity:1;stroke-width:1.03365779px"
+         d="m 489.62118,868.96318 q 0,2.375 -0.81641,4.23046 -0.81641,1.85547 -2.30078,3.14193 -1.45964,1.28646 -3.46354,1.95443 -1.97917,0.69271 -4.42839,0.69271 -6.01172,0 -10.26693,-3.63672 l 2.42448,-3.95834 q 3.53776,3.04297 7.84245,3.04297 2.64714,0 4.25521,-1.31119 1.63281,-1.28646 1.63281,-4.0573 v -2.47395 q -1.58333,1.36067 -3.04297,2.02864 -1.45963,0.64323 -3.38932,0.64323 -2.22656,0 -4.13151,-0.9401 -1.90495,-0.94011 -3.29037,-2.54818 -1.36067,-1.63281 -2.15234,-3.78516 -0.76693,-2.15234 -0.76693,-4.57682 0,-2.42448 0.76693,-4.57682 0.79167,-2.17709 2.15234,-3.76042 1.38542,-1.60807 3.29037,-2.52344 1.90495,-0.9401 4.13151,-0.9401 1.92969,0 3.4388,0.66797 1.50912,0.64323 2.99349,1.95442 v -2.07812 h 5.1211 z m -5.1211,-16.67448 q -0.91536,-1.01433 -2.375,-1.53386 -1.43489,-0.54427 -2.79557,-0.54427 -2.89453,0 -4.70052,2.02865 -1.78125,2.02864 -1.78125,5.17057 0,1.55859 0.47005,2.89453 0.49479,1.3112 1.33594,2.27604 0.86588,0.96485 2.05338,1.53386 1.21224,0.54427 2.6224,0.54427 1.36068,0 2.79557,-0.54427 1.45964,-0.56901 2.375,-1.58334 z"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path979"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:50.66666794px;font-family:'Anonymous Pro';-inkscape-font-specification:'Anonymous Pro Bold';fill:#292929;fill-opacity:1;stroke-width:1.03365779px"
+         d="m 514.82951,869.21057 h -5.12109 v -14.22526 q 0,-2.69661 -1.01433,-3.73568 -1.01432,-1.03906 -2.94401,-1.03906 -2.84505,0 -4.65104,2.30078 -1.78125,2.30078 -1.78125,6.35808 v 10.34114 h -5.12109 v -23.05729 h 5.12109 v 5.78906 q 0.76693,-2.99349 2.84505,-4.65104 2.07813,-1.68229 5.1211,-1.68229 3.53776,0 5.54166,2.30078 2.00391,2.30078 2.00391,7.07552 z"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path981"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:50.66666794px;font-family:'Anonymous Pro';-inkscape-font-specification:'Anonymous Pro Bold';fill:#292929;fill-opacity:1;stroke-width:1.03365779px"
+         d="m 518.90503,846.15328 h 5.12109 v 14.25 q 0,2.67187 1.01433,3.71094 1.01432,1.03906 2.94401,1.03906 2.82031,0 4.6263,-2.30078 1.80599,-2.30078 1.80599,-6.35807 v -10.34115 h 5.12109 v 23.05729 h -5.12109 v -5.76432 q -0.76693,2.96875 -2.84505,4.65104 -2.07813,1.68229 -5.1211,1.68229 -3.53776,0 -5.54166,-2.30078 -2.00391,-2.32552 -2.00391,-7.07552 z"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path983"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:50.66666794px;font-family:'Anonymous Pro';-inkscape-font-specification:'Anonymous Pro Bold';fill:#292929;fill-opacity:1;stroke-width:1.03365779px"
+         d="m 575.70451,869.21057 h -5.12109 v -14.22526 q 0,-2.69661 -1.01433,-3.73568 -1.01432,-1.03906 -2.94401,-1.03906 -2.84505,0 -4.65104,2.30078 -1.78125,2.30078 -1.78125,6.35808 v 10.34114 h -5.12109 v -23.05729 h 5.12109 v 5.78906 q 0.76693,-2.99349 2.84505,-4.65104 2.07813,-1.68229 5.1211,-1.68229 3.53776,0 5.54167,2.30078 2.0039,2.30078 2.0039,7.07552 z"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path985"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:50.66666794px;font-family:'Anonymous Pro';-inkscape-font-specification:'Anonymous Pro Bold';fill:#292929;fill-opacity:1;stroke-width:1.03365779px"
+         d="m 583.76832,859.63635 q 0.37109,2.375 2.2513,3.95834 1.90495,1.55859 5.09635,1.55859 2.4987,0 4.32943,-0.76693 1.85547,-0.79166 3.19141,-2.07812 l 2.62239,3.61198 q -2.22656,2.22656 -4.72526,3.04297 -2.47396,0.8164 -5.41797,0.8164 -2.67187,0 -4.97265,-0.89062 -2.30079,-0.89063 -3.98308,-2.47396 -1.68229,-1.60807 -2.64713,-3.8099 -0.94011,-2.20182 -0.94011,-4.89844 0,-2.62239 0.86589,-4.82421 0.89062,-2.22657 2.47396,-3.83464 1.60807,-1.63281 3.83463,-2.52344 2.22657,-0.91536 4.92318,-0.91536 2.79557,0 5.07161,0.96484 2.27605,0.94011 3.88412,2.7461 1.63281,1.80599 2.54818,4.42838 0.91536,2.59766 0.91536,5.88802 z m 13.53255,-4.5026 q -0.39584,-2.22656 -2.30078,-3.5625 -1.90495,-1.36068 -4.32943,-1.36068 -2.42448,0 -4.35417,1.36068 -1.92968,1.33594 -2.32552,3.5625 z"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path987"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:50.66666794px;font-family:'Anonymous Pro';-inkscape-font-specification:'Anonymous Pro Bold';fill:#292929;fill-opacity:1;stroke-width:1.03365779px"
+         d="m 627.08081,861.86291 q -0.39583,3.63672 -2.86979,5.78907 -2.44922,2.1276 -6.13542,2.1276 -2.02864,0 -3.71094,-0.66797 -1.68229,-0.66797 -2.86979,-1.85547 -1.1875,-1.1875 -1.85547,-2.84505 -0.64322,-1.68229 -0.64322,-3.66146 v -9.97005 h -5.22006 v -4.6263 h 5.22006 v -9.22787 h 5.12109 v 9.22787 h 9.67318 v 4.6263 h -9.67318 v 9.97005 q 0,2.22657 1.08854,3.31511 1.08854,1.08854 2.86979,1.08854 2.17709,0 3.24089,-1.26172 1.0638,-1.26172 1.26172,-3.04297 z"
+         inkscape:connector-curvature="0" />
+    </g>
+  </g>
+</svg>
diff --git a/contrib/gnunet.rb b/contrib/gnunet.rb
new file mode 100644 (file)
index 0000000..94625e6
--- /dev/null
@@ -0,0 +1,47 @@
+class Gnunet < Formula
+  desc "GNUnet"
+  homepage "https://gnunet.org/"
+  #url "http://ftpmirror.gnu.org/gnunet/gnunet-0.11.0pre66.tar.gz"
+  head do
+    url "https://gnunet.org/git/gnunet.git"
+    depends_on "automake"
+  end
+  mirror "http://ftpmirror.gnu.org/gnunet/gnunet-0.11.0pre66.tar.gz"
+  sha256 "07ed1e456c0cc982fe4c6d335eb2fd41820eb24dcf1c9abc93dad868aa72edbf"
+
+  #bottle do
+  #  cellar :any
+  #  sha256 "7507da89370f72be8fb22d1932524295231904a2a180ff0bfc4a14d3bd496e31" => :mojave
+  #  sha256 "3bdf1fbe152231ba3a9cd19445c242cfb14140fa942a1df03af5c69754e09225" => :high_sierra
+  #  sha256 "6dec32c6b29e69d051edd1220bc040cb01911cd20220687dd09bf6e76317b42a" => :sierra
+  #end
+
+  depends_on "pkg-config" => :build
+  depends_on "glpk"
+  depends_on "gettext"
+  depends_on "gnutls"
+  depends_on "jansson"
+  depends_on "libextractor"
+  depends_on "libgcrypt"
+  depends_on "libffi"
+  depends_on "libidn2"
+  depends_on "libmicrohttpd"
+  depends_on "libmpc"
+  depends_on "libunistring"
+  depends_on "unbound"
+
+  def install
+    args = %W[
+      --disable-documentation
+      --prefix=#{prefix}
+    ]
+
+    system "./bootstrap" if build.head?
+    system "./configure", *args
+    system "make", "install"
+  end
+
+  test do
+    system bin/"gnutls-arm", "--version"
+  end
+end
index f17cb7636e2ed08fb1da6f728c7be06306e68563..e7d9caa7eae2a1e329e158fbac9c0133c906bd93 100755 (executable)
@@ -24,6 +24,22 @@ else
   echo "gcc            : Not Found";
 fi
 
+TEST=`$WHICH cc 2>/dev/null`
+if test -n "$TEST"; then
+  VERS=`cc --version 2>/dev/null | head -n 1`
+  echo "cc             : $VERS"
+else
+  echo "cc             : Not Found";
+fi
+
+TEST=`$WHICH c++ 2>/dev/null`
+if test -n "$TEST"; then
+  VERS=`c++ --version 2>/dev/null | head -n 1`
+  echo "c++            : $VERS"
+else
+  echo "c++            : Not Found";
+fi
+
 TEST=`$WHICH gmake 2>/dev/null`
 if test -n "$TEST" ; then
        gmake --version 2>/dev/null |\
@@ -176,6 +192,16 @@ else
   fi
 fi
 
+TEST=`$WHICH pkg_add 2> /dev/null`
+if test -n "$TEST"; then
+  VERSION_UNISTRING=`pkg_info -Nb libunistring`
+  VERSION_GMP=`pkg_info -Nb gmp`
+  echo "libunistring     :"
+  echo "$VERSION_UNISTRING"
+  echo "GMP              :"
+  echo "$VERSION_GMP"
+fi
+
 TEST=`$WHICH gettext 2> /dev/null`
 if test -n "$TEST"; then
   gettext --version | head -n1 2> /dev/null | \
index c602115563711f7e17d689af1c21d1a8bb5d6456..1f5a0726c79b5b8fca2302c867f3750364e40a94 100755 (executable)
 # Brief:   Computes GNUNET style Content Hash Key for a given file
 # Author:  Sree Harsha Totakura
 
+from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
+from builtins import object
 from hashlib import sha512
 import logging
 import os
@@ -90,7 +96,7 @@ def sha512_hash(data):
     return hash_obj.digest()
 
 
-class AESKey:
+class AESKey(object):
     """Class for AES Keys. Contains the main key and the initialization
     vector. """
 
@@ -177,7 +183,7 @@ def aes_decrypt(aes_key, data):
     return ptext
 
 
-class Chk:
+class Chk(object):
     """Class for the content hash key."""
     key = None
     query = None
@@ -248,7 +254,7 @@ def compute_chk_offset_(depth, end_offset):
     bds = compute_tree_size_(depth)
     if (depth > 0):
         end_offset -= 1
-    ret = end_offset / bds
+    ret = old_div(end_offset, bds)
     return ret % CHK_PER_INODE
 
 
@@ -272,7 +278,7 @@ def compute_iblock_size_(depth, offset):
         ret = CHK_PER_INODE
     else:
         bds /= CHK_PER_INODE
-        ret = mod / bds
+        ret = old_div(mod, bds)
         if (mod % bds) is not 0:
             ret += 1
     return ret
index 810d5b3217048129fe2d340a61906cbf542d5ea8..4202da8d008bda55b6fede4a9306ffaaf4a3eae3 100644 (file)
@@ -19,6 +19,7 @@
 #
 # Testcase for gnunet-peerinfo
 from __future__ import print_function
+from builtins import object
 import os
 import re
 import subprocess
index 10145371c32e195e19a3eac99bd06461e8af84dc..1dbe856db064967bdad3351a8ab755c765fa5592 100644 (file)
@@ -1,4 +1,5 @@
 #!@PYTHON@
+from __future__ import print_function
 import os
 import sys
 import difflib
@@ -23,7 +24,7 @@ def dc_getdiff(dc, old, new):
     for f in dc.diff_files:
         r = getdiff(os.path.join(old, f), os.path.join(new, f))
         diff.extend(r)
-    for dn, dc in dc.subdirs.items():
+    for dn, dc in list(dc.subdirs.items()):
         r = dc_getdiff(dc, os.path.join(old, dn), os.path.join(new, dn))
         diff.extend(r)
     return diff
index 1f799797aca58afa6aba8dc934469baf3de92c4c..8d05bdc418f20cd7e3c4d0dbadb0d06dcabaef48 100755 (executable)
@@ -43,7 +43,7 @@ do
 done
 echo "================END====================" >> regression.$H
 
-if [ $KEEP == 0]
+if [ $KEEP = 0]
 then
   rm regression.$H.$RUN*
   rm regression.$H
index 161b4db61c0ad1ec6a66bba67b6ccdeb9a2432f2..9ed356502401acd1c668d04be5f9f636882882db 100644 (file)
@@ -21,6 +21,7 @@
 # For other platforms it's equivalent to Popen.kill ()
 # Requires pywin32 on W32.
 
+from builtins import object
 import sys
 import subprocess
 import os
index c91f2de94318a82749929732192855aefd8df29f..aee00e3b72733ce7cdd4b483e22f1dc1f0d0456e 100644 (file)
@@ -1,4 +1,4 @@
 [flake8]
 max-line-length = 160
-exclude = .git
+exclude = .git *.bak
 filename = *.py*
\ No newline at end of file
index f490c3412ad527f5c2109277943955846227c65d..80ac74ea05b8812614612d50adab06fb8df5310b 100644 (file)
@@ -7,3 +7,5 @@ manual
 *.pg
 *.tp
 *.vr
+gnunet 
+gnunet.html
index 1be5d1da7bac29466d3504c103773c12dfe733f3..120f63297f25a54abad6670086bec04915d3a841 100644 (file)
@@ -96,9 +96,12 @@ gnunet_TEXINFOS =                                            \
 EXTRA_DIST =                                                   \
        $(gnunet_TEXINFOS)                                      \
        htmlxref.cnf                                            \
-       gversion.texi
+       gversion.texi                                           \
        run-gendocs.sh                                          \
-       docstyle.css
+       docstyle.css                                            \
+        manual.css                                              \
+        reset.css                                               \
+        style.css
 
 
 #      $(DOT_FILES)                                                            \
index a1b5583cb172716b3749efd0970f7a11a57b6fea..cd81fcfb7c2c25d5a97dab5a4a3868cc241cb5c3 100644 (file)
@@ -100,7 +100,7 @@ following links:
 @itemize @bullet
 @item @xref{Top, Introduction,, gnunet-c-tutorial, The GNUnet C Tutorial}.
 @c broken link
-@c @item @uref{https://gnunet.org/git/gnunet.git/plain/doc/gnunet-c-tutorial.pdf, GNUnet C tutorial}
+@c @item @uref{https://git.gnunet.org/gnunet.git/plain/doc/gnunet-c-tutorial.pdf, GNUnet C tutorial}
 @item GNUnet Java tutorial
 @end itemize
 
@@ -124,7 +124,7 @@ The public subsystems on the GNUnet server that help developers are:
 
 @item The version control system (git) keeps our code and enables
 distributed development.
-It is publicly accessible at @uref{https://gnunet.org/git/}.
+It is publicly accessible at @uref{https://git.gnunet.org/}.
 Only developers with write access can commit code, everyone else is
 encouraged to submit patches to the GNUnet-developers mailinglist:
 @uref{https://lists.gnu.org/mailman/listinfo/gnunet-developers, https://lists.gnu.org/mailman/listinfo/gnunet-developers}
@@ -133,14 +133,14 @@ encouraged to submit patches to the GNUnet-developers mailinglist:
 We use it to track feature requests, open bug reports and their
 resolutions.
 It can be accessed at
-@uref{https://gnunet.org/bugs/, https://gnunet.org/bugs/}.
+@uref{https://bugs.gnunet.org/, https://bugs.gnunet.org/}.
 Anyone can report bugs.
 
 @item Our site installation of the
 Continuous Integration (CI) system @code{Buildbot} is used
 to check GNUnet builds automatically on a range of platforms.
 The web interface of this CI is exposed at
-@uref{https://gnunet.org/buildbot/, https://gnunet.org/buildbot/}.
+@uref{https://old.gnunet.org/buildbot/, https://old.gnunet.org/buildbot/}.
 Builds are triggered automatically 30 minutes after the last commit to
 our repository was made.
 
@@ -1098,7 +1098,7 @@ development of GNUnet services, command line tools, APIs and tests.
 First of all you have to obtain gnunet-ext from git:
 
 @example
-git clone https://gnunet.org/git/gnunet-ext.git
+git clone https://git.gnunet.org/gnunet-ext.git
 @end example
 
 The next step is to bootstrap and configure it. For configure you have to
@@ -1905,7 +1905,7 @@ topology where peer connectivity follows power law - new peers are
 connected with high probability to well connected peers.
 (See Emergence of Scaling in Random Networks. Science 286,
 509-512, 1999
-(@uref{https://gnunet.org/git/bibliography.git/plain/docs/emergence_of_scaling_in_random_networks__barabasi_albert_science_286__1999.pdf, pdf}))
+(@uref{https://git.gnunet.org/bibliography.git/plain/docs/emergence_of_scaling_in_random_networks__barabasi_albert_science_286__1999.pdf, pdf}))
 
 @item @code{GNUNET_TESTBED_TOPOLOGY_FROM_FILE}: The topology information
 is loaded from a file. The path to the file has to be given.
@@ -2133,8 +2133,8 @@ To automate the GNUnet we created a set of automation tools to simplify
 the large-scale deployment. We provide you a set of scripts you can use
 to deploy GNUnet on a set of nodes and manage your installation.
 
-Please also check @uref{https://gnunet.org/installation-fedora8-svn} and
-@uref{https://gnunet.org/installation-fedora12-svn} to find detailed
+Please also check @uref{https://old.gnunet.org/installation-fedora8-svn} and
+@uref{https://old.gnunet.org/installation-fedora12-svn} to find detailed
 instructions how to install GNUnet on a PlanetLab node.
 
 
@@ -2300,7 +2300,7 @@ subsystem.
 @subsubsection CORE must be started
 
 A uncomplicated issue is bug #3993
-(@uref{https://gnunet.org/bugs/view.php?id=3993, https://gnunet.org/bugs/view.php?id=3993}):
+(@uref{https://bugs.gnunet.org/view.php?id=3993, https://bugs.gnunet.org/view.php?id=3993}):
 Your configuration MUST somehow ensure that for each peer the
 @code{CORE} service is started when the peer is setup, otherwise
 @code{TESTBED} may fail to connect peers when the topology is initialized,
@@ -2747,7 +2747,8 @@ code.
 
 Since now activating DEBUG automatically makes it VERBOSE and activates
 @strong{all} debug messages by default, you probably want to use the
-https://gnunet.org/logging functionality to filter only relevant messages.
+@uref{https://old.gnunet.org/logging, https://old.gnunet.org/logging}
+functionality to filter only relevant messages.
 A suitable configuration could be:
 
 @example
@@ -8674,7 +8675,7 @@ eliminate the need to first create a directory.
 
 Collections are also advertised using @code{KSBlock}s.
 
-@c https://gnunet.org/sites/default/files/ecrs.pdf
+@c https://old.gnunet.org/sites/default/files/ecrs.pdf
 
 @node File-sharing persistence directory structure
 @subsection File-sharing persistence directory structure
@@ -8794,7 +8795,7 @@ The gnunet-regex-profiler can be used to profile the usage of mesh/regex
 for a given set of regular expressions and strings.
 Mesh/regex allows you to announce your peer ID under a certain regex and
 search for peers matching a particular regex using a string.
-See @uref{https://gnunet.org/szengel2012ms, szengel2012ms} for a full
+See @uref{https://old.gnunet.org/szengel2012ms, szengel2012ms} for a full
 introduction.
 
 First of all, the regex profiler uses GNUnet testbed, thus all the
index c41c7c7db7d5262071ea2c7b257937185eccca4b..9cd2b1bcc3c4d78f02214a3d9ec98791a3bf6f25 100644 (file)
@@ -75,11 +75,11 @@ git installed) or as an archive.
 
 Using git type
 @example
-git clone https://gnunet.org/git/gnunet.git
+git clone https://git.gnunet.org/gnunet.git
 @end example
 
 The archive can be found at
-@uref{https://gnunet.org/downloads}. Extract it using a graphical
+@uref{https://ftpmirror.gnu.org/gnu/gnunet/}. Extract it using a graphical
 archive tool or @code{tar}:
 @example
 tar xzvf gnunet-0.11.0pre66.tar.gz
@@ -1708,7 +1708,7 @@ will take the serial as a reference point and request the zone. The server will
 either answer the IXFR request with a correct incremental zone or with the
 entire zone, which depends on the server configuration.
 
-You can find the source code here: @code{https://gnunet.org/git/ascension.git/}
+You can find the source code here: @code{https://git.gnunet.org/ascension.git/}
 
 The software can be installed into a Python virtual environment like this:
 @example
index b4a60024c27bc5d46a7a85a2fefd59ce2b1cf803..829fed82e3e8416d1c2fa8a5df231e4e25b278ac 100644 (file)
@@ -88,7 +88,7 @@ Ronaldo A. Ferreira, Christian Grothoff, and Paul Ruth.
 A Transport Layer Abstraction for Peer-to-Peer Networks
 Proceedings of the 3rd International Symposium on Cluster Computing
 and the Grid (GRID 2003), 2003.
-(@uref{https://gnunet.org/git/bibliography.git/plain/docs/transport.pdf, https://gnunet.org/git/bibliography.git/plain/docs/transport.pdf})
+(@uref{https://git.gnunet.org/bibliography.git/plain/docs/transport.pdf, https://git.gnunet.org/bibliography.git/plain/docs/transport.pdf})
 
 @cindex Accounting to Encourage Resource Sharing
 @node Accounting to Encourage Resource Sharing
@@ -125,7 +125,7 @@ the network load is high.
 For more information, refer to the following paper:
 Christian Grothoff. An Excess-Based Economic Model for Resource
 Allocation in Peer-to-Peer Networks. Wirtschaftsinformatik, June 2003.
-(@uref{https://gnunet.org/git/bibliography.git/plain/docs/ebe.pdf, https://gnunet.org/git/bibliography.git/plain/docs/ebe.pdf})
+(@uref{https://git.gnunet.org/bibliography.git/plain/docs/ebe.pdf, https://git.gnunet.org/bibliography.git/plain/docs/ebe.pdf})
 
 @cindex Confidentiality
 @node Confidentiality
@@ -162,7 +162,7 @@ scientific metrics
 (Claudia Díaz, Stefaan Seys, Joris Claessens,
 and Bart Preneel. Towards measuring anonymity.
 2002.
-(@uref{https://gnunet.org/git/bibliography.git/plain/docs/article-89.pdf, https://gnunet.org/git/bibliography.git/plain/docs/article-89.pdf}))
+(@uref{https://git.gnunet.org/bibliography.git/plain/docs/article-89.pdf, https://git.gnunet.org/bibliography.git/plain/docs/article-89.pdf}))
 that can help quantify the level of anonymity that a given mechanism
 provides, there is no such thing as "complete anonymity".
 GNUnet's file-sharing implementation allows users to select for each
@@ -225,7 +225,7 @@ Refer to the following paper for more:
 Krista Bennett and Christian Grothoff.
 GAP --- practical anonymous networking. In Proceedings of
 Designing Privacy Enhancing Technologies, 2003.
-(@uref{https://gnunet.org/git/bibliography.git/plain/docs/aff.pdf, https://gnunet.org/git/bibliography.git/plain/docs/aff.pdf})
+(@uref{https://git.gnunet.org/bibliography.git/plain/docs/aff.pdf, https://git.gnunet.org/bibliography.git/plain/docs/aff.pdf})
 
 @cindex Deniability
 @node Deniability
@@ -253,7 +253,7 @@ Christian Grothoff, Krista Grothoff, Tzvetan Horozov,
 and Jussi T. Lindgren.
 An Encoding for Censorship-Resistant Sharing.
 2009.
-(@uref{https://gnunet.org/git/bibliography.git/plain/docs/ecrs.pdf, https://gnunet.org/git/bibliography.git/plain/docs/ecrs.pdf})
+(@uref{https://git.gnunet.org/bibliography.git/plain/docs/ecrs.pdf, https://git.gnunet.org/bibliography.git/plain/docs/ecrs.pdf})
 
 @cindex Peer Identities
 @node Peer Identities
@@ -284,7 +284,7 @@ GNS (Matthias Wachs, Martin Schanzenbach, and Christian Grothoff.
 A Censorship-Resistant, Privacy-Enhancing and Fully Decentralized Name
 System. In proceedings of 13th International Conference on Cryptology and
 Network Security (CANS 2014). 2014.
-@uref{https://gnunet.org/git/bibliography.git/plain/docs/gns2014wachs.pdf, https://gnunet.org/git/bibliography.git/plain/docs/gns2014wachs.pdf})
+@uref{https://git.gnunet.org/bibliography.git/plain/docs/gns2014wachs.pdf, https://git.gnunet.org/bibliography.git/plain/docs/gns2014wachs.pdf})
 zones are similar to those of DNS zones, but instead of a hierarchy of
 authorities to governing their use, GNS zones are controlled by a private
 key.
index 0e7486d284b586fe1bdef649af2f41454090ccf5..b17e74a734c27809aa23d177012ccf1b907025a2 100644 (file)
@@ -51,7 +51,7 @@ List all running services.
 .IP "\-v, \-\-version"
 Print GNUnet version number.
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 gnunet\-config(1), gnunet\-setup(1)
index 895c7194200d3214826df0236a9a1c949fba6414..c098ed576df632cfe1042dd29385881e024fe473 100644 (file)
@@ -60,7 +60,7 @@ Print verbose output (include ATS address properties)
 .IP "\-v, \-\-version"
 Print GNUnet version number.
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <bug\-gnunet@gnu.org>
 .SH SEE ALSO
 gnunet\-transport(1)
index 3989b13518c5ac23a8e42a800ff929609a1d90b6..a2965b19fb146db850080afa3a1203a6c18345df 100644 (file)
@@ -99,7 +99,7 @@ Share a directory "$HOME/gnunet\-share/":
 ~/.config/gnunet.conf
 GNUnet configuration file
 .SH BUGS
-Report bugs to <https://gnunet.org/bugs/> or by sending electronic
+Report bugs to <https://bugs.gnunet.org/> or by sending electronic
 mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 \fBgnunet\-fs\-gtk\fP(1), \fBgnunet\-publish\fP(1),
index f10e6f891ff7510b014070a20312f559d8b9d829..02b4397dede4e6de9ed1686857adf243d360f047 100644 (file)
@@ -29,7 +29,7 @@ Use LOGLEVEL for logging.  Valid values are DEBUG, INFO, WARNING and ERROR.
 .IP "\-v, \-\-version"
 Print GNUnet version number.
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 The full documentation for
index 9c84066bccb1fd71dd399eb968e2c364a5353554..8404f085c646d6f9af1828e44a4aeda9124a766e 100644 (file)
@@ -61,7 +61,7 @@ Use LOGLEVEL for logging.  Valid values are DEBUG, INFO, WARNING and ERROR.
 Print GNUnet version number.
 
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 The full documentation for
index c4f979fb0407ae28fb1fa5caa8c0dbacffa10fcb..f1443283f1e50d4e35b52245063ae8c499108528 100644 (file)
@@ -42,7 +42,7 @@ Use LOGLEVEL for logging.  Valid values are DEBUG, INFO, WARNING and ERROR.
 .IP "\-v, \-\-version"
 Print GNUnet version number.
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 The full documentation for
index 0460917522b7c89d9acb741653dd18d975e6af9f..5c08d3dab73ccb26c2c586c4f116a009cc992c45 100644 (file)
@@ -31,7 +31,7 @@ Valid values are DEBUG, INFO, WARNING and ERROR.
 .IP "\-v, \-\-version"
 Print GNUnet version number.
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 \fBgnunet\-conversation\fP(1)
index fb0596e19f8f06490821021885a461aae9bad149..5925871da729de95d8728c0ea46714c5266deb63 100644 (file)
@@ -37,7 +37,7 @@ The default LINE is zero, which should be fine for most users.
 .IP "\-v, \-\-version"
 Print GNUnet version number.
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 \fBgnunet\-identity\fP(1), \fBgnunet\-namestore\fP(1), \fBgnunet\-gns\fP(1)
index dd2b566f9f5fa49f9b4bc7631f2899a9fed93775..89dad31b2a6e8a8f3dba38b46235d8d6916cd419 100644 (file)
@@ -28,7 +28,7 @@ print the version number
 \fB\-V\fR, \fB\-\-verbose\fR
 be verbose
 .SH BUGS
-Report bugs by using mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 \fBgnunet\-transport\fP(1)
index 4cb536f5168deefad8fad674c4395988a6d0fa27..5dd8cec52e6d7ecd5b81a1d43307e6d9ba5ceb4f 100644 (file)
@@ -36,7 +36,7 @@ configure logging to write logs to FILENAME
 \fB\-v\fR, \fB\-\-version\fR
 print the version number
 .SH BUGS
-Report bugs by using mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 \fBgnunet\-publish\fP(1)
index 109b2fc6c1e73461385f14af0109898143cbd97f..c08eca46d99d4a122e593bdd9396b67e2ee42972 100644 (file)
@@ -56,7 +56,7 @@ by \fBgnunet\-download\fP(1) for later processing or be handled more directly
 by \fBgnunet\-fs\-gtk\fP(1).
 
 .SH BUGS
-Report bugs by using mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 \fBgnunet\-fs\-gtk\fP(1), \fBgnunet\-publish\fP(1),
index 6ecad3c42e5c3ff0cd1a54e00cdfced494914594..552df25b673a4239125e96a125e64c7b7b17ab34 100644 (file)
@@ -35,7 +35,7 @@ Use LOGLEVEL for logging.  Valid values are DEBUG, INFO, WARNING and ERROR.
 Print GNUnet version number.
 
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <bug\-gnunet@gnu.org>
 .SH SEE ALSO
 gnunet\-gns\-fcfs(1), gnunet\-gns(1), gnunet\-identity(1)
index 7cc6dbffb11975bc614ef5ac118f533f62ef00ad..ebc8846788bbe3a7a30216daf8b425f19feffd8e 100644 (file)
@@ -47,7 +47,7 @@ downloads.
 ~/.gnunet-download-manager.scm
 Configuration file.
 .SH BUGS
-Report bugs by using mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet-developers@gnu.org>.
 .PP
 Furthermore it is assumed that gnunet-download-manager is no longer
index 58e82e790e00ad824f521a2a0fed2532a38729f4..064a803d0521b3b6e40d82d851181ea57cfe1bdb 100644 (file)
@@ -131,7 +131,7 @@ do the same.
 ~/.config/gnunet.conf
 GNUnet configuration file
 .SH BUGS
-Report bugs to <https://gnunet.org/bugs/> or by sending electronic
+Report bugs to <https://bugs.gnunet.org/> or by sending electronic
 mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 \fBgnunet\-fs\-gtk\fP(1), \fBgnunet\-publish\fP(1),
index e3db11eabdef5916cc73665b2256f7afad60e346..aedc0bc49c7a8b3e666835c572c08208d4c5849a 100644 (file)
@@ -49,7 +49,7 @@ Print GNUnet version number.
 
 
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 The full documentation for
index 8a9f0838c4379a905fa11f3fddf89f91570a7342..dcaf90d72340b966ff35b69683b256f3f2d0c8ca 100644 (file)
@@ -33,7 +33,7 @@ print the version number
 \fB\-V\fR, \fB\-\-verbose\fR
 be verbose
 .SH BUGS
-Report bugs by using mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 \fBgnunet\-publish\fP(1)
index f99be5104f7db4c6db9d1ec80eee503d9cb1bbf1..6c12e2c09d286a93e705fd59399ec4dec3e775e7 100644 (file)
@@ -38,7 +38,7 @@ ERROR.
 .IP "\-v, \-\-version"
 Print GNUnet version number.
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <bug\-gnunet@gnu.org>
 .SH SEE ALSO
 gnunet\-gns(1)
index 9f7a651a74bca2acd4086561a94e16250fc3c368..5972976292c516724cec23504f53562a46970257 100644 (file)
@@ -41,7 +41,7 @@ Print GNUnet version number.
 gnunet\-gns will return 0 on success, 1 on internal failures, 2 on
 launch failures, 4 if the given name is not configured to use GNS.
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 \fBgnunet\-namestore\fP(1), \fBgnunet\-identity\fP(1)
index 8d009d07b8c8c017e36384a9273ce468aa43645c..ca4acfebe8be67ee16c1007f8b71603d992f1846 100644 (file)
@@ -54,7 +54,7 @@ This will fail if NAME does not yet exist.
 ~/.local/share/gnunet/identity/egos
 Directory where the egos are stored (by default)
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 \fBgnunet\-gns\fP(1),  \fBgnunet\-namestore\fP(1)
index 5286562180f81ccd9a4b14a9e6e4d0251e3f94d2..78acb017b82edcc5f816d45964be358679c3c4f5 100644 (file)
@@ -35,7 +35,7 @@ Specifies the public key of the zone to inspect (mandatory option)
 
 
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 \fBgnunet\-gns\fP(1)
index 3f22145e2dd104af4fefe6b7908fb9eb947f0b5f..a6c9d2b3243b0db88b22b974ca9be2e0c754d18b 100644 (file)
@@ -44,7 +44,7 @@ Print GNUnet version number.
 .IP "\-z EGO, \-\-zone=EGO"
 Specifies for which EGO should FCFSD manage the zone.
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <bug\-gnunet@gnu.org>
 .SH SEE ALSO
 gnunet\-identity(1), gnunet\-gns(1), gnunet\-gns\-proxy(1)
index 45309fad67cb592fa435a8d926d6e0bbdc2d5333..7517a4f5e1656cdc097873207ca7845932471d5e 100644 (file)
@@ -98,7 +98,7 @@ Specifies the name of the ego controlling the private key for the zone
 
 
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 \fBgnunet\-gns\fP(1), \fBgnunet\-namestore\-gtk\fP(1)
index bc95972c4ff8d123691baa161121db19c3368da0..8514a5c991331b0920a01e76472ea9abda8963fa 100644 (file)
@@ -45,7 +45,7 @@ Test HTTP configuration
 # gnunet\-nat\-auto -u \-S transport-udp
 Test UDP configuration
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 gnunet\-transport(1) gnunet\-nat(1)
index 1fdf1e265b7ea6cac0b4cccad66277635d3e761e..f31e69b26182daec1a96f99184962e49e74ee7d2 100644 (file)
@@ -45,7 +45,7 @@ are supposed to autoconfigure with this server.
 .IP "\-c FILENAME,  \-\-config=FILENAME"
 Use the configuration file FILENAME.
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 gnunet\-transport(1)
index cf48e1dc6f3f934a2178988314d5561f9cbeec47..4a6a56e97b24180876aa5cdaef8f29e511d4553d 100644 (file)
@@ -84,7 +84,7 @@ Assume manually punched NAT, but determine external IP automatically:
 # gnunet-nat FIXME -s
 XXX
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 gnunet\-transport(1)
index 03246d968d3b06bdf7b1c98df640bf9dc99aff1e..bd37fa63599528a6171528fec9f2ab6280e9321c 100644 (file)
@@ -44,7 +44,7 @@ order to consider this peer one of their friends in F2F mode).
 .IP "\-v, \-\-version"
 Print the version number
 .SH BUGS
-Report bugs by using mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 gnunet.conf(5)
index 5bc2eec7602637dcd32a23fdcc78a56843a4a9d5..b072087321758908d45341a1110cd232fc97c6a2 100644 (file)
@@ -314,7 +314,7 @@ Update the previous entry, do not allow any future updates:
 ~/.config/gnunet.conf
 GNUnet configuration file
 .SH BUGS
-Report bugs to <https://gnunet.org/bugs/> or by sending electronic
+Report bugs to <https://bugs.gnunet.org/> or by sending electronic
 mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 \fBgnunet\-auto\-share\fP(1)
index b80f18bb3d2e84b186c15838bc2a4d79cf070828..0145a35235d2aeb695fa132834a28083b4cb8312 100644 (file)
@@ -25,7 +25,7 @@ Do not show preview windows.
 .IP "\-v, \-\-verbose"
 Be verbose.
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 The full documentation for
index 56eef560d5073ee44f0f88b2cbc88da2d6437265..66f1ba9a8d9d4b300fb15a10c48a2cda4f566144 100644 (file)
@@ -27,7 +27,7 @@ Perform a reverse lookup.
 .IP "\-v, \-\-version"
 Print GNUnet version number.
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 The full documentation for
index 1afda399c8340d34af61ae1a8f06440da092616c..f21f82612e2cb353f546cea65098b21a2f85f395 100644 (file)
@@ -67,7 +67,7 @@ Print GNUnet version number.
 
 
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending electronic mail to <gnunet\-developers@gnu.org>
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending electronic mail to <gnunet\-developers@gnu.org>
 .SH "SEE ALSO"
 The full documentation for
 .B gnunet
index 4ccb2a7400bcfe068c8aa1df74f20fb1639f8d3e..1c8938daf0834b6e154f2a0f4ca282ce0829e4b4 100644 (file)
@@ -73,7 +73,7 @@ Use LOGLEVEL for logging.  Valid values are DEBUG, INFO, WARNING and ERROR.
 .IP "\-v, \-\-version"
 Print GNUnet version number.
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 gnunet\-peerinfo(1)
index d156e17e80e476334b3f9e692cefcf8c1bd49790..01ac4205a91f7d98cdc4367b9e92c3f3ef12e599 100644 (file)
@@ -36,7 +36,7 @@ Time to wait between calculations.
 .IP "\-v, \-\-version"
 Print GNUnet version number.
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 The full documentation for
index 79991e375b0510de51e89462459fe84311ff9a3a..af72d369d1248664bbf59da7d53c3cc43d8405e4 100644 (file)
@@ -137,7 +137,7 @@ for gnunet\-publish on how to supply meta-data by hand).
 ~/.config/gnunet.conf
 GNUnet configuration file; specifies the default value for the timeout
 .SH "REPORTING BUGS"
-Report bugs to <https://gnunet.org/bugs/> or by sending electronic mail to <gnunet\-developers@gnu.org>
+Report bugs to <https://bugs.gnunet.org/> or by sending electronic mail to <gnunet\-developers@gnu.org>
 .SH "SEE ALSO"
 \fBgnunet\-fs\-gtk\fP(1), \fBgnunet\-publish\fP(1), \fBgnunet\-download\fP(1), \fBgnunet.conf\fP(5),
 The full documentation for
index cac6e9af7e5eb4ad72788fd1614b03924dc07f84..b1dde99dd0e7f859e496bb15ba743d86c02fe262 100644 (file)
@@ -38,7 +38,7 @@ Create COUNT number of peers.
 .IP "\-v, \-\-version"
 Print GNUnet version number.
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending electronic mail to <gnunet\-developers@gnu.org>
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending electronic mail to <gnunet\-developers@gnu.org>
 .SH "SEE ALSO"
 The full documentation for
 .B gnunet
index 60c40bf7fa483b0b0975f673cb17d75dfe4187a6..43fdb8ecf0a53ddae18b1700fd23b093a56c33c2 100644 (file)
@@ -27,7 +27,7 @@ Print short help on options.
 .IP "\-s SERVICE, \-\-service=SERVICE"
 Name of the service to run.
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 The full documentation for
index ff1af50ef1e319c1e294f6dd9f9dcd7ace465c32..357d0df44fedef8425f27ca152cf9d305e2ffb20 100644 (file)
@@ -40,7 +40,7 @@ Configuration template.
 .IP "\-v, \-\-version"
 Print GNUnet version number.
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 The full documentation for
index 8adb85571a3256a7399c24cd15c6ef875b6ade18..653f211cdfc7a39b1c50c8e05a96e1716a9362d7 100644 (file)
@@ -9,7 +9,7 @@ gnunet\-timeout \- run process with timeout
 timeout.  Provided as the standard "timout" utility may not be
 available on all platforms.
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 timeout(1)
index 0e1e681f822d874c8c4c43a163cb9b869f8ad8a0..9dc572acf2c7060e31c807caa376ce2cd7253797 100644 (file)
@@ -8,7 +8,7 @@ gnunet\-transport\-certificate\-creation \- create certificate for HTTPS transpo
 \fBgnunet\-transport\-certificate\-creation\fP uses openssl to generate a RSA
 private key and then a self-signed certificate for HTTPS transport.
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 gnunet\-transport(1)
index 2aafbb9ab4e9c35031994df78c60513213539ce2..eef7621744b78ca6da89c37722901a47f120bc5a 100644 (file)
@@ -60,7 +60,7 @@ print the version number
 \fB\-V\fR, \fB\-\-verbose\fR
 be verbose
 .SH "REPORTING BUGS"
-Report bugs by using mantis <https://gnunet.org/bugs/> or by sending electronic mail to <gnunet\-developers@gnu.org>
+Report bugs by using mantis <https://bugs.gnunet.org/> or by sending electronic mail to <gnunet\-developers@gnu.org>
 .SH "SEE ALSO"
 \fBgnunet\-arm\fP(1), \fBgnunet\-ats\fP(1)
 The full documentation for
index 1c9d1a58c01d2afb2496f259662c4fc59223014b..6aee4f62e0443c12c7bf6cfad12d15f407988bc3 100644 (file)
@@ -34,7 +34,7 @@ move locally.
 ~/.config/gnunet.conf
 GNUnet configuration file
 .SH "REPORTING BUGS"
-Report bugs to <https://gnunet.org/bugs/> or by sending electronic mail to <gnunet\-developers@gnu.org>
+Report bugs to <https://bugs.gnunet.org/> or by sending electronic mail to <gnunet\-developers@gnu.org>
 .SH "SEE ALSO"
 \fBgnunet\-fs\-gtk\fP(1), \fBgnunet\-publish\fP(1), \fBgnunet\-search\fP(1), \fBgnunet\-download\fP(1), \fBgnunet.conf\fP(5)
 The full documentation for
index 72105c4c8234f0c85ab5b88a225c40cbb2508c17..2fe1a05d25c0d0b72501125b1d6eeffbdf7e6c8a 100644 (file)
@@ -24,7 +24,7 @@ Use LOGLEVEL for logging.  Valid values are DEBUG, INFO, WARNING and ERROR.
 .IP "\-v, \-\-version"
 Print GNUnet version number.
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 The full documentation for
index 838624d98963e9863a0d37a3219e3b4ef2cc5b7c..ddb53a7bd34933877294d557a88e685b4c6ee23d 100644 (file)
@@ -76,7 +76,7 @@ Be verbose.
 .IP "\-v, \-\-version"
 Print GNUnet version number.
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 gnunet\-setup(1)
index 97d78413625c6a07f96378a4f06793ec2cb43b07..2a67718f97e0da91bf9889c5c67407b1f5b08ac4 100644 (file)
@@ -63,7 +63,7 @@ unless you are importing millions of domain names from a zone.
 Typical invocaton would be:
 $ gnunet\-zoneimport 1.2.3.4 < names.txt
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <gnunet\-developers@gnu.org>
 .SH SEE ALSO
 gnunet\-gns(1), gnunet\-namestore(1)
index 3c88305ba841e907056476c94ca59d179fe19b85..46ea113191be37b971637ab854ae47daf1903239 100644 (file)
@@ -130,7 +130,7 @@ to the actual external address for your usage.
 ~/.config/gnunet.conf
 GNUnet configuration file
 .SH BUGS
-Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending
+Report bugs by using Mantis <https://bugs.gnunet.org/> or by sending
 electronic mail to <bug-gnunet@gnu.org>
 .SH SEE ALSO
 \fBgnunet\-setup\fP(1), \fBgnunet\-arm\fP(1)
index 412ac3a6f848faca2b718a029cd1d6c7c0d4e3c3..bd09bf64d9254f4b2e88bf6bab647f670b746ced 100644 (file)
@@ -73,12 +73,15 @@ EXTRA_DIST =                                                        \
        $(gnunet_tutorial_examples)                             \
        htmlxref.cnf                                            \
        run-gendocs.sh                                          \
-       docstyle.css
+       docstyle.css                                            \
+        manual.css                                              \
+        reset.css                                               \
+        style.css
 
 
 DISTCLEANFILES =                                               \
        gnunet-tutorial.cps                                     \
-       fdl-1.3.cps                                             
+       fdl-1.3.cps
 
 # XXX: is this sed invocation portable enough? otherwise try tr(1).
 version.texi/replacement: version.texi/replacement/revert
diff --git a/doc/tutorial/docstyle.css b/doc/tutorial/docstyle.css
new file mode 100644 (file)
index 0000000..8719248
--- /dev/null
@@ -0,0 +1,76 @@
+html, body {
+    font-size: 1em;
+    text-align: left;
+    text-decoration: none;
+}
+html { background-color: #e7e7e7; }
+
+body {
+    max-width: 74.92em;
+    margin: 0 auto;
+    padding: .5em 1em 1em 1em;
+    background-color: white;
+    border: .1em solid #c0c0c0;
+}
+
+h1, h2, h3, h4 { color: #333; }
+h5, h6, dt { color: #222; }
+
+
+a h3 {
+    color: #005090;
+}
+
+a[href] { color: #005090; }
+a[href]:visited { color: #100070; }
+a[href]:active, a[href]:hover {
+    color: #100070;
+    text-decoration: none;
+}
+
+.linkrow {
+    margin: 3em 0;
+}
+
+.linkrow {
+    text-align: center;
+}
+
+div.example { padding: .8em 1.2em .4em; }
+pre.example { padding: .8em 1.2em; }
+div.example, pre.example {
+    margin: 1em 0 1em 3% ;
+    -webkit-border-radius: .3em;
+    -moz-border-radius: .3em;
+    border-radius: .3em;
+    border: 1px solid #d4cbb6;
+    background-color: #f2efe4;
+}
+div.example > pre.example {
+    padding: 0 0 .4em;
+    margin: 0;
+    border: none;
+}
+
+
+/* This makes the very long tables of contents in Gnulib and other
+   manuals easier to read. */
+.contents ul, .shortcontents ul { font-weight: bold; }
+.contents ul ul, .shortcontents ul ul { font-weight: normal; }
+.contents ul { list-style: none; }
+
+/* For colored navigation bars (Emacs manual): make the bar extend
+   across the whole width of the page and give it a decent height. */
+.header, .node { margin: 0 -1em; padding: 0 1em; }
+.header p, .node p { line-height: 2em; }
+
+/* For navigation links */
+.node a, .header a { display: inline-block; line-height: 2em; }
+.node a:hover, .header a:hover { background: #f2efe4; }
+
+table.cartouche {
+    border-collapse: collapse;
+    border-color: darkred;
+    border-style: solid;
+    border-width: 3px;
+}
index 3399848336d99a54960a5d982cf1c3bdc6e1496a..89f39b5075ddbcc1dce4bef360bd5f1572bf044f 100644 (file)
@@ -68,14 +68,14 @@ GNUnet can be used to develop a Peer-to-Peer application.
 Detailed installation instructions for
 various operating systems and a detailed list of all
 dependencies can be found on our website at
-@uref{https://gnunet.org/installation} and in our
+@uref{https://old.gnunet.org/installation} and in our
 Reference Documentation (GNUnet Handbook).
 
 Please read this tutorial carefully since every single step is
 important, and do not hesitate to contact the GNUnet team if you have
 any questions or problems! Visit this link in your webbrowser to learn
 how to contact the GNUnet team:
-@uref{https://gnunet.org/contact_information}
+@uref{https://gnunet.org/en/contact.html}
 
 @menu
 
@@ -192,7 +192,7 @@ $ mv gnunet-@value{VERSION} gnunet
 @noindent
 However, please note that stable versions can be very outdated.
 As a developer you are @b{strongly} encouraged to use the version
-from @uref{https://gnunet.org/git/, git}.
+from @uref{https://git.gnunet.org/, the git server}.
 
 @node  Installing Build Tool Chain and Dependencies
 @section Installing Build Tool Chain and Dependencies
@@ -209,7 +209,7 @@ Please check the notes at the end of the configure process about
 required dependencies.
 
 For GNUnet bootstrapping support and the HTTP(S) plugin you should
-install @uref{https://gnunet.org/gnurl, libgnurl}.
+install @uref{https://gnunet.org/en/gnurl.html, libgnurl}.
 For the filesharing service you should install at least one of the
 datastore backends (MySQL, SQlite and PostgreSQL are supported).
 
@@ -230,7 +230,7 @@ This is required for obtaining the repository, which is achieved with
 the following command:
 
 @example
-$ git clone https://gnunet.org/git/gnunet
+$ git clone https://git.gnunet.org/gnunet
 @end example
 
 @noindent
@@ -707,9 +707,9 @@ With the testbed API, a sample test case can be structured as follows:
 
 @noindent
 The source code for the above listing can be found at
-@uref{https://gnunet.org/git/gnunet.git/tree/doc/
-documentation/testbed_test.c}
-or in the @file{doc/documentation/} folder of your repository check-out.
+@c FIXME: This is not the correct URL. Where is the file?
+@uref{https://git.gnunet.org/gnunet.git/tree/doc/documentation/testbed_test.c}
+or in the @file{doc/} folder of your repository check-out.
 After installing GNUnet, the above source code can be compiled as:
 
 @example
@@ -800,7 +800,7 @@ a template build system for writing GNUnet extensions in C. It can be
 obtained as follows:
 
 @example
-$ git clone https://gnunet.org/git/gnunet-ext
+$ git clone https://git.gnunet.org/gnunet-ext
 $ cd gnunet-ext/
 $ ./bootstrap
 $ ./configure --prefix=$PREFIX --with-gnunet=$PREFIX
@@ -1550,7 +1550,7 @@ The current log level is configured using the @code{$GNUNET_FORCE_LOG}
 environmental variable. The @code{DEBUG} level is only available if
 @command{--enable-logging=verbose} was used when running
 @command{configure}. More details about logging can be found under
-@uref{https://gnunet.org/logging}.
+@uref{https://old.gnunet.org/logging}.
 
 You should also probably enable the creation of core files, by setting
 @code{ulimit}, and echo'ing @code{1} into
diff --git a/doc/tutorial/htmlxref.cnf b/doc/tutorial/htmlxref.cnf
new file mode 100644 (file)
index 0000000..a4928f6
--- /dev/null
@@ -0,0 +1,668 @@
+# htmlxref.cnf - reference file for free Texinfo manuals on the web.
+# Modified by Ludovic Courtès <ludo@gnu.org> for the GNU Guix manual.
+# Modified by ng0 <ng0@gnunet.org> for the GNUnet manual.
+
+htmlxrefversion=2017-10-26.06; # UTC
+
+# Copyright 2010, 2011, 2012, 2013, 2014, 2015 Free Software Foundation, Inc.
+# 
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved.
+#
+# The latest version of this file is available at
+# http://ftpmirror.gnu.org/texinfo/htmlxref.cnf.
+# Email corrections or additions to bug-texinfo@gnu.org.
+# The primary goal is to list all relevant GNU manuals;
+# other free manuals are also welcome.
+#
+# To be included in this list, a manual must:
+#
+# - have a generic url, e.g., no version numbers;
+# - have a unique file name (e.g., manual identifier), i.e., be related to the
+#   package name.  Things like "refman" or "tutorial" don't work.
+# - follow the naming convention for nodes described at
+# http://www.gnu.org/software/texinfo/manual/texinfo/html_node/HTML-Xref.html
+#   This is what makeinfo and texi2html implement.
+# 
+# Unless the above criteria are met, it's not possible to generate
+# reliable cross-manual references.
+# 
+# For information on automatically generating all the useful formats for
+# a manual to put on the web, see
+# http://www.gnu.org/prep/maintain/html_node/Manuals-on-Web-Pages.html.
+
+# For people editing this file: when a manual named foo is related to a
+# package named bar, the url should contain a variable reference ${BAR}.
+# Otherwise, the gnumaint scripts have no way of knowing they are
+# associated, and thus gnu.org/manual can't include them.
+
+# shorten references to manuals on www.gnu.org.
+G = https://www.gnu.org
+GS = ${G}/software
+
+3dldf          mono    ${GS}/3dldf/manual/user_ref/3DLDF.html
+3dldf          node    ${GS}/3dldf/manual/user_ref/
+
+alive          mono    ${GS}/alive/manual/alive.html
+alive          node    ${GS}/alive/manual/html_node/
+
+anubis         chapter ${GS}/anubis/manual/html_chapter/
+anubis         section ${GS}/anubis/manual/html_section/
+anubis         node    ${GS}/anubis/manual/html_node/
+
+artanis                mono    ${GS}/artanis/manual/artanis.html
+artanis                node    ${GS}/artanis/manual/html_node/
+
+aspell         section http://aspell.net/man-html/index.html
+
+auctex         mono    ${GS}/auctex/manual/auctex.html
+auctex         node    ${GS}/auctex/manual/auctex/
+
+autoconf       mono    ${GS}/autoconf/manual/autoconf.html
+autoconf       node    ${GS}/autoconf/manual/html_node/
+
+autogen                mono    ${GS}/autogen/manual/html_mono/autogen.html
+autogen                chapter ${GS}/autogen/manual/html_chapter/
+autogen                node    ${GS}/autoconf/manual/html_node/
+
+automake       mono    ${GS}/automake/manual/automake.html
+automake       node    ${GS}/automake/manual/html_node/
+
+avl            node    http://www.stanford.edu/~blp/avl/libavl.html/
+
+bash           mono    ${GS}/bash/manual/bash.html
+bash           node    ${GS}/bash/manual/html_node/
+
+BINUTILS = http://sourceware.org/binutils/docs
+binutils       node    ${BINUTILS}/binutils/
+ as            node    ${BINUTILS}/as/
+ bfd           node    ${BINUTILS}/bfd/
+ gprof         node    ${BINUTILS}/gprof/
+ ld            node    ${BINUTILS}/ld/
+
+bison          mono    ${GS}/bison/manual/bison.html
+bison          node    ${GS}/bison/manual/html_node/
+
+bpel2owfn      mono    ${GS}/bpel2owfn/manual/2.0.x/bpel2owfn.html
+
+ccd2cue                mono    ${GS}/ccd2cue/manual/ccd2cue.html
+ccd2cue                node    ${GS}/ccd2cue/manual/html_node/
+
+cflow          mono    ${GS}/cflow/manual/cflow.html
+cflow          node    ${GS}/cflow/manual/html_node/
+
+chess          mono    ${GS}/chess/manual/gnuchess.html
+chess          node    ${GS}/chess/manual/html_node/
+
+combine                mono    ${GS}/combine/manual/combine.html
+combine                chapter ${GS}/combine/manual/html_chapter/
+combine                section ${GS}/combine/manual/html_section/
+combine                node    ${GS}/combine/manual/html_node/
+
+complexity     mono    ${GS}/complexity/manual/complexity.html
+complexity     node    ${GS}/complexity/manual/html_node/
+
+coreutils      mono    ${GS}/coreutils/manual/coreutils
+coreutils      node    ${GS}/coreutils/manual/html_node/
+
+cpio           mono    ${GS}/cpio/manual/cpio
+cpio           node    ${GS}/cpio/manual/html_node/
+
+cssc           node    ${GS}/cssc/manual/
+
+#cvs cannot be handled here; see http://ximbiot.com/cvs/manual.
+
+ddd            mono    ${GS}/ddd/manual/html_mono/ddd.html
+
+ddrescue       mono    ${GS}/ddrescue/manual/ddrescue_manual.html
+
+DICO = http://puszcza.gnu.org.ua/software/dico/manual
+dico           mono    ${DICO}/dico.html
+dico           chapter ${DICO}/html_chapter/
+dico           section ${DICO}/html_section/
+dico           node    ${DICO}/html_node/
+
+diffutils      mono    ${GS}/diffutils/manual/diffutils
+diffutils      node    ${GS}/diffutils/manual/html_node/
+
+ed             mono    ${GS}/ed/manual/ed_manual.html
+
+EMACS = ${GS}/emacs/manual
+emacs          mono    ${EMACS}/html_mono/emacs.html
+emacs          node    ${EMACS}/html_node/emacs/
+ #
+ ada-mode      mono    ${EMACS}/html_mono/ada-mode.html
+ ada-mode      node    ${EMACS}/html_node/ada-mode/
+ #
+ autotype      mono    ${EMACS}/html_mono/autotype.html
+ autotype      node    ${EMACS}/html_node/autotype/
+ #
+ ccmode                mono    ${EMACS}/html_mono/ccmode.html
+ ccmode                node    ${EMACS}/html_node/ccmode/
+ #
+ cl            mono    ${EMACS}/html_mono/cl.html
+ cl            node    ${EMACS}/html_node/cl/
+ #
+ ebrowse       mono    ${EMACS}/html_mono/ebrowse.html
+ ebrowse       node    ${EMACS}/html_node/ebrowse/
+ #
+ ediff         mono    ${EMACS}/html_mono/ediff.html
+ ediff         node    ${EMACS}/html_node/ediff/
+ #
+ eieio         mono    ${EMACS}/html_mono/eieio.html
+ eieio         node    ${EMACS}/html_node/eieio/
+ #
+ elisp         mono    ${EMACS}/html_mono/elisp.html
+ elisp         node    ${EMACS}/html_node/elisp/
+ #
+ epa           mono    ${EMACS}/html_mono/epa.html
+ epa           node    ${EMACS}/html_node/epa/
+ #
+ erc           mono    ${EMACS}/html_mono/erc.html
+ erc           node    ${EMACS}/html_node/erc/
+ #
+ dired-x       mono    ${EMACS}/html_mono/dired-x.html
+ dired-x       node    ${EMACS}/html_node/dired-x/
+ #
+ eshell                mono    ${EMACS}/html_mono/eshell.html
+ eshell                node    ${EMACS}/html_node/eshell/
+ #
+ flymake       mono    ${EMACS}/html_mono/flymake.html
+ flymake       node    ${EMACS}/html_node/flymake/
+ #
+ gnus          mono    ${EMACS}/html_mono/gnus.html
+ gnus          node    ${EMACS}/html_node/gnus/
+ #
+ idlwave       mono    ${EMACS}/html_mono/idlwave.html
+ idlwave       node    ${EMACS}/html_node/idlwave/
+ #
+ message       mono    ${EMACS}/html_mono/message.html
+ message       node    ${EMACS}/html_node/message/
+ #
+ mh-e          mono    ${EMACS}/html_mono/mh-e.html
+ mh-e          node    ${EMACS}/html_node/mh-e/
+ #
+ nxml-mode     mono    ${EMACS}/html_mono/nxml-mode.html
+ nxml-mode     node    ${EMACS}/html_node/nxml-mode/
+ #
+ org           mono    ${EMACS}/html_mono/org.html
+ org           node    ${EMACS}/html_node/org/
+ #
+ pcl-cvs       mono    ${EMACS}/html_mono/pcl-cvs.html
+ pcl-cvs       node    ${EMACS}/html_node/pcl-cvs/
+ #
+ rcirc         mono    ${EMACS}/html_mono/rcirc.html
+ rcirc         node    ${EMACS}/html_node/rcirc/
+ #
+ semantic      mono    ${EMACS}/html_mono/semantic.html
+ semantic      node    ${EMACS}/html_node/semantic/
+ #
+ smtp          mono    ${EMACS}/html_mono/smtpmail.html
+ smtp          node    ${EMACS}/html_node/smtpmail/
+ #
+ speedbar      mono    ${EMACS}/html_mono/speedbar.html
+ speedbar      node    ${EMACS}/html_node/speedbar/
+ #
+ tramp         mono    ${EMACS}/html_mono/tramp.html
+ tramp         node    ${EMACS}/html_node/tramp/
+ #
+ vip           mono    ${EMACS}/html_mono/vip.html
+ vip           node    ${EMACS}/html_node/vip/
+ #
+ viper         mono    ${EMACS}/html_mono/viper.html
+ viper         node    ${EMACS}/html_node/viper/
+ #
+ woman         mono    ${EMACS}/html_mono/woman.html
+ woman         node    ${EMACS}/html_node/woman/
+ # (end emacs manuals)
+
+easejs         mono    ${GS}/easejs/manual/easejs.html
+easejs         node    ${GS}/easejs/manual/
+
+EMACS_GUIX = https://alezost.github.io/guix.el/manual/latest
+emacs-guix     mono    ${EMACS_GUIX}/emacs-guix.html
+emacs-guix     node    ${EMACS_GUIX}/html_node/
+
+emacs-muse     node    ${GS}/emacs-muse/manual/muse.html
+emacs-muse     node    ${GS}/emacs-muse/manual/html_node/
+
+emms           node    ${GS}/emms/manual/
+
+# The file is called 'find.info' but the package is 'findutils'.
+find           mono    ${GS}/findutils/manual/html_mono/find.html
+find           node    ${GS}/findutils/manual/html_node/find_html
+findutils      mono    ${GS}/findutils/manual/html_mono/find.html
+findutils      node    ${GS}/findutils/manual/html_node/find_html
+
+FLEX = http://flex.sourceforge.net
+flex           node    ${FLEX}/manual/
+
+gama           mono    ${GS}/gama/manual/gama.html
+gama           node    ${GS}/gama/manual/html_node/
+
+GAWK = ${GS}/gawk/manual
+gawk           mono    ${GAWK}/gawk.html
+gawk           node    ${GAWK}/html_node/
+ gawkinet      mono    ${GAWK}/gawkinet/gawkinet.html
+ gawkinet      node    ${GAWK}/gawkinet/html_node/
+
+gcal           mono    ${GS}/gcal/manual/gcal.html
+gcal           node    ${GS}/gcal/manual/html_node/
+
+GCC = http://gcc.gnu.org/onlinedocs
+gcc            node    ${GCC}/gcc/
+ cpp           node    ${GCC}/cpp/
+ gcj           node    ${GCC}/gcj/
+ gfortran      node    ${GCC}/gfortran/
+ gnat_rm       node    ${GCC}/gnat_rm/
+ gnat_ugn_unw  node    ${GCC}/gnat_ugn_unw/
+ libgomp       node    ${GCC}/libgomp/
+ libstdc++     node    ${GCC}/libstdc++/
+ #
+ gccint                node    ${GCC}/gccint/
+ cppinternals  node    ${GCC}/cppinternals/
+ gfc-internals node    ${GCC}/gfc-internals/
+ gnat-style    node    ${GCC}/gnat-style/
+ libiberty     node    ${GCC}/libiberty/
+
+GDB = http://sourceware.org/gdb/current/onlinedocs
+gdb            node    ${GDB}/gdb/
+ stabs         node    ${GDB}/stabs/
+
+GDBM = http://www.gnu.org.ua/software/gdbm/manual
+gdbm           mono    ${GDBM}/gdbm.html
+gdbm           chapter ${GDBM}/html_chapter/
+gdbm           section ${GDBM}/html_section/
+gdbm           node    ${GDBM}/html_node/
+
+gettext                mono    ${GS}/gettext/manual/gettext.html
+gettext                node    ${GS}/gettext/manual/html_node/
+
+gforth         node    http://www.complang.tuwien.ac.at/forth/gforth/Docs-html/
+
+global         mono    ${GS}/global/manual/global.html
+
+gmediaserver   node    ${GS}/gmediaserver/manual/
+
+gmp            node    http://www.gmplib.org/manual/
+
+gnu-arch       node    ${GS}/gnu-arch/tutorial/
+
+gnu-c-manual   mono    ${GS}/gnu-c-manual/gnu-c-manual.html
+
+gnu-crypto     node    ${GS}/gnu-crypto/manual/
+
+gnubg          mono    ${GS}/gnubg/manual/gnubg.html
+gnubg          node    ${GS}/gnubg/manual/html_node/
+
+gnubik         mono    ${GS}/gnubik/manual/gnubik.html
+gnubik         node    ${GS}/gnubik/manual/html_node/
+
+gnulib         mono    ${GS}/gnulib/manual/gnulib.html
+gnulib         node    ${GS}/gnulib/manual/html_node/
+
+GNUN = ${GS}/trans-coord/manual
+gnun           mono    ${GNUN}/gnun/gnun.html
+gnun           node    ${GNUN}/gnun/html_node/
+ web-trans     mono    ${GNUN}/web-trans/web-trans.html
+ web-trans     node    ${GNUN}/web-trans/html_node/
+
+GNUNET = https://docs.gnunet.org/manuals
+gnunet                  node    ${GNUNET}/gnunet/
+ gnunet-c-tutorial      node    ${GNUNET}/gnunet-c-tutorial/
+ gnunet-java-tutorial   node    ${GNUNET}/gnunet-java-tutorial/
+
+GNUPG = http://www.gnupg.org/documentation/manuals
+gnupg          node    ${GNUPG}/gnupg/
+ dirmngr       node    ${GNUPG}/dirmngr/
+ gcrypt                node    ${GNUPG}/gcrypt/
+ libgcrypt     node    ${GNUPG}/gcrypt/
+ ksba          node    ${GNUPG}/ksba/
+ assuan                node    ${GNUPG}/assuan/
+ gpgme         node    ${GNUPG}/gpgme/
+
+gnuprologjava  node    ${GS}/gnuprologjava/manual/
+
+gnuschool      mono    ${GS}/gnuschool/gnuschool.html
+
+GNUSTANDARDS = ${G}/prep
+ maintain      mono    ${GNUSTANDARDS}/maintain/maintain.html
+ maintain      node    ${GNUSTANDARDS}/maintain/html_node/
+ #
+ standards     mono    ${GNUSTANDARDS}/standards/standards.html
+ standards     node    ${GNUSTANDARDS}/standards/html_node/
+
+gnutls         mono    http://gnutls.org/manual/gnutls.html
+gnutls         node    http://gnutls.org/manual/html_node/
+
+gnutls-guile   mono    http://gnutls.org/manual/gnutls-guile.html
+gnutls-guile   node    http://gnutls.org/manual/gnutls-guile/
+
+gperf          mono    ${GS}/gperf/manual/gperf.html
+gperf          node    ${GS}/gperf/manual/html_node/
+
+grep           mono    ${GS}/grep/manual/grep.html
+grep           node    ${GS}/grep/manual/html_node/
+
+groff          node    ${GS}/groff/manual/html_node/
+
+GRUB = ${GS}/grub/manual
+  grub         mono    ${GRUB}/grub.html
+  grub         node    ${GRUB}/html_node/
+  #
+  multiboot    mono    ${GRUB}/multiboot/multiboot.html
+  multiboot    node    ${GRUB}/multiboot/html_node/
+
+gsasl          mono    ${GS}/gsasl/manual/gsasl.html
+gsasl          node    ${GS}/gsasl/manual/html_node/
+
+gsl            node    ${GS}/gsl/manual/html_node/
+
+gsrc           mono    ${GS}/gsrc/manual/gsrc.html
+gsrc           node    ${GS}/gsrc/manual/html_node/
+
+gss            mono    ${GS}/gss/manual/gss.html
+gss            node    ${GS}/gss/manual/html_node/
+
+gtypist                mono    ${GS}/gtypist/doc/
+
+guile          mono    ${GS}/guile/manual/guile.html
+guile          node    ${GS}/guile/manual/html_node/
+
+guile-avahi    mono    http://nongnu.org/guile-avahi/doc/guile-avahi.html
+
+GUILE_GNOME = ${GS}/guile-gnome/docs
+ gobject       node    ${GUILE_GNOME}/gobject/html/
+ glib          node    ${GUILE_GNOME}/glib/html/
+ atk           node    ${GUILE_GNOME}/atk/html/
+ pango         node    ${GUILE_GNOME}/pango/html/
+ pangocairo    node    ${GUILE_GNOME}/pangocairo/html/
+ gdk           node    ${GUILE_GNOME}/gdk/html/
+ gtk           node    ${GUILE_GNOME}/gtk/html/
+ libglade      node    ${GUILE_GNOME}/libglade/html/
+ gnome-vfs     node    ${GUILE_GNOME}/gnome-vfs/html/
+ libgnomecanvas        node    ${GUILE_GNOME}/libgnomecanvas/html/
+ gconf         node    ${GUILE_GNOME}/gconf/html/
+ libgnome      node    ${GUILE_GNOME}/libgnome/html/
+ libgnomeui    node    ${GUILE_GNOME}/libgnomeui/html/
+ corba         node    ${GUILE_GNOME}/corba/html/
+ clutter       node    ${GUILE_GNOME}/clutter/html/
+ clutter-glx   node    ${GUILE_GNOME}/clutter-glx/html/
+
+guile-gtk      node    ${GS}/guile-gtk/docs/guile-gtk/
+
+guile-rpc      mono    ${GS}/guile-rpc/manual/guile-rpc.html
+guile-rpc      node    ${GS}/guile-rpc/manual/html_node/
+
+guix           mono    ${GS}/guix/manual/guix.html
+guix           node    ${GS}/guix/manual/html_node/
+
+gv             mono    ${GS}/gv/manual/gv.html
+gv             node    ${GS}/gv/manual/html_node/
+
+gzip           mono    ${GS}/gzip/manual/gzip.html
+gzip           node    ${GS}/gzip/manual/html_node/
+
+hello          mono    ${GS}/hello/manual/hello.html
+hello          node    ${GS}/hello/manual/html_node/
+
+help2man       mono    ${GS}/help2man/help2man.html
+
+idutils                mono    ${GS}/idutils/manual/idutils.html
+idutils                node    ${GS}/idutils/manual/html_node/
+
+inetutils      mono    ${GS}/inetutils/manual/inetutils.html
+inetutils      node    ${GS}/inetutils/manual/html_node/
+
+jwhois         mono    ${GS}/jwhois/manual/jwhois.html
+jwhois         node    ${GS}/jwhois/manual/html_node/
+
+libc           mono    ${GS}/libc/manual/html_mono/libc.html
+libc           node    ${GS}/libc/manual/html_node/
+
+LIBCDIO = ${GS}/libcdio
+ libcdio       mono    ${LIBCDIO}/libcdio.html
+ cd-text       mono    ${LIBCDIO}/cd-text-format.html
+
+libextractor   mono    ${GS}/libextractor/manual/libextractor.html
+libextractor   node    ${GS}/libextractor/manual/html_node/
+
+libidn         mono    ${GS}/libidn/manual/libidn.html
+libidn         node    ${GS}/libidn/manual/html_node/
+
+librejs                mono    ${GS}/librejs/manual/librejs.html
+librejs                node    ${GS}/librejs/manual/html_node/
+
+libmatheval    mono    ${GS}/libmatheval/manual/libmatheval.html
+
+LIBMICROHTTPD = ${GS}/libmicrohttpd
+libmicrohttpd          mono    ${LIBMICROHTTPD}/manual/libmicrohttpd.html
+libmicrohttpd          node    ${LIBMICROHTTPD}/manual/html_node/
+ microhttpd-tutorial   mono    ${LIBMICROHTTPD}/tutorial.html
+
+libtasn1       mono    ${GS}/libtasn1/manual/libtasn1.html
+libtasn1       node    ${GS}/libtasn1/manual/html_node/
+
+libtool                mono    ${GS}/libtool/manual/libtool.html
+libtool                node    ${GS}/libtool/manual/html_node/
+
+lightning      mono    ${GS}/lightning/manual/lightning.html
+lightning      node    ${GS}/lightning/manual/html_node/
+
+# The stable/ url redirects immediately, but that's ok.
+# The .html extension is omitted on their web site, but it works if given.
+LILYPOND = http://lilypond.org/doc/stable/Documentation
+ lilypond-internals    node ${LILYPOND}/internals/
+ lilypond-learning     node ${LILYPOND}/learning/
+ lilypond-notation     node ${LILYPOND}/notation/
+ lilypond-snippets     node ${LILYPOND}/snippets/
+ lilypond-usage                node ${LILYPOND}/usage/
+ lilypond-web          node ${LILYPOND}/web/
+ music-glossary                node ${LILYPOND}/music-glossary/
+
+liquidwar6     mono    ${GS}/liquidwar6/manual/liquidwar6.html
+liquidwar6     node    ${GS}/liquidwar6/manual/html_node/
+
+lispintro      mono    ${GS}/emacs/emacs-lisp-intro/html_mono/emacs-lisp-intro.html
+lispintro      node    ${GS}/emacs/emacs-lisp-intro/html_node/index.html
+
+LSH = http://www.lysator.liu.se/~nisse/lsh
+  lsh          mono    ${LSH}/lsh.html
+
+m4             mono    ${GS}/m4/manual/m4.html
+m4             node    ${GS}/m4/manual/html_node/
+
+mailutils      mono    ${GS}/mailutils/manual/mailutils.html
+mailutils      chapter ${GS}/mailutils/manual/html_chapter/
+mailutils      section ${GS}/mailutils/manual/html_section/
+mailutils      node    ${GS}/mailutils/manual/html_node/
+
+make           mono    ${GS}/make/manual/make.html
+make           node    ${GS}/make/manual/html_node/
+
+mcron          mono    ${GS}/mcron/manual/mcron.html
+mcron          node    ${GS}/mcron/manual/html_node/
+
+mdk            mono    ${GS}/mdk/manual/mdk.html
+mdk            node    ${GS}/mdk/manual/html_node/
+
+METAEXCHANGE = http://ftp.gwdg.de/pub/gnu2/iwfmdh/doc/texinfo
+ iwf_mh                node    ${METAEXCHANGE}/iwf_mh.html
+ scantest      node    ${METAEXCHANGE}/scantest.html
+
+MIT_SCHEME = ${GS}/mit-scheme/documentation
+ mit-scheme-ref          node  ${MIT_SCHEME}/mit-scheme-ref/
+ mit-scheme-user  node ${MIT_SCHEME}/mit-scheme-user/
+ sos             node  ${MIT_SCHEME}/mit-scheme-sos/
+ mit-scheme-imail node ${MIT_SCHEME}/mit-scheme-imail/
+
+moe            mono    ${GS}/moe/manual/moe_manual.html
+
+motti          node    ${GS}/motti/manual/
+
+mpc            node    http://www.multiprecision.org/index.php?prog=mpc&page=html
+
+mpfr           mono    http://www.mpfr.org/mpfr-current/mpfr.html
+
+mtools         mono    ${GS}/mtools/manual/mtools.html
+
+myserver       node    http://www.myserverproject.net/documentation/
+
+nano           mono    http://www.nano-editor.org/dist/latest/nano.html
+
+nettle         chapter http://www.lysator.liu.se/~nisse/nettle/nettle.html
+
+ocrad          mono    ${GS}/ocrad/manual/ocrad_manual.html
+
+parted         mono    ${GS}/parted/manual/parted.html
+parted         node    ${GS}/parted/manual/html_node/
+
+pascal         mono    http://www.gnu-pascal.de/gpc/
+
+# can't use pcb since url's contain dates --30nov10
+
+perl           mono    ${GS}/perl/manual/perldoc-all.html
+
+PIES = http://www.gnu.org.ua/software/pies/manual
+pies           mono    ${PIES}/pies.html
+pies           chapter ${PIES}/html_chapter/
+pies           section ${PIES}/html_section/
+pies           node    ${PIES}/html_node/
+
+plotutils      mono    ${GS}/plotutils/manual/en/plotutils.html
+plotutils      node    ${GS}/plotutils/manual/en/html_node/
+
+proxyknife     mono    ${GS}/proxyknife/manual/proxyknife.html
+proxyknife     node    ${GS}/proxyknife/manual/html_node/
+
+pspp           mono    ${GS}/pspp/manual/pspp.html
+pspp           node    ${GS}/pspp/manual/html_node/
+
+pyconfigure    mono    ${GS}/pyconfigure/manual/pyconfigure.html
+pyconfigure    node    ${GS}/pyconfigure/manual/html_node/
+
+R = http://cran.r-project.org/doc/manuals
+ R-intro       mono    ${R}/R-intro.html
+ R-lang                mono    ${R}/R-lang.html
+ R-exts                mono    ${R}/R-exts.html
+ R-data                mono    ${R}/R-data.html
+ R-admin       mono    ${R}/R-admin.html
+ R-ints                mono    ${R}/R-ints.html
+
+rcs            mono    ${GS}/rcs/manual/rcs.html
+rcs            node    ${GS}/rcs/manual/html_node/
+
+READLINE = http://cnswww.cns.cwru.edu/php/chet/readline
+readline        mono    ${READLINE}/readline.html
+ rluserman      mono    ${READLINE}/rluserman.html
+ history        mono    ${READLINE}/history.html
+
+recode         mono    http://recode.progiciels-bpi.ca/manual/index.html
+
+recutils       mono    ${GS}/recutils/manual/recutils.html
+recutils       node    ${GS}/recutils/manual/html_node/
+
+reftex         mono    ${GS}/auctex/manual/reftex.html
+reftex         node    ${GS}/auctex/manual/reftex/
+
+remotecontrol  mono    ${GS}/remotecontrol/manual/remotecontrol.html
+remotecontrol  node    ${GS}/remotecontrol/manual/html_node/
+
+rottlog                mono    ${GS}/rottlog/manual/rottlog.html
+rottlog                node    ${GS}/rottlog/manual/html_node/
+
+RUSH = http://www.gnu.org.ua/software/rush/manual
+rush           mono    ${RUSH}/rush.html
+rush           chapter ${RUSH}/html_chapter/
+rush           section ${RUSH}/html_section/
+rush           node    ${RUSH}/html_node/
+
+screen         mono    ${GS}/screen/manual/screen.html
+screen         node    ${GS}/screen/manual/html_node/
+
+sed            mono    ${GS}/sed/manual/sed.html
+sed            node    ${GS}/sed/manual/html_node/
+
+sharutils      mono    ${GS}/sharutils/manual/html_mono/sharutils.html
+sharutils      chapter ${GS}/sharutils/manual/html_chapter/
+sharutils      node    ${GS}/sharutils/manual/html_node/
+
+shepherd       mono    ${GS}/shepherd/manual/shepherd.html
+shepherd       node    ${GS}/shepherd/manual/html_node/
+
+# can't use mono files since they have generic names
+SMALLTALK = ${GS}/smalltalk
+smalltalk      node    ${SMALLTALK}/manual/html_node/
+ smalltalk-base        node    ${SMALLTALK}/manual-base/html_node/
+ smalltalk-libs        node    ${SMALLTALK}/manual-libs/html_node/
+
+sourceinstall  mono    ${GS}/sourceinstall/manual/sourceinstall.html
+sourceinstall  node    ${GS}/sourceinstall/manual/html_node/
+
+sqltutor       mono    ${GS}/sqltutor/manual/sqltutor.html
+sqltutor       node    ${GS}/sqltutor/manual/html_node/
+
+src-highlite   mono    ${GS}/src-highlite/source-highlight.html
+
+swbis          mono    ${GS}/swbis/manual.html
+
+tar            mono    ${GS}/tar/manual/tar.html
+tar            chapter ${GS}/tar/manual/html_chapter/
+tar            section ${GS}/tar/manual/html_section/
+tar            node    ${GS}/autoconf/manual/html_node/
+
+teseq          mono    ${GS}/teseq/teseq.html
+teseq          node    ${GS}/teseq/html_node/
+
+TEXINFO = ${GS}/texinfo/manual
+texinfo                mono    ${TEXINFO}/texinfo/texinfo.html
+texinfo                node    ${TEXINFO}/texinfo/html_node/
+ #
+ info          mono    ${TEXINFO}/info/info.html
+ info          node    ${TEXINFO}/info/html_node/
+ #
+ info-stnd     mono    ${TEXINFO}/info-stnd/info-stnd.html
+ info-stnd     node    ${TEXINFO}/info-stnd/html_node/
+
+thales         node    ${GS}/thales/manual/
+
+units          mono    ${GS}/units/manual/units.html
+units          node    ${GS}/units/manual/html_node/
+
+vc-dwim                mono    ${GS}/vc-dwim/manual/vc-dwim.html
+vc-dwim                node    ${GS}/vc-dwim/manual/html_node/
+
+wdiff          mono    ${GS}/wdiff/manual/wdiff.html
+wdiff          node    ${GS}/wdiff/manual/html_node/
+
+websocket4j    mono    ${GS}/websocket4j/manual/websocket4j.html
+websocket4j    node    ${GS}/websocket4j/manual/html_node/
+
+wget           mono    ${GS}/wget/manual/wget.html
+wget           node    ${GS}/wget/manual/html_node/
+
+xboard         mono    ${GS}/xboard/manual/xboard.html
+xboard         node    ${GS}/xboard/manual/html_node/
+
+# emacs-page
+# Free TeX-related Texinfo manuals on tug.org.
+
+T = http://tug.org/texinfohtml
+
+dvipng         mono    ${T}/dvipng.html
+dvips          mono    ${T}/dvips.html
+eplain         mono    ${T}/eplain.html
+kpathsea       mono    ${T}/kpathsea.html
+latex2e                mono    ${T}/latex2e.html
+tlbuild                mono    ${T}/tlbuild.html
+web2c          mono    ${T}/web2c.html
+
+
+# Local Variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "htmlxrefversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/doc/tutorial/manual.css b/doc/tutorial/manual.css
new file mode 100644 (file)
index 0000000..404525d
--- /dev/null
@@ -0,0 +1,52 @@
+/* Style-sheet to use for manuals (copied from Emacs) */
+
+@import url('/style.css');
+
+/* makeinfo 6.5 converts @quotation to <blockquote>.  Highlight them.  */
+blockquote {
+    font-style: normal;
+    border-left: solid 10px red;
+    padding-left: 2.5%;
+    margin-left: 0px;
+}
+
+var { font-style: italic; }
+
+/* Lay out @lisp just like @example.  Copied from what /style.css
+   does for the 'example' class.  */
+div.lisp { padding: .8em 1.2em .4em; }
+pre.lisp { padding: .8em 1.2em; }
+div.lisp, pre.lisp {
+   margin: 1em 0 1em 3% ;
+   -webkit-border-radius: .3em;
+   -moz-border-radius: .3em;
+   border-radius: .3em;
+   border: 1px solid #d4cbb6;
+   background-color: #f2efe4;
+}
+div.lisp > pre.lisp {
+   padding: 0 0 .4em;
+   margin: 0;
+   border: none;
+}
+
+/* ----- coreutils specific styling ----- */
+
+/* layout.css indents "body p" when it should probably only indent "body > p"?
+   In any case, disable indenting of p in these sub elements.  */
+dd p,li p {
+    margin-left: 0;
+    margin-right: 0;
+}
+
+/* underlined links are distracting, especially within outlined tables.  */
+a { /*add :link for external links*/
+    text-decoration: none; /* don't underline links by default */
+    outline-style: none;   /* don't put dotted box around clicked links */
+}
+a:hover {
+    text-decoration: underline;
+}
+
+/* The shadow around the body is distracting.  */
+body { box-shadow: 0 0 0 0; }
diff --git a/doc/tutorial/reset.css b/doc/tutorial/reset.css
new file mode 100644 (file)
index 0000000..9a6c306
--- /dev/null
@@ -0,0 +1,114 @@
+/*
+Software License Agreement (BSD License)
+
+Copyright (c) 2006, Yahoo! Inc.
+All rights reserved.
+
+Redistribution and use of this software in source and
+binary forms, with or without modification, arepermitted
+provided that the following conditions are met:
+
+* Redistributions of source code must retain the above
+copyright notice, this list of conditions and the
+following disclaimer.
+
+* Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the
+following disclaimer in the documentation and/or other
+materials provided with the distribution.
+
+* Neither the name of Yahoo! Inc. nor the names of its
+contributors may be used to endorse or promote products
+derived from this software without specific prior
+written permission of Yahoo! Inc.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+*/
+
+html {
+    color: #000;
+    background: #FFF;
+}
+
+body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4,
+h5, h6, pre, code, form, fieldset, legend, input,
+button, textarea, p, blockquote, th, td {
+    margin: 0;
+    padding: 0;
+}
+
+table {
+    border-collapse: collapse;
+    border-spacing: 0;
+}
+
+fieldset, img {
+    border: 0;
+}
+
+address, caption, cite, code, dfn, em, strong,
+th, var, optgroup {
+    font-style: inherit;
+    font-weight: inherit;
+}
+
+del, ins {
+    text-decoration: none;
+}
+
+li {
+    list-style:none;
+}
+
+caption, th {
+    text-align: left;
+}
+
+h1, h2, h3, h4, h5, h6 {
+    font-size: 100%;
+    font-weight: normal;
+}
+
+q:before, q:after {
+    content:'';
+}
+
+abbr, acronym {
+    border: 0;
+    font-variant: normal;
+}
+
+sup {
+    vertical-align: baseline;
+}
+sub {
+    vertical-align: baseline;
+}
+
+legend {
+    color: #000;
+}
+
+input, button, textarea, select, optgroup, option {
+    font-family: inherit;
+    font-size: inherit;
+    font-style: inherit;
+    font-weight: inherit;
+}
+
+input, button, textarea, select {
+    *font-size: 100%;
+}
diff --git a/doc/tutorial/run-gendocs.sh b/doc/tutorial/run-gendocs.sh
new file mode 100755 (executable)
index 0000000..5e60a2d
--- /dev/null
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+make version.texi/replacement
+
+./gendocs.sh --email gnunet-developers@gnu.org gnunet-c-tutorial "GNUnet C Tutorial" -o "manual/gnunet-c-tutorial"
+#cd manual
+#mkdir gnunet-c-tutorial
+#mv * gnunet-c-tutorial/
+#cd ..
+./gendocs.sh --email gnunet-developers@gnu.org gnunet "GNUnet Reference Manual" -o "manual/gnunet"
+#cd manual
+#mkdir handbook
+#mkdir ../tmp-gnunet
+#mv gnunet ../tmp-gnunet
+#mv * handbook/
+#mv ../tmp-gnunet gnunet
+cp "index.html" manual/
+printf "Success"
diff --git a/doc/tutorial/style.css b/doc/tutorial/style.css
new file mode 100644 (file)
index 0000000..0c45254
--- /dev/null
@@ -0,0 +1,174 @@
+/* This stylesheet is used by manuals and a few older resources. */
+
+@import url('/reset.css');
+
+
+/***  PAGE LAYOUT  ***/
+
+html, body {
+   font-size: 1em;
+   text-align: left;
+   text-decoration: none;
+}
+html { background-color: #e7e7e7; }
+
+body {
+   max-width: 74.92em;
+   margin: 0 auto;
+   padding: .5em 1em 1em 1em;
+   background-color: white;
+   border: .1em solid #c0c0c0;
+}
+
+
+/*** BASIC ELEMENTS ***/
+
+/* Size and positioning */
+
+p, pre, li, dt, dd, table, code, address { line-height: 1.3em; }
+
+h1 { font-size: 2em; margin: 1em 0 }
+h2 { font-size: 1.50em; margin: 1.0em 0 0.87em 0; }
+h3 { font-size: 1.30em; margin: 1.0em 0 0.87em 0; }
+h4 { font-size: 1.13em; margin: 1.0em 0 0.88em 0; }
+h5 { font-size: 1.00em; margin: 1.0em 0 1.00em 0; }
+
+p, pre { margin: 1em 0; }
+pre { overflow: auto; padding-bottom: .3em; }
+
+ul, ol, blockquote { margin-left: 1.5%; margin-right: 1.5%; }
+hr { margin: 1em 0; }
+/* Lists of underlined links are difficult to read. The top margin
+   gives a little more spacing between entries. */
+ul li { margin: .5em 1em; }
+ol li { margin: 1em; }
+ol ul li { margin: .5em 1em; }
+ul li p, ul ul li { margin-top: .3em; margin-bottom: .3em; }
+ul ul, ol ul { margin-top: 0; margin-bottom: 0; }
+
+/* Separate description lists from preceding text */
+dl { margin: 1em 0 0 0; }
+/* separate the "term" from subsequent "description" */
+dt { margin: .5em 0; }
+/* separate the "description" from subsequent list item
+   when the final <dd> child is an anonymous box */
+dd { margin: .5em 3% 1em 3%; }
+/* separate anonymous box (used to be the first element in <dd>)
+   from subsequent <p> */
+dd p { margin: .5em 0; }
+
+table {
+   display: block; overflow: auto;
+   margin-top: 1.5em; margin-bottom: 1.5em;
+}
+th { padding: .3em .5em; text-align: center; }
+td { padding: .2em .5em; }
+
+address { margin-bottom: 1em; }
+caption { margin-bottom: .5em; text-align: center; }
+sup { vertical-align: super; }
+sub { vertical-align: sub; }
+
+/* Style */
+
+h1, h2, h3, h4, h5, h6, strong, dt, th { font-weight: bold; }
+
+/* The default color (black) is too dark for large text in
+   bold font. */
+h1, h2, h3, h4 { color: #333; }
+h5, h6, dt { color: #222; }
+
+a[href] { color: #005090; }
+a[href]:visited { color: #100070; }
+a[href]:active, a[href]:hover {
+   color: #100070;
+   text-decoration: none;
+}
+
+h1 a[href]:visited, h2 a[href]:visited, h3 a[href]:visited,
+ h4 a[href]:visited { color: #005090; }
+h1 a[href]:hover, h2 a[href]:hover, h3 a[href]:hover,
+ h4 a[href]:hover { color: #100070; }
+
+ol { list-style: decimal outside;}
+ul { list-style: square outside; }
+ul ul, ol ul { list-style: circle; }
+li { list-style: inherit; }
+
+hr { background-color: #ede6d5; }
+table { border: 0; }
+
+abbr,acronym {
+   border-bottom:1px dotted #000;
+   text-decoration: none;
+   cursor:help;
+}
+del { text-decoration: line-through; }
+em { font-style: italic; }
+small { font-size: .9em; }
+
+img { max-width: 100%}
+
+
+/*** SIMPLE CLASSES ***/
+
+.center, .c { text-align: center; }
+.nocenter{ text-align: left; }
+
+.underline { text-decoration: underline; }
+.nounderline { text-decoration: none; }
+
+.no-bullet { list-style: none; }
+.inline-list li { display: inline }
+
+.netscape4, .no-display { display: none; }
+
+
+/*** MANUAL PAGES ***/
+
+/* This makes the very long tables of contents in Gnulib and other
+   manuals easier to read. */
+.contents ul, .shortcontents ul { font-weight: bold; }
+.contents ul ul, .shortcontents ul ul { font-weight: normal; }
+.contents ul { list-style: none; }
+
+/* For colored navigation bars (Emacs manual): make the bar extend
+   across the whole width of the page and give it a decent height. */
+.header, .node { margin: 0 -1em; padding: 0 1em; }
+.header p, .node p { line-height: 2em; }
+
+/* For navigation links */
+.node a, .header a { display: inline-block; line-height: 2em; }
+.node a:hover, .header a:hover { background: #f2efe4; }
+
+/* Inserts */
+table.cartouche td { padding: 1.5em; }
+
+div.display, div.lisp, div.smalldisplay,
+ div.smallexample, div.smalllisp { margin-left: 3%; }
+
+div.example { padding: .8em 1.2em .4em; }
+pre.example { padding: .8em 1.2em; }
+div.example, pre.example {
+   margin: 1em 0 1em 3% ;
+   -webkit-border-radius: .3em;
+   -moz-border-radius: .3em;
+   border-radius: .3em;
+   border: 1px solid #d4cbb6;
+   background-color: #f2efe4;
+}
+div.example > pre.example {
+   padding: 0 0 .4em;
+   margin: 0;
+   border: none;
+}
+
+pre.menu-comment { padding-top: 1.3em; margin: 0; }
+
+
+/*** FOR WIDE SCREENS ***/
+
+@media (min-width: 40em) {
+   body { padding: .5em 3em 1em 3em; }
+   div.header, div.node { margin: 0 -3em; padding: 0 3em; }
+}
index 3a3102f0a113556aa176bc36775307d3f0fd1b09..7b7af6369bbed661b9c967d40f556b4e1218a853 100644 (file)
@@ -10,7 +10,6 @@ pcfiles = \
        gnunetdatastore.pc \
        gnunetdht.pc \
        gnunetdns.pc \
-       gnunetdv.pc \
        gnunetenv.pc \
        gnunetfragmentation.pc \
        gnunetfs.pc \
@@ -19,14 +18,11 @@ pcfiles = \
        gnunetidentity.pc \
        gnunetcadet.pc \
        gnunetmicrophone.pc \
-       gnunetmulticast.pc \
        gnunetmysql.pc \
        gnunetnamestore.pc \
        gnunetnat.pc \
        gnunetnse.pc \
        gnunetpeerinfo.pc \
-       gnunetpsyc.pc \
-       gnunetpsycstore.pc \
        gnunetregex.pc \
        gnunetrevocation.pc \
        gnunetrps.pc \
@@ -38,7 +34,7 @@ pcfiles = \
        gnunettesting.pc \
        gnunettransport.pc \
        gnunetutil.pc \
-       gnunetvpn.pc 
+       gnunetvpn.pc
 
 all-local: $(pcfiles)
 
@@ -63,9 +59,6 @@ EXTRA_DIST = \
        gnunetdatastore.pc.in \
        gnunetdht.pc.in \
        gnunetdns.pc.in \
-       gnunetdnsparser.pc.in \
-       gnunetdnsstub.pc.in \
-       gnunetdv.pc.in \
        gnunetenv.pc.in \
        gnunetfragmentation.pc.in \
        gnunetfs.pc.in \
@@ -74,15 +67,12 @@ EXTRA_DIST = \
        gnunetidentity.pc.in \
        gnunetcadet.pc.in \
        gnunetmicrophone.pc.in \
-       gnunetmulticast.pc.in \
        gnunetmysql.pc.in \
        gnunetnamestore.pc.in \
        gnunetnat.pc.in \
        gnunetnse.pc.in \
        gnunetpeerinfo.pc.in \
        gnunetpostgres.pc.in \
-       gnunetpsyc.pc.in \
-       gnunetpsycstore.pc.in \
        gnunetregex.pc.in \
        gnunetrevocation.pc.in \
        gnunetrps.pc.in \
@@ -93,11 +83,8 @@ EXTRA_DIST = \
        gnunettestbed.pc.in \
        gnunettesting.pc.in \
        gnunettransport.pc.in \
-       gnunettun.pc.in \
        gnunetutil.pc.in \
-       gnunetvpn.pc.in 
+       gnunetvpn.pc.in
 
 CLEANFILES = $(pcfiles)
 AM_CPPFLAGS = -I$(top_srcdir)/src/include
-
-
diff --git a/pkgconfig/gnunetdv.pc.in b/pkgconfig/gnunetdv.pc.in
deleted file mode 100644 (file)
index bd5bd42..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-
-Name: GNUnet dv
-Description: Library to access GNUnet DV service
-URL: http://gnunet.org
-Version: @VERSION@
-Requires:
-Libs: -L${libdir} -lgnunetdv
-Cflags: -I${includedir}
diff --git a/pkgconfig/gnunetmulticast.pc.in b/pkgconfig/gnunetmulticast.pc.in
deleted file mode 100644 (file)
index 2045555..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-
-Name: GNUnet MULTICAST
-Description: library to multicast messages to a group of peers
-URL: https://gnunet.org
-Version: @VERSION@
-Requires:
-Libs: -L${libdir} -lgnunetmulticast
-Cflags: -I${includedir}
diff --git a/pkgconfig/gnunetpsyc.pc.in b/pkgconfig/gnunetpsyc.pc.in
deleted file mode 100644 (file)
index 9cfabdf..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-
-Name: GNUnet PSYC
-Description: library for PSYC multicast channel management
-URL: https://gnunet.org
-Version: @VERSION@
-Requires:
-Libs: -L${libdir} -lgnunetpsyc
-Cflags: -I${includedir}
diff --git a/pkgconfig/gnunetpsycstore.pc.in b/pkgconfig/gnunetpsycstore.pc.in
deleted file mode 100644 (file)
index 765abdc..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-
-Name: GNUnet PSYCSTORE
-Description: library to for persistent storage of PSYC messages
-URL: https://gnunet.org
-Version: @VERSION@
-Requires:
-Libs: -L${libdir} -lgnunetpsycstore
-Cflags: -I${includedir}
diff --git a/pkgconfig/gnunetsocial.pc.in b/pkgconfig/gnunetsocial.pc.in
deleted file mode 100644 (file)
index 5ea9c6a..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-
-Name: GNUnet Social
-Description: library for social interactions
-URL: https://gnunet.org
-Version: @VERSION@
-Requires:
-Libs: -L${libdir} -lgnunetsocial
-Cflags: -I${includedir}
index 0ee48fcde4ed64a98a75ad4607c71b86244a3c31..0d4569514fa05d4a197eb49301cc5101b4cc0594 100644 (file)
@@ -4,14 +4,6 @@ src/arm/arm_monitor_api.c
 src/arm/gnunet-arm.c
 src/arm/gnunet-service-arm.c
 src/arm/mockup-service.c
-src/ats-tests/ats-testing-experiment.c
-src/ats-tests/ats-testing-log.c
-src/ats-tests/ats-testing-preferences.c
-src/ats-tests/ats-testing-traffic.c
-src/ats-tests/ats-testing.c
-src/ats-tests/gnunet-ats-sim.c
-src/ats-tests/gnunet-solver-eval.c
-src/ats-tool/gnunet-ats.c
 src/ats/ats_api2_application.c
 src/ats/ats_api2_transport.c
 src/ats/ats_api_connectivity.c
@@ -19,10 +11,10 @@ src/ats/ats_api_performance.c
 src/ats/ats_api_scanner.c
 src/ats/ats_api_scheduling.c
 src/ats/gnunet-ats-solver-eval.c
-src/ats/gnunet-service-ats-new.c
-src/ats/gnunet-service-ats.c
 src/ats/gnunet-service-ats_addresses.c
+src/ats/gnunet-service-ats.c
 src/ats/gnunet-service-ats_connectivity.c
+src/ats/gnunet-service-ats-new.c
 src/ats/gnunet-service-ats_normalization.c
 src/ats/gnunet-service-ats_performance.c
 src/ats/gnunet-service-ats_plugins.c
@@ -34,6 +26,14 @@ src/ats/plugin_ats2_simple.c
 src/ats/plugin_ats_mlp.c
 src/ats/plugin_ats_proportional.c
 src/ats/plugin_ats_ril.c
+src/ats-tests/ats-testing.c
+src/ats-tests/ats-testing-experiment.c
+src/ats-tests/ats-testing-log.c
+src/ats-tests/ats-testing-preferences.c
+src/ats-tests/ats-testing-traffic.c
+src/ats-tests/gnunet-ats-sim.c
+src/ats-tests/gnunet-solver-eval.c
+src/ats-tool/gnunet-ats.c
 src/auction/gnunet-auction-create.c
 src/auction/gnunet-auction-info.c
 src/auction/gnunet-auction-join.c
@@ -50,8 +50,8 @@ src/cadet/cadet_api_list_peers.c
 src/cadet/cadet_api_list_tunnels.c
 src/cadet/cadet_test_lib.c
 src/cadet/desirability_table.c
-src/cadet/gnunet-cadet-profiler.c
 src/cadet/gnunet-cadet.c
+src/cadet/gnunet-cadet-profiler.c
 src/cadet/gnunet-service-cadet.c
 src/cadet/gnunet-service-cadet_channel.c
 src/cadet/gnunet-service-cadet_connection.c
@@ -67,15 +67,15 @@ src/consensus/gnunet-service-consensus.c
 src/consensus/plugin_block_consensus.c
 src/conversation/conversation_api.c
 src/conversation/conversation_api_call.c
-src/conversation/gnunet-conversation-test.c
 src/conversation/gnunet-conversation.c
-src/conversation/gnunet-helper-audio-playback-gst.c
+src/conversation/gnunet-conversation-test.c
+src/conversation/gnunet_gst.c
+src/conversation/gnunet_gst_test.c
 src/conversation/gnunet-helper-audio-playback.c
-src/conversation/gnunet-helper-audio-record-gst.c
+src/conversation/gnunet-helper-audio-playback-gst.c
 src/conversation/gnunet-helper-audio-record.c
+src/conversation/gnunet-helper-audio-record-gst.c
 src/conversation/gnunet-service-conversation.c
-src/conversation/gnunet_gst.c
-src/conversation/gnunet_gst_test.c
 src/conversation/microphone.c
 src/conversation/plugin_gnsrecord_conversation.c
 src/conversation/speaker.c
@@ -111,6 +111,7 @@ src/dht/dht_api.c
 src/dht/dht_test_lib.c
 src/dht/gnunet-dht-get.c
 src/dht/gnunet-dht-monitor.c
+src/dht/gnunet_dht_profiler.c
 src/dht/gnunet-dht-put.c
 src/dht/gnunet-service-dht.c
 src/dht/gnunet-service-dht_clients.c
@@ -119,7 +120,6 @@ src/dht/gnunet-service-dht_hello.c
 src/dht/gnunet-service-dht_neighbours.c
 src/dht/gnunet-service-dht_nse.c
 src/dht/gnunet-service-dht_routing.c
-src/dht/gnunet_dht_profiler.c
 src/dht/plugin_block_dht.c
 src/dns/dns_api.c
 src/dns/gnunet-dns-monitor.c
@@ -128,13 +128,9 @@ src/dns/gnunet-helper-dns.c
 src/dns/gnunet-service-dns.c
 src/dns/gnunet-zonewalk.c
 src/dns/plugin_block_dns.c
-src/dv/dv_api.c
-src/dv/gnunet-dv.c
-src/dv/gnunet-service-dv.c
-src/dv/plugin_transport_dv.c
 src/exit/gnunet-daemon-exit.c
-src/exit/gnunet-helper-exit-windows.c
 src/exit/gnunet-helper-exit.c
+src/exit/gnunet-helper-exit-windows.c
 src/fragmentation/defragmentation.c
 src/fragmentation/fragmentation.c
 src/fs/fs_api.c
@@ -159,8 +155,8 @@ src/fs/gnunet-auto-share.c
 src/fs/gnunet-daemon-fsprofiler.c
 src/fs/gnunet-directory.c
 src/fs/gnunet-download.c
-src/fs/gnunet-fs-profiler.c
 src/fs/gnunet-fs.c
+src/fs/gnunet-fs-profiler.c
 src/fs/gnunet-helper-fs-publish.c
 src/fs/gnunet-publish.c
 src/fs/gnunet-search.c
@@ -180,10 +176,10 @@ src/gns/gns_tld_api.c
 src/gns/gnunet-bcd.c
 src/gns/gnunet-dns2gns.c
 src/gns/gnunet-gns-benchmark.c
+src/gns/gnunet-gns.c
 src/gns/gnunet-gns-helper-service-w32.c
 src/gns/gnunet-gns-import.c
 src/gns/gnunet-gns-proxy.c
-src/gns/gnunet-gns.c
 src/gns/gnunet-service-gns.c
 src/gns/gnunet-service-gns_interceptor.c
 src/gns/gnunet-service-gns_resolver.c
@@ -191,19 +187,19 @@ src/gns/nss/nss_gns.c
 src/gns/nss/nss_gns_query.c
 src/gns/plugin_block_gns.c
 src/gns/plugin_gnsrecord_gns.c
-src/gns/w32nsp-install.c
-src/gns/w32nsp-resolve.c
-src/gns/w32nsp-uninstall.c
-src/gns/w32nsp.c
 src/gnsrecord/gnsrecord.c
 src/gnsrecord/gnsrecord_crypto.c
 src/gnsrecord/gnsrecord_misc.c
 src/gnsrecord/gnsrecord_serialization.c
 src/gnsrecord/plugin_gnsrecord_dns.c
+src/gns/w32nsp.c
+src/gns/w32nsp-install.c
+src/gns/w32nsp-resolve.c
+src/gns/w32nsp-uninstall.c
 src/hello/address.c
 src/hello/gnunet-hello.c
-src/hello/hello-ng.c
 src/hello/hello.c
+src/hello/hello-ng.c
 src/hostlist/gnunet-daemon-hostlist.c
 src/hostlist/gnunet-daemon-hostlist_client.c
 src/hostlist/gnunet-daemon-hostlist_server.c
@@ -216,9 +212,6 @@ src/json/json_generator.c
 src/json/json_gnsrecord.c
 src/json/json_helper.c
 src/json/json_mhd.c
-src/multicast/gnunet-multicast.c
-src/multicast/gnunet-service-multicast.c
-src/multicast/multicast_api.c
 src/my/my.c
 src/my/my_query_helper.c
 src/my/my_result_helper.c
@@ -229,8 +222,8 @@ 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-fcfsd.c
 src/namestore/gnunet-namestore.c
+src/namestore/gnunet-namestore-fcfsd.c
 src/namestore/gnunet-service-namestore.c
 src/namestore/gnunet-zoneimport.c
 src/namestore/namestore_api.c
@@ -245,10 +238,10 @@ src/nat-auto/gnunet-service-nat-auto.c
 src/nat-auto/gnunet-service-nat-auto_legacy.c
 src/nat-auto/nat_auto_api.c
 src/nat-auto/nat_auto_api_test.c
-src/nat/gnunet-helper-nat-client-windows.c
 src/nat/gnunet-helper-nat-client.c
-src/nat/gnunet-helper-nat-server-windows.c
+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-service-nat.c
 src/nat/gnunet-service-nat_externalip.c
@@ -257,16 +250,16 @@ src/nat/gnunet-service-nat_mini.c
 src/nat/gnunet-service-nat_stun.c
 src/nat/nat_api.c
 src/nat/nat_api_stun.c
-src/nse/gnunet-nse-profiler.c
 src/nse/gnunet-nse.c
+src/nse/gnunet-nse-profiler.c
 src/nse/gnunet-service-nse.c
 src/nse/nse_api.c
 src/nt/nt.c
-src/peerinfo-tool/gnunet-peerinfo.c
-src/peerinfo-tool/gnunet-peerinfo_plugins.c
 src/peerinfo/gnunet-service-peerinfo.c
 src/peerinfo/peerinfo_api.c
 src/peerinfo/peerinfo_api_notify.c
+src/peerinfo-tool/gnunet-peerinfo.c
+src/peerinfo-tool/gnunet-peerinfo_plugins.c
 src/peerstore/gnunet-peerstore.c
 src/peerstore/gnunet-service-peerstore.c
 src/peerstore/peerstore_api.c
@@ -280,16 +273,6 @@ src/pq/pq_exec.c
 src/pq/pq_prepare.c
 src/pq/pq_query_helper.c
 src/pq/pq_result_helper.c
-src/psyc/gnunet-service-psyc.c
-src/psyc/psyc_api.c
-src/psycstore/gnunet-service-psycstore.c
-src/psycstore/plugin_psycstore_mysql.c
-src/psycstore/plugin_psycstore_postgres.c
-src/psycstore/plugin_psycstore_sqlite.c
-src/psycstore/psycstore_api.c
-src/psycutil/psyc_env.c
-src/psycutil/psyc_message.c
-src/psycutil/psyc_slicer.c
 src/pt/gnunet-daemon-pt.c
 src/reclaim-attribute/plugin_reclaim_attribute_gnuid.c
 src/reclaim-attribute/reclaim_attribute.c
@@ -312,6 +295,7 @@ src/regex/regex_internal_dht.c
 src/regex/regex_test_graph.c
 src/regex/regex_test_lib.c
 src/regex/regex_test_random.c
+src/rest/gnunet-rest-server.c
 src/rest-plugins/json_reclaim.c
 src/rest-plugins/oidc_helper.c
 src/rest-plugins/plugin_rest_copying.c
@@ -322,28 +306,27 @@ src/rest-plugins/plugin_rest_namestore.c
 src/rest-plugins/plugin_rest_openid_connect.c
 src/rest-plugins/plugin_rest_peerinfo.c
 src/rest-plugins/plugin_rest_reclaim.c
-src/rest/gnunet-rest-server.c
 src/rest/rest.c
 src/revocation/gnunet-revocation.c
 src/revocation/gnunet-service-revocation.c
 src/revocation/plugin_block_revocation.c
 src/revocation/revocation_api.c
-src/rps/gnunet-rps-profiler.c
 src/rps/gnunet-rps.c
+src/rps/gnunet-rps-profiler.c
 src/rps/gnunet-service-rps.c
 src/rps/gnunet-service-rps_custommap.c
 src/rps/gnunet-service-rps_sampler.c
 src/rps/gnunet-service-rps_sampler_elem.c
 src/rps/gnunet-service-rps_view.c
+src/rps/rps_api.c
 src/rps/rps-sampler_client.c
 src/rps/rps-sampler_common.c
 src/rps/rps-test_util.c
-src/rps/rps_api.c
 src/scalarproduct/gnunet-scalarproduct.c
-src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c
-src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.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
@@ -359,9 +342,6 @@ src/set/ibf.c
 src/set/ibf_sim.c
 src/set/plugin_block_set_test.c
 src/set/set_api.c
-src/social/gnunet-service-social.c
-src/social/gnunet-social.c
-src/social/social_api.c
 src/sq/sq.c
 src/sq/sq_exec.c
 src/sq/sq_prepare.c
@@ -372,16 +352,15 @@ src/statistics/gnunet-statistics.c
 src/statistics/statistics_api.c
 src/template/gnunet-service-template.c
 src/template/gnunet-template.c
-src/testbed-logger/gnunet-service-testbed-logger.c
-src/testbed-logger/testbed_logger_api.c
 src/testbed/generate-underlay-topology.c
 src/testbed/gnunet-daemon-latency-logger.c
 src/testbed/gnunet-daemon-testbed-blacklist.c
 src/testbed/gnunet-daemon-testbed-underlay.c
 src/testbed/gnunet-helper-testbed.c
+src/testbed/gnunet_mpi_test.c
 src/testbed/gnunet-service-test-barriers.c
-src/testbed/gnunet-service-testbed.c
 src/testbed/gnunet-service-testbed_barriers.c
+src/testbed/gnunet-service-testbed.c
 src/testbed/gnunet-service-testbed_cache.c
 src/testbed/gnunet-service-testbed_connectionpool.c
 src/testbed/gnunet-service-testbed_cpustatus.c
@@ -389,19 +368,20 @@ src/testbed/gnunet-service-testbed_links.c
 src/testbed/gnunet-service-testbed_meminfo.c
 src/testbed/gnunet-service-testbed_oc.c
 src/testbed/gnunet-service-testbed_peers.c
-src/testbed/gnunet-testbed-profiler.c
-src/testbed/gnunet_mpi_test.c
 src/testbed/gnunet_testbed_mpi_spawn.c
-src/testbed/testbed_api.c
+src/testbed/gnunet-testbed-profiler.c
+src/testbed-logger/gnunet-service-testbed-logger.c
+src/testbed-logger/testbed_logger_api.c
 src/testbed/testbed_api_barriers.c
+src/testbed/testbed_api.c
 src/testbed/testbed_api_hosts.c
 src/testbed/testbed_api_operations.c
 src/testbed/testbed_api_peers.c
 src/testbed/testbed_api_sd.c
 src/testbed/testbed_api_services.c
 src/testbed/testbed_api_statistics.c
-src/testbed/testbed_api_test.c
 src/testbed/testbed_api_testbed.c
+src/testbed/testbed_api_test.c
 src/testbed/testbed_api_topology.c
 src/testbed/testbed_api_underlay.c
 src/testing/gnunet-testing.c
@@ -413,29 +393,29 @@ src/transport/gnunet-communicator-tcp.c
 src/transport/gnunet-communicator-udp.c
 src/transport/gnunet-communicator-unix.c
 src/transport/gnunet-helper-transport-bluetooth.c
-src/transport/gnunet-helper-transport-wlan-dummy.c
 src/transport/gnunet-helper-transport-wlan.c
+src/transport/gnunet-helper-transport-wlan-dummy.c
 src/transport/gnunet-service-tng.c
-src/transport/gnunet-service-transport.c
 src/transport/gnunet-service-transport_ats.c
+src/transport/gnunet-service-transport.c
 src/transport/gnunet-service-transport_hello.c
 src/transport/gnunet-service-transport_manipulation.c
 src/transport/gnunet-service-transport_neighbours.c
 src/transport/gnunet-service-transport_plugins.c
 src/transport/gnunet-service-transport_validation.c
+src/transport/gnunet-transport.c
 src/transport/gnunet-transport-certificate-creation.c
 src/transport/gnunet-transport-profiler.c
 src/transport/gnunet-transport-wlan-receiver.c
 src/transport/gnunet-transport-wlan-sender.c
-src/transport/gnunet-transport.c
 src/transport/plugin_transport_http_client.c
 src/transport/plugin_transport_http_common.c
 src/transport/plugin_transport_http_server.c
 src/transport/plugin_transport_smtp.c
 src/transport/plugin_transport_tcp.c
 src/transport/plugin_transport_template.c
-src/transport/plugin_transport_udp.c
 src/transport/plugin_transport_udp_broadcasting.c
+src/transport/plugin_transport_udp.c
 src/transport/plugin_transport_unix.c
 src/transport/plugin_transport_wlan.c
 src/transport/plugin_transport_xt.c
@@ -444,11 +424,7 @@ src/transport/tcp_connection_legacy.c
 src/transport/tcp_server_legacy.c
 src/transport/tcp_server_mst_legacy.c
 src/transport/tcp_service_legacy.c
-src/transport/transport-testing-filenames.c
-src/transport/transport-testing-loggers.c
-src/transport/transport-testing-main.c
-src/transport/transport-testing-send.c
-src/transport/transport-testing.c
+src/transport/transport_api2_address.c
 src/transport/transport_api2_communication.c
 src/transport/transport_api2_core.c
 src/transport/transport_api2_monitor.c
@@ -460,6 +436,11 @@ src/transport/transport_api_manipulation.c
 src/transport/transport_api_monitor_peers.c
 src/transport/transport_api_monitor_plugins.c
 src/transport/transport_api_offer_hello.c
+src/transport/transport-testing.c
+src/transport/transport-testing-filenames.c
+src/transport/transport-testing-loggers.c
+src/transport/transport-testing-main.c
+src/transport/transport-testing-send.c
 src/util/bandwidth.c
 src/util/benchmark.c
 src/util/bio.c
@@ -472,8 +453,8 @@ src/util/configuration_loader.c
 src/util/container_bloomfilter.c
 src/util/container_heap.c
 src/util/container_meta_data.c
-src/util/container_multihashmap.c
 src/util/container_multihashmap32.c
+src/util/container_multihashmap.c
 src/util/container_multipeermap.c
 src/util/container_multishortmap.c
 src/util/crypto_abe.c
@@ -495,15 +476,15 @@ src/util/dnsparser.c
 src/util/dnsstub.c
 src/util/getopt.c
 src/util/getopt_helpers.c
-src/util/gnunet-config-diff.c
 src/util/gnunet-config.c
+src/util/gnunet-config-diff.c
 src/util/gnunet-ecc.c
 src/util/gnunet-helper-w32-console.c
 src/util/gnunet-resolver.c
 src/util/gnunet-scrypt.c
 src/util/gnunet-service-resolver.c
-src/util/gnunet-timeout-w32.c
 src/util/gnunet-timeout.c
+src/util/gnunet-timeout-w32.c
 src/util/gnunet-uri.c
 src/util/helper.c
 src/util/load.c
@@ -532,13 +513,13 @@ src/util/tun.c
 src/util/w32cat.c
 src/util/win.c
 src/util/winproc.c
-src/vpn/gnunet-helper-vpn-windows.c
 src/vpn/gnunet-helper-vpn.c
+src/vpn/gnunet-helper-vpn-windows.c
 src/vpn/gnunet-service-vpn.c
 src/vpn/gnunet-vpn.c
 src/vpn/vpn_api.c
-src/zonemaster/gnunet-service-zonemaster-monitor.c
 src/zonemaster/gnunet-service-zonemaster.c
+src/zonemaster/gnunet-service-zonemaster-monitor.c
 src/fs/fs_api.h
 src/include/compat.h
 src/include/gnunet_common.h
index d036280f7cb6e031e30d53972cfb6d1ad3539e93..a543925fc4378989720562dfeb8b4d7addbbbfd9 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnunet 0.10.1\n"
 "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2018-10-20 11:13+0200\n"
+"POT-Creation-Date: 2019-02-13 00:37+0100\n"
 "PO-Revision-Date: 2015-03-08 16:16+0100\n"
 "Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n"
 "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
@@ -21,1027 +21,1021 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Poedit 1.7.4\n"
 
-#: src/arm/gnunet-arm.c:154
+#: src/arm/gnunet-arm.c:156
 #, fuzzy, c-format
 msgid "Failed to remove configuration file %s\n"
 msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':"
 
-#: src/arm/gnunet-arm.c:160
+#: src/arm/gnunet-arm.c:162
 #, fuzzy, c-format
 msgid "Failed to remove servicehome directory %s\n"
 msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n"
 
-#: src/arm/gnunet-arm.c:220 src/testbed/gnunet-service-testbed_peers.c:1137
+#: src/arm/gnunet-arm.c:222 src/testbed/gnunet-service-testbed_peers.c:1139
 msgid "Message was sent successfully"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:222 src/testbed/gnunet-service-testbed_peers.c:1139
+#: src/arm/gnunet-arm.c:224 src/testbed/gnunet-service-testbed_peers.c:1141
 msgid "We disconnected from ARM before we could send a request"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:224 src/testbed/gnunet-service-testbed_peers.c:1141
+#: src/arm/gnunet-arm.c:226 src/testbed/gnunet-service-testbed_peers.c:1143
 msgid "Unknown request status"
 msgstr "Unbekannter Anfragestatus"
 
-#: src/arm/gnunet-arm.c:240
+#: src/arm/gnunet-arm.c:242
 #, fuzzy
 msgid "is stopped"
 msgstr "%s wurde gestoppt"
 
-#: src/arm/gnunet-arm.c:242
+#: src/arm/gnunet-arm.c:244
 #, fuzzy
 msgid "is starting"
 msgstr "%s startet"
 
-#: src/arm/gnunet-arm.c:244
+#: src/arm/gnunet-arm.c:246
 #, fuzzy
 msgid "is stopping"
 msgstr "%s wird gestoppt"
 
-#: src/arm/gnunet-arm.c:246
+#: src/arm/gnunet-arm.c:248
 #, fuzzy
 msgid "is starting already"
 msgstr "%s ist bereits gestartet"
 
-#: src/arm/gnunet-arm.c:248
+#: src/arm/gnunet-arm.c:250
 #, fuzzy
 msgid "is stopping already"
 msgstr "%s wird bereits gestoppt"
 
-#: src/arm/gnunet-arm.c:250
+#: src/arm/gnunet-arm.c:252
 #, fuzzy
 msgid "is started already"
 msgstr "%s ist bereits gestartet"
 
-#: src/arm/gnunet-arm.c:252
+#: src/arm/gnunet-arm.c:254
 #, fuzzy
 msgid "is stopped already"
 msgstr "%s ist bereits gestoppt"
 
-#: src/arm/gnunet-arm.c:254
+#: src/arm/gnunet-arm.c:256
 msgid "service is not known to ARM"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:256
+#: src/arm/gnunet-arm.c:258
 #, fuzzy
 msgid "service failed to start"
 msgstr "%s-Dienst konnte nicht gestartet werden"
 
-#: src/arm/gnunet-arm.c:258
+#: src/arm/gnunet-arm.c:260
 msgid "service cannot be manipulated because ARM is shutting down"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:260
+#: src/arm/gnunet-arm.c:262
 #, fuzzy
 msgid "Unknown result code."
 msgstr "Unbekannter Anfragestatus"
 
-#: src/arm/gnunet-arm.c:292
+#: src/arm/gnunet-arm.c:295
 msgid "Fatal error initializing ARM API.\n"
 msgstr "Schwerwiegender Fehler bei der Initialisierung der ARM-API.\n"
 
-#: src/arm/gnunet-arm.c:320 src/arm/gnunet-arm.c:329
+#: src/arm/gnunet-arm.c:324 src/arm/gnunet-arm.c:333
 #, c-format
 msgid "Failed to start the ARM service: %s\n"
 msgstr "ARM-Dienst konnte nicht gestartet werden: %s\n"
 
-#: src/arm/gnunet-arm.c:363
+#: src/arm/gnunet-arm.c:368
 #, fuzzy, c-format
 msgid "Failed to send a stop request to the ARM service: %s\n"
 msgstr "Fehler beim Senden einer `%s' Anfrage an den SMTP Server.\n"
 
-#: src/arm/gnunet-arm.c:374
+#: src/arm/gnunet-arm.c:379
 #, fuzzy, c-format
 msgid "Failed to stop the ARM service: %s\n"
 msgstr "`%s' Dienst konnte nicht initialisiert werden.\n"
 
-#: src/arm/gnunet-arm.c:413
+#: src/arm/gnunet-arm.c:419
 #, fuzzy, c-format
 msgid "Failed to send a request to start the `%s' service: %s\n"
 msgstr "HTTP Anfrage konnte nicht an Host `%s' gesendet werden: %s\n"
 
-#: src/arm/gnunet-arm.c:423
+#: src/arm/gnunet-arm.c:429
 #, fuzzy, c-format
 msgid "Failed to start the `%s' service: %s\n"
 msgstr "`%s' Dienst konnte nicht initialisiert werden.\n"
 
-#: src/arm/gnunet-arm.c:460
+#: src/arm/gnunet-arm.c:467
 #, fuzzy, c-format
 msgid "Failed to send a request to kill the `%s' service: %%s\n"
 msgstr "HTTP Anfrage konnte nicht an Host `%s' gesendet werden: %s\n"
 
-#: src/arm/gnunet-arm.c:471
+#: src/arm/gnunet-arm.c:478
 #, fuzzy, c-format
 msgid "Failed to kill the `%s' service: %s\n"
 msgstr "`%s' Dienst konnte nicht initialisiert werden.\n"
 
-#: src/arm/gnunet-arm.c:511
+#: src/arm/gnunet-arm.c:519
 #, fuzzy, c-format
 msgid "Failed to request a list of services: %s\n"
 msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
 
-#: src/arm/gnunet-arm.c:520
+#: src/arm/gnunet-arm.c:528
 msgid "Error communicating with ARM. ARM not running?\n"
 msgstr "Fehler bei der Kommunikation mit ARM. Läuft ARM nicht?\n"
 
-#: src/arm/gnunet-arm.c:526
+#: src/arm/gnunet-arm.c:534
 msgid "Running services:\n"
 msgstr "Laufende Dienste:\n"
 
-#: src/arm/gnunet-arm.c:614
+#: src/arm/gnunet-arm.c:623
 #, c-format
 msgid "Now only monitoring, press CTRL-C to stop.\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:646
+#: src/arm/gnunet-arm.c:656
 #, c-format
 msgid "Stopped %s.\n"
 msgstr "%s wurde gestoppt.\n"
 
-#: src/arm/gnunet-arm.c:649
+#: src/arm/gnunet-arm.c:659
 #, c-format
 msgid "Starting %s...\n"
 msgstr "%s wird gestartet …\n"
 
-#: src/arm/gnunet-arm.c:652
+#: src/arm/gnunet-arm.c:662
 #, c-format
 msgid "Stopping %s...\n"
 msgstr "%s wird gestoppt …\n"
 
-#: src/arm/gnunet-arm.c:666
+#: src/arm/gnunet-arm.c:676
 #, fuzzy, c-format
 msgid "Unknown status %u for service %s.\n"
 msgstr "`%s': unbekannter Dienst: %s\n"
 
-#: src/arm/gnunet-arm.c:767
+#: src/arm/gnunet-arm.c:766
 msgid "stop all GNUnet services"
 msgstr "Alle GNUnet-Dienste stoppen"
 
-#: src/arm/gnunet-arm.c:773
+#: src/arm/gnunet-arm.c:771
 msgid "start a particular service"
 msgstr "Einen bestimmten Dienst starten"
 
-#: src/arm/gnunet-arm.c:779
+#: src/arm/gnunet-arm.c:776
 msgid "stop a particular service"
 msgstr "Einen bestimmten Dienst stoppen"
 
-#: src/arm/gnunet-arm.c:784
+#: src/arm/gnunet-arm.c:780
 msgid "start all GNUnet default services"
 msgstr "Alle Standard-GNUnet-Dienste starten"
 
-#: src/arm/gnunet-arm.c:789
+#: src/arm/gnunet-arm.c:784
 msgid "stop and start all GNUnet default services"
 msgstr "Alle Standard-GNUnet-Dienste stoppen und starten"
 
-#: src/arm/gnunet-arm.c:793
+#: src/arm/gnunet-arm.c:788
 msgid "delete config file and directory on exit"
 msgstr "Konfigurationsdatei und Verzeichnis beim Beenden löschen"
 
-#: src/arm/gnunet-arm.c:798
+#: src/arm/gnunet-arm.c:792
 msgid "monitor ARM activities"
 msgstr "ARM-Aktivitäten überwachen"
 
-#: src/arm/gnunet-arm.c:803
+#: src/arm/gnunet-arm.c:796
 msgid "don't print status messages"
 msgstr "Keine Statusmeldungen ausgeben"
 
-#: src/arm/gnunet-arm.c:809
+#: src/arm/gnunet-arm.c:801
 msgid "exit with error status if operation does not finish after DELAY"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:814
+#: src/arm/gnunet-arm.c:805
 msgid "list currently running services"
 msgstr "Alle derzeit laufenden Dienste auflisten"
 
-#: src/arm/gnunet-arm.c:819
+#: src/arm/gnunet-arm.c:809
 msgid "don't let gnunet-service-arm inherit standard output"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:824
+#: src/arm/gnunet-arm.c:813
 msgid "don't let gnunet-service-arm inherit standard error"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:837
+#: src/arm/gnunet-arm.c:828
 msgid "Control services and the Automated Restart Manager (ARM)"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:386 src/transport/plugin_transport_tcp.c:1118
-#: src/transport/plugin_transport_xt.c:1118
-#: src/transport/tcp_service_legacy.c:555 src/util/service.c:610
+#: src/arm/gnunet-service-arm.c:388 src/transport/plugin_transport_tcp.c:1120
+#: src/transport/plugin_transport_xt.c:1120
+#: src/transport/tcp_service_legacy.c:557 src/util/service.c:1167
 #, c-format
 msgid ""
 "Disabling IPv6 support for service `%s', failed to create IPv6 socket: %s\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:410 src/arm/gnunet-service-arm.c:416
-#: src/transport/plugin_transport_tcp.c:1137
-#: src/transport/plugin_transport_tcp.c:1143
-#: src/transport/plugin_transport_tcp.c:3823
-#: src/transport/plugin_transport_xt.c:1137
-#: src/transport/plugin_transport_xt.c:1143
-#: src/transport/plugin_transport_xt.c:3831
-#: src/transport/tcp_service_legacy.c:574
-#: src/transport/tcp_service_legacy.c:580 src/util/service.c:635
-#: src/util/service.c:641
+#: src/arm/gnunet-service-arm.c:412 src/arm/gnunet-service-arm.c:418
+#: src/transport/plugin_transport_tcp.c:1139
+#: src/transport/plugin_transport_tcp.c:1145
+#: src/transport/plugin_transport_tcp.c:3829
+#: src/transport/plugin_transport_xt.c:1139
+#: src/transport/plugin_transport_xt.c:1145
+#: src/transport/plugin_transport_xt.c:3833
+#: src/transport/tcp_service_legacy.c:576
+#: src/transport/tcp_service_legacy.c:582 src/util/service.c:1192
+#: src/util/service.c:1198
 #, c-format
 msgid "Require valid port number for service `%s' in configuration!\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:455 src/transport/plugin_transport_tcp.c:1174
-#: src/transport/plugin_transport_xt.c:1174
-#: src/transport/tcp_service_legacy.c:611 src/util/client.c:504
-#: src/util/service.c:680
+#: src/arm/gnunet-service-arm.c:457 src/transport/plugin_transport_tcp.c:1176
+#: src/transport/plugin_transport_xt.c:1176
+#: src/transport/tcp_service_legacy.c:613 src/util/client.c:506
+#: src/util/service.c:1237
 #, c-format
 msgid "UNIXPATH `%s' too long, maximum length is %llu\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:460 src/transport/plugin_transport_tcp.c:1178
-#: src/transport/plugin_transport_xt.c:1178
-#: src/transport/tcp_service_legacy.c:615 src/util/client.c:509
-#: src/util/service.c:685
+#: src/arm/gnunet-service-arm.c:462 src/transport/plugin_transport_tcp.c:1180
+#: src/transport/plugin_transport_xt.c:1180
+#: src/transport/tcp_service_legacy.c:617 src/util/client.c:511
+#: src/util/service.c:1242
 #, c-format
 msgid "Using `%s' instead\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:493 src/transport/plugin_transport_tcp.c:1209
-#: src/transport/plugin_transport_xt.c:1209
-#: src/transport/tcp_service_legacy.c:646 src/util/service.c:721
+#: src/arm/gnunet-service-arm.c:495 src/transport/plugin_transport_tcp.c:1211
+#: src/transport/plugin_transport_xt.c:1211
+#: src/transport/tcp_service_legacy.c:648 src/util/service.c:1278
 #, c-format
 msgid ""
 "Disabling UNIX domain socket support for service `%s', failed to create UNIX "
 "domain socket: %s\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:515 src/transport/plugin_transport_tcp.c:1226
-#: src/transport/plugin_transport_xt.c:1226
-#: src/transport/tcp_service_legacy.c:663 src/util/service.c:739
+#: src/arm/gnunet-service-arm.c:517 src/transport/plugin_transport_tcp.c:1228
+#: src/transport/plugin_transport_xt.c:1228
+#: src/transport/tcp_service_legacy.c:665 src/util/service.c:1296
 #, c-format
 msgid "Have neither PORT nor UNIXPATH for service `%s', but one is required\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:554
-#: src/transport/plugin_transport_http_server.c:2682
-#: src/transport/plugin_transport_tcp.c:1257
-#: src/transport/plugin_transport_xt.c:1257
-#: src/transport/tcp_service_legacy.c:694 src/util/service.c:780
+#: src/arm/gnunet-service-arm.c:556
+#: src/transport/plugin_transport_http_server.c:2688
+#: src/transport/plugin_transport_tcp.c:1259
+#: src/transport/plugin_transport_xt.c:1259
+#: src/transport/tcp_service_legacy.c:696 src/util/service.c:1337
 #, c-format
 msgid "Failed to resolve `%s': %s\n"
 msgstr "»%s« konnte nicht aufgelöst werden: %s\n"
 
-#: src/arm/gnunet-service-arm.c:573
-#: src/transport/plugin_transport_http_server.c:2700
-#: src/transport/plugin_transport_tcp.c:1276
-#: src/transport/plugin_transport_xt.c:1276
-#: src/transport/tcp_service_legacy.c:713 src/util/service.c:800
+#: src/arm/gnunet-service-arm.c:575
+#: src/transport/plugin_transport_http_server.c:2706
+#: src/transport/plugin_transport_tcp.c:1278
+#: src/transport/plugin_transport_xt.c:1278
+#: src/transport/tcp_service_legacy.c:715 src/util/service.c:1357
 #, fuzzy, c-format
 msgid "Failed to find %saddress for `%s'.\n"
 msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
 
-#: src/arm/gnunet-service-arm.c:984
+#: src/arm/gnunet-service-arm.c:986
 #, fuzzy, c-format
 msgid "Failed to start service `%s'\n"
 msgstr "Der Transportdienst auf Port %d konnte nicht gestartet werden.\n"
 
-#: src/arm/gnunet-service-arm.c:995
+#: src/arm/gnunet-service-arm.c:997
 #, fuzzy, c-format
 msgid "Starting service `%s'\n"
 msgstr "Collection `%s' begonnen.\n"
 
-#: src/arm/gnunet-service-arm.c:1107
+#: src/arm/gnunet-service-arm.c:1109
 #, fuzzy, c-format
 msgid "Unable to create socket for service `%s': %s\n"
 msgstr "Fehler beim Anlegen des Benutzerkontos:"
 
-#: src/arm/gnunet-service-arm.c:1142
+#: src/arm/gnunet-service-arm.c:1144
 #, c-format
 msgid "Unable to bind listening socket for service `%s' to address `%s': %s\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1185
+#: src/arm/gnunet-service-arm.c:1187
 #, c-format
 msgid "ARM now monitors connections to service `%s' at `%s'\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1364
+#: src/arm/gnunet-service-arm.c:1346
 #, fuzzy, c-format
 msgid "Preparing to stop `%s'\n"
 msgstr "Collection `%s' begonnen.\n"
 
-#: src/arm/gnunet-service-arm.c:1669
+#: src/arm/gnunet-service-arm.c:1651
 #, c-format
 msgid "Restarting service `%s'.\n"
 msgstr "Dienst »%s« wird neu gestartet.\n"
 
-#: src/arm/gnunet-service-arm.c:1830
+#: src/arm/gnunet-service-arm.c:1812
 msgid "exit"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1835
+#: src/arm/gnunet-service-arm.c:1817
 msgid "signal"
 msgstr "Signal"
 
-#: src/arm/gnunet-service-arm.c:1840
+#: src/arm/gnunet-service-arm.c:1822
 msgid "unknown"
 msgstr "Unbekannt"
 
-#: src/arm/gnunet-service-arm.c:1846
+#: src/arm/gnunet-service-arm.c:1828
 #, c-format
 msgid "Service `%s' took %s to terminate\n"
 msgstr "Dienst »%s« benötigte %s zum Beenden\n"
 
-#: src/arm/gnunet-service-arm.c:1872
+#: src/arm/gnunet-service-arm.c:1854
 #, c-format
 msgid "Service `%s' terminated normally, will restart at any time\n"
 msgstr "Dienst »%s« wurde normal beendet, wird jederzeit neu gestartet\n"
 
-#: src/arm/gnunet-service-arm.c:1888
+#: src/arm/gnunet-service-arm.c:1870
 #, c-format
 msgid "Service `%s' terminated with status %s/%d, will restart in %s\n"
 msgstr ""
 
-#: src/arm/mockup-service.c:40
+#: src/arm/mockup-service.c:42
 msgid "Initiating shutdown as requested by client.\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:2779 src/ats/gnunet-ats-solver-eval.c:2820
+#: src/ats/gnunet-ats-solver-eval.c:2781 src/ats/gnunet-ats-solver-eval.c:2822
 #, c-format
 msgid ""
 "Could not load quota for network `%s':  `%s', assigning default bandwidth "
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:2797
+#: src/ats/gnunet-ats-solver-eval.c:2799
 #, c-format
 msgid ""
 "No outbound quota configured for network `%s', assigning default bandwidth "
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:2838
+#: src/ats/gnunet-ats-solver-eval.c:2840
 #, c-format
 msgid ""
 "No outbound quota configure for network `%s', assigning default bandwidth "
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3292 src/ats-tests/gnunet-solver-eval.c:937
+#: src/ats/gnunet-ats-solver-eval.c:3294 src/ats-tests/gnunet-solver-eval.c:939
 msgid "solver to use"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3297 src/ats-tests/gnunet-solver-eval.c:943
-#: src/ats-tests/gnunet-solver-eval.c:948
+#: src/ats/gnunet-ats-solver-eval.c:3299 src/ats-tests/gnunet-solver-eval.c:945
+#: src/ats-tests/gnunet-solver-eval.c:950
 msgid "experiment to use"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3304
+#: src/ats/gnunet-ats-solver-eval.c:3306
 msgid "print logging"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3309
+#: src/ats/gnunet-ats-solver-eval.c:3311
 msgid "save logging to disk"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3314
+#: src/ats/gnunet-ats-solver-eval.c:3316
 msgid "disable normalization"
 msgstr ""
 
-#: src/ats/gnunet-service-ats_plugins.c:302
+#: src/ats/gnunet-service-ats-new.c:756
+#: src/ats/gnunet-service-ats_plugins.c:451
+#, fuzzy, c-format
+msgid "Failed to initialize solver `%s'!\n"
+msgstr "SQLite Datenbank konnte nicht initialisiert werden.\n"
+
+#: src/ats/gnunet-service-ats_plugins.c:304
 #, c-format
 msgid ""
 "Could not load %s quota for network `%s':  `%s', assigning default bandwidth "
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-service-ats_plugins.c:312
+#: src/ats/gnunet-service-ats_plugins.c:314
 #, c-format
 msgid "%s quota configured for network `%s' is %llu\n"
 msgstr ""
 
-#: src/ats/gnunet-service-ats_plugins.c:357
+#: src/ats/gnunet-service-ats_plugins.c:359
 #, c-format
 msgid ""
 "No %s-quota configured for network `%s', assigning default bandwidth %llu\n"
 msgstr ""
 
-#: src/ats/gnunet-service-ats_plugins.c:449
-#, fuzzy, c-format
-msgid "Failed to initialize solver `%s'!\n"
-msgstr "SQLite Datenbank konnte nicht initialisiert werden.\n"
+#: src/ats/plugin_ats2_common.c:90
+#, c-format
+msgid ""
+"Could not load %s quota for network `%s': `%s', assigning default bandwidth "
+"%llu\n"
+msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:1272
+#: src/ats/plugin_ats_mlp.c:1274
 msgid "Problem size too large, cannot allocate memory!\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:1868
+#: src/ats/plugin_ats_mlp.c:1870
 #, fuzzy, c-format
 msgid "Adding address for peer `%s' multiple times\n"
 msgstr "Adresse des Knotens `%s' konnte nicht ermittelt werden.\n"
 
-#: src/ats/plugin_ats_mlp.c:1912
+#: src/ats/plugin_ats_mlp.c:1914
 #, fuzzy, c-format
 msgid "Updating address property for peer `%s' %p not added before\n"
 msgstr "Adresse des Knotens `%s' konnte nicht ermittelt werden.\n"
 
-#: src/ats/plugin_ats_mlp.c:2474
+#: src/ats/plugin_ats_mlp.c:2476
 msgid ""
 "MLP solver is not optimizing for anything, changing to feasibility check\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:2514 src/ats/plugin_ats_mlp.c:2531
-#: src/ats/plugin_ats_mlp.c:2563 src/ats/plugin_ats_mlp.c:2581
-#: src/ats/plugin_ats_mlp.c:2600 src/ats/plugin_ats_proportional.c:1139
-#: src/ats/plugin_ats_ril.c:2610 src/ats/plugin_ats_ril.c:2627
-#: src/ats/plugin_ats_ril.c:2644 src/ats/plugin_ats_ril.c:2661
-#: src/ats/plugin_ats_ril.c:2678 src/ats/plugin_ats_ril.c:2695
-#: src/ats/plugin_ats_ril.c:2712 src/ats/plugin_ats_ril.c:2729
+#: src/ats/plugin_ats_mlp.c:2516 src/ats/plugin_ats_mlp.c:2533
+#: src/ats/plugin_ats_mlp.c:2565 src/ats/plugin_ats_mlp.c:2583
+#: src/ats/plugin_ats_mlp.c:2602 src/ats/plugin_ats_proportional.c:1141
+#: src/ats/plugin_ats_ril.c:2612 src/ats/plugin_ats_ril.c:2629
+#: src/ats/plugin_ats_ril.c:2646 src/ats/plugin_ats_ril.c:2663
+#: src/ats/plugin_ats_ril.c:2680 src/ats/plugin_ats_ril.c:2697
+#: src/ats/plugin_ats_ril.c:2714 src/ats/plugin_ats_ril.c:2731
 #, fuzzy, c-format
 msgid "Invalid %s configuration %f \n"
 msgstr "Konfiguration konnte nicht aus %s geladen werden\n"
 
-#: src/ats/plugin_ats_mlp.c:2669
+#: src/ats/plugin_ats_mlp.c:2671
 #, c-format
 msgid ""
 "Adjusting inconsistent outbound quota configuration for network `%s', is "
 "%llu must be at least %llu\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:2678
+#: src/ats/plugin_ats_mlp.c:2680
 #, c-format
 msgid ""
 "Adjusting inconsistent inbound quota configuration for network `%s', is %llu "
 "must be at least %llu\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:2688
+#: src/ats/plugin_ats_mlp.c:2690
 #, c-format
 msgid ""
 "Adjusting outbound quota configuration for network `%s'from %llu to %.0f\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:2697
+#: src/ats/plugin_ats_mlp.c:2699
 #, c-format
 msgid ""
 "Adjusting inbound quota configuration for network `%s' from %llu to %.0f\n"
 msgstr ""
 
-#: src/ats/plugin_ats_proportional.c:1162
+#: src/ats/plugin_ats_proportional.c:1164
 #, fuzzy, c-format
 msgid "Invalid %s configuration %f\n"
 msgstr " gconfig\tGTK Konfiguration\n"
 
-#: src/ats-tests/ats-testing.c:420
+#: src/ats-tests/ats-testing.c:422
 #, c-format
 msgid "Connected master [%u] with slave [%u]\n"
 msgstr ""
 
-#: src/ats-tests/ats-testing.c:427
+#: src/ats-tests/ats-testing.c:429
 #, fuzzy, c-format
 msgid "Failed to connect master peer [%u] with slave [%u]\n"
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
 
-#: src/ats-tests/ats-testing-log.c:835
+#: src/ats-tests/ats-testing-log.c:837
 msgid "Stop logging\n"
 msgstr "Protokollierung stoppen\n"
 
-#: src/ats-tests/ats-testing-log.c:890
+#: src/ats-tests/ats-testing-log.c:892
 #, fuzzy, c-format
 msgid "Start logging `%s'\n"
 msgstr "Collection `%s' begonnen.\n"
 
-#: src/ats-tests/gnunet-ats-sim.c:88
+#: src/ats-tests/gnunet-ats-sim.c:90
 #, c-format
 msgid ""
 "Master [%u]: sent: %u KiB in %u sec. = %u KiB/s, received: %u KiB in %u sec. "
 "= %u KiB/s\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:305
+#: src/ats-tool/gnunet-ats.c:307
 #, c-format
 msgid "%u address resolutions had a timeout\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:309
+#: src/ats-tool/gnunet-ats.c:311
 #, c-format
 msgid "ATS returned stat_results for %u addresses\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:393
+#: src/ats-tool/gnunet-ats.c:395
 #, c-format
 msgid ""
 "Peer `%s' plugin `%s', address `%s', `%s' bw out: %u Bytes/s, bw in %u Bytes/"
 "s, %s\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:400
+#: src/ats-tool/gnunet-ats.c:402
 msgid "active "
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:400
+#: src/ats-tool/gnunet-ats.c:402
 msgid "inactive "
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:510
+#: src/ats-tool/gnunet-ats.c:512
 #, fuzzy, c-format
 msgid "Removed address of peer `%s' with plugin `%s'\n"
 msgstr "Verfügbare(r) Transport(e): %s\n"
 
-#: src/ats-tool/gnunet-ats.c:703
+#: src/ats-tool/gnunet-ats.c:705
 #, c-format
 msgid "Quota for network `%11s' (in/out): %10s / %10s\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:746 src/ats-tool/gnunet-ats.c:759
+#: src/ats-tool/gnunet-ats.c:748 src/ats-tool/gnunet-ats.c:761
 #, fuzzy, c-format
 msgid "Failed to parse peer identity `%s'\n"
 msgstr "Fehler beim Parsen der Gerätedaten von `%s' bei %s:%d.\n"
 
-#: src/ats-tool/gnunet-ats.c:771
+#: src/ats-tool/gnunet-ats.c:773
 #, c-format
 msgid "Please select one operation: %s or %s or %s or %s or %s\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:793 src/ats-tool/gnunet-ats.c:818
-#: src/ats-tool/gnunet-ats.c:849 src/ats-tool/gnunet-ats.c:894
+#: src/ats-tool/gnunet-ats.c:795 src/ats-tool/gnunet-ats.c:820
+#: src/ats-tool/gnunet-ats.c:851 src/ats-tool/gnunet-ats.c:896
 #, fuzzy
 msgid "Cannot connect to ATS service, exiting...\n"
 msgstr "Verbindung zu %u.%u.%u.%u:%u fehlgeschlagen: %s\n"
 
-#: src/ats-tool/gnunet-ats.c:804 src/ats-tool/gnunet-ats.c:830
+#: src/ats-tool/gnunet-ats.c:806 src/ats-tool/gnunet-ats.c:832
 msgid "Cannot issue request to ATS service, exiting...\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:860
+#: src/ats-tool/gnunet-ats.c:862
 msgid "No preference type given!\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:867
+#: src/ats-tool/gnunet-ats.c:869
 msgid "No peer given!\n"
 msgstr "Kein Knoten angegeben!\n"
 
-#: src/ats-tool/gnunet-ats.c:885
+#: src/ats-tool/gnunet-ats.c:887
 msgid "Valid type required\n"
 msgstr "Gültiger Typ ist erforderlich\n"
 
-#: src/ats-tool/gnunet-ats.c:948
+#: src/ats-tool/gnunet-ats.c:950
 msgid "get list of active addresses currently used"
 msgstr "Liste aller derzeit genutzten aktiven Adressen holen"
 
-#: src/ats-tool/gnunet-ats.c:952
+#: src/ats-tool/gnunet-ats.c:954
 msgid "get list of all active addresses"
 msgstr "Liste aller aktiven Adressen holen"
 
-#: src/ats-tool/gnunet-ats.c:958
+#: src/ats-tool/gnunet-ats.c:960
 #, fuzzy
 msgid "connect to PEER"
 msgstr "Mit einem Knoten verbinden"
 
-#: src/ats-tool/gnunet-ats.c:962
+#: src/ats-tool/gnunet-ats.c:964
 msgid "do not resolve IP addresses to hostnames"
 msgstr "IP-Adressen nicht zu Rechnernamen auflösen"
 
-#: src/ats-tool/gnunet-ats.c:967
+#: src/ats-tool/gnunet-ats.c:969
 msgid "monitor mode"
 msgstr "Überwachungsmodus"
 
-#: src/ats-tool/gnunet-ats.c:972
+#: src/ats-tool/gnunet-ats.c:974
 msgid "set preference for the given peer"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:977
+#: src/ats-tool/gnunet-ats.c:979
 msgid "print all configured quotas"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:982
+#: src/ats-tool/gnunet-ats.c:984
 msgid "peer id"
 msgstr "Knoten-ID"
 
-#: src/ats-tool/gnunet-ats.c:988
+#: src/ats-tool/gnunet-ats.c:990
 msgid "preference type to set: latency | bandwidth"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:994
+#: src/ats-tool/gnunet-ats.c:996
 msgid "preference value"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:999
+#: src/ats-tool/gnunet-ats.c:1001
 msgid "verbose output (include ATS address properties)"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:1009
+#: src/ats-tool/gnunet-ats.c:1011
 #, fuzzy
 msgid "Print information about ATS state"
 msgstr "Informationen über andere GNUnet Knoten ausgeben."
 
-#: src/auction/gnunet-auction-create.c:161
+#: src/auction/gnunet-auction-create.c:163
 msgid "description of the item to be sold"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:167
+#: src/auction/gnunet-auction-create.c:169
 msgid "mapping of possible prices"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:173
+#: src/auction/gnunet-auction-create.c:175
 msgid "max duration per round"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:179
+#: src/auction/gnunet-auction-create.c:181
 msgid "duration until auction starts"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:184
+#: src/auction/gnunet-auction-create.c:186
 msgid ""
 "number of items to sell\n"
 "0 for first price auction\n"
 ">0 for vickrey/M+1st price auction"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:191
+#: src/auction/gnunet-auction-create.c:193
 msgid "public auction outcome"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:196
+#: src/auction/gnunet-auction-create.c:198
 msgid "keep running in foreground until auction completes"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:207
+#: src/auction/gnunet-auction-create.c:209
 msgid "create a new auction and start listening for bidders"
 msgstr ""
 
-#: src/auction/gnunet-auction-info.c:74 src/auction/gnunet-auction-join.c:74
-#: src/conversation/gnunet-conversation-test.c:252
-#: src/revocation/gnunet-revocation.c:560 src/template/gnunet-template.c:74
+#: src/auction/gnunet-auction-info.c:76 src/auction/gnunet-auction-join.c:76
+#: src/conversation/gnunet-conversation-test.c:254
+#: src/revocation/gnunet-revocation.c:562 src/template/gnunet-template.c:76
 msgid "help text"
 msgstr "Hilfetext"
 
-#: src/cadet/gnunet-cadet.c:705
+#: src/cadet/gnunet-cadet.c:631
 #, fuzzy, c-format
 msgid "Invalid peer ID `%s'\n"
 msgstr "Ungültige Antwort auf `%s'.\n"
 
-#: src/cadet/gnunet-cadet.c:744
-#, fuzzy, c-format
-msgid "Invalid tunnel owner `%s'\n"
-msgstr "Ungültiger Parameter: `%s'\n"
-
-#: src/cadet/gnunet-cadet.c:817
+#: src/cadet/gnunet-cadet.c:718
 msgid "Extra arguments are not applicable in combination with this option.\n"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:908
+#: src/cadet/gnunet-cadet.c:795
 #, fuzzy, c-format
 msgid "Invalid target `%s'\n"
 msgstr "Ungültiger Parameter: `%s'\n"
 
-#: src/cadet/gnunet-cadet.c:945
+#: src/cadet/gnunet-cadet.c:832
 #, fuzzy
 msgid "No action requested\n"
 msgstr " Verbindung fehlgeschlagen\n"
 
-#: src/cadet/gnunet-cadet.c:970
+#: src/cadet/gnunet-cadet.c:857
 #, fuzzy
 msgid "Provide information about a particular connection"
 msgstr "Informationen über andere GNUnet Knoten ausgeben."
 
-#: src/cadet/gnunet-cadet.c:975
+#: src/cadet/gnunet-cadet.c:861
 msgid "Activate echo mode"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:980
-msgid "Dump debug information to STDERR"
-msgstr ""
-
-#: src/cadet/gnunet-cadet.c:986
+#: src/cadet/gnunet-cadet.c:866
 msgid "Listen for connections using a shared secret among sender and recipient"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:993
+#: src/cadet/gnunet-cadet.c:871
 #, fuzzy
 msgid "Provide information about a patricular peer"
 msgstr "Informationen über andere GNUnet Knoten ausgeben."
 
-#: src/cadet/gnunet-cadet.c:999
+#: src/cadet/gnunet-cadet.c:875
 #, fuzzy
 msgid "Provide information about all peers"
 msgstr "Informationen über andere GNUnet Knoten ausgeben."
 
-#: src/cadet/gnunet-cadet.c:1005
-#, fuzzy
-msgid "Provide information about a particular tunnel"
-msgstr "Informationen über andere GNUnet Knoten ausgeben."
-
-#: src/cadet/gnunet-cadet.c:1011
+#: src/cadet/gnunet-cadet.c:879
 #, fuzzy
 msgid "Provide information about all tunnels"
 msgstr "Informationen über andere GNUnet Knoten ausgeben."
 
-#: src/consensus/gnunet-consensus-profiler.c:521
-#: src/secretsharing/gnunet-secretsharing-profiler.c:608
+#: src/consensus/gnunet-consensus-profiler.c:523
+#: src/secretsharing/gnunet-secretsharing-profiler.c:610
 #, fuzzy
 msgid "number of peers in consensus"
 msgstr "Anzahl an Durchläufen"
 
-#: src/consensus/gnunet-consensus-profiler.c:527
+#: src/consensus/gnunet-consensus-profiler.c:529
 msgid ""
 "how many peers (random selection without replacement) receive one value?"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:533
-#: src/set/gnunet-set-profiler.c:431 src/set/gnunet-set-profiler.c:437
-#: src/set/gnunet-set-profiler.c:460
+#: src/consensus/gnunet-consensus-profiler.c:535
+#: src/set/gnunet-set-profiler.c:433 src/set/gnunet-set-profiler.c:439
+#: src/set/gnunet-set-profiler.c:462
 msgid "number of values"
 msgstr "Anzahl der Werte"
 
-#: src/consensus/gnunet-consensus-profiler.c:539
+#: src/consensus/gnunet-consensus-profiler.c:541
 msgid "consensus timeout"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:546
+#: src/consensus/gnunet-consensus-profiler.c:548
 msgid "delay until consensus starts"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:552
-#: src/set/gnunet-set-profiler.c:478
+#: src/consensus/gnunet-consensus-profiler.c:554
+#: src/set/gnunet-set-profiler.c:480
 msgid "write statistics to file"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:557
+#: src/consensus/gnunet-consensus-profiler.c:559
 msgid "distribute elements to a static subset of good peers"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:562
+#: src/consensus/gnunet-consensus-profiler.c:564
 msgid "be more verbose (print received values)"
 msgstr "Ausführlicherer Modus (empfangene Werte ausgeben)"
 
-#: src/conversation/conversation_api.c:513
-#: src/conversation/conversation_api_call.c:492
+#: src/conversation/conversation_api.c:515
+#: src/conversation/conversation_api_call.c:494
 msgid "Connection to conversation service lost, trying to reconnect\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:275
+#: src/conversation/gnunet-conversation.c:277
 #, c-format
 msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:300
+#: src/conversation/gnunet-conversation.c:302
 #, fuzzy, c-format
 msgid "Call from `%s' terminated\n"
 msgstr "Aufruf von `%s' gibt %d zurück.\n"
 
-#: src/conversation/gnunet-conversation.c:335
+#: src/conversation/gnunet-conversation.c:337
 #, c-format
 msgid "Call from `%s' suspended by other user\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:340
+#: src/conversation/gnunet-conversation.c:342
 #, c-format
 msgid "Call from `%s' resumed by other user\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:358
+#: src/conversation/gnunet-conversation.c:360
 #, c-format
 msgid "Ego `%s' no longer available, phone is now down.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:373
+#: src/conversation/gnunet-conversation.c:375
 msgid "Failed to setup phone (internal error)\n"
 msgstr "Telefon konnte nicht eingerichtet werden (interner Fehler)\n"
 
-#: src/conversation/gnunet-conversation.c:385
+#: src/conversation/gnunet-conversation.c:387
 #, c-format
 msgid "Phone active at `%s'.  Type `/help' for a list of available commands\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:409
+#: src/conversation/gnunet-conversation.c:411
 #, c-format
 msgid "Resolved address of `%s'. Now ringing other party.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:416
+#: src/conversation/gnunet-conversation.c:418
 #, fuzzy, c-format
 msgid "Connection established to `%s'\n"
 msgstr " Verbindung fehlgeschlagen\n"
 
-#: src/conversation/gnunet-conversation.c:423
+#: src/conversation/gnunet-conversation.c:425
 #, c-format
 msgid "Failed to resolve `%s'\n"
 msgstr "»%s« konnte nicht aufgelöst werden\n"
 
-#: src/conversation/gnunet-conversation.c:431
+#: src/conversation/gnunet-conversation.c:433
 #, fuzzy, c-format
 msgid "Call to `%s' terminated\n"
 msgstr "Aufruf von `%s' gibt %d zurück.\n"
 
-#: src/conversation/gnunet-conversation.c:440
+#: src/conversation/gnunet-conversation.c:442
 #, c-format
 msgid "Connection to `%s' suspended (by other user)\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:446
+#: src/conversation/gnunet-conversation.c:448
 #, c-format
 msgid "Connection to `%s' resumed (by other user)\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:451
+#: src/conversation/gnunet-conversation.c:453
 msgid "Error with the call, restarting it\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:522
+#: src/conversation/gnunet-conversation.c:524
 #, c-format
 msgid "Unknown command `%s'\n"
 msgstr "Unbekannter Befehl »%s«\n"
 
-#: src/conversation/gnunet-conversation.c:538
-#: src/conversation/gnunet-conversation.c:552
+#: src/conversation/gnunet-conversation.c:540
+#: src/conversation/gnunet-conversation.c:554
 #, fuzzy, c-format
 msgid "Ego `%s' not available\n"
 msgstr "`%s' ist nicht verfügbar."
 
-#: src/conversation/gnunet-conversation.c:545
-#: src/conversation/gnunet-conversation.c:601
+#: src/conversation/gnunet-conversation.c:547
+#: src/conversation/gnunet-conversation.c:603
 msgid "You are calling someone else already, hang up first!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:560
-#: src/conversation/gnunet-conversation.c:614
+#: src/conversation/gnunet-conversation.c:562
+#: src/conversation/gnunet-conversation.c:616
 #, c-format
 msgid "You are answering call from `%s', hang up or suspend that call first!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:570
+#: src/conversation/gnunet-conversation.c:572
 msgid "Call recipient missing.\n"
 msgstr "Anzurufender Teilnehmer fehlt.\n"
 
-#: src/conversation/gnunet-conversation.c:625
+#: src/conversation/gnunet-conversation.c:627
 msgid "There is no incoming call to accept here!\n"
 msgstr "Es gibt keinen eingehenden Anruf, der angenommen werden könnte!\n"
 
-#: src/conversation/gnunet-conversation.c:642
+#: src/conversation/gnunet-conversation.c:644
 #, c-format
 msgid "There is no incoming call `%s' to accept right now!\n"
 msgstr ""
 "Es gibt keinen eingehenden Anruf »%s«, der jetzt angenommen werden könnte!\n"
 
-#: src/conversation/gnunet-conversation.c:673
+#: src/conversation/gnunet-conversation.c:675
 msgid "We currently do not have an address.\n"
 msgstr "Derzeit keine Adresse vorhanden.\n"
 
-#: src/conversation/gnunet-conversation.c:697
+#: src/conversation/gnunet-conversation.c:699
 #, c-format
 msgid "We are currently trying to locate the private key for the ego `%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:702
+#: src/conversation/gnunet-conversation.c:704
 #, c-format
 msgid "We are listening for incoming calls for ego `%s' on line `%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:708
-#: src/conversation/gnunet-conversation.c:732
+#: src/conversation/gnunet-conversation.c:710
+#: src/conversation/gnunet-conversation.c:734
 #, c-format
 msgid "You are having a conversation with `%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:713
+#: src/conversation/gnunet-conversation.c:715
 msgid ""
 "We had an internal error setting up our phone line. You can still make "
 "calls.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:722
+#: src/conversation/gnunet-conversation.c:724
 #, c-format
 msgid "We are trying to find the network address to call `%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:727
+#: src/conversation/gnunet-conversation.c:729
 #, c-format
 msgid "We are calling `%s', their phone should be ringing.\n"
 msgstr "Wir rufen `%s' an, deren Telefon sollte jetzt klingeln.\n"
 
-#: src/conversation/gnunet-conversation.c:746
+#: src/conversation/gnunet-conversation.c:748
 msgid "Calls waiting:\n"
 msgstr "Anruf wartet:\n"
 
-#: src/conversation/gnunet-conversation.c:752
+#: src/conversation/gnunet-conversation.c:754
 #, c-format
 msgid "#%u: `%s'\n"
 msgstr "#%u: »%s«\n"
 
-#: src/conversation/gnunet-conversation.c:781
-#: src/conversation/gnunet-conversation.c:796
+#: src/conversation/gnunet-conversation.c:783
+#: src/conversation/gnunet-conversation.c:798
 msgid "There is no call that could be suspended right now.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:829
-#: src/conversation/gnunet-conversation.c:845
+#: src/conversation/gnunet-conversation.c:831
+#: src/conversation/gnunet-conversation.c:847
 msgid "There is no call that could be resumed right now.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:852
+#: src/conversation/gnunet-conversation.c:854
 #, c-format
 msgid "Already talking with `%s', cannot resume a call right now.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:861
+#: src/conversation/gnunet-conversation.c:863
 msgid "There is no incoming call to resume here!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:878
+#: src/conversation/gnunet-conversation.c:880
 #, c-format
 msgid "There is no incoming call `%s' to resume right now!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:913
+#: src/conversation/gnunet-conversation.c:915
 msgid "There is no call that could be cancelled right now.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:921
+#: src/conversation/gnunet-conversation.c:923
 msgid "There is no incoming call to refuse here!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:938
+#: src/conversation/gnunet-conversation.c:940
 #, c-format
 msgid "There is no incoming call `%s' to refuse right now!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:964
+#: src/conversation/gnunet-conversation.c:966
 msgid "Use `/address' to find out which address this phone should have in GNS"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:966
+#: src/conversation/gnunet-conversation.c:968
 msgid "Use `/call USER.gnu' to call USER"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:968
+#: src/conversation/gnunet-conversation.c:970
 msgid "Use `/accept #NUM' to accept incoming call #NUM"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:970
+#: src/conversation/gnunet-conversation.c:972
 msgid "Use `/suspend' to suspend the active call"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:972
+#: src/conversation/gnunet-conversation.c:974
 msgid ""
 "Use `/resume [#NUM]' to resume a call, #NUM is needed to resume incoming "
 "calls, no argument is needed to resume the current outgoing call."
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:974
+#: src/conversation/gnunet-conversation.c:976
 msgid "Use `/cancel' to reject or terminate a call"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:976
+#: src/conversation/gnunet-conversation.c:978
 msgid "Use `/status' to print status information"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:978
+#: src/conversation/gnunet-conversation.c:980
 #, fuzzy
 msgid "Use `/quit' to terminate gnunet-conversation"
 msgstr "Erlaubt es Clients die Konfiguration von gnunetd abzufragen"
 
-#: src/conversation/gnunet-conversation.c:980
+#: src/conversation/gnunet-conversation.c:982
 msgid "Use `/help command' to get help for a specific command"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:1196
+#: src/conversation/gnunet-conversation.c:1198
 #, c-format
 msgid "Name of our ego changed to `%s'\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:1209
+#: src/conversation/gnunet-conversation.c:1211
 #, fuzzy, c-format
 msgid "Our ego `%s' was deleted!\n"
 msgstr "Pseudonym `%s' wurde gelöscht.\n"
 
-#: src/conversation/gnunet-conversation.c:1247
+#: src/conversation/gnunet-conversation.c:1249
 #, fuzzy
 msgid "You must specify the NAME of an ego to use\n"
 msgstr "Sie müssen eine Liste von Dateien zum Einfügen angeben.\n"
 
-#: src/conversation/gnunet-conversation.c:1271
+#: src/conversation/gnunet-conversation.c:1273
 #, fuzzy
 msgid "Failed to start gnunet-helper-w32-console\n"
 msgstr "Fehler beim Starten der Collection.\n"
 
-#: src/conversation/gnunet-conversation.c:1300
+#: src/conversation/gnunet-conversation.c:1302
 msgid "sets the NAME of the ego to use for the caller ID"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:1305
+#: src/conversation/gnunet-conversation.c:1307
 msgid "sets the LINE to use for the phone"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:1334
+#: src/conversation/gnunet-conversation.c:1336
 msgid "Enables having a conversation with other GNUnet users."
 msgstr ""
 
-#: src/conversation/gnunet-conversation-test.c:118
+#: src/conversation/gnunet-conversation-test.c:120
 #, c-format
 msgid ""
 "\n"
 "End of transmission.  Have a GNU day.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation-test.c:143
+#: src/conversation/gnunet-conversation-test.c:145
 #, c-format
 msgid ""
 "\n"
@@ -1049,2491 +1043,2487 @@ msgid ""
 "settings are working..."
 msgstr ""
 
-#: src/conversation/gnunet-conversation-test.c:214
+#: src/conversation/gnunet-conversation-test.c:216
 #, c-format
 msgid ""
 "We will now be recording you for %s. After that time, the recording will be "
 "played back to you..."
 msgstr ""
 
-#: src/conversation/gnunet_gst.c:620
-#: src/conversation/gnunet-helper-audio-playback-gst.c:359
+#: src/conversation/gnunet_gst.c:622
+#: src/conversation/gnunet-helper-audio-playback-gst.c:361
 #, c-format
 msgid "Read error from STDIN: %d %s\n"
 msgstr "Fehler beim Lesen aus STDIN: %d %s\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:323
+#: src/conversation/gnunet-helper-audio-playback.c:325
 #, c-format
 msgid "pa_stream_write() failed: %s\n"
 msgstr "pa_stream_write() fehlgeschlagen: %s\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:625
+#: src/conversation/gnunet-helper-audio-playback.c:627
 msgid "gnunet-helper-audio-playback - Got signal, exiting\n"
 msgstr "gnunet-helper-audio-playback - Signal erhalten, wird abgebrochen\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:651
-#: src/conversation/gnunet-helper-audio-record.c:561
+#: src/conversation/gnunet-helper-audio-playback.c:653
+#: src/conversation/gnunet-helper-audio-record.c:563
 #, fuzzy
 msgid "Connection established.\n"
 msgstr " Verbindung fehlgeschlagen\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:656
-#: src/conversation/gnunet-helper-audio-record.c:566
+#: src/conversation/gnunet-helper-audio-playback.c:658
+#: src/conversation/gnunet-helper-audio-record.c:568
 #, c-format
 msgid "pa_stream_new() failed: %s\n"
 msgstr "pa_stream_new() fehlgeschlagen: %s\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:670
+#: src/conversation/gnunet-helper-audio-playback.c:672
 #, c-format
 msgid "pa_stream_connect_playback() failed: %s\n"
 msgstr "pa_stream_connect_playback() fehlgeschlagen: %s\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:683
-#: src/conversation/gnunet-helper-audio-record.c:592
+#: src/conversation/gnunet-helper-audio-playback.c:685
+#: src/conversation/gnunet-helper-audio-record.c:594
 #, c-format
 msgid "Connection failure: %s\n"
 msgstr "Verbindung fehlgeschlagen: %s\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:704
-#: src/conversation/gnunet-helper-audio-record.c:615
+#: src/conversation/gnunet-helper-audio-playback.c:706
+#: src/conversation/gnunet-helper-audio-record.c:617
 msgid "Wrong Spec\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:710
-#: src/conversation/gnunet-helper-audio-record.c:621
+#: src/conversation/gnunet-helper-audio-playback.c:712
+#: src/conversation/gnunet-helper-audio-record.c:623
 msgid "pa_mainloop_new() failed.\n"
 msgstr "pa_mainloop_new() fehlgeschlagen.\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:724
-#: src/conversation/gnunet-helper-audio-record.c:636
+#: src/conversation/gnunet-helper-audio-playback.c:726
+#: src/conversation/gnunet-helper-audio-record.c:638
 msgid "pa_context_new() failed.\n"
 msgstr "pa_context_new() fehlgeschlagen.\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:731
-#: src/conversation/gnunet-helper-audio-record.c:642
+#: src/conversation/gnunet-helper-audio-playback.c:733
+#: src/conversation/gnunet-helper-audio-record.c:644
 #, c-format
 msgid "pa_context_connect() failed: %s\n"
 msgstr "pa_context_connect() fehlgeschlagen: %s\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:737
-#: src/conversation/gnunet-helper-audio-record.c:648
+#: src/conversation/gnunet-helper-audio-playback.c:739
+#: src/conversation/gnunet-helper-audio-record.c:650
 msgid "pa_mainloop_run() failed.\n"
 msgstr "pa_mainloop_run() fehlgeschlagen.\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:816
+#: src/conversation/gnunet-helper-audio-playback.c:818
 #, c-format
 msgid "Read error from STDIN: %s\n"
 msgstr "Fehler beim Lesen aus STDIN: %s\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:351
+#: src/conversation/gnunet-helper-audio-record.c:353
 #, c-format
 msgid "opus_encode_float() failed: %s. Aborting\n"
 msgstr "opus_encode_float() fehlgeschlagen: %s. Abbruch\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:430
+#: src/conversation/gnunet-helper-audio-record.c:432
 #, c-format
 msgid "pa_stream_peek() failed: %s\n"
 msgstr "pa_stream_peek() fehlgeschlagen: %s\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:472
+#: src/conversation/gnunet-helper-audio-record.c:474
 msgid "Got signal, exiting.\n"
 msgstr "Signal erhalten, wird abgebrochen.\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:498
+#: src/conversation/gnunet-helper-audio-record.c:500
 msgid "Stream successfully created.\n"
 msgstr "Datenstrom wurde erfolgreich erzeugt.\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:503
+#: src/conversation/gnunet-helper-audio-record.c:505
 #, c-format
 msgid "pa_stream_get_buffer_attr() failed: %s\n"
 msgstr "pa_stream_get_buffer_attr() fehlgeschlagen: %s\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:511
+#: src/conversation/gnunet-helper-audio-record.c:513
 #, c-format
 msgid "Buffer metrics: maxlength=%u, fragsize=%u\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:515
+#: src/conversation/gnunet-helper-audio-record.c:517
 #, c-format
 msgid "Using sample spec '%s', channel map '%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:522
+#: src/conversation/gnunet-helper-audio-record.c:524
 #, c-format
 msgid "Connected to device %s (%u, %ssuspended).\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:531
+#: src/conversation/gnunet-helper-audio-record.c:533
 #, c-format
 msgid "Stream error: %s\n"
 msgstr "Datenstromfehler: %s\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:579
+#: src/conversation/gnunet-helper-audio-record.c:581
 #, c-format
 msgid "pa_stream_connect_record() failed: %s\n"
 msgstr "pa_stream_connect_record() fehlgeschlagen: %s\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:693
+#: src/conversation/gnunet-helper-audio-record.c:695
 msgid "ogg_stream_init() failed.\n"
 msgstr "ogg_stream_init() fehlgeschlagen.\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:738
+#: src/conversation/gnunet-helper-audio-record.c:740
 #, fuzzy, c-format
 msgid "Failed to allocate %u bytes for second packet\n"
 msgstr "UDP-Sockets können nicht geöffnet werden\n"
 
-#: src/conversation/gnunet-service-conversation.c:1303
+#: src/conversation/gnunet-service-conversation.c:1305
 #, fuzzy, c-format
 msgid "Could not open line, port %s already in use!\n"
 msgstr "Verbindung zum %s-Dienst ist fehlgeschlagen!\n"
 
-#: src/conversation/microphone.c:119
+#: src/conversation/microphone.c:121
 msgid "Could not start record audio helper\n"
 msgstr ""
 
-#: src/conversation/plugin_gnsrecord_conversation.c:70
+#: src/conversation/plugin_gnsrecord_conversation.c:72
 #, c-format
 msgid "PHONE version %u not supported\n"
 msgstr ""
 
-#: src/conversation/plugin_gnsrecord_conversation.c:133
-#: src/conversation/plugin_gnsrecord_conversation.c:147
+#: src/conversation/plugin_gnsrecord_conversation.c:135
+#: src/conversation/plugin_gnsrecord_conversation.c:149
 #, c-format
 msgid "Unable to parse PHONE record `%s'\n"
 msgstr ""
 
-#: src/conversation/speaker.c:73
+#: src/conversation/speaker.c:75
 msgid "Could not start playback audio helper.\n"
 msgstr ""
 
-#: src/core/gnunet-core.c:88
+#: src/core/gnunet-core.c:90
 #, fuzzy
 msgid "fresh connection"
 msgstr "# verbundener Freunde"
 
-#: src/core/gnunet-core.c:91
+#: src/core/gnunet-core.c:93
 msgid "key sent"
 msgstr ""
 
-#: src/core/gnunet-core.c:94
+#: src/core/gnunet-core.c:96
 #, fuzzy
 msgid "key received"
 msgstr "# empfangene Ergebnisse"
 
-#: src/core/gnunet-core.c:97
+#: src/core/gnunet-core.c:99
 #, fuzzy
 msgid "connection established"
 msgstr " Verbindung fehlgeschlagen\n"
 
-#: src/core/gnunet-core.c:100
+#: src/core/gnunet-core.c:102
 msgid "rekeying"
 msgstr ""
 
-#: src/core/gnunet-core.c:103
+#: src/core/gnunet-core.c:105
 #, fuzzy
 msgid "disconnected"
 msgstr "# verbundener Freunde"
 
-#: src/core/gnunet-core.c:110
+#: src/core/gnunet-core.c:112
 msgid "Connection to CORE service lost (reconnecting)"
 msgstr ""
 
-#: src/core/gnunet-core.c:113
+#: src/core/gnunet-core.c:115
 #, fuzzy
 msgid "unknown state"
 msgstr "Unbekannter Fehler"
 
-#: src/core/gnunet-core.c:118
+#: src/core/gnunet-core.c:120
 #, fuzzy, c-format
 msgid "%24s: %-30s %4s (timeout in %6s)\n"
 msgstr "%24s: %-17s %4s   (%u Verbindungen insgesamt)\n"
 
-#: src/core/gnunet-core.c:142 src/peerinfo-tool/gnunet-peerinfo.c:726
+#: src/core/gnunet-core.c:144 src/peerinfo-tool/gnunet-peerinfo.c:728
 #, c-format
 msgid "Invalid command line argument `%s'\n"
 msgstr "Ungültiges Befehlszeilenargument »%s«\n"
 
-#: src/core/gnunet-core.c:153
+#: src/core/gnunet-core.c:155
 #, fuzzy
 msgid "Failed to connect to CORE service!\n"
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
 
-#: src/core/gnunet-core.c:175 src/transport/gnunet-transport.c:1447
+#: src/core/gnunet-core.c:177 src/transport/gnunet-transport.c:1449
 msgid "provide information about all current connections (continuously)"
 msgstr ""
 
-#: src/core/gnunet-core.c:184
+#: src/core/gnunet-core.c:186
 msgid "Print information about connected peers."
 msgstr "Informationen über verbundene Knoten ausgeben."
 
-#: src/core/gnunet-service-core.c:345
+#: src/core/gnunet-service-core.c:347
 #, fuzzy
 msgid "# send requests dropped (disconnected)"
 msgstr "# gap Anfragen verworfen: Kollision in RT"
 
-#: src/core/gnunet-service-core.c:369
+#: src/core/gnunet-service-core.c:371
 msgid "# dequeuing CAR (duplicate request)"
 msgstr ""
 
-#: src/core/gnunet-service-core.c:441
+#: src/core/gnunet-service-core.c:443
 #, fuzzy, c-format
 msgid "# bytes of messages of type %u received"
 msgstr "# Bytes Rauschen empfangen"
 
-#: src/core/gnunet-service-core.c:539
+#: src/core/gnunet-service-core.c:541
 msgid "# messages discarded (session disconnected)"
 msgstr ""
 
-#: src/core/gnunet-service-core.c:877
+#: src/core/gnunet-service-core.c:879
 #, fuzzy, c-format
 msgid "# messages of type %u discarded (client busy)"
 msgstr "# Bytes Rauschen empfangen"
 
-#: src/core/gnunet-service-core.c:986
+#: src/core/gnunet-service-core.c:988
 msgid "Core service is lacking HOSTKEY configuration setting.  Exiting.\n"
 msgstr ""
 
-#: src/core/gnunet-service-core.c:1007
+#: src/core/gnunet-service-core.c:1009
 #, fuzzy, c-format
 msgid "Core service of `%s' ready.\n"
 msgstr "Dienst »%s« wird neu gestartet.\n"
 
-#: src/core/gnunet-service-core_kx.c:615
+#: src/core/gnunet-service-core_kx.c:617
 msgid "# bytes encrypted"
 msgstr "# Bytes verschlüsselt"
 
-#: src/core/gnunet-service-core_kx.c:675
+#: src/core/gnunet-service-core_kx.c:677
 msgid "# bytes decrypted"
 msgstr "# Bytes entschlüsselt"
 
-#: src/core/gnunet-service-core_kx.c:777
+#: src/core/gnunet-service-core_kx.c:779
 msgid "# PAYLOAD dropped (out of order)"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:827
+#: src/core/gnunet-service-core_kx.c:829
 msgid "# key exchanges initiated"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:889
+#: src/core/gnunet-service-core_kx.c:891
 msgid "# key exchanges stopped"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:923
+#: src/core/gnunet-service-core_kx.c:925
 #, fuzzy
 msgid "# PING messages transmitted"
 msgstr "# PING Nachrichten erstellt"
 
-#: src/core/gnunet-service-core_kx.c:990
+#: src/core/gnunet-service-core_kx.c:992
 msgid "# old ephemeral keys ignored"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1003
+#: src/core/gnunet-service-core_kx.c:1005
 #, fuzzy
 msgid "# duplicate ephemeral keys ignored"
 msgstr "# verschlüsselter PONG Nachrichten empfangen"
 
-#: src/core/gnunet-service-core_kx.c:1038
+#: src/core/gnunet-service-core_kx.c:1040
 #, fuzzy
 msgid "# EPHEMERAL_KEYs rejected (bad signature)"
 msgstr "# verschlüsselter PONG Nachrichten empfangen"
 
-#: src/core/gnunet-service-core_kx.c:1052
+#: src/core/gnunet-service-core_kx.c:1054
 #, c-format
 msgid ""
 "EPHEMERAL_KEY from peer `%s' rejected as its validity range does not match "
 "our system time (%llu not in [%llu,%llu]).\n"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1058
+#: src/core/gnunet-service-core_kx.c:1060
 #, fuzzy
 msgid "# EPHEMERAL_KEY messages rejected due to time"
 msgstr "# verschlüsselter PONG Nachrichten empfangen"
 
-#: src/core/gnunet-service-core_kx.c:1078
+#: src/core/gnunet-service-core_kx.c:1080
 #, fuzzy
 msgid "# valid ephemeral keys received"
 msgstr "# verschlüsselter PONG Nachrichten empfangen"
 
-#: src/core/gnunet-service-core_kx.c:1178
-#: src/transport/gnunet-service-transport_validation.c:1126
+#: src/core/gnunet-service-core_kx.c:1180
+#: src/transport/gnunet-service-transport_validation.c:1128
 #, fuzzy
 msgid "# PING messages received"
 msgstr "# PING Nachrichten erstellt"
 
-#: src/core/gnunet-service-core_kx.c:1187
+#: src/core/gnunet-service-core_kx.c:1189
 #, fuzzy
 msgid "# PING messages dropped (out of order)"
 msgstr "# PING Nachrichten erstellt"
 
-#: src/core/gnunet-service-core_kx.c:1246
+#: src/core/gnunet-service-core_kx.c:1248
 #, fuzzy
 msgid "# PONG messages created"
 msgstr "# PING Nachrichten erstellt"
 
-#: src/core/gnunet-service-core_kx.c:1272
+#: src/core/gnunet-service-core_kx.c:1274
 msgid "# sessions terminated by timeout"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1285
+#: src/core/gnunet-service-core_kx.c:1287
 #, fuzzy
 msgid "# keepalive messages sent"
 msgstr "# Klartext PING Nachrichten gesendet"
 
-#: src/core/gnunet-service-core_kx.c:1349
-#: src/transport/gnunet-service-transport_validation.c:1459
+#: src/core/gnunet-service-core_kx.c:1351
+#: src/transport/gnunet-service-transport_validation.c:1461
 #, fuzzy
 msgid "# PONG messages received"
 msgstr "# verschlüsselter PONG Nachrichten empfangen"
 
-#: src/core/gnunet-service-core_kx.c:1356
+#: src/core/gnunet-service-core_kx.c:1358
 msgid "# PONG messages dropped (connection down)"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1361
+#: src/core/gnunet-service-core_kx.c:1363
 #, fuzzy
 msgid "# PONG messages dropped (out of order)"
 msgstr "# PING Nachrichten erstellt"
 
-#: src/core/gnunet-service-core_kx.c:1396
+#: src/core/gnunet-service-core_kx.c:1398
 #, fuzzy
 msgid "# PONG messages decrypted"
 msgstr "# PING Nachrichten erstellt"
 
-#: src/core/gnunet-service-core_kx.c:1434
+#: src/core/gnunet-service-core_kx.c:1436
 #, fuzzy
 msgid "# session keys confirmed via PONG"
 msgstr "# Knotenankündigungen empfangen"
 
-#: src/core/gnunet-service-core_kx.c:1445
+#: src/core/gnunet-service-core_kx.c:1447
 #, fuzzy
 msgid "# timeouts prevented via PONG"
 msgstr "# Bytes empfangen über TCP"
 
-#: src/core/gnunet-service-core_kx.c:1452
+#: src/core/gnunet-service-core_kx.c:1454
 #, fuzzy
 msgid "# rekey operations confirmed via PONG"
 msgstr "# Knotenankündigungen empfangen"
 
-#: src/core/gnunet-service-core_kx.c:1640
+#: src/core/gnunet-service-core_kx.c:1642
 msgid "# DATA message dropped (out of order)"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1648
+#: src/core/gnunet-service-core_kx.c:1650
 #, c-format
 msgid ""
 "Session to peer `%s' went down due to key expiration (should not happen)\n"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1651
+#: src/core/gnunet-service-core_kx.c:1653
 msgid "# sessions terminated by key expiration"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1740
-#: src/core/gnunet-service-core_kx.c:1766
+#: src/core/gnunet-service-core_kx.c:1742
+#: src/core/gnunet-service-core_kx.c:1768
 #, fuzzy
 msgid "# bytes dropped (duplicates)"
 msgstr "# Bytes verworfen von TCP (ausgehend)"
 
-#: src/core/gnunet-service-core_kx.c:1753
+#: src/core/gnunet-service-core_kx.c:1755
 #, fuzzy
 msgid "# bytes dropped (out of sequence)"
 msgstr "# Bytes verworfen von TCP (ausgehend)"
 
-#: src/core/gnunet-service-core_kx.c:1795
+#: src/core/gnunet-service-core_kx.c:1797
 #, fuzzy
 msgid "# bytes dropped (ancient message)"
 msgstr "# Bytes verworfen von TCP (ausgehend)"
 
-#: src/core/gnunet-service-core_kx.c:1803
+#: src/core/gnunet-service-core_kx.c:1805
 #, fuzzy
 msgid "# bytes of payload decrypted"
 msgstr "# Bytes entschlüsselt"
 
-#: src/core/gnunet-service-core_sessions.c:258
-#: src/core/gnunet-service-core_sessions.c:348
-#: src/dht/gnunet-service-dht_neighbours.c:739
-#: src/dht/gnunet-service-dht_neighbours.c:802
-#: src/fs/gnunet-service-fs_cp.c:613 src/fs/gnunet-service-fs_cp.c:1520
-#: src/topology/gnunet-daemon-topology.c:615
-#: src/topology/gnunet-daemon-topology.c:717
-#: src/transport/gnunet-service-transport_neighbours.c:719
-#: src/transport/gnunet-service-transport_neighbours.c:727
+#: src/core/gnunet-service-core_sessions.c:260
+#: src/core/gnunet-service-core_sessions.c:350
+#: src/dht/gnunet-service-dht_neighbours.c:741
+#: src/dht/gnunet-service-dht_neighbours.c:804
+#: src/fs/gnunet-service-fs_cp.c:615 src/fs/gnunet-service-fs_cp.c:1521
+#: src/topology/gnunet-daemon-topology.c:617
+#: src/topology/gnunet-daemon-topology.c:719
+#: src/transport/gnunet-service-transport_neighbours.c:720
+#: src/transport/gnunet-service-transport_neighbours.c:728
 msgid "# peers connected"
 msgstr "# verbundener Knoten"
 
-#: src/core/gnunet-service-core_sessions.c:294
+#: src/core/gnunet-service-core_sessions.c:296
 #, fuzzy
 msgid "# type map refreshes sent"
 msgstr "# p2p Trace-Antworten gesendet"
 
-#: src/core/gnunet-service-core_sessions.c:414
+#: src/core/gnunet-service-core_sessions.c:416
 #, fuzzy
 msgid "# outdated typemap confirmations received"
 msgstr "# Bytes empfangen über TCP"
 
-#: src/core/gnunet-service-core_sessions.c:431
+#: src/core/gnunet-service-core_sessions.c:433
 #, fuzzy
 msgid "# valid typemap confirmations received"
 msgstr "# Bytes empfangen über TCP"
 
-#: src/core/gnunet-service-core_typemap.c:167
-#: src/core/gnunet-service-core_typemap.c:179
+#: src/core/gnunet-service-core_typemap.c:169
+#: src/core/gnunet-service-core_typemap.c:181
 #, fuzzy
 msgid "# type maps received"
 msgstr "# Bytes empfangen über TCP"
 
-#: src/core/gnunet-service-core_typemap.c:210
+#: src/core/gnunet-service-core_typemap.c:212
 msgid "# updates to my type map"
 msgstr ""
 
-#: src/credential/credential_misc.c:86
+#: src/credential/credential_misc.c:88
 #, fuzzy, c-format
 msgid "Unable to parse CRED record string `%s'\n"
 msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':"
 
-#: src/credential/gnunet-credential.c:262 src/namestore/gnunet-namestore.c:887
+#: src/credential/gnunet-credential.c:264 src/namestore/gnunet-namestore.c:994
 #, fuzzy, c-format
 msgid "Ego `%s' not known to identity service\n"
 msgstr "`%s': unbekannter Dienst: %s\n"
 
-#: src/credential/gnunet-credential.c:278
-#: src/credential/gnunet-credential.c:432
+#: src/credential/gnunet-credential.c:280
+#: src/credential/gnunet-credential.c:434
 #, c-format
 msgid "Issuer public key `%s' is not well-formed\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:359
-#: src/credential/gnunet-credential.c:421
+#: src/credential/gnunet-credential.c:361
+#: src/credential/gnunet-credential.c:423
 #, fuzzy, c-format
 msgid "Issuer public key not well-formed\n"
 msgstr "Ungültiger Parameter: `%s'\n"
 
-#: src/credential/gnunet-credential.c:370
-#: src/credential/gnunet-credential.c:442
+#: src/credential/gnunet-credential.c:372
+#: src/credential/gnunet-credential.c:444
 #, fuzzy, c-format
 msgid "Failed to connect to CREDENTIAL\n"
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
 
-#: src/credential/gnunet-credential.c:377
+#: src/credential/gnunet-credential.c:379
 #, c-format
 msgid "You must provide issuer the attribute\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:385
+#: src/credential/gnunet-credential.c:387
 #, fuzzy, c-format
 msgid "ego required\n"
 msgstr "Gültiger Typ ist erforderlich\n"
 
-#: src/credential/gnunet-credential.c:401
+#: src/credential/gnunet-credential.c:403
 #, c-format
 msgid "Subject public key needed\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:412
+#: src/credential/gnunet-credential.c:414
 #, c-format
 msgid "Subject public key `%s' is not well-formed\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:449
+#: src/credential/gnunet-credential.c:451
 #, c-format
 msgid "You must provide issuer and subject attributes\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:502
+#: src/credential/gnunet-credential.c:504
 #, fuzzy, c-format
 msgid "Issuer ego required\n"
 msgstr "Gültiger Typ ist erforderlich\n"
 
-#: src/credential/gnunet-credential.c:514
+#: src/credential/gnunet-credential.c:516
 #, c-format
 msgid "Please specify name to lookup, subject key and issuer key!\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:534
+#: src/credential/gnunet-credential.c:536
 msgid "create credential"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:538
+#: src/credential/gnunet-credential.c:540
 msgid "verify credential against attribute"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:543
+#: src/credential/gnunet-credential.c:545
 #, fuzzy
 msgid "The public key of the subject to lookup the credential for"
 msgstr "Die Priorität des Inhalts angeben"
 
-#: src/credential/gnunet-credential.c:548
+#: src/credential/gnunet-credential.c:550
 msgid "The name of the credential presented by the subject"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:553
+#: src/credential/gnunet-credential.c:555
 msgid "The public key of the authority to verify the credential against"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:558
+#: src/credential/gnunet-credential.c:560
 msgid "The ego to use"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:563
+#: src/credential/gnunet-credential.c:565
 msgid "The issuer attribute to verify against or to issue"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:568
+#: src/credential/gnunet-credential.c:570
 msgid "The time to live for the credential"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:572
+#: src/credential/gnunet-credential.c:574
 msgid "collect credentials"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:586
+#: src/credential/gnunet-credential.c:588
 #, fuzzy
 msgid "GNUnet credential resolver tool"
 msgstr "GNUnet Netzwerk Topologie tracen."
 
-#: src/credential/gnunet-service-credential.c:1136 src/gns/gnunet-gns.c:183
-#: src/gns/gnunet-gns-helper-service-w32.c:725
+#: src/credential/gnunet-service-credential.c:1138 src/gns/gnunet-gns.c:185
+#: src/gns/gnunet-gns-helper-service-w32.c:727
 #, fuzzy, c-format
 msgid "Failed to connect to GNS\n"
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
 
-#: src/credential/gnunet-service-credential.c:1142
-#: src/namestore/gnunet-namestore.c:913
-#: src/namestore/gnunet-namestore-fcfsd.c:1136
+#: src/credential/gnunet-service-credential.c:1144
+#: src/namestore/gnunet-namestore.c:1019
+#: src/namestore/gnunet-namestore-fcfsd.c:1138
 #, fuzzy, c-format
 msgid "Failed to connect to namestore\n"
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
 
-#: src/credential/plugin_gnsrecord_credential.c:184
+#: src/credential/plugin_gnsrecord_credential.c:186
 #, fuzzy, c-format
 msgid "Unable to parse ATTR record string `%s'\n"
 msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':"
 
-#: src/datacache/datacache.c:117 src/datacache/datacache.c:309
-#: src/datastore/gnunet-service-datastore.c:755
+#: src/datacache/datacache.c:119 src/datacache/datacache.c:311
+#: src/datastore/gnunet-service-datastore.c:757
 msgid "# bytes stored"
 msgstr "# gespeicherte Bytes"
 
-#: src/datacache/datacache.c:121 src/datacache/datacache.c:313
+#: src/datacache/datacache.c:123 src/datacache/datacache.c:315
 msgid "# items stored"
 msgstr "# gespeicherte Objekte"
 
-#: src/datacache/datacache.c:204
+#: src/datacache/datacache.c:206
 #, c-format
 msgid "Loading `%s' datacache plugin\n"
 msgstr ""
 
-#: src/datacache/datacache.c:215
+#: src/datacache/datacache.c:217
 #, fuzzy, c-format
 msgid "Failed to load datacache plugin for `%s'\n"
 msgstr "Fehler beim Aktualisieren der Daten des Moduls `%s'\n"
 
-#: src/datacache/datacache.c:343
+#: src/datacache/datacache.c:345
 msgid "# requests received"
 msgstr "# Anfragen empfangen"
 
-#: src/datacache/datacache.c:353
+#: src/datacache/datacache.c:355
 msgid "# requests filtered by bloom filter"
 msgstr ""
 
-#: src/datacache/datacache.c:383
+#: src/datacache/datacache.c:385
 #, fuzzy
 msgid "# requests for random value received"
 msgstr "# Anfragen empfangen"
 
-#: src/datacache/datacache.c:415
+#: src/datacache/datacache.c:417
 #, fuzzy
 msgid "# proximity search requests received"
 msgstr "# Klartext PONG Nachrichten empfangen"
 
-#: src/datacache/plugin_datacache_heap.c:551
+#: src/datacache/plugin_datacache_heap.c:553
 msgid "Heap datacache running\n"
 msgstr ""
 
-#: src/datacache/plugin_datacache_sqlite.c:116
-#: src/datacache/plugin_datacache_sqlite.c:125
-#: src/datastore/plugin_datastore_mysql.c:890
-#: src/datastore/plugin_datastore_sqlite.c:56
-#: src/datastore/plugin_datastore_sqlite.c:64 src/my/my.c:79 src/my/my.c:91
-#: src/mysql/mysql.c:40 src/mysql/mysql.c:47
-#: src/namecache/plugin_namecache_sqlite.c:50
-#: src/namestore/plugin_namestore_sqlite.c:51
-#: src/peerstore/plugin_peerstore_sqlite.c:50
-#: src/psycstore/plugin_psycstore_mysql.c:60
-#: src/reclaim/plugin_reclaim_sqlite.c:50
-#: src/testbed/generate-underlay-topology.c:45
-#: src/testbed/gnunet-daemon-latency-logger.c:50
-#: src/testbed/gnunet-daemon-testbed-underlay.c:54
-#: src/testbed/testbed_api_hosts.c:67 src/util/crypto_ecc.c:51
-#: src/util/crypto_ecc_setup.c:39 src/util/crypto_mpi.c:37
-#: src/include/gnunet_common.h:816 src/include/gnunet_common.h:825
-#: src/scalarproduct/scalarproduct.h:33
+#: src/datacache/plugin_datacache_sqlite.c:118
+#: src/datacache/plugin_datacache_sqlite.c:127
+#: src/datastore/plugin_datastore_mysql.c:892
+#: src/datastore/plugin_datastore_sqlite.c:58
+#: src/datastore/plugin_datastore_sqlite.c:66 src/my/my.c:81 src/my/my.c:93
+#: src/mysql/mysql.c:42 src/mysql/mysql.c:49
+#: src/namecache/plugin_namecache_sqlite.c:52
+#: src/namestore/plugin_namestore_sqlite.c:53
+#: src/peerstore/plugin_peerstore_sqlite.c:52
+#: src/reclaim/plugin_reclaim_sqlite.c:52
+#: src/testbed/generate-underlay-topology.c:47
+#: src/testbed/gnunet-daemon-latency-logger.c:52
+#: src/testbed/gnunet-daemon-testbed-underlay.c:56
+#: src/testbed/testbed_api_hosts.c:69 src/util/crypto_ecc.c:53
+#: src/util/crypto_ecc_setup.c:41 src/util/crypto_mpi.c:39
+#: src/include/gnunet_common.h:818 src/include/gnunet_common.h:827
+#: src/scalarproduct/scalarproduct.h:35
 #, c-format
 msgid "`%s' failed at %s:%d with error: %s\n"
 msgstr "»%s« schlug bei %s:%d mit dem Fehler %s fehl\n"
 
-#: src/datacache/plugin_datacache_sqlite.c:861
-#: src/datastore/plugin_datastore_sqlite.c:506
-#: src/namecache/plugin_namecache_sqlite.c:327
-#: src/namestore/plugin_namestore_sqlite.c:262
-#: src/reclaim/plugin_reclaim_sqlite.c:334
+#: src/datacache/plugin_datacache_sqlite.c:863
+#: src/datastore/plugin_datastore_sqlite.c:508
+#: src/namecache/plugin_namecache_sqlite.c:229
+#: src/namestore/plugin_namestore_sqlite.c:265
+#: src/reclaim/plugin_reclaim_sqlite.c:336
 msgid "Tried to close sqlite without finalizing all prepared statements.\n"
 msgstr ""
 
-#: src/datastore/datastore_api.c:346
+#: src/datastore/datastore_api.c:348
 #, fuzzy
 msgid "DATASTORE disconnected"
 msgstr "# verbundener Freunde"
 
-#: src/datastore/datastore_api.c:466
+#: src/datastore/datastore_api.c:468
 #, fuzzy
 msgid "Disconnected from DATASTORE"
 msgstr "# verbundener Knoten"
 
-#: src/datastore/datastore_api.c:567
+#: src/datastore/datastore_api.c:569
 msgid "# queue overflows"
 msgstr ""
 
-#: src/datastore/datastore_api.c:597
+#: src/datastore/datastore_api.c:599
 #, fuzzy
 msgid "# queue entries created"
 msgstr "# PING Nachrichten erstellt"
 
-#: src/datastore/datastore_api.c:758
+#: src/datastore/datastore_api.c:760
 msgid "# status messages received"
 msgstr "# empfangene Statusmeldungen"
 
-#: src/datastore/datastore_api.c:812
+#: src/datastore/datastore_api.c:814
 msgid "# Results received"
 msgstr "# empfangene Ergebnisse"
 
-#: src/datastore/datastore_api.c:918
+#: src/datastore/datastore_api.c:920
 msgid "# datastore connections (re)created"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1032
+#: src/datastore/datastore_api.c:1034
 #, fuzzy
 msgid "# PUT requests executed"
 msgstr "# dht Anfragen weitergeleitet"
 
-#: src/datastore/datastore_api.c:1093
+#: src/datastore/datastore_api.c:1095
 #, fuzzy
 msgid "# RESERVE requests executed"
 msgstr "# dht Anfragen weitergeleitet"
 
-#: src/datastore/datastore_api.c:1158
+#: src/datastore/datastore_api.c:1160
 msgid "# RELEASE RESERVE requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1236
+#: src/datastore/datastore_api.c:1238
 #, fuzzy
 msgid "# REMOVE requests executed"
 msgstr "# dht Anfragen weitergeleitet"
 
-#: src/datastore/datastore_api.c:1296
+#: src/datastore/datastore_api.c:1298
 msgid "# GET REPLICATION requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1358
+#: src/datastore/datastore_api.c:1360
 msgid "# GET ZERO ANONYMITY requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1439
+#: src/datastore/datastore_api.c:1441
 msgid "# GET requests executed"
 msgstr "# ausgeführte GET-Anfragen"
 
-#: src/datastore/gnunet-datastore.c:187
+#: src/datastore/gnunet-datastore.c:189
 #, c-format
 msgid "Dumped %<PRIu64> records\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:215 src/datastore/gnunet-datastore.c:227
+#: src/datastore/gnunet-datastore.c:217 src/datastore/gnunet-datastore.c:229
 #, c-format
 msgid "Short write to file: %zd bytes expecting %zd\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:259
+#: src/datastore/gnunet-datastore.c:261
 #, fuzzy
 msgid "Error queueing datastore GET operation\n"
 msgstr "Fehler beim Anlegen des Benutzers"
 
-#: src/datastore/gnunet-datastore.c:285 src/datastore/gnunet-datastore.c:410
+#: src/datastore/gnunet-datastore.c:287 src/datastore/gnunet-datastore.c:412
 #, fuzzy, c-format
 msgid "Unable to open dump file: %s\n"
 msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
 
-#: src/datastore/gnunet-datastore.c:324
+#: src/datastore/gnunet-datastore.c:326
 #, c-format
 msgid "Failed to store item: %s, aborting\n"
 msgstr "Objekt konnte nicht gespeichert werden: %s, Abbruch\n"
 
-#: src/datastore/gnunet-datastore.c:338
+#: src/datastore/gnunet-datastore.c:340
 #, c-format
 msgid "Inserted %<PRIu64> records\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:347 src/datastore/gnunet-datastore.c:361
+#: src/datastore/gnunet-datastore.c:349 src/datastore/gnunet-datastore.c:363
 #, c-format
 msgid "Short read from file: %zd bytes expecting %zd\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:387
+#: src/datastore/gnunet-datastore.c:389
 #, fuzzy
 msgid "Error queueing datastore PUT operation\n"
 msgstr "Fehler beim Anlegen des Benutzers"
 
-#: src/datastore/gnunet-datastore.c:430
+#: src/datastore/gnunet-datastore.c:432
 msgid "Input file is not of a supported format\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:456
+#: src/datastore/gnunet-datastore.c:458
 #, fuzzy
 msgid "Failed connecting to the datastore.\n"
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden."
 
-#: src/datastore/gnunet-datastore.c:468
+#: src/datastore/gnunet-datastore.c:470
 #, c-format
 msgid "Please choose at least one operation: %s, %s\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:491
+#: src/datastore/gnunet-datastore.c:493
 msgid "Dump all records from the datastore"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:495
+#: src/datastore/gnunet-datastore.c:497
 #, fuzzy
 msgid "Insert records into the datastore"
 msgstr "# bytes in der Datenbank"
 
-#: src/datastore/gnunet-datastore.c:500
+#: src/datastore/gnunet-datastore.c:502
 msgid "File to dump or insert"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:509
+#: src/datastore/gnunet-datastore.c:511
 #, fuzzy
 msgid "Manipulate GNUnet datastore"
 msgstr "sqlite Datenspeicher"
 
-#: src/datastore/gnunet-service-datastore.c:336
+#: src/datastore/gnunet-service-datastore.c:338
 msgid "# bytes expired"
 msgstr "# abgelaufene Bytes"
 
-#: src/datastore/gnunet-service-datastore.c:418
+#: src/datastore/gnunet-service-datastore.c:420
 msgid "# bytes purged (low-priority)"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:560
+#: src/datastore/gnunet-service-datastore.c:562
 msgid "# results found"
 msgstr "# gefundene Ergebnisse"
 
-#: src/datastore/gnunet-service-datastore.c:601
+#: src/datastore/gnunet-service-datastore.c:603
 #, c-format
 msgid ""
 "Insufficient space (%llu bytes are available) to satisfy RESERVE request for "
 "%llu bytes\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:612
+#: src/datastore/gnunet-service-datastore.c:614
 #, c-format
 msgid ""
 "The requested amount (%llu bytes) is larger than the cache size (%llu "
 "bytes)\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:618
+#: src/datastore/gnunet-service-datastore.c:620
 msgid ""
 "Insufficient space to satisfy request and requested amount is larger than "
 "cache size"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:625
+#: src/datastore/gnunet-service-datastore.c:627
 msgid "Insufficient space to satisfy request"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:632
-#: src/datastore/gnunet-service-datastore.c:687
-#: src/datastore/gnunet-service-datastore.c:835
-#: src/datastore/gnunet-service-datastore.c:1467
+#: src/datastore/gnunet-service-datastore.c:634
+#: src/datastore/gnunet-service-datastore.c:689
+#: src/datastore/gnunet-service-datastore.c:837
+#: src/datastore/gnunet-service-datastore.c:1469
 msgid "# reserved"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:705
+#: src/datastore/gnunet-service-datastore.c:707
 msgid "Could not find matching reservation"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:771
+#: src/datastore/gnunet-service-datastore.c:773
 #, c-format
 msgid "Need %llu bytes more space (%llu allowed, using %llu)\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:874
+#: src/datastore/gnunet-service-datastore.c:876
 #, fuzzy
 msgid "# GET requests received"
 msgstr "# Client Trace-Anfragen empfangen"
 
-#: src/datastore/gnunet-service-datastore.c:905
+#: src/datastore/gnunet-service-datastore.c:907
 #, fuzzy
 msgid "# GET KEY requests received"
 msgstr "# Client Trace-Anfragen empfangen"
 
-#: src/datastore/gnunet-service-datastore.c:918
+#: src/datastore/gnunet-service-datastore.c:920
 msgid "# requests filtered by bloomfilter"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:954
+#: src/datastore/gnunet-service-datastore.c:956
 #, fuzzy
 msgid "# GET REPLICATION requests received"
 msgstr "# Client Trace-Anfragen empfangen"
 
-#: src/datastore/gnunet-service-datastore.c:987
+#: src/datastore/gnunet-service-datastore.c:989
 #, fuzzy
 msgid "# GET ZERO ANONYMITY requests received"
 msgstr "# Client Trace-Anfragen empfangen"
 
-#: src/datastore/gnunet-service-datastore.c:1034
+#: src/datastore/gnunet-service-datastore.c:1036
 msgid "Content not found"
 msgstr "Kein Inhalt gefunden"
 
-#: src/datastore/gnunet-service-datastore.c:1041
+#: src/datastore/gnunet-service-datastore.c:1043
 msgid "# bytes removed (explicit request)"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1086
+#: src/datastore/gnunet-service-datastore.c:1088
 #, fuzzy
 msgid "# REMOVE requests received"
 msgstr "# Client Trace-Anfragen empfangen"
 
-#: src/datastore/gnunet-service-datastore.c:1135
+#: src/datastore/gnunet-service-datastore.c:1137
 #, c-format
 msgid ""
 "Datastore payload must have been inaccurate (%lld < %lld). Recomputing it.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1141
-#: src/datastore/gnunet-service-datastore.c:1316
+#: src/datastore/gnunet-service-datastore.c:1143
+#: src/datastore/gnunet-service-datastore.c:1318
 #, c-format
 msgid "New payload: %lld\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1195
+#: src/datastore/gnunet-service-datastore.c:1197
 #, c-format
 msgid "Loading `%s' datastore plugin\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1207
+#: src/datastore/gnunet-service-datastore.c:1209
 #, 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:1267
+#: src/datastore/gnunet-service-datastore.c:1269
 msgid "Bloomfilter construction complete.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1323
+#: src/datastore/gnunet-service-datastore.c:1325
 msgid "Rebuilding bloomfilter.  Please be patient.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1334
+#: src/datastore/gnunet-service-datastore.c:1336
 msgid "Plugin does not support get_keys function. Please fix!\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1504
+#: src/datastore/gnunet-service-datastore.c:1506
 #, fuzzy, c-format
 msgid "# bytes used in file-sharing datastore `%s'"
 msgstr "# bytes erlaubt in der Datenbank"
 
-#: src/datastore/gnunet-service-datastore.c:1520
+#: src/datastore/gnunet-service-datastore.c:1522
 msgid "# quota"
 msgstr "# Kontingent"
 
-#: src/datastore/gnunet-service-datastore.c:1525
+#: src/datastore/gnunet-service-datastore.c:1527
 msgid "# cache size"
 msgstr "# Zwischenspeichergröße"
 
-#: src/datastore/gnunet-service-datastore.c:1541
+#: src/datastore/gnunet-service-datastore.c:1543
 #, c-format
 msgid "Could not use specified filename `%s' for bloomfilter.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1559
-#: src/datastore/gnunet-service-datastore.c:1575
+#: src/datastore/gnunet-service-datastore.c:1561
+#: src/datastore/gnunet-service-datastore.c:1577
 #, 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:1607
+#: src/datastore/gnunet-service-datastore.c:1609
 msgid "Failed to initialize bloomfilter.\n"
 msgstr "Bloomfilter konnte nicht initialisiert werden.\n"
 
-#: src/datastore/plugin_datastore_heap.c:891
+#: src/datastore/plugin_datastore_heap.c:893
 msgid "Heap database running\n"
 msgstr "Heap-Datenbank läuft\n"
 
-#: src/datastore/plugin_datastore_mysql.c:369
-#: src/datastore/plugin_datastore_mysql.c:421
-#: src/datastore/plugin_datastore_mysql.c:1073
+#: src/datastore/plugin_datastore_mysql.c:371
+#: src/datastore/plugin_datastore_mysql.c:423
+#: src/datastore/plugin_datastore_mysql.c:1075
 msgid "MySQL statement run failure"
 msgstr ""
 
-#: src/datastore/plugin_datastore_mysql.c:408
-#: src/datastore/plugin_datastore_sqlite.c:676
+#: src/datastore/plugin_datastore_mysql.c:410
+#: src/datastore/plugin_datastore_sqlite.c:678
 #, fuzzy
 msgid "Data too large"
 msgstr "Anzahl der Werte"
 
-#: src/datastore/plugin_datastore_mysql.c:846
+#: src/datastore/plugin_datastore_mysql.c:848
 #, fuzzy, c-format
 msgid "`%s' for `%s' failed at %s:%d with error: %s\n"
 msgstr "`%s' an `%s' schlug fehl bei %s:%d mit dem Fehler: %s\n"
 
-#: src/datastore/plugin_datastore_mysql.c:1178
-#: src/psycstore/plugin_psycstore_mysql.c:1934
+#: src/datastore/plugin_datastore_mysql.c:1180
 msgid "Mysql database running\n"
 msgstr "MySQL-Datenbank läuft\n"
 
-#: src/datastore/plugin_datastore_postgres.c:274
-#: src/datastore/plugin_datastore_postgres.c:891
+#: src/datastore/plugin_datastore_postgres.c:276
+#: src/datastore/plugin_datastore_postgres.c:893
 msgid "Postgress exec failure"
 msgstr ""
 
-#: src/datastore/plugin_datastore_postgres.c:852
+#: src/datastore/plugin_datastore_postgres.c:854
 #, fuzzy
 msgid "Failed to drop table from database.\n"
 msgstr "Fehler beim Binden an UDP Port %d.\n"
 
-#: src/datastore/plugin_datastore_postgres.c:950
-#: src/psycstore/plugin_psycstore_postgres.c:1504
+#: src/datastore/plugin_datastore_postgres.c:952
 msgid "Postgres database running\n"
 msgstr "PostgreSQL-Datenbank läuft\n"
 
-#: src/datastore/plugin_datastore_sqlite.c:64
-#: src/testbed/generate-underlay-topology.c:48
-#: src/testbed/gnunet-daemon-latency-logger.c:53
-#: src/testbed/gnunet-daemon-testbed-underlay.c:57
+#: src/datastore/plugin_datastore_sqlite.c:66
+#: src/testbed/generate-underlay-topology.c:50
+#: src/testbed/gnunet-daemon-latency-logger.c:55
+#: src/testbed/gnunet-daemon-testbed-underlay.c:59
 #, fuzzy, c-format
 msgid "`%s' failed at %s:%u with error: %s"
 msgstr "`%s' schlug bei %s:%d mit dem Fehler %s fehl\n"
 
-#: src/datastore/plugin_datastore_sqlite.c:269
-#: src/namecache/plugin_namecache_sqlite.c:207
-#: src/namestore/plugin_namestore_sqlite.c:203
-#: src/peerstore/plugin_peerstore_sqlite.c:533
-#: src/psycstore/plugin_psycstore_sqlite.c:323
-#: src/reclaim/plugin_reclaim_sqlite.c:210
+#: src/datastore/plugin_datastore_sqlite.c:271
+#: src/namecache/plugin_namecache_sqlite.c:173
+#: src/namestore/plugin_namestore_sqlite.c:206
+#: src/peerstore/plugin_peerstore_sqlite.c:535
+#: src/reclaim/plugin_reclaim_sqlite.c:212
 #, c-format
 msgid "Unable to initialize SQLite: %s.\n"
 msgstr "SQLite-Datenbank konnte nicht initialisiert werden: %s.\n"
 
-#: src/datastore/plugin_datastore_sqlite.c:627
+#: src/datastore/plugin_datastore_sqlite.c:629
 msgid "sqlite bind failure"
 msgstr ""
 
-#: src/datastore/plugin_datastore_sqlite.c:1325
+#: src/datastore/plugin_datastore_sqlite.c:1327
 msgid "sqlite version to old to determine size, assuming zero\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_sqlite.c:1359
+#: src/datastore/plugin_datastore_sqlite.c:1361
 #, c-format
 msgid ""
 "Using sqlite page utilization to estimate payload (%llu pages of size %llu "
 "bytes)\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_sqlite.c:1403
-#: src/namecache/plugin_namecache_sqlite.c:638
-#: src/namestore/plugin_namestore_sqlite.c:753
-#: src/reclaim/plugin_reclaim_sqlite.c:709
+#: src/datastore/plugin_datastore_sqlite.c:1405
+#: src/namecache/plugin_namecache_sqlite.c:557
+#: src/namestore/plugin_namestore_sqlite.c:750
+#: src/reclaim/plugin_reclaim_sqlite.c:711
 msgid "Sqlite database running\n"
 msgstr "Sqlite-Datenbank läuft\n"
 
-#: src/datastore/plugin_datastore_template.c:251
+#: src/datastore/plugin_datastore_template.c:253
 msgid "Template database running\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:156
+#: src/dht/gnunet-dht-get.c:158
 #, c-format
 msgid ""
 "Result %d, type %d:\n"
 "%.*s\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:157
+#: src/dht/gnunet-dht-get.c:159
 #, c-format
 msgid "Result %d, type %d:\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:202
+#: src/dht/gnunet-dht-get.c:204
 msgid "Must provide key for DHT GET!\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:208 src/dht/gnunet-dht-monitor.c:255
+#: src/dht/gnunet-dht-get.c:210 src/dht/gnunet-dht-monitor.c:257
 msgid "Failed to connect to DHT service!\n"
 msgstr "Verbindung zum DHT-Dienst ist fehlgeschlagen!\n"
 
-#: src/dht/gnunet-dht-get.c:217
-msgid "Issueing DHT GET with key"
+#: src/dht/gnunet-dht-get.c:219
+msgid "Issuing DHT GET with key"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:246 src/dht/gnunet-dht-monitor.c:305
-#: src/dht/gnunet-dht-put.c:196
+#: src/dht/gnunet-dht-get.c:248 src/dht/gnunet-dht-monitor.c:307
+#: src/dht/gnunet-dht-put.c:198
 msgid "the query key"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:251
+#: src/dht/gnunet-dht-get.c:253
 msgid "how many parallel requests (replicas) to create"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:256 src/dht/gnunet-dht-monitor.c:311
+#: src/dht/gnunet-dht-get.c:258 src/dht/gnunet-dht-monitor.c:313
 msgid "the type of data to look for"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:261
+#: src/dht/gnunet-dht-get.c:263
 msgid "how long to execute this query before giving up?"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:265 src/dht/gnunet-dht-put.c:200
+#: src/dht/gnunet-dht-get.c:267 src/dht/gnunet-dht-put.c:202
 msgid "use DHT's demultiplex everywhere option"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:278
+#: src/dht/gnunet-dht-get.c:280
 msgid "Issue a GET request to the GNUnet DHT, prints results."
 msgstr ""
 
-#: src/dht/gnunet-dht-monitor.c:317
+#: src/dht/gnunet-dht-monitor.c:319
 msgid "how long should the monitor command run"
 msgstr ""
 
-#: src/dht/gnunet-dht-monitor.c:322 src/fs/gnunet-download.c:370
-#: src/nse/gnunet-nse-profiler.c:876
+#: src/dht/gnunet-dht-monitor.c:324 src/fs/gnunet-download.c:372
+#: src/nse/gnunet-nse-profiler.c:878
 msgid "be verbose (print progress information)"
 msgstr ""
 
-#: src/dht/gnunet-dht-monitor.c:335
+#: src/dht/gnunet-dht-monitor.c:337
 msgid "Prints all packets that go through the DHT."
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:914 src/testbed/gnunet-testbed-profiler.c:251
+#: src/dht/gnunet_dht_profiler.c:916 src/testbed/gnunet-testbed-profiler.c:253
 #, c-format
 msgid "Exiting as the number of peers is %u\n"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:947 src/rps/gnunet-rps-profiler.c:2764
+#: src/dht/gnunet_dht_profiler.c:949 src/rps/gnunet-rps-profiler.c:2953
 #, fuzzy
 msgid "number of peers to start"
 msgstr "Anzahl an Durchläufen"
 
-#: src/dht/gnunet_dht_profiler.c:952
+#: src/dht/gnunet_dht_profiler.c:954
 msgid "number of PUTs to perform per peer"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:957 src/nse/gnunet-nse-profiler.c:858
-#: src/testbed/gnunet-testbed-profiler.c:302
+#: src/dht/gnunet_dht_profiler.c:959 src/nse/gnunet-nse-profiler.c:860
+#: src/testbed/gnunet-testbed-profiler.c:304
 msgid "name of the file with the login information for the testbed"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:962
+#: src/dht/gnunet_dht_profiler.c:964
 msgid "delay between rounds for collecting statistics (default: 30 sec)"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:967
+#: src/dht/gnunet_dht_profiler.c:969
 msgid "delay to start doing PUTs (default: 1 sec)"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:972
+#: src/dht/gnunet_dht_profiler.c:974
 msgid "delay to start doing GETs (default: 5 min)"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:977
+#: src/dht/gnunet_dht_profiler.c:979
 msgid "replication degree for DHT PUTs"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:982
+#: src/dht/gnunet_dht_profiler.c:984
 msgid "chance that a peer is selected at random for PUTs"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:987
+#: src/dht/gnunet_dht_profiler.c:989
 msgid "timeout for DHT PUT and GET requests (default: 1 min)"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:1007
+#: src/dht/gnunet_dht_profiler.c:1009
 msgid "Measure quality and performance of the DHT service."
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:132
+#: src/dht/gnunet-dht-put.c:134
 msgid "Must provide KEY and DATA for DHT put!\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:140
+#: src/dht/gnunet-dht-put.c:142
 #, fuzzy
 msgid "Could not connect to DHT service!\n"
 msgstr "Verbindung zum %s-Dienst ist fehlgeschlagen!\n"
 
-#: src/dht/gnunet-dht-put.c:151
+#: src/dht/gnunet-dht-put.c:153
 #, c-format
 msgid "Issuing put request for `%s' with data `%s'!\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:186
+#: src/dht/gnunet-dht-put.c:188
 msgid "the data to insert under the key"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:191
+#: src/dht/gnunet-dht-put.c:193
 msgid "how long to store this entry in the dht (in seconds)"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:205
+#: src/dht/gnunet-dht-put.c:207
 msgid "how many replicas to create"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:209
+#: src/dht/gnunet-dht-put.c:211
 msgid "use DHT's record route option"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:214
+#: src/dht/gnunet-dht-put.c:216
 msgid "the type to insert data as"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:231
+#: src/dht/gnunet-dht-put.c:233
 msgid "Issue a PUT request to the GNUnet DHT insert DATA under KEY."
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:367
+#: src/dht/gnunet-service-dht_clients.c:369
 #, fuzzy
 msgid "# GET requests from clients injected"
 msgstr "# gap Anfragen mit taktischer Entscheidung: nicht Antworten"
 
-#: src/dht/gnunet-service-dht_clients.c:481
+#: src/dht/gnunet-service-dht_clients.c:483
 #, fuzzy
 msgid "# PUT requests received from clients"
 msgstr "Die `%s' Anfrage, die vom Client empfangen wurde, ist beschädigt.\n"
 
-#: src/dht/gnunet-service-dht_clients.c:614
+#: src/dht/gnunet-service-dht_clients.c:616
 #, fuzzy
 msgid "# GET requests received from clients"
 msgstr "Die `%s' Anfrage, die vom Client empfangen wurde, ist beschädigt.\n"
 
-#: src/dht/gnunet-service-dht_clients.c:840
+#: src/dht/gnunet-service-dht_clients.c:842
 #, fuzzy
 msgid "# GET STOP requests received from clients"
 msgstr "Die `%s' Anfrage, die vom Client empfangen wurde, ist beschädigt.\n"
 
-#: src/dht/gnunet-service-dht_clients.c:1025
+#: src/dht/gnunet-service-dht_clients.c:1027
 msgid "# Key match, type mismatches in REPLY to CLIENT"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:1040
+#: src/dht/gnunet-service-dht_clients.c:1042
 msgid "# Duplicate REPLIES to CLIENT request dropped"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:1086
+#: src/dht/gnunet-service-dht_clients.c:1088
 #, c-format
 msgid "Unsupported block type (%u) in request!\n"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:1093
+#: src/dht/gnunet-service-dht_clients.c:1095
 msgid "# RESULTS queued for clients"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:1171
+#: src/dht/gnunet-service-dht_clients.c:1173
 msgid "# REPLIES ignored for CLIENTS (no match)"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:71
+#: src/dht/gnunet-service-dht_datacache.c:73
 #, c-format
 msgid "%s request received, but have no datacache!\n"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:81
+#: src/dht/gnunet-service-dht_datacache.c:83
 msgid "# ITEMS stored in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:205
+#: src/dht/gnunet-service-dht_datacache.c:207
 msgid "# Good RESULTS found in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:217
+#: src/dht/gnunet-service-dht_datacache.c:219
 msgid "# Duplicate RESULTS found in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:223
+#: src/dht/gnunet-service-dht_datacache.c:225
 msgid "# Invalid RESULTS found in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:229
+#: src/dht/gnunet-service-dht_datacache.c:231
 msgid "# Irrelevant RESULTS found in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:241
+#: src/dht/gnunet-service-dht_datacache.c:243
 msgid "# Unsupported RESULTS found in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:245
+#: src/dht/gnunet-service-dht_datacache.c:247
 #, c-format
 msgid "Unsupported block type (%u) in local response!\n"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:280
+#: src/dht/gnunet-service-dht_datacache.c:282
 msgid "# GET requests given to datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_hello.c:84
+#: src/dht/gnunet-service-dht_hello.c:86
 msgid "# HELLOs obtained from peerinfo"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:677
+#: src/dht/gnunet-service-dht_neighbours.c:679
 #, fuzzy
 msgid "# FIND PEER messages initiated"
 msgstr "# PING Nachrichten erstellt"
 
-#: src/dht/gnunet-service-dht_neighbours.c:850
+#: src/dht/gnunet-service-dht_neighbours.c:852
 #, fuzzy
 msgid "# requests TTL-dropped"
 msgstr "# dht Anfragen weitergeleitet"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1053
-#: src/dht/gnunet-service-dht_neighbours.c:1096
+#: src/dht/gnunet-service-dht_neighbours.c:1055
+#: src/dht/gnunet-service-dht_neighbours.c:1098
 msgid "# Peers excluded from routing due to Bloomfilter"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1070
-#: src/dht/gnunet-service-dht_neighbours.c:1112
+#: src/dht/gnunet-service-dht_neighbours.c:1072
+#: src/dht/gnunet-service-dht_neighbours.c:1114
 #, fuzzy
 msgid "# Peer selection failed"
 msgstr " Verbindung fehlgeschlagen\n"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1269
+#: src/dht/gnunet-service-dht_neighbours.c:1271
 #, fuzzy
 msgid "# PUT requests routed"
 msgstr "# dht Anfragen weitergeleitet"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1302
+#: src/dht/gnunet-service-dht_neighbours.c:1304
 msgid "# PUT messages queued for transmission"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1313
-#: src/dht/gnunet-service-dht_neighbours.c:1453
-#: src/dht/gnunet-service-dht_neighbours.c:1556
+#: src/dht/gnunet-service-dht_neighbours.c:1315
+#: src/dht/gnunet-service-dht_neighbours.c:1455
+#: src/dht/gnunet-service-dht_neighbours.c:1558
 msgid "# P2P messages dropped due to full queue"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1398
+#: src/dht/gnunet-service-dht_neighbours.c:1400
 #, fuzzy
 msgid "# GET requests routed"
 msgstr "# dht Anfragen weitergeleitet"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1441
+#: src/dht/gnunet-service-dht_neighbours.c:1443
 msgid "# GET messages queued for transmission"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1571
+#: src/dht/gnunet-service-dht_neighbours.c:1573
 msgid "# RESULT messages queued for transmission"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1674
+#: src/dht/gnunet-service-dht_neighbours.c:1676
 #, fuzzy
 msgid "# Expired PUTs discarded"
 msgstr "# verworfener Nachrichten"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1682
+#: src/dht/gnunet-service-dht_neighbours.c:1684
 #, fuzzy
 msgid "# P2P PUT requests received"
 msgstr "# Client Trace-Anfragen empfangen"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1686
+#: src/dht/gnunet-service-dht_neighbours.c:1688
 #, fuzzy
 msgid "# P2P PUT bytes received"
 msgstr "# Bytes empfangen über TCP"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1912
+#: src/dht/gnunet-service-dht_neighbours.c:1914
 msgid "# FIND PEER requests ignored due to Bloomfilter"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1920
+#: src/dht/gnunet-service-dht_neighbours.c:1922
 msgid "# FIND PEER requests ignored due to lack of HELLO"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:2082
+#: src/dht/gnunet-service-dht_neighbours.c:2084
 #, fuzzy
 msgid "# P2P GET requests received"
 msgstr "# Client Trace-Anfragen empfangen"
 
-#: src/dht/gnunet-service-dht_neighbours.c:2086
+#: src/dht/gnunet-service-dht_neighbours.c:2088
 #, fuzzy
 msgid "# P2P GET bytes received"
 msgstr "# Bytes empfangen über TCP"
 
-#: src/dht/gnunet-service-dht_neighbours.c:2151
+#: src/dht/gnunet-service-dht_neighbours.c:2153
 msgid "# P2P FIND PEER requests processed"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:2172
+#: src/dht/gnunet-service-dht_neighbours.c:2174
 #, fuzzy
 msgid "# P2P GET requests ONLY routed"
 msgstr "# dht Anfragen weitergeleitet"
 
-#: src/dht/gnunet-service-dht_neighbours.c:2349
+#: src/dht/gnunet-service-dht_neighbours.c:2351
 #, fuzzy
 msgid "# Expired results discarded"
 msgstr "# verworfener Nachrichten"
 
-#: src/dht/gnunet-service-dht_neighbours.c:2365
+#: src/dht/gnunet-service-dht_neighbours.c:2367
 msgid "# P2P RESULTS received"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:2369
+#: src/dht/gnunet-service-dht_neighbours.c:2371
 #, fuzzy
 msgid "# P2P RESULT bytes received"
 msgstr "# Bytes empfangen über TCP"
 
-#: src/dht/gnunet-service-dht_nse.c:57
+#: src/dht/gnunet-service-dht_nse.c:59
 #, fuzzy
 msgid "# Network size estimates received"
 msgstr "# verschlüsselter PING Nachrichten empfangen"
 
-#: src/dht/gnunet-service-dht_routing.c:221
+#: src/dht/gnunet-service-dht_routing.c:223
 msgid "# Good REPLIES matched against routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:235
+#: src/dht/gnunet-service-dht_routing.c:237
 msgid "# Duplicate REPLIES matched against routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:241
+#: src/dht/gnunet-service-dht_routing.c:243
 msgid "# Invalid REPLIES matched against routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:247
+#: src/dht/gnunet-service-dht_routing.c:249
 msgid "# Irrelevant REPLIES matched against routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:259
+#: src/dht/gnunet-service-dht_routing.c:261
 msgid "# Unsupported REPLIES matched against routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:337
+#: src/dht/gnunet-service-dht_routing.c:339
 msgid "# Entries removed from routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:413
+#: src/dht/gnunet-service-dht_routing.c:415
 msgid "# Entries added to routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:435
+#: src/dht/gnunet-service-dht_routing.c:437
 #, fuzzy
 msgid "# DHT requests combined"
 msgstr "# dht Anfragen weitergeleitet"
 
-#: src/dht/plugin_block_dht.c:187
+#: src/dht/plugin_block_dht.c:189
 #, fuzzy, c-format
 msgid "Block not of type %u\n"
 msgstr "Kein Transport des Typs %d bekannt.\n"
 
-#: src/dht/plugin_block_dht.c:196
+#: src/dht/plugin_block_dht.c:198
 msgid "Size mismatch for block\n"
 msgstr ""
 
-#: src/dht/plugin_block_dht.c:207
+#: src/dht/plugin_block_dht.c:209
 #, c-format
 msgid "Block of type %u is malformed\n"
 msgstr ""
 
-#: src/dns/gnunet-dns-monitor.c:351 src/dns/gnunet-dns-monitor.c:356
+#: src/dns/gnunet-dns-monitor.c:353 src/dns/gnunet-dns-monitor.c:358
 msgid "only monitor DNS queries"
 msgstr ""
 
-#: src/dns/gnunet-dns-monitor.c:368
+#: src/dns/gnunet-dns-monitor.c:370
 msgid "Monitor DNS queries."
 msgstr ""
 
-#: src/dns/gnunet-dns-redirector.c:235
+#: src/dns/gnunet-dns-redirector.c:237
 msgid "set A records"
 msgstr ""
 
-#: src/dns/gnunet-dns-redirector.c:241
+#: src/dns/gnunet-dns-redirector.c:243
 msgid "set AAAA records"
 msgstr ""
 
-#: src/dns/gnunet-dns-redirector.c:254
+#: src/dns/gnunet-dns-redirector.c:256
 msgid "Change DNS replies to point elsewhere."
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:460
+#: src/dns/gnunet-service-dns.c:462
 msgid "# DNS requests answered via TUN interface"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:608
+#: src/dns/gnunet-service-dns.c:610
 msgid "# DNS exit failed (failed to open socket)"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:738
+#: src/dns/gnunet-service-dns.c:740
 msgid "# External DNS response discarded (no matching request)"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:813
+#: src/dns/gnunet-service-dns.c:815
 msgid "# Client response discarded (no matching request)"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:928
+#: src/dns/gnunet-service-dns.c:930
 msgid "Received malformed IPv4-UDP packet on TUN interface.\n"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:944
+#: src/dns/gnunet-service-dns.c:946
 msgid "Received malformed IPv6-UDP packet on TUN interface.\n"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:953
+#: src/dns/gnunet-service-dns.c:955
 #, c-format
 msgid "Got non-IP packet with %u bytes and protocol %u from TUN\n"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:963
+#: src/dns/gnunet-service-dns.c:965
 msgid "DNS interceptor got non-DNS packet (dropped)\n"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:965
+#: src/dns/gnunet-service-dns.c:967
 msgid "# Non-DNS UDP packet received via TUN interface"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:1032
+#: src/dns/gnunet-service-dns.c:1034
 msgid "# DNS requests received via TUN interface"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:1080 src/exit/gnunet-daemon-exit.c:3563
+#: src/dns/gnunet-service-dns.c:1082 src/exit/gnunet-daemon-exit.c:3565
 msgid "need a valid IPv4 or IPv6 address\n"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:1090
+#: src/dns/gnunet-service-dns.c:1092
 #, c-format
 msgid "`%s' must be installed SUID, will not run DNS interceptor\n"
 msgstr ""
 
-#: src/dv/gnunet-dv.c:173
+#: src/dv/gnunet-dv.c:175
 #, fuzzy
 msgid "Print information about DV state"
 msgstr "Informationen über andere GNUnet Knoten ausgeben."
 
-#: src/exit/gnunet-daemon-exit.c:958
+#: src/exit/gnunet-daemon-exit.c:960
 #, fuzzy
 msgid "# TCP packets sent via TUN"
 msgstr "# Bytes gesendet über TCP"
 
-#: src/exit/gnunet-daemon-exit.c:1059
+#: src/exit/gnunet-daemon-exit.c:1061
 #, fuzzy
 msgid "# ICMP packets sent via TUN"
 msgstr "# Bytes gesendet über TCP"
 
-#: src/exit/gnunet-daemon-exit.c:1338
+#: src/exit/gnunet-daemon-exit.c:1340
 #, fuzzy
 msgid "# UDP packets sent via TUN"
 msgstr "# Bytes gesendet über TCP"
 
-#: src/exit/gnunet-daemon-exit.c:1462 src/exit/gnunet-daemon-exit.c:1570
-#: src/exit/gnunet-daemon-exit.c:1617 src/exit/gnunet-daemon-exit.c:1699
-#: src/exit/gnunet-daemon-exit.c:1820 src/exit/gnunet-daemon-exit.c:1951
-#: src/exit/gnunet-daemon-exit.c:2205
+#: src/exit/gnunet-daemon-exit.c:1464 src/exit/gnunet-daemon-exit.c:1572
+#: src/exit/gnunet-daemon-exit.c:1619 src/exit/gnunet-daemon-exit.c:1701
+#: src/exit/gnunet-daemon-exit.c:1822 src/exit/gnunet-daemon-exit.c:1953
+#: src/exit/gnunet-daemon-exit.c:2207
 #, fuzzy
 msgid "# Bytes received from CADET"
 msgstr "# Bytes empfangen über TCP"
 
-#: src/exit/gnunet-daemon-exit.c:1465
+#: src/exit/gnunet-daemon-exit.c:1467
 #, fuzzy
 msgid "# UDP IP-exit requests received via cadet"
 msgstr "# Client Trace-Anfragen empfangen"
 
-#: src/exit/gnunet-daemon-exit.c:1573
+#: src/exit/gnunet-daemon-exit.c:1575
 #, fuzzy
 msgid "# UDP service requests received via cadet"
 msgstr "# Client Trace-Anfragen empfangen"
 
-#: src/exit/gnunet-daemon-exit.c:1613
+#: src/exit/gnunet-daemon-exit.c:1615
 #, fuzzy
 msgid "# TCP service creation requests received via cadet"
 msgstr "# Client Trace-Anfragen empfangen"
 
-#: src/exit/gnunet-daemon-exit.c:1702
+#: src/exit/gnunet-daemon-exit.c:1704
 #, fuzzy
 msgid "# TCP IP-exit creation requests received via cadet"
 msgstr "# Client Trace-Anfragen empfangen"
 
-#: src/exit/gnunet-daemon-exit.c:1786
+#: src/exit/gnunet-daemon-exit.c:1788
 #, fuzzy
 msgid "# TCP DATA requests dropped (no session)"
 msgstr "# gap Anfragen verworfen: Kollision in RT"
 
-#: src/exit/gnunet-daemon-exit.c:1823
+#: src/exit/gnunet-daemon-exit.c:1825
 #, fuzzy
 msgid "# TCP data requests received via cadet"
 msgstr "# Client Trace-Anfragen empfangen"
 
-#: src/exit/gnunet-daemon-exit.c:1954
+#: src/exit/gnunet-daemon-exit.c:1956
 #, fuzzy
 msgid "# ICMP IP-exit requests received via cadet"
 msgstr "# Client Trace-Anfragen empfangen"
 
-#: src/exit/gnunet-daemon-exit.c:2020 src/exit/gnunet-daemon-exit.c:2277
-#: src/exit/gnunet-daemon-exit.c:2632 src/vpn/gnunet-service-vpn.c:826
-#: src/vpn/gnunet-service-vpn.c:989 src/vpn/gnunet-service-vpn.c:2103
+#: src/exit/gnunet-daemon-exit.c:2022 src/exit/gnunet-daemon-exit.c:2279
+#: src/exit/gnunet-daemon-exit.c:2634 src/vpn/gnunet-service-vpn.c:828
+#: src/vpn/gnunet-service-vpn.c:991 src/vpn/gnunet-service-vpn.c:2105
 msgid "# ICMPv4 packets dropped (type not allowed)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2079 src/exit/gnunet-daemon-exit.c:2336
-#: src/exit/gnunet-daemon-exit.c:2669 src/vpn/gnunet-service-vpn.c:885
-#: src/vpn/gnunet-service-vpn.c:1022 src/vpn/gnunet-service-vpn.c:2156
+#: src/exit/gnunet-daemon-exit.c:2081 src/exit/gnunet-daemon-exit.c:2338
+#: src/exit/gnunet-daemon-exit.c:2671 src/vpn/gnunet-service-vpn.c:887
+#: src/vpn/gnunet-service-vpn.c:1024 src/vpn/gnunet-service-vpn.c:2158
 msgid "# ICMPv6 packets dropped (type not allowed)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2208
+#: src/exit/gnunet-daemon-exit.c:2210
 #, fuzzy
 msgid "# ICMP service requests received via cadet"
 msgstr "# Client Trace-Anfragen empfangen"
 
-#: src/exit/gnunet-daemon-exit.c:2262 src/vpn/gnunet-service-vpn.c:983
-#: src/vpn/gnunet-service-vpn.c:2094
+#: src/exit/gnunet-daemon-exit.c:2264 src/vpn/gnunet-service-vpn.c:985
+#: src/vpn/gnunet-service-vpn.c:2096
 msgid "# ICMPv4 packets dropped (impossible PT to v6)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2321 src/vpn/gnunet-service-vpn.c:873
-#: src/vpn/gnunet-service-vpn.c:2128 src/vpn/gnunet-service-vpn.c:2139
+#: src/exit/gnunet-daemon-exit.c:2323 src/vpn/gnunet-service-vpn.c:875
+#: src/vpn/gnunet-service-vpn.c:2130 src/vpn/gnunet-service-vpn.c:2141
 msgid "# ICMPv6 packets dropped (impossible PT to v4)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2400 src/exit/gnunet-daemon-exit.c:3066
+#: src/exit/gnunet-daemon-exit.c:2402 src/exit/gnunet-daemon-exit.c:3068
 #, fuzzy
 msgid "# Inbound CADET channels created"
 msgstr "# PING Nachrichten erstellt"
 
-#: src/exit/gnunet-daemon-exit.c:2520
+#: src/exit/gnunet-daemon-exit.c:2522
 #, c-format
 msgid "Got duplicate service records for `%s:%u'\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2539
+#: src/exit/gnunet-daemon-exit.c:2541
 #, fuzzy
 msgid "# Messages transmitted via cadet channels"
 msgstr "# Bytes des Typs %d übertragen"
 
-#: src/exit/gnunet-daemon-exit.c:2717
+#: src/exit/gnunet-daemon-exit.c:2719
 msgid "# ICMP packets dropped (not allowed)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2725
+#: src/exit/gnunet-daemon-exit.c:2727
 msgid "ICMP Packet dropped, have no matching connection information\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2799
+#: src/exit/gnunet-daemon-exit.c:2801
 msgid "UDP Packet dropped, have no matching connection information\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2871
+#: src/exit/gnunet-daemon-exit.c:2873
 msgid "TCP Packet dropped, have no matching connection information\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2919
+#: src/exit/gnunet-daemon-exit.c:2921
 #, fuzzy
 msgid "# Packets received from TUN"
 msgstr "# Bytes empfangen über TCP"
 
-#: src/exit/gnunet-daemon-exit.c:2933
+#: src/exit/gnunet-daemon-exit.c:2935
 #, fuzzy
 msgid "# Bytes received from TUN"
 msgstr "# Bytes empfangen über TCP"
 
-#: src/exit/gnunet-daemon-exit.c:2959
+#: src/exit/gnunet-daemon-exit.c:2961
 msgid "IPv4 packet options received.  Ignored.\n"
 msgstr "IPv4-Paketoptionen empfangen, werden ignoriert.\n"
 
-#: src/exit/gnunet-daemon-exit.c:2986
+#: src/exit/gnunet-daemon-exit.c:2988
 #, c-format
 msgid "IPv4 packet with unsupported next header %u received.  Ignored.\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3032
+#: src/exit/gnunet-daemon-exit.c:3034
 #, c-format
 msgid "IPv6 packet with unsupported next header %d received.  Ignored.\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3040
+#: src/exit/gnunet-daemon-exit.c:3042
 #, c-format
 msgid "Packet from unknown protocol %u received.  Ignored.\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3243 src/exit/gnunet-daemon-exit.c:3253
+#: src/exit/gnunet-daemon-exit.c:3245 src/exit/gnunet-daemon-exit.c:3255
 #, c-format
 msgid "Option `%s' for domain `%s' is not formatted correctly!\n"
 msgstr "Option »%s« für Domain »%s« ist nicht korrekt formatiert!\n"
 
-#: src/exit/gnunet-daemon-exit.c:3267 src/exit/gnunet-daemon-exit.c:3275
+#: src/exit/gnunet-daemon-exit.c:3269 src/exit/gnunet-daemon-exit.c:3277
 #, c-format
 msgid "`%s' is not a valid port number (for domain `%s')!"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3316
+#: src/exit/gnunet-daemon-exit.c:3318
 #, c-format
 msgid "No addresses found for hostname `%s' of service `%s'!\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3330 src/exit/gnunet-daemon-exit.c:3343
+#: src/exit/gnunet-daemon-exit.c:3332 src/exit/gnunet-daemon-exit.c:3345
 #, c-format
 msgid "Service `%s' configured for IPv4, but IPv4 is disabled!\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3355
+#: src/exit/gnunet-daemon-exit.c:3357
 #, c-format
 msgid "No IP addresses found for hostname `%s' of service `%s'!\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3499
+#: src/exit/gnunet-daemon-exit.c:3501
 msgid ""
 "This system does not support IPv4, will disable IPv4 functions despite them "
 "being enabled in the configuration\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3507
+#: src/exit/gnunet-daemon-exit.c:3509
 msgid ""
 "This system does not support IPv6, will disable IPv6 functions despite them "
 "being enabled in the configuration\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3514
+#: src/exit/gnunet-daemon-exit.c:3516
 msgid ""
 "Cannot enable IPv4 exit but disable IPv4 on TUN interface, will use "
 "ENABLE_IPv4=YES\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3520
+#: src/exit/gnunet-daemon-exit.c:3522
 msgid ""
 "Cannot enable IPv6 exit but disable IPv6 on TUN interface, will use "
 "ENABLE_IPv6=YES\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3688
+#: src/exit/gnunet-daemon-exit.c:3690
 msgid "Must be a number"
 msgstr "Muss eine Zahl sein"
 
-#: src/exit/gnunet-daemon-exit.c:3803
+#: src/exit/gnunet-daemon-exit.c:3805
 #, c-format
 msgid "`%s' must be installed SUID, EXIT will not work\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3815 src/pt/gnunet-daemon-pt.c:1202
+#: src/exit/gnunet-daemon-exit.c:3817 src/pt/gnunet-daemon-pt.c:1204
 msgid "No useful service enabled.  Exiting.\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3964
+#: src/exit/gnunet-daemon-exit.c:3966
 msgid "Daemon to run to provide an IP exit node for the VPN"
 msgstr ""
 
-#: src/fragmentation/defragmentation.c:273
+#: src/fragmentation/defragmentation.c:275
 msgid "# acknowledgements sent for fragment"
 msgstr ""
 
-#: src/fragmentation/defragmentation.c:466
-#: src/transport/plugin_transport_wlan.c:1552
+#: src/fragmentation/defragmentation.c:468
+#: src/transport/plugin_transport_wlan.c:1554
 #, fuzzy
 msgid "# fragments received"
 msgstr "# verworfener Nachrichten"
 
-#: src/fragmentation/defragmentation.c:536
+#: src/fragmentation/defragmentation.c:538
 #, fuzzy
 msgid "# duplicate fragments received"
 msgstr "# Bytes empfangen über TCP"
 
-#: src/fragmentation/defragmentation.c:554
+#: src/fragmentation/defragmentation.c:556
 msgid "# messages defragmented"
 msgstr "# defragmentierter Nachrichten"
 
-#: src/fragmentation/fragmentation.c:238
+#: src/fragmentation/fragmentation.c:240
 #, fuzzy
 msgid "# fragments transmitted"
 msgstr "# Selbstbekanntmachungen übertragen"
 
-#: src/fragmentation/fragmentation.c:243
+#: src/fragmentation/fragmentation.c:245
 #, fuzzy
 msgid "# fragments retransmitted"
 msgstr "# Selbstbekanntmachungen übertragen"
 
-#: src/fragmentation/fragmentation.c:276
+#: src/fragmentation/fragmentation.c:278
 #, fuzzy
 msgid "# fragments wrap arounds"
 msgstr "# verworfener Nachrichten"
 
-#: src/fragmentation/fragmentation.c:323
+#: src/fragmentation/fragmentation.c:325
 msgid "# messages fragmented"
 msgstr "# fragmentierter Nachrichten"
 
-#: src/fragmentation/fragmentation.c:329
+#: src/fragmentation/fragmentation.c:331
 msgid "# total size of fragmented messages"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:454
+#: src/fragmentation/fragmentation.c:456
 #, fuzzy
 msgid "# fragment acknowledgements received"
 msgstr "# Knotenankündigungen empfangen"
 
-#: src/fragmentation/fragmentation.c:461
+#: src/fragmentation/fragmentation.c:463
 msgid "# bits removed from fragmentation ACKs"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:485
+#: src/fragmentation/fragmentation.c:487
 #, fuzzy
 msgid "# fragmentation transmissions completed"
 msgstr "# Klartext PONG Nachrichten empfangen"
 
-#: src/fs/fs_api.c:497
+#: src/fs/fs_api.c:499
 #, fuzzy, c-format
 msgid "Could not open file `%s': %s"
 msgstr "Konfigurationsdatei `%s' konnte nicht geöffnet werden.\n"
 
-#: src/fs/fs_api.c:508
+#: src/fs/fs_api.c:510
 #, fuzzy, c-format
 msgid "Could not read file `%s': %s"
 msgstr "`%s' konnte nicht aufgelöst werden: %s\n"
 
-#: src/fs/fs_api.c:516
+#: src/fs/fs_api.c:518
 #, c-format
 msgid "Short read reading from file `%s'!"
 msgstr ""
 
-#: src/fs/fs_api.c:1124
+#: src/fs/fs_api.c:1126
 #, fuzzy, c-format
 msgid "Failed to resume publishing information `%s': %s\n"
 msgstr "Datei wurde als `%s' gespeichert.\n"
 
-#: src/fs/fs_api.c:1644
+#: src/fs/fs_api.c:1646
 #, c-format
 msgid "Failure while resuming publishing operation `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_api.c:1660
+#: src/fs/fs_api.c:1662
 #, fuzzy, c-format
 msgid "Failed to resume publishing operation `%s': %s\n"
 msgstr "Datei wurde als `%s' gespeichert.\n"
 
-#: src/fs/fs_api.c:2320
+#: src/fs/fs_api.c:2322
 #, c-format
 msgid "Failure while resuming unindexing operation `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_api.c:2330
+#: src/fs/fs_api.c:2332
 #, fuzzy, c-format
 msgid "Failed to resume unindexing operation `%s': %s\n"
 msgstr "Datei wurde als `%s' gespeichert.\n"
 
-#: src/fs/fs_api.c:2458 src/fs/fs_api.c:2704
+#: src/fs/fs_api.c:2460 src/fs/fs_api.c:2706
 #, fuzzy, c-format
 msgid "Failed to resume sub-download `%s': %s\n"
 msgstr "Datei wurde als `%s' gespeichert.\n"
 
-#: src/fs/fs_api.c:2476
+#: src/fs/fs_api.c:2478
 #, fuzzy, c-format
 msgid "Failed to resume sub-search `%s': %s\n"
 msgstr "Datei wurde als `%s' gespeichert.\n"
 
-#: src/fs/fs_api.c:2491 src/fs/fs_api.c:2510 src/fs/fs_api.c:3014
+#: src/fs/fs_api.c:2493 src/fs/fs_api.c:2512 src/fs/fs_api.c:3016
 #, c-format
 msgid "Failure while resuming search operation `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_api.c:2694
+#: src/fs/fs_api.c:2696
 #, c-format
 msgid "Failed to resume sub-download `%s': could not open file `%s'\n"
 msgstr ""
 
-#: src/fs/fs_api.c:2957
+#: src/fs/fs_api.c:2959
 msgid "Could not resume running search, will resume as paused search\n"
 msgstr ""
 
-#: src/fs/fs_api.c:3052
+#: src/fs/fs_api.c:3054
 #, c-format
 msgid "Failure while resuming download operation `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_directory.c:211
+#: src/fs/fs_directory.c:213
 #, fuzzy
 msgid "MAGIC mismatch.  This is not a GNUnet directory.\n"
 msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n"
 
-#: src/fs/fs_download.c:308
+#: src/fs/fs_download.c:310
 #, fuzzy
 msgid ""
 "Recursive downloads of directories larger than 4 GB are not supported on 32-"
 "bit systems\n"
 msgstr "Rekursiver Download des Verzeichnisses `%s' bei %llu von %llu Bytes.\n"
 
-#: src/fs/fs_download.c:333
+#: src/fs/fs_download.c:335
 msgid "Directory too large for system address space\n"
 msgstr ""
 
-#: src/fs/fs_download.c:345
+#: src/fs/fs_download.c:347
 #, fuzzy, c-format
 msgid ""
 "Failed to access full directroy contents of `%s' for recursive download\n"
 msgstr "Fehler beim Aktualisieren der Daten des Moduls `%s'\n"
 
-#: src/fs/fs_download.c:532 src/fs/fs_download.c:544
+#: src/fs/fs_download.c:534 src/fs/fs_download.c:546
 #, fuzzy, c-format
 msgid "Failed to open file `%s' for writing"
 msgstr "Datei wurde als `%s' gespeichert.\n"
 
-#: src/fs/fs_download.c:954
+#: src/fs/fs_download.c:956
 #, fuzzy, c-format
 msgid "Failed to create directory for recursive download of `%s'\n"
 msgstr "Fehler beim Aktualisieren der Daten des Moduls `%s'\n"
 
-#: src/fs/fs_download.c:1045
+#: src/fs/fs_download.c:1047
 #, c-format
 msgid ""
 "Internal error or bogus download URI (expected %u bytes at depth %u and "
 "offset %llu/%llu, got %u bytes)"
 msgstr ""
 
-#: src/fs/fs_download.c:1073
+#: src/fs/fs_download.c:1075
 msgid "internal error decrypting content"
 msgstr ""
 
-#: src/fs/fs_download.c:1097
+#: src/fs/fs_download.c:1099
 #, fuzzy, c-format
 msgid "Download failed: could not open file `%s': %s"
 msgstr "Datei wurde als `%s' gespeichert.\n"
 
-#: src/fs/fs_download.c:1109
+#: src/fs/fs_download.c:1111
 #, fuzzy, c-format
 msgid "Failed to seek to offset %llu in file `%s': %s"
 msgstr "Datei wurde als `%s' gespeichert.\n"
 
-#: src/fs/fs_download.c:1118
+#: src/fs/fs_download.c:1120
 #, c-format
 msgid "Failed to write block of %u bytes at offset %llu in file `%s': %s"
 msgstr ""
 
-#: src/fs/fs_download.c:1218
+#: src/fs/fs_download.c:1220
 msgid "internal error decoding tree"
 msgstr ""
 
-#: src/fs/fs_download.c:1883
+#: src/fs/fs_download.c:1885
 #, fuzzy
 msgid "Invalid URI"
 msgstr "Ungültiger Parameter: `%s'\n"
 
-#: src/fs/fs_getopt.c:224
+#: src/fs/fs_getopt.c:235
 #, c-format
 msgid ""
 "Unknown metadata type in metadata option `%s'.  Using metadata type "
 "`unknown' instead.\n"
 msgstr ""
 
-#: src/fs/fs_list_indexed.c:150
+#: src/fs/fs_list_indexed.c:152
 #, fuzzy, c-format
 msgid "Failed to receive response from `%s' service.\n"
 msgstr "Fehler beim Empfangen der Antwort von gnunetd auf die `%s' Nachricht\n"
 
-#: src/fs/fs_list_indexed.c:194
+#: src/fs/fs_list_indexed.c:196
 #, fuzzy, c-format
 msgid "Failed to not connect to `%s' service.\n"
 msgstr "`%s' Dienst konnte nicht initialisiert werden.\n"
 
-#: src/fs/fs_misc.c:126
+#: src/fs/fs_misc.c:128
 #, fuzzy, c-format
 msgid "Did not find mime type `%s' in extension list.\n"
 msgstr "Knoten `%s' konnte nicht in der Routing Tabelle gefunden werden!\n"
 
-#: src/fs/fs_namespace.c:205
+#: src/fs/fs_namespace.c:207
 #, fuzzy, c-format
 msgid "Failed to open `%s' for writing: %s\n"
 msgstr "Datei wurde als `%s' gespeichert.\n"
 
-#: src/fs/fs_namespace.c:230
+#: src/fs/fs_namespace.c:232
 #, fuzzy, c-format
 msgid "Failed to write `%s': %s\n"
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
 
-#: src/fs/fs_namespace.c:322
+#: src/fs/fs_namespace.c:324
 #, fuzzy, c-format
 msgid "Failed to read `%s': %s\n"
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
 
-#: src/fs/fs_namespace.c:468
+#: src/fs/fs_namespace.c:470
 #, fuzzy
 msgid "Failed to connect to datastore."
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden."
 
-#: src/fs/fs_publish.c:125 src/fs/fs_publish.c:436
+#: src/fs/fs_publish.c:127 src/fs/fs_publish.c:438
 #, fuzzy, c-format
 msgid "Publishing failed: %s"
 msgstr ""
 "\n"
 "Fehler beim Uploaden der Datei: %s\n"
 
-#: src/fs/fs_publish.c:722 src/fs/fs_publish.c:776 src/fs/fs_publish.c:821
-#: src/fs/fs_publish.c:842 src/fs/fs_publish.c:872 src/fs/fs_publish.c:1138
+#: src/fs/fs_publish.c:724 src/fs/fs_publish.c:778 src/fs/fs_publish.c:823
+#: src/fs/fs_publish.c:844 src/fs/fs_publish.c:874 src/fs/fs_publish.c:1140
 #, 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:778
+#: src/fs/fs_publish.c:780
 #, fuzzy
 msgid "error on index-start request to `fs' service"
 msgstr "Anfrage an den Transportdienst konnte nicht gestellt werden\n"
 
-#: src/fs/fs_publish.c:823
+#: src/fs/fs_publish.c:825
 msgid "failed to compute hash"
 msgstr ""
 
-#: src/fs/fs_publish.c:843
+#: src/fs/fs_publish.c:845
 msgid "filename too long"
 msgstr "Dateiname zu lang"
 
-#: src/fs/fs_publish.c:874
+#: src/fs/fs_publish.c:876
 #, fuzzy
 msgid "could not connect to `fs' service"
 msgstr "Verbindung zu gnunetd konnte nicht hergestellt werden.\n"
 
-#: src/fs/fs_publish.c:900
+#: src/fs/fs_publish.c:902
 #, 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:989 src/fs/fs_publish.c:1025
+#: src/fs/fs_publish.c:991 src/fs/fs_publish.c:1027
 msgid "Can not create LOC URI. Will continue with CHK instead.\n"
 msgstr ""
 
-#: src/fs/fs_publish.c:1092
+#: src/fs/fs_publish.c:1094
 #, 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:1100
+#: src/fs/fs_publish.c:1102
 #, fuzzy, c-format
 msgid "Recursive upload failed: %s"
 msgstr ""
 "\n"
 "Fehler beim Uploaden der Datei: %s\n"
 
-#: src/fs/fs_publish.c:1140
+#: src/fs/fs_publish.c:1142
 #, fuzzy
 msgid "needs to be an actual file"
 msgstr "`%s' ist keine normale Datei.\n"
 
-#: src/fs/fs_publish.c:1379
+#: src/fs/fs_publish.c:1381
 #, fuzzy, c-format
 msgid "Datastore failure: %s"
 msgstr "Verbindung fehlgeschlagen: %s\n"
 
-#: src/fs/fs_publish.c:1470
+#: src/fs/fs_publish.c:1472
 #, c-format
 msgid "Reserving space for %u entries and %llu bytes for publication\n"
 msgstr ""
 
-#: src/fs/fs_publish_ksk.c:218
+#: src/fs/fs_publish_ksk.c:220
 #, fuzzy
 msgid "Could not connect to datastore."
 msgstr "Verbindung zu gnunetd konnte nicht hergestellt werden.\n"
 
-#: src/fs/fs_publish_ublock.c:239
+#: src/fs/fs_publish_ublock.c:241
 #, fuzzy
 msgid "Internal error."
 msgstr "Unbekannter Fehler.\n"
 
-#: src/fs/fs_search.c:820 src/fs/fs_search.c:890
+#: src/fs/fs_search.c:822 src/fs/fs_search.c:892
 #, fuzzy, c-format
 msgid "Failed to parse URI `%s': %s\n"
 msgstr "Datei wurde als `%s' gespeichert.\n"
 
-#: src/fs/fs_search.c:977
+#: src/fs/fs_search.c:979
 #, c-format
 msgid "Got result with unknown block type `%d', ignoring"
 msgstr ""
 
-#: src/fs/fs_unindex.c:61
+#: src/fs/fs_unindex.c:63
 msgid "Failed to find given position in file"
 msgstr ""
 
-#: src/fs/fs_unindex.c:66
+#: src/fs/fs_unindex.c:68
 #, fuzzy
 msgid "Failed to read file"
 msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
 
-#: src/fs/fs_unindex.c:273
+#: src/fs/fs_unindex.c:275
 #, fuzzy
 msgid "Error communicating with `fs' service."
 msgstr "Informationen über andere GNUnet Knoten ausgeben."
 
-#: src/fs/fs_unindex.c:324
+#: src/fs/fs_unindex.c:326
 #, fuzzy
 msgid "Failed to connect to FS service for unindexing."
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden."
 
-#: src/fs/fs_unindex.c:374 src/fs/fs_unindex.c:386
+#: src/fs/fs_unindex.c:376 src/fs/fs_unindex.c:388
 #, fuzzy
 msgid "Failed to get KSKs from directory scan."
 msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n"
 
-#: src/fs/fs_unindex.c:382
+#: src/fs/fs_unindex.c:384
 #, fuzzy, c-format
 msgid "Internal error scanning `%s'.\n"
 msgstr "Absicherung fehlgeschlagen bei %s:%d.\n"
 
-#: src/fs/fs_unindex.c:441
+#: src/fs/fs_unindex.c:443
 #, fuzzy, c-format
 msgid "Failed to remove UBlock: %s\n"
 msgstr "Datei wurde als `%s' gespeichert.\n"
 
-#: src/fs/fs_unindex.c:586 src/fs/fs_unindex.c:650
+#: src/fs/fs_unindex.c:588 src/fs/fs_unindex.c:652
 #, fuzzy
 msgid "Failed to connect to `datastore' service."
 msgstr "`%s' Dienst konnte nicht initialisiert werden.\n"
 
-#: src/fs/fs_unindex.c:663
+#: src/fs/fs_unindex.c:665
 #, fuzzy
 msgid "Failed to open file for unindexing."
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden."
 
-#: src/fs/fs_unindex.c:702
+#: src/fs/fs_unindex.c:704
 #, fuzzy
 msgid "Failed to compute hash of file."
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden."
 
-#: src/fs/fs_uri.c:232
+#: src/fs/fs_uri.c:234
 #, fuzzy, no-c-format
 msgid "Malformed KSK URI (`%' must be followed by HEX number)"
 msgstr "Ungültige URL `%s' (muss mit `%s' beginnen)\n"
 
-#: src/fs/fs_uri.c:291
+#: src/fs/fs_uri.c:293
 #, fuzzy
 msgid "Malformed KSK URI (must not begin or end with `+')"
 msgstr "Ungültige URL `%s' (muss mit `%s' beginnen)\n"
 
-#: src/fs/fs_uri.c:309
+#: src/fs/fs_uri.c:311
 #, fuzzy
 msgid "Malformed KSK URI (`++' not allowed)"
 msgstr "Ungültige URL `%s' (muss mit `%s' beginnen)\n"
 
-#: src/fs/fs_uri.c:316
+#: src/fs/fs_uri.c:318
 #, fuzzy
 msgid "Malformed KSK URI (quotes not balanced)"
 msgstr "Ungültige URL `%s' (muss mit `%s' beginnen)\n"
 
-#: src/fs/fs_uri.c:386
+#: src/fs/fs_uri.c:388
 msgid "Malformed SKS URI (wrong syntax)"
 msgstr ""
 
-#: src/fs/fs_uri.c:427
+#: src/fs/fs_uri.c:429
 msgid "Malformed CHK URI (wrong syntax)"
 msgstr ""
 
-#: src/fs/fs_uri.c:442
+#: src/fs/fs_uri.c:444
 msgid "Malformed CHK URI (failed to decode CHK)"
 msgstr ""
 
-#: src/fs/fs_uri.c:521
+#: src/fs/fs_uri.c:523
 msgid "LOC URI malformed (wrong syntax)"
 msgstr ""
 
-#: src/fs/fs_uri.c:536
+#: src/fs/fs_uri.c:538
 msgid "LOC URI malformed (no CHK)"
 msgstr ""
 
-#: src/fs/fs_uri.c:546
+#: src/fs/fs_uri.c:548
 msgid "LOC URI malformed (missing LOC)"
 msgstr ""
 
-#: src/fs/fs_uri.c:554
+#: src/fs/fs_uri.c:556
 msgid "LOC URI malformed (wrong syntax for public key)"
 msgstr ""
 
-#: src/fs/fs_uri.c:562
+#: src/fs/fs_uri.c:564
 msgid "LOC URI malformed (could not decode public key)"
 msgstr ""
 
-#: src/fs/fs_uri.c:568
+#: src/fs/fs_uri.c:570
 msgid "LOC URI malformed (could not find signature)"
 msgstr ""
 
-#: src/fs/fs_uri.c:574
+#: src/fs/fs_uri.c:576
 msgid "LOC URI malformed (wrong syntax for signature)"
 msgstr ""
 
-#: src/fs/fs_uri.c:583
+#: src/fs/fs_uri.c:585
 msgid "LOC URI malformed (could not decode signature)"
 msgstr ""
 
-#: src/fs/fs_uri.c:589
+#: src/fs/fs_uri.c:591
 msgid "LOC URI malformed (wrong syntax for expiration time)"
 msgstr ""
 
-#: src/fs/fs_uri.c:595
+#: src/fs/fs_uri.c:597
 msgid "LOC URI malformed (could not parse expiration time)"
 msgstr ""
 
-#: src/fs/fs_uri.c:607
+#: src/fs/fs_uri.c:609
 msgid "LOC URI malformed (signature failed validation)"
 msgstr ""
 
-#: src/fs/fs_uri.c:641
+#: src/fs/fs_uri.c:643
 #, fuzzy
 msgid "invalid argument"
 msgstr "Ungültiges Argument »%s«\n"
 
-#: src/fs/fs_uri.c:653
+#: src/fs/fs_uri.c:655
 msgid "Unrecognized URI type"
 msgstr ""
 
-#: src/fs/fs_uri.c:1057 src/fs/fs_uri.c:1084
+#: src/fs/fs_uri.c:1059 src/fs/fs_uri.c:1086
 msgid "No keywords specified!\n"
 msgstr "Keine Schlüsselwörter angegeben!\n"
 
-#: src/fs/fs_uri.c:1090
+#: src/fs/fs_uri.c:1092
 msgid "Number of double-quotes not balanced!\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:230
+#: src/fs/gnunet-auto-share.c:232
 #, fuzzy, c-format
 msgid "Failed to load state: %s\n"
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
 
-#: src/fs/gnunet-auto-share.c:283 src/fs/gnunet-auto-share.c:293
-#: src/fs/gnunet-auto-share.c:303
+#: src/fs/gnunet-auto-share.c:285 src/fs/gnunet-auto-share.c:295
+#: src/fs/gnunet-auto-share.c:305
 #, fuzzy, c-format
 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:405
+#: src/fs/gnunet-auto-share.c:407
 #, c-format
 msgid "Publication of `%s' done\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:492
+#: src/fs/gnunet-auto-share.c:494
 #, c-format
 msgid "Publishing `%s'\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:502
+#: src/fs/gnunet-auto-share.c:504
 #, 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:711
+#: src/fs/gnunet-auto-share.c:713
 #, 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:765 src/fs/gnunet-publish.c:898
+#: src/fs/gnunet-auto-share.c:767 src/fs/gnunet-publish.c:903
 msgid "set the desired LEVEL of sender-anonymity"
 msgstr "Gewünschten Grad LEVEL an Sender-Anonymität festlegen"
 
-#: src/fs/gnunet-auto-share.c:770 src/fs/gnunet-publish.c:902
+#: src/fs/gnunet-auto-share.c:772 src/fs/gnunet-publish.c:907
 msgid "disable adding the creation time to the metadata of the uploaded file"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:775 src/fs/gnunet-publish.c:907
+#: src/fs/gnunet-auto-share.c:777 src/fs/gnunet-publish.c:912
 msgid "do not use libextractor to add keywords or metadata"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:781 src/fs/gnunet-publish.c:942
+#: src/fs/gnunet-auto-share.c:783 src/fs/gnunet-publish.c:944
 msgid "specify the priority of the content"
 msgstr "Die Priorität des Inhalts angeben"
 
-#: src/fs/gnunet-auto-share.c:787 src/fs/gnunet-publish.c:954
+#: src/fs/gnunet-auto-share.c:789 src/fs/gnunet-publish.c:955
 msgid "set the desired replication LEVEL"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:811
+#: src/fs/gnunet-auto-share.c:813
 msgid "Automatically publish files from a directory on GNUnet"
 msgstr ""
 
-#: src/fs/gnunet-daemon-fsprofiler.c:646
+#: src/fs/gnunet-daemon-fsprofiler.c:648
 msgid "Daemon to use file-sharing to measure its performance."
 msgstr ""
 
-#: src/fs/gnunet-directory.c:51
+#: src/fs/gnunet-directory.c:53
 #, c-format
 msgid "\t<original file embedded in %u bytes of meta data>\n"
 msgstr ""
 
-#: src/fs/gnunet-directory.c:103
+#: src/fs/gnunet-directory.c:105
 #, fuzzy, c-format
 msgid "Directory `%s' meta data:\n"
 msgstr "==> Verzeichnis `%s':\n"
 
-#: src/fs/gnunet-directory.c:106
+#: src/fs/gnunet-directory.c:108
 #, fuzzy, c-format
 msgid "Directory `%s' contents:\n"
 msgstr "==> Verzeichnis `%s':\n"
 
-#: src/fs/gnunet-directory.c:141
+#: src/fs/gnunet-directory.c:143
 #, fuzzy
 msgid "You must specify a filename to inspect.\n"
 msgstr "Sie müssen eine Liste von Dateien zum Einfügen angeben.\n"
 
-#: src/fs/gnunet-directory.c:154
+#: src/fs/gnunet-directory.c:156
 #, fuzzy, c-format
 msgid "Failed to read directory `%s'\n"
 msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
 
-#: src/fs/gnunet-directory.c:163
+#: src/fs/gnunet-directory.c:165
 #, fuzzy, c-format
 msgid "`%s' is not a GNUnet directory\n"
 msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n"
 
-#: src/fs/gnunet-directory.c:192
+#: src/fs/gnunet-directory.c:194
 #, fuzzy
 msgid "Display contents of a GNUnet directory"
 msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n"
 
-#: src/fs/gnunet-download.c:137
+#: src/fs/gnunet-download.c:139
 #, fuzzy, c-format
 msgid "Starting download `%s'.\n"
 msgstr "Collection `%s' begonnen.\n"
 
-#: src/fs/gnunet-download.c:147
+#: src/fs/gnunet-download.c:149
 #, fuzzy
 msgid "<unknown time>"
 msgstr "Unbekannter Fehler"
 
-#: src/fs/gnunet-download.c:156
+#: src/fs/gnunet-download.c:158
 #, c-format
 msgid ""
 "Downloading `%s' at %llu/%llu (%s remaining, %s/s). Block took %s to "
 "download\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:182
+#: src/fs/gnunet-download.c:184
 #, fuzzy, c-format
 msgid "Error downloading: %s.\n"
 msgstr "Fehler beim Download: %s\n"
 
-#: src/fs/gnunet-download.c:199
+#: src/fs/gnunet-download.c:201
 #, fuzzy, c-format
 msgid "Downloading `%s' done (%s/s).\n"
 msgstr "Dateien aus dem GNUnet herunterladen."
 
-#: src/fs/gnunet-download.c:214 src/fs/gnunet-publish.c:293
-#: src/fs/gnunet-search.c:210 src/fs/gnunet-unindex.c:105
+#: src/fs/gnunet-download.c:216 src/fs/gnunet-publish.c:295
+#: src/fs/gnunet-search.c:215 src/fs/gnunet-unindex.c:107
 #, c-format
 msgid "Unexpected status: %d\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:244
+#: src/fs/gnunet-download.c:246
 #, fuzzy
 msgid "You need to specify a URI argument.\n"
 msgstr "Sie müssen einen Empfänger angeben!\n"
 
-#: src/fs/gnunet-download.c:251 src/fs/gnunet-publish.c:724
+#: src/fs/gnunet-download.c:253 src/fs/gnunet-publish.c:727
 #, fuzzy, c-format
 msgid "Failed to parse URI: %s\n"
 msgstr "Datei `%s' hat URI: %s\n"
 
-#: src/fs/gnunet-download.c:262
+#: src/fs/gnunet-download.c:264
 msgid "Only CHK or LOC URIs supported.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:271
+#: src/fs/gnunet-download.c:273
 msgid "Target filename must be specified.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:289 src/fs/gnunet-publish.c:868
-#: src/fs/gnunet-search.c:268 src/fs/gnunet-unindex.c:137
+#: src/fs/gnunet-download.c:291 src/fs/gnunet-publish.c:872
+#: src/fs/gnunet-search.c:273 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:337 src/fs/gnunet-search.c:311
+#: src/fs/gnunet-download.c:339 src/fs/gnunet-search.c:315
 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:342
+#: src/fs/gnunet-download.c:344
 msgid "delete incomplete downloads (when aborted with CTRL-C)"
 msgstr ""
 
-#: src/fs/gnunet-download.c:347 src/fs/gnunet-search.c:317
+#: src/fs/gnunet-download.c:349 src/fs/gnunet-search.c:319
 msgid "only search the local peer (no P2P network search)"
 msgstr ""
 
-#: src/fs/gnunet-download.c:352
+#: src/fs/gnunet-download.c:354
 msgid "write the file to FILENAME"
 msgstr "Die Datei in DATEINAME schreiben"
 
-#: src/fs/gnunet-download.c:357
+#: src/fs/gnunet-download.c:359
 msgid "set the maximum number of parallel downloads that is allowed"
 msgstr ""
 
-#: src/fs/gnunet-download.c:362
+#: src/fs/gnunet-download.c:364
 msgid "set the maximum number of parallel requests for blocks that is allowed"
 msgstr ""
 
-#: src/fs/gnunet-download.c:366
+#: src/fs/gnunet-download.c:368
 msgid "download a GNUnet directory recursively"
 msgstr "Das GNUnet-Verzeichnis rekursiv herunterladen"
 
-#: src/fs/gnunet-download.c:384
+#: src/fs/gnunet-download.c:386
 msgid ""
 "Download files from GNUnet using a GNUnet CHK or LOC URI (gnunet://fs/"
 "chk/...)"
 msgstr ""
 
-#: src/fs/gnunet-fs.c:117
+#: src/fs/gnunet-fs.c:119
 msgid "print a list of all indexed files"
 msgstr ""
 
-#: src/fs/gnunet-fs.c:128
+#: src/fs/gnunet-fs.c:130
 #, fuzzy
 msgid "Special file-sharing operations"
 msgstr "Alle Optionen anzeigen"
 
-#: src/fs/gnunet-fs-profiler.c:209
+#: src/fs/gnunet-fs-profiler.c:211
 msgid "run the experiment with COUNT peers"
 msgstr ""
 
-#: src/fs/gnunet-fs-profiler.c:215
+#: src/fs/gnunet-fs-profiler.c:217
 msgid "specifies name of a file with the HOSTS the testbed should use"
 msgstr ""
 
-#: src/fs/gnunet-fs-profiler.c:221
+#: src/fs/gnunet-fs-profiler.c:223
 msgid "automatically terminate experiment after DELAY"
 msgstr ""
 
-#: src/fs/gnunet-fs-profiler.c:231
+#: src/fs/gnunet-fs-profiler.c:233
 msgid "run a testbed to measure file-sharing performance"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:217 src/fs/gnunet-publish.c:229
+#: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:231
 #, c-format
 msgid "Publishing `%s' at %llu/%llu (%s remaining)\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:237
+#: src/fs/gnunet-publish.c:239
 #, fuzzy, c-format
 msgid "Error publishing: %s.\n"
 msgstr "Fehler beim Download: %s\n"
 
-#: src/fs/gnunet-publish.c:244
+#: src/fs/gnunet-publish.c:246
 #, c-format
 msgid "Publishing `%s' done.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:249
+#: src/fs/gnunet-publish.c:251
 #, fuzzy, c-format
 msgid "URI is `%s'.\n"
 msgstr "Ich bin Peer `%s'.\n"
 
-#: src/fs/gnunet-publish.c:257
+#: src/fs/gnunet-publish.c:259
 #, fuzzy, c-format
 msgid "Namespace URI is `%s'.\n"
 msgstr "Ich bin Peer `%s'.\n"
 
-#: src/fs/gnunet-publish.c:273
+#: src/fs/gnunet-publish.c:275
 #, fuzzy
 msgid "Starting cleanup after abort\n"
 msgstr "`%s' Startvorgang abgeschlossen.\n"
 
-#: src/fs/gnunet-publish.c:280
+#: src/fs/gnunet-publish.c:282
 #, fuzzy
 msgid "Cleanup after abort completed.\n"
 msgstr "`%s' Startvorgang abgeschlossen.\n"
 
-#: src/fs/gnunet-publish.c:286
+#: src/fs/gnunet-publish.c:288
 #, fuzzy
 msgid "Cleanup after abort failed.\n"
 msgstr "`%s' Startvorgang abgeschlossen.\n"
 
-#: src/fs/gnunet-publish.c:428
+#: src/fs/gnunet-publish.c:430
 #, fuzzy, c-format
 msgid "Meta data for file `%s' (%s)\n"
 msgstr "Daten des Moduls `%s' werden aktualisiert\n"
 
-#: src/fs/gnunet-publish.c:433
+#: src/fs/gnunet-publish.c:435
 #, fuzzy, c-format
 msgid "Keywords for file `%s' (%s)\n"
 msgstr "Schlüsselwörter für Datei `%s':\n"
 
-#: src/fs/gnunet-publish.c:587
+#: src/fs/gnunet-publish.c:590
 #, fuzzy
 msgid "Could not publish\n"
 msgstr "`%s': Kann nicht senden.\n"
 
-#: src/fs/gnunet-publish.c:612
+#: src/fs/gnunet-publish.c:615
 #, fuzzy
 msgid "Could not start publishing.\n"
 msgstr "Anwendung `%s' konnte nicht initialisiert werden.\n"
 
-#: src/fs/gnunet-publish.c:646
+#: src/fs/gnunet-publish.c:649
 #, fuzzy, c-format
 msgid "Scanning directory `%s'.\n"
 msgstr "==> Verzeichnis `%s':\n"
 
-#: src/fs/gnunet-publish.c:650
+#: src/fs/gnunet-publish.c:653
 #, fuzzy, c-format
 msgid "Scanning file `%s'.\n"
 msgstr "Binde Konfigurationsdatei `%s' ein\n"
 
-#: src/fs/gnunet-publish.c:656
+#: src/fs/gnunet-publish.c:659
 #, c-format
 msgid "There was trouble processing file `%s', skipping it.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:663
+#: src/fs/gnunet-publish.c:666
 #, fuzzy
 msgid "Preprocessing complete.\n"
 msgstr "GNUnet wurde erfolgreich heruntergefahren.\n"
 
-#: src/fs/gnunet-publish.c:668
+#: src/fs/gnunet-publish.c:671
 #, c-format
 msgid "Extracting meta data from file `%s' complete.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:675
+#: src/fs/gnunet-publish.c:678
 msgid "Meta data extraction has finished.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:684
+#: src/fs/gnunet-publish.c:687
 #, fuzzy
 msgid "Internal error scanning directory.\n"
 msgstr "=\tFehler beim Lesen des Verzeichnisses.\n"
 
-#: src/fs/gnunet-publish.c:712
+#: src/fs/gnunet-publish.c:715
 #, c-format
 msgid "Selected pseudonym `%s' unknown\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:745
+#: 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:759
+#: 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:815
+#: src/fs/gnunet-publish.c:819
 #, c-format
 msgid "Cannot extract metadata from a URI!\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:822
+#: 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:828
+#: 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:836 src/vpn/gnunet-vpn.c:208
+#: src/fs/gnunet-publish.c:840 src/vpn/gnunet-vpn.c:210
 #, 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:847 src/fs/gnunet-publish.c:855
-#: src/transport/gnunet-transport.c:1280 src/transport/gnunet-transport.c:1307
+#: src/fs/gnunet-publish.c:851 src/fs/gnunet-publish.c:859
+#: src/transport/gnunet-transport.c:1282 src/transport/gnunet-transport.c:1309
 #, c-format
 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:911
+#: src/fs/gnunet-publish.c:916
 msgid ""
 "print list of extracted keywords that would be used, but do not perform "
 "upload"
@@ -3541,7 +3531,7 @@ msgstr ""
 "Liste der extrahierten Schlüsselworte, die verwendet werden würden, "
 "ausgeben, aber keinen Upload durchführen"
 
-#: src/fs/gnunet-publish.c:917
+#: src/fs/gnunet-publish.c:922
 msgid ""
 "add an additional keyword for the top-level file or directory (this option "
 "can be specified multiple times)"
@@ -3549,13 +3539,13 @@ msgstr ""
 "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:923
+#: src/fs/gnunet-publish.c:928
 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:928
+#: src/fs/gnunet-publish.c:932
 msgid ""
 "do not index, perform full insertion (stores entire file in encrypted form "
 "in GNUnet database)"
@@ -3563,7 +3553,7 @@ msgstr ""
 "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:938
 msgid ""
 "specify ID of an updated version to be published in the future (for "
 "namespace insertions only)"
@@ -3571,19 +3561,19 @@ msgstr ""
 "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:948
+#: src/fs/gnunet-publish.c:949
 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:958
+#: src/fs/gnunet-publish.c:959
 msgid ""
 "only simulate the process but do not do any actual publishing (useful to "
 "compute URIs)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:964
+#: src/fs/gnunet-publish.c:965
 msgid ""
 "set the ID of this version of the publication (for namespace insertions only)"
 msgstr ""
@@ -3596,30 +3586,30 @@ msgid ""
 "to the file with the respective URI)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:987
+#: src/fs/gnunet-publish.c:989
 msgid "Publish a file or directory on GNUnet"
 msgstr ""
 
-#: src/fs/gnunet-search.c:125
+#: src/fs/gnunet-search.c:127
 #, c-format
 msgid "Failed to write directory with search results to `%s'\n"
 msgstr ""
 
-#: src/fs/gnunet-search.c:202
+#: src/fs/gnunet-search.c:207
 #, fuzzy, c-format
 msgid "Error searching: %s.\n"
 msgstr "Fehler beim Verlassen der DHT.\n"
 
-#: src/fs/gnunet-search.c:258
+#: src/fs/gnunet-search.c:263
 msgid "Could not create keyword URI from arguments.\n"
 msgstr ""
 
-#: src/fs/gnunet-search.c:282
+#: src/fs/gnunet-search.c:287
 #, fuzzy
 msgid "Could not start searching.\n"
 msgstr "Fehler beim Starten der Collection.\n"
 
-#: src/fs/gnunet-search.c:323
+#: src/fs/gnunet-search.c:324
 msgid "write search results to file starting with PREFIX"
 msgstr ""
 
@@ -3627,7 +3617,7 @@ msgstr ""
 msgid "automatically terminate search after DELAY"
 msgstr ""
 
-#: src/fs/gnunet-search.c:338
+#: src/fs/gnunet-search.c:335
 msgid "automatically terminate search after VALUE results are found"
 msgstr ""
 
@@ -3635,1935 +3625,1978 @@ msgstr ""
 msgid "Search GNUnet for files that were published on GNUnet"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:375 src/fs/gnunet-service-fs.c:880
+#: src/fs/gnunet-service-fs.c:377 src/fs/gnunet-service-fs.c:882
 msgid "# client searches active"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:434
+#: src/fs/gnunet-service-fs.c:436
 #, fuzzy
 msgid "# replies received for local clients"
 msgstr "Empfangene Client-Nachricht ist ungültig.\n"
 
-#: src/fs/gnunet-service-fs.c:603
+#: src/fs/gnunet-service-fs.c:605
 msgid "# running average P2P latency (ms)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:655 src/fs/gnunet-service-fs_cp.c:562
+#: src/fs/gnunet-service-fs.c:657 src/fs/gnunet-service-fs_cp.c:564
 msgid "# Loopback routes suppressed"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:834
+#: src/fs/gnunet-service-fs.c:836
 #, fuzzy
 msgid "# client searches received"
 msgstr "# Klartext PONG Nachrichten empfangen"
 
-#: src/fs/gnunet-service-fs.c:873
+#: src/fs/gnunet-service-fs.c:875
 msgid "# client searches updated (merged content seen list)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:1044
+#: src/fs/gnunet-service-fs.c:1040
 #, c-format
 msgid "Hash mismatch trying to index file `%s' which does not have hash `%s'\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:1284
+#: src/fs/gnunet-service-fs.c:1280
 #, fuzzy
 msgid "FS service is lacking HOSTKEY configuration setting.  Exiting.\n"
 msgstr "GNUnet Konfiguration"
 
-#: src/fs/gnunet-service-fs.c:1309 src/hostlist/gnunet-daemon-hostlist.c:353
-#: src/topology/gnunet-daemon-topology.c:1200
+#: src/fs/gnunet-service-fs.c:1305 src/hostlist/gnunet-daemon-hostlist.c:355
+#: src/topology/gnunet-daemon-topology.c:1202
 #, fuzzy, c-format
 msgid "Failed to connect to `%s' service.\n"
 msgstr "`%s' Dienst konnte nicht initialisiert werden.\n"
 
-#: src/fs/gnunet-service-fs_cadet_client.c:368
+#: src/fs/gnunet-service-fs_cadet_client.c:370
 #, fuzzy
 msgid "# replies received via cadet"
 msgstr "# Bytes empfangen über TCP"
 
-#: src/fs/gnunet-service-fs_cadet_client.c:382
+#: src/fs/gnunet-service-fs_cadet_client.c:384
 #, fuzzy
 msgid "# replies received via cadet dropped"
 msgstr "# Bytes empfangen über TCP"
 
-#: src/fs/gnunet-service-fs_cadet_server.c:263
+#: src/fs/gnunet-service-fs_cadet_server.c:265
 #, fuzzy
 msgid "# queries received via CADET not answered"
 msgstr "# Bytes empfangen über TCP"
 
-#: src/fs/gnunet-service-fs_cadet_server.c:318
+#: src/fs/gnunet-service-fs_cadet_server.c:320
 msgid "# Blocks transferred via cadet"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cadet_server.c:344
+#: src/fs/gnunet-service-fs_cadet_server.c:346
 #, fuzzy
 msgid "# queries received via cadet"
 msgstr "# Bytes empfangen über TCP"
 
-#: src/fs/gnunet-service-fs_cadet_server.c:386
+#: src/fs/gnunet-service-fs_cadet_server.c:388
 #, fuzzy
 msgid "# cadet client connections rejected"
 msgstr "# Sitzungsschlüssel abgelehnt"
 
-#: src/fs/gnunet-service-fs_cadet_server.c:393
-#: src/fs/gnunet-service-fs_cadet_server.c:433
+#: src/fs/gnunet-service-fs_cadet_server.c:395
+#: src/fs/gnunet-service-fs_cadet_server.c:435
 #, fuzzy
 msgid "# cadet connections active"
 msgstr " Verbindung fehlgeschlagen\n"
 
-#: src/fs/gnunet-service-fs_cp.c:684
+#: src/fs/gnunet-service-fs_cp.c:685
 #, fuzzy
 msgid "# migration stop messages received"
 msgstr "# verschlüsselter PING Nachrichten empfangen"
 
-#: src/fs/gnunet-service-fs_cp.c:688
+#: src/fs/gnunet-service-fs_cp.c:689
 #, c-format
 msgid "Migration of content to peer `%s' blocked for %s\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:721 src/fs/gnunet-service-fs_cp.c:1343
+#: src/fs/gnunet-service-fs_cp.c:722 src/fs/gnunet-service-fs_cp.c:1344
 msgid "# P2P searches active"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:816
+#: src/fs/gnunet-service-fs_cp.c:817
 msgid "# artificial delays introduced (ms)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:873
+#: src/fs/gnunet-service-fs_cp.c:874
 msgid "# replies dropped due to type mismatch"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:881
+#: src/fs/gnunet-service-fs_cp.c:882
 #, fuzzy
 msgid "# replies received for other peers"
 msgstr "# Bytes des Typs %d empfangen"
 
-#: src/fs/gnunet-service-fs_cp.c:895
+#: src/fs/gnunet-service-fs_cp.c:896
 msgid "# replies dropped due to insufficient cover traffic"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:942
+#: src/fs/gnunet-service-fs_cp.c:943
 msgid "# P2P searches destroyed due to ultimate reply"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1013
+#: src/fs/gnunet-service-fs_cp.c:1014
 msgid "# requests done for free (low load)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1038
+#: src/fs/gnunet-service-fs_cp.c:1039
 #, fuzzy
 msgid "# request dropped, priority insufficient"
 msgstr "# gap Anfragen verworfen: Kollision in RT"
 
-#: src/fs/gnunet-service-fs_cp.c:1048
+#: src/fs/gnunet-service-fs_cp.c:1049
 msgid "# requests done for a price (normal load)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1146
+#: src/fs/gnunet-service-fs_cp.c:1147
 msgid "# requests dropped due to higher-TTL request"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1203
+#: src/fs/gnunet-service-fs_cp.c:1204
 msgid "# GET requests received (from other peers)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1226
+#: src/fs/gnunet-service-fs_cp.c:1227
 #, fuzzy
 msgid "# requests dropped due to missing reverse route"
 msgstr "# gap Anfragen verworfen: Kollision in RT"
 
-#: src/fs/gnunet-service-fs_cp.c:1239
+#: src/fs/gnunet-service-fs_cp.c:1240
 #, fuzzy
 msgid "# requests dropped due to full reply queue"
 msgstr "# gap Anfragen verworfen: Kollision in RT"
 
-#: src/fs/gnunet-service-fs_cp.c:1295
+#: src/fs/gnunet-service-fs_cp.c:1296
 msgid "# requests dropped due TTL underflow"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1339
+#: src/fs/gnunet-service-fs_cp.c:1340
 #, fuzzy
 msgid "# P2P query messages received and processed"
 msgstr "# verschlüsselter PING Nachrichten empfangen"
 
-#: src/fs/gnunet-service-fs_cp.c:1706
+#: src/fs/gnunet-service-fs_cp.c:1707
 #, fuzzy
 msgid "# migration stop messages sent"
 msgstr "# verschlüsselter PING Nachrichten empfangen"
 
-#: src/fs/gnunet-service-fs_indexing.c:132
-#: src/fs/gnunet-service-fs_indexing.c:193
+#: src/fs/gnunet-service-fs_indexing.c:134
+#: src/fs/gnunet-service-fs_indexing.c:195
 #, fuzzy, c-format
 msgid "Could not open `%s'.\n"
 msgstr "`%s' konnte nicht aufgelöst werden: %s\n"
 
-#: src/fs/gnunet-service-fs_indexing.c:149
+#: src/fs/gnunet-service-fs_indexing.c:151
 #, fuzzy, c-format
 msgid "Error writing `%s'.\n"
 msgstr "Fehler beim Anlegen des Benutzers"
 
-#: src/fs/gnunet-service-fs_indexing.c:251
+#: src/fs/gnunet-service-fs_indexing.c:253
 #, fuzzy, c-format
 msgid "Failed to delete bogus block: %s\n"
 msgstr "Datei wurde als `%s' gespeichert.\n"
 
-#: src/fs/gnunet-service-fs_indexing.c:329
+#: src/fs/gnunet-service-fs_indexing.c:331
 msgid "# index blocks removed: original file inaccessible"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_indexing.c:355
+#: src/fs/gnunet-service-fs_indexing.c:357
 #, fuzzy, c-format
 msgid "Could not access indexed file `%s' (%s) at offset %llu: %s\n"
 msgstr "Datei `%s' konnte nicht dekodiert werden bei %s:%d.\n"
 
-#: src/fs/gnunet-service-fs_indexing.c:359
+#: src/fs/gnunet-service-fs_indexing.c:361
 #, fuzzy
 msgid "not indexed"
 msgstr "Deindizierung schlug fehl."
 
-#: src/fs/gnunet-service-fs_indexing.c:392
+#: src/fs/gnunet-service-fs_indexing.c:394
 #, fuzzy, c-format
 msgid "Indexed file `%s' changed at offset %llu\n"
 msgstr "FSUI Statusdatei `%s' hatte einen Syntaxfehler bei Offset %u.\n"
 
-#: src/fs/gnunet-service-fs_indexing.c:516
+#: src/fs/gnunet-service-fs_indexing.c:518
 #, c-format
 msgid ""
 "Index request received for file `%s' is already indexed as `%s'.  Permitting "
 "anyway.\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:263
+#: src/fs/gnunet-service-fs_pe.c:265
 msgid "# average retransmission delay (ms)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:425
+#: src/fs/gnunet-service-fs_pe.c:427
 msgid "# delay heap timeout (ms)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:436
+#: src/fs/gnunet-service-fs_pe.c:438
 msgid "# query plans executed"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:464
+#: src/fs/gnunet-service-fs_pe.c:466
 msgid "# query messages sent to other peers"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:534
+#: src/fs/gnunet-service-fs_pe.c:536
 #, fuzzy
 msgid "# requests merged"
 msgstr "# dht Anfragen weitergeleitet"
 
-#: src/fs/gnunet-service-fs_pe.c:544
+#: src/fs/gnunet-service-fs_pe.c:546
 #, fuzzy
 msgid "# requests refreshed"
 msgstr "# dht Anfragen weitergeleitet"
 
-#: src/fs/gnunet-service-fs_pe.c:604 src/fs/gnunet-service-fs_pe.c:707
-#: src/fs/gnunet-service-fs_pe.c:786
+#: src/fs/gnunet-service-fs_pe.c:606 src/fs/gnunet-service-fs_pe.c:709
+#: src/fs/gnunet-service-fs_pe.c:788
 msgid "# query plan entries"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:328
+#: src/fs/gnunet-service-fs_pr.c:330
 #, fuzzy
 msgid "# Pending requests created"
 msgstr "# dht Anfragen weitergeleitet"
 
-#: src/fs/gnunet-service-fs_pr.c:428 src/fs/gnunet-service-fs_pr.c:675
+#: src/fs/gnunet-service-fs_pr.c:430 src/fs/gnunet-service-fs_pr.c:677
 #, fuzzy
 msgid "# Pending requests active"
 msgstr "# Client Trace-Anfragen empfangen"
 
-#: src/fs/gnunet-service-fs_pr.c:856
+#: src/fs/gnunet-service-fs_pr.c:858
 #, fuzzy
 msgid "# replies received and matched"
 msgstr "# Bytes empfangen über TCP"
 
-#: src/fs/gnunet-service-fs_pr.c:892
+#: src/fs/gnunet-service-fs_pr.c:894
 msgid "# duplicate replies discarded (bloomfilter)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:901
+#: src/fs/gnunet-service-fs_pr.c:903
 #, fuzzy
 msgid "# irrelevant replies discarded"
 msgstr "# verworfener Nachrichten"
 
-#: src/fs/gnunet-service-fs_pr.c:916
+#: src/fs/gnunet-service-fs_pr.c:918
 #, c-format
 msgid "Unsupported block type %u\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:933
+#: src/fs/gnunet-service-fs_pr.c:935
 msgid "# results found locally"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1063
+#: src/fs/gnunet-service-fs_pr.c:1065
 msgid "# Datastore `PUT' failures"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1091
+#: src/fs/gnunet-service-fs_pr.c:1093
 #, fuzzy
 msgid "# storage requests dropped due to high load"
 msgstr "# Knotenankündigungen empfangen"
 
-#: src/fs/gnunet-service-fs_pr.c:1129
+#: src/fs/gnunet-service-fs_pr.c:1131
 #, fuzzy
 msgid "# Replies received from DHT"
 msgstr "# Bytes empfangen über HTTP"
 
-#: src/fs/gnunet-service-fs_pr.c:1260
+#: src/fs/gnunet-service-fs_pr.c:1262
 #, fuzzy
 msgid "# Replies received from CADET"
 msgstr "# Bytes empfangen über HTTP"
 
-#: src/fs/gnunet-service-fs_pr.c:1312
+#: src/fs/gnunet-service-fs_pr.c:1314
 #, c-format
 msgid "Datastore lookup already took %s!\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1333
+#: src/fs/gnunet-service-fs_pr.c:1335
 #, c-format
 msgid "On-demand lookup already took %s!\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1393
+#: src/fs/gnunet-service-fs_pr.c:1395
 msgid "# requested DBLOCK or IBLOCK not found"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1452
+#: src/fs/gnunet-service-fs_pr.c:1454
 msgid "# Datastore lookups concluded (error queueing)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1507
+#: src/fs/gnunet-service-fs_pr.c:1509
 msgid "# Datastore lookups concluded (no results)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1522
+#: src/fs/gnunet-service-fs_pr.c:1524
 msgid "# Datastore lookups concluded (seen all)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1546
+#: src/fs/gnunet-service-fs_pr.c:1548
 msgid "# Datastore lookups aborted (more than MAX_RESULTS)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1560
+#: src/fs/gnunet-service-fs_pr.c:1562
 msgid "# on-demand blocks matched requests"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1581
+#: src/fs/gnunet-service-fs_pr.c:1583
 msgid "# on-demand lookups performed successfully"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1586
+#: src/fs/gnunet-service-fs_pr.c:1588
 msgid "# on-demand lookups failed"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1624
+#: src/fs/gnunet-service-fs_pr.c:1626
 msgid "# Datastore lookups concluded (found last result)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1637
+#: src/fs/gnunet-service-fs_pr.c:1639
 msgid "# Datastore lookups concluded (load too high)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1691
+#: src/fs/gnunet-service-fs_pr.c:1693
 msgid "# Datastore lookups initiated"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1747
+#: src/fs/gnunet-service-fs_pr.c:1749
 #, fuzzy
 msgid "# GAP PUT messages received"
 msgstr "# verschlüsselter PONG Nachrichten empfangen"
 
-#: src/fs/gnunet-service-fs_push.c:644
+#: src/fs/gnunet-service-fs_push.c:646
 msgid "time required, content pushing disabled"
 msgstr ""
 
-#: src/fs/gnunet-unindex.c:87
+#: src/fs/gnunet-unindex.c:89
 #, c-format
 msgid "Unindexing at %llu/%llu (%s remaining)\n"
 msgstr ""
 
-#: src/fs/gnunet-unindex.c:93
+#: src/fs/gnunet-unindex.c:95
 #, fuzzy, c-format
 msgid "Error unindexing: %s.\n"
 msgstr ""
 "\n"
 "Fehler beim Deindizieren der Datei: %s\n"
 
-#: src/fs/gnunet-unindex.c:98
+#: src/fs/gnunet-unindex.c:100
 #, fuzzy
 msgid "Unindexing done.\n"
 msgstr "Dateien deindizieren."
 
-#: src/fs/gnunet-unindex.c:127
+#: 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:144
+#: 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:176
+#: src/fs/gnunet-unindex.c:178
 msgid "Unindex a file that was previously indexed with gnunet-publish."
 msgstr ""
 
-#: src/gns/gns_tld_api.c:274
+#: src/gns/gns_tld_api.c:348
 msgid "Expected a base32-encoded public zone key\n"
 msgstr ""
 
-#: src/gns/gnunet-bcd.c:125
+#: src/gns/gnunet-bcd.c:127
 #, fuzzy, c-format
 msgid "Refusing `%s' request to HTTP server\n"
 msgstr "Fehler beim Senden einer `%s' Anfrage an den SMTP Server.\n"
 
-#: src/gns/gnunet-bcd.c:355
+#: src/gns/gnunet-bcd.c:357
 #, fuzzy, c-format
 msgid "Invalid port number %u.  Exiting.\n"
 msgstr "Ungültige Parameter. Abbruch.\n"
 
-#: src/gns/gnunet-bcd.c:360
+#: src/gns/gnunet-bcd.c:362
 #, fuzzy, c-format
 msgid "Businesscard HTTP server starts on %u\n"
 msgstr "Der Transportdienst auf Port %d konnte nicht gestartet werden.\n"
 
-#: src/gns/gnunet-bcd.c:374
+#: src/gns/gnunet-bcd.c:376
 #, fuzzy, c-format
 msgid "Could not start businesscard HTTP server on port %u\n"
 msgstr "Der Transportdienst auf Port %d konnte nicht gestartet werden.\n"
 
-#: src/gns/gnunet-bcd.c:521
+#: src/gns/gnunet-bcd.c:523
 msgid "Run HTTP serve on port PORT (default is 8888)"
 msgstr ""
 
-#: src/gns/gnunet-bcd.c:534
+#: src/gns/gnunet-bcd.c:536
 msgid "GNUnet HTTP server to create business cards"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:201
+#: src/gns/gnunet-dns2gns.c:203
 msgid "Failed to pack DNS response into UDP packet!\n"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:403
+#: src/gns/gnunet-dns2gns.c:405
 #, c-format
 msgid "Cannot parse DNS request from %s\n"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:419
+#: src/gns/gnunet-dns2gns.c:421
 #, fuzzy, c-format
 msgid "Received malformed DNS request from %s\n"
 msgstr "Beschädigte Antwort auf `%s' von Knoten `%s' empfangen.\n"
 
-#: src/gns/gnunet-dns2gns.c:427
+#: src/gns/gnunet-dns2gns.c:429
 #, fuzzy, c-format
 msgid "Received unsupported DNS request from %s\n"
 msgstr "Unbekannte Anfrageart %d empfangen bei %s:%d\n"
 
-#: src/gns/gnunet-dns2gns.c:586
+#: src/gns/gnunet-dns2gns.c:588
 #, fuzzy
 msgid "No DNS server specified!\n"
 msgstr "Keine Schlüsselwörter angegeben!\n"
 
-#: src/gns/gnunet-dns2gns.c:686
+#: src/gns/gnunet-dns2gns.c:688
 msgid "IP of recursive DNS resolver to use (required)"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:691
+#: src/gns/gnunet-dns2gns.c:693
 msgid "UDP port to listen on for inbound DNS requests; default: 2853"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:708
+#: src/gns/gnunet-dns2gns.c:710
 msgid "GNUnet DNS-to-GNS proxy (a DNS server)"
 msgstr ""
 
-#: src/gns/gnunet-gns-benchmark.c:580
+#: src/gns/gnunet-gns-benchmark.c:582
 msgid "how long to wait between queries"
 msgstr ""
 
-#: src/gns/gnunet-gns-benchmark.c:585
+#: src/gns/gnunet-gns-benchmark.c:587
 msgid "how long to wait for an answer"
 msgstr ""
 
-#: src/gns/gnunet-gns-benchmark.c:589
+#: src/gns/gnunet-gns-benchmark.c:591
 msgid "look for GNS2DNS records instead of ANY"
 msgstr ""
 
-#: src/gns/gnunet-gns.c:197
+#: src/gns/gnunet-gns.c:199
 #, c-format
 msgid "Invalid typename specified, assuming `ANY'\n"
 msgstr ""
 
-#: src/gns/gnunet-gns.c:231
+#: src/gns/gnunet-gns.c:233
 msgid "Lookup a record for the given name"
 msgstr ""
 
-#: src/gns/gnunet-gns.c:236
+#: src/gns/gnunet-gns.c:238
 #, fuzzy
 msgid "Specify the type of the record to lookup"
 msgstr "Die Priorität des Inhalts angeben"
 
-#: src/gns/gnunet-gns.c:240
+#: src/gns/gnunet-gns.c:242
 msgid "No unneeded output"
 msgstr ""
 
-#: src/gns/gnunet-gns.c:256
+#: src/gns/gnunet-gns.c:258
 #, fuzzy
 msgid "GNUnet GNS resolver tool"
 msgstr "GNUnet Netzwerk Topologie tracen."
 
-#: src/gns/gnunet-gns-helper-service-w32.c:600
+#: src/gns/gnunet-gns-helper-service-w32.c:602
 msgid "Not ready to process requests, lacking ego data\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-helper-service-w32.c:699
+#: src/gns/gnunet-gns-helper-service-w32.c:701
 msgid ""
 "Ego for `gns-master' not found, cannot perform lookup.  Did you run gnunet-"
 "gns-import.sh?\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-helper-service-w32.c:737
+#: src/gns/gnunet-gns-helper-service-w32.c:739
 #, fuzzy, c-format
 msgid "Failed to connect to identity service\n"
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
 
-#: src/gns/gnunet-gns-import.c:450
+#: src/gns/gnunet-gns-import.c:452
 msgid "This program will import some GNS authorities into your GNS namestore."
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:110
-#: src/hostlist/gnunet-daemon-hostlist_client.c:533
-#: src/hostlist/gnunet-daemon-hostlist_client.c:751
-#: src/hostlist/gnunet-daemon-hostlist_client.c:757
-#: src/hostlist/gnunet-daemon-hostlist_client.c:809
-#: src/hostlist/gnunet-daemon-hostlist_client.c:818
-#: src/hostlist/gnunet-daemon-hostlist_client.c:929
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1024
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1029
-#: src/transport/plugin_transport_http_client.c:596
-#: src/transport/plugin_transport_http_client.c:614
+#: src/gns/gnunet-gns-proxy.c:118
+#: src/hostlist/gnunet-daemon-hostlist_client.c:535
+#: src/hostlist/gnunet-daemon-hostlist_client.c:753
+#: src/hostlist/gnunet-daemon-hostlist_client.c:759
+#: src/hostlist/gnunet-daemon-hostlist_client.c:811
+#: src/hostlist/gnunet-daemon-hostlist_client.c:820
+#: src/hostlist/gnunet-daemon-hostlist_client.c:931
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1026
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1031
+#: src/transport/plugin_transport_http_client.c:598
+#: src/transport/plugin_transport_http_client.c:616
 #, c-format
 msgid "%s failed at %s:%d: `%s'\n"
 msgstr "»%s« schlug fehl bei %s:%d mit dem Fehler: »%s«.\n"
 
-#: src/gns/gnunet-gns-proxy.c:960
+#: src/gns/gnunet-gns-proxy.c:980
 #, fuzzy, c-format
 msgid "Unsupported CURL TLS backend %d\n"
 msgstr "Kommando `%s' wird nicht unterstützt. Vorgang wird abgebrochen.\n"
 
-#: src/gns/gnunet-gns-proxy.c:985
+#: src/gns/gnunet-gns-proxy.c:1005
 #, fuzzy, c-format
 msgid "Failed to fetch CN from cert: %s\n"
 msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
 
-#: src/gns/gnunet-gns-proxy.c:1008
+#: src/gns/gnunet-gns-proxy.c:1026
 #, fuzzy, c-format
 msgid "Failed to initialize DANE: %s\n"
 msgstr "SQLite Datenbank konnte nicht initialisiert werden.\n"
 
-#: src/gns/gnunet-gns-proxy.c:1021
+#: src/gns/gnunet-gns-proxy.c:1041
 #, fuzzy, c-format
 msgid "Failed to parse DANE record: %s\n"
 msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n"
 
-#: src/gns/gnunet-gns-proxy.c:1036
+#: src/gns/gnunet-gns-proxy.c:1056
 #, fuzzy, c-format
 msgid "Failed to verify TLS connection using DANE: %s\n"
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
 
-#: src/gns/gnunet-gns-proxy.c:1046
+#: src/gns/gnunet-gns-proxy.c:1066
 #, c-format
 msgid "Failed DANE verification failed with GnuTLS verify status code: %u\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:1070
+#: src/gns/gnunet-gns-proxy.c:1090
 #, c-format
 msgid "TLS certificate subject name (%s) does not match `%s': %d\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:1200
+#: src/gns/gnunet-gns-proxy.c:1221
 #, c-format
 msgid "Cookie domain `%s' supplied by server is invalid\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:2062
+#: src/gns/gnunet-gns-proxy.c:2121
 #, fuzzy, c-format
 msgid "Unsupported HTTP method `%s'\n"
 msgstr "Kommando `%s' wird nicht unterstützt. Vorgang wird abgebrochen.\n"
 
-#: src/gns/gnunet-gns-proxy.c:2583
+#: src/gns/gnunet-gns-proxy.c:2642
 #, fuzzy, c-format
 msgid "Unable to import private key from file `%s'\n"
 msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':"
 
-#: src/gns/gnunet-gns-proxy.c:2615
+#: src/gns/gnunet-gns-proxy.c:2674
 #, fuzzy, c-format
 msgid "Unable to import certificate from `%s'\n"
 msgstr "SQLite Datenbank konnte nicht initialisiert werden: %s.\n"
 
-#: src/gns/gnunet-gns-proxy.c:2814
+#: src/gns/gnunet-gns-proxy.c:2875
 #, fuzzy, c-format
 msgid "Failed to start HTTPS server for `%s'\n"
 msgstr "Der Transportdienst auf Port %d konnte nicht gestartet werden.\n"
 
-#: src/gns/gnunet-gns-proxy.c:2839 src/rest/gnunet-rest-server.c:656
+#: src/gns/gnunet-gns-proxy.c:2897 src/rest/gnunet-rest-server.c:658
 #, fuzzy
 msgid "Failed to pass client to MHD\n"
 msgstr "Fehler beim Starten der Collection.\n"
 
-#: src/gns/gnunet-gns-proxy.c:3169
+#: src/gns/gnunet-gns-proxy.c:3233
 #, c-format
 msgid "Unsupported socks version %d\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3198
+#: src/gns/gnunet-gns-proxy.c:3262
 #, fuzzy, c-format
 msgid "Unsupported socks command %d\n"
 msgstr "Kommando `%s' wird nicht unterstützt. Vorgang wird abgebrochen.\n"
 
-#: src/gns/gnunet-gns-proxy.c:3280
+#: src/gns/gnunet-gns-proxy.c:3345
 #, c-format
 msgid "Unsupported socks address type %d\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3570
+#: src/gns/gnunet-gns-proxy.c:3635
 #, fuzzy, c-format
 msgid "Failed to load X.509 key and certificate from `%s'\n"
 msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
 
-#: src/gns/gnunet-gns-proxy.c:3698
+#: src/gns/gnunet-gns-proxy.c:3763
 msgid "listen on specified port (default: 7777)"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3703
+#: src/gns/gnunet-gns-proxy.c:3768
 msgid "pem file to use as CA"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3707
+#: src/gns/gnunet-gns-proxy.c:3772
 msgid "disable use of IPv6"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3733
+#: src/gns/gnunet-gns-proxy.c:3798
 msgid "GNUnet GNS proxy"
 msgstr ""
 
-#: src/gns/gnunet-service-gns.c:511
+#: src/gns/gnunet-service-gns.c:506
 #, fuzzy
 msgid "Properly base32-encoded public key required"
 msgstr "# Bytes empfangen über TCP"
 
-#: src/gns/gnunet-service-gns.c:547
+#: src/gns/gnunet-service-gns.c:542
 #, fuzzy
 msgid "Failed to connect to the namecache!\n"
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
 
-#: src/gns/gnunet-service-gns.c:566
-#: src/zonemaster/gnunet-service-zonemaster.c:873
-#: src/zonemaster/gnunet-service-zonemaster-monitor.c:438
+#: src/gns/gnunet-service-gns.c:561
+#: src/zonemaster/gnunet-service-zonemaster.c:875
+#: src/zonemaster/gnunet-service-zonemaster-monitor.c:440
 #, fuzzy
 msgid "Could not connect to DHT!\n"
 msgstr "Verbindung zu gnunetd konnte nicht hergestellt werden.\n"
 
-#: src/gns/gnunet-service-gns_interceptor.c:257
+#: src/gns/gnunet-service-gns_interceptor.c:259
 #, fuzzy
 msgid "Error converting GNS response to DNS response!\n"
 msgstr "Fehler beim Konvertieren von Parametern in URI!\n"
 
-#: src/gns/gnunet-service-gns_interceptor.c:364
+#: src/gns/gnunet-service-gns_interceptor.c:366
 #, fuzzy
 msgid "Failed to connect to the DNS service!\n"
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
 
-#: src/gns/gnunet-service-gns_resolver.c:717
+#: src/gns/gnunet-service-gns_resolver.c:700
 #, c-format
 msgid "Protocol `%s' unknown, skipping labels.\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:728
+#: src/gns/gnunet-service-gns_resolver.c:711
 #, c-format
 msgid "Service `%s' unknown for protocol `%s', skipping labels.\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:931
+#: src/gns/gnunet-service-gns_resolver.c:914
 #, fuzzy
 msgid "Failed to parse DNS response\n"
 msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
 
-#: src/gns/gnunet-service-gns_resolver.c:1112
+#: src/gns/gnunet-service-gns_resolver.c:1095
 #, c-format
 msgid "Skipping record of unsupported type %d\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:1382
+#: src/gns/gnunet-service-gns_resolver.c:1365
 #, c-format
 msgid "VPN returned empty result for `%s'\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:1823
+#: src/gns/gnunet-service-gns_resolver.c:1806
 #, c-format
 msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:1866
+#: src/gns/gnunet-service-gns_resolver.c:1849
 #, fuzzy, c-format
 msgid "GNS lookup failed (zero records found for `%s')\n"
 msgstr "Dienst `%s' konnte nicht ordentlich entladen werden!\n"
 
-#: src/gns/gnunet-service-gns_resolver.c:2281
+#: src/gns/gnunet-service-gns_resolver.c:2264
 msgid "GNS lookup recursion failed (no delegation record found)\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:2304
+#: src/gns/gnunet-service-gns_resolver.c:2287
 #, fuzzy, c-format
 msgid "Failed to cache GNS resolution: %s\n"
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
 
-#: src/gns/gnunet-service-gns_resolver.c:2467
+#: src/gns/gnunet-service-gns_resolver.c:2450
 #, c-format
 msgid "GNS namecache returned empty result for `%s'\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:2602
+#: src/gns/gnunet-service-gns_resolver.c:2585
 #, c-format
 msgid "Zone %s was revoked, resolution fails\n"
 msgstr ""
 
-#: src/gns/plugin_gnsrecord_gns.c:179
+#: src/gns/plugin_gnsrecord_gns.c:181
 #, c-format
 msgid "Unable to parse PKEY record `%s'\n"
 msgstr ""
 
-#: src/gns/plugin_gnsrecord_gns.c:210
+#: src/gns/plugin_gnsrecord_gns.c:212
 #, fuzzy, c-format
 msgid "Unable to parse GNS2DNS record `%s'\n"
 msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n"
 
-#: src/gns/plugin_gnsrecord_gns.c:231
+#: src/gns/plugin_gnsrecord_gns.c:233
 #, c-format
 msgid "Failed to serialize GNS2DNS record with value `%s'\n"
 msgstr ""
 
-#: src/gns/plugin_gnsrecord_gns.c:256
+#: src/gns/plugin_gnsrecord_gns.c:258
 #, fuzzy, c-format
 msgid "Unable to parse VPN record string `%s'\n"
 msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':"
 
-#: src/gns/plugin_gnsrecord_gns.c:292
+#: src/gns/plugin_gnsrecord_gns.c:294
 #, fuzzy, c-format
 msgid "Unable to parse BOX record string `%s'\n"
 msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:357
+#: src/gnsrecord/plugin_gnsrecord_dns.c:359
 #, c-format
 msgid "Unable to parse IPv4 address `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:378
+#: 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:400
+#: 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:485
+#: src/gnsrecord/plugin_gnsrecord_dns.c:487
 #, c-format
 msgid "Failed to serialize CERT record with %u bytes\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:521
+#: src/gnsrecord/plugin_gnsrecord_dns.c:523
 #, fuzzy, c-format
 msgid "Unable to parse SOA record `%s'\n"
 msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:540
+#: src/gnsrecord/plugin_gnsrecord_dns.c:542
 #, c-format
 msgid "Failed to serialize SOA record with mname `%s' and rname `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:563
+#: src/gnsrecord/plugin_gnsrecord_dns.c:565
 #, 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:586
+#: src/gnsrecord/plugin_gnsrecord_dns.c:588
 #, fuzzy, c-format
 msgid "Unable to parse MX record `%s'\n"
 msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:601
+#: src/gnsrecord/plugin_gnsrecord_dns.c:603
 #, 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:628
+#: src/gnsrecord/plugin_gnsrecord_dns.c:630
 #, fuzzy, c-format
 msgid "Unable to parse SRV record `%s'\n"
 msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:644
+#: src/gnsrecord/plugin_gnsrecord_dns.c:646
 #, 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:661
+#: src/gnsrecord/plugin_gnsrecord_dns.c:663
 #, c-format
 msgid "Unable to parse IPv6 address `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:685
-#: src/gnsrecord/plugin_gnsrecord_dns.c:701
+#: src/gnsrecord/plugin_gnsrecord_dns.c:687
+#: src/gnsrecord/plugin_gnsrecord_dns.c:703
 #, fuzzy, c-format
 msgid "Unable to parse TLSA record string `%s'\n"
 msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':"
 
-#: src/hello/gnunet-hello.c:124
+#: src/hello/gnunet-hello.c:126
 msgid "Call with name of HELLO file to modify.\n"
 msgstr ""
 
-#: src/hello/gnunet-hello.c:130
+#: src/hello/gnunet-hello.c:132
 #, fuzzy, c-format
 msgid "Error accessing file `%s': %s\n"
 msgstr ""
 "\n"
 "Fehler beim Deindizieren der Datei: %s\n"
 
-#: src/hello/gnunet-hello.c:138
+#: src/hello/gnunet-hello.c:140
 #, c-format
 msgid "File `%s' is too big to be a HELLO\n"
 msgstr ""
 
-#: src/hello/gnunet-hello.c:145
+#: src/hello/gnunet-hello.c:147
 #, c-format
 msgid "File `%s' is too small to be a HELLO\n"
 msgstr ""
 
-#: src/hello/gnunet-hello.c:155 src/hello/gnunet-hello.c:196
+#: src/hello/gnunet-hello.c:157 src/hello/gnunet-hello.c:198
 #, fuzzy, c-format
 msgid "Error opening file `%s': %s\n"
 msgstr "Konfigurationsdatei `%s' konnte nicht geöffnet werden.\n"
 
-#: src/hello/gnunet-hello.c:172
+#: src/hello/gnunet-hello.c:174
 #, fuzzy, c-format
 msgid "Did not find well-formed HELLO in file `%s'\n"
 msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
 
-#: src/hello/gnunet-hello.c:208
+#: src/hello/gnunet-hello.c:210
 #, fuzzy, c-format
 msgid "Error writing HELLO to file `%s': %s\n"
 msgstr "PID konnte nicht in Datei `%s' geschrieben werden: %s.\n"
 
-#: src/hello/gnunet-hello.c:217
+#: src/hello/gnunet-hello.c:219
 #, c-format
 msgid "Modified %u addresses, wrote %u bytes\n"
 msgstr ""
 
-#: src/hello/hello.c:1108
+#: src/hello/hello.c:1110
 msgid "Failed to parse HELLO message: missing expiration time\n"
 msgstr ""
 
-#: src/hello/hello.c:1117
+#: src/hello/hello.c:1119
 msgid "Failed to parse HELLO message: invalid expiration time\n"
 msgstr ""
 
-#: src/hello/hello.c:1127
+#: src/hello/hello.c:1129
 #, fuzzy
 msgid "Failed to parse HELLO message: malformed\n"
 msgstr "Fehler beim Senden der `%s' Nachricht an gnunetd\n"
 
-#: src/hello/hello.c:1138
+#: src/hello/hello.c:1140
 msgid "Failed to parse HELLO message: missing transport plugin\n"
 msgstr ""
 
-#: src/hello/hello.c:1156
+#: src/hello/hello.c:1158
 #, fuzzy, c-format
 msgid "Plugin `%s' not found, skipping address\n"
 msgstr "Kommando `%s' wurde nicht gefunden!\n"
 
-#: src/hello/hello.c:1164
+#: src/hello/hello.c:1166
 #, c-format
 msgid "Plugin `%s' does not support URIs yet\n"
 msgstr ""
 
-#: src/hello/hello.c:1179
+#: src/hello/hello.c:1181
 #, fuzzy, c-format
 msgid "Failed to parse `%s' as an address for plugin `%s'\n"
 msgstr "Fehler beim Aktualisieren der Daten des Moduls `%s'\n"
 
-#: src/hostlist/gnunet-daemon-hostlist.c:314
+#: src/hostlist/gnunet-daemon-hostlist.c:316
 msgid ""
 "None of the functions for the hostlist daemon were enabled.  I have no "
 "reason to run!\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist.c:374
+#: src/hostlist/gnunet-daemon-hostlist.c:376
 msgid "advertise our hostlist to other peers"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist.c:379
+#: src/hostlist/gnunet-daemon-hostlist.c:381
 msgid ""
 "bootstrap using hostlists (it is highly recommended that you always use this "
 "option)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist.c:383
+#: src/hostlist/gnunet-daemon-hostlist.c:385
 msgid "enable learning about hostlist servers from other peers"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist.c:388
+#: src/hostlist/gnunet-daemon-hostlist.c:390
 msgid "provide a hostlist server"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist.c:404
+#: src/hostlist/gnunet-daemon-hostlist.c:406
 msgid "GNUnet hostlist server and client"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:347
+#: src/hostlist/gnunet-daemon-hostlist_client.c:349
 msgid "# bytes downloaded from hostlist servers"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:368
-#: src/hostlist/gnunet-daemon-hostlist_client.c:401
+#: src/hostlist/gnunet-daemon-hostlist_client.c:370
+#: src/hostlist/gnunet-daemon-hostlist_client.c:403
 #, fuzzy
 msgid "# invalid HELLOs downloaded from hostlist servers"
 msgstr "# Hellos per HTTP heruntergeladen"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:371
-#: src/hostlist/gnunet-daemon-hostlist_client.c:404
+#: src/hostlist/gnunet-daemon-hostlist_client.c:373
+#: src/hostlist/gnunet-daemon-hostlist_client.c:406
 #, fuzzy, c-format
 msgid "Invalid `%s' message received from hostlist at `%s'\n"
 msgstr "Ungültige `%s' Nachricht von Knoten `%s' empfangen.\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:389
+#: src/hostlist/gnunet-daemon-hostlist_client.c:391
 #, fuzzy
 msgid "# valid HELLOs downloaded from hostlist servers"
 msgstr "# Hellos per HTTP heruntergeladen"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:659
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1405
+#: src/hostlist/gnunet-daemon-hostlist_client.c:661
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1407
 msgid "# advertised hostlist URIs"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:689
+#: src/hostlist/gnunet-daemon-hostlist_client.c:691
 #, c-format
 msgid "# advertised URI `%s' downloaded"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:732
+#: src/hostlist/gnunet-daemon-hostlist_client.c:734
 #, c-format
 msgid ""
 "Advertised hostlist with URI `%s' could not be downloaded. Advertised URI "
 "gets dismissed.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:860
+#: src/hostlist/gnunet-daemon-hostlist_client.c:862
 #, fuzzy, c-format
 msgid "Timeout trying to download hostlist from `%s'\n"
 msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:874
+#: src/hostlist/gnunet-daemon-hostlist_client.c:876
 #, c-format
 msgid "Download limit of %u bytes exceeded, stopping download\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:894
+#: src/hostlist/gnunet-daemon-hostlist_client.c:896
 #, fuzzy, c-format
 msgid "Download of hostlist from `%s' failed: `%s'\n"
 msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:900
+#: src/hostlist/gnunet-daemon-hostlist_client.c:902
 #, c-format
 msgid "Download of hostlist `%s' completed.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:908
+#: src/hostlist/gnunet-daemon-hostlist_client.c:910
 #, c-format
 msgid "Adding successfully tested hostlist `%s' datastore.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:961
+#: src/hostlist/gnunet-daemon-hostlist_client.c:963
 #, c-format
 msgid "Bootstrapping using hostlist at `%s'.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:969
+#: src/hostlist/gnunet-daemon-hostlist_client.c:971
 msgid "# hostlist downloads initiated"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1096
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1663
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1098
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1665
 msgid "# milliseconds between hostlist downloads"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1105
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1107
 #, c-format
 msgid "Have %u/%u connections.  Will consider downloading hostlist in %s\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1164
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1185
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1166
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1187
 #, fuzzy
 msgid "# active connections"
 msgstr "GNUnet Konfiguration"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1351
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1353
 #, fuzzy, c-format
 msgid "Loading saved hostlist entries from file `%s' \n"
 msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1356
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1358
 #, fuzzy, c-format
 msgid "Hostlist file `%s' does not exist\n"
 msgstr "Fehler beim Löschen des Pseudonyms `%s' (existiert nicht?).\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1365
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1367
 #, fuzzy, c-format
 msgid "Could not open file `%s' for reading to load hostlists: %s\n"
 msgstr ""
 "`%s' konnte nicht aufgelöst werden, um unsere IP-Adresse zu ermitteln: %s\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1399
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1401
 #, c-format
 msgid "%u hostlist URIs loaded from file\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1402
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1404
 msgid "# hostlist URIs read from file"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1448
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1450
 #, fuzzy, c-format
 msgid "Could not open file `%s' for writing to save hostlists: %s\n"
 msgstr ""
 "Datei `%s' konnte nicht zu `%s' umbenannt werden: Datei existiert bereits\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1455
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1457
 #, fuzzy, c-format
 msgid "Writing %u hostlist URIs to `%s'\n"
 msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1479
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1496
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1481
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1498
 #, c-format
 msgid "Error writing hostlist URIs to file `%s'\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1491
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1493
 msgid "# hostlist URIs written to file"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1593
-#: src/transport/plugin_transport_http_client.c:2272
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1595
+#: src/transport/plugin_transport_http_client.c:2274
 #, c-format
 msgid "Invalid proxy type: `%s', disabling proxy! Check configuration!\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1622
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1624
 msgid "Learning is enabled on this peer\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1636
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1638
 msgid "Learning is not enabled on this peer\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1649
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1651
 #, c-format
 msgid ""
 "Since learning is not enabled on this peer, hostlist file `%s' was removed\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:174
+#: src/hostlist/gnunet-daemon-hostlist_server.c:176
 #, fuzzy
 msgid "bytes in hostlist"
 msgstr "# bytes in der Datenbank"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:199
+#: src/hostlist/gnunet-daemon-hostlist_server.c:201
 msgid "expired addresses encountered"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:235
-#: src/hostlist/gnunet-daemon-hostlist_server.c:529
-#: src/peerinfo-tool/gnunet-peerinfo.c:383
-#: src/peerinfo-tool/gnunet-peerinfo.c:532
-#: src/topology/gnunet-daemon-topology.c:860
+#: src/hostlist/gnunet-daemon-hostlist_server.c:237
+#: src/hostlist/gnunet-daemon-hostlist_server.c:531
+#: src/peerinfo-tool/gnunet-peerinfo.c:385
+#: src/peerinfo-tool/gnunet-peerinfo.c:534
+#: src/topology/gnunet-daemon-topology.c:862
 #, fuzzy, c-format
 msgid "Error in communication with PEERINFO service: %s\n"
 msgstr "Informationen über andere GNUnet Knoten ausgeben."
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:259
+#: src/hostlist/gnunet-daemon-hostlist_server.c:261
 msgid "HELLOs without addresses encountered (ignored)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:276
+#: src/hostlist/gnunet-daemon-hostlist_server.c:278
 msgid "bytes not included in hostlist (size limit)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:380
+#: src/hostlist/gnunet-daemon-hostlist_server.c:382
 #, fuzzy, c-format
 msgid "Refusing `%s' request to hostlist server\n"
 msgstr "Fehler beim Senden einer `%s' Anfrage an den SMTP Server.\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:383
+#: src/hostlist/gnunet-daemon-hostlist_server.c:385
 msgid "hostlist requests refused (not HTTP GET)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:395
+#: src/hostlist/gnunet-daemon-hostlist_server.c:397
 #, c-format
 msgid "Refusing `%s' request with %llu bytes of upload data\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:399
+#: src/hostlist/gnunet-daemon-hostlist_server.c:401
 msgid "hostlist requests refused (upload data)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:406
+#: src/hostlist/gnunet-daemon-hostlist_server.c:408
 msgid "Could not handle hostlist request since I do not have a response yet\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:409
+#: src/hostlist/gnunet-daemon-hostlist_server.c:411
 msgid "hostlist requests refused (not ready)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:414
+#: src/hostlist/gnunet-daemon-hostlist_server.c:416
 msgid "Received request for our hostlist\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:416
+#: src/hostlist/gnunet-daemon-hostlist_server.c:418
 #, fuzzy
 msgid "hostlist requests processed"
 msgstr "# dht Anfragen weitergeleitet"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:464
+#: src/hostlist/gnunet-daemon-hostlist_server.c:466
 #, fuzzy
 msgid "# hostlist advertisements send"
 msgstr "# Bekanntmachungen von anderen übertragen"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:677
-#: src/transport/gnunet-service-transport.c:2813
+#: src/hostlist/gnunet-daemon-hostlist_server.c:679
+#: src/transport/gnunet-service-transport.c:2814
 #, fuzzy
 msgid "Could not access PEERINFO service.  Exiting.\n"
 msgstr "Auf die Namespace Informationen konnte nicht zugegriffen werden.\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:689
+#: src/hostlist/gnunet-daemon-hostlist_server.c:691
 #, fuzzy, c-format
 msgid "Invalid port number %llu.  Exiting.\n"
 msgstr "Ungültige Parameter. Abbruch.\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:701
+#: src/hostlist/gnunet-daemon-hostlist_server.c:703
 #, c-format
 msgid "Hostlist service starts on %s:%llu\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:716
+#: src/hostlist/gnunet-daemon-hostlist_server.c:718
 #, fuzzy, c-format
 msgid "Address to obtain hostlist: `%s'\n"
 msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:729
+#: src/hostlist/gnunet-daemon-hostlist_server.c:731
 msgid "BINDTOIP does not a valid IPv4 address! Ignoring BINDTOIPV4.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:746
+#: src/hostlist/gnunet-daemon-hostlist_server.c:748
 msgid "BINDTOIP does not a valid IPv4 address! Ignoring BINDTOIPV6.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:767
+#: src/hostlist/gnunet-daemon-hostlist_server.c:769
 #, fuzzy, c-format
 msgid "`%s' is not a valid IPv4 address! Ignoring BINDTOIPV4.\n"
 msgstr "»%s« ist keine gültige IP-Adresse.\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:787
+#: src/hostlist/gnunet-daemon-hostlist_server.c:789
 #, fuzzy, c-format
 msgid "`%s' is not a valid IPv6 address! Ignoring BINDTOIPV6.\n"
 msgstr "»%s« ist keine gültige IP-Adresse.\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:827
+#: src/hostlist/gnunet-daemon-hostlist_server.c:829
 #, fuzzy, c-format
 msgid "Could not start hostlist HTTP server on port %u\n"
 msgstr "Der Transportdienst auf Port %d konnte nicht gestartet werden.\n"
 
-#: src/identity/gnunet-identity.c:177
+#: src/identity/gnunet-identity.c:179
 #, fuzzy, c-format
 msgid "Failed to create ego: %s\n"
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
 
-#: src/identity/gnunet-identity.c:199
+#: src/identity/gnunet-identity.c:201
 #, fuzzy, c-format
 msgid "Failed to set default ego: %s\n"
 msgstr "Fehler beim Parsen der Gerätedaten von `%s' bei %s:%d.\n"
 
-#: src/identity/gnunet-identity.c:354
+#: src/identity/gnunet-identity.c:356
 msgid "create ego NAME"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:360
+#: src/identity/gnunet-identity.c:362
 msgid "delete ego NAME "
 msgstr ""
 
-#: src/identity/gnunet-identity.c:365
+#: src/identity/gnunet-identity.c:367
 msgid "display all egos"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:371
+#: src/identity/gnunet-identity.c:373
 msgid ""
 "set default identity to EGO for a subsystem SUBSYSTEM (use together with -s)"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:376
+#: src/identity/gnunet-identity.c:378
 msgid "run in monitor mode egos"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:382
+#: src/identity/gnunet-identity.c:384
 msgid ""
 "set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:396
+#: src/identity/gnunet-identity.c:398
 msgid "Maintain egos"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:389
+#: src/identity/gnunet-service-identity.c:391
 msgid "no default known"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:414
+#: src/identity/gnunet-service-identity.c:416
 msgid "default configured, but ego unknown (internal error)"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:505
-#: src/identity/gnunet-service-identity.c:788
-#: src/identity/gnunet-service-identity.c:916
+#: src/identity/gnunet-service-identity.c:507
+#: src/identity/gnunet-service-identity.c:790
+#: src/identity/gnunet-service-identity.c:918
 #, fuzzy, c-format
 msgid "Failed to write subsystem default identifier map to `%s'.\n"
 msgstr "Fehler beim Aktualisieren der Daten des Moduls `%s'\n"
 
-#: src/identity/gnunet-service-identity.c:513
+#: src/identity/gnunet-service-identity.c:515
 msgid "Unknown ego specified for service (internal error)"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:608
+#: src/identity/gnunet-service-identity.c:610
 msgid "identifier already in use for another ego"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:763
+#: src/identity/gnunet-service-identity.c:765
 msgid "target name already exists"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:806
-#: src/identity/gnunet-service-identity.c:934
+#: src/identity/gnunet-service-identity.c:808
+#: src/identity/gnunet-service-identity.c:936
 msgid "no matching ego found"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:969
+#: src/identity/gnunet-service-identity.c:971
 #, fuzzy, c-format
 msgid "Failed to parse ego information in `%s'\n"
 msgstr "Fehler beim Parsen der Gerätedaten von `%s' bei %s:%d.\n"
 
-#: src/identity/gnunet-service-identity.c:1027
+#: src/identity/gnunet-service-identity.c:1029
 #, fuzzy, c-format
 msgid "Failed to parse subsystem identity configuration file `%s'\n"
 msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':"
 
-#: src/identity/gnunet-service-identity.c:1037
+#: src/identity/gnunet-service-identity.c:1039
 #, fuzzy, c-format
 msgid "Failed to create directory `%s' for storing egos\n"
 msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n"
 
-#: src/json/json.c:121
+#: src/json/json.c:123
 #, fuzzy, c-format
 msgid "Failed to parse JSON in option `%s': %s (%s)\n"
 msgstr "Datei wurde als `%s' gespeichert.\n"
 
-#: src/multicast/gnunet-multicast.c:46 src/multicast/gnunet-multicast.c:70
-msgid "This command doesn't do anything yet."
-msgstr ""
-
-#: src/my/my.c:194 src/my/my.c:213
+#: src/my/my.c:196 src/my/my.c:215
 #, fuzzy, c-format
 msgid "%s failed at %s:%d with error: %s\n"
 msgstr "»%s« schlug bei %s:%d mit dem Fehler %s fehl\n"
 
-#: src/mysql/mysql.c:178
+#: src/mysql/mysql.c:180
 #, c-format
 msgid "Trying to use file `%s' for MySQL configuration.\n"
 msgstr "Versuchen, Datei »%s« für MySQL-Konfiguration zu verwenden.\n"
 
-#: src/mysql/mysql.c:185
+#: src/mysql/mysql.c:187
 #, fuzzy, c-format
 msgid "Could not access file `%s': %s\n"
 msgstr "`%s' konnte nicht aufgelöst werden: %s\n"
 
-#: src/namecache/gnunet-namecache.c:105
+#: src/namecache/gnunet-namecache.c:107
 #, fuzzy, c-format
 msgid "No records found for `%s'"
 msgstr "Dienst `%s' konnte nicht ordentlich entladen werden!\n"
 
-#: src/namecache/gnunet-namecache.c:120 src/namestore/gnunet-namestore.c:424
+#: src/namecache/gnunet-namecache.c:122 src/namestore/gnunet-namestore.c:454
 #, c-format
 msgid "\tCorrupt or unsupported record of type %u\n"
 msgstr ""
 
-#: src/namecache/gnunet-namecache.c:181
+#: src/namecache/gnunet-namecache.c:183
 #, fuzzy, c-format
 msgid "You must specify which zone should be accessed\n"
 msgstr "Gibt an, welcher TRANSPORT getestet werden soll"
 
-#: src/namecache/gnunet-namecache.c:191
+#: src/namecache/gnunet-namecache.c:193
 #, fuzzy, c-format
 msgid "Invalid public key for zone `%s'\n"
 msgstr "Ungültiger Parameter: `%s'\n"
 
-#: src/namecache/gnunet-namecache.c:199
+#: src/namecache/gnunet-namecache.c:201
 #, fuzzy, c-format
 msgid "You must specify a name\n"
 msgstr "Sie müssen einen Empfänger angeben!\n"
 
-#: src/namecache/gnunet-namecache.c:230 src/namestore/gnunet-namestore.c:1290
+#: src/namecache/gnunet-namecache.c:232 src/namestore/gnunet-namestore.c:1575
 msgid "name of the record to add/delete/display"
 msgstr ""
 
-#: src/namecache/gnunet-namecache.c:236
+#: src/namecache/gnunet-namecache.c:238
 #, fuzzy
 msgid "spezifies the public key of the zone to look in"
 msgstr "Die Priorität des Inhalts angeben"
 
-#: src/namecache/gnunet-namecache.c:248 src/namestore/gnunet-namestore.c:1342
+#: src/namecache/gnunet-namecache.c:250 src/namestore/gnunet-namestore.c:1632
 #, fuzzy
 msgid "GNUnet zone manipulation tool"
 msgstr "GNUnet Konfiguration"
 
-#: src/namecache/namecache_api.c:294
+#: src/namecache/namecache_api.c:296
 msgid "Namecache failed to cache block"
 msgstr ""
 
-#: src/namecache/namecache_api.c:381
+#: src/namecache/namecache_api.c:383
 #, fuzzy
 msgid "Error communicating with namecache service"
 msgstr "Informationen über andere GNUnet Knoten ausgeben."
 
-#: src/namecache/plugin_namecache_flat.c:119
-#: src/namecache/plugin_namecache_flat.c:253
-#: src/namestore/plugin_namestore_heap.c:146
-#: src/namestore/plugin_namestore_heap.c:393
-#: src/peerstore/plugin_peerstore_flat.c:377
-#: src/peerstore/plugin_peerstore_flat.c:536
+#: src/namecache/plugin_namecache_flat.c:121
+#: src/namecache/plugin_namecache_flat.c:255
+#: src/namestore/plugin_namestore_heap.c:148
+#: src/namestore/plugin_namestore_heap.c:395
+#: src/peerstore/plugin_peerstore_flat.c:379
+#: src/peerstore/plugin_peerstore_flat.c:538
 #, 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_heap.c:157
-#: src/peerstore/plugin_peerstore_flat.c:392
+#: src/namecache/plugin_namecache_flat.c:132
+#: src/namestore/plugin_namestore_heap.c:159
+#: src/peerstore/plugin_peerstore_flat.c:394
 #, fuzzy, c-format
 msgid "Unable to get filesize: %s.\n"
 msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
 
-#: src/namecache/plugin_namecache_flat.c:149
-#: src/namestore/plugin_namestore_heap.c:170
-#: src/peerstore/plugin_peerstore_flat.c:404
+#: src/namecache/plugin_namecache_flat.c:151
+#: src/namestore/plugin_namestore_heap.c:172
+#: src/peerstore/plugin_peerstore_flat.c:406
 #, fuzzy, c-format
 msgid "Unable to read file: %s.\n"
 msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
 
-#: src/namecache/plugin_namecache_flat.c:408
+#: src/namecache/plugin_namecache_flat.c:410
 #, fuzzy
 msgid "flat plugin running\n"
 msgstr "Sqlite-Datenbank läuft\n"
 
-#: src/namestore/gnunet-namestore.c:311
+#: src/namecache/plugin_namecache_sqlite.c:183
+#: src/namecache/plugin_namecache_sqlite.c:197
+#: src/namestore/plugin_namestore_sqlite.c:219
+#: src/namestore/plugin_namestore_sqlite.c:230
+#, fuzzy, c-format
+msgid "Failed to setup database at `%s'\n"
+msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
+
+#: src/namestore/gnunet-namestore.c:341
 #, c-format
 msgid "Adding record failed: %s\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:341
+#: src/namestore/gnunet-namestore.c:371
 #, c-format
 msgid "Deleting record failed, record does not exist%s%s\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:348
+#: src/namestore/gnunet-namestore.c:378
 #, c-format
 msgid "Deleting record failed%s%s\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:628 src/namestore/gnunet-namestore.c:636
+#: src/namestore/gnunet-namestore.c:660 src/namestore/gnunet-namestore.c:668
 #, c-format
 msgid "A %s record exists already under `%s', no other records can be added.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:650 src/namestore/gnunet-namestore.c:662
+#: src/namestore/gnunet-namestore.c:682 src/namestore/gnunet-namestore.c:694
 #, c-format
 msgid "Records already exist under `%s', cannot add `%s' record.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:675
+#: src/namestore/gnunet-namestore.c:707
 #, c-format
 msgid ""
 "Non-GNS2DNS records already exist under `%s', cannot add GNS2DNS record.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:809
+#: src/namestore/gnunet-namestore.c:837
 #, c-format
 msgid "There are no records under label `%s' that could be deleted.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:850
+#: src/namestore/gnunet-namestore.c:878
 #, c-format
 msgid ""
 "There are no records under label `%s' that match the request for deletion.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:902
+#: src/namestore/gnunet-namestore.c:965
+#, fuzzy, c-format
+msgid "Failed to replace records: %s\n"
+msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n"
+
+#: src/namestore/gnunet-namestore.c:1009
 #, c-format
 msgid "No options given\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:921 src/namestore/gnunet-namestore.c:930
-#: src/namestore/gnunet-namestore.c:949 src/namestore/gnunet-namestore.c:972
-#: src/namestore/gnunet-namestore.c:1026
+#: src/namestore/gnunet-namestore.c:1032 src/namestore/gnunet-namestore.c:1065
+#: src/namestore/gnunet-namestore.c:1074 src/namestore/gnunet-namestore.c:1093
+#: src/namestore/gnunet-namestore.c:1116 src/namestore/gnunet-namestore.c:1148
 #, fuzzy, c-format
 msgid "Missing option `%s' for operation `%s'\n"
 msgstr "Unbekannte Operation `%s'\n"
 
-#: src/namestore/gnunet-namestore.c:922 src/namestore/gnunet-namestore.c:931
-#: src/namestore/gnunet-namestore.c:950 src/namestore/gnunet-namestore.c:974
+#: src/namestore/gnunet-namestore.c:1033
+msgid "replace"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1066 src/namestore/gnunet-namestore.c:1075
+#: src/namestore/gnunet-namestore.c:1094 src/namestore/gnunet-namestore.c:1118
 msgid "add"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:940
+#: src/namestore/gnunet-namestore.c:1084
 #, fuzzy, c-format
 msgid "Unsupported type `%s'\n"
 msgstr "Kommando `%s' wird nicht unterstützt. Vorgang wird abgebrochen.\n"
 
-#: src/namestore/gnunet-namestore.c:962
+#: src/namestore/gnunet-namestore.c:1106
 #, fuzzy, c-format
 msgid "Value `%s' invalid for record type `%s'\n"
 msgstr "%s: Symbolwert `%s' ist ungültig für %s\n"
 
-#: src/namestore/gnunet-namestore.c:1007
+#: src/namestore/gnunet-namestore.c:1129
 #, fuzzy, c-format
 msgid "Invalid time format `%s'\n"
 msgstr "Ungültiger Parameter: `%s'\n"
 
-#: src/namestore/gnunet-namestore.c:1027
+#: src/namestore/gnunet-namestore.c:1149
 msgid "del"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1070
+#: src/namestore/gnunet-namestore.c:1192
 #, c-format
 msgid "Invalid public key for reverse lookup `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1099
-#: src/peerinfo-tool/gnunet-peerinfo.c:773
+#: src/namestore/gnunet-namestore.c:1221
+#: src/peerinfo-tool/gnunet-peerinfo.c:775
 #, fuzzy, c-format
 msgid "Invalid URI `%s'\n"
 msgstr "Ungültiger Parameter: `%s'\n"
 
-#: src/namestore/gnunet-namestore.c:1134
+#: src/namestore/gnunet-namestore.c:1249
 #, fuzzy, c-format
 msgid "Invalid nick `%s'\n"
 msgstr "Ungültiger Parameter: `%s'\n"
 
-#: src/namestore/gnunet-namestore.c:1174
+#: src/namestore/gnunet-namestore.c:1289
 #, c-format
 msgid "No default ego configured in identity service\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1238
+#: src/namestore/gnunet-namestore.c:1341
+#, c-format
+msgid "Superfluous command line arguments (starting with `%s') ignored\n"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1357
 #, fuzzy, c-format
 msgid "Cannot connect to identity service\n"
 msgstr "Verbindung zu %u.%u.%u.%u:%u fehlgeschlagen: %s\n"
 
-#: src/namestore/gnunet-namestore.c:1263
+#: src/namestore/gnunet-namestore.c:1407
+msgid "Empty record line argument is not allowed.\n"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1423
+#, c-format
+msgid "Invalid expiration time `%s' (must be without unit)\n"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1435 src/namestore/gnunet-namestore.c:1453
+#: src/namestore/gnunet-namestore.c:1470
+#, fuzzy, c-format
+msgid "Missing entries in record line `%s'.\n"
+msgstr "Anwendung `%s' konnte nicht initialisiert werden.\n"
+
+#: src/namestore/gnunet-namestore.c:1444
+#, fuzzy, c-format
+msgid "Unknown record type `%s'\n"
+msgstr "Unbekannter Befehl »%s«\n"
+
+#: src/namestore/gnunet-namestore.c:1484
+#, fuzzy, c-format
+msgid "Invalid record data for type %s: `%s'.\n"
+msgstr "Ungültiges Format für IP: »%s«\n"
+
+#: src/namestore/gnunet-namestore.c:1548
 msgid "add record"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1267
+#: src/namestore/gnunet-namestore.c:1552
 msgid "delete record"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1271
+#: src/namestore/gnunet-namestore.c:1556
 msgid "display records"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1276
+#: src/namestore/gnunet-namestore.c:1561
 msgid ""
 "expiration time for record to use (for adding only), \"never\" is possible"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1281
+#: src/namestore/gnunet-namestore.c:1566
 msgid "set the desired nick name for the zone"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1285
+#: src/namestore/gnunet-namestore.c:1570
 msgid "monitor changes in the namestore"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1295
+#: src/namestore/gnunet-namestore.c:1580
 msgid "determine our name for the given PKEY"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1300
+#: src/namestore/gnunet-namestore.c:1585
+msgid ""
+"set record set to values given by (possibly multiple) RECORDLINES; can be "
+"specified multiple times"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1590
 msgid "type of the record to add/delete/display"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1305
+#: src/namestore/gnunet-namestore.c:1595
 msgid "URI to import into our zone"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1310
+#: src/namestore/gnunet-namestore.c:1600
 msgid "value of the record to add/delete"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1314
+#: src/namestore/gnunet-namestore.c:1604
 msgid "create or list public record"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1318
+#: src/namestore/gnunet-namestore.c:1608
 msgid ""
 "create shadow record (only valid if all other records of the same type have "
 "expired"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1323
+#: src/namestore/gnunet-namestore.c:1613
 msgid "name of the ego controlling the zone"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:547
+#: src/namestore/gnunet-namestore-fcfsd.c:549
 #, fuzzy, c-format
 msgid "Unsupported form value `%s'\n"
 msgstr "Kommando `%s' wird nicht unterstützt. Vorgang wird abgebrochen.\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:574
+#: src/namestore/gnunet-namestore-fcfsd.c:576
 #, fuzzy, c-format
 msgid "Failed to create record for domain `%s': %s\n"
 msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:595
+#: src/namestore/gnunet-namestore-fcfsd.c:597
 msgid "Error when mapping zone to name\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:627
+#: src/namestore/gnunet-namestore-fcfsd.c:629
 #, c-format
 msgid "Found existing name `%s' for the given key\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:687
+#: src/namestore/gnunet-namestore-fcfsd.c:689
 #, c-format
 msgid "Found %u existing records for domain `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:775
+#: src/namestore/gnunet-namestore-fcfsd.c:777
 #, fuzzy, c-format
 msgid "Failed to create page for `%s'\n"
 msgstr "Fehler beim Aktualisieren der Daten des Moduls `%s'\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:794
+#: src/namestore/gnunet-namestore-fcfsd.c:796
 #, fuzzy, c-format
 msgid "Failed to setup post processor for `%s'\n"
 msgstr "Fehler beim Aktualisieren der Daten des Moduls `%s'\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:830
+#: src/namestore/gnunet-namestore-fcfsd.c:832
 msgid "Domain name must not contain `.'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:839
+#: src/namestore/gnunet-namestore-fcfsd.c:841
 msgid "Domain name must not contain `+'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1069
+#: src/namestore/gnunet-namestore-fcfsd.c:1071
 msgid "No ego configured for `fcfsd` subsystem\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1097
+#: src/namestore/gnunet-namestore-fcfsd.c:1099
 #, fuzzy
 msgid "Failed to start HTTP server\n"
 msgstr "Fehler beim Senden einer `%s' Anfrage an den SMTP Server.\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1145
+#: src/namestore/gnunet-namestore-fcfsd.c:1147
 #, fuzzy
 msgid "Failed to connect to identity\n"
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1171
+#: src/namestore/gnunet-namestore-fcfsd.c:1173
 msgid "name of the zone that is to be managed by FCFSD"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1190
+#: src/namestore/gnunet-namestore-fcfsd.c:1192
 msgid "GNU Name System First Come First Serve name registration service"
 msgstr ""
 
-#: src/namestore/gnunet-service-namestore.c:749
+#: src/namestore/gnunet-service-namestore.c:900
 #, c-format
 msgid "Failed to replicate block in namecache: %s\n"
 msgstr ""
 
-#: src/namestore/gnunet-zoneimport.c:2036
+#: src/namestore/gnunet-zoneimport.c:2038
 msgid "size to use for the main hash map"
 msgstr ""
 
-#: src/namestore/gnunet-zoneimport.c:2041
+#: src/namestore/gnunet-zoneimport.c:2043
 msgid "minimum expiration time we assume for imported records"
 msgstr ""
 
-#: src/namestore/namestore_api.c:389
+#: src/namestore/namestore_api.c:391
 msgid "Namestore failed to store record\n"
 msgstr ""
 
-#: src/namestore/plugin_namestore_heap.c:776
+#: src/namestore/plugin_namestore_heap.c:778
 #, fuzzy
 msgid "heap file database running\n"
 msgstr "Sqlite-Datenbank läuft\n"
 
-#: src/namestore/plugin_namestore_sqlite.c:216
-#: src/namestore/plugin_namestore_sqlite.c:227
-#, fuzzy, c-format
-msgid "Failed to setup database at `%s'\n"
-msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
-
-#: src/nat-auto/gnunet-nat-auto.c:191
+#: src/nat-auto/gnunet-nat-auto.c:193
 #, fuzzy
 msgid "Suggested configuration changes:\n"
 msgstr ""
 "Einen Wert aus der Konfigurationsdatei auf der Standardausgabe ausgeben"
 
-#: src/nat-auto/gnunet-nat-auto.c:217
+#: src/nat-auto/gnunet-nat-auto.c:219
 #, fuzzy, c-format
 msgid "Failed to write configuration to `%s'\n"
 msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':"
 
-#: src/nat-auto/gnunet-nat-auto.c:224
+#: src/nat-auto/gnunet-nat-auto.c:226
 #, fuzzy, c-format
 msgid "Wrote updated configuration to `%s'\n"
 msgstr "Konfigurationsdatei `%s' konnte nicht geparst werden.\n"
 
-#: src/nat-auto/gnunet-nat-auto.c:343
+#: src/nat-auto/gnunet-nat-auto.c:345
 #, fuzzy
 msgid "run autoconfiguration"
 msgstr "# Freunde in Konfiguration"
 
-#: src/nat-auto/gnunet-nat-auto.c:349
+#: src/nat-auto/gnunet-nat-auto.c:351
 msgid "section name providing the configuration for the adapter"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:354 src/nat/gnunet-nat.c:451
+#: src/nat-auto/gnunet-nat-auto.c:356 src/nat/gnunet-nat.c:459
 msgid "use TCP"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:359 src/nat/gnunet-nat.c:456
+#: src/nat-auto/gnunet-nat-auto.c:361 src/nat/gnunet-nat.c:464
 msgid "use UDP"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:364
+#: src/nat-auto/gnunet-nat-auto.c:366
 msgid "write configuration file (for autoconfiguration)"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:376
+#: src/nat-auto/gnunet-nat-auto.c:378
 msgid "GNUnet NAT traversal autoconfiguration"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto_legacy.c:401
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:679
-#: src/nat-auto/nat_auto_api_test.c:403
+#: src/nat-auto/gnunet-nat-auto_legacy.c:403
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:681
+#: src/nat-auto/nat_auto_api_test.c:409
 #, fuzzy
 msgid "Failed to connect to `gnunet-nat-server'\n"
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
 
-#: src/nat-auto/gnunet-nat-auto_legacy.c:516
+#: src/nat-auto/gnunet-nat-auto_legacy.c:518
 #, c-format
 msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto_legacy.c:566
-#: src/nat-auto/nat_auto_api_test.c:569
+#: src/nat-auto/gnunet-nat-auto_legacy.c:568
+#: src/nat-auto/nat_auto_api_test.c:575
 #, fuzzy
 msgid "NAT test failed to start NAT library\n"
 msgstr "Fehler beim Senden einer `%s' Anfrage an den SMTP Server.\n"
 
-#: src/nat-auto/gnunet-service-nat-auto.c:340
+#: src/nat-auto/gnunet-service-nat-auto.c:342
 #, fuzzy
 msgid "UPnP client `upnpc` command not found, disabling UPnP\n"
 msgstr "Kommando `%s' wurde nicht gefunden!\n"
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:383
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:385
 msgid "NAT traversal with ICMP Server succeeded.\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:384
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:386
 msgid "NAT traversal with ICMP Server failed.\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:403
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:405
 msgid "Testing connection reversal with ICMP server.\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:435
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:437
 #, fuzzy, c-format
 msgid "Detected external IP `%s'\n"
 msgstr "Ungültiger RPC `%s' empfangen.\n"
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:570
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:572
 msgid "This system has a global IPv6 address, setting IPv6 to supported.\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:588
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:590
 #, c-format
 msgid "Detected internal network address `%s'.\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:722
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:724
 msgid "upnpc found, enabling its use\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:723
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:725
 #, fuzzy
 msgid "upnpc not found\n"
 msgstr "Kommando `%s' wurde nicht gefunden!\n"
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:760
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:762
 msgid "test_icmp_server not possible, as we have no public IPv4 address\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:772
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:832
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:774
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:834
 msgid "test_icmp_server not possible, as we are not behind NAT\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:784
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:844
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:786
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:846
 msgid "No working gnunet-helper-nat-server found\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:821
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:823
 msgid "test_icmp_client not possible, as we have no internal IPv4 address\n"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:74
+#: src/nat-auto/nat_auto_api.c:76
 msgid "Operation Successful"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:76
+#: src/nat-auto/nat_auto_api.c:78
 msgid "IPC failure"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:78
+#: src/nat-auto/nat_auto_api.c:80
 msgid "Failure in network subsystem, check permissions."
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:80
+#: src/nat-auto/nat_auto_api.c:82
 msgid "Encountered timeout while performing operation"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:82
+#: src/nat-auto/nat_auto_api.c:84
 msgid "detected that we are offline"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:84
+#: src/nat-auto/nat_auto_api.c:86
 #, fuzzy
 msgid "`upnpc` command not found"
 msgstr "Kommando `%s' wurde nicht gefunden!\n"
 
-#: src/nat-auto/nat_auto_api.c:86
+#: src/nat-auto/nat_auto_api.c:88
 #, fuzzy
 msgid "Failed to run `upnpc` command"
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
 
-#: src/nat-auto/nat_auto_api.c:88
+#: src/nat-auto/nat_auto_api.c:90
 msgid "`upnpc' command took too long, process killed"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:90
+#: src/nat-auto/nat_auto_api.c:92
 msgid "`upnpc' command failed to establish port mapping"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:92
+#: src/nat-auto/nat_auto_api.c:94
 msgid "`external-ip' command not found"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:94
+#: src/nat-auto/nat_auto_api.c:96
 #, fuzzy
 msgid "Failed to run `external-ip` command"
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
 
-#: src/nat-auto/nat_auto_api.c:96
+#: src/nat-auto/nat_auto_api.c:98
 #, fuzzy
 msgid "`external-ip' command output invalid"
 msgstr "Kommando `%s' wurde nicht gefunden!\n"
 
-#: src/nat-auto/nat_auto_api.c:98
+#: src/nat-auto/nat_auto_api.c:100
 msgid "no valid address was returned by `external-ip'"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:100
+#: src/nat-auto/nat_auto_api.c:102
 #, fuzzy
 msgid "Could not determine interface with internal/local network address"
 msgstr "Öffentliche IP-Adresse konnte nicht ermittelt werden.\n"
 
-#: src/nat-auto/nat_auto_api.c:102
+#: src/nat-auto/nat_auto_api.c:104
 msgid "No functioning gnunet-helper-nat-server installation found"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:104
+#: src/nat-auto/nat_auto_api.c:106
 msgid "NAT test could not be initialized"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:106
+#: src/nat-auto/nat_auto_api.c:108
 msgid "NAT test timeout reached"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:108
+#: src/nat-auto/nat_auto_api.c:110
 msgid "could not register NAT"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:110
+#: src/nat-auto/nat_auto_api.c:112
 msgid "No working gnunet-helper-nat-client installation found"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api_test.c:475
+#: src/nat-auto/nat_auto_api_test.c:481
 #, fuzzy, c-format
 msgid "Failed to find valid PORT in section `%s'\n"
 msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
 
-#: src/nat-auto/nat_auto_api_test.c:520
+#: src/nat-auto/nat_auto_api_test.c:526
 #, fuzzy, c-format
 msgid "Failed to create socket bound to `%s' for NAT test: %s\n"
 msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n"
 
-#: src/nat/gnunet-nat.c:429
+#: src/nat/gnunet-nat.c:437
 msgid "which IP and port are we locally using to bind/listen to"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:435
+#: src/nat/gnunet-nat.c:443
 msgid "which remote IP and port should be asked for connection reversal"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:441
+#: src/nat/gnunet-nat.c:449
 msgid ""
 "name of configuration section to find additional options, such as manual "
 "host punching data"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:446
+#: src/nat/gnunet-nat.c:454
 msgid "enable STUN processing"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:461
+#: src/nat/gnunet-nat.c:469
 msgid "watch for connection reversal requests"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:473
+#: src/nat/gnunet-nat.c:481
 msgid "GNUnet NAT traversal autoconfigure daemon"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1337
+#: src/nat/gnunet-service-nat.c:1339
 #, c-format
 msgid "Malformed punched hole specification `%s' (lacks port)\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1347
+#: src/nat/gnunet-service-nat.c:1349
 #, c-format
 msgid "Invalid port number in punched hole specification `%s' (lacks port)\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1363
+#: src/nat/gnunet-service-nat.c:1365
 #, c-format
 msgid "Malformed punched hole specification `%s' (lacks `]')\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1374
+#: src/nat/gnunet-service-nat.c:1376
 #, c-format
 msgid "Malformed punched hole specification `%s' (IPv6 address invalid)"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1839
+#: src/nat/gnunet-service-nat.c:1841
 #, fuzzy
 msgid "Connection reversal request failed\n"
 msgstr " Verbindung fehlgeschlagen\n"
 
-#: src/nat/gnunet-service-nat.c:1912
+#: src/nat/gnunet-service-nat.c:1914
 msgid ""
 "UPnP enabled in configuration, but UPnP client `upnpc` command not found, "
 "disabling UPnP\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat_helper.c:184
+#: src/nat/gnunet-service-nat_helper.c:186
 #, c-format
 msgid "gnunet-helper-nat-server generated malformed address `%s'\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat_helper.c:271
+#: src/nat/gnunet-service-nat_helper.c:273
 #, fuzzy, c-format
 msgid "Failed to start %s\n"
 msgstr "Fehler beim Starten der Collection.\n"
 
-#: src/nat/gnunet-service-nat_mini.c:194
+#: src/nat/gnunet-service-nat_mini.c:196
 #, fuzzy
 msgid "`external-ip' command not found\n"
 msgstr "Kommando `%s' wurde nicht gefunden!\n"
 
-#: src/nat/gnunet-service-nat_mini.c:654
+#: src/nat/gnunet-service-nat_mini.c:656
 #, fuzzy
 msgid "`upnpc' command not found\n"
 msgstr "Kommando `%s' wurde nicht gefunden!\n"
 
-#: src/nse/gnunet-nse.c:120
+#: src/nse/gnunet-nse.c:122
 msgid "Show network size estimates from NSE service."
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:847
+#: src/nse/gnunet-nse-profiler.c:849
 msgid "limit to the number of connections to NSE services, 0 for none"
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:852
+#: src/nse/gnunet-nse-profiler.c:854
 msgid "name of the file for writing connection information and statistics"
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:864
+#: src/nse/gnunet-nse-profiler.c:866
 msgid "name of the file for writing the main results"
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:871
+#: src/nse/gnunet-nse-profiler.c:873
 msgid "Number of peers to run in each round, separated by commas"
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:882
+#: src/nse/gnunet-nse-profiler.c:884
 msgid "delay between rounds"
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:891
+#: src/nse/gnunet-nse-profiler.c:893
 msgid "Measure quality and performance of the NSE service."
 msgstr ""
 
-#: src/nse/gnunet-service-nse.c:1532
-#: src/revocation/gnunet-service-revocation.c:841 src/util/gnunet-scrypt.c:274
+#: src/nse/gnunet-service-nse.c:1534
+#: src/revocation/gnunet-service-revocation.c:843 src/util/gnunet-scrypt.c:276
 msgid "Value is too large.\n"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:176
+#: src/peerinfo/gnunet-service-peerinfo.c:178
 #, fuzzy, c-format
 msgid "Removing expired address of transport `%s'\n"
 msgstr "Verfügbare(r) Transport(e): %s\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:311
+#: src/peerinfo/gnunet-service-peerinfo.c:313
 #, fuzzy, c-format
 msgid "Failed to parse HELLO in file `%s': %s\n"
 msgstr "Datei wurde als `%s' gespeichert.\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:332
-#: src/peerinfo/gnunet-service-peerinfo.c:363
+#: src/peerinfo/gnunet-service-peerinfo.c:334
+#: src/peerinfo/gnunet-service-peerinfo.c:365
 #, fuzzy, c-format
 msgid "Failed to parse HELLO in file `%s'\n"
 msgstr "Datei wurde als `%s' gespeichert.\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:447
+#: src/peerinfo/gnunet-service-peerinfo.c:449
 msgid "# peers known"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:490
+#: src/peerinfo/gnunet-service-peerinfo.c:492
 #, c-format
 msgid ""
 "File `%s' in directory `%s' does not match naming convention. Removed.\n"
@@ -5571,1122 +5604,884 @@ msgstr ""
 "Die Datei »%s« im Verzeichnis »%s« entspricht nicht der Namenskonvention. "
 "Die Datei wurde entfernt.\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:657
+#: src/peerinfo/gnunet-service-peerinfo.c:659
 #, fuzzy, c-format
 msgid "Scanning directory `%s'\n"
 msgstr "==> Verzeichnis `%s':\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:665
+#: src/peerinfo/gnunet-service-peerinfo.c:667
 #, fuzzy, c-format
 msgid "Still no peers found in `%s'!\n"
 msgstr "Dienst `%s' konnte nicht ordentlich entladen werden!\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:1098
+#: src/peerinfo/gnunet-service-peerinfo.c:1100
 #, fuzzy, c-format
 msgid "Cleaning up directory `%s'\n"
 msgstr "==> Verzeichnis `%s':\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:1436
+#: src/peerinfo/gnunet-service-peerinfo.c:1438
 #, c-format
 msgid "Importing HELLOs from `%s'\n"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:1449
+#: src/peerinfo/gnunet-service-peerinfo.c:1451
 msgid "Skipping import of included HELLOs\n"
 msgstr ""
 
-#: src/peerinfo/peerinfo_api.c:218
+#: src/peerinfo/peerinfo_api.c:220
 #, fuzzy
 msgid "Failed to receive response from `PEERINFO' service."
 msgstr "Fehler beim Empfangen der Antwort von gnunetd auf die `%s' Nachricht\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:237
+#: src/peerinfo-tool/gnunet-peerinfo.c:239
 #, fuzzy, c-format
 msgid "%sPeer `%s'\n"
 msgstr "Ich bin Peer `%s'.\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:244
+#: src/peerinfo-tool/gnunet-peerinfo.c:246
 #, c-format
 msgid "\tExpires: %s \t %s\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:297
-#: src/rest-plugins/plugin_rest_peerinfo.c:499
+#: src/peerinfo-tool/gnunet-peerinfo.c:299
+#: src/rest-plugins/plugin_rest_peerinfo.c:501
 #, fuzzy, c-format
 msgid "Failure: Cannot convert address to string for peer `%s'\n"
 msgstr "Adresse des Knotens `%s' konnte nicht ermittelt werden.\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:464
+#: src/peerinfo-tool/gnunet-peerinfo.c:466
 #, fuzzy, c-format
 msgid "Failure: Received invalid %s\n"
 msgstr "Ungültiger RPC `%s' empfangen.\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:478
+#: src/peerinfo-tool/gnunet-peerinfo.c:480
 #, c-format
 msgid "Failed to write HELLO with %u bytes to file `%s'\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:497
+#: src/peerinfo-tool/gnunet-peerinfo.c:499
 #, c-format
 msgid "Wrote %s HELLO containing %u addresses with %u bytes to file `%s'\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:797
+#: src/peerinfo-tool/gnunet-peerinfo.c:799
 #, c-format
 msgid "I am peer `%s'.\n"
 msgstr "Ich bin Knoten »%s«.\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:841
+#: src/peerinfo-tool/gnunet-peerinfo.c:843
 msgid "don't resolve host names"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:846
+#: src/peerinfo-tool/gnunet-peerinfo.c:848
 msgid "output only the identity strings"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:850
+#: src/peerinfo-tool/gnunet-peerinfo.c:852
 msgid "include friend-only information"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:855
+#: src/peerinfo-tool/gnunet-peerinfo.c:857
 msgid "output our own identity only"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:860
+#: src/peerinfo-tool/gnunet-peerinfo.c:862
 msgid "list all known peers"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:866
+#: src/peerinfo-tool/gnunet-peerinfo.c:868
 msgid "dump hello to file"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:871
+#: src/peerinfo-tool/gnunet-peerinfo.c:873
 msgid "also output HELLO uri(s)"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:877
+#: src/peerinfo-tool/gnunet-peerinfo.c:879
 msgid "add given HELLO uri to the database"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:895
+#: src/peerinfo-tool/gnunet-peerinfo.c:897
 #, fuzzy
 msgid "Print information about peers."
 msgstr "Informationen über andere GNUnet Knoten ausgeben."
 
-#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:103
-#: src/transport/gnunet-service-transport_plugins.c:166
+#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:105
+#: src/transport/gnunet-service-transport_plugins.c:168
 #, fuzzy, c-format
 msgid "Starting transport plugins `%s'\n"
 msgstr "Teste Transport(e) %s\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:107
-#: src/transport/gnunet-service-transport_plugins.c:171
+#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:109
+#: src/transport/gnunet-service-transport_plugins.c:173
 #, fuzzy, c-format
 msgid "Loading `%s' transport plugin\n"
 msgstr "Teste Transport(e) %s\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:127
-#: src/transport/gnunet-service-transport_plugins.c:206
+#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:129
+#: src/transport/gnunet-service-transport_plugins.c:208
 #, fuzzy, c-format
 msgid "Failed to load transport plugin for `%s'\n"
 msgstr "Anwendung `%s' konnte nicht initialisiert werden.\n"
 
-#: src/peerstore/gnunet-peerstore.c:89
+#: src/peerstore/gnunet-peerstore.c:91
 msgid "peerstore"
 msgstr ""
 
-#: src/peerstore/gnunet-service-peerstore.c:596
+#: src/peerstore/gnunet-service-peerstore.c:598
 #, fuzzy, c-format
 msgid "Could not load database backend `%s'\n"
 msgstr "`%s' konnte nicht aufgelöst werden: %s\n"
 
-#: src/peerstore/peerstore_api.c:348
-msgid "timeout"
-msgstr ""
-
-#: src/peerstore/peerstore_api.c:564 src/peerstore/peerstore_api.c:613
+#: src/peerstore/peerstore_api.c:532 src/peerstore/peerstore_api.c:581
 msgid "Unexpected iteration response, this should not happen.\n"
 msgstr ""
 
-#: src/peerstore/peerstore_api.c:627
+#: src/peerstore/peerstore_api.c:595
 #, fuzzy
 msgid "Received a malformed response from service."
 msgstr "Beschädigte Antwort auf `%s' von Knoten `%s' empfangen.\n"
 
-#: src/peerstore/peerstore_api.c:776
+#: src/peerstore/peerstore_api.c:731
 msgid "Received a watch result for a non existing watch.\n"
 msgstr ""
 
-#: src/peerstore/plugin_peerstore_sqlite.c:451
-#: src/psycstore/plugin_psycstore_sqlite.c:280
+#: src/peerstore/plugin_peerstore_sqlite.c:453
 #, c-format
 msgid ""
 "Error executing SQL query: %s\n"
 "  %s\n"
 msgstr ""
 
-#: src/peerstore/plugin_peerstore_sqlite.c:486
-#: src/psycstore/plugin_psycstore_mysql.c:248
-#: src/psycstore/plugin_psycstore_sqlite.c:257
+#: src/peerstore/plugin_peerstore_sqlite.c:488
 #, c-format
 msgid ""
 "Error preparing SQL query: %s\n"
 "  %s\n"
 msgstr ""
 
-#: src/peerstore/plugin_peerstore_sqlite.c:568
+#: src/peerstore/plugin_peerstore_sqlite.c:570
 #, fuzzy, c-format
 msgid "Unable to create indices: %s.\n"
 msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
 
-#: src/pq/pq_prepare.c:82
+#: src/pq/pq_prepare.c:84
 #, fuzzy, c-format
 msgid "PQprepare (`%s' as `%s') failed with error: %s\n"
 msgstr "`%s' an `%s' schlug fehl bei %s:%d mit dem Fehler: %s\n"
 
-#: src/psycstore/gnunet-service-psycstore.c:247
-#, fuzzy
-msgid "Failed to store membership information!\n"
-msgstr "Fehler beim Speichern der Konfiguration!"
-
-#: src/psycstore/gnunet-service-psycstore.c:269
-#, fuzzy
-msgid "Failed to test membership!\n"
-msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:298
-#, fuzzy
-msgid "Dropping invalid fragment\n"
-msgstr "Ungültiges Argument »%s«\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:309
-#, fuzzy
-msgid "Failed to store fragment\n"
-msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:366
-#, fuzzy
-msgid "Failed to get fragment!\n"
-msgstr "Statistiken über den Netzwerkverkehr konnten nicht ermittelt werden.\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:432
-#, fuzzy
-msgid "Failed to get message!\n"
-msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:462
-#, fuzzy
-msgid "Failed to get message fragment!\n"
-msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:492
-#, fuzzy
-msgid "Failed to get master counters!\n"
-msgstr "Statistiken über den Netzwerkverkehr konnten nicht ermittelt werden.\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:673
-#, 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:683
-#, 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:691
-#, fuzzy
-msgid "Failed to end modifying state!\n"
-msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:728
-msgid "Tried to set invalid state variable name!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:742
-#, fuzzy
-msgid "Failed to begin synchronizing state!\n"
-msgstr "Statistiken über den Netzwerkverkehr konnten nicht ermittelt werden.\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:759
-#, fuzzy
-msgid "Failed to end synchronizing state!\n"
-msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:777
-#: src/psycstore/gnunet-service-psycstore.c:793
-#, fuzzy
-msgid "Failed to reset state!\n"
-msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:822
-#: src/psycstore/gnunet-service-psycstore.c:879
-msgid "Tried to get invalid state variable name!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:849
-#: src/psycstore/gnunet-service-psycstore.c:894
-#, fuzzy
-msgid "Failed to get state variable!\n"
-msgstr "Statistiken über den Netzwerkverkehr konnten nicht ermittelt werden.\n"
-
-#: src/psycstore/plugin_psycstore_mysql.c:279
-#, fuzzy
-msgid "Unable to initialize Mysql.\n"
-msgstr "SQLite-Datenbank konnte nicht initialisiert werden: %s.\n"
-
-#: src/psycstore/plugin_psycstore_mysql.c:289
-#, fuzzy, c-format
-msgid "Failed to run SQL statement `%s'\n"
-msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
-
-#: src/psycstore/plugin_psycstore_sqlite.c:59
-#, fuzzy, c-format
-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:1922
-#, fuzzy
-msgid "SQLite database running\n"
-msgstr "SQL Datenbank beschädigt, Ergebnis wird ignoriert.\n"
-
-#: src/pt/gnunet-daemon-pt.c:421
+#: src/pt/gnunet-daemon-pt.c:423
 msgid "Failed to pack DNS request.  Dropping.\n"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:427
+#: src/pt/gnunet-daemon-pt.c:429
 msgid "# DNS requests mapped to VPN"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:481
+#: src/pt/gnunet-daemon-pt.c:483
 msgid "# DNS records modified"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:665
+#: src/pt/gnunet-daemon-pt.c:667
 #, fuzzy
 msgid "# DNS replies intercepted"
 msgstr "# Bytes empfangen über TCP"
 
-#: src/pt/gnunet-daemon-pt.c:672
+#: src/pt/gnunet-daemon-pt.c:674
 #, fuzzy
 msgid "Failed to parse DNS request.  Dropping.\n"
 msgstr "Fehler beim Senden einer `%s' Anfrage an den SMTP Server.\n"
 
-#: src/pt/gnunet-daemon-pt.c:710
+#: src/pt/gnunet-daemon-pt.c:712
 #, fuzzy
 msgid "# DNS requests dropped (timeout)"
 msgstr "# gap Anfragen verworfen: Kollision in RT"
 
-#: src/pt/gnunet-daemon-pt.c:766
+#: src/pt/gnunet-daemon-pt.c:768
 #, fuzzy
 msgid "# DNS requests intercepted"
 msgstr "# dht Anfragen weitergeleitet"
 
-#: src/pt/gnunet-daemon-pt.c:771
+#: src/pt/gnunet-daemon-pt.c:773
 #, fuzzy
 msgid "# DNS requests dropped (DNS cadet channel down)"
 msgstr "# gap Anfragen verworfen: Kollision in RT"
 
-#: src/pt/gnunet-daemon-pt.c:779
+#: src/pt/gnunet-daemon-pt.c:781
 #, fuzzy
 msgid "# DNS requests dropped (malformed)"
 msgstr "# gap Anfragen verworfen: Kollision in RT"
 
-#: src/pt/gnunet-daemon-pt.c:874
+#: src/pt/gnunet-daemon-pt.c:876
 #, fuzzy
 msgid "# DNS replies received"
 msgstr "# Bytes empfangen über TCP"
 
-#: src/pt/gnunet-daemon-pt.c:891
+#: src/pt/gnunet-daemon-pt.c:893
 msgid "# DNS replies dropped (too late?)"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:1217 src/pt/gnunet-daemon-pt.c:1226
-#: src/pt/gnunet-daemon-pt.c:1242 src/pt/gnunet-daemon-pt.c:1251
-#: src/pt/gnunet-daemon-pt.c:1260
+#: src/pt/gnunet-daemon-pt.c:1219 src/pt/gnunet-daemon-pt.c:1228
+#: src/pt/gnunet-daemon-pt.c:1244 src/pt/gnunet-daemon-pt.c:1253
+#: src/pt/gnunet-daemon-pt.c:1262
 #, c-format
 msgid "Failed to connect to %s service.  Exiting.\n"
 msgstr ""
 "Es konnte keine Verbindung mit dem %s-Dienst hergestellt werden. Abbruch\n"
 
-#: src/pt/gnunet-daemon-pt.c:1305
+#: src/pt/gnunet-daemon-pt.c:1307
 msgid "Daemon to run to perform IP protocol translation to GNUnet"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:465
+#: src/reclaim/gnunet-reclaim.c:467
 #, fuzzy, c-format
 msgid "Ego is required\n"
 msgstr "Option `%s' macht keinen Sinn ohne die Option `%s'.\n"
 
-#: src/reclaim/gnunet-reclaim.c:473
+#: src/reclaim/gnunet-reclaim.c:475
 #, c-format
 msgid "Attribute value missing!\n"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:481
+#: src/reclaim/gnunet-reclaim.c:483
 #, fuzzy, c-format
 msgid "Requesting party key is required!\n"
 msgstr "Option `%s' macht keinen Sinn ohne die Option `%s'.\n"
 
-#: src/reclaim/gnunet-reclaim.c:504
+#: src/reclaim/gnunet-reclaim.c:506
 msgid "Add attribute"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:510
+#: src/reclaim/gnunet-reclaim.c:512
 msgid "Attribute value"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:515
+#: src/reclaim/gnunet-reclaim.c:517
 msgid "Ego"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:520
+#: src/reclaim/gnunet-reclaim.c:522
 msgid "Audience (relying party)"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:524
+#: src/reclaim/gnunet-reclaim.c:526
 msgid "List attributes for Ego"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:529
+#: src/reclaim/gnunet-reclaim.c:531
 msgid "Issue a ticket"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:534
+#: src/reclaim/gnunet-reclaim.c:536
 msgid "Consume a ticket"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:539
+#: src/reclaim/gnunet-reclaim.c:541
 msgid "Revoke a ticket"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:544
+#: src/reclaim/gnunet-reclaim.c:546
 msgid "Type of attribute"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:549
+#: src/reclaim/gnunet-reclaim.c:551
 msgid "Expiration interval of the attribute"
 msgstr ""
 
-#: src/reclaim/reclaim_api.c:434
+#: src/reclaim/reclaim_api.c:436
 #, fuzzy
 msgid "failed to store record\n"
 msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
 
-#: src/regex/gnunet-daemon-regexprofiler.c:265
+#: src/regex/gnunet-daemon-regexprofiler.c:267
 #, c-format
 msgid "%s service is lacking key configuration settings (%s).  Exiting.\n"
 msgstr ""
 
-#: src/regex/gnunet-daemon-regexprofiler.c:378
+#: src/regex/gnunet-daemon-regexprofiler.c:380
 msgid "Daemon to announce regular expressions for the peer using cadet."
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1384
+#: src/regex/gnunet-regex-profiler.c:1386
 msgid "No configuration file given. Exiting\n"
 msgstr "Keine Konfigurationsdatei angegeben. Abbruch\n"
 
-#: src/regex/gnunet-regex-profiler.c:1425
-#: src/regex/gnunet-regex-simulation-profiler.c:628
+#: src/regex/gnunet-regex-profiler.c:1427
+#: src/regex/gnunet-regex-simulation-profiler.c:630
 #, c-format
 msgid "No policy directory specified on command line. Exiting.\n"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1431
-#: src/regex/gnunet-regex-simulation-profiler.c:636
+#: src/regex/gnunet-regex-profiler.c:1433
+#: src/regex/gnunet-regex-simulation-profiler.c:638
 #, c-format
 msgid "Specified policies directory does not exist. Exiting.\n"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1438
+#: src/regex/gnunet-regex-profiler.c:1440
 #, c-format
 msgid "No files found in `%s'\n"
 msgstr "Keine Dateien in »%s« gefunden\n"
 
-#: src/regex/gnunet-regex-profiler.c:1447
+#: src/regex/gnunet-regex-profiler.c:1449
 msgid "No search strings file given. Exiting.\n"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1467
+#: src/regex/gnunet-regex-profiler.c:1469
 msgid "Error loading search strings. Exiting.\n"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1555
+#: src/regex/gnunet-regex-profiler.c:1557
 msgid "name of the file for writing statistics"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1561
+#: src/regex/gnunet-regex-profiler.c:1563
 msgid "wait TIMEOUT before ending the experiment"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1567
+#: src/regex/gnunet-regex-profiler.c:1569
 msgid "directory with policy files"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1574
+#: src/regex/gnunet-regex-profiler.c:1576
 msgid "name of file with input strings"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1580
+#: src/regex/gnunet-regex-profiler.c:1582
 msgid "name of file with hosts' names"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1593
+#: src/regex/gnunet-regex-profiler.c:1595
 msgid "Profiler for regex"
 msgstr ""
 
-#: src/regex/gnunet-regex-simulation-profiler.c:697
+#: src/regex/gnunet-regex-simulation-profiler.c:699
 msgid "name of the table to write DFAs"
 msgstr ""
 
-#: src/regex/gnunet-regex-simulation-profiler.c:703
+#: src/regex/gnunet-regex-simulation-profiler.c:705
 msgid "maximum path compression length"
 msgstr ""
 
-#: src/regex/gnunet-regex-simulation-profiler.c:717
+#: src/regex/gnunet-regex-simulation-profiler.c:719
 msgid "Profiler for regex library"
 msgstr ""
 
-#: src/regex/regex_api_announce.c:150
+#: src/regex/regex_api_announce.c:152
 #, c-format
 msgid "Regex `%s' is too long!\n"
 msgstr ""
 
-#: src/regex/regex_api_search.c:210
+#: src/regex/regex_api_search.c:212
 #, fuzzy, c-format
 msgid "Search string `%s' is too long!\n"
 msgstr "Dienst »%s« läuft nicht\n"
 
-#: src/rest/gnunet-rest-server.c:925
+#: src/rest/gnunet-rest-server.c:927
 msgid "listen on specified port (default: 7776)"
 msgstr ""
 
-#: src/rest/gnunet-rest-server.c:942
+#: src/rest/gnunet-rest-server.c:944
 #, fuzzy
 msgid "GNUnet REST server"
 msgstr "GNUnet Netzwerk Topologie tracen."
 
-#: src/rest-plugins/plugin_rest_copying.c:207
+#: src/rest-plugins/plugin_rest_copying.c:209
 #, fuzzy
 msgid "COPYING REST API initialized\n"
 msgstr " Verbindung fehlgeschlagen\n"
 
-#: src/rest-plugins/plugin_rest_credential.c:1126
+#: src/rest-plugins/plugin_rest_credential.c:1128
 #, fuzzy
 msgid "GNS REST API initialized\n"
 msgstr " Verbindung fehlgeschlagen\n"
 
-#: src/rest-plugins/plugin_rest_gns.c:450
+#: src/rest-plugins/plugin_rest_gns.c:452
 #, fuzzy
 msgid "Gns REST API initialized\n"
 msgstr " Verbindung fehlgeschlagen\n"
 
-#: src/rest-plugins/plugin_rest_identity.c:1295
+#: src/rest-plugins/plugin_rest_identity.c:1297
 msgid "Identity REST API initialized\n"
 msgstr ""
 
-#: src/rest-plugins/plugin_rest_namestore.c:1077
+#: src/rest-plugins/plugin_rest_namestore.c:1079
 #, fuzzy
 msgid "Namestore REST API initialized\n"
 msgstr " Verbindung fehlgeschlagen\n"
 
-#: src/rest-plugins/plugin_rest_openid_connect.c:2135
+#: src/rest-plugins/plugin_rest_openid_connect.c:2245
 #: src/rest-plugins/plugin_rest_reclaim.c:1079
 #, fuzzy
 msgid "Identity Provider REST API initialized\n"
 msgstr " Verbindung fehlgeschlagen\n"
 
-#: src/rest-plugins/plugin_rest_peerinfo.c:794
+#: src/rest-plugins/plugin_rest_peerinfo.c:796
 #, fuzzy
 msgid "Peerinfo REST API initialized\n"
 msgstr " Verbindung fehlgeschlagen\n"
 
-#: src/revocation/gnunet-revocation.c:127
+#: src/revocation/gnunet-revocation.c:129
 #, c-format
 msgid "Key `%s' is valid\n"
 msgstr "Schlüssel »%s« ist gültig\n"
 
-#: src/revocation/gnunet-revocation.c:132
+#: src/revocation/gnunet-revocation.c:134
 #, c-format
 msgid "Key `%s' has been revoked\n"
 msgstr "Schlüssel »%s« wurde widerrufen\n"
 
-#: src/revocation/gnunet-revocation.c:138
+#: src/revocation/gnunet-revocation.c:140
 msgid "Internal error\n"
 msgstr "Interner Fehler\n"
 
-#: src/revocation/gnunet-revocation.c:164
+#: src/revocation/gnunet-revocation.c:166
 #, c-format
 msgid "Key for ego `%s' is still valid, revocation failed (!)\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:169
+#: src/revocation/gnunet-revocation.c:171
 msgid "Revocation failed (!)\n"
 msgstr "Widerruf fehlgeschlagen (!)\n"
 
-#: src/revocation/gnunet-revocation.c:174
+#: src/revocation/gnunet-revocation.c:176
 #, c-format
 msgid "Key for ego `%s' has been successfully revoked\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:179
+#: src/revocation/gnunet-revocation.c:181
 msgid "Revocation successful.\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:184
+#: src/revocation/gnunet-revocation.c:186
 msgid "Internal error, key revocation might have failed\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:321
+#: src/revocation/gnunet-revocation.c:323
 #, c-format
 msgid "Revocation certificate for `%s' stored in `%s'\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:350
+#: src/revocation/gnunet-revocation.c:352
 #, fuzzy, c-format
 msgid "Ego `%s' not found.\n"
 msgstr "Kommando `%s' wurde nicht gefunden!\n"
 
-#: src/revocation/gnunet-revocation.c:371
+#: src/revocation/gnunet-revocation.c:373
 #, c-format
 msgid "Error: revocation certificate in `%s' is not for `%s'\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:391
+#: src/revocation/gnunet-revocation.c:393
 msgid "Revocation certificate ready\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:401
+#: src/revocation/gnunet-revocation.c:403
 msgid "Revocation certificate not ready, calculating proof of work\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:435 src/social/gnunet-social.c:1178
+#: src/revocation/gnunet-revocation.c:437
 #, c-format
 msgid "Public key `%s' malformed\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:448
+#: src/revocation/gnunet-revocation.c:450
 msgid ""
 "Testing and revoking at the same time is not allowed, only executing test.\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:468
+#: src/revocation/gnunet-revocation.c:470
 msgid "No filename to store revocation certificate given.\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:489
+#: src/revocation/gnunet-revocation.c:491
 #, fuzzy, c-format
 msgid "Failed to read revocation certificate from `%s'\n"
 msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
 
-#: src/revocation/gnunet-revocation.c:514
+#: src/revocation/gnunet-revocation.c:516
 #, fuzzy
 msgid "No action specified. Nothing to do.\n"
 msgstr "Keine Kommandos angegeben.\n"
 
-#: src/revocation/gnunet-revocation.c:533
+#: src/revocation/gnunet-revocation.c:535
 msgid "use NAME for the name of the revocation file"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:539
+#: src/revocation/gnunet-revocation.c:541
 msgid ""
 "revoke the private key associated for the the private key associated with "
 "the ego NAME "
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:544
+#: src/revocation/gnunet-revocation.c:546
 msgid "actually perform revocation, otherwise we just do the precomputation"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:550
+#: src/revocation/gnunet-revocation.c:552
 msgid "test if the public key KEY has been revoked"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:457
+#: src/revocation/gnunet-service-revocation.c:459
 msgid "# unsupported revocations received via set union"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:466
+#: src/revocation/gnunet-service-revocation.c:468
 #, fuzzy
 msgid "# revocation messages received via set union"
 msgstr "# verschlüsselter PING Nachrichten empfangen"
 
-#: src/revocation/gnunet-service-revocation.c:471
+#: src/revocation/gnunet-service-revocation.c:473
 #, c-format
 msgid "Error computing revocation set union with %s\n"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:475
+#: src/revocation/gnunet-service-revocation.c:477
 #, fuzzy
 msgid "# revocation set unions failed"
 msgstr " Verbindung fehlgeschlagen\n"
 
-#: src/revocation/gnunet-service-revocation.c:484
+#: src/revocation/gnunet-service-revocation.c:486
 #, fuzzy
 msgid "# revocation set unions completed"
 msgstr "# Klartext PONG Nachrichten empfangen"
 
-#: src/revocation/gnunet-service-revocation.c:523
+#: src/revocation/gnunet-service-revocation.c:525
 msgid "SET service crashed, terminating revocation service\n"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:865
+#: src/revocation/gnunet-service-revocation.c:867
 #, fuzzy
 msgid "Could not open revocation database file!"
 msgstr "Knoten `%s' konnte nicht in der Routing Tabelle gefunden werden!\n"
 
-#: src/rps/gnunet-rps.c:258
+#: src/rps/gnunet-rps.c:260
 msgid "Seed a PeerID"
 msgstr ""
 
-#: src/rps/gnunet-rps.c:262
+#: src/rps/gnunet-rps.c:264
 msgid "Get updates of view (0 for infinite updates)"
 msgstr ""
 
-#: src/rps/gnunet-rps.c:266
+#: src/rps/gnunet-rps.c:268
 msgid "Get peers from biased stream"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2770
+#: src/rps/gnunet-rps-profiler.c:2959
 msgid "duration of the profiling"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2776
+#: src/rps/gnunet-rps-profiler.c:2965
 msgid "timeout for the profiling"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2782
+#: src/rps/gnunet-rps-profiler.c:2971
 #, fuzzy
 msgid "number of PeerIDs to request"
 msgstr "Anzahl an Durchläufen"
 
-#: src/rps/gnunet-rps-profiler.c:2797
+#: src/rps/gnunet-rps-profiler.c:2986
 msgid "Measure quality and performance of the RPS service."
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:218
+#: src/scalarproduct/gnunet-scalarproduct.c:220
 #, fuzzy
 msgid "You must specify at least one message ID to check!\n"
 msgstr "Sie müssen eine Liste von Dateien zum Einfügen angeben.\n"
 
-#: src/scalarproduct/gnunet-scalarproduct.c:225
+#: src/scalarproduct/gnunet-scalarproduct.c:227
 msgid "This program needs a session identifier for comparing vectors.\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:238
+#: src/scalarproduct/gnunet-scalarproduct.c:240
 #, c-format
 msgid ""
 "Tried to set initiator mode, as peer ID was given. However, `%s' is not a "
 "valid peer identifier.\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:256
+#: src/scalarproduct/gnunet-scalarproduct.c:258
 msgid "Need elements to compute the scalarproduct, got none.\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:278
+#: src/scalarproduct/gnunet-scalarproduct.c:280
 #, c-format
 msgid "Malformed input, could not parse `%s'\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:296
+#: src/scalarproduct/gnunet-scalarproduct.c:298
 #, fuzzy, c-format
 msgid "Could not convert `%s' to int64_t.\n"
 msgstr "Verbindung zu gnunetd konnte nicht hergestellt werden.\n"
 
-#: src/scalarproduct/gnunet-scalarproduct.c:323
+#: src/scalarproduct/gnunet-scalarproduct.c:325
 #, c-format
 msgid "Failed to initiate computation, were all keys unique?\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:349
-#: src/scalarproduct/gnunet-scalarproduct.c:355
+#: src/scalarproduct/gnunet-scalarproduct.c:351
+#: src/scalarproduct/gnunet-scalarproduct.c:357
 msgid ""
 "A comma separated list of elements to compare as vector with our remote peer."
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:361
+#: src/scalarproduct/gnunet-scalarproduct.c:363
 msgid ""
 "[Optional] peer to calculate our scalarproduct with. If this parameter is "
 "not given, the service will wait for a remote peer to compute the request."
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:367
+#: src/scalarproduct/gnunet-scalarproduct.c:369
 msgid "Transaction ID shared with peer."
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:377
+#: src/scalarproduct/gnunet-scalarproduct.c:379
 msgid "Calculate the Vectorproduct with a GNUnet peer."
 msgstr ""
 
-#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1399
-#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1343
-#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1170
-#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1061
+#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1401
+#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1345
+#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1172
+#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1063
 #, fuzzy
 msgid "Connect to CADET failed\n"
 msgstr " Verbindung fehlgeschlagen\n"
 
-#: src/scalarproduct/scalarproduct_api.c:183
+#: src/scalarproduct/scalarproduct_api.c:185
 msgid "Keys given to SCALARPRODUCT not unique!\n"
 msgstr ""
 
-#: src/secretsharing/gnunet-secretsharing-profiler.c:614
+#: src/secretsharing/gnunet-secretsharing-profiler.c:616
 msgid "dkg start delay"
 msgstr ""
 
-#: src/secretsharing/gnunet-secretsharing-profiler.c:620
+#: src/secretsharing/gnunet-secretsharing-profiler.c:622
 msgid "dkg timeout"
 msgstr ""
 
-#: src/secretsharing/gnunet-secretsharing-profiler.c:626
+#: src/secretsharing/gnunet-secretsharing-profiler.c:628
 msgid "threshold"
 msgstr ""
 
-#: src/secretsharing/gnunet-secretsharing-profiler.c:631
+#: src/secretsharing/gnunet-secretsharing-profiler.c:633
 msgid "also profile decryption"
 msgstr ""
 
-#: src/set/gnunet-service-set.c:2004
+#: src/set/gnunet-service-set.c:2005
 #, fuzzy
 msgid "Could not connect to CADET service\n"
 msgstr "Verbindung zum %s-Dienst ist fehlgeschlagen!\n"
 
-#: src/set/gnunet-set-ibf-profiler.c:250
+#: src/set/gnunet-set-ibf-profiler.c:252
 #, fuzzy
 msgid "number of element in set A-B"
 msgstr "Anzahl an Durchläufen"
 
-#: src/set/gnunet-set-ibf-profiler.c:256
+#: src/set/gnunet-set-ibf-profiler.c:258
 #, fuzzy
 msgid "number of element in set B-A"
 msgstr "Anzahl an Durchläufen"
 
-#: src/set/gnunet-set-ibf-profiler.c:262
+#: src/set/gnunet-set-ibf-profiler.c:264
 msgid "number of common elements in A and B"
 msgstr ""
 
-#: src/set/gnunet-set-ibf-profiler.c:268
+#: src/set/gnunet-set-ibf-profiler.c:270
 msgid "hash num"
 msgstr ""
 
-#: src/set/gnunet-set-ibf-profiler.c:274
+#: src/set/gnunet-set-ibf-profiler.c:276
 msgid "ibf size"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:442
+#: src/set/gnunet-set-profiler.c:444
 msgid "use byzantine mode"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:448
+#: src/set/gnunet-set-profiler.c:450
 msgid "force sending full set"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:454
+#: src/set/gnunet-set-profiler.c:456
 msgid "number delta operation"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:466
+#: src/set/gnunet-set-profiler.c:468
 msgid "operation to execute"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:472
+#: src/set/gnunet-set-profiler.c:474
 msgid "element size"
 msgstr ""
 
-#: src/social/gnunet-social.c:1164
-#, fuzzy
-msgid "--place missing or invalid.\n"
-msgstr "Ungültige Antwort auf `%s'.\n"
-
-#: src/social/gnunet-social.c:1215
-msgid "assign --name in state to --data"
-msgstr ""
-
-#: src/social/gnunet-social.c:1220
-msgid "say good-bye and leave somebody else's place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1225
-msgid "create a place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1230
-msgid "destroy a place we were hosting"
-msgstr ""
-
-#: src/social/gnunet-social.c:1235
-msgid "enter somebody else's place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1241
-msgid "find state matching name prefix"
-msgstr ""
-
-#: src/social/gnunet-social.c:1246
-msgid "replay history of messages up to the given --limit"
-msgstr ""
-
-#: src/social/gnunet-social.c:1251
-msgid "reconnect to a previously created place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1256
-msgid "publish something to a place we are hosting"
-msgstr ""
-
-#: src/social/gnunet-social.c:1261
-msgid "reconnect to a previously entered place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1266
-msgid "search for state matching exact name"
-msgstr ""
-
-#: src/social/gnunet-social.c:1271
-msgid "submit something to somebody's place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1276
-msgid "list of egos and subscribed places"
-msgstr ""
-
-#: src/social/gnunet-social.c:1281
-msgid "extract and replay history between message IDs --start and --until"
-msgstr ""
-
-#: src/social/gnunet-social.c:1290
-msgid "application ID to use when connecting"
-msgstr ""
-
-#: src/social/gnunet-social.c:1296
-msgid "message body or state value"
-msgstr ""
-
-#: src/social/gnunet-social.c:1302
-#, fuzzy
-msgid "name or public key of ego"
-msgstr "Ungültiger Parameter: `%s'\n"
-
-#: src/social/gnunet-social.c:1307
-msgid "wait for incoming messages"
-msgstr ""
-
-#: src/social/gnunet-social.c:1313
-msgid "GNS name"
-msgstr ""
-
-#: src/social/gnunet-social.c:1319
-msgid "peer ID for --guest-enter"
-msgstr ""
-
-#: src/social/gnunet-social.c:1325
-msgid "name (key) to query from state"
-msgstr ""
-
-#: src/social/gnunet-social.c:1331
-msgid "method name"
-msgstr ""
-
-#: src/social/gnunet-social.c:1337
-#, fuzzy
-msgid "number of messages to replay from history"
-msgstr "Anzahl an Durchläufen"
-
-#: src/social/gnunet-social.c:1343
-msgid "key address of place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1349
-msgid "start message ID for history replay"
-msgstr ""
-
-#: src/social/gnunet-social.c:1354
-msgid "respond to entry requests by admitting all guests"
-msgstr ""
-
-#: src/social/gnunet-social.c:1360
-msgid "end message ID for history replay"
-msgstr ""
-
-#: src/social/gnunet-social.c:1365
-msgid "respond to entry requests by refusing all guests"
-msgstr ""
-
-#: src/social/gnunet-social.c:1375
-msgid ""
-"gnunet-social - Interact with the social service: enter/leave, send/receive "
-"messages, access history and state.\n"
-msgstr ""
-
-#: src/sq/sq.c:52
+#: src/sq/sq.c:54
 #, c-format
 msgid "Failure to bind %u-th SQL parameter\n"
 msgstr ""
 
-#: src/sq/sq.c:59
+#: src/sq/sq.c:61
 msgid "Failure in sqlite3_reset (!)\n"
 msgstr ""
 
-#: src/sq/sq.c:137
+#: src/sq/sq.c:139
 #, fuzzy, c-format
 msgid "Failed to reset sqlite statement with error: %s\n"
 msgstr ""
 "`%s' konnte die Methode '%s%s' nicht auflösen. Ort: %s:%d. Fehler: %s\n"
 
-#: src/statistics/gnunet-service-statistics.c:336
+#: src/statistics/gnunet-service-statistics.c:338
 #, fuzzy, c-format
 msgid "Wrote %llu bytes of statistics to `%s'\n"
 msgstr "Dateien aus dem GNUnet herunterladen."
 
-#: src/statistics/gnunet-service-statistics.c:1084
+#: src/statistics/gnunet-service-statistics.c:1086
 #, fuzzy, c-format
 msgid "Loading %llu bytes of statistics from `%s'\n"
 msgstr "Dateien aus dem GNUnet herunterladen."
 
-#: src/statistics/gnunet-statistics.c:407
-#: src/statistics/gnunet-statistics.c:448
+#: src/statistics/gnunet-statistics.c:409
+#: src/statistics/gnunet-statistics.c:450
 #, fuzzy
 msgid "Failed to obtain statistics.\n"
 msgstr "Statistiken über den Netzwerkverkehr konnten nicht ermittelt werden.\n"
 
-#: src/statistics/gnunet-statistics.c:410
-#: src/statistics/gnunet-statistics.c:451
+#: src/statistics/gnunet-statistics.c:412
+#: src/statistics/gnunet-statistics.c:453
 #, fuzzy, c-format
 msgid "Failed to obtain statistics from host `%s:%llu'\n"
 msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
 
-#: src/statistics/gnunet-statistics.c:526
+#: src/statistics/gnunet-statistics.c:528
 msgid "Missing argument: subsystem \n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:534
+#: src/statistics/gnunet-statistics.c:536
 msgid "Missing argument: name\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:577
+#: src/statistics/gnunet-statistics.c:579
 #, c-format
 msgid "No subsystem or name given\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:592
+#: src/statistics/gnunet-statistics.c:594
 #, fuzzy, c-format
 msgid "Failed to initialize watch routine\n"
 msgstr "`%s' Dienst konnte nicht initialisiert werden.\n"
 
-#: src/statistics/gnunet-statistics.c:727
+#: src/statistics/gnunet-statistics.c:729
 #, c-format
 msgid "Invalid argument `%s'\n"
 msgstr "Ungültiges Argument »%s«\n"
 
-#: src/statistics/gnunet-statistics.c:745
+#: src/statistics/gnunet-statistics.c:747
 #, c-format
 msgid "A port is required to connect to host `%s'\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:753
+#: src/statistics/gnunet-statistics.c:755
 #, c-format
 msgid "A port has to be between 1 and 65535 to connect to host `%s'\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:784
+#: src/statistics/gnunet-statistics.c:786
 #, c-format
 msgid "Not able to watch testbed nodes (yet - feel free to implement)\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:817
+#: src/statistics/gnunet-statistics.c:819
 msgid "limit output to statistics for the given NAME"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:822
+#: src/statistics/gnunet-statistics.c:824
 msgid "make the value being set persistent"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:828
+#: src/statistics/gnunet-statistics.c:830
 msgid "limit output to the given SUBSYSTEM"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:834
+#: src/statistics/gnunet-statistics.c:836
 msgid "use as csv separator"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:840
+#: src/statistics/gnunet-statistics.c:842
 msgid "path to the folder containing the testbed data"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:845
+#: src/statistics/gnunet-statistics.c:847
 msgid "just print the statistics value"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:850
+#: src/statistics/gnunet-statistics.c:852
 msgid "watch value continuously"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:856
+#: src/statistics/gnunet-statistics.c:858
 msgid "connect to remote host"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:862
+#: src/statistics/gnunet-statistics.c:864
 msgid "port for remote host"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:879
+#: src/statistics/gnunet-statistics.c:881
 msgid "Print statistics about GNUnet operations."
 msgstr "Statistiken der GNUnet-Aktivitäten ausgeben."
 
-#: src/statistics/statistics_api.c:751
+#: src/statistics/statistics_api.c:753
 msgid "Could not save some persistent statistics\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:223
+#: src/testbed/generate-underlay-topology.c:225
 #, fuzzy
 msgid "Need at least 2 arguments\n"
 msgstr "Sie müssen einen Empfänger angeben!\n"
 
-#: src/testbed/generate-underlay-topology.c:228
+#: src/testbed/generate-underlay-topology.c:230
 msgid "Database filename missing\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:235
+#: src/testbed/generate-underlay-topology.c:237
 msgid "Topology string missing\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:240
+#: src/testbed/generate-underlay-topology.c:242
 #, fuzzy, c-format
 msgid "Invalid topology: %s\n"
 msgstr "Ungültige Antwort auf `%s'.\n"
 
-#: src/testbed/generate-underlay-topology.c:253
+#: src/testbed/generate-underlay-topology.c:255
 #, c-format
 msgid "An argument is missing for given topology `%s'\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:259
+#: src/testbed/generate-underlay-topology.c:261
 #, fuzzy, c-format
 msgid "Invalid argument `%s' given as topology argument\n"
 msgstr "Ungültiger Parameter für `%s' bei %s:%d.\n"
 
-#: src/testbed/generate-underlay-topology.c:267
+#: src/testbed/generate-underlay-topology.c:269
 #, c-format
 msgid "Filename argument missing for topology `%s'\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:281
+#: src/testbed/generate-underlay-topology.c:283
 #, c-format
 msgid "Second argument for topology `%s' is missing\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:287
+#: src/testbed/generate-underlay-topology.c:289
 #, fuzzy, c-format
 msgid "Invalid argument `%s'; expecting unsigned int\n"
 msgstr "Ungültiger Parameter für `%s' bei %s:%d.\n"
 
-#: src/testbed/generate-underlay-topology.c:340
-#: src/testbed/gnunet-testbed-profiler.c:281
+#: src/testbed/generate-underlay-topology.c:342
+#: src/testbed/gnunet-testbed-profiler.c:283
 msgid "create COUNT number of peers"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:350
+#: src/testbed/generate-underlay-topology.c:352
 msgid ""
 "Generates SQLite3 database representing a given underlay topology.\n"
 "Usage: gnunet-underlay-topology [OPTIONS] db-filename TOPO [TOPOOPTS]\n"
@@ -6710,83 +6505,83 @@ msgid ""
 "content/topology-file-format\n"
 msgstr ""
 
-#: src/testbed/gnunet-daemon-latency-logger.c:313
+#: src/testbed/gnunet-daemon-latency-logger.c:315
 msgid "Daemon to log latency values of connections to neighbours"
 msgstr ""
 
-#: src/testbed/gnunet-daemon-testbed-blacklist.c:247
+#: src/testbed/gnunet-daemon-testbed-blacklist.c:249
 msgid ""
 "Daemon to restrict incoming transport layer connections during testbed "
 "deployments"
 msgstr ""
 
-#: src/testbed/gnunet-daemon-testbed-underlay.c:231 src/testing/list-keys.c:46
-#: src/testing/testing.c:286 src/util/gnunet-ecc.c:310
+#: src/testbed/gnunet-daemon-testbed-underlay.c:233 src/testing/list-keys.c:46
+#: src/testing/testing.c:288 src/util/gnunet-ecc.c:312
 #, c-format
 msgid "Incorrect hostkey file format: %s\n"
 msgstr ""
 
-#: src/testbed/gnunet-daemon-testbed-underlay.c:469
+#: src/testbed/gnunet-daemon-testbed-underlay.c:471
 msgid "Daemon to restrict underlay network in testbed deployments"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_cpustatus.c:726
+#: src/testbed/gnunet-service-testbed_cpustatus.c:728
 #, c-format
 msgid ""
 "Cannot open %s for writing load statistics.  Not logging load statistics\n"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1157
+#: src/testbed/gnunet-service-testbed_peers.c:1159
 #, c-format
 msgid "%s is stopped"
 msgstr "%s wurde gestoppt"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1159
+#: src/testbed/gnunet-service-testbed_peers.c:1161
 #, c-format
 msgid "%s is starting"
 msgstr "%s startet"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1161
+#: src/testbed/gnunet-service-testbed_peers.c:1163
 #, c-format
 msgid "%s is stopping"
 msgstr "%s wird gestoppt"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1163
+#: src/testbed/gnunet-service-testbed_peers.c:1165
 #, c-format
 msgid "%s is starting already"
 msgstr "%s ist bereits gestartet"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1165
+#: src/testbed/gnunet-service-testbed_peers.c:1167
 #, c-format
 msgid "%s is stopping already"
 msgstr "%s wird bereits gestoppt"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1167
+#: src/testbed/gnunet-service-testbed_peers.c:1169
 #, c-format
 msgid "%s is started already"
 msgstr "%s ist bereits gestartet"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1169
+#: src/testbed/gnunet-service-testbed_peers.c:1171
 #, c-format
 msgid "%s is stopped already"
 msgstr "%s ist bereits gestoppt"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1171
+#: src/testbed/gnunet-service-testbed_peers.c:1173
 #, c-format
 msgid "%s service is not known to ARM"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1173
+#: src/testbed/gnunet-service-testbed_peers.c:1175
 #, c-format
 msgid "%s service failed to start"
 msgstr "%s-Dienst konnte nicht gestartet werden"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1175
+#: src/testbed/gnunet-service-testbed_peers.c:1177
 #, c-format
 msgid "%s service can't be started because ARM is shutting down"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1177
+#: src/testbed/gnunet-service-testbed_peers.c:1179
 #, c-format
 msgid "%.s Unknown result code."
 msgstr ""
@@ -6803,176 +6598,176 @@ msgstr ""
 msgid "Spawning process `%s'\n"
 msgstr "Ungültige Antwort auf `%s'.\n"
 
-#: src/testbed/gnunet-testbed-profiler.c:287
+#: src/testbed/gnunet-testbed-profiler.c:289
 msgid "tolerate COUNT number of continious timeout failures"
 msgstr ""
 
-#: src/testbed/gnunet-testbed-profiler.c:292
+#: src/testbed/gnunet-testbed-profiler.c:294
 msgid ""
 "run profiler in non-interactive mode where upon testbed setup the profiler "
 "does not wait for a keystroke but continues to run until a termination "
 "signal is received"
 msgstr ""
 
-#: src/testbed/testbed_api.c:408
+#: src/testbed/testbed_api.c:410
 #, fuzzy, c-format
 msgid "Adding host %u failed with error: %s\n"
 msgstr "`%s' an `%s' schlug fehl bei %s:%d mit dem Fehler: %s\n"
 
-#: src/testbed/testbed_api_hosts.c:411
+#: src/testbed/testbed_api_hosts.c:413
 #, fuzzy, c-format
 msgid "Hosts file %s not found\n"
 msgstr "`%s' fehlgeschlagen: Tabelle nicht gefunden!\n"
 
-#: src/testbed/testbed_api_hosts.c:419
+#: src/testbed/testbed_api_hosts.c:421
 #, c-format
 msgid "Hosts file %s has no data\n"
 msgstr ""
 
-#: src/testbed/testbed_api_hosts.c:426
+#: src/testbed/testbed_api_hosts.c:428
 #, c-format
 msgid "Hosts file %s cannot be read\n"
 msgstr ""
 
-#: src/testbed/testbed_api_hosts.c:567
+#: src/testbed/testbed_api_hosts.c:569
 #, c-format
 msgid "The function %s is only available when compiled with (--with-ll)\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:816
+#: src/testbed/testbed_api_testbed.c:818
 msgid "Linking controllers failed. Exiting"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:984
+#: src/testbed/testbed_api_testbed.c:986
 #, c-format
 msgid "Host registration failed for a host. Error: %s\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1050
+#: src/testbed/testbed_api_testbed.c:1052
 msgid "Controller crash detected. Shutting down.\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1139
+#: src/testbed/testbed_api_testbed.c:1141
 #, c-format
 msgid "Host %s cannot start testbed\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1143
+#: src/testbed/testbed_api_testbed.c:1145
 msgid "Testbed cannot be started on localhost\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1181
+#: src/testbed/testbed_api_testbed.c:1183
 #, fuzzy
 msgid "Cannot start the master controller"
 msgstr "GNUnet testbed Controller starten."
 
-#: src/testbed/testbed_api_testbed.c:1199
+#: src/testbed/testbed_api_testbed.c:1201
 msgid "Shutting down testbed due to timeout while setup.\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1259
+#: src/testbed/testbed_api_testbed.c:1261
 msgid "No hosts loaded from LoadLeveler. Need at least one host\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1271
+#: src/testbed/testbed_api_testbed.c:1273
 msgid "No hosts loaded. Need at least one host\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1295
+#: src/testbed/testbed_api_testbed.c:1297
 msgid "Specified topology must be supported by testbed"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1345
+#: src/testbed/testbed_api_testbed.c:1347
 #, c-format
 msgid ""
 "Maximum number of edges a peer can have in a scale free topology cannot be "
 "more than %u.  Given `%s = %llu'"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1361
+#: src/testbed/testbed_api_testbed.c:1363
 #, c-format
 msgid ""
 "The number of edges that can established when adding a new node to scale "
 "free topology cannot be more than %u.  Given `%s = %llu'"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1026
+#: src/testbed/testbed_api_topology.c:1028
 #, c-format
 msgid "Topology file %s not found\n"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1034
+#: src/testbed/testbed_api_topology.c:1036
 #, c-format
 msgid "Topology file %s has no data\n"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1042
+#: src/testbed/testbed_api_topology.c:1044
 #, c-format
 msgid "Topology file %s cannot be read\n"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1064
+#: src/testbed/testbed_api_topology.c:1066
 #, fuzzy, c-format
 msgid "Failed to read peer index from toology file: %s"
 msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
 
-#: src/testbed/testbed_api_topology.c:1073
-#: src/testbed/testbed_api_topology.c:1097
+#: src/testbed/testbed_api_topology.c:1075
+#: src/testbed/testbed_api_topology.c:1099
 #, c-format
 msgid "Value in given topology file: %s out of range\n"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1079
-#: src/testbed/testbed_api_topology.c:1103
+#: src/testbed/testbed_api_topology.c:1081
+#: src/testbed/testbed_api_topology.c:1105
 #, fuzzy, c-format
 msgid "Failed to read peer index from topology file: %s"
 msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
 
-#: src/testbed/testbed_api_topology.c:1085
-#: src/testbed/testbed_api_topology.c:1109
+#: src/testbed/testbed_api_topology.c:1087
+#: src/testbed/testbed_api_topology.c:1111
 msgid "Topology file needs more peers than given ones\n"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1143
+#: src/testbed/testbed_api_topology.c:1145
 #, c-format
 msgid "Ignoring to connect peer %u to peer %u\n"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:171
+#: src/testing/gnunet-testing.c:173
 #, c-format
 msgid "Could not extract hostkey %u (offset too large?)\n"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:251
+#: src/testing/gnunet-testing.c:253
 #, c-format
 msgid "Unknown command, use 'q' to quit or 'r' to restart peer\n"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:352
+#: src/testing/gnunet-testing.c:354
 #, fuzzy
 msgid "create unique configuration files"
 msgstr ""
 "Einen Wert aus der Konfigurationsdatei auf der Standardausgabe ausgeben"
 
-#: src/testing/gnunet-testing.c:357
+#: src/testing/gnunet-testing.c:359
 msgid "extract hostkey file from pre-computed hostkey list"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:363
+#: src/testing/gnunet-testing.c:365
 msgid ""
 "number of unique configuration files to create, or number of the hostkey to "
 "extract"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:370
+#: src/testing/gnunet-testing.c:372
 msgid "configuration template"
 msgstr "Konfigurationsvorlage"
 
-#: src/testing/gnunet-testing.c:376
+#: src/testing/gnunet-testing.c:378
 msgid "run the given service, wait on stdin for 'r' (restart) or 'q' (quit)"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:389
+#: src/testing/gnunet-testing.c:391
 msgid "Command line tool to access the testing library"
 msgstr ""
 
@@ -6980,1398 +6775,1422 @@ msgstr ""
 msgid "list COUNT number of keys"
 msgstr ""
 
-#: src/testing/testing.c:270
+#: src/testing/testing.c:272
 #, c-format
 msgid "Hostkeys file not found: %s\n"
 msgstr ""
 
-#: src/testing/testing.c:713
+#: src/testing/testing.c:715
 #, c-format
 msgid "Key number %u does not exist\n"
 msgstr ""
 
-#: src/testing/testing.c:1157
+#: src/testing/testing.c:1159
 #, c-format
 msgid ""
 "You attempted to create a testbed with more than %u hosts.  Please "
 "precompute more hostkeys first.\n"
 msgstr ""
 
-#: src/testing/testing.c:1166
+#: src/testing/testing.c:1168
 #, fuzzy, c-format
 msgid "Failed to initialize hostkey for peer %u\n"
 msgstr "SQLite Datenbank konnte nicht initialisiert werden.\n"
 
-#: src/testing/testing.c:1176
+#: src/testing/testing.c:1178
 msgid "PRIVATE_KEY option in PEER section missing in configuration\n"
 msgstr ""
 
-#: src/testing/testing.c:1189
+#: src/testing/testing.c:1191
 msgid "Failed to create configuration for peer (not enough free ports?)\n"
 msgstr ""
 
-#: src/testing/testing.c:1203
+#: src/testing/testing.c:1205
 #, fuzzy, c-format
 msgid "Cannot open hostkey file `%s': %s\n"
 msgstr "Konfigurationsdatei `%s' konnte nicht geöffnet werden.\n"
 
-#: src/testing/testing.c:1215
+#: src/testing/testing.c:1217
 #, fuzzy, c-format
 msgid "Failed to write hostkey file for peer %u: %s\n"
 msgstr "Datei wurde als `%s' gespeichert.\n"
 
-#: src/testing/testing.c:1240
+#: src/testing/testing.c:1242
 #, fuzzy, c-format
 msgid "Failed to write configuration file `%s' for peer %u: %s\n"
 msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':"
 
-#: src/testing/testing.c:1342
+#: src/testing/testing.c:1344
 #, c-format
 msgid "Failed to start `%s': %s\n"
 msgstr "»%s« konnte nicht gestartet werden: %s\n"
 
-#: src/testing/testing.c:1645
+#: src/testing/testing.c:1647
 #, c-format
 msgid "Failed to load configuration from %s\n"
 msgstr "Konfiguration konnte nicht aus %s geladen werden\n"
 
-#: src/topology/friends.c:124
+#: src/topology/friends.c:126
 #, fuzzy, c-format
 msgid "Syntax error in FRIENDS file at offset %llu, skipping bytes `%.*s'.\n"
 msgstr "Syntaxfehler in Topologieangabe, überspringe Bytes `%s'.\n"
 
-#: src/topology/friends.c:178
+#: src/topology/friends.c:180
 #, c-format
 msgid "Directory for file `%s' does not seem to be writable.\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:228
+#: src/topology/gnunet-daemon-topology.c:230
 msgid "# peers blacklisted"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:342
+#: src/topology/gnunet-daemon-topology.c:344
 #, fuzzy
 msgid "# connect requests issued to ATS"
 msgstr "# geschlossener Verbindungen (HANGUP gesendet)"
 
-#: src/topology/gnunet-daemon-topology.c:536
+#: src/topology/gnunet-daemon-topology.c:538
 #, fuzzy
 msgid "# HELLO messages gossipped"
 msgstr "# ausgehender Nachrichten verworfen"
 
-#: src/topology/gnunet-daemon-topology.c:638
-#: src/topology/gnunet-daemon-topology.c:724
+#: src/topology/gnunet-daemon-topology.c:640
+#: src/topology/gnunet-daemon-topology.c:726
 msgid "# friends connected"
 msgstr "# verbundener Freunde"
 
-#: src/topology/gnunet-daemon-topology.c:921
+#: src/topology/gnunet-daemon-topology.c:923
 msgid "Failed to connect to core service, can not manage topology!\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:954
+#: src/topology/gnunet-daemon-topology.c:956
 #, c-format
 msgid "Found myself `%s' in friend list (useless, ignored)\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:961
+#: src/topology/gnunet-daemon-topology.c:963
 #, fuzzy, c-format
 msgid "Found friend `%s' in configuration\n"
 msgstr " gconfig\tGTK Konfiguration\n"
 
-#: src/topology/gnunet-daemon-topology.c:983
+#: src/topology/gnunet-daemon-topology.c:985
 msgid "Encountered errors parsing friends list!\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:986
+#: src/topology/gnunet-daemon-topology.c:988
 msgid "# friends in configuration"
 msgstr "# Freunde in Konfiguration"
 
-#: src/topology/gnunet-daemon-topology.c:993
+#: src/topology/gnunet-daemon-topology.c:995
 msgid ""
 "Fewer friends specified than required by minimum friend count. Will only "
 "connect to friends.\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:999
+#: src/topology/gnunet-daemon-topology.c:1001
 msgid ""
 "More friendly connections required than target total number of connections.\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:1052
-#: src/transport/plugin_transport_wlan.c:1515
+#: src/topology/gnunet-daemon-topology.c:1054
+#: src/transport/plugin_transport_wlan.c:1517
 msgid "# HELLO messages received"
 msgstr "# HELLO-Meldungen empfangen"
 
-#: src/topology/gnunet-daemon-topology.c:1230
+#: src/topology/gnunet-daemon-topology.c:1233
 msgid "GNUnet topology control"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_ats.c:139
+#: src/transport/gnunet-communicator-tcp.c:2329
+#: src/transport/gnunet-communicator-udp.c:2883
+#: src/transport/gnunet-service-tng.c:4679
+#: src/transport/gnunet-service-transport.c:2782
+msgid "Transport service is lacking key configuration settings. Exiting.\n"
+msgstr ""
+
+#: src/transport/gnunet-communicator-tcp.c:2393
+msgid "GNUnet TCP communicator"
+msgstr ""
+
+#: src/transport/gnunet-communicator-udp.c:2954
+msgid "GNUnet UDP communicator"
+msgstr ""
+
+#: src/transport/gnunet-communicator-unix.c:802
+#, fuzzy
+msgid ""
+"Maximum number of UNIX connections exceeded, dropping incoming message\n"
+msgstr "Maximale Anzahl der Verbindungen ist %u\n"
+
+#: src/transport/gnunet-communicator-unix.c:1073
+#: src/transport/plugin_transport_unix.c:1403
+#, c-format
+msgid "Cannot create path to `%s'\n"
+msgstr "Pfad zu »%s« kann nicht erstellt werden\n"
+
+#: src/transport/gnunet-communicator-unix.c:1162
+msgid "GNUnet UNIX domain socket communicator"
+msgstr ""
+
+#: src/transport/gnunet-service-transport_ats.c:141
 msgid "# Addresses given to ATS"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:446
+#: src/transport/gnunet-service-transport.c:448
 msgid "# messages dropped due to slow client"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:816
+#: src/transport/gnunet-service-transport.c:817
 msgid "# bytes payload dropped (other peer was not connected)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:1549
+#: src/transport/gnunet-service-transport.c:1550
 msgid "# bytes payload discarded due to not connected peer"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:1709
+#: src/transport/gnunet-service-transport.c:1710
 msgid "# bytes total received"
 msgstr "# Bytes insgesamt empfangen"
 
-#: src/transport/gnunet-service-transport.c:1806
+#: src/transport/gnunet-service-transport.c:1807
 msgid "# bytes payload received"
 msgstr "# Bytes Nutzdaten empfangen"
 
-#: src/transport/gnunet-service-transport.c:2123
-#: src/transport/gnunet-service-transport.c:2595
+#: src/transport/gnunet-service-transport.c:2124
+#: src/transport/gnunet-service-transport.c:2596
 msgid "# disconnects due to blacklist"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:2599
+#: src/transport/gnunet-service-transport.c:2600
 #, fuzzy, c-format
 msgid "Disallowing connection to peer `%s' on transport %s\n"
 msgstr "Anwendung `%s' konnte nicht initialisiert werden.\n"
 
-#: src/transport/gnunet-service-transport.c:2707
+#: src/transport/gnunet-service-transport.c:2708
 #, c-format
 msgid "Adding blacklisting entry for peer `%s'\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:2716
+#: src/transport/gnunet-service-transport.c:2717
 #, c-format
 msgid "Adding blacklisting entry for peer `%s':`%s'\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:2781
-msgid "Transport service is lacking key configuration settings. Exiting.\n"
-msgstr ""
-
-#: src/transport/gnunet-service-transport_hello.c:193
+#: src/transport/gnunet-service-transport_hello.c:195
 msgid "# refreshed my HELLO"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:804
+#: src/transport/gnunet-service-transport_neighbours.c:805
 #, fuzzy
 msgid "# session creation failed"
 msgstr " Verbindung fehlgeschlagen\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1051
+#: src/transport/gnunet-service-transport_neighbours.c:1052
 msgid "# DISCONNECT messages sent"
 msgstr "# DISCONNECT-Meldungen empfangen"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1174
+#: src/transport/gnunet-service-transport_neighbours.c:1175
 msgid "# disconnects due to quota of 0"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1322
-#: src/transport/gnunet-service-transport_neighbours.c:1783
+#: src/transport/gnunet-service-transport_neighbours.c:1323
+#: src/transport/gnunet-service-transport_neighbours.c:1784
 #, fuzzy
 msgid "# bytes in message queue for other peers"
 msgstr "# Bytes ausgehender Nachrichten verworfen"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1327
+#: src/transport/gnunet-service-transport_neighbours.c:1328
 #, fuzzy
 msgid "# messages transmitted to other peers"
 msgstr "# Bytes des Typs %d übertragen"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1333
+#: src/transport/gnunet-service-transport_neighbours.c:1334
 msgid "# transmission failures for messages to other peers"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1393
+#: src/transport/gnunet-service-transport_neighbours.c:1394
 msgid "# messages timed out while in transport queue"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1477
+#: src/transport/gnunet-service-transport_neighbours.c:1478
 msgid "# KEEPALIVES sent"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1513
+#: src/transport/gnunet-service-transport_neighbours.c:1514
 msgid "# KEEPALIVE messages discarded (peer unknown)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1521
+#: src/transport/gnunet-service-transport_neighbours.c:1522
 msgid "# KEEPALIVE messages discarded (no session)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1531
+#: src/transport/gnunet-service-transport_neighbours.c:1532
 msgid "# KEEPALIVES received in good order"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1576
+#: src/transport/gnunet-service-transport_neighbours.c:1577
 msgid "# KEEPALIVE_RESPONSEs discarded (not connected)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1585
+#: src/transport/gnunet-service-transport_neighbours.c:1586
 msgid "# KEEPALIVE_RESPONSEs discarded (not expected)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1593
+#: src/transport/gnunet-service-transport_neighbours.c:1594
 msgid "# KEEPALIVE_RESPONSEs discarded (address changed)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1602
+#: src/transport/gnunet-service-transport_neighbours.c:1603
 msgid "# KEEPALIVE_RESPONSEs discarded (no nonce)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1607
+#: src/transport/gnunet-service-transport_neighbours.c:1608
 msgid "# KEEPALIVE_RESPONSEs discarded (bad nonce)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1613
+#: src/transport/gnunet-service-transport_neighbours.c:1614
 msgid "# KEEPALIVE_RESPONSEs received (OK)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1680
+#: src/transport/gnunet-service-transport_neighbours.c:1681
 msgid "# messages discarded due to lack of neighbour record"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1714
+#: src/transport/gnunet-service-transport_neighbours.c:1715
 #, fuzzy
 msgid "# bandwidth quota violations by other peers"
 msgstr "Verfolgt die Bandbreitennutzung von gnunetd"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1729
+#: src/transport/gnunet-service-transport_neighbours.c:1730
 msgid "# ms throttling suggested"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1852
+#: src/transport/gnunet-service-transport_neighbours.c:1853
 #, fuzzy, c-format
 msgid "Failed to send SYN message to peer `%s'\n"
 msgstr "Fehler beim Parsen der Gerätedaten von `%s' bei %s:%d.\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1872
+#: src/transport/gnunet-service-transport_neighbours.c:1873
 msgid "# Failed attempts to switch addresses (failed to send SYN CONT)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1911
+#: src/transport/gnunet-service-transport_neighbours.c:1912
 #, fuzzy
 msgid "# SYN messages sent"
 msgstr "# DISCONNECT-Meldungen empfangen"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1928
+#: src/transport/gnunet-service-transport_neighbours.c:1929
 #, fuzzy, c-format
 msgid "Failed to transmit SYN message to %s\n"
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1958
+#: src/transport/gnunet-service-transport_neighbours.c:1959
 msgid "# Failed attempts to switch addresses (failed to send SYN)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:2026
+#: src/transport/gnunet-service-transport_neighbours.c:2027
 #, fuzzy, c-format
 msgid "Failed to send SYN_ACK message to peer `%s' using address `%s'\n"
 msgstr "Fehler beim Senden der `%s' Nachricht an gnunetd\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:2080
+#: src/transport/gnunet-service-transport_neighbours.c:2081
 #, fuzzy
 msgid "# SYN_ACK messages sent"
 msgstr "# verschlüsselter PONG Nachrichten gesendet"
 
-#: src/transport/gnunet-service-transport_neighbours.c:2097
+#: src/transport/gnunet-service-transport_neighbours.c:2098
 #, fuzzy, c-format
 msgid "Failed to transmit SYN_ACK message to %s\n"
 msgstr "Fehler beim Aktualisieren der Daten des Moduls `%s'\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:2260
+#: src/transport/gnunet-service-transport_neighbours.c:2261
 #, fuzzy
 msgid "# SYN messages received"
 msgstr "# PING Nachrichten erstellt"
 
-#: src/transport/gnunet-service-transport_neighbours.c:2265
+#: src/transport/gnunet-service-transport_neighbours.c:2266
 #, c-format
 msgid "SYN request from peer `%s' ignored due impending shutdown\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:2652
+#: src/transport/gnunet-service-transport_neighbours.c:2653
 msgid "# Attempts to switch addresses"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3137
+#: src/transport/gnunet-service-transport_neighbours.c:3138
 #, fuzzy
 msgid "# SYN_ACK messages received"
 msgstr "# SESSION_ACK-Meldungen empfangen"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3145
+#: src/transport/gnunet-service-transport_neighbours.c:3146
 #, fuzzy
 msgid "# unexpected SYN_ACK messages (no peer)"
 msgstr "# verschlüsselter PONG Nachrichten gesendet"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3163
-#: src/transport/gnunet-service-transport_neighbours.c:3187
+#: src/transport/gnunet-service-transport_neighbours.c:3164
+#: src/transport/gnunet-service-transport_neighbours.c:3188
 #, fuzzy
 msgid "# unexpected SYN_ACK messages (not ready)"
 msgstr "# verschlüsselter PONG Nachrichten gesendet"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3199
+#: src/transport/gnunet-service-transport_neighbours.c:3200
 #, fuzzy
 msgid "# unexpected SYN_ACK messages (waiting on ATS)"
 msgstr "# verschlüsselter PONG Nachrichten gesendet"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3224
+#: src/transport/gnunet-service-transport_neighbours.c:3225
 msgid "# Successful attempts to switch addresses"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3237
+#: src/transport/gnunet-service-transport_neighbours.c:3238
 #, fuzzy
 msgid "# unexpected SYN_ACK messages (disconnecting)"
 msgstr "# verschlüsselter PONG Nachrichten gesendet"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3410
+#: src/transport/gnunet-service-transport_neighbours.c:3411
 #, fuzzy
 msgid "# ACK messages received"
 msgstr "# CONNECT_ACK-Meldungen empfangen"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3446
+#: src/transport/gnunet-service-transport_neighbours.c:3447
 #, fuzzy
 msgid "# unexpected ACK messages"
 msgstr "# verschlüsselter PONG Nachrichten gesendet"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3534
+#: src/transport/gnunet-service-transport_neighbours.c:3535
 #, fuzzy
 msgid "# quota messages ignored (malformed)"
 msgstr "# gap Anfragen verworfen: Kollision in RT"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3541
+#: src/transport/gnunet-service-transport_neighbours.c:3542
 #, fuzzy
 msgid "# QUOTA messages received"
 msgstr "# verschlüsselter PONG Nachrichten empfangen"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3581
+#: src/transport/gnunet-service-transport_neighbours.c:3582
 msgid "# disconnect messages ignored (malformed)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3588
+#: src/transport/gnunet-service-transport_neighbours.c:3589
 #, fuzzy
 msgid "# DISCONNECT messages received"
 msgstr "# verschlüsselter PONG Nachrichten empfangen"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3599
+#: src/transport/gnunet-service-transport_neighbours.c:3600
 msgid "# disconnect messages ignored (timestamp)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3734
+#: src/transport/gnunet-service-transport_neighbours.c:3735
 msgid "# disconnected from peer upon explicit request"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_plugins.c:156
+#: src/transport/gnunet-service-transport_plugins.c:158
 msgid "Transport service is lacking NEIGHBOUR_LIMIT option.\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_plugins.c:221
-#: src/transport/gnunet-service-transport_plugins.c:229
-#: src/transport/gnunet-service-transport_plugins.c:237
-#: src/transport/gnunet-service-transport_plugins.c:245
-#: src/transport/gnunet-service-transport_plugins.c:253
-#: src/transport/gnunet-service-transport_plugins.c:261
-#: src/transport/gnunet-service-transport_plugins.c:269
-#: src/transport/gnunet-service-transport_plugins.c:277
-#: src/transport/gnunet-service-transport_plugins.c:285
-#: src/transport/gnunet-service-transport_plugins.c:293
-#: src/transport/gnunet-service-transport_plugins.c:301
+#: src/transport/gnunet-service-transport_plugins.c:223
+#: src/transport/gnunet-service-transport_plugins.c:231
+#: src/transport/gnunet-service-transport_plugins.c:239
+#: src/transport/gnunet-service-transport_plugins.c:247
+#: src/transport/gnunet-service-transport_plugins.c:255
+#: src/transport/gnunet-service-transport_plugins.c:263
+#: src/transport/gnunet-service-transport_plugins.c:271
+#: src/transport/gnunet-service-transport_plugins.c:279
+#: src/transport/gnunet-service-transport_plugins.c:287
+#: src/transport/gnunet-service-transport_plugins.c:295
+#: src/transport/gnunet-service-transport_plugins.c:303
 #, fuzzy, c-format
 msgid "Missing function `%s' in transport plugin for `%s'\n"
 msgstr "Anwendung `%s' konnte nicht initialisiert werden.\n"
 
-#: src/transport/gnunet-service-transport_plugins.c:308
+#: src/transport/gnunet-service-transport_plugins.c:310
 #, fuzzy, c-format
 msgid "Did not load plugin `%s' due to missing functions\n"
 msgstr "Fehler beim Laden des Plugins `%s' bei %s:%d. Plugin wird entladen.\n"
 
-#: src/transport/gnunet-service-transport_validation.c:386
+#: src/transport/gnunet-service-transport_validation.c:388
 msgid "# Addresses in validation map"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:489
-#: src/transport/gnunet-service-transport_validation.c:675
-#: src/transport/gnunet-service-transport_validation.c:995
-#: src/transport/gnunet-service-transport_validation.c:1607
+#: src/transport/gnunet-service-transport_validation.c:491
+#: src/transport/gnunet-service-transport_validation.c:677
+#: src/transport/gnunet-service-transport_validation.c:997
+#: src/transport/gnunet-service-transport_validation.c:1609
 #, fuzzy
 msgid "# validations running"
 msgstr "Sqlite-Datenbank läuft\n"
 
-#: src/transport/gnunet-service-transport_validation.c:530
+#: src/transport/gnunet-service-transport_validation.c:532
 #, fuzzy
 msgid "# address records discarded (timeout)"
 msgstr "# verworfener Adressdatensätze"
 
-#: src/transport/gnunet-service-transport_validation.c:578
+#: src/transport/gnunet-service-transport_validation.c:580
 #, fuzzy
 msgid "# address records discarded (blacklist)"
 msgstr "# verworfener Adressdatensätze"
 
-#: src/transport/gnunet-service-transport_validation.c:666
+#: src/transport/gnunet-service-transport_validation.c:668
 msgid "# PINGs for address validation sent"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:746
+#: src/transport/gnunet-service-transport_validation.c:748
 msgid "# validations delayed by global throttle"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:783
+#: src/transport/gnunet-service-transport_validation.c:785
 msgid "# address revalidations started"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1121
+#: src/transport/gnunet-service-transport_validation.c:1123
 #, fuzzy
 msgid "# PING message for different peer received"
 msgstr "# PING Nachrichten erstellt"
 
-#: src/transport/gnunet-service-transport_validation.c:1172
+#: src/transport/gnunet-service-transport_validation.c:1174
 #, c-format
 msgid "Plugin `%s' not available, cannot confirm having this address\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1185
+#: src/transport/gnunet-service-transport_validation.c:1187
 msgid "# failed address checks during validation"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1188
+#: src/transport/gnunet-service-transport_validation.c:1190
 #, c-format
 msgid "Address `%s' is not one of my addresses, not confirming PING\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1196
+#: src/transport/gnunet-service-transport_validation.c:1198
 msgid "# successful address checks during validation"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1209
+#: src/transport/gnunet-service-transport_validation.c:1211
 #, c-format
 msgid ""
 "Not confirming PING from peer `%s' with address `%s' since I cannot confirm "
 "having this address.\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1264
+#: src/transport/gnunet-service-transport_validation.c:1266
 #, c-format
 msgid "Failed to create PONG signature for peer `%s'\n"
 msgstr "PONG-Signatur für Knoten »%s« konnte nicht erstellt werden\n"
 
-#: src/transport/gnunet-service-transport_validation.c:1315
+#: src/transport/gnunet-service-transport_validation.c:1317
 msgid "# PONGs unicast via reliable transport"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1324
+#: src/transport/gnunet-service-transport_validation.c:1326
 msgid "# PONGs multicast to all available addresses"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1497
+#: src/transport/gnunet-service-transport_validation.c:1499
 msgid "# PONGs dropped, no matching pending validation"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1515
+#: src/transport/gnunet-service-transport_validation.c:1517
 msgid "# PONGs dropped, signature expired"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1570
+#: src/transport/gnunet-service-transport_validation.c:1572
 msgid "# validations succeeded"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1625
+#: src/transport/gnunet-service-transport_validation.c:1627
 msgid "# HELLOs given to peerinfo"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:411
+#: src/transport/gnunet-transport.c:413
 #, c-format
 msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:421
+#: src/transport/gnunet-transport.c:423
 #, c-format
 msgid "Received %llu bytes/s (%llu bytes in %s)\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:465
+#: src/transport/gnunet-transport.c:467
 #, fuzzy, c-format
 msgid "Failed to connect to `%s'\n"
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
 
-#: src/transport/gnunet-transport.c:478
+#: src/transport/gnunet-transport.c:480
 #, fuzzy, c-format
 msgid "Failed to resolve address for peer `%s'\n"
 msgstr "Adresse des Knotens `%s' konnte nicht ermittelt werden.\n"
 
-#: src/transport/gnunet-transport.c:492
+#: src/transport/gnunet-transport.c:494
 #, fuzzy
 msgid "Failed to list connections, timeout occurred\n"
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
 
-#: src/transport/gnunet-transport.c:525
+#: src/transport/gnunet-transport.c:527
 #, c-format
 msgid "Transmitting %u bytes\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:559
+#: src/transport/gnunet-transport.c:561
 #, c-format
 msgid ""
 "Successfully connected to `%s', starting to send benchmark data in %u Kb "
 "blocks\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:590
+#: src/transport/gnunet-transport.c:592
 #, c-format
 msgid "Disconnected from peer `%s' while benchmarking\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:614 src/transport/gnunet-transport.c:643
+#: src/transport/gnunet-transport.c:616 src/transport/gnunet-transport.c:645
 #, c-format
 msgid "%24s: %-17s %4s   (%u connections in total)\n"
 msgstr "%24s: %-17s %4s   (%u Verbindungen insgesamt)\n"
 
-#: src/transport/gnunet-transport.c:616
+#: src/transport/gnunet-transport.c:618
 msgid "Connected to"
 msgstr "Verbunden mit"
 
-#: src/transport/gnunet-transport.c:645
+#: src/transport/gnunet-transport.c:647
 msgid "Disconnected from"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:680
+#: src/transport/gnunet-transport.c:682
 #, fuzzy, c-format
 msgid "Received %u bytes\n"
 msgstr "Dateien aus dem GNUnet herunterladen."
 
-#: src/transport/gnunet-transport.c:717
+#: src/transport/gnunet-transport.c:719
 #, c-format
 msgid "Peer `%s': %s %s in state `%s' until %s\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:729
+#: src/transport/gnunet-transport.c:731
 #, c-format
 msgid "Peer `%s': %s %s\n"
 msgstr "Knoten »%s«: %s %s\n"
 
-#: src/transport/gnunet-transport.c:1142
+#: src/transport/gnunet-transport.c:1144
 #, fuzzy
 msgid "Monitor disconnected from transport service. Reconnecting.\n"
 msgstr "Verbindung zum Transportdienst konnte nicht hergestellt werden\n"
 
-#: src/transport/gnunet-transport.c:1249
+#: src/transport/gnunet-transport.c:1251
 #, c-format
 msgid ""
 "Multiple operations given. Please choose only one operation: %s, %s, %s, %s, "
 "%s, %s %s\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1262
+#: src/transport/gnunet-transport.c:1264
 #, c-format
 msgid ""
 "No operation given. Please choose one operation: %s, %s, %s, %s, %s, %s, %s\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1292
+#: src/transport/gnunet-transport.c:1294
 #, fuzzy
 msgid "Failed to connect to transport service for disconnection\n"
 msgstr "Verbindung zum Transportdienst konnte nicht hergestellt werden\n"
 
-#: src/transport/gnunet-transport.c:1298
+#: src/transport/gnunet-transport.c:1300
 msgid "Blacklisting request in place, stop with CTRL-C\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1323 src/transport/gnunet-transport.c:1353
-#: src/transport/gnunet-transport.c:1406
+#: src/transport/gnunet-transport.c:1325 src/transport/gnunet-transport.c:1355
+#: src/transport/gnunet-transport.c:1408
 msgid "Failed to connect to transport service\n"
 msgstr "Verbindung zum Transportdienst konnte nicht hergestellt werden\n"
 
-#: src/transport/gnunet-transport.c:1360
+#: src/transport/gnunet-transport.c:1362
 msgid "Starting to receive benchmark data\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1431
+#: src/transport/gnunet-transport.c:1433
 #, fuzzy
 msgid "print information for all peers (instead of only connected peers)"
 msgstr "Informationen über verbundene Knoten ausgeben."
 
-#: src/transport/gnunet-transport.c:1435
+#: src/transport/gnunet-transport.c:1437
 msgid "measure how fast we are receiving data from all peers (until CTRL-C)"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1439
+#: src/transport/gnunet-transport.c:1441
 msgid "disconnect from a peer"
 msgstr "Verbindung zu einem Knoten trennen"
 
-#: src/transport/gnunet-transport.c:1443
+#: src/transport/gnunet-transport.c:1445
 msgid "provide information about all current connections (once)"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1451
+#: src/transport/gnunet-transport.c:1453
 msgid ""
 "provide information about all connects and disconnect events (continuously)"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1455
+#: src/transport/gnunet-transport.c:1457
 msgid "do not resolve hostnames"
 msgstr "Keine Rechnernamen auflösen"
 
-#: src/transport/gnunet-transport.c:1460
-#: src/transport/gnunet-transport-profiler.c:639
+#: src/transport/gnunet-transport.c:1462
+#: src/transport/gnunet-transport-profiler.c:641
 msgid "peer identity"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1464
+#: src/transport/gnunet-transport.c:1466
 msgid "monitor plugin sessions"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1469
+#: src/transport/gnunet-transport.c:1471
 msgid "send data for benchmarking to the other peer (until CTRL-C)"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1480
-#: src/transport/gnunet-transport-profiler.c:650
+#: src/transport/gnunet-transport.c:1482
+#: src/transport/gnunet-transport-profiler.c:652
 msgid "Direct access to transport service."
 msgstr "Direkter Zugriff auf den Transportdienst"
 
-#: src/transport/gnunet-transport-profiler.c:217
+#: src/transport/gnunet-transport-profiler.c:219
 #, c-format
 msgid "%llu B in %llu ms == %.2f KB/s!\n"
 msgstr ""
 
-#: src/transport/gnunet-transport-profiler.c:615
+#: src/transport/gnunet-transport-profiler.c:617
 msgid "send data to peer"
 msgstr ""
 
-#: src/transport/gnunet-transport-profiler.c:619
+#: src/transport/gnunet-transport-profiler.c:621
 #, fuzzy
 msgid "receive data from peer"
 msgstr "# Bytes des Typs %d empfangen"
 
-#: src/transport/gnunet-transport-profiler.c:624
+#: src/transport/gnunet-transport-profiler.c:626
 msgid "iterations"
 msgstr ""
 
-#: src/transport/gnunet-transport-profiler.c:629
+#: src/transport/gnunet-transport-profiler.c:631
 #, fuzzy
 msgid "number of messages to send"
 msgstr "Anzahl an Durchläufen"
 
-#: src/transport/gnunet-transport-profiler.c:634
+#: src/transport/gnunet-transport-profiler.c:636
 msgid "message size to use"
 msgstr ""
 
-#: src/transport/plugin_transport_http_client.c:1472
-#: src/transport/plugin_transport_http_server.c:2310
-#: src/transport/plugin_transport_http_server.c:3524
-#: src/transport/plugin_transport_tcp.c:3889
-#: src/transport/plugin_transport_tcp.c:3896
-#: src/transport/plugin_transport_xt.c:3897
-#: src/transport/plugin_transport_xt.c:3904
+#: src/transport/plugin_transport_http_client.c:1474
+#: src/transport/plugin_transport_http_server.c:2312
+#: src/transport/plugin_transport_http_server.c:3530
+#: src/transport/plugin_transport_tcp.c:3895
+#: src/transport/plugin_transport_tcp.c:3902
+#: src/transport/plugin_transport_xt.c:3899
+#: src/transport/plugin_transport_xt.c:3906
 msgid "TCP_STEALTH not supported on this platform.\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_client.c:2113
+#: src/transport/plugin_transport_http_client.c:2115
 #, c-format
 msgid "Could not initialize curl multi handle, failed to start %s plugin!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_client.c:2162
-#: src/transport/plugin_transport_http_server.c:3239
+#: src/transport/plugin_transport_http_client.c:2164
+#: src/transport/plugin_transport_http_server.c:3245
 #, fuzzy, c-format
 msgid "Shutting down plugin `%s'\n"
 msgstr "Collection `%s' begonnen.\n"
 
-#: src/transport/plugin_transport_http_client.c:2179
-#: src/transport/plugin_transport_http_server.c:3309
+#: src/transport/plugin_transport_http_client.c:2181
+#: src/transport/plugin_transport_http_server.c:3315
 #, fuzzy, c-format
 msgid "Shutdown for plugin `%s' complete\n"
 msgstr "GNUnet wurde erfolgreich heruntergefahren.\n"
 
-#: src/transport/plugin_transport_http_client.c:2213
+#: src/transport/plugin_transport_http_client.c:2215
 #, fuzzy, c-format
 msgid "Maximum number of requests is %u\n"
 msgstr "Maximale Anzahl der Verbindungen ist %u\n"
 
-#: src/transport/plugin_transport_http_server.c:1754
+#: src/transport/plugin_transport_http_server.c:1756
 #, c-format
 msgid ""
 "Access from connection %p (%u of %u) for `%s' `%s' url `%s' with upload data "
 "size %u\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2026
+#: src/transport/plugin_transport_http_server.c:2028
 #, c-format
 msgid "Accepting connection (%u of %u) from `%s'\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2034
+#: src/transport/plugin_transport_http_server.c:2036
 #, c-format
 msgid ""
 "Server reached maximum number connections (%u), rejecting new connection\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2184
+#: src/transport/plugin_transport_http_server.c:2186
 msgid ""
 "Could not create a new TLS certificate, program `gnunet-transport-"
 "certificate-creation' could not be started!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2207
+#: src/transport/plugin_transport_http_server.c:2209
 #, c-format
 msgid "No usable TLS certificate found and creating one at `%s/%s' failed!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2336
+#: src/transport/plugin_transport_http_server.c:2338
 msgid "Could not load or create server certificate! Loading plugin failed!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2648
+#: src/transport/plugin_transport_http_server.c:2654
 msgid "Require valid port number for service in configuration!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2813
+#: src/transport/plugin_transport_http_server.c:2819
 #, c-format
 msgid "Found %u addresses to report to NAT service\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2899
-#: src/transport/plugin_transport_udp.c:3621
-#: src/transport/plugin_transport_xu.c:2047
+#: src/transport/plugin_transport_http_server.c:2905
+#: src/transport/plugin_transport_udp.c:3627
+#: src/transport/plugin_transport_xu.c:2049
 msgid "Disabling IPv6 since it is not supported on this system!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3005
+#: src/transport/plugin_transport_http_server.c:3011
 #, c-format
 msgid "IPv4 support is %s\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3020
+#: src/transport/plugin_transport_http_server.c:3026
 #, c-format
 msgid "IPv6 support is %s\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3026
+#: src/transport/plugin_transport_http_server.c:3032
 msgid "Neither IPv4 nor IPv6 are enabled! Fix in configuration\n"
 msgstr ""
 "Weder IPv4 noch IPv6 sind aktiviert! Bearbeiten Sie die Konfiguration\n"
 
-#: src/transport/plugin_transport_http_server.c:3037
+#: src/transport/plugin_transport_http_server.c:3043
 msgid "Port is required! Fix in configuration\n"
 msgstr "Port ist erforderlich! Bearbeiten Sie die Konfiguration\n"
 
-#: src/transport/plugin_transport_http_server.c:3043
+#: src/transport/plugin_transport_http_server.c:3049
 #, c-format
 msgid "Using port %u\n"
 msgstr "Port %u wird verwendet\n"
 
-#: src/transport/plugin_transport_http_server.c:3062
+#: src/transport/plugin_transport_http_server.c:3068
 #, c-format
 msgid "Specific IPv4 address `%s' in configuration file is invalid!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3097
+#: src/transport/plugin_transport_http_server.c:3103
 #, c-format
 msgid "Specific IPv6 address `%s' in configuration file is invalid!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3172
+#: src/transport/plugin_transport_http_server.c:3178
 #, c-format
 msgid "Using external hostname `%s'\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3193
+#: src/transport/plugin_transport_http_server.c:3199
 #, fuzzy, c-format
 msgid "Notifying transport only about hostname `%s'\n"
 msgstr "Teste Transport(e) %s\n"
 
-#: src/transport/plugin_transport_http_server.c:3210
+#: src/transport/plugin_transport_http_server.c:3216
 #, c-format
 msgid "Maximum number of connections is %u\n"
 msgstr "Maximale Anzahl der Verbindungen ist %u\n"
 
-#: src/transport/plugin_transport_http_server.c:3536
+#: src/transport/plugin_transport_http_server.c:3542
 msgid "Unable to compile URL regex\n"
 msgstr ""
 
-#: src/transport/plugin_transport_smtp.c:221
+#: src/transport/plugin_transport_smtp.c:223
 #, fuzzy, c-format
 msgid "Received malformed message via %s. Ignored.\n"
 msgstr ""
 "Es wurde eine ungültige Nachricht per SMTP empfangen (ungültige Größe).\n"
 
-#: src/transport/plugin_transport_smtp.c:308
+#: src/transport/plugin_transport_smtp.c:310
 #, fuzzy
 msgid "SMTP filter string to invalid, lacks ': '\n"
 msgstr "SMTP Filterstring zu lang, wurde auf `%s' abgeschnitten\n"
 
-#: src/transport/plugin_transport_smtp.c:317
+#: src/transport/plugin_transport_smtp.c:319
 #, c-format
 msgid "SMTP filter string to long, capped to `%s'\n"
 msgstr "SMTP-Filterzeichenkette zu lang, wurde auf »%s« abgeschnitten\n"
 
-#: src/transport/plugin_transport_smtp.c:412
-#: src/transport/plugin_transport_smtp.c:422
-#: src/transport/plugin_transport_smtp.c:435
-#: src/transport/plugin_transport_smtp.c:454
-#: src/transport/plugin_transport_smtp.c:477
-#: src/transport/plugin_transport_smtp.c:485
-#: src/transport/plugin_transport_smtp.c:498
-#: src/transport/plugin_transport_smtp.c:509
+#: src/transport/plugin_transport_smtp.c:414
+#: src/transport/plugin_transport_smtp.c:424
+#: src/transport/plugin_transport_smtp.c:437
+#: src/transport/plugin_transport_smtp.c:456
+#: src/transport/plugin_transport_smtp.c:479
+#: src/transport/plugin_transport_smtp.c:487
+#: src/transport/plugin_transport_smtp.c:500
+#: src/transport/plugin_transport_smtp.c:511
 #, c-format
 msgid "SMTP: `%s' failed: %s.\n"
 msgstr "SMTP: »%s« fehlgeschlagen: %s.\n"
 
-#: src/transport/plugin_transport_smtp.c:650
+#: src/transport/plugin_transport_smtp.c:652
 msgid "No email-address specified, can not start SMTP transport.\n"
 msgstr ""
 "Keine E-Mail-Adresse angegeben, SMTP-Übertragung kann nicht gestartet "
 "werden.\n"
 
-#: src/transport/plugin_transport_smtp.c:662
+#: src/transport/plugin_transport_smtp.c:664
 msgid "# bytes received via SMTP"
 msgstr "# Bytes empfangen über SMTP"
 
-#: src/transport/plugin_transport_smtp.c:663
+#: src/transport/plugin_transport_smtp.c:665
 msgid "# bytes sent via SMTP"
 msgstr "# Bytes gesendet über SMTP"
 
-#: src/transport/plugin_transport_smtp.c:665
+#: src/transport/plugin_transport_smtp.c:667
 msgid "# bytes dropped by SMTP (outgoing)"
 msgstr "# Bytes verworfen von SMTP (ausgehend)"
 
-#: src/transport/plugin_transport_tcp.c:1545
-#: src/transport/plugin_transport_tcp.c:2871
-#: src/transport/plugin_transport_xt.c:1551
-#: src/transport/plugin_transport_xt.c:2877
+#: src/transport/plugin_transport_tcp.c:1551
+#: src/transport/plugin_transport_tcp.c:2877
+#: src/transport/plugin_transport_xt.c:1553
+#: src/transport/plugin_transport_xt.c:2879
 #, c-format
 msgid "Unexpected address length: %u bytes\n"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:1728
-#: src/transport/plugin_transport_tcp.c:1952
-#: src/transport/plugin_transport_tcp.c:3135
-#: src/transport/plugin_transport_tcp.c:4012
-#: src/transport/plugin_transport_xt.c:1734
-#: src/transport/plugin_transport_xt.c:1958
-#: src/transport/plugin_transport_xt.c:3141
+#: src/transport/plugin_transport_tcp.c:1734
+#: src/transport/plugin_transport_tcp.c:1958
+#: src/transport/plugin_transport_tcp.c:3141
+#: src/transport/plugin_transport_tcp.c:4018
+#: src/transport/plugin_transport_xt.c:1736
+#: src/transport/plugin_transport_xt.c:1960
+#: src/transport/plugin_transport_xt.c:3143
 msgid "# TCP sessions active"
 msgstr "# aktive TCP-Sitzungen"
 
-#: src/transport/plugin_transport_tcp.c:1770
-#: src/transport/plugin_transport_tcp.c:1934
-#: src/transport/plugin_transport_tcp.c:2058
-#: src/transport/plugin_transport_tcp.c:2131
-#: src/transport/plugin_transport_tcp.c:2231
-#: src/transport/plugin_transport_tcp.c:2256
-#: src/transport/plugin_transport_xt.c:1776
-#: src/transport/plugin_transport_xt.c:1940
-#: src/transport/plugin_transport_xt.c:2064
-#: src/transport/plugin_transport_xt.c:2137
-#: src/transport/plugin_transport_xt.c:2237
-#: src/transport/plugin_transport_xt.c:2262
+#: src/transport/plugin_transport_tcp.c:1776
+#: src/transport/plugin_transport_tcp.c:1940
+#: src/transport/plugin_transport_tcp.c:2064
+#: src/transport/plugin_transport_tcp.c:2137
+#: src/transport/plugin_transport_tcp.c:2237
+#: src/transport/plugin_transport_tcp.c:2262
+#: src/transport/plugin_transport_xt.c:1778
+#: src/transport/plugin_transport_xt.c:1942
+#: src/transport/plugin_transport_xt.c:2066
+#: src/transport/plugin_transport_xt.c:2139
+#: src/transport/plugin_transport_xt.c:2239
+#: src/transport/plugin_transport_xt.c:2264
 msgid "# bytes currently in TCP buffers"
 msgstr "# Bytes derzeit in TCP-Puffern"
 
-#: src/transport/plugin_transport_tcp.c:1773
-#: src/transport/plugin_transport_xt.c:1779
+#: src/transport/plugin_transport_tcp.c:1779
+#: src/transport/plugin_transport_xt.c:1781
 msgid "# bytes discarded by TCP (disconnect)"
 msgstr "# Bytes verworfen von TCP (unterbrochen)"
 
-#: src/transport/plugin_transport_tcp.c:2061
-#: src/transport/plugin_transport_xt.c:2067
+#: src/transport/plugin_transport_tcp.c:2067
+#: src/transport/plugin_transport_xt.c:2069
 msgid "# bytes discarded by TCP (timeout)"
 msgstr "# Bytes verworfen von TCP (Zeitüberschreitung)"
 
-#: src/transport/plugin_transport_tcp.c:2135
-#: src/transport/plugin_transport_xt.c:2141
+#: src/transport/plugin_transport_tcp.c:2141
+#: src/transport/plugin_transport_xt.c:2143
 msgid "# bytes transmitted via TCP"
 msgstr "# Bytes über TCP übertragen"
 
-#: src/transport/plugin_transport_tcp.c:2533
-#: src/transport/plugin_transport_xt.c:2539
+#: src/transport/plugin_transport_tcp.c:2539
+#: src/transport/plugin_transport_xt.c:2541
 msgid "# requests to create session with invalid address"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:2709
-#: src/transport/plugin_transport_xt.c:2715
+#: src/transport/plugin_transport_tcp.c:2715
+#: src/transport/plugin_transport_xt.c:2717
 msgid "# transport-service disconnect requests for TCP"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3201
-#: src/transport/plugin_transport_xt.c:3207
+#: src/transport/plugin_transport_tcp.c:3207
+#: src/transport/plugin_transport_xt.c:3209
 #, fuzzy
 msgid "# TCP WELCOME messages received"
 msgstr "# verschlüsselter PONG Nachrichten empfangen"
 
-#: src/transport/plugin_transport_tcp.c:3407
-#: src/transport/plugin_transport_xt.c:3413
+#: src/transport/plugin_transport_tcp.c:3413
+#: src/transport/plugin_transport_xt.c:3415
 msgid "# bytes received via TCP"
 msgstr "# Bytes empfangen über TCP"
 
-#: src/transport/plugin_transport_tcp.c:3458
-#: src/transport/plugin_transport_tcp.c:3516
-#: src/transport/plugin_transport_xt.c:3464
-#: src/transport/plugin_transport_xt.c:3522
+#: src/transport/plugin_transport_tcp.c:3464
+#: src/transport/plugin_transport_tcp.c:3522
+#: src/transport/plugin_transport_xt.c:3466
+#: src/transport/plugin_transport_xt.c:3524
 #, fuzzy
 msgid "# TCP server connections active"
 msgstr " Verbindung fehlgeschlagen\n"
 
-#: src/transport/plugin_transport_tcp.c:3462
-#: src/transport/plugin_transport_xt.c:3468
+#: src/transport/plugin_transport_tcp.c:3468
+#: src/transport/plugin_transport_xt.c:3470
 #, fuzzy
 msgid "# TCP server connect events"
 msgstr "# verbundener Knoten"
 
-#: src/transport/plugin_transport_tcp.c:3468
-#: src/transport/plugin_transport_xt.c:3474
+#: src/transport/plugin_transport_tcp.c:3474
+#: src/transport/plugin_transport_xt.c:3476
 msgid "TCP connection limit reached, suspending server\n"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3470
-#: src/transport/plugin_transport_xt.c:3476
+#: src/transport/plugin_transport_tcp.c:3476
+#: src/transport/plugin_transport_xt.c:3478
 msgid "# TCP service suspended"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3510
-#: src/transport/plugin_transport_xt.c:3516
+#: src/transport/plugin_transport_tcp.c:3516
+#: src/transport/plugin_transport_xt.c:3518
 msgid "# TCP service resumed"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3520
-#: src/transport/plugin_transport_xt.c:3526
+#: src/transport/plugin_transport_tcp.c:3526
+#: src/transport/plugin_transport_xt.c:3528
 msgid "# network-level TCP disconnect events"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3839
-#: src/transport/plugin_transport_xt.c:3847
+#: src/transport/plugin_transport_tcp.c:3845
+#: src/transport/plugin_transport_xt.c:3849
 msgid "Failed to start service.\n"
 msgstr "Fehler beim Starten des Dienstes.\n"
 
-#: src/transport/plugin_transport_tcp.c:4000
+#: src/transport/plugin_transport_tcp.c:4006
 #, c-format
 msgid "TCP transport listening on port %llu\n"
 msgstr "TCP-Transportdienst wartet auf Port %llu\n"
 
-#: src/transport/plugin_transport_tcp.c:4004
+#: src/transport/plugin_transport_tcp.c:4010
 msgid "TCP transport not listening on any port (client only)\n"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:4008
+#: src/transport/plugin_transport_tcp.c:4014
 #, c-format
 msgid "TCP transport advertises itself as being on port %llu\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp_broadcasting.c:166
+#: src/transport/plugin_transport_udp_broadcasting.c:168
 #, fuzzy
 msgid "# Multicast HELLO beacons received via UDP"
 msgstr "# Bytes empfangen über TCP"
 
-#: src/transport/plugin_transport_udp_broadcasting.c:546
+#: src/transport/plugin_transport_udp_broadcasting.c:548
 msgid ""
 "Disabling HELLO broadcasting due to friend-to-friend only configuration!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp_broadcasting.c:563
+#: src/transport/plugin_transport_udp_broadcasting.c:565
 #, fuzzy, c-format
 msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n"
 msgstr "Der Transportdienst auf Port %d konnte nicht gestartet werden.\n"
 
-#: src/transport/plugin_transport_udp.c:3365
+#: src/transport/plugin_transport_udp.c:3371
 #, c-format
 msgid ""
 "UDP could not transmit message to `%s': Network seems down, please check "
 "your network configuration\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3379
+#: src/transport/plugin_transport_udp.c:3385
 msgid ""
 "UDP could not transmit IPv6 message! Please check your network configuration "
 "and disable IPv6 if your connection does not have a global IPv6 address\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3697
-#: src/transport/plugin_transport_udp.c:3796
+#: src/transport/plugin_transport_udp.c:3703
+#: src/transport/plugin_transport_udp.c:3802
 #, fuzzy, c-format
 msgid "Failed to bind UDP socket to %s: %s\n"
 msgstr "UDP-Sockets können nicht geöffnet werden\n"
 
-#: src/transport/plugin_transport_udp.c:3715
-#: src/transport/plugin_transport_xu.c:2141
+#: src/transport/plugin_transport_udp.c:3721
+#: src/transport/plugin_transport_xu.c:2143
 msgid "Disabling IPv4 since it is not supported on this system!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3806
+#: src/transport/plugin_transport_udp.c:3812
 msgid "Failed to open UDP sockets\n"
 msgstr "UDP-Sockets können nicht geöffnet werden\n"
 
-#: src/transport/plugin_transport_udp.c:3877
-#: src/transport/plugin_transport_udp.c:3891
-#: src/transport/plugin_transport_xu.c:2299
-#: src/transport/plugin_transport_xu.c:2313
+#: src/transport/plugin_transport_udp.c:3883
+#: src/transport/plugin_transport_udp.c:3897
+#: src/transport/plugin_transport_xu.c:2301
+#: src/transport/plugin_transport_xu.c:2315
 msgid "must be in [0,65535]"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3923
-#: src/transport/plugin_transport_xu.c:2345
+#: src/transport/plugin_transport_udp.c:3929
+#: src/transport/plugin_transport_xu.c:2347
 #, fuzzy
 msgid "must be valid IPv4 address"
 msgstr "»%s« ist keine gültige IP-Adresse.\n"
 
-#: src/transport/plugin_transport_udp.c:3950
-#: src/transport/plugin_transport_xu.c:2372
+#: src/transport/plugin_transport_udp.c:3956
+#: src/transport/plugin_transport_xu.c:2374
 #, fuzzy
 msgid "must be valid IPv6 address"
 msgstr "»%s« ist keine gültige IP-Adresse.\n"
 
-#: src/transport/plugin_transport_udp.c:4014
+#: src/transport/plugin_transport_udp.c:4020
 #, fuzzy
 msgid "Failed to create UDP network sockets\n"
 msgstr "UDP-Sockets können nicht geöffnet werden\n"
 
-#: src/transport/plugin_transport_unix.c:1401
-#, c-format
-msgid "Cannot create path to `%s'\n"
-msgstr "Pfad zu »%s« kann nicht erstellt werden\n"
-
-#: src/transport/plugin_transport_unix.c:1414
+#: src/transport/plugin_transport_unix.c:1416
 #, fuzzy, c-format
 msgid "Cannot bind to `%s'\n"
 msgstr "Pfad zu »%s« kann nicht erstellt werden\n"
 
-#: src/transport/plugin_transport_unix.c:1814
+#: src/transport/plugin_transport_unix.c:1816
 #, fuzzy
 msgid "Failed to open UNIX listen socket\n"
 msgstr "Datei wurde als `%s' gespeichert.\n"
 
-#: src/transport/plugin_transport_wlan.c:766
+#: src/transport/plugin_transport_wlan.c:768
 msgid "# ACKs sent"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:786
+#: src/transport/plugin_transport_wlan.c:788
 #, fuzzy
 msgid "# Messages defragmented"
 msgstr "# defragmentierter Nachrichten"
 
-#: src/transport/plugin_transport_wlan.c:827
-#: src/transport/plugin_transport_wlan.c:912
+#: src/transport/plugin_transport_wlan.c:829
+#: src/transport/plugin_transport_wlan.c:914
 #, fuzzy
 msgid "# Sessions allocated"
 msgstr "# Sitzungsschlüssel akzeptiert"
 
-#: src/transport/plugin_transport_wlan.c:1033
+#: src/transport/plugin_transport_wlan.c:1035
 #, fuzzy
 msgid "# message fragments sent"
 msgstr "# fragmentierter Nachrichten"
 
-#: src/transport/plugin_transport_wlan.c:1062
+#: src/transport/plugin_transport_wlan.c:1064
 #, fuzzy
 msgid "# messages pending (with fragmentation)"
 msgstr "# defragmentierter Nachrichten"
 
-#: src/transport/plugin_transport_wlan.c:1191
-#: src/transport/plugin_transport_wlan.c:1282
-#: src/transport/plugin_transport_wlan.c:2303
+#: src/transport/plugin_transport_wlan.c:1193
+#: src/transport/plugin_transport_wlan.c:1284
+#: src/transport/plugin_transport_wlan.c:2305
 #, fuzzy
 msgid "# MAC endpoints allocated"
 msgstr "# Sitzungsschlüssel akzeptiert"
 
-#: src/transport/plugin_transport_wlan.c:1565
+#: src/transport/plugin_transport_wlan.c:1567
 #, fuzzy
 msgid "# ACKs received"
 msgstr "# Bytes empfangen über TCP"
 
-#: src/transport/plugin_transport_wlan.c:1634
+#: src/transport/plugin_transport_wlan.c:1636
 msgid "# DATA messages discarded due to CRC32 error"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:1738
+#: src/transport/plugin_transport_wlan.c:1740
 #, fuzzy
 msgid "# HELLO beacons sent"
 msgstr "# Bytes gesendet über TCP"
 
-#: src/transport/plugin_transport_wlan.c:1854
+#: src/transport/plugin_transport_wlan.c:1856
 #, fuzzy
 msgid "# DATA messages received"
 msgstr "# verschlüsselter PONG Nachrichten empfangen"
 
-#: src/transport/plugin_transport_wlan.c:1888
+#: src/transport/plugin_transport_wlan.c:1890
 #, fuzzy
 msgid "# DATA messages processed"
 msgstr "# PING Nachrichten erstellt"
 
-#: src/transport/plugin_transport_wlan.c:2278
+#: src/transport/plugin_transport_wlan.c:2280
 #, c-format
 msgid "Helper binary `%s' not SUID, cannot run WLAN transport\n"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:2300
+#: src/transport/plugin_transport_wlan.c:2302
 #, fuzzy
 msgid "# sessions allocated"
 msgstr "# Sitzungsschlüssel akzeptiert"
 
-#: src/transport/plugin_transport_xt.c:4008
+#: src/transport/plugin_transport_xt.c:4010
 #, fuzzy, c-format
 msgid "XT transport listening on port %llu\n"
 msgstr "TCP-Transportdienst wartet auf Port %llu\n"
 
-#: src/transport/plugin_transport_xt.c:4012
+#: src/transport/plugin_transport_xt.c:4014
 #, fuzzy
 msgid "XT transport not listening on any port (client only)\n"
 msgstr "TCP-Transportdienst wartet auf Port %llu\n"
 
-#: src/transport/plugin_transport_xt.c:4016
+#: src/transport/plugin_transport_xt.c:4018
 #, fuzzy, c-format
 msgid "XT transport advertises itself as being on port %llu\n"
 msgstr "TCP-Transportdienst wartet auf Port %llu\n"
 
-#: src/transport/plugin_transport_xt.c:4020
+#: src/transport/plugin_transport_xt.c:4022
 #, fuzzy
 msgid "# XT sessions active"
 msgstr "# aktive TCP-Sitzungen"
 
-#: src/transport/plugin_transport_xu.c:1235
+#: src/transport/plugin_transport_xu.c:1237
 #, c-format
 msgid ""
 "XU could not transmit message to `%s': Network seems down, please check your "
 "network configuration\n"
 msgstr ""
 
-#: src/transport/plugin_transport_xu.c:1249
+#: src/transport/plugin_transport_xu.c:1251
 msgid ""
 "XU could not transmit IPv6 message! Please check your network configuration "
 "and disable IPv6 if your connection does not have a global IPv6 address\n"
 msgstr ""
 
-#: src/transport/plugin_transport_xu.c:2123
-#: src/transport/plugin_transport_xu.c:2222
+#: src/transport/plugin_transport_xu.c:2125
+#: src/transport/plugin_transport_xu.c:2224
 #, fuzzy, c-format
 msgid "Failed to bind XU socket to %s: %s\n"
 msgstr "UDP-Sockets können nicht geöffnet werden\n"
 
-#: src/transport/plugin_transport_xu.c:2232
+#: src/transport/plugin_transport_xu.c:2234
 #, fuzzy
 msgid "Failed to open XU sockets\n"
 msgstr "UDP-Sockets können nicht geöffnet werden\n"
 
-#: src/transport/plugin_transport_xu.c:2396
+#: src/transport/plugin_transport_xu.c:2398
 #, fuzzy
 msgid "Failed to create XU network sockets\n"
 msgstr "UDP-Sockets können nicht geöffnet werden\n"
 
-#: src/transport/tcp_connection_legacy.c:450
+#: src/transport/tcp_connection_legacy.c:452
 #, c-format
 msgid "Access denied to `%s'\n"
 msgstr "Zugriff verweigert auf »%s«\n"
 
-#: src/transport/tcp_connection_legacy.c:467
+#: src/transport/tcp_connection_legacy.c:469
 #, c-format
 msgid "Accepting connection from `%s': %p\n"
 msgstr ""
 
-#: src/transport/tcp_server_legacy.c:472 src/util/service.c:1109
+#: src/transport/tcp_server_legacy.c:474 src/util/service.c:1666
 #, fuzzy, c-format
 msgid "`%s' failed for port %d (%s).\n"
 msgstr "`%s' fehlgeschlagen für Laufwerk %s: %u\n"
 
-#: src/transport/tcp_server_legacy.c:482 src/util/service.c:1119
+#: src/transport/tcp_server_legacy.c:484 src/util/service.c:1676
 #, fuzzy, c-format
 msgid "`%s' failed for port %d (%s): address already in use\n"
 msgstr "`%s' schlug fehl für Port %d: %s. Läuft gnunetd bereits?\n"
 
-#: src/transport/tcp_server_legacy.c:488 src/util/service.c:1125
+#: src/transport/tcp_server_legacy.c:490 src/util/service.c:1682
 #, fuzzy, c-format
 msgid "`%s' failed for `%s': address already in use\n"
 msgstr "%s schlug fehl, Nachrichten Typ %d ist bereits in Verwendung.\n"
 
-#: src/transport/tcp_server_legacy.c:888
+#: src/transport/tcp_server_legacy.c:890
 #, c-format
 msgid ""
 "Processing code for message of type %u did not call "
 "`GNUNET_SERVER_receive_done' after %s\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:337 src/util/service.c:2378
+#: src/transport/tcp_service_legacy.c:339 src/util/service.c:870
 #, c-format
 msgid "Unknown address family %d\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:344
+#: src/transport/tcp_service_legacy.c:346
 #, c-format
 msgid "Access from `%s' denied to service `%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:400 src/util/service.c:437
+#: src/transport/tcp_service_legacy.c:402 src/util/service.c:994
 #, c-format
 msgid "Could not parse IPv4 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:438 src/util/service.c:480
+#: src/transport/tcp_service_legacy.c:440 src/util/service.c:1037
 #, c-format
 msgid "Could not parse IPv6 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:902 src/util/service.c:1040
+#: src/transport/tcp_service_legacy.c:904 src/util/service.c:1597
 msgid "Could not access a pre-bound socket, will try to bind myself\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:951
-#: src/transport/tcp_service_legacy.c:969 src/util/service.c:1192
+#: src/transport/tcp_service_legacy.c:953
+#: src/transport/tcp_service_legacy.c:971 src/util/service.c:1750
 #, c-format
 msgid "Specified value for `%s' of service `%s' is invalid\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:994 src/util/service.c:1224
+#: src/transport/tcp_service_legacy.c:996 src/util/service.c:1783
 #, c-format
 msgid "Could not access pre-bound socket %u, will try to bind myself\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1159
+#: src/transport/tcp_service_legacy.c:1161
 #, fuzzy, c-format
 msgid "Failed to start `%s' at `%s'\n"
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
 
-#: src/transport/tcp_service_legacy.c:1200
+#: src/transport/tcp_service_legacy.c:1202
 #, c-format
 msgid "Service `%s' runs at %s\n"
 msgstr "Dienst »%s« läuft auf %s\n"
 
-#: src/transport/tcp_service_legacy.c:1249 src/util/service.c:1498
+#: src/transport/tcp_service_legacy.c:1251 src/util/service.c:2057
 msgid "Service process failed to initialize\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1253 src/util/service.c:1502
+#: src/transport/tcp_service_legacy.c:1255 src/util/service.c:2061
 msgid "Service process could not initialize server function\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1257 src/util/service.c:1506
+#: src/transport/tcp_service_legacy.c:1259 src/util/service.c:2065
 msgid "Service process failed to report status\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1311 src/util/disk.c:1521
-#: src/util/service.c:1376
+#: src/transport/tcp_service_legacy.c:1313 src/util/disk.c:1525
+#: src/util/service.c:1935
 #, fuzzy, c-format
 msgid "Cannot obtain information about user `%s': %s\n"
 msgstr "Fehler beim Speichern der Konfigurationsdatei: `%s': %s.\n"
 
-#: src/transport/tcp_service_legacy.c:1312 src/util/service.c:1378
+#: src/transport/tcp_service_legacy.c:1314 src/util/service.c:1937
 msgid "No such user"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1325 src/util/service.c:1397
+#: src/transport/tcp_service_legacy.c:1327 src/util/service.c:1956
 #, c-format
 msgid "Cannot change user/group to `%s': %s\n"
 msgstr "Benutzer/Gruppe kann nicht zu »%s« geändert werden: %s\n"
 
-#: src/transport/tcp_service_legacy.c:1396 src/util/service.c:1757
+#: src/transport/tcp_service_legacy.c:1398 src/util/service.c:2318
 msgid "do daemonize (detach from terminal)"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1446 src/util/program.c:277
-#: src/util/service.c:1820
+#: src/transport/tcp_service_legacy.c:1448 src/util/service.c:2382
+#: src/util/service.c:2397
 #, fuzzy, c-format
 msgid "Malformed configuration file `%s', exit ...\n"
 msgstr "Konfigurationsdatei `%s' wurde erzeugt.\n"
 
-#: src/transport/tcp_service_legacy.c:1456 src/util/program.c:297
-#: src/util/service.c:1831
+#: src/transport/tcp_service_legacy.c:1458 src/util/service.c:2409
 #, fuzzy
 msgid "Malformed configuration, exit ...\n"
 msgstr "GNUnet Konfiguration"
 
-#: src/transport/tcp_service_legacy.c:1461 src/util/program.c:290
-#: src/util/service.c:1837
+#: src/transport/tcp_service_legacy.c:1463
 #, fuzzy, c-format
 msgid "Could not access configuration file `%s'\n"
 msgstr "Konfigurationsdatei `%s' konnte nicht geparst werden.\n"
 
-#: src/util/bio.c:179 src/util/bio.c:187
+#: src/transport/transport_api2_communication.c:764
+msgid "Dropped backchanel message: handler not provided by communicator\n"
+msgstr ""
+
+#: src/util/bio.c:181 src/util/bio.c:189
 #, fuzzy, c-format
 msgid "Error reading `%s': %s"
 msgstr "Fehler beim Anlegen des Benutzers"
 
-#: src/util/bio.c:189
+#: src/util/bio.c:191
 msgid "End of file"
 msgstr "Dateiende"
 
-#: src/util/bio.c:246
+#: src/util/bio.c:248
 #, c-format
 msgid "Error reading length of string `%s'"
 msgstr ""
 
-#: src/util/bio.c:256
+#: src/util/bio.c:258
 #, c-format
 msgid "String `%s' longer than allowed (%u > %u)"
 msgstr ""
 
-#: src/util/bio.c:304
+#: src/util/bio.c:306
 #, c-format
 msgid "Serialized metadata `%s' larger than allowed (%u>%u)"
 msgstr ""
 
-#: src/util/bio.c:326
+#: src/util/bio.c:328
 #, c-format
 msgid "Metadata `%s' failed to deserialize"
 msgstr ""
 
-#: src/util/client.c:732
+#: src/util/client.c:734
 msgid "not a valid filename"
 msgstr ""
 
-#: src/util/client.c:923
+#: src/util/client.c:925
 #, c-format
 msgid "Need a non-empty hostname for service `%s'.\n"
 msgstr ""
 
-#: src/util/common_logging.c:257 src/util/common_logging.c:1159
+#: src/util/common_logging.c:259 src/util/common_logging.c:1162
 msgid "DEBUG"
 msgstr "DEBUG"
 
-#: src/util/common_logging.c:259 src/util/common_logging.c:1157
+#: src/util/common_logging.c:261 src/util/common_logging.c:1160
 msgid "INFO"
 msgstr "INFO"
 
-#: src/util/common_logging.c:261 src/util/common_logging.c:1155
+#: src/util/common_logging.c:263 src/util/common_logging.c:1158
 msgid "MESSAGE"
 msgstr ""
 
-#: src/util/common_logging.c:263 src/util/common_logging.c:1153
+#: src/util/common_logging.c:265 src/util/common_logging.c:1156
 msgid "WARNING"
 msgstr "WARNUNG"
 
-#: src/util/common_logging.c:265 src/util/common_logging.c:1151
+#: src/util/common_logging.c:267 src/util/common_logging.c:1154
 msgid "ERROR"
 msgstr "FEHLER"
 
-#: src/util/common_logging.c:267 src/util/common_logging.c:1161
+#: src/util/common_logging.c:269 src/util/common_logging.c:1164
 msgid "NONE"
 msgstr ""
 
-#: src/util/common_logging.c:631 src/util/common_logging.c:661
+#: src/util/common_logging.c:633 src/util/common_logging.c:663
 #, c-format
 msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n"
 msgstr ""
 
-#: src/util/common_logging.c:895
+#: src/util/common_logging.c:898
 #, c-format
 msgid "Message `%.*s' repeated %u times in the last %s\n"
 msgstr ""
 
-#: src/util/common_logging.c:1162
+#: src/util/common_logging.c:1165
 msgid "INVALID"
 msgstr ""
 
-#: src/util/common_logging.c:1455
+#: src/util/common_logging.c:1458
 msgid "unknown address"
 msgstr "Unbekannte Adresse"
 
-#: src/util/common_logging.c:1497
+#: src/util/common_logging.c:1500
 msgid "invalid address"
 msgstr "Ungültige Adresse"
 
-#: src/util/common_logging.c:1515
+#: src/util/common_logging.c:1518
 #, fuzzy, c-format
 msgid "Configuration fails to specify option `%s' in section `%s'!\n"
 msgstr ""
 "Die Konfigurationsdatei muss in der Sektion `%s' unter `%s' ein Verzeichnis "
 "angeben, in dem FS Daten gespeichert werden.\n"
 
-#: src/util/common_logging.c:1536
+#: src/util/common_logging.c:1539
 #, fuzzy, c-format
 msgid ""
 "Configuration specifies invalid value for option `%s' in section `%s': %s\n"
@@ -8379,148 +8198,148 @@ msgstr ""
 "Die Konfigurationsdatei muss in der Sektion `%s' unter `%s' ein Verzeichnis "
 "angeben, in dem FS Daten gespeichert werden.\n"
 
-#: src/util/configuration.c:294
+#: src/util/configuration.c:331
 #, fuzzy, c-format
 msgid "Syntax error while deserializing in line %u\n"
 msgstr "Syntaxfehler in Konfigurationsdatei `%s' in Zeile %d.\n"
 
-#: src/util/configuration.c:361
+#: src/util/configuration.c:398
 #, fuzzy, c-format
 msgid "Error while reading file `%s'\n"
 msgstr "Konfigurationsdatei `%s' konnte nicht geöffnet werden.\n"
 
-#: src/util/configuration.c:970
+#: src/util/configuration.c:1016
 msgid "Not a valid relative time specification"
 msgstr ""
 
-#: src/util/configuration.c:1059
+#: src/util/configuration.c:1105
 #, c-format
 msgid ""
 "Configuration value '%s' for '%s' in section '%s' is not in set of legal "
 "choices\n"
 msgstr ""
 
-#: src/util/configuration.c:1178
+#: src/util/configuration.c:1224
 #, c-format
 msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n"
 msgstr ""
 
-#: src/util/configuration.c:1211
+#: src/util/configuration.c:1257
 #, c-format
 msgid "Missing closing `%s' in option `%s'\n"
 msgstr ""
 
-#: src/util/configuration.c:1279
+#: src/util/configuration.c:1325
 #, c-format
 msgid ""
 "Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined "
 "as an environmental variable\n"
 msgstr ""
 
-#: src/util/container_bloomfilter.c:530
+#: src/util/container_bloomfilter.c:532
 #, c-format
 msgid ""
 "Size of file on disk is incorrect for this Bloom filter (want %llu, have "
 "%llu)\n"
 msgstr ""
 
-#: src/util/crypto_ecc.c:860
+#: src/util/crypto_ecc.c:862
 #, fuzzy, c-format
 msgid "ECC signing failed at %s:%d: %s\n"
 msgstr "`%s' schlug fehl bei %s:%d mit dem Fehler: `%s'.\n"
 
-#: src/util/crypto_ecc.c:915
+#: src/util/crypto_ecc.c:917
 #, fuzzy, c-format
 msgid "EdDSA signing failed at %s:%d: %s\n"
 msgstr "`%s' schlug fehl bei %s:%d mit dem Fehler: `%s'.\n"
 
-#: src/util/crypto_ecc.c:994
+#: src/util/crypto_ecc.c:996
 #, fuzzy, c-format
 msgid "ECDSA signature verification failed at %s:%d: %s\n"
 msgstr "RSA Signaturüberprüfung fehlgeschlagen bei %s:%d: %s\n"
 
-#: src/util/crypto_ecc.c:1055
+#: src/util/crypto_ecc.c:1057
 #, fuzzy, c-format
 msgid "EdDSA signature verification failed at %s:%d: %s\n"
 msgstr "RSA Signaturüberprüfung fehlgeschlagen bei %s:%d: %s\n"
 
-#: src/util/crypto_ecc_setup.c:121 src/util/crypto_ecc_setup.c:160
-#: src/util/crypto_ecc_setup.c:303 src/util/crypto_ecc_setup.c:350
+#: src/util/crypto_ecc_setup.c:123 src/util/crypto_ecc_setup.c:162
+#: src/util/crypto_ecc_setup.c:305 src/util/crypto_ecc_setup.c:352
 #, fuzzy, c-format
 msgid "Could not acquire lock on file `%s': %s...\n"
 msgstr "PID konnte nicht in Datei `%s' geschrieben werden: %s.\n"
 
-#: src/util/crypto_ecc_setup.c:127 src/util/crypto_ecc_setup.c:309
+#: src/util/crypto_ecc_setup.c:129 src/util/crypto_ecc_setup.c:311
 #, fuzzy
 msgid "Creating a new private key.  This may take a while.\n"
 msgstr "Ein neuer Hostkey wird erzeugt (dies kann eine Weile dauern).\n"
 
-#: src/util/crypto_ecc_setup.c:164 src/util/crypto_ecc_setup.c:354
+#: src/util/crypto_ecc_setup.c:166 src/util/crypto_ecc_setup.c:356
 msgid "This may be ok if someone is currently generating a private key.\n"
 msgstr ""
 
-#: src/util/crypto_ecc_setup.c:194 src/util/crypto_ecc_setup.c:396
+#: src/util/crypto_ecc_setup.c:196 src/util/crypto_ecc_setup.c:398
 #, c-format
 msgid ""
 "When trying to read key file `%s' I found %u bytes but I need at least %u.\n"
 msgstr ""
 
-#: src/util/crypto_ecc_setup.c:199 src/util/crypto_ecc_setup.c:400
+#: src/util/crypto_ecc_setup.c:201 src/util/crypto_ecc_setup.c:402
 msgid "This may be ok if someone is currently generating a key.\n"
 msgstr ""
 
-#: src/util/crypto_ecc_setup.c:466
+#: src/util/crypto_ecc_setup.c:468
 #, fuzzy
 msgid "Could not load peer's private key\n"
 msgstr "Anwendung `%s' konnte nicht initialisiert werden.\n"
 
-#: src/util/crypto_random.c:304
+#: src/util/crypto_random.c:306
 #, c-format
 msgid "libgcrypt has not the expected version (version %s is required).\n"
 msgstr ""
 "libgcrypt hat nicht die erwartete Version (Version %s wird vorausgesetzt).\n"
 
-#: src/util/crypto_rsa.c:848
+#: src/util/crypto_rsa.c:850
 #, fuzzy, c-format
 msgid "RSA signing failed at %s:%d: %s\n"
 msgstr "`%s' schlug fehl bei %s:%d mit dem Fehler: `%s'.\n"
 
-#: src/util/crypto_rsa.c:1187
+#: src/util/crypto_rsa.c:1189
 #, 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:1251
+#: src/util/disk.c:1255
 #, fuzzy, c-format
 msgid "Expected `%s' to be a directory!\n"
 msgstr "`%s' erwartet, dass `%s' ein Verzeichnis ist!\n"
 
-#: src/util/dnsparser.c:250
+#: src/util/dnsparser.c:264
 #, c-format
 msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n"
 msgstr ""
 
-#: src/util/dnsparser.c:940
+#: src/util/dnsparser.c:954
 #, c-format
 msgid "Failed to convert UTF-8 name `%s' to DNS IDNA format: %s\n"
 msgstr ""
 
-#: src/util/dnsstub.c:229
+#: src/util/dnsstub.c:231
 #, fuzzy, c-format
 msgid "Could not bind to any port: %s\n"
 msgstr "IP des Hosts `%s' konnte nicht ermittelt werden: %s\n"
 
-#: src/util/dnsstub.c:360
+#: src/util/dnsstub.c:362
 #, c-format
 msgid "Received DNS response that is too small (%u bytes)"
 msgstr ""
 
-#: src/util/dnsstub.c:507
+#: src/util/dnsstub.c:509
 #, fuzzy, c-format
 msgid "Failed to send DNS request to %s: %s\n"
 msgstr "HTTP Anfrage konnte nicht an Host `%s' gesendet werden: %s\n"
 
-#: src/util/dnsstub.c:513
+#: src/util/dnsstub.c:515
 #, c-format
 msgid "Sent DNS request to %s\n"
 msgstr ""
@@ -8590,11 +8409,11 @@ msgstr "Verwenden Sie --help, um eine Liste der Optionen zu erhalten.\n"
 msgid "Missing mandatory option `%s'.\n"
 msgstr "Unbekannte Operation `%s'\n"
 
-#: src/util/getopt_helpers.c:68
+#: src/util/getopt_helpers.c:70
 msgid "print the version number"
 msgstr ""
 
-#: src/util/getopt_helpers.c:113
+#: src/util/getopt_helpers.c:116
 #, c-format
 msgid ""
 "Arguments mandatory for long options are also mandatory for short options.\n"
@@ -8602,124 +8421,124 @@ msgstr ""
 "Argumente, die für lange Optionen zwingend sind, sind auch für kurze "
 "Optionen zwingend.\n"
 
-#: src/util/getopt_helpers.c:201
+#: src/util/getopt_helpers.c:204
 msgid "print this help"
 msgstr ""
 
-#: src/util/getopt_helpers.c:279
+#: src/util/getopt_helpers.c:282
 msgid "be verbose"
 msgstr ""
 
-#: src/util/getopt_helpers.c:420
+#: src/util/getopt_helpers.c:423
 msgid "configure logging to use LOGLEVEL"
 msgstr ""
 
-#: src/util/getopt_helpers.c:500
+#: src/util/getopt_helpers.c:503
 msgid "configure logging to write logs to FILENAME"
 msgstr ""
 
-#: src/util/getopt_helpers.c:522
+#: src/util/getopt_helpers.c:525
 #, fuzzy
 msgid "use configuration file FILENAME"
 msgstr ""
 "Einen Wert aus der Konfigurationsdatei auf der Standardausgabe ausgeben"
 
-#: src/util/getopt_helpers.c:559 src/util/getopt_helpers.c:763
-#: src/util/getopt_helpers.c:830
+#: src/util/getopt_helpers.c:564 src/util/getopt_helpers.c:770
+#: src/util/getopt_helpers.c:839
 #, c-format
 msgid "You must pass a number to the `%s' option.\n"
 msgstr "Sie müssen für die Option »%s« zusätzlich eine Zahl angeben.\n"
 
-#: src/util/getopt_helpers.c:624
+#: src/util/getopt_helpers.c:629
 #, c-format
 msgid "You must pass relative time to the `%s' option.\n"
 msgstr "Sie müssen eine relative Zeit zu der Option »%s« übergeben.\n"
 
-#: src/util/getopt_helpers.c:690
+#: src/util/getopt_helpers.c:695
 #, fuzzy, c-format
 msgid "You must pass absolute time to the `%s' option.\n"
 msgstr "Sie müssen eine relative Zeit zu der Option »%s« übergeben.\n"
 
-#: src/util/getopt_helpers.c:754
+#: src/util/getopt_helpers.c:760
 #, c-format
 msgid "Your input for the '%s' option has to be a non negative number \n"
 msgstr ""
 
-#: src/util/getopt_helpers.c:837
+#: src/util/getopt_helpers.c:846
 #, fuzzy, c-format
 msgid "You must pass a number below %u to the `%s' option.\n"
 msgstr "Sie müssen für die Option »%s« zusätzlich eine Zahl angeben.\n"
 
-#: src/util/getopt_helpers.c:923
+#: src/util/getopt_helpers.c:932
 #, c-format
 msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n"
 msgstr ""
 
-#: src/util/gnunet-config.c:157
+#: src/util/gnunet-config.c:160
 #, fuzzy, c-format
 msgid "failed to load configuration defaults"
 msgstr "Konfiguration konnte nicht aus %s geladen werden\n"
 
-#: src/util/gnunet-config.c:170
-#, c-format
-msgid "--section argument is required\n"
-msgstr ""
-
 #: src/util/gnunet-config.c:173
+#, fuzzy, c-format
+msgid "%s or %s argument is required\n"
+msgstr "Option `%s' macht keinen Sinn ohne die Option `%s'.\n"
+
+#: src/util/gnunet-config.c:181
 #, c-format
 msgid "The following sections are available:\n"
 msgstr ""
 
-#: src/util/gnunet-config.c:224
+#: src/util/gnunet-config.c:232
 #, c-format
 msgid "--option argument required to set value\n"
 msgstr ""
 
-#: src/util/gnunet-config.c:263
+#: src/util/gnunet-config.c:286
 msgid "obtain option of value as a filename (with $-expansion)"
 msgstr ""
 
-#: src/util/gnunet-config.c:268
+#: src/util/gnunet-config.c:291
 msgid "name of the section to access"
 msgstr ""
 
-#: src/util/gnunet-config.c:273
+#: src/util/gnunet-config.c:296
 msgid "name of the option to access"
 msgstr ""
 
-#: src/util/gnunet-config.c:278
+#: src/util/gnunet-config.c:301
 msgid "value to set"
 msgstr ""
 
-#: src/util/gnunet-config.c:282
+#: src/util/gnunet-config.c:305
 #, fuzzy
 msgid "print available configuration sections"
 msgstr "GNUnet Konfiguration"
 
-#: src/util/gnunet-config.c:286
+#: src/util/gnunet-config.c:309
 msgid "write configuration file that only contains delta to defaults"
 msgstr ""
 
-#: src/util/gnunet-config.c:299
+#: src/util/gnunet-config.c:322
 msgid "Manipulate GNUnet configuration files"
 msgstr "GNUnet-Konfigurationsdateien bearbeiten"
 
-#: src/util/gnunet-ecc.c:92
+#: src/util/gnunet-ecc.c:94
 #, c-format
 msgid "Failed to open `%s': %s\n"
 msgstr "»%s« kann nicht geöffnet werden: %s\n"
 
-#: src/util/gnunet-ecc.c:128
+#: src/util/gnunet-ecc.c:130
 #, c-format
 msgid "Generating %u keys like %s, please wait"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:141
+#: src/util/gnunet-ecc.c:143
 #, c-format
 msgid "Generating %u keys, please wait"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:182
+#: src/util/gnunet-ecc.c:184
 #, c-format
 msgid ""
 "\n"
@@ -8728,7 +8547,7 @@ msgstr ""
 "\n"
 "Schreiben in »%s« nicht möglich: %s\n"
 
-#: src/util/gnunet-ecc.c:192
+#: src/util/gnunet-ecc.c:194
 #, c-format
 msgid ""
 "\n"
@@ -8737,94 +8556,94 @@ msgstr ""
 "\n"
 "Abgeschlossen!\n"
 
-#: src/util/gnunet-ecc.c:195
+#: src/util/gnunet-ecc.c:197
 #, c-format
 msgid ""
 "\n"
 "Error, %u keys not generated\n"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:288
+#: src/util/gnunet-ecc.c:290
 #, fuzzy, c-format
 msgid "Hostkeys file `%s' not found\n"
 msgstr "Kommando `%s' wurde nicht gefunden!\n"
 
-#: src/util/gnunet-ecc.c:303
+#: src/util/gnunet-ecc.c:305
 #, c-format
 msgid "Hostkeys file `%s' is empty\n"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:332
+#: src/util/gnunet-ecc.c:334
 #, fuzzy, c-format
 msgid "Could not read hostkey file: %s\n"
 msgstr "PID konnte nicht in Datei `%s' geschrieben werden: %s.\n"
 
-#: src/util/gnunet-ecc.c:389
+#: src/util/gnunet-ecc.c:391
 msgid "No hostkey file specified on command line\n"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:454
+#: src/util/gnunet-ecc.c:456
 msgid "list keys included in a file (for testing)"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:459
+#: src/util/gnunet-ecc.c:461
 msgid "number of keys to list included in a file (for testing)"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:464
+#: src/util/gnunet-ecc.c:466
 msgid "create COUNT public-private key pairs (for testing)"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:468
+#: src/util/gnunet-ecc.c:470
 msgid "print the public key in ASCII format"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:472
+#: src/util/gnunet-ecc.c:474
 msgid "print the private key in ASCII format"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:476
+#: src/util/gnunet-ecc.c:478
 msgid "print the public key in HEX format"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:480
+#: src/util/gnunet-ecc.c:482
 msgid "print examples of ECC operations (used for compatibility testing)"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:496
+#: src/util/gnunet-ecc.c:498
 msgid "Manipulate GNUnet private ECC key files"
 msgstr ""
 
-#: src/util/gnunet-resolver.c:166
+#: src/util/gnunet-resolver.c:168
 msgid "perform a reverse lookup"
 msgstr ""
 
-#: src/util/gnunet-resolver.c:177
+#: src/util/gnunet-resolver.c:179
 msgid "Use build-in GNUnet stub resolver"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:240
+#: src/util/gnunet-scrypt.c:242
 #, fuzzy, c-format
 msgid "Loading hostkey from `%s' failed.\n"
 msgstr "Das Parsen des Hello von `%s' schlug fehl.\n"
 
-#: src/util/gnunet-scrypt.c:315
+#: src/util/gnunet-scrypt.c:317
 msgid "number of bits to require for the proof of work"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:320
+#: src/util/gnunet-scrypt.c:322
 msgid "file with private key, otherwise default is used"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:325
+#: src/util/gnunet-scrypt.c:327
 msgid "file with proof of work, otherwise default is used"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:330
+#: src/util/gnunet-scrypt.c:332
 msgid "time to wait between calculations"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:343
+#: src/util/gnunet-scrypt.c:345
 msgid "Manipulate GNUnet proof of work files"
 msgstr ""
 
@@ -8832,116 +8651,131 @@ msgstr ""
 msgid "No DNS server available. DNS resolution will not be possible.\n"
 msgstr ""
 
-#: src/util/gnunet-uri.c:83
+#: src/util/gnunet-uri.c:85
 #, c-format
 msgid "No URI specified on command line\n"
 msgstr ""
 
-#: src/util/gnunet-uri.c:89
+#: src/util/gnunet-uri.c:91
 #, c-format
 msgid "Invalid URI: does not start with `%s'\n"
 msgstr "URL beginnt nicht mit »%s«\n"
 
-#: src/util/gnunet-uri.c:96
+#: src/util/gnunet-uri.c:98
 #, c-format
 msgid "Invalid URI: fails to specify subsystem\n"
 msgstr ""
 
-#: src/util/gnunet-uri.c:106
+#: src/util/gnunet-uri.c:108
 #, c-format
 msgid "No handler known for subsystem `%s'\n"
 msgstr ""
 
-#: src/util/gnunet-uri.c:168
+#: src/util/gnunet-uri.c:170
 msgid "Perform default-actions for GNUnet URIs"
 msgstr ""
 
-#: src/util/helper.c:333
+#: src/util/helper.c:335
 #, c-format
 msgid "Error reading from `%s': %s\n"
 msgstr "Fehler beim Lesen von »%s«: %s\n"
 
-#: src/util/helper.c:384
+#: src/util/helper.c:386
 #, fuzzy, c-format
 msgid "Failed to parse inbound message from helper `%s'\n"
 msgstr "Fehler beim Parsen der Gerätedaten von `%s' bei %s:%d.\n"
 
-#: src/util/helper.c:604
+#: src/util/helper.c:606
 #, fuzzy, c-format
 msgid "Error writing to `%s': %s\n"
 msgstr "Verbindung zu %u.%u.%u.%u:%u fehlgeschlagen: %s\n"
 
-#: src/util/network.c:134
+#: src/util/network.c:136
 #, c-format
 msgid "Unable to shorten unix path `%s' while keeping name unique\n"
 msgstr ""
 
-#: src/util/network.c:1793 src/util/network.c:1977
+#: src/util/network.c:1794 src/util/network.c:1978
 #, c-format
 msgid ""
 "Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n"
 msgstr ""
 
-#: src/util/os_installation.c:507
+#: src/util/os_installation.c:509
 #, c-format
 msgid ""
 "Could not determine installation path for %s.  Set `%s' environment "
 "variable.\n"
 msgstr ""
 
-#: src/util/os_installation.c:879
+#: src/util/os_installation.c:881
 #, fuzzy, c-format
 msgid "Could not find binary `%s' in PATH!\n"
 msgstr "Knoten `%s' konnte nicht in der Routing Tabelle gefunden werden!\n"
 
-#: src/util/os_installation.c:920
+#: src/util/os_installation.c:922
 #, c-format
 msgid "Binary `%s' exists, but is not SUID\n"
 msgstr ""
 
-#: src/util/os_installation.c:951
+#: src/util/os_installation.c:953
 #, c-format
 msgid "CreateProcess failed for binary %s (%d).\n"
 msgstr ""
 
-#: src/util/os_installation.c:961
+#: src/util/os_installation.c:963
 #, c-format
 msgid "GetExitCodeProcess failed for binary %s (%d).\n"
 msgstr ""
 
-#: src/util/plugin.c:84
+#: src/util/plugin.c:86
 #, c-format
 msgid "Initialization of plugin mechanism failed: %s!\n"
 msgstr "Initialisierung des Plugin-Mechanismus fehlgeschlagen: %s!\n"
 
-#: src/util/plugin.c:149
+#: src/util/plugin.c:151
 #, fuzzy, c-format
 msgid "`%s' failed to resolve method '%s' with error: %s\n"
 msgstr ""
 "`%s' konnte die Methode '%s%s' nicht auflösen. Ort: %s:%d. Fehler: %s\n"
 
-#: src/util/plugin.c:224
+#: src/util/plugin.c:226
 #, fuzzy, c-format
 msgid "`%s' failed for library `%s' with error: %s\n"
 msgstr "`%s' fehlgeschlagen für die Bibliothek `%s'. Ort: %s:%d. Fehler: %s\n"
 
-#: src/util/plugin.c:383
+#: src/util/plugin.c:385
 #, fuzzy
 msgid "Could not determine plugin installation path.\n"
 msgstr "Öffentliche IP-Adresse konnte nicht ermittelt werden.\n"
 
-#: src/util/regex.c:132
+#: src/util/program.c:283
+#, fuzzy, c-format
+msgid "Unreadable or malformed configuration file `%s', exit ...\n"
+msgstr "Konfigurationsdatei `%s' wurde erzeugt.\n"
+
+#: src/util/program.c:301
+#, fuzzy, c-format
+msgid "Unreadable or malformed default configuration file `%s', exit ...\n"
+msgstr "Konfigurationsdatei `%s' wurde erzeugt.\n"
+
+#: src/util/program.c:318
+#, fuzzy
+msgid "Unreadable or malformed configuration, exit ...\n"
+msgstr "GNUnet Konfiguration"
+
+#: src/util/regex.c:134
 #, c-format
 msgid "Bad mask: %d\n"
 msgstr ""
 
-#: src/util/resolver_api.c:216
+#: src/util/resolver_api.c:218
 #, c-format
 msgid ""
 "Missing `%s' for `%s' in configuration, DNS resolution will be unavailable.\n"
 msgstr ""
 
-#: src/util/resolver_api.c:237
+#: src/util/resolver_api.c:239
 #, fuzzy, c-format
 msgid ""
 "Missing `%s' or numeric IP address for `%s' of `%s' in configuration, DNS "
@@ -8950,369 +8784,481 @@ msgstr ""
 "Sie müssen für `%s' in der Sektion `%s' der Konfigurationsdatei eine "
 "positive Zahl angeben.\n"
 
-#: src/util/resolver_api.c:873
+#: src/util/resolver_api.c:875
 #, fuzzy, c-format
 msgid "Timeout trying to resolve hostname `%s'.\n"
 msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
 
-#: src/util/resolver_api.c:886
+#: src/util/resolver_api.c:888
 #, c-format
 msgid "Timeout trying to resolve IP address `%s'.\n"
 msgstr ""
 
-#: src/util/resolver_api.c:1071
+#: src/util/resolver_api.c:1073
 #, fuzzy
 msgid "Resolver not configured correctly.\n"
 msgstr "Standarddienst »%s« ist nicht korrekt eingerichtet!\n"
 
-#: src/util/resolver_api.c:1158 src/util/resolver_api.c:1181
-#: src/util/resolver_api.c:1195
+#: src/util/resolver_api.c:1160 src/util/resolver_api.c:1183
+#: src/util/resolver_api.c:1197
 #, fuzzy, c-format
 msgid "Could not resolve our FQDN: %s\n"
 msgstr "`%s' konnte nicht aufgelöst werden: %s\n"
 
-#: src/util/service.c:1303
-msgid ""
-"Could not bind to any of the ports I was supposed to, refusing to run!\n"
-msgstr ""
-
-#: src/util/service.c:2123
+#: src/util/service.c:674
 #, c-format
 msgid ""
 "Processing code for message of type %u did not call "
 "`GNUNET_SERVICE_client_continue' after %s\n"
 msgstr ""
 
-#: src/util/signal.c:87
+#: src/util/service.c:1862
+msgid ""
+"Could not bind to any of the ports I was supposed to, refusing to run!\n"
+msgstr ""
+
+#: src/util/signal.c:89
 #, fuzzy, c-format
 msgid "signal (%d, %p) returned %d.\n"
 msgstr "Aufruf von `%s' gibt %d zurück.\n"
 
-#: src/util/socks.c:595
+#: src/util/socks.c:597
 #, c-format
 msgid "Attempting to use invalid port %d as SOCKS proxy for service `%s'.\n"
 msgstr ""
 
-#: src/util/socks.c:614
+#: src/util/socks.c:616
 #, c-format
 msgid "Attempting to proxy service `%s' to invalid port %d or hostname.\n"
 msgstr ""
 
-#: src/util/strings.c:174
+#: src/util/strings.c:176
 msgid "b"
 msgstr "b"
 
-#: src/util/strings.c:471
+#: src/util/strings.c:475
 #, c-format
 msgid "Character sets requested were `%s'->`%s'\n"
 msgstr ""
 
-#: src/util/strings.c:598
+#: src/util/strings.c:602
 msgid "Failed to expand `$HOME': environment variable `HOME' not set"
 msgstr ""
 
-#: src/util/strings.c:702
+#: src/util/strings.c:706
 msgid "µs"
 msgstr "µs"
 
-#: src/util/strings.c:706
+#: src/util/strings.c:710
 msgid "forever"
 msgstr ""
 
-#: src/util/strings.c:708
+#: src/util/strings.c:712
 msgid "0 ms"
 msgstr "0 ms"
 
-#: src/util/strings.c:714
+#: src/util/strings.c:718
 msgid "ms"
 msgstr "ms"
 
-#: src/util/strings.c:720
+#: src/util/strings.c:724
 msgid "s"
 msgstr "s"
 
-#: src/util/strings.c:726
+#: src/util/strings.c:730
 msgid "m"
 msgstr "m"
 
-#: src/util/strings.c:732
+#: src/util/strings.c:736
 msgid "h"
 msgstr "h"
 
-#: src/util/strings.c:739
+#: src/util/strings.c:743
 msgid "day"
 msgstr "Tag"
 
-#: src/util/strings.c:741
+#: src/util/strings.c:745
 msgid "days"
 msgstr "Tage"
 
-#: src/util/strings.c:770
+#: src/util/strings.c:774
 msgid "end of time"
 msgstr ""
 
-#: src/util/strings.c:1272
+#: src/util/strings.c:1277
 msgid "IPv6 address did not start with `['\n"
 msgstr "IPv6-Adresse beginnt nicht mit »[«\n"
 
-#: src/util/strings.c:1280
+#: src/util/strings.c:1285
 msgid "IPv6 address did contain ':' to separate port number\n"
 msgstr "IPv6-Adresse enthält kein »:« zur Abtrennung der Portnummer\n"
 
-#: src/util/strings.c:1286
+#: src/util/strings.c:1291
 msgid "IPv6 address did contain ']' before ':' to separate port number\n"
 msgstr "IPv6-Adresse enthält kein »]« vor »:« zur Abtrennung der Portnummer\n"
 
-#: src/util/strings.c:1293
+#: src/util/strings.c:1301
 msgid "IPv6 address did contain a valid port number after the last ':'\n"
 msgstr "IPv6-Adresse enthält keine gültige Portnummer nach dem letzten »:«\n"
 
-#: src/util/strings.c:1302
+#: src/util/strings.c:1310
 #, fuzzy, c-format
 msgid "Invalid IPv6 address `%s': %s\n"
 msgstr "Ungültige Antwort auf `%s' von `%s'\n"
 
-#: src/util/strings.c:1574 src/util/strings.c:1590
+#: src/util/strings.c:1586 src/util/strings.c:1602
 msgid "Port not in range\n"
 msgstr "Port außerhalb des Bereichs\n"
 
-#: src/util/strings.c:1599
+#: src/util/strings.c:1611
 #, c-format
 msgid "Malformed port policy `%s'\n"
 msgstr ""
 
-#: src/util/strings.c:1682 src/util/strings.c:1713 src/util/strings.c:1761
-#: src/util/strings.c:1782
+#: src/util/strings.c:1696 src/util/strings.c:1728 src/util/strings.c:1777
+#: src/util/strings.c:1798
 #, c-format
 msgid "Invalid format for IP: `%s'\n"
 msgstr "Ungültiges Format für IP: »%s«\n"
 
-#: src/util/strings.c:1739
+#: src/util/strings.c:1754
 #, c-format
 msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)."
 msgstr "Ungültige Netzwerk-Notation ('/%d ist nicht gültig in IPv4 CIDR)."
 
-#: src/util/strings.c:1791
+#: src/util/strings.c:1807
 #, fuzzy, c-format
 msgid "Invalid format: `%s'\n"
 msgstr "Ungültiges Format für IP: `%s'\n"
 
-#: src/util/strings.c:1843
+#: src/util/strings.c:1860
 #, c-format
 msgid "Invalid network notation (does not end with ';': `%s')\n"
 msgstr "Ungültige Netzwerk-Notation (endet nicht mit »;«: »%s«)\n"
 
-#: src/util/strings.c:1893
+#: src/util/strings.c:1914
 #, fuzzy, c-format
 msgid "Wrong format `%s' for netmask\n"
 msgstr "Falsches Format `%s' für Netzmaske: %s\n"
 
-#: src/util/strings.c:1924
+#: src/util/strings.c:1945
 #, fuzzy, c-format
 msgid "Wrong format `%s' for network\n"
 msgstr "Falsches Format `%s' für Netzwerk: %s\n"
 
-#: src/vpn/gnunet-service-vpn.c:538 src/vpn/gnunet-service-vpn.c:1805
+#: src/util/time.c:828 src/util/time.c:860
+#, c-format
+msgid "Failed to map `%s', cannot assure monotonic time!\n"
+msgstr ""
+
+#: src/util/time.c:866
+#, c-format
+msgid ""
+"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
+msgstr ""
+
+#: src/vpn/gnunet-service-vpn.c:540 src/vpn/gnunet-service-vpn.c:1807
 msgid "# Active channels"
 msgstr "# aktive Kanäle"
 
-#: src/vpn/gnunet-service-vpn.c:597
+#: src/vpn/gnunet-service-vpn.c:599
 #, fuzzy
 msgid "# Messages dropped in cadet queue (overflow)"
 msgstr "# Bytes verworfen von TCP (ausgehend)"
 
-#: src/vpn/gnunet-service-vpn.c:751
+#: src/vpn/gnunet-service-vpn.c:753
 #, fuzzy
 msgid "# ICMP packets received from cadet"
 msgstr "# Bytes empfangen über TCP"
 
-#: src/vpn/gnunet-service-vpn.c:1094
+#: src/vpn/gnunet-service-vpn.c:1096
 #, fuzzy
 msgid "# UDP packets received from cadet"
 msgstr "# Bytes empfangen über TCP"
 
-#: src/vpn/gnunet-service-vpn.c:1253
+#: src/vpn/gnunet-service-vpn.c:1255
 #, fuzzy
 msgid "# TCP packets received from cadet"
 msgstr "# Bytes empfangen über TCP"
 
-#: src/vpn/gnunet-service-vpn.c:1465
+#: src/vpn/gnunet-service-vpn.c:1467
 #, fuzzy
 msgid "# Cadet channels created"
 msgstr "# PING Nachrichten erstellt"
 
-#: src/vpn/gnunet-service-vpn.c:1685
+#: src/vpn/gnunet-service-vpn.c:1687
 #, c-format
 msgid "Protocol %u not supported, dropping\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:1824
+#: src/vpn/gnunet-service-vpn.c:1826
 #, fuzzy
 msgid "# Packets dropped (channel not yet online)"
 msgstr "# Bytes verworfen von TCP (ausgehend)"
 
-#: src/vpn/gnunet-service-vpn.c:2004
+#: src/vpn/gnunet-service-vpn.c:2006
 msgid "# ICMPv4 packets dropped (not allowed)"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2025
+#: src/vpn/gnunet-service-vpn.c:2027
 msgid "# ICMPv6 packets dropped (not allowed)"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2233
+#: src/vpn/gnunet-service-vpn.c:2235
 #, fuzzy
 msgid "# Packets received from TUN interface"
 msgstr ""
 "Die Formatüberprüfung des Pakets, das von %s:%d (UDP6) empfangen wurde, "
 "schlug fehl."
 
-#: src/vpn/gnunet-service-vpn.c:2266 src/vpn/gnunet-service-vpn.c:2302
+#: src/vpn/gnunet-service-vpn.c:2268 src/vpn/gnunet-service-vpn.c:2304
 #, c-format
 msgid "Packet received for unmapped destination `%s' (dropping it)\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2312
+#: src/vpn/gnunet-service-vpn.c:2314
 msgid "Received IPv4 packet with options (dropping it)\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2326
+#: src/vpn/gnunet-service-vpn.c:2328
 #, c-format
 msgid "Received packet of unknown protocol %d from TUN (dropping it)\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2365
+#: src/vpn/gnunet-service-vpn.c:2367
 msgid "Failed to find unallocated IPv4 address in VPN's range\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2420
+#: src/vpn/gnunet-service-vpn.c:2422
 #, fuzzy
 msgid "Failed to find unallocated IPv6 address in VPN's range\n"
 msgstr "Die öffentliche IPv6-Adresse konnte nicht ermittelt werden!\n"
 
-#: src/vpn/gnunet-service-vpn.c:2462 src/vpn/gnunet-service-vpn.c:2684
+#: src/vpn/gnunet-service-vpn.c:2464 src/vpn/gnunet-service-vpn.c:2686
 msgid "# Active destinations"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2733
+#: src/vpn/gnunet-service-vpn.c:2735
 msgid "Failed to allocate IP address for new destination\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2996
+#: src/vpn/gnunet-service-vpn.c:2998
 msgid "Must specify valid IPv6 address"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:3020
+#: src/vpn/gnunet-service-vpn.c:3022
 msgid "Must specify valid IPv6 mask"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:3028
+#: src/vpn/gnunet-service-vpn.c:3030
 msgid "IPv6 support disabled as this system does not support IPv6\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:3041
+#: src/vpn/gnunet-service-vpn.c:3043
 msgid "Must specify valid IPv4 address"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:3054
+#: src/vpn/gnunet-service-vpn.c:3056
 msgid "Must specify valid IPv4 mask"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:3064
+#: src/vpn/gnunet-service-vpn.c:3066
 msgid "IPv4 support disabled as this system does not support IPv4\n"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:145
+#: src/vpn/gnunet-vpn.c:147
 msgid "Error creating tunnel\n"
 msgstr "Fehler beim Anlegen des Tunnels\n"
 
-#: src/vpn/gnunet-vpn.c:189 src/vpn/gnunet-vpn.c:220
+#: src/vpn/gnunet-vpn.c:191 src/vpn/gnunet-vpn.c:222
 #, c-format
 msgid "Option `%s' makes no sense with option `%s'.\n"
 msgstr "Option »%s« ergibt keinen Sinn mit der Option »%s«.\n"
 
-#: src/vpn/gnunet-vpn.c:202
+#: src/vpn/gnunet-vpn.c:204
 #, c-format
 msgid "Option `%s' or `%s' is required.\n"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:214
+#: src/vpn/gnunet-vpn.c:216
 #, c-format
 msgid "Option `%s' or `%s' is required when using option `%s'.\n"
 msgstr "Option »%s« oder »%s« ergibt keinen Sinn mit der Option »%s«.\n"
 
-#: src/vpn/gnunet-vpn.c:234
+#: src/vpn/gnunet-vpn.c:236
 #, c-format
 msgid "`%s' is not a valid peer identifier.\n"
 msgstr "»%s« ist kein gültiger Knoten-Bezeichner.\n"
 
-#: src/vpn/gnunet-vpn.c:254
+#: src/vpn/gnunet-vpn.c:256
 #, c-format
 msgid "`%s' is not a valid IP address.\n"
 msgstr "»%s« ist keine gültige IP-Adresse.\n"
 
-#: src/vpn/gnunet-vpn.c:290
+#: src/vpn/gnunet-vpn.c:292
 msgid "request that result should be an IPv4 address"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:295
+#: src/vpn/gnunet-vpn.c:297
 msgid "request that result should be an IPv6 address"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:301
+#: src/vpn/gnunet-vpn.c:303
 msgid "how long should the mapping be valid for new tunnels?"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:307
+#: src/vpn/gnunet-vpn.c:309
 msgid "destination IP for the tunnel"
 msgstr "Ziel-IP des Tunnels"
 
-#: src/vpn/gnunet-vpn.c:313
+#: src/vpn/gnunet-vpn.c:315
 msgid "peer offering the service we would like to access"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:319
+#: src/vpn/gnunet-vpn.c:321
 msgid "name of the service we would like to access"
 msgstr "Name des Dienstes, auf den zugegriffen werden soll"
 
-#: src/vpn/gnunet-vpn.c:324
+#: src/vpn/gnunet-vpn.c:326
 msgid "service is offered via TCP"
 msgstr "Dienst wird über TCP angeboten"
 
-#: src/vpn/gnunet-vpn.c:329
+#: src/vpn/gnunet-vpn.c:331
 msgid "service is offered via UDP"
 msgstr "Dienst wird über UDP angeboten"
 
-#: src/vpn/gnunet-vpn.c:342
+#: src/vpn/gnunet-vpn.c:344
 msgid "Setup tunnels via VPN."
 msgstr "Tunnel über VPN einrichten."
 
-#: src/zonemaster/gnunet-service-zonemaster.c:836
-#: src/zonemaster/gnunet-service-zonemaster-monitor.c:414
+#: src/zonemaster/gnunet-service-zonemaster.c:838
+#: src/zonemaster/gnunet-service-zonemaster-monitor.c:416
 #, fuzzy
 msgid "Failed to connect to the namestore!\n"
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
 
-#: src/include/gnunet_common.h:770 src/include/gnunet_common.h:777
-#: src/include/gnunet_common.h:787
+#: src/include/gnunet_common.h:772 src/include/gnunet_common.h:779
+#: src/include/gnunet_common.h:789
 #, fuzzy, c-format
 msgid "Assertion failed at %s:%d. Aborting.\n"
 msgstr "`%s' schlug fehl bei %s:%d mit dem Fehler: `%s'.\n"
 
-#: src/include/gnunet_common.h:795
+#: src/include/gnunet_common.h:797
 #, fuzzy, c-format
 msgid "Assertion failed at %s:%d.\n"
 msgstr "`%s' schlug fehl bei %s:%d mit dem Fehler: `%s'.\n"
 
-#: src/include/gnunet_common.h:807
+#: src/include/gnunet_common.h:809
 #, fuzzy, c-format
 msgid "External protocol violation detected at %s:%d.\n"
 msgstr "Protokollverletzung auf Socket. Kommando erwartet.\n"
 
-#: src/include/gnunet_common.h:834 src/include/gnunet_common.h:843
+#: src/include/gnunet_common.h:836 src/include/gnunet_common.h:845
 #, fuzzy, c-format
 msgid "`%s' failed on file `%s' at %s:%d with error: %s\n"
 msgstr "`%s' schlug bei Datei `%s' fehl. Ort: %s:%d. Fehler: %s\n"
 
+#, fuzzy
+#~ msgid "Invalid tunnel owner `%s'\n"
+#~ msgstr "Ungültiger Parameter: `%s'\n"
+
+#, fuzzy
+#~ msgid "Provide information about a particular tunnel"
+#~ msgstr "Informationen über andere GNUnet Knoten ausgeben."
+
+#, fuzzy
+#~ msgid "Failed to store membership information!\n"
+#~ msgstr "Fehler beim Speichern der Konfiguration!"
+
+#, fuzzy
+#~ msgid "Failed to test membership!\n"
+#~ msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
+
+#, fuzzy
+#~ msgid "Dropping invalid fragment\n"
+#~ msgstr "Ungültiges Argument »%s«\n"
+
+#, fuzzy
+#~ msgid "Failed to store fragment\n"
+#~ msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
+
+#, fuzzy
+#~ msgid "Failed to get fragment!\n"
+#~ msgstr ""
+#~ "Statistiken über den Netzwerkverkehr konnten nicht ermittelt werden.\n"
+
+#, fuzzy
+#~ msgid "Failed to get message!\n"
+#~ msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
+
+#, fuzzy
+#~ msgid "Failed to get message fragment!\n"
+#~ msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
+
+#, fuzzy
+#~ msgid "Failed to get master counters!\n"
+#~ msgstr ""
+#~ "Statistiken über den Netzwerkverkehr konnten nicht ermittelt werden.\n"
+
+#, fuzzy
+#~ msgid "Failed to begin modifying state: %d\n"
+#~ msgstr ""
+#~ "Statistiken über den Netzwerkverkehr konnten nicht ermittelt werden.\n"
+
+#, fuzzy
+#~ msgid "Failed to modify state: %d\n"
+#~ msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
+
+#, fuzzy
+#~ msgid "Failed to end modifying state!\n"
+#~ msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
+
+#, fuzzy
+#~ msgid "Failed to begin synchronizing state!\n"
+#~ msgstr ""
+#~ "Statistiken über den Netzwerkverkehr konnten nicht ermittelt werden.\n"
+
+#, fuzzy
+#~ msgid "Failed to end synchronizing state!\n"
+#~ msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
+
+#, fuzzy
+#~ msgid "Failed to reset state!\n"
+#~ msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
+
+#, fuzzy
+#~ msgid "Failed to get state variable!\n"
+#~ msgstr ""
+#~ "Statistiken über den Netzwerkverkehr konnten nicht ermittelt werden.\n"
+
+#, fuzzy
+#~ msgid "Unable to initialize Mysql.\n"
+#~ msgstr "SQLite-Datenbank konnte nicht initialisiert werden: %s.\n"
+
+#, fuzzy
+#~ msgid "Failed to run SQL statement `%s'\n"
+#~ msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
+
+#, fuzzy
+#~ msgid "`%s' failed at %s:%d with error: %s (%d)\n"
+#~ msgstr "`%s' schlug bei %s:%d mit dem Fehler %s fehl\n"
+
+#, fuzzy
+#~ msgid "SQLite database running\n"
+#~ msgstr "SQL Datenbank beschädigt, Ergebnis wird ignoriert.\n"
+
+#, fuzzy
+#~ msgid "--place missing or invalid.\n"
+#~ msgstr "Ungültige Antwort auf `%s'.\n"
+
+#, fuzzy
+#~ msgid "name or public key of ego"
+#~ msgstr "Ungültiger Parameter: `%s'\n"
+
+#, fuzzy
+#~ msgid "number of messages to replay from history"
+#~ msgstr "Anzahl an Durchläufen"
+
 #, fuzzy
 #~ msgid "Could not resolve `%s' (%s): %s\n"
 #~ msgstr "`%s' konnte nicht aufgelöst werden: %s\n"
index 3733454ddae29cf254f66335b1789b5e869cc7a9..f0d51526394daf1754698e8ddb94a1f5334b394d 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnunet 0.9.5a\n"
 "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2018-10-20 11:13+0200\n"
+"POT-Creation-Date: 2019-02-13 00:37+0100\n"
 "PO-Revision-Date: 2013-02-23 17:50+0100\n"
 "Last-Translator: Miguel Ángel Arruga Vivas <rosen644835@gmail.com>\n"
 "Language-Team: Spanish <es@li.org>\n"
@@ -18,62 +18,62 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: src/arm/gnunet-arm.c:154
+#: src/arm/gnunet-arm.c:156
 #, c-format
 msgid "Failed to remove configuration file %s\n"
 msgstr "Se produjo un fallo al borrar el fichero de configuración %s\n"
 
-#: src/arm/gnunet-arm.c:160
+#: src/arm/gnunet-arm.c:162
 #, c-format
 msgid "Failed to remove servicehome directory %s\n"
 msgstr "Se produjo un fallo al eliminar el directorio «servicehome» %s.\n"
 
-#: src/arm/gnunet-arm.c:220 src/testbed/gnunet-service-testbed_peers.c:1137
+#: src/arm/gnunet-arm.c:222 src/testbed/gnunet-service-testbed_peers.c:1139
 #, fuzzy
 msgid "Message was sent successfully"
 msgstr "El almacén de nombres añadió el registro satisfactoriamente"
 
-#: src/arm/gnunet-arm.c:222 src/testbed/gnunet-service-testbed_peers.c:1139
+#: src/arm/gnunet-arm.c:224 src/testbed/gnunet-service-testbed_peers.c:1141
 #, fuzzy
 msgid "We disconnected from ARM before we could send a request"
 msgstr "# desconexiones del par debido a una petición explícita"
 
-#: src/arm/gnunet-arm.c:224 src/testbed/gnunet-service-testbed_peers.c:1141
+#: src/arm/gnunet-arm.c:226 src/testbed/gnunet-service-testbed_peers.c:1143
 #, fuzzy
 msgid "Unknown request status"
 msgstr "Usuario desconocido «%s»\n"
 
-#: src/arm/gnunet-arm.c:240
+#: src/arm/gnunet-arm.c:242
 #, fuzzy
 msgid "is stopped"
 msgstr "# elementos almacenados"
 
-#: src/arm/gnunet-arm.c:242
+#: src/arm/gnunet-arm.c:244
 #, fuzzy
 msgid "is starting"
 msgstr "'%s' comenzando\n"
 
-#: src/arm/gnunet-arm.c:244
+#: src/arm/gnunet-arm.c:246
 #, fuzzy
 msgid "is stopping"
 msgstr "# elementos almacenados"
 
-#: src/arm/gnunet-arm.c:246
+#: src/arm/gnunet-arm.c:248
 #, fuzzy
 msgid "is starting already"
 msgstr "'%s' comenzando\n"
 
-#: src/arm/gnunet-arm.c:248
+#: src/arm/gnunet-arm.c:250
 #, fuzzy
 msgid "is stopping already"
 msgstr "'%s' comenzando\n"
 
-#: src/arm/gnunet-arm.c:250
+#: src/arm/gnunet-arm.c:252
 #, fuzzy
 msgid "is started already"
 msgstr "'%s' comenzando\n"
 
-#: src/arm/gnunet-arm.c:252
+#: src/arm/gnunet-arm.c:254
 #, fuzzy
 msgid "is stopped already"
 msgstr "'%s' comenzando\n"
@@ -81,161 +81,161 @@ msgstr "'%s' comenzando\n"
 # Miguel: ¿Debería cambiar las siglas de ARM?
 # De momento las he mantenido con una traducción en
 # otro mensaje.
-#: src/arm/gnunet-arm.c:254
+#: src/arm/gnunet-arm.c:256
 #, fuzzy
 msgid "service is not known to ARM"
 msgstr "El servicio «%s» es desconocido para el ARM.\n"
 
-#: src/arm/gnunet-arm.c:256
+#: src/arm/gnunet-arm.c:258
 #, fuzzy
 msgid "service failed to start"
 msgstr "El proceso del servicio no devolvió un estado\n"
 
 # Miguel: ¿Es mejor «ya que» que «porque» o «debido al apagado»?
-#: src/arm/gnunet-arm.c:258
+#: src/arm/gnunet-arm.c:260
 #, fuzzy
 msgid "service cannot be manipulated because ARM is shutting down"
 msgstr "Petición ignorada porque el ARM se está apagando.\n"
 
-#: src/arm/gnunet-arm.c:260
+#: src/arm/gnunet-arm.c:262
 #, fuzzy
 msgid "Unknown result code."
 msgstr "Código de respuesta del ARM desconocido.\n"
 
-#: src/arm/gnunet-arm.c:292
+#: src/arm/gnunet-arm.c:295
 msgid "Fatal error initializing ARM API.\n"
 msgstr "Error fatal al inicializar la API del ARM.\n"
 
-#: src/arm/gnunet-arm.c:320 src/arm/gnunet-arm.c:329
+#: src/arm/gnunet-arm.c:324 src/arm/gnunet-arm.c:333
 #, fuzzy, c-format
 msgid "Failed to start the ARM service: %s\n"
 msgstr "Se produjo un fallo al iniciar el servicio «%s»\n"
 
-#: src/arm/gnunet-arm.c:363
+#: src/arm/gnunet-arm.c:368
 #, fuzzy, c-format
 msgid "Failed to send a stop request to the ARM service: %s\n"
 msgstr "Se produjo un fallo al enviar una petición al servicio de transporte\n"
 
-#: src/arm/gnunet-arm.c:374
+#: src/arm/gnunet-arm.c:379
 #, fuzzy, c-format
 msgid "Failed to stop the ARM service: %s\n"
 msgstr "Fichero almacenado en '%s'.\n"
 
-#: src/arm/gnunet-arm.c:413
+#: src/arm/gnunet-arm.c:419
 #, fuzzy, c-format
 msgid "Failed to send a request to start the `%s' service: %s\n"
 msgstr "Se produjo un fallo al enviar una petición al servicio de transporte\n"
 
-#: src/arm/gnunet-arm.c:423
+#: src/arm/gnunet-arm.c:429
 #, fuzzy, c-format
 msgid "Failed to start the `%s' service: %s\n"
 msgstr "Se produjo un fallo al iniciar el servicio «%s»\n"
 
-#: src/arm/gnunet-arm.c:460
+#: src/arm/gnunet-arm.c:467
 #, fuzzy, c-format
 msgid "Failed to send a request to kill the `%s' service: %%s\n"
 msgstr "Se produjo un fallo al enviar una petición al servicio de transporte\n"
 
-#: src/arm/gnunet-arm.c:471
+#: src/arm/gnunet-arm.c:478
 #, fuzzy, c-format
 msgid "Failed to kill the `%s' service: %s\n"
 msgstr "Se produjo un fallo al escribir «%s»: %s\n"
 
-#: src/arm/gnunet-arm.c:511
+#: src/arm/gnunet-arm.c:519
 #, fuzzy, c-format
 msgid "Failed to request a list of services: %s\n"
 msgstr "Se produjo un fallo al iniciar el servicio «%s»\n"
 
-#: src/arm/gnunet-arm.c:520
+#: src/arm/gnunet-arm.c:528
 msgid "Error communicating with ARM. ARM not running?\n"
 msgstr "Error al comunicar con el ARM. ¿Está el ARM ejecutándose?\n"
 
-#: src/arm/gnunet-arm.c:526
+#: src/arm/gnunet-arm.c:534
 msgid "Running services:\n"
 msgstr "Servicios en ejecución:\n"
 
-#: src/arm/gnunet-arm.c:614
+#: src/arm/gnunet-arm.c:623
 #, c-format
 msgid "Now only monitoring, press CTRL-C to stop.\n"
 msgstr "Ahora solo monitorizando, pulsa CTRL-C para parar.\n"
 
-#: src/arm/gnunet-arm.c:646
+#: src/arm/gnunet-arm.c:656
 #, c-format
 msgid "Stopped %s.\n"
 msgstr "%s detenido.\n"
 
-#: src/arm/gnunet-arm.c:649
+#: src/arm/gnunet-arm.c:659
 #, fuzzy, c-format
 msgid "Starting %s...\n"
 msgstr "Iniciando descarga «%s».\n"
 
-#: src/arm/gnunet-arm.c:652
+#: src/arm/gnunet-arm.c:662
 #, c-format
 msgid "Stopping %s...\n"
 msgstr "Deteniendo %s...\n"
 
-#: src/arm/gnunet-arm.c:666
+#: src/arm/gnunet-arm.c:676
 #, fuzzy, c-format
 msgid "Unknown status %u for service %s.\n"
 msgstr "Solicitando incio del servicio «%s».\n"
 
-#: src/arm/gnunet-arm.c:767
+#: src/arm/gnunet-arm.c:766
 msgid "stop all GNUnet services"
 msgstr "detiene todos los servicios de GNUnet"
 
-#: src/arm/gnunet-arm.c:773
+#: src/arm/gnunet-arm.c:771
 msgid "start a particular service"
 msgstr "inicia un servicio particular"
 
-#: src/arm/gnunet-arm.c:779
+#: src/arm/gnunet-arm.c:776
 msgid "stop a particular service"
 msgstr "detiene un servicio particular"
 
-#: src/arm/gnunet-arm.c:784
+#: src/arm/gnunet-arm.c:780
 msgid "start all GNUnet default services"
 msgstr "inicia todos los servicios predeterminados de GNUnet"
 
-#: src/arm/gnunet-arm.c:789
+#: src/arm/gnunet-arm.c:784
 msgid "stop and start all GNUnet default services"
 msgstr "detiene e inicia todos los servicios predeterminados de GNUnet"
 
-#: src/arm/gnunet-arm.c:793
+#: src/arm/gnunet-arm.c:788
 msgid "delete config file and directory on exit"
 msgstr "borrar el directorio y el fichero de configuración al salir"
 
-#: src/arm/gnunet-arm.c:798
+#: src/arm/gnunet-arm.c:792
 msgid "monitor ARM activities"
 msgstr "monitoriza actividades de ARM"
 
-#: src/arm/gnunet-arm.c:803
+#: src/arm/gnunet-arm.c:796
 msgid "don't print status messages"
 msgstr "no imprime mensajes de estado"
 
-#: src/arm/gnunet-arm.c:809
+#: src/arm/gnunet-arm.c:801
 msgid "exit with error status if operation does not finish after DELAY"
 msgstr "sale con estado de error si la operación no termina despues del DELAY"
 
-#: src/arm/gnunet-arm.c:814
+#: src/arm/gnunet-arm.c:805
 msgid "list currently running services"
 msgstr "lista de servicios actualmente en ejecución"
 
-#: src/arm/gnunet-arm.c:819
+#: src/arm/gnunet-arm.c:809
 msgid "don't let gnunet-service-arm inherit standard output"
 msgstr "no permite heredar la salida estándar a «gnunet-service-arm»"
 
-#: src/arm/gnunet-arm.c:824
+#: src/arm/gnunet-arm.c:813
 msgid "don't let gnunet-service-arm inherit standard error"
 msgstr "no permite heredar la salida de error estándar a «gnunet-service-arm»"
 
 # Miguel: ARM se mantiene en todo el texto, aquí está la traducción.
-#: src/arm/gnunet-arm.c:837
+#: src/arm/gnunet-arm.c:828
 msgid "Control services and the Automated Restart Manager (ARM)"
 msgstr ""
 "Servicios de control y el Gestor de Reinicio Automático (ARM en inglés)"
 
-#: src/arm/gnunet-service-arm.c:386 src/transport/plugin_transport_tcp.c:1118
-#: src/transport/plugin_transport_xt.c:1118
-#: src/transport/tcp_service_legacy.c:555 src/util/service.c:610
+#: src/arm/gnunet-service-arm.c:388 src/transport/plugin_transport_tcp.c:1120
+#: src/transport/plugin_transport_xt.c:1120
+#: src/transport/tcp_service_legacy.c:557 src/util/service.c:1167
 #, c-format
 msgid ""
 "Disabling IPv6 support for service `%s', failed to create IPv6 socket: %s\n"
@@ -243,42 +243,42 @@ msgstr ""
 "Deshabilitando el soporte para IPv6 para el servicio «%s», se produjo un "
 "fallo al crear un «socket» IPv6: %s\n"
 
-#: src/arm/gnunet-service-arm.c:410 src/arm/gnunet-service-arm.c:416
-#: src/transport/plugin_transport_tcp.c:1137
-#: src/transport/plugin_transport_tcp.c:1143
-#: src/transport/plugin_transport_tcp.c:3823
-#: src/transport/plugin_transport_xt.c:1137
-#: src/transport/plugin_transport_xt.c:1143
-#: src/transport/plugin_transport_xt.c:3831
-#: src/transport/tcp_service_legacy.c:574
-#: src/transport/tcp_service_legacy.c:580 src/util/service.c:635
-#: src/util/service.c:641
+#: src/arm/gnunet-service-arm.c:412 src/arm/gnunet-service-arm.c:418
+#: src/transport/plugin_transport_tcp.c:1139
+#: src/transport/plugin_transport_tcp.c:1145
+#: src/transport/plugin_transport_tcp.c:3829
+#: src/transport/plugin_transport_xt.c:1139
+#: src/transport/plugin_transport_xt.c:1145
+#: src/transport/plugin_transport_xt.c:3833
+#: src/transport/tcp_service_legacy.c:576
+#: src/transport/tcp_service_legacy.c:582 src/util/service.c:1192
+#: src/util/service.c:1198
 #, c-format
 msgid "Require valid port number for service `%s' in configuration!\n"
 msgstr ""
 "¡Se requiere un número de puerto válido para el servicio «%s» en la "
 "configuración!\n"
 
-#: src/arm/gnunet-service-arm.c:455 src/transport/plugin_transport_tcp.c:1174
-#: src/transport/plugin_transport_xt.c:1174
-#: src/transport/tcp_service_legacy.c:611 src/util/client.c:504
-#: src/util/service.c:680
+#: src/arm/gnunet-service-arm.c:457 src/transport/plugin_transport_tcp.c:1176
+#: src/transport/plugin_transport_xt.c:1176
+#: src/transport/tcp_service_legacy.c:613 src/util/client.c:506
+#: src/util/service.c:1237
 #, 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/arm/gnunet-service-arm.c:460 src/transport/plugin_transport_tcp.c:1178
-#: src/transport/plugin_transport_xt.c:1178
-#: src/transport/tcp_service_legacy.c:615 src/util/client.c:509
-#: src/util/service.c:685
+#: src/arm/gnunet-service-arm.c:462 src/transport/plugin_transport_tcp.c:1180
+#: src/transport/plugin_transport_xt.c:1180
+#: src/transport/tcp_service_legacy.c:617 src/util/client.c:511
+#: src/util/service.c:1242
 #, c-format
 msgid "Using `%s' instead\n"
 msgstr "Usando «%s» en su defecto\n"
 
-#: src/arm/gnunet-service-arm.c:493 src/transport/plugin_transport_tcp.c:1209
-#: src/transport/plugin_transport_xt.c:1209
-#: src/transport/tcp_service_legacy.c:646 src/util/service.c:721
+#: src/arm/gnunet-service-arm.c:495 src/transport/plugin_transport_tcp.c:1211
+#: src/transport/plugin_transport_xt.c:1211
+#: src/transport/tcp_service_legacy.c:648 src/util/service.c:1278
 #, c-format
 msgid ""
 "Disabling UNIX domain socket support for service `%s', failed to create UNIX "
@@ -287,50 +287,50 @@ msgstr ""
 "Deshabilitando el soporte de dominio de «sockets» UNIX para el servicio "
 "«%s», no se pudo crear un «socket» UNIX: %s\n"
 
-#: src/arm/gnunet-service-arm.c:515 src/transport/plugin_transport_tcp.c:1226
-#: src/transport/plugin_transport_xt.c:1226
-#: src/transport/tcp_service_legacy.c:663 src/util/service.c:739
+#: src/arm/gnunet-service-arm.c:517 src/transport/plugin_transport_tcp.c:1228
+#: src/transport/plugin_transport_xt.c:1228
+#: src/transport/tcp_service_legacy.c:665 src/util/service.c:1296
 #, c-format
 msgid "Have neither PORT nor UNIXPATH for service `%s', but one is required\n"
 msgstr ""
 "No hay ni puerto (PORT) ni ruta unix (UNIXPATH) para el servicio «%s», pero "
 "uno es necesario\n"
 
-#: src/arm/gnunet-service-arm.c:554
-#: src/transport/plugin_transport_http_server.c:2682
-#: src/transport/plugin_transport_tcp.c:1257
-#: src/transport/plugin_transport_xt.c:1257
-#: src/transport/tcp_service_legacy.c:694 src/util/service.c:780
+#: src/arm/gnunet-service-arm.c:556
+#: src/transport/plugin_transport_http_server.c:2688
+#: src/transport/plugin_transport_tcp.c:1259
+#: src/transport/plugin_transport_xt.c:1259
+#: src/transport/tcp_service_legacy.c:696 src/util/service.c:1337
 #, c-format
 msgid "Failed to resolve `%s': %s\n"
 msgstr "Se produjo un fallo al resolver «%s»: %s\n"
 
-#: src/arm/gnunet-service-arm.c:573
-#: src/transport/plugin_transport_http_server.c:2700
-#: src/transport/plugin_transport_tcp.c:1276
-#: src/transport/plugin_transport_xt.c:1276
-#: src/transport/tcp_service_legacy.c:713 src/util/service.c:800
+#: src/arm/gnunet-service-arm.c:575
+#: src/transport/plugin_transport_http_server.c:2706
+#: src/transport/plugin_transport_tcp.c:1278
+#: src/transport/plugin_transport_xt.c:1278
+#: src/transport/tcp_service_legacy.c:715 src/util/service.c:1357
 #, c-format
 msgid "Failed to find %saddress for `%s'.\n"
 msgstr "No se encontró la dirección %s para «%s».\n"
 
-#: src/arm/gnunet-service-arm.c:984
+#: src/arm/gnunet-service-arm.c:986
 #, c-format
 msgid "Failed to start service `%s'\n"
 msgstr "Se produjo un fallo al iniciar el servicio «%s»\n"
 
-#: src/arm/gnunet-service-arm.c:995
+#: src/arm/gnunet-service-arm.c:997
 #, c-format
 msgid "Starting service `%s'\n"
 msgstr "Iniciando el servicio «%s»\n"
 
 # Miguel: ¿Alguna idea para "socket"?
-#: src/arm/gnunet-service-arm.c:1107
+#: src/arm/gnunet-service-arm.c:1109
 #, c-format
 msgid "Unable to create socket for service `%s': %s\n"
 msgstr "Imposible crear un «socket» para el servicio «%s»: %s\n"
 
-#: src/arm/gnunet-service-arm.c:1142
+#: src/arm/gnunet-service-arm.c:1144
 #, c-format
 msgid "Unable to bind listening socket for service `%s' to address `%s': %s\n"
 msgstr ""
@@ -341,53 +341,53 @@ msgstr ""
 # no es exactamente lo mismo que el texto en inglés, pero
 # es fiel a la realidad puesto que el ARM reinicia
 # las conexiones cuando se caen.
-#: src/arm/gnunet-service-arm.c:1185
+#: src/arm/gnunet-service-arm.c:1187
 #, c-format
 msgid "ARM now monitors connections to service `%s' at `%s'\n"
 msgstr "El ARM ahora gestiona las conexiones del servicio «%s» en «%s»\n"
 
-#: src/arm/gnunet-service-arm.c:1364
+#: src/arm/gnunet-service-arm.c:1346
 #, c-format
 msgid "Preparing to stop `%s'\n"
 msgstr "Preparando para parar «%s»\n"
 
-#: src/arm/gnunet-service-arm.c:1669
+#: src/arm/gnunet-service-arm.c:1651
 #, c-format
 msgid "Restarting service `%s'.\n"
 msgstr "Reiniciando el servicio «%s»\n"
 
-#: src/arm/gnunet-service-arm.c:1830
+#: src/arm/gnunet-service-arm.c:1812
 msgid "exit"
 msgstr "salida"
 
-#: src/arm/gnunet-service-arm.c:1835
+#: src/arm/gnunet-service-arm.c:1817
 msgid "signal"
 msgstr "señal"
 
-#: src/arm/gnunet-service-arm.c:1840
+#: src/arm/gnunet-service-arm.c:1822
 msgid "unknown"
 msgstr "desconocido"
 
-#: src/arm/gnunet-service-arm.c:1846
+#: src/arm/gnunet-service-arm.c:1828
 #, c-format
 msgid "Service `%s' took %s to terminate\n"
 msgstr "El servicio «%s» tardó %s en finalizar\n"
 
-#: src/arm/gnunet-service-arm.c:1872
+#: src/arm/gnunet-service-arm.c:1854
 #, fuzzy, c-format
 msgid "Service `%s' terminated normally, will restart at any time\n"
 msgstr "El servicio «%s» finalizó con estado %s/%d, se reiniciará en %llu ms\n"
 
-#: src/arm/gnunet-service-arm.c:1888
+#: src/arm/gnunet-service-arm.c:1870
 #, fuzzy, c-format
 msgid "Service `%s' terminated with status %s/%d, will restart in %s\n"
 msgstr "El servicio «%s» finalizó con estado %s/%d, se reiniciará en %llu ms\n"
 
-#: src/arm/mockup-service.c:40
+#: src/arm/mockup-service.c:42
 msgid "Initiating shutdown as requested by client.\n"
 msgstr "Iniciando apagado bajo petición del cliente.\n"
 
-#: src/ats/gnunet-ats-solver-eval.c:2779 src/ats/gnunet-ats-solver-eval.c:2820
+#: src/ats/gnunet-ats-solver-eval.c:2781 src/ats/gnunet-ats-solver-eval.c:2822
 #, c-format
 msgid ""
 "Could not load quota for network `%s':  `%s', assigning default bandwidth "
@@ -396,7 +396,7 @@ msgstr ""
 "No se pudieron cargar las cuotas para la red «%s»:  «%s», asignando el ancho "
 "de banda predeterminado %llu\n"
 
-#: src/ats/gnunet-ats-solver-eval.c:2797
+#: src/ats/gnunet-ats-solver-eval.c:2799
 #, c-format
 msgid ""
 "No outbound quota configured for network `%s', assigning default bandwidth "
@@ -405,7 +405,7 @@ msgstr ""
 "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:2838
+#: src/ats/gnunet-ats-solver-eval.c:2840
 #, c-format
 msgid ""
 "No outbound quota configure for network `%s', assigning default bandwidth "
@@ -414,30 +414,36 @@ msgstr ""
 "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:3292 src/ats-tests/gnunet-solver-eval.c:937
+#: src/ats/gnunet-ats-solver-eval.c:3294 src/ats-tests/gnunet-solver-eval.c:939
 #, fuzzy
 msgid "solver to use"
 msgstr "valor a establecer"
 
-#: src/ats/gnunet-ats-solver-eval.c:3297 src/ats-tests/gnunet-solver-eval.c:943
-#: src/ats-tests/gnunet-solver-eval.c:948
+#: src/ats/gnunet-ats-solver-eval.c:3299 src/ats-tests/gnunet-solver-eval.c:945
+#: src/ats-tests/gnunet-solver-eval.c:950
 msgid "experiment to use"
 msgstr "experimento para usar"
 
-#: src/ats/gnunet-ats-solver-eval.c:3304
+#: src/ats/gnunet-ats-solver-eval.c:3306
 #, fuzzy
 msgid "print logging"
 msgstr "Iniciando descarga «%s».\n"
 
-#: src/ats/gnunet-ats-solver-eval.c:3309
+#: src/ats/gnunet-ats-solver-eval.c:3311
 msgid "save logging to disk"
 msgstr "guarda protocolo al fichero en disco"
 
-#: src/ats/gnunet-ats-solver-eval.c:3314
+#: src/ats/gnunet-ats-solver-eval.c:3316
 msgid "disable normalization"
 msgstr "deshabilita normalización"
 
-#: src/ats/gnunet-service-ats_plugins.c:302
+#: src/ats/gnunet-service-ats-new.c:756
+#: src/ats/gnunet-service-ats_plugins.c:451
+#, fuzzy, c-format
+msgid "Failed to initialize solver `%s'!\n"
+msgstr "¡No se puede inicializar el resolvedor!\n"
+
+#: src/ats/gnunet-service-ats_plugins.c:304
 #, fuzzy, c-format
 msgid ""
 "Could not load %s quota for network `%s':  `%s', assigning default bandwidth "
@@ -447,12 +453,12 @@ msgstr ""
 "de banda predeterminado %llu\n"
 
 # Miguel: "Inbound" lo he traducido como entrada en todo el texto.
-#: src/ats/gnunet-service-ats_plugins.c:312
+#: src/ats/gnunet-service-ats_plugins.c:314
 #, fuzzy, c-format
 msgid "%s quota configured for network `%s' is %llu\n"
 msgstr "La cuota de entrada configurada para la red «%s» es %llu\n"
 
-#: src/ats/gnunet-service-ats_plugins.c:357
+#: src/ats/gnunet-service-ats_plugins.c:359
 #, fuzzy, c-format
 msgid ""
 "No %s-quota configured for network `%s', assigning default bandwidth %llu\n"
@@ -460,42 +466,46 @@ msgstr ""
 "No hay configurada una cuota de salida para la red «%s», asignando el ancho "
 "de banda predeterminado %llu\n"
 
-#: src/ats/gnunet-service-ats_plugins.c:449
+#: src/ats/plugin_ats2_common.c:90
 #, fuzzy, c-format
-msgid "Failed to initialize solver `%s'!\n"
-msgstr "¡No se puede inicializar el resolvedor!\n"
+msgid ""
+"Could not load %s quota for network `%s': `%s', assigning default bandwidth "
+"%llu\n"
+msgstr ""
+"No se pudieron cargar las cuotas para la red «%s»:  «%s», asignando el ancho "
+"de banda predeterminado %llu\n"
 
-#: src/ats/plugin_ats_mlp.c:1272
+#: src/ats/plugin_ats_mlp.c:1274
 msgid "Problem size too large, cannot allocate memory!\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:1868
+#: src/ats/plugin_ats_mlp.c:1870
 #, fuzzy, c-format
 msgid "Adding address for peer `%s' multiple times\n"
 msgstr "Añadiendo «%s» sin direcciones para el par «%s»\n"
 
-#: src/ats/plugin_ats_mlp.c:1912
+#: src/ats/plugin_ats_mlp.c:1914
 #, fuzzy, c-format
 msgid "Updating address property for peer `%s' %p not added before\n"
 msgstr "Añadiendo «%s» sin direcciones para el par «%s»\n"
 
-#: src/ats/plugin_ats_mlp.c:2474
+#: src/ats/plugin_ats_mlp.c:2476
 msgid ""
 "MLP solver is not optimizing for anything, changing to feasibility check\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:2514 src/ats/plugin_ats_mlp.c:2531
-#: src/ats/plugin_ats_mlp.c:2563 src/ats/plugin_ats_mlp.c:2581
-#: src/ats/plugin_ats_mlp.c:2600 src/ats/plugin_ats_proportional.c:1139
-#: src/ats/plugin_ats_ril.c:2610 src/ats/plugin_ats_ril.c:2627
-#: src/ats/plugin_ats_ril.c:2644 src/ats/plugin_ats_ril.c:2661
-#: src/ats/plugin_ats_ril.c:2678 src/ats/plugin_ats_ril.c:2695
-#: src/ats/plugin_ats_ril.c:2712 src/ats/plugin_ats_ril.c:2729
+#: src/ats/plugin_ats_mlp.c:2516 src/ats/plugin_ats_mlp.c:2533
+#: src/ats/plugin_ats_mlp.c:2565 src/ats/plugin_ats_mlp.c:2583
+#: src/ats/plugin_ats_mlp.c:2602 src/ats/plugin_ats_proportional.c:1141
+#: src/ats/plugin_ats_ril.c:2612 src/ats/plugin_ats_ril.c:2629
+#: src/ats/plugin_ats_ril.c:2646 src/ats/plugin_ats_ril.c:2663
+#: src/ats/plugin_ats_ril.c:2680 src/ats/plugin_ats_ril.c:2697
+#: src/ats/plugin_ats_ril.c:2714 src/ats/plugin_ats_ril.c:2731
 #, fuzzy, c-format
 msgid "Invalid %s configuration %f \n"
 msgstr "Se produjo un fallo al cargar la configuración de %s\n"
 
-#: src/ats/plugin_ats_mlp.c:2669
+#: src/ats/plugin_ats_mlp.c:2671
 #, fuzzy, c-format
 msgid ""
 "Adjusting inconsistent outbound quota configuration for network `%s', is "
@@ -504,7 +514,7 @@ msgstr ""
 "No hay configurada una cuota de salida para la red «%s», asignando el ancho "
 "de banda predeterminado %llu\n"
 
-#: src/ats/plugin_ats_mlp.c:2678
+#: src/ats/plugin_ats_mlp.c:2680
 #, fuzzy, c-format
 msgid ""
 "Adjusting inconsistent inbound quota configuration for network `%s', is %llu "
@@ -514,44 +524,44 @@ msgstr ""
 "ancho de banda predeterminado (%llu)\n"
 
 # Miguel: "Outbound" lo he traducido como salida en todo el texto.
-#: src/ats/plugin_ats_mlp.c:2688
+#: src/ats/plugin_ats_mlp.c:2690
 #, fuzzy, c-format
 msgid ""
 "Adjusting outbound quota configuration for network `%s'from %llu to %.0f\n"
 msgstr "La cuota de salida configurada para la red «%s» es %llu\n"
 
 # Miguel: "Outbound" lo he traducido como salida en todo el texto.
-#: src/ats/plugin_ats_mlp.c:2697
+#: src/ats/plugin_ats_mlp.c:2699
 #, fuzzy, c-format
 msgid ""
 "Adjusting inbound quota configuration for network `%s' from %llu to %.0f\n"
 msgstr "La cuota de salida configurada para la red «%s» es %llu\n"
 
-#: src/ats/plugin_ats_proportional.c:1162
+#: src/ats/plugin_ats_proportional.c:1164
 #, fuzzy, c-format
 msgid "Invalid %s configuration %f\n"
 msgstr "Se produjo un fallo al cargar la configuración de %s\n"
 
-#: src/ats-tests/ats-testing.c:420
+#: src/ats-tests/ats-testing.c:422
 #, c-format
 msgid "Connected master [%u] with slave [%u]\n"
 msgstr ""
 
-#: src/ats-tests/ats-testing.c:427
+#: src/ats-tests/ats-testing.c:429
 #, fuzzy, c-format
 msgid "Failed to connect master peer [%u] with slave [%u]\n"
 msgstr "Fallo al conectar a gnunetd.\n"
 
-#: src/ats-tests/ats-testing-log.c:835
+#: src/ats-tests/ats-testing-log.c:837
 msgid "Stop logging\n"
 msgstr ""
 
-#: src/ats-tests/ats-testing-log.c:890
+#: src/ats-tests/ats-testing-log.c:892
 #, fuzzy, c-format
 msgid "Start logging `%s'\n"
 msgstr "Iniciando descarga «%s».\n"
 
-#: src/ats-tests/gnunet-ats-sim.c:88
+#: src/ats-tests/gnunet-ats-sim.c:90
 #, c-format
 msgid ""
 "Master [%u]: sent: %u KiB in %u sec. = %u KiB/s, received: %u KiB in %u sec. "
@@ -562,19 +572,19 @@ msgstr ""
 # Son difíciles de no calcar, puesto que no conozco como expresar
 # el concepto de obtener una dirección a partir de un nombre
 # en castellano sin la palabra resolver. :-)
-#: src/ats-tool/gnunet-ats.c:305
+#: src/ats-tool/gnunet-ats.c:307
 #, c-format
 msgid "%u address resolutions had a timeout\n"
 msgstr "%u resoluciones de dirección pasaron de plazo\n"
 
-#: src/ats-tool/gnunet-ats.c:309
+#: src/ats-tool/gnunet-ats.c:311
 #, fuzzy, c-format
 msgid "ATS returned stat_results for %u addresses\n"
 msgstr "El ATS devolvió resultados para %u direcciones\n"
 
 # Miguel: "Plugin" está traducido como módulo en todo el texto
 # puesto que no hay módulos fijos en contraposición a cargables.
-#: src/ats-tool/gnunet-ats.c:393
+#: src/ats-tool/gnunet-ats.c:395
 #, c-format
 msgid ""
 "Peer `%s' plugin `%s', address `%s', `%s' bw out: %u Bytes/s, bw in %u Bytes/"
@@ -583,532 +593,518 @@ msgstr ""
 "Par «%s» módulo «%s», dirección «%s», «%s» subida: %u Bytes/s, bajada %u "
 "Bytes/s, %s\n"
 
-#: src/ats-tool/gnunet-ats.c:400
+#: src/ats-tool/gnunet-ats.c:402
 msgid "active "
 msgstr "activo "
 
-#: src/ats-tool/gnunet-ats.c:400
+#: src/ats-tool/gnunet-ats.c:402
 msgid "inactive "
 msgstr "inactivo "
 
-#: src/ats-tool/gnunet-ats.c:510
+#: src/ats-tool/gnunet-ats.c:512
 #, fuzzy, c-format
 msgid "Removed address of peer `%s' with plugin `%s'\n"
 msgstr "Eliminando dirección de transporte «%s»\n"
 
-#: src/ats-tool/gnunet-ats.c:703
+#: src/ats-tool/gnunet-ats.c:705
 #, c-format
 msgid "Quota for network `%11s' (in/out): %10s / %10s\n"
 msgstr "Cuota para la red «%11s» (entrada/salida): %10s / %10s\n"
 
-#: src/ats-tool/gnunet-ats.c:746 src/ats-tool/gnunet-ats.c:759
+#: src/ats-tool/gnunet-ats.c:748 src/ats-tool/gnunet-ats.c:761
 #, c-format
 msgid "Failed to parse peer identity `%s'\n"
 msgstr "Se produjo un fallo al procesar la identidad del par «%s»\n"
 
-#: src/ats-tool/gnunet-ats.c:771
+#: src/ats-tool/gnunet-ats.c:773
 #, fuzzy, c-format
 msgid "Please select one operation: %s or %s or %s or %s or %s\n"
 msgstr "Por favor, seleccione una operación: %s o %s o %s o %s o %s\n"
 
-#: src/ats-tool/gnunet-ats.c:793 src/ats-tool/gnunet-ats.c:818
-#: src/ats-tool/gnunet-ats.c:849 src/ats-tool/gnunet-ats.c:894
+#: src/ats-tool/gnunet-ats.c:795 src/ats-tool/gnunet-ats.c:820
+#: src/ats-tool/gnunet-ats.c:851 src/ats-tool/gnunet-ats.c:896
 msgid "Cannot connect to ATS service, exiting...\n"
 msgstr "No se puede conectar al servicio ATS, saliendo...\n"
 
-#: src/ats-tool/gnunet-ats.c:804 src/ats-tool/gnunet-ats.c:830
+#: src/ats-tool/gnunet-ats.c:806 src/ats-tool/gnunet-ats.c:832
 msgid "Cannot issue request to ATS service, exiting...\n"
 msgstr "No se puede iniciar una petición al servicio ATS, saliendo...\n"
 
-#: src/ats-tool/gnunet-ats.c:860
+#: src/ats-tool/gnunet-ats.c:862
 #, fuzzy
 msgid "No preference type given!\n"
 msgstr "establece las preferencias para el par dado"
 
-#: src/ats-tool/gnunet-ats.c:867
+#: src/ats-tool/gnunet-ats.c:869
 #, fuzzy
 msgid "No peer given!\n"
 msgstr "No se han proporcionado opciones\n"
 
-#: src/ats-tool/gnunet-ats.c:885
+#: src/ats-tool/gnunet-ats.c:887
 #, fuzzy
 msgid "Valid type required\n"
 msgstr "Tipo requerido\n"
 
-#: src/ats-tool/gnunet-ats.c:948
+#: src/ats-tool/gnunet-ats.c:950
 msgid "get list of active addresses currently used"
 msgstr "obtiene una lista de direcciones activas usadas actualmente"
 
-#: src/ats-tool/gnunet-ats.c:952
+#: src/ats-tool/gnunet-ats.c:954
 msgid "get list of all active addresses"
 msgstr "obtiene una lista de todas las direcciones activas"
 
-#: src/ats-tool/gnunet-ats.c:958
+#: src/ats-tool/gnunet-ats.c:960
 #, fuzzy
 msgid "connect to PEER"
 msgstr "conectar a un par"
 
-#: src/ats-tool/gnunet-ats.c:962
+#: src/ats-tool/gnunet-ats.c:964
 msgid "do not resolve IP addresses to hostnames"
 msgstr "no resuelve direcciones IP a nombres de máquina"
 
 # Miguel: Aquí he dejado monitorización porque esto es
 # del servicio de traducción de direcciones.
-#: src/ats-tool/gnunet-ats.c:967
+#: src/ats-tool/gnunet-ats.c:969
 msgid "monitor mode"
 msgstr "modo de monitorización"
 
-#: src/ats-tool/gnunet-ats.c:972
+#: src/ats-tool/gnunet-ats.c:974
 msgid "set preference for the given peer"
 msgstr "establece las preferencias para el par dado"
 
-#: src/ats-tool/gnunet-ats.c:977
+#: src/ats-tool/gnunet-ats.c:979
 msgid "print all configured quotas"
 msgstr "imprime todas las cuotas configuradas"
 
 # Miguel: He preferido extender id a identificación por claridad.
-#: src/ats-tool/gnunet-ats.c:982
+#: src/ats-tool/gnunet-ats.c:984
 msgid "peer id"
 msgstr "identificación del par"
 
 # Miguel: No me he encontrado esta opción todavía,
 # pero creo que son palabras clave.
-#: src/ats-tool/gnunet-ats.c:988
+#: src/ats-tool/gnunet-ats.c:990
 msgid "preference type to set: latency | bandwidth"
 msgstr ""
 "tipo de preferencia a modificar: latency (latencia) | bandwidth (ancho de "
 "banda)"
 
-#: src/ats-tool/gnunet-ats.c:994
+#: src/ats-tool/gnunet-ats.c:996
 msgid "preference value"
 msgstr "valor de preferencia"
 
 # Miguel: ¿Algo menos forzado que "salida prolija"?
-#: src/ats-tool/gnunet-ats.c:999
+#: src/ats-tool/gnunet-ats.c:1001
 msgid "verbose output (include ATS address properties)"
 msgstr "salida prolija (incluye las propiedades de direcciones del ATS)"
 
-#: src/ats-tool/gnunet-ats.c:1009
+#: src/ats-tool/gnunet-ats.c:1011
 msgid "Print information about ATS state"
 msgstr "Imprime información acerca del estado del ATS"
 
-#: src/auction/gnunet-auction-create.c:161
+#: src/auction/gnunet-auction-create.c:163
 msgid "description of the item to be sold"
 msgstr "descripción del elemento que está por vender"
 
-#: src/auction/gnunet-auction-create.c:167
+#: src/auction/gnunet-auction-create.c:169
 msgid "mapping of possible prices"
 msgstr "figurando posibles precios"
 
-#: src/auction/gnunet-auction-create.c:173
+#: src/auction/gnunet-auction-create.c:175
 msgid "max duration per round"
 msgstr "maxima duración del turno"
 
-#: src/auction/gnunet-auction-create.c:179
+#: src/auction/gnunet-auction-create.c:181
 msgid "duration until auction starts"
 msgstr "duración hasta que la caución empieza"
 
-#: src/auction/gnunet-auction-create.c:184
+#: src/auction/gnunet-auction-create.c:186
 msgid ""
 "number of items to sell\n"
 "0 for first price auction\n"
 ">0 for vickrey/M+1st price auction"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:191
+#: src/auction/gnunet-auction-create.c:193
 #, fuzzy
 msgid "public auction outcome"
 msgstr "_Opciones"
 
-#: src/auction/gnunet-auction-create.c:196
+#: src/auction/gnunet-auction-create.c:198
 msgid "keep running in foreground until auction completes"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:207
+#: src/auction/gnunet-auction-create.c:209
 msgid "create a new auction and start listening for bidders"
 msgstr ""
 
-#: src/auction/gnunet-auction-info.c:74 src/auction/gnunet-auction-join.c:74
-#: src/conversation/gnunet-conversation-test.c:252
-#: src/revocation/gnunet-revocation.c:560 src/template/gnunet-template.c:74
+#: src/auction/gnunet-auction-info.c:76 src/auction/gnunet-auction-join.c:76
+#: src/conversation/gnunet-conversation-test.c:254
+#: src/revocation/gnunet-revocation.c:562 src/template/gnunet-template.c:76
 msgid "help text"
 msgstr "texto de ayuda"
 
-#: src/cadet/gnunet-cadet.c:705
+#: src/cadet/gnunet-cadet.c:631
 #, fuzzy, c-format
 msgid "Invalid peer ID `%s'\n"
 msgstr "URI no válida: «%s»\n"
 
-#: src/cadet/gnunet-cadet.c:744
-#, fuzzy, c-format
-msgid "Invalid tunnel owner `%s'\n"
-msgstr "Formato de tiempo no válido «%s»\n"
-
-#: src/cadet/gnunet-cadet.c:817
+#: src/cadet/gnunet-cadet.c:718
 msgid "Extra arguments are not applicable in combination with this option.\n"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:908
+#: src/cadet/gnunet-cadet.c:795
 #, fuzzy, c-format
 msgid "Invalid target `%s'\n"
 msgstr "Parámetro no válido «%s»\n"
 
-#: src/cadet/gnunet-cadet.c:945
+#: src/cadet/gnunet-cadet.c:832
 #, fuzzy
 msgid "No action requested\n"
 msgstr "Colección detenida.\n"
 
-#: src/cadet/gnunet-cadet.c:970
+#: src/cadet/gnunet-cadet.c:857
 #, fuzzy
 msgid "Provide information about a particular connection"
 msgstr "proveer información acerca de un túnel en particular"
 
-#: src/cadet/gnunet-cadet.c:975
+#: src/cadet/gnunet-cadet.c:861
 msgid "Activate echo mode"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:980
-msgid "Dump debug information to STDERR"
-msgstr ""
-
-#: src/cadet/gnunet-cadet.c:986
+#: src/cadet/gnunet-cadet.c:866
 msgid "Listen for connections using a shared secret among sender and recipient"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:993
+#: src/cadet/gnunet-cadet.c:871
 #, fuzzy
 msgid "Provide information about a patricular peer"
 msgstr "proveer información acerca de un túnel en particular"
 
-#: src/cadet/gnunet-cadet.c:999
+#: src/cadet/gnunet-cadet.c:875
 #, fuzzy
 msgid "Provide information about all peers"
 msgstr "proveer información acerca de un túnel en particular"
 
-#: src/cadet/gnunet-cadet.c:1005
-#, fuzzy
-msgid "Provide information about a particular tunnel"
-msgstr "proveer información acerca de un túnel en particular"
-
-#: src/cadet/gnunet-cadet.c:1011
+#: src/cadet/gnunet-cadet.c:879
 #, fuzzy
 msgid "Provide information about all tunnels"
 msgstr "proveer información acerca de un túnel en particular"
 
-#: src/consensus/gnunet-consensus-profiler.c:521
-#: src/secretsharing/gnunet-secretsharing-profiler.c:608
+#: src/consensus/gnunet-consensus-profiler.c:523
+#: src/secretsharing/gnunet-secretsharing-profiler.c:610
 msgid "number of peers in consensus"
 msgstr "número de pares en consenso"
 
-#: src/consensus/gnunet-consensus-profiler.c:527
+#: src/consensus/gnunet-consensus-profiler.c:529
 #, fuzzy
 msgid ""
 "how many peers (random selection without replacement) receive one value?"
 msgstr "¿cuántos pares reciben un valor?"
 
-#: src/consensus/gnunet-consensus-profiler.c:533
-#: src/set/gnunet-set-profiler.c:431 src/set/gnunet-set-profiler.c:437
-#: src/set/gnunet-set-profiler.c:460
+#: src/consensus/gnunet-consensus-profiler.c:535
+#: src/set/gnunet-set-profiler.c:433 src/set/gnunet-set-profiler.c:439
+#: src/set/gnunet-set-profiler.c:462
 msgid "number of values"
 msgstr "número de valores"
 
 # Miguel: "timeout" lo he traducido como plazo, pero no se
 # si hay alguna palabra que lo describa mejor.
-#: src/consensus/gnunet-consensus-profiler.c:539
+#: src/consensus/gnunet-consensus-profiler.c:541
 msgid "consensus timeout"
 msgstr "plazo de consenso"
 
-#: src/consensus/gnunet-consensus-profiler.c:546
+#: src/consensus/gnunet-consensus-profiler.c:548
 msgid "delay until consensus starts"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:552
-#: src/set/gnunet-set-profiler.c:478
+#: src/consensus/gnunet-consensus-profiler.c:554
+#: src/set/gnunet-set-profiler.c:480
 #, fuzzy
 msgid "write statistics to file"
 msgstr "imprime el valor de las estadísticas"
 
-#: src/consensus/gnunet-consensus-profiler.c:557
+#: src/consensus/gnunet-consensus-profiler.c:559
 msgid "distribute elements to a static subset of good peers"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:562
+#: src/consensus/gnunet-consensus-profiler.c:564
 msgid "be more verbose (print received values)"
 msgstr ""
 
-#: src/conversation/conversation_api.c:513
-#: src/conversation/conversation_api_call.c:492
+#: src/conversation/conversation_api.c:515
+#: src/conversation/conversation_api_call.c:494
 #, fuzzy
 msgid "Connection to conversation service lost, trying to reconnect\n"
 msgstr ""
 "El cliente se desconectó del servicio principal, tratando de reconectar.\n"
 
-#: src/conversation/gnunet-conversation.c:275
+#: src/conversation/gnunet-conversation.c:277
 #, c-format
 msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:300
+#: src/conversation/gnunet-conversation.c:302
 #, c-format
 msgid "Call from `%s' terminated\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:335
+#: src/conversation/gnunet-conversation.c:337
 #, c-format
 msgid "Call from `%s' suspended by other user\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:340
+#: src/conversation/gnunet-conversation.c:342
 #, c-format
 msgid "Call from `%s' resumed by other user\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:358
+#: src/conversation/gnunet-conversation.c:360
 #, c-format
 msgid "Ego `%s' no longer available, phone is now down.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:373
+#: src/conversation/gnunet-conversation.c:375
 #, fuzzy
 msgid "Failed to setup phone (internal error)\n"
 msgstr "¡Se produjo un fallo al configurar el túnel mesh!\n"
 
-#: src/conversation/gnunet-conversation.c:385
+#: src/conversation/gnunet-conversation.c:387
 #, c-format
 msgid "Phone active at `%s'.  Type `/help' for a list of available commands\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:409
+#: src/conversation/gnunet-conversation.c:411
 #, c-format
 msgid "Resolved address of `%s'. Now ringing other party.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:416
+#: src/conversation/gnunet-conversation.c:418
 #, fuzzy, c-format
 msgid "Connection established to `%s'\n"
 msgstr "'%s' falló en %s: %d con error: '%s'.\n"
 
-#: src/conversation/gnunet-conversation.c:423
+#: src/conversation/gnunet-conversation.c:425
 #, fuzzy, c-format
 msgid "Failed to resolve `%s'\n"
 msgstr "Se produjo un fallo al resolver «%s»: %s\n"
 
-#: src/conversation/gnunet-conversation.c:431
+#: src/conversation/gnunet-conversation.c:433
 #, c-format
 msgid "Call to `%s' terminated\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:440
+#: src/conversation/gnunet-conversation.c:442
 #, c-format
 msgid "Connection to `%s' suspended (by other user)\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:446
+#: src/conversation/gnunet-conversation.c:448
 #, c-format
 msgid "Connection to `%s' resumed (by other user)\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:451
+#: src/conversation/gnunet-conversation.c:453
 msgid "Error with the call, restarting it\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:522
+#: src/conversation/gnunet-conversation.c:524
 #, c-format
 msgid "Unknown command `%s'\n"
 msgstr "Comando desconocido «%s»\n"
 
-#: src/conversation/gnunet-conversation.c:538
-#: src/conversation/gnunet-conversation.c:552
+#: src/conversation/gnunet-conversation.c:540
+#: src/conversation/gnunet-conversation.c:554
 #, c-format
 msgid "Ego `%s' not available\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:545
-#: src/conversation/gnunet-conversation.c:601
+#: src/conversation/gnunet-conversation.c:547
+#: src/conversation/gnunet-conversation.c:603
 msgid "You are calling someone else already, hang up first!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:560
-#: src/conversation/gnunet-conversation.c:614
+#: src/conversation/gnunet-conversation.c:562
+#: src/conversation/gnunet-conversation.c:616
 #, c-format
 msgid "You are answering call from `%s', hang up or suspend that call first!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:570
+#: src/conversation/gnunet-conversation.c:572
 msgid "Call recipient missing.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:625
+#: src/conversation/gnunet-conversation.c:627
 msgid "There is no incoming call to accept here!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:642
+#: src/conversation/gnunet-conversation.c:644
 #, c-format
 msgid "There is no incoming call `%s' to accept right now!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:673
+#: src/conversation/gnunet-conversation.c:675
 msgid "We currently do not have an address.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:697
+#: src/conversation/gnunet-conversation.c:699
 #, c-format
 msgid "We are currently trying to locate the private key for the ego `%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:702
+#: src/conversation/gnunet-conversation.c:704
 #, c-format
 msgid "We are listening for incoming calls for ego `%s' on line `%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:708
-#: src/conversation/gnunet-conversation.c:732
+#: src/conversation/gnunet-conversation.c:710
+#: src/conversation/gnunet-conversation.c:734
 #, c-format
 msgid "You are having a conversation with `%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:713
+#: src/conversation/gnunet-conversation.c:715
 msgid ""
 "We had an internal error setting up our phone line. You can still make "
 "calls.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:722
+#: src/conversation/gnunet-conversation.c:724
 #, fuzzy, c-format
 msgid "We are trying to find the network address to call `%s'.\n"
 msgstr "Detectada dirección de la red interna «%s».\n"
 
-#: src/conversation/gnunet-conversation.c:727
+#: src/conversation/gnunet-conversation.c:729
 #, c-format
 msgid "We are calling `%s', their phone should be ringing.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:746
+#: src/conversation/gnunet-conversation.c:748
 msgid "Calls waiting:\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:752
+#: src/conversation/gnunet-conversation.c:754
 #, fuzzy, c-format
 msgid "#%u: `%s'\n"
 msgstr "Par «%s»\n"
 
-#: src/conversation/gnunet-conversation.c:781
-#: src/conversation/gnunet-conversation.c:796
+#: src/conversation/gnunet-conversation.c:783
+#: src/conversation/gnunet-conversation.c:798
 msgid "There is no call that could be suspended right now.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:829
-#: src/conversation/gnunet-conversation.c:845
+#: src/conversation/gnunet-conversation.c:831
+#: src/conversation/gnunet-conversation.c:847
 msgid "There is no call that could be resumed right now.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:852
+#: src/conversation/gnunet-conversation.c:854
 #, c-format
 msgid "Already talking with `%s', cannot resume a call right now.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:861
+#: src/conversation/gnunet-conversation.c:863
 msgid "There is no incoming call to resume here!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:878
+#: src/conversation/gnunet-conversation.c:880
 #, c-format
 msgid "There is no incoming call `%s' to resume right now!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:913
+#: src/conversation/gnunet-conversation.c:915
 msgid "There is no call that could be cancelled right now.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:921
+#: src/conversation/gnunet-conversation.c:923
 msgid "There is no incoming call to refuse here!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:938
+#: src/conversation/gnunet-conversation.c:940
 #, c-format
 msgid "There is no incoming call `%s' to refuse right now!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:964
+#: src/conversation/gnunet-conversation.c:966
 msgid "Use `/address' to find out which address this phone should have in GNS"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:966
+#: src/conversation/gnunet-conversation.c:968
 msgid "Use `/call USER.gnu' to call USER"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:968
+#: src/conversation/gnunet-conversation.c:970
 msgid "Use `/accept #NUM' to accept incoming call #NUM"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:970
+#: src/conversation/gnunet-conversation.c:972
 msgid "Use `/suspend' to suspend the active call"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:972
+#: src/conversation/gnunet-conversation.c:974
 msgid ""
 "Use `/resume [#NUM]' to resume a call, #NUM is needed to resume incoming "
 "calls, no argument is needed to resume the current outgoing call."
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:974
+#: src/conversation/gnunet-conversation.c:976
 msgid "Use `/cancel' to reject or terminate a call"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:976
+#: src/conversation/gnunet-conversation.c:978
 #, fuzzy
 msgid "Use `/status' to print status information"
 msgstr "ser prolijo (imprime información de progreso)"
 
-#: src/conversation/gnunet-conversation.c:978
+#: src/conversation/gnunet-conversation.c:980
 #, fuzzy
 msgid "Use `/quit' to terminate gnunet-conversation"
 msgstr "Use «/quit» para finalizar «gnunet-chat»"
 
-#: src/conversation/gnunet-conversation.c:980
+#: src/conversation/gnunet-conversation.c:982
 msgid "Use `/help command' to get help for a specific command"
 msgstr "Use «/help comando» para obtener ayuda sobre un comando específico"
 
-#: src/conversation/gnunet-conversation.c:1196
+#: src/conversation/gnunet-conversation.c:1198
 #, fuzzy, c-format
 msgid "Name of our ego changed to `%s'\n"
 msgstr "Se produjo un fallo al crear la página para «%s»\n"
 
-#: src/conversation/gnunet-conversation.c:1209
+#: src/conversation/gnunet-conversation.c:1211
 #, fuzzy, c-format
 msgid "Our ego `%s' was deleted!\n"
 msgstr "El pseudónimo '%s' fue borrado.\n"
 
-#: src/conversation/gnunet-conversation.c:1247
+#: src/conversation/gnunet-conversation.c:1249
 #, fuzzy
 msgid "You must specify the NAME of an ego to use\n"
 msgstr "Debes especificar un fichero a inspeccionar.\n"
 
-#: src/conversation/gnunet-conversation.c:1271
+#: src/conversation/gnunet-conversation.c:1273
 #, fuzzy
 msgid "Failed to start gnunet-helper-w32-console\n"
 msgstr "Se produjo un fallo al iniciar el proceso «gnunet-peerinfo».\n"
 
-#: src/conversation/gnunet-conversation.c:1300
+#: src/conversation/gnunet-conversation.c:1302
 msgid "sets the NAME of the ego to use for the caller ID"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:1305
+#: src/conversation/gnunet-conversation.c:1307
 msgid "sets the LINE to use for the phone"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:1334
+#: src/conversation/gnunet-conversation.c:1336
 msgid "Enables having a conversation with other GNUnet users."
 msgstr ""
 
-#: src/conversation/gnunet-conversation-test.c:118
+#: src/conversation/gnunet-conversation-test.c:120
 #, c-format
 msgid ""
 "\n"
 "End of transmission.  Have a GNU day.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation-test.c:143
+#: src/conversation/gnunet-conversation-test.c:145
 #, c-format
 msgid ""
 "\n"
@@ -1116,790 +1112,789 @@ msgid ""
 "settings are working..."
 msgstr ""
 
-#: src/conversation/gnunet-conversation-test.c:214
+#: src/conversation/gnunet-conversation-test.c:216
 #, c-format
 msgid ""
 "We will now be recording you for %s. After that time, the recording will be "
 "played back to you..."
 msgstr ""
 
-#: src/conversation/gnunet_gst.c:620
-#: src/conversation/gnunet-helper-audio-playback-gst.c:359
+#: src/conversation/gnunet_gst.c:622
+#: src/conversation/gnunet-helper-audio-playback-gst.c:361
 #, c-format
 msgid "Read error from STDIN: %d %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:323
+#: src/conversation/gnunet-helper-audio-playback.c:325
 #, fuzzy, c-format
 msgid "pa_stream_write() failed: %s\n"
 msgstr "stadísticas (%s) falló: %s\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:625
+#: src/conversation/gnunet-helper-audio-playback.c:627
 msgid "gnunet-helper-audio-playback - Got signal, exiting\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:651
-#: src/conversation/gnunet-helper-audio-record.c:561
+#: src/conversation/gnunet-helper-audio-playback.c:653
+#: src/conversation/gnunet-helper-audio-record.c:563
 #, fuzzy
 msgid "Connection established.\n"
 msgstr "Colección detenida.\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:656
-#: src/conversation/gnunet-helper-audio-record.c:566
+#: src/conversation/gnunet-helper-audio-playback.c:658
+#: src/conversation/gnunet-helper-audio-record.c:568
 #, fuzzy, c-format
 msgid "pa_stream_new() failed: %s\n"
 msgstr "stadísticas (%s) falló: %s\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:670
+#: src/conversation/gnunet-helper-audio-playback.c:672
 #, c-format
 msgid "pa_stream_connect_playback() failed: %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:683
-#: src/conversation/gnunet-helper-audio-record.c:592
+#: src/conversation/gnunet-helper-audio-playback.c:685
+#: src/conversation/gnunet-helper-audio-record.c:594
 #, fuzzy, c-format
 msgid "Connection failure: %s\n"
 msgstr "'%s' falló en %s: %d con error: '%s'.\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:704
-#: src/conversation/gnunet-helper-audio-record.c:615
+#: src/conversation/gnunet-helper-audio-playback.c:706
+#: src/conversation/gnunet-helper-audio-record.c:617
 #, fuzzy
 msgid "Wrong Spec\n"
 msgstr "Servicio principal (CORE) erróneo\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:710
-#: src/conversation/gnunet-helper-audio-record.c:621
+#: src/conversation/gnunet-helper-audio-playback.c:712
+#: src/conversation/gnunet-helper-audio-record.c:623
 #, fuzzy
 msgid "pa_mainloop_new() failed.\n"
 msgstr "La operación ha fallado.\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:724
-#: src/conversation/gnunet-helper-audio-record.c:636
+#: src/conversation/gnunet-helper-audio-playback.c:726
+#: src/conversation/gnunet-helper-audio-record.c:638
 #, fuzzy
 msgid "pa_context_new() failed.\n"
 msgstr "La operación ha fallado.\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:731
-#: src/conversation/gnunet-helper-audio-record.c:642
+#: src/conversation/gnunet-helper-audio-playback.c:733
+#: src/conversation/gnunet-helper-audio-record.c:644
 #, fuzzy, c-format
 msgid "pa_context_connect() failed: %s\n"
 msgstr "# reconexiones rápidas fallidas"
 
-#: src/conversation/gnunet-helper-audio-playback.c:737
-#: src/conversation/gnunet-helper-audio-record.c:648
+#: src/conversation/gnunet-helper-audio-playback.c:739
+#: src/conversation/gnunet-helper-audio-record.c:650
 #, fuzzy
 msgid "pa_mainloop_run() failed.\n"
 msgstr "La operación ha fallado.\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:816
+#: src/conversation/gnunet-helper-audio-playback.c:818
 #, c-format
 msgid "Read error from STDIN: %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:351
+#: src/conversation/gnunet-helper-audio-record.c:353
 #, fuzzy, c-format
 msgid "opus_encode_float() failed: %s. Aborting\n"
 msgstr "# reconexiones rápidas fallidas"
 
-#: src/conversation/gnunet-helper-audio-record.c:430
+#: src/conversation/gnunet-helper-audio-record.c:432
 #, fuzzy, c-format
 msgid "pa_stream_peek() failed: %s\n"
 msgstr "stadísticas (%s) falló: %s\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:472
+#: src/conversation/gnunet-helper-audio-record.c:474
 msgid "Got signal, exiting.\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:498
+#: src/conversation/gnunet-helper-audio-record.c:500
 #, fuzzy
 msgid "Stream successfully created.\n"
 msgstr "Conectado satisfactoriamente a «%s»\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:503
+#: src/conversation/gnunet-helper-audio-record.c:505
 #, fuzzy, c-format
 msgid "pa_stream_get_buffer_attr() failed: %s\n"
 msgstr "stadísticas (%s) falló: %s\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:511
+#: src/conversation/gnunet-helper-audio-record.c:513
 #, c-format
 msgid "Buffer metrics: maxlength=%u, fragsize=%u\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:515
+#: src/conversation/gnunet-helper-audio-record.c:517
 #, c-format
 msgid "Using sample spec '%s', channel map '%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:522
+#: src/conversation/gnunet-helper-audio-record.c:524
 #, fuzzy, c-format
 msgid "Connected to device %s (%u, %ssuspended).\n"
 msgstr "Conectado a %s.\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:531
+#: src/conversation/gnunet-helper-audio-record.c:533
 #, c-format
 msgid "Stream error: %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:579
+#: src/conversation/gnunet-helper-audio-record.c:581
 #, fuzzy, c-format
 msgid "pa_stream_connect_record() failed: %s\n"
 msgstr "No se pudo borrar el registro: %s\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:693
+#: src/conversation/gnunet-helper-audio-record.c:695
 #, fuzzy
 msgid "ogg_stream_init() failed.\n"
 msgstr "stadísticas (%s) falló: %s\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:738
+#: src/conversation/gnunet-helper-audio-record.c:740
 #, fuzzy, c-format
 msgid "Failed to allocate %u bytes for second packet\n"
 msgstr ""
 "Se produjo un fallo al alojar las direcciones IP para el nuevo destino\n"
 
-#: src/conversation/gnunet-service-conversation.c:1303
+#: src/conversation/gnunet-service-conversation.c:1305
 #, fuzzy, c-format
 msgid "Could not open line, port %s already in use!\n"
 msgstr "¡No se pudo conectar al servicio %s!\n"
 
-#: src/conversation/microphone.c:119
+#: src/conversation/microphone.c:121
 #, fuzzy
 msgid "Could not start record audio helper\n"
 msgstr "No se pudo empezar la operación de desindexado.\n"
 
-#: src/conversation/plugin_gnsrecord_conversation.c:70
+#: src/conversation/plugin_gnsrecord_conversation.c:72
 #, fuzzy, c-format
 msgid "PHONE version %u not supported\n"
 msgstr "Protocolo %u no soportado, omitiendo\n"
 
-#: src/conversation/plugin_gnsrecord_conversation.c:133
-#: src/conversation/plugin_gnsrecord_conversation.c:147
+#: src/conversation/plugin_gnsrecord_conversation.c:135
+#: src/conversation/plugin_gnsrecord_conversation.c:149
 #, fuzzy, c-format
 msgid "Unable to parse PHONE record `%s'\n"
 msgstr "No se pudo procesar el registro PKEY «%s»\n"
 
-#: src/conversation/speaker.c:73
+#: src/conversation/speaker.c:75
 #, fuzzy
 msgid "Could not start playback audio helper.\n"
 msgstr "No se pudo empezar a publicar.\n"
 
-#: src/core/gnunet-core.c:88
+#: src/core/gnunet-core.c:90
 #, fuzzy
 msgid "fresh connection"
 msgstr "# amigos conectados"
 
-#: src/core/gnunet-core.c:91
+#: src/core/gnunet-core.c:93
 msgid "key sent"
 msgstr ""
 
-#: src/core/gnunet-core.c:94
+#: src/core/gnunet-core.c:96
 #, fuzzy
 msgid "key received"
 msgstr "# claves de sesión recibidas"
 
-#: src/core/gnunet-core.c:97
+#: src/core/gnunet-core.c:99
 #, fuzzy
 msgid "connection established"
 msgstr "Colección detenida.\n"
 
-#: src/core/gnunet-core.c:100
+#: src/core/gnunet-core.c:102
 msgid "rekeying"
 msgstr ""
 
-#: src/core/gnunet-core.c:103
+#: src/core/gnunet-core.c:105
 #, fuzzy
 msgid "disconnected"
 msgstr "Desconectado de"
 
-#: src/core/gnunet-core.c:110
+#: src/core/gnunet-core.c:112
 #, fuzzy
 msgid "Connection to CORE service lost (reconnecting)"
 msgstr ""
 "El cliente se desconectó del servicio principal, tratando de reconectar.\n"
 
-#: src/core/gnunet-core.c:113
+#: src/core/gnunet-core.c:115
 #, fuzzy
 msgid "unknown state"
 msgstr "<tiempo desconocido>"
 
-#: src/core/gnunet-core.c:118
+#: src/core/gnunet-core.c:120
 #, fuzzy, c-format
 msgid "%24s: %-30s %4s (timeout in %6s)\n"
 msgstr "%24s: %-17s %4s   (%u conexiones en total)\n"
 
-#: src/core/gnunet-core.c:142 src/peerinfo-tool/gnunet-peerinfo.c:726
+#: src/core/gnunet-core.c:144 src/peerinfo-tool/gnunet-peerinfo.c:728
 #, c-format
 msgid "Invalid command line argument `%s'\n"
 msgstr "Parámetro no válido «%s» en la línea de comandos\n"
 
-#: src/core/gnunet-core.c:153
+#: src/core/gnunet-core.c:155
 #, fuzzy
 msgid "Failed to connect to CORE service!\n"
 msgstr "¡Se produjo un fallo al conectar con el servicio DHT!\n"
 
 # Miguel: ¿Quizá continuamente fuese mejor?
-#: src/core/gnunet-core.c:175 src/transport/gnunet-transport.c:1447
+#: src/core/gnunet-core.c:177 src/transport/gnunet-transport.c:1449
 msgid "provide information about all current connections (continuously)"
 msgstr ""
 "provee información sobre todas las conexiones actuales (de forma continua)"
 
-#: src/core/gnunet-core.c:184
+#: src/core/gnunet-core.c:186
 msgid "Print information about connected peers."
 msgstr "Imprime información sobre los pares conectados."
 
-#: src/core/gnunet-service-core.c:345
+#: src/core/gnunet-service-core.c:347
 msgid "# send requests dropped (disconnected)"
 msgstr "# peticiones de envío descartadas (desconectado)"
 
-#: src/core/gnunet-service-core.c:369
+#: src/core/gnunet-service-core.c:371
 msgid "# dequeuing CAR (duplicate request)"
 msgstr ""
 
-#: src/core/gnunet-service-core.c:441
+#: src/core/gnunet-service-core.c:443
 #, c-format
 msgid "# bytes of messages of type %u received"
 msgstr "# bytes de mensajes del tipo %u recibidos"
 
-#: src/core/gnunet-service-core.c:539
+#: src/core/gnunet-service-core.c:541
 msgid "# messages discarded (session disconnected)"
 msgstr "# mensajes descartados (sesión desconectada)"
 
-#: src/core/gnunet-service-core.c:877
+#: src/core/gnunet-service-core.c:879
 #, fuzzy, c-format
 msgid "# messages of type %u discarded (client busy)"
 msgstr "# bytes de mensajes del tipo %u recibidos"
 
-#: src/core/gnunet-service-core.c:986
+#: src/core/gnunet-service-core.c:988
 msgid "Core service is lacking HOSTKEY configuration setting.  Exiting.\n"
 msgstr ""
 "Al servicio principal le falta la configuración de la clave de máquina "
 "(HOSTKEY).  Saliendo.\n"
 
-#: src/core/gnunet-service-core.c:1007
+#: src/core/gnunet-service-core.c:1009
 #, fuzzy, c-format
 msgid "Core service of `%s' ready.\n"
 msgstr "El servicio principal de «%4s» está listo.\n"
 
-#: src/core/gnunet-service-core_kx.c:615
+#: src/core/gnunet-service-core_kx.c:617
 msgid "# bytes encrypted"
 msgstr "# bytes cifrados"
 
-#: src/core/gnunet-service-core_kx.c:675
+#: src/core/gnunet-service-core_kx.c:677
 msgid "# bytes decrypted"
 msgstr "# bytes descifrados"
 
-#: src/core/gnunet-service-core_kx.c:777
+#: src/core/gnunet-service-core_kx.c:779
 #, fuzzy
 msgid "# PAYLOAD dropped (out of order)"
 msgstr "# bytes omitidos (fuera de secuencia)"
 
-#: src/core/gnunet-service-core_kx.c:827
+#: src/core/gnunet-service-core_kx.c:829
 msgid "# key exchanges initiated"
 msgstr "# intercambio de claves iniciados"
 
-#: src/core/gnunet-service-core_kx.c:889
+#: src/core/gnunet-service-core_kx.c:891
 msgid "# key exchanges stopped"
 msgstr "# intercambio de claves parados"
 
-#: src/core/gnunet-service-core_kx.c:923
+#: src/core/gnunet-service-core_kx.c:925
 #, fuzzy
 msgid "# PING messages transmitted"
 msgstr "# mensajes PONG creados"
 
-#: src/core/gnunet-service-core_kx.c:990
+#: src/core/gnunet-service-core_kx.c:992
 msgid "# old ephemeral keys ignored"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1003
+#: src/core/gnunet-service-core_kx.c:1005
 #, fuzzy
 msgid "# duplicate ephemeral keys ignored"
 msgstr "# mapas de tipos recibidos"
 
-#: src/core/gnunet-service-core_kx.c:1038
+#: src/core/gnunet-service-core_kx.c:1040
 #, fuzzy
 msgid "# EPHEMERAL_KEYs rejected (bad signature)"
 msgstr "# mensajes «SET_KEY» descifrados"
 
-#: src/core/gnunet-service-core_kx.c:1052
+#: src/core/gnunet-service-core_kx.c:1054
 #, c-format
 msgid ""
 "EPHEMERAL_KEY from peer `%s' rejected as its validity range does not match "
 "our system time (%llu not in [%llu,%llu]).\n"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1058
+#: src/core/gnunet-service-core_kx.c:1060
 #, fuzzy
 msgid "# EPHEMERAL_KEY messages rejected due to time"
 msgstr "# mensajes «SET_KEY» descifrados"
 
-#: src/core/gnunet-service-core_kx.c:1078
+#: src/core/gnunet-service-core_kx.c:1080
 #, fuzzy
 msgid "# valid ephemeral keys received"
 msgstr "# mapas de tipos recibidos"
 
-#: src/core/gnunet-service-core_kx.c:1178
-#: src/transport/gnunet-service-transport_validation.c:1126
+#: src/core/gnunet-service-core_kx.c:1180
+#: src/transport/gnunet-service-transport_validation.c:1128
 msgid "# PING messages received"
 msgstr "# mensajes PING recibidos"
 
-#: src/core/gnunet-service-core_kx.c:1187
+#: src/core/gnunet-service-core_kx.c:1189
 #, fuzzy
 msgid "# PING messages dropped (out of order)"
 msgstr "# Mensajes P2P omitidos debido a saturación de la cola"
 
-#: src/core/gnunet-service-core_kx.c:1246
+#: src/core/gnunet-service-core_kx.c:1248
 msgid "# PONG messages created"
 msgstr "# mensajes PONG creados"
 
-#: src/core/gnunet-service-core_kx.c:1272
+#: src/core/gnunet-service-core_kx.c:1274
 msgid "# sessions terminated by timeout"
 msgstr "# sesiones terminadas por plazo de expiración"
 
-#: src/core/gnunet-service-core_kx.c:1285
+#: src/core/gnunet-service-core_kx.c:1287
 msgid "# keepalive messages sent"
 msgstr "# mensajes «keepalive» enviados"
 
-#: src/core/gnunet-service-core_kx.c:1349
-#: src/transport/gnunet-service-transport_validation.c:1459
+#: src/core/gnunet-service-core_kx.c:1351
+#: src/transport/gnunet-service-transport_validation.c:1461
 msgid "# PONG messages received"
 msgstr "# mensajes PONG recibidos"
 
-#: src/core/gnunet-service-core_kx.c:1356
+#: src/core/gnunet-service-core_kx.c:1358
 #, fuzzy
 msgid "# PONG messages dropped (connection down)"
 msgstr "# mensajes PONG recibidos"
 
-#: src/core/gnunet-service-core_kx.c:1361
+#: src/core/gnunet-service-core_kx.c:1363
 #, fuzzy
 msgid "# PONG messages dropped (out of order)"
 msgstr "# Mensajes P2P omitidos debido a saturación de la cola"
 
-#: src/core/gnunet-service-core_kx.c:1396
+#: src/core/gnunet-service-core_kx.c:1398
 msgid "# PONG messages decrypted"
 msgstr "# mensajes PONG descifrados"
 
-#: src/core/gnunet-service-core_kx.c:1434
+#: src/core/gnunet-service-core_kx.c:1436
 msgid "# session keys confirmed via PONG"
 msgstr "# claves de sesión confirmadas vía PONG"
 
-#: src/core/gnunet-service-core_kx.c:1445
+#: src/core/gnunet-service-core_kx.c:1447
 #, fuzzy
 msgid "# timeouts prevented via PONG"
 msgstr "# bytes recibidos vía TCP"
 
-#: src/core/gnunet-service-core_kx.c:1452
+#: src/core/gnunet-service-core_kx.c:1454
 msgid "# rekey operations confirmed via PONG"
 msgstr "# operaciones de cambio de clave confirmadas vía PONG"
 
-#: src/core/gnunet-service-core_kx.c:1640
+#: src/core/gnunet-service-core_kx.c:1642
 #, fuzzy
 msgid "# DATA message dropped (out of order)"
 msgstr "# bytes omitidos (fuera de secuencia)"
 
-#: src/core/gnunet-service-core_kx.c:1648
+#: src/core/gnunet-service-core_kx.c:1650
 #, c-format
 msgid ""
 "Session to peer `%s' went down due to key expiration (should not happen)\n"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1651
+#: src/core/gnunet-service-core_kx.c:1653
 #, fuzzy
 msgid "# sessions terminated by key expiration"
 msgstr "# sesiones terminadas por plazo de expiración"
 
-#: src/core/gnunet-service-core_kx.c:1740
-#: src/core/gnunet-service-core_kx.c:1766
+#: src/core/gnunet-service-core_kx.c:1742
+#: src/core/gnunet-service-core_kx.c:1768
 msgid "# bytes dropped (duplicates)"
 msgstr "# bytes omitidos (duplicados)"
 
-#: src/core/gnunet-service-core_kx.c:1753
+#: src/core/gnunet-service-core_kx.c:1755
 msgid "# bytes dropped (out of sequence)"
 msgstr "# bytes omitidos (fuera de secuencia)"
 
-#: src/core/gnunet-service-core_kx.c:1795
+#: src/core/gnunet-service-core_kx.c:1797
 msgid "# bytes dropped (ancient message)"
 msgstr "# bytes omitidos (mensaje antiguo)"
 
-#: src/core/gnunet-service-core_kx.c:1803
+#: src/core/gnunet-service-core_kx.c:1805
 msgid "# bytes of payload decrypted"
 msgstr "# bytes de «payload» descifrados"
 
-#: src/core/gnunet-service-core_sessions.c:258
-#: src/core/gnunet-service-core_sessions.c:348
-#: src/dht/gnunet-service-dht_neighbours.c:739
-#: src/dht/gnunet-service-dht_neighbours.c:802
-#: src/fs/gnunet-service-fs_cp.c:613 src/fs/gnunet-service-fs_cp.c:1520
-#: src/topology/gnunet-daemon-topology.c:615
-#: src/topology/gnunet-daemon-topology.c:717
-#: src/transport/gnunet-service-transport_neighbours.c:719
-#: src/transport/gnunet-service-transport_neighbours.c:727
+#: src/core/gnunet-service-core_sessions.c:260
+#: src/core/gnunet-service-core_sessions.c:350
+#: src/dht/gnunet-service-dht_neighbours.c:741
+#: src/dht/gnunet-service-dht_neighbours.c:804
+#: src/fs/gnunet-service-fs_cp.c:615 src/fs/gnunet-service-fs_cp.c:1521
+#: src/topology/gnunet-daemon-topology.c:617
+#: src/topology/gnunet-daemon-topology.c:719
+#: src/transport/gnunet-service-transport_neighbours.c:720
+#: src/transport/gnunet-service-transport_neighbours.c:728
 msgid "# peers connected"
 msgstr "# pares conectados"
 
-#: src/core/gnunet-service-core_sessions.c:294
+#: src/core/gnunet-service-core_sessions.c:296
 msgid "# type map refreshes sent"
 msgstr "# envíos de refrescos del mapa de tipos"
 
-#: src/core/gnunet-service-core_sessions.c:414
+#: src/core/gnunet-service-core_sessions.c:416
 #, fuzzy
 msgid "# outdated typemap confirmations received"
 msgstr "Se produjo un fallo al encolar una confirmación de recepción\n"
 
-#: src/core/gnunet-service-core_sessions.c:431
+#: src/core/gnunet-service-core_sessions.c:433
 #, fuzzy
 msgid "# valid typemap confirmations received"
 msgstr "Se produjo un fallo al encolar una confirmación de recepción\n"
 
-#: src/core/gnunet-service-core_typemap.c:167
-#: src/core/gnunet-service-core_typemap.c:179
+#: src/core/gnunet-service-core_typemap.c:169
+#: src/core/gnunet-service-core_typemap.c:181
 msgid "# type maps received"
 msgstr "# mapas de tipos recibidos"
 
-#: src/core/gnunet-service-core_typemap.c:210
+#: src/core/gnunet-service-core_typemap.c:212
 msgid "# updates to my type map"
 msgstr "# actualizaciones de mi mapa de tipos"
 
-#: src/credential/credential_misc.c:86
+#: src/credential/credential_misc.c:88
 #, fuzzy, c-format
 msgid "Unable to parse CRED record string `%s'\n"
 msgstr "No se pudo procesar la cadena de registro VPN «%s»\n"
 
-#: src/credential/gnunet-credential.c:262 src/namestore/gnunet-namestore.c:887
+#: src/credential/gnunet-credential.c:264 src/namestore/gnunet-namestore.c:994
 #, fuzzy, c-format
 msgid "Ego `%s' not known to identity service\n"
 msgstr "'%s': servicio desconocido: %s\n"
 
-#: src/credential/gnunet-credential.c:278
-#: src/credential/gnunet-credential.c:432
+#: src/credential/gnunet-credential.c:280
+#: src/credential/gnunet-credential.c:434
 #, fuzzy, c-format
 msgid "Issuer public key `%s' is not well-formed\n"
 msgstr "El bloque del tipo %u está mal formado\n"
 
-#: src/credential/gnunet-credential.c:359
-#: src/credential/gnunet-credential.c:421
+#: src/credential/gnunet-credential.c:361
+#: src/credential/gnunet-credential.c:423
 #, fuzzy, c-format
 msgid "Issuer public key not well-formed\n"
 msgstr "El bloque del tipo %u está mal formado\n"
 
-#: src/credential/gnunet-credential.c:370
-#: src/credential/gnunet-credential.c:442
+#: src/credential/gnunet-credential.c:372
+#: src/credential/gnunet-credential.c:444
 #, fuzzy, c-format
 msgid "Failed to connect to CREDENTIAL\n"
 msgstr "Se produjo un fallo al conectar con GNS\n"
 
-#: src/credential/gnunet-credential.c:377
+#: src/credential/gnunet-credential.c:379
 #, c-format
 msgid "You must provide issuer the attribute\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:385
+#: src/credential/gnunet-credential.c:387
 #, fuzzy, c-format
 msgid "ego required\n"
 msgstr "Tipo requerido\n"
 
-#: src/credential/gnunet-credential.c:401
+#: src/credential/gnunet-credential.c:403
 #, c-format
 msgid "Subject public key needed\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:412
+#: src/credential/gnunet-credential.c:414
 #, fuzzy, c-format
 msgid "Subject public key `%s' is not well-formed\n"
 msgstr "El bloque del tipo %u está mal formado\n"
 
-#: src/credential/gnunet-credential.c:449
+#: src/credential/gnunet-credential.c:451
 #, c-format
 msgid "You must provide issuer and subject attributes\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:502
+#: src/credential/gnunet-credential.c:504
 #, fuzzy, c-format
 msgid "Issuer ego required\n"
 msgstr "Tipo requerido\n"
 
-#: src/credential/gnunet-credential.c:514
+#: src/credential/gnunet-credential.c:516
 #, c-format
 msgid "Please specify name to lookup, subject key and issuer key!\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:534
+#: src/credential/gnunet-credential.c:536
 msgid "create credential"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:538
+#: src/credential/gnunet-credential.c:540
 msgid "verify credential against attribute"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:543
+#: src/credential/gnunet-credential.c:545
 #, fuzzy
 msgid "The public key of the subject to lookup the credential for"
 msgstr "Especificar el tipo del registro a buscar"
 
-#: src/credential/gnunet-credential.c:548
+#: src/credential/gnunet-credential.c:550
 msgid "The name of the credential presented by the subject"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:553
+#: src/credential/gnunet-credential.c:555
 #, fuzzy
 msgid "The public key of the authority to verify the credential against"
 msgstr "Especificar el tipo del registro a buscar"
 
-#: src/credential/gnunet-credential.c:558
+#: src/credential/gnunet-credential.c:560
 #, fuzzy
 msgid "The ego to use"
 msgstr "tamaño del mensaje"
 
-#: src/credential/gnunet-credential.c:563
+#: src/credential/gnunet-credential.c:565
 msgid "The issuer attribute to verify against or to issue"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:568
+#: src/credential/gnunet-credential.c:570
 msgid "The time to live for the credential"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:572
+#: src/credential/gnunet-credential.c:574
 msgid "collect credentials"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:586
+#: src/credential/gnunet-credential.c:588
 #, fuzzy
 msgid "GNUnet credential resolver tool"
 msgstr "Herramienta de acceso GNUnet GNS"
 
-#: src/credential/gnunet-service-credential.c:1136 src/gns/gnunet-gns.c:183
-#: src/gns/gnunet-gns-helper-service-w32.c:725
+#: src/credential/gnunet-service-credential.c:1138 src/gns/gnunet-gns.c:185
+#: src/gns/gnunet-gns-helper-service-w32.c:727
 #, c-format
 msgid "Failed to connect to GNS\n"
 msgstr "Se produjo un fallo al conectar con GNS\n"
 
-#: src/credential/gnunet-service-credential.c:1142
-#: src/namestore/gnunet-namestore.c:913
-#: src/namestore/gnunet-namestore-fcfsd.c:1136
+#: src/credential/gnunet-service-credential.c:1144
+#: src/namestore/gnunet-namestore.c:1019
+#: src/namestore/gnunet-namestore-fcfsd.c:1138
 #, c-format
 msgid "Failed to connect to namestore\n"
 msgstr "Se produjo un fallo al conectar con el almacén de nombres\n"
 
-#: src/credential/plugin_gnsrecord_credential.c:184
+#: src/credential/plugin_gnsrecord_credential.c:186
 #, fuzzy, c-format
 msgid "Unable to parse ATTR record string `%s'\n"
 msgstr "No se pudo procesar la cadena de registro TLSA «%s»\n"
 
-#: src/datacache/datacache.c:117 src/datacache/datacache.c:309
-#: src/datastore/gnunet-service-datastore.c:755
+#: src/datacache/datacache.c:119 src/datacache/datacache.c:311
+#: src/datastore/gnunet-service-datastore.c:757
 msgid "# bytes stored"
 msgstr "# bytes almacenados"
 
-#: src/datacache/datacache.c:121 src/datacache/datacache.c:313
+#: src/datacache/datacache.c:123 src/datacache/datacache.c:315
 msgid "# items stored"
 msgstr "# elementos almacenados"
 
-#: src/datacache/datacache.c:204
+#: src/datacache/datacache.c:206
 #, c-format
 msgid "Loading `%s' datacache plugin\n"
 msgstr "Cargando el módulo de la cache de datos «%s»\n"
 
-#: src/datacache/datacache.c:215
+#: src/datacache/datacache.c:217
 #, c-format
 msgid "Failed to load datacache plugin for `%s'\n"
 msgstr ""
 "Se produjo un fallo al cargar el módulo de la cache de datos para «%s»\n"
 
-#: src/datacache/datacache.c:343
+#: src/datacache/datacache.c:345
 msgid "# requests received"
 msgstr "# peticiones recibidas"
 
-#: src/datacache/datacache.c:353
+#: src/datacache/datacache.c:355
 msgid "# requests filtered by bloom filter"
 msgstr "# peticiones filtradas por el «bloomfilter»"
 
-#: src/datacache/datacache.c:383
+#: src/datacache/datacache.c:385
 #, fuzzy
 msgid "# requests for random value received"
 msgstr "# peticiones recibidas"
 
-#: src/datacache/datacache.c:415
+#: src/datacache/datacache.c:417
 #, fuzzy
 msgid "# proximity search requests received"
 msgstr "# búsquedas de clientes recibidas"
 
-#: src/datacache/plugin_datacache_heap.c:551
+#: src/datacache/plugin_datacache_heap.c:553
 msgid "Heap datacache running\n"
 msgstr "Caché de datos de montículo (heap) ejecutándose\n"
 
-#: src/datacache/plugin_datacache_sqlite.c:116
-#: src/datacache/plugin_datacache_sqlite.c:125
-#: src/datastore/plugin_datastore_mysql.c:890
-#: src/datastore/plugin_datastore_sqlite.c:56
-#: src/datastore/plugin_datastore_sqlite.c:64 src/my/my.c:79 src/my/my.c:91
-#: src/mysql/mysql.c:40 src/mysql/mysql.c:47
-#: src/namecache/plugin_namecache_sqlite.c:50
-#: src/namestore/plugin_namestore_sqlite.c:51
-#: src/peerstore/plugin_peerstore_sqlite.c:50
-#: src/psycstore/plugin_psycstore_mysql.c:60
-#: src/reclaim/plugin_reclaim_sqlite.c:50
-#: src/testbed/generate-underlay-topology.c:45
-#: src/testbed/gnunet-daemon-latency-logger.c:50
-#: src/testbed/gnunet-daemon-testbed-underlay.c:54
-#: src/testbed/testbed_api_hosts.c:67 src/util/crypto_ecc.c:51
-#: src/util/crypto_ecc_setup.c:39 src/util/crypto_mpi.c:37
-#: src/include/gnunet_common.h:816 src/include/gnunet_common.h:825
-#: src/scalarproduct/scalarproduct.h:33
+#: src/datacache/plugin_datacache_sqlite.c:118
+#: src/datacache/plugin_datacache_sqlite.c:127
+#: src/datastore/plugin_datastore_mysql.c:892
+#: src/datastore/plugin_datastore_sqlite.c:58
+#: src/datastore/plugin_datastore_sqlite.c:66 src/my/my.c:81 src/my/my.c:93
+#: src/mysql/mysql.c:42 src/mysql/mysql.c:49
+#: src/namecache/plugin_namecache_sqlite.c:52
+#: src/namestore/plugin_namestore_sqlite.c:53
+#: src/peerstore/plugin_peerstore_sqlite.c:52
+#: src/reclaim/plugin_reclaim_sqlite.c:52
+#: src/testbed/generate-underlay-topology.c:47
+#: src/testbed/gnunet-daemon-latency-logger.c:52
+#: src/testbed/gnunet-daemon-testbed-underlay.c:56
+#: src/testbed/testbed_api_hosts.c:69 src/util/crypto_ecc.c:53
+#: src/util/crypto_ecc_setup.c:41 src/util/crypto_mpi.c:39
+#: src/include/gnunet_common.h:818 src/include/gnunet_common.h:827
+#: src/scalarproduct/scalarproduct.h:35
 #, c-format
 msgid "`%s' failed at %s:%d with error: %s\n"
 msgstr "«%s» falló en %s: %d con el error: %s\n"
 
-#: src/datacache/plugin_datacache_sqlite.c:861
-#: src/datastore/plugin_datastore_sqlite.c:506
-#: src/namecache/plugin_namecache_sqlite.c:327
-#: src/namestore/plugin_namestore_sqlite.c:262
-#: src/reclaim/plugin_reclaim_sqlite.c:334
+#: src/datacache/plugin_datacache_sqlite.c:863
+#: src/datastore/plugin_datastore_sqlite.c:508
+#: src/namecache/plugin_namecache_sqlite.c:229
+#: src/namestore/plugin_namestore_sqlite.c:265
+#: src/reclaim/plugin_reclaim_sqlite.c:336
 msgid "Tried to close sqlite without finalizing all prepared statements.\n"
 msgstr ""
 "Se intentó cerrar sqlite sin finalizar todas las sentencias preparadas.\n"
 
-#: src/datastore/datastore_api.c:346
+#: src/datastore/datastore_api.c:348
 #, fuzzy
 msgid "DATASTORE disconnected"
 msgstr "Desconectado de"
 
-#: src/datastore/datastore_api.c:466
+#: src/datastore/datastore_api.c:468
 #, fuzzy
 msgid "Disconnected from DATASTORE"
 msgstr "# reconexiones al almacén de datos (DATASTORE)"
 
-#: src/datastore/datastore_api.c:567
+#: src/datastore/datastore_api.c:569
 msgid "# queue overflows"
 msgstr "# desbordamientos de la cola"
 
-#: src/datastore/datastore_api.c:597
+#: src/datastore/datastore_api.c:599
 msgid "# queue entries created"
 msgstr "# entradas creadas en la cola"
 
-#: src/datastore/datastore_api.c:758
+#: src/datastore/datastore_api.c:760
 msgid "# status messages received"
 msgstr "# mensajes de estado recibidos"
 
-#: src/datastore/datastore_api.c:812
+#: src/datastore/datastore_api.c:814
 msgid "# Results received"
 msgstr "# Resultados recibidos"
 
-#: src/datastore/datastore_api.c:918
+#: src/datastore/datastore_api.c:920
 msgid "# datastore connections (re)created"
 msgstr "# conexiones a almacenes de datos (re)creadas"
 
-#: src/datastore/datastore_api.c:1032
+#: src/datastore/datastore_api.c:1034
 msgid "# PUT requests executed"
 msgstr "# peticiones «PUT» ejecutadas"
 
-#: src/datastore/datastore_api.c:1093
+#: src/datastore/datastore_api.c:1095
 msgid "# RESERVE requests executed"
 msgstr "# peticiones «RESERVE» ejecutadas"
 
-#: src/datastore/datastore_api.c:1158
+#: src/datastore/datastore_api.c:1160
 msgid "# RELEASE RESERVE requests executed"
 msgstr "# Peticiones «RELEASE RESERVE» ejecutadas"
 
-#: src/datastore/datastore_api.c:1236
+#: src/datastore/datastore_api.c:1238
 msgid "# REMOVE requests executed"
 msgstr "# peticiones «REMOVE» ejecutadas"
 
-#: src/datastore/datastore_api.c:1296
+#: src/datastore/datastore_api.c:1298
 msgid "# GET REPLICATION requests executed"
 msgstr "# peticiones «GET REPLICATION» ejecutadas"
 
-#: src/datastore/datastore_api.c:1358
+#: src/datastore/datastore_api.c:1360
 msgid "# GET ZERO ANONYMITY requests executed"
 msgstr "# peticiones «GET ZERO ANONYMITY» ejecutadas"
 
-#: src/datastore/datastore_api.c:1439
+#: src/datastore/datastore_api.c:1441
 msgid "# GET requests executed"
 msgstr "# peticiones «GET» ejecutadas"
 
-#: src/datastore/gnunet-datastore.c:187
+#: src/datastore/gnunet-datastore.c:189
 #, c-format
 msgid "Dumped %<PRIu64> records\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:215 src/datastore/gnunet-datastore.c:227
+#: src/datastore/gnunet-datastore.c:217 src/datastore/gnunet-datastore.c:229
 #, c-format
 msgid "Short write to file: %zd bytes expecting %zd\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:259
+#: src/datastore/gnunet-datastore.c:261
 #, fuzzy
 msgid "Error queueing datastore GET operation\n"
 msgstr "Error leyendo «%s»: %s"
 
-#: src/datastore/gnunet-datastore.c:285 src/datastore/gnunet-datastore.c:410
+#: src/datastore/gnunet-datastore.c:287 src/datastore/gnunet-datastore.c:412
 #, fuzzy, c-format
 msgid "Unable to open dump file: %s\n"
 msgstr "Se produjo un fallo al crear los índices\n"
 
-#: src/datastore/gnunet-datastore.c:324
+#: src/datastore/gnunet-datastore.c:326
 #, fuzzy, c-format
 msgid "Failed to store item: %s, aborting\n"
 msgstr "Se produjo un fallo al abrir «%s» para escritura"
 
-#: src/datastore/gnunet-datastore.c:338
+#: src/datastore/gnunet-datastore.c:340
 #, fuzzy, c-format
 msgid "Inserted %<PRIu64> records\n"
 msgstr "establece registros de clase A"
 
-#: src/datastore/gnunet-datastore.c:347 src/datastore/gnunet-datastore.c:361
+#: src/datastore/gnunet-datastore.c:349 src/datastore/gnunet-datastore.c:363
 #, c-format
 msgid "Short read from file: %zd bytes expecting %zd\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:387
+#: src/datastore/gnunet-datastore.c:389
 #, fuzzy
 msgid "Error queueing datastore PUT operation\n"
 msgstr "Error leyendo «%s»: %s"
 
-#: src/datastore/gnunet-datastore.c:430
+#: src/datastore/gnunet-datastore.c:432
 msgid "Input file is not of a supported format\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:456
+#: src/datastore/gnunet-datastore.c:458
 #, fuzzy
 msgid "Failed connecting to the datastore.\n"
 msgstr "Se produjo un fallo al conectar con el almacén de datos."
 
-#: src/datastore/gnunet-datastore.c:468
+#: src/datastore/gnunet-datastore.c:470
 #, fuzzy, c-format
 msgid "Please choose at least one operation: %s, %s\n"
 msgstr "Por favor, seleccione una operación: %s o %s o %s o %s o %s\n"
 
-#: src/datastore/gnunet-datastore.c:491
+#: src/datastore/gnunet-datastore.c:493
 #, fuzzy
 msgid "Dump all records from the datastore"
 msgstr "Buscar el registro para el nombre dado"
 
-#: src/datastore/gnunet-datastore.c:495
+#: src/datastore/gnunet-datastore.c:497
 #, fuzzy
 msgid "Insert records into the datastore"
 msgstr "# bytes mandados al almacén de datos"
 
-#: src/datastore/gnunet-datastore.c:500
+#: src/datastore/gnunet-datastore.c:502
 msgid "File to dump or insert"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:509
+#: src/datastore/gnunet-datastore.c:511
 #, fuzzy
 msgid "Manipulate GNUnet datastore"
 msgstr "Manipular ficheros de configuración de GNUnet"
 
-#: src/datastore/gnunet-service-datastore.c:336
+#: src/datastore/gnunet-service-datastore.c:338
 msgid "# bytes expired"
 msgstr "# bytes expirados"
 
-#: src/datastore/gnunet-service-datastore.c:418
+#: src/datastore/gnunet-service-datastore.c:420
 msgid "# bytes purged (low-priority)"
 msgstr "# bytes purgados (baja prioridad)"
 
-#: src/datastore/gnunet-service-datastore.c:560
+#: src/datastore/gnunet-service-datastore.c:562
 msgid "# results found"
 msgstr "# resultados encontrados"
 
-#: src/datastore/gnunet-service-datastore.c:601
+#: src/datastore/gnunet-service-datastore.c:603
 #, fuzzy, c-format
 msgid ""
 "Insufficient space (%llu bytes are available) to satisfy RESERVE request for "
@@ -1908,7 +1903,7 @@ msgstr ""
 "Espacio insuficiente (%llu bytes están disponibles) para satisfacer la "
 "petición «%s» de %llu bytes\n"
 
-#: src/datastore/gnunet-service-datastore.c:612
+#: src/datastore/gnunet-service-datastore.c:614
 #, c-format
 msgid ""
 "The requested amount (%llu bytes) is larger than the cache size (%llu "
@@ -1917,7 +1912,7 @@ msgstr ""
 "La cantidad solicitada (%llu bytes) es mayor que el tamaño de la caché (%llu "
 "bytes)\n"
 
-#: src/datastore/gnunet-service-datastore.c:618
+#: src/datastore/gnunet-service-datastore.c:620
 msgid ""
 "Insufficient space to satisfy request and requested amount is larger than "
 "cache size"
@@ -1925,62 +1920,62 @@ msgstr ""
 "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:625
+#: src/datastore/gnunet-service-datastore.c:627
 msgid "Insufficient space to satisfy request"
 msgstr "Espacio insuficiente para satisfacer la petición"
 
-#: src/datastore/gnunet-service-datastore.c:632
-#: src/datastore/gnunet-service-datastore.c:687
-#: src/datastore/gnunet-service-datastore.c:835
-#: src/datastore/gnunet-service-datastore.c:1467
+#: src/datastore/gnunet-service-datastore.c:634
+#: src/datastore/gnunet-service-datastore.c:689
+#: src/datastore/gnunet-service-datastore.c:837
+#: src/datastore/gnunet-service-datastore.c:1469
 msgid "# reserved"
 msgstr "# reservado"
 
-#: src/datastore/gnunet-service-datastore.c:705
+#: src/datastore/gnunet-service-datastore.c:707
 msgid "Could not find matching reservation"
 msgstr "No se pudo encontrar una reserva coincidente"
 
-#: src/datastore/gnunet-service-datastore.c:771
+#: src/datastore/gnunet-service-datastore.c:773
 #, 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:874
+#: src/datastore/gnunet-service-datastore.c:876
 msgid "# GET requests received"
 msgstr "# peticiones «GET» recibidas"
 
-#: src/datastore/gnunet-service-datastore.c:905
+#: src/datastore/gnunet-service-datastore.c:907
 #, fuzzy
 msgid "# GET KEY requests received"
 msgstr "# peticiones «GET» recibidas"
 
-#: src/datastore/gnunet-service-datastore.c:918
+#: src/datastore/gnunet-service-datastore.c:920
 msgid "# requests filtered by bloomfilter"
 msgstr "# peticiones filtradas por el «bloomfilter»"
 
-#: src/datastore/gnunet-service-datastore.c:954
+#: src/datastore/gnunet-service-datastore.c:956
 msgid "# GET REPLICATION requests received"
 msgstr "# peticiones «GET REPLICATION» recibidas"
 
-#: src/datastore/gnunet-service-datastore.c:987
+#: src/datastore/gnunet-service-datastore.c:989
 msgid "# GET ZERO ANONYMITY requests received"
 msgstr "# peticiones «GET ZERO ANONYMITY» recibidas"
 
-#: src/datastore/gnunet-service-datastore.c:1034
+#: src/datastore/gnunet-service-datastore.c:1036
 msgid "Content not found"
 msgstr "Contenido no encontrado"
 
-#: src/datastore/gnunet-service-datastore.c:1041
+#: src/datastore/gnunet-service-datastore.c:1043
 msgid "# bytes removed (explicit request)"
 msgstr "# bytes eliminados (petición explícita)"
 
-#: src/datastore/gnunet-service-datastore.c:1086
+#: src/datastore/gnunet-service-datastore.c:1088
 msgid "# REMOVE requests received"
 msgstr "# peticiones «REMOVE» recibidas"
 
 # Miguel: ¿Cómo traducir «payload»? ¿Código cargado?
-#: src/datastore/gnunet-service-datastore.c:1135
+#: src/datastore/gnunet-service-datastore.c:1137
 #, fuzzy, c-format
 msgid ""
 "Datastore payload must have been inaccurate (%lld < %lld). Recomputing it.\n"
@@ -1988,136 +1983,133 @@ msgstr ""
 "El «payload» del almacén de datos es impreciso (%lld < %lld).  Intentando "
 "repararlo.\n"
 
-#: src/datastore/gnunet-service-datastore.c:1141
-#: src/datastore/gnunet-service-datastore.c:1316
+#: src/datastore/gnunet-service-datastore.c:1143
+#: src/datastore/gnunet-service-datastore.c:1318
 #, c-format
 msgid "New payload: %lld\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1195
+#: src/datastore/gnunet-service-datastore.c:1197
 #, 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:1207
+#: src/datastore/gnunet-service-datastore.c:1209
 #, 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:1267
+#: src/datastore/gnunet-service-datastore.c:1269
 msgid "Bloomfilter construction complete.\n"
 msgstr "Construcción de «bloomfilter» completa.\n"
 
-#: src/datastore/gnunet-service-datastore.c:1323
+#: src/datastore/gnunet-service-datastore.c:1325
 msgid "Rebuilding bloomfilter.  Please be patient.\n"
 msgstr "Reconstruyendo «bloomfilter».  Por favor, tenga paciencia.\n"
 
-#: src/datastore/gnunet-service-datastore.c:1334
+#: src/datastore/gnunet-service-datastore.c:1336
 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:1504
+#: src/datastore/gnunet-service-datastore.c:1506
 #, 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:1520
+#: src/datastore/gnunet-service-datastore.c:1522
 msgid "# quota"
 msgstr "# cuota"
 
-#: src/datastore/gnunet-service-datastore.c:1525
+#: src/datastore/gnunet-service-datastore.c:1527
 msgid "# cache size"
 msgstr "# tamaño de la caché"
 
-#: src/datastore/gnunet-service-datastore.c:1541
+#: src/datastore/gnunet-service-datastore.c:1543
 #, 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:1559
-#: src/datastore/gnunet-service-datastore.c:1575
+#: src/datastore/gnunet-service-datastore.c:1561
+#: src/datastore/gnunet-service-datastore.c:1577
 #, c-format
 msgid "Failed to remove bogus bloomfilter file `%s'\n"
 msgstr ""
 "Se produjo un fallo al borrar el fichero de configuración defectuoso de "
 "«bloomfilter» «%s»:\n"
 
-#: src/datastore/gnunet-service-datastore.c:1607
+#: src/datastore/gnunet-service-datastore.c:1609
 msgid "Failed to initialize bloomfilter.\n"
 msgstr "Se produjo un fallo al inicializar «bloomfilter».\n"
 
-#: src/datastore/plugin_datastore_heap.c:891
+#: src/datastore/plugin_datastore_heap.c:893
 msgid "Heap database running\n"
 msgstr "Base de datos de montículo ejecutándose\n"
 
-#: src/datastore/plugin_datastore_mysql.c:369
-#: src/datastore/plugin_datastore_mysql.c:421
-#: src/datastore/plugin_datastore_mysql.c:1073
+#: src/datastore/plugin_datastore_mysql.c:371
+#: src/datastore/plugin_datastore_mysql.c:423
+#: src/datastore/plugin_datastore_mysql.c:1075
 msgid "MySQL statement run failure"
 msgstr ""
 
-#: src/datastore/plugin_datastore_mysql.c:408
-#: src/datastore/plugin_datastore_sqlite.c:676
+#: src/datastore/plugin_datastore_mysql.c:410
+#: src/datastore/plugin_datastore_sqlite.c:678
 #, fuzzy
 msgid "Data too large"
 msgstr "número de valores"
 
-#: src/datastore/plugin_datastore_mysql.c:846
+#: src/datastore/plugin_datastore_mysql.c:848
 #, c-format
 msgid "`%s' for `%s' failed at %s:%d with error: %s\n"
 msgstr "«%s» para «%s» falló en %s: %d con error: %s\n"
 
-#: src/datastore/plugin_datastore_mysql.c:1178
-#: src/psycstore/plugin_psycstore_mysql.c:1934
+#: src/datastore/plugin_datastore_mysql.c:1180
 msgid "Mysql database running\n"
 msgstr "Base de datos Mysql ejecutándose\n"
 
-#: src/datastore/plugin_datastore_postgres.c:274
-#: src/datastore/plugin_datastore_postgres.c:891
+#: src/datastore/plugin_datastore_postgres.c:276
+#: src/datastore/plugin_datastore_postgres.c:893
 msgid "Postgress exec failure"
 msgstr ""
 
-#: src/datastore/plugin_datastore_postgres.c:852
+#: src/datastore/plugin_datastore_postgres.c:854
 msgid "Failed to drop table from database.\n"
 msgstr "Se produjo un fallo al borrar una tabla de la base de datos.\n"
 
-#: src/datastore/plugin_datastore_postgres.c:950
-#: src/psycstore/plugin_psycstore_postgres.c:1504
+#: src/datastore/plugin_datastore_postgres.c:952
 msgid "Postgres database running\n"
 msgstr "Base de datos Postgres ejecutándose\n"
 
-#: src/datastore/plugin_datastore_sqlite.c:64
-#: src/testbed/generate-underlay-topology.c:48
-#: src/testbed/gnunet-daemon-latency-logger.c:53
-#: src/testbed/gnunet-daemon-testbed-underlay.c:57
+#: src/datastore/plugin_datastore_sqlite.c:66
+#: src/testbed/generate-underlay-topology.c:50
+#: src/testbed/gnunet-daemon-latency-logger.c:55
+#: src/testbed/gnunet-daemon-testbed-underlay.c:59
 #, c-format
 msgid "`%s' failed at %s:%u with error: %s"
 msgstr "«%s» falló en %s:%u con el error: %s"
 
-#: src/datastore/plugin_datastore_sqlite.c:269
-#: src/namecache/plugin_namecache_sqlite.c:207
-#: src/namestore/plugin_namestore_sqlite.c:203
-#: src/peerstore/plugin_peerstore_sqlite.c:533
-#: src/psycstore/plugin_psycstore_sqlite.c:323
-#: src/reclaim/plugin_reclaim_sqlite.c:210
+#: src/datastore/plugin_datastore_sqlite.c:271
+#: src/namecache/plugin_namecache_sqlite.c:173
+#: src/namestore/plugin_namestore_sqlite.c:206
+#: src/peerstore/plugin_peerstore_sqlite.c:535
+#: src/reclaim/plugin_reclaim_sqlite.c:212
 #, c-format
 msgid "Unable to initialize SQLite: %s.\n"
 msgstr "Imposible inicializar SQLite: %s.\n"
 
-#: src/datastore/plugin_datastore_sqlite.c:627
+#: src/datastore/plugin_datastore_sqlite.c:629
 msgid "sqlite bind failure"
 msgstr ""
 
 # to should be too, i think
-#: src/datastore/plugin_datastore_sqlite.c:1325
+#: src/datastore/plugin_datastore_sqlite.c:1327
 msgid "sqlite version to old to determine size, assuming zero\n"
 msgstr ""
 "la versión de sqlite es muy antigua para determinar el tamaño, se asume "
 "cero\n"
 
-#: src/datastore/plugin_datastore_sqlite.c:1359
+#: src/datastore/plugin_datastore_sqlite.c:1361
 #, c-format
 msgid ""
 "Using sqlite page utilization to estimate payload (%llu pages of size %llu "
@@ -2126,18 +2118,18 @@ msgstr ""
 "Usando la utilización de páginas de sqlite para estimar el «payload» (%llu "
 "páginas de %llu bytes de tamaño)\n"
 
-#: src/datastore/plugin_datastore_sqlite.c:1403
-#: src/namecache/plugin_namecache_sqlite.c:638
-#: src/namestore/plugin_namestore_sqlite.c:753
-#: src/reclaim/plugin_reclaim_sqlite.c:709
+#: src/datastore/plugin_datastore_sqlite.c:1405
+#: src/namecache/plugin_namecache_sqlite.c:557
+#: src/namestore/plugin_namestore_sqlite.c:750
+#: src/reclaim/plugin_reclaim_sqlite.c:711
 msgid "Sqlite database running\n"
 msgstr "Base de datos sqlite ejecutándose\n"
 
-#: src/datastore/plugin_datastore_template.c:251
+#: src/datastore/plugin_datastore_template.c:253
 msgid "Template database running\n"
 msgstr "Base de datos de plantilla ejecutándose\n"
 
-#: src/dht/gnunet-dht-get.c:156
+#: src/dht/gnunet-dht-get.c:158
 #, c-format
 msgid ""
 "Result %d, type %d:\n"
@@ -2146,637 +2138,638 @@ msgstr ""
 "Resultado %d, tipo %d:\n"
 "%.*s\n"
 
-#: src/dht/gnunet-dht-get.c:157
+#: src/dht/gnunet-dht-get.c:159
 #, fuzzy, c-format
 msgid "Result %d, type %d:\n"
 msgstr ""
 "Resultado %d, tipo %d:\n"
 "%.*s\n"
 
-#: src/dht/gnunet-dht-get.c:202
+#: src/dht/gnunet-dht-get.c:204
 msgid "Must provide key for DHT GET!\n"
 msgstr "¡Se debe proveer una clave para el «GET» DHT!\n"
 
-#: src/dht/gnunet-dht-get.c:208 src/dht/gnunet-dht-monitor.c:255
+#: src/dht/gnunet-dht-get.c:210 src/dht/gnunet-dht-monitor.c:257
 msgid "Failed to connect to DHT service!\n"
 msgstr "¡Se produjo un fallo al conectar con el servicio DHT!\n"
 
-#: src/dht/gnunet-dht-get.c:217
-msgid "Issueing DHT GET with key"
+#: src/dht/gnunet-dht-get.c:219
+#, fuzzy
+msgid "Issuing DHT GET with key"
 msgstr "Enviando un «GET» DHT con clave"
 
-#: src/dht/gnunet-dht-get.c:246 src/dht/gnunet-dht-monitor.c:305
-#: src/dht/gnunet-dht-put.c:196
+#: src/dht/gnunet-dht-get.c:248 src/dht/gnunet-dht-monitor.c:307
+#: src/dht/gnunet-dht-put.c:198
 msgid "the query key"
 msgstr "la clave de búsqueda"
 
-#: src/dht/gnunet-dht-get.c:251
+#: src/dht/gnunet-dht-get.c:253
 msgid "how many parallel requests (replicas) to create"
 msgstr "cuantas peticiones paralelas (réplicas) crear"
 
-#: src/dht/gnunet-dht-get.c:256 src/dht/gnunet-dht-monitor.c:311
+#: src/dht/gnunet-dht-get.c:258 src/dht/gnunet-dht-monitor.c:313
 msgid "the type of data to look for"
 msgstr "el tipo de datos a buscar"
 
-#: src/dht/gnunet-dht-get.c:261
+#: src/dht/gnunet-dht-get.c:263
 msgid "how long to execute this query before giving up?"
 msgstr "¿cuánto tiempo se debe ejecutar esta consulta antes de abandonar?"
 
-#: src/dht/gnunet-dht-get.c:265 src/dht/gnunet-dht-put.c:200
+#: src/dht/gnunet-dht-get.c:267 src/dht/gnunet-dht-put.c:202
 msgid "use DHT's demultiplex everywhere option"
 msgstr "opción para usar el demultiplexado de la DHT siempre"
 
-#: src/dht/gnunet-dht-get.c:278
+#: src/dht/gnunet-dht-get.c:280
 msgid "Issue a GET request to the GNUnet DHT, prints results."
 msgstr ""
 "Iniciando una peticion «GET» a la DHT de GNUnet, imprimiendo resultados."
 
-#: src/dht/gnunet-dht-monitor.c:317
+#: src/dht/gnunet-dht-monitor.c:319
 msgid "how long should the monitor command run"
 msgstr "cuanto tiempo debe ejecutarse el comando de monitorización"
 
-#: src/dht/gnunet-dht-monitor.c:322 src/fs/gnunet-download.c:370
-#: src/nse/gnunet-nse-profiler.c:876
+#: src/dht/gnunet-dht-monitor.c:324 src/fs/gnunet-download.c:372
+#: src/nse/gnunet-nse-profiler.c:878
 msgid "be verbose (print progress information)"
 msgstr "ser prolijo (imprime información de progreso)"
 
-#: src/dht/gnunet-dht-monitor.c:335
+#: src/dht/gnunet-dht-monitor.c:337
 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:914 src/testbed/gnunet-testbed-profiler.c:251
+#: src/dht/gnunet_dht_profiler.c:916 src/testbed/gnunet-testbed-profiler.c:253
 #, fuzzy, c-format
 msgid "Exiting as the number of peers is %u\n"
 msgstr "El número máximo de conexiones es %u\n"
 
-#: src/dht/gnunet_dht_profiler.c:947 src/rps/gnunet-rps-profiler.c:2764
+#: src/dht/gnunet_dht_profiler.c:949 src/rps/gnunet-rps-profiler.c:2953
 msgid "number of peers to start"
 msgstr "número de pares para empezar"
 
-#: src/dht/gnunet_dht_profiler.c:952
+#: src/dht/gnunet_dht_profiler.c:954
 msgid "number of PUTs to perform per peer"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:957 src/nse/gnunet-nse-profiler.c:858
-#: src/testbed/gnunet-testbed-profiler.c:302
+#: src/dht/gnunet_dht_profiler.c:959 src/nse/gnunet-nse-profiler.c:860
+#: src/testbed/gnunet-testbed-profiler.c:304
 msgid "name of the file with the login information for the testbed"
 msgstr ""
 "nombre del fichero con la información de acceso usada para la batería de "
 "pruebas"
 
-#: src/dht/gnunet_dht_profiler.c:962
+#: src/dht/gnunet_dht_profiler.c:964
 msgid "delay between rounds for collecting statistics (default: 30 sec)"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:967
+#: src/dht/gnunet_dht_profiler.c:969
 msgid "delay to start doing PUTs (default: 1 sec)"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:972
+#: src/dht/gnunet_dht_profiler.c:974
 msgid "delay to start doing GETs (default: 5 min)"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:977
+#: src/dht/gnunet_dht_profiler.c:979
 msgid "replication degree for DHT PUTs"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:982
+#: src/dht/gnunet_dht_profiler.c:984
 msgid "chance that a peer is selected at random for PUTs"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:987
+#: src/dht/gnunet_dht_profiler.c:989
 msgid "timeout for DHT PUT and GET requests (default: 1 min)"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:1007
+#: src/dht/gnunet_dht_profiler.c:1009
 #, fuzzy
 msgid "Measure quality and performance of the DHT service."
 msgstr "Medir la calidad y rendimiento del servicio NSE."
 
-#: src/dht/gnunet-dht-put.c:132
+#: src/dht/gnunet-dht-put.c:134
 msgid "Must provide KEY and DATA for DHT put!\n"
 msgstr "¡Se deben proveer «KEY» y «DATA» para una subida a la DHT!\n"
 
-#: src/dht/gnunet-dht-put.c:140
+#: src/dht/gnunet-dht-put.c:142
 #, fuzzy
 msgid "Could not connect to DHT service!\n"
 msgstr "¡No se pudo conectar al servicio %s!\n"
 
-#: src/dht/gnunet-dht-put.c:151
+#: src/dht/gnunet-dht-put.c:153
 #, c-format
 msgid "Issuing put request for `%s' with data `%s'!\n"
 msgstr "¡Iniciando petición de subida para «%s» con datos «%s»!\n"
 
-#: src/dht/gnunet-dht-put.c:186
+#: src/dht/gnunet-dht-put.c:188
 msgid "the data to insert under the key"
 msgstr "los datos a insertar bajo la clave"
 
-#: src/dht/gnunet-dht-put.c:191
+#: src/dht/gnunet-dht-put.c:193
 msgid "how long to store this entry in the dht (in seconds)"
 msgstr "cuanto tiempo almacenar esta entrada en la DHT (en segundos)"
 
-#: src/dht/gnunet-dht-put.c:205
+#: src/dht/gnunet-dht-put.c:207
 msgid "how many replicas to create"
 msgstr "cuantas réplicas crear"
 
-#: src/dht/gnunet-dht-put.c:209
+#: src/dht/gnunet-dht-put.c:211
 #, fuzzy
 msgid "use DHT's record route option"
 msgstr "opción para usar el demultiplexado de la DHT siempre"
 
-#: src/dht/gnunet-dht-put.c:214
+#: src/dht/gnunet-dht-put.c:216
 msgid "the type to insert data as"
 msgstr "el tipo de datos a insertar"
 
-#: src/dht/gnunet-dht-put.c:231
+#: src/dht/gnunet-dht-put.c:233
 msgid "Issue a PUT request to the GNUnet DHT insert DATA under KEY."
 msgstr ""
 "Inicianco una petición «PUT» a la DHT de GNUnet para insertar «DATA» bajo "
 "«KEY»."
 
-#: src/dht/gnunet-service-dht_clients.c:367
+#: src/dht/gnunet-service-dht_clients.c:369
 msgid "# GET requests from clients injected"
 msgstr "# peticiones «GET» inyectadas de clientes"
 
-#: src/dht/gnunet-service-dht_clients.c:481
+#: src/dht/gnunet-service-dht_clients.c:483
 msgid "# PUT requests received from clients"
 msgstr "# peticiones «PUT» recibidas de clientes"
 
-#: src/dht/gnunet-service-dht_clients.c:614
+#: src/dht/gnunet-service-dht_clients.c:616
 msgid "# GET requests received from clients"
 msgstr "# peticiones «GET» recibidas de clientes"
 
-#: src/dht/gnunet-service-dht_clients.c:840
+#: src/dht/gnunet-service-dht_clients.c:842
 msgid "# GET STOP requests received from clients"
 msgstr "# peticiones «GET STOP» recibidas de clientes"
 
-#: src/dht/gnunet-service-dht_clients.c:1025
+#: src/dht/gnunet-service-dht_clients.c:1027
 msgid "# Key match, type mismatches in REPLY to CLIENT"
 msgstr ""
 "# Coincidencias de clave, diferencias de tipo en la respuesta (REPLY) del "
 "cliente (CLIENT)"
 
-#: src/dht/gnunet-service-dht_clients.c:1040
+#: src/dht/gnunet-service-dht_clients.c:1042
 msgid "# Duplicate REPLIES to CLIENT request dropped"
 msgstr ""
 "# Peticiones duplicadas de respuestas (REPLIES) a clientes (CLIENT) omitidas"
 
-#: src/dht/gnunet-service-dht_clients.c:1086
+#: src/dht/gnunet-service-dht_clients.c:1088
 #, c-format
 msgid "Unsupported block type (%u) in request!\n"
 msgstr "¡Tipo de bloque no soportado (%u) en la petición!\n"
 
-#: src/dht/gnunet-service-dht_clients.c:1093
+#: src/dht/gnunet-service-dht_clients.c:1095
 msgid "# RESULTS queued for clients"
 msgstr "# Resultados (RESULTS) encolados para clientes"
 
-#: src/dht/gnunet-service-dht_clients.c:1171
+#: src/dht/gnunet-service-dht_clients.c:1173
 msgid "# REPLIES ignored for CLIENTS (no match)"
 msgstr ""
 "# Respuestas (REPLIES) ignoradas para clientes (CLIENTS) (sin coincidencia)"
 
-#: src/dht/gnunet-service-dht_datacache.c:71
+#: src/dht/gnunet-service-dht_datacache.c:73
 #, c-format
 msgid "%s request received, but have no datacache!\n"
 msgstr "¡Petición %s recibida, pero no tiene caché de datos!\n"
 
-#: src/dht/gnunet-service-dht_datacache.c:81
+#: src/dht/gnunet-service-dht_datacache.c:83
 msgid "# ITEMS stored in datacache"
 msgstr "# Elementos (ITEMS) almacenados en la caché de datos"
 
-#: src/dht/gnunet-service-dht_datacache.c:205
+#: src/dht/gnunet-service-dht_datacache.c:207
 msgid "# Good RESULTS found in datacache"
 msgstr "# Buenos resultados (RESULTS) encontrados en la caché de datos"
 
-#: src/dht/gnunet-service-dht_datacache.c:217
+#: src/dht/gnunet-service-dht_datacache.c:219
 msgid "# Duplicate RESULTS found in datacache"
 msgstr "# Resultados (RESULTS) duplicados encontrados en la caché de datos"
 
-#: src/dht/gnunet-service-dht_datacache.c:223
+#: src/dht/gnunet-service-dht_datacache.c:225
 msgid "# Invalid RESULTS found in datacache"
 msgstr "# Resultados (RESULTS) no válidos encontrados en la caché de datos"
 
-#: src/dht/gnunet-service-dht_datacache.c:229
+#: src/dht/gnunet-service-dht_datacache.c:231
 msgid "# Irrelevant RESULTS found in datacache"
 msgstr "# Resultados (RESULTS) irrelevantes encontrados en la caché de datos"
 
-#: src/dht/gnunet-service-dht_datacache.c:241
+#: src/dht/gnunet-service-dht_datacache.c:243
 msgid "# Unsupported RESULTS found in datacache"
 msgstr "# Resultados (RESULTS) no soportados encontrados en la caché de datos"
 
-#: src/dht/gnunet-service-dht_datacache.c:245
+#: src/dht/gnunet-service-dht_datacache.c:247
 #, c-format
 msgid "Unsupported block type (%u) in local response!\n"
 msgstr "¡Tipo de bloque no soportado (%u) en respuesta local!\n"
 
-#: src/dht/gnunet-service-dht_datacache.c:280
+#: src/dht/gnunet-service-dht_datacache.c:282
 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-dht_hello.c:86
 msgid "# HELLOs obtained from peerinfo"
 msgstr "# «HELLO» obtenidos de «peerinfo»"
 
-#: src/dht/gnunet-service-dht_neighbours.c:677
+#: src/dht/gnunet-service-dht_neighbours.c:679
 msgid "# FIND PEER messages initiated"
 msgstr "# mensajes «FIND PEER» iniciados"
 
-#: src/dht/gnunet-service-dht_neighbours.c:850
+#: src/dht/gnunet-service-dht_neighbours.c:852
 #, fuzzy
 msgid "# requests TTL-dropped"
 msgstr "# peticiones unidas"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1053
-#: src/dht/gnunet-service-dht_neighbours.c:1096
+#: src/dht/gnunet-service-dht_neighbours.c:1055
+#: src/dht/gnunet-service-dht_neighbours.c:1098
 msgid "# Peers excluded from routing due to Bloomfilter"
 msgstr "# Pares excluidos del encaminado debido a «Bloomfilter»"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1070
-#: src/dht/gnunet-service-dht_neighbours.c:1112
+#: src/dht/gnunet-service-dht_neighbours.c:1072
+#: src/dht/gnunet-service-dht_neighbours.c:1114
 msgid "# Peer selection failed"
 msgstr "# Selecciones de pares fallidas"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1269
+#: src/dht/gnunet-service-dht_neighbours.c:1271
 msgid "# PUT requests routed"
 msgstr "# Peticiones «PUT» encaminadas"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1302
+#: src/dht/gnunet-service-dht_neighbours.c:1304
 msgid "# PUT messages queued for transmission"
 msgstr "# mensajes «PUT» encolados para transmisión"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1313
-#: src/dht/gnunet-service-dht_neighbours.c:1453
-#: src/dht/gnunet-service-dht_neighbours.c:1556
+#: src/dht/gnunet-service-dht_neighbours.c:1315
+#: src/dht/gnunet-service-dht_neighbours.c:1455
+#: src/dht/gnunet-service-dht_neighbours.c:1558
 msgid "# P2P messages dropped due to full queue"
 msgstr "# Mensajes P2P omitidos debido a saturación de la cola"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1398
+#: src/dht/gnunet-service-dht_neighbours.c:1400
 msgid "# GET requests routed"
 msgstr "# Peticiones «GET» encaminadas"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1441
+#: src/dht/gnunet-service-dht_neighbours.c:1443
 msgid "# GET messages queued for transmission"
 msgstr "# Mensajes «GET» encolados para transmisión"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1571
+#: src/dht/gnunet-service-dht_neighbours.c:1573
 msgid "# RESULT messages queued for transmission"
 msgstr "# Mensajes «RESULT» encolados para transmisión"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1674
+#: src/dht/gnunet-service-dht_neighbours.c:1676
 #, fuzzy
 msgid "# Expired PUTs discarded"
 msgstr "# respuestas irrelevantes descartadas"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1682
+#: src/dht/gnunet-service-dht_neighbours.c:1684
 msgid "# P2P PUT requests received"
 msgstr "# Peticiones «PUT» P2P recibidas"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1686
+#: src/dht/gnunet-service-dht_neighbours.c:1688
 #, fuzzy
 msgid "# P2P PUT bytes received"
 msgstr "# Peticiones «PUT» P2P recibidas"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1912
+#: src/dht/gnunet-service-dht_neighbours.c:1914
 msgid "# FIND PEER requests ignored due to Bloomfilter"
 msgstr "# Peticiones «FIND PEER» ignoradas debido a «Bloomfilter»"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1920
+#: src/dht/gnunet-service-dht_neighbours.c:1922
 msgid "# FIND PEER requests ignored due to lack of HELLO"
 msgstr "# Peticiones «FIND PEER» ignoradas debido a falta de «HELLO»"
 
-#: src/dht/gnunet-service-dht_neighbours.c:2082
+#: src/dht/gnunet-service-dht_neighbours.c:2084
 msgid "# P2P GET requests received"
 msgstr "# Peticiones «GET» P2P recibidas"
 
-#: src/dht/gnunet-service-dht_neighbours.c:2086
+#: src/dht/gnunet-service-dht_neighbours.c:2088
 #, fuzzy
 msgid "# P2P GET bytes received"
 msgstr "# Peticiones «GET» P2P recibidas"
 
-#: src/dht/gnunet-service-dht_neighbours.c:2151
+#: src/dht/gnunet-service-dht_neighbours.c:2153
 msgid "# P2P FIND PEER requests processed"
 msgstr "# Peticiones «FIND PEER» P2P procesadas"
 
-#: src/dht/gnunet-service-dht_neighbours.c:2172
+#: src/dht/gnunet-service-dht_neighbours.c:2174
 msgid "# P2P GET requests ONLY routed"
 msgstr "# Peticiones «GET» P2P SOLAMENTE encaminadas"
 
-#: src/dht/gnunet-service-dht_neighbours.c:2349
+#: src/dht/gnunet-service-dht_neighbours.c:2351
 #, fuzzy
 msgid "# Expired results discarded"
 msgstr "# respuestas irrelevantes descartadas"
 
-#: src/dht/gnunet-service-dht_neighbours.c:2365
+#: src/dht/gnunet-service-dht_neighbours.c:2367
 msgid "# P2P RESULTS received"
 msgstr "# Resultados (RESULTS) P2P recibidos"
 
-#: src/dht/gnunet-service-dht_neighbours.c:2369
+#: src/dht/gnunet-service-dht_neighbours.c:2371
 #, fuzzy
 msgid "# P2P RESULT bytes received"
 msgstr "# Resultados (RESULTS) P2P recibidos"
 
-#: src/dht/gnunet-service-dht_nse.c:57
+#: src/dht/gnunet-service-dht_nse.c:59
 msgid "# Network size estimates received"
 msgstr "# Estimaciones del tamaño de red recibidas"
 
-#: src/dht/gnunet-service-dht_routing.c:221
+#: src/dht/gnunet-service-dht_routing.c:223
 msgid "# Good REPLIES matched against routing table"
 msgstr ""
 "# Buenas respuestas (REPLIES) encontradas en la tabla de encaminamiento"
 
-#: src/dht/gnunet-service-dht_routing.c:235
+#: src/dht/gnunet-service-dht_routing.c:237
 msgid "# Duplicate REPLIES matched against routing table"
 msgstr ""
 "# Respuestas (REPLIES) duplicadas encontradas en la tabla de encaminamiento"
 
-#: src/dht/gnunet-service-dht_routing.c:241
+#: src/dht/gnunet-service-dht_routing.c:243
 msgid "# Invalid REPLIES matched against routing table"
 msgstr ""
 "# Respuestas (REPLIES) no válidas encontradas en la tabla de encaminamiento"
 
-#: src/dht/gnunet-service-dht_routing.c:247
+#: src/dht/gnunet-service-dht_routing.c:249
 msgid "# Irrelevant REPLIES matched against routing table"
 msgstr ""
 "# Respuestas (REPLIES) irrelevantes encontradas en la tabla de encaminamiento"
 
-#: src/dht/gnunet-service-dht_routing.c:259
+#: src/dht/gnunet-service-dht_routing.c:261
 msgid "# Unsupported REPLIES matched against routing table"
 msgstr ""
 "# Respuestas (REPLIES) no soportadas encontradas en la tabla de "
 "encaminamiento"
 
-#: src/dht/gnunet-service-dht_routing.c:337
+#: src/dht/gnunet-service-dht_routing.c:339
 msgid "# Entries removed from routing table"
 msgstr "# Entradas eliminadas de la tabla de encaminamiento"
 
-#: src/dht/gnunet-service-dht_routing.c:413
+#: src/dht/gnunet-service-dht_routing.c:415
 msgid "# Entries added to routing table"
 msgstr "# Entradas añadidas a la tabla de encaminamiento"
 
-#: src/dht/gnunet-service-dht_routing.c:435
+#: src/dht/gnunet-service-dht_routing.c:437
 msgid "# DHT requests combined"
 msgstr "# Peticiones a la DHT combinadas"
 
-#: src/dht/plugin_block_dht.c:187
+#: src/dht/plugin_block_dht.c:189
 #, c-format
 msgid "Block not of type %u\n"
 msgstr "El bloque no es del tipo %u\n"
 
-#: src/dht/plugin_block_dht.c:196
+#: src/dht/plugin_block_dht.c:198
 msgid "Size mismatch for block\n"
 msgstr "Discrepancias de tamaños para el bloque\n"
 
-#: src/dht/plugin_block_dht.c:207
+#: src/dht/plugin_block_dht.c:209
 #, c-format
 msgid "Block of type %u is malformed\n"
 msgstr "El bloque del tipo %u está mal formado\n"
 
-#: src/dns/gnunet-dns-monitor.c:351 src/dns/gnunet-dns-monitor.c:356
+#: src/dns/gnunet-dns-monitor.c:353 src/dns/gnunet-dns-monitor.c:358
 msgid "only monitor DNS queries"
 msgstr "sólo monitorizar consultas DNS"
 
-#: src/dns/gnunet-dns-monitor.c:368
+#: src/dns/gnunet-dns-monitor.c:370
 msgid "Monitor DNS queries."
 msgstr "Monitorizar consultas DNS."
 
-#: src/dns/gnunet-dns-redirector.c:235
+#: src/dns/gnunet-dns-redirector.c:237
 msgid "set A records"
 msgstr "establece registros de clase A"
 
-#: src/dns/gnunet-dns-redirector.c:241
+#: src/dns/gnunet-dns-redirector.c:243
 msgid "set AAAA records"
 msgstr "establece registros de clase AAAA"
 
-#: src/dns/gnunet-dns-redirector.c:254
+#: src/dns/gnunet-dns-redirector.c:256
 msgid "Change DNS replies to point elsewhere."
 msgstr "Cambiar las respuestas DNS apuntando a cualquier otro lado."
 
-#: src/dns/gnunet-service-dns.c:460
+#: src/dns/gnunet-service-dns.c:462
 msgid "# DNS requests answered via TUN interface"
 msgstr "# Peticiones DNS contestadas vía interfaz TUN"
 
-#: src/dns/gnunet-service-dns.c:608
+#: src/dns/gnunet-service-dns.c:610
 msgid "# DNS exit failed (failed to open socket)"
 msgstr "# Salidas DNS fallidas (se produjo un fallo al abrir el «socket»)"
 
-#: src/dns/gnunet-service-dns.c:738
+#: src/dns/gnunet-service-dns.c:740
 msgid "# External DNS response discarded (no matching request)"
 msgstr "# Respuestas DNS externas descartadas (ninguna petición coincidente)"
 
-#: src/dns/gnunet-service-dns.c:813
+#: src/dns/gnunet-service-dns.c:815
 msgid "# Client response discarded (no matching request)"
 msgstr "# Respuestas de cliente descartadas (ninguna petición coincidente)"
 
-#: src/dns/gnunet-service-dns.c:928
+#: src/dns/gnunet-service-dns.c:930
 msgid "Received malformed IPv4-UDP packet on TUN interface.\n"
 msgstr "Recibido paquete UDP IPv4 mal formado en interfaz TUN.\n"
 
-#: src/dns/gnunet-service-dns.c:944
+#: src/dns/gnunet-service-dns.c:946
 msgid "Received malformed IPv6-UDP packet on TUN interface.\n"
 msgstr "Recibido paquete UDP IPv6 mal formado en interfaz TUN.\n"
 
-#: src/dns/gnunet-service-dns.c:953
+#: src/dns/gnunet-service-dns.c:955
 #, c-format
 msgid "Got non-IP packet with %u bytes and protocol %u from TUN\n"
 msgstr "Se obtuvo un paquete no-IP con %u bytes y protocolo %u de TUN\n"
 
-#: src/dns/gnunet-service-dns.c:963
+#: src/dns/gnunet-service-dns.c:965
 msgid "DNS interceptor got non-DNS packet (dropped)\n"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:965
+#: src/dns/gnunet-service-dns.c:967
 msgid "# Non-DNS UDP packet received via TUN interface"
 msgstr "# Paquetes UDP no-DNS recibidos vía interfaz TUN"
 
-#: src/dns/gnunet-service-dns.c:1032
+#: src/dns/gnunet-service-dns.c:1034
 msgid "# DNS requests received via TUN interface"
 msgstr "# Peticiones DNS recibidas vía interfaz TUN"
 
-#: src/dns/gnunet-service-dns.c:1080 src/exit/gnunet-daemon-exit.c:3563
+#: src/dns/gnunet-service-dns.c:1082 src/exit/gnunet-daemon-exit.c:3565
 msgid "need a valid IPv4 or IPv6 address\n"
 msgstr "se necesita una dirección IPv4 o IPv6 válida\n"
 
-#: src/dns/gnunet-service-dns.c:1090
+#: src/dns/gnunet-service-dns.c:1092
 #, fuzzy, c-format
 msgid "`%s' must be installed SUID, will not run DNS interceptor\n"
 msgstr "«%s» debe ser instalado con SUID, se niega a arrancar\n"
 
-#: src/dv/gnunet-dv.c:173
+#: src/dv/gnunet-dv.c:175
 #, fuzzy
 msgid "Print information about DV state"
 msgstr "Imprime información acerca del estado del ATS"
 
-#: src/exit/gnunet-daemon-exit.c:958
+#: src/exit/gnunet-daemon-exit.c:960
 msgid "# TCP packets sent via TUN"
 msgstr "# Paquetes TCP enviados vía TUN"
 
-#: src/exit/gnunet-daemon-exit.c:1059
+#: src/exit/gnunet-daemon-exit.c:1061
 msgid "# ICMP packets sent via TUN"
 msgstr "# Paquetes ICMP enviados vía TUN"
 
-#: src/exit/gnunet-daemon-exit.c:1338
+#: src/exit/gnunet-daemon-exit.c:1340
 msgid "# UDP packets sent via TUN"
 msgstr "# Paquetes UDP enviados vía TUN"
 
-#: src/exit/gnunet-daemon-exit.c:1462 src/exit/gnunet-daemon-exit.c:1570
-#: src/exit/gnunet-daemon-exit.c:1617 src/exit/gnunet-daemon-exit.c:1699
-#: src/exit/gnunet-daemon-exit.c:1820 src/exit/gnunet-daemon-exit.c:1951
-#: src/exit/gnunet-daemon-exit.c:2205
+#: src/exit/gnunet-daemon-exit.c:1464 src/exit/gnunet-daemon-exit.c:1572
+#: src/exit/gnunet-daemon-exit.c:1619 src/exit/gnunet-daemon-exit.c:1701
+#: src/exit/gnunet-daemon-exit.c:1822 src/exit/gnunet-daemon-exit.c:1953
+#: src/exit/gnunet-daemon-exit.c:2207
 #, fuzzy
 msgid "# Bytes received from CADET"
 msgstr "# Bytes recibidos de TUN"
 
-#: src/exit/gnunet-daemon-exit.c:1465
+#: src/exit/gnunet-daemon-exit.c:1467
 #, fuzzy
 msgid "# UDP IP-exit requests received via cadet"
 msgstr "# Peticiones de salida IP por UDP recibidas vía mesh"
 
-#: src/exit/gnunet-daemon-exit.c:1573
+#: src/exit/gnunet-daemon-exit.c:1575
 #, fuzzy
 msgid "# UDP service requests received via cadet"
 msgstr "# Peticiones de servicio UDP recibidas vía mesh"
 
-#: src/exit/gnunet-daemon-exit.c:1613
+#: src/exit/gnunet-daemon-exit.c:1615
 #, fuzzy
 msgid "# TCP service creation requests received via cadet"
 msgstr "# Peticiones de creaciones de servicio TCP recibidas vía mesh"
 
-#: src/exit/gnunet-daemon-exit.c:1702
+#: src/exit/gnunet-daemon-exit.c:1704
 #, fuzzy
 msgid "# TCP IP-exit creation requests received via cadet"
 msgstr "# Peticiones de creación de salida IP por TCP recibidas vía mesh"
 
-#: src/exit/gnunet-daemon-exit.c:1786
+#: src/exit/gnunet-daemon-exit.c:1788
 msgid "# TCP DATA requests dropped (no session)"
 msgstr "# Peticiones de datos (DATA) TCP omitidas (no hay sesión)"
 
-#: src/exit/gnunet-daemon-exit.c:1823
+#: src/exit/gnunet-daemon-exit.c:1825
 #, fuzzy
 msgid "# TCP data requests received via cadet"
 msgstr "# Peticiones de datos TCP recibidas vía mesh"
 
-#: src/exit/gnunet-daemon-exit.c:1954
+#: src/exit/gnunet-daemon-exit.c:1956
 #, fuzzy
 msgid "# ICMP IP-exit requests received via cadet"
 msgstr "# Peticiones de salida IP por ICMP recibidas vía mesh"
 
-#: src/exit/gnunet-daemon-exit.c:2020 src/exit/gnunet-daemon-exit.c:2277
-#: src/exit/gnunet-daemon-exit.c:2632 src/vpn/gnunet-service-vpn.c:826
-#: src/vpn/gnunet-service-vpn.c:989 src/vpn/gnunet-service-vpn.c:2103
+#: src/exit/gnunet-daemon-exit.c:2022 src/exit/gnunet-daemon-exit.c:2279
+#: src/exit/gnunet-daemon-exit.c:2634 src/vpn/gnunet-service-vpn.c:828
+#: src/vpn/gnunet-service-vpn.c:991 src/vpn/gnunet-service-vpn.c:2105
 msgid "# ICMPv4 packets dropped (type not allowed)"
 msgstr "# Paquetes ICMPv4 omitidos (tipo no permitido)"
 
-#: src/exit/gnunet-daemon-exit.c:2079 src/exit/gnunet-daemon-exit.c:2336
-#: src/exit/gnunet-daemon-exit.c:2669 src/vpn/gnunet-service-vpn.c:885
-#: src/vpn/gnunet-service-vpn.c:1022 src/vpn/gnunet-service-vpn.c:2156
+#: src/exit/gnunet-daemon-exit.c:2081 src/exit/gnunet-daemon-exit.c:2338
+#: src/exit/gnunet-daemon-exit.c:2671 src/vpn/gnunet-service-vpn.c:887
+#: src/vpn/gnunet-service-vpn.c:1024 src/vpn/gnunet-service-vpn.c:2158
 msgid "# ICMPv6 packets dropped (type not allowed)"
 msgstr "# Paquetes ICMPv6 omitidos (tipo no permitido)"
 
-#: src/exit/gnunet-daemon-exit.c:2208
+#: src/exit/gnunet-daemon-exit.c:2210
 #, fuzzy
 msgid "# ICMP service requests received via cadet"
 msgstr "# Peticiones de servicio ICMP recibidas vía mesh"
 
-#: src/exit/gnunet-daemon-exit.c:2262 src/vpn/gnunet-service-vpn.c:983
-#: src/vpn/gnunet-service-vpn.c:2094
+#: src/exit/gnunet-daemon-exit.c:2264 src/vpn/gnunet-service-vpn.c:985
+#: src/vpn/gnunet-service-vpn.c:2096
 msgid "# ICMPv4 packets dropped (impossible PT to v6)"
 msgstr "# Paquetes ICMPv4 omitidos (imposible atravesar v6)"
 
-#: src/exit/gnunet-daemon-exit.c:2321 src/vpn/gnunet-service-vpn.c:873
-#: src/vpn/gnunet-service-vpn.c:2128 src/vpn/gnunet-service-vpn.c:2139
+#: src/exit/gnunet-daemon-exit.c:2323 src/vpn/gnunet-service-vpn.c:875
+#: src/vpn/gnunet-service-vpn.c:2130 src/vpn/gnunet-service-vpn.c:2141
 msgid "# ICMPv6 packets dropped (impossible PT to v4)"
 msgstr "# Paquetes ICMPv6 omitidos (imposible atravesar v4)"
 
-#: src/exit/gnunet-daemon-exit.c:2400 src/exit/gnunet-daemon-exit.c:3066
+#: src/exit/gnunet-daemon-exit.c:2402 src/exit/gnunet-daemon-exit.c:3068
 #, fuzzy
 msgid "# Inbound CADET channels created"
 msgstr "# Túneles interiores MESH creados"
 
-#: src/exit/gnunet-daemon-exit.c:2520
+#: src/exit/gnunet-daemon-exit.c:2522
 #, c-format
 msgid "Got duplicate service records for `%s:%u'\n"
 msgstr "Hay registros de servicios duplicados para «%s:%u»\n"
 
-#: src/exit/gnunet-daemon-exit.c:2539
+#: src/exit/gnunet-daemon-exit.c:2541
 #, fuzzy
 msgid "# Messages transmitted via cadet channels"
 msgstr "# Bytes transmitidos vía túneles MESH"
 
-#: src/exit/gnunet-daemon-exit.c:2717
+#: src/exit/gnunet-daemon-exit.c:2719
 msgid "# ICMP packets dropped (not allowed)"
 msgstr "# Paquetes ICMP omitidos (tipo no permitido)"
 
-#: src/exit/gnunet-daemon-exit.c:2725
+#: src/exit/gnunet-daemon-exit.c:2727
 msgid "ICMP Packet dropped, have no matching connection information\n"
 msgstr "Paquete ICMP omitido, no hay información de conexiones coincidente\n"
 
-#: src/exit/gnunet-daemon-exit.c:2799
+#: src/exit/gnunet-daemon-exit.c:2801
 msgid "UDP Packet dropped, have no matching connection information\n"
 msgstr "Paquete UDP omitido, no hay información de conexiones coincidente\n"
 
-#: src/exit/gnunet-daemon-exit.c:2871
+#: src/exit/gnunet-daemon-exit.c:2873
 msgid "TCP Packet dropped, have no matching connection information\n"
 msgstr "Paquete TCP omitido, no hay información de conexiones coincidente\n"
 
-#: src/exit/gnunet-daemon-exit.c:2919
+#: src/exit/gnunet-daemon-exit.c:2921
 msgid "# Packets received from TUN"
 msgstr "# Paquetes recibidos de TUN"
 
-#: src/exit/gnunet-daemon-exit.c:2933
+#: src/exit/gnunet-daemon-exit.c:2935
 msgid "# Bytes received from TUN"
 msgstr "# Bytes recibidos de TUN"
 
-#: src/exit/gnunet-daemon-exit.c:2959
+#: src/exit/gnunet-daemon-exit.c:2961
 msgid "IPv4 packet options received.  Ignored.\n"
 msgstr "Opciones de paquete IPv4 recibidas.  Ignoradas.\n"
 
-#: src/exit/gnunet-daemon-exit.c:2986
+#: src/exit/gnunet-daemon-exit.c:2988
 #, c-format
 msgid "IPv4 packet with unsupported next header %u received.  Ignored.\n"
 msgstr ""
 "Recibido paquete IPv4 con cabecera «next» no soportada %u.  Ignorado.\n"
 
-#: src/exit/gnunet-daemon-exit.c:3032
+#: src/exit/gnunet-daemon-exit.c:3034
 #, c-format
 msgid "IPv6 packet with unsupported next header %d received.  Ignored.\n"
 msgstr ""
 "Recibido paquete IPv6 con cabecera «next» no soportada %d.  Ignorado.\n"
 
-#: src/exit/gnunet-daemon-exit.c:3040
+#: src/exit/gnunet-daemon-exit.c:3042
 #, c-format
 msgid "Packet from unknown protocol %u received.  Ignored.\n"
 msgstr "Recibido paquete de protocolo desconocido %u.  Ignorado.\n"
 
-#: src/exit/gnunet-daemon-exit.c:3243 src/exit/gnunet-daemon-exit.c:3253
+#: src/exit/gnunet-daemon-exit.c:3245 src/exit/gnunet-daemon-exit.c:3255
 #, fuzzy, c-format
 msgid "Option `%s' for domain `%s' is not formatted correctly!\n"
 msgstr "Las opción «%s» o «%s» es necesaria.\n"
 
-#: src/exit/gnunet-daemon-exit.c:3267 src/exit/gnunet-daemon-exit.c:3275
+#: src/exit/gnunet-daemon-exit.c:3269 src/exit/gnunet-daemon-exit.c:3277
 #, c-format
 msgid "`%s' is not a valid port number (for domain `%s')!"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3316
+#: src/exit/gnunet-daemon-exit.c:3318
 #, c-format
 msgid "No addresses found for hostname `%s' of service `%s'!\n"
 msgstr ""
 "¡No se encontraron direcciones para el nombre de máquina «%s» del servicio "
 "«%s»!\n"
 
-#: src/exit/gnunet-daemon-exit.c:3330 src/exit/gnunet-daemon-exit.c:3343
+#: src/exit/gnunet-daemon-exit.c:3332 src/exit/gnunet-daemon-exit.c:3345
 #, c-format
 msgid "Service `%s' configured for IPv4, but IPv4 is disabled!\n"
 msgstr "¡Servicio «%s» configurado para IPv4, pero IPv4 está deshabilitado!\n"
 
-#: src/exit/gnunet-daemon-exit.c:3355
+#: src/exit/gnunet-daemon-exit.c:3357
 #, c-format
 msgid "No IP addresses found for hostname `%s' of service `%s'!\n"
 msgstr ""
 "¡No se encontraron direcciones IP para el nombre de máquina «%s» del "
 "servicio «%s»!\n"
 
-#: src/exit/gnunet-daemon-exit.c:3499
+#: src/exit/gnunet-daemon-exit.c:3501
 msgid ""
 "This system does not support IPv4, will disable IPv4 functions despite them "
 "being enabled in the configuration\n"
@@ -2784,7 +2777,7 @@ msgstr ""
 "Este sistema no soporta IPv4, se deshabilitarán las funciones IPv4 aunque "
 "estén habilitadas en la configuración\n"
 
-#: src/exit/gnunet-daemon-exit.c:3507
+#: src/exit/gnunet-daemon-exit.c:3509
 msgid ""
 "This system does not support IPv6, will disable IPv6 functions despite them "
 "being enabled in the configuration\n"
@@ -2792,7 +2785,7 @@ msgstr ""
 "Este sistema no soporta IPv6, se deshabilitarán las funciones IPv6 aunque "
 "estén habilitadas en la configuración\n"
 
-#: src/exit/gnunet-daemon-exit.c:3514
+#: src/exit/gnunet-daemon-exit.c:3516
 msgid ""
 "Cannot enable IPv4 exit but disable IPv4 on TUN interface, will use "
 "ENABLE_IPv4=YES\n"
@@ -2800,7 +2793,7 @@ msgstr ""
 "No se puede habilitar salida IPv4 pero se deshabilita IPv4 sobre interfaz "
 "TUN, se usará ENABLE_IPv4=YES\n"
 
-#: src/exit/gnunet-daemon-exit.c:3520
+#: src/exit/gnunet-daemon-exit.c:3522
 msgid ""
 "Cannot enable IPv6 exit but disable IPv6 on TUN interface, will use "
 "ENABLE_IPv6=YES\n"
@@ -2808,156 +2801,156 @@ msgstr ""
 "No se pudo habilitar la salida IPv6 pero se deshabilita IPv6 sobre interfaz "
 "TUN, se usará ENABLE_IPv6=YES\n"
 
-#: src/exit/gnunet-daemon-exit.c:3688
+#: src/exit/gnunet-daemon-exit.c:3690
 msgid "Must be a number"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3803
+#: src/exit/gnunet-daemon-exit.c:3805
 #, fuzzy, c-format
 msgid "`%s' must be installed SUID, EXIT will not work\n"
 msgstr "«%s» debe ser instalado con SUID, se niega a arrancar\n"
 
-#: src/exit/gnunet-daemon-exit.c:3815 src/pt/gnunet-daemon-pt.c:1202
+#: src/exit/gnunet-daemon-exit.c:3817 src/pt/gnunet-daemon-pt.c:1204
 msgid "No useful service enabled.  Exiting.\n"
 msgstr "Ningún servicio útil habilitado.  Saliendo.\n"
 
-#: src/exit/gnunet-daemon-exit.c:3964
+#: src/exit/gnunet-daemon-exit.c:3966
 msgid "Daemon to run to provide an IP exit node for the VPN"
 msgstr "Demonio a ejecutar para obtener un nodo de salida IP para la VPN"
 
-#: src/fragmentation/defragmentation.c:273
+#: src/fragmentation/defragmentation.c:275
 msgid "# acknowledgements sent for fragment"
 msgstr "# reconocimientos enviados por framentos"
 
-#: src/fragmentation/defragmentation.c:466
-#: src/transport/plugin_transport_wlan.c:1552
+#: src/fragmentation/defragmentation.c:468
+#: src/transport/plugin_transport_wlan.c:1554
 msgid "# fragments received"
 msgstr "# fragmentos recibidos"
 
-#: src/fragmentation/defragmentation.c:536
+#: src/fragmentation/defragmentation.c:538
 msgid "# duplicate fragments received"
 msgstr "# fragmentos duplicados recibidos"
 
-#: src/fragmentation/defragmentation.c:554
+#: src/fragmentation/defragmentation.c:556
 msgid "# messages defragmented"
 msgstr "# mensajes defragmentados"
 
-#: src/fragmentation/fragmentation.c:238
+#: src/fragmentation/fragmentation.c:240
 msgid "# fragments transmitted"
 msgstr "# fragmentos transmitidos"
 
-#: src/fragmentation/fragmentation.c:243
+#: src/fragmentation/fragmentation.c:245
 msgid "# fragments retransmitted"
 msgstr "# fragmentos retransmitidos"
 
-#: src/fragmentation/fragmentation.c:276
+#: src/fragmentation/fragmentation.c:278
 msgid "# fragments wrap arounds"
 msgstr "# encajes de fragmentos"
 
-#: src/fragmentation/fragmentation.c:323
+#: src/fragmentation/fragmentation.c:325
 msgid "# messages fragmented"
 msgstr "# mensajes fragmentados"
 
-#: src/fragmentation/fragmentation.c:329
+#: src/fragmentation/fragmentation.c:331
 msgid "# total size of fragmented messages"
 msgstr "# tamaño total de los mensajes fragmentados"
 
-#: src/fragmentation/fragmentation.c:454
+#: src/fragmentation/fragmentation.c:456
 msgid "# fragment acknowledgements received"
 msgstr "# reconocimientos de fragmentos recibidos"
 
-#: src/fragmentation/fragmentation.c:461
+#: src/fragmentation/fragmentation.c:463
 msgid "# bits removed from fragmentation ACKs"
 msgstr "# bits eliminados de reconocimientos de fragmentos"
 
-#: src/fragmentation/fragmentation.c:485
+#: src/fragmentation/fragmentation.c:487
 msgid "# fragmentation transmissions completed"
 msgstr "# transmisiones de fragmentos completadas"
 
-#: src/fs/fs_api.c:497
+#: src/fs/fs_api.c:499
 #, c-format
 msgid "Could not open file `%s': %s"
 msgstr "No se pudo abrir el fichero «%s»: %s"
 
-#: src/fs/fs_api.c:508
+#: src/fs/fs_api.c:510
 #, c-format
 msgid "Could not read file `%s': %s"
 msgstr "No se pudo leer el fichero «%s»: %s"
 
 # Short read??
-#: src/fs/fs_api.c:516
+#: src/fs/fs_api.c:518
 #, c-format
 msgid "Short read reading from file `%s'!"
 msgstr "¡Lectura corta leyendo del fichero «%s»!"
 
-#: src/fs/fs_api.c:1124
+#: src/fs/fs_api.c:1126
 #, c-format
 msgid "Failed to resume publishing information `%s': %s\n"
 msgstr "Se produjo un fallo al retomar la operación de publicación «%s»: %s\n"
 
-#: src/fs/fs_api.c:1644
+#: src/fs/fs_api.c:1646
 #, c-format
 msgid "Failure while resuming publishing operation `%s': %s\n"
 msgstr "Fallo mientras se reiniciaba la operación de publicación «%s»: %s\n"
 
-#: src/fs/fs_api.c:1660
+#: src/fs/fs_api.c:1662
 #, c-format
 msgid "Failed to resume publishing operation `%s': %s\n"
 msgstr "Se produjo un fallo al retomar la operación de publicación «%s»: %s\n"
 
-#: src/fs/fs_api.c:2320
+#: src/fs/fs_api.c:2322
 #, c-format
 msgid "Failure while resuming unindexing operation `%s': %s\n"
 msgstr ""
 "Se produjo un fallo mientras se retomaba la operación de publicación «%s»: "
 "%s\n"
 
-#: src/fs/fs_api.c:2330
+#: src/fs/fs_api.c:2332
 #, c-format
 msgid "Failed to resume unindexing operation `%s': %s\n"
 msgstr "Se produjo un fallo al retomar la operación de desindexado «%s»: %s\n"
 
-#: src/fs/fs_api.c:2458 src/fs/fs_api.c:2704
+#: src/fs/fs_api.c:2460 src/fs/fs_api.c:2706
 #, c-format
 msgid "Failed to resume sub-download `%s': %s\n"
 msgstr "Se produjo un fallo al retomar la sub-descarga «%s»: %s\n"
 
-#: src/fs/fs_api.c:2476
+#: src/fs/fs_api.c:2478
 #, c-format
 msgid "Failed to resume sub-search `%s': %s\n"
 msgstr "Se produjo un fallo al retomar la sub-búsqueda «%s»: %s\n"
 
-#: src/fs/fs_api.c:2491 src/fs/fs_api.c:2510 src/fs/fs_api.c:3014
+#: src/fs/fs_api.c:2493 src/fs/fs_api.c:2512 src/fs/fs_api.c:3016
 #, c-format
 msgid "Failure while resuming search operation `%s': %s\n"
 msgstr ""
 "Se produjo un fallo mientras se retomaba la operación de búsqueda «%s»: %s\n"
 
-#: src/fs/fs_api.c:2694
+#: src/fs/fs_api.c:2696
 #, c-format
 msgid "Failed to resume sub-download `%s': could not open file `%s'\n"
 msgstr ""
 "Se produjo un fallo al retomar la sub-descarga «%s»: no se pudo abrir el "
 "fichero «%s»\n"
 
-#: src/fs/fs_api.c:2957
+#: src/fs/fs_api.c:2959
 msgid "Could not resume running search, will resume as paused search\n"
 msgstr ""
 "No se pudo retomar la búsqueda en ejecución, se retomará como una búsqueda "
 "en pausa\n"
 
-#: src/fs/fs_api.c:3052
+#: src/fs/fs_api.c:3054
 #, c-format
 msgid "Failure while resuming download operation `%s': %s\n"
 msgstr ""
 "Se produjo un fallo mientras se retomaba de la operación de descarga «%s»: "
 "%s\n"
 
-#: src/fs/fs_directory.c:211
+#: src/fs/fs_directory.c:213
 msgid "MAGIC mismatch.  This is not a GNUnet directory.\n"
 msgstr "No hay coincidencia con «MAGIC».  Esto no es un directorio GNUnet.\n"
 
-#: src/fs/fs_download.c:308
+#: src/fs/fs_download.c:310
 msgid ""
 "Recursive downloads of directories larger than 4 GB are not supported on 32-"
 "bit systems\n"
@@ -2965,12 +2958,12 @@ msgstr ""
 "Las descargas recursivas de directorios mayores de 4GB no están soportadas "
 "en sistemas de 32 bits\n"
 
-#: src/fs/fs_download.c:333
+#: src/fs/fs_download.c:335
 msgid "Directory too large for system address space\n"
 msgstr ""
 "Directorio demasiado grande para el espacio de direccionamiento del sistema\n"
 
-#: src/fs/fs_download.c:345
+#: src/fs/fs_download.c:347
 #, fuzzy, c-format
 msgid ""
 "Failed to access full directroy contents of `%s' for recursive download\n"
@@ -2978,19 +2971,19 @@ msgstr ""
 "Se produjo un fallo al crear el directorio para la descarga recursiva de "
 "«%s»\n"
 
-#: src/fs/fs_download.c:532 src/fs/fs_download.c:544
+#: src/fs/fs_download.c:534 src/fs/fs_download.c:546
 #, c-format
 msgid "Failed to open file `%s' for writing"
 msgstr "Se produjo un fallo al abrir «%s» para escritura"
 
-#: src/fs/fs_download.c:954
+#: src/fs/fs_download.c:956
 #, c-format
 msgid "Failed to create directory for recursive download of `%s'\n"
 msgstr ""
 "Se produjo un fallo al crear el directorio para la descarga recursiva de "
 "«%s»\n"
 
-#: src/fs/fs_download.c:1045
+#: src/fs/fs_download.c:1047
 #, c-format
 msgid ""
 "Internal error or bogus download URI (expected %u bytes at depth %u and "
@@ -2999,37 +2992,37 @@ msgstr ""
 "Error interno o URI de descarga defectuosa (se esperaban %u bytes a "
 "profundidad %u y desplazamiento %llu/%llu, se obtuvieron %u bytes)"
 
-#: src/fs/fs_download.c:1073
+#: src/fs/fs_download.c:1075
 msgid "internal error decrypting content"
 msgstr "error interno descifrando el contenido"
 
-#: src/fs/fs_download.c:1097
+#: src/fs/fs_download.c:1099
 #, c-format
 msgid "Download failed: could not open file `%s': %s"
 msgstr "Descarga fallida: no se pudo abrir el fichero «%s»: %s"
 
-#: src/fs/fs_download.c:1109
+#: src/fs/fs_download.c:1111
 #, c-format
 msgid "Failed to seek to offset %llu in file `%s': %s"
 msgstr ""
 "Se produjo un fallo al buscar en el desplazamiento %llu del fichero «%s»: %s"
 
-#: src/fs/fs_download.c:1118
+#: src/fs/fs_download.c:1120
 #, c-format
 msgid "Failed to write block of %u bytes at offset %llu in file `%s': %s"
 msgstr ""
 "Se produjo un fallo al escribir el bloque de %u bytes en el desplazamiento "
 "%llu del fichero «%s»: %s"
 
-#: src/fs/fs_download.c:1218
+#: src/fs/fs_download.c:1220
 msgid "internal error decoding tree"
 msgstr "error interno decodificando árbol"
 
-#: src/fs/fs_download.c:1883
+#: src/fs/fs_download.c:1885
 msgid "Invalid URI"
 msgstr "URI no válida"
 
-#: src/fs/fs_getopt.c:224
+#: src/fs/fs_getopt.c:235
 #, c-format
 msgid ""
 "Unknown metadata type in metadata option `%s'.  Using metadata type "
@@ -3040,304 +3033,304 @@ msgstr ""
 
 # Miguel: "Failed to receive" también aquí está traducido como
 # "no se obtuvo respuesta" por claridad.
-#: src/fs/fs_list_indexed.c:150
+#: src/fs/fs_list_indexed.c:152
 #, fuzzy, c-format
 msgid "Failed to receive response from `%s' service.\n"
 msgstr ""
 "No se obtuvo respuesta del servicio de información de pares (PEERINFO)."
 
-#: src/fs/fs_list_indexed.c:194
+#: src/fs/fs_list_indexed.c:196
 #, c-format
 msgid "Failed to not connect to `%s' service.\n"
 msgstr "Se produjo un fallo al conectar con el servicio «%s».\n"
 
-#: src/fs/fs_misc.c:126
+#: src/fs/fs_misc.c:128
 #, c-format
 msgid "Did not find mime type `%s' in extension list.\n"
 msgstr "No se encontró el tipo MIME «%s» en la lista de extensiones.\n"
 
-#: src/fs/fs_namespace.c:205
+#: src/fs/fs_namespace.c:207
 #, c-format
 msgid "Failed to open `%s' for writing: %s\n"
 msgstr "Se produjo un fallo al abrir «%s» para escritura: %s\n"
 
-#: src/fs/fs_namespace.c:230
+#: src/fs/fs_namespace.c:232
 #, c-format
 msgid "Failed to write `%s': %s\n"
 msgstr "Se produjo un fallo al escribir «%s»: %s\n"
 
-#: src/fs/fs_namespace.c:322
+#: src/fs/fs_namespace.c:324
 #, fuzzy, c-format
 msgid "Failed to read `%s': %s\n"
 msgstr "Se produjo un fallo al escribir «%s»: %s\n"
 
-#: src/fs/fs_namespace.c:468
+#: src/fs/fs_namespace.c:470
 msgid "Failed to connect to datastore."
 msgstr "Se produjo un fallo al conectar con el almacén de datos."
 
-#: src/fs/fs_publish.c:125 src/fs/fs_publish.c:436
+#: src/fs/fs_publish.c:127 src/fs/fs_publish.c:438
 #, c-format
 msgid "Publishing failed: %s"
 msgstr "Publicación fallida: %s"
 
-#: src/fs/fs_publish.c:722 src/fs/fs_publish.c:776 src/fs/fs_publish.c:821
-#: src/fs/fs_publish.c:842 src/fs/fs_publish.c:872 src/fs/fs_publish.c:1138
+#: src/fs/fs_publish.c:724 src/fs/fs_publish.c:778 src/fs/fs_publish.c:823
+#: src/fs/fs_publish.c:844 src/fs/fs_publish.c:874 src/fs/fs_publish.c:1140
 #, 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:778
+#: src/fs/fs_publish.c:780
 #, fuzzy
 msgid "error 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:823
+#: src/fs/fs_publish.c:825
 msgid "failed to compute hash"
 msgstr "se produjo un fallo al calcular el hash"
 
-#: src/fs/fs_publish.c:843
+#: src/fs/fs_publish.c:845
 msgid "filename too long"
 msgstr "nombre de fichero demasiado largo"
 
-#: src/fs/fs_publish.c:874
+#: src/fs/fs_publish.c:876
 msgid "could not connect to `fs' service"
 msgstr "no se pudo conectar con el servicio «fs»"
 
-#: src/fs/fs_publish.c:900
+#: src/fs/fs_publish.c:902
 #, 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:989 src/fs/fs_publish.c:1025
+#: src/fs/fs_publish.c:991 src/fs/fs_publish.c:1027
 msgid "Can not create LOC URI. Will continue with CHK instead.\n"
 msgstr ""
 
-#: src/fs/fs_publish.c:1092
+#: src/fs/fs_publish.c:1094
 #, c-format
 msgid "Recursive upload failed at `%s': %s"
 msgstr "La subida recursiva falló en «%s»: %s"
 
-#: src/fs/fs_publish.c:1100
+#: src/fs/fs_publish.c:1102
 #, c-format
 msgid "Recursive upload failed: %s"
 msgstr "Subida recursiva fallida: %s"
 
-#: src/fs/fs_publish.c:1140
+#: src/fs/fs_publish.c:1142
 msgid "needs to be an actual file"
 msgstr "tiene que ser un fichero de verdad"
 
-#: src/fs/fs_publish.c:1379
+#: src/fs/fs_publish.c:1381
 #, fuzzy, c-format
 msgid "Datastore failure: %s"
 msgstr "# «PUT» en el almacén de datos fallidos"
 
-#: src/fs/fs_publish.c:1470
+#: src/fs/fs_publish.c:1472
 #, 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:218
+#: src/fs/fs_publish_ksk.c:220
 msgid "Could not connect to datastore."
 msgstr "No se pudo conectar con el almacén de datos."
 
-#: src/fs/fs_publish_ublock.c:239
+#: src/fs/fs_publish_ublock.c:241
 msgid "Internal error."
 msgstr "Error interno."
 
-#: src/fs/fs_search.c:820 src/fs/fs_search.c:890
+#: src/fs/fs_search.c:822 src/fs/fs_search.c:892
 #, fuzzy, c-format
 msgid "Failed to parse URI `%s': %s\n"
 msgstr "Se produjo un fallo al procesar la URI: %s\n"
 
-#: src/fs/fs_search.c:977
+#: src/fs/fs_search.c:979
 #, c-format
 msgid "Got result with unknown block type `%d', ignoring"
 msgstr ""
 "Se obtuvo un resultado con un tipo desconocido de bloque «%d», ignorándolo"
 
-#: src/fs/fs_unindex.c:61
+#: src/fs/fs_unindex.c:63
 msgid "Failed to find given position in file"
 msgstr "Se produjo un fallo al buscar la posición dada en el fichero"
 
-#: src/fs/fs_unindex.c:66
+#: src/fs/fs_unindex.c:68
 msgid "Failed to read file"
 msgstr "No se pudo leer el fichero"
 
 # Miguel: ¿Conectar y conexión?
-#: src/fs/fs_unindex.c:273
+#: src/fs/fs_unindex.c:275
 #, fuzzy
 msgid "Error communicating with `fs' service."
 msgstr "Error al comunicar con el servicio ARM.\n"
 
-#: src/fs/fs_unindex.c:324
+#: src/fs/fs_unindex.c:326
 msgid "Failed to connect to FS service for unindexing."
 msgstr ""
 "Se produjo un fallo al conectar con el servicio «FS» para el desindexado."
 
-#: src/fs/fs_unindex.c:374 src/fs/fs_unindex.c:386
+#: src/fs/fs_unindex.c:376 src/fs/fs_unindex.c:388
 msgid "Failed to get KSKs from directory scan."
 msgstr "Se produjo un fallo al obtener KSKs de la búsqueda de directorios."
 
-#: src/fs/fs_unindex.c:382
+#: src/fs/fs_unindex.c:384
 #, c-format
 msgid "Internal error scanning `%s'.\n"
 msgstr "Error interno escaneando «%s».\n"
 
-#: src/fs/fs_unindex.c:441
+#: src/fs/fs_unindex.c:443
 #, fuzzy, c-format
 msgid "Failed to remove UBlock: %s\n"
 msgstr "Se produjo un fallo al eliminar el KBlock: %s\n"
 
-#: src/fs/fs_unindex.c:586 src/fs/fs_unindex.c:650
+#: src/fs/fs_unindex.c:588 src/fs/fs_unindex.c:652
 msgid "Failed to connect to `datastore' service."
 msgstr ""
 "Se produjo un fallo al conectar con el servicio de almacenamiento de datos "
 "(datastore)."
 
-#: src/fs/fs_unindex.c:663
+#: src/fs/fs_unindex.c:665
 msgid "Failed to open file for unindexing."
 msgstr "Se produjo un fallo al abrir el fichero para desindexado."
 
-#: src/fs/fs_unindex.c:702
+#: src/fs/fs_unindex.c:704
 msgid "Failed to compute hash of file."
 msgstr "Se produjo un fallo al calcular el hash del fichero."
 
 # Cadena erronea, corregida en SVN.
-#: src/fs/fs_uri.c:232
+#: src/fs/fs_uri.c:234
 #, fuzzy, no-c-format
 msgid "Malformed KSK URI (`%' must be followed by HEX number)"
 msgstr "'%' debe ser seguido por un número hexadecimal"
 
-#: src/fs/fs_uri.c:291
+#: src/fs/fs_uri.c:293
 msgid "Malformed KSK URI (must not begin or end with `+')"
 msgstr "URI KSK mal formada (no debe empezar ni terminar con «+»)"
 
-#: src/fs/fs_uri.c:309
+#: src/fs/fs_uri.c:311
 #, fuzzy
 msgid "Malformed KSK URI (`++' not allowed)"
 msgstr "URI KSK mal formada (no debe empezar ni terminar con «+»)"
 
-#: src/fs/fs_uri.c:316
+#: src/fs/fs_uri.c:318
 #, fuzzy
 msgid "Malformed KSK URI (quotes not balanced)"
 msgstr "URI KSK mal formada (no debe empezar ni terminar con «+»)"
 
-#: src/fs/fs_uri.c:386
+#: src/fs/fs_uri.c:388
 #, fuzzy
 msgid "Malformed SKS URI (wrong syntax)"
 msgstr "URI SKS mal formada"
 
-#: src/fs/fs_uri.c:427
+#: src/fs/fs_uri.c:429
 #, fuzzy
 msgid "Malformed CHK URI (wrong syntax)"
 msgstr "URI CHK mal formada"
 
-#: src/fs/fs_uri.c:442
+#: src/fs/fs_uri.c:444
 msgid "Malformed CHK URI (failed to decode CHK)"
 msgstr ""
 
-#: src/fs/fs_uri.c:521
+#: src/fs/fs_uri.c:523
 #, fuzzy
 msgid "LOC URI malformed (wrong syntax)"
 msgstr "URI SKS mal formada"
 
-#: src/fs/fs_uri.c:536
+#: src/fs/fs_uri.c:538
 #, fuzzy
 msgid "LOC URI malformed (no CHK)"
 msgstr "URI SKS mal formada"
 
-#: src/fs/fs_uri.c:546
+#: src/fs/fs_uri.c:548
 #, fuzzy
 msgid "LOC URI malformed (missing LOC)"
 msgstr "URI SKS mal formada"
 
-#: src/fs/fs_uri.c:554
+#: src/fs/fs_uri.c:556
 #, fuzzy
 msgid "LOC URI malformed (wrong syntax for public key)"
 msgstr "URI SKS mal formada (no se pudo decodificar la clave pública)"
 
-#: src/fs/fs_uri.c:562
+#: src/fs/fs_uri.c:564
 #, fuzzy
 msgid "LOC URI malformed (could not decode public key)"
 msgstr "URI SKS mal formada (no se pudo decodificar la clave pública)"
 
-#: src/fs/fs_uri.c:568
+#: src/fs/fs_uri.c:570
 #, fuzzy
 msgid "LOC URI malformed (could not find signature)"
 msgstr "URI SKS mal formada (no se pudo encontrar la firma)"
 
-#: src/fs/fs_uri.c:574
+#: src/fs/fs_uri.c:576
 #, fuzzy
 msgid "LOC URI malformed (wrong syntax for signature)"
 msgstr "URI SKS mal formada (no se pudo encontrar la firma)"
 
-#: src/fs/fs_uri.c:583
+#: src/fs/fs_uri.c:585
 #, fuzzy
 msgid "LOC URI malformed (could not decode signature)"
 msgstr "URI SKS mal formada (no se pudo decodificar la firma)"
 
-#: src/fs/fs_uri.c:589
+#: src/fs/fs_uri.c:591
 #, fuzzy
 msgid "LOC URI malformed (wrong syntax for expiration time)"
 msgstr "URI SKS mal formada (no se encuentra el tiempo de expiración)"
 
-#: src/fs/fs_uri.c:595
+#: src/fs/fs_uri.c:597
 #, fuzzy
 msgid "LOC URI malformed (could not parse expiration time)"
 msgstr "URI SKS mal formada (no se encuentra el tiempo de expiración)"
 
-#: src/fs/fs_uri.c:607
+#: src/fs/fs_uri.c:609
 #, fuzzy
 msgid "LOC URI malformed (signature failed validation)"
 msgstr "URI SKS mal formada (se produjo un fallo al validar la firma)"
 
-#: src/fs/fs_uri.c:641
+#: src/fs/fs_uri.c:643
 #, fuzzy
 msgid "invalid argument"
 msgstr "Parámetro no válido «%s»\n"
 
-#: src/fs/fs_uri.c:653
+#: src/fs/fs_uri.c:655
 msgid "Unrecognized URI type"
 msgstr "Tipo de URI no reconocido"
 
-#: src/fs/fs_uri.c:1057 src/fs/fs_uri.c:1084
+#: src/fs/fs_uri.c:1059 src/fs/fs_uri.c:1086
 msgid "No keywords specified!\n"
 msgstr "¡Ninguna palabra clave especificada!\n"
 
-#: src/fs/fs_uri.c:1090
+#: src/fs/fs_uri.c:1092
 msgid "Number of double-quotes not balanced!\n"
 msgstr "¡Número de comillas dobles no balanceado!\n"
 
-#: src/fs/gnunet-auto-share.c:230
+#: src/fs/gnunet-auto-share.c:232
 #, c-format
 msgid "Failed to load state: %s\n"
 msgstr "Se produjo un fallo al cargar el estado: %s\n"
 
-#: src/fs/gnunet-auto-share.c:283 src/fs/gnunet-auto-share.c:293
-#: src/fs/gnunet-auto-share.c:303
+#: src/fs/gnunet-auto-share.c:285 src/fs/gnunet-auto-share.c:295
+#: src/fs/gnunet-auto-share.c:305
 #, c-format
 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:405
+#: src/fs/gnunet-auto-share.c:407
 #, c-format
 msgid "Publication of `%s' done\n"
 msgstr "Publicación de «%s» finalizada\n"
 
-#: src/fs/gnunet-auto-share.c:492
+#: src/fs/gnunet-auto-share.c:494
 #, c-format
 msgid "Publishing `%s'\n"
 msgstr "Publicando «%s»\n"
 
-#: src/fs/gnunet-auto-share.c:502
+#: src/fs/gnunet-auto-share.c:504
 #, c-format
 msgid "Failed to run `%s'\n"
 msgstr "Se produjo un fallo al ejecutar «%s»\n"
 
-#: src/fs/gnunet-auto-share.c:711
+#: src/fs/gnunet-auto-share.c:713
 #, c-format
 msgid ""
 "You must specify one and only one directory name for automatic publication.\n"
@@ -3345,78 +3338,78 @@ msgstr ""
 "Debes especificar uno y solo un nombre de directorio para publicación "
 "automática.\n"
 
-#: src/fs/gnunet-auto-share.c:765 src/fs/gnunet-publish.c:898
+#: src/fs/gnunet-auto-share.c:767 src/fs/gnunet-publish.c:903
 msgid "set the desired LEVEL of sender-anonymity"
 msgstr "establece el nivel LEVEL deseado de anonimato del emisor"
 
-#: src/fs/gnunet-auto-share.c:770 src/fs/gnunet-publish.c:902
+#: src/fs/gnunet-auto-share.c:772 src/fs/gnunet-publish.c:907
 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:775 src/fs/gnunet-publish.c:907
+#: src/fs/gnunet-auto-share.c:777 src/fs/gnunet-publish.c:912
 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:781 src/fs/gnunet-publish.c:942
+#: src/fs/gnunet-auto-share.c:783 src/fs/gnunet-publish.c:944
 msgid "specify the priority of the content"
 msgstr "especificar la prioridad del contenido"
 
-#: src/fs/gnunet-auto-share.c:787 src/fs/gnunet-publish.c:954
+#: src/fs/gnunet-auto-share.c:789 src/fs/gnunet-publish.c:955
 msgid "set the desired replication LEVEL"
 msgstr "establece el nivel LEVEL deseado de replicación"
 
-#: src/fs/gnunet-auto-share.c:811
+#: src/fs/gnunet-auto-share.c:813
 msgid "Automatically publish files from a directory on GNUnet"
 msgstr "Publicar automáticamente ficheros de un directorio en GNUnet"
 
-#: src/fs/gnunet-daemon-fsprofiler.c:646
+#: src/fs/gnunet-daemon-fsprofiler.c:648
 msgid "Daemon to use file-sharing to measure its performance."
 msgstr "Demonio para medir el rendimiento de usar compartición de archivos."
 
-#: src/fs/gnunet-directory.c:51
+#: src/fs/gnunet-directory.c:53
 #, c-format
 msgid "\t<original file embedded in %u bytes of meta data>\n"
 msgstr "\t<fichero original embebido en %u bytes de metadatos>\n"
 
-#: src/fs/gnunet-directory.c:103
+#: src/fs/gnunet-directory.c:105
 #, c-format
 msgid "Directory `%s' meta data:\n"
 msgstr "Metadatos del directorio «%s»:\n"
 
-#: src/fs/gnunet-directory.c:106
+#: src/fs/gnunet-directory.c:108
 #, c-format
 msgid "Directory `%s' contents:\n"
 msgstr "Contenidos del directorio «%s»:\n"
 
-#: src/fs/gnunet-directory.c:141
+#: src/fs/gnunet-directory.c:143
 msgid "You must specify a filename to inspect.\n"
 msgstr "Debes especificar un fichero a inspeccionar.\n"
 
-#: src/fs/gnunet-directory.c:154
+#: src/fs/gnunet-directory.c:156
 #, c-format
 msgid "Failed to read directory `%s'\n"
 msgstr "Se produjo un fallo al leer el directorio «%s»\n"
 
-#: src/fs/gnunet-directory.c:163
+#: src/fs/gnunet-directory.c:165
 #, c-format
 msgid "`%s' is not a GNUnet directory\n"
 msgstr "«%s» no es un directorio GNUnet\n"
 
-#: src/fs/gnunet-directory.c:192
+#: src/fs/gnunet-directory.c:194
 msgid "Display contents of a GNUnet directory"
 msgstr "Muestra los contenidos de un directorio GNUnet"
 
-#: src/fs/gnunet-download.c:137
+#: src/fs/gnunet-download.c:139
 #, c-format
 msgid "Starting download `%s'.\n"
 msgstr "Iniciando descarga «%s».\n"
 
-#: src/fs/gnunet-download.c:147
+#: src/fs/gnunet-download.c:149
 msgid "<unknown time>"
 msgstr "<tiempo desconocido>"
 
-#: src/fs/gnunet-download.c:156
+#: src/fs/gnunet-download.c:158
 #, c-format
 msgid ""
 "Downloading `%s' at %llu/%llu (%s remaining, %s/s). Block took %s to "
@@ -3425,74 +3418,74 @@ msgstr ""
 "Descargando «%s» en %llu/%llu (%s restantes, %s/s). El bloque tardó %s en "
 "descargarse\n"
 
-#: src/fs/gnunet-download.c:182
+#: src/fs/gnunet-download.c:184
 #, c-format
 msgid "Error downloading: %s.\n"
 msgstr "Error descargando: %s.\n"
 
-#: src/fs/gnunet-download.c:199
+#: src/fs/gnunet-download.c:201
 #, c-format
 msgid "Downloading `%s' done (%s/s).\n"
 msgstr "Finalizada descarga «%s» (%s/s).\n"
 
-#: src/fs/gnunet-download.c:214 src/fs/gnunet-publish.c:293
-#: src/fs/gnunet-search.c:210 src/fs/gnunet-unindex.c:105
+#: src/fs/gnunet-download.c:216 src/fs/gnunet-publish.c:295
+#: src/fs/gnunet-search.c:215 src/fs/gnunet-unindex.c:107
 #, c-format
 msgid "Unexpected status: %d\n"
 msgstr "Estado inesperado: %d\n"
 
-#: src/fs/gnunet-download.c:244
+#: src/fs/gnunet-download.c:246
 msgid "You need to specify a URI argument.\n"
 msgstr "Tiene que especificar una URI como parámetro.\n"
 
-#: src/fs/gnunet-download.c:251 src/fs/gnunet-publish.c:724
+#: src/fs/gnunet-download.c:253 src/fs/gnunet-publish.c:727
 #, 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:262
+#: src/fs/gnunet-download.c:264
 msgid "Only CHK or LOC URIs supported.\n"
 msgstr "Sólo URI «CHK» o «LOC» soportadas.\n"
 
-#: src/fs/gnunet-download.c:271
+#: src/fs/gnunet-download.c:273
 msgid "Target filename must be specified.\n"
 msgstr "El nombre de fichero de destino debe ser especificado.\n"
 
-#: src/fs/gnunet-download.c:289 src/fs/gnunet-publish.c:868
-#: src/fs/gnunet-search.c:268 src/fs/gnunet-unindex.c:137
+#: src/fs/gnunet-download.c:291 src/fs/gnunet-publish.c:872
+#: src/fs/gnunet-search.c:273 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:337 src/fs/gnunet-search.c:311
+#: src/fs/gnunet-download.c:339 src/fs/gnunet-search.c:315
 msgid "set the desired LEVEL of receiver-anonymity"
 msgstr "establece el nivel LEVEL deseado de anonimato del receptor"
 
-#: src/fs/gnunet-download.c:342
+#: src/fs/gnunet-download.c:344
 msgid "delete incomplete downloads (when aborted with CTRL-C)"
 msgstr "borra descargas incompletas (cuando fueron abortadas con CTRL-C="
 
-#: src/fs/gnunet-download.c:347 src/fs/gnunet-search.c:317
+#: src/fs/gnunet-download.c:349 src/fs/gnunet-search.c:319
 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:352
+#: src/fs/gnunet-download.c:354
 msgid "write the file to FILENAME"
 msgstr "escribe los datos al nombre del fichero proporcionado (FILENAME)"
 
-#: src/fs/gnunet-download.c:357
+#: src/fs/gnunet-download.c:359
 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:362
+#: src/fs/gnunet-download.c:364
 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:366
+#: src/fs/gnunet-download.c:368
 msgid "download a GNUnet directory recursively"
 msgstr "descarga un directorio de GNUnet recursivamente"
 
-#: src/fs/gnunet-download.c:384
+#: src/fs/gnunet-download.c:386
 msgid ""
 "Download files from GNUnet using a GNUnet CHK or LOC URI (gnunet://fs/"
 "chk/...)"
@@ -3500,135 +3493,135 @@ msgstr ""
 "Descargar ficheros de GNUnet usando una URI GNUnet CHK o LOC (gnunet://fs/"
 "chk/...)"
 
-#: src/fs/gnunet-fs.c:117
+#: src/fs/gnunet-fs.c:119
 msgid "print a list of all indexed files"
 msgstr "imprimir una lista de todos los ficheros indexados"
 
-#: src/fs/gnunet-fs.c:128
+#: src/fs/gnunet-fs.c:130
 msgid "Special file-sharing operations"
 msgstr "Operaciones especiales de compartición de ficheros"
 
-#: src/fs/gnunet-fs-profiler.c:209
+#: src/fs/gnunet-fs-profiler.c:211
 msgid "run the experiment with COUNT peers"
 msgstr "ejecuta el experimento con «COUNT» pares"
 
-#: src/fs/gnunet-fs-profiler.c:215
+#: src/fs/gnunet-fs-profiler.c:217
 msgid "specifies name of a file with the HOSTS the testbed should use"
 msgstr ""
 "especifica el nombre de un fichero con las máquinas (HOSTS) que la batería "
 "de pruebas debería usar"
 
-#: src/fs/gnunet-fs-profiler.c:221
+#: src/fs/gnunet-fs-profiler.c:223
 msgid "automatically terminate experiment after DELAY"
 msgstr "termina el experimento automáticamente despues de «DELAY»"
 
-#: src/fs/gnunet-fs-profiler.c:231
+#: src/fs/gnunet-fs-profiler.c:233
 msgid "run a testbed to measure file-sharing performance"
 msgstr ""
 "ejecuta una batería de pruebas para medir el rendimiento de la compartición "
 "de ficheros"
 
-#: src/fs/gnunet-publish.c:217 src/fs/gnunet-publish.c:229
+#: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:231
 #, 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:237
+#: src/fs/gnunet-publish.c:239
 #, c-format
 msgid "Error publishing: %s.\n"
 msgstr "Error publicando: %s.\n"
 
-#: src/fs/gnunet-publish.c:244
+#: src/fs/gnunet-publish.c:246
 #, c-format
 msgid "Publishing `%s' done.\n"
 msgstr "Publicación «%s» finalizada.\n"
 
-#: src/fs/gnunet-publish.c:249
+#: src/fs/gnunet-publish.c:251
 #, c-format
 msgid "URI is `%s'.\n"
 msgstr "La URI es «%s».\n"
 
-#: src/fs/gnunet-publish.c:257
+#: src/fs/gnunet-publish.c:259
 #, fuzzy, c-format
 msgid "Namespace URI is `%s'.\n"
 msgstr "La URI es «%s».\n"
 
-#: src/fs/gnunet-publish.c:273
+#: src/fs/gnunet-publish.c:275
 #, fuzzy
 msgid "Starting cleanup after abort\n"
 msgstr "Limpieza completada\n"
 
-#: src/fs/gnunet-publish.c:280
+#: src/fs/gnunet-publish.c:282
 #, fuzzy
 msgid "Cleanup after abort completed.\n"
 msgstr "Limpieza completada\n"
 
-#: src/fs/gnunet-publish.c:286
+#: src/fs/gnunet-publish.c:288
 #, fuzzy
 msgid "Cleanup after abort failed.\n"
 msgstr "Limpieza completada\n"
 
-#: src/fs/gnunet-publish.c:428
+#: src/fs/gnunet-publish.c:430
 #, c-format
 msgid "Meta data for file `%s' (%s)\n"
 msgstr "Metadatos para el fichero «%s» (%s)\n"
 
-#: src/fs/gnunet-publish.c:433
+#: src/fs/gnunet-publish.c:435
 #, c-format
 msgid "Keywords for file `%s' (%s)\n"
 msgstr "Palabras clave para el fichero «%s» (%s)\n"
 
-#: src/fs/gnunet-publish.c:587
+#: src/fs/gnunet-publish.c:590
 msgid "Could not publish\n"
 msgstr "No se pudo publicar\n"
 
-#: src/fs/gnunet-publish.c:612
+#: src/fs/gnunet-publish.c:615
 msgid "Could not start publishing.\n"
 msgstr "No se pudo empezar a publicar.\n"
 
-#: src/fs/gnunet-publish.c:646
+#: src/fs/gnunet-publish.c:649
 #, c-format
 msgid "Scanning directory `%s'.\n"
 msgstr "Escaneando directorio «%s».\n"
 
-#: src/fs/gnunet-publish.c:650
+#: src/fs/gnunet-publish.c:653
 #, c-format
 msgid "Scanning file `%s'.\n"
 msgstr "Escaneando fichero «%s».\n"
 
-#: src/fs/gnunet-publish.c:656
+#: src/fs/gnunet-publish.c:659
 #, 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:663
+#: src/fs/gnunet-publish.c:666
 msgid "Preprocessing complete.\n"
 msgstr "Preprocesado completo.\n"
 
-#: src/fs/gnunet-publish.c:668
+#: src/fs/gnunet-publish.c:671
 #, 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:675
+#: src/fs/gnunet-publish.c:678
 msgid "Meta data extraction has finished.\n"
 msgstr "La extracción de metadatos ha finalizado.\n"
 
-#: src/fs/gnunet-publish.c:684
+#: src/fs/gnunet-publish.c:687
 msgid "Internal error scanning directory.\n"
 msgstr "Error interno escaneando directorio.\n"
 
-#: src/fs/gnunet-publish.c:712
+#: src/fs/gnunet-publish.c:715
 #, fuzzy, c-format
 msgid "Selected pseudonym `%s' unknown\n"
 msgstr "Espacio de nombres «%s» desconocido.\n"
 
-#: src/fs/gnunet-publish.c:745
+#: 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:759
+#: src/fs/gnunet-publish.c:763
 msgid ""
 "Failed to start meta directory scanner.  Is gnunet-helper-publish-fs "
 "installed?\n"
@@ -3636,33 +3629,33 @@ msgstr ""
 "Se produjo un fallo al iniciar el meta-escáner de directorios.  ¿Está "
 "«gnunet-helper-publish-fs» instalado?\n"
 
-#: src/fs/gnunet-publish.c:815
+#: 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:822
+#: 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:828
+#: 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:836 src/vpn/gnunet-vpn.c:208
+#: src/fs/gnunet-publish.c:840 src/vpn/gnunet-vpn.c:210
 #, 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:847 src/fs/gnunet-publish.c:855
-#: src/transport/gnunet-transport.c:1280 src/transport/gnunet-transport.c:1307
+#: src/fs/gnunet-publish.c:851 src/fs/gnunet-publish.c:859
+#: src/transport/gnunet-transport.c:1282 src/transport/gnunet-transport.c:1309
 #, c-format
 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:911
+#: src/fs/gnunet-publish.c:916
 msgid ""
 "print list of extracted keywords that would be used, but do not perform "
 "upload"
@@ -3670,7 +3663,7 @@ msgstr ""
 "imprimir una lista de las palabras clave extraídas que podrían ser usadas, "
 "pero sin realizar la subida"
 
-#: src/fs/gnunet-publish.c:917
+#: src/fs/gnunet-publish.c:922
 msgid ""
 "add an additional keyword for the top-level file or directory (this option "
 "can be specified multiple times)"
@@ -3678,11 +3671,11 @@ msgstr ""
 "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:923
+#: src/fs/gnunet-publish.c:928
 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:928
+#: src/fs/gnunet-publish.c:932
 msgid ""
 "do not index, perform full insertion (stores entire file in encrypted form "
 "in GNUnet database)"
@@ -3690,7 +3683,7 @@ msgstr ""
 "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:938
 msgid ""
 "specify ID of an updated version to be published in the future (for "
 "namespace insertions only)"
@@ -3698,13 +3691,13 @@ msgstr ""
 "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:948
+#: src/fs/gnunet-publish.c:949
 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:958
+#: src/fs/gnunet-publish.c:959
 msgid ""
 "only simulate the process but do not do any actual publishing (useful to "
 "compute URIs)"
@@ -3712,7 +3705,7 @@ msgstr ""
 "únicamente simular el proceso pero no publicar nada realmente (útil para "
 "calcular URI)"
 
-#: src/fs/gnunet-publish.c:964
+#: src/fs/gnunet-publish.c:965
 msgid ""
 "set the ID of this version of the publication (for namespace insertions only)"
 msgstr ""
@@ -3727,31 +3720,31 @@ msgstr ""
 "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:987
+#: src/fs/gnunet-publish.c:989
 msgid "Publish a file or directory on GNUnet"
 msgstr "Publicar un fichero o un directorio en GNUnet"
 
-#: src/fs/gnunet-search.c:125
+#: src/fs/gnunet-search.c:127
 #, c-format
 msgid "Failed to write directory with search results to `%s'\n"
 msgstr ""
 "Se produjo un fallo al escribir el directorio con los resultados de búsqueda "
 "de «%s»\n"
 
-#: src/fs/gnunet-search.c:202
+#: src/fs/gnunet-search.c:207
 #, c-format
 msgid "Error searching: %s.\n"
 msgstr "Error buscando: %s.\n"
 
-#: src/fs/gnunet-search.c:258
+#: src/fs/gnunet-search.c:263
 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:282
+#: src/fs/gnunet-search.c:287
 msgid "Could not start searching.\n"
 msgstr "No se pudo empezar a buscar.\n"
 
-#: src/fs/gnunet-search.c:323
+#: src/fs/gnunet-search.c:324
 msgid "write search results to file starting with PREFIX"
 msgstr "escribir resultados de búsqueda al fichero que empiecen por «PREFIX»"
 
@@ -3759,7 +3752,7 @@ msgstr "escribir resultados de búsqueda al fichero que empiecen por «PREFIX»"
 msgid "automatically terminate search after DELAY"
 msgstr "terminar búsqueda automáticamente después de «DELAY»"
 
-#: src/fs/gnunet-search.c:338
+#: src/fs/gnunet-search.c:335
 msgid "automatically terminate search after VALUE results are found"
 msgstr "terminar búsqueda después de «VALUE» resultados encontrados"
 
@@ -3767,197 +3760,197 @@ msgstr "terminar búsqueda después de «VALUE» resultados encontrados"
 msgid "Search GNUnet for files that were published on GNUnet"
 msgstr "Buscar en GNUnet ficheros que han sido publicados en GNUnet"
 
-#: src/fs/gnunet-service-fs.c:375 src/fs/gnunet-service-fs.c:880
+#: src/fs/gnunet-service-fs.c:377 src/fs/gnunet-service-fs.c:882
 msgid "# client searches active"
 msgstr "# búsquedas de clientes activas"
 
-#: src/fs/gnunet-service-fs.c:434
+#: src/fs/gnunet-service-fs.c:436
 msgid "# replies received for local clients"
 msgstr "# respuestas recibidas de clientes locales"
 
-#: src/fs/gnunet-service-fs.c:603
+#: src/fs/gnunet-service-fs.c:605
 msgid "# running average P2P latency (ms)"
 msgstr "# latencia media de P2P en ejecución (ms)"
 
-#: src/fs/gnunet-service-fs.c:655 src/fs/gnunet-service-fs_cp.c:562
+#: src/fs/gnunet-service-fs.c:657 src/fs/gnunet-service-fs_cp.c:564
 msgid "# Loopback routes suppressed"
 msgstr "# Rutas en bucle local eliminadas"
 
-#: src/fs/gnunet-service-fs.c:834
+#: src/fs/gnunet-service-fs.c:836
 msgid "# client searches received"
 msgstr "# búsquedas de clientes recibidas"
 
-#: src/fs/gnunet-service-fs.c:873
+#: src/fs/gnunet-service-fs.c:875
 msgid "# client searches updated (merged content seen list)"
 msgstr ""
 "# búsquedas de clientes actualizadas (contenido unido visto en la lista)"
 
-#: src/fs/gnunet-service-fs.c:1044
+#: src/fs/gnunet-service-fs.c:1040
 #, fuzzy, c-format
 msgid "Hash mismatch trying to index file `%s' which does not have hash `%s'\n"
 msgstr ""
 "Hash no asociado intentando indexar el fichero «%s» que tiene hash «%s»\n"
 
-#: src/fs/gnunet-service-fs.c:1284
+#: src/fs/gnunet-service-fs.c:1280
 #, fuzzy
 msgid "FS service is lacking HOSTKEY configuration setting.  Exiting.\n"
 msgstr ""
 "Al servicio principal le falta la configuración de la clave de máquina "
 "(HOSTKEY).  Saliendo.\n"
 
-#: src/fs/gnunet-service-fs.c:1309 src/hostlist/gnunet-daemon-hostlist.c:353
-#: src/topology/gnunet-daemon-topology.c:1200
+#: src/fs/gnunet-service-fs.c:1305 src/hostlist/gnunet-daemon-hostlist.c:355
+#: src/topology/gnunet-daemon-topology.c:1202
 #, c-format
 msgid "Failed to connect to `%s' service.\n"
 msgstr "Se produjo un fallo al conectar con el servicio «%s».\n"
 
-#: src/fs/gnunet-service-fs_cadet_client.c:368
+#: src/fs/gnunet-service-fs_cadet_client.c:370
 #, fuzzy
 msgid "# replies received via cadet"
 msgstr "# respuestas recibidas vía «stream»"
 
-#: src/fs/gnunet-service-fs_cadet_client.c:382
+#: src/fs/gnunet-service-fs_cadet_client.c:384
 #, fuzzy
 msgid "# replies received via cadet dropped"
 msgstr "# respuestas recibidas omitidas vía «stream»"
 
-#: src/fs/gnunet-service-fs_cadet_server.c:263
+#: src/fs/gnunet-service-fs_cadet_server.c:265
 #, fuzzy
 msgid "# queries received via CADET not answered"
 msgstr "# consultas recibidas vía «stream»"
 
-#: src/fs/gnunet-service-fs_cadet_server.c:318
+#: src/fs/gnunet-service-fs_cadet_server.c:320
 #, fuzzy
 msgid "# Blocks transferred via cadet"
 msgstr "# Bloques transferidos vía «stream»"
 
-#: src/fs/gnunet-service-fs_cadet_server.c:344
+#: src/fs/gnunet-service-fs_cadet_server.c:346
 #, fuzzy
 msgid "# queries received via cadet"
 msgstr "# consultas recibidas vía «stream»"
 
-#: src/fs/gnunet-service-fs_cadet_server.c:386
+#: src/fs/gnunet-service-fs_cadet_server.c:388
 #, fuzzy
 msgid "# cadet client connections rejected"
 msgstr "# conexiones de clientes «stream» rechazadas"
 
-#: src/fs/gnunet-service-fs_cadet_server.c:393
-#: src/fs/gnunet-service-fs_cadet_server.c:433
+#: src/fs/gnunet-service-fs_cadet_server.c:395
+#: src/fs/gnunet-service-fs_cadet_server.c:435
 #, fuzzy
 msgid "# cadet connections active"
 msgstr "# conexiones «stream» activas"
 
-#: src/fs/gnunet-service-fs_cp.c:684
+#: src/fs/gnunet-service-fs_cp.c:685
 msgid "# migration stop messages received"
 msgstr "# mensajes de detención de migración recibidos"
 
-#: src/fs/gnunet-service-fs_cp.c:688
+#: src/fs/gnunet-service-fs_cp.c:689
 #, c-format
 msgid "Migration of content to peer `%s' blocked for %s\n"
 msgstr "Migración de contenido al par «%s» bloqueada durante %s\n"
 
-#: src/fs/gnunet-service-fs_cp.c:721 src/fs/gnunet-service-fs_cp.c:1343
+#: src/fs/gnunet-service-fs_cp.c:722 src/fs/gnunet-service-fs_cp.c:1344
 msgid "# P2P searches active"
 msgstr "# busquedas P2P activas"
 
-#: src/fs/gnunet-service-fs_cp.c:816
+#: src/fs/gnunet-service-fs_cp.c:817
 msgid "# artificial delays introduced (ms)"
 msgstr "# retardos artificiales introducidos (ms)"
 
-#: src/fs/gnunet-service-fs_cp.c:873
+#: src/fs/gnunet-service-fs_cp.c:874
 msgid "# replies dropped due to type mismatch"
 msgstr "# respuestas omitidas debido a incompatibilidad de tipos"
 
-#: src/fs/gnunet-service-fs_cp.c:881
+#: src/fs/gnunet-service-fs_cp.c:882
 msgid "# replies received for other peers"
 msgstr "# respuestas recibidas de otros pares"
 
-#: src/fs/gnunet-service-fs_cp.c:895
+#: src/fs/gnunet-service-fs_cp.c:896
 msgid "# replies dropped due to insufficient cover traffic"
 msgstr "# respuestas omitidas debido a insuficiente tráfico de cobertura"
 
-#: src/fs/gnunet-service-fs_cp.c:942
+#: src/fs/gnunet-service-fs_cp.c:943
 msgid "# P2P searches destroyed due to ultimate reply"
 msgstr "# búsquedas P2P destruidas debido a respuesta definitiva"
 
-#: src/fs/gnunet-service-fs_cp.c:1013
+#: src/fs/gnunet-service-fs_cp.c:1014
 msgid "# requests done for free (low load)"
 msgstr "# peticiones realizadas gratuitamente (baja carga)"
 
-#: src/fs/gnunet-service-fs_cp.c:1038
+#: src/fs/gnunet-service-fs_cp.c:1039
 msgid "# request dropped, priority insufficient"
 msgstr "# peticiones omitidas, prioridad insuficiente"
 
-#: src/fs/gnunet-service-fs_cp.c:1048
+#: src/fs/gnunet-service-fs_cp.c:1049
 msgid "# requests done for a price (normal load)"
 msgstr "# peticiones realizadas por un precio (carga normal)"
 
-#: src/fs/gnunet-service-fs_cp.c:1146
+#: src/fs/gnunet-service-fs_cp.c:1147
 msgid "# requests dropped due to higher-TTL request"
 msgstr "# peticiones omitidas debido a una petición de mayor TTL"
 
-#: src/fs/gnunet-service-fs_cp.c:1203
+#: src/fs/gnunet-service-fs_cp.c:1204
 msgid "# GET requests received (from other peers)"
 msgstr "# peticiones «GET» recibidas (de otros pares)"
 
-#: src/fs/gnunet-service-fs_cp.c:1226
+#: src/fs/gnunet-service-fs_cp.c:1227
 msgid "# requests dropped due to missing reverse route"
 msgstr "# peticiones omitidas debido a falta de ruta inversa"
 
-#: src/fs/gnunet-service-fs_cp.c:1239
+#: src/fs/gnunet-service-fs_cp.c:1240
 #, fuzzy
 msgid "# requests dropped due to full reply queue"
 msgstr "# Mensajes P2P omitidos debido a saturación de la cola"
 
-#: src/fs/gnunet-service-fs_cp.c:1295
+#: src/fs/gnunet-service-fs_cp.c:1296
 msgid "# requests dropped due TTL underflow"
 msgstr "# peticiones omitidas debido a expiración del TTL"
 
-#: src/fs/gnunet-service-fs_cp.c:1339
+#: src/fs/gnunet-service-fs_cp.c:1340
 msgid "# P2P query messages received and processed"
 msgstr "# mensajes de búsqueda P2P recibidos y procesados"
 
-#: src/fs/gnunet-service-fs_cp.c:1706
+#: src/fs/gnunet-service-fs_cp.c:1707
 msgid "# migration stop messages sent"
 msgstr "# mensajes de detención de migración enviados"
 
-#: src/fs/gnunet-service-fs_indexing.c:132
-#: src/fs/gnunet-service-fs_indexing.c:193
+#: src/fs/gnunet-service-fs_indexing.c:134
+#: src/fs/gnunet-service-fs_indexing.c:195
 #, c-format
 msgid "Could not open `%s'.\n"
 msgstr "No se pudo abrir «%s».\n"
 
-#: src/fs/gnunet-service-fs_indexing.c:149
+#: src/fs/gnunet-service-fs_indexing.c:151
 #, c-format
 msgid "Error writing `%s'.\n"
 msgstr "Error escribiendo «%s».\n"
 
-#: src/fs/gnunet-service-fs_indexing.c:251
+#: src/fs/gnunet-service-fs_indexing.c:253
 #, c-format
 msgid "Failed to delete bogus block: %s\n"
 msgstr "Se produjo un fallo al eliminar el bloque defectuoso: %s\n"
 
-#: src/fs/gnunet-service-fs_indexing.c:329
+#: src/fs/gnunet-service-fs_indexing.c:331
 msgid "# index blocks removed: original file inaccessible"
 msgstr "# bloques de índice eliminados: fichero original inaccesible"
 
-#: src/fs/gnunet-service-fs_indexing.c:355
+#: src/fs/gnunet-service-fs_indexing.c:357
 #, c-format
 msgid "Could not access indexed file `%s' (%s) at offset %llu: %s\n"
 msgstr ""
 "No se pudo acceder al fichero indexado «%s» (%s) en el desplazamiento %llu: "
 "%s\n"
 
-#: src/fs/gnunet-service-fs_indexing.c:359
+#: src/fs/gnunet-service-fs_indexing.c:361
 msgid "not indexed"
 msgstr "no indexado"
 
-#: src/fs/gnunet-service-fs_indexing.c:392
+#: src/fs/gnunet-service-fs_indexing.c:394
 #, c-format
 msgid "Indexed file `%s' changed at offset %llu\n"
 msgstr "El fichero indexado «%s» ha cambiado en el desplazamiento %llu\n"
 
-#: src/fs/gnunet-service-fs_indexing.c:516
+#: src/fs/gnunet-service-fs_indexing.c:518
 #, c-format
 msgid ""
 "Index request received for file `%s' is already indexed as `%s'.  Permitting "
@@ -3966,679 +3959,679 @@ msgstr ""
 "La petición de indexado recibida para el fichero «%s» ya está indexada como "
 "«%s».  Se permite de todos modos.\n"
 
-#: src/fs/gnunet-service-fs_pe.c:263
+#: src/fs/gnunet-service-fs_pe.c:265
 msgid "# average retransmission delay (ms)"
 msgstr "# retardo de retransmisión medio (ms)"
 
 # ???
-#: src/fs/gnunet-service-fs_pe.c:425
+#: src/fs/gnunet-service-fs_pe.c:427
 #, fuzzy
 msgid "# delay heap timeout (ms)"
 msgstr "# plazo del retraso del montículo"
 
-#: src/fs/gnunet-service-fs_pe.c:436
+#: src/fs/gnunet-service-fs_pe.c:438
 msgid "# query plans executed"
 msgstr "# planes de búsqueda ejecutados"
 
-#: src/fs/gnunet-service-fs_pe.c:464
+#: src/fs/gnunet-service-fs_pe.c:466
 msgid "# query messages sent to other peers"
 msgstr "# mensajes de búsqueda enviados a otros pares"
 
-#: src/fs/gnunet-service-fs_pe.c:534
+#: src/fs/gnunet-service-fs_pe.c:536
 msgid "# requests merged"
 msgstr "# peticiones unidas"
 
-#: src/fs/gnunet-service-fs_pe.c:544
+#: src/fs/gnunet-service-fs_pe.c:546
 msgid "# requests refreshed"
 msgstr "# peticiones refrescadas"
 
-#: src/fs/gnunet-service-fs_pe.c:604 src/fs/gnunet-service-fs_pe.c:707
-#: src/fs/gnunet-service-fs_pe.c:786
+#: src/fs/gnunet-service-fs_pe.c:606 src/fs/gnunet-service-fs_pe.c:709
+#: src/fs/gnunet-service-fs_pe.c:788
 msgid "# query plan entries"
 msgstr "# entradas de planes de búsqueda"
 
-#: src/fs/gnunet-service-fs_pr.c:328
+#: src/fs/gnunet-service-fs_pr.c:330
 msgid "# Pending requests created"
 msgstr "# Peticiones pendientes creadas"
 
-#: src/fs/gnunet-service-fs_pr.c:428 src/fs/gnunet-service-fs_pr.c:675
+#: src/fs/gnunet-service-fs_pr.c:430 src/fs/gnunet-service-fs_pr.c:677
 msgid "# Pending requests active"
 msgstr "# Peticiones pendientes activas"
 
-#: src/fs/gnunet-service-fs_pr.c:856
+#: src/fs/gnunet-service-fs_pr.c:858
 msgid "# replies received and matched"
 msgstr "# respuestas recibidas y asociadas"
 
-#: src/fs/gnunet-service-fs_pr.c:892
+#: src/fs/gnunet-service-fs_pr.c:894
 msgid "# duplicate replies discarded (bloomfilter)"
 msgstr "# respuestas duplicadas descartadas (bloomfilter)"
 
-#: src/fs/gnunet-service-fs_pr.c:901
+#: src/fs/gnunet-service-fs_pr.c:903
 msgid "# irrelevant replies discarded"
 msgstr "# respuestas irrelevantes descartadas"
 
-#: src/fs/gnunet-service-fs_pr.c:916
+#: src/fs/gnunet-service-fs_pr.c:918
 #, c-format
 msgid "Unsupported block type %u\n"
 msgstr "Tipo de bloque %u no soportado\n"
 
-#: src/fs/gnunet-service-fs_pr.c:933
+#: src/fs/gnunet-service-fs_pr.c:935
 msgid "# results found locally"
 msgstr "# resultados hallados localmente"
 
-#: src/fs/gnunet-service-fs_pr.c:1063
+#: src/fs/gnunet-service-fs_pr.c:1065
 msgid "# Datastore `PUT' failures"
 msgstr "# «PUT» en el almacén de datos fallidos"
 
-#: src/fs/gnunet-service-fs_pr.c:1091
+#: src/fs/gnunet-service-fs_pr.c:1093
 msgid "# storage requests dropped due to high load"
 msgstr "# peticiones de almacenamiento omitidas debido a alta carga"
 
-#: src/fs/gnunet-service-fs_pr.c:1129
+#: src/fs/gnunet-service-fs_pr.c:1131
 msgid "# Replies received from DHT"
 msgstr "# Respuestas recibidas de la DHT"
 
-#: src/fs/gnunet-service-fs_pr.c:1260
+#: src/fs/gnunet-service-fs_pr.c:1262
 #, fuzzy
 msgid "# Replies received from CADET"
 msgstr "# Respuestas recibidas de la DHT"
 
-#: src/fs/gnunet-service-fs_pr.c:1312
+#: src/fs/gnunet-service-fs_pr.c:1314
 #, c-format
 msgid "Datastore lookup already took %s!\n"
 msgstr "¡La búsqueda en el almacén de datos toma %s!\n"
 
-#: src/fs/gnunet-service-fs_pr.c:1333
+#: src/fs/gnunet-service-fs_pr.c:1335
 #, c-format
 msgid "On-demand lookup already took %s!\n"
 msgstr "¡La búsqueda en bajo demanda toma %s!\n"
 
-#: src/fs/gnunet-service-fs_pr.c:1393
+#: src/fs/gnunet-service-fs_pr.c:1395
 msgid "# requested DBLOCK or IBLOCK not found"
 msgstr "# «DBLOCK» o «IBLOCK» pedido no encontrado"
 
-#: src/fs/gnunet-service-fs_pr.c:1452
+#: src/fs/gnunet-service-fs_pr.c:1454
 msgid "# Datastore lookups concluded (error queueing)"
 msgstr "# Búsquedas en el almacén de datos finalizadas (error encolando)"
 
-#: src/fs/gnunet-service-fs_pr.c:1507
+#: src/fs/gnunet-service-fs_pr.c:1509
 msgid "# Datastore lookups concluded (no results)"
 msgstr "# Búsquedas en el almacén de datos finalizadas (sin resultados)"
 
-#: src/fs/gnunet-service-fs_pr.c:1522
+#: src/fs/gnunet-service-fs_pr.c:1524
 msgid "# Datastore lookups concluded (seen all)"
 msgstr "# Búsquedas en el almacén de datos finalizadas (vistos todos)"
 
-#: src/fs/gnunet-service-fs_pr.c:1546
+#: src/fs/gnunet-service-fs_pr.c:1548
 msgid "# Datastore lookups aborted (more than MAX_RESULTS)"
 msgstr "# Búsquedas en el almacén de datos finalizadas (más de «MAX_RESULTS»)"
 
-#: src/fs/gnunet-service-fs_pr.c:1560
+#: src/fs/gnunet-service-fs_pr.c:1562
 msgid "# on-demand blocks matched requests"
 msgstr "# peticiones asociadas de bloques bajo demanda"
 
-#: src/fs/gnunet-service-fs_pr.c:1581
+#: src/fs/gnunet-service-fs_pr.c:1583
 msgid "# on-demand lookups performed successfully"
 msgstr "# búsquedas satisfactorias de bloques bajo demanda"
 
-#: src/fs/gnunet-service-fs_pr.c:1586
+#: src/fs/gnunet-service-fs_pr.c:1588
 msgid "# on-demand lookups failed"
 msgstr "# búsquedas fallidas de bloques bajo demanda"
 
-#: src/fs/gnunet-service-fs_pr.c:1624
+#: src/fs/gnunet-service-fs_pr.c:1626
 msgid "# Datastore lookups concluded (found last result)"
 msgstr ""
 "# Búsquedas en el almacén de datos finalizadas (encontrado último resultado)"
 
-#: src/fs/gnunet-service-fs_pr.c:1637
+#: src/fs/gnunet-service-fs_pr.c:1639
 msgid "# Datastore lookups concluded (load too high)"
 msgstr "# Búsquedas en el almacén de datos finalizadas (carga demasiado alta)"
 
-#: src/fs/gnunet-service-fs_pr.c:1691
+#: src/fs/gnunet-service-fs_pr.c:1693
 msgid "# Datastore lookups initiated"
 msgstr "# Búsquedas en el almacén de datos iniciadas"
 
-#: src/fs/gnunet-service-fs_pr.c:1747
+#: src/fs/gnunet-service-fs_pr.c:1749
 msgid "# GAP PUT messages received"
 msgstr "# Mensajes «GAP PUT» recibidos"
 
-#: src/fs/gnunet-service-fs_push.c:644
+#: src/fs/gnunet-service-fs_push.c:646
 msgid "time required, content pushing disabled"
 msgstr "se requiere tiempo, publicación de contenido deshabilitada"
 
-#: src/fs/gnunet-unindex.c:87
+#: src/fs/gnunet-unindex.c:89
 #, c-format
 msgid "Unindexing at %llu/%llu (%s remaining)\n"
 msgstr "Desindexado en %llu/%llu (quedan %s)\n"
 
-#: src/fs/gnunet-unindex.c:93
+#: src/fs/gnunet-unindex.c:95
 #, c-format
 msgid "Error unindexing: %s.\n"
 msgstr "Error desindexando: %s.\n"
 
-#: src/fs/gnunet-unindex.c:98
+#: src/fs/gnunet-unindex.c:100
 msgid "Unindexing done.\n"
 msgstr "Desindexado finalizado.\n"
 
-#: src/fs/gnunet-unindex.c:127
+#: 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:144
+#: 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:176
+#: 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»."
 
-#: src/gns/gns_tld_api.c:274
+#: src/gns/gns_tld_api.c:348
 msgid "Expected a base32-encoded public zone key\n"
 msgstr ""
 
-#: src/gns/gnunet-bcd.c:125
+#: src/gns/gnunet-bcd.c:127
 #, fuzzy, c-format
 msgid "Refusing `%s' request to HTTP server\n"
 msgstr "Rechazando petición «%s» al servidor de listas de máquinas\n"
 
-#: src/gns/gnunet-bcd.c:355
+#: src/gns/gnunet-bcd.c:357
 #, fuzzy, c-format
 msgid "Invalid port number %u.  Exiting.\n"
 msgstr "Número de puerto %llu no válido.  Saliendo.\n"
 
-#: src/gns/gnunet-bcd.c:360
+#: src/gns/gnunet-bcd.c:362
 #, fuzzy, c-format
 msgid "Businesscard HTTP server starts on %u\n"
 msgstr "Servicio de listas de máquinas arranca en %s:%llu\n"
 
-#: src/gns/gnunet-bcd.c:374
+#: src/gns/gnunet-bcd.c:376
 #, fuzzy, c-format
 msgid "Could not start businesscard HTTP server on port %u\n"
 msgstr ""
 "No se pudo arrancar un servidor de listas de máquinas HTTP en el puerto %u\n"
 
-#: src/gns/gnunet-bcd.c:521
+#: src/gns/gnunet-bcd.c:523
 msgid "Run HTTP serve on port PORT (default is 8888)"
 msgstr ""
 
-#: src/gns/gnunet-bcd.c:534
+#: src/gns/gnunet-bcd.c:536
 msgid "GNUnet HTTP server to create business cards"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:201
+#: src/gns/gnunet-dns2gns.c:203
 msgid "Failed to pack DNS response into UDP packet!\n"
 msgstr ""
 "¡Se produjo un fallo al empaquetar una respuesta DNS en un paquete UDP!\n"
 
-#: src/gns/gnunet-dns2gns.c:403
+#: src/gns/gnunet-dns2gns.c:405
 #, c-format
 msgid "Cannot parse DNS request from %s\n"
 msgstr "No se puede procesar la petición DNS de %s\n"
 
-#: src/gns/gnunet-dns2gns.c:419
+#: src/gns/gnunet-dns2gns.c:421
 #, c-format
 msgid "Received malformed DNS request from %s\n"
 msgstr "Recibida petición DNS mal formada de %s\n"
 
-#: src/gns/gnunet-dns2gns.c:427
+#: src/gns/gnunet-dns2gns.c:429
 #, c-format
 msgid "Received unsupported DNS request from %s\n"
 msgstr "Recibida petición DNS no soportada de %s\n"
 
-#: src/gns/gnunet-dns2gns.c:586
+#: src/gns/gnunet-dns2gns.c:588
 #, fuzzy
 msgid "No DNS server specified!\n"
 msgstr "¡Ninguna palabra clave especificada!\n"
 
-#: src/gns/gnunet-dns2gns.c:686
+#: src/gns/gnunet-dns2gns.c:688
 msgid "IP of recursive DNS resolver to use (required)"
 msgstr "IP del resolvedor recursivo DNS a usar (requerido)"
 
-#: src/gns/gnunet-dns2gns.c:691
+#: src/gns/gnunet-dns2gns.c:693
 #, fuzzy
 msgid "UDP port to listen on for inbound DNS requests; default: 2853"
 msgstr ""
 "Puerto UDP en el que escuchar para peticiones DNS entrantes; predeterminado: "
 "53"
 
-#: src/gns/gnunet-dns2gns.c:708
+#: src/gns/gnunet-dns2gns.c:710
 msgid "GNUnet DNS-to-GNS proxy (a DNS server)"
 msgstr "Pasarela GNUnet DNS-a-GNS (un servidor DNS)"
 
-#: src/gns/gnunet-gns-benchmark.c:580
+#: src/gns/gnunet-gns-benchmark.c:582
 msgid "how long to wait between queries"
 msgstr ""
 
-#: src/gns/gnunet-gns-benchmark.c:585
+#: src/gns/gnunet-gns-benchmark.c:587
 #, fuzzy
 msgid "how long to wait for an answer"
 msgstr "¿cuánto tiempo se debe ejecutar? 0 = para siempre"
 
-#: src/gns/gnunet-gns-benchmark.c:589
+#: src/gns/gnunet-gns-benchmark.c:591
 msgid "look for GNS2DNS records instead of ANY"
 msgstr ""
 
-#: src/gns/gnunet-gns.c:197
+#: src/gns/gnunet-gns.c:199
 #, c-format
 msgid "Invalid typename specified, assuming `ANY'\n"
 msgstr ""
 
-#: src/gns/gnunet-gns.c:231
+#: src/gns/gnunet-gns.c:233
 msgid "Lookup a record for the given name"
 msgstr "Buscar el registro para el nombre dado"
 
-#: src/gns/gnunet-gns.c:236
+#: src/gns/gnunet-gns.c:238
 msgid "Specify the type of the record to lookup"
 msgstr "Especificar el tipo del registro a buscar"
 
-#: src/gns/gnunet-gns.c:240
+#: src/gns/gnunet-gns.c:242
 msgid "No unneeded output"
 msgstr "Sin salida innecesaria"
 
-#: src/gns/gnunet-gns.c:256
+#: src/gns/gnunet-gns.c:258
 #, fuzzy
 msgid "GNUnet GNS resolver tool"
 msgstr "Herramienta de acceso GNUnet GNS"
 
-#: src/gns/gnunet-gns-helper-service-w32.c:600
+#: src/gns/gnunet-gns-helper-service-w32.c:602
 msgid "Not ready to process requests, lacking ego data\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-helper-service-w32.c:699
+#: src/gns/gnunet-gns-helper-service-w32.c:701
 msgid ""
 "Ego for `gns-master' not found, cannot perform lookup.  Did you run gnunet-"
 "gns-import.sh?\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-helper-service-w32.c:737
+#: src/gns/gnunet-gns-helper-service-w32.c:739
 #, fuzzy, c-format
 msgid "Failed to connect to identity service\n"
 msgstr "Fallo al conectar a gnunetd.\n"
 
-#: src/gns/gnunet-gns-import.c:450
+#: src/gns/gnunet-gns-import.c:452
 msgid "This program will import some GNS authorities into your GNS namestore."
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:110
-#: src/hostlist/gnunet-daemon-hostlist_client.c:533
-#: src/hostlist/gnunet-daemon-hostlist_client.c:751
-#: src/hostlist/gnunet-daemon-hostlist_client.c:757
-#: src/hostlist/gnunet-daemon-hostlist_client.c:809
-#: src/hostlist/gnunet-daemon-hostlist_client.c:818
-#: src/hostlist/gnunet-daemon-hostlist_client.c:929
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1024
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1029
-#: src/transport/plugin_transport_http_client.c:596
-#: src/transport/plugin_transport_http_client.c:614
+#: src/gns/gnunet-gns-proxy.c:118
+#: src/hostlist/gnunet-daemon-hostlist_client.c:535
+#: src/hostlist/gnunet-daemon-hostlist_client.c:753
+#: src/hostlist/gnunet-daemon-hostlist_client.c:759
+#: src/hostlist/gnunet-daemon-hostlist_client.c:811
+#: src/hostlist/gnunet-daemon-hostlist_client.c:820
+#: src/hostlist/gnunet-daemon-hostlist_client.c:931
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1026
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1031
+#: src/transport/plugin_transport_http_client.c:598
+#: src/transport/plugin_transport_http_client.c:616
 #, c-format
 msgid "%s failed at %s:%d: `%s'\n"
 msgstr "%s falló en %s:%d: «%s».\n"
 
-#: src/gns/gnunet-gns-proxy.c:960
+#: src/gns/gnunet-gns-proxy.c:980
 #, fuzzy, c-format
 msgid "Unsupported CURL TLS backend %d\n"
 msgstr "Tipo de bloque %u no soportado\n"
 
-#: src/gns/gnunet-gns-proxy.c:985
+#: src/gns/gnunet-gns-proxy.c:1005
 #, fuzzy, c-format
 msgid "Failed to fetch CN from cert: %s\n"
 msgstr "Se produjo un fallo al mandar la petición DNS a %s\n"
 
-#: src/gns/gnunet-gns-proxy.c:1008
+#: src/gns/gnunet-gns-proxy.c:1026
 #, fuzzy, c-format
 msgid "Failed to initialize DANE: %s\n"
 msgstr "¡No se puede inicializar el resolvedor!\n"
 
-#: src/gns/gnunet-gns-proxy.c:1021
+#: src/gns/gnunet-gns-proxy.c:1041
 #, fuzzy, c-format
 msgid "Failed to parse DANE record: %s\n"
 msgstr "Se produjo un fallo al procesar la petición DNS.  Omitiendo.\n"
 
-#: src/gns/gnunet-gns-proxy.c:1036
+#: src/gns/gnunet-gns-proxy.c:1056
 #, fuzzy, c-format
 msgid "Failed to verify TLS connection using DANE: %s\n"
 msgstr "Se produjo un fallo al borrar el fichero de configuración %s\n"
 
-#: src/gns/gnunet-gns-proxy.c:1046
+#: src/gns/gnunet-gns-proxy.c:1066
 #, c-format
 msgid "Failed DANE verification failed with GnuTLS verify status code: %u\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:1070
+#: src/gns/gnunet-gns-proxy.c:1090
 #, c-format
 msgid "TLS certificate subject name (%s) does not match `%s': %d\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:1200
+#: src/gns/gnunet-gns-proxy.c:1221
 #, c-format
 msgid "Cookie domain `%s' supplied by server is invalid\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:2062
+#: src/gns/gnunet-gns-proxy.c:2121
 #, fuzzy, c-format
 msgid "Unsupported HTTP method `%s'\n"
 msgstr "Tipo no soportado «%s»\n"
 
-#: src/gns/gnunet-gns-proxy.c:2583
+#: src/gns/gnunet-gns-proxy.c:2642
 #, c-format
 msgid "Unable to import private key from file `%s'\n"
 msgstr "No se pudo importar la clave privada del fichero «%s»\n"
 
-#: src/gns/gnunet-gns-proxy.c:2615
+#: src/gns/gnunet-gns-proxy.c:2674
 #, fuzzy, c-format
 msgid "Unable to import certificate from `%s'\n"
 msgstr "No se pudo importar el certificado %s\n"
 
-#: src/gns/gnunet-gns-proxy.c:2814
+#: src/gns/gnunet-gns-proxy.c:2875
 #, fuzzy, c-format
 msgid "Failed to start HTTPS server for `%s'\n"
 msgstr "Se produjo un fallo al iniciar el servidor HTTP\n"
 
-#: src/gns/gnunet-gns-proxy.c:2839 src/rest/gnunet-rest-server.c:656
+#: src/gns/gnunet-gns-proxy.c:2897 src/rest/gnunet-rest-server.c:658
 #, fuzzy
 msgid "Failed to pass client to MHD\n"
 msgstr "Se produjo un fallo al conectar con GNS\n"
 
-#: src/gns/gnunet-gns-proxy.c:3169
+#: src/gns/gnunet-gns-proxy.c:3233
 #, fuzzy, c-format
 msgid "Unsupported socks version %d\n"
 msgstr "Tipo de bloque %u no soportado\n"
 
-#: src/gns/gnunet-gns-proxy.c:3198
+#: src/gns/gnunet-gns-proxy.c:3262
 #, fuzzy, c-format
 msgid "Unsupported socks command %d\n"
 msgstr "Tipo de bloque %u no soportado\n"
 
-#: src/gns/gnunet-gns-proxy.c:3280
+#: src/gns/gnunet-gns-proxy.c:3345
 #, fuzzy, c-format
 msgid "Unsupported socks address type %d\n"
 msgstr "Tipo de bloque %u no soportado\n"
 
-#: src/gns/gnunet-gns-proxy.c:3570
+#: src/gns/gnunet-gns-proxy.c:3635
 #, fuzzy, c-format
 msgid "Failed to load X.509 key and certificate from `%s'\n"
 msgstr "Se produjo un fallo al leer la lista de amigos de «%s»\n"
 
-#: src/gns/gnunet-gns-proxy.c:3698
+#: src/gns/gnunet-gns-proxy.c:3763
 msgid "listen on specified port (default: 7777)"
 msgstr "escuchar en el puerto especificado (predeterminado: 7777)"
 
-#: src/gns/gnunet-gns-proxy.c:3703
+#: src/gns/gnunet-gns-proxy.c:3768
 msgid "pem file to use as CA"
 msgstr "fichero pem para usar como autoridad de certificación (CA)"
 
-#: src/gns/gnunet-gns-proxy.c:3707
+#: src/gns/gnunet-gns-proxy.c:3772
 msgid "disable use of IPv6"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3733
+#: src/gns/gnunet-gns-proxy.c:3798
 msgid "GNUnet GNS proxy"
 msgstr "Proxy GNUnet GNS"
 
-#: src/gns/gnunet-service-gns.c:511
+#: src/gns/gnunet-service-gns.c:506
 #, fuzzy
 msgid "Properly base32-encoded public key required"
 msgstr "Tipo requerido\n"
 
-#: src/gns/gnunet-service-gns.c:547
+#: src/gns/gnunet-service-gns.c:542
 #, fuzzy
 msgid "Failed to connect to the namecache!\n"
 msgstr "¡Se produjo un fallo al conectar con el almacén de nombres!\n"
 
-#: src/gns/gnunet-service-gns.c:566
-#: src/zonemaster/gnunet-service-zonemaster.c:873
-#: src/zonemaster/gnunet-service-zonemaster-monitor.c:438
+#: src/gns/gnunet-service-gns.c:561
+#: src/zonemaster/gnunet-service-zonemaster.c:875
+#: src/zonemaster/gnunet-service-zonemaster-monitor.c:440
 msgid "Could not connect to DHT!\n"
 msgstr "¡No se pudo conectar a la DHT!\n"
 
-#: src/gns/gnunet-service-gns_interceptor.c:257
+#: src/gns/gnunet-service-gns_interceptor.c:259
 #, fuzzy
 msgid "Error converting GNS response to DNS response!\n"
 msgstr "¡Se produjo un error al convertir los argumentos a una URI!\n"
 
-#: src/gns/gnunet-service-gns_interceptor.c:364
+#: src/gns/gnunet-service-gns_interceptor.c:366
 #, fuzzy
 msgid "Failed to connect to the DNS service!\n"
 msgstr "¡Se produjo un fallo al conectar con el servicio GNS!\n"
 
-#: src/gns/gnunet-service-gns_resolver.c:717
+#: src/gns/gnunet-service-gns_resolver.c:700
 #, fuzzy, c-format
 msgid "Protocol `%s' unknown, skipping labels.\n"
 msgstr "Módulo «%s» no encontrado\n"
 
-#: src/gns/gnunet-service-gns_resolver.c:728
+#: src/gns/gnunet-service-gns_resolver.c:711
 #, c-format
 msgid "Service `%s' unknown for protocol `%s', skipping labels.\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:931
+#: src/gns/gnunet-service-gns_resolver.c:914
 #, fuzzy
 msgid "Failed to parse DNS response\n"
 msgstr "Se produjo un fallo al procesar la petición DNS.  Omitiendo.\n"
 
-#: src/gns/gnunet-service-gns_resolver.c:1112
+#: src/gns/gnunet-service-gns_resolver.c:1095
 #, c-format
 msgid "Skipping record of unsupported type %d\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:1382
+#: src/gns/gnunet-service-gns_resolver.c:1365
 #, fuzzy, c-format
 msgid "VPN returned empty result for `%s'\n"
 msgstr "El ATS devolvió resultados para %u direcciones\n"
 
-#: src/gns/gnunet-service-gns_resolver.c:1823
+#: src/gns/gnunet-service-gns_resolver.c:1806
 #, c-format
 msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:1866
+#: src/gns/gnunet-service-gns_resolver.c:1849
 #, fuzzy, c-format
 msgid "GNS lookup failed (zero records found for `%s')\n"
 msgstr "No se han encontrado ficheros en «%s»\n"
 
-#: src/gns/gnunet-service-gns_resolver.c:2281
+#: src/gns/gnunet-service-gns_resolver.c:2264
 msgid "GNS lookup recursion failed (no delegation record found)\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:2304
+#: src/gns/gnunet-service-gns_resolver.c:2287
 #, fuzzy, c-format
 msgid "Failed to cache GNS resolution: %s\n"
 msgstr "Se produjo un fallo al mandar la petición DNS a %s\n"
 
-#: src/gns/gnunet-service-gns_resolver.c:2467
+#: src/gns/gnunet-service-gns_resolver.c:2450
 #, c-format
 msgid "GNS namecache returned empty result for `%s'\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:2602
+#: src/gns/gnunet-service-gns_resolver.c:2585
 #, c-format
 msgid "Zone %s was revoked, resolution fails\n"
 msgstr ""
 
-#: src/gns/plugin_gnsrecord_gns.c:179
+#: src/gns/plugin_gnsrecord_gns.c:181
 #, c-format
 msgid "Unable to parse PKEY record `%s'\n"
 msgstr "No se pudo procesar el registro PKEY «%s»\n"
 
-#: src/gns/plugin_gnsrecord_gns.c:210
+#: src/gns/plugin_gnsrecord_gns.c:212
 #, fuzzy, c-format
 msgid "Unable to parse GNS2DNS record `%s'\n"
 msgstr "No se pudo procesar el registro SOA «%s»\n"
 
-#: src/gns/plugin_gnsrecord_gns.c:231
+#: src/gns/plugin_gnsrecord_gns.c:233
 #, fuzzy, c-format
 msgid "Failed to serialize GNS2DNS record with value `%s'\n"
 msgstr ""
 "Se produjo un fallo al escribir el directorio con los resultados de búsqueda "
 "de «%s»\n"
 
-#: src/gns/plugin_gnsrecord_gns.c:256
+#: src/gns/plugin_gnsrecord_gns.c:258
 #, c-format
 msgid "Unable to parse VPN record string `%s'\n"
 msgstr "No se pudo procesar la cadena de registro VPN «%s»\n"
 
-#: src/gns/plugin_gnsrecord_gns.c:292
+#: src/gns/plugin_gnsrecord_gns.c:294
 #, fuzzy, c-format
 msgid "Unable to parse BOX record string `%s'\n"
 msgstr "No se pudo procesar la cadena de registro VPN «%s»\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:357
+#: 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:378
+#: src/gnsrecord/plugin_gnsrecord_dns.c:380
 #, fuzzy, c-format
 msgid "Failed to serialize NS record with value `%s'\n"
 msgstr ""
 "Se produjo un fallo al escribir el directorio con los resultados de búsqueda "
 "de «%s»\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:400
+#: src/gnsrecord/plugin_gnsrecord_dns.c:402
 #, fuzzy, c-format
 msgid "Failed to serialize CNAME record with value `%s'\n"
 msgstr ""
 "Se produjo un fallo al escribir el directorio con los resultados de búsqueda "
 "de «%s»\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:485
+#: src/gnsrecord/plugin_gnsrecord_dns.c:487
 #, fuzzy, c-format
 msgid "Failed to serialize CERT record with %u bytes\n"
 msgstr ""
 "Se produjo un fallo al escribir el directorio con los resultados de búsqueda "
 "de «%s»\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:521
+#: src/gnsrecord/plugin_gnsrecord_dns.c:523
 #, 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:540
+#: src/gnsrecord/plugin_gnsrecord_dns.c:542
 #, 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:563
+#: src/gnsrecord/plugin_gnsrecord_dns.c:565
 #, fuzzy, c-format
 msgid "Failed to serialize PTR record with value `%s'\n"
 msgstr ""
 "Se produjo un fallo al escribir el directorio con los resultados de búsqueda "
 "de «%s»\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:586
+#: src/gnsrecord/plugin_gnsrecord_dns.c:588
 #, 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:601
+#: src/gnsrecord/plugin_gnsrecord_dns.c:603
 #, fuzzy, c-format
 msgid "Failed to serialize MX record with hostname `%s'\n"
 msgstr ""
 "Se produjo un fallo al escribir el directorio con los resultados de búsqueda "
 "de «%s»\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:628
+#: src/gnsrecord/plugin_gnsrecord_dns.c:630
 #, 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:644
+#: src/gnsrecord/plugin_gnsrecord_dns.c:646
 #, fuzzy, c-format
 msgid "Failed to serialize SRV record with target `%s'\n"
 msgstr ""
 "Se produjo un fallo al escribir el directorio con los resultados de búsqueda "
 "de «%s»\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:661
+#: src/gnsrecord/plugin_gnsrecord_dns.c:663
 #, 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:685
-#: src/gnsrecord/plugin_gnsrecord_dns.c:701
+#: src/gnsrecord/plugin_gnsrecord_dns.c:687
+#: src/gnsrecord/plugin_gnsrecord_dns.c:703
 #, c-format
 msgid "Unable to parse TLSA record string `%s'\n"
 msgstr "No se pudo procesar la cadena de registro TLSA «%s»\n"
 
-#: src/hello/gnunet-hello.c:124
+#: src/hello/gnunet-hello.c:126
 msgid "Call with name of HELLO file to modify.\n"
 msgstr "Llamar con el nombre del fichero «HELLO» para modificar.\n"
 
-#: src/hello/gnunet-hello.c:130
+#: src/hello/gnunet-hello.c:132
 #, c-format
 msgid "Error accessing file `%s': %s\n"
 msgstr "Error accediendo al fichero «%s»: %s\n"
 
-#: src/hello/gnunet-hello.c:138
+#: src/hello/gnunet-hello.c:140
 #, c-format
 msgid "File `%s' is too big to be a HELLO\n"
 msgstr "El fichero «%s» es demasiado grande para ser un «HELLO»\n"
 
-#: src/hello/gnunet-hello.c:145
+#: src/hello/gnunet-hello.c:147
 #, c-format
 msgid "File `%s' is too small to be a HELLO\n"
 msgstr "El fichero «%s» es demasiado pequeño para ser un «HELLO»\n"
 
-#: src/hello/gnunet-hello.c:155 src/hello/gnunet-hello.c:196
+#: src/hello/gnunet-hello.c:157 src/hello/gnunet-hello.c:198
 #, c-format
 msgid "Error opening file `%s': %s\n"
 msgstr "Error abriendo fichero «%s»: %s\n"
 
-#: src/hello/gnunet-hello.c:172
+#: src/hello/gnunet-hello.c:174
 #, c-format
 msgid "Did not find well-formed HELLO in file `%s'\n"
 msgstr "No se encontró un «HELLO» bien formado en el fichero «%s»\n"
 
-#: src/hello/gnunet-hello.c:208
+#: src/hello/gnunet-hello.c:210
 #, c-format
 msgid "Error writing HELLO to file `%s': %s\n"
 msgstr "Error escribiendo «HELLO» al fichero «%s»: %s\n"
 
-#: src/hello/gnunet-hello.c:217
+#: src/hello/gnunet-hello.c:219
 #, c-format
 msgid "Modified %u addresses, wrote %u bytes\n"
 msgstr ""
 
-#: src/hello/hello.c:1108
+#: src/hello/hello.c:1110
 msgid "Failed to parse HELLO message: missing expiration time\n"
 msgstr ""
 "Se produjo un fallo al procesar un mensaje «HELLO»: falta el tiempo de "
 "expiración\n"
 
-#: src/hello/hello.c:1117
+#: src/hello/hello.c:1119
 msgid "Failed to parse HELLO message: invalid expiration time\n"
 msgstr ""
 "Se produjo un fallo al procesar un mensaje «HELLO»: tiempo de expiración no "
 "válido\n"
 
-#: src/hello/hello.c:1127
+#: src/hello/hello.c:1129
 msgid "Failed to parse HELLO message: malformed\n"
 msgstr "Se produjo un fallo al procesar un mensaje «HELLO»: mal formado\n"
 
-#: src/hello/hello.c:1138
+#: src/hello/hello.c:1140
 msgid "Failed to parse HELLO message: missing transport plugin\n"
 msgstr ""
 "Se produjo un fallo al procesar un mensaje «HELLO»: falta el módulo de "
 "transporte\n"
 
-#: src/hello/hello.c:1156
+#: src/hello/hello.c:1158
 #, fuzzy, c-format
 msgid "Plugin `%s' not found, skipping address\n"
 msgstr "Módulo «%s» no encontrado\n"
 
-#: src/hello/hello.c:1164
+#: src/hello/hello.c:1166
 #, c-format
 msgid "Plugin `%s' does not support URIs yet\n"
 msgstr "El módulo «%s» no soporta URI todavía\n"
 
-#: src/hello/hello.c:1179
+#: src/hello/hello.c:1181
 #, c-format
 msgid "Failed to parse `%s' as an address for plugin `%s'\n"
 msgstr ""
 "Se produjo un fallo al procesar «%s» como una dirección para el módulo «%s»\n"
 
-#: src/hostlist/gnunet-daemon-hostlist.c:314
+#: src/hostlist/gnunet-daemon-hostlist.c:316
 msgid ""
 "None of the functions for the hostlist daemon were enabled.  I have no "
 "reason to run!\n"
@@ -4646,11 +4639,11 @@ msgstr ""
 "Ninguna de las funciones para el demonio de listas de máquinas fue "
 "activada.  ¡No tengo razón para ejecutarme!\n"
 
-#: src/hostlist/gnunet-daemon-hostlist.c:374
+#: src/hostlist/gnunet-daemon-hostlist.c:376
 msgid "advertise our hostlist to other peers"
 msgstr "anuncia nuestra lista de máquinas a otros pares"
 
-#: src/hostlist/gnunet-daemon-hostlist.c:379
+#: src/hostlist/gnunet-daemon-hostlist.c:381
 msgid ""
 "bootstrap using hostlists (it is highly recommended that you always use this "
 "option)"
@@ -4658,49 +4651,49 @@ msgstr ""
 "realizar inicialización usando listas de máquinas (es altamente recomendable "
 "que siempre se use esta opción)"
 
-#: src/hostlist/gnunet-daemon-hostlist.c:383
+#: src/hostlist/gnunet-daemon-hostlist.c:385
 msgid "enable learning about hostlist servers from other peers"
 msgstr ""
 "habilitar aprendizaje de servidores de listas de máquinas de otros pares"
 
-#: src/hostlist/gnunet-daemon-hostlist.c:388
+#: src/hostlist/gnunet-daemon-hostlist.c:390
 msgid "provide a hostlist server"
 msgstr "proveer un servidor de listas de máquinas"
 
-#: src/hostlist/gnunet-daemon-hostlist.c:404
+#: src/hostlist/gnunet-daemon-hostlist.c:406
 msgid "GNUnet hostlist server and client"
 msgstr "Servidor y cliente GNUnet de listas de máquinas"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:347
+#: src/hostlist/gnunet-daemon-hostlist_client.c:349
 msgid "# bytes downloaded from hostlist servers"
 msgstr "# bytes descargados de servidores de listas de máquinas"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:368
-#: src/hostlist/gnunet-daemon-hostlist_client.c:401
+#: src/hostlist/gnunet-daemon-hostlist_client.c:370
+#: src/hostlist/gnunet-daemon-hostlist_client.c:403
 msgid "# invalid HELLOs downloaded from hostlist servers"
 msgstr "# «HELLO» no válidos descargados de servidores de listas de máquinas"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:371
-#: src/hostlist/gnunet-daemon-hostlist_client.c:404
+#: src/hostlist/gnunet-daemon-hostlist_client.c:373
+#: src/hostlist/gnunet-daemon-hostlist_client.c:406
 #, c-format
 msgid "Invalid `%s' message received from hostlist at `%s'\n"
 msgstr "Mensaje «%s» no válido recibido de la lista de máquinas en «%s»\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:389
+#: src/hostlist/gnunet-daemon-hostlist_client.c:391
 msgid "# valid HELLOs downloaded from hostlist servers"
 msgstr "# «HELLO» válidos descargados de servidores de listas de máquinas"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:659
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1405
+#: src/hostlist/gnunet-daemon-hostlist_client.c:661
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1407
 msgid "# advertised hostlist URIs"
 msgstr "# URI de listas de máquinas anunciadas"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:689
+#: src/hostlist/gnunet-daemon-hostlist_client.c:691
 #, c-format
 msgid "# advertised URI `%s' downloaded"
 msgstr "# URI anunciadas «%s» descargadas"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:732
+#: src/hostlist/gnunet-daemon-hostlist_client.c:734
 #, c-format
 msgid ""
 "Advertised hostlist with URI `%s' could not be downloaded. Advertised URI "
@@ -4709,120 +4702,120 @@ msgstr ""
 "Lista de máquinas anunciada con la URI «%s» no pudo ser descargada. La URI "
 "anunciada es descartada.\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:860
+#: src/hostlist/gnunet-daemon-hostlist_client.c:862
 #, c-format
 msgid "Timeout trying to download hostlist from `%s'\n"
 msgstr ""
 "Finalizado el plazo mientras se intentaba bajar lista de máquinas de «%s»\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:874
+#: src/hostlist/gnunet-daemon-hostlist_client.c:876
 #, c-format
 msgid "Download limit of %u bytes exceeded, stopping download\n"
 msgstr "Límite de descarga de %u bytes superado, parando descarga\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:894
+#: src/hostlist/gnunet-daemon-hostlist_client.c:896
 #, c-format
 msgid "Download of hostlist from `%s' failed: `%s'\n"
 msgstr "Descarga de lista de máquinas de «%s» fallida: «%s»\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:900
+#: src/hostlist/gnunet-daemon-hostlist_client.c:902
 #, c-format
 msgid "Download of hostlist `%s' completed.\n"
 msgstr "Descarga de lista de máquinas «%s» completada.\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:908
+#: src/hostlist/gnunet-daemon-hostlist_client.c:910
 #, c-format
 msgid "Adding successfully tested hostlist `%s' datastore.\n"
 msgstr "Añadiendo el almacén de datos de la lista de máquinas probada «%s».\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:961
+#: src/hostlist/gnunet-daemon-hostlist_client.c:963
 #, c-format
 msgid "Bootstrapping using hostlist at `%s'.\n"
 msgstr "Inicializando usando lista de máquinas en «%s».\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:969
+#: src/hostlist/gnunet-daemon-hostlist_client.c:971
 msgid "# hostlist downloads initiated"
 msgstr "# descargas de listas de máquinas iniciadas"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1096
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1663
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1098
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1665
 msgid "# milliseconds between hostlist downloads"
 msgstr "# milisegundos entre descargas de listas de máquinas"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1105
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1107
 #, c-format
 msgid "Have %u/%u connections.  Will consider downloading hostlist in %s\n"
 msgstr ""
 "Hay %u/%u conexiones.  Se considerará descargar una lista de máquinas en %s\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1164
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1185
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1166
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1187
 msgid "# active connections"
 msgstr "# conexiones activas"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1351
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1353
 #, c-format
 msgid "Loading saved hostlist entries from file `%s' \n"
 msgstr "Cargando entradas guardadas de listas de máquinas del fichero «%s»\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1356
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1358
 #, c-format
 msgid "Hostlist file `%s' does not exist\n"
 msgstr "El fichero de listas de máquinas «%s» no existe\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1365
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1367
 #, c-format
 msgid "Could not open file `%s' for reading to load hostlists: %s\n"
 msgstr ""
 "No se pudo abrir el fichero «%s» en modo lectura para cargar las listas de "
 "máquinas: %s\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1399
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1401
 #, c-format
 msgid "%u hostlist URIs loaded from file\n"
 msgstr "%u URI de listas de máquinas cargadas del fichero\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1402
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1404
 msgid "# hostlist URIs read from file"
 msgstr "# URI de listas de máquinas leídas de fichero"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1448
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1450
 #, c-format
 msgid "Could not open file `%s' for writing to save hostlists: %s\n"
 msgstr ""
 "No se pudo abrir el fichero «%s» en modo escritura para almacenar las listas "
 "de máquinas: %s\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1455
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1457
 #, c-format
 msgid "Writing %u hostlist URIs to `%s'\n"
 msgstr "Escribiendo %u URI de listas de máquinas a «%s»\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1479
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1496
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1481
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1498
 #, c-format
 msgid "Error writing hostlist URIs to file `%s'\n"
 msgstr "Error escribiendo URI de listas de máquinas al fichero «%s»\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1491
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1493
 msgid "# hostlist URIs written to file"
 msgstr "# URI de listas de máquinas escritas a fichero"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1593
-#: src/transport/plugin_transport_http_client.c:2272
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1595
+#: src/transport/plugin_transport_http_client.c:2274
 #, c-format
 msgid "Invalid proxy type: `%s', disabling proxy! Check configuration!\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1622
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1624
 msgid "Learning is enabled on this peer\n"
 msgstr "El aprendizaje está habilitado en este par\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1636
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1638
 msgid "Learning is not enabled on this peer\n"
 msgstr "El aprendizaje no está habilitado en este par\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1649
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1651
 #, c-format
 msgid ""
 "Since learning is not enabled on this peer, hostlist file `%s' was removed\n"
@@ -4830,927 +4823,970 @@ msgstr ""
 "La lista de máquinas «%s» fue eliminada puesto que el aprendizaje no está "
 "habilitado en este par\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:174
+#: src/hostlist/gnunet-daemon-hostlist_server.c:176
 msgid "bytes in hostlist"
 msgstr "bytes en la lista de máquinas"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:199
+#: src/hostlist/gnunet-daemon-hostlist_server.c:201
 msgid "expired addresses encountered"
 msgstr "direcciones expiradas encontradas"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:235
-#: src/hostlist/gnunet-daemon-hostlist_server.c:529
-#: src/peerinfo-tool/gnunet-peerinfo.c:383
-#: src/peerinfo-tool/gnunet-peerinfo.c:532
-#: src/topology/gnunet-daemon-topology.c:860
+#: src/hostlist/gnunet-daemon-hostlist_server.c:237
+#: src/hostlist/gnunet-daemon-hostlist_server.c:531
+#: src/peerinfo-tool/gnunet-peerinfo.c:385
+#: src/peerinfo-tool/gnunet-peerinfo.c:534
+#: src/topology/gnunet-daemon-topology.c:862
 #, c-format
 msgid "Error in communication with PEERINFO service: %s\n"
 msgstr ""
 "Error en la comunicación con el servicio de información de pares (PEERINFO): "
 "%s\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:259
+#: src/hostlist/gnunet-daemon-hostlist_server.c:261
 msgid "HELLOs without addresses encountered (ignored)"
 msgstr "«HELLO» sin dirección encontrados (ignorados)"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:276
+#: src/hostlist/gnunet-daemon-hostlist_server.c:278
 msgid "bytes not included in hostlist (size limit)"
 msgstr "bytes no incluidos en la lista de máquinas (límite de tamaño)"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:380
+#: src/hostlist/gnunet-daemon-hostlist_server.c:382
 #, c-format
 msgid "Refusing `%s' request to hostlist server\n"
 msgstr "Rechazando petición «%s» al servidor de listas de máquinas\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:383
+#: src/hostlist/gnunet-daemon-hostlist_server.c:385
 msgid "hostlist requests refused (not HTTP GET)"
 msgstr "Peticiones de listas de máquinas rechazadas (no HTTP GET)"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:395
+#: src/hostlist/gnunet-daemon-hostlist_server.c:397
 #, c-format
 msgid "Refusing `%s' request with %llu bytes of upload data\n"
 msgstr "Rechazando petición «%s» con %llu bytes de datos de subida\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:399
+#: src/hostlist/gnunet-daemon-hostlist_server.c:401
 msgid "hostlist requests refused (upload data)"
 msgstr "Peticiones de listas de máquinas rechazadas (datos de subida)"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:406
+#: src/hostlist/gnunet-daemon-hostlist_server.c:408
 msgid "Could not handle hostlist request since I do not have a response yet\n"
 msgstr ""
 "No se pudo manejar una petición de lista de máquinas debido a que no hay una "
 "respuesta todavía\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:409
+#: src/hostlist/gnunet-daemon-hostlist_server.c:411
 msgid "hostlist requests refused (not ready)"
 msgstr "Peticiones de listas de máquinas rechazadas (no preparados)"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:414
+#: src/hostlist/gnunet-daemon-hostlist_server.c:416
 msgid "Received request for our hostlist\n"
 msgstr "Peticiones recibidas de nuestra lista de máquinas\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:416
+#: src/hostlist/gnunet-daemon-hostlist_server.c:418
 msgid "hostlist requests processed"
 msgstr "Peticiones de lista de máquinas procesadas"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:464
+#: src/hostlist/gnunet-daemon-hostlist_server.c:466
 msgid "# hostlist advertisements send"
 msgstr "# anuncios de listas de máquinas enviados"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:677
-#: src/transport/gnunet-service-transport.c:2813
+#: src/hostlist/gnunet-daemon-hostlist_server.c:679
+#: src/transport/gnunet-service-transport.c:2814
 msgid "Could not access PEERINFO service.  Exiting.\n"
 msgstr ""
 "No se pudo acceder al servicio de información de pares (PEERINFO).  "
 "Saliendo.\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:689
+#: src/hostlist/gnunet-daemon-hostlist_server.c:691
 #, c-format
 msgid "Invalid port number %llu.  Exiting.\n"
 msgstr "Número de puerto %llu no válido.  Saliendo.\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:701
+#: src/hostlist/gnunet-daemon-hostlist_server.c:703
 #, c-format
 msgid "Hostlist service starts on %s:%llu\n"
 msgstr "Servicio de listas de máquinas arranca en %s:%llu\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:716
+#: src/hostlist/gnunet-daemon-hostlist_server.c:718
 #, c-format
 msgid "Address to obtain hostlist: `%s'\n"
 msgstr "Dirección para obtener la lista de máquinas: «%s»\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:729
+#: src/hostlist/gnunet-daemon-hostlist_server.c:731
 #, fuzzy
 msgid "BINDTOIP does not a valid IPv4 address! Ignoring BINDTOIPV4.\n"
 msgstr "¡«%s» no es una dirección IP válida! Ignorando «BINDTOIP».\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:746
+#: src/hostlist/gnunet-daemon-hostlist_server.c:748
 #, fuzzy
 msgid "BINDTOIP does not a valid IPv4 address! Ignoring BINDTOIPV6.\n"
 msgstr "¡«%s» no es una dirección IP válida! Ignorando «BINDTOIP».\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:767
+#: src/hostlist/gnunet-daemon-hostlist_server.c:769
 #, fuzzy, c-format
 msgid "`%s' is not a valid IPv4 address! Ignoring BINDTOIPV4.\n"
 msgstr "¡«%s» no es una dirección IP válida! Ignorando «BINDTOIP».\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:787
+#: src/hostlist/gnunet-daemon-hostlist_server.c:789
 #, fuzzy, c-format
 msgid "`%s' is not a valid IPv6 address! Ignoring BINDTOIPV6.\n"
 msgstr "¡«%s» no es una dirección IP válida! Ignorando «BINDTOIP».\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:827
+#: src/hostlist/gnunet-daemon-hostlist_server.c:829
 #, c-format
 msgid "Could not start hostlist HTTP server on port %u\n"
 msgstr ""
 "No se pudo arrancar un servidor de listas de máquinas HTTP en el puerto %u\n"
 
-#: src/identity/gnunet-identity.c:177
+#: src/identity/gnunet-identity.c:179
 #, fuzzy, c-format
 msgid "Failed to create ego: %s\n"
 msgstr "Se produjo un fallo al crear la página para «%s»\n"
 
-#: src/identity/gnunet-identity.c:199
+#: src/identity/gnunet-identity.c:201
 #, fuzzy, c-format
 msgid "Failed to set default ego: %s\n"
 msgstr "Se produjo un fallo al crear la página para «%s»\n"
 
-#: src/identity/gnunet-identity.c:354
+#: src/identity/gnunet-identity.c:356
 msgid "create ego NAME"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:360
+#: src/identity/gnunet-identity.c:362
 #, fuzzy
 msgid "delete ego NAME "
 msgstr "borrar un nombre de espacio de nombres (NAME)"
 
-#: src/identity/gnunet-identity.c:365
+#: src/identity/gnunet-identity.c:367
 #, fuzzy
 msgid "display all egos"
 msgstr "mostrar registros"
 
-#: src/identity/gnunet-identity.c:371
+#: src/identity/gnunet-identity.c:373
 msgid ""
 "set default identity to EGO for a subsystem SUBSYSTEM (use together with -s)"
 msgstr ""
 
 # Miguel: Aquí he dejado monitorización porque esto es
 # del servicio de traducción de direcciones.
-#: src/identity/gnunet-identity.c:376
+#: src/identity/gnunet-identity.c:378
 #, fuzzy
 msgid "run in monitor mode egos"
 msgstr "modo de monitorización"
 
-#: src/identity/gnunet-identity.c:382
+#: src/identity/gnunet-identity.c:384
 msgid ""
 "set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:396
+#: src/identity/gnunet-identity.c:398
 msgid "Maintain egos"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:389
+#: src/identity/gnunet-service-identity.c:391
 msgid "no default known"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:414
+#: src/identity/gnunet-service-identity.c:416
 msgid "default configured, but ego unknown (internal error)"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:505
-#: src/identity/gnunet-service-identity.c:788
-#: src/identity/gnunet-service-identity.c:916
+#: src/identity/gnunet-service-identity.c:507
+#: src/identity/gnunet-service-identity.c:790
+#: src/identity/gnunet-service-identity.c:918
 #, fuzzy, c-format
 msgid "Failed to write subsystem default identifier map to `%s'.\n"
 msgstr ""
 "Se produjo un fallo al obtener los identificadores de fichero para «%s»\n"
 
-#: src/identity/gnunet-service-identity.c:513
+#: src/identity/gnunet-service-identity.c:515
 msgid "Unknown ego specified for service (internal error)"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:608
+#: src/identity/gnunet-service-identity.c:610
 msgid "identifier already in use for another ego"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:763
+#: src/identity/gnunet-service-identity.c:765
 #, fuzzy
 msgid "target name already exists"
 msgstr "El registro ya existía en el almacén de nombres"
 
-#: src/identity/gnunet-service-identity.c:806
-#: src/identity/gnunet-service-identity.c:934
+#: src/identity/gnunet-service-identity.c:808
+#: src/identity/gnunet-service-identity.c:936
 msgid "no matching ego found"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:969
+#: src/identity/gnunet-service-identity.c:971
 #, fuzzy, c-format
 msgid "Failed to parse ego information in `%s'\n"
 msgstr "Se produjo un fallo al procesar la identidad del par «%s»\n"
 
-#: src/identity/gnunet-service-identity.c:1027
+#: src/identity/gnunet-service-identity.c:1029
 #, fuzzy, c-format
 msgid "Failed to parse subsystem identity configuration file `%s'\n"
 msgstr "Se produjo un fallo al borrar el fichero de configuración %s\n"
 
-#: src/identity/gnunet-service-identity.c:1037
+#: src/identity/gnunet-service-identity.c:1039
 #, fuzzy, c-format
 msgid "Failed to create directory `%s' for storing egos\n"
 msgstr "Se produjo un fallo al leer el directorio «%s»\n"
 
-#: src/json/json.c:121
+#: src/json/json.c:123
 #, fuzzy, c-format
 msgid "Failed to parse JSON in option `%s': %s (%s)\n"
 msgstr "Se produjo un fallo al procesar «HELLO» en el fichero «%s»\n"
 
-#: src/multicast/gnunet-multicast.c:46 src/multicast/gnunet-multicast.c:70
-msgid "This command doesn't do anything yet."
-msgstr ""
-
-#: src/my/my.c:194 src/my/my.c:213
+#: src/my/my.c:196 src/my/my.c:215
 #, fuzzy, c-format
 msgid "%s failed at %s:%d with error: %s\n"
 msgstr "«%s» falló en %s: %d con el error: %s\n"
 
-#: src/mysql/mysql.c:178
+#: src/mysql/mysql.c:180
 #, c-format
 msgid "Trying to use file `%s' for MySQL configuration.\n"
 msgstr "Intentando usar el fichero «%s» para la configuración de MySQL.\n"
 
-#: src/mysql/mysql.c:185
+#: src/mysql/mysql.c:187
 #, c-format
 msgid "Could not access file `%s': %s\n"
 msgstr "No se pudo acceder al fichero «%s»: %s\n"
 
-#: src/namecache/gnunet-namecache.c:105
+#: src/namecache/gnunet-namecache.c:107
 #, fuzzy, c-format
 msgid "No records found for `%s'"
 msgstr "No se han encontrado ficheros en «%s»\n"
 
-#: src/namecache/gnunet-namecache.c:120 src/namestore/gnunet-namestore.c:424
+#: src/namecache/gnunet-namecache.c:122 src/namestore/gnunet-namestore.c:454
 #, c-format
 msgid "\tCorrupt or unsupported record of type %u\n"
 msgstr "\tRegistro corrupto o no soportado del tipo %u\n"
 
-#: src/namecache/gnunet-namecache.c:181
+#: src/namecache/gnunet-namecache.c:183
 #, fuzzy, c-format
 msgid "You must specify which zone should be accessed\n"
 msgstr "Se debe especificar un apodo\n"
 
-#: src/namecache/gnunet-namecache.c:191
+#: src/namecache/gnunet-namecache.c:193
 #, fuzzy, c-format
 msgid "Invalid public key for zone `%s'\n"
 msgstr "Parámetro no válido «%s»\n"
 
-#: src/namecache/gnunet-namecache.c:199
+#: src/namecache/gnunet-namecache.c:201
 #, fuzzy, c-format
 msgid "You must specify a name\n"
 msgstr "¡Debes especificar un receptor!\n"
 
-#: src/namecache/gnunet-namecache.c:230 src/namestore/gnunet-namestore.c:1290
+#: src/namecache/gnunet-namecache.c:232 src/namestore/gnunet-namestore.c:1575
 msgid "name of the record to add/delete/display"
 msgstr "nombre del registro a añadir/borrar/mostrar"
 
-#: src/namecache/gnunet-namecache.c:236
+#: src/namecache/gnunet-namecache.c:238
 #, fuzzy
 msgid "spezifies the public key of the zone to look in"
 msgstr "Especificar el tipo del registro a buscar"
 
-#: src/namecache/gnunet-namecache.c:248 src/namestore/gnunet-namestore.c:1342
+#: src/namecache/gnunet-namecache.c:250 src/namestore/gnunet-namestore.c:1632
 msgid "GNUnet zone manipulation tool"
 msgstr "Herramienta de manipulación de zona de GNUnet"
 
-#: src/namecache/namecache_api.c:294
+#: src/namecache/namecache_api.c:296
 #, fuzzy
 msgid "Namecache failed to cache block"
 msgstr "El almacén de nombres no pudo añadir el registro"
 
 # Miguel: ¿Conectar y conexión?
-#: src/namecache/namecache_api.c:381
+#: src/namecache/namecache_api.c:383
 #, fuzzy
 msgid "Error communicating with namecache service"
 msgstr "Error al comunicar con el servicio ARM.\n"
 
-#: src/namecache/plugin_namecache_flat.c:119
-#: src/namecache/plugin_namecache_flat.c:253
-#: src/namestore/plugin_namestore_heap.c:146
-#: src/namestore/plugin_namestore_heap.c:393
-#: src/peerstore/plugin_peerstore_flat.c:377
-#: src/peerstore/plugin_peerstore_flat.c:536
+#: src/namecache/plugin_namecache_flat.c:121
+#: src/namecache/plugin_namecache_flat.c:255
+#: src/namestore/plugin_namestore_heap.c:148
+#: src/namestore/plugin_namestore_heap.c:395
+#: src/peerstore/plugin_peerstore_flat.c:379
+#: src/peerstore/plugin_peerstore_flat.c:538
 #, 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_heap.c:157
-#: src/peerstore/plugin_peerstore_flat.c:392
+#: src/namecache/plugin_namecache_flat.c:132
+#: src/namestore/plugin_namestore_heap.c:159
+#: src/peerstore/plugin_peerstore_flat.c:394
 #, 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:149
-#: src/namestore/plugin_namestore_heap.c:170
-#: src/peerstore/plugin_peerstore_flat.c:404
+#: src/namecache/plugin_namecache_flat.c:151
+#: src/namestore/plugin_namestore_heap.c:172
+#: src/peerstore/plugin_peerstore_flat.c:406
 #, 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:408
+#: src/namecache/plugin_namecache_flat.c:410
 #, fuzzy
 msgid "flat plugin running\n"
 msgstr "Base de datos sqlite ejecutándose\n"
 
-#: src/namestore/gnunet-namestore.c:311
+#: src/namecache/plugin_namecache_sqlite.c:183
+#: src/namecache/plugin_namecache_sqlite.c:197
+#: src/namestore/plugin_namestore_sqlite.c:219
+#: src/namestore/plugin_namestore_sqlite.c:230
+#, fuzzy, c-format
+msgid "Failed to setup database at `%s'\n"
+msgstr "Se produjo un fallo al inciar «%s» en «%s»\n"
+
+#: src/namestore/gnunet-namestore.c:341
 #, c-format
 msgid "Adding record failed: %s\n"
 msgstr "No se pudo añadir el registro: %s\n"
 
-#: src/namestore/gnunet-namestore.c:341
+#: src/namestore/gnunet-namestore.c:371
 #, fuzzy, c-format
 msgid "Deleting record failed, record does not exist%s%s\n"
 msgstr "No se pudo borrar el registro: %s\n"
 
-#: src/namestore/gnunet-namestore.c:348
+#: src/namestore/gnunet-namestore.c:378
 #, fuzzy, c-format
 msgid "Deleting record failed%s%s\n"
 msgstr "No se pudo borrar el registro: %s\n"
 
-#: src/namestore/gnunet-namestore.c:628 src/namestore/gnunet-namestore.c:636
+#: src/namestore/gnunet-namestore.c:660 src/namestore/gnunet-namestore.c:668
 #, c-format
 msgid "A %s record exists already under `%s', no other records can be added.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:650 src/namestore/gnunet-namestore.c:662
+#: src/namestore/gnunet-namestore.c:682 src/namestore/gnunet-namestore.c:694
 #, c-format
 msgid "Records already exist under `%s', cannot add `%s' record.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:675
+#: src/namestore/gnunet-namestore.c:707
 #, c-format
 msgid ""
 "Non-GNS2DNS records already exist under `%s', cannot add GNS2DNS record.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:809
+#: src/namestore/gnunet-namestore.c:837
 #, c-format
 msgid "There are no records under label `%s' that could be deleted.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:850
+#: src/namestore/gnunet-namestore.c:878
 #, c-format
 msgid ""
 "There are no records under label `%s' that match the request for deletion.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:902
+#: src/namestore/gnunet-namestore.c:965
+#, fuzzy, c-format
+msgid "Failed to replace records: %s\n"
+msgstr "Se produjo un fallo al procesar la petición DNS.  Omitiendo.\n"
+
+#: src/namestore/gnunet-namestore.c:1009
 #, c-format
 msgid "No options given\n"
 msgstr "No se han proporcionado opciones\n"
 
-#: src/namestore/gnunet-namestore.c:921 src/namestore/gnunet-namestore.c:930
-#: src/namestore/gnunet-namestore.c:949 src/namestore/gnunet-namestore.c:972
-#: src/namestore/gnunet-namestore.c:1026
+#: src/namestore/gnunet-namestore.c:1032 src/namestore/gnunet-namestore.c:1065
+#: src/namestore/gnunet-namestore.c:1074 src/namestore/gnunet-namestore.c:1093
+#: src/namestore/gnunet-namestore.c:1116 src/namestore/gnunet-namestore.c:1148
 #, c-format
 msgid "Missing option `%s' for operation `%s'\n"
 msgstr "Falta la opción «%s» para la operación «%s»\n"
 
-#: src/namestore/gnunet-namestore.c:922 src/namestore/gnunet-namestore.c:931
-#: src/namestore/gnunet-namestore.c:950 src/namestore/gnunet-namestore.c:974
+#: src/namestore/gnunet-namestore.c:1033
+msgid "replace"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1066 src/namestore/gnunet-namestore.c:1075
+#: src/namestore/gnunet-namestore.c:1094 src/namestore/gnunet-namestore.c:1118
 msgid "add"
 msgstr "añadir"
 
-#: src/namestore/gnunet-namestore.c:940
+#: src/namestore/gnunet-namestore.c:1084
 #, c-format
 msgid "Unsupported type `%s'\n"
 msgstr "Tipo no soportado «%s»\n"
 
-#: src/namestore/gnunet-namestore.c:962
+#: src/namestore/gnunet-namestore.c:1106
 #, c-format
 msgid "Value `%s' invalid for record type `%s'\n"
 msgstr "Valor «%s» no válido para el tipo de registro «%s»\n"
 
-#: src/namestore/gnunet-namestore.c:1007
+#: src/namestore/gnunet-namestore.c:1129
 #, c-format
 msgid "Invalid time format `%s'\n"
 msgstr "Formato de tiempo no válido «%s»\n"
 
-#: src/namestore/gnunet-namestore.c:1027
+#: src/namestore/gnunet-namestore.c:1149
 msgid "del"
 msgstr "borrar"
 
-#: src/namestore/gnunet-namestore.c:1070
+#: src/namestore/gnunet-namestore.c:1192
 #, fuzzy, c-format
 msgid "Invalid public key for reverse lookup `%s'\n"
 msgstr "Parámetro no válido «%s»\n"
 
-#: src/namestore/gnunet-namestore.c:1099
-#: src/peerinfo-tool/gnunet-peerinfo.c:773
+#: src/namestore/gnunet-namestore.c:1221
+#: src/peerinfo-tool/gnunet-peerinfo.c:775
 #, c-format
 msgid "Invalid URI `%s'\n"
 msgstr "URI no válida: «%s»\n"
 
-#: src/namestore/gnunet-namestore.c:1134
+#: src/namestore/gnunet-namestore.c:1249
 #, fuzzy, c-format
 msgid "Invalid nick `%s'\n"
 msgstr "URI no válida: «%s»\n"
 
-#: src/namestore/gnunet-namestore.c:1174
+#: src/namestore/gnunet-namestore.c:1289
 #, fuzzy, c-format
 msgid "No default ego configured in identity service\n"
 msgstr "'%s': servicio desconocido: %s\n"
 
-#: src/namestore/gnunet-namestore.c:1238
+#: src/namestore/gnunet-namestore.c:1341
+#, fuzzy, c-format
+msgid "Superfluous command line arguments (starting with `%s') ignored\n"
+msgstr "Argumentos superfluos (ignorados).\n"
+
+#: src/namestore/gnunet-namestore.c:1357
 #, fuzzy, c-format
 msgid "Cannot connect to identity service\n"
 msgstr "¡No se pudo conectar al servicio %s!\n"
 
-#: src/namestore/gnunet-namestore.c:1263
+#: src/namestore/gnunet-namestore.c:1407
+msgid "Empty record line argument is not allowed.\n"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1423
+#, c-format
+msgid "Invalid expiration time `%s' (must be without unit)\n"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1435 src/namestore/gnunet-namestore.c:1453
+#: src/namestore/gnunet-namestore.c:1470
+#, fuzzy, c-format
+msgid "Missing entries in record line `%s'.\n"
+msgstr "Se produjo un fallo al cargar el módulo del transporte para «%s»\n"
+
+#: src/namestore/gnunet-namestore.c:1444
+#, fuzzy, c-format
+msgid "Unknown record type `%s'\n"
+msgstr "Comando desconocido «%s»\n"
+
+#: src/namestore/gnunet-namestore.c:1484
+#, fuzzy, c-format
+msgid "Invalid record data for type %s: `%s'.\n"
+msgstr "Formato no válido para la IP: «%s»\n"
+
+#: src/namestore/gnunet-namestore.c:1548
 msgid "add record"
 msgstr "añadir registro"
 
-#: src/namestore/gnunet-namestore.c:1267
+#: src/namestore/gnunet-namestore.c:1552
 msgid "delete record"
 msgstr "borrar registro"
 
-#: src/namestore/gnunet-namestore.c:1271
+#: src/namestore/gnunet-namestore.c:1556
 msgid "display records"
 msgstr "mostrar registros"
 
-#: src/namestore/gnunet-namestore.c:1276
+#: src/namestore/gnunet-namestore.c:1561
 msgid ""
 "expiration time for record to use (for adding only), \"never\" is possible"
 msgstr ""
 "tiempo de expiración del registro a usar (únicamente para añadir), nunca "
 "(\"never\") es posible"
 
-#: src/namestore/gnunet-namestore.c:1281
+#: src/namestore/gnunet-namestore.c:1566
 #, fuzzy
 msgid "set the desired nick name for the zone"
 msgstr "establece el nivel LEVEL deseado de replicación"
 
-#: src/namestore/gnunet-namestore.c:1285
+#: src/namestore/gnunet-namestore.c:1570
 #, fuzzy
 msgid "monitor changes in the namestore"
 msgstr "¡Se produjo un fallo al conectar con el almacén de nombres!\n"
 
-#: src/namestore/gnunet-namestore.c:1295
+#: src/namestore/gnunet-namestore.c:1580
 #, fuzzy
 msgid "determine our name for the given PKEY"
 msgstr "establece las preferencias para el par dado"
 
-#: src/namestore/gnunet-namestore.c:1300
+#: src/namestore/gnunet-namestore.c:1585
+msgid ""
+"set record set to values given by (possibly multiple) RECORDLINES; can be "
+"specified multiple times"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1590
 msgid "type of the record to add/delete/display"
 msgstr "tipo del registro a añadir/borrar/mostrar"
 
-#: src/namestore/gnunet-namestore.c:1305
+#: src/namestore/gnunet-namestore.c:1595
 msgid "URI to import into our zone"
 msgstr "URI a importar a nuestra zona"
 
-#: src/namestore/gnunet-namestore.c:1310
+#: src/namestore/gnunet-namestore.c:1600
 msgid "value of the record to add/delete"
 msgstr "valor del registro a añadir/borrar"
 
-#: src/namestore/gnunet-namestore.c:1314
+#: src/namestore/gnunet-namestore.c:1604
 msgid "create or list public record"
 msgstr "crear o listar registros públicos"
 
-#: src/namestore/gnunet-namestore.c:1318
+#: src/namestore/gnunet-namestore.c:1608
 msgid ""
 "create shadow record (only valid if all other records of the same type have "
 "expired"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1323
+#: src/namestore/gnunet-namestore.c:1613
 #, fuzzy
 msgid "name of the ego controlling the zone"
 msgstr "nombre de la sección a la que acceder"
 
 # form??
-#: src/namestore/gnunet-namestore-fcfsd.c:547
+#: src/namestore/gnunet-namestore-fcfsd.c:549
 #, c-format
 msgid "Unsupported form value `%s'\n"
 msgstr "Forma de valor no soportada «%s»\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:574
+#: src/namestore/gnunet-namestore-fcfsd.c:576
 #, c-format
 msgid "Failed to create record for domain `%s': %s\n"
 msgstr "Se produjo un fallo al crear un registro para el dominio «%s»: %s\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:595
+#: src/namestore/gnunet-namestore-fcfsd.c:597
 msgid "Error when mapping zone to name\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:627
+#: src/namestore/gnunet-namestore-fcfsd.c:629
 #, c-format
 msgid "Found existing name `%s' for the given key\n"
 msgstr "Encontrado nombre «%s» para la clave dada\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:687
+#: src/namestore/gnunet-namestore-fcfsd.c:689
 #, c-format
 msgid "Found %u existing records for domain `%s'\n"
 msgstr "Encontrados %u registros para el dominio «%s»\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:775
+#: src/namestore/gnunet-namestore-fcfsd.c:777
 #, c-format
 msgid "Failed to create page for `%s'\n"
 msgstr "Se produjo un fallo al crear la página para «%s»\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:794
+#: src/namestore/gnunet-namestore-fcfsd.c:796
 #, c-format
 msgid "Failed to setup post processor for `%s'\n"
 msgstr "Se produjo un fallo al configurar el post-procesador para «%s»\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:830
+#: src/namestore/gnunet-namestore-fcfsd.c:832
 msgid "Domain name must not contain `.'\n"
 msgstr "El nombre de dominio no puede contener «.»\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:839
+#: src/namestore/gnunet-namestore-fcfsd.c:841
 msgid "Domain name must not contain `+'\n"
 msgstr "El nombre de dominio no puede contener «+»\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1069
+#: src/namestore/gnunet-namestore-fcfsd.c:1071
 msgid "No ego configured for `fcfsd` subsystem\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1097
+#: src/namestore/gnunet-namestore-fcfsd.c:1099
 msgid "Failed to start HTTP server\n"
 msgstr "Se produjo un fallo al iniciar el servidor HTTP\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1145
+#: src/namestore/gnunet-namestore-fcfsd.c:1147
 #, fuzzy
 msgid "Failed to connect to identity\n"
 msgstr "Se produjo un fallo al conectar con GNS\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1171
+#: src/namestore/gnunet-namestore-fcfsd.c:1173
 msgid "name of the zone that is to be managed by FCFSD"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1190
+#: src/namestore/gnunet-namestore-fcfsd.c:1192
 #, fuzzy
 msgid "GNU Name System First Come First Serve name registration service"
 msgstr "Servicio de registro GNUnet GNS primero en llegar, primero en servirse"
 
-#: src/namestore/gnunet-service-namestore.c:749
+#: src/namestore/gnunet-service-namestore.c:900
 #, fuzzy, c-format
 msgid "Failed to replicate block in namecache: %s\n"
 msgstr "Se produjo un fallo al crear el espacio de nombres «%s»\n"
 
-#: src/namestore/gnunet-zoneimport.c:2036
+#: src/namestore/gnunet-zoneimport.c:2038
 msgid "size to use for the main hash map"
 msgstr ""
 
-#: src/namestore/gnunet-zoneimport.c:2041
+#: src/namestore/gnunet-zoneimport.c:2043
 msgid "minimum expiration time we assume for imported records"
 msgstr ""
 
-#: src/namestore/namestore_api.c:389
+#: src/namestore/namestore_api.c:391
 #, fuzzy
 msgid "Namestore failed to store record\n"
 msgstr "El almacén de nombres no pudo añadir el registro\n"
 
-#: src/namestore/plugin_namestore_heap.c:776
+#: src/namestore/plugin_namestore_heap.c:778
 #, fuzzy
 msgid "heap file database running\n"
 msgstr "Base de datos de plantilla ejecutándose\n"
 
-#: src/namestore/plugin_namestore_sqlite.c:216
-#: src/namestore/plugin_namestore_sqlite.c:227
-#, fuzzy, c-format
-msgid "Failed to setup database at `%s'\n"
-msgstr "Se produjo un fallo al inciar «%s» en «%s»\n"
-
-#: src/nat-auto/gnunet-nat-auto.c:191
+#: src/nat-auto/gnunet-nat-auto.c:193
 #, fuzzy
 msgid "Suggested configuration changes:\n"
 msgstr "Configuración de GNUnet"
 
-#: src/nat-auto/gnunet-nat-auto.c:217
+#: src/nat-auto/gnunet-nat-auto.c:219
 #, fuzzy, c-format
 msgid "Failed to write configuration to `%s'\n"
 msgstr "Se produjo un fallo al guardar la nueva configuración al disco"
 
-#: src/nat-auto/gnunet-nat-auto.c:224
+#: src/nat-auto/gnunet-nat-auto.c:226
 #, fuzzy, c-format
 msgid "Wrote updated configuration to `%s'\n"
 msgstr "No se pudo acceder al fichero de configuración «%s»\n"
 
-#: src/nat-auto/gnunet-nat-auto.c:343
+#: src/nat-auto/gnunet-nat-auto.c:345
 #, fuzzy
 msgid "run autoconfiguration"
 msgstr "Configuración de GNUnet"
 
-#: src/nat-auto/gnunet-nat-auto.c:349
+#: src/nat-auto/gnunet-nat-auto.c:351
 msgid "section name providing the configuration for the adapter"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:354 src/nat/gnunet-nat.c:451
+#: src/nat-auto/gnunet-nat-auto.c:356 src/nat/gnunet-nat.c:459
 msgid "use TCP"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:359 src/nat/gnunet-nat.c:456
+#: src/nat-auto/gnunet-nat-auto.c:361 src/nat/gnunet-nat.c:464
 msgid "use UDP"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:364
+#: src/nat-auto/gnunet-nat-auto.c:366
 #, fuzzy
 msgid "write configuration file (for autoconfiguration)"
 msgstr "¡Ninguna aplicación definida en la configuración!\n"
 
-#: src/nat-auto/gnunet-nat-auto.c:376
+#: src/nat-auto/gnunet-nat-auto.c:378
 #, fuzzy
 msgid "GNUnet NAT traversal autoconfiguration"
 msgstr "Demonio de ayuda en las pruebas de recorrido NAT de GNUnet"
 
-#: src/nat-auto/gnunet-nat-auto_legacy.c:401
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:679
-#: src/nat-auto/nat_auto_api_test.c:403
+#: src/nat-auto/gnunet-nat-auto_legacy.c:403
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:681
+#: src/nat-auto/nat_auto_api_test.c:409
 msgid "Failed to connect to `gnunet-nat-server'\n"
 msgstr "Se produjo un fallo al conectar con «gnunet-nat-server»\n"
 
-#: src/nat-auto/gnunet-nat-auto_legacy.c:516
+#: src/nat-auto/gnunet-nat-auto_legacy.c:518
 #, c-format
 msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n"
 msgstr ""
 "Se produjo un fallo al crear el «socket» de escucha asociado a «%s» para "
 "pruebas NAT: %s\n"
 
-#: src/nat-auto/gnunet-nat-auto_legacy.c:566
-#: src/nat-auto/nat_auto_api_test.c:569
+#: src/nat-auto/gnunet-nat-auto_legacy.c:568
+#: src/nat-auto/nat_auto_api_test.c:575
 #, fuzzy
 msgid "NAT test failed to start NAT library\n"
 msgstr "El almacén de nombres no pudo añadir el registro\n"
 
-#: src/nat-auto/gnunet-service-nat-auto.c:340
+#: src/nat-auto/gnunet-service-nat-auto.c:342
 #, fuzzy
 msgid "UPnP client `upnpc` command not found, disabling UPnP\n"
 msgstr "comando «upnpc» no encontrado\n"
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:383
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:385
 msgid "NAT traversal with ICMP Server succeeded.\n"
 msgstr "Recorrido NAT con servidor ICMP satisfactorio.\n"
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:384
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:386
 msgid "NAT traversal with ICMP Server failed.\n"
 msgstr "Recorrido NAT con servidor ICMP fallido.\n"
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:403
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:405
 msgid "Testing connection reversal with ICMP server.\n"
 msgstr "Probando conexión inversa con el servidor ICMP.\n"
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:435
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:437
 #, c-format
 msgid "Detected external IP `%s'\n"
 msgstr "Detectada IP externa «%s»\n"
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:570
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:572
 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-auto/gnunet-service-nat-auto_legacy.c:588
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:590
 #, c-format
 msgid "Detected internal network address `%s'.\n"
 msgstr "Detectada dirección de la red interna «%s».\n"
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:722
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:724
 msgid "upnpc found, enabling its use\n"
 msgstr "«upnpc» encontrado, habilitando su uso\n"
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:723
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:725
 msgid "upnpc not found\n"
 msgstr "«upnpc» no encontrado\n"
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:760
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:762
 msgid "test_icmp_server not possible, as we have no public IPv4 address\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:772
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:832
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:774
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:834
 msgid "test_icmp_server not possible, as we are not behind NAT\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:784
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:844
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:786
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:846
 msgid "No working gnunet-helper-nat-server found\n"
 msgstr "No se ha encontrado un «gnunet-helper-nat-server» funcional\n"
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:821
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:823
 msgid "test_icmp_client not possible, as we have no internal IPv4 address\n"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:74
+#: src/nat-auto/nat_auto_api.c:76
 msgid "Operation Successful"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:76
+#: src/nat-auto/nat_auto_api.c:78
 msgid "IPC failure"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:78
+#: src/nat-auto/nat_auto_api.c:80
 msgid "Failure in network subsystem, check permissions."
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:80
+#: src/nat-auto/nat_auto_api.c:82
 msgid "Encountered timeout while performing operation"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:82
+#: src/nat-auto/nat_auto_api.c:84
 msgid "detected that we are offline"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:84
+#: src/nat-auto/nat_auto_api.c:86
 #, fuzzy
 msgid "`upnpc` command not found"
 msgstr "comando «upnpc» no encontrado\n"
 
-#: src/nat-auto/nat_auto_api.c:86
+#: src/nat-auto/nat_auto_api.c:88
 #, fuzzy
 msgid "Failed to run `upnpc` command"
 msgstr "Se produjo un fallo al ejecutar «%s»\n"
 
-#: src/nat-auto/nat_auto_api.c:88
+#: src/nat-auto/nat_auto_api.c:90
 #, fuzzy
 msgid "`upnpc' command took too long, process killed"
 msgstr "comando «upnpc» no encontrado\n"
 
-#: src/nat-auto/nat_auto_api.c:90
+#: src/nat-auto/nat_auto_api.c:92
 msgid "`upnpc' command failed to establish port mapping"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:92
+#: src/nat-auto/nat_auto_api.c:94
 #, fuzzy
 msgid "`external-ip' command not found"
 msgstr "comando «external-ip» no encontrado\n"
 
-#: src/nat-auto/nat_auto_api.c:94
+#: src/nat-auto/nat_auto_api.c:96
 #, fuzzy
 msgid "Failed to run `external-ip` command"
 msgstr "Se produjo un fallo al ejecutar «%s»\n"
 
-#: src/nat-auto/nat_auto_api.c:96
+#: src/nat-auto/nat_auto_api.c:98
 #, fuzzy
 msgid "`external-ip' command output invalid"
 msgstr "comando «external-ip» no encontrado\n"
 
-#: src/nat-auto/nat_auto_api.c:98
+#: src/nat-auto/nat_auto_api.c:100
 msgid "no valid address was returned by `external-ip'"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:100
+#: src/nat-auto/nat_auto_api.c:102
 #, 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-auto/nat_auto_api.c:102
+#: src/nat-auto/nat_auto_api.c:104
 #, fuzzy
 msgid "No functioning gnunet-helper-nat-server installation found"
 msgstr "No se ha encontrado un «gnunet-helper-nat-server» funcional\n"
 
-#: src/nat-auto/nat_auto_api.c:104
+#: src/nat-auto/nat_auto_api.c:106
 msgid "NAT test could not be initialized"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:106
+#: src/nat-auto/nat_auto_api.c:108
 msgid "NAT test timeout reached"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:108
+#: src/nat-auto/nat_auto_api.c:110
 msgid "could not register NAT"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:110
+#: src/nat-auto/nat_auto_api.c:112
 #, fuzzy
 msgid "No working gnunet-helper-nat-client installation found"
 msgstr "No se ha encontrado un «gnunet-helper-nat-server» funcional\n"
 
-#: src/nat-auto/nat_auto_api_test.c:475
+#: src/nat-auto/nat_auto_api_test.c:481
 #, fuzzy, c-format
 msgid "Failed to find valid PORT in section `%s'\n"
 msgstr "¡Se produjo un fallo al buscar la opción %s en la sección %s!\n"
 
-#: src/nat-auto/nat_auto_api_test.c:520
+#: src/nat-auto/nat_auto_api_test.c:526
 #, fuzzy, c-format
 msgid "Failed to create socket bound to `%s' for NAT test: %s\n"
 msgstr ""
 "Se produjo un fallo al crear el «socket» de escucha asociado a «%s» para "
 "pruebas NAT: %s\n"
 
-#: src/nat/gnunet-nat.c:429
+#: src/nat/gnunet-nat.c:437
 msgid "which IP and port are we locally using to bind/listen to"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:435
+#: src/nat/gnunet-nat.c:443
 msgid "which remote IP and port should be asked for connection reversal"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:441
+#: src/nat/gnunet-nat.c:449
 msgid ""
 "name of configuration section to find additional options, such as manual "
 "host punching data"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:446
+#: src/nat/gnunet-nat.c:454
 msgid "enable STUN processing"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:461
+#: src/nat/gnunet-nat.c:469
 #, fuzzy
 msgid "watch for connection reversal requests"
 msgstr "# pares desconectados debido a petición externa"
 
-#: src/nat/gnunet-nat.c:473
+#: src/nat/gnunet-nat.c:481
 #, fuzzy
 msgid "GNUnet NAT traversal autoconfigure daemon"
 msgstr "Demonio de ayuda en las pruebas de recorrido NAT de GNUnet"
 
-#: src/nat/gnunet-service-nat.c:1337
+#: src/nat/gnunet-service-nat.c:1339
 #, c-format
 msgid "Malformed punched hole specification `%s' (lacks port)\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1347
+#: src/nat/gnunet-service-nat.c:1349
 #, fuzzy, c-format
 msgid "Invalid port number in punched hole specification `%s' (lacks port)\n"
 msgstr ""
 "Puerto inválido \"%s\" en la especificación de la lista local, probando el "
 "puerto %d.\n"
 
-#: src/nat/gnunet-service-nat.c:1363
+#: src/nat/gnunet-service-nat.c:1365
 #, c-format
 msgid "Malformed punched hole specification `%s' (lacks `]')\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1374
+#: src/nat/gnunet-service-nat.c:1376
 #, c-format
 msgid "Malformed punched hole specification `%s' (IPv6 address invalid)"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1839
+#: src/nat/gnunet-service-nat.c:1841
 #, fuzzy
 msgid "Connection reversal request failed\n"
 msgstr "Colección detenida.\n"
 
-#: src/nat/gnunet-service-nat.c:1912
+#: src/nat/gnunet-service-nat.c:1914
 msgid ""
 "UPnP enabled in configuration, but UPnP client `upnpc` command not found, "
 "disabling UPnP\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat_helper.c:184
+#: src/nat/gnunet-service-nat_helper.c:186
 #, c-format
 msgid "gnunet-helper-nat-server generated malformed address `%s'\n"
 msgstr "«gnunet-helper-nat-server» generó la dirección mal formada «%s»\n"
 
-#: src/nat/gnunet-service-nat_helper.c:271
+#: src/nat/gnunet-service-nat_helper.c:273
 #, c-format
 msgid "Failed to start %s\n"
 msgstr "Se produjo un fallo al arrancar %s\n"
 
-#: src/nat/gnunet-service-nat_mini.c:194
+#: src/nat/gnunet-service-nat_mini.c:196
 msgid "`external-ip' command not found\n"
 msgstr "comando «external-ip» no encontrado\n"
 
-#: src/nat/gnunet-service-nat_mini.c:654
+#: src/nat/gnunet-service-nat_mini.c:656
 msgid "`upnpc' command not found\n"
 msgstr "comando «upnpc» no encontrado\n"
 
-#: src/nse/gnunet-nse.c:120
+#: src/nse/gnunet-nse.c:122
 #, fuzzy
 msgid "Show network size estimates from NSE service."
 msgstr "# Estimaciones del tamaño de red recibidas"
 
-#: src/nse/gnunet-nse-profiler.c:847
+#: src/nse/gnunet-nse-profiler.c:849
 msgid "limit to the number of connections to NSE services, 0 for none"
 msgstr "límite al número de conexiones a servicios NSE, 0 para ilimitadas"
 
-#: src/nse/gnunet-nse-profiler.c:852
+#: src/nse/gnunet-nse-profiler.c:854
 msgid "name of the file for writing connection information and statistics"
 msgstr ""
 "nombre del fichero para escribir información y estadísticas de la conexión"
 
-#: src/nse/gnunet-nse-profiler.c:864
+#: src/nse/gnunet-nse-profiler.c:866
 msgid "name of the file for writing the main results"
 msgstr "nombre del fichero en el que escribir los resultados principales"
 
-#: src/nse/gnunet-nse-profiler.c:871
+#: src/nse/gnunet-nse-profiler.c:873
 msgid "Number of peers to run in each round, separated by commas"
 msgstr "Número de pares a ejecutar en cada ronda, separados por comas"
 
-#: src/nse/gnunet-nse-profiler.c:882
+#: src/nse/gnunet-nse-profiler.c:884
 msgid "delay between rounds"
 msgstr "retraso entre rondas"
 
-#: src/nse/gnunet-nse-profiler.c:891
+#: src/nse/gnunet-nse-profiler.c:893
 msgid "Measure quality and performance of the NSE service."
 msgstr "Medir la calidad y rendimiento del servicio NSE."
 
-#: src/nse/gnunet-service-nse.c:1532
-#: src/revocation/gnunet-service-revocation.c:841 src/util/gnunet-scrypt.c:274
+#: src/nse/gnunet-service-nse.c:1534
+#: src/revocation/gnunet-service-revocation.c:843 src/util/gnunet-scrypt.c:276
 msgid "Value is too large.\n"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:176
+#: src/peerinfo/gnunet-service-peerinfo.c:178
 #, c-format
 msgid "Removing expired address of transport `%s'\n"
 msgstr "Eliminando dirección de transporte «%s»\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:311
+#: src/peerinfo/gnunet-service-peerinfo.c:313
 #, fuzzy, c-format
 msgid "Failed to parse HELLO in file `%s': %s\n"
 msgstr "Se produjo un fallo al procesar «HELLO» en el fichero «%s»\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:332
-#: src/peerinfo/gnunet-service-peerinfo.c:363
+#: src/peerinfo/gnunet-service-peerinfo.c:334
+#: src/peerinfo/gnunet-service-peerinfo.c:365
 #, fuzzy, c-format
 msgid "Failed to parse HELLO in file `%s'\n"
 msgstr "Se produjo un fallo al procesar «HELLO» en el fichero «%s»\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:447
+#: src/peerinfo/gnunet-service-peerinfo.c:449
 msgid "# peers known"
 msgstr "# pares conocidos"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:490
+#: src/peerinfo/gnunet-service-peerinfo.c:492
 #, c-format
 msgid ""
 "File `%s' in directory `%s' does not match naming convention. Removed.\n"
@@ -5758,1145 +5794,904 @@ msgstr ""
 "El fichero «%s» en el directorio «%s» no sigue la convención de nombres. "
 "Eliminado.\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:657
+#: src/peerinfo/gnunet-service-peerinfo.c:659
 #, fuzzy, c-format
 msgid "Scanning directory `%s'\n"
 msgstr "Escaneando directorio «%s».\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:665
+#: src/peerinfo/gnunet-service-peerinfo.c:667
 #, c-format
 msgid "Still no peers found in `%s'!\n"
 msgstr "¡Aún no se han encontrado pares en «%s»!\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:1098
+#: src/peerinfo/gnunet-service-peerinfo.c:1100
 #, fuzzy, c-format
 msgid "Cleaning up directory `%s'\n"
 msgstr "Escaneando directorio «%s».\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:1436
+#: src/peerinfo/gnunet-service-peerinfo.c:1438
 #, c-format
 msgid "Importing HELLOs from `%s'\n"
 msgstr "Importando HELLO de «%s»\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:1449
+#: src/peerinfo/gnunet-service-peerinfo.c:1451
 msgid "Skipping import of included HELLOs\n"
 msgstr ""
 
 # Miguel: "Failed to receive" también aquí está traducido como
 # "no se obtuvo respuesta" por claridad.
-#: src/peerinfo/peerinfo_api.c:218
+#: src/peerinfo/peerinfo_api.c:220
 msgid "Failed to receive response from `PEERINFO' service."
 msgstr ""
 "No se obtuvo respuesta del servicio de información de pares (PEERINFO)."
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:237
+#: src/peerinfo-tool/gnunet-peerinfo.c:239
 #, fuzzy, c-format
 msgid "%sPeer `%s'\n"
 msgstr "Par «%s»\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:244
+#: src/peerinfo-tool/gnunet-peerinfo.c:246
 #, c-format
 msgid "\tExpires: %s \t %s\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:297
-#: src/rest-plugins/plugin_rest_peerinfo.c:499
+#: src/peerinfo-tool/gnunet-peerinfo.c:299
+#: src/rest-plugins/plugin_rest_peerinfo.c:501
 #, fuzzy, c-format
 msgid "Failure: Cannot convert address to string for peer `%s'\n"
 msgstr "Se produjo un fallo al resolver la dirección para el par «%s»\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:464
+#: src/peerinfo-tool/gnunet-peerinfo.c:466
 #, fuzzy, c-format
 msgid "Failure: Received invalid %s\n"
 msgstr "recibido mensaje '%s' no válido: %s.\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:478
+#: src/peerinfo-tool/gnunet-peerinfo.c:480
 #, fuzzy, c-format
 msgid "Failed to write HELLO with %u bytes to file `%s'\n"
 msgstr "Se produjo un fallo al procesar «HELLO» en el fichero «%s»\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:497
+#: src/peerinfo-tool/gnunet-peerinfo.c:499
 #, c-format
 msgid "Wrote %s HELLO containing %u addresses with %u bytes to file `%s'\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:797
+#: src/peerinfo-tool/gnunet-peerinfo.c:799
 #, c-format
 msgid "I am peer `%s'.\n"
 msgstr "Yo soy el par «%s».\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:841
+#: src/peerinfo-tool/gnunet-peerinfo.c:843
 msgid "don't resolve host names"
 msgstr "no resolver nombres de máquina"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:846
+#: src/peerinfo-tool/gnunet-peerinfo.c:848
 msgid "output only the identity strings"
 msgstr "mostrar únicamente las cadenas de identidad"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:850
+#: src/peerinfo-tool/gnunet-peerinfo.c:852
 msgid "include friend-only information"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:855
+#: src/peerinfo-tool/gnunet-peerinfo.c:857
 msgid "output our own identity only"
 msgstr "muestra únicamente nuestra propia identidad"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:860
+#: src/peerinfo-tool/gnunet-peerinfo.c:862
 msgid "list all known peers"
 msgstr "mostrar todos los pares conocidos"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:866
+#: src/peerinfo-tool/gnunet-peerinfo.c:868
 msgid "dump hello to file"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:871
+#: src/peerinfo-tool/gnunet-peerinfo.c:873
 msgid "also output HELLO uri(s)"
 msgstr "también mostrar las URI de «HELLO»"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:877
+#: src/peerinfo-tool/gnunet-peerinfo.c:879
 msgid "add given HELLO uri to the database"
 msgstr "añade la URI de «HELLO» dada a la base de datos"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:895
+#: src/peerinfo-tool/gnunet-peerinfo.c:897
 msgid "Print information about peers."
 msgstr "Imprimir información sobre los pares."
 
-#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:103
-#: src/transport/gnunet-service-transport_plugins.c:166
+#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:105
+#: src/transport/gnunet-service-transport_plugins.c:168
 #, c-format
 msgid "Starting transport plugins `%s'\n"
 msgstr "Iniciando los módulos de transporte «%s»\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:107
-#: src/transport/gnunet-service-transport_plugins.c:171
+#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:109
+#: src/transport/gnunet-service-transport_plugins.c:173
 #, c-format
 msgid "Loading `%s' transport plugin\n"
 msgstr "Cargando el módulo de transporte «%s»\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:127
-#: src/transport/gnunet-service-transport_plugins.c:206
+#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:129
+#: src/transport/gnunet-service-transport_plugins.c:208
 #, c-format
 msgid "Failed to load transport plugin for `%s'\n"
 msgstr "Se produjo un fallo al cargar el módulo del transporte para «%s»\n"
 
-#: src/peerstore/gnunet-peerstore.c:89
+#: src/peerstore/gnunet-peerstore.c:91
 msgid "peerstore"
 msgstr ""
 
-#: src/peerstore/gnunet-service-peerstore.c:596
+#: src/peerstore/gnunet-service-peerstore.c:598
 #, fuzzy, c-format
 msgid "Could not load database backend `%s'\n"
 msgstr "No se pudo leer el fichero de la lista negra «%s»\n"
 
-#: src/peerstore/peerstore_api.c:348
-msgid "timeout"
-msgstr ""
-
-#: src/peerstore/peerstore_api.c:564 src/peerstore/peerstore_api.c:613
+#: src/peerstore/peerstore_api.c:532 src/peerstore/peerstore_api.c:581
 #, fuzzy
 msgid "Unexpected iteration response, this should not happen.\n"
 msgstr "El formato de salida es desconocido, ésto no debería pasar.\n"
 
-#: src/peerstore/peerstore_api.c:627
+#: src/peerstore/peerstore_api.c:595
 #, fuzzy
 msgid "Received a malformed response from service."
 msgstr "Recibida petición DNS mal formada de %s\n"
 
-#: src/peerstore/peerstore_api.c:776
+#: src/peerstore/peerstore_api.c:731
 msgid "Received a watch result for a non existing watch.\n"
 msgstr ""
 
-#: src/peerstore/plugin_peerstore_sqlite.c:451
-#: src/psycstore/plugin_psycstore_sqlite.c:280
+#: src/peerstore/plugin_peerstore_sqlite.c:453
 #, fuzzy, c-format
 msgid ""
 "Error executing SQL query: %s\n"
 "  %s\n"
 msgstr "Error abriendo fichero «%s»: %s\n"
 
-#: src/peerstore/plugin_peerstore_sqlite.c:486
-#: src/psycstore/plugin_psycstore_mysql.c:248
-#: src/psycstore/plugin_psycstore_sqlite.c:257
+#: src/peerstore/plugin_peerstore_sqlite.c:488
 #, fuzzy, c-format
 msgid ""
 "Error preparing SQL query: %s\n"
 "  %s\n"
 msgstr "Error leyendo de «%s»: %s\n"
 
-#: src/peerstore/plugin_peerstore_sqlite.c:568
+#: src/peerstore/plugin_peerstore_sqlite.c:570
 #, fuzzy, c-format
 msgid "Unable to create indices: %s.\n"
 msgstr "Se produjo un fallo al crear los índices\n"
 
-#: src/pq/pq_prepare.c:82
+#: src/pq/pq_prepare.c:84
 #, fuzzy, c-format
 msgid "PQprepare (`%s' as `%s') failed with error: %s\n"
 msgstr "«%s» para «%s» falló en %s: %d con error: %s\n"
 
-#: src/psycstore/gnunet-service-psycstore.c:247
-#, fuzzy
-msgid "Failed to store membership information!\n"
-msgstr "Se produjo un fallo al retomar la operación de publicación «%s»: %s\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:269
-#, fuzzy
-msgid "Failed to test membership!\n"
-msgstr "¡Se produjo un fallo al configurar el túnel mesh!\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:298
-#, fuzzy
-msgid "Dropping invalid fragment\n"
-msgstr "Parámetro no válido «%s»\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:309
-#, fuzzy
-msgid "Failed to store fragment\n"
-msgstr "Se produjo un fallo al iniciar el demonio: %s\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:366
-#, fuzzy
-msgid "Failed to get fragment!\n"
-msgstr "¡Se produjo un fallo al obtener la clave de máquina!\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:432
-#, fuzzy
-msgid "Failed to get message!\n"
-msgstr "¡Se produjo un fallo al obtener la clave de máquina!\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:462
-#, fuzzy
-msgid "Failed to get message fragment!\n"
-msgstr "Se produjo un fallo al procesar un mensaje «HELLO»: mal formado\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:492
-#, fuzzy
-msgid "Failed to get master counters!\n"
-msgstr "¡Se produjo un fallo al obtener la clave de máquina!\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:673
-#, 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:683
-#, 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:691
-#, 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:728
-msgid "Tried to set invalid state variable name!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:742
-#, 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:759
-#, 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:777
-#: src/psycstore/gnunet-service-psycstore.c:793
-#, 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:822
-#: src/psycstore/gnunet-service-psycstore.c:879
-msgid "Tried to get invalid state variable name!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:849
-#: src/psycstore/gnunet-service-psycstore.c:894
-#, fuzzy
-msgid "Failed to get state variable!\n"
-msgstr "¡Se produjo un fallo al obtener la clave de máquina!\n"
-
-#: src/psycstore/plugin_psycstore_mysql.c:279
-#, fuzzy
-msgid "Unable to initialize Mysql.\n"
-msgstr "Imposible inicializar SQLite: %s.\n"
-
-#: src/psycstore/plugin_psycstore_mysql.c:289
-#, fuzzy, c-format
-msgid "Failed to run SQL statement `%s'\n"
-msgstr "Se produjo un fallo al preparar la sentencia «%s»\n"
-
-#: src/psycstore/plugin_psycstore_sqlite.c:59
-#, fuzzy, c-format
-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:1922
-#, fuzzy
-msgid "SQLite database running\n"
-msgstr "Base de datos sqlite ejecutándose\n"
-
-#: src/pt/gnunet-daemon-pt.c:421
+#: src/pt/gnunet-daemon-pt.c:423
 msgid "Failed to pack DNS request.  Dropping.\n"
 msgstr "Se produjo un fallo al empaquetar la petición DNS.  Omitiendo.\n"
 
-#: src/pt/gnunet-daemon-pt.c:427
+#: src/pt/gnunet-daemon-pt.c:429
 msgid "# DNS requests mapped to VPN"
 msgstr "# Peticiones DNS asociadas a la VPN"
 
-#: src/pt/gnunet-daemon-pt.c:481
+#: src/pt/gnunet-daemon-pt.c:483
 msgid "# DNS records modified"
 msgstr "# Registros DNS modificados"
 
-#: src/pt/gnunet-daemon-pt.c:665
+#: src/pt/gnunet-daemon-pt.c:667
 msgid "# DNS replies intercepted"
 msgstr "# Respuestas DNS interceptadas"
 
-#: src/pt/gnunet-daemon-pt.c:672
+#: src/pt/gnunet-daemon-pt.c:674
 msgid "Failed to parse DNS request.  Dropping.\n"
 msgstr "Se produjo un fallo al procesar la petición DNS.  Omitiendo.\n"
 
-#: src/pt/gnunet-daemon-pt.c:710
+#: src/pt/gnunet-daemon-pt.c:712
 msgid "# DNS requests dropped (timeout)"
 msgstr "# Peticiones DNS omitidas (expiradas)"
 
-#: src/pt/gnunet-daemon-pt.c:766
+#: src/pt/gnunet-daemon-pt.c:768
 msgid "# DNS requests intercepted"
 msgstr "# Peticiones DNS interceptadas"
 
-#: src/pt/gnunet-daemon-pt.c:771
+#: src/pt/gnunet-daemon-pt.c:773
 #, fuzzy
 msgid "# DNS requests dropped (DNS cadet channel down)"
 msgstr "# Peticiones DNS omitidas (túnel mesh DNS caído)"
 
-#: src/pt/gnunet-daemon-pt.c:779
+#: src/pt/gnunet-daemon-pt.c:781
 msgid "# DNS requests dropped (malformed)"
 msgstr "# Peticiones DNS omitidas (mal formadas)"
 
-#: src/pt/gnunet-daemon-pt.c:874
+#: src/pt/gnunet-daemon-pt.c:876
 msgid "# DNS replies received"
 msgstr "# Respuestas DNS recibidas"
 
-#: src/pt/gnunet-daemon-pt.c:891
+#: src/pt/gnunet-daemon-pt.c:893
 msgid "# DNS replies dropped (too late?)"
 msgstr "# Respuestas DNS (¿demasiado tarde?)"
 
-#: src/pt/gnunet-daemon-pt.c:1217 src/pt/gnunet-daemon-pt.c:1226
-#: src/pt/gnunet-daemon-pt.c:1242 src/pt/gnunet-daemon-pt.c:1251
-#: src/pt/gnunet-daemon-pt.c:1260
+#: src/pt/gnunet-daemon-pt.c:1219 src/pt/gnunet-daemon-pt.c:1228
+#: src/pt/gnunet-daemon-pt.c:1244 src/pt/gnunet-daemon-pt.c:1253
+#: src/pt/gnunet-daemon-pt.c:1262
 #, c-format
 msgid "Failed to connect to %s service.  Exiting.\n"
 msgstr "Se produjo un fallo al conectar con el servicio %s.  Saliendo.\n"
 
-#: src/pt/gnunet-daemon-pt.c:1305
+#: src/pt/gnunet-daemon-pt.c:1307
 msgid "Daemon to run to perform IP protocol translation to GNUnet"
 msgstr ""
 "Demonio a ejecutar para realizar la traducción de protocolo IP a GNUnet"
 
-#: src/reclaim/gnunet-reclaim.c:465
+#: src/reclaim/gnunet-reclaim.c:467
 #, fuzzy, c-format
 msgid "Ego is required\n"
 msgstr "Las opción «%s» o «%s» es necesaria.\n"
 
-#: src/reclaim/gnunet-reclaim.c:473
+#: src/reclaim/gnunet-reclaim.c:475
 #, c-format
 msgid "Attribute value missing!\n"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:481
+#: src/reclaim/gnunet-reclaim.c:483
 #, fuzzy, c-format
 msgid "Requesting party key is required!\n"
 msgstr "el parámetro --section es necesario\n"
 
-#: src/reclaim/gnunet-reclaim.c:504
+#: src/reclaim/gnunet-reclaim.c:506
 msgid "Add attribute"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:510
+#: src/reclaim/gnunet-reclaim.c:512
 msgid "Attribute value"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:515
+#: src/reclaim/gnunet-reclaim.c:517
 msgid "Ego"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:520
+#: src/reclaim/gnunet-reclaim.c:522
 msgid "Audience (relying party)"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:524
+#: src/reclaim/gnunet-reclaim.c:526
 msgid "List attributes for Ego"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:529
+#: src/reclaim/gnunet-reclaim.c:531
 msgid "Issue a ticket"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:534
+#: src/reclaim/gnunet-reclaim.c:536
 msgid "Consume a ticket"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:539
+#: src/reclaim/gnunet-reclaim.c:541
 msgid "Revoke a ticket"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:544
+#: src/reclaim/gnunet-reclaim.c:546
 msgid "Type of attribute"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:549
+#: src/reclaim/gnunet-reclaim.c:551
 msgid "Expiration interval of the attribute"
 msgstr ""
 
-#: src/reclaim/reclaim_api.c:434
+#: src/reclaim/reclaim_api.c:436
 #, fuzzy
 msgid "failed to store record\n"
 msgstr "El almacén de nombres no pudo añadir el registro\n"
 
-#: src/regex/gnunet-daemon-regexprofiler.c:265
+#: src/regex/gnunet-daemon-regexprofiler.c:267
 #, c-format
 msgid "%s service is lacking key configuration settings (%s).  Exiting.\n"
 msgstr ""
 "El servicio %s carece de opciones de configuración de clave (%s).  "
 "Saliendo.\n"
 
-#: src/regex/gnunet-daemon-regexprofiler.c:378
+#: src/regex/gnunet-daemon-regexprofiler.c:380
 #, fuzzy
 msgid "Daemon to announce regular expressions for the peer using cadet."
 msgstr "Demonio para anunciar expresiones regulares para el par usando mesh."
 
-#: src/regex/gnunet-regex-profiler.c:1384
+#: src/regex/gnunet-regex-profiler.c:1386
 msgid "No configuration file given. Exiting\n"
 msgstr "No se ha introducido ningún fichero de configuración. Saliendo\n"
 
-#: src/regex/gnunet-regex-profiler.c:1425
-#: src/regex/gnunet-regex-simulation-profiler.c:628
+#: src/regex/gnunet-regex-profiler.c:1427
+#: src/regex/gnunet-regex-simulation-profiler.c:630
 #, c-format
 msgid "No policy directory specified on command line. Exiting.\n"
 msgstr ""
 "No se ha especificado una política de directorios en la línea de comandos. "
 "Saliendo.\n"
 
-#: src/regex/gnunet-regex-profiler.c:1431
-#: src/regex/gnunet-regex-simulation-profiler.c:636
+#: src/regex/gnunet-regex-profiler.c:1433
+#: src/regex/gnunet-regex-simulation-profiler.c:638
 #, c-format
 msgid "Specified policies directory does not exist. Exiting.\n"
 msgstr "Las políticas de directorio especificadas no existen. Saliendo.\n"
 
-#: src/regex/gnunet-regex-profiler.c:1438
+#: src/regex/gnunet-regex-profiler.c:1440
 #, c-format
 msgid "No files found in `%s'\n"
 msgstr "No se han encontrado ficheros en «%s»\n"
 
-#: src/regex/gnunet-regex-profiler.c:1447
+#: src/regex/gnunet-regex-profiler.c:1449
 msgid "No search strings file given. Exiting.\n"
 msgstr "No se ha proporcionado un fichero de cadenas de búsqueda. Saliendo.\n"
 
-#: src/regex/gnunet-regex-profiler.c:1467
+#: src/regex/gnunet-regex-profiler.c:1469
 msgid "Error loading search strings. Exiting.\n"
 msgstr "Error cargando cadenas de búsqueda. Saliendo.\n"
 
-#: src/regex/gnunet-regex-profiler.c:1555
+#: src/regex/gnunet-regex-profiler.c:1557
 msgid "name of the file for writing statistics"
 msgstr "nombre del fichero para escribir las estadísticas"
 
-#: src/regex/gnunet-regex-profiler.c:1561
+#: src/regex/gnunet-regex-profiler.c:1563
 #, fuzzy
 msgid "wait TIMEOUT before ending the experiment"
 msgstr ""
 "esperar «TIMEOUT» antes de considerar que una coincidencia de cadenas como "
 "fallida"
 
-#: src/regex/gnunet-regex-profiler.c:1567
+#: src/regex/gnunet-regex-profiler.c:1569
 msgid "directory with policy files"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1574
+#: src/regex/gnunet-regex-profiler.c:1576
 #, fuzzy
 msgid "name of file with input strings"
 msgstr "nombre del fichero para escribir las estadísticas"
 
-#: src/regex/gnunet-regex-profiler.c:1580
+#: src/regex/gnunet-regex-profiler.c:1582
 #, fuzzy
 msgid "name of file with hosts' names"
 msgstr "nombre del fichero para escribir las estadísticas"
 
-#: src/regex/gnunet-regex-profiler.c:1593
+#: src/regex/gnunet-regex-profiler.c:1595
 msgid "Profiler for regex"
 msgstr "Perfilador para expresiones regulares."
 
-#: src/regex/gnunet-regex-simulation-profiler.c:697
+#: src/regex/gnunet-regex-simulation-profiler.c:699
 msgid "name of the table to write DFAs"
 msgstr "nombre de la tabla para escribir los DFA"
 
 # WTF???
-#: src/regex/gnunet-regex-simulation-profiler.c:703
+#: src/regex/gnunet-regex-simulation-profiler.c:705
 msgid "maximum path compression length"
 msgstr "longitud de la máxima compresión de rutas"
 
-#: src/regex/gnunet-regex-simulation-profiler.c:717
+#: src/regex/gnunet-regex-simulation-profiler.c:719
 msgid "Profiler for regex library"
 msgstr "Analizador de rendimiento para la biblioteca de expresiones regulares"
 
-#: src/regex/regex_api_announce.c:150
+#: src/regex/regex_api_announce.c:152
 #, fuzzy, c-format
 msgid "Regex `%s' is too long!\n"
 msgstr "El servicio «%s» no está ejecutandose\n"
 
-#: src/regex/regex_api_search.c:210
+#: src/regex/regex_api_search.c:212
 #, fuzzy, c-format
 msgid "Search string `%s' is too long!\n"
 msgstr "El servicio «%s» no está ejecutandose\n"
 
-#: src/rest/gnunet-rest-server.c:925
+#: src/rest/gnunet-rest-server.c:927
 #, fuzzy
 msgid "listen on specified port (default: 7776)"
 msgstr "escuchar en el puerto especificado (predeterminado: 7777)"
 
-#: src/rest/gnunet-rest-server.c:942
+#: src/rest/gnunet-rest-server.c:944
 #, fuzzy
 msgid "GNUnet REST server"
 msgstr "Herramienta de acceso GNUnet GNS"
 
-#: src/rest-plugins/plugin_rest_copying.c:207
+#: src/rest-plugins/plugin_rest_copying.c:209
 #, fuzzy
 msgid "COPYING REST API initialized\n"
 msgstr "Conexión fallida\n"
 
-#: src/rest-plugins/plugin_rest_credential.c:1126
+#: src/rest-plugins/plugin_rest_credential.c:1128
 #, fuzzy
 msgid "GNS REST API initialized\n"
 msgstr "Conexión fallida\n"
 
-#: src/rest-plugins/plugin_rest_gns.c:450
+#: src/rest-plugins/plugin_rest_gns.c:452
 #, fuzzy
 msgid "Gns REST API initialized\n"
 msgstr "Conexión fallida\n"
 
-#: src/rest-plugins/plugin_rest_identity.c:1295
+#: src/rest-plugins/plugin_rest_identity.c:1297
 #, fuzzy
 msgid "Identity REST API initialized\n"
 msgstr "Conexión fallida\n"
 
-#: src/rest-plugins/plugin_rest_namestore.c:1077
+#: src/rest-plugins/plugin_rest_namestore.c:1079
 #, fuzzy
 msgid "Namestore REST API initialized\n"
 msgstr "Conexión fallida\n"
 
-#: src/rest-plugins/plugin_rest_openid_connect.c:2135
+#: src/rest-plugins/plugin_rest_openid_connect.c:2245
 #: src/rest-plugins/plugin_rest_reclaim.c:1079
 #, fuzzy
 msgid "Identity Provider REST API initialized\n"
 msgstr "Conexión fallida\n"
 
-#: src/rest-plugins/plugin_rest_peerinfo.c:794
+#: src/rest-plugins/plugin_rest_peerinfo.c:796
 #, fuzzy
 msgid "Peerinfo REST API initialized\n"
 msgstr "Conexión fallida\n"
 
-#: src/revocation/gnunet-revocation.c:127
+#: src/revocation/gnunet-revocation.c:129
 #, fuzzy, c-format
 msgid "Key `%s' is valid\n"
 msgstr "Formato del pseudónimo '%s' no es válido.\n"
 
 # Miguel: ¿Quizá fuese mejor «Se ha parado el servicio x»?
 # Esto también es aplicable a las siguientes traducciones.
-#: src/revocation/gnunet-revocation.c:132
+#: src/revocation/gnunet-revocation.c:134
 #, fuzzy, c-format
 msgid "Key `%s' has been revoked\n"
 msgstr "El servicio «%s» se ha parado.\n"
 
-#: src/revocation/gnunet-revocation.c:138
+#: src/revocation/gnunet-revocation.c:140
 #, fuzzy
 msgid "Internal error\n"
 msgstr "Error interno."
 
-#: src/revocation/gnunet-revocation.c:164
+#: src/revocation/gnunet-revocation.c:166
 #, c-format
 msgid "Key for ego `%s' is still valid, revocation failed (!)\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:169
+#: src/revocation/gnunet-revocation.c:171
 #, fuzzy
 msgid "Revocation failed (!)\n"
 msgstr "La operación ha fallado.\n"
 
-#: src/revocation/gnunet-revocation.c:174
+#: src/revocation/gnunet-revocation.c:176
 #, c-format
 msgid "Key for ego `%s' has been successfully revoked\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:179
+#: src/revocation/gnunet-revocation.c:181
 msgid "Revocation successful.\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:184
+#: src/revocation/gnunet-revocation.c:186
 msgid "Internal error, key revocation might have failed\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:321
+#: src/revocation/gnunet-revocation.c:323
 #, c-format
 msgid "Revocation certificate for `%s' stored in `%s'\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:350
+#: src/revocation/gnunet-revocation.c:352
 #, fuzzy, c-format
 msgid "Ego `%s' not found.\n"
 msgstr "Módulo «%s» no encontrado\n"
 
-#: src/revocation/gnunet-revocation.c:371
+#: src/revocation/gnunet-revocation.c:373
 #, c-format
 msgid "Error: revocation certificate in `%s' is not for `%s'\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:391
+#: src/revocation/gnunet-revocation.c:393
 msgid "Revocation certificate ready\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:401
+#: src/revocation/gnunet-revocation.c:403
 msgid "Revocation certificate not ready, calculating proof of work\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:435 src/social/gnunet-social.c:1178
+#: src/revocation/gnunet-revocation.c:437
 #, fuzzy, c-format
 msgid "Public key `%s' malformed\n"
 msgstr "El bloque del tipo %u está mal formado\n"
 
-#: src/revocation/gnunet-revocation.c:448
+#: src/revocation/gnunet-revocation.c:450
 msgid ""
 "Testing and revoking at the same time is not allowed, only executing test.\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:468
+#: src/revocation/gnunet-revocation.c:470
 #, fuzzy
 msgid "No filename to store revocation certificate given.\n"
 msgstr "Se produjo un fallo al leer la lista de amigos de «%s»\n"
 
-#: src/revocation/gnunet-revocation.c:489
+#: src/revocation/gnunet-revocation.c:491
 #, fuzzy, c-format
 msgid "Failed to read revocation certificate from `%s'\n"
 msgstr "Se produjo un fallo al leer la lista de amigos de «%s»\n"
 
-#: src/revocation/gnunet-revocation.c:514
+#: src/revocation/gnunet-revocation.c:516
 #, fuzzy
 msgid "No action specified. Nothing to do.\n"
 msgstr "Ninguna interfaz especificada, usando la marcada por defecto\n"
 
-#: src/revocation/gnunet-revocation.c:533
+#: src/revocation/gnunet-revocation.c:535
 msgid "use NAME for the name of the revocation file"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:539
+#: src/revocation/gnunet-revocation.c:541
 msgid ""
 "revoke the private key associated for the the private key associated with "
 "the ego NAME "
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:544
+#: src/revocation/gnunet-revocation.c:546
 msgid "actually perform revocation, otherwise we just do the precomputation"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:550
+#: src/revocation/gnunet-revocation.c:552
 msgid "test if the public key KEY has been revoked"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:457
+#: src/revocation/gnunet-service-revocation.c:459
 #, fuzzy
 msgid "# unsupported revocations received via set union"
 msgstr "Opciones de paquete IPv4 recibidas.  Ignoradas.\n"
 
-#: src/revocation/gnunet-service-revocation.c:466
+#: src/revocation/gnunet-service-revocation.c:468
 #, fuzzy
 msgid "# revocation messages received via set union"
 msgstr "# mensajes «DATA» recibidos vía WLAN"
 
-#: src/revocation/gnunet-service-revocation.c:471
+#: src/revocation/gnunet-service-revocation.c:473
 #, c-format
 msgid "Error computing revocation set union with %s\n"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:475
+#: src/revocation/gnunet-service-revocation.c:477
 #, fuzzy
 msgid "# revocation set unions failed"
 msgstr "# sesiones wlan creadas"
 
-#: src/revocation/gnunet-service-revocation.c:484
+#: src/revocation/gnunet-service-revocation.c:486
 #, fuzzy
 msgid "# revocation set unions completed"
 msgstr "# transmisiones de fragmentos completadas"
 
-#: src/revocation/gnunet-service-revocation.c:523
+#: src/revocation/gnunet-service-revocation.c:525
 msgid "SET service crashed, terminating revocation service\n"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:865
+#: src/revocation/gnunet-service-revocation.c:867
 #, fuzzy
 msgid "Could not open revocation database file!"
 msgstr "No se pudo conectar con el almacén de datos."
 
-#: src/rps/gnunet-rps.c:258
+#: src/rps/gnunet-rps.c:260
 msgid "Seed a PeerID"
 msgstr ""
 
-#: src/rps/gnunet-rps.c:262
+#: src/rps/gnunet-rps.c:264
 msgid "Get updates of view (0 for infinite updates)"
 msgstr ""
 
-#: src/rps/gnunet-rps.c:266
+#: src/rps/gnunet-rps.c:268
 msgid "Get peers from biased stream"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2770
+#: src/rps/gnunet-rps-profiler.c:2959
 #, fuzzy
 msgid "duration of the profiling"
 msgstr ""
 "La configuración o la versión de GNUnet cambiaron.  ¡Debes ejecutar '%s'!\n"
 
-#: src/rps/gnunet-rps-profiler.c:2776
+#: src/rps/gnunet-rps-profiler.c:2965
 #, fuzzy
 msgid "timeout for the profiling"
 msgstr "Especificar el tipo del registro a buscar"
 
-#: src/rps/gnunet-rps-profiler.c:2782
+#: src/rps/gnunet-rps-profiler.c:2971
 #, fuzzy
 msgid "number of PeerIDs to request"
 msgstr "número de pares para empezar"
 
-#: src/rps/gnunet-rps-profiler.c:2797
+#: src/rps/gnunet-rps-profiler.c:2986
 #, fuzzy
 msgid "Measure quality and performance of the RPS service."
 msgstr "Medir la calidad y rendimiento del servicio NSE."
 
-#: src/scalarproduct/gnunet-scalarproduct.c:218
+#: src/scalarproduct/gnunet-scalarproduct.c:220
 #, fuzzy
 msgid "You must specify at least one message ID to check!\n"
 msgstr "Debes especificar un fichero a inspeccionar.\n"
 
-#: src/scalarproduct/gnunet-scalarproduct.c:225
+#: src/scalarproduct/gnunet-scalarproduct.c:227
 msgid "This program needs a session identifier for comparing vectors.\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:238
+#: src/scalarproduct/gnunet-scalarproduct.c:240
 #, c-format
 msgid ""
 "Tried to set initiator mode, as peer ID was given. However, `%s' is not a "
 "valid peer identifier.\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:256
+#: src/scalarproduct/gnunet-scalarproduct.c:258
 msgid "Need elements to compute the scalarproduct, got none.\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:278
+#: src/scalarproduct/gnunet-scalarproduct.c:280
 #, fuzzy, c-format
 msgid "Malformed input, could not parse `%s'\n"
 msgstr "Se produjo un fallo al iniciar el servicio «%s»\n"
 
-#: src/scalarproduct/gnunet-scalarproduct.c:296
+#: src/scalarproduct/gnunet-scalarproduct.c:298
 #, fuzzy, c-format
 msgid "Could not convert `%s' to int64_t.\n"
 msgstr "No se pudo conectar al servicio %s.\n"
 
-#: src/scalarproduct/gnunet-scalarproduct.c:323
+#: src/scalarproduct/gnunet-scalarproduct.c:325
 #, c-format
 msgid "Failed to initiate computation, were all keys unique?\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:349
-#: src/scalarproduct/gnunet-scalarproduct.c:355
+#: src/scalarproduct/gnunet-scalarproduct.c:351
+#: src/scalarproduct/gnunet-scalarproduct.c:357
 msgid ""
 "A comma separated list of elements to compare as vector with our remote peer."
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:361
+#: src/scalarproduct/gnunet-scalarproduct.c:363
 msgid ""
 "[Optional] peer to calculate our scalarproduct with. If this parameter is "
 "not given, the service will wait for a remote peer to compute the request."
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:367
+#: src/scalarproduct/gnunet-scalarproduct.c:369
 msgid "Transaction ID shared with peer."
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:377
+#: src/scalarproduct/gnunet-scalarproduct.c:379
 msgid "Calculate the Vectorproduct with a GNUnet peer."
 msgstr ""
 
-#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1399
-#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1343
-#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1170
-#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1061
+#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1401
+#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1345
+#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1172
+#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1063
 #, fuzzy
 msgid "Connect to CADET failed\n"
 msgstr "Conexión fallida (¿bug?)\n"
 
-#: src/scalarproduct/scalarproduct_api.c:183
+#: src/scalarproduct/scalarproduct_api.c:185
 msgid "Keys given to SCALARPRODUCT not unique!\n"
 msgstr ""
 
-#: src/secretsharing/gnunet-secretsharing-profiler.c:614
+#: src/secretsharing/gnunet-secretsharing-profiler.c:616
 msgid "dkg start delay"
 msgstr ""
 
-#: src/secretsharing/gnunet-secretsharing-profiler.c:620
+#: src/secretsharing/gnunet-secretsharing-profiler.c:622
 msgid "dkg timeout"
 msgstr ""
 
-#: src/secretsharing/gnunet-secretsharing-profiler.c:626
+#: src/secretsharing/gnunet-secretsharing-profiler.c:628
 msgid "threshold"
 msgstr ""
 
-#: src/secretsharing/gnunet-secretsharing-profiler.c:631
+#: src/secretsharing/gnunet-secretsharing-profiler.c:633
 msgid "also profile decryption"
 msgstr ""
 
-#: src/set/gnunet-service-set.c:2004
+#: src/set/gnunet-service-set.c:2005
 #, fuzzy
 msgid "Could not connect to CADET service\n"
 msgstr "¡No se pudo conectar al servicio %s!\n"
 
 # Miguel: Conjunto resta.
-#: src/set/gnunet-set-ibf-profiler.c:250
+#: src/set/gnunet-set-ibf-profiler.c:252
 msgid "number of element in set A-B"
 msgstr "número de elementos en el conjunto A-B"
 
-#: src/set/gnunet-set-ibf-profiler.c:256
+#: src/set/gnunet-set-ibf-profiler.c:258
 msgid "number of element in set B-A"
 msgstr "número de elementos en el conjunto B-A"
 
 # Miguel: Conjunto unión.
-#: src/set/gnunet-set-ibf-profiler.c:262
+#: src/set/gnunet-set-ibf-profiler.c:264
 msgid "number of common elements in A and B"
 msgstr "número de elementos comunes en A y B"
 
 # Miguel: "hash" me tiene un poco frito. ¿Existe alguna traducción buena?
-#: src/set/gnunet-set-ibf-profiler.c:268
+#: src/set/gnunet-set-ibf-profiler.c:270
 msgid "hash num"
 msgstr "número de hash"
 
-#: src/set/gnunet-set-ibf-profiler.c:274
+#: src/set/gnunet-set-ibf-profiler.c:276
 msgid "ibf size"
 msgstr "tamaño ibf"
 
-#: src/set/gnunet-set-profiler.c:442
+#: src/set/gnunet-set-profiler.c:444
 msgid "use byzantine mode"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:448
+#: src/set/gnunet-set-profiler.c:450
 msgid "force sending full set"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:454
+#: src/set/gnunet-set-profiler.c:456
 msgid "number delta operation"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:466
+#: src/set/gnunet-set-profiler.c:468
 msgid "operation to execute"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:472
+#: src/set/gnunet-set-profiler.c:474
 msgid "element size"
 msgstr ""
 
-#: src/social/gnunet-social.c:1164
-#, fuzzy
-msgid "--place missing or invalid.\n"
-msgstr "Parámetro no válido «%s»\n"
-
-#: src/social/gnunet-social.c:1215
-msgid "assign --name in state to --data"
-msgstr ""
-
-#: src/social/gnunet-social.c:1220
-msgid "say good-bye and leave somebody else's place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1225
-msgid "create a place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1230
-msgid "destroy a place we were hosting"
-msgstr ""
-
-#: src/social/gnunet-social.c:1235
-msgid "enter somebody else's place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1241
-msgid "find state matching name prefix"
-msgstr ""
-
-#: src/social/gnunet-social.c:1246
-msgid "replay history of messages up to the given --limit"
-msgstr ""
-
-#: src/social/gnunet-social.c:1251
-msgid "reconnect to a previously created place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1256
-msgid "publish something to a place we are hosting"
-msgstr ""
-
-#: src/social/gnunet-social.c:1261
-msgid "reconnect to a previously entered place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1266
-msgid "search for state matching exact name"
-msgstr ""
-
-#: src/social/gnunet-social.c:1271
-msgid "submit something to somebody's place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1276
-msgid "list of egos and subscribed places"
-msgstr ""
-
-#: src/social/gnunet-social.c:1281
-msgid "extract and replay history between message IDs --start and --until"
-msgstr ""
-
-#: src/social/gnunet-social.c:1290
-msgid "application ID to use when connecting"
-msgstr ""
-
-#: src/social/gnunet-social.c:1296
-msgid "message body or state value"
-msgstr ""
-
-#: src/social/gnunet-social.c:1302
-#, fuzzy
-msgid "name or public key of ego"
-msgstr "Parámetro no válido «%s»\n"
-
-#: src/social/gnunet-social.c:1307
-#, fuzzy
-msgid "wait for incoming messages"
-msgstr "Falló al entregar el mensaje '%s'.\n"
-
-#: src/social/gnunet-social.c:1313
-#, fuzzy
-msgid "GNS name"
-msgstr "Mostrar el _nombre"
-
-#: src/social/gnunet-social.c:1319
-msgid "peer ID for --guest-enter"
-msgstr ""
-
-#: src/social/gnunet-social.c:1325
-msgid "name (key) to query from state"
-msgstr ""
-
-#: src/social/gnunet-social.c:1331
-#, fuzzy
-msgid "method name"
-msgstr "Mostrar el _nombre"
-
-#: src/social/gnunet-social.c:1337
-#, fuzzy
-msgid "number of messages to replay from history"
-msgstr "número de mensajes a usar por iteración"
-
-#: src/social/gnunet-social.c:1343
-msgid "key address of place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1349
-msgid "start message ID for history replay"
-msgstr ""
-
-#: src/social/gnunet-social.c:1354
-msgid "respond to entry requests by admitting all guests"
-msgstr ""
-
-#: src/social/gnunet-social.c:1360
-msgid "end message ID for history replay"
-msgstr ""
-
-#: src/social/gnunet-social.c:1365
-msgid "respond to entry requests by refusing all guests"
-msgstr ""
-
-#: src/social/gnunet-social.c:1375
-msgid ""
-"gnunet-social - Interact with the social service: enter/leave, send/receive "
-"messages, access history and state.\n"
-msgstr ""
-
-#: src/sq/sq.c:52
+#: src/sq/sq.c:54
 #, c-format
 msgid "Failure to bind %u-th SQL parameter\n"
 msgstr ""
 
-#: src/sq/sq.c:59
+#: src/sq/sq.c:61
 msgid "Failure in sqlite3_reset (!)\n"
 msgstr ""
 
-#: src/sq/sq.c:137
+#: src/sq/sq.c:139
 #, fuzzy, c-format
 msgid "Failed to reset sqlite statement with error: %s\n"
 msgstr "«%s» falló al resolver el método «%s» con error: %s\n"
 
-#: src/statistics/gnunet-service-statistics.c:336
+#: src/statistics/gnunet-service-statistics.c:338
 #, c-format
 msgid "Wrote %llu bytes of statistics to `%s'\n"
 msgstr "Escritos %llu bytes de estadísticas a «%s»\n"
 
-#: src/statistics/gnunet-service-statistics.c:1084
+#: src/statistics/gnunet-service-statistics.c:1086
 #, c-format
 msgid "Loading %llu bytes of statistics from `%s'\n"
 msgstr "Cargando %llu bytes de estadísticas de «%s»\n"
 
-#: src/statistics/gnunet-statistics.c:407
-#: src/statistics/gnunet-statistics.c:448
+#: src/statistics/gnunet-statistics.c:409
+#: src/statistics/gnunet-statistics.c:450
 msgid "Failed to obtain statistics.\n"
 msgstr "Se produjo un fallo al obtener las estadísticas.\n"
 
-#: src/statistics/gnunet-statistics.c:410
-#: src/statistics/gnunet-statistics.c:451
+#: src/statistics/gnunet-statistics.c:412
+#: src/statistics/gnunet-statistics.c:453
 #, c-format
 msgid "Failed to obtain statistics from host `%s:%llu'\n"
 msgstr ""
 "Se produjo un fallo al obtener las estadísticas de la máquina «%s:%llu»\n"
 
-#: src/statistics/gnunet-statistics.c:526
+#: src/statistics/gnunet-statistics.c:528
 msgid "Missing argument: subsystem \n"
 msgstr "Falta el parámetro: subsistema\n"
 
-#: src/statistics/gnunet-statistics.c:534
+#: src/statistics/gnunet-statistics.c:536
 msgid "Missing argument: name\n"
 msgstr "Falta el argumento: nombre\n"
 
-#: src/statistics/gnunet-statistics.c:577
+#: src/statistics/gnunet-statistics.c:579
 #, c-format
 msgid "No subsystem or name given\n"
 msgstr "No se proporcionó un subsistema o un nombre\n"
 
-#: src/statistics/gnunet-statistics.c:592
+#: src/statistics/gnunet-statistics.c:594
 #, c-format
 msgid "Failed to initialize watch routine\n"
 msgstr "Se produjo un fallo al inicializar la rutina de visualización\n"
 
-#: src/statistics/gnunet-statistics.c:727
+#: src/statistics/gnunet-statistics.c:729
 #, c-format
 msgid "Invalid argument `%s'\n"
 msgstr "Parámetro no válido «%s»\n"
 
-#: src/statistics/gnunet-statistics.c:745
+#: src/statistics/gnunet-statistics.c:747
 #, c-format
 msgid "A port is required to connect to host `%s'\n"
 msgstr "Se necesita un puerto para conectar con la máquina «%s»\n"
 
-#: src/statistics/gnunet-statistics.c:753
+#: src/statistics/gnunet-statistics.c:755
 #, c-format
 msgid "A port has to be between 1 and 65535 to connect to host `%s'\n"
 msgstr "Un puerto debe estar entre 1 y 65534 para conectar a la máquina «%s»\n"
 
-#: src/statistics/gnunet-statistics.c:784
+#: src/statistics/gnunet-statistics.c:786
 #, c-format
 msgid "Not able to watch testbed nodes (yet - feel free to implement)\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:817
+#: src/statistics/gnunet-statistics.c:819
 msgid "limit output to statistics for the given NAME"
 msgstr "limita la salida de estadísticas para el nombre (NAME) dado"
 
-#: src/statistics/gnunet-statistics.c:822
+#: src/statistics/gnunet-statistics.c:824
 msgid "make the value being set persistent"
 msgstr "hacer el valor persistente"
 
-#: src/statistics/gnunet-statistics.c:828
+#: src/statistics/gnunet-statistics.c:830
 msgid "limit output to the given SUBSYSTEM"
 msgstr "límite de salida para el subsistema (SUBSYSTEM) dado"
 
-#: src/statistics/gnunet-statistics.c:834
+#: src/statistics/gnunet-statistics.c:836
 msgid "use as csv separator"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:840
+#: src/statistics/gnunet-statistics.c:842
 msgid "path to the folder containing the testbed data"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:845
+#: src/statistics/gnunet-statistics.c:847
 msgid "just print the statistics value"
 msgstr "imprime el valor de las estadísticas"
 
-#: src/statistics/gnunet-statistics.c:850
+#: src/statistics/gnunet-statistics.c:852
 msgid "watch value continuously"
 msgstr "visualiza el valor continuamente"
 
-#: src/statistics/gnunet-statistics.c:856
+#: src/statistics/gnunet-statistics.c:858
 msgid "connect to remote host"
 msgstr "conectar a equipo remoto"
 
-#: src/statistics/gnunet-statistics.c:862
+#: src/statistics/gnunet-statistics.c:864
 msgid "port for remote host"
 msgstr "puerto del equipo remoto"
 
-#: src/statistics/gnunet-statistics.c:879
+#: src/statistics/gnunet-statistics.c:881
 msgid "Print statistics about GNUnet operations."
 msgstr "Imprime estadísticas acerca de las operaciones de GNUnet."
 
-#: src/statistics/statistics_api.c:751
+#: src/statistics/statistics_api.c:753
 msgid "Could not save some persistent statistics\n"
 msgstr "No se pudieron guardar algunas estadísticas persistentes\n"
 
-#: src/testbed/generate-underlay-topology.c:223
+#: src/testbed/generate-underlay-topology.c:225
 #, fuzzy
 msgid "Need at least 2 arguments\n"
 msgstr "Tiene que especificar una URI como parámetro.\n"
 
-#: src/testbed/generate-underlay-topology.c:228
+#: src/testbed/generate-underlay-topology.c:230
 msgid "Database filename missing\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:235
+#: src/testbed/generate-underlay-topology.c:237
 #, fuzzy
 msgid "Topology string missing\n"
 msgstr "falta una opción"
 
-#: src/testbed/generate-underlay-topology.c:240
+#: src/testbed/generate-underlay-topology.c:242
 #, fuzzy, c-format
 msgid "Invalid topology: %s\n"
 msgstr "Parámetro no válido «%s»\n"
 
-#: src/testbed/generate-underlay-topology.c:253
+#: src/testbed/generate-underlay-topology.c:255
 #, c-format
 msgid "An argument is missing for given topology `%s'\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:259
+#: src/testbed/generate-underlay-topology.c:261
 #, fuzzy, c-format
 msgid "Invalid argument `%s' given as topology argument\n"
 msgstr "Parámetro no válido «%s»\n"
 
-#: src/testbed/generate-underlay-topology.c:267
+#: src/testbed/generate-underlay-topology.c:269
 #, fuzzy, c-format
 msgid "Filename argument missing for topology `%s'\n"
 msgstr "¡Falló mientras se esperaba la configuración topológica!\n"
 
-#: src/testbed/generate-underlay-topology.c:281
+#: src/testbed/generate-underlay-topology.c:283
 #, c-format
 msgid "Second argument for topology `%s' is missing\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:287
+#: src/testbed/generate-underlay-topology.c:289
 #, fuzzy, c-format
 msgid "Invalid argument `%s'; expecting unsigned int\n"
 msgstr "Argumento no válido para '%s' en %s:%d.\n"
 
-#: src/testbed/generate-underlay-topology.c:340
-#: src/testbed/gnunet-testbed-profiler.c:281
+#: src/testbed/generate-underlay-topology.c:342
+#: src/testbed/gnunet-testbed-profiler.c:283
 msgid "create COUNT number of peers"
 msgstr "crea «COUNT» número de pares"
 
-#: src/testbed/generate-underlay-topology.c:350
+#: src/testbed/generate-underlay-topology.c:352
 msgid ""
 "Generates SQLite3 database representing a given underlay topology.\n"
 "Usage: gnunet-underlay-topology [OPTIONS] db-filename TOPO [TOPOOPTS]\n"
@@ -6920,63 +6715,63 @@ msgid ""
 "content/topology-file-format\n"
 msgstr ""
 
-#: src/testbed/gnunet-daemon-latency-logger.c:313
+#: src/testbed/gnunet-daemon-latency-logger.c:315
 msgid "Daemon to log latency values of connections to neighbours"
 msgstr ""
 
-#: src/testbed/gnunet-daemon-testbed-blacklist.c:247
+#: src/testbed/gnunet-daemon-testbed-blacklist.c:249
 msgid ""
 "Daemon to restrict incoming transport layer connections during testbed "
 "deployments"
 msgstr ""
 
-#: src/testbed/gnunet-daemon-testbed-underlay.c:231 src/testing/list-keys.c:46
-#: src/testing/testing.c:286 src/util/gnunet-ecc.c:310
+#: src/testbed/gnunet-daemon-testbed-underlay.c:233 src/testing/list-keys.c:46
+#: src/testing/testing.c:288 src/util/gnunet-ecc.c:312
 #, c-format
 msgid "Incorrect hostkey file format: %s\n"
 msgstr "El fichero de máquinas no tiene el formato correcto: %s\n"
 
-#: src/testbed/gnunet-daemon-testbed-underlay.c:469
+#: src/testbed/gnunet-daemon-testbed-underlay.c:471
 msgid "Daemon to restrict underlay network in testbed deployments"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_cpustatus.c:726
+#: src/testbed/gnunet-service-testbed_cpustatus.c:728
 #, c-format
 msgid ""
 "Cannot open %s for writing load statistics.  Not logging load statistics\n"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1157
+#: src/testbed/gnunet-service-testbed_peers.c:1159
 #, fuzzy, c-format
 msgid "%s is stopped"
 msgstr "# elementos almacenados"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1159
+#: src/testbed/gnunet-service-testbed_peers.c:1161
 #, fuzzy, c-format
 msgid "%s is starting"
 msgstr "'%s' comenzando\n"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1161
+#: src/testbed/gnunet-service-testbed_peers.c:1163
 #, c-format
 msgid "%s is stopping"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1163
+#: src/testbed/gnunet-service-testbed_peers.c:1165
 #, fuzzy, c-format
 msgid "%s is starting already"
 msgstr "'%s' comenzando\n"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1165
+#: src/testbed/gnunet-service-testbed_peers.c:1167
 #, c-format
 msgid "%s is stopping already"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1167
+#: src/testbed/gnunet-service-testbed_peers.c:1169
 #, c-format
 msgid "%s is started already"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1169
+#: src/testbed/gnunet-service-testbed_peers.c:1171
 #, c-format
 msgid "%s is stopped already"
 msgstr ""
@@ -6984,23 +6779,23 @@ msgstr ""
 # Miguel: ¿Debería cambiar las siglas de ARM?
 # De momento las he mantenido con una traducción en
 # otro mensaje.
-#: src/testbed/gnunet-service-testbed_peers.c:1171
+#: src/testbed/gnunet-service-testbed_peers.c:1173
 #, fuzzy, c-format
 msgid "%s service is not known to ARM"
 msgstr "El servicio «%s» es desconocido para el ARM.\n"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1173
+#: src/testbed/gnunet-service-testbed_peers.c:1175
 #, fuzzy, c-format
 msgid "%s service failed to start"
 msgstr "El proceso del servicio no devolvió un estado\n"
 
 # Miguel: ¿Es mejor «ya que» que «porque» o «debido al apagado»?
-#: src/testbed/gnunet-service-testbed_peers.c:1175
+#: src/testbed/gnunet-service-testbed_peers.c:1177
 #, fuzzy, c-format
 msgid "%s service can't be started because ARM is shutting down"
 msgstr "Petición ignorada porque el ARM se está apagando.\n"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1177
+#: src/testbed/gnunet-service-testbed_peers.c:1179
 #, fuzzy, c-format
 msgid "%.s Unknown result code."
 msgstr "Código de respuesta del ARM desconocido.\n"
@@ -7015,167 +6810,167 @@ msgstr "Esperando a los pares para conectar (%u ciclos restantes)...\n"
 msgid "Spawning process `%s'\n"
 msgstr "Iniciando el proceso auxiliar (HELPER) «%s»\n"
 
-#: src/testbed/gnunet-testbed-profiler.c:287
+#: src/testbed/gnunet-testbed-profiler.c:289
 msgid "tolerate COUNT number of continious timeout failures"
 msgstr "tolerar un número «COUNT» de continuas expiraciones de plazo"
 
-#: src/testbed/gnunet-testbed-profiler.c:292
+#: src/testbed/gnunet-testbed-profiler.c:294
 msgid ""
 "run profiler in non-interactive mode where upon testbed setup the profiler "
 "does not wait for a keystroke but continues to run until a termination "
 "signal is received"
 msgstr ""
 
-#: src/testbed/testbed_api.c:408
+#: src/testbed/testbed_api.c:410
 #, c-format
 msgid "Adding host %u failed with error: %s\n"
 msgstr "No se pudo añadir la máquina %u por el error: %s\n"
 
-#: src/testbed/testbed_api_hosts.c:411
+#: src/testbed/testbed_api_hosts.c:413
 #, c-format
 msgid "Hosts file %s not found\n"
 msgstr "El fichero de máquinas %s no fue encontrado\n"
 
-#: src/testbed/testbed_api_hosts.c:419
+#: src/testbed/testbed_api_hosts.c:421
 #, c-format
 msgid "Hosts file %s has no data\n"
 msgstr "El archivo de máquinas %s no tiene datos\n"
 
-#: src/testbed/testbed_api_hosts.c:426
+#: src/testbed/testbed_api_hosts.c:428
 #, c-format
 msgid "Hosts file %s cannot be read\n"
 msgstr "El archivo de máquinas %s no puede leerse\n"
 
-#: src/testbed/testbed_api_hosts.c:567
+#: src/testbed/testbed_api_hosts.c:569
 #, c-format
 msgid "The function %s is only available when compiled with (--with-ll)\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:816
+#: src/testbed/testbed_api_testbed.c:818
 msgid "Linking controllers failed. Exiting"
 msgstr "Los controladores de enlazado fallaron. Saliendo"
 
-#: src/testbed/testbed_api_testbed.c:984
+#: src/testbed/testbed_api_testbed.c:986
 #, c-format
 msgid "Host registration failed for a host. Error: %s\n"
 msgstr "El registro de máquinas falló para una máquina. Error: %s\n"
 
-#: src/testbed/testbed_api_testbed.c:1050
+#: src/testbed/testbed_api_testbed.c:1052
 msgid "Controller crash detected. Shutting down.\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1139
+#: src/testbed/testbed_api_testbed.c:1141
 #, c-format
 msgid "Host %s cannot start testbed\n"
 msgstr "La máquina %s no puede comenzar la batería de pruebas\n"
 
-#: src/testbed/testbed_api_testbed.c:1143
+#: src/testbed/testbed_api_testbed.c:1145
 msgid "Testbed cannot be started on localhost\n"
 msgstr "La batería de pruebas no se puede iniciar en localhost\n"
 
-#: src/testbed/testbed_api_testbed.c:1181
+#: src/testbed/testbed_api_testbed.c:1183
 msgid "Cannot start the master controller"
 msgstr "No se puede iniciar el controlador maestro"
 
-#: src/testbed/testbed_api_testbed.c:1199
+#: src/testbed/testbed_api_testbed.c:1201
 msgid "Shutting down testbed due to timeout while setup.\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1259
+#: src/testbed/testbed_api_testbed.c:1261
 #, fuzzy
 msgid "No hosts loaded from LoadLeveler. Need at least one host\n"
 msgstr "No se han cargado máquinas. Se necesita al menos una máquina.\n"
 
-#: src/testbed/testbed_api_testbed.c:1271
+#: src/testbed/testbed_api_testbed.c:1273
 msgid "No hosts loaded. Need at least one host\n"
 msgstr "No se han cargado máquinas. Se necesita al menos una máquina.\n"
 
-#: src/testbed/testbed_api_testbed.c:1295
+#: src/testbed/testbed_api_testbed.c:1297
 msgid "Specified topology must be supported by testbed"
 msgstr ""
 "La topología especificada debe estar soportada por la batería de pruebas"
 
-#: src/testbed/testbed_api_testbed.c:1345
+#: src/testbed/testbed_api_testbed.c:1347
 #, c-format
 msgid ""
 "Maximum number of edges a peer can have in a scale free topology cannot be "
 "more than %u.  Given `%s = %llu'"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1361
+#: src/testbed/testbed_api_testbed.c:1363
 #, c-format
 msgid ""
 "The number of edges that can established when adding a new node to scale "
 "free topology cannot be more than %u.  Given `%s = %llu'"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1026
+#: src/testbed/testbed_api_topology.c:1028
 #, c-format
 msgid "Topology file %s not found\n"
 msgstr "El fichero de topología %s no fue encontrado\n"
 
-#: src/testbed/testbed_api_topology.c:1034
+#: src/testbed/testbed_api_topology.c:1036
 #, c-format
 msgid "Topology file %s has no data\n"
 msgstr "El fichero de topología %s no tiene datos\n"
 
-#: src/testbed/testbed_api_topology.c:1042
+#: src/testbed/testbed_api_topology.c:1044
 #, c-format
 msgid "Topology file %s cannot be read\n"
 msgstr "El fichero de topología %s no puede ser leido\n"
 
-#: src/testbed/testbed_api_topology.c:1064
+#: src/testbed/testbed_api_topology.c:1066
 #, c-format
 msgid "Failed to read peer index from toology file: %s"
 msgstr ""
 "Se produjo un fallo al leer el índice de pares del archivo de topología: %s"
 
-#: src/testbed/testbed_api_topology.c:1073
-#: src/testbed/testbed_api_topology.c:1097
+#: src/testbed/testbed_api_topology.c:1075
+#: src/testbed/testbed_api_topology.c:1099
 #, c-format
 msgid "Value in given topology file: %s out of range\n"
 msgstr "Valor en el fichero de topología dato: %s está fuera de rango\n"
 
-#: src/testbed/testbed_api_topology.c:1079
-#: src/testbed/testbed_api_topology.c:1103
+#: src/testbed/testbed_api_topology.c:1081
+#: src/testbed/testbed_api_topology.c:1105
 #, c-format
 msgid "Failed to read peer index from topology file: %s"
 msgstr ""
 "Se produjo un fallo al leer índice de pares del fichero de topología: %s"
 
-#: src/testbed/testbed_api_topology.c:1085
-#: src/testbed/testbed_api_topology.c:1109
+#: src/testbed/testbed_api_topology.c:1087
+#: src/testbed/testbed_api_topology.c:1111
 msgid "Topology file needs more peers than given ones\n"
 msgstr "El fichero de topología necesita más pares que los dados\n"
 
-#: src/testbed/testbed_api_topology.c:1143
+#: src/testbed/testbed_api_topology.c:1145
 #, c-format
 msgid "Ignoring to connect peer %u to peer %u\n"
 msgstr "Ignorando conexión del par %u al par %u\n"
 
-#: src/testing/gnunet-testing.c:171
+#: src/testing/gnunet-testing.c:173
 #, c-format
 msgid "Could not extract hostkey %u (offset too large?)\n"
 msgstr ""
 "No se pudo extraer la clave de máquina %u (¿desplazamiento demasiado "
 "grande?)\n"
 
-#: src/testing/gnunet-testing.c:251
+#: src/testing/gnunet-testing.c:253
 #, c-format
 msgid "Unknown command, use 'q' to quit or 'r' to restart peer\n"
 msgstr "Comando desconocido, use «q» para salir o «r» para reiniciar el par\n"
 
-#: src/testing/gnunet-testing.c:352
+#: src/testing/gnunet-testing.c:354
 msgid "create unique configuration files"
 msgstr "crear ficheros de configuración únicos"
 
-#: src/testing/gnunet-testing.c:357
+#: src/testing/gnunet-testing.c:359
 msgid "extract hostkey file from pre-computed hostkey list"
 msgstr ""
 "extraer los ficheros de claves de máquinas de una lista pre-computada de "
 "claves de máquinas"
 
-#: src/testing/gnunet-testing.c:363
+#: src/testing/gnunet-testing.c:365
 msgid ""
 "number of unique configuration files to create, or number of the hostkey to "
 "extract"
@@ -7183,15 +6978,15 @@ msgstr ""
 "número de ficheros de configuración únicos o claves de máquina a crear, o el "
 "número de claves de máquina a extraer"
 
-#: src/testing/gnunet-testing.c:370
+#: src/testing/gnunet-testing.c:372
 msgid "configuration template"
 msgstr "plantilla de configuración"
 
-#: src/testing/gnunet-testing.c:376
+#: src/testing/gnunet-testing.c:378
 msgid "run the given service, wait on stdin for 'r' (restart) or 'q' (quit)"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:389
+#: src/testing/gnunet-testing.c:391
 msgid "Command line tool to access the testing library"
 msgstr ""
 "Herramienta de línea de comandos para acceder a la biblioteca de pruebas"
@@ -7201,19 +6996,19 @@ msgstr ""
 msgid "list COUNT number of keys"
 msgstr "crea «COUNT» número de pares"
 
-#: src/testing/testing.c:270
+#: src/testing/testing.c:272
 #, c-format
 msgid "Hostkeys file not found: %s\n"
 msgstr "El fichero de máquinas no fue encontrado: %s\n"
 
-#: src/testing/testing.c:713
+#: src/testing/testing.c:715
 #, c-format
 msgid "Key number %u does not exist\n"
 msgstr "El número de clave %u no existe\n"
 
 # Miguel: "testbed" lo he traducido como batería de pruebas, pero
 # no es una traducción muy literal.
-#: src/testing/testing.c:1157
+#: src/testing/testing.c:1159
 #, c-format
 msgid ""
 "You attempted to create a testbed with more than %u hosts.  Please "
@@ -7222,107 +7017,107 @@ msgstr ""
 "Se ha intentado crear una batería de pruebas con más de %u máquinas.  Por "
 "favor, pre-compute más claves de máquinas primero.\n"
 
-#: src/testing/testing.c:1166
+#: src/testing/testing.c:1168
 #, c-format
 msgid "Failed to initialize hostkey for peer %u\n"
 msgstr ""
 "Se produjo un fallo al inicializar la clave de la máquina desde el par %u\n"
 
-#: src/testing/testing.c:1176
+#: src/testing/testing.c:1178
 #, fuzzy
 msgid "PRIVATE_KEY option in PEER section missing in configuration\n"
 msgstr "¡Falta la opción «%s» en la sección «%s» de la configuración!\n"
 
-#: src/testing/testing.c:1189
+#: src/testing/testing.c:1191
 msgid "Failed to create configuration for peer (not enough free ports?)\n"
 msgstr ""
 "Se produjo un fallo al crear la configuración para el par (¿no hay "
 "suficientes puertos libres?)\n"
 
-#: src/testing/testing.c:1203
+#: src/testing/testing.c:1205
 #, fuzzy, c-format
 msgid "Cannot open hostkey file `%s': %s\n"
 msgstr "No se pudo abrir el fichero de claves de máquina: %s\n"
 
-#: src/testing/testing.c:1215
+#: src/testing/testing.c:1217
 #, c-format
 msgid "Failed to write hostkey file for peer %u: %s\n"
 msgstr ""
 "Se produjo un fallo al escribir la clave de la máquina para el par %u: %s\n"
 
-#: src/testing/testing.c:1240
+#: src/testing/testing.c:1242
 #, c-format
 msgid "Failed to write configuration file `%s' for peer %u: %s\n"
 msgstr ""
 "Se produjo un fallo al escribir el fichero de configuración «%s» para el par "
 "%u: %s\n"
 
-#: src/testing/testing.c:1342
+#: src/testing/testing.c:1344
 #, c-format
 msgid "Failed to start `%s': %s\n"
 msgstr "Se produjo un fallo al arrancar «%s»: %s\n"
 
-#: src/testing/testing.c:1645
+#: src/testing/testing.c:1647
 #, c-format
 msgid "Failed to load configuration from %s\n"
 msgstr "Se produjo un fallo al cargar la configuración de %s\n"
 
-#: src/topology/friends.c:124
+#: src/topology/friends.c:126
 #, fuzzy, c-format
 msgid "Syntax error in FRIENDS file at offset %llu, skipping bytes `%.*s'.\n"
 msgstr ""
 "Error de sintaxis en el fichero de la lista negra en el desplazamiento %llu, "
 "omitiendo bytes «%s».\n"
 
-#: src/topology/friends.c:178
+#: src/topology/friends.c:180
 #, fuzzy, c-format
 msgid "Directory for file `%s' does not seem to be writable.\n"
 msgstr "«gnunet-arm» o «ssh» no parecen terminar.\n"
 
-#: src/topology/gnunet-daemon-topology.c:228
+#: src/topology/gnunet-daemon-topology.c:230
 msgid "# peers blacklisted"
 msgstr "# pares en la lista negra"
 
-#: src/topology/gnunet-daemon-topology.c:342
+#: src/topology/gnunet-daemon-topology.c:344
 #, fuzzy
 msgid "# connect requests issued to ATS"
 msgstr "# peticiones de conexión requeridas al servicio de transporte"
 
 # gossiped??
-#: src/topology/gnunet-daemon-topology.c:536
+#: src/topology/gnunet-daemon-topology.c:538
 msgid "# HELLO messages gossipped"
 msgstr "# Mensajes «HELLO» rumoreados"
 
-#: src/topology/gnunet-daemon-topology.c:638
-#: src/topology/gnunet-daemon-topology.c:724
+#: src/topology/gnunet-daemon-topology.c:640
+#: src/topology/gnunet-daemon-topology.c:726
 msgid "# friends connected"
 msgstr "# amigos conectados"
 
-#: src/topology/gnunet-daemon-topology.c:921
+#: src/topology/gnunet-daemon-topology.c:923
 msgid "Failed to connect to core service, can not manage topology!\n"
 msgstr ""
 "¡Se produjo un fallo al conectar con el servicio principal, no se puede "
 "gestionar la topología!\n"
 
-#: src/topology/gnunet-daemon-topology.c:954
+#: src/topology/gnunet-daemon-topology.c:956
 #, c-format
 msgid "Found myself `%s' in friend list (useless, ignored)\n"
 msgstr "Me he encontrado «%s» en mi lista de amigos (inútil, ignorado)\n"
 
-#: src/topology/gnunet-daemon-topology.c:961
+#: src/topology/gnunet-daemon-topology.c:963
 #, c-format
 msgid "Found friend `%s' in configuration\n"
 msgstr "Encontrado amigo «%s» en la configuración\n"
 
-#: src/topology/gnunet-daemon-topology.c:983
+#: src/topology/gnunet-daemon-topology.c:985
 msgid "Encountered errors parsing friends list!\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:986
+#: src/topology/gnunet-daemon-topology.c:988
 msgid "# friends in configuration"
 msgstr "# amigos en configuración"
 
-#: src/topology/gnunet-daemon-topology.c:993
+#: src/topology/gnunet-daemon-topology.c:995
 msgid ""
 "Fewer friends specified than required by minimum friend count. Will only "
 "connect to friends.\n"
@@ -7330,376 +7125,405 @@ msgstr ""
 "Menos amigos especificados que los requeridos por el contador mínimo de "
 "amigos. Sólo me conectaré a amigos.\n"
 
-#: src/topology/gnunet-daemon-topology.c:999
+#: src/topology/gnunet-daemon-topology.c:1001
 msgid ""
 "More friendly connections required than target total number of connections.\n"
 msgstr ""
 "Más conexiones amistosas requeridas que el número objetivo total de "
 "conexiones.\n"
 
-#: src/topology/gnunet-daemon-topology.c:1052
-#: src/transport/plugin_transport_wlan.c:1515
+#: src/topology/gnunet-daemon-topology.c:1054
+#: src/transport/plugin_transport_wlan.c:1517
 msgid "# HELLO messages received"
 msgstr "# mensajes «HELLO» recibidos"
 
-#: src/topology/gnunet-daemon-topology.c:1230
+#: src/topology/gnunet-daemon-topology.c:1233
 msgid "GNUnet topology control"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_ats.c:139
+#: src/transport/gnunet-communicator-tcp.c:2329
+#: src/transport/gnunet-communicator-udp.c:2883
+#: src/transport/gnunet-service-tng.c:4679
+#: src/transport/gnunet-service-transport.c:2782
+#, fuzzy
+msgid "Transport service is lacking key configuration settings. Exiting.\n"
+msgstr ""
+"El servicio de transporte carece de opciones de configuración de clave.  "
+"Saliendo.\n"
+
+#: src/transport/gnunet-communicator-tcp.c:2393
+#, fuzzy
+msgid "GNUnet TCP communicator"
+msgstr "Configurador Gtk de GNUnet"
+
+#: src/transport/gnunet-communicator-udp.c:2954
+#, fuzzy
+msgid "GNUnet UDP communicator"
+msgstr "Configurador Gtk de GNUnet"
+
+#: src/transport/gnunet-communicator-unix.c:802
+#, fuzzy
+msgid ""
+"Maximum number of UNIX connections exceeded, dropping incoming message\n"
+msgstr "El número máximo de conexiones es %u\n"
+
+#: src/transport/gnunet-communicator-unix.c:1073
+#: src/transport/plugin_transport_unix.c:1403
+#, fuzzy, c-format
+msgid "Cannot create path to `%s'\n"
+msgstr "Se produjo un fallo al crear la página para «%s»\n"
+
+#: src/transport/gnunet-communicator-unix.c:1162
+msgid "GNUnet UNIX domain socket communicator"
+msgstr ""
+
+#: src/transport/gnunet-service-transport_ats.c:141
 msgid "# Addresses given to ATS"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:446
+#: src/transport/gnunet-service-transport.c:448
 msgid "# messages dropped due to slow client"
 msgstr "# mensajes omitidos debido a un cliente lento"
 
-#: src/transport/gnunet-service-transport.c:816
+#: src/transport/gnunet-service-transport.c:817
 msgid "# bytes payload dropped (other peer was not connected)"
 msgstr "# bytes de «payload» omitidos (el otro par no estaba conectado)"
 
-#: src/transport/gnunet-service-transport.c:1549
+#: src/transport/gnunet-service-transport.c:1550
 #, fuzzy
 msgid "# bytes payload discarded due to not connected peer"
 msgstr "# bytes de «payload» descartados debido a par no conectado"
 
-#: src/transport/gnunet-service-transport.c:1709
+#: src/transport/gnunet-service-transport.c:1710
 msgid "# bytes total received"
 msgstr "# total de bytes recibidos"
 
-#: src/transport/gnunet-service-transport.c:1806
+#: src/transport/gnunet-service-transport.c:1807
 msgid "# bytes payload received"
 msgstr "# bytes de «payload» recibidos"
 
-#: src/transport/gnunet-service-transport.c:2123
-#: src/transport/gnunet-service-transport.c:2595
+#: src/transport/gnunet-service-transport.c:2124
+#: src/transport/gnunet-service-transport.c:2596
 msgid "# disconnects due to blacklist"
 msgstr "# desconexiones debido a la lista negra"
 
-#: src/transport/gnunet-service-transport.c:2599
+#: src/transport/gnunet-service-transport.c:2600
 #, fuzzy, c-format
 msgid "Disallowing connection to peer `%s' on transport %s\n"
 msgstr "Se produjo un fallo al cargar el módulo del transporte para «%s»\n"
 
-#: src/transport/gnunet-service-transport.c:2707
+#: src/transport/gnunet-service-transport.c:2708
 #, fuzzy, c-format
 msgid "Adding blacklisting entry for peer `%s'\n"
 msgstr "Añadiendo «%s» sin direcciones para el par «%s»\n"
 
-#: src/transport/gnunet-service-transport.c:2716
+#: src/transport/gnunet-service-transport.c:2717
 #, c-format
 msgid "Adding blacklisting entry for peer `%s':`%s'\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:2781
-#, fuzzy
-msgid "Transport service is lacking key configuration settings. Exiting.\n"
-msgstr ""
-"El servicio de transporte carece de opciones de configuración de clave.  "
-"Saliendo.\n"
-
-#: src/transport/gnunet-service-transport_hello.c:193
+#: src/transport/gnunet-service-transport_hello.c:195
 msgid "# refreshed my HELLO"
 msgstr "# refrescos de mi «HELLO»"
 
-#: src/transport/gnunet-service-transport_neighbours.c:804
+#: src/transport/gnunet-service-transport_neighbours.c:805
 #, fuzzy
 msgid "# session creation failed"
 msgstr "# sesiones wlan creadas"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1051
+#: src/transport/gnunet-service-transport_neighbours.c:1052
 msgid "# DISCONNECT messages sent"
 msgstr "# Mensajes «DISCONNECT» enviados"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1174
+#: src/transport/gnunet-service-transport_neighbours.c:1175
 msgid "# disconnects due to quota of 0"
 msgstr "# desconexiones debido a una cuota de 0"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1322
-#: src/transport/gnunet-service-transport_neighbours.c:1783
+#: src/transport/gnunet-service-transport_neighbours.c:1323
+#: src/transport/gnunet-service-transport_neighbours.c:1784
 msgid "# bytes in message queue for other peers"
 msgstr "# bytes en la cola de mensajes para otros pares"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1327
+#: src/transport/gnunet-service-transport_neighbours.c:1328
 msgid "# messages transmitted to other peers"
 msgstr "# mensajes transmitidos a otros pares"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1333
+#: src/transport/gnunet-service-transport_neighbours.c:1334
 msgid "# transmission failures for messages to other peers"
 msgstr "# fallos de transmisión en mensajes a otros pares"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1393
+#: src/transport/gnunet-service-transport_neighbours.c:1394
 msgid "# messages timed out while in transport queue"
 msgstr "# mensajes expirados mientras estaban en la cola de transporte"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1477
+#: src/transport/gnunet-service-transport_neighbours.c:1478
 msgid "# KEEPALIVES sent"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1513
+#: src/transport/gnunet-service-transport_neighbours.c:1514
 msgid "# KEEPALIVE messages discarded (peer unknown)"
 msgstr "# Mensajes «KEEPALIVE» descartados (par desconocido)"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1521
+#: src/transport/gnunet-service-transport_neighbours.c:1522
 msgid "# KEEPALIVE messages discarded (no session)"
 msgstr "# mensajes «KEEPALIVE» descartados (no hay sesión)"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1531
+#: src/transport/gnunet-service-transport_neighbours.c:1532
 msgid "# KEEPALIVES received in good order"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1576
+#: src/transport/gnunet-service-transport_neighbours.c:1577
 #, fuzzy
 msgid "# KEEPALIVE_RESPONSEs discarded (not connected)"
 msgstr "# mensajes «KEEPALIVE_RESPONSE» descartados (no conectado)"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1585
+#: src/transport/gnunet-service-transport_neighbours.c:1586
 #, fuzzy
 msgid "# KEEPALIVE_RESPONSEs discarded (not expected)"
 msgstr "# Mensajes «KEEPALIVE_RESPONSE» descartados (no esperado)"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1593
+#: src/transport/gnunet-service-transport_neighbours.c:1594
 #, fuzzy
 msgid "# KEEPALIVE_RESPONSEs discarded (address changed)"
 msgstr "# mensajes «KEEPALIVE_RESPONSE» descartados (no conectado)"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1602
+#: src/transport/gnunet-service-transport_neighbours.c:1603
 #, fuzzy
 msgid "# KEEPALIVE_RESPONSEs discarded (no nonce)"
 msgstr "# mensajes «KEEPALIVE_RESPONSE» descartados (no conectado)"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1607
+#: src/transport/gnunet-service-transport_neighbours.c:1608
 #, fuzzy
 msgid "# KEEPALIVE_RESPONSEs discarded (bad nonce)"
 msgstr "# mensajes «KEEPALIVE_RESPONSE» descartados (no conectado)"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1613
+#: src/transport/gnunet-service-transport_neighbours.c:1614
 #, fuzzy
 msgid "# KEEPALIVE_RESPONSEs received (OK)"
 msgstr "# mensajes «KEEPALIVE_RESPONSE» descartados (no conectado)"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1680
+#: src/transport/gnunet-service-transport_neighbours.c:1681
 msgid "# messages discarded due to lack of neighbour record"
 msgstr "# mensajes descartados debido a la falta de registro vecinal"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1714
+#: src/transport/gnunet-service-transport_neighbours.c:1715
 msgid "# bandwidth quota violations by other peers"
 msgstr "# violaciones de la cuota de ancho de banda por otros pares"
 
 # throttling?
-#: src/transport/gnunet-service-transport_neighbours.c:1729
+#: src/transport/gnunet-service-transport_neighbours.c:1730
 msgid "# ms throttling suggested"
 msgstr "# ms de impulso sugeridos"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1852
+#: src/transport/gnunet-service-transport_neighbours.c:1853
 #, fuzzy, c-format
 msgid "Failed to send SYN message to peer `%s'\n"
 msgstr ""
 "Se produjo un fallo al procesar el mensaje interno del programa auxiliar "
 "«%s»\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1872
+#: src/transport/gnunet-service-transport_neighbours.c:1873
 #, fuzzy
 msgid "# Failed attempts to switch addresses (failed to send SYN CONT)"
 msgstr "Se produjo un fallo al procesar la petición DNS.  Omitiendo.\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1911
+#: src/transport/gnunet-service-transport_neighbours.c:1912
 #, fuzzy
 msgid "# SYN messages sent"
 msgstr "# Mensajes «DISCONNECT» enviados"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1928
+#: src/transport/gnunet-service-transport_neighbours.c:1929
 #, fuzzy, c-format
 msgid "Failed to transmit SYN message to %s\n"
 msgstr "Se produjo un fallo al transmitir un mensaje al servicio «%s».\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1958
+#: src/transport/gnunet-service-transport_neighbours.c:1959
 #, fuzzy
 msgid "# Failed attempts to switch addresses (failed to send SYN)"
 msgstr "Se produjo un fallo al procesar la petición DNS.  Omitiendo.\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:2026
+#: src/transport/gnunet-service-transport_neighbours.c:2027
 #, fuzzy, c-format
 msgid "Failed to send SYN_ACK message to peer `%s' using address `%s'\n"
 msgstr "¡Se produjo un fallo al conectar al servicio de estadísticas!\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:2080
+#: src/transport/gnunet-service-transport_neighbours.c:2081
 #, fuzzy
 msgid "# SYN_ACK messages sent"
 msgstr "# Mensajes «DISCONNECT» enviados"
 
-#: src/transport/gnunet-service-transport_neighbours.c:2097
+#: src/transport/gnunet-service-transport_neighbours.c:2098
 #, fuzzy, c-format
 msgid "Failed to transmit SYN_ACK message to %s\n"
 msgstr "Se produjo un fallo al transmitir un mensaje al servicio «%s».\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:2260
+#: src/transport/gnunet-service-transport_neighbours.c:2261
 #, fuzzy
 msgid "# SYN messages received"
 msgstr "# mensajes PING recibidos"
 
-#: src/transport/gnunet-service-transport_neighbours.c:2265
+#: src/transport/gnunet-service-transport_neighbours.c:2266
 #, c-format
 msgid "SYN request from peer `%s' ignored due impending shutdown\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:2652
+#: src/transport/gnunet-service-transport_neighbours.c:2653
 msgid "# Attempts to switch addresses"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3137
+#: src/transport/gnunet-service-transport_neighbours.c:3138
 #, fuzzy
 msgid "# SYN_ACK messages received"
 msgstr "# mensajes SET QUOTA recibidos"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3145
+#: src/transport/gnunet-service-transport_neighbours.c:3146
 #, fuzzy
 msgid "# unexpected SYN_ACK messages (no peer)"
 msgstr "# Mensajes «CONNECT_ACK» inesperados (sin par)"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3163
-#: src/transport/gnunet-service-transport_neighbours.c:3187
+#: src/transport/gnunet-service-transport_neighbours.c:3164
+#: src/transport/gnunet-service-transport_neighbours.c:3188
 #, fuzzy
 msgid "# unexpected SYN_ACK messages (not ready)"
 msgstr "# Mensajes «CONNECT_ACK» inesperados (no estaba preparado)"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3199
+#: src/transport/gnunet-service-transport_neighbours.c:3200
 #, fuzzy
 msgid "# unexpected SYN_ACK messages (waiting on ATS)"
 msgstr "# Mensajes «CONNECT_ACK» inesperados (esperando en el ATS)"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3224
+#: src/transport/gnunet-service-transport_neighbours.c:3225
 msgid "# Successful attempts to switch addresses"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3237
+#: src/transport/gnunet-service-transport_neighbours.c:3238
 #, fuzzy
 msgid "# unexpected SYN_ACK messages (disconnecting)"
 msgstr "# Mensajes «CONNECT_ACK» inesperados (desconectando)"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3410
+#: src/transport/gnunet-service-transport_neighbours.c:3411
 #, fuzzy
 msgid "# ACK messages received"
 msgstr "# mensajes «REQUEST CONNECT» recibidos"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3446
+#: src/transport/gnunet-service-transport_neighbours.c:3447
 #, fuzzy
 msgid "# unexpected ACK messages"
 msgstr "# Mensajes «SESSION ACK» inesperados"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3534
+#: src/transport/gnunet-service-transport_neighbours.c:3535
 #, fuzzy
 msgid "# quota messages ignored (malformed)"
 msgstr "# mensajes de desconexión ignorados (formato antiguo)"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3541
+#: src/transport/gnunet-service-transport_neighbours.c:3542
 #, fuzzy
 msgid "# QUOTA messages received"
 msgstr "# Mensajes «GAP PUT» recibidos"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3581
+#: src/transport/gnunet-service-transport_neighbours.c:3582
 #, fuzzy
 msgid "# disconnect messages ignored (malformed)"
 msgstr "# mensajes de desconexión ignorados (formato antiguo)"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3588
+#: src/transport/gnunet-service-transport_neighbours.c:3589
 #, fuzzy
 msgid "# DISCONNECT messages received"
 msgstr "# mensajes «REQUEST CONNECT» recibidos"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3599
+#: src/transport/gnunet-service-transport_neighbours.c:3600
 msgid "# disconnect messages ignored (timestamp)"
 msgstr "# mensajes de desconexión ignorados (marca temporal)"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3734
+#: src/transport/gnunet-service-transport_neighbours.c:3735
 msgid "# disconnected from peer upon explicit request"
 msgstr "# desconexiones del par debido a una petición explícita"
 
-#: src/transport/gnunet-service-transport_plugins.c:156
+#: src/transport/gnunet-service-transport_plugins.c:158
 msgid "Transport service is lacking NEIGHBOUR_LIMIT option.\n"
 msgstr "El servicio de transporte carece de la opción «NEIGHBOUR_LIMIT».\n"
 
-#: src/transport/gnunet-service-transport_plugins.c:221
-#: src/transport/gnunet-service-transport_plugins.c:229
-#: src/transport/gnunet-service-transport_plugins.c:237
-#: src/transport/gnunet-service-transport_plugins.c:245
-#: src/transport/gnunet-service-transport_plugins.c:253
-#: src/transport/gnunet-service-transport_plugins.c:261
-#: src/transport/gnunet-service-transport_plugins.c:269
-#: src/transport/gnunet-service-transport_plugins.c:277
-#: src/transport/gnunet-service-transport_plugins.c:285
-#: src/transport/gnunet-service-transport_plugins.c:293
-#: src/transport/gnunet-service-transport_plugins.c:301
+#: src/transport/gnunet-service-transport_plugins.c:223
+#: src/transport/gnunet-service-transport_plugins.c:231
+#: src/transport/gnunet-service-transport_plugins.c:239
+#: src/transport/gnunet-service-transport_plugins.c:247
+#: src/transport/gnunet-service-transport_plugins.c:255
+#: src/transport/gnunet-service-transport_plugins.c:263
+#: src/transport/gnunet-service-transport_plugins.c:271
+#: src/transport/gnunet-service-transport_plugins.c:279
+#: src/transport/gnunet-service-transport_plugins.c:287
+#: src/transport/gnunet-service-transport_plugins.c:295
+#: src/transport/gnunet-service-transport_plugins.c:303
 #, fuzzy, c-format
 msgid "Missing function `%s' in transport plugin for `%s'\n"
 msgstr "Se produjo un fallo al cargar el módulo del transporte para «%s»\n"
 
-#: src/transport/gnunet-service-transport_plugins.c:308
+#: src/transport/gnunet-service-transport_plugins.c:310
 #, fuzzy, c-format
 msgid "Did not load plugin `%s' due to missing functions\n"
 msgstr "Falló al cargar el plugin '%s' en %s:%d. Descargando plugin.\n"
 
-#: src/transport/gnunet-service-transport_validation.c:386
+#: src/transport/gnunet-service-transport_validation.c:388
 #, fuzzy
 msgid "# Addresses in validation map"
 msgstr "# revalidaciones de direcciones iniciadas"
 
-#: src/transport/gnunet-service-transport_validation.c:489
-#: src/transport/gnunet-service-transport_validation.c:675
-#: src/transport/gnunet-service-transport_validation.c:995
-#: src/transport/gnunet-service-transport_validation.c:1607
+#: src/transport/gnunet-service-transport_validation.c:491
+#: src/transport/gnunet-service-transport_validation.c:677
+#: src/transport/gnunet-service-transport_validation.c:997
+#: src/transport/gnunet-service-transport_validation.c:1609
 #, fuzzy
 msgid "# validations running"
 msgstr "Base de datos sqlite ejecutándose\n"
 
-#: src/transport/gnunet-service-transport_validation.c:530
+#: src/transport/gnunet-service-transport_validation.c:532
 #, fuzzy
 msgid "# address records discarded (timeout)"
 msgstr "# registros de direcciones descartados"
 
-#: src/transport/gnunet-service-transport_validation.c:578
+#: src/transport/gnunet-service-transport_validation.c:580
 #, fuzzy
 msgid "# address records discarded (blacklist)"
 msgstr "# registros de direcciones descartados"
 
-#: src/transport/gnunet-service-transport_validation.c:666
+#: src/transport/gnunet-service-transport_validation.c:668
 #, fuzzy
 msgid "# PINGs for address validation sent"
 msgstr "# revalidaciones de direcciones iniciadas"
 
-#: src/transport/gnunet-service-transport_validation.c:746
+#: src/transport/gnunet-service-transport_validation.c:748
 msgid "# validations delayed by global throttle"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:783
+#: src/transport/gnunet-service-transport_validation.c:785
 msgid "# address revalidations started"
 msgstr "# revalidaciones de direcciones iniciadas"
 
-#: src/transport/gnunet-service-transport_validation.c:1121
+#: src/transport/gnunet-service-transport_validation.c:1123
 msgid "# PING message for different peer received"
 msgstr "# Mensajes PING recibidos para un par diferente"
 
-#: src/transport/gnunet-service-transport_validation.c:1172
+#: src/transport/gnunet-service-transport_validation.c:1174
 #, fuzzy, c-format
 msgid "Plugin `%s' not available, cannot confirm having this address\n"
 msgstr ""
 "No confirmando el PING con dirección «%s» ya que no puedo confirmar tener "
 "esa dirección.\n"
 
-#: src/transport/gnunet-service-transport_validation.c:1185
+#: src/transport/gnunet-service-transport_validation.c:1187
 msgid "# failed address checks during validation"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1188
+#: src/transport/gnunet-service-transport_validation.c:1190
 #, c-format
 msgid "Address `%s' is not one of my addresses, not confirming PING\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1196
+#: src/transport/gnunet-service-transport_validation.c:1198
 msgid "# successful address checks during validation"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1209
+#: src/transport/gnunet-service-transport_validation.c:1211
 #, fuzzy, c-format
 msgid ""
 "Not confirming PING from peer `%s' with address `%s' since I cannot confirm "
@@ -7708,69 +7532,70 @@ msgstr ""
 "No confirmando el PING con dirección «%s» ya que no puedo confirmar tener "
 "esa dirección.\n"
 
-#: src/transport/gnunet-service-transport_validation.c:1264
+#: src/transport/gnunet-service-transport_validation.c:1266
 #, fuzzy, c-format
 msgid "Failed to create PONG signature for peer `%s'\n"
 msgstr "Se produjo un fallo al crear la página para «%s»\n"
 
-#: src/transport/gnunet-service-transport_validation.c:1315
+#: src/transport/gnunet-service-transport_validation.c:1317
 msgid "# PONGs unicast via reliable transport"
 msgstr "# unicast de PONG vía transporte confiable"
 
-#: src/transport/gnunet-service-transport_validation.c:1324
+#: src/transport/gnunet-service-transport_validation.c:1326
 msgid "# PONGs multicast to all available addresses"
 msgstr "# multicast de PONG a todas las direcciones disponibles"
 
-#: src/transport/gnunet-service-transport_validation.c:1497
+#: src/transport/gnunet-service-transport_validation.c:1499
 msgid "# PONGs dropped, no matching pending validation"
 msgstr "# PONG omitidos, no hay una validación pendiente coincidente"
 
-#: src/transport/gnunet-service-transport_validation.c:1515
+#: src/transport/gnunet-service-transport_validation.c:1517
 msgid "# PONGs dropped, signature expired"
 msgstr "# Mensajes PONG omitidos, firma expirada"
 
-#: src/transport/gnunet-service-transport_validation.c:1570
+#: src/transport/gnunet-service-transport_validation.c:1572
 #, fuzzy
 msgid "# validations succeeded"
 msgstr "# revalidaciones de direcciones iniciadas"
 
-#: src/transport/gnunet-service-transport_validation.c:1625
+#: src/transport/gnunet-service-transport_validation.c:1627
 #, fuzzy
 msgid "# HELLOs given to peerinfo"
 msgstr "# «HELLO» obtenidos de «peerinfo»"
 
-#: src/transport/gnunet-transport.c:411
+#: src/transport/gnunet-transport.c:413
 #, c-format
 msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n"
 msgstr "Transmitidos %llu bytes/s (%llu bytes en %s)\n"
 
-#: src/transport/gnunet-transport.c:421
+#: src/transport/gnunet-transport.c:423
 #, c-format
 msgid "Received %llu bytes/s (%llu bytes in %s)\n"
 msgstr "Recibidos %llu bytes/s (%llu bytes en %s)\n"
 
-#: src/transport/gnunet-transport.c:465
+#: src/transport/gnunet-transport.c:467
 #, c-format
 msgid "Failed to connect to `%s'\n"
 msgstr "Se produjo un fallo al conectar con «%s»\n"
 
-#: src/transport/gnunet-transport.c:478
+#: src/transport/gnunet-transport.c:480
 #, c-format
 msgid "Failed to resolve address for peer `%s'\n"
 msgstr "Se produjo un fallo al resolver la dirección para el par «%s»\n"
 
 # Miguel: La traducción no es literal, pero me parece más correcta
 # en castellano.
-#: src/transport/gnunet-transport.c:492
-msgid "Failed to list connections, timeout occured\n"
+#: src/transport/gnunet-transport.c:494
+#, fuzzy
+msgid "Failed to list connections, timeout occurred\n"
 msgstr "No se pudieron listar las conexiones, expiró el plazo\n"
 
-#: src/transport/gnunet-transport.c:525
+#: src/transport/gnunet-transport.c:527
 #, fuzzy, c-format
 msgid "Transmitting %u bytes\n"
 msgstr "Transmitiendo %u bytes a %s\n"
 
-#: src/transport/gnunet-transport.c:559
+#: src/transport/gnunet-transport.c:561
 #, c-format
 msgid ""
 "Successfully connected to `%s', starting to send benchmark data in %u Kb "
@@ -7779,46 +7604,46 @@ msgstr ""
 "Conectado satisfactoriamente a «%s», empezando a mandar datos de prueba en "
 "bloques de %u Kb\n"
 
-#: src/transport/gnunet-transport.c:590
+#: src/transport/gnunet-transport.c:592
 #, c-format
 msgid "Disconnected from peer `%s' while benchmarking\n"
 msgstr "Desconectado del par «%s» mientras probaba\n"
 
-#: src/transport/gnunet-transport.c:614 src/transport/gnunet-transport.c:643
+#: src/transport/gnunet-transport.c:616 src/transport/gnunet-transport.c:645
 #, c-format
 msgid "%24s: %-17s %4s   (%u connections in total)\n"
 msgstr "%24s: %-17s %4s   (%u conexiones en total)\n"
 
-#: src/transport/gnunet-transport.c:616
+#: src/transport/gnunet-transport.c:618
 msgid "Connected to"
 msgstr "Conectado a"
 
-#: src/transport/gnunet-transport.c:645
+#: src/transport/gnunet-transport.c:647
 msgid "Disconnected from"
 msgstr "Desconectado de"
 
-#: src/transport/gnunet-transport.c:680
+#: src/transport/gnunet-transport.c:682
 #, fuzzy, c-format
 msgid "Received %u bytes\n"
 msgstr "Recibidos %u bytes de %s\n"
 
-#: src/transport/gnunet-transport.c:717
+#: src/transport/gnunet-transport.c:719
 #, c-format
 msgid "Peer `%s': %s %s in state `%s' until %s\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:729
+#: src/transport/gnunet-transport.c:731
 #, c-format
 msgid "Peer `%s': %s %s\n"
 msgstr "Par «%s»: %s %s\n"
 
-#: src/transport/gnunet-transport.c:1142
+#: src/transport/gnunet-transport.c:1144
 #, fuzzy
 msgid "Monitor disconnected from transport service. Reconnecting.\n"
 msgstr ""
 "El cliente se desconectó del servicio principal, tratando de reconectar.\n"
 
-#: src/transport/gnunet-transport.c:1249
+#: src/transport/gnunet-transport.c:1251
 #, fuzzy, c-format
 msgid ""
 "Multiple operations given. Please choose only one operation: %s, %s, %s, %s, "
@@ -7827,7 +7652,7 @@ msgstr ""
 "Múltiples operaciones introducidas. Por favor, seleccione únicamente una "
 "operación: %s, %s, %s, %s, %s, %s\n"
 
-#: src/transport/gnunet-transport.c:1262
+#: src/transport/gnunet-transport.c:1264
 #, fuzzy, c-format
 msgid ""
 "No operation given. Please choose one operation: %s, %s, %s, %s, %s, %s, %s\n"
@@ -7835,136 +7660,136 @@ msgstr ""
 "Ninguna operación introducida. Por favor, seleccione alguna operación: %s, "
 "%s, %s, %s, %s, %s\n"
 
-#: src/transport/gnunet-transport.c:1292
+#: src/transport/gnunet-transport.c:1294
 #, fuzzy
 msgid "Failed to connect to transport service for disconnection\n"
 msgstr "Se produjo un fallo al conectar con el servicio de transporte\n"
 
-#: src/transport/gnunet-transport.c:1298
+#: src/transport/gnunet-transport.c:1300
 msgid "Blacklisting request in place, stop with CTRL-C\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1323 src/transport/gnunet-transport.c:1353
-#: src/transport/gnunet-transport.c:1406
+#: src/transport/gnunet-transport.c:1325 src/transport/gnunet-transport.c:1355
+#: src/transport/gnunet-transport.c:1408
 msgid "Failed to connect to transport service\n"
 msgstr "Se produjo un fallo al conectar con el servicio de transporte\n"
 
-#: src/transport/gnunet-transport.c:1360
+#: src/transport/gnunet-transport.c:1362
 msgid "Starting to receive benchmark data\n"
 msgstr "Empezando a recibir datos de prueba\n"
 
-#: src/transport/gnunet-transport.c:1431
+#: src/transport/gnunet-transport.c:1433
 #, fuzzy
 msgid "print information for all peers (instead of only connected peers)"
 msgstr "Imprime información sobre los pares conectados."
 
-#: src/transport/gnunet-transport.c:1435
+#: src/transport/gnunet-transport.c:1437
 msgid "measure how fast we are receiving data from all peers (until CTRL-C)"
 msgstr "medir cómo de rápido recibimos datos de todos los pares (hasta CTRL-C)"
 
-#: src/transport/gnunet-transport.c:1439
+#: src/transport/gnunet-transport.c:1441
 #, fuzzy
 msgid "disconnect from a peer"
 msgstr "conectar a un par"
 
-#: src/transport/gnunet-transport.c:1443
+#: src/transport/gnunet-transport.c:1445
 msgid "provide information about all current connections (once)"
 msgstr "provee información sobre todas las conexiones actuales (una vez)"
 
-#: src/transport/gnunet-transport.c:1451
+#: src/transport/gnunet-transport.c:1453
 msgid ""
 "provide information about all connects and disconnect events (continuously)"
 msgstr ""
 "provee información sobre todas los eventos de conexión y desconexión "
 "(continuamente)"
 
-#: src/transport/gnunet-transport.c:1455
+#: src/transport/gnunet-transport.c:1457
 msgid "do not resolve hostnames"
 msgstr "no resolver nombres de máquinas"
 
-#: src/transport/gnunet-transport.c:1460
-#: src/transport/gnunet-transport-profiler.c:639
+#: src/transport/gnunet-transport.c:1462
+#: src/transport/gnunet-transport-profiler.c:641
 msgid "peer identity"
 msgstr "identidad del par"
 
-#: src/transport/gnunet-transport.c:1464
+#: src/transport/gnunet-transport.c:1466
 #, fuzzy
 msgid "monitor plugin sessions"
 msgstr "# sesiones wlan pendientes"
 
-#: src/transport/gnunet-transport.c:1469
+#: src/transport/gnunet-transport.c:1471
 msgid "send data for benchmarking to the other peer (until CTRL-C)"
 msgstr "enviar data para prueba a otro par (hasta CTRL-C)"
 
-#: src/transport/gnunet-transport.c:1480
-#: src/transport/gnunet-transport-profiler.c:650
+#: src/transport/gnunet-transport.c:1482
+#: src/transport/gnunet-transport-profiler.c:652
 msgid "Direct access to transport service."
 msgstr "Acceso directo al servicio de transporte."
 
-#: src/transport/gnunet-transport-profiler.c:217
+#: src/transport/gnunet-transport-profiler.c:219
 #, c-format
 msgid "%llu B in %llu ms == %.2f KB/s!\n"
 msgstr ""
 
-#: src/transport/gnunet-transport-profiler.c:615
+#: src/transport/gnunet-transport-profiler.c:617
 msgid "send data to peer"
 msgstr ""
 
-#: src/transport/gnunet-transport-profiler.c:619
+#: src/transport/gnunet-transport-profiler.c:621
 #, fuzzy
 msgid "receive data from peer"
 msgstr "# respuestas recibidas de otros pares"
 
-#: src/transport/gnunet-transport-profiler.c:624
+#: src/transport/gnunet-transport-profiler.c:626
 #, fuzzy
 msgid "iterations"
 msgstr "Otras configuraciones"
 
-#: src/transport/gnunet-transport-profiler.c:629
+#: src/transport/gnunet-transport-profiler.c:631
 #, fuzzy
 msgid "number of messages to send"
 msgstr "número de mensajes a usar por iteración"
 
-#: src/transport/gnunet-transport-profiler.c:634
+#: src/transport/gnunet-transport-profiler.c:636
 #, fuzzy
 msgid "message size to use"
 msgstr "tamaño del mensaje"
 
-#: src/transport/plugin_transport_http_client.c:1472
-#: src/transport/plugin_transport_http_server.c:2310
-#: src/transport/plugin_transport_http_server.c:3524
-#: src/transport/plugin_transport_tcp.c:3889
-#: src/transport/plugin_transport_tcp.c:3896
-#: src/transport/plugin_transport_xt.c:3897
-#: src/transport/plugin_transport_xt.c:3904
+#: src/transport/plugin_transport_http_client.c:1474
+#: src/transport/plugin_transport_http_server.c:2312
+#: src/transport/plugin_transport_http_server.c:3530
+#: src/transport/plugin_transport_tcp.c:3895
+#: src/transport/plugin_transport_tcp.c:3902
+#: src/transport/plugin_transport_xt.c:3899
+#: src/transport/plugin_transport_xt.c:3906
 msgid "TCP_STEALTH not supported on this platform.\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_client.c:2113
+#: src/transport/plugin_transport_http_client.c:2115
 #, c-format
 msgid "Could not initialize curl multi handle, failed to start %s plugin!\n"
 msgstr ""
 "¡No se pudo inicializar el multi-manejador de curl, no se pudo iniciar el "
 "módulo %s!\n"
 
-#: src/transport/plugin_transport_http_client.c:2162
-#: src/transport/plugin_transport_http_server.c:3239
+#: src/transport/plugin_transport_http_client.c:2164
+#: src/transport/plugin_transport_http_server.c:3245
 #, c-format
 msgid "Shutting down plugin `%s'\n"
 msgstr "Finalizando el módulo «%s»\n"
 
-#: src/transport/plugin_transport_http_client.c:2179
-#: src/transport/plugin_transport_http_server.c:3309
+#: src/transport/plugin_transport_http_client.c:2181
+#: src/transport/plugin_transport_http_server.c:3315
 #, c-format
 msgid "Shutdown for plugin `%s' complete\n"
 msgstr "Finalización del módulo «%s» completa\n"
 
-#: src/transport/plugin_transport_http_client.c:2213
+#: src/transport/plugin_transport_http_client.c:2215
 #, fuzzy, c-format
 msgid "Maximum number of requests is %u\n"
 msgstr "El número máximo de conexiones es %u\n"
 
-#: src/transport/plugin_transport_http_server.c:1754
+#: src/transport/plugin_transport_http_server.c:1756
 #, c-format
 msgid ""
 "Access from connection %p (%u of %u) for `%s' `%s' url `%s' with upload data "
@@ -7973,12 +7798,12 @@ msgstr ""
 "Acceso desde la conexión %p (%u de %u) para «%s» «%s» URL «%s» con tamaño de "
 "los datos de subida %u\n"
 
-#: src/transport/plugin_transport_http_server.c:2026
+#: src/transport/plugin_transport_http_server.c:2028
 #, c-format
 msgid "Accepting connection (%u of %u) from `%s'\n"
 msgstr "Aceptando conexión (%u de %u) desde «%s»\n"
 
-#: src/transport/plugin_transport_http_server.c:2034
+#: src/transport/plugin_transport_http_server.c:2036
 #, c-format
 msgid ""
 "Server reached maximum number connections (%u), rejecting new connection\n"
@@ -7986,7 +7811,7 @@ msgstr ""
 "El servidor ha alcanzado el número máximo de conexiones (%u), rechazando "
 "nueva conexión\n"
 
-#: src/transport/plugin_transport_http_server.c:2184
+#: src/transport/plugin_transport_http_server.c:2186
 msgid ""
 "Could not create a new TLS certificate, program `gnunet-transport-"
 "certificate-creation' could not be started!\n"
@@ -7994,273 +7819,273 @@ msgstr ""
 "¡No se pudo crear un certificado TLS nuevo, el programa «gnunet-transport-"
 "certificate-creation» no pudo ser iniciado!\n"
 
-#: src/transport/plugin_transport_http_server.c:2207
+#: src/transport/plugin_transport_http_server.c:2209
 #, fuzzy, c-format
 msgid "No usable TLS certificate found and creating one at `%s/%s' failed!\n"
 msgstr ""
 "¡No se encontró ningún certificado TLS útil y se produjo un fallo al crear "
 "uno!\n"
 
-#: src/transport/plugin_transport_http_server.c:2336
+#: src/transport/plugin_transport_http_server.c:2338
 msgid "Could not load or create server certificate! Loading plugin failed!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2648
+#: src/transport/plugin_transport_http_server.c:2654
 msgid "Require valid port number for service in configuration!\n"
 msgstr "¡Se necesita un puerto válido para el servicio en la configuración!\n"
 
-#: src/transport/plugin_transport_http_server.c:2813
+#: src/transport/plugin_transport_http_server.c:2819
 #, c-format
 msgid "Found %u addresses to report to NAT service\n"
 msgstr "Encontradas %u direcciones para comunicar al servicio NAT\n"
 
-#: src/transport/plugin_transport_http_server.c:2899
-#: src/transport/plugin_transport_udp.c:3621
-#: src/transport/plugin_transport_xu.c:2047
+#: src/transport/plugin_transport_http_server.c:2905
+#: src/transport/plugin_transport_udp.c:3627
+#: src/transport/plugin_transport_xu.c:2049
 msgid "Disabling IPv6 since it is not supported on this system!\n"
 msgstr "¡Deshabilitando IPv6 ya que no está soportado en este sistema!\n"
 
-#: src/transport/plugin_transport_http_server.c:3005
+#: src/transport/plugin_transport_http_server.c:3011
 #, c-format
 msgid "IPv4 support is %s\n"
 msgstr "El soporte IPv4 es %s\n"
 
-#: src/transport/plugin_transport_http_server.c:3020
+#: src/transport/plugin_transport_http_server.c:3026
 #, c-format
 msgid "IPv6 support is %s\n"
 msgstr "El soporte IPv6 es %s\n"
 
-#: src/transport/plugin_transport_http_server.c:3026
+#: src/transport/plugin_transport_http_server.c:3032
 msgid "Neither IPv4 nor IPv6 are enabled! Fix in configuration\n"
 msgstr "¡Ni IPv4 ni IPv6 están habilitadas! Corrija la configuración\n"
 
-#: src/transport/plugin_transport_http_server.c:3037
+#: src/transport/plugin_transport_http_server.c:3043
 msgid "Port is required! Fix in configuration\n"
 msgstr "¡El puerto es necesario! Corrija la configuración\n"
 
-#: src/transport/plugin_transport_http_server.c:3043
+#: src/transport/plugin_transport_http_server.c:3049
 #, c-format
 msgid "Using port %u\n"
 msgstr "Usando puerto %u\n"
 
-#: src/transport/plugin_transport_http_server.c:3062
+#: src/transport/plugin_transport_http_server.c:3068
 #, c-format
 msgid "Specific IPv4 address `%s' in configuration file is invalid!\n"
 msgstr ""
 "¡La dirección IPv4 «%s» especificada en el fichero de configuración no es "
 "válida!\n"
 
-#: src/transport/plugin_transport_http_server.c:3097
+#: src/transport/plugin_transport_http_server.c:3103
 #, c-format
 msgid "Specific IPv6 address `%s' in configuration file is invalid!\n"
 msgstr ""
 "¡La dirección IPv6 «%s» especificada en el fichero de configuración no es "
 "válida!\n"
 
-#: src/transport/plugin_transport_http_server.c:3172
+#: src/transport/plugin_transport_http_server.c:3178
 #, c-format
 msgid "Using external hostname `%s'\n"
 msgstr "Usando nombre de máquina externo «%s»\n"
 
-#: src/transport/plugin_transport_http_server.c:3193
+#: src/transport/plugin_transport_http_server.c:3199
 #, c-format
 msgid "Notifying transport only about hostname `%s'\n"
 msgstr "Notificando al transporte sólo el nombre de máquina «%s»\n"
 
-#: src/transport/plugin_transport_http_server.c:3210
+#: src/transport/plugin_transport_http_server.c:3216
 #, c-format
 msgid "Maximum number of connections is %u\n"
 msgstr "El número máximo de conexiones es %u\n"
 
-#: src/transport/plugin_transport_http_server.c:3536
+#: src/transport/plugin_transport_http_server.c:3542
 #, fuzzy
 msgid "Unable to compile URL regex\n"
 msgstr "¡Imposible obtener «HELLO» del par!\n"
 
-#: src/transport/plugin_transport_smtp.c:221
+#: src/transport/plugin_transport_smtp.c:223
 #, c-format
 msgid "Received malformed message via %s. Ignored.\n"
 msgstr "Mensaje mal formado recibido vía %s. Ignorado.\n"
 
-#: src/transport/plugin_transport_smtp.c:308
+#: src/transport/plugin_transport_smtp.c:310
 msgid "SMTP filter string to invalid, lacks ': '\n"
 msgstr "La cadena de filtrado SMTP no es válida, carece de «: »\n"
 
 # to should be too
-#: src/transport/plugin_transport_smtp.c:317
+#: src/transport/plugin_transport_smtp.c:319
 #, c-format
 msgid "SMTP filter string to long, capped to `%s'\n"
 msgstr "La cadena de filtrado SMTP es demasiado larga, recortada a «%s»\n"
 
-#: src/transport/plugin_transport_smtp.c:412
-#: src/transport/plugin_transport_smtp.c:422
-#: src/transport/plugin_transport_smtp.c:435
-#: src/transport/plugin_transport_smtp.c:454
-#: src/transport/plugin_transport_smtp.c:477
-#: src/transport/plugin_transport_smtp.c:485
-#: src/transport/plugin_transport_smtp.c:498
-#: src/transport/plugin_transport_smtp.c:509
+#: src/transport/plugin_transport_smtp.c:414
+#: src/transport/plugin_transport_smtp.c:424
+#: src/transport/plugin_transport_smtp.c:437
+#: src/transport/plugin_transport_smtp.c:456
+#: src/transport/plugin_transport_smtp.c:479
+#: src/transport/plugin_transport_smtp.c:487
+#: src/transport/plugin_transport_smtp.c:500
+#: src/transport/plugin_transport_smtp.c:511
 #, c-format
 msgid "SMTP: `%s' failed: %s.\n"
 msgstr "SMTP: «%s» falló: %s.\n"
 
-#: src/transport/plugin_transport_smtp.c:650
+#: src/transport/plugin_transport_smtp.c:652
 msgid "No email-address specified, can not start SMTP transport.\n"
 msgstr ""
 "No se ha especificado una dirección de correo, no se puede iniciar el "
 "transporte SMTP.\n"
 
-#: src/transport/plugin_transport_smtp.c:662
+#: src/transport/plugin_transport_smtp.c:664
 msgid "# bytes received via SMTP"
 msgstr "# bytes recibidos vía SMTP"
 
-#: src/transport/plugin_transport_smtp.c:663
+#: src/transport/plugin_transport_smtp.c:665
 msgid "# bytes sent via SMTP"
 msgstr "# bytes enviados vía SMTP"
 
-#: src/transport/plugin_transport_smtp.c:665
+#: src/transport/plugin_transport_smtp.c:667
 msgid "# bytes dropped by SMTP (outgoing)"
 msgstr "# bytes omitidos por SMTP (salientes)"
 
-#: src/transport/plugin_transport_tcp.c:1545
-#: src/transport/plugin_transport_tcp.c:2871
-#: src/transport/plugin_transport_xt.c:1551
-#: src/transport/plugin_transport_xt.c:2877
+#: src/transport/plugin_transport_tcp.c:1551
+#: src/transport/plugin_transport_tcp.c:2877
+#: src/transport/plugin_transport_xt.c:1553
+#: src/transport/plugin_transport_xt.c:2879
 #, c-format
 msgid "Unexpected address length: %u bytes\n"
 msgstr "Longitud de dirección inesperada: %u bytes\n"
 
-#: src/transport/plugin_transport_tcp.c:1728
-#: src/transport/plugin_transport_tcp.c:1952
-#: src/transport/plugin_transport_tcp.c:3135
-#: src/transport/plugin_transport_tcp.c:4012
-#: src/transport/plugin_transport_xt.c:1734
-#: src/transport/plugin_transport_xt.c:1958
-#: src/transport/plugin_transport_xt.c:3141
+#: src/transport/plugin_transport_tcp.c:1734
+#: src/transport/plugin_transport_tcp.c:1958
+#: src/transport/plugin_transport_tcp.c:3141
+#: src/transport/plugin_transport_tcp.c:4018
+#: src/transport/plugin_transport_xt.c:1736
+#: src/transport/plugin_transport_xt.c:1960
+#: src/transport/plugin_transport_xt.c:3143
 msgid "# TCP sessions active"
 msgstr "# Sesiones TCP activas"
 
-#: src/transport/plugin_transport_tcp.c:1770
-#: src/transport/plugin_transport_tcp.c:1934
-#: src/transport/plugin_transport_tcp.c:2058
-#: src/transport/plugin_transport_tcp.c:2131
-#: src/transport/plugin_transport_tcp.c:2231
-#: src/transport/plugin_transport_tcp.c:2256
-#: src/transport/plugin_transport_xt.c:1776
-#: src/transport/plugin_transport_xt.c:1940
-#: src/transport/plugin_transport_xt.c:2064
-#: src/transport/plugin_transport_xt.c:2137
-#: src/transport/plugin_transport_xt.c:2237
-#: src/transport/plugin_transport_xt.c:2262
+#: src/transport/plugin_transport_tcp.c:1776
+#: src/transport/plugin_transport_tcp.c:1940
+#: src/transport/plugin_transport_tcp.c:2064
+#: src/transport/plugin_transport_tcp.c:2137
+#: src/transport/plugin_transport_tcp.c:2237
+#: src/transport/plugin_transport_tcp.c:2262
+#: src/transport/plugin_transport_xt.c:1778
+#: src/transport/plugin_transport_xt.c:1942
+#: src/transport/plugin_transport_xt.c:2066
+#: src/transport/plugin_transport_xt.c:2139
+#: src/transport/plugin_transport_xt.c:2239
+#: src/transport/plugin_transport_xt.c:2264
 msgid "# bytes currently in TCP buffers"
 msgstr "# bytes actualmente en los buffer TCP"
 
-#: src/transport/plugin_transport_tcp.c:1773
-#: src/transport/plugin_transport_xt.c:1779
+#: src/transport/plugin_transport_tcp.c:1779
+#: src/transport/plugin_transport_xt.c:1781
 msgid "# bytes discarded by TCP (disconnect)"
 msgstr "# bytes descartados por TCP (desconectado)"
 
-#: src/transport/plugin_transport_tcp.c:2061
-#: src/transport/plugin_transport_xt.c:2067
+#: src/transport/plugin_transport_tcp.c:2067
+#: src/transport/plugin_transport_xt.c:2069
 msgid "# bytes discarded by TCP (timeout)"
 msgstr "# bytes omitidos por TCP (expirados)"
 
-#: src/transport/plugin_transport_tcp.c:2135
-#: src/transport/plugin_transport_xt.c:2141
+#: src/transport/plugin_transport_tcp.c:2141
+#: src/transport/plugin_transport_xt.c:2143
 msgid "# bytes transmitted via TCP"
 msgstr "# bytes recibidos vía TCP"
 
-#: src/transport/plugin_transport_tcp.c:2533
-#: src/transport/plugin_transport_xt.c:2539
+#: src/transport/plugin_transport_tcp.c:2539
+#: src/transport/plugin_transport_xt.c:2541
 msgid "# requests to create session with invalid address"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:2709
-#: src/transport/plugin_transport_xt.c:2715
+#: src/transport/plugin_transport_tcp.c:2715
+#: src/transport/plugin_transport_xt.c:2717
 msgid "# transport-service disconnect requests for TCP"
 msgstr "# peticiones de desconexión del servicio de transporte por TCP"
 
-#: src/transport/plugin_transport_tcp.c:3201
-#: src/transport/plugin_transport_xt.c:3207
+#: src/transport/plugin_transport_tcp.c:3207
+#: src/transport/plugin_transport_xt.c:3209
 msgid "# TCP WELCOME messages received"
 msgstr "# Mensajes «WELCOME» TCP recibidos"
 
-#: src/transport/plugin_transport_tcp.c:3407
-#: src/transport/plugin_transport_xt.c:3413
+#: src/transport/plugin_transport_tcp.c:3413
+#: src/transport/plugin_transport_xt.c:3415
 msgid "# bytes received via TCP"
 msgstr "# bytes recibidos vía TCP"
 
-#: src/transport/plugin_transport_tcp.c:3458
-#: src/transport/plugin_transport_tcp.c:3516
-#: src/transport/plugin_transport_xt.c:3464
-#: src/transport/plugin_transport_xt.c:3522
+#: src/transport/plugin_transport_tcp.c:3464
+#: src/transport/plugin_transport_tcp.c:3522
+#: src/transport/plugin_transport_xt.c:3466
+#: src/transport/plugin_transport_xt.c:3524
 #, fuzzy
 msgid "# TCP server connections active"
 msgstr "# conexiones «stream» activas"
 
-#: src/transport/plugin_transport_tcp.c:3462
-#: src/transport/plugin_transport_xt.c:3468
+#: src/transport/plugin_transport_tcp.c:3468
+#: src/transport/plugin_transport_xt.c:3470
 #, fuzzy
 msgid "# TCP server connect events"
 msgstr "# Pares conectados"
 
-#: src/transport/plugin_transport_tcp.c:3468
-#: src/transport/plugin_transport_xt.c:3474
+#: src/transport/plugin_transport_tcp.c:3474
+#: src/transport/plugin_transport_xt.c:3476
 msgid "TCP connection limit reached, suspending server\n"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3470
-#: src/transport/plugin_transport_xt.c:3476
+#: src/transport/plugin_transport_tcp.c:3476
+#: src/transport/plugin_transport_xt.c:3478
 msgid "# TCP service suspended"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3510
-#: src/transport/plugin_transport_xt.c:3516
+#: src/transport/plugin_transport_tcp.c:3516
+#: src/transport/plugin_transport_xt.c:3518
 msgid "# TCP service resumed"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3520
-#: src/transport/plugin_transport_xt.c:3526
+#: src/transport/plugin_transport_tcp.c:3526
+#: src/transport/plugin_transport_xt.c:3528
 msgid "# network-level TCP disconnect events"
 msgstr "# eventos de desconexión TCP a nivel de red"
 
-#: src/transport/plugin_transport_tcp.c:3839
-#: src/transport/plugin_transport_xt.c:3847
+#: src/transport/plugin_transport_tcp.c:3845
+#: src/transport/plugin_transport_xt.c:3849
 msgid "Failed to start service.\n"
 msgstr "Se produjo un fallo al iniciar el servicio.\n"
 
-#: src/transport/plugin_transport_tcp.c:4000
+#: src/transport/plugin_transport_tcp.c:4006
 #, c-format
 msgid "TCP transport listening on port %llu\n"
 msgstr "Transporte TCP escuchando en el puerto %llu\n"
 
-#: src/transport/plugin_transport_tcp.c:4004
+#: src/transport/plugin_transport_tcp.c:4010
 msgid "TCP transport not listening on any port (client only)\n"
 msgstr "Transporte TCP no escuchando en ningún puerto (únicamente cliente)\n"
 
-#: src/transport/plugin_transport_tcp.c:4008
+#: src/transport/plugin_transport_tcp.c:4014
 #, c-format
 msgid "TCP transport advertises itself as being on port %llu\n"
 msgstr "El transporte TCP anuncia que está en el puerto %llu\n"
 
-#: src/transport/plugin_transport_udp_broadcasting.c:166
+#: src/transport/plugin_transport_udp_broadcasting.c:168
 #, fuzzy
 msgid "# Multicast HELLO beacons received via UDP"
 msgstr "# beacons HELLO multicast IPv6 recibidos vía UDP"
 
-#: src/transport/plugin_transport_udp_broadcasting.c:546
+#: src/transport/plugin_transport_udp_broadcasting.c:548
 msgid ""
 "Disabling HELLO broadcasting due to friend-to-friend only configuration!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp_broadcasting.c:563
+#: src/transport/plugin_transport_udp_broadcasting.c:565
 #, c-format
 msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n"
 msgstr ""
 "Se produjo un fallo al establecer la opción de «broadcast» IPv4 para el "
 "«socket» en el puerto %d\n"
 
-#: src/transport/plugin_transport_udp.c:3365
+#: src/transport/plugin_transport_udp.c:3371
 #, c-format
 msgid ""
 "UDP could not transmit message to `%s': Network seems down, please check "
@@ -8269,7 +8094,7 @@ msgstr ""
 "UDP no pudo transmitir el mensaje a «%s»: La red parece caída, por favor, "
 "compruebe su configuración de red\n"
 
-#: src/transport/plugin_transport_udp.c:3379
+#: src/transport/plugin_transport_udp.c:3385
 #, fuzzy
 msgid ""
 "UDP could not transmit IPv6 message! Please check your network configuration "
@@ -8279,152 +8104,147 @@ msgstr ""
 "configuración de red y deshabilite IPv6 si su conexión carece de una "
 "dirección IPv6 global\n"
 
-#: src/transport/plugin_transport_udp.c:3697
-#: src/transport/plugin_transport_udp.c:3796
+#: src/transport/plugin_transport_udp.c:3703
+#: src/transport/plugin_transport_udp.c:3802
 #, fuzzy, c-format
 msgid "Failed to bind UDP socket to %s: %s\n"
 msgstr "Se produjo un fallo al abrir los «sockets» UDP\n"
 
-#: src/transport/plugin_transport_udp.c:3715
-#: src/transport/plugin_transport_xu.c:2141
+#: src/transport/plugin_transport_udp.c:3721
+#: src/transport/plugin_transport_xu.c:2143
 #, fuzzy
 msgid "Disabling IPv4 since it is not supported on this system!\n"
 msgstr "¡Deshabilitando IPv6 ya que no está soportado en este sistema!\n"
 
-#: src/transport/plugin_transport_udp.c:3806
+#: src/transport/plugin_transport_udp.c:3812
 msgid "Failed to open UDP sockets\n"
 msgstr "Se produjo un fallo al abrir los «sockets» UDP\n"
 
-#: src/transport/plugin_transport_udp.c:3877
-#: src/transport/plugin_transport_udp.c:3891
-#: src/transport/plugin_transport_xu.c:2299
-#: src/transport/plugin_transport_xu.c:2313
+#: src/transport/plugin_transport_udp.c:3883
+#: src/transport/plugin_transport_udp.c:3897
+#: src/transport/plugin_transport_xu.c:2301
+#: src/transport/plugin_transport_xu.c:2315
 msgid "must be in [0,65535]"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3923
-#: src/transport/plugin_transport_xu.c:2345
+#: src/transport/plugin_transport_udp.c:3929
+#: src/transport/plugin_transport_xu.c:2347
 #, fuzzy
 msgid "must be valid IPv4 address"
 msgstr "«%s» no es una dirección IP válida.\n"
 
-#: src/transport/plugin_transport_udp.c:3950
-#: src/transport/plugin_transport_xu.c:2372
+#: src/transport/plugin_transport_udp.c:3956
+#: src/transport/plugin_transport_xu.c:2374
 #, fuzzy
 msgid "must be valid IPv6 address"
 msgstr "«%s» no es una dirección IP válida.\n"
 
-#: src/transport/plugin_transport_udp.c:4014
+#: src/transport/plugin_transport_udp.c:4020
 #, fuzzy
 msgid "Failed to create UDP network sockets\n"
 msgstr "Se produjo un fallo al crear una nueva firma"
 
-#: src/transport/plugin_transport_unix.c:1401
-#, fuzzy, c-format
-msgid "Cannot create path to `%s'\n"
-msgstr "Se produjo un fallo al crear la página para «%s»\n"
-
-#: src/transport/plugin_transport_unix.c:1414
+#: src/transport/plugin_transport_unix.c:1416
 #, fuzzy, c-format
 msgid "Cannot bind to `%s'\n"
 msgstr "Imposible hallar el hash de '%s'.\n"
 
-#: src/transport/plugin_transport_unix.c:1814
+#: src/transport/plugin_transport_unix.c:1816
 #, fuzzy
 msgid "Failed to open UNIX listen socket\n"
 msgstr "Se produjo un fallo al abrir los «sockets» UNIX\n"
 
-#: src/transport/plugin_transport_wlan.c:766
+#: src/transport/plugin_transport_wlan.c:768
 #, fuzzy
 msgid "# ACKs sent"
 msgstr "# ACK WLAN enviados"
 
-#: src/transport/plugin_transport_wlan.c:786
+#: src/transport/plugin_transport_wlan.c:788
 #, fuzzy
 msgid "# Messages defragmented"
 msgstr "# mensajes defragmentados"
 
-#: src/transport/plugin_transport_wlan.c:827
-#: src/transport/plugin_transport_wlan.c:912
+#: src/transport/plugin_transport_wlan.c:829
+#: src/transport/plugin_transport_wlan.c:914
 #, fuzzy
 msgid "# Sessions allocated"
 msgstr "# sesiones WLAN alojadas"
 
-#: src/transport/plugin_transport_wlan.c:1033
+#: src/transport/plugin_transport_wlan.c:1035
 #, fuzzy
 msgid "# message fragments sent"
 msgstr "# fragmentos de mensaje WLAN enviados"
 
-#: src/transport/plugin_transport_wlan.c:1062
+#: src/transport/plugin_transport_wlan.c:1064
 #, fuzzy
 msgid "# messages pending (with fragmentation)"
 msgstr "# mensajes WLAN pendientes (con fragmentación)"
 
-#: src/transport/plugin_transport_wlan.c:1191
-#: src/transport/plugin_transport_wlan.c:1282
-#: src/transport/plugin_transport_wlan.c:2303
+#: src/transport/plugin_transport_wlan.c:1193
+#: src/transport/plugin_transport_wlan.c:1284
+#: src/transport/plugin_transport_wlan.c:2305
 #, fuzzy
 msgid "# MAC endpoints allocated"
 msgstr "# MAC de destino WLAN alojadas"
 
-#: src/transport/plugin_transport_wlan.c:1565
+#: src/transport/plugin_transport_wlan.c:1567
 #, fuzzy
 msgid "# ACKs received"
 msgstr "# ACK recibidos vía WLAN"
 
-#: src/transport/plugin_transport_wlan.c:1634
+#: src/transport/plugin_transport_wlan.c:1636
 #, fuzzy
 msgid "# DATA messages discarded due to CRC32 error"
 msgstr "# mensajes DATA WLAN descartados debido a un error en el CRC32"
 
-#: src/transport/plugin_transport_wlan.c:1738
+#: src/transport/plugin_transport_wlan.c:1740
 #, fuzzy
 msgid "# HELLO beacons sent"
 msgstr "# «beacons HELLO» enviados vía WLAN"
 
-#: src/transport/plugin_transport_wlan.c:1854
+#: src/transport/plugin_transport_wlan.c:1856
 #, fuzzy
 msgid "# DATA messages received"
 msgstr "# Mensajes «GAP PUT» recibidos"
 
-#: src/transport/plugin_transport_wlan.c:1888
+#: src/transport/plugin_transport_wlan.c:1890
 #, fuzzy
 msgid "# DATA messages processed"
 msgstr "# mensajes «DATA» WLAN procesados"
 
-#: src/transport/plugin_transport_wlan.c:2278
+#: src/transport/plugin_transport_wlan.c:2280
 #, c-format
 msgid "Helper binary `%s' not SUID, cannot run WLAN transport\n"
 msgstr ""
 "El ejecutable auxiliar «%s» no tiene activado el bit SUID, no se puede "
 "ejecutar el transporte WLAN\n"
 
-#: src/transport/plugin_transport_wlan.c:2300
+#: src/transport/plugin_transport_wlan.c:2302
 #, fuzzy
 msgid "# sessions allocated"
 msgstr "# sesiones WLAN alojadas"
 
-#: src/transport/plugin_transport_xt.c:4008
+#: src/transport/plugin_transport_xt.c:4010
 #, fuzzy, c-format
 msgid "XT transport listening on port %llu\n"
 msgstr "Transporte TCP escuchando en el puerto %llu\n"
 
-#: src/transport/plugin_transport_xt.c:4012
+#: src/transport/plugin_transport_xt.c:4014
 #, fuzzy
 msgid "XT transport not listening on any port (client only)\n"
 msgstr "Transporte TCP no escuchando en ningún puerto (únicamente cliente)\n"
 
-#: src/transport/plugin_transport_xt.c:4016
+#: src/transport/plugin_transport_xt.c:4018
 #, fuzzy, c-format
 msgid "XT transport advertises itself as being on port %llu\n"
 msgstr "El transporte TCP anuncia que está en el puerto %llu\n"
 
-#: src/transport/plugin_transport_xt.c:4020
+#: src/transport/plugin_transport_xt.c:4022
 #, fuzzy
 msgid "# XT sessions active"
 msgstr "# Sesiones TCP activas"
 
-#: src/transport/plugin_transport_xu.c:1235
+#: src/transport/plugin_transport_xu.c:1237
 #, fuzzy, c-format
 msgid ""
 "XU could not transmit message to `%s': Network seems down, please check your "
@@ -8433,7 +8253,7 @@ msgstr ""
 "UDP no pudo transmitir el mensaje a «%s»: La red parece caída, por favor, "
 "compruebe su configuración de red\n"
 
-#: src/transport/plugin_transport_xu.c:1249
+#: src/transport/plugin_transport_xu.c:1251
 #, fuzzy
 msgid ""
 "XU could not transmit IPv6 message! Please check your network configuration "
@@ -8443,48 +8263,48 @@ msgstr ""
 "configuración de red y deshabilite IPv6 si su conexión carece de una "
 "dirección IPv6 global\n"
 
-#: src/transport/plugin_transport_xu.c:2123
-#: src/transport/plugin_transport_xu.c:2222
+#: src/transport/plugin_transport_xu.c:2125
+#: src/transport/plugin_transport_xu.c:2224
 #, fuzzy, c-format
 msgid "Failed to bind XU socket to %s: %s\n"
 msgstr "Se produjo un fallo al abrir los «sockets» UDP\n"
 
-#: src/transport/plugin_transport_xu.c:2232
+#: src/transport/plugin_transport_xu.c:2234
 #, fuzzy
 msgid "Failed to open XU sockets\n"
 msgstr "Se produjo un fallo al abrir los «sockets» UDP\n"
 
-#: src/transport/plugin_transport_xu.c:2396
+#: src/transport/plugin_transport_xu.c:2398
 #, fuzzy
 msgid "Failed to create XU network sockets\n"
 msgstr "Se produjo un fallo al crear una nueva firma"
 
-#: src/transport/tcp_connection_legacy.c:450
+#: src/transport/tcp_connection_legacy.c:452
 #, c-format
 msgid "Access denied to `%s'\n"
 msgstr "Acceso denegado a «%s»\n"
 
-#: src/transport/tcp_connection_legacy.c:467
+#: src/transport/tcp_connection_legacy.c:469
 #, c-format
 msgid "Accepting connection from `%s': %p\n"
 msgstr "Aceptando conexión desde «%s»: %p\n"
 
-#: src/transport/tcp_server_legacy.c:472 src/util/service.c:1109
+#: src/transport/tcp_server_legacy.c:474 src/util/service.c:1666
 #, c-format
 msgid "`%s' failed for port %d (%s).\n"
 msgstr "«%s» falló para el puerto %d (%s).\n"
 
-#: src/transport/tcp_server_legacy.c:482 src/util/service.c:1119
+#: src/transport/tcp_server_legacy.c:484 src/util/service.c:1676
 #, c-format
 msgid "`%s' failed for port %d (%s): address already in use\n"
 msgstr "«%s» falló para el puerto %d (%s): dirección en uso actualmente\n"
 
-#: src/transport/tcp_server_legacy.c:488 src/util/service.c:1125
+#: src/transport/tcp_server_legacy.c:490 src/util/service.c:1682
 #, fuzzy, c-format
 msgid "`%s' failed for `%s': address already in use\n"
 msgstr "«%s» falló para «%.*s»: dirección en uso actualmente\n"
 
-#: src/transport/tcp_server_legacy.c:888
+#: src/transport/tcp_server_legacy.c:890
 #, c-format
 msgid ""
 "Processing code for message of type %u did not call "
@@ -8493,195 +8313,197 @@ msgstr ""
 "El código de procesado para el mensaje del tipo %u no llamó a "
 "«GNUNET_SERVER_receive_done» después de %s\n"
 
-#: src/transport/tcp_service_legacy.c:337 src/util/service.c:2378
+#: src/transport/tcp_service_legacy.c:339 src/util/service.c:870
 #, c-format
 msgid "Unknown address family %d\n"
 msgstr "Familia de direcciones %d desconocida\n"
 
-#: src/transport/tcp_service_legacy.c:344
+#: src/transport/tcp_service_legacy.c:346
 #, c-format
 msgid "Access from `%s' denied to service `%s'\n"
 msgstr "Acceso denegado desde «%s» al servicio «%s»\n"
 
-#: src/transport/tcp_service_legacy.c:400 src/util/service.c:437
+#: src/transport/tcp_service_legacy.c:402 src/util/service.c:994
 #, c-format
 msgid "Could not parse IPv4 network specification `%s' for `%s:%s'\n"
 msgstr "No se pudo procesar la especificación de red IPv4 «%s» para «%s:%s»\n"
 
-#: src/transport/tcp_service_legacy.c:438 src/util/service.c:480
+#: src/transport/tcp_service_legacy.c:440 src/util/service.c:1037
 #, c-format
 msgid "Could not parse IPv6 network specification `%s' for `%s:%s'\n"
 msgstr "No se pudo procesar la especificación de red IPv6 «%s» para «%s:%s»\n"
 
-#: src/transport/tcp_service_legacy.c:902 src/util/service.c:1040
+#: src/transport/tcp_service_legacy.c:904 src/util/service.c:1597
 msgid "Could not access a pre-bound socket, will try to bind myself\n"
 msgstr ""
 "No se pudo acceder a un «socket» pre-ascociado, lo intentaré asociar yo "
 "mismo\n"
 
-#: src/transport/tcp_service_legacy.c:951
-#: src/transport/tcp_service_legacy.c:969 src/util/service.c:1192
+#: src/transport/tcp_service_legacy.c:953
+#: src/transport/tcp_service_legacy.c:971 src/util/service.c:1750
 #, c-format
 msgid "Specified value for `%s' of service `%s' is invalid\n"
 msgstr "El valor especificado «%s» para el servicio «%s» no es válido\n"
 
-#: src/transport/tcp_service_legacy.c:994 src/util/service.c:1224
+#: src/transport/tcp_service_legacy.c:996 src/util/service.c:1783
 #, c-format
 msgid "Could not access pre-bound socket %u, will try to bind myself\n"
 msgstr ""
 "No se pudo acceder al «socket» pre-ascociado %u, lo intentaré asociar yo "
 "mismo\n"
 
-#: src/transport/tcp_service_legacy.c:1159
+#: src/transport/tcp_service_legacy.c:1161
 #, c-format
 msgid "Failed to start `%s' at `%s'\n"
 msgstr "Se produjo un fallo al inciar «%s» en «%s»\n"
 
-#: src/transport/tcp_service_legacy.c:1200
+#: src/transport/tcp_service_legacy.c:1202
 #, c-format
 msgid "Service `%s' runs at %s\n"
 msgstr "El servicio «%s» se ejecuta en %s\n"
 
-#: src/transport/tcp_service_legacy.c:1249 src/util/service.c:1498
+#: src/transport/tcp_service_legacy.c:1251 src/util/service.c:2057
 msgid "Service process failed to initialize\n"
 msgstr "No se pudo inicializar el proceso del servicio\n"
 
-#: src/transport/tcp_service_legacy.c:1253 src/util/service.c:1502
+#: src/transport/tcp_service_legacy.c:1255 src/util/service.c:2061
 msgid "Service process could not initialize server function\n"
 msgstr ""
 "No se pudo inicializar la función del servidor en el proceso del servicio\n"
 
-#: src/transport/tcp_service_legacy.c:1257 src/util/service.c:1506
+#: src/transport/tcp_service_legacy.c:1259 src/util/service.c:2065
 msgid "Service process failed to report status\n"
 msgstr "El proceso del servicio no devolvió un estado\n"
 
-#: src/transport/tcp_service_legacy.c:1311 src/util/disk.c:1521
-#: src/util/service.c:1376
+#: src/transport/tcp_service_legacy.c:1313 src/util/disk.c:1525
+#: src/util/service.c:1935
 #, c-format
 msgid "Cannot obtain information about user `%s': %s\n"
 msgstr "No se pudo obtener información acerca del usuario «%s»: %s\n"
 
-#: src/transport/tcp_service_legacy.c:1312 src/util/service.c:1378
+#: src/transport/tcp_service_legacy.c:1314 src/util/service.c:1937
 msgid "No such user"
 msgstr "No existe tal usuario"
 
-#: src/transport/tcp_service_legacy.c:1325 src/util/service.c:1397
+#: src/transport/tcp_service_legacy.c:1327 src/util/service.c:1956
 #, c-format
 msgid "Cannot change user/group to `%s': %s\n"
 msgstr "Imposible cambiar el usuario/grupo a «%s»: %s\n"
 
-#: src/transport/tcp_service_legacy.c:1396 src/util/service.c:1757
+#: src/transport/tcp_service_legacy.c:1398 src/util/service.c:2318
 msgid "do daemonize (detach from terminal)"
 msgstr "demonizar (desasociar del terminal)"
 
-#: src/transport/tcp_service_legacy.c:1446 src/util/program.c:277
-#: src/util/service.c:1820
+#: src/transport/tcp_service_legacy.c:1448 src/util/service.c:2382
+#: src/util/service.c:2397
 #, fuzzy, c-format
 msgid "Malformed configuration file `%s', exit ...\n"
 msgstr "Se produjo un fallo al borrar el fichero de configuración %s\n"
 
-#: src/transport/tcp_service_legacy.c:1456 src/util/program.c:297
-#: src/util/service.c:1831
+#: src/transport/tcp_service_legacy.c:1458 src/util/service.c:2409
 #, fuzzy
 msgid "Malformed configuration, exit ...\n"
 msgstr "Se produjo un fallo al borrar el fichero de configuración %s\n"
 
-#: src/transport/tcp_service_legacy.c:1461 src/util/program.c:290
-#: src/util/service.c:1837
+#: src/transport/tcp_service_legacy.c:1463
 #, c-format
 msgid "Could not access configuration file `%s'\n"
 msgstr "No se pudo acceder al fichero de configuración «%s»\n"
 
-#: src/util/bio.c:179 src/util/bio.c:187
+#: src/transport/transport_api2_communication.c:764
+msgid "Dropped backchanel message: handler not provided by communicator\n"
+msgstr ""
+
+#: src/util/bio.c:181 src/util/bio.c:189
 #, c-format
 msgid "Error reading `%s': %s"
 msgstr "Error leyendo «%s»: %s"
 
-#: src/util/bio.c:189
+#: src/util/bio.c:191
 msgid "End of file"
 msgstr "Fin del fichero"
 
-#: src/util/bio.c:246
+#: src/util/bio.c:248
 #, c-format
 msgid "Error reading length of string `%s'"
 msgstr "Se produjo un error leyendo la cadena «%s»"
 
-#: src/util/bio.c:256
+#: src/util/bio.c:258
 #, c-format
 msgid "String `%s' longer than allowed (%u > %u)"
 msgstr "La cadena «%s» es mayor de lo permitido (%u > %u)"
 
-#: src/util/bio.c:304
+#: src/util/bio.c:306
 #, c-format
 msgid "Serialized metadata `%s' larger than allowed (%u>%u)"
 msgstr "Los metadatos serializados «%s» son mayores de lo permitido (%u>%u)"
 
-#: src/util/bio.c:326
+#: src/util/bio.c:328
 #, c-format
 msgid "Metadata `%s' failed to deserialize"
 msgstr "Se produjo un fallo al deserializar los metadatos «%s»"
 
-#: src/util/client.c:732
+#: src/util/client.c:734
 msgid "not a valid filename"
 msgstr ""
 
-#: src/util/client.c:923
+#: src/util/client.c:925
 #, 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/common_logging.c:257 src/util/common_logging.c:1159
+#: src/util/common_logging.c:259 src/util/common_logging.c:1162
 msgid "DEBUG"
 msgstr "DEPURACIÓN"
 
-#: src/util/common_logging.c:259 src/util/common_logging.c:1157
+#: src/util/common_logging.c:261 src/util/common_logging.c:1160
 msgid "INFO"
 msgstr "INFORMACIÓN"
 
-#: src/util/common_logging.c:261 src/util/common_logging.c:1155
+#: src/util/common_logging.c:263 src/util/common_logging.c:1158
 msgid "MESSAGE"
 msgstr "MENSAJE"
 
-#: src/util/common_logging.c:263 src/util/common_logging.c:1153
+#: src/util/common_logging.c:265 src/util/common_logging.c:1156
 msgid "WARNING"
 msgstr "PELIGRO"
 
-#: src/util/common_logging.c:265 src/util/common_logging.c:1151
+#: src/util/common_logging.c:267 src/util/common_logging.c:1154
 msgid "ERROR"
 msgstr "ERROR"
 
-#: src/util/common_logging.c:267 src/util/common_logging.c:1161
+#: src/util/common_logging.c:269 src/util/common_logging.c:1164
 msgid "NONE"
 msgstr "NINGUNO"
 
-#: src/util/common_logging.c:631 src/util/common_logging.c:661
+#: src/util/common_logging.c:633 src/util/common_logging.c:663
 #, c-format
 msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n"
 msgstr ""
 
-#: src/util/common_logging.c:895
+#: src/util/common_logging.c:898
 #, c-format
 msgid "Message `%.*s' repeated %u times in the last %s\n"
 msgstr "Mensaje `%.*s» repetido %u veces en el último %s\n"
 
-#: src/util/common_logging.c:1162
+#: src/util/common_logging.c:1165
 msgid "INVALID"
 msgstr "NO VÁLIDO"
 
-#: src/util/common_logging.c:1455
+#: src/util/common_logging.c:1458
 msgid "unknown address"
 msgstr "dirección desconocida"
 
-#: src/util/common_logging.c:1497
+#: src/util/common_logging.c:1500
 msgid "invalid address"
 msgstr "dirección no válida"
 
-#: src/util/common_logging.c:1515
+#: src/util/common_logging.c:1518
 #, c-format
 msgid "Configuration fails to specify option `%s' in section `%s'!\n"
 msgstr "¡La configuración no especifica la opción «%s» en la sección «%s»!\n"
 
-#: src/util/common_logging.c:1536
+#: src/util/common_logging.c:1539
 #, c-format
 msgid ""
 "Configuration specifies invalid value for option `%s' in section `%s': %s\n"
@@ -8689,22 +8511,22 @@ msgstr ""
 "La configuración especifica un valor no válido en la opción «%s» de la "
 "sección «%s»: %s\n"
 
-#: src/util/configuration.c:294
+#: src/util/configuration.c:331
 #, c-format
 msgid "Syntax error while deserializing in line %u\n"
 msgstr "Error de sintaxis en la línea %u mientras se deserializaba\n"
 
-#: src/util/configuration.c:361
+#: src/util/configuration.c:398
 #, fuzzy, c-format
 msgid "Error while reading file `%s'\n"
 msgstr "Error decodificando clave %u\n"
 
-#: src/util/configuration.c:970
+#: src/util/configuration.c:1016
 #, fuzzy
 msgid "Not a valid relative time specification"
 msgstr "Tiempo de expiración no válido para la operación «%s»\n"
 
-#: src/util/configuration.c:1059
+#: src/util/configuration.c:1105
 #, c-format
 msgid ""
 "Configuration value '%s' for '%s' in section '%s' is not in set of legal "
@@ -8713,24 +8535,24 @@ msgstr ""
 "El valor de configuración «%s» para «%s» de la sección «%s» no está dentro "
 "de las opciones legales\n"
 
-#: src/util/configuration.c:1178
+#: src/util/configuration.c:1224
 #, c-format
 msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n"
 msgstr ""
 
-#: src/util/configuration.c:1211
+#: src/util/configuration.c:1257
 #, fuzzy, c-format
 msgid "Missing closing `%s' in option `%s'\n"
 msgstr "Falta la opción «%s» para la operación «%s»\n"
 
-#: src/util/configuration.c:1279
+#: src/util/configuration.c:1325
 #, c-format
 msgid ""
 "Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined "
 "as an environmental variable\n"
 msgstr ""
 
-#: src/util/container_bloomfilter.c:530
+#: src/util/container_bloomfilter.c:532
 #, c-format
 msgid ""
 "Size of file on disk is incorrect for this Bloom filter (want %llu, have "
@@ -8739,43 +8561,43 @@ msgstr ""
 "El tamaño del fichero en disco es incorrecto para este «Bloom "
 "filter» (esperado %llu, tiene %llu)\n"
 
-#: src/util/crypto_ecc.c:860
+#: src/util/crypto_ecc.c:862
 #, c-format
 msgid "ECC signing failed at %s:%d: %s\n"
 msgstr "El firmado ECC falló en %s:%d: %s\n"
 
-#: src/util/crypto_ecc.c:915
+#: src/util/crypto_ecc.c:917
 #, fuzzy, c-format
 msgid "EdDSA signing failed at %s:%d: %s\n"
 msgstr "El firmado ECC falló en %s:%d: %s\n"
 
-#: src/util/crypto_ecc.c:994
+#: src/util/crypto_ecc.c:996
 #, fuzzy, c-format
 msgid "ECDSA signature verification failed at %s:%d: %s\n"
 msgstr "La verificación de la firma RSA fallo en %s:%d: %s\n"
 
-#: src/util/crypto_ecc.c:1055
+#: src/util/crypto_ecc.c:1057
 #, fuzzy, c-format
 msgid "EdDSA signature verification failed at %s:%d: %s\n"
 msgstr "La verificación de la firma RSA fallo en %s:%d: %s\n"
 
-#: src/util/crypto_ecc_setup.c:121 src/util/crypto_ecc_setup.c:160
-#: src/util/crypto_ecc_setup.c:303 src/util/crypto_ecc_setup.c:350
+#: src/util/crypto_ecc_setup.c:123 src/util/crypto_ecc_setup.c:162
+#: src/util/crypto_ecc_setup.c:305 src/util/crypto_ecc_setup.c:352
 #, c-format
 msgid "Could not acquire lock on file `%s': %s...\n"
 msgstr "No se pudo bloquear el fichero «%s»: %s...\n"
 
-#: src/util/crypto_ecc_setup.c:127 src/util/crypto_ecc_setup.c:309
+#: src/util/crypto_ecc_setup.c:129 src/util/crypto_ecc_setup.c:311
 msgid "Creating a new private key.  This may take a while.\n"
 msgstr "Generando una clave privada nueva.  Esto puede tomar un tiempo.\n"
 
-#: src/util/crypto_ecc_setup.c:164 src/util/crypto_ecc_setup.c:354
+#: src/util/crypto_ecc_setup.c:166 src/util/crypto_ecc_setup.c:356
 msgid "This may be ok if someone is currently generating a private key.\n"
 msgstr ""
 "Esto puede estar bien si alguien está actualmente generando una clave "
 "privada.\n"
 
-#: src/util/crypto_ecc_setup.c:194 src/util/crypto_ecc_setup.c:396
+#: src/util/crypto_ecc_setup.c:196 src/util/crypto_ecc_setup.c:398
 #, c-format
 msgid ""
 "When trying to read key file `%s' I found %u bytes but I need at least %u.\n"
@@ -8783,67 +8605,67 @@ msgstr ""
 "Cuando se intentaba leer el fichero de claves «%s» se encontraron %u bytes "
 "pero al menos %u son necesarios.\n"
 
-#: src/util/crypto_ecc_setup.c:199 src/util/crypto_ecc_setup.c:400
+#: src/util/crypto_ecc_setup.c:201 src/util/crypto_ecc_setup.c:402
 msgid "This may be ok if someone is currently generating a key.\n"
 msgstr ""
 "Esto puede ser correcto si alguien está actualmente generando una clave de "
 "máquina.\n"
 
-#: src/util/crypto_ecc_setup.c:466
+#: src/util/crypto_ecc_setup.c:468
 #, fuzzy
 msgid "Could not load peer's private key\n"
 msgstr "No se pudo acceder a la clave de máquina.\n"
 
-#: src/util/crypto_random.c:304
+#: src/util/crypto_random.c:306
 #, c-format
 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:848
+#: src/util/crypto_rsa.c:850
 #, fuzzy, c-format
 msgid "RSA signing failed at %s:%d: %s\n"
 msgstr "El firmado ECC falló en %s:%d: %s\n"
 
-#: src/util/crypto_rsa.c:1187
+#: src/util/crypto_rsa.c:1189
 #, 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:1251
+#: src/util/disk.c:1255
 #, c-format
 msgid "Expected `%s' to be a directory!\n"
 msgstr "¡Se esperaba que «%s» fuera un directorio!\n"
 
-#: src/util/dnsparser.c:250
+#: src/util/dnsparser.c:264
 #, c-format
 msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n"
 msgstr ""
 "Se produjo un fallo al convertir el nombre en formato DNS IDNA «%s» a UTF-8: "
 "%s\n"
 
-#: src/util/dnsparser.c:940
+#: src/util/dnsparser.c:954
 #, c-format
 msgid "Failed to convert UTF-8 name `%s' to DNS IDNA format: %s\n"
 msgstr ""
 "Se produjo un fallo al convertir el nombre en UTF-8 «%s» al formato DNS "
 "IDNA: %s\n"
 
-#: src/util/dnsstub.c:229
+#: src/util/dnsstub.c:231
 #, c-format
 msgid "Could not bind to any port: %s\n"
 msgstr "No se pudo asociar con ningún puerto: %s\n"
 
-#: src/util/dnsstub.c:360
+#: src/util/dnsstub.c:362
 #, c-format
 msgid "Received DNS response that is too small (%u bytes)"
 msgstr "Recibida respuesta DNS demasiado pequeña (%u bytes)"
 
-#: src/util/dnsstub.c:507
+#: src/util/dnsstub.c:509
 #, fuzzy, c-format
 msgid "Failed to send DNS request to %s: %s\n"
 msgstr "Se produjo un fallo al mandar la petición DNS a %s\n"
 
-#: src/util/dnsstub.c:513
+#: src/util/dnsstub.c:515
 #, c-format
 msgid "Sent DNS request to %s\n"
 msgstr "Petición DNS enviada a %s\n"
@@ -8913,11 +8735,11 @@ msgstr "Use %s para obtener una lista de opciones.\n"
 msgid "Missing mandatory option `%s'.\n"
 msgstr "Falta la opción «%s» para la operación «%s»\n"
 
-#: src/util/getopt_helpers.c:68
+#: src/util/getopt_helpers.c:70
 msgid "print the version number"
 msgstr "imprime el número de versión"
 
-#: src/util/getopt_helpers.c:113
+#: src/util/getopt_helpers.c:116
 #, c-format
 msgid ""
 "Arguments mandatory for long options are also mandatory for short options.\n"
@@ -8925,124 +8747,124 @@ msgstr ""
 "Los parámetros obligatorios para las opciones largas también lo son para sus "
 "versiones cortas.\n"
 
-#: src/util/getopt_helpers.c:201
+#: src/util/getopt_helpers.c:204
 msgid "print this help"
 msgstr "imprime esta ayuda"
 
-#: src/util/getopt_helpers.c:279
+#: src/util/getopt_helpers.c:282
 msgid "be verbose"
 msgstr ""
 
-#: src/util/getopt_helpers.c:420
+#: src/util/getopt_helpers.c:423
 msgid "configure logging to use LOGLEVEL"
 msgstr ""
 
-#: src/util/getopt_helpers.c:500
+#: src/util/getopt_helpers.c:503
 msgid "configure logging to write logs to FILENAME"
 msgstr ""
 
-#: src/util/getopt_helpers.c:522
+#: src/util/getopt_helpers.c:525
 #, fuzzy
 msgid "use configuration file FILENAME"
 msgstr "crear ficheros de configuración únicos"
 
-#: src/util/getopt_helpers.c:559 src/util/getopt_helpers.c:763
-#: src/util/getopt_helpers.c:830
+#: src/util/getopt_helpers.c:564 src/util/getopt_helpers.c:770
+#: src/util/getopt_helpers.c:839
 #, c-format
 msgid "You must pass a number to the `%s' option.\n"
 msgstr "Tienes que introducir un número en la opción «%s».\n"
 
-#: src/util/getopt_helpers.c:624
+#: src/util/getopt_helpers.c:629
 #, c-format
 msgid "You must pass relative time to the `%s' option.\n"
 msgstr "Debes introducir un tiempo relativo en la opción «%s».\n"
 
-#: src/util/getopt_helpers.c:690
+#: src/util/getopt_helpers.c:695
 #, fuzzy, c-format
 msgid "You must pass absolute time to the `%s' option.\n"
 msgstr "Debes introducir un tiempo relativo en la opción «%s».\n"
 
-#: src/util/getopt_helpers.c:754
+#: src/util/getopt_helpers.c:760
 #, c-format
 msgid "Your input for the '%s' option has to be a non negative number \n"
 msgstr ""
 
-#: src/util/getopt_helpers.c:837
+#: src/util/getopt_helpers.c:846
 #, fuzzy, c-format
 msgid "You must pass a number below %u to the `%s' option.\n"
 msgstr "Tienes que introducir un número en la opción «%s».\n"
 
-#: src/util/getopt_helpers.c:923
+#: src/util/getopt_helpers.c:932
 #, c-format
 msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n"
 msgstr ""
 
-#: src/util/gnunet-config.c:157
+#: src/util/gnunet-config.c:160
 #, fuzzy, c-format
 msgid "failed to load configuration defaults"
 msgstr "Se produjo un fallo al cargar la configuración de %s\n"
 
-#: src/util/gnunet-config.c:170
-#, c-format
-msgid "--section argument is required\n"
+#: src/util/gnunet-config.c:173
+#, fuzzy, c-format
+msgid "%s or %s argument is required\n"
 msgstr "el parámetro --section es necesario\n"
 
-#: src/util/gnunet-config.c:173
+#: src/util/gnunet-config.c:181
 #, c-format
 msgid "The following sections are available:\n"
 msgstr ""
 
-#: src/util/gnunet-config.c:224
+#: src/util/gnunet-config.c:232
 #, c-format
 msgid "--option argument required to set value\n"
 msgstr "el parámetro --option es necesario para establecer un valor\n"
 
-#: src/util/gnunet-config.c:263
+#: src/util/gnunet-config.c:286
 msgid "obtain option of value as a filename (with $-expansion)"
 msgstr ""
 "obtener la opción del valor como un nombre de fichero (con expansión del $)"
 
-#: src/util/gnunet-config.c:268
+#: src/util/gnunet-config.c:291
 msgid "name of the section to access"
 msgstr "nombre de la sección a la que acceder"
 
-#: src/util/gnunet-config.c:273
+#: src/util/gnunet-config.c:296
 msgid "name of the option to access"
 msgstr "nombre de la opción a la que acceder"
 
-#: src/util/gnunet-config.c:278
+#: src/util/gnunet-config.c:301
 msgid "value to set"
 msgstr "valor a establecer"
 
-#: src/util/gnunet-config.c:282
+#: src/util/gnunet-config.c:305
 #, fuzzy
 msgid "print available configuration sections"
 msgstr "Falta configuración sobre las opciones de claves.\n"
 
-#: src/util/gnunet-config.c:286
+#: src/util/gnunet-config.c:309
 msgid "write configuration file that only contains delta to defaults"
 msgstr ""
 
-#: src/util/gnunet-config.c:299
+#: src/util/gnunet-config.c:322
 msgid "Manipulate GNUnet configuration files"
 msgstr "Manipular ficheros de configuración de GNUnet"
 
-#: src/util/gnunet-ecc.c:92
+#: src/util/gnunet-ecc.c:94
 #, c-format
 msgid "Failed to open `%s': %s\n"
 msgstr "Se produjo un fallo al abrir «%s»: %s\n"
 
-#: src/util/gnunet-ecc.c:128
+#: src/util/gnunet-ecc.c:130
 #, fuzzy, c-format
 msgid "Generating %u keys like %s, please wait"
 msgstr "Generando %u claves, por favor, espere"
 
-#: src/util/gnunet-ecc.c:141
+#: src/util/gnunet-ecc.c:143
 #, c-format
 msgid "Generating %u keys, please wait"
 msgstr "Generando %u claves, por favor, espere"
 
-#: src/util/gnunet-ecc.c:182
+#: src/util/gnunet-ecc.c:184
 #, c-format
 msgid ""
 "\n"
@@ -9051,103 +8873,103 @@ msgstr ""
 "\n"
 "Se produjo un fallo al escribir en «%s»: %s\n"
 
-#: src/util/gnunet-ecc.c:192
+#: src/util/gnunet-ecc.c:194
 #, fuzzy, c-format
 msgid ""
 "\n"
 "Finished!\n"
 msgstr "¡Finalizado!\n"
 
-#: src/util/gnunet-ecc.c:195
+#: src/util/gnunet-ecc.c:197
 #, c-format
 msgid ""
 "\n"
 "Error, %u keys not generated\n"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:288
+#: src/util/gnunet-ecc.c:290
 #, fuzzy, c-format
 msgid "Hostkeys file `%s' not found\n"
 msgstr "El fichero de máquinas %s no fue encontrado\n"
 
-#: src/util/gnunet-ecc.c:303
+#: src/util/gnunet-ecc.c:305
 #, fuzzy, c-format
 msgid "Hostkeys file `%s' is empty\n"
 msgstr "El archivo de amigos «%s» está vacío.\n"
 
-#: src/util/gnunet-ecc.c:332
+#: src/util/gnunet-ecc.c:334
 #, fuzzy, c-format
 msgid "Could not read hostkey file: %s\n"
 msgstr "¡No se puede leer el fichero de claves de máquina!\n"
 
-#: src/util/gnunet-ecc.c:389
+#: src/util/gnunet-ecc.c:391
 msgid "No hostkey file specified on command line\n"
 msgstr "No se ha especificado la clave de máquina en la línea de comandos\n"
 
-#: src/util/gnunet-ecc.c:454
+#: src/util/gnunet-ecc.c:456
 msgid "list keys included in a file (for testing)"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:459
+#: src/util/gnunet-ecc.c:461
 msgid "number of keys to list included in a file (for testing)"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:464
+#: src/util/gnunet-ecc.c:466
 msgid "create COUNT public-private key pairs (for testing)"
 msgstr "crea «COUNT» pares de claves pública-privada (para pruebas)"
 
-#: src/util/gnunet-ecc.c:468
+#: src/util/gnunet-ecc.c:470
 msgid "print the public key in ASCII format"
 msgstr "imprime la clave pública en formato ASCII"
 
-#: src/util/gnunet-ecc.c:472
+#: src/util/gnunet-ecc.c:474
 #, fuzzy
 msgid "print the private key in ASCII format"
 msgstr "imprime la clave pública en formato ASCII"
 
-#: src/util/gnunet-ecc.c:476
+#: src/util/gnunet-ecc.c:478
 #, fuzzy
 msgid "print the public key in HEX format"
 msgstr "imprime la clave pública en formato ASCII"
 
-#: src/util/gnunet-ecc.c:480
+#: src/util/gnunet-ecc.c:482
 msgid "print examples of ECC operations (used for compatibility testing)"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:496
+#: src/util/gnunet-ecc.c:498
 msgid "Manipulate GNUnet private ECC key files"
 msgstr "Manipular los ficheros de clave privada ECC de GNUnet"
 
-#: src/util/gnunet-resolver.c:166
+#: src/util/gnunet-resolver.c:168
 msgid "perform a reverse lookup"
 msgstr "realizar una búsqueda inversa"
 
-#: src/util/gnunet-resolver.c:177
+#: src/util/gnunet-resolver.c:179
 msgid "Use build-in GNUnet stub resolver"
 msgstr "Utilizar el resolvedor interno para pruebas de GNUnet"
 
-#: src/util/gnunet-scrypt.c:240
+#: src/util/gnunet-scrypt.c:242
 #, c-format
 msgid "Loading hostkey from `%s' failed.\n"
 msgstr "La carga de la clave de la máquina desde «%s» ha fallado.\n"
 
-#: src/util/gnunet-scrypt.c:315
+#: src/util/gnunet-scrypt.c:317
 msgid "number of bits to require for the proof of work"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:320
+#: src/util/gnunet-scrypt.c:322
 msgid "file with private key, otherwise default is used"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:325
+#: src/util/gnunet-scrypt.c:327
 msgid "file with proof of work, otherwise default is used"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:330
+#: src/util/gnunet-scrypt.c:332
 msgid "time to wait between calculations"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:343
+#: src/util/gnunet-scrypt.c:345
 #, fuzzy
 msgid "Manipulate GNUnet proof of work files"
 msgstr "Manipular los ficheros de clave privada ECC de GNUnet"
@@ -9156,53 +8978,53 @@ msgstr "Manipular los ficheros de clave privada ECC de GNUnet"
 msgid "No DNS server available. DNS resolution will not be possible.\n"
 msgstr ""
 
-#: src/util/gnunet-uri.c:83
+#: src/util/gnunet-uri.c:85
 #, c-format
 msgid "No URI specified on command line\n"
 msgstr "No se ha especificado una URI en la línea de comandos. Saliendo.\n"
 
-#: src/util/gnunet-uri.c:89
+#: src/util/gnunet-uri.c:91
 #, c-format
 msgid "Invalid URI: does not start with `%s'\n"
 msgstr "URI no válida: no comienza con «%s»\n"
 
-#: src/util/gnunet-uri.c:96
+#: src/util/gnunet-uri.c:98
 #, c-format
 msgid "Invalid URI: fails to specify subsystem\n"
 msgstr "URI no válida: falla al especificar el subsistema\n"
 
-#: src/util/gnunet-uri.c:106
+#: src/util/gnunet-uri.c:108
 #, c-format
 msgid "No handler known for subsystem `%s'\n"
 msgstr "No hay un manejador conocido para el subsistema «%s»\n"
 
-#: src/util/gnunet-uri.c:168
+#: src/util/gnunet-uri.c:170
 msgid "Perform default-actions for GNUnet URIs"
 msgstr "Realizar las acciones predeterminadas para URI de GNUnet"
 
-#: src/util/helper.c:333
+#: src/util/helper.c:335
 #, c-format
 msgid "Error reading from `%s': %s\n"
 msgstr "Error leyendo de «%s»: %s\n"
 
-#: src/util/helper.c:384
+#: src/util/helper.c:386
 #, c-format
 msgid "Failed to parse inbound message from helper `%s'\n"
 msgstr ""
 "Se produjo un fallo al procesar el mensaje interno del programa auxiliar "
 "«%s»\n"
 
-#: src/util/helper.c:604
+#: src/util/helper.c:606
 #, c-format
 msgid "Error writing to `%s': %s\n"
 msgstr "Error escribiendo a «%s»: %s\n"
 
-#: src/util/network.c:134
+#: src/util/network.c:136
 #, c-format
 msgid "Unable to shorten unix path `%s' while keeping name unique\n"
 msgstr "Imposible acortar la ruta unix «%s» manteniendo el nombre único\n"
 
-#: src/util/network.c:1793 src/util/network.c:1977
+#: src/util/network.c:1794 src/util/network.c:1978
 #, c-format
 msgid ""
 "Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n"
@@ -9210,7 +9032,7 @@ msgstr ""
 "¡Error lógico interno fatal, el proceso está colgado en «%s» (abortar con "
 "CTRL-C)!\n"
 
-#: src/util/os_installation.c:507
+#: src/util/os_installation.c:509
 #, c-format
 msgid ""
 "Could not determine installation path for %s.  Set `%s' environment "
@@ -9219,57 +9041,72 @@ msgstr ""
 "No se pudo determinar la ruta de instalación de %s.  Establezca la variable "
 "de entorno «%s».\n"
 
-#: src/util/os_installation.c:879
+#: src/util/os_installation.c:881
 #, c-format
 msgid "Could not find binary `%s' in PATH!\n"
 msgstr "¡No se pudo encontrar el programa llamado «%s» en PATH!\n"
 
-#: src/util/os_installation.c:920
+#: src/util/os_installation.c:922
 #, c-format
 msgid "Binary `%s' exists, but is not SUID\n"
 msgstr ""
 
-#: src/util/os_installation.c:951
+#: src/util/os_installation.c:953
 #, fuzzy, c-format
 msgid "CreateProcess failed for binary %s (%d).\n"
 msgstr "«%s» falló para el puerto %d (%s).\n"
 
-#: src/util/os_installation.c:961
+#: src/util/os_installation.c:963
 #, c-format
 msgid "GetExitCodeProcess failed for binary %s (%d).\n"
 msgstr ""
 
-#: src/util/plugin.c:84
+#: src/util/plugin.c:86
 #, c-format
 msgid "Initialization of plugin mechanism failed: %s!\n"
 msgstr "¡La inicialización del mecanismo de módulos falló: %s!\n"
 
-#: src/util/plugin.c:149
+#: src/util/plugin.c:151
 #, c-format
 msgid "`%s' failed to resolve method '%s' with error: %s\n"
 msgstr "«%s» falló al resolver el método «%s» con error: %s\n"
 
-#: src/util/plugin.c:224
+#: src/util/plugin.c:226
 #, c-format
 msgid "`%s' failed for library `%s' with error: %s\n"
 msgstr "Falló «%s» para la biblioteca «%s» con error: %s\n"
 
-#: src/util/plugin.c:383
+#: src/util/plugin.c:385
 msgid "Could not determine plugin installation path.\n"
 msgstr "No se pudo determinar la ruta de instalación de los módulos.\n"
 
-#: src/util/regex.c:132
+#: src/util/program.c:283
+#, fuzzy, c-format
+msgid "Unreadable or malformed configuration file `%s', exit ...\n"
+msgstr "Se produjo un fallo al borrar el fichero de configuración %s\n"
+
+#: src/util/program.c:301
+#, fuzzy, c-format
+msgid "Unreadable or malformed default configuration file `%s', exit ...\n"
+msgstr "Se produjo un fallo al borrar el fichero de configuración %s\n"
+
+#: src/util/program.c:318
+#, fuzzy
+msgid "Unreadable or malformed configuration, exit ...\n"
+msgstr "Se produjo un fallo al borrar el fichero de configuración %s\n"
+
+#: src/util/regex.c:134
 #, c-format
 msgid "Bad mask: %d\n"
 msgstr ""
 
-#: src/util/resolver_api.c:216
+#: src/util/resolver_api.c:218
 #, c-format
 msgid ""
 "Missing `%s' for `%s' in configuration, DNS resolution will be unavailable.\n"
 msgstr ""
 
-#: src/util/resolver_api.c:237
+#: src/util/resolver_api.c:239
 #, fuzzy, c-format
 msgid ""
 "Missing `%s' or numeric IP address for `%s' of `%s' in configuration, DNS "
@@ -9278,12 +9115,12 @@ msgstr ""
 "¡Se debe especificar «%s» o una dirección numérica IP para «%s» de «%s» en "
 "la configuración!\n"
 
-#: src/util/resolver_api.c:873
+#: src/util/resolver_api.c:875
 #, c-format
 msgid "Timeout trying to resolve hostname `%s'.\n"
 msgstr "Expiración de plazo intentando resolver el nombre de máquina «%s».\n"
 
-#: src/util/resolver_api.c:886
+#: src/util/resolver_api.c:888
 #, c-format
 msgid "Timeout trying to resolve IP address `%s'.\n"
 msgstr "Expiración de plazo intentando resolver la dirección IP «%s».\n"
@@ -9291,24 +9128,19 @@ msgstr "Expiración de plazo intentando resolver la dirección IP «%s».\n"
 # Miguel: He traducido "default" por "predeterminado", la locución
 # "por defecto" no tiene sentido en sitios como este y he tratado
 # de ser consistente.
-#: src/util/resolver_api.c:1071
+#: src/util/resolver_api.c:1073
 #, fuzzy
 msgid "Resolver not configured correctly.\n"
 msgstr "¡El servicio predeterminado «%s» no está configurado correctamente!\n"
 
-#: src/util/resolver_api.c:1158 src/util/resolver_api.c:1181
-#: src/util/resolver_api.c:1195
+#: src/util/resolver_api.c:1160 src/util/resolver_api.c:1183
+#: src/util/resolver_api.c:1197
 #, fuzzy, c-format
 msgid "Could not resolve our FQDN: %s\n"
 msgstr ""
 "No se pudo resolver nuestro nombre de dominio cualificado (FQDN) : %s\n"
 
-#: src/util/service.c:1303
-msgid ""
-"Could not bind to any of the ports I was supposed to, refusing to run!\n"
-msgstr ""
-
-#: src/util/service.c:2123
+#: src/util/service.c:674
 #, fuzzy, c-format
 msgid ""
 "Processing code for message of type %u did not call "
@@ -9317,343 +9149,470 @@ msgstr ""
 "El código de procesado para el mensaje del tipo %u no llamó a "
 "«GNUNET_SERVER_receive_done» después de %s\n"
 
-#: src/util/signal.c:87
+#: src/util/service.c:1862
+msgid ""
+"Could not bind to any of the ports I was supposed to, refusing to run!\n"
+msgstr ""
+
+#: src/util/signal.c:89
 #, c-format
 msgid "signal (%d, %p) returned %d.\n"
 msgstr "señal (%d, %p) devolvió %d.\n"
 
-#: src/util/socks.c:595
+#: src/util/socks.c:597
 #, c-format
 msgid "Attempting to use invalid port %d as SOCKS proxy for service `%s'.\n"
 msgstr ""
 
-#: src/util/socks.c:614
+#: src/util/socks.c:616
 #, c-format
 msgid "Attempting to proxy service `%s' to invalid port %d or hostname.\n"
 msgstr ""
 
-#: src/util/strings.c:174
+#: src/util/strings.c:176
 msgid "b"
 msgstr "b"
 
-#: src/util/strings.c:471
+#: src/util/strings.c:475
 #, c-format
 msgid "Character sets requested were `%s'->`%s'\n"
 msgstr "Los conjuntos de caracteres pedidos fueron «%s»->«%s»\n"
 
-#: src/util/strings.c:598
+#: src/util/strings.c:602
 msgid "Failed to expand `$HOME': environment variable `HOME' not set"
 msgstr ""
 "Se produjo un fallo al expandir «$HOME»: variable de entorno «HOME» no "
 "establecida"
 
-#: src/util/strings.c:702
+#: src/util/strings.c:706
 msgid "µs"
 msgstr ""
 
-#: src/util/strings.c:706
+#: src/util/strings.c:710
 msgid "forever"
 msgstr "para siempre"
 
-#: src/util/strings.c:708
+#: src/util/strings.c:712
 msgid "0 ms"
 msgstr "0 ms"
 
-#: src/util/strings.c:714
+#: src/util/strings.c:718
 msgid "ms"
 msgstr "ms"
 
-#: src/util/strings.c:720
+#: src/util/strings.c:724
 msgid "s"
 msgstr "s"
 
-#: src/util/strings.c:726
+#: src/util/strings.c:730
 msgid "m"
 msgstr "m"
 
-#: src/util/strings.c:732
+#: src/util/strings.c:736
 msgid "h"
 msgstr "h"
 
-#: src/util/strings.c:739
+#: src/util/strings.c:743
 msgid "day"
 msgstr "día"
 
-#: src/util/strings.c:741
+#: src/util/strings.c:745
 msgid "days"
 msgstr "días"
 
-#: src/util/strings.c:770
+#: src/util/strings.c:774
 msgid "end of time"
 msgstr "fin del plazo"
 
-#: src/util/strings.c:1272
+#: src/util/strings.c:1277
 msgid "IPv6 address did not start with `['\n"
 msgstr "La dirección IPv6 no empezaba con «[»\n"
 
-#: src/util/strings.c:1280
+#: src/util/strings.c:1285
 msgid "IPv6 address did contain ':' to separate port number\n"
 msgstr "La dirección IPv6 contenía «:» para separar el número de puerto\n"
 
-#: src/util/strings.c:1286
+#: src/util/strings.c:1291
 msgid "IPv6 address did contain ']' before ':' to separate port number\n"
 msgstr ""
 "La dirección IPv6 contenía «]» antes de «:» para separar el número de "
 "puerto\n"
 
-#: src/util/strings.c:1293
+#: src/util/strings.c:1301
 msgid "IPv6 address did contain a valid port number after the last ':'\n"
 msgstr ""
 "La dirección IPv6 contenía un número de puerto válido después del último "
 "«:»\n"
 
-#: src/util/strings.c:1302
+#: src/util/strings.c:1310
 #, c-format
 msgid "Invalid IPv6 address `%s': %s\n"
 msgstr "Dirección IPv6 «%s» no válida: %s\n"
 
-#: src/util/strings.c:1574 src/util/strings.c:1590
+#: src/util/strings.c:1586 src/util/strings.c:1602
 msgid "Port not in range\n"
 msgstr ""
 
-#: src/util/strings.c:1599
+#: src/util/strings.c:1611
 #, fuzzy, c-format
 msgid "Malformed port policy `%s'\n"
 msgstr "Se produjo un fallo al iniciar el servicio «%s»\n"
 
-#: src/util/strings.c:1682 src/util/strings.c:1713 src/util/strings.c:1761
-#: src/util/strings.c:1782
+#: src/util/strings.c:1696 src/util/strings.c:1728 src/util/strings.c:1777
+#: src/util/strings.c:1798
 #, c-format
 msgid "Invalid format for IP: `%s'\n"
 msgstr "Formato no válido para la IP: «%s»\n"
 
-#: src/util/strings.c:1739
+#: src/util/strings.c:1754
 #, c-format
 msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)."
 msgstr "Notación de red no válida («/%d» no es válido en IPv4 CIDR)."
 
-#: src/util/strings.c:1791
+#: src/util/strings.c:1807
 #, fuzzy, c-format
 msgid "Invalid format: `%s'\n"
 msgstr "Formato de tiempo no válido «%s»\n"
 
-#: src/util/strings.c:1843
+#: src/util/strings.c:1860
 #, c-format
 msgid "Invalid network notation (does not end with ';': `%s')\n"
 msgstr "Notación de red no válida (no termina con «;»: «%s»)\n"
 
-#: src/util/strings.c:1893
+#: src/util/strings.c:1914
 #, c-format
 msgid "Wrong format `%s' for netmask\n"
 msgstr "Formato «%s» erroneo para máscara de red\n"
 
-#: src/util/strings.c:1924
+#: src/util/strings.c:1945
 #, c-format
 msgid "Wrong format `%s' for network\n"
 msgstr "Formato «%s» erroneo para red\n"
 
-#: src/vpn/gnunet-service-vpn.c:538 src/vpn/gnunet-service-vpn.c:1805
+#: src/util/time.c:828 src/util/time.c:860
+#, fuzzy, c-format
+msgid "Failed to map `%s', cannot assure monotonic time!\n"
+msgstr ""
+"Se produjo un fallo al recuperar el espacio de nombres «%s», no se pudo "
+"retomar la operación de publicación.\n"
+
+#: src/util/time.c:866
+#, c-format
+msgid ""
+"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
+msgstr ""
+
+#: src/vpn/gnunet-service-vpn.c:540 src/vpn/gnunet-service-vpn.c:1807
 #, fuzzy
 msgid "# Active channels"
 msgstr "# Túneles activos"
 
-#: src/vpn/gnunet-service-vpn.c:597
+#: src/vpn/gnunet-service-vpn.c:599
 #, fuzzy
 msgid "# Messages dropped in cadet queue (overflow)"
 msgstr "# Bytes omitidos en la cola mesh (desbordamiento)"
 
-#: src/vpn/gnunet-service-vpn.c:751
+#: src/vpn/gnunet-service-vpn.c:753
 #, fuzzy
 msgid "# ICMP packets received from cadet"
 msgstr "# Paquetes ICMP recibidos de mesh"
 
-#: src/vpn/gnunet-service-vpn.c:1094
+#: src/vpn/gnunet-service-vpn.c:1096
 #, fuzzy
 msgid "# UDP packets received from cadet"
 msgstr "# Paquetes UDP recibidos de mesh"
 
-#: src/vpn/gnunet-service-vpn.c:1253
+#: src/vpn/gnunet-service-vpn.c:1255
 #, fuzzy
 msgid "# TCP packets received from cadet"
 msgstr "# Paquetes TCP recibidos de mesh"
 
-#: src/vpn/gnunet-service-vpn.c:1465
+#: src/vpn/gnunet-service-vpn.c:1467
 #, fuzzy
 msgid "# Cadet channels created"
 msgstr "# Túneles mesh creados"
 
-#: src/vpn/gnunet-service-vpn.c:1685
+#: src/vpn/gnunet-service-vpn.c:1687
 #, c-format
 msgid "Protocol %u not supported, dropping\n"
 msgstr "Protocolo %u no soportado, omitiendo\n"
 
-#: src/vpn/gnunet-service-vpn.c:1824
+#: src/vpn/gnunet-service-vpn.c:1826
 #, fuzzy
 msgid "# Packets dropped (channel not yet online)"
 msgstr "# Paquetes ICMP omitidos (tipo no permitido)"
 
-#: src/vpn/gnunet-service-vpn.c:2004
+#: src/vpn/gnunet-service-vpn.c:2006
 msgid "# ICMPv4 packets dropped (not allowed)"
 msgstr "# Paquetes ICMPv4 omitidos (no permitido)"
 
-#: src/vpn/gnunet-service-vpn.c:2025
+#: src/vpn/gnunet-service-vpn.c:2027
 msgid "# ICMPv6 packets dropped (not allowed)"
 msgstr "# Paquetes ICMPv6 omitidos (no permitido)"
 
-#: src/vpn/gnunet-service-vpn.c:2233
+#: src/vpn/gnunet-service-vpn.c:2235
 msgid "# Packets received from TUN interface"
 msgstr "# Paquetes recibidos de la interfaz TUN"
 
-#: src/vpn/gnunet-service-vpn.c:2266 src/vpn/gnunet-service-vpn.c:2302
+#: src/vpn/gnunet-service-vpn.c:2268 src/vpn/gnunet-service-vpn.c:2304
 #, c-format
 msgid "Packet received for unmapped destination `%s' (dropping it)\n"
 msgstr "Paquete recibido para el destino «%s» no mapeado (omitiéndolo)\n"
 
-#: src/vpn/gnunet-service-vpn.c:2312
+#: src/vpn/gnunet-service-vpn.c:2314
 msgid "Received IPv4 packet with options (dropping it)\n"
 msgstr "Recibido paquete IPv4 con opciones (omitiéndolo)\n"
 
-#: src/vpn/gnunet-service-vpn.c:2326
+#: src/vpn/gnunet-service-vpn.c:2328
 #, c-format
 msgid "Received packet of unknown protocol %d from TUN (dropping it)\n"
 msgstr "Recibido paquete de protocolo %d desconocido desde TUN (omitiéndolo)\n"
 
-#: src/vpn/gnunet-service-vpn.c:2365
+#: src/vpn/gnunet-service-vpn.c:2367
 msgid "Failed to find unallocated IPv4 address in VPN's range\n"
 msgstr "No se encontraron direcciones IPv4 libres en el rango de la VPN\n"
 
-#: src/vpn/gnunet-service-vpn.c:2420
+#: src/vpn/gnunet-service-vpn.c:2422
 msgid "Failed to find unallocated IPv6 address in VPN's range\n"
 msgstr "No se encontraron direcciones IPv6 libres en el rango de la VPN\n"
 
-#: src/vpn/gnunet-service-vpn.c:2462 src/vpn/gnunet-service-vpn.c:2684
+#: src/vpn/gnunet-service-vpn.c:2464 src/vpn/gnunet-service-vpn.c:2686
 msgid "# Active destinations"
 msgstr "# Destinos activos"
 
-#: src/vpn/gnunet-service-vpn.c:2733
+#: src/vpn/gnunet-service-vpn.c:2735
 msgid "Failed to allocate IP address for new destination\n"
 msgstr ""
 "Se produjo un fallo al alojar las direcciones IP para el nuevo destino\n"
 
-#: src/vpn/gnunet-service-vpn.c:2996
+#: src/vpn/gnunet-service-vpn.c:2998
 #, fuzzy
 msgid "Must specify valid IPv6 address"
 msgstr "«%s» no es una dirección IP válida.\n"
 
-#: src/vpn/gnunet-service-vpn.c:3020
+#: src/vpn/gnunet-service-vpn.c:3022
 msgid "Must specify valid IPv6 mask"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:3028
+#: src/vpn/gnunet-service-vpn.c:3030
 msgid "IPv6 support disabled as this system does not support IPv6\n"
 msgstr ""
 "El soporte de IPv6 se deshabilita porque este sistema no soporta IPv6\n"
 
-#: src/vpn/gnunet-service-vpn.c:3041
+#: src/vpn/gnunet-service-vpn.c:3043
 #, fuzzy
 msgid "Must specify valid IPv4 address"
 msgstr "«%s» no es una dirección IP válida.\n"
 
-#: src/vpn/gnunet-service-vpn.c:3054
+#: src/vpn/gnunet-service-vpn.c:3056
 msgid "Must specify valid IPv4 mask"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:3064
+#: src/vpn/gnunet-service-vpn.c:3066
 msgid "IPv4 support disabled as this system does not support IPv4\n"
 msgstr ""
 "El soporte de IPv4 se deshabilita porque este sistema no soporta IPv4\n"
 
-#: src/vpn/gnunet-vpn.c:145
+#: src/vpn/gnunet-vpn.c:147
 msgid "Error creating tunnel\n"
 msgstr "Error creando el túnel\n"
 
-#: src/vpn/gnunet-vpn.c:189 src/vpn/gnunet-vpn.c:220
+#: src/vpn/gnunet-vpn.c:191 src/vpn/gnunet-vpn.c:222
 #, c-format
 msgid "Option `%s' makes no sense with option `%s'.\n"
 msgstr "La opción «%s» no tiene sentido con la opción «%s».\n"
 
-#: src/vpn/gnunet-vpn.c:202
+#: src/vpn/gnunet-vpn.c:204
 #, c-format
 msgid "Option `%s' or `%s' is required.\n"
 msgstr "Las opción «%s» o «%s» es necesaria.\n"
 
-#: src/vpn/gnunet-vpn.c:214
+#: src/vpn/gnunet-vpn.c:216
 #, c-format
 msgid "Option `%s' or `%s' is required when using option `%s'.\n"
 msgstr "Las opción «%s» o «%s» es necesaria cuando se usa la opción «%s».\n"
 
-#: src/vpn/gnunet-vpn.c:234
+#: src/vpn/gnunet-vpn.c:236
 #, c-format
 msgid "`%s' is not a valid peer identifier.\n"
 msgstr "«%s» no es un identificador de par válido\n"
 
-#: src/vpn/gnunet-vpn.c:254
+#: src/vpn/gnunet-vpn.c:256
 #, c-format
 msgid "`%s' is not a valid IP address.\n"
 msgstr "«%s» no es una dirección IP válida.\n"
 
-#: src/vpn/gnunet-vpn.c:290
+#: src/vpn/gnunet-vpn.c:292
 msgid "request that result should be an IPv4 address"
 msgstr "petición cuyo resultado debe ser una dirección IPv4"
 
-#: src/vpn/gnunet-vpn.c:295
+#: src/vpn/gnunet-vpn.c:297
 msgid "request that result should be an IPv6 address"
 msgstr "petición cuyo resultado debe ser una dirección IPv6"
 
-#: src/vpn/gnunet-vpn.c:301
+#: src/vpn/gnunet-vpn.c:303
 msgid "how long should the mapping be valid for new tunnels?"
 msgstr "¿cuánto tiempo debe ser válido el mapeado para túneles nuevos?"
 
-#: src/vpn/gnunet-vpn.c:307
+#: src/vpn/gnunet-vpn.c:309
 msgid "destination IP for the tunnel"
 msgstr "IP de destino para el túnel"
 
-#: src/vpn/gnunet-vpn.c:313
+#: src/vpn/gnunet-vpn.c:315
 msgid "peer offering the service we would like to access"
 msgstr "par que ofrece el servicio al que nos gustaría acceder"
 
-#: src/vpn/gnunet-vpn.c:319
+#: src/vpn/gnunet-vpn.c:321
 msgid "name of the service we would like to access"
 msgstr "nombre del servicio al que nos gustaría acceder"
 
-#: src/vpn/gnunet-vpn.c:324
+#: src/vpn/gnunet-vpn.c:326
 msgid "service is offered via TCP"
 msgstr "el servicio es ofrecido vía TCP"
 
-#: src/vpn/gnunet-vpn.c:329
+#: src/vpn/gnunet-vpn.c:331
 msgid "service is offered via UDP"
 msgstr "el servicio es ofrecido vía UDP"
 
-#: src/vpn/gnunet-vpn.c:342
+#: src/vpn/gnunet-vpn.c:344
 msgid "Setup tunnels via VPN."
 msgstr "Configurar túneles vía VPN."
 
-#: src/zonemaster/gnunet-service-zonemaster.c:836
-#: src/zonemaster/gnunet-service-zonemaster-monitor.c:414
+#: src/zonemaster/gnunet-service-zonemaster.c:838
+#: src/zonemaster/gnunet-service-zonemaster-monitor.c:416
 msgid "Failed to connect to the namestore!\n"
 msgstr "¡Se produjo un fallo al conectar con el almacén de nombres!\n"
 
-#: src/include/gnunet_common.h:770 src/include/gnunet_common.h:777
-#: src/include/gnunet_common.h:787
+#: src/include/gnunet_common.h:772 src/include/gnunet_common.h:779
+#: src/include/gnunet_common.h:789
 #, fuzzy, c-format
 msgid "Assertion failed at %s:%d. Aborting.\n"
 msgstr "Aserción fallida en %s:%d.\n"
 
-#: src/include/gnunet_common.h:795
+#: src/include/gnunet_common.h:797
 #, c-format
 msgid "Assertion failed at %s:%d.\n"
 msgstr "Aserción fallida en %s:%d.\n"
 
-#: src/include/gnunet_common.h:807
+#: src/include/gnunet_common.h:809
 #, c-format
 msgid "External protocol violation detected at %s:%d.\n"
 msgstr "Violación externa del protocolo detectada en %s:%d.\n"
 
-#: src/include/gnunet_common.h:834 src/include/gnunet_common.h:843
+#: src/include/gnunet_common.h:836 src/include/gnunet_common.h:845
 #, c-format
 msgid "`%s' failed on file `%s' at %s:%d with error: %s\n"
 msgstr "«%s» falló en el fichero «%s» en %s:%d con el error: %s\n"
 
+#, fuzzy
+#~ msgid "Invalid tunnel owner `%s'\n"
+#~ msgstr "Formato de tiempo no válido «%s»\n"
+
+#, fuzzy
+#~ msgid "Provide information about a particular tunnel"
+#~ msgstr "proveer información acerca de un túnel en particular"
+
+#, fuzzy
+#~ msgid "Failed to store membership information!\n"
+#~ msgstr ""
+#~ "Se produjo un fallo al retomar la operación de publicación «%s»: %s\n"
+
+#, fuzzy
+#~ msgid "Failed to test membership!\n"
+#~ msgstr "¡Se produjo un fallo al configurar el túnel mesh!\n"
+
+#, fuzzy
+#~ msgid "Dropping invalid fragment\n"
+#~ msgstr "Parámetro no válido «%s»\n"
+
+#, fuzzy
+#~ msgid "Failed to store fragment\n"
+#~ msgstr "Se produjo un fallo al iniciar el demonio: %s\n"
+
+#, fuzzy
+#~ msgid "Failed to get fragment!\n"
+#~ msgstr "¡Se produjo un fallo al obtener la clave de máquina!\n"
+
+#, fuzzy
+#~ msgid "Failed to get message!\n"
+#~ msgstr "¡Se produjo un fallo al obtener la clave de máquina!\n"
+
+#, fuzzy
+#~ msgid "Failed to get message fragment!\n"
+#~ msgstr "Se produjo un fallo al procesar un mensaje «HELLO»: mal formado\n"
+
+#, fuzzy
+#~ msgid "Failed to get master counters!\n"
+#~ msgstr "¡Se produjo un fallo al obtener la clave de máquina!\n"
+
+#, fuzzy
+#~ msgid "Failed to begin modifying state: %d\n"
+#~ msgstr "Se produjo un fallo al cargar el estado: %s\n"
+
+#, fuzzy
+#~ msgid "Failed to modify state: %d\n"
+#~ msgstr "Se produjo un fallo al cargar el estado: %s\n"
+
+#, fuzzy
+#~ msgid "Failed to end modifying state!\n"
+#~ msgstr "Se produjo un fallo al cargar el estado: %s\n"
+
+#, fuzzy
+#~ msgid "Failed to begin synchronizing state!\n"
+#~ msgstr "¡Se produjo un fallo al obtener la clave de máquina!\n"
+
+#, fuzzy
+#~ msgid "Failed to end synchronizing state!\n"
+#~ msgstr "¡Se produjo un fallo al obtener la clave de máquina!\n"
+
+#, fuzzy
+#~ msgid "Failed to reset state!\n"
+#~ msgstr "¡Se produjo un fallo al obtener la clave de máquina!\n"
+
+#, fuzzy
+#~ msgid "Failed to get state variable!\n"
+#~ msgstr "¡Se produjo un fallo al obtener la clave de máquina!\n"
+
+#, fuzzy
+#~ msgid "Unable to initialize Mysql.\n"
+#~ msgstr "Imposible inicializar SQLite: %s.\n"
+
+#, fuzzy
+#~ msgid "Failed to run SQL statement `%s'\n"
+#~ msgstr "Se produjo un fallo al preparar la sentencia «%s»\n"
+
+#, fuzzy
+#~ msgid "`%s' failed at %s:%d with error: %s (%d)\n"
+#~ msgstr "«%s» falló en %s: %d con el error: %s\n"
+
+#, fuzzy
+#~ msgid "SQLite database running\n"
+#~ msgstr "Base de datos sqlite ejecutándose\n"
+
+#, fuzzy
+#~ msgid "--place missing or invalid.\n"
+#~ msgstr "Parámetro no válido «%s»\n"
+
+#, fuzzy
+#~ msgid "name or public key of ego"
+#~ msgstr "Parámetro no válido «%s»\n"
+
+#, fuzzy
+#~ msgid "wait for incoming messages"
+#~ msgstr "Falló al entregar el mensaje '%s'.\n"
+
+#, fuzzy
+#~ msgid "GNS name"
+#~ msgstr "Mostrar el _nombre"
+
+#, fuzzy
+#~ msgid "method name"
+#~ msgstr "Mostrar el _nombre"
+
+#, fuzzy
+#~ msgid "number of messages to replay from history"
+#~ msgstr "número de mensajes a usar por iteración"
+
 #~ msgid "Could not resolve `%s' (%s): %s\n"
 #~ msgstr "No se pudo resolver «%s» (%s): %s\n"
 
@@ -11084,12 +11043,6 @@ msgstr "«%s» falló en el fichero «%s» en %s:%d con el error: %s\n"
 #~ "El servicio de transporte no es capaz de acceder a la clave de la "
 #~ "máquina. Saliendo.\n"
 
-#~ msgid ""
-#~ "Failed to recover namespace `%s', cannot resume publishing operation.\n"
-#~ msgstr ""
-#~ "Se produjo un fallo al recuperar el espacio de nombres «%s», no se pudo "
-#~ "retomar la operación de publicación.\n"
-
 #~ msgid "Failed to create or read private key for namespace `%s'\n"
 #~ msgstr ""
 #~ "Se produjo un fallo al crear o leer la clave privada para el espacio de "
@@ -14572,9 +14525,6 @@ msgstr "«%s» falló en el fichero «%s» en %s:%d con el error: %s\n"
 #~ msgid "No commands specified.\n"
 #~ msgstr "Ningún comando fue especificado.\n"
 
-#~ msgid "Superflous arguments (ignored).\n"
-#~ msgstr "Argumentos superfluos (ignorados).\n"
-
 #~ msgid "Query `%s' had no results.\n"
 #~ msgstr "La pregunta '%s' no tuvo resultados.\n"
 
@@ -14760,9 +14710,6 @@ msgstr "«%s» falló en el fichero «%s» en %s:%d con el error: %s\n"
 #~ "Solo se puede arrancar wizard para configurar gnunetd.\n"
 #~ "¿Te olvidaste de la opción %s'?\n"
 
-#~ msgid "Gtk GNUnet Configurator"
-#~ msgstr "Configurador Gtk de GNUnet"
-
 #~ msgid "_File"
 #~ msgstr "_Fichero"
 
index 41ac372ef3ec9aefaf2e35c52e9457255b0dc1dd..02c8d6295ff500438dcbb3da5583ab78727b194e 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnunet 0.10.1\n"
 "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2018-10-20 11:13+0200\n"
+"POT-Creation-Date: 2019-02-13 00:37+0100\n"
 "PO-Revision-Date: 2015-12-24 01:20+0100\n"
 "Last-Translator: Stéphane  Aulery <lkppo@free.fr>\n"
 "Language-Team: French <traduc@traduc.org>\n"
@@ -16,1014 +16,1009 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: src/arm/gnunet-arm.c:154
+#: src/arm/gnunet-arm.c:156
 #, c-format
 msgid "Failed to remove configuration file %s\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:160
+#: src/arm/gnunet-arm.c:162
 #, c-format
 msgid "Failed to remove servicehome directory %s\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:220 src/testbed/gnunet-service-testbed_peers.c:1137
+#: src/arm/gnunet-arm.c:222 src/testbed/gnunet-service-testbed_peers.c:1139
 msgid "Message was sent successfully"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:222 src/testbed/gnunet-service-testbed_peers.c:1139
+#: src/arm/gnunet-arm.c:224 src/testbed/gnunet-service-testbed_peers.c:1141
 msgid "We disconnected from ARM before we could send a request"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:224 src/testbed/gnunet-service-testbed_peers.c:1141
+#: src/arm/gnunet-arm.c:226 src/testbed/gnunet-service-testbed_peers.c:1143
 msgid "Unknown request status"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:240
+#: src/arm/gnunet-arm.c:242
 #, fuzzy
 msgid "is stopped"
 msgstr "%s est arrêté"
 
-#: src/arm/gnunet-arm.c:242
+#: src/arm/gnunet-arm.c:244
 #, fuzzy
 msgid "is starting"
 msgstr "%s est en cours de démarrage"
 
-#: src/arm/gnunet-arm.c:244
+#: src/arm/gnunet-arm.c:246
 #, fuzzy
 msgid "is stopping"
 msgstr "%s est en cours d'arrêt"
 
-#: src/arm/gnunet-arm.c:246
+#: src/arm/gnunet-arm.c:248
 #, fuzzy
 msgid "is starting already"
 msgstr "%s est déjà en cours de démarrage"
 
-#: src/arm/gnunet-arm.c:248
+#: src/arm/gnunet-arm.c:250
 #, fuzzy
 msgid "is stopping already"
 msgstr "%s est déjà arrêté"
 
-#: src/arm/gnunet-arm.c:250
+#: src/arm/gnunet-arm.c:252
 #, fuzzy
 msgid "is started already"
 msgstr "%s est déjà démarré"
 
-#: src/arm/gnunet-arm.c:252
+#: src/arm/gnunet-arm.c:254
 #, fuzzy
 msgid "is stopped already"
 msgstr "%s est déjà arrêté"
 
-#: src/arm/gnunet-arm.c:254
+#: src/arm/gnunet-arm.c:256
 msgid "service is not known to ARM"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:256
+#: src/arm/gnunet-arm.c:258
 #, fuzzy
 msgid "service failed to start"
 msgstr "Échec du démarrage de %s\n"
 
-#: src/arm/gnunet-arm.c:258
+#: src/arm/gnunet-arm.c:260
 msgid "service cannot be manipulated because ARM is shutting down"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:260
+#: src/arm/gnunet-arm.c:262
 #, fuzzy
 msgid "Unknown result code."
 msgstr "%.s Code d'erreur inconnu"
 
-#: src/arm/gnunet-arm.c:292
+#: src/arm/gnunet-arm.c:295
 msgid "Fatal error initializing ARM API.\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:320 src/arm/gnunet-arm.c:329
+#: src/arm/gnunet-arm.c:324 src/arm/gnunet-arm.c:333
 #, c-format
 msgid "Failed to start the ARM service: %s\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:363
+#: src/arm/gnunet-arm.c:368
 #, c-format
 msgid "Failed to send a stop request to the ARM service: %s\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:374
+#: src/arm/gnunet-arm.c:379
 #, c-format
 msgid "Failed to stop the ARM service: %s\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:413
+#: src/arm/gnunet-arm.c:419
 #, fuzzy, c-format
 msgid "Failed to send a request to start the `%s' service: %s\n"
 msgstr "Dernier message reçu de %s\n"
 
-#: src/arm/gnunet-arm.c:423
+#: src/arm/gnunet-arm.c:429
 #, c-format
 msgid "Failed to start the `%s' service: %s\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:460
+#: src/arm/gnunet-arm.c:467
 #, c-format
 msgid "Failed to send a request to kill the `%s' service: %%s\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:471
+#: src/arm/gnunet-arm.c:478
 #, c-format
 msgid "Failed to kill the `%s' service: %s\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:511
+#: src/arm/gnunet-arm.c:519
 #, c-format
 msgid "Failed to request a list of services: %s\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:520
+#: src/arm/gnunet-arm.c:528
 msgid "Error communicating with ARM. ARM not running?\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:526
+#: src/arm/gnunet-arm.c:534
 msgid "Running services:\n"
 msgstr "Services en exécution :\n"
 
-#: src/arm/gnunet-arm.c:614
+#: src/arm/gnunet-arm.c:623
 #, c-format
 msgid "Now only monitoring, press CTRL-C to stop.\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:646
+#: src/arm/gnunet-arm.c:656
 #, c-format
 msgid "Stopped %s.\n"
 msgstr "Arrêté %s.\n"
 
-#: src/arm/gnunet-arm.c:649
+#: src/arm/gnunet-arm.c:659
 #, c-format
 msgid "Starting %s...\n"
 msgstr "En cous de démarrage %s…\n"
 
-#: src/arm/gnunet-arm.c:652
+#: src/arm/gnunet-arm.c:662
 #, c-format
 msgid "Stopping %s...\n"
 msgstr "En cour d'arrêt %s…\n"
 
-#: src/arm/gnunet-arm.c:666
+#: src/arm/gnunet-arm.c:676
 #, c-format
 msgid "Unknown status %u for service %s.\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:767
+#: src/arm/gnunet-arm.c:766
 msgid "stop all GNUnet services"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:773
+#: src/arm/gnunet-arm.c:771
 msgid "start a particular service"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:779
+#: src/arm/gnunet-arm.c:776
 msgid "stop a particular service"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:784
+#: src/arm/gnunet-arm.c:780
 msgid "start all GNUnet default services"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:789
+#: src/arm/gnunet-arm.c:784
 msgid "stop and start all GNUnet default services"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:793
+#: src/arm/gnunet-arm.c:788
 msgid "delete config file and directory on exit"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:798
+#: src/arm/gnunet-arm.c:792
 msgid "monitor ARM activities"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:803
+#: src/arm/gnunet-arm.c:796
 msgid "don't print status messages"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:809
+#: src/arm/gnunet-arm.c:801
 msgid "exit with error status if operation does not finish after DELAY"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:814
+#: src/arm/gnunet-arm.c:805
 msgid "list currently running services"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:819
+#: src/arm/gnunet-arm.c:809
 msgid "don't let gnunet-service-arm inherit standard output"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:824
+#: src/arm/gnunet-arm.c:813
 msgid "don't let gnunet-service-arm inherit standard error"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:837
+#: src/arm/gnunet-arm.c:828
 msgid "Control services and the Automated Restart Manager (ARM)"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:386 src/transport/plugin_transport_tcp.c:1118
-#: src/transport/plugin_transport_xt.c:1118
-#: src/transport/tcp_service_legacy.c:555 src/util/service.c:610
+#: src/arm/gnunet-service-arm.c:388 src/transport/plugin_transport_tcp.c:1120
+#: src/transport/plugin_transport_xt.c:1120
+#: src/transport/tcp_service_legacy.c:557 src/util/service.c:1167
 #, c-format
 msgid ""
 "Disabling IPv6 support for service `%s', failed to create IPv6 socket: %s\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:410 src/arm/gnunet-service-arm.c:416
-#: src/transport/plugin_transport_tcp.c:1137
-#: src/transport/plugin_transport_tcp.c:1143
-#: src/transport/plugin_transport_tcp.c:3823
-#: src/transport/plugin_transport_xt.c:1137
-#: src/transport/plugin_transport_xt.c:1143
-#: src/transport/plugin_transport_xt.c:3831
-#: src/transport/tcp_service_legacy.c:574
-#: src/transport/tcp_service_legacy.c:580 src/util/service.c:635
-#: src/util/service.c:641
+#: src/arm/gnunet-service-arm.c:412 src/arm/gnunet-service-arm.c:418
+#: src/transport/plugin_transport_tcp.c:1139
+#: src/transport/plugin_transport_tcp.c:1145
+#: src/transport/plugin_transport_tcp.c:3829
+#: src/transport/plugin_transport_xt.c:1139
+#: src/transport/plugin_transport_xt.c:1145
+#: src/transport/plugin_transport_xt.c:3833
+#: src/transport/tcp_service_legacy.c:576
+#: src/transport/tcp_service_legacy.c:582 src/util/service.c:1192
+#: src/util/service.c:1198
 #, c-format
 msgid "Require valid port number for service `%s' in configuration!\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:455 src/transport/plugin_transport_tcp.c:1174
-#: src/transport/plugin_transport_xt.c:1174
-#: src/transport/tcp_service_legacy.c:611 src/util/client.c:504
-#: src/util/service.c:680
+#: src/arm/gnunet-service-arm.c:457 src/transport/plugin_transport_tcp.c:1176
+#: src/transport/plugin_transport_xt.c:1176
+#: src/transport/tcp_service_legacy.c:613 src/util/client.c:506
+#: src/util/service.c:1237
 #, c-format
 msgid "UNIXPATH `%s' too long, maximum length is %llu\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:460 src/transport/plugin_transport_tcp.c:1178
-#: src/transport/plugin_transport_xt.c:1178
-#: src/transport/tcp_service_legacy.c:615 src/util/client.c:509
-#: src/util/service.c:685
+#: src/arm/gnunet-service-arm.c:462 src/transport/plugin_transport_tcp.c:1180
+#: src/transport/plugin_transport_xt.c:1180
+#: src/transport/tcp_service_legacy.c:617 src/util/client.c:511
+#: src/util/service.c:1242
 #, c-format
 msgid "Using `%s' instead\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:493 src/transport/plugin_transport_tcp.c:1209
-#: src/transport/plugin_transport_xt.c:1209
-#: src/transport/tcp_service_legacy.c:646 src/util/service.c:721
+#: src/arm/gnunet-service-arm.c:495 src/transport/plugin_transport_tcp.c:1211
+#: src/transport/plugin_transport_xt.c:1211
+#: src/transport/tcp_service_legacy.c:648 src/util/service.c:1278
 #, c-format
 msgid ""
 "Disabling UNIX domain socket support for service `%s', failed to create UNIX "
 "domain socket: %s\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:515 src/transport/plugin_transport_tcp.c:1226
-#: src/transport/plugin_transport_xt.c:1226
-#: src/transport/tcp_service_legacy.c:663 src/util/service.c:739
+#: src/arm/gnunet-service-arm.c:517 src/transport/plugin_transport_tcp.c:1228
+#: src/transport/plugin_transport_xt.c:1228
+#: src/transport/tcp_service_legacy.c:665 src/util/service.c:1296
 #, c-format
 msgid "Have neither PORT nor UNIXPATH for service `%s', but one is required\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:554
-#: src/transport/plugin_transport_http_server.c:2682
-#: src/transport/plugin_transport_tcp.c:1257
-#: src/transport/plugin_transport_xt.c:1257
-#: src/transport/tcp_service_legacy.c:694 src/util/service.c:780
+#: src/arm/gnunet-service-arm.c:556
+#: src/transport/plugin_transport_http_server.c:2688
+#: src/transport/plugin_transport_tcp.c:1259
+#: src/transport/plugin_transport_xt.c:1259
+#: src/transport/tcp_service_legacy.c:696 src/util/service.c:1337
 #, c-format
 msgid "Failed to resolve `%s': %s\n"
 msgstr "Résolution de « %s » échouée : %s\n"
 
-#: src/arm/gnunet-service-arm.c:573
-#: src/transport/plugin_transport_http_server.c:2700
-#: src/transport/plugin_transport_tcp.c:1276
-#: src/transport/plugin_transport_xt.c:1276
-#: src/transport/tcp_service_legacy.c:713 src/util/service.c:800
+#: src/arm/gnunet-service-arm.c:575
+#: src/transport/plugin_transport_http_server.c:2706
+#: src/transport/plugin_transport_tcp.c:1278
+#: src/transport/plugin_transport_xt.c:1278
+#: src/transport/tcp_service_legacy.c:715 src/util/service.c:1357
 #, c-format
 msgid "Failed to find %saddress for `%s'.\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:984
+#: src/arm/gnunet-service-arm.c:986
 #, c-format
 msgid "Failed to start service `%s'\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:995
+#: src/arm/gnunet-service-arm.c:997
 #, c-format
 msgid "Starting service `%s'\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1107
+#: src/arm/gnunet-service-arm.c:1109
 #, c-format
 msgid "Unable to create socket for service `%s': %s\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1142
+#: src/arm/gnunet-service-arm.c:1144
 #, c-format
 msgid "Unable to bind listening socket for service `%s' to address `%s': %s\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1185
+#: src/arm/gnunet-service-arm.c:1187
 #, c-format
 msgid "ARM now monitors connections to service `%s' at `%s'\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1364
+#: src/arm/gnunet-service-arm.c:1346
 #, c-format
 msgid "Preparing to stop `%s'\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1669
+#: src/arm/gnunet-service-arm.c:1651
 #, c-format
 msgid "Restarting service `%s'.\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1830
+#: src/arm/gnunet-service-arm.c:1812
 msgid "exit"
 msgstr "exit"
 
-#: src/arm/gnunet-service-arm.c:1835
+#: src/arm/gnunet-service-arm.c:1817
 msgid "signal"
 msgstr "signal"
 
-#: src/arm/gnunet-service-arm.c:1840
+#: src/arm/gnunet-service-arm.c:1822
 msgid "unknown"
 msgstr "inconnu"
 
-#: src/arm/gnunet-service-arm.c:1846
+#: src/arm/gnunet-service-arm.c:1828
 #, c-format
 msgid "Service `%s' took %s to terminate\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1872
+#: src/arm/gnunet-service-arm.c:1854
 #, c-format
 msgid "Service `%s' terminated normally, will restart at any time\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1888
+#: src/arm/gnunet-service-arm.c:1870
 #, c-format
 msgid "Service `%s' terminated with status %s/%d, will restart in %s\n"
 msgstr ""
 
-#: src/arm/mockup-service.c:40
+#: src/arm/mockup-service.c:42
 msgid "Initiating shutdown as requested by client.\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:2779 src/ats/gnunet-ats-solver-eval.c:2820
+#: src/ats/gnunet-ats-solver-eval.c:2781 src/ats/gnunet-ats-solver-eval.c:2822
 #, c-format
 msgid ""
 "Could not load quota for network `%s':  `%s', assigning default bandwidth "
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:2797
+#: src/ats/gnunet-ats-solver-eval.c:2799
 #, c-format
 msgid ""
 "No outbound quota configured for network `%s', assigning default bandwidth "
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:2838
+#: src/ats/gnunet-ats-solver-eval.c:2840
 #, c-format
 msgid ""
 "No outbound quota configure for network `%s', assigning default bandwidth "
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3292 src/ats-tests/gnunet-solver-eval.c:937
+#: src/ats/gnunet-ats-solver-eval.c:3294 src/ats-tests/gnunet-solver-eval.c:939
 msgid "solver to use"
 msgstr "solveur utilisé"
 
-#: src/ats/gnunet-ats-solver-eval.c:3297 src/ats-tests/gnunet-solver-eval.c:943
-#: src/ats-tests/gnunet-solver-eval.c:948
+#: src/ats/gnunet-ats-solver-eval.c:3299 src/ats-tests/gnunet-solver-eval.c:945
+#: src/ats-tests/gnunet-solver-eval.c:950
 msgid "experiment to use"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3304
+#: src/ats/gnunet-ats-solver-eval.c:3306
 msgid "print logging"
 msgstr "afficher le journal"
 
-#: src/ats/gnunet-ats-solver-eval.c:3309
+#: src/ats/gnunet-ats-solver-eval.c:3311
 msgid "save logging to disk"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3314
+#: src/ats/gnunet-ats-solver-eval.c:3316
 msgid "disable normalization"
 msgstr ""
 
-#: src/ats/gnunet-service-ats_plugins.c:302
+#: src/ats/gnunet-service-ats-new.c:756
+#: src/ats/gnunet-service-ats_plugins.c:451
+#, c-format
+msgid "Failed to initialize solver `%s'!\n"
+msgstr ""
+
+#: src/ats/gnunet-service-ats_plugins.c:304
 #, c-format
 msgid ""
 "Could not load %s quota for network `%s':  `%s', assigning default bandwidth "
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-service-ats_plugins.c:312
+#: src/ats/gnunet-service-ats_plugins.c:314
 #, c-format
 msgid "%s quota configured for network `%s' is %llu\n"
 msgstr ""
 
-#: src/ats/gnunet-service-ats_plugins.c:357
+#: src/ats/gnunet-service-ats_plugins.c:359
 #, c-format
 msgid ""
 "No %s-quota configured for network `%s', assigning default bandwidth %llu\n"
 msgstr ""
 
-#: src/ats/gnunet-service-ats_plugins.c:449
+#: src/ats/plugin_ats2_common.c:90
 #, c-format
-msgid "Failed to initialize solver `%s'!\n"
+msgid ""
+"Could not load %s quota for network `%s': `%s', assigning default bandwidth "
+"%llu\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:1272
+#: src/ats/plugin_ats_mlp.c:1274
 msgid "Problem size too large, cannot allocate memory!\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:1868
+#: src/ats/plugin_ats_mlp.c:1870
 #, c-format
 msgid "Adding address for peer `%s' multiple times\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:1912
+#: src/ats/plugin_ats_mlp.c:1914
 #, c-format
 msgid "Updating address property for peer `%s' %p not added before\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:2474
+#: src/ats/plugin_ats_mlp.c:2476
 msgid ""
 "MLP solver is not optimizing for anything, changing to feasibility check\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:2514 src/ats/plugin_ats_mlp.c:2531
-#: src/ats/plugin_ats_mlp.c:2563 src/ats/plugin_ats_mlp.c:2581
-#: src/ats/plugin_ats_mlp.c:2600 src/ats/plugin_ats_proportional.c:1139
-#: src/ats/plugin_ats_ril.c:2610 src/ats/plugin_ats_ril.c:2627
-#: src/ats/plugin_ats_ril.c:2644 src/ats/plugin_ats_ril.c:2661
-#: src/ats/plugin_ats_ril.c:2678 src/ats/plugin_ats_ril.c:2695
-#: src/ats/plugin_ats_ril.c:2712 src/ats/plugin_ats_ril.c:2729
+#: src/ats/plugin_ats_mlp.c:2516 src/ats/plugin_ats_mlp.c:2533
+#: src/ats/plugin_ats_mlp.c:2565 src/ats/plugin_ats_mlp.c:2583
+#: src/ats/plugin_ats_mlp.c:2602 src/ats/plugin_ats_proportional.c:1141
+#: src/ats/plugin_ats_ril.c:2612 src/ats/plugin_ats_ril.c:2629
+#: src/ats/plugin_ats_ril.c:2646 src/ats/plugin_ats_ril.c:2663
+#: src/ats/plugin_ats_ril.c:2680 src/ats/plugin_ats_ril.c:2697
+#: src/ats/plugin_ats_ril.c:2714 src/ats/plugin_ats_ril.c:2731
 #, fuzzy, c-format
 msgid "Invalid %s configuration %f \n"
 msgstr "fornat invalide : « %s »\n"
 
-#: src/ats/plugin_ats_mlp.c:2669
+#: src/ats/plugin_ats_mlp.c:2671
 #, c-format
 msgid ""
 "Adjusting inconsistent outbound quota configuration for network `%s', is "
 "%llu must be at least %llu\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:2678
+#: src/ats/plugin_ats_mlp.c:2680
 #, c-format
 msgid ""
 "Adjusting inconsistent inbound quota configuration for network `%s', is %llu "
 "must be at least %llu\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:2688
+#: src/ats/plugin_ats_mlp.c:2690
 #, c-format
 msgid ""
 "Adjusting outbound quota configuration for network `%s'from %llu to %.0f\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:2697
+#: src/ats/plugin_ats_mlp.c:2699
 #, c-format
 msgid ""
 "Adjusting inbound quota configuration for network `%s' from %llu to %.0f\n"
 msgstr ""
 
-#: src/ats/plugin_ats_proportional.c:1162
+#: src/ats/plugin_ats_proportional.c:1164
 #, fuzzy, c-format
 msgid "Invalid %s configuration %f\n"
 msgstr "fornat invalide : « %s »\n"
 
-#: src/ats-tests/ats-testing.c:420
+#: src/ats-tests/ats-testing.c:422
 #, c-format
 msgid "Connected master [%u] with slave [%u]\n"
 msgstr ""
 
-#: src/ats-tests/ats-testing.c:427
+#: src/ats-tests/ats-testing.c:429
 #, c-format
 msgid "Failed to connect master peer [%u] with slave [%u]\n"
 msgstr ""
 
-#: src/ats-tests/ats-testing-log.c:835
+#: src/ats-tests/ats-testing-log.c:837
 msgid "Stop logging\n"
 msgstr "Arrêter la journalisation\n"
 
-#: src/ats-tests/ats-testing-log.c:890
+#: src/ats-tests/ats-testing-log.c:892
 #, c-format
 msgid "Start logging `%s'\n"
 msgstr "Démarrer la journalisation « %s »\n"
 
-#: src/ats-tests/gnunet-ats-sim.c:88
+#: src/ats-tests/gnunet-ats-sim.c:90
 #, c-format
 msgid ""
 "Master [%u]: sent: %u KiB in %u sec. = %u KiB/s, received: %u KiB in %u sec. "
 "= %u KiB/s\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:305
+#: src/ats-tool/gnunet-ats.c:307
 #, c-format
 msgid "%u address resolutions had a timeout\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:309
+#: src/ats-tool/gnunet-ats.c:311
 #, c-format
 msgid "ATS returned stat_results for %u addresses\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:393
+#: src/ats-tool/gnunet-ats.c:395
 #, c-format
 msgid ""
 "Peer `%s' plugin `%s', address `%s', `%s' bw out: %u Bytes/s, bw in %u Bytes/"
 "s, %s\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:400
+#: src/ats-tool/gnunet-ats.c:402
 msgid "active "
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:400
+#: src/ats-tool/gnunet-ats.c:402
 msgid "inactive "
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:510
+#: src/ats-tool/gnunet-ats.c:512
 #, c-format
 msgid "Removed address of peer `%s' with plugin `%s'\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:703
+#: src/ats-tool/gnunet-ats.c:705
 #, c-format
 msgid "Quota for network `%11s' (in/out): %10s / %10s\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:746 src/ats-tool/gnunet-ats.c:759
+#: src/ats-tool/gnunet-ats.c:748 src/ats-tool/gnunet-ats.c:761
 #, c-format
 msgid "Failed to parse peer identity `%s'\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:771
+#: src/ats-tool/gnunet-ats.c:773
 #, c-format
 msgid "Please select one operation: %s or %s or %s or %s or %s\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:793 src/ats-tool/gnunet-ats.c:818
-#: src/ats-tool/gnunet-ats.c:849 src/ats-tool/gnunet-ats.c:894
+#: src/ats-tool/gnunet-ats.c:795 src/ats-tool/gnunet-ats.c:820
+#: src/ats-tool/gnunet-ats.c:851 src/ats-tool/gnunet-ats.c:896
 msgid "Cannot connect to ATS service, exiting...\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:804 src/ats-tool/gnunet-ats.c:830
+#: src/ats-tool/gnunet-ats.c:806 src/ats-tool/gnunet-ats.c:832
 msgid "Cannot issue request to ATS service, exiting...\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:860
+#: src/ats-tool/gnunet-ats.c:862
 msgid "No preference type given!\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:867
+#: src/ats-tool/gnunet-ats.c:869
 msgid "No peer given!\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:885
+#: src/ats-tool/gnunet-ats.c:887
 msgid "Valid type required\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:948
+#: src/ats-tool/gnunet-ats.c:950
 msgid "get list of active addresses currently used"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:952
+#: src/ats-tool/gnunet-ats.c:954
 msgid "get list of all active addresses"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:958
+#: src/ats-tool/gnunet-ats.c:960
 #, fuzzy
 msgid "connect to PEER"
 msgstr "Connecté à"
 
-#: src/ats-tool/gnunet-ats.c:962
+#: src/ats-tool/gnunet-ats.c:964
 msgid "do not resolve IP addresses to hostnames"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:967
+#: src/ats-tool/gnunet-ats.c:969
 msgid "monitor mode"
 msgstr "mode moniteur"
 
-#: src/ats-tool/gnunet-ats.c:972
+#: src/ats-tool/gnunet-ats.c:974
 msgid "set preference for the given peer"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:977
+#: src/ats-tool/gnunet-ats.c:979
 msgid "print all configured quotas"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:982
+#: src/ats-tool/gnunet-ats.c:984
 msgid "peer id"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:988
+#: src/ats-tool/gnunet-ats.c:990
 msgid "preference type to set: latency | bandwidth"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:994
+#: src/ats-tool/gnunet-ats.c:996
 msgid "preference value"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:999
+#: src/ats-tool/gnunet-ats.c:1001
 msgid "verbose output (include ATS address properties)"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:1009
+#: src/ats-tool/gnunet-ats.c:1011
 msgid "Print information about ATS state"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:161
+#: src/auction/gnunet-auction-create.c:163
 msgid "description of the item to be sold"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:167
+#: src/auction/gnunet-auction-create.c:169
 msgid "mapping of possible prices"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:173
+#: src/auction/gnunet-auction-create.c:175
 msgid "max duration per round"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:179
+#: src/auction/gnunet-auction-create.c:181
 msgid "duration until auction starts"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:184
+#: src/auction/gnunet-auction-create.c:186
 msgid ""
 "number of items to sell\n"
 "0 for first price auction\n"
 ">0 for vickrey/M+1st price auction"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:191
+#: src/auction/gnunet-auction-create.c:193
 msgid "public auction outcome"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:196
+#: src/auction/gnunet-auction-create.c:198
 msgid "keep running in foreground until auction completes"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:207
+#: src/auction/gnunet-auction-create.c:209
 msgid "create a new auction and start listening for bidders"
 msgstr ""
 
-#: src/auction/gnunet-auction-info.c:74 src/auction/gnunet-auction-join.c:74
-#: src/conversation/gnunet-conversation-test.c:252
-#: src/revocation/gnunet-revocation.c:560 src/template/gnunet-template.c:74
+#: src/auction/gnunet-auction-info.c:76 src/auction/gnunet-auction-join.c:76
+#: src/conversation/gnunet-conversation-test.c:254
+#: src/revocation/gnunet-revocation.c:562 src/template/gnunet-template.c:76
 msgid "help text"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:705
+#: src/cadet/gnunet-cadet.c:631
 #, c-format
 msgid "Invalid peer ID `%s'\n"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:744
-#, c-format
-msgid "Invalid tunnel owner `%s'\n"
-msgstr ""
-
-#: src/cadet/gnunet-cadet.c:817
+#: src/cadet/gnunet-cadet.c:718
 msgid "Extra arguments are not applicable in combination with this option.\n"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:908
+#: src/cadet/gnunet-cadet.c:795
 #, c-format
 msgid "Invalid target `%s'\n"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:945
+#: src/cadet/gnunet-cadet.c:832
 msgid "No action requested\n"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:970
+#: src/cadet/gnunet-cadet.c:857
 msgid "Provide information about a particular connection"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:975
+#: src/cadet/gnunet-cadet.c:861
 msgid "Activate echo mode"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:980
-msgid "Dump debug information to STDERR"
-msgstr ""
-
-#: src/cadet/gnunet-cadet.c:986
+#: src/cadet/gnunet-cadet.c:866
 msgid "Listen for connections using a shared secret among sender and recipient"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:993
+#: src/cadet/gnunet-cadet.c:871
 msgid "Provide information about a patricular peer"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:999
+#: src/cadet/gnunet-cadet.c:875
 msgid "Provide information about all peers"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:1005
-msgid "Provide information about a particular tunnel"
-msgstr ""
-
-#: src/cadet/gnunet-cadet.c:1011
+#: src/cadet/gnunet-cadet.c:879
 msgid "Provide information about all tunnels"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:521
-#: src/secretsharing/gnunet-secretsharing-profiler.c:608
+#: src/consensus/gnunet-consensus-profiler.c:523
+#: src/secretsharing/gnunet-secretsharing-profiler.c:610
 msgid "number of peers in consensus"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:527
+#: src/consensus/gnunet-consensus-profiler.c:529
 msgid ""
 "how many peers (random selection without replacement) receive one value?"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:533
-#: src/set/gnunet-set-profiler.c:431 src/set/gnunet-set-profiler.c:437
-#: src/set/gnunet-set-profiler.c:460
+#: src/consensus/gnunet-consensus-profiler.c:535
+#: src/set/gnunet-set-profiler.c:433 src/set/gnunet-set-profiler.c:439
+#: src/set/gnunet-set-profiler.c:462
 msgid "number of values"
 msgstr "nombre de valeurs"
 
-#: src/consensus/gnunet-consensus-profiler.c:539
+#: src/consensus/gnunet-consensus-profiler.c:541
 msgid "consensus timeout"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:546
+#: src/consensus/gnunet-consensus-profiler.c:548
 msgid "delay until consensus starts"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:552
-#: src/set/gnunet-set-profiler.c:478
+#: src/consensus/gnunet-consensus-profiler.c:554
+#: src/set/gnunet-set-profiler.c:480
 msgid "write statistics to file"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:557
+#: src/consensus/gnunet-consensus-profiler.c:559
 msgid "distribute elements to a static subset of good peers"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:562
+#: src/consensus/gnunet-consensus-profiler.c:564
 msgid "be more verbose (print received values)"
 msgstr ""
 
-#: src/conversation/conversation_api.c:513
-#: src/conversation/conversation_api_call.c:492
+#: src/conversation/conversation_api.c:515
+#: src/conversation/conversation_api_call.c:494
 msgid "Connection to conversation service lost, trying to reconnect\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:275
+#: src/conversation/gnunet-conversation.c:277
 #, c-format
 msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:300
+#: src/conversation/gnunet-conversation.c:302
 #, c-format
 msgid "Call from `%s' terminated\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:335
+#: src/conversation/gnunet-conversation.c:337
 #, c-format
 msgid "Call from `%s' suspended by other user\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:340
+#: src/conversation/gnunet-conversation.c:342
 #, c-format
 msgid "Call from `%s' resumed by other user\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:358
+#: src/conversation/gnunet-conversation.c:360
 #, c-format
 msgid "Ego `%s' no longer available, phone is now down.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:373
+#: src/conversation/gnunet-conversation.c:375
 msgid "Failed to setup phone (internal error)\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:385
+#: src/conversation/gnunet-conversation.c:387
 #, c-format
 msgid "Phone active at `%s'.  Type `/help' for a list of available commands\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:409
+#: src/conversation/gnunet-conversation.c:411
 #, c-format
 msgid "Resolved address of `%s'. Now ringing other party.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:416
+#: src/conversation/gnunet-conversation.c:418
 #, c-format
 msgid "Connection established to `%s'\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:423
+#: src/conversation/gnunet-conversation.c:425
 #, c-format
 msgid "Failed to resolve `%s'\n"
 msgstr "Résolution de « %s » échouée\n"
 
-#: src/conversation/gnunet-conversation.c:431
+#: src/conversation/gnunet-conversation.c:433
 #, fuzzy, c-format
 msgid "Call to `%s' terminated\n"
 msgstr "Appel terminé\n"
 
-#: src/conversation/gnunet-conversation.c:440
+#: src/conversation/gnunet-conversation.c:442
 #, c-format
 msgid "Connection to `%s' suspended (by other user)\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:446
+#: src/conversation/gnunet-conversation.c:448
 #, c-format
 msgid "Connection to `%s' resumed (by other user)\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:451
+#: src/conversation/gnunet-conversation.c:453
 msgid "Error with the call, restarting it\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:522
+#: src/conversation/gnunet-conversation.c:524
 #, c-format
 msgid "Unknown command `%s'\n"
 msgstr "Commande « %s » inconnue\n"
 
-#: src/conversation/gnunet-conversation.c:538
-#: src/conversation/gnunet-conversation.c:552
+#: src/conversation/gnunet-conversation.c:540
+#: src/conversation/gnunet-conversation.c:554
 #, c-format
 msgid "Ego `%s' not available\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:545
-#: src/conversation/gnunet-conversation.c:601
+#: src/conversation/gnunet-conversation.c:547
+#: src/conversation/gnunet-conversation.c:603
 msgid "You are calling someone else already, hang up first!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:560
-#: src/conversation/gnunet-conversation.c:614
+#: src/conversation/gnunet-conversation.c:562
+#: src/conversation/gnunet-conversation.c:616
 #, c-format
 msgid "You are answering call from `%s', hang up or suspend that call first!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:570
+#: src/conversation/gnunet-conversation.c:572
 msgid "Call recipient missing.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:625
+#: src/conversation/gnunet-conversation.c:627
 msgid "There is no incoming call to accept here!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:642
+#: src/conversation/gnunet-conversation.c:644
 #, c-format
 msgid "There is no incoming call `%s' to accept right now!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:673
+#: src/conversation/gnunet-conversation.c:675
 msgid "We currently do not have an address.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:697
+#: src/conversation/gnunet-conversation.c:699
 #, c-format
 msgid "We are currently trying to locate the private key for the ego `%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:702
+#: src/conversation/gnunet-conversation.c:704
 #, c-format
 msgid "We are listening for incoming calls for ego `%s' on line `%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:708
-#: src/conversation/gnunet-conversation.c:732
+#: src/conversation/gnunet-conversation.c:710
+#: src/conversation/gnunet-conversation.c:734
 #, c-format
 msgid "You are having a conversation with `%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:713
+#: src/conversation/gnunet-conversation.c:715
 msgid ""
 "We had an internal error setting up our phone line. You can still make "
 "calls.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:722
+#: src/conversation/gnunet-conversation.c:724
 #, c-format
 msgid "We are trying to find the network address to call `%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:727
+#: src/conversation/gnunet-conversation.c:729
 #, c-format
 msgid "We are calling `%s', their phone should be ringing.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:746
+#: src/conversation/gnunet-conversation.c:748
 msgid "Calls waiting:\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:752
+#: src/conversation/gnunet-conversation.c:754
 #, c-format
 msgid "#%u: `%s'\n"
 msgstr "#%u : « %s »\n"
 
-#: src/conversation/gnunet-conversation.c:781
-#: src/conversation/gnunet-conversation.c:796
+#: src/conversation/gnunet-conversation.c:783
+#: src/conversation/gnunet-conversation.c:798
 msgid "There is no call that could be suspended right now.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:829
-#: src/conversation/gnunet-conversation.c:845
+#: src/conversation/gnunet-conversation.c:831
+#: src/conversation/gnunet-conversation.c:847
 msgid "There is no call that could be resumed right now.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:852
+#: src/conversation/gnunet-conversation.c:854
 #, c-format
 msgid "Already talking with `%s', cannot resume a call right now.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:861
+#: src/conversation/gnunet-conversation.c:863
 msgid "There is no incoming call to resume here!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:878
+#: src/conversation/gnunet-conversation.c:880
 #, c-format
 msgid "There is no incoming call `%s' to resume right now!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:913
+#: src/conversation/gnunet-conversation.c:915
 msgid "There is no call that could be cancelled right now.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:921
+#: src/conversation/gnunet-conversation.c:923
 msgid "There is no incoming call to refuse here!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:938
+#: src/conversation/gnunet-conversation.c:940
 #, c-format
 msgid "There is no incoming call `%s' to refuse right now!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:964
+#: src/conversation/gnunet-conversation.c:966
 msgid "Use `/address' to find out which address this phone should have in GNS"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:966
+#: src/conversation/gnunet-conversation.c:968
 msgid "Use `/call USER.gnu' to call USER"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:968
+#: src/conversation/gnunet-conversation.c:970
 msgid "Use `/accept #NUM' to accept incoming call #NUM"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:970
+#: src/conversation/gnunet-conversation.c:972
 msgid "Use `/suspend' to suspend the active call"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:972
+#: src/conversation/gnunet-conversation.c:974
 msgid ""
 "Use `/resume [#NUM]' to resume a call, #NUM is needed to resume incoming "
 "calls, no argument is needed to resume the current outgoing call."
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:974
+#: src/conversation/gnunet-conversation.c:976
 msgid "Use `/cancel' to reject or terminate a call"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:976
+#: src/conversation/gnunet-conversation.c:978
 msgid "Use `/status' to print status information"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:978
+#: src/conversation/gnunet-conversation.c:980
 msgid "Use `/quit' to terminate gnunet-conversation"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:980
+#: src/conversation/gnunet-conversation.c:982
 msgid "Use `/help command' to get help for a specific command"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:1196
+#: src/conversation/gnunet-conversation.c:1198
 #, c-format
 msgid "Name of our ego changed to `%s'\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:1209
+#: src/conversation/gnunet-conversation.c:1211
 #, c-format
 msgid "Our ego `%s' was deleted!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:1247
+#: src/conversation/gnunet-conversation.c:1249
 msgid "You must specify the NAME of an ego to use\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:1271
+#: src/conversation/gnunet-conversation.c:1273
 msgid "Failed to start gnunet-helper-w32-console\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:1300
+#: src/conversation/gnunet-conversation.c:1302
 msgid "sets the NAME of the ego to use for the caller ID"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:1305
+#: src/conversation/gnunet-conversation.c:1307
 msgid "sets the LINE to use for the phone"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:1334
+#: src/conversation/gnunet-conversation.c:1336
 msgid "Enables having a conversation with other GNUnet users."
 msgstr ""
 
-#: src/conversation/gnunet-conversation-test.c:118
+#: src/conversation/gnunet-conversation-test.c:120
 #, c-format
 msgid ""
 "\n"
 "End of transmission.  Have a GNU day.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation-test.c:143
+#: src/conversation/gnunet-conversation-test.c:145
 #, c-format
 msgid ""
 "\n"
@@ -1031,959 +1026,955 @@ msgid ""
 "settings are working..."
 msgstr ""
 
-#: src/conversation/gnunet-conversation-test.c:214
+#: src/conversation/gnunet-conversation-test.c:216
 #, c-format
 msgid ""
 "We will now be recording you for %s. After that time, the recording will be "
 "played back to you..."
 msgstr ""
 
-#: src/conversation/gnunet_gst.c:620
-#: src/conversation/gnunet-helper-audio-playback-gst.c:359
+#: src/conversation/gnunet_gst.c:622
+#: src/conversation/gnunet-helper-audio-playback-gst.c:361
 #, c-format
 msgid "Read error from STDIN: %d %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:323
+#: src/conversation/gnunet-helper-audio-playback.c:325
 #, c-format
 msgid "pa_stream_write() failed: %s\n"
 msgstr "pa_stream_write() échoué : %s\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:625
+#: src/conversation/gnunet-helper-audio-playback.c:627
 msgid "gnunet-helper-audio-playback - Got signal, exiting\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:651
-#: src/conversation/gnunet-helper-audio-record.c:561
+#: src/conversation/gnunet-helper-audio-playback.c:653
+#: src/conversation/gnunet-helper-audio-record.c:563
 msgid "Connection established.\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:656
-#: src/conversation/gnunet-helper-audio-record.c:566
+#: src/conversation/gnunet-helper-audio-playback.c:658
+#: src/conversation/gnunet-helper-audio-record.c:568
 #, c-format
 msgid "pa_stream_new() failed: %s\n"
 msgstr "pa_stream_new() échoué : %s\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:670
+#: src/conversation/gnunet-helper-audio-playback.c:672
 #, c-format
 msgid "pa_stream_connect_playback() failed: %s\n"
 msgstr "pa_stream_connect_playback() échoué : %s\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:683
-#: src/conversation/gnunet-helper-audio-record.c:592
+#: src/conversation/gnunet-helper-audio-playback.c:685
+#: src/conversation/gnunet-helper-audio-record.c:594
 #, c-format
 msgid "Connection failure: %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:704
-#: src/conversation/gnunet-helper-audio-record.c:615
+#: src/conversation/gnunet-helper-audio-playback.c:706
+#: src/conversation/gnunet-helper-audio-record.c:617
 msgid "Wrong Spec\n"
 msgstr "Spécification incorrecte\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:710
-#: src/conversation/gnunet-helper-audio-record.c:621
+#: src/conversation/gnunet-helper-audio-playback.c:712
+#: src/conversation/gnunet-helper-audio-record.c:623
 msgid "pa_mainloop_new() failed.\n"
 msgstr "pa_mainloop_new() échoué.\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:724
-#: src/conversation/gnunet-helper-audio-record.c:636
+#: src/conversation/gnunet-helper-audio-playback.c:726
+#: src/conversation/gnunet-helper-audio-record.c:638
 msgid "pa_context_new() failed.\n"
 msgstr "pa_context_new() échoué.\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:731
-#: src/conversation/gnunet-helper-audio-record.c:642
+#: src/conversation/gnunet-helper-audio-playback.c:733
+#: src/conversation/gnunet-helper-audio-record.c:644
 #, c-format
 msgid "pa_context_connect() failed: %s\n"
 msgstr "pa_context_connect() échoué : %s\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:737
-#: src/conversation/gnunet-helper-audio-record.c:648
+#: src/conversation/gnunet-helper-audio-playback.c:739
+#: src/conversation/gnunet-helper-audio-record.c:650
 msgid "pa_mainloop_run() failed.\n"
 msgstr "pa_mainloop_run() échoué.\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:816
+#: src/conversation/gnunet-helper-audio-playback.c:818
 #, c-format
 msgid "Read error from STDIN: %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:351
+#: src/conversation/gnunet-helper-audio-record.c:353
 #, c-format
 msgid "opus_encode_float() failed: %s. Aborting\n"
 msgstr "opus_encode_float() échoué : %s. Annulation\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:430
+#: src/conversation/gnunet-helper-audio-record.c:432
 #, c-format
 msgid "pa_stream_peek() failed: %s\n"
 msgstr "pa_stream_peek() échoué : %s\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:472
+#: src/conversation/gnunet-helper-audio-record.c:474
 msgid "Got signal, exiting.\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:498
+#: src/conversation/gnunet-helper-audio-record.c:500
 msgid "Stream successfully created.\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:503
+#: src/conversation/gnunet-helper-audio-record.c:505
 #, c-format
 msgid "pa_stream_get_buffer_attr() failed: %s\n"
 msgstr "pa_stream_get_buffer_attr() échoué : %s\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:511
+#: src/conversation/gnunet-helper-audio-record.c:513
 #, c-format
 msgid "Buffer metrics: maxlength=%u, fragsize=%u\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:515
+#: src/conversation/gnunet-helper-audio-record.c:517
 #, c-format
 msgid "Using sample spec '%s', channel map '%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:522
+#: src/conversation/gnunet-helper-audio-record.c:524
 #, c-format
 msgid "Connected to device %s (%u, %ssuspended).\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:531
+#: src/conversation/gnunet-helper-audio-record.c:533
 #, c-format
 msgid "Stream error: %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:579
+#: src/conversation/gnunet-helper-audio-record.c:581
 #, c-format
 msgid "pa_stream_connect_record() failed: %s\n"
 msgstr "pa_stream_connect_record() échoué : %s\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:693
+#: src/conversation/gnunet-helper-audio-record.c:695
 msgid "ogg_stream_init() failed.\n"
 msgstr "ogg_stream_init() échoué.\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:738
+#: src/conversation/gnunet-helper-audio-record.c:740
 #, c-format
 msgid "Failed to allocate %u bytes for second packet\n"
 msgstr ""
 
-#: src/conversation/gnunet-service-conversation.c:1303
+#: src/conversation/gnunet-service-conversation.c:1305
 #, c-format
 msgid "Could not open line, port %s already in use!\n"
 msgstr ""
 
-#: src/conversation/microphone.c:119
+#: src/conversation/microphone.c:121
 msgid "Could not start record audio helper\n"
 msgstr ""
 
-#: src/conversation/plugin_gnsrecord_conversation.c:70
+#: src/conversation/plugin_gnsrecord_conversation.c:72
 #, c-format
 msgid "PHONE version %u not supported\n"
 msgstr ""
 
-#: src/conversation/plugin_gnsrecord_conversation.c:133
-#: src/conversation/plugin_gnsrecord_conversation.c:147
+#: src/conversation/plugin_gnsrecord_conversation.c:135
+#: src/conversation/plugin_gnsrecord_conversation.c:149
 #, c-format
 msgid "Unable to parse PHONE record `%s'\n"
 msgstr ""
 
-#: src/conversation/speaker.c:73
+#: src/conversation/speaker.c:75
 msgid "Could not start playback audio helper.\n"
 msgstr ""
 
-#: src/core/gnunet-core.c:88
+#: src/core/gnunet-core.c:90
 msgid "fresh connection"
 msgstr ""
 
-#: src/core/gnunet-core.c:91
+#: src/core/gnunet-core.c:93
 msgid "key sent"
 msgstr ""
 
-#: src/core/gnunet-core.c:94
+#: src/core/gnunet-core.c:96
 msgid "key received"
 msgstr ""
 
-#: src/core/gnunet-core.c:97
+#: src/core/gnunet-core.c:99
 msgid "connection established"
 msgstr ""
 
-#: src/core/gnunet-core.c:100
+#: src/core/gnunet-core.c:102
 msgid "rekeying"
 msgstr ""
 
-#: src/core/gnunet-core.c:103
+#: src/core/gnunet-core.c:105
 #, fuzzy
 msgid "disconnected"
 msgstr "Déconnecté de"
 
-#: src/core/gnunet-core.c:110
+#: src/core/gnunet-core.c:112
 msgid "Connection to CORE service lost (reconnecting)"
 msgstr ""
 
-#: src/core/gnunet-core.c:113
+#: src/core/gnunet-core.c:115
 #, fuzzy
 msgid "unknown state"
 msgstr "adresse inconnue"
 
-#: src/core/gnunet-core.c:118
+#: src/core/gnunet-core.c:120
 #, c-format
 msgid "%24s: %-30s %4s (timeout in %6s)\n"
 msgstr ""
 
-#: src/core/gnunet-core.c:142 src/peerinfo-tool/gnunet-peerinfo.c:726
+#: src/core/gnunet-core.c:144 src/peerinfo-tool/gnunet-peerinfo.c:728
 #, c-format
 msgid "Invalid command line argument `%s'\n"
 msgstr ""
 
-#: src/core/gnunet-core.c:153
+#: src/core/gnunet-core.c:155
 msgid "Failed to connect to CORE service!\n"
 msgstr ""
 
-#: src/core/gnunet-core.c:175 src/transport/gnunet-transport.c:1447
+#: src/core/gnunet-core.c:177 src/transport/gnunet-transport.c:1449
 msgid "provide information about all current connections (continuously)"
 msgstr ""
 
-#: src/core/gnunet-core.c:184
+#: src/core/gnunet-core.c:186
 msgid "Print information about connected peers."
 msgstr ""
 
-#: src/core/gnunet-service-core.c:345
+#: src/core/gnunet-service-core.c:347
 msgid "# send requests dropped (disconnected)"
 msgstr ""
 
-#: src/core/gnunet-service-core.c:369
+#: src/core/gnunet-service-core.c:371
 msgid "# dequeuing CAR (duplicate request)"
 msgstr ""
 
-#: src/core/gnunet-service-core.c:441
+#: src/core/gnunet-service-core.c:443
 #, c-format
 msgid "# bytes of messages of type %u received"
 msgstr ""
 
-#: src/core/gnunet-service-core.c:539
+#: src/core/gnunet-service-core.c:541
 msgid "# messages discarded (session disconnected)"
 msgstr ""
 
-#: src/core/gnunet-service-core.c:877
+#: src/core/gnunet-service-core.c:879
 #, c-format
 msgid "# messages of type %u discarded (client busy)"
 msgstr ""
 
-#: src/core/gnunet-service-core.c:986
+#: src/core/gnunet-service-core.c:988
 msgid "Core service is lacking HOSTKEY configuration setting.  Exiting.\n"
 msgstr ""
 
-#: src/core/gnunet-service-core.c:1007
+#: src/core/gnunet-service-core.c:1009
 #, c-format
 msgid "Core service of `%s' ready.\n"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:615
+#: src/core/gnunet-service-core_kx.c:617
 msgid "# bytes encrypted"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:675
+#: src/core/gnunet-service-core_kx.c:677
 msgid "# bytes decrypted"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:777
+#: src/core/gnunet-service-core_kx.c:779
 msgid "# PAYLOAD dropped (out of order)"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:827
+#: src/core/gnunet-service-core_kx.c:829
 msgid "# key exchanges initiated"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:889
+#: src/core/gnunet-service-core_kx.c:891
 msgid "# key exchanges stopped"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:923
+#: src/core/gnunet-service-core_kx.c:925
 msgid "# PING messages transmitted"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:990
+#: src/core/gnunet-service-core_kx.c:992
 msgid "# old ephemeral keys ignored"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1003
+#: src/core/gnunet-service-core_kx.c:1005
 msgid "# duplicate ephemeral keys ignored"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1038
+#: src/core/gnunet-service-core_kx.c:1040
 msgid "# EPHEMERAL_KEYs rejected (bad signature)"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1052
+#: src/core/gnunet-service-core_kx.c:1054
 #, c-format
 msgid ""
 "EPHEMERAL_KEY from peer `%s' rejected as its validity range does not match "
 "our system time (%llu not in [%llu,%llu]).\n"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1058
+#: src/core/gnunet-service-core_kx.c:1060
 msgid "# EPHEMERAL_KEY messages rejected due to time"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1078
+#: src/core/gnunet-service-core_kx.c:1080
 msgid "# valid ephemeral keys received"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1178
-#: src/transport/gnunet-service-transport_validation.c:1126
+#: src/core/gnunet-service-core_kx.c:1180
+#: src/transport/gnunet-service-transport_validation.c:1128
 msgid "# PING messages received"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1187
+#: src/core/gnunet-service-core_kx.c:1189
 msgid "# PING messages dropped (out of order)"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1246
+#: src/core/gnunet-service-core_kx.c:1248
 msgid "# PONG messages created"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1272
+#: src/core/gnunet-service-core_kx.c:1274
 msgid "# sessions terminated by timeout"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1285
+#: src/core/gnunet-service-core_kx.c:1287
 msgid "# keepalive messages sent"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1349
-#: src/transport/gnunet-service-transport_validation.c:1459
+#: src/core/gnunet-service-core_kx.c:1351
+#: src/transport/gnunet-service-transport_validation.c:1461
 msgid "# PONG messages received"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1356
+#: src/core/gnunet-service-core_kx.c:1358
 msgid "# PONG messages dropped (connection down)"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1361
+#: src/core/gnunet-service-core_kx.c:1363
 msgid "# PONG messages dropped (out of order)"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1396
+#: src/core/gnunet-service-core_kx.c:1398
 msgid "# PONG messages decrypted"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1434
+#: src/core/gnunet-service-core_kx.c:1436
 msgid "# session keys confirmed via PONG"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1445
+#: src/core/gnunet-service-core_kx.c:1447
 msgid "# timeouts prevented via PONG"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1452
+#: src/core/gnunet-service-core_kx.c:1454
 msgid "# rekey operations confirmed via PONG"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1640
+#: src/core/gnunet-service-core_kx.c:1642
 msgid "# DATA message dropped (out of order)"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1648
+#: src/core/gnunet-service-core_kx.c:1650
 #, c-format
 msgid ""
 "Session to peer `%s' went down due to key expiration (should not happen)\n"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1651
+#: src/core/gnunet-service-core_kx.c:1653
 msgid "# sessions terminated by key expiration"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1740
-#: src/core/gnunet-service-core_kx.c:1766
+#: src/core/gnunet-service-core_kx.c:1742
+#: src/core/gnunet-service-core_kx.c:1768
 msgid "# bytes dropped (duplicates)"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1753
+#: src/core/gnunet-service-core_kx.c:1755
 msgid "# bytes dropped (out of sequence)"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1795
+#: src/core/gnunet-service-core_kx.c:1797
 msgid "# bytes dropped (ancient message)"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1803
+#: src/core/gnunet-service-core_kx.c:1805
 msgid "# bytes of payload decrypted"
 msgstr ""
 
-#: src/core/gnunet-service-core_sessions.c:258
-#: src/core/gnunet-service-core_sessions.c:348
-#: src/dht/gnunet-service-dht_neighbours.c:739
-#: src/dht/gnunet-service-dht_neighbours.c:802
-#: src/fs/gnunet-service-fs_cp.c:613 src/fs/gnunet-service-fs_cp.c:1520
-#: src/topology/gnunet-daemon-topology.c:615
-#: src/topology/gnunet-daemon-topology.c:717
-#: src/transport/gnunet-service-transport_neighbours.c:719
-#: src/transport/gnunet-service-transport_neighbours.c:727
+#: src/core/gnunet-service-core_sessions.c:260
+#: src/core/gnunet-service-core_sessions.c:350
+#: src/dht/gnunet-service-dht_neighbours.c:741
+#: src/dht/gnunet-service-dht_neighbours.c:804
+#: src/fs/gnunet-service-fs_cp.c:615 src/fs/gnunet-service-fs_cp.c:1521
+#: src/topology/gnunet-daemon-topology.c:617
+#: src/topology/gnunet-daemon-topology.c:719
+#: src/transport/gnunet-service-transport_neighbours.c:720
+#: src/transport/gnunet-service-transport_neighbours.c:728
 msgid "# peers connected"
 msgstr ""
 
-#: src/core/gnunet-service-core_sessions.c:294
+#: src/core/gnunet-service-core_sessions.c:296
 msgid "# type map refreshes sent"
 msgstr ""
 
-#: src/core/gnunet-service-core_sessions.c:414
+#: src/core/gnunet-service-core_sessions.c:416
 msgid "# outdated typemap confirmations received"
 msgstr ""
 
-#: src/core/gnunet-service-core_sessions.c:431
+#: src/core/gnunet-service-core_sessions.c:433
 msgid "# valid typemap confirmations received"
 msgstr ""
 
-#: src/core/gnunet-service-core_typemap.c:167
-#: src/core/gnunet-service-core_typemap.c:179
+#: src/core/gnunet-service-core_typemap.c:169
+#: src/core/gnunet-service-core_typemap.c:181
 msgid "# type maps received"
 msgstr ""
 
-#: src/core/gnunet-service-core_typemap.c:210
+#: src/core/gnunet-service-core_typemap.c:212
 msgid "# updates to my type map"
 msgstr ""
 
-#: src/credential/credential_misc.c:86
+#: src/credential/credential_misc.c:88
 #, c-format
 msgid "Unable to parse CRED record string `%s'\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:262 src/namestore/gnunet-namestore.c:887
+#: src/credential/gnunet-credential.c:264 src/namestore/gnunet-namestore.c:994
 #, c-format
 msgid "Ego `%s' not known to identity service\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:278
-#: src/credential/gnunet-credential.c:432
+#: src/credential/gnunet-credential.c:280
+#: src/credential/gnunet-credential.c:434
 #, c-format
 msgid "Issuer public key `%s' is not well-formed\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:359
-#: src/credential/gnunet-credential.c:421
+#: src/credential/gnunet-credential.c:361
+#: src/credential/gnunet-credential.c:423
 #, c-format
 msgid "Issuer public key not well-formed\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:370
-#: src/credential/gnunet-credential.c:442
+#: src/credential/gnunet-credential.c:372
+#: src/credential/gnunet-credential.c:444
 #, fuzzy, c-format
 msgid "Failed to connect to CREDENTIAL\n"
 msgstr "Impossible d’ouvrir « %s ».\n"
 
-#: src/credential/gnunet-credential.c:377
+#: src/credential/gnunet-credential.c:379
 #, c-format
 msgid "You must provide issuer the attribute\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:385
+#: src/credential/gnunet-credential.c:387
 #, c-format
 msgid "ego required\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:401
+#: src/credential/gnunet-credential.c:403
 #, c-format
 msgid "Subject public key needed\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:412
+#: src/credential/gnunet-credential.c:414
 #, c-format
 msgid "Subject public key `%s' is not well-formed\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:449
+#: src/credential/gnunet-credential.c:451
 #, c-format
 msgid "You must provide issuer and subject attributes\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:502
+#: src/credential/gnunet-credential.c:504
 #, c-format
 msgid "Issuer ego required\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:514
+#: src/credential/gnunet-credential.c:516
 #, c-format
 msgid "Please specify name to lookup, subject key and issuer key!\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:534
+#: src/credential/gnunet-credential.c:536
 msgid "create credential"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:538
+#: src/credential/gnunet-credential.c:540
 msgid "verify credential against attribute"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:543
+#: src/credential/gnunet-credential.c:545
 msgid "The public key of the subject to lookup the credential for"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:548
+#: src/credential/gnunet-credential.c:550
 msgid "The name of the credential presented by the subject"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:553
+#: src/credential/gnunet-credential.c:555
 msgid "The public key of the authority to verify the credential against"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:558
+#: src/credential/gnunet-credential.c:560
 msgid "The ego to use"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:563
+#: src/credential/gnunet-credential.c:565
 msgid "The issuer attribute to verify against or to issue"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:568
+#: src/credential/gnunet-credential.c:570
 msgid "The time to live for the credential"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:572
+#: src/credential/gnunet-credential.c:574
 msgid "collect credentials"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:586
+#: src/credential/gnunet-credential.c:588
 msgid "GNUnet credential resolver tool"
 msgstr ""
 
-#: src/credential/gnunet-service-credential.c:1136 src/gns/gnunet-gns.c:183
-#: src/gns/gnunet-gns-helper-service-w32.c:725
+#: src/credential/gnunet-service-credential.c:1138 src/gns/gnunet-gns.c:185
+#: src/gns/gnunet-gns-helper-service-w32.c:727
 #, c-format
 msgid "Failed to connect to GNS\n"
 msgstr ""
 
-#: src/credential/gnunet-service-credential.c:1142
-#: src/namestore/gnunet-namestore.c:913
-#: src/namestore/gnunet-namestore-fcfsd.c:1136
+#: src/credential/gnunet-service-credential.c:1144
+#: src/namestore/gnunet-namestore.c:1019
+#: src/namestore/gnunet-namestore-fcfsd.c:1138
 #, c-format
 msgid "Failed to connect to namestore\n"
 msgstr ""
 
-#: src/credential/plugin_gnsrecord_credential.c:184
+#: src/credential/plugin_gnsrecord_credential.c:186
 #, fuzzy, c-format
 msgid "Unable to parse ATTR record string `%s'\n"
 msgstr "Résolution de « %s » échouée\n"
 
-#: src/datacache/datacache.c:117 src/datacache/datacache.c:309
-#: src/datastore/gnunet-service-datastore.c:755
+#: src/datacache/datacache.c:119 src/datacache/datacache.c:311
+#: src/datastore/gnunet-service-datastore.c:757
 msgid "# bytes stored"
 msgstr ""
 
-#: src/datacache/datacache.c:121 src/datacache/datacache.c:313
+#: src/datacache/datacache.c:123 src/datacache/datacache.c:315
 msgid "# items stored"
 msgstr ""
 
-#: src/datacache/datacache.c:204
+#: src/datacache/datacache.c:206
 #, c-format
 msgid "Loading `%s' datacache plugin\n"
 msgstr ""
 
-#: src/datacache/datacache.c:215
+#: src/datacache/datacache.c:217
 #, c-format
 msgid "Failed to load datacache plugin for `%s'\n"
 msgstr ""
 
-#: src/datacache/datacache.c:343
+#: src/datacache/datacache.c:345
 msgid "# requests received"
 msgstr ""
 
-#: src/datacache/datacache.c:353
+#: src/datacache/datacache.c:355
 msgid "# requests filtered by bloom filter"
 msgstr ""
 
-#: src/datacache/datacache.c:383
+#: src/datacache/datacache.c:385
 msgid "# requests for random value received"
 msgstr ""
 
-#: src/datacache/datacache.c:415
+#: src/datacache/datacache.c:417
 msgid "# proximity search requests received"
 msgstr ""
 
-#: src/datacache/plugin_datacache_heap.c:551
+#: src/datacache/plugin_datacache_heap.c:553
 msgid "Heap datacache running\n"
 msgstr ""
 
-#: src/datacache/plugin_datacache_sqlite.c:116
-#: src/datacache/plugin_datacache_sqlite.c:125
-#: src/datastore/plugin_datastore_mysql.c:890
-#: src/datastore/plugin_datastore_sqlite.c:56
-#: src/datastore/plugin_datastore_sqlite.c:64 src/my/my.c:79 src/my/my.c:91
-#: src/mysql/mysql.c:40 src/mysql/mysql.c:47
-#: src/namecache/plugin_namecache_sqlite.c:50
-#: src/namestore/plugin_namestore_sqlite.c:51
-#: src/peerstore/plugin_peerstore_sqlite.c:50
-#: src/psycstore/plugin_psycstore_mysql.c:60
-#: src/reclaim/plugin_reclaim_sqlite.c:50
-#: src/testbed/generate-underlay-topology.c:45
-#: src/testbed/gnunet-daemon-latency-logger.c:50
-#: src/testbed/gnunet-daemon-testbed-underlay.c:54
-#: src/testbed/testbed_api_hosts.c:67 src/util/crypto_ecc.c:51
-#: src/util/crypto_ecc_setup.c:39 src/util/crypto_mpi.c:37
-#: src/include/gnunet_common.h:816 src/include/gnunet_common.h:825
-#: src/scalarproduct/scalarproduct.h:33
+#: src/datacache/plugin_datacache_sqlite.c:118
+#: src/datacache/plugin_datacache_sqlite.c:127
+#: src/datastore/plugin_datastore_mysql.c:892
+#: src/datastore/plugin_datastore_sqlite.c:58
+#: src/datastore/plugin_datastore_sqlite.c:66 src/my/my.c:81 src/my/my.c:93
+#: src/mysql/mysql.c:42 src/mysql/mysql.c:49
+#: src/namecache/plugin_namecache_sqlite.c:52
+#: src/namestore/plugin_namestore_sqlite.c:53
+#: src/peerstore/plugin_peerstore_sqlite.c:52
+#: src/reclaim/plugin_reclaim_sqlite.c:52
+#: src/testbed/generate-underlay-topology.c:47
+#: src/testbed/gnunet-daemon-latency-logger.c:52
+#: src/testbed/gnunet-daemon-testbed-underlay.c:56
+#: src/testbed/testbed_api_hosts.c:69 src/util/crypto_ecc.c:53
+#: src/util/crypto_ecc_setup.c:41 src/util/crypto_mpi.c:39
+#: src/include/gnunet_common.h:818 src/include/gnunet_common.h:827
+#: src/scalarproduct/scalarproduct.h:35
 #, c-format
 msgid "`%s' failed at %s:%d with error: %s\n"
 msgstr ""
 
-#: src/datacache/plugin_datacache_sqlite.c:861
-#: src/datastore/plugin_datastore_sqlite.c:506
-#: src/namecache/plugin_namecache_sqlite.c:327
-#: src/namestore/plugin_namestore_sqlite.c:262
-#: src/reclaim/plugin_reclaim_sqlite.c:334
+#: src/datacache/plugin_datacache_sqlite.c:863
+#: src/datastore/plugin_datastore_sqlite.c:508
+#: src/namecache/plugin_namecache_sqlite.c:229
+#: src/namestore/plugin_namestore_sqlite.c:265
+#: src/reclaim/plugin_reclaim_sqlite.c:336
 msgid "Tried to close sqlite without finalizing all prepared statements.\n"
 msgstr ""
 
-#: src/datastore/datastore_api.c:346
+#: src/datastore/datastore_api.c:348
 #, fuzzy
 msgid "DATASTORE disconnected"
 msgstr "Déconnecté de"
 
-#: src/datastore/datastore_api.c:466
+#: src/datastore/datastore_api.c:468
 #, fuzzy
 msgid "Disconnected from DATASTORE"
 msgstr "Déconnecté de"
 
-#: src/datastore/datastore_api.c:567
+#: src/datastore/datastore_api.c:569
 msgid "# queue overflows"
 msgstr ""
 
-#: src/datastore/datastore_api.c:597
+#: src/datastore/datastore_api.c:599
 msgid "# queue entries created"
 msgstr ""
 
-#: src/datastore/datastore_api.c:758
+#: src/datastore/datastore_api.c:760
 msgid "# status messages received"
 msgstr ""
 
-#: src/datastore/datastore_api.c:812
+#: src/datastore/datastore_api.c:814
 msgid "# Results received"
 msgstr ""
 
-#: src/datastore/datastore_api.c:918
+#: src/datastore/datastore_api.c:920
 msgid "# datastore connections (re)created"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1032
+#: src/datastore/datastore_api.c:1034
 msgid "# PUT requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1093
+#: src/datastore/datastore_api.c:1095
 msgid "# RESERVE requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1158
+#: src/datastore/datastore_api.c:1160
 msgid "# RELEASE RESERVE requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1236
+#: src/datastore/datastore_api.c:1238
 msgid "# REMOVE requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1296
+#: src/datastore/datastore_api.c:1298
 msgid "# GET REPLICATION requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1358
+#: src/datastore/datastore_api.c:1360
 msgid "# GET ZERO ANONYMITY requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1439
+#: src/datastore/datastore_api.c:1441
 msgid "# GET requests executed"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:187
+#: src/datastore/gnunet-datastore.c:189
 #, c-format
 msgid "Dumped %<PRIu64> records\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:215 src/datastore/gnunet-datastore.c:227
+#: src/datastore/gnunet-datastore.c:217 src/datastore/gnunet-datastore.c:229
 #, c-format
 msgid "Short write to file: %zd bytes expecting %zd\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:259
+#: src/datastore/gnunet-datastore.c:261
 msgid "Error queueing datastore GET operation\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:285 src/datastore/gnunet-datastore.c:410
+#: src/datastore/gnunet-datastore.c:287 src/datastore/gnunet-datastore.c:412
 #, fuzzy, c-format
 msgid "Unable to open dump file: %s\n"
 msgstr "Résolution de « %s » échouée\n"
 
-#: src/datastore/gnunet-datastore.c:324
+#: src/datastore/gnunet-datastore.c:326
 #, c-format
 msgid "Failed to store item: %s, aborting\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:338
+#: src/datastore/gnunet-datastore.c:340
 #, c-format
 msgid "Inserted %<PRIu64> records\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:347 src/datastore/gnunet-datastore.c:361
+#: src/datastore/gnunet-datastore.c:349 src/datastore/gnunet-datastore.c:363
 #, c-format
 msgid "Short read from file: %zd bytes expecting %zd\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:387
+#: src/datastore/gnunet-datastore.c:389
 msgid "Error queueing datastore PUT operation\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:430
+#: src/datastore/gnunet-datastore.c:432
 msgid "Input file is not of a supported format\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:456
+#: src/datastore/gnunet-datastore.c:458
 msgid "Failed connecting to the datastore.\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:468
+#: src/datastore/gnunet-datastore.c:470
 #, c-format
 msgid "Please choose at least one operation: %s, %s\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:491
+#: src/datastore/gnunet-datastore.c:493
 msgid "Dump all records from the datastore"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:495
+#: src/datastore/gnunet-datastore.c:497
 msgid "Insert records into the datastore"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:500
+#: src/datastore/gnunet-datastore.c:502
 msgid "File to dump or insert"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:509
+#: src/datastore/gnunet-datastore.c:511
 msgid "Manipulate GNUnet datastore"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:336
+#: src/datastore/gnunet-service-datastore.c:338
 msgid "# bytes expired"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:418
+#: src/datastore/gnunet-service-datastore.c:420
 msgid "# bytes purged (low-priority)"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:560
+#: src/datastore/gnunet-service-datastore.c:562
 msgid "# results found"
 msgstr "# résultats introuvables"
 
-#: src/datastore/gnunet-service-datastore.c:601
+#: src/datastore/gnunet-service-datastore.c:603
 #, c-format
 msgid ""
 "Insufficient space (%llu bytes are available) to satisfy RESERVE request for "
 "%llu bytes\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:612
+#: src/datastore/gnunet-service-datastore.c:614
 #, c-format
 msgid ""
 "The requested amount (%llu bytes) is larger than the cache size (%llu "
 "bytes)\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:618
+#: src/datastore/gnunet-service-datastore.c:620
 msgid ""
 "Insufficient space to satisfy request and requested amount is larger than "
 "cache size"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:625
+#: src/datastore/gnunet-service-datastore.c:627
 msgid "Insufficient space to satisfy request"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:632
-#: src/datastore/gnunet-service-datastore.c:687
-#: src/datastore/gnunet-service-datastore.c:835
-#: src/datastore/gnunet-service-datastore.c:1467
+#: src/datastore/gnunet-service-datastore.c:634
+#: src/datastore/gnunet-service-datastore.c:689
+#: src/datastore/gnunet-service-datastore.c:837
+#: src/datastore/gnunet-service-datastore.c:1469
 msgid "# reserved"
 msgstr "# réservé"
 
-#: src/datastore/gnunet-service-datastore.c:705
+#: src/datastore/gnunet-service-datastore.c:707
 msgid "Could not find matching reservation"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:771
+#: src/datastore/gnunet-service-datastore.c:773
 #, c-format
 msgid "Need %llu bytes more space (%llu allowed, using %llu)\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:874
+#: src/datastore/gnunet-service-datastore.c:876
 msgid "# GET requests received"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:905
+#: src/datastore/gnunet-service-datastore.c:907
 msgid "# GET KEY requests received"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:918
+#: src/datastore/gnunet-service-datastore.c:920
 msgid "# requests filtered by bloomfilter"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:954
+#: src/datastore/gnunet-service-datastore.c:956
 msgid "# GET REPLICATION requests received"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:987
+#: src/datastore/gnunet-service-datastore.c:989
 msgid "# GET ZERO ANONYMITY requests received"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1034
+#: src/datastore/gnunet-service-datastore.c:1036
 msgid "Content not found"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1041
+#: src/datastore/gnunet-service-datastore.c:1043
 msgid "# bytes removed (explicit request)"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1086
+#: src/datastore/gnunet-service-datastore.c:1088
 msgid "# REMOVE requests received"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1135
+#: src/datastore/gnunet-service-datastore.c:1137
 #, c-format
 msgid ""
 "Datastore payload must have been inaccurate (%lld < %lld). Recomputing it.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1141
-#: src/datastore/gnunet-service-datastore.c:1316
+#: src/datastore/gnunet-service-datastore.c:1143
+#: src/datastore/gnunet-service-datastore.c:1318
 #, c-format
 msgid "New payload: %lld\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1195
+#: src/datastore/gnunet-service-datastore.c:1197
 #, c-format
 msgid "Loading `%s' datastore plugin\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1207
+#: src/datastore/gnunet-service-datastore.c:1209
 #, c-format
 msgid "Failed to load datastore plugin for `%s'\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1267
+#: src/datastore/gnunet-service-datastore.c:1269
 msgid "Bloomfilter construction complete.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1323
+#: src/datastore/gnunet-service-datastore.c:1325
 msgid "Rebuilding bloomfilter.  Please be patient.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1334
+#: src/datastore/gnunet-service-datastore.c:1336
 msgid "Plugin does not support get_keys function. Please fix!\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1504
+#: src/datastore/gnunet-service-datastore.c:1506
 #, c-format
 msgid "# bytes used in file-sharing datastore `%s'"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1520
+#: src/datastore/gnunet-service-datastore.c:1522
 msgid "# quota"
 msgstr "# quota"
 
-#: src/datastore/gnunet-service-datastore.c:1525
+#: src/datastore/gnunet-service-datastore.c:1527
 msgid "# cache size"
 msgstr "# taille du cache"
 
-#: src/datastore/gnunet-service-datastore.c:1541
+#: src/datastore/gnunet-service-datastore.c:1543
 #, c-format
 msgid "Could not use specified filename `%s' for bloomfilter.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1559
-#: src/datastore/gnunet-service-datastore.c:1575
+#: src/datastore/gnunet-service-datastore.c:1561
+#: src/datastore/gnunet-service-datastore.c:1577
 #, c-format
 msgid "Failed to remove bogus bloomfilter file `%s'\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1607
+#: src/datastore/gnunet-service-datastore.c:1609
 msgid "Failed to initialize bloomfilter.\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_heap.c:891
+#: src/datastore/plugin_datastore_heap.c:893
 msgid "Heap database running\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_mysql.c:369
-#: src/datastore/plugin_datastore_mysql.c:421
-#: src/datastore/plugin_datastore_mysql.c:1073
+#: src/datastore/plugin_datastore_mysql.c:371
+#: src/datastore/plugin_datastore_mysql.c:423
+#: src/datastore/plugin_datastore_mysql.c:1075
 msgid "MySQL statement run failure"
 msgstr ""
 
-#: src/datastore/plugin_datastore_mysql.c:408
-#: src/datastore/plugin_datastore_sqlite.c:676
+#: src/datastore/plugin_datastore_mysql.c:410
+#: src/datastore/plugin_datastore_sqlite.c:678
 msgid "Data too large"
 msgstr ""
 
-#: src/datastore/plugin_datastore_mysql.c:846
+#: src/datastore/plugin_datastore_mysql.c:848
 #, c-format
 msgid "`%s' for `%s' failed at %s:%d with error: %s\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_mysql.c:1178
-#: src/psycstore/plugin_psycstore_mysql.c:1934
+#: src/datastore/plugin_datastore_mysql.c:1180
 msgid "Mysql database running\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_postgres.c:274
-#: src/datastore/plugin_datastore_postgres.c:891
+#: src/datastore/plugin_datastore_postgres.c:276
+#: src/datastore/plugin_datastore_postgres.c:893
 msgid "Postgress exec failure"
 msgstr ""
 
-#: src/datastore/plugin_datastore_postgres.c:852
+#: src/datastore/plugin_datastore_postgres.c:854
 msgid "Failed to drop table from database.\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_postgres.c:950
-#: src/psycstore/plugin_psycstore_postgres.c:1504
+#: src/datastore/plugin_datastore_postgres.c:952
 msgid "Postgres database running\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_sqlite.c:64
-#: src/testbed/generate-underlay-topology.c:48
-#: src/testbed/gnunet-daemon-latency-logger.c:53
-#: src/testbed/gnunet-daemon-testbed-underlay.c:57
+#: src/datastore/plugin_datastore_sqlite.c:66
+#: src/testbed/generate-underlay-topology.c:50
+#: src/testbed/gnunet-daemon-latency-logger.c:55
+#: src/testbed/gnunet-daemon-testbed-underlay.c:59
 #, c-format
 msgid "`%s' failed at %s:%u with error: %s"
 msgstr ""
 
-#: src/datastore/plugin_datastore_sqlite.c:269
-#: src/namecache/plugin_namecache_sqlite.c:207
-#: src/namestore/plugin_namestore_sqlite.c:203
-#: src/peerstore/plugin_peerstore_sqlite.c:533
-#: src/psycstore/plugin_psycstore_sqlite.c:323
-#: src/reclaim/plugin_reclaim_sqlite.c:210
+#: src/datastore/plugin_datastore_sqlite.c:271
+#: src/namecache/plugin_namecache_sqlite.c:173
+#: src/namestore/plugin_namestore_sqlite.c:206
+#: src/peerstore/plugin_peerstore_sqlite.c:535
+#: src/reclaim/plugin_reclaim_sqlite.c:212
 #, c-format
 msgid "Unable to initialize SQLite: %s.\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_sqlite.c:627
+#: src/datastore/plugin_datastore_sqlite.c:629
 msgid "sqlite bind failure"
 msgstr ""
 
-#: src/datastore/plugin_datastore_sqlite.c:1325
+#: src/datastore/plugin_datastore_sqlite.c:1327
 msgid "sqlite version to old to determine size, assuming zero\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_sqlite.c:1359
+#: src/datastore/plugin_datastore_sqlite.c:1361
 #, c-format
 msgid ""
 "Using sqlite page utilization to estimate payload (%llu pages of size %llu "
 "bytes)\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_sqlite.c:1403
-#: src/namecache/plugin_namecache_sqlite.c:638
-#: src/namestore/plugin_namestore_sqlite.c:753
-#: src/reclaim/plugin_reclaim_sqlite.c:709
+#: src/datastore/plugin_datastore_sqlite.c:1405
+#: src/namecache/plugin_namecache_sqlite.c:557
+#: src/namestore/plugin_namestore_sqlite.c:750
+#: src/reclaim/plugin_reclaim_sqlite.c:711
 msgid "Sqlite database running\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_template.c:251
+#: src/datastore/plugin_datastore_template.c:253
 msgid "Template database running\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:156
+#: src/dht/gnunet-dht-get.c:158
 #, c-format
 msgid ""
 "Result %d, type %d:\n"
@@ -1992,1445 +1983,1445 @@ msgstr ""
 "Resultat %d, type %d :\n"
 "%.*s\n"
 
-#: src/dht/gnunet-dht-get.c:157
+#: src/dht/gnunet-dht-get.c:159
 #, fuzzy, c-format
 msgid "Result %d, type %d:\n"
 msgstr ""
 "Resultat %d, type %d :\n"
 "%.*s\n"
 
-#: src/dht/gnunet-dht-get.c:202
+#: src/dht/gnunet-dht-get.c:204
 msgid "Must provide key for DHT GET!\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:208 src/dht/gnunet-dht-monitor.c:255
+#: src/dht/gnunet-dht-get.c:210 src/dht/gnunet-dht-monitor.c:257
 msgid "Failed to connect to DHT service!\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:217
-msgid "Issueing DHT GET with key"
+#: src/dht/gnunet-dht-get.c:219
+msgid "Issuing DHT GET with key"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:246 src/dht/gnunet-dht-monitor.c:305
-#: src/dht/gnunet-dht-put.c:196
+#: src/dht/gnunet-dht-get.c:248 src/dht/gnunet-dht-monitor.c:307
+#: src/dht/gnunet-dht-put.c:198
 msgid "the query key"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:251
+#: src/dht/gnunet-dht-get.c:253
 msgid "how many parallel requests (replicas) to create"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:256 src/dht/gnunet-dht-monitor.c:311
+#: src/dht/gnunet-dht-get.c:258 src/dht/gnunet-dht-monitor.c:313
 msgid "the type of data to look for"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:261
+#: src/dht/gnunet-dht-get.c:263
 msgid "how long to execute this query before giving up?"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:265 src/dht/gnunet-dht-put.c:200
+#: src/dht/gnunet-dht-get.c:267 src/dht/gnunet-dht-put.c:202
 msgid "use DHT's demultiplex everywhere option"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:278
+#: src/dht/gnunet-dht-get.c:280
 msgid "Issue a GET request to the GNUnet DHT, prints results."
 msgstr ""
 
-#: src/dht/gnunet-dht-monitor.c:317
+#: src/dht/gnunet-dht-monitor.c:319
 msgid "how long should the monitor command run"
 msgstr ""
 
-#: src/dht/gnunet-dht-monitor.c:322 src/fs/gnunet-download.c:370
-#: src/nse/gnunet-nse-profiler.c:876
+#: src/dht/gnunet-dht-monitor.c:324 src/fs/gnunet-download.c:372
+#: src/nse/gnunet-nse-profiler.c:878
 msgid "be verbose (print progress information)"
 msgstr ""
 
-#: src/dht/gnunet-dht-monitor.c:335
+#: src/dht/gnunet-dht-monitor.c:337
 msgid "Prints all packets that go through the DHT."
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:914 src/testbed/gnunet-testbed-profiler.c:251
+#: src/dht/gnunet_dht_profiler.c:916 src/testbed/gnunet-testbed-profiler.c:253
 #, c-format
 msgid "Exiting as the number of peers is %u\n"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:947 src/rps/gnunet-rps-profiler.c:2764
+#: src/dht/gnunet_dht_profiler.c:949 src/rps/gnunet-rps-profiler.c:2953
 #, fuzzy
 msgid "number of peers to start"
 msgstr "nombre de valeurs"
 
-#: src/dht/gnunet_dht_profiler.c:952
+#: src/dht/gnunet_dht_profiler.c:954
 msgid "number of PUTs to perform per peer"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:957 src/nse/gnunet-nse-profiler.c:858
-#: src/testbed/gnunet-testbed-profiler.c:302
+#: src/dht/gnunet_dht_profiler.c:959 src/nse/gnunet-nse-profiler.c:860
+#: src/testbed/gnunet-testbed-profiler.c:304
 msgid "name of the file with the login information for the testbed"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:962
+#: src/dht/gnunet_dht_profiler.c:964
 msgid "delay between rounds for collecting statistics (default: 30 sec)"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:967
+#: src/dht/gnunet_dht_profiler.c:969
 msgid "delay to start doing PUTs (default: 1 sec)"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:972
+#: src/dht/gnunet_dht_profiler.c:974
 msgid "delay to start doing GETs (default: 5 min)"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:977
+#: src/dht/gnunet_dht_profiler.c:979
 msgid "replication degree for DHT PUTs"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:982
+#: src/dht/gnunet_dht_profiler.c:984
 msgid "chance that a peer is selected at random for PUTs"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:987
+#: src/dht/gnunet_dht_profiler.c:989
 msgid "timeout for DHT PUT and GET requests (default: 1 min)"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:1007
+#: src/dht/gnunet_dht_profiler.c:1009
 msgid "Measure quality and performance of the DHT service."
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:132
+#: src/dht/gnunet-dht-put.c:134
 msgid "Must provide KEY and DATA for DHT put!\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:140
+#: src/dht/gnunet-dht-put.c:142
 #, fuzzy
 msgid "Could not connect to DHT service!\n"
 msgstr "Impossible d’ouvrir « %s ».\n"
 
-#: src/dht/gnunet-dht-put.c:151
+#: src/dht/gnunet-dht-put.c:153
 #, c-format
 msgid "Issuing put request for `%s' with data `%s'!\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:186
+#: src/dht/gnunet-dht-put.c:188
 msgid "the data to insert under the key"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:191
+#: src/dht/gnunet-dht-put.c:193
 msgid "how long to store this entry in the dht (in seconds)"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:205
+#: src/dht/gnunet-dht-put.c:207
 msgid "how many replicas to create"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:209
+#: src/dht/gnunet-dht-put.c:211
 msgid "use DHT's record route option"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:214
+#: src/dht/gnunet-dht-put.c:216
 msgid "the type to insert data as"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:231
+#: src/dht/gnunet-dht-put.c:233
 msgid "Issue a PUT request to the GNUnet DHT insert DATA under KEY."
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:367
+#: src/dht/gnunet-service-dht_clients.c:369
 msgid "# GET requests from clients injected"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:481
+#: src/dht/gnunet-service-dht_clients.c:483
 msgid "# PUT requests received from clients"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:614
+#: src/dht/gnunet-service-dht_clients.c:616
 msgid "# GET requests received from clients"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:840
+#: src/dht/gnunet-service-dht_clients.c:842
 msgid "# GET STOP requests received from clients"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:1025
+#: src/dht/gnunet-service-dht_clients.c:1027
 msgid "# Key match, type mismatches in REPLY to CLIENT"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:1040
+#: src/dht/gnunet-service-dht_clients.c:1042
 msgid "# Duplicate REPLIES to CLIENT request dropped"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:1086
+#: src/dht/gnunet-service-dht_clients.c:1088
 #, c-format
 msgid "Unsupported block type (%u) in request!\n"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:1093
+#: src/dht/gnunet-service-dht_clients.c:1095
 msgid "# RESULTS queued for clients"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:1171
+#: src/dht/gnunet-service-dht_clients.c:1173
 msgid "# REPLIES ignored for CLIENTS (no match)"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:71
+#: src/dht/gnunet-service-dht_datacache.c:73
 #, c-format
 msgid "%s request received, but have no datacache!\n"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:81
+#: src/dht/gnunet-service-dht_datacache.c:83
 msgid "# ITEMS stored in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:205
+#: src/dht/gnunet-service-dht_datacache.c:207
 msgid "# Good RESULTS found in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:217
+#: src/dht/gnunet-service-dht_datacache.c:219
 msgid "# Duplicate RESULTS found in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:223
+#: src/dht/gnunet-service-dht_datacache.c:225
 msgid "# Invalid RESULTS found in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:229
+#: src/dht/gnunet-service-dht_datacache.c:231
 msgid "# Irrelevant RESULTS found in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:241
+#: src/dht/gnunet-service-dht_datacache.c:243
 msgid "# Unsupported RESULTS found in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:245
+#: src/dht/gnunet-service-dht_datacache.c:247
 #, c-format
 msgid "Unsupported block type (%u) in local response!\n"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:280
+#: src/dht/gnunet-service-dht_datacache.c:282
 msgid "# GET requests given to datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_hello.c:84
+#: src/dht/gnunet-service-dht_hello.c:86
 msgid "# HELLOs obtained from peerinfo"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:677
+#: src/dht/gnunet-service-dht_neighbours.c:679
 msgid "# FIND PEER messages initiated"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:850
+#: src/dht/gnunet-service-dht_neighbours.c:852
 msgid "# requests TTL-dropped"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1053
-#: src/dht/gnunet-service-dht_neighbours.c:1096
+#: src/dht/gnunet-service-dht_neighbours.c:1055
+#: src/dht/gnunet-service-dht_neighbours.c:1098
 msgid "# Peers excluded from routing due to Bloomfilter"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1070
-#: src/dht/gnunet-service-dht_neighbours.c:1112
+#: src/dht/gnunet-service-dht_neighbours.c:1072
+#: src/dht/gnunet-service-dht_neighbours.c:1114
 msgid "# Peer selection failed"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1269
+#: src/dht/gnunet-service-dht_neighbours.c:1271
 msgid "# PUT requests routed"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1302
+#: src/dht/gnunet-service-dht_neighbours.c:1304
 msgid "# PUT messages queued for transmission"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1313
-#: src/dht/gnunet-service-dht_neighbours.c:1453
-#: src/dht/gnunet-service-dht_neighbours.c:1556
+#: src/dht/gnunet-service-dht_neighbours.c:1315
+#: src/dht/gnunet-service-dht_neighbours.c:1455
+#: src/dht/gnunet-service-dht_neighbours.c:1558
 msgid "# P2P messages dropped due to full queue"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1398
+#: src/dht/gnunet-service-dht_neighbours.c:1400
 msgid "# GET requests routed"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1441
+#: src/dht/gnunet-service-dht_neighbours.c:1443
 msgid "# GET messages queued for transmission"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1571
+#: src/dht/gnunet-service-dht_neighbours.c:1573
 msgid "# RESULT messages queued for transmission"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1674
+#: src/dht/gnunet-service-dht_neighbours.c:1676
 msgid "# Expired PUTs discarded"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1682
+#: src/dht/gnunet-service-dht_neighbours.c:1684
 msgid "# P2P PUT requests received"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1686
+#: src/dht/gnunet-service-dht_neighbours.c:1688
 msgid "# P2P PUT bytes received"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1912
+#: src/dht/gnunet-service-dht_neighbours.c:1914
 msgid "# FIND PEER requests ignored due to Bloomfilter"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1920
+#: src/dht/gnunet-service-dht_neighbours.c:1922
 msgid "# FIND PEER requests ignored due to lack of HELLO"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:2082
+#: src/dht/gnunet-service-dht_neighbours.c:2084
 msgid "# P2P GET requests received"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:2086
+#: src/dht/gnunet-service-dht_neighbours.c:2088
 msgid "# P2P GET bytes received"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:2151
+#: src/dht/gnunet-service-dht_neighbours.c:2153
 msgid "# P2P FIND PEER requests processed"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:2172
+#: src/dht/gnunet-service-dht_neighbours.c:2174
 msgid "# P2P GET requests ONLY routed"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:2349
+#: src/dht/gnunet-service-dht_neighbours.c:2351
 msgid "# Expired results discarded"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:2365
+#: src/dht/gnunet-service-dht_neighbours.c:2367
 msgid "# P2P RESULTS received"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:2369
+#: src/dht/gnunet-service-dht_neighbours.c:2371
 msgid "# P2P RESULT bytes received"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_nse.c:57
+#: src/dht/gnunet-service-dht_nse.c:59
 msgid "# Network size estimates received"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:221
+#: src/dht/gnunet-service-dht_routing.c:223
 msgid "# Good REPLIES matched against routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:235
+#: src/dht/gnunet-service-dht_routing.c:237
 msgid "# Duplicate REPLIES matched against routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:241
+#: src/dht/gnunet-service-dht_routing.c:243
 msgid "# Invalid REPLIES matched against routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:247
+#: src/dht/gnunet-service-dht_routing.c:249
 msgid "# Irrelevant REPLIES matched against routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:259
+#: src/dht/gnunet-service-dht_routing.c:261
 msgid "# Unsupported REPLIES matched against routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:337
+#: src/dht/gnunet-service-dht_routing.c:339
 msgid "# Entries removed from routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:413
+#: src/dht/gnunet-service-dht_routing.c:415
 msgid "# Entries added to routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:435
+#: src/dht/gnunet-service-dht_routing.c:437
 msgid "# DHT requests combined"
 msgstr ""
 
-#: src/dht/plugin_block_dht.c:187
+#: src/dht/plugin_block_dht.c:189
 #, c-format
 msgid "Block not of type %u\n"
 msgstr ""
 
-#: src/dht/plugin_block_dht.c:196
+#: src/dht/plugin_block_dht.c:198
 msgid "Size mismatch for block\n"
 msgstr ""
 
-#: src/dht/plugin_block_dht.c:207
+#: src/dht/plugin_block_dht.c:209
 #, c-format
 msgid "Block of type %u is malformed\n"
 msgstr ""
 
-#: src/dns/gnunet-dns-monitor.c:351 src/dns/gnunet-dns-monitor.c:356
+#: src/dns/gnunet-dns-monitor.c:353 src/dns/gnunet-dns-monitor.c:358
 msgid "only monitor DNS queries"
 msgstr ""
 
-#: src/dns/gnunet-dns-monitor.c:368
+#: src/dns/gnunet-dns-monitor.c:370
 msgid "Monitor DNS queries."
 msgstr ""
 
-#: src/dns/gnunet-dns-redirector.c:235
+#: src/dns/gnunet-dns-redirector.c:237
 msgid "set A records"
 msgstr ""
 
-#: src/dns/gnunet-dns-redirector.c:241
+#: src/dns/gnunet-dns-redirector.c:243
 msgid "set AAAA records"
 msgstr ""
 
-#: src/dns/gnunet-dns-redirector.c:254
+#: src/dns/gnunet-dns-redirector.c:256
 msgid "Change DNS replies to point elsewhere."
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:460
+#: src/dns/gnunet-service-dns.c:462
 msgid "# DNS requests answered via TUN interface"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:608
+#: src/dns/gnunet-service-dns.c:610
 msgid "# DNS exit failed (failed to open socket)"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:738
+#: src/dns/gnunet-service-dns.c:740
 msgid "# External DNS response discarded (no matching request)"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:813
+#: src/dns/gnunet-service-dns.c:815
 msgid "# Client response discarded (no matching request)"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:928
+#: src/dns/gnunet-service-dns.c:930
 msgid "Received malformed IPv4-UDP packet on TUN interface.\n"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:944
+#: src/dns/gnunet-service-dns.c:946
 msgid "Received malformed IPv6-UDP packet on TUN interface.\n"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:953
+#: src/dns/gnunet-service-dns.c:955
 #, c-format
 msgid "Got non-IP packet with %u bytes and protocol %u from TUN\n"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:963
+#: src/dns/gnunet-service-dns.c:965
 msgid "DNS interceptor got non-DNS packet (dropped)\n"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:965
+#: src/dns/gnunet-service-dns.c:967
 msgid "# Non-DNS UDP packet received via TUN interface"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:1032
+#: src/dns/gnunet-service-dns.c:1034
 msgid "# DNS requests received via TUN interface"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:1080 src/exit/gnunet-daemon-exit.c:3563
+#: src/dns/gnunet-service-dns.c:1082 src/exit/gnunet-daemon-exit.c:3565
 msgid "need a valid IPv4 or IPv6 address\n"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:1090
+#: src/dns/gnunet-service-dns.c:1092
 #, c-format
 msgid "`%s' must be installed SUID, will not run DNS interceptor\n"
 msgstr ""
 
-#: src/dv/gnunet-dv.c:173
+#: src/dv/gnunet-dv.c:175
 msgid "Print information about DV state"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:958
+#: src/exit/gnunet-daemon-exit.c:960
 msgid "# TCP packets sent via TUN"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:1059
+#: src/exit/gnunet-daemon-exit.c:1061
 msgid "# ICMP packets sent via TUN"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:1338
+#: src/exit/gnunet-daemon-exit.c:1340
 msgid "# UDP packets sent via TUN"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:1462 src/exit/gnunet-daemon-exit.c:1570
-#: src/exit/gnunet-daemon-exit.c:1617 src/exit/gnunet-daemon-exit.c:1699
-#: src/exit/gnunet-daemon-exit.c:1820 src/exit/gnunet-daemon-exit.c:1951
-#: src/exit/gnunet-daemon-exit.c:2205
+#: src/exit/gnunet-daemon-exit.c:1464 src/exit/gnunet-daemon-exit.c:1572
+#: src/exit/gnunet-daemon-exit.c:1619 src/exit/gnunet-daemon-exit.c:1701
+#: src/exit/gnunet-daemon-exit.c:1822 src/exit/gnunet-daemon-exit.c:1953
+#: src/exit/gnunet-daemon-exit.c:2207
 msgid "# Bytes received from CADET"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:1465
+#: src/exit/gnunet-daemon-exit.c:1467
 msgid "# UDP IP-exit requests received via cadet"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:1573
+#: src/exit/gnunet-daemon-exit.c:1575
 msgid "# UDP service requests received via cadet"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:1613
+#: src/exit/gnunet-daemon-exit.c:1615
 msgid "# TCP service creation requests received via cadet"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:1702
+#: src/exit/gnunet-daemon-exit.c:1704
 msgid "# TCP IP-exit creation requests received via cadet"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:1786
+#: src/exit/gnunet-daemon-exit.c:1788
 msgid "# TCP DATA requests dropped (no session)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:1823
+#: src/exit/gnunet-daemon-exit.c:1825
 msgid "# TCP data requests received via cadet"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:1954
+#: src/exit/gnunet-daemon-exit.c:1956
 msgid "# ICMP IP-exit requests received via cadet"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2020 src/exit/gnunet-daemon-exit.c:2277
-#: src/exit/gnunet-daemon-exit.c:2632 src/vpn/gnunet-service-vpn.c:826
-#: src/vpn/gnunet-service-vpn.c:989 src/vpn/gnunet-service-vpn.c:2103
+#: src/exit/gnunet-daemon-exit.c:2022 src/exit/gnunet-daemon-exit.c:2279
+#: src/exit/gnunet-daemon-exit.c:2634 src/vpn/gnunet-service-vpn.c:828
+#: src/vpn/gnunet-service-vpn.c:991 src/vpn/gnunet-service-vpn.c:2105
 msgid "# ICMPv4 packets dropped (type not allowed)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2079 src/exit/gnunet-daemon-exit.c:2336
-#: src/exit/gnunet-daemon-exit.c:2669 src/vpn/gnunet-service-vpn.c:885
-#: src/vpn/gnunet-service-vpn.c:1022 src/vpn/gnunet-service-vpn.c:2156
+#: src/exit/gnunet-daemon-exit.c:2081 src/exit/gnunet-daemon-exit.c:2338
+#: src/exit/gnunet-daemon-exit.c:2671 src/vpn/gnunet-service-vpn.c:887
+#: src/vpn/gnunet-service-vpn.c:1024 src/vpn/gnunet-service-vpn.c:2158
 msgid "# ICMPv6 packets dropped (type not allowed)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2208
+#: src/exit/gnunet-daemon-exit.c:2210
 msgid "# ICMP service requests received via cadet"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2262 src/vpn/gnunet-service-vpn.c:983
-#: src/vpn/gnunet-service-vpn.c:2094
+#: src/exit/gnunet-daemon-exit.c:2264 src/vpn/gnunet-service-vpn.c:985
+#: src/vpn/gnunet-service-vpn.c:2096
 msgid "# ICMPv4 packets dropped (impossible PT to v6)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2321 src/vpn/gnunet-service-vpn.c:873
-#: src/vpn/gnunet-service-vpn.c:2128 src/vpn/gnunet-service-vpn.c:2139
+#: src/exit/gnunet-daemon-exit.c:2323 src/vpn/gnunet-service-vpn.c:875
+#: src/vpn/gnunet-service-vpn.c:2130 src/vpn/gnunet-service-vpn.c:2141
 msgid "# ICMPv6 packets dropped (impossible PT to v4)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2400 src/exit/gnunet-daemon-exit.c:3066
+#: src/exit/gnunet-daemon-exit.c:2402 src/exit/gnunet-daemon-exit.c:3068
 msgid "# Inbound CADET channels created"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2520
+#: src/exit/gnunet-daemon-exit.c:2522
 #, c-format
 msgid "Got duplicate service records for `%s:%u'\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2539
+#: src/exit/gnunet-daemon-exit.c:2541
 msgid "# Messages transmitted via cadet channels"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2717
+#: src/exit/gnunet-daemon-exit.c:2719
 msgid "# ICMP packets dropped (not allowed)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2725
+#: src/exit/gnunet-daemon-exit.c:2727
 msgid "ICMP Packet dropped, have no matching connection information\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2799
+#: src/exit/gnunet-daemon-exit.c:2801
 msgid "UDP Packet dropped, have no matching connection information\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2871
+#: src/exit/gnunet-daemon-exit.c:2873
 msgid "TCP Packet dropped, have no matching connection information\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2919
+#: src/exit/gnunet-daemon-exit.c:2921
 msgid "# Packets received from TUN"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2933
+#: src/exit/gnunet-daemon-exit.c:2935
 msgid "# Bytes received from TUN"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2959
+#: src/exit/gnunet-daemon-exit.c:2961
 msgid "IPv4 packet options received.  Ignored.\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2986
+#: src/exit/gnunet-daemon-exit.c:2988
 #, c-format
 msgid "IPv4 packet with unsupported next header %u received.  Ignored.\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3032
+#: src/exit/gnunet-daemon-exit.c:3034
 #, c-format
 msgid "IPv6 packet with unsupported next header %d received.  Ignored.\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3040
+#: src/exit/gnunet-daemon-exit.c:3042
 #, c-format
 msgid "Packet from unknown protocol %u received.  Ignored.\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3243 src/exit/gnunet-daemon-exit.c:3253
+#: src/exit/gnunet-daemon-exit.c:3245 src/exit/gnunet-daemon-exit.c:3255
 #, c-format
 msgid "Option `%s' for domain `%s' is not formatted correctly!\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3267 src/exit/gnunet-daemon-exit.c:3275
+#: src/exit/gnunet-daemon-exit.c:3269 src/exit/gnunet-daemon-exit.c:3277
 #, c-format
 msgid "`%s' is not a valid port number (for domain `%s')!"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3316
+#: src/exit/gnunet-daemon-exit.c:3318
 #, c-format
 msgid "No addresses found for hostname `%s' of service `%s'!\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3330 src/exit/gnunet-daemon-exit.c:3343
+#: src/exit/gnunet-daemon-exit.c:3332 src/exit/gnunet-daemon-exit.c:3345
 #, c-format
 msgid "Service `%s' configured for IPv4, but IPv4 is disabled!\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3355
+#: src/exit/gnunet-daemon-exit.c:3357
 #, c-format
 msgid "No IP addresses found for hostname `%s' of service `%s'!\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3499
+#: src/exit/gnunet-daemon-exit.c:3501
 msgid ""
 "This system does not support IPv4, will disable IPv4 functions despite them "
 "being enabled in the configuration\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3507
+#: src/exit/gnunet-daemon-exit.c:3509
 msgid ""
 "This system does not support IPv6, will disable IPv6 functions despite them "
 "being enabled in the configuration\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3514
+#: src/exit/gnunet-daemon-exit.c:3516
 msgid ""
 "Cannot enable IPv4 exit but disable IPv4 on TUN interface, will use "
 "ENABLE_IPv4=YES\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3520
+#: src/exit/gnunet-daemon-exit.c:3522
 msgid ""
 "Cannot enable IPv6 exit but disable IPv6 on TUN interface, will use "
 "ENABLE_IPv6=YES\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3688
+#: src/exit/gnunet-daemon-exit.c:3690
 msgid "Must be a number"
 msgstr "Doit être un nombre"
 
-#: src/exit/gnunet-daemon-exit.c:3803
+#: src/exit/gnunet-daemon-exit.c:3805
 #, c-format
 msgid "`%s' must be installed SUID, EXIT will not work\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3815 src/pt/gnunet-daemon-pt.c:1202
+#: src/exit/gnunet-daemon-exit.c:3817 src/pt/gnunet-daemon-pt.c:1204
 msgid "No useful service enabled.  Exiting.\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3964
+#: src/exit/gnunet-daemon-exit.c:3966
 msgid "Daemon to run to provide an IP exit node for the VPN"
 msgstr ""
 
-#: src/fragmentation/defragmentation.c:273
+#: src/fragmentation/defragmentation.c:275
 msgid "# acknowledgements sent for fragment"
 msgstr ""
 
-#: src/fragmentation/defragmentation.c:466
-#: src/transport/plugin_transport_wlan.c:1552
+#: src/fragmentation/defragmentation.c:468
+#: src/transport/plugin_transport_wlan.c:1554
 msgid "# fragments received"
 msgstr ""
 
-#: src/fragmentation/defragmentation.c:536
+#: src/fragmentation/defragmentation.c:538
 msgid "# duplicate fragments received"
 msgstr ""
 
-#: src/fragmentation/defragmentation.c:554
+#: src/fragmentation/defragmentation.c:556
 msgid "# messages defragmented"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:238
+#: src/fragmentation/fragmentation.c:240
 msgid "# fragments transmitted"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:243
+#: src/fragmentation/fragmentation.c:245
 msgid "# fragments retransmitted"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:276
+#: src/fragmentation/fragmentation.c:278
 msgid "# fragments wrap arounds"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:323
+#: src/fragmentation/fragmentation.c:325
 msgid "# messages fragmented"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:329
+#: src/fragmentation/fragmentation.c:331
 msgid "# total size of fragmented messages"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:454
+#: src/fragmentation/fragmentation.c:456
 msgid "# fragment acknowledgements received"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:461
+#: src/fragmentation/fragmentation.c:463
 msgid "# bits removed from fragmentation ACKs"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:485
+#: src/fragmentation/fragmentation.c:487
 msgid "# fragmentation transmissions completed"
 msgstr ""
 
-#: src/fs/fs_api.c:497
+#: src/fs/fs_api.c:499
 #, c-format
 msgid "Could not open file `%s': %s"
 msgstr ""
 
-#: src/fs/fs_api.c:508
+#: src/fs/fs_api.c:510
 #, c-format
 msgid "Could not read file `%s': %s"
 msgstr ""
 
-#: src/fs/fs_api.c:516
+#: src/fs/fs_api.c:518
 #, c-format
 msgid "Short read reading from file `%s'!"
 msgstr ""
 
-#: src/fs/fs_api.c:1124
+#: src/fs/fs_api.c:1126
 #, c-format
 msgid "Failed to resume publishing information `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_api.c:1644
+#: src/fs/fs_api.c:1646
 #, c-format
 msgid "Failure while resuming publishing operation `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_api.c:1660
+#: src/fs/fs_api.c:1662
 #, c-format
 msgid "Failed to resume publishing operation `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_api.c:2320
+#: src/fs/fs_api.c:2322
 #, c-format
 msgid "Failure while resuming unindexing operation `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_api.c:2330
+#: src/fs/fs_api.c:2332
 #, c-format
 msgid "Failed to resume unindexing operation `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_api.c:2458 src/fs/fs_api.c:2704
+#: src/fs/fs_api.c:2460 src/fs/fs_api.c:2706
 #, c-format
 msgid "Failed to resume sub-download `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_api.c:2476
+#: src/fs/fs_api.c:2478
 #, c-format
 msgid "Failed to resume sub-search `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_api.c:2491 src/fs/fs_api.c:2510 src/fs/fs_api.c:3014
+#: src/fs/fs_api.c:2493 src/fs/fs_api.c:2512 src/fs/fs_api.c:3016
 #, c-format
 msgid "Failure while resuming search operation `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_api.c:2694
+#: src/fs/fs_api.c:2696
 #, c-format
 msgid "Failed to resume sub-download `%s': could not open file `%s'\n"
 msgstr ""
 
-#: src/fs/fs_api.c:2957
+#: src/fs/fs_api.c:2959
 msgid "Could not resume running search, will resume as paused search\n"
 msgstr ""
 
-#: src/fs/fs_api.c:3052
+#: src/fs/fs_api.c:3054
 #, c-format
 msgid "Failure while resuming download operation `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_directory.c:211
+#: src/fs/fs_directory.c:213
 msgid "MAGIC mismatch.  This is not a GNUnet directory.\n"
 msgstr ""
 
-#: src/fs/fs_download.c:308
+#: src/fs/fs_download.c:310
 msgid ""
 "Recursive downloads of directories larger than 4 GB are not supported on 32-"
 "bit systems\n"
 msgstr ""
 
-#: src/fs/fs_download.c:333
+#: src/fs/fs_download.c:335
 msgid "Directory too large for system address space\n"
 msgstr ""
 
-#: src/fs/fs_download.c:345
+#: src/fs/fs_download.c:347
 #, c-format
 msgid ""
 "Failed to access full directroy contents of `%s' for recursive download\n"
 msgstr ""
 
-#: src/fs/fs_download.c:532 src/fs/fs_download.c:544
+#: src/fs/fs_download.c:534 src/fs/fs_download.c:546
 #, c-format
 msgid "Failed to open file `%s' for writing"
 msgstr ""
 
-#: src/fs/fs_download.c:954
+#: src/fs/fs_download.c:956
 #, c-format
 msgid "Failed to create directory for recursive download of `%s'\n"
 msgstr ""
 
-#: src/fs/fs_download.c:1045
+#: src/fs/fs_download.c:1047
 #, c-format
 msgid ""
 "Internal error or bogus download URI (expected %u bytes at depth %u and "
 "offset %llu/%llu, got %u bytes)"
 msgstr ""
 
-#: src/fs/fs_download.c:1073
+#: src/fs/fs_download.c:1075
 msgid "internal error decrypting content"
 msgstr ""
 
-#: src/fs/fs_download.c:1097
+#: src/fs/fs_download.c:1099
 #, c-format
 msgid "Download failed: could not open file `%s': %s"
 msgstr ""
 
-#: src/fs/fs_download.c:1109
+#: src/fs/fs_download.c:1111
 #, c-format
 msgid "Failed to seek to offset %llu in file `%s': %s"
 msgstr ""
 
-#: src/fs/fs_download.c:1118
+#: src/fs/fs_download.c:1120
 #, c-format
 msgid "Failed to write block of %u bytes at offset %llu in file `%s': %s"
 msgstr ""
 
-#: src/fs/fs_download.c:1218
+#: src/fs/fs_download.c:1220
 msgid "internal error decoding tree"
 msgstr ""
 
-#: src/fs/fs_download.c:1883
+#: src/fs/fs_download.c:1885
 msgid "Invalid URI"
 msgstr "URI invalide"
 
-#: src/fs/fs_getopt.c:224
+#: src/fs/fs_getopt.c:235
 #, c-format
 msgid ""
 "Unknown metadata type in metadata option `%s'.  Using metadata type "
 "`unknown' instead.\n"
 msgstr ""
 
-#: src/fs/fs_list_indexed.c:150
+#: src/fs/fs_list_indexed.c:152
 #, fuzzy, c-format
 msgid "Failed to receive response from `%s' service.\n"
 msgstr "Dernier message reçu de %s\n"
 
-#: src/fs/fs_list_indexed.c:194
+#: src/fs/fs_list_indexed.c:196
 #, c-format
 msgid "Failed to not connect to `%s' service.\n"
 msgstr ""
 
-#: src/fs/fs_misc.c:126
+#: src/fs/fs_misc.c:128
 #, c-format
 msgid "Did not find mime type `%s' in extension list.\n"
 msgstr ""
 
-#: src/fs/fs_namespace.c:205
+#: src/fs/fs_namespace.c:207
 #, c-format
 msgid "Failed to open `%s' for writing: %s\n"
 msgstr ""
 
-#: src/fs/fs_namespace.c:230
+#: src/fs/fs_namespace.c:232
 #, c-format
 msgid "Failed to write `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_namespace.c:322
+#: src/fs/fs_namespace.c:324
 #, c-format
 msgid "Failed to read `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_namespace.c:468
+#: src/fs/fs_namespace.c:470
 msgid "Failed to connect to datastore."
 msgstr ""
 
-#: src/fs/fs_publish.c:125 src/fs/fs_publish.c:436
+#: src/fs/fs_publish.c:127 src/fs/fs_publish.c:438
 #, c-format
 msgid "Publishing failed: %s"
 msgstr ""
 
-#: src/fs/fs_publish.c:722 src/fs/fs_publish.c:776 src/fs/fs_publish.c:821
-#: src/fs/fs_publish.c:842 src/fs/fs_publish.c:872 src/fs/fs_publish.c:1138
+#: src/fs/fs_publish.c:724 src/fs/fs_publish.c:778 src/fs/fs_publish.c:823
+#: src/fs/fs_publish.c:844 src/fs/fs_publish.c:874 src/fs/fs_publish.c:1140
 #, c-format
 msgid "Can not index file `%s': %s.  Will try to insert instead.\n"
 msgstr ""
 
-#: src/fs/fs_publish.c:778
+#: src/fs/fs_publish.c:780
 msgid "error on index-start request to `fs' service"
 msgstr ""
 
-#: src/fs/fs_publish.c:823
+#: src/fs/fs_publish.c:825
 msgid "failed to compute hash"
 msgstr ""
 
-#: src/fs/fs_publish.c:843
+#: src/fs/fs_publish.c:845
 msgid "filename too long"
 msgstr ""
 
-#: src/fs/fs_publish.c:874
+#: src/fs/fs_publish.c:876
 msgid "could not connect to `fs' service"
 msgstr ""
 
-#: src/fs/fs_publish.c:900
+#: src/fs/fs_publish.c:902
 #, c-format
 msgid "Failed to get file identifiers for `%s'\n"
 msgstr ""
 
-#: src/fs/fs_publish.c:989 src/fs/fs_publish.c:1025
+#: src/fs/fs_publish.c:991 src/fs/fs_publish.c:1027
 msgid "Can not create LOC URI. Will continue with CHK instead.\n"
 msgstr ""
 
-#: src/fs/fs_publish.c:1092
+#: src/fs/fs_publish.c:1094
 #, c-format
 msgid "Recursive upload failed at `%s': %s"
 msgstr ""
 
-#: src/fs/fs_publish.c:1100
+#: src/fs/fs_publish.c:1102
 #, c-format
 msgid "Recursive upload failed: %s"
 msgstr ""
 
-#: src/fs/fs_publish.c:1140
+#: src/fs/fs_publish.c:1142
 msgid "needs to be an actual file"
 msgstr ""
 
-#: src/fs/fs_publish.c:1379
+#: src/fs/fs_publish.c:1381
 #, fuzzy, c-format
 msgid "Datastore failure: %s"
 msgstr "pa_stream_new() échoué : %s\n"
 
-#: src/fs/fs_publish.c:1470
+#: src/fs/fs_publish.c:1472
 #, c-format
 msgid "Reserving space for %u entries and %llu bytes for publication\n"
 msgstr ""
 
-#: src/fs/fs_publish_ksk.c:218
+#: src/fs/fs_publish_ksk.c:220
 msgid "Could not connect to datastore."
 msgstr ""
 
-#: src/fs/fs_publish_ublock.c:239
+#: src/fs/fs_publish_ublock.c:241
 msgid "Internal error."
 msgstr "Erreur interne."
 
-#: src/fs/fs_search.c:820 src/fs/fs_search.c:890
+#: src/fs/fs_search.c:822 src/fs/fs_search.c:892
 #, c-format
 msgid "Failed to parse URI `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_search.c:977
+#: src/fs/fs_search.c:979
 #, c-format
 msgid "Got result with unknown block type `%d', ignoring"
 msgstr ""
 
-#: src/fs/fs_unindex.c:61
+#: src/fs/fs_unindex.c:63
 msgid "Failed to find given position in file"
 msgstr ""
 
-#: src/fs/fs_unindex.c:66
+#: src/fs/fs_unindex.c:68
 msgid "Failed to read file"
 msgstr ""
 
-#: src/fs/fs_unindex.c:273
+#: src/fs/fs_unindex.c:275
 msgid "Error communicating with `fs' service."
 msgstr ""
 
-#: src/fs/fs_unindex.c:324
+#: src/fs/fs_unindex.c:326
 msgid "Failed to connect to FS service for unindexing."
 msgstr ""
 
-#: src/fs/fs_unindex.c:374 src/fs/fs_unindex.c:386
+#: src/fs/fs_unindex.c:376 src/fs/fs_unindex.c:388
 msgid "Failed to get KSKs from directory scan."
 msgstr ""
 
-#: src/fs/fs_unindex.c:382
+#: src/fs/fs_unindex.c:384
 #, c-format
 msgid "Internal error scanning `%s'.\n"
 msgstr ""
 
-#: src/fs/fs_unindex.c:441
+#: src/fs/fs_unindex.c:443
 #, c-format
 msgid "Failed to remove UBlock: %s\n"
 msgstr ""
 
-#: src/fs/fs_unindex.c:586 src/fs/fs_unindex.c:650
+#: src/fs/fs_unindex.c:588 src/fs/fs_unindex.c:652
 msgid "Failed to connect to `datastore' service."
 msgstr ""
 
-#: src/fs/fs_unindex.c:663
+#: src/fs/fs_unindex.c:665
 msgid "Failed to open file for unindexing."
 msgstr ""
 
-#: src/fs/fs_unindex.c:702
+#: src/fs/fs_unindex.c:704
 msgid "Failed to compute hash of file."
 msgstr ""
 
-#: src/fs/fs_uri.c:232
+#: src/fs/fs_uri.c:234
 #, no-c-format
 msgid "Malformed KSK URI (`%' must be followed by HEX number)"
 msgstr ""
 
-#: src/fs/fs_uri.c:291
+#: src/fs/fs_uri.c:293
 msgid "Malformed KSK URI (must not begin or end with `+')"
 msgstr ""
 
-#: src/fs/fs_uri.c:309
+#: src/fs/fs_uri.c:311
 msgid "Malformed KSK URI (`++' not allowed)"
 msgstr ""
 
-#: src/fs/fs_uri.c:316
+#: src/fs/fs_uri.c:318
 msgid "Malformed KSK URI (quotes not balanced)"
 msgstr ""
 
-#: src/fs/fs_uri.c:386
+#: src/fs/fs_uri.c:388
 msgid "Malformed SKS URI (wrong syntax)"
 msgstr ""
 
-#: src/fs/fs_uri.c:427
+#: src/fs/fs_uri.c:429
 msgid "Malformed CHK URI (wrong syntax)"
 msgstr ""
 
-#: src/fs/fs_uri.c:442
+#: src/fs/fs_uri.c:444
 msgid "Malformed CHK URI (failed to decode CHK)"
 msgstr ""
 
-#: src/fs/fs_uri.c:521
+#: src/fs/fs_uri.c:523
 msgid "LOC URI malformed (wrong syntax)"
 msgstr ""
 
-#: src/fs/fs_uri.c:536
+#: src/fs/fs_uri.c:538
 msgid "LOC URI malformed (no CHK)"
 msgstr ""
 
-#: src/fs/fs_uri.c:546
+#: src/fs/fs_uri.c:548
 msgid "LOC URI malformed (missing LOC)"
 msgstr ""
 
-#: src/fs/fs_uri.c:554
+#: src/fs/fs_uri.c:556
 msgid "LOC URI malformed (wrong syntax for public key)"
 msgstr ""
 
-#: src/fs/fs_uri.c:562
+#: src/fs/fs_uri.c:564
 msgid "LOC URI malformed (could not decode public key)"
 msgstr ""
 
-#: src/fs/fs_uri.c:568
+#: src/fs/fs_uri.c:570
 msgid "LOC URI malformed (could not find signature)"
 msgstr ""
 
-#: src/fs/fs_uri.c:574
+#: src/fs/fs_uri.c:576
 msgid "LOC URI malformed (wrong syntax for signature)"
 msgstr ""
 
-#: src/fs/fs_uri.c:583
+#: src/fs/fs_uri.c:585
 msgid "LOC URI malformed (could not decode signature)"
 msgstr ""
 
-#: src/fs/fs_uri.c:589
+#: src/fs/fs_uri.c:591
 msgid "LOC URI malformed (wrong syntax for expiration time)"
 msgstr ""
 
-#: src/fs/fs_uri.c:595
+#: src/fs/fs_uri.c:597
 msgid "LOC URI malformed (could not parse expiration time)"
 msgstr ""
 
-#: src/fs/fs_uri.c:607
+#: src/fs/fs_uri.c:609
 msgid "LOC URI malformed (signature failed validation)"
 msgstr ""
 
-#: src/fs/fs_uri.c:641
+#: src/fs/fs_uri.c:643
 #, fuzzy
 msgid "invalid argument"
 msgstr "Argument invalide « %s »\n"
 
-#: src/fs/fs_uri.c:653
+#: src/fs/fs_uri.c:655
 msgid "Unrecognized URI type"
 msgstr "Type d’URI non reconnu"
 
-#: src/fs/fs_uri.c:1057 src/fs/fs_uri.c:1084
+#: src/fs/fs_uri.c:1059 src/fs/fs_uri.c:1086
 msgid "No keywords specified!\n"
 msgstr ""
 
-#: src/fs/fs_uri.c:1090
+#: src/fs/fs_uri.c:1092
 msgid "Number of double-quotes not balanced!\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:230
+#: src/fs/gnunet-auto-share.c:232
 #, c-format
 msgid "Failed to load state: %s\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:283 src/fs/gnunet-auto-share.c:293
-#: src/fs/gnunet-auto-share.c:303
+#: src/fs/gnunet-auto-share.c:285 src/fs/gnunet-auto-share.c:295
+#: src/fs/gnunet-auto-share.c:305
 #, c-format
 msgid "Failed to save state to file %s\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:405
+#: src/fs/gnunet-auto-share.c:407
 #, c-format
 msgid "Publication of `%s' done\n"
 msgstr "Publication de « %s » terminée\n"
 
-#: src/fs/gnunet-auto-share.c:492
+#: src/fs/gnunet-auto-share.c:494
 #, c-format
 msgid "Publishing `%s'\n"
 msgstr "Publication de « %s »\n"
 
-#: src/fs/gnunet-auto-share.c:502
+#: src/fs/gnunet-auto-share.c:504
 #, c-format
 msgid "Failed to run `%s'\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:711
+#: src/fs/gnunet-auto-share.c:713
 #, c-format
 msgid ""
 "You must specify one and only one directory name for automatic publication.\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:765 src/fs/gnunet-publish.c:898
+#: src/fs/gnunet-auto-share.c:767 src/fs/gnunet-publish.c:903
 msgid "set the desired LEVEL of sender-anonymity"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:770 src/fs/gnunet-publish.c:902
+#: src/fs/gnunet-auto-share.c:772 src/fs/gnunet-publish.c:907
 msgid "disable adding the creation time to the metadata of the uploaded file"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:775 src/fs/gnunet-publish.c:907
+#: src/fs/gnunet-auto-share.c:777 src/fs/gnunet-publish.c:912
 msgid "do not use libextractor to add keywords or metadata"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:781 src/fs/gnunet-publish.c:942
+#: src/fs/gnunet-auto-share.c:783 src/fs/gnunet-publish.c:944
 msgid "specify the priority of the content"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:787 src/fs/gnunet-publish.c:954
+#: src/fs/gnunet-auto-share.c:789 src/fs/gnunet-publish.c:955
 msgid "set the desired replication LEVEL"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:811
+#: src/fs/gnunet-auto-share.c:813
 msgid "Automatically publish files from a directory on GNUnet"
 msgstr ""
 
-#: src/fs/gnunet-daemon-fsprofiler.c:646
+#: src/fs/gnunet-daemon-fsprofiler.c:648
 msgid "Daemon to use file-sharing to measure its performance."
 msgstr ""
 
-#: src/fs/gnunet-directory.c:51
+#: src/fs/gnunet-directory.c:53
 #, c-format
 msgid "\t<original file embedded in %u bytes of meta data>\n"
 msgstr ""
 
-#: src/fs/gnunet-directory.c:103
+#: src/fs/gnunet-directory.c:105
 #, c-format
 msgid "Directory `%s' meta data:\n"
 msgstr ""
 
-#: src/fs/gnunet-directory.c:106
+#: src/fs/gnunet-directory.c:108
 #, c-format
 msgid "Directory `%s' contents:\n"
 msgstr ""
 
-#: src/fs/gnunet-directory.c:141
+#: src/fs/gnunet-directory.c:143
 msgid "You must specify a filename to inspect.\n"
 msgstr ""
 
-#: src/fs/gnunet-directory.c:154
+#: src/fs/gnunet-directory.c:156
 #, c-format
 msgid "Failed to read directory `%s'\n"
 msgstr ""
 
-#: src/fs/gnunet-directory.c:163
+#: src/fs/gnunet-directory.c:165
 #, c-format
 msgid "`%s' is not a GNUnet directory\n"
 msgstr ""
 
-#: src/fs/gnunet-directory.c:192
+#: src/fs/gnunet-directory.c:194
 msgid "Display contents of a GNUnet directory"
 msgstr ""
 
-#: src/fs/gnunet-download.c:137
+#: src/fs/gnunet-download.c:139
 #, c-format
 msgid "Starting download `%s'.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:147
+#: src/fs/gnunet-download.c:149
 msgid "<unknown time>"
 msgstr ""
 
-#: src/fs/gnunet-download.c:156
+#: src/fs/gnunet-download.c:158
 #, c-format
 msgid ""
 "Downloading `%s' at %llu/%llu (%s remaining, %s/s). Block took %s to "
 "download\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:182
+#: src/fs/gnunet-download.c:184
 #, c-format
 msgid "Error downloading: %s.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:199
+#: src/fs/gnunet-download.c:201
 #, c-format
 msgid "Downloading `%s' done (%s/s).\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:214 src/fs/gnunet-publish.c:293
-#: src/fs/gnunet-search.c:210 src/fs/gnunet-unindex.c:105
+#: src/fs/gnunet-download.c:216 src/fs/gnunet-publish.c:295
+#: src/fs/gnunet-search.c:215 src/fs/gnunet-unindex.c:107
 #, c-format
 msgid "Unexpected status: %d\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:244
+#: src/fs/gnunet-download.c:246
 msgid "You need to specify a URI argument.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:251 src/fs/gnunet-publish.c:724
+#: src/fs/gnunet-download.c:253 src/fs/gnunet-publish.c:727
 #, c-format
 msgid "Failed to parse URI: %s\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:262
+#: src/fs/gnunet-download.c:264
 msgid "Only CHK or LOC URIs supported.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:271
+#: src/fs/gnunet-download.c:273
 msgid "Target filename must be specified.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:289 src/fs/gnunet-publish.c:868
-#: src/fs/gnunet-search.c:268 src/fs/gnunet-unindex.c:137
+#: src/fs/gnunet-download.c:291 src/fs/gnunet-publish.c:872
+#: src/fs/gnunet-search.c:273 src/fs/gnunet-unindex.c:139
 #, c-format
 msgid "Could not initialize `%s' subsystem.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:337 src/fs/gnunet-search.c:311
+#: src/fs/gnunet-download.c:339 src/fs/gnunet-search.c:315
 msgid "set the desired LEVEL of receiver-anonymity"
 msgstr ""
 
-#: src/fs/gnunet-download.c:342
+#: src/fs/gnunet-download.c:344
 msgid "delete incomplete downloads (when aborted with CTRL-C)"
 msgstr ""
 
-#: src/fs/gnunet-download.c:347 src/fs/gnunet-search.c:317
+#: src/fs/gnunet-download.c:349 src/fs/gnunet-search.c:319
 msgid "only search the local peer (no P2P network search)"
 msgstr ""
 
-#: src/fs/gnunet-download.c:352
+#: src/fs/gnunet-download.c:354
 msgid "write the file to FILENAME"
 msgstr ""
 
-#: src/fs/gnunet-download.c:357
+#: src/fs/gnunet-download.c:359
 msgid "set the maximum number of parallel downloads that is allowed"
 msgstr ""
 
-#: src/fs/gnunet-download.c:362
+#: src/fs/gnunet-download.c:364
 msgid "set the maximum number of parallel requests for blocks that is allowed"
 msgstr ""
 
-#: src/fs/gnunet-download.c:366
+#: src/fs/gnunet-download.c:368
 msgid "download a GNUnet directory recursively"
 msgstr ""
 
-#: src/fs/gnunet-download.c:384
+#: src/fs/gnunet-download.c:386
 msgid ""
 "Download files from GNUnet using a GNUnet CHK or LOC URI (gnunet://fs/"
 "chk/...)"
 msgstr ""
 
-#: src/fs/gnunet-fs.c:117
+#: src/fs/gnunet-fs.c:119
 msgid "print a list of all indexed files"
 msgstr ""
 
-#: src/fs/gnunet-fs.c:128
+#: src/fs/gnunet-fs.c:130
 msgid "Special file-sharing operations"
 msgstr ""
 
-#: src/fs/gnunet-fs-profiler.c:209
+#: src/fs/gnunet-fs-profiler.c:211
 msgid "run the experiment with COUNT peers"
 msgstr ""
 
-#: src/fs/gnunet-fs-profiler.c:215
+#: src/fs/gnunet-fs-profiler.c:217
 msgid "specifies name of a file with the HOSTS the testbed should use"
 msgstr ""
 
-#: src/fs/gnunet-fs-profiler.c:221
+#: src/fs/gnunet-fs-profiler.c:223
 msgid "automatically terminate experiment after DELAY"
 msgstr ""
 
-#: src/fs/gnunet-fs-profiler.c:231
+#: src/fs/gnunet-fs-profiler.c:233
 msgid "run a testbed to measure file-sharing performance"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:217 src/fs/gnunet-publish.c:229
+#: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:231
 #, c-format
 msgid "Publishing `%s' at %llu/%llu (%s remaining)\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:237
+#: src/fs/gnunet-publish.c:239
 #, c-format
 msgid "Error publishing: %s.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:244
+#: src/fs/gnunet-publish.c:246
 #, c-format
 msgid "Publishing `%s' done.\n"
 msgstr "Publication de « %s » terminée.\n"
 
-#: src/fs/gnunet-publish.c:249
+#: src/fs/gnunet-publish.c:251
 #, c-format
 msgid "URI is `%s'.\n"
 msgstr "L’URI est « %s ».\n"
 
-#: src/fs/gnunet-publish.c:257
+#: src/fs/gnunet-publish.c:259
 #, fuzzy, c-format
 msgid "Namespace URI is `%s'.\n"
 msgstr "L’URI est « %s ».\n"
 
-#: src/fs/gnunet-publish.c:273
+#: src/fs/gnunet-publish.c:275
 msgid "Starting cleanup after abort\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:280
+#: src/fs/gnunet-publish.c:282
 msgid "Cleanup after abort completed.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:286
+#: src/fs/gnunet-publish.c:288
 msgid "Cleanup after abort failed.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:428
+#: src/fs/gnunet-publish.c:430
 #, c-format
 msgid "Meta data for file `%s' (%s)\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:433
+#: src/fs/gnunet-publish.c:435
 #, c-format
 msgid "Keywords for file `%s' (%s)\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:587
+#: src/fs/gnunet-publish.c:590
 msgid "Could not publish\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:612
+#: src/fs/gnunet-publish.c:615
 msgid "Could not start publishing.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:646
+#: src/fs/gnunet-publish.c:649
 #, c-format
 msgid "Scanning directory `%s'.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:650
+#: src/fs/gnunet-publish.c:653
 #, c-format
 msgid "Scanning file `%s'.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:656
+#: src/fs/gnunet-publish.c:659
 #, c-format
 msgid "There was trouble processing file `%s', skipping it.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:663
+#: src/fs/gnunet-publish.c:666
 msgid "Preprocessing complete.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:668
+#: src/fs/gnunet-publish.c:671
 #, c-format
 msgid "Extracting meta data from file `%s' complete.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:675
+#: src/fs/gnunet-publish.c:678
 msgid "Meta data extraction has finished.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:684
+#: src/fs/gnunet-publish.c:687
 msgid "Internal error scanning directory.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:712
+#: src/fs/gnunet-publish.c:715
 #, c-format
 msgid "Selected pseudonym `%s' unknown\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:745
+#: src/fs/gnunet-publish.c:749
 #, c-format
 msgid "Failed to access `%s': %s\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:759
+#: 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:815
+#: src/fs/gnunet-publish.c:819
 #, c-format
 msgid "Cannot extract metadata from a URI!\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:822
+#: 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:828
+#: 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:836 src/vpn/gnunet-vpn.c:208
+#: src/fs/gnunet-publish.c:840 src/vpn/gnunet-vpn.c:210
 #, c-format
 msgid "Option `%s' is required when using option `%s'.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:847 src/fs/gnunet-publish.c:855
-#: src/transport/gnunet-transport.c:1280 src/transport/gnunet-transport.c:1307
+#: src/fs/gnunet-publish.c:851 src/fs/gnunet-publish.c:859
+#: src/transport/gnunet-transport.c:1282 src/transport/gnunet-transport.c:1309
 #, c-format
 msgid "Option `%s' makes no sense without option `%s'.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:911
+#: src/fs/gnunet-publish.c:916
 msgid ""
 "print list of extracted keywords that would be used, but do not perform "
 "upload"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:917
+#: src/fs/gnunet-publish.c:922
 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:923
+#: src/fs/gnunet-publish.c:928
 msgid "set the meta-data for the given TYPE to the given VALUE"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:928
+#: src/fs/gnunet-publish.c:932
 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:938
 msgid ""
 "specify ID of an updated version to be published in the future (for "
 "namespace insertions only)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:948
+#: src/fs/gnunet-publish.c:949
 msgid "publish the files under the pseudonym NAME (place file into namespace)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:958
+#: src/fs/gnunet-publish.c:959
 msgid ""
 "only simulate the process but do not do any actual publishing (useful to "
 "compute URIs)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:964
+#: src/fs/gnunet-publish.c:965
 msgid ""
 "set the ID of this version of the publication (for namespace insertions only)"
 msgstr ""
@@ -3441,29 +3432,29 @@ msgid ""
 "to the file with the respective URI)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:987
+#: src/fs/gnunet-publish.c:989
 msgid "Publish a file or directory on GNUnet"
 msgstr ""
 
-#: src/fs/gnunet-search.c:125
+#: src/fs/gnunet-search.c:127
 #, c-format
 msgid "Failed to write directory with search results to `%s'\n"
 msgstr ""
 
-#: src/fs/gnunet-search.c:202
+#: src/fs/gnunet-search.c:207
 #, c-format
 msgid "Error searching: %s.\n"
 msgstr ""
 
-#: src/fs/gnunet-search.c:258
+#: src/fs/gnunet-search.c:263
 msgid "Could not create keyword URI from arguments.\n"
 msgstr ""
 
-#: src/fs/gnunet-search.c:282
+#: src/fs/gnunet-search.c:287
 msgid "Could not start searching.\n"
 msgstr ""
 
-#: src/fs/gnunet-search.c:323
+#: src/fs/gnunet-search.c:324
 msgid "write search results to file starting with PREFIX"
 msgstr ""
 
@@ -3471,7 +3462,7 @@ msgstr ""
 msgid "automatically terminate search after DELAY"
 msgstr ""
 
-#: src/fs/gnunet-search.c:338
+#: src/fs/gnunet-search.c:335
 msgid "automatically terminate search after VALUE results are found"
 msgstr ""
 
@@ -3479,2939 +3470,2758 @@ msgstr ""
 msgid "Search GNUnet for files that were published on GNUnet"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:375 src/fs/gnunet-service-fs.c:880
+#: src/fs/gnunet-service-fs.c:377 src/fs/gnunet-service-fs.c:882
 msgid "# client searches active"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:434
+#: src/fs/gnunet-service-fs.c:436
 msgid "# replies received for local clients"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:603
+#: src/fs/gnunet-service-fs.c:605
 msgid "# running average P2P latency (ms)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:655 src/fs/gnunet-service-fs_cp.c:562
+#: src/fs/gnunet-service-fs.c:657 src/fs/gnunet-service-fs_cp.c:564
 msgid "# Loopback routes suppressed"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:834
+#: src/fs/gnunet-service-fs.c:836
 msgid "# client searches received"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:873
+#: src/fs/gnunet-service-fs.c:875
 msgid "# client searches updated (merged content seen list)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:1044
+#: src/fs/gnunet-service-fs.c:1040
 #, c-format
 msgid "Hash mismatch trying to index file `%s' which does not have hash `%s'\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:1284
+#: src/fs/gnunet-service-fs.c:1280
 msgid "FS service is lacking HOSTKEY configuration setting.  Exiting.\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:1309 src/hostlist/gnunet-daemon-hostlist.c:353
-#: src/topology/gnunet-daemon-topology.c:1200
+#: src/fs/gnunet-service-fs.c:1305 src/hostlist/gnunet-daemon-hostlist.c:355
+#: src/topology/gnunet-daemon-topology.c:1202
 #, c-format
 msgid "Failed to connect to `%s' service.\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cadet_client.c:368
+#: src/fs/gnunet-service-fs_cadet_client.c:370
 msgid "# replies received via cadet"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cadet_client.c:382
+#: src/fs/gnunet-service-fs_cadet_client.c:384
 msgid "# replies received via cadet dropped"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cadet_server.c:263
+#: src/fs/gnunet-service-fs_cadet_server.c:265
 msgid "# queries received via CADET not answered"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cadet_server.c:318
+#: src/fs/gnunet-service-fs_cadet_server.c:320
 msgid "# Blocks transferred via cadet"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cadet_server.c:344
+#: src/fs/gnunet-service-fs_cadet_server.c:346
 msgid "# queries received via cadet"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cadet_server.c:386
+#: src/fs/gnunet-service-fs_cadet_server.c:388
 msgid "# cadet client connections rejected"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cadet_server.c:393
-#: src/fs/gnunet-service-fs_cadet_server.c:433
+#: src/fs/gnunet-service-fs_cadet_server.c:395
+#: src/fs/gnunet-service-fs_cadet_server.c:435
 #, fuzzy
 msgid "# cadet connections active"
 msgstr "# Session TCP active"
 
-#: src/fs/gnunet-service-fs_cp.c:684
+#: src/fs/gnunet-service-fs_cp.c:685
 msgid "# migration stop messages received"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:688
+#: src/fs/gnunet-service-fs_cp.c:689
 #, c-format
 msgid "Migration of content to peer `%s' blocked for %s\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:721 src/fs/gnunet-service-fs_cp.c:1343
+#: src/fs/gnunet-service-fs_cp.c:722 src/fs/gnunet-service-fs_cp.c:1344
 msgid "# P2P searches active"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:816
+#: src/fs/gnunet-service-fs_cp.c:817
 msgid "# artificial delays introduced (ms)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:873
+#: src/fs/gnunet-service-fs_cp.c:874
 msgid "# replies dropped due to type mismatch"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:881
+#: src/fs/gnunet-service-fs_cp.c:882
 msgid "# replies received for other peers"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:895
+#: src/fs/gnunet-service-fs_cp.c:896
 msgid "# replies dropped due to insufficient cover traffic"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:942
+#: src/fs/gnunet-service-fs_cp.c:943
 msgid "# P2P searches destroyed due to ultimate reply"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1013
+#: src/fs/gnunet-service-fs_cp.c:1014
 msgid "# requests done for free (low load)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1038
+#: src/fs/gnunet-service-fs_cp.c:1039
 msgid "# request dropped, priority insufficient"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1048
+#: src/fs/gnunet-service-fs_cp.c:1049
 msgid "# requests done for a price (normal load)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1146
+#: src/fs/gnunet-service-fs_cp.c:1147
 msgid "# requests dropped due to higher-TTL request"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1203
+#: src/fs/gnunet-service-fs_cp.c:1204
 msgid "# GET requests received (from other peers)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1226
+#: src/fs/gnunet-service-fs_cp.c:1227
 msgid "# requests dropped due to missing reverse route"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1239
+#: src/fs/gnunet-service-fs_cp.c:1240
 msgid "# requests dropped due to full reply queue"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1295
+#: src/fs/gnunet-service-fs_cp.c:1296
 msgid "# requests dropped due TTL underflow"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1339
+#: src/fs/gnunet-service-fs_cp.c:1340
 msgid "# P2P query messages received and processed"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1706
+#: src/fs/gnunet-service-fs_cp.c:1707
 msgid "# migration stop messages sent"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_indexing.c:132
-#: src/fs/gnunet-service-fs_indexing.c:193
+#: src/fs/gnunet-service-fs_indexing.c:134
+#: src/fs/gnunet-service-fs_indexing.c:195
 #, c-format
 msgid "Could not open `%s'.\n"
 msgstr "Impossible d’ouvrir « %s ».\n"
 
-#: src/fs/gnunet-service-fs_indexing.c:149
+#: src/fs/gnunet-service-fs_indexing.c:151
 #, c-format
 msgid "Error writing `%s'.\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_indexing.c:251
+#: src/fs/gnunet-service-fs_indexing.c:253
 #, c-format
 msgid "Failed to delete bogus block: %s\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_indexing.c:329
+#: src/fs/gnunet-service-fs_indexing.c:331
 msgid "# index blocks removed: original file inaccessible"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_indexing.c:355
+#: src/fs/gnunet-service-fs_indexing.c:357
 #, c-format
 msgid "Could not access indexed file `%s' (%s) at offset %llu: %s\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_indexing.c:359
+#: src/fs/gnunet-service-fs_indexing.c:361
 msgid "not indexed"
 msgstr "non indexé"
 
-#: src/fs/gnunet-service-fs_indexing.c:392
+#: src/fs/gnunet-service-fs_indexing.c:394
 #, c-format
 msgid "Indexed file `%s' changed at offset %llu\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_indexing.c:516
+#: src/fs/gnunet-service-fs_indexing.c:518
 #, c-format
 msgid ""
 "Index request received for file `%s' is already indexed as `%s'.  Permitting "
 "anyway.\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:263
+#: src/fs/gnunet-service-fs_pe.c:265
 msgid "# average retransmission delay (ms)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:425
+#: src/fs/gnunet-service-fs_pe.c:427
 msgid "# delay heap timeout (ms)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:436
+#: src/fs/gnunet-service-fs_pe.c:438
 msgid "# query plans executed"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:464
+#: src/fs/gnunet-service-fs_pe.c:466
 msgid "# query messages sent to other peers"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:534
+#: src/fs/gnunet-service-fs_pe.c:536
 msgid "# requests merged"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:544
+#: src/fs/gnunet-service-fs_pe.c:546
 msgid "# requests refreshed"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:604 src/fs/gnunet-service-fs_pe.c:707
-#: src/fs/gnunet-service-fs_pe.c:786
+#: src/fs/gnunet-service-fs_pe.c:606 src/fs/gnunet-service-fs_pe.c:709
+#: src/fs/gnunet-service-fs_pe.c:788
 msgid "# query plan entries"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:328
+#: src/fs/gnunet-service-fs_pr.c:330
 msgid "# Pending requests created"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:428 src/fs/gnunet-service-fs_pr.c:675
+#: src/fs/gnunet-service-fs_pr.c:430 src/fs/gnunet-service-fs_pr.c:677
 msgid "# Pending requests active"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:856
+#: src/fs/gnunet-service-fs_pr.c:858
 msgid "# replies received and matched"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:892
+#: src/fs/gnunet-service-fs_pr.c:894
 msgid "# duplicate replies discarded (bloomfilter)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:901
+#: src/fs/gnunet-service-fs_pr.c:903
 msgid "# irrelevant replies discarded"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:916
+#: src/fs/gnunet-service-fs_pr.c:918
 #, c-format
 msgid "Unsupported block type %u\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:933
+#: src/fs/gnunet-service-fs_pr.c:935
 msgid "# results found locally"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1063
+#: src/fs/gnunet-service-fs_pr.c:1065
 msgid "# Datastore `PUT' failures"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1091
+#: src/fs/gnunet-service-fs_pr.c:1093
 msgid "# storage requests dropped due to high load"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1129
+#: src/fs/gnunet-service-fs_pr.c:1131
 msgid "# Replies received from DHT"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1260
+#: src/fs/gnunet-service-fs_pr.c:1262
 msgid "# Replies received from CADET"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1312
+#: src/fs/gnunet-service-fs_pr.c:1314
 #, c-format
 msgid "Datastore lookup already took %s!\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1333
+#: src/fs/gnunet-service-fs_pr.c:1335
 #, c-format
 msgid "On-demand lookup already took %s!\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1393
+#: src/fs/gnunet-service-fs_pr.c:1395
 msgid "# requested DBLOCK or IBLOCK not found"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1452
+#: src/fs/gnunet-service-fs_pr.c:1454
 msgid "# Datastore lookups concluded (error queueing)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1507
+#: src/fs/gnunet-service-fs_pr.c:1509
 msgid "# Datastore lookups concluded (no results)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1522
+#: src/fs/gnunet-service-fs_pr.c:1524
 msgid "# Datastore lookups concluded (seen all)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1546
+#: src/fs/gnunet-service-fs_pr.c:1548
 msgid "# Datastore lookups aborted (more than MAX_RESULTS)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1560
+#: src/fs/gnunet-service-fs_pr.c:1562
 msgid "# on-demand blocks matched requests"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1581
+#: src/fs/gnunet-service-fs_pr.c:1583
 msgid "# on-demand lookups performed successfully"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1586
+#: src/fs/gnunet-service-fs_pr.c:1588
 msgid "# on-demand lookups failed"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1624
+#: src/fs/gnunet-service-fs_pr.c:1626
 msgid "# Datastore lookups concluded (found last result)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1637
+#: src/fs/gnunet-service-fs_pr.c:1639
 msgid "# Datastore lookups concluded (load too high)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1691
+#: src/fs/gnunet-service-fs_pr.c:1693
 msgid "# Datastore lookups initiated"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1747
+#: src/fs/gnunet-service-fs_pr.c:1749
 msgid "# GAP PUT messages received"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_push.c:644
+#: src/fs/gnunet-service-fs_push.c:646
 msgid "time required, content pushing disabled"
 msgstr ""
 
-#: src/fs/gnunet-unindex.c:87
+#: src/fs/gnunet-unindex.c:89
 #, c-format
 msgid "Unindexing at %llu/%llu (%s remaining)\n"
 msgstr ""
 
-#: src/fs/gnunet-unindex.c:93
+#: src/fs/gnunet-unindex.c:95
 #, c-format
 msgid "Error unindexing: %s.\n"
 msgstr ""
 
-#: src/fs/gnunet-unindex.c:98
+#: src/fs/gnunet-unindex.c:100
 msgid "Unindexing done.\n"
 msgstr ""
 
-#: src/fs/gnunet-unindex.c:127
+#: 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:144
+#: src/fs/gnunet-unindex.c:146
 msgid "Could not start unindex operation.\n"
 msgstr ""
 
-#: src/fs/gnunet-unindex.c:176
+#: src/fs/gnunet-unindex.c:178
 msgid "Unindex a file that was previously indexed with gnunet-publish."
 msgstr ""
 
-#: src/gns/gns_tld_api.c:274
+#: src/gns/gns_tld_api.c:348
 msgid "Expected a base32-encoded public zone key\n"
 msgstr ""
 
-#: src/gns/gnunet-bcd.c:125
+#: src/gns/gnunet-bcd.c:127
 #, c-format
 msgid "Refusing `%s' request to HTTP server\n"
 msgstr ""
 
-#: src/gns/gnunet-bcd.c:355
+#: src/gns/gnunet-bcd.c:357
 #, c-format
 msgid "Invalid port number %u.  Exiting.\n"
 msgstr ""
 
-#: src/gns/gnunet-bcd.c:360
+#: src/gns/gnunet-bcd.c:362
 #, c-format
 msgid "Businesscard HTTP server starts on %u\n"
 msgstr ""
 
-#: src/gns/gnunet-bcd.c:374
+#: src/gns/gnunet-bcd.c:376
 #, c-format
 msgid "Could not start businesscard HTTP server on port %u\n"
 msgstr ""
 
-#: src/gns/gnunet-bcd.c:521
+#: src/gns/gnunet-bcd.c:523
 msgid "Run HTTP serve on port PORT (default is 8888)"
 msgstr ""
 
-#: src/gns/gnunet-bcd.c:534
+#: src/gns/gnunet-bcd.c:536
 msgid "GNUnet HTTP server to create business cards"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:201
+#: src/gns/gnunet-dns2gns.c:203
 msgid "Failed to pack DNS response into UDP packet!\n"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:403
+#: src/gns/gnunet-dns2gns.c:405
 #, c-format
 msgid "Cannot parse DNS request from %s\n"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:419
+#: src/gns/gnunet-dns2gns.c:421
 #, c-format
 msgid "Received malformed DNS request from %s\n"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:427
+#: src/gns/gnunet-dns2gns.c:429
 #, c-format
 msgid "Received unsupported DNS request from %s\n"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:586
+#: src/gns/gnunet-dns2gns.c:588
 msgid "No DNS server specified!\n"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:686
+#: src/gns/gnunet-dns2gns.c:688
 msgid "IP of recursive DNS resolver to use (required)"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:691
+#: src/gns/gnunet-dns2gns.c:693
 msgid "UDP port to listen on for inbound DNS requests; default: 2853"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:708
+#: src/gns/gnunet-dns2gns.c:710
 msgid "GNUnet DNS-to-GNS proxy (a DNS server)"
 msgstr ""
 
-#: src/gns/gnunet-gns-benchmark.c:580
+#: src/gns/gnunet-gns-benchmark.c:582
 msgid "how long to wait between queries"
 msgstr ""
 
-#: src/gns/gnunet-gns-benchmark.c:585
+#: src/gns/gnunet-gns-benchmark.c:587
 msgid "how long to wait for an answer"
 msgstr ""
 
-#: src/gns/gnunet-gns-benchmark.c:589
+#: src/gns/gnunet-gns-benchmark.c:591
 msgid "look for GNS2DNS records instead of ANY"
 msgstr ""
 
-#: src/gns/gnunet-gns.c:197
+#: src/gns/gnunet-gns.c:199
 #, c-format
 msgid "Invalid typename specified, assuming `ANY'\n"
 msgstr ""
 
-#: src/gns/gnunet-gns.c:231
+#: src/gns/gnunet-gns.c:233
 msgid "Lookup a record for the given name"
 msgstr ""
 
-#: src/gns/gnunet-gns.c:236
+#: src/gns/gnunet-gns.c:238
 msgid "Specify the type of the record to lookup"
 msgstr ""
 
-#: src/gns/gnunet-gns.c:240
+#: src/gns/gnunet-gns.c:242
 msgid "No unneeded output"
 msgstr ""
 
-#: src/gns/gnunet-gns.c:256
+#: src/gns/gnunet-gns.c:258
 msgid "GNUnet GNS resolver tool"
 msgstr ""
 
-#: src/gns/gnunet-gns-helper-service-w32.c:600
+#: src/gns/gnunet-gns-helper-service-w32.c:602
 msgid "Not ready to process requests, lacking ego data\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-helper-service-w32.c:699
+#: src/gns/gnunet-gns-helper-service-w32.c:701
 msgid ""
 "Ego for `gns-master' not found, cannot perform lookup.  Did you run gnunet-"
 "gns-import.sh?\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-helper-service-w32.c:737
+#: src/gns/gnunet-gns-helper-service-w32.c:739
 #, c-format
 msgid "Failed to connect to identity service\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-import.c:450
+#: src/gns/gnunet-gns-import.c:452
 msgid "This program will import some GNS authorities into your GNS namestore."
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:110
-#: src/hostlist/gnunet-daemon-hostlist_client.c:533
-#: src/hostlist/gnunet-daemon-hostlist_client.c:751
-#: src/hostlist/gnunet-daemon-hostlist_client.c:757
-#: src/hostlist/gnunet-daemon-hostlist_client.c:809
-#: src/hostlist/gnunet-daemon-hostlist_client.c:818
-#: src/hostlist/gnunet-daemon-hostlist_client.c:929
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1024
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1029
-#: src/transport/plugin_transport_http_client.c:596
-#: src/transport/plugin_transport_http_client.c:614
+#: src/gns/gnunet-gns-proxy.c:118
+#: src/hostlist/gnunet-daemon-hostlist_client.c:535
+#: src/hostlist/gnunet-daemon-hostlist_client.c:753
+#: src/hostlist/gnunet-daemon-hostlist_client.c:759
+#: src/hostlist/gnunet-daemon-hostlist_client.c:811
+#: src/hostlist/gnunet-daemon-hostlist_client.c:820
+#: src/hostlist/gnunet-daemon-hostlist_client.c:931
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1026
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1031
+#: src/transport/plugin_transport_http_client.c:598
+#: src/transport/plugin_transport_http_client.c:616
 #, c-format
 msgid "%s failed at %s:%d: `%s'\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:960
+#: src/gns/gnunet-gns-proxy.c:980
 #, c-format
 msgid "Unsupported CURL TLS backend %d\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:985
+#: src/gns/gnunet-gns-proxy.c:1005
 #, c-format
 msgid "Failed to fetch CN from cert: %s\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:1008
+#: src/gns/gnunet-gns-proxy.c:1026
 #, c-format
 msgid "Failed to initialize DANE: %s\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:1021
+#: src/gns/gnunet-gns-proxy.c:1041
 #, c-format
 msgid "Failed to parse DANE record: %s\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:1036
+#: src/gns/gnunet-gns-proxy.c:1056
 #, c-format
 msgid "Failed to verify TLS connection using DANE: %s\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:1046
+#: src/gns/gnunet-gns-proxy.c:1066
 #, c-format
 msgid "Failed DANE verification failed with GnuTLS verify status code: %u\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:1070
+#: src/gns/gnunet-gns-proxy.c:1090
 #, c-format
 msgid "TLS certificate subject name (%s) does not match `%s': %d\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:1200
+#: src/gns/gnunet-gns-proxy.c:1221
 #, c-format
 msgid "Cookie domain `%s' supplied by server is invalid\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:2062
+#: src/gns/gnunet-gns-proxy.c:2121
 #, c-format
 msgid "Unsupported HTTP method `%s'\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:2583
+#: src/gns/gnunet-gns-proxy.c:2642
 #, c-format
 msgid "Unable to import private key from file `%s'\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:2615
+#: src/gns/gnunet-gns-proxy.c:2674
 #, c-format
 msgid "Unable to import certificate from `%s'\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:2814
+#: src/gns/gnunet-gns-proxy.c:2875
 #, c-format
 msgid "Failed to start HTTPS server for `%s'\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:2839 src/rest/gnunet-rest-server.c:656
+#: src/gns/gnunet-gns-proxy.c:2897 src/rest/gnunet-rest-server.c:658
 msgid "Failed to pass client to MHD\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3169
+#: src/gns/gnunet-gns-proxy.c:3233
 #, c-format
 msgid "Unsupported socks version %d\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3198
+#: src/gns/gnunet-gns-proxy.c:3262
 #, c-format
 msgid "Unsupported socks command %d\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3280
+#: src/gns/gnunet-gns-proxy.c:3345
 #, c-format
 msgid "Unsupported socks address type %d\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3570
+#: src/gns/gnunet-gns-proxy.c:3635
 #, c-format
 msgid "Failed to load X.509 key and certificate from `%s'\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3698
+#: src/gns/gnunet-gns-proxy.c:3763
 msgid "listen on specified port (default: 7777)"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3703
+#: src/gns/gnunet-gns-proxy.c:3768
 msgid "pem file to use as CA"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3707
+#: src/gns/gnunet-gns-proxy.c:3772
 msgid "disable use of IPv6"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3733
+#: src/gns/gnunet-gns-proxy.c:3798
 msgid "GNUnet GNS proxy"
 msgstr ""
 
-#: src/gns/gnunet-service-gns.c:511
+#: src/gns/gnunet-service-gns.c:506
 msgid "Properly base32-encoded public key required"
 msgstr ""
 
-#: src/gns/gnunet-service-gns.c:547
+#: src/gns/gnunet-service-gns.c:542
 msgid "Failed to connect to the namecache!\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns.c:566
-#: src/zonemaster/gnunet-service-zonemaster.c:873
-#: src/zonemaster/gnunet-service-zonemaster-monitor.c:438
+#: src/gns/gnunet-service-gns.c:561
+#: src/zonemaster/gnunet-service-zonemaster.c:875
+#: src/zonemaster/gnunet-service-zonemaster-monitor.c:440
 msgid "Could not connect to DHT!\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_interceptor.c:257
+#: src/gns/gnunet-service-gns_interceptor.c:259
 msgid "Error converting GNS response to DNS response!\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_interceptor.c:364
+#: src/gns/gnunet-service-gns_interceptor.c:366
 msgid "Failed to connect to the DNS service!\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:717
+#: src/gns/gnunet-service-gns_resolver.c:700
 #, c-format
 msgid "Protocol `%s' unknown, skipping labels.\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:728
+#: src/gns/gnunet-service-gns_resolver.c:711
 #, c-format
 msgid "Service `%s' unknown for protocol `%s', skipping labels.\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:931
+#: src/gns/gnunet-service-gns_resolver.c:914
 msgid "Failed to parse DNS response\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:1112
+#: src/gns/gnunet-service-gns_resolver.c:1095
 #, c-format
 msgid "Skipping record of unsupported type %d\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:1382
+#: src/gns/gnunet-service-gns_resolver.c:1365
 #, c-format
 msgid "VPN returned empty result for `%s'\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:1823
+#: src/gns/gnunet-service-gns_resolver.c:1806
 #, c-format
 msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:1866
+#: src/gns/gnunet-service-gns_resolver.c:1849
 #, c-format
 msgid "GNS lookup failed (zero records found for `%s')\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:2281
+#: src/gns/gnunet-service-gns_resolver.c:2264
 msgid "GNS lookup recursion failed (no delegation record found)\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:2304
+#: src/gns/gnunet-service-gns_resolver.c:2287
 #, c-format
 msgid "Failed to cache GNS resolution: %s\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:2467
+#: src/gns/gnunet-service-gns_resolver.c:2450
 #, c-format
 msgid "GNS namecache returned empty result for `%s'\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:2602
+#: src/gns/gnunet-service-gns_resolver.c:2585
 #, c-format
 msgid "Zone %s was revoked, resolution fails\n"
 msgstr ""
 
-#: src/gns/plugin_gnsrecord_gns.c:179
+#: src/gns/plugin_gnsrecord_gns.c:181
 #, c-format
 msgid "Unable to parse PKEY record `%s'\n"
 msgstr ""
 
-#: src/gns/plugin_gnsrecord_gns.c:210
+#: src/gns/plugin_gnsrecord_gns.c:212
 #, c-format
 msgid "Unable to parse GNS2DNS record `%s'\n"
 msgstr ""
 
-#: src/gns/plugin_gnsrecord_gns.c:231
+#: src/gns/plugin_gnsrecord_gns.c:233
 #, c-format
 msgid "Failed to serialize GNS2DNS record with value `%s'\n"
 msgstr ""
 
-#: src/gns/plugin_gnsrecord_gns.c:256
+#: src/gns/plugin_gnsrecord_gns.c:258
 #, c-format
 msgid "Unable to parse VPN record string `%s'\n"
 msgstr ""
 
-#: src/gns/plugin_gnsrecord_gns.c:292
+#: src/gns/plugin_gnsrecord_gns.c:294
 #, c-format
 msgid "Unable to parse BOX record string `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:357
+#: src/gnsrecord/plugin_gnsrecord_dns.c:359
 #, c-format
 msgid "Unable to parse IPv4 address `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:378
+#: 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:400
+#: 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:485
+#: src/gnsrecord/plugin_gnsrecord_dns.c:487
 #, c-format
 msgid "Failed to serialize CERT record with %u bytes\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:521
+#: src/gnsrecord/plugin_gnsrecord_dns.c:523
 #, c-format
 msgid "Unable to parse SOA record `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:540
+#: src/gnsrecord/plugin_gnsrecord_dns.c:542
 #, c-format
 msgid "Failed to serialize SOA record with mname `%s' and rname `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:563
+#: src/gnsrecord/plugin_gnsrecord_dns.c:565
 #, c-format
 msgid "Failed to serialize PTR record with value `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:586
+#: src/gnsrecord/plugin_gnsrecord_dns.c:588
 #, c-format
 msgid "Unable to parse MX record `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:601
+#: src/gnsrecord/plugin_gnsrecord_dns.c:603
 #, c-format
 msgid "Failed to serialize MX record with hostname `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:628
+#: src/gnsrecord/plugin_gnsrecord_dns.c:630
 #, c-format
 msgid "Unable to parse SRV record `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:644
+#: src/gnsrecord/plugin_gnsrecord_dns.c:646
 #, c-format
 msgid "Failed to serialize SRV record with target `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:661
+#: src/gnsrecord/plugin_gnsrecord_dns.c:663
 #, c-format
 msgid "Unable to parse IPv6 address `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:685
-#: src/gnsrecord/plugin_gnsrecord_dns.c:701
+#: src/gnsrecord/plugin_gnsrecord_dns.c:687
+#: src/gnsrecord/plugin_gnsrecord_dns.c:703
 #, c-format
 msgid "Unable to parse TLSA record string `%s'\n"
 msgstr ""
 
-#: src/hello/gnunet-hello.c:124
+#: src/hello/gnunet-hello.c:126
 msgid "Call with name of HELLO file to modify.\n"
 msgstr ""
 
-#: src/hello/gnunet-hello.c:130
+#: src/hello/gnunet-hello.c:132
 #, c-format
 msgid "Error accessing file `%s': %s\n"
 msgstr ""
 
-#: src/hello/gnunet-hello.c:138
+#: src/hello/gnunet-hello.c:140
 #, c-format
 msgid "File `%s' is too big to be a HELLO\n"
 msgstr ""
 
-#: src/hello/gnunet-hello.c:145
+#: src/hello/gnunet-hello.c:147
 #, c-format
 msgid "File `%s' is too small to be a HELLO\n"
 msgstr ""
 
-#: src/hello/gnunet-hello.c:155 src/hello/gnunet-hello.c:196
+#: src/hello/gnunet-hello.c:157 src/hello/gnunet-hello.c:198
 #, c-format
 msgid "Error opening file `%s': %s\n"
 msgstr ""
 
-#: src/hello/gnunet-hello.c:172
+#: src/hello/gnunet-hello.c:174
 #, c-format
 msgid "Did not find well-formed HELLO in file `%s'\n"
 msgstr ""
 
-#: src/hello/gnunet-hello.c:208
+#: src/hello/gnunet-hello.c:210
 #, c-format
 msgid "Error writing HELLO to file `%s': %s\n"
 msgstr ""
 
-#: src/hello/gnunet-hello.c:217
+#: src/hello/gnunet-hello.c:219
 #, c-format
 msgid "Modified %u addresses, wrote %u bytes\n"
 msgstr ""
 
-#: src/hello/hello.c:1108
+#: src/hello/hello.c:1110
 msgid "Failed to parse HELLO message: missing expiration time\n"
 msgstr ""
 
-#: src/hello/hello.c:1117
+#: src/hello/hello.c:1119
 msgid "Failed to parse HELLO message: invalid expiration time\n"
 msgstr ""
 
-#: src/hello/hello.c:1127
+#: src/hello/hello.c:1129
 msgid "Failed to parse HELLO message: malformed\n"
 msgstr ""
 
-#: src/hello/hello.c:1138
+#: src/hello/hello.c:1140
 msgid "Failed to parse HELLO message: missing transport plugin\n"
 msgstr ""
 
-#: src/hello/hello.c:1156
+#: src/hello/hello.c:1158
 #, fuzzy, c-format
 msgid "Plugin `%s' not found, skipping address\n"
 msgstr "Extension « %s » introuvable\n"
 
-#: src/hello/hello.c:1164
+#: src/hello/hello.c:1166
 #, c-format
 msgid "Plugin `%s' does not support URIs yet\n"
 msgstr ""
 
-#: src/hello/hello.c:1179
+#: src/hello/hello.c:1181
 #, c-format
 msgid "Failed to parse `%s' as an address for plugin `%s'\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist.c:314
+#: src/hostlist/gnunet-daemon-hostlist.c:316
 msgid ""
 "None of the functions for the hostlist daemon were enabled.  I have no "
 "reason to run!\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist.c:374
+#: src/hostlist/gnunet-daemon-hostlist.c:376
 msgid "advertise our hostlist to other peers"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist.c:379
+#: src/hostlist/gnunet-daemon-hostlist.c:381
 msgid ""
 "bootstrap using hostlists (it is highly recommended that you always use this "
 "option)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist.c:383
+#: src/hostlist/gnunet-daemon-hostlist.c:385
 msgid "enable learning about hostlist servers from other peers"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist.c:388
+#: src/hostlist/gnunet-daemon-hostlist.c:390
 msgid "provide a hostlist server"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist.c:404
+#: src/hostlist/gnunet-daemon-hostlist.c:406
 msgid "GNUnet hostlist server and client"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:347
+#: src/hostlist/gnunet-daemon-hostlist_client.c:349
 msgid "# bytes downloaded from hostlist servers"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:368
-#: src/hostlist/gnunet-daemon-hostlist_client.c:401
+#: src/hostlist/gnunet-daemon-hostlist_client.c:370
+#: src/hostlist/gnunet-daemon-hostlist_client.c:403
 msgid "# invalid HELLOs downloaded from hostlist servers"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:371
-#: src/hostlist/gnunet-daemon-hostlist_client.c:404
+#: src/hostlist/gnunet-daemon-hostlist_client.c:373
+#: src/hostlist/gnunet-daemon-hostlist_client.c:406
 #, c-format
 msgid "Invalid `%s' message received from hostlist at `%s'\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:389
+#: src/hostlist/gnunet-daemon-hostlist_client.c:391
 msgid "# valid HELLOs downloaded from hostlist servers"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:659
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1405
+#: src/hostlist/gnunet-daemon-hostlist_client.c:661
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1407
 msgid "# advertised hostlist URIs"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:689
+#: src/hostlist/gnunet-daemon-hostlist_client.c:691
 #, c-format
 msgid "# advertised URI `%s' downloaded"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:732
+#: src/hostlist/gnunet-daemon-hostlist_client.c:734
 #, c-format
 msgid ""
 "Advertised hostlist with URI `%s' could not be downloaded. Advertised URI "
 "gets dismissed.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:860
+#: src/hostlist/gnunet-daemon-hostlist_client.c:862
 #, c-format
 msgid "Timeout trying to download hostlist from `%s'\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:874
+#: src/hostlist/gnunet-daemon-hostlist_client.c:876
 #, c-format
 msgid "Download limit of %u bytes exceeded, stopping download\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:894
+#: src/hostlist/gnunet-daemon-hostlist_client.c:896
 #, c-format
 msgid "Download of hostlist from `%s' failed: `%s'\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:900
+#: src/hostlist/gnunet-daemon-hostlist_client.c:902
 #, c-format
 msgid "Download of hostlist `%s' completed.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:908
+#: src/hostlist/gnunet-daemon-hostlist_client.c:910
 #, c-format
 msgid "Adding successfully tested hostlist `%s' datastore.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:961
+#: src/hostlist/gnunet-daemon-hostlist_client.c:963
 #, c-format
 msgid "Bootstrapping using hostlist at `%s'.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:969
+#: src/hostlist/gnunet-daemon-hostlist_client.c:971
 msgid "# hostlist downloads initiated"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1096
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1663
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1098
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1665
 msgid "# milliseconds between hostlist downloads"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1105
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1107
 #, c-format
 msgid "Have %u/%u connections.  Will consider downloading hostlist in %s\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1164
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1185
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1166
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1187
 msgid "# active connections"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1351
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1353
 #, c-format
 msgid "Loading saved hostlist entries from file `%s' \n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1356
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1358
 #, c-format
 msgid "Hostlist file `%s' does not exist\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1365
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1367
 #, c-format
 msgid "Could not open file `%s' for reading to load hostlists: %s\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1399
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1401
 #, c-format
 msgid "%u hostlist URIs loaded from file\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1402
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1404
 msgid "# hostlist URIs read from file"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1448
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1450
 #, c-format
 msgid "Could not open file `%s' for writing to save hostlists: %s\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1455
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1457
 #, c-format
 msgid "Writing %u hostlist URIs to `%s'\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1479
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1496
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1481
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1498
 #, c-format
 msgid "Error writing hostlist URIs to file `%s'\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1491
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1493
 msgid "# hostlist URIs written to file"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1593
-#: src/transport/plugin_transport_http_client.c:2272
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1595
+#: src/transport/plugin_transport_http_client.c:2274
 #, c-format
 msgid "Invalid proxy type: `%s', disabling proxy! Check configuration!\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1622
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1624
 msgid "Learning is enabled on this peer\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1636
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1638
 msgid "Learning is not enabled on this peer\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1649
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1651
 #, c-format
 msgid ""
 "Since learning is not enabled on this peer, hostlist file `%s' was removed\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:174
+#: src/hostlist/gnunet-daemon-hostlist_server.c:176
 msgid "bytes in hostlist"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:199
+#: src/hostlist/gnunet-daemon-hostlist_server.c:201
 msgid "expired addresses encountered"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:235
-#: src/hostlist/gnunet-daemon-hostlist_server.c:529
-#: src/peerinfo-tool/gnunet-peerinfo.c:383
-#: src/peerinfo-tool/gnunet-peerinfo.c:532
-#: src/topology/gnunet-daemon-topology.c:860
+#: src/hostlist/gnunet-daemon-hostlist_server.c:237
+#: src/hostlist/gnunet-daemon-hostlist_server.c:531
+#: src/peerinfo-tool/gnunet-peerinfo.c:385
+#: src/peerinfo-tool/gnunet-peerinfo.c:534
+#: src/topology/gnunet-daemon-topology.c:862
 #, c-format
 msgid "Error in communication with PEERINFO service: %s\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:259
+#: src/hostlist/gnunet-daemon-hostlist_server.c:261
 msgid "HELLOs without addresses encountered (ignored)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:276
+#: src/hostlist/gnunet-daemon-hostlist_server.c:278
 msgid "bytes not included in hostlist (size limit)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:380
+#: src/hostlist/gnunet-daemon-hostlist_server.c:382
 #, c-format
 msgid "Refusing `%s' request to hostlist server\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:383
+#: src/hostlist/gnunet-daemon-hostlist_server.c:385
 msgid "hostlist requests refused (not HTTP GET)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:395
+#: src/hostlist/gnunet-daemon-hostlist_server.c:397
 #, c-format
 msgid "Refusing `%s' request with %llu bytes of upload data\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:399
+#: src/hostlist/gnunet-daemon-hostlist_server.c:401
 msgid "hostlist requests refused (upload data)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:406
+#: src/hostlist/gnunet-daemon-hostlist_server.c:408
 msgid "Could not handle hostlist request since I do not have a response yet\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:409
+#: src/hostlist/gnunet-daemon-hostlist_server.c:411
 msgid "hostlist requests refused (not ready)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:414
+#: src/hostlist/gnunet-daemon-hostlist_server.c:416
 msgid "Received request for our hostlist\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:416
+#: src/hostlist/gnunet-daemon-hostlist_server.c:418
 msgid "hostlist requests processed"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:464
+#: src/hostlist/gnunet-daemon-hostlist_server.c:466
 msgid "# hostlist advertisements send"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:677
-#: src/transport/gnunet-service-transport.c:2813
+#: src/hostlist/gnunet-daemon-hostlist_server.c:679
+#: src/transport/gnunet-service-transport.c:2814
 msgid "Could not access PEERINFO service.  Exiting.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:689
+#: src/hostlist/gnunet-daemon-hostlist_server.c:691
 #, c-format
 msgid "Invalid port number %llu.  Exiting.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:701
+#: src/hostlist/gnunet-daemon-hostlist_server.c:703
 #, c-format
 msgid "Hostlist service starts on %s:%llu\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:716
+#: src/hostlist/gnunet-daemon-hostlist_server.c:718
 #, c-format
 msgid "Address to obtain hostlist: `%s'\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:729
+#: src/hostlist/gnunet-daemon-hostlist_server.c:731
 msgid "BINDTOIP does not a valid IPv4 address! Ignoring BINDTOIPV4.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:746
+#: src/hostlist/gnunet-daemon-hostlist_server.c:748
 msgid "BINDTOIP does not a valid IPv4 address! Ignoring BINDTOIPV6.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:767
+#: src/hostlist/gnunet-daemon-hostlist_server.c:769
 #, c-format
 msgid "`%s' is not a valid IPv4 address! Ignoring BINDTOIPV4.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:787
+#: src/hostlist/gnunet-daemon-hostlist_server.c:789
 #, c-format
 msgid "`%s' is not a valid IPv6 address! Ignoring BINDTOIPV6.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:827
+#: src/hostlist/gnunet-daemon-hostlist_server.c:829
 #, c-format
 msgid "Could not start hostlist HTTP server on port %u\n"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:177
+#: src/identity/gnunet-identity.c:179
 #, c-format
 msgid "Failed to create ego: %s\n"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:199
+#: src/identity/gnunet-identity.c:201
 #, c-format
 msgid "Failed to set default ego: %s\n"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:354
+#: src/identity/gnunet-identity.c:356
 msgid "create ego NAME"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:360
+#: src/identity/gnunet-identity.c:362
 msgid "delete ego NAME "
 msgstr ""
 
-#: src/identity/gnunet-identity.c:365
+#: src/identity/gnunet-identity.c:367
 msgid "display all egos"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:371
+#: src/identity/gnunet-identity.c:373
 msgid ""
 "set default identity to EGO for a subsystem SUBSYSTEM (use together with -s)"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:376
+#: src/identity/gnunet-identity.c:378
 msgid "run in monitor mode egos"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:382
+#: src/identity/gnunet-identity.c:384
 msgid ""
 "set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:396
+#: src/identity/gnunet-identity.c:398
 msgid "Maintain egos"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:389
+#: src/identity/gnunet-service-identity.c:391
 msgid "no default known"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:414
+#: src/identity/gnunet-service-identity.c:416
 msgid "default configured, but ego unknown (internal error)"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:505
-#: src/identity/gnunet-service-identity.c:788
-#: src/identity/gnunet-service-identity.c:916
+#: src/identity/gnunet-service-identity.c:507
+#: src/identity/gnunet-service-identity.c:790
+#: src/identity/gnunet-service-identity.c:918
 #, c-format
 msgid "Failed to write subsystem default identifier map to `%s'.\n"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:513
+#: src/identity/gnunet-service-identity.c:515
 msgid "Unknown ego specified for service (internal error)"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:608
+#: src/identity/gnunet-service-identity.c:610
 msgid "identifier already in use for another ego"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:763
+#: src/identity/gnunet-service-identity.c:765
 msgid "target name already exists"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:806
-#: src/identity/gnunet-service-identity.c:934
+#: src/identity/gnunet-service-identity.c:808
+#: src/identity/gnunet-service-identity.c:936
 msgid "no matching ego found"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:969
+#: src/identity/gnunet-service-identity.c:971
 #, c-format
 msgid "Failed to parse ego information in `%s'\n"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:1027
+#: src/identity/gnunet-service-identity.c:1029
 #, c-format
 msgid "Failed to parse subsystem identity configuration file `%s'\n"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:1037
+#: src/identity/gnunet-service-identity.c:1039
 #, c-format
 msgid "Failed to create directory `%s' for storing egos\n"
 msgstr ""
 
-#: src/json/json.c:121
+#: src/json/json.c:123
 #, fuzzy, c-format
 msgid "Failed to parse JSON in option `%s': %s (%s)\n"
 msgstr "Résolution de « %s » échouée : %s\n"
 
-#: src/multicast/gnunet-multicast.c:46 src/multicast/gnunet-multicast.c:70
-msgid "This command doesn't do anything yet."
-msgstr ""
-
-#: src/my/my.c:194 src/my/my.c:213
+#: src/my/my.c:196 src/my/my.c:215
 #, c-format
 msgid "%s failed at %s:%d with error: %s\n"
 msgstr ""
 
-#: src/mysql/mysql.c:178
+#: src/mysql/mysql.c:180
 #, c-format
 msgid "Trying to use file `%s' for MySQL configuration.\n"
 msgstr ""
 
-#: src/mysql/mysql.c:185
+#: src/mysql/mysql.c:187
 #, c-format
 msgid "Could not access file `%s': %s\n"
 msgstr ""
 
-#: src/namecache/gnunet-namecache.c:105
+#: src/namecache/gnunet-namecache.c:107
 #, c-format
 msgid "No records found for `%s'"
 msgstr ""
 
-#: src/namecache/gnunet-namecache.c:120 src/namestore/gnunet-namestore.c:424
+#: src/namecache/gnunet-namecache.c:122 src/namestore/gnunet-namestore.c:454
 #, c-format
 msgid "\tCorrupt or unsupported record of type %u\n"
 msgstr ""
 
-#: src/namecache/gnunet-namecache.c:181
+#: src/namecache/gnunet-namecache.c:183
 #, c-format
 msgid "You must specify which zone should be accessed\n"
 msgstr ""
 
-#: src/namecache/gnunet-namecache.c:191
+#: src/namecache/gnunet-namecache.c:193
 #, fuzzy, c-format
 msgid "Invalid public key for zone `%s'\n"
 msgstr "fornat invalide : « %s »\n"
 
-#: src/namecache/gnunet-namecache.c:199
+#: src/namecache/gnunet-namecache.c:201
 #, c-format
 msgid "You must specify a name\n"
 msgstr ""
 
-#: src/namecache/gnunet-namecache.c:230 src/namestore/gnunet-namestore.c:1290
+#: src/namecache/gnunet-namecache.c:232 src/namestore/gnunet-namestore.c:1575
 msgid "name of the record to add/delete/display"
 msgstr ""
 
-#: src/namecache/gnunet-namecache.c:236
+#: src/namecache/gnunet-namecache.c:238
 msgid "spezifies the public key of the zone to look in"
 msgstr ""
 
-#: src/namecache/gnunet-namecache.c:248 src/namestore/gnunet-namestore.c:1342
+#: src/namecache/gnunet-namecache.c:250 src/namestore/gnunet-namestore.c:1632
 msgid "GNUnet zone manipulation tool"
 msgstr ""
 
-#: src/namecache/namecache_api.c:294
+#: src/namecache/namecache_api.c:296
 msgid "Namecache failed to cache block"
 msgstr ""
 
-#: src/namecache/namecache_api.c:381
+#: src/namecache/namecache_api.c:383
 msgid "Error communicating with namecache service"
 msgstr ""
 
-#: src/namecache/plugin_namecache_flat.c:119
-#: src/namecache/plugin_namecache_flat.c:253
-#: src/namestore/plugin_namestore_heap.c:146
-#: src/namestore/plugin_namestore_heap.c:393
-#: src/peerstore/plugin_peerstore_flat.c:377
-#: src/peerstore/plugin_peerstore_flat.c:536
+#: src/namecache/plugin_namecache_flat.c:121
+#: src/namecache/plugin_namecache_flat.c:255
+#: src/namestore/plugin_namestore_heap.c:148
+#: src/namestore/plugin_namestore_heap.c:395
+#: src/peerstore/plugin_peerstore_flat.c:379
+#: src/peerstore/plugin_peerstore_flat.c:538
 #, c-format
 msgid "Unable to initialize file: %s.\n"
 msgstr ""
 
-#: src/namecache/plugin_namecache_flat.c:130
-#: src/namestore/plugin_namestore_heap.c:157
-#: src/peerstore/plugin_peerstore_flat.c:392
+#: src/namecache/plugin_namecache_flat.c:132
+#: src/namestore/plugin_namestore_heap.c:159
+#: src/peerstore/plugin_peerstore_flat.c:394
 #, c-format
 msgid "Unable to get filesize: %s.\n"
 msgstr ""
 
-#: src/namecache/plugin_namecache_flat.c:149
-#: src/namestore/plugin_namestore_heap.c:170
-#: src/peerstore/plugin_peerstore_flat.c:404
+#: src/namecache/plugin_namecache_flat.c:151
+#: src/namestore/plugin_namestore_heap.c:172
+#: src/peerstore/plugin_peerstore_flat.c:406
 #, fuzzy, c-format
 msgid "Unable to read file: %s.\n"
 msgstr "Résolution de « %s » échouée\n"
 
-#: src/namecache/plugin_namecache_flat.c:408
+#: src/namecache/plugin_namecache_flat.c:410
 msgid "flat plugin running\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:311
+#: src/namecache/plugin_namecache_sqlite.c:183
+#: src/namecache/plugin_namecache_sqlite.c:197
+#: src/namestore/plugin_namestore_sqlite.c:219
+#: src/namestore/plugin_namestore_sqlite.c:230
+#, fuzzy, c-format
+msgid "Failed to setup database at `%s'\n"
+msgstr "Échec du démarrage de %s\n"
+
+#: src/namestore/gnunet-namestore.c:341
 #, c-format
 msgid "Adding record failed: %s\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:341
+#: src/namestore/gnunet-namestore.c:371
 #, c-format
 msgid "Deleting record failed, record does not exist%s%s\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:348
+#: src/namestore/gnunet-namestore.c:378
 #, c-format
 msgid "Deleting record failed%s%s\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:628 src/namestore/gnunet-namestore.c:636
+#: src/namestore/gnunet-namestore.c:660 src/namestore/gnunet-namestore.c:668
 #, c-format
 msgid "A %s record exists already under `%s', no other records can be added.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:650 src/namestore/gnunet-namestore.c:662
+#: src/namestore/gnunet-namestore.c:682 src/namestore/gnunet-namestore.c:694
 #, c-format
 msgid "Records already exist under `%s', cannot add `%s' record.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:675
+#: src/namestore/gnunet-namestore.c:707
 #, c-format
 msgid ""
 "Non-GNS2DNS records already exist under `%s', cannot add GNS2DNS record.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:809
+#: src/namestore/gnunet-namestore.c:837
 #, c-format
 msgid "There are no records under label `%s' that could be deleted.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:850
+#: src/namestore/gnunet-namestore.c:878
 #, c-format
 msgid ""
 "There are no records under label `%s' that match the request for deletion.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:902
+#: src/namestore/gnunet-namestore.c:965
+#, fuzzy, c-format
+msgid "Failed to replace records: %s\n"
+msgstr "Résolution de « %s » échouée : %s\n"
+
+#: src/namestore/gnunet-namestore.c:1009
 #, c-format
 msgid "No options given\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:921 src/namestore/gnunet-namestore.c:930
-#: src/namestore/gnunet-namestore.c:949 src/namestore/gnunet-namestore.c:972
-#: src/namestore/gnunet-namestore.c:1026
+#: src/namestore/gnunet-namestore.c:1032 src/namestore/gnunet-namestore.c:1065
+#: src/namestore/gnunet-namestore.c:1074 src/namestore/gnunet-namestore.c:1093
+#: src/namestore/gnunet-namestore.c:1116 src/namestore/gnunet-namestore.c:1148
 #, c-format
 msgid "Missing option `%s' for operation `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:922 src/namestore/gnunet-namestore.c:931
-#: src/namestore/gnunet-namestore.c:950 src/namestore/gnunet-namestore.c:974
+#: src/namestore/gnunet-namestore.c:1033
+msgid "replace"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1066 src/namestore/gnunet-namestore.c:1075
+#: src/namestore/gnunet-namestore.c:1094 src/namestore/gnunet-namestore.c:1118
 msgid "add"
 msgstr "ajouter"
 
-#: src/namestore/gnunet-namestore.c:940
+#: src/namestore/gnunet-namestore.c:1084
 #, c-format
 msgid "Unsupported type `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:962
+#: src/namestore/gnunet-namestore.c:1106
 #, c-format
 msgid "Value `%s' invalid for record type `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1007
+#: src/namestore/gnunet-namestore.c:1129
 #, c-format
 msgid "Invalid time format `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1027
+#: src/namestore/gnunet-namestore.c:1149
 msgid "del"
 msgstr "supprimer"
 
-#: src/namestore/gnunet-namestore.c:1070
+#: src/namestore/gnunet-namestore.c:1192
 #, c-format
 msgid "Invalid public key for reverse lookup `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1099
-#: src/peerinfo-tool/gnunet-peerinfo.c:773
+#: src/namestore/gnunet-namestore.c:1221
+#: src/peerinfo-tool/gnunet-peerinfo.c:775
 #, c-format
 msgid "Invalid URI `%s'\n"
 msgstr "URI invalide « %s »\n"
 
-#: src/namestore/gnunet-namestore.c:1134
+#: src/namestore/gnunet-namestore.c:1249
 #, c-format
 msgid "Invalid nick `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1174
+#: src/namestore/gnunet-namestore.c:1289
 #, c-format
 msgid "No default ego configured in identity service\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1238
+#: src/namestore/gnunet-namestore.c:1341
+#, c-format
+msgid "Superfluous command line arguments (starting with `%s') ignored\n"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1357
 #, c-format
 msgid "Cannot connect to identity service\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1263
+#: src/namestore/gnunet-namestore.c:1407
+msgid "Empty record line argument is not allowed.\n"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1423
+#, c-format
+msgid "Invalid expiration time `%s' (must be without unit)\n"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1435 src/namestore/gnunet-namestore.c:1453
+#: src/namestore/gnunet-namestore.c:1470
+#, c-format
+msgid "Missing entries in record line `%s'.\n"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1444
+#, fuzzy, c-format
+msgid "Unknown record type `%s'\n"
+msgstr "Commande « %s » inconnue\n"
+
+#: src/namestore/gnunet-namestore.c:1484
+#, fuzzy, c-format
+msgid "Invalid record data for type %s: `%s'.\n"
+msgstr "fornat invalide : « %s »\n"
+
+#: src/namestore/gnunet-namestore.c:1548
 msgid "add record"
 msgstr "ajouter un enregistrement"
 
-#: src/namestore/gnunet-namestore.c:1267
+#: src/namestore/gnunet-namestore.c:1552
 msgid "delete record"
 msgstr "suprimer un enregistrement"
 
-#: src/namestore/gnunet-namestore.c:1271
+#: src/namestore/gnunet-namestore.c:1556
 msgid "display records"
 msgstr "afficher les enregistrements"
 
-#: src/namestore/gnunet-namestore.c:1276
+#: src/namestore/gnunet-namestore.c:1561
 msgid ""
 "expiration time for record to use (for adding only), \"never\" is possible"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1281
+#: src/namestore/gnunet-namestore.c:1566
 msgid "set the desired nick name for the zone"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1285
+#: src/namestore/gnunet-namestore.c:1570
 msgid "monitor changes in the namestore"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1295
+#: src/namestore/gnunet-namestore.c:1580
 msgid "determine our name for the given PKEY"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1300
+#: src/namestore/gnunet-namestore.c:1585
+msgid ""
+"set record set to values given by (possibly multiple) RECORDLINES; can be "
+"specified multiple times"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1590
 msgid "type of the record to add/delete/display"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1305
+#: src/namestore/gnunet-namestore.c:1595
 msgid "URI to import into our zone"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1310
+#: src/namestore/gnunet-namestore.c:1600
 msgid "value of the record to add/delete"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1314
+#: src/namestore/gnunet-namestore.c:1604
 msgid "create or list public record"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1318
+#: src/namestore/gnunet-namestore.c:1608
 msgid ""
 "create shadow record (only valid if all other records of the same type have "
 "expired"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1323
+#: src/namestore/gnunet-namestore.c:1613
 msgid "name of the ego controlling the zone"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:547
+#: src/namestore/gnunet-namestore-fcfsd.c:549
 #, c-format
 msgid "Unsupported form value `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:574
+#: src/namestore/gnunet-namestore-fcfsd.c:576
 #, c-format
 msgid "Failed to create record for domain `%s': %s\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:595
+#: src/namestore/gnunet-namestore-fcfsd.c:597
 msgid "Error when mapping zone to name\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:627
+#: src/namestore/gnunet-namestore-fcfsd.c:629
 #, c-format
 msgid "Found existing name `%s' for the given key\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:687
+#: src/namestore/gnunet-namestore-fcfsd.c:689
 #, c-format
 msgid "Found %u existing records for domain `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:775
+#: src/namestore/gnunet-namestore-fcfsd.c:777
 #, c-format
 msgid "Failed to create page for `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:794
+#: src/namestore/gnunet-namestore-fcfsd.c:796
 #, c-format
 msgid "Failed to setup post processor for `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:830
+#: src/namestore/gnunet-namestore-fcfsd.c:832
 msgid "Domain name must not contain `.'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:839
+#: src/namestore/gnunet-namestore-fcfsd.c:841
 msgid "Domain name must not contain `+'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1069
+#: src/namestore/gnunet-namestore-fcfsd.c:1071
 msgid "No ego configured for `fcfsd` subsystem\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1097
+#: src/namestore/gnunet-namestore-fcfsd.c:1099
 msgid "Failed to start HTTP server\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1145
+#: src/namestore/gnunet-namestore-fcfsd.c:1147
 msgid "Failed to connect to identity\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1171
+#: src/namestore/gnunet-namestore-fcfsd.c:1173
 msgid "name of the zone that is to be managed by FCFSD"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1190
+#: src/namestore/gnunet-namestore-fcfsd.c:1192
 msgid "GNU Name System First Come First Serve name registration service"
 msgstr ""
 
-#: src/namestore/gnunet-service-namestore.c:749
+#: src/namestore/gnunet-service-namestore.c:900
 #, c-format
 msgid "Failed to replicate block in namecache: %s\n"
 msgstr ""
 
-#: src/namestore/gnunet-zoneimport.c:2036
+#: src/namestore/gnunet-zoneimport.c:2038
 msgid "size to use for the main hash map"
 msgstr ""
 
-#: src/namestore/gnunet-zoneimport.c:2041
+#: src/namestore/gnunet-zoneimport.c:2043
 msgid "minimum expiration time we assume for imported records"
 msgstr ""
 
-#: src/namestore/namestore_api.c:389
+#: src/namestore/namestore_api.c:391
 msgid "Namestore failed to store record\n"
 msgstr ""
 
-#: src/namestore/plugin_namestore_heap.c:776
+#: src/namestore/plugin_namestore_heap.c:778
 msgid "heap file database running\n"
 msgstr ""
 
-#: src/namestore/plugin_namestore_sqlite.c:216
-#: src/namestore/plugin_namestore_sqlite.c:227
-#, fuzzy, c-format
-msgid "Failed to setup database at `%s'\n"
-msgstr "Échec du démarrage de %s\n"
-
-#: src/nat-auto/gnunet-nat-auto.c:191
+#: src/nat-auto/gnunet-nat-auto.c:193
 msgid "Suggested configuration changes:\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:217
+#: src/nat-auto/gnunet-nat-auto.c:219
 #, fuzzy, c-format
 msgid "Failed to write configuration to `%s'\n"
 msgstr "fornat invalide : « %s »\n"
 
-#: src/nat-auto/gnunet-nat-auto.c:224
+#: src/nat-auto/gnunet-nat-auto.c:226
 #, c-format
 msgid "Wrote updated configuration to `%s'\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:343
+#: src/nat-auto/gnunet-nat-auto.c:345
 #, fuzzy
 msgid "run autoconfiguration"
 msgstr "fornat invalide : « %s »\n"
 
-#: src/nat-auto/gnunet-nat-auto.c:349
+#: src/nat-auto/gnunet-nat-auto.c:351
 msgid "section name providing the configuration for the adapter"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:354 src/nat/gnunet-nat.c:451
+#: src/nat-auto/gnunet-nat-auto.c:356 src/nat/gnunet-nat.c:459
 msgid "use TCP"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:359 src/nat/gnunet-nat.c:456
+#: src/nat-auto/gnunet-nat-auto.c:361 src/nat/gnunet-nat.c:464
 msgid "use UDP"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:364
+#: src/nat-auto/gnunet-nat-auto.c:366
 msgid "write configuration file (for autoconfiguration)"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:376
+#: src/nat-auto/gnunet-nat-auto.c:378
 msgid "GNUnet NAT traversal autoconfiguration"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto_legacy.c:401
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:679
-#: src/nat-auto/nat_auto_api_test.c:403
+#: src/nat-auto/gnunet-nat-auto_legacy.c:403
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:681
+#: src/nat-auto/nat_auto_api_test.c:409
 msgid "Failed to connect to `gnunet-nat-server'\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto_legacy.c:516
+#: src/nat-auto/gnunet-nat-auto_legacy.c:518
 #, c-format
 msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto_legacy.c:566
-#: src/nat-auto/nat_auto_api_test.c:569
+#: src/nat-auto/gnunet-nat-auto_legacy.c:568
+#: src/nat-auto/nat_auto_api_test.c:575
 msgid "NAT test failed to start NAT library\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto.c:340
+#: src/nat-auto/gnunet-service-nat-auto.c:342
 msgid "UPnP client `upnpc` command not found, disabling UPnP\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:383
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:385
 msgid "NAT traversal with ICMP Server succeeded.\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:384
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:386
 msgid "NAT traversal with ICMP Server failed.\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:403
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:405
 msgid "Testing connection reversal with ICMP server.\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:435
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:437
 #, c-format
 msgid "Detected external IP `%s'\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:570
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:572
 msgid "This system has a global IPv6 address, setting IPv6 to supported.\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:588
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:590
 #, c-format
 msgid "Detected internal network address `%s'.\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:722
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:724
 msgid "upnpc found, enabling its use\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:723
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:725
 msgid "upnpc not found\n"
 msgstr "upnpc introuvable\n"
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:760
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:762
 msgid "test_icmp_server not possible, as we have no public IPv4 address\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:772
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:832
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:774
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:834
 msgid "test_icmp_server not possible, as we are not behind NAT\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:784
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:844
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:786
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:846
 msgid "No working gnunet-helper-nat-server found\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:821
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:823
 msgid "test_icmp_client not possible, as we have no internal IPv4 address\n"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:74
+#: src/nat-auto/nat_auto_api.c:76
 msgid "Operation Successful"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:76
+#: src/nat-auto/nat_auto_api.c:78
 msgid "IPC failure"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:78
+#: src/nat-auto/nat_auto_api.c:80
 msgid "Failure in network subsystem, check permissions."
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:80
+#: src/nat-auto/nat_auto_api.c:82
 msgid "Encountered timeout while performing operation"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:82
+#: src/nat-auto/nat_auto_api.c:84
 msgid "detected that we are offline"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:84
+#: src/nat-auto/nat_auto_api.c:86
 msgid "`upnpc` command not found"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:86
+#: src/nat-auto/nat_auto_api.c:88
 msgid "Failed to run `upnpc` command"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:88
+#: src/nat-auto/nat_auto_api.c:90
 msgid "`upnpc' command took too long, process killed"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:90
+#: src/nat-auto/nat_auto_api.c:92
 msgid "`upnpc' command failed to establish port mapping"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:92
+#: src/nat-auto/nat_auto_api.c:94
 msgid "`external-ip' command not found"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:94
+#: src/nat-auto/nat_auto_api.c:96
 msgid "Failed to run `external-ip` command"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:96
+#: src/nat-auto/nat_auto_api.c:98
 msgid "`external-ip' command output invalid"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:98
+#: src/nat-auto/nat_auto_api.c:100
 msgid "no valid address was returned by `external-ip'"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:100
+#: src/nat-auto/nat_auto_api.c:102
 msgid "Could not determine interface with internal/local network address"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:102
+#: src/nat-auto/nat_auto_api.c:104
 msgid "No functioning gnunet-helper-nat-server installation found"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:104
+#: src/nat-auto/nat_auto_api.c:106
 msgid "NAT test could not be initialized"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:106
+#: src/nat-auto/nat_auto_api.c:108
 msgid "NAT test timeout reached"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:108
+#: src/nat-auto/nat_auto_api.c:110
 msgid "could not register NAT"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:110
+#: src/nat-auto/nat_auto_api.c:112
 msgid "No working gnunet-helper-nat-client installation found"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api_test.c:475
+#: src/nat-auto/nat_auto_api_test.c:481
 #, fuzzy, c-format
 msgid "Failed to find valid PORT in section `%s'\n"
 msgstr "Résolution de « %s » échouée : %s\n"
 
-#: src/nat-auto/nat_auto_api_test.c:520
+#: src/nat-auto/nat_auto_api_test.c:526
 #, fuzzy, c-format
 msgid "Failed to create socket bound to `%s' for NAT test: %s\n"
 msgstr "Résolution de « %s » échouée : %s\n"
 
-#: src/nat/gnunet-nat.c:429
+#: src/nat/gnunet-nat.c:437
 msgid "which IP and port are we locally using to bind/listen to"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:435
+#: src/nat/gnunet-nat.c:443
 msgid "which remote IP and port should be asked for connection reversal"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:441
+#: src/nat/gnunet-nat.c:449
 msgid ""
 "name of configuration section to find additional options, such as manual "
 "host punching data"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:446
+#: src/nat/gnunet-nat.c:454
 msgid "enable STUN processing"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:461
+#: src/nat/gnunet-nat.c:469
 msgid "watch for connection reversal requests"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:473
+#: src/nat/gnunet-nat.c:481
 msgid "GNUnet NAT traversal autoconfigure daemon"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1337
+#: src/nat/gnunet-service-nat.c:1339
 #, c-format
 msgid "Malformed punched hole specification `%s' (lacks port)\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1347
+#: src/nat/gnunet-service-nat.c:1349
 #, c-format
 msgid "Invalid port number in punched hole specification `%s' (lacks port)\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1363
+#: src/nat/gnunet-service-nat.c:1365
 #, c-format
 msgid "Malformed punched hole specification `%s' (lacks `]')\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1374
+#: src/nat/gnunet-service-nat.c:1376
 #, c-format
 msgid "Malformed punched hole specification `%s' (IPv6 address invalid)"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1839
+#: src/nat/gnunet-service-nat.c:1841
 msgid "Connection reversal request failed\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1912
+#: src/nat/gnunet-service-nat.c:1914
 msgid ""
 "UPnP enabled in configuration, but UPnP client `upnpc` command not found, "
 "disabling UPnP\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat_helper.c:184
+#: src/nat/gnunet-service-nat_helper.c:186
 #, c-format
 msgid "gnunet-helper-nat-server generated malformed address `%s'\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat_helper.c:271
+#: src/nat/gnunet-service-nat_helper.c:273
 #, c-format
 msgid "Failed to start %s\n"
 msgstr "Échec du démarrage de %s\n"
 
-#: src/nat/gnunet-service-nat_mini.c:194
+#: src/nat/gnunet-service-nat_mini.c:196
 msgid "`external-ip' command not found\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat_mini.c:654
+#: src/nat/gnunet-service-nat_mini.c:656
 msgid "`upnpc' command not found\n"
 msgstr ""
 
-#: src/nse/gnunet-nse.c:120
+#: src/nse/gnunet-nse.c:122
 msgid "Show network size estimates from NSE service."
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:847
+#: src/nse/gnunet-nse-profiler.c:849
 msgid "limit to the number of connections to NSE services, 0 for none"
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:852
+#: src/nse/gnunet-nse-profiler.c:854
 msgid "name of the file for writing connection information and statistics"
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:864
+#: src/nse/gnunet-nse-profiler.c:866
 msgid "name of the file for writing the main results"
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:871
+#: src/nse/gnunet-nse-profiler.c:873
 msgid "Number of peers to run in each round, separated by commas"
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:882
+#: src/nse/gnunet-nse-profiler.c:884
 msgid "delay between rounds"
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:891
+#: src/nse/gnunet-nse-profiler.c:893
 msgid "Measure quality and performance of the NSE service."
 msgstr ""
 
-#: src/nse/gnunet-service-nse.c:1532
-#: src/revocation/gnunet-service-revocation.c:841 src/util/gnunet-scrypt.c:274
+#: src/nse/gnunet-service-nse.c:1534
+#: src/revocation/gnunet-service-revocation.c:843 src/util/gnunet-scrypt.c:276
 msgid "Value is too large.\n"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:176
+#: src/peerinfo/gnunet-service-peerinfo.c:178
 #, c-format
 msgid "Removing expired address of transport `%s'\n"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:311
+#: src/peerinfo/gnunet-service-peerinfo.c:313
 #, c-format
 msgid "Failed to parse HELLO in file `%s': %s\n"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:332
-#: src/peerinfo/gnunet-service-peerinfo.c:363
+#: src/peerinfo/gnunet-service-peerinfo.c:334
+#: src/peerinfo/gnunet-service-peerinfo.c:365
 #, c-format
 msgid "Failed to parse HELLO in file `%s'\n"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:447
+#: src/peerinfo/gnunet-service-peerinfo.c:449
 msgid "# peers known"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:490
+#: src/peerinfo/gnunet-service-peerinfo.c:492
 #, c-format
 msgid ""
 "File `%s' in directory `%s' does not match naming convention. Removed.\n"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:657
+#: src/peerinfo/gnunet-service-peerinfo.c:659
 #, c-format
 msgid "Scanning directory `%s'\n"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:665
+#: src/peerinfo/gnunet-service-peerinfo.c:667
 #, c-format
 msgid "Still no peers found in `%s'!\n"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:1098
+#: src/peerinfo/gnunet-service-peerinfo.c:1100
 #, c-format
 msgid "Cleaning up directory `%s'\n"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:1436
+#: src/peerinfo/gnunet-service-peerinfo.c:1438
 #, c-format
 msgid "Importing HELLOs from `%s'\n"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:1449
+#: src/peerinfo/gnunet-service-peerinfo.c:1451
 msgid "Skipping import of included HELLOs\n"
 msgstr ""
 
-#: src/peerinfo/peerinfo_api.c:218
+#: src/peerinfo/peerinfo_api.c:220
 msgid "Failed to receive response from `PEERINFO' service."
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:237
+#: src/peerinfo-tool/gnunet-peerinfo.c:239
 #, c-format
 msgid "%sPeer `%s'\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:244
+#: src/peerinfo-tool/gnunet-peerinfo.c:246
 #, c-format
 msgid "\tExpires: %s \t %s\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:297
-#: src/rest-plugins/plugin_rest_peerinfo.c:499
+#: src/peerinfo-tool/gnunet-peerinfo.c:299
+#: src/rest-plugins/plugin_rest_peerinfo.c:501
 #, c-format
 msgid "Failure: Cannot convert address to string for peer `%s'\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:464
+#: src/peerinfo-tool/gnunet-peerinfo.c:466
 #, c-format
 msgid "Failure: Received invalid %s\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:478
+#: src/peerinfo-tool/gnunet-peerinfo.c:480
 #, c-format
 msgid "Failed to write HELLO with %u bytes to file `%s'\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:497
+#: src/peerinfo-tool/gnunet-peerinfo.c:499
 #, c-format
 msgid "Wrote %s HELLO containing %u addresses with %u bytes to file `%s'\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:797
+#: src/peerinfo-tool/gnunet-peerinfo.c:799
 #, c-format
 msgid "I am peer `%s'.\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:841
+#: src/peerinfo-tool/gnunet-peerinfo.c:843
 msgid "don't resolve host names"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:846
+#: src/peerinfo-tool/gnunet-peerinfo.c:848
 msgid "output only the identity strings"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:850
+#: src/peerinfo-tool/gnunet-peerinfo.c:852
 msgid "include friend-only information"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:855
+#: src/peerinfo-tool/gnunet-peerinfo.c:857
 msgid "output our own identity only"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:860
+#: src/peerinfo-tool/gnunet-peerinfo.c:862
 msgid "list all known peers"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:866
+#: src/peerinfo-tool/gnunet-peerinfo.c:868
 msgid "dump hello to file"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:871
+#: src/peerinfo-tool/gnunet-peerinfo.c:873
 msgid "also output HELLO uri(s)"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:877
+#: src/peerinfo-tool/gnunet-peerinfo.c:879
 msgid "add given HELLO uri to the database"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:895
+#: src/peerinfo-tool/gnunet-peerinfo.c:897
 msgid "Print information about peers."
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:103
-#: src/transport/gnunet-service-transport_plugins.c:166
+#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:105
+#: src/transport/gnunet-service-transport_plugins.c:168
 #, c-format
 msgid "Starting transport plugins `%s'\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:107
-#: src/transport/gnunet-service-transport_plugins.c:171
+#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:109
+#: src/transport/gnunet-service-transport_plugins.c:173
 #, c-format
 msgid "Loading `%s' transport plugin\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:127
-#: src/transport/gnunet-service-transport_plugins.c:206
+#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:129
+#: src/transport/gnunet-service-transport_plugins.c:208
 #, c-format
 msgid "Failed to load transport plugin for `%s'\n"
 msgstr ""
 
-#: src/peerstore/gnunet-peerstore.c:89
+#: src/peerstore/gnunet-peerstore.c:91
 msgid "peerstore"
 msgstr ""
 
-#: src/peerstore/gnunet-service-peerstore.c:596
+#: src/peerstore/gnunet-service-peerstore.c:598
 #, fuzzy, c-format
 msgid "Could not load database backend `%s'\n"
 msgstr "Impossible d’ouvrir « %s ».\n"
 
-#: src/peerstore/peerstore_api.c:348
-msgid "timeout"
-msgstr ""
-
-#: src/peerstore/peerstore_api.c:564 src/peerstore/peerstore_api.c:613
+#: src/peerstore/peerstore_api.c:532 src/peerstore/peerstore_api.c:581
 msgid "Unexpected iteration response, this should not happen.\n"
 msgstr ""
 
-#: src/peerstore/peerstore_api.c:627
+#: src/peerstore/peerstore_api.c:595
 msgid "Received a malformed response from service."
 msgstr ""
 
-#: src/peerstore/peerstore_api.c:776
+#: src/peerstore/peerstore_api.c:731
 msgid "Received a watch result for a non existing watch.\n"
 msgstr ""
 
-#: src/peerstore/plugin_peerstore_sqlite.c:451
-#: src/psycstore/plugin_psycstore_sqlite.c:280
+#: src/peerstore/plugin_peerstore_sqlite.c:453
 #, c-format
 msgid ""
 "Error executing SQL query: %s\n"
 "  %s\n"
 msgstr ""
 
-#: src/peerstore/plugin_peerstore_sqlite.c:486
-#: src/psycstore/plugin_psycstore_mysql.c:248
-#: src/psycstore/plugin_psycstore_sqlite.c:257
+#: src/peerstore/plugin_peerstore_sqlite.c:488
 #, c-format
 msgid ""
 "Error preparing SQL query: %s\n"
 "  %s\n"
 msgstr ""
 
-#: src/peerstore/plugin_peerstore_sqlite.c:568
+#: src/peerstore/plugin_peerstore_sqlite.c:570
 #, c-format
 msgid "Unable to create indices: %s.\n"
 msgstr ""
 
-#: src/pq/pq_prepare.c:82
+#: src/pq/pq_prepare.c:84
 #, c-format
 msgid "PQprepare (`%s' as `%s') failed with error: %s\n"
 msgstr ""
 
-#: src/psycstore/gnunet-service-psycstore.c:247
-msgid "Failed to store membership information!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:269
-msgid "Failed to test membership!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:298
-#, fuzzy
-msgid "Dropping invalid fragment\n"
-msgstr "Argument invalide « %s »\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:309
-#, fuzzy
-msgid "Failed to store fragment\n"
-msgstr "Échec du démarrage de %s\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:366
-msgid "Failed to get fragment!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:432
-msgid "Failed to get message!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:462
-msgid "Failed to get message fragment!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:492
-msgid "Failed to get master counters!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:673
-#, fuzzy, c-format
-msgid "Failed to begin modifying state: %d\n"
-msgstr "Échec du démarrage de %s\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:683
-#, fuzzy, c-format
-msgid "Failed to modify state: %d\n"
-msgstr "Échec du démarrage de %s\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:691
-msgid "Failed to end modifying state!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:728
-msgid "Tried to set invalid state variable name!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:742
-msgid "Failed to begin synchronizing state!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:759
-msgid "Failed to end synchronizing state!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:777
-#: src/psycstore/gnunet-service-psycstore.c:793
-msgid "Failed to reset state!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:822
-#: src/psycstore/gnunet-service-psycstore.c:879
-msgid "Tried to get invalid state variable name!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:849
-#: src/psycstore/gnunet-service-psycstore.c:894
-msgid "Failed to get state variable!\n"
-msgstr ""
-
-#: src/psycstore/plugin_psycstore_mysql.c:279
-#, fuzzy
-msgid "Unable to initialize Mysql.\n"
-msgstr "Résolution de « %s » échouée\n"
-
-#: src/psycstore/plugin_psycstore_mysql.c:289
-#, fuzzy, c-format
-msgid "Failed to run SQL statement `%s'\n"
-msgstr "Échec du démarrage de %s\n"
-
-#: src/psycstore/plugin_psycstore_sqlite.c:59
-#, c-format
-msgid "`%s' failed at %s:%d with error: %s (%d)\n"
-msgstr ""
-
-#: src/psycstore/plugin_psycstore_sqlite.c:1922
-msgid "SQLite database running\n"
-msgstr ""
-
-#: src/pt/gnunet-daemon-pt.c:421
+#: src/pt/gnunet-daemon-pt.c:423
 msgid "Failed to pack DNS request.  Dropping.\n"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:427
+#: src/pt/gnunet-daemon-pt.c:429
 msgid "# DNS requests mapped to VPN"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:481
+#: src/pt/gnunet-daemon-pt.c:483
 msgid "# DNS records modified"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:665
+#: src/pt/gnunet-daemon-pt.c:667
 msgid "# DNS replies intercepted"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:672
+#: src/pt/gnunet-daemon-pt.c:674
 msgid "Failed to parse DNS request.  Dropping.\n"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:710
+#: src/pt/gnunet-daemon-pt.c:712
 msgid "# DNS requests dropped (timeout)"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:766
+#: src/pt/gnunet-daemon-pt.c:768
 msgid "# DNS requests intercepted"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:771
+#: src/pt/gnunet-daemon-pt.c:773
 msgid "# DNS requests dropped (DNS cadet channel down)"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:779
+#: src/pt/gnunet-daemon-pt.c:781
 msgid "# DNS requests dropped (malformed)"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:874
+#: src/pt/gnunet-daemon-pt.c:876
 msgid "# DNS replies received"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:891
+#: src/pt/gnunet-daemon-pt.c:893
 msgid "# DNS replies dropped (too late?)"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:1217 src/pt/gnunet-daemon-pt.c:1226
-#: src/pt/gnunet-daemon-pt.c:1242 src/pt/gnunet-daemon-pt.c:1251
-#: src/pt/gnunet-daemon-pt.c:1260
+#: src/pt/gnunet-daemon-pt.c:1219 src/pt/gnunet-daemon-pt.c:1228
+#: src/pt/gnunet-daemon-pt.c:1244 src/pt/gnunet-daemon-pt.c:1253
+#: src/pt/gnunet-daemon-pt.c:1262
 #, c-format
 msgid "Failed to connect to %s service.  Exiting.\n"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:1305
+#: src/pt/gnunet-daemon-pt.c:1307
 msgid "Daemon to run to perform IP protocol translation to GNUnet"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:465
+#: src/reclaim/gnunet-reclaim.c:467
 #, c-format
 msgid "Ego is required\n"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:473
+#: src/reclaim/gnunet-reclaim.c:475
 #, c-format
 msgid "Attribute value missing!\n"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:481
+#: src/reclaim/gnunet-reclaim.c:483
 #, c-format
 msgid "Requesting party key is required!\n"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:504
+#: src/reclaim/gnunet-reclaim.c:506
 msgid "Add attribute"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:510
+#: src/reclaim/gnunet-reclaim.c:512
 msgid "Attribute value"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:515
+#: src/reclaim/gnunet-reclaim.c:517
 msgid "Ego"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:520
+#: src/reclaim/gnunet-reclaim.c:522
 msgid "Audience (relying party)"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:524
+#: src/reclaim/gnunet-reclaim.c:526
 msgid "List attributes for Ego"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:529
+#: src/reclaim/gnunet-reclaim.c:531
 msgid "Issue a ticket"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:534
+#: src/reclaim/gnunet-reclaim.c:536
 msgid "Consume a ticket"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:539
+#: src/reclaim/gnunet-reclaim.c:541
 msgid "Revoke a ticket"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:544
+#: src/reclaim/gnunet-reclaim.c:546
 msgid "Type of attribute"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:549
+#: src/reclaim/gnunet-reclaim.c:551
 msgid "Expiration interval of the attribute"
 msgstr ""
 
-#: src/reclaim/reclaim_api.c:434
+#: src/reclaim/reclaim_api.c:436
 #, fuzzy
 msgid "failed to store record\n"
 msgstr "Échec du démarrage de %s\n"
 
-#: src/regex/gnunet-daemon-regexprofiler.c:265
+#: src/regex/gnunet-daemon-regexprofiler.c:267
 #, c-format
 msgid "%s service is lacking key configuration settings (%s).  Exiting.\n"
 msgstr ""
 
-#: src/regex/gnunet-daemon-regexprofiler.c:378
+#: src/regex/gnunet-daemon-regexprofiler.c:380
 msgid "Daemon to announce regular expressions for the peer using cadet."
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1384
+#: src/regex/gnunet-regex-profiler.c:1386
 msgid "No configuration file given. Exiting\n"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1425
-#: src/regex/gnunet-regex-simulation-profiler.c:628
+#: src/regex/gnunet-regex-profiler.c:1427
+#: src/regex/gnunet-regex-simulation-profiler.c:630
 #, c-format
 msgid "No policy directory specified on command line. Exiting.\n"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1431
-#: src/regex/gnunet-regex-simulation-profiler.c:636
+#: src/regex/gnunet-regex-profiler.c:1433
+#: src/regex/gnunet-regex-simulation-profiler.c:638
 #, c-format
 msgid "Specified policies directory does not exist. Exiting.\n"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1438
+#: src/regex/gnunet-regex-profiler.c:1440
 #, c-format
 msgid "No files found in `%s'\n"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1447
+#: src/regex/gnunet-regex-profiler.c:1449
 msgid "No search strings file given. Exiting.\n"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1467
+#: src/regex/gnunet-regex-profiler.c:1469
 msgid "Error loading search strings. Exiting.\n"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1555
+#: src/regex/gnunet-regex-profiler.c:1557
 msgid "name of the file for writing statistics"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1561
+#: src/regex/gnunet-regex-profiler.c:1563
 msgid "wait TIMEOUT before ending the experiment"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1567
+#: src/regex/gnunet-regex-profiler.c:1569
 msgid "directory with policy files"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1574
+#: src/regex/gnunet-regex-profiler.c:1576
 msgid "name of file with input strings"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1580
+#: src/regex/gnunet-regex-profiler.c:1582
 msgid "name of file with hosts' names"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1593
+#: src/regex/gnunet-regex-profiler.c:1595
 msgid "Profiler for regex"
 msgstr ""
 
-#: src/regex/gnunet-regex-simulation-profiler.c:697
+#: src/regex/gnunet-regex-simulation-profiler.c:699
 msgid "name of the table to write DFAs"
 msgstr ""
 
-#: src/regex/gnunet-regex-simulation-profiler.c:703
+#: src/regex/gnunet-regex-simulation-profiler.c:705
 msgid "maximum path compression length"
 msgstr ""
 
-#: src/regex/gnunet-regex-simulation-profiler.c:717
+#: src/regex/gnunet-regex-simulation-profiler.c:719
 msgid "Profiler for regex library"
 msgstr ""
 
-#: src/regex/regex_api_announce.c:150
+#: src/regex/regex_api_announce.c:152
 #, c-format
 msgid "Regex `%s' is too long!\n"
 msgstr ""
 
-#: src/regex/regex_api_search.c:210
+#: src/regex/regex_api_search.c:212
 #, c-format
 msgid "Search string `%s' is too long!\n"
 msgstr ""
 
-#: src/rest/gnunet-rest-server.c:925
+#: src/rest/gnunet-rest-server.c:927
 msgid "listen on specified port (default: 7776)"
 msgstr ""
 
-#: src/rest/gnunet-rest-server.c:942
+#: src/rest/gnunet-rest-server.c:944
 msgid "GNUnet REST server"
 msgstr ""
 
-#: src/rest-plugins/plugin_rest_copying.c:207
+#: src/rest-plugins/plugin_rest_copying.c:209
 msgid "COPYING REST API initialized\n"
 msgstr ""
 
-#: src/rest-plugins/plugin_rest_credential.c:1126
+#: src/rest-plugins/plugin_rest_credential.c:1128
 msgid "GNS REST API initialized\n"
 msgstr ""
 
-#: src/rest-plugins/plugin_rest_gns.c:450
+#: src/rest-plugins/plugin_rest_gns.c:452
 msgid "Gns REST API initialized\n"
 msgstr ""
 
-#: src/rest-plugins/plugin_rest_identity.c:1295
+#: src/rest-plugins/plugin_rest_identity.c:1297
 msgid "Identity REST API initialized\n"
 msgstr ""
 
-#: src/rest-plugins/plugin_rest_namestore.c:1077
+#: src/rest-plugins/plugin_rest_namestore.c:1079
 msgid "Namestore REST API initialized\n"
 msgstr ""
 
-#: src/rest-plugins/plugin_rest_openid_connect.c:2135
+#: src/rest-plugins/plugin_rest_openid_connect.c:2245
 #: src/rest-plugins/plugin_rest_reclaim.c:1079
 msgid "Identity Provider REST API initialized\n"
 msgstr ""
 
-#: src/rest-plugins/plugin_rest_peerinfo.c:794
+#: src/rest-plugins/plugin_rest_peerinfo.c:796
 msgid "Peerinfo REST API initialized\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:127
+#: src/revocation/gnunet-revocation.c:129
 #, c-format
 msgid "Key `%s' is valid\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:132
+#: src/revocation/gnunet-revocation.c:134
 #, c-format
 msgid "Key `%s' has been revoked\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:138
+#: src/revocation/gnunet-revocation.c:140
 msgid "Internal error\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:164
+#: src/revocation/gnunet-revocation.c:166
 #, c-format
 msgid "Key for ego `%s' is still valid, revocation failed (!)\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:169
+#: src/revocation/gnunet-revocation.c:171
 msgid "Revocation failed (!)\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:174
+#: src/revocation/gnunet-revocation.c:176
 #, c-format
 msgid "Key for ego `%s' has been successfully revoked\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:179
+#: src/revocation/gnunet-revocation.c:181
 msgid "Revocation successful.\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:184
+#: src/revocation/gnunet-revocation.c:186
 msgid "Internal error, key revocation might have failed\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:321
+#: src/revocation/gnunet-revocation.c:323
 #, c-format
 msgid "Revocation certificate for `%s' stored in `%s'\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:350
+#: src/revocation/gnunet-revocation.c:352
 #, c-format
 msgid "Ego `%s' not found.\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:371
+#: src/revocation/gnunet-revocation.c:373
 #, c-format
 msgid "Error: revocation certificate in `%s' is not for `%s'\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:391
+#: src/revocation/gnunet-revocation.c:393
 msgid "Revocation certificate ready\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:401
+#: src/revocation/gnunet-revocation.c:403
 msgid "Revocation certificate not ready, calculating proof of work\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:435 src/social/gnunet-social.c:1178
+#: src/revocation/gnunet-revocation.c:437
 #, c-format
 msgid "Public key `%s' malformed\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:448
+#: src/revocation/gnunet-revocation.c:450
 msgid ""
 "Testing and revoking at the same time is not allowed, only executing test.\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:468
+#: src/revocation/gnunet-revocation.c:470
 msgid "No filename to store revocation certificate given.\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:489
+#: src/revocation/gnunet-revocation.c:491
 #, c-format
 msgid "Failed to read revocation certificate from `%s'\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:514
+#: src/revocation/gnunet-revocation.c:516
 msgid "No action specified. Nothing to do.\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:533
+#: src/revocation/gnunet-revocation.c:535
 msgid "use NAME for the name of the revocation file"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:539
+#: src/revocation/gnunet-revocation.c:541
 msgid ""
 "revoke the private key associated for the the private key associated with "
 "the ego NAME "
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:544
+#: src/revocation/gnunet-revocation.c:546
 msgid "actually perform revocation, otherwise we just do the precomputation"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:550
+#: src/revocation/gnunet-revocation.c:552
 msgid "test if the public key KEY has been revoked"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:457
+#: src/revocation/gnunet-service-revocation.c:459
 msgid "# unsupported revocations received via set union"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:466
+#: src/revocation/gnunet-service-revocation.c:468
 msgid "# revocation messages received via set union"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:471
+#: src/revocation/gnunet-service-revocation.c:473
 #, c-format
 msgid "Error computing revocation set union with %s\n"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:475
+#: src/revocation/gnunet-service-revocation.c:477
 msgid "# revocation set unions failed"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:484
+#: src/revocation/gnunet-service-revocation.c:486
 msgid "# revocation set unions completed"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:523
+#: src/revocation/gnunet-service-revocation.c:525
 msgid "SET service crashed, terminating revocation service\n"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:865
+#: src/revocation/gnunet-service-revocation.c:867
 msgid "Could not open revocation database file!"
 msgstr ""
 
-#: src/rps/gnunet-rps.c:258
+#: src/rps/gnunet-rps.c:260
 msgid "Seed a PeerID"
 msgstr ""
 
-#: src/rps/gnunet-rps.c:262
+#: src/rps/gnunet-rps.c:264
 msgid "Get updates of view (0 for infinite updates)"
 msgstr ""
 
-#: src/rps/gnunet-rps.c:266
+#: src/rps/gnunet-rps.c:268
 msgid "Get peers from biased stream"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2770
+#: src/rps/gnunet-rps-profiler.c:2959
 msgid "duration of the profiling"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2776
+#: src/rps/gnunet-rps-profiler.c:2965
 msgid "timeout for the profiling"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2782
+#: src/rps/gnunet-rps-profiler.c:2971
 #, fuzzy
 msgid "number of PeerIDs to request"
 msgstr "nombre de valeurs"
 
-#: src/rps/gnunet-rps-profiler.c:2797
+#: src/rps/gnunet-rps-profiler.c:2986
 msgid "Measure quality and performance of the RPS service."
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:218
+#: src/scalarproduct/gnunet-scalarproduct.c:220
 msgid "You must specify at least one message ID to check!\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:225
+#: src/scalarproduct/gnunet-scalarproduct.c:227
 msgid "This program needs a session identifier for comparing vectors.\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:238
+#: src/scalarproduct/gnunet-scalarproduct.c:240
 #, c-format
 msgid ""
 "Tried to set initiator mode, as peer ID was given. However, `%s' is not a "
 "valid peer identifier.\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:256
+#: src/scalarproduct/gnunet-scalarproduct.c:258
 msgid "Need elements to compute the scalarproduct, got none.\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:278
+#: src/scalarproduct/gnunet-scalarproduct.c:280
 #, c-format
 msgid "Malformed input, could not parse `%s'\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:296
+#: src/scalarproduct/gnunet-scalarproduct.c:298
 #, fuzzy, c-format
 msgid "Could not convert `%s' to int64_t.\n"
 msgstr "Impossible d’ouvrir « %s ».\n"
 
-#: src/scalarproduct/gnunet-scalarproduct.c:323
+#: src/scalarproduct/gnunet-scalarproduct.c:325
 #, c-format
 msgid "Failed to initiate computation, were all keys unique?\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:349
-#: src/scalarproduct/gnunet-scalarproduct.c:355
+#: src/scalarproduct/gnunet-scalarproduct.c:351
+#: src/scalarproduct/gnunet-scalarproduct.c:357
 msgid ""
 "A comma separated list of elements to compare as vector with our remote peer."
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:361
+#: src/scalarproduct/gnunet-scalarproduct.c:363
 msgid ""
 "[Optional] peer to calculate our scalarproduct with. If this parameter is "
 "not given, the service will wait for a remote peer to compute the request."
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:367
+#: src/scalarproduct/gnunet-scalarproduct.c:369
 msgid "Transaction ID shared with peer."
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:377
+#: src/scalarproduct/gnunet-scalarproduct.c:379
 msgid "Calculate the Vectorproduct with a GNUnet peer."
 msgstr ""
 
-#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1399
-#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1343
-#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1170
-#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1061
+#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1401
+#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1345
+#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1172
+#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1063
 msgid "Connect to CADET failed\n"
 msgstr ""
 
-#: src/scalarproduct/scalarproduct_api.c:183
+#: src/scalarproduct/scalarproduct_api.c:185
 msgid "Keys given to SCALARPRODUCT not unique!\n"
 msgstr ""
 
-#: src/secretsharing/gnunet-secretsharing-profiler.c:614
+#: src/secretsharing/gnunet-secretsharing-profiler.c:616
 msgid "dkg start delay"
 msgstr ""
 
-#: src/secretsharing/gnunet-secretsharing-profiler.c:620
+#: src/secretsharing/gnunet-secretsharing-profiler.c:622
 msgid "dkg timeout"
 msgstr ""
 
-#: src/secretsharing/gnunet-secretsharing-profiler.c:626
+#: src/secretsharing/gnunet-secretsharing-profiler.c:628
 msgid "threshold"
 msgstr "threshold"
 
-#: src/secretsharing/gnunet-secretsharing-profiler.c:631
+#: src/secretsharing/gnunet-secretsharing-profiler.c:633
 msgid "also profile decryption"
 msgstr ""
 
-#: src/set/gnunet-service-set.c:2004
+#: src/set/gnunet-service-set.c:2005
 #, fuzzy
 msgid "Could not connect to CADET service\n"
 msgstr "Impossible d’ouvrir « %s ».\n"
 
-#: src/set/gnunet-set-ibf-profiler.c:250
+#: src/set/gnunet-set-ibf-profiler.c:252
 msgid "number of element in set A-B"
 msgstr ""
 
-#: src/set/gnunet-set-ibf-profiler.c:256
+#: src/set/gnunet-set-ibf-profiler.c:258
 msgid "number of element in set B-A"
 msgstr ""
 
-#: src/set/gnunet-set-ibf-profiler.c:262
+#: src/set/gnunet-set-ibf-profiler.c:264
 msgid "number of common elements in A and B"
 msgstr ""
 
-#: src/set/gnunet-set-ibf-profiler.c:268
+#: src/set/gnunet-set-ibf-profiler.c:270
 msgid "hash num"
 msgstr "numéro de hash"
 
-#: src/set/gnunet-set-ibf-profiler.c:274
+#: src/set/gnunet-set-ibf-profiler.c:276
 msgid "ibf size"
 msgstr "taille ibz"
 
-#: src/set/gnunet-set-profiler.c:442
+#: src/set/gnunet-set-profiler.c:444
 msgid "use byzantine mode"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:448
+#: src/set/gnunet-set-profiler.c:450
 msgid "force sending full set"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:454
+#: src/set/gnunet-set-profiler.c:456
 msgid "number delta operation"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:466
+#: src/set/gnunet-set-profiler.c:468
 msgid "operation to execute"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:472
+#: src/set/gnunet-set-profiler.c:474
 msgid "element size"
 msgstr ""
 
-#: src/social/gnunet-social.c:1164
-msgid "--place missing or invalid.\n"
-msgstr ""
-
-#: src/social/gnunet-social.c:1215
-msgid "assign --name in state to --data"
-msgstr ""
-
-#: src/social/gnunet-social.c:1220
-msgid "say good-bye and leave somebody else's place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1225
-msgid "create a place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1230
-msgid "destroy a place we were hosting"
-msgstr ""
-
-#: src/social/gnunet-social.c:1235
-msgid "enter somebody else's place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1241
-msgid "find state matching name prefix"
-msgstr ""
-
-#: src/social/gnunet-social.c:1246
-msgid "replay history of messages up to the given --limit"
-msgstr ""
-
-#: src/social/gnunet-social.c:1251
-msgid "reconnect to a previously created place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1256
-msgid "publish something to a place we are hosting"
-msgstr ""
-
-#: src/social/gnunet-social.c:1261
-msgid "reconnect to a previously entered place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1266
-msgid "search for state matching exact name"
-msgstr ""
-
-#: src/social/gnunet-social.c:1271
-msgid "submit something to somebody's place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1276
-msgid "list of egos and subscribed places"
-msgstr ""
-
-#: src/social/gnunet-social.c:1281
-msgid "extract and replay history between message IDs --start and --until"
-msgstr ""
-
-#: src/social/gnunet-social.c:1290
-msgid "application ID to use when connecting"
-msgstr ""
-
-#: src/social/gnunet-social.c:1296
-msgid "message body or state value"
-msgstr ""
-
-#: src/social/gnunet-social.c:1302
-msgid "name or public key of ego"
-msgstr ""
-
-#: src/social/gnunet-social.c:1307
-msgid "wait for incoming messages"
-msgstr ""
-
-#: src/social/gnunet-social.c:1313
-msgid "GNS name"
-msgstr ""
-
-#: src/social/gnunet-social.c:1319
-msgid "peer ID for --guest-enter"
-msgstr ""
-
-#: src/social/gnunet-social.c:1325
-msgid "name (key) to query from state"
-msgstr ""
-
-#: src/social/gnunet-social.c:1331
-msgid "method name"
-msgstr ""
-
-#: src/social/gnunet-social.c:1337
-#, fuzzy
-msgid "number of messages to replay from history"
-msgstr "nombre de valeurs"
-
-#: src/social/gnunet-social.c:1343
-msgid "key address of place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1349
-msgid "start message ID for history replay"
-msgstr ""
-
-#: src/social/gnunet-social.c:1354
-msgid "respond to entry requests by admitting all guests"
-msgstr ""
-
-#: src/social/gnunet-social.c:1360
-msgid "end message ID for history replay"
-msgstr ""
-
-#: src/social/gnunet-social.c:1365
-msgid "respond to entry requests by refusing all guests"
-msgstr ""
-
-#: src/social/gnunet-social.c:1375
-msgid ""
-"gnunet-social - Interact with the social service: enter/leave, send/receive "
-"messages, access history and state.\n"
-msgstr ""
-
-#: src/sq/sq.c:52
+#: src/sq/sq.c:54
 #, c-format
 msgid "Failure to bind %u-th SQL parameter\n"
 msgstr ""
 
-#: src/sq/sq.c:59
+#: src/sq/sq.c:61
 msgid "Failure in sqlite3_reset (!)\n"
 msgstr ""
 
-#: src/sq/sq.c:137
+#: src/sq/sq.c:139
 #, fuzzy, c-format
 msgid "Failed to reset sqlite statement with error: %s\n"
 msgstr "Échec du démarrage de %s\n"
 
-#: src/statistics/gnunet-service-statistics.c:336
+#: src/statistics/gnunet-service-statistics.c:338
 #, c-format
 msgid "Wrote %llu bytes of statistics to `%s'\n"
 msgstr ""
 
-#: src/statistics/gnunet-service-statistics.c:1084
+#: src/statistics/gnunet-service-statistics.c:1086
 #, c-format
 msgid "Loading %llu bytes of statistics from `%s'\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:407
-#: src/statistics/gnunet-statistics.c:448
+#: src/statistics/gnunet-statistics.c:409
+#: src/statistics/gnunet-statistics.c:450
 msgid "Failed to obtain statistics.\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:410
-#: src/statistics/gnunet-statistics.c:451
+#: src/statistics/gnunet-statistics.c:412
+#: src/statistics/gnunet-statistics.c:453
 #, c-format
 msgid "Failed to obtain statistics from host `%s:%llu'\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:526
+#: src/statistics/gnunet-statistics.c:528
 msgid "Missing argument: subsystem \n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:534
+#: src/statistics/gnunet-statistics.c:536
 msgid "Missing argument: name\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:577
+#: src/statistics/gnunet-statistics.c:579
 #, c-format
 msgid "No subsystem or name given\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:592
+#: src/statistics/gnunet-statistics.c:594
 #, c-format
 msgid "Failed to initialize watch routine\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:727
+#: src/statistics/gnunet-statistics.c:729
 #, c-format
 msgid "Invalid argument `%s'\n"
 msgstr "Argument invalide « %s »\n"
 
-#: src/statistics/gnunet-statistics.c:745
+#: src/statistics/gnunet-statistics.c:747
 #, c-format
 msgid "A port is required to connect to host `%s'\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:753
+#: src/statistics/gnunet-statistics.c:755
 #, c-format
 msgid "A port has to be between 1 and 65535 to connect to host `%s'\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:784
+#: src/statistics/gnunet-statistics.c:786
 #, c-format
 msgid "Not able to watch testbed nodes (yet - feel free to implement)\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:817
+#: src/statistics/gnunet-statistics.c:819
 msgid "limit output to statistics for the given NAME"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:822
+#: src/statistics/gnunet-statistics.c:824
 msgid "make the value being set persistent"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:828
+#: src/statistics/gnunet-statistics.c:830
 msgid "limit output to the given SUBSYSTEM"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:834
+#: src/statistics/gnunet-statistics.c:836
 msgid "use as csv separator"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:840
+#: src/statistics/gnunet-statistics.c:842
 msgid "path to the folder containing the testbed data"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:845
+#: src/statistics/gnunet-statistics.c:847
 msgid "just print the statistics value"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:850
+#: src/statistics/gnunet-statistics.c:852
 msgid "watch value continuously"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:856
+#: src/statistics/gnunet-statistics.c:858
 msgid "connect to remote host"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:862
+#: src/statistics/gnunet-statistics.c:864
 msgid "port for remote host"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:879
+#: src/statistics/gnunet-statistics.c:881
 msgid "Print statistics about GNUnet operations."
 msgstr ""
 
-#: src/statistics/statistics_api.c:751
+#: src/statistics/statistics_api.c:753
 msgid "Could not save some persistent statistics\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:223
+#: src/testbed/generate-underlay-topology.c:225
 msgid "Need at least 2 arguments\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:228
+#: src/testbed/generate-underlay-topology.c:230
 msgid "Database filename missing\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:235
+#: src/testbed/generate-underlay-topology.c:237
 msgid "Topology string missing\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:240
+#: src/testbed/generate-underlay-topology.c:242
 #, c-format
 msgid "Invalid topology: %s\n"
 msgstr "Topologie invalide : %s\n"
 
-#: src/testbed/generate-underlay-topology.c:253
+#: src/testbed/generate-underlay-topology.c:255
 #, c-format
 msgid "An argument is missing for given topology `%s'\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:259
+#: src/testbed/generate-underlay-topology.c:261
 #, c-format
 msgid "Invalid argument `%s' given as topology argument\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:267
+#: src/testbed/generate-underlay-topology.c:269
 #, c-format
 msgid "Filename argument missing for topology `%s'\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:281
+#: src/testbed/generate-underlay-topology.c:283
 #, c-format
 msgid "Second argument for topology `%s' is missing\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:287
+#: src/testbed/generate-underlay-topology.c:289
 #, c-format
 msgid "Invalid argument `%s'; expecting unsigned int\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:340
-#: src/testbed/gnunet-testbed-profiler.c:281
+#: src/testbed/generate-underlay-topology.c:342
+#: src/testbed/gnunet-testbed-profiler.c:283
 msgid "create COUNT number of peers"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:350
+#: src/testbed/generate-underlay-topology.c:352
 msgid ""
 "Generates SQLite3 database representing a given underlay topology.\n"
 "Usage: gnunet-underlay-topology [OPTIONS] db-filename TOPO [TOPOOPTS]\n"
@@ -6435,83 +6245,83 @@ msgid ""
 "content/topology-file-format\n"
 msgstr ""
 
-#: src/testbed/gnunet-daemon-latency-logger.c:313
+#: src/testbed/gnunet-daemon-latency-logger.c:315
 msgid "Daemon to log latency values of connections to neighbours"
 msgstr ""
 
-#: src/testbed/gnunet-daemon-testbed-blacklist.c:247
+#: src/testbed/gnunet-daemon-testbed-blacklist.c:249
 msgid ""
 "Daemon to restrict incoming transport layer connections during testbed "
 "deployments"
 msgstr ""
 
-#: src/testbed/gnunet-daemon-testbed-underlay.c:231 src/testing/list-keys.c:46
-#: src/testing/testing.c:286 src/util/gnunet-ecc.c:310
+#: src/testbed/gnunet-daemon-testbed-underlay.c:233 src/testing/list-keys.c:46
+#: src/testing/testing.c:288 src/util/gnunet-ecc.c:312
 #, c-format
 msgid "Incorrect hostkey file format: %s\n"
 msgstr ""
 
-#: src/testbed/gnunet-daemon-testbed-underlay.c:469
+#: src/testbed/gnunet-daemon-testbed-underlay.c:471
 msgid "Daemon to restrict underlay network in testbed deployments"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_cpustatus.c:726
+#: src/testbed/gnunet-service-testbed_cpustatus.c:728
 #, c-format
 msgid ""
 "Cannot open %s for writing load statistics.  Not logging load statistics\n"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1157
+#: src/testbed/gnunet-service-testbed_peers.c:1159
 #, c-format
 msgid "%s is stopped"
 msgstr "%s est arrêté"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1159
+#: src/testbed/gnunet-service-testbed_peers.c:1161
 #, c-format
 msgid "%s is starting"
 msgstr "%s est en cours de démarrage"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1161
+#: src/testbed/gnunet-service-testbed_peers.c:1163
 #, c-format
 msgid "%s is stopping"
 msgstr "%s est en cours d'arrêt"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1163
+#: src/testbed/gnunet-service-testbed_peers.c:1165
 #, c-format
 msgid "%s is starting already"
 msgstr "%s est déjà en cours de démarrage"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1165
+#: src/testbed/gnunet-service-testbed_peers.c:1167
 #, c-format
 msgid "%s is stopping already"
 msgstr "%s est déjà arrêté"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1167
+#: src/testbed/gnunet-service-testbed_peers.c:1169
 #, c-format
 msgid "%s is started already"
 msgstr "%s est déjà démarré"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1169
+#: src/testbed/gnunet-service-testbed_peers.c:1171
 #, c-format
 msgid "%s is stopped already"
 msgstr "%s est déjà arrêté"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1171
+#: src/testbed/gnunet-service-testbed_peers.c:1173
 #, c-format
 msgid "%s service is not known to ARM"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1173
+#: src/testbed/gnunet-service-testbed_peers.c:1175
 #, c-format
 msgid "%s service failed to start"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1175
+#: src/testbed/gnunet-service-testbed_peers.c:1177
 #, c-format
 msgid "%s service can't be started because ARM is shutting down"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1177
+#: src/testbed/gnunet-service-testbed_peers.c:1179
 #, c-format
 msgid "%.s Unknown result code."
 msgstr "%.s Code d'erreur inconnu"
@@ -6525,173 +6335,173 @@ msgstr ""
 msgid "Spawning process `%s'\n"
 msgstr ""
 
-#: src/testbed/gnunet-testbed-profiler.c:287
+#: src/testbed/gnunet-testbed-profiler.c:289
 msgid "tolerate COUNT number of continious timeout failures"
 msgstr ""
 
-#: src/testbed/gnunet-testbed-profiler.c:292
+#: src/testbed/gnunet-testbed-profiler.c:294
 msgid ""
 "run profiler in non-interactive mode where upon testbed setup the profiler "
 "does not wait for a keystroke but continues to run until a termination "
 "signal is received"
 msgstr ""
 
-#: src/testbed/testbed_api.c:408
+#: src/testbed/testbed_api.c:410
 #, c-format
 msgid "Adding host %u failed with error: %s\n"
 msgstr ""
 
-#: src/testbed/testbed_api_hosts.c:411
+#: src/testbed/testbed_api_hosts.c:413
 #, c-format
 msgid "Hosts file %s not found\n"
 msgstr ""
 
-#: src/testbed/testbed_api_hosts.c:419
+#: src/testbed/testbed_api_hosts.c:421
 #, c-format
 msgid "Hosts file %s has no data\n"
 msgstr ""
 
-#: src/testbed/testbed_api_hosts.c:426
+#: src/testbed/testbed_api_hosts.c:428
 #, c-format
 msgid "Hosts file %s cannot be read\n"
 msgstr ""
 
-#: src/testbed/testbed_api_hosts.c:567
+#: src/testbed/testbed_api_hosts.c:569
 #, c-format
 msgid "The function %s is only available when compiled with (--with-ll)\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:816
+#: src/testbed/testbed_api_testbed.c:818
 msgid "Linking controllers failed. Exiting"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:984
+#: src/testbed/testbed_api_testbed.c:986
 #, c-format
 msgid "Host registration failed for a host. Error: %s\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1050
+#: src/testbed/testbed_api_testbed.c:1052
 msgid "Controller crash detected. Shutting down.\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1139
+#: src/testbed/testbed_api_testbed.c:1141
 #, c-format
 msgid "Host %s cannot start testbed\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1143
+#: src/testbed/testbed_api_testbed.c:1145
 msgid "Testbed cannot be started on localhost\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1181
+#: src/testbed/testbed_api_testbed.c:1183
 msgid "Cannot start the master controller"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1199
+#: src/testbed/testbed_api_testbed.c:1201
 msgid "Shutting down testbed due to timeout while setup.\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1259
+#: src/testbed/testbed_api_testbed.c:1261
 msgid "No hosts loaded from LoadLeveler. Need at least one host\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1271
+#: src/testbed/testbed_api_testbed.c:1273
 msgid "No hosts loaded. Need at least one host\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1295
+#: src/testbed/testbed_api_testbed.c:1297
 msgid "Specified topology must be supported by testbed"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1345
+#: src/testbed/testbed_api_testbed.c:1347
 #, c-format
 msgid ""
 "Maximum number of edges a peer can have in a scale free topology cannot be "
 "more than %u.  Given `%s = %llu'"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1361
+#: src/testbed/testbed_api_testbed.c:1363
 #, c-format
 msgid ""
 "The number of edges that can established when adding a new node to scale "
 "free topology cannot be more than %u.  Given `%s = %llu'"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1026
+#: src/testbed/testbed_api_topology.c:1028
 #, c-format
 msgid "Topology file %s not found\n"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1034
+#: src/testbed/testbed_api_topology.c:1036
 #, c-format
 msgid "Topology file %s has no data\n"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1042
+#: src/testbed/testbed_api_topology.c:1044
 #, c-format
 msgid "Topology file %s cannot be read\n"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1064
+#: src/testbed/testbed_api_topology.c:1066
 #, c-format
 msgid "Failed to read peer index from toology file: %s"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1073
-#: src/testbed/testbed_api_topology.c:1097
+#: src/testbed/testbed_api_topology.c:1075
+#: src/testbed/testbed_api_topology.c:1099
 #, c-format
 msgid "Value in given topology file: %s out of range\n"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1079
-#: src/testbed/testbed_api_topology.c:1103
+#: src/testbed/testbed_api_topology.c:1081
+#: src/testbed/testbed_api_topology.c:1105
 #, c-format
 msgid "Failed to read peer index from topology file: %s"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1085
-#: src/testbed/testbed_api_topology.c:1109
+#: src/testbed/testbed_api_topology.c:1087
+#: src/testbed/testbed_api_topology.c:1111
 msgid "Topology file needs more peers than given ones\n"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1143
+#: src/testbed/testbed_api_topology.c:1145
 #, c-format
 msgid "Ignoring to connect peer %u to peer %u\n"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:171
+#: src/testing/gnunet-testing.c:173
 #, c-format
 msgid "Could not extract hostkey %u (offset too large?)\n"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:251
+#: src/testing/gnunet-testing.c:253
 #, c-format
 msgid "Unknown command, use 'q' to quit or 'r' to restart peer\n"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:352
+#: src/testing/gnunet-testing.c:354
 msgid "create unique configuration files"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:357
+#: src/testing/gnunet-testing.c:359
 msgid "extract hostkey file from pre-computed hostkey list"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:363
+#: src/testing/gnunet-testing.c:365
 msgid ""
 "number of unique configuration files to create, or number of the hostkey to "
 "extract"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:370
+#: src/testing/gnunet-testing.c:372
 msgid "configuration template"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:376
+#: src/testing/gnunet-testing.c:378
 msgid "run the given service, wait on stdin for 'r' (restart) or 'q' (quit)"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:389
+#: src/testing/gnunet-testing.c:391
 msgid "Command line tool to access the testing library"
 msgstr ""
 
@@ -6699,1493 +6509,1517 @@ msgstr ""
 msgid "list COUNT number of keys"
 msgstr ""
 
-#: src/testing/testing.c:270
+#: src/testing/testing.c:272
 #, c-format
 msgid "Hostkeys file not found: %s\n"
 msgstr ""
 
-#: src/testing/testing.c:713
+#: src/testing/testing.c:715
 #, c-format
 msgid "Key number %u does not exist\n"
 msgstr ""
 
-#: src/testing/testing.c:1157
+#: src/testing/testing.c:1159
 #, c-format
 msgid ""
 "You attempted to create a testbed with more than %u hosts.  Please "
 "precompute more hostkeys first.\n"
 msgstr ""
 
-#: src/testing/testing.c:1166
+#: src/testing/testing.c:1168
 #, c-format
 msgid "Failed to initialize hostkey for peer %u\n"
 msgstr ""
 
-#: src/testing/testing.c:1176
+#: src/testing/testing.c:1178
 msgid "PRIVATE_KEY option in PEER section missing in configuration\n"
 msgstr ""
 
-#: src/testing/testing.c:1189
+#: src/testing/testing.c:1191
 msgid "Failed to create configuration for peer (not enough free ports?)\n"
 msgstr ""
 
-#: src/testing/testing.c:1203
+#: src/testing/testing.c:1205
 #, c-format
 msgid "Cannot open hostkey file `%s': %s\n"
 msgstr ""
 
-#: src/testing/testing.c:1215
+#: src/testing/testing.c:1217
 #, c-format
 msgid "Failed to write hostkey file for peer %u: %s\n"
 msgstr ""
 
-#: src/testing/testing.c:1240
+#: src/testing/testing.c:1242
 #, c-format
 msgid "Failed to write configuration file `%s' for peer %u: %s\n"
 msgstr ""
 
-#: src/testing/testing.c:1342
+#: src/testing/testing.c:1344
 #, c-format
 msgid "Failed to start `%s': %s\n"
 msgstr ""
 
-#: src/testing/testing.c:1645
+#: src/testing/testing.c:1647
 #, c-format
 msgid "Failed to load configuration from %s\n"
 msgstr ""
 
-#: src/topology/friends.c:124
+#: src/topology/friends.c:126
 #, c-format
 msgid "Syntax error in FRIENDS file at offset %llu, skipping bytes `%.*s'.\n"
 msgstr ""
 
-#: src/topology/friends.c:178
+#: src/topology/friends.c:180
 #, c-format
 msgid "Directory for file `%s' does not seem to be writable.\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:228
+#: src/topology/gnunet-daemon-topology.c:230
 msgid "# peers blacklisted"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:342
+#: src/topology/gnunet-daemon-topology.c:344
 msgid "# connect requests issued to ATS"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:536
+#: src/topology/gnunet-daemon-topology.c:538
 msgid "# HELLO messages gossipped"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:638
-#: src/topology/gnunet-daemon-topology.c:724
+#: src/topology/gnunet-daemon-topology.c:640
+#: src/topology/gnunet-daemon-topology.c:726
 msgid "# friends connected"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:921
+#: src/topology/gnunet-daemon-topology.c:923
 msgid "Failed to connect to core service, can not manage topology!\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:954
+#: src/topology/gnunet-daemon-topology.c:956
 #, c-format
 msgid "Found myself `%s' in friend list (useless, ignored)\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:961
+#: src/topology/gnunet-daemon-topology.c:963
 #, c-format
 msgid "Found friend `%s' in configuration\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:983
+#: src/topology/gnunet-daemon-topology.c:985
 msgid "Encountered errors parsing friends list!\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:986
+#: src/topology/gnunet-daemon-topology.c:988
 msgid "# friends in configuration"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:993
+#: src/topology/gnunet-daemon-topology.c:995
 msgid ""
 "Fewer friends specified than required by minimum friend count. Will only "
 "connect to friends.\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:999
+#: src/topology/gnunet-daemon-topology.c:1001
 msgid ""
 "More friendly connections required than target total number of connections.\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:1052
-#: src/transport/plugin_transport_wlan.c:1515
+#: src/topology/gnunet-daemon-topology.c:1054
+#: src/transport/plugin_transport_wlan.c:1517
 msgid "# HELLO messages received"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:1230
+#: src/topology/gnunet-daemon-topology.c:1233
 msgid "GNUnet topology control"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_ats.c:139
+#: src/transport/gnunet-communicator-tcp.c:2329
+#: src/transport/gnunet-communicator-udp.c:2883
+#: src/transport/gnunet-service-tng.c:4679
+#: src/transport/gnunet-service-transport.c:2782
+msgid "Transport service is lacking key configuration settings. Exiting.\n"
+msgstr ""
+
+#: src/transport/gnunet-communicator-tcp.c:2393
+msgid "GNUnet TCP communicator"
+msgstr ""
+
+#: src/transport/gnunet-communicator-udp.c:2954
+msgid "GNUnet UDP communicator"
+msgstr ""
+
+#: src/transport/gnunet-communicator-unix.c:802
+msgid ""
+"Maximum number of UNIX connections exceeded, dropping incoming message\n"
+msgstr ""
+
+#: src/transport/gnunet-communicator-unix.c:1073
+#: src/transport/plugin_transport_unix.c:1403
+#, c-format
+msgid "Cannot create path to `%s'\n"
+msgstr ""
+
+#: src/transport/gnunet-communicator-unix.c:1162
+msgid "GNUnet UNIX domain socket communicator"
+msgstr ""
+
+#: src/transport/gnunet-service-transport_ats.c:141
 msgid "# Addresses given to ATS"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:446
+#: src/transport/gnunet-service-transport.c:448
 msgid "# messages dropped due to slow client"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:816
+#: src/transport/gnunet-service-transport.c:817
 msgid "# bytes payload dropped (other peer was not connected)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:1549
+#: src/transport/gnunet-service-transport.c:1550
 msgid "# bytes payload discarded due to not connected peer"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:1709
+#: src/transport/gnunet-service-transport.c:1710
 msgid "# bytes total received"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:1806
+#: src/transport/gnunet-service-transport.c:1807
 msgid "# bytes payload received"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:2123
-#: src/transport/gnunet-service-transport.c:2595
+#: src/transport/gnunet-service-transport.c:2124
+#: src/transport/gnunet-service-transport.c:2596
 msgid "# disconnects due to blacklist"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:2599
+#: src/transport/gnunet-service-transport.c:2600
 #, c-format
 msgid "Disallowing connection to peer `%s' on transport %s\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:2707
+#: src/transport/gnunet-service-transport.c:2708
 #, c-format
 msgid "Adding blacklisting entry for peer `%s'\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:2716
+#: src/transport/gnunet-service-transport.c:2717
 #, c-format
 msgid "Adding blacklisting entry for peer `%s':`%s'\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:2781
-msgid "Transport service is lacking key configuration settings. Exiting.\n"
-msgstr ""
-
-#: src/transport/gnunet-service-transport_hello.c:193
+#: src/transport/gnunet-service-transport_hello.c:195
 msgid "# refreshed my HELLO"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:804
+#: src/transport/gnunet-service-transport_neighbours.c:805
 #, fuzzy
 msgid "# session creation failed"
 msgstr "# Session TCP active"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1051
+#: src/transport/gnunet-service-transport_neighbours.c:1052
 msgid "# DISCONNECT messages sent"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1174
+#: src/transport/gnunet-service-transport_neighbours.c:1175
 msgid "# disconnects due to quota of 0"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1322
-#: src/transport/gnunet-service-transport_neighbours.c:1783
+#: src/transport/gnunet-service-transport_neighbours.c:1323
+#: src/transport/gnunet-service-transport_neighbours.c:1784
 msgid "# bytes in message queue for other peers"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1327
+#: src/transport/gnunet-service-transport_neighbours.c:1328
 msgid "# messages transmitted to other peers"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1333
+#: src/transport/gnunet-service-transport_neighbours.c:1334
 msgid "# transmission failures for messages to other peers"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1393
+#: src/transport/gnunet-service-transport_neighbours.c:1394
 msgid "# messages timed out while in transport queue"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1477
+#: src/transport/gnunet-service-transport_neighbours.c:1478
 msgid "# KEEPALIVES sent"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1513
+#: src/transport/gnunet-service-transport_neighbours.c:1514
 msgid "# KEEPALIVE messages discarded (peer unknown)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1521
+#: src/transport/gnunet-service-transport_neighbours.c:1522
 msgid "# KEEPALIVE messages discarded (no session)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1531
+#: src/transport/gnunet-service-transport_neighbours.c:1532
 msgid "# KEEPALIVES received in good order"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1576
+#: src/transport/gnunet-service-transport_neighbours.c:1577
 msgid "# KEEPALIVE_RESPONSEs discarded (not connected)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1585
+#: src/transport/gnunet-service-transport_neighbours.c:1586
 msgid "# KEEPALIVE_RESPONSEs discarded (not expected)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1593
+#: src/transport/gnunet-service-transport_neighbours.c:1594
 msgid "# KEEPALIVE_RESPONSEs discarded (address changed)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1602
+#: src/transport/gnunet-service-transport_neighbours.c:1603
 msgid "# KEEPALIVE_RESPONSEs discarded (no nonce)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1607
+#: src/transport/gnunet-service-transport_neighbours.c:1608
 msgid "# KEEPALIVE_RESPONSEs discarded (bad nonce)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1613
+#: src/transport/gnunet-service-transport_neighbours.c:1614
 msgid "# KEEPALIVE_RESPONSEs received (OK)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1680
+#: src/transport/gnunet-service-transport_neighbours.c:1681
 msgid "# messages discarded due to lack of neighbour record"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1714
+#: src/transport/gnunet-service-transport_neighbours.c:1715
 msgid "# bandwidth quota violations by other peers"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1729
+#: src/transport/gnunet-service-transport_neighbours.c:1730
 msgid "# ms throttling suggested"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1852
+#: src/transport/gnunet-service-transport_neighbours.c:1853
 #, fuzzy, c-format
 msgid "Failed to send SYN message to peer `%s'\n"
 msgstr "Résolution de « %s » échouée\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1872
+#: src/transport/gnunet-service-transport_neighbours.c:1873
 msgid "# Failed attempts to switch addresses (failed to send SYN CONT)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1911
+#: src/transport/gnunet-service-transport_neighbours.c:1912
 msgid "# SYN messages sent"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1928
+#: src/transport/gnunet-service-transport_neighbours.c:1929
 #, fuzzy, c-format
 msgid "Failed to transmit SYN message to %s\n"
 msgstr "Échec du démarrage de %s\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1958
+#: src/transport/gnunet-service-transport_neighbours.c:1959
 msgid "# Failed attempts to switch addresses (failed to send SYN)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:2026
+#: src/transport/gnunet-service-transport_neighbours.c:2027
 #, c-format
 msgid "Failed to send SYN_ACK message to peer `%s' using address `%s'\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:2080
+#: src/transport/gnunet-service-transport_neighbours.c:2081
 msgid "# SYN_ACK messages sent"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:2097
+#: src/transport/gnunet-service-transport_neighbours.c:2098
 #, fuzzy, c-format
 msgid "Failed to transmit SYN_ACK message to %s\n"
 msgstr "Échec du démarrage de %s\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:2260
+#: src/transport/gnunet-service-transport_neighbours.c:2261
 msgid "# SYN messages received"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:2265
+#: src/transport/gnunet-service-transport_neighbours.c:2266
 #, c-format
 msgid "SYN request from peer `%s' ignored due impending shutdown\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:2652
+#: src/transport/gnunet-service-transport_neighbours.c:2653
 msgid "# Attempts to switch addresses"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3137
+#: src/transport/gnunet-service-transport_neighbours.c:3138
 msgid "# SYN_ACK messages received"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3145
+#: src/transport/gnunet-service-transport_neighbours.c:3146
 msgid "# unexpected SYN_ACK messages (no peer)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3163
-#: src/transport/gnunet-service-transport_neighbours.c:3187
+#: src/transport/gnunet-service-transport_neighbours.c:3164
+#: src/transport/gnunet-service-transport_neighbours.c:3188
 msgid "# unexpected SYN_ACK messages (not ready)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3199
+#: src/transport/gnunet-service-transport_neighbours.c:3200
 msgid "# unexpected SYN_ACK messages (waiting on ATS)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3224
+#: src/transport/gnunet-service-transport_neighbours.c:3225
 msgid "# Successful attempts to switch addresses"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3237
+#: src/transport/gnunet-service-transport_neighbours.c:3238
 msgid "# unexpected SYN_ACK messages (disconnecting)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3410
+#: src/transport/gnunet-service-transport_neighbours.c:3411
 msgid "# ACK messages received"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3446
+#: src/transport/gnunet-service-transport_neighbours.c:3447
 msgid "# unexpected ACK messages"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3534
+#: src/transport/gnunet-service-transport_neighbours.c:3535
 msgid "# quota messages ignored (malformed)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3541
+#: src/transport/gnunet-service-transport_neighbours.c:3542
 msgid "# QUOTA messages received"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3581
+#: src/transport/gnunet-service-transport_neighbours.c:3582
 msgid "# disconnect messages ignored (malformed)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3588
+#: src/transport/gnunet-service-transport_neighbours.c:3589
 msgid "# DISCONNECT messages received"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3599
+#: src/transport/gnunet-service-transport_neighbours.c:3600
 msgid "# disconnect messages ignored (timestamp)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3734
+#: src/transport/gnunet-service-transport_neighbours.c:3735
 msgid "# disconnected from peer upon explicit request"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_plugins.c:156
+#: src/transport/gnunet-service-transport_plugins.c:158
 msgid "Transport service is lacking NEIGHBOUR_LIMIT option.\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_plugins.c:221
-#: src/transport/gnunet-service-transport_plugins.c:229
-#: src/transport/gnunet-service-transport_plugins.c:237
-#: src/transport/gnunet-service-transport_plugins.c:245
-#: src/transport/gnunet-service-transport_plugins.c:253
-#: src/transport/gnunet-service-transport_plugins.c:261
-#: src/transport/gnunet-service-transport_plugins.c:269
-#: src/transport/gnunet-service-transport_plugins.c:277
-#: src/transport/gnunet-service-transport_plugins.c:285
-#: src/transport/gnunet-service-transport_plugins.c:293
-#: src/transport/gnunet-service-transport_plugins.c:301
+#: src/transport/gnunet-service-transport_plugins.c:223
+#: src/transport/gnunet-service-transport_plugins.c:231
+#: src/transport/gnunet-service-transport_plugins.c:239
+#: src/transport/gnunet-service-transport_plugins.c:247
+#: src/transport/gnunet-service-transport_plugins.c:255
+#: src/transport/gnunet-service-transport_plugins.c:263
+#: src/transport/gnunet-service-transport_plugins.c:271
+#: src/transport/gnunet-service-transport_plugins.c:279
+#: src/transport/gnunet-service-transport_plugins.c:287
+#: src/transport/gnunet-service-transport_plugins.c:295
+#: src/transport/gnunet-service-transport_plugins.c:303
 #, c-format
 msgid "Missing function `%s' in transport plugin for `%s'\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_plugins.c:308
+#: src/transport/gnunet-service-transport_plugins.c:310
 #, c-format
 msgid "Did not load plugin `%s' due to missing functions\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:386
+#: src/transport/gnunet-service-transport_validation.c:388
 msgid "# Addresses in validation map"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:489
-#: src/transport/gnunet-service-transport_validation.c:675
-#: src/transport/gnunet-service-transport_validation.c:995
-#: src/transport/gnunet-service-transport_validation.c:1607
+#: src/transport/gnunet-service-transport_validation.c:491
+#: src/transport/gnunet-service-transport_validation.c:677
+#: src/transport/gnunet-service-transport_validation.c:997
+#: src/transport/gnunet-service-transport_validation.c:1609
 msgid "# validations running"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:530
+#: src/transport/gnunet-service-transport_validation.c:532
 msgid "# address records discarded (timeout)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:578
+#: src/transport/gnunet-service-transport_validation.c:580
 msgid "# address records discarded (blacklist)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:666
+#: src/transport/gnunet-service-transport_validation.c:668
 msgid "# PINGs for address validation sent"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:746
+#: src/transport/gnunet-service-transport_validation.c:748
 msgid "# validations delayed by global throttle"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:783
+#: src/transport/gnunet-service-transport_validation.c:785
 msgid "# address revalidations started"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1121
+#: src/transport/gnunet-service-transport_validation.c:1123
 msgid "# PING message for different peer received"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1172
+#: src/transport/gnunet-service-transport_validation.c:1174
 #, c-format
 msgid "Plugin `%s' not available, cannot confirm having this address\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1185
+#: src/transport/gnunet-service-transport_validation.c:1187
 msgid "# failed address checks during validation"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1188
+#: src/transport/gnunet-service-transport_validation.c:1190
 #, c-format
 msgid "Address `%s' is not one of my addresses, not confirming PING\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1196
+#: src/transport/gnunet-service-transport_validation.c:1198
 msgid "# successful address checks during validation"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1209
+#: src/transport/gnunet-service-transport_validation.c:1211
 #, c-format
 msgid ""
 "Not confirming PING from peer `%s' with address `%s' since I cannot confirm "
 "having this address.\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1264
+#: src/transport/gnunet-service-transport_validation.c:1266
 #, c-format
 msgid "Failed to create PONG signature for peer `%s'\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1315
+#: src/transport/gnunet-service-transport_validation.c:1317
 msgid "# PONGs unicast via reliable transport"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1324
+#: src/transport/gnunet-service-transport_validation.c:1326
 msgid "# PONGs multicast to all available addresses"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1497
+#: src/transport/gnunet-service-transport_validation.c:1499
 msgid "# PONGs dropped, no matching pending validation"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1515
+#: src/transport/gnunet-service-transport_validation.c:1517
 msgid "# PONGs dropped, signature expired"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1570
+#: src/transport/gnunet-service-transport_validation.c:1572
 msgid "# validations succeeded"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1625
+#: src/transport/gnunet-service-transport_validation.c:1627
 msgid "# HELLOs given to peerinfo"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:411
+#: src/transport/gnunet-transport.c:413
 #, c-format
 msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:421
+#: src/transport/gnunet-transport.c:423
 #, c-format
 msgid "Received %llu bytes/s (%llu bytes in %s)\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:465
+#: src/transport/gnunet-transport.c:467
 #, c-format
 msgid "Failed to connect to `%s'\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:478
+#: src/transport/gnunet-transport.c:480
 #, c-format
 msgid "Failed to resolve address for peer `%s'\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:492
-msgid "Failed to list connections, timeout occured\n"
-msgstr ""
+#: src/transport/gnunet-transport.c:494
+#, fuzzy
+msgid "Failed to list connections, timeout occurred\n"
+msgstr "fornat invalide : « %s »\n"
 
-#: src/transport/gnunet-transport.c:525
+#: src/transport/gnunet-transport.c:527
 #, c-format
 msgid "Transmitting %u bytes\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:559
+#: src/transport/gnunet-transport.c:561
 #, c-format
 msgid ""
 "Successfully connected to `%s', starting to send benchmark data in %u Kb "
 "blocks\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:590
+#: src/transport/gnunet-transport.c:592
 #, c-format
 msgid "Disconnected from peer `%s' while benchmarking\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:614 src/transport/gnunet-transport.c:643
+#: src/transport/gnunet-transport.c:616 src/transport/gnunet-transport.c:645
 #, c-format
 msgid "%24s: %-17s %4s   (%u connections in total)\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:616
+#: src/transport/gnunet-transport.c:618
 msgid "Connected to"
 msgstr "Connecté à"
 
-#: src/transport/gnunet-transport.c:645
+#: src/transport/gnunet-transport.c:647
 msgid "Disconnected from"
 msgstr "Déconnecté de"
 
-#: src/transport/gnunet-transport.c:680
+#: src/transport/gnunet-transport.c:682
 #, fuzzy, c-format
 msgid "Received %u bytes\n"
 msgstr "%s message(s) reçu(s)\n"
 
-#: src/transport/gnunet-transport.c:717
+#: src/transport/gnunet-transport.c:719
 #, c-format
 msgid "Peer `%s': %s %s in state `%s' until %s\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:729
+#: src/transport/gnunet-transport.c:731
 #, c-format
 msgid "Peer `%s': %s %s\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1142
+#: src/transport/gnunet-transport.c:1144
 msgid "Monitor disconnected from transport service. Reconnecting.\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1249
+#: src/transport/gnunet-transport.c:1251
 #, c-format
 msgid ""
 "Multiple operations given. Please choose only one operation: %s, %s, %s, %s, "
 "%s, %s %s\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1262
+#: src/transport/gnunet-transport.c:1264
 #, c-format
 msgid ""
 "No operation given. Please choose one operation: %s, %s, %s, %s, %s, %s, %s\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1292
+#: src/transport/gnunet-transport.c:1294
 msgid "Failed to connect to transport service for disconnection\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1298
+#: src/transport/gnunet-transport.c:1300
 msgid "Blacklisting request in place, stop with CTRL-C\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1323 src/transport/gnunet-transport.c:1353
-#: src/transport/gnunet-transport.c:1406
+#: src/transport/gnunet-transport.c:1325 src/transport/gnunet-transport.c:1355
+#: src/transport/gnunet-transport.c:1408
 msgid "Failed to connect to transport service\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1360
+#: src/transport/gnunet-transport.c:1362
 msgid "Starting to receive benchmark data\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1431
+#: src/transport/gnunet-transport.c:1433
 msgid "print information for all peers (instead of only connected peers)"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1435
+#: src/transport/gnunet-transport.c:1437
 msgid "measure how fast we are receiving data from all peers (until CTRL-C)"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1439
+#: src/transport/gnunet-transport.c:1441
 msgid "disconnect from a peer"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1443
+#: src/transport/gnunet-transport.c:1445
 msgid "provide information about all current connections (once)"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1451
+#: src/transport/gnunet-transport.c:1453
 msgid ""
 "provide information about all connects and disconnect events (continuously)"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1455
+#: src/transport/gnunet-transport.c:1457
 msgid "do not resolve hostnames"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1460
-#: src/transport/gnunet-transport-profiler.c:639
+#: src/transport/gnunet-transport.c:1462
+#: src/transport/gnunet-transport-profiler.c:641
 msgid "peer identity"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1464
+#: src/transport/gnunet-transport.c:1466
 msgid "monitor plugin sessions"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1469
+#: src/transport/gnunet-transport.c:1471
 msgid "send data for benchmarking to the other peer (until CTRL-C)"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1480
-#: src/transport/gnunet-transport-profiler.c:650
+#: src/transport/gnunet-transport.c:1482
+#: src/transport/gnunet-transport-profiler.c:652
 msgid "Direct access to transport service."
 msgstr ""
 
-#: src/transport/gnunet-transport-profiler.c:217
+#: src/transport/gnunet-transport-profiler.c:219
 #, c-format
 msgid "%llu B in %llu ms == %.2f KB/s!\n"
 msgstr ""
 
-#: src/transport/gnunet-transport-profiler.c:615
+#: src/transport/gnunet-transport-profiler.c:617
 msgid "send data to peer"
 msgstr ""
 
-#: src/transport/gnunet-transport-profiler.c:619
+#: src/transport/gnunet-transport-profiler.c:621
 msgid "receive data from peer"
 msgstr ""
 
-#: src/transport/gnunet-transport-profiler.c:624
+#: src/transport/gnunet-transport-profiler.c:626
 msgid "iterations"
 msgstr ""
 
-#: src/transport/gnunet-transport-profiler.c:629
+#: src/transport/gnunet-transport-profiler.c:631
 #, fuzzy
 msgid "number of messages to send"
 msgstr "nombre de valeurs"
 
-#: src/transport/gnunet-transport-profiler.c:634
+#: src/transport/gnunet-transport-profiler.c:636
 msgid "message size to use"
 msgstr ""
 
-#: src/transport/plugin_transport_http_client.c:1472
-#: src/transport/plugin_transport_http_server.c:2310
-#: src/transport/plugin_transport_http_server.c:3524
-#: src/transport/plugin_transport_tcp.c:3889
-#: src/transport/plugin_transport_tcp.c:3896
-#: src/transport/plugin_transport_xt.c:3897
-#: src/transport/plugin_transport_xt.c:3904
+#: src/transport/plugin_transport_http_client.c:1474
+#: src/transport/plugin_transport_http_server.c:2312
+#: src/transport/plugin_transport_http_server.c:3530
+#: src/transport/plugin_transport_tcp.c:3895
+#: src/transport/plugin_transport_tcp.c:3902
+#: src/transport/plugin_transport_xt.c:3899
+#: src/transport/plugin_transport_xt.c:3906
 msgid "TCP_STEALTH not supported on this platform.\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_client.c:2113
+#: src/transport/plugin_transport_http_client.c:2115
 #, c-format
 msgid "Could not initialize curl multi handle, failed to start %s plugin!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_client.c:2162
-#: src/transport/plugin_transport_http_server.c:3239
+#: src/transport/plugin_transport_http_client.c:2164
+#: src/transport/plugin_transport_http_server.c:3245
 #, c-format
 msgid "Shutting down plugin `%s'\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_client.c:2179
-#: src/transport/plugin_transport_http_server.c:3309
+#: src/transport/plugin_transport_http_client.c:2181
+#: src/transport/plugin_transport_http_server.c:3315
 #, c-format
 msgid "Shutdown for plugin `%s' complete\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_client.c:2213
+#: src/transport/plugin_transport_http_client.c:2215
 #, c-format
 msgid "Maximum number of requests is %u\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:1754
+#: src/transport/plugin_transport_http_server.c:1756
 #, c-format
 msgid ""
 "Access from connection %p (%u of %u) for `%s' `%s' url `%s' with upload data "
 "size %u\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2026
+#: src/transport/plugin_transport_http_server.c:2028
 #, c-format
 msgid "Accepting connection (%u of %u) from `%s'\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2034
+#: src/transport/plugin_transport_http_server.c:2036
 #, c-format
 msgid ""
 "Server reached maximum number connections (%u), rejecting new connection\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2184
+#: src/transport/plugin_transport_http_server.c:2186
 msgid ""
 "Could not create a new TLS certificate, program `gnunet-transport-"
 "certificate-creation' could not be started!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2207
+#: src/transport/plugin_transport_http_server.c:2209
 #, c-format
 msgid "No usable TLS certificate found and creating one at `%s/%s' failed!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2336
+#: src/transport/plugin_transport_http_server.c:2338
 msgid "Could not load or create server certificate! Loading plugin failed!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2648
+#: src/transport/plugin_transport_http_server.c:2654
 msgid "Require valid port number for service in configuration!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2813
+#: src/transport/plugin_transport_http_server.c:2819
 #, c-format
 msgid "Found %u addresses to report to NAT service\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2899
-#: src/transport/plugin_transport_udp.c:3621
-#: src/transport/plugin_transport_xu.c:2047
+#: src/transport/plugin_transport_http_server.c:2905
+#: src/transport/plugin_transport_udp.c:3627
+#: src/transport/plugin_transport_xu.c:2049
 msgid "Disabling IPv6 since it is not supported on this system!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3005
+#: src/transport/plugin_transport_http_server.c:3011
 #, c-format
 msgid "IPv4 support is %s\n"
 msgstr "Prise en charge d’IPv4 %s\n"
 
-#: src/transport/plugin_transport_http_server.c:3020
+#: src/transport/plugin_transport_http_server.c:3026
 #, c-format
 msgid "IPv6 support is %s\n"
 msgstr "Prise en charge d’IPv6 %s\n"
 
-#: src/transport/plugin_transport_http_server.c:3026
+#: src/transport/plugin_transport_http_server.c:3032
 msgid "Neither IPv4 nor IPv6 are enabled! Fix in configuration\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3037
+#: src/transport/plugin_transport_http_server.c:3043
 msgid "Port is required! Fix in configuration\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3043
+#: src/transport/plugin_transport_http_server.c:3049
 #, c-format
 msgid "Using port %u\n"
 msgstr "Utilisation du port %u\n"
 
-#: src/transport/plugin_transport_http_server.c:3062
+#: src/transport/plugin_transport_http_server.c:3068
 #, c-format
 msgid "Specific IPv4 address `%s' in configuration file is invalid!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3097
+#: src/transport/plugin_transport_http_server.c:3103
 #, c-format
 msgid "Specific IPv6 address `%s' in configuration file is invalid!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3172
+#: src/transport/plugin_transport_http_server.c:3178
 #, c-format
 msgid "Using external hostname `%s'\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3193
+#: src/transport/plugin_transport_http_server.c:3199
 #, c-format
 msgid "Notifying transport only about hostname `%s'\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3210
+#: src/transport/plugin_transport_http_server.c:3216
 #, c-format
 msgid "Maximum number of connections is %u\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3536
+#: src/transport/plugin_transport_http_server.c:3542
 msgid "Unable to compile URL regex\n"
 msgstr ""
 
-#: src/transport/plugin_transport_smtp.c:221
+#: src/transport/plugin_transport_smtp.c:223
 #, c-format
 msgid "Received malformed message via %s. Ignored.\n"
 msgstr ""
 
-#: src/transport/plugin_transport_smtp.c:308
+#: src/transport/plugin_transport_smtp.c:310
 msgid "SMTP filter string to invalid, lacks ': '\n"
 msgstr ""
 
-#: src/transport/plugin_transport_smtp.c:317
+#: src/transport/plugin_transport_smtp.c:319
 #, c-format
 msgid "SMTP filter string to long, capped to `%s'\n"
 msgstr ""
 
-#: src/transport/plugin_transport_smtp.c:412
-#: src/transport/plugin_transport_smtp.c:422
-#: src/transport/plugin_transport_smtp.c:435
-#: src/transport/plugin_transport_smtp.c:454
-#: src/transport/plugin_transport_smtp.c:477
-#: src/transport/plugin_transport_smtp.c:485
-#: src/transport/plugin_transport_smtp.c:498
-#: src/transport/plugin_transport_smtp.c:509
+#: src/transport/plugin_transport_smtp.c:414
+#: src/transport/plugin_transport_smtp.c:424
+#: src/transport/plugin_transport_smtp.c:437
+#: src/transport/plugin_transport_smtp.c:456
+#: src/transport/plugin_transport_smtp.c:479
+#: src/transport/plugin_transport_smtp.c:487
+#: src/transport/plugin_transport_smtp.c:500
+#: src/transport/plugin_transport_smtp.c:511
 #, c-format
 msgid "SMTP: `%s' failed: %s.\n"
 msgstr "SNTP : « %s » échouée : %s.\n"
 
-#: src/transport/plugin_transport_smtp.c:650
+#: src/transport/plugin_transport_smtp.c:652
 msgid "No email-address specified, can not start SMTP transport.\n"
 msgstr ""
 
-#: src/transport/plugin_transport_smtp.c:662
+#: src/transport/plugin_transport_smtp.c:664
 msgid "# bytes received via SMTP"
 msgstr ""
 
-#: src/transport/plugin_transport_smtp.c:663
+#: src/transport/plugin_transport_smtp.c:665
 msgid "# bytes sent via SMTP"
 msgstr ""
 
-#: src/transport/plugin_transport_smtp.c:665
+#: src/transport/plugin_transport_smtp.c:667
 msgid "# bytes dropped by SMTP (outgoing)"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:1545
-#: src/transport/plugin_transport_tcp.c:2871
-#: src/transport/plugin_transport_xt.c:1551
-#: src/transport/plugin_transport_xt.c:2877
+#: src/transport/plugin_transport_tcp.c:1551
+#: src/transport/plugin_transport_tcp.c:2877
+#: src/transport/plugin_transport_xt.c:1553
+#: src/transport/plugin_transport_xt.c:2879
 #, c-format
 msgid "Unexpected address length: %u bytes\n"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:1728
-#: src/transport/plugin_transport_tcp.c:1952
-#: src/transport/plugin_transport_tcp.c:3135
-#: src/transport/plugin_transport_tcp.c:4012
-#: src/transport/plugin_transport_xt.c:1734
-#: src/transport/plugin_transport_xt.c:1958
-#: src/transport/plugin_transport_xt.c:3141
+#: src/transport/plugin_transport_tcp.c:1734
+#: src/transport/plugin_transport_tcp.c:1958
+#: src/transport/plugin_transport_tcp.c:3141
+#: src/transport/plugin_transport_tcp.c:4018
+#: src/transport/plugin_transport_xt.c:1736
+#: src/transport/plugin_transport_xt.c:1960
+#: src/transport/plugin_transport_xt.c:3143
 msgid "# TCP sessions active"
 msgstr "# Session TCP active"
 
-#: src/transport/plugin_transport_tcp.c:1770
-#: src/transport/plugin_transport_tcp.c:1934
-#: src/transport/plugin_transport_tcp.c:2058
-#: src/transport/plugin_transport_tcp.c:2131
-#: src/transport/plugin_transport_tcp.c:2231
-#: src/transport/plugin_transport_tcp.c:2256
-#: src/transport/plugin_transport_xt.c:1776
-#: src/transport/plugin_transport_xt.c:1940
-#: src/transport/plugin_transport_xt.c:2064
-#: src/transport/plugin_transport_xt.c:2137
-#: src/transport/plugin_transport_xt.c:2237
-#: src/transport/plugin_transport_xt.c:2262
+#: src/transport/plugin_transport_tcp.c:1776
+#: src/transport/plugin_transport_tcp.c:1940
+#: src/transport/plugin_transport_tcp.c:2064
+#: src/transport/plugin_transport_tcp.c:2137
+#: src/transport/plugin_transport_tcp.c:2237
+#: src/transport/plugin_transport_tcp.c:2262
+#: src/transport/plugin_transport_xt.c:1778
+#: src/transport/plugin_transport_xt.c:1942
+#: src/transport/plugin_transport_xt.c:2066
+#: src/transport/plugin_transport_xt.c:2139
+#: src/transport/plugin_transport_xt.c:2239
+#: src/transport/plugin_transport_xt.c:2264
 msgid "# bytes currently in TCP buffers"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:1773
-#: src/transport/plugin_transport_xt.c:1779
+#: src/transport/plugin_transport_tcp.c:1779
+#: src/transport/plugin_transport_xt.c:1781
 msgid "# bytes discarded by TCP (disconnect)"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:2061
-#: src/transport/plugin_transport_xt.c:2067
+#: src/transport/plugin_transport_tcp.c:2067
+#: src/transport/plugin_transport_xt.c:2069
 msgid "# bytes discarded by TCP (timeout)"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:2135
-#: src/transport/plugin_transport_xt.c:2141
+#: src/transport/plugin_transport_tcp.c:2141
+#: src/transport/plugin_transport_xt.c:2143
 msgid "# bytes transmitted via TCP"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:2533
-#: src/transport/plugin_transport_xt.c:2539
+#: src/transport/plugin_transport_tcp.c:2539
+#: src/transport/plugin_transport_xt.c:2541
 msgid "# requests to create session with invalid address"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:2709
-#: src/transport/plugin_transport_xt.c:2715
+#: src/transport/plugin_transport_tcp.c:2715
+#: src/transport/plugin_transport_xt.c:2717
 msgid "# transport-service disconnect requests for TCP"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3201
-#: src/transport/plugin_transport_xt.c:3207
+#: src/transport/plugin_transport_tcp.c:3207
+#: src/transport/plugin_transport_xt.c:3209
 msgid "# TCP WELCOME messages received"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3407
-#: src/transport/plugin_transport_xt.c:3413
+#: src/transport/plugin_transport_tcp.c:3413
+#: src/transport/plugin_transport_xt.c:3415
 msgid "# bytes received via TCP"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3458
-#: src/transport/plugin_transport_tcp.c:3516
-#: src/transport/plugin_transport_xt.c:3464
-#: src/transport/plugin_transport_xt.c:3522
+#: src/transport/plugin_transport_tcp.c:3464
+#: src/transport/plugin_transport_tcp.c:3522
+#: src/transport/plugin_transport_xt.c:3466
+#: src/transport/plugin_transport_xt.c:3524
 #, fuzzy
 msgid "# TCP server connections active"
 msgstr "# Session TCP active"
 
-#: src/transport/plugin_transport_tcp.c:3462
-#: src/transport/plugin_transport_xt.c:3468
+#: src/transport/plugin_transport_tcp.c:3468
+#: src/transport/plugin_transport_xt.c:3470
 msgid "# TCP server connect events"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3468
-#: src/transport/plugin_transport_xt.c:3474
+#: src/transport/plugin_transport_tcp.c:3474
+#: src/transport/plugin_transport_xt.c:3476
 msgid "TCP connection limit reached, suspending server\n"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3470
-#: src/transport/plugin_transport_xt.c:3476
+#: src/transport/plugin_transport_tcp.c:3476
+#: src/transport/plugin_transport_xt.c:3478
 msgid "# TCP service suspended"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3510
-#: src/transport/plugin_transport_xt.c:3516
+#: src/transport/plugin_transport_tcp.c:3516
+#: src/transport/plugin_transport_xt.c:3518
 msgid "# TCP service resumed"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3520
-#: src/transport/plugin_transport_xt.c:3526
+#: src/transport/plugin_transport_tcp.c:3526
+#: src/transport/plugin_transport_xt.c:3528
 msgid "# network-level TCP disconnect events"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3839
-#: src/transport/plugin_transport_xt.c:3847
+#: src/transport/plugin_transport_tcp.c:3845
+#: src/transport/plugin_transport_xt.c:3849
 msgid "Failed to start service.\n"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:4000
+#: src/transport/plugin_transport_tcp.c:4006
 #, c-format
 msgid "TCP transport listening on port %llu\n"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:4004
+#: src/transport/plugin_transport_tcp.c:4010
 msgid "TCP transport not listening on any port (client only)\n"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:4008
+#: src/transport/plugin_transport_tcp.c:4014
 #, c-format
 msgid "TCP transport advertises itself as being on port %llu\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp_broadcasting.c:166
+#: src/transport/plugin_transport_udp_broadcasting.c:168
 msgid "# Multicast HELLO beacons received via UDP"
 msgstr ""
 
-#: src/transport/plugin_transport_udp_broadcasting.c:546
+#: src/transport/plugin_transport_udp_broadcasting.c:548
 msgid ""
 "Disabling HELLO broadcasting due to friend-to-friend only configuration!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp_broadcasting.c:563
+#: src/transport/plugin_transport_udp_broadcasting.c:565
 #, c-format
 msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3365
+#: src/transport/plugin_transport_udp.c:3371
 #, c-format
 msgid ""
 "UDP could not transmit message to `%s': Network seems down, please check "
 "your network configuration\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3379
+#: src/transport/plugin_transport_udp.c:3385
 msgid ""
 "UDP could not transmit IPv6 message! Please check your network configuration "
 "and disable IPv6 if your connection does not have a global IPv6 address\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3697
-#: src/transport/plugin_transport_udp.c:3796
+#: src/transport/plugin_transport_udp.c:3703
+#: src/transport/plugin_transport_udp.c:3802
 #, fuzzy, c-format
 msgid "Failed to bind UDP socket to %s: %s\n"
 msgstr "Résolution de « %s » échouée : %s\n"
 
-#: src/transport/plugin_transport_udp.c:3715
-#: src/transport/plugin_transport_xu.c:2141
+#: src/transport/plugin_transport_udp.c:3721
+#: src/transport/plugin_transport_xu.c:2143
 msgid "Disabling IPv4 since it is not supported on this system!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3806
+#: src/transport/plugin_transport_udp.c:3812
 msgid "Failed to open UDP sockets\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3877
-#: src/transport/plugin_transport_udp.c:3891
-#: src/transport/plugin_transport_xu.c:2299
-#: src/transport/plugin_transport_xu.c:2313
+#: src/transport/plugin_transport_udp.c:3883
+#: src/transport/plugin_transport_udp.c:3897
+#: src/transport/plugin_transport_xu.c:2301
+#: src/transport/plugin_transport_xu.c:2315
 msgid "must be in [0,65535]"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3923
-#: src/transport/plugin_transport_xu.c:2345
+#: src/transport/plugin_transport_udp.c:3929
+#: src/transport/plugin_transport_xu.c:2347
 #, fuzzy
 msgid "must be valid IPv4 address"
 msgstr "adresse invalide"
 
-#: src/transport/plugin_transport_udp.c:3950
-#: src/transport/plugin_transport_xu.c:2372
+#: src/transport/plugin_transport_udp.c:3956
+#: src/transport/plugin_transport_xu.c:2374
 #, fuzzy
 msgid "must be valid IPv6 address"
 msgstr "adresse invalide"
 
-#: src/transport/plugin_transport_udp.c:4014
+#: src/transport/plugin_transport_udp.c:4020
 msgid "Failed to create UDP network sockets\n"
 msgstr ""
 
-#: src/transport/plugin_transport_unix.c:1401
-#, c-format
-msgid "Cannot create path to `%s'\n"
-msgstr ""
-
-#: src/transport/plugin_transport_unix.c:1414
+#: src/transport/plugin_transport_unix.c:1416
 #, c-format
 msgid "Cannot bind to `%s'\n"
 msgstr ""
 
-#: src/transport/plugin_transport_unix.c:1814
+#: src/transport/plugin_transport_unix.c:1816
 msgid "Failed to open UNIX listen socket\n"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:766
+#: src/transport/plugin_transport_wlan.c:768
 msgid "# ACKs sent"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:786
+#: src/transport/plugin_transport_wlan.c:788
 msgid "# Messages defragmented"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:827
-#: src/transport/plugin_transport_wlan.c:912
+#: src/transport/plugin_transport_wlan.c:829
+#: src/transport/plugin_transport_wlan.c:914
 #, fuzzy
 msgid "# Sessions allocated"
 msgstr "# Session TCP active"
 
-#: src/transport/plugin_transport_wlan.c:1033
+#: src/transport/plugin_transport_wlan.c:1035
 msgid "# message fragments sent"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:1062
+#: src/transport/plugin_transport_wlan.c:1064
 msgid "# messages pending (with fragmentation)"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:1191
-#: src/transport/plugin_transport_wlan.c:1282
-#: src/transport/plugin_transport_wlan.c:2303
+#: src/transport/plugin_transport_wlan.c:1193
+#: src/transport/plugin_transport_wlan.c:1284
+#: src/transport/plugin_transport_wlan.c:2305
 msgid "# MAC endpoints allocated"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:1565
+#: src/transport/plugin_transport_wlan.c:1567
 msgid "# ACKs received"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:1634
+#: src/transport/plugin_transport_wlan.c:1636
 msgid "# DATA messages discarded due to CRC32 error"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:1738
+#: src/transport/plugin_transport_wlan.c:1740
 msgid "# HELLO beacons sent"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:1854
+#: src/transport/plugin_transport_wlan.c:1856
 msgid "# DATA messages received"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:1888
+#: src/transport/plugin_transport_wlan.c:1890
 msgid "# DATA messages processed"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:2278
+#: src/transport/plugin_transport_wlan.c:2280
 #, c-format
 msgid "Helper binary `%s' not SUID, cannot run WLAN transport\n"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:2300
+#: src/transport/plugin_transport_wlan.c:2302
 #, fuzzy
 msgid "# sessions allocated"
 msgstr "# Session TCP active"
 
-#: src/transport/plugin_transport_xt.c:4008
+#: src/transport/plugin_transport_xt.c:4010
 #, c-format
 msgid "XT transport listening on port %llu\n"
 msgstr ""
 
-#: src/transport/plugin_transport_xt.c:4012
+#: src/transport/plugin_transport_xt.c:4014
 msgid "XT transport not listening on any port (client only)\n"
 msgstr ""
 
-#: src/transport/plugin_transport_xt.c:4016
+#: src/transport/plugin_transport_xt.c:4018
 #, c-format
 msgid "XT transport advertises itself as being on port %llu\n"
 msgstr ""
 
-#: src/transport/plugin_transport_xt.c:4020
+#: src/transport/plugin_transport_xt.c:4022
 #, fuzzy
 msgid "# XT sessions active"
 msgstr "# Session TCP active"
 
-#: src/transport/plugin_transport_xu.c:1235
+#: src/transport/plugin_transport_xu.c:1237
 #, c-format
 msgid ""
 "XU could not transmit message to `%s': Network seems down, please check your "
 "network configuration\n"
 msgstr ""
 
-#: src/transport/plugin_transport_xu.c:1249
+#: src/transport/plugin_transport_xu.c:1251
 msgid ""
 "XU could not transmit IPv6 message! Please check your network configuration "
 "and disable IPv6 if your connection does not have a global IPv6 address\n"
 msgstr ""
 
-#: src/transport/plugin_transport_xu.c:2123
-#: src/transport/plugin_transport_xu.c:2222
+#: src/transport/plugin_transport_xu.c:2125
+#: src/transport/plugin_transport_xu.c:2224
 #, fuzzy, c-format
 msgid "Failed to bind XU socket to %s: %s\n"
 msgstr "Résolution de « %s » échouée : %s\n"
 
-#: src/transport/plugin_transport_xu.c:2232
+#: src/transport/plugin_transport_xu.c:2234
 #, fuzzy
 msgid "Failed to open XU sockets\n"
 msgstr "Résolution de « %s » échouée : %s\n"
 
-#: src/transport/plugin_transport_xu.c:2396
+#: src/transport/plugin_transport_xu.c:2398
 #, fuzzy
 msgid "Failed to create XU network sockets\n"
 msgstr "Résolution de « %s » échouée : %s\n"
 
-#: src/transport/tcp_connection_legacy.c:450
+#: src/transport/tcp_connection_legacy.c:452
 #, c-format
 msgid "Access denied to `%s'\n"
 msgstr ""
 
-#: src/transport/tcp_connection_legacy.c:467
+#: src/transport/tcp_connection_legacy.c:469
 #, c-format
 msgid "Accepting connection from `%s': %p\n"
 msgstr ""
 
-#: src/transport/tcp_server_legacy.c:472 src/util/service.c:1109
+#: src/transport/tcp_server_legacy.c:474 src/util/service.c:1666
 #, c-format
 msgid "`%s' failed for port %d (%s).\n"
 msgstr ""
 
-#: src/transport/tcp_server_legacy.c:482 src/util/service.c:1119
+#: src/transport/tcp_server_legacy.c:484 src/util/service.c:1676
 #, c-format
 msgid "`%s' failed for port %d (%s): address already in use\n"
 msgstr ""
 
-#: src/transport/tcp_server_legacy.c:488 src/util/service.c:1125
+#: src/transport/tcp_server_legacy.c:490 src/util/service.c:1682
 #, c-format
 msgid "`%s' failed for `%s': address already in use\n"
 msgstr ""
 
-#: src/transport/tcp_server_legacy.c:888
+#: src/transport/tcp_server_legacy.c:890
 #, c-format
 msgid ""
 "Processing code for message of type %u did not call "
 "`GNUNET_SERVER_receive_done' after %s\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:337 src/util/service.c:2378
+#: src/transport/tcp_service_legacy.c:339 src/util/service.c:870
 #, c-format
 msgid "Unknown address family %d\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:344
+#: src/transport/tcp_service_legacy.c:346
 #, c-format
 msgid "Access from `%s' denied to service `%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:400 src/util/service.c:437
+#: src/transport/tcp_service_legacy.c:402 src/util/service.c:994
 #, c-format
 msgid "Could not parse IPv4 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:438 src/util/service.c:480
+#: src/transport/tcp_service_legacy.c:440 src/util/service.c:1037
 #, c-format
 msgid "Could not parse IPv6 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:902 src/util/service.c:1040
+#: src/transport/tcp_service_legacy.c:904 src/util/service.c:1597
 msgid "Could not access a pre-bound socket, will try to bind myself\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:951
-#: src/transport/tcp_service_legacy.c:969 src/util/service.c:1192
+#: src/transport/tcp_service_legacy.c:953
+#: src/transport/tcp_service_legacy.c:971 src/util/service.c:1750
 #, c-format
 msgid "Specified value for `%s' of service `%s' is invalid\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:994 src/util/service.c:1224
+#: src/transport/tcp_service_legacy.c:996 src/util/service.c:1783
 #, c-format
 msgid "Could not access pre-bound socket %u, will try to bind myself\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1159
+#: src/transport/tcp_service_legacy.c:1161
 #, c-format
 msgid "Failed to start `%s' at `%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1200
+#: src/transport/tcp_service_legacy.c:1202
 #, c-format
 msgid "Service `%s' runs at %s\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1249 src/util/service.c:1498
+#: src/transport/tcp_service_legacy.c:1251 src/util/service.c:2057
 msgid "Service process failed to initialize\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1253 src/util/service.c:1502
+#: src/transport/tcp_service_legacy.c:1255 src/util/service.c:2061
 msgid "Service process could not initialize server function\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1257 src/util/service.c:1506
+#: src/transport/tcp_service_legacy.c:1259 src/util/service.c:2065
 msgid "Service process failed to report status\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1311 src/util/disk.c:1521
-#: src/util/service.c:1376
+#: src/transport/tcp_service_legacy.c:1313 src/util/disk.c:1525
+#: src/util/service.c:1935
 #, c-format
 msgid "Cannot obtain information about user `%s': %s\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1312 src/util/service.c:1378
+#: src/transport/tcp_service_legacy.c:1314 src/util/service.c:1937
 msgid "No such user"
 msgstr "Aucun utilisateur trouvé"
 
-#: src/transport/tcp_service_legacy.c:1325 src/util/service.c:1397
+#: src/transport/tcp_service_legacy.c:1327 src/util/service.c:1956
 #, c-format
 msgid "Cannot change user/group to `%s': %s\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1396 src/util/service.c:1757
+#: src/transport/tcp_service_legacy.c:1398 src/util/service.c:2318
 msgid "do daemonize (detach from terminal)"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1446 src/util/program.c:277
-#: src/util/service.c:1820
+#: src/transport/tcp_service_legacy.c:1448 src/util/service.c:2382
+#: src/util/service.c:2397
 #, c-format
 msgid "Malformed configuration file `%s', exit ...\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1456 src/util/program.c:297
-#: src/util/service.c:1831
+#: src/transport/tcp_service_legacy.c:1458 src/util/service.c:2409
 msgid "Malformed configuration, exit ...\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1461 src/util/program.c:290
-#: src/util/service.c:1837
+#: src/transport/tcp_service_legacy.c:1463
 #, c-format
 msgid "Could not access configuration file `%s'\n"
 msgstr ""
 
-#: src/util/bio.c:179 src/util/bio.c:187
+#: src/transport/transport_api2_communication.c:764
+msgid "Dropped backchanel message: handler not provided by communicator\n"
+msgstr ""
+
+#: src/util/bio.c:181 src/util/bio.c:189
 #, c-format
 msgid "Error reading `%s': %s"
 msgstr "Erreur de lecture : « %s » : %s"
 
-#: src/util/bio.c:189
+#: src/util/bio.c:191
 msgid "End of file"
 msgstr "Fin de fichier"
 
-#: src/util/bio.c:246
+#: src/util/bio.c:248
 #, c-format
 msgid "Error reading length of string `%s'"
 msgstr ""
 
-#: src/util/bio.c:256
+#: src/util/bio.c:258
 #, c-format
 msgid "String `%s' longer than allowed (%u > %u)"
 msgstr ""
 
-#: src/util/bio.c:304
+#: src/util/bio.c:306
 #, c-format
 msgid "Serialized metadata `%s' larger than allowed (%u>%u)"
 msgstr ""
 
-#: src/util/bio.c:326
+#: src/util/bio.c:328
 #, c-format
 msgid "Metadata `%s' failed to deserialize"
 msgstr ""
 
-#: src/util/client.c:732
+#: src/util/client.c:734
 msgid "not a valid filename"
 msgstr ""
 
-#: src/util/client.c:923
+#: src/util/client.c:925
 #, c-format
 msgid "Need a non-empty hostname for service `%s'.\n"
 msgstr ""
 
-#: src/util/common_logging.c:257 src/util/common_logging.c:1159
+#: src/util/common_logging.c:259 src/util/common_logging.c:1162
 msgid "DEBUG"
 msgstr "DEBUG"
 
-#: src/util/common_logging.c:259 src/util/common_logging.c:1157
+#: src/util/common_logging.c:261 src/util/common_logging.c:1160
 msgid "INFO"
 msgstr "INFO"
 
-#: src/util/common_logging.c:261 src/util/common_logging.c:1155
+#: src/util/common_logging.c:263 src/util/common_logging.c:1158
 msgid "MESSAGE"
 msgstr ""
 
-#: src/util/common_logging.c:263 src/util/common_logging.c:1153
+#: src/util/common_logging.c:265 src/util/common_logging.c:1156
 msgid "WARNING"
 msgstr "AVERTISSEMENT"
 
-#: src/util/common_logging.c:265 src/util/common_logging.c:1151
+#: src/util/common_logging.c:267 src/util/common_logging.c:1154
 msgid "ERROR"
 msgstr "ERREUR"
 
-#: src/util/common_logging.c:267 src/util/common_logging.c:1161
+#: src/util/common_logging.c:269 src/util/common_logging.c:1164
 msgid "NONE"
 msgstr "AUCUN"
 
-#: src/util/common_logging.c:631 src/util/common_logging.c:661
+#: src/util/common_logging.c:633 src/util/common_logging.c:663
 #, c-format
 msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n"
 msgstr ""
 
-#: src/util/common_logging.c:895
+#: src/util/common_logging.c:898
 #, c-format
 msgid "Message `%.*s' repeated %u times in the last %s\n"
 msgstr ""
 
-#: src/util/common_logging.c:1162
+#: src/util/common_logging.c:1165
 msgid "INVALID"
 msgstr "INVALIDE"
 
-#: src/util/common_logging.c:1455
+#: src/util/common_logging.c:1458
 msgid "unknown address"
 msgstr "adresse inconnue"
 
-#: src/util/common_logging.c:1497
+#: src/util/common_logging.c:1500
 msgid "invalid address"
 msgstr "adresse invalide"
 
-#: src/util/common_logging.c:1515
+#: src/util/common_logging.c:1518
 #, c-format
 msgid "Configuration fails to specify option `%s' in section `%s'!\n"
 msgstr ""
 
-#: src/util/common_logging.c:1536
+#: src/util/common_logging.c:1539
 #, c-format
 msgid ""
 "Configuration specifies invalid value for option `%s' in section `%s': %s\n"
 msgstr ""
 
-#: src/util/configuration.c:294
+#: src/util/configuration.c:331
 #, c-format
 msgid "Syntax error while deserializing in line %u\n"
 msgstr ""
 
-#: src/util/configuration.c:361
+#: src/util/configuration.c:398
 #, fuzzy, c-format
 msgid "Error while reading file `%s'\n"
 msgstr "Erreur de lecture : « %s » : %s"
 
-#: src/util/configuration.c:970
+#: src/util/configuration.c:1016
 msgid "Not a valid relative time specification"
 msgstr ""
 
-#: src/util/configuration.c:1059
+#: src/util/configuration.c:1105
 #, c-format
 msgid ""
 "Configuration value '%s' for '%s' in section '%s' is not in set of legal "
 "choices\n"
 msgstr ""
 
-#: src/util/configuration.c:1178
+#: src/util/configuration.c:1224
 #, c-format
 msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n"
 msgstr ""
 
-#: src/util/configuration.c:1211
+#: src/util/configuration.c:1257
 #, c-format
 msgid "Missing closing `%s' in option `%s'\n"
 msgstr ""
 
-#: src/util/configuration.c:1279
+#: src/util/configuration.c:1325
 #, c-format
 msgid ""
 "Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined "
 "as an environmental variable\n"
 msgstr ""
 
-#: src/util/container_bloomfilter.c:530
+#: src/util/container_bloomfilter.c:532
 #, c-format
 msgid ""
 "Size of file on disk is incorrect for this Bloom filter (want %llu, have "
 "%llu)\n"
 msgstr ""
 
-#: src/util/crypto_ecc.c:860
+#: src/util/crypto_ecc.c:862
 #, c-format
 msgid "ECC signing failed at %s:%d: %s\n"
 msgstr ""
 
-#: src/util/crypto_ecc.c:915
+#: src/util/crypto_ecc.c:917
 #, c-format
 msgid "EdDSA signing failed at %s:%d: %s\n"
 msgstr ""
 
-#: src/util/crypto_ecc.c:994
+#: src/util/crypto_ecc.c:996
 #, c-format
 msgid "ECDSA signature verification failed at %s:%d: %s\n"
 msgstr ""
 
-#: src/util/crypto_ecc.c:1055
+#: src/util/crypto_ecc.c:1057
 #, c-format
 msgid "EdDSA signature verification failed at %s:%d: %s\n"
 msgstr ""
 
-#: src/util/crypto_ecc_setup.c:121 src/util/crypto_ecc_setup.c:160
-#: src/util/crypto_ecc_setup.c:303 src/util/crypto_ecc_setup.c:350
+#: src/util/crypto_ecc_setup.c:123 src/util/crypto_ecc_setup.c:162
+#: src/util/crypto_ecc_setup.c:305 src/util/crypto_ecc_setup.c:352
 #, c-format
 msgid "Could not acquire lock on file `%s': %s...\n"
 msgstr ""
 
-#: src/util/crypto_ecc_setup.c:127 src/util/crypto_ecc_setup.c:309
+#: src/util/crypto_ecc_setup.c:129 src/util/crypto_ecc_setup.c:311
 msgid "Creating a new private key.  This may take a while.\n"
 msgstr ""
 
-#: src/util/crypto_ecc_setup.c:164 src/util/crypto_ecc_setup.c:354
+#: src/util/crypto_ecc_setup.c:166 src/util/crypto_ecc_setup.c:356
 msgid "This may be ok if someone is currently generating a private key.\n"
 msgstr ""
 
-#: src/util/crypto_ecc_setup.c:194 src/util/crypto_ecc_setup.c:396
+#: src/util/crypto_ecc_setup.c:196 src/util/crypto_ecc_setup.c:398
 #, c-format
 msgid ""
 "When trying to read key file `%s' I found %u bytes but I need at least %u.\n"
 msgstr ""
 
-#: src/util/crypto_ecc_setup.c:199 src/util/crypto_ecc_setup.c:400
+#: src/util/crypto_ecc_setup.c:201 src/util/crypto_ecc_setup.c:402
 msgid "This may be ok if someone is currently generating a key.\n"
 msgstr ""
 
-#: src/util/crypto_ecc_setup.c:466
+#: src/util/crypto_ecc_setup.c:468
 msgid "Could not load peer's private key\n"
 msgstr ""
 
-#: src/util/crypto_random.c:304
+#: src/util/crypto_random.c:306
 #, c-format
 msgid "libgcrypt has not the expected version (version %s is required).\n"
 msgstr ""
 
-#: src/util/crypto_rsa.c:848
+#: src/util/crypto_rsa.c:850
 #, c-format
 msgid "RSA signing failed at %s:%d: %s\n"
 msgstr ""
 
-#: src/util/crypto_rsa.c:1187
+#: src/util/crypto_rsa.c:1189
 #, c-format
 msgid "RSA signature verification failed at %s:%d: %s\n"
 msgstr ""
 
-#: src/util/disk.c:1251
+#: src/util/disk.c:1255
 #, c-format
 msgid "Expected `%s' to be a directory!\n"
 msgstr ""
 
-#: src/util/dnsparser.c:250
+#: src/util/dnsparser.c:264
 #, c-format
 msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n"
 msgstr ""
 
-#: src/util/dnsparser.c:940
+#: src/util/dnsparser.c:954
 #, c-format
 msgid "Failed to convert UTF-8 name `%s' to DNS IDNA format: %s\n"
 msgstr ""
 
-#: src/util/dnsstub.c:229
+#: src/util/dnsstub.c:231
 #, c-format
 msgid "Could not bind to any port: %s\n"
 msgstr ""
 
-#: src/util/dnsstub.c:360
+#: src/util/dnsstub.c:362
 #, c-format
 msgid "Received DNS response that is too small (%u bytes)"
 msgstr ""
 
-#: src/util/dnsstub.c:507
+#: src/util/dnsstub.c:509
 #, fuzzy, c-format
 msgid "Failed to send DNS request to %s: %s\n"
 msgstr "Résolution de « %s » échouée : %s\n"
 
-#: src/util/dnsstub.c:513
+#: src/util/dnsstub.c:515
 #, c-format
 msgid "Sent DNS request to %s\n"
 msgstr ""
@@ -8255,139 +8089,139 @@ msgstr ""
 msgid "Missing mandatory option `%s'.\n"
 msgstr ""
 
-#: src/util/getopt_helpers.c:68
+#: src/util/getopt_helpers.c:70
 msgid "print the version number"
 msgstr ""
 
-#: src/util/getopt_helpers.c:113
+#: src/util/getopt_helpers.c:116
 #, c-format
 msgid ""
 "Arguments mandatory for long options are also mandatory for short options.\n"
 msgstr ""
 
-#: src/util/getopt_helpers.c:201
+#: src/util/getopt_helpers.c:204
 msgid "print this help"
 msgstr ""
 
-#: src/util/getopt_helpers.c:279
+#: src/util/getopt_helpers.c:282
 msgid "be verbose"
 msgstr ""
 
-#: src/util/getopt_helpers.c:420
+#: src/util/getopt_helpers.c:423
 msgid "configure logging to use LOGLEVEL"
 msgstr ""
 
-#: src/util/getopt_helpers.c:500
+#: src/util/getopt_helpers.c:503
 msgid "configure logging to write logs to FILENAME"
 msgstr ""
 
-#: src/util/getopt_helpers.c:522
+#: src/util/getopt_helpers.c:525
 #, fuzzy
 msgid "use configuration file FILENAME"
 msgstr "fornat invalide : « %s »\n"
 
-#: src/util/getopt_helpers.c:559 src/util/getopt_helpers.c:763
-#: src/util/getopt_helpers.c:830
+#: src/util/getopt_helpers.c:564 src/util/getopt_helpers.c:770
+#: src/util/getopt_helpers.c:839
 #, c-format
 msgid "You must pass a number to the `%s' option.\n"
 msgstr ""
 
-#: src/util/getopt_helpers.c:624
+#: src/util/getopt_helpers.c:629
 #, c-format
 msgid "You must pass relative time to the `%s' option.\n"
 msgstr ""
 
-#: src/util/getopt_helpers.c:690
+#: src/util/getopt_helpers.c:695
 #, c-format
 msgid "You must pass absolute time to the `%s' option.\n"
 msgstr ""
 
-#: src/util/getopt_helpers.c:754
+#: src/util/getopt_helpers.c:760
 #, c-format
 msgid "Your input for the '%s' option has to be a non negative number \n"
 msgstr ""
 
-#: src/util/getopt_helpers.c:837
+#: src/util/getopt_helpers.c:846
 #, c-format
 msgid "You must pass a number below %u to the `%s' option.\n"
 msgstr ""
 
-#: src/util/getopt_helpers.c:923
+#: src/util/getopt_helpers.c:932
 #, c-format
 msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n"
 msgstr ""
 
-#: src/util/gnunet-config.c:157
+#: src/util/gnunet-config.c:160
 #, fuzzy, c-format
 msgid "failed to load configuration defaults"
 msgstr "fornat invalide : « %s »\n"
 
-#: src/util/gnunet-config.c:170
+#: src/util/gnunet-config.c:173
 #, c-format
-msgid "--section argument is required\n"
+msgid "%s or %s argument is required\n"
 msgstr ""
 
-#: src/util/gnunet-config.c:173
+#: src/util/gnunet-config.c:181
 #, c-format
 msgid "The following sections are available:\n"
 msgstr ""
 
-#: src/util/gnunet-config.c:224
+#: src/util/gnunet-config.c:232
 #, c-format
 msgid "--option argument required to set value\n"
 msgstr ""
 
-#: src/util/gnunet-config.c:263
+#: src/util/gnunet-config.c:286
 msgid "obtain option of value as a filename (with $-expansion)"
 msgstr ""
 
-#: src/util/gnunet-config.c:268
+#: src/util/gnunet-config.c:291
 msgid "name of the section to access"
 msgstr ""
 
-#: src/util/gnunet-config.c:273
+#: src/util/gnunet-config.c:296
 msgid "name of the option to access"
 msgstr ""
 
-#: src/util/gnunet-config.c:278
+#: src/util/gnunet-config.c:301
 msgid "value to set"
 msgstr ""
 
-#: src/util/gnunet-config.c:282
+#: src/util/gnunet-config.c:305
 msgid "print available configuration sections"
 msgstr ""
 
-#: src/util/gnunet-config.c:286
+#: src/util/gnunet-config.c:309
 msgid "write configuration file that only contains delta to defaults"
 msgstr ""
 
-#: src/util/gnunet-config.c:299
+#: src/util/gnunet-config.c:322
 msgid "Manipulate GNUnet configuration files"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:92
+#: src/util/gnunet-ecc.c:94
 #, c-format
 msgid "Failed to open `%s': %s\n"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:128
+#: src/util/gnunet-ecc.c:130
 #, c-format
 msgid "Generating %u keys like %s, please wait"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:141
+#: src/util/gnunet-ecc.c:143
 #, c-format
 msgid "Generating %u keys, please wait"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:182
+#: src/util/gnunet-ecc.c:184
 #, c-format
 msgid ""
 "\n"
 "Failed to write to `%s': %s\n"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:192
+#: src/util/gnunet-ecc.c:194
 #, c-format
 msgid ""
 "\n"
@@ -8396,94 +8230,94 @@ msgstr ""
 "\n"
 "Terminé !\n"
 
-#: src/util/gnunet-ecc.c:195
+#: src/util/gnunet-ecc.c:197
 #, c-format
 msgid ""
 "\n"
 "Error, %u keys not generated\n"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:288
+#: src/util/gnunet-ecc.c:290
 #, c-format
 msgid "Hostkeys file `%s' not found\n"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:303
+#: src/util/gnunet-ecc.c:305
 #, c-format
 msgid "Hostkeys file `%s' is empty\n"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:332
+#: src/util/gnunet-ecc.c:334
 #, c-format
 msgid "Could not read hostkey file: %s\n"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:389
+#: src/util/gnunet-ecc.c:391
 msgid "No hostkey file specified on command line\n"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:454
+#: src/util/gnunet-ecc.c:456
 msgid "list keys included in a file (for testing)"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:459
+#: src/util/gnunet-ecc.c:461
 msgid "number of keys to list included in a file (for testing)"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:464
+#: src/util/gnunet-ecc.c:466
 msgid "create COUNT public-private key pairs (for testing)"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:468
+#: src/util/gnunet-ecc.c:470
 msgid "print the public key in ASCII format"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:472
+#: src/util/gnunet-ecc.c:474
 msgid "print the private key in ASCII format"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:476
+#: src/util/gnunet-ecc.c:478
 msgid "print the public key in HEX format"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:480
+#: src/util/gnunet-ecc.c:482
 msgid "print examples of ECC operations (used for compatibility testing)"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:496
+#: src/util/gnunet-ecc.c:498
 msgid "Manipulate GNUnet private ECC key files"
 msgstr ""
 
-#: src/util/gnunet-resolver.c:166
+#: src/util/gnunet-resolver.c:168
 msgid "perform a reverse lookup"
 msgstr ""
 
-#: src/util/gnunet-resolver.c:177
+#: src/util/gnunet-resolver.c:179
 msgid "Use build-in GNUnet stub resolver"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:240
+#: src/util/gnunet-scrypt.c:242
 #, c-format
 msgid "Loading hostkey from `%s' failed.\n"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:315
+#: src/util/gnunet-scrypt.c:317
 msgid "number of bits to require for the proof of work"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:320
+#: src/util/gnunet-scrypt.c:322
 msgid "file with private key, otherwise default is used"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:325
+#: src/util/gnunet-scrypt.c:327
 msgid "file with proof of work, otherwise default is used"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:330
+#: src/util/gnunet-scrypt.c:332
 msgid "time to wait between calculations"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:343
+#: src/util/gnunet-scrypt.c:345
 msgid "Manipulate GNUnet proof of work files"
 msgstr ""
 
@@ -8491,471 +8325,525 @@ msgstr ""
 msgid "No DNS server available. DNS resolution will not be possible.\n"
 msgstr ""
 
-#: src/util/gnunet-uri.c:83
+#: src/util/gnunet-uri.c:85
 #, c-format
 msgid "No URI specified on command line\n"
 msgstr ""
 
-#: src/util/gnunet-uri.c:89
+#: src/util/gnunet-uri.c:91
 #, c-format
 msgid "Invalid URI: does not start with `%s'\n"
 msgstr ""
 
-#: src/util/gnunet-uri.c:96
+#: src/util/gnunet-uri.c:98
 #, c-format
 msgid "Invalid URI: fails to specify subsystem\n"
 msgstr ""
 
-#: src/util/gnunet-uri.c:106
+#: src/util/gnunet-uri.c:108
 #, c-format
 msgid "No handler known for subsystem `%s'\n"
 msgstr ""
 
-#: src/util/gnunet-uri.c:168
+#: src/util/gnunet-uri.c:170
 msgid "Perform default-actions for GNUnet URIs"
 msgstr ""
 
-#: src/util/helper.c:333
+#: src/util/helper.c:335
 #, c-format
 msgid "Error reading from `%s': %s\n"
 msgstr ""
 
-#: src/util/helper.c:384
+#: src/util/helper.c:386
 #, c-format
 msgid "Failed to parse inbound message from helper `%s'\n"
 msgstr ""
 
-#: src/util/helper.c:604
+#: src/util/helper.c:606
 #, c-format
 msgid "Error writing to `%s': %s\n"
 msgstr ""
 
-#: src/util/network.c:134
+#: src/util/network.c:136
 #, c-format
 msgid "Unable to shorten unix path `%s' while keeping name unique\n"
 msgstr ""
 
-#: src/util/network.c:1793 src/util/network.c:1977
+#: src/util/network.c:1794 src/util/network.c:1978
 #, c-format
 msgid ""
 "Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n"
 msgstr ""
 
-#: src/util/os_installation.c:507
+#: src/util/os_installation.c:509
 #, c-format
 msgid ""
 "Could not determine installation path for %s.  Set `%s' environment "
 "variable.\n"
 msgstr ""
 
-#: src/util/os_installation.c:879
+#: src/util/os_installation.c:881
 #, c-format
 msgid "Could not find binary `%s' in PATH!\n"
 msgstr ""
 
-#: src/util/os_installation.c:920
+#: src/util/os_installation.c:922
 #, c-format
 msgid "Binary `%s' exists, but is not SUID\n"
 msgstr ""
 
-#: src/util/os_installation.c:951
+#: src/util/os_installation.c:953
 #, c-format
 msgid "CreateProcess failed for binary %s (%d).\n"
 msgstr ""
 
-#: src/util/os_installation.c:961
+#: src/util/os_installation.c:963
 #, c-format
 msgid "GetExitCodeProcess failed for binary %s (%d).\n"
 msgstr ""
 
-#: src/util/plugin.c:84
+#: src/util/plugin.c:86
 #, c-format
 msgid "Initialization of plugin mechanism failed: %s!\n"
 msgstr ""
 
-#: src/util/plugin.c:149
+#: src/util/plugin.c:151
 #, c-format
 msgid "`%s' failed to resolve method '%s' with error: %s\n"
 msgstr ""
 
-#: src/util/plugin.c:224
+#: src/util/plugin.c:226
 #, c-format
 msgid "`%s' failed for library `%s' with error: %s\n"
 msgstr ""
 
-#: src/util/plugin.c:383
+#: src/util/plugin.c:385
 msgid "Could not determine plugin installation path.\n"
 msgstr ""
 
-#: src/util/regex.c:132
+#: src/util/program.c:283
+#, fuzzy, c-format
+msgid "Unreadable or malformed configuration file `%s', exit ...\n"
+msgstr "fornat invalide : « %s »\n"
+
+#: src/util/program.c:301
+#, c-format
+msgid "Unreadable or malformed default configuration file `%s', exit ...\n"
+msgstr ""
+
+#: src/util/program.c:318
+#, fuzzy
+msgid "Unreadable or malformed configuration, exit ...\n"
+msgstr "fornat invalide : « %s »\n"
+
+#: src/util/regex.c:134
 #, c-format
 msgid "Bad mask: %d\n"
 msgstr "Masque érroné : %d\n"
 
-#: src/util/resolver_api.c:216
+#: src/util/resolver_api.c:218
 #, c-format
 msgid ""
 "Missing `%s' for `%s' in configuration, DNS resolution will be unavailable.\n"
 msgstr ""
 
-#: src/util/resolver_api.c:237
+#: src/util/resolver_api.c:239
 #, c-format
 msgid ""
 "Missing `%s' or numeric IP address for `%s' of `%s' in configuration, DNS "
 "resolution will be unavailable.\n"
 msgstr ""
 
-#: src/util/resolver_api.c:873
+#: src/util/resolver_api.c:875
 #, c-format
 msgid "Timeout trying to resolve hostname `%s'.\n"
 msgstr ""
 
-#: src/util/resolver_api.c:886
+#: src/util/resolver_api.c:888
 #, c-format
 msgid "Timeout trying to resolve IP address `%s'.\n"
 msgstr ""
 
-#: src/util/resolver_api.c:1071
+#: src/util/resolver_api.c:1073
 msgid "Resolver not configured correctly.\n"
 msgstr ""
 
-#: src/util/resolver_api.c:1158 src/util/resolver_api.c:1181
-#: src/util/resolver_api.c:1195
+#: src/util/resolver_api.c:1160 src/util/resolver_api.c:1183
+#: src/util/resolver_api.c:1197
 #, fuzzy, c-format
 msgid "Could not resolve our FQDN: %s\n"
 msgstr "Résolution de « %s » échouée : %s\n"
 
-#: src/util/service.c:1303
-msgid ""
-"Could not bind to any of the ports I was supposed to, refusing to run!\n"
-msgstr ""
-
-#: src/util/service.c:2123
+#: src/util/service.c:674
 #, c-format
 msgid ""
 "Processing code for message of type %u did not call "
 "`GNUNET_SERVICE_client_continue' after %s\n"
 msgstr ""
 
-#: src/util/signal.c:87
+#: src/util/service.c:1862
+msgid ""
+"Could not bind to any of the ports I was supposed to, refusing to run!\n"
+msgstr ""
+
+#: src/util/signal.c:89
 #, c-format
 msgid "signal (%d, %p) returned %d.\n"
 msgstr ""
 
-#: src/util/socks.c:595
+#: src/util/socks.c:597
 #, c-format
 msgid "Attempting to use invalid port %d as SOCKS proxy for service `%s'.\n"
 msgstr ""
 
-#: src/util/socks.c:614
+#: src/util/socks.c:616
 #, c-format
 msgid "Attempting to proxy service `%s' to invalid port %d or hostname.\n"
 msgstr ""
 
-#: src/util/strings.c:174
+#: src/util/strings.c:176
 msgid "b"
 msgstr "o"
 
-#: src/util/strings.c:471
+#: src/util/strings.c:475
 #, c-format
 msgid "Character sets requested were `%s'->`%s'\n"
 msgstr ""
 
-#: src/util/strings.c:598
+#: src/util/strings.c:602
 msgid "Failed to expand `$HOME': environment variable `HOME' not set"
 msgstr ""
 
-#: src/util/strings.c:702
+#: src/util/strings.c:706
 msgid "µs"
 msgstr "µs"
 
-#: src/util/strings.c:706
+#: src/util/strings.c:710
 msgid "forever"
 msgstr "perpetuel"
 
-#: src/util/strings.c:708
+#: src/util/strings.c:712
 msgid "0 ms"
 msgstr "0 ms"
 
-#: src/util/strings.c:714
+#: src/util/strings.c:718
 msgid "ms"
 msgstr "ms"
 
-#: src/util/strings.c:720
+#: src/util/strings.c:724
 msgid "s"
 msgstr "s"
 
-#: src/util/strings.c:726
+#: src/util/strings.c:730
 msgid "m"
 msgstr "m"
 
-#: src/util/strings.c:732
+#: src/util/strings.c:736
 msgid "h"
 msgstr "h"
 
-#: src/util/strings.c:739
+#: src/util/strings.c:743
 msgid "day"
 msgstr "jour"
 
-#: src/util/strings.c:741
+#: src/util/strings.c:745
 msgid "days"
 msgstr "jours"
 
-#: src/util/strings.c:770
+#: src/util/strings.c:774
 msgid "end of time"
 msgstr "fin du temps"
 
-#: src/util/strings.c:1272
+#: src/util/strings.c:1277
 msgid "IPv6 address did not start with `['\n"
 msgstr ""
 
-#: src/util/strings.c:1280
+#: src/util/strings.c:1285
 msgid "IPv6 address did contain ':' to separate port number\n"
 msgstr ""
 
-#: src/util/strings.c:1286
+#: src/util/strings.c:1291
 msgid "IPv6 address did contain ']' before ':' to separate port number\n"
 msgstr ""
 
-#: src/util/strings.c:1293
+#: src/util/strings.c:1301
 msgid "IPv6 address did contain a valid port number after the last ':'\n"
 msgstr ""
 
-#: src/util/strings.c:1302
+#: src/util/strings.c:1310
 #, c-format
 msgid "Invalid IPv6 address `%s': %s\n"
 msgstr ""
 
-#: src/util/strings.c:1574 src/util/strings.c:1590
+#: src/util/strings.c:1586 src/util/strings.c:1602
 msgid "Port not in range\n"
 msgstr ""
 
-#: src/util/strings.c:1599
+#: src/util/strings.c:1611
 #, c-format
 msgid "Malformed port policy `%s'\n"
 msgstr ""
 
-#: src/util/strings.c:1682 src/util/strings.c:1713 src/util/strings.c:1761
-#: src/util/strings.c:1782
+#: src/util/strings.c:1696 src/util/strings.c:1728 src/util/strings.c:1777
+#: src/util/strings.c:1798
 #, c-format
 msgid "Invalid format for IP: `%s'\n"
 msgstr ""
 
-#: src/util/strings.c:1739
+#: src/util/strings.c:1754
 #, c-format
 msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)."
 msgstr ""
 
-#: src/util/strings.c:1791
+#: src/util/strings.c:1807
 #, c-format
 msgid "Invalid format: `%s'\n"
 msgstr "fornat invalide : « %s »\n"
 
-#: src/util/strings.c:1843
+#: src/util/strings.c:1860
 #, c-format
 msgid "Invalid network notation (does not end with ';': `%s')\n"
 msgstr ""
 
-#: src/util/strings.c:1893
+#: src/util/strings.c:1914
 #, c-format
 msgid "Wrong format `%s' for netmask\n"
 msgstr ""
 
-#: src/util/strings.c:1924
+#: src/util/strings.c:1945
 #, c-format
 msgid "Wrong format `%s' for network\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:538 src/vpn/gnunet-service-vpn.c:1805
+#: src/util/time.c:828 src/util/time.c:860
+#, c-format
+msgid "Failed to map `%s', cannot assure monotonic time!\n"
+msgstr ""
+
+#: src/util/time.c:866
+#, c-format
+msgid ""
+"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
+msgstr ""
+
+#: src/vpn/gnunet-service-vpn.c:540 src/vpn/gnunet-service-vpn.c:1807
 msgid "# Active channels"
 msgstr "# Canaux actifs"
 
-#: src/vpn/gnunet-service-vpn.c:597
+#: src/vpn/gnunet-service-vpn.c:599
 msgid "# Messages dropped in cadet queue (overflow)"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:751
+#: src/vpn/gnunet-service-vpn.c:753
 msgid "# ICMP packets received from cadet"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:1094
+#: src/vpn/gnunet-service-vpn.c:1096
 msgid "# UDP packets received from cadet"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:1253
+#: src/vpn/gnunet-service-vpn.c:1255
 msgid "# TCP packets received from cadet"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:1465
+#: src/vpn/gnunet-service-vpn.c:1467
 msgid "# Cadet channels created"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:1685
+#: src/vpn/gnunet-service-vpn.c:1687
 #, c-format
 msgid "Protocol %u not supported, dropping\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:1824
+#: src/vpn/gnunet-service-vpn.c:1826
 msgid "# Packets dropped (channel not yet online)"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2004
+#: src/vpn/gnunet-service-vpn.c:2006
 msgid "# ICMPv4 packets dropped (not allowed)"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2025
+#: src/vpn/gnunet-service-vpn.c:2027
 msgid "# ICMPv6 packets dropped (not allowed)"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2233
+#: src/vpn/gnunet-service-vpn.c:2235
 msgid "# Packets received from TUN interface"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2266 src/vpn/gnunet-service-vpn.c:2302
+#: src/vpn/gnunet-service-vpn.c:2268 src/vpn/gnunet-service-vpn.c:2304
 #, c-format
 msgid "Packet received for unmapped destination `%s' (dropping it)\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2312
+#: src/vpn/gnunet-service-vpn.c:2314
 msgid "Received IPv4 packet with options (dropping it)\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2326
+#: src/vpn/gnunet-service-vpn.c:2328
 #, c-format
 msgid "Received packet of unknown protocol %d from TUN (dropping it)\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2365
+#: src/vpn/gnunet-service-vpn.c:2367
 msgid "Failed to find unallocated IPv4 address in VPN's range\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2420
+#: src/vpn/gnunet-service-vpn.c:2422
 msgid "Failed to find unallocated IPv6 address in VPN's range\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2462 src/vpn/gnunet-service-vpn.c:2684
+#: src/vpn/gnunet-service-vpn.c:2464 src/vpn/gnunet-service-vpn.c:2686
 msgid "# Active destinations"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2733
+#: src/vpn/gnunet-service-vpn.c:2735
 msgid "Failed to allocate IP address for new destination\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2996
+#: src/vpn/gnunet-service-vpn.c:2998
 msgid "Must specify valid IPv6 address"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:3020
+#: src/vpn/gnunet-service-vpn.c:3022
 msgid "Must specify valid IPv6 mask"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:3028
+#: src/vpn/gnunet-service-vpn.c:3030
 msgid "IPv6 support disabled as this system does not support IPv6\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:3041
+#: src/vpn/gnunet-service-vpn.c:3043
 msgid "Must specify valid IPv4 address"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:3054
+#: src/vpn/gnunet-service-vpn.c:3056
 msgid "Must specify valid IPv4 mask"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:3064
+#: src/vpn/gnunet-service-vpn.c:3066
 msgid "IPv4 support disabled as this system does not support IPv4\n"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:145
+#: src/vpn/gnunet-vpn.c:147
 msgid "Error creating tunnel\n"
 msgstr "Erreur de création du tunnel\n"
 
-#: src/vpn/gnunet-vpn.c:189 src/vpn/gnunet-vpn.c:220
+#: src/vpn/gnunet-vpn.c:191 src/vpn/gnunet-vpn.c:222
 #, c-format
 msgid "Option `%s' makes no sense with option `%s'.\n"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:202
+#: src/vpn/gnunet-vpn.c:204
 #, c-format
 msgid "Option `%s' or `%s' is required.\n"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:214
+#: src/vpn/gnunet-vpn.c:216
 #, c-format
 msgid "Option `%s' or `%s' is required when using option `%s'.\n"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:234
+#: src/vpn/gnunet-vpn.c:236
 #, c-format
 msgid "`%s' is not a valid peer identifier.\n"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:254
+#: src/vpn/gnunet-vpn.c:256
 #, c-format
 msgid "`%s' is not a valid IP address.\n"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:290
+#: src/vpn/gnunet-vpn.c:292
 msgid "request that result should be an IPv4 address"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:295
+#: src/vpn/gnunet-vpn.c:297
 msgid "request that result should be an IPv6 address"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:301
+#: src/vpn/gnunet-vpn.c:303
 msgid "how long should the mapping be valid for new tunnels?"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:307
+#: src/vpn/gnunet-vpn.c:309
 msgid "destination IP for the tunnel"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:313
+#: src/vpn/gnunet-vpn.c:315
 msgid "peer offering the service we would like to access"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:319
+#: src/vpn/gnunet-vpn.c:321
 msgid "name of the service we would like to access"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:324
+#: src/vpn/gnunet-vpn.c:326
 msgid "service is offered via TCP"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:329
+#: src/vpn/gnunet-vpn.c:331
 msgid "service is offered via UDP"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:342
+#: src/vpn/gnunet-vpn.c:344
 msgid "Setup tunnels via VPN."
 msgstr "Configurer des tunnels via VPN."
 
-#: src/zonemaster/gnunet-service-zonemaster.c:836
-#: src/zonemaster/gnunet-service-zonemaster-monitor.c:414
+#: src/zonemaster/gnunet-service-zonemaster.c:838
+#: src/zonemaster/gnunet-service-zonemaster-monitor.c:416
 msgid "Failed to connect to the namestore!\n"
 msgstr ""
 
-#: src/include/gnunet_common.h:770 src/include/gnunet_common.h:777
-#: src/include/gnunet_common.h:787
+#: src/include/gnunet_common.h:772 src/include/gnunet_common.h:779
+#: src/include/gnunet_common.h:789
 #, fuzzy, c-format
 msgid "Assertion failed at %s:%d. Aborting.\n"
 msgstr "opus_encode_float() échoué : %s. Annulation\n"
 
-#: src/include/gnunet_common.h:795
+#: src/include/gnunet_common.h:797
 #, c-format
 msgid "Assertion failed at %s:%d.\n"
 msgstr ""
 
-#: src/include/gnunet_common.h:807
+#: src/include/gnunet_common.h:809
 #, c-format
 msgid "External protocol violation detected at %s:%d.\n"
 msgstr ""
 
-#: src/include/gnunet_common.h:834 src/include/gnunet_common.h:843
+#: src/include/gnunet_common.h:836 src/include/gnunet_common.h:845
 #, c-format
 msgid "`%s' failed on file `%s' at %s:%d with error: %s\n"
 msgstr ""
 
+#, fuzzy
+#~ msgid "Dropping invalid fragment\n"
+#~ msgstr "Argument invalide « %s »\n"
+
+#, fuzzy
+#~ msgid "Failed to store fragment\n"
+#~ msgstr "Échec du démarrage de %s\n"
+
+#, fuzzy
+#~ msgid "Failed to begin modifying state: %d\n"
+#~ msgstr "Échec du démarrage de %s\n"
+
+#, fuzzy
+#~ msgid "Failed to modify state: %d\n"
+#~ msgstr "Échec du démarrage de %s\n"
+
+#, fuzzy
+#~ msgid "Unable to initialize Mysql.\n"
+#~ msgstr "Résolution de « %s » échouée\n"
+
+#, fuzzy
+#~ msgid "Failed to run SQL statement `%s'\n"
+#~ msgstr "Échec du démarrage de %s\n"
+
+#, fuzzy
+#~ msgid "number of messages to replay from history"
+#~ msgstr "nombre de valeurs"
+
 #, fuzzy
 #~ msgid "Unable to connect to Postgres database '%s': %s\n"
 #~ msgstr "Résolution de « %s » échouée\n"
index 5069e0baa9490111df47b9e3a168bd3a681a260c..be1c08eee218fc96b8253cae5c2bc2387149bab0 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnunet 0.10.1\n"
 "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2018-10-20 11:13+0200\n"
+"POT-Creation-Date: 2019-02-13 00:37+0100\n"
 "PO-Revision-Date: 2018-08-29 13:48+0200\n"
 "Last-Translator: Sebastiano Pistore <SebastianoPistore.info@protonmail.ch>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
@@ -20,1005 +20,1000 @@ msgstr ""
 "X-Generator: Poedit 2.0.7\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: src/arm/gnunet-arm.c:154
+#: src/arm/gnunet-arm.c:156
 #, c-format
 msgid "Failed to remove configuration file %s\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:160
+#: src/arm/gnunet-arm.c:162
 #, c-format
 msgid "Failed to remove servicehome directory %s\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:220 src/testbed/gnunet-service-testbed_peers.c:1137
+#: src/arm/gnunet-arm.c:222 src/testbed/gnunet-service-testbed_peers.c:1139
 msgid "Message was sent successfully"
 msgstr "Messaggio inviato con successo"
 
-#: src/arm/gnunet-arm.c:222 src/testbed/gnunet-service-testbed_peers.c:1139
+#: src/arm/gnunet-arm.c:224 src/testbed/gnunet-service-testbed_peers.c:1141
 msgid "We disconnected from ARM before we could send a request"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:224 src/testbed/gnunet-service-testbed_peers.c:1141
+#: src/arm/gnunet-arm.c:226 src/testbed/gnunet-service-testbed_peers.c:1143
 msgid "Unknown request status"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:240
+#: src/arm/gnunet-arm.c:242
 #, fuzzy
 msgid "is stopped"
 msgstr "# elementi memorizzati"
 
-#: src/arm/gnunet-arm.c:242
+#: src/arm/gnunet-arm.c:244
 msgid "is starting"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:244
+#: src/arm/gnunet-arm.c:246
 msgid "is stopping"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:246
+#: src/arm/gnunet-arm.c:248
 msgid "is starting already"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:248
+#: src/arm/gnunet-arm.c:250
 msgid "is stopping already"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:250
+#: src/arm/gnunet-arm.c:252
 msgid "is started already"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:252
+#: src/arm/gnunet-arm.c:254
 msgid "is stopped already"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:254
+#: src/arm/gnunet-arm.c:256
 msgid "service is not known to ARM"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:256
+#: src/arm/gnunet-arm.c:258
 msgid "service failed to start"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:258
+#: src/arm/gnunet-arm.c:260
 msgid "service cannot be manipulated because ARM is shutting down"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:260
+#: src/arm/gnunet-arm.c:262
 msgid "Unknown result code."
 msgstr ""
 
-#: src/arm/gnunet-arm.c:292
+#: src/arm/gnunet-arm.c:295
 msgid "Fatal error initializing ARM API.\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:320 src/arm/gnunet-arm.c:329
+#: src/arm/gnunet-arm.c:324 src/arm/gnunet-arm.c:333
 #, c-format
 msgid "Failed to start the ARM service: %s\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:363
+#: src/arm/gnunet-arm.c:368
 #, c-format
 msgid "Failed to send a stop request to the ARM service: %s\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:374
+#: src/arm/gnunet-arm.c:379
 #, c-format
 msgid "Failed to stop the ARM service: %s\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:413
+#: src/arm/gnunet-arm.c:419
 #, c-format
 msgid "Failed to send a request to start the `%s' service: %s\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:423
+#: src/arm/gnunet-arm.c:429
 #, c-format
 msgid "Failed to start the `%s' service: %s\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:460
+#: src/arm/gnunet-arm.c:467
 #, c-format
 msgid "Failed to send a request to kill the `%s' service: %%s\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:471
+#: src/arm/gnunet-arm.c:478
 #, c-format
 msgid "Failed to kill the `%s' service: %s\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:511
+#: src/arm/gnunet-arm.c:519
 #, c-format
 msgid "Failed to request a list of services: %s\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:520
+#: src/arm/gnunet-arm.c:528
 msgid "Error communicating with ARM. ARM not running?\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:526
+#: src/arm/gnunet-arm.c:534
 msgid "Running services:\n"
 msgstr "Servizi in esecuzione:\n"
 
-#: src/arm/gnunet-arm.c:614
+#: src/arm/gnunet-arm.c:623
 #, c-format
 msgid "Now only monitoring, press CTRL-C to stop.\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:646
+#: src/arm/gnunet-arm.c:656
 #, c-format
 msgid "Stopped %s.\n"
 msgstr "%s arrestato.\n"
 
-#: src/arm/gnunet-arm.c:649
+#: src/arm/gnunet-arm.c:659
 #, c-format
 msgid "Starting %s...\n"
 msgstr "Avvio di %s in corso...\n"
 
-#: src/arm/gnunet-arm.c:652
+#: src/arm/gnunet-arm.c:662
 #, c-format
 msgid "Stopping %s...\n"
 msgstr "Arresto di %s in corso...\n"
 
-#: src/arm/gnunet-arm.c:666
+#: src/arm/gnunet-arm.c:676
 #, c-format
 msgid "Unknown status %u for service %s.\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:767
+#: src/arm/gnunet-arm.c:766
 msgid "stop all GNUnet services"
 msgstr "arresta tutti i servizi GNUnet"
 
-#: src/arm/gnunet-arm.c:773
+#: src/arm/gnunet-arm.c:771
 msgid "start a particular service"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:779
+#: src/arm/gnunet-arm.c:776
 msgid "stop a particular service"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:784
+#: src/arm/gnunet-arm.c:780
 msgid "start all GNUnet default services"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:789
+#: src/arm/gnunet-arm.c:784
 msgid "stop and start all GNUnet default services"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:793
+#: src/arm/gnunet-arm.c:788
 msgid "delete config file and directory on exit"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:798
+#: src/arm/gnunet-arm.c:792
 msgid "monitor ARM activities"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:803
+#: src/arm/gnunet-arm.c:796
 msgid "don't print status messages"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:809
+#: src/arm/gnunet-arm.c:801
 msgid "exit with error status if operation does not finish after DELAY"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:814
+#: src/arm/gnunet-arm.c:805
 msgid "list currently running services"
 msgstr "elenca i servizi in esecuzione"
 
-#: src/arm/gnunet-arm.c:819
+#: src/arm/gnunet-arm.c:809
 msgid "don't let gnunet-service-arm inherit standard output"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:824
+#: src/arm/gnunet-arm.c:813
 msgid "don't let gnunet-service-arm inherit standard error"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:837
+#: src/arm/gnunet-arm.c:828
 msgid "Control services and the Automated Restart Manager (ARM)"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:386 src/transport/plugin_transport_tcp.c:1118
-#: src/transport/plugin_transport_xt.c:1118
-#: src/transport/tcp_service_legacy.c:555 src/util/service.c:610
+#: src/arm/gnunet-service-arm.c:388 src/transport/plugin_transport_tcp.c:1120
+#: src/transport/plugin_transport_xt.c:1120
+#: src/transport/tcp_service_legacy.c:557 src/util/service.c:1167
 #, c-format
 msgid ""
 "Disabling IPv6 support for service `%s', failed to create IPv6 socket: %s\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:410 src/arm/gnunet-service-arm.c:416
-#: src/transport/plugin_transport_tcp.c:1137
-#: src/transport/plugin_transport_tcp.c:1143
-#: src/transport/plugin_transport_tcp.c:3823
-#: src/transport/plugin_transport_xt.c:1137
-#: src/transport/plugin_transport_xt.c:1143
-#: src/transport/plugin_transport_xt.c:3831
-#: src/transport/tcp_service_legacy.c:574
-#: src/transport/tcp_service_legacy.c:580 src/util/service.c:635
-#: src/util/service.c:641
+#: src/arm/gnunet-service-arm.c:412 src/arm/gnunet-service-arm.c:418
+#: src/transport/plugin_transport_tcp.c:1139
+#: src/transport/plugin_transport_tcp.c:1145
+#: src/transport/plugin_transport_tcp.c:3829
+#: src/transport/plugin_transport_xt.c:1139
+#: src/transport/plugin_transport_xt.c:1145
+#: src/transport/plugin_transport_xt.c:3833
+#: src/transport/tcp_service_legacy.c:576
+#: src/transport/tcp_service_legacy.c:582 src/util/service.c:1192
+#: src/util/service.c:1198
 #, c-format
 msgid "Require valid port number for service `%s' in configuration!\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:455 src/transport/plugin_transport_tcp.c:1174
-#: src/transport/plugin_transport_xt.c:1174
-#: src/transport/tcp_service_legacy.c:611 src/util/client.c:504
-#: src/util/service.c:680
+#: src/arm/gnunet-service-arm.c:457 src/transport/plugin_transport_tcp.c:1176
+#: src/transport/plugin_transport_xt.c:1176
+#: src/transport/tcp_service_legacy.c:613 src/util/client.c:506
+#: src/util/service.c:1237
 #, c-format
 msgid "UNIXPATH `%s' too long, maximum length is %llu\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:460 src/transport/plugin_transport_tcp.c:1178
-#: src/transport/plugin_transport_xt.c:1178
-#: src/transport/tcp_service_legacy.c:615 src/util/client.c:509
-#: src/util/service.c:685
+#: src/arm/gnunet-service-arm.c:462 src/transport/plugin_transport_tcp.c:1180
+#: src/transport/plugin_transport_xt.c:1180
+#: src/transport/tcp_service_legacy.c:617 src/util/client.c:511
+#: src/util/service.c:1242
 #, c-format
 msgid "Using `%s' instead\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:493 src/transport/plugin_transport_tcp.c:1209
-#: src/transport/plugin_transport_xt.c:1209
-#: src/transport/tcp_service_legacy.c:646 src/util/service.c:721
+#: src/arm/gnunet-service-arm.c:495 src/transport/plugin_transport_tcp.c:1211
+#: src/transport/plugin_transport_xt.c:1211
+#: src/transport/tcp_service_legacy.c:648 src/util/service.c:1278
 #, c-format
 msgid ""
 "Disabling UNIX domain socket support for service `%s', failed to create UNIX "
 "domain socket: %s\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:515 src/transport/plugin_transport_tcp.c:1226
-#: src/transport/plugin_transport_xt.c:1226
-#: src/transport/tcp_service_legacy.c:663 src/util/service.c:739
+#: src/arm/gnunet-service-arm.c:517 src/transport/plugin_transport_tcp.c:1228
+#: src/transport/plugin_transport_xt.c:1228
+#: src/transport/tcp_service_legacy.c:665 src/util/service.c:1296
 #, c-format
 msgid "Have neither PORT nor UNIXPATH for service `%s', but one is required\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:554
-#: src/transport/plugin_transport_http_server.c:2682
-#: src/transport/plugin_transport_tcp.c:1257
-#: src/transport/plugin_transport_xt.c:1257
-#: src/transport/tcp_service_legacy.c:694 src/util/service.c:780
+#: src/arm/gnunet-service-arm.c:556
+#: src/transport/plugin_transport_http_server.c:2688
+#: src/transport/plugin_transport_tcp.c:1259
+#: src/transport/plugin_transport_xt.c:1259
+#: src/transport/tcp_service_legacy.c:696 src/util/service.c:1337
 #, c-format
 msgid "Failed to resolve `%s': %s\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:573
-#: src/transport/plugin_transport_http_server.c:2700
-#: src/transport/plugin_transport_tcp.c:1276
-#: src/transport/plugin_transport_xt.c:1276
-#: src/transport/tcp_service_legacy.c:713 src/util/service.c:800
+#: src/arm/gnunet-service-arm.c:575
+#: src/transport/plugin_transport_http_server.c:2706
+#: src/transport/plugin_transport_tcp.c:1278
+#: src/transport/plugin_transport_xt.c:1278
+#: src/transport/tcp_service_legacy.c:715 src/util/service.c:1357
 #, c-format
 msgid "Failed to find %saddress for `%s'.\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:984
+#: src/arm/gnunet-service-arm.c:986
 #, c-format
 msgid "Failed to start service `%s'\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:995
+#: src/arm/gnunet-service-arm.c:997
 #, c-format
 msgid "Starting service `%s'\n"
 msgstr "Avvio del servizio '%s' in corso\n"
 
-#: src/arm/gnunet-service-arm.c:1107
+#: src/arm/gnunet-service-arm.c:1109
 #, c-format
 msgid "Unable to create socket for service `%s': %s\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1142
+#: src/arm/gnunet-service-arm.c:1144
 #, c-format
 msgid "Unable to bind listening socket for service `%s' to address `%s': %s\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1185
+#: src/arm/gnunet-service-arm.c:1187
 #, c-format
 msgid "ARM now monitors connections to service `%s' at `%s'\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1364
+#: src/arm/gnunet-service-arm.c:1346
 #, c-format
 msgid "Preparing to stop `%s'\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1669
+#: src/arm/gnunet-service-arm.c:1651
 #, c-format
 msgid "Restarting service `%s'.\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1830
+#: src/arm/gnunet-service-arm.c:1812
 msgid "exit"
 msgstr "uscita"
 
-#: src/arm/gnunet-service-arm.c:1835
+#: src/arm/gnunet-service-arm.c:1817
 msgid "signal"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1840
+#: src/arm/gnunet-service-arm.c:1822
 msgid "unknown"
 msgstr "sconosciuto"
 
-#: src/arm/gnunet-service-arm.c:1846
+#: src/arm/gnunet-service-arm.c:1828
 #, c-format
 msgid "Service `%s' took %s to terminate\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1872
+#: src/arm/gnunet-service-arm.c:1854
 #, c-format
 msgid "Service `%s' terminated normally, will restart at any time\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1888
+#: src/arm/gnunet-service-arm.c:1870
 #, c-format
 msgid "Service `%s' terminated with status %s/%d, will restart in %s\n"
 msgstr ""
 
-#: src/arm/mockup-service.c:40
+#: src/arm/mockup-service.c:42
 msgid "Initiating shutdown as requested by client.\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:2779 src/ats/gnunet-ats-solver-eval.c:2820
+#: src/ats/gnunet-ats-solver-eval.c:2781 src/ats/gnunet-ats-solver-eval.c:2822
 #, c-format
 msgid ""
 "Could not load quota for network `%s':  `%s', assigning default bandwidth "
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:2797
+#: src/ats/gnunet-ats-solver-eval.c:2799
 #, c-format
 msgid ""
 "No outbound quota configured for network `%s', assigning default bandwidth "
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:2838
+#: src/ats/gnunet-ats-solver-eval.c:2840
 #, c-format
 msgid ""
 "No outbound quota configure for network `%s', assigning default bandwidth "
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3292 src/ats-tests/gnunet-solver-eval.c:937
+#: src/ats/gnunet-ats-solver-eval.c:3294 src/ats-tests/gnunet-solver-eval.c:939
 msgid "solver to use"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3297 src/ats-tests/gnunet-solver-eval.c:943
-#: src/ats-tests/gnunet-solver-eval.c:948
+#: src/ats/gnunet-ats-solver-eval.c:3299 src/ats-tests/gnunet-solver-eval.c:945
+#: src/ats-tests/gnunet-solver-eval.c:950
 msgid "experiment to use"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3304
+#: src/ats/gnunet-ats-solver-eval.c:3306
 msgid "print logging"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3309
+#: src/ats/gnunet-ats-solver-eval.c:3311
 msgid "save logging to disk"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3314
+#: src/ats/gnunet-ats-solver-eval.c:3316
 msgid "disable normalization"
 msgstr ""
 
-#: src/ats/gnunet-service-ats_plugins.c:302
+#: src/ats/gnunet-service-ats-new.c:756
+#: src/ats/gnunet-service-ats_plugins.c:451
+#, c-format
+msgid "Failed to initialize solver `%s'!\n"
+msgstr ""
+
+#: src/ats/gnunet-service-ats_plugins.c:304
 #, c-format
 msgid ""
 "Could not load %s quota for network `%s':  `%s', assigning default bandwidth "
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-service-ats_plugins.c:312
+#: src/ats/gnunet-service-ats_plugins.c:314
 #, c-format
 msgid "%s quota configured for network `%s' is %llu\n"
 msgstr ""
 
-#: src/ats/gnunet-service-ats_plugins.c:357
+#: src/ats/gnunet-service-ats_plugins.c:359
 #, c-format
 msgid ""
 "No %s-quota configured for network `%s', assigning default bandwidth %llu\n"
 msgstr ""
 
-#: src/ats/gnunet-service-ats_plugins.c:449
+#: src/ats/plugin_ats2_common.c:90
 #, c-format
-msgid "Failed to initialize solver `%s'!\n"
+msgid ""
+"Could not load %s quota for network `%s': `%s', assigning default bandwidth "
+"%llu\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:1272
+#: src/ats/plugin_ats_mlp.c:1274
 msgid "Problem size too large, cannot allocate memory!\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:1868
+#: src/ats/plugin_ats_mlp.c:1870
 #, c-format
 msgid "Adding address for peer `%s' multiple times\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:1912
+#: src/ats/plugin_ats_mlp.c:1914
 #, c-format
 msgid "Updating address property for peer `%s' %p not added before\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:2474
+#: src/ats/plugin_ats_mlp.c:2476
 msgid ""
 "MLP solver is not optimizing for anything, changing to feasibility check\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:2514 src/ats/plugin_ats_mlp.c:2531
-#: src/ats/plugin_ats_mlp.c:2563 src/ats/plugin_ats_mlp.c:2581
-#: src/ats/plugin_ats_mlp.c:2600 src/ats/plugin_ats_proportional.c:1139
-#: src/ats/plugin_ats_ril.c:2610 src/ats/plugin_ats_ril.c:2627
-#: src/ats/plugin_ats_ril.c:2644 src/ats/plugin_ats_ril.c:2661
-#: src/ats/plugin_ats_ril.c:2678 src/ats/plugin_ats_ril.c:2695
-#: src/ats/plugin_ats_ril.c:2712 src/ats/plugin_ats_ril.c:2729
+#: src/ats/plugin_ats_mlp.c:2516 src/ats/plugin_ats_mlp.c:2533
+#: src/ats/plugin_ats_mlp.c:2565 src/ats/plugin_ats_mlp.c:2583
+#: src/ats/plugin_ats_mlp.c:2602 src/ats/plugin_ats_proportional.c:1141
+#: src/ats/plugin_ats_ril.c:2612 src/ats/plugin_ats_ril.c:2629
+#: src/ats/plugin_ats_ril.c:2646 src/ats/plugin_ats_ril.c:2663
+#: src/ats/plugin_ats_ril.c:2680 src/ats/plugin_ats_ril.c:2697
+#: src/ats/plugin_ats_ril.c:2714 src/ats/plugin_ats_ril.c:2731
 #, c-format
 msgid "Invalid %s configuration %f \n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:2669
+#: src/ats/plugin_ats_mlp.c:2671
 #, c-format
 msgid ""
 "Adjusting inconsistent outbound quota configuration for network `%s', is "
 "%llu must be at least %llu\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:2678
+#: src/ats/plugin_ats_mlp.c:2680
 #, c-format
 msgid ""
 "Adjusting inconsistent inbound quota configuration for network `%s', is %llu "
 "must be at least %llu\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:2688
+#: src/ats/plugin_ats_mlp.c:2690
 #, c-format
 msgid ""
 "Adjusting outbound quota configuration for network `%s'from %llu to %.0f\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:2697
+#: src/ats/plugin_ats_mlp.c:2699
 #, c-format
 msgid ""
 "Adjusting inbound quota configuration for network `%s' from %llu to %.0f\n"
 msgstr ""
 
-#: src/ats/plugin_ats_proportional.c:1162
+#: src/ats/plugin_ats_proportional.c:1164
 #, c-format
 msgid "Invalid %s configuration %f\n"
 msgstr ""
 
-#: src/ats-tests/ats-testing.c:420
+#: src/ats-tests/ats-testing.c:422
 #, c-format
 msgid "Connected master [%u] with slave [%u]\n"
 msgstr ""
 
-#: src/ats-tests/ats-testing.c:427
+#: src/ats-tests/ats-testing.c:429
 #, c-format
 msgid "Failed to connect master peer [%u] with slave [%u]\n"
 msgstr ""
 
-#: src/ats-tests/ats-testing-log.c:835
+#: src/ats-tests/ats-testing-log.c:837
 msgid "Stop logging\n"
 msgstr ""
 
-#: src/ats-tests/ats-testing-log.c:890
+#: src/ats-tests/ats-testing-log.c:892
 #, c-format
 msgid "Start logging `%s'\n"
 msgstr ""
 
-#: src/ats-tests/gnunet-ats-sim.c:88
+#: src/ats-tests/gnunet-ats-sim.c:90
 #, c-format
 msgid ""
 "Master [%u]: sent: %u KiB in %u sec. = %u KiB/s, received: %u KiB in %u sec. "
 "= %u KiB/s\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:305
+#: src/ats-tool/gnunet-ats.c:307
 #, c-format
 msgid "%u address resolutions had a timeout\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:309
+#: src/ats-tool/gnunet-ats.c:311
 #, c-format
 msgid "ATS returned stat_results for %u addresses\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:393
+#: src/ats-tool/gnunet-ats.c:395
 #, c-format
 msgid ""
 "Peer `%s' plugin `%s', address `%s', `%s' bw out: %u Bytes/s, bw in %u Bytes/"
 "s, %s\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:400
+#: src/ats-tool/gnunet-ats.c:402
 msgid "active "
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:400
+#: src/ats-tool/gnunet-ats.c:402
 msgid "inactive "
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:510
+#: src/ats-tool/gnunet-ats.c:512
 #, c-format
 msgid "Removed address of peer `%s' with plugin `%s'\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:703
+#: src/ats-tool/gnunet-ats.c:705
 #, c-format
 msgid "Quota for network `%11s' (in/out): %10s / %10s\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:746 src/ats-tool/gnunet-ats.c:759
+#: src/ats-tool/gnunet-ats.c:748 src/ats-tool/gnunet-ats.c:761
 #, c-format
 msgid "Failed to parse peer identity `%s'\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:771
+#: src/ats-tool/gnunet-ats.c:773
 #, c-format
 msgid "Please select one operation: %s or %s or %s or %s or %s\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:793 src/ats-tool/gnunet-ats.c:818
-#: src/ats-tool/gnunet-ats.c:849 src/ats-tool/gnunet-ats.c:894
+#: src/ats-tool/gnunet-ats.c:795 src/ats-tool/gnunet-ats.c:820
+#: src/ats-tool/gnunet-ats.c:851 src/ats-tool/gnunet-ats.c:896
 msgid "Cannot connect to ATS service, exiting...\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:804 src/ats-tool/gnunet-ats.c:830
+#: src/ats-tool/gnunet-ats.c:806 src/ats-tool/gnunet-ats.c:832
 msgid "Cannot issue request to ATS service, exiting...\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:860
+#: src/ats-tool/gnunet-ats.c:862
 msgid "No preference type given!\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:867
+#: src/ats-tool/gnunet-ats.c:869
 msgid "No peer given!\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:885
+#: src/ats-tool/gnunet-ats.c:887
 msgid "Valid type required\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:948
+#: src/ats-tool/gnunet-ats.c:950
 msgid "get list of active addresses currently used"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:952
+#: src/ats-tool/gnunet-ats.c:954
 msgid "get list of all active addresses"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:958
+#: src/ats-tool/gnunet-ats.c:960
 msgid "connect to PEER"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:962
+#: src/ats-tool/gnunet-ats.c:964
 msgid "do not resolve IP addresses to hostnames"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:967
+#: src/ats-tool/gnunet-ats.c:969
 msgid "monitor mode"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:972
+#: src/ats-tool/gnunet-ats.c:974
 msgid "set preference for the given peer"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:977
+#: src/ats-tool/gnunet-ats.c:979
 msgid "print all configured quotas"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:982
+#: src/ats-tool/gnunet-ats.c:984
 msgid "peer id"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:988
+#: src/ats-tool/gnunet-ats.c:990
 msgid "preference type to set: latency | bandwidth"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:994
+#: src/ats-tool/gnunet-ats.c:996
 msgid "preference value"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:999
+#: src/ats-tool/gnunet-ats.c:1001
 msgid "verbose output (include ATS address properties)"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:1009
+#: src/ats-tool/gnunet-ats.c:1011
 msgid "Print information about ATS state"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:161
+#: src/auction/gnunet-auction-create.c:163
 msgid "description of the item to be sold"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:167
+#: src/auction/gnunet-auction-create.c:169
 msgid "mapping of possible prices"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:173
+#: src/auction/gnunet-auction-create.c:175
 msgid "max duration per round"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:179
+#: src/auction/gnunet-auction-create.c:181
 msgid "duration until auction starts"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:184
+#: src/auction/gnunet-auction-create.c:186
 msgid ""
 "number of items to sell\n"
 "0 for first price auction\n"
 ">0 for vickrey/M+1st price auction"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:191
+#: src/auction/gnunet-auction-create.c:193
 msgid "public auction outcome"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:196
+#: src/auction/gnunet-auction-create.c:198
 msgid "keep running in foreground until auction completes"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:207
+#: src/auction/gnunet-auction-create.c:209
 msgid "create a new auction and start listening for bidders"
 msgstr ""
 
-#: src/auction/gnunet-auction-info.c:74 src/auction/gnunet-auction-join.c:74
-#: src/conversation/gnunet-conversation-test.c:252
-#: src/revocation/gnunet-revocation.c:560 src/template/gnunet-template.c:74
+#: src/auction/gnunet-auction-info.c:76 src/auction/gnunet-auction-join.c:76
+#: src/conversation/gnunet-conversation-test.c:254
+#: src/revocation/gnunet-revocation.c:562 src/template/gnunet-template.c:76
 msgid "help text"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:705
+#: src/cadet/gnunet-cadet.c:631
 #, c-format
 msgid "Invalid peer ID `%s'\n"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:744
-#, c-format
-msgid "Invalid tunnel owner `%s'\n"
-msgstr ""
-
-#: src/cadet/gnunet-cadet.c:817
+#: src/cadet/gnunet-cadet.c:718
 msgid "Extra arguments are not applicable in combination with this option.\n"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:908
+#: src/cadet/gnunet-cadet.c:795
 #, c-format
 msgid "Invalid target `%s'\n"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:945
+#: src/cadet/gnunet-cadet.c:832
 msgid "No action requested\n"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:970
+#: src/cadet/gnunet-cadet.c:857
 msgid "Provide information about a particular connection"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:975
+#: src/cadet/gnunet-cadet.c:861
 msgid "Activate echo mode"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:980
-msgid "Dump debug information to STDERR"
-msgstr ""
-
-#: src/cadet/gnunet-cadet.c:986
+#: src/cadet/gnunet-cadet.c:866
 msgid "Listen for connections using a shared secret among sender and recipient"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:993
+#: src/cadet/gnunet-cadet.c:871
 msgid "Provide information about a patricular peer"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:999
+#: src/cadet/gnunet-cadet.c:875
 msgid "Provide information about all peers"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:1005
-msgid "Provide information about a particular tunnel"
-msgstr ""
-
-#: src/cadet/gnunet-cadet.c:1011
+#: src/cadet/gnunet-cadet.c:879
 msgid "Provide information about all tunnels"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:521
-#: src/secretsharing/gnunet-secretsharing-profiler.c:608
+#: src/consensus/gnunet-consensus-profiler.c:523
+#: src/secretsharing/gnunet-secretsharing-profiler.c:610
 msgid "number of peers in consensus"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:527
+#: src/consensus/gnunet-consensus-profiler.c:529
 msgid ""
 "how many peers (random selection without replacement) receive one value?"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:533
-#: src/set/gnunet-set-profiler.c:431 src/set/gnunet-set-profiler.c:437
-#: src/set/gnunet-set-profiler.c:460
+#: src/consensus/gnunet-consensus-profiler.c:535
+#: src/set/gnunet-set-profiler.c:433 src/set/gnunet-set-profiler.c:439
+#: src/set/gnunet-set-profiler.c:462
 msgid "number of values"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:539
+#: src/consensus/gnunet-consensus-profiler.c:541
 msgid "consensus timeout"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:546
+#: src/consensus/gnunet-consensus-profiler.c:548
 msgid "delay until consensus starts"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:552
-#: src/set/gnunet-set-profiler.c:478
+#: src/consensus/gnunet-consensus-profiler.c:554
+#: src/set/gnunet-set-profiler.c:480
 msgid "write statistics to file"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:557
+#: src/consensus/gnunet-consensus-profiler.c:559
 msgid "distribute elements to a static subset of good peers"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:562
+#: src/consensus/gnunet-consensus-profiler.c:564
 msgid "be more verbose (print received values)"
 msgstr ""
 
-#: src/conversation/conversation_api.c:513
-#: src/conversation/conversation_api_call.c:492
+#: src/conversation/conversation_api.c:515
+#: src/conversation/conversation_api_call.c:494
 msgid "Connection to conversation service lost, trying to reconnect\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:275
+#: src/conversation/gnunet-conversation.c:277
 #, c-format
 msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:300
+#: src/conversation/gnunet-conversation.c:302
 #, c-format
 msgid "Call from `%s' terminated\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:335
+#: src/conversation/gnunet-conversation.c:337
 #, c-format
 msgid "Call from `%s' suspended by other user\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:340
+#: src/conversation/gnunet-conversation.c:342
 #, c-format
 msgid "Call from `%s' resumed by other user\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:358
+#: src/conversation/gnunet-conversation.c:360
 #, c-format
 msgid "Ego `%s' no longer available, phone is now down.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:373
+#: src/conversation/gnunet-conversation.c:375
 msgid "Failed to setup phone (internal error)\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:385
+#: src/conversation/gnunet-conversation.c:387
 #, c-format
 msgid "Phone active at `%s'.  Type `/help' for a list of available commands\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:409
+#: src/conversation/gnunet-conversation.c:411
 #, c-format
 msgid "Resolved address of `%s'. Now ringing other party.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:416
+#: src/conversation/gnunet-conversation.c:418
 #, c-format
 msgid "Connection established to `%s'\n"
 msgstr "Connessione stabilita con `%s'\n"
 
-#: src/conversation/gnunet-conversation.c:423
+#: src/conversation/gnunet-conversation.c:425
 #, c-format
 msgid "Failed to resolve `%s'\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:431
+#: src/conversation/gnunet-conversation.c:433
 #, c-format
 msgid "Call to `%s' terminated\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:440
+#: src/conversation/gnunet-conversation.c:442
 #, c-format
 msgid "Connection to `%s' suspended (by other user)\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:446
+#: src/conversation/gnunet-conversation.c:448
 #, c-format
 msgid "Connection to `%s' resumed (by other user)\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:451
+#: src/conversation/gnunet-conversation.c:453
 msgid "Error with the call, restarting it\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:522
+#: src/conversation/gnunet-conversation.c:524
 #, c-format
 msgid "Unknown command `%s'\n"
 msgstr "Comando `%s' sconosciuto.\n"
 
-#: src/conversation/gnunet-conversation.c:538
-#: src/conversation/gnunet-conversation.c:552
+#: src/conversation/gnunet-conversation.c:540
+#: src/conversation/gnunet-conversation.c:554
 #, c-format
 msgid "Ego `%s' not available\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:545
-#: src/conversation/gnunet-conversation.c:601
+#: src/conversation/gnunet-conversation.c:547
+#: src/conversation/gnunet-conversation.c:603
 msgid "You are calling someone else already, hang up first!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:560
-#: src/conversation/gnunet-conversation.c:614
+#: src/conversation/gnunet-conversation.c:562
+#: src/conversation/gnunet-conversation.c:616
 #, c-format
 msgid "You are answering call from `%s', hang up or suspend that call first!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:570
+#: src/conversation/gnunet-conversation.c:572
 msgid "Call recipient missing.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:625
+#: src/conversation/gnunet-conversation.c:627
 msgid "There is no incoming call to accept here!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:642
+#: src/conversation/gnunet-conversation.c:644
 #, c-format
 msgid "There is no incoming call `%s' to accept right now!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:673
+#: src/conversation/gnunet-conversation.c:675
 msgid "We currently do not have an address.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:697
+#: src/conversation/gnunet-conversation.c:699
 #, c-format
 msgid "We are currently trying to locate the private key for the ego `%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:702
+#: src/conversation/gnunet-conversation.c:704
 #, c-format
 msgid "We are listening for incoming calls for ego `%s' on line `%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:708
-#: src/conversation/gnunet-conversation.c:732
+#: src/conversation/gnunet-conversation.c:710
+#: src/conversation/gnunet-conversation.c:734
 #, c-format
 msgid "You are having a conversation with `%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:713
+#: src/conversation/gnunet-conversation.c:715
 msgid ""
 "We had an internal error setting up our phone line. You can still make "
 "calls.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:722
+#: src/conversation/gnunet-conversation.c:724
 #, c-format
 msgid "We are trying to find the network address to call `%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:727
+#: src/conversation/gnunet-conversation.c:729
 #, c-format
 msgid "We are calling `%s', their phone should be ringing.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:746
+#: src/conversation/gnunet-conversation.c:748
 msgid "Calls waiting:\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:752
+#: src/conversation/gnunet-conversation.c:754
 #, c-format
 msgid "#%u: `%s'\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:781
-#: src/conversation/gnunet-conversation.c:796
+#: src/conversation/gnunet-conversation.c:783
+#: src/conversation/gnunet-conversation.c:798
 msgid "There is no call that could be suspended right now.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:829
-#: src/conversation/gnunet-conversation.c:845
+#: src/conversation/gnunet-conversation.c:831
+#: src/conversation/gnunet-conversation.c:847
 msgid "There is no call that could be resumed right now.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:852
+#: src/conversation/gnunet-conversation.c:854
 #, c-format
 msgid "Already talking with `%s', cannot resume a call right now.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:861
+#: src/conversation/gnunet-conversation.c:863
 msgid "There is no incoming call to resume here!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:878
+#: src/conversation/gnunet-conversation.c:880
 #, c-format
 msgid "There is no incoming call `%s' to resume right now!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:913
+#: src/conversation/gnunet-conversation.c:915
 msgid "There is no call that could be cancelled right now.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:921
+#: src/conversation/gnunet-conversation.c:923
 msgid "There is no incoming call to refuse here!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:938
+#: src/conversation/gnunet-conversation.c:940
 #, c-format
 msgid "There is no incoming call `%s' to refuse right now!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:964
+#: src/conversation/gnunet-conversation.c:966
 msgid "Use `/address' to find out which address this phone should have in GNS"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:966
+#: src/conversation/gnunet-conversation.c:968
 msgid "Use `/call USER.gnu' to call USER"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:968
+#: src/conversation/gnunet-conversation.c:970
 msgid "Use `/accept #NUM' to accept incoming call #NUM"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:970
+#: src/conversation/gnunet-conversation.c:972
 msgid "Use `/suspend' to suspend the active call"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:972
+#: src/conversation/gnunet-conversation.c:974
 msgid ""
 "Use `/resume [#NUM]' to resume a call, #NUM is needed to resume incoming "
 "calls, no argument is needed to resume the current outgoing call."
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:974
+#: src/conversation/gnunet-conversation.c:976
 msgid "Use `/cancel' to reject or terminate a call"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:976
+#: src/conversation/gnunet-conversation.c:978
 msgid "Use `/status' to print status information"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:978
+#: src/conversation/gnunet-conversation.c:980
 msgid "Use `/quit' to terminate gnunet-conversation"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:980
+#: src/conversation/gnunet-conversation.c:982
 msgid "Use `/help command' to get help for a specific command"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:1196
+#: src/conversation/gnunet-conversation.c:1198
 #, c-format
 msgid "Name of our ego changed to `%s'\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:1209
+#: src/conversation/gnunet-conversation.c:1211
 #, c-format
 msgid "Our ego `%s' was deleted!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:1247
+#: src/conversation/gnunet-conversation.c:1249
 msgid "You must specify the NAME of an ego to use\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:1271
+#: src/conversation/gnunet-conversation.c:1273
 msgid "Failed to start gnunet-helper-w32-console\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:1300
+#: src/conversation/gnunet-conversation.c:1302
 msgid "sets the NAME of the ego to use for the caller ID"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:1305
+#: src/conversation/gnunet-conversation.c:1307
 msgid "sets the LINE to use for the phone"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:1334
+#: src/conversation/gnunet-conversation.c:1336
 msgid "Enables having a conversation with other GNUnet users."
 msgstr ""
 
-#: src/conversation/gnunet-conversation-test.c:118
+#: src/conversation/gnunet-conversation-test.c:120
 #, c-format
 msgid ""
 "\n"
 "End of transmission.  Have a GNU day.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation-test.c:143
+#: src/conversation/gnunet-conversation-test.c:145
 #, c-format
 msgid ""
 "\n"
@@ -1026,2405 +1021,2401 @@ msgid ""
 "settings are working..."
 msgstr ""
 
-#: src/conversation/gnunet-conversation-test.c:214
+#: src/conversation/gnunet-conversation-test.c:216
 #, c-format
 msgid ""
 "We will now be recording you for %s. After that time, the recording will be "
 "played back to you..."
 msgstr ""
 
-#: src/conversation/gnunet_gst.c:620
-#: src/conversation/gnunet-helper-audio-playback-gst.c:359
+#: src/conversation/gnunet_gst.c:622
+#: src/conversation/gnunet-helper-audio-playback-gst.c:361
 #, c-format
 msgid "Read error from STDIN: %d %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:323
+#: src/conversation/gnunet-helper-audio-playback.c:325
 #, c-format
 msgid "pa_stream_write() failed: %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:625
+#: src/conversation/gnunet-helper-audio-playback.c:627
 msgid "gnunet-helper-audio-playback - Got signal, exiting\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:651
-#: src/conversation/gnunet-helper-audio-record.c:561
+#: src/conversation/gnunet-helper-audio-playback.c:653
+#: src/conversation/gnunet-helper-audio-record.c:563
 msgid "Connection established.\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:656
-#: src/conversation/gnunet-helper-audio-record.c:566
+#: src/conversation/gnunet-helper-audio-playback.c:658
+#: src/conversation/gnunet-helper-audio-record.c:568
 #, c-format
 msgid "pa_stream_new() failed: %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:670
+#: src/conversation/gnunet-helper-audio-playback.c:672
 #, c-format
 msgid "pa_stream_connect_playback() failed: %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:683
-#: src/conversation/gnunet-helper-audio-record.c:592
+#: src/conversation/gnunet-helper-audio-playback.c:685
+#: src/conversation/gnunet-helper-audio-record.c:594
 #, c-format
 msgid "Connection failure: %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:704
-#: src/conversation/gnunet-helper-audio-record.c:615
+#: src/conversation/gnunet-helper-audio-playback.c:706
+#: src/conversation/gnunet-helper-audio-record.c:617
 msgid "Wrong Spec\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:710
-#: src/conversation/gnunet-helper-audio-record.c:621
+#: src/conversation/gnunet-helper-audio-playback.c:712
+#: src/conversation/gnunet-helper-audio-record.c:623
 msgid "pa_mainloop_new() failed.\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:724
-#: src/conversation/gnunet-helper-audio-record.c:636
+#: src/conversation/gnunet-helper-audio-playback.c:726
+#: src/conversation/gnunet-helper-audio-record.c:638
 msgid "pa_context_new() failed.\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:731
-#: src/conversation/gnunet-helper-audio-record.c:642
+#: src/conversation/gnunet-helper-audio-playback.c:733
+#: src/conversation/gnunet-helper-audio-record.c:644
 #, c-format
 msgid "pa_context_connect() failed: %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:737
-#: src/conversation/gnunet-helper-audio-record.c:648
+#: src/conversation/gnunet-helper-audio-playback.c:739
+#: src/conversation/gnunet-helper-audio-record.c:650
 msgid "pa_mainloop_run() failed.\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:816
+#: src/conversation/gnunet-helper-audio-playback.c:818
 #, c-format
 msgid "Read error from STDIN: %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:351
+#: src/conversation/gnunet-helper-audio-record.c:353
 #, c-format
 msgid "opus_encode_float() failed: %s. Aborting\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:430
+#: src/conversation/gnunet-helper-audio-record.c:432
 #, c-format
 msgid "pa_stream_peek() failed: %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:472
+#: src/conversation/gnunet-helper-audio-record.c:474
 msgid "Got signal, exiting.\n"
 msgstr "Segnale ricevuto. Uscita in corso.\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:498
+#: src/conversation/gnunet-helper-audio-record.c:500
 msgid "Stream successfully created.\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:503
+#: src/conversation/gnunet-helper-audio-record.c:505
 #, c-format
 msgid "pa_stream_get_buffer_attr() failed: %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:511
+#: src/conversation/gnunet-helper-audio-record.c:513
 #, c-format
 msgid "Buffer metrics: maxlength=%u, fragsize=%u\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:515
+#: src/conversation/gnunet-helper-audio-record.c:517
 #, c-format
 msgid "Using sample spec '%s', channel map '%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:522
+#: src/conversation/gnunet-helper-audio-record.c:524
 #, c-format
 msgid "Connected to device %s (%u, %ssuspended).\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:531
+#: src/conversation/gnunet-helper-audio-record.c:533
 #, c-format
 msgid "Stream error: %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:579
+#: src/conversation/gnunet-helper-audio-record.c:581
 #, c-format
 msgid "pa_stream_connect_record() failed: %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:693
+#: src/conversation/gnunet-helper-audio-record.c:695
 msgid "ogg_stream_init() failed.\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:738
+#: src/conversation/gnunet-helper-audio-record.c:740
 #, c-format
 msgid "Failed to allocate %u bytes for second packet\n"
 msgstr ""
 
-#: src/conversation/gnunet-service-conversation.c:1303
+#: src/conversation/gnunet-service-conversation.c:1305
 #, c-format
 msgid "Could not open line, port %s already in use!\n"
 msgstr ""
 
-#: src/conversation/microphone.c:119
+#: src/conversation/microphone.c:121
 msgid "Could not start record audio helper\n"
 msgstr ""
 
-#: src/conversation/plugin_gnsrecord_conversation.c:70
+#: src/conversation/plugin_gnsrecord_conversation.c:72
 #, c-format
 msgid "PHONE version %u not supported\n"
 msgstr ""
 
-#: src/conversation/plugin_gnsrecord_conversation.c:133
-#: src/conversation/plugin_gnsrecord_conversation.c:147
+#: src/conversation/plugin_gnsrecord_conversation.c:135
+#: src/conversation/plugin_gnsrecord_conversation.c:149
 #, c-format
 msgid "Unable to parse PHONE record `%s'\n"
 msgstr ""
 
-#: src/conversation/speaker.c:73
+#: src/conversation/speaker.c:75
 msgid "Could not start playback audio helper.\n"
 msgstr ""
 
-#: src/core/gnunet-core.c:88
+#: src/core/gnunet-core.c:90
 #, fuzzy
 msgid "fresh connection"
 msgstr "# connessioni attive"
 
-#: src/core/gnunet-core.c:91
+#: src/core/gnunet-core.c:93
 msgid "key sent"
 msgstr ""
 
-#: src/core/gnunet-core.c:94
+#: src/core/gnunet-core.c:96
 msgid "key received"
 msgstr ""
 
-#: src/core/gnunet-core.c:97
+#: src/core/gnunet-core.c:99
 #, fuzzy
 msgid "connection established"
 msgstr "Connessione stabilita con `%s'\n"
 
-#: src/core/gnunet-core.c:100
+#: src/core/gnunet-core.c:102
 msgid "rekeying"
 msgstr ""
 
-#: src/core/gnunet-core.c:103
+#: src/core/gnunet-core.c:105
 msgid "disconnected"
 msgstr ""
 
-#: src/core/gnunet-core.c:110
+#: src/core/gnunet-core.c:112
 msgid "Connection to CORE service lost (reconnecting)"
 msgstr ""
 
-#: src/core/gnunet-core.c:113
+#: src/core/gnunet-core.c:115
 #, fuzzy
 msgid "unknown state"
 msgstr "indirizzo sconosciuto"
 
-#: src/core/gnunet-core.c:118
+#: src/core/gnunet-core.c:120
 #, c-format
 msgid "%24s: %-30s %4s (timeout in %6s)\n"
 msgstr ""
 
-#: src/core/gnunet-core.c:142 src/peerinfo-tool/gnunet-peerinfo.c:726
+#: src/core/gnunet-core.c:144 src/peerinfo-tool/gnunet-peerinfo.c:728
 #, c-format
 msgid "Invalid command line argument `%s'\n"
 msgstr ""
 
-#: src/core/gnunet-core.c:153
+#: src/core/gnunet-core.c:155
 msgid "Failed to connect to CORE service!\n"
 msgstr ""
 
-#: src/core/gnunet-core.c:175 src/transport/gnunet-transport.c:1447
+#: src/core/gnunet-core.c:177 src/transport/gnunet-transport.c:1449
 msgid "provide information about all current connections (continuously)"
 msgstr ""
 
-#: src/core/gnunet-core.c:184
+#: src/core/gnunet-core.c:186
 msgid "Print information about connected peers."
 msgstr ""
 
-#: src/core/gnunet-service-core.c:345
+#: src/core/gnunet-service-core.c:347
 msgid "# send requests dropped (disconnected)"
 msgstr ""
 
-#: src/core/gnunet-service-core.c:369
+#: src/core/gnunet-service-core.c:371
 msgid "# dequeuing CAR (duplicate request)"
 msgstr ""
 
-#: src/core/gnunet-service-core.c:441
+#: src/core/gnunet-service-core.c:443
 #, c-format
 msgid "# bytes of messages of type %u received"
 msgstr ""
 
-#: src/core/gnunet-service-core.c:539
+#: src/core/gnunet-service-core.c:541
 msgid "# messages discarded (session disconnected)"
 msgstr ""
 
-#: src/core/gnunet-service-core.c:877
+#: src/core/gnunet-service-core.c:879
 #, c-format
 msgid "# messages of type %u discarded (client busy)"
 msgstr ""
 
-#: src/core/gnunet-service-core.c:986
+#: src/core/gnunet-service-core.c:988
 msgid "Core service is lacking HOSTKEY configuration setting.  Exiting.\n"
 msgstr ""
 
-#: src/core/gnunet-service-core.c:1007
+#: src/core/gnunet-service-core.c:1009
 #, fuzzy, c-format
 msgid "Core service of `%s' ready.\n"
 msgstr "Avvio del servizio '%s' in corso\n"
 
-#: src/core/gnunet-service-core_kx.c:615
+#: src/core/gnunet-service-core_kx.c:617
 msgid "# bytes encrypted"
 msgstr "# byte crittografati"
 
-#: src/core/gnunet-service-core_kx.c:675
+#: src/core/gnunet-service-core_kx.c:677
 msgid "# bytes decrypted"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:777
+#: src/core/gnunet-service-core_kx.c:779
 msgid "# PAYLOAD dropped (out of order)"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:827
+#: src/core/gnunet-service-core_kx.c:829
 msgid "# key exchanges initiated"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:889
+#: src/core/gnunet-service-core_kx.c:891
 msgid "# key exchanges stopped"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:923
+#: src/core/gnunet-service-core_kx.c:925
 #, fuzzy
 msgid "# PING messages transmitted"
 msgstr "# messaggi PONG ricevuti"
 
-#: src/core/gnunet-service-core_kx.c:990
+#: src/core/gnunet-service-core_kx.c:992
 msgid "# old ephemeral keys ignored"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1003
+#: src/core/gnunet-service-core_kx.c:1005
 msgid "# duplicate ephemeral keys ignored"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1038
+#: src/core/gnunet-service-core_kx.c:1040
 msgid "# EPHEMERAL_KEYs rejected (bad signature)"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1052
+#: src/core/gnunet-service-core_kx.c:1054
 #, c-format
 msgid ""
 "EPHEMERAL_KEY from peer `%s' rejected as its validity range does not match "
 "our system time (%llu not in [%llu,%llu]).\n"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1058
+#: src/core/gnunet-service-core_kx.c:1060
 msgid "# EPHEMERAL_KEY messages rejected due to time"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1078
+#: src/core/gnunet-service-core_kx.c:1080
 #, fuzzy
 msgid "# valid ephemeral keys received"
 msgstr "# messaggi PONG ricevuti"
 
-#: src/core/gnunet-service-core_kx.c:1178
-#: src/transport/gnunet-service-transport_validation.c:1126
+#: src/core/gnunet-service-core_kx.c:1180
+#: src/transport/gnunet-service-transport_validation.c:1128
 msgid "# PING messages received"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1187
+#: src/core/gnunet-service-core_kx.c:1189
 msgid "# PING messages dropped (out of order)"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1246
+#: src/core/gnunet-service-core_kx.c:1248
 msgid "# PONG messages created"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1272
+#: src/core/gnunet-service-core_kx.c:1274
 msgid "# sessions terminated by timeout"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1285
+#: src/core/gnunet-service-core_kx.c:1287
 msgid "# keepalive messages sent"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1349
-#: src/transport/gnunet-service-transport_validation.c:1459
+#: src/core/gnunet-service-core_kx.c:1351
+#: src/transport/gnunet-service-transport_validation.c:1461
 msgid "# PONG messages received"
 msgstr "# messaggi PONG ricevuti"
 
-#: src/core/gnunet-service-core_kx.c:1356
+#: src/core/gnunet-service-core_kx.c:1358
 msgid "# PONG messages dropped (connection down)"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1361
+#: src/core/gnunet-service-core_kx.c:1363
 msgid "# PONG messages dropped (out of order)"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1396
+#: src/core/gnunet-service-core_kx.c:1398
 msgid "# PONG messages decrypted"
 msgstr "# messaggi PONG decrittati"
 
-#: src/core/gnunet-service-core_kx.c:1434
+#: src/core/gnunet-service-core_kx.c:1436
 msgid "# session keys confirmed via PONG"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1445
+#: src/core/gnunet-service-core_kx.c:1447
 msgid "# timeouts prevented via PONG"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1452
+#: src/core/gnunet-service-core_kx.c:1454
 msgid "# rekey operations confirmed via PONG"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1640
+#: src/core/gnunet-service-core_kx.c:1642
 msgid "# DATA message dropped (out of order)"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1648
+#: src/core/gnunet-service-core_kx.c:1650
 #, c-format
 msgid ""
 "Session to peer `%s' went down due to key expiration (should not happen)\n"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1651
+#: src/core/gnunet-service-core_kx.c:1653
 msgid "# sessions terminated by key expiration"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1740
-#: src/core/gnunet-service-core_kx.c:1766
+#: src/core/gnunet-service-core_kx.c:1742
+#: src/core/gnunet-service-core_kx.c:1768
 msgid "# bytes dropped (duplicates)"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1753
+#: src/core/gnunet-service-core_kx.c:1755
 msgid "# bytes dropped (out of sequence)"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1795
+#: src/core/gnunet-service-core_kx.c:1797
 msgid "# bytes dropped (ancient message)"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1803
+#: src/core/gnunet-service-core_kx.c:1805
 msgid "# bytes of payload decrypted"
 msgstr ""
 
-#: src/core/gnunet-service-core_sessions.c:258
-#: src/core/gnunet-service-core_sessions.c:348
-#: src/dht/gnunet-service-dht_neighbours.c:739
-#: src/dht/gnunet-service-dht_neighbours.c:802
-#: src/fs/gnunet-service-fs_cp.c:613 src/fs/gnunet-service-fs_cp.c:1520
-#: src/topology/gnunet-daemon-topology.c:615
-#: src/topology/gnunet-daemon-topology.c:717
-#: src/transport/gnunet-service-transport_neighbours.c:719
-#: src/transport/gnunet-service-transport_neighbours.c:727
+#: src/core/gnunet-service-core_sessions.c:260
+#: src/core/gnunet-service-core_sessions.c:350
+#: src/dht/gnunet-service-dht_neighbours.c:741
+#: src/dht/gnunet-service-dht_neighbours.c:804
+#: src/fs/gnunet-service-fs_cp.c:615 src/fs/gnunet-service-fs_cp.c:1521
+#: src/topology/gnunet-daemon-topology.c:617
+#: src/topology/gnunet-daemon-topology.c:719
+#: src/transport/gnunet-service-transport_neighbours.c:720
+#: src/transport/gnunet-service-transport_neighbours.c:728
 msgid "# peers connected"
 msgstr ""
 
-#: src/core/gnunet-service-core_sessions.c:294
+#: src/core/gnunet-service-core_sessions.c:296
 msgid "# type map refreshes sent"
 msgstr ""
 
-#: src/core/gnunet-service-core_sessions.c:414
+#: src/core/gnunet-service-core_sessions.c:416
 msgid "# outdated typemap confirmations received"
 msgstr ""
 
-#: src/core/gnunet-service-core_sessions.c:431
+#: src/core/gnunet-service-core_sessions.c:433
 msgid "# valid typemap confirmations received"
 msgstr ""
 
-#: src/core/gnunet-service-core_typemap.c:167
-#: src/core/gnunet-service-core_typemap.c:179
+#: src/core/gnunet-service-core_typemap.c:169
+#: src/core/gnunet-service-core_typemap.c:181
 msgid "# type maps received"
 msgstr ""
 
-#: src/core/gnunet-service-core_typemap.c:210
+#: src/core/gnunet-service-core_typemap.c:212
 msgid "# updates to my type map"
 msgstr ""
 
-#: src/credential/credential_misc.c:86
+#: src/credential/credential_misc.c:88
 #, c-format
 msgid "Unable to parse CRED record string `%s'\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:262 src/namestore/gnunet-namestore.c:887
+#: src/credential/gnunet-credential.c:264 src/namestore/gnunet-namestore.c:994
 #, c-format
 msgid "Ego `%s' not known to identity service\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:278
-#: src/credential/gnunet-credential.c:432
+#: src/credential/gnunet-credential.c:280
+#: src/credential/gnunet-credential.c:434
 #, c-format
 msgid "Issuer public key `%s' is not well-formed\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:359
-#: src/credential/gnunet-credential.c:421
+#: src/credential/gnunet-credential.c:361
+#: src/credential/gnunet-credential.c:423
 #, c-format
 msgid "Issuer public key not well-formed\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:370
-#: src/credential/gnunet-credential.c:442
+#: src/credential/gnunet-credential.c:372
+#: src/credential/gnunet-credential.c:444
 #, c-format
 msgid "Failed to connect to CREDENTIAL\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:377
+#: src/credential/gnunet-credential.c:379
 #, c-format
 msgid "You must provide issuer the attribute\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:385
+#: src/credential/gnunet-credential.c:387
 #, c-format
 msgid "ego required\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:401
+#: src/credential/gnunet-credential.c:403
 #, c-format
 msgid "Subject public key needed\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:412
+#: src/credential/gnunet-credential.c:414
 #, c-format
 msgid "Subject public key `%s' is not well-formed\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:449
+#: src/credential/gnunet-credential.c:451
 #, c-format
 msgid "You must provide issuer and subject attributes\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:502
+#: src/credential/gnunet-credential.c:504
 #, c-format
 msgid "Issuer ego required\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:514
+#: src/credential/gnunet-credential.c:516
 #, c-format
 msgid "Please specify name to lookup, subject key and issuer key!\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:534
+#: src/credential/gnunet-credential.c:536
 msgid "create credential"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:538
+#: src/credential/gnunet-credential.c:540
 msgid "verify credential against attribute"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:543
+#: src/credential/gnunet-credential.c:545
 msgid "The public key of the subject to lookup the credential for"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:548
+#: src/credential/gnunet-credential.c:550
 msgid "The name of the credential presented by the subject"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:553
+#: src/credential/gnunet-credential.c:555
 msgid "The public key of the authority to verify the credential against"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:558
+#: src/credential/gnunet-credential.c:560
 msgid "The ego to use"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:563
+#: src/credential/gnunet-credential.c:565
 msgid "The issuer attribute to verify against or to issue"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:568
+#: src/credential/gnunet-credential.c:570
 msgid "The time to live for the credential"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:572
+#: src/credential/gnunet-credential.c:574
 msgid "collect credentials"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:586
+#: src/credential/gnunet-credential.c:588
 msgid "GNUnet credential resolver tool"
 msgstr ""
 
-#: src/credential/gnunet-service-credential.c:1136 src/gns/gnunet-gns.c:183
-#: src/gns/gnunet-gns-helper-service-w32.c:725
+#: src/credential/gnunet-service-credential.c:1138 src/gns/gnunet-gns.c:185
+#: src/gns/gnunet-gns-helper-service-w32.c:727
 #, c-format
 msgid "Failed to connect to GNS\n"
 msgstr ""
 
-#: src/credential/gnunet-service-credential.c:1142
-#: src/namestore/gnunet-namestore.c:913
-#: src/namestore/gnunet-namestore-fcfsd.c:1136
+#: src/credential/gnunet-service-credential.c:1144
+#: src/namestore/gnunet-namestore.c:1019
+#: src/namestore/gnunet-namestore-fcfsd.c:1138
 #, c-format
 msgid "Failed to connect to namestore\n"
 msgstr ""
 
-#: src/credential/plugin_gnsrecord_credential.c:184
+#: src/credential/plugin_gnsrecord_credential.c:186
 #, c-format
 msgid "Unable to parse ATTR record string `%s'\n"
 msgstr ""
 
-#: src/datacache/datacache.c:117 src/datacache/datacache.c:309
-#: src/datastore/gnunet-service-datastore.c:755
+#: src/datacache/datacache.c:119 src/datacache/datacache.c:311
+#: src/datastore/gnunet-service-datastore.c:757
 msgid "# bytes stored"
 msgstr ""
 
-#: src/datacache/datacache.c:121 src/datacache/datacache.c:313
+#: src/datacache/datacache.c:123 src/datacache/datacache.c:315
 msgid "# items stored"
 msgstr "# elementi memorizzati"
 
-#: src/datacache/datacache.c:204
+#: src/datacache/datacache.c:206
 #, c-format
 msgid "Loading `%s' datacache plugin\n"
 msgstr ""
 
-#: src/datacache/datacache.c:215
+#: src/datacache/datacache.c:217
 #, c-format
 msgid "Failed to load datacache plugin for `%s'\n"
 msgstr ""
 
-#: src/datacache/datacache.c:343
+#: src/datacache/datacache.c:345
 msgid "# requests received"
 msgstr ""
 
-#: src/datacache/datacache.c:353
+#: src/datacache/datacache.c:355
 msgid "# requests filtered by bloom filter"
 msgstr ""
 
-#: src/datacache/datacache.c:383
+#: src/datacache/datacache.c:385
 msgid "# requests for random value received"
 msgstr ""
 
-#: src/datacache/datacache.c:415
+#: src/datacache/datacache.c:417
 msgid "# proximity search requests received"
 msgstr ""
 
-#: src/datacache/plugin_datacache_heap.c:551
+#: src/datacache/plugin_datacache_heap.c:553
 msgid "Heap datacache running\n"
 msgstr ""
 
-#: src/datacache/plugin_datacache_sqlite.c:116
-#: src/datacache/plugin_datacache_sqlite.c:125
-#: src/datastore/plugin_datastore_mysql.c:890
-#: src/datastore/plugin_datastore_sqlite.c:56
-#: src/datastore/plugin_datastore_sqlite.c:64 src/my/my.c:79 src/my/my.c:91
-#: src/mysql/mysql.c:40 src/mysql/mysql.c:47
-#: src/namecache/plugin_namecache_sqlite.c:50
-#: src/namestore/plugin_namestore_sqlite.c:51
-#: src/peerstore/plugin_peerstore_sqlite.c:50
-#: src/psycstore/plugin_psycstore_mysql.c:60
-#: src/reclaim/plugin_reclaim_sqlite.c:50
-#: src/testbed/generate-underlay-topology.c:45
-#: src/testbed/gnunet-daemon-latency-logger.c:50
-#: src/testbed/gnunet-daemon-testbed-underlay.c:54
-#: src/testbed/testbed_api_hosts.c:67 src/util/crypto_ecc.c:51
-#: src/util/crypto_ecc_setup.c:39 src/util/crypto_mpi.c:37
-#: src/include/gnunet_common.h:816 src/include/gnunet_common.h:825
-#: src/scalarproduct/scalarproduct.h:33
+#: src/datacache/plugin_datacache_sqlite.c:118
+#: src/datacache/plugin_datacache_sqlite.c:127
+#: src/datastore/plugin_datastore_mysql.c:892
+#: src/datastore/plugin_datastore_sqlite.c:58
+#: src/datastore/plugin_datastore_sqlite.c:66 src/my/my.c:81 src/my/my.c:93
+#: src/mysql/mysql.c:42 src/mysql/mysql.c:49
+#: src/namecache/plugin_namecache_sqlite.c:52
+#: src/namestore/plugin_namestore_sqlite.c:53
+#: src/peerstore/plugin_peerstore_sqlite.c:52
+#: src/reclaim/plugin_reclaim_sqlite.c:52
+#: src/testbed/generate-underlay-topology.c:47
+#: src/testbed/gnunet-daemon-latency-logger.c:52
+#: src/testbed/gnunet-daemon-testbed-underlay.c:56
+#: src/testbed/testbed_api_hosts.c:69 src/util/crypto_ecc.c:53
+#: src/util/crypto_ecc_setup.c:41 src/util/crypto_mpi.c:39
+#: src/include/gnunet_common.h:818 src/include/gnunet_common.h:827
+#: src/scalarproduct/scalarproduct.h:35
 #, c-format
 msgid "`%s' failed at %s:%d with error: %s\n"
 msgstr ""
 
-#: src/datacache/plugin_datacache_sqlite.c:861
-#: src/datastore/plugin_datastore_sqlite.c:506
-#: src/namecache/plugin_namecache_sqlite.c:327
-#: src/namestore/plugin_namestore_sqlite.c:262
-#: src/reclaim/plugin_reclaim_sqlite.c:334
+#: src/datacache/plugin_datacache_sqlite.c:863
+#: src/datastore/plugin_datastore_sqlite.c:508
+#: src/namecache/plugin_namecache_sqlite.c:229
+#: src/namestore/plugin_namestore_sqlite.c:265
+#: src/reclaim/plugin_reclaim_sqlite.c:336
 msgid "Tried to close sqlite without finalizing all prepared statements.\n"
 msgstr ""
 
-#: src/datastore/datastore_api.c:346
+#: src/datastore/datastore_api.c:348
 msgid "DATASTORE disconnected"
 msgstr ""
 
-#: src/datastore/datastore_api.c:466
+#: src/datastore/datastore_api.c:468
 msgid "Disconnected from DATASTORE"
 msgstr ""
 
-#: src/datastore/datastore_api.c:567
+#: src/datastore/datastore_api.c:569
 msgid "# queue overflows"
 msgstr ""
 
-#: src/datastore/datastore_api.c:597
+#: src/datastore/datastore_api.c:599
 msgid "# queue entries created"
 msgstr ""
 
-#: src/datastore/datastore_api.c:758
+#: src/datastore/datastore_api.c:760
 msgid "# status messages received"
 msgstr ""
 
-#: src/datastore/datastore_api.c:812
+#: src/datastore/datastore_api.c:814
 msgid "# Results received"
 msgstr ""
 
-#: src/datastore/datastore_api.c:918
+#: src/datastore/datastore_api.c:920
 msgid "# datastore connections (re)created"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1032
+#: src/datastore/datastore_api.c:1034
 msgid "# PUT requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1093
+#: src/datastore/datastore_api.c:1095
 msgid "# RESERVE requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1158
+#: src/datastore/datastore_api.c:1160
 msgid "# RELEASE RESERVE requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1236
+#: src/datastore/datastore_api.c:1238
 msgid "# REMOVE requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1296
+#: src/datastore/datastore_api.c:1298
 msgid "# GET REPLICATION requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1358
+#: src/datastore/datastore_api.c:1360
 msgid "# GET ZERO ANONYMITY requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1439
+#: src/datastore/datastore_api.c:1441
 msgid "# GET requests executed"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:187
+#: src/datastore/gnunet-datastore.c:189
 #, c-format
 msgid "Dumped %<PRIu64> records\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:215 src/datastore/gnunet-datastore.c:227
+#: src/datastore/gnunet-datastore.c:217 src/datastore/gnunet-datastore.c:229
 #, c-format
 msgid "Short write to file: %zd bytes expecting %zd\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:259
+#: src/datastore/gnunet-datastore.c:261
 msgid "Error queueing datastore GET operation\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:285 src/datastore/gnunet-datastore.c:410
+#: src/datastore/gnunet-datastore.c:287 src/datastore/gnunet-datastore.c:412
 #, c-format
 msgid "Unable to open dump file: %s\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:324
+#: src/datastore/gnunet-datastore.c:326
 #, c-format
 msgid "Failed to store item: %s, aborting\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:338
+#: src/datastore/gnunet-datastore.c:340
 #, c-format
 msgid "Inserted %<PRIu64> records\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:347 src/datastore/gnunet-datastore.c:361
+#: src/datastore/gnunet-datastore.c:349 src/datastore/gnunet-datastore.c:363
 #, c-format
 msgid "Short read from file: %zd bytes expecting %zd\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:387
+#: src/datastore/gnunet-datastore.c:389
 msgid "Error queueing datastore PUT operation\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:430
+#: src/datastore/gnunet-datastore.c:432
 msgid "Input file is not of a supported format\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:456
+#: src/datastore/gnunet-datastore.c:458
 msgid "Failed connecting to the datastore.\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:468
+#: src/datastore/gnunet-datastore.c:470
 #, c-format
 msgid "Please choose at least one operation: %s, %s\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:491
+#: src/datastore/gnunet-datastore.c:493
 msgid "Dump all records from the datastore"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:495
+#: src/datastore/gnunet-datastore.c:497
 msgid "Insert records into the datastore"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:500
+#: src/datastore/gnunet-datastore.c:502
 msgid "File to dump or insert"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:509
+#: src/datastore/gnunet-datastore.c:511
 msgid "Manipulate GNUnet datastore"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:336
+#: src/datastore/gnunet-service-datastore.c:338
 msgid "# bytes expired"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:418
+#: src/datastore/gnunet-service-datastore.c:420
 msgid "# bytes purged (low-priority)"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:560
+#: src/datastore/gnunet-service-datastore.c:562
 msgid "# results found"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:601
+#: src/datastore/gnunet-service-datastore.c:603
 #, c-format
 msgid ""
 "Insufficient space (%llu bytes are available) to satisfy RESERVE request for "
 "%llu bytes\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:612
+#: src/datastore/gnunet-service-datastore.c:614
 #, c-format
 msgid ""
 "The requested amount (%llu bytes) is larger than the cache size (%llu "
 "bytes)\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:618
+#: src/datastore/gnunet-service-datastore.c:620
 msgid ""
 "Insufficient space to satisfy request and requested amount is larger than "
 "cache size"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:625
+#: src/datastore/gnunet-service-datastore.c:627
 msgid "Insufficient space to satisfy request"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:632
-#: src/datastore/gnunet-service-datastore.c:687
-#: src/datastore/gnunet-service-datastore.c:835
-#: src/datastore/gnunet-service-datastore.c:1467
+#: src/datastore/gnunet-service-datastore.c:634
+#: src/datastore/gnunet-service-datastore.c:689
+#: src/datastore/gnunet-service-datastore.c:837
+#: src/datastore/gnunet-service-datastore.c:1469
 msgid "# reserved"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:705
+#: src/datastore/gnunet-service-datastore.c:707
 msgid "Could not find matching reservation"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:771
+#: src/datastore/gnunet-service-datastore.c:773
 #, c-format
 msgid "Need %llu bytes more space (%llu allowed, using %llu)\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:874
+#: src/datastore/gnunet-service-datastore.c:876
 msgid "# GET requests received"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:905
+#: src/datastore/gnunet-service-datastore.c:907
 #, fuzzy
 msgid "# GET KEY requests received"
 msgstr "# messaggi PONG ricevuti"
 
-#: src/datastore/gnunet-service-datastore.c:918
+#: src/datastore/gnunet-service-datastore.c:920
 msgid "# requests filtered by bloomfilter"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:954
+#: src/datastore/gnunet-service-datastore.c:956
 msgid "# GET REPLICATION requests received"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:987
+#: src/datastore/gnunet-service-datastore.c:989
 msgid "# GET ZERO ANONYMITY requests received"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1034
+#: src/datastore/gnunet-service-datastore.c:1036
 msgid "Content not found"
 msgstr "Contenuto non trovato"
 
-#: src/datastore/gnunet-service-datastore.c:1041
+#: src/datastore/gnunet-service-datastore.c:1043
 msgid "# bytes removed (explicit request)"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1086
+#: src/datastore/gnunet-service-datastore.c:1088
 msgid "# REMOVE requests received"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1135
+#: src/datastore/gnunet-service-datastore.c:1137
 #, c-format
 msgid ""
 "Datastore payload must have been inaccurate (%lld < %lld). Recomputing it.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1141
-#: src/datastore/gnunet-service-datastore.c:1316
+#: src/datastore/gnunet-service-datastore.c:1143
+#: src/datastore/gnunet-service-datastore.c:1318
 #, c-format
 msgid "New payload: %lld\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1195
+#: src/datastore/gnunet-service-datastore.c:1197
 #, c-format
 msgid "Loading `%s' datastore plugin\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1207
+#: src/datastore/gnunet-service-datastore.c:1209
 #, c-format
 msgid "Failed to load datastore plugin for `%s'\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1267
+#: src/datastore/gnunet-service-datastore.c:1269
 msgid "Bloomfilter construction complete.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1323
+#: src/datastore/gnunet-service-datastore.c:1325
 msgid "Rebuilding bloomfilter.  Please be patient.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1334
+#: src/datastore/gnunet-service-datastore.c:1336
 msgid "Plugin does not support get_keys function. Please fix!\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1504
+#: src/datastore/gnunet-service-datastore.c:1506
 #, c-format
 msgid "# bytes used in file-sharing datastore `%s'"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1520
+#: src/datastore/gnunet-service-datastore.c:1522
 msgid "# quota"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1525
+#: src/datastore/gnunet-service-datastore.c:1527
 msgid "# cache size"
 msgstr "# dimensione cache"
 
-#: src/datastore/gnunet-service-datastore.c:1541
+#: src/datastore/gnunet-service-datastore.c:1543
 #, c-format
 msgid "Could not use specified filename `%s' for bloomfilter.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1559
-#: src/datastore/gnunet-service-datastore.c:1575
+#: src/datastore/gnunet-service-datastore.c:1561
+#: src/datastore/gnunet-service-datastore.c:1577
 #, c-format
 msgid "Failed to remove bogus bloomfilter file `%s'\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1607
+#: src/datastore/gnunet-service-datastore.c:1609
 msgid "Failed to initialize bloomfilter.\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_heap.c:891
+#: src/datastore/plugin_datastore_heap.c:893
 msgid "Heap database running\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_mysql.c:369
-#: src/datastore/plugin_datastore_mysql.c:421
-#: src/datastore/plugin_datastore_mysql.c:1073
+#: src/datastore/plugin_datastore_mysql.c:371
+#: src/datastore/plugin_datastore_mysql.c:423
+#: src/datastore/plugin_datastore_mysql.c:1075
 msgid "MySQL statement run failure"
 msgstr ""
 
-#: src/datastore/plugin_datastore_mysql.c:408
-#: src/datastore/plugin_datastore_sqlite.c:676
+#: src/datastore/plugin_datastore_mysql.c:410
+#: src/datastore/plugin_datastore_sqlite.c:678
 msgid "Data too large"
 msgstr ""
 
-#: src/datastore/plugin_datastore_mysql.c:846
+#: src/datastore/plugin_datastore_mysql.c:848
 #, c-format
 msgid "`%s' for `%s' failed at %s:%d with error: %s\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_mysql.c:1178
-#: src/psycstore/plugin_psycstore_mysql.c:1934
+#: src/datastore/plugin_datastore_mysql.c:1180
 msgid "Mysql database running\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_postgres.c:274
-#: src/datastore/plugin_datastore_postgres.c:891
+#: src/datastore/plugin_datastore_postgres.c:276
+#: src/datastore/plugin_datastore_postgres.c:893
 msgid "Postgress exec failure"
 msgstr ""
 
-#: src/datastore/plugin_datastore_postgres.c:852
+#: src/datastore/plugin_datastore_postgres.c:854
 msgid "Failed to drop table from database.\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_postgres.c:950
-#: src/psycstore/plugin_psycstore_postgres.c:1504
+#: src/datastore/plugin_datastore_postgres.c:952
 msgid "Postgres database running\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_sqlite.c:64
-#: src/testbed/generate-underlay-topology.c:48
-#: src/testbed/gnunet-daemon-latency-logger.c:53
-#: src/testbed/gnunet-daemon-testbed-underlay.c:57
+#: src/datastore/plugin_datastore_sqlite.c:66
+#: src/testbed/generate-underlay-topology.c:50
+#: src/testbed/gnunet-daemon-latency-logger.c:55
+#: src/testbed/gnunet-daemon-testbed-underlay.c:59
 #, c-format
 msgid "`%s' failed at %s:%u with error: %s"
 msgstr ""
 
-#: src/datastore/plugin_datastore_sqlite.c:269
-#: src/namecache/plugin_namecache_sqlite.c:207
-#: src/namestore/plugin_namestore_sqlite.c:203
-#: src/peerstore/plugin_peerstore_sqlite.c:533
-#: src/psycstore/plugin_psycstore_sqlite.c:323
-#: src/reclaim/plugin_reclaim_sqlite.c:210
+#: src/datastore/plugin_datastore_sqlite.c:271
+#: src/namecache/plugin_namecache_sqlite.c:173
+#: src/namestore/plugin_namestore_sqlite.c:206
+#: src/peerstore/plugin_peerstore_sqlite.c:535
+#: src/reclaim/plugin_reclaim_sqlite.c:212
 #, c-format
 msgid "Unable to initialize SQLite: %s.\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_sqlite.c:627
+#: src/datastore/plugin_datastore_sqlite.c:629
 msgid "sqlite bind failure"
 msgstr ""
 
-#: src/datastore/plugin_datastore_sqlite.c:1325
+#: src/datastore/plugin_datastore_sqlite.c:1327
 msgid "sqlite version to old to determine size, assuming zero\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_sqlite.c:1359
+#: src/datastore/plugin_datastore_sqlite.c:1361
 #, c-format
 msgid ""
 "Using sqlite page utilization to estimate payload (%llu pages of size %llu "
 "bytes)\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_sqlite.c:1403
-#: src/namecache/plugin_namecache_sqlite.c:638
-#: src/namestore/plugin_namestore_sqlite.c:753
-#: src/reclaim/plugin_reclaim_sqlite.c:709
+#: src/datastore/plugin_datastore_sqlite.c:1405
+#: src/namecache/plugin_namecache_sqlite.c:557
+#: src/namestore/plugin_namestore_sqlite.c:750
+#: src/reclaim/plugin_reclaim_sqlite.c:711
 msgid "Sqlite database running\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_template.c:251
+#: src/datastore/plugin_datastore_template.c:253
 msgid "Template database running\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:156
+#: src/dht/gnunet-dht-get.c:158
 #, c-format
 msgid ""
 "Result %d, type %d:\n"
 "%.*s\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:157
+#: src/dht/gnunet-dht-get.c:159
 #, c-format
 msgid "Result %d, type %d:\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:202
+#: src/dht/gnunet-dht-get.c:204
 msgid "Must provide key for DHT GET!\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:208 src/dht/gnunet-dht-monitor.c:255
+#: src/dht/gnunet-dht-get.c:210 src/dht/gnunet-dht-monitor.c:257
 msgid "Failed to connect to DHT service!\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:217
-msgid "Issueing DHT GET with key"
+#: src/dht/gnunet-dht-get.c:219
+msgid "Issuing DHT GET with key"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:246 src/dht/gnunet-dht-monitor.c:305
-#: src/dht/gnunet-dht-put.c:196
+#: src/dht/gnunet-dht-get.c:248 src/dht/gnunet-dht-monitor.c:307
+#: src/dht/gnunet-dht-put.c:198
 msgid "the query key"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:251
+#: src/dht/gnunet-dht-get.c:253
 msgid "how many parallel requests (replicas) to create"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:256 src/dht/gnunet-dht-monitor.c:311
+#: src/dht/gnunet-dht-get.c:258 src/dht/gnunet-dht-monitor.c:313
 msgid "the type of data to look for"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:261
+#: src/dht/gnunet-dht-get.c:263
 msgid "how long to execute this query before giving up?"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:265 src/dht/gnunet-dht-put.c:200
+#: src/dht/gnunet-dht-get.c:267 src/dht/gnunet-dht-put.c:202
 msgid "use DHT's demultiplex everywhere option"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:278
+#: src/dht/gnunet-dht-get.c:280
 msgid "Issue a GET request to the GNUnet DHT, prints results."
 msgstr ""
 
-#: src/dht/gnunet-dht-monitor.c:317
+#: src/dht/gnunet-dht-monitor.c:319
 msgid "how long should the monitor command run"
 msgstr ""
 
-#: src/dht/gnunet-dht-monitor.c:322 src/fs/gnunet-download.c:370
-#: src/nse/gnunet-nse-profiler.c:876
+#: src/dht/gnunet-dht-monitor.c:324 src/fs/gnunet-download.c:372
+#: src/nse/gnunet-nse-profiler.c:878
 msgid "be verbose (print progress information)"
 msgstr ""
 
-#: src/dht/gnunet-dht-monitor.c:335
+#: src/dht/gnunet-dht-monitor.c:337
 msgid "Prints all packets that go through the DHT."
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:914 src/testbed/gnunet-testbed-profiler.c:251
+#: src/dht/gnunet_dht_profiler.c:916 src/testbed/gnunet-testbed-profiler.c:253
 #, c-format
 msgid "Exiting as the number of peers is %u\n"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:947 src/rps/gnunet-rps-profiler.c:2764
+#: src/dht/gnunet_dht_profiler.c:949 src/rps/gnunet-rps-profiler.c:2953
 msgid "number of peers to start"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:952
+#: src/dht/gnunet_dht_profiler.c:954
 msgid "number of PUTs to perform per peer"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:957 src/nse/gnunet-nse-profiler.c:858
-#: src/testbed/gnunet-testbed-profiler.c:302
+#: src/dht/gnunet_dht_profiler.c:959 src/nse/gnunet-nse-profiler.c:860
+#: src/testbed/gnunet-testbed-profiler.c:304
 msgid "name of the file with the login information for the testbed"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:962
+#: src/dht/gnunet_dht_profiler.c:964
 msgid "delay between rounds for collecting statistics (default: 30 sec)"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:967
+#: src/dht/gnunet_dht_profiler.c:969
 msgid "delay to start doing PUTs (default: 1 sec)"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:972
+#: src/dht/gnunet_dht_profiler.c:974
 msgid "delay to start doing GETs (default: 5 min)"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:977
+#: src/dht/gnunet_dht_profiler.c:979
 msgid "replication degree for DHT PUTs"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:982
+#: src/dht/gnunet_dht_profiler.c:984
 msgid "chance that a peer is selected at random for PUTs"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:987
+#: src/dht/gnunet_dht_profiler.c:989
 msgid "timeout for DHT PUT and GET requests (default: 1 min)"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:1007
+#: src/dht/gnunet_dht_profiler.c:1009
 msgid "Measure quality and performance of the DHT service."
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:132
+#: src/dht/gnunet-dht-put.c:134
 msgid "Must provide KEY and DATA for DHT put!\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:140
+#: src/dht/gnunet-dht-put.c:142
 msgid "Could not connect to DHT service!\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:151
+#: src/dht/gnunet-dht-put.c:153
 #, c-format
 msgid "Issuing put request for `%s' with data `%s'!\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:186
+#: src/dht/gnunet-dht-put.c:188
 msgid "the data to insert under the key"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:191
+#: src/dht/gnunet-dht-put.c:193
 msgid "how long to store this entry in the dht (in seconds)"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:205
+#: src/dht/gnunet-dht-put.c:207
 msgid "how many replicas to create"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:209
+#: src/dht/gnunet-dht-put.c:211
 msgid "use DHT's record route option"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:214
+#: src/dht/gnunet-dht-put.c:216
 msgid "the type to insert data as"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:231
+#: src/dht/gnunet-dht-put.c:233
 msgid "Issue a PUT request to the GNUnet DHT insert DATA under KEY."
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:367
+#: src/dht/gnunet-service-dht_clients.c:369
 msgid "# GET requests from clients injected"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:481
+#: src/dht/gnunet-service-dht_clients.c:483
 msgid "# PUT requests received from clients"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:614
+#: src/dht/gnunet-service-dht_clients.c:616
 msgid "# GET requests received from clients"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:840
+#: src/dht/gnunet-service-dht_clients.c:842
 msgid "# GET STOP requests received from clients"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:1025
+#: src/dht/gnunet-service-dht_clients.c:1027
 msgid "# Key match, type mismatches in REPLY to CLIENT"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:1040
+#: src/dht/gnunet-service-dht_clients.c:1042
 msgid "# Duplicate REPLIES to CLIENT request dropped"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:1086
+#: src/dht/gnunet-service-dht_clients.c:1088
 #, c-format
 msgid "Unsupported block type (%u) in request!\n"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:1093
+#: src/dht/gnunet-service-dht_clients.c:1095
 msgid "# RESULTS queued for clients"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:1171
+#: src/dht/gnunet-service-dht_clients.c:1173
 msgid "# REPLIES ignored for CLIENTS (no match)"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:71
+#: src/dht/gnunet-service-dht_datacache.c:73
 #, c-format
 msgid "%s request received, but have no datacache!\n"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:81
+#: src/dht/gnunet-service-dht_datacache.c:83
 msgid "# ITEMS stored in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:205
+#: src/dht/gnunet-service-dht_datacache.c:207
 msgid "# Good RESULTS found in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:217
+#: src/dht/gnunet-service-dht_datacache.c:219
 msgid "# Duplicate RESULTS found in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:223
+#: src/dht/gnunet-service-dht_datacache.c:225
 msgid "# Invalid RESULTS found in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:229
+#: src/dht/gnunet-service-dht_datacache.c:231
 msgid "# Irrelevant RESULTS found in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:241
+#: src/dht/gnunet-service-dht_datacache.c:243
 msgid "# Unsupported RESULTS found in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:245
+#: src/dht/gnunet-service-dht_datacache.c:247
 #, c-format
 msgid "Unsupported block type (%u) in local response!\n"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:280
+#: src/dht/gnunet-service-dht_datacache.c:282
 msgid "# GET requests given to datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_hello.c:84
+#: src/dht/gnunet-service-dht_hello.c:86
 msgid "# HELLOs obtained from peerinfo"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:677
+#: src/dht/gnunet-service-dht_neighbours.c:679
 msgid "# FIND PEER messages initiated"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:850
+#: src/dht/gnunet-service-dht_neighbours.c:852
 msgid "# requests TTL-dropped"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1053
-#: src/dht/gnunet-service-dht_neighbours.c:1096
+#: src/dht/gnunet-service-dht_neighbours.c:1055
+#: src/dht/gnunet-service-dht_neighbours.c:1098
 msgid "# Peers excluded from routing due to Bloomfilter"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1070
-#: src/dht/gnunet-service-dht_neighbours.c:1112
+#: src/dht/gnunet-service-dht_neighbours.c:1072
+#: src/dht/gnunet-service-dht_neighbours.c:1114
 msgid "# Peer selection failed"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1269
+#: src/dht/gnunet-service-dht_neighbours.c:1271
 msgid "# PUT requests routed"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1302
+#: src/dht/gnunet-service-dht_neighbours.c:1304
 msgid "# PUT messages queued for transmission"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1313
-#: src/dht/gnunet-service-dht_neighbours.c:1453
-#: src/dht/gnunet-service-dht_neighbours.c:1556
+#: src/dht/gnunet-service-dht_neighbours.c:1315
+#: src/dht/gnunet-service-dht_neighbours.c:1455
+#: src/dht/gnunet-service-dht_neighbours.c:1558
 msgid "# P2P messages dropped due to full queue"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1398
+#: src/dht/gnunet-service-dht_neighbours.c:1400
 msgid "# GET requests routed"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1441
+#: src/dht/gnunet-service-dht_neighbours.c:1443
 msgid "# GET messages queued for transmission"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1571
+#: src/dht/gnunet-service-dht_neighbours.c:1573
 msgid "# RESULT messages queued for transmission"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1674
+#: src/dht/gnunet-service-dht_neighbours.c:1676
 msgid "# Expired PUTs discarded"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1682
+#: src/dht/gnunet-service-dht_neighbours.c:1684
 msgid "# P2P PUT requests received"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1686
+#: src/dht/gnunet-service-dht_neighbours.c:1688
 msgid "# P2P PUT bytes received"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1912
+#: src/dht/gnunet-service-dht_neighbours.c:1914
 msgid "# FIND PEER requests ignored due to Bloomfilter"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1920
+#: src/dht/gnunet-service-dht_neighbours.c:1922
 msgid "# FIND PEER requests ignored due to lack of HELLO"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:2082
+#: src/dht/gnunet-service-dht_neighbours.c:2084
 msgid "# P2P GET requests received"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:2086
+#: src/dht/gnunet-service-dht_neighbours.c:2088
 msgid "# P2P GET bytes received"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:2151
+#: src/dht/gnunet-service-dht_neighbours.c:2153
 msgid "# P2P FIND PEER requests processed"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:2172
+#: src/dht/gnunet-service-dht_neighbours.c:2174
 msgid "# P2P GET requests ONLY routed"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:2349
+#: src/dht/gnunet-service-dht_neighbours.c:2351
 msgid "# Expired results discarded"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:2365
+#: src/dht/gnunet-service-dht_neighbours.c:2367
 msgid "# P2P RESULTS received"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:2369
+#: src/dht/gnunet-service-dht_neighbours.c:2371
 msgid "# P2P RESULT bytes received"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_nse.c:57
+#: src/dht/gnunet-service-dht_nse.c:59
 msgid "# Network size estimates received"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:221
+#: src/dht/gnunet-service-dht_routing.c:223
 msgid "# Good REPLIES matched against routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:235
+#: src/dht/gnunet-service-dht_routing.c:237
 msgid "# Duplicate REPLIES matched against routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:241
+#: src/dht/gnunet-service-dht_routing.c:243
 msgid "# Invalid REPLIES matched against routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:247
+#: src/dht/gnunet-service-dht_routing.c:249
 msgid "# Irrelevant REPLIES matched against routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:259
+#: src/dht/gnunet-service-dht_routing.c:261
 msgid "# Unsupported REPLIES matched against routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:337
+#: src/dht/gnunet-service-dht_routing.c:339
 msgid "# Entries removed from routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:413
+#: src/dht/gnunet-service-dht_routing.c:415
 msgid "# Entries added to routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:435
+#: src/dht/gnunet-service-dht_routing.c:437
 msgid "# DHT requests combined"
 msgstr ""
 
-#: src/dht/plugin_block_dht.c:187
+#: src/dht/plugin_block_dht.c:189
 #, c-format
 msgid "Block not of type %u\n"
 msgstr ""
 
-#: src/dht/plugin_block_dht.c:196
+#: src/dht/plugin_block_dht.c:198
 msgid "Size mismatch for block\n"
 msgstr ""
 
-#: src/dht/plugin_block_dht.c:207
+#: src/dht/plugin_block_dht.c:209
 #, c-format
 msgid "Block of type %u is malformed\n"
 msgstr ""
 
-#: src/dns/gnunet-dns-monitor.c:351 src/dns/gnunet-dns-monitor.c:356
+#: src/dns/gnunet-dns-monitor.c:353 src/dns/gnunet-dns-monitor.c:358
 msgid "only monitor DNS queries"
 msgstr ""
 
-#: src/dns/gnunet-dns-monitor.c:368
+#: src/dns/gnunet-dns-monitor.c:370
 msgid "Monitor DNS queries."
 msgstr ""
 
-#: src/dns/gnunet-dns-redirector.c:235
+#: src/dns/gnunet-dns-redirector.c:237
 msgid "set A records"
 msgstr ""
 
-#: src/dns/gnunet-dns-redirector.c:241
+#: src/dns/gnunet-dns-redirector.c:243
 msgid "set AAAA records"
 msgstr ""
 
-#: src/dns/gnunet-dns-redirector.c:254
+#: src/dns/gnunet-dns-redirector.c:256
 msgid "Change DNS replies to point elsewhere."
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:460
+#: src/dns/gnunet-service-dns.c:462
 msgid "# DNS requests answered via TUN interface"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:608
+#: src/dns/gnunet-service-dns.c:610
 msgid "# DNS exit failed (failed to open socket)"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:738
+#: src/dns/gnunet-service-dns.c:740
 msgid "# External DNS response discarded (no matching request)"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:813
+#: src/dns/gnunet-service-dns.c:815
 msgid "# Client response discarded (no matching request)"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:928
+#: src/dns/gnunet-service-dns.c:930
 msgid "Received malformed IPv4-UDP packet on TUN interface.\n"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:944
+#: src/dns/gnunet-service-dns.c:946
 msgid "Received malformed IPv6-UDP packet on TUN interface.\n"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:953
+#: src/dns/gnunet-service-dns.c:955
 #, c-format
 msgid "Got non-IP packet with %u bytes and protocol %u from TUN\n"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:963
+#: src/dns/gnunet-service-dns.c:965
 msgid "DNS interceptor got non-DNS packet (dropped)\n"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:965
+#: src/dns/gnunet-service-dns.c:967
 msgid "# Non-DNS UDP packet received via TUN interface"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:1032
+#: src/dns/gnunet-service-dns.c:1034
 msgid "# DNS requests received via TUN interface"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:1080 src/exit/gnunet-daemon-exit.c:3563
+#: src/dns/gnunet-service-dns.c:1082 src/exit/gnunet-daemon-exit.c:3565
 msgid "need a valid IPv4 or IPv6 address\n"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:1090
+#: src/dns/gnunet-service-dns.c:1092
 #, c-format
 msgid "`%s' must be installed SUID, will not run DNS interceptor\n"
 msgstr ""
 
-#: src/dv/gnunet-dv.c:173
+#: src/dv/gnunet-dv.c:175
 msgid "Print information about DV state"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:958
+#: src/exit/gnunet-daemon-exit.c:960
 msgid "# TCP packets sent via TUN"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:1059
+#: src/exit/gnunet-daemon-exit.c:1061
 msgid "# ICMP packets sent via TUN"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:1338
+#: src/exit/gnunet-daemon-exit.c:1340
 msgid "# UDP packets sent via TUN"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:1462 src/exit/gnunet-daemon-exit.c:1570
-#: src/exit/gnunet-daemon-exit.c:1617 src/exit/gnunet-daemon-exit.c:1699
-#: src/exit/gnunet-daemon-exit.c:1820 src/exit/gnunet-daemon-exit.c:1951
-#: src/exit/gnunet-daemon-exit.c:2205
+#: src/exit/gnunet-daemon-exit.c:1464 src/exit/gnunet-daemon-exit.c:1572
+#: src/exit/gnunet-daemon-exit.c:1619 src/exit/gnunet-daemon-exit.c:1701
+#: src/exit/gnunet-daemon-exit.c:1822 src/exit/gnunet-daemon-exit.c:1953
+#: src/exit/gnunet-daemon-exit.c:2207
 msgid "# Bytes received from CADET"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:1465
+#: src/exit/gnunet-daemon-exit.c:1467
 msgid "# UDP IP-exit requests received via cadet"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:1573
+#: src/exit/gnunet-daemon-exit.c:1575
 msgid "# UDP service requests received via cadet"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:1613
+#: src/exit/gnunet-daemon-exit.c:1615
 msgid "# TCP service creation requests received via cadet"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:1702
+#: src/exit/gnunet-daemon-exit.c:1704
 msgid "# TCP IP-exit creation requests received via cadet"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:1786
+#: src/exit/gnunet-daemon-exit.c:1788
 msgid "# TCP DATA requests dropped (no session)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:1823
+#: src/exit/gnunet-daemon-exit.c:1825
 msgid "# TCP data requests received via cadet"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:1954
+#: src/exit/gnunet-daemon-exit.c:1956
 msgid "# ICMP IP-exit requests received via cadet"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2020 src/exit/gnunet-daemon-exit.c:2277
-#: src/exit/gnunet-daemon-exit.c:2632 src/vpn/gnunet-service-vpn.c:826
-#: src/vpn/gnunet-service-vpn.c:989 src/vpn/gnunet-service-vpn.c:2103
+#: src/exit/gnunet-daemon-exit.c:2022 src/exit/gnunet-daemon-exit.c:2279
+#: src/exit/gnunet-daemon-exit.c:2634 src/vpn/gnunet-service-vpn.c:828
+#: src/vpn/gnunet-service-vpn.c:991 src/vpn/gnunet-service-vpn.c:2105
 msgid "# ICMPv4 packets dropped (type not allowed)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2079 src/exit/gnunet-daemon-exit.c:2336
-#: src/exit/gnunet-daemon-exit.c:2669 src/vpn/gnunet-service-vpn.c:885
-#: src/vpn/gnunet-service-vpn.c:1022 src/vpn/gnunet-service-vpn.c:2156
+#: src/exit/gnunet-daemon-exit.c:2081 src/exit/gnunet-daemon-exit.c:2338
+#: src/exit/gnunet-daemon-exit.c:2671 src/vpn/gnunet-service-vpn.c:887
+#: src/vpn/gnunet-service-vpn.c:1024 src/vpn/gnunet-service-vpn.c:2158
 msgid "# ICMPv6 packets dropped (type not allowed)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2208
+#: src/exit/gnunet-daemon-exit.c:2210
 msgid "# ICMP service requests received via cadet"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2262 src/vpn/gnunet-service-vpn.c:983
-#: src/vpn/gnunet-service-vpn.c:2094
+#: src/exit/gnunet-daemon-exit.c:2264 src/vpn/gnunet-service-vpn.c:985
+#: src/vpn/gnunet-service-vpn.c:2096
 msgid "# ICMPv4 packets dropped (impossible PT to v6)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2321 src/vpn/gnunet-service-vpn.c:873
-#: src/vpn/gnunet-service-vpn.c:2128 src/vpn/gnunet-service-vpn.c:2139
+#: src/exit/gnunet-daemon-exit.c:2323 src/vpn/gnunet-service-vpn.c:875
+#: src/vpn/gnunet-service-vpn.c:2130 src/vpn/gnunet-service-vpn.c:2141
 msgid "# ICMPv6 packets dropped (impossible PT to v4)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2400 src/exit/gnunet-daemon-exit.c:3066
+#: src/exit/gnunet-daemon-exit.c:2402 src/exit/gnunet-daemon-exit.c:3068
 msgid "# Inbound CADET channels created"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2520
+#: src/exit/gnunet-daemon-exit.c:2522
 #, c-format
 msgid "Got duplicate service records for `%s:%u'\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2539
+#: src/exit/gnunet-daemon-exit.c:2541
 msgid "# Messages transmitted via cadet channels"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2717
+#: src/exit/gnunet-daemon-exit.c:2719
 msgid "# ICMP packets dropped (not allowed)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2725
+#: src/exit/gnunet-daemon-exit.c:2727
 msgid "ICMP Packet dropped, have no matching connection information\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2799
+#: src/exit/gnunet-daemon-exit.c:2801
 msgid "UDP Packet dropped, have no matching connection information\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2871
+#: src/exit/gnunet-daemon-exit.c:2873
 msgid "TCP Packet dropped, have no matching connection information\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2919
+#: src/exit/gnunet-daemon-exit.c:2921
 msgid "# Packets received from TUN"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2933
+#: src/exit/gnunet-daemon-exit.c:2935
 msgid "# Bytes received from TUN"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2959
+#: src/exit/gnunet-daemon-exit.c:2961
 msgid "IPv4 packet options received.  Ignored.\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2986
+#: src/exit/gnunet-daemon-exit.c:2988
 #, c-format
 msgid "IPv4 packet with unsupported next header %u received.  Ignored.\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3032
+#: src/exit/gnunet-daemon-exit.c:3034
 #, c-format
 msgid "IPv6 packet with unsupported next header %d received.  Ignored.\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3040
+#: src/exit/gnunet-daemon-exit.c:3042
 #, c-format
 msgid "Packet from unknown protocol %u received.  Ignored.\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3243 src/exit/gnunet-daemon-exit.c:3253
+#: src/exit/gnunet-daemon-exit.c:3245 src/exit/gnunet-daemon-exit.c:3255
 #, c-format
 msgid "Option `%s' for domain `%s' is not formatted correctly!\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3267 src/exit/gnunet-daemon-exit.c:3275
+#: src/exit/gnunet-daemon-exit.c:3269 src/exit/gnunet-daemon-exit.c:3277
 #, c-format
 msgid "`%s' is not a valid port number (for domain `%s')!"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3316
+#: src/exit/gnunet-daemon-exit.c:3318
 #, c-format
 msgid "No addresses found for hostname `%s' of service `%s'!\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3330 src/exit/gnunet-daemon-exit.c:3343
+#: src/exit/gnunet-daemon-exit.c:3332 src/exit/gnunet-daemon-exit.c:3345
 #, c-format
 msgid "Service `%s' configured for IPv4, but IPv4 is disabled!\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3355
+#: src/exit/gnunet-daemon-exit.c:3357
 #, c-format
 msgid "No IP addresses found for hostname `%s' of service `%s'!\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3499
+#: src/exit/gnunet-daemon-exit.c:3501
 msgid ""
 "This system does not support IPv4, will disable IPv4 functions despite them "
 "being enabled in the configuration\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3507
+#: src/exit/gnunet-daemon-exit.c:3509
 msgid ""
 "This system does not support IPv6, will disable IPv6 functions despite them "
 "being enabled in the configuration\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3514
+#: src/exit/gnunet-daemon-exit.c:3516
 msgid ""
 "Cannot enable IPv4 exit but disable IPv4 on TUN interface, will use "
 "ENABLE_IPv4=YES\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3520
+#: src/exit/gnunet-daemon-exit.c:3522
 msgid ""
 "Cannot enable IPv6 exit but disable IPv6 on TUN interface, will use "
 "ENABLE_IPv6=YES\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3688
+#: src/exit/gnunet-daemon-exit.c:3690
 msgid "Must be a number"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3803
+#: src/exit/gnunet-daemon-exit.c:3805
 #, c-format
 msgid "`%s' must be installed SUID, EXIT will not work\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3815 src/pt/gnunet-daemon-pt.c:1202
+#: src/exit/gnunet-daemon-exit.c:3817 src/pt/gnunet-daemon-pt.c:1204
 msgid "No useful service enabled.  Exiting.\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3964
+#: src/exit/gnunet-daemon-exit.c:3966
 msgid "Daemon to run to provide an IP exit node for the VPN"
 msgstr ""
 
-#: src/fragmentation/defragmentation.c:273
+#: src/fragmentation/defragmentation.c:275
 msgid "# acknowledgements sent for fragment"
 msgstr ""
 
-#: src/fragmentation/defragmentation.c:466
-#: src/transport/plugin_transport_wlan.c:1552
+#: src/fragmentation/defragmentation.c:468
+#: src/transport/plugin_transport_wlan.c:1554
 msgid "# fragments received"
 msgstr ""
 
-#: src/fragmentation/defragmentation.c:536
+#: src/fragmentation/defragmentation.c:538
 msgid "# duplicate fragments received"
 msgstr ""
 
-#: src/fragmentation/defragmentation.c:554
+#: src/fragmentation/defragmentation.c:556
 msgid "# messages defragmented"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:238
+#: src/fragmentation/fragmentation.c:240
 msgid "# fragments transmitted"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:243
+#: src/fragmentation/fragmentation.c:245
 msgid "# fragments retransmitted"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:276
+#: src/fragmentation/fragmentation.c:278
 msgid "# fragments wrap arounds"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:323
+#: src/fragmentation/fragmentation.c:325
 msgid "# messages fragmented"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:329
+#: src/fragmentation/fragmentation.c:331
 msgid "# total size of fragmented messages"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:454
+#: src/fragmentation/fragmentation.c:456
 msgid "# fragment acknowledgements received"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:461
+#: src/fragmentation/fragmentation.c:463
 msgid "# bits removed from fragmentation ACKs"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:485
+#: src/fragmentation/fragmentation.c:487
 msgid "# fragmentation transmissions completed"
 msgstr ""
 
-#: src/fs/fs_api.c:497
+#: src/fs/fs_api.c:499
 #, c-format
 msgid "Could not open file `%s': %s"
 msgstr ""
 
-#: src/fs/fs_api.c:508
+#: src/fs/fs_api.c:510
 #, c-format
 msgid "Could not read file `%s': %s"
 msgstr ""
 
-#: src/fs/fs_api.c:516
+#: src/fs/fs_api.c:518
 #, c-format
 msgid "Short read reading from file `%s'!"
 msgstr ""
 
-#: src/fs/fs_api.c:1124
+#: src/fs/fs_api.c:1126
 #, c-format
 msgid "Failed to resume publishing information `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_api.c:1644
+#: src/fs/fs_api.c:1646
 #, c-format
 msgid "Failure while resuming publishing operation `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_api.c:1660
+#: src/fs/fs_api.c:1662
 #, c-format
 msgid "Failed to resume publishing operation `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_api.c:2320
+#: src/fs/fs_api.c:2322
 #, c-format
 msgid "Failure while resuming unindexing operation `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_api.c:2330
+#: src/fs/fs_api.c:2332
 #, c-format
 msgid "Failed to resume unindexing operation `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_api.c:2458 src/fs/fs_api.c:2704
+#: src/fs/fs_api.c:2460 src/fs/fs_api.c:2706
 #, c-format
 msgid "Failed to resume sub-download `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_api.c:2476
+#: src/fs/fs_api.c:2478
 #, c-format
 msgid "Failed to resume sub-search `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_api.c:2491 src/fs/fs_api.c:2510 src/fs/fs_api.c:3014
+#: src/fs/fs_api.c:2493 src/fs/fs_api.c:2512 src/fs/fs_api.c:3016
 #, c-format
 msgid "Failure while resuming search operation `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_api.c:2694
+#: src/fs/fs_api.c:2696
 #, c-format
 msgid "Failed to resume sub-download `%s': could not open file `%s'\n"
 msgstr ""
 
-#: src/fs/fs_api.c:2957
+#: src/fs/fs_api.c:2959
 msgid "Could not resume running search, will resume as paused search\n"
 msgstr ""
 
-#: src/fs/fs_api.c:3052
+#: src/fs/fs_api.c:3054
 #, c-format
 msgid "Failure while resuming download operation `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_directory.c:211
+#: src/fs/fs_directory.c:213
 msgid "MAGIC mismatch.  This is not a GNUnet directory.\n"
 msgstr ""
 
-#: src/fs/fs_download.c:308
+#: src/fs/fs_download.c:310
 msgid ""
 "Recursive downloads of directories larger than 4 GB are not supported on 32-"
 "bit systems\n"
 msgstr ""
 
-#: src/fs/fs_download.c:333
+#: src/fs/fs_download.c:335
 msgid "Directory too large for system address space\n"
 msgstr ""
 
-#: src/fs/fs_download.c:345
+#: src/fs/fs_download.c:347
 #, c-format
 msgid ""
 "Failed to access full directroy contents of `%s' for recursive download\n"
 msgstr ""
 
-#: src/fs/fs_download.c:532 src/fs/fs_download.c:544
+#: src/fs/fs_download.c:534 src/fs/fs_download.c:546
 #, c-format
 msgid "Failed to open file `%s' for writing"
 msgstr ""
 
-#: src/fs/fs_download.c:954
+#: src/fs/fs_download.c:956
 #, c-format
 msgid "Failed to create directory for recursive download of `%s'\n"
 msgstr ""
 
-#: src/fs/fs_download.c:1045
+#: src/fs/fs_download.c:1047
 #, c-format
 msgid ""
 "Internal error or bogus download URI (expected %u bytes at depth %u and "
 "offset %llu/%llu, got %u bytes)"
 msgstr ""
 
-#: src/fs/fs_download.c:1073
+#: src/fs/fs_download.c:1075
 msgid "internal error decrypting content"
 msgstr ""
 
-#: src/fs/fs_download.c:1097
+#: src/fs/fs_download.c:1099
 #, c-format
 msgid "Download failed: could not open file `%s': %s"
 msgstr ""
 
-#: src/fs/fs_download.c:1109
+#: src/fs/fs_download.c:1111
 #, c-format
 msgid "Failed to seek to offset %llu in file `%s': %s"
 msgstr ""
 
-#: src/fs/fs_download.c:1118
+#: src/fs/fs_download.c:1120
 #, c-format
 msgid "Failed to write block of %u bytes at offset %llu in file `%s': %s"
 msgstr ""
 
-#: src/fs/fs_download.c:1218
+#: src/fs/fs_download.c:1220
 msgid "internal error decoding tree"
 msgstr ""
 
-#: src/fs/fs_download.c:1883
+#: src/fs/fs_download.c:1885
 msgid "Invalid URI"
 msgstr ""
 
-#: src/fs/fs_getopt.c:224
+#: src/fs/fs_getopt.c:235
 #, c-format
 msgid ""
 "Unknown metadata type in metadata option `%s'.  Using metadata type "
 "`unknown' instead.\n"
 msgstr ""
 
-#: src/fs/fs_list_indexed.c:150
+#: src/fs/fs_list_indexed.c:152
 #, c-format
 msgid "Failed to receive response from `%s' service.\n"
 msgstr ""
 
-#: src/fs/fs_list_indexed.c:194
+#: src/fs/fs_list_indexed.c:196
 #, c-format
 msgid "Failed to not connect to `%s' service.\n"
 msgstr ""
 
-#: src/fs/fs_misc.c:126
+#: src/fs/fs_misc.c:128
 #, c-format
 msgid "Did not find mime type `%s' in extension list.\n"
 msgstr ""
 
-#: src/fs/fs_namespace.c:205
+#: src/fs/fs_namespace.c:207
 #, c-format
 msgid "Failed to open `%s' for writing: %s\n"
 msgstr ""
 
-#: src/fs/fs_namespace.c:230
+#: src/fs/fs_namespace.c:232
 #, c-format
 msgid "Failed to write `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_namespace.c:322
+#: src/fs/fs_namespace.c:324
 #, c-format
 msgid "Failed to read `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_namespace.c:468
+#: src/fs/fs_namespace.c:470
 msgid "Failed to connect to datastore."
 msgstr ""
 
-#: src/fs/fs_publish.c:125 src/fs/fs_publish.c:436
+#: src/fs/fs_publish.c:127 src/fs/fs_publish.c:438
 #, c-format
 msgid "Publishing failed: %s"
 msgstr ""
 
-#: src/fs/fs_publish.c:722 src/fs/fs_publish.c:776 src/fs/fs_publish.c:821
-#: src/fs/fs_publish.c:842 src/fs/fs_publish.c:872 src/fs/fs_publish.c:1138
+#: src/fs/fs_publish.c:724 src/fs/fs_publish.c:778 src/fs/fs_publish.c:823
+#: src/fs/fs_publish.c:844 src/fs/fs_publish.c:874 src/fs/fs_publish.c:1140
 #, c-format
 msgid "Can not index file `%s': %s.  Will try to insert instead.\n"
 msgstr ""
 
-#: src/fs/fs_publish.c:778
+#: src/fs/fs_publish.c:780
 msgid "error on index-start request to `fs' service"
 msgstr ""
 
-#: src/fs/fs_publish.c:823
+#: src/fs/fs_publish.c:825
 msgid "failed to compute hash"
 msgstr ""
 
-#: src/fs/fs_publish.c:843
+#: src/fs/fs_publish.c:845
 msgid "filename too long"
 msgstr ""
 
-#: src/fs/fs_publish.c:874
+#: src/fs/fs_publish.c:876
 msgid "could not connect to `fs' service"
 msgstr ""
 
-#: src/fs/fs_publish.c:900
+#: src/fs/fs_publish.c:902
 #, c-format
 msgid "Failed to get file identifiers for `%s'\n"
 msgstr ""
 
-#: src/fs/fs_publish.c:989 src/fs/fs_publish.c:1025
+#: src/fs/fs_publish.c:991 src/fs/fs_publish.c:1027
 msgid "Can not create LOC URI. Will continue with CHK instead.\n"
 msgstr ""
 
-#: src/fs/fs_publish.c:1092
+#: src/fs/fs_publish.c:1094
 #, c-format
 msgid "Recursive upload failed at `%s': %s"
 msgstr ""
 
-#: src/fs/fs_publish.c:1100
+#: src/fs/fs_publish.c:1102
 #, c-format
 msgid "Recursive upload failed: %s"
 msgstr ""
 
-#: src/fs/fs_publish.c:1140
+#: src/fs/fs_publish.c:1142
 msgid "needs to be an actual file"
 msgstr ""
 
-#: src/fs/fs_publish.c:1379
+#: src/fs/fs_publish.c:1381
 #, c-format
 msgid "Datastore failure: %s"
 msgstr ""
 
-#: src/fs/fs_publish.c:1470
+#: src/fs/fs_publish.c:1472
 #, c-format
 msgid "Reserving space for %u entries and %llu bytes for publication\n"
 msgstr ""
 
-#: src/fs/fs_publish_ksk.c:218
+#: src/fs/fs_publish_ksk.c:220
 msgid "Could not connect to datastore."
 msgstr ""
 
-#: src/fs/fs_publish_ublock.c:239
+#: src/fs/fs_publish_ublock.c:241
 msgid "Internal error."
 msgstr ""
 
-#: src/fs/fs_search.c:820 src/fs/fs_search.c:890
+#: src/fs/fs_search.c:822 src/fs/fs_search.c:892
 #, c-format
 msgid "Failed to parse URI `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_search.c:977
+#: src/fs/fs_search.c:979
 #, c-format
 msgid "Got result with unknown block type `%d', ignoring"
 msgstr ""
 
-#: src/fs/fs_unindex.c:61
+#: src/fs/fs_unindex.c:63
 msgid "Failed to find given position in file"
 msgstr ""
 
-#: src/fs/fs_unindex.c:66
+#: src/fs/fs_unindex.c:68
 msgid "Failed to read file"
 msgstr ""
 
-#: src/fs/fs_unindex.c:273
+#: src/fs/fs_unindex.c:275
 msgid "Error communicating with `fs' service."
 msgstr ""
 
-#: src/fs/fs_unindex.c:324
+#: src/fs/fs_unindex.c:326
 msgid "Failed to connect to FS service for unindexing."
 msgstr ""
 
-#: src/fs/fs_unindex.c:374 src/fs/fs_unindex.c:386
+#: src/fs/fs_unindex.c:376 src/fs/fs_unindex.c:388
 msgid "Failed to get KSKs from directory scan."
 msgstr ""
 
-#: src/fs/fs_unindex.c:382
+#: src/fs/fs_unindex.c:384
 #, c-format
 msgid "Internal error scanning `%s'.\n"
 msgstr ""
 
-#: src/fs/fs_unindex.c:441
+#: src/fs/fs_unindex.c:443
 #, c-format
 msgid "Failed to remove UBlock: %s\n"
 msgstr ""
 
-#: src/fs/fs_unindex.c:586 src/fs/fs_unindex.c:650
+#: src/fs/fs_unindex.c:588 src/fs/fs_unindex.c:652
 msgid "Failed to connect to `datastore' service."
 msgstr ""
 
-#: src/fs/fs_unindex.c:663
+#: src/fs/fs_unindex.c:665
 msgid "Failed to open file for unindexing."
 msgstr ""
 
-#: src/fs/fs_unindex.c:702
+#: src/fs/fs_unindex.c:704
 msgid "Failed to compute hash of file."
 msgstr ""
 
-#: src/fs/fs_uri.c:232
+#: src/fs/fs_uri.c:234
 #, no-c-format
 msgid "Malformed KSK URI (`%' must be followed by HEX number)"
 msgstr ""
 
-#: src/fs/fs_uri.c:291
+#: src/fs/fs_uri.c:293
 msgid "Malformed KSK URI (must not begin or end with `+')"
 msgstr ""
 
-#: src/fs/fs_uri.c:309
+#: src/fs/fs_uri.c:311
 msgid "Malformed KSK URI (`++' not allowed)"
 msgstr ""
 
-#: src/fs/fs_uri.c:316
+#: src/fs/fs_uri.c:318
 msgid "Malformed KSK URI (quotes not balanced)"
 msgstr ""
 
-#: src/fs/fs_uri.c:386
+#: src/fs/fs_uri.c:388
 msgid "Malformed SKS URI (wrong syntax)"
 msgstr ""
 
-#: src/fs/fs_uri.c:427
+#: src/fs/fs_uri.c:429
 msgid "Malformed CHK URI (wrong syntax)"
 msgstr ""
 
-#: src/fs/fs_uri.c:442
+#: src/fs/fs_uri.c:444
 msgid "Malformed CHK URI (failed to decode CHK)"
 msgstr ""
 
-#: src/fs/fs_uri.c:521
+#: src/fs/fs_uri.c:523
 msgid "LOC URI malformed (wrong syntax)"
 msgstr ""
 
-#: src/fs/fs_uri.c:536
+#: src/fs/fs_uri.c:538
 msgid "LOC URI malformed (no CHK)"
 msgstr ""
 
-#: src/fs/fs_uri.c:546
+#: src/fs/fs_uri.c:548
 msgid "LOC URI malformed (missing LOC)"
 msgstr ""
 
-#: src/fs/fs_uri.c:554
+#: src/fs/fs_uri.c:556
 msgid "LOC URI malformed (wrong syntax for public key)"
 msgstr ""
 
-#: src/fs/fs_uri.c:562
+#: src/fs/fs_uri.c:564
 msgid "LOC URI malformed (could not decode public key)"
 msgstr ""
 
-#: src/fs/fs_uri.c:568
+#: src/fs/fs_uri.c:570
 msgid "LOC URI malformed (could not find signature)"
 msgstr ""
 
-#: src/fs/fs_uri.c:574
+#: src/fs/fs_uri.c:576
 msgid "LOC URI malformed (wrong syntax for signature)"
 msgstr ""
 
-#: src/fs/fs_uri.c:583
+#: src/fs/fs_uri.c:585
 msgid "LOC URI malformed (could not decode signature)"
 msgstr ""
 
-#: src/fs/fs_uri.c:589
+#: src/fs/fs_uri.c:591
 msgid "LOC URI malformed (wrong syntax for expiration time)"
 msgstr ""
 
-#: src/fs/fs_uri.c:595
+#: src/fs/fs_uri.c:597
 msgid "LOC URI malformed (could not parse expiration time)"
 msgstr ""
 
-#: src/fs/fs_uri.c:607
+#: src/fs/fs_uri.c:609
 msgid "LOC URI malformed (signature failed validation)"
 msgstr ""
 
-#: src/fs/fs_uri.c:641
+#: src/fs/fs_uri.c:643
 msgid "invalid argument"
 msgstr ""
 
-#: src/fs/fs_uri.c:653
+#: src/fs/fs_uri.c:655
 msgid "Unrecognized URI type"
 msgstr ""
 
-#: src/fs/fs_uri.c:1057 src/fs/fs_uri.c:1084
+#: src/fs/fs_uri.c:1059 src/fs/fs_uri.c:1086
 msgid "No keywords specified!\n"
 msgstr ""
 
-#: src/fs/fs_uri.c:1090
+#: src/fs/fs_uri.c:1092
 msgid "Number of double-quotes not balanced!\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:230
+#: src/fs/gnunet-auto-share.c:232
 #, c-format
 msgid "Failed to load state: %s\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:283 src/fs/gnunet-auto-share.c:293
-#: src/fs/gnunet-auto-share.c:303
+#: src/fs/gnunet-auto-share.c:285 src/fs/gnunet-auto-share.c:295
+#: src/fs/gnunet-auto-share.c:305
 #, c-format
 msgid "Failed to save state to file %s\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:405
+#: src/fs/gnunet-auto-share.c:407
 #, c-format
 msgid "Publication of `%s' done\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:492
+#: src/fs/gnunet-auto-share.c:494
 #, c-format
 msgid "Publishing `%s'\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:502
+#: src/fs/gnunet-auto-share.c:504
 #, c-format
 msgid "Failed to run `%s'\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:711
+#: src/fs/gnunet-auto-share.c:713
 #, c-format
 msgid ""
 "You must specify one and only one directory name for automatic publication.\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:765 src/fs/gnunet-publish.c:898
+#: src/fs/gnunet-auto-share.c:767 src/fs/gnunet-publish.c:903
 msgid "set the desired LEVEL of sender-anonymity"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:770 src/fs/gnunet-publish.c:902
+#: src/fs/gnunet-auto-share.c:772 src/fs/gnunet-publish.c:907
 msgid "disable adding the creation time to the metadata of the uploaded file"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:775 src/fs/gnunet-publish.c:907
+#: src/fs/gnunet-auto-share.c:777 src/fs/gnunet-publish.c:912
 msgid "do not use libextractor to add keywords or metadata"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:781 src/fs/gnunet-publish.c:942
+#: src/fs/gnunet-auto-share.c:783 src/fs/gnunet-publish.c:944
 msgid "specify the priority of the content"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:787 src/fs/gnunet-publish.c:954
+#: src/fs/gnunet-auto-share.c:789 src/fs/gnunet-publish.c:955
 msgid "set the desired replication LEVEL"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:811
+#: src/fs/gnunet-auto-share.c:813
 msgid "Automatically publish files from a directory on GNUnet"
 msgstr ""
 
-#: src/fs/gnunet-daemon-fsprofiler.c:646
+#: src/fs/gnunet-daemon-fsprofiler.c:648
 msgid "Daemon to use file-sharing to measure its performance."
 msgstr ""
 
-#: src/fs/gnunet-directory.c:51
+#: src/fs/gnunet-directory.c:53
 #, c-format
 msgid "\t<original file embedded in %u bytes of meta data>\n"
 msgstr ""
 
-#: src/fs/gnunet-directory.c:103
+#: src/fs/gnunet-directory.c:105
 #, c-format
 msgid "Directory `%s' meta data:\n"
 msgstr ""
 
-#: src/fs/gnunet-directory.c:106
+#: src/fs/gnunet-directory.c:108
 #, c-format
 msgid "Directory `%s' contents:\n"
 msgstr ""
 
-#: src/fs/gnunet-directory.c:141
+#: src/fs/gnunet-directory.c:143
 msgid "You must specify a filename to inspect.\n"
 msgstr ""
 
-#: src/fs/gnunet-directory.c:154
+#: src/fs/gnunet-directory.c:156
 #, c-format
 msgid "Failed to read directory `%s'\n"
 msgstr ""
 
-#: src/fs/gnunet-directory.c:163
+#: src/fs/gnunet-directory.c:165
 #, c-format
 msgid "`%s' is not a GNUnet directory\n"
 msgstr ""
 
-#: src/fs/gnunet-directory.c:192
+#: src/fs/gnunet-directory.c:194
 msgid "Display contents of a GNUnet directory"
 msgstr ""
 
-#: src/fs/gnunet-download.c:137
+#: src/fs/gnunet-download.c:139
 #, c-format
 msgid "Starting download `%s'.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:147
+#: src/fs/gnunet-download.c:149
 msgid "<unknown time>"
 msgstr ""
 
-#: src/fs/gnunet-download.c:156
+#: src/fs/gnunet-download.c:158
 #, c-format
 msgid ""
 "Downloading `%s' at %llu/%llu (%s remaining, %s/s). Block took %s to "
 "download\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:182
+#: src/fs/gnunet-download.c:184
 #, c-format
 msgid "Error downloading: %s.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:199
+#: src/fs/gnunet-download.c:201
 #, c-format
 msgid "Downloading `%s' done (%s/s).\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:214 src/fs/gnunet-publish.c:293
-#: src/fs/gnunet-search.c:210 src/fs/gnunet-unindex.c:105
+#: src/fs/gnunet-download.c:216 src/fs/gnunet-publish.c:295
+#: src/fs/gnunet-search.c:215 src/fs/gnunet-unindex.c:107
 #, c-format
 msgid "Unexpected status: %d\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:244
+#: src/fs/gnunet-download.c:246
 msgid "You need to specify a URI argument.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:251 src/fs/gnunet-publish.c:724
+#: src/fs/gnunet-download.c:253 src/fs/gnunet-publish.c:727
 #, c-format
 msgid "Failed to parse URI: %s\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:262
+#: src/fs/gnunet-download.c:264
 msgid "Only CHK or LOC URIs supported.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:271
+#: src/fs/gnunet-download.c:273
 msgid "Target filename must be specified.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:289 src/fs/gnunet-publish.c:868
-#: src/fs/gnunet-search.c:268 src/fs/gnunet-unindex.c:137
+#: src/fs/gnunet-download.c:291 src/fs/gnunet-publish.c:872
+#: src/fs/gnunet-search.c:273 src/fs/gnunet-unindex.c:139
 #, c-format
 msgid "Could not initialize `%s' subsystem.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:337 src/fs/gnunet-search.c:311
+#: src/fs/gnunet-download.c:339 src/fs/gnunet-search.c:315
 msgid "set the desired LEVEL of receiver-anonymity"
 msgstr ""
 
-#: src/fs/gnunet-download.c:342
+#: src/fs/gnunet-download.c:344
 msgid "delete incomplete downloads (when aborted with CTRL-C)"
 msgstr ""
 
-#: src/fs/gnunet-download.c:347 src/fs/gnunet-search.c:317
+#: src/fs/gnunet-download.c:349 src/fs/gnunet-search.c:319
 msgid "only search the local peer (no P2P network search)"
 msgstr ""
 
-#: src/fs/gnunet-download.c:352
+#: src/fs/gnunet-download.c:354
 msgid "write the file to FILENAME"
 msgstr ""
 
-#: src/fs/gnunet-download.c:357
+#: src/fs/gnunet-download.c:359
 msgid "set the maximum number of parallel downloads that is allowed"
 msgstr ""
 
-#: src/fs/gnunet-download.c:362
+#: src/fs/gnunet-download.c:364
 msgid "set the maximum number of parallel requests for blocks that is allowed"
 msgstr ""
 
-#: src/fs/gnunet-download.c:366
+#: src/fs/gnunet-download.c:368
 msgid "download a GNUnet directory recursively"
 msgstr ""
 
-#: src/fs/gnunet-download.c:384
+#: src/fs/gnunet-download.c:386
 msgid ""
 "Download files from GNUnet using a GNUnet CHK or LOC URI (gnunet://fs/"
 "chk/...)"
 msgstr ""
 
-#: src/fs/gnunet-fs.c:117
+#: src/fs/gnunet-fs.c:119
 msgid "print a list of all indexed files"
 msgstr ""
 
-#: src/fs/gnunet-fs.c:128
+#: src/fs/gnunet-fs.c:130
 msgid "Special file-sharing operations"
 msgstr ""
 
-#: src/fs/gnunet-fs-profiler.c:209
+#: src/fs/gnunet-fs-profiler.c:211
 msgid "run the experiment with COUNT peers"
 msgstr ""
 
-#: src/fs/gnunet-fs-profiler.c:215
+#: src/fs/gnunet-fs-profiler.c:217
 msgid "specifies name of a file with the HOSTS the testbed should use"
 msgstr ""
 
-#: src/fs/gnunet-fs-profiler.c:221
+#: src/fs/gnunet-fs-profiler.c:223
 msgid "automatically terminate experiment after DELAY"
 msgstr ""
 
-#: src/fs/gnunet-fs-profiler.c:231
+#: src/fs/gnunet-fs-profiler.c:233
 msgid "run a testbed to measure file-sharing performance"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:217 src/fs/gnunet-publish.c:229
+#: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:231
 #, c-format
 msgid "Publishing `%s' at %llu/%llu (%s remaining)\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:237
+#: src/fs/gnunet-publish.c:239
 #, c-format
 msgid "Error publishing: %s.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:244
+#: src/fs/gnunet-publish.c:246
 #, c-format
 msgid "Publishing `%s' done.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:249
+#: src/fs/gnunet-publish.c:251
 #, c-format
 msgid "URI is `%s'.\n"
 msgstr ""
 "L'URI è `%s'.\n"
 "\n"
 
-#: src/fs/gnunet-publish.c:257
+#: src/fs/gnunet-publish.c:259
 #, fuzzy, c-format
 msgid "Namespace URI is `%s'.\n"
 msgstr ""
 "L'URI è `%s'.\n"
 "\n"
 
-#: src/fs/gnunet-publish.c:273
+#: src/fs/gnunet-publish.c:275
 msgid "Starting cleanup after abort\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:280
+#: src/fs/gnunet-publish.c:282
 msgid "Cleanup after abort completed.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:286
+#: src/fs/gnunet-publish.c:288
 msgid "Cleanup after abort failed.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:428
+#: src/fs/gnunet-publish.c:430
 #, c-format
 msgid "Meta data for file `%s' (%s)\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:433
+#: src/fs/gnunet-publish.c:435
 #, c-format
 msgid "Keywords for file `%s' (%s)\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:587
+#: src/fs/gnunet-publish.c:590
 msgid "Could not publish\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:612
+#: src/fs/gnunet-publish.c:615
 msgid "Could not start publishing.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:646
+#: src/fs/gnunet-publish.c:649
 #, c-format
 msgid "Scanning directory `%s'.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:650
+#: src/fs/gnunet-publish.c:653
 #, c-format
 msgid "Scanning file `%s'.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:656
+#: src/fs/gnunet-publish.c:659
 #, c-format
 msgid "There was trouble processing file `%s', skipping it.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:663
+#: src/fs/gnunet-publish.c:666
 msgid "Preprocessing complete.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:668
+#: src/fs/gnunet-publish.c:671
 #, c-format
 msgid "Extracting meta data from file `%s' complete.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:675
+#: src/fs/gnunet-publish.c:678
 msgid "Meta data extraction has finished.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:684
+#: src/fs/gnunet-publish.c:687
 msgid "Internal error scanning directory.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:712
+#: src/fs/gnunet-publish.c:715
 #, c-format
 msgid "Selected pseudonym `%s' unknown\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:745
+#: src/fs/gnunet-publish.c:749
 #, c-format
 msgid "Failed to access `%s': %s\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:759
+#: 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:815
+#: src/fs/gnunet-publish.c:819
 #, c-format
 msgid "Cannot extract metadata from a URI!\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:822
+#: 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:828
+#: 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:836 src/vpn/gnunet-vpn.c:208
+#: src/fs/gnunet-publish.c:840 src/vpn/gnunet-vpn.c:210
 #, c-format
 msgid "Option `%s' is required when using option `%s'.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:847 src/fs/gnunet-publish.c:855
-#: src/transport/gnunet-transport.c:1280 src/transport/gnunet-transport.c:1307
+#: src/fs/gnunet-publish.c:851 src/fs/gnunet-publish.c:859
+#: src/transport/gnunet-transport.c:1282 src/transport/gnunet-transport.c:1309
 #, c-format
 msgid "Option `%s' makes no sense without option `%s'.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:911
+#: src/fs/gnunet-publish.c:916
 msgid ""
 "print list of extracted keywords that would be used, but do not perform "
 "upload"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:917
+#: src/fs/gnunet-publish.c:922
 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:923
+#: src/fs/gnunet-publish.c:928
 msgid "set the meta-data for the given TYPE to the given VALUE"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:928
+#: src/fs/gnunet-publish.c:932
 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:938
 msgid ""
 "specify ID of an updated version to be published in the future (for "
 "namespace insertions only)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:948
+#: src/fs/gnunet-publish.c:949
 msgid "publish the files under the pseudonym NAME (place file into namespace)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:958
+#: src/fs/gnunet-publish.c:959
 msgid ""
 "only simulate the process but do not do any actual publishing (useful to "
 "compute URIs)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:964
+#: src/fs/gnunet-publish.c:965
 msgid ""
 "set the ID of this version of the publication (for namespace insertions only)"
 msgstr ""
@@ -3435,29 +3426,29 @@ msgid ""
 "to the file with the respective URI)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:987
+#: src/fs/gnunet-publish.c:989
 msgid "Publish a file or directory on GNUnet"
 msgstr ""
 
-#: src/fs/gnunet-search.c:125
+#: src/fs/gnunet-search.c:127
 #, c-format
 msgid "Failed to write directory with search results to `%s'\n"
 msgstr ""
 
-#: src/fs/gnunet-search.c:202
+#: src/fs/gnunet-search.c:207
 #, c-format
 msgid "Error searching: %s.\n"
 msgstr ""
 
-#: src/fs/gnunet-search.c:258
+#: src/fs/gnunet-search.c:263
 msgid "Could not create keyword URI from arguments.\n"
 msgstr ""
 
-#: src/fs/gnunet-search.c:282
+#: src/fs/gnunet-search.c:287
 msgid "Could not start searching.\n"
 msgstr ""
 
-#: src/fs/gnunet-search.c:323
+#: src/fs/gnunet-search.c:324
 msgid "write search results to file starting with PREFIX"
 msgstr ""
 
@@ -3465,7 +3456,7 @@ msgstr ""
 msgid "automatically terminate search after DELAY"
 msgstr ""
 
-#: src/fs/gnunet-search.c:338
+#: src/fs/gnunet-search.c:335
 msgid "automatically terminate search after VALUE results are found"
 msgstr ""
 
@@ -3473,2932 +3464,2755 @@ msgstr ""
 msgid "Search GNUnet for files that were published on GNUnet"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:375 src/fs/gnunet-service-fs.c:880
+#: src/fs/gnunet-service-fs.c:377 src/fs/gnunet-service-fs.c:882
 msgid "# client searches active"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:434
+#: src/fs/gnunet-service-fs.c:436
 msgid "# replies received for local clients"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:603
+#: src/fs/gnunet-service-fs.c:605
 msgid "# running average P2P latency (ms)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:655 src/fs/gnunet-service-fs_cp.c:562
+#: src/fs/gnunet-service-fs.c:657 src/fs/gnunet-service-fs_cp.c:564
 msgid "# Loopback routes suppressed"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:834
+#: src/fs/gnunet-service-fs.c:836
 msgid "# client searches received"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:873
+#: src/fs/gnunet-service-fs.c:875
 msgid "# client searches updated (merged content seen list)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:1044
+#: src/fs/gnunet-service-fs.c:1040
 #, c-format
 msgid "Hash mismatch trying to index file `%s' which does not have hash `%s'\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:1284
+#: src/fs/gnunet-service-fs.c:1280
 msgid "FS service is lacking HOSTKEY configuration setting.  Exiting.\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:1309 src/hostlist/gnunet-daemon-hostlist.c:353
-#: src/topology/gnunet-daemon-topology.c:1200
+#: src/fs/gnunet-service-fs.c:1305 src/hostlist/gnunet-daemon-hostlist.c:355
+#: src/topology/gnunet-daemon-topology.c:1202
 #, c-format
 msgid "Failed to connect to `%s' service.\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cadet_client.c:368
+#: src/fs/gnunet-service-fs_cadet_client.c:370
 msgid "# replies received via cadet"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cadet_client.c:382
+#: src/fs/gnunet-service-fs_cadet_client.c:384
 msgid "# replies received via cadet dropped"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cadet_server.c:263
+#: src/fs/gnunet-service-fs_cadet_server.c:265
 msgid "# queries received via CADET not answered"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cadet_server.c:318
+#: src/fs/gnunet-service-fs_cadet_server.c:320
 msgid "# Blocks transferred via cadet"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cadet_server.c:344
+#: src/fs/gnunet-service-fs_cadet_server.c:346
 msgid "# queries received via cadet"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cadet_server.c:386
+#: src/fs/gnunet-service-fs_cadet_server.c:388
 #, fuzzy
 msgid "# cadet client connections rejected"
 msgstr "# connessioni attive"
 
-#: src/fs/gnunet-service-fs_cadet_server.c:393
-#: src/fs/gnunet-service-fs_cadet_server.c:433
+#: src/fs/gnunet-service-fs_cadet_server.c:395
+#: src/fs/gnunet-service-fs_cadet_server.c:435
 #, fuzzy
 msgid "# cadet connections active"
 msgstr "# connessioni attive"
 
-#: src/fs/gnunet-service-fs_cp.c:684
+#: src/fs/gnunet-service-fs_cp.c:685
 msgid "# migration stop messages received"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:688
+#: src/fs/gnunet-service-fs_cp.c:689
 #, c-format
 msgid "Migration of content to peer `%s' blocked for %s\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:721 src/fs/gnunet-service-fs_cp.c:1343
+#: src/fs/gnunet-service-fs_cp.c:722 src/fs/gnunet-service-fs_cp.c:1344
 msgid "# P2P searches active"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:816
+#: src/fs/gnunet-service-fs_cp.c:817
 msgid "# artificial delays introduced (ms)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:873
+#: src/fs/gnunet-service-fs_cp.c:874
 msgid "# replies dropped due to type mismatch"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:881
+#: src/fs/gnunet-service-fs_cp.c:882
 msgid "# replies received for other peers"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:895
+#: src/fs/gnunet-service-fs_cp.c:896
 msgid "# replies dropped due to insufficient cover traffic"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:942
+#: src/fs/gnunet-service-fs_cp.c:943
 msgid "# P2P searches destroyed due to ultimate reply"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1013
+#: src/fs/gnunet-service-fs_cp.c:1014
 msgid "# requests done for free (low load)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1038
+#: src/fs/gnunet-service-fs_cp.c:1039
 msgid "# request dropped, priority insufficient"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1048
+#: src/fs/gnunet-service-fs_cp.c:1049
 msgid "# requests done for a price (normal load)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1146
+#: src/fs/gnunet-service-fs_cp.c:1147
 msgid "# requests dropped due to higher-TTL request"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1203
+#: src/fs/gnunet-service-fs_cp.c:1204
 msgid "# GET requests received (from other peers)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1226
+#: src/fs/gnunet-service-fs_cp.c:1227
 msgid "# requests dropped due to missing reverse route"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1239
+#: src/fs/gnunet-service-fs_cp.c:1240
 msgid "# requests dropped due to full reply queue"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1295
+#: src/fs/gnunet-service-fs_cp.c:1296
 msgid "# requests dropped due TTL underflow"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1339
+#: src/fs/gnunet-service-fs_cp.c:1340
 msgid "# P2P query messages received and processed"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1706
+#: src/fs/gnunet-service-fs_cp.c:1707
 msgid "# migration stop messages sent"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_indexing.c:132
-#: src/fs/gnunet-service-fs_indexing.c:193
+#: src/fs/gnunet-service-fs_indexing.c:134
+#: src/fs/gnunet-service-fs_indexing.c:195
 #, c-format
 msgid "Could not open `%s'.\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_indexing.c:149
+#: src/fs/gnunet-service-fs_indexing.c:151
 #, c-format
 msgid "Error writing `%s'.\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_indexing.c:251
+#: src/fs/gnunet-service-fs_indexing.c:253
 #, c-format
 msgid "Failed to delete bogus block: %s\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_indexing.c:329
+#: src/fs/gnunet-service-fs_indexing.c:331
 msgid "# index blocks removed: original file inaccessible"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_indexing.c:355
+#: src/fs/gnunet-service-fs_indexing.c:357
 #, c-format
 msgid "Could not access indexed file `%s' (%s) at offset %llu: %s\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_indexing.c:359
+#: src/fs/gnunet-service-fs_indexing.c:361
 msgid "not indexed"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_indexing.c:392
+#: src/fs/gnunet-service-fs_indexing.c:394
 #, c-format
 msgid "Indexed file `%s' changed at offset %llu\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_indexing.c:516
+#: src/fs/gnunet-service-fs_indexing.c:518
 #, c-format
 msgid ""
 "Index request received for file `%s' is already indexed as `%s'.  Permitting "
 "anyway.\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:263
+#: src/fs/gnunet-service-fs_pe.c:265
 msgid "# average retransmission delay (ms)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:425
+#: src/fs/gnunet-service-fs_pe.c:427
 msgid "# delay heap timeout (ms)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:436
+#: src/fs/gnunet-service-fs_pe.c:438
 msgid "# query plans executed"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:464
+#: src/fs/gnunet-service-fs_pe.c:466
 msgid "# query messages sent to other peers"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:534
+#: src/fs/gnunet-service-fs_pe.c:536
 msgid "# requests merged"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:544
+#: src/fs/gnunet-service-fs_pe.c:546
 msgid "# requests refreshed"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:604 src/fs/gnunet-service-fs_pe.c:707
-#: src/fs/gnunet-service-fs_pe.c:786
+#: src/fs/gnunet-service-fs_pe.c:606 src/fs/gnunet-service-fs_pe.c:709
+#: src/fs/gnunet-service-fs_pe.c:788
 msgid "# query plan entries"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:328
+#: src/fs/gnunet-service-fs_pr.c:330
 msgid "# Pending requests created"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:428 src/fs/gnunet-service-fs_pr.c:675
+#: src/fs/gnunet-service-fs_pr.c:430 src/fs/gnunet-service-fs_pr.c:677
 msgid "# Pending requests active"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:856
+#: src/fs/gnunet-service-fs_pr.c:858
 msgid "# replies received and matched"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:892
+#: src/fs/gnunet-service-fs_pr.c:894
 msgid "# duplicate replies discarded (bloomfilter)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:901
+#: src/fs/gnunet-service-fs_pr.c:903
 msgid "# irrelevant replies discarded"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:916
+#: src/fs/gnunet-service-fs_pr.c:918
 #, c-format
 msgid "Unsupported block type %u\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:933
+#: src/fs/gnunet-service-fs_pr.c:935
 msgid "# results found locally"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1063
+#: src/fs/gnunet-service-fs_pr.c:1065
 msgid "# Datastore `PUT' failures"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1091
+#: src/fs/gnunet-service-fs_pr.c:1093
 msgid "# storage requests dropped due to high load"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1129
+#: src/fs/gnunet-service-fs_pr.c:1131
 msgid "# Replies received from DHT"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1260
+#: src/fs/gnunet-service-fs_pr.c:1262
 msgid "# Replies received from CADET"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1312
+#: src/fs/gnunet-service-fs_pr.c:1314
 #, c-format
 msgid "Datastore lookup already took %s!\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1333
+#: src/fs/gnunet-service-fs_pr.c:1335
 #, c-format
 msgid "On-demand lookup already took %s!\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1393
+#: src/fs/gnunet-service-fs_pr.c:1395
 msgid "# requested DBLOCK or IBLOCK not found"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1452
+#: src/fs/gnunet-service-fs_pr.c:1454
 msgid "# Datastore lookups concluded (error queueing)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1507
+#: src/fs/gnunet-service-fs_pr.c:1509
 msgid "# Datastore lookups concluded (no results)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1522
+#: src/fs/gnunet-service-fs_pr.c:1524
 msgid "# Datastore lookups concluded (seen all)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1546
+#: src/fs/gnunet-service-fs_pr.c:1548
 msgid "# Datastore lookups aborted (more than MAX_RESULTS)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1560
+#: src/fs/gnunet-service-fs_pr.c:1562
 msgid "# on-demand blocks matched requests"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1581
+#: src/fs/gnunet-service-fs_pr.c:1583
 msgid "# on-demand lookups performed successfully"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1586
+#: src/fs/gnunet-service-fs_pr.c:1588
 msgid "# on-demand lookups failed"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1624
+#: src/fs/gnunet-service-fs_pr.c:1626
 msgid "# Datastore lookups concluded (found last result)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1637
+#: src/fs/gnunet-service-fs_pr.c:1639
 msgid "# Datastore lookups concluded (load too high)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1691
+#: src/fs/gnunet-service-fs_pr.c:1693
 msgid "# Datastore lookups initiated"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1747
+#: src/fs/gnunet-service-fs_pr.c:1749
 msgid "# GAP PUT messages received"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_push.c:644
+#: src/fs/gnunet-service-fs_push.c:646
 msgid "time required, content pushing disabled"
 msgstr ""
 
-#: src/fs/gnunet-unindex.c:87
+#: src/fs/gnunet-unindex.c:89
 #, c-format
 msgid "Unindexing at %llu/%llu (%s remaining)\n"
 msgstr ""
 
-#: src/fs/gnunet-unindex.c:93
+#: src/fs/gnunet-unindex.c:95
 #, c-format
 msgid "Error unindexing: %s.\n"
 msgstr ""
 
-#: src/fs/gnunet-unindex.c:98
+#: src/fs/gnunet-unindex.c:100
 msgid "Unindexing done.\n"
 msgstr ""
 
-#: src/fs/gnunet-unindex.c:127
+#: 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:144
+#: src/fs/gnunet-unindex.c:146
 msgid "Could not start unindex operation.\n"
 msgstr ""
 
-#: src/fs/gnunet-unindex.c:176
+#: src/fs/gnunet-unindex.c:178
 msgid "Unindex a file that was previously indexed with gnunet-publish."
 msgstr ""
 
-#: src/gns/gns_tld_api.c:274
+#: src/gns/gns_tld_api.c:348
 msgid "Expected a base32-encoded public zone key\n"
 msgstr ""
 
-#: src/gns/gnunet-bcd.c:125
+#: src/gns/gnunet-bcd.c:127
 #, c-format
 msgid "Refusing `%s' request to HTTP server\n"
 msgstr ""
 
-#: src/gns/gnunet-bcd.c:355
+#: src/gns/gnunet-bcd.c:357
 #, c-format
 msgid "Invalid port number %u.  Exiting.\n"
 msgstr ""
 
-#: src/gns/gnunet-bcd.c:360
+#: src/gns/gnunet-bcd.c:362
 #, c-format
 msgid "Businesscard HTTP server starts on %u\n"
 msgstr ""
 
-#: src/gns/gnunet-bcd.c:374
+#: src/gns/gnunet-bcd.c:376
 #, c-format
 msgid "Could not start businesscard HTTP server on port %u\n"
 msgstr ""
 
-#: src/gns/gnunet-bcd.c:521
+#: src/gns/gnunet-bcd.c:523
 msgid "Run HTTP serve on port PORT (default is 8888)"
 msgstr ""
 
-#: src/gns/gnunet-bcd.c:534
+#: src/gns/gnunet-bcd.c:536
 msgid "GNUnet HTTP server to create business cards"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:201
+#: src/gns/gnunet-dns2gns.c:203
 msgid "Failed to pack DNS response into UDP packet!\n"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:403
+#: src/gns/gnunet-dns2gns.c:405
 #, c-format
 msgid "Cannot parse DNS request from %s\n"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:419
+#: src/gns/gnunet-dns2gns.c:421
 #, c-format
 msgid "Received malformed DNS request from %s\n"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:427
+#: src/gns/gnunet-dns2gns.c:429
 #, c-format
 msgid "Received unsupported DNS request from %s\n"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:586
+#: src/gns/gnunet-dns2gns.c:588
 msgid "No DNS server specified!\n"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:686
+#: src/gns/gnunet-dns2gns.c:688
 msgid "IP of recursive DNS resolver to use (required)"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:691
+#: src/gns/gnunet-dns2gns.c:693
 msgid "UDP port to listen on for inbound DNS requests; default: 2853"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:708
+#: src/gns/gnunet-dns2gns.c:710
 msgid "GNUnet DNS-to-GNS proxy (a DNS server)"
 msgstr ""
 
-#: src/gns/gnunet-gns-benchmark.c:580
+#: src/gns/gnunet-gns-benchmark.c:582
 msgid "how long to wait between queries"
 msgstr ""
 
-#: src/gns/gnunet-gns-benchmark.c:585
+#: src/gns/gnunet-gns-benchmark.c:587
 msgid "how long to wait for an answer"
 msgstr ""
 
-#: src/gns/gnunet-gns-benchmark.c:589
+#: src/gns/gnunet-gns-benchmark.c:591
 msgid "look for GNS2DNS records instead of ANY"
 msgstr ""
 
-#: src/gns/gnunet-gns.c:197
+#: src/gns/gnunet-gns.c:199
 #, c-format
 msgid "Invalid typename specified, assuming `ANY'\n"
 msgstr ""
 
-#: src/gns/gnunet-gns.c:231
+#: src/gns/gnunet-gns.c:233
 msgid "Lookup a record for the given name"
 msgstr ""
 
-#: src/gns/gnunet-gns.c:236
+#: src/gns/gnunet-gns.c:238
 msgid "Specify the type of the record to lookup"
 msgstr ""
 
-#: src/gns/gnunet-gns.c:240
+#: src/gns/gnunet-gns.c:242
 msgid "No unneeded output"
 msgstr ""
 
-#: src/gns/gnunet-gns.c:256
+#: src/gns/gnunet-gns.c:258
 msgid "GNUnet GNS resolver tool"
 msgstr ""
 
-#: src/gns/gnunet-gns-helper-service-w32.c:600
+#: src/gns/gnunet-gns-helper-service-w32.c:602
 msgid "Not ready to process requests, lacking ego data\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-helper-service-w32.c:699
+#: src/gns/gnunet-gns-helper-service-w32.c:701
 msgid ""
 "Ego for `gns-master' not found, cannot perform lookup.  Did you run gnunet-"
 "gns-import.sh?\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-helper-service-w32.c:737
+#: src/gns/gnunet-gns-helper-service-w32.c:739
 #, c-format
 msgid "Failed to connect to identity service\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-import.c:450
+#: src/gns/gnunet-gns-import.c:452
 msgid "This program will import some GNS authorities into your GNS namestore."
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:110
-#: src/hostlist/gnunet-daemon-hostlist_client.c:533
-#: src/hostlist/gnunet-daemon-hostlist_client.c:751
-#: src/hostlist/gnunet-daemon-hostlist_client.c:757
-#: src/hostlist/gnunet-daemon-hostlist_client.c:809
-#: src/hostlist/gnunet-daemon-hostlist_client.c:818
-#: src/hostlist/gnunet-daemon-hostlist_client.c:929
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1024
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1029
-#: src/transport/plugin_transport_http_client.c:596
-#: src/transport/plugin_transport_http_client.c:614
+#: src/gns/gnunet-gns-proxy.c:118
+#: src/hostlist/gnunet-daemon-hostlist_client.c:535
+#: src/hostlist/gnunet-daemon-hostlist_client.c:753
+#: src/hostlist/gnunet-daemon-hostlist_client.c:759
+#: src/hostlist/gnunet-daemon-hostlist_client.c:811
+#: src/hostlist/gnunet-daemon-hostlist_client.c:820
+#: src/hostlist/gnunet-daemon-hostlist_client.c:931
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1026
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1031
+#: src/transport/plugin_transport_http_client.c:598
+#: src/transport/plugin_transport_http_client.c:616
 #, c-format
 msgid "%s failed at %s:%d: `%s'\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:960
+#: src/gns/gnunet-gns-proxy.c:980
 #, c-format
 msgid "Unsupported CURL TLS backend %d\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:985
+#: src/gns/gnunet-gns-proxy.c:1005
 #, c-format
 msgid "Failed to fetch CN from cert: %s\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:1008
+#: src/gns/gnunet-gns-proxy.c:1026
 #, c-format
 msgid "Failed to initialize DANE: %s\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:1021
+#: src/gns/gnunet-gns-proxy.c:1041
 #, c-format
 msgid "Failed to parse DANE record: %s\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:1036
+#: src/gns/gnunet-gns-proxy.c:1056
 #, c-format
 msgid "Failed to verify TLS connection using DANE: %s\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:1046
+#: src/gns/gnunet-gns-proxy.c:1066
 #, c-format
 msgid "Failed DANE verification failed with GnuTLS verify status code: %u\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:1070
+#: src/gns/gnunet-gns-proxy.c:1090
 #, c-format
 msgid "TLS certificate subject name (%s) does not match `%s': %d\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:1200
+#: src/gns/gnunet-gns-proxy.c:1221
 #, c-format
 msgid "Cookie domain `%s' supplied by server is invalid\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:2062
+#: src/gns/gnunet-gns-proxy.c:2121
 #, c-format
 msgid "Unsupported HTTP method `%s'\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:2583
+#: src/gns/gnunet-gns-proxy.c:2642
 #, c-format
 msgid "Unable to import private key from file `%s'\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:2615
+#: src/gns/gnunet-gns-proxy.c:2674
 #, c-format
 msgid "Unable to import certificate from `%s'\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:2814
+#: src/gns/gnunet-gns-proxy.c:2875
 #, c-format
 msgid "Failed to start HTTPS server for `%s'\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:2839 src/rest/gnunet-rest-server.c:656
+#: src/gns/gnunet-gns-proxy.c:2897 src/rest/gnunet-rest-server.c:658
 msgid "Failed to pass client to MHD\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3169
+#: src/gns/gnunet-gns-proxy.c:3233
 #, c-format
 msgid "Unsupported socks version %d\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3198
+#: src/gns/gnunet-gns-proxy.c:3262
 #, c-format
 msgid "Unsupported socks command %d\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3280
+#: src/gns/gnunet-gns-proxy.c:3345
 #, c-format
 msgid "Unsupported socks address type %d\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3570
+#: src/gns/gnunet-gns-proxy.c:3635
 #, c-format
 msgid "Failed to load X.509 key and certificate from `%s'\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3698
+#: src/gns/gnunet-gns-proxy.c:3763
 msgid "listen on specified port (default: 7777)"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3703
+#: src/gns/gnunet-gns-proxy.c:3768
 msgid "pem file to use as CA"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3707
+#: src/gns/gnunet-gns-proxy.c:3772
 msgid "disable use of IPv6"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3733
+#: src/gns/gnunet-gns-proxy.c:3798
 msgid "GNUnet GNS proxy"
 msgstr ""
 
-#: src/gns/gnunet-service-gns.c:511
+#: src/gns/gnunet-service-gns.c:506
 msgid "Properly base32-encoded public key required"
 msgstr ""
 
-#: src/gns/gnunet-service-gns.c:547
+#: src/gns/gnunet-service-gns.c:542
 msgid "Failed to connect to the namecache!\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns.c:566
-#: src/zonemaster/gnunet-service-zonemaster.c:873
-#: src/zonemaster/gnunet-service-zonemaster-monitor.c:438
+#: src/gns/gnunet-service-gns.c:561
+#: src/zonemaster/gnunet-service-zonemaster.c:875
+#: src/zonemaster/gnunet-service-zonemaster-monitor.c:440
 msgid "Could not connect to DHT!\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_interceptor.c:257
+#: src/gns/gnunet-service-gns_interceptor.c:259
 msgid "Error converting GNS response to DNS response!\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_interceptor.c:364
+#: src/gns/gnunet-service-gns_interceptor.c:366
 msgid "Failed to connect to the DNS service!\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:717
+#: src/gns/gnunet-service-gns_resolver.c:700
 #, c-format
 msgid "Protocol `%s' unknown, skipping labels.\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:728
+#: src/gns/gnunet-service-gns_resolver.c:711
 #, c-format
 msgid "Service `%s' unknown for protocol `%s', skipping labels.\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:931
+#: src/gns/gnunet-service-gns_resolver.c:914
 msgid "Failed to parse DNS response\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:1112
+#: src/gns/gnunet-service-gns_resolver.c:1095
 #, c-format
 msgid "Skipping record of unsupported type %d\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:1382
+#: src/gns/gnunet-service-gns_resolver.c:1365
 #, c-format
 msgid "VPN returned empty result for `%s'\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:1823
+#: src/gns/gnunet-service-gns_resolver.c:1806
 #, c-format
 msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:1866
+#: src/gns/gnunet-service-gns_resolver.c:1849
 #, c-format
 msgid "GNS lookup failed (zero records found for `%s')\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:2281
+#: src/gns/gnunet-service-gns_resolver.c:2264
 msgid "GNS lookup recursion failed (no delegation record found)\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:2304
+#: src/gns/gnunet-service-gns_resolver.c:2287
 #, c-format
 msgid "Failed to cache GNS resolution: %s\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:2467
+#: src/gns/gnunet-service-gns_resolver.c:2450
 #, c-format
 msgid "GNS namecache returned empty result for `%s'\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:2602
+#: src/gns/gnunet-service-gns_resolver.c:2585
 #, c-format
 msgid "Zone %s was revoked, resolution fails\n"
 msgstr ""
 
-#: src/gns/plugin_gnsrecord_gns.c:179
+#: src/gns/plugin_gnsrecord_gns.c:181
 #, c-format
 msgid "Unable to parse PKEY record `%s'\n"
 msgstr ""
 
-#: src/gns/plugin_gnsrecord_gns.c:210
+#: src/gns/plugin_gnsrecord_gns.c:212
 #, c-format
 msgid "Unable to parse GNS2DNS record `%s'\n"
 msgstr ""
 
-#: src/gns/plugin_gnsrecord_gns.c:231
+#: src/gns/plugin_gnsrecord_gns.c:233
 #, c-format
 msgid "Failed to serialize GNS2DNS record with value `%s'\n"
 msgstr ""
 
-#: src/gns/plugin_gnsrecord_gns.c:256
+#: src/gns/plugin_gnsrecord_gns.c:258
 #, c-format
 msgid "Unable to parse VPN record string `%s'\n"
 msgstr ""
 
-#: src/gns/plugin_gnsrecord_gns.c:292
+#: src/gns/plugin_gnsrecord_gns.c:294
 #, c-format
 msgid "Unable to parse BOX record string `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:357
+#: src/gnsrecord/plugin_gnsrecord_dns.c:359
 #, c-format
 msgid "Unable to parse IPv4 address `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:378
+#: 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:400
+#: 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:485
+#: src/gnsrecord/plugin_gnsrecord_dns.c:487
 #, c-format
 msgid "Failed to serialize CERT record with %u bytes\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:521
+#: src/gnsrecord/plugin_gnsrecord_dns.c:523
 #, c-format
 msgid "Unable to parse SOA record `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:540
+#: src/gnsrecord/plugin_gnsrecord_dns.c:542
 #, c-format
 msgid "Failed to serialize SOA record with mname `%s' and rname `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:563
+#: src/gnsrecord/plugin_gnsrecord_dns.c:565
 #, c-format
 msgid "Failed to serialize PTR record with value `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:586
+#: src/gnsrecord/plugin_gnsrecord_dns.c:588
 #, c-format
 msgid "Unable to parse MX record `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:601
+#: src/gnsrecord/plugin_gnsrecord_dns.c:603
 #, c-format
 msgid "Failed to serialize MX record with hostname `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:628
+#: src/gnsrecord/plugin_gnsrecord_dns.c:630
 #, c-format
 msgid "Unable to parse SRV record `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:644
+#: src/gnsrecord/plugin_gnsrecord_dns.c:646
 #, c-format
 msgid "Failed to serialize SRV record with target `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:661
+#: src/gnsrecord/plugin_gnsrecord_dns.c:663
 #, c-format
 msgid "Unable to parse IPv6 address `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:685
-#: src/gnsrecord/plugin_gnsrecord_dns.c:701
+#: src/gnsrecord/plugin_gnsrecord_dns.c:687
+#: src/gnsrecord/plugin_gnsrecord_dns.c:703
 #, c-format
 msgid "Unable to parse TLSA record string `%s'\n"
 msgstr ""
 
-#: src/hello/gnunet-hello.c:124
+#: src/hello/gnunet-hello.c:126
 msgid "Call with name of HELLO file to modify.\n"
 msgstr ""
 
-#: src/hello/gnunet-hello.c:130
+#: src/hello/gnunet-hello.c:132
 #, c-format
 msgid "Error accessing file `%s': %s\n"
 msgstr ""
 
-#: src/hello/gnunet-hello.c:138
+#: src/hello/gnunet-hello.c:140
 #, c-format
 msgid "File `%s' is too big to be a HELLO\n"
 msgstr ""
 
-#: src/hello/gnunet-hello.c:145
+#: src/hello/gnunet-hello.c:147
 #, c-format
 msgid "File `%s' is too small to be a HELLO\n"
 msgstr ""
 
-#: src/hello/gnunet-hello.c:155 src/hello/gnunet-hello.c:196
+#: src/hello/gnunet-hello.c:157 src/hello/gnunet-hello.c:198
 #, c-format
 msgid "Error opening file `%s': %s\n"
 msgstr ""
 
-#: src/hello/gnunet-hello.c:172
+#: src/hello/gnunet-hello.c:174
 #, c-format
 msgid "Did not find well-formed HELLO in file `%s'\n"
 msgstr ""
 
-#: src/hello/gnunet-hello.c:208
+#: src/hello/gnunet-hello.c:210
 #, c-format
 msgid "Error writing HELLO to file `%s': %s\n"
 msgstr ""
 
-#: src/hello/gnunet-hello.c:217
+#: src/hello/gnunet-hello.c:219
 #, c-format
 msgid "Modified %u addresses, wrote %u bytes\n"
 msgstr ""
 
-#: src/hello/hello.c:1108
+#: src/hello/hello.c:1110
 msgid "Failed to parse HELLO message: missing expiration time\n"
 msgstr ""
 
-#: src/hello/hello.c:1117
+#: src/hello/hello.c:1119
 msgid "Failed to parse HELLO message: invalid expiration time\n"
 msgstr ""
 
-#: src/hello/hello.c:1127
+#: src/hello/hello.c:1129
 msgid "Failed to parse HELLO message: malformed\n"
 msgstr ""
 
-#: src/hello/hello.c:1138
+#: src/hello/hello.c:1140
 msgid "Failed to parse HELLO message: missing transport plugin\n"
 msgstr ""
 
-#: src/hello/hello.c:1156
+#: src/hello/hello.c:1158
 #, c-format
 msgid "Plugin `%s' not found, skipping address\n"
 msgstr ""
 
-#: src/hello/hello.c:1164
+#: src/hello/hello.c:1166
 #, c-format
 msgid "Plugin `%s' does not support URIs yet\n"
 msgstr ""
 
-#: src/hello/hello.c:1179
+#: src/hello/hello.c:1181
 #, c-format
 msgid "Failed to parse `%s' as an address for plugin `%s'\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist.c:314
+#: src/hostlist/gnunet-daemon-hostlist.c:316
 msgid ""
 "None of the functions for the hostlist daemon were enabled.  I have no "
 "reason to run!\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist.c:374
+#: src/hostlist/gnunet-daemon-hostlist.c:376
 msgid "advertise our hostlist to other peers"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist.c:379
+#: src/hostlist/gnunet-daemon-hostlist.c:381
 msgid ""
 "bootstrap using hostlists (it is highly recommended that you always use this "
 "option)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist.c:383
+#: src/hostlist/gnunet-daemon-hostlist.c:385
 msgid "enable learning about hostlist servers from other peers"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist.c:388
+#: src/hostlist/gnunet-daemon-hostlist.c:390
 msgid "provide a hostlist server"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist.c:404
+#: src/hostlist/gnunet-daemon-hostlist.c:406
 msgid "GNUnet hostlist server and client"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:347
+#: src/hostlist/gnunet-daemon-hostlist_client.c:349
 msgid "# bytes downloaded from hostlist servers"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:368
-#: src/hostlist/gnunet-daemon-hostlist_client.c:401
+#: src/hostlist/gnunet-daemon-hostlist_client.c:370
+#: src/hostlist/gnunet-daemon-hostlist_client.c:403
 msgid "# invalid HELLOs downloaded from hostlist servers"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:371
-#: src/hostlist/gnunet-daemon-hostlist_client.c:404
+#: src/hostlist/gnunet-daemon-hostlist_client.c:373
+#: src/hostlist/gnunet-daemon-hostlist_client.c:406
 #, c-format
 msgid "Invalid `%s' message received from hostlist at `%s'\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:389
+#: src/hostlist/gnunet-daemon-hostlist_client.c:391
 msgid "# valid HELLOs downloaded from hostlist servers"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:659
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1405
+#: src/hostlist/gnunet-daemon-hostlist_client.c:661
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1407
 msgid "# advertised hostlist URIs"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:689
+#: src/hostlist/gnunet-daemon-hostlist_client.c:691
 #, c-format
 msgid "# advertised URI `%s' downloaded"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:732
+#: src/hostlist/gnunet-daemon-hostlist_client.c:734
 #, c-format
 msgid ""
 "Advertised hostlist with URI `%s' could not be downloaded. Advertised URI "
 "gets dismissed.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:860
+#: src/hostlist/gnunet-daemon-hostlist_client.c:862
 #, c-format
 msgid "Timeout trying to download hostlist from `%s'\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:874
+#: src/hostlist/gnunet-daemon-hostlist_client.c:876
 #, c-format
 msgid "Download limit of %u bytes exceeded, stopping download\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:894
+#: src/hostlist/gnunet-daemon-hostlist_client.c:896
 #, c-format
 msgid "Download of hostlist from `%s' failed: `%s'\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:900
+#: src/hostlist/gnunet-daemon-hostlist_client.c:902
 #, c-format
 msgid "Download of hostlist `%s' completed.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:908
+#: src/hostlist/gnunet-daemon-hostlist_client.c:910
 #, c-format
 msgid "Adding successfully tested hostlist `%s' datastore.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:961
+#: src/hostlist/gnunet-daemon-hostlist_client.c:963
 #, c-format
 msgid "Bootstrapping using hostlist at `%s'.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:969
+#: src/hostlist/gnunet-daemon-hostlist_client.c:971
 msgid "# hostlist downloads initiated"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1096
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1663
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1098
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1665
 msgid "# milliseconds between hostlist downloads"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1105
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1107
 #, c-format
 msgid "Have %u/%u connections.  Will consider downloading hostlist in %s\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1164
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1185
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1166
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1187
 msgid "# active connections"
 msgstr "# connessioni attive"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1351
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1353
 #, c-format
 msgid "Loading saved hostlist entries from file `%s' \n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1356
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1358
 #, c-format
 msgid "Hostlist file `%s' does not exist\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1365
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1367
 #, c-format
 msgid "Could not open file `%s' for reading to load hostlists: %s\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1399
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1401
 #, c-format
 msgid "%u hostlist URIs loaded from file\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1402
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1404
 msgid "# hostlist URIs read from file"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1448
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1450
 #, c-format
 msgid "Could not open file `%s' for writing to save hostlists: %s\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1455
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1457
 #, c-format
 msgid "Writing %u hostlist URIs to `%s'\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1479
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1496
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1481
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1498
 #, c-format
 msgid "Error writing hostlist URIs to file `%s'\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1491
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1493
 msgid "# hostlist URIs written to file"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1593
-#: src/transport/plugin_transport_http_client.c:2272
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1595
+#: src/transport/plugin_transport_http_client.c:2274
 #, c-format
 msgid "Invalid proxy type: `%s', disabling proxy! Check configuration!\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1622
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1624
 msgid "Learning is enabled on this peer\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1636
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1638
 msgid "Learning is not enabled on this peer\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1649
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1651
 #, c-format
 msgid ""
 "Since learning is not enabled on this peer, hostlist file `%s' was removed\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:174
+#: src/hostlist/gnunet-daemon-hostlist_server.c:176
 msgid "bytes in hostlist"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:199
+#: src/hostlist/gnunet-daemon-hostlist_server.c:201
 msgid "expired addresses encountered"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:235
-#: src/hostlist/gnunet-daemon-hostlist_server.c:529
-#: src/peerinfo-tool/gnunet-peerinfo.c:383
-#: src/peerinfo-tool/gnunet-peerinfo.c:532
-#: src/topology/gnunet-daemon-topology.c:860
+#: src/hostlist/gnunet-daemon-hostlist_server.c:237
+#: src/hostlist/gnunet-daemon-hostlist_server.c:531
+#: src/peerinfo-tool/gnunet-peerinfo.c:385
+#: src/peerinfo-tool/gnunet-peerinfo.c:534
+#: src/topology/gnunet-daemon-topology.c:862
 #, c-format
 msgid "Error in communication with PEERINFO service: %s\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:259
+#: src/hostlist/gnunet-daemon-hostlist_server.c:261
 msgid "HELLOs without addresses encountered (ignored)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:276
+#: src/hostlist/gnunet-daemon-hostlist_server.c:278
 msgid "bytes not included in hostlist (size limit)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:380
+#: src/hostlist/gnunet-daemon-hostlist_server.c:382
 #, c-format
 msgid "Refusing `%s' request to hostlist server\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:383
+#: src/hostlist/gnunet-daemon-hostlist_server.c:385
 msgid "hostlist requests refused (not HTTP GET)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:395
+#: src/hostlist/gnunet-daemon-hostlist_server.c:397
 #, c-format
 msgid "Refusing `%s' request with %llu bytes of upload data\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:399
+#: src/hostlist/gnunet-daemon-hostlist_server.c:401
 msgid "hostlist requests refused (upload data)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:406
+#: src/hostlist/gnunet-daemon-hostlist_server.c:408
 msgid "Could not handle hostlist request since I do not have a response yet\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:409
+#: src/hostlist/gnunet-daemon-hostlist_server.c:411
 msgid "hostlist requests refused (not ready)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:414
+#: src/hostlist/gnunet-daemon-hostlist_server.c:416
 msgid "Received request for our hostlist\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:416
+#: src/hostlist/gnunet-daemon-hostlist_server.c:418
 msgid "hostlist requests processed"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:464
+#: src/hostlist/gnunet-daemon-hostlist_server.c:466
 msgid "# hostlist advertisements send"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:677
-#: src/transport/gnunet-service-transport.c:2813
+#: src/hostlist/gnunet-daemon-hostlist_server.c:679
+#: src/transport/gnunet-service-transport.c:2814
 msgid "Could not access PEERINFO service.  Exiting.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:689
+#: src/hostlist/gnunet-daemon-hostlist_server.c:691
 #, c-format
 msgid "Invalid port number %llu.  Exiting.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:701
+#: src/hostlist/gnunet-daemon-hostlist_server.c:703
 #, c-format
 msgid "Hostlist service starts on %s:%llu\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:716
+#: src/hostlist/gnunet-daemon-hostlist_server.c:718
 #, c-format
 msgid "Address to obtain hostlist: `%s'\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:729
+#: src/hostlist/gnunet-daemon-hostlist_server.c:731
 msgid "BINDTOIP does not a valid IPv4 address! Ignoring BINDTOIPV4.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:746
+#: src/hostlist/gnunet-daemon-hostlist_server.c:748
 msgid "BINDTOIP does not a valid IPv4 address! Ignoring BINDTOIPV6.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:767
+#: src/hostlist/gnunet-daemon-hostlist_server.c:769
 #, fuzzy, c-format
 msgid "`%s' is not a valid IPv4 address! Ignoring BINDTOIPV4.\n"
 msgstr "`%s' non è un indirizzo IP valido.\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:787
+#: src/hostlist/gnunet-daemon-hostlist_server.c:789
 #, fuzzy, c-format
 msgid "`%s' is not a valid IPv6 address! Ignoring BINDTOIPV6.\n"
 msgstr "`%s' non è un indirizzo IP valido.\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:827
+#: src/hostlist/gnunet-daemon-hostlist_server.c:829
 #, c-format
 msgid "Could not start hostlist HTTP server on port %u\n"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:177
+#: src/identity/gnunet-identity.c:179
 #, c-format
 msgid "Failed to create ego: %s\n"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:199
+#: src/identity/gnunet-identity.c:201
 #, c-format
 msgid "Failed to set default ego: %s\n"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:354
+#: src/identity/gnunet-identity.c:356
 msgid "create ego NAME"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:360
+#: src/identity/gnunet-identity.c:362
 msgid "delete ego NAME "
 msgstr ""
 
-#: src/identity/gnunet-identity.c:365
+#: src/identity/gnunet-identity.c:367
 msgid "display all egos"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:371
+#: src/identity/gnunet-identity.c:373
 msgid ""
 "set default identity to EGO for a subsystem SUBSYSTEM (use together with -s)"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:376
+#: src/identity/gnunet-identity.c:378
 msgid "run in monitor mode egos"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:382
+#: src/identity/gnunet-identity.c:384
 msgid ""
 "set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:396
+#: src/identity/gnunet-identity.c:398
 msgid "Maintain egos"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:389
+#: src/identity/gnunet-service-identity.c:391
 msgid "no default known"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:414
+#: src/identity/gnunet-service-identity.c:416
 msgid "default configured, but ego unknown (internal error)"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:505
-#: src/identity/gnunet-service-identity.c:788
-#: src/identity/gnunet-service-identity.c:916
+#: src/identity/gnunet-service-identity.c:507
+#: src/identity/gnunet-service-identity.c:790
+#: src/identity/gnunet-service-identity.c:918
 #, c-format
 msgid "Failed to write subsystem default identifier map to `%s'.\n"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:513
+#: src/identity/gnunet-service-identity.c:515
 msgid "Unknown ego specified for service (internal error)"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:608
+#: src/identity/gnunet-service-identity.c:610
 msgid "identifier already in use for another ego"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:763
+#: src/identity/gnunet-service-identity.c:765
 msgid "target name already exists"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:806
-#: src/identity/gnunet-service-identity.c:934
+#: src/identity/gnunet-service-identity.c:808
+#: src/identity/gnunet-service-identity.c:936
 msgid "no matching ego found"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:969
+#: src/identity/gnunet-service-identity.c:971
 #, c-format
 msgid "Failed to parse ego information in `%s'\n"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:1027
+#: src/identity/gnunet-service-identity.c:1029
 #, c-format
 msgid "Failed to parse subsystem identity configuration file `%s'\n"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:1037
+#: src/identity/gnunet-service-identity.c:1039
 #, c-format
 msgid "Failed to create directory `%s' for storing egos\n"
 msgstr ""
 
-#: src/json/json.c:121
+#: src/json/json.c:123
 #, c-format
 msgid "Failed to parse JSON in option `%s': %s (%s)\n"
 msgstr ""
 
-#: src/multicast/gnunet-multicast.c:46 src/multicast/gnunet-multicast.c:70
-msgid "This command doesn't do anything yet."
-msgstr ""
-
-#: src/my/my.c:194 src/my/my.c:213
+#: src/my/my.c:196 src/my/my.c:215
 #, c-format
 msgid "%s failed at %s:%d with error: %s\n"
 msgstr ""
 
-#: src/mysql/mysql.c:178
+#: src/mysql/mysql.c:180
 #, c-format
 msgid "Trying to use file `%s' for MySQL configuration.\n"
 msgstr ""
 
-#: src/mysql/mysql.c:185
+#: src/mysql/mysql.c:187
 #, c-format
 msgid "Could not access file `%s': %s\n"
 msgstr ""
 
-#: src/namecache/gnunet-namecache.c:105
+#: src/namecache/gnunet-namecache.c:107
 #, c-format
 msgid "No records found for `%s'"
 msgstr ""
 
-#: src/namecache/gnunet-namecache.c:120 src/namestore/gnunet-namestore.c:424
+#: src/namecache/gnunet-namecache.c:122 src/namestore/gnunet-namestore.c:454
 #, c-format
 msgid "\tCorrupt or unsupported record of type %u\n"
 msgstr ""
 
-#: src/namecache/gnunet-namecache.c:181
+#: src/namecache/gnunet-namecache.c:183
 #, c-format
 msgid "You must specify which zone should be accessed\n"
 msgstr ""
 
-#: src/namecache/gnunet-namecache.c:191
+#: src/namecache/gnunet-namecache.c:193
 #, c-format
 msgid "Invalid public key for zone `%s'\n"
 msgstr ""
 
-#: src/namecache/gnunet-namecache.c:199
+#: src/namecache/gnunet-namecache.c:201
 #, c-format
 msgid "You must specify a name\n"
 msgstr "È necessario specificare un nome\n"
 
-#: src/namecache/gnunet-namecache.c:230 src/namestore/gnunet-namestore.c:1290
+#: src/namecache/gnunet-namecache.c:232 src/namestore/gnunet-namestore.c:1575
 msgid "name of the record to add/delete/display"
 msgstr ""
 
-#: src/namecache/gnunet-namecache.c:236
+#: src/namecache/gnunet-namecache.c:238
 msgid "spezifies the public key of the zone to look in"
 msgstr ""
 
-#: src/namecache/gnunet-namecache.c:248 src/namestore/gnunet-namestore.c:1342
+#: src/namecache/gnunet-namecache.c:250 src/namestore/gnunet-namestore.c:1632
 msgid "GNUnet zone manipulation tool"
 msgstr ""
 
-#: src/namecache/namecache_api.c:294
+#: src/namecache/namecache_api.c:296
 msgid "Namecache failed to cache block"
 msgstr ""
 
-#: src/namecache/namecache_api.c:381
+#: src/namecache/namecache_api.c:383
 msgid "Error communicating with namecache service"
 msgstr ""
 
-#: src/namecache/plugin_namecache_flat.c:119
-#: src/namecache/plugin_namecache_flat.c:253
-#: src/namestore/plugin_namestore_heap.c:146
-#: src/namestore/plugin_namestore_heap.c:393
-#: src/peerstore/plugin_peerstore_flat.c:377
-#: src/peerstore/plugin_peerstore_flat.c:536
+#: src/namecache/plugin_namecache_flat.c:121
+#: src/namecache/plugin_namecache_flat.c:255
+#: src/namestore/plugin_namestore_heap.c:148
+#: src/namestore/plugin_namestore_heap.c:395
+#: src/peerstore/plugin_peerstore_flat.c:379
+#: src/peerstore/plugin_peerstore_flat.c:538
 #, c-format
 msgid "Unable to initialize file: %s.\n"
 msgstr ""
 
-#: src/namecache/plugin_namecache_flat.c:130
-#: src/namestore/plugin_namestore_heap.c:157
-#: src/peerstore/plugin_peerstore_flat.c:392
+#: src/namecache/plugin_namecache_flat.c:132
+#: src/namestore/plugin_namestore_heap.c:159
+#: src/peerstore/plugin_peerstore_flat.c:394
 #, c-format
 msgid "Unable to get filesize: %s.\n"
 msgstr ""
 
-#: src/namecache/plugin_namecache_flat.c:149
-#: src/namestore/plugin_namestore_heap.c:170
-#: src/peerstore/plugin_peerstore_flat.c:404
+#: src/namecache/plugin_namecache_flat.c:151
+#: src/namestore/plugin_namestore_heap.c:172
+#: src/peerstore/plugin_peerstore_flat.c:406
 #, c-format
 msgid "Unable to read file: %s.\n"
 msgstr ""
 
-#: src/namecache/plugin_namecache_flat.c:408
+#: src/namecache/plugin_namecache_flat.c:410
 msgid "flat plugin running\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:311
+#: src/namecache/plugin_namecache_sqlite.c:183
+#: src/namecache/plugin_namecache_sqlite.c:197
+#: src/namestore/plugin_namestore_sqlite.c:219
+#: src/namestore/plugin_namestore_sqlite.c:230
 #, c-format
-msgid "Adding record failed: %s\n"
+msgid "Failed to setup database at `%s'\n"
 msgstr ""
 
 #: src/namestore/gnunet-namestore.c:341
 #, c-format
+msgid "Adding record failed: %s\n"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:371
+#, c-format
 msgid "Deleting record failed, record does not exist%s%s\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:348
+#: src/namestore/gnunet-namestore.c:378
 #, c-format
 msgid "Deleting record failed%s%s\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:628 src/namestore/gnunet-namestore.c:636
+#: src/namestore/gnunet-namestore.c:660 src/namestore/gnunet-namestore.c:668
 #, c-format
 msgid "A %s record exists already under `%s', no other records can be added.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:650 src/namestore/gnunet-namestore.c:662
+#: src/namestore/gnunet-namestore.c:682 src/namestore/gnunet-namestore.c:694
 #, c-format
 msgid "Records already exist under `%s', cannot add `%s' record.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:675
+#: src/namestore/gnunet-namestore.c:707
 #, c-format
 msgid ""
 "Non-GNS2DNS records already exist under `%s', cannot add GNS2DNS record.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:809
+#: src/namestore/gnunet-namestore.c:837
 #, c-format
 msgid "There are no records under label `%s' that could be deleted.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:850
+#: src/namestore/gnunet-namestore.c:878
 #, c-format
 msgid ""
 "There are no records under label `%s' that match the request for deletion.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:902
+#: src/namestore/gnunet-namestore.c:965
+#, c-format
+msgid "Failed to replace records: %s\n"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1009
 #, c-format
 msgid "No options given\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:921 src/namestore/gnunet-namestore.c:930
-#: src/namestore/gnunet-namestore.c:949 src/namestore/gnunet-namestore.c:972
-#: src/namestore/gnunet-namestore.c:1026
+#: src/namestore/gnunet-namestore.c:1032 src/namestore/gnunet-namestore.c:1065
+#: src/namestore/gnunet-namestore.c:1074 src/namestore/gnunet-namestore.c:1093
+#: src/namestore/gnunet-namestore.c:1116 src/namestore/gnunet-namestore.c:1148
 #, c-format
 msgid "Missing option `%s' for operation `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:922 src/namestore/gnunet-namestore.c:931
-#: src/namestore/gnunet-namestore.c:950 src/namestore/gnunet-namestore.c:974
+#: src/namestore/gnunet-namestore.c:1033
+msgid "replace"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1066 src/namestore/gnunet-namestore.c:1075
+#: src/namestore/gnunet-namestore.c:1094 src/namestore/gnunet-namestore.c:1118
 msgid "add"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:940
+#: src/namestore/gnunet-namestore.c:1084
 #, c-format
 msgid "Unsupported type `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:962
+#: src/namestore/gnunet-namestore.c:1106
 #, c-format
 msgid "Value `%s' invalid for record type `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1007
+#: src/namestore/gnunet-namestore.c:1129
 #, c-format
 msgid "Invalid time format `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1027
+#: src/namestore/gnunet-namestore.c:1149
 msgid "del"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1070
+#: src/namestore/gnunet-namestore.c:1192
 #, c-format
 msgid "Invalid public key for reverse lookup `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1099
-#: src/peerinfo-tool/gnunet-peerinfo.c:773
+#: src/namestore/gnunet-namestore.c:1221
+#: src/peerinfo-tool/gnunet-peerinfo.c:775
 #, c-format
 msgid "Invalid URI `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1134
+#: src/namestore/gnunet-namestore.c:1249
 #, c-format
 msgid "Invalid nick `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1174
+#: src/namestore/gnunet-namestore.c:1289
 #, c-format
 msgid "No default ego configured in identity service\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1238
+#: src/namestore/gnunet-namestore.c:1341
+#, c-format
+msgid "Superfluous command line arguments (starting with `%s') ignored\n"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1357
 #, c-format
 msgid "Cannot connect to identity service\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1263
+#: src/namestore/gnunet-namestore.c:1407
+msgid "Empty record line argument is not allowed.\n"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1423
+#, c-format
+msgid "Invalid expiration time `%s' (must be without unit)\n"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1435 src/namestore/gnunet-namestore.c:1453
+#: src/namestore/gnunet-namestore.c:1470
+#, c-format
+msgid "Missing entries in record line `%s'.\n"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1444
+#, fuzzy, c-format
+msgid "Unknown record type `%s'\n"
+msgstr "Comando `%s' sconosciuto.\n"
+
+#: src/namestore/gnunet-namestore.c:1484
+#, c-format
+msgid "Invalid record data for type %s: `%s'.\n"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1548
 msgid "add record"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1267
+#: src/namestore/gnunet-namestore.c:1552
 msgid "delete record"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1271
+#: src/namestore/gnunet-namestore.c:1556
 msgid "display records"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1276
+#: src/namestore/gnunet-namestore.c:1561
 msgid ""
 "expiration time for record to use (for adding only), \"never\" is possible"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1281
+#: src/namestore/gnunet-namestore.c:1566
 msgid "set the desired nick name for the zone"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1285
+#: src/namestore/gnunet-namestore.c:1570
 msgid "monitor changes in the namestore"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1295
+#: src/namestore/gnunet-namestore.c:1580
 msgid "determine our name for the given PKEY"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1300
+#: src/namestore/gnunet-namestore.c:1585
+msgid ""
+"set record set to values given by (possibly multiple) RECORDLINES; can be "
+"specified multiple times"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1590
 msgid "type of the record to add/delete/display"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1305
+#: src/namestore/gnunet-namestore.c:1595
 msgid "URI to import into our zone"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1310
+#: src/namestore/gnunet-namestore.c:1600
 msgid "value of the record to add/delete"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1314
+#: src/namestore/gnunet-namestore.c:1604
 msgid "create or list public record"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1318
+#: src/namestore/gnunet-namestore.c:1608
 msgid ""
 "create shadow record (only valid if all other records of the same type have "
 "expired"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1323
+#: src/namestore/gnunet-namestore.c:1613
 msgid "name of the ego controlling the zone"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:547
+#: src/namestore/gnunet-namestore-fcfsd.c:549
 #, c-format
 msgid "Unsupported form value `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:574
+#: src/namestore/gnunet-namestore-fcfsd.c:576
 #, c-format
 msgid "Failed to create record for domain `%s': %s\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:595
+#: src/namestore/gnunet-namestore-fcfsd.c:597
 msgid "Error when mapping zone to name\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:627
+#: src/namestore/gnunet-namestore-fcfsd.c:629
 #, c-format
 msgid "Found existing name `%s' for the given key\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:687
+#: src/namestore/gnunet-namestore-fcfsd.c:689
 #, c-format
 msgid "Found %u existing records for domain `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:775
+#: src/namestore/gnunet-namestore-fcfsd.c:777
 #, c-format
 msgid "Failed to create page for `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:794
+#: src/namestore/gnunet-namestore-fcfsd.c:796
 #, c-format
 msgid "Failed to setup post processor for `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:830
+#: src/namestore/gnunet-namestore-fcfsd.c:832
 msgid "Domain name must not contain `.'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:839
+#: src/namestore/gnunet-namestore-fcfsd.c:841
 msgid "Domain name must not contain `+'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1069
+#: src/namestore/gnunet-namestore-fcfsd.c:1071
 msgid "No ego configured for `fcfsd` subsystem\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1097
+#: src/namestore/gnunet-namestore-fcfsd.c:1099
 msgid "Failed to start HTTP server\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1145
+#: src/namestore/gnunet-namestore-fcfsd.c:1147
 msgid "Failed to connect to identity\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1171
+#: src/namestore/gnunet-namestore-fcfsd.c:1173
 msgid "name of the zone that is to be managed by FCFSD"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1190
+#: src/namestore/gnunet-namestore-fcfsd.c:1192
 msgid "GNU Name System First Come First Serve name registration service"
 msgstr ""
 
-#: src/namestore/gnunet-service-namestore.c:749
+#: src/namestore/gnunet-service-namestore.c:900
 #, c-format
 msgid "Failed to replicate block in namecache: %s\n"
 msgstr ""
 
-#: src/namestore/gnunet-zoneimport.c:2036
+#: src/namestore/gnunet-zoneimport.c:2038
 msgid "size to use for the main hash map"
 msgstr ""
 
-#: src/namestore/gnunet-zoneimport.c:2041
+#: src/namestore/gnunet-zoneimport.c:2043
 msgid "minimum expiration time we assume for imported records"
 msgstr ""
 
-#: src/namestore/namestore_api.c:389
+#: src/namestore/namestore_api.c:391
 msgid "Namestore failed to store record\n"
 msgstr ""
 
-#: src/namestore/plugin_namestore_heap.c:776
+#: src/namestore/plugin_namestore_heap.c:778
 msgid "heap file database running\n"
 msgstr ""
 
-#: src/namestore/plugin_namestore_sqlite.c:216
-#: src/namestore/plugin_namestore_sqlite.c:227
-#, c-format
-msgid "Failed to setup database at `%s'\n"
-msgstr ""
-
-#: src/nat-auto/gnunet-nat-auto.c:191
+#: src/nat-auto/gnunet-nat-auto.c:193
 msgid "Suggested configuration changes:\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:217
+#: src/nat-auto/gnunet-nat-auto.c:219
 #, c-format
 msgid "Failed to write configuration to `%s'\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:224
+#: src/nat-auto/gnunet-nat-auto.c:226
 #, c-format
 msgid "Wrote updated configuration to `%s'\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:343
+#: src/nat-auto/gnunet-nat-auto.c:345
 msgid "run autoconfiguration"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:349
+#: src/nat-auto/gnunet-nat-auto.c:351
 msgid "section name providing the configuration for the adapter"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:354 src/nat/gnunet-nat.c:451
+#: src/nat-auto/gnunet-nat-auto.c:356 src/nat/gnunet-nat.c:459
 msgid "use TCP"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:359 src/nat/gnunet-nat.c:456
+#: src/nat-auto/gnunet-nat-auto.c:361 src/nat/gnunet-nat.c:464
 msgid "use UDP"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:364
+#: src/nat-auto/gnunet-nat-auto.c:366
 msgid "write configuration file (for autoconfiguration)"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:376
+#: src/nat-auto/gnunet-nat-auto.c:378
 msgid "GNUnet NAT traversal autoconfiguration"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto_legacy.c:401
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:679
-#: src/nat-auto/nat_auto_api_test.c:403
+#: src/nat-auto/gnunet-nat-auto_legacy.c:403
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:681
+#: src/nat-auto/nat_auto_api_test.c:409
 msgid "Failed to connect to `gnunet-nat-server'\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto_legacy.c:516
+#: src/nat-auto/gnunet-nat-auto_legacy.c:518
 #, c-format
 msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto_legacy.c:566
-#: src/nat-auto/nat_auto_api_test.c:569
+#: src/nat-auto/gnunet-nat-auto_legacy.c:568
+#: src/nat-auto/nat_auto_api_test.c:575
 msgid "NAT test failed to start NAT library\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto.c:340
+#: src/nat-auto/gnunet-service-nat-auto.c:342
 msgid "UPnP client `upnpc` command not found, disabling UPnP\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:383
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:385
 msgid "NAT traversal with ICMP Server succeeded.\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:384
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:386
 msgid "NAT traversal with ICMP Server failed.\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:403
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:405
 msgid "Testing connection reversal with ICMP server.\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:435
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:437
 #, c-format
 msgid "Detected external IP `%s'\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:570
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:572
 msgid "This system has a global IPv6 address, setting IPv6 to supported.\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:588
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:590
 #, c-format
 msgid "Detected internal network address `%s'.\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:722
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:724
 msgid "upnpc found, enabling its use\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:723
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:725
 msgid "upnpc not found\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:760
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:762
 msgid "test_icmp_server not possible, as we have no public IPv4 address\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:772
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:832
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:774
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:834
 msgid "test_icmp_server not possible, as we are not behind NAT\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:784
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:844
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:786
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:846
 msgid "No working gnunet-helper-nat-server found\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:821
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:823
 msgid "test_icmp_client not possible, as we have no internal IPv4 address\n"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:74
+#: src/nat-auto/nat_auto_api.c:76
 msgid "Operation Successful"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:76
+#: src/nat-auto/nat_auto_api.c:78
 msgid "IPC failure"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:78
+#: src/nat-auto/nat_auto_api.c:80
 msgid "Failure in network subsystem, check permissions."
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:80
+#: src/nat-auto/nat_auto_api.c:82
 msgid "Encountered timeout while performing operation"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:82
+#: src/nat-auto/nat_auto_api.c:84
 msgid "detected that we are offline"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:84
+#: src/nat-auto/nat_auto_api.c:86
 msgid "`upnpc` command not found"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:86
+#: src/nat-auto/nat_auto_api.c:88
 msgid "Failed to run `upnpc` command"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:88
+#: src/nat-auto/nat_auto_api.c:90
 msgid "`upnpc' command took too long, process killed"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:90
+#: src/nat-auto/nat_auto_api.c:92
 msgid "`upnpc' command failed to establish port mapping"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:92
+#: src/nat-auto/nat_auto_api.c:94
 msgid "`external-ip' command not found"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:94
+#: src/nat-auto/nat_auto_api.c:96
 msgid "Failed to run `external-ip` command"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:96
+#: src/nat-auto/nat_auto_api.c:98
 msgid "`external-ip' command output invalid"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:98
+#: src/nat-auto/nat_auto_api.c:100
 msgid "no valid address was returned by `external-ip'"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:100
+#: src/nat-auto/nat_auto_api.c:102
 msgid "Could not determine interface with internal/local network address"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:102
+#: src/nat-auto/nat_auto_api.c:104
 msgid "No functioning gnunet-helper-nat-server installation found"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:104
+#: src/nat-auto/nat_auto_api.c:106
 msgid "NAT test could not be initialized"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:106
+#: src/nat-auto/nat_auto_api.c:108
 msgid "NAT test timeout reached"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:108
+#: src/nat-auto/nat_auto_api.c:110
 msgid "could not register NAT"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:110
+#: src/nat-auto/nat_auto_api.c:112
 msgid "No working gnunet-helper-nat-client installation found"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api_test.c:475
+#: src/nat-auto/nat_auto_api_test.c:481
 #, c-format
 msgid "Failed to find valid PORT in section `%s'\n"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api_test.c:520
+#: src/nat-auto/nat_auto_api_test.c:526
 #, c-format
 msgid "Failed to create socket bound to `%s' for NAT test: %s\n"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:429
+#: src/nat/gnunet-nat.c:437
 msgid "which IP and port are we locally using to bind/listen to"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:435
+#: src/nat/gnunet-nat.c:443
 msgid "which remote IP and port should be asked for connection reversal"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:441
+#: src/nat/gnunet-nat.c:449
 msgid ""
 "name of configuration section to find additional options, such as manual "
 "host punching data"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:446
+#: src/nat/gnunet-nat.c:454
 msgid "enable STUN processing"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:461
+#: src/nat/gnunet-nat.c:469
 msgid "watch for connection reversal requests"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:473
+#: src/nat/gnunet-nat.c:481
 msgid "GNUnet NAT traversal autoconfigure daemon"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1337
+#: src/nat/gnunet-service-nat.c:1339
 #, c-format
 msgid "Malformed punched hole specification `%s' (lacks port)\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1347
+#: src/nat/gnunet-service-nat.c:1349
 #, c-format
 msgid "Invalid port number in punched hole specification `%s' (lacks port)\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1363
+#: src/nat/gnunet-service-nat.c:1365
 #, c-format
 msgid "Malformed punched hole specification `%s' (lacks `]')\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1374
+#: src/nat/gnunet-service-nat.c:1376
 #, c-format
 msgid "Malformed punched hole specification `%s' (IPv6 address invalid)"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1839
+#: src/nat/gnunet-service-nat.c:1841
 msgid "Connection reversal request failed\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1912
+#: src/nat/gnunet-service-nat.c:1914
 msgid ""
 "UPnP enabled in configuration, but UPnP client `upnpc` command not found, "
 "disabling UPnP\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat_helper.c:184
+#: src/nat/gnunet-service-nat_helper.c:186
 #, c-format
 msgid "gnunet-helper-nat-server generated malformed address `%s'\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat_helper.c:271
+#: src/nat/gnunet-service-nat_helper.c:273
 #, c-format
 msgid "Failed to start %s\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat_mini.c:194
+#: src/nat/gnunet-service-nat_mini.c:196
 msgid "`external-ip' command not found\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat_mini.c:654
+#: src/nat/gnunet-service-nat_mini.c:656
 msgid "`upnpc' command not found\n"
 msgstr ""
 
-#: src/nse/gnunet-nse.c:120
+#: src/nse/gnunet-nse.c:122
 msgid "Show network size estimates from NSE service."
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:847
+#: src/nse/gnunet-nse-profiler.c:849
 msgid "limit to the number of connections to NSE services, 0 for none"
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:852
+#: src/nse/gnunet-nse-profiler.c:854
 msgid "name of the file for writing connection information and statistics"
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:864
+#: src/nse/gnunet-nse-profiler.c:866
 msgid "name of the file for writing the main results"
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:871
+#: src/nse/gnunet-nse-profiler.c:873
 msgid "Number of peers to run in each round, separated by commas"
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:882
+#: src/nse/gnunet-nse-profiler.c:884
 msgid "delay between rounds"
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:891
+#: src/nse/gnunet-nse-profiler.c:893
 msgid "Measure quality and performance of the NSE service."
 msgstr ""
 
-#: src/nse/gnunet-service-nse.c:1532
-#: src/revocation/gnunet-service-revocation.c:841 src/util/gnunet-scrypt.c:274
+#: src/nse/gnunet-service-nse.c:1534
+#: src/revocation/gnunet-service-revocation.c:843 src/util/gnunet-scrypt.c:276
 msgid "Value is too large.\n"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:176
+#: src/peerinfo/gnunet-service-peerinfo.c:178
 #, c-format
 msgid "Removing expired address of transport `%s'\n"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:311
+#: src/peerinfo/gnunet-service-peerinfo.c:313
 #, c-format
 msgid "Failed to parse HELLO in file `%s': %s\n"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:332
-#: src/peerinfo/gnunet-service-peerinfo.c:363
+#: src/peerinfo/gnunet-service-peerinfo.c:334
+#: src/peerinfo/gnunet-service-peerinfo.c:365
 #, c-format
 msgid "Failed to parse HELLO in file `%s'\n"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:447
+#: src/peerinfo/gnunet-service-peerinfo.c:449
 msgid "# peers known"
 msgstr "# peer conosciuti"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:490
+#: src/peerinfo/gnunet-service-peerinfo.c:492
 #, c-format
 msgid ""
 "File `%s' in directory `%s' does not match naming convention. Removed.\n"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:657
+#: src/peerinfo/gnunet-service-peerinfo.c:659
 #, c-format
 msgid "Scanning directory `%s'\n"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:665
+#: src/peerinfo/gnunet-service-peerinfo.c:667
 #, c-format
 msgid "Still no peers found in `%s'!\n"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:1098
+#: src/peerinfo/gnunet-service-peerinfo.c:1100
 #, c-format
 msgid "Cleaning up directory `%s'\n"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:1436
+#: src/peerinfo/gnunet-service-peerinfo.c:1438
 #, c-format
 msgid "Importing HELLOs from `%s'\n"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:1449
+#: src/peerinfo/gnunet-service-peerinfo.c:1451
 msgid "Skipping import of included HELLOs\n"
 msgstr ""
 
-#: src/peerinfo/peerinfo_api.c:218
+#: src/peerinfo/peerinfo_api.c:220
 msgid "Failed to receive response from `PEERINFO' service."
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:237
+#: src/peerinfo-tool/gnunet-peerinfo.c:239
 #, c-format
 msgid "%sPeer `%s'\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:244
+#: src/peerinfo-tool/gnunet-peerinfo.c:246
 #, c-format
 msgid "\tExpires: %s \t %s\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:297
-#: src/rest-plugins/plugin_rest_peerinfo.c:499
+#: src/peerinfo-tool/gnunet-peerinfo.c:299
+#: src/rest-plugins/plugin_rest_peerinfo.c:501
 #, c-format
 msgid "Failure: Cannot convert address to string for peer `%s'\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:464
+#: src/peerinfo-tool/gnunet-peerinfo.c:466
 #, c-format
 msgid "Failure: Received invalid %s\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:478
+#: src/peerinfo-tool/gnunet-peerinfo.c:480
 #, c-format
 msgid "Failed to write HELLO with %u bytes to file `%s'\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:497
+#: src/peerinfo-tool/gnunet-peerinfo.c:499
 #, c-format
 msgid "Wrote %s HELLO containing %u addresses with %u bytes to file `%s'\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:797
+#: src/peerinfo-tool/gnunet-peerinfo.c:799
 #, c-format
 msgid "I am peer `%s'.\n"
 msgstr "Io sono il peer '%s''.\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:841
+#: src/peerinfo-tool/gnunet-peerinfo.c:843
 msgid "don't resolve host names"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:846
+#: src/peerinfo-tool/gnunet-peerinfo.c:848
 msgid "output only the identity strings"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:850
+#: src/peerinfo-tool/gnunet-peerinfo.c:852
 msgid "include friend-only information"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:855
+#: src/peerinfo-tool/gnunet-peerinfo.c:857
 msgid "output our own identity only"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:860
+#: src/peerinfo-tool/gnunet-peerinfo.c:862
 msgid "list all known peers"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:866
+#: src/peerinfo-tool/gnunet-peerinfo.c:868
 msgid "dump hello to file"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:871
+#: src/peerinfo-tool/gnunet-peerinfo.c:873
 msgid "also output HELLO uri(s)"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:877
+#: src/peerinfo-tool/gnunet-peerinfo.c:879
 msgid "add given HELLO uri to the database"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:895
+#: src/peerinfo-tool/gnunet-peerinfo.c:897
 msgid "Print information about peers."
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:103
-#: src/transport/gnunet-service-transport_plugins.c:166
+#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:105
+#: src/transport/gnunet-service-transport_plugins.c:168
 #, c-format
 msgid "Starting transport plugins `%s'\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:107
-#: src/transport/gnunet-service-transport_plugins.c:171
+#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:109
+#: src/transport/gnunet-service-transport_plugins.c:173
 #, c-format
 msgid "Loading `%s' transport plugin\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:127
-#: src/transport/gnunet-service-transport_plugins.c:206
+#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:129
+#: src/transport/gnunet-service-transport_plugins.c:208
 #, c-format
 msgid "Failed to load transport plugin for `%s'\n"
 msgstr ""
 
-#: src/peerstore/gnunet-peerstore.c:89
+#: src/peerstore/gnunet-peerstore.c:91
 msgid "peerstore"
 msgstr ""
 
-#: src/peerstore/gnunet-service-peerstore.c:596
+#: src/peerstore/gnunet-service-peerstore.c:598
 #, c-format
 msgid "Could not load database backend `%s'\n"
 msgstr ""
 
-#: src/peerstore/peerstore_api.c:348
-msgid "timeout"
-msgstr ""
-
-#: src/peerstore/peerstore_api.c:564 src/peerstore/peerstore_api.c:613
+#: src/peerstore/peerstore_api.c:532 src/peerstore/peerstore_api.c:581
 msgid "Unexpected iteration response, this should not happen.\n"
 msgstr ""
 
-#: src/peerstore/peerstore_api.c:627
+#: src/peerstore/peerstore_api.c:595
 msgid "Received a malformed response from service."
 msgstr ""
 
-#: src/peerstore/peerstore_api.c:776
+#: src/peerstore/peerstore_api.c:731
 msgid "Received a watch result for a non existing watch.\n"
 msgstr ""
 
-#: src/peerstore/plugin_peerstore_sqlite.c:451
-#: src/psycstore/plugin_psycstore_sqlite.c:280
+#: src/peerstore/plugin_peerstore_sqlite.c:453
 #, c-format
 msgid ""
 "Error executing SQL query: %s\n"
 "  %s\n"
 msgstr ""
 
-#: src/peerstore/plugin_peerstore_sqlite.c:486
-#: src/psycstore/plugin_psycstore_mysql.c:248
-#: src/psycstore/plugin_psycstore_sqlite.c:257
+#: src/peerstore/plugin_peerstore_sqlite.c:488
 #, c-format
 msgid ""
 "Error preparing SQL query: %s\n"
 "  %s\n"
 msgstr ""
 
-#: src/peerstore/plugin_peerstore_sqlite.c:568
+#: src/peerstore/plugin_peerstore_sqlite.c:570
 #, c-format
 msgid "Unable to create indices: %s.\n"
 msgstr ""
 
-#: src/pq/pq_prepare.c:82
+#: src/pq/pq_prepare.c:84
 #, c-format
 msgid "PQprepare (`%s' as `%s') failed with error: %s\n"
 msgstr ""
 
-#: src/psycstore/gnunet-service-psycstore.c:247
-msgid "Failed to store membership information!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:269
-msgid "Failed to test membership!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:298
-msgid "Dropping invalid fragment\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:309
-msgid "Failed to store fragment\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:366
-msgid "Failed to get fragment!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:432
-msgid "Failed to get message!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:462
-msgid "Failed to get message fragment!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:492
-msgid "Failed to get master counters!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:673
-#, c-format
-msgid "Failed to begin modifying state: %d\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:683
-#, c-format
-msgid "Failed to modify state: %d\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:691
-msgid "Failed to end modifying state!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:728
-msgid "Tried to set invalid state variable name!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:742
-msgid "Failed to begin synchronizing state!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:759
-msgid "Failed to end synchronizing state!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:777
-#: src/psycstore/gnunet-service-psycstore.c:793
-msgid "Failed to reset state!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:822
-#: src/psycstore/gnunet-service-psycstore.c:879
-msgid "Tried to get invalid state variable name!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:849
-#: src/psycstore/gnunet-service-psycstore.c:894
-msgid "Failed to get state variable!\n"
-msgstr ""
-
-#: src/psycstore/plugin_psycstore_mysql.c:279
-msgid "Unable to initialize Mysql.\n"
-msgstr ""
-
-#: src/psycstore/plugin_psycstore_mysql.c:289
-#, c-format
-msgid "Failed to run SQL statement `%s'\n"
-msgstr ""
-
-#: src/psycstore/plugin_psycstore_sqlite.c:59
-#, c-format
-msgid "`%s' failed at %s:%d with error: %s (%d)\n"
-msgstr ""
-
-#: src/psycstore/plugin_psycstore_sqlite.c:1922
-msgid "SQLite database running\n"
-msgstr ""
-
-#: src/pt/gnunet-daemon-pt.c:421
+#: src/pt/gnunet-daemon-pt.c:423
 msgid "Failed to pack DNS request.  Dropping.\n"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:427
+#: src/pt/gnunet-daemon-pt.c:429
 msgid "# DNS requests mapped to VPN"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:481
+#: src/pt/gnunet-daemon-pt.c:483
 msgid "# DNS records modified"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:665
+#: src/pt/gnunet-daemon-pt.c:667
 msgid "# DNS replies intercepted"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:672
+#: src/pt/gnunet-daemon-pt.c:674
 msgid "Failed to parse DNS request.  Dropping.\n"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:710
+#: src/pt/gnunet-daemon-pt.c:712
 msgid "# DNS requests dropped (timeout)"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:766
+#: src/pt/gnunet-daemon-pt.c:768
 msgid "# DNS requests intercepted"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:771
+#: src/pt/gnunet-daemon-pt.c:773
 msgid "# DNS requests dropped (DNS cadet channel down)"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:779
+#: src/pt/gnunet-daemon-pt.c:781
 msgid "# DNS requests dropped (malformed)"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:874
+#: src/pt/gnunet-daemon-pt.c:876
 msgid "# DNS replies received"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:891
+#: src/pt/gnunet-daemon-pt.c:893
 msgid "# DNS replies dropped (too late?)"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:1217 src/pt/gnunet-daemon-pt.c:1226
-#: src/pt/gnunet-daemon-pt.c:1242 src/pt/gnunet-daemon-pt.c:1251
-#: src/pt/gnunet-daemon-pt.c:1260
+#: src/pt/gnunet-daemon-pt.c:1219 src/pt/gnunet-daemon-pt.c:1228
+#: src/pt/gnunet-daemon-pt.c:1244 src/pt/gnunet-daemon-pt.c:1253
+#: src/pt/gnunet-daemon-pt.c:1262
 #, c-format
 msgid "Failed to connect to %s service.  Exiting.\n"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:1305
+#: src/pt/gnunet-daemon-pt.c:1307
 msgid "Daemon to run to perform IP protocol translation to GNUnet"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:465
+#: src/reclaim/gnunet-reclaim.c:467
 #, c-format
 msgid "Ego is required\n"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:473
+#: src/reclaim/gnunet-reclaim.c:475
 #, c-format
 msgid "Attribute value missing!\n"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:481
+#: src/reclaim/gnunet-reclaim.c:483
 #, c-format
 msgid "Requesting party key is required!\n"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:504
+#: src/reclaim/gnunet-reclaim.c:506
 msgid "Add attribute"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:510
+#: src/reclaim/gnunet-reclaim.c:512
 msgid "Attribute value"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:515
+#: src/reclaim/gnunet-reclaim.c:517
 msgid "Ego"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:520
+#: src/reclaim/gnunet-reclaim.c:522
 msgid "Audience (relying party)"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:524
+#: src/reclaim/gnunet-reclaim.c:526
 msgid "List attributes for Ego"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:529
+#: src/reclaim/gnunet-reclaim.c:531
 msgid "Issue a ticket"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:534
+#: src/reclaim/gnunet-reclaim.c:536
 msgid "Consume a ticket"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:539
+#: src/reclaim/gnunet-reclaim.c:541
 msgid "Revoke a ticket"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:544
+#: src/reclaim/gnunet-reclaim.c:546
 msgid "Type of attribute"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:549
+#: src/reclaim/gnunet-reclaim.c:551
 msgid "Expiration interval of the attribute"
 msgstr ""
 
-#: src/reclaim/reclaim_api.c:434
+#: src/reclaim/reclaim_api.c:436
 msgid "failed to store record\n"
 msgstr ""
 
-#: src/regex/gnunet-daemon-regexprofiler.c:265
+#: src/regex/gnunet-daemon-regexprofiler.c:267
 #, c-format
 msgid "%s service is lacking key configuration settings (%s).  Exiting.\n"
 msgstr ""
 
-#: src/regex/gnunet-daemon-regexprofiler.c:378
+#: src/regex/gnunet-daemon-regexprofiler.c:380
 msgid "Daemon to announce regular expressions for the peer using cadet."
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1384
+#: src/regex/gnunet-regex-profiler.c:1386
 msgid "No configuration file given. Exiting\n"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1425
-#: src/regex/gnunet-regex-simulation-profiler.c:628
+#: src/regex/gnunet-regex-profiler.c:1427
+#: src/regex/gnunet-regex-simulation-profiler.c:630
 #, c-format
 msgid "No policy directory specified on command line. Exiting.\n"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1431
-#: src/regex/gnunet-regex-simulation-profiler.c:636
+#: src/regex/gnunet-regex-profiler.c:1433
+#: src/regex/gnunet-regex-simulation-profiler.c:638
 #, c-format
 msgid "Specified policies directory does not exist. Exiting.\n"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1438
+#: src/regex/gnunet-regex-profiler.c:1440
 #, c-format
 msgid "No files found in `%s'\n"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1447
+#: src/regex/gnunet-regex-profiler.c:1449
 msgid "No search strings file given. Exiting.\n"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1467
+#: src/regex/gnunet-regex-profiler.c:1469
 msgid "Error loading search strings. Exiting.\n"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1555
+#: src/regex/gnunet-regex-profiler.c:1557
 msgid "name of the file for writing statistics"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1561
+#: src/regex/gnunet-regex-profiler.c:1563
 msgid "wait TIMEOUT before ending the experiment"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1567
+#: src/regex/gnunet-regex-profiler.c:1569
 msgid "directory with policy files"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1574
+#: src/regex/gnunet-regex-profiler.c:1576
 msgid "name of file with input strings"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1580
+#: src/regex/gnunet-regex-profiler.c:1582
 msgid "name of file with hosts' names"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1593
+#: src/regex/gnunet-regex-profiler.c:1595
 msgid "Profiler for regex"
 msgstr ""
 
-#: src/regex/gnunet-regex-simulation-profiler.c:697
+#: src/regex/gnunet-regex-simulation-profiler.c:699
 msgid "name of the table to write DFAs"
 msgstr ""
 
-#: src/regex/gnunet-regex-simulation-profiler.c:703
+#: src/regex/gnunet-regex-simulation-profiler.c:705
 msgid "maximum path compression length"
 msgstr ""
 
-#: src/regex/gnunet-regex-simulation-profiler.c:717
+#: src/regex/gnunet-regex-simulation-profiler.c:719
 msgid "Profiler for regex library"
 msgstr ""
 
-#: src/regex/regex_api_announce.c:150
+#: src/regex/regex_api_announce.c:152
 #, c-format
 msgid "Regex `%s' is too long!\n"
 msgstr ""
 
-#: src/regex/regex_api_search.c:210
+#: src/regex/regex_api_search.c:212
 #, c-format
 msgid "Search string `%s' is too long!\n"
 msgstr ""
 
-#: src/rest/gnunet-rest-server.c:925
+#: src/rest/gnunet-rest-server.c:927
 msgid "listen on specified port (default: 7776)"
 msgstr ""
 
-#: src/rest/gnunet-rest-server.c:942
+#: src/rest/gnunet-rest-server.c:944
 msgid "GNUnet REST server"
 msgstr ""
 
-#: src/rest-plugins/plugin_rest_copying.c:207
+#: src/rest-plugins/plugin_rest_copying.c:209
 msgid "COPYING REST API initialized\n"
 msgstr ""
 
-#: src/rest-plugins/plugin_rest_credential.c:1126
+#: src/rest-plugins/plugin_rest_credential.c:1128
 msgid "GNS REST API initialized\n"
 msgstr ""
 
-#: src/rest-plugins/plugin_rest_gns.c:450
+#: src/rest-plugins/plugin_rest_gns.c:452
 msgid "Gns REST API initialized\n"
 msgstr ""
 
-#: src/rest-plugins/plugin_rest_identity.c:1295
+#: src/rest-plugins/plugin_rest_identity.c:1297
 msgid "Identity REST API initialized\n"
 msgstr ""
 
-#: src/rest-plugins/plugin_rest_namestore.c:1077
+#: src/rest-plugins/plugin_rest_namestore.c:1079
 msgid "Namestore REST API initialized\n"
 msgstr ""
 
-#: src/rest-plugins/plugin_rest_openid_connect.c:2135
+#: src/rest-plugins/plugin_rest_openid_connect.c:2245
 #: src/rest-plugins/plugin_rest_reclaim.c:1079
 msgid "Identity Provider REST API initialized\n"
 msgstr ""
 
-#: src/rest-plugins/plugin_rest_peerinfo.c:794
+#: src/rest-plugins/plugin_rest_peerinfo.c:796
 msgid "Peerinfo REST API initialized\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:127
+#: src/revocation/gnunet-revocation.c:129
 #, c-format
 msgid "Key `%s' is valid\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:132
+#: src/revocation/gnunet-revocation.c:134
 #, c-format
 msgid "Key `%s' has been revoked\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:138
+#: src/revocation/gnunet-revocation.c:140
 msgid "Internal error\n"
 msgstr "Errore interno\n"
 
-#: src/revocation/gnunet-revocation.c:164
+#: src/revocation/gnunet-revocation.c:166
 #, c-format
 msgid "Key for ego `%s' is still valid, revocation failed (!)\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:169
+#: src/revocation/gnunet-revocation.c:171
 msgid "Revocation failed (!)\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:174
+#: src/revocation/gnunet-revocation.c:176
 #, c-format
 msgid "Key for ego `%s' has been successfully revoked\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:179
+#: src/revocation/gnunet-revocation.c:181
 msgid "Revocation successful.\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:184
+#: src/revocation/gnunet-revocation.c:186
 msgid "Internal error, key revocation might have failed\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:321
+#: src/revocation/gnunet-revocation.c:323
 #, c-format
 msgid "Revocation certificate for `%s' stored in `%s'\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:350
+#: src/revocation/gnunet-revocation.c:352
 #, c-format
 msgid "Ego `%s' not found.\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:371
+#: src/revocation/gnunet-revocation.c:373
 #, c-format
 msgid "Error: revocation certificate in `%s' is not for `%s'\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:391
+#: src/revocation/gnunet-revocation.c:393
 msgid "Revocation certificate ready\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:401
+#: src/revocation/gnunet-revocation.c:403
 msgid "Revocation certificate not ready, calculating proof of work\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:435 src/social/gnunet-social.c:1178
+#: src/revocation/gnunet-revocation.c:437
 #, c-format
 msgid "Public key `%s' malformed\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:448
+#: src/revocation/gnunet-revocation.c:450
 msgid ""
 "Testing and revoking at the same time is not allowed, only executing test.\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:468
+#: src/revocation/gnunet-revocation.c:470
 msgid "No filename to store revocation certificate given.\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:489
+#: src/revocation/gnunet-revocation.c:491
 #, c-format
 msgid "Failed to read revocation certificate from `%s'\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:514
+#: src/revocation/gnunet-revocation.c:516
 msgid "No action specified. Nothing to do.\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:533
+#: src/revocation/gnunet-revocation.c:535
 msgid "use NAME for the name of the revocation file"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:539
+#: src/revocation/gnunet-revocation.c:541
 msgid ""
 "revoke the private key associated for the the private key associated with "
 "the ego NAME "
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:544
+#: src/revocation/gnunet-revocation.c:546
 msgid "actually perform revocation, otherwise we just do the precomputation"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:550
+#: src/revocation/gnunet-revocation.c:552
 msgid "test if the public key KEY has been revoked"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:457
+#: src/revocation/gnunet-service-revocation.c:459
 msgid "# unsupported revocations received via set union"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:466
+#: src/revocation/gnunet-service-revocation.c:468
 msgid "# revocation messages received via set union"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:471
+#: src/revocation/gnunet-service-revocation.c:473
 #, c-format
 msgid "Error computing revocation set union with %s\n"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:475
+#: src/revocation/gnunet-service-revocation.c:477
 msgid "# revocation set unions failed"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:484
+#: src/revocation/gnunet-service-revocation.c:486
 msgid "# revocation set unions completed"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:523
+#: src/revocation/gnunet-service-revocation.c:525
 msgid "SET service crashed, terminating revocation service\n"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:865
+#: src/revocation/gnunet-service-revocation.c:867
 msgid "Could not open revocation database file!"
 msgstr ""
 
-#: src/rps/gnunet-rps.c:258
+#: src/rps/gnunet-rps.c:260
 msgid "Seed a PeerID"
 msgstr ""
 
-#: src/rps/gnunet-rps.c:262
+#: src/rps/gnunet-rps.c:264
 msgid "Get updates of view (0 for infinite updates)"
 msgstr ""
 
-#: src/rps/gnunet-rps.c:266
+#: src/rps/gnunet-rps.c:268
 msgid "Get peers from biased stream"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2770
+#: src/rps/gnunet-rps-profiler.c:2959
 msgid "duration of the profiling"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2776
+#: src/rps/gnunet-rps-profiler.c:2965
 msgid "timeout for the profiling"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2782
+#: src/rps/gnunet-rps-profiler.c:2971
 msgid "number of PeerIDs to request"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2797
+#: src/rps/gnunet-rps-profiler.c:2986
 msgid "Measure quality and performance of the RPS service."
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:218
+#: src/scalarproduct/gnunet-scalarproduct.c:220
 msgid "You must specify at least one message ID to check!\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:225
+#: src/scalarproduct/gnunet-scalarproduct.c:227
 msgid "This program needs a session identifier for comparing vectors.\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:238
+#: src/scalarproduct/gnunet-scalarproduct.c:240
 #, c-format
 msgid ""
 "Tried to set initiator mode, as peer ID was given. However, `%s' is not a "
 "valid peer identifier.\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:256
+#: src/scalarproduct/gnunet-scalarproduct.c:258
 msgid "Need elements to compute the scalarproduct, got none.\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:278
+#: src/scalarproduct/gnunet-scalarproduct.c:280
 #, c-format
 msgid "Malformed input, could not parse `%s'\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:296
+#: src/scalarproduct/gnunet-scalarproduct.c:298
 #, c-format
 msgid "Could not convert `%s' to int64_t.\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:323
+#: src/scalarproduct/gnunet-scalarproduct.c:325
 #, c-format
 msgid "Failed to initiate computation, were all keys unique?\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:349
-#: src/scalarproduct/gnunet-scalarproduct.c:355
+#: src/scalarproduct/gnunet-scalarproduct.c:351
+#: src/scalarproduct/gnunet-scalarproduct.c:357
 msgid ""
 "A comma separated list of elements to compare as vector with our remote peer."
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:361
+#: src/scalarproduct/gnunet-scalarproduct.c:363
 msgid ""
 "[Optional] peer to calculate our scalarproduct with. If this parameter is "
 "not given, the service will wait for a remote peer to compute the request."
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:367
+#: src/scalarproduct/gnunet-scalarproduct.c:369
 msgid "Transaction ID shared with peer."
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:377
+#: src/scalarproduct/gnunet-scalarproduct.c:379
 msgid "Calculate the Vectorproduct with a GNUnet peer."
 msgstr ""
 
-#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1399
-#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1343
-#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1170
-#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1061
+#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1401
+#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1345
+#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1172
+#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1063
 msgid "Connect to CADET failed\n"
 msgstr ""
 
-#: src/scalarproduct/scalarproduct_api.c:183
+#: src/scalarproduct/scalarproduct_api.c:185
 msgid "Keys given to SCALARPRODUCT not unique!\n"
 msgstr ""
 
-#: src/secretsharing/gnunet-secretsharing-profiler.c:614
+#: src/secretsharing/gnunet-secretsharing-profiler.c:616
 msgid "dkg start delay"
 msgstr ""
 
-#: src/secretsharing/gnunet-secretsharing-profiler.c:620
+#: src/secretsharing/gnunet-secretsharing-profiler.c:622
 msgid "dkg timeout"
 msgstr ""
 
-#: src/secretsharing/gnunet-secretsharing-profiler.c:626
+#: src/secretsharing/gnunet-secretsharing-profiler.c:628
 msgid "threshold"
 msgstr ""
 
-#: src/secretsharing/gnunet-secretsharing-profiler.c:631
+#: src/secretsharing/gnunet-secretsharing-profiler.c:633
 msgid "also profile decryption"
 msgstr ""
 
-#: src/set/gnunet-service-set.c:2004
+#: src/set/gnunet-service-set.c:2005
 msgid "Could not connect to CADET service\n"
 msgstr ""
 
-#: src/set/gnunet-set-ibf-profiler.c:250
+#: src/set/gnunet-set-ibf-profiler.c:252
 msgid "number of element in set A-B"
 msgstr ""
 
-#: src/set/gnunet-set-ibf-profiler.c:256
+#: src/set/gnunet-set-ibf-profiler.c:258
 msgid "number of element in set B-A"
 msgstr ""
 
-#: src/set/gnunet-set-ibf-profiler.c:262
+#: src/set/gnunet-set-ibf-profiler.c:264
 msgid "number of common elements in A and B"
 msgstr ""
 
-#: src/set/gnunet-set-ibf-profiler.c:268
+#: src/set/gnunet-set-ibf-profiler.c:270
 msgid "hash num"
 msgstr ""
 
-#: src/set/gnunet-set-ibf-profiler.c:274
+#: src/set/gnunet-set-ibf-profiler.c:276
 msgid "ibf size"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:442
+#: src/set/gnunet-set-profiler.c:444
 msgid "use byzantine mode"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:448
+#: src/set/gnunet-set-profiler.c:450
 msgid "force sending full set"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:454
+#: src/set/gnunet-set-profiler.c:456
 msgid "number delta operation"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:466
+#: src/set/gnunet-set-profiler.c:468
 msgid "operation to execute"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:472
+#: src/set/gnunet-set-profiler.c:474
 msgid "element size"
 msgstr ""
 
-#: src/social/gnunet-social.c:1164
-msgid "--place missing or invalid.\n"
-msgstr ""
-
-#: src/social/gnunet-social.c:1215
-msgid "assign --name in state to --data"
-msgstr ""
-
-#: src/social/gnunet-social.c:1220
-msgid "say good-bye and leave somebody else's place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1225
-msgid "create a place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1230
-msgid "destroy a place we were hosting"
-msgstr ""
-
-#: src/social/gnunet-social.c:1235
-msgid "enter somebody else's place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1241
-msgid "find state matching name prefix"
-msgstr ""
-
-#: src/social/gnunet-social.c:1246
-msgid "replay history of messages up to the given --limit"
-msgstr ""
-
-#: src/social/gnunet-social.c:1251
-msgid "reconnect to a previously created place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1256
-msgid "publish something to a place we are hosting"
-msgstr ""
-
-#: src/social/gnunet-social.c:1261
-msgid "reconnect to a previously entered place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1266
-msgid "search for state matching exact name"
-msgstr ""
-
-#: src/social/gnunet-social.c:1271
-msgid "submit something to somebody's place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1276
-msgid "list of egos and subscribed places"
-msgstr ""
-
-#: src/social/gnunet-social.c:1281
-msgid "extract and replay history between message IDs --start and --until"
-msgstr ""
-
-#: src/social/gnunet-social.c:1290
-msgid "application ID to use when connecting"
-msgstr ""
-
-#: src/social/gnunet-social.c:1296
-msgid "message body or state value"
-msgstr ""
-
-#: src/social/gnunet-social.c:1302
-msgid "name or public key of ego"
-msgstr ""
-
-#: src/social/gnunet-social.c:1307
-msgid "wait for incoming messages"
-msgstr ""
-
-#: src/social/gnunet-social.c:1313
-msgid "GNS name"
-msgstr ""
-
-#: src/social/gnunet-social.c:1319
-msgid "peer ID for --guest-enter"
-msgstr ""
-
-#: src/social/gnunet-social.c:1325
-msgid "name (key) to query from state"
-msgstr ""
-
-#: src/social/gnunet-social.c:1331
-msgid "method name"
-msgstr ""
-
-#: src/social/gnunet-social.c:1337
-msgid "number of messages to replay from history"
-msgstr ""
-
-#: src/social/gnunet-social.c:1343
-msgid "key address of place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1349
-msgid "start message ID for history replay"
-msgstr ""
-
-#: src/social/gnunet-social.c:1354
-msgid "respond to entry requests by admitting all guests"
-msgstr ""
-
-#: src/social/gnunet-social.c:1360
-msgid "end message ID for history replay"
-msgstr ""
-
-#: src/social/gnunet-social.c:1365
-msgid "respond to entry requests by refusing all guests"
-msgstr ""
-
-#: src/social/gnunet-social.c:1375
-msgid ""
-"gnunet-social - Interact with the social service: enter/leave, send/receive "
-"messages, access history and state.\n"
-msgstr ""
-
-#: src/sq/sq.c:52
+#: src/sq/sq.c:54
 #, c-format
 msgid "Failure to bind %u-th SQL parameter\n"
 msgstr ""
 
-#: src/sq/sq.c:59
+#: src/sq/sq.c:61
 msgid "Failure in sqlite3_reset (!)\n"
 msgstr ""
 
-#: src/sq/sq.c:137
+#: src/sq/sq.c:139
 #, c-format
 msgid "Failed to reset sqlite statement with error: %s\n"
 msgstr ""
 
-#: src/statistics/gnunet-service-statistics.c:336
+#: src/statistics/gnunet-service-statistics.c:338
 #, c-format
 msgid "Wrote %llu bytes of statistics to `%s'\n"
 msgstr ""
 
-#: src/statistics/gnunet-service-statistics.c:1084
+#: src/statistics/gnunet-service-statistics.c:1086
 #, c-format
 msgid "Loading %llu bytes of statistics from `%s'\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:407
-#: src/statistics/gnunet-statistics.c:448
+#: src/statistics/gnunet-statistics.c:409
+#: src/statistics/gnunet-statistics.c:450
 msgid "Failed to obtain statistics.\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:410
-#: src/statistics/gnunet-statistics.c:451
+#: src/statistics/gnunet-statistics.c:412
+#: src/statistics/gnunet-statistics.c:453
 #, c-format
 msgid "Failed to obtain statistics from host `%s:%llu'\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:526
+#: src/statistics/gnunet-statistics.c:528
 msgid "Missing argument: subsystem \n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:534
+#: src/statistics/gnunet-statistics.c:536
 msgid "Missing argument: name\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:577
+#: src/statistics/gnunet-statistics.c:579
 #, c-format
 msgid "No subsystem or name given\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:592
+#: src/statistics/gnunet-statistics.c:594
 #, c-format
 msgid "Failed to initialize watch routine\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:727
+#: src/statistics/gnunet-statistics.c:729
 #, c-format
 msgid "Invalid argument `%s'\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:745
+#: src/statistics/gnunet-statistics.c:747
 #, c-format
 msgid "A port is required to connect to host `%s'\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:753
+#: src/statistics/gnunet-statistics.c:755
 #, c-format
 msgid "A port has to be between 1 and 65535 to connect to host `%s'\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:784
+#: src/statistics/gnunet-statistics.c:786
 #, c-format
 msgid "Not able to watch testbed nodes (yet - feel free to implement)\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:817
+#: src/statistics/gnunet-statistics.c:819
 msgid "limit output to statistics for the given NAME"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:822
+#: src/statistics/gnunet-statistics.c:824
 msgid "make the value being set persistent"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:828
+#: src/statistics/gnunet-statistics.c:830
 msgid "limit output to the given SUBSYSTEM"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:834
+#: src/statistics/gnunet-statistics.c:836
 msgid "use as csv separator"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:840
+#: src/statistics/gnunet-statistics.c:842
 msgid "path to the folder containing the testbed data"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:845
+#: src/statistics/gnunet-statistics.c:847
 msgid "just print the statistics value"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:850
+#: src/statistics/gnunet-statistics.c:852
 msgid "watch value continuously"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:856
+#: src/statistics/gnunet-statistics.c:858
 msgid "connect to remote host"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:862
+#: src/statistics/gnunet-statistics.c:864
 msgid "port for remote host"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:879
+#: src/statistics/gnunet-statistics.c:881
 msgid "Print statistics about GNUnet operations."
 msgstr ""
 
-#: src/statistics/statistics_api.c:751
+#: src/statistics/statistics_api.c:753
 msgid "Could not save some persistent statistics\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:223
+#: src/testbed/generate-underlay-topology.c:225
 msgid "Need at least 2 arguments\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:228
+#: src/testbed/generate-underlay-topology.c:230
 msgid "Database filename missing\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:235
+#: src/testbed/generate-underlay-topology.c:237
 msgid "Topology string missing\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:240
+#: src/testbed/generate-underlay-topology.c:242
 #, c-format
 msgid "Invalid topology: %s\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:253
+#: src/testbed/generate-underlay-topology.c:255
 #, c-format
 msgid "An argument is missing for given topology `%s'\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:259
+#: src/testbed/generate-underlay-topology.c:261
 #, c-format
 msgid "Invalid argument `%s' given as topology argument\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:267
+#: src/testbed/generate-underlay-topology.c:269
 #, c-format
 msgid "Filename argument missing for topology `%s'\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:281
+#: src/testbed/generate-underlay-topology.c:283
 #, c-format
 msgid "Second argument for topology `%s' is missing\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:287
+#: src/testbed/generate-underlay-topology.c:289
 #, c-format
 msgid "Invalid argument `%s'; expecting unsigned int\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:340
-#: src/testbed/gnunet-testbed-profiler.c:281
+#: src/testbed/generate-underlay-topology.c:342
+#: src/testbed/gnunet-testbed-profiler.c:283
 msgid "create COUNT number of peers"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:350
+#: src/testbed/generate-underlay-topology.c:352
 msgid ""
 "Generates SQLite3 database representing a given underlay topology.\n"
 "Usage: gnunet-underlay-topology [OPTIONS] db-filename TOPO [TOPOOPTS]\n"
@@ -6422,83 +6236,83 @@ msgid ""
 "content/topology-file-format\n"
 msgstr ""
 
-#: src/testbed/gnunet-daemon-latency-logger.c:313
+#: src/testbed/gnunet-daemon-latency-logger.c:315
 msgid "Daemon to log latency values of connections to neighbours"
 msgstr ""
 
-#: src/testbed/gnunet-daemon-testbed-blacklist.c:247
+#: src/testbed/gnunet-daemon-testbed-blacklist.c:249
 msgid ""
 "Daemon to restrict incoming transport layer connections during testbed "
 "deployments"
 msgstr ""
 
-#: src/testbed/gnunet-daemon-testbed-underlay.c:231 src/testing/list-keys.c:46
-#: src/testing/testing.c:286 src/util/gnunet-ecc.c:310
+#: src/testbed/gnunet-daemon-testbed-underlay.c:233 src/testing/list-keys.c:46
+#: src/testing/testing.c:288 src/util/gnunet-ecc.c:312
 #, c-format
 msgid "Incorrect hostkey file format: %s\n"
 msgstr ""
 
-#: src/testbed/gnunet-daemon-testbed-underlay.c:469
+#: src/testbed/gnunet-daemon-testbed-underlay.c:471
 msgid "Daemon to restrict underlay network in testbed deployments"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_cpustatus.c:726
+#: src/testbed/gnunet-service-testbed_cpustatus.c:728
 #, c-format
 msgid ""
 "Cannot open %s for writing load statistics.  Not logging load statistics\n"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1157
+#: src/testbed/gnunet-service-testbed_peers.c:1159
 #, c-format
 msgid "%s is stopped"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1159
+#: src/testbed/gnunet-service-testbed_peers.c:1161
 #, c-format
 msgid "%s is starting"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1161
+#: src/testbed/gnunet-service-testbed_peers.c:1163
 #, c-format
 msgid "%s is stopping"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1163
+#: src/testbed/gnunet-service-testbed_peers.c:1165
 #, c-format
 msgid "%s is starting already"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1165
+#: src/testbed/gnunet-service-testbed_peers.c:1167
 #, c-format
 msgid "%s is stopping already"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1167
+#: src/testbed/gnunet-service-testbed_peers.c:1169
 #, c-format
 msgid "%s is started already"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1169
+#: src/testbed/gnunet-service-testbed_peers.c:1171
 #, c-format
 msgid "%s is stopped already"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1171
+#: src/testbed/gnunet-service-testbed_peers.c:1173
 #, c-format
 msgid "%s service is not known to ARM"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1173
+#: src/testbed/gnunet-service-testbed_peers.c:1175
 #, c-format
 msgid "%s service failed to start"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1175
+#: src/testbed/gnunet-service-testbed_peers.c:1177
 #, c-format
 msgid "%s service can't be started because ARM is shutting down"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1177
+#: src/testbed/gnunet-service-testbed_peers.c:1179
 #, c-format
 msgid "%.s Unknown result code."
 msgstr ""
@@ -6512,173 +6326,173 @@ msgstr ""
 msgid "Spawning process `%s'\n"
 msgstr ""
 
-#: src/testbed/gnunet-testbed-profiler.c:287
+#: src/testbed/gnunet-testbed-profiler.c:289
 msgid "tolerate COUNT number of continious timeout failures"
 msgstr ""
 
-#: src/testbed/gnunet-testbed-profiler.c:292
+#: src/testbed/gnunet-testbed-profiler.c:294
 msgid ""
 "run profiler in non-interactive mode where upon testbed setup the profiler "
 "does not wait for a keystroke but continues to run until a termination "
 "signal is received"
 msgstr ""
 
-#: src/testbed/testbed_api.c:408
+#: src/testbed/testbed_api.c:410
 #, c-format
 msgid "Adding host %u failed with error: %s\n"
 msgstr ""
 
-#: src/testbed/testbed_api_hosts.c:411
+#: src/testbed/testbed_api_hosts.c:413
 #, c-format
 msgid "Hosts file %s not found\n"
 msgstr ""
 
-#: src/testbed/testbed_api_hosts.c:419
+#: src/testbed/testbed_api_hosts.c:421
 #, c-format
 msgid "Hosts file %s has no data\n"
 msgstr ""
 
-#: src/testbed/testbed_api_hosts.c:426
+#: src/testbed/testbed_api_hosts.c:428
 #, c-format
 msgid "Hosts file %s cannot be read\n"
 msgstr ""
 
-#: src/testbed/testbed_api_hosts.c:567
+#: src/testbed/testbed_api_hosts.c:569
 #, c-format
 msgid "The function %s is only available when compiled with (--with-ll)\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:816
+#: src/testbed/testbed_api_testbed.c:818
 msgid "Linking controllers failed. Exiting"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:984
+#: src/testbed/testbed_api_testbed.c:986
 #, c-format
 msgid "Host registration failed for a host. Error: %s\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1050
+#: src/testbed/testbed_api_testbed.c:1052
 msgid "Controller crash detected. Shutting down.\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1139
+#: src/testbed/testbed_api_testbed.c:1141
 #, c-format
 msgid "Host %s cannot start testbed\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1143
+#: src/testbed/testbed_api_testbed.c:1145
 msgid "Testbed cannot be started on localhost\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1181
+#: src/testbed/testbed_api_testbed.c:1183
 msgid "Cannot start the master controller"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1199
+#: src/testbed/testbed_api_testbed.c:1201
 msgid "Shutting down testbed due to timeout while setup.\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1259
+#: src/testbed/testbed_api_testbed.c:1261
 msgid "No hosts loaded from LoadLeveler. Need at least one host\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1271
+#: src/testbed/testbed_api_testbed.c:1273
 msgid "No hosts loaded. Need at least one host\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1295
+#: src/testbed/testbed_api_testbed.c:1297
 msgid "Specified topology must be supported by testbed"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1345
+#: src/testbed/testbed_api_testbed.c:1347
 #, c-format
 msgid ""
 "Maximum number of edges a peer can have in a scale free topology cannot be "
 "more than %u.  Given `%s = %llu'"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1361
+#: src/testbed/testbed_api_testbed.c:1363
 #, c-format
 msgid ""
 "The number of edges that can established when adding a new node to scale "
 "free topology cannot be more than %u.  Given `%s = %llu'"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1026
+#: src/testbed/testbed_api_topology.c:1028
 #, c-format
 msgid "Topology file %s not found\n"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1034
+#: src/testbed/testbed_api_topology.c:1036
 #, c-format
 msgid "Topology file %s has no data\n"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1042
+#: src/testbed/testbed_api_topology.c:1044
 #, c-format
 msgid "Topology file %s cannot be read\n"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1064
+#: src/testbed/testbed_api_topology.c:1066
 #, c-format
 msgid "Failed to read peer index from toology file: %s"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1073
-#: src/testbed/testbed_api_topology.c:1097
+#: src/testbed/testbed_api_topology.c:1075
+#: src/testbed/testbed_api_topology.c:1099
 #, c-format
 msgid "Value in given topology file: %s out of range\n"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1079
-#: src/testbed/testbed_api_topology.c:1103
+#: src/testbed/testbed_api_topology.c:1081
+#: src/testbed/testbed_api_topology.c:1105
 #, c-format
 msgid "Failed to read peer index from topology file: %s"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1085
-#: src/testbed/testbed_api_topology.c:1109
+#: src/testbed/testbed_api_topology.c:1087
+#: src/testbed/testbed_api_topology.c:1111
 msgid "Topology file needs more peers than given ones\n"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1143
+#: src/testbed/testbed_api_topology.c:1145
 #, c-format
 msgid "Ignoring to connect peer %u to peer %u\n"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:171
+#: src/testing/gnunet-testing.c:173
 #, c-format
 msgid "Could not extract hostkey %u (offset too large?)\n"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:251
+#: src/testing/gnunet-testing.c:253
 #, c-format
 msgid "Unknown command, use 'q' to quit or 'r' to restart peer\n"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:352
+#: src/testing/gnunet-testing.c:354
 msgid "create unique configuration files"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:357
+#: src/testing/gnunet-testing.c:359
 msgid "extract hostkey file from pre-computed hostkey list"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:363
+#: src/testing/gnunet-testing.c:365
 msgid ""
 "number of unique configuration files to create, or number of the hostkey to "
 "extract"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:370
+#: src/testing/gnunet-testing.c:372
 msgid "configuration template"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:376
+#: src/testing/gnunet-testing.c:378
 msgid "run the given service, wait on stdin for 'r' (restart) or 'q' (quit)"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:389
+#: src/testing/gnunet-testing.c:391
 msgid "Command line tool to access the testing library"
 msgstr ""
 
@@ -6686,1496 +6500,1520 @@ msgstr ""
 msgid "list COUNT number of keys"
 msgstr ""
 
-#: src/testing/testing.c:270
+#: src/testing/testing.c:272
 #, c-format
 msgid "Hostkeys file not found: %s\n"
 msgstr ""
 
-#: src/testing/testing.c:713
+#: src/testing/testing.c:715
 #, c-format
 msgid "Key number %u does not exist\n"
 msgstr ""
 
-#: src/testing/testing.c:1157
+#: src/testing/testing.c:1159
 #, c-format
 msgid ""
 "You attempted to create a testbed with more than %u hosts.  Please "
 "precompute more hostkeys first.\n"
 msgstr ""
 
-#: src/testing/testing.c:1166
+#: src/testing/testing.c:1168
 #, c-format
 msgid "Failed to initialize hostkey for peer %u\n"
 msgstr ""
 
-#: src/testing/testing.c:1176
+#: src/testing/testing.c:1178
 msgid "PRIVATE_KEY option in PEER section missing in configuration\n"
 msgstr ""
 
-#: src/testing/testing.c:1189
+#: src/testing/testing.c:1191
 msgid "Failed to create configuration for peer (not enough free ports?)\n"
 msgstr ""
 
-#: src/testing/testing.c:1203
+#: src/testing/testing.c:1205
 #, c-format
 msgid "Cannot open hostkey file `%s': %s\n"
 msgstr ""
 
-#: src/testing/testing.c:1215
+#: src/testing/testing.c:1217
 #, c-format
 msgid "Failed to write hostkey file for peer %u: %s\n"
 msgstr ""
 
-#: src/testing/testing.c:1240
+#: src/testing/testing.c:1242
 #, c-format
 msgid "Failed to write configuration file `%s' for peer %u: %s\n"
 msgstr ""
 
-#: src/testing/testing.c:1342
+#: src/testing/testing.c:1344
 #, c-format
 msgid "Failed to start `%s': %s\n"
 msgstr ""
 
-#: src/testing/testing.c:1645
+#: src/testing/testing.c:1647
 #, c-format
 msgid "Failed to load configuration from %s\n"
 msgstr ""
 
-#: src/topology/friends.c:124
+#: src/topology/friends.c:126
 #, c-format
 msgid "Syntax error in FRIENDS file at offset %llu, skipping bytes `%.*s'.\n"
 msgstr ""
 
-#: src/topology/friends.c:178
+#: src/topology/friends.c:180
 #, c-format
 msgid "Directory for file `%s' does not seem to be writable.\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:228
+#: src/topology/gnunet-daemon-topology.c:230
 msgid "# peers blacklisted"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:342
+#: src/topology/gnunet-daemon-topology.c:344
 msgid "# connect requests issued to ATS"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:536
+#: src/topology/gnunet-daemon-topology.c:538
 msgid "# HELLO messages gossipped"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:638
-#: src/topology/gnunet-daemon-topology.c:724
+#: src/topology/gnunet-daemon-topology.c:640
+#: src/topology/gnunet-daemon-topology.c:726
 msgid "# friends connected"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:921
+#: src/topology/gnunet-daemon-topology.c:923
 msgid "Failed to connect to core service, can not manage topology!\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:954
+#: src/topology/gnunet-daemon-topology.c:956
 #, c-format
 msgid "Found myself `%s' in friend list (useless, ignored)\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:961
+#: src/topology/gnunet-daemon-topology.c:963
 #, c-format
 msgid "Found friend `%s' in configuration\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:983
+#: src/topology/gnunet-daemon-topology.c:985
 msgid "Encountered errors parsing friends list!\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:986
+#: src/topology/gnunet-daemon-topology.c:988
 msgid "# friends in configuration"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:993
+#: src/topology/gnunet-daemon-topology.c:995
 msgid ""
 "Fewer friends specified than required by minimum friend count. Will only "
 "connect to friends.\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:999
+#: src/topology/gnunet-daemon-topology.c:1001
 msgid ""
 "More friendly connections required than target total number of connections.\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:1052
-#: src/transport/plugin_transport_wlan.c:1515
+#: src/topology/gnunet-daemon-topology.c:1054
+#: src/transport/plugin_transport_wlan.c:1517
 msgid "# HELLO messages received"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:1230
+#: src/topology/gnunet-daemon-topology.c:1233
 msgid "GNUnet topology control"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_ats.c:139
+#: src/transport/gnunet-communicator-tcp.c:2329
+#: src/transport/gnunet-communicator-udp.c:2883
+#: src/transport/gnunet-service-tng.c:4679
+#: src/transport/gnunet-service-transport.c:2782
+msgid "Transport service is lacking key configuration settings. Exiting.\n"
+msgstr ""
+
+#: src/transport/gnunet-communicator-tcp.c:2393
+msgid "GNUnet TCP communicator"
+msgstr ""
+
+#: src/transport/gnunet-communicator-udp.c:2954
+msgid "GNUnet UDP communicator"
+msgstr ""
+
+#: src/transport/gnunet-communicator-unix.c:802
+msgid ""
+"Maximum number of UNIX connections exceeded, dropping incoming message\n"
+msgstr ""
+
+#: src/transport/gnunet-communicator-unix.c:1073
+#: src/transport/plugin_transport_unix.c:1403
+#, c-format
+msgid "Cannot create path to `%s'\n"
+msgstr ""
+
+#: src/transport/gnunet-communicator-unix.c:1162
+msgid "GNUnet UNIX domain socket communicator"
+msgstr ""
+
+#: src/transport/gnunet-service-transport_ats.c:141
 msgid "# Addresses given to ATS"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:446
+#: src/transport/gnunet-service-transport.c:448
 msgid "# messages dropped due to slow client"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:816
+#: src/transport/gnunet-service-transport.c:817
 msgid "# bytes payload dropped (other peer was not connected)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:1549
+#: src/transport/gnunet-service-transport.c:1550
 msgid "# bytes payload discarded due to not connected peer"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:1709
+#: src/transport/gnunet-service-transport.c:1710
 msgid "# bytes total received"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:1806
+#: src/transport/gnunet-service-transport.c:1807
 msgid "# bytes payload received"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:2123
-#: src/transport/gnunet-service-transport.c:2595
+#: src/transport/gnunet-service-transport.c:2124
+#: src/transport/gnunet-service-transport.c:2596
 msgid "# disconnects due to blacklist"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:2599
+#: src/transport/gnunet-service-transport.c:2600
 #, c-format
 msgid "Disallowing connection to peer `%s' on transport %s\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:2707
+#: src/transport/gnunet-service-transport.c:2708
 #, c-format
 msgid "Adding blacklisting entry for peer `%s'\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:2716
+#: src/transport/gnunet-service-transport.c:2717
 #, c-format
 msgid "Adding blacklisting entry for peer `%s':`%s'\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:2781
-msgid "Transport service is lacking key configuration settings. Exiting.\n"
-msgstr ""
-
-#: src/transport/gnunet-service-transport_hello.c:193
+#: src/transport/gnunet-service-transport_hello.c:195
 msgid "# refreshed my HELLO"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:804
+#: src/transport/gnunet-service-transport_neighbours.c:805
 msgid "# session creation failed"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1051
+#: src/transport/gnunet-service-transport_neighbours.c:1052
 msgid "# DISCONNECT messages sent"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1174
+#: src/transport/gnunet-service-transport_neighbours.c:1175
 msgid "# disconnects due to quota of 0"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1322
-#: src/transport/gnunet-service-transport_neighbours.c:1783
+#: src/transport/gnunet-service-transport_neighbours.c:1323
+#: src/transport/gnunet-service-transport_neighbours.c:1784
 msgid "# bytes in message queue for other peers"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1327
+#: src/transport/gnunet-service-transport_neighbours.c:1328
 msgid "# messages transmitted to other peers"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1333
+#: src/transport/gnunet-service-transport_neighbours.c:1334
 msgid "# transmission failures for messages to other peers"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1393
+#: src/transport/gnunet-service-transport_neighbours.c:1394
 msgid "# messages timed out while in transport queue"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1477
+#: src/transport/gnunet-service-transport_neighbours.c:1478
 msgid "# KEEPALIVES sent"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1513
+#: src/transport/gnunet-service-transport_neighbours.c:1514
 msgid "# KEEPALIVE messages discarded (peer unknown)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1521
+#: src/transport/gnunet-service-transport_neighbours.c:1522
 msgid "# KEEPALIVE messages discarded (no session)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1531
+#: src/transport/gnunet-service-transport_neighbours.c:1532
 msgid "# KEEPALIVES received in good order"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1576
+#: src/transport/gnunet-service-transport_neighbours.c:1577
 msgid "# KEEPALIVE_RESPONSEs discarded (not connected)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1585
+#: src/transport/gnunet-service-transport_neighbours.c:1586
 msgid "# KEEPALIVE_RESPONSEs discarded (not expected)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1593
+#: src/transport/gnunet-service-transport_neighbours.c:1594
 msgid "# KEEPALIVE_RESPONSEs discarded (address changed)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1602
+#: src/transport/gnunet-service-transport_neighbours.c:1603
 msgid "# KEEPALIVE_RESPONSEs discarded (no nonce)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1607
+#: src/transport/gnunet-service-transport_neighbours.c:1608
 msgid "# KEEPALIVE_RESPONSEs discarded (bad nonce)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1613
+#: src/transport/gnunet-service-transport_neighbours.c:1614
 msgid "# KEEPALIVE_RESPONSEs received (OK)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1680
+#: src/transport/gnunet-service-transport_neighbours.c:1681
 msgid "# messages discarded due to lack of neighbour record"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1714
+#: src/transport/gnunet-service-transport_neighbours.c:1715
 msgid "# bandwidth quota violations by other peers"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1729
+#: src/transport/gnunet-service-transport_neighbours.c:1730
 msgid "# ms throttling suggested"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1852
+#: src/transport/gnunet-service-transport_neighbours.c:1853
 #, c-format
 msgid "Failed to send SYN message to peer `%s'\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1872
+#: src/transport/gnunet-service-transport_neighbours.c:1873
 msgid "# Failed attempts to switch addresses (failed to send SYN CONT)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1911
+#: src/transport/gnunet-service-transport_neighbours.c:1912
 #, fuzzy
 msgid "# SYN messages sent"
 msgstr "# messaggi PONG decrittati"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1928
+#: src/transport/gnunet-service-transport_neighbours.c:1929
 #, c-format
 msgid "Failed to transmit SYN message to %s\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1958
+#: src/transport/gnunet-service-transport_neighbours.c:1959
 msgid "# Failed attempts to switch addresses (failed to send SYN)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:2026
+#: src/transport/gnunet-service-transport_neighbours.c:2027
 #, c-format
 msgid "Failed to send SYN_ACK message to peer `%s' using address `%s'\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:2080
+#: src/transport/gnunet-service-transport_neighbours.c:2081
 #, fuzzy
 msgid "# SYN_ACK messages sent"
 msgstr "# messaggi PONG decrittati"
 
-#: src/transport/gnunet-service-transport_neighbours.c:2097
+#: src/transport/gnunet-service-transport_neighbours.c:2098
 #, c-format
 msgid "Failed to transmit SYN_ACK message to %s\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:2260
+#: src/transport/gnunet-service-transport_neighbours.c:2261
 #, fuzzy
 msgid "# SYN messages received"
 msgstr "# messaggi PONG ricevuti"
 
-#: src/transport/gnunet-service-transport_neighbours.c:2265
+#: src/transport/gnunet-service-transport_neighbours.c:2266
 #, c-format
 msgid "SYN request from peer `%s' ignored due impending shutdown\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:2652
+#: src/transport/gnunet-service-transport_neighbours.c:2653
 msgid "# Attempts to switch addresses"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3137
+#: src/transport/gnunet-service-transport_neighbours.c:3138
 #, fuzzy
 msgid "# SYN_ACK messages received"
 msgstr "# messaggi PONG ricevuti"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3145
+#: src/transport/gnunet-service-transport_neighbours.c:3146
 msgid "# unexpected SYN_ACK messages (no peer)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3163
-#: src/transport/gnunet-service-transport_neighbours.c:3187
+#: src/transport/gnunet-service-transport_neighbours.c:3164
+#: src/transport/gnunet-service-transport_neighbours.c:3188
 msgid "# unexpected SYN_ACK messages (not ready)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3199
+#: src/transport/gnunet-service-transport_neighbours.c:3200
 msgid "# unexpected SYN_ACK messages (waiting on ATS)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3224
+#: src/transport/gnunet-service-transport_neighbours.c:3225
 msgid "# Successful attempts to switch addresses"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3237
+#: src/transport/gnunet-service-transport_neighbours.c:3238
 msgid "# unexpected SYN_ACK messages (disconnecting)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3410
+#: src/transport/gnunet-service-transport_neighbours.c:3411
 #, fuzzy
 msgid "# ACK messages received"
 msgstr "# messaggi PONG ricevuti"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3446
+#: src/transport/gnunet-service-transport_neighbours.c:3447
 msgid "# unexpected ACK messages"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3534
+#: src/transport/gnunet-service-transport_neighbours.c:3535
 msgid "# quota messages ignored (malformed)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3541
+#: src/transport/gnunet-service-transport_neighbours.c:3542
 #, fuzzy
 msgid "# QUOTA messages received"
 msgstr "# messaggi PONG ricevuti"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3581
+#: src/transport/gnunet-service-transport_neighbours.c:3582
 msgid "# disconnect messages ignored (malformed)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3588
+#: src/transport/gnunet-service-transport_neighbours.c:3589
 msgid "# DISCONNECT messages received"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3599
+#: src/transport/gnunet-service-transport_neighbours.c:3600
 msgid "# disconnect messages ignored (timestamp)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3734
+#: src/transport/gnunet-service-transport_neighbours.c:3735
 msgid "# disconnected from peer upon explicit request"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_plugins.c:156
+#: src/transport/gnunet-service-transport_plugins.c:158
 msgid "Transport service is lacking NEIGHBOUR_LIMIT option.\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_plugins.c:221
-#: src/transport/gnunet-service-transport_plugins.c:229
-#: src/transport/gnunet-service-transport_plugins.c:237
-#: src/transport/gnunet-service-transport_plugins.c:245
-#: src/transport/gnunet-service-transport_plugins.c:253
-#: src/transport/gnunet-service-transport_plugins.c:261
-#: src/transport/gnunet-service-transport_plugins.c:269
-#: src/transport/gnunet-service-transport_plugins.c:277
-#: src/transport/gnunet-service-transport_plugins.c:285
-#: src/transport/gnunet-service-transport_plugins.c:293
-#: src/transport/gnunet-service-transport_plugins.c:301
+#: src/transport/gnunet-service-transport_plugins.c:223
+#: src/transport/gnunet-service-transport_plugins.c:231
+#: src/transport/gnunet-service-transport_plugins.c:239
+#: src/transport/gnunet-service-transport_plugins.c:247
+#: src/transport/gnunet-service-transport_plugins.c:255
+#: src/transport/gnunet-service-transport_plugins.c:263
+#: src/transport/gnunet-service-transport_plugins.c:271
+#: src/transport/gnunet-service-transport_plugins.c:279
+#: src/transport/gnunet-service-transport_plugins.c:287
+#: src/transport/gnunet-service-transport_plugins.c:295
+#: src/transport/gnunet-service-transport_plugins.c:303
 #, c-format
 msgid "Missing function `%s' in transport plugin for `%s'\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_plugins.c:308
+#: src/transport/gnunet-service-transport_plugins.c:310
 #, c-format
 msgid "Did not load plugin `%s' due to missing functions\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:386
+#: src/transport/gnunet-service-transport_validation.c:388
 msgid "# Addresses in validation map"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:489
-#: src/transport/gnunet-service-transport_validation.c:675
-#: src/transport/gnunet-service-transport_validation.c:995
-#: src/transport/gnunet-service-transport_validation.c:1607
+#: src/transport/gnunet-service-transport_validation.c:491
+#: src/transport/gnunet-service-transport_validation.c:677
+#: src/transport/gnunet-service-transport_validation.c:997
+#: src/transport/gnunet-service-transport_validation.c:1609
 msgid "# validations running"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:530
+#: src/transport/gnunet-service-transport_validation.c:532
 msgid "# address records discarded (timeout)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:578
+#: src/transport/gnunet-service-transport_validation.c:580
 msgid "# address records discarded (blacklist)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:666
+#: src/transport/gnunet-service-transport_validation.c:668
 msgid "# PINGs for address validation sent"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:746
+#: src/transport/gnunet-service-transport_validation.c:748
 msgid "# validations delayed by global throttle"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:783
+#: src/transport/gnunet-service-transport_validation.c:785
 msgid "# address revalidations started"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1121
+#: src/transport/gnunet-service-transport_validation.c:1123
 msgid "# PING message for different peer received"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1172
+#: src/transport/gnunet-service-transport_validation.c:1174
 #, c-format
 msgid "Plugin `%s' not available, cannot confirm having this address\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1185
+#: src/transport/gnunet-service-transport_validation.c:1187
 msgid "# failed address checks during validation"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1188
+#: src/transport/gnunet-service-transport_validation.c:1190
 #, c-format
 msgid "Address `%s' is not one of my addresses, not confirming PING\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1196
+#: src/transport/gnunet-service-transport_validation.c:1198
 msgid "# successful address checks during validation"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1209
+#: src/transport/gnunet-service-transport_validation.c:1211
 #, c-format
 msgid ""
 "Not confirming PING from peer `%s' with address `%s' since I cannot confirm "
 "having this address.\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1264
+#: src/transport/gnunet-service-transport_validation.c:1266
 #, c-format
 msgid "Failed to create PONG signature for peer `%s'\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1315
+#: src/transport/gnunet-service-transport_validation.c:1317
 msgid "# PONGs unicast via reliable transport"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1324
+#: src/transport/gnunet-service-transport_validation.c:1326
 msgid "# PONGs multicast to all available addresses"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1497
+#: src/transport/gnunet-service-transport_validation.c:1499
 msgid "# PONGs dropped, no matching pending validation"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1515
+#: src/transport/gnunet-service-transport_validation.c:1517
 msgid "# PONGs dropped, signature expired"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1570
+#: src/transport/gnunet-service-transport_validation.c:1572
 msgid "# validations succeeded"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1625
+#: src/transport/gnunet-service-transport_validation.c:1627
 msgid "# HELLOs given to peerinfo"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:411
+#: src/transport/gnunet-transport.c:413
 #, c-format
 msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:421
+#: src/transport/gnunet-transport.c:423
 #, c-format
 msgid "Received %llu bytes/s (%llu bytes in %s)\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:465
+#: src/transport/gnunet-transport.c:467
 #, c-format
 msgid "Failed to connect to `%s'\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:478
+#: src/transport/gnunet-transport.c:480
 #, c-format
 msgid "Failed to resolve address for peer `%s'\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:492
-msgid "Failed to list connections, timeout occured\n"
-msgstr ""
+#: src/transport/gnunet-transport.c:494
+#, fuzzy
+msgid "Failed to list connections, timeout occurred\n"
+msgstr "# connessioni attive"
 
-#: src/transport/gnunet-transport.c:525
+#: src/transport/gnunet-transport.c:527
 #, c-format
 msgid "Transmitting %u bytes\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:559
+#: src/transport/gnunet-transport.c:561
 #, c-format
 msgid ""
 "Successfully connected to `%s', starting to send benchmark data in %u Kb "
 "blocks\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:590
+#: src/transport/gnunet-transport.c:592
 #, c-format
 msgid "Disconnected from peer `%s' while benchmarking\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:614 src/transport/gnunet-transport.c:643
+#: src/transport/gnunet-transport.c:616 src/transport/gnunet-transport.c:645
 #, c-format
 msgid "%24s: %-17s %4s   (%u connections in total)\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:616
+#: src/transport/gnunet-transport.c:618
 msgid "Connected to"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:645
+#: src/transport/gnunet-transport.c:647
 msgid "Disconnected from"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:680
+#: src/transport/gnunet-transport.c:682
 #, c-format
 msgid "Received %u bytes\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:717
+#: src/transport/gnunet-transport.c:719
 #, c-format
 msgid "Peer `%s': %s %s in state `%s' until %s\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:729
+#: src/transport/gnunet-transport.c:731
 #, c-format
 msgid "Peer `%s': %s %s\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1142
+#: src/transport/gnunet-transport.c:1144
 msgid "Monitor disconnected from transport service. Reconnecting.\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1249
+#: src/transport/gnunet-transport.c:1251
 #, c-format
 msgid ""
 "Multiple operations given. Please choose only one operation: %s, %s, %s, %s, "
 "%s, %s %s\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1262
+#: src/transport/gnunet-transport.c:1264
 #, c-format
 msgid ""
 "No operation given. Please choose one operation: %s, %s, %s, %s, %s, %s, %s\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1292
+#: src/transport/gnunet-transport.c:1294
 msgid "Failed to connect to transport service for disconnection\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1298
+#: src/transport/gnunet-transport.c:1300
 msgid "Blacklisting request in place, stop with CTRL-C\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1323 src/transport/gnunet-transport.c:1353
-#: src/transport/gnunet-transport.c:1406
+#: src/transport/gnunet-transport.c:1325 src/transport/gnunet-transport.c:1355
+#: src/transport/gnunet-transport.c:1408
 msgid "Failed to connect to transport service\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1360
+#: src/transport/gnunet-transport.c:1362
 msgid "Starting to receive benchmark data\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1431
+#: src/transport/gnunet-transport.c:1433
 msgid "print information for all peers (instead of only connected peers)"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1435
+#: src/transport/gnunet-transport.c:1437
 msgid "measure how fast we are receiving data from all peers (until CTRL-C)"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1439
+#: src/transport/gnunet-transport.c:1441
 msgid "disconnect from a peer"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1443
+#: src/transport/gnunet-transport.c:1445
 msgid "provide information about all current connections (once)"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1451
+#: src/transport/gnunet-transport.c:1453
 msgid ""
 "provide information about all connects and disconnect events (continuously)"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1455
+#: src/transport/gnunet-transport.c:1457
 msgid "do not resolve hostnames"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1460
-#: src/transport/gnunet-transport-profiler.c:639
+#: src/transport/gnunet-transport.c:1462
+#: src/transport/gnunet-transport-profiler.c:641
 msgid "peer identity"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1464
+#: src/transport/gnunet-transport.c:1466
 msgid "monitor plugin sessions"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1469
+#: src/transport/gnunet-transport.c:1471
 msgid "send data for benchmarking to the other peer (until CTRL-C)"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1480
-#: src/transport/gnunet-transport-profiler.c:650
+#: src/transport/gnunet-transport.c:1482
+#: src/transport/gnunet-transport-profiler.c:652
 msgid "Direct access to transport service."
 msgstr ""
 
-#: src/transport/gnunet-transport-profiler.c:217
+#: src/transport/gnunet-transport-profiler.c:219
 #, c-format
 msgid "%llu B in %llu ms == %.2f KB/s!\n"
 msgstr ""
 
-#: src/transport/gnunet-transport-profiler.c:615
+#: src/transport/gnunet-transport-profiler.c:617
 msgid "send data to peer"
 msgstr ""
 
-#: src/transport/gnunet-transport-profiler.c:619
+#: src/transport/gnunet-transport-profiler.c:621
 msgid "receive data from peer"
 msgstr ""
 
-#: src/transport/gnunet-transport-profiler.c:624
+#: src/transport/gnunet-transport-profiler.c:626
 msgid "iterations"
 msgstr ""
 
-#: src/transport/gnunet-transport-profiler.c:629
+#: src/transport/gnunet-transport-profiler.c:631
 msgid "number of messages to send"
 msgstr ""
 
-#: src/transport/gnunet-transport-profiler.c:634
+#: src/transport/gnunet-transport-profiler.c:636
 msgid "message size to use"
 msgstr ""
 
-#: src/transport/plugin_transport_http_client.c:1472
-#: src/transport/plugin_transport_http_server.c:2310
-#: src/transport/plugin_transport_http_server.c:3524
-#: src/transport/plugin_transport_tcp.c:3889
-#: src/transport/plugin_transport_tcp.c:3896
-#: src/transport/plugin_transport_xt.c:3897
-#: src/transport/plugin_transport_xt.c:3904
+#: src/transport/plugin_transport_http_client.c:1474
+#: src/transport/plugin_transport_http_server.c:2312
+#: src/transport/plugin_transport_http_server.c:3530
+#: src/transport/plugin_transport_tcp.c:3895
+#: src/transport/plugin_transport_tcp.c:3902
+#: src/transport/plugin_transport_xt.c:3899
+#: src/transport/plugin_transport_xt.c:3906
 msgid "TCP_STEALTH not supported on this platform.\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_client.c:2113
+#: src/transport/plugin_transport_http_client.c:2115
 #, c-format
 msgid "Could not initialize curl multi handle, failed to start %s plugin!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_client.c:2162
-#: src/transport/plugin_transport_http_server.c:3239
+#: src/transport/plugin_transport_http_client.c:2164
+#: src/transport/plugin_transport_http_server.c:3245
 #, c-format
 msgid "Shutting down plugin `%s'\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_client.c:2179
-#: src/transport/plugin_transport_http_server.c:3309
+#: src/transport/plugin_transport_http_client.c:2181
+#: src/transport/plugin_transport_http_server.c:3315
 #, c-format
 msgid "Shutdown for plugin `%s' complete\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_client.c:2213
+#: src/transport/plugin_transport_http_client.c:2215
 #, c-format
 msgid "Maximum number of requests is %u\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:1754
+#: src/transport/plugin_transport_http_server.c:1756
 #, c-format
 msgid ""
 "Access from connection %p (%u of %u) for `%s' `%s' url `%s' with upload data "
 "size %u\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2026
+#: src/transport/plugin_transport_http_server.c:2028
 #, c-format
 msgid "Accepting connection (%u of %u) from `%s'\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2034
+#: src/transport/plugin_transport_http_server.c:2036
 #, c-format
 msgid ""
 "Server reached maximum number connections (%u), rejecting new connection\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2184
+#: src/transport/plugin_transport_http_server.c:2186
 msgid ""
 "Could not create a new TLS certificate, program `gnunet-transport-"
 "certificate-creation' could not be started!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2207
+#: src/transport/plugin_transport_http_server.c:2209
 #, c-format
 msgid "No usable TLS certificate found and creating one at `%s/%s' failed!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2336
+#: src/transport/plugin_transport_http_server.c:2338
 msgid "Could not load or create server certificate! Loading plugin failed!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2648
+#: src/transport/plugin_transport_http_server.c:2654
 msgid "Require valid port number for service in configuration!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2813
+#: src/transport/plugin_transport_http_server.c:2819
 #, c-format
 msgid "Found %u addresses to report to NAT service\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2899
-#: src/transport/plugin_transport_udp.c:3621
-#: src/transport/plugin_transport_xu.c:2047
+#: src/transport/plugin_transport_http_server.c:2905
+#: src/transport/plugin_transport_udp.c:3627
+#: src/transport/plugin_transport_xu.c:2049
 msgid "Disabling IPv6 since it is not supported on this system!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3005
+#: src/transport/plugin_transport_http_server.c:3011
 #, c-format
 msgid "IPv4 support is %s\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3020
+#: src/transport/plugin_transport_http_server.c:3026
 #, c-format
 msgid "IPv6 support is %s\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3026
+#: src/transport/plugin_transport_http_server.c:3032
 msgid "Neither IPv4 nor IPv6 are enabled! Fix in configuration\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3037
+#: src/transport/plugin_transport_http_server.c:3043
 msgid "Port is required! Fix in configuration\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3043
+#: src/transport/plugin_transport_http_server.c:3049
 #, c-format
 msgid "Using port %u\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3062
+#: src/transport/plugin_transport_http_server.c:3068
 #, c-format
 msgid "Specific IPv4 address `%s' in configuration file is invalid!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3097
+#: src/transport/plugin_transport_http_server.c:3103
 #, c-format
 msgid "Specific IPv6 address `%s' in configuration file is invalid!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3172
+#: src/transport/plugin_transport_http_server.c:3178
 #, c-format
 msgid "Using external hostname `%s'\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3193
+#: src/transport/plugin_transport_http_server.c:3199
 #, c-format
 msgid "Notifying transport only about hostname `%s'\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3210
+#: src/transport/plugin_transport_http_server.c:3216
 #, c-format
 msgid "Maximum number of connections is %u\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3536
+#: src/transport/plugin_transport_http_server.c:3542
 msgid "Unable to compile URL regex\n"
 msgstr ""
 
-#: src/transport/plugin_transport_smtp.c:221
+#: src/transport/plugin_transport_smtp.c:223
 #, c-format
 msgid "Received malformed message via %s. Ignored.\n"
 msgstr ""
 
-#: src/transport/plugin_transport_smtp.c:308
+#: src/transport/plugin_transport_smtp.c:310
 msgid "SMTP filter string to invalid, lacks ': '\n"
 msgstr ""
 
-#: src/transport/plugin_transport_smtp.c:317
+#: src/transport/plugin_transport_smtp.c:319
 #, c-format
 msgid "SMTP filter string to long, capped to `%s'\n"
 msgstr ""
 
-#: src/transport/plugin_transport_smtp.c:412
-#: src/transport/plugin_transport_smtp.c:422
-#: src/transport/plugin_transport_smtp.c:435
-#: src/transport/plugin_transport_smtp.c:454
-#: src/transport/plugin_transport_smtp.c:477
-#: src/transport/plugin_transport_smtp.c:485
-#: src/transport/plugin_transport_smtp.c:498
-#: src/transport/plugin_transport_smtp.c:509
+#: src/transport/plugin_transport_smtp.c:414
+#: src/transport/plugin_transport_smtp.c:424
+#: src/transport/plugin_transport_smtp.c:437
+#: src/transport/plugin_transport_smtp.c:456
+#: src/transport/plugin_transport_smtp.c:479
+#: src/transport/plugin_transport_smtp.c:487
+#: src/transport/plugin_transport_smtp.c:500
+#: src/transport/plugin_transport_smtp.c:511
 #, c-format
 msgid "SMTP: `%s' failed: %s.\n"
 msgstr ""
 
-#: src/transport/plugin_transport_smtp.c:650
+#: src/transport/plugin_transport_smtp.c:652
 msgid "No email-address specified, can not start SMTP transport.\n"
 msgstr ""
 
-#: src/transport/plugin_transport_smtp.c:662
+#: src/transport/plugin_transport_smtp.c:664
 msgid "# bytes received via SMTP"
 msgstr ""
 
-#: src/transport/plugin_transport_smtp.c:663
+#: src/transport/plugin_transport_smtp.c:665
 msgid "# bytes sent via SMTP"
 msgstr "# byte inviati via SMTP"
 
-#: src/transport/plugin_transport_smtp.c:665
+#: src/transport/plugin_transport_smtp.c:667
 msgid "# bytes dropped by SMTP (outgoing)"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:1545
-#: src/transport/plugin_transport_tcp.c:2871
-#: src/transport/plugin_transport_xt.c:1551
-#: src/transport/plugin_transport_xt.c:2877
+#: src/transport/plugin_transport_tcp.c:1551
+#: src/transport/plugin_transport_tcp.c:2877
+#: src/transport/plugin_transport_xt.c:1553
+#: src/transport/plugin_transport_xt.c:2879
 #, c-format
 msgid "Unexpected address length: %u bytes\n"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:1728
-#: src/transport/plugin_transport_tcp.c:1952
-#: src/transport/plugin_transport_tcp.c:3135
-#: src/transport/plugin_transport_tcp.c:4012
-#: src/transport/plugin_transport_xt.c:1734
-#: src/transport/plugin_transport_xt.c:1958
-#: src/transport/plugin_transport_xt.c:3141
+#: src/transport/plugin_transport_tcp.c:1734
+#: src/transport/plugin_transport_tcp.c:1958
+#: src/transport/plugin_transport_tcp.c:3141
+#: src/transport/plugin_transport_tcp.c:4018
+#: src/transport/plugin_transport_xt.c:1736
+#: src/transport/plugin_transport_xt.c:1960
+#: src/transport/plugin_transport_xt.c:3143
 msgid "# TCP sessions active"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:1770
-#: src/transport/plugin_transport_tcp.c:1934
-#: src/transport/plugin_transport_tcp.c:2058
-#: src/transport/plugin_transport_tcp.c:2131
-#: src/transport/plugin_transport_tcp.c:2231
-#: src/transport/plugin_transport_tcp.c:2256
-#: src/transport/plugin_transport_xt.c:1776
-#: src/transport/plugin_transport_xt.c:1940
-#: src/transport/plugin_transport_xt.c:2064
-#: src/transport/plugin_transport_xt.c:2137
-#: src/transport/plugin_transport_xt.c:2237
-#: src/transport/plugin_transport_xt.c:2262
+#: src/transport/plugin_transport_tcp.c:1776
+#: src/transport/plugin_transport_tcp.c:1940
+#: src/transport/plugin_transport_tcp.c:2064
+#: src/transport/plugin_transport_tcp.c:2137
+#: src/transport/plugin_transport_tcp.c:2237
+#: src/transport/plugin_transport_tcp.c:2262
+#: src/transport/plugin_transport_xt.c:1778
+#: src/transport/plugin_transport_xt.c:1942
+#: src/transport/plugin_transport_xt.c:2066
+#: src/transport/plugin_transport_xt.c:2139
+#: src/transport/plugin_transport_xt.c:2239
+#: src/transport/plugin_transport_xt.c:2264
 msgid "# bytes currently in TCP buffers"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:1773
-#: src/transport/plugin_transport_xt.c:1779
+#: src/transport/plugin_transport_tcp.c:1779
+#: src/transport/plugin_transport_xt.c:1781
 msgid "# bytes discarded by TCP (disconnect)"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:2061
-#: src/transport/plugin_transport_xt.c:2067
+#: src/transport/plugin_transport_tcp.c:2067
+#: src/transport/plugin_transport_xt.c:2069
 msgid "# bytes discarded by TCP (timeout)"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:2135
-#: src/transport/plugin_transport_xt.c:2141
+#: src/transport/plugin_transport_tcp.c:2141
+#: src/transport/plugin_transport_xt.c:2143
 msgid "# bytes transmitted via TCP"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:2533
-#: src/transport/plugin_transport_xt.c:2539
+#: src/transport/plugin_transport_tcp.c:2539
+#: src/transport/plugin_transport_xt.c:2541
 msgid "# requests to create session with invalid address"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:2709
-#: src/transport/plugin_transport_xt.c:2715
+#: src/transport/plugin_transport_tcp.c:2715
+#: src/transport/plugin_transport_xt.c:2717
 msgid "# transport-service disconnect requests for TCP"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3201
-#: src/transport/plugin_transport_xt.c:3207
+#: src/transport/plugin_transport_tcp.c:3207
+#: src/transport/plugin_transport_xt.c:3209
 msgid "# TCP WELCOME messages received"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3407
-#: src/transport/plugin_transport_xt.c:3413
+#: src/transport/plugin_transport_tcp.c:3413
+#: src/transport/plugin_transport_xt.c:3415
 msgid "# bytes received via TCP"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3458
-#: src/transport/plugin_transport_tcp.c:3516
-#: src/transport/plugin_transport_xt.c:3464
-#: src/transport/plugin_transport_xt.c:3522
+#: src/transport/plugin_transport_tcp.c:3464
+#: src/transport/plugin_transport_tcp.c:3522
+#: src/transport/plugin_transport_xt.c:3466
+#: src/transport/plugin_transport_xt.c:3524
 #, fuzzy
 msgid "# TCP server connections active"
 msgstr "# connessioni attive"
 
-#: src/transport/plugin_transport_tcp.c:3462
-#: src/transport/plugin_transport_xt.c:3468
+#: src/transport/plugin_transport_tcp.c:3468
+#: src/transport/plugin_transport_xt.c:3470
 msgid "# TCP server connect events"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3468
-#: src/transport/plugin_transport_xt.c:3474
+#: src/transport/plugin_transport_tcp.c:3474
+#: src/transport/plugin_transport_xt.c:3476
 msgid "TCP connection limit reached, suspending server\n"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3470
-#: src/transport/plugin_transport_xt.c:3476
+#: src/transport/plugin_transport_tcp.c:3476
+#: src/transport/plugin_transport_xt.c:3478
 msgid "# TCP service suspended"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3510
-#: src/transport/plugin_transport_xt.c:3516
+#: src/transport/plugin_transport_tcp.c:3516
+#: src/transport/plugin_transport_xt.c:3518
 msgid "# TCP service resumed"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3520
-#: src/transport/plugin_transport_xt.c:3526
+#: src/transport/plugin_transport_tcp.c:3526
+#: src/transport/plugin_transport_xt.c:3528
 msgid "# network-level TCP disconnect events"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3839
-#: src/transport/plugin_transport_xt.c:3847
+#: src/transport/plugin_transport_tcp.c:3845
+#: src/transport/plugin_transport_xt.c:3849
 msgid "Failed to start service.\n"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:4000
+#: src/transport/plugin_transport_tcp.c:4006
 #, c-format
 msgid "TCP transport listening on port %llu\n"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:4004
+#: src/transport/plugin_transport_tcp.c:4010
 msgid "TCP transport not listening on any port (client only)\n"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:4008
+#: src/transport/plugin_transport_tcp.c:4014
 #, c-format
 msgid "TCP transport advertises itself as being on port %llu\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp_broadcasting.c:166
+#: src/transport/plugin_transport_udp_broadcasting.c:168
 msgid "# Multicast HELLO beacons received via UDP"
 msgstr ""
 
-#: src/transport/plugin_transport_udp_broadcasting.c:546
+#: src/transport/plugin_transport_udp_broadcasting.c:548
 msgid ""
 "Disabling HELLO broadcasting due to friend-to-friend only configuration!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp_broadcasting.c:563
+#: src/transport/plugin_transport_udp_broadcasting.c:565
 #, c-format
 msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3365
+#: src/transport/plugin_transport_udp.c:3371
 #, c-format
 msgid ""
 "UDP could not transmit message to `%s': Network seems down, please check "
 "your network configuration\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3379
+#: src/transport/plugin_transport_udp.c:3385
 msgid ""
 "UDP could not transmit IPv6 message! Please check your network configuration "
 "and disable IPv6 if your connection does not have a global IPv6 address\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3697
-#: src/transport/plugin_transport_udp.c:3796
+#: src/transport/plugin_transport_udp.c:3703
+#: src/transport/plugin_transport_udp.c:3802
 #, c-format
 msgid "Failed to bind UDP socket to %s: %s\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3715
-#: src/transport/plugin_transport_xu.c:2141
+#: src/transport/plugin_transport_udp.c:3721
+#: src/transport/plugin_transport_xu.c:2143
 msgid "Disabling IPv4 since it is not supported on this system!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3806
+#: src/transport/plugin_transport_udp.c:3812
 msgid "Failed to open UDP sockets\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3877
-#: src/transport/plugin_transport_udp.c:3891
-#: src/transport/plugin_transport_xu.c:2299
-#: src/transport/plugin_transport_xu.c:2313
+#: src/transport/plugin_transport_udp.c:3883
+#: src/transport/plugin_transport_udp.c:3897
+#: src/transport/plugin_transport_xu.c:2301
+#: src/transport/plugin_transport_xu.c:2315
 msgid "must be in [0,65535]"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3923
-#: src/transport/plugin_transport_xu.c:2345
+#: src/transport/plugin_transport_udp.c:3929
+#: src/transport/plugin_transport_xu.c:2347
 #, fuzzy
 msgid "must be valid IPv4 address"
 msgstr "`%s' non è un indirizzo IP valido.\n"
 
-#: src/transport/plugin_transport_udp.c:3950
-#: src/transport/plugin_transport_xu.c:2372
+#: src/transport/plugin_transport_udp.c:3956
+#: src/transport/plugin_transport_xu.c:2374
 #, fuzzy
 msgid "must be valid IPv6 address"
 msgstr "`%s' non è un indirizzo IP valido.\n"
 
-#: src/transport/plugin_transport_udp.c:4014
+#: src/transport/plugin_transport_udp.c:4020
 msgid "Failed to create UDP network sockets\n"
 msgstr ""
 
-#: src/transport/plugin_transport_unix.c:1401
-#, c-format
-msgid "Cannot create path to `%s'\n"
-msgstr ""
-
-#: src/transport/plugin_transport_unix.c:1414
+#: src/transport/plugin_transport_unix.c:1416
 #, fuzzy, c-format
 msgid "Cannot bind to `%s'\n"
 msgstr "Connessione stabilita con `%s'\n"
 
-#: src/transport/plugin_transport_unix.c:1814
+#: src/transport/plugin_transport_unix.c:1816
 msgid "Failed to open UNIX listen socket\n"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:766
+#: src/transport/plugin_transport_wlan.c:768
 msgid "# ACKs sent"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:786
+#: src/transport/plugin_transport_wlan.c:788
 #, fuzzy
 msgid "# Messages defragmented"
 msgstr "# messaggi PONG decrittati"
 
-#: src/transport/plugin_transport_wlan.c:827
-#: src/transport/plugin_transport_wlan.c:912
+#: src/transport/plugin_transport_wlan.c:829
+#: src/transport/plugin_transport_wlan.c:914
 msgid "# Sessions allocated"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:1033
+#: src/transport/plugin_transport_wlan.c:1035
 msgid "# message fragments sent"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:1062
+#: src/transport/plugin_transport_wlan.c:1064
 msgid "# messages pending (with fragmentation)"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:1191
-#: src/transport/plugin_transport_wlan.c:1282
-#: src/transport/plugin_transport_wlan.c:2303
+#: src/transport/plugin_transport_wlan.c:1193
+#: src/transport/plugin_transport_wlan.c:1284
+#: src/transport/plugin_transport_wlan.c:2305
 msgid "# MAC endpoints allocated"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:1565
+#: src/transport/plugin_transport_wlan.c:1567
 #, fuzzy
 msgid "# ACKs received"
 msgstr "# messaggi PONG ricevuti"
 
-#: src/transport/plugin_transport_wlan.c:1634
+#: src/transport/plugin_transport_wlan.c:1636
 msgid "# DATA messages discarded due to CRC32 error"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:1738
+#: src/transport/plugin_transport_wlan.c:1740
 msgid "# HELLO beacons sent"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:1854
+#: src/transport/plugin_transport_wlan.c:1856
 #, fuzzy
 msgid "# DATA messages received"
 msgstr "# messaggi PONG ricevuti"
 
-#: src/transport/plugin_transport_wlan.c:1888
+#: src/transport/plugin_transport_wlan.c:1890
 #, fuzzy
 msgid "# DATA messages processed"
 msgstr "# messaggi PONG ricevuti"
 
-#: src/transport/plugin_transport_wlan.c:2278
+#: src/transport/plugin_transport_wlan.c:2280
 #, c-format
 msgid "Helper binary `%s' not SUID, cannot run WLAN transport\n"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:2300
+#: src/transport/plugin_transport_wlan.c:2302
 msgid "# sessions allocated"
 msgstr ""
 
-#: src/transport/plugin_transport_xt.c:4008
+#: src/transport/plugin_transport_xt.c:4010
 #, c-format
 msgid "XT transport listening on port %llu\n"
 msgstr ""
 
-#: src/transport/plugin_transport_xt.c:4012
+#: src/transport/plugin_transport_xt.c:4014
 msgid "XT transport not listening on any port (client only)\n"
 msgstr ""
 
-#: src/transport/plugin_transport_xt.c:4016
+#: src/transport/plugin_transport_xt.c:4018
 #, c-format
 msgid "XT transport advertises itself as being on port %llu\n"
 msgstr ""
 
-#: src/transport/plugin_transport_xt.c:4020
+#: src/transport/plugin_transport_xt.c:4022
 msgid "# XT sessions active"
 msgstr ""
 
-#: src/transport/plugin_transport_xu.c:1235
+#: src/transport/plugin_transport_xu.c:1237
 #, c-format
 msgid ""
 "XU could not transmit message to `%s': Network seems down, please check your "
 "network configuration\n"
 msgstr ""
 
-#: src/transport/plugin_transport_xu.c:1249
+#: src/transport/plugin_transport_xu.c:1251
 msgid ""
 "XU could not transmit IPv6 message! Please check your network configuration "
 "and disable IPv6 if your connection does not have a global IPv6 address\n"
 msgstr ""
 
-#: src/transport/plugin_transport_xu.c:2123
-#: src/transport/plugin_transport_xu.c:2222
+#: src/transport/plugin_transport_xu.c:2125
+#: src/transport/plugin_transport_xu.c:2224
 #, c-format
 msgid "Failed to bind XU socket to %s: %s\n"
 msgstr ""
 
-#: src/transport/plugin_transport_xu.c:2232
+#: src/transport/plugin_transport_xu.c:2234
 msgid "Failed to open XU sockets\n"
 msgstr ""
 
-#: src/transport/plugin_transport_xu.c:2396
+#: src/transport/plugin_transport_xu.c:2398
 msgid "Failed to create XU network sockets\n"
 msgstr ""
 
-#: src/transport/tcp_connection_legacy.c:450
+#: src/transport/tcp_connection_legacy.c:452
 #, c-format
 msgid "Access denied to `%s'\n"
 msgstr ""
 
-#: src/transport/tcp_connection_legacy.c:467
+#: src/transport/tcp_connection_legacy.c:469
 #, c-format
 msgid "Accepting connection from `%s': %p\n"
 msgstr ""
 
-#: src/transport/tcp_server_legacy.c:472 src/util/service.c:1109
+#: src/transport/tcp_server_legacy.c:474 src/util/service.c:1666
 #, c-format
 msgid "`%s' failed for port %d (%s).\n"
 msgstr ""
 
-#: src/transport/tcp_server_legacy.c:482 src/util/service.c:1119
+#: src/transport/tcp_server_legacy.c:484 src/util/service.c:1676
 #, c-format
 msgid "`%s' failed for port %d (%s): address already in use\n"
 msgstr ""
 
-#: src/transport/tcp_server_legacy.c:488 src/util/service.c:1125
+#: src/transport/tcp_server_legacy.c:490 src/util/service.c:1682
 #, c-format
 msgid "`%s' failed for `%s': address already in use\n"
 msgstr ""
 
-#: src/transport/tcp_server_legacy.c:888
+#: src/transport/tcp_server_legacy.c:890
 #, c-format
 msgid ""
 "Processing code for message of type %u did not call "
 "`GNUNET_SERVER_receive_done' after %s\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:337 src/util/service.c:2378
+#: src/transport/tcp_service_legacy.c:339 src/util/service.c:870
 #, c-format
 msgid "Unknown address family %d\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:344
+#: src/transport/tcp_service_legacy.c:346
 #, c-format
 msgid "Access from `%s' denied to service `%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:400 src/util/service.c:437
+#: src/transport/tcp_service_legacy.c:402 src/util/service.c:994
 #, c-format
 msgid "Could not parse IPv4 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:438 src/util/service.c:480
+#: src/transport/tcp_service_legacy.c:440 src/util/service.c:1037
 #, c-format
 msgid "Could not parse IPv6 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:902 src/util/service.c:1040
+#: src/transport/tcp_service_legacy.c:904 src/util/service.c:1597
 msgid "Could not access a pre-bound socket, will try to bind myself\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:951
-#: src/transport/tcp_service_legacy.c:969 src/util/service.c:1192
+#: src/transport/tcp_service_legacy.c:953
+#: src/transport/tcp_service_legacy.c:971 src/util/service.c:1750
 #, c-format
 msgid "Specified value for `%s' of service `%s' is invalid\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:994 src/util/service.c:1224
+#: src/transport/tcp_service_legacy.c:996 src/util/service.c:1783
 #, c-format
 msgid "Could not access pre-bound socket %u, will try to bind myself\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1159
+#: src/transport/tcp_service_legacy.c:1161
 #, c-format
 msgid "Failed to start `%s' at `%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1200
+#: src/transport/tcp_service_legacy.c:1202
 #, c-format
 msgid "Service `%s' runs at %s\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1249 src/util/service.c:1498
+#: src/transport/tcp_service_legacy.c:1251 src/util/service.c:2057
 msgid "Service process failed to initialize\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1253 src/util/service.c:1502
+#: src/transport/tcp_service_legacy.c:1255 src/util/service.c:2061
 msgid "Service process could not initialize server function\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1257 src/util/service.c:1506
+#: src/transport/tcp_service_legacy.c:1259 src/util/service.c:2065
 msgid "Service process failed to report status\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1311 src/util/disk.c:1521
-#: src/util/service.c:1376
+#: src/transport/tcp_service_legacy.c:1313 src/util/disk.c:1525
+#: src/util/service.c:1935
 #, c-format
 msgid "Cannot obtain information about user `%s': %s\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1312 src/util/service.c:1378
+#: src/transport/tcp_service_legacy.c:1314 src/util/service.c:1937
 msgid "No such user"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1325 src/util/service.c:1397
+#: src/transport/tcp_service_legacy.c:1327 src/util/service.c:1956
 #, c-format
 msgid "Cannot change user/group to `%s': %s\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1396 src/util/service.c:1757
+#: src/transport/tcp_service_legacy.c:1398 src/util/service.c:2318
 msgid "do daemonize (detach from terminal)"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1446 src/util/program.c:277
-#: src/util/service.c:1820
+#: src/transport/tcp_service_legacy.c:1448 src/util/service.c:2382
+#: src/util/service.c:2397
 #, c-format
 msgid "Malformed configuration file `%s', exit ...\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1456 src/util/program.c:297
-#: src/util/service.c:1831
+#: src/transport/tcp_service_legacy.c:1458 src/util/service.c:2409
 msgid "Malformed configuration, exit ...\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1461 src/util/program.c:290
-#: src/util/service.c:1837
+#: src/transport/tcp_service_legacy.c:1463
 #, c-format
 msgid "Could not access configuration file `%s'\n"
 msgstr ""
 
-#: src/util/bio.c:179 src/util/bio.c:187
+#: src/transport/transport_api2_communication.c:764
+msgid "Dropped backchanel message: handler not provided by communicator\n"
+msgstr ""
+
+#: src/util/bio.c:181 src/util/bio.c:189
 #, c-format
 msgid "Error reading `%s': %s"
 msgstr ""
 
-#: src/util/bio.c:189
+#: src/util/bio.c:191
 msgid "End of file"
 msgstr "Fine del file"
 
-#: src/util/bio.c:246
+#: src/util/bio.c:248
 #, c-format
 msgid "Error reading length of string `%s'"
 msgstr ""
 
-#: src/util/bio.c:256
+#: src/util/bio.c:258
 #, c-format
 msgid "String `%s' longer than allowed (%u > %u)"
 msgstr ""
 
-#: src/util/bio.c:304
+#: src/util/bio.c:306
 #, c-format
 msgid "Serialized metadata `%s' larger than allowed (%u>%u)"
 msgstr ""
 
-#: src/util/bio.c:326
+#: src/util/bio.c:328
 #, c-format
 msgid "Metadata `%s' failed to deserialize"
 msgstr ""
 
-#: src/util/client.c:732
+#: src/util/client.c:734
 msgid "not a valid filename"
 msgstr ""
 
-#: src/util/client.c:923
+#: src/util/client.c:925
 #, c-format
 msgid "Need a non-empty hostname for service `%s'.\n"
 msgstr ""
 
-#: src/util/common_logging.c:257 src/util/common_logging.c:1159
+#: src/util/common_logging.c:259 src/util/common_logging.c:1162
 msgid "DEBUG"
 msgstr "DEBUG"
 
-#: src/util/common_logging.c:259 src/util/common_logging.c:1157
+#: src/util/common_logging.c:261 src/util/common_logging.c:1160
 msgid "INFO"
 msgstr ""
 
-#: src/util/common_logging.c:261 src/util/common_logging.c:1155
+#: src/util/common_logging.c:263 src/util/common_logging.c:1158
 msgid "MESSAGE"
 msgstr ""
 
-#: src/util/common_logging.c:263 src/util/common_logging.c:1153
+#: src/util/common_logging.c:265 src/util/common_logging.c:1156
 msgid "WARNING"
 msgstr ""
 
-#: src/util/common_logging.c:265 src/util/common_logging.c:1151
+#: src/util/common_logging.c:267 src/util/common_logging.c:1154
 msgid "ERROR"
 msgstr "ERRORE"
 
-#: src/util/common_logging.c:267 src/util/common_logging.c:1161
+#: src/util/common_logging.c:269 src/util/common_logging.c:1164
 msgid "NONE"
 msgstr "NESSUNA"
 
-#: src/util/common_logging.c:631 src/util/common_logging.c:661
+#: src/util/common_logging.c:633 src/util/common_logging.c:663
 #, c-format
 msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n"
 msgstr ""
 
-#: src/util/common_logging.c:895
+#: src/util/common_logging.c:898
 #, c-format
 msgid "Message `%.*s' repeated %u times in the last %s\n"
 msgstr ""
 
-#: src/util/common_logging.c:1162
+#: src/util/common_logging.c:1165
 msgid "INVALID"
 msgstr "NON VALIDO"
 
-#: src/util/common_logging.c:1455
+#: src/util/common_logging.c:1458
 msgid "unknown address"
 msgstr "indirizzo sconosciuto"
 
-#: src/util/common_logging.c:1497
+#: src/util/common_logging.c:1500
 msgid "invalid address"
 msgstr ""
 
-#: src/util/common_logging.c:1515
+#: src/util/common_logging.c:1518
 #, c-format
 msgid "Configuration fails to specify option `%s' in section `%s'!\n"
 msgstr ""
 
-#: src/util/common_logging.c:1536
+#: src/util/common_logging.c:1539
 #, c-format
 msgid ""
 "Configuration specifies invalid value for option `%s' in section `%s': %s\n"
 msgstr ""
 
-#: src/util/configuration.c:294
+#: src/util/configuration.c:331
 #, c-format
 msgid "Syntax error while deserializing in line %u\n"
 msgstr ""
 
-#: src/util/configuration.c:361
+#: src/util/configuration.c:398
 #, c-format
 msgid "Error while reading file `%s'\n"
 msgstr ""
 
-#: src/util/configuration.c:970
+#: src/util/configuration.c:1016
 msgid "Not a valid relative time specification"
 msgstr ""
 
-#: src/util/configuration.c:1059
+#: src/util/configuration.c:1105
 #, c-format
 msgid ""
 "Configuration value '%s' for '%s' in section '%s' is not in set of legal "
 "choices\n"
 msgstr ""
 
-#: src/util/configuration.c:1178
+#: src/util/configuration.c:1224
 #, c-format
 msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n"
 msgstr ""
 
-#: src/util/configuration.c:1211
+#: src/util/configuration.c:1257
 #, c-format
 msgid "Missing closing `%s' in option `%s'\n"
 msgstr ""
 
-#: src/util/configuration.c:1279
+#: src/util/configuration.c:1325
 #, c-format
 msgid ""
 "Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined "
 "as an environmental variable\n"
 msgstr ""
 
-#: src/util/container_bloomfilter.c:530
+#: src/util/container_bloomfilter.c:532
 #, c-format
 msgid ""
 "Size of file on disk is incorrect for this Bloom filter (want %llu, have "
 "%llu)\n"
 msgstr ""
 
-#: src/util/crypto_ecc.c:860
+#: src/util/crypto_ecc.c:862
 #, c-format
 msgid "ECC signing failed at %s:%d: %s\n"
 msgstr ""
 
-#: src/util/crypto_ecc.c:915
+#: src/util/crypto_ecc.c:917
 #, c-format
 msgid "EdDSA signing failed at %s:%d: %s\n"
 msgstr ""
 
-#: src/util/crypto_ecc.c:994
+#: src/util/crypto_ecc.c:996
 #, c-format
 msgid "ECDSA signature verification failed at %s:%d: %s\n"
 msgstr ""
 
-#: src/util/crypto_ecc.c:1055
+#: src/util/crypto_ecc.c:1057
 #, c-format
 msgid "EdDSA signature verification failed at %s:%d: %s\n"
 msgstr ""
 
-#: src/util/crypto_ecc_setup.c:121 src/util/crypto_ecc_setup.c:160
-#: src/util/crypto_ecc_setup.c:303 src/util/crypto_ecc_setup.c:350
+#: src/util/crypto_ecc_setup.c:123 src/util/crypto_ecc_setup.c:162
+#: src/util/crypto_ecc_setup.c:305 src/util/crypto_ecc_setup.c:352
 #, c-format
 msgid "Could not acquire lock on file `%s': %s...\n"
 msgstr ""
 
-#: src/util/crypto_ecc_setup.c:127 src/util/crypto_ecc_setup.c:309
+#: src/util/crypto_ecc_setup.c:129 src/util/crypto_ecc_setup.c:311
 msgid "Creating a new private key.  This may take a while.\n"
 msgstr ""
 
-#: src/util/crypto_ecc_setup.c:164 src/util/crypto_ecc_setup.c:354
+#: src/util/crypto_ecc_setup.c:166 src/util/crypto_ecc_setup.c:356
 msgid "This may be ok if someone is currently generating a private key.\n"
 msgstr ""
 
-#: src/util/crypto_ecc_setup.c:194 src/util/crypto_ecc_setup.c:396
+#: src/util/crypto_ecc_setup.c:196 src/util/crypto_ecc_setup.c:398
 #, c-format
 msgid ""
 "When trying to read key file `%s' I found %u bytes but I need at least %u.\n"
 msgstr ""
 
-#: src/util/crypto_ecc_setup.c:199 src/util/crypto_ecc_setup.c:400
+#: src/util/crypto_ecc_setup.c:201 src/util/crypto_ecc_setup.c:402
 msgid "This may be ok if someone is currently generating a key.\n"
 msgstr ""
 
-#: src/util/crypto_ecc_setup.c:466
+#: src/util/crypto_ecc_setup.c:468
 msgid "Could not load peer's private key\n"
 msgstr ""
 
-#: src/util/crypto_random.c:304
+#: src/util/crypto_random.c:306
 #, c-format
 msgid "libgcrypt has not the expected version (version %s is required).\n"
 msgstr ""
 
-#: src/util/crypto_rsa.c:848
+#: src/util/crypto_rsa.c:850
 #, c-format
 msgid "RSA signing failed at %s:%d: %s\n"
 msgstr ""
 
-#: src/util/crypto_rsa.c:1187
+#: src/util/crypto_rsa.c:1189
 #, c-format
 msgid "RSA signature verification failed at %s:%d: %s\n"
 msgstr ""
 
-#: src/util/disk.c:1251
+#: src/util/disk.c:1255
 #, c-format
 msgid "Expected `%s' to be a directory!\n"
 msgstr ""
 
-#: src/util/dnsparser.c:250
+#: src/util/dnsparser.c:264
 #, c-format
 msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n"
 msgstr ""
 
-#: src/util/dnsparser.c:940
+#: src/util/dnsparser.c:954
 #, c-format
 msgid "Failed to convert UTF-8 name `%s' to DNS IDNA format: %s\n"
 msgstr ""
 
-#: src/util/dnsstub.c:229
+#: src/util/dnsstub.c:231
 #, c-format
 msgid "Could not bind to any port: %s\n"
 msgstr ""
 
-#: src/util/dnsstub.c:360
+#: src/util/dnsstub.c:362
 #, c-format
 msgid "Received DNS response that is too small (%u bytes)"
 msgstr ""
 
-#: src/util/dnsstub.c:507
+#: src/util/dnsstub.c:509
 #, c-format
 msgid "Failed to send DNS request to %s: %s\n"
 msgstr ""
 
-#: src/util/dnsstub.c:513
+#: src/util/dnsstub.c:515
 #, c-format
 msgid "Sent DNS request to %s\n"
 msgstr ""
@@ -8245,138 +8083,138 @@ msgstr ""
 msgid "Missing mandatory option `%s'.\n"
 msgstr ""
 
-#: src/util/getopt_helpers.c:68
+#: src/util/getopt_helpers.c:70
 msgid "print the version number"
 msgstr ""
 
-#: src/util/getopt_helpers.c:113
+#: src/util/getopt_helpers.c:116
 #, c-format
 msgid ""
 "Arguments mandatory for long options are also mandatory for short options.\n"
 msgstr ""
 
-#: src/util/getopt_helpers.c:201
+#: src/util/getopt_helpers.c:204
 msgid "print this help"
 msgstr ""
 
-#: src/util/getopt_helpers.c:279
+#: src/util/getopt_helpers.c:282
 msgid "be verbose"
 msgstr ""
 
-#: src/util/getopt_helpers.c:420
+#: src/util/getopt_helpers.c:423
 msgid "configure logging to use LOGLEVEL"
 msgstr ""
 
-#: src/util/getopt_helpers.c:500
+#: src/util/getopt_helpers.c:503
 msgid "configure logging to write logs to FILENAME"
 msgstr ""
 
-#: src/util/getopt_helpers.c:522
+#: src/util/getopt_helpers.c:525
 msgid "use configuration file FILENAME"
 msgstr ""
 
-#: src/util/getopt_helpers.c:559 src/util/getopt_helpers.c:763
-#: src/util/getopt_helpers.c:830
+#: src/util/getopt_helpers.c:564 src/util/getopt_helpers.c:770
+#: src/util/getopt_helpers.c:839
 #, c-format
 msgid "You must pass a number to the `%s' option.\n"
 msgstr ""
 
-#: src/util/getopt_helpers.c:624
+#: src/util/getopt_helpers.c:629
 #, c-format
 msgid "You must pass relative time to the `%s' option.\n"
 msgstr ""
 
-#: src/util/getopt_helpers.c:690
+#: src/util/getopt_helpers.c:695
 #, c-format
 msgid "You must pass absolute time to the `%s' option.\n"
 msgstr ""
 
-#: src/util/getopt_helpers.c:754
+#: src/util/getopt_helpers.c:760
 #, c-format
 msgid "Your input for the '%s' option has to be a non negative number \n"
 msgstr ""
 
-#: src/util/getopt_helpers.c:837
+#: src/util/getopt_helpers.c:846
 #, c-format
 msgid "You must pass a number below %u to the `%s' option.\n"
 msgstr ""
 
-#: src/util/getopt_helpers.c:923
+#: src/util/getopt_helpers.c:932
 #, c-format
 msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n"
 msgstr ""
 
-#: src/util/gnunet-config.c:157
+#: src/util/gnunet-config.c:160
 #, c-format
 msgid "failed to load configuration defaults"
 msgstr ""
 
-#: src/util/gnunet-config.c:170
+#: src/util/gnunet-config.c:173
 #, c-format
-msgid "--section argument is required\n"
+msgid "%s or %s argument is required\n"
 msgstr ""
 
-#: src/util/gnunet-config.c:173
+#: src/util/gnunet-config.c:181
 #, c-format
 msgid "The following sections are available:\n"
 msgstr ""
 
-#: src/util/gnunet-config.c:224
+#: src/util/gnunet-config.c:232
 #, c-format
 msgid "--option argument required to set value\n"
 msgstr ""
 
-#: src/util/gnunet-config.c:263
+#: src/util/gnunet-config.c:286
 msgid "obtain option of value as a filename (with $-expansion)"
 msgstr ""
 
-#: src/util/gnunet-config.c:268
+#: src/util/gnunet-config.c:291
 msgid "name of the section to access"
 msgstr ""
 
-#: src/util/gnunet-config.c:273
+#: src/util/gnunet-config.c:296
 msgid "name of the option to access"
 msgstr ""
 
-#: src/util/gnunet-config.c:278
+#: src/util/gnunet-config.c:301
 msgid "value to set"
 msgstr ""
 
-#: src/util/gnunet-config.c:282
+#: src/util/gnunet-config.c:305
 msgid "print available configuration sections"
 msgstr ""
 
-#: src/util/gnunet-config.c:286
+#: src/util/gnunet-config.c:309
 msgid "write configuration file that only contains delta to defaults"
 msgstr ""
 
-#: src/util/gnunet-config.c:299
+#: src/util/gnunet-config.c:322
 msgid "Manipulate GNUnet configuration files"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:92
+#: src/util/gnunet-ecc.c:94
 #, c-format
 msgid "Failed to open `%s': %s\n"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:128
+#: src/util/gnunet-ecc.c:130
 #, c-format
 msgid "Generating %u keys like %s, please wait"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:141
+#: src/util/gnunet-ecc.c:143
 #, c-format
 msgid "Generating %u keys, please wait"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:182
+#: src/util/gnunet-ecc.c:184
 #, c-format
 msgid ""
 "\n"
 "Failed to write to `%s': %s\n"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:192
+#: src/util/gnunet-ecc.c:194
 #, c-format
 msgid ""
 "\n"
@@ -8385,94 +8223,94 @@ msgstr ""
 "\n"
 "Completato!\n"
 
-#: src/util/gnunet-ecc.c:195
+#: src/util/gnunet-ecc.c:197
 #, c-format
 msgid ""
 "\n"
 "Error, %u keys not generated\n"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:288
+#: src/util/gnunet-ecc.c:290
 #, c-format
 msgid "Hostkeys file `%s' not found\n"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:303
+#: src/util/gnunet-ecc.c:305
 #, c-format
 msgid "Hostkeys file `%s' is empty\n"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:332
+#: src/util/gnunet-ecc.c:334
 #, c-format
 msgid "Could not read hostkey file: %s\n"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:389
+#: src/util/gnunet-ecc.c:391
 msgid "No hostkey file specified on command line\n"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:454
+#: src/util/gnunet-ecc.c:456
 msgid "list keys included in a file (for testing)"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:459
+#: src/util/gnunet-ecc.c:461
 msgid "number of keys to list included in a file (for testing)"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:464
+#: src/util/gnunet-ecc.c:466
 msgid "create COUNT public-private key pairs (for testing)"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:468
+#: src/util/gnunet-ecc.c:470
 msgid "print the public key in ASCII format"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:472
+#: src/util/gnunet-ecc.c:474
 msgid "print the private key in ASCII format"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:476
+#: src/util/gnunet-ecc.c:478
 msgid "print the public key in HEX format"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:480
+#: src/util/gnunet-ecc.c:482
 msgid "print examples of ECC operations (used for compatibility testing)"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:496
+#: src/util/gnunet-ecc.c:498
 msgid "Manipulate GNUnet private ECC key files"
 msgstr ""
 
-#: src/util/gnunet-resolver.c:166
+#: src/util/gnunet-resolver.c:168
 msgid "perform a reverse lookup"
 msgstr ""
 
-#: src/util/gnunet-resolver.c:177
+#: src/util/gnunet-resolver.c:179
 msgid "Use build-in GNUnet stub resolver"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:240
+#: src/util/gnunet-scrypt.c:242
 #, c-format
 msgid "Loading hostkey from `%s' failed.\n"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:315
+#: src/util/gnunet-scrypt.c:317
 msgid "number of bits to require for the proof of work"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:320
+#: src/util/gnunet-scrypt.c:322
 msgid "file with private key, otherwise default is used"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:325
+#: src/util/gnunet-scrypt.c:327
 msgid "file with proof of work, otherwise default is used"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:330
+#: src/util/gnunet-scrypt.c:332
 msgid "time to wait between calculations"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:343
+#: src/util/gnunet-scrypt.c:345
 msgid "Manipulate GNUnet proof of work files"
 msgstr ""
 
@@ -8480,467 +8318,492 @@ msgstr ""
 msgid "No DNS server available. DNS resolution will not be possible.\n"
 msgstr ""
 
-#: src/util/gnunet-uri.c:83
+#: src/util/gnunet-uri.c:85
 #, c-format
 msgid "No URI specified on command line\n"
 msgstr ""
 
-#: src/util/gnunet-uri.c:89
+#: src/util/gnunet-uri.c:91
 #, c-format
 msgid "Invalid URI: does not start with `%s'\n"
 msgstr ""
 
-#: src/util/gnunet-uri.c:96
+#: src/util/gnunet-uri.c:98
 #, c-format
 msgid "Invalid URI: fails to specify subsystem\n"
 msgstr ""
 
-#: src/util/gnunet-uri.c:106
+#: src/util/gnunet-uri.c:108
 #, c-format
 msgid "No handler known for subsystem `%s'\n"
 msgstr ""
 
-#: src/util/gnunet-uri.c:168
+#: src/util/gnunet-uri.c:170
 msgid "Perform default-actions for GNUnet URIs"
 msgstr ""
 
-#: src/util/helper.c:333
+#: src/util/helper.c:335
 #, c-format
 msgid "Error reading from `%s': %s\n"
 msgstr ""
 
-#: src/util/helper.c:384
+#: src/util/helper.c:386
 #, c-format
 msgid "Failed to parse inbound message from helper `%s'\n"
 msgstr ""
 
-#: src/util/helper.c:604
+#: src/util/helper.c:606
 #, c-format
 msgid "Error writing to `%s': %s\n"
 msgstr ""
 
-#: src/util/network.c:134
+#: src/util/network.c:136
 #, c-format
 msgid "Unable to shorten unix path `%s' while keeping name unique\n"
 msgstr ""
 
-#: src/util/network.c:1793 src/util/network.c:1977
+#: src/util/network.c:1794 src/util/network.c:1978
 #, c-format
 msgid ""
 "Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n"
 msgstr ""
 
-#: src/util/os_installation.c:507
+#: src/util/os_installation.c:509
 #, c-format
 msgid ""
 "Could not determine installation path for %s.  Set `%s' environment "
 "variable.\n"
 msgstr ""
 
-#: src/util/os_installation.c:879
+#: src/util/os_installation.c:881
 #, c-format
 msgid "Could not find binary `%s' in PATH!\n"
 msgstr ""
 
-#: src/util/os_installation.c:920
+#: src/util/os_installation.c:922
 #, c-format
 msgid "Binary `%s' exists, but is not SUID\n"
 msgstr ""
 
-#: src/util/os_installation.c:951
+#: src/util/os_installation.c:953
 #, c-format
 msgid "CreateProcess failed for binary %s (%d).\n"
 msgstr ""
 
-#: src/util/os_installation.c:961
+#: src/util/os_installation.c:963
 #, c-format
 msgid "GetExitCodeProcess failed for binary %s (%d).\n"
 msgstr ""
 
-#: src/util/plugin.c:84
+#: src/util/plugin.c:86
 #, c-format
 msgid "Initialization of plugin mechanism failed: %s!\n"
 msgstr ""
 
-#: src/util/plugin.c:149
+#: src/util/plugin.c:151
 #, c-format
 msgid "`%s' failed to resolve method '%s' with error: %s\n"
 msgstr ""
 
-#: src/util/plugin.c:224
+#: src/util/plugin.c:226
 #, c-format
 msgid "`%s' failed for library `%s' with error: %s\n"
 msgstr ""
 
-#: src/util/plugin.c:383
+#: src/util/plugin.c:385
 msgid "Could not determine plugin installation path.\n"
 msgstr ""
 
-#: src/util/regex.c:132
+#: src/util/program.c:283
+#, c-format
+msgid "Unreadable or malformed configuration file `%s', exit ...\n"
+msgstr ""
+
+#: src/util/program.c:301
+#, c-format
+msgid "Unreadable or malformed default configuration file `%s', exit ...\n"
+msgstr ""
+
+#: src/util/program.c:318
+msgid "Unreadable or malformed configuration, exit ...\n"
+msgstr ""
+
+#: src/util/regex.c:134
 #, c-format
 msgid "Bad mask: %d\n"
 msgstr ""
 
-#: src/util/resolver_api.c:216
+#: src/util/resolver_api.c:218
 #, c-format
 msgid ""
 "Missing `%s' for `%s' in configuration, DNS resolution will be unavailable.\n"
 msgstr ""
 
-#: src/util/resolver_api.c:237
+#: src/util/resolver_api.c:239
 #, c-format
 msgid ""
 "Missing `%s' or numeric IP address for `%s' of `%s' in configuration, DNS "
 "resolution will be unavailable.\n"
 msgstr ""
 
-#: src/util/resolver_api.c:873
+#: src/util/resolver_api.c:875
 #, c-format
 msgid "Timeout trying to resolve hostname `%s'.\n"
 msgstr ""
 
-#: src/util/resolver_api.c:886
+#: src/util/resolver_api.c:888
 #, c-format
 msgid "Timeout trying to resolve IP address `%s'.\n"
 msgstr ""
 
-#: src/util/resolver_api.c:1071
+#: src/util/resolver_api.c:1073
 msgid "Resolver not configured correctly.\n"
 msgstr ""
 
-#: src/util/resolver_api.c:1158 src/util/resolver_api.c:1181
-#: src/util/resolver_api.c:1195
+#: src/util/resolver_api.c:1160 src/util/resolver_api.c:1183
+#: src/util/resolver_api.c:1197
 #, c-format
 msgid "Could not resolve our FQDN: %s\n"
 msgstr ""
 
-#: src/util/service.c:1303
-msgid ""
-"Could not bind to any of the ports I was supposed to, refusing to run!\n"
-msgstr ""
-
-#: src/util/service.c:2123
+#: src/util/service.c:674
 #, c-format
 msgid ""
 "Processing code for message of type %u did not call "
 "`GNUNET_SERVICE_client_continue' after %s\n"
 msgstr ""
 
-#: src/util/signal.c:87
+#: src/util/service.c:1862
+msgid ""
+"Could not bind to any of the ports I was supposed to, refusing to run!\n"
+msgstr ""
+
+#: src/util/signal.c:89
 #, c-format
 msgid "signal (%d, %p) returned %d.\n"
 msgstr ""
 
-#: src/util/socks.c:595
+#: src/util/socks.c:597
 #, c-format
 msgid "Attempting to use invalid port %d as SOCKS proxy for service `%s'.\n"
 msgstr ""
 
-#: src/util/socks.c:614
+#: src/util/socks.c:616
 #, c-format
 msgid "Attempting to proxy service `%s' to invalid port %d or hostname.\n"
 msgstr ""
 
-#: src/util/strings.c:174
+#: src/util/strings.c:176
 msgid "b"
 msgstr ""
 
-#: src/util/strings.c:471
+#: src/util/strings.c:475
 #, c-format
 msgid "Character sets requested were `%s'->`%s'\n"
 msgstr ""
 
-#: src/util/strings.c:598
+#: src/util/strings.c:602
 msgid "Failed to expand `$HOME': environment variable `HOME' not set"
 msgstr ""
 
-#: src/util/strings.c:702
+#: src/util/strings.c:706
 msgid "µs"
 msgstr "µs"
 
-#: src/util/strings.c:706
+#: src/util/strings.c:710
 msgid "forever"
 msgstr "per sempre"
 
-#: src/util/strings.c:708
+#: src/util/strings.c:712
 msgid "0 ms"
 msgstr "0 ms"
 
-#: src/util/strings.c:714
+#: src/util/strings.c:718
 msgid "ms"
 msgstr "ms"
 
-#: src/util/strings.c:720
+#: src/util/strings.c:724
 msgid "s"
 msgstr "s"
 
-#: src/util/strings.c:726
+#: src/util/strings.c:730
 msgid "m"
 msgstr ""
 
-#: src/util/strings.c:732
+#: src/util/strings.c:736
 msgid "h"
 msgstr "o"
 
-#: src/util/strings.c:739
+#: src/util/strings.c:743
 msgid "day"
 msgstr "giorno"
 
-#: src/util/strings.c:741
+#: src/util/strings.c:745
 msgid "days"
 msgstr "giorni"
 
-#: src/util/strings.c:770
+#: src/util/strings.c:774
 msgid "end of time"
 msgstr ""
 
-#: src/util/strings.c:1272
+#: src/util/strings.c:1277
 msgid "IPv6 address did not start with `['\n"
 msgstr ""
 
-#: src/util/strings.c:1280
+#: src/util/strings.c:1285
 msgid "IPv6 address did contain ':' to separate port number\n"
 msgstr ""
 
-#: src/util/strings.c:1286
+#: src/util/strings.c:1291
 msgid "IPv6 address did contain ']' before ':' to separate port number\n"
 msgstr ""
 
-#: src/util/strings.c:1293
+#: src/util/strings.c:1301
 msgid "IPv6 address did contain a valid port number after the last ':'\n"
 msgstr ""
 
-#: src/util/strings.c:1302
+#: src/util/strings.c:1310
 #, c-format
 msgid "Invalid IPv6 address `%s': %s\n"
 msgstr ""
 
-#: src/util/strings.c:1574 src/util/strings.c:1590
+#: src/util/strings.c:1586 src/util/strings.c:1602
 msgid "Port not in range\n"
 msgstr ""
 
-#: src/util/strings.c:1599
+#: src/util/strings.c:1611
 #, c-format
 msgid "Malformed port policy `%s'\n"
 msgstr ""
 
-#: src/util/strings.c:1682 src/util/strings.c:1713 src/util/strings.c:1761
-#: src/util/strings.c:1782
+#: src/util/strings.c:1696 src/util/strings.c:1728 src/util/strings.c:1777
+#: src/util/strings.c:1798
 #, c-format
 msgid "Invalid format for IP: `%s'\n"
 msgstr ""
 
-#: src/util/strings.c:1739
+#: src/util/strings.c:1754
 #, c-format
 msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)."
 msgstr ""
 
-#: src/util/strings.c:1791
+#: src/util/strings.c:1807
 #, c-format
 msgid "Invalid format: `%s'\n"
 msgstr ""
 
-#: src/util/strings.c:1843
+#: src/util/strings.c:1860
 #, c-format
 msgid "Invalid network notation (does not end with ';': `%s')\n"
 msgstr ""
 
-#: src/util/strings.c:1893
+#: src/util/strings.c:1914
 #, c-format
 msgid "Wrong format `%s' for netmask\n"
 msgstr ""
 
-#: src/util/strings.c:1924
+#: src/util/strings.c:1945
 #, c-format
 msgid "Wrong format `%s' for network\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:538 src/vpn/gnunet-service-vpn.c:1805
+#: src/util/time.c:828 src/util/time.c:860
+#, c-format
+msgid "Failed to map `%s', cannot assure monotonic time!\n"
+msgstr ""
+
+#: src/util/time.c:866
+#, c-format
+msgid ""
+"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
+msgstr ""
+
+#: src/vpn/gnunet-service-vpn.c:540 src/vpn/gnunet-service-vpn.c:1807
 msgid "# Active channels"
 msgstr "# Canali attivi"
 
-#: src/vpn/gnunet-service-vpn.c:597
+#: src/vpn/gnunet-service-vpn.c:599
 msgid "# Messages dropped in cadet queue (overflow)"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:751
+#: src/vpn/gnunet-service-vpn.c:753
 msgid "# ICMP packets received from cadet"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:1094
+#: src/vpn/gnunet-service-vpn.c:1096
 msgid "# UDP packets received from cadet"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:1253
+#: src/vpn/gnunet-service-vpn.c:1255
 msgid "# TCP packets received from cadet"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:1465
+#: src/vpn/gnunet-service-vpn.c:1467
 msgid "# Cadet channels created"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:1685
+#: src/vpn/gnunet-service-vpn.c:1687
 #, c-format
 msgid "Protocol %u not supported, dropping\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:1824
+#: src/vpn/gnunet-service-vpn.c:1826
 msgid "# Packets dropped (channel not yet online)"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2004
+#: src/vpn/gnunet-service-vpn.c:2006
 msgid "# ICMPv4 packets dropped (not allowed)"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2025
+#: src/vpn/gnunet-service-vpn.c:2027
 msgid "# ICMPv6 packets dropped (not allowed)"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2233
+#: src/vpn/gnunet-service-vpn.c:2235
 msgid "# Packets received from TUN interface"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2266 src/vpn/gnunet-service-vpn.c:2302
+#: src/vpn/gnunet-service-vpn.c:2268 src/vpn/gnunet-service-vpn.c:2304
 #, c-format
 msgid "Packet received for unmapped destination `%s' (dropping it)\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2312
+#: src/vpn/gnunet-service-vpn.c:2314
 msgid "Received IPv4 packet with options (dropping it)\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2326
+#: src/vpn/gnunet-service-vpn.c:2328
 #, c-format
 msgid "Received packet of unknown protocol %d from TUN (dropping it)\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2365
+#: src/vpn/gnunet-service-vpn.c:2367
 msgid "Failed to find unallocated IPv4 address in VPN's range\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2420
+#: src/vpn/gnunet-service-vpn.c:2422
 msgid "Failed to find unallocated IPv6 address in VPN's range\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2462 src/vpn/gnunet-service-vpn.c:2684
+#: src/vpn/gnunet-service-vpn.c:2464 src/vpn/gnunet-service-vpn.c:2686
 msgid "# Active destinations"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2733
+#: src/vpn/gnunet-service-vpn.c:2735
 msgid "Failed to allocate IP address for new destination\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2996
+#: src/vpn/gnunet-service-vpn.c:2998
 msgid "Must specify valid IPv6 address"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:3020
+#: src/vpn/gnunet-service-vpn.c:3022
 msgid "Must specify valid IPv6 mask"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:3028
+#: src/vpn/gnunet-service-vpn.c:3030
 msgid "IPv6 support disabled as this system does not support IPv6\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:3041
+#: src/vpn/gnunet-service-vpn.c:3043
 msgid "Must specify valid IPv4 address"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:3054
+#: src/vpn/gnunet-service-vpn.c:3056
 msgid "Must specify valid IPv4 mask"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:3064
+#: src/vpn/gnunet-service-vpn.c:3066
 msgid "IPv4 support disabled as this system does not support IPv4\n"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:145
+#: src/vpn/gnunet-vpn.c:147
 msgid "Error creating tunnel\n"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:189 src/vpn/gnunet-vpn.c:220
+#: src/vpn/gnunet-vpn.c:191 src/vpn/gnunet-vpn.c:222
 #, c-format
 msgid "Option `%s' makes no sense with option `%s'.\n"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:202
+#: src/vpn/gnunet-vpn.c:204
 #, c-format
 msgid "Option `%s' or `%s' is required.\n"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:214
+#: src/vpn/gnunet-vpn.c:216
 #, c-format
 msgid "Option `%s' or `%s' is required when using option `%s'.\n"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:234
+#: src/vpn/gnunet-vpn.c:236
 #, c-format
 msgid "`%s' is not a valid peer identifier.\n"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:254
+#: src/vpn/gnunet-vpn.c:256
 #, c-format
 msgid "`%s' is not a valid IP address.\n"
 msgstr "`%s' non è un indirizzo IP valido.\n"
 
-#: src/vpn/gnunet-vpn.c:290
+#: src/vpn/gnunet-vpn.c:292
 msgid "request that result should be an IPv4 address"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:295
+#: src/vpn/gnunet-vpn.c:297
 msgid "request that result should be an IPv6 address"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:301
+#: src/vpn/gnunet-vpn.c:303
 msgid "how long should the mapping be valid for new tunnels?"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:307
+#: src/vpn/gnunet-vpn.c:309
 msgid "destination IP for the tunnel"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:313
+#: src/vpn/gnunet-vpn.c:315
 msgid "peer offering the service we would like to access"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:319
+#: src/vpn/gnunet-vpn.c:321
 msgid "name of the service we would like to access"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:324
+#: src/vpn/gnunet-vpn.c:326
 msgid "service is offered via TCP"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:329
+#: src/vpn/gnunet-vpn.c:331
 msgid "service is offered via UDP"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:342
+#: src/vpn/gnunet-vpn.c:344
 msgid "Setup tunnels via VPN."
 msgstr ""
 
-#: src/zonemaster/gnunet-service-zonemaster.c:836
-#: src/zonemaster/gnunet-service-zonemaster-monitor.c:414
+#: src/zonemaster/gnunet-service-zonemaster.c:838
+#: src/zonemaster/gnunet-service-zonemaster-monitor.c:416
 msgid "Failed to connect to the namestore!\n"
 msgstr ""
 
-#: src/include/gnunet_common.h:770 src/include/gnunet_common.h:777
-#: src/include/gnunet_common.h:787
+#: src/include/gnunet_common.h:772 src/include/gnunet_common.h:779
+#: src/include/gnunet_common.h:789
 #, c-format
 msgid "Assertion failed at %s:%d. Aborting.\n"
 msgstr ""
 
-#: src/include/gnunet_common.h:795
+#: src/include/gnunet_common.h:797
 #, c-format
 msgid "Assertion failed at %s:%d.\n"
 msgstr ""
 
-#: src/include/gnunet_common.h:807
+#: src/include/gnunet_common.h:809
 #, c-format
 msgid "External protocol violation detected at %s:%d.\n"
 msgstr ""
 
-#: src/include/gnunet_common.h:834 src/include/gnunet_common.h:843
+#: src/include/gnunet_common.h:836 src/include/gnunet_common.h:845
 #, c-format
 msgid "`%s' failed on file `%s' at %s:%d with error: %s\n"
 msgstr ""
index 388ff2f82b19d2f8b8394f4e4f5cb3807038e784..ca713d7d87d6bfe67fb3ab1ac6f959573f6a4afc 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNUnet 0.7.0b\n"
 "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2018-10-20 11:13+0200\n"
+"POT-Creation-Date: 2019-02-13 00:37+0100\n"
 "PO-Revision-Date: 2006-01-21 17:16+0100\n"
 "Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
@@ -16,1042 +16,1036 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: src/arm/gnunet-arm.c:154
+#: src/arm/gnunet-arm.c:156
 #, fuzzy, c-format
 msgid "Failed to remove configuration file %s\n"
 msgstr "Kunde inte spara konfigurationsfil \"%s\":"
 
-#: src/arm/gnunet-arm.c:160
+#: src/arm/gnunet-arm.c:162
 #, fuzzy, c-format
 msgid "Failed to remove servicehome directory %s\n"
 msgstr "Filformatsfel (inte en GNUnet-katalog?)\n"
 
-#: src/arm/gnunet-arm.c:220 src/testbed/gnunet-service-testbed_peers.c:1137
+#: src/arm/gnunet-arm.c:222 src/testbed/gnunet-service-testbed_peers.c:1139
 msgid "Message was sent successfully"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:222 src/testbed/gnunet-service-testbed_peers.c:1139
+#: src/arm/gnunet-arm.c:224 src/testbed/gnunet-service-testbed_peers.c:1141
 #, fuzzy
 msgid "We disconnected from ARM before we could send a request"
 msgstr "# av anslutna parter"
 
-#: src/arm/gnunet-arm.c:224 src/testbed/gnunet-service-testbed_peers.c:1141
+#: src/arm/gnunet-arm.c:226 src/testbed/gnunet-service-testbed_peers.c:1143
 #, fuzzy
 msgid "Unknown request status"
 msgstr "Okänd operation \"%s\"\n"
 
-#: src/arm/gnunet-arm.c:240
+#: src/arm/gnunet-arm.c:242
 #, fuzzy
 msgid "is stopped"
 msgstr "# byte krypterade"
 
-#: src/arm/gnunet-arm.c:242
+#: src/arm/gnunet-arm.c:244
 #, fuzzy
 msgid "is starting"
 msgstr "\"%s\" startar\n"
 
-#: src/arm/gnunet-arm.c:244
+#: src/arm/gnunet-arm.c:246
 #, fuzzy
 msgid "is stopping"
 msgstr "# byte krypterade"
 
-#: src/arm/gnunet-arm.c:246
+#: src/arm/gnunet-arm.c:248
 #, fuzzy
 msgid "is starting already"
 msgstr "\"%s\" startar\n"
 
-#: src/arm/gnunet-arm.c:248
+#: src/arm/gnunet-arm.c:250
 #, fuzzy
 msgid "is stopping already"
 msgstr "\"%s\" startar\n"
 
-#: src/arm/gnunet-arm.c:250
+#: src/arm/gnunet-arm.c:252
 #, fuzzy
 msgid "is started already"
 msgstr "\"%s\" startar\n"
 
-#: src/arm/gnunet-arm.c:252
+#: src/arm/gnunet-arm.c:254
 #, fuzzy
 msgid "is stopped already"
 msgstr "\"%s\" startar\n"
 
-#: src/arm/gnunet-arm.c:254
+#: src/arm/gnunet-arm.c:256
 #, fuzzy
 msgid "service is not known to ARM"
 msgstr "\"%s\" är inte en fil.\n"
 
-#: src/arm/gnunet-arm.c:256
+#: src/arm/gnunet-arm.c:258
 #, fuzzy
 msgid "service failed to start"
 msgstr "Misslyckades att starta samling.\n"
 
-#: src/arm/gnunet-arm.c:258
+#: src/arm/gnunet-arm.c:260
 msgid "service cannot be manipulated because ARM is shutting down"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:260
+#: src/arm/gnunet-arm.c:262
 #, fuzzy
 msgid "Unknown result code."
 msgstr "Okänd operation \"%s\"\n"
 
-#: src/arm/gnunet-arm.c:292
+#: src/arm/gnunet-arm.c:295
 msgid "Fatal error initializing ARM API.\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:320 src/arm/gnunet-arm.c:329
+#: src/arm/gnunet-arm.c:324 src/arm/gnunet-arm.c:333
 #, fuzzy, c-format
 msgid "Failed to start the ARM service: %s\n"
 msgstr "Misslyckades att starta samling.\n"
 
-#: src/arm/gnunet-arm.c:363
+#: src/arm/gnunet-arm.c:368
 #, fuzzy, c-format
 msgid "Failed to send a stop request to the ARM service: %s\n"
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/arm/gnunet-arm.c:374
+#: src/arm/gnunet-arm.c:379
 #, fuzzy, c-format
 msgid "Failed to stop the ARM service: %s\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/arm/gnunet-arm.c:413
+#: src/arm/gnunet-arm.c:419
 #, fuzzy, c-format
 msgid "Failed to send a request to start the `%s' service: %s\n"
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/arm/gnunet-arm.c:423
+#: src/arm/gnunet-arm.c:429
 #, fuzzy, c-format
 msgid "Failed to start the `%s' service: %s\n"
 msgstr "Misslyckades att starta samling.\n"
 
-#: src/arm/gnunet-arm.c:460
+#: src/arm/gnunet-arm.c:467
 #, fuzzy, c-format
 msgid "Failed to send a request to kill the `%s' service: %%s\n"
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/arm/gnunet-arm.c:471
+#: src/arm/gnunet-arm.c:478
 #, fuzzy, c-format
 msgid "Failed to kill the `%s' service: %s\n"
 msgstr "Fel vid %s:%d.\n"
 
-#: src/arm/gnunet-arm.c:511
+#: src/arm/gnunet-arm.c:519
 #, fuzzy, c-format
 msgid "Failed to request a list of services: %s\n"
 msgstr "Misslyckades att starta samling.\n"
 
-#: src/arm/gnunet-arm.c:520
+#: src/arm/gnunet-arm.c:528
 #, fuzzy
 msgid "Error communicating with ARM. ARM not running?\n"
 msgstr "Skriv ut information om GNUnets motparter."
 
-#: src/arm/gnunet-arm.c:526
+#: src/arm/gnunet-arm.c:534
 #, fuzzy
 msgid "Running services:\n"
 msgstr "Startade samling \"%s\".\n"
 
-#: src/arm/gnunet-arm.c:614
+#: src/arm/gnunet-arm.c:623
 #, c-format
 msgid "Now only monitoring, press CTRL-C to stop.\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:646
+#: src/arm/gnunet-arm.c:656
 #, c-format
 msgid "Stopped %s.\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:649
+#: src/arm/gnunet-arm.c:659
 #, fuzzy, c-format
 msgid "Starting %s...\n"
 msgstr "Startade samling \"%s\".\n"
 
-#: src/arm/gnunet-arm.c:652
+#: src/arm/gnunet-arm.c:662
 #, c-format
 msgid "Stopping %s...\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:666
+#: src/arm/gnunet-arm.c:676
 #, fuzzy, c-format
 msgid "Unknown status %u for service %s.\n"
 msgstr "Okänd operation \"%s\"\n"
 
-#: src/arm/gnunet-arm.c:767
+#: src/arm/gnunet-arm.c:766
 msgid "stop all GNUnet services"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:773
+#: src/arm/gnunet-arm.c:771
 msgid "start a particular service"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:779
+#: src/arm/gnunet-arm.c:776
 msgid "stop a particular service"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:784
+#: src/arm/gnunet-arm.c:780
 msgid "start all GNUnet default services"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:789
+#: src/arm/gnunet-arm.c:784
 msgid "stop and start all GNUnet default services"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:793
+#: src/arm/gnunet-arm.c:788
 msgid "delete config file and directory on exit"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:798
+#: src/arm/gnunet-arm.c:792
 msgid "monitor ARM activities"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:803
+#: src/arm/gnunet-arm.c:796
 msgid "don't print status messages"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:809
+#: src/arm/gnunet-arm.c:801
 msgid "exit with error status if operation does not finish after DELAY"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:814
+#: src/arm/gnunet-arm.c:805
 #, fuzzy
 msgid "list currently running services"
 msgstr "Startade samling \"%s\".\n"
 
-#: src/arm/gnunet-arm.c:819
+#: src/arm/gnunet-arm.c:809
 msgid "don't let gnunet-service-arm inherit standard output"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:824
+#: src/arm/gnunet-arm.c:813
 msgid "don't let gnunet-service-arm inherit standard error"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:837
+#: src/arm/gnunet-arm.c:828
 msgid "Control services and the Automated Restart Manager (ARM)"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:386 src/transport/plugin_transport_tcp.c:1118
-#: src/transport/plugin_transport_xt.c:1118
-#: src/transport/tcp_service_legacy.c:555 src/util/service.c:610
+#: src/arm/gnunet-service-arm.c:388 src/transport/plugin_transport_tcp.c:1120
+#: src/transport/plugin_transport_xt.c:1120
+#: src/transport/tcp_service_legacy.c:557 src/util/service.c:1167
 #, c-format
 msgid ""
 "Disabling IPv6 support for service `%s', failed to create IPv6 socket: %s\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:410 src/arm/gnunet-service-arm.c:416
-#: src/transport/plugin_transport_tcp.c:1137
-#: src/transport/plugin_transport_tcp.c:1143
-#: src/transport/plugin_transport_tcp.c:3823
-#: src/transport/plugin_transport_xt.c:1137
-#: src/transport/plugin_transport_xt.c:1143
-#: src/transport/plugin_transport_xt.c:3831
-#: src/transport/tcp_service_legacy.c:574
-#: src/transport/tcp_service_legacy.c:580 src/util/service.c:635
-#: src/util/service.c:641
+#: src/arm/gnunet-service-arm.c:412 src/arm/gnunet-service-arm.c:418
+#: src/transport/plugin_transport_tcp.c:1139
+#: src/transport/plugin_transport_tcp.c:1145
+#: src/transport/plugin_transport_tcp.c:3829
+#: src/transport/plugin_transport_xt.c:1139
+#: src/transport/plugin_transport_xt.c:1145
+#: src/transport/plugin_transport_xt.c:3833
+#: src/transport/tcp_service_legacy.c:576
+#: src/transport/tcp_service_legacy.c:582 src/util/service.c:1192
+#: src/util/service.c:1198
 #, c-format
 msgid "Require valid port number for service `%s' in configuration!\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:455 src/transport/plugin_transport_tcp.c:1174
-#: src/transport/plugin_transport_xt.c:1174
-#: src/transport/tcp_service_legacy.c:611 src/util/client.c:504
-#: src/util/service.c:680
+#: src/arm/gnunet-service-arm.c:457 src/transport/plugin_transport_tcp.c:1176
+#: src/transport/plugin_transport_xt.c:1176
+#: src/transport/tcp_service_legacy.c:613 src/util/client.c:506
+#: src/util/service.c:1237
 #, c-format
 msgid "UNIXPATH `%s' too long, maximum length is %llu\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:460 src/transport/plugin_transport_tcp.c:1178
-#: src/transport/plugin_transport_xt.c:1178
-#: src/transport/tcp_service_legacy.c:615 src/util/client.c:509
-#: src/util/service.c:685
+#: src/arm/gnunet-service-arm.c:462 src/transport/plugin_transport_tcp.c:1180
+#: src/transport/plugin_transport_xt.c:1180
+#: src/transport/tcp_service_legacy.c:617 src/util/client.c:511
+#: src/util/service.c:1242
 #, fuzzy, c-format
 msgid "Using `%s' instead\n"
 msgstr "%s: flagga \"%s\" är tvetydig\n"
 
-#: src/arm/gnunet-service-arm.c:493 src/transport/plugin_transport_tcp.c:1209
-#: src/transport/plugin_transport_xt.c:1209
-#: src/transport/tcp_service_legacy.c:646 src/util/service.c:721
+#: src/arm/gnunet-service-arm.c:495 src/transport/plugin_transport_tcp.c:1211
+#: src/transport/plugin_transport_xt.c:1211
+#: src/transport/tcp_service_legacy.c:648 src/util/service.c:1278
 #, c-format
 msgid ""
 "Disabling UNIX domain socket support for service `%s', failed to create UNIX "
 "domain socket: %s\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:515 src/transport/plugin_transport_tcp.c:1226
-#: src/transport/plugin_transport_xt.c:1226
-#: src/transport/tcp_service_legacy.c:663 src/util/service.c:739
+#: src/arm/gnunet-service-arm.c:517 src/transport/plugin_transport_tcp.c:1228
+#: src/transport/plugin_transport_xt.c:1228
+#: src/transport/tcp_service_legacy.c:665 src/util/service.c:1296
 #, c-format
 msgid "Have neither PORT nor UNIXPATH for service `%s', but one is required\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:554
-#: src/transport/plugin_transport_http_server.c:2682
-#: src/transport/plugin_transport_tcp.c:1257
-#: src/transport/plugin_transport_xt.c:1257
-#: src/transport/tcp_service_legacy.c:694 src/util/service.c:780
+#: src/arm/gnunet-service-arm.c:556
+#: src/transport/plugin_transport_http_server.c:2688
+#: src/transport/plugin_transport_tcp.c:1259
+#: src/transport/plugin_transport_xt.c:1259
+#: src/transport/tcp_service_legacy.c:696 src/util/service.c:1337
 #, fuzzy, c-format
 msgid "Failed to resolve `%s': %s\n"
 msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
 
-#: src/arm/gnunet-service-arm.c:573
-#: src/transport/plugin_transport_http_server.c:2700
-#: src/transport/plugin_transport_tcp.c:1276
-#: src/transport/plugin_transport_xt.c:1276
-#: src/transport/tcp_service_legacy.c:713 src/util/service.c:800
+#: src/arm/gnunet-service-arm.c:575
+#: src/transport/plugin_transport_http_server.c:2706
+#: src/transport/plugin_transport_tcp.c:1278
+#: src/transport/plugin_transport_xt.c:1278
+#: src/transport/tcp_service_legacy.c:715 src/util/service.c:1357
 #, fuzzy, c-format
 msgid "Failed to find %saddress for `%s'.\n"
 msgstr "Misslyckades att binda till UDP-port %d.\n"
 
-#: src/arm/gnunet-service-arm.c:984
+#: src/arm/gnunet-service-arm.c:986
 #, fuzzy, c-format
 msgid "Failed to start service `%s'\n"
 msgstr "Misslyckades att starta samling.\n"
 
-#: src/arm/gnunet-service-arm.c:995
+#: src/arm/gnunet-service-arm.c:997
 #, fuzzy, c-format
 msgid "Starting service `%s'\n"
 msgstr "Startade samling \"%s\".\n"
 
-#: src/arm/gnunet-service-arm.c:1107
+#: src/arm/gnunet-service-arm.c:1109
 #, fuzzy, c-format
 msgid "Unable to create socket for service `%s': %s\n"
 msgstr "Kunde inte skapa användarkonto:"
 
-#: src/arm/gnunet-service-arm.c:1142
+#: src/arm/gnunet-service-arm.c:1144
 #, c-format
 msgid "Unable to bind listening socket for service `%s' to address `%s': %s\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1185
+#: src/arm/gnunet-service-arm.c:1187
 #, c-format
 msgid "ARM now monitors connections to service `%s' at `%s'\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1364
+#: src/arm/gnunet-service-arm.c:1346
 #, fuzzy, c-format
 msgid "Preparing to stop `%s'\n"
 msgstr "Startade samling \"%s\".\n"
 
-#: src/arm/gnunet-service-arm.c:1669
+#: src/arm/gnunet-service-arm.c:1651
 #, fuzzy, c-format
 msgid "Restarting service `%s'.\n"
 msgstr "Startade samling \"%s\".\n"
 
-#: src/arm/gnunet-service-arm.c:1830
+#: src/arm/gnunet-service-arm.c:1812
 msgid "exit"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1835
+#: src/arm/gnunet-service-arm.c:1817
 msgid "signal"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1840
+#: src/arm/gnunet-service-arm.c:1822
 #, fuzzy
 msgid "unknown"
 msgstr "Okänt fel"
 
-#: src/arm/gnunet-service-arm.c:1846
+#: src/arm/gnunet-service-arm.c:1828
 #, fuzzy, c-format
 msgid "Service `%s' took %s to terminate\n"
 msgstr "Tjänst borttagen.\n"
 
-#: src/arm/gnunet-service-arm.c:1872
+#: src/arm/gnunet-service-arm.c:1854
 #, c-format
 msgid "Service `%s' terminated normally, will restart at any time\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1888
+#: src/arm/gnunet-service-arm.c:1870
 #, c-format
 msgid "Service `%s' terminated with status %s/%d, will restart in %s\n"
 msgstr ""
 
-#: src/arm/mockup-service.c:40
+#: src/arm/mockup-service.c:42
 msgid "Initiating shutdown as requested by client.\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:2779 src/ats/gnunet-ats-solver-eval.c:2820
+#: src/ats/gnunet-ats-solver-eval.c:2781 src/ats/gnunet-ats-solver-eval.c:2822
 #, c-format
 msgid ""
 "Could not load quota for network `%s':  `%s', assigning default bandwidth "
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:2797
+#: src/ats/gnunet-ats-solver-eval.c:2799
 #, c-format
 msgid ""
 "No outbound quota configured for network `%s', assigning default bandwidth "
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:2838
+#: src/ats/gnunet-ats-solver-eval.c:2840
 #, c-format
 msgid ""
 "No outbound quota configure for network `%s', assigning default bandwidth "
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3292 src/ats-tests/gnunet-solver-eval.c:937
+#: src/ats/gnunet-ats-solver-eval.c:3294 src/ats-tests/gnunet-solver-eval.c:939
 msgid "solver to use"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3297 src/ats-tests/gnunet-solver-eval.c:943
-#: src/ats-tests/gnunet-solver-eval.c:948
+#: src/ats/gnunet-ats-solver-eval.c:3299 src/ats-tests/gnunet-solver-eval.c:945
+#: src/ats-tests/gnunet-solver-eval.c:950
 msgid "experiment to use"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3304
+#: src/ats/gnunet-ats-solver-eval.c:3306
 #, fuzzy
 msgid "print logging"
 msgstr "Startade samling \"%s\".\n"
 
-#: src/ats/gnunet-ats-solver-eval.c:3309
+#: src/ats/gnunet-ats-solver-eval.c:3311
 msgid "save logging to disk"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3314
+#: src/ats/gnunet-ats-solver-eval.c:3316
 msgid "disable normalization"
 msgstr ""
 
-#: src/ats/gnunet-service-ats_plugins.c:302
+#: src/ats/gnunet-service-ats-new.c:756
+#: src/ats/gnunet-service-ats_plugins.c:451
+#, fuzzy, c-format
+msgid "Failed to initialize solver `%s'!\n"
+msgstr "Kunde inte initiera SQLite.\n"
+
+#: src/ats/gnunet-service-ats_plugins.c:304
 #, c-format
 msgid ""
 "Could not load %s quota for network `%s':  `%s', assigning default bandwidth "
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-service-ats_plugins.c:312
+#: src/ats/gnunet-service-ats_plugins.c:314
 #, c-format
 msgid "%s quota configured for network `%s' is %llu\n"
 msgstr ""
 
-#: src/ats/gnunet-service-ats_plugins.c:357
+#: src/ats/gnunet-service-ats_plugins.c:359
 #, c-format
 msgid ""
 "No %s-quota configured for network `%s', assigning default bandwidth %llu\n"
 msgstr ""
 
-#: src/ats/gnunet-service-ats_plugins.c:449
-#, fuzzy, c-format
-msgid "Failed to initialize solver `%s'!\n"
-msgstr "Kunde inte initiera SQLite.\n"
+#: src/ats/plugin_ats2_common.c:90
+#, c-format
+msgid ""
+"Could not load %s quota for network `%s': `%s', assigning default bandwidth "
+"%llu\n"
+msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:1272
+#: src/ats/plugin_ats_mlp.c:1274
 msgid "Problem size too large, cannot allocate memory!\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:1868
+#: src/ats/plugin_ats_mlp.c:1870
 #, fuzzy, c-format
 msgid "Adding address for peer `%s' multiple times\n"
 msgstr "Motpart \"%s\" med pålitlighet %8u och adress \"%s\"\n"
 
-#: src/ats/plugin_ats_mlp.c:1912
+#: src/ats/plugin_ats_mlp.c:1914
 #, fuzzy, c-format
 msgid "Updating address property for peer `%s' %p not added before\n"
 msgstr "Motpart \"%s\" med pålitlighet %8u och adress \"%s\"\n"
 
-#: src/ats/plugin_ats_mlp.c:2474
+#: src/ats/plugin_ats_mlp.c:2476
 msgid ""
 "MLP solver is not optimizing for anything, changing to feasibility check\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:2514 src/ats/plugin_ats_mlp.c:2531
-#: src/ats/plugin_ats_mlp.c:2563 src/ats/plugin_ats_mlp.c:2581
-#: src/ats/plugin_ats_mlp.c:2600 src/ats/plugin_ats_proportional.c:1139
-#: src/ats/plugin_ats_ril.c:2610 src/ats/plugin_ats_ril.c:2627
-#: src/ats/plugin_ats_ril.c:2644 src/ats/plugin_ats_ril.c:2661
-#: src/ats/plugin_ats_ril.c:2678 src/ats/plugin_ats_ril.c:2695
-#: src/ats/plugin_ats_ril.c:2712 src/ats/plugin_ats_ril.c:2729
+#: src/ats/plugin_ats_mlp.c:2516 src/ats/plugin_ats_mlp.c:2533
+#: src/ats/plugin_ats_mlp.c:2565 src/ats/plugin_ats_mlp.c:2583
+#: src/ats/plugin_ats_mlp.c:2602 src/ats/plugin_ats_proportional.c:1141
+#: src/ats/plugin_ats_ril.c:2612 src/ats/plugin_ats_ril.c:2629
+#: src/ats/plugin_ats_ril.c:2646 src/ats/plugin_ats_ril.c:2663
+#: src/ats/plugin_ats_ril.c:2680 src/ats/plugin_ats_ril.c:2697
+#: src/ats/plugin_ats_ril.c:2714 src/ats/plugin_ats_ril.c:2731
 #, fuzzy, c-format
 msgid "Invalid %s configuration %f \n"
 msgstr "Kunde inte spara konfigurationsfil \"%s\":"
 
-#: src/ats/plugin_ats_mlp.c:2669
+#: src/ats/plugin_ats_mlp.c:2671
 #, c-format
 msgid ""
 "Adjusting inconsistent outbound quota configuration for network `%s', is "
 "%llu must be at least %llu\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:2678
+#: src/ats/plugin_ats_mlp.c:2680
 #, c-format
 msgid ""
 "Adjusting inconsistent inbound quota configuration for network `%s', is %llu "
 "must be at least %llu\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:2688
+#: src/ats/plugin_ats_mlp.c:2690
 #, c-format
 msgid ""
 "Adjusting outbound quota configuration for network `%s'from %llu to %.0f\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:2697
+#: src/ats/plugin_ats_mlp.c:2699
 #, c-format
 msgid ""
 "Adjusting inbound quota configuration for network `%s' from %llu to %.0f\n"
 msgstr ""
 
-#: src/ats/plugin_ats_proportional.c:1162
+#: src/ats/plugin_ats_proportional.c:1164
 #, fuzzy, c-format
 msgid "Invalid %s configuration %f\n"
 msgstr "Kunde inte spara konfigurationsfil \"%s\":"
 
-#: src/ats-tests/ats-testing.c:420
+#: src/ats-tests/ats-testing.c:422
 #, c-format
 msgid "Connected master [%u] with slave [%u]\n"
 msgstr ""
 
-#: src/ats-tests/ats-testing.c:427
+#: src/ats-tests/ats-testing.c:429
 #, fuzzy, c-format
 msgid "Failed to connect master peer [%u] with slave [%u]\n"
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/ats-tests/ats-testing-log.c:835
+#: src/ats-tests/ats-testing-log.c:837
 msgid "Stop logging\n"
 msgstr ""
 
-#: src/ats-tests/ats-testing-log.c:890
+#: src/ats-tests/ats-testing-log.c:892
 #, fuzzy, c-format
 msgid "Start logging `%s'\n"
 msgstr "Startade samling \"%s\".\n"
 
-#: src/ats-tests/gnunet-ats-sim.c:88
+#: src/ats-tests/gnunet-ats-sim.c:90
 #, c-format
 msgid ""
 "Master [%u]: sent: %u KiB in %u sec. = %u KiB/s, received: %u KiB in %u sec. "
 "= %u KiB/s\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:305
+#: src/ats-tool/gnunet-ats.c:307
 #, c-format
 msgid "%u address resolutions had a timeout\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:309
+#: src/ats-tool/gnunet-ats.c:311
 #, c-format
 msgid "ATS returned stat_results for %u addresses\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:393
+#: src/ats-tool/gnunet-ats.c:395
 #, fuzzy, c-format
 msgid ""
 "Peer `%s' plugin `%s', address `%s', `%s' bw out: %u Bytes/s, bw in %u Bytes/"
 "s, %s\n"
 msgstr "Motpart \"%s\" med pålitlighet %8u och adress \"%s\"\n"
 
-#: src/ats-tool/gnunet-ats.c:400
+#: src/ats-tool/gnunet-ats.c:402
 msgid "active "
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:400
+#: src/ats-tool/gnunet-ats.c:402
 msgid "inactive "
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:510
+#: src/ats-tool/gnunet-ats.c:512
 #, fuzzy, c-format
 msgid "Removed address of peer `%s' with plugin `%s'\n"
 msgstr "Tillgängliga transport(er): %s\n"
 
-#: src/ats-tool/gnunet-ats.c:703
+#: src/ats-tool/gnunet-ats.c:705
 #, c-format
 msgid "Quota for network `%11s' (in/out): %10s / %10s\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:746 src/ats-tool/gnunet-ats.c:759
+#: src/ats-tool/gnunet-ats.c:748 src/ats-tool/gnunet-ats.c:761
 #, fuzzy, c-format
 msgid "Failed to parse peer identity `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/ats-tool/gnunet-ats.c:771
+#: src/ats-tool/gnunet-ats.c:773
 #, c-format
 msgid "Please select one operation: %s or %s or %s or %s or %s\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:793 src/ats-tool/gnunet-ats.c:818
-#: src/ats-tool/gnunet-ats.c:849 src/ats-tool/gnunet-ats.c:894
+#: src/ats-tool/gnunet-ats.c:795 src/ats-tool/gnunet-ats.c:820
+#: src/ats-tool/gnunet-ats.c:851 src/ats-tool/gnunet-ats.c:896
 #, fuzzy
 msgid "Cannot connect to ATS service, exiting...\n"
 msgstr "Misslyckades att initiera tjänsten \"%s\".\n"
 
-#: src/ats-tool/gnunet-ats.c:804 src/ats-tool/gnunet-ats.c:830
+#: src/ats-tool/gnunet-ats.c:806 src/ats-tool/gnunet-ats.c:832
 #, fuzzy
 msgid "Cannot issue request to ATS service, exiting...\n"
 msgstr "Misslyckades att initiera tjänsten \"%s\".\n"
 
-#: src/ats-tool/gnunet-ats.c:860
+#: src/ats-tool/gnunet-ats.c:862
 #, fuzzy
 msgid "No preference type given!\n"
 msgstr "Skriv ut information om GNUnets motparter."
 
-#: src/ats-tool/gnunet-ats.c:867
+#: src/ats-tool/gnunet-ats.c:869
 msgid "No peer given!\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:885
+#: src/ats-tool/gnunet-ats.c:887
 msgid "Valid type required\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:948
+#: src/ats-tool/gnunet-ats.c:950
 msgid "get list of active addresses currently used"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:952
+#: src/ats-tool/gnunet-ats.c:954
 msgid "get list of all active addresses"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:958
+#: src/ats-tool/gnunet-ats.c:960
 #, fuzzy
 msgid "connect to PEER"
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/ats-tool/gnunet-ats.c:962
+#: src/ats-tool/gnunet-ats.c:964
 #, fuzzy
 msgid "do not resolve IP addresses to hostnames"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/ats-tool/gnunet-ats.c:967
+#: src/ats-tool/gnunet-ats.c:969
 msgid "monitor mode"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:972
+#: src/ats-tool/gnunet-ats.c:974
 #, fuzzy
 msgid "set preference for the given peer"
 msgstr "Skriv ut information om GNUnets motparter."
 
-#: src/ats-tool/gnunet-ats.c:977
+#: src/ats-tool/gnunet-ats.c:979
 msgid "print all configured quotas"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:982
+#: src/ats-tool/gnunet-ats.c:984
 msgid "peer id"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:988
+#: src/ats-tool/gnunet-ats.c:990
 msgid "preference type to set: latency | bandwidth"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:994
+#: src/ats-tool/gnunet-ats.c:996
 msgid "preference value"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:999
+#: src/ats-tool/gnunet-ats.c:1001
 msgid "verbose output (include ATS address properties)"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:1009
+#: src/ats-tool/gnunet-ats.c:1011
 #, fuzzy
 msgid "Print information about ATS state"
 msgstr "Skriv ut information om GNUnets motparter."
 
-#: src/auction/gnunet-auction-create.c:161
+#: src/auction/gnunet-auction-create.c:163
 msgid "description of the item to be sold"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:167
+#: src/auction/gnunet-auction-create.c:169
 msgid "mapping of possible prices"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:173
+#: src/auction/gnunet-auction-create.c:175
 msgid "max duration per round"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:179
+#: src/auction/gnunet-auction-create.c:181
 msgid "duration until auction starts"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:184
+#: src/auction/gnunet-auction-create.c:186
 msgid ""
 "number of items to sell\n"
 "0 for first price auction\n"
 ">0 for vickrey/M+1st price auction"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:191
+#: src/auction/gnunet-auction-create.c:193
 msgid "public auction outcome"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:196
+#: src/auction/gnunet-auction-create.c:198
 msgid "keep running in foreground until auction completes"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:207
+#: src/auction/gnunet-auction-create.c:209
 msgid "create a new auction and start listening for bidders"
 msgstr ""
 
-#: src/auction/gnunet-auction-info.c:74 src/auction/gnunet-auction-join.c:74
-#: src/conversation/gnunet-conversation-test.c:252
-#: src/revocation/gnunet-revocation.c:560 src/template/gnunet-template.c:74
+#: src/auction/gnunet-auction-info.c:76 src/auction/gnunet-auction-join.c:76
+#: src/conversation/gnunet-conversation-test.c:254
+#: src/revocation/gnunet-revocation.c:562 src/template/gnunet-template.c:76
 #, fuzzy
 msgid "help text"
 msgstr "hjälptext för -t"
 
-#: src/cadet/gnunet-cadet.c:705
+#: src/cadet/gnunet-cadet.c:631
 #, fuzzy, c-format
 msgid "Invalid peer ID `%s'\n"
 msgstr "Ogiltiga argument: "
 
-#: src/cadet/gnunet-cadet.c:744
-#, fuzzy, c-format
-msgid "Invalid tunnel owner `%s'\n"
-msgstr "Ogiltigt format för IP: \"%s\"\n"
-
-#: src/cadet/gnunet-cadet.c:817
+#: src/cadet/gnunet-cadet.c:718
 msgid "Extra arguments are not applicable in combination with this option.\n"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:908
+#: src/cadet/gnunet-cadet.c:795
 #, fuzzy, c-format
 msgid "Invalid target `%s'\n"
 msgstr "Ogiltigt argument: \"%s\"\n"
 
-#: src/cadet/gnunet-cadet.c:945
+#: src/cadet/gnunet-cadet.c:832
 #, fuzzy
 msgid "No action requested\n"
 msgstr "Samling stoppad.\n"
 
-#: src/cadet/gnunet-cadet.c:970
+#: src/cadet/gnunet-cadet.c:857
 #, fuzzy
 msgid "Provide information about a particular connection"
 msgstr "Skriv ut information om GNUnets motparter."
 
-#: src/cadet/gnunet-cadet.c:975
+#: src/cadet/gnunet-cadet.c:861
 msgid "Activate echo mode"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:980
-msgid "Dump debug information to STDERR"
-msgstr ""
-
-#: src/cadet/gnunet-cadet.c:986
+#: src/cadet/gnunet-cadet.c:866
 msgid "Listen for connections using a shared secret among sender and recipient"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:993
+#: src/cadet/gnunet-cadet.c:871
 #, fuzzy
 msgid "Provide information about a patricular peer"
 msgstr "Skriv ut information om GNUnets motparter."
 
-#: src/cadet/gnunet-cadet.c:999
+#: src/cadet/gnunet-cadet.c:875
 #, fuzzy
 msgid "Provide information about all peers"
 msgstr "Skriv ut information om GNUnets motparter."
 
-#: src/cadet/gnunet-cadet.c:1005
-#, fuzzy
-msgid "Provide information about a particular tunnel"
-msgstr "Skriv ut information om GNUnets motparter."
-
-#: src/cadet/gnunet-cadet.c:1011
+#: src/cadet/gnunet-cadet.c:879
 #, fuzzy
 msgid "Provide information about all tunnels"
 msgstr "Skriv ut information om GNUnets motparter."
 
-#: src/consensus/gnunet-consensus-profiler.c:521
-#: src/secretsharing/gnunet-secretsharing-profiler.c:608
+#: src/consensus/gnunet-consensus-profiler.c:523
+#: src/secretsharing/gnunet-secretsharing-profiler.c:610
 #, fuzzy
 msgid "number of peers in consensus"
 msgstr "antal iterationer"
 
-#: src/consensus/gnunet-consensus-profiler.c:527
+#: src/consensus/gnunet-consensus-profiler.c:529
 msgid ""
 "how many peers (random selection without replacement) receive one value?"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:533
-#: src/set/gnunet-set-profiler.c:431 src/set/gnunet-set-profiler.c:437
-#: src/set/gnunet-set-profiler.c:460
+#: src/consensus/gnunet-consensus-profiler.c:535
+#: src/set/gnunet-set-profiler.c:433 src/set/gnunet-set-profiler.c:439
+#: src/set/gnunet-set-profiler.c:462
 #, fuzzy
 msgid "number of values"
 msgstr "antal iterationer"
 
-#: src/consensus/gnunet-consensus-profiler.c:539
+#: src/consensus/gnunet-consensus-profiler.c:541
 #, fuzzy
 msgid "consensus timeout"
 msgstr "# sessionsnycklar accepterade"
 
-#: src/consensus/gnunet-consensus-profiler.c:546
+#: src/consensus/gnunet-consensus-profiler.c:548
 msgid "delay until consensus starts"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:552
-#: src/set/gnunet-set-profiler.c:478
+#: src/consensus/gnunet-consensus-profiler.c:554
+#: src/set/gnunet-set-profiler.c:480
 msgid "write statistics to file"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:557
+#: src/consensus/gnunet-consensus-profiler.c:559
 msgid "distribute elements to a static subset of good peers"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:562
+#: src/consensus/gnunet-consensus-profiler.c:564
 msgid "be more verbose (print received values)"
 msgstr ""
 
-#: src/conversation/conversation_api.c:513
-#: src/conversation/conversation_api_call.c:492
+#: src/conversation/conversation_api.c:515
+#: src/conversation/conversation_api_call.c:494
 msgid "Connection to conversation service lost, trying to reconnect\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:275
+#: src/conversation/gnunet-conversation.c:277
 #, c-format
 msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:300
+#: src/conversation/gnunet-conversation.c:302
 #, c-format
 msgid "Call from `%s' terminated\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:335
+#: src/conversation/gnunet-conversation.c:337
 #, c-format
 msgid "Call from `%s' suspended by other user\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:340
+#: src/conversation/gnunet-conversation.c:342
 #, c-format
 msgid "Call from `%s' resumed by other user\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:358
+#: src/conversation/gnunet-conversation.c:360
 #, c-format
 msgid "Ego `%s' no longer available, phone is now down.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:373
+#: src/conversation/gnunet-conversation.c:375
 #, fuzzy
 msgid "Failed to setup phone (internal error)\n"
 msgstr "Kunde inte skapa värdnyckel!\n"
 
-#: src/conversation/gnunet-conversation.c:385
+#: src/conversation/gnunet-conversation.c:387
 #, c-format
 msgid "Phone active at `%s'.  Type `/help' for a list of available commands\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:409
+#: src/conversation/gnunet-conversation.c:411
 #, c-format
 msgid "Resolved address of `%s'. Now ringing other party.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:416
+#: src/conversation/gnunet-conversation.c:418
 #, fuzzy, c-format
 msgid "Connection established to `%s'\n"
 msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
 
-#: src/conversation/gnunet-conversation.c:423
+#: src/conversation/gnunet-conversation.c:425
 #, fuzzy, c-format
 msgid "Failed to resolve `%s'\n"
 msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
 
-#: src/conversation/gnunet-conversation.c:431
+#: src/conversation/gnunet-conversation.c:433
 #, c-format
 msgid "Call to `%s' terminated\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:440
+#: src/conversation/gnunet-conversation.c:442
 #, c-format
 msgid "Connection to `%s' suspended (by other user)\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:446
+#: src/conversation/gnunet-conversation.c:448
 #, c-format
 msgid "Connection to `%s' resumed (by other user)\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:451
+#: src/conversation/gnunet-conversation.c:453
 msgid "Error with the call, restarting it\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:522
+#: src/conversation/gnunet-conversation.c:524
 #, fuzzy, c-format
 msgid "Unknown command `%s'\n"
 msgstr "Okänd operation \"%s\"\n"
 
-#: src/conversation/gnunet-conversation.c:538
-#: src/conversation/gnunet-conversation.c:552
+#: src/conversation/gnunet-conversation.c:540
+#: src/conversation/gnunet-conversation.c:554
 #, c-format
 msgid "Ego `%s' not available\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:545
-#: src/conversation/gnunet-conversation.c:601
+#: src/conversation/gnunet-conversation.c:547
+#: src/conversation/gnunet-conversation.c:603
 msgid "You are calling someone else already, hang up first!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:560
-#: src/conversation/gnunet-conversation.c:614
+#: src/conversation/gnunet-conversation.c:562
+#: src/conversation/gnunet-conversation.c:616
 #, c-format
 msgid "You are answering call from `%s', hang up or suspend that call first!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:570
+#: src/conversation/gnunet-conversation.c:572
 msgid "Call recipient missing.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:625
+#: src/conversation/gnunet-conversation.c:627
 msgid "There is no incoming call to accept here!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:642
+#: src/conversation/gnunet-conversation.c:644
 #, c-format
 msgid "There is no incoming call `%s' to accept right now!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:673
+#: src/conversation/gnunet-conversation.c:675
 msgid "We currently do not have an address.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:697
+#: src/conversation/gnunet-conversation.c:699
 #, c-format
 msgid "We are currently trying to locate the private key for the ego `%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:702
+#: src/conversation/gnunet-conversation.c:704
 #, c-format
 msgid "We are listening for incoming calls for ego `%s' on line `%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:708
-#: src/conversation/gnunet-conversation.c:732
+#: src/conversation/gnunet-conversation.c:710
+#: src/conversation/gnunet-conversation.c:734
 #, c-format
 msgid "You are having a conversation with `%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:713
+#: src/conversation/gnunet-conversation.c:715
 msgid ""
 "We had an internal error setting up our phone line. You can still make "
 "calls.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:722
+#: src/conversation/gnunet-conversation.c:724
 #, c-format
 msgid "We are trying to find the network address to call `%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:727
+#: src/conversation/gnunet-conversation.c:729
 #, c-format
 msgid "We are calling `%s', their phone should be ringing.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:746
+#: src/conversation/gnunet-conversation.c:748
 msgid "Calls waiting:\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:752
+#: src/conversation/gnunet-conversation.c:754
 #, fuzzy, c-format
 msgid "#%u: `%s'\n"
 msgstr "Jag är ändpunkt \"%s\".\n"
 
-#: src/conversation/gnunet-conversation.c:781
-#: src/conversation/gnunet-conversation.c:796
+#: src/conversation/gnunet-conversation.c:783
+#: src/conversation/gnunet-conversation.c:798
 msgid "There is no call that could be suspended right now.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:829
-#: src/conversation/gnunet-conversation.c:845
+#: src/conversation/gnunet-conversation.c:831
+#: src/conversation/gnunet-conversation.c:847
 msgid "There is no call that could be resumed right now.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:852
+#: src/conversation/gnunet-conversation.c:854
 #, c-format
 msgid "Already talking with `%s', cannot resume a call right now.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:861
+#: src/conversation/gnunet-conversation.c:863
 msgid "There is no incoming call to resume here!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:878
+#: src/conversation/gnunet-conversation.c:880
 #, c-format
 msgid "There is no incoming call `%s' to resume right now!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:913
+#: src/conversation/gnunet-conversation.c:915
 msgid "There is no call that could be cancelled right now.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:921
+#: src/conversation/gnunet-conversation.c:923
 msgid "There is no incoming call to refuse here!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:938
+#: src/conversation/gnunet-conversation.c:940
 #, c-format
 msgid "There is no incoming call `%s' to refuse right now!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:964
+#: src/conversation/gnunet-conversation.c:966
 msgid "Use `/address' to find out which address this phone should have in GNS"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:966
+#: src/conversation/gnunet-conversation.c:968
 msgid "Use `/call USER.gnu' to call USER"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:968
+#: src/conversation/gnunet-conversation.c:970
 msgid "Use `/accept #NUM' to accept incoming call #NUM"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:970
+#: src/conversation/gnunet-conversation.c:972
 msgid "Use `/suspend' to suspend the active call"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:972
+#: src/conversation/gnunet-conversation.c:974
 msgid ""
 "Use `/resume [#NUM]' to resume a call, #NUM is needed to resume incoming "
 "calls, no argument is needed to resume the current outgoing call."
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:974
+#: src/conversation/gnunet-conversation.c:976
 msgid "Use `/cancel' to reject or terminate a call"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:976
+#: src/conversation/gnunet-conversation.c:978
 msgid "Use `/status' to print status information"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:978
+#: src/conversation/gnunet-conversation.c:980
 #, fuzzy
 msgid "Use `/quit' to terminate gnunet-conversation"
 msgstr "tillåter klienter att fastställa gnunetds konfiguration"
 
-#: src/conversation/gnunet-conversation.c:980
+#: src/conversation/gnunet-conversation.c:982
 msgid "Use `/help command' to get help for a specific command"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:1196
+#: src/conversation/gnunet-conversation.c:1198
 #, fuzzy, c-format
 msgid "Name of our ego changed to `%s'\n"
 msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
 
-#: src/conversation/gnunet-conversation.c:1209
+#: src/conversation/gnunet-conversation.c:1211
 #, fuzzy, c-format
 msgid "Our ego `%s' was deleted!\n"
 msgstr "Pseudonym \"%s\" togs bort.\n"
 
-#: src/conversation/gnunet-conversation.c:1247
+#: src/conversation/gnunet-conversation.c:1249
 #, fuzzy
 msgid "You must specify the NAME of an ego to use\n"
 msgstr "Du måste ange en lista av filer att lägga in.\n"
 
-#: src/conversation/gnunet-conversation.c:1271
+#: src/conversation/gnunet-conversation.c:1273
 #, fuzzy
 msgid "Failed to start gnunet-helper-w32-console\n"
 msgstr "Misslyckades att starta samling.\n"
 
-#: src/conversation/gnunet-conversation.c:1300
+#: src/conversation/gnunet-conversation.c:1302
 msgid "sets the NAME of the ego to use for the caller ID"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:1305
+#: src/conversation/gnunet-conversation.c:1307
 msgid "sets the LINE to use for the phone"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:1334
+#: src/conversation/gnunet-conversation.c:1336
 msgid "Enables having a conversation with other GNUnet users."
 msgstr ""
 
-#: src/conversation/gnunet-conversation-test.c:118
+#: src/conversation/gnunet-conversation-test.c:120
 #, c-format
 msgid ""
 "\n"
 "End of transmission.  Have a GNU day.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation-test.c:143
+#: src/conversation/gnunet-conversation-test.c:145
 #, c-format
 msgid ""
 "\n"
@@ -1059,2563 +1053,2559 @@ msgid ""
 "settings are working..."
 msgstr ""
 
-#: src/conversation/gnunet-conversation-test.c:214
+#: src/conversation/gnunet-conversation-test.c:216
 #, c-format
 msgid ""
 "We will now be recording you for %s. After that time, the recording will be "
 "played back to you..."
 msgstr ""
 
-#: src/conversation/gnunet_gst.c:620
-#: src/conversation/gnunet-helper-audio-playback-gst.c:359
+#: src/conversation/gnunet_gst.c:622
+#: src/conversation/gnunet-helper-audio-playback-gst.c:361
 #, c-format
 msgid "Read error from STDIN: %d %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:323
+#: src/conversation/gnunet-helper-audio-playback.c:325
 #, fuzzy, c-format
 msgid "pa_stream_write() failed: %s\n"
 msgstr "\"%s\" %s misslyckades: %s\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:625
+#: src/conversation/gnunet-helper-audio-playback.c:627
 msgid "gnunet-helper-audio-playback - Got signal, exiting\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:651
-#: src/conversation/gnunet-helper-audio-record.c:561
+#: src/conversation/gnunet-helper-audio-playback.c:653
+#: src/conversation/gnunet-helper-audio-record.c:563
 #, fuzzy
 msgid "Connection established.\n"
 msgstr "Samling stoppad.\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:656
-#: src/conversation/gnunet-helper-audio-record.c:566
+#: src/conversation/gnunet-helper-audio-playback.c:658
+#: src/conversation/gnunet-helper-audio-record.c:568
 #, fuzzy, c-format
 msgid "pa_stream_new() failed: %s\n"
 msgstr "\"%s\" %s misslyckades: %s\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:670
+#: src/conversation/gnunet-helper-audio-playback.c:672
 #, c-format
 msgid "pa_stream_connect_playback() failed: %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:683
-#: src/conversation/gnunet-helper-audio-record.c:592
+#: src/conversation/gnunet-helper-audio-playback.c:685
+#: src/conversation/gnunet-helper-audio-record.c:594
 #, fuzzy, c-format
 msgid "Connection failure: %s\n"
 msgstr " Anslutning misslyckades (fel?)\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:704
-#: src/conversation/gnunet-helper-audio-record.c:615
+#: src/conversation/gnunet-helper-audio-playback.c:706
+#: src/conversation/gnunet-helper-audio-record.c:617
 msgid "Wrong Spec\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:710
-#: src/conversation/gnunet-helper-audio-record.c:621
+#: src/conversation/gnunet-helper-audio-playback.c:712
+#: src/conversation/gnunet-helper-audio-record.c:623
 #, fuzzy
 msgid "pa_mainloop_new() failed.\n"
 msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:724
-#: src/conversation/gnunet-helper-audio-record.c:636
+#: src/conversation/gnunet-helper-audio-playback.c:726
+#: src/conversation/gnunet-helper-audio-record.c:638
 #, fuzzy
 msgid "pa_context_new() failed.\n"
 msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:731
-#: src/conversation/gnunet-helper-audio-record.c:642
+#: src/conversation/gnunet-helper-audio-playback.c:733
+#: src/conversation/gnunet-helper-audio-record.c:644
 #, fuzzy, c-format
 msgid "pa_context_connect() failed: %s\n"
 msgstr "# av anslutna parter"
 
-#: src/conversation/gnunet-helper-audio-playback.c:737
-#: src/conversation/gnunet-helper-audio-record.c:648
+#: src/conversation/gnunet-helper-audio-playback.c:739
+#: src/conversation/gnunet-helper-audio-record.c:650
 #, fuzzy
 msgid "pa_mainloop_run() failed.\n"
 msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:816
+#: src/conversation/gnunet-helper-audio-playback.c:818
 #, c-format
 msgid "Read error from STDIN: %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:351
+#: src/conversation/gnunet-helper-audio-record.c:353
 #, fuzzy, c-format
 msgid "opus_encode_float() failed: %s. Aborting\n"
 msgstr "# av anslutna parter"
 
-#: src/conversation/gnunet-helper-audio-record.c:430
+#: src/conversation/gnunet-helper-audio-record.c:432
 #, fuzzy, c-format
 msgid "pa_stream_peek() failed: %s\n"
 msgstr "\"%s\" %s misslyckades: %s\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:472
+#: src/conversation/gnunet-helper-audio-record.c:474
 msgid "Got signal, exiting.\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:498
+#: src/conversation/gnunet-helper-audio-record.c:500
 #, fuzzy
 msgid "Stream successfully created.\n"
 msgstr "Åtkomst nekad för \"%s\" vid %s:%d.\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:503
+#: src/conversation/gnunet-helper-audio-record.c:505
 #, fuzzy, c-format
 msgid "pa_stream_get_buffer_attr() failed: %s\n"
 msgstr "\"%s\" %s misslyckades: %s\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:511
+#: src/conversation/gnunet-helper-audio-record.c:513
 #, c-format
 msgid "Buffer metrics: maxlength=%u, fragsize=%u\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:515
+#: src/conversation/gnunet-helper-audio-record.c:517
 #, c-format
 msgid "Using sample spec '%s', channel map '%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:522
+#: src/conversation/gnunet-helper-audio-record.c:524
 #, fuzzy, c-format
 msgid "Connected to device %s (%u, %ssuspended).\n"
 msgstr "\"%s\" ansluten till \"%s\".\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:531
+#: src/conversation/gnunet-helper-audio-record.c:533
 #, c-format
 msgid "Stream error: %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:579
+#: src/conversation/gnunet-helper-audio-record.c:581
 #, fuzzy, c-format
 msgid "pa_stream_connect_record() failed: %s\n"
 msgstr ""
 "\n"
 "Fel vid uppladdning av fil: %s\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:693
+#: src/conversation/gnunet-helper-audio-record.c:695
 #, fuzzy
 msgid "ogg_stream_init() failed.\n"
 msgstr "\"%s\" %s misslyckades: %s\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:738
+#: src/conversation/gnunet-helper-audio-record.c:740
 #, fuzzy, c-format
 msgid "Failed to allocate %u bytes for second packet\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/conversation/gnunet-service-conversation.c:1303
+#: src/conversation/gnunet-service-conversation.c:1305
 #, fuzzy, c-format
 msgid "Could not open line, port %s already in use!\n"
 msgstr "Kunde inte ansluta till gnunetd.\n"
 
-#: src/conversation/microphone.c:119
+#: src/conversation/microphone.c:121
 #, fuzzy
 msgid "Could not start record audio helper\n"
 msgstr "Kunde inte komma åt namnrymdsinformation.\n"
 
-#: src/conversation/plugin_gnsrecord_conversation.c:70
+#: src/conversation/plugin_gnsrecord_conversation.c:72
 #, c-format
 msgid "PHONE version %u not supported\n"
 msgstr ""
 
-#: src/conversation/plugin_gnsrecord_conversation.c:133
-#: src/conversation/plugin_gnsrecord_conversation.c:147
+#: src/conversation/plugin_gnsrecord_conversation.c:135
+#: src/conversation/plugin_gnsrecord_conversation.c:149
 #, fuzzy, c-format
 msgid "Unable to parse PHONE record `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/conversation/speaker.c:73
+#: src/conversation/speaker.c:75
 #, fuzzy
 msgid "Could not start playback audio helper.\n"
 msgstr "Kunde inte slå upp \"%s\": %s\n"
 
-#: src/core/gnunet-core.c:88
+#: src/core/gnunet-core.c:90
 #, fuzzy
 msgid "fresh connection"
 msgstr "# av anslutna parter"
 
-#: src/core/gnunet-core.c:91
+#: src/core/gnunet-core.c:93
 msgid "key sent"
 msgstr ""
 
-#: src/core/gnunet-core.c:94
+#: src/core/gnunet-core.c:96
 #, fuzzy
 msgid "key received"
 msgstr "# sessionnycklar vägrade"
 
-#: src/core/gnunet-core.c:97
+#: src/core/gnunet-core.c:99
 #, fuzzy
 msgid "connection established"
 msgstr "Samling stoppad.\n"
 
-#: src/core/gnunet-core.c:100
+#: src/core/gnunet-core.c:102
 msgid "rekeying"
 msgstr ""
 
-#: src/core/gnunet-core.c:103
+#: src/core/gnunet-core.c:105
 #, fuzzy
 msgid "disconnected"
 msgstr "\"%s\" ansluten till \"%s\".\n"
 
-#: src/core/gnunet-core.c:110
+#: src/core/gnunet-core.c:112
 msgid "Connection to CORE service lost (reconnecting)"
 msgstr ""
 
-#: src/core/gnunet-core.c:113
+#: src/core/gnunet-core.c:115
 #, fuzzy
 msgid "unknown state"
 msgstr "Okänt fel"
 
-#: src/core/gnunet-core.c:118
+#: src/core/gnunet-core.c:120
 #, c-format
 msgid "%24s: %-30s %4s (timeout in %6s)\n"
 msgstr ""
 
-#: src/core/gnunet-core.c:142 src/peerinfo-tool/gnunet-peerinfo.c:726
+#: src/core/gnunet-core.c:144 src/peerinfo-tool/gnunet-peerinfo.c:728
 #, fuzzy, c-format
 msgid "Invalid command line argument `%s'\n"
 msgstr "Ogiltiga kommandoradsargument:\n"
 
-#: src/core/gnunet-core.c:153
+#: src/core/gnunet-core.c:155
 #, fuzzy
 msgid "Failed to connect to CORE service!\n"
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/core/gnunet-core.c:175 src/transport/gnunet-transport.c:1447
+#: src/core/gnunet-core.c:177 src/transport/gnunet-transport.c:1449
 #, fuzzy
 msgid "provide information about all current connections (continuously)"
 msgstr "Skriv ut information om GNUnets motparter."
 
-#: src/core/gnunet-core.c:184
+#: src/core/gnunet-core.c:186
 #, fuzzy
 msgid "Print information about connected peers."
 msgstr "Skriv ut information om GNUnets motparter."
 
-#: src/core/gnunet-service-core.c:345
+#: src/core/gnunet-service-core.c:347
 msgid "# send requests dropped (disconnected)"
 msgstr ""
 
-#: src/core/gnunet-service-core.c:369
+#: src/core/gnunet-service-core.c:371
 msgid "# dequeuing CAR (duplicate request)"
 msgstr ""
 
-#: src/core/gnunet-service-core.c:441
+#: src/core/gnunet-service-core.c:443
 #, fuzzy, c-format
 msgid "# bytes of messages of type %u received"
 msgstr "# krypterade PONG-meddelanden mottagna"
 
-#: src/core/gnunet-service-core.c:539
+#: src/core/gnunet-service-core.c:541
 #, fuzzy
 msgid "# messages discarded (session disconnected)"
 msgstr "Nätverksannonsering avstängd i konfigurationen!\n"
 
-#: src/core/gnunet-service-core.c:877
+#: src/core/gnunet-service-core.c:879
 #, fuzzy, c-format
 msgid "# messages of type %u discarded (client busy)"
 msgstr "# krypterade PONG-meddelanden mottagna"
 
-#: src/core/gnunet-service-core.c:986
+#: src/core/gnunet-service-core.c:988
 #, fuzzy
 msgid "Core service is lacking HOSTKEY configuration setting.  Exiting.\n"
 msgstr "GNUnet-konfiguration"
 
-#: src/core/gnunet-service-core.c:1007
+#: src/core/gnunet-service-core.c:1009
 #, fuzzy, c-format
 msgid "Core service of `%s' ready.\n"
 msgstr "\"%s\" är inte en fil.\n"
 
-#: src/core/gnunet-service-core_kx.c:615
+#: src/core/gnunet-service-core_kx.c:617
 msgid "# bytes encrypted"
 msgstr "# byte krypterade"
 
-#: src/core/gnunet-service-core_kx.c:675
+#: src/core/gnunet-service-core_kx.c:677
 msgid "# bytes decrypted"
 msgstr "# byte dekrypterade"
 
-#: src/core/gnunet-service-core_kx.c:777
+#: src/core/gnunet-service-core_kx.c:779
 #, fuzzy
 msgid "# PAYLOAD dropped (out of order)"
 msgstr "# byte kastade via UDP (utgående)"
 
-#: src/core/gnunet-service-core_kx.c:827
+#: src/core/gnunet-service-core_kx.c:829
 msgid "# key exchanges initiated"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:889
+#: src/core/gnunet-service-core_kx.c:891
 msgid "# key exchanges stopped"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:923
+#: src/core/gnunet-service-core_kx.c:925
 #, fuzzy
 msgid "# PING messages transmitted"
 msgstr "# PING-meddelanden skapade"
 
-#: src/core/gnunet-service-core_kx.c:990
+#: src/core/gnunet-service-core_kx.c:992
 msgid "# old ephemeral keys ignored"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1003
+#: src/core/gnunet-service-core_kx.c:1005
 #, fuzzy
 msgid "# duplicate ephemeral keys ignored"
 msgstr "# krypterade PONG-meddelanden mottagna"
 
-#: src/core/gnunet-service-core_kx.c:1038
+#: src/core/gnunet-service-core_kx.c:1040
 #, fuzzy
 msgid "# EPHEMERAL_KEYs rejected (bad signature)"
 msgstr "# PING-meddelanden skapade"
 
-#: src/core/gnunet-service-core_kx.c:1052
+#: src/core/gnunet-service-core_kx.c:1054
 #, c-format
 msgid ""
 "EPHEMERAL_KEY from peer `%s' rejected as its validity range does not match "
 "our system time (%llu not in [%llu,%llu]).\n"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1058
+#: src/core/gnunet-service-core_kx.c:1060
 #, fuzzy
 msgid "# EPHEMERAL_KEY messages rejected due to time"
 msgstr "# PING-meddelanden skapade"
 
-#: src/core/gnunet-service-core_kx.c:1078
+#: src/core/gnunet-service-core_kx.c:1080
 #, fuzzy
 msgid "# valid ephemeral keys received"
 msgstr "# krypterade PONG-meddelanden mottagna"
 
-#: src/core/gnunet-service-core_kx.c:1178
-#: src/transport/gnunet-service-transport_validation.c:1126
+#: src/core/gnunet-service-core_kx.c:1180
+#: src/transport/gnunet-service-transport_validation.c:1128
 #, fuzzy
 msgid "# PING messages received"
 msgstr "# PING-meddelanden skapade"
 
-#: src/core/gnunet-service-core_kx.c:1187
+#: src/core/gnunet-service-core_kx.c:1189
 #, fuzzy
 msgid "# PING messages dropped (out of order)"
 msgstr "Nätverksannonsering avstängd i konfigurationen!\n"
 
-#: src/core/gnunet-service-core_kx.c:1246
+#: src/core/gnunet-service-core_kx.c:1248
 #, fuzzy
 msgid "# PONG messages created"
 msgstr "# PING-meddelanden skapade"
 
-#: src/core/gnunet-service-core_kx.c:1272
+#: src/core/gnunet-service-core_kx.c:1274
 #, fuzzy
 msgid "# sessions terminated by timeout"
 msgstr "# byte kastade via TCP (utgående)"
 
-#: src/core/gnunet-service-core_kx.c:1285
+#: src/core/gnunet-service-core_kx.c:1287
 #, fuzzy
 msgid "# keepalive messages sent"
 msgstr "# PING-meddelanden i klartext skickade"
 
-#: src/core/gnunet-service-core_kx.c:1349
-#: src/transport/gnunet-service-transport_validation.c:1459
+#: src/core/gnunet-service-core_kx.c:1351
+#: src/transport/gnunet-service-transport_validation.c:1461
 #, fuzzy
 msgid "# PONG messages received"
 msgstr "# krypterade PONG-meddelanden mottagna"
 
-#: src/core/gnunet-service-core_kx.c:1356
+#: src/core/gnunet-service-core_kx.c:1358
 #, fuzzy
 msgid "# PONG messages dropped (connection down)"
 msgstr "# krypterade PONG-meddelanden mottagna"
 
-#: src/core/gnunet-service-core_kx.c:1361
+#: src/core/gnunet-service-core_kx.c:1363
 #, fuzzy
 msgid "# PONG messages dropped (out of order)"
 msgstr "Nätverksannonsering avstängd i konfigurationen!\n"
 
-#: src/core/gnunet-service-core_kx.c:1396
+#: src/core/gnunet-service-core_kx.c:1398
 #, fuzzy
 msgid "# PONG messages decrypted"
 msgstr "# PING-meddelanden skapade"
 
-#: src/core/gnunet-service-core_kx.c:1434
+#: src/core/gnunet-service-core_kx.c:1436
 #, fuzzy
 msgid "# session keys confirmed via PONG"
 msgstr "# sessionnycklar vägrade"
 
-#: src/core/gnunet-service-core_kx.c:1445
+#: src/core/gnunet-service-core_kx.c:1447
 #, fuzzy
 msgid "# timeouts prevented via PONG"
 msgstr "# byte mottogs via TCP"
 
-#: src/core/gnunet-service-core_kx.c:1452
+#: src/core/gnunet-service-core_kx.c:1454
 #, fuzzy
 msgid "# rekey operations confirmed via PONG"
 msgstr "# sessionnycklar vägrade"
 
-#: src/core/gnunet-service-core_kx.c:1640
+#: src/core/gnunet-service-core_kx.c:1642
 #, fuzzy
 msgid "# DATA message dropped (out of order)"
 msgstr "# byte kastade via UDP (utgående)"
 
-#: src/core/gnunet-service-core_kx.c:1648
+#: src/core/gnunet-service-core_kx.c:1650
 #, c-format
 msgid ""
 "Session to peer `%s' went down due to key expiration (should not happen)\n"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1651
+#: src/core/gnunet-service-core_kx.c:1653
 #, fuzzy
 msgid "# sessions terminated by key expiration"
 msgstr "# byte kastade via TCP (utgående)"
 
-#: src/core/gnunet-service-core_kx.c:1740
-#: src/core/gnunet-service-core_kx.c:1766
+#: src/core/gnunet-service-core_kx.c:1742
+#: src/core/gnunet-service-core_kx.c:1768
 #, fuzzy
 msgid "# bytes dropped (duplicates)"
 msgstr "# byte kastade via UDP (utgående)"
 
-#: src/core/gnunet-service-core_kx.c:1753
+#: src/core/gnunet-service-core_kx.c:1755
 #, fuzzy
 msgid "# bytes dropped (out of sequence)"
 msgstr "# byte kastade via UDP (utgående)"
 
-#: src/core/gnunet-service-core_kx.c:1795
+#: src/core/gnunet-service-core_kx.c:1797
 #, fuzzy
 msgid "# bytes dropped (ancient message)"
 msgstr "# byte kastade via UDP (utgående)"
 
-#: src/core/gnunet-service-core_kx.c:1803
+#: src/core/gnunet-service-core_kx.c:1805
 #, fuzzy
 msgid "# bytes of payload decrypted"
 msgstr "# byte dekrypterade"
 
-#: src/core/gnunet-service-core_sessions.c:258
-#: src/core/gnunet-service-core_sessions.c:348
-#: src/dht/gnunet-service-dht_neighbours.c:739
-#: src/dht/gnunet-service-dht_neighbours.c:802
-#: src/fs/gnunet-service-fs_cp.c:613 src/fs/gnunet-service-fs_cp.c:1520
-#: src/topology/gnunet-daemon-topology.c:615
-#: src/topology/gnunet-daemon-topology.c:717
-#: src/transport/gnunet-service-transport_neighbours.c:719
-#: src/transport/gnunet-service-transport_neighbours.c:727
+#: src/core/gnunet-service-core_sessions.c:260
+#: src/core/gnunet-service-core_sessions.c:350
+#: src/dht/gnunet-service-dht_neighbours.c:741
+#: src/dht/gnunet-service-dht_neighbours.c:804
+#: src/fs/gnunet-service-fs_cp.c:615 src/fs/gnunet-service-fs_cp.c:1521
+#: src/topology/gnunet-daemon-topology.c:617
+#: src/topology/gnunet-daemon-topology.c:719
+#: src/transport/gnunet-service-transport_neighbours.c:720
+#: src/transport/gnunet-service-transport_neighbours.c:728
 #, fuzzy
 msgid "# peers connected"
 msgstr "# av anslutna parter"
 
-#: src/core/gnunet-service-core_sessions.c:294
+#: src/core/gnunet-service-core_sessions.c:296
 msgid "# type map refreshes sent"
 msgstr ""
 
-#: src/core/gnunet-service-core_sessions.c:414
+#: src/core/gnunet-service-core_sessions.c:416
 #, fuzzy
 msgid "# outdated typemap confirmations received"
 msgstr "Kunde inte spara konfiguration!"
 
-#: src/core/gnunet-service-core_sessions.c:431
+#: src/core/gnunet-service-core_sessions.c:433
 #, fuzzy
 msgid "# valid typemap confirmations received"
 msgstr "Kunde inte spara konfiguration!"
 
-#: src/core/gnunet-service-core_typemap.c:167
-#: src/core/gnunet-service-core_typemap.c:179
+#: src/core/gnunet-service-core_typemap.c:169
+#: src/core/gnunet-service-core_typemap.c:181
 #, fuzzy
 msgid "# type maps received"
 msgstr "# krypterade PONG-meddelanden mottagna"
 
-#: src/core/gnunet-service-core_typemap.c:210
+#: src/core/gnunet-service-core_typemap.c:212
 msgid "# updates to my type map"
 msgstr ""
 
-#: src/credential/credential_misc.c:86
+#: src/credential/credential_misc.c:88
 #, fuzzy, c-format
 msgid "Unable to parse CRED record string `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/credential/gnunet-credential.c:262 src/namestore/gnunet-namestore.c:887
+#: src/credential/gnunet-credential.c:264 src/namestore/gnunet-namestore.c:994
 #, fuzzy, c-format
 msgid "Ego `%s' not known to identity service\n"
 msgstr "\"%s\": okänd tjänst: %s\n"
 
-#: src/credential/gnunet-credential.c:278
-#: src/credential/gnunet-credential.c:432
+#: src/credential/gnunet-credential.c:280
+#: src/credential/gnunet-credential.c:434
 #, fuzzy, c-format
 msgid "Issuer public key `%s' is not well-formed\n"
 msgstr "Ogiltigt argument: \"%s\"\n"
 
-#: src/credential/gnunet-credential.c:359
-#: src/credential/gnunet-credential.c:421
+#: src/credential/gnunet-credential.c:361
+#: src/credential/gnunet-credential.c:423
 #, fuzzy, c-format
 msgid "Issuer public key not well-formed\n"
 msgstr "Ogiltigt argument: \"%s\"\n"
 
-#: src/credential/gnunet-credential.c:370
-#: src/credential/gnunet-credential.c:442
+#: src/credential/gnunet-credential.c:372
+#: src/credential/gnunet-credential.c:444
 #, fuzzy, c-format
 msgid "Failed to connect to CREDENTIAL\n"
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/credential/gnunet-credential.c:377
+#: src/credential/gnunet-credential.c:379
 #, c-format
 msgid "You must provide issuer the attribute\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:385
+#: src/credential/gnunet-credential.c:387
 #, c-format
 msgid "ego required\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:401
+#: src/credential/gnunet-credential.c:403
 #, c-format
 msgid "Subject public key needed\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:412
+#: src/credential/gnunet-credential.c:414
 #, fuzzy, c-format
 msgid "Subject public key `%s' is not well-formed\n"
 msgstr "Ogiltigt argument: \"%s\"\n"
 
-#: src/credential/gnunet-credential.c:449
+#: src/credential/gnunet-credential.c:451
 #, c-format
 msgid "You must provide issuer and subject attributes\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:502
+#: src/credential/gnunet-credential.c:504
 #, c-format
 msgid "Issuer ego required\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:514
+#: src/credential/gnunet-credential.c:516
 #, c-format
 msgid "Please specify name to lookup, subject key and issuer key!\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:534
+#: src/credential/gnunet-credential.c:536
 msgid "create credential"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:538
+#: src/credential/gnunet-credential.c:540
 msgid "verify credential against attribute"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:543
+#: src/credential/gnunet-credential.c:545
 #, fuzzy
 msgid "The public key of the subject to lookup the credential for"
 msgstr "ange prioritet för innehållet"
 
-#: src/credential/gnunet-credential.c:548
+#: src/credential/gnunet-credential.c:550
 msgid "The name of the credential presented by the subject"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:553
+#: src/credential/gnunet-credential.c:555
 #, fuzzy
 msgid "The public key of the authority to verify the credential against"
 msgstr "ange prioritet för innehållet"
 
-#: src/credential/gnunet-credential.c:558
+#: src/credential/gnunet-credential.c:560
 #, fuzzy
 msgid "The ego to use"
 msgstr "meddelandestorlek"
 
-#: src/credential/gnunet-credential.c:563
+#: src/credential/gnunet-credential.c:565
 msgid "The issuer attribute to verify against or to issue"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:568
+#: src/credential/gnunet-credential.c:570
 msgid "The time to live for the credential"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:572
+#: src/credential/gnunet-credential.c:574
 msgid "collect credentials"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:586
+#: src/credential/gnunet-credential.c:588
 #, fuzzy
 msgid "GNUnet credential resolver tool"
 msgstr "Spåra GNUnets nätverkstopologi."
 
-#: src/credential/gnunet-service-credential.c:1136 src/gns/gnunet-gns.c:183
-#: src/gns/gnunet-gns-helper-service-w32.c:725
+#: src/credential/gnunet-service-credential.c:1138 src/gns/gnunet-gns.c:185
+#: src/gns/gnunet-gns-helper-service-w32.c:727
 #, fuzzy, c-format
 msgid "Failed to connect to GNS\n"
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/credential/gnunet-service-credential.c:1142
-#: src/namestore/gnunet-namestore.c:913
-#: src/namestore/gnunet-namestore-fcfsd.c:1136
+#: src/credential/gnunet-service-credential.c:1144
+#: src/namestore/gnunet-namestore.c:1019
+#: src/namestore/gnunet-namestore-fcfsd.c:1138
 #, fuzzy, c-format
 msgid "Failed to connect to namestore\n"
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/credential/plugin_gnsrecord_credential.c:184
+#: src/credential/plugin_gnsrecord_credential.c:186
 #, fuzzy, c-format
 msgid "Unable to parse ATTR record string `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/datacache/datacache.c:117 src/datacache/datacache.c:309
-#: src/datastore/gnunet-service-datastore.c:755
+#: src/datacache/datacache.c:119 src/datacache/datacache.c:311
+#: src/datastore/gnunet-service-datastore.c:757
 #, fuzzy
 msgid "# bytes stored"
 msgstr "# byte krypterade"
 
-#: src/datacache/datacache.c:121 src/datacache/datacache.c:313
+#: src/datacache/datacache.c:123 src/datacache/datacache.c:315
 #, fuzzy
 msgid "# items stored"
 msgstr "# byte krypterade"
 
-#: src/datacache/datacache.c:204
+#: src/datacache/datacache.c:206
 #, c-format
 msgid "Loading `%s' datacache plugin\n"
 msgstr ""
 
-#: src/datacache/datacache.c:215
+#: src/datacache/datacache.c:217
 #, fuzzy, c-format
 msgid "Failed to load datacache plugin for `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/datacache/datacache.c:343
+#: src/datacache/datacache.c:345
 #, fuzzy
 msgid "# requests received"
 msgstr "# byte mottogs via TCP"
 
-#: src/datacache/datacache.c:353
+#: src/datacache/datacache.c:355
 msgid "# requests filtered by bloom filter"
 msgstr ""
 
-#: src/datacache/datacache.c:383
+#: src/datacache/datacache.c:385
 #, fuzzy
 msgid "# requests for random value received"
 msgstr "# byte mottogs via TCP"
 
-#: src/datacache/datacache.c:415
+#: src/datacache/datacache.c:417
 #, fuzzy
 msgid "# proximity search requests received"
 msgstr "# klartext PONG-meddelanden mottagna"
 
-#: src/datacache/plugin_datacache_heap.c:551
+#: src/datacache/plugin_datacache_heap.c:553
 msgid "Heap datacache running\n"
 msgstr ""
 
-#: src/datacache/plugin_datacache_sqlite.c:116
-#: src/datacache/plugin_datacache_sqlite.c:125
-#: src/datastore/plugin_datastore_mysql.c:890
-#: src/datastore/plugin_datastore_sqlite.c:56
-#: src/datastore/plugin_datastore_sqlite.c:64 src/my/my.c:79 src/my/my.c:91
-#: src/mysql/mysql.c:40 src/mysql/mysql.c:47
-#: src/namecache/plugin_namecache_sqlite.c:50
-#: src/namestore/plugin_namestore_sqlite.c:51
-#: src/peerstore/plugin_peerstore_sqlite.c:50
-#: src/psycstore/plugin_psycstore_mysql.c:60
-#: src/reclaim/plugin_reclaim_sqlite.c:50
-#: src/testbed/generate-underlay-topology.c:45
-#: src/testbed/gnunet-daemon-latency-logger.c:50
-#: src/testbed/gnunet-daemon-testbed-underlay.c:54
-#: src/testbed/testbed_api_hosts.c:67 src/util/crypto_ecc.c:51
-#: src/util/crypto_ecc_setup.c:39 src/util/crypto_mpi.c:37
-#: src/include/gnunet_common.h:816 src/include/gnunet_common.h:825
-#: src/scalarproduct/scalarproduct.h:33
+#: src/datacache/plugin_datacache_sqlite.c:118
+#: src/datacache/plugin_datacache_sqlite.c:127
+#: src/datastore/plugin_datastore_mysql.c:892
+#: src/datastore/plugin_datastore_sqlite.c:58
+#: src/datastore/plugin_datastore_sqlite.c:66 src/my/my.c:81 src/my/my.c:93
+#: src/mysql/mysql.c:42 src/mysql/mysql.c:49
+#: src/namecache/plugin_namecache_sqlite.c:52
+#: src/namestore/plugin_namestore_sqlite.c:53
+#: src/peerstore/plugin_peerstore_sqlite.c:52
+#: src/reclaim/plugin_reclaim_sqlite.c:52
+#: src/testbed/generate-underlay-topology.c:47
+#: src/testbed/gnunet-daemon-latency-logger.c:52
+#: src/testbed/gnunet-daemon-testbed-underlay.c:56
+#: src/testbed/testbed_api_hosts.c:69 src/util/crypto_ecc.c:53
+#: src/util/crypto_ecc_setup.c:41 src/util/crypto_mpi.c:39
+#: src/include/gnunet_common.h:818 src/include/gnunet_common.h:827
+#: src/scalarproduct/scalarproduct.h:35
 #, c-format
 msgid "`%s' failed at %s:%d with error: %s\n"
 msgstr "\"%s\" misslyckades vid %s:%d med fel: %s\n"
 
-#: src/datacache/plugin_datacache_sqlite.c:861
-#: src/datastore/plugin_datastore_sqlite.c:506
-#: src/namecache/plugin_namecache_sqlite.c:327
-#: src/namestore/plugin_namestore_sqlite.c:262
-#: src/reclaim/plugin_reclaim_sqlite.c:334
+#: src/datacache/plugin_datacache_sqlite.c:863
+#: src/datastore/plugin_datastore_sqlite.c:508
+#: src/namecache/plugin_namecache_sqlite.c:229
+#: src/namestore/plugin_namestore_sqlite.c:265
+#: src/reclaim/plugin_reclaim_sqlite.c:336
 msgid "Tried to close sqlite without finalizing all prepared statements.\n"
 msgstr ""
 
-#: src/datastore/datastore_api.c:346
+#: src/datastore/datastore_api.c:348
 #, fuzzy
 msgid "DATASTORE disconnected"
 msgstr "\"%s\" ansluten till \"%s\".\n"
 
-#: src/datastore/datastore_api.c:466
+#: src/datastore/datastore_api.c:468
 #, fuzzy
 msgid "Disconnected from DATASTORE"
 msgstr "\"%s\" ansluten till \"%s\".\n"
 
-#: src/datastore/datastore_api.c:567
+#: src/datastore/datastore_api.c:569
 msgid "# queue overflows"
 msgstr ""
 
-#: src/datastore/datastore_api.c:597
+#: src/datastore/datastore_api.c:599
 #, fuzzy
 msgid "# queue entries created"
 msgstr "# PING-meddelanden skapade"
 
-#: src/datastore/datastore_api.c:758
+#: src/datastore/datastore_api.c:760
 #, fuzzy
 msgid "# status messages received"
 msgstr "# krypterade PONG-meddelanden mottagna"
 
-#: src/datastore/datastore_api.c:812
+#: src/datastore/datastore_api.c:814
 #, fuzzy
 msgid "# Results received"
 msgstr "# byte mottogs via TCP"
 
-#: src/datastore/datastore_api.c:918
+#: src/datastore/datastore_api.c:920
 #, fuzzy
 msgid "# datastore connections (re)created"
 msgstr "Nätverksanslutning"
 
-#: src/datastore/datastore_api.c:1032
+#: src/datastore/datastore_api.c:1034
 msgid "# PUT requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1093
+#: src/datastore/datastore_api.c:1095
 msgid "# RESERVE requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1158
+#: src/datastore/datastore_api.c:1160
 msgid "# RELEASE RESERVE requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1236
+#: src/datastore/datastore_api.c:1238
 msgid "# REMOVE requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1296
+#: src/datastore/datastore_api.c:1298
 msgid "# GET REPLICATION requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1358
+#: src/datastore/datastore_api.c:1360
 msgid "# GET ZERO ANONYMITY requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1439
+#: src/datastore/datastore_api.c:1441
 msgid "# GET requests executed"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:187
+#: src/datastore/gnunet-datastore.c:189
 #, c-format
 msgid "Dumped %<PRIu64> records\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:215 src/datastore/gnunet-datastore.c:227
+#: src/datastore/gnunet-datastore.c:217 src/datastore/gnunet-datastore.c:229
 #, c-format
 msgid "Short write to file: %zd bytes expecting %zd\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:259
+#: src/datastore/gnunet-datastore.c:261
 #, fuzzy
 msgid "Error queueing datastore GET operation\n"
 msgstr "Fel vid skapandet av användare"
 
-#: src/datastore/gnunet-datastore.c:285 src/datastore/gnunet-datastore.c:410
+#: src/datastore/gnunet-datastore.c:287 src/datastore/gnunet-datastore.c:412
 #, fuzzy, c-format
 msgid "Unable to open dump file: %s\n"
 msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
 
-#: src/datastore/gnunet-datastore.c:324
+#: src/datastore/gnunet-datastore.c:326
 #, fuzzy, c-format
 msgid "Failed to store item: %s, aborting\n"
 msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
 
-#: src/datastore/gnunet-datastore.c:338
+#: src/datastore/gnunet-datastore.c:340
 #, c-format
 msgid "Inserted %<PRIu64> records\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:347 src/datastore/gnunet-datastore.c:361
+#: src/datastore/gnunet-datastore.c:349 src/datastore/gnunet-datastore.c:363
 #, c-format
 msgid "Short read from file: %zd bytes expecting %zd\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:387
+#: src/datastore/gnunet-datastore.c:389
 #, fuzzy
 msgid "Error queueing datastore PUT operation\n"
 msgstr "Fel vid skapandet av användare"
 
-#: src/datastore/gnunet-datastore.c:430
+#: src/datastore/gnunet-datastore.c:432
 msgid "Input file is not of a supported format\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:456
+#: src/datastore/gnunet-datastore.c:458
 #, fuzzy
 msgid "Failed connecting to the datastore.\n"
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/datastore/gnunet-datastore.c:468
+#: src/datastore/gnunet-datastore.c:470
 #, c-format
 msgid "Please choose at least one operation: %s, %s\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:491
+#: src/datastore/gnunet-datastore.c:493
 #, fuzzy
 msgid "Dump all records from the datastore"
 msgstr "Misslyckades att ta emot svar till \"%s\" meddelande från gnunetd\n"
 
-#: src/datastore/gnunet-datastore.c:495
+#: src/datastore/gnunet-datastore.c:497
 #, fuzzy
 msgid "Insert records into the datastore"
 msgstr "# byte krypterade"
 
-#: src/datastore/gnunet-datastore.c:500
+#: src/datastore/gnunet-datastore.c:502
 msgid "File to dump or insert"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:509
+#: src/datastore/gnunet-datastore.c:511
 #, fuzzy
 msgid "Manipulate GNUnet datastore"
 msgstr "skriv ut ett värde från konfigurationsfilen till standard ut"
 
-#: src/datastore/gnunet-service-datastore.c:336
+#: src/datastore/gnunet-service-datastore.c:338
 #, fuzzy
 msgid "# bytes expired"
 msgstr "# byte mottogs via TCP"
 
-#: src/datastore/gnunet-service-datastore.c:418
+#: src/datastore/gnunet-service-datastore.c:420
 msgid "# bytes purged (low-priority)"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:560
+#: src/datastore/gnunet-service-datastore.c:562
 msgid "# results found"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:601
+#: src/datastore/gnunet-service-datastore.c:603
 #, c-format
 msgid ""
 "Insufficient space (%llu bytes are available) to satisfy RESERVE request for "
 "%llu bytes\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:612
+#: src/datastore/gnunet-service-datastore.c:614
 #, c-format
 msgid ""
 "The requested amount (%llu bytes) is larger than the cache size (%llu "
 "bytes)\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:618
+#: src/datastore/gnunet-service-datastore.c:620
 msgid ""
 "Insufficient space to satisfy request and requested amount is larger than "
 "cache size"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:625
+#: src/datastore/gnunet-service-datastore.c:627
 msgid "Insufficient space to satisfy request"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:632
-#: src/datastore/gnunet-service-datastore.c:687
-#: src/datastore/gnunet-service-datastore.c:835
-#: src/datastore/gnunet-service-datastore.c:1467
+#: src/datastore/gnunet-service-datastore.c:634
+#: src/datastore/gnunet-service-datastore.c:689
+#: src/datastore/gnunet-service-datastore.c:837
+#: src/datastore/gnunet-service-datastore.c:1469
 msgid "# reserved"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:705
+#: src/datastore/gnunet-service-datastore.c:707
 msgid "Could not find matching reservation"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:771
+#: src/datastore/gnunet-service-datastore.c:773
 #, c-format
 msgid "Need %llu bytes more space (%llu allowed, using %llu)\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:874
+#: src/datastore/gnunet-service-datastore.c:876
 #, fuzzy
 msgid "# GET requests received"
 msgstr "# byte mottogs via TCP"
 
-#: src/datastore/gnunet-service-datastore.c:905
+#: src/datastore/gnunet-service-datastore.c:907
 #, fuzzy
 msgid "# GET KEY requests received"
 msgstr "# byte mottogs via TCP"
 
-#: src/datastore/gnunet-service-datastore.c:918
+#: src/datastore/gnunet-service-datastore.c:920
 msgid "# requests filtered by bloomfilter"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:954
+#: src/datastore/gnunet-service-datastore.c:956
 msgid "# GET REPLICATION requests received"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:987
+#: src/datastore/gnunet-service-datastore.c:989
 msgid "# GET ZERO ANONYMITY requests received"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1034
+#: src/datastore/gnunet-service-datastore.c:1036
 #, fuzzy
 msgid "Content not found"
 msgstr "Kommando \"%s\" hittades inte!\n"
 
-#: src/datastore/gnunet-service-datastore.c:1041
+#: src/datastore/gnunet-service-datastore.c:1043
 msgid "# bytes removed (explicit request)"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1086
+#: src/datastore/gnunet-service-datastore.c:1088
 #, fuzzy
 msgid "# REMOVE requests received"
 msgstr "# byte mottogs via TCP"
 
-#: src/datastore/gnunet-service-datastore.c:1135
+#: src/datastore/gnunet-service-datastore.c:1137
 #, c-format
 msgid ""
 "Datastore payload must have been inaccurate (%lld < %lld). Recomputing it.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1141
-#: src/datastore/gnunet-service-datastore.c:1316
+#: src/datastore/gnunet-service-datastore.c:1143
+#: src/datastore/gnunet-service-datastore.c:1318
 #, c-format
 msgid "New payload: %lld\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1195
+#: src/datastore/gnunet-service-datastore.c:1197
 #, c-format
 msgid "Loading `%s' datastore plugin\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1207
+#: src/datastore/gnunet-service-datastore.c:1209
 #, 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:1267
+#: src/datastore/gnunet-service-datastore.c:1269
 msgid "Bloomfilter construction complete.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1323
+#: src/datastore/gnunet-service-datastore.c:1325
 msgid "Rebuilding bloomfilter.  Please be patient.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1334
+#: src/datastore/gnunet-service-datastore.c:1336
 msgid "Plugin does not support get_keys function. Please fix!\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1504
+#: src/datastore/gnunet-service-datastore.c:1506
 #, fuzzy, c-format
 msgid "# bytes used in file-sharing datastore `%s'"
 msgstr "# byte krypterade"
 
-#: src/datastore/gnunet-service-datastore.c:1520
+#: src/datastore/gnunet-service-datastore.c:1522
 msgid "# quota"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1525
+#: src/datastore/gnunet-service-datastore.c:1527
 msgid "# cache size"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1541
+#: src/datastore/gnunet-service-datastore.c:1543
 #, c-format
 msgid "Could not use specified filename `%s' for bloomfilter.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1559
-#: src/datastore/gnunet-service-datastore.c:1575
+#: src/datastore/gnunet-service-datastore.c:1561
+#: src/datastore/gnunet-service-datastore.c:1577
 #, fuzzy, c-format
 msgid "Failed to remove bogus bloomfilter file `%s'\n"
 msgstr "Kunde inte spara konfigurationsfil \"%s\":"
 
-#: src/datastore/gnunet-service-datastore.c:1607
+#: src/datastore/gnunet-service-datastore.c:1609
 #, fuzzy
 msgid "Failed to initialize bloomfilter.\n"
 msgstr "Misslyckades att initiera tjänsten \"%s\".\n"
 
-#: src/datastore/plugin_datastore_heap.c:891
+#: src/datastore/plugin_datastore_heap.c:893
 msgid "Heap database running\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_mysql.c:369
-#: src/datastore/plugin_datastore_mysql.c:421
-#: src/datastore/plugin_datastore_mysql.c:1073
+#: src/datastore/plugin_datastore_mysql.c:371
+#: src/datastore/plugin_datastore_mysql.c:423
+#: src/datastore/plugin_datastore_mysql.c:1075
 msgid "MySQL statement run failure"
 msgstr ""
 
-#: src/datastore/plugin_datastore_mysql.c:408
-#: src/datastore/plugin_datastore_sqlite.c:676
+#: src/datastore/plugin_datastore_mysql.c:410
+#: src/datastore/plugin_datastore_sqlite.c:678
 #, fuzzy
 msgid "Data too large"
 msgstr "antal iterationer"
 
-#: src/datastore/plugin_datastore_mysql.c:846
+#: src/datastore/plugin_datastore_mysql.c:848
 #, fuzzy, c-format
 msgid "`%s' for `%s' failed at %s:%d with error: %s\n"
 msgstr "\"%s\" till \"%s\" misslyckades vid %s:%d med fel: %s\n"
 
-#: src/datastore/plugin_datastore_mysql.c:1178
-#: src/psycstore/plugin_psycstore_mysql.c:1934
+#: src/datastore/plugin_datastore_mysql.c:1180
 msgid "Mysql database running\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_postgres.c:274
-#: src/datastore/plugin_datastore_postgres.c:891
+#: src/datastore/plugin_datastore_postgres.c:276
+#: src/datastore/plugin_datastore_postgres.c:893
 msgid "Postgress exec failure"
 msgstr ""
 
-#: src/datastore/plugin_datastore_postgres.c:852
+#: src/datastore/plugin_datastore_postgres.c:854
 #, fuzzy
 msgid "Failed to drop table from database.\n"
 msgstr "Misslyckades att ta emot svar till \"%s\" meddelande från gnunetd\n"
 
-#: src/datastore/plugin_datastore_postgres.c:950
-#: src/psycstore/plugin_psycstore_postgres.c:1504
+#: src/datastore/plugin_datastore_postgres.c:952
 msgid "Postgres database running\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_sqlite.c:64
-#: src/testbed/generate-underlay-topology.c:48
-#: src/testbed/gnunet-daemon-latency-logger.c:53
-#: src/testbed/gnunet-daemon-testbed-underlay.c:57
+#: src/datastore/plugin_datastore_sqlite.c:66
+#: src/testbed/generate-underlay-topology.c:50
+#: src/testbed/gnunet-daemon-latency-logger.c:55
+#: src/testbed/gnunet-daemon-testbed-underlay.c:59
 #, fuzzy, c-format
 msgid "`%s' failed at %s:%u with error: %s"
 msgstr "\"%s\" misslyckades vid %s:%d med fel: %s\n"
 
-#: src/datastore/plugin_datastore_sqlite.c:269
-#: src/namecache/plugin_namecache_sqlite.c:207
-#: src/namestore/plugin_namestore_sqlite.c:203
-#: src/peerstore/plugin_peerstore_sqlite.c:533
-#: src/psycstore/plugin_psycstore_sqlite.c:323
-#: src/reclaim/plugin_reclaim_sqlite.c:210
+#: src/datastore/plugin_datastore_sqlite.c:271
+#: src/namecache/plugin_namecache_sqlite.c:173
+#: src/namestore/plugin_namestore_sqlite.c:206
+#: src/peerstore/plugin_peerstore_sqlite.c:535
+#: src/reclaim/plugin_reclaim_sqlite.c:212
 #, fuzzy, c-format
 msgid "Unable to initialize SQLite: %s.\n"
 msgstr "Kunde inte initiera SQLite.\n"
 
-#: src/datastore/plugin_datastore_sqlite.c:627
+#: src/datastore/plugin_datastore_sqlite.c:629
 msgid "sqlite bind failure"
 msgstr ""
 
-#: src/datastore/plugin_datastore_sqlite.c:1325
+#: src/datastore/plugin_datastore_sqlite.c:1327
 msgid "sqlite version to old to determine size, assuming zero\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_sqlite.c:1359
+#: src/datastore/plugin_datastore_sqlite.c:1361
 #, c-format
 msgid ""
 "Using sqlite page utilization to estimate payload (%llu pages of size %llu "
 "bytes)\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_sqlite.c:1403
-#: src/namecache/plugin_namecache_sqlite.c:638
-#: src/namestore/plugin_namestore_sqlite.c:753
-#: src/reclaim/plugin_reclaim_sqlite.c:709
+#: src/datastore/plugin_datastore_sqlite.c:1405
+#: src/namecache/plugin_namecache_sqlite.c:557
+#: src/namestore/plugin_namestore_sqlite.c:750
+#: src/reclaim/plugin_reclaim_sqlite.c:711
 msgid "Sqlite database running\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_template.c:251
+#: src/datastore/plugin_datastore_template.c:253
 msgid "Template database running\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:156
+#: src/dht/gnunet-dht-get.c:158
 #, c-format
 msgid ""
 "Result %d, type %d:\n"
 "%.*s\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:157
+#: src/dht/gnunet-dht-get.c:159
 #, c-format
 msgid "Result %d, type %d:\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:202
+#: src/dht/gnunet-dht-get.c:204
 msgid "Must provide key for DHT GET!\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:208 src/dht/gnunet-dht-monitor.c:255
+#: src/dht/gnunet-dht-get.c:210 src/dht/gnunet-dht-monitor.c:257
 #, fuzzy
 msgid "Failed to connect to DHT service!\n"
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/dht/gnunet-dht-get.c:217
-msgid "Issueing DHT GET with key"
+#: src/dht/gnunet-dht-get.c:219
+msgid "Issuing DHT GET with key"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:246 src/dht/gnunet-dht-monitor.c:305
-#: src/dht/gnunet-dht-put.c:196
+#: src/dht/gnunet-dht-get.c:248 src/dht/gnunet-dht-monitor.c:307
+#: src/dht/gnunet-dht-put.c:198
 msgid "the query key"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:251
+#: src/dht/gnunet-dht-get.c:253
 msgid "how many parallel requests (replicas) to create"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:256 src/dht/gnunet-dht-monitor.c:311
+#: src/dht/gnunet-dht-get.c:258 src/dht/gnunet-dht-monitor.c:313
 msgid "the type of data to look for"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:261
+#: src/dht/gnunet-dht-get.c:263
 msgid "how long to execute this query before giving up?"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:265 src/dht/gnunet-dht-put.c:200
+#: src/dht/gnunet-dht-get.c:267 src/dht/gnunet-dht-put.c:202
 msgid "use DHT's demultiplex everywhere option"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:278
+#: src/dht/gnunet-dht-get.c:280
 msgid "Issue a GET request to the GNUnet DHT, prints results."
 msgstr ""
 
-#: src/dht/gnunet-dht-monitor.c:317
+#: src/dht/gnunet-dht-monitor.c:319
 msgid "how long should the monitor command run"
 msgstr ""
 
-#: src/dht/gnunet-dht-monitor.c:322 src/fs/gnunet-download.c:370
-#: src/nse/gnunet-nse-profiler.c:876
+#: src/dht/gnunet-dht-monitor.c:324 src/fs/gnunet-download.c:372
+#: src/nse/gnunet-nse-profiler.c:878
 msgid "be verbose (print progress information)"
 msgstr ""
 
-#: src/dht/gnunet-dht-monitor.c:335
+#: src/dht/gnunet-dht-monitor.c:337
 msgid "Prints all packets that go through the DHT."
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:914 src/testbed/gnunet-testbed-profiler.c:251
+#: src/dht/gnunet_dht_profiler.c:916 src/testbed/gnunet-testbed-profiler.c:253
 #, fuzzy, c-format
 msgid "Exiting as the number of peers is %u\n"
 msgstr "Maximalt antal chattklienter uppnått.\n"
 
-#: src/dht/gnunet_dht_profiler.c:947 src/rps/gnunet-rps-profiler.c:2764
+#: src/dht/gnunet_dht_profiler.c:949 src/rps/gnunet-rps-profiler.c:2953
 #, fuzzy
 msgid "number of peers to start"
 msgstr "antal iterationer"
 
-#: src/dht/gnunet_dht_profiler.c:952
+#: src/dht/gnunet_dht_profiler.c:954
 msgid "number of PUTs to perform per peer"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:957 src/nse/gnunet-nse-profiler.c:858
-#: src/testbed/gnunet-testbed-profiler.c:302
+#: src/dht/gnunet_dht_profiler.c:959 src/nse/gnunet-nse-profiler.c:860
+#: src/testbed/gnunet-testbed-profiler.c:304
 msgid "name of the file with the login information for the testbed"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:962
+#: src/dht/gnunet_dht_profiler.c:964
 msgid "delay between rounds for collecting statistics (default: 30 sec)"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:967
+#: src/dht/gnunet_dht_profiler.c:969
 msgid "delay to start doing PUTs (default: 1 sec)"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:972
+#: src/dht/gnunet_dht_profiler.c:974
 msgid "delay to start doing GETs (default: 5 min)"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:977
+#: src/dht/gnunet_dht_profiler.c:979
 msgid "replication degree for DHT PUTs"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:982
+#: src/dht/gnunet_dht_profiler.c:984
 msgid "chance that a peer is selected at random for PUTs"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:987
+#: src/dht/gnunet_dht_profiler.c:989
 msgid "timeout for DHT PUT and GET requests (default: 1 min)"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:1007
+#: src/dht/gnunet_dht_profiler.c:1009
 #, fuzzy
 msgid "Measure quality and performance of the DHT service."
 msgstr "Kan inte tillgå tjänsten"
 
-#: src/dht/gnunet-dht-put.c:132
+#: src/dht/gnunet-dht-put.c:134
 msgid "Must provide KEY and DATA for DHT put!\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:140
+#: src/dht/gnunet-dht-put.c:142
 #, fuzzy
 msgid "Could not connect to DHT service!\n"
 msgstr "Kunde inte ansluta till gnunetd.\n"
 
-#: src/dht/gnunet-dht-put.c:151
+#: src/dht/gnunet-dht-put.c:153
 #, c-format
 msgid "Issuing put request for `%s' with data `%s'!\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:186
+#: src/dht/gnunet-dht-put.c:188
 msgid "the data to insert under the key"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:191
+#: src/dht/gnunet-dht-put.c:193
 msgid "how long to store this entry in the dht (in seconds)"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:205
+#: src/dht/gnunet-dht-put.c:207
 msgid "how many replicas to create"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:209
+#: src/dht/gnunet-dht-put.c:211
 msgid "use DHT's record route option"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:214
+#: src/dht/gnunet-dht-put.c:216
 msgid "the type to insert data as"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:231
+#: src/dht/gnunet-dht-put.c:233
 msgid "Issue a PUT request to the GNUnet DHT insert DATA under KEY."
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:367
+#: src/dht/gnunet-service-dht_clients.c:369
 #, fuzzy
 msgid "# GET requests from clients injected"
 msgstr "# byte mottogs via TCP"
 
-#: src/dht/gnunet-service-dht_clients.c:481
+#: src/dht/gnunet-service-dht_clients.c:483
 #, fuzzy
 msgid "# PUT requests received from clients"
 msgstr "Meddelande mottaget från klient är ogiltig.\n"
 
-#: src/dht/gnunet-service-dht_clients.c:614
+#: src/dht/gnunet-service-dht_clients.c:616
 #, fuzzy
 msgid "# GET requests received from clients"
 msgstr "Meddelande mottaget från klient är ogiltig.\n"
 
-#: src/dht/gnunet-service-dht_clients.c:840
+#: src/dht/gnunet-service-dht_clients.c:842
 #, fuzzy
 msgid "# GET STOP requests received from clients"
 msgstr "Meddelande mottaget från klient är ogiltig.\n"
 
-#: src/dht/gnunet-service-dht_clients.c:1025
+#: src/dht/gnunet-service-dht_clients.c:1027
 msgid "# Key match, type mismatches in REPLY to CLIENT"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:1040
+#: src/dht/gnunet-service-dht_clients.c:1042
 msgid "# Duplicate REPLIES to CLIENT request dropped"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:1086
+#: src/dht/gnunet-service-dht_clients.c:1088
 #, c-format
 msgid "Unsupported block type (%u) in request!\n"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:1093
+#: src/dht/gnunet-service-dht_clients.c:1095
 #, fuzzy
 msgid "# RESULTS queued for clients"
 msgstr "Meddelande mottaget från klient är ogiltig.\n"
 
-#: src/dht/gnunet-service-dht_clients.c:1171
+#: src/dht/gnunet-service-dht_clients.c:1173
 msgid "# REPLIES ignored for CLIENTS (no match)"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:71
+#: src/dht/gnunet-service-dht_datacache.c:73
 #, fuzzy, c-format
 msgid "%s request received, but have no datacache!\n"
 msgstr "# byte mottagna av typen %d"
 
-#: src/dht/gnunet-service-dht_datacache.c:81
+#: src/dht/gnunet-service-dht_datacache.c:83
 msgid "# ITEMS stored in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:205
+#: src/dht/gnunet-service-dht_datacache.c:207
 msgid "# Good RESULTS found in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:217
+#: src/dht/gnunet-service-dht_datacache.c:219
 msgid "# Duplicate RESULTS found in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:223
+#: src/dht/gnunet-service-dht_datacache.c:225
 msgid "# Invalid RESULTS found in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:229
+#: src/dht/gnunet-service-dht_datacache.c:231
 msgid "# Irrelevant RESULTS found in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:241
+#: src/dht/gnunet-service-dht_datacache.c:243
 msgid "# Unsupported RESULTS found in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:245
+#: src/dht/gnunet-service-dht_datacache.c:247
 #, c-format
 msgid "Unsupported block type (%u) in local response!\n"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:280
+#: src/dht/gnunet-service-dht_datacache.c:282
 #, fuzzy
 msgid "# GET requests given to datacache"
 msgstr "# byte mottogs via TCP"
 
-#: src/dht/gnunet-service-dht_hello.c:84
+#: src/dht/gnunet-service-dht_hello.c:86
 #, fuzzy
 msgid "# HELLOs obtained from peerinfo"
 msgstr "Meddelande mottaget från klient är ogiltig.\n"
 
-#: src/dht/gnunet-service-dht_neighbours.c:677
+#: src/dht/gnunet-service-dht_neighbours.c:679
 #, fuzzy
 msgid "# FIND PEER messages initiated"
 msgstr "# PING-meddelanden skapade"
 
-#: src/dht/gnunet-service-dht_neighbours.c:850
+#: src/dht/gnunet-service-dht_neighbours.c:852
 #, fuzzy
 msgid "# requests TTL-dropped"
 msgstr "# byte mottogs via TCP"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1053
-#: src/dht/gnunet-service-dht_neighbours.c:1096
+#: src/dht/gnunet-service-dht_neighbours.c:1055
+#: src/dht/gnunet-service-dht_neighbours.c:1098
 msgid "# Peers excluded from routing due to Bloomfilter"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1070
-#: src/dht/gnunet-service-dht_neighbours.c:1112
+#: src/dht/gnunet-service-dht_neighbours.c:1072
+#: src/dht/gnunet-service-dht_neighbours.c:1114
 msgid "# Peer selection failed"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1269
+#: src/dht/gnunet-service-dht_neighbours.c:1271
 #, fuzzy
 msgid "# PUT requests routed"
 msgstr "# byte mottogs via TCP"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1302
+#: src/dht/gnunet-service-dht_neighbours.c:1304
 #, fuzzy
 msgid "# PUT messages queued for transmission"
 msgstr "# PING-meddelanden skapade"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1313
-#: src/dht/gnunet-service-dht_neighbours.c:1453
-#: src/dht/gnunet-service-dht_neighbours.c:1556
+#: src/dht/gnunet-service-dht_neighbours.c:1315
+#: src/dht/gnunet-service-dht_neighbours.c:1455
+#: src/dht/gnunet-service-dht_neighbours.c:1558
 #, fuzzy
 msgid "# P2P messages dropped due to full queue"
 msgstr "Nätverksannonsering avstängd i konfigurationen!\n"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1398
+#: src/dht/gnunet-service-dht_neighbours.c:1400
 #, fuzzy
 msgid "# GET requests routed"
 msgstr "# byte mottogs via TCP"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1441
+#: src/dht/gnunet-service-dht_neighbours.c:1443
 #, fuzzy
 msgid "# GET messages queued for transmission"
 msgstr "# PING-meddelanden skapade"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1571
+#: src/dht/gnunet-service-dht_neighbours.c:1573
 #, fuzzy
 msgid "# RESULT messages queued for transmission"
 msgstr "# PING-meddelanden skapade"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1674
+#: src/dht/gnunet-service-dht_neighbours.c:1676
 msgid "# Expired PUTs discarded"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1682
+#: src/dht/gnunet-service-dht_neighbours.c:1684
 #, fuzzy
 msgid "# P2P PUT requests received"
 msgstr "# byte mottogs via TCP"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1686
+#: src/dht/gnunet-service-dht_neighbours.c:1688
 #, fuzzy
 msgid "# P2P PUT bytes received"
 msgstr "# byte mottogs via TCP"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1912
+#: src/dht/gnunet-service-dht_neighbours.c:1914
 msgid "# FIND PEER requests ignored due to Bloomfilter"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1920
+#: src/dht/gnunet-service-dht_neighbours.c:1922
 msgid "# FIND PEER requests ignored due to lack of HELLO"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:2082
+#: src/dht/gnunet-service-dht_neighbours.c:2084
 #, fuzzy
 msgid "# P2P GET requests received"
 msgstr "# byte mottogs via TCP"
 
-#: src/dht/gnunet-service-dht_neighbours.c:2086
+#: src/dht/gnunet-service-dht_neighbours.c:2088
 #, fuzzy
 msgid "# P2P GET bytes received"
 msgstr "# byte mottogs via TCP"
 
-#: src/dht/gnunet-service-dht_neighbours.c:2151
+#: src/dht/gnunet-service-dht_neighbours.c:2153
 #, fuzzy
 msgid "# P2P FIND PEER requests processed"
 msgstr "# byte mottogs via TCP"
 
-#: src/dht/gnunet-service-dht_neighbours.c:2172
+#: src/dht/gnunet-service-dht_neighbours.c:2174
 #, fuzzy
 msgid "# P2P GET requests ONLY routed"
 msgstr "# byte mottogs via TCP"
 
-#: src/dht/gnunet-service-dht_neighbours.c:2349
+#: src/dht/gnunet-service-dht_neighbours.c:2351
 msgid "# Expired results discarded"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:2365
+#: src/dht/gnunet-service-dht_neighbours.c:2367
 #, fuzzy
 msgid "# P2P RESULTS received"
 msgstr "# krypterade PONG-meddelanden mottagna"
 
-#: src/dht/gnunet-service-dht_neighbours.c:2369
+#: src/dht/gnunet-service-dht_neighbours.c:2371
 #, fuzzy
 msgid "# P2P RESULT bytes received"
 msgstr "# krypterade PONG-meddelanden mottagna"
 
-#: src/dht/gnunet-service-dht_nse.c:57
+#: src/dht/gnunet-service-dht_nse.c:59
 #, fuzzy
 msgid "# Network size estimates received"
 msgstr "# byte mottogs via TCP"
 
-#: src/dht/gnunet-service-dht_routing.c:221
+#: src/dht/gnunet-service-dht_routing.c:223
 msgid "# Good REPLIES matched against routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:235
+#: src/dht/gnunet-service-dht_routing.c:237
 msgid "# Duplicate REPLIES matched against routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:241
+#: src/dht/gnunet-service-dht_routing.c:243
 msgid "# Invalid REPLIES matched against routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:247
+#: src/dht/gnunet-service-dht_routing.c:249
 msgid "# Irrelevant REPLIES matched against routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:259
+#: src/dht/gnunet-service-dht_routing.c:261
 msgid "# Unsupported REPLIES matched against routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:337
+#: src/dht/gnunet-service-dht_routing.c:339
 msgid "# Entries removed from routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:413
+#: src/dht/gnunet-service-dht_routing.c:415
 msgid "# Entries added to routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:435
+#: src/dht/gnunet-service-dht_routing.c:437
 #, fuzzy
 msgid "# DHT requests combined"
 msgstr "# byte mottogs via TCP"
 
-#: src/dht/plugin_block_dht.c:187
+#: src/dht/plugin_block_dht.c:189
 #, fuzzy, c-format
 msgid "Block not of type %u\n"
 msgstr "Ingen transport av typ %d är känd.\n"
 
-#: src/dht/plugin_block_dht.c:196
+#: src/dht/plugin_block_dht.c:198
 msgid "Size mismatch for block\n"
 msgstr ""
 
-#: src/dht/plugin_block_dht.c:207
+#: src/dht/plugin_block_dht.c:209
 #, c-format
 msgid "Block of type %u is malformed\n"
 msgstr ""
 
-#: src/dns/gnunet-dns-monitor.c:351 src/dns/gnunet-dns-monitor.c:356
+#: src/dns/gnunet-dns-monitor.c:353 src/dns/gnunet-dns-monitor.c:358
 msgid "only monitor DNS queries"
 msgstr ""
 
-#: src/dns/gnunet-dns-monitor.c:368
+#: src/dns/gnunet-dns-monitor.c:370
 msgid "Monitor DNS queries."
 msgstr ""
 
-#: src/dns/gnunet-dns-redirector.c:235
+#: src/dns/gnunet-dns-redirector.c:237
 msgid "set A records"
 msgstr ""
 
-#: src/dns/gnunet-dns-redirector.c:241
+#: src/dns/gnunet-dns-redirector.c:243
 msgid "set AAAA records"
 msgstr ""
 
-#: src/dns/gnunet-dns-redirector.c:254
+#: src/dns/gnunet-dns-redirector.c:256
 msgid "Change DNS replies to point elsewhere."
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:460
+#: src/dns/gnunet-service-dns.c:462
 msgid "# DNS requests answered via TUN interface"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:608
+#: src/dns/gnunet-service-dns.c:610
 msgid "# DNS exit failed (failed to open socket)"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:738
+#: src/dns/gnunet-service-dns.c:740
 msgid "# External DNS response discarded (no matching request)"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:813
+#: src/dns/gnunet-service-dns.c:815
 msgid "# Client response discarded (no matching request)"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:928
+#: src/dns/gnunet-service-dns.c:930
 msgid "Received malformed IPv4-UDP packet on TUN interface.\n"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:944
+#: src/dns/gnunet-service-dns.c:946
 msgid "Received malformed IPv6-UDP packet on TUN interface.\n"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:953
+#: src/dns/gnunet-service-dns.c:955
 #, c-format
 msgid "Got non-IP packet with %u bytes and protocol %u from TUN\n"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:963
+#: src/dns/gnunet-service-dns.c:965
 msgid "DNS interceptor got non-DNS packet (dropped)\n"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:965
+#: src/dns/gnunet-service-dns.c:967
 msgid "# Non-DNS UDP packet received via TUN interface"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:1032
+#: src/dns/gnunet-service-dns.c:1034
 #, fuzzy
 msgid "# DNS requests received via TUN interface"
 msgstr "Meddelande mottaget från klient är ogiltig.\n"
 
-#: src/dns/gnunet-service-dns.c:1080 src/exit/gnunet-daemon-exit.c:3563
+#: src/dns/gnunet-service-dns.c:1082 src/exit/gnunet-daemon-exit.c:3565
 #, fuzzy
 msgid "need a valid IPv4 or IPv6 address\n"
 msgstr "Ogiltigt svar på \"%s\".\n"
 
-#: src/dns/gnunet-service-dns.c:1090
+#: src/dns/gnunet-service-dns.c:1092
 #, c-format
 msgid "`%s' must be installed SUID, will not run DNS interceptor\n"
 msgstr ""
 
-#: src/dv/gnunet-dv.c:173
+#: src/dv/gnunet-dv.c:175
 #, fuzzy
 msgid "Print information about DV state"
 msgstr "Skriv ut information om GNUnets motparter."
 
-#: src/exit/gnunet-daemon-exit.c:958
+#: src/exit/gnunet-daemon-exit.c:960
 #, fuzzy
 msgid "# TCP packets sent via TUN"
 msgstr "# byte skickade via UDP"
 
-#: src/exit/gnunet-daemon-exit.c:1059
+#: src/exit/gnunet-daemon-exit.c:1061
 #, fuzzy
 msgid "# ICMP packets sent via TUN"
 msgstr "# byte skickade via UDP"
 
-#: src/exit/gnunet-daemon-exit.c:1338
+#: src/exit/gnunet-daemon-exit.c:1340
 #, fuzzy
 msgid "# UDP packets sent via TUN"
 msgstr "# byte skickade via UDP"
 
-#: src/exit/gnunet-daemon-exit.c:1462 src/exit/gnunet-daemon-exit.c:1570
-#: src/exit/gnunet-daemon-exit.c:1617 src/exit/gnunet-daemon-exit.c:1699
-#: src/exit/gnunet-daemon-exit.c:1820 src/exit/gnunet-daemon-exit.c:1951
-#: src/exit/gnunet-daemon-exit.c:2205
+#: src/exit/gnunet-daemon-exit.c:1464 src/exit/gnunet-daemon-exit.c:1572
+#: src/exit/gnunet-daemon-exit.c:1619 src/exit/gnunet-daemon-exit.c:1701
+#: src/exit/gnunet-daemon-exit.c:1822 src/exit/gnunet-daemon-exit.c:1953
+#: src/exit/gnunet-daemon-exit.c:2207
 #, fuzzy
 msgid "# Bytes received from CADET"
 msgstr "# byte mottagna via HTTP"
 
-#: src/exit/gnunet-daemon-exit.c:1465
+#: src/exit/gnunet-daemon-exit.c:1467
 #, fuzzy
 msgid "# UDP IP-exit requests received via cadet"
 msgstr "# byte mottogs via TCP"
 
-#: src/exit/gnunet-daemon-exit.c:1573
+#: src/exit/gnunet-daemon-exit.c:1575
 #, fuzzy
 msgid "# UDP service requests received via cadet"
 msgstr "# byte mottogs via TCP"
 
-#: src/exit/gnunet-daemon-exit.c:1613
+#: src/exit/gnunet-daemon-exit.c:1615
 #, fuzzy
 msgid "# TCP service creation requests received via cadet"
 msgstr "# byte mottogs via TCP"
 
-#: src/exit/gnunet-daemon-exit.c:1702
+#: src/exit/gnunet-daemon-exit.c:1704
 #, fuzzy
 msgid "# TCP IP-exit creation requests received via cadet"
 msgstr "# byte mottogs via TCP"
 
-#: src/exit/gnunet-daemon-exit.c:1786
+#: src/exit/gnunet-daemon-exit.c:1788
 #, fuzzy
 msgid "# TCP DATA requests dropped (no session)"
 msgstr "# byte mottogs via TCP"
 
-#: src/exit/gnunet-daemon-exit.c:1823
+#: src/exit/gnunet-daemon-exit.c:1825
 #, fuzzy
 msgid "# TCP data requests received via cadet"
 msgstr "# byte mottogs via TCP"
 
-#: src/exit/gnunet-daemon-exit.c:1954
+#: src/exit/gnunet-daemon-exit.c:1956
 #, fuzzy
 msgid "# ICMP IP-exit requests received via cadet"
 msgstr "# byte mottogs via TCP"
 
-#: src/exit/gnunet-daemon-exit.c:2020 src/exit/gnunet-daemon-exit.c:2277
-#: src/exit/gnunet-daemon-exit.c:2632 src/vpn/gnunet-service-vpn.c:826
-#: src/vpn/gnunet-service-vpn.c:989 src/vpn/gnunet-service-vpn.c:2103
+#: src/exit/gnunet-daemon-exit.c:2022 src/exit/gnunet-daemon-exit.c:2279
+#: src/exit/gnunet-daemon-exit.c:2634 src/vpn/gnunet-service-vpn.c:828
+#: src/vpn/gnunet-service-vpn.c:991 src/vpn/gnunet-service-vpn.c:2105
 msgid "# ICMPv4 packets dropped (type not allowed)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2079 src/exit/gnunet-daemon-exit.c:2336
-#: src/exit/gnunet-daemon-exit.c:2669 src/vpn/gnunet-service-vpn.c:885
-#: src/vpn/gnunet-service-vpn.c:1022 src/vpn/gnunet-service-vpn.c:2156
+#: src/exit/gnunet-daemon-exit.c:2081 src/exit/gnunet-daemon-exit.c:2338
+#: src/exit/gnunet-daemon-exit.c:2671 src/vpn/gnunet-service-vpn.c:887
+#: src/vpn/gnunet-service-vpn.c:1024 src/vpn/gnunet-service-vpn.c:2158
 msgid "# ICMPv6 packets dropped (type not allowed)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2208
+#: src/exit/gnunet-daemon-exit.c:2210
 #, fuzzy
 msgid "# ICMP service requests received via cadet"
 msgstr "Meddelande mottaget från klient är ogiltig.\n"
 
-#: src/exit/gnunet-daemon-exit.c:2262 src/vpn/gnunet-service-vpn.c:983
-#: src/vpn/gnunet-service-vpn.c:2094
+#: src/exit/gnunet-daemon-exit.c:2264 src/vpn/gnunet-service-vpn.c:985
+#: src/vpn/gnunet-service-vpn.c:2096
 msgid "# ICMPv4 packets dropped (impossible PT to v6)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2321 src/vpn/gnunet-service-vpn.c:873
-#: src/vpn/gnunet-service-vpn.c:2128 src/vpn/gnunet-service-vpn.c:2139
+#: src/exit/gnunet-daemon-exit.c:2323 src/vpn/gnunet-service-vpn.c:875
+#: src/vpn/gnunet-service-vpn.c:2130 src/vpn/gnunet-service-vpn.c:2141
 msgid "# ICMPv6 packets dropped (impossible PT to v4)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2400 src/exit/gnunet-daemon-exit.c:3066
+#: src/exit/gnunet-daemon-exit.c:2402 src/exit/gnunet-daemon-exit.c:3068
 #, fuzzy
 msgid "# Inbound CADET channels created"
 msgstr "# PING-meddelanden skapade"
 
-#: src/exit/gnunet-daemon-exit.c:2520
+#: src/exit/gnunet-daemon-exit.c:2522
 #, c-format
 msgid "Got duplicate service records for `%s:%u'\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2539
+#: src/exit/gnunet-daemon-exit.c:2541
 #, fuzzy
 msgid "# Messages transmitted via cadet channels"
 msgstr "# byte skickade av typen %d"
 
-#: src/exit/gnunet-daemon-exit.c:2717
+#: src/exit/gnunet-daemon-exit.c:2719
 msgid "# ICMP packets dropped (not allowed)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2725
+#: src/exit/gnunet-daemon-exit.c:2727
 msgid "ICMP Packet dropped, have no matching connection information\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2799
+#: src/exit/gnunet-daemon-exit.c:2801
 msgid "UDP Packet dropped, have no matching connection information\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2871
+#: src/exit/gnunet-daemon-exit.c:2873
 msgid "TCP Packet dropped, have no matching connection information\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2919
+#: src/exit/gnunet-daemon-exit.c:2921
 #, fuzzy
 msgid "# Packets received from TUN"
 msgstr "# byte mottagna via HTTP"
 
-#: src/exit/gnunet-daemon-exit.c:2933
+#: src/exit/gnunet-daemon-exit.c:2935
 #, fuzzy
 msgid "# Bytes received from TUN"
 msgstr "# byte mottagna via HTTP"
 
-#: src/exit/gnunet-daemon-exit.c:2959
+#: src/exit/gnunet-daemon-exit.c:2961
 msgid "IPv4 packet options received.  Ignored.\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2986
+#: src/exit/gnunet-daemon-exit.c:2988
 #, c-format
 msgid "IPv4 packet with unsupported next header %u received.  Ignored.\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3032
+#: src/exit/gnunet-daemon-exit.c:3034
 #, c-format
 msgid "IPv6 packet with unsupported next header %d received.  Ignored.\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3040
+#: src/exit/gnunet-daemon-exit.c:3042
 #, c-format
 msgid "Packet from unknown protocol %u received.  Ignored.\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3243 src/exit/gnunet-daemon-exit.c:3253
+#: src/exit/gnunet-daemon-exit.c:3245 src/exit/gnunet-daemon-exit.c:3255
 #, fuzzy, c-format
 msgid "Option `%s' for domain `%s' is not formatted correctly!\n"
 msgstr "%s: flagga \"%s\" är tvetydig\n"
 
-#: src/exit/gnunet-daemon-exit.c:3267 src/exit/gnunet-daemon-exit.c:3275
+#: src/exit/gnunet-daemon-exit.c:3269 src/exit/gnunet-daemon-exit.c:3277
 #, c-format
 msgid "`%s' is not a valid port number (for domain `%s')!"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3316
+#: src/exit/gnunet-daemon-exit.c:3318
 #, c-format
 msgid "No addresses found for hostname `%s' of service `%s'!\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3330 src/exit/gnunet-daemon-exit.c:3343
+#: src/exit/gnunet-daemon-exit.c:3332 src/exit/gnunet-daemon-exit.c:3345
 #, c-format
 msgid "Service `%s' configured for IPv4, but IPv4 is disabled!\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3355
+#: src/exit/gnunet-daemon-exit.c:3357
 #, c-format
 msgid "No IP addresses found for hostname `%s' of service `%s'!\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3499
+#: src/exit/gnunet-daemon-exit.c:3501
 msgid ""
 "This system does not support IPv4, will disable IPv4 functions despite them "
 "being enabled in the configuration\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3507
+#: src/exit/gnunet-daemon-exit.c:3509
 msgid ""
 "This system does not support IPv6, will disable IPv6 functions despite them "
 "being enabled in the configuration\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3514
+#: src/exit/gnunet-daemon-exit.c:3516
 msgid ""
 "Cannot enable IPv4 exit but disable IPv4 on TUN interface, will use "
 "ENABLE_IPv4=YES\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3520
+#: src/exit/gnunet-daemon-exit.c:3522
 msgid ""
 "Cannot enable IPv6 exit but disable IPv6 on TUN interface, will use "
 "ENABLE_IPv6=YES\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3688
+#: src/exit/gnunet-daemon-exit.c:3690
 msgid "Must be a number"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3803
+#: src/exit/gnunet-daemon-exit.c:3805
 #, c-format
 msgid "`%s' must be installed SUID, EXIT will not work\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3815 src/pt/gnunet-daemon-pt.c:1202
+#: src/exit/gnunet-daemon-exit.c:3817 src/pt/gnunet-daemon-pt.c:1204
 msgid "No useful service enabled.  Exiting.\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3964
+#: src/exit/gnunet-daemon-exit.c:3966
 msgid "Daemon to run to provide an IP exit node for the VPN"
 msgstr ""
 
-#: src/fragmentation/defragmentation.c:273
+#: src/fragmentation/defragmentation.c:275
 msgid "# acknowledgements sent for fragment"
 msgstr ""
 
-#: src/fragmentation/defragmentation.c:466
-#: src/transport/plugin_transport_wlan.c:1552
+#: src/fragmentation/defragmentation.c:468
+#: src/transport/plugin_transport_wlan.c:1554
 #, fuzzy
 msgid "# fragments received"
 msgstr "# byte mottogs via TCP"
 
-#: src/fragmentation/defragmentation.c:536
+#: src/fragmentation/defragmentation.c:538
 #, fuzzy
 msgid "# duplicate fragments received"
 msgstr "# byte mottogs via TCP"
 
-#: src/fragmentation/defragmentation.c:554
+#: src/fragmentation/defragmentation.c:556
 msgid "# messages defragmented"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:238
+#: src/fragmentation/fragmentation.c:240
 #, fuzzy
 msgid "# fragments transmitted"
 msgstr "# byte skickade av typen %d"
 
-#: src/fragmentation/fragmentation.c:243
+#: src/fragmentation/fragmentation.c:245
 #, fuzzy
 msgid "# fragments retransmitted"
 msgstr "# byte skickade av typen %d"
 
-#: src/fragmentation/fragmentation.c:276
+#: src/fragmentation/fragmentation.c:278
 #, fuzzy
 msgid "# fragments wrap arounds"
 msgstr "# byte skickade av typen %d"
 
-#: src/fragmentation/fragmentation.c:323
+#: src/fragmentation/fragmentation.c:325
 msgid "# messages fragmented"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:329
+#: src/fragmentation/fragmentation.c:331
 msgid "# total size of fragmented messages"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:454
+#: src/fragmentation/fragmentation.c:456
 msgid "# fragment acknowledgements received"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:461
+#: src/fragmentation/fragmentation.c:463
 msgid "# bits removed from fragmentation ACKs"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:485
+#: src/fragmentation/fragmentation.c:487
 #, fuzzy
 msgid "# fragmentation transmissions completed"
 msgstr "# klartext PONG-meddelanden mottagna"
 
-#: src/fs/fs_api.c:497
+#: src/fs/fs_api.c:499
 #, fuzzy, c-format
 msgid "Could not open file `%s': %s"
 msgstr "Kunde inte slå upp \"%s\": %s\n"
 
-#: src/fs/fs_api.c:508
+#: src/fs/fs_api.c:510
 #, fuzzy, c-format
 msgid "Could not read file `%s': %s"
 msgstr "Kunde inte slå upp \"%s\": %s\n"
 
-#: src/fs/fs_api.c:516
+#: src/fs/fs_api.c:518
 #, c-format
 msgid "Short read reading from file `%s'!"
 msgstr ""
 
-#: src/fs/fs_api.c:1124
+#: src/fs/fs_api.c:1126
 #, fuzzy, c-format
 msgid "Failed to resume publishing information `%s': %s\n"
 msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
 
-#: src/fs/fs_api.c:1644
+#: src/fs/fs_api.c:1646
 #, c-format
 msgid "Failure while resuming publishing operation `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_api.c:1660
+#: src/fs/fs_api.c:1662
 #, fuzzy, c-format
 msgid "Failed to resume publishing operation `%s': %s\n"
 msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
 
-#: src/fs/fs_api.c:2320
+#: src/fs/fs_api.c:2322
 #, c-format
 msgid "Failure while resuming unindexing operation `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_api.c:2330
+#: src/fs/fs_api.c:2332
 #, fuzzy, c-format
 msgid "Failed to resume unindexing operation `%s': %s\n"
 msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
 
-#: src/fs/fs_api.c:2458 src/fs/fs_api.c:2704
+#: src/fs/fs_api.c:2460 src/fs/fs_api.c:2706
 #, fuzzy, c-format
 msgid "Failed to resume sub-download `%s': %s\n"
 msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
 
-#: src/fs/fs_api.c:2476
+#: src/fs/fs_api.c:2478
 #, fuzzy, c-format
 msgid "Failed to resume sub-search `%s': %s\n"
 msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
 
-#: src/fs/fs_api.c:2491 src/fs/fs_api.c:2510 src/fs/fs_api.c:3014
+#: src/fs/fs_api.c:2493 src/fs/fs_api.c:2512 src/fs/fs_api.c:3016
 #, c-format
 msgid "Failure while resuming search operation `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_api.c:2694
+#: src/fs/fs_api.c:2696
 #, c-format
 msgid "Failed to resume sub-download `%s': could not open file `%s'\n"
 msgstr ""
 
-#: src/fs/fs_api.c:2957
+#: src/fs/fs_api.c:2959
 msgid "Could not resume running search, will resume as paused search\n"
 msgstr ""
 
-#: src/fs/fs_api.c:3052
+#: src/fs/fs_api.c:3054
 #, c-format
 msgid "Failure while resuming download operation `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_directory.c:211
+#: src/fs/fs_directory.c:213
 #, fuzzy
 msgid "MAGIC mismatch.  This is not a GNUnet directory.\n"
 msgstr "Filformatsfel (inte en GNUnet-katalog?)\n"
 
-#: src/fs/fs_download.c:308
+#: src/fs/fs_download.c:310
 msgid ""
 "Recursive downloads of directories larger than 4 GB are not supported on 32-"
 "bit systems\n"
 msgstr ""
 
-#: src/fs/fs_download.c:333
+#: src/fs/fs_download.c:335
 msgid "Directory too large for system address space\n"
 msgstr ""
 
-#: src/fs/fs_download.c:345
+#: src/fs/fs_download.c:347
 #, fuzzy, c-format
 msgid ""
 "Failed to access full directroy contents of `%s' for recursive download\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/fs/fs_download.c:532 src/fs/fs_download.c:544
+#: src/fs/fs_download.c:534 src/fs/fs_download.c:546
 #, fuzzy, c-format
 msgid "Failed to open file `%s' for writing"
 msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
 
-#: src/fs/fs_download.c:954
+#: src/fs/fs_download.c:956
 #, fuzzy, c-format
 msgid "Failed to create directory for recursive download of `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/fs/fs_download.c:1045
+#: src/fs/fs_download.c:1047
 #, c-format
 msgid ""
 "Internal error or bogus download URI (expected %u bytes at depth %u and "
 "offset %llu/%llu, got %u bytes)"
 msgstr ""
 
-#: src/fs/fs_download.c:1073
+#: src/fs/fs_download.c:1075
 msgid "internal error decrypting content"
 msgstr ""
 
-#: src/fs/fs_download.c:1097
+#: src/fs/fs_download.c:1099
 #, fuzzy, c-format
 msgid "Download failed: could not open file `%s': %s"
 msgstr "Kunde inte slå upp \"%s\": %s\n"
 
-#: src/fs/fs_download.c:1109
+#: src/fs/fs_download.c:1111
 #, fuzzy, c-format
 msgid "Failed to seek to offset %llu in file `%s': %s"
 msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
 
-#: src/fs/fs_download.c:1118
+#: src/fs/fs_download.c:1120
 #, fuzzy, c-format
 msgid "Failed to write block of %u bytes at offset %llu in file `%s': %s"
 msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
 
-#: src/fs/fs_download.c:1218
+#: src/fs/fs_download.c:1220
 #, fuzzy
 msgid "internal error decoding tree"
 msgstr "=\tFel vid läsning av katalog.\n"
 
-#: src/fs/fs_download.c:1883
+#: src/fs/fs_download.c:1885
 #, fuzzy
 msgid "Invalid URI"
 msgstr "Ogiltiga argument: "
 
-#: src/fs/fs_getopt.c:224
+#: src/fs/fs_getopt.c:235
 #, c-format
 msgid ""
 "Unknown metadata type in metadata option `%s'.  Using metadata type "
 "`unknown' instead.\n"
 msgstr ""
 
-#: src/fs/fs_list_indexed.c:150
+#: src/fs/fs_list_indexed.c:152
 #, fuzzy, c-format
 msgid "Failed to receive response from `%s' service.\n"
 msgstr "Misslyckades att ta emot svar till \"%s\" meddelande från gnunetd\n"
 
-#: src/fs/fs_list_indexed.c:194
+#: src/fs/fs_list_indexed.c:196
 #, fuzzy, c-format
 msgid "Failed to not connect to `%s' service.\n"
 msgstr "Misslyckades att initiera tjänsten \"%s\".\n"
 
-#: src/fs/fs_misc.c:126
+#: src/fs/fs_misc.c:128
 #, fuzzy, c-format
 msgid "Did not find mime type `%s' in extension list.\n"
 msgstr "Kunde inte hitta motpart \"%s\" i routingtabell!\n"
 
-#: src/fs/fs_namespace.c:205
+#: src/fs/fs_namespace.c:207
 #, fuzzy, c-format
 msgid "Failed to open `%s' for writing: %s\n"
 msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
 
-#: src/fs/fs_namespace.c:230
+#: src/fs/fs_namespace.c:232
 #, fuzzy, c-format
 msgid "Failed to write `%s': %s\n"
 msgstr "Fel vid %s:%d.\n"
 
-#: src/fs/fs_namespace.c:322
+#: src/fs/fs_namespace.c:324
 #, fuzzy, c-format
 msgid "Failed to read `%s': %s\n"
 msgstr "Fel vid %s:%d.\n"
 
-#: src/fs/fs_namespace.c:468
+#: src/fs/fs_namespace.c:470
 #, fuzzy
 msgid "Failed to connect to datastore."
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/fs/fs_publish.c:125 src/fs/fs_publish.c:436
+#: src/fs/fs_publish.c:127 src/fs/fs_publish.c:438
 #, fuzzy, c-format
 msgid "Publishing failed: %s"
 msgstr ""
 "\n"
 "Fel vid uppladdning av fil: %s\n"
 
-#: src/fs/fs_publish.c:722 src/fs/fs_publish.c:776 src/fs/fs_publish.c:821
-#: src/fs/fs_publish.c:842 src/fs/fs_publish.c:872 src/fs/fs_publish.c:1138
+#: src/fs/fs_publish.c:724 src/fs/fs_publish.c:778 src/fs/fs_publish.c:823
+#: src/fs/fs_publish.c:844 src/fs/fs_publish.c:874 src/fs/fs_publish.c:1140
 #, 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:778
+#: src/fs/fs_publish.c:780
 #, fuzzy
 msgid "error on index-start request to `fs' service"
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/fs/fs_publish.c:823
+#: src/fs/fs_publish.c:825
 msgid "failed to compute hash"
 msgstr ""
 
-#: src/fs/fs_publish.c:843
+#: src/fs/fs_publish.c:845
 msgid "filename too long"
 msgstr ""
 
-#: src/fs/fs_publish.c:874
+#: src/fs/fs_publish.c:876
 #, fuzzy
 msgid "could not connect to `fs' service"
 msgstr "Kunde inte ansluta till gnunetd.\n"
 
-#: src/fs/fs_publish.c:900
+#: src/fs/fs_publish.c:902
 #, 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:989 src/fs/fs_publish.c:1025
+#: src/fs/fs_publish.c:991 src/fs/fs_publish.c:1027
 msgid "Can not create LOC URI. Will continue with CHK instead.\n"
 msgstr ""
 
-#: src/fs/fs_publish.c:1092
+#: src/fs/fs_publish.c:1094
 #, 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:1100
+#: src/fs/fs_publish.c:1102
 #, fuzzy, c-format
 msgid "Recursive upload failed: %s"
 msgstr ""
 "\n"
 "Fel vid uppladdning av fil: %s\n"
 
-#: src/fs/fs_publish.c:1140
+#: src/fs/fs_publish.c:1142
 msgid "needs to be an actual file"
 msgstr ""
 
-#: src/fs/fs_publish.c:1379
+#: src/fs/fs_publish.c:1381
 #, fuzzy, c-format
 msgid "Datastore failure: %s"
 msgstr " Anslutning misslyckades (fel?)\n"
 
-#: src/fs/fs_publish.c:1470
+#: src/fs/fs_publish.c:1472
 #, c-format
 msgid "Reserving space for %u entries and %llu bytes for publication\n"
 msgstr ""
 
-#: src/fs/fs_publish_ksk.c:218
+#: src/fs/fs_publish_ksk.c:220
 #, fuzzy
 msgid "Could not connect to datastore."
 msgstr "Kunde inte ansluta till gnunetd.\n"
 
-#: src/fs/fs_publish_ublock.c:239
+#: src/fs/fs_publish_ublock.c:241
 #, fuzzy
 msgid "Internal error."
 msgstr "Okänt fel.\n"
 
-#: src/fs/fs_search.c:820 src/fs/fs_search.c:890
+#: src/fs/fs_search.c:822 src/fs/fs_search.c:892
 #, fuzzy, c-format
 msgid "Failed to parse URI `%s': %s\n"
 msgstr "Fil \"%s\" har URI: %s\n"
 
-#: src/fs/fs_search.c:977
+#: src/fs/fs_search.c:979
 #, c-format
 msgid "Got result with unknown block type `%d', ignoring"
 msgstr ""
 
-#: src/fs/fs_unindex.c:61
+#: src/fs/fs_unindex.c:63
 msgid "Failed to find given position in file"
 msgstr ""
 
-#: src/fs/fs_unindex.c:66
+#: src/fs/fs_unindex.c:68
 #, fuzzy
 msgid "Failed to read file"
 msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
 
-#: src/fs/fs_unindex.c:273
+#: src/fs/fs_unindex.c:275
 #, fuzzy
 msgid "Error communicating with `fs' service."
 msgstr "Skriv ut information om GNUnets motparter."
 
-#: src/fs/fs_unindex.c:324
+#: src/fs/fs_unindex.c:326
 #, fuzzy
 msgid "Failed to connect to FS service for unindexing."
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/fs/fs_unindex.c:374 src/fs/fs_unindex.c:386
+#: src/fs/fs_unindex.c:376 src/fs/fs_unindex.c:388
 #, fuzzy
 msgid "Failed to get KSKs from directory scan."
 msgstr "Filformatsfel (inte en GNUnet-katalog?)\n"
 
-#: src/fs/fs_unindex.c:382
+#: src/fs/fs_unindex.c:384
 #, fuzzy, c-format
 msgid "Internal error scanning `%s'.\n"
 msgstr "=\tFel vid läsning av katalog.\n"
 
-#: src/fs/fs_unindex.c:441
+#: src/fs/fs_unindex.c:443
 #, fuzzy, c-format
 msgid "Failed to remove UBlock: %s\n"
 msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
 
-#: src/fs/fs_unindex.c:586 src/fs/fs_unindex.c:650
+#: src/fs/fs_unindex.c:588 src/fs/fs_unindex.c:652
 #, fuzzy
 msgid "Failed to connect to `datastore' service."
 msgstr "Misslyckades att initiera tjänsten \"%s\".\n"
 
-#: src/fs/fs_unindex.c:663
+#: src/fs/fs_unindex.c:665
 #, fuzzy
 msgid "Failed to open file for unindexing."
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/fs/fs_unindex.c:702
+#: src/fs/fs_unindex.c:704
 #, fuzzy
 msgid "Failed to compute hash of file."
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/fs/fs_uri.c:232
+#: src/fs/fs_uri.c:234
 #, fuzzy, no-c-format
 msgid "Malformed KSK URI (`%' must be followed by HEX number)"
 msgstr "Ogiltig URL \"%s\" (måste börja med \"%s\")\n"
 
-#: src/fs/fs_uri.c:291
+#: src/fs/fs_uri.c:293
 #, fuzzy
 msgid "Malformed KSK URI (must not begin or end with `+')"
 msgstr "Ogiltig URL \"%s\" (måste börja med \"%s\")\n"
 
-#: src/fs/fs_uri.c:309
+#: src/fs/fs_uri.c:311
 #, fuzzy
 msgid "Malformed KSK URI (`++' not allowed)"
 msgstr "Ogiltig URL \"%s\" (måste börja med \"%s\")\n"
 
-#: src/fs/fs_uri.c:316
+#: src/fs/fs_uri.c:318
 #, fuzzy
 msgid "Malformed KSK URI (quotes not balanced)"
 msgstr "Ogiltig URL \"%s\" (måste börja med \"%s\")\n"
 
-#: src/fs/fs_uri.c:386
+#: src/fs/fs_uri.c:388
 msgid "Malformed SKS URI (wrong syntax)"
 msgstr ""
 
-#: src/fs/fs_uri.c:427
+#: src/fs/fs_uri.c:429
 msgid "Malformed CHK URI (wrong syntax)"
 msgstr ""
 
-#: src/fs/fs_uri.c:442
+#: src/fs/fs_uri.c:444
 msgid "Malformed CHK URI (failed to decode CHK)"
 msgstr ""
 
-#: src/fs/fs_uri.c:521
+#: src/fs/fs_uri.c:523
 msgid "LOC URI malformed (wrong syntax)"
 msgstr ""
 
-#: src/fs/fs_uri.c:536
+#: src/fs/fs_uri.c:538
 msgid "LOC URI malformed (no CHK)"
 msgstr ""
 
-#: src/fs/fs_uri.c:546
+#: src/fs/fs_uri.c:548
 msgid "LOC URI malformed (missing LOC)"
 msgstr ""
 
-#: src/fs/fs_uri.c:554
+#: src/fs/fs_uri.c:556
 msgid "LOC URI malformed (wrong syntax for public key)"
 msgstr ""
 
-#: src/fs/fs_uri.c:562
+#: src/fs/fs_uri.c:564
 msgid "LOC URI malformed (could not decode public key)"
 msgstr ""
 
-#: src/fs/fs_uri.c:568
+#: src/fs/fs_uri.c:570
 msgid "LOC URI malformed (could not find signature)"
 msgstr ""
 
-#: src/fs/fs_uri.c:574
+#: src/fs/fs_uri.c:576
 msgid "LOC URI malformed (wrong syntax for signature)"
 msgstr ""
 
-#: src/fs/fs_uri.c:583
+#: src/fs/fs_uri.c:585
 msgid "LOC URI malformed (could not decode signature)"
 msgstr ""
 
-#: src/fs/fs_uri.c:589
+#: src/fs/fs_uri.c:591
 msgid "LOC URI malformed (wrong syntax for expiration time)"
 msgstr ""
 
-#: src/fs/fs_uri.c:595
+#: src/fs/fs_uri.c:597
 msgid "LOC URI malformed (could not parse expiration time)"
 msgstr ""
 
-#: src/fs/fs_uri.c:607
+#: src/fs/fs_uri.c:609
 msgid "LOC URI malformed (signature failed validation)"
 msgstr ""
 
-#: src/fs/fs_uri.c:641
+#: src/fs/fs_uri.c:643
 #, fuzzy
 msgid "invalid argument"
 msgstr "Ogiltigt argument: \"%s\"\n"
 
-#: src/fs/fs_uri.c:653
+#: src/fs/fs_uri.c:655
 msgid "Unrecognized URI type"
 msgstr ""
 
-#: src/fs/fs_uri.c:1057 src/fs/fs_uri.c:1084
+#: src/fs/fs_uri.c:1059 src/fs/fs_uri.c:1086
 msgid "No keywords specified!\n"
 msgstr "Inga nyckelord angivna!\n"
 
-#: src/fs/fs_uri.c:1090
+#: src/fs/fs_uri.c:1092
 msgid "Number of double-quotes not balanced!\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:230
+#: src/fs/gnunet-auto-share.c:232
 #, fuzzy, c-format
 msgid "Failed to load state: %s\n"
 msgstr "Misslyckades att starta samling.\n"
 
-#: src/fs/gnunet-auto-share.c:283 src/fs/gnunet-auto-share.c:293
-#: src/fs/gnunet-auto-share.c:303
+#: src/fs/gnunet-auto-share.c:285 src/fs/gnunet-auto-share.c:295
+#: src/fs/gnunet-auto-share.c:305
 #, fuzzy, c-format
 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:405
+#: src/fs/gnunet-auto-share.c:407
 #, c-format
 msgid "Publication of `%s' done\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:492
+#: src/fs/gnunet-auto-share.c:494
 #, fuzzy, c-format
 msgid "Publishing `%s'\n"
 msgstr ""
 "\n"
 "Fel vid uppladdning av fil: %s\n"
 
-#: src/fs/gnunet-auto-share.c:502
+#: src/fs/gnunet-auto-share.c:504
 #, fuzzy, c-format
 msgid "Failed to run `%s'\n"
 msgstr "Misslyckades att starta samling.\n"
 
-#: src/fs/gnunet-auto-share.c:711
+#: src/fs/gnunet-auto-share.c:713
 #, 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:765 src/fs/gnunet-publish.c:898
+#: src/fs/gnunet-auto-share.c:767 src/fs/gnunet-publish.c:903
 msgid "set the desired LEVEL of sender-anonymity"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:770 src/fs/gnunet-publish.c:902
+#: src/fs/gnunet-auto-share.c:772 src/fs/gnunet-publish.c:907
 msgid "disable adding the creation time to the metadata of the uploaded file"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:775 src/fs/gnunet-publish.c:907
+#: src/fs/gnunet-auto-share.c:777 src/fs/gnunet-publish.c:912
 msgid "do not use libextractor to add keywords or metadata"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:781 src/fs/gnunet-publish.c:942
+#: src/fs/gnunet-auto-share.c:783 src/fs/gnunet-publish.c:944
 msgid "specify the priority of the content"
 msgstr "ange prioritet för innehållet"
 
-#: src/fs/gnunet-auto-share.c:787 src/fs/gnunet-publish.c:954
+#: src/fs/gnunet-auto-share.c:789 src/fs/gnunet-publish.c:955
 msgid "set the desired replication LEVEL"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:811
+#: src/fs/gnunet-auto-share.c:813
 msgid "Automatically publish files from a directory on GNUnet"
 msgstr ""
 
-#: src/fs/gnunet-daemon-fsprofiler.c:646
+#: src/fs/gnunet-daemon-fsprofiler.c:648
 msgid "Daemon to use file-sharing to measure its performance."
 msgstr ""
 
-#: src/fs/gnunet-directory.c:51
+#: src/fs/gnunet-directory.c:53
 #, c-format
 msgid "\t<original file embedded in %u bytes of meta data>\n"
 msgstr ""
 
-#: src/fs/gnunet-directory.c:103
+#: src/fs/gnunet-directory.c:105
 #, fuzzy, c-format
 msgid "Directory `%s' meta data:\n"
 msgstr "==> Katalog \"%s\":\n"
 
-#: src/fs/gnunet-directory.c:106
+#: src/fs/gnunet-directory.c:108
 #, fuzzy, c-format
 msgid "Directory `%s' contents:\n"
 msgstr "==> Katalog \"%s\":\n"
 
-#: src/fs/gnunet-directory.c:141
+#: src/fs/gnunet-directory.c:143
 #, fuzzy
 msgid "You must specify a filename to inspect.\n"
 msgstr "Du måste ange en lista av filer att lägga in.\n"
 
-#: src/fs/gnunet-directory.c:154
+#: src/fs/gnunet-directory.c:156
 #, fuzzy, c-format
 msgid "Failed to read directory `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/fs/gnunet-directory.c:163
+#: src/fs/gnunet-directory.c:165
 #, fuzzy, c-format
 msgid "`%s' is not a GNUnet directory\n"
 msgstr "Filformatsfel (inte en GNUnet-katalog?)\n"
 
-#: src/fs/gnunet-directory.c:192
+#: src/fs/gnunet-directory.c:194
 #, fuzzy
 msgid "Display contents of a GNUnet directory"
 msgstr "Filformatsfel (inte en GNUnet-katalog?)\n"
 
-#: src/fs/gnunet-download.c:137
+#: src/fs/gnunet-download.c:139
 #, fuzzy, c-format
 msgid "Starting download `%s'.\n"
 msgstr "Startade samling \"%s\".\n"
 
-#: src/fs/gnunet-download.c:147
+#: src/fs/gnunet-download.c:149
 #, fuzzy
 msgid "<unknown time>"
 msgstr "Okänt fel"
 
-#: src/fs/gnunet-download.c:156
+#: src/fs/gnunet-download.c:158
 #, c-format
 msgid ""
 "Downloading `%s' at %llu/%llu (%s remaining, %s/s). Block took %s to "
 "download\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:182
+#: src/fs/gnunet-download.c:184
 #, fuzzy, c-format
 msgid "Error downloading: %s.\n"
 msgstr "Fel vid nedladdning: %s\n"
 
-#: src/fs/gnunet-download.c:199
+#: src/fs/gnunet-download.c:201
 #, fuzzy, c-format
 msgid "Downloading `%s' done (%s/s).\n"
 msgstr "Uppladdning vägrades!"
 
-#: src/fs/gnunet-download.c:214 src/fs/gnunet-publish.c:293
-#: src/fs/gnunet-search.c:210 src/fs/gnunet-unindex.c:105
+#: src/fs/gnunet-download.c:216 src/fs/gnunet-publish.c:295
+#: src/fs/gnunet-search.c:215 src/fs/gnunet-unindex.c:107
 #, c-format
 msgid "Unexpected status: %d\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:244
+#: src/fs/gnunet-download.c:246
 #, 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:251 src/fs/gnunet-publish.c:724
+#: src/fs/gnunet-download.c:253 src/fs/gnunet-publish.c:727
 #, fuzzy, c-format
 msgid "Failed to parse URI: %s\n"
 msgstr "Fil \"%s\" har URI: %s\n"
 
-#: src/fs/gnunet-download.c:262
+#: src/fs/gnunet-download.c:264
 msgid "Only CHK or LOC URIs supported.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:271
+#: src/fs/gnunet-download.c:273
 msgid "Target filename must be specified.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:289 src/fs/gnunet-publish.c:868
-#: src/fs/gnunet-search.c:268 src/fs/gnunet-unindex.c:137
+#: src/fs/gnunet-download.c:291 src/fs/gnunet-publish.c:872
+#: src/fs/gnunet-search.c:273 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:337 src/fs/gnunet-search.c:311
+#: src/fs/gnunet-download.c:339 src/fs/gnunet-search.c:315
 msgid "set the desired LEVEL of receiver-anonymity"
 msgstr ""
 
-#: src/fs/gnunet-download.c:342
+#: src/fs/gnunet-download.c:344
 msgid "delete incomplete downloads (when aborted with CTRL-C)"
 msgstr ""
 
-#: src/fs/gnunet-download.c:347 src/fs/gnunet-search.c:317
+#: src/fs/gnunet-download.c:349 src/fs/gnunet-search.c:319
 msgid "only search the local peer (no P2P network search)"
 msgstr ""
 
-#: src/fs/gnunet-download.c:352
+#: src/fs/gnunet-download.c:354
 msgid "write the file to FILENAME"
 msgstr "skriv filen till FILNAMN"
 
-#: src/fs/gnunet-download.c:357
+#: src/fs/gnunet-download.c:359
 msgid "set the maximum number of parallel downloads that is allowed"
 msgstr ""
 
-#: src/fs/gnunet-download.c:362
+#: src/fs/gnunet-download.c:364
 msgid "set the maximum number of parallel requests for blocks that is allowed"
 msgstr ""
 
-#: src/fs/gnunet-download.c:366
+#: src/fs/gnunet-download.c:368
 msgid "download a GNUnet directory recursively"
 msgstr "hämta en GNUnet-katalog rekursivt"
 
-#: src/fs/gnunet-download.c:384
+#: src/fs/gnunet-download.c:386
 msgid ""
 "Download files from GNUnet using a GNUnet CHK or LOC URI (gnunet://fs/"
 "chk/...)"
 msgstr ""
 
-#: src/fs/gnunet-fs.c:117
+#: src/fs/gnunet-fs.c:119
 msgid "print a list of all indexed files"
 msgstr ""
 
-#: src/fs/gnunet-fs.c:128
+#: src/fs/gnunet-fs.c:130
 #, fuzzy
 msgid "Special file-sharing operations"
 msgstr "Visa alla alternativ"
 
-#: src/fs/gnunet-fs-profiler.c:209
+#: src/fs/gnunet-fs-profiler.c:211
 msgid "run the experiment with COUNT peers"
 msgstr ""
 
-#: src/fs/gnunet-fs-profiler.c:215
+#: src/fs/gnunet-fs-profiler.c:217
 msgid "specifies name of a file with the HOSTS the testbed should use"
 msgstr ""
 
-#: src/fs/gnunet-fs-profiler.c:221
+#: src/fs/gnunet-fs-profiler.c:223
 msgid "automatically terminate experiment after DELAY"
 msgstr ""
 
-#: src/fs/gnunet-fs-profiler.c:231
+#: src/fs/gnunet-fs-profiler.c:233
 msgid "run a testbed to measure file-sharing performance"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:217 src/fs/gnunet-publish.c:229
+#: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:231
 #, c-format
 msgid "Publishing `%s' at %llu/%llu (%s remaining)\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:237
+#: src/fs/gnunet-publish.c:239
 #, fuzzy, c-format
 msgid "Error publishing: %s.\n"
 msgstr "Fel vid nedladdning: %s\n"
 
-#: src/fs/gnunet-publish.c:244
+#: src/fs/gnunet-publish.c:246
 #, c-format
 msgid "Publishing `%s' done.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:249
+#: src/fs/gnunet-publish.c:251
 #, fuzzy, c-format
 msgid "URI is `%s'.\n"
 msgstr "Jag är ändpunkt \"%s\".\n"
 
-#: src/fs/gnunet-publish.c:257
+#: src/fs/gnunet-publish.c:259
 #, fuzzy, c-format
 msgid "Namespace URI is `%s'.\n"
 msgstr "Jag är ändpunkt \"%s\".\n"
 
-#: src/fs/gnunet-publish.c:273
+#: src/fs/gnunet-publish.c:275
 #, fuzzy
 msgid "Starting cleanup after abort\n"
 msgstr "\"%s\" uppstart klar.\n"
 
-#: src/fs/gnunet-publish.c:280
+#: src/fs/gnunet-publish.c:282
 #, fuzzy
 msgid "Cleanup after abort completed.\n"
 msgstr "\"%s\" uppstart klar.\n"
 
-#: src/fs/gnunet-publish.c:286
+#: src/fs/gnunet-publish.c:288
 #, fuzzy
 msgid "Cleanup after abort failed.\n"
 msgstr "\"%s\" uppstart klar.\n"
 
-#: src/fs/gnunet-publish.c:428
+#: src/fs/gnunet-publish.c:430
 #, fuzzy, c-format
 msgid "Meta data for file `%s' (%s)\n"
 msgstr "Uppdaterar data för modul \"%s\"\n"
 
-#: src/fs/gnunet-publish.c:433
+#: src/fs/gnunet-publish.c:435
 #, fuzzy, c-format
 msgid "Keywords for file `%s' (%s)\n"
 msgstr "Nyckelord för fil \"%s\":\n"
 
-#: src/fs/gnunet-publish.c:587
+#: src/fs/gnunet-publish.c:590
 #, fuzzy
 msgid "Could not publish\n"
 msgstr "Kunde inte köra \"%s\": %s\n"
 
-#: src/fs/gnunet-publish.c:612
+#: src/fs/gnunet-publish.c:615
 #, fuzzy
 msgid "Could not start publishing.\n"
 msgstr "Kunde inte slå upp \"%s\": %s\n"
 
-#: src/fs/gnunet-publish.c:646
+#: src/fs/gnunet-publish.c:649
 #, fuzzy, c-format
 msgid "Scanning directory `%s'.\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/fs/gnunet-publish.c:650
+#: src/fs/gnunet-publish.c:653
 #, fuzzy, c-format
 msgid "Scanning file `%s'.\n"
 msgstr "Startade samling \"%s\".\n"
 
-#: src/fs/gnunet-publish.c:656
+#: src/fs/gnunet-publish.c:659
 #, c-format
 msgid "There was trouble processing file `%s', skipping it.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:663
+#: src/fs/gnunet-publish.c:666
 #, fuzzy
 msgid "Preprocessing complete.\n"
 msgstr "Nedstängning klar.\n"
 
-#: src/fs/gnunet-publish.c:668
+#: src/fs/gnunet-publish.c:671
 #, 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:675
+#: src/fs/gnunet-publish.c:678
 msgid "Meta data extraction has finished.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:684
+#: src/fs/gnunet-publish.c:687
 #, fuzzy
 msgid "Internal error scanning directory.\n"
 msgstr "=\tFel vid läsning av katalog.\n"
 
-#: src/fs/gnunet-publish.c:712
+#: src/fs/gnunet-publish.c:715
 #, fuzzy, c-format
 msgid "Selected pseudonym `%s' unknown\n"
 msgstr "Namnrymd \"%s\" skapad(rot: %s).\n"
 
-#: src/fs/gnunet-publish.c:745
+#: 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:759
+#: 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:815
+#: src/fs/gnunet-publish.c:819
 #, c-format
 msgid "Cannot extract metadata from a URI!\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:822
+#: 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:828
+#: 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:836 src/vpn/gnunet-vpn.c:208
+#: src/fs/gnunet-publish.c:840 src/vpn/gnunet-vpn.c:210
 #, 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:847 src/fs/gnunet-publish.c:855
-#: src/transport/gnunet-transport.c:1280 src/transport/gnunet-transport.c:1307
+#: src/fs/gnunet-publish.c:851 src/fs/gnunet-publish.c:859
+#: src/transport/gnunet-transport.c:1282 src/transport/gnunet-transport.c:1309
 #, c-format
 msgid "Option `%s' makes no sense without option `%s'.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:911
+#: src/fs/gnunet-publish.c:916
 msgid ""
 "print list of extracted keywords that would be used, but do not perform "
 "upload"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:917
+#: src/fs/gnunet-publish.c:922
 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:923
+#: src/fs/gnunet-publish.c:928
 msgid "set the meta-data for the given TYPE to the given VALUE"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:928
+#: src/fs/gnunet-publish.c:932
 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:938
 msgid ""
 "specify ID of an updated version to be published in the future (for "
 "namespace insertions only)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:948
+#: src/fs/gnunet-publish.c:949
 msgid "publish the files under the pseudonym NAME (place file into namespace)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:958
+#: src/fs/gnunet-publish.c:959
 msgid ""
 "only simulate the process but do not do any actual publishing (useful to "
 "compute URIs)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:964
+#: src/fs/gnunet-publish.c:965
 msgid ""
 "set the ID of this version of the publication (for namespace insertions only)"
 msgstr ""
@@ -3626,31 +3616,31 @@ msgid ""
 "to the file with the respective URI)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:987
+#: src/fs/gnunet-publish.c:989
 msgid "Publish a file or directory on GNUnet"
 msgstr ""
 
-#: src/fs/gnunet-search.c:125
+#: src/fs/gnunet-search.c:127
 #, c-format
 msgid "Failed to write directory with search results to `%s'\n"
 msgstr ""
 
-#: src/fs/gnunet-search.c:202
+#: src/fs/gnunet-search.c:207
 #, fuzzy, c-format
 msgid "Error searching: %s.\n"
 msgstr "Fel vid lämning av DHT.\n"
 
-#: src/fs/gnunet-search.c:258
+#: src/fs/gnunet-search.c:263
 #, fuzzy
 msgid "Could not create keyword URI from arguments.\n"
 msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
 
-#: src/fs/gnunet-search.c:282
+#: src/fs/gnunet-search.c:287
 #, fuzzy
 msgid "Could not start searching.\n"
 msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
 
-#: src/fs/gnunet-search.c:323
+#: src/fs/gnunet-search.c:324
 msgid "write search results to file starting with PREFIX"
 msgstr ""
 
@@ -3658,7 +3648,7 @@ msgstr ""
 msgid "automatically terminate search after DELAY"
 msgstr ""
 
-#: src/fs/gnunet-search.c:338
+#: src/fs/gnunet-search.c:335
 msgid "automatically terminate search after VALUE results are found"
 msgstr ""
 
@@ -3666,3084 +3656,2887 @@ msgstr ""
 msgid "Search GNUnet for files that were published on GNUnet"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:375 src/fs/gnunet-service-fs.c:880
+#: src/fs/gnunet-service-fs.c:377 src/fs/gnunet-service-fs.c:882
 #, fuzzy
 msgid "# client searches active"
 msgstr "# klartext PONG-meddelanden mottagna"
 
-#: src/fs/gnunet-service-fs.c:434
+#: src/fs/gnunet-service-fs.c:436
 #, fuzzy
 msgid "# replies received for local clients"
 msgstr "Meddelande mottaget från klient är ogiltig.\n"
 
-#: src/fs/gnunet-service-fs.c:603
+#: src/fs/gnunet-service-fs.c:605
 msgid "# running average P2P latency (ms)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:655 src/fs/gnunet-service-fs_cp.c:562
+#: src/fs/gnunet-service-fs.c:657 src/fs/gnunet-service-fs_cp.c:564
 msgid "# Loopback routes suppressed"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:834
+#: src/fs/gnunet-service-fs.c:836
 #, fuzzy
 msgid "# client searches received"
 msgstr "# klartext PONG-meddelanden mottagna"
 
-#: src/fs/gnunet-service-fs.c:873
+#: src/fs/gnunet-service-fs.c:875
 msgid "# client searches updated (merged content seen list)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:1044
+#: src/fs/gnunet-service-fs.c:1040
 #, c-format
 msgid "Hash mismatch trying to index file `%s' which does not have hash `%s'\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:1284
+#: src/fs/gnunet-service-fs.c:1280
 #, fuzzy
 msgid "FS service is lacking HOSTKEY configuration setting.  Exiting.\n"
 msgstr "GNUnet-konfiguration"
 
-#: src/fs/gnunet-service-fs.c:1309 src/hostlist/gnunet-daemon-hostlist.c:353
-#: src/topology/gnunet-daemon-topology.c:1200
+#: src/fs/gnunet-service-fs.c:1305 src/hostlist/gnunet-daemon-hostlist.c:355
+#: src/topology/gnunet-daemon-topology.c:1202
 #, fuzzy, c-format
 msgid "Failed to connect to `%s' service.\n"
 msgstr "Misslyckades att initiera tjänsten \"%s\".\n"
 
-#: src/fs/gnunet-service-fs_cadet_client.c:368
+#: src/fs/gnunet-service-fs_cadet_client.c:370
 #, fuzzy
 msgid "# replies received via cadet"
 msgstr "# byte mottagna av typen %d"
 
-#: src/fs/gnunet-service-fs_cadet_client.c:382
+#: src/fs/gnunet-service-fs_cadet_client.c:384
 #, fuzzy
 msgid "# replies received via cadet dropped"
 msgstr "# byte mottagna av typen %d"
 
-#: src/fs/gnunet-service-fs_cadet_server.c:263
+#: src/fs/gnunet-service-fs_cadet_server.c:265
 #, fuzzy
 msgid "# queries received via CADET not answered"
 msgstr "# byte mottogs via TCP"
 
-#: src/fs/gnunet-service-fs_cadet_server.c:318
+#: src/fs/gnunet-service-fs_cadet_server.c:320
 #, fuzzy
 msgid "# Blocks transferred via cadet"
 msgstr "# byte skickade av typen %d"
 
-#: src/fs/gnunet-service-fs_cadet_server.c:344
+#: src/fs/gnunet-service-fs_cadet_server.c:346
 #, fuzzy
 msgid "# queries received via cadet"
 msgstr "# byte mottogs via TCP"
 
-#: src/fs/gnunet-service-fs_cadet_server.c:386
+#: src/fs/gnunet-service-fs_cadet_server.c:388
 #, fuzzy
 msgid "# cadet client connections rejected"
 msgstr "Nätverksanslutning"
 
-#: src/fs/gnunet-service-fs_cadet_server.c:393
-#: src/fs/gnunet-service-fs_cadet_server.c:433
+#: src/fs/gnunet-service-fs_cadet_server.c:395
+#: src/fs/gnunet-service-fs_cadet_server.c:435
 #, fuzzy
 msgid "# cadet connections active"
 msgstr "Nätverksanslutning"
 
-#: src/fs/gnunet-service-fs_cp.c:684
+#: src/fs/gnunet-service-fs_cp.c:685
 #, fuzzy
 msgid "# migration stop messages received"
 msgstr "# krypterade PONG-meddelanden mottagna"
 
-#: src/fs/gnunet-service-fs_cp.c:688
+#: src/fs/gnunet-service-fs_cp.c:689
 #, c-format
 msgid "Migration of content to peer `%s' blocked for %s\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:721 src/fs/gnunet-service-fs_cp.c:1343
+#: src/fs/gnunet-service-fs_cp.c:722 src/fs/gnunet-service-fs_cp.c:1344
 msgid "# P2P searches active"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:816
+#: src/fs/gnunet-service-fs_cp.c:817
 msgid "# artificial delays introduced (ms)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:873
+#: src/fs/gnunet-service-fs_cp.c:874
 #, fuzzy
 msgid "# replies dropped due to type mismatch"
 msgstr "# byte mottagna av typen %d"
 
-#: src/fs/gnunet-service-fs_cp.c:881
+#: src/fs/gnunet-service-fs_cp.c:882
 #, fuzzy
 msgid "# replies received for other peers"
 msgstr "# byte mottagna av typen %d"
 
-#: src/fs/gnunet-service-fs_cp.c:895
+#: src/fs/gnunet-service-fs_cp.c:896
 msgid "# replies dropped due to insufficient cover traffic"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:942
+#: src/fs/gnunet-service-fs_cp.c:943
 msgid "# P2P searches destroyed due to ultimate reply"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1013
+#: src/fs/gnunet-service-fs_cp.c:1014
 msgid "# requests done for free (low load)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1038
+#: src/fs/gnunet-service-fs_cp.c:1039
 msgid "# request dropped, priority insufficient"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1048
+#: src/fs/gnunet-service-fs_cp.c:1049
 msgid "# requests done for a price (normal load)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1146
+#: src/fs/gnunet-service-fs_cp.c:1147
 msgid "# requests dropped due to higher-TTL request"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1203
+#: src/fs/gnunet-service-fs_cp.c:1204
 msgid "# GET requests received (from other peers)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1226
+#: src/fs/gnunet-service-fs_cp.c:1227
 msgid "# requests dropped due to missing reverse route"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1239
+#: src/fs/gnunet-service-fs_cp.c:1240
 #, fuzzy
 msgid "# requests dropped due to full reply queue"
 msgstr "Nätverksannonsering avstängd i konfigurationen!\n"
 
-#: src/fs/gnunet-service-fs_cp.c:1295
+#: src/fs/gnunet-service-fs_cp.c:1296
 msgid "# requests dropped due TTL underflow"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1339
+#: src/fs/gnunet-service-fs_cp.c:1340
 #, fuzzy
 msgid "# P2P query messages received and processed"
 msgstr "# krypterade PONG-meddelanden mottagna"
 
-#: src/fs/gnunet-service-fs_cp.c:1706
+#: src/fs/gnunet-service-fs_cp.c:1707
 #, fuzzy
 msgid "# migration stop messages sent"
 msgstr "# krypterade PONG-meddelanden mottagna"
 
-#: src/fs/gnunet-service-fs_indexing.c:132
-#: src/fs/gnunet-service-fs_indexing.c:193
+#: src/fs/gnunet-service-fs_indexing.c:134
+#: src/fs/gnunet-service-fs_indexing.c:195
 #, fuzzy, c-format
 msgid "Could not open `%s'.\n"
 msgstr "Kunde inte slå upp \"%s\": %s\n"
 
-#: src/fs/gnunet-service-fs_indexing.c:149
+#: src/fs/gnunet-service-fs_indexing.c:151
 #, fuzzy, c-format
 msgid "Error writing `%s'.\n"
 msgstr "Fel vid skapandet av användare"
 
-#: src/fs/gnunet-service-fs_indexing.c:251
+#: src/fs/gnunet-service-fs_indexing.c:253
 #, fuzzy, c-format
 msgid "Failed to delete bogus block: %s\n"
 msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
 
-#: src/fs/gnunet-service-fs_indexing.c:329
+#: src/fs/gnunet-service-fs_indexing.c:331
 msgid "# index blocks removed: original file inaccessible"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_indexing.c:355
+#: src/fs/gnunet-service-fs_indexing.c:357
 #, fuzzy, c-format
 msgid "Could not access indexed file `%s' (%s) at offset %llu: %s\n"
 msgstr "Kunde inte slå upp \"%s\": %s\n"
 
-#: src/fs/gnunet-service-fs_indexing.c:359
+#: src/fs/gnunet-service-fs_indexing.c:361
 #, fuzzy
 msgid "not indexed"
 msgstr "Avindexering misslyckades."
 
-#: src/fs/gnunet-service-fs_indexing.c:392
+#: src/fs/gnunet-service-fs_indexing.c:394
 #, fuzzy, c-format
 msgid "Indexed file `%s' changed at offset %llu\n"
 msgstr "Indexering av data misslyckades vid position %i.\n"
 
-#: src/fs/gnunet-service-fs_indexing.c:516
+#: src/fs/gnunet-service-fs_indexing.c:518
 #, c-format
 msgid ""
 "Index request received for file `%s' is already indexed as `%s'.  Permitting "
 "anyway.\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:263
+#: src/fs/gnunet-service-fs_pe.c:265
 msgid "# average retransmission delay (ms)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:425
+#: src/fs/gnunet-service-fs_pe.c:427
 msgid "# delay heap timeout (ms)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:436
+#: src/fs/gnunet-service-fs_pe.c:438
 msgid "# query plans executed"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:464
+#: src/fs/gnunet-service-fs_pe.c:466
 #, fuzzy
 msgid "# query messages sent to other peers"
 msgstr "# byte skickade av typen %d"
 
-#: src/fs/gnunet-service-fs_pe.c:534
+#: src/fs/gnunet-service-fs_pe.c:536
 #, fuzzy
 msgid "# requests merged"
 msgstr "# byte mottogs via TCP"
 
-#: src/fs/gnunet-service-fs_pe.c:544
+#: src/fs/gnunet-service-fs_pe.c:546
 #, fuzzy
 msgid "# requests refreshed"
 msgstr "# byte mottogs via TCP"
 
-#: src/fs/gnunet-service-fs_pe.c:604 src/fs/gnunet-service-fs_pe.c:707
-#: src/fs/gnunet-service-fs_pe.c:786
+#: src/fs/gnunet-service-fs_pe.c:606 src/fs/gnunet-service-fs_pe.c:709
+#: src/fs/gnunet-service-fs_pe.c:788
 msgid "# query plan entries"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:328
+#: src/fs/gnunet-service-fs_pr.c:330
 #, fuzzy
 msgid "# Pending requests created"
 msgstr "# byte mottogs via TCP"
 
-#: src/fs/gnunet-service-fs_pr.c:428 src/fs/gnunet-service-fs_pr.c:675
+#: src/fs/gnunet-service-fs_pr.c:430 src/fs/gnunet-service-fs_pr.c:677
 msgid "# Pending requests active"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:856
+#: src/fs/gnunet-service-fs_pr.c:858
 #, fuzzy
 msgid "# replies received and matched"
 msgstr "# byte mottagna av typen %d"
 
-#: src/fs/gnunet-service-fs_pr.c:892
+#: src/fs/gnunet-service-fs_pr.c:894
 msgid "# duplicate replies discarded (bloomfilter)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:901
+#: src/fs/gnunet-service-fs_pr.c:903
 msgid "# irrelevant replies discarded"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:916
+#: src/fs/gnunet-service-fs_pr.c:918
 #, c-format
 msgid "Unsupported block type %u\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:933
+#: src/fs/gnunet-service-fs_pr.c:935
 msgid "# results found locally"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1063
+#: src/fs/gnunet-service-fs_pr.c:1065
 msgid "# Datastore `PUT' failures"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1091
+#: src/fs/gnunet-service-fs_pr.c:1093
 #, fuzzy
 msgid "# storage requests dropped due to high load"
 msgstr "Nätverksannonsering avstängd i konfigurationen!\n"
 
-#: src/fs/gnunet-service-fs_pr.c:1129
+#: src/fs/gnunet-service-fs_pr.c:1131
 #, fuzzy
 msgid "# Replies received from DHT"
 msgstr "# byte mottagna via HTTP"
 
-#: src/fs/gnunet-service-fs_pr.c:1260
+#: src/fs/gnunet-service-fs_pr.c:1262
 #, fuzzy
 msgid "# Replies received from CADET"
 msgstr "# byte mottagna via HTTP"
 
-#: src/fs/gnunet-service-fs_pr.c:1312
+#: src/fs/gnunet-service-fs_pr.c:1314
 #, c-format
 msgid "Datastore lookup already took %s!\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1333
+#: src/fs/gnunet-service-fs_pr.c:1335
 #, c-format
 msgid "On-demand lookup already took %s!\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1393
+#: src/fs/gnunet-service-fs_pr.c:1395
 msgid "# requested DBLOCK or IBLOCK not found"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1452
+#: src/fs/gnunet-service-fs_pr.c:1454
 msgid "# Datastore lookups concluded (error queueing)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1507
+#: src/fs/gnunet-service-fs_pr.c:1509
 msgid "# Datastore lookups concluded (no results)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1522
+#: src/fs/gnunet-service-fs_pr.c:1524
 msgid "# Datastore lookups concluded (seen all)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1546
+#: src/fs/gnunet-service-fs_pr.c:1548
 msgid "# Datastore lookups aborted (more than MAX_RESULTS)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1560
+#: src/fs/gnunet-service-fs_pr.c:1562
 msgid "# on-demand blocks matched requests"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1581
+#: src/fs/gnunet-service-fs_pr.c:1583
 msgid "# on-demand lookups performed successfully"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1586
+#: src/fs/gnunet-service-fs_pr.c:1588
 msgid "# on-demand lookups failed"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1624
+#: src/fs/gnunet-service-fs_pr.c:1626
 msgid "# Datastore lookups concluded (found last result)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1637
+#: src/fs/gnunet-service-fs_pr.c:1639
 msgid "# Datastore lookups concluded (load too high)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1691
+#: src/fs/gnunet-service-fs_pr.c:1693
 msgid "# Datastore lookups initiated"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1747
+#: src/fs/gnunet-service-fs_pr.c:1749
 #, fuzzy
 msgid "# GAP PUT messages received"
 msgstr "# krypterade PONG-meddelanden mottagna"
 
-#: src/fs/gnunet-service-fs_push.c:644
+#: src/fs/gnunet-service-fs_push.c:646
 msgid "time required, content pushing disabled"
 msgstr ""
 
-#: src/fs/gnunet-unindex.c:87
+#: src/fs/gnunet-unindex.c:89
 #, c-format
 msgid "Unindexing at %llu/%llu (%s remaining)\n"
 msgstr ""
 
-#: src/fs/gnunet-unindex.c:93
+#: src/fs/gnunet-unindex.c:95
 #, fuzzy, c-format
 msgid "Error unindexing: %s.\n"
 msgstr ""
 "\n"
 "Fel vid avindexering av fil: %s\n"
 
-#: src/fs/gnunet-unindex.c:98
+#: src/fs/gnunet-unindex.c:100
 #, fuzzy
 msgid "Unindexing done.\n"
 msgstr "Avindexera filer."
 
-#: src/fs/gnunet-unindex.c:127
+#: 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:144
+#: 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:176
+#: src/fs/gnunet-unindex.c:178
 msgid "Unindex a file that was previously indexed with gnunet-publish."
 msgstr ""
 
-#: src/gns/gns_tld_api.c:274
+#: src/gns/gns_tld_api.c:348
 msgid "Expected a base32-encoded public zone key\n"
 msgstr ""
 
-#: src/gns/gnunet-bcd.c:125
+#: src/gns/gnunet-bcd.c:127
 #, c-format
 msgid "Refusing `%s' request to HTTP server\n"
 msgstr ""
 
-#: src/gns/gnunet-bcd.c:355
+#: src/gns/gnunet-bcd.c:357
 #, fuzzy, c-format
 msgid "Invalid port number %u.  Exiting.\n"
 msgstr "Ogiltiga argument. Avslutar.\n"
 
-#: src/gns/gnunet-bcd.c:360
+#: src/gns/gnunet-bcd.c:362
 #, fuzzy, c-format
 msgid "Businesscard HTTP server starts on %u\n"
 msgstr "Misslyckades att starta samling.\n"
 
-#: src/gns/gnunet-bcd.c:374
+#: src/gns/gnunet-bcd.c:376
 #, fuzzy, c-format
 msgid "Could not start businesscard HTTP server on port %u\n"
 msgstr "Misslyckades att starta samling.\n"
 
-#: src/gns/gnunet-bcd.c:521
+#: src/gns/gnunet-bcd.c:523
 msgid "Run HTTP serve on port PORT (default is 8888)"
 msgstr ""
 
-#: src/gns/gnunet-bcd.c:534
+#: src/gns/gnunet-bcd.c:536
 msgid "GNUnet HTTP server to create business cards"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:201
+#: src/gns/gnunet-dns2gns.c:203
 #, fuzzy
 msgid "Failed to pack DNS response into UDP packet!\n"
 msgstr "Misslyckades att skicka HTTP-begäran till värd \"%s\": %s\n"
 
-#: src/gns/gnunet-dns2gns.c:403
+#: src/gns/gnunet-dns2gns.c:405
 #, fuzzy, c-format
 msgid "Cannot parse DNS request from %s\n"
 msgstr "Misslyckades att skicka HTTP-begäran till värd \"%s\": %s\n"
 
-#: src/gns/gnunet-dns2gns.c:419
+#: src/gns/gnunet-dns2gns.c:421
 #, fuzzy, c-format
 msgid "Received malformed DNS request from %s\n"
 msgstr "Mottog ogiltig \"%s\" begäran (storlek %d)\n"
 
-#: src/gns/gnunet-dns2gns.c:427
+#: src/gns/gnunet-dns2gns.c:429
 #, fuzzy, c-format
 msgid "Received unsupported DNS request from %s\n"
 msgstr "Mottog okänd typ av begäran %d vid %s:%d\n"
 
-#: src/gns/gnunet-dns2gns.c:586
+#: src/gns/gnunet-dns2gns.c:588
 #, fuzzy
 msgid "No DNS server specified!\n"
 msgstr "Inga nyckelord angivna!\n"
 
-#: src/gns/gnunet-dns2gns.c:686
+#: src/gns/gnunet-dns2gns.c:688
 msgid "IP of recursive DNS resolver to use (required)"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:691
+#: src/gns/gnunet-dns2gns.c:693
 msgid "UDP port to listen on for inbound DNS requests; default: 2853"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:708
+#: src/gns/gnunet-dns2gns.c:710
 msgid "GNUnet DNS-to-GNS proxy (a DNS server)"
 msgstr ""
 
-#: src/gns/gnunet-gns-benchmark.c:580
+#: src/gns/gnunet-gns-benchmark.c:582
 msgid "how long to wait between queries"
 msgstr ""
 
-#: src/gns/gnunet-gns-benchmark.c:585
+#: src/gns/gnunet-gns-benchmark.c:587
 msgid "how long to wait for an answer"
 msgstr ""
 
-#: src/gns/gnunet-gns-benchmark.c:589
+#: src/gns/gnunet-gns-benchmark.c:591
 msgid "look for GNS2DNS records instead of ANY"
 msgstr ""
 
-#: src/gns/gnunet-gns.c:197
+#: src/gns/gnunet-gns.c:199
 #, c-format
 msgid "Invalid typename specified, assuming `ANY'\n"
 msgstr ""
 
-#: src/gns/gnunet-gns.c:231
+#: src/gns/gnunet-gns.c:233
 msgid "Lookup a record for the given name"
 msgstr ""
 
-#: src/gns/gnunet-gns.c:236
+#: src/gns/gnunet-gns.c:238
 #, fuzzy
 msgid "Specify the type of the record to lookup"
 msgstr "ange prioritet för innehållet"
 
-#: src/gns/gnunet-gns.c:240
+#: src/gns/gnunet-gns.c:242
 msgid "No unneeded output"
 msgstr ""
 
-#: src/gns/gnunet-gns.c:256
+#: src/gns/gnunet-gns.c:258
 #, fuzzy
 msgid "GNUnet GNS resolver tool"
 msgstr "Spåra GNUnets nätverkstopologi."
 
-#: src/gns/gnunet-gns-helper-service-w32.c:600
+#: src/gns/gnunet-gns-helper-service-w32.c:602
 msgid "Not ready to process requests, lacking ego data\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-helper-service-w32.c:699
+#: src/gns/gnunet-gns-helper-service-w32.c:701
 msgid ""
 "Ego for `gns-master' not found, cannot perform lookup.  Did you run gnunet-"
 "gns-import.sh?\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-helper-service-w32.c:737
+#: src/gns/gnunet-gns-helper-service-w32.c:739
 #, fuzzy, c-format
 msgid "Failed to connect to identity service\n"
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/gns/gnunet-gns-import.c:450
+#: src/gns/gnunet-gns-import.c:452
 msgid "This program will import some GNS authorities into your GNS namestore."
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:110
-#: src/hostlist/gnunet-daemon-hostlist_client.c:533
-#: src/hostlist/gnunet-daemon-hostlist_client.c:751
-#: src/hostlist/gnunet-daemon-hostlist_client.c:757
-#: src/hostlist/gnunet-daemon-hostlist_client.c:809
-#: src/hostlist/gnunet-daemon-hostlist_client.c:818
-#: src/hostlist/gnunet-daemon-hostlist_client.c:929
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1024
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1029
-#: src/transport/plugin_transport_http_client.c:596
-#: src/transport/plugin_transport_http_client.c:614
+#: src/gns/gnunet-gns-proxy.c:118
+#: src/hostlist/gnunet-daemon-hostlist_client.c:535
+#: src/hostlist/gnunet-daemon-hostlist_client.c:753
+#: src/hostlist/gnunet-daemon-hostlist_client.c:759
+#: src/hostlist/gnunet-daemon-hostlist_client.c:811
+#: src/hostlist/gnunet-daemon-hostlist_client.c:820
+#: src/hostlist/gnunet-daemon-hostlist_client.c:931
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1026
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1031
+#: src/transport/plugin_transport_http_client.c:598
+#: src/transport/plugin_transport_http_client.c:616
 #, fuzzy, c-format
 msgid "%s failed at %s:%d: `%s'\n"
 msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n"
 
-#: src/gns/gnunet-gns-proxy.c:960
+#: src/gns/gnunet-gns-proxy.c:980
 #, fuzzy, c-format
 msgid "Unsupported CURL TLS backend %d\n"
 msgstr "Kommando \"%s\" stöds ej.  Avbryter.\n"
 
-#: src/gns/gnunet-gns-proxy.c:985
+#: src/gns/gnunet-gns-proxy.c:1005
 #, fuzzy, c-format
 msgid "Failed to fetch CN from cert: %s\n"
 msgstr "Misslyckades att skicka HTTP-begäran till värd \"%s\": %s\n"
 
-#: src/gns/gnunet-gns-proxy.c:1008
+#: src/gns/gnunet-gns-proxy.c:1026
 #, fuzzy, c-format
 msgid "Failed to initialize DANE: %s\n"
 msgstr "Kunde inte initiera SQLite.\n"
 
-#: src/gns/gnunet-gns-proxy.c:1021
+#: src/gns/gnunet-gns-proxy.c:1041
 #, fuzzy, c-format
 msgid "Failed to parse DANE record: %s\n"
 msgstr "Misslyckades att skicka HTTP-begäran till värd \"%s\": %s\n"
 
-#: src/gns/gnunet-gns-proxy.c:1036
+#: src/gns/gnunet-gns-proxy.c:1056
 #, fuzzy, c-format
 msgid "Failed to verify TLS connection using DANE: %s\n"
 msgstr "Kunde inte spara konfigurationsfil \"%s\":"
 
-#: src/gns/gnunet-gns-proxy.c:1046
+#: src/gns/gnunet-gns-proxy.c:1066
 #, c-format
 msgid "Failed DANE verification failed with GnuTLS verify status code: %u\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:1070
+#: src/gns/gnunet-gns-proxy.c:1090
 #, c-format
 msgid "TLS certificate subject name (%s) does not match `%s': %d\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:1200
+#: src/gns/gnunet-gns-proxy.c:1221
 #, c-format
 msgid "Cookie domain `%s' supplied by server is invalid\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:2062
+#: src/gns/gnunet-gns-proxy.c:2121
 #, fuzzy, c-format
 msgid "Unsupported HTTP method `%s'\n"
 msgstr "Kommando \"%s\" stöds ej.  Avbryter.\n"
 
-#: src/gns/gnunet-gns-proxy.c:2583
+#: src/gns/gnunet-gns-proxy.c:2642
 #, fuzzy, c-format
 msgid "Unable to import private key from file `%s'\n"
 msgstr "Kunde inte skapa användarkonto:"
 
-#: src/gns/gnunet-gns-proxy.c:2615
+#: src/gns/gnunet-gns-proxy.c:2674
 #, fuzzy, c-format
 msgid "Unable to import certificate from `%s'\n"
 msgstr "Kunde inte spara konfigurationsfil \"%s\":"
 
-#: src/gns/gnunet-gns-proxy.c:2814
+#: src/gns/gnunet-gns-proxy.c:2875
 #, fuzzy, c-format
 msgid "Failed to start HTTPS server for `%s'\n"
 msgstr "Misslyckades att starta samling.\n"
 
-#: src/gns/gnunet-gns-proxy.c:2839 src/rest/gnunet-rest-server.c:656
+#: src/gns/gnunet-gns-proxy.c:2897 src/rest/gnunet-rest-server.c:658
 #, fuzzy
 msgid "Failed to pass client to MHD\n"
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/gns/gnunet-gns-proxy.c:3169
+#: src/gns/gnunet-gns-proxy.c:3233
 #, fuzzy, c-format
 msgid "Unsupported socks version %d\n"
 msgstr "Kommando \"%s\" stöds ej.  Avbryter.\n"
 
-#: src/gns/gnunet-gns-proxy.c:3198
+#: src/gns/gnunet-gns-proxy.c:3262
 #, fuzzy, c-format
 msgid "Unsupported socks command %d\n"
 msgstr "Kommando \"%s\" stöds ej.  Avbryter.\n"
 
-#: src/gns/gnunet-gns-proxy.c:3280
+#: src/gns/gnunet-gns-proxy.c:3345
 #, fuzzy, c-format
 msgid "Unsupported socks address type %d\n"
 msgstr "Kommando \"%s\" stöds ej.  Avbryter.\n"
 
-#: src/gns/gnunet-gns-proxy.c:3570
+#: src/gns/gnunet-gns-proxy.c:3635
 #, fuzzy, c-format
 msgid "Failed to load X.509 key and certificate from `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/gns/gnunet-gns-proxy.c:3698
+#: src/gns/gnunet-gns-proxy.c:3763
 msgid "listen on specified port (default: 7777)"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3703
+#: src/gns/gnunet-gns-proxy.c:3768
 msgid "pem file to use as CA"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3707
+#: src/gns/gnunet-gns-proxy.c:3772
 msgid "disable use of IPv6"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3733
+#: src/gns/gnunet-gns-proxy.c:3798
 msgid "GNUnet GNS proxy"
 msgstr ""
 
-#: src/gns/gnunet-service-gns.c:511
+#: src/gns/gnunet-service-gns.c:506
 #, fuzzy
 msgid "Properly base32-encoded public key required"
 msgstr "Ogiltigt argument: \"%s\"\n"
 
-#: src/gns/gnunet-service-gns.c:547
+#: src/gns/gnunet-service-gns.c:542
 #, fuzzy
 msgid "Failed to connect to the namecache!\n"
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/gns/gnunet-service-gns.c:566
-#: src/zonemaster/gnunet-service-zonemaster.c:873
-#: src/zonemaster/gnunet-service-zonemaster-monitor.c:438
+#: src/gns/gnunet-service-gns.c:561
+#: src/zonemaster/gnunet-service-zonemaster.c:875
+#: src/zonemaster/gnunet-service-zonemaster-monitor.c:440
 #, fuzzy
 msgid "Could not connect to DHT!\n"
 msgstr "Kunde inte ansluta till gnunetd.\n"
 
-#: src/gns/gnunet-service-gns_interceptor.c:257
+#: src/gns/gnunet-service-gns_interceptor.c:259
 msgid "Error converting GNS response to DNS response!\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_interceptor.c:364
+#: src/gns/gnunet-service-gns_interceptor.c:366
 #, fuzzy
 msgid "Failed to connect to the DNS service!\n"
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/gns/gnunet-service-gns_resolver.c:717
+#: src/gns/gnunet-service-gns_resolver.c:700
 #, c-format
 msgid "Protocol `%s' unknown, skipping labels.\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:728
+#: src/gns/gnunet-service-gns_resolver.c:711
 #, c-format
 msgid "Service `%s' unknown for protocol `%s', skipping labels.\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:931
+#: src/gns/gnunet-service-gns_resolver.c:914
 #, fuzzy
 msgid "Failed to parse DNS response\n"
 msgstr "Misslyckades att skicka HTTP-begäran till värd \"%s\": %s\n"
 
-#: src/gns/gnunet-service-gns_resolver.c:1112
+#: src/gns/gnunet-service-gns_resolver.c:1095
 #, c-format
 msgid "Skipping record of unsupported type %d\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:1382
+#: src/gns/gnunet-service-gns_resolver.c:1365
 #, c-format
 msgid "VPN returned empty result for `%s'\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:1823
+#: src/gns/gnunet-service-gns_resolver.c:1806
 #, c-format
 msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:1866
+#: src/gns/gnunet-service-gns_resolver.c:1849
 #, fuzzy, c-format
 msgid "GNS lookup failed (zero records found for `%s')\n"
 msgstr "%d filer hittades i katalog.\n"
 
-#: src/gns/gnunet-service-gns_resolver.c:2281
+#: src/gns/gnunet-service-gns_resolver.c:2264
 msgid "GNS lookup recursion failed (no delegation record found)\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:2304
+#: src/gns/gnunet-service-gns_resolver.c:2287
 #, fuzzy, c-format
 msgid "Failed to cache GNS resolution: %s\n"
 msgstr "Misslyckades att skicka HTTP-begäran till värd \"%s\": %s\n"
 
-#: src/gns/gnunet-service-gns_resolver.c:2467
+#: src/gns/gnunet-service-gns_resolver.c:2450
 #, c-format
 msgid "GNS namecache returned empty result for `%s'\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:2602
+#: src/gns/gnunet-service-gns_resolver.c:2585
 #, c-format
 msgid "Zone %s was revoked, resolution fails\n"
 msgstr ""
 
-#: src/gns/plugin_gnsrecord_gns.c:179
+#: src/gns/plugin_gnsrecord_gns.c:181
 #, fuzzy, c-format
 msgid "Unable to parse PKEY record `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/gns/plugin_gnsrecord_gns.c:210
+#: src/gns/plugin_gnsrecord_gns.c:212
 #, fuzzy, c-format
 msgid "Unable to parse GNS2DNS record `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/gns/plugin_gnsrecord_gns.c:231
+#: src/gns/plugin_gnsrecord_gns.c:233
 #, fuzzy, c-format
 msgid "Failed to serialize GNS2DNS record with value `%s'\n"
 msgstr "Kunde inte tolka konfigurationsfil \"%s\".\n"
 
-#: src/gns/plugin_gnsrecord_gns.c:256
+#: src/gns/plugin_gnsrecord_gns.c:258
 #, fuzzy, c-format
 msgid "Unable to parse VPN record string `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/gns/plugin_gnsrecord_gns.c:292
+#: src/gns/plugin_gnsrecord_gns.c:294
 #, fuzzy, c-format
 msgid "Unable to parse BOX record string `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:357
+#: 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:378
+#: 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:400
+#: 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:485
+#: src/gnsrecord/plugin_gnsrecord_dns.c:487
 #, 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:521
+#: src/gnsrecord/plugin_gnsrecord_dns.c:523
 #, 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:540
+#: src/gnsrecord/plugin_gnsrecord_dns.c:542
 #, 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:563
+#: src/gnsrecord/plugin_gnsrecord_dns.c:565
 #, 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:586
+#: src/gnsrecord/plugin_gnsrecord_dns.c:588
 #, 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:601
+#: src/gnsrecord/plugin_gnsrecord_dns.c:603
 #, 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:628
+#: src/gnsrecord/plugin_gnsrecord_dns.c:630
 #, 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:644
+#: src/gnsrecord/plugin_gnsrecord_dns.c:646
 #, 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:661
+#: src/gnsrecord/plugin_gnsrecord_dns.c:663
 #, fuzzy, c-format
 msgid "Unable to parse IPv6 address `%s'\n"
 msgstr "Ogiltigt svar på \"%s\".\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:685
-#: src/gnsrecord/plugin_gnsrecord_dns.c:701
+#: src/gnsrecord/plugin_gnsrecord_dns.c:687
+#: src/gnsrecord/plugin_gnsrecord_dns.c:703
 #, fuzzy, c-format
 msgid "Unable to parse TLSA record string `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/hello/gnunet-hello.c:124
+#: src/hello/gnunet-hello.c:126
 msgid "Call with name of HELLO file to modify.\n"
 msgstr ""
 
-#: src/hello/gnunet-hello.c:130
+#: src/hello/gnunet-hello.c:132
 #, fuzzy, c-format
 msgid "Error accessing file `%s': %s\n"
 msgstr "Fel vid skapandet av användare"
 
-#: src/hello/gnunet-hello.c:138
+#: src/hello/gnunet-hello.c:140
 #, c-format
 msgid "File `%s' is too big to be a HELLO\n"
 msgstr ""
 
-#: src/hello/gnunet-hello.c:145
+#: src/hello/gnunet-hello.c:147
 #, c-format
 msgid "File `%s' is too small to be a HELLO\n"
 msgstr ""
 
-#: src/hello/gnunet-hello.c:155 src/hello/gnunet-hello.c:196
+#: src/hello/gnunet-hello.c:157 src/hello/gnunet-hello.c:198
 #, fuzzy, c-format
 msgid "Error opening file `%s': %s\n"
 msgstr "Fel vid skapandet av användare"
 
-#: src/hello/gnunet-hello.c:172
+#: src/hello/gnunet-hello.c:174
 #, fuzzy, c-format
 msgid "Did not find well-formed HELLO in file `%s'\n"
 msgstr "%d filer hittades i katalog.\n"
 
-#: src/hello/gnunet-hello.c:208
+#: src/hello/gnunet-hello.c:210
 #, fuzzy, c-format
 msgid "Error writing HELLO to file `%s': %s\n"
 msgstr "Fel vid skapandet av användare"
 
-#: src/hello/gnunet-hello.c:217
+#: src/hello/gnunet-hello.c:219
 #, c-format
 msgid "Modified %u addresses, wrote %u bytes\n"
 msgstr ""
 
-#: src/hello/hello.c:1108
+#: src/hello/hello.c:1110
 #, fuzzy
 msgid "Failed to parse HELLO message: missing expiration time\n"
 msgstr "Kunde inte spara konfiguration!"
 
-#: src/hello/hello.c:1117
+#: src/hello/hello.c:1119
 #, fuzzy
 msgid "Failed to parse HELLO message: invalid expiration time\n"
 msgstr "Kunde inte spara konfiguration!"
 
-#: src/hello/hello.c:1127
+#: src/hello/hello.c:1129
 #, fuzzy
 msgid "Failed to parse HELLO message: malformed\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/hello/hello.c:1138
+#: src/hello/hello.c:1140
 #, fuzzy
 msgid "Failed to parse HELLO message: missing transport plugin\n"
 msgstr "Kunde inte slå upp \"%s\": %s\n"
 
-#: src/hello/hello.c:1156
+#: src/hello/hello.c:1158
 #, c-format
 msgid "Plugin `%s' not found, skipping address\n"
 msgstr ""
 
-#: src/hello/hello.c:1164
+#: src/hello/hello.c:1166
 #, c-format
 msgid "Plugin `%s' does not support URIs yet\n"
 msgstr ""
 
-#: src/hello/hello.c:1179
+#: src/hello/hello.c:1181
 #, fuzzy, c-format
 msgid "Failed to parse `%s' as an address for plugin `%s'\n"
 msgstr "Misslyckades att binda till UDP-port %d.\n"
 
-#: src/hostlist/gnunet-daemon-hostlist.c:314
+#: src/hostlist/gnunet-daemon-hostlist.c:316
 msgid ""
 "None of the functions for the hostlist daemon were enabled.  I have no "
 "reason to run!\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist.c:374
+#: src/hostlist/gnunet-daemon-hostlist.c:376
 msgid "advertise our hostlist to other peers"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist.c:379
+#: src/hostlist/gnunet-daemon-hostlist.c:381
 msgid ""
 "bootstrap using hostlists (it is highly recommended that you always use this "
 "option)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist.c:383
+#: src/hostlist/gnunet-daemon-hostlist.c:385
 msgid "enable learning about hostlist servers from other peers"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist.c:388
+#: src/hostlist/gnunet-daemon-hostlist.c:390
 msgid "provide a hostlist server"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist.c:404
+#: src/hostlist/gnunet-daemon-hostlist.c:406
 msgid "GNUnet hostlist server and client"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:347
+#: src/hostlist/gnunet-daemon-hostlist_client.c:349
 msgid "# bytes downloaded from hostlist servers"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:368
-#: src/hostlist/gnunet-daemon-hostlist_client.c:401
+#: src/hostlist/gnunet-daemon-hostlist_client.c:370
+#: src/hostlist/gnunet-daemon-hostlist_client.c:403
 msgid "# invalid HELLOs downloaded from hostlist servers"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:371
-#: src/hostlist/gnunet-daemon-hostlist_client.c:404
+#: src/hostlist/gnunet-daemon-hostlist_client.c:373
+#: src/hostlist/gnunet-daemon-hostlist_client.c:406
 #, fuzzy, c-format
 msgid "Invalid `%s' message received from hostlist at `%s'\n"
 msgstr "Ogiltigt meddelande mottogs den %s:%d."
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:389
+#: src/hostlist/gnunet-daemon-hostlist_client.c:391
 msgid "# valid HELLOs downloaded from hostlist servers"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:659
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1405
+#: src/hostlist/gnunet-daemon-hostlist_client.c:661
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1407
 msgid "# advertised hostlist URIs"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:689
+#: src/hostlist/gnunet-daemon-hostlist_client.c:691
 #, c-format
 msgid "# advertised URI `%s' downloaded"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:732
+#: src/hostlist/gnunet-daemon-hostlist_client.c:734
 #, c-format
 msgid ""
 "Advertised hostlist with URI `%s' could not be downloaded. Advertised URI "
 "gets dismissed.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:860
+#: src/hostlist/gnunet-daemon-hostlist_client.c:862
 #, fuzzy, c-format
 msgid "Timeout trying to download hostlist from `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:874
+#: src/hostlist/gnunet-daemon-hostlist_client.c:876
 #, c-format
 msgid "Download limit of %u bytes exceeded, stopping download\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:894
+#: src/hostlist/gnunet-daemon-hostlist_client.c:896
 #, fuzzy, c-format
 msgid "Download of hostlist from `%s' failed: `%s'\n"
 msgstr ""
 "Uppladdning av \"%s\" klar, aktuell genomsnittshastighet är %8.3f kbps.\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:900
+#: src/hostlist/gnunet-daemon-hostlist_client.c:902
 #, fuzzy, c-format
 msgid "Download of hostlist `%s' completed.\n"
 msgstr ""
 "Uppladdning av \"%s\" klar, aktuell genomsnittshastighet är %8.3f kbps.\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:908
+#: src/hostlist/gnunet-daemon-hostlist_client.c:910
 #, c-format
 msgid "Adding successfully tested hostlist `%s' datastore.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:961
+#: src/hostlist/gnunet-daemon-hostlist_client.c:963
 #, c-format
 msgid "Bootstrapping using hostlist at `%s'.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:969
+#: src/hostlist/gnunet-daemon-hostlist_client.c:971
 msgid "# hostlist downloads initiated"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1096
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1663
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1098
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1665
 msgid "# milliseconds between hostlist downloads"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1105
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1107
 #, c-format
 msgid "Have %u/%u connections.  Will consider downloading hostlist in %s\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1164
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1185
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1166
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1187
 #, fuzzy
 msgid "# active connections"
 msgstr "Nätverksanslutning"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1351
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1353
 #, fuzzy, c-format
 msgid "Loading saved hostlist entries from file `%s' \n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1356
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1358
 #, fuzzy, c-format
 msgid "Hostlist file `%s' does not exist\n"
 msgstr "antal meddelanden att använda per iteration"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1365
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1367
 #, fuzzy, c-format
 msgid "Could not open file `%s' for reading to load hostlists: %s\n"
 msgstr "Kunde inte slå upp \"%s\": %s\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1399
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1401
 #, c-format
 msgid "%u hostlist URIs loaded from file\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1402
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1404
 msgid "# hostlist URIs read from file"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1448
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1450
 #, fuzzy, c-format
 msgid "Could not open file `%s' for writing to save hostlists: %s\n"
 msgstr "Kunde inte slå upp \"%s\": %s\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1455
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1457
 #, fuzzy, c-format
 msgid "Writing %u hostlist URIs to `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1479
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1496
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1481
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1498
 #, c-format
 msgid "Error writing hostlist URIs to file `%s'\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1491
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1493
 msgid "# hostlist URIs written to file"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1593
-#: src/transport/plugin_transport_http_client.c:2272
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1595
+#: src/transport/plugin_transport_http_client.c:2274
 #, c-format
 msgid "Invalid proxy type: `%s', disabling proxy! Check configuration!\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1622
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1624
 msgid "Learning is enabled on this peer\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1636
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1638
 msgid "Learning is not enabled on this peer\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1649
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1651
 #, c-format
 msgid ""
 "Since learning is not enabled on this peer, hostlist file `%s' was removed\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:174
+#: src/hostlist/gnunet-daemon-hostlist_server.c:176
 #, fuzzy
 msgid "bytes in hostlist"
 msgstr "# byte krypterade"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:199
+#: src/hostlist/gnunet-daemon-hostlist_server.c:201
 msgid "expired addresses encountered"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:235
-#: src/hostlist/gnunet-daemon-hostlist_server.c:529
-#: src/peerinfo-tool/gnunet-peerinfo.c:383
-#: src/peerinfo-tool/gnunet-peerinfo.c:532
-#: src/topology/gnunet-daemon-topology.c:860
+#: src/hostlist/gnunet-daemon-hostlist_server.c:237
+#: src/hostlist/gnunet-daemon-hostlist_server.c:531
+#: src/peerinfo-tool/gnunet-peerinfo.c:385
+#: src/peerinfo-tool/gnunet-peerinfo.c:534
+#: src/topology/gnunet-daemon-topology.c:862
 #, fuzzy, c-format
 msgid "Error in communication with PEERINFO service: %s\n"
 msgstr "Skriv ut information om GNUnets motparter."
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:259
+#: src/hostlist/gnunet-daemon-hostlist_server.c:261
 msgid "HELLOs without addresses encountered (ignored)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:276
+#: src/hostlist/gnunet-daemon-hostlist_server.c:278
 msgid "bytes not included in hostlist (size limit)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:380
+#: src/hostlist/gnunet-daemon-hostlist_server.c:382
 #, c-format
 msgid "Refusing `%s' request to hostlist server\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:383
+#: src/hostlist/gnunet-daemon-hostlist_server.c:385
 msgid "hostlist requests refused (not HTTP GET)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:395
+#: src/hostlist/gnunet-daemon-hostlist_server.c:397
 #, c-format
 msgid "Refusing `%s' request with %llu bytes of upload data\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:399
+#: src/hostlist/gnunet-daemon-hostlist_server.c:401
 msgid "hostlist requests refused (upload data)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:406
+#: src/hostlist/gnunet-daemon-hostlist_server.c:408
 msgid "Could not handle hostlist request since I do not have a response yet\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:409
+#: src/hostlist/gnunet-daemon-hostlist_server.c:411
 msgid "hostlist requests refused (not ready)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:414
+#: src/hostlist/gnunet-daemon-hostlist_server.c:416
 msgid "Received request for our hostlist\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:416
+#: src/hostlist/gnunet-daemon-hostlist_server.c:418
 msgid "hostlist requests processed"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:464
+#: src/hostlist/gnunet-daemon-hostlist_server.c:466
 msgid "# hostlist advertisements send"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:677
-#: src/transport/gnunet-service-transport.c:2813
+#: src/hostlist/gnunet-daemon-hostlist_server.c:679
+#: src/transport/gnunet-service-transport.c:2814
 #, fuzzy
 msgid "Could not access PEERINFO service.  Exiting.\n"
 msgstr "Kunde inte komma åt namnrymdsinformation.\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:689
+#: src/hostlist/gnunet-daemon-hostlist_server.c:691
 #, fuzzy, c-format
 msgid "Invalid port number %llu.  Exiting.\n"
 msgstr "Ogiltiga argument. Avslutar.\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:701
+#: src/hostlist/gnunet-daemon-hostlist_server.c:703
 #, c-format
 msgid "Hostlist service starts on %s:%llu\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:716
+#: src/hostlist/gnunet-daemon-hostlist_server.c:718
 #, fuzzy, c-format
 msgid "Address to obtain hostlist: `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:729
+#: src/hostlist/gnunet-daemon-hostlist_server.c:731
 #, fuzzy
 msgid "BINDTOIP does not a valid IPv4 address! Ignoring BINDTOIPV4.\n"
 msgstr "\"%s\" är inte tillgänglig."
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:746
+#: src/hostlist/gnunet-daemon-hostlist_server.c:748
 #, fuzzy
 msgid "BINDTOIP does not a valid IPv4 address! Ignoring BINDTOIPV6.\n"
 msgstr "\"%s\" är inte tillgänglig."
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:767
+#: src/hostlist/gnunet-daemon-hostlist_server.c:769
 #, fuzzy, c-format
 msgid "`%s' is not a valid IPv4 address! Ignoring BINDTOIPV4.\n"
 msgstr "\"%s\" är inte tillgänglig."
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:787
+#: src/hostlist/gnunet-daemon-hostlist_server.c:789
 #, fuzzy, c-format
 msgid "`%s' is not a valid IPv6 address! Ignoring BINDTOIPV6.\n"
 msgstr "\"%s\" är inte tillgänglig."
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:827
+#: src/hostlist/gnunet-daemon-hostlist_server.c:829
 #, c-format
 msgid "Could not start hostlist HTTP server on port %u\n"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:177
+#: src/identity/gnunet-identity.c:179
 #, fuzzy, c-format
 msgid "Failed to create ego: %s\n"
 msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
 
-#: src/identity/gnunet-identity.c:199
+#: src/identity/gnunet-identity.c:201
 #, fuzzy, c-format
 msgid "Failed to set default ego: %s\n"
 msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
 
-#: src/identity/gnunet-identity.c:354
+#: src/identity/gnunet-identity.c:356
 msgid "create ego NAME"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:360
+#: src/identity/gnunet-identity.c:362
 msgid "delete ego NAME "
 msgstr ""
 
-#: src/identity/gnunet-identity.c:365
+#: src/identity/gnunet-identity.c:367
 msgid "display all egos"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:371
+#: src/identity/gnunet-identity.c:373
 msgid ""
 "set default identity to EGO for a subsystem SUBSYSTEM (use together with -s)"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:376
+#: src/identity/gnunet-identity.c:378
 msgid "run in monitor mode egos"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:382
+#: src/identity/gnunet-identity.c:384
 msgid ""
 "set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:396
+#: src/identity/gnunet-identity.c:398
 msgid "Maintain egos"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:389
+#: src/identity/gnunet-service-identity.c:391
 msgid "no default known"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:414
+#: src/identity/gnunet-service-identity.c:416
 msgid "default configured, but ego unknown (internal error)"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:505
-#: src/identity/gnunet-service-identity.c:788
-#: src/identity/gnunet-service-identity.c:916
+#: src/identity/gnunet-service-identity.c:507
+#: src/identity/gnunet-service-identity.c:790
+#: src/identity/gnunet-service-identity.c:918
 #, fuzzy, c-format
 msgid "Failed to write subsystem default identifier map to `%s'.\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/identity/gnunet-service-identity.c:513
+#: src/identity/gnunet-service-identity.c:515
 msgid "Unknown ego specified for service (internal error)"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:608
+#: src/identity/gnunet-service-identity.c:610
 msgid "identifier already in use for another ego"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:763
+#: src/identity/gnunet-service-identity.c:765
 msgid "target name already exists"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:806
-#: src/identity/gnunet-service-identity.c:934
+#: src/identity/gnunet-service-identity.c:808
+#: src/identity/gnunet-service-identity.c:936
 msgid "no matching ego found"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:969
+#: src/identity/gnunet-service-identity.c:971
 #, fuzzy, c-format
 msgid "Failed to parse ego information in `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/identity/gnunet-service-identity.c:1027
+#: src/identity/gnunet-service-identity.c:1029
 #, fuzzy, c-format
 msgid "Failed to parse subsystem identity configuration file `%s'\n"
 msgstr "Kunde inte spara konfigurationsfil \"%s\":"
 
-#: src/identity/gnunet-service-identity.c:1037
+#: src/identity/gnunet-service-identity.c:1039
 #, fuzzy, c-format
 msgid "Failed to create directory `%s' for storing egos\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/json/json.c:121
+#: src/json/json.c:123
 #, fuzzy, c-format
 msgid "Failed to parse JSON in option `%s': %s (%s)\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/multicast/gnunet-multicast.c:46 src/multicast/gnunet-multicast.c:70
-msgid "This command doesn't do anything yet."
-msgstr ""
-
-#: src/my/my.c:194 src/my/my.c:213
+#: src/my/my.c:196 src/my/my.c:215
 #, fuzzy, c-format
 msgid "%s failed at %s:%d with error: %s\n"
 msgstr "\"%s\" misslyckades vid %s:%d med fel: %s\n"
 
-#: src/mysql/mysql.c:178
+#: src/mysql/mysql.c:180
 #, c-format
 msgid "Trying to use file `%s' for MySQL configuration.\n"
 msgstr "Försöker använda fil \"%s\" för MySQL-konfiguration.\n"
 
-#: src/mysql/mysql.c:185
+#: src/mysql/mysql.c:187
 #, fuzzy, c-format
 msgid "Could not access file `%s': %s\n"
 msgstr "Kunde inte köra \"%s\": %s\n"
 
-#: src/namecache/gnunet-namecache.c:105
+#: src/namecache/gnunet-namecache.c:107
 #, fuzzy, c-format
 msgid "No records found for `%s'"
 msgstr "%d filer hittades i katalog.\n"
 
-#: src/namecache/gnunet-namecache.c:120 src/namestore/gnunet-namestore.c:424
+#: src/namecache/gnunet-namecache.c:122 src/namestore/gnunet-namestore.c:454
 #, c-format
 msgid "\tCorrupt or unsupported record of type %u\n"
 msgstr ""
 
-#: src/namecache/gnunet-namecache.c:181
+#: src/namecache/gnunet-namecache.c:183
 #, fuzzy, c-format
 msgid "You must specify which zone should be accessed\n"
 msgstr "anger vilken TRANSPORT som ska testas"
 
-#: src/namecache/gnunet-namecache.c:191
+#: src/namecache/gnunet-namecache.c:193
 #, fuzzy, c-format
 msgid "Invalid public key for zone `%s'\n"
 msgstr "Ogiltigt argument: \"%s\"\n"
 
-#: src/namecache/gnunet-namecache.c:199
+#: src/namecache/gnunet-namecache.c:201
 #, fuzzy, c-format
 msgid "You must specify a name\n"
 msgstr "Du måste ange en mottagare!\n"
 
-#: src/namecache/gnunet-namecache.c:230 src/namestore/gnunet-namestore.c:1290
+#: src/namecache/gnunet-namecache.c:232 src/namestore/gnunet-namestore.c:1575
 msgid "name of the record to add/delete/display"
 msgstr ""
 
-#: src/namecache/gnunet-namecache.c:236
+#: src/namecache/gnunet-namecache.c:238
 #, fuzzy
 msgid "spezifies the public key of the zone to look in"
 msgstr "ange prioritet för innehållet"
 
-#: src/namecache/gnunet-namecache.c:248 src/namestore/gnunet-namestore.c:1342
+#: src/namecache/gnunet-namecache.c:250 src/namestore/gnunet-namestore.c:1632
 #, fuzzy
 msgid "GNUnet zone manipulation tool"
 msgstr "GNUnet-konfiguration"
 
-#: src/namecache/namecache_api.c:294
+#: src/namecache/namecache_api.c:296
 msgid "Namecache failed to cache block"
 msgstr ""
 
-#: src/namecache/namecache_api.c:381
+#: src/namecache/namecache_api.c:383
 #, fuzzy
 msgid "Error communicating with namecache service"
 msgstr "Skriv ut information om GNUnets motparter."
 
-#: src/namecache/plugin_namecache_flat.c:119
-#: src/namecache/plugin_namecache_flat.c:253
-#: src/namestore/plugin_namestore_heap.c:146
-#: src/namestore/plugin_namestore_heap.c:393
-#: src/peerstore/plugin_peerstore_flat.c:377
-#: src/peerstore/plugin_peerstore_flat.c:536
+#: src/namecache/plugin_namecache_flat.c:121
+#: src/namecache/plugin_namecache_flat.c:255
+#: src/namestore/plugin_namestore_heap.c:148
+#: src/namestore/plugin_namestore_heap.c:395
+#: src/peerstore/plugin_peerstore_flat.c:379
+#: src/peerstore/plugin_peerstore_flat.c:538
 #, 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_heap.c:157
-#: src/peerstore/plugin_peerstore_flat.c:392
+#: src/namecache/plugin_namecache_flat.c:132
+#: src/namestore/plugin_namestore_heap.c:159
+#: src/peerstore/plugin_peerstore_flat.c:394
 #, fuzzy, c-format
 msgid "Unable to get filesize: %s.\n"
 msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
 
-#: src/namecache/plugin_namecache_flat.c:149
-#: src/namestore/plugin_namestore_heap.c:170
-#: src/peerstore/plugin_peerstore_flat.c:404
+#: src/namecache/plugin_namecache_flat.c:151
+#: src/namestore/plugin_namestore_heap.c:172
+#: src/peerstore/plugin_peerstore_flat.c:406
 #, fuzzy, c-format
 msgid "Unable to read file: %s.\n"
 msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
 
-#: src/namecache/plugin_namecache_flat.c:408
+#: src/namecache/plugin_namecache_flat.c:410
 msgid "flat plugin running\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:311
+#: src/namecache/plugin_namecache_sqlite.c:183
+#: src/namecache/plugin_namecache_sqlite.c:197
+#: src/namestore/plugin_namestore_sqlite.c:219
+#: src/namestore/plugin_namestore_sqlite.c:230
+#, fuzzy, c-format
+msgid "Failed to setup database at `%s'\n"
+msgstr "Fel vid %s:%d.\n"
+
+#: src/namestore/gnunet-namestore.c:341
 #, fuzzy, c-format
 msgid "Adding record failed: %s\n"
 msgstr ""
 "\n"
 "Fel vid uppladdning av fil: %s\n"
 
-#: src/namestore/gnunet-namestore.c:341
+#: src/namestore/gnunet-namestore.c:371
 #, fuzzy, c-format
 msgid "Deleting record failed, record does not exist%s%s\n"
 msgstr ""
 "\n"
 "Fel vid uppladdning av fil: %s\n"
 
-#: src/namestore/gnunet-namestore.c:348
+#: src/namestore/gnunet-namestore.c:378
 #, fuzzy, c-format
 msgid "Deleting record failed%s%s\n"
 msgstr ""
 "\n"
 "Fel vid uppladdning av fil: %s\n"
 
-#: src/namestore/gnunet-namestore.c:628 src/namestore/gnunet-namestore.c:636
+#: src/namestore/gnunet-namestore.c:660 src/namestore/gnunet-namestore.c:668
 #, c-format
 msgid "A %s record exists already under `%s', no other records can be added.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:650 src/namestore/gnunet-namestore.c:662
+#: src/namestore/gnunet-namestore.c:682 src/namestore/gnunet-namestore.c:694
 #, c-format
 msgid "Records already exist under `%s', cannot add `%s' record.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:675
+#: src/namestore/gnunet-namestore.c:707
 #, c-format
 msgid ""
 "Non-GNS2DNS records already exist under `%s', cannot add GNS2DNS record.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:809
+#: src/namestore/gnunet-namestore.c:837
 #, c-format
 msgid "There are no records under label `%s' that could be deleted.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:850
+#: src/namestore/gnunet-namestore.c:878
 #, c-format
 msgid ""
 "There are no records under label `%s' that match the request for deletion.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:902
+#: src/namestore/gnunet-namestore.c:965
+#, fuzzy, c-format
+msgid "Failed to replace records: %s\n"
+msgstr "Misslyckades att skicka HTTP-begäran till värd \"%s\": %s\n"
+
+#: src/namestore/gnunet-namestore.c:1009
 #, c-format
 msgid "No options given\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:921 src/namestore/gnunet-namestore.c:930
-#: src/namestore/gnunet-namestore.c:949 src/namestore/gnunet-namestore.c:972
-#: src/namestore/gnunet-namestore.c:1026
+#: src/namestore/gnunet-namestore.c:1032 src/namestore/gnunet-namestore.c:1065
+#: src/namestore/gnunet-namestore.c:1074 src/namestore/gnunet-namestore.c:1093
+#: src/namestore/gnunet-namestore.c:1116 src/namestore/gnunet-namestore.c:1148
 #, fuzzy, c-format
 msgid "Missing option `%s' for operation `%s'\n"
 msgstr "Konfigurationsfil \"%s\" skapad.\n"
 
-#: src/namestore/gnunet-namestore.c:922 src/namestore/gnunet-namestore.c:931
-#: src/namestore/gnunet-namestore.c:950 src/namestore/gnunet-namestore.c:974
+#: src/namestore/gnunet-namestore.c:1033
+msgid "replace"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1066 src/namestore/gnunet-namestore.c:1075
+#: src/namestore/gnunet-namestore.c:1094 src/namestore/gnunet-namestore.c:1118
 msgid "add"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:940
+#: src/namestore/gnunet-namestore.c:1084
 #, fuzzy, c-format
 msgid "Unsupported type `%s'\n"
 msgstr "Kommando \"%s\" stöds ej.  Avbryter.\n"
 
-#: src/namestore/gnunet-namestore.c:962
+#: src/namestore/gnunet-namestore.c:1106
 #, fuzzy, c-format
 msgid "Value `%s' invalid for record type `%s'\n"
 msgstr "%s: symbolvärde \"%s\" ogiltigt för %s\n"
 
-#: src/namestore/gnunet-namestore.c:1007
+#: src/namestore/gnunet-namestore.c:1129
 #, fuzzy, c-format
 msgid "Invalid time format `%s'\n"
 msgstr "Ogiltigt format för IP: \"%s\"\n"
 
-#: src/namestore/gnunet-namestore.c:1027
+#: src/namestore/gnunet-namestore.c:1149
 msgid "del"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1070
+#: src/namestore/gnunet-namestore.c:1192
 #, fuzzy, c-format
 msgid "Invalid public key for reverse lookup `%s'\n"
 msgstr "Ogiltigt argument: \"%s\"\n"
 
-#: src/namestore/gnunet-namestore.c:1099
-#: src/peerinfo-tool/gnunet-peerinfo.c:773
+#: src/namestore/gnunet-namestore.c:1221
+#: src/peerinfo-tool/gnunet-peerinfo.c:775
 #, fuzzy, c-format
 msgid "Invalid URI `%s'\n"
 msgstr "Ogiltiga argument: "
 
-#: src/namestore/gnunet-namestore.c:1134
+#: src/namestore/gnunet-namestore.c:1249
 #, fuzzy, c-format
 msgid "Invalid nick `%s'\n"
 msgstr "Ogiltiga argument: "
 
-#: src/namestore/gnunet-namestore.c:1174
+#: src/namestore/gnunet-namestore.c:1289
 #, fuzzy, c-format
 msgid "No default ego configured in identity service\n"
 msgstr "\"%s\": okänd tjänst: %s\n"
 
-#: src/namestore/gnunet-namestore.c:1238
+#: src/namestore/gnunet-namestore.c:1341
+#, fuzzy, c-format
+msgid "Superfluous command line arguments (starting with `%s') ignored\n"
+msgstr "Onödiga argument (ignorerade).\n"
+
+#: src/namestore/gnunet-namestore.c:1357
 #, fuzzy, c-format
 msgid "Cannot connect to identity service\n"
 msgstr "Kunde inte ansluta till gnunetd.\n"
 
-#: src/namestore/gnunet-namestore.c:1263
+#: src/namestore/gnunet-namestore.c:1407
+msgid "Empty record line argument is not allowed.\n"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1423
+#, c-format
+msgid "Invalid expiration time `%s' (must be without unit)\n"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1435 src/namestore/gnunet-namestore.c:1453
+#: src/namestore/gnunet-namestore.c:1470
+#, fuzzy, c-format
+msgid "Missing entries in record line `%s'.\n"
+msgstr "Kunde inte slå upp \"%s\": %s\n"
+
+#: src/namestore/gnunet-namestore.c:1444
+#, fuzzy, c-format
+msgid "Unknown record type `%s'\n"
+msgstr "Okänd operation \"%s\"\n"
+
+#: src/namestore/gnunet-namestore.c:1484
+#, fuzzy, c-format
+msgid "Invalid record data for type %s: `%s'.\n"
+msgstr "Ogiltigt format för IP: \"%s\"\n"
+
+#: src/namestore/gnunet-namestore.c:1548
 msgid "add record"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1267
+#: src/namestore/gnunet-namestore.c:1552
 msgid "delete record"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1271
+#: src/namestore/gnunet-namestore.c:1556
 msgid "display records"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1276
+#: src/namestore/gnunet-namestore.c:1561
 msgid ""
 "expiration time for record to use (for adding only), \"never\" is possible"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1281
+#: src/namestore/gnunet-namestore.c:1566
 #, fuzzy
 msgid "set the desired nick name for the zone"
 msgstr "Skriv ut information om GNUnets motparter."
 
-#: src/namestore/gnunet-namestore.c:1285
+#: src/namestore/gnunet-namestore.c:1570
 #, fuzzy
 msgid "monitor changes in the namestore"
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/namestore/gnunet-namestore.c:1295
+#: src/namestore/gnunet-namestore.c:1580
 #, fuzzy
 msgid "determine our name for the given PKEY"
 msgstr "Skriv ut information om GNUnets motparter."
 
-#: src/namestore/gnunet-namestore.c:1300
+#: src/namestore/gnunet-namestore.c:1585
+msgid ""
+"set record set to values given by (possibly multiple) RECORDLINES; can be "
+"specified multiple times"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1590
 msgid "type of the record to add/delete/display"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1305
+#: src/namestore/gnunet-namestore.c:1595
 msgid "URI to import into our zone"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1310
+#: src/namestore/gnunet-namestore.c:1600
 msgid "value of the record to add/delete"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1314
+#: src/namestore/gnunet-namestore.c:1604
 msgid "create or list public record"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1318
+#: src/namestore/gnunet-namestore.c:1608
 msgid ""
 "create shadow record (only valid if all other records of the same type have "
 "expired"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1323
+#: src/namestore/gnunet-namestore.c:1613
 #, fuzzy
 msgid "name of the ego controlling the zone"
 msgstr "Visa värde av alternativet"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:547
+#: src/namestore/gnunet-namestore-fcfsd.c:549
 #, fuzzy, c-format
 msgid "Unsupported form value `%s'\n"
 msgstr "Kommando \"%s\" stöds ej.  Avbryter.\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:574
+#: src/namestore/gnunet-namestore-fcfsd.c:576
 #, fuzzy, c-format
 msgid "Failed to create record for domain `%s': %s\n"
 msgstr "Kunde inte tolka konfigurationsfil \"%s\".\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:595
+#: src/namestore/gnunet-namestore-fcfsd.c:597
 msgid "Error when mapping zone to name\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:627
+#: src/namestore/gnunet-namestore-fcfsd.c:629
 #, c-format
 msgid "Found existing name `%s' for the given key\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:687
+#: src/namestore/gnunet-namestore-fcfsd.c:689
 #, c-format
 msgid "Found %u existing records for domain `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:775
+#: src/namestore/gnunet-namestore-fcfsd.c:777
 #, fuzzy, c-format
 msgid "Failed to create page for `%s'\n"
 msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:794
+#: src/namestore/gnunet-namestore-fcfsd.c:796
 #, fuzzy, c-format
 msgid "Failed to setup post processor for `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:830
+#: src/namestore/gnunet-namestore-fcfsd.c:832
 msgid "Domain name must not contain `.'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:839
+#: src/namestore/gnunet-namestore-fcfsd.c:841
 msgid "Domain name must not contain `+'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1069
+#: src/namestore/gnunet-namestore-fcfsd.c:1071
 msgid "No ego configured for `fcfsd` subsystem\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1097
+#: src/namestore/gnunet-namestore-fcfsd.c:1099
 #, fuzzy
 msgid "Failed to start HTTP server\n"
 msgstr "Misslyckades att starta samling.\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1145
+#: src/namestore/gnunet-namestore-fcfsd.c:1147
 #, fuzzy
 msgid "Failed to connect to identity\n"
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1171
+#: src/namestore/gnunet-namestore-fcfsd.c:1173
 msgid "name of the zone that is to be managed by FCFSD"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1190
+#: src/namestore/gnunet-namestore-fcfsd.c:1192
 msgid "GNU Name System First Come First Serve name registration service"
 msgstr ""
 
-#: src/namestore/gnunet-service-namestore.c:749
+#: src/namestore/gnunet-service-namestore.c:900
 #, fuzzy, c-format
 msgid "Failed to replicate block in namecache: %s\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/namestore/gnunet-zoneimport.c:2036
+#: src/namestore/gnunet-zoneimport.c:2038
 msgid "size to use for the main hash map"
 msgstr ""
 
-#: src/namestore/gnunet-zoneimport.c:2041
+#: src/namestore/gnunet-zoneimport.c:2043
 msgid "minimum expiration time we assume for imported records"
 msgstr ""
 
-#: src/namestore/namestore_api.c:389
+#: src/namestore/namestore_api.c:391
 msgid "Namestore failed to store record\n"
 msgstr ""
 
-#: src/namestore/plugin_namestore_heap.c:776
+#: src/namestore/plugin_namestore_heap.c:778
 msgid "heap file database running\n"
 msgstr ""
 
-#: src/namestore/plugin_namestore_sqlite.c:216
-#: src/namestore/plugin_namestore_sqlite.c:227
-#, fuzzy, c-format
-msgid "Failed to setup database at `%s'\n"
-msgstr "Fel vid %s:%d.\n"
-
-#: src/nat-auto/gnunet-nat-auto.c:191
+#: src/nat-auto/gnunet-nat-auto.c:193
 #, fuzzy
 msgid "Suggested configuration changes:\n"
 msgstr "Konfigurationsfil \"%s\" skapad.\n"
 
-#: src/nat-auto/gnunet-nat-auto.c:217
+#: src/nat-auto/gnunet-nat-auto.c:219
 #, fuzzy, c-format
 msgid "Failed to write configuration to `%s'\n"
 msgstr "Kunde inte spara konfiguration!"
 
-#: src/nat-auto/gnunet-nat-auto.c:224
+#: src/nat-auto/gnunet-nat-auto.c:226
 #, fuzzy, c-format
 msgid "Wrote updated configuration to `%s'\n"
 msgstr "Kunde inte tolka konfigurationsfil \"%s\".\n"
 
-#: src/nat-auto/gnunet-nat-auto.c:343
+#: src/nat-auto/gnunet-nat-auto.c:345
 #, fuzzy
 msgid "run autoconfiguration"
 msgstr "GNUnet-konfiguration"
 
-#: src/nat-auto/gnunet-nat-auto.c:349
+#: src/nat-auto/gnunet-nat-auto.c:351
 msgid "section name providing the configuration for the adapter"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:354 src/nat/gnunet-nat.c:451
+#: src/nat-auto/gnunet-nat-auto.c:356 src/nat/gnunet-nat.c:459
 msgid "use TCP"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:359 src/nat/gnunet-nat.c:456
+#: src/nat-auto/gnunet-nat-auto.c:361 src/nat/gnunet-nat.c:464
 msgid "use UDP"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:364
+#: src/nat-auto/gnunet-nat-auto.c:366
 #, fuzzy
 msgid "write configuration file (for autoconfiguration)"
 msgstr "Inga applikationer definierade i konfiguration!\n"
 
-#: src/nat-auto/gnunet-nat-auto.c:376
+#: src/nat-auto/gnunet-nat-auto.c:378
 #, fuzzy
 msgid "GNUnet NAT traversal autoconfiguration"
 msgstr "GNUnet-konfiguration"
 
-#: src/nat-auto/gnunet-nat-auto_legacy.c:401
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:679
-#: src/nat-auto/nat_auto_api_test.c:403
+#: src/nat-auto/gnunet-nat-auto_legacy.c:403
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:681
+#: src/nat-auto/nat_auto_api_test.c:409
 #, fuzzy
 msgid "Failed to connect to `gnunet-nat-server'\n"
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/nat-auto/gnunet-nat-auto_legacy.c:516
+#: src/nat-auto/gnunet-nat-auto_legacy.c:518
 #, c-format
 msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto_legacy.c:566
-#: src/nat-auto/nat_auto_api_test.c:569
+#: src/nat-auto/gnunet-nat-auto_legacy.c:568
+#: src/nat-auto/nat_auto_api_test.c:575
 #, fuzzy
 msgid "NAT test failed to start NAT library\n"
 msgstr "Misslyckades att starta samling.\n"
 
-#: src/nat-auto/gnunet-service-nat-auto.c:340
+#: src/nat-auto/gnunet-service-nat-auto.c:342
 #, fuzzy
 msgid "UPnP client `upnpc` command not found, disabling UPnP\n"
 msgstr "Kommando \"%s\" hittades inte!\n"
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:383
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:385
 msgid "NAT traversal with ICMP Server succeeded.\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:384
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:386
 msgid "NAT traversal with ICMP Server failed.\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:403
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:405
 #, fuzzy
 msgid "Testing connection reversal with ICMP server.\n"
 msgstr "Skriv ut information om GNUnets motparter."
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:435
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:437
 #, fuzzy, c-format
 msgid "Detected external IP `%s'\n"
 msgstr "Mottog ogiltig RPC \"%s\".\n"
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:570
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:572
 msgid "This system has a global IPv6 address, setting IPv6 to supported.\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:588
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:590
 #, c-format
 msgid "Detected internal network address `%s'.\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:722
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:724
 msgid "upnpc found, enabling its use\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:723
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:725
 #, fuzzy
 msgid "upnpc not found\n"
 msgstr "Kommando \"%s\" hittades inte!\n"
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:760
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:762
 msgid "test_icmp_server not possible, as we have no public IPv4 address\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:772
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:832
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:774
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:834
 msgid "test_icmp_server not possible, as we are not behind NAT\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:784
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:844
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:786
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:846
 msgid "No working gnunet-helper-nat-server found\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:821
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:823
 msgid "test_icmp_client not possible, as we have no internal IPv4 address\n"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:74
+#: src/nat-auto/nat_auto_api.c:76
 msgid "Operation Successful"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:76
+#: src/nat-auto/nat_auto_api.c:78
 msgid "IPC failure"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:78
+#: src/nat-auto/nat_auto_api.c:80
 msgid "Failure in network subsystem, check permissions."
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:80
+#: src/nat-auto/nat_auto_api.c:82
 msgid "Encountered timeout while performing operation"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:82
+#: src/nat-auto/nat_auto_api.c:84
 msgid "detected that we are offline"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:84
+#: src/nat-auto/nat_auto_api.c:86
 #, fuzzy
 msgid "`upnpc` command not found"
 msgstr "Kommando \"%s\" hittades inte!\n"
 
-#: src/nat-auto/nat_auto_api.c:86
+#: src/nat-auto/nat_auto_api.c:88
 #, fuzzy
 msgid "Failed to run `upnpc` command"
 msgstr "Misslyckades att starta samling.\n"
 
-#: src/nat-auto/nat_auto_api.c:88
+#: src/nat-auto/nat_auto_api.c:90
 #, fuzzy
 msgid "`upnpc' command took too long, process killed"
 msgstr "Kommando \"%s\" hittades inte!\n"
 
-#: src/nat-auto/nat_auto_api.c:90
+#: src/nat-auto/nat_auto_api.c:92
 msgid "`upnpc' command failed to establish port mapping"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:92
+#: src/nat-auto/nat_auto_api.c:94
 #, fuzzy
 msgid "`external-ip' command not found"
 msgstr "Kommando \"%s\" hittades inte!\n"
 
-#: src/nat-auto/nat_auto_api.c:94
+#: src/nat-auto/nat_auto_api.c:96
 #, fuzzy
 msgid "Failed to run `external-ip` command"
 msgstr "Misslyckades att starta samling.\n"
 
-#: src/nat-auto/nat_auto_api.c:96
+#: src/nat-auto/nat_auto_api.c:98
 msgid "`external-ip' command output invalid"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:98
+#: src/nat-auto/nat_auto_api.c:100
 msgid "no valid address was returned by `external-ip'"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:100
+#: src/nat-auto/nat_auto_api.c:102
 #, fuzzy
 msgid "Could not determine interface with internal/local network address"
 msgstr "Kunde inte fastställa min publika IPv6-adress.\n"
 
-#: src/nat-auto/nat_auto_api.c:102
+#: src/nat-auto/nat_auto_api.c:104
 msgid "No functioning gnunet-helper-nat-server installation found"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:104
+#: src/nat-auto/nat_auto_api.c:106
 msgid "NAT test could not be initialized"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:106
+#: src/nat-auto/nat_auto_api.c:108
 msgid "NAT test timeout reached"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:108
+#: src/nat-auto/nat_auto_api.c:110
 msgid "could not register NAT"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:110
+#: src/nat-auto/nat_auto_api.c:112
 msgid "No working gnunet-helper-nat-client installation found"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api_test.c:475
+#: src/nat-auto/nat_auto_api_test.c:481
 #, fuzzy, c-format
 msgid "Failed to find valid PORT in section `%s'\n"
 msgstr "Misslyckades att binda till UDP-port %d.\n"
 
-#: src/nat-auto/nat_auto_api_test.c:520
+#: src/nat-auto/nat_auto_api_test.c:526
 #, fuzzy, c-format
 msgid "Failed to create socket bound to `%s' for NAT test: %s\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/nat/gnunet-nat.c:429
+#: src/nat/gnunet-nat.c:437
 msgid "which IP and port are we locally using to bind/listen to"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:435
+#: src/nat/gnunet-nat.c:443
 msgid "which remote IP and port should be asked for connection reversal"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:441
+#: src/nat/gnunet-nat.c:449
 msgid ""
 "name of configuration section to find additional options, such as manual "
 "host punching data"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:446
+#: src/nat/gnunet-nat.c:454
 msgid "enable STUN processing"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:461
+#: src/nat/gnunet-nat.c:469
 msgid "watch for connection reversal requests"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:473
+#: src/nat/gnunet-nat.c:481
 msgid "GNUnet NAT traversal autoconfigure daemon"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1337
+#: src/nat/gnunet-service-nat.c:1339
 #, c-format
 msgid "Malformed punched hole specification `%s' (lacks port)\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1347
+#: src/nat/gnunet-service-nat.c:1349
 #, c-format
 msgid "Invalid port number in punched hole specification `%s' (lacks port)\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1363
+#: src/nat/gnunet-service-nat.c:1365
 #, c-format
 msgid "Malformed punched hole specification `%s' (lacks `]')\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1374
+#: src/nat/gnunet-service-nat.c:1376
 #, c-format
 msgid "Malformed punched hole specification `%s' (IPv6 address invalid)"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1839
+#: src/nat/gnunet-service-nat.c:1841
 #, fuzzy
 msgid "Connection reversal request failed\n"
 msgstr "Samling stoppad.\n"
 
-#: src/nat/gnunet-service-nat.c:1912
+#: src/nat/gnunet-service-nat.c:1914
 msgid ""
 "UPnP enabled in configuration, but UPnP client `upnpc` command not found, "
 "disabling UPnP\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat_helper.c:184
+#: src/nat/gnunet-service-nat_helper.c:186
 #, c-format
 msgid "gnunet-helper-nat-server generated malformed address `%s'\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat_helper.c:271
+#: src/nat/gnunet-service-nat_helper.c:273
 #, fuzzy, c-format
 msgid "Failed to start %s\n"
 msgstr "Misslyckades att starta samling.\n"
 
-#: src/nat/gnunet-service-nat_mini.c:194
+#: src/nat/gnunet-service-nat_mini.c:196
 msgid "`external-ip' command not found\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat_mini.c:654
+#: src/nat/gnunet-service-nat_mini.c:656
 msgid "`upnpc' command not found\n"
 msgstr ""
 
-#: src/nse/gnunet-nse.c:120
+#: src/nse/gnunet-nse.c:122
 #, fuzzy
 msgid "Show network size estimates from NSE service."
 msgstr "# byte mottogs via TCP"
 
-#: src/nse/gnunet-nse-profiler.c:847
+#: src/nse/gnunet-nse-profiler.c:849
 #, fuzzy
 msgid "limit to the number of connections to NSE services, 0 for none"
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/nse/gnunet-nse-profiler.c:852
+#: src/nse/gnunet-nse-profiler.c:854
 msgid "name of the file for writing connection information and statistics"
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:864
+#: src/nse/gnunet-nse-profiler.c:866
 msgid "name of the file for writing the main results"
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:871
+#: src/nse/gnunet-nse-profiler.c:873
 msgid "Number of peers to run in each round, separated by commas"
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:882
+#: src/nse/gnunet-nse-profiler.c:884
 msgid "delay between rounds"
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:891
+#: src/nse/gnunet-nse-profiler.c:893
 #, fuzzy
 msgid "Measure quality and performance of the NSE service."
 msgstr "Kan inte tillgå tjänsten"
 
-#: src/nse/gnunet-service-nse.c:1532
-#: src/revocation/gnunet-service-revocation.c:841 src/util/gnunet-scrypt.c:274
+#: src/nse/gnunet-service-nse.c:1534
+#: src/revocation/gnunet-service-revocation.c:843 src/util/gnunet-scrypt.c:276
 msgid "Value is too large.\n"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:176
+#: src/peerinfo/gnunet-service-peerinfo.c:178
 #, fuzzy, c-format
 msgid "Removing expired address of transport `%s'\n"
 msgstr "Tillgängliga transport(er): %s\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:311
+#: src/peerinfo/gnunet-service-peerinfo.c:313
 #, fuzzy, c-format
 msgid "Failed to parse HELLO in file `%s': %s\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:332
-#: src/peerinfo/gnunet-service-peerinfo.c:363
+#: src/peerinfo/gnunet-service-peerinfo.c:334
+#: src/peerinfo/gnunet-service-peerinfo.c:365
 #, fuzzy, c-format
 msgid "Failed to parse HELLO in file `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:447
+#: src/peerinfo/gnunet-service-peerinfo.c:449
 msgid "# peers known"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:490
+#: src/peerinfo/gnunet-service-peerinfo.c:492
 #, c-format
 msgid ""
 "File `%s' in directory `%s' does not match naming convention. Removed.\n"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:657
+#: src/peerinfo/gnunet-service-peerinfo.c:659
 #, fuzzy, c-format
 msgid "Scanning directory `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:665
+#: src/peerinfo/gnunet-service-peerinfo.c:667
 #, c-format
 msgid "Still no peers found in `%s'!\n"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:1098
+#: src/peerinfo/gnunet-service-peerinfo.c:1100
 #, fuzzy, c-format
 msgid "Cleaning up directory `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:1436
+#: src/peerinfo/gnunet-service-peerinfo.c:1438
 #, c-format
 msgid "Importing HELLOs from `%s'\n"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:1449
+#: src/peerinfo/gnunet-service-peerinfo.c:1451
 msgid "Skipping import of included HELLOs\n"
 msgstr ""
 
-#: src/peerinfo/peerinfo_api.c:218
+#: src/peerinfo/peerinfo_api.c:220
 #, fuzzy
 msgid "Failed to receive response from `PEERINFO' service."
 msgstr "Misslyckades att ta emot svar till \"%s\" meddelande från gnunetd\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:237
+#: src/peerinfo-tool/gnunet-peerinfo.c:239
 #, fuzzy, c-format
 msgid "%sPeer `%s'\n"
 msgstr "Jag är ändpunkt \"%s\".\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:244
+#: src/peerinfo-tool/gnunet-peerinfo.c:246
 #, c-format
 msgid "\tExpires: %s \t %s\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:297
-#: src/rest-plugins/plugin_rest_peerinfo.c:499
+#: src/peerinfo-tool/gnunet-peerinfo.c:299
+#: src/rest-plugins/plugin_rest_peerinfo.c:501
 #, fuzzy, c-format
 msgid "Failure: Cannot convert address to string for peer `%s'\n"
 msgstr "Misslyckades att binda till UDP-port %d.\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:464
+#: src/peerinfo-tool/gnunet-peerinfo.c:466
 #, c-format
 msgid "Failure: Received invalid %s\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:478
+#: src/peerinfo-tool/gnunet-peerinfo.c:480
 #, fuzzy, c-format
 msgid "Failed to write HELLO with %u bytes to file `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:497
+#: src/peerinfo-tool/gnunet-peerinfo.c:499
 #, c-format
 msgid "Wrote %s HELLO containing %u addresses with %u bytes to file `%s'\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:797
+#: src/peerinfo-tool/gnunet-peerinfo.c:799
 #, c-format
 msgid "I am peer `%s'.\n"
 msgstr "Jag är ändpunkt \"%s\".\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:841
+#: src/peerinfo-tool/gnunet-peerinfo.c:843
 msgid "don't resolve host names"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:846
+#: src/peerinfo-tool/gnunet-peerinfo.c:848
 msgid "output only the identity strings"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:850
+#: src/peerinfo-tool/gnunet-peerinfo.c:852
 msgid "include friend-only information"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:855
+#: src/peerinfo-tool/gnunet-peerinfo.c:857
 msgid "output our own identity only"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:860
+#: src/peerinfo-tool/gnunet-peerinfo.c:862
 msgid "list all known peers"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:866
+#: src/peerinfo-tool/gnunet-peerinfo.c:868
 msgid "dump hello to file"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:871
+#: src/peerinfo-tool/gnunet-peerinfo.c:873
 msgid "also output HELLO uri(s)"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:877
+#: src/peerinfo-tool/gnunet-peerinfo.c:879
 msgid "add given HELLO uri to the database"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:895
+#: src/peerinfo-tool/gnunet-peerinfo.c:897
 #, fuzzy
 msgid "Print information about peers."
 msgstr "Skriv ut information om GNUnets motparter."
 
-#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:103
-#: src/transport/gnunet-service-transport_plugins.c:166
+#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:105
+#: src/transport/gnunet-service-transport_plugins.c:168
 #, fuzzy, c-format
 msgid "Starting transport plugins `%s'\n"
 msgstr "Testar transport(er) %s\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:107
-#: src/transport/gnunet-service-transport_plugins.c:171
+#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:109
+#: src/transport/gnunet-service-transport_plugins.c:173
 #, fuzzy, c-format
 msgid "Loading `%s' transport plugin\n"
 msgstr "Testar transport(er) %s\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:127
-#: src/transport/gnunet-service-transport_plugins.c:206
+#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:129
+#: src/transport/gnunet-service-transport_plugins.c:208
 #, fuzzy, c-format
 msgid "Failed to load transport plugin for `%s'\n"
 msgstr "Kunde inte slå upp \"%s\": %s\n"
 
-#: src/peerstore/gnunet-peerstore.c:89
+#: src/peerstore/gnunet-peerstore.c:91
 msgid "peerstore"
 msgstr ""
 
-#: src/peerstore/gnunet-service-peerstore.c:596
+#: src/peerstore/gnunet-service-peerstore.c:598
 #, fuzzy, c-format
 msgid "Could not load database backend `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/peerstore/peerstore_api.c:348
-msgid "timeout"
-msgstr ""
-
-#: src/peerstore/peerstore_api.c:564 src/peerstore/peerstore_api.c:613
+#: src/peerstore/peerstore_api.c:532 src/peerstore/peerstore_api.c:581
 #, fuzzy
 msgid "Unexpected iteration response, this should not happen.\n"
 msgstr "Utdataformat är inte känt, detta bör inte hända.\n"
 
-#: src/peerstore/peerstore_api.c:627
+#: src/peerstore/peerstore_api.c:595
 #, fuzzy
 msgid "Received a malformed response from service."
 msgstr "Mottog ogiltig \"%s\" begäran (storlek %d)\n"
 
-#: src/peerstore/peerstore_api.c:776
+#: src/peerstore/peerstore_api.c:731
 msgid "Received a watch result for a non existing watch.\n"
 msgstr ""
 
-#: src/peerstore/plugin_peerstore_sqlite.c:451
-#: src/psycstore/plugin_psycstore_sqlite.c:280
+#: src/peerstore/plugin_peerstore_sqlite.c:453
 #, fuzzy, c-format
 msgid ""
 "Error executing SQL query: %s\n"
 "  %s\n"
 msgstr "Fel vid skapandet av användare"
 
-#: src/peerstore/plugin_peerstore_sqlite.c:486
-#: src/psycstore/plugin_psycstore_mysql.c:248
-#: src/psycstore/plugin_psycstore_sqlite.c:257
+#: src/peerstore/plugin_peerstore_sqlite.c:488
 #, fuzzy, c-format
 msgid ""
 "Error preparing SQL query: %s\n"
 "  %s\n"
 msgstr "Fel vid skapandet av användare"
 
-#: src/peerstore/plugin_peerstore_sqlite.c:568
+#: src/peerstore/plugin_peerstore_sqlite.c:570
 #, fuzzy, c-format
 msgid "Unable to create indices: %s.\n"
 msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
 
-#: src/pq/pq_prepare.c:82
+#: src/pq/pq_prepare.c:84
 #, fuzzy, c-format
 msgid "PQprepare (`%s' as `%s') failed with error: %s\n"
 msgstr "\"%s\" till \"%s\" misslyckades vid %s:%d med fel: %s\n"
 
-#: src/psycstore/gnunet-service-psycstore.c:247
-#, fuzzy
-msgid "Failed to store membership information!\n"
-msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:269
-#, fuzzy
-msgid "Failed to test membership!\n"
-msgstr "Kunde inte skapa värdnyckel!\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:298
-#, fuzzy
-msgid "Dropping invalid fragment\n"
-msgstr "Ogiltigt argument: \"%s\"\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:309
-#, fuzzy
-msgid "Failed to store fragment\n"
-msgstr "Misslyckades att starta samling.\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:366
-#, fuzzy
-msgid "Failed to get fragment!\n"
-msgstr "Kunde inte skapa värdnyckel!\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:432
-#, fuzzy
-msgid "Failed to get message!\n"
-msgstr "Kunde inte skapa värdnyckel!\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:462
-#, fuzzy
-msgid "Failed to get message fragment!\n"
-msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:492
-#, fuzzy
-msgid "Failed to get master counters!\n"
-msgstr "Kunde inte skapa värdnyckel!\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:673
-#, fuzzy, c-format
-msgid "Failed to begin modifying state: %d\n"
-msgstr "Misslyckades att starta samling.\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:683
-#, fuzzy, c-format
-msgid "Failed to modify state: %d\n"
-msgstr "Misslyckades att starta samling.\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:691
-#, fuzzy
-msgid "Failed to end modifying state!\n"
-msgstr "Misslyckades att starta samling.\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:728
-msgid "Tried to set invalid state variable name!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:742
-#, fuzzy
-msgid "Failed to begin synchronizing state!\n"
-msgstr "Kunde inte skapa värdnyckel!\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:759
-#, fuzzy
-msgid "Failed to end synchronizing state!\n"
-msgstr "Kunde inte skapa värdnyckel!\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:777
-#: src/psycstore/gnunet-service-psycstore.c:793
-#, fuzzy
-msgid "Failed to reset state!\n"
-msgstr "Kunde inte skapa värdnyckel!\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:822
-#: src/psycstore/gnunet-service-psycstore.c:879
-msgid "Tried to get invalid state variable name!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:849
-#: src/psycstore/gnunet-service-psycstore.c:894
-#, fuzzy
-msgid "Failed to get state variable!\n"
-msgstr "Kunde inte skapa värdnyckel!\n"
-
-#: src/psycstore/plugin_psycstore_mysql.c:279
-#, fuzzy
-msgid "Unable to initialize Mysql.\n"
-msgstr "Kunde inte initiera SQLite.\n"
-
-#: src/psycstore/plugin_psycstore_mysql.c:289
-#, fuzzy, c-format
-msgid "Failed to run SQL statement `%s'\n"
-msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
-
-#: src/psycstore/plugin_psycstore_sqlite.c:59
-#, fuzzy, c-format
-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:1922
-msgid "SQLite database running\n"
-msgstr ""
-
-#: src/pt/gnunet-daemon-pt.c:421
+#: src/pt/gnunet-daemon-pt.c:423
 #, fuzzy
 msgid "Failed to pack DNS request.  Dropping.\n"
 msgstr "Misslyckades att skicka HTTP-begäran till värd \"%s\": %s\n"
 
-#: src/pt/gnunet-daemon-pt.c:427
+#: src/pt/gnunet-daemon-pt.c:429
 #, fuzzy
 msgid "# DNS requests mapped to VPN"
 msgstr "# byte mottogs via TCP"
 
-#: src/pt/gnunet-daemon-pt.c:481
+#: src/pt/gnunet-daemon-pt.c:483
 msgid "# DNS records modified"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:665
+#: src/pt/gnunet-daemon-pt.c:667
 msgid "# DNS replies intercepted"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:672
+#: src/pt/gnunet-daemon-pt.c:674
 #, fuzzy
 msgid "Failed to parse DNS request.  Dropping.\n"
 msgstr "Misslyckades att skicka HTTP-begäran till värd \"%s\": %s\n"
 
-#: src/pt/gnunet-daemon-pt.c:710
+#: src/pt/gnunet-daemon-pt.c:712
 #, fuzzy
 msgid "# DNS requests dropped (timeout)"
 msgstr "Nätverksannonsering avstängd i konfigurationen!\n"
 
-#: src/pt/gnunet-daemon-pt.c:766
+#: src/pt/gnunet-daemon-pt.c:768
 #, fuzzy
 msgid "# DNS requests intercepted"
 msgstr "# byte mottogs via TCP"
 
-#: src/pt/gnunet-daemon-pt.c:771
+#: src/pt/gnunet-daemon-pt.c:773
 #, fuzzy
 msgid "# DNS requests dropped (DNS cadet channel down)"
 msgstr "# byte mottogs via TCP"
 
-#: src/pt/gnunet-daemon-pt.c:779
+#: src/pt/gnunet-daemon-pt.c:781
 #, fuzzy
 msgid "# DNS requests dropped (malformed)"
 msgstr "# byte mottogs via TCP"
 
-#: src/pt/gnunet-daemon-pt.c:874
+#: src/pt/gnunet-daemon-pt.c:876
 #, fuzzy
 msgid "# DNS replies received"
 msgstr "# byte mottogs via TCP"
 
-#: src/pt/gnunet-daemon-pt.c:891
+#: src/pt/gnunet-daemon-pt.c:893
 #, fuzzy
 msgid "# DNS replies dropped (too late?)"
 msgstr "# byte mottagna av typen %d"
 
-#: src/pt/gnunet-daemon-pt.c:1217 src/pt/gnunet-daemon-pt.c:1226
-#: src/pt/gnunet-daemon-pt.c:1242 src/pt/gnunet-daemon-pt.c:1251
-#: src/pt/gnunet-daemon-pt.c:1260
+#: src/pt/gnunet-daemon-pt.c:1219 src/pt/gnunet-daemon-pt.c:1228
+#: src/pt/gnunet-daemon-pt.c:1244 src/pt/gnunet-daemon-pt.c:1253
+#: src/pt/gnunet-daemon-pt.c:1262
 #, fuzzy, c-format
 msgid "Failed to connect to %s service.  Exiting.\n"
 msgstr "Misslyckades att initiera tjänsten \"%s\".\n"
 
-#: src/pt/gnunet-daemon-pt.c:1305
+#: src/pt/gnunet-daemon-pt.c:1307
 msgid "Daemon to run to perform IP protocol translation to GNUnet"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:465
+#: src/reclaim/gnunet-reclaim.c:467
 #, fuzzy, c-format
 msgid "Ego is required\n"
 msgstr "%s: flagga \"%s\" är tvetydig\n"
 
-#: src/reclaim/gnunet-reclaim.c:473
+#: src/reclaim/gnunet-reclaim.c:475
 #, c-format
 msgid "Attribute value missing!\n"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:481
+#: src/reclaim/gnunet-reclaim.c:483
 #, fuzzy, c-format
 msgid "Requesting party key is required!\n"
 msgstr "%s: flagga \"%s\" är tvetydig\n"
 
-#: src/reclaim/gnunet-reclaim.c:504
+#: src/reclaim/gnunet-reclaim.c:506
 msgid "Add attribute"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:510
+#: src/reclaim/gnunet-reclaim.c:512
 msgid "Attribute value"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:515
+#: src/reclaim/gnunet-reclaim.c:517
 msgid "Ego"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:520
+#: src/reclaim/gnunet-reclaim.c:522
 msgid "Audience (relying party)"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:524
+#: src/reclaim/gnunet-reclaim.c:526
 msgid "List attributes for Ego"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:529
+#: src/reclaim/gnunet-reclaim.c:531
 msgid "Issue a ticket"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:534
+#: src/reclaim/gnunet-reclaim.c:536
 msgid "Consume a ticket"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:539
+#: src/reclaim/gnunet-reclaim.c:541
 msgid "Revoke a ticket"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:544
+#: src/reclaim/gnunet-reclaim.c:546
 msgid "Type of attribute"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:549
+#: src/reclaim/gnunet-reclaim.c:551
 msgid "Expiration interval of the attribute"
 msgstr ""
 
-#: src/reclaim/reclaim_api.c:434
+#: src/reclaim/reclaim_api.c:436
 #, fuzzy
 msgid "failed to store record\n"
 msgstr "Misslyckades att starta samling.\n"
 
-#: src/regex/gnunet-daemon-regexprofiler.c:265
+#: src/regex/gnunet-daemon-regexprofiler.c:267
 #, fuzzy, c-format
 msgid "%s service is lacking key configuration settings (%s).  Exiting.\n"
 msgstr "GNUnet-konfiguration"
 
-#: src/regex/gnunet-daemon-regexprofiler.c:378
+#: src/regex/gnunet-daemon-regexprofiler.c:380
 msgid "Daemon to announce regular expressions for the peer using cadet."
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1384
+#: src/regex/gnunet-regex-profiler.c:1386
 #, fuzzy
 msgid "No configuration file given. Exiting\n"
 msgstr "använd konfigurationsfil FILNAMN"
 
-#: src/regex/gnunet-regex-profiler.c:1425
-#: src/regex/gnunet-regex-simulation-profiler.c:628
+#: src/regex/gnunet-regex-profiler.c:1427
+#: src/regex/gnunet-regex-simulation-profiler.c:630
 #, c-format
 msgid "No policy directory specified on command line. Exiting.\n"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1431
-#: src/regex/gnunet-regex-simulation-profiler.c:636
+#: src/regex/gnunet-regex-profiler.c:1433
+#: src/regex/gnunet-regex-simulation-profiler.c:638
 #, c-format
 msgid "Specified policies directory does not exist. Exiting.\n"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1438
+#: src/regex/gnunet-regex-profiler.c:1440
 #, fuzzy, c-format
 msgid "No files found in `%s'\n"
 msgstr "%d filer hittades i katalog.\n"
 
-#: src/regex/gnunet-regex-profiler.c:1447
+#: src/regex/gnunet-regex-profiler.c:1449
 msgid "No search strings file given. Exiting.\n"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1467
+#: src/regex/gnunet-regex-profiler.c:1469
 #, fuzzy
 msgid "Error loading search strings. Exiting.\n"
 msgstr "Fel vid lämning av DHT.\n"
 
-#: src/regex/gnunet-regex-profiler.c:1555
+#: src/regex/gnunet-regex-profiler.c:1557
 #, fuzzy
 msgid "name of the file for writing statistics"
 msgstr "Visa värde av alternativet"
 
-#: src/regex/gnunet-regex-profiler.c:1561
+#: src/regex/gnunet-regex-profiler.c:1563
 msgid "wait TIMEOUT before ending the experiment"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1567
+#: src/regex/gnunet-regex-profiler.c:1569
 msgid "directory with policy files"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1574
+#: src/regex/gnunet-regex-profiler.c:1576
 #, fuzzy
 msgid "name of file with input strings"
 msgstr "Visa värde av alternativet"
 
-#: src/regex/gnunet-regex-profiler.c:1580
+#: src/regex/gnunet-regex-profiler.c:1582
 #, fuzzy
 msgid "name of file with hosts' names"
 msgstr "Visa värde av alternativet"
 
-#: src/regex/gnunet-regex-profiler.c:1593
+#: src/regex/gnunet-regex-profiler.c:1595
 msgid "Profiler for regex"
 msgstr ""
 
-#: src/regex/gnunet-regex-simulation-profiler.c:697
+#: src/regex/gnunet-regex-simulation-profiler.c:699
 #, fuzzy
 msgid "name of the table to write DFAs"
 msgstr "Visa värde av alternativet"
 
-#: src/regex/gnunet-regex-simulation-profiler.c:703
+#: src/regex/gnunet-regex-simulation-profiler.c:705
 msgid "maximum path compression length"
 msgstr ""
 
-#: src/regex/gnunet-regex-simulation-profiler.c:717
+#: src/regex/gnunet-regex-simulation-profiler.c:719
 msgid "Profiler for regex library"
 msgstr ""
 
-#: src/regex/regex_api_announce.c:150
+#: src/regex/regex_api_announce.c:152
 #, fuzzy, c-format
 msgid "Regex `%s' is too long!\n"
 msgstr "\"%s\" är inte en fil.\n"
 
-#: src/regex/regex_api_search.c:210
+#: src/regex/regex_api_search.c:212
 #, fuzzy, c-format
 msgid "Search string `%s' is too long!\n"
 msgstr "\"%s\" är inte en fil.\n"
 
-#: src/rest/gnunet-rest-server.c:925
+#: src/rest/gnunet-rest-server.c:927
 msgid "listen on specified port (default: 7776)"
 msgstr ""
 
-#: src/rest/gnunet-rest-server.c:942
+#: src/rest/gnunet-rest-server.c:944
 #, fuzzy
 msgid "GNUnet REST server"
 msgstr "Spåra GNUnets nätverkstopologi."
 
-#: src/rest-plugins/plugin_rest_copying.c:207
+#: src/rest-plugins/plugin_rest_copying.c:209
 #, fuzzy
 msgid "COPYING REST API initialized\n"
 msgstr " Anslutning misslyckades\n"
 
-#: src/rest-plugins/plugin_rest_credential.c:1126
+#: src/rest-plugins/plugin_rest_credential.c:1128
 #, fuzzy
 msgid "GNS REST API initialized\n"
 msgstr " Anslutning misslyckades\n"
 
-#: src/rest-plugins/plugin_rest_gns.c:450
+#: src/rest-plugins/plugin_rest_gns.c:452
 #, fuzzy
 msgid "Gns REST API initialized\n"
 msgstr " Anslutning misslyckades\n"
 
-#: src/rest-plugins/plugin_rest_identity.c:1295
+#: src/rest-plugins/plugin_rest_identity.c:1297
 #, fuzzy
 msgid "Identity REST API initialized\n"
 msgstr " Anslutning misslyckades\n"
 
-#: src/rest-plugins/plugin_rest_namestore.c:1077
+#: src/rest-plugins/plugin_rest_namestore.c:1079
 #, fuzzy
 msgid "Namestore REST API initialized\n"
 msgstr " Anslutning misslyckades\n"
 
-#: src/rest-plugins/plugin_rest_openid_connect.c:2135
+#: src/rest-plugins/plugin_rest_openid_connect.c:2245
 #: src/rest-plugins/plugin_rest_reclaim.c:1079
 #, fuzzy
 msgid "Identity Provider REST API initialized\n"
 msgstr " Anslutning misslyckades\n"
 
-#: src/rest-plugins/plugin_rest_peerinfo.c:794
+#: src/rest-plugins/plugin_rest_peerinfo.c:796
 #, fuzzy
 msgid "Peerinfo REST API initialized\n"
 msgstr " Anslutning misslyckades\n"
 
-#: src/revocation/gnunet-revocation.c:127
+#: src/revocation/gnunet-revocation.c:129
 #, fuzzy, c-format
 msgid "Key `%s' is valid\n"
 msgstr "Formatet på pseudonym \"%s\" är ogiltig.\n"
 
-#: src/revocation/gnunet-revocation.c:132
+#: src/revocation/gnunet-revocation.c:134
 #, fuzzy, c-format
 msgid "Key `%s' has been revoked\n"
 msgstr "Tjänst borttagen.\n"
 
-#: src/revocation/gnunet-revocation.c:138
+#: src/revocation/gnunet-revocation.c:140
 #, fuzzy
 msgid "Internal error\n"
 msgstr "Okänt fel.\n"
 
-#: src/revocation/gnunet-revocation.c:164
+#: src/revocation/gnunet-revocation.c:166
 #, c-format
 msgid "Key for ego `%s' is still valid, revocation failed (!)\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:169
+#: src/revocation/gnunet-revocation.c:171
 #, fuzzy
 msgid "Revocation failed (!)\n"
 msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n"
 
-#: src/revocation/gnunet-revocation.c:174
+#: src/revocation/gnunet-revocation.c:176
 #, c-format
 msgid "Key for ego `%s' has been successfully revoked\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:179
+#: src/revocation/gnunet-revocation.c:181
 msgid "Revocation successful.\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:184
+#: src/revocation/gnunet-revocation.c:186
 msgid "Internal error, key revocation might have failed\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:321
+#: src/revocation/gnunet-revocation.c:323
 #, c-format
 msgid "Revocation certificate for `%s' stored in `%s'\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:350
+#: src/revocation/gnunet-revocation.c:352
 #, fuzzy, c-format
 msgid "Ego `%s' not found.\n"
 msgstr "\"%s\" misslyckades: tabell hittades inte!\n"
 
-#: src/revocation/gnunet-revocation.c:371
+#: src/revocation/gnunet-revocation.c:373
 #, c-format
 msgid "Error: revocation certificate in `%s' is not for `%s'\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:391
+#: src/revocation/gnunet-revocation.c:393
 msgid "Revocation certificate ready\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:401
+#: src/revocation/gnunet-revocation.c:403
 msgid "Revocation certificate not ready, calculating proof of work\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:435 src/social/gnunet-social.c:1178
+#: src/revocation/gnunet-revocation.c:437
 #, fuzzy, c-format
 msgid "Public key `%s' malformed\n"
 msgstr "Ogiltigt argument: \"%s\"\n"
 
-#: src/revocation/gnunet-revocation.c:448
+#: src/revocation/gnunet-revocation.c:450
 msgid ""
 "Testing and revoking at the same time is not allowed, only executing test.\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:468
+#: src/revocation/gnunet-revocation.c:470
 #, fuzzy
 msgid "No filename to store revocation certificate given.\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/revocation/gnunet-revocation.c:489
+#: src/revocation/gnunet-revocation.c:491
 #, fuzzy, c-format
 msgid "Failed to read revocation certificate from `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/revocation/gnunet-revocation.c:514
+#: src/revocation/gnunet-revocation.c:516
 #, fuzzy
 msgid "No action specified. Nothing to do.\n"
 msgstr "Inget tabellnamn angivet, använder \"%s\".\n"
 
-#: src/revocation/gnunet-revocation.c:533
+#: src/revocation/gnunet-revocation.c:535
 msgid "use NAME for the name of the revocation file"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:539
+#: src/revocation/gnunet-revocation.c:541
 msgid ""
 "revoke the private key associated for the the private key associated with "
 "the ego NAME "
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:544
+#: src/revocation/gnunet-revocation.c:546
 msgid "actually perform revocation, otherwise we just do the precomputation"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:550
+#: src/revocation/gnunet-revocation.c:552
 msgid "test if the public key KEY has been revoked"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:457
+#: src/revocation/gnunet-service-revocation.c:459
 #, fuzzy
 msgid "# unsupported revocations received via set union"
 msgstr "# byte mottogs via TCP"
 
-#: src/revocation/gnunet-service-revocation.c:466
+#: src/revocation/gnunet-service-revocation.c:468
 #, fuzzy
 msgid "# revocation messages received via set union"
 msgstr "# krypterade PONG-meddelanden mottagna"
 
-#: src/revocation/gnunet-service-revocation.c:471
+#: src/revocation/gnunet-service-revocation.c:473
 #, c-format
 msgid "Error computing revocation set union with %s\n"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:475
+#: src/revocation/gnunet-service-revocation.c:477
 #, fuzzy
 msgid "# revocation set unions failed"
 msgstr "# sessionsnycklar accepterade"
 
-#: src/revocation/gnunet-service-revocation.c:484
+#: src/revocation/gnunet-service-revocation.c:486
 #, fuzzy
 msgid "# revocation set unions completed"
 msgstr "# klartext PONG-meddelanden mottagna"
 
-#: src/revocation/gnunet-service-revocation.c:523
+#: src/revocation/gnunet-service-revocation.c:525
 msgid "SET service crashed, terminating revocation service\n"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:865
+#: src/revocation/gnunet-service-revocation.c:867
 #, fuzzy
 msgid "Could not open revocation database file!"
 msgstr "Kunde inte ansluta till gnunetd.\n"
 
-#: src/rps/gnunet-rps.c:258
+#: src/rps/gnunet-rps.c:260
 msgid "Seed a PeerID"
 msgstr ""
 
-#: src/rps/gnunet-rps.c:262
+#: src/rps/gnunet-rps.c:264
 msgid "Get updates of view (0 for infinite updates)"
 msgstr ""
 
-#: src/rps/gnunet-rps.c:266
+#: src/rps/gnunet-rps.c:268
 msgid "Get peers from biased stream"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2770
+#: src/rps/gnunet-rps-profiler.c:2959
 msgid "duration of the profiling"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2776
+#: src/rps/gnunet-rps-profiler.c:2965
 #, fuzzy
 msgid "timeout for the profiling"
 msgstr "ange prioritet för innehållet"
 
-#: src/rps/gnunet-rps-profiler.c:2782
+#: src/rps/gnunet-rps-profiler.c:2971
 #, fuzzy
 msgid "number of PeerIDs to request"
 msgstr "antal iterationer"
 
-#: src/rps/gnunet-rps-profiler.c:2797
+#: src/rps/gnunet-rps-profiler.c:2986
 #, fuzzy
 msgid "Measure quality and performance of the RPS service."
 msgstr "Kan inte tillgå tjänsten"
 
-#: src/scalarproduct/gnunet-scalarproduct.c:218
+#: src/scalarproduct/gnunet-scalarproduct.c:220
 #, fuzzy
 msgid "You must specify at least one message ID to check!\n"
 msgstr "Du måste ange en lista av filer att lägga in.\n"
 
-#: src/scalarproduct/gnunet-scalarproduct.c:225
+#: src/scalarproduct/gnunet-scalarproduct.c:227
 msgid "This program needs a session identifier for comparing vectors.\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:238
+#: src/scalarproduct/gnunet-scalarproduct.c:240
 #, c-format
 msgid ""
 "Tried to set initiator mode, as peer ID was given. However, `%s' is not a "
 "valid peer identifier.\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:256
+#: src/scalarproduct/gnunet-scalarproduct.c:258
 msgid "Need elements to compute the scalarproduct, got none.\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:278
+#: src/scalarproduct/gnunet-scalarproduct.c:280
 #, fuzzy, c-format
 msgid "Malformed input, could not parse `%s'\n"
 msgstr "Misslyckades att starta samling.\n"
 
-#: src/scalarproduct/gnunet-scalarproduct.c:296
+#: src/scalarproduct/gnunet-scalarproduct.c:298
 #, fuzzy, c-format
 msgid "Could not convert `%s' to int64_t.\n"
 msgstr "Kunde inte ansluta till gnunetd.\n"
 
-#: src/scalarproduct/gnunet-scalarproduct.c:323
+#: src/scalarproduct/gnunet-scalarproduct.c:325
 #, c-format
 msgid "Failed to initiate computation, were all keys unique?\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:349
-#: src/scalarproduct/gnunet-scalarproduct.c:355
+#: src/scalarproduct/gnunet-scalarproduct.c:351
+#: src/scalarproduct/gnunet-scalarproduct.c:357
 msgid ""
 "A comma separated list of elements to compare as vector with our remote peer."
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:361
+#: src/scalarproduct/gnunet-scalarproduct.c:363
 msgid ""
 "[Optional] peer to calculate our scalarproduct with. If this parameter is "
 "not given, the service will wait for a remote peer to compute the request."
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:367
+#: src/scalarproduct/gnunet-scalarproduct.c:369
 msgid "Transaction ID shared with peer."
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:377
+#: src/scalarproduct/gnunet-scalarproduct.c:379
 msgid "Calculate the Vectorproduct with a GNUnet peer."
 msgstr ""
 
-#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1399
-#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1343
-#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1170
-#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1061
+#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1401
+#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1345
+#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1172
+#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1063
 #, fuzzy
 msgid "Connect to CADET failed\n"
 msgstr " Anslutning misslyckades (fel?)\n"
 
-#: src/scalarproduct/scalarproduct_api.c:183
+#: src/scalarproduct/scalarproduct_api.c:185
 msgid "Keys given to SCALARPRODUCT not unique!\n"
 msgstr ""
 
-#: src/secretsharing/gnunet-secretsharing-profiler.c:614
+#: src/secretsharing/gnunet-secretsharing-profiler.c:616
 msgid "dkg start delay"
 msgstr ""
 
-#: src/secretsharing/gnunet-secretsharing-profiler.c:620
+#: src/secretsharing/gnunet-secretsharing-profiler.c:622
 msgid "dkg timeout"
 msgstr ""
 
-#: src/secretsharing/gnunet-secretsharing-profiler.c:626
+#: src/secretsharing/gnunet-secretsharing-profiler.c:628
 msgid "threshold"
 msgstr ""
 
-#: src/secretsharing/gnunet-secretsharing-profiler.c:631
+#: src/secretsharing/gnunet-secretsharing-profiler.c:633
 msgid "also profile decryption"
 msgstr ""
 
-#: src/set/gnunet-service-set.c:2004
+#: src/set/gnunet-service-set.c:2005
 #, fuzzy
 msgid "Could not connect to CADET service\n"
 msgstr "Kunde inte ansluta till gnunetd.\n"
 
-#: src/set/gnunet-set-ibf-profiler.c:250
+#: src/set/gnunet-set-ibf-profiler.c:252
 #, fuzzy
 msgid "number of element in set A-B"
 msgstr "antal iterationer"
 
-#: src/set/gnunet-set-ibf-profiler.c:256
+#: src/set/gnunet-set-ibf-profiler.c:258
 #, fuzzy
 msgid "number of element in set B-A"
 msgstr "antal iterationer"
 
-#: src/set/gnunet-set-ibf-profiler.c:262
+#: src/set/gnunet-set-ibf-profiler.c:264
 msgid "number of common elements in A and B"
 msgstr ""
 
-#: src/set/gnunet-set-ibf-profiler.c:268
+#: src/set/gnunet-set-ibf-profiler.c:270
 msgid "hash num"
 msgstr ""
 
-#: src/set/gnunet-set-ibf-profiler.c:274
+#: src/set/gnunet-set-ibf-profiler.c:276
 msgid "ibf size"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:442
+#: src/set/gnunet-set-profiler.c:444
 msgid "use byzantine mode"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:448
+#: src/set/gnunet-set-profiler.c:450
 msgid "force sending full set"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:454
+#: src/set/gnunet-set-profiler.c:456
 msgid "number delta operation"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:466
+#: src/set/gnunet-set-profiler.c:468
 msgid "operation to execute"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:472
+#: src/set/gnunet-set-profiler.c:474
 msgid "element size"
 msgstr ""
 
-#: src/social/gnunet-social.c:1164
-#, fuzzy
-msgid "--place missing or invalid.\n"
-msgstr "Ogiltigt argument: \"%s\"\n"
-
-#: src/social/gnunet-social.c:1215
-msgid "assign --name in state to --data"
-msgstr ""
-
-#: src/social/gnunet-social.c:1220
-msgid "say good-bye and leave somebody else's place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1225
-msgid "create a place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1230
-msgid "destroy a place we were hosting"
-msgstr ""
-
-#: src/social/gnunet-social.c:1235
-msgid "enter somebody else's place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1241
-msgid "find state matching name prefix"
-msgstr ""
-
-#: src/social/gnunet-social.c:1246
-msgid "replay history of messages up to the given --limit"
-msgstr ""
-
-#: src/social/gnunet-social.c:1251
-msgid "reconnect to a previously created place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1256
-msgid "publish something to a place we are hosting"
-msgstr ""
-
-#: src/social/gnunet-social.c:1261
-msgid "reconnect to a previously entered place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1266
-msgid "search for state matching exact name"
-msgstr ""
-
-#: src/social/gnunet-social.c:1271
-msgid "submit something to somebody's place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1276
-msgid "list of egos and subscribed places"
-msgstr ""
-
-#: src/social/gnunet-social.c:1281
-msgid "extract and replay history between message IDs --start and --until"
-msgstr ""
-
-#: src/social/gnunet-social.c:1290
-msgid "application ID to use when connecting"
-msgstr ""
-
-#: src/social/gnunet-social.c:1296
-msgid "message body or state value"
-msgstr ""
-
-#: src/social/gnunet-social.c:1302
-#, fuzzy
-msgid "name or public key of ego"
-msgstr "Ogiltigt argument: \"%s\"\n"
-
-#: src/social/gnunet-social.c:1307
-#, fuzzy
-msgid "wait for incoming messages"
-msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
-
-#: src/social/gnunet-social.c:1313
-#, fuzzy
-msgid "GNS name"
-msgstr "Visa _namn"
-
-#: src/social/gnunet-social.c:1319
-msgid "peer ID for --guest-enter"
-msgstr ""
-
-#: src/social/gnunet-social.c:1325
-msgid "name (key) to query from state"
-msgstr ""
-
-#: src/social/gnunet-social.c:1331
-#, fuzzy
-msgid "method name"
-msgstr "Visa _namn"
-
-#: src/social/gnunet-social.c:1337
-#, fuzzy
-msgid "number of messages to replay from history"
-msgstr "antal meddelanden att använda per iteration"
-
-#: src/social/gnunet-social.c:1343
-msgid "key address of place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1349
-msgid "start message ID for history replay"
-msgstr ""
-
-#: src/social/gnunet-social.c:1354
-msgid "respond to entry requests by admitting all guests"
-msgstr ""
-
-#: src/social/gnunet-social.c:1360
-msgid "end message ID for history replay"
-msgstr ""
-
-#: src/social/gnunet-social.c:1365
-msgid "respond to entry requests by refusing all guests"
-msgstr ""
-
-#: src/social/gnunet-social.c:1375
-msgid ""
-"gnunet-social - Interact with the social service: enter/leave, send/receive "
-"messages, access history and state.\n"
-msgstr ""
-
-#: src/sq/sq.c:52
+#: src/sq/sq.c:54
 #, c-format
 msgid "Failure to bind %u-th SQL parameter\n"
 msgstr ""
 
-#: src/sq/sq.c:59
+#: src/sq/sq.c:61
 msgid "Failure in sqlite3_reset (!)\n"
 msgstr ""
 
-#: src/sq/sq.c:137
+#: src/sq/sq.c:139
 #, fuzzy, c-format
 msgid "Failed to reset sqlite statement with error: %s\n"
 msgstr "\"%s\" misslyckades för fil \"%s\" vid %s:%d med fel: %s\n"
 
-#: src/statistics/gnunet-service-statistics.c:336
+#: src/statistics/gnunet-service-statistics.c:338
 #, fuzzy, c-format
 msgid "Wrote %llu bytes of statistics to `%s'\n"
 msgstr "Ladda ner filer från GNUnet."
 
-#: src/statistics/gnunet-service-statistics.c:1084
+#: src/statistics/gnunet-service-statistics.c:1086
 #, fuzzy, c-format
 msgid "Loading %llu bytes of statistics from `%s'\n"
 msgstr "Ladda ner filer från GNUnet."
 
-#: src/statistics/gnunet-statistics.c:407
-#: src/statistics/gnunet-statistics.c:448
+#: src/statistics/gnunet-statistics.c:409
+#: src/statistics/gnunet-statistics.c:450
 #, fuzzy
 msgid "Failed to obtain statistics.\n"
 msgstr "Misslyckades att binda till UDP-port %d.\n"
 
-#: src/statistics/gnunet-statistics.c:410
-#: src/statistics/gnunet-statistics.c:451
+#: src/statistics/gnunet-statistics.c:412
+#: src/statistics/gnunet-statistics.c:453
 #, fuzzy, c-format
 msgid "Failed to obtain statistics from host `%s:%llu'\n"
 msgstr "Misslyckades att binda till UDP-port %d.\n"
 
-#: src/statistics/gnunet-statistics.c:526
+#: src/statistics/gnunet-statistics.c:528
 msgid "Missing argument: subsystem \n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:534
+#: src/statistics/gnunet-statistics.c:536
 msgid "Missing argument: name\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:577
+#: src/statistics/gnunet-statistics.c:579
 #, c-format
 msgid "No subsystem or name given\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:592
+#: src/statistics/gnunet-statistics.c:594
 #, fuzzy, c-format
 msgid "Failed to initialize watch routine\n"
 msgstr "Misslyckades att initiera tjänsten \"%s\".\n"
 
-#: src/statistics/gnunet-statistics.c:727
+#: src/statistics/gnunet-statistics.c:729
 #, fuzzy, c-format
 msgid "Invalid argument `%s'\n"
 msgstr "Ogiltigt argument: \"%s\"\n"
 
-#: src/statistics/gnunet-statistics.c:745
+#: src/statistics/gnunet-statistics.c:747
 #, fuzzy, c-format
 msgid "A port is required to connect to host `%s'\n"
 msgstr "Kan inte ansluta till %u.%u.%u.%u:%u: %s\n"
 
-#: src/statistics/gnunet-statistics.c:753
+#: src/statistics/gnunet-statistics.c:755
 #, c-format
 msgid "A port has to be between 1 and 65535 to connect to host `%s'\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:784
+#: src/statistics/gnunet-statistics.c:786
 #, c-format
 msgid "Not able to watch testbed nodes (yet - feel free to implement)\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:817
+#: src/statistics/gnunet-statistics.c:819
 msgid "limit output to statistics for the given NAME"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:822
+#: src/statistics/gnunet-statistics.c:824
 msgid "make the value being set persistent"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:828
+#: src/statistics/gnunet-statistics.c:830
 msgid "limit output to the given SUBSYSTEM"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:834
+#: src/statistics/gnunet-statistics.c:836
 msgid "use as csv separator"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:840
+#: src/statistics/gnunet-statistics.c:842
 msgid "path to the folder containing the testbed data"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:845
+#: src/statistics/gnunet-statistics.c:847
 msgid "just print the statistics value"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:850
+#: src/statistics/gnunet-statistics.c:852
 msgid "watch value continuously"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:856
+#: src/statistics/gnunet-statistics.c:858
 msgid "connect to remote host"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:862
+#: src/statistics/gnunet-statistics.c:864
 msgid "port for remote host"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:879
+#: src/statistics/gnunet-statistics.c:881
 msgid "Print statistics about GNUnet operations."
 msgstr "Skriv ut statistik om GNUnet-operationer."
 
-#: src/statistics/statistics_api.c:751
+#: src/statistics/statistics_api.c:753
 #, fuzzy
 msgid "Could not save some persistent statistics\n"
 msgstr "Kunde inte skapa värdnyckel!\n"
 
-#: src/testbed/generate-underlay-topology.c:223
+#: src/testbed/generate-underlay-topology.c:225
 #, fuzzy
 msgid "Need at least 2 arguments\n"
 msgstr "Du måste ange en och endast en fil att avindexera.\n"
 
-#: src/testbed/generate-underlay-topology.c:228
+#: src/testbed/generate-underlay-topology.c:230
 msgid "Database filename missing\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:235
+#: src/testbed/generate-underlay-topology.c:237
 msgid "Topology string missing\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:240
+#: src/testbed/generate-underlay-topology.c:242
 #, fuzzy, c-format
 msgid "Invalid topology: %s\n"
 msgstr "Ogiltigt argument: \"%s\"\n"
 
-#: src/testbed/generate-underlay-topology.c:253
+#: src/testbed/generate-underlay-topology.c:255
 #, c-format
 msgid "An argument is missing for given topology `%s'\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:259
+#: src/testbed/generate-underlay-topology.c:261
 #, fuzzy, c-format
 msgid "Invalid argument `%s' given as topology argument\n"
 msgstr "Ogiltigt argument: \"%s\"\n"
 
-#: src/testbed/generate-underlay-topology.c:267
+#: src/testbed/generate-underlay-topology.c:269
 #, c-format
 msgid "Filename argument missing for topology `%s'\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:281
+#: src/testbed/generate-underlay-topology.c:283
 #, c-format
 msgid "Second argument for topology `%s' is missing\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:287
+#: src/testbed/generate-underlay-topology.c:289
 #, fuzzy, c-format
 msgid "Invalid argument `%s'; expecting unsigned int\n"
 msgstr "Ogiltigt argument: \"%s\"\n"
 
-#: src/testbed/generate-underlay-topology.c:340
-#: src/testbed/gnunet-testbed-profiler.c:281
+#: src/testbed/generate-underlay-topology.c:342
+#: src/testbed/gnunet-testbed-profiler.c:283
 msgid "create COUNT number of peers"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:350
+#: src/testbed/generate-underlay-topology.c:352
 msgid ""
 "Generates SQLite3 database representing a given underlay topology.\n"
 "Usage: gnunet-underlay-topology [OPTIONS] db-filename TOPO [TOPOOPTS]\n"
@@ -6767,83 +6560,83 @@ msgid ""
 "content/topology-file-format\n"
 msgstr ""
 
-#: src/testbed/gnunet-daemon-latency-logger.c:313
+#: src/testbed/gnunet-daemon-latency-logger.c:315
 msgid "Daemon to log latency values of connections to neighbours"
 msgstr ""
 
-#: src/testbed/gnunet-daemon-testbed-blacklist.c:247
+#: src/testbed/gnunet-daemon-testbed-blacklist.c:249
 msgid ""
 "Daemon to restrict incoming transport layer connections during testbed "
 "deployments"
 msgstr ""
 
-#: src/testbed/gnunet-daemon-testbed-underlay.c:231 src/testing/list-keys.c:46
-#: src/testing/testing.c:286 src/util/gnunet-ecc.c:310
+#: src/testbed/gnunet-daemon-testbed-underlay.c:233 src/testing/list-keys.c:46
+#: src/testing/testing.c:288 src/util/gnunet-ecc.c:312
 #, c-format
 msgid "Incorrect hostkey file format: %s\n"
 msgstr ""
 
-#: src/testbed/gnunet-daemon-testbed-underlay.c:469
+#: src/testbed/gnunet-daemon-testbed-underlay.c:471
 msgid "Daemon to restrict underlay network in testbed deployments"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_cpustatus.c:726
+#: src/testbed/gnunet-service-testbed_cpustatus.c:728
 #, c-format
 msgid ""
 "Cannot open %s for writing load statistics.  Not logging load statistics\n"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1157
+#: src/testbed/gnunet-service-testbed_peers.c:1159
 #, fuzzy, c-format
 msgid "%s is stopped"
 msgstr "# byte krypterade"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1159
+#: src/testbed/gnunet-service-testbed_peers.c:1161
 #, fuzzy, c-format
 msgid "%s is starting"
 msgstr "\"%s\" startar\n"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1161
+#: src/testbed/gnunet-service-testbed_peers.c:1163
 #, c-format
 msgid "%s is stopping"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1163
+#: src/testbed/gnunet-service-testbed_peers.c:1165
 #, fuzzy, c-format
 msgid "%s is starting already"
 msgstr "\"%s\" startar\n"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1165
+#: src/testbed/gnunet-service-testbed_peers.c:1167
 #, c-format
 msgid "%s is stopping already"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1167
+#: src/testbed/gnunet-service-testbed_peers.c:1169
 #, c-format
 msgid "%s is started already"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1169
+#: src/testbed/gnunet-service-testbed_peers.c:1171
 #, c-format
 msgid "%s is stopped already"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1171
+#: src/testbed/gnunet-service-testbed_peers.c:1173
 #, fuzzy, c-format
 msgid "%s service is not known to ARM"
 msgstr "\"%s\" är inte en fil.\n"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1173
+#: src/testbed/gnunet-service-testbed_peers.c:1175
 #, fuzzy, c-format
 msgid "%s service failed to start"
 msgstr "Misslyckades att starta samling.\n"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1175
+#: src/testbed/gnunet-service-testbed_peers.c:1177
 #, c-format
 msgid "%s service can't be started because ARM is shutting down"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1177
+#: src/testbed/gnunet-service-testbed_peers.c:1179
 #, c-format
 msgid "%.s Unknown result code."
 msgstr ""
@@ -6858,176 +6651,176 @@ msgstr "Väntar på att motparter ska ansluta (%u iterationer kvar)...\n"
 msgid "Spawning process `%s'\n"
 msgstr "Startade samling \"%s\".\n"
 
-#: src/testbed/gnunet-testbed-profiler.c:287
+#: src/testbed/gnunet-testbed-profiler.c:289
 msgid "tolerate COUNT number of continious timeout failures"
 msgstr ""
 
-#: src/testbed/gnunet-testbed-profiler.c:292
+#: src/testbed/gnunet-testbed-profiler.c:294
 msgid ""
 "run profiler in non-interactive mode where upon testbed setup the profiler "
 "does not wait for a keystroke but continues to run until a termination "
 "signal is received"
 msgstr ""
 
-#: src/testbed/testbed_api.c:408
+#: src/testbed/testbed_api.c:410
 #, fuzzy, c-format
 msgid "Adding host %u failed with error: %s\n"
 msgstr "\"%s\" misslyckades vid %s:%d med fel: %s\n"
 
-#: src/testbed/testbed_api_hosts.c:411
+#: src/testbed/testbed_api_hosts.c:413
 #, fuzzy, c-format
 msgid "Hosts file %s not found\n"
 msgstr "\"%s\" misslyckades: tabell hittades inte!\n"
 
-#: src/testbed/testbed_api_hosts.c:419
+#: src/testbed/testbed_api_hosts.c:421
 #, c-format
 msgid "Hosts file %s has no data\n"
 msgstr ""
 
-#: src/testbed/testbed_api_hosts.c:426
+#: src/testbed/testbed_api_hosts.c:428
 #, c-format
 msgid "Hosts file %s cannot be read\n"
 msgstr ""
 
-#: src/testbed/testbed_api_hosts.c:567
+#: src/testbed/testbed_api_hosts.c:569
 #, c-format
 msgid "The function %s is only available when compiled with (--with-ll)\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:816
+#: src/testbed/testbed_api_testbed.c:818
 msgid "Linking controllers failed. Exiting"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:984
+#: src/testbed/testbed_api_testbed.c:986
 #, c-format
 msgid "Host registration failed for a host. Error: %s\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1050
+#: src/testbed/testbed_api_testbed.c:1052
 msgid "Controller crash detected. Shutting down.\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1139
+#: src/testbed/testbed_api_testbed.c:1141
 #, c-format
 msgid "Host %s cannot start testbed\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1143
+#: src/testbed/testbed_api_testbed.c:1145
 msgid "Testbed cannot be started on localhost\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1181
+#: src/testbed/testbed_api_testbed.c:1183
 msgid "Cannot start the master controller"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1199
+#: src/testbed/testbed_api_testbed.c:1201
 msgid "Shutting down testbed due to timeout while setup.\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1259
+#: src/testbed/testbed_api_testbed.c:1261
 msgid "No hosts loaded from LoadLeveler. Need at least one host\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1271
+#: src/testbed/testbed_api_testbed.c:1273
 msgid "No hosts loaded. Need at least one host\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1295
+#: src/testbed/testbed_api_testbed.c:1297
 msgid "Specified topology must be supported by testbed"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1345
+#: src/testbed/testbed_api_testbed.c:1347
 #, c-format
 msgid ""
 "Maximum number of edges a peer can have in a scale free topology cannot be "
 "more than %u.  Given `%s = %llu'"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1361
+#: src/testbed/testbed_api_testbed.c:1363
 #, c-format
 msgid ""
 "The number of edges that can established when adding a new node to scale "
 "free topology cannot be more than %u.  Given `%s = %llu'"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1026
+#: src/testbed/testbed_api_topology.c:1028
 #, fuzzy, c-format
 msgid "Topology file %s not found\n"
 msgstr "\"%s\" misslyckades: tabell hittades inte!\n"
 
-#: src/testbed/testbed_api_topology.c:1034
+#: src/testbed/testbed_api_topology.c:1036
 #, c-format
 msgid "Topology file %s has no data\n"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1042
+#: src/testbed/testbed_api_topology.c:1044
 #, c-format
 msgid "Topology file %s cannot be read\n"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1064
+#: src/testbed/testbed_api_topology.c:1066
 #, fuzzy, c-format
 msgid "Failed to read peer index from toology file: %s"
 msgstr "Kunde inte tolka konfigurationsfil \"%s\".\n"
 
-#: src/testbed/testbed_api_topology.c:1073
-#: src/testbed/testbed_api_topology.c:1097
+#: src/testbed/testbed_api_topology.c:1075
+#: src/testbed/testbed_api_topology.c:1099
 #, c-format
 msgid "Value in given topology file: %s out of range\n"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1079
-#: src/testbed/testbed_api_topology.c:1103
+#: src/testbed/testbed_api_topology.c:1081
+#: src/testbed/testbed_api_topology.c:1105
 #, fuzzy, c-format
 msgid "Failed to read peer index from topology file: %s"
 msgstr "Kunde inte tolka konfigurationsfil \"%s\".\n"
 
-#: src/testbed/testbed_api_topology.c:1085
-#: src/testbed/testbed_api_topology.c:1109
+#: src/testbed/testbed_api_topology.c:1087
+#: src/testbed/testbed_api_topology.c:1111
 msgid "Topology file needs more peers than given ones\n"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1143
+#: src/testbed/testbed_api_topology.c:1145
 #, fuzzy, c-format
 msgid "Ignoring to connect peer %u to peer %u\n"
 msgstr "Kan inte ansluta till %u.%u.%u.%u:%u: %s\n"
 
-#: src/testing/gnunet-testing.c:171
+#: src/testing/gnunet-testing.c:173
 #, fuzzy, c-format
 msgid "Could not extract hostkey %u (offset too large?)\n"
 msgstr "Kunde inte skapa värdnyckel!\n"
 
-#: src/testing/gnunet-testing.c:251
+#: src/testing/gnunet-testing.c:253
 #, c-format
 msgid "Unknown command, use 'q' to quit or 'r' to restart peer\n"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:352
+#: src/testing/gnunet-testing.c:354
 #, fuzzy
 msgid "create unique configuration files"
 msgstr "skriv ut ett värde från konfigurationsfilen till standard ut"
 
-#: src/testing/gnunet-testing.c:357
+#: src/testing/gnunet-testing.c:359
 msgid "extract hostkey file from pre-computed hostkey list"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:363
+#: src/testing/gnunet-testing.c:365
 #, fuzzy
 msgid ""
 "number of unique configuration files to create, or number of the hostkey to "
 "extract"
 msgstr "skriv ut ett värde från konfigurationsfilen till standard ut"
 
-#: src/testing/gnunet-testing.c:370
+#: src/testing/gnunet-testing.c:372
 #, fuzzy
 msgid "configuration template"
 msgstr "Konfigurationsfil \"%s\" skapad.\n"
 
-#: src/testing/gnunet-testing.c:376
+#: src/testing/gnunet-testing.c:378
 msgid "run the given service, wait on stdin for 'r' (restart) or 'q' (quit)"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:389
+#: src/testing/gnunet-testing.c:391
 msgid "Command line tool to access the testing library"
 msgstr ""
 
@@ -7035,1590 +6828,1614 @@ msgstr ""
 msgid "list COUNT number of keys"
 msgstr ""
 
-#: src/testing/testing.c:270
+#: src/testing/testing.c:272
 #, c-format
 msgid "Hostkeys file not found: %s\n"
 msgstr ""
 
-#: src/testing/testing.c:713
+#: src/testing/testing.c:715
 #, fuzzy, c-format
 msgid "Key number %u does not exist\n"
 msgstr "antal meddelanden att använda per iteration"
 
-#: src/testing/testing.c:1157
+#: src/testing/testing.c:1159
 #, c-format
 msgid ""
 "You attempted to create a testbed with more than %u hosts.  Please "
 "precompute more hostkeys first.\n"
 msgstr ""
 
-#: src/testing/testing.c:1166
+#: src/testing/testing.c:1168
 #, fuzzy, c-format
 msgid "Failed to initialize hostkey for peer %u\n"
 msgstr "Misslyckades att initiera tjänsten \"%s\".\n"
 
-#: src/testing/testing.c:1176
+#: src/testing/testing.c:1178
 #, fuzzy
 msgid "PRIVATE_KEY option in PEER section missing in configuration\n"
 msgstr "Inga applikationer definierade i konfiguration!\n"
 
-#: src/testing/testing.c:1189
+#: src/testing/testing.c:1191
 #, fuzzy
 msgid "Failed to create configuration for peer (not enough free ports?)\n"
 msgstr "Kunde inte komma åt namnrymdsinformation.\n"
 
-#: src/testing/testing.c:1203
+#: src/testing/testing.c:1205
 #, fuzzy, c-format
 msgid "Cannot open hostkey file `%s': %s\n"
 msgstr "Kunde inte skapa värdnyckel!\n"
 
-#: src/testing/testing.c:1215
+#: src/testing/testing.c:1217
 #, fuzzy, c-format
 msgid "Failed to write hostkey file for peer %u: %s\n"
 msgstr "Kunde inte skapa användarkonto:"
 
-#: src/testing/testing.c:1240
+#: src/testing/testing.c:1242
 #, fuzzy, c-format
 msgid "Failed to write configuration file `%s' for peer %u: %s\n"
 msgstr "Kunde inte spara konfigurationsfil \"%s\":"
 
-#: src/testing/testing.c:1342
+#: src/testing/testing.c:1344
 #, fuzzy, c-format
 msgid "Failed to start `%s': %s\n"
 msgstr "Fel vid %s:%d.\n"
 
-#: src/testing/testing.c:1645
+#: src/testing/testing.c:1647
 #, fuzzy, c-format
 msgid "Failed to load configuration from %s\n"
 msgstr "Kunde inte spara konfigurationsfil \"%s\":"
 
-#: src/topology/friends.c:124
+#: src/topology/friends.c:126
 #, fuzzy, c-format
 msgid "Syntax error in FRIENDS file at offset %llu, skipping bytes `%.*s'.\n"
 msgstr "Syntaxfel i konfigurationsfil \"%s\" på rad %d.\n"
 
-#: src/topology/friends.c:178
+#: src/topology/friends.c:180
 #, c-format
 msgid "Directory for file `%s' does not seem to be writable.\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:228
+#: src/topology/gnunet-daemon-topology.c:230
 msgid "# peers blacklisted"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:342
+#: src/topology/gnunet-daemon-topology.c:344
 #, fuzzy
 msgid "# connect requests issued to ATS"
 msgstr "# byte mottogs via TCP"
 
-#: src/topology/gnunet-daemon-topology.c:536
+#: src/topology/gnunet-daemon-topology.c:538
 msgid "# HELLO messages gossipped"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:638
-#: src/topology/gnunet-daemon-topology.c:724
+#: src/topology/gnunet-daemon-topology.c:640
+#: src/topology/gnunet-daemon-topology.c:726
 #, fuzzy
 msgid "# friends connected"
 msgstr "# av anslutna parter"
 
-#: src/topology/gnunet-daemon-topology.c:921
+#: src/topology/gnunet-daemon-topology.c:923
 msgid "Failed to connect to core service, can not manage topology!\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:954
+#: src/topology/gnunet-daemon-topology.c:956
 #, c-format
 msgid "Found myself `%s' in friend list (useless, ignored)\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:961
+#: src/topology/gnunet-daemon-topology.c:963
 #, fuzzy, c-format
 msgid "Found friend `%s' in configuration\n"
 msgstr " gconfig\tGTK-konfiguration\n"
 
-#: src/topology/gnunet-daemon-topology.c:983
+#: src/topology/gnunet-daemon-topology.c:985
 msgid "Encountered errors parsing friends list!\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:986
+#: src/topology/gnunet-daemon-topology.c:988
 #, fuzzy
 msgid "# friends in configuration"
 msgstr " gconfig\tGTK-konfiguration\n"
 
-#: src/topology/gnunet-daemon-topology.c:993
+#: src/topology/gnunet-daemon-topology.c:995
 msgid ""
 "Fewer friends specified than required by minimum friend count. Will only "
 "connect to friends.\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:999
+#: src/topology/gnunet-daemon-topology.c:1001
 msgid ""
 "More friendly connections required than target total number of connections.\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:1052
-#: src/transport/plugin_transport_wlan.c:1515
+#: src/topology/gnunet-daemon-topology.c:1054
+#: src/transport/plugin_transport_wlan.c:1517
 #, fuzzy
 msgid "# HELLO messages received"
 msgstr "# krypterade PONG-meddelanden mottagna"
 
-#: src/topology/gnunet-daemon-topology.c:1230
+#: src/topology/gnunet-daemon-topology.c:1233
 msgid "GNUnet topology control"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_ats.c:139
+#: src/transport/gnunet-communicator-tcp.c:2329
+#: src/transport/gnunet-communicator-udp.c:2883
+#: src/transport/gnunet-service-tng.c:4679
+#: src/transport/gnunet-service-transport.c:2782
+#, fuzzy
+msgid "Transport service is lacking key configuration settings. Exiting.\n"
+msgstr "GNUnet-konfiguration"
+
+#: src/transport/gnunet-communicator-tcp.c:2393
+msgid "GNUnet TCP communicator"
+msgstr ""
+
+#: src/transport/gnunet-communicator-udp.c:2954
+msgid "GNUnet UDP communicator"
+msgstr ""
+
+#: src/transport/gnunet-communicator-unix.c:802
+#, fuzzy
+msgid ""
+"Maximum number of UNIX connections exceeded, dropping incoming message\n"
+msgstr "Maximalt antal chattklienter uppnått.\n"
+
+#: src/transport/gnunet-communicator-unix.c:1073
+#: src/transport/plugin_transport_unix.c:1403
+#, fuzzy, c-format
+msgid "Cannot create path to `%s'\n"
+msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
+
+#: src/transport/gnunet-communicator-unix.c:1162
+msgid "GNUnet UNIX domain socket communicator"
+msgstr ""
+
+#: src/transport/gnunet-service-transport_ats.c:141
 msgid "# Addresses given to ATS"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:446
+#: src/transport/gnunet-service-transport.c:448
 msgid "# messages dropped due to slow client"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:816
+#: src/transport/gnunet-service-transport.c:817
 msgid "# bytes payload dropped (other peer was not connected)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:1549
+#: src/transport/gnunet-service-transport.c:1550
 #, fuzzy
 msgid "# bytes payload discarded due to not connected peer"
 msgstr "Nätverksannonsering avstängd i konfigurationen!\n"
 
-#: src/transport/gnunet-service-transport.c:1709
+#: src/transport/gnunet-service-transport.c:1710
 #, fuzzy
 msgid "# bytes total received"
 msgstr "# byte krypterade"
 
-#: src/transport/gnunet-service-transport.c:1806
+#: src/transport/gnunet-service-transport.c:1807
 #, fuzzy
 msgid "# bytes payload received"
 msgstr "# byte dekrypterade"
 
-#: src/transport/gnunet-service-transport.c:2123
-#: src/transport/gnunet-service-transport.c:2595
+#: src/transport/gnunet-service-transport.c:2124
+#: src/transport/gnunet-service-transport.c:2596
 msgid "# disconnects due to blacklist"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:2599
+#: src/transport/gnunet-service-transport.c:2600
 #, fuzzy, c-format
 msgid "Disallowing connection to peer `%s' on transport %s\n"
 msgstr "Kunde inte slå upp \"%s\": %s\n"
 
-#: src/transport/gnunet-service-transport.c:2707
+#: src/transport/gnunet-service-transport.c:2708
 #, fuzzy, c-format
 msgid "Adding blacklisting entry for peer `%s'\n"
 msgstr "Motpart \"%s\" med pålitlighet %8u och adress \"%s\"\n"
 
-#: src/transport/gnunet-service-transport.c:2716
+#: src/transport/gnunet-service-transport.c:2717
 #, c-format
 msgid "Adding blacklisting entry for peer `%s':`%s'\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:2781
-#, fuzzy
-msgid "Transport service is lacking key configuration settings. Exiting.\n"
-msgstr "GNUnet-konfiguration"
-
-#: src/transport/gnunet-service-transport_hello.c:193
+#: src/transport/gnunet-service-transport_hello.c:195
 msgid "# refreshed my HELLO"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:804
+#: src/transport/gnunet-service-transport_neighbours.c:805
 #, fuzzy
 msgid "# session creation failed"
 msgstr "# sessionsnycklar accepterade"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1051
+#: src/transport/gnunet-service-transport_neighbours.c:1052
 #, fuzzy
 msgid "# DISCONNECT messages sent"
 msgstr "# krypterade PONG-meddelanden mottagna"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1174
+#: src/transport/gnunet-service-transport_neighbours.c:1175
 msgid "# disconnects due to quota of 0"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1322
-#: src/transport/gnunet-service-transport_neighbours.c:1783
+#: src/transport/gnunet-service-transport_neighbours.c:1323
+#: src/transport/gnunet-service-transport_neighbours.c:1784
 msgid "# bytes in message queue for other peers"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1327
+#: src/transport/gnunet-service-transport_neighbours.c:1328
 #, fuzzy
 msgid "# messages transmitted to other peers"
 msgstr "# byte skickade av typen %d"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1333
+#: src/transport/gnunet-service-transport_neighbours.c:1334
 #, fuzzy
 msgid "# transmission failures for messages to other peers"
 msgstr "# byte skickade av typen %d"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1393
+#: src/transport/gnunet-service-transport_neighbours.c:1394
 msgid "# messages timed out while in transport queue"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1477
+#: src/transport/gnunet-service-transport_neighbours.c:1478
 msgid "# KEEPALIVES sent"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1513
+#: src/transport/gnunet-service-transport_neighbours.c:1514
 #, fuzzy
 msgid "# KEEPALIVE messages discarded (peer unknown)"
 msgstr "Nätverksannonsering avstängd i konfigurationen!\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1521
+#: src/transport/gnunet-service-transport_neighbours.c:1522
 #, fuzzy
 msgid "# KEEPALIVE messages discarded (no session)"
 msgstr "Nätverksannonsering avstängd i konfigurationen!\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1531
+#: src/transport/gnunet-service-transport_neighbours.c:1532
 msgid "# KEEPALIVES received in good order"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1576
+#: src/transport/gnunet-service-transport_neighbours.c:1577
 #, fuzzy
 msgid "# KEEPALIVE_RESPONSEs discarded (not connected)"
 msgstr "Nätverksannonsering avstängd i konfigurationen!\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1585
+#: src/transport/gnunet-service-transport_neighbours.c:1586
 #, fuzzy
 msgid "# KEEPALIVE_RESPONSEs discarded (not expected)"
 msgstr "Nätverksannonsering avstängd i konfigurationen!\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1593
+#: src/transport/gnunet-service-transport_neighbours.c:1594
 #, fuzzy
 msgid "# KEEPALIVE_RESPONSEs discarded (address changed)"
 msgstr "Nätverksannonsering avstängd i konfigurationen!\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1602
+#: src/transport/gnunet-service-transport_neighbours.c:1603
 #, fuzzy
 msgid "# KEEPALIVE_RESPONSEs discarded (no nonce)"
 msgstr "Nätverksannonsering avstängd i konfigurationen!\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1607
+#: src/transport/gnunet-service-transport_neighbours.c:1608
 #, fuzzy
 msgid "# KEEPALIVE_RESPONSEs discarded (bad nonce)"
 msgstr "Nätverksannonsering avstängd i konfigurationen!\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1613
+#: src/transport/gnunet-service-transport_neighbours.c:1614
 #, fuzzy
 msgid "# KEEPALIVE_RESPONSEs received (OK)"
 msgstr "Nätverksannonsering avstängd i konfigurationen!\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1680
+#: src/transport/gnunet-service-transport_neighbours.c:1681
 #, fuzzy
 msgid "# messages discarded due to lack of neighbour record"
 msgstr "Nätverksannonsering avstängd i konfigurationen!\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1714
+#: src/transport/gnunet-service-transport_neighbours.c:1715
 msgid "# bandwidth quota violations by other peers"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1729
+#: src/transport/gnunet-service-transport_neighbours.c:1730
 msgid "# ms throttling suggested"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1852
+#: src/transport/gnunet-service-transport_neighbours.c:1853
 #, fuzzy, c-format
 msgid "Failed to send SYN message to peer `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1872
+#: src/transport/gnunet-service-transport_neighbours.c:1873
 #, fuzzy
 msgid "# Failed attempts to switch addresses (failed to send SYN CONT)"
 msgstr "Misslyckades att skicka HTTP-begäran till värd \"%s\": %s\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1911
+#: src/transport/gnunet-service-transport_neighbours.c:1912
 #, fuzzy
 msgid "# SYN messages sent"
 msgstr "# krypterade PONG-meddelanden mottagna"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1928
+#: src/transport/gnunet-service-transport_neighbours.c:1929
 #, fuzzy, c-format
 msgid "Failed to transmit SYN message to %s\n"
 msgstr "Misslyckades att initiera tjänsten \"%s\".\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1958
+#: src/transport/gnunet-service-transport_neighbours.c:1959
 #, fuzzy
 msgid "# Failed attempts to switch addresses (failed to send SYN)"
 msgstr "Misslyckades att skicka HTTP-begäran till värd \"%s\": %s\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:2026
+#: src/transport/gnunet-service-transport_neighbours.c:2027
 #, fuzzy, c-format
 msgid "Failed to send SYN_ACK message to peer `%s' using address `%s'\n"
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:2080
+#: src/transport/gnunet-service-transport_neighbours.c:2081
 #, fuzzy
 msgid "# SYN_ACK messages sent"
 msgstr "# krypterade PONG-meddelanden mottagna"
 
-#: src/transport/gnunet-service-transport_neighbours.c:2097
+#: src/transport/gnunet-service-transport_neighbours.c:2098
 #, fuzzy, c-format
 msgid "Failed to transmit SYN_ACK message to %s\n"
 msgstr "Misslyckades att initiera tjänsten \"%s\".\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:2260
+#: src/transport/gnunet-service-transport_neighbours.c:2261
 #, fuzzy
 msgid "# SYN messages received"
 msgstr "# PING-meddelanden skapade"
 
-#: src/transport/gnunet-service-transport_neighbours.c:2265
+#: src/transport/gnunet-service-transport_neighbours.c:2266
 #, c-format
 msgid "SYN request from peer `%s' ignored due impending shutdown\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:2652
+#: src/transport/gnunet-service-transport_neighbours.c:2653
 msgid "# Attempts to switch addresses"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3137
+#: src/transport/gnunet-service-transport_neighbours.c:3138
 #, fuzzy
 msgid "# SYN_ACK messages received"
 msgstr "# krypterade PONG-meddelanden mottagna"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3145
+#: src/transport/gnunet-service-transport_neighbours.c:3146
 #, fuzzy
 msgid "# unexpected SYN_ACK messages (no peer)"
 msgstr "skicka ANTAL meddelanden"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3163
-#: src/transport/gnunet-service-transport_neighbours.c:3187
+#: src/transport/gnunet-service-transport_neighbours.c:3164
+#: src/transport/gnunet-service-transport_neighbours.c:3188
 #, fuzzy
 msgid "# unexpected SYN_ACK messages (not ready)"
 msgstr "skicka ANTAL meddelanden"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3199
+#: src/transport/gnunet-service-transport_neighbours.c:3200
 #, fuzzy
 msgid "# unexpected SYN_ACK messages (waiting on ATS)"
 msgstr "skicka ANTAL meddelanden"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3224
+#: src/transport/gnunet-service-transport_neighbours.c:3225
 msgid "# Successful attempts to switch addresses"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3237
+#: src/transport/gnunet-service-transport_neighbours.c:3238
 #, fuzzy
 msgid "# unexpected SYN_ACK messages (disconnecting)"
 msgstr "skicka ANTAL meddelanden"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3410
+#: src/transport/gnunet-service-transport_neighbours.c:3411
 #, fuzzy
 msgid "# ACK messages received"
 msgstr "# krypterade PONG-meddelanden mottagna"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3446
+#: src/transport/gnunet-service-transport_neighbours.c:3447
 #, fuzzy
 msgid "# unexpected ACK messages"
 msgstr "# krypterade PONG-meddelanden skickade"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3534
+#: src/transport/gnunet-service-transport_neighbours.c:3535
 #, fuzzy
 msgid "# quota messages ignored (malformed)"
 msgstr "# byte mottogs via TCP"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3541
+#: src/transport/gnunet-service-transport_neighbours.c:3542
 #, fuzzy
 msgid "# QUOTA messages received"
 msgstr "# krypterade PONG-meddelanden mottagna"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3581
+#: src/transport/gnunet-service-transport_neighbours.c:3582
 msgid "# disconnect messages ignored (malformed)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3588
+#: src/transport/gnunet-service-transport_neighbours.c:3589
 #, fuzzy
 msgid "# DISCONNECT messages received"
 msgstr "# krypterade PONG-meddelanden mottagna"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3599
+#: src/transport/gnunet-service-transport_neighbours.c:3600
 msgid "# disconnect messages ignored (timestamp)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3734
+#: src/transport/gnunet-service-transport_neighbours.c:3735
 #, fuzzy
 msgid "# disconnected from peer upon explicit request"
 msgstr "# av anslutna parter"
 
-#: src/transport/gnunet-service-transport_plugins.c:156
+#: src/transport/gnunet-service-transport_plugins.c:158
 msgid "Transport service is lacking NEIGHBOUR_LIMIT option.\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_plugins.c:221
-#: src/transport/gnunet-service-transport_plugins.c:229
-#: src/transport/gnunet-service-transport_plugins.c:237
-#: src/transport/gnunet-service-transport_plugins.c:245
-#: src/transport/gnunet-service-transport_plugins.c:253
-#: src/transport/gnunet-service-transport_plugins.c:261
-#: src/transport/gnunet-service-transport_plugins.c:269
-#: src/transport/gnunet-service-transport_plugins.c:277
-#: src/transport/gnunet-service-transport_plugins.c:285
-#: src/transport/gnunet-service-transport_plugins.c:293
-#: src/transport/gnunet-service-transport_plugins.c:301
+#: src/transport/gnunet-service-transport_plugins.c:223
+#: src/transport/gnunet-service-transport_plugins.c:231
+#: src/transport/gnunet-service-transport_plugins.c:239
+#: src/transport/gnunet-service-transport_plugins.c:247
+#: src/transport/gnunet-service-transport_plugins.c:255
+#: src/transport/gnunet-service-transport_plugins.c:263
+#: src/transport/gnunet-service-transport_plugins.c:271
+#: src/transport/gnunet-service-transport_plugins.c:279
+#: src/transport/gnunet-service-transport_plugins.c:287
+#: src/transport/gnunet-service-transport_plugins.c:295
+#: src/transport/gnunet-service-transport_plugins.c:303
 #, fuzzy, c-format
 msgid "Missing function `%s' in transport plugin for `%s'\n"
 msgstr "Kunde inte slå upp \"%s\": %s\n"
 
-#: src/transport/gnunet-service-transport_plugins.c:308
+#: src/transport/gnunet-service-transport_plugins.c:310
 #, c-format
 msgid "Did not load plugin `%s' due to missing functions\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:386
+#: src/transport/gnunet-service-transport_validation.c:388
 msgid "# Addresses in validation map"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:489
-#: src/transport/gnunet-service-transport_validation.c:675
-#: src/transport/gnunet-service-transport_validation.c:995
-#: src/transport/gnunet-service-transport_validation.c:1607
+#: src/transport/gnunet-service-transport_validation.c:491
+#: src/transport/gnunet-service-transport_validation.c:677
+#: src/transport/gnunet-service-transport_validation.c:997
+#: src/transport/gnunet-service-transport_validation.c:1609
 msgid "# validations running"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:530
+#: src/transport/gnunet-service-transport_validation.c:532
 #, fuzzy
 msgid "# address records discarded (timeout)"
 msgstr "# byte kastade via TCP (utgående)"
 
-#: src/transport/gnunet-service-transport_validation.c:578
+#: src/transport/gnunet-service-transport_validation.c:580
 msgid "# address records discarded (blacklist)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:666
+#: src/transport/gnunet-service-transport_validation.c:668
 msgid "# PINGs for address validation sent"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:746
+#: src/transport/gnunet-service-transport_validation.c:748
 msgid "# validations delayed by global throttle"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:783
+#: src/transport/gnunet-service-transport_validation.c:785
 msgid "# address revalidations started"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1121
+#: src/transport/gnunet-service-transport_validation.c:1123
 #, fuzzy
 msgid "# PING message for different peer received"
 msgstr "# PING-meddelanden skapade"
 
-#: src/transport/gnunet-service-transport_validation.c:1172
+#: src/transport/gnunet-service-transport_validation.c:1174
 #, c-format
 msgid "Plugin `%s' not available, cannot confirm having this address\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1185
+#: src/transport/gnunet-service-transport_validation.c:1187
 msgid "# failed address checks during validation"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1188
+#: src/transport/gnunet-service-transport_validation.c:1190
 #, c-format
 msgid "Address `%s' is not one of my addresses, not confirming PING\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1196
+#: src/transport/gnunet-service-transport_validation.c:1198
 msgid "# successful address checks during validation"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1209
+#: src/transport/gnunet-service-transport_validation.c:1211
 #, c-format
 msgid ""
 "Not confirming PING from peer `%s' with address `%s' since I cannot confirm "
 "having this address.\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1264
+#: src/transport/gnunet-service-transport_validation.c:1266
 #, fuzzy, c-format
 msgid "Failed to create PONG signature for peer `%s'\n"
 msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
 
-#: src/transport/gnunet-service-transport_validation.c:1315
+#: src/transport/gnunet-service-transport_validation.c:1317
 msgid "# PONGs unicast via reliable transport"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1324
+#: src/transport/gnunet-service-transport_validation.c:1326
 msgid "# PONGs multicast to all available addresses"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1497
+#: src/transport/gnunet-service-transport_validation.c:1499
 msgid "# PONGs dropped, no matching pending validation"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1515
+#: src/transport/gnunet-service-transport_validation.c:1517
 msgid "# PONGs dropped, signature expired"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1570
+#: src/transport/gnunet-service-transport_validation.c:1572
 msgid "# validations succeeded"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1625
+#: src/transport/gnunet-service-transport_validation.c:1627
 #, fuzzy
 msgid "# HELLOs given to peerinfo"
 msgstr "Meddelande mottaget från klient är ogiltig.\n"
 
-#: src/transport/gnunet-transport.c:411
+#: src/transport/gnunet-transport.c:413
 #, fuzzy, c-format
 msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/transport/gnunet-transport.c:421
+#: src/transport/gnunet-transport.c:423
 #, c-format
 msgid "Received %llu bytes/s (%llu bytes in %s)\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:465
+#: src/transport/gnunet-transport.c:467
 #, fuzzy, c-format
 msgid "Failed to connect to `%s'\n"
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/transport/gnunet-transport.c:478
+#: src/transport/gnunet-transport.c:480
 #, fuzzy, c-format
 msgid "Failed to resolve address for peer `%s'\n"
 msgstr "Misslyckades att binda till UDP-port %d.\n"
 
-#: src/transport/gnunet-transport.c:492
+#: src/transport/gnunet-transport.c:494
 #, fuzzy
 msgid "Failed to list connections, timeout occurred\n"
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/transport/gnunet-transport.c:525
+#: src/transport/gnunet-transport.c:527
 #, fuzzy, c-format
 msgid "Transmitting %u bytes\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/transport/gnunet-transport.c:559
+#: src/transport/gnunet-transport.c:561
 #, c-format
 msgid ""
 "Successfully connected to `%s', starting to send benchmark data in %u Kb "
 "blocks\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:590
+#: src/transport/gnunet-transport.c:592
 #, fuzzy, c-format
 msgid "Disconnected from peer `%s' while benchmarking\n"
 msgstr "\"%s\" ansluten till \"%s\".\n"
 
-#: src/transport/gnunet-transport.c:614 src/transport/gnunet-transport.c:643
+#: src/transport/gnunet-transport.c:616 src/transport/gnunet-transport.c:645
 #, c-format
 msgid "%24s: %-17s %4s   (%u connections in total)\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:616
+#: src/transport/gnunet-transport.c:618
 #, fuzzy
 msgid "Connected to"
 msgstr "\"%s\" ansluten till \"%s\".\n"
 
-#: src/transport/gnunet-transport.c:645
+#: src/transport/gnunet-transport.c:647
 #, fuzzy
 msgid "Disconnected from"
 msgstr "\"%s\" ansluten till \"%s\".\n"
 
-#: src/transport/gnunet-transport.c:680
+#: src/transport/gnunet-transport.c:682
 #, fuzzy, c-format
 msgid "Received %u bytes\n"
 msgstr "mottog ogiltigt \"%s\" meddelande\n"
 
-#: src/transport/gnunet-transport.c:717
+#: src/transport/gnunet-transport.c:719
 #, c-format
 msgid "Peer `%s': %s %s in state `%s' until %s\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:729
+#: src/transport/gnunet-transport.c:731
 #, fuzzy, c-format
 msgid "Peer `%s': %s %s\n"
 msgstr "Jag är ändpunkt \"%s\".\n"
 
-#: src/transport/gnunet-transport.c:1142
+#: src/transport/gnunet-transport.c:1144
 #, fuzzy
 msgid "Monitor disconnected from transport service. Reconnecting.\n"
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/transport/gnunet-transport.c:1249
+#: src/transport/gnunet-transport.c:1251
 #, c-format
 msgid ""
 "Multiple operations given. Please choose only one operation: %s, %s, %s, %s, "
 "%s, %s %s\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1262
+#: src/transport/gnunet-transport.c:1264
 #, c-format
 msgid ""
 "No operation given. Please choose one operation: %s, %s, %s, %s, %s, %s, %s\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1292
+#: src/transport/gnunet-transport.c:1294
 #, fuzzy
 msgid "Failed to connect to transport service for disconnection\n"
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/transport/gnunet-transport.c:1298
+#: src/transport/gnunet-transport.c:1300
 msgid "Blacklisting request in place, stop with CTRL-C\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1323 src/transport/gnunet-transport.c:1353
-#: src/transport/gnunet-transport.c:1406
+#: src/transport/gnunet-transport.c:1325 src/transport/gnunet-transport.c:1355
+#: src/transport/gnunet-transport.c:1408
 #, fuzzy
 msgid "Failed to connect to transport service\n"
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/transport/gnunet-transport.c:1360
+#: src/transport/gnunet-transport.c:1362
 msgid "Starting to receive benchmark data\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1431
+#: src/transport/gnunet-transport.c:1433
 #, fuzzy
 msgid "print information for all peers (instead of only connected peers)"
 msgstr "Skriv ut information om GNUnets motparter."
 
-#: src/transport/gnunet-transport.c:1435
+#: src/transport/gnunet-transport.c:1437
 msgid "measure how fast we are receiving data from all peers (until CTRL-C)"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1439
+#: src/transport/gnunet-transport.c:1441
 #, fuzzy
 msgid "disconnect from a peer"
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/transport/gnunet-transport.c:1443
+#: src/transport/gnunet-transport.c:1445
 #, fuzzy
 msgid "provide information about all current connections (once)"
 msgstr "Skriv ut information om GNUnets motparter."
 
-#: src/transport/gnunet-transport.c:1451
+#: src/transport/gnunet-transport.c:1453
 #, fuzzy
 msgid ""
 "provide information about all connects and disconnect events (continuously)"
 msgstr "Skriv ut information om GNUnets motparter."
 
-#: src/transport/gnunet-transport.c:1455
+#: src/transport/gnunet-transport.c:1457
 #, fuzzy
 msgid "do not resolve hostnames"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/transport/gnunet-transport.c:1460
-#: src/transport/gnunet-transport-profiler.c:639
+#: src/transport/gnunet-transport.c:1462
+#: src/transport/gnunet-transport-profiler.c:641
 msgid "peer identity"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1464
+#: src/transport/gnunet-transport.c:1466
 msgid "monitor plugin sessions"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1469
+#: src/transport/gnunet-transport.c:1471
 msgid "send data for benchmarking to the other peer (until CTRL-C)"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1480
-#: src/transport/gnunet-transport-profiler.c:650
+#: src/transport/gnunet-transport.c:1482
+#: src/transport/gnunet-transport-profiler.c:652
 #, fuzzy
 msgid "Direct access to transport service."
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/transport/gnunet-transport-profiler.c:217
+#: src/transport/gnunet-transport-profiler.c:219
 #, c-format
 msgid "%llu B in %llu ms == %.2f KB/s!\n"
 msgstr ""
 
-#: src/transport/gnunet-transport-profiler.c:615
+#: src/transport/gnunet-transport-profiler.c:617
 msgid "send data to peer"
 msgstr ""
 
-#: src/transport/gnunet-transport-profiler.c:619
+#: src/transport/gnunet-transport-profiler.c:621
 #, fuzzy
 msgid "receive data from peer"
 msgstr "# byte mottagna av typen %d"
 
-#: src/transport/gnunet-transport-profiler.c:624
+#: src/transport/gnunet-transport-profiler.c:626
 #, fuzzy
 msgid "iterations"
 msgstr "Visa alla alternativ"
 
-#: src/transport/gnunet-transport-profiler.c:629
+#: src/transport/gnunet-transport-profiler.c:631
 #, fuzzy
 msgid "number of messages to send"
 msgstr "antal meddelanden att använda per iteration"
 
-#: src/transport/gnunet-transport-profiler.c:634
+#: src/transport/gnunet-transport-profiler.c:636
 #, fuzzy
 msgid "message size to use"
 msgstr "meddelandestorlek"
 
-#: src/transport/plugin_transport_http_client.c:1472
-#: src/transport/plugin_transport_http_server.c:2310
-#: src/transport/plugin_transport_http_server.c:3524
-#: src/transport/plugin_transport_tcp.c:3889
-#: src/transport/plugin_transport_tcp.c:3896
-#: src/transport/plugin_transport_xt.c:3897
-#: src/transport/plugin_transport_xt.c:3904
+#: src/transport/plugin_transport_http_client.c:1474
+#: src/transport/plugin_transport_http_server.c:2312
+#: src/transport/plugin_transport_http_server.c:3530
+#: src/transport/plugin_transport_tcp.c:3895
+#: src/transport/plugin_transport_tcp.c:3902
+#: src/transport/plugin_transport_xt.c:3899
+#: src/transport/plugin_transport_xt.c:3906
 msgid "TCP_STEALTH not supported on this platform.\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_client.c:2113
+#: src/transport/plugin_transport_http_client.c:2115
 #, c-format
 msgid "Could not initialize curl multi handle, failed to start %s plugin!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_client.c:2162
-#: src/transport/plugin_transport_http_server.c:3239
+#: src/transport/plugin_transport_http_client.c:2164
+#: src/transport/plugin_transport_http_server.c:3245
 #, fuzzy, c-format
 msgid "Shutting down plugin `%s'\n"
 msgstr "Testar transport(er) %s\n"
 
-#: src/transport/plugin_transport_http_client.c:2179
-#: src/transport/plugin_transport_http_server.c:3309
+#: src/transport/plugin_transport_http_client.c:2181
+#: src/transport/plugin_transport_http_server.c:3315
 #, fuzzy, c-format
 msgid "Shutdown for plugin `%s' complete\n"
 msgstr ""
 "Uppladdning av \"%s\" klar, aktuell genomsnittshastighet är %8.3f kbps.\n"
 
-#: src/transport/plugin_transport_http_client.c:2213
+#: src/transport/plugin_transport_http_client.c:2215
 #, fuzzy, c-format
 msgid "Maximum number of requests is %u\n"
 msgstr "Maximalt antal chattklienter uppnått.\n"
 
-#: src/transport/plugin_transport_http_server.c:1754
+#: src/transport/plugin_transport_http_server.c:1756
 #, c-format
 msgid ""
 "Access from connection %p (%u of %u) for `%s' `%s' url `%s' with upload data "
 "size %u\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2026
+#: src/transport/plugin_transport_http_server.c:2028
 #, c-format
 msgid "Accepting connection (%u of %u) from `%s'\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2034
+#: src/transport/plugin_transport_http_server.c:2036
 #, c-format
 msgid ""
 "Server reached maximum number connections (%u), rejecting new connection\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2184
+#: src/transport/plugin_transport_http_server.c:2186
 msgid ""
 "Could not create a new TLS certificate, program `gnunet-transport-"
 "certificate-creation' could not be started!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2207
+#: src/transport/plugin_transport_http_server.c:2209
 #, c-format
 msgid "No usable TLS certificate found and creating one at `%s/%s' failed!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2336
+#: src/transport/plugin_transport_http_server.c:2338
 msgid "Could not load or create server certificate! Loading plugin failed!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2648
+#: src/transport/plugin_transport_http_server.c:2654
 #, fuzzy
 msgid "Require valid port number for service in configuration!\n"
 msgstr "Inga applikationer definierade i konfiguration!\n"
 
-#: src/transport/plugin_transport_http_server.c:2813
+#: src/transport/plugin_transport_http_server.c:2819
 #, c-format
 msgid "Found %u addresses to report to NAT service\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2899
-#: src/transport/plugin_transport_udp.c:3621
-#: src/transport/plugin_transport_xu.c:2047
+#: src/transport/plugin_transport_http_server.c:2905
+#: src/transport/plugin_transport_udp.c:3627
+#: src/transport/plugin_transport_xu.c:2049
 msgid "Disabling IPv6 since it is not supported on this system!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3005
+#: src/transport/plugin_transport_http_server.c:3011
 #, c-format
 msgid "IPv4 support is %s\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3020
+#: src/transport/plugin_transport_http_server.c:3026
 #, c-format
 msgid "IPv6 support is %s\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3026
+#: src/transport/plugin_transport_http_server.c:3032
 msgid "Neither IPv4 nor IPv6 are enabled! Fix in configuration\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3037
+#: src/transport/plugin_transport_http_server.c:3043
 #, fuzzy
 msgid "Port is required! Fix in configuration\n"
 msgstr " gconfig\tGTK-konfiguration\n"
 
-#: src/transport/plugin_transport_http_server.c:3043
+#: src/transport/plugin_transport_http_server.c:3049
 #, fuzzy, c-format
 msgid "Using port %u\n"
 msgstr "Testar transport(er) %s\n"
 
-#: src/transport/plugin_transport_http_server.c:3062
+#: src/transport/plugin_transport_http_server.c:3068
 #, fuzzy, c-format
 msgid "Specific IPv4 address `%s' in configuration file is invalid!\n"
 msgstr ""
 "Du måste ange ett positivt nummer för \"%s\" i konfigurationen i sektion \"%s"
 "\".\n"
 
-#: src/transport/plugin_transport_http_server.c:3097
+#: src/transport/plugin_transport_http_server.c:3103
 #, fuzzy, c-format
 msgid "Specific IPv6 address `%s' in configuration file is invalid!\n"
 msgstr ""
 "Du måste ange ett positivt nummer för \"%s\" i konfigurationen i sektion \"%s"
 "\".\n"
 
-#: src/transport/plugin_transport_http_server.c:3172
+#: src/transport/plugin_transport_http_server.c:3178
 #, fuzzy, c-format
 msgid "Using external hostname `%s'\n"
 msgstr "Startade samling \"%s\".\n"
 
-#: src/transport/plugin_transport_http_server.c:3193
+#: src/transport/plugin_transport_http_server.c:3199
 #, fuzzy, c-format
 msgid "Notifying transport only about hostname `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/transport/plugin_transport_http_server.c:3210
+#: src/transport/plugin_transport_http_server.c:3216
 #, fuzzy, c-format
 msgid "Maximum number of connections is %u\n"
 msgstr "Maximalt antal chattklienter uppnått.\n"
 
-#: src/transport/plugin_transport_http_server.c:3536
+#: src/transport/plugin_transport_http_server.c:3542
 #, fuzzy
 msgid "Unable to compile URL regex\n"
 msgstr "Kunde inte initiera SQLite.\n"
 
-#: src/transport/plugin_transport_smtp.c:221
+#: src/transport/plugin_transport_smtp.c:223
 #, fuzzy, c-format
 msgid "Received malformed message via %s. Ignored.\n"
 msgstr "Mottog ogiltigt \"%s\" meddelande från \"%s\".\n"
 
 # capped är inte ett bra ord IMHO
-#: src/transport/plugin_transport_smtp.c:308
+#: src/transport/plugin_transport_smtp.c:310
 #, fuzzy
 msgid "SMTP filter string to invalid, lacks ': '\n"
 msgstr "SMTP-filtersträng för lång, kapad till \"%s\"\n"
 
 # capped är inte ett bra ord IMHO
-#: src/transport/plugin_transport_smtp.c:317
+#: src/transport/plugin_transport_smtp.c:319
 #, c-format
 msgid "SMTP filter string to long, capped to `%s'\n"
 msgstr "SMTP-filtersträng för lång, kapad till \"%s\"\n"
 
-#: src/transport/plugin_transport_smtp.c:412
-#: src/transport/plugin_transport_smtp.c:422
-#: src/transport/plugin_transport_smtp.c:435
-#: src/transport/plugin_transport_smtp.c:454
-#: src/transport/plugin_transport_smtp.c:477
-#: src/transport/plugin_transport_smtp.c:485
-#: src/transport/plugin_transport_smtp.c:498
-#: src/transport/plugin_transport_smtp.c:509
+#: src/transport/plugin_transport_smtp.c:414
+#: src/transport/plugin_transport_smtp.c:424
+#: src/transport/plugin_transport_smtp.c:437
+#: src/transport/plugin_transport_smtp.c:456
+#: src/transport/plugin_transport_smtp.c:479
+#: src/transport/plugin_transport_smtp.c:487
+#: src/transport/plugin_transport_smtp.c:500
+#: src/transport/plugin_transport_smtp.c:511
 #, fuzzy, c-format
 msgid "SMTP: `%s' failed: %s.\n"
 msgstr "\"%s\" %s misslyckades: %s\n"
 
-#: src/transport/plugin_transport_smtp.c:650
+#: src/transport/plugin_transport_smtp.c:652
 msgid "No email-address specified, can not start SMTP transport.\n"
 msgstr ""
 
-#: src/transport/plugin_transport_smtp.c:662
+#: src/transport/plugin_transport_smtp.c:664
 #, fuzzy
 msgid "# bytes received via SMTP"
 msgstr "# byte mottogs via TCP"
 
-#: src/transport/plugin_transport_smtp.c:663
+#: src/transport/plugin_transport_smtp.c:665
 #, fuzzy
 msgid "# bytes sent via SMTP"
 msgstr "# byte skickades via TCP"
 
-#: src/transport/plugin_transport_smtp.c:665
+#: src/transport/plugin_transport_smtp.c:667
 #, fuzzy
 msgid "# bytes dropped by SMTP (outgoing)"
 msgstr "# byte kastade via TCP (utgående)"
 
-#: src/transport/plugin_transport_tcp.c:1545
-#: src/transport/plugin_transport_tcp.c:2871
-#: src/transport/plugin_transport_xt.c:1551
-#: src/transport/plugin_transport_xt.c:2877
+#: src/transport/plugin_transport_tcp.c:1551
+#: src/transport/plugin_transport_tcp.c:2877
+#: src/transport/plugin_transport_xt.c:1553
+#: src/transport/plugin_transport_xt.c:2879
 #, c-format
 msgid "Unexpected address length: %u bytes\n"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:1728
-#: src/transport/plugin_transport_tcp.c:1952
-#: src/transport/plugin_transport_tcp.c:3135
-#: src/transport/plugin_transport_tcp.c:4012
-#: src/transport/plugin_transport_xt.c:1734
-#: src/transport/plugin_transport_xt.c:1958
-#: src/transport/plugin_transport_xt.c:3141
+#: src/transport/plugin_transport_tcp.c:1734
+#: src/transport/plugin_transport_tcp.c:1958
+#: src/transport/plugin_transport_tcp.c:3141
+#: src/transport/plugin_transport_tcp.c:4018
+#: src/transport/plugin_transport_xt.c:1736
+#: src/transport/plugin_transport_xt.c:1960
+#: src/transport/plugin_transport_xt.c:3143
 #, fuzzy
 msgid "# TCP sessions active"
 msgstr "# sessionsnycklar accepterade"
 
-#: src/transport/plugin_transport_tcp.c:1770
-#: src/transport/plugin_transport_tcp.c:1934
-#: src/transport/plugin_transport_tcp.c:2058
-#: src/transport/plugin_transport_tcp.c:2131
-#: src/transport/plugin_transport_tcp.c:2231
-#: src/transport/plugin_transport_tcp.c:2256
-#: src/transport/plugin_transport_xt.c:1776
-#: src/transport/plugin_transport_xt.c:1940
-#: src/transport/plugin_transport_xt.c:2064
-#: src/transport/plugin_transport_xt.c:2137
-#: src/transport/plugin_transport_xt.c:2237
-#: src/transport/plugin_transport_xt.c:2262
+#: src/transport/plugin_transport_tcp.c:1776
+#: src/transport/plugin_transport_tcp.c:1940
+#: src/transport/plugin_transport_tcp.c:2064
+#: src/transport/plugin_transport_tcp.c:2137
+#: src/transport/plugin_transport_tcp.c:2237
+#: src/transport/plugin_transport_tcp.c:2262
+#: src/transport/plugin_transport_xt.c:1778
+#: src/transport/plugin_transport_xt.c:1942
+#: src/transport/plugin_transport_xt.c:2066
+#: src/transport/plugin_transport_xt.c:2139
+#: src/transport/plugin_transport_xt.c:2239
+#: src/transport/plugin_transport_xt.c:2264
 #, fuzzy
 msgid "# bytes currently in TCP buffers"
 msgstr "# byte skickades via TCP"
 
-#: src/transport/plugin_transport_tcp.c:1773
-#: src/transport/plugin_transport_xt.c:1779
+#: src/transport/plugin_transport_tcp.c:1779
+#: src/transport/plugin_transport_xt.c:1781
 #, fuzzy
 msgid "# bytes discarded by TCP (disconnect)"
 msgstr "# byte kastade via TCP (utgående)"
 
-#: src/transport/plugin_transport_tcp.c:2061
-#: src/transport/plugin_transport_xt.c:2067
+#: src/transport/plugin_transport_tcp.c:2067
+#: src/transport/plugin_transport_xt.c:2069
 #, fuzzy
 msgid "# bytes discarded by TCP (timeout)"
 msgstr "# byte kastade via TCP (utgående)"
 
-#: src/transport/plugin_transport_tcp.c:2135
-#: src/transport/plugin_transport_xt.c:2141
+#: src/transport/plugin_transport_tcp.c:2141
+#: src/transport/plugin_transport_xt.c:2143
 #, fuzzy
 msgid "# bytes transmitted via TCP"
 msgstr "# byte skickade av typen %d"
 
-#: src/transport/plugin_transport_tcp.c:2533
-#: src/transport/plugin_transport_xt.c:2539
+#: src/transport/plugin_transport_tcp.c:2539
+#: src/transport/plugin_transport_xt.c:2541
 msgid "# requests to create session with invalid address"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:2709
-#: src/transport/plugin_transport_xt.c:2715
+#: src/transport/plugin_transport_tcp.c:2715
+#: src/transport/plugin_transport_xt.c:2717
 msgid "# transport-service disconnect requests for TCP"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3201
-#: src/transport/plugin_transport_xt.c:3207
+#: src/transport/plugin_transport_tcp.c:3207
+#: src/transport/plugin_transport_xt.c:3209
 #, fuzzy
 msgid "# TCP WELCOME messages received"
 msgstr "# krypterade PONG-meddelanden mottagna"
 
-#: src/transport/plugin_transport_tcp.c:3407
-#: src/transport/plugin_transport_xt.c:3413
+#: src/transport/plugin_transport_tcp.c:3413
+#: src/transport/plugin_transport_xt.c:3415
 msgid "# bytes received via TCP"
 msgstr "# byte mottogs via TCP"
 
-#: src/transport/plugin_transport_tcp.c:3458
-#: src/transport/plugin_transport_tcp.c:3516
-#: src/transport/plugin_transport_xt.c:3464
-#: src/transport/plugin_transport_xt.c:3522
+#: src/transport/plugin_transport_tcp.c:3464
+#: src/transport/plugin_transport_tcp.c:3522
+#: src/transport/plugin_transport_xt.c:3466
+#: src/transport/plugin_transport_xt.c:3524
 #, fuzzy
 msgid "# TCP server connections active"
 msgstr "Nätverksanslutning"
 
-#: src/transport/plugin_transport_tcp.c:3462
-#: src/transport/plugin_transport_xt.c:3468
+#: src/transport/plugin_transport_tcp.c:3468
+#: src/transport/plugin_transport_xt.c:3470
 #, fuzzy
 msgid "# TCP server connect events"
 msgstr "# av anslutna parter"
 
-#: src/transport/plugin_transport_tcp.c:3468
-#: src/transport/plugin_transport_xt.c:3474
+#: src/transport/plugin_transport_tcp.c:3474
+#: src/transport/plugin_transport_xt.c:3476
 msgid "TCP connection limit reached, suspending server\n"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3470
-#: src/transport/plugin_transport_xt.c:3476
+#: src/transport/plugin_transport_tcp.c:3476
+#: src/transport/plugin_transport_xt.c:3478
 msgid "# TCP service suspended"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3510
-#: src/transport/plugin_transport_xt.c:3516
+#: src/transport/plugin_transport_tcp.c:3516
+#: src/transport/plugin_transport_xt.c:3518
 msgid "# TCP service resumed"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3520
-#: src/transport/plugin_transport_xt.c:3526
+#: src/transport/plugin_transport_tcp.c:3526
+#: src/transport/plugin_transport_xt.c:3528
 msgid "# network-level TCP disconnect events"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3839
-#: src/transport/plugin_transport_xt.c:3847
+#: src/transport/plugin_transport_tcp.c:3845
+#: src/transport/plugin_transport_xt.c:3849
 #, fuzzy
 msgid "Failed to start service.\n"
 msgstr "Misslyckades att starta samling.\n"
 
-#: src/transport/plugin_transport_tcp.c:4000
+#: src/transport/plugin_transport_tcp.c:4006
 #, c-format
 msgid "TCP transport listening on port %llu\n"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:4004
+#: src/transport/plugin_transport_tcp.c:4010
 msgid "TCP transport not listening on any port (client only)\n"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:4008
+#: src/transport/plugin_transport_tcp.c:4014
 #, c-format
 msgid "TCP transport advertises itself as being on port %llu\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp_broadcasting.c:166
+#: src/transport/plugin_transport_udp_broadcasting.c:168
 #, fuzzy
 msgid "# Multicast HELLO beacons received via UDP"
 msgstr "# krypterade PONG-meddelanden mottagna"
 
-#: src/transport/plugin_transport_udp_broadcasting.c:546
+#: src/transport/plugin_transport_udp_broadcasting.c:548
 msgid ""
 "Disabling HELLO broadcasting due to friend-to-friend only configuration!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp_broadcasting.c:563
+#: src/transport/plugin_transport_udp_broadcasting.c:565
 #, c-format
 msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3365
+#: src/transport/plugin_transport_udp.c:3371
 #, c-format
 msgid ""
 "UDP could not transmit message to `%s': Network seems down, please check "
 "your network configuration\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3379
+#: src/transport/plugin_transport_udp.c:3385
 msgid ""
 "UDP could not transmit IPv6 message! Please check your network configuration "
 "and disable IPv6 if your connection does not have a global IPv6 address\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3697
-#: src/transport/plugin_transport_udp.c:3796
+#: src/transport/plugin_transport_udp.c:3703
+#: src/transport/plugin_transport_udp.c:3802
 #, fuzzy, c-format
 msgid "Failed to bind UDP socket to %s: %s\n"
 msgstr "Misslyckades att binda till UDP6-port %d.\n"
 
-#: src/transport/plugin_transport_udp.c:3715
-#: src/transport/plugin_transport_xu.c:2141
+#: src/transport/plugin_transport_udp.c:3721
+#: src/transport/plugin_transport_xu.c:2143
 msgid "Disabling IPv4 since it is not supported on this system!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3806
+#: src/transport/plugin_transport_udp.c:3812
 #, fuzzy
 msgid "Failed to open UDP sockets\n"
 msgstr "Misslyckades att binda till UDP6-port %d.\n"
 
-#: src/transport/plugin_transport_udp.c:3877
-#: src/transport/plugin_transport_udp.c:3891
-#: src/transport/plugin_transport_xu.c:2299
-#: src/transport/plugin_transport_xu.c:2313
+#: src/transport/plugin_transport_udp.c:3883
+#: src/transport/plugin_transport_udp.c:3897
+#: src/transport/plugin_transport_xu.c:2301
+#: src/transport/plugin_transport_xu.c:2315
 msgid "must be in [0,65535]"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3923
-#: src/transport/plugin_transport_xu.c:2345
+#: src/transport/plugin_transport_udp.c:3929
+#: src/transport/plugin_transport_xu.c:2347
 #, fuzzy
 msgid "must be valid IPv4 address"
 msgstr "\"%s\" är inte tillgänglig."
 
-#: src/transport/plugin_transport_udp.c:3950
-#: src/transport/plugin_transport_xu.c:2372
+#: src/transport/plugin_transport_udp.c:3956
+#: src/transport/plugin_transport_xu.c:2374
 #, fuzzy
 msgid "must be valid IPv6 address"
 msgstr "\"%s\" är inte tillgänglig."
 
-#: src/transport/plugin_transport_udp.c:4014
+#: src/transport/plugin_transport_udp.c:4020
 #, fuzzy
 msgid "Failed to create UDP network sockets\n"
 msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
 
-#: src/transport/plugin_transport_unix.c:1401
-#, fuzzy, c-format
-msgid "Cannot create path to `%s'\n"
-msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
-
-#: src/transport/plugin_transport_unix.c:1414
+#: src/transport/plugin_transport_unix.c:1416
 #, fuzzy, c-format
 msgid "Cannot bind to `%s'\n"
 msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
 
-#: src/transport/plugin_transport_unix.c:1814
+#: src/transport/plugin_transport_unix.c:1816
 #, fuzzy
 msgid "Failed to open UNIX listen socket\n"
 msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
 
-#: src/transport/plugin_transport_wlan.c:766
+#: src/transport/plugin_transport_wlan.c:768
 msgid "# ACKs sent"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:786
+#: src/transport/plugin_transport_wlan.c:788
 #, fuzzy
 msgid "# Messages defragmented"
 msgstr "# PING-meddelanden skapade"
 
-#: src/transport/plugin_transport_wlan.c:827
-#: src/transport/plugin_transport_wlan.c:912
+#: src/transport/plugin_transport_wlan.c:829
+#: src/transport/plugin_transport_wlan.c:914
 #, fuzzy
 msgid "# Sessions allocated"
 msgstr "# sessionsnycklar accepterade"
 
-#: src/transport/plugin_transport_wlan.c:1033
+#: src/transport/plugin_transport_wlan.c:1035
 #, fuzzy
 msgid "# message fragments sent"
 msgstr "# byte mottogs via TCP"
 
-#: src/transport/plugin_transport_wlan.c:1062
+#: src/transport/plugin_transport_wlan.c:1064
 #, fuzzy
 msgid "# messages pending (with fragmentation)"
 msgstr "# byte mottogs via TCP"
 
-#: src/transport/plugin_transport_wlan.c:1191
-#: src/transport/plugin_transport_wlan.c:1282
-#: src/transport/plugin_transport_wlan.c:2303
+#: src/transport/plugin_transport_wlan.c:1193
+#: src/transport/plugin_transport_wlan.c:1284
+#: src/transport/plugin_transport_wlan.c:2305
 #, fuzzy
 msgid "# MAC endpoints allocated"
 msgstr "# byte mottogs via TCP"
 
-#: src/transport/plugin_transport_wlan.c:1565
+#: src/transport/plugin_transport_wlan.c:1567
 #, fuzzy
 msgid "# ACKs received"
 msgstr "# byte mottogs via TCP"
 
-#: src/transport/plugin_transport_wlan.c:1634
+#: src/transport/plugin_transport_wlan.c:1636
 #, fuzzy
 msgid "# DATA messages discarded due to CRC32 error"
 msgstr "Nätverksannonsering avstängd i konfigurationen!\n"
 
-#: src/transport/plugin_transport_wlan.c:1738
+#: src/transport/plugin_transport_wlan.c:1740
 #, fuzzy
 msgid "# HELLO beacons sent"
 msgstr "# byte skickade via UDP"
 
-#: src/transport/plugin_transport_wlan.c:1854
+#: src/transport/plugin_transport_wlan.c:1856
 #, fuzzy
 msgid "# DATA messages received"
 msgstr "# krypterade PONG-meddelanden mottagna"
 
-#: src/transport/plugin_transport_wlan.c:1888
+#: src/transport/plugin_transport_wlan.c:1890
 #, fuzzy
 msgid "# DATA messages processed"
 msgstr "# krypterade PONG-meddelanden mottagna"
 
-#: src/transport/plugin_transport_wlan.c:2278
+#: src/transport/plugin_transport_wlan.c:2280
 #, c-format
 msgid "Helper binary `%s' not SUID, cannot run WLAN transport\n"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:2300
+#: src/transport/plugin_transport_wlan.c:2302
 #, fuzzy
 msgid "# sessions allocated"
 msgstr "# sessionsnycklar accepterade"
 
-#: src/transport/plugin_transport_xt.c:4008
+#: src/transport/plugin_transport_xt.c:4010
 #, c-format
 msgid "XT transport listening on port %llu\n"
 msgstr ""
 
-#: src/transport/plugin_transport_xt.c:4012
+#: src/transport/plugin_transport_xt.c:4014
 msgid "XT transport not listening on any port (client only)\n"
 msgstr ""
 
-#: src/transport/plugin_transport_xt.c:4016
+#: src/transport/plugin_transport_xt.c:4018
 #, c-format
 msgid "XT transport advertises itself as being on port %llu\n"
 msgstr ""
 
-#: src/transport/plugin_transport_xt.c:4020
+#: src/transport/plugin_transport_xt.c:4022
 #, fuzzy
 msgid "# XT sessions active"
 msgstr "# sessionsnycklar accepterade"
 
-#: src/transport/plugin_transport_xu.c:1235
+#: src/transport/plugin_transport_xu.c:1237
 #, c-format
 msgid ""
 "XU could not transmit message to `%s': Network seems down, please check your "
 "network configuration\n"
 msgstr ""
 
-#: src/transport/plugin_transport_xu.c:1249
+#: src/transport/plugin_transport_xu.c:1251
 msgid ""
 "XU could not transmit IPv6 message! Please check your network configuration "
 "and disable IPv6 if your connection does not have a global IPv6 address\n"
 msgstr ""
 
-#: src/transport/plugin_transport_xu.c:2123
-#: src/transport/plugin_transport_xu.c:2222
+#: src/transport/plugin_transport_xu.c:2125
+#: src/transport/plugin_transport_xu.c:2224
 #, fuzzy, c-format
 msgid "Failed to bind XU socket to %s: %s\n"
 msgstr "Misslyckades att binda till UDP6-port %d.\n"
 
-#: src/transport/plugin_transport_xu.c:2232
+#: src/transport/plugin_transport_xu.c:2234
 #, fuzzy
 msgid "Failed to open XU sockets\n"
 msgstr "Misslyckades att binda till UDP6-port %d.\n"
 
-#: src/transport/plugin_transport_xu.c:2396
+#: src/transport/plugin_transport_xu.c:2398
 #, fuzzy
 msgid "Failed to create XU network sockets\n"
 msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
 
-#: src/transport/tcp_connection_legacy.c:450
+#: src/transport/tcp_connection_legacy.c:452
 #, fuzzy, c-format
 msgid "Access denied to `%s'\n"
 msgstr "Åtkomst nekad för \"%s\" vid %s:%d.\n"
 
-#: src/transport/tcp_connection_legacy.c:467
+#: src/transport/tcp_connection_legacy.c:469
 #, c-format
 msgid "Accepting connection from `%s': %p\n"
 msgstr ""
 
 # drive = hard drive ?
-#: src/transport/tcp_server_legacy.c:472 src/util/service.c:1109
+#: src/transport/tcp_server_legacy.c:474 src/util/service.c:1666
 #, fuzzy, c-format
 msgid "`%s' failed for port %d (%s).\n"
 msgstr "\"%s\" misslyckades för enhet %s: %u\n"
 
-#: src/transport/tcp_server_legacy.c:482 src/util/service.c:1119
+#: src/transport/tcp_server_legacy.c:484 src/util/service.c:1676
 #, fuzzy, c-format
 msgid "`%s' failed for port %d (%s): address already in use\n"
 msgstr "\"%s\" misslyckades för port %d: %s. Körs verkligen gnunetd?\n"
 
-#: src/transport/tcp_server_legacy.c:488 src/util/service.c:1125
+#: src/transport/tcp_server_legacy.c:490 src/util/service.c:1682
 #, fuzzy, c-format
 msgid "`%s' failed for `%s': address already in use\n"
 msgstr "\"%s\" misslyckades för port %d: %s. Körs verkligen gnunetd?\n"
 
-#: src/transport/tcp_server_legacy.c:888
+#: src/transport/tcp_server_legacy.c:890
 #, c-format
 msgid ""
 "Processing code for message of type %u did not call "
 "`GNUNET_SERVER_receive_done' after %s\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:337 src/util/service.c:2378
+#: src/transport/tcp_service_legacy.c:339 src/util/service.c:870
 #, fuzzy, c-format
 msgid "Unknown address family %d\n"
 msgstr "Okänd operation \"%s\"\n"
 
-#: src/transport/tcp_service_legacy.c:344
+#: src/transport/tcp_service_legacy.c:346
 #, c-format
 msgid "Access from `%s' denied to service `%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:400 src/util/service.c:437
+#: src/transport/tcp_service_legacy.c:402 src/util/service.c:994
 #, c-format
 msgid "Could not parse IPv4 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:438 src/util/service.c:480
+#: src/transport/tcp_service_legacy.c:440 src/util/service.c:1037
 #, c-format
 msgid "Could not parse IPv6 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:902 src/util/service.c:1040
+#: src/transport/tcp_service_legacy.c:904 src/util/service.c:1597
 msgid "Could not access a pre-bound socket, will try to bind myself\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:951
-#: src/transport/tcp_service_legacy.c:969 src/util/service.c:1192
+#: src/transport/tcp_service_legacy.c:953
+#: src/transport/tcp_service_legacy.c:971 src/util/service.c:1750
 #, c-format
 msgid "Specified value for `%s' of service `%s' is invalid\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:994 src/util/service.c:1224
+#: src/transport/tcp_service_legacy.c:996 src/util/service.c:1783
 #, c-format
 msgid "Could not access pre-bound socket %u, will try to bind myself\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1159
+#: src/transport/tcp_service_legacy.c:1161
 #, fuzzy, c-format
 msgid "Failed to start `%s' at `%s'\n"
 msgstr "Fel vid %s:%d.\n"
 
-#: src/transport/tcp_service_legacy.c:1200
+#: src/transport/tcp_service_legacy.c:1202
 #, fuzzy, c-format
 msgid "Service `%s' runs at %s\n"
 msgstr "Motpart \"%s\" med pålitlighet %8u och adress \"%s\"\n"
 
-#: src/transport/tcp_service_legacy.c:1249 src/util/service.c:1498
+#: src/transport/tcp_service_legacy.c:1251 src/util/service.c:2057
 msgid "Service process failed to initialize\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1253 src/util/service.c:1502
+#: src/transport/tcp_service_legacy.c:1255 src/util/service.c:2061
 msgid "Service process could not initialize server function\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1257 src/util/service.c:1506
+#: src/transport/tcp_service_legacy.c:1259 src/util/service.c:2065
 msgid "Service process failed to report status\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1311 src/util/disk.c:1521
-#: src/util/service.c:1376
+#: src/transport/tcp_service_legacy.c:1313 src/util/disk.c:1525
+#: src/util/service.c:1935
 #, fuzzy, c-format
 msgid "Cannot obtain information about user `%s': %s\n"
 msgstr "Kan inte öppna konfigurationsfil \"%s\".\n"
 
-#: src/transport/tcp_service_legacy.c:1312 src/util/service.c:1378
+#: src/transport/tcp_service_legacy.c:1314 src/util/service.c:1937
 msgid "No such user"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1325 src/util/service.c:1397
+#: src/transport/tcp_service_legacy.c:1327 src/util/service.c:1956
 #, c-format
 msgid "Cannot change user/group to `%s': %s\n"
 msgstr "Kan inte ändra användare/grupp till \"%s\": %s\n"
 
-#: src/transport/tcp_service_legacy.c:1396 src/util/service.c:1757
+#: src/transport/tcp_service_legacy.c:1398 src/util/service.c:2318
 msgid "do daemonize (detach from terminal)"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1446 src/util/program.c:277
-#: src/util/service.c:1820
+#: src/transport/tcp_service_legacy.c:1448 src/util/service.c:2382
+#: src/util/service.c:2397
 #, fuzzy, c-format
 msgid "Malformed configuration file `%s', exit ...\n"
 msgstr "Kunde inte spara konfigurationsfil \"%s\":"
 
-#: src/transport/tcp_service_legacy.c:1456 src/util/program.c:297
-#: src/util/service.c:1831
+#: src/transport/tcp_service_legacy.c:1458 src/util/service.c:2409
 #, fuzzy
 msgid "Malformed configuration, exit ...\n"
 msgstr "Kunde inte spara konfigurationsfil \"%s\":"
 
-#: src/transport/tcp_service_legacy.c:1461 src/util/program.c:290
-#: src/util/service.c:1837
+#: src/transport/tcp_service_legacy.c:1463
 #, fuzzy, c-format
 msgid "Could not access configuration file `%s'\n"
 msgstr "Kunde inte tolka konfigurationsfil \"%s\".\n"
 
-#: src/util/bio.c:179 src/util/bio.c:187
+#: src/transport/transport_api2_communication.c:764
+msgid "Dropped backchanel message: handler not provided by communicator\n"
+msgstr ""
+
+#: src/util/bio.c:181 src/util/bio.c:189
 #, fuzzy, c-format
 msgid "Error reading `%s': %s"
 msgstr "Fel vid skapandet av användare"
 
-#: src/util/bio.c:189
+#: src/util/bio.c:191
 #, fuzzy
 msgid "End of file"
 msgstr "Läs in en konfigurationsfil"
 
-#: src/util/bio.c:246
+#: src/util/bio.c:248
 #, c-format
 msgid "Error reading length of string `%s'"
 msgstr ""
 
-#: src/util/bio.c:256
+#: src/util/bio.c:258
 #, c-format
 msgid "String `%s' longer than allowed (%u > %u)"
 msgstr ""
 
-#: src/util/bio.c:304
+#: src/util/bio.c:306
 #, c-format
 msgid "Serialized metadata `%s' larger than allowed (%u>%u)"
 msgstr ""
 
-#: src/util/bio.c:326
+#: src/util/bio.c:328
 #, c-format
 msgid "Metadata `%s' failed to deserialize"
 msgstr ""
 
-#: src/util/client.c:732
+#: src/util/client.c:734
 msgid "not a valid filename"
 msgstr ""
 
-#: src/util/client.c:923
+#: src/util/client.c:925
 #, c-format
 msgid "Need a non-empty hostname for service `%s'.\n"
 msgstr ""
 
-#: src/util/common_logging.c:257 src/util/common_logging.c:1159
+#: src/util/common_logging.c:259 src/util/common_logging.c:1162
 msgid "DEBUG"
 msgstr "FELSÖKNING"
 
-#: src/util/common_logging.c:259 src/util/common_logging.c:1157
+#: src/util/common_logging.c:261 src/util/common_logging.c:1160
 msgid "INFO"
 msgstr "INFO"
 
-#: src/util/common_logging.c:261 src/util/common_logging.c:1155
+#: src/util/common_logging.c:263 src/util/common_logging.c:1158
 msgid "MESSAGE"
 msgstr "MEDDELANDE"
 
-#: src/util/common_logging.c:263 src/util/common_logging.c:1153
+#: src/util/common_logging.c:265 src/util/common_logging.c:1156
 msgid "WARNING"
 msgstr "VARNING"
 
-#: src/util/common_logging.c:265 src/util/common_logging.c:1151
+#: src/util/common_logging.c:267 src/util/common_logging.c:1154
 msgid "ERROR"
 msgstr "FEL"
 
-#: src/util/common_logging.c:267 src/util/common_logging.c:1161
+#: src/util/common_logging.c:269 src/util/common_logging.c:1164
 msgid "NONE"
 msgstr ""
 
-#: src/util/common_logging.c:631 src/util/common_logging.c:661
+#: src/util/common_logging.c:633 src/util/common_logging.c:663
 #, c-format
 msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n"
 msgstr ""
 
-#: src/util/common_logging.c:895
+#: src/util/common_logging.c:898
 #, c-format
 msgid "Message `%.*s' repeated %u times in the last %s\n"
 msgstr ""
 
-#: src/util/common_logging.c:1162
+#: src/util/common_logging.c:1165
 msgid "INVALID"
 msgstr ""
 
-#: src/util/common_logging.c:1455
+#: src/util/common_logging.c:1458
 msgid "unknown address"
 msgstr ""
 
-#: src/util/common_logging.c:1497
+#: src/util/common_logging.c:1500
 msgid "invalid address"
 msgstr ""
 
-#: src/util/common_logging.c:1515
+#: src/util/common_logging.c:1518
 #, fuzzy, c-format
 msgid "Configuration fails to specify option `%s' in section `%s'!\n"
 msgstr "Konfigurationsfil \"%s\" skapad.\n"
 
-#: src/util/common_logging.c:1536
+#: src/util/common_logging.c:1539
 #, fuzzy, c-format
 msgid ""
 "Configuration specifies invalid value for option `%s' in section `%s': %s\n"
 msgstr "Konfigurationsfil \"%s\" hittades inte.  Kör \"gnunet-setup -d\"!\n"
 
-#: src/util/configuration.c:294
+#: src/util/configuration.c:331
 #, fuzzy, c-format
 msgid "Syntax error while deserializing in line %u\n"
 msgstr "Syntaxfel i konfigurationsfil \"%s\" på rad %d.\n"
 
-#: src/util/configuration.c:361
+#: src/util/configuration.c:398
 #, fuzzy, c-format
 msgid "Error while reading file `%s'\n"
 msgstr "Fel vid nedladdning: %s\n"
 
-#: src/util/configuration.c:970
+#: src/util/configuration.c:1016
 #, fuzzy
 msgid "Not a valid relative time specification"
 msgstr "Konfigurationsfil \"%s\" skapad.\n"
 
-#: src/util/configuration.c:1059
+#: src/util/configuration.c:1105
 #, c-format
 msgid ""
 "Configuration value '%s' for '%s' in section '%s' is not in set of legal "
 "choices\n"
 msgstr ""
 
-#: src/util/configuration.c:1178
+#: src/util/configuration.c:1224
 #, c-format
 msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n"
 msgstr ""
 
-#: src/util/configuration.c:1211
+#: src/util/configuration.c:1257
 #, fuzzy, c-format
 msgid "Missing closing `%s' in option `%s'\n"
 msgstr "Konfigurationsfil \"%s\" skapad.\n"
 
-#: src/util/configuration.c:1279
+#: src/util/configuration.c:1325
 #, c-format
 msgid ""
 "Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined "
 "as an environmental variable\n"
 msgstr ""
 
-#: src/util/container_bloomfilter.c:530
+#: src/util/container_bloomfilter.c:532
 #, c-format
 msgid ""
 "Size of file on disk is incorrect for this Bloom filter (want %llu, have "
 "%llu)\n"
 msgstr ""
 
-#: src/util/crypto_ecc.c:860
+#: src/util/crypto_ecc.c:862
 #, fuzzy, c-format
 msgid "ECC signing failed at %s:%d: %s\n"
 msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n"
 
-#: src/util/crypto_ecc.c:915
+#: src/util/crypto_ecc.c:917
 #, fuzzy, c-format
 msgid "EdDSA signing failed at %s:%d: %s\n"
 msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n"
 
-#: src/util/crypto_ecc.c:994
+#: src/util/crypto_ecc.c:996
 #, fuzzy, c-format
 msgid "ECDSA signature verification failed at %s:%d: %s\n"
 msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n"
 
-#: src/util/crypto_ecc.c:1055
+#: src/util/crypto_ecc.c:1057
 #, fuzzy, c-format
 msgid "EdDSA signature verification failed at %s:%d: %s\n"
 msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n"
 
-#: src/util/crypto_ecc_setup.c:121 src/util/crypto_ecc_setup.c:160
-#: src/util/crypto_ecc_setup.c:303 src/util/crypto_ecc_setup.c:350
+#: src/util/crypto_ecc_setup.c:123 src/util/crypto_ecc_setup.c:162
+#: src/util/crypto_ecc_setup.c:305 src/util/crypto_ecc_setup.c:352
 #, fuzzy, c-format
 msgid "Could not acquire lock on file `%s': %s...\n"
 msgstr "Kunde inte slå upp \"%s\": %s\n"
 
-#: src/util/crypto_ecc_setup.c:127 src/util/crypto_ecc_setup.c:309
+#: src/util/crypto_ecc_setup.c:129 src/util/crypto_ecc_setup.c:311
 #, fuzzy
 msgid "Creating a new private key.  This may take a while.\n"
 msgstr "Skapar ny värdnyckel (det här kan ta en stund).\n"
 
-#: src/util/crypto_ecc_setup.c:164 src/util/crypto_ecc_setup.c:354
+#: src/util/crypto_ecc_setup.c:166 src/util/crypto_ecc_setup.c:356
 msgid "This may be ok if someone is currently generating a private key.\n"
 msgstr ""
 
-#: src/util/crypto_ecc_setup.c:194 src/util/crypto_ecc_setup.c:396
+#: src/util/crypto_ecc_setup.c:196 src/util/crypto_ecc_setup.c:398
 #, c-format
 msgid ""
 "When trying to read key file `%s' I found %u bytes but I need at least %u.\n"
 msgstr ""
 
-#: src/util/crypto_ecc_setup.c:199 src/util/crypto_ecc_setup.c:400
+#: src/util/crypto_ecc_setup.c:201 src/util/crypto_ecc_setup.c:402
 msgid "This may be ok if someone is currently generating a key.\n"
 msgstr ""
 
-#: src/util/crypto_ecc_setup.c:466
+#: src/util/crypto_ecc_setup.c:468
 #, fuzzy
 msgid "Could not load peer's private key\n"
 msgstr "Kunde inte tolka konfigurationsfil \"%s\".\n"
 
-#: src/util/crypto_random.c:304
+#: src/util/crypto_random.c:306
 #, c-format
 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:848
+#: src/util/crypto_rsa.c:850
 #, fuzzy, c-format
 msgid "RSA signing failed at %s:%d: %s\n"
 msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n"
 
-#: src/util/crypto_rsa.c:1187
+#: src/util/crypto_rsa.c:1189
 #, 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:1251
+#: src/util/disk.c:1255
 #, 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/dnsparser.c:250
+#: src/util/dnsparser.c:264
 #, fuzzy, c-format
 msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n"
 msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
 
-#: src/util/dnsparser.c:940
+#: src/util/dnsparser.c:954
 #, fuzzy, c-format
 msgid "Failed to convert UTF-8 name `%s' to DNS IDNA format: %s\n"
 msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
 
-#: src/util/dnsstub.c:229
+#: src/util/dnsstub.c:231
 #, fuzzy, c-format
 msgid "Could not bind to any port: %s\n"
 msgstr "Kunde inte köra \"%s\": %s\n"
 
-#: src/util/dnsstub.c:360
+#: src/util/dnsstub.c:362
 #, c-format
 msgid "Received DNS response that is too small (%u bytes)"
 msgstr ""
 
-#: src/util/dnsstub.c:507
+#: src/util/dnsstub.c:509
 #, fuzzy, c-format
 msgid "Failed to send DNS request to %s: %s\n"
 msgstr "Misslyckades att skicka HTTP-begäran till värd \"%s\": %s\n"
 
-#: src/util/dnsstub.c:513
+#: src/util/dnsstub.c:515
 #, fuzzy, c-format
 msgid "Sent DNS request to %s\n"
 msgstr "Misslyckades att skicka HTTP-begäran till värd \"%s\": %s\n"
@@ -8688,11 +8505,11 @@ msgstr "Använd --help för att få en lista på flaggor.\n"
 msgid "Missing mandatory option `%s'.\n"
 msgstr "Konfigurationsfil \"%s\" skapad.\n"
 
-#: src/util/getopt_helpers.c:68
+#: src/util/getopt_helpers.c:70
 msgid "print the version number"
 msgstr "skriv ut versionsnummer"
 
-#: src/util/getopt_helpers.c:113
+#: src/util/getopt_helpers.c:116
 #, c-format
 msgid ""
 "Arguments mandatory for long options are also mandatory for short options.\n"
@@ -8700,227 +8517,227 @@ msgstr ""
 "Argument som är obligatoriska för långa flaggor är också obligatoriska för "
 "korta flaggor.\n"
 
-#: src/util/getopt_helpers.c:201
+#: src/util/getopt_helpers.c:204
 msgid "print this help"
 msgstr "skriv ut denna hjälp"
 
-#: src/util/getopt_helpers.c:279
+#: src/util/getopt_helpers.c:282
 msgid "be verbose"
 msgstr "var informativ"
 
-#: src/util/getopt_helpers.c:420
+#: src/util/getopt_helpers.c:423
 msgid "configure logging to use LOGLEVEL"
 msgstr ""
 
-#: src/util/getopt_helpers.c:500
+#: src/util/getopt_helpers.c:503
 msgid "configure logging to write logs to FILENAME"
 msgstr ""
 
-#: src/util/getopt_helpers.c:522
+#: src/util/getopt_helpers.c:525
 #, fuzzy
 msgid "use configuration file FILENAME"
 msgstr "skriv ut ett värde från konfigurationsfilen till standard ut"
 
-#: src/util/getopt_helpers.c:559 src/util/getopt_helpers.c:763
-#: src/util/getopt_helpers.c:830
+#: src/util/getopt_helpers.c:564 src/util/getopt_helpers.c:770
+#: src/util/getopt_helpers.c:839
 #, c-format
 msgid "You must pass a number to the `%s' option.\n"
 msgstr "Du måste skicka med ett nummer till flaggan \"%s\".\n"
 
-#: src/util/getopt_helpers.c:624
+#: src/util/getopt_helpers.c:629
 #, fuzzy, c-format
 msgid "You must pass relative time to the `%s' option.\n"
 msgstr "Du måste skicka med ett nummer till flaggan \"%s\".\n"
 
-#: src/util/getopt_helpers.c:690
+#: src/util/getopt_helpers.c:695
 #, fuzzy, c-format
 msgid "You must pass absolute time to the `%s' option.\n"
 msgstr "Du måste skicka med ett nummer till flaggan \"%s\".\n"
 
-#: src/util/getopt_helpers.c:754
+#: src/util/getopt_helpers.c:760
 #, c-format
 msgid "Your input for the '%s' option has to be a non negative number \n"
 msgstr ""
 
-#: src/util/getopt_helpers.c:837
+#: src/util/getopt_helpers.c:846
 #, fuzzy, c-format
 msgid "You must pass a number below %u to the `%s' option.\n"
 msgstr "Du måste skicka med ett nummer till flaggan \"%s\".\n"
 
-#: src/util/getopt_helpers.c:923
+#: src/util/getopt_helpers.c:932
 #, c-format
 msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n"
 msgstr ""
 
-#: src/util/gnunet-config.c:157
+#: src/util/gnunet-config.c:160
 #, fuzzy, c-format
 msgid "failed to load configuration defaults"
 msgstr "Kunde inte spara konfigurationsfil \"%s\":"
 
-#: src/util/gnunet-config.c:170
-#, c-format
-msgid "--section argument is required\n"
-msgstr ""
-
 #: src/util/gnunet-config.c:173
+#, fuzzy, c-format
+msgid "%s or %s argument is required\n"
+msgstr "%s: flagga \"%s\" är tvetydig\n"
+
+#: src/util/gnunet-config.c:181
 #, c-format
 msgid "The following sections are available:\n"
 msgstr ""
 
-#: src/util/gnunet-config.c:224
+#: src/util/gnunet-config.c:232
 #, c-format
 msgid "--option argument required to set value\n"
 msgstr ""
 
-#: src/util/gnunet-config.c:263
+#: src/util/gnunet-config.c:286
 msgid "obtain option of value as a filename (with $-expansion)"
 msgstr ""
 
-#: src/util/gnunet-config.c:268
+#: src/util/gnunet-config.c:291
 msgid "name of the section to access"
 msgstr ""
 
-#: src/util/gnunet-config.c:273
+#: src/util/gnunet-config.c:296
 #, fuzzy
 msgid "name of the option to access"
 msgstr "Visa värde av alternativet"
 
-#: src/util/gnunet-config.c:278
+#: src/util/gnunet-config.c:301
 msgid "value to set"
 msgstr ""
 
-#: src/util/gnunet-config.c:282
+#: src/util/gnunet-config.c:305
 #, fuzzy
 msgid "print available configuration sections"
 msgstr "GNUnet-konfiguration"
 
-#: src/util/gnunet-config.c:286
+#: src/util/gnunet-config.c:309
 msgid "write configuration file that only contains delta to defaults"
 msgstr ""
 
-#: src/util/gnunet-config.c:299
+#: src/util/gnunet-config.c:322
 #, fuzzy
 msgid "Manipulate GNUnet configuration files"
 msgstr "skriv ut ett värde från konfigurationsfilen till standard ut"
 
-#: src/util/gnunet-ecc.c:92
+#: src/util/gnunet-ecc.c:94
 #, fuzzy, c-format
 msgid "Failed to open `%s': %s\n"
 msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
 
-#: src/util/gnunet-ecc.c:128
+#: src/util/gnunet-ecc.c:130
 #, c-format
 msgid "Generating %u keys like %s, please wait"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:141
+#: src/util/gnunet-ecc.c:143
 #, c-format
 msgid "Generating %u keys, please wait"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:182
+#: src/util/gnunet-ecc.c:184
 #, fuzzy, c-format
 msgid ""
 "\n"
 "Failed to write to `%s': %s\n"
 msgstr "Fel vid %s:%d.\n"
 
-#: src/util/gnunet-ecc.c:192
+#: src/util/gnunet-ecc.c:194
 #, fuzzy, c-format
 msgid ""
 "\n"
 "Finished!\n"
 msgstr "Slutför"
 
-#: src/util/gnunet-ecc.c:195
+#: src/util/gnunet-ecc.c:197
 #, c-format
 msgid ""
 "\n"
 "Error, %u keys not generated\n"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:288
+#: src/util/gnunet-ecc.c:290
 #, fuzzy, c-format
 msgid "Hostkeys file `%s' not found\n"
 msgstr "\"%s\" misslyckades: tabell hittades inte!\n"
 
-#: src/util/gnunet-ecc.c:303
+#: src/util/gnunet-ecc.c:305
 #, fuzzy, c-format
 msgid "Hostkeys file `%s' is empty\n"
 msgstr "antal meddelanden att använda per iteration"
 
-#: src/util/gnunet-ecc.c:332
+#: src/util/gnunet-ecc.c:334
 #, fuzzy, c-format
 msgid "Could not read hostkey file: %s\n"
 msgstr "Kunde inte skapa värdnyckel!\n"
 
-#: src/util/gnunet-ecc.c:389
+#: src/util/gnunet-ecc.c:391
 msgid "No hostkey file specified on command line\n"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:454
+#: src/util/gnunet-ecc.c:456
 msgid "list keys included in a file (for testing)"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:459
+#: src/util/gnunet-ecc.c:461
 msgid "number of keys to list included in a file (for testing)"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:464
+#: src/util/gnunet-ecc.c:466
 msgid "create COUNT public-private key pairs (for testing)"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:468
+#: src/util/gnunet-ecc.c:470
 msgid "print the public key in ASCII format"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:472
+#: src/util/gnunet-ecc.c:474
 msgid "print the private key in ASCII format"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:476
+#: src/util/gnunet-ecc.c:478
 msgid "print the public key in HEX format"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:480
+#: src/util/gnunet-ecc.c:482
 msgid "print examples of ECC operations (used for compatibility testing)"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:496
+#: src/util/gnunet-ecc.c:498
 #, fuzzy
 msgid "Manipulate GNUnet private ECC key files"
 msgstr "skriv ut ett värde från konfigurationsfilen till standard ut"
 
-#: src/util/gnunet-resolver.c:166
+#: src/util/gnunet-resolver.c:168
 msgid "perform a reverse lookup"
 msgstr ""
 
-#: src/util/gnunet-resolver.c:177
+#: src/util/gnunet-resolver.c:179
 msgid "Use build-in GNUnet stub resolver"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:240
+#: src/util/gnunet-scrypt.c:242
 #, fuzzy, c-format
 msgid "Loading hostkey from `%s' failed.\n"
 msgstr "Tolkning av HTTP-svar för URL \"%s\" misslyckades.\n"
 
-#: src/util/gnunet-scrypt.c:315
+#: src/util/gnunet-scrypt.c:317
 msgid "number of bits to require for the proof of work"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:320
+#: src/util/gnunet-scrypt.c:322
 msgid "file with private key, otherwise default is used"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:325
+#: src/util/gnunet-scrypt.c:327
 msgid "file with proof of work, otherwise default is used"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:330
+#: src/util/gnunet-scrypt.c:332
 msgid "time to wait between calculations"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:343
+#: src/util/gnunet-scrypt.c:345
 #, fuzzy
 msgid "Manipulate GNUnet proof of work files"
 msgstr "skriv ut ett värde från konfigurationsfilen till standard ut"
@@ -8929,116 +8746,131 @@ msgstr "skriv ut ett värde från konfigurationsfilen till standard ut"
 msgid "No DNS server available. DNS resolution will not be possible.\n"
 msgstr ""
 
-#: src/util/gnunet-uri.c:83
+#: src/util/gnunet-uri.c:85
 #, c-format
 msgid "No URI specified on command line\n"
 msgstr ""
 
-#: src/util/gnunet-uri.c:89
+#: src/util/gnunet-uri.c:91
 #, fuzzy, c-format
 msgid "Invalid URI: does not start with `%s'\n"
 msgstr "Ogiltig nätverksnotation (slutar inte med \";\": \"%s\")\n"
 
-#: src/util/gnunet-uri.c:96
+#: src/util/gnunet-uri.c:98
 #, c-format
 msgid "Invalid URI: fails to specify subsystem\n"
 msgstr ""
 
-#: src/util/gnunet-uri.c:106
+#: src/util/gnunet-uri.c:108
 #, c-format
 msgid "No handler known for subsystem `%s'\n"
 msgstr ""
 
-#: src/util/gnunet-uri.c:168
+#: src/util/gnunet-uri.c:170
 msgid "Perform default-actions for GNUnet URIs"
 msgstr ""
 
-#: src/util/helper.c:333
+#: src/util/helper.c:335
 #, fuzzy, c-format
 msgid "Error reading from `%s': %s\n"
 msgstr "Fel vid skapandet av användare"
 
-#: src/util/helper.c:384
+#: src/util/helper.c:386
 #, fuzzy, c-format
 msgid "Failed to parse inbound message from helper `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/util/helper.c:604
+#: src/util/helper.c:606
 #, fuzzy, c-format
 msgid "Error writing to `%s': %s\n"
 msgstr "Fel vid skapandet av användare"
 
-#: src/util/network.c:134
+#: src/util/network.c:136
 #, c-format
 msgid "Unable to shorten unix path `%s' while keeping name unique\n"
 msgstr ""
 
-#: src/util/network.c:1793 src/util/network.c:1977
+#: src/util/network.c:1794 src/util/network.c:1978
 #, c-format
 msgid ""
 "Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n"
 msgstr ""
 
-#: src/util/os_installation.c:507
+#: src/util/os_installation.c:509
 #, c-format
 msgid ""
 "Could not determine installation path for %s.  Set `%s' environment "
 "variable.\n"
 msgstr ""
 
-#: src/util/os_installation.c:879
+#: src/util/os_installation.c:881
 #, fuzzy, c-format
 msgid "Could not find binary `%s' in PATH!\n"
 msgstr "Kunde inte hitta motpart \"%s\" i routingtabell!\n"
 
-#: src/util/os_installation.c:920
+#: src/util/os_installation.c:922
 #, c-format
 msgid "Binary `%s' exists, but is not SUID\n"
 msgstr ""
 
 # drive = hard drive ?
-#: src/util/os_installation.c:951
+#: src/util/os_installation.c:953
 #, fuzzy, c-format
 msgid "CreateProcess failed for binary %s (%d).\n"
 msgstr "\"%s\" misslyckades för enhet %s: %u\n"
 
-#: src/util/os_installation.c:961
+#: src/util/os_installation.c:963
 #, c-format
 msgid "GetExitCodeProcess failed for binary %s (%d).\n"
 msgstr ""
 
-#: src/util/plugin.c:84
+#: src/util/plugin.c:86
 #, c-format
 msgid "Initialization of plugin mechanism failed: %s!\n"
 msgstr "Initiering av insticksmekanism misslyckades: %s!\n"
 
-#: src/util/plugin.c:149
+#: src/util/plugin.c:151
 #, fuzzy, c-format
 msgid "`%s' failed to resolve method '%s' with error: %s\n"
 msgstr "\"%s\" misslyckades för fil \"%s\" vid %s:%d med fel: %s\n"
 
-#: src/util/plugin.c:224
+#: src/util/plugin.c:226
 #, fuzzy, c-format
 msgid "`%s' failed for library `%s' with error: %s\n"
 msgstr "\"%s\" misslyckades vid %s:%d med fel: %s\n"
 
-#: src/util/plugin.c:383
+#: src/util/plugin.c:385
 #, fuzzy
 msgid "Could not determine plugin installation path.\n"
 msgstr "Kunde inte fastställa min publika IPv6-adress.\n"
 
-#: src/util/regex.c:132
+#: src/util/program.c:283
+#, fuzzy, c-format
+msgid "Unreadable or malformed configuration file `%s', exit ...\n"
+msgstr "Kunde inte spara konfigurationsfil \"%s\":"
+
+#: src/util/program.c:301
+#, fuzzy, c-format
+msgid "Unreadable or malformed default configuration file `%s', exit ...\n"
+msgstr "Kunde inte spara konfigurationsfil \"%s\":"
+
+#: src/util/program.c:318
+#, fuzzy
+msgid "Unreadable or malformed configuration, exit ...\n"
+msgstr "Kunde inte spara konfigurationsfil \"%s\":"
+
+#: src/util/regex.c:134
 #, c-format
 msgid "Bad mask: %d\n"
 msgstr ""
 
-#: src/util/resolver_api.c:216
+#: src/util/resolver_api.c:218
 #, c-format
 msgid ""
 "Missing `%s' for `%s' in configuration, DNS resolution will be unavailable.\n"
 msgstr ""
 
-#: src/util/resolver_api.c:237
+#: src/util/resolver_api.c:239
 #, fuzzy, c-format
 msgid ""
 "Missing `%s' or numeric IP address for `%s' of `%s' in configuration, DNS "
@@ -9047,374 +8879,489 @@ msgstr ""
 "Du måste ange ett positivt nummer för \"%s\" i konfigurationen i sektion \"%s"
 "\".\n"
 
-#: src/util/resolver_api.c:873
+#: src/util/resolver_api.c:875
 #, fuzzy, c-format
 msgid "Timeout trying to resolve hostname `%s'.\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/util/resolver_api.c:886
+#: src/util/resolver_api.c:888
 #, c-format
 msgid "Timeout trying to resolve IP address `%s'.\n"
 msgstr ""
 
-#: src/util/resolver_api.c:1071
+#: src/util/resolver_api.c:1073
 msgid "Resolver not configured correctly.\n"
 msgstr ""
 
-#: src/util/resolver_api.c:1158 src/util/resolver_api.c:1181
-#: src/util/resolver_api.c:1195
+#: src/util/resolver_api.c:1160 src/util/resolver_api.c:1183
+#: src/util/resolver_api.c:1197
 #, fuzzy, c-format
 msgid "Could not resolve our FQDN: %s\n"
 msgstr "Kunde inte slå upp \"%s\": %s\n"
 
-#: src/util/service.c:1303
-msgid ""
-"Could not bind to any of the ports I was supposed to, refusing to run!\n"
-msgstr ""
-
-#: src/util/service.c:2123
+#: src/util/service.c:674
 #, c-format
 msgid ""
 "Processing code for message of type %u did not call "
 "`GNUNET_SERVICE_client_continue' after %s\n"
 msgstr ""
 
-#: src/util/signal.c:87
+#: src/util/service.c:1862
+msgid ""
+"Could not bind to any of the ports I was supposed to, refusing to run!\n"
+msgstr ""
+
+#: src/util/signal.c:89
 #, fuzzy, c-format
 msgid "signal (%d, %p) returned %d.\n"
 msgstr "Anrop till \"%s\" returnerade %d.\n"
 
-#: src/util/socks.c:595
+#: src/util/socks.c:597
 #, c-format
 msgid "Attempting to use invalid port %d as SOCKS proxy for service `%s'.\n"
 msgstr ""
 
-#: src/util/socks.c:614
+#: src/util/socks.c:616
 #, c-format
 msgid "Attempting to proxy service `%s' to invalid port %d or hostname.\n"
 msgstr ""
 
-#: src/util/strings.c:174
+#: src/util/strings.c:176
 msgid "b"
 msgstr "b"
 
-#: src/util/strings.c:471
+#: src/util/strings.c:475
 #, c-format
 msgid "Character sets requested were `%s'->`%s'\n"
 msgstr ""
 
-#: src/util/strings.c:598
+#: src/util/strings.c:602
 msgid "Failed to expand `$HOME': environment variable `HOME' not set"
 msgstr ""
 
-#: src/util/strings.c:702
+#: src/util/strings.c:706
 msgid "µs"
 msgstr ""
 
-#: src/util/strings.c:706
+#: src/util/strings.c:710
 msgid "forever"
 msgstr ""
 
-#: src/util/strings.c:708
+#: src/util/strings.c:712
 msgid "0 ms"
 msgstr ""
 
-#: src/util/strings.c:714
+#: src/util/strings.c:718
 msgid "ms"
 msgstr "ms"
 
-#: src/util/strings.c:720
+#: src/util/strings.c:724
 msgid "s"
 msgstr "s"
 
-#: src/util/strings.c:726
+#: src/util/strings.c:730
 msgid "m"
 msgstr "m"
 
-#: src/util/strings.c:732
+#: src/util/strings.c:736
 msgid "h"
 msgstr "h"
 
-#: src/util/strings.c:739
+#: src/util/strings.c:743
 #, fuzzy
 msgid "day"
 msgstr " dagar"
 
-#: src/util/strings.c:741
+#: src/util/strings.c:745
 #, fuzzy
 msgid "days"
 msgstr " dagar"
 
-#: src/util/strings.c:770
+#: src/util/strings.c:774
 msgid "end of time"
 msgstr ""
 
-#: src/util/strings.c:1272
+#: src/util/strings.c:1277
 msgid "IPv6 address did not start with `['\n"
 msgstr ""
 
-#: src/util/strings.c:1280
+#: src/util/strings.c:1285
 msgid "IPv6 address did contain ':' to separate port number\n"
 msgstr ""
 
-#: src/util/strings.c:1286
+#: src/util/strings.c:1291
 msgid "IPv6 address did contain ']' before ':' to separate port number\n"
 msgstr ""
 
-#: src/util/strings.c:1293
+#: src/util/strings.c:1301
 msgid "IPv6 address did contain a valid port number after the last ':'\n"
 msgstr ""
 
-#: src/util/strings.c:1302
+#: src/util/strings.c:1310
 #, fuzzy, c-format
 msgid "Invalid IPv6 address `%s': %s\n"
 msgstr "Ogiltigt svar på \"%s\".\n"
 
-#: src/util/strings.c:1574 src/util/strings.c:1590
+#: src/util/strings.c:1586 src/util/strings.c:1602
 msgid "Port not in range\n"
 msgstr ""
 
-#: src/util/strings.c:1599
+#: src/util/strings.c:1611
 #, fuzzy, c-format
 msgid "Malformed port policy `%s'\n"
 msgstr "Misslyckades att starta samling.\n"
 
-#: src/util/strings.c:1682 src/util/strings.c:1713 src/util/strings.c:1761
-#: src/util/strings.c:1782
+#: src/util/strings.c:1696 src/util/strings.c:1728 src/util/strings.c:1777
+#: src/util/strings.c:1798
 #, c-format
 msgid "Invalid format for IP: `%s'\n"
 msgstr "Ogiltigt format för IP: \"%s\"\n"
 
-#: src/util/strings.c:1739
+#: src/util/strings.c:1754
 #, c-format
 msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)."
 msgstr "Ogiltig nätverksnotation (\"/%d\" är inte giltig i IPv4 CIDR)."
 
-#: src/util/strings.c:1791
+#: src/util/strings.c:1807
 #, fuzzy, c-format
 msgid "Invalid format: `%s'\n"
 msgstr "Ogiltigt format för IP: \"%s\"\n"
 
-#: src/util/strings.c:1843
+#: src/util/strings.c:1860
 #, c-format
 msgid "Invalid network notation (does not end with ';': `%s')\n"
 msgstr "Ogiltig nätverksnotation (slutar inte med \";\": \"%s\")\n"
 
-#: src/util/strings.c:1893
+#: src/util/strings.c:1914
 #, fuzzy, c-format
 msgid "Wrong format `%s' for netmask\n"
 msgstr "Fel format \"%s\" för nätmask: %s\n"
 
-#: src/util/strings.c:1924
+#: src/util/strings.c:1945
 #, fuzzy, c-format
 msgid "Wrong format `%s' for network\n"
 msgstr "Fel format \"%s\" för nätverk: %s\n"
 
-#: src/vpn/gnunet-service-vpn.c:538 src/vpn/gnunet-service-vpn.c:1805
+#: src/util/time.c:828 src/util/time.c:860
+#, c-format
+msgid "Failed to map `%s', cannot assure monotonic time!\n"
+msgstr ""
+
+#: src/util/time.c:866
+#, c-format
+msgid ""
+"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
+msgstr ""
+
+#: src/vpn/gnunet-service-vpn.c:540 src/vpn/gnunet-service-vpn.c:1807
 #, fuzzy
 msgid "# Active channels"
 msgstr "Nätverksanslutning"
 
-#: src/vpn/gnunet-service-vpn.c:597
+#: src/vpn/gnunet-service-vpn.c:599
 #, fuzzy
 msgid "# Messages dropped in cadet queue (overflow)"
 msgstr "# byte kastade via UDP (utgående)"
 
-#: src/vpn/gnunet-service-vpn.c:751
+#: src/vpn/gnunet-service-vpn.c:753
 #, fuzzy
 msgid "# ICMP packets received from cadet"
 msgstr "Meddelande mottaget från klient är ogiltig.\n"
 
-#: src/vpn/gnunet-service-vpn.c:1094
+#: src/vpn/gnunet-service-vpn.c:1096
 #, fuzzy
 msgid "# UDP packets received from cadet"
 msgstr "Meddelande mottaget från klient är ogiltig.\n"
 
-#: src/vpn/gnunet-service-vpn.c:1253
+#: src/vpn/gnunet-service-vpn.c:1255
 #, fuzzy
 msgid "# TCP packets received from cadet"
 msgstr "Meddelande mottaget från klient är ogiltig.\n"
 
-#: src/vpn/gnunet-service-vpn.c:1465
+#: src/vpn/gnunet-service-vpn.c:1467
 #, fuzzy
 msgid "# Cadet channels created"
 msgstr "# PING-meddelanden skapade"
 
-#: src/vpn/gnunet-service-vpn.c:1685
+#: src/vpn/gnunet-service-vpn.c:1687
 #, c-format
 msgid "Protocol %u not supported, dropping\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:1824
+#: src/vpn/gnunet-service-vpn.c:1826
 #, fuzzy
 msgid "# Packets dropped (channel not yet online)"
 msgstr "# byte kastade via UDP (utgående)"
 
-#: src/vpn/gnunet-service-vpn.c:2004
+#: src/vpn/gnunet-service-vpn.c:2006
 msgid "# ICMPv4 packets dropped (not allowed)"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2025
+#: src/vpn/gnunet-service-vpn.c:2027
 msgid "# ICMPv6 packets dropped (not allowed)"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2233
+#: src/vpn/gnunet-service-vpn.c:2235
 #, fuzzy
 msgid "# Packets received from TUN interface"
 msgstr "Meddelande mottaget från klient är ogiltig.\n"
 
-#: src/vpn/gnunet-service-vpn.c:2266 src/vpn/gnunet-service-vpn.c:2302
+#: src/vpn/gnunet-service-vpn.c:2268 src/vpn/gnunet-service-vpn.c:2304
 #, c-format
 msgid "Packet received for unmapped destination `%s' (dropping it)\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2312
+#: src/vpn/gnunet-service-vpn.c:2314
 msgid "Received IPv4 packet with options (dropping it)\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2326
+#: src/vpn/gnunet-service-vpn.c:2328
 #, c-format
 msgid "Received packet of unknown protocol %d from TUN (dropping it)\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2365
+#: src/vpn/gnunet-service-vpn.c:2367
 msgid "Failed to find unallocated IPv4 address in VPN's range\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2420
+#: src/vpn/gnunet-service-vpn.c:2422
 msgid "Failed to find unallocated IPv6 address in VPN's range\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2462 src/vpn/gnunet-service-vpn.c:2684
+#: src/vpn/gnunet-service-vpn.c:2464 src/vpn/gnunet-service-vpn.c:2686
 #, fuzzy
 msgid "# Active destinations"
 msgstr "Nätverksanslutning"
 
-#: src/vpn/gnunet-service-vpn.c:2733
+#: src/vpn/gnunet-service-vpn.c:2735
 msgid "Failed to allocate IP address for new destination\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2996
+#: src/vpn/gnunet-service-vpn.c:2998
 #, fuzzy
 msgid "Must specify valid IPv6 address"
 msgstr "\"%s\" är inte tillgänglig."
 
-#: src/vpn/gnunet-service-vpn.c:3020
+#: src/vpn/gnunet-service-vpn.c:3022
 msgid "Must specify valid IPv6 mask"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:3028
+#: src/vpn/gnunet-service-vpn.c:3030
 msgid "IPv6 support disabled as this system does not support IPv6\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:3041
+#: src/vpn/gnunet-service-vpn.c:3043
 #, fuzzy
 msgid "Must specify valid IPv4 address"
 msgstr "\"%s\" är inte tillgänglig."
 
-#: src/vpn/gnunet-service-vpn.c:3054
+#: src/vpn/gnunet-service-vpn.c:3056
 msgid "Must specify valid IPv4 mask"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:3064
+#: src/vpn/gnunet-service-vpn.c:3066
 msgid "IPv4 support disabled as this system does not support IPv4\n"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:145
+#: src/vpn/gnunet-vpn.c:147
 #, fuzzy
 msgid "Error creating tunnel\n"
 msgstr "Klar med skapandet av värdnyckel.\n"
 
-#: src/vpn/gnunet-vpn.c:189 src/vpn/gnunet-vpn.c:220
+#: src/vpn/gnunet-vpn.c:191 src/vpn/gnunet-vpn.c:222
 #, fuzzy, c-format
 msgid "Option `%s' makes no sense with option `%s'.\n"
 msgstr "Kommando \"%s\" kräver ett argument (\"%s\").\n"
 
-#: src/vpn/gnunet-vpn.c:202
+#: src/vpn/gnunet-vpn.c:204
 #, fuzzy, c-format
 msgid "Option `%s' or `%s' is required.\n"
 msgstr "%s: flagga \"%s\" är tvetydig\n"
 
-#: src/vpn/gnunet-vpn.c:214
+#: src/vpn/gnunet-vpn.c:216
 #, fuzzy, c-format
 msgid "Option `%s' or `%s' is required when using option `%s'.\n"
 msgstr "Kommando \"%s\" kräver ett argument (\"%s\").\n"
 
-#: src/vpn/gnunet-vpn.c:234
+#: src/vpn/gnunet-vpn.c:236
 #, fuzzy, c-format
 msgid "`%s' is not a valid peer identifier.\n"
 msgstr "\"%s\" är inte en vanlig fil.\n"
 
-#: src/vpn/gnunet-vpn.c:254
+#: src/vpn/gnunet-vpn.c:256
 #, fuzzy, c-format
 msgid "`%s' is not a valid IP address.\n"
 msgstr "\"%s\" är inte tillgänglig."
 
-#: src/vpn/gnunet-vpn.c:290
+#: src/vpn/gnunet-vpn.c:292
 msgid "request that result should be an IPv4 address"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:295
+#: src/vpn/gnunet-vpn.c:297
 msgid "request that result should be an IPv6 address"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:301
+#: src/vpn/gnunet-vpn.c:303
 msgid "how long should the mapping be valid for new tunnels?"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:307
+#: src/vpn/gnunet-vpn.c:309
 msgid "destination IP for the tunnel"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:313
+#: src/vpn/gnunet-vpn.c:315
 msgid "peer offering the service we would like to access"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:319
+#: src/vpn/gnunet-vpn.c:321
 msgid "name of the service we would like to access"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:324
+#: src/vpn/gnunet-vpn.c:326
 #, fuzzy
 msgid "service is offered via TCP"
 msgstr "# byte mottogs via TCP"
 
-#: src/vpn/gnunet-vpn.c:329
+#: src/vpn/gnunet-vpn.c:331
 #, fuzzy
 msgid "service is offered via UDP"
 msgstr "# byte mottagna via UDP"
 
-#: src/vpn/gnunet-vpn.c:342
+#: src/vpn/gnunet-vpn.c:344
 msgid "Setup tunnels via VPN."
 msgstr ""
 
-#: src/zonemaster/gnunet-service-zonemaster.c:836
-#: src/zonemaster/gnunet-service-zonemaster-monitor.c:414
+#: src/zonemaster/gnunet-service-zonemaster.c:838
+#: src/zonemaster/gnunet-service-zonemaster-monitor.c:416
 #, fuzzy
 msgid "Failed to connect to the namestore!\n"
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/include/gnunet_common.h:770 src/include/gnunet_common.h:777
-#: src/include/gnunet_common.h:787
+#: src/include/gnunet_common.h:772 src/include/gnunet_common.h:779
+#: src/include/gnunet_common.h:789
 #, fuzzy, c-format
 msgid "Assertion failed at %s:%d. Aborting.\n"
 msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n"
 
-#: src/include/gnunet_common.h:795
+#: src/include/gnunet_common.h:797
 #, fuzzy, c-format
 msgid "Assertion failed at %s:%d.\n"
 msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n"
 
-#: src/include/gnunet_common.h:807
+#: src/include/gnunet_common.h:809
 #, c-format
 msgid "External protocol violation detected at %s:%d.\n"
 msgstr ""
 
-#: src/include/gnunet_common.h:834 src/include/gnunet_common.h:843
+#: src/include/gnunet_common.h:836 src/include/gnunet_common.h:845
 #, c-format
 msgid "`%s' failed on file `%s' at %s:%d with error: %s\n"
 msgstr "\"%s\" misslyckades för fil \"%s\" vid %s:%d med fel: %s\n"
 
+#, fuzzy
+#~ msgid "Invalid tunnel owner `%s'\n"
+#~ msgstr "Ogiltigt format för IP: \"%s\"\n"
+
+#, fuzzy
+#~ msgid "Provide information about a particular tunnel"
+#~ msgstr "Skriv ut information om GNUnets motparter."
+
+#, fuzzy
+#~ msgid "Failed to store membership information!\n"
+#~ msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
+
+#, fuzzy
+#~ msgid "Failed to test membership!\n"
+#~ msgstr "Kunde inte skapa värdnyckel!\n"
+
+#, fuzzy
+#~ msgid "Dropping invalid fragment\n"
+#~ msgstr "Ogiltigt argument: \"%s\"\n"
+
+#, fuzzy
+#~ msgid "Failed to store fragment\n"
+#~ msgstr "Misslyckades att starta samling.\n"
+
+#, fuzzy
+#~ msgid "Failed to get fragment!\n"
+#~ msgstr "Kunde inte skapa värdnyckel!\n"
+
+#, fuzzy
+#~ msgid "Failed to get message!\n"
+#~ msgstr "Kunde inte skapa värdnyckel!\n"
+
+#, fuzzy
+#~ msgid "Failed to get message fragment!\n"
+#~ msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
+
+#, fuzzy
+#~ msgid "Failed to get master counters!\n"
+#~ msgstr "Kunde inte skapa värdnyckel!\n"
+
+#, fuzzy
+#~ msgid "Failed to begin modifying state: %d\n"
+#~ msgstr "Misslyckades att starta samling.\n"
+
+#, fuzzy
+#~ msgid "Failed to modify state: %d\n"
+#~ msgstr "Misslyckades att starta samling.\n"
+
+#, fuzzy
+#~ msgid "Failed to end modifying state!\n"
+#~ msgstr "Misslyckades att starta samling.\n"
+
+#, fuzzy
+#~ msgid "Failed to begin synchronizing state!\n"
+#~ msgstr "Kunde inte skapa värdnyckel!\n"
+
+#, fuzzy
+#~ msgid "Failed to end synchronizing state!\n"
+#~ msgstr "Kunde inte skapa värdnyckel!\n"
+
+#, fuzzy
+#~ msgid "Failed to reset state!\n"
+#~ msgstr "Kunde inte skapa värdnyckel!\n"
+
+#, fuzzy
+#~ msgid "Failed to get state variable!\n"
+#~ msgstr "Kunde inte skapa värdnyckel!\n"
+
+#, fuzzy
+#~ msgid "Unable to initialize Mysql.\n"
+#~ msgstr "Kunde inte initiera SQLite.\n"
+
+#, fuzzy
+#~ msgid "Failed to run SQL statement `%s'\n"
+#~ msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
+
+#, fuzzy
+#~ msgid "`%s' failed at %s:%d with error: %s (%d)\n"
+#~ msgstr "\"%s\" misslyckades vid %s:%d med fel: %s\n"
+
+#, fuzzy
+#~ msgid "--place missing or invalid.\n"
+#~ msgstr "Ogiltigt argument: \"%s\"\n"
+
+#, fuzzy
+#~ msgid "name or public key of ego"
+#~ msgstr "Ogiltigt argument: \"%s\"\n"
+
+#, fuzzy
+#~ msgid "wait for incoming messages"
+#~ msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
+
+#, fuzzy
+#~ msgid "GNS name"
+#~ msgstr "Visa _namn"
+
+#, fuzzy
+#~ msgid "method name"
+#~ msgstr "Visa _namn"
+
+#, fuzzy
+#~ msgid "number of messages to replay from history"
+#~ msgstr "antal meddelanden att använda per iteration"
+
 #, fuzzy
 #~ msgid "Could not resolve `%s' (%s): %s\n"
 #~ msgstr "Kunde inte slå upp \"%s\": %s\n"
@@ -11711,9 +11658,6 @@ msgstr "\"%s\" misslyckades för fil \"%s\" vid %s:%d med fel: %s\n"
 #~ msgid "allow SIZE bytes of memory for the local table"
 #~ msgstr "tillåt STORLEK byte av minne för lokaltabellen"
 
-#~ msgid "Superflous arguments (ignored).\n"
-#~ msgstr "Onödiga argument (ignorerade).\n"
-
 #~ msgid "Call to `%s' with value '%.*s' (%d bytes).\n"
 #~ msgstr "Anrop till \"%s\" med värde \"%.*s\" (%d byte).\n"
 
index 85131f055d8d5182442544e2e73ec03c9d88a204..5f30f6f8f1d62a8531354ddfe7bda536b86182b1 100644 (file)
--- a/po/vi.po
+++ b/po/vi.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnunet 0.8.0a\n"
 "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2018-10-20 11:13+0200\n"
+"POT-Creation-Date: 2019-02-13 00:37+0100\n"
 "PO-Revision-Date: 2008-09-10 22:05+0930\n"
 "Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
 "Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
@@ -19,1048 +19,1042 @@ msgstr ""
 "Plural-Forms: nplurals=1; plural=0;\n"
 "X-Generator: LocFactoryEditor 1.7b3\n"
 
-#: src/arm/gnunet-arm.c:154
+#: src/arm/gnunet-arm.c:156
 #, fuzzy, c-format
 msgid "Failed to remove configuration file %s\n"
 msgstr "Không thể lưu tập tin cấu hình « %s »:"
 
-#: src/arm/gnunet-arm.c:160
+#: src/arm/gnunet-arm.c:162
 #, fuzzy, c-format
 msgid "Failed to remove servicehome directory %s\n"
 msgstr "Lỗi truy cập đến thư mục nhà GNUnet « %s »\n"
 
-#: src/arm/gnunet-arm.c:220 src/testbed/gnunet-service-testbed_peers.c:1137
+#: src/arm/gnunet-arm.c:222 src/testbed/gnunet-service-testbed_peers.c:1139
 msgid "Message was sent successfully"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:222 src/testbed/gnunet-service-testbed_peers.c:1139
+#: src/arm/gnunet-arm.c:224 src/testbed/gnunet-service-testbed_peers.c:1141
 #, fuzzy
 msgid "We disconnected from ARM before we could send a request"
 msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải"
 
-#: src/arm/gnunet-arm.c:224 src/testbed/gnunet-service-testbed_peers.c:1141
+#: src/arm/gnunet-arm.c:226 src/testbed/gnunet-service-testbed_peers.c:1143
 #, fuzzy
 msgid "Unknown request status"
 msgstr "Không rõ người dùng « %s »\n"
 
-#: src/arm/gnunet-arm.c:240
+#: src/arm/gnunet-arm.c:242
 #, fuzzy
 msgid "is stopped"
 msgstr "# các byte trong kho dữ liệu"
 
-#: src/arm/gnunet-arm.c:242
+#: src/arm/gnunet-arm.c:244
 #, fuzzy
 msgid "is starting"
 msgstr "« %s » đang đăng ký trình điều khiển %d\n"
 
-#: src/arm/gnunet-arm.c:244
+#: src/arm/gnunet-arm.c:246
 #, fuzzy
 msgid "is stopping"
 msgstr "# các byte trong kho dữ liệu"
 
-#: src/arm/gnunet-arm.c:246
+#: src/arm/gnunet-arm.c:248
 #, fuzzy
 msgid "is starting already"
 msgstr "« %s » đang đăng ký trình điều khiển %d\n"
 
-#: src/arm/gnunet-arm.c:248
+#: src/arm/gnunet-arm.c:250
 #, fuzzy
 msgid "is stopping already"
 msgstr "« %s » đang đăng ký trình điều khiển %d\n"
 
-#: src/arm/gnunet-arm.c:250
+#: src/arm/gnunet-arm.c:252
 #, fuzzy
 msgid "is started already"
 msgstr "« %s » đang đăng ký trình điều khiển %d\n"
 
-#: src/arm/gnunet-arm.c:252
+#: src/arm/gnunet-arm.c:254
 #, fuzzy
 msgid "is stopped already"
 msgstr "« %s » đang đăng ký trình điều khiển %d\n"
 
-#: src/arm/gnunet-arm.c:254
+#: src/arm/gnunet-arm.c:256
 #, fuzzy
 msgid "service is not known to ARM"
 msgstr "Không gian tên « %s » có đánh giá %d.\n"
 
-#: src/arm/gnunet-arm.c:256
+#: src/arm/gnunet-arm.c:258
 #, fuzzy
 msgid "service failed to start"
 msgstr "Lỗi bắt đầu thu thập.\n"
 
-#: src/arm/gnunet-arm.c:258
+#: src/arm/gnunet-arm.c:260
 #, fuzzy
 msgid "service cannot be manipulated because ARM is shutting down"
 msgstr "« %s » đang tắt.\n"
 
-#: src/arm/gnunet-arm.c:260
+#: src/arm/gnunet-arm.c:262
 #, fuzzy
 msgid "Unknown result code."
 msgstr "Không rõ người dùng « %s »\n"
 
-#: src/arm/gnunet-arm.c:292
+#: src/arm/gnunet-arm.c:295
 msgid "Fatal error initializing ARM API.\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:320 src/arm/gnunet-arm.c:329
+#: src/arm/gnunet-arm.c:324 src/arm/gnunet-arm.c:333
 #, fuzzy, c-format
 msgid "Failed to start the ARM service: %s\n"
 msgstr "Lỗi bắt đầu thu thập.\n"
 
-#: src/arm/gnunet-arm.c:363
+#: src/arm/gnunet-arm.c:368
 #, fuzzy, c-format
 msgid "Failed to send a stop request to the ARM service: %s\n"
 msgstr "Lỗi kết nối đến gnunetd.\n"
 
-#: src/arm/gnunet-arm.c:374
+#: src/arm/gnunet-arm.c:379
 #, fuzzy, c-format
 msgid "Failed to stop the ARM service: %s\n"
 msgstr "Lỗi vào phòng « %s »\n"
 
-#: src/arm/gnunet-arm.c:413
+#: src/arm/gnunet-arm.c:419
 #, fuzzy, c-format
 msgid "Failed to send a request to start the `%s' service: %s\n"
 msgstr "Lỗi kết nối đến gnunetd.\n"
 
-#: src/arm/gnunet-arm.c:423
+#: src/arm/gnunet-arm.c:429
 #, fuzzy, c-format
 msgid "Failed to start the `%s' service: %s\n"
 msgstr "Lỗi bắt đầu thu thập.\n"
 
-#: src/arm/gnunet-arm.c:460
+#: src/arm/gnunet-arm.c:467
 #, fuzzy, c-format
 msgid "Failed to send a request to kill the `%s' service: %%s\n"
 msgstr "Lỗi kết nối đến gnunetd.\n"
 
-#: src/arm/gnunet-arm.c:471
+#: src/arm/gnunet-arm.c:478
 #, fuzzy, c-format
 msgid "Failed to kill the `%s' service: %s\n"
 msgstr "Lỗi chạy %s: %s %d\n"
 
-#: src/arm/gnunet-arm.c:511
+#: src/arm/gnunet-arm.c:519
 #, fuzzy, c-format
 msgid "Failed to request a list of services: %s\n"
 msgstr "Lỗi bắt đầu thu thập.\n"
 
-#: src/arm/gnunet-arm.c:520
+#: src/arm/gnunet-arm.c:528
 #, fuzzy
 msgid "Error communicating with ARM. ARM not running?\n"
 msgstr "Cổng để liên lạc với giao diện người dùng GNUnet"
 
-#: src/arm/gnunet-arm.c:526
+#: src/arm/gnunet-arm.c:534
 #, fuzzy
 msgid "Running services:\n"
 msgstr "Đang nạp và khởi động dùng « %s ».\n"
 
-#: src/arm/gnunet-arm.c:614
+#: src/arm/gnunet-arm.c:623
 #, c-format
 msgid "Now only monitoring, press CTRL-C to stop.\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:646
+#: src/arm/gnunet-arm.c:656
 #, c-format
 msgid "Stopped %s.\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:649
+#: src/arm/gnunet-arm.c:659
 #, fuzzy, c-format
 msgid "Starting %s...\n"
 msgstr "Đang bắt đầu tài về « %s »\n"
 
-#: src/arm/gnunet-arm.c:652
+#: src/arm/gnunet-arm.c:662
 #, c-format
 msgid "Stopping %s...\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:666
+#: src/arm/gnunet-arm.c:676
 #, fuzzy, c-format
 msgid "Unknown status %u for service %s.\n"
 msgstr "Không rõ người dùng « %s »\n"
 
-#: src/arm/gnunet-arm.c:767
+#: src/arm/gnunet-arm.c:766
 #, fuzzy
 msgid "stop all GNUnet services"
 msgstr "hủy cài đặt dịch vụ GNUnet"
 
-#: src/arm/gnunet-arm.c:773
+#: src/arm/gnunet-arm.c:771
 msgid "start a particular service"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:779
+#: src/arm/gnunet-arm.c:776
 msgid "stop a particular service"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:784
+#: src/arm/gnunet-arm.c:780
 #, fuzzy
 msgid "start all GNUnet default services"
 msgstr "hủy cài đặt dịch vụ GNUnet"
 
-#: src/arm/gnunet-arm.c:789
+#: src/arm/gnunet-arm.c:784
 #, fuzzy
 msgid "stop and start all GNUnet default services"
 msgstr "hủy cài đặt dịch vụ GNUnet"
 
-#: src/arm/gnunet-arm.c:793
+#: src/arm/gnunet-arm.c:788
 msgid "delete config file and directory on exit"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:798
+#: src/arm/gnunet-arm.c:792
 msgid "monitor ARM activities"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:803
+#: src/arm/gnunet-arm.c:796
 msgid "don't print status messages"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:809
+#: src/arm/gnunet-arm.c:801
 msgid "exit with error status if operation does not finish after DELAY"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:814
+#: src/arm/gnunet-arm.c:805
 #, fuzzy
 msgid "list currently running services"
 msgstr "Đang nạp và khởi động dùng « %s ».\n"
 
-#: src/arm/gnunet-arm.c:819
+#: src/arm/gnunet-arm.c:809
 msgid "don't let gnunet-service-arm inherit standard output"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:824
+#: src/arm/gnunet-arm.c:813
 msgid "don't let gnunet-service-arm inherit standard error"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:837
+#: src/arm/gnunet-arm.c:828
 msgid "Control services and the Automated Restart Manager (ARM)"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:386 src/transport/plugin_transport_tcp.c:1118
-#: src/transport/plugin_transport_xt.c:1118
-#: src/transport/tcp_service_legacy.c:555 src/util/service.c:610
+#: src/arm/gnunet-service-arm.c:388 src/transport/plugin_transport_tcp.c:1120
+#: src/transport/plugin_transport_xt.c:1120
+#: src/transport/tcp_service_legacy.c:557 src/util/service.c:1167
 #, c-format
 msgid ""
 "Disabling IPv6 support for service `%s', failed to create IPv6 socket: %s\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:410 src/arm/gnunet-service-arm.c:416
-#: src/transport/plugin_transport_tcp.c:1137
-#: src/transport/plugin_transport_tcp.c:1143
-#: src/transport/plugin_transport_tcp.c:3823
-#: src/transport/plugin_transport_xt.c:1137
-#: src/transport/plugin_transport_xt.c:1143
-#: src/transport/plugin_transport_xt.c:3831
-#: src/transport/tcp_service_legacy.c:574
-#: src/transport/tcp_service_legacy.c:580 src/util/service.c:635
-#: src/util/service.c:641
+#: src/arm/gnunet-service-arm.c:412 src/arm/gnunet-service-arm.c:418
+#: src/transport/plugin_transport_tcp.c:1139
+#: src/transport/plugin_transport_tcp.c:1145
+#: src/transport/plugin_transport_tcp.c:3829
+#: src/transport/plugin_transport_xt.c:1139
+#: src/transport/plugin_transport_xt.c:1145
+#: src/transport/plugin_transport_xt.c:3833
+#: src/transport/tcp_service_legacy.c:576
+#: src/transport/tcp_service_legacy.c:582 src/util/service.c:1192
+#: src/util/service.c:1198
 #, c-format
 msgid "Require valid port number for service `%s' in configuration!\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:455 src/transport/plugin_transport_tcp.c:1174
-#: src/transport/plugin_transport_xt.c:1174
-#: src/transport/tcp_service_legacy.c:611 src/util/client.c:504
-#: src/util/service.c:680
+#: src/arm/gnunet-service-arm.c:457 src/transport/plugin_transport_tcp.c:1176
+#: src/transport/plugin_transport_xt.c:1176
+#: src/transport/tcp_service_legacy.c:613 src/util/client.c:506
+#: src/util/service.c:1237
 #, c-format
 msgid "UNIXPATH `%s' too long, maximum length is %llu\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:460 src/transport/plugin_transport_tcp.c:1178
-#: src/transport/plugin_transport_xt.c:1178
-#: src/transport/tcp_service_legacy.c:615 src/util/client.c:509
-#: src/util/service.c:685
+#: src/arm/gnunet-service-arm.c:462 src/transport/plugin_transport_tcp.c:1180
+#: src/transport/plugin_transport_xt.c:1180
+#: src/transport/tcp_service_legacy.c:617 src/util/client.c:511
+#: src/util/service.c:1242
 #, fuzzy, c-format
 msgid "Using `%s' instead\n"
 msgstr "%s: tùy chọn « %s » là mơ hồ\n"
 
-#: src/arm/gnunet-service-arm.c:493 src/transport/plugin_transport_tcp.c:1209
-#: src/transport/plugin_transport_xt.c:1209
-#: src/transport/tcp_service_legacy.c:646 src/util/service.c:721
+#: src/arm/gnunet-service-arm.c:495 src/transport/plugin_transport_tcp.c:1211
+#: src/transport/plugin_transport_xt.c:1211
+#: src/transport/tcp_service_legacy.c:648 src/util/service.c:1278
 #, c-format
 msgid ""
 "Disabling UNIX domain socket support for service `%s', failed to create UNIX "
 "domain socket: %s\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:515 src/transport/plugin_transport_tcp.c:1226
-#: src/transport/plugin_transport_xt.c:1226
-#: src/transport/tcp_service_legacy.c:663 src/util/service.c:739
+#: src/arm/gnunet-service-arm.c:517 src/transport/plugin_transport_tcp.c:1228
+#: src/transport/plugin_transport_xt.c:1228
+#: src/transport/tcp_service_legacy.c:665 src/util/service.c:1296
 #, c-format
 msgid "Have neither PORT nor UNIXPATH for service `%s', but one is required\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:554
-#: src/transport/plugin_transport_http_server.c:2682
-#: src/transport/plugin_transport_tcp.c:1257
-#: src/transport/plugin_transport_xt.c:1257
-#: src/transport/tcp_service_legacy.c:694 src/util/service.c:780
+#: src/arm/gnunet-service-arm.c:556
+#: src/transport/plugin_transport_http_server.c:2688
+#: src/transport/plugin_transport_tcp.c:1259
+#: src/transport/plugin_transport_xt.c:1259
+#: src/transport/tcp_service_legacy.c:696 src/util/service.c:1337
 #, fuzzy, c-format
 msgid "Failed to resolve `%s': %s\n"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/arm/gnunet-service-arm.c:573
-#: src/transport/plugin_transport_http_server.c:2700
-#: src/transport/plugin_transport_tcp.c:1276
-#: src/transport/plugin_transport_xt.c:1276
-#: src/transport/tcp_service_legacy.c:713 src/util/service.c:800
+#: src/arm/gnunet-service-arm.c:575
+#: src/transport/plugin_transport_http_server.c:2706
+#: src/transport/plugin_transport_tcp.c:1278
+#: src/transport/plugin_transport_xt.c:1278
+#: src/transport/tcp_service_legacy.c:715 src/util/service.c:1357
 #, fuzzy, c-format
 msgid "Failed to find %saddress for `%s'.\n"
 msgstr "Lỗi đóng kết đến cổng %s %d.\n"
 
-#: src/arm/gnunet-service-arm.c:984
+#: src/arm/gnunet-service-arm.c:986
 #, fuzzy, c-format
 msgid "Failed to start service `%s'\n"
 msgstr "Lỗi bắt đầu thu thập.\n"
 
-#: src/arm/gnunet-service-arm.c:995
+#: src/arm/gnunet-service-arm.c:997
 #, fuzzy, c-format
 msgid "Starting service `%s'\n"
 msgstr "Đang bắt đầu tài về « %s »\n"
 
-#: src/arm/gnunet-service-arm.c:1107
+#: src/arm/gnunet-service-arm.c:1109
 #, fuzzy, c-format
 msgid "Unable to create socket for service `%s': %s\n"
 msgstr "Không thể tạo tài khoản người dùng:"
 
-#: src/arm/gnunet-service-arm.c:1142
+#: src/arm/gnunet-service-arm.c:1144
 #, c-format
 msgid "Unable to bind listening socket for service `%s' to address `%s': %s\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1185
+#: src/arm/gnunet-service-arm.c:1187
 #, c-format
 msgid "ARM now monitors connections to service `%s' at `%s'\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1364
+#: src/arm/gnunet-service-arm.c:1346
 #, fuzzy, c-format
 msgid "Preparing to stop `%s'\n"
 msgstr "Đang bắt đầu tài lên « %s ».\n"
 
-#: src/arm/gnunet-service-arm.c:1669
+#: src/arm/gnunet-service-arm.c:1651
 #, fuzzy, c-format
 msgid "Restarting service `%s'.\n"
 msgstr "Đang nạp và khởi động dùng « %s ».\n"
 
-#: src/arm/gnunet-service-arm.c:1830
+#: src/arm/gnunet-service-arm.c:1812
 msgid "exit"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1835
+#: src/arm/gnunet-service-arm.c:1817
 msgid "signal"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1840
+#: src/arm/gnunet-service-arm.c:1822
 #, fuzzy
 msgid "unknown"
 msgstr "Lỗi không rõ"
 
-#: src/arm/gnunet-service-arm.c:1846
+#: src/arm/gnunet-service-arm.c:1828
 #, fuzzy, c-format
 msgid "Service `%s' took %s to terminate\n"
 msgstr "Dịch vụ đã bị xoá.\n"
 
-#: src/arm/gnunet-service-arm.c:1872
+#: src/arm/gnunet-service-arm.c:1854
 #, c-format
 msgid "Service `%s' terminated normally, will restart at any time\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1888
+#: src/arm/gnunet-service-arm.c:1870
 #, c-format
 msgid "Service `%s' terminated with status %s/%d, will restart in %s\n"
 msgstr ""
 
-#: src/arm/mockup-service.c:40
+#: src/arm/mockup-service.c:42
 msgid "Initiating shutdown as requested by client.\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:2779 src/ats/gnunet-ats-solver-eval.c:2820
+#: src/ats/gnunet-ats-solver-eval.c:2781 src/ats/gnunet-ats-solver-eval.c:2822
 #, c-format
 msgid ""
 "Could not load quota for network `%s':  `%s', assigning default bandwidth "
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:2797
+#: src/ats/gnunet-ats-solver-eval.c:2799
 #, c-format
 msgid ""
 "No outbound quota configured for network `%s', assigning default bandwidth "
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:2838
+#: src/ats/gnunet-ats-solver-eval.c:2840
 #, c-format
 msgid ""
 "No outbound quota configure for network `%s', assigning default bandwidth "
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3292 src/ats-tests/gnunet-solver-eval.c:937
+#: src/ats/gnunet-ats-solver-eval.c:3294 src/ats-tests/gnunet-solver-eval.c:939
 msgid "solver to use"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3297 src/ats-tests/gnunet-solver-eval.c:943
-#: src/ats-tests/gnunet-solver-eval.c:948
+#: src/ats/gnunet-ats-solver-eval.c:3299 src/ats-tests/gnunet-solver-eval.c:945
+#: src/ats-tests/gnunet-solver-eval.c:950
 msgid "experiment to use"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3304
+#: src/ats/gnunet-ats-solver-eval.c:3306
 #, fuzzy
 msgid "print logging"
 msgstr "Theo dõi"
 
-#: src/ats/gnunet-ats-solver-eval.c:3309
+#: src/ats/gnunet-ats-solver-eval.c:3311
 msgid "save logging to disk"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3314
+#: src/ats/gnunet-ats-solver-eval.c:3316
 msgid "disable normalization"
 msgstr ""
 
-#: src/ats/gnunet-service-ats_plugins.c:302
+#: src/ats/gnunet-service-ats-new.c:756
+#: src/ats/gnunet-service-ats_plugins.c:451
+#, fuzzy, c-format
+msgid "Failed to initialize solver `%s'!\n"
+msgstr "Không thể sơ khởi SQLite: %s.\n"
+
+#: src/ats/gnunet-service-ats_plugins.c:304
 #, c-format
 msgid ""
 "Could not load %s quota for network `%s':  `%s', assigning default bandwidth "
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-service-ats_plugins.c:312
+#: src/ats/gnunet-service-ats_plugins.c:314
 #, c-format
 msgid "%s quota configured for network `%s' is %llu\n"
 msgstr ""
 
-#: src/ats/gnunet-service-ats_plugins.c:357
+#: src/ats/gnunet-service-ats_plugins.c:359
 #, c-format
 msgid ""
 "No %s-quota configured for network `%s', assigning default bandwidth %llu\n"
 msgstr ""
 
-#: src/ats/gnunet-service-ats_plugins.c:449
-#, fuzzy, c-format
-msgid "Failed to initialize solver `%s'!\n"
-msgstr "Không thể sơ khởi SQLite: %s.\n"
+#: src/ats/plugin_ats2_common.c:90
+#, c-format
+msgid ""
+"Could not load %s quota for network `%s': `%s', assigning default bandwidth "
+"%llu\n"
+msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:1272
+#: src/ats/plugin_ats_mlp.c:1274
 msgid "Problem size too large, cannot allocate memory!\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:1868
+#: src/ats/plugin_ats_mlp.c:1870
 #, fuzzy, c-format
 msgid "Adding address for peer `%s' multiple times\n"
 msgstr "Không thể lấy địa chỉ của đồng đẳng « %s ».\n"
 
-#: src/ats/plugin_ats_mlp.c:1912
+#: src/ats/plugin_ats_mlp.c:1914
 #, fuzzy, c-format
 msgid "Updating address property for peer `%s' %p not added before\n"
 msgstr "Không thể lấy địa chỉ của đồng đẳng « %s ».\n"
 
-#: src/ats/plugin_ats_mlp.c:2474
+#: src/ats/plugin_ats_mlp.c:2476
 msgid ""
 "MLP solver is not optimizing for anything, changing to feasibility check\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:2514 src/ats/plugin_ats_mlp.c:2531
-#: src/ats/plugin_ats_mlp.c:2563 src/ats/plugin_ats_mlp.c:2581
-#: src/ats/plugin_ats_mlp.c:2600 src/ats/plugin_ats_proportional.c:1139
-#: src/ats/plugin_ats_ril.c:2610 src/ats/plugin_ats_ril.c:2627
-#: src/ats/plugin_ats_ril.c:2644 src/ats/plugin_ats_ril.c:2661
-#: src/ats/plugin_ats_ril.c:2678 src/ats/plugin_ats_ril.c:2695
-#: src/ats/plugin_ats_ril.c:2712 src/ats/plugin_ats_ril.c:2729
+#: src/ats/plugin_ats_mlp.c:2516 src/ats/plugin_ats_mlp.c:2533
+#: src/ats/plugin_ats_mlp.c:2565 src/ats/plugin_ats_mlp.c:2583
+#: src/ats/plugin_ats_mlp.c:2602 src/ats/plugin_ats_proportional.c:1141
+#: src/ats/plugin_ats_ril.c:2612 src/ats/plugin_ats_ril.c:2629
+#: src/ats/plugin_ats_ril.c:2646 src/ats/plugin_ats_ril.c:2663
+#: src/ats/plugin_ats_ril.c:2680 src/ats/plugin_ats_ril.c:2697
+#: src/ats/plugin_ats_ril.c:2714 src/ats/plugin_ats_ril.c:2731
 #, fuzzy, c-format
 msgid "Invalid %s configuration %f \n"
 msgstr "Không thể lưu tập tin cấu hình « %s »:"
 
-#: src/ats/plugin_ats_mlp.c:2669
+#: src/ats/plugin_ats_mlp.c:2671
 #, c-format
 msgid ""
 "Adjusting inconsistent outbound quota configuration for network `%s', is "
 "%llu must be at least %llu\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:2678
+#: src/ats/plugin_ats_mlp.c:2680
 #, c-format
 msgid ""
 "Adjusting inconsistent inbound quota configuration for network `%s', is %llu "
 "must be at least %llu\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:2688
+#: src/ats/plugin_ats_mlp.c:2690
 #, c-format
 msgid ""
 "Adjusting outbound quota configuration for network `%s'from %llu to %.0f\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:2697
+#: src/ats/plugin_ats_mlp.c:2699
 #, c-format
 msgid ""
 "Adjusting inbound quota configuration for network `%s' from %llu to %.0f\n"
 msgstr ""
 
-#: src/ats/plugin_ats_proportional.c:1162
+#: src/ats/plugin_ats_proportional.c:1164
 #, fuzzy, c-format
 msgid "Invalid %s configuration %f\n"
 msgstr "Không thể lưu tập tin cấu hình « %s »:"
 
-#: src/ats-tests/ats-testing.c:420
+#: src/ats-tests/ats-testing.c:422
 #, c-format
 msgid "Connected master [%u] with slave [%u]\n"
 msgstr ""
 
-#: src/ats-tests/ats-testing.c:427
+#: src/ats-tests/ats-testing.c:429
 #, fuzzy, c-format
 msgid "Failed to connect master peer [%u] with slave [%u]\n"
 msgstr "Lỗi kết nối đến gnunetd.\n"
 
-#: src/ats-tests/ats-testing-log.c:835
+#: src/ats-tests/ats-testing-log.c:837
 #, fuzzy
 msgid "Stop logging\n"
 msgstr "Theo dõi"
 
-#: src/ats-tests/ats-testing-log.c:890
+#: src/ats-tests/ats-testing-log.c:892
 #, fuzzy, c-format
 msgid "Start logging `%s'\n"
 msgstr "Đang bắt đầu tài về « %s »\n"
 
-#: src/ats-tests/gnunet-ats-sim.c:88
+#: src/ats-tests/gnunet-ats-sim.c:90
 #, c-format
 msgid ""
 "Master [%u]: sent: %u KiB in %u sec. = %u KiB/s, received: %u KiB in %u sec. "
 "= %u KiB/s\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:305
+#: src/ats-tool/gnunet-ats.c:307
 #, c-format
 msgid "%u address resolutions had a timeout\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:309
+#: src/ats-tool/gnunet-ats.c:311
 #, c-format
 msgid "ATS returned stat_results for %u addresses\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:393
+#: src/ats-tool/gnunet-ats.c:395
 #, fuzzy, c-format
 msgid ""
 "Peer `%s' plugin `%s', address `%s', `%s' bw out: %u Bytes/s, bw in %u Bytes/"
 "s, %s\n"
 msgstr "Đồng đẳng « %s » có mức tin cậy %8u và địa chỉ « %s »\n"
 
-#: src/ats-tool/gnunet-ats.c:400
+#: src/ats-tool/gnunet-ats.c:402
 msgid "active "
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:400
+#: src/ats-tool/gnunet-ats.c:402
 msgid "inactive "
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:510
+#: src/ats-tool/gnunet-ats.c:512
 #, fuzzy, c-format
 msgid "Removed address of peer `%s' with plugin `%s'\n"
 msgstr "Đã nạp truyền tải « %s »\n"
 
-#: src/ats-tool/gnunet-ats.c:703
+#: src/ats-tool/gnunet-ats.c:705
 #, c-format
 msgid "Quota for network `%11s' (in/out): %10s / %10s\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:746 src/ats-tool/gnunet-ats.c:759
+#: src/ats-tool/gnunet-ats.c:748 src/ats-tool/gnunet-ats.c:761
 #, fuzzy, c-format
 msgid "Failed to parse peer identity `%s'\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/ats-tool/gnunet-ats.c:771
+#: src/ats-tool/gnunet-ats.c:773
 #, c-format
 msgid "Please select one operation: %s or %s or %s or %s or %s\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:793 src/ats-tool/gnunet-ats.c:818
-#: src/ats-tool/gnunet-ats.c:849 src/ats-tool/gnunet-ats.c:894
+#: src/ats-tool/gnunet-ats.c:795 src/ats-tool/gnunet-ats.c:820
+#: src/ats-tool/gnunet-ats.c:851 src/ats-tool/gnunet-ats.c:896
 #, fuzzy
 msgid "Cannot connect to ATS service, exiting...\n"
 msgstr "Lỗi sơ khởi dịch vụ « %s ».\n"
 
-#: src/ats-tool/gnunet-ats.c:804 src/ats-tool/gnunet-ats.c:830
+#: src/ats-tool/gnunet-ats.c:806 src/ats-tool/gnunet-ats.c:832
 #, fuzzy
 msgid "Cannot issue request to ATS service, exiting...\n"
 msgstr "Lỗi sơ khởi dịch vụ « %s ».\n"
 
-#: src/ats-tool/gnunet-ats.c:860
+#: src/ats-tool/gnunet-ats.c:862
 #, fuzzy
 msgid "No preference type given!\n"
 msgstr "In ra thông tin về các đồng đẳng GNUnet."
 
-#: src/ats-tool/gnunet-ats.c:867
+#: src/ats-tool/gnunet-ats.c:869
 #, fuzzy
 msgid "No peer given!\n"
 msgstr "chưa đưa ra tên"
 
-#: src/ats-tool/gnunet-ats.c:885
+#: src/ats-tool/gnunet-ats.c:887
 msgid "Valid type required\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:948
+#: src/ats-tool/gnunet-ats.c:950
 msgid "get list of active addresses currently used"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:952
+#: src/ats-tool/gnunet-ats.c:954
 msgid "get list of all active addresses"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:958
+#: src/ats-tool/gnunet-ats.c:960
 #, fuzzy
 msgid "connect to PEER"
 msgstr "Lỗi kết nối đến gnunetd.\n"
 
-#: src/ats-tool/gnunet-ats.c:962
+#: src/ats-tool/gnunet-ats.c:964
 #, fuzzy
 msgid "do not resolve IP addresses to hostnames"
 msgstr "không quyết định các tên máy"
 
-#: src/ats-tool/gnunet-ats.c:967
+#: src/ats-tool/gnunet-ats.c:969
 msgid "monitor mode"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:972
+#: src/ats-tool/gnunet-ats.c:974
 #, fuzzy
 msgid "set preference for the given peer"
 msgstr "In ra thông tin về các đồng đẳng GNUnet."
 
-#: src/ats-tool/gnunet-ats.c:977
+#: src/ats-tool/gnunet-ats.c:979
 msgid "print all configured quotas"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:982
+#: src/ats-tool/gnunet-ats.c:984
 msgid "peer id"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:988
+#: src/ats-tool/gnunet-ats.c:990
 msgid "preference type to set: latency | bandwidth"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:994
+#: src/ats-tool/gnunet-ats.c:996
 msgid "preference value"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:999
+#: src/ats-tool/gnunet-ats.c:1001
 msgid "verbose output (include ATS address properties)"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:1009
+#: src/ats-tool/gnunet-ats.c:1011
 #, fuzzy
 msgid "Print information about ATS state"
 msgstr "In ra thông tin về các đồng đẳng GNUnet."
 
-#: src/auction/gnunet-auction-create.c:161
+#: src/auction/gnunet-auction-create.c:163
 msgid "description of the item to be sold"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:167
+#: src/auction/gnunet-auction-create.c:169
 msgid "mapping of possible prices"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:173
+#: src/auction/gnunet-auction-create.c:175
 msgid "max duration per round"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:179
+#: src/auction/gnunet-auction-create.c:181
 msgid "duration until auction starts"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:184
+#: src/auction/gnunet-auction-create.c:186
 msgid ""
 "number of items to sell\n"
 "0 for first price auction\n"
 ">0 for vickrey/M+1st price auction"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:191
+#: src/auction/gnunet-auction-create.c:193
 #, fuzzy
 msgid "public auction outcome"
 msgstr "Ứng dụng bị hủy bỏ."
 
-#: src/auction/gnunet-auction-create.c:196
+#: src/auction/gnunet-auction-create.c:198
 msgid "keep running in foreground until auction completes"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:207
+#: src/auction/gnunet-auction-create.c:209
 msgid "create a new auction and start listening for bidders"
 msgstr ""
 
-#: src/auction/gnunet-auction-info.c:74 src/auction/gnunet-auction-join.c:74
-#: src/conversation/gnunet-conversation-test.c:252
-#: src/revocation/gnunet-revocation.c:560 src/template/gnunet-template.c:74
+#: src/auction/gnunet-auction-info.c:76 src/auction/gnunet-auction-join.c:76
+#: src/conversation/gnunet-conversation-test.c:254
+#: src/revocation/gnunet-revocation.c:562 src/template/gnunet-template.c:76
 msgid "help text"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:705
+#: src/cadet/gnunet-cadet.c:631
 #, 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:744
-#, fuzzy, c-format
-msgid "Invalid tunnel owner `%s'\n"
-msgstr "Địa chỉ IP định dạng sai: %s\n"
-
-#: src/cadet/gnunet-cadet.c:817
+#: src/cadet/gnunet-cadet.c:718
 msgid "Extra arguments are not applicable in combination with this option.\n"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:908
+#: src/cadet/gnunet-cadet.c:795
 #, fuzzy, c-format
 msgid "Invalid target `%s'\n"
 msgstr "Đối số không hợp lệ cho « %s ».\n"
 
-#: src/cadet/gnunet-cadet.c:945
+#: src/cadet/gnunet-cadet.c:832
 #, fuzzy
 msgid "No action requested\n"
 msgstr "Thu thập bị dừng.\n"
 
-#: src/cadet/gnunet-cadet.c:970
+#: src/cadet/gnunet-cadet.c:857
 #, 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:975
+#: src/cadet/gnunet-cadet.c:861
 msgid "Activate echo mode"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:980
-msgid "Dump debug information to STDERR"
-msgstr ""
-
-#: src/cadet/gnunet-cadet.c:986
+#: src/cadet/gnunet-cadet.c:866
 msgid "Listen for connections using a shared secret among sender and recipient"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:993
+#: src/cadet/gnunet-cadet.c:871
 #, 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:999
+#: src/cadet/gnunet-cadet.c:875
 #, fuzzy
 msgid "Provide information about all peers"
 msgstr "In ra thông tin về các đồng đẳng GNUnet."
 
-#: src/cadet/gnunet-cadet.c:1005
-#, 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:1011
+#: src/cadet/gnunet-cadet.c:879
 #, fuzzy
 msgid "Provide information about all tunnels"
 msgstr "In ra thông tin về các đồng đẳng GNUnet."
 
-#: src/consensus/gnunet-consensus-profiler.c:521
-#: src/secretsharing/gnunet-secretsharing-profiler.c:608
+#: src/consensus/gnunet-consensus-profiler.c:523
+#: src/secretsharing/gnunet-secretsharing-profiler.c:610
 #, fuzzy
 msgid "number of peers in consensus"
 msgstr "số lần lặp lại"
 
-#: src/consensus/gnunet-consensus-profiler.c:527
+#: src/consensus/gnunet-consensus-profiler.c:529
 msgid ""
 "how many peers (random selection without replacement) receive one value?"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:533
-#: src/set/gnunet-set-profiler.c:431 src/set/gnunet-set-profiler.c:437
-#: src/set/gnunet-set-profiler.c:460
+#: src/consensus/gnunet-consensus-profiler.c:535
+#: src/set/gnunet-set-profiler.c:433 src/set/gnunet-set-profiler.c:439
+#: src/set/gnunet-set-profiler.c:462
 #, fuzzy
 msgid "number of values"
 msgstr "số lần lặp lại"
 
-#: src/consensus/gnunet-consensus-profiler.c:539
+#: src/consensus/gnunet-consensus-profiler.c:541
 #, fuzzy
 msgid "consensus timeout"
 msgstr "# các khoá phiên chạy được chấp nhận"
 
-#: src/consensus/gnunet-consensus-profiler.c:546
+#: src/consensus/gnunet-consensus-profiler.c:548
 msgid "delay until consensus starts"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:552
-#: src/set/gnunet-set-profiler.c:478
+#: src/consensus/gnunet-consensus-profiler.c:554
+#: src/set/gnunet-set-profiler.c:480
 msgid "write statistics to file"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:557
+#: src/consensus/gnunet-consensus-profiler.c:559
 msgid "distribute elements to a static subset of good peers"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:562
+#: src/consensus/gnunet-consensus-profiler.c:564
 msgid "be more verbose (print received values)"
 msgstr ""
 
-#: src/conversation/conversation_api.c:513
-#: src/conversation/conversation_api_call.c:492
+#: src/conversation/conversation_api.c:515
+#: src/conversation/conversation_api_call.c:494
 msgid "Connection to conversation service lost, trying to reconnect\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:275
+#: src/conversation/gnunet-conversation.c:277
 #, c-format
 msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:300
+#: src/conversation/gnunet-conversation.c:302
 #, c-format
 msgid "Call from `%s' terminated\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:335
+#: src/conversation/gnunet-conversation.c:337
 #, c-format
 msgid "Call from `%s' suspended by other user\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:340
+#: src/conversation/gnunet-conversation.c:342
 #, c-format
 msgid "Call from `%s' resumed by other user\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:358
+#: src/conversation/gnunet-conversation.c:360
 #, c-format
 msgid "Ego `%s' no longer available, phone is now down.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:373
+#: src/conversation/gnunet-conversation.c:375
 #, fuzzy
 msgid "Failed to setup phone (internal error)\n"
 msgstr "Lỗi lấy thông kê về truyền tải.\n"
 
-#: src/conversation/gnunet-conversation.c:385
+#: src/conversation/gnunet-conversation.c:387
 #, c-format
 msgid "Phone active at `%s'.  Type `/help' for a list of available commands\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:409
+#: src/conversation/gnunet-conversation.c:411
 #, c-format
 msgid "Resolved address of `%s'. Now ringing other party.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:416
+#: src/conversation/gnunet-conversation.c:418
 #, fuzzy, c-format
 msgid "Connection established to `%s'\n"
 msgstr "%s bị lỗi tại %s:%d: « %s »\n"
 
-#: src/conversation/gnunet-conversation.c:423
+#: src/conversation/gnunet-conversation.c:425
 #, fuzzy, c-format
 msgid "Failed to resolve `%s'\n"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/conversation/gnunet-conversation.c:431
+#: src/conversation/gnunet-conversation.c:433
 #, c-format
 msgid "Call to `%s' terminated\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:440
+#: src/conversation/gnunet-conversation.c:442
 #, c-format
 msgid "Connection to `%s' suspended (by other user)\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:446
+#: src/conversation/gnunet-conversation.c:448
 #, c-format
 msgid "Connection to `%s' resumed (by other user)\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:451
+#: src/conversation/gnunet-conversation.c:453
 msgid "Error with the call, restarting it\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:522
+#: src/conversation/gnunet-conversation.c:524
 #, fuzzy, c-format
 msgid "Unknown command `%s'\n"
 msgstr "Không rõ câu lệnh « %s ».\n"
 
-#: src/conversation/gnunet-conversation.c:538
-#: src/conversation/gnunet-conversation.c:552
+#: src/conversation/gnunet-conversation.c:540
+#: src/conversation/gnunet-conversation.c:554
 #, c-format
 msgid "Ego `%s' not available\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:545
-#: src/conversation/gnunet-conversation.c:601
+#: src/conversation/gnunet-conversation.c:547
+#: src/conversation/gnunet-conversation.c:603
 msgid "You are calling someone else already, hang up first!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:560
-#: src/conversation/gnunet-conversation.c:614
+#: src/conversation/gnunet-conversation.c:562
+#: src/conversation/gnunet-conversation.c:616
 #, c-format
 msgid "You are answering call from `%s', hang up or suspend that call first!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:570
+#: src/conversation/gnunet-conversation.c:572
 msgid "Call recipient missing.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:625
+#: src/conversation/gnunet-conversation.c:627
 msgid "There is no incoming call to accept here!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:642
+#: src/conversation/gnunet-conversation.c:644
 #, c-format
 msgid "There is no incoming call `%s' to accept right now!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:673
+#: src/conversation/gnunet-conversation.c:675
 msgid "We currently do not have an address.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:697
+#: src/conversation/gnunet-conversation.c:699
 #, c-format
 msgid "We are currently trying to locate the private key for the ego `%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:702
+#: src/conversation/gnunet-conversation.c:704
 #, c-format
 msgid "We are listening for incoming calls for ego `%s' on line `%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:708
-#: src/conversation/gnunet-conversation.c:732
+#: src/conversation/gnunet-conversation.c:710
+#: src/conversation/gnunet-conversation.c:734
 #, c-format
 msgid "You are having a conversation with `%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:713
+#: src/conversation/gnunet-conversation.c:715
 msgid ""
 "We had an internal error setting up our phone line. You can still make "
 "calls.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:722
+#: src/conversation/gnunet-conversation.c:724
 #, fuzzy, c-format
 msgid "We are trying to find the network address to call `%s'.\n"
 msgstr "GNUnet bây giờ sử dụng địa chỉ IP %s.\n"
 
-#: src/conversation/gnunet-conversation.c:727
+#: src/conversation/gnunet-conversation.c:729
 #, c-format
 msgid "We are calling `%s', their phone should be ringing.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:746
+#: src/conversation/gnunet-conversation.c:748
 msgid "Calls waiting:\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:752
+#: src/conversation/gnunet-conversation.c:754
 #, fuzzy, c-format
 msgid "#%u: `%s'\n"
 msgstr "Tôi là đồng đẳng « %s ».\n"
 
-#: src/conversation/gnunet-conversation.c:781
-#: src/conversation/gnunet-conversation.c:796
+#: src/conversation/gnunet-conversation.c:783
+#: src/conversation/gnunet-conversation.c:798
 msgid "There is no call that could be suspended right now.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:829
-#: src/conversation/gnunet-conversation.c:845
+#: src/conversation/gnunet-conversation.c:831
+#: src/conversation/gnunet-conversation.c:847
 msgid "There is no call that could be resumed right now.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:852
+#: src/conversation/gnunet-conversation.c:854
 #, c-format
 msgid "Already talking with `%s', cannot resume a call right now.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:861
+#: src/conversation/gnunet-conversation.c:863
 msgid "There is no incoming call to resume here!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:878
+#: src/conversation/gnunet-conversation.c:880
 #, c-format
 msgid "There is no incoming call `%s' to resume right now!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:913
+#: src/conversation/gnunet-conversation.c:915
 msgid "There is no call that could be cancelled right now.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:921
+#: src/conversation/gnunet-conversation.c:923
 msgid "There is no incoming call to refuse here!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:938
+#: src/conversation/gnunet-conversation.c:940
 #, c-format
 msgid "There is no incoming call `%s' to refuse right now!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:964
+#: src/conversation/gnunet-conversation.c:966
 msgid "Use `/address' to find out which address this phone should have in GNS"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:966
+#: src/conversation/gnunet-conversation.c:968
 msgid "Use `/call USER.gnu' to call USER"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:968
+#: src/conversation/gnunet-conversation.c:970
 msgid "Use `/accept #NUM' to accept incoming call #NUM"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:970
+#: src/conversation/gnunet-conversation.c:972
 msgid "Use `/suspend' to suspend the active call"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:972
+#: src/conversation/gnunet-conversation.c:974
 msgid ""
 "Use `/resume [#NUM]' to resume a call, #NUM is needed to resume incoming "
 "calls, no argument is needed to resume the current outgoing call."
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:974
+#: src/conversation/gnunet-conversation.c:976
 msgid "Use `/cancel' to reject or terminate a call"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:976
+#: src/conversation/gnunet-conversation.c:978
 msgid "Use `/status' to print status information"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:978
+#: src/conversation/gnunet-conversation.c:980
 #, fuzzy
 msgid "Use `/quit' to terminate gnunet-conversation"
 msgstr "Gõ chuỗi « /quit » để thoát khỏi trình gnunet-chat"
 
-#: src/conversation/gnunet-conversation.c:980
+#: src/conversation/gnunet-conversation.c:982
 msgid "Use `/help command' to get help for a specific command"
 msgstr "Gõ chuỗi « /help LỆNH » để xem trợ giúp về lệnh đó"
 
-#: src/conversation/gnunet-conversation.c:1196
+#: src/conversation/gnunet-conversation.c:1198
 #, fuzzy, c-format
 msgid "Name of our ego changed to `%s'\n"
 msgstr "Không thể tạo miền tên.\n"
 
-#: src/conversation/gnunet-conversation.c:1209
+#: src/conversation/gnunet-conversation.c:1211
 #, fuzzy, c-format
 msgid "Our ego `%s' was deleted!\n"
 msgstr "Biệt hiệu « %s » bị xoá.\n"
 
-#: src/conversation/gnunet-conversation.c:1247
+#: src/conversation/gnunet-conversation.c:1249
 #, fuzzy
 msgid "You must specify the NAME of an ego to use\n"
 msgstr "Phải ghi rõ chỉ một tên tập tin để chèn.\n"
 
-#: src/conversation/gnunet-conversation.c:1271
+#: src/conversation/gnunet-conversation.c:1273
 #, fuzzy
 msgid "Failed to start gnunet-helper-w32-console\n"
 msgstr "Lỗi bắt đầu thu thập.\n"
 
-#: src/conversation/gnunet-conversation.c:1300
+#: src/conversation/gnunet-conversation.c:1302
 msgid "sets the NAME of the ego to use for the caller ID"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:1305
+#: src/conversation/gnunet-conversation.c:1307
 msgid "sets the LINE to use for the phone"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:1334
+#: src/conversation/gnunet-conversation.c:1336
 msgid "Enables having a conversation with other GNUnet users."
 msgstr ""
 
-#: src/conversation/gnunet-conversation-test.c:118
+#: src/conversation/gnunet-conversation-test.c:120
 #, c-format
 msgid ""
 "\n"
 "End of transmission.  Have a GNU day.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation-test.c:143
+#: src/conversation/gnunet-conversation-test.c:145
 #, c-format
 msgid ""
 "\n"
@@ -1068,1921 +1062,1917 @@ msgid ""
 "settings are working..."
 msgstr ""
 
-#: src/conversation/gnunet-conversation-test.c:214
+#: src/conversation/gnunet-conversation-test.c:216
 #, c-format
 msgid ""
 "We will now be recording you for %s. After that time, the recording will be "
 "played back to you..."
 msgstr ""
 
-#: src/conversation/gnunet_gst.c:620
-#: src/conversation/gnunet-helper-audio-playback-gst.c:359
+#: src/conversation/gnunet_gst.c:622
+#: src/conversation/gnunet-helper-audio-playback-gst.c:361
 #, c-format
 msgid "Read error from STDIN: %d %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:323
+#: src/conversation/gnunet-helper-audio-playback.c:325
 #, fuzzy, c-format
 msgid "pa_stream_write() failed: %s\n"
 msgstr "SMTP: « %s » bị lỗi: %s\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:625
+#: src/conversation/gnunet-helper-audio-playback.c:627
 msgid "gnunet-helper-audio-playback - Got signal, exiting\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:651
-#: src/conversation/gnunet-helper-audio-record.c:561
+#: src/conversation/gnunet-helper-audio-playback.c:653
+#: src/conversation/gnunet-helper-audio-record.c:563
 #, fuzzy
 msgid "Connection established.\n"
 msgstr "Thu thập bị dừng.\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:656
-#: src/conversation/gnunet-helper-audio-record.c:566
+#: src/conversation/gnunet-helper-audio-playback.c:658
+#: src/conversation/gnunet-helper-audio-record.c:568
 #, fuzzy, c-format
 msgid "pa_stream_new() failed: %s\n"
 msgstr "SMTP: « %s » bị lỗi: %s\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:670
+#: src/conversation/gnunet-helper-audio-playback.c:672
 #, c-format
 msgid "pa_stream_connect_playback() failed: %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:683
-#: src/conversation/gnunet-helper-audio-record.c:592
+#: src/conversation/gnunet-helper-audio-playback.c:685
+#: src/conversation/gnunet-helper-audio-record.c:594
 #, fuzzy, c-format
 msgid "Connection failure: %s\n"
 msgstr "%s bị lỗi tại %s:%d: « %s »\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:704
-#: src/conversation/gnunet-helper-audio-record.c:615
+#: src/conversation/gnunet-helper-audio-playback.c:706
+#: src/conversation/gnunet-helper-audio-record.c:617
 msgid "Wrong Spec\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:710
-#: src/conversation/gnunet-helper-audio-record.c:621
+#: src/conversation/gnunet-helper-audio-playback.c:712
+#: src/conversation/gnunet-helper-audio-record.c:623
 #, fuzzy
 msgid "pa_mainloop_new() failed.\n"
 msgstr "Lỗi nội bộ : khẳng định không thành công tại %s:%d.\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:724
-#: src/conversation/gnunet-helper-audio-record.c:636
+#: src/conversation/gnunet-helper-audio-playback.c:726
+#: src/conversation/gnunet-helper-audio-record.c:638
 #, fuzzy
 msgid "pa_context_new() failed.\n"
 msgstr "Lỗi nội bộ : khẳng định không thành công tại %s:%d.\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:731
-#: src/conversation/gnunet-helper-audio-record.c:642
+#: src/conversation/gnunet-helper-audio-playback.c:733
+#: src/conversation/gnunet-helper-audio-record.c:644
 #, fuzzy, c-format
 msgid "pa_context_connect() failed: %s\n"
 msgstr "# của các đồng đẳng đã kết nối"
 
-#: src/conversation/gnunet-helper-audio-playback.c:737
-#: src/conversation/gnunet-helper-audio-record.c:648
+#: src/conversation/gnunet-helper-audio-playback.c:739
+#: src/conversation/gnunet-helper-audio-record.c:650
 #, fuzzy
 msgid "pa_mainloop_run() failed.\n"
 msgstr "Lỗi nội bộ : khẳng định không thành công tại %s:%d.\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:816
+#: src/conversation/gnunet-helper-audio-playback.c:818
 #, c-format
 msgid "Read error from STDIN: %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:351
+#: src/conversation/gnunet-helper-audio-record.c:353
 #, fuzzy, c-format
 msgid "opus_encode_float() failed: %s. Aborting\n"
 msgstr "# của các đồng đẳng đã kết nối"
 
-#: src/conversation/gnunet-helper-audio-record.c:430
+#: src/conversation/gnunet-helper-audio-record.c:432
 #, fuzzy, c-format
 msgid "pa_stream_peek() failed: %s\n"
 msgstr "SMTP: « %s » bị lỗi: %s\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:472
+#: src/conversation/gnunet-helper-audio-record.c:474
 msgid "Got signal, exiting.\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:498
+#: src/conversation/gnunet-helper-audio-record.c:500
 #, fuzzy
 msgid "Stream successfully created.\n"
 msgstr "Không đủ quyền cho « %s ».\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:503
+#: src/conversation/gnunet-helper-audio-record.c:505
 #, fuzzy, c-format
 msgid "pa_stream_get_buffer_attr() failed: %s\n"
 msgstr "SMTP: « %s » bị lỗi: %s\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:511
+#: src/conversation/gnunet-helper-audio-record.c:513
 #, c-format
 msgid "Buffer metrics: maxlength=%u, fragsize=%u\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:515
+#: src/conversation/gnunet-helper-audio-record.c:517
 #, c-format
 msgid "Using sample spec '%s', channel map '%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:522
+#: src/conversation/gnunet-helper-audio-record.c:524
 #, fuzzy, c-format
 msgid "Connected to device %s (%u, %ssuspended).\n"
 msgstr "« %s » được kết nối tới « %s ».\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:531
+#: src/conversation/gnunet-helper-audio-record.c:533
 #, c-format
 msgid "Stream error: %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:579
+#: src/conversation/gnunet-helper-audio-record.c:581
 #, fuzzy, c-format
 msgid "pa_stream_connect_record() failed: %s\n"
 msgstr "Gặp lỗi khi tải lên tập tin: %s\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:693
+#: src/conversation/gnunet-helper-audio-record.c:695
 #, fuzzy
 msgid "ogg_stream_init() failed.\n"
 msgstr "SMTP: « %s » bị lỗi: %s\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:738
+#: src/conversation/gnunet-helper-audio-record.c:740
 #, fuzzy, c-format
 msgid "Failed to allocate %u bytes for second packet\n"
 msgstr "Lỗi tạo thư mục tạm thời."
 
-#: src/conversation/gnunet-service-conversation.c:1303
+#: src/conversation/gnunet-service-conversation.c:1305
 #, fuzzy, c-format
 msgid "Could not open line, port %s already in use!\n"
 msgstr "Không thể kết nối tới %s:%u: %s\n"
 
-#: src/conversation/microphone.c:119
+#: src/conversation/microphone.c:121
 #, fuzzy
 msgid "Could not start record audio helper\n"
 msgstr "Không thể truy cập đến thông tin về không gian tên.\n"
 
-#: src/conversation/plugin_gnsrecord_conversation.c:70
+#: src/conversation/plugin_gnsrecord_conversation.c:72
 #, c-format
 msgid "PHONE version %u not supported\n"
 msgstr ""
 
-#: src/conversation/plugin_gnsrecord_conversation.c:133
-#: src/conversation/plugin_gnsrecord_conversation.c:147
+#: src/conversation/plugin_gnsrecord_conversation.c:135
+#: src/conversation/plugin_gnsrecord_conversation.c:149
 #, fuzzy, c-format
 msgid "Unable to parse PHONE record `%s'\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/conversation/speaker.c:73
+#: src/conversation/speaker.c:75
 #, fuzzy
 msgid "Could not start playback audio helper.\n"
 msgstr "Không thể nạp phần bổ sung truyền tải « %s »\n"
 
-#: src/core/gnunet-core.c:88
+#: src/core/gnunet-core.c:90
 #, fuzzy
 msgid "fresh connection"
 msgstr "# của các đồng đẳng đã kết nối"
 
-#: src/core/gnunet-core.c:91
+#: src/core/gnunet-core.c:93
 msgid "key sent"
 msgstr ""
 
-#: src/core/gnunet-core.c:94
+#: src/core/gnunet-core.c:96
 #, fuzzy
 msgid "key received"
 msgstr "# các khoá phiên chạy bị từ chối"
 
-#: src/core/gnunet-core.c:97
+#: src/core/gnunet-core.c:99
 #, fuzzy
 msgid "connection established"
 msgstr "Thu thập bị dừng.\n"
 
-#: src/core/gnunet-core.c:100
+#: src/core/gnunet-core.c:102
 msgid "rekeying"
 msgstr ""
 
-#: src/core/gnunet-core.c:103
+#: src/core/gnunet-core.c:105
 #, fuzzy
 msgid "disconnected"
 msgstr "« %.*s » được kết nối tới « %.*s ».\n"
 
-#: src/core/gnunet-core.c:110
+#: src/core/gnunet-core.c:112
 msgid "Connection to CORE service lost (reconnecting)"
 msgstr ""
 
-#: src/core/gnunet-core.c:113
+#: src/core/gnunet-core.c:115
 #, fuzzy
 msgid "unknown state"
 msgstr "Lỗi không rõ"
 
-#: src/core/gnunet-core.c:118
+#: src/core/gnunet-core.c:120
 #, c-format
 msgid "%24s: %-30s %4s (timeout in %6s)\n"
 msgstr ""
 
-#: src/core/gnunet-core.c:142 src/peerinfo-tool/gnunet-peerinfo.c:726
+#: src/core/gnunet-core.c:144 src/peerinfo-tool/gnunet-peerinfo.c:728
 #, fuzzy, c-format
 msgid "Invalid command line argument `%s'\n"
 msgstr "Đối số không hợp lệ cho « %s ».\n"
 
-#: src/core/gnunet-core.c:153
+#: src/core/gnunet-core.c:155
 #, fuzzy
 msgid "Failed to connect to CORE service!\n"
 msgstr "Lỗi kết nối đến gnunetd.\n"
 
-#: src/core/gnunet-core.c:175 src/transport/gnunet-transport.c:1447
+#: src/core/gnunet-core.c:177 src/transport/gnunet-transport.c:1449
 #, fuzzy
 msgid "provide information about all current connections (continuously)"
 msgstr "In ra thông tin về các đồng đẳng GNUnet."
 
-#: src/core/gnunet-core.c:184
+#: src/core/gnunet-core.c:186
 #, fuzzy
 msgid "Print information about connected peers."
 msgstr "In ra thông tin về các đồng đẳng GNUnet."
 
-#: src/core/gnunet-service-core.c:345
+#: src/core/gnunet-service-core.c:347
 #, fuzzy
 msgid "# send requests dropped (disconnected)"
 msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải"
 
-#: src/core/gnunet-service-core.c:369
+#: src/core/gnunet-service-core.c:371
 msgid "# dequeuing CAR (duplicate request)"
 msgstr ""
 
-#: src/core/gnunet-service-core.c:441
+#: src/core/gnunet-service-core.c:443
 #, fuzzy, c-format
 msgid "# bytes of messages of type %u received"
 msgstr "# các byte nhiễu được nhận"
 
-#: src/core/gnunet-service-core.c:539
+#: src/core/gnunet-service-core.c:541
 #, fuzzy
 msgid "# messages discarded (session disconnected)"
 msgstr "# các thông báo được chắp liền"
 
-#: src/core/gnunet-service-core.c:877
+#: src/core/gnunet-service-core.c:879
 #, fuzzy, c-format
 msgid "# messages of type %u discarded (client busy)"
 msgstr "# các byte nhiễu được nhận"
 
-#: src/core/gnunet-service-core.c:986
+#: src/core/gnunet-service-core.c:988
 #, fuzzy
 msgid "Core service is lacking HOSTKEY configuration setting.  Exiting.\n"
 msgstr "Lưu cấu hình ngay bây giờ không?"
 
-#: src/core/gnunet-service-core.c:1007
+#: src/core/gnunet-service-core.c:1009
 #, fuzzy, c-format
 msgid "Core service of `%s' ready.\n"
 msgstr "Không gian tên « %s » có đánh giá %d.\n"
 
-#: src/core/gnunet-service-core_kx.c:615
+#: src/core/gnunet-service-core_kx.c:617
 msgid "# bytes encrypted"
 msgstr "# các byte đã mã hoá"
 
-#: src/core/gnunet-service-core_kx.c:675
+#: src/core/gnunet-service-core_kx.c:677
 msgid "# bytes decrypted"
 msgstr "# các byte đã giải mã"
 
-#: src/core/gnunet-service-core_kx.c:777
+#: src/core/gnunet-service-core_kx.c:779
 #, fuzzy
 msgid "# PAYLOAD dropped (out of order)"
 msgstr "# các byte loại bỏ bởi UDP (đi ra)"
 
-#: src/core/gnunet-service-core_kx.c:827
+#: src/core/gnunet-service-core_kx.c:829
 msgid "# key exchanges initiated"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:889
+#: src/core/gnunet-service-core_kx.c:891
 msgid "# key exchanges stopped"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:923
+#: src/core/gnunet-service-core_kx.c:925
 #, fuzzy
 msgid "# PING messages transmitted"
 msgstr "# các thông báo PING được tạo"
 
-#: src/core/gnunet-service-core_kx.c:990
+#: src/core/gnunet-service-core_kx.c:992
 msgid "# old ephemeral keys ignored"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1003
+#: src/core/gnunet-service-core_kx.c:1005
 #, fuzzy
 msgid "# duplicate ephemeral keys ignored"
 msgstr "# các thông báo phát hiện dht được nhận"
 
-#: src/core/gnunet-service-core_kx.c:1038
+#: src/core/gnunet-service-core_kx.c:1040
 #, fuzzy
 msgid "# EPHEMERAL_KEYs rejected (bad signature)"
 msgstr "# các thông báo được chắp liền"
 
-#: src/core/gnunet-service-core_kx.c:1052
+#: src/core/gnunet-service-core_kx.c:1054
 #, c-format
 msgid ""
 "EPHEMERAL_KEY from peer `%s' rejected as its validity range does not match "
 "our system time (%llu not in [%llu,%llu]).\n"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1058
+#: src/core/gnunet-service-core_kx.c:1060
 #, fuzzy
 msgid "# EPHEMERAL_KEY messages rejected due to time"
 msgstr "# các thông báo được chắp liền"
 
-#: src/core/gnunet-service-core_kx.c:1078
+#: src/core/gnunet-service-core_kx.c:1080
 #, fuzzy
 msgid "# valid ephemeral keys received"
 msgstr "# các thông báo phát hiện dht được nhận"
 
-#: src/core/gnunet-service-core_kx.c:1178
-#: src/transport/gnunet-service-transport_validation.c:1126
+#: src/core/gnunet-service-core_kx.c:1180
+#: src/transport/gnunet-service-transport_validation.c:1128
 #, fuzzy
 msgid "# PING messages received"
 msgstr "# các thông báo PING được tạo"
 
-#: src/core/gnunet-service-core_kx.c:1187
+#: src/core/gnunet-service-core_kx.c:1189
 #, fuzzy
 msgid "# PING messages dropped (out of order)"
 msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải"
 
-#: src/core/gnunet-service-core_kx.c:1246
+#: src/core/gnunet-service-core_kx.c:1248
 #, fuzzy
 msgid "# PONG messages created"
 msgstr "# các thông báo PING được tạo"
 
-#: src/core/gnunet-service-core_kx.c:1272
+#: src/core/gnunet-service-core_kx.c:1274
 #, fuzzy
 msgid "# sessions terminated by timeout"
 msgstr "# các byte loại đi bởi TCP (đi ra)"
 
-#: src/core/gnunet-service-core_kx.c:1285
+#: src/core/gnunet-service-core_kx.c:1287
 #, fuzzy
 msgid "# keepalive messages sent"
 msgstr "# các thông báo PING nhập thô được gửi"
 
-#: src/core/gnunet-service-core_kx.c:1349
-#: src/transport/gnunet-service-transport_validation.c:1459
+#: src/core/gnunet-service-core_kx.c:1351
+#: src/transport/gnunet-service-transport_validation.c:1461
 #, fuzzy
 msgid "# PONG messages received"
 msgstr "# các thông báo PONG đã mật mã được nhận"
 
-#: src/core/gnunet-service-core_kx.c:1356
+#: src/core/gnunet-service-core_kx.c:1358
 #, fuzzy
 msgid "# PONG messages dropped (connection down)"
 msgstr "# các thông báo PONG đã mật mã được nhận"
 
-#: src/core/gnunet-service-core_kx.c:1361
+#: src/core/gnunet-service-core_kx.c:1363
 #, fuzzy
 msgid "# PONG messages dropped (out of order)"
 msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải"
 
-#: src/core/gnunet-service-core_kx.c:1396
+#: src/core/gnunet-service-core_kx.c:1398
 #, fuzzy
 msgid "# PONG messages decrypted"
 msgstr "# các thông báo PING được tạo"
 
-#: src/core/gnunet-service-core_kx.c:1434
+#: src/core/gnunet-service-core_kx.c:1436
 #, fuzzy
 msgid "# session keys confirmed via PONG"
 msgstr "# Các quảng cáo đồng đẳng được xác nhận qua PONG"
 
-#: src/core/gnunet-service-core_kx.c:1445
+#: src/core/gnunet-service-core_kx.c:1447
 #, fuzzy
 msgid "# timeouts prevented via PONG"
 msgstr "# các byte đã nhận qua TCP"
 
-#: src/core/gnunet-service-core_kx.c:1452
+#: src/core/gnunet-service-core_kx.c:1454
 #, fuzzy
 msgid "# rekey operations confirmed via PONG"
 msgstr "# Các quảng cáo đồng đẳng được xác nhận qua PONG"
 
-#: src/core/gnunet-service-core_kx.c:1640
+#: src/core/gnunet-service-core_kx.c:1642
 #, fuzzy
 msgid "# DATA message dropped (out of order)"
 msgstr "# các byte loại bỏ bởi UDP (đi ra)"
 
-#: src/core/gnunet-service-core_kx.c:1648
+#: src/core/gnunet-service-core_kx.c:1650
 #, c-format
 msgid ""
 "Session to peer `%s' went down due to key expiration (should not happen)\n"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1651
+#: src/core/gnunet-service-core_kx.c:1653
 #, fuzzy
 msgid "# sessions terminated by key expiration"
 msgstr "# các byte loại đi bởi TCP (đi ra)"
 
-#: src/core/gnunet-service-core_kx.c:1740
-#: src/core/gnunet-service-core_kx.c:1766
+#: src/core/gnunet-service-core_kx.c:1742
+#: src/core/gnunet-service-core_kx.c:1768
 #, fuzzy
 msgid "# bytes dropped (duplicates)"
 msgstr "# các byte loại bỏ bởi UDP (đi ra)"
 
-#: src/core/gnunet-service-core_kx.c:1753
+#: src/core/gnunet-service-core_kx.c:1755
 #, fuzzy
 msgid "# bytes dropped (out of sequence)"
 msgstr "# các byte loại bỏ bởi UDP (đi ra)"
 
-#: src/core/gnunet-service-core_kx.c:1795
+#: src/core/gnunet-service-core_kx.c:1797
 #, fuzzy
 msgid "# bytes dropped (ancient message)"
 msgstr "# các byte loại bỏ bởi UDP (đi ra)"
 
-#: src/core/gnunet-service-core_kx.c:1803
+#: src/core/gnunet-service-core_kx.c:1805
 #, fuzzy
 msgid "# bytes of payload decrypted"
 msgstr "# các byte đã giải mã"
 
-#: src/core/gnunet-service-core_sessions.c:258
-#: src/core/gnunet-service-core_sessions.c:348
-#: src/dht/gnunet-service-dht_neighbours.c:739
-#: src/dht/gnunet-service-dht_neighbours.c:802
-#: src/fs/gnunet-service-fs_cp.c:613 src/fs/gnunet-service-fs_cp.c:1520
-#: src/topology/gnunet-daemon-topology.c:615
-#: src/topology/gnunet-daemon-topology.c:717
-#: src/transport/gnunet-service-transport_neighbours.c:719
-#: src/transport/gnunet-service-transport_neighbours.c:727
+#: src/core/gnunet-service-core_sessions.c:260
+#: src/core/gnunet-service-core_sessions.c:350
+#: src/dht/gnunet-service-dht_neighbours.c:741
+#: src/dht/gnunet-service-dht_neighbours.c:804
+#: src/fs/gnunet-service-fs_cp.c:615 src/fs/gnunet-service-fs_cp.c:1521
+#: src/topology/gnunet-daemon-topology.c:617
+#: src/topology/gnunet-daemon-topology.c:719
+#: src/transport/gnunet-service-transport_neighbours.c:720
+#: src/transport/gnunet-service-transport_neighbours.c:728
 #, fuzzy
 msgid "# peers connected"
 msgstr "# của các đồng đẳng đã kết nối"
 
-#: src/core/gnunet-service-core_sessions.c:294
+#: src/core/gnunet-service-core_sessions.c:296
 #, fuzzy
 msgid "# type map refreshes sent"
 msgstr "# tổng số yêu cầu lỗ hổng được gửi"
 
-#: src/core/gnunet-service-core_sessions.c:414
+#: src/core/gnunet-service-core_sessions.c:416
 #, fuzzy
 msgid "# outdated typemap confirmations received"
 msgstr "Lỗi lưu cấu hình."
 
-#: src/core/gnunet-service-core_sessions.c:431
+#: src/core/gnunet-service-core_sessions.c:433
 #, fuzzy
 msgid "# valid typemap confirmations received"
 msgstr "Lỗi lưu cấu hình."
 
-#: src/core/gnunet-service-core_typemap.c:167
-#: src/core/gnunet-service-core_typemap.c:179
+#: src/core/gnunet-service-core_typemap.c:169
+#: src/core/gnunet-service-core_typemap.c:181
 #, fuzzy
 msgid "# type maps received"
 msgstr "# các thông báo phát hiện dht được nhận"
 
-#: src/core/gnunet-service-core_typemap.c:210
+#: src/core/gnunet-service-core_typemap.c:212
 msgid "# updates to my type map"
 msgstr ""
 
-#: src/credential/credential_misc.c:86
+#: src/credential/credential_misc.c:88
 #, fuzzy, c-format
 msgid "Unable to parse CRED record string `%s'\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/credential/gnunet-credential.c:262 src/namestore/gnunet-namestore.c:887
+#: src/credential/gnunet-credential.c:264 src/namestore/gnunet-namestore.c:994
 #, c-format
 msgid "Ego `%s' not known to identity service\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:278
-#: src/credential/gnunet-credential.c:432
+#: src/credential/gnunet-credential.c:280
+#: src/credential/gnunet-credential.c:434
 #, fuzzy, c-format
 msgid "Issuer public key `%s' is not well-formed\n"
 msgstr "Đối số không hợp lệ cho « %s ».\n"
 
-#: src/credential/gnunet-credential.c:359
-#: src/credential/gnunet-credential.c:421
+#: src/credential/gnunet-credential.c:361
+#: src/credential/gnunet-credential.c:423
 #, fuzzy, c-format
 msgid "Issuer public key not well-formed\n"
 msgstr "Đối số không hợp lệ cho « %s ».\n"
 
-#: src/credential/gnunet-credential.c:370
-#: src/credential/gnunet-credential.c:442
+#: src/credential/gnunet-credential.c:372
+#: src/credential/gnunet-credential.c:444
 #, fuzzy, c-format
 msgid "Failed to connect to CREDENTIAL\n"
 msgstr "Lỗi kết nối đến gnunetd.\n"
 
-#: src/credential/gnunet-credential.c:377
+#: src/credential/gnunet-credential.c:379
 #, c-format
 msgid "You must provide issuer the attribute\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:385
+#: src/credential/gnunet-credential.c:387
 #, c-format
 msgid "ego required\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:401
+#: src/credential/gnunet-credential.c:403
 #, c-format
 msgid "Subject public key needed\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:412
+#: src/credential/gnunet-credential.c:414
 #, fuzzy, c-format
 msgid "Subject public key `%s' is not well-formed\n"
 msgstr "Đối số không hợp lệ cho « %s ».\n"
 
-#: src/credential/gnunet-credential.c:449
+#: src/credential/gnunet-credential.c:451
 #, c-format
 msgid "You must provide issuer and subject attributes\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:502
+#: src/credential/gnunet-credential.c:504
 #, c-format
 msgid "Issuer ego required\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:514
+#: src/credential/gnunet-credential.c:516
 #, c-format
 msgid "Please specify name to lookup, subject key and issuer key!\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:534
+#: src/credential/gnunet-credential.c:536
 msgid "create credential"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:538
+#: src/credential/gnunet-credential.c:540
 msgid "verify credential against attribute"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:543
+#: src/credential/gnunet-credential.c:545
 #, fuzzy
 msgid "The public key of the subject to lookup the credential for"
 msgstr "xác định mức ưu tiên của nội dung"
 
-#: src/credential/gnunet-credential.c:548
+#: src/credential/gnunet-credential.c:550
 msgid "The name of the credential presented by the subject"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:553
+#: src/credential/gnunet-credential.c:555
 #, fuzzy
 msgid "The public key of the authority to verify the credential against"
 msgstr "xác định mức ưu tiên của nội dung"
 
-#: src/credential/gnunet-credential.c:558
+#: src/credential/gnunet-credential.c:560
 #, fuzzy
 msgid "The ego to use"
 msgstr "kích cỡ tin nhắn"
 
-#: src/credential/gnunet-credential.c:563
+#: src/credential/gnunet-credential.c:565
 msgid "The issuer attribute to verify against or to issue"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:568
+#: src/credential/gnunet-credential.c:570
 msgid "The time to live for the credential"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:572
+#: src/credential/gnunet-credential.c:574
 msgid "collect credentials"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:586
+#: src/credential/gnunet-credential.c:588
 #, fuzzy
 msgid "GNUnet credential resolver tool"
 msgstr "Bản ghi lỗi GNUnet"
 
-#: src/credential/gnunet-service-credential.c:1136 src/gns/gnunet-gns.c:183
-#: src/gns/gnunet-gns-helper-service-w32.c:725
+#: src/credential/gnunet-service-credential.c:1138 src/gns/gnunet-gns.c:185
+#: src/gns/gnunet-gns-helper-service-w32.c:727
 #, fuzzy, c-format
 msgid "Failed to connect to GNS\n"
 msgstr "Lỗi kết nối đến gnunetd.\n"
 
-#: src/credential/gnunet-service-credential.c:1142
-#: src/namestore/gnunet-namestore.c:913
-#: src/namestore/gnunet-namestore-fcfsd.c:1136
+#: src/credential/gnunet-service-credential.c:1144
+#: src/namestore/gnunet-namestore.c:1019
+#: src/namestore/gnunet-namestore-fcfsd.c:1138
 #, fuzzy, c-format
 msgid "Failed to connect to namestore\n"
 msgstr "Không kết nối được đến trình nền gnunetd."
 
-#: src/credential/plugin_gnsrecord_credential.c:184
+#: src/credential/plugin_gnsrecord_credential.c:186
 #, fuzzy, c-format
 msgid "Unable to parse ATTR record string `%s'\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/datacache/datacache.c:117 src/datacache/datacache.c:309
-#: src/datastore/gnunet-service-datastore.c:755
+#: src/datacache/datacache.c:119 src/datacache/datacache.c:311
+#: src/datastore/gnunet-service-datastore.c:757
 #, fuzzy
 msgid "# bytes stored"
 msgstr "# các byte trong kho dữ liệu"
 
-#: src/datacache/datacache.c:121 src/datacache/datacache.c:313
+#: src/datacache/datacache.c:123 src/datacache/datacache.c:315
 #, fuzzy
 msgid "# items stored"
 msgstr "# các byte trong kho dữ liệu"
 
-#: src/datacache/datacache.c:204
+#: src/datacache/datacache.c:206
 #, c-format
 msgid "Loading `%s' datacache plugin\n"
 msgstr ""
 
-#: src/datacache/datacache.c:215
+#: src/datacache/datacache.c:217
 #, fuzzy, c-format
 msgid "Failed to load datacache plugin for `%s'\n"
 msgstr "Lỗi cập nhật dữ liệu cho mô-đun « %s »\n"
 
-#: src/datacache/datacache.c:343
+#: src/datacache/datacache.c:345
 #, fuzzy
 msgid "# requests received"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/datacache/datacache.c:353
+#: src/datacache/datacache.c:355
 msgid "# requests filtered by bloom filter"
 msgstr "# các yêu cầu được lọc theo bộ lọc bloom"
 
-#: src/datacache/datacache.c:383
+#: src/datacache/datacache.c:385
 #, fuzzy
 msgid "# requests for random value received"
 msgstr "# tổng số yêu cầu lỗ hổng được nhận"
 
-#: src/datacache/datacache.c:415
+#: src/datacache/datacache.c:417
 #, fuzzy
 msgid "# proximity search requests received"
 msgstr "# các yêu cầu khách lỗ hổng được nhận"
 
-#: src/datacache/plugin_datacache_heap.c:551
+#: src/datacache/plugin_datacache_heap.c:553
 #, fuzzy
 msgid "Heap datacache running\n"
 msgstr "kho dữ liệu sqlite"
 
-#: src/datacache/plugin_datacache_sqlite.c:116
-#: src/datacache/plugin_datacache_sqlite.c:125
-#: src/datastore/plugin_datastore_mysql.c:890
-#: src/datastore/plugin_datastore_sqlite.c:56
-#: src/datastore/plugin_datastore_sqlite.c:64 src/my/my.c:79 src/my/my.c:91
-#: src/mysql/mysql.c:40 src/mysql/mysql.c:47
-#: src/namecache/plugin_namecache_sqlite.c:50
-#: src/namestore/plugin_namestore_sqlite.c:51
-#: src/peerstore/plugin_peerstore_sqlite.c:50
-#: src/psycstore/plugin_psycstore_mysql.c:60
-#: src/reclaim/plugin_reclaim_sqlite.c:50
-#: src/testbed/generate-underlay-topology.c:45
-#: src/testbed/gnunet-daemon-latency-logger.c:50
-#: src/testbed/gnunet-daemon-testbed-underlay.c:54
-#: src/testbed/testbed_api_hosts.c:67 src/util/crypto_ecc.c:51
-#: src/util/crypto_ecc_setup.c:39 src/util/crypto_mpi.c:37
-#: src/include/gnunet_common.h:816 src/include/gnunet_common.h:825
-#: src/scalarproduct/scalarproduct.h:33
+#: src/datacache/plugin_datacache_sqlite.c:118
+#: src/datacache/plugin_datacache_sqlite.c:127
+#: src/datastore/plugin_datastore_mysql.c:892
+#: src/datastore/plugin_datastore_sqlite.c:58
+#: src/datastore/plugin_datastore_sqlite.c:66 src/my/my.c:81 src/my/my.c:93
+#: src/mysql/mysql.c:42 src/mysql/mysql.c:49
+#: src/namecache/plugin_namecache_sqlite.c:52
+#: src/namestore/plugin_namestore_sqlite.c:53
+#: src/peerstore/plugin_peerstore_sqlite.c:52
+#: src/reclaim/plugin_reclaim_sqlite.c:52
+#: src/testbed/generate-underlay-topology.c:47
+#: src/testbed/gnunet-daemon-latency-logger.c:52
+#: src/testbed/gnunet-daemon-testbed-underlay.c:56
+#: src/testbed/testbed_api_hosts.c:69 src/util/crypto_ecc.c:53
+#: src/util/crypto_ecc_setup.c:41 src/util/crypto_mpi.c:39
+#: src/include/gnunet_common.h:818 src/include/gnunet_common.h:827
+#: src/scalarproduct/scalarproduct.h:35
 #, c-format
 msgid "`%s' failed at %s:%d with error: %s\n"
 msgstr "« %s » bị lỗi tại %s:%d với lỗi: %s\n"
 
-#: src/datacache/plugin_datacache_sqlite.c:861
-#: src/datastore/plugin_datastore_sqlite.c:506
-#: src/namecache/plugin_namecache_sqlite.c:327
-#: src/namestore/plugin_namestore_sqlite.c:262
-#: src/reclaim/plugin_reclaim_sqlite.c:334
+#: src/datacache/plugin_datacache_sqlite.c:863
+#: src/datastore/plugin_datastore_sqlite.c:508
+#: src/namecache/plugin_namecache_sqlite.c:229
+#: src/namestore/plugin_namestore_sqlite.c:265
+#: src/reclaim/plugin_reclaim_sqlite.c:336
 msgid "Tried to close sqlite without finalizing all prepared statements.\n"
 msgstr ""
 
-#: src/datastore/datastore_api.c:346
+#: src/datastore/datastore_api.c:348
 #, fuzzy
 msgid "DATASTORE disconnected"
 msgstr "« %.*s » được kết nối tới « %.*s ».\n"
 
-#: src/datastore/datastore_api.c:466
+#: src/datastore/datastore_api.c:468
 #, fuzzy
 msgid "Disconnected from DATASTORE"
 msgstr "« %.*s » được kết nối tới « %.*s ».\n"
 
-#: src/datastore/datastore_api.c:567
+#: src/datastore/datastore_api.c:569
 msgid "# queue overflows"
 msgstr ""
 
-#: src/datastore/datastore_api.c:597
+#: src/datastore/datastore_api.c:599
 #, fuzzy
 msgid "# queue entries created"
 msgstr "# các truy vấn lỗ hổng được định tuyến"
 
-#: src/datastore/datastore_api.c:758
+#: src/datastore/datastore_api.c:760
 #, 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:812
+#: src/datastore/datastore_api.c:814
 #, fuzzy
 msgid "# Results received"
 msgstr "# các kết quả dht được nhận"
 
-#: src/datastore/datastore_api.c:918
+#: src/datastore/datastore_api.c:920
 #, fuzzy
 msgid "# datastore connections (re)created"
 msgstr "# các kết nối dht"
 
-#: src/datastore/datastore_api.c:1032
+#: src/datastore/datastore_api.c:1034
 #, fuzzy
 msgid "# PUT requests executed"
 msgstr "# các yêu cầu dht được định tuyến"
 
-#: src/datastore/datastore_api.c:1093
+#: src/datastore/datastore_api.c:1095
 #, fuzzy
 msgid "# RESERVE requests executed"
 msgstr "# các yêu cầu dht được định tuyến"
 
-#: src/datastore/datastore_api.c:1158
+#: src/datastore/datastore_api.c:1160
 msgid "# RELEASE RESERVE requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1236
+#: src/datastore/datastore_api.c:1238
 #, fuzzy
 msgid "# REMOVE requests executed"
 msgstr "# các yêu cầu dht được định tuyến"
 
-#: src/datastore/datastore_api.c:1296
+#: src/datastore/datastore_api.c:1298
 msgid "# GET REPLICATION requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1358
+#: src/datastore/datastore_api.c:1360
 msgid "# GET ZERO ANONYMITY requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1439
+#: src/datastore/datastore_api.c:1441
 #, fuzzy
 msgid "# GET requests executed"
 msgstr "# các yêu cầu dht được định tuyến"
 
-#: src/datastore/gnunet-datastore.c:187
+#: src/datastore/gnunet-datastore.c:189
 #, c-format
 msgid "Dumped %<PRIu64> records\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:215 src/datastore/gnunet-datastore.c:227
+#: src/datastore/gnunet-datastore.c:217 src/datastore/gnunet-datastore.c:229
 #, c-format
 msgid "Short write to file: %zd bytes expecting %zd\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:259
+#: src/datastore/gnunet-datastore.c:261
 #, fuzzy
 msgid "Error queueing datastore GET operation\n"
 msgstr "Gặp lỗi khi tạo người dùng"
 
-#: src/datastore/gnunet-datastore.c:285 src/datastore/gnunet-datastore.c:410
+#: src/datastore/gnunet-datastore.c:287 src/datastore/gnunet-datastore.c:412
 #, fuzzy, c-format
 msgid "Unable to open dump file: %s\n"
 msgstr "Không thể tạo miền tên.\n"
 
-#: src/datastore/gnunet-datastore.c:324
+#: src/datastore/gnunet-datastore.c:326
 #, fuzzy, c-format
 msgid "Failed to store item: %s, aborting\n"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/datastore/gnunet-datastore.c:338
+#: src/datastore/gnunet-datastore.c:340
 #, c-format
 msgid "Inserted %<PRIu64> records\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:347 src/datastore/gnunet-datastore.c:361
+#: src/datastore/gnunet-datastore.c:349 src/datastore/gnunet-datastore.c:363
 #, c-format
 msgid "Short read from file: %zd bytes expecting %zd\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:387
+#: src/datastore/gnunet-datastore.c:389
 #, fuzzy
 msgid "Error queueing datastore PUT operation\n"
 msgstr "Gặp lỗi khi tạo người dùng"
 
-#: src/datastore/gnunet-datastore.c:430
+#: src/datastore/gnunet-datastore.c:432
 msgid "Input file is not of a supported format\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:456
+#: src/datastore/gnunet-datastore.c:458
 #, fuzzy
 msgid "Failed connecting to the datastore.\n"
 msgstr "Không kết nối được đến trình nền gnunetd."
 
-#: src/datastore/gnunet-datastore.c:468
+#: src/datastore/gnunet-datastore.c:470
 #, c-format
 msgid "Please choose at least one operation: %s, %s\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:491
+#: src/datastore/gnunet-datastore.c:493
 #, fuzzy
 msgid "Dump all records from the datastore"
 msgstr ""
 "\n"
 "Không nhận được đáp ứng từ gnunetd.\n"
 
-#: src/datastore/gnunet-datastore.c:495
+#: src/datastore/gnunet-datastore.c:497
 #, fuzzy
 msgid "Insert records into the datastore"
 msgstr "# các byte trong kho dữ liệu"
 
-#: src/datastore/gnunet-datastore.c:500
+#: src/datastore/gnunet-datastore.c:502
 msgid "File to dump or insert"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:509
+#: src/datastore/gnunet-datastore.c:511
 #, fuzzy
 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:336
+#: src/datastore/gnunet-service-datastore.c:338
 #, fuzzy
 msgid "# bytes expired"
 msgstr "# các byte được nhận"
 
-#: src/datastore/gnunet-service-datastore.c:418
+#: src/datastore/gnunet-service-datastore.c:420
 msgid "# bytes purged (low-priority)"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:560
+#: src/datastore/gnunet-service-datastore.c:562
 msgid "# results found"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:601
+#: src/datastore/gnunet-service-datastore.c:603
 #, c-format
 msgid ""
 "Insufficient space (%llu bytes are available) to satisfy RESERVE request for "
 "%llu bytes\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:612
+#: src/datastore/gnunet-service-datastore.c:614
 #, c-format
 msgid ""
 "The requested amount (%llu bytes) is larger than the cache size (%llu "
 "bytes)\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:618
+#: src/datastore/gnunet-service-datastore.c:620
 msgid ""
 "Insufficient space to satisfy request and requested amount is larger than "
 "cache size"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:625
+#: src/datastore/gnunet-service-datastore.c:627
 msgid "Insufficient space to satisfy request"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:632
-#: src/datastore/gnunet-service-datastore.c:687
-#: src/datastore/gnunet-service-datastore.c:835
-#: src/datastore/gnunet-service-datastore.c:1467
+#: src/datastore/gnunet-service-datastore.c:634
+#: src/datastore/gnunet-service-datastore.c:689
+#: src/datastore/gnunet-service-datastore.c:837
+#: src/datastore/gnunet-service-datastore.c:1469
 msgid "# reserved"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:705
+#: src/datastore/gnunet-service-datastore.c:707
 msgid "Could not find matching reservation"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:771
+#: src/datastore/gnunet-service-datastore.c:773
 #, c-format
 msgid "Need %llu bytes more space (%llu allowed, using %llu)\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:874
+#: src/datastore/gnunet-service-datastore.c:876
 #, 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:905
+#: src/datastore/gnunet-service-datastore.c:907
 #, fuzzy
 msgid "# GET KEY requests received"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/datastore/gnunet-service-datastore.c:918
+#: src/datastore/gnunet-service-datastore.c:920
 #, 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:954
+#: src/datastore/gnunet-service-datastore.c:956
 #, 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:987
+#: src/datastore/gnunet-service-datastore.c:989
 #, 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:1034
+#: src/datastore/gnunet-service-datastore.c:1036
 msgid "Content not found"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1041
+#: src/datastore/gnunet-service-datastore.c:1043
 msgid "# bytes removed (explicit request)"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1086
+#: src/datastore/gnunet-service-datastore.c:1088
 #, 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:1135
+#: src/datastore/gnunet-service-datastore.c:1137
 #, c-format
 msgid ""
 "Datastore payload must have been inaccurate (%lld < %lld). Recomputing it.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1141
-#: src/datastore/gnunet-service-datastore.c:1316
+#: src/datastore/gnunet-service-datastore.c:1143
+#: src/datastore/gnunet-service-datastore.c:1318
 #, c-format
 msgid "New payload: %lld\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1195
+#: src/datastore/gnunet-service-datastore.c:1197
 #, c-format
 msgid "Loading `%s' datastore plugin\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1207
+#: src/datastore/gnunet-service-datastore.c:1209
 #, 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:1267
+#: src/datastore/gnunet-service-datastore.c:1269
 msgid "Bloomfilter construction complete.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1323
+#: src/datastore/gnunet-service-datastore.c:1325
 msgid "Rebuilding bloomfilter.  Please be patient.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1334
+#: src/datastore/gnunet-service-datastore.c:1336
 msgid "Plugin does not support get_keys function. Please fix!\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1504
+#: src/datastore/gnunet-service-datastore.c:1506
 #, 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:1520
+#: src/datastore/gnunet-service-datastore.c:1522
 msgid "# quota"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1525
+#: src/datastore/gnunet-service-datastore.c:1527
 msgid "# cache size"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1541
+#: src/datastore/gnunet-service-datastore.c:1543
 #, c-format
 msgid "Could not use specified filename `%s' for bloomfilter.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1559
-#: src/datastore/gnunet-service-datastore.c:1575
+#: src/datastore/gnunet-service-datastore.c:1561
+#: src/datastore/gnunet-service-datastore.c:1577
 #, 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:1607
+#: src/datastore/gnunet-service-datastore.c:1609
 #, fuzzy
 msgid "Failed to initialize bloomfilter.\n"
 msgstr "Lỗi sơ khởi dịch vụ « %s ».\n"
 
-#: src/datastore/plugin_datastore_heap.c:891
+#: src/datastore/plugin_datastore_heap.c:893
 #, fuzzy
 msgid "Heap database running\n"
 msgstr "kho dữ liệu sqlite"
 
-#: src/datastore/plugin_datastore_mysql.c:369
-#: src/datastore/plugin_datastore_mysql.c:421
-#: src/datastore/plugin_datastore_mysql.c:1073
+#: src/datastore/plugin_datastore_mysql.c:371
+#: src/datastore/plugin_datastore_mysql.c:423
+#: src/datastore/plugin_datastore_mysql.c:1075
 msgid "MySQL statement run failure"
 msgstr ""
 
-#: src/datastore/plugin_datastore_mysql.c:408
-#: src/datastore/plugin_datastore_sqlite.c:676
+#: src/datastore/plugin_datastore_mysql.c:410
+#: src/datastore/plugin_datastore_sqlite.c:678
 #, fuzzy
 msgid "Data too large"
 msgstr "số lần lặp lại"
 
-#: src/datastore/plugin_datastore_mysql.c:846
+#: src/datastore/plugin_datastore_mysql.c:848
 #, fuzzy, c-format
 msgid "`%s' for `%s' failed at %s:%d with error: %s\n"
 msgstr "« %s » bị lỗi tại %s:%d với lỗi: %s\n"
 
-#: src/datastore/plugin_datastore_mysql.c:1178
-#: src/psycstore/plugin_psycstore_mysql.c:1934
+#: src/datastore/plugin_datastore_mysql.c:1180
 msgid "Mysql database running\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_postgres.c:274
-#: src/datastore/plugin_datastore_postgres.c:891
+#: src/datastore/plugin_datastore_postgres.c:276
+#: src/datastore/plugin_datastore_postgres.c:893
 msgid "Postgress exec failure"
 msgstr ""
 
-#: src/datastore/plugin_datastore_postgres.c:852
+#: src/datastore/plugin_datastore_postgres.c:854
 #, fuzzy
 msgid "Failed to drop table from database.\n"
 msgstr ""
 "\n"
 "Không nhận được đáp ứng từ gnunetd.\n"
 
-#: src/datastore/plugin_datastore_postgres.c:950
-#: src/psycstore/plugin_psycstore_postgres.c:1504
+#: src/datastore/plugin_datastore_postgres.c:952
 msgid "Postgres database running\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_sqlite.c:64
-#: src/testbed/generate-underlay-topology.c:48
-#: src/testbed/gnunet-daemon-latency-logger.c:53
-#: src/testbed/gnunet-daemon-testbed-underlay.c:57
+#: src/datastore/plugin_datastore_sqlite.c:66
+#: src/testbed/generate-underlay-topology.c:50
+#: src/testbed/gnunet-daemon-latency-logger.c:55
+#: src/testbed/gnunet-daemon-testbed-underlay.c:59
 #, fuzzy, c-format
 msgid "`%s' failed at %s:%u with error: %s"
 msgstr "« %s » bị lỗi tại %s:%d với lỗi: %s"
 
-#: src/datastore/plugin_datastore_sqlite.c:269
-#: src/namecache/plugin_namecache_sqlite.c:207
-#: src/namestore/plugin_namestore_sqlite.c:203
-#: src/peerstore/plugin_peerstore_sqlite.c:533
-#: src/psycstore/plugin_psycstore_sqlite.c:323
-#: src/reclaim/plugin_reclaim_sqlite.c:210
+#: src/datastore/plugin_datastore_sqlite.c:271
+#: src/namecache/plugin_namecache_sqlite.c:173
+#: src/namestore/plugin_namestore_sqlite.c:206
+#: src/peerstore/plugin_peerstore_sqlite.c:535
+#: src/reclaim/plugin_reclaim_sqlite.c:212
 #, c-format
 msgid "Unable to initialize SQLite: %s.\n"
 msgstr "Không thể sơ khởi SQLite: %s.\n"
 
-#: src/datastore/plugin_datastore_sqlite.c:627
+#: src/datastore/plugin_datastore_sqlite.c:629
 msgid "sqlite bind failure"
 msgstr ""
 
-#: src/datastore/plugin_datastore_sqlite.c:1325
+#: src/datastore/plugin_datastore_sqlite.c:1327
 msgid "sqlite version to old to determine size, assuming zero\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_sqlite.c:1359
+#: src/datastore/plugin_datastore_sqlite.c:1361
 #, c-format
 msgid ""
 "Using sqlite page utilization to estimate payload (%llu pages of size %llu "
 "bytes)\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_sqlite.c:1403
-#: src/namecache/plugin_namecache_sqlite.c:638
-#: src/namestore/plugin_namestore_sqlite.c:753
-#: src/reclaim/plugin_reclaim_sqlite.c:709
+#: src/datastore/plugin_datastore_sqlite.c:1405
+#: src/namecache/plugin_namecache_sqlite.c:557
+#: src/namestore/plugin_namestore_sqlite.c:750
+#: src/reclaim/plugin_reclaim_sqlite.c:711
 #, fuzzy
 msgid "Sqlite database running\n"
 msgstr "kho dữ liệu sqlite"
 
-#: src/datastore/plugin_datastore_template.c:251
+#: src/datastore/plugin_datastore_template.c:253
 msgid "Template database running\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:156
+#: src/dht/gnunet-dht-get.c:158
 #, c-format
 msgid ""
 "Result %d, type %d:\n"
 "%.*s\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:157
+#: src/dht/gnunet-dht-get.c:159
 #, c-format
 msgid "Result %d, type %d:\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:202
+#: src/dht/gnunet-dht-get.c:204
 msgid "Must provide key for DHT GET!\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:208 src/dht/gnunet-dht-monitor.c:255
+#: src/dht/gnunet-dht-get.c:210 src/dht/gnunet-dht-monitor.c:257
 #, fuzzy
 msgid "Failed to connect to DHT service!\n"
 msgstr "Lỗi kết nối đến gnunetd.\n"
 
-#: src/dht/gnunet-dht-get.c:217
-msgid "Issueing DHT GET with key"
+#: src/dht/gnunet-dht-get.c:219
+msgid "Issuing DHT GET with key"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:246 src/dht/gnunet-dht-monitor.c:305
-#: src/dht/gnunet-dht-put.c:196
+#: src/dht/gnunet-dht-get.c:248 src/dht/gnunet-dht-monitor.c:307
+#: src/dht/gnunet-dht-put.c:198
 msgid "the query key"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:251
+#: src/dht/gnunet-dht-get.c:253
 msgid "how many parallel requests (replicas) to create"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:256 src/dht/gnunet-dht-monitor.c:311
+#: src/dht/gnunet-dht-get.c:258 src/dht/gnunet-dht-monitor.c:313
 msgid "the type of data to look for"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:261
+#: src/dht/gnunet-dht-get.c:263
 msgid "how long to execute this query before giving up?"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:265 src/dht/gnunet-dht-put.c:200
+#: src/dht/gnunet-dht-get.c:267 src/dht/gnunet-dht-put.c:202
 msgid "use DHT's demultiplex everywhere option"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:278
+#: src/dht/gnunet-dht-get.c:280
 msgid "Issue a GET request to the GNUnet DHT, prints results."
 msgstr ""
 
-#: src/dht/gnunet-dht-monitor.c:317
+#: src/dht/gnunet-dht-monitor.c:319
 msgid "how long should the monitor command run"
 msgstr ""
 
-#: src/dht/gnunet-dht-monitor.c:322 src/fs/gnunet-download.c:370
-#: src/nse/gnunet-nse-profiler.c:876
+#: src/dht/gnunet-dht-monitor.c:324 src/fs/gnunet-download.c:372
+#: src/nse/gnunet-nse-profiler.c:878
 msgid "be verbose (print progress information)"
 msgstr ""
 
-#: src/dht/gnunet-dht-monitor.c:335
+#: src/dht/gnunet-dht-monitor.c:337
 msgid "Prints all packets that go through the DHT."
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:914 src/testbed/gnunet-testbed-profiler.c:251
+#: src/dht/gnunet_dht_profiler.c:916 src/testbed/gnunet-testbed-profiler.c:253
 #, 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"
 
-#: src/dht/gnunet_dht_profiler.c:947 src/rps/gnunet-rps-profiler.c:2764
+#: src/dht/gnunet_dht_profiler.c:949 src/rps/gnunet-rps-profiler.c:2953
 #, fuzzy
 msgid "number of peers to start"
 msgstr "số lần lặp lại"
 
-#: src/dht/gnunet_dht_profiler.c:952
+#: src/dht/gnunet_dht_profiler.c:954
 msgid "number of PUTs to perform per peer"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:957 src/nse/gnunet-nse-profiler.c:858
-#: src/testbed/gnunet-testbed-profiler.c:302
+#: src/dht/gnunet_dht_profiler.c:959 src/nse/gnunet-nse-profiler.c:860
+#: src/testbed/gnunet-testbed-profiler.c:304
 msgid "name of the file with the login information for the testbed"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:962
+#: src/dht/gnunet_dht_profiler.c:964
 msgid "delay between rounds for collecting statistics (default: 30 sec)"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:967
+#: src/dht/gnunet_dht_profiler.c:969
 msgid "delay to start doing PUTs (default: 1 sec)"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:972
+#: src/dht/gnunet_dht_profiler.c:974
 msgid "delay to start doing GETs (default: 5 min)"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:977
+#: src/dht/gnunet_dht_profiler.c:979
 msgid "replication degree for DHT PUTs"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:982
+#: src/dht/gnunet_dht_profiler.c:984
 msgid "chance that a peer is selected at random for PUTs"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:987
+#: src/dht/gnunet_dht_profiler.c:989
 msgid "timeout for DHT PUT and GET requests (default: 1 min)"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:1007
+#: src/dht/gnunet_dht_profiler.c:1009
 #, fuzzy
 msgid "Measure quality and performance of the DHT service."
 msgstr "Không thể truy cập đến dịch vụ"
 
-#: src/dht/gnunet-dht-put.c:132
+#: src/dht/gnunet-dht-put.c:134
 msgid "Must provide KEY and DATA for DHT put!\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:140
+#: src/dht/gnunet-dht-put.c:142
 #, fuzzy
 msgid "Could not connect to DHT service!\n"
 msgstr "Không thể kết nối tới %s:%u: %s\n"
 
-#: src/dht/gnunet-dht-put.c:151
+#: src/dht/gnunet-dht-put.c:153
 #, c-format
 msgid "Issuing put request for `%s' with data `%s'!\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:186
+#: src/dht/gnunet-dht-put.c:188
 msgid "the data to insert under the key"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:191
+#: src/dht/gnunet-dht-put.c:193
 msgid "how long to store this entry in the dht (in seconds)"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:205
+#: src/dht/gnunet-dht-put.c:207
 msgid "how many replicas to create"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:209
+#: src/dht/gnunet-dht-put.c:211
 msgid "use DHT's record route option"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:214
+#: src/dht/gnunet-dht-put.c:216
 msgid "the type to insert data as"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:231
+#: src/dht/gnunet-dht-put.c:233
 msgid "Issue a PUT request to the GNUnet DHT insert DATA under KEY."
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:367
+#: src/dht/gnunet-service-dht_clients.c:369
 #, fuzzy
 msgid "# GET requests from clients injected"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/dht/gnunet-service-dht_clients.c:481
+#: src/dht/gnunet-service-dht_clients.c:483
 #, fuzzy
 msgid "# PUT requests received from clients"
 msgstr "# các đáp ứng lỗ hổng được gửi cho trình/máy khách"
 
-#: src/dht/gnunet-service-dht_clients.c:614
+#: src/dht/gnunet-service-dht_clients.c:616
 #, fuzzy
 msgid "# GET requests received from clients"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/dht/gnunet-service-dht_clients.c:840
+#: src/dht/gnunet-service-dht_clients.c:842
 #, fuzzy
 msgid "# GET STOP requests received from clients"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/dht/gnunet-service-dht_clients.c:1025
+#: src/dht/gnunet-service-dht_clients.c:1027
 msgid "# Key match, type mismatches in REPLY to CLIENT"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:1040
+#: src/dht/gnunet-service-dht_clients.c:1042
 msgid "# Duplicate REPLIES to CLIENT request dropped"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:1086
+#: src/dht/gnunet-service-dht_clients.c:1088
 #, c-format
 msgid "Unsupported block type (%u) in request!\n"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:1093
+#: src/dht/gnunet-service-dht_clients.c:1095
 msgid "# RESULTS queued for clients"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:1171
+#: src/dht/gnunet-service-dht_clients.c:1173
 msgid "# REPLIES ignored for CLIENTS (no match)"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:71
+#: src/dht/gnunet-service-dht_datacache.c:73
 #, fuzzy, c-format
 msgid "%s request received, but have no datacache!\n"
 msgstr "# các byte kiểu %d được nhận"
 
-#: src/dht/gnunet-service-dht_datacache.c:81
+#: src/dht/gnunet-service-dht_datacache.c:83
 msgid "# ITEMS stored in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:205
+#: src/dht/gnunet-service-dht_datacache.c:207
 msgid "# Good RESULTS found in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:217
+#: src/dht/gnunet-service-dht_datacache.c:219
 msgid "# Duplicate RESULTS found in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:223
+#: src/dht/gnunet-service-dht_datacache.c:225
 msgid "# Invalid RESULTS found in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:229
+#: src/dht/gnunet-service-dht_datacache.c:231
 msgid "# Irrelevant RESULTS found in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:241
+#: src/dht/gnunet-service-dht_datacache.c:243
 msgid "# Unsupported RESULTS found in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:245
+#: src/dht/gnunet-service-dht_datacache.c:247
 #, c-format
 msgid "Unsupported block type (%u) in local response!\n"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:280
+#: src/dht/gnunet-service-dht_datacache.c:282
 #, fuzzy
 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-dht_hello.c:86
 #, fuzzy
 msgid "# HELLOs obtained from peerinfo"
 msgstr "Nhận được thông báo « %s » sai từ đồng đẳng « %s ».\n"
 
-#: src/dht/gnunet-service-dht_neighbours.c:677
+#: src/dht/gnunet-service-dht_neighbours.c:679
 #, fuzzy
 msgid "# FIND PEER messages initiated"
 msgstr "# các thông báo PING được tạo"
 
-#: src/dht/gnunet-service-dht_neighbours.c:850
+#: src/dht/gnunet-service-dht_neighbours.c:852
 #, fuzzy
 msgid "# requests TTL-dropped"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1053
-#: src/dht/gnunet-service-dht_neighbours.c:1096
+#: src/dht/gnunet-service-dht_neighbours.c:1055
+#: src/dht/gnunet-service-dht_neighbours.c:1098
 msgid "# Peers excluded from routing due to Bloomfilter"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1070
-#: src/dht/gnunet-service-dht_neighbours.c:1112
+#: src/dht/gnunet-service-dht_neighbours.c:1072
+#: src/dht/gnunet-service-dht_neighbours.c:1114
 #, fuzzy
 msgid "# Peer selection failed"
 msgstr "# các cuộc gọi HTTP select (lựa chọn)"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1269
+#: src/dht/gnunet-service-dht_neighbours.c:1271
 #, fuzzy
 msgid "# PUT requests routed"
 msgstr "# các yêu cầu dht được định tuyến"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1302
+#: src/dht/gnunet-service-dht_neighbours.c:1304
 #, fuzzy
 msgid "# PUT messages queued for transmission"
 msgstr "# các thông báo PING được tạo"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1313
-#: src/dht/gnunet-service-dht_neighbours.c:1453
-#: src/dht/gnunet-service-dht_neighbours.c:1556
+#: src/dht/gnunet-service-dht_neighbours.c:1315
+#: src/dht/gnunet-service-dht_neighbours.c:1455
+#: src/dht/gnunet-service-dht_neighbours.c:1558
 #, fuzzy
 msgid "# P2P messages dropped due to full queue"
 msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1398
+#: src/dht/gnunet-service-dht_neighbours.c:1400
 #, fuzzy
 msgid "# GET requests routed"
 msgstr "# các yêu cầu dht được định tuyến"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1441
+#: src/dht/gnunet-service-dht_neighbours.c:1443
 #, fuzzy
 msgid "# GET messages queued for transmission"
 msgstr "# các thông báo PING được tạo"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1571
+#: src/dht/gnunet-service-dht_neighbours.c:1573
 #, fuzzy
 msgid "# RESULT messages queued for transmission"
 msgstr "# các thông báo PING được tạo"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1674
+#: src/dht/gnunet-service-dht_neighbours.c:1676
 msgid "# Expired PUTs discarded"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1682
+#: src/dht/gnunet-service-dht_neighbours.c:1684
 #, fuzzy
 msgid "# P2P PUT requests received"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1686
+#: src/dht/gnunet-service-dht_neighbours.c:1688
 #, fuzzy
 msgid "# P2P PUT bytes received"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1912
+#: src/dht/gnunet-service-dht_neighbours.c:1914
 #, fuzzy
 msgid "# FIND PEER requests ignored due to Bloomfilter"
 msgstr "# các yêu cầu được lọc theo bộ lọc bloom"
 
-#: src/dht/gnunet-service-dht_neighbours.c:1920
+#: src/dht/gnunet-service-dht_neighbours.c:1922
 msgid "# FIND PEER requests ignored due to lack of HELLO"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:2082
+#: src/dht/gnunet-service-dht_neighbours.c:2084
 #, fuzzy
 msgid "# P2P GET requests received"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/dht/gnunet-service-dht_neighbours.c:2086
+#: src/dht/gnunet-service-dht_neighbours.c:2088
 #, fuzzy
 msgid "# P2P GET bytes received"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/dht/gnunet-service-dht_neighbours.c:2151
+#: src/dht/gnunet-service-dht_neighbours.c:2153
 #, fuzzy
 msgid "# P2P FIND PEER requests processed"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/dht/gnunet-service-dht_neighbours.c:2172
+#: src/dht/gnunet-service-dht_neighbours.c:2174
 #, fuzzy
 msgid "# P2P GET requests ONLY routed"
 msgstr "# các yêu cầu dht được định tuyến"
 
-#: src/dht/gnunet-service-dht_neighbours.c:2349
+#: src/dht/gnunet-service-dht_neighbours.c:2351
 msgid "# Expired results discarded"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:2365
+#: src/dht/gnunet-service-dht_neighbours.c:2367
 #, fuzzy
 msgid "# P2P RESULTS received"
 msgstr "# Tín hiệu HTTP PUT được nhận"
 
-#: src/dht/gnunet-service-dht_neighbours.c:2369
+#: src/dht/gnunet-service-dht_neighbours.c:2371
 #, fuzzy
 msgid "# P2P RESULT bytes received"
 msgstr "# Tín hiệu HTTP PUT được nhận"
 
-#: src/dht/gnunet-service-dht_nse.c:57
+#: src/dht/gnunet-service-dht_nse.c:59
 #, fuzzy
 msgid "# Network size estimates received"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/dht/gnunet-service-dht_routing.c:221
+#: src/dht/gnunet-service-dht_routing.c:223
 msgid "# Good REPLIES matched against routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:235
+#: src/dht/gnunet-service-dht_routing.c:237
 msgid "# Duplicate REPLIES matched against routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:241
+#: src/dht/gnunet-service-dht_routing.c:243
 msgid "# Invalid REPLIES matched against routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:247
+#: src/dht/gnunet-service-dht_routing.c:249
 msgid "# Irrelevant REPLIES matched against routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:259
+#: src/dht/gnunet-service-dht_routing.c:261
 msgid "# Unsupported REPLIES matched against routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:337
+#: src/dht/gnunet-service-dht_routing.c:339
 msgid "# Entries removed from routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:413
+#: src/dht/gnunet-service-dht_routing.c:415
 msgid "# Entries added to routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:435
+#: src/dht/gnunet-service-dht_routing.c:437
 #, fuzzy
 msgid "# DHT requests combined"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/dht/plugin_block_dht.c:187
+#: src/dht/plugin_block_dht.c:189
 #, fuzzy, c-format
 msgid "Block not of type %u\n"
 msgstr "Không biết truyền tải nào kiểu %d.\n"
 
-#: src/dht/plugin_block_dht.c:196
+#: src/dht/plugin_block_dht.c:198
 msgid "Size mismatch for block\n"
 msgstr ""
 
-#: src/dht/plugin_block_dht.c:207
+#: src/dht/plugin_block_dht.c:209
 #, c-format
 msgid "Block of type %u is malformed\n"
 msgstr ""
 
-#: src/dns/gnunet-dns-monitor.c:351 src/dns/gnunet-dns-monitor.c:356
+#: src/dns/gnunet-dns-monitor.c:353 src/dns/gnunet-dns-monitor.c:358
 msgid "only monitor DNS queries"
 msgstr ""
 
-#: src/dns/gnunet-dns-monitor.c:368
+#: src/dns/gnunet-dns-monitor.c:370
 msgid "Monitor DNS queries."
 msgstr ""
 
-#: src/dns/gnunet-dns-redirector.c:235
+#: src/dns/gnunet-dns-redirector.c:237
 msgid "set A records"
 msgstr ""
 
-#: src/dns/gnunet-dns-redirector.c:241
+#: src/dns/gnunet-dns-redirector.c:243
 msgid "set AAAA records"
 msgstr ""
 
-#: src/dns/gnunet-dns-redirector.c:254
+#: src/dns/gnunet-dns-redirector.c:256
 msgid "Change DNS replies to point elsewhere."
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:460
+#: src/dns/gnunet-service-dns.c:462
 msgid "# DNS requests answered via TUN interface"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:608
+#: src/dns/gnunet-service-dns.c:610
 msgid "# DNS exit failed (failed to open socket)"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:738
+#: src/dns/gnunet-service-dns.c:740
 msgid "# External DNS response discarded (no matching request)"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:813
+#: src/dns/gnunet-service-dns.c:815
 msgid "# Client response discarded (no matching request)"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:928
+#: src/dns/gnunet-service-dns.c:930
 msgid "Received malformed IPv4-UDP packet on TUN interface.\n"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:944
+#: src/dns/gnunet-service-dns.c:946
 msgid "Received malformed IPv6-UDP packet on TUN interface.\n"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:953
+#: src/dns/gnunet-service-dns.c:955
 #, c-format
 msgid "Got non-IP packet with %u bytes and protocol %u from TUN\n"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:963
+#: src/dns/gnunet-service-dns.c:965
 msgid "DNS interceptor got non-DNS packet (dropped)\n"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:965
+#: src/dns/gnunet-service-dns.c:967
 msgid "# Non-DNS UDP packet received via TUN interface"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:1032
+#: src/dns/gnunet-service-dns.c:1034
 #, fuzzy
 msgid "# DNS requests received via TUN interface"
 msgstr "# các đáp ứng lỗ hổng được gửi cho trình/máy khách"
 
-#: src/dns/gnunet-service-dns.c:1080 src/exit/gnunet-daemon-exit.c:3563
+#: src/dns/gnunet-service-dns.c:1082 src/exit/gnunet-daemon-exit.c:3565
 #, fuzzy
 msgid "need a valid IPv4 or IPv6 address\n"
 msgstr "Mức ưu tiên tiến trình không hợp lê « %s ».\n"
 
-#: src/dns/gnunet-service-dns.c:1090
+#: src/dns/gnunet-service-dns.c:1092
 #, c-format
 msgid "`%s' must be installed SUID, will not run DNS interceptor\n"
 msgstr ""
 
-#: src/dv/gnunet-dv.c:173
+#: src/dv/gnunet-dv.c:175
 #, fuzzy
 msgid "Print information about DV state"
 msgstr "In ra thông tin về các đồng đẳng GNUnet."
 
-#: src/exit/gnunet-daemon-exit.c:958
+#: src/exit/gnunet-daemon-exit.c:960
 #, fuzzy
 msgid "# TCP packets sent via TUN"
 msgstr "# các byte đã gửi qua UDP"
 
-#: src/exit/gnunet-daemon-exit.c:1059
+#: src/exit/gnunet-daemon-exit.c:1061
 #, fuzzy
 msgid "# ICMP packets sent via TUN"
 msgstr "# các byte đã gửi qua UDP"
 
-#: src/exit/gnunet-daemon-exit.c:1338
+#: src/exit/gnunet-daemon-exit.c:1340
 #, fuzzy
 msgid "# UDP packets sent via TUN"
 msgstr "# các byte đã gửi qua UDP"
 
-#: src/exit/gnunet-daemon-exit.c:1462 src/exit/gnunet-daemon-exit.c:1570
-#: src/exit/gnunet-daemon-exit.c:1617 src/exit/gnunet-daemon-exit.c:1699
-#: src/exit/gnunet-daemon-exit.c:1820 src/exit/gnunet-daemon-exit.c:1951
-#: src/exit/gnunet-daemon-exit.c:2205
+#: src/exit/gnunet-daemon-exit.c:1464 src/exit/gnunet-daemon-exit.c:1572
+#: src/exit/gnunet-daemon-exit.c:1619 src/exit/gnunet-daemon-exit.c:1701
+#: src/exit/gnunet-daemon-exit.c:1822 src/exit/gnunet-daemon-exit.c:1953
+#: src/exit/gnunet-daemon-exit.c:2207
 #, fuzzy
 msgid "# Bytes received from CADET"
 msgstr "# các byte đã nhận qua HTTP"
 
-#: src/exit/gnunet-daemon-exit.c:1465
+#: src/exit/gnunet-daemon-exit.c:1467
 #, fuzzy
 msgid "# UDP IP-exit requests received via cadet"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/exit/gnunet-daemon-exit.c:1573
+#: src/exit/gnunet-daemon-exit.c:1575
 #, fuzzy
 msgid "# UDP service requests received via cadet"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/exit/gnunet-daemon-exit.c:1613
+#: src/exit/gnunet-daemon-exit.c:1615
 #, fuzzy
 msgid "# TCP service creation requests received via cadet"
 msgstr "# các yêu cầu danh sách máy được nhận"
 
-#: src/exit/gnunet-daemon-exit.c:1702
+#: src/exit/gnunet-daemon-exit.c:1704
 #, fuzzy
 msgid "# TCP IP-exit creation requests received via cadet"
 msgstr "# các yêu cầu danh sách máy được nhận"
 
-#: src/exit/gnunet-daemon-exit.c:1786
+#: src/exit/gnunet-daemon-exit.c:1788
 #, fuzzy
 msgid "# TCP DATA requests dropped (no session)"
 msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải"
 
-#: src/exit/gnunet-daemon-exit.c:1823
+#: src/exit/gnunet-daemon-exit.c:1825
 #, fuzzy
 msgid "# TCP data requests received via cadet"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/exit/gnunet-daemon-exit.c:1954
+#: src/exit/gnunet-daemon-exit.c:1956
 #, fuzzy
 msgid "# ICMP IP-exit requests received via cadet"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/exit/gnunet-daemon-exit.c:2020 src/exit/gnunet-daemon-exit.c:2277
-#: src/exit/gnunet-daemon-exit.c:2632 src/vpn/gnunet-service-vpn.c:826
-#: src/vpn/gnunet-service-vpn.c:989 src/vpn/gnunet-service-vpn.c:2103
+#: src/exit/gnunet-daemon-exit.c:2022 src/exit/gnunet-daemon-exit.c:2279
+#: src/exit/gnunet-daemon-exit.c:2634 src/vpn/gnunet-service-vpn.c:828
+#: src/vpn/gnunet-service-vpn.c:991 src/vpn/gnunet-service-vpn.c:2105
 msgid "# ICMPv4 packets dropped (type not allowed)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2079 src/exit/gnunet-daemon-exit.c:2336
-#: src/exit/gnunet-daemon-exit.c:2669 src/vpn/gnunet-service-vpn.c:885
-#: src/vpn/gnunet-service-vpn.c:1022 src/vpn/gnunet-service-vpn.c:2156
+#: src/exit/gnunet-daemon-exit.c:2081 src/exit/gnunet-daemon-exit.c:2338
+#: src/exit/gnunet-daemon-exit.c:2671 src/vpn/gnunet-service-vpn.c:887
+#: src/vpn/gnunet-service-vpn.c:1024 src/vpn/gnunet-service-vpn.c:2158
 msgid "# ICMPv6 packets dropped (type not allowed)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2208
+#: src/exit/gnunet-daemon-exit.c:2210
 #, fuzzy
 msgid "# ICMP service requests received via cadet"
 msgstr "# các đáp ứng lỗ hổng được gửi cho trình/máy khách"
 
-#: src/exit/gnunet-daemon-exit.c:2262 src/vpn/gnunet-service-vpn.c:983
-#: src/vpn/gnunet-service-vpn.c:2094
+#: src/exit/gnunet-daemon-exit.c:2264 src/vpn/gnunet-service-vpn.c:985
+#: src/vpn/gnunet-service-vpn.c:2096
 msgid "# ICMPv4 packets dropped (impossible PT to v6)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2321 src/vpn/gnunet-service-vpn.c:873
-#: src/vpn/gnunet-service-vpn.c:2128 src/vpn/gnunet-service-vpn.c:2139
+#: src/exit/gnunet-daemon-exit.c:2323 src/vpn/gnunet-service-vpn.c:875
+#: src/vpn/gnunet-service-vpn.c:2130 src/vpn/gnunet-service-vpn.c:2141
 msgid "# ICMPv6 packets dropped (impossible PT to v4)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2400 src/exit/gnunet-daemon-exit.c:3066
+#: src/exit/gnunet-daemon-exit.c:2402 src/exit/gnunet-daemon-exit.c:3068
 #, fuzzy
 msgid "# Inbound CADET channels created"
 msgstr "# các truy vấn lỗ hổng được định tuyến"
 
-#: src/exit/gnunet-daemon-exit.c:2520
+#: src/exit/gnunet-daemon-exit.c:2522
 #, c-format
 msgid "Got duplicate service records for `%s:%u'\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2539
+#: src/exit/gnunet-daemon-exit.c:2541
 #, fuzzy
 msgid "# Messages transmitted via cadet channels"
 msgstr "# các byte được gửi"
 
-#: src/exit/gnunet-daemon-exit.c:2717
+#: src/exit/gnunet-daemon-exit.c:2719
 msgid "# ICMP packets dropped (not allowed)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2725
+#: src/exit/gnunet-daemon-exit.c:2727
 msgid "ICMP Packet dropped, have no matching connection information\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2799
+#: src/exit/gnunet-daemon-exit.c:2801
 msgid "UDP Packet dropped, have no matching connection information\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2871
+#: src/exit/gnunet-daemon-exit.c:2873
 msgid "TCP Packet dropped, have no matching connection information\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2919
+#: src/exit/gnunet-daemon-exit.c:2921
 #, fuzzy
 msgid "# Packets received from TUN"
 msgstr "# các byte đã nhận qua HTTP"
 
-#: src/exit/gnunet-daemon-exit.c:2933
+#: src/exit/gnunet-daemon-exit.c:2935
 #, fuzzy
 msgid "# Bytes received from TUN"
 msgstr "# các byte đã nhận qua HTTP"
 
-#: src/exit/gnunet-daemon-exit.c:2959
+#: src/exit/gnunet-daemon-exit.c:2961
 msgid "IPv4 packet options received.  Ignored.\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2986
+#: src/exit/gnunet-daemon-exit.c:2988
 #, c-format
 msgid "IPv4 packet with unsupported next header %u received.  Ignored.\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3032
+#: src/exit/gnunet-daemon-exit.c:3034
 #, c-format
 msgid "IPv6 packet with unsupported next header %d received.  Ignored.\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3040
+#: src/exit/gnunet-daemon-exit.c:3042
 #, c-format
 msgid "Packet from unknown protocol %u received.  Ignored.\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3243 src/exit/gnunet-daemon-exit.c:3253
+#: src/exit/gnunet-daemon-exit.c:3245 src/exit/gnunet-daemon-exit.c:3255
 #, fuzzy, c-format
 msgid "Option `%s' for domain `%s' is not formatted correctly!\n"
 msgstr "Bị từ chối đặt tùy chọn « %s » trong phần « %s » thành « %s ».\n"
 
-#: src/exit/gnunet-daemon-exit.c:3267 src/exit/gnunet-daemon-exit.c:3275
+#: src/exit/gnunet-daemon-exit.c:3269 src/exit/gnunet-daemon-exit.c:3277
 #, c-format
 msgid "`%s' is not a valid port number (for domain `%s')!"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3316
+#: src/exit/gnunet-daemon-exit.c:3318
 #, c-format
 msgid "No addresses found for hostname `%s' of service `%s'!\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3330 src/exit/gnunet-daemon-exit.c:3343
+#: src/exit/gnunet-daemon-exit.c:3332 src/exit/gnunet-daemon-exit.c:3345
 #, c-format
 msgid "Service `%s' configured for IPv4, but IPv4 is disabled!\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3355
+#: src/exit/gnunet-daemon-exit.c:3357
 #, c-format
 msgid "No IP addresses found for hostname `%s' of service `%s'!\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3499
+#: src/exit/gnunet-daemon-exit.c:3501
 msgid ""
 "This system does not support IPv4, will disable IPv4 functions despite them "
 "being enabled in the configuration\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3507
+#: src/exit/gnunet-daemon-exit.c:3509
 msgid ""
 "This system does not support IPv6, will disable IPv6 functions despite them "
 "being enabled in the configuration\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3514
+#: src/exit/gnunet-daemon-exit.c:3516
 msgid ""
 "Cannot enable IPv4 exit but disable IPv4 on TUN interface, will use "
 "ENABLE_IPv4=YES\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3520
+#: src/exit/gnunet-daemon-exit.c:3522
 msgid ""
 "Cannot enable IPv6 exit but disable IPv6 on TUN interface, will use "
 "ENABLE_IPv6=YES\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3688
+#: src/exit/gnunet-daemon-exit.c:3690
 msgid "Must be a number"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3803
+#: src/exit/gnunet-daemon-exit.c:3805
 #, c-format
 msgid "`%s' must be installed SUID, EXIT will not work\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3815 src/pt/gnunet-daemon-pt.c:1202
+#: src/exit/gnunet-daemon-exit.c:3817 src/pt/gnunet-daemon-pt.c:1204
 msgid "No useful service enabled.  Exiting.\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3964
+#: src/exit/gnunet-daemon-exit.c:3966
 msgid "Daemon to run to provide an IP exit node for the VPN"
 msgstr ""
 
-#: src/fragmentation/defragmentation.c:273
+#: src/fragmentation/defragmentation.c:275
 msgid "# acknowledgements sent for fragment"
 msgstr ""
 
-#: src/fragmentation/defragmentation.c:466
-#: src/transport/plugin_transport_wlan.c:1552
+#: src/fragmentation/defragmentation.c:468
+#: src/transport/plugin_transport_wlan.c:1554
 #, fuzzy
 msgid "# fragments received"
 msgstr "# các mảnh bị loại bỏ"
 
-#: src/fragmentation/defragmentation.c:536
+#: src/fragmentation/defragmentation.c:538
 #, fuzzy
 msgid "# duplicate fragments received"
 msgstr "# các kết quả dht được nhận"
 
-#: src/fragmentation/defragmentation.c:554
+#: src/fragmentation/defragmentation.c:556
 msgid "# messages defragmented"
 msgstr "# các thông báo được chắp liền"
 
-#: src/fragmentation/fragmentation.c:238
+#: src/fragmentation/fragmentation.c:240
 #, fuzzy
 msgid "# fragments transmitted"
 msgstr "# Các tự quảng cáo được truyền"
 
-#: src/fragmentation/fragmentation.c:243
+#: src/fragmentation/fragmentation.c:245
 #, fuzzy
 msgid "# fragments retransmitted"
 msgstr "# Các tự quảng cáo được truyền"
 
-#: src/fragmentation/fragmentation.c:276
+#: src/fragmentation/fragmentation.c:278
 #, fuzzy
 msgid "# fragments wrap arounds"
 msgstr "# Các tự quảng cáo được truyền"
 
-#: src/fragmentation/fragmentation.c:323
+#: src/fragmentation/fragmentation.c:325
 msgid "# messages fragmented"
 msgstr "# các thông báo bị tế phân"
 
-#: src/fragmentation/fragmentation.c:329
+#: src/fragmentation/fragmentation.c:331
 msgid "# total size of fragmented messages"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:454
+#: src/fragmentation/fragmentation.c:456
 #, fuzzy
 msgid "# fragment acknowledgements received"
 msgstr "# Các quảng cáo đồng đẳng được nhận"
 
-#: src/fragmentation/fragmentation.c:461
+#: src/fragmentation/fragmentation.c:463
 msgid "# bits removed from fragmentation ACKs"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:485
+#: src/fragmentation/fragmentation.c:487
 #, fuzzy
 msgid "# fragmentation transmissions completed"
 msgstr "# các sự truyền PONG bị lỗi"
 
-#: src/fs/fs_api.c:497
+#: src/fs/fs_api.c:499
 #, fuzzy, c-format
 msgid "Could not open file `%s': %s"
 msgstr "Lỗi mở tập tin theo dõi « %s »: %s\n"
 
-#: src/fs/fs_api.c:508
+#: src/fs/fs_api.c:510
 #, fuzzy, c-format
 msgid "Could not read file `%s': %s"
 msgstr "Lỗi mở tập tin theo dõi « %s »: %s\n"
 
-#: src/fs/fs_api.c:516
+#: src/fs/fs_api.c:518
 #, c-format
 msgid "Short read reading from file `%s'!"
 msgstr ""
 
-#: src/fs/fs_api.c:1124
+#: src/fs/fs_api.c:1126
 #, fuzzy, c-format
 msgid "Failed to resume publishing information `%s': %s\n"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/fs/fs_api.c:1644
+#: src/fs/fs_api.c:1646
 #, c-format
 msgid "Failure while resuming publishing operation `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_api.c:1660
+#: src/fs/fs_api.c:1662
 #, fuzzy, c-format
 msgid "Failed to resume publishing operation `%s': %s\n"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/fs/fs_api.c:2320
+#: src/fs/fs_api.c:2322
 #, c-format
 msgid "Failure while resuming unindexing operation `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_api.c:2330
+#: src/fs/fs_api.c:2332
 #, fuzzy, c-format
 msgid "Failed to resume unindexing operation `%s': %s\n"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/fs/fs_api.c:2458 src/fs/fs_api.c:2704
+#: src/fs/fs_api.c:2460 src/fs/fs_api.c:2706
 #, fuzzy, c-format
 msgid "Failed to resume sub-download `%s': %s\n"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/fs/fs_api.c:2476
+#: src/fs/fs_api.c:2478
 #, fuzzy, c-format
 msgid "Failed to resume sub-search `%s': %s\n"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/fs/fs_api.c:2491 src/fs/fs_api.c:2510 src/fs/fs_api.c:3014
+#: src/fs/fs_api.c:2493 src/fs/fs_api.c:2512 src/fs/fs_api.c:3016
 #, c-format
 msgid "Failure while resuming search operation `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_api.c:2694
+#: src/fs/fs_api.c:2696
 #, c-format
 msgid "Failed to resume sub-download `%s': could not open file `%s'\n"
 msgstr ""
 
-#: src/fs/fs_api.c:2957
+#: src/fs/fs_api.c:2959
 msgid "Could not resume running search, will resume as paused search\n"
 msgstr ""
 
-#: src/fs/fs_api.c:3052
+#: src/fs/fs_api.c:3054
 #, c-format
 msgid "Failure while resuming download operation `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_directory.c:211
+#: src/fs/fs_directory.c:213
 #, fuzzy
 msgid "MAGIC mismatch.  This is not a GNUnet directory.\n"
 msgstr "Lỗi định dạng tập tin (không phải là thư mục GNUnet ?)\n"
 
-#: src/fs/fs_download.c:308
+#: src/fs/fs_download.c:310
 msgid ""
 "Recursive downloads of directories larger than 4 GB are not supported on 32-"
 "bit systems\n"
 msgstr ""
 
-#: src/fs/fs_download.c:333
+#: src/fs/fs_download.c:335
 msgid "Directory too large for system address space\n"
 msgstr ""
 
-#: src/fs/fs_download.c:345
+#: src/fs/fs_download.c:347
 #, fuzzy, c-format
 msgid ""
 "Failed to access full directroy contents of `%s' for recursive download\n"
 msgstr "Lỗi cập nhật dữ liệu cho mô-đun « %s »\n"
 
-#: src/fs/fs_download.c:532 src/fs/fs_download.c:544
+#: src/fs/fs_download.c:534 src/fs/fs_download.c:546
 #, fuzzy, c-format
 msgid "Failed to open file `%s' for writing"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/fs/fs_download.c:954
+#: src/fs/fs_download.c:956
 #, fuzzy, c-format
 msgid "Failed to create directory for recursive download of `%s'\n"
 msgstr "Lỗi cập nhật dữ liệu cho mô-đun « %s »\n"
 
-#: src/fs/fs_download.c:1045
+#: src/fs/fs_download.c:1047
 #, c-format
 msgid ""
 "Internal error or bogus download URI (expected %u bytes at depth %u and "
 "offset %llu/%llu, got %u bytes)"
 msgstr ""
 
-#: src/fs/fs_download.c:1073
+#: src/fs/fs_download.c:1075
 msgid "internal error decrypting content"
 msgstr ""
 
-#: src/fs/fs_download.c:1097
+#: src/fs/fs_download.c:1099
 #, fuzzy, c-format
 msgid "Download failed: could not open file `%s': %s"
 msgstr "Lỗi mở tập tin theo dõi « %s »: %s\n"
 
-#: src/fs/fs_download.c:1109
+#: src/fs/fs_download.c:1111
 #, fuzzy, c-format
 msgid "Failed to seek to offset %llu in file `%s': %s"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/fs/fs_download.c:1118
+#: src/fs/fs_download.c:1120
 #, fuzzy, c-format
 msgid "Failed to write block of %u bytes at offset %llu in file `%s': %s"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/fs/fs_download.c:1218
+#: src/fs/fs_download.c:1220
 #, fuzzy
 msgid "internal error decoding tree"
 msgstr "=\tLỗi đọc thư mục.\n"
 
-#: src/fs/fs_download.c:1883
+#: src/fs/fs_download.c:1885
 #, fuzzy
 msgid "Invalid URI"
 msgstr "Dữ liệu nhập không hợp lệ.\n"
 
-#: src/fs/fs_getopt.c:224
+#: src/fs/fs_getopt.c:235
 #, c-format
 msgid ""
 "Unknown metadata type in metadata option `%s'.  Using metadata type "
@@ -2991,615 +2981,615 @@ msgstr ""
 "Không rõ kiểu siêu dữ liệu trong tùy chọn siêu dữ liệu « %s ». Đang ùng kiểu "
 "siêu dữ liệu « không rõ » (unknown) để thay thế.\n"
 
-#: src/fs/fs_list_indexed.c:150
+#: src/fs/fs_list_indexed.c:152
 #, fuzzy, c-format
 msgid "Failed to receive response from `%s' service.\n"
 msgstr ""
 "\n"
 "Không nhận được đáp ứng từ gnunetd.\n"
 
-#: src/fs/fs_list_indexed.c:194
+#: src/fs/fs_list_indexed.c:196
 #, fuzzy, c-format
 msgid "Failed to not connect to `%s' service.\n"
 msgstr "Lỗi sơ khởi dịch vụ « %s ».\n"
 
-#: src/fs/fs_misc.c:126
+#: src/fs/fs_misc.c:128
 #, c-format
 msgid "Did not find mime type `%s' in extension list.\n"
 msgstr ""
 
-#: src/fs/fs_namespace.c:205
+#: src/fs/fs_namespace.c:207
 #, fuzzy, c-format
 msgid "Failed to open `%s' for writing: %s\n"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/fs/fs_namespace.c:230
+#: src/fs/fs_namespace.c:232
 #, fuzzy, c-format
 msgid "Failed to write `%s': %s\n"
 msgstr "Lỗi chạy %s: %s %d\n"
 
-#: src/fs/fs_namespace.c:322
+#: src/fs/fs_namespace.c:324
 #, fuzzy, c-format
 msgid "Failed to read `%s': %s\n"
 msgstr "Lỗi chạy %s: %s %d\n"
 
-#: src/fs/fs_namespace.c:468
+#: src/fs/fs_namespace.c:470
 #, fuzzy
 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:125 src/fs/fs_publish.c:436
+#: src/fs/fs_publish.c:127 src/fs/fs_publish.c:438
 #, 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:722 src/fs/fs_publish.c:776 src/fs/fs_publish.c:821
-#: src/fs/fs_publish.c:842 src/fs/fs_publish.c:872 src/fs/fs_publish.c:1138
+#: src/fs/fs_publish.c:724 src/fs/fs_publish.c:778 src/fs/fs_publish.c:823
+#: src/fs/fs_publish.c:844 src/fs/fs_publish.c:874 src/fs/fs_publish.c:1140
 #, 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:778
+#: src/fs/fs_publish.c:780
 #, fuzzy
 msgid "error on index-start request to `fs' service"
 msgstr "Lỗi kết nối đến gnunetd.\n"
 
-#: src/fs/fs_publish.c:823
+#: src/fs/fs_publish.c:825
 msgid "failed to compute hash"
 msgstr ""
 
-#: src/fs/fs_publish.c:843
+#: src/fs/fs_publish.c:845
 #, fuzzy
 msgid "filename too long"
 msgstr "tên tập tin"
 
-#: src/fs/fs_publish.c:874
+#: src/fs/fs_publish.c:876
 msgid "could not connect to `fs' service"
 msgstr ""
 
-#: src/fs/fs_publish.c:900
+#: src/fs/fs_publish.c:902
 #, 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:989 src/fs/fs_publish.c:1025
+#: src/fs/fs_publish.c:991 src/fs/fs_publish.c:1027
 msgid "Can not create LOC URI. Will continue with CHK instead.\n"
 msgstr ""
 
-#: src/fs/fs_publish.c:1092
+#: src/fs/fs_publish.c:1094
 #, 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:1100
+#: src/fs/fs_publish.c:1102
 #, 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:1140
+#: src/fs/fs_publish.c:1142
 msgid "needs to be an actual file"
 msgstr ""
 
-#: src/fs/fs_publish.c:1379
+#: src/fs/fs_publish.c:1381
 #, fuzzy, c-format
 msgid "Datastore failure: %s"
 msgstr "Kho dữ liệu đầy.\n"
 
-#: src/fs/fs_publish.c:1470
+#: src/fs/fs_publish.c:1472
 #, c-format
 msgid "Reserving space for %u entries and %llu bytes for publication\n"
 msgstr ""
 
-#: src/fs/fs_publish_ksk.c:218
+#: src/fs/fs_publish_ksk.c:220
 #, fuzzy
 msgid "Could not connect to datastore."
 msgstr "« %s »: Không thể kết nối.\n"
 
-#: src/fs/fs_publish_ublock.c:239
+#: src/fs/fs_publish_ublock.c:241
 #, fuzzy
 msgid "Internal error."
 msgstr "Lỗi VR."
 
-#: src/fs/fs_search.c:820 src/fs/fs_search.c:890
+#: src/fs/fs_search.c:822 src/fs/fs_search.c:892
 #, fuzzy, c-format
 msgid "Failed to parse URI `%s': %s\n"
 msgstr "Tập tin « %s » có URI: %s\n"
 
-#: src/fs/fs_search.c:977
+#: src/fs/fs_search.c:979
 #, c-format
 msgid "Got result with unknown block type `%d', ignoring"
 msgstr ""
 
-#: src/fs/fs_unindex.c:61
+#: src/fs/fs_unindex.c:63
 msgid "Failed to find given position in file"
 msgstr ""
 
-#: src/fs/fs_unindex.c:66
+#: src/fs/fs_unindex.c:68
 #, fuzzy
 msgid "Failed to read file"
 msgstr "Lỗi gửi tin nhẳn.\n"
 
-#: src/fs/fs_unindex.c:273
+#: src/fs/fs_unindex.c:275
 #, fuzzy
 msgid "Error communicating with `fs' service."
 msgstr "Cổng để liên lạc với giao diện người dùng GNUnet"
 
-#: src/fs/fs_unindex.c:324
+#: src/fs/fs_unindex.c:326
 #, fuzzy
 msgid "Failed to connect to FS service for unindexing."
 msgstr "Không kết nối được đến trình nền gnunetd."
 
-#: src/fs/fs_unindex.c:374 src/fs/fs_unindex.c:386
+#: src/fs/fs_unindex.c:376 src/fs/fs_unindex.c:388
 #, fuzzy
 msgid "Failed to get KSKs from directory scan."
 msgstr "Lỗi truy cập đến thư mục nhà GNUnet « %s »\n"
 
-#: src/fs/fs_unindex.c:382
+#: src/fs/fs_unindex.c:384
 #, fuzzy, c-format
 msgid "Internal error scanning `%s'.\n"
 msgstr "=\tLỗi đọc thư mục.\n"
 
-#: src/fs/fs_unindex.c:441
+#: src/fs/fs_unindex.c:443
 #, fuzzy, c-format
 msgid "Failed to remove UBlock: %s\n"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/fs/fs_unindex.c:586 src/fs/fs_unindex.c:650
+#: src/fs/fs_unindex.c:588 src/fs/fs_unindex.c:652
 #, fuzzy
 msgid "Failed to connect to `datastore' service."
 msgstr "Lỗi sơ khởi dịch vụ « %s ».\n"
 
-#: src/fs/fs_unindex.c:663
+#: src/fs/fs_unindex.c:665
 #, fuzzy
 msgid "Failed to open file for unindexing."
 msgstr "Không kết nối được đến trình nền gnunetd."
 
-#: src/fs/fs_unindex.c:702
+#: src/fs/fs_unindex.c:704
 #, fuzzy
 msgid "Failed to compute hash of file."
 msgstr "Không kết nối được đến trình nền gnunetd."
 
-#: src/fs/fs_uri.c:232
+#: src/fs/fs_uri.c:234
 #, no-c-format
 msgid "Malformed KSK URI (`%' must be followed by HEX number)"
 msgstr ""
 
-#: src/fs/fs_uri.c:291
+#: src/fs/fs_uri.c:293
 msgid "Malformed KSK URI (must not begin or end with `+')"
 msgstr ""
 
-#: src/fs/fs_uri.c:309
+#: src/fs/fs_uri.c:311
 msgid "Malformed KSK URI (`++' not allowed)"
 msgstr ""
 
-#: src/fs/fs_uri.c:316
+#: src/fs/fs_uri.c:318
 msgid "Malformed KSK URI (quotes not balanced)"
 msgstr ""
 
-#: src/fs/fs_uri.c:386
+#: src/fs/fs_uri.c:388
 msgid "Malformed SKS URI (wrong syntax)"
 msgstr ""
 
-#: src/fs/fs_uri.c:427
+#: src/fs/fs_uri.c:429
 msgid "Malformed CHK URI (wrong syntax)"
 msgstr ""
 
-#: src/fs/fs_uri.c:442
+#: src/fs/fs_uri.c:444
 msgid "Malformed CHK URI (failed to decode CHK)"
 msgstr ""
 
-#: src/fs/fs_uri.c:521
+#: src/fs/fs_uri.c:523
 msgid "LOC URI malformed (wrong syntax)"
 msgstr ""
 
-#: src/fs/fs_uri.c:536
+#: src/fs/fs_uri.c:538
 msgid "LOC URI malformed (no CHK)"
 msgstr ""
 
-#: src/fs/fs_uri.c:546
+#: src/fs/fs_uri.c:548
 msgid "LOC URI malformed (missing LOC)"
 msgstr ""
 
-#: src/fs/fs_uri.c:554
+#: src/fs/fs_uri.c:556
 msgid "LOC URI malformed (wrong syntax for public key)"
 msgstr ""
 
-#: src/fs/fs_uri.c:562
+#: src/fs/fs_uri.c:564
 msgid "LOC URI malformed (could not decode public key)"
 msgstr ""
 
-#: src/fs/fs_uri.c:568
+#: src/fs/fs_uri.c:570
 msgid "LOC URI malformed (could not find signature)"
 msgstr ""
 
-#: src/fs/fs_uri.c:574
+#: src/fs/fs_uri.c:576
 msgid "LOC URI malformed (wrong syntax for signature)"
 msgstr ""
 
-#: src/fs/fs_uri.c:583
+#: src/fs/fs_uri.c:585
 msgid "LOC URI malformed (could not decode signature)"
 msgstr ""
 
-#: src/fs/fs_uri.c:589
+#: src/fs/fs_uri.c:591
 msgid "LOC URI malformed (wrong syntax for expiration time)"
 msgstr ""
 
-#: src/fs/fs_uri.c:595
+#: src/fs/fs_uri.c:597
 msgid "LOC URI malformed (could not parse expiration time)"
 msgstr ""
 
-#: src/fs/fs_uri.c:607
+#: src/fs/fs_uri.c:609
 msgid "LOC URI malformed (signature failed validation)"
 msgstr ""
 
-#: src/fs/fs_uri.c:641
+#: src/fs/fs_uri.c:643
 #, fuzzy
 msgid "invalid argument"
 msgstr "Đối số không hợp lệ cho « %s ».\n"
 
-#: src/fs/fs_uri.c:653
+#: src/fs/fs_uri.c:655
 msgid "Unrecognized URI type"
 msgstr ""
 
-#: src/fs/fs_uri.c:1057 src/fs/fs_uri.c:1084
+#: src/fs/fs_uri.c:1059 src/fs/fs_uri.c:1086
 msgid "No keywords specified!\n"
 msgstr "Chưa ghi rõ từ khoá.\n"
 
-#: src/fs/fs_uri.c:1090
+#: src/fs/fs_uri.c:1092
 msgid "Number of double-quotes not balanced!\n"
 msgstr "Có dấu nháy kép thừa hay thiếu.\n"
 
-#: src/fs/gnunet-auto-share.c:230
+#: src/fs/gnunet-auto-share.c:232
 #, fuzzy, c-format
 msgid "Failed to load state: %s\n"
 msgstr "Lỗi bắt đầu thu thập.\n"
 
-#: src/fs/gnunet-auto-share.c:283 src/fs/gnunet-auto-share.c:293
-#: src/fs/gnunet-auto-share.c:303
+#: src/fs/gnunet-auto-share.c:285 src/fs/gnunet-auto-share.c:295
+#: src/fs/gnunet-auto-share.c:305
 #, fuzzy, c-format
 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:405
+#: src/fs/gnunet-auto-share.c:407
 #, c-format
 msgid "Publication of `%s' done\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:492
+#: src/fs/gnunet-auto-share.c:494
 #, 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:502
+#: src/fs/gnunet-auto-share.c:504
 #, 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:711
+#: src/fs/gnunet-auto-share.c:713
 #, 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:765 src/fs/gnunet-publish.c:898
+#: src/fs/gnunet-auto-share.c:767 src/fs/gnunet-publish.c:903
 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:770 src/fs/gnunet-publish.c:902
+#: src/fs/gnunet-auto-share.c:772 src/fs/gnunet-publish.c:907
 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:775 src/fs/gnunet-publish.c:907
+#: src/fs/gnunet-auto-share.c:777 src/fs/gnunet-publish.c:912
 msgid "do not use libextractor to add keywords or metadata"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:781 src/fs/gnunet-publish.c:942
+#: src/fs/gnunet-auto-share.c:783 src/fs/gnunet-publish.c:944
 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:787 src/fs/gnunet-publish.c:954
+#: src/fs/gnunet-auto-share.c:789 src/fs/gnunet-publish.c:955
 msgid "set the desired replication LEVEL"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:811
+#: src/fs/gnunet-auto-share.c:813
 #, fuzzy
 msgid "Automatically publish files from a directory on GNUnet"
 msgstr "Tự động chia sẻ một thư mục."
 
-#: src/fs/gnunet-daemon-fsprofiler.c:646
+#: src/fs/gnunet-daemon-fsprofiler.c:648
 msgid "Daemon to use file-sharing to measure its performance."
 msgstr ""
 
-#: src/fs/gnunet-directory.c:51
+#: src/fs/gnunet-directory.c:53
 #, c-format
 msgid "\t<original file embedded in %u bytes of meta data>\n"
 msgstr ""
 
-#: src/fs/gnunet-directory.c:103
+#: src/fs/gnunet-directory.c:105
 #, fuzzy, c-format
 msgid "Directory `%s' meta data:\n"
 msgstr "==> Thư mục « %s »:\n"
 
-#: src/fs/gnunet-directory.c:106
+#: src/fs/gnunet-directory.c:108
 #, fuzzy, c-format
 msgid "Directory `%s' contents:\n"
 msgstr "==> Thư mục « %s »:\n"
 
-#: src/fs/gnunet-directory.c:141
+#: src/fs/gnunet-directory.c:143
 #, fuzzy
 msgid "You must specify a filename to inspect.\n"
 msgstr "Phải ghi rõ chỉ một tên tập tin để chèn.\n"
 
-#: src/fs/gnunet-directory.c:154
+#: src/fs/gnunet-directory.c:156
 #, fuzzy, c-format
 msgid "Failed to read directory `%s'\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/fs/gnunet-directory.c:163
+#: src/fs/gnunet-directory.c:165
 #, fuzzy, c-format
 msgid "`%s' is not a GNUnet directory\n"
 msgstr "Lỗi định dạng tập tin (không phải là thư mục GNUnet ?)\n"
 
-#: src/fs/gnunet-directory.c:192
+#: src/fs/gnunet-directory.c:194
 #, fuzzy
 msgid "Display contents of a GNUnet directory"
 msgstr "Lỗi định dạng tập tin (không phải là thư mục GNUnet ?)\n"
 
-#: src/fs/gnunet-download.c:137
+#: src/fs/gnunet-download.c:139
 #, fuzzy, c-format
 msgid "Starting download `%s'.\n"
 msgstr "Đang bắt đầu tài về « %s »\n"
 
-#: src/fs/gnunet-download.c:147
+#: src/fs/gnunet-download.c:149
 #, fuzzy
 msgid "<unknown time>"
 msgstr "Lỗi không rõ"
 
-#: src/fs/gnunet-download.c:156
+#: src/fs/gnunet-download.c:158
 #, c-format
 msgid ""
 "Downloading `%s' at %llu/%llu (%s remaining, %s/s). Block took %s to "
 "download\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:182
+#: src/fs/gnunet-download.c:184
 #, fuzzy, c-format
 msgid "Error downloading: %s.\n"
 msgstr "Gặp lỗi khi tải xuống: %s\n"
 
-#: src/fs/gnunet-download.c:199
+#: src/fs/gnunet-download.c:201
 #, fuzzy, c-format
 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:214 src/fs/gnunet-publish.c:293
-#: src/fs/gnunet-search.c:210 src/fs/gnunet-unindex.c:105
+#: src/fs/gnunet-download.c:216 src/fs/gnunet-publish.c:295
+#: src/fs/gnunet-search.c:215 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:244
+#: src/fs/gnunet-download.c:246
 #, 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:251 src/fs/gnunet-publish.c:724
+#: src/fs/gnunet-download.c:253 src/fs/gnunet-publish.c:727
 #, fuzzy, c-format
 msgid "Failed to parse URI: %s\n"
 msgstr "Tập tin « %s » có URI: %s\n"
 
-#: src/fs/gnunet-download.c:262
+#: src/fs/gnunet-download.c:264
 msgid "Only CHK or LOC URIs supported.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:271
+#: src/fs/gnunet-download.c:273
 msgid "Target filename must be specified.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:289 src/fs/gnunet-publish.c:868
-#: src/fs/gnunet-search.c:268 src/fs/gnunet-unindex.c:137
+#: src/fs/gnunet-download.c:291 src/fs/gnunet-publish.c:872
+#: src/fs/gnunet-search.c:273 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:337 src/fs/gnunet-search.c:311
+#: src/fs/gnunet-download.c:339 src/fs/gnunet-search.c:315
 #, 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:342
+#: src/fs/gnunet-download.c:344
 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:347 src/fs/gnunet-search.c:317
+#: src/fs/gnunet-download.c:349 src/fs/gnunet-search.c:319
 msgid "only search the local peer (no P2P network search)"
 msgstr ""
 
-#: src/fs/gnunet-download.c:352
+#: src/fs/gnunet-download.c:354
 msgid "write the file to FILENAME"
 msgstr "ghi tập tin vào TÊN_TẬP_TIN"
 
-#: src/fs/gnunet-download.c:357
+#: src/fs/gnunet-download.c:359
 #, 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:362
+#: src/fs/gnunet-download.c:364
 #, 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:366
+#: src/fs/gnunet-download.c:368
 msgid "download a GNUnet directory recursively"
 msgstr "tải xuống đệ quy một thư mục GNUnet"
 
-#: src/fs/gnunet-download.c:384
+#: src/fs/gnunet-download.c:386
 msgid ""
 "Download files from GNUnet using a GNUnet CHK or LOC URI (gnunet://fs/"
 "chk/...)"
 msgstr ""
 
-#: src/fs/gnunet-fs.c:117
+#: src/fs/gnunet-fs.c:119
 msgid "print a list of all indexed files"
 msgstr ""
 
-#: src/fs/gnunet-fs.c:128
+#: src/fs/gnunet-fs.c:130
 #, fuzzy
 msgid "Special file-sharing operations"
 msgstr "Tùy chọn chia sẻ tập tin"
 
-#: src/fs/gnunet-fs-profiler.c:209
+#: src/fs/gnunet-fs-profiler.c:211
 msgid "run the experiment with COUNT peers"
 msgstr ""
 
-#: src/fs/gnunet-fs-profiler.c:215
+#: src/fs/gnunet-fs-profiler.c:217
 msgid "specifies name of a file with the HOSTS the testbed should use"
 msgstr ""
 
-#: src/fs/gnunet-fs-profiler.c:221
+#: src/fs/gnunet-fs-profiler.c:223
 msgid "automatically terminate experiment after DELAY"
 msgstr ""
 
-#: src/fs/gnunet-fs-profiler.c:231
+#: src/fs/gnunet-fs-profiler.c:233
 msgid "run a testbed to measure file-sharing performance"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:217 src/fs/gnunet-publish.c:229
+#: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:231
 #, c-format
 msgid "Publishing `%s' at %llu/%llu (%s remaining)\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:237
+#: src/fs/gnunet-publish.c:239
 #, 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:244
+#: src/fs/gnunet-publish.c:246
 #, c-format
 msgid "Publishing `%s' done.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:249
+#: src/fs/gnunet-publish.c:251
 #, fuzzy, c-format
 msgid "URI is `%s'.\n"
 msgstr "Tôi là đồng đẳng « %s ».\n"
 
-#: src/fs/gnunet-publish.c:257
+#: src/fs/gnunet-publish.c:259
 #, fuzzy, c-format
 msgid "Namespace URI is `%s'.\n"
 msgstr "Tôi là đồng đẳng « %s ».\n"
 
-#: src/fs/gnunet-publish.c:273
+#: src/fs/gnunet-publish.c:275
 #, fuzzy
 msgid "Starting cleanup after abort\n"
 msgstr "Hoàn thành khởi chạy « %s ».\n"
 
-#: src/fs/gnunet-publish.c:280
+#: src/fs/gnunet-publish.c:282
 #, fuzzy
 msgid "Cleanup after abort completed.\n"
 msgstr "Hoàn thành khởi chạy « %s ».\n"
 
-#: src/fs/gnunet-publish.c:286
+#: src/fs/gnunet-publish.c:288
 #, fuzzy
 msgid "Cleanup after abort failed.\n"
 msgstr "Hoàn thành khởi chạy « %s ».\n"
 
-#: src/fs/gnunet-publish.c:428
+#: src/fs/gnunet-publish.c:430
 #, 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:433
+#: src/fs/gnunet-publish.c:435
 #, fuzzy, c-format
 msgid "Keywords for file `%s' (%s)\n"
 msgstr "Từ khoá cho tập tin « %s »:\n"
 
-#: src/fs/gnunet-publish.c:587
+#: src/fs/gnunet-publish.c:590
 #, fuzzy
 msgid "Could not publish\n"
 msgstr "Không thể truy cập đến « %s »: %s\n"
 
-#: src/fs/gnunet-publish.c:612
+#: src/fs/gnunet-publish.c:615
 #, 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:646
+#: src/fs/gnunet-publish.c:649
 #, 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:650
+#: src/fs/gnunet-publish.c:653
 #, fuzzy, c-format
 msgid "Scanning file `%s'.\n"
 msgstr "Đang bắt đầu tài về « %s »\n"
 
-#: src/fs/gnunet-publish.c:656
+#: src/fs/gnunet-publish.c:659
 #, c-format
 msgid "There was trouble processing file `%s', skipping it.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:663
+#: src/fs/gnunet-publish.c:666
 msgid "Preprocessing complete.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:668
+#: src/fs/gnunet-publish.c:671
 #, 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:675
+#: src/fs/gnunet-publish.c:678
 msgid "Meta data extraction has finished.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:684
+#: src/fs/gnunet-publish.c:687
 #, fuzzy
 msgid "Internal error scanning directory.\n"
 msgstr "=\tLỗi đọc thư mục.\n"
 
-#: src/fs/gnunet-publish.c:712
+#: src/fs/gnunet-publish.c:715
 #, 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:745
+#: 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:759
+#: 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:815
+#: 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:822
+#: 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:828
+#: 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:836 src/vpn/gnunet-vpn.c:208
+#: src/fs/gnunet-publish.c:840 src/vpn/gnunet-vpn.c:210
 #, 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:847 src/fs/gnunet-publish.c:855
-#: src/transport/gnunet-transport.c:1280 src/transport/gnunet-transport.c:1307
+#: src/fs/gnunet-publish.c:851 src/fs/gnunet-publish.c:859
+#: src/transport/gnunet-transport.c:1282 src/transport/gnunet-transport.c:1309
 #, c-format
 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:911
+#: src/fs/gnunet-publish.c:916
 msgid ""
 "print list of extracted keywords that would be used, but do not perform "
 "upload"
@@ -3607,7 +3597,7 @@ msgstr ""
 "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:917
+#: src/fs/gnunet-publish.c:922
 msgid ""
 "add an additional keyword for the top-level file or directory (this option "
 "can be specified multiple times)"
@@ -3615,11 +3605,11 @@ msgstr ""
 "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:923
+#: src/fs/gnunet-publish.c:928
 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:928
+#: src/fs/gnunet-publish.c:932
 msgid ""
 "do not index, perform full insertion (stores entire file in encrypted form "
 "in GNUnet database)"
@@ -3627,7 +3617,7 @@ msgstr ""
 "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:938
 msgid ""
 "specify ID of an updated version to be published in the future (for "
 "namespace insertions only)"
@@ -3635,12 +3625,12 @@ msgstr ""
 "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:948
+#: src/fs/gnunet-publish.c:949
 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:958
+#: src/fs/gnunet-publish.c:959
 #, fuzzy
 msgid ""
 "only simulate the process but do not do any actual publishing (useful to "
@@ -3648,7 +3638,7 @@ msgid ""
 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:964
+#: src/fs/gnunet-publish.c:965
 msgid ""
 "set the ID of this version of the publication (for namespace insertions only)"
 msgstr ""
@@ -3662,31 +3652,31 @@ msgstr ""
 "Đị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:987
+#: src/fs/gnunet-publish.c:989
 msgid "Publish a file or directory on GNUnet"
 msgstr ""
 
-#: src/fs/gnunet-search.c:125
+#: src/fs/gnunet-search.c:127
 #, c-format
 msgid "Failed to write directory with search results to `%s'\n"
 msgstr ""
 
-#: src/fs/gnunet-search.c:202
+#: src/fs/gnunet-search.c:207
 #, fuzzy, c-format
 msgid "Error searching: %s.\n"
 msgstr "Gặp lỗi khi tải xuống: %s\n"
 
-#: src/fs/gnunet-search.c:258
+#: src/fs/gnunet-search.c:263
 #, 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:282
+#: src/fs/gnunet-search.c:287
 #, fuzzy
 msgid "Could not start searching.\n"
 msgstr "Không thể tạo miền tên.\n"
 
-#: src/fs/gnunet-search.c:323
+#: src/fs/gnunet-search.c:324
 msgid "write search results to file starting with PREFIX"
 msgstr ""
 
@@ -3694,7 +3684,7 @@ msgstr ""
 msgid "automatically terminate search after DELAY"
 msgstr ""
 
-#: src/fs/gnunet-search.c:338
+#: src/fs/gnunet-search.c:335
 msgid "automatically terminate search after VALUE results are found"
 msgstr ""
 
@@ -3703,1960 +3693,2003 @@ msgstr ""
 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"
 
-#: src/fs/gnunet-service-fs.c:375 src/fs/gnunet-service-fs.c:880
+#: src/fs/gnunet-service-fs.c:377 src/fs/gnunet-service-fs.c:882
 #, fuzzy
 msgid "# client searches active"
 msgstr "# các yêu cầu khách lỗ hổng được nhận"
 
-#: src/fs/gnunet-service-fs.c:434
+#: src/fs/gnunet-service-fs.c:436
 #, fuzzy
 msgid "# replies received for local clients"
 msgstr "# các đáp ứng lỗ hổng được gửi cho trình/máy khách"
 
-#: src/fs/gnunet-service-fs.c:603
+#: src/fs/gnunet-service-fs.c:605
 msgid "# running average P2P latency (ms)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:655 src/fs/gnunet-service-fs_cp.c:562
+#: src/fs/gnunet-service-fs.c:657 src/fs/gnunet-service-fs_cp.c:564
 #, fuzzy
 msgid "# Loopback routes suppressed"
 msgstr "# tổng số định tuyến lỗ hổng thành công"
 
-#: src/fs/gnunet-service-fs.c:834
+#: src/fs/gnunet-service-fs.c:836
 #, fuzzy
 msgid "# client searches received"
 msgstr "# các yêu cầu khách lỗ hổng được nhận"
 
-#: src/fs/gnunet-service-fs.c:873
+#: src/fs/gnunet-service-fs.c:875
 msgid "# client searches updated (merged content seen list)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:1044
+#: src/fs/gnunet-service-fs.c:1040
 #, c-format
 msgid "Hash mismatch trying to index file `%s' which does not have hash `%s'\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:1284
+#: src/fs/gnunet-service-fs.c:1280
 #, fuzzy
 msgid "FS service is lacking HOSTKEY configuration setting.  Exiting.\n"
 msgstr "Lưu cấu hình ngay bây giờ không?"
 
-#: src/fs/gnunet-service-fs.c:1309 src/hostlist/gnunet-daemon-hostlist.c:353
-#: src/topology/gnunet-daemon-topology.c:1200
+#: src/fs/gnunet-service-fs.c:1305 src/hostlist/gnunet-daemon-hostlist.c:355
+#: src/topology/gnunet-daemon-topology.c:1202
 #, fuzzy, c-format
 msgid "Failed to connect to `%s' service.\n"
 msgstr "Lỗi sơ khởi dịch vụ « %s ».\n"
 
-#: src/fs/gnunet-service-fs_cadet_client.c:368
+#: src/fs/gnunet-service-fs_cadet_client.c:370
 #, fuzzy
 msgid "# replies received via cadet"
 msgstr "# các byte kiểu %d được nhận"
 
-#: src/fs/gnunet-service-fs_cadet_client.c:382
+#: src/fs/gnunet-service-fs_cadet_client.c:384
 #, fuzzy
 msgid "# replies received via cadet dropped"
 msgstr "# các byte kiểu %d được nhận"
 
-#: src/fs/gnunet-service-fs_cadet_server.c:263
+#: src/fs/gnunet-service-fs_cadet_server.c:265
 #, fuzzy
 msgid "# queries received via CADET not answered"
 msgstr "# các byte đã nhận qua TCP"
 
-#: src/fs/gnunet-service-fs_cadet_server.c:318
+#: src/fs/gnunet-service-fs_cadet_server.c:320
 #, fuzzy
 msgid "# Blocks transferred via cadet"
 msgstr "# các byte được gửi"
 
-#: src/fs/gnunet-service-fs_cadet_server.c:344
+#: src/fs/gnunet-service-fs_cadet_server.c:346
 #, fuzzy
 msgid "# queries received via cadet"
 msgstr "# các byte đã nhận qua TCP"
 
-#: src/fs/gnunet-service-fs_cadet_server.c:386
+#: src/fs/gnunet-service-fs_cadet_server.c:388
 #, fuzzy
 msgid "# cadet client connections rejected"
 msgstr "# các kết nối dht"
 
-#: src/fs/gnunet-service-fs_cadet_server.c:393
-#: src/fs/gnunet-service-fs_cadet_server.c:433
+#: src/fs/gnunet-service-fs_cadet_server.c:395
+#: src/fs/gnunet-service-fs_cadet_server.c:435
 #, fuzzy
 msgid "# cadet connections active"
 msgstr "# các kết nối dht"
 
-#: src/fs/gnunet-service-fs_cp.c:684
+#: src/fs/gnunet-service-fs_cp.c:685
 #, fuzzy
 msgid "# migration stop messages received"
 msgstr "# các thông báo phát hiện dht được nhận"
 
-#: src/fs/gnunet-service-fs_cp.c:688
+#: src/fs/gnunet-service-fs_cp.c:689
 #, c-format
 msgid "Migration of content to peer `%s' blocked for %s\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:721 src/fs/gnunet-service-fs_cp.c:1343
+#: src/fs/gnunet-service-fs_cp.c:722 src/fs/gnunet-service-fs_cp.c:1344
 msgid "# P2P searches active"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:816
+#: src/fs/gnunet-service-fs_cp.c:817
 msgid "# artificial delays introduced (ms)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:873
+#: src/fs/gnunet-service-fs_cp.c:874
 #, fuzzy
 msgid "# replies dropped due to type mismatch"
 msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải"
 
-#: src/fs/gnunet-service-fs_cp.c:881
+#: src/fs/gnunet-service-fs_cp.c:882
 #, fuzzy
 msgid "# replies received for other peers"
 msgstr "# các byte kiểu %d được nhận"
 
-#: src/fs/gnunet-service-fs_cp.c:895
+#: src/fs/gnunet-service-fs_cp.c:896
 msgid "# replies dropped due to insufficient cover traffic"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:942
+#: src/fs/gnunet-service-fs_cp.c:943
 msgid "# P2P searches destroyed due to ultimate reply"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1013
+#: src/fs/gnunet-service-fs_cp.c:1014
 #, fuzzy
 msgid "# requests done for free (low load)"
 msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải"
 
-#: src/fs/gnunet-service-fs_cp.c:1038
+#: src/fs/gnunet-service-fs_cp.c:1039
 msgid "# request dropped, priority insufficient"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1048
+#: src/fs/gnunet-service-fs_cp.c:1049
 #, fuzzy
 msgid "# requests done for a price (normal load)"
 msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải"
 
-#: src/fs/gnunet-service-fs_cp.c:1146
+#: src/fs/gnunet-service-fs_cp.c:1147
 #, fuzzy
 msgid "# requests dropped due to higher-TTL request"
 msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải"
 
-#: src/fs/gnunet-service-fs_cp.c:1203
+#: src/fs/gnunet-service-fs_cp.c:1204
 msgid "# GET requests received (from other peers)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1226
+#: src/fs/gnunet-service-fs_cp.c:1227
 #, fuzzy
 msgid "# requests dropped due to missing reverse route"
 msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải"
 
-#: src/fs/gnunet-service-fs_cp.c:1239
+#: src/fs/gnunet-service-fs_cp.c:1240
 #, fuzzy
 msgid "# requests dropped due to full reply queue"
 msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải"
 
-#: src/fs/gnunet-service-fs_cp.c:1295
+#: src/fs/gnunet-service-fs_cp.c:1296
 #, fuzzy
 msgid "# requests dropped due TTL underflow"
 msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải"
 
-#: src/fs/gnunet-service-fs_cp.c:1339
+#: src/fs/gnunet-service-fs_cp.c:1340
 #, fuzzy
 msgid "# P2P query messages received and processed"
 msgstr "# các thông báo phát hiện dht được nhận"
 
-#: src/fs/gnunet-service-fs_cp.c:1706
+#: src/fs/gnunet-service-fs_cp.c:1707
 #, fuzzy
 msgid "# migration stop messages sent"
 msgstr "# các thông báo phát hiện dht được nhận"
 
-#: src/fs/gnunet-service-fs_indexing.c:132
-#: src/fs/gnunet-service-fs_indexing.c:193
+#: src/fs/gnunet-service-fs_indexing.c:134
+#: src/fs/gnunet-service-fs_indexing.c:195
 #, fuzzy, c-format
 msgid "Could not open `%s'.\n"
 msgstr "Lỗi mở tập tin theo dõi « %s »: %s\n"
 
-#: src/fs/gnunet-service-fs_indexing.c:149
+#: src/fs/gnunet-service-fs_indexing.c:151
 #, fuzzy, c-format
 msgid "Error writing `%s'.\n"
 msgstr "Gặp lỗi khi tạo người dùng"
 
-#: src/fs/gnunet-service-fs_indexing.c:251
+#: src/fs/gnunet-service-fs_indexing.c:253
 #, fuzzy, c-format
 msgid "Failed to delete bogus block: %s\n"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/fs/gnunet-service-fs_indexing.c:329
+#: src/fs/gnunet-service-fs_indexing.c:331
 msgid "# index blocks removed: original file inaccessible"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_indexing.c:355
+#: src/fs/gnunet-service-fs_indexing.c:357
 #, fuzzy, c-format
 msgid "Could not access indexed file `%s' (%s) at offset %llu: %s\n"
 msgstr "Không thể giải quyết « %s » (%s): %s\n"
 
-#: src/fs/gnunet-service-fs_indexing.c:359
+#: src/fs/gnunet-service-fs_indexing.c:361
 msgid "not indexed"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_indexing.c:392
+#: src/fs/gnunet-service-fs_indexing.c:394
 #, fuzzy, c-format
 msgid "Indexed file `%s' changed at offset %llu\n"
 msgstr "Đánh chỉ mục dữ liệu của tập tin « %s » bị lỗi tại vị tri %llu.\n"
 
-#: src/fs/gnunet-service-fs_indexing.c:516
+#: src/fs/gnunet-service-fs_indexing.c:518
 #, c-format
 msgid ""
 "Index request received for file `%s' is already indexed as `%s'.  Permitting "
 "anyway.\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:263
+#: src/fs/gnunet-service-fs_pe.c:265
 #, fuzzy
 msgid "# average retransmission delay (ms)"
 msgstr "# thời gian trung bình còn kết nối (theo miligiây)"
 
-#: src/fs/gnunet-service-fs_pe.c:425
+#: src/fs/gnunet-service-fs_pe.c:427
 msgid "# delay heap timeout (ms)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:436
+#: src/fs/gnunet-service-fs_pe.c:438
 #, fuzzy
 msgid "# query plans executed"
 msgstr "# các yêu cầu dht được định tuyến"
 
-#: src/fs/gnunet-service-fs_pe.c:464
+#: src/fs/gnunet-service-fs_pe.c:466
 #, fuzzy
 msgid "# query messages sent to other peers"
 msgstr "# các byte thông báo gửi đi bị loại bỏ"
 
-#: src/fs/gnunet-service-fs_pe.c:534
+#: src/fs/gnunet-service-fs_pe.c:536
 #, fuzzy
 msgid "# requests merged"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/fs/gnunet-service-fs_pe.c:544
+#: src/fs/gnunet-service-fs_pe.c:546
 #, fuzzy
 msgid "# requests refreshed"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/fs/gnunet-service-fs_pe.c:604 src/fs/gnunet-service-fs_pe.c:707
-#: src/fs/gnunet-service-fs_pe.c:786
+#: src/fs/gnunet-service-fs_pe.c:606 src/fs/gnunet-service-fs_pe.c:709
+#: src/fs/gnunet-service-fs_pe.c:788
 msgid "# query plan entries"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:328
+#: src/fs/gnunet-service-fs_pr.c:330
 #, fuzzy
 msgid "# Pending requests created"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/fs/gnunet-service-fs_pr.c:428 src/fs/gnunet-service-fs_pr.c:675
+#: src/fs/gnunet-service-fs_pr.c:430 src/fs/gnunet-service-fs_pr.c:677
 #, fuzzy
 msgid "# Pending requests active"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/fs/gnunet-service-fs_pr.c:856
+#: src/fs/gnunet-service-fs_pr.c:858
 #, fuzzy
 msgid "# replies received and matched"
 msgstr "# các byte kiểu %d được nhận"
 
-#: src/fs/gnunet-service-fs_pr.c:892
+#: src/fs/gnunet-service-fs_pr.c:894
 msgid "# duplicate replies discarded (bloomfilter)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:901
+#: src/fs/gnunet-service-fs_pr.c:903
 msgid "# irrelevant replies discarded"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:916
+#: src/fs/gnunet-service-fs_pr.c:918
 #, c-format
 msgid "Unsupported block type %u\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:933
+#: src/fs/gnunet-service-fs_pr.c:935
 #, fuzzy
 msgid "# results found locally"
 msgstr "# nội dung lỗ hổng được tìm cục bộ"
 
-#: src/fs/gnunet-service-fs_pr.c:1063
+#: src/fs/gnunet-service-fs_pr.c:1065
 msgid "# Datastore `PUT' failures"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1091
+#: src/fs/gnunet-service-fs_pr.c:1093
 #, fuzzy
 msgid "# storage requests dropped due to high load"
 msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải"
 
-#: src/fs/gnunet-service-fs_pr.c:1129
+#: src/fs/gnunet-service-fs_pr.c:1131
 #, fuzzy
 msgid "# Replies received from DHT"
 msgstr "# các byte đã nhận qua HTTP"
 
-#: src/fs/gnunet-service-fs_pr.c:1260
+#: src/fs/gnunet-service-fs_pr.c:1262
 #, fuzzy
 msgid "# Replies received from CADET"
 msgstr "# các byte đã nhận qua HTTP"
 
-#: src/fs/gnunet-service-fs_pr.c:1312
+#: src/fs/gnunet-service-fs_pr.c:1314
 #, c-format
 msgid "Datastore lookup already took %s!\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1333
+#: src/fs/gnunet-service-fs_pr.c:1335
 #, c-format
 msgid "On-demand lookup already took %s!\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1393
+#: src/fs/gnunet-service-fs_pr.c:1395
 msgid "# requested DBLOCK or IBLOCK not found"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1452
+#: src/fs/gnunet-service-fs_pr.c:1454
 msgid "# Datastore lookups concluded (error queueing)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1507
+#: src/fs/gnunet-service-fs_pr.c:1509
 msgid "# Datastore lookups concluded (no results)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1522
+#: src/fs/gnunet-service-fs_pr.c:1524
 msgid "# Datastore lookups concluded (seen all)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1546
+#: src/fs/gnunet-service-fs_pr.c:1548
 msgid "# Datastore lookups aborted (more than MAX_RESULTS)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1560
+#: src/fs/gnunet-service-fs_pr.c:1562
 msgid "# on-demand blocks matched requests"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1581
+#: src/fs/gnunet-service-fs_pr.c:1583
 msgid "# on-demand lookups performed successfully"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1586
+#: src/fs/gnunet-service-fs_pr.c:1588
 msgid "# on-demand lookups failed"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1624
+#: src/fs/gnunet-service-fs_pr.c:1626
 msgid "# Datastore lookups concluded (found last result)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1637
+#: src/fs/gnunet-service-fs_pr.c:1639
 msgid "# Datastore lookups concluded (load too high)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1691
+#: src/fs/gnunet-service-fs_pr.c:1693
 msgid "# Datastore lookups initiated"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1747
+#: src/fs/gnunet-service-fs_pr.c:1749
 #, fuzzy
 msgid "# GAP PUT messages received"
 msgstr "# các thông báo PONG đã mật mã được nhận"
 
-#: src/fs/gnunet-service-fs_push.c:644
+#: src/fs/gnunet-service-fs_push.c:646
 msgid "time required, content pushing disabled"
 msgstr ""
 
-#: src/fs/gnunet-unindex.c:87
+#: src/fs/gnunet-unindex.c:89
 #, fuzzy, c-format
 msgid "Unindexing at %llu/%llu (%s remaining)\n"
 msgstr "Lỗi bỏ chỉ mục (không đưa ra lý do)."
 
-#: src/fs/gnunet-unindex.c:93
+#: src/fs/gnunet-unindex.c:95
 #, fuzzy, c-format
 msgid "Error unindexing: %s.\n"
 msgstr ""
 "\n"
 "Gặp lỗi khi bỏ chỉ mục tập tin: %s\n"
 
-#: src/fs/gnunet-unindex.c:98
+#: src/fs/gnunet-unindex.c:100
 #, fuzzy
 msgid "Unindexing done.\n"
 msgstr "Bỏ chỉ mục tập tin."
 
-#: src/fs/gnunet-unindex.c:127
+#: 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:144
+#: 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:176
+#: src/fs/gnunet-unindex.c:178
 msgid "Unindex a file that was previously indexed with gnunet-publish."
 msgstr ""
 
-#: src/gns/gns_tld_api.c:274
+#: src/gns/gns_tld_api.c:348
 msgid "Expected a base32-encoded public zone key\n"
 msgstr ""
 
-#: src/gns/gnunet-bcd.c:125
+#: src/gns/gnunet-bcd.c:127
 #, fuzzy, c-format
 msgid "Refusing `%s' request to HTTP server\n"
 msgstr "trình phục vụ danh sách máy HTTP hợp nhất"
 
-#: src/gns/gnunet-bcd.c:355
+#: src/gns/gnunet-bcd.c:357
 #, c-format
 msgid "Invalid port number %u.  Exiting.\n"
 msgstr ""
 
-#: src/gns/gnunet-bcd.c:360
+#: src/gns/gnunet-bcd.c:362
 #, fuzzy, c-format
 msgid "Businesscard HTTP server starts on %u\n"
 msgstr "Cổng cho trình phục vụ HTTP danh sách máy chủ thống nhất"
 
-#: src/gns/gnunet-bcd.c:374
+#: src/gns/gnunet-bcd.c:376
 #, fuzzy, c-format
 msgid "Could not start businesscard HTTP server on port %u\n"
 msgstr "Cổng cho trình phục vụ HTTP danh sách máy chủ thống nhất"
 
-#: src/gns/gnunet-bcd.c:521
+#: src/gns/gnunet-bcd.c:523
 msgid "Run HTTP serve on port PORT (default is 8888)"
 msgstr ""
 
-#: src/gns/gnunet-bcd.c:534
+#: src/gns/gnunet-bcd.c:536
 msgid "GNUnet HTTP server to create business cards"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:201
+#: src/gns/gnunet-dns2gns.c:203
 #, fuzzy
 msgid "Failed to pack DNS response into UDP packet!\n"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/gns/gnunet-dns2gns.c:403
+#: src/gns/gnunet-dns2gns.c:405
 #, c-format
 msgid "Cannot parse DNS request from %s\n"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:419
+#: src/gns/gnunet-dns2gns.c:421
 #, fuzzy, c-format
 msgid "Received malformed DNS request from %s\n"
 msgstr "Nhận yêu cầu định tuyến\n"
 
-#: src/gns/gnunet-dns2gns.c:427
+#: src/gns/gnunet-dns2gns.c:429
 #, fuzzy, c-format
 msgid "Received unsupported DNS request from %s\n"
 msgstr "Nhận yêu cầu định tuyến\n"
 
-#: src/gns/gnunet-dns2gns.c:586
+#: src/gns/gnunet-dns2gns.c:588
 #, fuzzy
 msgid "No DNS server specified!\n"
 msgstr "Chưa ghi rõ từ khoá.\n"
 
-#: src/gns/gnunet-dns2gns.c:686
+#: src/gns/gnunet-dns2gns.c:688
 msgid "IP of recursive DNS resolver to use (required)"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:691
+#: src/gns/gnunet-dns2gns.c:693
 msgid "UDP port to listen on for inbound DNS requests; default: 2853"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:708
+#: src/gns/gnunet-dns2gns.c:710
 msgid "GNUnet DNS-to-GNS proxy (a DNS server)"
 msgstr ""
 
-#: src/gns/gnunet-gns-benchmark.c:580
+#: src/gns/gnunet-gns-benchmark.c:582
 msgid "how long to wait between queries"
 msgstr ""
 
-#: src/gns/gnunet-gns-benchmark.c:585
+#: src/gns/gnunet-gns-benchmark.c:587
 msgid "how long to wait for an answer"
 msgstr ""
 
-#: src/gns/gnunet-gns-benchmark.c:589
+#: src/gns/gnunet-gns-benchmark.c:591
 msgid "look for GNS2DNS records instead of ANY"
 msgstr ""
 
-#: src/gns/gnunet-gns.c:197
+#: src/gns/gnunet-gns.c:199
 #, c-format
 msgid "Invalid typename specified, assuming `ANY'\n"
 msgstr ""
 
-#: src/gns/gnunet-gns.c:231
+#: src/gns/gnunet-gns.c:233
 msgid "Lookup a record for the given name"
 msgstr ""
 
-#: src/gns/gnunet-gns.c:236
+#: src/gns/gnunet-gns.c:238
 #, fuzzy
 msgid "Specify the type of the record to lookup"
 msgstr "xác định mức ưu tiên của nội dung"
 
-#: src/gns/gnunet-gns.c:240
+#: src/gns/gnunet-gns.c:242
 msgid "No unneeded output"
 msgstr ""
 
-#: src/gns/gnunet-gns.c:256
+#: src/gns/gnunet-gns.c:258
 #, fuzzy
 msgid "GNUnet GNS resolver tool"
 msgstr "Bản ghi lỗi GNUnet"
 
-#: src/gns/gnunet-gns-helper-service-w32.c:600
+#: src/gns/gnunet-gns-helper-service-w32.c:602
 msgid "Not ready to process requests, lacking ego data\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-helper-service-w32.c:699
+#: src/gns/gnunet-gns-helper-service-w32.c:701
 msgid ""
 "Ego for `gns-master' not found, cannot perform lookup.  Did you run gnunet-"
 "gns-import.sh?\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-helper-service-w32.c:737
+#: src/gns/gnunet-gns-helper-service-w32.c:739
 #, fuzzy, c-format
 msgid "Failed to connect to identity service\n"
 msgstr "Lỗi kết nối đến gnunetd.\n"
 
-#: src/gns/gnunet-gns-import.c:450
+#: src/gns/gnunet-gns-import.c:452
 msgid "This program will import some GNS authorities into your GNS namestore."
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:110
-#: src/hostlist/gnunet-daemon-hostlist_client.c:533
-#: src/hostlist/gnunet-daemon-hostlist_client.c:751
-#: src/hostlist/gnunet-daemon-hostlist_client.c:757
-#: src/hostlist/gnunet-daemon-hostlist_client.c:809
-#: src/hostlist/gnunet-daemon-hostlist_client.c:818
-#: src/hostlist/gnunet-daemon-hostlist_client.c:929
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1024
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1029
-#: src/transport/plugin_transport_http_client.c:596
-#: src/transport/plugin_transport_http_client.c:614
+#: src/gns/gnunet-gns-proxy.c:118
+#: src/hostlist/gnunet-daemon-hostlist_client.c:535
+#: src/hostlist/gnunet-daemon-hostlist_client.c:753
+#: src/hostlist/gnunet-daemon-hostlist_client.c:759
+#: src/hostlist/gnunet-daemon-hostlist_client.c:811
+#: src/hostlist/gnunet-daemon-hostlist_client.c:820
+#: src/hostlist/gnunet-daemon-hostlist_client.c:931
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1026
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1031
+#: src/transport/plugin_transport_http_client.c:598
+#: src/transport/plugin_transport_http_client.c:616
 #, c-format
 msgid "%s failed at %s:%d: `%s'\n"
 msgstr "%s bị lỗi tại %s:%d: « %s »\n"
 
-#: src/gns/gnunet-gns-proxy.c:960
+#: src/gns/gnunet-gns-proxy.c:980
 #, fuzzy, c-format
 msgid "Unsupported CURL TLS backend %d\n"
 msgstr "Lệnh không được hỗ trợ « %s ». Đang hủy bỏ.\n"
 
-#: src/gns/gnunet-gns-proxy.c:985
+#: src/gns/gnunet-gns-proxy.c:1005
 #, fuzzy, c-format
 msgid "Failed to fetch CN from cert: %s\n"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/gns/gnunet-gns-proxy.c:1008
+#: src/gns/gnunet-gns-proxy.c:1026
 #, fuzzy, c-format
 msgid "Failed to initialize DANE: %s\n"
 msgstr "Không thể sơ khởi SQLite: %s.\n"
 
-#: src/gns/gnunet-gns-proxy.c:1021
+#: src/gns/gnunet-gns-proxy.c:1041
 #, fuzzy, c-format
 msgid "Failed to parse DANE record: %s\n"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/gns/gnunet-gns-proxy.c:1036
+#: src/gns/gnunet-gns-proxy.c:1056
 #, fuzzy, c-format
 msgid "Failed to verify TLS connection using DANE: %s\n"
 msgstr "Không thể lưu tập tin cấu hình « %s »:"
 
-#: src/gns/gnunet-gns-proxy.c:1046
+#: src/gns/gnunet-gns-proxy.c:1066
 #, c-format
 msgid "Failed DANE verification failed with GnuTLS verify status code: %u\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:1070
+#: src/gns/gnunet-gns-proxy.c:1090
 #, c-format
 msgid "TLS certificate subject name (%s) does not match `%s': %d\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:1200
+#: src/gns/gnunet-gns-proxy.c:1221
 #, c-format
 msgid "Cookie domain `%s' supplied by server is invalid\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:2062
+#: src/gns/gnunet-gns-proxy.c:2121
 #, fuzzy, c-format
 msgid "Unsupported HTTP method `%s'\n"
 msgstr "Lệnh không được hỗ trợ « %s ». Đang hủy bỏ.\n"
 
-#: src/gns/gnunet-gns-proxy.c:2583
+#: src/gns/gnunet-gns-proxy.c:2642
 #, fuzzy, c-format
 msgid "Unable to import private key from file `%s'\n"
 msgstr "Không thể tạo tài khoản người dùng:"
 
-#: src/gns/gnunet-gns-proxy.c:2615
+#: src/gns/gnunet-gns-proxy.c:2674
 #, fuzzy, c-format
 msgid "Unable to import certificate from `%s'\n"
 msgstr "Không thể lưu tập tin cấu hình « %s »:"
 
-#: src/gns/gnunet-gns-proxy.c:2814
+#: src/gns/gnunet-gns-proxy.c:2875
 #, fuzzy, c-format
 msgid "Failed to start HTTPS server for `%s'\n"
 msgstr "Lỗi bắt đầu thu thập.\n"
 
-#: src/gns/gnunet-gns-proxy.c:2839 src/rest/gnunet-rest-server.c:656
+#: src/gns/gnunet-gns-proxy.c:2897 src/rest/gnunet-rest-server.c:658
 #, fuzzy
 msgid "Failed to pass client to MHD\n"
 msgstr "Lỗi kết nối đến gnunetd.\n"
 
-#: src/gns/gnunet-gns-proxy.c:3169
+#: src/gns/gnunet-gns-proxy.c:3233
 #, fuzzy, c-format
 msgid "Unsupported socks version %d\n"
 msgstr "Lệnh không được hỗ trợ « %s ». Đang hủy bỏ.\n"
 
-#: src/gns/gnunet-gns-proxy.c:3198
+#: src/gns/gnunet-gns-proxy.c:3262
 #, fuzzy, c-format
 msgid "Unsupported socks command %d\n"
 msgstr "Lệnh không được hỗ trợ « %s ». Đang hủy bỏ.\n"
 
-#: src/gns/gnunet-gns-proxy.c:3280
+#: src/gns/gnunet-gns-proxy.c:3345
 #, fuzzy, c-format
 msgid "Unsupported socks address type %d\n"
 msgstr "Lệnh không được hỗ trợ « %s ». Đang hủy bỏ.\n"
 
-#: src/gns/gnunet-gns-proxy.c:3570
+#: src/gns/gnunet-gns-proxy.c:3635
 #, fuzzy, c-format
 msgid "Failed to load X.509 key and certificate from `%s'\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/gns/gnunet-gns-proxy.c:3698
+#: src/gns/gnunet-gns-proxy.c:3763
 msgid "listen on specified port (default: 7777)"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3703
+#: src/gns/gnunet-gns-proxy.c:3768
 msgid "pem file to use as CA"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3707
+#: src/gns/gnunet-gns-proxy.c:3772
 msgid "disable use of IPv6"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3733
+#: src/gns/gnunet-gns-proxy.c:3798
 msgid "GNUnet GNS proxy"
 msgstr ""
 
-#: src/gns/gnunet-service-gns.c:511
+#: src/gns/gnunet-service-gns.c:506
 #, fuzzy
 msgid "Properly base32-encoded public key required"
 msgstr "Đối số không hợp lệ cho « %s ».\n"
 
-#: src/gns/gnunet-service-gns.c:547
+#: src/gns/gnunet-service-gns.c:542
 #, fuzzy
 msgid "Failed to connect to the namecache!\n"
 msgstr "Không kết nối được đến trình nền gnunetd."
 
-#: src/gns/gnunet-service-gns.c:566
-#: src/zonemaster/gnunet-service-zonemaster.c:873
-#: src/zonemaster/gnunet-service-zonemaster-monitor.c:438
+#: src/gns/gnunet-service-gns.c:561
+#: src/zonemaster/gnunet-service-zonemaster.c:875
+#: src/zonemaster/gnunet-service-zonemaster-monitor.c:440
 #, fuzzy
 msgid "Could not connect to DHT!\n"
 msgstr "Không thể kết nối tới %s:%u: %s\n"
 
-#: src/gns/gnunet-service-gns_interceptor.c:257
+#: src/gns/gnunet-service-gns_interceptor.c:259
 #, fuzzy
 msgid "Error converting GNS response to DNS response!\n"
 msgstr "Gặp lỗi khi chuyển đổi các đối số sang URI.\n"
 
-#: src/gns/gnunet-service-gns_interceptor.c:364
+#: src/gns/gnunet-service-gns_interceptor.c:366
 #, fuzzy
 msgid "Failed to connect to the DNS service!\n"
 msgstr "Lỗi kết nối đến gnunetd.\n"
 
-#: src/gns/gnunet-service-gns_resolver.c:717
+#: src/gns/gnunet-service-gns_resolver.c:700
 #, c-format
 msgid "Protocol `%s' unknown, skipping labels.\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:728
+#: src/gns/gnunet-service-gns_resolver.c:711
 #, c-format
 msgid "Service `%s' unknown for protocol `%s', skipping labels.\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:931
+#: src/gns/gnunet-service-gns_resolver.c:914
 #, fuzzy
 msgid "Failed to parse DNS response\n"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/gns/gnunet-service-gns_resolver.c:1112
+#: src/gns/gnunet-service-gns_resolver.c:1095
 #, c-format
 msgid "Skipping record of unsupported type %d\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:1382
+#: src/gns/gnunet-service-gns_resolver.c:1365
 #, c-format
 msgid "VPN returned empty result for `%s'\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:1823
+#: src/gns/gnunet-service-gns_resolver.c:1806
 #, c-format
 msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:1866
+#: src/gns/gnunet-service-gns_resolver.c:1849
 #, fuzzy, c-format
 msgid "GNS lookup failed (zero records found for `%s')\n"
 msgstr "Vẫn còn không tìm thấy đồng đẳng trong « %s ».\n"
 
-#: src/gns/gnunet-service-gns_resolver.c:2281
+#: src/gns/gnunet-service-gns_resolver.c:2264
 msgid "GNS lookup recursion failed (no delegation record found)\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:2304
+#: src/gns/gnunet-service-gns_resolver.c:2287
 #, fuzzy, c-format
 msgid "Failed to cache GNS resolution: %s\n"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/gns/gnunet-service-gns_resolver.c:2467
+#: src/gns/gnunet-service-gns_resolver.c:2450
 #, c-format
 msgid "GNS namecache returned empty result for `%s'\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:2602
+#: src/gns/gnunet-service-gns_resolver.c:2585
 #, c-format
 msgid "Zone %s was revoked, resolution fails\n"
 msgstr ""
 
-#: src/gns/plugin_gnsrecord_gns.c:179
+#: src/gns/plugin_gnsrecord_gns.c:181
 #, fuzzy, c-format
 msgid "Unable to parse PKEY record `%s'\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/gns/plugin_gnsrecord_gns.c:210
+#: src/gns/plugin_gnsrecord_gns.c:212
 #, fuzzy, c-format
 msgid "Unable to parse GNS2DNS record `%s'\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/gns/plugin_gnsrecord_gns.c:231
+#: src/gns/plugin_gnsrecord_gns.c:233
 #, fuzzy, c-format
 msgid "Failed to serialize GNS2DNS record with value `%s'\n"
 msgstr "Không thể truy cập đến tập tin gnunet-directory « %s »\n"
 
-#: src/gns/plugin_gnsrecord_gns.c:256
+#: src/gns/plugin_gnsrecord_gns.c:258
 #, fuzzy, c-format
 msgid "Unable to parse VPN record string `%s'\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/gns/plugin_gnsrecord_gns.c:292
+#: src/gns/plugin_gnsrecord_gns.c:294
 #, fuzzy, c-format
 msgid "Unable to parse BOX record string `%s'\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:357
+#: 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:378
+#: 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:400
+#: 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:485
+#: src/gnsrecord/plugin_gnsrecord_dns.c:487
 #, 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:521
+#: src/gnsrecord/plugin_gnsrecord_dns.c:523
 #, 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:540
+#: src/gnsrecord/plugin_gnsrecord_dns.c:542
 #, 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:563
+#: src/gnsrecord/plugin_gnsrecord_dns.c:565
 #, 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:586
+#: src/gnsrecord/plugin_gnsrecord_dns.c:588
 #, 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:601
+#: src/gnsrecord/plugin_gnsrecord_dns.c:603
 #, 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:628
+#: src/gnsrecord/plugin_gnsrecord_dns.c:630
 #, 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:644
+#: src/gnsrecord/plugin_gnsrecord_dns.c:646
 #, 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:661
+#: src/gnsrecord/plugin_gnsrecord_dns.c:663
 #, 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:685
-#: src/gnsrecord/plugin_gnsrecord_dns.c:701
+#: src/gnsrecord/plugin_gnsrecord_dns.c:687
+#: src/gnsrecord/plugin_gnsrecord_dns.c:703
 #, 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"
 
-#: src/hello/gnunet-hello.c:124
+#: src/hello/gnunet-hello.c:126
 msgid "Call with name of HELLO file to modify.\n"
 msgstr ""
 
-#: src/hello/gnunet-hello.c:130
+#: src/hello/gnunet-hello.c:132
 #, fuzzy, c-format
 msgid "Error accessing file `%s': %s\n"
 msgstr "Gặp lỗi khi tạo người dùng"
 
-#: src/hello/gnunet-hello.c:138
+#: src/hello/gnunet-hello.c:140
 #, c-format
 msgid "File `%s' is too big to be a HELLO\n"
 msgstr ""
 
-#: src/hello/gnunet-hello.c:145
+#: src/hello/gnunet-hello.c:147
 #, c-format
 msgid "File `%s' is too small to be a HELLO\n"
 msgstr ""
 
-#: src/hello/gnunet-hello.c:155 src/hello/gnunet-hello.c:196
+#: src/hello/gnunet-hello.c:157 src/hello/gnunet-hello.c:198
 #, fuzzy, c-format
 msgid "Error opening file `%s': %s\n"
 msgstr "Gặp lỗi khi tạo người dùng"
 
-#: src/hello/gnunet-hello.c:172
+#: src/hello/gnunet-hello.c:174
 #, fuzzy, c-format
 msgid "Did not find well-formed HELLO in file `%s'\n"
 msgstr "Không tìm thấy tập tin nào trong thư mục « %s »\n"
 
-#: src/hello/gnunet-hello.c:208
+#: src/hello/gnunet-hello.c:210
 #, fuzzy, c-format
 msgid "Error writing HELLO to file `%s': %s\n"
 msgstr "Gặp lỗi khi tạo người dùng"
 
-#: src/hello/gnunet-hello.c:217
+#: src/hello/gnunet-hello.c:219
 #, c-format
 msgid "Modified %u addresses, wrote %u bytes\n"
 msgstr ""
 
-#: src/hello/hello.c:1108
+#: src/hello/hello.c:1110
 #, fuzzy
 msgid "Failed to parse HELLO message: missing expiration time\n"
 msgstr "Lỗi lưu cấu hình."
 
-#: src/hello/hello.c:1117
+#: src/hello/hello.c:1119
 #, fuzzy
 msgid "Failed to parse HELLO message: invalid expiration time\n"
 msgstr "Lỗi lưu cấu hình."
 
-#: src/hello/hello.c:1127
+#: src/hello/hello.c:1129
 #, fuzzy
 msgid "Failed to parse HELLO message: malformed\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/hello/hello.c:1138
+#: src/hello/hello.c:1140
 #, fuzzy
 msgid "Failed to parse HELLO message: missing transport plugin\n"
 msgstr "Không thể nạp phần bổ sung truyền tải « %s »\n"
 
-#: src/hello/hello.c:1156
+#: src/hello/hello.c:1158
 #, c-format
 msgid "Plugin `%s' not found, skipping address\n"
 msgstr ""
 
-#: src/hello/hello.c:1164
+#: src/hello/hello.c:1166
 #, c-format
 msgid "Plugin `%s' does not support URIs yet\n"
 msgstr ""
 
-#: src/hello/hello.c:1179
+#: src/hello/hello.c:1181
 #, fuzzy, c-format
 msgid "Failed to parse `%s' as an address for plugin `%s'\n"
 msgstr "Lỗi đóng kết đến cổng %s %d.\n"
 
-#: src/hostlist/gnunet-daemon-hostlist.c:314
+#: src/hostlist/gnunet-daemon-hostlist.c:316
 msgid ""
 "None of the functions for the hostlist daemon were enabled.  I have no "
 "reason to run!\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist.c:374
+#: src/hostlist/gnunet-daemon-hostlist.c:376
 #, fuzzy
 msgid "advertise our hostlist to other peers"
 msgstr "Tắt quảng cáo máy này cho đồng đẳng khác"
 
-#: src/hostlist/gnunet-daemon-hostlist.c:379
+#: src/hostlist/gnunet-daemon-hostlist.c:381
 msgid ""
 "bootstrap using hostlists (it is highly recommended that you always use this "
 "option)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist.c:383
+#: src/hostlist/gnunet-daemon-hostlist.c:385
 #, fuzzy
 msgid "enable learning about hostlist servers from other peers"
 msgstr "Tắt quảng cáo máy này cho đồng đẳng khác"
 
-#: src/hostlist/gnunet-daemon-hostlist.c:388
+#: src/hostlist/gnunet-daemon-hostlist.c:390
 #, fuzzy
 msgid "provide a hostlist server"
 msgstr "trình phục vụ danh sách máy HTTP hợp nhất"
 
-#: src/hostlist/gnunet-daemon-hostlist.c:404
+#: src/hostlist/gnunet-daemon-hostlist.c:406
 msgid "GNUnet hostlist server and client"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:347
+#: src/hostlist/gnunet-daemon-hostlist_client.c:349
 #, fuzzy
 msgid "# bytes downloaded from hostlist servers"
 msgstr "trình phục vụ danh sách máy HTTP hợp nhất"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:368
-#: src/hostlist/gnunet-daemon-hostlist_client.c:401
+#: src/hostlist/gnunet-daemon-hostlist_client.c:370
+#: src/hostlist/gnunet-daemon-hostlist_client.c:403
 #, fuzzy
 msgid "# invalid HELLOs downloaded from hostlist servers"
 msgstr "# các HELLO tải xuống qua HTTP"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:371
-#: src/hostlist/gnunet-daemon-hostlist_client.c:404
+#: src/hostlist/gnunet-daemon-hostlist_client.c:373
+#: src/hostlist/gnunet-daemon-hostlist_client.c:406
 #, fuzzy, c-format
 msgid "Invalid `%s' message received from hostlist at `%s'\n"
 msgstr "Nhận được thông báo « %s » sai từ đồng đẳng « %s ».\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:389
+#: src/hostlist/gnunet-daemon-hostlist_client.c:391
 #, fuzzy
 msgid "# valid HELLOs downloaded from hostlist servers"
 msgstr "# các HELLO tải xuống qua HTTP"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:659
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1405
+#: src/hostlist/gnunet-daemon-hostlist_client.c:661
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1407
 msgid "# advertised hostlist URIs"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:689
+#: src/hostlist/gnunet-daemon-hostlist_client.c:691
 #, c-format
 msgid "# advertised URI `%s' downloaded"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:732
+#: src/hostlist/gnunet-daemon-hostlist_client.c:734
 #, c-format
 msgid ""
 "Advertised hostlist with URI `%s' could not be downloaded. Advertised URI "
 "gets dismissed.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:860
+#: src/hostlist/gnunet-daemon-hostlist_client.c:862
 #, fuzzy, c-format
 msgid "Timeout trying to download hostlist from `%s'\n"
 msgstr "Đang thử tải danh sách các máy xuống « %s »\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:874
+#: src/hostlist/gnunet-daemon-hostlist_client.c:876
 #, c-format
 msgid "Download limit of %u bytes exceeded, stopping download\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:894
+#: src/hostlist/gnunet-daemon-hostlist_client.c:896
 #, fuzzy, c-format
 msgid "Download of hostlist from `%s' failed: `%s'\n"
 msgstr "Tải lên « %s » hoàn thành, địa chỉ URI là « %s ».\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:900
+#: src/hostlist/gnunet-daemon-hostlist_client.c:902
 #, fuzzy, c-format
 msgid "Download of hostlist `%s' completed.\n"
 msgstr "Tải lên « %s » hoàn thành, địa chỉ URI là « %s ».\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:908
+#: src/hostlist/gnunet-daemon-hostlist_client.c:910
 #, c-format
 msgid "Adding successfully tested hostlist `%s' datastore.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:961
+#: src/hostlist/gnunet-daemon-hostlist_client.c:963
 #, fuzzy, c-format
 msgid "Bootstrapping using hostlist at `%s'.\n"
 msgstr "Đang nạp và khởi động dùng « %s ».\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:969
+#: src/hostlist/gnunet-daemon-hostlist_client.c:971
 msgid "# hostlist downloads initiated"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1096
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1663
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1098
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1665
 msgid "# milliseconds between hostlist downloads"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1105
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1107
 #, c-format
 msgid "Have %u/%u connections.  Will consider downloading hostlist in %s\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1164
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1185
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1166
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1187
 #, fuzzy
 msgid "# active connections"
 msgstr "# các kết nối dht"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1351
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1353
 #, fuzzy, c-format
 msgid "Loading saved hostlist entries from file `%s' \n"
 msgstr "Đang thử tải danh sách các máy xuống « %s »\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1356
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1358
 #, fuzzy, c-format
 msgid "Hostlist file `%s' does not exist\n"
 msgstr "Khoá phiên chạy từ đồng đẳng « %s » không thể được thẩm tra.\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1365
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1367
 #, fuzzy, c-format
 msgid "Could not open file `%s' for reading to load hostlists: %s\n"
 msgstr "Lỗi mở tập tin theo dõi « %s »: %s\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1399
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1401
 #, c-format
 msgid "%u hostlist URIs loaded from file\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1402
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1404
 #, fuzzy
 msgid "# hostlist URIs read from file"
 msgstr "# các byte danh sách máy được trả về"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1448
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1450
 #, fuzzy, c-format
 msgid "Could not open file `%s' for writing to save hostlists: %s\n"
 msgstr "Lỗi mở tập tin theo dõi « %s »: %s\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1455
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1457
 #, fuzzy, c-format
 msgid "Writing %u hostlist URIs to `%s'\n"
 msgstr "Đang thử tải danh sách các máy xuống « %s »\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1479
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1496
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1481
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1498
 #, c-format
 msgid "Error writing hostlist URIs to file `%s'\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1491
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1493
 #, fuzzy
 msgid "# hostlist URIs written to file"
 msgstr "# các byte danh sách máy được trả về"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1593
-#: src/transport/plugin_transport_http_client.c:2272
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1595
+#: src/transport/plugin_transport_http_client.c:2274
 #, c-format
 msgid "Invalid proxy type: `%s', disabling proxy! Check configuration!\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1622
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1624
 msgid "Learning is enabled on this peer\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1636
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1638
 msgid "Learning is not enabled on this peer\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1649
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1651
 #, c-format
 msgid ""
 "Since learning is not enabled on this peer, hostlist file `%s' was removed\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:174
+#: src/hostlist/gnunet-daemon-hostlist_server.c:176
 #, fuzzy
 msgid "bytes in hostlist"
 msgstr "# các byte trong kho dữ liệu"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:199
+#: src/hostlist/gnunet-daemon-hostlist_server.c:201
 msgid "expired addresses encountered"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:235
-#: src/hostlist/gnunet-daemon-hostlist_server.c:529
-#: src/peerinfo-tool/gnunet-peerinfo.c:383
-#: src/peerinfo-tool/gnunet-peerinfo.c:532
-#: src/topology/gnunet-daemon-topology.c:860
+#: src/hostlist/gnunet-daemon-hostlist_server.c:237
+#: src/hostlist/gnunet-daemon-hostlist_server.c:531
+#: src/peerinfo-tool/gnunet-peerinfo.c:385
+#: src/peerinfo-tool/gnunet-peerinfo.c:534
+#: src/topology/gnunet-daemon-topology.c:862
 #, fuzzy, c-format
 msgid "Error in communication with PEERINFO service: %s\n"
 msgstr "Cổng để liên lạc với giao diện người dùng GNUnet"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:259
+#: src/hostlist/gnunet-daemon-hostlist_server.c:261
 msgid "HELLOs without addresses encountered (ignored)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:276
+#: src/hostlist/gnunet-daemon-hostlist_server.c:278
 msgid "bytes not included in hostlist (size limit)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:380
+#: src/hostlist/gnunet-daemon-hostlist_server.c:382
 #, fuzzy, c-format
 msgid "Refusing `%s' request to hostlist server\n"
 msgstr "trình phục vụ danh sách máy HTTP hợp nhất"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:383
+#: src/hostlist/gnunet-daemon-hostlist_server.c:385
 #, fuzzy
 msgid "hostlist requests refused (not HTTP GET)"
 msgstr "# các yêu cầu danh sách máy được nhận"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:395
+#: src/hostlist/gnunet-daemon-hostlist_server.c:397
 #, c-format
 msgid "Refusing `%s' request with %llu bytes of upload data\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:399
+#: src/hostlist/gnunet-daemon-hostlist_server.c:401
 #, fuzzy
 msgid "hostlist requests refused (upload data)"
 msgstr "# các yêu cầu danh sách máy được nhận"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:406
+#: src/hostlist/gnunet-daemon-hostlist_server.c:408
 msgid "Could not handle hostlist request since I do not have a response yet\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:409
+#: src/hostlist/gnunet-daemon-hostlist_server.c:411
 #, fuzzy
 msgid "hostlist requests refused (not ready)"
 msgstr "# các yêu cầu danh sách máy được nhận"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:414
+#: src/hostlist/gnunet-daemon-hostlist_server.c:416
 #, fuzzy
 msgid "Received request for our hostlist\n"
 msgstr "Nhận yêu cầu định tuyến\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:416
+#: src/hostlist/gnunet-daemon-hostlist_server.c:418
 #, fuzzy
 msgid "hostlist requests processed"
 msgstr "# các yêu cầu danh sách máy được nhận"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:464
+#: src/hostlist/gnunet-daemon-hostlist_server.c:466
 #, fuzzy
 msgid "# hostlist advertisements send"
 msgstr "# Các quảng cáo ngoại được chuyển tiếp"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:677
-#: src/transport/gnunet-service-transport.c:2813
+#: src/hostlist/gnunet-daemon-hostlist_server.c:679
+#: src/transport/gnunet-service-transport.c:2814
 #, fuzzy
 msgid "Could not access PEERINFO service.  Exiting.\n"
 msgstr "Không thể truy cập đến thông tin về không gian tên.\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:689
+#: src/hostlist/gnunet-daemon-hostlist_server.c:691
 #, c-format
 msgid "Invalid port number %llu.  Exiting.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:701
+#: src/hostlist/gnunet-daemon-hostlist_server.c:703
 #, c-format
 msgid "Hostlist service starts on %s:%llu\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:716
+#: src/hostlist/gnunet-daemon-hostlist_server.c:718
 #, fuzzy, c-format
 msgid "Address to obtain hostlist: `%s'\n"
 msgstr "Đang thử tải danh sách các máy xuống « %s »\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:729
+#: src/hostlist/gnunet-daemon-hostlist_server.c:731
 #, fuzzy
 msgid "BINDTOIP does not a valid IPv4 address! Ignoring BINDTOIPV4.\n"
 msgstr "« %s » không sẵn sàng.\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:746
+#: src/hostlist/gnunet-daemon-hostlist_server.c:748
 #, fuzzy
 msgid "BINDTOIP does not a valid IPv4 address! Ignoring BINDTOIPV6.\n"
 msgstr "« %s » không sẵn sàng.\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:767
+#: src/hostlist/gnunet-daemon-hostlist_server.c:769
 #, fuzzy, c-format
 msgid "`%s' is not a valid IPv4 address! Ignoring BINDTOIPV4.\n"
 msgstr "« %s » không sẵn sàng.\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:787
+#: src/hostlist/gnunet-daemon-hostlist_server.c:789
 #, fuzzy, c-format
 msgid "`%s' is not a valid IPv6 address! Ignoring BINDTOIPV6.\n"
 msgstr "« %s » không sẵn sàng.\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:827
+#: src/hostlist/gnunet-daemon-hostlist_server.c:829
 #, fuzzy, c-format
 msgid "Could not start hostlist HTTP server on port %u\n"
 msgstr "Cổng cho trình phục vụ HTTP danh sách máy chủ thống nhất"
 
-#: src/identity/gnunet-identity.c:177
+#: src/identity/gnunet-identity.c:179
 #, fuzzy, c-format
 msgid "Failed to create ego: %s\n"
 msgstr "Không thể tạo miền tên.\n"
 
-#: src/identity/gnunet-identity.c:199
+#: src/identity/gnunet-identity.c:201
 #, fuzzy, c-format
 msgid "Failed to set default ego: %s\n"
 msgstr "Không thể tạo miền tên.\n"
 
-#: src/identity/gnunet-identity.c:354
+#: src/identity/gnunet-identity.c:356
 msgid "create ego NAME"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:360
+#: src/identity/gnunet-identity.c:362
 msgid "delete ego NAME "
 msgstr ""
 
-#: src/identity/gnunet-identity.c:365
+#: src/identity/gnunet-identity.c:367
 msgid "display all egos"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:371
+#: src/identity/gnunet-identity.c:373
 msgid ""
 "set default identity to EGO for a subsystem SUBSYSTEM (use together with -s)"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:376
+#: src/identity/gnunet-identity.c:378
 msgid "run in monitor mode egos"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:382
+#: src/identity/gnunet-identity.c:384
 msgid ""
 "set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:396
+#: src/identity/gnunet-identity.c:398
 msgid "Maintain egos"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:389
+#: src/identity/gnunet-service-identity.c:391
 msgid "no default known"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:414
+#: src/identity/gnunet-service-identity.c:416
 msgid "default configured, but ego unknown (internal error)"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:505
-#: src/identity/gnunet-service-identity.c:788
-#: src/identity/gnunet-service-identity.c:916
+#: src/identity/gnunet-service-identity.c:507
+#: src/identity/gnunet-service-identity.c:790
+#: src/identity/gnunet-service-identity.c:918
 #, fuzzy, c-format
 msgid "Failed to write subsystem default identifier map to `%s'.\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/identity/gnunet-service-identity.c:513
+#: src/identity/gnunet-service-identity.c:515
 msgid "Unknown ego specified for service (internal error)"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:608
+#: src/identity/gnunet-service-identity.c:610
 msgid "identifier already in use for another ego"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:763
+#: src/identity/gnunet-service-identity.c:765
 msgid "target name already exists"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:806
-#: src/identity/gnunet-service-identity.c:934
+#: src/identity/gnunet-service-identity.c:808
+#: src/identity/gnunet-service-identity.c:936
 msgid "no matching ego found"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:969
+#: src/identity/gnunet-service-identity.c:971
 #, fuzzy, c-format
 msgid "Failed to parse ego information in `%s'\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/identity/gnunet-service-identity.c:1027
+#: src/identity/gnunet-service-identity.c:1029
 #, fuzzy, c-format
 msgid "Failed to parse subsystem identity configuration file `%s'\n"
 msgstr "Không thể lưu tập tin cấu hình « %s »:"
 
-#: src/identity/gnunet-service-identity.c:1037
+#: src/identity/gnunet-service-identity.c:1039
 #, fuzzy, c-format
 msgid "Failed to create directory `%s' for storing egos\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/json/json.c:121
+#: src/json/json.c:123
 #, fuzzy, c-format
 msgid "Failed to parse JSON in option `%s': %s (%s)\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/multicast/gnunet-multicast.c:46 src/multicast/gnunet-multicast.c:70
-msgid "This command doesn't do anything yet."
-msgstr ""
-
-#: src/my/my.c:194 src/my/my.c:213
+#: src/my/my.c:196 src/my/my.c:215
 #, fuzzy, c-format
 msgid "%s failed at %s:%d with error: %s\n"
 msgstr "« %s » bị lỗi tại %s:%d với lỗi: %s\n"
 
-#: src/mysql/mysql.c:178
+#: src/mysql/mysql.c:180
 #, c-format
 msgid "Trying to use file `%s' for MySQL configuration.\n"
 msgstr "Đang thử dùng tập tin « %s » cho cấu hình MySQL.\n"
 
-#: src/mysql/mysql.c:185
+#: src/mysql/mysql.c:187
 #, fuzzy, c-format
 msgid "Could not access file `%s': %s\n"
 msgstr "Không thể truy cập đến « %s »: %s\n"
 
-#: src/namecache/gnunet-namecache.c:105
+#: src/namecache/gnunet-namecache.c:107
 #, fuzzy, c-format
 msgid "No records found for `%s'"
 msgstr "Vẫn còn không tìm thấy đồng đẳng trong « %s ».\n"
 
-#: src/namecache/gnunet-namecache.c:120 src/namestore/gnunet-namestore.c:424
+#: src/namecache/gnunet-namecache.c:122 src/namestore/gnunet-namestore.c:454
 #, c-format
 msgid "\tCorrupt or unsupported record of type %u\n"
 msgstr ""
 
-#: src/namecache/gnunet-namecache.c:181
+#: src/namecache/gnunet-namecache.c:183
 #, fuzzy, c-format
 msgid "You must specify which zone should be accessed\n"
 msgstr "chỉ ra TRUYỀN_TẢI nào cần được thử nghiệm"
 
-#: src/namecache/gnunet-namecache.c:191
+#: src/namecache/gnunet-namecache.c:193
 #, fuzzy, c-format
 msgid "Invalid public key for zone `%s'\n"
 msgstr "Đối số không hợp lệ cho « %s ».\n"
 
-#: src/namecache/gnunet-namecache.c:199
+#: src/namecache/gnunet-namecache.c:201
 #, fuzzy, c-format
 msgid "You must specify a name\n"
 msgstr "Phải ghi rõ tên hiệu\n"
 
-#: src/namecache/gnunet-namecache.c:230 src/namestore/gnunet-namestore.c:1290
+#: src/namecache/gnunet-namecache.c:232 src/namestore/gnunet-namestore.c:1575
 msgid "name of the record to add/delete/display"
 msgstr ""
 
-#: src/namecache/gnunet-namecache.c:236
+#: src/namecache/gnunet-namecache.c:238
 #, fuzzy
 msgid "spezifies the public key of the zone to look in"
 msgstr "xác định mức ưu tiên của nội dung"
 
-#: src/namecache/gnunet-namecache.c:248 src/namestore/gnunet-namestore.c:1342
+#: src/namecache/gnunet-namecache.c:250 src/namestore/gnunet-namestore.c:1632
 #, fuzzy
 msgid "GNUnet zone manipulation tool"
 msgstr "Cấu hình GNUnet"
 
-#: src/namecache/namecache_api.c:294
+#: src/namecache/namecache_api.c:296
 msgid "Namecache failed to cache block"
 msgstr ""
 
-#: src/namecache/namecache_api.c:381
+#: src/namecache/namecache_api.c:383
 #, fuzzy
 msgid "Error communicating with namecache service"
 msgstr "Cổng để liên lạc với giao diện người dùng GNUnet"
 
-#: src/namecache/plugin_namecache_flat.c:119
-#: src/namecache/plugin_namecache_flat.c:253
-#: src/namestore/plugin_namestore_heap.c:146
-#: src/namestore/plugin_namestore_heap.c:393
-#: src/peerstore/plugin_peerstore_flat.c:377
-#: src/peerstore/plugin_peerstore_flat.c:536
+#: src/namecache/plugin_namecache_flat.c:121
+#: src/namecache/plugin_namecache_flat.c:255
+#: src/namestore/plugin_namestore_heap.c:148
+#: src/namestore/plugin_namestore_heap.c:395
+#: src/peerstore/plugin_peerstore_flat.c:379
+#: src/peerstore/plugin_peerstore_flat.c:538
 #, 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_heap.c:157
-#: src/peerstore/plugin_peerstore_flat.c:392
+#: src/namecache/plugin_namecache_flat.c:132
+#: src/namestore/plugin_namestore_heap.c:159
+#: src/peerstore/plugin_peerstore_flat.c:394
 #, 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:149
-#: src/namestore/plugin_namestore_heap.c:170
-#: src/peerstore/plugin_peerstore_flat.c:404
+#: src/namecache/plugin_namecache_flat.c:151
+#: src/namestore/plugin_namestore_heap.c:172
+#: src/peerstore/plugin_peerstore_flat.c:406
 #, 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:408
+#: src/namecache/plugin_namecache_flat.c:410
 #, fuzzy
 msgid "flat plugin running\n"
 msgstr "kho dữ liệu sqlite"
 
-#: src/namestore/gnunet-namestore.c:311
+#: src/namecache/plugin_namecache_sqlite.c:183
+#: src/namecache/plugin_namecache_sqlite.c:197
+#: src/namestore/plugin_namestore_sqlite.c:219
+#: src/namestore/plugin_namestore_sqlite.c:230
+#, fuzzy, c-format
+msgid "Failed to setup database at `%s'\n"
+msgstr "Lỗi chạy %s: %s %d\n"
+
+#: src/namestore/gnunet-namestore.c:341
 #, fuzzy, c-format
 msgid "Adding record failed: %s\n"
 msgstr "Gặp lỗi khi tải lên tập tin: %s\n"
 
-#: src/namestore/gnunet-namestore.c:341
+#: src/namestore/gnunet-namestore.c:371
 #, fuzzy, c-format
 msgid "Deleting record failed, record does not exist%s%s\n"
 msgstr "Gặp lỗi khi tải lên tập tin: %s\n"
 
-#: src/namestore/gnunet-namestore.c:348
+#: src/namestore/gnunet-namestore.c:378
 #, fuzzy, c-format
 msgid "Deleting record failed%s%s\n"
 msgstr "Gặp lỗi khi tải lên tập tin: %s\n"
 
-#: src/namestore/gnunet-namestore.c:628 src/namestore/gnunet-namestore.c:636
+#: src/namestore/gnunet-namestore.c:660 src/namestore/gnunet-namestore.c:668
 #, c-format
 msgid "A %s record exists already under `%s', no other records can be added.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:650 src/namestore/gnunet-namestore.c:662
+#: src/namestore/gnunet-namestore.c:682 src/namestore/gnunet-namestore.c:694
 #, c-format
 msgid "Records already exist under `%s', cannot add `%s' record.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:675
+#: src/namestore/gnunet-namestore.c:707
 #, c-format
 msgid ""
 "Non-GNS2DNS records already exist under `%s', cannot add GNS2DNS record.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:809
+#: src/namestore/gnunet-namestore.c:837
 #, c-format
 msgid "There are no records under label `%s' that could be deleted.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:850
+#: src/namestore/gnunet-namestore.c:878
 #, c-format
 msgid ""
 "There are no records under label `%s' that match the request for deletion.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:902
+#: src/namestore/gnunet-namestore.c:965
+#, fuzzy, c-format
+msgid "Failed to replace records: %s\n"
+msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
+
+#: src/namestore/gnunet-namestore.c:1009
 #, fuzzy, c-format
 msgid "No options given\n"
 msgstr "chưa đưa ra tên"
 
-#: src/namestore/gnunet-namestore.c:921 src/namestore/gnunet-namestore.c:930
-#: src/namestore/gnunet-namestore.c:949 src/namestore/gnunet-namestore.c:972
-#: src/namestore/gnunet-namestore.c:1026
+#: src/namestore/gnunet-namestore.c:1032 src/namestore/gnunet-namestore.c:1065
+#: src/namestore/gnunet-namestore.c:1074 src/namestore/gnunet-namestore.c:1093
+#: src/namestore/gnunet-namestore.c:1116 src/namestore/gnunet-namestore.c:1148
 #, fuzzy, c-format
 msgid "Missing option `%s' for operation `%s'\n"
 msgstr "Giá trị cấu hình « %s » cho « %s » trong phần « %s » nên là con số\n"
 
-#: src/namestore/gnunet-namestore.c:922 src/namestore/gnunet-namestore.c:931
-#: src/namestore/gnunet-namestore.c:950 src/namestore/gnunet-namestore.c:974
+#: src/namestore/gnunet-namestore.c:1033
+msgid "replace"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1066 src/namestore/gnunet-namestore.c:1075
+#: src/namestore/gnunet-namestore.c:1094 src/namestore/gnunet-namestore.c:1118
 msgid "add"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:940
+#: src/namestore/gnunet-namestore.c:1084
 #, fuzzy, c-format
 msgid "Unsupported type `%s'\n"
 msgstr "Lệnh không được hỗ trợ « %s ». Đang hủy bỏ.\n"
 
-#: src/namestore/gnunet-namestore.c:962
+#: src/namestore/gnunet-namestore.c:1106
 #, c-format
 msgid "Value `%s' invalid for record type `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1007
+#: src/namestore/gnunet-namestore.c:1129
 #, fuzzy, c-format
 msgid "Invalid time format `%s'\n"
 msgstr "Địa chỉ IP định dạng sai: %s\n"
 
-#: src/namestore/gnunet-namestore.c:1027
+#: src/namestore/gnunet-namestore.c:1149
 msgid "del"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1070
+#: src/namestore/gnunet-namestore.c:1192
 #, fuzzy, c-format
 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:1099
-#: src/peerinfo-tool/gnunet-peerinfo.c:773
+#: src/namestore/gnunet-namestore.c:1221
+#: src/peerinfo-tool/gnunet-peerinfo.c:775
 #, fuzzy, c-format
 msgid "Invalid URI `%s'\n"
 msgstr "Dữ liệu nhập không hợp lệ.\n"
 
-#: src/namestore/gnunet-namestore.c:1134
+#: src/namestore/gnunet-namestore.c:1249
 #, fuzzy, c-format
 msgid "Invalid nick `%s'\n"
 msgstr "Dữ liệu nhập không hợp lệ.\n"
 
-#: src/namestore/gnunet-namestore.c:1174
+#: src/namestore/gnunet-namestore.c:1289
 #, c-format
 msgid "No default ego configured in identity service\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1238
+#: src/namestore/gnunet-namestore.c:1341
+#, c-format
+msgid "Superfluous command line arguments (starting with `%s') ignored\n"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1357
 #, fuzzy, c-format
 msgid "Cannot connect to identity service\n"
 msgstr "Không thể kết nối tới %s:%u: %s\n"
 
-#: src/namestore/gnunet-namestore.c:1263
+#: src/namestore/gnunet-namestore.c:1407
+msgid "Empty record line argument is not allowed.\n"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1423
+#, c-format
+msgid "Invalid expiration time `%s' (must be without unit)\n"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1435 src/namestore/gnunet-namestore.c:1453
+#: src/namestore/gnunet-namestore.c:1470
+#, fuzzy, c-format
+msgid "Missing entries in record line `%s'.\n"
+msgstr "Không thể nạp phần bổ sung truyền tải « %s »\n"
+
+#: src/namestore/gnunet-namestore.c:1444
+#, fuzzy, c-format
+msgid "Unknown record type `%s'\n"
+msgstr "Không rõ câu lệnh « %s ».\n"
+
+#: src/namestore/gnunet-namestore.c:1484
+#, fuzzy, c-format
+msgid "Invalid record data for type %s: `%s'.\n"
+msgstr "Địa chỉ IP định dạng sai: %s\n"
+
+#: src/namestore/gnunet-namestore.c:1548
 msgid "add record"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1267
+#: src/namestore/gnunet-namestore.c:1552
 msgid "delete record"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1271
+#: src/namestore/gnunet-namestore.c:1556
 msgid "display records"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1276
+#: src/namestore/gnunet-namestore.c:1561
 msgid ""
 "expiration time for record to use (for adding only), \"never\" is possible"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1281
+#: src/namestore/gnunet-namestore.c:1566
 #, fuzzy
 msgid "set the desired nick name for the zone"
 msgstr "In ra thông tin về các đồng đẳng GNUnet."
 
-#: src/namestore/gnunet-namestore.c:1285
+#: src/namestore/gnunet-namestore.c:1570
 #, fuzzy
 msgid "monitor changes in the namestore"
 msgstr "Không kết nối được đến trình nền gnunetd."
 
-#: src/namestore/gnunet-namestore.c:1295
+#: src/namestore/gnunet-namestore.c:1580
 #, fuzzy
 msgid "determine our name for the given PKEY"
 msgstr "In ra thông tin về các đồng đẳng GNUnet."
 
-#: src/namestore/gnunet-namestore.c:1300
+#: src/namestore/gnunet-namestore.c:1585
+msgid ""
+"set record set to values given by (possibly multiple) RECORDLINES; can be "
+"specified multiple times"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1590
 msgid "type of the record to add/delete/display"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1305
+#: src/namestore/gnunet-namestore.c:1595
 msgid "URI to import into our zone"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1310
+#: src/namestore/gnunet-namestore.c:1600
 msgid "value of the record to add/delete"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1314
+#: src/namestore/gnunet-namestore.c:1604
 msgid "create or list public record"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1318
+#: src/namestore/gnunet-namestore.c:1608
 msgid ""
 "create shadow record (only valid if all other records of the same type have "
 "expired"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1323
+#: src/namestore/gnunet-namestore.c:1613
 msgid "name of the ego controlling the zone"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:547
+#: src/namestore/gnunet-namestore-fcfsd.c:549
 #, fuzzy, c-format
 msgid "Unsupported form value `%s'\n"
 msgstr "Lệnh không được hỗ trợ « %s ». Đang hủy bỏ.\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:574
+#: src/namestore/gnunet-namestore-fcfsd.c:576
 #, fuzzy, c-format
 msgid "Failed to create record for domain `%s': %s\n"
 msgstr "Không thể truy cập đến tập tin gnunet-directory « %s »\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:595
+#: src/namestore/gnunet-namestore-fcfsd.c:597
 msgid "Error when mapping zone to name\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:627
+#: src/namestore/gnunet-namestore-fcfsd.c:629
 #, c-format
 msgid "Found existing name `%s' for the given key\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:687
+#: src/namestore/gnunet-namestore-fcfsd.c:689
 #, c-format
 msgid "Found %u existing records for domain `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:775
+#: src/namestore/gnunet-namestore-fcfsd.c:777
 #, fuzzy, c-format
 msgid "Failed to create page for `%s'\n"
 msgstr "Không thể tạo miền tên.\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:794
+#: src/namestore/gnunet-namestore-fcfsd.c:796
 #, fuzzy, c-format
 msgid "Failed to setup post processor for `%s'\n"
 msgstr "Lỗi cập nhật dữ liệu cho mô-đun « %s »\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:830
+#: src/namestore/gnunet-namestore-fcfsd.c:832
 msgid "Domain name must not contain `.'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:839
+#: src/namestore/gnunet-namestore-fcfsd.c:841
 msgid "Domain name must not contain `+'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1069
+#: src/namestore/gnunet-namestore-fcfsd.c:1071
 msgid "No ego configured for `fcfsd` subsystem\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1097
+#: src/namestore/gnunet-namestore-fcfsd.c:1099
 #, fuzzy
 msgid "Failed to start HTTP server\n"
 msgstr "Lỗi bắt đầu thu thập.\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1145
+#: src/namestore/gnunet-namestore-fcfsd.c:1147
 #, fuzzy
 msgid "Failed to connect to identity\n"
 msgstr "Lỗi kết nối đến gnunetd.\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1171
+#: src/namestore/gnunet-namestore-fcfsd.c:1173
 msgid "name of the zone that is to be managed by FCFSD"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1190
+#: src/namestore/gnunet-namestore-fcfsd.c:1192
 msgid "GNU Name System First Come First Serve name registration service"
 msgstr ""
 
-#: src/namestore/gnunet-service-namestore.c:749
+#: src/namestore/gnunet-service-namestore.c:900
 #, fuzzy, c-format
 msgid "Failed to replicate block in namecache: %s\n"
 msgstr "Lỗi cập nhật dữ liệu cho mô-đun « %s »\n"
 
-#: src/namestore/gnunet-zoneimport.c:2036
+#: src/namestore/gnunet-zoneimport.c:2038
 msgid "size to use for the main hash map"
 msgstr ""
 
-#: src/namestore/gnunet-zoneimport.c:2041
+#: src/namestore/gnunet-zoneimport.c:2043
 msgid "minimum expiration time we assume for imported records"
 msgstr ""
 
-#: src/namestore/namestore_api.c:389
+#: src/namestore/namestore_api.c:391
 msgid "Namestore failed to store record\n"
 msgstr ""
 
-#: src/namestore/plugin_namestore_heap.c:776
+#: src/namestore/plugin_namestore_heap.c:778
 #, fuzzy
 msgid "heap file database running\n"
 msgstr "kho dữ liệu sqlite"
 
-#: src/namestore/plugin_namestore_sqlite.c:216
-#: src/namestore/plugin_namestore_sqlite.c:227
-#, fuzzy, c-format
-msgid "Failed to setup database at `%s'\n"
-msgstr "Lỗi chạy %s: %s %d\n"
-
-#: src/nat-auto/gnunet-nat-auto.c:191
+#: src/nat-auto/gnunet-nat-auto.c:193
 #, fuzzy
 msgid "Suggested configuration changes:\n"
 msgstr ""
 "\n"
 "CHƯA lưu các thay đổi trong cấu hình.\n"
 
-#: src/nat-auto/gnunet-nat-auto.c:217
+#: src/nat-auto/gnunet-nat-auto.c:219
 #, fuzzy, c-format
 msgid "Failed to write configuration to `%s'\n"
 msgstr "Lỗi lưu cấu hình."
 
-#: src/nat-auto/gnunet-nat-auto.c:224
+#: src/nat-auto/gnunet-nat-auto.c:226
 #, fuzzy, c-format
 msgid "Wrote updated configuration to `%s'\n"
 msgstr "Không thể truy cập đến tập tin gnunet-directory « %s »\n"
 
-#: src/nat-auto/gnunet-nat-auto.c:343
+#: src/nat-auto/gnunet-nat-auto.c:345
 #, fuzzy
 msgid "run autoconfiguration"
 msgstr "Cấu hình hạn ngạch"
 
-#: src/nat-auto/gnunet-nat-auto.c:349
+#: src/nat-auto/gnunet-nat-auto.c:351
 msgid "section name providing the configuration for the adapter"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:354 src/nat/gnunet-nat.c:451
+#: src/nat-auto/gnunet-nat-auto.c:356 src/nat/gnunet-nat.c:459
 msgid "use TCP"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:359 src/nat/gnunet-nat.c:456
+#: src/nat-auto/gnunet-nat-auto.c:361 src/nat/gnunet-nat.c:464
 msgid "use UDP"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:364
+#: src/nat-auto/gnunet-nat-auto.c:366
 msgid "write configuration file (for autoconfiguration)"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:376
+#: src/nat-auto/gnunet-nat-auto.c:378
 #, fuzzy
 msgid "GNUnet NAT traversal autoconfiguration"
 msgstr "Cấu hình GNUnet"
 
-#: src/nat-auto/gnunet-nat-auto_legacy.c:401
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:679
-#: src/nat-auto/nat_auto_api_test.c:403
+#: src/nat-auto/gnunet-nat-auto_legacy.c:403
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:681
+#: src/nat-auto/nat_auto_api_test.c:409
 #, fuzzy
 msgid "Failed to connect to `gnunet-nat-server'\n"
 msgstr "Lỗi kết nối đến gnunetd.\n"
 
-#: src/nat-auto/gnunet-nat-auto_legacy.c:516
+#: src/nat-auto/gnunet-nat-auto_legacy.c:518
 #, c-format
 msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto_legacy.c:566
-#: src/nat-auto/nat_auto_api_test.c:569
+#: src/nat-auto/gnunet-nat-auto_legacy.c:568
+#: src/nat-auto/nat_auto_api_test.c:575
 #, fuzzy
 msgid "NAT test failed to start NAT library\n"
 msgstr "Lỗi bắt đầu thu thập.\n"
 
-#: src/nat-auto/gnunet-service-nat-auto.c:340
+#: src/nat-auto/gnunet-service-nat-auto.c:342
 msgid "UPnP client `upnpc` command not found, disabling UPnP\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:383
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:385
 msgid "NAT traversal with ICMP Server succeeded.\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:384
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:386
 msgid "NAT traversal with ICMP Server failed.\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:403
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:405
 #, 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-auto/gnunet-service-nat-auto_legacy.c:435
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:437
 #, c-format
 msgid "Detected external IP `%s'\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:570
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:572
 msgid "This system has a global IPv6 address, setting IPv6 to supported.\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:588
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:590
 #, 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-auto/gnunet-service-nat-auto_legacy.c:722
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:724
 msgid "upnpc found, enabling its use\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:723
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:725
 msgid "upnpc not found\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:760
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:762
 msgid "test_icmp_server not possible, as we have no public IPv4 address\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:772
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:832
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:774
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:834
 msgid "test_icmp_server not possible, as we are not behind NAT\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:784
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:844
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:786
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:846
 msgid "No working gnunet-helper-nat-server found\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:821
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:823
 msgid "test_icmp_client not possible, as we have no internal IPv4 address\n"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:74
+#: src/nat-auto/nat_auto_api.c:76
 msgid "Operation Successful"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:76
+#: src/nat-auto/nat_auto_api.c:78
 msgid "IPC failure"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:78
+#: src/nat-auto/nat_auto_api.c:80
 msgid "Failure in network subsystem, check permissions."
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:80
+#: src/nat-auto/nat_auto_api.c:82
 msgid "Encountered timeout while performing operation"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:82
+#: src/nat-auto/nat_auto_api.c:84
 msgid "detected that we are offline"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:84
+#: src/nat-auto/nat_auto_api.c:86
 msgid "`upnpc` command not found"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:86
+#: src/nat-auto/nat_auto_api.c:88
 #, fuzzy
 msgid "Failed to run `upnpc` command"
 msgstr "Lỗi bắt đầu thu thập.\n"
 
-#: src/nat-auto/nat_auto_api.c:88
+#: src/nat-auto/nat_auto_api.c:90
 msgid "`upnpc' command took too long, process killed"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:90
+#: src/nat-auto/nat_auto_api.c:92
 msgid "`upnpc' command failed to establish port mapping"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:92
+#: src/nat-auto/nat_auto_api.c:94
 msgid "`external-ip' command not found"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:94
+#: src/nat-auto/nat_auto_api.c:96
 #, fuzzy
 msgid "Failed to run `external-ip` command"
 msgstr "Lỗi bắt đầu thu thập.\n"
 
-#: src/nat-auto/nat_auto_api.c:96
+#: src/nat-auto/nat_auto_api.c:98
 msgid "`external-ip' command output invalid"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:98
+#: src/nat-auto/nat_auto_api.c:100
 msgid "no valid address was returned by `external-ip'"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:100
+#: src/nat-auto/nat_auto_api.c:102
 #, 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-auto/nat_auto_api.c:102
+#: src/nat-auto/nat_auto_api.c:104
 msgid "No functioning gnunet-helper-nat-server installation found"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:104
+#: src/nat-auto/nat_auto_api.c:106
 msgid "NAT test could not be initialized"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:106
+#: src/nat-auto/nat_auto_api.c:108
 msgid "NAT test timeout reached"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:108
+#: src/nat-auto/nat_auto_api.c:110
 msgid "could not register NAT"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:110
+#: src/nat-auto/nat_auto_api.c:112
 msgid "No working gnunet-helper-nat-client installation found"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api_test.c:475
+#: src/nat-auto/nat_auto_api_test.c:481
 #, fuzzy, c-format
 msgid "Failed to find valid PORT in section `%s'\n"
 msgstr "Lỗi đóng kết đến cổng %s %d.\n"
 
-#: src/nat-auto/nat_auto_api_test.c:520
+#: src/nat-auto/nat_auto_api_test.c:526
 #, fuzzy, c-format
 msgid "Failed to create socket bound to `%s' for NAT test: %s\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/nat/gnunet-nat.c:429
+#: src/nat/gnunet-nat.c:437
 msgid "which IP and port are we locally using to bind/listen to"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:435
+#: src/nat/gnunet-nat.c:443
 msgid "which remote IP and port should be asked for connection reversal"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:441
+#: src/nat/gnunet-nat.c:449
 msgid ""
 "name of configuration section to find additional options, such as manual "
 "host punching data"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:446
+#: src/nat/gnunet-nat.c:454
 msgid "enable STUN processing"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:461
+#: src/nat/gnunet-nat.c:469
 msgid "watch for connection reversal requests"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:473
+#: src/nat/gnunet-nat.c:481
 msgid "GNUnet NAT traversal autoconfigure daemon"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1337
+#: src/nat/gnunet-service-nat.c:1339
 #, c-format
 msgid "Malformed punched hole specification `%s' (lacks port)\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1347
+#: src/nat/gnunet-service-nat.c:1349
 #, c-format
 msgid "Invalid port number in punched hole specification `%s' (lacks port)\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1363
+#: src/nat/gnunet-service-nat.c:1365
 #, c-format
 msgid "Malformed punched hole specification `%s' (lacks `]')\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1374
+#: src/nat/gnunet-service-nat.c:1376
 #, c-format
 msgid "Malformed punched hole specification `%s' (IPv6 address invalid)"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1839
+#: src/nat/gnunet-service-nat.c:1841
 #, fuzzy
 msgid "Connection reversal request failed\n"
 msgstr "Thu thập bị dừng.\n"
 
-#: src/nat/gnunet-service-nat.c:1912
+#: src/nat/gnunet-service-nat.c:1914
 msgid ""
 "UPnP enabled in configuration, but UPnP client `upnpc` command not found, "
 "disabling UPnP\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat_helper.c:184
+#: src/nat/gnunet-service-nat_helper.c:186
 #, c-format
 msgid "gnunet-helper-nat-server generated malformed address `%s'\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat_helper.c:271
+#: src/nat/gnunet-service-nat_helper.c:273
 #, fuzzy, c-format
 msgid "Failed to start %s\n"
 msgstr "Lỗi bắt đầu thu thập.\n"
 
-#: src/nat/gnunet-service-nat_mini.c:194
+#: src/nat/gnunet-service-nat_mini.c:196
 msgid "`external-ip' command not found\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat_mini.c:654
+#: src/nat/gnunet-service-nat_mini.c:656
 msgid "`upnpc' command not found\n"
 msgstr ""
 
-#: src/nse/gnunet-nse.c:120
+#: src/nse/gnunet-nse.c:122
 #, fuzzy
 msgid "Show network size estimates from NSE service."
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/nse/gnunet-nse-profiler.c:847
+#: src/nse/gnunet-nse-profiler.c:849
 #, fuzzy
 msgid "limit to the number of connections to NSE services, 0 for none"
 msgstr "Không kết nối được đến trình nền gnunetd."
 
-#: src/nse/gnunet-nse-profiler.c:852
+#: src/nse/gnunet-nse-profiler.c:854
 msgid "name of the file for writing connection information and statistics"
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:864
+#: src/nse/gnunet-nse-profiler.c:866
 msgid "name of the file for writing the main results"
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:871
+#: src/nse/gnunet-nse-profiler.c:873
 msgid "Number of peers to run in each round, separated by commas"
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:882
+#: src/nse/gnunet-nse-profiler.c:884
 msgid "delay between rounds"
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:891
+#: src/nse/gnunet-nse-profiler.c:893
 #, fuzzy
 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:1532
-#: src/revocation/gnunet-service-revocation.c:841 src/util/gnunet-scrypt.c:274
+#: src/nse/gnunet-service-nse.c:1534
+#: src/revocation/gnunet-service-revocation.c:843 src/util/gnunet-scrypt.c:276
 #, fuzzy
 msgid "Value is too large.\n"
 msgstr "Giá trị không nằm trong phạm vi được phép."
 
-#: src/peerinfo/gnunet-service-peerinfo.c:176
+#: src/peerinfo/gnunet-service-peerinfo.c:178
 #, fuzzy, c-format
 msgid "Removing expired address of transport `%s'\n"
 msgstr "Đã nạp truyền tải « %s »\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:311
+#: src/peerinfo/gnunet-service-peerinfo.c:313
 #, fuzzy, c-format
 msgid "Failed to parse HELLO in file `%s': %s\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:332
-#: src/peerinfo/gnunet-service-peerinfo.c:363
+#: src/peerinfo/gnunet-service-peerinfo.c:334
+#: src/peerinfo/gnunet-service-peerinfo.c:365
 #, fuzzy, c-format
 msgid "Failed to parse HELLO in file `%s'\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:447
+#: src/peerinfo/gnunet-service-peerinfo.c:449
 msgid "# peers known"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:490
+#: src/peerinfo/gnunet-service-peerinfo.c:492
 #, c-format
 msgid ""
 "File `%s' in directory `%s' does not match naming convention. Removed.\n"
@@ -5664,1139 +5697,900 @@ msgstr ""
 "Tập tin « %s » trong thư mục « %s » không tùy theo quy ước đặt tên. Bị gỡ "
 "bỏ.\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:657
+#: src/peerinfo/gnunet-service-peerinfo.c:659
 #, fuzzy, c-format
 msgid "Scanning directory `%s'\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:665
+#: src/peerinfo/gnunet-service-peerinfo.c:667
 #, c-format
 msgid "Still no peers found in `%s'!\n"
 msgstr "Vẫn còn không tìm thấy đồng đẳng trong « %s ».\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:1098
+#: src/peerinfo/gnunet-service-peerinfo.c:1100
 #, fuzzy, c-format
 msgid "Cleaning up directory `%s'\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:1436
+#: src/peerinfo/gnunet-service-peerinfo.c:1438
 #, c-format
 msgid "Importing HELLOs from `%s'\n"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:1449
+#: src/peerinfo/gnunet-service-peerinfo.c:1451
 msgid "Skipping import of included HELLOs\n"
 msgstr ""
 
-#: src/peerinfo/peerinfo_api.c:218
+#: src/peerinfo/peerinfo_api.c:220
 #, fuzzy
 msgid "Failed to receive response from `PEERINFO' service."
 msgstr ""
 "\n"
 "Không nhận được đáp ứng từ gnunetd.\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:237
+#: src/peerinfo-tool/gnunet-peerinfo.c:239
 #, fuzzy, c-format
 msgid "%sPeer `%s'\n"
 msgstr "Tôi là đồng đẳng « %s ».\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:244
+#: src/peerinfo-tool/gnunet-peerinfo.c:246
 #, c-format
 msgid "\tExpires: %s \t %s\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:297
-#: src/rest-plugins/plugin_rest_peerinfo.c:499
+#: src/peerinfo-tool/gnunet-peerinfo.c:299
+#: src/rest-plugins/plugin_rest_peerinfo.c:501
 #, fuzzy, c-format
 msgid "Failure: Cannot convert address to string for peer `%s'\n"
 msgstr "Lỗi đóng kết đến cổng %s %d.\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:464
+#: src/peerinfo-tool/gnunet-peerinfo.c:466
 #, c-format
 msgid "Failure: Received invalid %s\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:478
+#: src/peerinfo-tool/gnunet-peerinfo.c:480
 #, fuzzy, c-format
 msgid "Failed to write HELLO with %u bytes to file `%s'\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:497
+#: src/peerinfo-tool/gnunet-peerinfo.c:499
 #, c-format
 msgid "Wrote %s HELLO containing %u addresses with %u bytes to file `%s'\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:797
+#: src/peerinfo-tool/gnunet-peerinfo.c:799
 #, c-format
 msgid "I am peer `%s'.\n"
 msgstr "Tôi là đồng đẳng « %s ».\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:841
+#: src/peerinfo-tool/gnunet-peerinfo.c:843
 msgid "don't resolve host names"
 msgstr "không quyết định các tên máy"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:846
+#: src/peerinfo-tool/gnunet-peerinfo.c:848
 msgid "output only the identity strings"
 msgstr "chỉ xuất những chuỗi nhận diện"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:850
+#: src/peerinfo-tool/gnunet-peerinfo.c:852
 msgid "include friend-only information"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:855
+#: src/peerinfo-tool/gnunet-peerinfo.c:857
 msgid "output our own identity only"
 msgstr "chỉ xuất nhận diện mình"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:860
+#: src/peerinfo-tool/gnunet-peerinfo.c:862
 #, fuzzy
 msgid "list all known peers"
 msgstr "liệt kê mọi bộ tiếp hợp mạng"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:866
+#: src/peerinfo-tool/gnunet-peerinfo.c:868
 msgid "dump hello to file"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:871
+#: src/peerinfo-tool/gnunet-peerinfo.c:873
 msgid "also output HELLO uri(s)"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:877
+#: src/peerinfo-tool/gnunet-peerinfo.c:879
 msgid "add given HELLO uri to the database"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:895
+#: src/peerinfo-tool/gnunet-peerinfo.c:897
 #, fuzzy
 msgid "Print information about peers."
 msgstr "In ra thông tin về các đồng đẳng GNUnet."
 
-#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:103
-#: src/transport/gnunet-service-transport_plugins.c:166
+#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:105
+#: src/transport/gnunet-service-transport_plugins.c:168
 #, fuzzy, c-format
 msgid "Starting transport plugins `%s'\n"
 msgstr "Đang nạp các truyền tải « %s »\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:107
-#: src/transport/gnunet-service-transport_plugins.c:171
+#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:109
+#: src/transport/gnunet-service-transport_plugins.c:173
 #, fuzzy, c-format
 msgid "Loading `%s' transport plugin\n"
 msgstr "Đang nạp các truyền tải « %s »\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:127
-#: src/transport/gnunet-service-transport_plugins.c:206
+#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:129
+#: src/transport/gnunet-service-transport_plugins.c:208
 #, fuzzy, c-format
 msgid "Failed to load transport plugin for `%s'\n"
 msgstr "Không thể nạp phần bổ sung truyền tải « %s »\n"
 
-#: src/peerstore/gnunet-peerstore.c:89
+#: src/peerstore/gnunet-peerstore.c:91
 msgid "peerstore"
 msgstr ""
 
-#: src/peerstore/gnunet-service-peerstore.c:596
+#: src/peerstore/gnunet-service-peerstore.c:598
 #, fuzzy, c-format
 msgid "Could not load database backend `%s'\n"
 msgstr "Không thể đọc danh sách bạn bè « %s »\n"
 
-#: src/peerstore/peerstore_api.c:348
-msgid "timeout"
-msgstr ""
-
-#: src/peerstore/peerstore_api.c:564 src/peerstore/peerstore_api.c:613
+#: src/peerstore/peerstore_api.c:532 src/peerstore/peerstore_api.c:581
 #, fuzzy
 msgid "Unexpected iteration response, this should not happen.\n"
 msgstr "Định dạng kết xuất không rõ, điều này không nên xảy ra.\n"
 
-#: src/peerstore/peerstore_api.c:627
+#: src/peerstore/peerstore_api.c:595
 #, fuzzy
 msgid "Received a malformed response from service."
 msgstr "Nhận yêu cầu định tuyến\n"
 
-#: src/peerstore/peerstore_api.c:776
+#: src/peerstore/peerstore_api.c:731
 msgid "Received a watch result for a non existing watch.\n"
 msgstr ""
 
-#: src/peerstore/plugin_peerstore_sqlite.c:451
-#: src/psycstore/plugin_psycstore_sqlite.c:280
+#: src/peerstore/plugin_peerstore_sqlite.c:453
 #, fuzzy, c-format
 msgid ""
 "Error executing SQL query: %s\n"
 "  %s\n"
 msgstr "Gặp lỗi khi tạo người dùng"
 
-#: src/peerstore/plugin_peerstore_sqlite.c:486
-#: src/psycstore/plugin_psycstore_mysql.c:248
-#: src/psycstore/plugin_psycstore_sqlite.c:257
+#: src/peerstore/plugin_peerstore_sqlite.c:488
 #, fuzzy, c-format
 msgid ""
 "Error preparing SQL query: %s\n"
 "  %s\n"
 msgstr "Gặp lỗi khi tạo người dùng"
 
-#: src/peerstore/plugin_peerstore_sqlite.c:568
+#: src/peerstore/plugin_peerstore_sqlite.c:570
 #, fuzzy, c-format
 msgid "Unable to create indices: %s.\n"
 msgstr "Không thể tạo miền tên.\n"
 
-#: src/pq/pq_prepare.c:82
+#: src/pq/pq_prepare.c:84
 #, fuzzy, c-format
 msgid "PQprepare (`%s' as `%s') failed with error: %s\n"
 msgstr "« %s » bị lỗi tại %s:%d với lỗi: %s\n"
 
-#: src/psycstore/gnunet-service-psycstore.c:247
-#, fuzzy
-msgid "Failed to store membership information!\n"
-msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:269
-#, fuzzy
-msgid "Failed to test membership!\n"
-msgstr "Lỗi lấy thông kê về truyền tải.\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:298
-#, fuzzy
-msgid "Dropping invalid fragment\n"
-msgstr "Đối số không hợp lệ cho « %s ».\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:309
-#, fuzzy
-msgid "Failed to store fragment\n"
-msgstr "Lỗi bắt đầu thu thập.\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:366
-#, fuzzy
-msgid "Failed to get fragment!\n"
-msgstr "Lỗi lấy thông kê về truyền tải.\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:432
-#, fuzzy
-msgid "Failed to get message!\n"
-msgstr "Lỗi lấy thông kê về truyền tải.\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:462
-#, fuzzy
-msgid "Failed to get message fragment!\n"
-msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:492
-#, fuzzy
-msgid "Failed to get master counters!\n"
-msgstr "Lỗi lấy thông kê về truyền tải.\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:673
-#, 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:683
-#, 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:691
-#, fuzzy
-msgid "Failed to end modifying state!\n"
-msgstr "Lỗi bắt đầu thu thập.\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:728
-msgid "Tried to set invalid state variable name!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:742
-#, 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:759
-#, 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:777
-#: src/psycstore/gnunet-service-psycstore.c:793
-#, 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:822
-#: src/psycstore/gnunet-service-psycstore.c:879
-msgid "Tried to get invalid state variable name!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:849
-#: src/psycstore/gnunet-service-psycstore.c:894
-#, fuzzy
-msgid "Failed to get state variable!\n"
-msgstr "Lỗi lấy thông kê về truyền tải.\n"
-
-#: src/psycstore/plugin_psycstore_mysql.c:279
-#, fuzzy
-msgid "Unable to initialize Mysql.\n"
-msgstr "Không thể sơ khởi SQLite: %s.\n"
-
-#: src/psycstore/plugin_psycstore_mysql.c:289
-#, fuzzy, c-format
-msgid "Failed to run SQL statement `%s'\n"
-msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
-
-#: src/psycstore/plugin_psycstore_sqlite.c:59
-#, fuzzy, c-format
-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:1922
-#, fuzzy
-msgid "SQLite database running\n"
-msgstr "kho dữ liệu sqlite"
-
-#: src/pt/gnunet-daemon-pt.c:421
+#: src/pt/gnunet-daemon-pt.c:423
 msgid "Failed to pack DNS request.  Dropping.\n"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:427
+#: src/pt/gnunet-daemon-pt.c:429
 #, fuzzy
 msgid "# DNS requests mapped to VPN"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/pt/gnunet-daemon-pt.c:481
+#: src/pt/gnunet-daemon-pt.c:483
 msgid "# DNS records modified"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:665
+#: src/pt/gnunet-daemon-pt.c:667
 #, fuzzy
 msgid "# DNS replies intercepted"
 msgstr "# các đáp ứng dht được định tuyến"
 
-#: src/pt/gnunet-daemon-pt.c:672
+#: src/pt/gnunet-daemon-pt.c:674
 msgid "Failed to parse DNS request.  Dropping.\n"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:710
+#: src/pt/gnunet-daemon-pt.c:712
 #, fuzzy
 msgid "# DNS requests dropped (timeout)"
 msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải"
 
-#: src/pt/gnunet-daemon-pt.c:766
+#: src/pt/gnunet-daemon-pt.c:768
 #, fuzzy
 msgid "# DNS requests intercepted"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/pt/gnunet-daemon-pt.c:771
+#: src/pt/gnunet-daemon-pt.c:773
 #, fuzzy
 msgid "# DNS requests dropped (DNS cadet channel down)"
 msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải"
 
-#: src/pt/gnunet-daemon-pt.c:779
+#: src/pt/gnunet-daemon-pt.c:781
 #, fuzzy
 msgid "# DNS requests dropped (malformed)"
 msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải"
 
-#: src/pt/gnunet-daemon-pt.c:874
+#: src/pt/gnunet-daemon-pt.c:876
 #, fuzzy
 msgid "# DNS replies received"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/pt/gnunet-daemon-pt.c:891
+#: src/pt/gnunet-daemon-pt.c:893
 #, fuzzy
 msgid "# DNS replies dropped (too late?)"
 msgstr "# các đáp ứng dht được định tuyến"
 
-#: src/pt/gnunet-daemon-pt.c:1217 src/pt/gnunet-daemon-pt.c:1226
-#: src/pt/gnunet-daemon-pt.c:1242 src/pt/gnunet-daemon-pt.c:1251
-#: src/pt/gnunet-daemon-pt.c:1260
+#: src/pt/gnunet-daemon-pt.c:1219 src/pt/gnunet-daemon-pt.c:1228
+#: src/pt/gnunet-daemon-pt.c:1244 src/pt/gnunet-daemon-pt.c:1253
+#: src/pt/gnunet-daemon-pt.c:1262
 #, fuzzy, c-format
 msgid "Failed to connect to %s service.  Exiting.\n"
 msgstr "Lỗi sơ khởi dịch vụ « %s ».\n"
 
-#: src/pt/gnunet-daemon-pt.c:1305
+#: src/pt/gnunet-daemon-pt.c:1307
 msgid "Daemon to run to perform IP protocol translation to GNUnet"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:465
+#: src/reclaim/gnunet-reclaim.c:467
 #, fuzzy, c-format
 msgid "Ego is required\n"
 msgstr "Bị từ chối đặt tùy chọn « %s » trong phần « %s » thành « %s ».\n"
 
-#: src/reclaim/gnunet-reclaim.c:473
+#: src/reclaim/gnunet-reclaim.c:475
 #, c-format
 msgid "Attribute value missing!\n"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:481
+#: src/reclaim/gnunet-reclaim.c:483
 #, fuzzy, c-format
 msgid "Requesting party key is required!\n"
 msgstr "đặt tên hiệu cần dùng (cần thiết)"
 
-#: src/reclaim/gnunet-reclaim.c:504
+#: src/reclaim/gnunet-reclaim.c:506
 msgid "Add attribute"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:510
+#: src/reclaim/gnunet-reclaim.c:512
 msgid "Attribute value"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:515
+#: src/reclaim/gnunet-reclaim.c:517
 msgid "Ego"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:520
+#: src/reclaim/gnunet-reclaim.c:522
 msgid "Audience (relying party)"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:524
+#: src/reclaim/gnunet-reclaim.c:526
 msgid "List attributes for Ego"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:529
+#: src/reclaim/gnunet-reclaim.c:531
 msgid "Issue a ticket"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:534
+#: src/reclaim/gnunet-reclaim.c:536
 msgid "Consume a ticket"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:539
+#: src/reclaim/gnunet-reclaim.c:541
 msgid "Revoke a ticket"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:544
+#: src/reclaim/gnunet-reclaim.c:546
 msgid "Type of attribute"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:549
+#: src/reclaim/gnunet-reclaim.c:551
 msgid "Expiration interval of the attribute"
 msgstr ""
 
-#: src/reclaim/reclaim_api.c:434
+#: src/reclaim/reclaim_api.c:436
 #, fuzzy
 msgid "failed to store record\n"
 msgstr "Lỗi bắt đầu thu thập.\n"
 
-#: src/regex/gnunet-daemon-regexprofiler.c:265
+#: src/regex/gnunet-daemon-regexprofiler.c:267
 #, fuzzy, c-format
 msgid "%s service is lacking key configuration settings (%s).  Exiting.\n"
 msgstr "Lưu cấu hình ngay bây giờ không?"
 
-#: src/regex/gnunet-daemon-regexprofiler.c:378
+#: src/regex/gnunet-daemon-regexprofiler.c:380
 msgid "Daemon to announce regular expressions for the peer using cadet."
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1384
+#: src/regex/gnunet-regex-profiler.c:1386
 #, fuzzy
 msgid "No configuration file given. Exiting\n"
 msgstr "dùng tập tin cấu hình TÊN_TẬP_TIN"
 
-#: src/regex/gnunet-regex-profiler.c:1425
-#: src/regex/gnunet-regex-simulation-profiler.c:628
+#: src/regex/gnunet-regex-profiler.c:1427
+#: src/regex/gnunet-regex-simulation-profiler.c:630
 #, c-format
 msgid "No policy directory specified on command line. Exiting.\n"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1431
-#: src/regex/gnunet-regex-simulation-profiler.c:636
+#: src/regex/gnunet-regex-profiler.c:1433
+#: src/regex/gnunet-regex-simulation-profiler.c:638
 #, c-format
 msgid "Specified policies directory does not exist. Exiting.\n"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1438
+#: src/regex/gnunet-regex-profiler.c:1440
 #, fuzzy, c-format
 msgid "No files found in `%s'\n"
 msgstr "Vẫn còn không tìm thấy đồng đẳng trong « %s ».\n"
 
-#: src/regex/gnunet-regex-profiler.c:1447
+#: src/regex/gnunet-regex-profiler.c:1449
 msgid "No search strings file given. Exiting.\n"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1467
+#: src/regex/gnunet-regex-profiler.c:1469
 #, fuzzy
 msgid "Error loading search strings. Exiting.\n"
 msgstr "Gặp lỗi khi tải xuống: %s\n"
 
-#: src/regex/gnunet-regex-profiler.c:1555
+#: src/regex/gnunet-regex-profiler.c:1557
 #, fuzzy
 msgid "name of the file for writing statistics"
 msgstr "Lỗi lấy thông kê về truyền tải.\n"
 
-#: src/regex/gnunet-regex-profiler.c:1561
+#: src/regex/gnunet-regex-profiler.c:1563
 msgid "wait TIMEOUT before ending the experiment"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1567
+#: src/regex/gnunet-regex-profiler.c:1569
 msgid "directory with policy files"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1574
+#: src/regex/gnunet-regex-profiler.c:1576
 #, fuzzy
 msgid "name of file with input strings"
 msgstr "Lỗi lấy thông kê về truyền tải.\n"
 
-#: src/regex/gnunet-regex-profiler.c:1580
+#: src/regex/gnunet-regex-profiler.c:1582
 #, fuzzy
 msgid "name of file with hosts' names"
 msgstr "Lỗi lấy thông kê về truyền tải.\n"
 
-#: src/regex/gnunet-regex-profiler.c:1593
+#: src/regex/gnunet-regex-profiler.c:1595
 msgid "Profiler for regex"
 msgstr ""
 
-#: src/regex/gnunet-regex-simulation-profiler.c:697
+#: src/regex/gnunet-regex-simulation-profiler.c:699
 msgid "name of the table to write DFAs"
 msgstr ""
 
-#: src/regex/gnunet-regex-simulation-profiler.c:703
+#: src/regex/gnunet-regex-simulation-profiler.c:705
 msgid "maximum path compression length"
 msgstr ""
 
-#: src/regex/gnunet-regex-simulation-profiler.c:717
+#: src/regex/gnunet-regex-simulation-profiler.c:719
 msgid "Profiler for regex library"
 msgstr ""
 
-#: src/regex/regex_api_announce.c:150
+#: src/regex/regex_api_announce.c:152
 #, fuzzy, c-format
 msgid "Regex `%s' is too long!\n"
 msgstr "« %s » không phải là một tập tin.\n"
 
-#: src/regex/regex_api_search.c:210
+#: src/regex/regex_api_search.c:212
 #, fuzzy, c-format
 msgid "Search string `%s' is too long!\n"
 msgstr "« %s » không phải là một tập tin.\n"
 
-#: src/rest/gnunet-rest-server.c:925
+#: src/rest/gnunet-rest-server.c:927
 msgid "listen on specified port (default: 7776)"
 msgstr ""
 
-#: src/rest/gnunet-rest-server.c:942
+#: src/rest/gnunet-rest-server.c:944
 #, fuzzy
 msgid "GNUnet REST server"
 msgstr "Bản ghi lỗi GNUnet"
 
-#: src/rest-plugins/plugin_rest_copying.c:207
+#: src/rest-plugins/plugin_rest_copying.c:209
 #, fuzzy
 msgid "COPYING REST API initialized\n"
 msgstr "Lỗi sơ khởi lõi.\n"
 
-#: src/rest-plugins/plugin_rest_credential.c:1126
+#: src/rest-plugins/plugin_rest_credential.c:1128
 #, fuzzy
 msgid "GNS REST API initialized\n"
 msgstr "Lỗi sơ khởi lõi.\n"
 
-#: src/rest-plugins/plugin_rest_gns.c:450
+#: src/rest-plugins/plugin_rest_gns.c:452
 #, fuzzy
 msgid "Gns REST API initialized\n"
 msgstr "Lỗi sơ khởi lõi.\n"
 
-#: src/rest-plugins/plugin_rest_identity.c:1295
+#: src/rest-plugins/plugin_rest_identity.c:1297
 #, fuzzy
 msgid "Identity REST API initialized\n"
 msgstr "Lỗi sơ khởi lõi.\n"
 
-#: src/rest-plugins/plugin_rest_namestore.c:1077
+#: src/rest-plugins/plugin_rest_namestore.c:1079
 #, fuzzy
 msgid "Namestore REST API initialized\n"
 msgstr "Lỗi sơ khởi lõi.\n"
 
-#: src/rest-plugins/plugin_rest_openid_connect.c:2135
+#: src/rest-plugins/plugin_rest_openid_connect.c:2245
 #: src/rest-plugins/plugin_rest_reclaim.c:1079
 #, fuzzy
 msgid "Identity Provider REST API initialized\n"
 msgstr "Lỗi sơ khởi lõi.\n"
 
-#: src/rest-plugins/plugin_rest_peerinfo.c:794
+#: src/rest-plugins/plugin_rest_peerinfo.c:796
 #, fuzzy
 msgid "Peerinfo REST API initialized\n"
 msgstr "Lỗi sơ khởi lõi.\n"
 
-#: src/revocation/gnunet-revocation.c:127
+#: src/revocation/gnunet-revocation.c:129
 #, fuzzy, c-format
 msgid "Key `%s' is valid\n"
 msgstr "Định dạng của biệt hiệu « %s » là không hợp lệ.\n"
 
-#: src/revocation/gnunet-revocation.c:132
+#: src/revocation/gnunet-revocation.c:134
 #, fuzzy, c-format
 msgid "Key `%s' has been revoked\n"
 msgstr "Dịch vụ đã bị xoá.\n"
 
-#: src/revocation/gnunet-revocation.c:138
+#: src/revocation/gnunet-revocation.c:140
 #, fuzzy
 msgid "Internal error\n"
 msgstr "Lỗi VR."
 
-#: src/revocation/gnunet-revocation.c:164
+#: src/revocation/gnunet-revocation.c:166
 #, c-format
 msgid "Key for ego `%s' is still valid, revocation failed (!)\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:169
+#: src/revocation/gnunet-revocation.c:171
 #, fuzzy
 msgid "Revocation failed (!)\n"
 msgstr "Lỗi nội bộ : khẳng định không thành công tại %s:%d.\n"
 
-#: src/revocation/gnunet-revocation.c:174
+#: src/revocation/gnunet-revocation.c:176
 #, c-format
 msgid "Key for ego `%s' has been successfully revoked\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:179
+#: src/revocation/gnunet-revocation.c:181
 msgid "Revocation successful.\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:184
+#: src/revocation/gnunet-revocation.c:186
 msgid "Internal error, key revocation might have failed\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:321
+#: src/revocation/gnunet-revocation.c:323
 #, c-format
 msgid "Revocation certificate for `%s' stored in `%s'\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:350
+#: src/revocation/gnunet-revocation.c:352
 #, fuzzy, c-format
 msgid "Ego `%s' not found.\n"
 msgstr "Khoá phiên chạy từ đồng đẳng « %s » không thể được thẩm tra.\n"
 
-#: src/revocation/gnunet-revocation.c:371
+#: src/revocation/gnunet-revocation.c:373
 #, c-format
 msgid "Error: revocation certificate in `%s' is not for `%s'\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:391
+#: src/revocation/gnunet-revocation.c:393
 msgid "Revocation certificate ready\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:401
+#: src/revocation/gnunet-revocation.c:403
 msgid "Revocation certificate not ready, calculating proof of work\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:435 src/social/gnunet-social.c:1178
+#: src/revocation/gnunet-revocation.c:437
 #, fuzzy, c-format
 msgid "Public key `%s' malformed\n"
 msgstr "Đối số không hợp lệ cho « %s ».\n"
 
-#: src/revocation/gnunet-revocation.c:448
+#: src/revocation/gnunet-revocation.c:450
 msgid ""
 "Testing and revoking at the same time is not allowed, only executing test.\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:468
+#: src/revocation/gnunet-revocation.c:470
 #, fuzzy
 msgid "No filename to store revocation certificate given.\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/revocation/gnunet-revocation.c:489
+#: src/revocation/gnunet-revocation.c:491
 #, fuzzy, c-format
 msgid "Failed to read revocation certificate from `%s'\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/revocation/gnunet-revocation.c:514
+#: src/revocation/gnunet-revocation.c:516
 #, fuzzy
 msgid "No action specified. Nothing to do.\n"
 msgstr "Chưa xác định giao diện nên dùng mặc định.\n"
 
-#: src/revocation/gnunet-revocation.c:533
+#: src/revocation/gnunet-revocation.c:535
 msgid "use NAME for the name of the revocation file"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:539
+#: src/revocation/gnunet-revocation.c:541
 msgid ""
 "revoke the private key associated for the the private key associated with "
 "the ego NAME "
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:544
+#: src/revocation/gnunet-revocation.c:546
 msgid "actually perform revocation, otherwise we just do the precomputation"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:550
+#: src/revocation/gnunet-revocation.c:552
 msgid "test if the public key KEY has been revoked"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:457
+#: src/revocation/gnunet-service-revocation.c:459
 #, 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:466
+#: src/revocation/gnunet-service-revocation.c:468
 #, 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:471
+#: src/revocation/gnunet-service-revocation.c:473
 #, c-format
 msgid "Error computing revocation set union with %s\n"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:475
+#: src/revocation/gnunet-service-revocation.c:477
 #, 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:484
+#: src/revocation/gnunet-service-revocation.c:486
 #, fuzzy
 msgid "# revocation set unions completed"
 msgstr "# các sự truyền PONG bị lỗi"
 
-#: src/revocation/gnunet-service-revocation.c:523
+#: src/revocation/gnunet-service-revocation.c:525
 msgid "SET service crashed, terminating revocation service\n"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:865
+#: src/revocation/gnunet-service-revocation.c:867
 #, fuzzy
 msgid "Could not open revocation database file!"
 msgstr "« %s »: Không thể kết nối.\n"
 
-#: src/rps/gnunet-rps.c:258
+#: src/rps/gnunet-rps.c:260
 msgid "Seed a PeerID"
 msgstr ""
 
-#: src/rps/gnunet-rps.c:262
+#: src/rps/gnunet-rps.c:264
 msgid "Get updates of view (0 for infinite updates)"
 msgstr ""
 
-#: src/rps/gnunet-rps.c:266
+#: src/rps/gnunet-rps.c:268
 msgid "Get peers from biased stream"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2770
+#: src/rps/gnunet-rps-profiler.c:2959
 msgid "duration of the profiling"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2776
+#: src/rps/gnunet-rps-profiler.c:2965
 #, fuzzy
 msgid "timeout for the profiling"
 msgstr "xác định mức ưu tiên của nội dung"
 
-#: src/rps/gnunet-rps-profiler.c:2782
+#: src/rps/gnunet-rps-profiler.c:2971
 #, fuzzy
 msgid "number of PeerIDs to request"
 msgstr "số lần lặp lại"
 
-#: src/rps/gnunet-rps-profiler.c:2797
+#: src/rps/gnunet-rps-profiler.c:2986
 #, fuzzy
 msgid "Measure quality and performance of the RPS service."
 msgstr "Không thể truy cập đến dịch vụ"
 
-#: src/scalarproduct/gnunet-scalarproduct.c:218
+#: src/scalarproduct/gnunet-scalarproduct.c:220
 #, fuzzy
 msgid "You must specify at least one message ID to check!\n"
 msgstr "Phải ghi rõ chỉ một tên tập tin để chèn.\n"
 
-#: src/scalarproduct/gnunet-scalarproduct.c:225
+#: src/scalarproduct/gnunet-scalarproduct.c:227
 msgid "This program needs a session identifier for comparing vectors.\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:238
+#: src/scalarproduct/gnunet-scalarproduct.c:240
 #, c-format
 msgid ""
 "Tried to set initiator mode, as peer ID was given. However, `%s' is not a "
 "valid peer identifier.\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:256
+#: src/scalarproduct/gnunet-scalarproduct.c:258
 msgid "Need elements to compute the scalarproduct, got none.\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:278
+#: src/scalarproduct/gnunet-scalarproduct.c:280
 #, fuzzy, c-format
 msgid "Malformed input, could not parse `%s'\n"
 msgstr "Lỗi bắt đầu thu thập.\n"
 
-#: src/scalarproduct/gnunet-scalarproduct.c:296
+#: src/scalarproduct/gnunet-scalarproduct.c:298
 #, fuzzy, c-format
 msgid "Could not convert `%s' to int64_t.\n"
 msgstr "Không thể kết nối tới %s:%u: %s\n"
 
-#: src/scalarproduct/gnunet-scalarproduct.c:323
+#: src/scalarproduct/gnunet-scalarproduct.c:325
 #, c-format
 msgid "Failed to initiate computation, were all keys unique?\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:349
-#: src/scalarproduct/gnunet-scalarproduct.c:355
+#: src/scalarproduct/gnunet-scalarproduct.c:351
+#: src/scalarproduct/gnunet-scalarproduct.c:357
 msgid ""
 "A comma separated list of elements to compare as vector with our remote peer."
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:361
+#: src/scalarproduct/gnunet-scalarproduct.c:363
 msgid ""
 "[Optional] peer to calculate our scalarproduct with. If this parameter is "
 "not given, the service will wait for a remote peer to compute the request."
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:367
+#: src/scalarproduct/gnunet-scalarproduct.c:369
 msgid "Transaction ID shared with peer."
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:377
+#: src/scalarproduct/gnunet-scalarproduct.c:379
 msgid "Calculate the Vectorproduct with a GNUnet peer."
 msgstr ""
 
-#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1399
-#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1343
-#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1170
-#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1061
+#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1401
+#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1345
+#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1172
+#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1063
 #, fuzzy
 msgid "Connect to CADET failed\n"
 msgstr " Không kết nối được (lỗi ?)\n"
 
-#: src/scalarproduct/scalarproduct_api.c:183
+#: src/scalarproduct/scalarproduct_api.c:185
 msgid "Keys given to SCALARPRODUCT not unique!\n"
 msgstr ""
 
-#: src/secretsharing/gnunet-secretsharing-profiler.c:614
+#: src/secretsharing/gnunet-secretsharing-profiler.c:616
 msgid "dkg start delay"
 msgstr ""
 
-#: src/secretsharing/gnunet-secretsharing-profiler.c:620
+#: src/secretsharing/gnunet-secretsharing-profiler.c:622
 msgid "dkg timeout"
 msgstr ""
 
-#: src/secretsharing/gnunet-secretsharing-profiler.c:626
+#: src/secretsharing/gnunet-secretsharing-profiler.c:628
 msgid "threshold"
 msgstr ""
 
-#: src/secretsharing/gnunet-secretsharing-profiler.c:631
+#: src/secretsharing/gnunet-secretsharing-profiler.c:633
 msgid "also profile decryption"
 msgstr ""
 
-#: src/set/gnunet-service-set.c:2004
+#: src/set/gnunet-service-set.c:2005
 #, fuzzy
 msgid "Could not connect to CADET service\n"
 msgstr "Không thể kết nối tới %s:%u: %s\n"
 
-#: src/set/gnunet-set-ibf-profiler.c:250
+#: src/set/gnunet-set-ibf-profiler.c:252
 #, fuzzy
 msgid "number of element in set A-B"
 msgstr "số lần lặp lại"
 
-#: src/set/gnunet-set-ibf-profiler.c:256
+#: src/set/gnunet-set-ibf-profiler.c:258
 #, fuzzy
 msgid "number of element in set B-A"
 msgstr "số lần lặp lại"
 
-#: src/set/gnunet-set-ibf-profiler.c:262
+#: src/set/gnunet-set-ibf-profiler.c:264
 msgid "number of common elements in A and B"
 msgstr ""
 
-#: src/set/gnunet-set-ibf-profiler.c:268
+#: src/set/gnunet-set-ibf-profiler.c:270
 msgid "hash num"
 msgstr ""
 
-#: src/set/gnunet-set-ibf-profiler.c:274
+#: src/set/gnunet-set-ibf-profiler.c:276
 msgid "ibf size"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:442
+#: src/set/gnunet-set-profiler.c:444
 msgid "use byzantine mode"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:448
+#: src/set/gnunet-set-profiler.c:450
 msgid "force sending full set"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:454
+#: src/set/gnunet-set-profiler.c:456
 msgid "number delta operation"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:466
+#: src/set/gnunet-set-profiler.c:468
 msgid "operation to execute"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:472
+#: src/set/gnunet-set-profiler.c:474
 msgid "element size"
 msgstr ""
 
-#: src/social/gnunet-social.c:1164
-#, fuzzy
-msgid "--place missing or invalid.\n"
-msgstr "Đối số không hợp lệ cho « %s ».\n"
-
-#: src/social/gnunet-social.c:1215
-msgid "assign --name in state to --data"
-msgstr ""
-
-#: src/social/gnunet-social.c:1220
-msgid "say good-bye and leave somebody else's place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1225
-msgid "create a place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1230
-msgid "destroy a place we were hosting"
-msgstr ""
-
-#: src/social/gnunet-social.c:1235
-msgid "enter somebody else's place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1241
-msgid "find state matching name prefix"
-msgstr ""
-
-#: src/social/gnunet-social.c:1246
-msgid "replay history of messages up to the given --limit"
-msgstr ""
-
-#: src/social/gnunet-social.c:1251
-msgid "reconnect to a previously created place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1256
-msgid "publish something to a place we are hosting"
-msgstr ""
-
-#: src/social/gnunet-social.c:1261
-msgid "reconnect to a previously entered place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1266
-msgid "search for state matching exact name"
-msgstr ""
-
-#: src/social/gnunet-social.c:1271
-msgid "submit something to somebody's place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1276
-msgid "list of egos and subscribed places"
-msgstr ""
-
-#: src/social/gnunet-social.c:1281
-msgid "extract and replay history between message IDs --start and --until"
-msgstr ""
-
-#: src/social/gnunet-social.c:1290
-msgid "application ID to use when connecting"
-msgstr ""
-
-#: src/social/gnunet-social.c:1296
-msgid "message body or state value"
-msgstr ""
-
-#: src/social/gnunet-social.c:1302
-#, fuzzy
-msgid "name or public key of ego"
-msgstr "Đối số không hợp lệ cho « %s ».\n"
-
-#: src/social/gnunet-social.c:1307
-#, fuzzy
-msgid "wait for incoming messages"
-msgstr "Lỗi gửi tin nhẳn.\n"
-
-#: src/social/gnunet-social.c:1313
-msgid "GNS name"
-msgstr ""
-
-#: src/social/gnunet-social.c:1319
-msgid "peer ID for --guest-enter"
-msgstr ""
-
-#: src/social/gnunet-social.c:1325
-msgid "name (key) to query from state"
-msgstr ""
-
-#: src/social/gnunet-social.c:1331
-msgid "method name"
-msgstr ""
-
-#: src/social/gnunet-social.c:1337
-#, fuzzy
-msgid "number of messages to replay from history"
-msgstr "số tin nhắn cần dùng mỗi lần lặp"
-
-#: src/social/gnunet-social.c:1343
-msgid "key address of place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1349
-msgid "start message ID for history replay"
-msgstr ""
-
-#: src/social/gnunet-social.c:1354
-msgid "respond to entry requests by admitting all guests"
-msgstr ""
-
-#: src/social/gnunet-social.c:1360
-msgid "end message ID for history replay"
-msgstr ""
-
-#: src/social/gnunet-social.c:1365
-msgid "respond to entry requests by refusing all guests"
-msgstr ""
-
-#: src/social/gnunet-social.c:1375
-msgid ""
-"gnunet-social - Interact with the social service: enter/leave, send/receive "
-"messages, access history and state.\n"
-msgstr ""
-
-#: src/sq/sq.c:52
+#: src/sq/sq.c:54
 #, c-format
 msgid "Failure to bind %u-th SQL parameter\n"
 msgstr ""
 
-#: src/sq/sq.c:59
+#: src/sq/sq.c:61
 msgid "Failure in sqlite3_reset (!)\n"
 msgstr ""
 
-#: src/sq/sq.c:137
+#: src/sq/sq.c:139
 #, fuzzy, c-format
 msgid "Failed to reset sqlite statement with error: %s\n"
 msgstr "« %s » không giải quyết được phương pháp « %s », với lỗi: %s\n"
 
-#: src/statistics/gnunet-service-statistics.c:336
+#: src/statistics/gnunet-service-statistics.c:338
 #, fuzzy, c-format
 msgid "Wrote %llu bytes of statistics to `%s'\n"
 msgstr "Đã tải %llu byte xuống « %s ».\n"
 
-#: src/statistics/gnunet-service-statistics.c:1084
+#: src/statistics/gnunet-service-statistics.c:1086
 #, fuzzy, c-format
 msgid "Loading %llu bytes of statistics from `%s'\n"
 msgstr "Đã tải %llu byte xuống « %s ».\n"
 
-#: src/statistics/gnunet-statistics.c:407
-#: src/statistics/gnunet-statistics.c:448
+#: src/statistics/gnunet-statistics.c:409
+#: src/statistics/gnunet-statistics.c:450
 #, fuzzy
 msgid "Failed to obtain statistics.\n"
 msgstr "Lỗi lấy thông kê về truyền tải.\n"
 
-#: src/statistics/gnunet-statistics.c:410
-#: src/statistics/gnunet-statistics.c:451
+#: src/statistics/gnunet-statistics.c:412
+#: src/statistics/gnunet-statistics.c:453
 #, fuzzy, c-format
 msgid "Failed to obtain statistics from host `%s:%llu'\n"
 msgstr "Lỗi lấy thông kê về truyền tải.\n"
 
-#: src/statistics/gnunet-statistics.c:526
+#: src/statistics/gnunet-statistics.c:528
 msgid "Missing argument: subsystem \n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:534
+#: src/statistics/gnunet-statistics.c:536
 msgid "Missing argument: name\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:577
+#: src/statistics/gnunet-statistics.c:579
 #, fuzzy, c-format
 msgid "No subsystem or name given\n"
 msgstr "chưa đưa ra tên"
 
-#: src/statistics/gnunet-statistics.c:592
+#: src/statistics/gnunet-statistics.c:594
 #, fuzzy, c-format
 msgid "Failed to initialize watch routine\n"
 msgstr "Lỗi sơ khởi dịch vụ « %s ».\n"
 
-#: src/statistics/gnunet-statistics.c:727
+#: src/statistics/gnunet-statistics.c:729
 #, fuzzy, c-format
 msgid "Invalid argument `%s'\n"
 msgstr "Đối số không hợp lệ cho « %s ».\n"
 
-#: src/statistics/gnunet-statistics.c:745
+#: src/statistics/gnunet-statistics.c:747
 #, fuzzy, c-format
 msgid "A port is required to connect to host `%s'\n"
 msgstr "Không thể kết nối tới %s:%u: %s\n"
 
-#: src/statistics/gnunet-statistics.c:753
+#: src/statistics/gnunet-statistics.c:755
 #, c-format
 msgid "A port has to be between 1 and 65535 to connect to host `%s'\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:784
+#: src/statistics/gnunet-statistics.c:786
 #, c-format
 msgid "Not able to watch testbed nodes (yet - feel free to implement)\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:817
+#: src/statistics/gnunet-statistics.c:819
 msgid "limit output to statistics for the given NAME"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:822
+#: src/statistics/gnunet-statistics.c:824
 msgid "make the value being set persistent"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:828
+#: src/statistics/gnunet-statistics.c:830
 msgid "limit output to the given SUBSYSTEM"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:834
+#: src/statistics/gnunet-statistics.c:836
 msgid "use as csv separator"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:840
+#: src/statistics/gnunet-statistics.c:842
 msgid "path to the folder containing the testbed data"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:845
+#: src/statistics/gnunet-statistics.c:847
 msgid "just print the statistics value"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:850
+#: src/statistics/gnunet-statistics.c:852
 msgid "watch value continuously"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:856
+#: src/statistics/gnunet-statistics.c:858
 msgid "connect to remote host"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:862
+#: src/statistics/gnunet-statistics.c:864
 msgid "port for remote host"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:879
+#: src/statistics/gnunet-statistics.c:881
 msgid "Print statistics about GNUnet operations."
 msgstr "In ra thống kê về các thao tác GNUnet."
 
-#: src/statistics/statistics_api.c:751
+#: src/statistics/statistics_api.c:753
 #, fuzzy
 msgid "Could not save some persistent statistics\n"
 msgstr "Không thể tạo miền tên.\n"
 
-#: src/testbed/generate-underlay-topology.c:223
+#: src/testbed/generate-underlay-topology.c:225
 #, fuzzy
 msgid "Need at least 2 arguments\n"
 msgstr "KHÔNG cho phép ghi rõ cả hai địa chỉ URI và tên tập tin.\n"
 
-#: src/testbed/generate-underlay-topology.c:228
+#: src/testbed/generate-underlay-topology.c:230
 msgid "Database filename missing\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:235
+#: src/testbed/generate-underlay-topology.c:237
 msgid "Topology string missing\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:240
+#: src/testbed/generate-underlay-topology.c:242
 #, fuzzy, c-format
 msgid "Invalid topology: %s\n"
 msgstr "Đối số không hợp lệ cho « %s ».\n"
 
-#: src/testbed/generate-underlay-topology.c:253
+#: src/testbed/generate-underlay-topology.c:255
 #, c-format
 msgid "An argument is missing for given topology `%s'\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:259
+#: src/testbed/generate-underlay-topology.c:261
 #, fuzzy, c-format
 msgid "Invalid argument `%s' given as topology argument\n"
 msgstr "Đối số không hợp lệ cho « %s ».\n"
 
-#: src/testbed/generate-underlay-topology.c:267
+#: src/testbed/generate-underlay-topology.c:269
 #, c-format
 msgid "Filename argument missing for topology `%s'\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:281
+#: src/testbed/generate-underlay-topology.c:283
 #, c-format
 msgid "Second argument for topology `%s' is missing\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:287
+#: src/testbed/generate-underlay-topology.c:289
 #, fuzzy, c-format
 msgid "Invalid argument `%s'; expecting unsigned int\n"
 msgstr "Đối số không hợp lệ cho « %s ».\n"
 
-#: src/testbed/generate-underlay-topology.c:340
-#: src/testbed/gnunet-testbed-profiler.c:281
+#: src/testbed/generate-underlay-topology.c:342
+#: src/testbed/gnunet-testbed-profiler.c:283
 msgid "create COUNT number of peers"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:350
+#: src/testbed/generate-underlay-topology.c:352
 msgid ""
 "Generates SQLite3 database representing a given underlay topology.\n"
 "Usage: gnunet-underlay-topology [OPTIONS] db-filename TOPO [TOPOOPTS]\n"
@@ -6820,83 +6614,83 @@ msgid ""
 "content/topology-file-format\n"
 msgstr ""
 
-#: src/testbed/gnunet-daemon-latency-logger.c:313
+#: src/testbed/gnunet-daemon-latency-logger.c:315
 msgid "Daemon to log latency values of connections to neighbours"
 msgstr ""
 
-#: src/testbed/gnunet-daemon-testbed-blacklist.c:247
+#: src/testbed/gnunet-daemon-testbed-blacklist.c:249
 msgid ""
 "Daemon to restrict incoming transport layer connections during testbed "
 "deployments"
 msgstr ""
 
-#: src/testbed/gnunet-daemon-testbed-underlay.c:231 src/testing/list-keys.c:46
-#: src/testing/testing.c:286 src/util/gnunet-ecc.c:310
+#: src/testbed/gnunet-daemon-testbed-underlay.c:233 src/testing/list-keys.c:46
+#: src/testing/testing.c:288 src/util/gnunet-ecc.c:312
 #, c-format
 msgid "Incorrect hostkey file format: %s\n"
 msgstr ""
 
-#: src/testbed/gnunet-daemon-testbed-underlay.c:469
+#: src/testbed/gnunet-daemon-testbed-underlay.c:471
 msgid "Daemon to restrict underlay network in testbed deployments"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_cpustatus.c:726
+#: src/testbed/gnunet-service-testbed_cpustatus.c:728
 #, c-format
 msgid ""
 "Cannot open %s for writing load statistics.  Not logging load statistics\n"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1157
+#: src/testbed/gnunet-service-testbed_peers.c:1159
 #, fuzzy, c-format
 msgid "%s is stopped"
 msgstr "# các byte trong kho dữ liệu"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1159
+#: src/testbed/gnunet-service-testbed_peers.c:1161
 #, c-format
 msgid "%s is starting"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1161
+#: src/testbed/gnunet-service-testbed_peers.c:1163
 #, c-format
 msgid "%s is stopping"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1163
+#: src/testbed/gnunet-service-testbed_peers.c:1165
 #, fuzzy, c-format
 msgid "%s is starting already"
 msgstr "« %s » đang đăng ký trình điều khiển %d\n"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1165
+#: src/testbed/gnunet-service-testbed_peers.c:1167
 #, c-format
 msgid "%s is stopping already"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1167
+#: src/testbed/gnunet-service-testbed_peers.c:1169
 #, c-format
 msgid "%s is started already"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1169
+#: src/testbed/gnunet-service-testbed_peers.c:1171
 #, c-format
 msgid "%s is stopped already"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1171
+#: src/testbed/gnunet-service-testbed_peers.c:1173
 #, fuzzy, c-format
 msgid "%s service is not known to ARM"
 msgstr "Không gian tên « %s » có đánh giá %d.\n"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1173
+#: src/testbed/gnunet-service-testbed_peers.c:1175
 #, fuzzy, c-format
 msgid "%s service failed to start"
 msgstr "Lỗi bắt đầu thu thập.\n"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1175
+#: src/testbed/gnunet-service-testbed_peers.c:1177
 #, fuzzy, c-format
 msgid "%s service can't be started because ARM is shutting down"
 msgstr "« %s » đang tắt.\n"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1177
+#: src/testbed/gnunet-service-testbed_peers.c:1179
 #, c-format
 msgid "%.s Unknown result code."
 msgstr ""
@@ -6911,176 +6705,176 @@ msgstr "Đang đợi các đồng đẳng kết nối"
 msgid "Spawning process `%s'\n"
 msgstr "Đang bắt đầu tài về « %s »\n"
 
-#: src/testbed/gnunet-testbed-profiler.c:287
+#: src/testbed/gnunet-testbed-profiler.c:289
 msgid "tolerate COUNT number of continious timeout failures"
 msgstr ""
 
-#: src/testbed/gnunet-testbed-profiler.c:292
+#: src/testbed/gnunet-testbed-profiler.c:294
 msgid ""
 "run profiler in non-interactive mode where upon testbed setup the profiler "
 "does not wait for a keystroke but continues to run until a termination "
 "signal is received"
 msgstr ""
 
-#: src/testbed/testbed_api.c:408
+#: src/testbed/testbed_api.c:410
 #, fuzzy, c-format
 msgid "Adding host %u failed with error: %s\n"
 msgstr "« %s » thất bại với mã lỗi %d: %s\n"
 
-#: src/testbed/testbed_api_hosts.c:411
+#: src/testbed/testbed_api_hosts.c:413
 #, fuzzy, c-format
 msgid "Hosts file %s not found\n"
 msgstr "Khoá phiên chạy từ đồng đẳng « %s » không thể được thẩm tra.\n"
 
-#: src/testbed/testbed_api_hosts.c:419
+#: src/testbed/testbed_api_hosts.c:421
 #, fuzzy, c-format
 msgid "Hosts file %s has no data\n"
 msgstr "Khoá phiên chạy từ đồng đẳng « %s » không thể được thẩm tra.\n"
 
-#: src/testbed/testbed_api_hosts.c:426
+#: src/testbed/testbed_api_hosts.c:428
 #, fuzzy, c-format
 msgid "Hosts file %s cannot be read\n"
 msgstr "Khoá phiên chạy từ đồng đẳng « %s » không thể được thẩm tra.\n"
 
-#: src/testbed/testbed_api_hosts.c:567
+#: src/testbed/testbed_api_hosts.c:569
 #, c-format
 msgid "The function %s is only available when compiled with (--with-ll)\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:816
+#: src/testbed/testbed_api_testbed.c:818
 msgid "Linking controllers failed. Exiting"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:984
+#: src/testbed/testbed_api_testbed.c:986
 #, c-format
 msgid "Host registration failed for a host. Error: %s\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1050
+#: src/testbed/testbed_api_testbed.c:1052
 msgid "Controller crash detected. Shutting down.\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1139
+#: src/testbed/testbed_api_testbed.c:1141
 #, c-format
 msgid "Host %s cannot start testbed\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1143
+#: src/testbed/testbed_api_testbed.c:1145
 msgid "Testbed cannot be started on localhost\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1181
+#: src/testbed/testbed_api_testbed.c:1183
 msgid "Cannot start the master controller"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1199
+#: src/testbed/testbed_api_testbed.c:1201
 msgid "Shutting down testbed due to timeout while setup.\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1259
+#: src/testbed/testbed_api_testbed.c:1261
 msgid "No hosts loaded from LoadLeveler. Need at least one host\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1271
+#: src/testbed/testbed_api_testbed.c:1273
 msgid "No hosts loaded. Need at least one host\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1295
+#: src/testbed/testbed_api_testbed.c:1297
 msgid "Specified topology must be supported by testbed"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1345
+#: src/testbed/testbed_api_testbed.c:1347
 #, c-format
 msgid ""
 "Maximum number of edges a peer can have in a scale free topology cannot be "
 "more than %u.  Given `%s = %llu'"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1361
+#: src/testbed/testbed_api_testbed.c:1363
 #, c-format
 msgid ""
 "The number of edges that can established when adding a new node to scale "
 "free topology cannot be more than %u.  Given `%s = %llu'"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1026
+#: src/testbed/testbed_api_topology.c:1028
 #, fuzzy, c-format
 msgid "Topology file %s not found\n"
 msgstr "Khoá phiên chạy từ đồng đẳng « %s » không thể được thẩm tra.\n"
 
-#: src/testbed/testbed_api_topology.c:1034
+#: src/testbed/testbed_api_topology.c:1036
 #, fuzzy, c-format
 msgid "Topology file %s has no data\n"
 msgstr "Khoá phiên chạy từ đồng đẳng « %s » không thể được thẩm tra.\n"
 
-#: src/testbed/testbed_api_topology.c:1042
+#: src/testbed/testbed_api_topology.c:1044
 #, fuzzy, c-format
 msgid "Topology file %s cannot be read\n"
 msgstr "Khoá phiên chạy từ đồng đẳng « %s » không thể được thẩm tra.\n"
 
-#: src/testbed/testbed_api_topology.c:1064
+#: src/testbed/testbed_api_topology.c:1066
 #, fuzzy, c-format
 msgid "Failed to read peer index from toology file: %s"
 msgstr "Không thể truy cập đến tập tin gnunet-directory « %s »\n"
 
-#: src/testbed/testbed_api_topology.c:1073
-#: src/testbed/testbed_api_topology.c:1097
+#: src/testbed/testbed_api_topology.c:1075
+#: src/testbed/testbed_api_topology.c:1099
 #, c-format
 msgid "Value in given topology file: %s out of range\n"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1079
-#: src/testbed/testbed_api_topology.c:1103
+#: src/testbed/testbed_api_topology.c:1081
+#: src/testbed/testbed_api_topology.c:1105
 #, fuzzy, c-format
 msgid "Failed to read peer index from topology file: %s"
 msgstr "Không thể truy cập đến tập tin gnunet-directory « %s »\n"
 
-#: src/testbed/testbed_api_topology.c:1085
-#: src/testbed/testbed_api_topology.c:1109
+#: src/testbed/testbed_api_topology.c:1087
+#: src/testbed/testbed_api_topology.c:1111
 msgid "Topology file needs more peers than given ones\n"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1143
+#: src/testbed/testbed_api_topology.c:1145
 #, fuzzy, c-format
 msgid "Ignoring to connect peer %u to peer %u\n"
 msgstr "đang kết nối đồng đẳng %s:%d tới đồng đẳng %s:%d\n"
 
-#: src/testing/gnunet-testing.c:171
+#: src/testing/gnunet-testing.c:173
 #, fuzzy, c-format
 msgid "Could not extract hostkey %u (offset too large?)\n"
 msgstr "Không thể đọc danh sách bạn bè « %s »\n"
 
-#: src/testing/gnunet-testing.c:251
+#: src/testing/gnunet-testing.c:253
 #, c-format
 msgid "Unknown command, use 'q' to quit or 'r' to restart peer\n"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:352
+#: src/testing/gnunet-testing.c:354
 #, fuzzy
 msgid "create unique configuration files"
 msgstr "cập nhật một giá trị trong tập tin cấu hình"
 
-#: src/testing/gnunet-testing.c:357
+#: src/testing/gnunet-testing.c:359
 msgid "extract hostkey file from pre-computed hostkey list"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:363
+#: src/testing/gnunet-testing.c:365
 #, fuzzy
 msgid ""
 "number of unique configuration files to create, or number of the hostkey to "
 "extract"
 msgstr "in ra đầu ra tiêu chuẩn một giá trị từ tập tin cấu hình"
 
-#: src/testing/gnunet-testing.c:370
+#: src/testing/gnunet-testing.c:372
 #, fuzzy
 msgid "configuration template"
 msgstr "Cấu hình đã được lưu."
 
-#: src/testing/gnunet-testing.c:376
+#: src/testing/gnunet-testing.c:378
 msgid "run the given service, wait on stdin for 'r' (restart) or 'q' (quit)"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:389
+#: src/testing/gnunet-testing.c:391
 msgid "Command line tool to access the testing library"
 msgstr ""
 
@@ -7088,1465 +6882,1489 @@ msgstr ""
 msgid "list COUNT number of keys"
 msgstr ""
 
-#: src/testing/testing.c:270
+#: src/testing/testing.c:272
 #, c-format
 msgid "Hostkeys file not found: %s\n"
 msgstr ""
 
-#: src/testing/testing.c:713
+#: src/testing/testing.c:715
 #, fuzzy, c-format
 msgid "Key number %u does not exist\n"
 msgstr "đặt số trình nền cần khởi chạy"
 
-#: src/testing/testing.c:1157
+#: src/testing/testing.c:1159
 #, c-format
 msgid ""
 "You attempted to create a testbed with more than %u hosts.  Please "
 "precompute more hostkeys first.\n"
 msgstr ""
 
-#: src/testing/testing.c:1166
+#: src/testing/testing.c:1168
 #, fuzzy, c-format
 msgid "Failed to initialize hostkey for peer %u\n"
 msgstr "Lỗi sơ khởi dịch vụ « %s ».\n"
 
-#: src/testing/testing.c:1176
+#: src/testing/testing.c:1178
 msgid "PRIVATE_KEY option in PEER section missing in configuration\n"
 msgstr ""
 
-#: src/testing/testing.c:1189
+#: src/testing/testing.c:1191
 #, fuzzy
 msgid "Failed to create configuration for peer (not enough free ports?)\n"
 msgstr "Không thể truy cập đến thông tin về không gian tên.\n"
 
-#: src/testing/testing.c:1203
+#: src/testing/testing.c:1205
 #, fuzzy, c-format
 msgid "Cannot open hostkey file `%s': %s\n"
 msgstr "Không thể đọc danh sách bạn bè « %s »\n"
 
-#: src/testing/testing.c:1215
+#: src/testing/testing.c:1217
 #, fuzzy, c-format
 msgid "Failed to write hostkey file for peer %u: %s\n"
 msgstr "Lỗi tạo thư mục tạm thời."
 
-#: src/testing/testing.c:1240
+#: src/testing/testing.c:1242
 #, fuzzy, c-format
 msgid "Failed to write configuration file `%s' for peer %u: %s\n"
 msgstr "Không thể lưu tập tin cấu hình « %s »:"
 
-#: src/testing/testing.c:1342
+#: src/testing/testing.c:1344
 #, fuzzy, c-format
 msgid "Failed to start `%s': %s\n"
 msgstr "Lỗi chạy %s: %s %d\n"
 
-#: src/testing/testing.c:1645
+#: src/testing/testing.c:1647
 #, fuzzy, c-format
 msgid "Failed to load configuration from %s\n"
 msgstr "Không thể lưu tập tin cấu hình « %s »:"
 
-#: src/topology/friends.c:124
+#: src/topology/friends.c:126
 #, fuzzy, c-format
 msgid "Syntax error in FRIENDS file at offset %llu, skipping bytes `%.*s'.\n"
 msgstr ""
 "Lỗi cú pháp trong sự xác định địa hình học, đang bỏ qua các byte « %s ».\n"
 
-#: src/topology/friends.c:178
+#: src/topology/friends.c:180
 #, c-format
 msgid "Directory for file `%s' does not seem to be writable.\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:228
+#: src/topology/gnunet-daemon-topology.c:230
 msgid "# peers blacklisted"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:342
+#: src/topology/gnunet-daemon-topology.c:344
 #, fuzzy
 msgid "# connect requests issued to ATS"
 msgstr "# các yêu cầu máy/trình khách lỗ hổng được phun vào"
 
-#: src/topology/gnunet-daemon-topology.c:536
+#: src/topology/gnunet-daemon-topology.c:538
 #, fuzzy
 msgid "# HELLO messages gossipped"
 msgstr "# các thông báo gửi đi bị loại bỏ"
 
-#: src/topology/gnunet-daemon-topology.c:638
-#: src/topology/gnunet-daemon-topology.c:724
+#: src/topology/gnunet-daemon-topology.c:640
+#: src/topology/gnunet-daemon-topology.c:726
 #, fuzzy
 msgid "# friends connected"
 msgstr "# của các đồng đẳng đã kết nối"
 
-#: src/topology/gnunet-daemon-topology.c:921
+#: src/topology/gnunet-daemon-topology.c:923
 msgid "Failed to connect to core service, can not manage topology!\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:954
+#: src/topology/gnunet-daemon-topology.c:956
 #, c-format
 msgid "Found myself `%s' in friend list (useless, ignored)\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:961
+#: src/topology/gnunet-daemon-topology.c:963
 #, fuzzy, c-format
 msgid "Found friend `%s' in configuration\n"
 msgstr ""
 "\n"
 "Kết thúc cấu hình.\n"
 
-#: src/topology/gnunet-daemon-topology.c:983
+#: src/topology/gnunet-daemon-topology.c:985
 msgid "Encountered errors parsing friends list!\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:986
+#: src/topology/gnunet-daemon-topology.c:988
 #, fuzzy
 msgid "# friends in configuration"
 msgstr ""
 "\n"
 "Kết thúc cấu hình.\n"
 
-#: src/topology/gnunet-daemon-topology.c:993
+#: src/topology/gnunet-daemon-topology.c:995
 msgid ""
 "Fewer friends specified than required by minimum friend count. Will only "
 "connect to friends.\n"
 msgstr ""
 "Xác định quá ít bạn bè (dưới số tối thiểu). Sẽ chỉ kết nối tới bạn bè.\n"
 
-#: src/topology/gnunet-daemon-topology.c:999
+#: src/topology/gnunet-daemon-topology.c:1001
 msgid ""
 "More friendly connections required than target total number of connections.\n"
 msgstr "Cần thiết nhiều kết nối bạn bè hơn tổng số kết nối đích.\n"
 
-#: src/topology/gnunet-daemon-topology.c:1052
-#: src/transport/plugin_transport_wlan.c:1515
+#: src/topology/gnunet-daemon-topology.c:1054
+#: src/transport/plugin_transport_wlan.c:1517
 #, fuzzy
 msgid "# HELLO messages received"
 msgstr "# các thông báo PONG đã mật mã được nhận"
 
-#: src/topology/gnunet-daemon-topology.c:1230
+#: src/topology/gnunet-daemon-topology.c:1233
 msgid "GNUnet topology control"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_ats.c:139
+#: src/transport/gnunet-communicator-tcp.c:2329
+#: src/transport/gnunet-communicator-udp.c:2883
+#: src/transport/gnunet-service-tng.c:4679
+#: src/transport/gnunet-service-transport.c:2782
+#, fuzzy
+msgid "Transport service is lacking key configuration settings. Exiting.\n"
+msgstr "Lưu cấu hình ngay bây giờ không?"
+
+#: src/transport/gnunet-communicator-tcp.c:2393
+msgid "GNUnet TCP communicator"
+msgstr ""
+
+#: src/transport/gnunet-communicator-udp.c:2954
+msgid "GNUnet UDP communicator"
+msgstr ""
+
+#: src/transport/gnunet-communicator-unix.c:802
+#, fuzzy
+msgid ""
+"Maximum number of UNIX connections exceeded, dropping incoming message\n"
+msgstr "tăng sổ tối đa các kết nối TCP/IP"
+
+#: src/transport/gnunet-communicator-unix.c:1073
+#: src/transport/plugin_transport_unix.c:1403
+#, fuzzy, c-format
+msgid "Cannot create path to `%s'\n"
+msgstr "Không thể tạo miền tên.\n"
+
+#: src/transport/gnunet-communicator-unix.c:1162
+msgid "GNUnet UNIX domain socket communicator"
+msgstr ""
+
+#: src/transport/gnunet-service-transport_ats.c:141
 msgid "# Addresses given to ATS"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:446
+#: src/transport/gnunet-service-transport.c:448
 #, fuzzy
 msgid "# messages dropped due to slow client"
 msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải"
 
-#: src/transport/gnunet-service-transport.c:816
+#: src/transport/gnunet-service-transport.c:817
 msgid "# bytes payload dropped (other peer was not connected)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:1549
+#: src/transport/gnunet-service-transport.c:1550
 #, fuzzy
 msgid "# bytes payload discarded due to not connected peer"
 msgstr "# Các quảng cáo đồng đẳng bị hủy do trọng tải"
 
-#: src/transport/gnunet-service-transport.c:1709
+#: src/transport/gnunet-service-transport.c:1710
 #, fuzzy
 msgid "# bytes total received"
 msgstr "# tổng số nội dung lỗ hổng được nhận"
 
-#: src/transport/gnunet-service-transport.c:1806
+#: src/transport/gnunet-service-transport.c:1807
 #, fuzzy
 msgid "# bytes payload received"
 msgstr "# các byte đã giải mã"
 
-#: src/transport/gnunet-service-transport.c:2123
-#: src/transport/gnunet-service-transport.c:2595
+#: src/transport/gnunet-service-transport.c:2124
+#: src/transport/gnunet-service-transport.c:2596
 msgid "# disconnects due to blacklist"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:2599
+#: src/transport/gnunet-service-transport.c:2600
 #, fuzzy, c-format
 msgid "Disallowing connection to peer `%s' on transport %s\n"
 msgstr "Không thể nạp phần bổ sung truyền tải « %s »\n"
 
-#: src/transport/gnunet-service-transport.c:2707
+#: src/transport/gnunet-service-transport.c:2708
 #, fuzzy, c-format
 msgid "Adding blacklisting entry for peer `%s'\n"
 msgstr "Không thể lấy địa chỉ của đồng đẳng « %s ».\n"
 
-#: src/transport/gnunet-service-transport.c:2716
+#: src/transport/gnunet-service-transport.c:2717
 #, c-format
 msgid "Adding blacklisting entry for peer `%s':`%s'\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:2781
-#, fuzzy
-msgid "Transport service is lacking key configuration settings. Exiting.\n"
-msgstr "Lưu cấu hình ngay bây giờ không?"
-
-#: src/transport/gnunet-service-transport_hello.c:193
+#: src/transport/gnunet-service-transport_hello.c:195
 msgid "# refreshed my HELLO"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:804
+#: src/transport/gnunet-service-transport_neighbours.c:805
 #, fuzzy
 msgid "# session creation failed"
 msgstr "# các khoá phiên chạy được chấp nhận"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1051
+#: src/transport/gnunet-service-transport_neighbours.c:1052
 #, fuzzy
 msgid "# DISCONNECT messages sent"
 msgstr "# các thông báo PONG đã mật mã được nhận"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1174
+#: src/transport/gnunet-service-transport_neighbours.c:1175
 msgid "# disconnects due to quota of 0"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1322
-#: src/transport/gnunet-service-transport_neighbours.c:1783
+#: src/transport/gnunet-service-transport_neighbours.c:1323
+#: src/transport/gnunet-service-transport_neighbours.c:1784
 #, fuzzy
 msgid "# bytes in message queue for other peers"
 msgstr "# các byte thông báo gửi đi bị loại bỏ"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1327
+#: src/transport/gnunet-service-transport_neighbours.c:1328
 #, fuzzy
 msgid "# messages transmitted to other peers"
 msgstr "# các byte kiểu %d được gửi "
 
-#: src/transport/gnunet-service-transport_neighbours.c:1333
+#: src/transport/gnunet-service-transport_neighbours.c:1334
 #, fuzzy
 msgid "# transmission failures for messages to other peers"
 msgstr "# các byte thông báo gửi đi bị loại bỏ"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1393
+#: src/transport/gnunet-service-transport_neighbours.c:1394
 msgid "# messages timed out while in transport queue"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1477
+#: src/transport/gnunet-service-transport_neighbours.c:1478
 msgid "# KEEPALIVES sent"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1513
+#: src/transport/gnunet-service-transport_neighbours.c:1514
 #, fuzzy
 msgid "# KEEPALIVE messages discarded (peer unknown)"
 msgstr "# các thông báo được chắp liền"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1521
+#: src/transport/gnunet-service-transport_neighbours.c:1522
 #, fuzzy
 msgid "# KEEPALIVE messages discarded (no session)"
 msgstr "# các thông báo được chắp liền"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1531
+#: src/transport/gnunet-service-transport_neighbours.c:1532
 msgid "# KEEPALIVES received in good order"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1576
+#: src/transport/gnunet-service-transport_neighbours.c:1577
 #, fuzzy
 msgid "# KEEPALIVE_RESPONSEs discarded (not connected)"
 msgstr "# các thông báo được chắp liền"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1585
+#: src/transport/gnunet-service-transport_neighbours.c:1586
 #, fuzzy
 msgid "# KEEPALIVE_RESPONSEs discarded (not expected)"
 msgstr "# các thông báo được chắp liền"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1593
+#: src/transport/gnunet-service-transport_neighbours.c:1594
 #, fuzzy
 msgid "# KEEPALIVE_RESPONSEs discarded (address changed)"
 msgstr "# các thông báo được chắp liền"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1602
+#: src/transport/gnunet-service-transport_neighbours.c:1603
 #, fuzzy
 msgid "# KEEPALIVE_RESPONSEs discarded (no nonce)"
 msgstr "# các thông báo được chắp liền"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1607
+#: src/transport/gnunet-service-transport_neighbours.c:1608
 #, fuzzy
 msgid "# KEEPALIVE_RESPONSEs discarded (bad nonce)"
 msgstr "# các thông báo được chắp liền"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1613
+#: src/transport/gnunet-service-transport_neighbours.c:1614
 #, fuzzy
 msgid "# KEEPALIVE_RESPONSEs received (OK)"
 msgstr "# các thông báo được chắp liền"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1680
+#: src/transport/gnunet-service-transport_neighbours.c:1681
 #, fuzzy
 msgid "# messages discarded due to lack of neighbour record"
 msgstr "# các thông báo được chắp liền"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1714
+#: src/transport/gnunet-service-transport_neighbours.c:1715
 #, fuzzy
 msgid "# bandwidth quota violations by other peers"
 msgstr "theo dõi gnunetd sử dụng dải thông"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1729
+#: src/transport/gnunet-service-transport_neighbours.c:1730
 msgid "# ms throttling suggested"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1852
+#: src/transport/gnunet-service-transport_neighbours.c:1853
 #, fuzzy, c-format
 msgid "Failed to send SYN message to peer `%s'\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1872
+#: src/transport/gnunet-service-transport_neighbours.c:1873
 #, fuzzy
 msgid "# Failed attempts to switch addresses (failed to send SYN CONT)"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1911
+#: src/transport/gnunet-service-transport_neighbours.c:1912
 #, fuzzy
 msgid "# SYN messages sent"
 msgstr "# các thông báo PONG đã mật mã được nhận"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1928
+#: src/transport/gnunet-service-transport_neighbours.c:1929
 #, fuzzy, c-format
 msgid "Failed to transmit SYN message to %s\n"
 msgstr "Lỗi sơ khởi dịch vụ « %s ».\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1958
+#: src/transport/gnunet-service-transport_neighbours.c:1959
 #, fuzzy
 msgid "# Failed attempts to switch addresses (failed to send SYN)"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:2026
+#: src/transport/gnunet-service-transport_neighbours.c:2027
 #, fuzzy, c-format
 msgid "Failed to send SYN_ACK message to peer `%s' using address `%s'\n"
 msgstr "Lỗi kết nối đến gnunetd.\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:2080
+#: src/transport/gnunet-service-transport_neighbours.c:2081
 #, fuzzy
 msgid "# SYN_ACK messages sent"
 msgstr "# các thông báo PONG đã mật mã được nhận"
 
-#: src/transport/gnunet-service-transport_neighbours.c:2097
+#: src/transport/gnunet-service-transport_neighbours.c:2098
 #, fuzzy, c-format
 msgid "Failed to transmit SYN_ACK message to %s\n"
 msgstr "Lỗi sơ khởi dịch vụ « %s ».\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:2260
+#: src/transport/gnunet-service-transport_neighbours.c:2261
 #, fuzzy
 msgid "# SYN messages received"
 msgstr "# các thông báo PING được tạo"
 
-#: src/transport/gnunet-service-transport_neighbours.c:2265
+#: src/transport/gnunet-service-transport_neighbours.c:2266
 #, c-format
 msgid "SYN request from peer `%s' ignored due impending shutdown\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:2652
+#: src/transport/gnunet-service-transport_neighbours.c:2653
 msgid "# Attempts to switch addresses"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3137
+#: src/transport/gnunet-service-transport_neighbours.c:3138
 #, fuzzy
 msgid "# SYN_ACK messages received"
 msgstr "# các thông báo PONG đã mật mã được nhận"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3145
+#: src/transport/gnunet-service-transport_neighbours.c:3146
 #, fuzzy
 msgid "# unexpected SYN_ACK messages (no peer)"
 msgstr "gửi ĐẾM thông báo"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3163
-#: src/transport/gnunet-service-transport_neighbours.c:3187
+#: src/transport/gnunet-service-transport_neighbours.c:3164
+#: src/transport/gnunet-service-transport_neighbours.c:3188
 #, fuzzy
 msgid "# unexpected SYN_ACK messages (not ready)"
 msgstr "gửi ĐẾM thông báo"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3199
+#: src/transport/gnunet-service-transport_neighbours.c:3200
 #, fuzzy
 msgid "# unexpected SYN_ACK messages (waiting on ATS)"
 msgstr "gửi ĐẾM thông báo"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3224
+#: src/transport/gnunet-service-transport_neighbours.c:3225
 msgid "# Successful attempts to switch addresses"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3237
+#: src/transport/gnunet-service-transport_neighbours.c:3238
 #, fuzzy
 msgid "# unexpected SYN_ACK messages (disconnecting)"
 msgstr "gửi ĐẾM thông báo"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3410
+#: src/transport/gnunet-service-transport_neighbours.c:3411
 #, fuzzy
 msgid "# ACK messages received"
 msgstr "# các thông báo PONG đã mật mã được nhận"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3446
+#: src/transport/gnunet-service-transport_neighbours.c:3447
 #, fuzzy
 msgid "# unexpected ACK messages"
 msgstr "# các thông báo PONG đã mật mã được gửi"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3534
+#: src/transport/gnunet-service-transport_neighbours.c:3535
 #, fuzzy
 msgid "# quota messages ignored (malformed)"
 msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3541
+#: src/transport/gnunet-service-transport_neighbours.c:3542
 #, fuzzy
 msgid "# QUOTA messages received"
 msgstr "# các thông báo PONG đã mật mã được nhận"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3581
+#: src/transport/gnunet-service-transport_neighbours.c:3582
 msgid "# disconnect messages ignored (malformed)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3588
+#: src/transport/gnunet-service-transport_neighbours.c:3589
 #, fuzzy
 msgid "# DISCONNECT messages received"
 msgstr "# các thông báo PONG đã mật mã được nhận"
 
-#: src/transport/gnunet-service-transport_neighbours.c:3599
+#: src/transport/gnunet-service-transport_neighbours.c:3600
 msgid "# disconnect messages ignored (timestamp)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3734
+#: src/transport/gnunet-service-transport_neighbours.c:3735
 #, fuzzy
 msgid "# disconnected from peer upon explicit request"
 msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải"
 
-#: src/transport/gnunet-service-transport_plugins.c:156
+#: src/transport/gnunet-service-transport_plugins.c:158
 msgid "Transport service is lacking NEIGHBOUR_LIMIT option.\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_plugins.c:221
-#: src/transport/gnunet-service-transport_plugins.c:229
-#: src/transport/gnunet-service-transport_plugins.c:237
-#: src/transport/gnunet-service-transport_plugins.c:245
-#: src/transport/gnunet-service-transport_plugins.c:253
-#: src/transport/gnunet-service-transport_plugins.c:261
-#: src/transport/gnunet-service-transport_plugins.c:269
-#: src/transport/gnunet-service-transport_plugins.c:277
-#: src/transport/gnunet-service-transport_plugins.c:285
-#: src/transport/gnunet-service-transport_plugins.c:293
-#: src/transport/gnunet-service-transport_plugins.c:301
+#: src/transport/gnunet-service-transport_plugins.c:223
+#: src/transport/gnunet-service-transport_plugins.c:231
+#: src/transport/gnunet-service-transport_plugins.c:239
+#: src/transport/gnunet-service-transport_plugins.c:247
+#: src/transport/gnunet-service-transport_plugins.c:255
+#: src/transport/gnunet-service-transport_plugins.c:263
+#: src/transport/gnunet-service-transport_plugins.c:271
+#: src/transport/gnunet-service-transport_plugins.c:279
+#: src/transport/gnunet-service-transport_plugins.c:287
+#: src/transport/gnunet-service-transport_plugins.c:295
+#: src/transport/gnunet-service-transport_plugins.c:303
 #, fuzzy, c-format
 msgid "Missing function `%s' in transport plugin for `%s'\n"
 msgstr "Không thể nạp phần bổ sung truyền tải « %s »\n"
 
-#: src/transport/gnunet-service-transport_plugins.c:308
+#: src/transport/gnunet-service-transport_plugins.c:310
 #, fuzzy, c-format
 msgid "Did not load plugin `%s' due to missing functions\n"
 msgstr "Lỗi nạp phần bổ sung « %s » tại %s:%d. Đang hủy nạp phần bổ sung.\n"
 
-#: src/transport/gnunet-service-transport_validation.c:386
+#: src/transport/gnunet-service-transport_validation.c:388
 msgid "# Addresses in validation map"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:489
-#: src/transport/gnunet-service-transport_validation.c:675
-#: src/transport/gnunet-service-transport_validation.c:995
-#: src/transport/gnunet-service-transport_validation.c:1607
+#: src/transport/gnunet-service-transport_validation.c:491
+#: src/transport/gnunet-service-transport_validation.c:677
+#: src/transport/gnunet-service-transport_validation.c:997
+#: src/transport/gnunet-service-transport_validation.c:1609
 #, fuzzy
 msgid "# validations running"
 msgstr "kho dữ liệu sqlite"
 
-#: src/transport/gnunet-service-transport_validation.c:530
+#: src/transport/gnunet-service-transport_validation.c:532
 #, fuzzy
 msgid "# address records discarded (timeout)"
 msgstr "# các byte loại đi bởi TCP (đi ra)"
 
-#: src/transport/gnunet-service-transport_validation.c:578
+#: src/transport/gnunet-service-transport_validation.c:580
 msgid "# address records discarded (blacklist)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:666
+#: src/transport/gnunet-service-transport_validation.c:668
 msgid "# PINGs for address validation sent"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:746
+#: src/transport/gnunet-service-transport_validation.c:748
 msgid "# validations delayed by global throttle"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:783
+#: src/transport/gnunet-service-transport_validation.c:785
 msgid "# address revalidations started"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1121
+#: src/transport/gnunet-service-transport_validation.c:1123
 #, fuzzy
 msgid "# PING message for different peer received"
 msgstr "# các thông báo PING được tạo"
 
-#: src/transport/gnunet-service-transport_validation.c:1172
+#: src/transport/gnunet-service-transport_validation.c:1174
 #, c-format
 msgid "Plugin `%s' not available, cannot confirm having this address\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1185
+#: src/transport/gnunet-service-transport_validation.c:1187
 msgid "# failed address checks during validation"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1188
+#: src/transport/gnunet-service-transport_validation.c:1190
 #, c-format
 msgid "Address `%s' is not one of my addresses, not confirming PING\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1196
+#: src/transport/gnunet-service-transport_validation.c:1198
 msgid "# successful address checks during validation"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1209
+#: src/transport/gnunet-service-transport_validation.c:1211
 #, c-format
 msgid ""
 "Not confirming PING from peer `%s' with address `%s' since I cannot confirm "
 "having this address.\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1264
+#: src/transport/gnunet-service-transport_validation.c:1266
 #, fuzzy, c-format
 msgid "Failed to create PONG signature for peer `%s'\n"
 msgstr "Không thể tạo miền tên.\n"
 
-#: src/transport/gnunet-service-transport_validation.c:1315
+#: src/transport/gnunet-service-transport_validation.c:1317
 msgid "# PONGs unicast via reliable transport"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1324
+#: src/transport/gnunet-service-transport_validation.c:1326
 msgid "# PONGs multicast to all available addresses"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1497
+#: src/transport/gnunet-service-transport_validation.c:1499
 msgid "# PONGs dropped, no matching pending validation"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1515
+#: src/transport/gnunet-service-transport_validation.c:1517
 msgid "# PONGs dropped, signature expired"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1570
+#: src/transport/gnunet-service-transport_validation.c:1572
 msgid "# validations succeeded"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1625
+#: src/transport/gnunet-service-transport_validation.c:1627
 #, fuzzy
 msgid "# HELLOs given to peerinfo"
 msgstr "Nhận được thông báo « %s » sai từ đồng đẳng « %s ».\n"
 
-#: src/transport/gnunet-transport.c:411
+#: src/transport/gnunet-transport.c:413
 #, fuzzy, c-format
 msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n"
 msgstr "Đang thử tải danh sách các máy xuống « %s »\n"
 
-#: src/transport/gnunet-transport.c:421
+#: src/transport/gnunet-transport.c:423
 #, fuzzy, c-format
 msgid "Received %llu bytes/s (%llu bytes in %s)\n"
 msgstr "Nhận yêu cầu định tuyến\n"
 
-#: src/transport/gnunet-transport.c:465
+#: src/transport/gnunet-transport.c:467
 #, fuzzy, c-format
 msgid "Failed to connect to `%s'\n"
 msgstr "Lỗi kết nối đến gnunetd.\n"
 
-#: src/transport/gnunet-transport.c:478
+#: src/transport/gnunet-transport.c:480
 #, fuzzy, c-format
 msgid "Failed to resolve address for peer `%s'\n"
 msgstr "Lỗi đóng kết đến cổng %s %d.\n"
 
-#: src/transport/gnunet-transport.c:492
+#: src/transport/gnunet-transport.c:494
 #, fuzzy
 msgid "Failed to list connections, timeout occurred\n"
 msgstr "Không kết nối được đến trình nền gnunetd."
 
-#: src/transport/gnunet-transport.c:525
+#: src/transport/gnunet-transport.c:527
 #, fuzzy, c-format
 msgid "Transmitting %u bytes\n"
 msgstr "Đang thử tải danh sách các máy xuống « %s »\n"
 
-#: src/transport/gnunet-transport.c:559
+#: src/transport/gnunet-transport.c:561
 #, c-format
 msgid ""
 "Successfully connected to `%s', starting to send benchmark data in %u Kb "
 "blocks\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:590
+#: src/transport/gnunet-transport.c:592
 #, fuzzy, c-format
 msgid "Disconnected from peer `%s' while benchmarking\n"
 msgstr "« %.*s » được kết nối tới « %.*s ».\n"
 
-#: src/transport/gnunet-transport.c:614 src/transport/gnunet-transport.c:643
+#: src/transport/gnunet-transport.c:616 src/transport/gnunet-transport.c:645
 #, c-format
 msgid "%24s: %-17s %4s   (%u connections in total)\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:616
+#: src/transport/gnunet-transport.c:618
 #, fuzzy
 msgid "Connected to"
 msgstr "« %s » được kết nối tới « %s ».\n"
 
-#: src/transport/gnunet-transport.c:645
+#: src/transport/gnunet-transport.c:647
 #, fuzzy
 msgid "Disconnected from"
 msgstr "« %.*s » được kết nối tới « %.*s ».\n"
 
-#: src/transport/gnunet-transport.c:680
+#: src/transport/gnunet-transport.c:682
 #, fuzzy, c-format
 msgid "Received %u bytes\n"
 msgstr "Nhận yêu cầu định tuyến\n"
 
-#: src/transport/gnunet-transport.c:717
+#: src/transport/gnunet-transport.c:719
 #, c-format
 msgid "Peer `%s': %s %s in state `%s' until %s\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:729
+#: src/transport/gnunet-transport.c:731
 #, fuzzy, c-format
 msgid "Peer `%s': %s %s\n"
 msgstr "Tôi là đồng đẳng « %s ».\n"
 
-#: src/transport/gnunet-transport.c:1142
+#: src/transport/gnunet-transport.c:1144
 #, fuzzy
 msgid "Monitor disconnected from transport service. Reconnecting.\n"
 msgstr "Lỗi kết nối đến gnunetd.\n"
 
-#: src/transport/gnunet-transport.c:1249
+#: src/transport/gnunet-transport.c:1251
 #, c-format
 msgid ""
 "Multiple operations given. Please choose only one operation: %s, %s, %s, %s, "
 "%s, %s %s\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1262
+#: src/transport/gnunet-transport.c:1264
 #, c-format
 msgid ""
 "No operation given. Please choose one operation: %s, %s, %s, %s, %s, %s, %s\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1292
+#: src/transport/gnunet-transport.c:1294
 #, fuzzy
 msgid "Failed to connect to transport service for disconnection\n"
 msgstr "Lỗi kết nối đến gnunetd.\n"
 
-#: src/transport/gnunet-transport.c:1298
+#: src/transport/gnunet-transport.c:1300
 msgid "Blacklisting request in place, stop with CTRL-C\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1323 src/transport/gnunet-transport.c:1353
-#: src/transport/gnunet-transport.c:1406
+#: src/transport/gnunet-transport.c:1325 src/transport/gnunet-transport.c:1355
+#: src/transport/gnunet-transport.c:1408
 #, fuzzy
 msgid "Failed to connect to transport service\n"
 msgstr "Lỗi kết nối đến gnunetd.\n"
 
-#: src/transport/gnunet-transport.c:1360
+#: src/transport/gnunet-transport.c:1362
 msgid "Starting to receive benchmark data\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1431
+#: src/transport/gnunet-transport.c:1433
 #, fuzzy
 msgid "print information for all peers (instead of only connected peers)"
 msgstr "In ra thông tin về các đồng đẳng GNUnet."
 
-#: src/transport/gnunet-transport.c:1435
+#: src/transport/gnunet-transport.c:1437
 msgid "measure how fast we are receiving data from all peers (until CTRL-C)"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1439
+#: src/transport/gnunet-transport.c:1441
 #, fuzzy
 msgid "disconnect from a peer"
 msgstr "Lỗi kết nối đến gnunetd.\n"
 
-#: src/transport/gnunet-transport.c:1443
+#: src/transport/gnunet-transport.c:1445
 #, fuzzy
 msgid "provide information about all current connections (once)"
 msgstr "In ra thông tin về các đồng đẳng GNUnet."
 
-#: src/transport/gnunet-transport.c:1451
+#: src/transport/gnunet-transport.c:1453
 #, fuzzy
 msgid ""
 "provide information about all connects and disconnect events (continuously)"
 msgstr "In ra thông tin về các đồng đẳng GNUnet."
 
-#: src/transport/gnunet-transport.c:1455
+#: src/transport/gnunet-transport.c:1457
 #, fuzzy
 msgid "do not resolve hostnames"
 msgstr "không quyết định các tên máy"
 
-#: src/transport/gnunet-transport.c:1460
-#: src/transport/gnunet-transport-profiler.c:639
+#: src/transport/gnunet-transport.c:1462
+#: src/transport/gnunet-transport-profiler.c:641
 msgid "peer identity"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1464
+#: src/transport/gnunet-transport.c:1466
 msgid "monitor plugin sessions"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1469
+#: src/transport/gnunet-transport.c:1471
 msgid "send data for benchmarking to the other peer (until CTRL-C)"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1480
-#: src/transport/gnunet-transport-profiler.c:650
+#: src/transport/gnunet-transport.c:1482
+#: src/transport/gnunet-transport-profiler.c:652
 #, fuzzy
 msgid "Direct access to transport service."
 msgstr "Lỗi kết nối đến gnunetd.\n"
 
-#: src/transport/gnunet-transport-profiler.c:217
+#: src/transport/gnunet-transport-profiler.c:219
 #, c-format
 msgid "%llu B in %llu ms == %.2f KB/s!\n"
 msgstr ""
 
-#: src/transport/gnunet-transport-profiler.c:615
+#: src/transport/gnunet-transport-profiler.c:617
 msgid "send data to peer"
 msgstr ""
 
-#: src/transport/gnunet-transport-profiler.c:619
+#: src/transport/gnunet-transport-profiler.c:621
 #, fuzzy
 msgid "receive data from peer"
 msgstr "Yêu cầu cấp %d từ đồng đẳng %d\n"
 
-#: src/transport/gnunet-transport-profiler.c:624
+#: src/transport/gnunet-transport-profiler.c:626
 #, fuzzy
 msgid "iterations"
 msgstr "Tùy chọn chung"
 
-#: src/transport/gnunet-transport-profiler.c:629
+#: src/transport/gnunet-transport-profiler.c:631
 #, fuzzy
 msgid "number of messages to send"
 msgstr "số tin nhắn cần dùng mỗi lần lặp"
 
-#: src/transport/gnunet-transport-profiler.c:634
+#: src/transport/gnunet-transport-profiler.c:636
 #, fuzzy
 msgid "message size to use"
 msgstr "kích cỡ tin nhắn"
 
-#: src/transport/plugin_transport_http_client.c:1472
-#: src/transport/plugin_transport_http_server.c:2310
-#: src/transport/plugin_transport_http_server.c:3524
-#: src/transport/plugin_transport_tcp.c:3889
-#: src/transport/plugin_transport_tcp.c:3896
-#: src/transport/plugin_transport_xt.c:3897
-#: src/transport/plugin_transport_xt.c:3904
+#: src/transport/plugin_transport_http_client.c:1474
+#: src/transport/plugin_transport_http_server.c:2312
+#: src/transport/plugin_transport_http_server.c:3530
+#: src/transport/plugin_transport_tcp.c:3895
+#: src/transport/plugin_transport_tcp.c:3902
+#: src/transport/plugin_transport_xt.c:3899
+#: src/transport/plugin_transport_xt.c:3906
 msgid "TCP_STEALTH not supported on this platform.\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_client.c:2113
+#: src/transport/plugin_transport_http_client.c:2115
 #, c-format
 msgid "Could not initialize curl multi handle, failed to start %s plugin!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_client.c:2162
-#: src/transport/plugin_transport_http_server.c:3239
+#: src/transport/plugin_transport_http_client.c:2164
+#: src/transport/plugin_transport_http_server.c:3245
 #, fuzzy, c-format
 msgid "Shutting down plugin `%s'\n"
 msgstr "Đang nạp các truyền tải « %s »\n"
 
-#: src/transport/plugin_transport_http_client.c:2179
-#: src/transport/plugin_transport_http_server.c:3309
+#: src/transport/plugin_transport_http_client.c:2181
+#: src/transport/plugin_transport_http_server.c:3315
 #, fuzzy, c-format
 msgid "Shutdown for plugin `%s' complete\n"
 msgstr "Tải lên « %s » hoàn thành, địa chỉ URI là « %s ».\n"
 
-#: src/transport/plugin_transport_http_client.c:2213
+#: src/transport/plugin_transport_http_client.c:2215
 #, fuzzy, c-format
 msgid "Maximum number of requests is %u\n"
 msgstr "tăng sổ tối đa các kết nối TCP/IP"
 
-#: src/transport/plugin_transport_http_server.c:1754
+#: src/transport/plugin_transport_http_server.c:1756
 #, c-format
 msgid ""
 "Access from connection %p (%u of %u) for `%s' `%s' url `%s' with upload data "
 "size %u\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2026
+#: src/transport/plugin_transport_http_server.c:2028
 #, c-format
 msgid "Accepting connection (%u of %u) from `%s'\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2034
+#: src/transport/plugin_transport_http_server.c:2036
 #, c-format
 msgid ""
 "Server reached maximum number connections (%u), rejecting new connection\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2184
+#: src/transport/plugin_transport_http_server.c:2186
 msgid ""
 "Could not create a new TLS certificate, program `gnunet-transport-"
 "certificate-creation' could not be started!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2207
+#: src/transport/plugin_transport_http_server.c:2209
 #, c-format
 msgid "No usable TLS certificate found and creating one at `%s/%s' failed!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2336
+#: src/transport/plugin_transport_http_server.c:2338
 msgid "Could not load or create server certificate! Loading plugin failed!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2648
+#: src/transport/plugin_transport_http_server.c:2654
 #, fuzzy
 msgid "Require valid port number for service in configuration!\n"
 msgstr "Lỗi lưu cấu hình."
 
-#: src/transport/plugin_transport_http_server.c:2813
+#: src/transport/plugin_transport_http_server.c:2819
 #, c-format
 msgid "Found %u addresses to report to NAT service\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2899
-#: src/transport/plugin_transport_udp.c:3621
-#: src/transport/plugin_transport_xu.c:2047
+#: src/transport/plugin_transport_http_server.c:2905
+#: src/transport/plugin_transport_udp.c:3627
+#: src/transport/plugin_transport_xu.c:2049
 msgid "Disabling IPv6 since it is not supported on this system!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3005
+#: src/transport/plugin_transport_http_server.c:3011
 #, c-format
 msgid "IPv4 support is %s\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3020
+#: src/transport/plugin_transport_http_server.c:3026
 #, c-format
 msgid "IPv6 support is %s\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3026
+#: src/transport/plugin_transport_http_server.c:3032
 msgid "Neither IPv4 nor IPv6 are enabled! Fix in configuration\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3037
+#: src/transport/plugin_transport_http_server.c:3043
 #, fuzzy
 msgid "Port is required! Fix in configuration\n"
 msgstr ""
 "\n"
 "Kết thúc cấu hình.\n"
 
-#: src/transport/plugin_transport_http_server.c:3043
+#: src/transport/plugin_transport_http_server.c:3049
 #, fuzzy, c-format
 msgid "Using port %u\n"
 msgstr "Đang thử nghiệm (các) truyền tải %s\n"
 
-#: src/transport/plugin_transport_http_server.c:3062
+#: src/transport/plugin_transport_http_server.c:3068
 #, fuzzy, c-format
 msgid "Specific IPv4 address `%s' in configuration file is invalid!\n"
 msgstr "Đang thử dùng tập tin « %s » cho cấu hình MySQL.\n"
 
-#: src/transport/plugin_transport_http_server.c:3097
+#: src/transport/plugin_transport_http_server.c:3103
 #, fuzzy, c-format
 msgid "Specific IPv6 address `%s' in configuration file is invalid!\n"
 msgstr "Đang thử dùng tập tin « %s » cho cấu hình MySQL.\n"
 
-#: src/transport/plugin_transport_http_server.c:3172
+#: src/transport/plugin_transport_http_server.c:3178
 #, fuzzy, c-format
 msgid "Using external hostname `%s'\n"
 msgstr "Đang bắt đầu tài về « %s »\n"
 
-#: src/transport/plugin_transport_http_server.c:3193
+#: src/transport/plugin_transport_http_server.c:3199
 #, fuzzy, c-format
 msgid "Notifying transport only about hostname `%s'\n"
 msgstr "không quyết định các tên máy"
 
-#: src/transport/plugin_transport_http_server.c:3210
+#: src/transport/plugin_transport_http_server.c:3216
 #, fuzzy, c-format
 msgid "Maximum number of connections is %u\n"
 msgstr "tăng sổ tối đa các kết nối TCP/IP"
 
-#: src/transport/plugin_transport_http_server.c:3536
+#: src/transport/plugin_transport_http_server.c:3542
 #, fuzzy
 msgid "Unable to compile URL regex\n"
 msgstr "Không thể sơ khởi SQLite: %s.\n"
 
-#: src/transport/plugin_transport_smtp.c:221
+#: src/transport/plugin_transport_smtp.c:223
 #, c-format
 msgid "Received malformed message via %s. Ignored.\n"
 msgstr "Nhận được thông báo dạng sai qua %s. Bị bỏ qua.\n"
 
-#: src/transport/plugin_transport_smtp.c:308
+#: src/transport/plugin_transport_smtp.c:310
 msgid "SMTP filter string to invalid, lacks ': '\n"
 msgstr "Chuỗi lọc vào SMTP không hợp lệ, còn thiếu « : »\n"
 
-#: src/transport/plugin_transport_smtp.c:317
+#: src/transport/plugin_transport_smtp.c:319
 #, c-format
 msgid "SMTP filter string to long, capped to `%s'\n"
 msgstr "Chuỗi lọc vào SMTP quá dài, tối đa « %s »\n"
 
-#: src/transport/plugin_transport_smtp.c:412
-#: src/transport/plugin_transport_smtp.c:422
-#: src/transport/plugin_transport_smtp.c:435
-#: src/transport/plugin_transport_smtp.c:454
-#: src/transport/plugin_transport_smtp.c:477
-#: src/transport/plugin_transport_smtp.c:485
-#: src/transport/plugin_transport_smtp.c:498
-#: src/transport/plugin_transport_smtp.c:509
+#: src/transport/plugin_transport_smtp.c:414
+#: src/transport/plugin_transport_smtp.c:424
+#: src/transport/plugin_transport_smtp.c:437
+#: src/transport/plugin_transport_smtp.c:456
+#: src/transport/plugin_transport_smtp.c:479
+#: src/transport/plugin_transport_smtp.c:487
+#: src/transport/plugin_transport_smtp.c:500
+#: src/transport/plugin_transport_smtp.c:511
 #, c-format
 msgid "SMTP: `%s' failed: %s.\n"
 msgstr "SMTP: « %s » bị lỗi: %s\n"
 
-#: src/transport/plugin_transport_smtp.c:650
+#: src/transport/plugin_transport_smtp.c:652
 msgid "No email-address specified, can not start SMTP transport.\n"
 msgstr "Chưa ghi rõ địa chỉ thư điện tử nên không tạo được truyền tải SMTP.\n"
 
-#: src/transport/plugin_transport_smtp.c:662
+#: src/transport/plugin_transport_smtp.c:664
 msgid "# bytes received via SMTP"
 msgstr "# các byte đã nhận qua SMTP"
 
-#: src/transport/plugin_transport_smtp.c:663
+#: src/transport/plugin_transport_smtp.c:665
 msgid "# bytes sent via SMTP"
 msgstr "# các byte đã gửi qua SMTP"
 
-#: src/transport/plugin_transport_smtp.c:665
+#: src/transport/plugin_transport_smtp.c:667
 msgid "# bytes dropped by SMTP (outgoing)"
 msgstr "# các byte loại đi bởi SMTP (đi ra)"
 
-#: src/transport/plugin_transport_tcp.c:1545
-#: src/transport/plugin_transport_tcp.c:2871
-#: src/transport/plugin_transport_xt.c:1551
-#: src/transport/plugin_transport_xt.c:2877
+#: src/transport/plugin_transport_tcp.c:1551
+#: src/transport/plugin_transport_tcp.c:2877
+#: src/transport/plugin_transport_xt.c:1553
+#: src/transport/plugin_transport_xt.c:2879
 #, fuzzy, c-format
 msgid "Unexpected address length: %u bytes\n"
 msgstr "Gặp sự kiện bất thường: %d\n"
 
-#: src/transport/plugin_transport_tcp.c:1728
-#: src/transport/plugin_transport_tcp.c:1952
-#: src/transport/plugin_transport_tcp.c:3135
-#: src/transport/plugin_transport_tcp.c:4012
-#: src/transport/plugin_transport_xt.c:1734
-#: src/transport/plugin_transport_xt.c:1958
-#: src/transport/plugin_transport_xt.c:3141
+#: src/transport/plugin_transport_tcp.c:1734
+#: src/transport/plugin_transport_tcp.c:1958
+#: src/transport/plugin_transport_tcp.c:3141
+#: src/transport/plugin_transport_tcp.c:4018
+#: src/transport/plugin_transport_xt.c:1736
+#: src/transport/plugin_transport_xt.c:1960
+#: src/transport/plugin_transport_xt.c:3143
 #, fuzzy
 msgid "# TCP sessions active"
 msgstr "# các khoá phiên chạy được chấp nhận"
 
-#: src/transport/plugin_transport_tcp.c:1770
-#: src/transport/plugin_transport_tcp.c:1934
-#: src/transport/plugin_transport_tcp.c:2058
-#: src/transport/plugin_transport_tcp.c:2131
-#: src/transport/plugin_transport_tcp.c:2231
-#: src/transport/plugin_transport_tcp.c:2256
-#: src/transport/plugin_transport_xt.c:1776
-#: src/transport/plugin_transport_xt.c:1940
-#: src/transport/plugin_transport_xt.c:2064
-#: src/transport/plugin_transport_xt.c:2137
-#: src/transport/plugin_transport_xt.c:2237
-#: src/transport/plugin_transport_xt.c:2262
+#: src/transport/plugin_transport_tcp.c:1776
+#: src/transport/plugin_transport_tcp.c:1940
+#: src/transport/plugin_transport_tcp.c:2064
+#: src/transport/plugin_transport_tcp.c:2137
+#: src/transport/plugin_transport_tcp.c:2237
+#: src/transport/plugin_transport_tcp.c:2262
+#: src/transport/plugin_transport_xt.c:1778
+#: src/transport/plugin_transport_xt.c:1942
+#: src/transport/plugin_transport_xt.c:2066
+#: src/transport/plugin_transport_xt.c:2139
+#: src/transport/plugin_transport_xt.c:2239
+#: src/transport/plugin_transport_xt.c:2264
 #, fuzzy
 msgid "# bytes currently in TCP buffers"
 msgstr "# các byte đã gừi qua TCP"
 
-#: src/transport/plugin_transport_tcp.c:1773
-#: src/transport/plugin_transport_xt.c:1779
+#: src/transport/plugin_transport_tcp.c:1779
+#: src/transport/plugin_transport_xt.c:1781
 #, fuzzy
 msgid "# bytes discarded by TCP (disconnect)"
 msgstr "# các byte loại đi bởi TCP (đi ra)"
 
-#: src/transport/plugin_transport_tcp.c:2061
-#: src/transport/plugin_transport_xt.c:2067
+#: src/transport/plugin_transport_tcp.c:2067
+#: src/transport/plugin_transport_xt.c:2069
 #, fuzzy
 msgid "# bytes discarded by TCP (timeout)"
 msgstr "# các byte loại đi bởi TCP (đi ra)"
 
-#: src/transport/plugin_transport_tcp.c:2135
-#: src/transport/plugin_transport_xt.c:2141
+#: src/transport/plugin_transport_tcp.c:2141
+#: src/transport/plugin_transport_xt.c:2143
 #, fuzzy
 msgid "# bytes transmitted via TCP"
 msgstr "# các byte được gửi"
 
-#: src/transport/plugin_transport_tcp.c:2533
-#: src/transport/plugin_transport_xt.c:2539
+#: src/transport/plugin_transport_tcp.c:2539
+#: src/transport/plugin_transport_xt.c:2541
 msgid "# requests to create session with invalid address"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:2709
-#: src/transport/plugin_transport_xt.c:2715
+#: src/transport/plugin_transport_tcp.c:2715
+#: src/transport/plugin_transport_xt.c:2717
 msgid "# transport-service disconnect requests for TCP"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3201
-#: src/transport/plugin_transport_xt.c:3207
+#: src/transport/plugin_transport_tcp.c:3207
+#: src/transport/plugin_transport_xt.c:3209
 #, fuzzy
 msgid "# TCP WELCOME messages received"
 msgstr "# các thông báo PONG đã mật mã được nhận"
 
-#: src/transport/plugin_transport_tcp.c:3407
-#: src/transport/plugin_transport_xt.c:3413
+#: src/transport/plugin_transport_tcp.c:3413
+#: src/transport/plugin_transport_xt.c:3415
 msgid "# bytes received via TCP"
 msgstr "# các byte đã nhận qua TCP"
 
-#: src/transport/plugin_transport_tcp.c:3458
-#: src/transport/plugin_transport_tcp.c:3516
-#: src/transport/plugin_transport_xt.c:3464
-#: src/transport/plugin_transport_xt.c:3522
+#: src/transport/plugin_transport_tcp.c:3464
+#: src/transport/plugin_transport_tcp.c:3522
+#: src/transport/plugin_transport_xt.c:3466
+#: src/transport/plugin_transport_xt.c:3524
 #, fuzzy
 msgid "# TCP server connections active"
 msgstr "# các kết nối dht"
 
-#: src/transport/plugin_transport_tcp.c:3462
-#: src/transport/plugin_transport_xt.c:3468
+#: src/transport/plugin_transport_tcp.c:3468
+#: src/transport/plugin_transport_xt.c:3470
 #, fuzzy
 msgid "# TCP server connect events"
 msgstr "# của các đồng đẳng đã kết nối"
 
-#: src/transport/plugin_transport_tcp.c:3468
-#: src/transport/plugin_transport_xt.c:3474
+#: src/transport/plugin_transport_tcp.c:3474
+#: src/transport/plugin_transport_xt.c:3476
 msgid "TCP connection limit reached, suspending server\n"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3470
-#: src/transport/plugin_transport_xt.c:3476
+#: src/transport/plugin_transport_tcp.c:3476
+#: src/transport/plugin_transport_xt.c:3478
 msgid "# TCP service suspended"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3510
-#: src/transport/plugin_transport_xt.c:3516
+#: src/transport/plugin_transport_tcp.c:3516
+#: src/transport/plugin_transport_xt.c:3518
 msgid "# TCP service resumed"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3520
-#: src/transport/plugin_transport_xt.c:3526
+#: src/transport/plugin_transport_tcp.c:3526
+#: src/transport/plugin_transport_xt.c:3528
 msgid "# network-level TCP disconnect events"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3839
-#: src/transport/plugin_transport_xt.c:3847
+#: src/transport/plugin_transport_tcp.c:3845
+#: src/transport/plugin_transport_xt.c:3849
 #, fuzzy
 msgid "Failed to start service.\n"
 msgstr "Lỗi bắt đầu thu thập.\n"
 
-#: src/transport/plugin_transport_tcp.c:4000
+#: src/transport/plugin_transport_tcp.c:4006
 #, c-format
 msgid "TCP transport listening on port %llu\n"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:4004
+#: src/transport/plugin_transport_tcp.c:4010
 msgid "TCP transport not listening on any port (client only)\n"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:4008
+#: src/transport/plugin_transport_tcp.c:4014
 #, c-format
 msgid "TCP transport advertises itself as being on port %llu\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp_broadcasting.c:166
+#: src/transport/plugin_transport_udp_broadcasting.c:168
 #, fuzzy
 msgid "# Multicast HELLO beacons received via UDP"
 msgstr "# các thông báo PONG đã mật mã được nhận"
 
-#: src/transport/plugin_transport_udp_broadcasting.c:546
+#: src/transport/plugin_transport_udp_broadcasting.c:548
 msgid ""
 "Disabling HELLO broadcasting due to friend-to-friend only configuration!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp_broadcasting.c:563
+#: src/transport/plugin_transport_udp_broadcasting.c:565
 #, c-format
 msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3365
+#: src/transport/plugin_transport_udp.c:3371
 #, c-format
 msgid ""
 "UDP could not transmit message to `%s': Network seems down, please check "
 "your network configuration\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3379
+#: src/transport/plugin_transport_udp.c:3385
 msgid ""
 "UDP could not transmit IPv6 message! Please check your network configuration "
 "and disable IPv6 if your connection does not have a global IPv6 address\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3697
-#: src/transport/plugin_transport_udp.c:3796
+#: src/transport/plugin_transport_udp.c:3703
+#: src/transport/plugin_transport_udp.c:3802
 #, fuzzy, c-format
 msgid "Failed to bind UDP socket to %s: %s\n"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/transport/plugin_transport_udp.c:3715
-#: src/transport/plugin_transport_xu.c:2141
+#: src/transport/plugin_transport_udp.c:3721
+#: src/transport/plugin_transport_xu.c:2143
 msgid "Disabling IPv4 since it is not supported on this system!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3806
+#: src/transport/plugin_transport_udp.c:3812
 #, fuzzy
 msgid "Failed to open UDP sockets\n"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/transport/plugin_transport_udp.c:3877
-#: src/transport/plugin_transport_udp.c:3891
-#: src/transport/plugin_transport_xu.c:2299
-#: src/transport/plugin_transport_xu.c:2313
+#: src/transport/plugin_transport_udp.c:3883
+#: src/transport/plugin_transport_udp.c:3897
+#: src/transport/plugin_transport_xu.c:2301
+#: src/transport/plugin_transport_xu.c:2315
 msgid "must be in [0,65535]"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3923
-#: src/transport/plugin_transport_xu.c:2345
+#: src/transport/plugin_transport_udp.c:3929
+#: src/transport/plugin_transport_xu.c:2347
 #, fuzzy
 msgid "must be valid IPv4 address"
 msgstr "« %s » không sẵn sàng.\n"
 
-#: src/transport/plugin_transport_udp.c:3950
-#: src/transport/plugin_transport_xu.c:2372
+#: src/transport/plugin_transport_udp.c:3956
+#: src/transport/plugin_transport_xu.c:2374
 #, fuzzy
 msgid "must be valid IPv6 address"
 msgstr "« %s » không sẵn sàng.\n"
 
-#: src/transport/plugin_transport_udp.c:4014
+#: src/transport/plugin_transport_udp.c:4020
 #, fuzzy
 msgid "Failed to create UDP network sockets\n"
 msgstr "Không thể tạo miền tên.\n"
 
-#: src/transport/plugin_transport_unix.c:1401
-#, fuzzy, c-format
-msgid "Cannot create path to `%s'\n"
-msgstr "Không thể tạo miền tên.\n"
-
-#: src/transport/plugin_transport_unix.c:1414
+#: src/transport/plugin_transport_unix.c:1416
 #, fuzzy, c-format
 msgid "Cannot bind to `%s'\n"
 msgstr "Không thể tạo mẫu duy nhất đại diện cho « %s ».\n"
 
-#: src/transport/plugin_transport_unix.c:1814
+#: src/transport/plugin_transport_unix.c:1816
 #, fuzzy
 msgid "Failed to open UNIX listen socket\n"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/transport/plugin_transport_wlan.c:766
+#: src/transport/plugin_transport_wlan.c:768
 msgid "# ACKs sent"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:786
+#: src/transport/plugin_transport_wlan.c:788
 #, fuzzy
 msgid "# Messages defragmented"
 msgstr "# các thông báo được chắp liền"
 
-#: src/transport/plugin_transport_wlan.c:827
-#: src/transport/plugin_transport_wlan.c:912
+#: src/transport/plugin_transport_wlan.c:829
+#: src/transport/plugin_transport_wlan.c:914
 #, fuzzy
 msgid "# Sessions allocated"
 msgstr "# các khoá phiên chạy được chấp nhận"
 
-#: src/transport/plugin_transport_wlan.c:1033
+#: src/transport/plugin_transport_wlan.c:1035
 #, fuzzy
 msgid "# message fragments sent"
 msgstr "# các thông báo bị tế phân"
 
-#: src/transport/plugin_transport_wlan.c:1062
+#: src/transport/plugin_transport_wlan.c:1064
 #, fuzzy
 msgid "# messages pending (with fragmentation)"
 msgstr "# các thông báo được chắp liền"
 
-#: src/transport/plugin_transport_wlan.c:1191
-#: src/transport/plugin_transport_wlan.c:1282
-#: src/transport/plugin_transport_wlan.c:2303
+#: src/transport/plugin_transport_wlan.c:1193
+#: src/transport/plugin_transport_wlan.c:1284
+#: src/transport/plugin_transport_wlan.c:2305
 #, fuzzy
 msgid "# MAC endpoints allocated"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/transport/plugin_transport_wlan.c:1565
+#: src/transport/plugin_transport_wlan.c:1567
 #, fuzzy
 msgid "# ACKs received"
 msgstr "# các byte đã nhận qua TCP"
 
-#: src/transport/plugin_transport_wlan.c:1634
+#: src/transport/plugin_transport_wlan.c:1636
 #, fuzzy
 msgid "# DATA messages discarded due to CRC32 error"
 msgstr "# các thông báo được chắp liền"
 
-#: src/transport/plugin_transport_wlan.c:1738
+#: src/transport/plugin_transport_wlan.c:1740
 #, fuzzy
 msgid "# HELLO beacons sent"
 msgstr "# các byte đã gửi qua UDP"
 
-#: src/transport/plugin_transport_wlan.c:1854
+#: src/transport/plugin_transport_wlan.c:1856
 #, fuzzy
 msgid "# DATA messages received"
 msgstr "# các thông báo PONG đã mật mã được nhận"
 
-#: src/transport/plugin_transport_wlan.c:1888
+#: src/transport/plugin_transport_wlan.c:1890
 #, fuzzy
 msgid "# DATA messages processed"
 msgstr "# các thông báo PONG đã mật mã được nhận"
 
-#: src/transport/plugin_transport_wlan.c:2278
+#: src/transport/plugin_transport_wlan.c:2280
 #, c-format
 msgid "Helper binary `%s' not SUID, cannot run WLAN transport\n"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:2300
+#: src/transport/plugin_transport_wlan.c:2302
 #, fuzzy
 msgid "# sessions allocated"
 msgstr "# các khoá phiên chạy được chấp nhận"
 
-#: src/transport/plugin_transport_xt.c:4008
+#: src/transport/plugin_transport_xt.c:4010
 #, c-format
 msgid "XT transport listening on port %llu\n"
 msgstr ""
 
-#: src/transport/plugin_transport_xt.c:4012
+#: src/transport/plugin_transport_xt.c:4014
 msgid "XT transport not listening on any port (client only)\n"
 msgstr ""
 
-#: src/transport/plugin_transport_xt.c:4016
+#: src/transport/plugin_transport_xt.c:4018
 #, c-format
 msgid "XT transport advertises itself as being on port %llu\n"
 msgstr ""
 
-#: src/transport/plugin_transport_xt.c:4020
+#: src/transport/plugin_transport_xt.c:4022
 #, fuzzy
 msgid "# XT sessions active"
 msgstr "# các khoá phiên chạy được chấp nhận"
 
-#: src/transport/plugin_transport_xu.c:1235
+#: src/transport/plugin_transport_xu.c:1237
 #, c-format
 msgid ""
 "XU could not transmit message to `%s': Network seems down, please check your "
 "network configuration\n"
 msgstr ""
 
-#: src/transport/plugin_transport_xu.c:1249
+#: src/transport/plugin_transport_xu.c:1251
 msgid ""
 "XU could not transmit IPv6 message! Please check your network configuration "
 "and disable IPv6 if your connection does not have a global IPv6 address\n"
 msgstr ""
 
-#: src/transport/plugin_transport_xu.c:2123
-#: src/transport/plugin_transport_xu.c:2222
+#: src/transport/plugin_transport_xu.c:2125
+#: src/transport/plugin_transport_xu.c:2224
 #, fuzzy, c-format
 msgid "Failed to bind XU socket to %s: %s\n"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/transport/plugin_transport_xu.c:2232
+#: src/transport/plugin_transport_xu.c:2234
 #, fuzzy
 msgid "Failed to open XU sockets\n"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/transport/plugin_transport_xu.c:2396
+#: src/transport/plugin_transport_xu.c:2398
 #, fuzzy
 msgid "Failed to create XU network sockets\n"
 msgstr "Không thể tạo miền tên.\n"
 
-#: src/transport/tcp_connection_legacy.c:450
+#: src/transport/tcp_connection_legacy.c:452
 #, fuzzy, c-format
 msgid "Access denied to `%s'\n"
 msgstr "Không đủ quyền cho « %s ».\n"
 
-#: src/transport/tcp_connection_legacy.c:467
+#: src/transport/tcp_connection_legacy.c:469
 #, c-format
 msgid "Accepting connection from `%s': %p\n"
 msgstr ""
 
-#: src/transport/tcp_server_legacy.c:472 src/util/service.c:1109
+#: src/transport/tcp_server_legacy.c:474 src/util/service.c:1666
 #, fuzzy, c-format
 msgid "`%s' failed for port %d (%s).\n"
 msgstr "« %s » thất bại cho ổ đĩa « %s »: %u\n"
 
-#: src/transport/tcp_server_legacy.c:482 src/util/service.c:1119
+#: src/transport/tcp_server_legacy.c:484 src/util/service.c:1676
 #, fuzzy, c-format
 msgid "`%s' failed for port %d (%s): address already in use\n"
 msgstr "« %s » bị lỗi cho cổng %d. Trình gnunetd có chạy chưa?\n"
 
-#: src/transport/tcp_server_legacy.c:488 src/util/service.c:1125
+#: src/transport/tcp_server_legacy.c:490 src/util/service.c:1682
 #, fuzzy, c-format
 msgid "`%s' failed for `%s': address already in use\n"
 msgstr "« %s » bị lỗi cho cổng %d. Trình gnunetd có chạy chưa?\n"
 
-#: src/transport/tcp_server_legacy.c:888
+#: src/transport/tcp_server_legacy.c:890
 #, c-format
 msgid ""
 "Processing code for message of type %u did not call "
 "`GNUNET_SERVER_receive_done' after %s\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:337 src/util/service.c:2378
+#: src/transport/tcp_service_legacy.c:339 src/util/service.c:870
 #, fuzzy, c-format
 msgid "Unknown address family %d\n"
 msgstr "\tKhông rõ miền tên « %s »\n"
 
-#: src/transport/tcp_service_legacy.c:344
+#: src/transport/tcp_service_legacy.c:346
 #, c-format
 msgid "Access from `%s' denied to service `%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:400 src/util/service.c:437
+#: src/transport/tcp_service_legacy.c:402 src/util/service.c:994
 #, c-format
 msgid "Could not parse IPv4 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:438 src/util/service.c:480
+#: src/transport/tcp_service_legacy.c:440 src/util/service.c:1037
 #, c-format
 msgid "Could not parse IPv6 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:902 src/util/service.c:1040
+#: src/transport/tcp_service_legacy.c:904 src/util/service.c:1597
 msgid "Could not access a pre-bound socket, will try to bind myself\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:951
-#: src/transport/tcp_service_legacy.c:969 src/util/service.c:1192
+#: src/transport/tcp_service_legacy.c:953
+#: src/transport/tcp_service_legacy.c:971 src/util/service.c:1750
 #, c-format
 msgid "Specified value for `%s' of service `%s' is invalid\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:994 src/util/service.c:1224
+#: src/transport/tcp_service_legacy.c:996 src/util/service.c:1783
 #, c-format
 msgid "Could not access pre-bound socket %u, will try to bind myself\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1159
+#: src/transport/tcp_service_legacy.c:1161
 #, fuzzy, c-format
 msgid "Failed to start `%s' at `%s'\n"
 msgstr "Lỗi chạy %s: %s %d\n"
 
-#: src/transport/tcp_service_legacy.c:1200
+#: src/transport/tcp_service_legacy.c:1202
 #, fuzzy, c-format
 msgid "Service `%s' runs at %s\n"
 msgstr "Đồng đẳng « %s » có mức tin cậy %8u\n"
 
-#: src/transport/tcp_service_legacy.c:1249 src/util/service.c:1498
+#: src/transport/tcp_service_legacy.c:1251 src/util/service.c:2057
 msgid "Service process failed to initialize\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1253 src/util/service.c:1502
+#: src/transport/tcp_service_legacy.c:1255 src/util/service.c:2061
 msgid "Service process could not initialize server function\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1257 src/util/service.c:1506
+#: src/transport/tcp_service_legacy.c:1259 src/util/service.c:2065
 msgid "Service process failed to report status\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1311 src/util/disk.c:1521
-#: src/util/service.c:1376
+#: src/transport/tcp_service_legacy.c:1313 src/util/disk.c:1525
+#: src/util/service.c:1935
 #, 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"
 
-#: src/transport/tcp_service_legacy.c:1312 src/util/service.c:1378
+#: src/transport/tcp_service_legacy.c:1314 src/util/service.c:1937
 msgid "No such user"
 msgstr "Không có người dùng như vậy"
 
-#: src/transport/tcp_service_legacy.c:1325 src/util/service.c:1397
+#: src/transport/tcp_service_legacy.c:1327 src/util/service.c:1956
 #, c-format
 msgid "Cannot change user/group to `%s': %s\n"
 msgstr "Không thể thay đổi người dùng/nhóm thành « %s »: %s\n"
 
-#: src/transport/tcp_service_legacy.c:1396 src/util/service.c:1757
+#: src/transport/tcp_service_legacy.c:1398 src/util/service.c:2318
 msgid "do daemonize (detach from terminal)"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1446 src/util/program.c:277
-#: src/util/service.c:1820
+#: src/transport/tcp_service_legacy.c:1448 src/util/service.c:2382
+#: src/util/service.c:2397
 #, fuzzy, c-format
 msgid "Malformed configuration file `%s', exit ...\n"
 msgstr "Không thể lưu tập tin cấu hình « %s »:"
 
-#: src/transport/tcp_service_legacy.c:1456 src/util/program.c:297
-#: src/util/service.c:1831
+#: src/transport/tcp_service_legacy.c:1458 src/util/service.c:2409
 #, fuzzy
 msgid "Malformed configuration, exit ...\n"
 msgstr "Không thể lưu tập tin cấu hình « %s »:"
 
-#: src/transport/tcp_service_legacy.c:1461 src/util/program.c:290
-#: src/util/service.c:1837
+#: src/transport/tcp_service_legacy.c:1463
 #, fuzzy, c-format
 msgid "Could not access configuration file `%s'\n"
 msgstr "Không thể truy cập đến tập tin gnunet-directory « %s »\n"
 
-#: src/util/bio.c:179 src/util/bio.c:187
+#: src/transport/transport_api2_communication.c:764
+msgid "Dropped backchanel message: handler not provided by communicator\n"
+msgstr ""
+
+#: src/util/bio.c:181 src/util/bio.c:189
 #, fuzzy, c-format
 msgid "Error reading `%s': %s"
 msgstr "Gặp lỗi khi tạo người dùng"
 
-#: src/util/bio.c:189
+#: src/util/bio.c:191
 msgid "End of file"
 msgstr ""
 
-#: src/util/bio.c:246
+#: src/util/bio.c:248
 #, c-format
 msgid "Error reading length of string `%s'"
 msgstr ""
 
-#: src/util/bio.c:256
+#: src/util/bio.c:258
 #, c-format
 msgid "String `%s' longer than allowed (%u > %u)"
 msgstr ""
 
-#: src/util/bio.c:304
+#: src/util/bio.c:306
 #, c-format
 msgid "Serialized metadata `%s' larger than allowed (%u>%u)"
 msgstr ""
 
-#: src/util/bio.c:326
+#: src/util/bio.c:328
 #, c-format
 msgid "Metadata `%s' failed to deserialize"
 msgstr ""
 
-#: src/util/client.c:732
+#: src/util/client.c:734
 msgid "not a valid filename"
 msgstr ""
 
-#: src/util/client.c:923
+#: src/util/client.c:925
 #, c-format
 msgid "Need a non-empty hostname for service `%s'.\n"
 msgstr ""
 
-#: src/util/common_logging.c:257 src/util/common_logging.c:1159
+#: src/util/common_logging.c:259 src/util/common_logging.c:1162
 msgid "DEBUG"
 msgstr "GỠ LỖI"
 
-#: src/util/common_logging.c:259 src/util/common_logging.c:1157
+#: src/util/common_logging.c:261 src/util/common_logging.c:1160
 msgid "INFO"
 msgstr "TIN"
 
-#: src/util/common_logging.c:261 src/util/common_logging.c:1155
+#: src/util/common_logging.c:263 src/util/common_logging.c:1158
 msgid "MESSAGE"
 msgstr ""
 
-#: src/util/common_logging.c:263 src/util/common_logging.c:1153
+#: src/util/common_logging.c:265 src/util/common_logging.c:1156
 msgid "WARNING"
 msgstr "CẢNH BÁO"
 
-#: src/util/common_logging.c:265 src/util/common_logging.c:1151
+#: src/util/common_logging.c:267 src/util/common_logging.c:1154
 msgid "ERROR"
 msgstr "LỖI"
 
-#: src/util/common_logging.c:267 src/util/common_logging.c:1161
+#: src/util/common_logging.c:269 src/util/common_logging.c:1164
 msgid "NONE"
 msgstr ""
 
-#: src/util/common_logging.c:631 src/util/common_logging.c:661
+#: src/util/common_logging.c:633 src/util/common_logging.c:663
 #, c-format
 msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n"
 msgstr ""
 
-#: src/util/common_logging.c:895
+#: src/util/common_logging.c:898
 #, fuzzy, c-format
 msgid "Message `%.*s' repeated %u times in the last %s\n"
 msgstr "Thông điệp « %.*s » đã lặp lại %u lần trong %llu giây trước\n"
 
-#: src/util/common_logging.c:1162
+#: src/util/common_logging.c:1165
 msgid "INVALID"
 msgstr ""
 
-#: src/util/common_logging.c:1455
+#: src/util/common_logging.c:1458
 msgid "unknown address"
 msgstr ""
 
-#: src/util/common_logging.c:1497
+#: src/util/common_logging.c:1500
 msgid "invalid address"
 msgstr ""
 
-#: src/util/common_logging.c:1515
+#: src/util/common_logging.c:1518
 #, fuzzy, c-format
 msgid "Configuration fails to specify option `%s' in section `%s'!\n"
 msgstr ""
 "Cấu hình không thỏa mãn các ràng buộc của tập tin đặc tả cấu hình « %s ».\n"
 
-#: src/util/common_logging.c:1536
+#: src/util/common_logging.c:1539
 #, fuzzy, c-format
 msgid ""
 "Configuration specifies invalid value for option `%s' in section `%s': %s\n"
 msgstr ""
 "Cấu hình không thỏa mãn các ràng buộc của tập tin đặc tả cấu hình « %s ».\n"
 
-#: src/util/configuration.c:294
+#: src/util/configuration.c:331
 #, fuzzy, c-format
 msgid "Syntax error while deserializing in line %u\n"
 msgstr "Gặp lỗi cú pháp trong tập tin cấu hình « %s » tại dòng %d.\n"
 
-#: src/util/configuration.c:361
+#: src/util/configuration.c:398
 #, fuzzy, c-format
 msgid "Error while reading file `%s'\n"
 msgstr "Gặp lỗi khi tải xuống: %s\n"
 
-#: src/util/configuration.c:970
+#: src/util/configuration.c:1016
 #, fuzzy
 msgid "Not a valid relative time specification"
 msgstr "Giá trị cấu hình « %s » cho « %s » trong phần « %s » nên là con số\n"
 
-#: src/util/configuration.c:1059
+#: src/util/configuration.c:1105
 #, c-format
 msgid ""
 "Configuration value '%s' for '%s' in section '%s' is not in set of legal "
@@ -8555,126 +8373,126 @@ msgstr ""
 "Giá trị cấu hình « %s » cho « %s » trong phần « %s » không phải nằm trong "
 "tập hợp các sự chọn được phép\n"
 
-#: src/util/configuration.c:1178
+#: src/util/configuration.c:1224
 #, c-format
 msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n"
 msgstr ""
 
-#: src/util/configuration.c:1211
+#: src/util/configuration.c:1257
 #, fuzzy, c-format
 msgid "Missing closing `%s' in option `%s'\n"
 msgstr "Giá trị cấu hình « %s » cho « %s » trong phần « %s » nên là con số\n"
 
-#: src/util/configuration.c:1279
+#: src/util/configuration.c:1325
 #, c-format
 msgid ""
 "Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined "
 "as an environmental variable\n"
 msgstr ""
 
-#: src/util/container_bloomfilter.c:530
+#: src/util/container_bloomfilter.c:532
 #, c-format
 msgid ""
 "Size of file on disk is incorrect for this Bloom filter (want %llu, have "
 "%llu)\n"
 msgstr ""
 
-#: src/util/crypto_ecc.c:860
+#: src/util/crypto_ecc.c:862
 #, fuzzy, c-format
 msgid "ECC signing failed at %s:%d: %s\n"
 msgstr "%s bị lỗi tại %s:%d: « %s »\n"
 
-#: src/util/crypto_ecc.c:915
+#: src/util/crypto_ecc.c:917
 #, fuzzy, c-format
 msgid "EdDSA signing failed at %s:%d: %s\n"
 msgstr "%s bị lỗi tại %s:%d: « %s »\n"
 
-#: src/util/crypto_ecc.c:994
+#: src/util/crypto_ecc.c:996
 #, fuzzy, c-format
 msgid "ECDSA 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/crypto_ecc.c:1055
+#: src/util/crypto_ecc.c:1057
 #, fuzzy, c-format
 msgid "EdDSA 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/crypto_ecc_setup.c:121 src/util/crypto_ecc_setup.c:160
-#: src/util/crypto_ecc_setup.c:303 src/util/crypto_ecc_setup.c:350
+#: src/util/crypto_ecc_setup.c:123 src/util/crypto_ecc_setup.c:162
+#: src/util/crypto_ecc_setup.c:305 src/util/crypto_ecc_setup.c:352
 #, fuzzy, c-format
 msgid "Could not acquire lock on file `%s': %s...\n"
 msgstr "Lỗi mở tập tin theo dõi « %s »: %s\n"
 
-#: src/util/crypto_ecc_setup.c:127 src/util/crypto_ecc_setup.c:309
+#: src/util/crypto_ecc_setup.c:129 src/util/crypto_ecc_setup.c:311
 #, fuzzy
 msgid "Creating a new private key.  This may take a while.\n"
 msgstr "Đang tạo khoá máy mới (có thể hơi lâu).\n"
 
-#: src/util/crypto_ecc_setup.c:164 src/util/crypto_ecc_setup.c:354
+#: src/util/crypto_ecc_setup.c:166 src/util/crypto_ecc_setup.c:356
 msgid "This may be ok if someone is currently generating a private key.\n"
 msgstr ""
 
-#: src/util/crypto_ecc_setup.c:194 src/util/crypto_ecc_setup.c:396
+#: src/util/crypto_ecc_setup.c:196 src/util/crypto_ecc_setup.c:398
 #, c-format
 msgid ""
 "When trying to read key file `%s' I found %u bytes but I need at least %u.\n"
 msgstr ""
 
-#: src/util/crypto_ecc_setup.c:199 src/util/crypto_ecc_setup.c:400
+#: src/util/crypto_ecc_setup.c:201 src/util/crypto_ecc_setup.c:402
 msgid "This may be ok if someone is currently generating a key.\n"
 msgstr ""
 
-#: src/util/crypto_ecc_setup.c:466
+#: src/util/crypto_ecc_setup.c:468
 #, fuzzy
 msgid "Could not load peer's private key\n"
 msgstr "Không thể truy cập đến tập tin gnunet-directory « %s »\n"
 
-#: src/util/crypto_random.c:304
+#: src/util/crypto_random.c:306
 #, c-format
 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:848
+#: src/util/crypto_rsa.c:850
 #, fuzzy, c-format
 msgid "RSA signing failed at %s:%d: %s\n"
 msgstr "%s bị lỗi tại %s:%d: « %s »\n"
 
-#: src/util/crypto_rsa.c:1187
+#: src/util/crypto_rsa.c:1189
 #, 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:1251
+#: src/util/disk.c:1255
 #, c-format
 msgid "Expected `%s' to be a directory!\n"
 msgstr "Mong đợi « %s » là một thư mục.\n"
 
-#: src/util/dnsparser.c:250
+#: src/util/dnsparser.c:264
 #, fuzzy, c-format
 msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/util/dnsparser.c:940
+#: src/util/dnsparser.c:954
 #, fuzzy, c-format
 msgid "Failed to convert UTF-8 name `%s' to DNS IDNA format: %s\n"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/util/dnsstub.c:229
+#: src/util/dnsstub.c:231
 #, fuzzy, c-format
 msgid "Could not bind to any port: %s\n"
 msgstr "Không tìm thấy địa chỉ IP của máy « %s »: %s\n"
 
-#: src/util/dnsstub.c:360
+#: src/util/dnsstub.c:362
 #, c-format
 msgid "Received DNS response that is too small (%u bytes)"
 msgstr ""
 
-#: src/util/dnsstub.c:507
+#: src/util/dnsstub.c:509
 #, fuzzy, c-format
 msgid "Failed to send DNS request to %s: %s\n"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/util/dnsstub.c:513
+#: src/util/dnsstub.c:515
 #, fuzzy, c-format
 msgid "Sent DNS request to %s\n"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
@@ -8745,11 +8563,11 @@ msgstr ""
 msgid "Missing mandatory option `%s'.\n"
 msgstr "Giá trị cấu hình « %s » cho « %s » trong phần « %s » nên là con số\n"
 
-#: src/util/getopt_helpers.c:68
+#: src/util/getopt_helpers.c:70
 msgid "print the version number"
 msgstr "hiển thị số thứ tự phiên bản"
 
-#: src/util/getopt_helpers.c:113
+#: src/util/getopt_helpers.c:116
 #, c-format
 msgid ""
 "Arguments mandatory for long options are also mandatory for short options.\n"
@@ -8757,227 +8575,227 @@ msgstr ""
 "Mọi đối số bắt buộc phải sử dụng với tùy chọn dài cũng bắt buộc với tùy chọn "
 "ngắn.\n"
 
-#: src/util/getopt_helpers.c:201
+#: src/util/getopt_helpers.c:204
 msgid "print this help"
 msgstr "hiển thị trợ giúp này"
 
-#: src/util/getopt_helpers.c:279
+#: src/util/getopt_helpers.c:282
 msgid "be verbose"
 msgstr "xuất chi tiết"
 
-#: src/util/getopt_helpers.c:420
+#: src/util/getopt_helpers.c:423
 msgid "configure logging to use LOGLEVEL"
 msgstr "cấu hình chức năng ghi sự kiện để dùng CẤP_GHI_LƯU"
 
-#: src/util/getopt_helpers.c:500
+#: src/util/getopt_helpers.c:503
 #, fuzzy
 msgid "configure logging to write logs to FILENAME"
 msgstr "cấu hình chức năng ghi sự kiện để dùng CẤP_GHI_LƯU"
 
-#: src/util/getopt_helpers.c:522
+#: src/util/getopt_helpers.c:525
 #, fuzzy
 msgid "use configuration file FILENAME"
 msgstr "cập nhật một giá trị trong tập tin cấu hình"
 
-#: src/util/getopt_helpers.c:559 src/util/getopt_helpers.c:763
-#: src/util/getopt_helpers.c:830
+#: src/util/getopt_helpers.c:564 src/util/getopt_helpers.c:770
+#: src/util/getopt_helpers.c:839
 #, c-format
 msgid "You must pass a number to the `%s' option.\n"
 msgstr "Phải gửi một con số cho tùy chọn « %s ».\n"
 
-#: src/util/getopt_helpers.c:624
+#: src/util/getopt_helpers.c:629
 #, fuzzy, c-format
 msgid "You must pass relative time to the `%s' option.\n"
 msgstr "Phải gửi một con số cho tùy chọn « %s ».\n"
 
-#: src/util/getopt_helpers.c:690
+#: src/util/getopt_helpers.c:695
 #, fuzzy, c-format
 msgid "You must pass absolute time to the `%s' option.\n"
 msgstr "Phải gửi một con số cho tùy chọn « %s ».\n"
 
-#: src/util/getopt_helpers.c:754
+#: src/util/getopt_helpers.c:760
 #, c-format
 msgid "Your input for the '%s' option has to be a non negative number \n"
 msgstr ""
 
-#: src/util/getopt_helpers.c:837
+#: src/util/getopt_helpers.c:846
 #, fuzzy, c-format
 msgid "You must pass a number below %u to the `%s' option.\n"
 msgstr "Phải gửi một con số cho tùy chọn « %s ».\n"
 
-#: src/util/getopt_helpers.c:923
+#: src/util/getopt_helpers.c:932
 #, c-format
 msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n"
 msgstr ""
 
-#: src/util/gnunet-config.c:157
+#: src/util/gnunet-config.c:160
 #, fuzzy, c-format
 msgid "failed to load configuration defaults"
 msgstr "Không thể lưu tập tin cấu hình « %s »:"
 
-#: src/util/gnunet-config.c:170
+#: src/util/gnunet-config.c:173
 #, fuzzy, c-format
-msgid "--section argument is required\n"
+msgid "%s or %s argument is required\n"
 msgstr "đặt tên hiệu cần dùng (cần thiết)"
 
-#: src/util/gnunet-config.c:173
+#: src/util/gnunet-config.c:181
 #, c-format
 msgid "The following sections are available:\n"
 msgstr ""
 
-#: src/util/gnunet-config.c:224
+#: src/util/gnunet-config.c:232
 #, c-format
 msgid "--option argument required to set value\n"
 msgstr ""
 
-#: src/util/gnunet-config.c:263
+#: src/util/gnunet-config.c:286
 msgid "obtain option of value as a filename (with $-expansion)"
 msgstr ""
 
-#: src/util/gnunet-config.c:268
+#: src/util/gnunet-config.c:291
 msgid "name of the section to access"
 msgstr ""
 
-#: src/util/gnunet-config.c:273
+#: src/util/gnunet-config.c:296
 msgid "name of the option to access"
 msgstr ""
 
-#: src/util/gnunet-config.c:278
+#: src/util/gnunet-config.c:301
 msgid "value to set"
 msgstr ""
 
-#: src/util/gnunet-config.c:282
+#: src/util/gnunet-config.c:305
 #, fuzzy
 msgid "print available configuration sections"
 msgstr "Lưu cấu hình ngay bây giờ không?"
 
-#: src/util/gnunet-config.c:286
+#: src/util/gnunet-config.c:309
 msgid "write configuration file that only contains delta to defaults"
 msgstr ""
 
-#: src/util/gnunet-config.c:299
+#: src/util/gnunet-config.c:322
 #, fuzzy
 msgid "Manipulate GNUnet configuration files"
 msgstr "cập nhật một giá trị trong tập tin cấu hình"
 
-#: src/util/gnunet-ecc.c:92
+#: src/util/gnunet-ecc.c:94
 #, fuzzy, c-format
 msgid "Failed to open `%s': %s\n"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/util/gnunet-ecc.c:128
+#: src/util/gnunet-ecc.c:130
 #, c-format
 msgid "Generating %u keys like %s, please wait"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:141
+#: src/util/gnunet-ecc.c:143
 #, c-format
 msgid "Generating %u keys, please wait"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:182
+#: src/util/gnunet-ecc.c:184
 #, fuzzy, c-format
 msgid ""
 "\n"
 "Failed to write to `%s': %s\n"
 msgstr "Lỗi chạy %s: %s %d\n"
 
-#: src/util/gnunet-ecc.c:192
+#: src/util/gnunet-ecc.c:194
 #, c-format
 msgid ""
 "\n"
 "Finished!\n"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:195
+#: src/util/gnunet-ecc.c:197
 #, c-format
 msgid ""
 "\n"
 "Error, %u keys not generated\n"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:288
+#: src/util/gnunet-ecc.c:290
 #, fuzzy, c-format
 msgid "Hostkeys file `%s' not found\n"
 msgstr "Khoá phiên chạy từ đồng đẳng « %s » không thể được thẩm tra.\n"
 
-#: src/util/gnunet-ecc.c:303
+#: src/util/gnunet-ecc.c:305
 #, fuzzy, c-format
 msgid "Hostkeys file `%s' is empty\n"
 msgstr "Định dạng của tập tin « %s » là không hợp lệ.\n"
 
-#: src/util/gnunet-ecc.c:332
+#: src/util/gnunet-ecc.c:334
 #, fuzzy, c-format
 msgid "Could not read hostkey file: %s\n"
 msgstr "Không thể đọc danh sách bạn bè « %s »\n"
 
-#: src/util/gnunet-ecc.c:389
+#: src/util/gnunet-ecc.c:391
 msgid "No hostkey file specified on command line\n"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:454
+#: src/util/gnunet-ecc.c:456
 msgid "list keys included in a file (for testing)"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:459
+#: src/util/gnunet-ecc.c:461
 msgid "number of keys to list included in a file (for testing)"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:464
+#: src/util/gnunet-ecc.c:466
 msgid "create COUNT public-private key pairs (for testing)"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:468
+#: src/util/gnunet-ecc.c:470
 msgid "print the public key in ASCII format"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:472
+#: src/util/gnunet-ecc.c:474
 msgid "print the private key in ASCII format"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:476
+#: src/util/gnunet-ecc.c:478
 msgid "print the public key in HEX format"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:480
+#: src/util/gnunet-ecc.c:482
 msgid "print examples of ECC operations (used for compatibility testing)"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:496
+#: src/util/gnunet-ecc.c:498
 #, fuzzy
 msgid "Manipulate GNUnet private ECC key files"
 msgstr "cập nhật một giá trị trong tập tin cấu hình"
 
-#: src/util/gnunet-resolver.c:166
+#: src/util/gnunet-resolver.c:168
 msgid "perform a reverse lookup"
 msgstr ""
 
-#: src/util/gnunet-resolver.c:177
+#: src/util/gnunet-resolver.c:179
 msgid "Use build-in GNUnet stub resolver"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:240
+#: src/util/gnunet-scrypt.c:242
 #, c-format
 msgid "Loading hostkey from `%s' failed.\n"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:315
+#: src/util/gnunet-scrypt.c:317
 msgid "number of bits to require for the proof of work"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:320
+#: src/util/gnunet-scrypt.c:322
 msgid "file with private key, otherwise default is used"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:325
+#: src/util/gnunet-scrypt.c:327
 msgid "file with proof of work, otherwise default is used"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:330
+#: src/util/gnunet-scrypt.c:332
 msgid "time to wait between calculations"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:343
+#: src/util/gnunet-scrypt.c:345
 #, fuzzy
 msgid "Manipulate GNUnet proof of work files"
 msgstr "cập nhật một giá trị trong tập tin cấu hình"
@@ -8986,490 +8804,616 @@ msgstr "cập nhật một giá trị trong tập tin cấu hình"
 msgid "No DNS server available. DNS resolution will not be possible.\n"
 msgstr ""
 
-#: src/util/gnunet-uri.c:83
+#: src/util/gnunet-uri.c:85
 #, c-format
 msgid "No URI specified on command line\n"
 msgstr ""
 
-#: src/util/gnunet-uri.c:89
+#: src/util/gnunet-uri.c:91
 #, fuzzy, c-format
 msgid "Invalid URI: does not start with `%s'\n"
 msgstr "Ký hiệu mạng sai (không kết thúc với « ; »: « %s »)\n"
 
-#: src/util/gnunet-uri.c:96
+#: src/util/gnunet-uri.c:98
 #, c-format
 msgid "Invalid URI: fails to specify subsystem\n"
 msgstr ""
 
-#: src/util/gnunet-uri.c:106
+#: src/util/gnunet-uri.c:108
 #, c-format
 msgid "No handler known for subsystem `%s'\n"
 msgstr ""
 
-#: src/util/gnunet-uri.c:168
+#: src/util/gnunet-uri.c:170
 msgid "Perform default-actions for GNUnet URIs"
 msgstr ""
 
-#: src/util/helper.c:333
+#: src/util/helper.c:335
 #, fuzzy, c-format
 msgid "Error reading from `%s': %s\n"
 msgstr "Gặp lỗi khi tạo người dùng"
 
-#: src/util/helper.c:384
+#: src/util/helper.c:386
 #, fuzzy, c-format
 msgid "Failed to parse inbound message from helper `%s'\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/util/helper.c:604
+#: src/util/helper.c:606
 #, fuzzy, c-format
 msgid "Error writing to `%s': %s\n"
 msgstr "Gặp lỗi khi tạo người dùng"
 
-#: src/util/network.c:134
+#: src/util/network.c:136
 #, c-format
 msgid "Unable to shorten unix path `%s' while keeping name unique\n"
 msgstr ""
 
-#: src/util/network.c:1793 src/util/network.c:1977
+#: src/util/network.c:1794 src/util/network.c:1978
 #, c-format
 msgid ""
 "Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n"
 msgstr ""
 
-#: src/util/os_installation.c:507
+#: src/util/os_installation.c:509
 #, c-format
 msgid ""
 "Could not determine installation path for %s.  Set `%s' environment "
 "variable.\n"
 msgstr ""
 
-#: src/util/os_installation.c:879
+#: src/util/os_installation.c:881
 #, fuzzy, c-format
 msgid "Could not find binary `%s' in PATH!\n"
 msgstr "Không thể đọc danh sách bạn bè « %s »\n"
 
-#: src/util/os_installation.c:920
+#: src/util/os_installation.c:922
 #, c-format
 msgid "Binary `%s' exists, but is not SUID\n"
 msgstr ""
 
-#: src/util/os_installation.c:951
+#: src/util/os_installation.c:953
 #, fuzzy, c-format
 msgid "CreateProcess failed for binary %s (%d).\n"
 msgstr "« %s » thất bại cho ổ đĩa « %s »: %u\n"
 
-#: src/util/os_installation.c:961
+#: src/util/os_installation.c:963
 #, c-format
 msgid "GetExitCodeProcess failed for binary %s (%d).\n"
 msgstr ""
 
-#: src/util/plugin.c:84
+#: src/util/plugin.c:86
 #, c-format
 msgid "Initialization of plugin mechanism failed: %s!\n"
 msgstr "Lỗi sơ khởi cơ chế phần bổ sung: %s\n"
 
-#: src/util/plugin.c:149
+#: src/util/plugin.c:151
 #, c-format
 msgid "`%s' failed to resolve method '%s' with error: %s\n"
 msgstr "« %s » không giải quyết được phương pháp « %s », với lỗi: %s\n"
 
-#: src/util/plugin.c:224
+#: src/util/plugin.c:226
 #, c-format
 msgid "`%s' failed for library `%s' with error: %s\n"
 msgstr "« %s » thất bại cho thư viện « %s » với lỗi: %s\n"
 
-#: src/util/plugin.c:383
+#: src/util/plugin.c:385
 #, fuzzy
 msgid "Could not determine plugin installation path.\n"
 msgstr "Không thể truy cập đến thông tin về không gian tên.\n"
 
-#: src/util/regex.c:132
+#: src/util/program.c:283
+#, fuzzy, c-format
+msgid "Unreadable or malformed configuration file `%s', exit ...\n"
+msgstr "Không thể lưu tập tin cấu hình « %s »:"
+
+#: src/util/program.c:301
+#, fuzzy, c-format
+msgid "Unreadable or malformed default configuration file `%s', exit ...\n"
+msgstr "Không thể lưu tập tin cấu hình « %s »:"
+
+#: src/util/program.c:318
+#, fuzzy
+msgid "Unreadable or malformed configuration, exit ...\n"
+msgstr "Không thể lưu tập tin cấu hình « %s »:"
+
+#: src/util/regex.c:134
 #, c-format
 msgid "Bad mask: %d\n"
 msgstr ""
 
-#: src/util/resolver_api.c:216
+#: src/util/resolver_api.c:218
 #, c-format
 msgid ""
 "Missing `%s' for `%s' in configuration, DNS resolution will be unavailable.\n"
 msgstr ""
 
-#: src/util/resolver_api.c:237
+#: src/util/resolver_api.c:239
 #, c-format
 msgid ""
 "Missing `%s' or numeric IP address for `%s' of `%s' in configuration, DNS "
 "resolution will be unavailable.\n"
 msgstr ""
 
-#: src/util/resolver_api.c:873
+#: src/util/resolver_api.c:875
 #, fuzzy, c-format
 msgid "Timeout trying to resolve hostname `%s'.\n"
 msgstr "không quyết định các tên máy"
 
-#: src/util/resolver_api.c:886
+#: src/util/resolver_api.c:888
 #, fuzzy, c-format
 msgid "Timeout trying to resolve IP address `%s'.\n"
 msgstr "GNUnet bây giờ sử dụng địa chỉ IP %s.\n"
 
-#: src/util/resolver_api.c:1071
+#: src/util/resolver_api.c:1073
 msgid "Resolver not configured correctly.\n"
 msgstr ""
 
-#: src/util/resolver_api.c:1158 src/util/resolver_api.c:1181
-#: src/util/resolver_api.c:1195
+#: src/util/resolver_api.c:1160 src/util/resolver_api.c:1183
+#: src/util/resolver_api.c:1197
 #, fuzzy, c-format
 msgid "Could not resolve our FQDN: %s\n"
 msgstr "Không thể giải quyết « %s » (%s): %s\n"
 
-#: src/util/service.c:1303
-msgid ""
-"Could not bind to any of the ports I was supposed to, refusing to run!\n"
-msgstr ""
-
-#: src/util/service.c:2123
+#: src/util/service.c:674
 #, c-format
 msgid ""
 "Processing code for message of type %u did not call "
 "`GNUNET_SERVICE_client_continue' after %s\n"
 msgstr ""
 
-#: src/util/signal.c:87
+#: src/util/service.c:1862
+msgid ""
+"Could not bind to any of the ports I was supposed to, refusing to run!\n"
+msgstr ""
+
+#: src/util/signal.c:89
 #, c-format
 msgid "signal (%d, %p) returned %d.\n"
 msgstr ""
 
-#: src/util/socks.c:595
+#: src/util/socks.c:597
 #, c-format
 msgid "Attempting to use invalid port %d as SOCKS proxy for service `%s'.\n"
 msgstr ""
 
-#: src/util/socks.c:614
+#: src/util/socks.c:616
 #, c-format
 msgid "Attempting to proxy service `%s' to invalid port %d or hostname.\n"
 msgstr ""
 
-#: src/util/strings.c:174
+#: src/util/strings.c:176
 msgid "b"
 msgstr "b"
 
-#: src/util/strings.c:471
+#: src/util/strings.c:475
 #, c-format
 msgid "Character sets requested were `%s'->`%s'\n"
 msgstr ""
 
-#: src/util/strings.c:598
+#: src/util/strings.c:602
 msgid "Failed to expand `$HOME': environment variable `HOME' not set"
 msgstr ""
 "Lỗi mở rộng biến môi trường « $HOME »: chưa đặt biến môi trường « HOME »"
 
-#: src/util/strings.c:702
+#: src/util/strings.c:706
 msgid "µs"
 msgstr ""
 
-#: src/util/strings.c:706
+#: src/util/strings.c:710
 msgid "forever"
 msgstr ""
 
-#: src/util/strings.c:708
+#: src/util/strings.c:712
 msgid "0 ms"
 msgstr ""
 
-#: src/util/strings.c:714
+#: src/util/strings.c:718
 msgid "ms"
 msgstr "mg"
 
-#: src/util/strings.c:720
+#: src/util/strings.c:724
 msgid "s"
 msgstr "g"
 
-#: src/util/strings.c:726
+#: src/util/strings.c:730
 msgid "m"
 msgstr "p"
 
-#: src/util/strings.c:732
+#: src/util/strings.c:736
 msgid "h"
 msgstr "g"
 
-#: src/util/strings.c:739
+#: src/util/strings.c:743
 #, fuzzy
 msgid "day"
 msgstr " ngày"
 
-#: src/util/strings.c:741
+#: src/util/strings.c:745
 #, fuzzy
 msgid "days"
 msgstr " ngày"
 
-#: src/util/strings.c:770
+#: src/util/strings.c:774
 msgid "end of time"
 msgstr ""
 
-#: src/util/strings.c:1272
+#: src/util/strings.c:1277
 msgid "IPv6 address did not start with `['\n"
 msgstr ""
 
-#: src/util/strings.c:1280
+#: src/util/strings.c:1285
 msgid "IPv6 address did contain ':' to separate port number\n"
 msgstr ""
 
-#: src/util/strings.c:1286
+#: src/util/strings.c:1291
 msgid "IPv6 address did contain ']' before ':' to separate port number\n"
 msgstr ""
 
-#: src/util/strings.c:1293
+#: src/util/strings.c:1301
 msgid "IPv6 address did contain a valid port number after the last ':'\n"
 msgstr ""
 
-#: src/util/strings.c:1302
+#: src/util/strings.c:1310
 #, fuzzy, c-format
 msgid "Invalid IPv6 address `%s': %s\n"
 msgstr "Mức ưu tiên tiến trình không hợp lê « %s ».\n"
 
-#: src/util/strings.c:1574 src/util/strings.c:1590
+#: src/util/strings.c:1586 src/util/strings.c:1602
 msgid "Port not in range\n"
 msgstr ""
 
-#: src/util/strings.c:1599
+#: src/util/strings.c:1611
 #, fuzzy, c-format
 msgid "Malformed port policy `%s'\n"
 msgstr "Lỗi bắt đầu thu thập.\n"
 
-#: src/util/strings.c:1682 src/util/strings.c:1713 src/util/strings.c:1761
-#: src/util/strings.c:1782
+#: src/util/strings.c:1696 src/util/strings.c:1728 src/util/strings.c:1777
+#: src/util/strings.c:1798
 #, c-format
 msgid "Invalid format for IP: `%s'\n"
 msgstr "Địa chỉ IP định dạng sai: %s\n"
 
-#: src/util/strings.c:1739
+#: src/util/strings.c:1754
 #, c-format
 msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)."
 msgstr "Ký hiệu mạng sai (« /%d » không hợp lệ trong CIDR IPv4)."
 
-#: src/util/strings.c:1791
+#: src/util/strings.c:1807
 #, fuzzy, c-format
 msgid "Invalid format: `%s'\n"
 msgstr "Địa chỉ IP định dạng sai: %s\n"
 
-#: src/util/strings.c:1843
+#: src/util/strings.c:1860
 #, c-format
 msgid "Invalid network notation (does not end with ';': `%s')\n"
 msgstr "Ký hiệu mạng sai (không kết thúc với « ; »: « %s »)\n"
 
-#: src/util/strings.c:1893
+#: src/util/strings.c:1914
 #, fuzzy, c-format
 msgid "Wrong format `%s' for netmask\n"
 msgstr "Mặt nạ mạng có định dạng sai « %s »: %s\n"
 
-#: src/util/strings.c:1924
+#: src/util/strings.c:1945
 #, fuzzy, c-format
 msgid "Wrong format `%s' for network\n"
 msgstr "Mạng có định dạng sai « %s »: %s\n"
 
-#: src/vpn/gnunet-service-vpn.c:538 src/vpn/gnunet-service-vpn.c:1805
+#: src/util/time.c:828 src/util/time.c:860
+#, c-format
+msgid "Failed to map `%s', cannot assure monotonic time!\n"
+msgstr ""
+
+#: src/util/time.c:866
+#, c-format
+msgid ""
+"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
+msgstr ""
+
+#: src/vpn/gnunet-service-vpn.c:540 src/vpn/gnunet-service-vpn.c:1807
 #, fuzzy
 msgid "# Active channels"
 msgstr "# các kết nối dht"
 
-#: src/vpn/gnunet-service-vpn.c:597
+#: src/vpn/gnunet-service-vpn.c:599
 #, fuzzy
 msgid "# Messages dropped in cadet queue (overflow)"
 msgstr "# các byte loại bỏ bởi UDP (đi ra)"
 
-#: src/vpn/gnunet-service-vpn.c:751
+#: src/vpn/gnunet-service-vpn.c:753
 #, fuzzy
 msgid "# ICMP packets received from cadet"
 msgstr "# các đáp ứng lỗ hổng được gửi cho trình/máy khách"
 
-#: src/vpn/gnunet-service-vpn.c:1094
+#: src/vpn/gnunet-service-vpn.c:1096
 #, fuzzy
 msgid "# UDP packets received from cadet"
 msgstr "# các đáp ứng lỗ hổng được gửi cho trình/máy khách"
 
-#: src/vpn/gnunet-service-vpn.c:1253
+#: src/vpn/gnunet-service-vpn.c:1255
 #, fuzzy
 msgid "# TCP packets received from cadet"
 msgstr "# các đáp ứng lỗ hổng được gửi cho trình/máy khách"
 
-#: src/vpn/gnunet-service-vpn.c:1465
+#: src/vpn/gnunet-service-vpn.c:1467
 #, fuzzy
 msgid "# Cadet channels created"
 msgstr "# các truy vấn lỗ hổng được định tuyến"
 
-#: src/vpn/gnunet-service-vpn.c:1685
+#: src/vpn/gnunet-service-vpn.c:1687
 #, c-format
 msgid "Protocol %u not supported, dropping\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:1824
+#: src/vpn/gnunet-service-vpn.c:1826
 #, fuzzy
 msgid "# Packets dropped (channel not yet online)"
 msgstr "# các byte loại bỏ bởi UDP (đi ra)"
 
-#: src/vpn/gnunet-service-vpn.c:2004
+#: src/vpn/gnunet-service-vpn.c:2006
 msgid "# ICMPv4 packets dropped (not allowed)"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2025
+#: src/vpn/gnunet-service-vpn.c:2027
 msgid "# ICMPv6 packets dropped (not allowed)"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2233
+#: src/vpn/gnunet-service-vpn.c:2235
 #, fuzzy
 msgid "# Packets received from TUN interface"
 msgstr "# các đáp ứng lỗ hổng được gửi cho trình/máy khách"
 
-#: src/vpn/gnunet-service-vpn.c:2266 src/vpn/gnunet-service-vpn.c:2302
+#: src/vpn/gnunet-service-vpn.c:2268 src/vpn/gnunet-service-vpn.c:2304
 #, c-format
 msgid "Packet received for unmapped destination `%s' (dropping it)\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2312
+#: src/vpn/gnunet-service-vpn.c:2314
 msgid "Received IPv4 packet with options (dropping it)\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2326
+#: src/vpn/gnunet-service-vpn.c:2328
 #, c-format
 msgid "Received packet of unknown protocol %d from TUN (dropping it)\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2365
+#: src/vpn/gnunet-service-vpn.c:2367
 msgid "Failed to find unallocated IPv4 address in VPN's range\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2420
+#: src/vpn/gnunet-service-vpn.c:2422
 msgid "Failed to find unallocated IPv6 address in VPN's range\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2462 src/vpn/gnunet-service-vpn.c:2684
+#: src/vpn/gnunet-service-vpn.c:2464 src/vpn/gnunet-service-vpn.c:2686
 #, fuzzy
 msgid "# Active destinations"
 msgstr "# các kết nối dht"
 
-#: src/vpn/gnunet-service-vpn.c:2733
+#: src/vpn/gnunet-service-vpn.c:2735
 msgid "Failed to allocate IP address for new destination\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2996
+#: src/vpn/gnunet-service-vpn.c:2998
 #, fuzzy
 msgid "Must specify valid IPv6 address"
 msgstr "« %s » không sẵn sàng.\n"
 
-#: src/vpn/gnunet-service-vpn.c:3020
+#: src/vpn/gnunet-service-vpn.c:3022
 msgid "Must specify valid IPv6 mask"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:3028
+#: src/vpn/gnunet-service-vpn.c:3030
 msgid "IPv6 support disabled as this system does not support IPv6\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:3041
+#: src/vpn/gnunet-service-vpn.c:3043
 #, fuzzy
 msgid "Must specify valid IPv4 address"
 msgstr "« %s » không sẵn sàng.\n"
 
-#: src/vpn/gnunet-service-vpn.c:3054
+#: src/vpn/gnunet-service-vpn.c:3056
 msgid "Must specify valid IPv4 mask"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:3064
+#: src/vpn/gnunet-service-vpn.c:3066
 msgid "IPv4 support disabled as this system does not support IPv4\n"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:145
+#: src/vpn/gnunet-vpn.c:147
 #, fuzzy
 msgid "Error creating tunnel\n"
 msgstr "Hoàn thành tạo khoá.\n"
 
-#: src/vpn/gnunet-vpn.c:189 src/vpn/gnunet-vpn.c:220
+#: src/vpn/gnunet-vpn.c:191 src/vpn/gnunet-vpn.c:222
 #, fuzzy, c-format
 msgid "Option `%s' makes no sense with 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/vpn/gnunet-vpn.c:202
+#: src/vpn/gnunet-vpn.c:204
 #, fuzzy, c-format
 msgid "Option `%s' or `%s' is required.\n"
 msgstr "Bị từ chối đặt tùy chọn « %s » trong phần « %s » thành « %s ».\n"
 
-#: src/vpn/gnunet-vpn.c:214
+#: src/vpn/gnunet-vpn.c:216
 #, fuzzy, c-format
 msgid "Option `%s' or `%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/vpn/gnunet-vpn.c:234
+#: src/vpn/gnunet-vpn.c:236
 #, fuzzy, c-format
 msgid "`%s' is not a valid peer identifier.\n"
 msgstr "« %s » không sẵn sàng.\n"
 
-#: src/vpn/gnunet-vpn.c:254
+#: src/vpn/gnunet-vpn.c:256
 #, fuzzy, c-format
 msgid "`%s' is not a valid IP address.\n"
 msgstr "« %s » không sẵn sàng.\n"
 
-#: src/vpn/gnunet-vpn.c:290
+#: src/vpn/gnunet-vpn.c:292
 msgid "request that result should be an IPv4 address"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:295
+#: src/vpn/gnunet-vpn.c:297
 msgid "request that result should be an IPv6 address"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:301
+#: src/vpn/gnunet-vpn.c:303
 msgid "how long should the mapping be valid for new tunnels?"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:307
+#: src/vpn/gnunet-vpn.c:309
 msgid "destination IP for the tunnel"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:313
+#: src/vpn/gnunet-vpn.c:315
 msgid "peer offering the service we would like to access"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:319
+#: src/vpn/gnunet-vpn.c:321
 msgid "name of the service we would like to access"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:324
+#: src/vpn/gnunet-vpn.c:326
 #, fuzzy
 msgid "service is offered via TCP"
 msgstr "# các byte đã nhận qua TCP"
 
-#: src/vpn/gnunet-vpn.c:329
+#: src/vpn/gnunet-vpn.c:331
 #, fuzzy
 msgid "service is offered via UDP"
 msgstr "# các byte đã nhận qua UDP"
 
-#: src/vpn/gnunet-vpn.c:342
+#: src/vpn/gnunet-vpn.c:344
 msgid "Setup tunnels via VPN."
 msgstr ""
 
-#: src/zonemaster/gnunet-service-zonemaster.c:836
-#: src/zonemaster/gnunet-service-zonemaster-monitor.c:414
+#: src/zonemaster/gnunet-service-zonemaster.c:838
+#: src/zonemaster/gnunet-service-zonemaster-monitor.c:416
 #, fuzzy
 msgid "Failed to connect to the namestore!\n"
 msgstr "Không kết nối được đến trình nền gnunetd."
 
-#: src/include/gnunet_common.h:770 src/include/gnunet_common.h:777
-#: src/include/gnunet_common.h:787
+#: src/include/gnunet_common.h:772 src/include/gnunet_common.h:779
+#: src/include/gnunet_common.h:789
 #, fuzzy, c-format
 msgid "Assertion failed at %s:%d. Aborting.\n"
 msgstr "Lỗi nội bộ : khẳng định không thành công tại %s:%d.\n"
 
-#: src/include/gnunet_common.h:795
+#: src/include/gnunet_common.h:797
 #, fuzzy, c-format
 msgid "Assertion failed at %s:%d.\n"
 msgstr "Lỗi nội bộ : khẳng định không thành công tại %s:%d.\n"
 
-#: src/include/gnunet_common.h:807
+#: src/include/gnunet_common.h:809
 #, fuzzy, c-format
 msgid "External protocol violation detected at %s:%d.\n"
 msgstr "Lỗi nội bộ : khẳng định không thành công tại %s:%d.\n"
 
-#: src/include/gnunet_common.h:834 src/include/gnunet_common.h:843
+#: src/include/gnunet_common.h:836 src/include/gnunet_common.h:845
 #, c-format
 msgid "`%s' failed on file `%s' at %s:%d with error: %s\n"
 msgstr "« %s » thất bại ở tập tin « %s » tại %s:%d với lỗi: %s\n"
 
+#, fuzzy
+#~ msgid "Invalid tunnel owner `%s'\n"
+#~ msgstr "Địa chỉ IP định dạng sai: %s\n"
+
+#, fuzzy
+#~ msgid "Provide information about a particular tunnel"
+#~ msgstr "In ra thông tin về các đồng đẳng GNUnet."
+
+#, fuzzy
+#~ msgid "Failed to store membership information!\n"
+#~ msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
+
+#, fuzzy
+#~ msgid "Failed to test membership!\n"
+#~ msgstr "Lỗi lấy thông kê về truyền tải.\n"
+
+#, fuzzy
+#~ msgid "Dropping invalid fragment\n"
+#~ msgstr "Đối số không hợp lệ cho « %s ».\n"
+
+#, fuzzy
+#~ msgid "Failed to store fragment\n"
+#~ msgstr "Lỗi bắt đầu thu thập.\n"
+
+#, fuzzy
+#~ msgid "Failed to get fragment!\n"
+#~ msgstr "Lỗi lấy thông kê về truyền tải.\n"
+
+#, fuzzy
+#~ msgid "Failed to get message!\n"
+#~ msgstr "Lỗi lấy thông kê về truyền tải.\n"
+
+#, fuzzy
+#~ msgid "Failed to get message fragment!\n"
+#~ msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
+
+#, fuzzy
+#~ msgid "Failed to get master counters!\n"
+#~ msgstr "Lỗi lấy thông kê về truyền tải.\n"
+
+#, fuzzy
+#~ msgid "Failed to begin modifying state: %d\n"
+#~ msgstr "Lỗi bắt đầu thu thập.\n"
+
+#, fuzzy
+#~ msgid "Failed to modify state: %d\n"
+#~ msgstr "Lỗi bắt đầu thu thập.\n"
+
+#, fuzzy
+#~ msgid "Failed to end modifying state!\n"
+#~ msgstr "Lỗi bắt đầu thu thập.\n"
+
+#, fuzzy
+#~ msgid "Failed to begin synchronizing state!\n"
+#~ msgstr "Lỗi lấy thông kê về truyền tải.\n"
+
+#, fuzzy
+#~ msgid "Failed to end synchronizing state!\n"
+#~ msgstr "Lỗi lấy thông kê về truyền tải.\n"
+
+#, fuzzy
+#~ msgid "Failed to reset state!\n"
+#~ msgstr "Lỗi lấy thông kê về truyền tải.\n"
+
+#, fuzzy
+#~ msgid "Failed to get state variable!\n"
+#~ msgstr "Lỗi lấy thông kê về truyền tải.\n"
+
+#, fuzzy
+#~ msgid "Unable to initialize Mysql.\n"
+#~ msgstr "Không thể sơ khởi SQLite: %s.\n"
+
+#, fuzzy
+#~ msgid "Failed to run SQL statement `%s'\n"
+#~ msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
+
+#, fuzzy
+#~ 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"
+
+#, fuzzy
+#~ msgid "SQLite database running\n"
+#~ msgstr "kho dữ liệu sqlite"
+
+#, fuzzy
+#~ msgid "--place missing or invalid.\n"
+#~ msgstr "Đối số không hợp lệ cho « %s ».\n"
+
+#, fuzzy
+#~ msgid "name or public key of ego"
+#~ msgstr "Đối số không hợp lệ cho « %s ».\n"
+
+#, fuzzy
+#~ msgid "wait for incoming messages"
+#~ msgstr "Lỗi gửi tin nhẳn.\n"
+
+#, fuzzy
+#~ msgid "number of messages to replay from history"
+#~ msgstr "số tin nhắn cần dùng mỗi lần lặp"
+
 #~ msgid "Could not resolve `%s' (%s): %s\n"
 #~ msgstr "Không thể giải quyết « %s » (%s): %s\n"
 
index d881d0591b8995cb64026866237a57ba8d507bc7..5f4fc20f63fe113a12bd53c60bb62e9b0f6973e8 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnunet-0.8.1\n"
 "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2018-10-20 11:13+0200\n"
+"POT-Creation-Date: 2019-02-13 00:37+0100\n"
 "PO-Revision-Date: 2011-07-09 12:12+0800\n"
 "Last-Translator: Wylmer Wang <wantinghard@gmail.com>\n"
 "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
@@ -16,1032 +16,1026 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: src/arm/gnunet-arm.c:154
+#: src/arm/gnunet-arm.c:156
 #, fuzzy, c-format
 msgid "Failed to remove configuration file %s\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/arm/gnunet-arm.c:160
+#: src/arm/gnunet-arm.c:162
 #, c-format
 msgid "Failed to remove servicehome directory %s\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:220 src/testbed/gnunet-service-testbed_peers.c:1137
+#: src/arm/gnunet-arm.c:222 src/testbed/gnunet-service-testbed_peers.c:1139
 msgid "Message was sent successfully"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:222 src/testbed/gnunet-service-testbed_peers.c:1139
+#: src/arm/gnunet-arm.c:224 src/testbed/gnunet-service-testbed_peers.c:1141
 msgid "We disconnected from ARM before we could send a request"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:224 src/testbed/gnunet-service-testbed_peers.c:1141
+#: src/arm/gnunet-arm.c:226 src/testbed/gnunet-service-testbed_peers.c:1143
 #, fuzzy
 msgid "Unknown request status"
 msgstr "未知的用户“%s”\n"
 
-#: src/arm/gnunet-arm.c:240
+#: src/arm/gnunet-arm.c:242
 #, fuzzy
 msgid "is stopped"
 msgstr "服务已删除。\n"
 
-#: src/arm/gnunet-arm.c:242
+#: src/arm/gnunet-arm.c:244
 msgid "is starting"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:244
+#: src/arm/gnunet-arm.c:246
 msgid "is stopping"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:246
+#: src/arm/gnunet-arm.c:248
 msgid "is starting already"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:248
+#: src/arm/gnunet-arm.c:250
 msgid "is stopping already"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:250
+#: src/arm/gnunet-arm.c:252
 msgid "is started already"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:252
+#: src/arm/gnunet-arm.c:254
 msgid "is stopped already"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:254
+#: src/arm/gnunet-arm.c:256
 #, fuzzy
 msgid "service is not known to ARM"
 msgstr "服务已删除。\n"
 
-#: src/arm/gnunet-arm.c:256
+#: src/arm/gnunet-arm.c:258
 #, fuzzy
 msgid "service failed to start"
 msgstr "运行 %s失败:%s %d\n"
 
-#: src/arm/gnunet-arm.c:258
+#: src/arm/gnunet-arm.c:260
 msgid "service cannot be manipulated because ARM is shutting down"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:260
+#: src/arm/gnunet-arm.c:262
 #, fuzzy
 msgid "Unknown result code."
 msgstr "未知的用户“%s”\n"
 
-#: src/arm/gnunet-arm.c:292
+#: src/arm/gnunet-arm.c:295
 msgid "Fatal error initializing ARM API.\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:320 src/arm/gnunet-arm.c:329
+#: src/arm/gnunet-arm.c:324 src/arm/gnunet-arm.c:333
 #, fuzzy, c-format
 msgid "Failed to start the ARM service: %s\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/arm/gnunet-arm.c:363
+#: src/arm/gnunet-arm.c:368
 #, fuzzy, c-format
 msgid "Failed to send a stop request to the ARM service: %s\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/arm/gnunet-arm.c:374
+#: src/arm/gnunet-arm.c:379
 #, fuzzy, c-format
 msgid "Failed to stop the ARM service: %s\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/arm/gnunet-arm.c:413
+#: src/arm/gnunet-arm.c:419
 #, fuzzy, c-format
 msgid "Failed to send a request to start the `%s' service: %s\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/arm/gnunet-arm.c:423
+#: src/arm/gnunet-arm.c:429
 #, fuzzy, c-format
 msgid "Failed to start the `%s' service: %s\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/arm/gnunet-arm.c:460
+#: src/arm/gnunet-arm.c:467
 #, fuzzy, c-format
 msgid "Failed to send a request to kill the `%s' service: %%s\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/arm/gnunet-arm.c:471
+#: src/arm/gnunet-arm.c:478
 #, fuzzy, c-format
 msgid "Failed to kill the `%s' service: %s\n"
 msgstr "运行 %s失败:%s %d\n"
 
-#: src/arm/gnunet-arm.c:511
+#: src/arm/gnunet-arm.c:519
 #, fuzzy, c-format
 msgid "Failed to request a list of services: %s\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/arm/gnunet-arm.c:520
+#: src/arm/gnunet-arm.c:528
 #, fuzzy
 msgid "Error communicating with ARM. ARM not running?\n"
 msgstr "连接 %s:%u 出错。守护程序在运行吗?\n"
 
-#: src/arm/gnunet-arm.c:526
+#: src/arm/gnunet-arm.c:534
 msgid "Running services:\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:614
+#: src/arm/gnunet-arm.c:623
 #, c-format
 msgid "Now only monitoring, press CTRL-C to stop.\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:646
+#: src/arm/gnunet-arm.c:656
 #, c-format
 msgid "Stopped %s.\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:649
+#: src/arm/gnunet-arm.c:659
 #, fuzzy, c-format
 msgid "Starting %s...\n"
 msgstr "未知的命令“%s”。\n"
 
-#: src/arm/gnunet-arm.c:652
+#: src/arm/gnunet-arm.c:662
 #, c-format
 msgid "Stopping %s...\n"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:666
+#: src/arm/gnunet-arm.c:676
 #, fuzzy, c-format
 msgid "Unknown status %u for service %s.\n"
 msgstr "未知的用户“%s”\n"
 
-#: src/arm/gnunet-arm.c:767
+#: src/arm/gnunet-arm.c:766
 #, fuzzy
 msgid "stop all GNUnet services"
 msgstr "卸载 GNUnet 服务"
 
-#: src/arm/gnunet-arm.c:773
+#: src/arm/gnunet-arm.c:771
 msgid "start a particular service"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:779
+#: src/arm/gnunet-arm.c:776
 msgid "stop a particular service"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:784
+#: src/arm/gnunet-arm.c:780
 #, fuzzy
 msgid "start all GNUnet default services"
 msgstr "卸载 GNUnet 服务"
 
-#: src/arm/gnunet-arm.c:789
+#: src/arm/gnunet-arm.c:784
 #, fuzzy
 msgid "stop and start all GNUnet default services"
 msgstr "卸载 GNUnet 服务"
 
-#: src/arm/gnunet-arm.c:793
+#: src/arm/gnunet-arm.c:788
 msgid "delete config file and directory on exit"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:798
+#: src/arm/gnunet-arm.c:792
 msgid "monitor ARM activities"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:803
+#: src/arm/gnunet-arm.c:796
 msgid "don't print status messages"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:809
+#: src/arm/gnunet-arm.c:801
 msgid "exit with error status if operation does not finish after DELAY"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:814
+#: src/arm/gnunet-arm.c:805
 msgid "list currently running services"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:819
+#: src/arm/gnunet-arm.c:809
 msgid "don't let gnunet-service-arm inherit standard output"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:824
+#: src/arm/gnunet-arm.c:813
 msgid "don't let gnunet-service-arm inherit standard error"
 msgstr ""
 
-#: src/arm/gnunet-arm.c:837
+#: src/arm/gnunet-arm.c:828
 msgid "Control services and the Automated Restart Manager (ARM)"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:386 src/transport/plugin_transport_tcp.c:1118
-#: src/transport/plugin_transport_xt.c:1118
-#: src/transport/tcp_service_legacy.c:555 src/util/service.c:610
+#: src/arm/gnunet-service-arm.c:388 src/transport/plugin_transport_tcp.c:1120
+#: src/transport/plugin_transport_xt.c:1120
+#: src/transport/tcp_service_legacy.c:557 src/util/service.c:1167
 #, c-format
 msgid ""
 "Disabling IPv6 support for service `%s', failed to create IPv6 socket: %s\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:410 src/arm/gnunet-service-arm.c:416
-#: src/transport/plugin_transport_tcp.c:1137
-#: src/transport/plugin_transport_tcp.c:1143
-#: src/transport/plugin_transport_tcp.c:3823
-#: src/transport/plugin_transport_xt.c:1137
-#: src/transport/plugin_transport_xt.c:1143
-#: src/transport/plugin_transport_xt.c:3831
-#: src/transport/tcp_service_legacy.c:574
-#: src/transport/tcp_service_legacy.c:580 src/util/service.c:635
-#: src/util/service.c:641
+#: src/arm/gnunet-service-arm.c:412 src/arm/gnunet-service-arm.c:418
+#: src/transport/plugin_transport_tcp.c:1139
+#: src/transport/plugin_transport_tcp.c:1145
+#: src/transport/plugin_transport_tcp.c:3829
+#: src/transport/plugin_transport_xt.c:1139
+#: src/transport/plugin_transport_xt.c:1145
+#: src/transport/plugin_transport_xt.c:3833
+#: src/transport/tcp_service_legacy.c:576
+#: src/transport/tcp_service_legacy.c:582 src/util/service.c:1192
+#: src/util/service.c:1198
 #, c-format
 msgid "Require valid port number for service `%s' in configuration!\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:455 src/transport/plugin_transport_tcp.c:1174
-#: src/transport/plugin_transport_xt.c:1174
-#: src/transport/tcp_service_legacy.c:611 src/util/client.c:504
-#: src/util/service.c:680
+#: src/arm/gnunet-service-arm.c:457 src/transport/plugin_transport_tcp.c:1176
+#: src/transport/plugin_transport_xt.c:1176
+#: src/transport/tcp_service_legacy.c:613 src/util/client.c:506
+#: src/util/service.c:1237
 #, c-format
 msgid "UNIXPATH `%s' too long, maximum length is %llu\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:460 src/transport/plugin_transport_tcp.c:1178
-#: src/transport/plugin_transport_xt.c:1178
-#: src/transport/tcp_service_legacy.c:615 src/util/client.c:509
-#: src/util/service.c:685
+#: src/arm/gnunet-service-arm.c:462 src/transport/plugin_transport_tcp.c:1180
+#: src/transport/plugin_transport_xt.c:1180
+#: src/transport/tcp_service_legacy.c:617 src/util/client.c:511
+#: src/util/service.c:1242
 #, fuzzy, c-format
 msgid "Using `%s' instead\n"
 msgstr "%s:选项“%s”有歧义\n"
 
-#: src/arm/gnunet-service-arm.c:493 src/transport/plugin_transport_tcp.c:1209
-#: src/transport/plugin_transport_xt.c:1209
-#: src/transport/tcp_service_legacy.c:646 src/util/service.c:721
+#: src/arm/gnunet-service-arm.c:495 src/transport/plugin_transport_tcp.c:1211
+#: src/transport/plugin_transport_xt.c:1211
+#: src/transport/tcp_service_legacy.c:648 src/util/service.c:1278
 #, c-format
 msgid ""
 "Disabling UNIX domain socket support for service `%s', failed to create UNIX "
 "domain socket: %s\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:515 src/transport/plugin_transport_tcp.c:1226
-#: src/transport/plugin_transport_xt.c:1226
-#: src/transport/tcp_service_legacy.c:663 src/util/service.c:739
+#: src/arm/gnunet-service-arm.c:517 src/transport/plugin_transport_tcp.c:1228
+#: src/transport/plugin_transport_xt.c:1228
+#: src/transport/tcp_service_legacy.c:665 src/util/service.c:1296
 #, c-format
 msgid "Have neither PORT nor UNIXPATH for service `%s', but one is required\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:554
-#: src/transport/plugin_transport_http_server.c:2682
-#: src/transport/plugin_transport_tcp.c:1257
-#: src/transport/plugin_transport_xt.c:1257
-#: src/transport/tcp_service_legacy.c:694 src/util/service.c:780
+#: src/arm/gnunet-service-arm.c:556
+#: src/transport/plugin_transport_http_server.c:2688
+#: src/transport/plugin_transport_tcp.c:1259
+#: src/transport/plugin_transport_xt.c:1259
+#: src/transport/tcp_service_legacy.c:696 src/util/service.c:1337
 #, fuzzy, c-format
 msgid "Failed to resolve `%s': %s\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/arm/gnunet-service-arm.c:573
-#: src/transport/plugin_transport_http_server.c:2700
-#: src/transport/plugin_transport_tcp.c:1276
-#: src/transport/plugin_transport_xt.c:1276
-#: src/transport/tcp_service_legacy.c:713 src/util/service.c:800
+#: src/arm/gnunet-service-arm.c:575
+#: src/transport/plugin_transport_http_server.c:2706
+#: src/transport/plugin_transport_tcp.c:1278
+#: src/transport/plugin_transport_xt.c:1278
+#: src/transport/tcp_service_legacy.c:715 src/util/service.c:1357
 #, fuzzy, c-format
 msgid "Failed to find %saddress for `%s'.\n"
 msgstr "找不到接口“%s”的一个 IP 地址。\n"
 
-#: src/arm/gnunet-service-arm.c:984
+#: src/arm/gnunet-service-arm.c:986
 #, fuzzy, c-format
 msgid "Failed to start service `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/arm/gnunet-service-arm.c:995
+#: src/arm/gnunet-service-arm.c:997
 #, c-format
 msgid "Starting service `%s'\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1107
+#: src/arm/gnunet-service-arm.c:1109
 #, fuzzy, c-format
 msgid "Unable to create socket for service `%s': %s\n"
 msgstr "无法创建用户账户:"
 
-#: src/arm/gnunet-service-arm.c:1142
+#: src/arm/gnunet-service-arm.c:1144
 #, c-format
 msgid "Unable to bind listening socket for service `%s' to address `%s': %s\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1185
+#: src/arm/gnunet-service-arm.c:1187
 #, c-format
 msgid "ARM now monitors connections to service `%s' at `%s'\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1364
+#: src/arm/gnunet-service-arm.c:1346
 #, c-format
 msgid "Preparing to stop `%s'\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1669
+#: src/arm/gnunet-service-arm.c:1651
 #, c-format
 msgid "Restarting service `%s'.\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1830
+#: src/arm/gnunet-service-arm.c:1812
 msgid "exit"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1835
+#: src/arm/gnunet-service-arm.c:1817
 msgid "signal"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1840
+#: src/arm/gnunet-service-arm.c:1822
 #, fuzzy
 msgid "unknown"
 msgstr "未知错误"
 
-#: src/arm/gnunet-service-arm.c:1846
+#: src/arm/gnunet-service-arm.c:1828
 #, fuzzy, c-format
 msgid "Service `%s' took %s to terminate\n"
 msgstr "服务已删除。\n"
 
-#: src/arm/gnunet-service-arm.c:1872
+#: src/arm/gnunet-service-arm.c:1854
 #, c-format
 msgid "Service `%s' terminated normally, will restart at any time\n"
 msgstr ""
 
-#: src/arm/gnunet-service-arm.c:1888
+#: src/arm/gnunet-service-arm.c:1870
 #, c-format
 msgid "Service `%s' terminated with status %s/%d, will restart in %s\n"
 msgstr ""
 
-#: src/arm/mockup-service.c:40
+#: src/arm/mockup-service.c:42
 msgid "Initiating shutdown as requested by client.\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:2779 src/ats/gnunet-ats-solver-eval.c:2820
+#: src/ats/gnunet-ats-solver-eval.c:2781 src/ats/gnunet-ats-solver-eval.c:2822
 #, c-format
 msgid ""
 "Could not load quota for network `%s':  `%s', assigning default bandwidth "
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:2797
+#: src/ats/gnunet-ats-solver-eval.c:2799
 #, c-format
 msgid ""
 "No outbound quota configured for network `%s', assigning default bandwidth "
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:2838
+#: src/ats/gnunet-ats-solver-eval.c:2840
 #, c-format
 msgid ""
 "No outbound quota configure for network `%s', assigning default bandwidth "
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3292 src/ats-tests/gnunet-solver-eval.c:937
+#: src/ats/gnunet-ats-solver-eval.c:3294 src/ats-tests/gnunet-solver-eval.c:939
 msgid "solver to use"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3297 src/ats-tests/gnunet-solver-eval.c:943
-#: src/ats-tests/gnunet-solver-eval.c:948
+#: src/ats/gnunet-ats-solver-eval.c:3299 src/ats-tests/gnunet-solver-eval.c:945
+#: src/ats-tests/gnunet-solver-eval.c:950
 msgid "experiment to use"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3304
+#: src/ats/gnunet-ats-solver-eval.c:3306
 #, fuzzy
 msgid "print logging"
 msgstr "未知的命令“%s”。\n"
 
-#: src/ats/gnunet-ats-solver-eval.c:3309
+#: src/ats/gnunet-ats-solver-eval.c:3311
 msgid "save logging to disk"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3314
+#: src/ats/gnunet-ats-solver-eval.c:3316
 msgid "disable normalization"
 msgstr ""
 
-#: src/ats/gnunet-service-ats_plugins.c:302
+#: src/ats/gnunet-service-ats-new.c:756
+#: src/ats/gnunet-service-ats_plugins.c:451
+#, fuzzy, c-format
+msgid "Failed to initialize solver `%s'!\n"
+msgstr "无法初始化 SQLite:%s。\n"
+
+#: src/ats/gnunet-service-ats_plugins.c:304
 #, c-format
 msgid ""
 "Could not load %s quota for network `%s':  `%s', assigning default bandwidth "
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-service-ats_plugins.c:312
+#: src/ats/gnunet-service-ats_plugins.c:314
 #, c-format
 msgid "%s quota configured for network `%s' is %llu\n"
 msgstr ""
 
-#: src/ats/gnunet-service-ats_plugins.c:357
+#: src/ats/gnunet-service-ats_plugins.c:359
 #, c-format
 msgid ""
 "No %s-quota configured for network `%s', assigning default bandwidth %llu\n"
 msgstr ""
 
-#: src/ats/gnunet-service-ats_plugins.c:449
-#, fuzzy, c-format
-msgid "Failed to initialize solver `%s'!\n"
-msgstr "无法初始化 SQLite:%s。\n"
+#: src/ats/plugin_ats2_common.c:90
+#, c-format
+msgid ""
+"Could not load %s quota for network `%s': `%s', assigning default bandwidth "
+"%llu\n"
+msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:1272
+#: src/ats/plugin_ats_mlp.c:1274
 msgid "Problem size too large, cannot allocate memory!\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:1868
+#: src/ats/plugin_ats_mlp.c:1870
 #, c-format
 msgid "Adding address for peer `%s' multiple times\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:1912
+#: src/ats/plugin_ats_mlp.c:1914
 #, c-format
 msgid "Updating address property for peer `%s' %p not added before\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:2474
+#: src/ats/plugin_ats_mlp.c:2476
 msgid ""
 "MLP solver is not optimizing for anything, changing to feasibility check\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:2514 src/ats/plugin_ats_mlp.c:2531
-#: src/ats/plugin_ats_mlp.c:2563 src/ats/plugin_ats_mlp.c:2581
-#: src/ats/plugin_ats_mlp.c:2600 src/ats/plugin_ats_proportional.c:1139
-#: src/ats/plugin_ats_ril.c:2610 src/ats/plugin_ats_ril.c:2627
-#: src/ats/plugin_ats_ril.c:2644 src/ats/plugin_ats_ril.c:2661
-#: src/ats/plugin_ats_ril.c:2678 src/ats/plugin_ats_ril.c:2695
-#: src/ats/plugin_ats_ril.c:2712 src/ats/plugin_ats_ril.c:2729
+#: src/ats/plugin_ats_mlp.c:2516 src/ats/plugin_ats_mlp.c:2533
+#: src/ats/plugin_ats_mlp.c:2565 src/ats/plugin_ats_mlp.c:2583
+#: src/ats/plugin_ats_mlp.c:2602 src/ats/plugin_ats_proportional.c:1141
+#: src/ats/plugin_ats_ril.c:2612 src/ats/plugin_ats_ril.c:2629
+#: src/ats/plugin_ats_ril.c:2646 src/ats/plugin_ats_ril.c:2663
+#: src/ats/plugin_ats_ril.c:2680 src/ats/plugin_ats_ril.c:2697
+#: src/ats/plugin_ats_ril.c:2714 src/ats/plugin_ats_ril.c:2731
 #, fuzzy, c-format
 msgid "Invalid %s configuration %f \n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/ats/plugin_ats_mlp.c:2669
+#: src/ats/plugin_ats_mlp.c:2671
 #, c-format
 msgid ""
 "Adjusting inconsistent outbound quota configuration for network `%s', is "
 "%llu must be at least %llu\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:2678
+#: src/ats/plugin_ats_mlp.c:2680
 #, c-format
 msgid ""
 "Adjusting inconsistent inbound quota configuration for network `%s', is %llu "
 "must be at least %llu\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:2688
+#: src/ats/plugin_ats_mlp.c:2690
 #, c-format
 msgid ""
 "Adjusting outbound quota configuration for network `%s'from %llu to %.0f\n"
 msgstr ""
 
-#: src/ats/plugin_ats_mlp.c:2697
+#: src/ats/plugin_ats_mlp.c:2699
 #, c-format
 msgid ""
 "Adjusting inbound quota configuration for network `%s' from %llu to %.0f\n"
 msgstr ""
 
-#: src/ats/plugin_ats_proportional.c:1162
+#: src/ats/plugin_ats_proportional.c:1164
 #, fuzzy, c-format
 msgid "Invalid %s configuration %f\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/ats-tests/ats-testing.c:420
+#: src/ats-tests/ats-testing.c:422
 #, c-format
 msgid "Connected master [%u] with slave [%u]\n"
 msgstr ""
 
-#: src/ats-tests/ats-testing.c:427
+#: src/ats-tests/ats-testing.c:429
 #, fuzzy, c-format
 msgid "Failed to connect master peer [%u] with slave [%u]\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/ats-tests/ats-testing-log.c:835
+#: src/ats-tests/ats-testing-log.c:837
 msgid "Stop logging\n"
 msgstr ""
 
-#: src/ats-tests/ats-testing-log.c:890
+#: src/ats-tests/ats-testing-log.c:892
 #, fuzzy, c-format
 msgid "Start logging `%s'\n"
 msgstr "未知的命令“%s”。\n"
 
-#: src/ats-tests/gnunet-ats-sim.c:88
+#: src/ats-tests/gnunet-ats-sim.c:90
 #, c-format
 msgid ""
 "Master [%u]: sent: %u KiB in %u sec. = %u KiB/s, received: %u KiB in %u sec. "
 "= %u KiB/s\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:305
+#: src/ats-tool/gnunet-ats.c:307
 #, c-format
 msgid "%u address resolutions had a timeout\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:309
+#: src/ats-tool/gnunet-ats.c:311
 #, c-format
 msgid "ATS returned stat_results for %u addresses\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:393
+#: src/ats-tool/gnunet-ats.c:395
 #, c-format
 msgid ""
 "Peer `%s' plugin `%s', address `%s', `%s' bw out: %u Bytes/s, bw in %u Bytes/"
 "s, %s\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:400
+#: src/ats-tool/gnunet-ats.c:402
 msgid "active "
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:400
+#: src/ats-tool/gnunet-ats.c:402
 msgid "inactive "
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:510
+#: src/ats-tool/gnunet-ats.c:512
 #, c-format
 msgid "Removed address of peer `%s' with plugin `%s'\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:703
+#: src/ats-tool/gnunet-ats.c:705
 #, c-format
 msgid "Quota for network `%11s' (in/out): %10s / %10s\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:746 src/ats-tool/gnunet-ats.c:759
+#: src/ats-tool/gnunet-ats.c:748 src/ats-tool/gnunet-ats.c:761
 #, fuzzy, c-format
 msgid "Failed to parse peer identity `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/ats-tool/gnunet-ats.c:771
+#: src/ats-tool/gnunet-ats.c:773
 #, c-format
 msgid "Please select one operation: %s or %s or %s or %s or %s\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:793 src/ats-tool/gnunet-ats.c:818
-#: src/ats-tool/gnunet-ats.c:849 src/ats-tool/gnunet-ats.c:894
+#: src/ats-tool/gnunet-ats.c:795 src/ats-tool/gnunet-ats.c:820
+#: src/ats-tool/gnunet-ats.c:851 src/ats-tool/gnunet-ats.c:896
 #, fuzzy
 msgid "Cannot connect to ATS service, exiting...\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/ats-tool/gnunet-ats.c:804 src/ats-tool/gnunet-ats.c:830
+#: src/ats-tool/gnunet-ats.c:806 src/ats-tool/gnunet-ats.c:832
 #, fuzzy
 msgid "Cannot issue request to ATS service, exiting...\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/ats-tool/gnunet-ats.c:860
+#: src/ats-tool/gnunet-ats.c:862
 #, fuzzy
 msgid "No preference type given!\n"
 msgstr "无法获取有关用户“%s”的信息:%s\n"
 
-#: src/ats-tool/gnunet-ats.c:867
+#: src/ats-tool/gnunet-ats.c:869
 msgid "No peer given!\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:885
+#: src/ats-tool/gnunet-ats.c:887
 msgid "Valid type required\n"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:948
+#: src/ats-tool/gnunet-ats.c:950
 msgid "get list of active addresses currently used"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:952
+#: src/ats-tool/gnunet-ats.c:954
 msgid "get list of all active addresses"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:958
+#: src/ats-tool/gnunet-ats.c:960
 #, fuzzy
 msgid "connect to PEER"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/ats-tool/gnunet-ats.c:962
+#: src/ats-tool/gnunet-ats.c:964
 #, fuzzy
 msgid "do not resolve IP addresses to hostnames"
 msgstr "GNUnet 现在使用 IP 地址 %s。\n"
 
-#: src/ats-tool/gnunet-ats.c:967
+#: src/ats-tool/gnunet-ats.c:969
 msgid "monitor mode"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:972
+#: src/ats-tool/gnunet-ats.c:974
 #, fuzzy
 msgid "set preference for the given peer"
 msgstr "无法获取有关用户“%s”的信息:%s\n"
 
-#: src/ats-tool/gnunet-ats.c:977
+#: src/ats-tool/gnunet-ats.c:979
 msgid "print all configured quotas"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:982
+#: src/ats-tool/gnunet-ats.c:984
 msgid "peer id"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:988
+#: src/ats-tool/gnunet-ats.c:990
 msgid "preference type to set: latency | bandwidth"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:994
+#: src/ats-tool/gnunet-ats.c:996
 msgid "preference value"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:999
+#: src/ats-tool/gnunet-ats.c:1001
 msgid "verbose output (include ATS address properties)"
 msgstr ""
 
-#: src/ats-tool/gnunet-ats.c:1009
+#: src/ats-tool/gnunet-ats.c:1011
 #, fuzzy
 msgid "Print information about ATS state"
 msgstr "无法获取有关用户“%s”的信息:%s\n"
 
-#: src/auction/gnunet-auction-create.c:161
+#: src/auction/gnunet-auction-create.c:163
 msgid "description of the item to be sold"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:167
+#: src/auction/gnunet-auction-create.c:169
 msgid "mapping of possible prices"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:173
+#: src/auction/gnunet-auction-create.c:175
 msgid "max duration per round"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:179
+#: src/auction/gnunet-auction-create.c:181
 msgid "duration until auction starts"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:184
+#: src/auction/gnunet-auction-create.c:186
 msgid ""
 "number of items to sell\n"
 "0 for first price auction\n"
 ">0 for vickrey/M+1st price auction"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:191
+#: src/auction/gnunet-auction-create.c:193
 msgid "public auction outcome"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:196
+#: src/auction/gnunet-auction-create.c:198
 msgid "keep running in foreground until auction completes"
 msgstr ""
 
-#: src/auction/gnunet-auction-create.c:207
+#: src/auction/gnunet-auction-create.c:209
 msgid "create a new auction and start listening for bidders"
 msgstr ""
 
-#: src/auction/gnunet-auction-info.c:74 src/auction/gnunet-auction-join.c:74
-#: src/conversation/gnunet-conversation-test.c:252
-#: src/revocation/gnunet-revocation.c:560 src/template/gnunet-template.c:74
+#: src/auction/gnunet-auction-info.c:76 src/auction/gnunet-auction-join.c:76
+#: src/conversation/gnunet-conversation-test.c:254
+#: src/revocation/gnunet-revocation.c:562 src/template/gnunet-template.c:76
 msgid "help text"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:705
+#: src/cadet/gnunet-cadet.c:631
 #, fuzzy, c-format
 msgid "Invalid peer ID `%s'\n"
 msgstr "无效条目。\n"
 
-#: src/cadet/gnunet-cadet.c:744
-#, fuzzy, c-format
-msgid "Invalid tunnel owner `%s'\n"
-msgstr "IP 格式无效:“%s”\n"
-
-#: src/cadet/gnunet-cadet.c:817
+#: src/cadet/gnunet-cadet.c:718
 msgid "Extra arguments are not applicable in combination with this option.\n"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:908
+#: src/cadet/gnunet-cadet.c:795
 #, fuzzy, c-format
 msgid "Invalid target `%s'\n"
 msgstr "“%s”的参数无效。\n"
 
-#: src/cadet/gnunet-cadet.c:945
+#: src/cadet/gnunet-cadet.c:832
 msgid "No action requested\n"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:970
+#: src/cadet/gnunet-cadet.c:857
 #, fuzzy
 msgid "Provide information about a particular connection"
 msgstr "无法获取有关用户“%s”的信息:%s\n"
 
-#: src/cadet/gnunet-cadet.c:975
+#: src/cadet/gnunet-cadet.c:861
 msgid "Activate echo mode"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:980
-msgid "Dump debug information to STDERR"
-msgstr ""
-
-#: src/cadet/gnunet-cadet.c:986
+#: src/cadet/gnunet-cadet.c:866
 msgid "Listen for connections using a shared secret among sender and recipient"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:993
+#: src/cadet/gnunet-cadet.c:871
 #, fuzzy
 msgid "Provide information about a patricular peer"
 msgstr "无法获取有关用户“%s”的信息:%s\n"
 
-#: src/cadet/gnunet-cadet.c:999
+#: src/cadet/gnunet-cadet.c:875
 #, fuzzy
 msgid "Provide information about all peers"
 msgstr "无法获取有关用户“%s”的信息:%s\n"
 
-#: src/cadet/gnunet-cadet.c:1005
-#, fuzzy
-msgid "Provide information about a particular tunnel"
-msgstr "无法获取有关用户“%s”的信息:%s\n"
-
-#: src/cadet/gnunet-cadet.c:1011
+#: src/cadet/gnunet-cadet.c:879
 #, fuzzy
 msgid "Provide information about all tunnels"
 msgstr "无法获取有关用户“%s”的信息:%s\n"
 
-#: src/consensus/gnunet-consensus-profiler.c:521
-#: src/secretsharing/gnunet-secretsharing-profiler.c:608
+#: src/consensus/gnunet-consensus-profiler.c:523
+#: src/secretsharing/gnunet-secretsharing-profiler.c:610
 #, fuzzy
 msgid "number of peers in consensus"
 msgstr "迭代次数"
 
-#: src/consensus/gnunet-consensus-profiler.c:527
+#: src/consensus/gnunet-consensus-profiler.c:529
 msgid ""
 "how many peers (random selection without replacement) receive one value?"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:533
-#: src/set/gnunet-set-profiler.c:431 src/set/gnunet-set-profiler.c:437
-#: src/set/gnunet-set-profiler.c:460
+#: src/consensus/gnunet-consensus-profiler.c:535
+#: src/set/gnunet-set-profiler.c:433 src/set/gnunet-set-profiler.c:439
+#: src/set/gnunet-set-profiler.c:462
 #, fuzzy
 msgid "number of values"
 msgstr "迭代次数"
 
-#: src/consensus/gnunet-consensus-profiler.c:539
+#: src/consensus/gnunet-consensus-profiler.c:541
 msgid "consensus timeout"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:546
+#: src/consensus/gnunet-consensus-profiler.c:548
 msgid "delay until consensus starts"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:552
-#: src/set/gnunet-set-profiler.c:478
+#: src/consensus/gnunet-consensus-profiler.c:554
+#: src/set/gnunet-set-profiler.c:480
 msgid "write statistics to file"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:557
+#: src/consensus/gnunet-consensus-profiler.c:559
 msgid "distribute elements to a static subset of good peers"
 msgstr ""
 
-#: src/consensus/gnunet-consensus-profiler.c:562
+#: src/consensus/gnunet-consensus-profiler.c:564
 msgid "be more verbose (print received values)"
 msgstr ""
 
-#: src/conversation/conversation_api.c:513
-#: src/conversation/conversation_api_call.c:492
+#: src/conversation/conversation_api.c:515
+#: src/conversation/conversation_api_call.c:494
 msgid "Connection to conversation service lost, trying to reconnect\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:275
+#: src/conversation/gnunet-conversation.c:277
 #, c-format
 msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:300
+#: src/conversation/gnunet-conversation.c:302
 #, c-format
 msgid "Call from `%s' terminated\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:335
+#: src/conversation/gnunet-conversation.c:337
 #, c-format
 msgid "Call from `%s' suspended by other user\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:340
+#: src/conversation/gnunet-conversation.c:342
 #, c-format
 msgid "Call from `%s' resumed by other user\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:358
+#: src/conversation/gnunet-conversation.c:360
 #, c-format
 msgid "Ego `%s' no longer available, phone is now down.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:373
+#: src/conversation/gnunet-conversation.c:375
 #, fuzzy
 msgid "Failed to setup phone (internal error)\n"
 msgstr "发送消息失败。\n"
 
-#: src/conversation/gnunet-conversation.c:385
+#: src/conversation/gnunet-conversation.c:387
 #, c-format
 msgid "Phone active at `%s'.  Type `/help' for a list of available commands\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:409
+#: src/conversation/gnunet-conversation.c:411
 #, c-format
 msgid "Resolved address of `%s'. Now ringing other party.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:416
+#: src/conversation/gnunet-conversation.c:418
 #, fuzzy, c-format
 msgid "Connection established to `%s'\n"
 msgstr "找不到接口“%s”的一个 IP 地址。\n"
 
-#: src/conversation/gnunet-conversation.c:423
+#: src/conversation/gnunet-conversation.c:425
 #, fuzzy, c-format
 msgid "Failed to resolve `%s'\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/conversation/gnunet-conversation.c:431
+#: src/conversation/gnunet-conversation.c:433
 #, c-format
 msgid "Call to `%s' terminated\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:440
+#: src/conversation/gnunet-conversation.c:442
 #, c-format
 msgid "Connection to `%s' suspended (by other user)\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:446
+#: src/conversation/gnunet-conversation.c:448
 #, c-format
 msgid "Connection to `%s' resumed (by other user)\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:451
+#: src/conversation/gnunet-conversation.c:453
 msgid "Error with the call, restarting it\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:522
+#: src/conversation/gnunet-conversation.c:524
 #, fuzzy, c-format
 msgid "Unknown command `%s'\n"
 msgstr "未知的命令“%s”。\n"
 
-#: src/conversation/gnunet-conversation.c:538
-#: src/conversation/gnunet-conversation.c:552
+#: src/conversation/gnunet-conversation.c:540
+#: src/conversation/gnunet-conversation.c:554
 #, c-format
 msgid "Ego `%s' not available\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:545
-#: src/conversation/gnunet-conversation.c:601
+#: src/conversation/gnunet-conversation.c:547
+#: src/conversation/gnunet-conversation.c:603
 msgid "You are calling someone else already, hang up first!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:560
-#: src/conversation/gnunet-conversation.c:614
+#: src/conversation/gnunet-conversation.c:562
+#: src/conversation/gnunet-conversation.c:616
 #, c-format
 msgid "You are answering call from `%s', hang up or suspend that call first!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:570
+#: src/conversation/gnunet-conversation.c:572
 msgid "Call recipient missing.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:625
+#: src/conversation/gnunet-conversation.c:627
 msgid "There is no incoming call to accept here!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:642
+#: src/conversation/gnunet-conversation.c:644
 #, c-format
 msgid "There is no incoming call `%s' to accept right now!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:673
+#: src/conversation/gnunet-conversation.c:675
 msgid "We currently do not have an address.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:697
+#: src/conversation/gnunet-conversation.c:699
 #, c-format
 msgid "We are currently trying to locate the private key for the ego `%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:702
+#: src/conversation/gnunet-conversation.c:704
 #, c-format
 msgid "We are listening for incoming calls for ego `%s' on line `%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:708
-#: src/conversation/gnunet-conversation.c:732
+#: src/conversation/gnunet-conversation.c:710
+#: src/conversation/gnunet-conversation.c:734
 #, c-format
 msgid "You are having a conversation with `%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:713
+#: src/conversation/gnunet-conversation.c:715
 msgid ""
 "We had an internal error setting up our phone line. You can still make "
 "calls.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:722
+#: src/conversation/gnunet-conversation.c:724
 #, fuzzy, c-format
 msgid "We are trying to find the network address to call `%s'.\n"
 msgstr "GNUnet 现在使用 IP 地址 %s。\n"
 
-#: src/conversation/gnunet-conversation.c:727
+#: src/conversation/gnunet-conversation.c:729
 #, c-format
 msgid "We are calling `%s', their phone should be ringing.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:746
+#: src/conversation/gnunet-conversation.c:748
 msgid "Calls waiting:\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:752
+#: src/conversation/gnunet-conversation.c:754
 #, fuzzy, c-format
 msgid "#%u: `%s'\n"
 msgstr "运行 %s失败:%s %d\n"
 
-#: src/conversation/gnunet-conversation.c:781
-#: src/conversation/gnunet-conversation.c:796
+#: src/conversation/gnunet-conversation.c:783
+#: src/conversation/gnunet-conversation.c:798
 msgid "There is no call that could be suspended right now.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:829
-#: src/conversation/gnunet-conversation.c:845
+#: src/conversation/gnunet-conversation.c:831
+#: src/conversation/gnunet-conversation.c:847
 msgid "There is no call that could be resumed right now.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:852
+#: src/conversation/gnunet-conversation.c:854
 #, c-format
 msgid "Already talking with `%s', cannot resume a call right now.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:861
+#: src/conversation/gnunet-conversation.c:863
 msgid "There is no incoming call to resume here!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:878
+#: src/conversation/gnunet-conversation.c:880
 #, c-format
 msgid "There is no incoming call `%s' to resume right now!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:913
+#: src/conversation/gnunet-conversation.c:915
 msgid "There is no call that could be cancelled right now.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:921
+#: src/conversation/gnunet-conversation.c:923
 msgid "There is no incoming call to refuse here!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:938
+#: src/conversation/gnunet-conversation.c:940
 #, c-format
 msgid "There is no incoming call `%s' to refuse right now!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:964
+#: src/conversation/gnunet-conversation.c:966
 msgid "Use `/address' to find out which address this phone should have in GNS"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:966
+#: src/conversation/gnunet-conversation.c:968
 msgid "Use `/call USER.gnu' to call USER"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:968
+#: src/conversation/gnunet-conversation.c:970
 msgid "Use `/accept #NUM' to accept incoming call #NUM"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:970
+#: src/conversation/gnunet-conversation.c:972
 msgid "Use `/suspend' to suspend the active call"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:972
+#: src/conversation/gnunet-conversation.c:974
 msgid ""
 "Use `/resume [#NUM]' to resume a call, #NUM is needed to resume incoming "
 "calls, no argument is needed to resume the current outgoing call."
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:974
+#: src/conversation/gnunet-conversation.c:976
 msgid "Use `/cancel' to reject or terminate a call"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:976
+#: src/conversation/gnunet-conversation.c:978
 msgid "Use `/status' to print status information"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:978
+#: src/conversation/gnunet-conversation.c:980
 msgid "Use `/quit' to terminate gnunet-conversation"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:980
+#: src/conversation/gnunet-conversation.c:982
 msgid "Use `/help command' to get help for a specific command"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:1196
+#: src/conversation/gnunet-conversation.c:1198
 #, fuzzy, c-format
 msgid "Name of our ego changed to `%s'\n"
 msgstr "发送消息失败。\n"
 
-#: src/conversation/gnunet-conversation.c:1209
+#: src/conversation/gnunet-conversation.c:1211
 #, c-format
 msgid "Our ego `%s' was deleted!\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:1247
+#: src/conversation/gnunet-conversation.c:1249
 #, fuzzy
 msgid "You must specify the NAME of an ego to use\n"
 msgstr "您必须指定一个昵称\n"
 
-#: src/conversation/gnunet-conversation.c:1271
+#: src/conversation/gnunet-conversation.c:1273
 #, fuzzy
 msgid "Failed to start gnunet-helper-w32-console\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/conversation/gnunet-conversation.c:1300
+#: src/conversation/gnunet-conversation.c:1302
 msgid "sets the NAME of the ego to use for the caller ID"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:1305
+#: src/conversation/gnunet-conversation.c:1307
 msgid "sets the LINE to use for the phone"
 msgstr ""
 
-#: src/conversation/gnunet-conversation.c:1334
+#: src/conversation/gnunet-conversation.c:1336
 msgid "Enables having a conversation with other GNUnet users."
 msgstr ""
 
-#: src/conversation/gnunet-conversation-test.c:118
+#: src/conversation/gnunet-conversation-test.c:120
 #, c-format
 msgid ""
 "\n"
 "End of transmission.  Have a GNU day.\n"
 msgstr ""
 
-#: src/conversation/gnunet-conversation-test.c:143
+#: src/conversation/gnunet-conversation-test.c:145
 #, c-format
 msgid ""
 "\n"
@@ -1049,2453 +1043,2449 @@ msgid ""
 "settings are working..."
 msgstr ""
 
-#: src/conversation/gnunet-conversation-test.c:214
+#: src/conversation/gnunet-conversation-test.c:216
 #, c-format
 msgid ""
 "We will now be recording you for %s. After that time, the recording will be "
 "played back to you..."
 msgstr ""
 
-#: src/conversation/gnunet_gst.c:620
-#: src/conversation/gnunet-helper-audio-playback-gst.c:359
+#: src/conversation/gnunet_gst.c:622
+#: src/conversation/gnunet-helper-audio-playback-gst.c:361
 #, c-format
 msgid "Read error from STDIN: %d %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:323
+#: src/conversation/gnunet-helper-audio-playback.c:325
 #, fuzzy, c-format
 msgid "pa_stream_write() failed: %s\n"
 msgstr "“%s”说:%s\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:625
+#: src/conversation/gnunet-helper-audio-playback.c:627
 msgid "gnunet-helper-audio-playback - Got signal, exiting\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:651
-#: src/conversation/gnunet-helper-audio-record.c:561
+#: src/conversation/gnunet-helper-audio-playback.c:653
+#: src/conversation/gnunet-helper-audio-record.c:563
 msgid "Connection established.\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:656
-#: src/conversation/gnunet-helper-audio-record.c:566
+#: src/conversation/gnunet-helper-audio-playback.c:658
+#: src/conversation/gnunet-helper-audio-record.c:568
 #, fuzzy, c-format
 msgid "pa_stream_new() failed: %s\n"
 msgstr "“%s”说:%s\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:670
+#: src/conversation/gnunet-helper-audio-playback.c:672
 #, c-format
 msgid "pa_stream_connect_playback() failed: %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:683
-#: src/conversation/gnunet-helper-audio-record.c:592
+#: src/conversation/gnunet-helper-audio-playback.c:685
+#: src/conversation/gnunet-helper-audio-record.c:594
 #, fuzzy, c-format
 msgid "Connection failure: %s\n"
 msgstr "“%s”已连接到“%s”。\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:704
-#: src/conversation/gnunet-helper-audio-record.c:615
+#: src/conversation/gnunet-helper-audio-playback.c:706
+#: src/conversation/gnunet-helper-audio-record.c:617
 msgid "Wrong Spec\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:710
-#: src/conversation/gnunet-helper-audio-record.c:621
+#: src/conversation/gnunet-helper-audio-playback.c:712
+#: src/conversation/gnunet-helper-audio-record.c:623
 msgid "pa_mainloop_new() failed.\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:724
-#: src/conversation/gnunet-helper-audio-record.c:636
+#: src/conversation/gnunet-helper-audio-playback.c:726
+#: src/conversation/gnunet-helper-audio-record.c:638
 msgid "pa_context_new() failed.\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:731
-#: src/conversation/gnunet-helper-audio-record.c:642
+#: src/conversation/gnunet-helper-audio-playback.c:733
+#: src/conversation/gnunet-helper-audio-record.c:644
 #, fuzzy, c-format
 msgid "pa_context_connect() failed: %s\n"
 msgstr "“%s”说:%s\n"
 
-#: src/conversation/gnunet-helper-audio-playback.c:737
-#: src/conversation/gnunet-helper-audio-record.c:648
+#: src/conversation/gnunet-helper-audio-playback.c:739
+#: src/conversation/gnunet-helper-audio-record.c:650
 msgid "pa_mainloop_run() failed.\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-playback.c:816
+#: src/conversation/gnunet-helper-audio-playback.c:818
 #, c-format
 msgid "Read error from STDIN: %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:351
+#: src/conversation/gnunet-helper-audio-record.c:353
 #, fuzzy, c-format
 msgid "opus_encode_float() failed: %s. Aborting\n"
 msgstr "“%s”说:%s\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:430
+#: src/conversation/gnunet-helper-audio-record.c:432
 #, fuzzy, c-format
 msgid "pa_stream_peek() failed: %s\n"
 msgstr "“%s”说:%s\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:472
+#: src/conversation/gnunet-helper-audio-record.c:474
 msgid "Got signal, exiting.\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:498
+#: src/conversation/gnunet-helper-audio-record.c:500
 #, fuzzy
 msgid "Stream successfully created.\n"
 msgstr "“%s”已连接到“%s”。\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:503
+#: src/conversation/gnunet-helper-audio-record.c:505
 #, fuzzy, c-format
 msgid "pa_stream_get_buffer_attr() failed: %s\n"
 msgstr "“%s”说:%s\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:511
+#: src/conversation/gnunet-helper-audio-record.c:513
 #, c-format
 msgid "Buffer metrics: maxlength=%u, fragsize=%u\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:515
+#: src/conversation/gnunet-helper-audio-record.c:517
 #, c-format
 msgid "Using sample spec '%s', channel map '%s'.\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:522
+#: src/conversation/gnunet-helper-audio-record.c:524
 #, fuzzy, c-format
 msgid "Connected to device %s (%u, %ssuspended).\n"
 msgstr "“%s”已连接到“%s”。\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:531
+#: src/conversation/gnunet-helper-audio-record.c:533
 #, c-format
 msgid "Stream error: %s\n"
 msgstr ""
 
-#: src/conversation/gnunet-helper-audio-record.c:579
+#: src/conversation/gnunet-helper-audio-record.c:581
 #, fuzzy, c-format
 msgid "pa_stream_connect_record() failed: %s\n"
 msgstr "“%s”说:%s\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:693
+#: src/conversation/gnunet-helper-audio-record.c:695
 #, fuzzy
 msgid "ogg_stream_init() failed.\n"
 msgstr "“%s”说:%s\n"
 
-#: src/conversation/gnunet-helper-audio-record.c:738
+#: src/conversation/gnunet-helper-audio-record.c:740
 #, fuzzy, c-format
 msgid "Failed to allocate %u bytes for second packet\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/conversation/gnunet-service-conversation.c:1303
+#: src/conversation/gnunet-service-conversation.c:1305
 #, fuzzy, c-format
 msgid "Could not open line, port %s already in use!\n"
 msgstr "无法连接到 %s:%u:%s\n"
 
-#: src/conversation/microphone.c:119
+#: src/conversation/microphone.c:121
 #, fuzzy
 msgid "Could not start record audio helper\n"
 msgstr "找不到主机“%s”的 IP:%s\n"
 
-#: src/conversation/plugin_gnsrecord_conversation.c:70
+#: src/conversation/plugin_gnsrecord_conversation.c:72
 #, c-format
 msgid "PHONE version %u not supported\n"
 msgstr ""
 
-#: src/conversation/plugin_gnsrecord_conversation.c:133
-#: src/conversation/plugin_gnsrecord_conversation.c:147
+#: src/conversation/plugin_gnsrecord_conversation.c:135
+#: src/conversation/plugin_gnsrecord_conversation.c:149
 #, fuzzy, c-format
 msgid "Unable to parse PHONE record `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/conversation/speaker.c:73
+#: src/conversation/speaker.c:75
 msgid "Could not start playback audio helper.\n"
 msgstr ""
 
-#: src/core/gnunet-core.c:88
+#: src/core/gnunet-core.c:90
 #, fuzzy
 msgid "fresh connection"
 msgstr ""
 "\n"
 "按任意键继续\n"
 
-#: src/core/gnunet-core.c:91
+#: src/core/gnunet-core.c:93
 msgid "key sent"
 msgstr ""
 
-#: src/core/gnunet-core.c:94
+#: src/core/gnunet-core.c:96
 msgid "key received"
 msgstr ""
 
-#: src/core/gnunet-core.c:97
+#: src/core/gnunet-core.c:99
 #, fuzzy
 msgid "connection established"
 msgstr "找不到接口“%s”的一个 IP 地址。\n"
 
-#: src/core/gnunet-core.c:100
+#: src/core/gnunet-core.c:102
 msgid "rekeying"
 msgstr ""
 
-#: src/core/gnunet-core.c:103
+#: src/core/gnunet-core.c:105
 #, fuzzy
 msgid "disconnected"
 msgstr "“%s”已连接到“%s”。\n"
 
-#: src/core/gnunet-core.c:110
+#: src/core/gnunet-core.c:112
 msgid "Connection to CORE service lost (reconnecting)"
 msgstr ""
 
-#: src/core/gnunet-core.c:113
+#: src/core/gnunet-core.c:115
 #, fuzzy
 msgid "unknown state"
 msgstr "未知错误"
 
-#: src/core/gnunet-core.c:118
+#: src/core/gnunet-core.c:120
 #, c-format
 msgid "%24s: %-30s %4s (timeout in %6s)\n"
 msgstr ""
 
-#: src/core/gnunet-core.c:142 src/peerinfo-tool/gnunet-peerinfo.c:726
+#: src/core/gnunet-core.c:144 src/peerinfo-tool/gnunet-peerinfo.c:728
 #, fuzzy, c-format
 msgid "Invalid command line argument `%s'\n"
 msgstr "“%s”的参数无效。\n"
 
-#: src/core/gnunet-core.c:153
+#: src/core/gnunet-core.c:155
 #, fuzzy
 msgid "Failed to connect to CORE service!\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/core/gnunet-core.c:175 src/transport/gnunet-transport.c:1447
+#: src/core/gnunet-core.c:177 src/transport/gnunet-transport.c:1449
 msgid "provide information about all current connections (continuously)"
 msgstr ""
 
-#: src/core/gnunet-core.c:184
+#: src/core/gnunet-core.c:186
 msgid "Print information about connected peers."
 msgstr ""
 
-#: src/core/gnunet-service-core.c:345
+#: src/core/gnunet-service-core.c:347
 msgid "# send requests dropped (disconnected)"
 msgstr ""
 
-#: src/core/gnunet-service-core.c:369
+#: src/core/gnunet-service-core.c:371
 msgid "# dequeuing CAR (duplicate request)"
 msgstr ""
 
-#: src/core/gnunet-service-core.c:441
+#: src/core/gnunet-service-core.c:443
 #, c-format
 msgid "# bytes of messages of type %u received"
 msgstr ""
 
-#: src/core/gnunet-service-core.c:539
+#: src/core/gnunet-service-core.c:541
 msgid "# messages discarded (session disconnected)"
 msgstr ""
 
-#: src/core/gnunet-service-core.c:877
+#: src/core/gnunet-service-core.c:879
 #, c-format
 msgid "# messages of type %u discarded (client busy)"
 msgstr ""
 
-#: src/core/gnunet-service-core.c:986
+#: src/core/gnunet-service-core.c:988
 #, fuzzy
 msgid "Core service is lacking HOSTKEY configuration setting.  Exiting.\n"
 msgstr "立即保存配置?"
 
-#: src/core/gnunet-service-core.c:1007
+#: src/core/gnunet-service-core.c:1009
 #, fuzzy, c-format
 msgid "Core service of `%s' ready.\n"
 msgstr "服务已删除。\n"
 
-#: src/core/gnunet-service-core_kx.c:615
+#: src/core/gnunet-service-core_kx.c:617
 msgid "# bytes encrypted"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:675
+#: src/core/gnunet-service-core_kx.c:677
 msgid "# bytes decrypted"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:777
+#: src/core/gnunet-service-core_kx.c:779
 msgid "# PAYLOAD dropped (out of order)"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:827
+#: src/core/gnunet-service-core_kx.c:829
 msgid "# key exchanges initiated"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:889
+#: src/core/gnunet-service-core_kx.c:891
 msgid "# key exchanges stopped"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:923
+#: src/core/gnunet-service-core_kx.c:925
 #, fuzzy
 msgid "# PING messages transmitted"
 msgstr "消息尺寸"
 
-#: src/core/gnunet-service-core_kx.c:990
+#: src/core/gnunet-service-core_kx.c:992
 msgid "# old ephemeral keys ignored"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1003
+#: src/core/gnunet-service-core_kx.c:1005
 msgid "# duplicate ephemeral keys ignored"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1038
+#: src/core/gnunet-service-core_kx.c:1040
 msgid "# EPHEMERAL_KEYs rejected (bad signature)"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1052
+#: src/core/gnunet-service-core_kx.c:1054
 #, c-format
 msgid ""
 "EPHEMERAL_KEY from peer `%s' rejected as its validity range does not match "
 "our system time (%llu not in [%llu,%llu]).\n"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1058
+#: src/core/gnunet-service-core_kx.c:1060
 msgid "# EPHEMERAL_KEY messages rejected due to time"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1078
+#: src/core/gnunet-service-core_kx.c:1080
 #, fuzzy
 msgid "# valid ephemeral keys received"
 msgstr "保存配置失败。"
 
-#: src/core/gnunet-service-core_kx.c:1178
-#: src/transport/gnunet-service-transport_validation.c:1126
+#: src/core/gnunet-service-core_kx.c:1180
+#: src/transport/gnunet-service-transport_validation.c:1128
 msgid "# PING messages received"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1187
+#: src/core/gnunet-service-core_kx.c:1189
 msgid "# PING messages dropped (out of order)"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1246
+#: src/core/gnunet-service-core_kx.c:1248
 msgid "# PONG messages created"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1272
+#: src/core/gnunet-service-core_kx.c:1274
 msgid "# sessions terminated by timeout"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1285
+#: src/core/gnunet-service-core_kx.c:1287
 msgid "# keepalive messages sent"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1349
-#: src/transport/gnunet-service-transport_validation.c:1459
+#: src/core/gnunet-service-core_kx.c:1351
+#: src/transport/gnunet-service-transport_validation.c:1461
 msgid "# PONG messages received"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1356
+#: src/core/gnunet-service-core_kx.c:1358
 msgid "# PONG messages dropped (connection down)"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1361
+#: src/core/gnunet-service-core_kx.c:1363
 msgid "# PONG messages dropped (out of order)"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1396
+#: src/core/gnunet-service-core_kx.c:1398
 msgid "# PONG messages decrypted"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1434
+#: src/core/gnunet-service-core_kx.c:1436
 msgid "# session keys confirmed via PONG"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1445
+#: src/core/gnunet-service-core_kx.c:1447
 msgid "# timeouts prevented via PONG"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1452
+#: src/core/gnunet-service-core_kx.c:1454
 msgid "# rekey operations confirmed via PONG"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1640
+#: src/core/gnunet-service-core_kx.c:1642
 msgid "# DATA message dropped (out of order)"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1648
+#: src/core/gnunet-service-core_kx.c:1650
 #, c-format
 msgid ""
 "Session to peer `%s' went down due to key expiration (should not happen)\n"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1651
+#: src/core/gnunet-service-core_kx.c:1653
 msgid "# sessions terminated by key expiration"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1740
-#: src/core/gnunet-service-core_kx.c:1766
+#: src/core/gnunet-service-core_kx.c:1742
+#: src/core/gnunet-service-core_kx.c:1768
 msgid "# bytes dropped (duplicates)"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1753
+#: src/core/gnunet-service-core_kx.c:1755
 msgid "# bytes dropped (out of sequence)"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1795
+#: src/core/gnunet-service-core_kx.c:1797
 msgid "# bytes dropped (ancient message)"
 msgstr ""
 
-#: src/core/gnunet-service-core_kx.c:1803
+#: src/core/gnunet-service-core_kx.c:1805
 msgid "# bytes of payload decrypted"
 msgstr ""
 
-#: src/core/gnunet-service-core_sessions.c:258
-#: src/core/gnunet-service-core_sessions.c:348
-#: src/dht/gnunet-service-dht_neighbours.c:739
-#: src/dht/gnunet-service-dht_neighbours.c:802
-#: src/fs/gnunet-service-fs_cp.c:613 src/fs/gnunet-service-fs_cp.c:1520
-#: src/topology/gnunet-daemon-topology.c:615
-#: src/topology/gnunet-daemon-topology.c:717
-#: src/transport/gnunet-service-transport_neighbours.c:719
-#: src/transport/gnunet-service-transport_neighbours.c:727
+#: src/core/gnunet-service-core_sessions.c:260
+#: src/core/gnunet-service-core_sessions.c:350
+#: src/dht/gnunet-service-dht_neighbours.c:741
+#: src/dht/gnunet-service-dht_neighbours.c:804
+#: src/fs/gnunet-service-fs_cp.c:615 src/fs/gnunet-service-fs_cp.c:1521
+#: src/topology/gnunet-daemon-topology.c:617
+#: src/topology/gnunet-daemon-topology.c:719
+#: src/transport/gnunet-service-transport_neighbours.c:720
+#: src/transport/gnunet-service-transport_neighbours.c:728
 msgid "# peers connected"
 msgstr ""
 
-#: src/core/gnunet-service-core_sessions.c:294
+#: src/core/gnunet-service-core_sessions.c:296
 msgid "# type map refreshes sent"
 msgstr ""
 
-#: src/core/gnunet-service-core_sessions.c:414
+#: src/core/gnunet-service-core_sessions.c:416
 #, fuzzy
 msgid "# outdated typemap confirmations received"
 msgstr "保存配置失败。"
 
-#: src/core/gnunet-service-core_sessions.c:431
+#: src/core/gnunet-service-core_sessions.c:433
 #, fuzzy
 msgid "# valid typemap confirmations received"
 msgstr "保存配置失败。"
 
-#: src/core/gnunet-service-core_typemap.c:167
-#: src/core/gnunet-service-core_typemap.c:179
+#: src/core/gnunet-service-core_typemap.c:169
+#: src/core/gnunet-service-core_typemap.c:181
 msgid "# type maps received"
 msgstr ""
 
-#: src/core/gnunet-service-core_typemap.c:210
+#: src/core/gnunet-service-core_typemap.c:212
 msgid "# updates to my type map"
 msgstr ""
 
-#: src/credential/credential_misc.c:86
+#: src/credential/credential_misc.c:88
 #, fuzzy, c-format
 msgid "Unable to parse CRED record string `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/credential/gnunet-credential.c:262 src/namestore/gnunet-namestore.c:887
+#: src/credential/gnunet-credential.c:264 src/namestore/gnunet-namestore.c:994
 #, c-format
 msgid "Ego `%s' not known to identity service\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:278
-#: src/credential/gnunet-credential.c:432
+#: src/credential/gnunet-credential.c:280
+#: src/credential/gnunet-credential.c:434
 #, fuzzy, c-format
 msgid "Issuer public key `%s' is not well-formed\n"
 msgstr "“%s”的参数无效。\n"
 
-#: src/credential/gnunet-credential.c:359
-#: src/credential/gnunet-credential.c:421
+#: src/credential/gnunet-credential.c:361
+#: src/credential/gnunet-credential.c:423
 #, fuzzy, c-format
 msgid "Issuer public key not well-formed\n"
 msgstr "“%s”的参数无效。\n"
 
-#: src/credential/gnunet-credential.c:370
-#: src/credential/gnunet-credential.c:442
+#: src/credential/gnunet-credential.c:372
+#: src/credential/gnunet-credential.c:444
 #, fuzzy, c-format
 msgid "Failed to connect to CREDENTIAL\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/credential/gnunet-credential.c:377
+#: src/credential/gnunet-credential.c:379
 #, c-format
 msgid "You must provide issuer the attribute\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:385
+#: src/credential/gnunet-credential.c:387
 #, c-format
 msgid "ego required\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:401
+#: src/credential/gnunet-credential.c:403
 #, c-format
 msgid "Subject public key needed\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:412
+#: src/credential/gnunet-credential.c:414
 #, fuzzy, c-format
 msgid "Subject public key `%s' is not well-formed\n"
 msgstr "“%s”的参数无效。\n"
 
-#: src/credential/gnunet-credential.c:449
+#: src/credential/gnunet-credential.c:451
 #, c-format
 msgid "You must provide issuer and subject attributes\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:502
+#: src/credential/gnunet-credential.c:504
 #, c-format
 msgid "Issuer ego required\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:514
+#: src/credential/gnunet-credential.c:516
 #, c-format
 msgid "Please specify name to lookup, subject key and issuer key!\n"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:534
+#: src/credential/gnunet-credential.c:536
 msgid "create credential"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:538
+#: src/credential/gnunet-credential.c:540
 msgid "verify credential against attribute"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:543
+#: src/credential/gnunet-credential.c:545
 msgid "The public key of the subject to lookup the credential for"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:548
+#: src/credential/gnunet-credential.c:550
 msgid "The name of the credential presented by the subject"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:553
+#: src/credential/gnunet-credential.c:555
 msgid "The public key of the authority to verify the credential against"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:558
+#: src/credential/gnunet-credential.c:560
 #, fuzzy
 msgid "The ego to use"
 msgstr "消息尺寸"
 
-#: src/credential/gnunet-credential.c:563
+#: src/credential/gnunet-credential.c:565
 msgid "The issuer attribute to verify against or to issue"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:568
+#: src/credential/gnunet-credential.c:570
 msgid "The time to live for the credential"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:572
+#: src/credential/gnunet-credential.c:574
 msgid "collect credentials"
 msgstr ""
 
-#: src/credential/gnunet-credential.c:586
+#: src/credential/gnunet-credential.c:588
 #, fuzzy
 msgid "GNUnet credential resolver tool"
 msgstr "GNUnet 错误日志"
 
-#: src/credential/gnunet-service-credential.c:1136 src/gns/gnunet-gns.c:183
-#: src/gns/gnunet-gns-helper-service-w32.c:725
+#: src/credential/gnunet-service-credential.c:1138 src/gns/gnunet-gns.c:185
+#: src/gns/gnunet-gns-helper-service-w32.c:727
 #, fuzzy, c-format
 msgid "Failed to connect to GNS\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/credential/gnunet-service-credential.c:1142
-#: src/namestore/gnunet-namestore.c:913
-#: src/namestore/gnunet-namestore-fcfsd.c:1136
+#: src/credential/gnunet-service-credential.c:1144
+#: src/namestore/gnunet-namestore.c:1019
+#: src/namestore/gnunet-namestore-fcfsd.c:1138
 #, fuzzy, c-format
 msgid "Failed to connect to namestore\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/credential/plugin_gnsrecord_credential.c:184
+#: src/credential/plugin_gnsrecord_credential.c:186
 #, fuzzy, c-format
 msgid "Unable to parse ATTR record string `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/datacache/datacache.c:117 src/datacache/datacache.c:309
-#: src/datastore/gnunet-service-datastore.c:755
+#: src/datacache/datacache.c:119 src/datacache/datacache.c:311
+#: src/datastore/gnunet-service-datastore.c:757
 msgid "# bytes stored"
 msgstr ""
 
-#: src/datacache/datacache.c:121 src/datacache/datacache.c:313
+#: src/datacache/datacache.c:123 src/datacache/datacache.c:315
 msgid "# items stored"
 msgstr ""
 
-#: src/datacache/datacache.c:204
+#: src/datacache/datacache.c:206
 #, c-format
 msgid "Loading `%s' datacache plugin\n"
 msgstr ""
 
-#: src/datacache/datacache.c:215
+#: src/datacache/datacache.c:217
 #, c-format
 msgid "Failed to load datacache plugin for `%s'\n"
 msgstr ""
 
-#: src/datacache/datacache.c:343
+#: src/datacache/datacache.c:345
 msgid "# requests received"
 msgstr ""
 
-#: src/datacache/datacache.c:353
+#: src/datacache/datacache.c:355
 msgid "# requests filtered by bloom filter"
 msgstr ""
 
-#: src/datacache/datacache.c:383
+#: src/datacache/datacache.c:385
 msgid "# requests for random value received"
 msgstr ""
 
-#: src/datacache/datacache.c:415
+#: src/datacache/datacache.c:417
 msgid "# proximity search requests received"
 msgstr ""
 
-#: src/datacache/plugin_datacache_heap.c:551
+#: src/datacache/plugin_datacache_heap.c:553
 #, fuzzy
 msgid "Heap datacache running\n"
 msgstr "sqlite 数据仓库"
 
-#: src/datacache/plugin_datacache_sqlite.c:116
-#: src/datacache/plugin_datacache_sqlite.c:125
-#: src/datastore/plugin_datastore_mysql.c:890
-#: src/datastore/plugin_datastore_sqlite.c:56
-#: src/datastore/plugin_datastore_sqlite.c:64 src/my/my.c:79 src/my/my.c:91
-#: src/mysql/mysql.c:40 src/mysql/mysql.c:47
-#: src/namecache/plugin_namecache_sqlite.c:50
-#: src/namestore/plugin_namestore_sqlite.c:51
-#: src/peerstore/plugin_peerstore_sqlite.c:50
-#: src/psycstore/plugin_psycstore_mysql.c:60
-#: src/reclaim/plugin_reclaim_sqlite.c:50
-#: src/testbed/generate-underlay-topology.c:45
-#: src/testbed/gnunet-daemon-latency-logger.c:50
-#: src/testbed/gnunet-daemon-testbed-underlay.c:54
-#: src/testbed/testbed_api_hosts.c:67 src/util/crypto_ecc.c:51
-#: src/util/crypto_ecc_setup.c:39 src/util/crypto_mpi.c:37
-#: src/include/gnunet_common.h:816 src/include/gnunet_common.h:825
-#: src/scalarproduct/scalarproduct.h:33
+#: src/datacache/plugin_datacache_sqlite.c:118
+#: src/datacache/plugin_datacache_sqlite.c:127
+#: src/datastore/plugin_datastore_mysql.c:892
+#: src/datastore/plugin_datastore_sqlite.c:58
+#: src/datastore/plugin_datastore_sqlite.c:66 src/my/my.c:81 src/my/my.c:93
+#: src/mysql/mysql.c:42 src/mysql/mysql.c:49
+#: src/namecache/plugin_namecache_sqlite.c:52
+#: src/namestore/plugin_namestore_sqlite.c:53
+#: src/peerstore/plugin_peerstore_sqlite.c:52
+#: src/reclaim/plugin_reclaim_sqlite.c:52
+#: src/testbed/generate-underlay-topology.c:47
+#: src/testbed/gnunet-daemon-latency-logger.c:52
+#: src/testbed/gnunet-daemon-testbed-underlay.c:56
+#: src/testbed/testbed_api_hosts.c:69 src/util/crypto_ecc.c:53
+#: src/util/crypto_ecc_setup.c:41 src/util/crypto_mpi.c:39
+#: src/include/gnunet_common.h:818 src/include/gnunet_common.h:827
+#: src/scalarproduct/scalarproduct.h:35
 #, fuzzy, c-format
 msgid "`%s' failed at %s:%d with error: %s\n"
 msgstr "“%s”于 %s:%d 处失败,错误为:%s\n"
 
-#: src/datacache/plugin_datacache_sqlite.c:861
-#: src/datastore/plugin_datastore_sqlite.c:506
-#: src/namecache/plugin_namecache_sqlite.c:327
-#: src/namestore/plugin_namestore_sqlite.c:262
-#: src/reclaim/plugin_reclaim_sqlite.c:334
+#: src/datacache/plugin_datacache_sqlite.c:863
+#: src/datastore/plugin_datastore_sqlite.c:508
+#: src/namecache/plugin_namecache_sqlite.c:229
+#: src/namestore/plugin_namestore_sqlite.c:265
+#: src/reclaim/plugin_reclaim_sqlite.c:336
 msgid "Tried to close sqlite without finalizing all prepared statements.\n"
 msgstr ""
 
-#: src/datastore/datastore_api.c:346
+#: src/datastore/datastore_api.c:348
 #, fuzzy
 msgid "DATASTORE disconnected"
 msgstr "“%s”已连接到“%s”。\n"
 
-#: src/datastore/datastore_api.c:466
+#: src/datastore/datastore_api.c:468
 #, fuzzy
 msgid "Disconnected from DATASTORE"
 msgstr "“%s”已连接到“%s”。\n"
 
-#: src/datastore/datastore_api.c:567
+#: src/datastore/datastore_api.c:569
 msgid "# queue overflows"
 msgstr ""
 
-#: src/datastore/datastore_api.c:597
+#: src/datastore/datastore_api.c:599
 msgid "# queue entries created"
 msgstr ""
 
-#: src/datastore/datastore_api.c:758
+#: src/datastore/datastore_api.c:760
 msgid "# status messages received"
 msgstr ""
 
-#: src/datastore/datastore_api.c:812
+#: src/datastore/datastore_api.c:814
 msgid "# Results received"
 msgstr ""
 
-#: src/datastore/datastore_api.c:918
+#: src/datastore/datastore_api.c:920
 msgid "# datastore connections (re)created"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1032
+#: src/datastore/datastore_api.c:1034
 msgid "# PUT requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1093
+#: src/datastore/datastore_api.c:1095
 msgid "# RESERVE requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1158
+#: src/datastore/datastore_api.c:1160
 msgid "# RELEASE RESERVE requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1236
+#: src/datastore/datastore_api.c:1238
 msgid "# REMOVE requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1296
+#: src/datastore/datastore_api.c:1298
 msgid "# GET REPLICATION requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1358
+#: src/datastore/datastore_api.c:1360
 msgid "# GET ZERO ANONYMITY requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1439
+#: src/datastore/datastore_api.c:1441
 msgid "# GET requests executed"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:187
+#: src/datastore/gnunet-datastore.c:189
 #, c-format
 msgid "Dumped %<PRIu64> records\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:215 src/datastore/gnunet-datastore.c:227
+#: src/datastore/gnunet-datastore.c:217 src/datastore/gnunet-datastore.c:229
 #, c-format
 msgid "Short write to file: %zd bytes expecting %zd\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:259
+#: src/datastore/gnunet-datastore.c:261
 #, fuzzy
 msgid "Error queueing datastore GET operation\n"
 msgstr "创建用户出错"
 
-#: src/datastore/gnunet-datastore.c:285 src/datastore/gnunet-datastore.c:410
+#: src/datastore/gnunet-datastore.c:287 src/datastore/gnunet-datastore.c:412
 #, fuzzy, c-format
 msgid "Unable to open dump file: %s\n"
 msgstr "发送消息失败。\n"
 
-#: src/datastore/gnunet-datastore.c:324
+#: src/datastore/gnunet-datastore.c:326
 #, fuzzy, c-format
 msgid "Failed to store item: %s, aborting\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/datastore/gnunet-datastore.c:338
+#: src/datastore/gnunet-datastore.c:340
 #, c-format
 msgid "Inserted %<PRIu64> records\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:347 src/datastore/gnunet-datastore.c:361
+#: src/datastore/gnunet-datastore.c:349 src/datastore/gnunet-datastore.c:363
 #, c-format
 msgid "Short read from file: %zd bytes expecting %zd\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:387
+#: src/datastore/gnunet-datastore.c:389
 #, fuzzy
 msgid "Error queueing datastore PUT operation\n"
 msgstr "创建用户出错"
 
-#: src/datastore/gnunet-datastore.c:430
+#: src/datastore/gnunet-datastore.c:432
 msgid "Input file is not of a supported format\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:456
+#: src/datastore/gnunet-datastore.c:458
 #, fuzzy
 msgid "Failed connecting to the datastore.\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/datastore/gnunet-datastore.c:468
+#: src/datastore/gnunet-datastore.c:470
 #, c-format
 msgid "Please choose at least one operation: %s, %s\n"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:491
+#: src/datastore/gnunet-datastore.c:493
 #, fuzzy
 msgid "Dump all records from the datastore"
 msgstr "发送消息失败。\n"
 
-#: src/datastore/gnunet-datastore.c:495
+#: src/datastore/gnunet-datastore.c:497
 msgid "Insert records into the datastore"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:500
+#: src/datastore/gnunet-datastore.c:502
 msgid "File to dump or insert"
 msgstr ""
 
-#: src/datastore/gnunet-datastore.c:509
+#: src/datastore/gnunet-datastore.c:511
 #, fuzzy
 msgid "Manipulate GNUnet datastore"
 msgstr "更改配置文件中的一个值"
 
-#: src/datastore/gnunet-service-datastore.c:336
+#: src/datastore/gnunet-service-datastore.c:338
 msgid "# bytes expired"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:418
+#: src/datastore/gnunet-service-datastore.c:420
 msgid "# bytes purged (low-priority)"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:560
+#: src/datastore/gnunet-service-datastore.c:562
 msgid "# results found"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:601
+#: src/datastore/gnunet-service-datastore.c:603
 #, c-format
 msgid ""
 "Insufficient space (%llu bytes are available) to satisfy RESERVE request for "
 "%llu bytes\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:612
+#: src/datastore/gnunet-service-datastore.c:614
 #, c-format
 msgid ""
 "The requested amount (%llu bytes) is larger than the cache size (%llu "
 "bytes)\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:618
+#: src/datastore/gnunet-service-datastore.c:620
 msgid ""
 "Insufficient space to satisfy request and requested amount is larger than "
 "cache size"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:625
+#: src/datastore/gnunet-service-datastore.c:627
 msgid "Insufficient space to satisfy request"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:632
-#: src/datastore/gnunet-service-datastore.c:687
-#: src/datastore/gnunet-service-datastore.c:835
-#: src/datastore/gnunet-service-datastore.c:1467
+#: src/datastore/gnunet-service-datastore.c:634
+#: src/datastore/gnunet-service-datastore.c:689
+#: src/datastore/gnunet-service-datastore.c:837
+#: src/datastore/gnunet-service-datastore.c:1469
 msgid "# reserved"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:705
+#: src/datastore/gnunet-service-datastore.c:707
 msgid "Could not find matching reservation"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:771
+#: src/datastore/gnunet-service-datastore.c:773
 #, c-format
 msgid "Need %llu bytes more space (%llu allowed, using %llu)\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:874
+#: src/datastore/gnunet-service-datastore.c:876
 msgid "# GET requests received"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:905
+#: src/datastore/gnunet-service-datastore.c:907
 msgid "# GET KEY requests received"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:918
+#: src/datastore/gnunet-service-datastore.c:920
 msgid "# requests filtered by bloomfilter"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:954
+#: src/datastore/gnunet-service-datastore.c:956
 msgid "# GET REPLICATION requests received"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:987
+#: src/datastore/gnunet-service-datastore.c:989
 msgid "# GET ZERO ANONYMITY requests received"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1034
+#: src/datastore/gnunet-service-datastore.c:1036
 msgid "Content not found"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1041
+#: src/datastore/gnunet-service-datastore.c:1043
 msgid "# bytes removed (explicit request)"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1086
+#: src/datastore/gnunet-service-datastore.c:1088
 msgid "# REMOVE requests received"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1135
+#: src/datastore/gnunet-service-datastore.c:1137
 #, c-format
 msgid ""
 "Datastore payload must have been inaccurate (%lld < %lld). Recomputing it.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1141
-#: src/datastore/gnunet-service-datastore.c:1316
+#: src/datastore/gnunet-service-datastore.c:1143
+#: src/datastore/gnunet-service-datastore.c:1318
 #, c-format
 msgid "New payload: %lld\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1195
+#: src/datastore/gnunet-service-datastore.c:1197
 #, c-format
 msgid "Loading `%s' datastore plugin\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1207
+#: src/datastore/gnunet-service-datastore.c:1209
 #, fuzzy, c-format
 msgid "Failed to load datastore plugin for `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/datastore/gnunet-service-datastore.c:1267
+#: src/datastore/gnunet-service-datastore.c:1269
 msgid "Bloomfilter construction complete.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1323
+#: src/datastore/gnunet-service-datastore.c:1325
 msgid "Rebuilding bloomfilter.  Please be patient.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1334
+#: src/datastore/gnunet-service-datastore.c:1336
 msgid "Plugin does not support get_keys function. Please fix!\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1504
+#: src/datastore/gnunet-service-datastore.c:1506
 #, c-format
 msgid "# bytes used in file-sharing datastore `%s'"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1520
+#: src/datastore/gnunet-service-datastore.c:1522
 msgid "# quota"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1525
+#: src/datastore/gnunet-service-datastore.c:1527
 msgid "# cache size"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1541
+#: src/datastore/gnunet-service-datastore.c:1543
 #, c-format
 msgid "Could not use specified filename `%s' for bloomfilter.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1559
-#: src/datastore/gnunet-service-datastore.c:1575
+#: src/datastore/gnunet-service-datastore.c:1561
+#: src/datastore/gnunet-service-datastore.c:1577
 #, fuzzy, c-format
 msgid "Failed to remove bogus bloomfilter file `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/datastore/gnunet-service-datastore.c:1607
+#: src/datastore/gnunet-service-datastore.c:1609
 #, fuzzy
 msgid "Failed to initialize bloomfilter.\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/datastore/plugin_datastore_heap.c:891
+#: src/datastore/plugin_datastore_heap.c:893
 #, fuzzy
 msgid "Heap database running\n"
 msgstr "sqlite 数据仓库"
 
-#: src/datastore/plugin_datastore_mysql.c:369
-#: src/datastore/plugin_datastore_mysql.c:421
-#: src/datastore/plugin_datastore_mysql.c:1073
+#: src/datastore/plugin_datastore_mysql.c:371
+#: src/datastore/plugin_datastore_mysql.c:423
+#: src/datastore/plugin_datastore_mysql.c:1075
 msgid "MySQL statement run failure"
 msgstr ""
 
-#: src/datastore/plugin_datastore_mysql.c:408
-#: src/datastore/plugin_datastore_sqlite.c:676
+#: src/datastore/plugin_datastore_mysql.c:410
+#: src/datastore/plugin_datastore_sqlite.c:678
 #, fuzzy
 msgid "Data too large"
 msgstr "迭代次数"
 
-#: src/datastore/plugin_datastore_mysql.c:846
+#: src/datastore/plugin_datastore_mysql.c:848
 #, fuzzy, c-format
 msgid "`%s' for `%s' failed at %s:%d with error: %s\n"
 msgstr "“%s”于 %s:%d 处失败,错误为:%s\n"
 
-#: src/datastore/plugin_datastore_mysql.c:1178
-#: src/psycstore/plugin_psycstore_mysql.c:1934
+#: src/datastore/plugin_datastore_mysql.c:1180
 msgid "Mysql database running\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_postgres.c:274
-#: src/datastore/plugin_datastore_postgres.c:891
+#: src/datastore/plugin_datastore_postgres.c:276
+#: src/datastore/plugin_datastore_postgres.c:893
 msgid "Postgress exec failure"
 msgstr ""
 
-#: src/datastore/plugin_datastore_postgres.c:852
+#: src/datastore/plugin_datastore_postgres.c:854
 #, fuzzy
 msgid "Failed to drop table from database.\n"
 msgstr "发送消息失败。\n"
 
-#: src/datastore/plugin_datastore_postgres.c:950
-#: src/psycstore/plugin_psycstore_postgres.c:1504
+#: src/datastore/plugin_datastore_postgres.c:952
 msgid "Postgres database running\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_sqlite.c:64
-#: src/testbed/generate-underlay-topology.c:48
-#: src/testbed/gnunet-daemon-latency-logger.c:53
-#: src/testbed/gnunet-daemon-testbed-underlay.c:57
+#: src/datastore/plugin_datastore_sqlite.c:66
+#: src/testbed/generate-underlay-topology.c:50
+#: src/testbed/gnunet-daemon-latency-logger.c:55
+#: src/testbed/gnunet-daemon-testbed-underlay.c:59
 #, fuzzy, c-format
 msgid "`%s' failed at %s:%u with error: %s"
 msgstr "“%s”于 %s:%d 处失败,错误为:%s\n"
 
-#: src/datastore/plugin_datastore_sqlite.c:269
-#: src/namecache/plugin_namecache_sqlite.c:207
-#: src/namestore/plugin_namestore_sqlite.c:203
-#: src/peerstore/plugin_peerstore_sqlite.c:533
-#: src/psycstore/plugin_psycstore_sqlite.c:323
-#: src/reclaim/plugin_reclaim_sqlite.c:210
+#: src/datastore/plugin_datastore_sqlite.c:271
+#: src/namecache/plugin_namecache_sqlite.c:173
+#: src/namestore/plugin_namestore_sqlite.c:206
+#: src/peerstore/plugin_peerstore_sqlite.c:535
+#: src/reclaim/plugin_reclaim_sqlite.c:212
 #, c-format
 msgid "Unable to initialize SQLite: %s.\n"
 msgstr "无法初始化 SQLite:%s。\n"
 
-#: src/datastore/plugin_datastore_sqlite.c:627
+#: src/datastore/plugin_datastore_sqlite.c:629
 msgid "sqlite bind failure"
 msgstr ""
 
-#: src/datastore/plugin_datastore_sqlite.c:1325
+#: src/datastore/plugin_datastore_sqlite.c:1327
 msgid "sqlite version to old to determine size, assuming zero\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_sqlite.c:1359
+#: src/datastore/plugin_datastore_sqlite.c:1361
 #, c-format
 msgid ""
 "Using sqlite page utilization to estimate payload (%llu pages of size %llu "
 "bytes)\n"
 msgstr ""
 
-#: src/datastore/plugin_datastore_sqlite.c:1403
-#: src/namecache/plugin_namecache_sqlite.c:638
-#: src/namestore/plugin_namestore_sqlite.c:753
-#: src/reclaim/plugin_reclaim_sqlite.c:709
+#: src/datastore/plugin_datastore_sqlite.c:1405
+#: src/namecache/plugin_namecache_sqlite.c:557
+#: src/namestore/plugin_namestore_sqlite.c:750
+#: src/reclaim/plugin_reclaim_sqlite.c:711
 #, fuzzy
 msgid "Sqlite database running\n"
 msgstr "sqlite 数据仓库"
 
-#: src/datastore/plugin_datastore_template.c:251
+#: src/datastore/plugin_datastore_template.c:253
 msgid "Template database running\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:156
+#: src/dht/gnunet-dht-get.c:158
 #, c-format
 msgid ""
 "Result %d, type %d:\n"
 "%.*s\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:157
+#: src/dht/gnunet-dht-get.c:159
 #, c-format
 msgid "Result %d, type %d:\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:202
+#: src/dht/gnunet-dht-get.c:204
 msgid "Must provide key for DHT GET!\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:208 src/dht/gnunet-dht-monitor.c:255
+#: src/dht/gnunet-dht-get.c:210 src/dht/gnunet-dht-monitor.c:257
 #, fuzzy
 msgid "Failed to connect to DHT service!\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/dht/gnunet-dht-get.c:217
-msgid "Issueing DHT GET with key"
+#: src/dht/gnunet-dht-get.c:219
+msgid "Issuing DHT GET with key"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:246 src/dht/gnunet-dht-monitor.c:305
-#: src/dht/gnunet-dht-put.c:196
+#: src/dht/gnunet-dht-get.c:248 src/dht/gnunet-dht-monitor.c:307
+#: src/dht/gnunet-dht-put.c:198
 msgid "the query key"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:251
+#: src/dht/gnunet-dht-get.c:253
 msgid "how many parallel requests (replicas) to create"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:256 src/dht/gnunet-dht-monitor.c:311
+#: src/dht/gnunet-dht-get.c:258 src/dht/gnunet-dht-monitor.c:313
 msgid "the type of data to look for"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:261
+#: src/dht/gnunet-dht-get.c:263
 msgid "how long to execute this query before giving up?"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:265 src/dht/gnunet-dht-put.c:200
+#: src/dht/gnunet-dht-get.c:267 src/dht/gnunet-dht-put.c:202
 msgid "use DHT's demultiplex everywhere option"
 msgstr ""
 
-#: src/dht/gnunet-dht-get.c:278
+#: src/dht/gnunet-dht-get.c:280
 msgid "Issue a GET request to the GNUnet DHT, prints results."
 msgstr ""
 
-#: src/dht/gnunet-dht-monitor.c:317
+#: src/dht/gnunet-dht-monitor.c:319
 msgid "how long should the monitor command run"
 msgstr ""
 
-#: src/dht/gnunet-dht-monitor.c:322 src/fs/gnunet-download.c:370
-#: src/nse/gnunet-nse-profiler.c:876
+#: src/dht/gnunet-dht-monitor.c:324 src/fs/gnunet-download.c:372
+#: src/nse/gnunet-nse-profiler.c:878
 msgid "be verbose (print progress information)"
 msgstr ""
 
-#: src/dht/gnunet-dht-monitor.c:335
+#: src/dht/gnunet-dht-monitor.c:337
 msgid "Prints all packets that go through the DHT."
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:914 src/testbed/gnunet-testbed-profiler.c:251
+#: src/dht/gnunet_dht_profiler.c:916 src/testbed/gnunet-testbed-profiler.c:253
 #, fuzzy, c-format
 msgid "Exiting as the number of peers is %u\n"
 msgstr "增加 TCP/IP 的最大连接数"
 
-#: src/dht/gnunet_dht_profiler.c:947 src/rps/gnunet-rps-profiler.c:2764
+#: src/dht/gnunet_dht_profiler.c:949 src/rps/gnunet-rps-profiler.c:2953
 #, fuzzy
 msgid "number of peers to start"
 msgstr "迭代次数"
 
-#: src/dht/gnunet_dht_profiler.c:952
+#: src/dht/gnunet_dht_profiler.c:954
 msgid "number of PUTs to perform per peer"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:957 src/nse/gnunet-nse-profiler.c:858
-#: src/testbed/gnunet-testbed-profiler.c:302
+#: src/dht/gnunet_dht_profiler.c:959 src/nse/gnunet-nse-profiler.c:860
+#: src/testbed/gnunet-testbed-profiler.c:304
 msgid "name of the file with the login information for the testbed"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:962
+#: src/dht/gnunet_dht_profiler.c:964
 msgid "delay between rounds for collecting statistics (default: 30 sec)"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:967
+#: src/dht/gnunet_dht_profiler.c:969
 msgid "delay to start doing PUTs (default: 1 sec)"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:972
+#: src/dht/gnunet_dht_profiler.c:974
 msgid "delay to start doing GETs (default: 5 min)"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:977
+#: src/dht/gnunet_dht_profiler.c:979
 msgid "replication degree for DHT PUTs"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:982
+#: src/dht/gnunet_dht_profiler.c:984
 msgid "chance that a peer is selected at random for PUTs"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:987
+#: src/dht/gnunet_dht_profiler.c:989
 msgid "timeout for DHT PUT and GET requests (default: 1 min)"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:1007
+#: src/dht/gnunet_dht_profiler.c:1009
 #, fuzzy
 msgid "Measure quality and performance of the DHT service."
 msgstr "无法访问该服务"
 
-#: src/dht/gnunet-dht-put.c:132
+#: src/dht/gnunet-dht-put.c:134
 msgid "Must provide KEY and DATA for DHT put!\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:140
+#: src/dht/gnunet-dht-put.c:142
 #, fuzzy
 msgid "Could not connect to DHT service!\n"
 msgstr "无法连接到 %s:%u:%s\n"
 
-#: src/dht/gnunet-dht-put.c:151
+#: src/dht/gnunet-dht-put.c:153
 #, c-format
 msgid "Issuing put request for `%s' with data `%s'!\n"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:186
+#: src/dht/gnunet-dht-put.c:188
 msgid "the data to insert under the key"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:191
+#: src/dht/gnunet-dht-put.c:193
 msgid "how long to store this entry in the dht (in seconds)"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:205
+#: src/dht/gnunet-dht-put.c:207
 msgid "how many replicas to create"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:209
+#: src/dht/gnunet-dht-put.c:211
 msgid "use DHT's record route option"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:214
+#: src/dht/gnunet-dht-put.c:216
 msgid "the type to insert data as"
 msgstr ""
 
-#: src/dht/gnunet-dht-put.c:231
+#: src/dht/gnunet-dht-put.c:233
 msgid "Issue a PUT request to the GNUnet DHT insert DATA under KEY."
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:367
+#: src/dht/gnunet-service-dht_clients.c:369
 msgid "# GET requests from clients injected"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:481
+#: src/dht/gnunet-service-dht_clients.c:483
 msgid "# PUT requests received from clients"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:614
+#: src/dht/gnunet-service-dht_clients.c:616
 msgid "# GET requests received from clients"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:840
+#: src/dht/gnunet-service-dht_clients.c:842
 msgid "# GET STOP requests received from clients"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:1025
+#: src/dht/gnunet-service-dht_clients.c:1027
 msgid "# Key match, type mismatches in REPLY to CLIENT"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:1040
+#: src/dht/gnunet-service-dht_clients.c:1042
 msgid "# Duplicate REPLIES to CLIENT request dropped"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:1086
+#: src/dht/gnunet-service-dht_clients.c:1088
 #, c-format
 msgid "Unsupported block type (%u) in request!\n"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:1093
+#: src/dht/gnunet-service-dht_clients.c:1095
 msgid "# RESULTS queued for clients"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_clients.c:1171
+#: src/dht/gnunet-service-dht_clients.c:1173
 msgid "# REPLIES ignored for CLIENTS (no match)"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:71
+#: src/dht/gnunet-service-dht_datacache.c:73
 #, c-format
 msgid "%s request received, but have no datacache!\n"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:81
+#: src/dht/gnunet-service-dht_datacache.c:83
 msgid "# ITEMS stored in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:205
+#: src/dht/gnunet-service-dht_datacache.c:207
 msgid "# Good RESULTS found in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:217
+#: src/dht/gnunet-service-dht_datacache.c:219
 msgid "# Duplicate RESULTS found in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:223
+#: src/dht/gnunet-service-dht_datacache.c:225
 msgid "# Invalid RESULTS found in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:229
+#: src/dht/gnunet-service-dht_datacache.c:231
 msgid "# Irrelevant RESULTS found in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:241
+#: src/dht/gnunet-service-dht_datacache.c:243
 msgid "# Unsupported RESULTS found in datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:245
+#: src/dht/gnunet-service-dht_datacache.c:247
 #, c-format
 msgid "Unsupported block type (%u) in local response!\n"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_datacache.c:280
+#: src/dht/gnunet-service-dht_datacache.c:282
 msgid "# GET requests given to datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_hello.c:84
+#: src/dht/gnunet-service-dht_hello.c:86
 msgid "# HELLOs obtained from peerinfo"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:677
+#: src/dht/gnunet-service-dht_neighbours.c:679
 msgid "# FIND PEER messages initiated"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:850
+#: src/dht/gnunet-service-dht_neighbours.c:852
 msgid "# requests TTL-dropped"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1053
-#: src/dht/gnunet-service-dht_neighbours.c:1096
+#: src/dht/gnunet-service-dht_neighbours.c:1055
+#: src/dht/gnunet-service-dht_neighbours.c:1098
 msgid "# Peers excluded from routing due to Bloomfilter"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1070
-#: src/dht/gnunet-service-dht_neighbours.c:1112
+#: src/dht/gnunet-service-dht_neighbours.c:1072
+#: src/dht/gnunet-service-dht_neighbours.c:1114
 msgid "# Peer selection failed"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1269
+#: src/dht/gnunet-service-dht_neighbours.c:1271
 msgid "# PUT requests routed"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1302
+#: src/dht/gnunet-service-dht_neighbours.c:1304
 msgid "# PUT messages queued for transmission"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1313
-#: src/dht/gnunet-service-dht_neighbours.c:1453
-#: src/dht/gnunet-service-dht_neighbours.c:1556
+#: src/dht/gnunet-service-dht_neighbours.c:1315
+#: src/dht/gnunet-service-dht_neighbours.c:1455
+#: src/dht/gnunet-service-dht_neighbours.c:1558
 msgid "# P2P messages dropped due to full queue"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1398
+#: src/dht/gnunet-service-dht_neighbours.c:1400
 msgid "# GET requests routed"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1441
+#: src/dht/gnunet-service-dht_neighbours.c:1443
 msgid "# GET messages queued for transmission"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1571
+#: src/dht/gnunet-service-dht_neighbours.c:1573
 msgid "# RESULT messages queued for transmission"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1674
+#: src/dht/gnunet-service-dht_neighbours.c:1676
 msgid "# Expired PUTs discarded"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1682
+#: src/dht/gnunet-service-dht_neighbours.c:1684
 msgid "# P2P PUT requests received"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1686
+#: src/dht/gnunet-service-dht_neighbours.c:1688
 msgid "# P2P PUT bytes received"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1912
+#: src/dht/gnunet-service-dht_neighbours.c:1914
 msgid "# FIND PEER requests ignored due to Bloomfilter"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:1920
+#: src/dht/gnunet-service-dht_neighbours.c:1922
 msgid "# FIND PEER requests ignored due to lack of HELLO"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:2082
+#: src/dht/gnunet-service-dht_neighbours.c:2084
 msgid "# P2P GET requests received"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:2086
+#: src/dht/gnunet-service-dht_neighbours.c:2088
 msgid "# P2P GET bytes received"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:2151
+#: src/dht/gnunet-service-dht_neighbours.c:2153
 msgid "# P2P FIND PEER requests processed"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:2172
+#: src/dht/gnunet-service-dht_neighbours.c:2174
 msgid "# P2P GET requests ONLY routed"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:2349
+#: src/dht/gnunet-service-dht_neighbours.c:2351
 msgid "# Expired results discarded"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:2365
+#: src/dht/gnunet-service-dht_neighbours.c:2367
 msgid "# P2P RESULTS received"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_neighbours.c:2369
+#: src/dht/gnunet-service-dht_neighbours.c:2371
 msgid "# P2P RESULT bytes received"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_nse.c:57
+#: src/dht/gnunet-service-dht_nse.c:59
 msgid "# Network size estimates received"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:221
+#: src/dht/gnunet-service-dht_routing.c:223
 msgid "# Good REPLIES matched against routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:235
+#: src/dht/gnunet-service-dht_routing.c:237
 msgid "# Duplicate REPLIES matched against routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:241
+#: src/dht/gnunet-service-dht_routing.c:243
 msgid "# Invalid REPLIES matched against routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:247
+#: src/dht/gnunet-service-dht_routing.c:249
 msgid "# Irrelevant REPLIES matched against routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:259
+#: src/dht/gnunet-service-dht_routing.c:261
 msgid "# Unsupported REPLIES matched against routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:337
+#: src/dht/gnunet-service-dht_routing.c:339
 msgid "# Entries removed from routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:413
+#: src/dht/gnunet-service-dht_routing.c:415
 msgid "# Entries added to routing table"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_routing.c:435
+#: src/dht/gnunet-service-dht_routing.c:437
 msgid "# DHT requests combined"
 msgstr ""
 
-#: src/dht/plugin_block_dht.c:187
+#: src/dht/plugin_block_dht.c:189
 #, c-format
 msgid "Block not of type %u\n"
 msgstr ""
 
-#: src/dht/plugin_block_dht.c:196
+#: src/dht/plugin_block_dht.c:198
 msgid "Size mismatch for block\n"
 msgstr ""
 
-#: src/dht/plugin_block_dht.c:207
+#: src/dht/plugin_block_dht.c:209
 #, c-format
 msgid "Block of type %u is malformed\n"
 msgstr ""
 
-#: src/dns/gnunet-dns-monitor.c:351 src/dns/gnunet-dns-monitor.c:356
+#: src/dns/gnunet-dns-monitor.c:353 src/dns/gnunet-dns-monitor.c:358
 msgid "only monitor DNS queries"
 msgstr ""
 
-#: src/dns/gnunet-dns-monitor.c:368
+#: src/dns/gnunet-dns-monitor.c:370
 msgid "Monitor DNS queries."
 msgstr ""
 
-#: src/dns/gnunet-dns-redirector.c:235
+#: src/dns/gnunet-dns-redirector.c:237
 msgid "set A records"
 msgstr ""
 
-#: src/dns/gnunet-dns-redirector.c:241
+#: src/dns/gnunet-dns-redirector.c:243
 msgid "set AAAA records"
 msgstr ""
 
-#: src/dns/gnunet-dns-redirector.c:254
+#: src/dns/gnunet-dns-redirector.c:256
 msgid "Change DNS replies to point elsewhere."
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:460
+#: src/dns/gnunet-service-dns.c:462
 msgid "# DNS requests answered via TUN interface"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:608
+#: src/dns/gnunet-service-dns.c:610
 msgid "# DNS exit failed (failed to open socket)"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:738
+#: src/dns/gnunet-service-dns.c:740
 msgid "# External DNS response discarded (no matching request)"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:813
+#: src/dns/gnunet-service-dns.c:815
 msgid "# Client response discarded (no matching request)"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:928
+#: src/dns/gnunet-service-dns.c:930
 msgid "Received malformed IPv4-UDP packet on TUN interface.\n"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:944
+#: src/dns/gnunet-service-dns.c:946
 msgid "Received malformed IPv6-UDP packet on TUN interface.\n"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:953
+#: src/dns/gnunet-service-dns.c:955
 #, c-format
 msgid "Got non-IP packet with %u bytes and protocol %u from TUN\n"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:963
+#: src/dns/gnunet-service-dns.c:965
 msgid "DNS interceptor got non-DNS packet (dropped)\n"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:965
+#: src/dns/gnunet-service-dns.c:967
 msgid "# Non-DNS UDP packet received via TUN interface"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:1032
+#: src/dns/gnunet-service-dns.c:1034
 msgid "# DNS requests received via TUN interface"
 msgstr ""
 
-#: src/dns/gnunet-service-dns.c:1080 src/exit/gnunet-daemon-exit.c:3563
+#: src/dns/gnunet-service-dns.c:1082 src/exit/gnunet-daemon-exit.c:3565
 #, fuzzy
 msgid "need a valid IPv4 or IPv6 address\n"
 msgstr "无效的进程优先级“%s”\n"
 
-#: src/dns/gnunet-service-dns.c:1090
+#: src/dns/gnunet-service-dns.c:1092
 #, c-format
 msgid "`%s' must be installed SUID, will not run DNS interceptor\n"
 msgstr ""
 
-#: src/dv/gnunet-dv.c:173
+#: src/dv/gnunet-dv.c:175
 #, fuzzy
 msgid "Print information about DV state"
 msgstr "无法获取有关用户“%s”的信息:%s\n"
 
-#: src/exit/gnunet-daemon-exit.c:958
+#: src/exit/gnunet-daemon-exit.c:960
 msgid "# TCP packets sent via TUN"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:1059
+#: src/exit/gnunet-daemon-exit.c:1061
 msgid "# ICMP packets sent via TUN"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:1338
+#: src/exit/gnunet-daemon-exit.c:1340
 msgid "# UDP packets sent via TUN"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:1462 src/exit/gnunet-daemon-exit.c:1570
-#: src/exit/gnunet-daemon-exit.c:1617 src/exit/gnunet-daemon-exit.c:1699
-#: src/exit/gnunet-daemon-exit.c:1820 src/exit/gnunet-daemon-exit.c:1951
-#: src/exit/gnunet-daemon-exit.c:2205
+#: src/exit/gnunet-daemon-exit.c:1464 src/exit/gnunet-daemon-exit.c:1572
+#: src/exit/gnunet-daemon-exit.c:1619 src/exit/gnunet-daemon-exit.c:1701
+#: src/exit/gnunet-daemon-exit.c:1822 src/exit/gnunet-daemon-exit.c:1953
+#: src/exit/gnunet-daemon-exit.c:2207
 msgid "# Bytes received from CADET"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:1465
+#: src/exit/gnunet-daemon-exit.c:1467
 msgid "# UDP IP-exit requests received via cadet"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:1573
+#: src/exit/gnunet-daemon-exit.c:1575
 msgid "# UDP service requests received via cadet"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:1613
+#: src/exit/gnunet-daemon-exit.c:1615
 msgid "# TCP service creation requests received via cadet"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:1702
+#: src/exit/gnunet-daemon-exit.c:1704
 msgid "# TCP IP-exit creation requests received via cadet"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:1786
+#: src/exit/gnunet-daemon-exit.c:1788
 msgid "# TCP DATA requests dropped (no session)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:1823
+#: src/exit/gnunet-daemon-exit.c:1825
 msgid "# TCP data requests received via cadet"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:1954
+#: src/exit/gnunet-daemon-exit.c:1956
 msgid "# ICMP IP-exit requests received via cadet"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2020 src/exit/gnunet-daemon-exit.c:2277
-#: src/exit/gnunet-daemon-exit.c:2632 src/vpn/gnunet-service-vpn.c:826
-#: src/vpn/gnunet-service-vpn.c:989 src/vpn/gnunet-service-vpn.c:2103
+#: src/exit/gnunet-daemon-exit.c:2022 src/exit/gnunet-daemon-exit.c:2279
+#: src/exit/gnunet-daemon-exit.c:2634 src/vpn/gnunet-service-vpn.c:828
+#: src/vpn/gnunet-service-vpn.c:991 src/vpn/gnunet-service-vpn.c:2105
 msgid "# ICMPv4 packets dropped (type not allowed)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2079 src/exit/gnunet-daemon-exit.c:2336
-#: src/exit/gnunet-daemon-exit.c:2669 src/vpn/gnunet-service-vpn.c:885
-#: src/vpn/gnunet-service-vpn.c:1022 src/vpn/gnunet-service-vpn.c:2156
+#: src/exit/gnunet-daemon-exit.c:2081 src/exit/gnunet-daemon-exit.c:2338
+#: src/exit/gnunet-daemon-exit.c:2671 src/vpn/gnunet-service-vpn.c:887
+#: src/vpn/gnunet-service-vpn.c:1024 src/vpn/gnunet-service-vpn.c:2158
 msgid "# ICMPv6 packets dropped (type not allowed)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2208
+#: src/exit/gnunet-daemon-exit.c:2210
 msgid "# ICMP service requests received via cadet"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2262 src/vpn/gnunet-service-vpn.c:983
-#: src/vpn/gnunet-service-vpn.c:2094
+#: src/exit/gnunet-daemon-exit.c:2264 src/vpn/gnunet-service-vpn.c:985
+#: src/vpn/gnunet-service-vpn.c:2096
 msgid "# ICMPv4 packets dropped (impossible PT to v6)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2321 src/vpn/gnunet-service-vpn.c:873
-#: src/vpn/gnunet-service-vpn.c:2128 src/vpn/gnunet-service-vpn.c:2139
+#: src/exit/gnunet-daemon-exit.c:2323 src/vpn/gnunet-service-vpn.c:875
+#: src/vpn/gnunet-service-vpn.c:2130 src/vpn/gnunet-service-vpn.c:2141
 msgid "# ICMPv6 packets dropped (impossible PT to v4)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2400 src/exit/gnunet-daemon-exit.c:3066
+#: src/exit/gnunet-daemon-exit.c:2402 src/exit/gnunet-daemon-exit.c:3068
 #, fuzzy
 msgid "# Inbound CADET channels created"
 msgstr ""
 "\n"
 "按任意键继续\n"
 
-#: src/exit/gnunet-daemon-exit.c:2520
+#: src/exit/gnunet-daemon-exit.c:2522
 #, c-format
 msgid "Got duplicate service records for `%s:%u'\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2539
+#: src/exit/gnunet-daemon-exit.c:2541
 #, fuzzy
 msgid "# Messages transmitted via cadet channels"
 msgstr ""
 "\n"
 "按任意键继续\n"
 
-#: src/exit/gnunet-daemon-exit.c:2717
+#: src/exit/gnunet-daemon-exit.c:2719
 msgid "# ICMP packets dropped (not allowed)"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2725
+#: src/exit/gnunet-daemon-exit.c:2727
 msgid "ICMP Packet dropped, have no matching connection information\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2799
+#: src/exit/gnunet-daemon-exit.c:2801
 msgid "UDP Packet dropped, have no matching connection information\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2871
+#: src/exit/gnunet-daemon-exit.c:2873
 msgid "TCP Packet dropped, have no matching connection information\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2919
+#: src/exit/gnunet-daemon-exit.c:2921
 msgid "# Packets received from TUN"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2933
+#: src/exit/gnunet-daemon-exit.c:2935
 msgid "# Bytes received from TUN"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2959
+#: src/exit/gnunet-daemon-exit.c:2961
 msgid "IPv4 packet options received.  Ignored.\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:2986
+#: src/exit/gnunet-daemon-exit.c:2988
 #, c-format
 msgid "IPv4 packet with unsupported next header %u received.  Ignored.\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3032
+#: src/exit/gnunet-daemon-exit.c:3034
 #, c-format
 msgid "IPv6 packet with unsupported next header %d received.  Ignored.\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3040
+#: src/exit/gnunet-daemon-exit.c:3042
 #, c-format
 msgid "Packet from unknown protocol %u received.  Ignored.\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3243 src/exit/gnunet-daemon-exit.c:3253
+#: src/exit/gnunet-daemon-exit.c:3245 src/exit/gnunet-daemon-exit.c:3255
 #, fuzzy, c-format
 msgid "Option `%s' for domain `%s' is not formatted correctly!\n"
 msgstr "%s:选项“%s”有歧义\n"
 
-#: src/exit/gnunet-daemon-exit.c:3267 src/exit/gnunet-daemon-exit.c:3275
+#: src/exit/gnunet-daemon-exit.c:3269 src/exit/gnunet-daemon-exit.c:3277
 #, c-format
 msgid "`%s' is not a valid port number (for domain `%s')!"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3316
+#: src/exit/gnunet-daemon-exit.c:3318
 #, c-format
 msgid "No addresses found for hostname `%s' of service `%s'!\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3330 src/exit/gnunet-daemon-exit.c:3343
+#: src/exit/gnunet-daemon-exit.c:3332 src/exit/gnunet-daemon-exit.c:3345
 #, c-format
 msgid "Service `%s' configured for IPv4, but IPv4 is disabled!\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3355
+#: src/exit/gnunet-daemon-exit.c:3357
 #, c-format
 msgid "No IP addresses found for hostname `%s' of service `%s'!\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3499
+#: src/exit/gnunet-daemon-exit.c:3501
 msgid ""
 "This system does not support IPv4, will disable IPv4 functions despite them "
 "being enabled in the configuration\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3507
+#: src/exit/gnunet-daemon-exit.c:3509
 msgid ""
 "This system does not support IPv6, will disable IPv6 functions despite them "
 "being enabled in the configuration\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3514
+#: src/exit/gnunet-daemon-exit.c:3516
 msgid ""
 "Cannot enable IPv4 exit but disable IPv4 on TUN interface, will use "
 "ENABLE_IPv4=YES\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3520
+#: src/exit/gnunet-daemon-exit.c:3522
 msgid ""
 "Cannot enable IPv6 exit but disable IPv6 on TUN interface, will use "
 "ENABLE_IPv6=YES\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3688
+#: src/exit/gnunet-daemon-exit.c:3690
 msgid "Must be a number"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3803
+#: src/exit/gnunet-daemon-exit.c:3805
 #, c-format
 msgid "`%s' must be installed SUID, EXIT will not work\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3815 src/pt/gnunet-daemon-pt.c:1202
+#: src/exit/gnunet-daemon-exit.c:3817 src/pt/gnunet-daemon-pt.c:1204
 msgid "No useful service enabled.  Exiting.\n"
 msgstr ""
 
-#: src/exit/gnunet-daemon-exit.c:3964
+#: src/exit/gnunet-daemon-exit.c:3966
 msgid "Daemon to run to provide an IP exit node for the VPN"
 msgstr ""
 
-#: src/fragmentation/defragmentation.c:273
+#: src/fragmentation/defragmentation.c:275
 msgid "# acknowledgements sent for fragment"
 msgstr ""
 
-#: src/fragmentation/defragmentation.c:466
-#: src/transport/plugin_transport_wlan.c:1552
+#: src/fragmentation/defragmentation.c:468
+#: src/transport/plugin_transport_wlan.c:1554
 msgid "# fragments received"
 msgstr ""
 
-#: src/fragmentation/defragmentation.c:536
+#: src/fragmentation/defragmentation.c:538
 msgid "# duplicate fragments received"
 msgstr ""
 
-#: src/fragmentation/defragmentation.c:554
+#: src/fragmentation/defragmentation.c:556
 msgid "# messages defragmented"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:238
+#: src/fragmentation/fragmentation.c:240
 msgid "# fragments transmitted"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:243
+#: src/fragmentation/fragmentation.c:245
 msgid "# fragments retransmitted"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:276
+#: src/fragmentation/fragmentation.c:278
 msgid "# fragments wrap arounds"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:323
+#: src/fragmentation/fragmentation.c:325
 msgid "# messages fragmented"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:329
+#: src/fragmentation/fragmentation.c:331
 msgid "# total size of fragmented messages"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:454
+#: src/fragmentation/fragmentation.c:456
 msgid "# fragment acknowledgements received"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:461
+#: src/fragmentation/fragmentation.c:463
 msgid "# bits removed from fragmentation ACKs"
 msgstr ""
 
-#: src/fragmentation/fragmentation.c:485
+#: src/fragmentation/fragmentation.c:487
 msgid "# fragmentation transmissions completed"
 msgstr ""
 
-#: src/fs/fs_api.c:497
+#: src/fs/fs_api.c:499
 #, fuzzy, c-format
 msgid "Could not open file `%s': %s"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/fs/fs_api.c:508
+#: src/fs/fs_api.c:510
 #, fuzzy, c-format
 msgid "Could not read file `%s': %s"
 msgstr "无法解析“%s”(%s):%s\n"
 
-#: src/fs/fs_api.c:516
+#: src/fs/fs_api.c:518
 #, c-format
 msgid "Short read reading from file `%s'!"
 msgstr ""
 
-#: src/fs/fs_api.c:1124
+#: src/fs/fs_api.c:1126
 #, fuzzy, c-format
 msgid "Failed to resume publishing information `%s': %s\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/fs/fs_api.c:1644
+#: src/fs/fs_api.c:1646
 #, c-format
 msgid "Failure while resuming publishing operation `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_api.c:1660
+#: src/fs/fs_api.c:1662
 #, fuzzy, c-format
 msgid "Failed to resume publishing operation `%s': %s\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/fs/fs_api.c:2320
+#: src/fs/fs_api.c:2322
 #, c-format
 msgid "Failure while resuming unindexing operation `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_api.c:2330
+#: src/fs/fs_api.c:2332
 #, fuzzy, c-format
 msgid "Failed to resume unindexing operation `%s': %s\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/fs/fs_api.c:2458 src/fs/fs_api.c:2704
+#: src/fs/fs_api.c:2460 src/fs/fs_api.c:2706
 #, fuzzy, c-format
 msgid "Failed to resume sub-download `%s': %s\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/fs/fs_api.c:2476
+#: src/fs/fs_api.c:2478
 #, fuzzy, c-format
 msgid "Failed to resume sub-search `%s': %s\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/fs/fs_api.c:2491 src/fs/fs_api.c:2510 src/fs/fs_api.c:3014
+#: src/fs/fs_api.c:2493 src/fs/fs_api.c:2512 src/fs/fs_api.c:3016
 #, c-format
 msgid "Failure while resuming search operation `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_api.c:2694
+#: src/fs/fs_api.c:2696
 #, fuzzy, c-format
 msgid "Failed to resume sub-download `%s': could not open file `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/fs/fs_api.c:2957
+#: src/fs/fs_api.c:2959
 msgid "Could not resume running search, will resume as paused search\n"
 msgstr ""
 
-#: src/fs/fs_api.c:3052
+#: src/fs/fs_api.c:3054
 #, c-format
 msgid "Failure while resuming download operation `%s': %s\n"
 msgstr ""
 
-#: src/fs/fs_directory.c:211
+#: src/fs/fs_directory.c:213
 msgid "MAGIC mismatch.  This is not a GNUnet directory.\n"
 msgstr ""
 
-#: src/fs/fs_download.c:308
+#: src/fs/fs_download.c:310
 msgid ""
 "Recursive downloads of directories larger than 4 GB are not supported on 32-"
 "bit systems\n"
 msgstr ""
 
-#: src/fs/fs_download.c:333
+#: src/fs/fs_download.c:335
 msgid "Directory too large for system address space\n"
 msgstr ""
 
-#: src/fs/fs_download.c:345
+#: src/fs/fs_download.c:347
 #, c-format
 msgid ""
 "Failed to access full directroy contents of `%s' for recursive download\n"
 msgstr ""
 
-#: src/fs/fs_download.c:532 src/fs/fs_download.c:544
+#: src/fs/fs_download.c:534 src/fs/fs_download.c:546
 #, fuzzy, c-format
 msgid "Failed to open file `%s' for writing"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/fs/fs_download.c:954
+#: src/fs/fs_download.c:956
 #, c-format
 msgid "Failed to create directory for recursive download of `%s'\n"
 msgstr ""
 
-#: src/fs/fs_download.c:1045
+#: src/fs/fs_download.c:1047
 #, c-format
 msgid ""
 "Internal error or bogus download URI (expected %u bytes at depth %u and "
 "offset %llu/%llu, got %u bytes)"
 msgstr ""
 
-#: src/fs/fs_download.c:1073
+#: src/fs/fs_download.c:1075
 msgid "internal error decrypting content"
 msgstr ""
 
-#: src/fs/fs_download.c:1097
+#: src/fs/fs_download.c:1099
 #, fuzzy, c-format
 msgid "Download failed: could not open file `%s': %s"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/fs/fs_download.c:1109
+#: src/fs/fs_download.c:1111
 #, fuzzy, c-format
 msgid "Failed to seek to offset %llu in file `%s': %s"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/fs/fs_download.c:1118
+#: src/fs/fs_download.c:1120
 #, fuzzy, c-format
 msgid "Failed to write block of %u bytes at offset %llu in file `%s': %s"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/fs/fs_download.c:1218
+#: src/fs/fs_download.c:1220
 #, fuzzy
 msgid "internal error decoding tree"
 msgstr "未知错误。\n"
 
-#: src/fs/fs_download.c:1883
+#: src/fs/fs_download.c:1885
 #, fuzzy
 msgid "Invalid URI"
 msgstr "无效条目。\n"
 
-#: src/fs/fs_getopt.c:224
+#: src/fs/fs_getopt.c:235
 #, c-format
 msgid ""
 "Unknown metadata type in metadata option `%s'.  Using metadata type "
 "`unknown' instead.\n"
 msgstr ""
 
-#: src/fs/fs_list_indexed.c:150
+#: src/fs/fs_list_indexed.c:152
 #, fuzzy, c-format
 msgid "Failed to receive response from `%s' service.\n"
 msgstr "“%s”的参数无效。\n"
 
-#: src/fs/fs_list_indexed.c:194
+#: src/fs/fs_list_indexed.c:196
 #, fuzzy, c-format
 msgid "Failed to not connect to `%s' service.\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/fs/fs_misc.c:126
+#: src/fs/fs_misc.c:128
 #, c-format
 msgid "Did not find mime type `%s' in extension list.\n"
 msgstr ""
 
-#: src/fs/fs_namespace.c:205
+#: src/fs/fs_namespace.c:207
 #, fuzzy, c-format
 msgid "Failed to open `%s' for writing: %s\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/fs/fs_namespace.c:230
+#: src/fs/fs_namespace.c:232
 #, fuzzy, c-format
 msgid "Failed to write `%s': %s\n"
 msgstr "运行 %s失败:%s %d\n"
 
-#: src/fs/fs_namespace.c:322
+#: src/fs/fs_namespace.c:324
 #, fuzzy, c-format
 msgid "Failed to read `%s': %s\n"
 msgstr "运行 %s失败:%s %d\n"
 
-#: src/fs/fs_namespace.c:468
+#: src/fs/fs_namespace.c:470
 msgid "Failed to connect to datastore."
 msgstr ""
 
-#: src/fs/fs_publish.c:125 src/fs/fs_publish.c:436
+#: src/fs/fs_publish.c:127 src/fs/fs_publish.c:438
 #, c-format
 msgid "Publishing failed: %s"
 msgstr ""
 
-#: src/fs/fs_publish.c:722 src/fs/fs_publish.c:776 src/fs/fs_publish.c:821
-#: src/fs/fs_publish.c:842 src/fs/fs_publish.c:872 src/fs/fs_publish.c:1138
+#: src/fs/fs_publish.c:724 src/fs/fs_publish.c:778 src/fs/fs_publish.c:823
+#: src/fs/fs_publish.c:844 src/fs/fs_publish.c:874 src/fs/fs_publish.c:1140
 #, c-format
 msgid "Can not index file `%s': %s.  Will try to insert instead.\n"
 msgstr ""
 
-#: src/fs/fs_publish.c:778
+#: src/fs/fs_publish.c:780
 #, fuzzy
 msgid "error on index-start request to `fs' service"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/fs/fs_publish.c:823
+#: src/fs/fs_publish.c:825
 msgid "failed to compute hash"
 msgstr ""
 
-#: src/fs/fs_publish.c:843
+#: src/fs/fs_publish.c:845
 msgid "filename too long"
 msgstr ""
 
-#: src/fs/fs_publish.c:874
+#: src/fs/fs_publish.c:876
 msgid "could not connect to `fs' service"
 msgstr ""
 
-#: src/fs/fs_publish.c:900
+#: src/fs/fs_publish.c:902
 #, fuzzy, c-format
 msgid "Failed to get file identifiers for `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/fs/fs_publish.c:989 src/fs/fs_publish.c:1025
+#: src/fs/fs_publish.c:991 src/fs/fs_publish.c:1027
 msgid "Can not create LOC URI. Will continue with CHK instead.\n"
 msgstr ""
 
-#: src/fs/fs_publish.c:1092
+#: src/fs/fs_publish.c:1094
 #, c-format
 msgid "Recursive upload failed at `%s': %s"
 msgstr ""
 
-#: src/fs/fs_publish.c:1100
+#: src/fs/fs_publish.c:1102
 #, c-format
 msgid "Recursive upload failed: %s"
 msgstr ""
 
-#: src/fs/fs_publish.c:1140
+#: src/fs/fs_publish.c:1142
 msgid "needs to be an actual file"
 msgstr ""
 
-#: src/fs/fs_publish.c:1379
+#: src/fs/fs_publish.c:1381
 #, fuzzy, c-format
 msgid "Datastore failure: %s"
 msgstr "“%s”已连接到“%s”。\n"
 
-#: src/fs/fs_publish.c:1470
+#: src/fs/fs_publish.c:1472
 #, c-format
 msgid "Reserving space for %u entries and %llu bytes for publication\n"
 msgstr ""
 
-#: src/fs/fs_publish_ksk.c:218
+#: src/fs/fs_publish_ksk.c:220
 msgid "Could not connect to datastore."
 msgstr ""
 
-#: src/fs/fs_publish_ublock.c:239
+#: src/fs/fs_publish_ublock.c:241
 #, fuzzy
 msgid "Internal error."
 msgstr "未知错误。\n"
 
-#: src/fs/fs_search.c:820 src/fs/fs_search.c:890
+#: src/fs/fs_search.c:822 src/fs/fs_search.c:892
 #, fuzzy, c-format
 msgid "Failed to parse URI `%s': %s\n"
 msgstr "运行 %s失败:%s %d\n"
 
-#: src/fs/fs_search.c:977
+#: src/fs/fs_search.c:979
 #, c-format
 msgid "Got result with unknown block type `%d', ignoring"
 msgstr ""
 
-#: src/fs/fs_unindex.c:61
+#: src/fs/fs_unindex.c:63
 msgid "Failed to find given position in file"
 msgstr ""
 
-#: src/fs/fs_unindex.c:66
+#: src/fs/fs_unindex.c:68
 #, fuzzy
 msgid "Failed to read file"
 msgstr "发送消息失败。\n"
 
-#: src/fs/fs_unindex.c:273
+#: src/fs/fs_unindex.c:275
 #, fuzzy
 msgid "Error communicating with `fs' service."
 msgstr "连接 %s:%u 出错。守护程序在运行吗?\n"
 
-#: src/fs/fs_unindex.c:324
+#: src/fs/fs_unindex.c:326
 msgid "Failed to connect to FS service for unindexing."
 msgstr ""
 
-#: src/fs/fs_unindex.c:374 src/fs/fs_unindex.c:386
+#: src/fs/fs_unindex.c:376 src/fs/fs_unindex.c:388
 #, fuzzy
 msgid "Failed to get KSKs from directory scan."
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/fs/fs_unindex.c:382
+#: src/fs/fs_unindex.c:384
 #, fuzzy, c-format
 msgid "Internal error scanning `%s'.\n"
 msgstr "未知错误。\n"
 
-#: src/fs/fs_unindex.c:441
+#: src/fs/fs_unindex.c:443
 #, fuzzy, c-format
 msgid "Failed to remove UBlock: %s\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/fs/fs_unindex.c:586 src/fs/fs_unindex.c:650
+#: src/fs/fs_unindex.c:588 src/fs/fs_unindex.c:652
 #, fuzzy
 msgid "Failed to connect to `datastore' service."
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/fs/fs_unindex.c:663
+#: src/fs/fs_unindex.c:665
 #, fuzzy
 msgid "Failed to open file for unindexing."
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/fs/fs_unindex.c:702
+#: src/fs/fs_unindex.c:704
 msgid "Failed to compute hash of file."
 msgstr ""
 
-#: src/fs/fs_uri.c:232
+#: src/fs/fs_uri.c:234
 #, no-c-format
 msgid "Malformed KSK URI (`%' must be followed by HEX number)"
 msgstr ""
 
-#: src/fs/fs_uri.c:291
+#: src/fs/fs_uri.c:293
 msgid "Malformed KSK URI (must not begin or end with `+')"
 msgstr ""
 
-#: src/fs/fs_uri.c:309
+#: src/fs/fs_uri.c:311
 msgid "Malformed KSK URI (`++' not allowed)"
 msgstr ""
 
-#: src/fs/fs_uri.c:316
+#: src/fs/fs_uri.c:318
 msgid "Malformed KSK URI (quotes not balanced)"
 msgstr ""
 
-#: src/fs/fs_uri.c:386
+#: src/fs/fs_uri.c:388
 msgid "Malformed SKS URI (wrong syntax)"
 msgstr ""
 
-#: src/fs/fs_uri.c:427
+#: src/fs/fs_uri.c:429
 msgid "Malformed CHK URI (wrong syntax)"
 msgstr ""
 
-#: src/fs/fs_uri.c:442
+#: src/fs/fs_uri.c:444
 msgid "Malformed CHK URI (failed to decode CHK)"
 msgstr ""
 
-#: src/fs/fs_uri.c:521
+#: src/fs/fs_uri.c:523
 msgid "LOC URI malformed (wrong syntax)"
 msgstr ""
 
-#: src/fs/fs_uri.c:536
+#: src/fs/fs_uri.c:538
 msgid "LOC URI malformed (no CHK)"
 msgstr ""
 
-#: src/fs/fs_uri.c:546
+#: src/fs/fs_uri.c:548
 msgid "LOC URI malformed (missing LOC)"
 msgstr ""
 
-#: src/fs/fs_uri.c:554
+#: src/fs/fs_uri.c:556
 msgid "LOC URI malformed (wrong syntax for public key)"
 msgstr ""
 
-#: src/fs/fs_uri.c:562
+#: src/fs/fs_uri.c:564
 msgid "LOC URI malformed (could not decode public key)"
 msgstr ""
 
-#: src/fs/fs_uri.c:568
+#: src/fs/fs_uri.c:570
 msgid "LOC URI malformed (could not find signature)"
 msgstr ""
 
-#: src/fs/fs_uri.c:574
+#: src/fs/fs_uri.c:576
 msgid "LOC URI malformed (wrong syntax for signature)"
 msgstr ""
 
-#: src/fs/fs_uri.c:583
+#: src/fs/fs_uri.c:585
 msgid "LOC URI malformed (could not decode signature)"
 msgstr ""
 
-#: src/fs/fs_uri.c:589
+#: src/fs/fs_uri.c:591
 msgid "LOC URI malformed (wrong syntax for expiration time)"
 msgstr ""
 
-#: src/fs/fs_uri.c:595
+#: src/fs/fs_uri.c:597
 msgid "LOC URI malformed (could not parse expiration time)"
 msgstr ""
 
-#: src/fs/fs_uri.c:607
+#: src/fs/fs_uri.c:609
 msgid "LOC URI malformed (signature failed validation)"
 msgstr ""
 
-#: src/fs/fs_uri.c:641
+#: src/fs/fs_uri.c:643
 #, fuzzy
 msgid "invalid argument"
 msgstr "“%s”的参数无效。\n"
 
-#: src/fs/fs_uri.c:653
+#: src/fs/fs_uri.c:655
 msgid "Unrecognized URI type"
 msgstr ""
 
-#: src/fs/fs_uri.c:1057 src/fs/fs_uri.c:1084
+#: src/fs/fs_uri.c:1059 src/fs/fs_uri.c:1086
 msgid "No keywords specified!\n"
 msgstr ""
 
-#: src/fs/fs_uri.c:1090
+#: src/fs/fs_uri.c:1092
 msgid "Number of double-quotes not balanced!\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:230
+#: src/fs/gnunet-auto-share.c:232
 #, fuzzy, c-format
 msgid "Failed to load state: %s\n"
 msgstr "运行 %s失败:%s %d\n"
 
-#: src/fs/gnunet-auto-share.c:283 src/fs/gnunet-auto-share.c:293
-#: src/fs/gnunet-auto-share.c:303
+#: src/fs/gnunet-auto-share.c:285 src/fs/gnunet-auto-share.c:295
+#: src/fs/gnunet-auto-share.c:305
 #, fuzzy, c-format
 msgid "Failed to save state to file %s\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/fs/gnunet-auto-share.c:405
+#: src/fs/gnunet-auto-share.c:407
 #, c-format
 msgid "Publication of `%s' done\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:492
+#: src/fs/gnunet-auto-share.c:494
 #, c-format
 msgid "Publishing `%s'\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:502
+#: src/fs/gnunet-auto-share.c:504
 #, fuzzy, c-format
 msgid "Failed to run `%s'\n"
 msgstr "运行 %s失败:%s %d\n"
 
-#: src/fs/gnunet-auto-share.c:711
+#: src/fs/gnunet-auto-share.c:713
 #, c-format
 msgid ""
 "You must specify one and only one directory name for automatic publication.\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:765 src/fs/gnunet-publish.c:898
+#: src/fs/gnunet-auto-share.c:767 src/fs/gnunet-publish.c:903
 msgid "set the desired LEVEL of sender-anonymity"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:770 src/fs/gnunet-publish.c:902
+#: src/fs/gnunet-auto-share.c:772 src/fs/gnunet-publish.c:907
 msgid "disable adding the creation time to the metadata of the uploaded file"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:775 src/fs/gnunet-publish.c:907
+#: src/fs/gnunet-auto-share.c:777 src/fs/gnunet-publish.c:912
 msgid "do not use libextractor to add keywords or metadata"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:781 src/fs/gnunet-publish.c:942
+#: src/fs/gnunet-auto-share.c:783 src/fs/gnunet-publish.c:944
 msgid "specify the priority of the content"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:787 src/fs/gnunet-publish.c:954
+#: src/fs/gnunet-auto-share.c:789 src/fs/gnunet-publish.c:955
 msgid "set the desired replication LEVEL"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:811
+#: src/fs/gnunet-auto-share.c:813
 msgid "Automatically publish files from a directory on GNUnet"
 msgstr ""
 
-#: src/fs/gnunet-daemon-fsprofiler.c:646
+#: src/fs/gnunet-daemon-fsprofiler.c:648
 msgid "Daemon to use file-sharing to measure its performance."
 msgstr ""
 
-#: src/fs/gnunet-directory.c:51
+#: src/fs/gnunet-directory.c:53
 #, c-format
 msgid "\t<original file embedded in %u bytes of meta data>\n"
 msgstr ""
 
-#: src/fs/gnunet-directory.c:103
+#: src/fs/gnunet-directory.c:105
 #, c-format
 msgid "Directory `%s' meta data:\n"
 msgstr ""
 
-#: src/fs/gnunet-directory.c:106
+#: src/fs/gnunet-directory.c:108
 #, c-format
 msgid "Directory `%s' contents:\n"
 msgstr ""
 
-#: src/fs/gnunet-directory.c:141
+#: src/fs/gnunet-directory.c:143
 #, fuzzy
 msgid "You must specify a filename to inspect.\n"
 msgstr "您必须指定一个昵称\n"
 
-#: src/fs/gnunet-directory.c:154
+#: src/fs/gnunet-directory.c:156
 #, fuzzy, c-format
 msgid "Failed to read directory `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/fs/gnunet-directory.c:163
+#: src/fs/gnunet-directory.c:165
 #, fuzzy, c-format
 msgid "`%s' is not a GNUnet directory\n"
 msgstr "更改 GNUnet 目录的权限出错"
 
-#: src/fs/gnunet-directory.c:192
+#: src/fs/gnunet-directory.c:194
 #, fuzzy
 msgid "Display contents of a GNUnet directory"
 msgstr "更改 GNUnet 目录的权限出错"
 
-#: src/fs/gnunet-download.c:137
+#: src/fs/gnunet-download.c:139
 #, fuzzy, c-format
 msgid "Starting download `%s'.\n"
 msgstr "未知的命令“%s”。\n"
 
-#: src/fs/gnunet-download.c:147
+#: src/fs/gnunet-download.c:149
 #, fuzzy
 msgid "<unknown time>"
 msgstr "未知错误"
 
-#: src/fs/gnunet-download.c:156
+#: src/fs/gnunet-download.c:158
 #, c-format
 msgid ""
 "Downloading `%s' at %llu/%llu (%s remaining, %s/s). Block took %s to "
 "download\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:182
+#: src/fs/gnunet-download.c:184
 #, c-format
 msgid "Error downloading: %s.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:199
+#: src/fs/gnunet-download.c:201
 #, c-format
 msgid "Downloading `%s' done (%s/s).\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:214 src/fs/gnunet-publish.c:293
-#: src/fs/gnunet-search.c:210 src/fs/gnunet-unindex.c:105
+#: src/fs/gnunet-download.c:216 src/fs/gnunet-publish.c:295
+#: src/fs/gnunet-search.c:215 src/fs/gnunet-unindex.c:107
 #, c-format
 msgid "Unexpected status: %d\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:244
+#: src/fs/gnunet-download.c:246
 #, fuzzy
 msgid "You need to specify a URI argument.\n"
 msgstr "您必须指定一个昵称\n"
 
-#: src/fs/gnunet-download.c:251 src/fs/gnunet-publish.c:724
+#: src/fs/gnunet-download.c:253 src/fs/gnunet-publish.c:727
 #, fuzzy, c-format
 msgid "Failed to parse URI: %s\n"
 msgstr "运行 %s失败:%s %d\n"
 
-#: src/fs/gnunet-download.c:262
+#: src/fs/gnunet-download.c:264
 msgid "Only CHK or LOC URIs supported.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:271
+#: src/fs/gnunet-download.c:273
 msgid "Target filename must be specified.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:289 src/fs/gnunet-publish.c:868
-#: src/fs/gnunet-search.c:268 src/fs/gnunet-unindex.c:137
+#: src/fs/gnunet-download.c:291 src/fs/gnunet-publish.c:872
+#: src/fs/gnunet-search.c:273 src/fs/gnunet-unindex.c:139
 #, fuzzy, c-format
 msgid "Could not initialize `%s' subsystem.\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/fs/gnunet-download.c:337 src/fs/gnunet-search.c:311
+#: src/fs/gnunet-download.c:339 src/fs/gnunet-search.c:315
 msgid "set the desired LEVEL of receiver-anonymity"
 msgstr ""
 
-#: src/fs/gnunet-download.c:342
+#: src/fs/gnunet-download.c:344
 msgid "delete incomplete downloads (when aborted with CTRL-C)"
 msgstr ""
 
-#: src/fs/gnunet-download.c:347 src/fs/gnunet-search.c:317
+#: src/fs/gnunet-download.c:349 src/fs/gnunet-search.c:319
 msgid "only search the local peer (no P2P network search)"
 msgstr ""
 
-#: src/fs/gnunet-download.c:352
+#: src/fs/gnunet-download.c:354
 msgid "write the file to FILENAME"
 msgstr ""
 
-#: src/fs/gnunet-download.c:357
+#: src/fs/gnunet-download.c:359
 msgid "set the maximum number of parallel downloads that is allowed"
 msgstr ""
 
-#: src/fs/gnunet-download.c:362
+#: src/fs/gnunet-download.c:364
 msgid "set the maximum number of parallel requests for blocks that is allowed"
 msgstr ""
 
-#: src/fs/gnunet-download.c:366
+#: src/fs/gnunet-download.c:368
 msgid "download a GNUnet directory recursively"
 msgstr ""
 
-#: src/fs/gnunet-download.c:384
+#: src/fs/gnunet-download.c:386
 msgid ""
 "Download files from GNUnet using a GNUnet CHK or LOC URI (gnunet://fs/"
 "chk/...)"
 msgstr ""
 
-#: src/fs/gnunet-fs.c:117
+#: src/fs/gnunet-fs.c:119
 msgid "print a list of all indexed files"
 msgstr ""
 
-#: src/fs/gnunet-fs.c:128
+#: src/fs/gnunet-fs.c:130
 msgid "Special file-sharing operations"
 msgstr ""
 
-#: src/fs/gnunet-fs-profiler.c:209
+#: src/fs/gnunet-fs-profiler.c:211
 msgid "run the experiment with COUNT peers"
 msgstr ""
 
-#: src/fs/gnunet-fs-profiler.c:215
+#: src/fs/gnunet-fs-profiler.c:217
 msgid "specifies name of a file with the HOSTS the testbed should use"
 msgstr ""
 
-#: src/fs/gnunet-fs-profiler.c:221
+#: src/fs/gnunet-fs-profiler.c:223
 msgid "automatically terminate experiment after DELAY"
 msgstr ""
 
-#: src/fs/gnunet-fs-profiler.c:231
+#: src/fs/gnunet-fs-profiler.c:233
 msgid "run a testbed to measure file-sharing performance"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:217 src/fs/gnunet-publish.c:229
+#: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:231
 #, c-format
 msgid "Publishing `%s' at %llu/%llu (%s remaining)\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:237
+#: src/fs/gnunet-publish.c:239
 #, c-format
 msgid "Error publishing: %s.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:244
+#: src/fs/gnunet-publish.c:246
 #, c-format
 msgid "Publishing `%s' done.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:249
+#: src/fs/gnunet-publish.c:251
 #, c-format
 msgid "URI is `%s'.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:257
+#: src/fs/gnunet-publish.c:259
 #, c-format
 msgid "Namespace URI is `%s'.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:273
+#: src/fs/gnunet-publish.c:275
 msgid "Starting cleanup after abort\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:280
+#: src/fs/gnunet-publish.c:282
 msgid "Cleanup after abort completed.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:286
+#: src/fs/gnunet-publish.c:288
 msgid "Cleanup after abort failed.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:428
+#: src/fs/gnunet-publish.c:430
 #, fuzzy, c-format
 msgid "Meta data for file `%s' (%s)\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/fs/gnunet-publish.c:433
+#: src/fs/gnunet-publish.c:435
 #, fuzzy, c-format
 msgid "Keywords for file `%s' (%s)\n"
 msgstr "无法解析“%s”(%s):%s\n"
 
-#: src/fs/gnunet-publish.c:587
+#: src/fs/gnunet-publish.c:590
 #, fuzzy
 msgid "Could not publish\n"
 msgstr "无法解析“%s”(%s):%s\n"
 
-#: src/fs/gnunet-publish.c:612
+#: src/fs/gnunet-publish.c:615
 msgid "Could not start publishing.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:646
+#: src/fs/gnunet-publish.c:649
 #, fuzzy, c-format
 msgid "Scanning directory `%s'.\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/fs/gnunet-publish.c:650
+#: src/fs/gnunet-publish.c:653
 #, fuzzy, c-format
 msgid "Scanning file `%s'.\n"
 msgstr "未知的命令“%s”。\n"
 
-#: src/fs/gnunet-publish.c:656
+#: src/fs/gnunet-publish.c:659
 #, c-format
 msgid "There was trouble processing file `%s', skipping it.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:663
+#: src/fs/gnunet-publish.c:666
 msgid "Preprocessing complete.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:668
+#: src/fs/gnunet-publish.c:671
 #, fuzzy, c-format
 msgid "Extracting meta data from file `%s' complete.\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/fs/gnunet-publish.c:675
+#: src/fs/gnunet-publish.c:678
 msgid "Meta data extraction has finished.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:684
+#: src/fs/gnunet-publish.c:687
 #, fuzzy
 msgid "Internal error scanning directory.\n"
 msgstr "未知错误。\n"
 
-#: src/fs/gnunet-publish.c:712
+#: src/fs/gnunet-publish.c:715
 #, c-format
 msgid "Selected pseudonym `%s' unknown\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:745
+#: 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:759
+#: 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:815
+#: src/fs/gnunet-publish.c:819
 #, c-format
 msgid "Cannot extract metadata from a URI!\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:822
+#: 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:828
+#: 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:836 src/vpn/gnunet-vpn.c:208
+#: src/fs/gnunet-publish.c:840 src/vpn/gnunet-vpn.c:210
 #, c-format
 msgid "Option `%s' is required when using option `%s'.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:847 src/fs/gnunet-publish.c:855
-#: src/transport/gnunet-transport.c:1280 src/transport/gnunet-transport.c:1307
+#: src/fs/gnunet-publish.c:851 src/fs/gnunet-publish.c:859
+#: src/transport/gnunet-transport.c:1282 src/transport/gnunet-transport.c:1309
 #, c-format
 msgid "Option `%s' makes no sense without option `%s'.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:911
+#: src/fs/gnunet-publish.c:916
 msgid ""
 "print list of extracted keywords that would be used, but do not perform "
 "upload"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:917
+#: src/fs/gnunet-publish.c:922
 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:923
+#: src/fs/gnunet-publish.c:928
 msgid "set the meta-data for the given TYPE to the given VALUE"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:928
+#: src/fs/gnunet-publish.c:932
 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:938
 msgid ""
 "specify ID of an updated version to be published in the future (for "
 "namespace insertions only)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:948
+#: src/fs/gnunet-publish.c:949
 msgid "publish the files under the pseudonym NAME (place file into namespace)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:958
+#: src/fs/gnunet-publish.c:959
 msgid ""
 "only simulate the process but do not do any actual publishing (useful to "
 "compute URIs)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:964
+#: src/fs/gnunet-publish.c:965
 msgid ""
 "set the ID of this version of the publication (for namespace insertions only)"
 msgstr ""
@@ -3506,29 +3496,29 @@ msgid ""
 "to the file with the respective URI)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:987
+#: src/fs/gnunet-publish.c:989
 msgid "Publish a file or directory on GNUnet"
 msgstr ""
 
-#: src/fs/gnunet-search.c:125
+#: src/fs/gnunet-search.c:127
 #, c-format
 msgid "Failed to write directory with search results to `%s'\n"
 msgstr ""
 
-#: src/fs/gnunet-search.c:202
+#: src/fs/gnunet-search.c:207
 #, fuzzy, c-format
 msgid "Error searching: %s.\n"
 msgstr "创建用户出错"
 
-#: src/fs/gnunet-search.c:258
+#: src/fs/gnunet-search.c:263
 msgid "Could not create keyword URI from arguments.\n"
 msgstr ""
 
-#: src/fs/gnunet-search.c:282
+#: src/fs/gnunet-search.c:287
 msgid "Could not start searching.\n"
 msgstr ""
 
-#: src/fs/gnunet-search.c:323
+#: src/fs/gnunet-search.c:324
 msgid "write search results to file starting with PREFIX"
 msgstr ""
 
@@ -3536,7 +3526,7 @@ msgstr ""
 msgid "automatically terminate search after DELAY"
 msgstr ""
 
-#: src/fs/gnunet-search.c:338
+#: src/fs/gnunet-search.c:335
 msgid "automatically terminate search after VALUE results are found"
 msgstr ""
 
@@ -3544,3016 +3534,2820 @@ msgstr ""
 msgid "Search GNUnet for files that were published on GNUnet"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:375 src/fs/gnunet-service-fs.c:880
+#: src/fs/gnunet-service-fs.c:377 src/fs/gnunet-service-fs.c:882
 msgid "# client searches active"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:434
+#: src/fs/gnunet-service-fs.c:436
 msgid "# replies received for local clients"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:603
+#: src/fs/gnunet-service-fs.c:605
 msgid "# running average P2P latency (ms)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:655 src/fs/gnunet-service-fs_cp.c:562
+#: src/fs/gnunet-service-fs.c:657 src/fs/gnunet-service-fs_cp.c:564
 msgid "# Loopback routes suppressed"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:834
+#: src/fs/gnunet-service-fs.c:836
 msgid "# client searches received"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:873
+#: src/fs/gnunet-service-fs.c:875
 msgid "# client searches updated (merged content seen list)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:1044
+#: src/fs/gnunet-service-fs.c:1040
 #, c-format
 msgid "Hash mismatch trying to index file `%s' which does not have hash `%s'\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs.c:1284
+#: src/fs/gnunet-service-fs.c:1280
 #, fuzzy
 msgid "FS service is lacking HOSTKEY configuration setting.  Exiting.\n"
 msgstr "立即保存配置?"
 
-#: src/fs/gnunet-service-fs.c:1309 src/hostlist/gnunet-daemon-hostlist.c:353
-#: src/topology/gnunet-daemon-topology.c:1200
+#: src/fs/gnunet-service-fs.c:1305 src/hostlist/gnunet-daemon-hostlist.c:355
+#: src/topology/gnunet-daemon-topology.c:1202
 #, fuzzy, c-format
 msgid "Failed to connect to `%s' service.\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/fs/gnunet-service-fs_cadet_client.c:368
+#: src/fs/gnunet-service-fs_cadet_client.c:370
 msgid "# replies received via cadet"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cadet_client.c:382
+#: src/fs/gnunet-service-fs_cadet_client.c:384
 msgid "# replies received via cadet dropped"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cadet_server.c:263
+#: src/fs/gnunet-service-fs_cadet_server.c:265
 msgid "# queries received via CADET not answered"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cadet_server.c:318
+#: src/fs/gnunet-service-fs_cadet_server.c:320
 msgid "# Blocks transferred via cadet"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cadet_server.c:344
+#: src/fs/gnunet-service-fs_cadet_server.c:346
 msgid "# queries received via cadet"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cadet_server.c:386
+#: src/fs/gnunet-service-fs_cadet_server.c:388
 #, fuzzy
 msgid "# cadet client connections rejected"
 msgstr ""
 "\n"
 "按任意键继续\n"
 
-#: src/fs/gnunet-service-fs_cadet_server.c:393
-#: src/fs/gnunet-service-fs_cadet_server.c:433
+#: src/fs/gnunet-service-fs_cadet_server.c:395
+#: src/fs/gnunet-service-fs_cadet_server.c:435
 #, fuzzy
 msgid "# cadet connections active"
 msgstr ""
 "\n"
 "按任意键继续\n"
 
-#: src/fs/gnunet-service-fs_cp.c:684
+#: src/fs/gnunet-service-fs_cp.c:685
 msgid "# migration stop messages received"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:688
+#: src/fs/gnunet-service-fs_cp.c:689
 #, c-format
 msgid "Migration of content to peer `%s' blocked for %s\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:721 src/fs/gnunet-service-fs_cp.c:1343
+#: src/fs/gnunet-service-fs_cp.c:722 src/fs/gnunet-service-fs_cp.c:1344
 msgid "# P2P searches active"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:816
+#: src/fs/gnunet-service-fs_cp.c:817
 msgid "# artificial delays introduced (ms)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:873
+#: src/fs/gnunet-service-fs_cp.c:874
 msgid "# replies dropped due to type mismatch"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:881
+#: src/fs/gnunet-service-fs_cp.c:882
 msgid "# replies received for other peers"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:895
+#: src/fs/gnunet-service-fs_cp.c:896
 msgid "# replies dropped due to insufficient cover traffic"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:942
+#: src/fs/gnunet-service-fs_cp.c:943
 msgid "# P2P searches destroyed due to ultimate reply"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1013
+#: src/fs/gnunet-service-fs_cp.c:1014
 msgid "# requests done for free (low load)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1038
+#: src/fs/gnunet-service-fs_cp.c:1039
 msgid "# request dropped, priority insufficient"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1048
+#: src/fs/gnunet-service-fs_cp.c:1049
 msgid "# requests done for a price (normal load)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1146
+#: src/fs/gnunet-service-fs_cp.c:1147
 msgid "# requests dropped due to higher-TTL request"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1203
+#: src/fs/gnunet-service-fs_cp.c:1204
 msgid "# GET requests received (from other peers)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1226
+#: src/fs/gnunet-service-fs_cp.c:1227
 msgid "# requests dropped due to missing reverse route"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1239
+#: src/fs/gnunet-service-fs_cp.c:1240
 msgid "# requests dropped due to full reply queue"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1295
+#: src/fs/gnunet-service-fs_cp.c:1296
 msgid "# requests dropped due TTL underflow"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1339
+#: src/fs/gnunet-service-fs_cp.c:1340
 msgid "# P2P query messages received and processed"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_cp.c:1706
+#: src/fs/gnunet-service-fs_cp.c:1707
 msgid "# migration stop messages sent"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_indexing.c:132
-#: src/fs/gnunet-service-fs_indexing.c:193
+#: src/fs/gnunet-service-fs_indexing.c:134
+#: src/fs/gnunet-service-fs_indexing.c:195
 #, fuzzy, c-format
 msgid "Could not open `%s'.\n"
 msgstr "无法解析“%s”(%s):%s\n"
 
-#: src/fs/gnunet-service-fs_indexing.c:149
+#: src/fs/gnunet-service-fs_indexing.c:151
 #, fuzzy, c-format
 msgid "Error writing `%s'.\n"
 msgstr "创建用户出错"
 
-#: src/fs/gnunet-service-fs_indexing.c:251
+#: src/fs/gnunet-service-fs_indexing.c:253
 #, fuzzy, c-format
 msgid "Failed to delete bogus block: %s\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/fs/gnunet-service-fs_indexing.c:329
+#: src/fs/gnunet-service-fs_indexing.c:331
 msgid "# index blocks removed: original file inaccessible"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_indexing.c:355
+#: src/fs/gnunet-service-fs_indexing.c:357
 #, fuzzy, c-format
 msgid "Could not access indexed file `%s' (%s) at offset %llu: %s\n"
 msgstr "无法解析“%s”(%s):%s\n"
 
-#: src/fs/gnunet-service-fs_indexing.c:359
+#: src/fs/gnunet-service-fs_indexing.c:361
 msgid "not indexed"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_indexing.c:392
+#: src/fs/gnunet-service-fs_indexing.c:394
 #, c-format
 msgid "Indexed file `%s' changed at offset %llu\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_indexing.c:516
+#: src/fs/gnunet-service-fs_indexing.c:518
 #, c-format
 msgid ""
 "Index request received for file `%s' is already indexed as `%s'.  Permitting "
 "anyway.\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:263
+#: src/fs/gnunet-service-fs_pe.c:265
 msgid "# average retransmission delay (ms)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:425
+#: src/fs/gnunet-service-fs_pe.c:427
 msgid "# delay heap timeout (ms)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:436
+#: src/fs/gnunet-service-fs_pe.c:438
 msgid "# query plans executed"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:464
+#: src/fs/gnunet-service-fs_pe.c:466
 msgid "# query messages sent to other peers"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:534
+#: src/fs/gnunet-service-fs_pe.c:536
 msgid "# requests merged"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:544
+#: src/fs/gnunet-service-fs_pe.c:546
 msgid "# requests refreshed"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pe.c:604 src/fs/gnunet-service-fs_pe.c:707
-#: src/fs/gnunet-service-fs_pe.c:786
+#: src/fs/gnunet-service-fs_pe.c:606 src/fs/gnunet-service-fs_pe.c:709
+#: src/fs/gnunet-service-fs_pe.c:788
 msgid "# query plan entries"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:328
+#: src/fs/gnunet-service-fs_pr.c:330
 msgid "# Pending requests created"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:428 src/fs/gnunet-service-fs_pr.c:675
+#: src/fs/gnunet-service-fs_pr.c:430 src/fs/gnunet-service-fs_pr.c:677
 msgid "# Pending requests active"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:856
+#: src/fs/gnunet-service-fs_pr.c:858
 msgid "# replies received and matched"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:892
+#: src/fs/gnunet-service-fs_pr.c:894
 msgid "# duplicate replies discarded (bloomfilter)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:901
+#: src/fs/gnunet-service-fs_pr.c:903
 msgid "# irrelevant replies discarded"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:916
+#: src/fs/gnunet-service-fs_pr.c:918
 #, c-format
 msgid "Unsupported block type %u\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:933
+#: src/fs/gnunet-service-fs_pr.c:935
 msgid "# results found locally"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1063
+#: src/fs/gnunet-service-fs_pr.c:1065
 msgid "# Datastore `PUT' failures"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1091
+#: src/fs/gnunet-service-fs_pr.c:1093
 msgid "# storage requests dropped due to high load"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1129
+#: src/fs/gnunet-service-fs_pr.c:1131
 msgid "# Replies received from DHT"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1260
+#: src/fs/gnunet-service-fs_pr.c:1262
 msgid "# Replies received from CADET"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1312
+#: src/fs/gnunet-service-fs_pr.c:1314
 #, c-format
 msgid "Datastore lookup already took %s!\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1333
+#: src/fs/gnunet-service-fs_pr.c:1335
 #, c-format
 msgid "On-demand lookup already took %s!\n"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1393
+#: src/fs/gnunet-service-fs_pr.c:1395
 msgid "# requested DBLOCK or IBLOCK not found"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1452
+#: src/fs/gnunet-service-fs_pr.c:1454
 msgid "# Datastore lookups concluded (error queueing)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1507
+#: src/fs/gnunet-service-fs_pr.c:1509
 msgid "# Datastore lookups concluded (no results)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1522
+#: src/fs/gnunet-service-fs_pr.c:1524
 msgid "# Datastore lookups concluded (seen all)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1546
+#: src/fs/gnunet-service-fs_pr.c:1548
 msgid "# Datastore lookups aborted (more than MAX_RESULTS)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1560
+#: src/fs/gnunet-service-fs_pr.c:1562
 msgid "# on-demand blocks matched requests"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1581
+#: src/fs/gnunet-service-fs_pr.c:1583
 msgid "# on-demand lookups performed successfully"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1586
+#: src/fs/gnunet-service-fs_pr.c:1588
 msgid "# on-demand lookups failed"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1624
+#: src/fs/gnunet-service-fs_pr.c:1626
 msgid "# Datastore lookups concluded (found last result)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1637
+#: src/fs/gnunet-service-fs_pr.c:1639
 msgid "# Datastore lookups concluded (load too high)"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1691
+#: src/fs/gnunet-service-fs_pr.c:1693
 msgid "# Datastore lookups initiated"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_pr.c:1747
+#: src/fs/gnunet-service-fs_pr.c:1749
 msgid "# GAP PUT messages received"
 msgstr ""
 
-#: src/fs/gnunet-service-fs_push.c:644
+#: src/fs/gnunet-service-fs_push.c:646
 msgid "time required, content pushing disabled"
 msgstr ""
 
-#: src/fs/gnunet-unindex.c:87
+#: src/fs/gnunet-unindex.c:89
 #, c-format
 msgid "Unindexing at %llu/%llu (%s remaining)\n"
 msgstr ""
 
-#: src/fs/gnunet-unindex.c:93
+#: src/fs/gnunet-unindex.c:95
 #, c-format
 msgid "Error unindexing: %s.\n"
 msgstr ""
 
-#: src/fs/gnunet-unindex.c:98
+#: src/fs/gnunet-unindex.c:100
 msgid "Unindexing done.\n"
 msgstr ""
 
-#: src/fs/gnunet-unindex.c:127
+#: 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:144
+#: src/fs/gnunet-unindex.c:146
 msgid "Could not start unindex operation.\n"
 msgstr ""
 
-#: src/fs/gnunet-unindex.c:176
+#: src/fs/gnunet-unindex.c:178
 msgid "Unindex a file that was previously indexed with gnunet-publish."
 msgstr ""
 
-#: src/gns/gns_tld_api.c:274
+#: src/gns/gns_tld_api.c:348
 msgid "Expected a base32-encoded public zone key\n"
 msgstr ""
 
-#: src/gns/gnunet-bcd.c:125
+#: src/gns/gnunet-bcd.c:127
 #, c-format
 msgid "Refusing `%s' request to HTTP server\n"
 msgstr ""
 
-#: src/gns/gnunet-bcd.c:355
+#: src/gns/gnunet-bcd.c:357
 #, c-format
 msgid "Invalid port number %u.  Exiting.\n"
 msgstr ""
 
-#: src/gns/gnunet-bcd.c:360
+#: src/gns/gnunet-bcd.c:362
 #, fuzzy, c-format
 msgid "Businesscard HTTP server starts on %u\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/gns/gnunet-bcd.c:374
+#: src/gns/gnunet-bcd.c:376
 #, fuzzy, c-format
 msgid "Could not start businesscard HTTP server on port %u\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/gns/gnunet-bcd.c:521
+#: src/gns/gnunet-bcd.c:523
 msgid "Run HTTP serve on port PORT (default is 8888)"
 msgstr ""
 
-#: src/gns/gnunet-bcd.c:534
+#: src/gns/gnunet-bcd.c:536
 msgid "GNUnet HTTP server to create business cards"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:201
+#: src/gns/gnunet-dns2gns.c:203
 #, fuzzy
 msgid "Failed to pack DNS response into UDP packet!\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/gns/gnunet-dns2gns.c:403
+#: src/gns/gnunet-dns2gns.c:405
 #, c-format
 msgid "Cannot parse DNS request from %s\n"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:419
+#: src/gns/gnunet-dns2gns.c:421
 #, c-format
 msgid "Received malformed DNS request from %s\n"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:427
+#: src/gns/gnunet-dns2gns.c:429
 #, c-format
 msgid "Received unsupported DNS request from %s\n"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:586
+#: src/gns/gnunet-dns2gns.c:588
 msgid "No DNS server specified!\n"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:686
+#: src/gns/gnunet-dns2gns.c:688
 msgid "IP of recursive DNS resolver to use (required)"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:691
+#: src/gns/gnunet-dns2gns.c:693
 msgid "UDP port to listen on for inbound DNS requests; default: 2853"
 msgstr ""
 
-#: src/gns/gnunet-dns2gns.c:708
+#: src/gns/gnunet-dns2gns.c:710
 msgid "GNUnet DNS-to-GNS proxy (a DNS server)"
 msgstr ""
 
-#: src/gns/gnunet-gns-benchmark.c:580
+#: src/gns/gnunet-gns-benchmark.c:582
 msgid "how long to wait between queries"
 msgstr ""
 
-#: src/gns/gnunet-gns-benchmark.c:585
+#: src/gns/gnunet-gns-benchmark.c:587
 msgid "how long to wait for an answer"
 msgstr ""
 
-#: src/gns/gnunet-gns-benchmark.c:589
+#: src/gns/gnunet-gns-benchmark.c:591
 msgid "look for GNS2DNS records instead of ANY"
 msgstr ""
 
-#: src/gns/gnunet-gns.c:197
+#: src/gns/gnunet-gns.c:199
 #, c-format
 msgid "Invalid typename specified, assuming `ANY'\n"
 msgstr ""
 
-#: src/gns/gnunet-gns.c:231
+#: src/gns/gnunet-gns.c:233
 msgid "Lookup a record for the given name"
 msgstr ""
 
-#: src/gns/gnunet-gns.c:236
+#: src/gns/gnunet-gns.c:238
 msgid "Specify the type of the record to lookup"
 msgstr ""
 
-#: src/gns/gnunet-gns.c:240
+#: src/gns/gnunet-gns.c:242
 msgid "No unneeded output"
 msgstr ""
 
-#: src/gns/gnunet-gns.c:256
+#: src/gns/gnunet-gns.c:258
 #, fuzzy
 msgid "GNUnet GNS resolver tool"
 msgstr "GNUnet 错误日志"
 
-#: src/gns/gnunet-gns-helper-service-w32.c:600
+#: src/gns/gnunet-gns-helper-service-w32.c:602
 msgid "Not ready to process requests, lacking ego data\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-helper-service-w32.c:699
+#: src/gns/gnunet-gns-helper-service-w32.c:701
 msgid ""
 "Ego for `gns-master' not found, cannot perform lookup.  Did you run gnunet-"
 "gns-import.sh?\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-helper-service-w32.c:737
+#: src/gns/gnunet-gns-helper-service-w32.c:739
 #, fuzzy, c-format
 msgid "Failed to connect to identity service\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/gns/gnunet-gns-import.c:450
+#: src/gns/gnunet-gns-import.c:452
 msgid "This program will import some GNS authorities into your GNS namestore."
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:110
-#: src/hostlist/gnunet-daemon-hostlist_client.c:533
-#: src/hostlist/gnunet-daemon-hostlist_client.c:751
-#: src/hostlist/gnunet-daemon-hostlist_client.c:757
-#: src/hostlist/gnunet-daemon-hostlist_client.c:809
-#: src/hostlist/gnunet-daemon-hostlist_client.c:818
-#: src/hostlist/gnunet-daemon-hostlist_client.c:929
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1024
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1029
-#: src/transport/plugin_transport_http_client.c:596
-#: src/transport/plugin_transport_http_client.c:614
+#: src/gns/gnunet-gns-proxy.c:118
+#: src/hostlist/gnunet-daemon-hostlist_client.c:535
+#: src/hostlist/gnunet-daemon-hostlist_client.c:753
+#: src/hostlist/gnunet-daemon-hostlist_client.c:759
+#: src/hostlist/gnunet-daemon-hostlist_client.c:811
+#: src/hostlist/gnunet-daemon-hostlist_client.c:820
+#: src/hostlist/gnunet-daemon-hostlist_client.c:931
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1026
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1031
+#: src/transport/plugin_transport_http_client.c:598
+#: src/transport/plugin_transport_http_client.c:616
 #, c-format
 msgid "%s failed at %s:%d: `%s'\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:960
+#: src/gns/gnunet-gns-proxy.c:980
 #, fuzzy, c-format
 msgid "Unsupported CURL TLS backend %d\n"
 msgstr "未知的命令“%s”。\n"
 
-#: src/gns/gnunet-gns-proxy.c:985
+#: src/gns/gnunet-gns-proxy.c:1005
 #, fuzzy, c-format
 msgid "Failed to fetch CN from cert: %s\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/gns/gnunet-gns-proxy.c:1008
+#: src/gns/gnunet-gns-proxy.c:1026
 #, fuzzy, c-format
 msgid "Failed to initialize DANE: %s\n"
 msgstr "无法初始化 SQLite:%s。\n"
 
-#: src/gns/gnunet-gns-proxy.c:1021
+#: src/gns/gnunet-gns-proxy.c:1041
 #, fuzzy, c-format
 msgid "Failed to parse DANE record: %s\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/gns/gnunet-gns-proxy.c:1036
+#: src/gns/gnunet-gns-proxy.c:1056
 #, fuzzy, c-format
 msgid "Failed to verify TLS connection using DANE: %s\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/gns/gnunet-gns-proxy.c:1046
+#: src/gns/gnunet-gns-proxy.c:1066
 #, c-format
 msgid "Failed DANE verification failed with GnuTLS verify status code: %u\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:1070
+#: src/gns/gnunet-gns-proxy.c:1090
 #, c-format
 msgid "TLS certificate subject name (%s) does not match `%s': %d\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:1200
+#: src/gns/gnunet-gns-proxy.c:1221
 #, c-format
 msgid "Cookie domain `%s' supplied by server is invalid\n"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:2062
+#: src/gns/gnunet-gns-proxy.c:2121
 #, fuzzy, c-format
 msgid "Unsupported HTTP method `%s'\n"
 msgstr "未知的命令“%s”。\n"
 
-#: src/gns/gnunet-gns-proxy.c:2583
+#: src/gns/gnunet-gns-proxy.c:2642
 #, fuzzy, c-format
 msgid "Unable to import private key from file `%s'\n"
 msgstr "无法创建用户账户:"
 
-#: src/gns/gnunet-gns-proxy.c:2615
+#: src/gns/gnunet-gns-proxy.c:2674
 #, fuzzy, c-format
 msgid "Unable to import certificate from `%s'\n"
 msgstr "无法保存配置文件“%s”:"
 
-#: src/gns/gnunet-gns-proxy.c:2814
+#: src/gns/gnunet-gns-proxy.c:2875
 #, fuzzy, c-format
 msgid "Failed to start HTTPS server for `%s'\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/gns/gnunet-gns-proxy.c:2839 src/rest/gnunet-rest-server.c:656
+#: src/gns/gnunet-gns-proxy.c:2897 src/rest/gnunet-rest-server.c:658
 #, fuzzy
 msgid "Failed to pass client to MHD\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/gns/gnunet-gns-proxy.c:3169
+#: src/gns/gnunet-gns-proxy.c:3233
 #, fuzzy, c-format
 msgid "Unsupported socks version %d\n"
 msgstr "未知的命令“%s”。\n"
 
-#: src/gns/gnunet-gns-proxy.c:3198
+#: src/gns/gnunet-gns-proxy.c:3262
 #, fuzzy, c-format
 msgid "Unsupported socks command %d\n"
 msgstr "未知的命令“%s”。\n"
 
-#: src/gns/gnunet-gns-proxy.c:3280
+#: src/gns/gnunet-gns-proxy.c:3345
 #, fuzzy, c-format
 msgid "Unsupported socks address type %d\n"
 msgstr "未知的命令“%s”。\n"
 
-#: src/gns/gnunet-gns-proxy.c:3570
+#: src/gns/gnunet-gns-proxy.c:3635
 #, fuzzy, c-format
 msgid "Failed to load X.509 key and certificate from `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/gns/gnunet-gns-proxy.c:3698
+#: src/gns/gnunet-gns-proxy.c:3763
 msgid "listen on specified port (default: 7777)"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3703
+#: src/gns/gnunet-gns-proxy.c:3768
 msgid "pem file to use as CA"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3707
+#: src/gns/gnunet-gns-proxy.c:3772
 msgid "disable use of IPv6"
 msgstr ""
 
-#: src/gns/gnunet-gns-proxy.c:3733
+#: src/gns/gnunet-gns-proxy.c:3798
 msgid "GNUnet GNS proxy"
 msgstr ""
 
-#: src/gns/gnunet-service-gns.c:511
+#: src/gns/gnunet-service-gns.c:506
 #, fuzzy
 msgid "Properly base32-encoded public key required"
 msgstr "“%s”的参数无效。\n"
 
-#: src/gns/gnunet-service-gns.c:547
+#: src/gns/gnunet-service-gns.c:542
 #, fuzzy
 msgid "Failed to connect to the namecache!\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/gns/gnunet-service-gns.c:566
-#: src/zonemaster/gnunet-service-zonemaster.c:873
-#: src/zonemaster/gnunet-service-zonemaster-monitor.c:438
+#: src/gns/gnunet-service-gns.c:561
+#: src/zonemaster/gnunet-service-zonemaster.c:875
+#: src/zonemaster/gnunet-service-zonemaster-monitor.c:440
 #, fuzzy
 msgid "Could not connect to DHT!\n"
 msgstr "无法连接到 %s:%u:%s\n"
 
-#: src/gns/gnunet-service-gns_interceptor.c:257
+#: src/gns/gnunet-service-gns_interceptor.c:259
 msgid "Error converting GNS response to DNS response!\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_interceptor.c:364
+#: src/gns/gnunet-service-gns_interceptor.c:366
 #, fuzzy
 msgid "Failed to connect to the DNS service!\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/gns/gnunet-service-gns_resolver.c:717
+#: src/gns/gnunet-service-gns_resolver.c:700
 #, c-format
 msgid "Protocol `%s' unknown, skipping labels.\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:728
+#: src/gns/gnunet-service-gns_resolver.c:711
 #, c-format
 msgid "Service `%s' unknown for protocol `%s', skipping labels.\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:931
+#: src/gns/gnunet-service-gns_resolver.c:914
 #, fuzzy
 msgid "Failed to parse DNS response\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/gns/gnunet-service-gns_resolver.c:1112
+#: src/gns/gnunet-service-gns_resolver.c:1095
 #, c-format
 msgid "Skipping record of unsupported type %d\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:1382
+#: src/gns/gnunet-service-gns_resolver.c:1365
 #, c-format
 msgid "VPN returned empty result for `%s'\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:1823
+#: src/gns/gnunet-service-gns_resolver.c:1806
 #, c-format
 msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:1866
+#: src/gns/gnunet-service-gns_resolver.c:1849
 #, fuzzy, c-format
 msgid "GNS lookup failed (zero records found for `%s')\n"
 msgstr "运行 %s失败:%s %d\n"
 
-#: src/gns/gnunet-service-gns_resolver.c:2281
+#: src/gns/gnunet-service-gns_resolver.c:2264
 msgid "GNS lookup recursion failed (no delegation record found)\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:2304
+#: src/gns/gnunet-service-gns_resolver.c:2287
 #, fuzzy, c-format
 msgid "Failed to cache GNS resolution: %s\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/gns/gnunet-service-gns_resolver.c:2467
+#: src/gns/gnunet-service-gns_resolver.c:2450
 #, c-format
 msgid "GNS namecache returned empty result for `%s'\n"
 msgstr ""
 
-#: src/gns/gnunet-service-gns_resolver.c:2602
+#: src/gns/gnunet-service-gns_resolver.c:2585
 #, c-format
 msgid "Zone %s was revoked, resolution fails\n"
 msgstr ""
 
-#: src/gns/plugin_gnsrecord_gns.c:179
+#: src/gns/plugin_gnsrecord_gns.c:181
 #, fuzzy, c-format
 msgid "Unable to parse PKEY record `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/gns/plugin_gnsrecord_gns.c:210
+#: src/gns/plugin_gnsrecord_gns.c:212
 #, fuzzy, c-format
 msgid "Unable to parse GNS2DNS record `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/gns/plugin_gnsrecord_gns.c:231
+#: src/gns/plugin_gnsrecord_gns.c:233
 #, fuzzy, c-format
 msgid "Failed to serialize GNS2DNS record with value `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/gns/plugin_gnsrecord_gns.c:256
+#: src/gns/plugin_gnsrecord_gns.c:258
 #, fuzzy, c-format
 msgid "Unable to parse VPN record string `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/gns/plugin_gnsrecord_gns.c:292
+#: src/gns/plugin_gnsrecord_gns.c:294
 #, fuzzy, c-format
 msgid "Unable to parse BOX record string `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:357
+#: 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:378
+#: 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:400
+#: 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:485
+#: src/gnsrecord/plugin_gnsrecord_dns.c:487
 #, fuzzy, c-format
 msgid "Failed to serialize CERT record with %u bytes\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:521
+#: src/gnsrecord/plugin_gnsrecord_dns.c:523
 #, fuzzy, c-format
 msgid "Unable to parse SOA record `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:540
+#: src/gnsrecord/plugin_gnsrecord_dns.c:542
 #, 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:563
+#: src/gnsrecord/plugin_gnsrecord_dns.c:565
 #, fuzzy, c-format
 msgid "Failed to serialize PTR record with value `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:586
+#: src/gnsrecord/plugin_gnsrecord_dns.c:588
 #, fuzzy, c-format
 msgid "Unable to parse MX record `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:601
+#: src/gnsrecord/plugin_gnsrecord_dns.c:603
 #, fuzzy, c-format
 msgid "Failed to serialize MX record with hostname `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:628
+#: src/gnsrecord/plugin_gnsrecord_dns.c:630
 #, fuzzy, c-format
 msgid "Unable to parse SRV record `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:644
+#: src/gnsrecord/plugin_gnsrecord_dns.c:646
 #, fuzzy, c-format
 msgid "Failed to serialize SRV record with target `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:661
+#: src/gnsrecord/plugin_gnsrecord_dns.c:663
 #, fuzzy, c-format
 msgid "Unable to parse IPv6 address `%s'\n"
 msgstr "无效的进程优先级“%s”\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:685
-#: src/gnsrecord/plugin_gnsrecord_dns.c:701
+#: src/gnsrecord/plugin_gnsrecord_dns.c:687
+#: src/gnsrecord/plugin_gnsrecord_dns.c:703
 #, fuzzy, c-format
 msgid "Unable to parse TLSA record string `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/hello/gnunet-hello.c:124
+#: src/hello/gnunet-hello.c:126
 msgid "Call with name of HELLO file to modify.\n"
 msgstr ""
 
-#: src/hello/gnunet-hello.c:130
+#: src/hello/gnunet-hello.c:132
 #, fuzzy, c-format
 msgid "Error accessing file `%s': %s\n"
 msgstr "创建用户出错"
 
-#: src/hello/gnunet-hello.c:138
+#: src/hello/gnunet-hello.c:140
 #, c-format
 msgid "File `%s' is too big to be a HELLO\n"
 msgstr ""
 
-#: src/hello/gnunet-hello.c:145
+#: src/hello/gnunet-hello.c:147
 #, c-format
 msgid "File `%s' is too small to be a HELLO\n"
 msgstr ""
 
-#: src/hello/gnunet-hello.c:155 src/hello/gnunet-hello.c:196
+#: src/hello/gnunet-hello.c:157 src/hello/gnunet-hello.c:198
 #, fuzzy, c-format
 msgid "Error opening file `%s': %s\n"
 msgstr "创建用户出错"
 
-#: src/hello/gnunet-hello.c:172
+#: src/hello/gnunet-hello.c:174
 #, c-format
 msgid "Did not find well-formed HELLO in file `%s'\n"
 msgstr ""
 
-#: src/hello/gnunet-hello.c:208
+#: src/hello/gnunet-hello.c:210
 #, fuzzy, c-format
 msgid "Error writing HELLO to file `%s': %s\n"
 msgstr "创建用户出错"
 
-#: src/hello/gnunet-hello.c:217
+#: src/hello/gnunet-hello.c:219
 #, c-format
 msgid "Modified %u addresses, wrote %u bytes\n"
 msgstr ""
 
-#: src/hello/hello.c:1108
+#: src/hello/hello.c:1110
 #, fuzzy
 msgid "Failed to parse HELLO message: missing expiration time\n"
 msgstr "保存配置失败。"
 
-#: src/hello/hello.c:1117
+#: src/hello/hello.c:1119
 #, fuzzy
 msgid "Failed to parse HELLO message: invalid expiration time\n"
 msgstr "保存配置失败。"
 
-#: src/hello/hello.c:1127
+#: src/hello/hello.c:1129
 #, fuzzy
 msgid "Failed to parse HELLO message: malformed\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/hello/hello.c:1138
+#: src/hello/hello.c:1140
 msgid "Failed to parse HELLO message: missing transport plugin\n"
 msgstr ""
 
-#: src/hello/hello.c:1156
+#: src/hello/hello.c:1158
 #, c-format
 msgid "Plugin `%s' not found, skipping address\n"
 msgstr ""
 
-#: src/hello/hello.c:1164
+#: src/hello/hello.c:1166
 #, c-format
 msgid "Plugin `%s' does not support URIs yet\n"
 msgstr ""
 
-#: src/hello/hello.c:1179
+#: src/hello/hello.c:1181
 #, fuzzy, c-format
 msgid "Failed to parse `%s' as an address for plugin `%s'\n"
 msgstr "找不到接口“%s”的一个 IP 地址。\n"
 
-#: src/hostlist/gnunet-daemon-hostlist.c:314
+#: src/hostlist/gnunet-daemon-hostlist.c:316
 msgid ""
 "None of the functions for the hostlist daemon were enabled.  I have no "
 "reason to run!\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist.c:374
+#: src/hostlist/gnunet-daemon-hostlist.c:376
 msgid "advertise our hostlist to other peers"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist.c:379
+#: src/hostlist/gnunet-daemon-hostlist.c:381
 msgid ""
 "bootstrap using hostlists (it is highly recommended that you always use this "
 "option)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist.c:383
+#: src/hostlist/gnunet-daemon-hostlist.c:385
 msgid "enable learning about hostlist servers from other peers"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist.c:388
+#: src/hostlist/gnunet-daemon-hostlist.c:390
 msgid "provide a hostlist server"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist.c:404
+#: src/hostlist/gnunet-daemon-hostlist.c:406
 msgid "GNUnet hostlist server and client"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:347
+#: src/hostlist/gnunet-daemon-hostlist_client.c:349
 msgid "# bytes downloaded from hostlist servers"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:368
-#: src/hostlist/gnunet-daemon-hostlist_client.c:401
+#: src/hostlist/gnunet-daemon-hostlist_client.c:370
+#: src/hostlist/gnunet-daemon-hostlist_client.c:403
 msgid "# invalid HELLOs downloaded from hostlist servers"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:371
-#: src/hostlist/gnunet-daemon-hostlist_client.c:404
+#: src/hostlist/gnunet-daemon-hostlist_client.c:373
+#: src/hostlist/gnunet-daemon-hostlist_client.c:406
 #, c-format
 msgid "Invalid `%s' message received from hostlist at `%s'\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:389
+#: src/hostlist/gnunet-daemon-hostlist_client.c:391
 msgid "# valid HELLOs downloaded from hostlist servers"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:659
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1405
+#: src/hostlist/gnunet-daemon-hostlist_client.c:661
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1407
 msgid "# advertised hostlist URIs"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:689
+#: src/hostlist/gnunet-daemon-hostlist_client.c:691
 #, c-format
 msgid "# advertised URI `%s' downloaded"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:732
+#: src/hostlist/gnunet-daemon-hostlist_client.c:734
 #, c-format
 msgid ""
 "Advertised hostlist with URI `%s' could not be downloaded. Advertised URI "
 "gets dismissed.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:860
+#: src/hostlist/gnunet-daemon-hostlist_client.c:862
 #, c-format
 msgid "Timeout trying to download hostlist from `%s'\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:874
+#: src/hostlist/gnunet-daemon-hostlist_client.c:876
 #, c-format
 msgid "Download limit of %u bytes exceeded, stopping download\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:894
+#: src/hostlist/gnunet-daemon-hostlist_client.c:896
 #, fuzzy, c-format
 msgid "Download of hostlist from `%s' failed: `%s'\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:900
+#: src/hostlist/gnunet-daemon-hostlist_client.c:902
 #, c-format
 msgid "Download of hostlist `%s' completed.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:908
+#: src/hostlist/gnunet-daemon-hostlist_client.c:910
 #, c-format
 msgid "Adding successfully tested hostlist `%s' datastore.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:961
+#: src/hostlist/gnunet-daemon-hostlist_client.c:963
 #, c-format
 msgid "Bootstrapping using hostlist at `%s'.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:969
+#: src/hostlist/gnunet-daemon-hostlist_client.c:971
 msgid "# hostlist downloads initiated"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1096
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1663
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1098
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1665
 msgid "# milliseconds between hostlist downloads"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1105
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1107
 #, c-format
 msgid "Have %u/%u connections.  Will consider downloading hostlist in %s\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1164
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1185
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1166
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1187
 msgid "# active connections"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1351
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1353
 #, c-format
 msgid "Loading saved hostlist entries from file `%s' \n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1356
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1358
 #, c-format
 msgid "Hostlist file `%s' does not exist\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1365
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1367
 #, fuzzy, c-format
 msgid "Could not open file `%s' for reading to load hostlists: %s\n"
 msgstr "无法解析“%s”来确定已方的 IP 地址:%s\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1399
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1401
 #, c-format
 msgid "%u hostlist URIs loaded from file\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1402
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1404
 msgid "# hostlist URIs read from file"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1448
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1450
 #, fuzzy, c-format
 msgid "Could not open file `%s' for writing to save hostlists: %s\n"
 msgstr "无法解析“%s”来确定已方的 IP 地址:%s\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1455
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1457
 #, c-format
 msgid "Writing %u hostlist URIs to `%s'\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1479
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1496
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1481
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1498
 #, c-format
 msgid "Error writing hostlist URIs to file `%s'\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1491
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1493
 msgid "# hostlist URIs written to file"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1593
-#: src/transport/plugin_transport_http_client.c:2272
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1595
+#: src/transport/plugin_transport_http_client.c:2274
 #, c-format
 msgid "Invalid proxy type: `%s', disabling proxy! Check configuration!\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1622
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1624
 msgid "Learning is enabled on this peer\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1636
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1638
 msgid "Learning is not enabled on this peer\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1649
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1651
 #, c-format
 msgid ""
 "Since learning is not enabled on this peer, hostlist file `%s' was removed\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:174
+#: src/hostlist/gnunet-daemon-hostlist_server.c:176
 msgid "bytes in hostlist"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:199
+#: src/hostlist/gnunet-daemon-hostlist_server.c:201
 msgid "expired addresses encountered"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:235
-#: src/hostlist/gnunet-daemon-hostlist_server.c:529
-#: src/peerinfo-tool/gnunet-peerinfo.c:383
-#: src/peerinfo-tool/gnunet-peerinfo.c:532
-#: src/topology/gnunet-daemon-topology.c:860
+#: src/hostlist/gnunet-daemon-hostlist_server.c:237
+#: src/hostlist/gnunet-daemon-hostlist_server.c:531
+#: src/peerinfo-tool/gnunet-peerinfo.c:385
+#: src/peerinfo-tool/gnunet-peerinfo.c:534
+#: src/topology/gnunet-daemon-topology.c:862
 #, c-format
 msgid "Error in communication with PEERINFO service: %s\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:259
+#: src/hostlist/gnunet-daemon-hostlist_server.c:261
 msgid "HELLOs without addresses encountered (ignored)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:276
+#: src/hostlist/gnunet-daemon-hostlist_server.c:278
 msgid "bytes not included in hostlist (size limit)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:380
+#: src/hostlist/gnunet-daemon-hostlist_server.c:382
 #, c-format
 msgid "Refusing `%s' request to hostlist server\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:383
+#: src/hostlist/gnunet-daemon-hostlist_server.c:385
 msgid "hostlist requests refused (not HTTP GET)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:395
+#: src/hostlist/gnunet-daemon-hostlist_server.c:397
 #, c-format
 msgid "Refusing `%s' request with %llu bytes of upload data\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:399
+#: src/hostlist/gnunet-daemon-hostlist_server.c:401
 msgid "hostlist requests refused (upload data)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:406
+#: src/hostlist/gnunet-daemon-hostlist_server.c:408
 msgid "Could not handle hostlist request since I do not have a response yet\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:409
+#: src/hostlist/gnunet-daemon-hostlist_server.c:411
 msgid "hostlist requests refused (not ready)"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:414
+#: src/hostlist/gnunet-daemon-hostlist_server.c:416
 msgid "Received request for our hostlist\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:416
+#: src/hostlist/gnunet-daemon-hostlist_server.c:418
 msgid "hostlist requests processed"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:464
+#: src/hostlist/gnunet-daemon-hostlist_server.c:466
 msgid "# hostlist advertisements send"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:677
-#: src/transport/gnunet-service-transport.c:2813
+#: src/hostlist/gnunet-daemon-hostlist_server.c:679
+#: src/transport/gnunet-service-transport.c:2814
 msgid "Could not access PEERINFO service.  Exiting.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:689
+#: src/hostlist/gnunet-daemon-hostlist_server.c:691
 #, c-format
 msgid "Invalid port number %llu.  Exiting.\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:701
+#: src/hostlist/gnunet-daemon-hostlist_server.c:703
 #, c-format
 msgid "Hostlist service starts on %s:%llu\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:716
+#: src/hostlist/gnunet-daemon-hostlist_server.c:718
 #, c-format
 msgid "Address to obtain hostlist: `%s'\n"
 msgstr ""
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:729
+#: src/hostlist/gnunet-daemon-hostlist_server.c:731
 #, fuzzy
 msgid "BINDTOIP does not a valid IPv4 address! Ignoring BINDTOIPV4.\n"
 msgstr "“%s”不可用。\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:746
+#: src/hostlist/gnunet-daemon-hostlist_server.c:748
 #, fuzzy
 msgid "BINDTOIP does not a valid IPv4 address! Ignoring BINDTOIPV6.\n"
 msgstr "“%s”不可用。\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:767
+#: src/hostlist/gnunet-daemon-hostlist_server.c:769
 #, fuzzy, c-format
 msgid "`%s' is not a valid IPv4 address! Ignoring BINDTOIPV4.\n"
 msgstr "“%s”不可用。\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:787
+#: src/hostlist/gnunet-daemon-hostlist_server.c:789
 #, fuzzy, c-format
 msgid "`%s' is not a valid IPv6 address! Ignoring BINDTOIPV6.\n"
 msgstr "“%s”不可用。\n"
 
-#: src/hostlist/gnunet-daemon-hostlist_server.c:827
+#: src/hostlist/gnunet-daemon-hostlist_server.c:829
 #, c-format
 msgid "Could not start hostlist HTTP server on port %u\n"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:177
+#: src/identity/gnunet-identity.c:179
 #, fuzzy, c-format
 msgid "Failed to create ego: %s\n"
 msgstr "发送消息失败。\n"
 
-#: src/identity/gnunet-identity.c:199
+#: src/identity/gnunet-identity.c:201
 #, fuzzy, c-format
 msgid "Failed to set default ego: %s\n"
 msgstr "发送消息失败。\n"
 
-#: src/identity/gnunet-identity.c:354
+#: src/identity/gnunet-identity.c:356
 msgid "create ego NAME"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:360
+#: src/identity/gnunet-identity.c:362
 msgid "delete ego NAME "
 msgstr ""
 
-#: src/identity/gnunet-identity.c:365
+#: src/identity/gnunet-identity.c:367
 msgid "display all egos"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:371
+#: src/identity/gnunet-identity.c:373
 msgid ""
 "set default identity to EGO for a subsystem SUBSYSTEM (use together with -s)"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:376
+#: src/identity/gnunet-identity.c:378
 msgid "run in monitor mode egos"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:382
+#: src/identity/gnunet-identity.c:384
 msgid ""
 "set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)"
 msgstr ""
 
-#: src/identity/gnunet-identity.c:396
+#: src/identity/gnunet-identity.c:398
 msgid "Maintain egos"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:389
+#: src/identity/gnunet-service-identity.c:391
 msgid "no default known"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:414
+#: src/identity/gnunet-service-identity.c:416
 msgid "default configured, but ego unknown (internal error)"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:505
-#: src/identity/gnunet-service-identity.c:788
-#: src/identity/gnunet-service-identity.c:916
+#: src/identity/gnunet-service-identity.c:507
+#: src/identity/gnunet-service-identity.c:790
+#: src/identity/gnunet-service-identity.c:918
 #, fuzzy, c-format
 msgid "Failed to write subsystem default identifier map to `%s'.\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/identity/gnunet-service-identity.c:513
+#: src/identity/gnunet-service-identity.c:515
 msgid "Unknown ego specified for service (internal error)"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:608
+#: src/identity/gnunet-service-identity.c:610
 msgid "identifier already in use for another ego"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:763
+#: src/identity/gnunet-service-identity.c:765
 msgid "target name already exists"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:806
-#: src/identity/gnunet-service-identity.c:934
+#: src/identity/gnunet-service-identity.c:808
+#: src/identity/gnunet-service-identity.c:936
 msgid "no matching ego found"
 msgstr ""
 
-#: src/identity/gnunet-service-identity.c:969
+#: src/identity/gnunet-service-identity.c:971
 #, fuzzy, c-format
 msgid "Failed to parse ego information in `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/identity/gnunet-service-identity.c:1027
+#: src/identity/gnunet-service-identity.c:1029
 #, fuzzy, c-format
 msgid "Failed to parse subsystem identity configuration file `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/identity/gnunet-service-identity.c:1037
+#: src/identity/gnunet-service-identity.c:1039
 #, fuzzy, c-format
 msgid "Failed to create directory `%s' for storing egos\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/json/json.c:121
+#: src/json/json.c:123
 #, fuzzy, c-format
 msgid "Failed to parse JSON in option `%s': %s (%s)\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/multicast/gnunet-multicast.c:46 src/multicast/gnunet-multicast.c:70
-msgid "This command doesn't do anything yet."
-msgstr ""
-
-#: src/my/my.c:194 src/my/my.c:213
+#: src/my/my.c:196 src/my/my.c:215
 #, fuzzy, c-format
 msgid "%s failed at %s:%d with error: %s\n"
 msgstr "“%s”于 %s:%d 处失败,错误为:%s\n"
 
-#: src/mysql/mysql.c:178
+#: src/mysql/mysql.c:180
 #, c-format
 msgid "Trying to use file `%s' for MySQL configuration.\n"
 msgstr ""
 
-#: src/mysql/mysql.c:185
+#: src/mysql/mysql.c:187
 #, fuzzy, c-format
 msgid "Could not access file `%s': %s\n"
 msgstr "无法解析“%s”(%s):%s\n"
 
-#: src/namecache/gnunet-namecache.c:105
+#: src/namecache/gnunet-namecache.c:107
 #, fuzzy, c-format
 msgid "No records found for `%s'"
 msgstr "运行 %s失败:%s %d\n"
 
-#: src/namecache/gnunet-namecache.c:120 src/namestore/gnunet-namestore.c:424
+#: src/namecache/gnunet-namecache.c:122 src/namestore/gnunet-namestore.c:454
 #, c-format
 msgid "\tCorrupt or unsupported record of type %u\n"
 msgstr ""
 
-#: src/namecache/gnunet-namecache.c:181
+#: src/namecache/gnunet-namecache.c:183
 #, fuzzy, c-format
 msgid "You must specify which zone should be accessed\n"
 msgstr "您必须指定一个昵称\n"
 
-#: src/namecache/gnunet-namecache.c:191
+#: src/namecache/gnunet-namecache.c:193
 #, fuzzy, c-format
 msgid "Invalid public key for zone `%s'\n"
 msgstr "“%s”的参数无效。\n"
 
-#: src/namecache/gnunet-namecache.c:199
+#: src/namecache/gnunet-namecache.c:201
 #, fuzzy, c-format
 msgid "You must specify a name\n"
 msgstr "您必须指定一个接收方!\n"
 
-#: src/namecache/gnunet-namecache.c:230 src/namestore/gnunet-namestore.c:1290
+#: src/namecache/gnunet-namecache.c:232 src/namestore/gnunet-namestore.c:1575
 msgid "name of the record to add/delete/display"
 msgstr ""
 
-#: src/namecache/gnunet-namecache.c:236
+#: src/namecache/gnunet-namecache.c:238
 msgid "spezifies the public key of the zone to look in"
 msgstr ""
 
-#: src/namecache/gnunet-namecache.c:248 src/namestore/gnunet-namestore.c:1342
+#: src/namecache/gnunet-namecache.c:250 src/namestore/gnunet-namestore.c:1632
 #, fuzzy
 msgid "GNUnet zone manipulation tool"
 msgstr "GNUnet 配置"
 
-#: src/namecache/namecache_api.c:294
+#: src/namecache/namecache_api.c:296
 msgid "Namecache failed to cache block"
 msgstr ""
 
-#: src/namecache/namecache_api.c:381
+#: src/namecache/namecache_api.c:383
 #, fuzzy
 msgid "Error communicating with namecache service"
 msgstr "连接 %s:%u 出错。守护程序在运行吗?\n"
 
-#: src/namecache/plugin_namecache_flat.c:119
-#: src/namecache/plugin_namecache_flat.c:253
-#: src/namestore/plugin_namestore_heap.c:146
-#: src/namestore/plugin_namestore_heap.c:393
-#: src/peerstore/plugin_peerstore_flat.c:377
-#: src/peerstore/plugin_peerstore_flat.c:536
+#: src/namecache/plugin_namecache_flat.c:121
+#: src/namecache/plugin_namecache_flat.c:255
+#: src/namestore/plugin_namestore_heap.c:148
+#: src/namestore/plugin_namestore_heap.c:395
+#: src/peerstore/plugin_peerstore_flat.c:379
+#: src/peerstore/plugin_peerstore_flat.c:538
 #, 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_heap.c:157
-#: src/peerstore/plugin_peerstore_flat.c:392
+#: src/namecache/plugin_namecache_flat.c:132
+#: src/namestore/plugin_namestore_heap.c:159
+#: src/peerstore/plugin_peerstore_flat.c:394
 #, fuzzy, c-format
 msgid "Unable to get filesize: %s.\n"
 msgstr "发送消息失败。\n"
 
-#: src/namecache/plugin_namecache_flat.c:149
-#: src/namestore/plugin_namestore_heap.c:170
-#: src/peerstore/plugin_peerstore_flat.c:404
+#: src/namecache/plugin_namecache_flat.c:151
+#: src/namestore/plugin_namestore_heap.c:172
+#: src/peerstore/plugin_peerstore_flat.c:406
 #, fuzzy, c-format
 msgid "Unable to read file: %s.\n"
 msgstr "发送消息失败。\n"
 
-#: src/namecache/plugin_namecache_flat.c:408
+#: src/namecache/plugin_namecache_flat.c:410
 #, fuzzy
 msgid "flat plugin running\n"
 msgstr "sqlite 数据仓库"
 
-#: src/namestore/gnunet-namestore.c:311
+#: src/namecache/plugin_namecache_sqlite.c:183
+#: src/namecache/plugin_namecache_sqlite.c:197
+#: src/namestore/plugin_namestore_sqlite.c:219
+#: src/namestore/plugin_namestore_sqlite.c:230
+#, fuzzy, c-format
+msgid "Failed to setup database at `%s'\n"
+msgstr "运行 %s失败:%s %d\n"
+
+#: src/namestore/gnunet-namestore.c:341
 #, c-format
 msgid "Adding record failed: %s\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:341
+#: src/namestore/gnunet-namestore.c:371
 #, c-format
 msgid "Deleting record failed, record does not exist%s%s\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:348
+#: src/namestore/gnunet-namestore.c:378
 #, c-format
 msgid "Deleting record failed%s%s\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:628 src/namestore/gnunet-namestore.c:636
+#: src/namestore/gnunet-namestore.c:660 src/namestore/gnunet-namestore.c:668
 #, c-format
 msgid "A %s record exists already under `%s', no other records can be added.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:650 src/namestore/gnunet-namestore.c:662
+#: src/namestore/gnunet-namestore.c:682 src/namestore/gnunet-namestore.c:694
 #, c-format
 msgid "Records already exist under `%s', cannot add `%s' record.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:675
+#: src/namestore/gnunet-namestore.c:707
 #, c-format
 msgid ""
 "Non-GNS2DNS records already exist under `%s', cannot add GNS2DNS record.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:809
+#: src/namestore/gnunet-namestore.c:837
 #, c-format
 msgid "There are no records under label `%s' that could be deleted.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:850
+#: src/namestore/gnunet-namestore.c:878
 #, c-format
 msgid ""
 "There are no records under label `%s' that match the request for deletion.\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:902
+#: src/namestore/gnunet-namestore.c:965
+#, fuzzy, c-format
+msgid "Failed to replace records: %s\n"
+msgstr "打开日志文件“%s”失败:%s\n"
+
+#: src/namestore/gnunet-namestore.c:1009
 #, c-format
 msgid "No options given\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:921 src/namestore/gnunet-namestore.c:930
-#: src/namestore/gnunet-namestore.c:949 src/namestore/gnunet-namestore.c:972
-#: src/namestore/gnunet-namestore.c:1026
+#: src/namestore/gnunet-namestore.c:1032 src/namestore/gnunet-namestore.c:1065
+#: src/namestore/gnunet-namestore.c:1074 src/namestore/gnunet-namestore.c:1093
+#: src/namestore/gnunet-namestore.c:1116 src/namestore/gnunet-namestore.c:1148
 #, fuzzy, c-format
 msgid "Missing option `%s' for operation `%s'\n"
 msgstr "配置文件“%s”已写入。\n"
 
-#: src/namestore/gnunet-namestore.c:922 src/namestore/gnunet-namestore.c:931
-#: src/namestore/gnunet-namestore.c:950 src/namestore/gnunet-namestore.c:974
+#: src/namestore/gnunet-namestore.c:1033
+msgid "replace"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1066 src/namestore/gnunet-namestore.c:1075
+#: src/namestore/gnunet-namestore.c:1094 src/namestore/gnunet-namestore.c:1118
 msgid "add"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:940
+#: src/namestore/gnunet-namestore.c:1084
 #, fuzzy, c-format
 msgid "Unsupported type `%s'\n"
 msgstr "未知的命令“%s”。\n"
 
-#: src/namestore/gnunet-namestore.c:962
+#: src/namestore/gnunet-namestore.c:1106
 #, c-format
 msgid "Value `%s' invalid for record type `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1007
+#: src/namestore/gnunet-namestore.c:1129
 #, fuzzy, c-format
 msgid "Invalid time format `%s'\n"
 msgstr "IP 格式无效:“%s”\n"
 
-#: src/namestore/gnunet-namestore.c:1027
+#: src/namestore/gnunet-namestore.c:1149
 msgid "del"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1070
+#: src/namestore/gnunet-namestore.c:1192
 #, fuzzy, c-format
 msgid "Invalid public key for reverse lookup `%s'\n"
 msgstr "“%s”的参数无效。\n"
 
-#: src/namestore/gnunet-namestore.c:1099
-#: src/peerinfo-tool/gnunet-peerinfo.c:773
+#: src/namestore/gnunet-namestore.c:1221
+#: src/peerinfo-tool/gnunet-peerinfo.c:775
 #, fuzzy, c-format
 msgid "Invalid URI `%s'\n"
 msgstr "无效条目。\n"
 
-#: src/namestore/gnunet-namestore.c:1134
+#: src/namestore/gnunet-namestore.c:1249
 #, fuzzy, c-format
 msgid "Invalid nick `%s'\n"
 msgstr "无效条目。\n"
 
-#: src/namestore/gnunet-namestore.c:1174
+#: src/namestore/gnunet-namestore.c:1289
 #, c-format
 msgid "No default ego configured in identity service\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1238
+#: src/namestore/gnunet-namestore.c:1341
+#, c-format
+msgid "Superfluous command line arguments (starting with `%s') ignored\n"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1357
 #, fuzzy, c-format
 msgid "Cannot connect to identity service\n"
 msgstr "无法连接到 %s:%u:%s\n"
 
-#: src/namestore/gnunet-namestore.c:1263
+#: src/namestore/gnunet-namestore.c:1407
+msgid "Empty record line argument is not allowed.\n"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1423
+#, c-format
+msgid "Invalid expiration time `%s' (must be without unit)\n"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1435 src/namestore/gnunet-namestore.c:1453
+#: src/namestore/gnunet-namestore.c:1470
+#, fuzzy, c-format
+msgid "Missing entries in record line `%s'.\n"
+msgstr "解析配置文件“%s”失败\n"
+
+#: src/namestore/gnunet-namestore.c:1444
+#, fuzzy, c-format
+msgid "Unknown record type `%s'\n"
+msgstr "未知的命令“%s”。\n"
+
+#: src/namestore/gnunet-namestore.c:1484
+#, fuzzy, c-format
+msgid "Invalid record data for type %s: `%s'.\n"
+msgstr "IP 格式无效:“%s”\n"
+
+#: src/namestore/gnunet-namestore.c:1548
 msgid "add record"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1267
+#: src/namestore/gnunet-namestore.c:1552
 msgid "delete record"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1271
+#: src/namestore/gnunet-namestore.c:1556
 msgid "display records"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1276
+#: src/namestore/gnunet-namestore.c:1561
 msgid ""
 "expiration time for record to use (for adding only), \"never\" is possible"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1281
+#: src/namestore/gnunet-namestore.c:1566
 #, fuzzy
 msgid "set the desired nick name for the zone"
 msgstr "无法获取有关用户“%s”的信息:%s\n"
 
-#: src/namestore/gnunet-namestore.c:1285
+#: src/namestore/gnunet-namestore.c:1570
 #, fuzzy
 msgid "monitor changes in the namestore"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/namestore/gnunet-namestore.c:1295
+#: src/namestore/gnunet-namestore.c:1580
 #, fuzzy
 msgid "determine our name for the given PKEY"
 msgstr "无法获取有关用户“%s”的信息:%s\n"
 
-#: src/namestore/gnunet-namestore.c:1300
+#: src/namestore/gnunet-namestore.c:1585
+msgid ""
+"set record set to values given by (possibly multiple) RECORDLINES; can be "
+"specified multiple times"
+msgstr ""
+
+#: src/namestore/gnunet-namestore.c:1590
 msgid "type of the record to add/delete/display"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1305
+#: src/namestore/gnunet-namestore.c:1595
 msgid "URI to import into our zone"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1310
+#: src/namestore/gnunet-namestore.c:1600
 msgid "value of the record to add/delete"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1314
+#: src/namestore/gnunet-namestore.c:1604
 msgid "create or list public record"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1318
+#: src/namestore/gnunet-namestore.c:1608
 msgid ""
 "create shadow record (only valid if all other records of the same type have "
 "expired"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:1323
+#: src/namestore/gnunet-namestore.c:1613
 msgid "name of the ego controlling the zone"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:547
+#: src/namestore/gnunet-namestore-fcfsd.c:549
 #, fuzzy, c-format
 msgid "Unsupported form value `%s'\n"
 msgstr "未知的命令“%s”。\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:574
+#: src/namestore/gnunet-namestore-fcfsd.c:576
 #, fuzzy, c-format
 msgid "Failed to create record for domain `%s': %s\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:595
+#: src/namestore/gnunet-namestore-fcfsd.c:597
 msgid "Error when mapping zone to name\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:627
+#: src/namestore/gnunet-namestore-fcfsd.c:629
 #, c-format
 msgid "Found existing name `%s' for the given key\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:687
+#: src/namestore/gnunet-namestore-fcfsd.c:689
 #, c-format
 msgid "Found %u existing records for domain `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:775
+#: src/namestore/gnunet-namestore-fcfsd.c:777
 #, fuzzy, c-format
 msgid "Failed to create page for `%s'\n"
 msgstr "发送消息失败。\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:794
+#: src/namestore/gnunet-namestore-fcfsd.c:796
 #, fuzzy, c-format
 msgid "Failed to setup post processor for `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:830
+#: src/namestore/gnunet-namestore-fcfsd.c:832
 msgid "Domain name must not contain `.'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:839
+#: src/namestore/gnunet-namestore-fcfsd.c:841
 msgid "Domain name must not contain `+'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1069
+#: src/namestore/gnunet-namestore-fcfsd.c:1071
 msgid "No ego configured for `fcfsd` subsystem\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1097
+#: src/namestore/gnunet-namestore-fcfsd.c:1099
 #, fuzzy
 msgid "Failed to start HTTP server\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1145
+#: src/namestore/gnunet-namestore-fcfsd.c:1147
 #, fuzzy
 msgid "Failed to connect to identity\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1171
+#: src/namestore/gnunet-namestore-fcfsd.c:1173
 msgid "name of the zone that is to be managed by FCFSD"
 msgstr ""
 
-#: src/namestore/gnunet-namestore-fcfsd.c:1190
+#: src/namestore/gnunet-namestore-fcfsd.c:1192
 msgid "GNU Name System First Come First Serve name registration service"
 msgstr ""
 
-#: src/namestore/gnunet-service-namestore.c:749
+#: src/namestore/gnunet-service-namestore.c:900
 #, fuzzy, c-format
 msgid "Failed to replicate block in namecache: %s\n"
 msgstr "发送消息失败。\n"
 
-#: src/namestore/gnunet-zoneimport.c:2036
+#: src/namestore/gnunet-zoneimport.c:2038
 msgid "size to use for the main hash map"
 msgstr ""
 
-#: src/namestore/gnunet-zoneimport.c:2041
+#: src/namestore/gnunet-zoneimport.c:2043
 msgid "minimum expiration time we assume for imported records"
 msgstr ""
 
-#: src/namestore/namestore_api.c:389
+#: src/namestore/namestore_api.c:391
 msgid "Namestore failed to store record\n"
 msgstr ""
 
-#: src/namestore/plugin_namestore_heap.c:776
+#: src/namestore/plugin_namestore_heap.c:778
 #, fuzzy
 msgid "heap file database running\n"
 msgstr "sqlite 数据仓库"
 
-#: src/namestore/plugin_namestore_sqlite.c:216
-#: src/namestore/plugin_namestore_sqlite.c:227
-#, fuzzy, c-format
-msgid "Failed to setup database at `%s'\n"
-msgstr "运行 %s失败:%s %d\n"
-
-#: src/nat-auto/gnunet-nat-auto.c:191
+#: src/nat-auto/gnunet-nat-auto.c:193
 #, fuzzy
 msgid "Suggested configuration changes:\n"
 msgstr ""
 "\n"
 "您的配置更改没有保存。\n"
 
-#: src/nat-auto/gnunet-nat-auto.c:217
+#: src/nat-auto/gnunet-nat-auto.c:219
 #, fuzzy, c-format
 msgid "Failed to write configuration to `%s'\n"
 msgstr "保存配置失败。"
 
-#: src/nat-auto/gnunet-nat-auto.c:224
+#: src/nat-auto/gnunet-nat-auto.c:226
 #, fuzzy, c-format
 msgid "Wrote updated configuration to `%s'\n"
 msgstr "找不到接口“%s”的一个 IP 地址。\n"
 
-#: src/nat-auto/gnunet-nat-auto.c:343
+#: src/nat-auto/gnunet-nat-auto.c:345
 #, fuzzy
 msgid "run autoconfiguration"
 msgstr "配额配置"
 
-#: src/nat-auto/gnunet-nat-auto.c:349
+#: src/nat-auto/gnunet-nat-auto.c:351
 msgid "section name providing the configuration for the adapter"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:354 src/nat/gnunet-nat.c:451
+#: src/nat-auto/gnunet-nat-auto.c:356 src/nat/gnunet-nat.c:459
 msgid "use TCP"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:359 src/nat/gnunet-nat.c:456
+#: src/nat-auto/gnunet-nat-auto.c:361 src/nat/gnunet-nat.c:464
 msgid "use UDP"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:364
+#: src/nat-auto/gnunet-nat-auto.c:366
 msgid "write configuration file (for autoconfiguration)"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto.c:376
+#: src/nat-auto/gnunet-nat-auto.c:378
 #, fuzzy
 msgid "GNUnet NAT traversal autoconfiguration"
 msgstr "GNUnet 配置"
 
-#: src/nat-auto/gnunet-nat-auto_legacy.c:401
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:679
-#: src/nat-auto/nat_auto_api_test.c:403
+#: src/nat-auto/gnunet-nat-auto_legacy.c:403
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:681
+#: src/nat-auto/nat_auto_api_test.c:409
 msgid "Failed to connect to `gnunet-nat-server'\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto_legacy.c:516
+#: src/nat-auto/gnunet-nat-auto_legacy.c:518
 #, c-format
 msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-nat-auto_legacy.c:566
-#: src/nat-auto/nat_auto_api_test.c:569
+#: src/nat-auto/gnunet-nat-auto_legacy.c:568
+#: src/nat-auto/nat_auto_api_test.c:575
 #, fuzzy
 msgid "NAT test failed to start NAT library\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/nat-auto/gnunet-service-nat-auto.c:340
+#: src/nat-auto/gnunet-service-nat-auto.c:342
 msgid "UPnP client `upnpc` command not found, disabling UPnP\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:383
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:385
 msgid "NAT traversal with ICMP Server succeeded.\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:384
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:386
 msgid "NAT traversal with ICMP Server failed.\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:403
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:405
 msgid "Testing connection reversal with ICMP server.\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:435
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:437
 #, c-format
 msgid "Detected external IP `%s'\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:570
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:572
 msgid "This system has a global IPv6 address, setting IPv6 to supported.\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:588
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:590
 #, fuzzy, c-format
 msgid "Detected internal network address `%s'.\n"
 msgstr "GNUnet 现在使用 IP 地址 %s。\n"
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:722
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:724
 msgid "upnpc found, enabling its use\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:723
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:725
 msgid "upnpc not found\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:760
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:762
 msgid "test_icmp_server not possible, as we have no public IPv4 address\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:772
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:832
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:774
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:834
 msgid "test_icmp_server not possible, as we are not behind NAT\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:784
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:844
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:786
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:846
 msgid "No working gnunet-helper-nat-server found\n"
 msgstr ""
 
-#: src/nat-auto/gnunet-service-nat-auto_legacy.c:821
+#: src/nat-auto/gnunet-service-nat-auto_legacy.c:823
 msgid "test_icmp_client not possible, as we have no internal IPv4 address\n"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:74
+#: src/nat-auto/nat_auto_api.c:76
 msgid "Operation Successful"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:76
+#: src/nat-auto/nat_auto_api.c:78
 msgid "IPC failure"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:78
+#: src/nat-auto/nat_auto_api.c:80
 msgid "Failure in network subsystem, check permissions."
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:80
+#: src/nat-auto/nat_auto_api.c:82
 msgid "Encountered timeout while performing operation"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:82
+#: src/nat-auto/nat_auto_api.c:84
 msgid "detected that we are offline"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:84
+#: src/nat-auto/nat_auto_api.c:86
 msgid "`upnpc` command not found"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:86
+#: src/nat-auto/nat_auto_api.c:88
 #, fuzzy
 msgid "Failed to run `upnpc` command"
 msgstr "运行 %s失败:%s %d\n"
 
-#: src/nat-auto/nat_auto_api.c:88
+#: src/nat-auto/nat_auto_api.c:90
 msgid "`upnpc' command took too long, process killed"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:90
+#: src/nat-auto/nat_auto_api.c:92
 msgid "`upnpc' command failed to establish port mapping"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:92
+#: src/nat-auto/nat_auto_api.c:94
 msgid "`external-ip' command not found"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:94
+#: src/nat-auto/nat_auto_api.c:96
 #, fuzzy
 msgid "Failed to run `external-ip` command"
 msgstr "运行 %s失败:%s %d\n"
 
-#: src/nat-auto/nat_auto_api.c:96
+#: src/nat-auto/nat_auto_api.c:98
 msgid "`external-ip' command output invalid"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:98
+#: src/nat-auto/nat_auto_api.c:100
 msgid "no valid address was returned by `external-ip'"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:100
+#: src/nat-auto/nat_auto_api.c:102
 #, fuzzy
 msgid "Could not determine interface with internal/local network address"
 msgstr "无法确定用户界面定义文件。"
 
-#: src/nat-auto/nat_auto_api.c:102
+#: src/nat-auto/nat_auto_api.c:104
 msgid "No functioning gnunet-helper-nat-server installation found"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:104
+#: src/nat-auto/nat_auto_api.c:106
 msgid "NAT test could not be initialized"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:106
+#: src/nat-auto/nat_auto_api.c:108
 msgid "NAT test timeout reached"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:108
+#: src/nat-auto/nat_auto_api.c:110
 msgid "could not register NAT"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api.c:110
+#: src/nat-auto/nat_auto_api.c:112
 msgid "No working gnunet-helper-nat-client installation found"
 msgstr ""
 
-#: src/nat-auto/nat_auto_api_test.c:475
+#: src/nat-auto/nat_auto_api_test.c:481
 #, fuzzy, c-format
 msgid "Failed to find valid PORT in section `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/nat-auto/nat_auto_api_test.c:520
+#: src/nat-auto/nat_auto_api_test.c:526
 #, fuzzy, c-format
 msgid "Failed to create socket bound to `%s' for NAT test: %s\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/nat/gnunet-nat.c:429
+#: src/nat/gnunet-nat.c:437
 msgid "which IP and port are we locally using to bind/listen to"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:435
+#: src/nat/gnunet-nat.c:443
 msgid "which remote IP and port should be asked for connection reversal"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:441
+#: src/nat/gnunet-nat.c:449
 msgid ""
 "name of configuration section to find additional options, such as manual "
 "host punching data"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:446
+#: src/nat/gnunet-nat.c:454
 msgid "enable STUN processing"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:461
+#: src/nat/gnunet-nat.c:469
 msgid "watch for connection reversal requests"
 msgstr ""
 
-#: src/nat/gnunet-nat.c:473
+#: src/nat/gnunet-nat.c:481
 msgid "GNUnet NAT traversal autoconfigure daemon"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1337
+#: src/nat/gnunet-service-nat.c:1339
 #, c-format
 msgid "Malformed punched hole specification `%s' (lacks port)\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1347
+#: src/nat/gnunet-service-nat.c:1349
 #, c-format
 msgid "Invalid port number in punched hole specification `%s' (lacks port)\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1363
+#: src/nat/gnunet-service-nat.c:1365
 #, c-format
 msgid "Malformed punched hole specification `%s' (lacks `]')\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1374
+#: src/nat/gnunet-service-nat.c:1376
 #, c-format
 msgid "Malformed punched hole specification `%s' (IPv6 address invalid)"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1839
+#: src/nat/gnunet-service-nat.c:1841
 msgid "Connection reversal request failed\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat.c:1912
+#: src/nat/gnunet-service-nat.c:1914
 msgid ""
 "UPnP enabled in configuration, but UPnP client `upnpc` command not found, "
 "disabling UPnP\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat_helper.c:184
+#: src/nat/gnunet-service-nat_helper.c:186
 #, c-format
 msgid "gnunet-helper-nat-server generated malformed address `%s'\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat_helper.c:271
+#: src/nat/gnunet-service-nat_helper.c:273
 #, fuzzy, c-format
 msgid "Failed to start %s\n"
 msgstr "运行 %s失败:%s %d\n"
 
-#: src/nat/gnunet-service-nat_mini.c:194
+#: src/nat/gnunet-service-nat_mini.c:196
 msgid "`external-ip' command not found\n"
 msgstr ""
 
-#: src/nat/gnunet-service-nat_mini.c:654
+#: src/nat/gnunet-service-nat_mini.c:656
 msgid "`upnpc' command not found\n"
 msgstr ""
 
-#: src/nse/gnunet-nse.c:120
+#: src/nse/gnunet-nse.c:122
 msgid "Show network size estimates from NSE service."
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:847
+#: src/nse/gnunet-nse-profiler.c:849
 msgid "limit to the number of connections to NSE services, 0 for none"
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:852
+#: src/nse/gnunet-nse-profiler.c:854
 msgid "name of the file for writing connection information and statistics"
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:864
+#: src/nse/gnunet-nse-profiler.c:866
 msgid "name of the file for writing the main results"
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:871
+#: src/nse/gnunet-nse-profiler.c:873
 msgid "Number of peers to run in each round, separated by commas"
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:882
+#: src/nse/gnunet-nse-profiler.c:884
 msgid "delay between rounds"
 msgstr ""
 
-#: src/nse/gnunet-nse-profiler.c:891
+#: src/nse/gnunet-nse-profiler.c:893
 #, fuzzy
 msgid "Measure quality and performance of the NSE service."
 msgstr "无法访问该服务"
 
-#: src/nse/gnunet-service-nse.c:1532
-#: src/revocation/gnunet-service-revocation.c:841 src/util/gnunet-scrypt.c:274
+#: src/nse/gnunet-service-nse.c:1534
+#: src/revocation/gnunet-service-revocation.c:843 src/util/gnunet-scrypt.c:276
 #, fuzzy
 msgid "Value is too large.\n"
 msgstr "值不在合法范围内。"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:176
+#: src/peerinfo/gnunet-service-peerinfo.c:178
 #, c-format
 msgid "Removing expired address of transport `%s'\n"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:311
+#: src/peerinfo/gnunet-service-peerinfo.c:313
 #, fuzzy, c-format
 msgid "Failed to parse HELLO in file `%s': %s\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:332
-#: src/peerinfo/gnunet-service-peerinfo.c:363
+#: src/peerinfo/gnunet-service-peerinfo.c:334
+#: src/peerinfo/gnunet-service-peerinfo.c:365
 #, fuzzy, c-format
 msgid "Failed to parse HELLO in file `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:447
+#: src/peerinfo/gnunet-service-peerinfo.c:449
 msgid "# peers known"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:490
+#: src/peerinfo/gnunet-service-peerinfo.c:492
 #, c-format
 msgid ""
 "File `%s' in directory `%s' does not match naming convention. Removed.\n"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:657
+#: src/peerinfo/gnunet-service-peerinfo.c:659
 #, fuzzy, c-format
 msgid "Scanning directory `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:665
+#: src/peerinfo/gnunet-service-peerinfo.c:667
 #, c-format
 msgid "Still no peers found in `%s'!\n"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:1098
+#: src/peerinfo/gnunet-service-peerinfo.c:1100
 #, fuzzy, c-format
 msgid "Cleaning up directory `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/peerinfo/gnunet-service-peerinfo.c:1436
+#: src/peerinfo/gnunet-service-peerinfo.c:1438
 #, c-format
 msgid "Importing HELLOs from `%s'\n"
 msgstr ""
 
-#: src/peerinfo/gnunet-service-peerinfo.c:1449
+#: src/peerinfo/gnunet-service-peerinfo.c:1451
 msgid "Skipping import of included HELLOs\n"
 msgstr ""
 
-#: src/peerinfo/peerinfo_api.c:218
+#: src/peerinfo/peerinfo_api.c:220
 msgid "Failed to receive response from `PEERINFO' service."
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:237
+#: src/peerinfo-tool/gnunet-peerinfo.c:239
 #, fuzzy, c-format
 msgid "%sPeer `%s'\n"
 msgstr "运行 %s失败:%s %d\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:244
+#: src/peerinfo-tool/gnunet-peerinfo.c:246
 #, c-format
 msgid "\tExpires: %s \t %s\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:297
-#: src/rest-plugins/plugin_rest_peerinfo.c:499
+#: src/peerinfo-tool/gnunet-peerinfo.c:299
+#: src/rest-plugins/plugin_rest_peerinfo.c:501
 #, fuzzy, c-format
 msgid "Failure: Cannot convert address to string for peer `%s'\n"
 msgstr "找不到接口“%s”的一个 IP 地址。\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:464
+#: src/peerinfo-tool/gnunet-peerinfo.c:466
 #, c-format
 msgid "Failure: Received invalid %s\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:478
+#: src/peerinfo-tool/gnunet-peerinfo.c:480
 #, fuzzy, c-format
 msgid "Failed to write HELLO with %u bytes to file `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:497
+#: src/peerinfo-tool/gnunet-peerinfo.c:499
 #, c-format
 msgid "Wrote %s HELLO containing %u addresses with %u bytes to file `%s'\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:797
+#: src/peerinfo-tool/gnunet-peerinfo.c:799
 #, c-format
 msgid "I am peer `%s'.\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:841
+#: src/peerinfo-tool/gnunet-peerinfo.c:843
 msgid "don't resolve host names"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:846
+#: src/peerinfo-tool/gnunet-peerinfo.c:848
 msgid "output only the identity strings"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:850
+#: src/peerinfo-tool/gnunet-peerinfo.c:852
 msgid "include friend-only information"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:855
+#: src/peerinfo-tool/gnunet-peerinfo.c:857
 msgid "output our own identity only"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:860
+#: src/peerinfo-tool/gnunet-peerinfo.c:862
 #, fuzzy
 msgid "list all known peers"
 msgstr "列出所有网络适配器"
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:866
+#: src/peerinfo-tool/gnunet-peerinfo.c:868
 msgid "dump hello to file"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:871
+#: src/peerinfo-tool/gnunet-peerinfo.c:873
 msgid "also output HELLO uri(s)"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:877
+#: src/peerinfo-tool/gnunet-peerinfo.c:879
 msgid "add given HELLO uri to the database"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo.c:895
+#: src/peerinfo-tool/gnunet-peerinfo.c:897
 #, fuzzy
 msgid "Print information about peers."
 msgstr "无法获取有关用户“%s”的信息:%s\n"
 
-#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:103
-#: src/transport/gnunet-service-transport_plugins.c:166
+#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:105
+#: src/transport/gnunet-service-transport_plugins.c:168
 #, c-format
 msgid "Starting transport plugins `%s'\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:107
-#: src/transport/gnunet-service-transport_plugins.c:171
+#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:109
+#: src/transport/gnunet-service-transport_plugins.c:173
 #, c-format
 msgid "Loading `%s' transport plugin\n"
 msgstr ""
 
-#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:127
-#: src/transport/gnunet-service-transport_plugins.c:206
+#: src/peerinfo-tool/gnunet-peerinfo_plugins.c:129
+#: src/transport/gnunet-service-transport_plugins.c:208
 #, fuzzy, c-format
 msgid "Failed to load transport plugin for `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/peerstore/gnunet-peerstore.c:89
+#: src/peerstore/gnunet-peerstore.c:91
 msgid "peerstore"
 msgstr ""
 
-#: src/peerstore/gnunet-service-peerstore.c:596
+#: src/peerstore/gnunet-service-peerstore.c:598
 #, fuzzy, c-format
 msgid "Could not load database backend `%s'\n"
 msgstr "无法解析“%s”(%s):%s\n"
 
-#: src/peerstore/peerstore_api.c:348
-msgid "timeout"
-msgstr ""
-
-#: src/peerstore/peerstore_api.c:564 src/peerstore/peerstore_api.c:613
+#: src/peerstore/peerstore_api.c:532 src/peerstore/peerstore_api.c:581
 #, fuzzy
 msgid "Unexpected iteration response, this should not happen.\n"
 msgstr "输出格式未知,不应出现这种情况。\n"
 
-#: src/peerstore/peerstore_api.c:627
+#: src/peerstore/peerstore_api.c:595
 #, fuzzy
 msgid "Received a malformed response from service."
 msgstr "“%s”的参数无效。\n"
 
-#: src/peerstore/peerstore_api.c:776
+#: src/peerstore/peerstore_api.c:731
 msgid "Received a watch result for a non existing watch.\n"
 msgstr ""
 
-#: src/peerstore/plugin_peerstore_sqlite.c:451
-#: src/psycstore/plugin_psycstore_sqlite.c:280
+#: src/peerstore/plugin_peerstore_sqlite.c:453
 #, fuzzy, c-format
 msgid ""
 "Error executing SQL query: %s\n"
 "  %s\n"
 msgstr "创建用户出错"
 
-#: src/peerstore/plugin_peerstore_sqlite.c:486
-#: src/psycstore/plugin_psycstore_mysql.c:248
-#: src/psycstore/plugin_psycstore_sqlite.c:257
+#: src/peerstore/plugin_peerstore_sqlite.c:488
 #, fuzzy, c-format
 msgid ""
 "Error preparing SQL query: %s\n"
 "  %s\n"
 msgstr "创建用户出错"
 
-#: src/peerstore/plugin_peerstore_sqlite.c:568
+#: src/peerstore/plugin_peerstore_sqlite.c:570
 #, fuzzy, c-format
 msgid "Unable to create indices: %s.\n"
 msgstr "发送消息失败。\n"
 
-#: src/pq/pq_prepare.c:82
+#: src/pq/pq_prepare.c:84
 #, fuzzy, c-format
 msgid "PQprepare (`%s' as `%s') failed with error: %s\n"
 msgstr "“%s”于 %s:%d 处失败,错误为:%s\n"
 
-#: src/psycstore/gnunet-service-psycstore.c:247
-#, fuzzy
-msgid "Failed to store membership information!\n"
-msgstr "打开日志文件“%s”失败:%s\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:269
-#, fuzzy
-msgid "Failed to test membership!\n"
-msgstr "发送消息失败。\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:298
-#, fuzzy
-msgid "Dropping invalid fragment\n"
-msgstr "“%s”的参数无效。\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:309
-#, fuzzy
-msgid "Failed to store fragment\n"
-msgstr "运行 %s失败:%s %d\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:366
-#, fuzzy
-msgid "Failed to get fragment!\n"
-msgstr "发送消息失败。\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:432
-#, fuzzy
-msgid "Failed to get message!\n"
-msgstr "发送消息失败。\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:462
-#, fuzzy
-msgid "Failed to get message fragment!\n"
-msgstr "打开日志文件“%s”失败:%s\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:492
-#, fuzzy
-msgid "Failed to get master counters!\n"
-msgstr "发送消息失败。\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:673
-#, fuzzy, c-format
-msgid "Failed to begin modifying state: %d\n"
-msgstr "运行 %s失败:%s %d\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:683
-#, fuzzy, c-format
-msgid "Failed to modify state: %d\n"
-msgstr "运行 %s失败:%s %d\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:691
-#, fuzzy
-msgid "Failed to end modifying state!\n"
-msgstr "运行 %s失败:%s %d\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:728
-msgid "Tried to set invalid state variable name!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:742
-#, fuzzy
-msgid "Failed to begin synchronizing state!\n"
-msgstr "发送消息失败。\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:759
-#, fuzzy
-msgid "Failed to end synchronizing state!\n"
-msgstr "发送消息失败。\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:777
-#: src/psycstore/gnunet-service-psycstore.c:793
-#, fuzzy
-msgid "Failed to reset state!\n"
-msgstr "发送消息失败。\n"
-
-#: src/psycstore/gnunet-service-psycstore.c:822
-#: src/psycstore/gnunet-service-psycstore.c:879
-msgid "Tried to get invalid state variable name!\n"
-msgstr ""
-
-#: src/psycstore/gnunet-service-psycstore.c:849
-#: src/psycstore/gnunet-service-psycstore.c:894
-#, fuzzy
-msgid "Failed to get state variable!\n"
-msgstr "发送消息失败。\n"
-
-#: src/psycstore/plugin_psycstore_mysql.c:279
-#, fuzzy
-msgid "Unable to initialize Mysql.\n"
-msgstr "无法初始化 SQLite:%s。\n"
-
-#: src/psycstore/plugin_psycstore_mysql.c:289
-#, fuzzy, c-format
-msgid "Failed to run SQL statement `%s'\n"
-msgstr "解析配置文件“%s”失败\n"
-
-#: src/psycstore/plugin_psycstore_sqlite.c:59
-#, fuzzy, c-format
-msgid "`%s' failed at %s:%d with error: %s (%d)\n"
-msgstr "“%s”于 %s:%d 处失败,错误为:%s\n"
-
-#: src/psycstore/plugin_psycstore_sqlite.c:1922
-#, fuzzy
-msgid "SQLite database running\n"
-msgstr "sqlite 数据仓库"
-
-#: src/pt/gnunet-daemon-pt.c:421
+#: src/pt/gnunet-daemon-pt.c:423
 msgid "Failed to pack DNS request.  Dropping.\n"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:427
+#: src/pt/gnunet-daemon-pt.c:429
 msgid "# DNS requests mapped to VPN"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:481
+#: src/pt/gnunet-daemon-pt.c:483
 msgid "# DNS records modified"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:665
+#: src/pt/gnunet-daemon-pt.c:667
 msgid "# DNS replies intercepted"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:672
+#: src/pt/gnunet-daemon-pt.c:674
 msgid "Failed to parse DNS request.  Dropping.\n"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:710
+#: src/pt/gnunet-daemon-pt.c:712
 msgid "# DNS requests dropped (timeout)"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:766
+#: src/pt/gnunet-daemon-pt.c:768
 msgid "# DNS requests intercepted"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:771
+#: src/pt/gnunet-daemon-pt.c:773
 msgid "# DNS requests dropped (DNS cadet channel down)"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:779
+#: src/pt/gnunet-daemon-pt.c:781
 msgid "# DNS requests dropped (malformed)"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:874
+#: src/pt/gnunet-daemon-pt.c:876
 msgid "# DNS replies received"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:891
+#: src/pt/gnunet-daemon-pt.c:893
 msgid "# DNS replies dropped (too late?)"
 msgstr ""
 
-#: src/pt/gnunet-daemon-pt.c:1217 src/pt/gnunet-daemon-pt.c:1226
-#: src/pt/gnunet-daemon-pt.c:1242 src/pt/gnunet-daemon-pt.c:1251
-#: src/pt/gnunet-daemon-pt.c:1260
+#: src/pt/gnunet-daemon-pt.c:1219 src/pt/gnunet-daemon-pt.c:1228
+#: src/pt/gnunet-daemon-pt.c:1244 src/pt/gnunet-daemon-pt.c:1253
+#: src/pt/gnunet-daemon-pt.c:1262
 #, fuzzy, c-format
 msgid "Failed to connect to %s service.  Exiting.\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/pt/gnunet-daemon-pt.c:1305
+#: src/pt/gnunet-daemon-pt.c:1307
 msgid "Daemon to run to perform IP protocol translation to GNUnet"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:465
+#: src/reclaim/gnunet-reclaim.c:467
 #, fuzzy, c-format
 msgid "Ego is required\n"
 msgstr "%s:选项“%s”有歧义\n"
 
-#: src/reclaim/gnunet-reclaim.c:473
+#: src/reclaim/gnunet-reclaim.c:475
 #, c-format
 msgid "Attribute value missing!\n"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:481
+#: src/reclaim/gnunet-reclaim.c:483
 #, fuzzy, c-format
 msgid "Requesting party key is required!\n"
 msgstr "设置要使用的昵称(必须)"
 
-#: src/reclaim/gnunet-reclaim.c:504
+#: src/reclaim/gnunet-reclaim.c:506
 msgid "Add attribute"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:510
+#: src/reclaim/gnunet-reclaim.c:512
 msgid "Attribute value"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:515
+#: src/reclaim/gnunet-reclaim.c:517
 msgid "Ego"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:520
+#: src/reclaim/gnunet-reclaim.c:522
 msgid "Audience (relying party)"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:524
+#: src/reclaim/gnunet-reclaim.c:526
 msgid "List attributes for Ego"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:529
+#: src/reclaim/gnunet-reclaim.c:531
 msgid "Issue a ticket"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:534
+#: src/reclaim/gnunet-reclaim.c:536
 msgid "Consume a ticket"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:539
+#: src/reclaim/gnunet-reclaim.c:541
 msgid "Revoke a ticket"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:544
+#: src/reclaim/gnunet-reclaim.c:546
 msgid "Type of attribute"
 msgstr ""
 
-#: src/reclaim/gnunet-reclaim.c:549
+#: src/reclaim/gnunet-reclaim.c:551
 msgid "Expiration interval of the attribute"
 msgstr ""
 
-#: src/reclaim/reclaim_api.c:434
+#: src/reclaim/reclaim_api.c:436
 #, fuzzy
 msgid "failed to store record\n"
 msgstr "运行 %s失败:%s %d\n"
 
-#: src/regex/gnunet-daemon-regexprofiler.c:265
+#: src/regex/gnunet-daemon-regexprofiler.c:267
 #, fuzzy, c-format
 msgid "%s service is lacking key configuration settings (%s).  Exiting.\n"
 msgstr "立即保存配置?"
 
-#: src/regex/gnunet-daemon-regexprofiler.c:378
+#: src/regex/gnunet-daemon-regexprofiler.c:380
 msgid "Daemon to announce regular expressions for the peer using cadet."
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1384
+#: src/regex/gnunet-regex-profiler.c:1386
 msgid "No configuration file given. Exiting\n"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1425
-#: src/regex/gnunet-regex-simulation-profiler.c:628
+#: src/regex/gnunet-regex-profiler.c:1427
+#: src/regex/gnunet-regex-simulation-profiler.c:630
 #, c-format
 msgid "No policy directory specified on command line. Exiting.\n"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1431
-#: src/regex/gnunet-regex-simulation-profiler.c:636
+#: src/regex/gnunet-regex-profiler.c:1433
+#: src/regex/gnunet-regex-simulation-profiler.c:638
 #, c-format
 msgid "Specified policies directory does not exist. Exiting.\n"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1438
+#: src/regex/gnunet-regex-profiler.c:1440
 #, fuzzy, c-format
 msgid "No files found in `%s'\n"
 msgstr "运行 %s失败:%s %d\n"
 
-#: src/regex/gnunet-regex-profiler.c:1447
+#: src/regex/gnunet-regex-profiler.c:1449
 msgid "No search strings file given. Exiting.\n"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1467
+#: src/regex/gnunet-regex-profiler.c:1469
 #, fuzzy
 msgid "Error loading search strings. Exiting.\n"
 msgstr "创建用户出错"
 
-#: src/regex/gnunet-regex-profiler.c:1555
+#: src/regex/gnunet-regex-profiler.c:1557
 #, fuzzy
 msgid "name of the file for writing statistics"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/regex/gnunet-regex-profiler.c:1561
+#: src/regex/gnunet-regex-profiler.c:1563
 msgid "wait TIMEOUT before ending the experiment"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1567
+#: src/regex/gnunet-regex-profiler.c:1569
 msgid "directory with policy files"
 msgstr ""
 
-#: src/regex/gnunet-regex-profiler.c:1574
+#: src/regex/gnunet-regex-profiler.c:1576
 #, fuzzy
 msgid "name of file with input strings"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/regex/gnunet-regex-profiler.c:1580
+#: src/regex/gnunet-regex-profiler.c:1582
 #, fuzzy
 msgid "name of file with hosts' names"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/regex/gnunet-regex-profiler.c:1593
+#: src/regex/gnunet-regex-profiler.c:1595
 msgid "Profiler for regex"
 msgstr ""
 
-#: src/regex/gnunet-regex-simulation-profiler.c:697
+#: src/regex/gnunet-regex-simulation-profiler.c:699
 msgid "name of the table to write DFAs"
 msgstr ""
 
-#: src/regex/gnunet-regex-simulation-profiler.c:703
+#: src/regex/gnunet-regex-simulation-profiler.c:705
 msgid "maximum path compression length"
 msgstr ""
 
-#: src/regex/gnunet-regex-simulation-profiler.c:717
+#: src/regex/gnunet-regex-simulation-profiler.c:719
 msgid "Profiler for regex library"
 msgstr ""
 
-#: src/regex/regex_api_announce.c:150
+#: src/regex/regex_api_announce.c:152
 #, fuzzy, c-format
 msgid "Regex `%s' is too long!\n"
 msgstr "服务已删除。\n"
 
-#: src/regex/regex_api_search.c:210
+#: src/regex/regex_api_search.c:212
 #, fuzzy, c-format
 msgid "Search string `%s' is too long!\n"
 msgstr "服务已删除。\n"
 
-#: src/rest/gnunet-rest-server.c:925
+#: src/rest/gnunet-rest-server.c:927
 msgid "listen on specified port (default: 7776)"
 msgstr ""
 
-#: src/rest/gnunet-rest-server.c:942
+#: src/rest/gnunet-rest-server.c:944
 #, fuzzy
 msgid "GNUnet REST server"
 msgstr "GNUnet 错误日志"
 
-#: src/rest-plugins/plugin_rest_copying.c:207
+#: src/rest-plugins/plugin_rest_copying.c:209
 msgid "COPYING REST API initialized\n"
 msgstr ""
 
-#: src/rest-plugins/plugin_rest_credential.c:1126
+#: src/rest-plugins/plugin_rest_credential.c:1128
 msgid "GNS REST API initialized\n"
 msgstr ""
 
-#: src/rest-plugins/plugin_rest_gns.c:450
+#: src/rest-plugins/plugin_rest_gns.c:452
 msgid "Gns REST API initialized\n"
 msgstr ""
 
-#: src/rest-plugins/plugin_rest_identity.c:1295
+#: src/rest-plugins/plugin_rest_identity.c:1297
 msgid "Identity REST API initialized\n"
 msgstr ""
 
-#: src/rest-plugins/plugin_rest_namestore.c:1077
+#: src/rest-plugins/plugin_rest_namestore.c:1079
 msgid "Namestore REST API initialized\n"
 msgstr ""
 
-#: src/rest-plugins/plugin_rest_openid_connect.c:2135
+#: src/rest-plugins/plugin_rest_openid_connect.c:2245
 #: src/rest-plugins/plugin_rest_reclaim.c:1079
 msgid "Identity Provider REST API initialized\n"
 msgstr ""
 
-#: src/rest-plugins/plugin_rest_peerinfo.c:794
+#: src/rest-plugins/plugin_rest_peerinfo.c:796
 msgid "Peerinfo REST API initialized\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:127
+#: src/revocation/gnunet-revocation.c:129
 #, c-format
 msgid "Key `%s' is valid\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:132
+#: src/revocation/gnunet-revocation.c:134
 #, fuzzy, c-format
 msgid "Key `%s' has been revoked\n"
 msgstr "服务已删除。\n"
 
-#: src/revocation/gnunet-revocation.c:138
+#: src/revocation/gnunet-revocation.c:140
 #, fuzzy
 msgid "Internal error\n"
 msgstr "未知错误。\n"
 
-#: src/revocation/gnunet-revocation.c:164
+#: src/revocation/gnunet-revocation.c:166
 #, c-format
 msgid "Key for ego `%s' is still valid, revocation failed (!)\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:169
+#: src/revocation/gnunet-revocation.c:171
 msgid "Revocation failed (!)\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:174
+#: src/revocation/gnunet-revocation.c:176
 #, c-format
 msgid "Key for ego `%s' has been successfully revoked\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:179
+#: src/revocation/gnunet-revocation.c:181
 msgid "Revocation successful.\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:184
+#: src/revocation/gnunet-revocation.c:186
 msgid "Internal error, key revocation might have failed\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:321
+#: src/revocation/gnunet-revocation.c:323
 #, c-format
 msgid "Revocation certificate for `%s' stored in `%s'\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:350
+#: src/revocation/gnunet-revocation.c:352
 #, c-format
 msgid "Ego `%s' not found.\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:371
+#: src/revocation/gnunet-revocation.c:373
 #, c-format
 msgid "Error: revocation certificate in `%s' is not for `%s'\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:391
+#: src/revocation/gnunet-revocation.c:393
 msgid "Revocation certificate ready\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:401
+#: src/revocation/gnunet-revocation.c:403
 msgid "Revocation certificate not ready, calculating proof of work\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:435 src/social/gnunet-social.c:1178
+#: src/revocation/gnunet-revocation.c:437
 #, fuzzy, c-format
 msgid "Public key `%s' malformed\n"
 msgstr "“%s”的参数无效。\n"
 
-#: src/revocation/gnunet-revocation.c:448
+#: src/revocation/gnunet-revocation.c:450
 msgid ""
 "Testing and revoking at the same time is not allowed, only executing test.\n"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:468
+#: src/revocation/gnunet-revocation.c:470
 #, fuzzy
 msgid "No filename to store revocation certificate given.\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/revocation/gnunet-revocation.c:489
+#: src/revocation/gnunet-revocation.c:491
 #, fuzzy, c-format
 msgid "Failed to read revocation certificate from `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/revocation/gnunet-revocation.c:514
+#: src/revocation/gnunet-revocation.c:516
 #, fuzzy
 msgid "No action specified. Nothing to do.\n"
 msgstr "没有指定接口,将使用默认。\n"
 
-#: src/revocation/gnunet-revocation.c:533
+#: src/revocation/gnunet-revocation.c:535
 msgid "use NAME for the name of the revocation file"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:539
+#: src/revocation/gnunet-revocation.c:541
 msgid ""
 "revoke the private key associated for the the private key associated with "
 "the ego NAME "
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:544
+#: src/revocation/gnunet-revocation.c:546
 msgid "actually perform revocation, otherwise we just do the precomputation"
 msgstr ""
 
-#: src/revocation/gnunet-revocation.c:550
+#: src/revocation/gnunet-revocation.c:552
 msgid "test if the public key KEY has been revoked"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:457
+#: src/revocation/gnunet-service-revocation.c:459
 msgid "# unsupported revocations received via set union"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:466
+#: src/revocation/gnunet-service-revocation.c:468
 msgid "# revocation messages received via set union"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:471
+#: src/revocation/gnunet-service-revocation.c:473
 #, c-format
 msgid "Error computing revocation set union with %s\n"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:475
+#: src/revocation/gnunet-service-revocation.c:477
 #, fuzzy
 msgid "# revocation set unions failed"
 msgstr ""
 "\n"
 "按任意键继续\n"
 
-#: src/revocation/gnunet-service-revocation.c:484
+#: src/revocation/gnunet-service-revocation.c:486
 msgid "# revocation set unions completed"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:523
+#: src/revocation/gnunet-service-revocation.c:525
 msgid "SET service crashed, terminating revocation service\n"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:865
+#: src/revocation/gnunet-service-revocation.c:867
 #, fuzzy
 msgid "Could not open revocation database file!"
 msgstr "无法连接到 %s:%u:%s\n"
 
-#: src/rps/gnunet-rps.c:258
+#: src/rps/gnunet-rps.c:260
 msgid "Seed a PeerID"
 msgstr ""
 
-#: src/rps/gnunet-rps.c:262
+#: src/rps/gnunet-rps.c:264
 msgid "Get updates of view (0 for infinite updates)"
 msgstr ""
 
-#: src/rps/gnunet-rps.c:266
+#: src/rps/gnunet-rps.c:268
 msgid "Get peers from biased stream"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2770
+#: src/rps/gnunet-rps-profiler.c:2959
 msgid "duration of the profiling"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2776
+#: src/rps/gnunet-rps-profiler.c:2965
 msgid "timeout for the profiling"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2782
+#: src/rps/gnunet-rps-profiler.c:2971
 #, fuzzy
 msgid "number of PeerIDs to request"
 msgstr "迭代次数"
 
-#: src/rps/gnunet-rps-profiler.c:2797
+#: src/rps/gnunet-rps-profiler.c:2986
 #, fuzzy
 msgid "Measure quality and performance of the RPS service."
 msgstr "无法访问该服务"
 
-#: src/scalarproduct/gnunet-scalarproduct.c:218
+#: src/scalarproduct/gnunet-scalarproduct.c:220
 #, fuzzy
 msgid "You must specify at least one message ID to check!\n"
 msgstr "您必须指定一个昵称\n"
 
-#: src/scalarproduct/gnunet-scalarproduct.c:225
+#: src/scalarproduct/gnunet-scalarproduct.c:227
 msgid "This program needs a session identifier for comparing vectors.\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:238
+#: src/scalarproduct/gnunet-scalarproduct.c:240
 #, c-format
 msgid ""
 "Tried to set initiator mode, as peer ID was given. However, `%s' is not a "
 "valid peer identifier.\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:256
+#: src/scalarproduct/gnunet-scalarproduct.c:258
 msgid "Need elements to compute the scalarproduct, got none.\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:278
+#: src/scalarproduct/gnunet-scalarproduct.c:280
 #, fuzzy, c-format
 msgid "Malformed input, could not parse `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/scalarproduct/gnunet-scalarproduct.c:296
+#: src/scalarproduct/gnunet-scalarproduct.c:298
 #, fuzzy, c-format
 msgid "Could not convert `%s' to int64_t.\n"
 msgstr "无法连接到 %s:%u:%s\n"
 
-#: src/scalarproduct/gnunet-scalarproduct.c:323
+#: src/scalarproduct/gnunet-scalarproduct.c:325
 #, c-format
 msgid "Failed to initiate computation, were all keys unique?\n"
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:349
-#: src/scalarproduct/gnunet-scalarproduct.c:355
+#: src/scalarproduct/gnunet-scalarproduct.c:351
+#: src/scalarproduct/gnunet-scalarproduct.c:357
 msgid ""
 "A comma separated list of elements to compare as vector with our remote peer."
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:361
+#: src/scalarproduct/gnunet-scalarproduct.c:363
 msgid ""
 "[Optional] peer to calculate our scalarproduct with. If this parameter is "
 "not given, the service will wait for a remote peer to compute the request."
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:367
+#: src/scalarproduct/gnunet-scalarproduct.c:369
 msgid "Transaction ID shared with peer."
 msgstr ""
 
-#: src/scalarproduct/gnunet-scalarproduct.c:377
+#: src/scalarproduct/gnunet-scalarproduct.c:379
 msgid "Calculate the Vectorproduct with a GNUnet peer."
 msgstr ""
 
-#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1399
-#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1343
-#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1170
-#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1061
+#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1401
+#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1345
+#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1172
+#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1063
 #, fuzzy
 msgid "Connect to CADET failed\n"
 msgstr "“%s”已连接到“%s”。\n"
 
-#: src/scalarproduct/scalarproduct_api.c:183
+#: src/scalarproduct/scalarproduct_api.c:185
 msgid "Keys given to SCALARPRODUCT not unique!\n"
 msgstr ""
 
-#: src/secretsharing/gnunet-secretsharing-profiler.c:614
+#: src/secretsharing/gnunet-secretsharing-profiler.c:616
 msgid "dkg start delay"
 msgstr ""
 
-#: src/secretsharing/gnunet-secretsharing-profiler.c:620
+#: src/secretsharing/gnunet-secretsharing-profiler.c:622
 msgid "dkg timeout"
 msgstr ""
 
-#: src/secretsharing/gnunet-secretsharing-profiler.c:626
+#: src/secretsharing/gnunet-secretsharing-profiler.c:628
 msgid "threshold"
 msgstr ""
 
-#: src/secretsharing/gnunet-secretsharing-profiler.c:631
+#: src/secretsharing/gnunet-secretsharing-profiler.c:633
 msgid "also profile decryption"
 msgstr ""
 
-#: src/set/gnunet-service-set.c:2004
+#: src/set/gnunet-service-set.c:2005
 #, fuzzy
 msgid "Could not connect to CADET service\n"
 msgstr "无法连接到 %s:%u:%s\n"
 
-#: src/set/gnunet-set-ibf-profiler.c:250
+#: src/set/gnunet-set-ibf-profiler.c:252
 #, fuzzy
 msgid "number of element in set A-B"
 msgstr "迭代次数"
 
-#: src/set/gnunet-set-ibf-profiler.c:256
+#: src/set/gnunet-set-ibf-profiler.c:258
 #, fuzzy
 msgid "number of element in set B-A"
 msgstr "迭代次数"
 
-#: src/set/gnunet-set-ibf-profiler.c:262
+#: src/set/gnunet-set-ibf-profiler.c:264
 msgid "number of common elements in A and B"
 msgstr ""
 
-#: src/set/gnunet-set-ibf-profiler.c:268
+#: src/set/gnunet-set-ibf-profiler.c:270
 msgid "hash num"
 msgstr ""
 
-#: src/set/gnunet-set-ibf-profiler.c:274
+#: src/set/gnunet-set-ibf-profiler.c:276
 msgid "ibf size"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:442
+#: src/set/gnunet-set-profiler.c:444
 msgid "use byzantine mode"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:448
+#: src/set/gnunet-set-profiler.c:450
 msgid "force sending full set"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:454
+#: src/set/gnunet-set-profiler.c:456
 msgid "number delta operation"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:466
+#: src/set/gnunet-set-profiler.c:468
 msgid "operation to execute"
 msgstr ""
 
-#: src/set/gnunet-set-profiler.c:472
+#: src/set/gnunet-set-profiler.c:474
 msgid "element size"
 msgstr ""
 
-#: src/social/gnunet-social.c:1164
-#, fuzzy
-msgid "--place missing or invalid.\n"
-msgstr "“%s”的参数无效。\n"
-
-#: src/social/gnunet-social.c:1215
-msgid "assign --name in state to --data"
-msgstr ""
-
-#: src/social/gnunet-social.c:1220
-msgid "say good-bye and leave somebody else's place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1225
-msgid "create a place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1230
-msgid "destroy a place we were hosting"
-msgstr ""
-
-#: src/social/gnunet-social.c:1235
-msgid "enter somebody else's place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1241
-msgid "find state matching name prefix"
-msgstr ""
-
-#: src/social/gnunet-social.c:1246
-msgid "replay history of messages up to the given --limit"
-msgstr ""
-
-#: src/social/gnunet-social.c:1251
-msgid "reconnect to a previously created place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1256
-msgid "publish something to a place we are hosting"
-msgstr ""
-
-#: src/social/gnunet-social.c:1261
-msgid "reconnect to a previously entered place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1266
-msgid "search for state matching exact name"
-msgstr ""
-
-#: src/social/gnunet-social.c:1271
-msgid "submit something to somebody's place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1276
-msgid "list of egos and subscribed places"
-msgstr ""
-
-#: src/social/gnunet-social.c:1281
-msgid "extract and replay history between message IDs --start and --until"
-msgstr ""
-
-#: src/social/gnunet-social.c:1290
-msgid "application ID to use when connecting"
-msgstr ""
-
-#: src/social/gnunet-social.c:1296
-msgid "message body or state value"
-msgstr ""
-
-#: src/social/gnunet-social.c:1302
-#, fuzzy
-msgid "name or public key of ego"
-msgstr "“%s”的参数无效。\n"
-
-#: src/social/gnunet-social.c:1307
-#, fuzzy
-msgid "wait for incoming messages"
-msgstr "发送消息失败。\n"
-
-#: src/social/gnunet-social.c:1313
-msgid "GNS name"
-msgstr ""
-
-#: src/social/gnunet-social.c:1319
-msgid "peer ID for --guest-enter"
-msgstr ""
-
-#: src/social/gnunet-social.c:1325
-msgid "name (key) to query from state"
-msgstr ""
-
-#: src/social/gnunet-social.c:1331
-msgid "method name"
-msgstr ""
-
-#: src/social/gnunet-social.c:1337
-#, fuzzy
-msgid "number of messages to replay from history"
-msgstr "每次迭代所使用的消息数量"
-
-#: src/social/gnunet-social.c:1343
-msgid "key address of place"
-msgstr ""
-
-#: src/social/gnunet-social.c:1349
-msgid "start message ID for history replay"
-msgstr ""
-
-#: src/social/gnunet-social.c:1354
-msgid "respond to entry requests by admitting all guests"
-msgstr ""
-
-#: src/social/gnunet-social.c:1360
-msgid "end message ID for history replay"
-msgstr ""
-
-#: src/social/gnunet-social.c:1365
-msgid "respond to entry requests by refusing all guests"
-msgstr ""
-
-#: src/social/gnunet-social.c:1375
-msgid ""
-"gnunet-social - Interact with the social service: enter/leave, send/receive "
-"messages, access history and state.\n"
-msgstr ""
-
-#: src/sq/sq.c:52
+#: src/sq/sq.c:54
 #, c-format
 msgid "Failure to bind %u-th SQL parameter\n"
 msgstr ""
 
-#: src/sq/sq.c:59
+#: src/sq/sq.c:61
 msgid "Failure in sqlite3_reset (!)\n"
 msgstr ""
 
-#: src/sq/sq.c:137
+#: src/sq/sq.c:139
 #, fuzzy, c-format
 msgid "Failed to reset sqlite statement with error: %s\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/statistics/gnunet-service-statistics.c:336
+#: src/statistics/gnunet-service-statistics.c:338
 #, c-format
 msgid "Wrote %llu bytes of statistics to `%s'\n"
 msgstr ""
 
-#: src/statistics/gnunet-service-statistics.c:1084
+#: src/statistics/gnunet-service-statistics.c:1086
 #, c-format
 msgid "Loading %llu bytes of statistics from `%s'\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:407
-#: src/statistics/gnunet-statistics.c:448
+#: src/statistics/gnunet-statistics.c:409
+#: src/statistics/gnunet-statistics.c:450
 #, fuzzy
 msgid "Failed to obtain statistics.\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/statistics/gnunet-statistics.c:410
-#: src/statistics/gnunet-statistics.c:451
+#: src/statistics/gnunet-statistics.c:412
+#: src/statistics/gnunet-statistics.c:453
 #, fuzzy, c-format
 msgid "Failed to obtain statistics from host `%s:%llu'\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/statistics/gnunet-statistics.c:526
+#: src/statistics/gnunet-statistics.c:528
 msgid "Missing argument: subsystem \n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:534
+#: src/statistics/gnunet-statistics.c:536
 msgid "Missing argument: name\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:577
+#: src/statistics/gnunet-statistics.c:579
 #, c-format
 msgid "No subsystem or name given\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:592
+#: src/statistics/gnunet-statistics.c:594
 #, fuzzy, c-format
 msgid "Failed to initialize watch routine\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/statistics/gnunet-statistics.c:727
+#: src/statistics/gnunet-statistics.c:729
 #, fuzzy, c-format
 msgid "Invalid argument `%s'\n"
 msgstr "“%s”的参数无效。\n"
 
-#: src/statistics/gnunet-statistics.c:745
+#: src/statistics/gnunet-statistics.c:747
 #, fuzzy, c-format
 msgid "A port is required to connect to host `%s'\n"
 msgstr "无法连接到 %s:%u:%s\n"
 
-#: src/statistics/gnunet-statistics.c:753
+#: src/statistics/gnunet-statistics.c:755
 #, c-format
 msgid "A port has to be between 1 and 65535 to connect to host `%s'\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:784
+#: src/statistics/gnunet-statistics.c:786
 #, c-format
 msgid "Not able to watch testbed nodes (yet - feel free to implement)\n"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:817
+#: src/statistics/gnunet-statistics.c:819
 msgid "limit output to statistics for the given NAME"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:822
+#: src/statistics/gnunet-statistics.c:824
 msgid "make the value being set persistent"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:828
+#: src/statistics/gnunet-statistics.c:830
 msgid "limit output to the given SUBSYSTEM"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:834
+#: src/statistics/gnunet-statistics.c:836
 msgid "use as csv separator"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:840
+#: src/statistics/gnunet-statistics.c:842
 msgid "path to the folder containing the testbed data"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:845
+#: src/statistics/gnunet-statistics.c:847
 msgid "just print the statistics value"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:850
+#: src/statistics/gnunet-statistics.c:852
 msgid "watch value continuously"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:856
+#: src/statistics/gnunet-statistics.c:858
 msgid "connect to remote host"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:862
+#: src/statistics/gnunet-statistics.c:864
 msgid "port for remote host"
 msgstr ""
 
-#: src/statistics/gnunet-statistics.c:879
+#: src/statistics/gnunet-statistics.c:881
 msgid "Print statistics about GNUnet operations."
 msgstr ""
 
-#: src/statistics/statistics_api.c:751
+#: src/statistics/statistics_api.c:753
 #, fuzzy
 msgid "Could not save some persistent statistics\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/testbed/generate-underlay-topology.c:223
+#: src/testbed/generate-underlay-topology.c:225
 #, fuzzy
 msgid "Need at least 2 arguments\n"
 msgstr "您必须指定一个昵称\n"
 
-#: src/testbed/generate-underlay-topology.c:228
+#: src/testbed/generate-underlay-topology.c:230
 msgid "Database filename missing\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:235
+#: src/testbed/generate-underlay-topology.c:237
 msgid "Topology string missing\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:240
+#: src/testbed/generate-underlay-topology.c:242
 #, fuzzy, c-format
 msgid "Invalid topology: %s\n"
 msgstr "“%s”的参数无效。\n"
 
-#: src/testbed/generate-underlay-topology.c:253
+#: src/testbed/generate-underlay-topology.c:255
 #, c-format
 msgid "An argument is missing for given topology `%s'\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:259
+#: src/testbed/generate-underlay-topology.c:261
 #, fuzzy, c-format
 msgid "Invalid argument `%s' given as topology argument\n"
 msgstr "“%s”的参数无效。\n"
 
-#: src/testbed/generate-underlay-topology.c:267
+#: src/testbed/generate-underlay-topology.c:269
 #, c-format
 msgid "Filename argument missing for topology `%s'\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:281
+#: src/testbed/generate-underlay-topology.c:283
 #, c-format
 msgid "Second argument for topology `%s' is missing\n"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:287
+#: src/testbed/generate-underlay-topology.c:289
 #, fuzzy, c-format
 msgid "Invalid argument `%s'; expecting unsigned int\n"
 msgstr "“%s”的参数无效。\n"
 
-#: src/testbed/generate-underlay-topology.c:340
-#: src/testbed/gnunet-testbed-profiler.c:281
+#: src/testbed/generate-underlay-topology.c:342
+#: src/testbed/gnunet-testbed-profiler.c:283
 msgid "create COUNT number of peers"
 msgstr ""
 
-#: src/testbed/generate-underlay-topology.c:350
+#: src/testbed/generate-underlay-topology.c:352
 msgid ""
 "Generates SQLite3 database representing a given underlay topology.\n"
 "Usage: gnunet-underlay-topology [OPTIONS] db-filename TOPO [TOPOOPTS]\n"
@@ -6577,83 +6371,83 @@ msgid ""
 "content/topology-file-format\n"
 msgstr ""
 
-#: src/testbed/gnunet-daemon-latency-logger.c:313
+#: src/testbed/gnunet-daemon-latency-logger.c:315
 msgid "Daemon to log latency values of connections to neighbours"
 msgstr ""
 
-#: src/testbed/gnunet-daemon-testbed-blacklist.c:247
+#: src/testbed/gnunet-daemon-testbed-blacklist.c:249
 msgid ""
 "Daemon to restrict incoming transport layer connections during testbed "
 "deployments"
 msgstr ""
 
-#: src/testbed/gnunet-daemon-testbed-underlay.c:231 src/testing/list-keys.c:46
-#: src/testing/testing.c:286 src/util/gnunet-ecc.c:310
+#: src/testbed/gnunet-daemon-testbed-underlay.c:233 src/testing/list-keys.c:46
+#: src/testing/testing.c:288 src/util/gnunet-ecc.c:312
 #, c-format
 msgid "Incorrect hostkey file format: %s\n"
 msgstr ""
 
-#: src/testbed/gnunet-daemon-testbed-underlay.c:469
+#: src/testbed/gnunet-daemon-testbed-underlay.c:471
 msgid "Daemon to restrict underlay network in testbed deployments"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_cpustatus.c:726
+#: src/testbed/gnunet-service-testbed_cpustatus.c:728
 #, c-format
 msgid ""
 "Cannot open %s for writing load statistics.  Not logging load statistics\n"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1157
+#: src/testbed/gnunet-service-testbed_peers.c:1159
 #, c-format
 msgid "%s is stopped"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1159
+#: src/testbed/gnunet-service-testbed_peers.c:1161
 #, c-format
 msgid "%s is starting"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1161
+#: src/testbed/gnunet-service-testbed_peers.c:1163
 #, c-format
 msgid "%s is stopping"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1163
+#: src/testbed/gnunet-service-testbed_peers.c:1165
 #, c-format
 msgid "%s is starting already"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1165
+#: src/testbed/gnunet-service-testbed_peers.c:1167
 #, c-format
 msgid "%s is stopping already"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1167
+#: src/testbed/gnunet-service-testbed_peers.c:1169
 #, c-format
 msgid "%s is started already"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1169
+#: src/testbed/gnunet-service-testbed_peers.c:1171
 #, c-format
 msgid "%s is stopped already"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1171
+#: src/testbed/gnunet-service-testbed_peers.c:1173
 #, fuzzy, c-format
 msgid "%s service is not known to ARM"
 msgstr "服务已删除。\n"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1173
+#: src/testbed/gnunet-service-testbed_peers.c:1175
 #, fuzzy, c-format
 msgid "%s service failed to start"
 msgstr "运行 %s失败:%s %d\n"
 
-#: src/testbed/gnunet-service-testbed_peers.c:1175
+#: src/testbed/gnunet-service-testbed_peers.c:1177
 #, c-format
 msgid "%s service can't be started because ARM is shutting down"
 msgstr ""
 
-#: src/testbed/gnunet-service-testbed_peers.c:1177
+#: src/testbed/gnunet-service-testbed_peers.c:1179
 #, c-format
 msgid "%.s Unknown result code."
 msgstr ""
@@ -6667,176 +6461,176 @@ msgstr ""
 msgid "Spawning process `%s'\n"
 msgstr "卸载 GNUnet 服务"
 
-#: src/testbed/gnunet-testbed-profiler.c:287
+#: src/testbed/gnunet-testbed-profiler.c:289
 msgid "tolerate COUNT number of continious timeout failures"
 msgstr ""
 
-#: src/testbed/gnunet-testbed-profiler.c:292
+#: src/testbed/gnunet-testbed-profiler.c:294
 msgid ""
 "run profiler in non-interactive mode where upon testbed setup the profiler "
 "does not wait for a keystroke but continues to run until a termination "
 "signal is received"
 msgstr ""
 
-#: src/testbed/testbed_api.c:408
+#: src/testbed/testbed_api.c:410
 #, fuzzy, c-format
 msgid "Adding host %u failed with error: %s\n"
 msgstr "“%s”以错误码 %d 失败:%s\n"
 
-#: src/testbed/testbed_api_hosts.c:411
+#: src/testbed/testbed_api_hosts.c:413
 #, c-format
 msgid "Hosts file %s not found\n"
 msgstr ""
 
-#: src/testbed/testbed_api_hosts.c:419
+#: src/testbed/testbed_api_hosts.c:421
 #, c-format
 msgid "Hosts file %s has no data\n"
 msgstr ""
 
-#: src/testbed/testbed_api_hosts.c:426
+#: src/testbed/testbed_api_hosts.c:428
 #, c-format
 msgid "Hosts file %s cannot be read\n"
 msgstr ""
 
-#: src/testbed/testbed_api_hosts.c:567
+#: src/testbed/testbed_api_hosts.c:569
 #, c-format
 msgid "The function %s is only available when compiled with (--with-ll)\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:816
+#: src/testbed/testbed_api_testbed.c:818
 msgid "Linking controllers failed. Exiting"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:984
+#: src/testbed/testbed_api_testbed.c:986
 #, c-format
 msgid "Host registration failed for a host. Error: %s\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1050
+#: src/testbed/testbed_api_testbed.c:1052
 msgid "Controller crash detected. Shutting down.\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1139
+#: src/testbed/testbed_api_testbed.c:1141
 #, c-format
 msgid "Host %s cannot start testbed\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1143
+#: src/testbed/testbed_api_testbed.c:1145
 msgid "Testbed cannot be started on localhost\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1181
+#: src/testbed/testbed_api_testbed.c:1183
 msgid "Cannot start the master controller"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1199
+#: src/testbed/testbed_api_testbed.c:1201
 msgid "Shutting down testbed due to timeout while setup.\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1259
+#: src/testbed/testbed_api_testbed.c:1261
 msgid "No hosts loaded from LoadLeveler. Need at least one host\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1271
+#: src/testbed/testbed_api_testbed.c:1273
 msgid "No hosts loaded. Need at least one host\n"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1295
+#: src/testbed/testbed_api_testbed.c:1297
 msgid "Specified topology must be supported by testbed"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1345
+#: src/testbed/testbed_api_testbed.c:1347
 #, c-format
 msgid ""
 "Maximum number of edges a peer can have in a scale free topology cannot be "
 "more than %u.  Given `%s = %llu'"
 msgstr ""
 
-#: src/testbed/testbed_api_testbed.c:1361
+#: src/testbed/testbed_api_testbed.c:1363
 #, c-format
 msgid ""
 "The number of edges that can established when adding a new node to scale "
 "free topology cannot be more than %u.  Given `%s = %llu'"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1026
+#: src/testbed/testbed_api_topology.c:1028
 #, c-format
 msgid "Topology file %s not found\n"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1034
+#: src/testbed/testbed_api_topology.c:1036
 #, c-format
 msgid "Topology file %s has no data\n"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1042
+#: src/testbed/testbed_api_topology.c:1044
 #, c-format
 msgid "Topology file %s cannot be read\n"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1064
+#: src/testbed/testbed_api_topology.c:1066
 #, fuzzy, c-format
 msgid "Failed to read peer index from toology file: %s"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/testbed/testbed_api_topology.c:1073
-#: src/testbed/testbed_api_topology.c:1097
+#: src/testbed/testbed_api_topology.c:1075
+#: src/testbed/testbed_api_topology.c:1099
 #, c-format
 msgid "Value in given topology file: %s out of range\n"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1079
-#: src/testbed/testbed_api_topology.c:1103
+#: src/testbed/testbed_api_topology.c:1081
+#: src/testbed/testbed_api_topology.c:1105
 #, fuzzy, c-format
 msgid "Failed to read peer index from topology file: %s"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/testbed/testbed_api_topology.c:1085
-#: src/testbed/testbed_api_topology.c:1109
+#: src/testbed/testbed_api_topology.c:1087
+#: src/testbed/testbed_api_topology.c:1111
 msgid "Topology file needs more peers than given ones\n"
 msgstr ""
 
-#: src/testbed/testbed_api_topology.c:1143
+#: src/testbed/testbed_api_topology.c:1145
 #, fuzzy, c-format
 msgid "Ignoring to connect peer %u to peer %u\n"
 msgstr "无法连接到 %s:%u:%s\n"
 
-#: src/testing/gnunet-testing.c:171
+#: src/testing/gnunet-testing.c:173
 #, fuzzy, c-format
 msgid "Could not extract hostkey %u (offset too large?)\n"
 msgstr "找不到接口“%s”的一个 IP 地址。\n"
 
-#: src/testing/gnunet-testing.c:251
+#: src/testing/gnunet-testing.c:253
 #, c-format
 msgid "Unknown command, use 'q' to quit or 'r' to restart peer\n"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:352
+#: src/testing/gnunet-testing.c:354
 #, fuzzy
 msgid "create unique configuration files"
 msgstr "更改配置文件中的一个值"
 
-#: src/testing/gnunet-testing.c:357
+#: src/testing/gnunet-testing.c:359
 msgid "extract hostkey file from pre-computed hostkey list"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:363
+#: src/testing/gnunet-testing.c:365
 #, fuzzy
 msgid ""
 "number of unique configuration files to create, or number of the hostkey to "
 "extract"
 msgstr "打印配置文件中的一个值到标准输出"
 
-#: src/testing/gnunet-testing.c:370
+#: src/testing/gnunet-testing.c:372
 #, fuzzy
 msgid "configuration template"
 msgstr "配置已保存"
 
-#: src/testing/gnunet-testing.c:376
+#: src/testing/gnunet-testing.c:378
 msgid "run the given service, wait on stdin for 'r' (restart) or 'q' (quit)"
 msgstr ""
 
-#: src/testing/gnunet-testing.c:389
+#: src/testing/gnunet-testing.c:391
 msgid "Command line tool to access the testing library"
 msgstr ""
 
@@ -6844,1532 +6638,1556 @@ msgstr ""
 msgid "list COUNT number of keys"
 msgstr ""
 
-#: src/testing/testing.c:270
+#: src/testing/testing.c:272
 #, c-format
 msgid "Hostkeys file not found: %s\n"
 msgstr ""
 
-#: src/testing/testing.c:713
+#: src/testing/testing.c:715
 #, c-format
 msgid "Key number %u does not exist\n"
 msgstr ""
 
-#: src/testing/testing.c:1157
+#: src/testing/testing.c:1159
 #, c-format
 msgid ""
 "You attempted to create a testbed with more than %u hosts.  Please "
 "precompute more hostkeys first.\n"
 msgstr ""
 
-#: src/testing/testing.c:1166
+#: src/testing/testing.c:1168
 #, fuzzy, c-format
 msgid "Failed to initialize hostkey for peer %u\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/testing/testing.c:1176
+#: src/testing/testing.c:1178
 msgid "PRIVATE_KEY option in PEER section missing in configuration\n"
 msgstr ""
 
-#: src/testing/testing.c:1189
+#: src/testing/testing.c:1191
 #, fuzzy
 msgid "Failed to create configuration for peer (not enough free ports?)\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/testing/testing.c:1203
+#: src/testing/testing.c:1205
 #, fuzzy, c-format
 msgid "Cannot open hostkey file `%s': %s\n"
 msgstr "找不到接口“%s”的一个 IP 地址。\n"
 
-#: src/testing/testing.c:1215
+#: src/testing/testing.c:1217
 #, fuzzy, c-format
 msgid "Failed to write hostkey file for peer %u: %s\n"
 msgstr "发送消息失败。\n"
 
-#: src/testing/testing.c:1240
+#: src/testing/testing.c:1242
 #, fuzzy, c-format
 msgid "Failed to write configuration file `%s' for peer %u: %s\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/testing/testing.c:1342
+#: src/testing/testing.c:1344
 #, fuzzy, c-format
 msgid "Failed to start `%s': %s\n"
 msgstr "运行 %s失败:%s %d\n"
 
-#: src/testing/testing.c:1645
+#: src/testing/testing.c:1647
 #, fuzzy, c-format
 msgid "Failed to load configuration from %s\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/topology/friends.c:124
+#: src/topology/friends.c:126
 #, fuzzy, c-format
 msgid "Syntax error in FRIENDS file at offset %llu, skipping bytes `%.*s'.\n"
 msgstr "配置文件“%s”第 %d 行有语法错误。\n"
 
-#: src/topology/friends.c:178
+#: src/topology/friends.c:180
 #, c-format
 msgid "Directory for file `%s' does not seem to be writable.\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:228
+#: src/topology/gnunet-daemon-topology.c:230
 msgid "# peers blacklisted"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:342
+#: src/topology/gnunet-daemon-topology.c:344
 msgid "# connect requests issued to ATS"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:536
+#: src/topology/gnunet-daemon-topology.c:538
 msgid "# HELLO messages gossipped"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:638
-#: src/topology/gnunet-daemon-topology.c:724
+#: src/topology/gnunet-daemon-topology.c:640
+#: src/topology/gnunet-daemon-topology.c:726
 msgid "# friends connected"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:921
+#: src/topology/gnunet-daemon-topology.c:923
 msgid "Failed to connect to core service, can not manage topology!\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:954
+#: src/topology/gnunet-daemon-topology.c:956
 #, c-format
 msgid "Found myself `%s' in friend list (useless, ignored)\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:961
+#: src/topology/gnunet-daemon-topology.c:963
 #, fuzzy, c-format
 msgid "Found friend `%s' in configuration\n"
 msgstr ""
 "\n"
 "结束配置。\n"
 
-#: src/topology/gnunet-daemon-topology.c:983
+#: src/topology/gnunet-daemon-topology.c:985
 msgid "Encountered errors parsing friends list!\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:986
+#: src/topology/gnunet-daemon-topology.c:988
 #, fuzzy
 msgid "# friends in configuration"
 msgstr ""
 "\n"
 "结束配置。\n"
 
-#: src/topology/gnunet-daemon-topology.c:993
+#: src/topology/gnunet-daemon-topology.c:995
 msgid ""
 "Fewer friends specified than required by minimum friend count. Will only "
 "connect to friends.\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:999
+#: src/topology/gnunet-daemon-topology.c:1001
 msgid ""
 "More friendly connections required than target total number of connections.\n"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:1052
-#: src/transport/plugin_transport_wlan.c:1515
+#: src/topology/gnunet-daemon-topology.c:1054
+#: src/transport/plugin_transport_wlan.c:1517
 msgid "# HELLO messages received"
 msgstr ""
 
-#: src/topology/gnunet-daemon-topology.c:1230
+#: src/topology/gnunet-daemon-topology.c:1233
 msgid "GNUnet topology control"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_ats.c:139
+#: src/transport/gnunet-communicator-tcp.c:2329
+#: src/transport/gnunet-communicator-udp.c:2883
+#: src/transport/gnunet-service-tng.c:4679
+#: src/transport/gnunet-service-transport.c:2782
+#, fuzzy
+msgid "Transport service is lacking key configuration settings. Exiting.\n"
+msgstr "立即保存配置?"
+
+#: src/transport/gnunet-communicator-tcp.c:2393
+msgid "GNUnet TCP communicator"
+msgstr ""
+
+#: src/transport/gnunet-communicator-udp.c:2954
+msgid "GNUnet UDP communicator"
+msgstr ""
+
+#: src/transport/gnunet-communicator-unix.c:802
+#, fuzzy
+msgid ""
+"Maximum number of UNIX connections exceeded, dropping incoming message\n"
+msgstr "增加 TCP/IP 的最大连接数"
+
+#: src/transport/gnunet-communicator-unix.c:1073
+#: src/transport/plugin_transport_unix.c:1403
+#, fuzzy, c-format
+msgid "Cannot create path to `%s'\n"
+msgstr "发送消息失败。\n"
+
+#: src/transport/gnunet-communicator-unix.c:1162
+msgid "GNUnet UNIX domain socket communicator"
+msgstr ""
+
+#: src/transport/gnunet-service-transport_ats.c:141
 msgid "# Addresses given to ATS"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:446
+#: src/transport/gnunet-service-transport.c:448
 msgid "# messages dropped due to slow client"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:816
+#: src/transport/gnunet-service-transport.c:817
 msgid "# bytes payload dropped (other peer was not connected)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:1549
+#: src/transport/gnunet-service-transport.c:1550
 msgid "# bytes payload discarded due to not connected peer"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:1709
+#: src/transport/gnunet-service-transport.c:1710
 msgid "# bytes total received"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:1806
+#: src/transport/gnunet-service-transport.c:1807
 msgid "# bytes payload received"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:2123
-#: src/transport/gnunet-service-transport.c:2595
+#: src/transport/gnunet-service-transport.c:2124
+#: src/transport/gnunet-service-transport.c:2596
 msgid "# disconnects due to blacklist"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:2599
+#: src/transport/gnunet-service-transport.c:2600
 #, fuzzy, c-format
 msgid "Disallowing connection to peer `%s' on transport %s\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/transport/gnunet-service-transport.c:2707
+#: src/transport/gnunet-service-transport.c:2708
 #, fuzzy, c-format
 msgid "Adding blacklisting entry for peer `%s'\n"
 msgstr "卸载 GNUnet 服务"
 
-#: src/transport/gnunet-service-transport.c:2716
+#: src/transport/gnunet-service-transport.c:2717
 #, c-format
 msgid "Adding blacklisting entry for peer `%s':`%s'\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport.c:2781
-#, fuzzy
-msgid "Transport service is lacking key configuration settings. Exiting.\n"
-msgstr "立即保存配置?"
-
-#: src/transport/gnunet-service-transport_hello.c:193
+#: src/transport/gnunet-service-transport_hello.c:195
 msgid "# refreshed my HELLO"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:804
+#: src/transport/gnunet-service-transport_neighbours.c:805
 msgid "# session creation failed"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1051
+#: src/transport/gnunet-service-transport_neighbours.c:1052
 msgid "# DISCONNECT messages sent"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1174
+#: src/transport/gnunet-service-transport_neighbours.c:1175
 msgid "# disconnects due to quota of 0"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1322
-#: src/transport/gnunet-service-transport_neighbours.c:1783
+#: src/transport/gnunet-service-transport_neighbours.c:1323
+#: src/transport/gnunet-service-transport_neighbours.c:1784
 msgid "# bytes in message queue for other peers"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1327
+#: src/transport/gnunet-service-transport_neighbours.c:1328
 msgid "# messages transmitted to other peers"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1333
+#: src/transport/gnunet-service-transport_neighbours.c:1334
 msgid "# transmission failures for messages to other peers"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1393
+#: src/transport/gnunet-service-transport_neighbours.c:1394
 msgid "# messages timed out while in transport queue"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1477
+#: src/transport/gnunet-service-transport_neighbours.c:1478
 msgid "# KEEPALIVES sent"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1513
+#: src/transport/gnunet-service-transport_neighbours.c:1514
 msgid "# KEEPALIVE messages discarded (peer unknown)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1521
+#: src/transport/gnunet-service-transport_neighbours.c:1522
 msgid "# KEEPALIVE messages discarded (no session)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1531
+#: src/transport/gnunet-service-transport_neighbours.c:1532
 msgid "# KEEPALIVES received in good order"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1576
+#: src/transport/gnunet-service-transport_neighbours.c:1577
 msgid "# KEEPALIVE_RESPONSEs discarded (not connected)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1585
+#: src/transport/gnunet-service-transport_neighbours.c:1586
 msgid "# KEEPALIVE_RESPONSEs discarded (not expected)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1593
+#: src/transport/gnunet-service-transport_neighbours.c:1594
 msgid "# KEEPALIVE_RESPONSEs discarded (address changed)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1602
+#: src/transport/gnunet-service-transport_neighbours.c:1603
 msgid "# KEEPALIVE_RESPONSEs discarded (no nonce)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1607
+#: src/transport/gnunet-service-transport_neighbours.c:1608
 msgid "# KEEPALIVE_RESPONSEs discarded (bad nonce)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1613
+#: src/transport/gnunet-service-transport_neighbours.c:1614
 msgid "# KEEPALIVE_RESPONSEs received (OK)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1680
+#: src/transport/gnunet-service-transport_neighbours.c:1681
 msgid "# messages discarded due to lack of neighbour record"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1714
+#: src/transport/gnunet-service-transport_neighbours.c:1715
 msgid "# bandwidth quota violations by other peers"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1729
+#: src/transport/gnunet-service-transport_neighbours.c:1730
 msgid "# ms throttling suggested"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:1852
+#: src/transport/gnunet-service-transport_neighbours.c:1853
 #, fuzzy, c-format
 msgid "Failed to send SYN message to peer `%s'\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1872
+#: src/transport/gnunet-service-transport_neighbours.c:1873
 #, fuzzy
 msgid "# Failed attempts to switch addresses (failed to send SYN CONT)"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1911
+#: src/transport/gnunet-service-transport_neighbours.c:1912
 #, fuzzy
 msgid "# SYN messages sent"
 msgstr "消息尺寸"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1928
+#: src/transport/gnunet-service-transport_neighbours.c:1929
 #, fuzzy, c-format
 msgid "Failed to transmit SYN message to %s\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:1958
+#: src/transport/gnunet-service-transport_neighbours.c:1959
 #, fuzzy
 msgid "# Failed attempts to switch addresses (failed to send SYN)"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:2026
+#: src/transport/gnunet-service-transport_neighbours.c:2027
 #, fuzzy, c-format
 msgid "Failed to send SYN_ACK message to peer `%s' using address `%s'\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:2080
+#: src/transport/gnunet-service-transport_neighbours.c:2081
 msgid "# SYN_ACK messages sent"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:2097
+#: src/transport/gnunet-service-transport_neighbours.c:2098
 #, fuzzy, c-format
 msgid "Failed to transmit SYN_ACK message to %s\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/transport/gnunet-service-transport_neighbours.c:2260
+#: src/transport/gnunet-service-transport_neighbours.c:2261
 msgid "# SYN messages received"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:2265
+#: src/transport/gnunet-service-transport_neighbours.c:2266
 #, c-format
 msgid "SYN request from peer `%s' ignored due impending shutdown\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:2652
+#: src/transport/gnunet-service-transport_neighbours.c:2653
 msgid "# Attempts to switch addresses"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3137
+#: src/transport/gnunet-service-transport_neighbours.c:3138
 msgid "# SYN_ACK messages received"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3145
+#: src/transport/gnunet-service-transport_neighbours.c:3146
 msgid "# unexpected SYN_ACK messages (no peer)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3163
-#: src/transport/gnunet-service-transport_neighbours.c:3187
+#: src/transport/gnunet-service-transport_neighbours.c:3164
+#: src/transport/gnunet-service-transport_neighbours.c:3188
 msgid "# unexpected SYN_ACK messages (not ready)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3199
+#: src/transport/gnunet-service-transport_neighbours.c:3200
 msgid "# unexpected SYN_ACK messages (waiting on ATS)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3224
+#: src/transport/gnunet-service-transport_neighbours.c:3225
 msgid "# Successful attempts to switch addresses"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3237
+#: src/transport/gnunet-service-transport_neighbours.c:3238
 msgid "# unexpected SYN_ACK messages (disconnecting)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3410
+#: src/transport/gnunet-service-transport_neighbours.c:3411
 msgid "# ACK messages received"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3446
+#: src/transport/gnunet-service-transport_neighbours.c:3447
 msgid "# unexpected ACK messages"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3534
+#: src/transport/gnunet-service-transport_neighbours.c:3535
 msgid "# quota messages ignored (malformed)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3541
+#: src/transport/gnunet-service-transport_neighbours.c:3542
 msgid "# QUOTA messages received"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3581
+#: src/transport/gnunet-service-transport_neighbours.c:3582
 msgid "# disconnect messages ignored (malformed)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3588
+#: src/transport/gnunet-service-transport_neighbours.c:3589
 msgid "# DISCONNECT messages received"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3599
+#: src/transport/gnunet-service-transport_neighbours.c:3600
 msgid "# disconnect messages ignored (timestamp)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_neighbours.c:3734
+#: src/transport/gnunet-service-transport_neighbours.c:3735
 msgid "# disconnected from peer upon explicit request"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_plugins.c:156
+#: src/transport/gnunet-service-transport_plugins.c:158
 msgid "Transport service is lacking NEIGHBOUR_LIMIT option.\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_plugins.c:221
-#: src/transport/gnunet-service-transport_plugins.c:229
-#: src/transport/gnunet-service-transport_plugins.c:237
-#: src/transport/gnunet-service-transport_plugins.c:245
-#: src/transport/gnunet-service-transport_plugins.c:253
-#: src/transport/gnunet-service-transport_plugins.c:261
-#: src/transport/gnunet-service-transport_plugins.c:269
-#: src/transport/gnunet-service-transport_plugins.c:277
-#: src/transport/gnunet-service-transport_plugins.c:285
-#: src/transport/gnunet-service-transport_plugins.c:293
-#: src/transport/gnunet-service-transport_plugins.c:301
+#: src/transport/gnunet-service-transport_plugins.c:223
+#: src/transport/gnunet-service-transport_plugins.c:231
+#: src/transport/gnunet-service-transport_plugins.c:239
+#: src/transport/gnunet-service-transport_plugins.c:247
+#: src/transport/gnunet-service-transport_plugins.c:255
+#: src/transport/gnunet-service-transport_plugins.c:263
+#: src/transport/gnunet-service-transport_plugins.c:271
+#: src/transport/gnunet-service-transport_plugins.c:279
+#: src/transport/gnunet-service-transport_plugins.c:287
+#: src/transport/gnunet-service-transport_plugins.c:295
+#: src/transport/gnunet-service-transport_plugins.c:303
 #, fuzzy, c-format
 msgid "Missing function `%s' in transport plugin for `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/transport/gnunet-service-transport_plugins.c:308
+#: src/transport/gnunet-service-transport_plugins.c:310
 #, c-format
 msgid "Did not load plugin `%s' due to missing functions\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:386
+#: src/transport/gnunet-service-transport_validation.c:388
 msgid "# Addresses in validation map"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:489
-#: src/transport/gnunet-service-transport_validation.c:675
-#: src/transport/gnunet-service-transport_validation.c:995
-#: src/transport/gnunet-service-transport_validation.c:1607
+#: src/transport/gnunet-service-transport_validation.c:491
+#: src/transport/gnunet-service-transport_validation.c:677
+#: src/transport/gnunet-service-transport_validation.c:997
+#: src/transport/gnunet-service-transport_validation.c:1609
 #, fuzzy
 msgid "# validations running"
 msgstr "sqlite 数据仓库"
 
-#: src/transport/gnunet-service-transport_validation.c:530
+#: src/transport/gnunet-service-transport_validation.c:532
 msgid "# address records discarded (timeout)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:578
+#: src/transport/gnunet-service-transport_validation.c:580
 msgid "# address records discarded (blacklist)"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:666
+#: src/transport/gnunet-service-transport_validation.c:668
 msgid "# PINGs for address validation sent"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:746
+#: src/transport/gnunet-service-transport_validation.c:748
 msgid "# validations delayed by global throttle"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:783
+#: src/transport/gnunet-service-transport_validation.c:785
 msgid "# address revalidations started"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1121
+#: src/transport/gnunet-service-transport_validation.c:1123
 msgid "# PING message for different peer received"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1172
+#: src/transport/gnunet-service-transport_validation.c:1174
 #, c-format
 msgid "Plugin `%s' not available, cannot confirm having this address\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1185
+#: src/transport/gnunet-service-transport_validation.c:1187
 msgid "# failed address checks during validation"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1188
+#: src/transport/gnunet-service-transport_validation.c:1190
 #, c-format
 msgid "Address `%s' is not one of my addresses, not confirming PING\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1196
+#: src/transport/gnunet-service-transport_validation.c:1198
 msgid "# successful address checks during validation"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1209
+#: src/transport/gnunet-service-transport_validation.c:1211
 #, c-format
 msgid ""
 "Not confirming PING from peer `%s' with address `%s' since I cannot confirm "
 "having this address.\n"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1264
+#: src/transport/gnunet-service-transport_validation.c:1266
 #, fuzzy, c-format
 msgid "Failed to create PONG signature for peer `%s'\n"
 msgstr "发送消息失败。\n"
 
-#: src/transport/gnunet-service-transport_validation.c:1315
+#: src/transport/gnunet-service-transport_validation.c:1317
 msgid "# PONGs unicast via reliable transport"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1324
+#: src/transport/gnunet-service-transport_validation.c:1326
 msgid "# PONGs multicast to all available addresses"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1497
+#: src/transport/gnunet-service-transport_validation.c:1499
 msgid "# PONGs dropped, no matching pending validation"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1515
+#: src/transport/gnunet-service-transport_validation.c:1517
 msgid "# PONGs dropped, signature expired"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1570
+#: src/transport/gnunet-service-transport_validation.c:1572
 msgid "# validations succeeded"
 msgstr ""
 
-#: src/transport/gnunet-service-transport_validation.c:1625
+#: src/transport/gnunet-service-transport_validation.c:1627
 msgid "# HELLOs given to peerinfo"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:411
+#: src/transport/gnunet-transport.c:413
 #, c-format
 msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:421
+#: src/transport/gnunet-transport.c:423
 #, c-format
 msgid "Received %llu bytes/s (%llu bytes in %s)\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:465
+#: src/transport/gnunet-transport.c:467
 #, fuzzy, c-format
 msgid "Failed to connect to `%s'\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/transport/gnunet-transport.c:478
+#: src/transport/gnunet-transport.c:480
 #, fuzzy, c-format
 msgid "Failed to resolve address for peer `%s'\n"
 msgstr "找不到接口“%s”的一个 IP 地址。\n"
 
-#: src/transport/gnunet-transport.c:492
+#: src/transport/gnunet-transport.c:494
 #, fuzzy
 msgid "Failed to list connections, timeout occurred\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/transport/gnunet-transport.c:525
+#: src/transport/gnunet-transport.c:527
 #, c-format
 msgid "Transmitting %u bytes\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:559
+#: src/transport/gnunet-transport.c:561
 #, c-format
 msgid ""
 "Successfully connected to `%s', starting to send benchmark data in %u Kb "
 "blocks\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:590
+#: src/transport/gnunet-transport.c:592
 #, fuzzy, c-format
 msgid "Disconnected from peer `%s' while benchmarking\n"
 msgstr "“%s”已连接到“%s”。\n"
 
-#: src/transport/gnunet-transport.c:614 src/transport/gnunet-transport.c:643
+#: src/transport/gnunet-transport.c:616 src/transport/gnunet-transport.c:645
 #, c-format
 msgid "%24s: %-17s %4s   (%u connections in total)\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:616
+#: src/transport/gnunet-transport.c:618
 #, fuzzy
 msgid "Connected to"
 msgstr "“%s”已连接到“%s”。\n"
 
-#: src/transport/gnunet-transport.c:645
+#: src/transport/gnunet-transport.c:647
 #, fuzzy
 msgid "Disconnected from"
 msgstr "“%s”已连接到“%s”。\n"
 
-#: src/transport/gnunet-transport.c:680
+#: src/transport/gnunet-transport.c:682
 #, c-format
 msgid "Received %u bytes\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:717
+#: src/transport/gnunet-transport.c:719
 #, c-format
 msgid "Peer `%s': %s %s in state `%s' until %s\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:729
+#: src/transport/gnunet-transport.c:731
 #, fuzzy, c-format
 msgid "Peer `%s': %s %s\n"
 msgstr "运行 %s失败:%s %d\n"
 
-#: src/transport/gnunet-transport.c:1142
+#: src/transport/gnunet-transport.c:1144
 #, fuzzy
 msgid "Monitor disconnected from transport service. Reconnecting.\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/transport/gnunet-transport.c:1249
+#: src/transport/gnunet-transport.c:1251
 #, c-format
 msgid ""
 "Multiple operations given. Please choose only one operation: %s, %s, %s, %s, "
 "%s, %s %s\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1262
+#: src/transport/gnunet-transport.c:1264
 #, c-format
 msgid ""
 "No operation given. Please choose one operation: %s, %s, %s, %s, %s, %s, %s\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1292
+#: src/transport/gnunet-transport.c:1294
 #, fuzzy
 msgid "Failed to connect to transport service for disconnection\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/transport/gnunet-transport.c:1298
+#: src/transport/gnunet-transport.c:1300
 msgid "Blacklisting request in place, stop with CTRL-C\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1323 src/transport/gnunet-transport.c:1353
-#: src/transport/gnunet-transport.c:1406
+#: src/transport/gnunet-transport.c:1325 src/transport/gnunet-transport.c:1355
+#: src/transport/gnunet-transport.c:1408
 #, fuzzy
 msgid "Failed to connect to transport service\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/transport/gnunet-transport.c:1360
+#: src/transport/gnunet-transport.c:1362
 msgid "Starting to receive benchmark data\n"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1431
+#: src/transport/gnunet-transport.c:1433
 #, fuzzy
 msgid "print information for all peers (instead of only connected peers)"
 msgstr "无法获取有关用户“%s”的信息:%s\n"
 
-#: src/transport/gnunet-transport.c:1435
+#: src/transport/gnunet-transport.c:1437
 msgid "measure how fast we are receiving data from all peers (until CTRL-C)"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1439
+#: src/transport/gnunet-transport.c:1441
 #, fuzzy
 msgid "disconnect from a peer"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/transport/gnunet-transport.c:1443
+#: src/transport/gnunet-transport.c:1445
 msgid "provide information about all current connections (once)"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1451
+#: src/transport/gnunet-transport.c:1453
 msgid ""
 "provide information about all connects and disconnect events (continuously)"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1455
+#: src/transport/gnunet-transport.c:1457
 msgid "do not resolve hostnames"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1460
-#: src/transport/gnunet-transport-profiler.c:639
+#: src/transport/gnunet-transport.c:1462
+#: src/transport/gnunet-transport-profiler.c:641
 msgid "peer identity"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1464
+#: src/transport/gnunet-transport.c:1466
 msgid "monitor plugin sessions"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1469
+#: src/transport/gnunet-transport.c:1471
 msgid "send data for benchmarking to the other peer (until CTRL-C)"
 msgstr ""
 
-#: src/transport/gnunet-transport.c:1480
-#: src/transport/gnunet-transport-profiler.c:650
+#: src/transport/gnunet-transport.c:1482
+#: src/transport/gnunet-transport-profiler.c:652
 #, fuzzy
 msgid "Direct access to transport service."
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/transport/gnunet-transport-profiler.c:217
+#: src/transport/gnunet-transport-profiler.c:219
 #, c-format
 msgid "%llu B in %llu ms == %.2f KB/s!\n"
 msgstr ""
 
-#: src/transport/gnunet-transport-profiler.c:615
+#: src/transport/gnunet-transport-profiler.c:617
 msgid "send data to peer"
 msgstr ""
 
-#: src/transport/gnunet-transport-profiler.c:619
+#: src/transport/gnunet-transport-profiler.c:621
 msgid "receive data from peer"
 msgstr ""
 
-#: src/transport/gnunet-transport-profiler.c:624
+#: src/transport/gnunet-transport-profiler.c:626
 msgid "iterations"
 msgstr ""
 
-#: src/transport/gnunet-transport-profiler.c:629
+#: src/transport/gnunet-transport-profiler.c:631
 #, fuzzy
 msgid "number of messages to send"
 msgstr "每次迭代所使用的消息数量"
 
-#: src/transport/gnunet-transport-profiler.c:634
+#: src/transport/gnunet-transport-profiler.c:636
 #, fuzzy
 msgid "message size to use"
 msgstr "消息尺寸"
 
-#: src/transport/plugin_transport_http_client.c:1472
-#: src/transport/plugin_transport_http_server.c:2310
-#: src/transport/plugin_transport_http_server.c:3524
-#: src/transport/plugin_transport_tcp.c:3889
-#: src/transport/plugin_transport_tcp.c:3896
-#: src/transport/plugin_transport_xt.c:3897
-#: src/transport/plugin_transport_xt.c:3904
+#: src/transport/plugin_transport_http_client.c:1474
+#: src/transport/plugin_transport_http_server.c:2312
+#: src/transport/plugin_transport_http_server.c:3530
+#: src/transport/plugin_transport_tcp.c:3895
+#: src/transport/plugin_transport_tcp.c:3902
+#: src/transport/plugin_transport_xt.c:3899
+#: src/transport/plugin_transport_xt.c:3906
 msgid "TCP_STEALTH not supported on this platform.\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_client.c:2113
+#: src/transport/plugin_transport_http_client.c:2115
 #, c-format
 msgid "Could not initialize curl multi handle, failed to start %s plugin!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_client.c:2162
-#: src/transport/plugin_transport_http_server.c:3239
+#: src/transport/plugin_transport_http_client.c:2164
+#: src/transport/plugin_transport_http_server.c:3245
 #, fuzzy, c-format
 msgid "Shutting down plugin `%s'\n"
 msgstr "未知的命令“%s”。\n"
 
-#: src/transport/plugin_transport_http_client.c:2179
-#: src/transport/plugin_transport_http_server.c:3309
+#: src/transport/plugin_transport_http_client.c:2181
+#: src/transport/plugin_transport_http_server.c:3315
 #, c-format
 msgid "Shutdown for plugin `%s' complete\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_client.c:2213
+#: src/transport/plugin_transport_http_client.c:2215
 #, fuzzy, c-format
 msgid "Maximum number of requests is %u\n"
 msgstr "增加 TCP/IP 的最大连接数"
 
-#: src/transport/plugin_transport_http_server.c:1754
+#: src/transport/plugin_transport_http_server.c:1756
 #, c-format
 msgid ""
 "Access from connection %p (%u of %u) for `%s' `%s' url `%s' with upload data "
 "size %u\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2026
+#: src/transport/plugin_transport_http_server.c:2028
 #, c-format
 msgid "Accepting connection (%u of %u) from `%s'\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2034
+#: src/transport/plugin_transport_http_server.c:2036
 #, c-format
 msgid ""
 "Server reached maximum number connections (%u), rejecting new connection\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2184
+#: src/transport/plugin_transport_http_server.c:2186
 msgid ""
 "Could not create a new TLS certificate, program `gnunet-transport-"
 "certificate-creation' could not be started!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2207
+#: src/transport/plugin_transport_http_server.c:2209
 #, c-format
 msgid "No usable TLS certificate found and creating one at `%s/%s' failed!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2336
+#: src/transport/plugin_transport_http_server.c:2338
 msgid "Could not load or create server certificate! Loading plugin failed!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2648
+#: src/transport/plugin_transport_http_server.c:2654
 #, fuzzy
 msgid "Require valid port number for service in configuration!\n"
 msgstr "保存配置失败。"
 
-#: src/transport/plugin_transport_http_server.c:2813
+#: src/transport/plugin_transport_http_server.c:2819
 #, c-format
 msgid "Found %u addresses to report to NAT service\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:2899
-#: src/transport/plugin_transport_udp.c:3621
-#: src/transport/plugin_transport_xu.c:2047
+#: src/transport/plugin_transport_http_server.c:2905
+#: src/transport/plugin_transport_udp.c:3627
+#: src/transport/plugin_transport_xu.c:2049
 msgid "Disabling IPv6 since it is not supported on this system!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3005
+#: src/transport/plugin_transport_http_server.c:3011
 #, c-format
 msgid "IPv4 support is %s\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3020
+#: src/transport/plugin_transport_http_server.c:3026
 #, c-format
 msgid "IPv6 support is %s\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3026
+#: src/transport/plugin_transport_http_server.c:3032
 msgid "Neither IPv4 nor IPv6 are enabled! Fix in configuration\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3037
+#: src/transport/plugin_transport_http_server.c:3043
 #, fuzzy
 msgid "Port is required! Fix in configuration\n"
 msgstr ""
 "\n"
 "结束配置。\n"
 
-#: src/transport/plugin_transport_http_server.c:3043
+#: src/transport/plugin_transport_http_server.c:3049
 #, c-format
 msgid "Using port %u\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3062
+#: src/transport/plugin_transport_http_server.c:3068
 #, c-format
 msgid "Specific IPv4 address `%s' in configuration file is invalid!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3097
+#: src/transport/plugin_transport_http_server.c:3103
 #, c-format
 msgid "Specific IPv6 address `%s' in configuration file is invalid!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3172
+#: src/transport/plugin_transport_http_server.c:3178
 #, fuzzy, c-format
 msgid "Using external hostname `%s'\n"
 msgstr "卸载 GNUnet 服务"
 
-#: src/transport/plugin_transport_http_server.c:3193
+#: src/transport/plugin_transport_http_server.c:3199
 #, c-format
 msgid "Notifying transport only about hostname `%s'\n"
 msgstr ""
 
-#: src/transport/plugin_transport_http_server.c:3210
+#: src/transport/plugin_transport_http_server.c:3216
 #, fuzzy, c-format
 msgid "Maximum number of connections is %u\n"
 msgstr "增加 TCP/IP 的最大连接数"
 
-#: src/transport/plugin_transport_http_server.c:3536
+#: src/transport/plugin_transport_http_server.c:3542
 #, fuzzy
 msgid "Unable to compile URL regex\n"
 msgstr "无法初始化 SQLite:%s。\n"
 
-#: src/transport/plugin_transport_smtp.c:221
+#: src/transport/plugin_transport_smtp.c:223
 #, c-format
 msgid "Received malformed message via %s. Ignored.\n"
 msgstr ""
 
-#: src/transport/plugin_transport_smtp.c:308
+#: src/transport/plugin_transport_smtp.c:310
 msgid "SMTP filter string to invalid, lacks ': '\n"
 msgstr ""
 
-#: src/transport/plugin_transport_smtp.c:317
+#: src/transport/plugin_transport_smtp.c:319
 #, c-format
 msgid "SMTP filter string to long, capped to `%s'\n"
 msgstr ""
 
-#: src/transport/plugin_transport_smtp.c:412
-#: src/transport/plugin_transport_smtp.c:422
-#: src/transport/plugin_transport_smtp.c:435
-#: src/transport/plugin_transport_smtp.c:454
-#: src/transport/plugin_transport_smtp.c:477
-#: src/transport/plugin_transport_smtp.c:485
-#: src/transport/plugin_transport_smtp.c:498
-#: src/transport/plugin_transport_smtp.c:509
+#: src/transport/plugin_transport_smtp.c:414
+#: src/transport/plugin_transport_smtp.c:424
+#: src/transport/plugin_transport_smtp.c:437
+#: src/transport/plugin_transport_smtp.c:456
+#: src/transport/plugin_transport_smtp.c:479
+#: src/transport/plugin_transport_smtp.c:487
+#: src/transport/plugin_transport_smtp.c:500
+#: src/transport/plugin_transport_smtp.c:511
 #, c-format
 msgid "SMTP: `%s' failed: %s.\n"
 msgstr ""
 
-#: src/transport/plugin_transport_smtp.c:650
+#: src/transport/plugin_transport_smtp.c:652
 msgid "No email-address specified, can not start SMTP transport.\n"
 msgstr ""
 
-#: src/transport/plugin_transport_smtp.c:662
+#: src/transport/plugin_transport_smtp.c:664
 msgid "# bytes received via SMTP"
 msgstr ""
 
-#: src/transport/plugin_transport_smtp.c:663
+#: src/transport/plugin_transport_smtp.c:665
 msgid "# bytes sent via SMTP"
 msgstr ""
 
-#: src/transport/plugin_transport_smtp.c:665
+#: src/transport/plugin_transport_smtp.c:667
 msgid "# bytes dropped by SMTP (outgoing)"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:1545
-#: src/transport/plugin_transport_tcp.c:2871
-#: src/transport/plugin_transport_xt.c:1551
-#: src/transport/plugin_transport_xt.c:2877
+#: src/transport/plugin_transport_tcp.c:1551
+#: src/transport/plugin_transport_tcp.c:2877
+#: src/transport/plugin_transport_xt.c:1553
+#: src/transport/plugin_transport_xt.c:2879
 #, c-format
 msgid "Unexpected address length: %u bytes\n"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:1728
-#: src/transport/plugin_transport_tcp.c:1952
-#: src/transport/plugin_transport_tcp.c:3135
-#: src/transport/plugin_transport_tcp.c:4012
-#: src/transport/plugin_transport_xt.c:1734
-#: src/transport/plugin_transport_xt.c:1958
-#: src/transport/plugin_transport_xt.c:3141
+#: src/transport/plugin_transport_tcp.c:1734
+#: src/transport/plugin_transport_tcp.c:1958
+#: src/transport/plugin_transport_tcp.c:3141
+#: src/transport/plugin_transport_tcp.c:4018
+#: src/transport/plugin_transport_xt.c:1736
+#: src/transport/plugin_transport_xt.c:1960
+#: src/transport/plugin_transport_xt.c:3143
 msgid "# TCP sessions active"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:1770
-#: src/transport/plugin_transport_tcp.c:1934
-#: src/transport/plugin_transport_tcp.c:2058
-#: src/transport/plugin_transport_tcp.c:2131
-#: src/transport/plugin_transport_tcp.c:2231
-#: src/transport/plugin_transport_tcp.c:2256
-#: src/transport/plugin_transport_xt.c:1776
-#: src/transport/plugin_transport_xt.c:1940
-#: src/transport/plugin_transport_xt.c:2064
-#: src/transport/plugin_transport_xt.c:2137
-#: src/transport/plugin_transport_xt.c:2237
-#: src/transport/plugin_transport_xt.c:2262
+#: src/transport/plugin_transport_tcp.c:1776
+#: src/transport/plugin_transport_tcp.c:1940
+#: src/transport/plugin_transport_tcp.c:2064
+#: src/transport/plugin_transport_tcp.c:2137
+#: src/transport/plugin_transport_tcp.c:2237
+#: src/transport/plugin_transport_tcp.c:2262
+#: src/transport/plugin_transport_xt.c:1778
+#: src/transport/plugin_transport_xt.c:1942
+#: src/transport/plugin_transport_xt.c:2066
+#: src/transport/plugin_transport_xt.c:2139
+#: src/transport/plugin_transport_xt.c:2239
+#: src/transport/plugin_transport_xt.c:2264
 msgid "# bytes currently in TCP buffers"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:1773
-#: src/transport/plugin_transport_xt.c:1779
+#: src/transport/plugin_transport_tcp.c:1779
+#: src/transport/plugin_transport_xt.c:1781
 msgid "# bytes discarded by TCP (disconnect)"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:2061
-#: src/transport/plugin_transport_xt.c:2067
+#: src/transport/plugin_transport_tcp.c:2067
+#: src/transport/plugin_transport_xt.c:2069
 msgid "# bytes discarded by TCP (timeout)"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:2135
-#: src/transport/plugin_transport_xt.c:2141
+#: src/transport/plugin_transport_tcp.c:2141
+#: src/transport/plugin_transport_xt.c:2143
 msgid "# bytes transmitted via TCP"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:2533
-#: src/transport/plugin_transport_xt.c:2539
+#: src/transport/plugin_transport_tcp.c:2539
+#: src/transport/plugin_transport_xt.c:2541
 msgid "# requests to create session with invalid address"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:2709
-#: src/transport/plugin_transport_xt.c:2715
+#: src/transport/plugin_transport_tcp.c:2715
+#: src/transport/plugin_transport_xt.c:2717
 msgid "# transport-service disconnect requests for TCP"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3201
-#: src/transport/plugin_transport_xt.c:3207
+#: src/transport/plugin_transport_tcp.c:3207
+#: src/transport/plugin_transport_xt.c:3209
 msgid "# TCP WELCOME messages received"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3407
-#: src/transport/plugin_transport_xt.c:3413
+#: src/transport/plugin_transport_tcp.c:3413
+#: src/transport/plugin_transport_xt.c:3415
 msgid "# bytes received via TCP"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3458
-#: src/transport/plugin_transport_tcp.c:3516
-#: src/transport/plugin_transport_xt.c:3464
-#: src/transport/plugin_transport_xt.c:3522
+#: src/transport/plugin_transport_tcp.c:3464
+#: src/transport/plugin_transport_tcp.c:3522
+#: src/transport/plugin_transport_xt.c:3466
+#: src/transport/plugin_transport_xt.c:3524
 #, fuzzy
 msgid "# TCP server connections active"
 msgstr ""
 "\n"
 "按任意键继续\n"
 
-#: src/transport/plugin_transport_tcp.c:3462
-#: src/transport/plugin_transport_xt.c:3468
+#: src/transport/plugin_transport_tcp.c:3468
+#: src/transport/plugin_transport_xt.c:3470
 #, fuzzy
 msgid "# TCP server connect events"
 msgstr ""
 "\n"
 "按任意键继续\n"
 
-#: src/transport/plugin_transport_tcp.c:3468
-#: src/transport/plugin_transport_xt.c:3474
+#: src/transport/plugin_transport_tcp.c:3474
+#: src/transport/plugin_transport_xt.c:3476
 msgid "TCP connection limit reached, suspending server\n"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3470
-#: src/transport/plugin_transport_xt.c:3476
+#: src/transport/plugin_transport_tcp.c:3476
+#: src/transport/plugin_transport_xt.c:3478
 msgid "# TCP service suspended"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3510
-#: src/transport/plugin_transport_xt.c:3516
+#: src/transport/plugin_transport_tcp.c:3516
+#: src/transport/plugin_transport_xt.c:3518
 msgid "# TCP service resumed"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3520
-#: src/transport/plugin_transport_xt.c:3526
+#: src/transport/plugin_transport_tcp.c:3526
+#: src/transport/plugin_transport_xt.c:3528
 msgid "# network-level TCP disconnect events"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:3839
-#: src/transport/plugin_transport_xt.c:3847
+#: src/transport/plugin_transport_tcp.c:3845
+#: src/transport/plugin_transport_xt.c:3849
 #, fuzzy
 msgid "Failed to start service.\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/transport/plugin_transport_tcp.c:4000
+#: src/transport/plugin_transport_tcp.c:4006
 #, c-format
 msgid "TCP transport listening on port %llu\n"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:4004
+#: src/transport/plugin_transport_tcp.c:4010
 msgid "TCP transport not listening on any port (client only)\n"
 msgstr ""
 
-#: src/transport/plugin_transport_tcp.c:4008
+#: src/transport/plugin_transport_tcp.c:4014
 #, c-format
 msgid "TCP transport advertises itself as being on port %llu\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp_broadcasting.c:166
+#: src/transport/plugin_transport_udp_broadcasting.c:168
 msgid "# Multicast HELLO beacons received via UDP"
 msgstr ""
 
-#: src/transport/plugin_transport_udp_broadcasting.c:546
+#: src/transport/plugin_transport_udp_broadcasting.c:548
 msgid ""
 "Disabling HELLO broadcasting due to friend-to-friend only configuration!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp_broadcasting.c:563
+#: src/transport/plugin_transport_udp_broadcasting.c:565
 #, c-format
 msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3365
+#: src/transport/plugin_transport_udp.c:3371
 #, c-format
 msgid ""
 "UDP could not transmit message to `%s': Network seems down, please check "
 "your network configuration\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3379
+#: src/transport/plugin_transport_udp.c:3385
 msgid ""
 "UDP could not transmit IPv6 message! Please check your network configuration "
 "and disable IPv6 if your connection does not have a global IPv6 address\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3697
-#: src/transport/plugin_transport_udp.c:3796
+#: src/transport/plugin_transport_udp.c:3703
+#: src/transport/plugin_transport_udp.c:3802
 #, fuzzy, c-format
 msgid "Failed to bind UDP socket to %s: %s\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/transport/plugin_transport_udp.c:3715
-#: src/transport/plugin_transport_xu.c:2141
+#: src/transport/plugin_transport_udp.c:3721
+#: src/transport/plugin_transport_xu.c:2143
 msgid "Disabling IPv4 since it is not supported on this system!\n"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3806
+#: src/transport/plugin_transport_udp.c:3812
 #, fuzzy
 msgid "Failed to open UDP sockets\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/transport/plugin_transport_udp.c:3877
-#: src/transport/plugin_transport_udp.c:3891
-#: src/transport/plugin_transport_xu.c:2299
-#: src/transport/plugin_transport_xu.c:2313
+#: src/transport/plugin_transport_udp.c:3883
+#: src/transport/plugin_transport_udp.c:3897
+#: src/transport/plugin_transport_xu.c:2301
+#: src/transport/plugin_transport_xu.c:2315
 msgid "must be in [0,65535]"
 msgstr ""
 
-#: src/transport/plugin_transport_udp.c:3923
-#: src/transport/plugin_transport_xu.c:2345
+#: src/transport/plugin_transport_udp.c:3929
+#: src/transport/plugin_transport_xu.c:2347
 #, fuzzy
 msgid "must be valid IPv4 address"
 msgstr "“%s”不可用。\n"
 
-#: src/transport/plugin_transport_udp.c:3950
-#: src/transport/plugin_transport_xu.c:2372
+#: src/transport/plugin_transport_udp.c:3956
+#: src/transport/plugin_transport_xu.c:2374
 #, fuzzy
 msgid "must be valid IPv6 address"
 msgstr "“%s”不可用。\n"
 
-#: src/transport/plugin_transport_udp.c:4014
+#: src/transport/plugin_transport_udp.c:4020
 #, fuzzy
 msgid "Failed to create UDP network sockets\n"
 msgstr "发送消息失败。\n"
 
-#: src/transport/plugin_transport_unix.c:1401
-#, fuzzy, c-format
-msgid "Cannot create path to `%s'\n"
-msgstr "发送消息失败。\n"
-
-#: src/transport/plugin_transport_unix.c:1414
+#: src/transport/plugin_transport_unix.c:1416
 #, fuzzy, c-format
 msgid "Cannot bind to `%s'\n"
 msgstr "发送消息失败。\n"
 
-#: src/transport/plugin_transport_unix.c:1814
+#: src/transport/plugin_transport_unix.c:1816
 #, fuzzy
 msgid "Failed to open UNIX listen socket\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/transport/plugin_transport_wlan.c:766
+#: src/transport/plugin_transport_wlan.c:768
 msgid "# ACKs sent"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:786
+#: src/transport/plugin_transport_wlan.c:788
 msgid "# Messages defragmented"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:827
-#: src/transport/plugin_transport_wlan.c:912
+#: src/transport/plugin_transport_wlan.c:829
+#: src/transport/plugin_transport_wlan.c:914
 msgid "# Sessions allocated"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:1033
+#: src/transport/plugin_transport_wlan.c:1035
 #, fuzzy
 msgid "# message fragments sent"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/transport/plugin_transport_wlan.c:1062
+#: src/transport/plugin_transport_wlan.c:1064
 msgid "# messages pending (with fragmentation)"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:1191
-#: src/transport/plugin_transport_wlan.c:1282
-#: src/transport/plugin_transport_wlan.c:2303
+#: src/transport/plugin_transport_wlan.c:1193
+#: src/transport/plugin_transport_wlan.c:1284
+#: src/transport/plugin_transport_wlan.c:2305
 msgid "# MAC endpoints allocated"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:1565
+#: src/transport/plugin_transport_wlan.c:1567
 msgid "# ACKs received"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:1634
+#: src/transport/plugin_transport_wlan.c:1636
 msgid "# DATA messages discarded due to CRC32 error"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:1738
+#: src/transport/plugin_transport_wlan.c:1740
 msgid "# HELLO beacons sent"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:1854
+#: src/transport/plugin_transport_wlan.c:1856
 msgid "# DATA messages received"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:1888
+#: src/transport/plugin_transport_wlan.c:1890
 msgid "# DATA messages processed"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:2278
+#: src/transport/plugin_transport_wlan.c:2280
 #, c-format
 msgid "Helper binary `%s' not SUID, cannot run WLAN transport\n"
 msgstr ""
 
-#: src/transport/plugin_transport_wlan.c:2300
+#: src/transport/plugin_transport_wlan.c:2302
 msgid "# sessions allocated"
 msgstr ""
 
-#: src/transport/plugin_transport_xt.c:4008
+#: src/transport/plugin_transport_xt.c:4010
 #, c-format
 msgid "XT transport listening on port %llu\n"
 msgstr ""
 
-#: src/transport/plugin_transport_xt.c:4012
+#: src/transport/plugin_transport_xt.c:4014
 msgid "XT transport not listening on any port (client only)\n"
 msgstr ""
 
-#: src/transport/plugin_transport_xt.c:4016
+#: src/transport/plugin_transport_xt.c:4018
 #, c-format
 msgid "XT transport advertises itself as being on port %llu\n"
 msgstr ""
 
-#: src/transport/plugin_transport_xt.c:4020
+#: src/transport/plugin_transport_xt.c:4022
 #, fuzzy
 msgid "# XT sessions active"
 msgstr ""
 "\n"
 "按任意键继续\n"
 
-#: src/transport/plugin_transport_xu.c:1235
+#: src/transport/plugin_transport_xu.c:1237
 #, c-format
 msgid ""
 "XU could not transmit message to `%s': Network seems down, please check your "
 "network configuration\n"
 msgstr ""
 
-#: src/transport/plugin_transport_xu.c:1249
+#: src/transport/plugin_transport_xu.c:1251
 msgid ""
 "XU could not transmit IPv6 message! Please check your network configuration "
 "and disable IPv6 if your connection does not have a global IPv6 address\n"
 msgstr ""
 
-#: src/transport/plugin_transport_xu.c:2123
-#: src/transport/plugin_transport_xu.c:2222
+#: src/transport/plugin_transport_xu.c:2125
+#: src/transport/plugin_transport_xu.c:2224
 #, fuzzy, c-format
 msgid "Failed to bind XU socket to %s: %s\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/transport/plugin_transport_xu.c:2232
+#: src/transport/plugin_transport_xu.c:2234
 #, fuzzy
 msgid "Failed to open XU sockets\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/transport/plugin_transport_xu.c:2396
+#: src/transport/plugin_transport_xu.c:2398
 #, fuzzy
 msgid "Failed to create XU network sockets\n"
 msgstr "发送消息失败。\n"
 
-#: src/transport/tcp_connection_legacy.c:450
+#: src/transport/tcp_connection_legacy.c:452
 #, fuzzy, c-format
 msgid "Access denied to `%s'\n"
 msgstr "“%s”已连接到“%s”。\n"
 
-#: src/transport/tcp_connection_legacy.c:467
+#: src/transport/tcp_connection_legacy.c:469
 #, c-format
 msgid "Accepting connection from `%s': %p\n"
 msgstr ""
 
-#: src/transport/tcp_server_legacy.c:472 src/util/service.c:1109
+#: src/transport/tcp_server_legacy.c:474 src/util/service.c:1666
 #, fuzzy, c-format
 msgid "`%s' failed for port %d (%s).\n"
 msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n"
 
-#: src/transport/tcp_server_legacy.c:482 src/util/service.c:1119
+#: src/transport/tcp_server_legacy.c:484 src/util/service.c:1676
 #, c-format
 msgid "`%s' failed for port %d (%s): address already in use\n"
 msgstr ""
 
-#: src/transport/tcp_server_legacy.c:488 src/util/service.c:1125
+#: src/transport/tcp_server_legacy.c:490 src/util/service.c:1682
 #, fuzzy, c-format
 msgid "`%s' failed for `%s': address already in use\n"
 msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n"
 
-#: src/transport/tcp_server_legacy.c:888
+#: src/transport/tcp_server_legacy.c:890
 #, c-format
 msgid ""
 "Processing code for message of type %u did not call "
 "`GNUNET_SERVER_receive_done' after %s\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:337 src/util/service.c:2378
+#: src/transport/tcp_service_legacy.c:339 src/util/service.c:870
 #, c-format
 msgid "Unknown address family %d\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:344
+#: src/transport/tcp_service_legacy.c:346
 #, c-format
 msgid "Access from `%s' denied to service `%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:400 src/util/service.c:437
+#: src/transport/tcp_service_legacy.c:402 src/util/service.c:994
 #, c-format
 msgid "Could not parse IPv4 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:438 src/util/service.c:480
+#: src/transport/tcp_service_legacy.c:440 src/util/service.c:1037
 #, c-format
 msgid "Could not parse IPv6 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:902 src/util/service.c:1040
+#: src/transport/tcp_service_legacy.c:904 src/util/service.c:1597
 msgid "Could not access a pre-bound socket, will try to bind myself\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:951
-#: src/transport/tcp_service_legacy.c:969 src/util/service.c:1192
+#: src/transport/tcp_service_legacy.c:953
+#: src/transport/tcp_service_legacy.c:971 src/util/service.c:1750
 #, c-format
 msgid "Specified value for `%s' of service `%s' is invalid\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:994 src/util/service.c:1224
+#: src/transport/tcp_service_legacy.c:996 src/util/service.c:1783
 #, c-format
 msgid "Could not access pre-bound socket %u, will try to bind myself\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1159
+#: src/transport/tcp_service_legacy.c:1161
 #, fuzzy, c-format
 msgid "Failed to start `%s' at `%s'\n"
 msgstr "运行 %s失败:%s %d\n"
 
-#: src/transport/tcp_service_legacy.c:1200
+#: src/transport/tcp_service_legacy.c:1202
 #, c-format
 msgid "Service `%s' runs at %s\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1249 src/util/service.c:1498
+#: src/transport/tcp_service_legacy.c:1251 src/util/service.c:2057
 msgid "Service process failed to initialize\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1253 src/util/service.c:1502
+#: src/transport/tcp_service_legacy.c:1255 src/util/service.c:2061
 msgid "Service process could not initialize server function\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1257 src/util/service.c:1506
+#: src/transport/tcp_service_legacy.c:1259 src/util/service.c:2065
 msgid "Service process failed to report status\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1311 src/util/disk.c:1521
-#: src/util/service.c:1376
+#: src/transport/tcp_service_legacy.c:1313 src/util/disk.c:1525
+#: src/util/service.c:1935
 #, c-format
 msgid "Cannot obtain information about user `%s': %s\n"
 msgstr "无法获取有关用户“%s”的信息:%s\n"
 
-#: src/transport/tcp_service_legacy.c:1312 src/util/service.c:1378
+#: src/transport/tcp_service_legacy.c:1314 src/util/service.c:1937
 msgid "No such user"
 msgstr "无此用户"
 
-#: src/transport/tcp_service_legacy.c:1325 src/util/service.c:1397
+#: src/transport/tcp_service_legacy.c:1327 src/util/service.c:1956
 #, c-format
 msgid "Cannot change user/group to `%s': %s\n"
 msgstr "无法更改用户/组为“%s”:%s\n"
 
-#: src/transport/tcp_service_legacy.c:1396 src/util/service.c:1757
+#: src/transport/tcp_service_legacy.c:1398 src/util/service.c:2318
 msgid "do daemonize (detach from terminal)"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1446 src/util/program.c:277
-#: src/util/service.c:1820
+#: src/transport/tcp_service_legacy.c:1448 src/util/service.c:2382
+#: src/util/service.c:2397
 #, fuzzy, c-format
 msgid "Malformed configuration file `%s', exit ...\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/transport/tcp_service_legacy.c:1456 src/util/program.c:297
-#: src/util/service.c:1831
+#: src/transport/tcp_service_legacy.c:1458 src/util/service.c:2409
 #, fuzzy
 msgid "Malformed configuration, exit ...\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/transport/tcp_service_legacy.c:1461 src/util/program.c:290
-#: src/util/service.c:1837
+#: src/transport/tcp_service_legacy.c:1463
 #, fuzzy, c-format
 msgid "Could not access configuration file `%s'\n"
 msgstr "找不到接口“%s”的一个 IP 地址。\n"
 
-#: src/util/bio.c:179 src/util/bio.c:187
+#: src/transport/transport_api2_communication.c:764
+msgid "Dropped backchanel message: handler not provided by communicator\n"
+msgstr ""
+
+#: src/util/bio.c:181 src/util/bio.c:189
 #, fuzzy, c-format
 msgid "Error reading `%s': %s"
 msgstr "创建用户出错"
 
-#: src/util/bio.c:189
+#: src/util/bio.c:191
 msgid "End of file"
 msgstr ""
 
-#: src/util/bio.c:246
+#: src/util/bio.c:248
 #, c-format
 msgid "Error reading length of string `%s'"
 msgstr ""
 
-#: src/util/bio.c:256
+#: src/util/bio.c:258
 #, c-format
 msgid "String `%s' longer than allowed (%u > %u)"
 msgstr ""
 
-#: src/util/bio.c:304
+#: src/util/bio.c:306
 #, c-format
 msgid "Serialized metadata `%s' larger than allowed (%u>%u)"
 msgstr ""
 
-#: src/util/bio.c:326
+#: src/util/bio.c:328
 #, c-format
 msgid "Metadata `%s' failed to deserialize"
 msgstr ""
 
-#: src/util/client.c:732
+#: src/util/client.c:734
 msgid "not a valid filename"
 msgstr ""
 
-#: src/util/client.c:923
+#: src/util/client.c:925
 #, c-format
 msgid "Need a non-empty hostname for service `%s'.\n"
 msgstr ""
 
-#: src/util/common_logging.c:257 src/util/common_logging.c:1159
+#: src/util/common_logging.c:259 src/util/common_logging.c:1162
 msgid "DEBUG"
 msgstr "调试"
 
-#: src/util/common_logging.c:259 src/util/common_logging.c:1157
+#: src/util/common_logging.c:261 src/util/common_logging.c:1160
 msgid "INFO"
 msgstr "信息"
 
-#: src/util/common_logging.c:261 src/util/common_logging.c:1155
+#: src/util/common_logging.c:263 src/util/common_logging.c:1158
 msgid "MESSAGE"
 msgstr ""
 
-#: src/util/common_logging.c:263 src/util/common_logging.c:1153
+#: src/util/common_logging.c:265 src/util/common_logging.c:1156
 msgid "WARNING"
 msgstr "警告"
 
-#: src/util/common_logging.c:265 src/util/common_logging.c:1151
+#: src/util/common_logging.c:267 src/util/common_logging.c:1154
 msgid "ERROR"
 msgstr "错误"
 
-#: src/util/common_logging.c:267 src/util/common_logging.c:1161
+#: src/util/common_logging.c:269 src/util/common_logging.c:1164
 msgid "NONE"
 msgstr ""
 
-#: src/util/common_logging.c:631 src/util/common_logging.c:661
+#: src/util/common_logging.c:633 src/util/common_logging.c:663
 #, c-format
 msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n"
 msgstr ""
 
-#: src/util/common_logging.c:895
+#: src/util/common_logging.c:898
 #, fuzzy, c-format
 msgid "Message `%.*s' repeated %u times in the last %s\n"
 msgstr "消息“%.*s”重复了 %u 次,在最近 %llu 秒内\n"
 
-#: src/util/common_logging.c:1162
+#: src/util/common_logging.c:1165
 msgid "INVALID"
 msgstr ""
 
-#: src/util/common_logging.c:1455
+#: src/util/common_logging.c:1458
 msgid "unknown address"
 msgstr ""
 
-#: src/util/common_logging.c:1497
+#: src/util/common_logging.c:1500
 msgid "invalid address"
 msgstr ""
 
-#: src/util/common_logging.c:1515
+#: src/util/common_logging.c:1518
 #, fuzzy, c-format
 msgid "Configuration fails to specify option `%s' in section `%s'!\n"
 msgstr "配置不满足配置规范文件“%s”的约束!\n"
 
-#: src/util/common_logging.c:1536
+#: src/util/common_logging.c:1539
 #, fuzzy, c-format
 msgid ""
 "Configuration specifies invalid value for option `%s' in section `%s': %s\n"
 msgstr "配置不满足配置规范文件“%s”的约束!\n"
 
-#: src/util/configuration.c:294
+#: src/util/configuration.c:331
 #, fuzzy, c-format
 msgid "Syntax error while deserializing in line %u\n"
 msgstr "配置文件“%s”第 %d 行有语法错误。\n"
 
-#: src/util/configuration.c:361
+#: src/util/configuration.c:398
 #, fuzzy, c-format
 msgid "Error while reading file `%s'\n"
 msgstr "解析 dscl 输出时出错。\n"
 
-#: src/util/configuration.c:970
+#: src/util/configuration.c:1016
 #, fuzzy
 msgid "Not a valid relative time specification"
 msgstr "配置文件“%s”已写入。\n"
 
-#: src/util/configuration.c:1059
+#: src/util/configuration.c:1105
 #, c-format
 msgid ""
 "Configuration value '%s' for '%s' in section '%s' is not in set of legal "
 "choices\n"
 msgstr ""
 
-#: src/util/configuration.c:1178
+#: src/util/configuration.c:1224
 #, c-format
 msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n"
 msgstr ""
 
-#: src/util/configuration.c:1211
+#: src/util/configuration.c:1257
 #, fuzzy, c-format
 msgid "Missing closing `%s' in option `%s'\n"
 msgstr "配置文件“%s”已写入。\n"
 
-#: src/util/configuration.c:1279
+#: src/util/configuration.c:1325
 #, c-format
 msgid ""
 "Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined "
 "as an environmental variable\n"
 msgstr ""
 
-#: src/util/container_bloomfilter.c:530
+#: src/util/container_bloomfilter.c:532
 #, c-format
 msgid ""
 "Size of file on disk is incorrect for this Bloom filter (want %llu, have "
 "%llu)\n"
 msgstr ""
 
-#: src/util/crypto_ecc.c:860
+#: src/util/crypto_ecc.c:862
 #, fuzzy, c-format
 msgid "ECC signing failed at %s:%d: %s\n"
 msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n"
 
-#: src/util/crypto_ecc.c:915
+#: src/util/crypto_ecc.c:917
 #, fuzzy, c-format
 msgid "EdDSA signing failed at %s:%d: %s\n"
 msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n"
 
-#: src/util/crypto_ecc.c:994
+#: src/util/crypto_ecc.c:996
 #, fuzzy, c-format
 msgid "ECDSA signature verification failed at %s:%d: %s\n"
 msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n"
 
-#: src/util/crypto_ecc.c:1055
+#: src/util/crypto_ecc.c:1057
 #, fuzzy, c-format
 msgid "EdDSA signature verification failed at %s:%d: %s\n"
 msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n"
 
-#: src/util/crypto_ecc_setup.c:121 src/util/crypto_ecc_setup.c:160
-#: src/util/crypto_ecc_setup.c:303 src/util/crypto_ecc_setup.c:350
+#: src/util/crypto_ecc_setup.c:123 src/util/crypto_ecc_setup.c:162
+#: src/util/crypto_ecc_setup.c:305 src/util/crypto_ecc_setup.c:352
 #, fuzzy, c-format
 msgid "Could not acquire lock on file `%s': %s...\n"
 msgstr "无法解析“%s”(%s):%s\n"
 
-#: src/util/crypto_ecc_setup.c:127 src/util/crypto_ecc_setup.c:309
+#: src/util/crypto_ecc_setup.c:129 src/util/crypto_ecc_setup.c:311
 #, fuzzy
 msgid "Creating a new private key.  This may take a while.\n"
 msgstr "正在启动数据仓库转换(可能需要一段时间)。\n"
 
-#: src/util/crypto_ecc_setup.c:164 src/util/crypto_ecc_setup.c:354
+#: src/util/crypto_ecc_setup.c:166 src/util/crypto_ecc_setup.c:356
 msgid "This may be ok if someone is currently generating a private key.\n"
 msgstr ""
 
-#: src/util/crypto_ecc_setup.c:194 src/util/crypto_ecc_setup.c:396
+#: src/util/crypto_ecc_setup.c:196 src/util/crypto_ecc_setup.c:398
 #, c-format
 msgid ""
 "When trying to read key file `%s' I found %u bytes but I need at least %u.\n"
 msgstr ""
 
-#: src/util/crypto_ecc_setup.c:199 src/util/crypto_ecc_setup.c:400
+#: src/util/crypto_ecc_setup.c:201 src/util/crypto_ecc_setup.c:402
 msgid "This may be ok if someone is currently generating a key.\n"
 msgstr ""
 
-#: src/util/crypto_ecc_setup.c:466
+#: src/util/crypto_ecc_setup.c:468
 #, fuzzy
 msgid "Could not load peer's private key\n"
 msgstr "找不到接口“%s”的一个 IP 地址。\n"
 
-#: src/util/crypto_random.c:304
+#: src/util/crypto_random.c:306
 #, c-format
 msgid "libgcrypt has not the expected version (version %s is required).\n"
 msgstr "libgcrypt 的版本不符合预期(要求版本 %s)。\n"
 
-#: src/util/crypto_rsa.c:848
+#: src/util/crypto_rsa.c:850
 #, fuzzy, c-format
 msgid "RSA signing failed at %s:%d: %s\n"
 msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n"
 
-#: src/util/crypto_rsa.c:1187
+#: src/util/crypto_rsa.c:1189
 #, 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:1251
+#: src/util/disk.c:1255
 #, c-format
 msgid "Expected `%s' to be a directory!\n"
 msgstr "“%s”应为目录!\n"
 
-#: src/util/dnsparser.c:250
+#: src/util/dnsparser.c:264
 #, fuzzy, c-format
 msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/util/dnsparser.c:940
+#: src/util/dnsparser.c:954
 #, fuzzy, c-format
 msgid "Failed to convert UTF-8 name `%s' to DNS IDNA format: %s\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/util/dnsstub.c:229
+#: src/util/dnsstub.c:231
 #, fuzzy, c-format
 msgid "Could not bind to any port: %s\n"
 msgstr "找不到主机“%s”的 IP:%s\n"
 
-#: src/util/dnsstub.c:360
+#: src/util/dnsstub.c:362
 #, c-format
 msgid "Received DNS response that is too small (%u bytes)"
 msgstr ""
 
-#: src/util/dnsstub.c:507
+#: src/util/dnsstub.c:509
 #, fuzzy, c-format
 msgid "Failed to send DNS request to %s: %s\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/util/dnsstub.c:513
+#: src/util/dnsstub.c:515
 #, fuzzy, c-format
 msgid "Sent DNS request to %s\n"
 msgstr "打开日志文件“%s”失败:%s\n"
@@ -8439,236 +8257,236 @@ msgstr "请使用 --help 获取选项列表。\n"
 msgid "Missing mandatory option `%s'.\n"
 msgstr "配置文件“%s”已写入。\n"
 
-#: src/util/getopt_helpers.c:68
+#: src/util/getopt_helpers.c:70
 msgid "print the version number"
 msgstr ""
 
-#: src/util/getopt_helpers.c:113
+#: src/util/getopt_helpers.c:116
 #, c-format
 msgid ""
 "Arguments mandatory for long options are also mandatory for short options.\n"
 msgstr "长选项的必选参数对短选项也是必选的。\n"
 
-#: src/util/getopt_helpers.c:201
+#: src/util/getopt_helpers.c:204
 msgid "print this help"
 msgstr ""
 
-#: src/util/getopt_helpers.c:279
+#: src/util/getopt_helpers.c:282
 msgid "be verbose"
 msgstr ""
 
-#: src/util/getopt_helpers.c:420
+#: src/util/getopt_helpers.c:423
 msgid "configure logging to use LOGLEVEL"
 msgstr ""
 
-#: src/util/getopt_helpers.c:500
+#: src/util/getopt_helpers.c:503
 msgid "configure logging to write logs to FILENAME"
 msgstr ""
 
-#: src/util/getopt_helpers.c:522
+#: src/util/getopt_helpers.c:525
 #, fuzzy
 msgid "use configuration file FILENAME"
 msgstr "更改配置文件中的一个值"
 
-#: src/util/getopt_helpers.c:559 src/util/getopt_helpers.c:763
-#: src/util/getopt_helpers.c:830
+#: src/util/getopt_helpers.c:564 src/util/getopt_helpers.c:770
+#: src/util/getopt_helpers.c:839
 #, c-format
 msgid "You must pass a number to the `%s' option.\n"
 msgstr "您必须向“%s”选项传递一个数字。\n"
 
-#: src/util/getopt_helpers.c:624
+#: src/util/getopt_helpers.c:629
 #, fuzzy, c-format
 msgid "You must pass relative time to the `%s' option.\n"
 msgstr "您必须向“%s”选项传递一个数字。\n"
 
-#: src/util/getopt_helpers.c:690
+#: src/util/getopt_helpers.c:695
 #, fuzzy, c-format
 msgid "You must pass absolute time to the `%s' option.\n"
 msgstr "您必须向“%s”选项传递一个数字。\n"
 
-#: src/util/getopt_helpers.c:754
+#: src/util/getopt_helpers.c:760
 #, c-format
 msgid "Your input for the '%s' option has to be a non negative number \n"
 msgstr ""
 
-#: src/util/getopt_helpers.c:837
+#: src/util/getopt_helpers.c:846
 #, fuzzy, c-format
 msgid "You must pass a number below %u to the `%s' option.\n"
 msgstr "您必须向“%s”选项传递一个数字。\n"
 
-#: src/util/getopt_helpers.c:923
+#: src/util/getopt_helpers.c:932
 #, c-format
 msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n"
 msgstr ""
 
-#: src/util/gnunet-config.c:157
+#: src/util/gnunet-config.c:160
 #, fuzzy, c-format
 msgid "failed to load configuration defaults"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/util/gnunet-config.c:170
+#: src/util/gnunet-config.c:173
 #, fuzzy, c-format
-msgid "--section argument is required\n"
+msgid "%s or %s argument is required\n"
 msgstr "设置要使用的昵称(必须)"
 
-#: src/util/gnunet-config.c:173
+#: src/util/gnunet-config.c:181
 #, c-format
 msgid "The following sections are available:\n"
 msgstr ""
 
-#: src/util/gnunet-config.c:224
+#: src/util/gnunet-config.c:232
 #, c-format
 msgid "--option argument required to set value\n"
 msgstr ""
 
-#: src/util/gnunet-config.c:263
+#: src/util/gnunet-config.c:286
 msgid "obtain option of value as a filename (with $-expansion)"
 msgstr ""
 
-#: src/util/gnunet-config.c:268
+#: src/util/gnunet-config.c:291
 msgid "name of the section to access"
 msgstr ""
 
-#: src/util/gnunet-config.c:273
+#: src/util/gnunet-config.c:296
 msgid "name of the option to access"
 msgstr ""
 
-#: src/util/gnunet-config.c:278
+#: src/util/gnunet-config.c:301
 msgid "value to set"
 msgstr ""
 
-#: src/util/gnunet-config.c:282
+#: src/util/gnunet-config.c:305
 #, fuzzy
 msgid "print available configuration sections"
 msgstr "立即保存配置?"
 
-#: src/util/gnunet-config.c:286
+#: src/util/gnunet-config.c:309
 msgid "write configuration file that only contains delta to defaults"
 msgstr ""
 
-#: src/util/gnunet-config.c:299
+#: src/util/gnunet-config.c:322
 #, fuzzy
 msgid "Manipulate GNUnet configuration files"
 msgstr "更改配置文件中的一个值"
 
-#: src/util/gnunet-ecc.c:92
+#: src/util/gnunet-ecc.c:94
 #, fuzzy, c-format
 msgid "Failed to open `%s': %s\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/util/gnunet-ecc.c:128
+#: src/util/gnunet-ecc.c:130
 #, c-format
 msgid "Generating %u keys like %s, please wait"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:141
+#: src/util/gnunet-ecc.c:143
 #, c-format
 msgid "Generating %u keys, please wait"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:182
+#: src/util/gnunet-ecc.c:184
 #, fuzzy, c-format
 msgid ""
 "\n"
 "Failed to write to `%s': %s\n"
 msgstr "运行 %s失败:%s %d\n"
 
-#: src/util/gnunet-ecc.c:192
+#: src/util/gnunet-ecc.c:194
 #, c-format
 msgid ""
 "\n"
 "Finished!\n"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:195
+#: src/util/gnunet-ecc.c:197
 #, c-format
 msgid ""
 "\n"
 "Error, %u keys not generated\n"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:288
+#: src/util/gnunet-ecc.c:290
 #, c-format
 msgid "Hostkeys file `%s' not found\n"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:303
+#: src/util/gnunet-ecc.c:305
 #, fuzzy, c-format
 msgid "Hostkeys file `%s' is empty\n"
 msgstr "找不到接口“%s”的一个 IP 地址。\n"
 
-#: src/util/gnunet-ecc.c:332
+#: src/util/gnunet-ecc.c:334
 #, fuzzy, c-format
 msgid "Could not read hostkey file: %s\n"
 msgstr "找不到接口“%s”的一个 IP 地址。\n"
 
-#: src/util/gnunet-ecc.c:389
+#: src/util/gnunet-ecc.c:391
 msgid "No hostkey file specified on command line\n"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:454
+#: src/util/gnunet-ecc.c:456
 msgid "list keys included in a file (for testing)"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:459
+#: src/util/gnunet-ecc.c:461
 msgid "number of keys to list included in a file (for testing)"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:464
+#: src/util/gnunet-ecc.c:466
 msgid "create COUNT public-private key pairs (for testing)"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:468
+#: src/util/gnunet-ecc.c:470
 msgid "print the public key in ASCII format"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:472
+#: src/util/gnunet-ecc.c:474
 msgid "print the private key in ASCII format"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:476
+#: src/util/gnunet-ecc.c:478
 msgid "print the public key in HEX format"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:480
+#: src/util/gnunet-ecc.c:482
 msgid "print examples of ECC operations (used for compatibility testing)"
 msgstr ""
 
-#: src/util/gnunet-ecc.c:496
+#: src/util/gnunet-ecc.c:498
 #, fuzzy
 msgid "Manipulate GNUnet private ECC key files"
 msgstr "更改配置文件中的一个值"
 
-#: src/util/gnunet-resolver.c:166
+#: src/util/gnunet-resolver.c:168
 msgid "perform a reverse lookup"
 msgstr ""
 
-#: src/util/gnunet-resolver.c:177
+#: src/util/gnunet-resolver.c:179
 msgid "Use build-in GNUnet stub resolver"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:240
+#: src/util/gnunet-scrypt.c:242
 #, c-format
 msgid "Loading hostkey from `%s' failed.\n"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:315
+#: src/util/gnunet-scrypt.c:317
 msgid "number of bits to require for the proof of work"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:320
+#: src/util/gnunet-scrypt.c:322
 msgid "file with private key, otherwise default is used"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:325
+#: src/util/gnunet-scrypt.c:327
 msgid "file with proof of work, otherwise default is used"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:330
+#: src/util/gnunet-scrypt.c:332
 msgid "time to wait between calculations"
 msgstr ""
 
-#: src/util/gnunet-scrypt.c:343
+#: src/util/gnunet-scrypt.c:345
 #, fuzzy
 msgid "Manipulate GNUnet proof of work files"
 msgstr "更改配置文件中的一个值"
@@ -8677,481 +8495,607 @@ msgstr "更改配置文件中的一个值"
 msgid "No DNS server available. DNS resolution will not be possible.\n"
 msgstr ""
 
-#: src/util/gnunet-uri.c:83
+#: src/util/gnunet-uri.c:85
 #, c-format
 msgid "No URI specified on command line\n"
 msgstr ""
 
-#: src/util/gnunet-uri.c:89
+#: src/util/gnunet-uri.c:91
 #, fuzzy, c-format
 msgid "Invalid URI: does not start with `%s'\n"
 msgstr "无效的网络表示法(没有以“;”结尾:“%s”)\n"
 
-#: src/util/gnunet-uri.c:96
+#: src/util/gnunet-uri.c:98
 #, c-format
 msgid "Invalid URI: fails to specify subsystem\n"
 msgstr ""
 
-#: src/util/gnunet-uri.c:106
+#: src/util/gnunet-uri.c:108
 #, c-format
 msgid "No handler known for subsystem `%s'\n"
 msgstr ""
 
-#: src/util/gnunet-uri.c:168
+#: src/util/gnunet-uri.c:170
 msgid "Perform default-actions for GNUnet URIs"
 msgstr ""
 
-#: src/util/helper.c:333
+#: src/util/helper.c:335
 #, fuzzy, c-format
 msgid "Error reading from `%s': %s\n"
 msgstr "创建用户出错"
 
-#: src/util/helper.c:384
+#: src/util/helper.c:386
 #, fuzzy, c-format
 msgid "Failed to parse inbound message from helper `%s'\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/util/helper.c:604
+#: src/util/helper.c:606
 #, fuzzy, c-format
 msgid "Error writing to `%s': %s\n"
 msgstr "创建用户出错"
 
-#: src/util/network.c:134
+#: src/util/network.c:136
 #, c-format
 msgid "Unable to shorten unix path `%s' while keeping name unique\n"
 msgstr ""
 
-#: src/util/network.c:1793 src/util/network.c:1977
+#: src/util/network.c:1794 src/util/network.c:1978
 #, c-format
 msgid ""
 "Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n"
 msgstr ""
 
-#: src/util/os_installation.c:507
+#: src/util/os_installation.c:509
 #, fuzzy, c-format
 msgid ""
 "Could not determine installation path for %s.  Set `%s' environment "
 "variable.\n"
 msgstr "无法确定安装路径。请尝试设置“%s”\n"
 
-#: src/util/os_installation.c:879
+#: src/util/os_installation.c:881
 #, fuzzy, c-format
 msgid "Could not find binary `%s' in PATH!\n"
 msgstr "找不到主机“%s”的 IP:%s\n"
 
-#: src/util/os_installation.c:920
+#: src/util/os_installation.c:922
 #, c-format
 msgid "Binary `%s' exists, but is not SUID\n"
 msgstr ""
 
-#: src/util/os_installation.c:951
+#: src/util/os_installation.c:953
 #, fuzzy, c-format
 msgid "CreateProcess failed for binary %s (%d).\n"
 msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n"
 
-#: src/util/os_installation.c:961
+#: src/util/os_installation.c:963
 #, c-format
 msgid "GetExitCodeProcess failed for binary %s (%d).\n"
 msgstr ""
 
-#: src/util/plugin.c:84
+#: src/util/plugin.c:86
 #, c-format
 msgid "Initialization of plugin mechanism failed: %s!\n"
 msgstr "插件机构初始化失败:%s!\n"
 
-#: src/util/plugin.c:149
+#: src/util/plugin.c:151
 #, c-format
 msgid "`%s' failed to resolve method '%s' with error: %s\n"
 msgstr ""
 
-#: src/util/plugin.c:224
+#: src/util/plugin.c:226
 #, c-format
 msgid "`%s' failed for library `%s' with error: %s\n"
 msgstr ""
 
-#: src/util/plugin.c:383
+#: src/util/plugin.c:385
 #, fuzzy
 msgid "Could not determine plugin installation path.\n"
 msgstr "无法确定用户界面定义文件。"
 
-#: src/util/regex.c:132
+#: src/util/program.c:283
+#, fuzzy, c-format
+msgid "Unreadable or malformed configuration file `%s', exit ...\n"
+msgstr "解析配置文件“%s”失败\n"
+
+#: src/util/program.c:301
+#, fuzzy, c-format
+msgid "Unreadable or malformed default configuration file `%s', exit ...\n"
+msgstr "解析配置文件“%s”失败\n"
+
+#: src/util/program.c:318
+#, fuzzy
+msgid "Unreadable or malformed configuration, exit ...\n"
+msgstr "解析配置文件“%s”失败\n"
+
+#: src/util/regex.c:134
 #, c-format
 msgid "Bad mask: %d\n"
 msgstr ""
 
-#: src/util/resolver_api.c:216
+#: src/util/resolver_api.c:218
 #, c-format
 msgid ""
 "Missing `%s' for `%s' in configuration, DNS resolution will be unavailable.\n"
 msgstr ""
 
-#: src/util/resolver_api.c:237
+#: src/util/resolver_api.c:239
 #, c-format
 msgid ""
 "Missing `%s' or numeric IP address for `%s' of `%s' in configuration, DNS "
 "resolution will be unavailable.\n"
 msgstr ""
 
-#: src/util/resolver_api.c:873
+#: src/util/resolver_api.c:875
 #, c-format
 msgid "Timeout trying to resolve hostname `%s'.\n"
 msgstr ""
 
-#: src/util/resolver_api.c:886
+#: src/util/resolver_api.c:888
 #, fuzzy, c-format
 msgid "Timeout trying to resolve IP address `%s'.\n"
 msgstr "GNUnet 现在使用 IP 地址 %s。\n"
 
-#: src/util/resolver_api.c:1071
+#: src/util/resolver_api.c:1073
 msgid "Resolver not configured correctly.\n"
 msgstr ""
 
-#: src/util/resolver_api.c:1158 src/util/resolver_api.c:1181
-#: src/util/resolver_api.c:1195
+#: src/util/resolver_api.c:1160 src/util/resolver_api.c:1183
+#: src/util/resolver_api.c:1197
 #, fuzzy, c-format
 msgid "Could not resolve our FQDN: %s\n"
 msgstr "无法解析“%s”(%s):%s\n"
 
-#: src/util/service.c:1303
-msgid ""
-"Could not bind to any of the ports I was supposed to, refusing to run!\n"
-msgstr ""
-
-#: src/util/service.c:2123
+#: src/util/service.c:674
 #, c-format
 msgid ""
 "Processing code for message of type %u did not call "
 "`GNUNET_SERVICE_client_continue' after %s\n"
 msgstr ""
 
-#: src/util/signal.c:87
+#: src/util/service.c:1862
+msgid ""
+"Could not bind to any of the ports I was supposed to, refusing to run!\n"
+msgstr ""
+
+#: src/util/signal.c:89
 #, c-format
 msgid "signal (%d, %p) returned %d.\n"
 msgstr ""
 
-#: src/util/socks.c:595
+#: src/util/socks.c:597
 #, c-format
 msgid "Attempting to use invalid port %d as SOCKS proxy for service `%s'.\n"
 msgstr ""
 
-#: src/util/socks.c:614
+#: src/util/socks.c:616
 #, c-format
 msgid "Attempting to proxy service `%s' to invalid port %d or hostname.\n"
 msgstr ""
 
-#: src/util/strings.c:174
+#: src/util/strings.c:176
 msgid "b"
 msgstr "b"
 
-#: src/util/strings.c:471
+#: src/util/strings.c:475
 #, c-format
 msgid "Character sets requested were `%s'->`%s'\n"
 msgstr ""
 
-#: src/util/strings.c:598
+#: src/util/strings.c:602
 msgid "Failed to expand `$HOME': environment variable `HOME' not set"
 msgstr "扩展“$HOME”失败:没有设置环境变量“HOME”"
 
-#: src/util/strings.c:702
+#: src/util/strings.c:706
 msgid "µs"
 msgstr ""
 
-#: src/util/strings.c:706
+#: src/util/strings.c:710
 msgid "forever"
 msgstr ""
 
-#: src/util/strings.c:708
+#: src/util/strings.c:712
 msgid "0 ms"
 msgstr ""
 
-#: src/util/strings.c:714
+#: src/util/strings.c:718
 msgid "ms"
 msgstr "毫秒"
 
-#: src/util/strings.c:720
+#: src/util/strings.c:724
 msgid "s"
 msgstr "秒"
 
-#: src/util/strings.c:726
+#: src/util/strings.c:730
 msgid "m"
 msgstr "分"
 
-#: src/util/strings.c:732
+#: src/util/strings.c:736
 msgid "h"
 msgstr "时"
 
-#: src/util/strings.c:739
+#: src/util/strings.c:743
 #, fuzzy
 msgid "day"
 msgstr " 天"
 
-#: src/util/strings.c:741
+#: src/util/strings.c:745
 #, fuzzy
 msgid "days"
 msgstr " 天"
 
-#: src/util/strings.c:770
+#: src/util/strings.c:774
 msgid "end of time"
 msgstr ""
 
-#: src/util/strings.c:1272
+#: src/util/strings.c:1277
 msgid "IPv6 address did not start with `['\n"
 msgstr ""
 
-#: src/util/strings.c:1280
+#: src/util/strings.c:1285
 msgid "IPv6 address did contain ':' to separate port number\n"
 msgstr ""
 
-#: src/util/strings.c:1286
+#: src/util/strings.c:1291
 msgid "IPv6 address did contain ']' before ':' to separate port number\n"
 msgstr ""
 
-#: src/util/strings.c:1293
+#: src/util/strings.c:1301
 msgid "IPv6 address did contain a valid port number after the last ':'\n"
 msgstr ""
 
-#: src/util/strings.c:1302
+#: src/util/strings.c:1310
 #, fuzzy, c-format
 msgid "Invalid IPv6 address `%s': %s\n"
 msgstr "无效的进程优先级“%s”\n"
 
-#: src/util/strings.c:1574 src/util/strings.c:1590
+#: src/util/strings.c:1586 src/util/strings.c:1602
 msgid "Port not in range\n"
 msgstr ""
 
-#: src/util/strings.c:1599
+#: src/util/strings.c:1611
 #, fuzzy, c-format
 msgid "Malformed port policy `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/util/strings.c:1682 src/util/strings.c:1713 src/util/strings.c:1761
-#: src/util/strings.c:1782
+#: src/util/strings.c:1696 src/util/strings.c:1728 src/util/strings.c:1777
+#: src/util/strings.c:1798
 #, c-format
 msgid "Invalid format for IP: `%s'\n"
 msgstr "IP 格式无效:“%s”\n"
 
-#: src/util/strings.c:1739
+#: src/util/strings.c:1754
 #, c-format
 msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)."
 msgstr "网络表示法无效(“/%d” 在 IPv4 CIDR 中是非法的)。"
 
-#: src/util/strings.c:1791
+#: src/util/strings.c:1807
 #, fuzzy, c-format
 msgid "Invalid format: `%s'\n"
 msgstr "IP 格式无效:“%s”\n"
 
-#: src/util/strings.c:1843
+#: src/util/strings.c:1860
 #, c-format
 msgid "Invalid network notation (does not end with ';': `%s')\n"
 msgstr "无效的网络表示法(没有以“;”结尾:“%s”)\n"
 
-#: src/util/strings.c:1893
+#: src/util/strings.c:1914
 #, c-format
 msgid "Wrong format `%s' for netmask\n"
 msgstr "网络掩码的格式“%s”错误\n"
 
-#: src/util/strings.c:1924
+#: src/util/strings.c:1945
 #, c-format
 msgid "Wrong format `%s' for network\n"
 msgstr "网络的格式“%s”错误\n"
 
-#: src/vpn/gnunet-service-vpn.c:538 src/vpn/gnunet-service-vpn.c:1805
+#: src/util/time.c:828 src/util/time.c:860
+#, c-format
+msgid "Failed to map `%s', cannot assure monotonic time!\n"
+msgstr ""
+
+#: src/util/time.c:866
+#, c-format
+msgid ""
+"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
+msgstr ""
+
+#: src/vpn/gnunet-service-vpn.c:540 src/vpn/gnunet-service-vpn.c:1807
 msgid "# Active channels"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:597
+#: src/vpn/gnunet-service-vpn.c:599
 msgid "# Messages dropped in cadet queue (overflow)"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:751
+#: src/vpn/gnunet-service-vpn.c:753
 msgid "# ICMP packets received from cadet"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:1094
+#: src/vpn/gnunet-service-vpn.c:1096
 msgid "# UDP packets received from cadet"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:1253
+#: src/vpn/gnunet-service-vpn.c:1255
 msgid "# TCP packets received from cadet"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:1465
+#: src/vpn/gnunet-service-vpn.c:1467
 #, fuzzy
 msgid "# Cadet channels created"
 msgstr ""
 "\n"
 "按任意键继续\n"
 
-#: src/vpn/gnunet-service-vpn.c:1685
+#: src/vpn/gnunet-service-vpn.c:1687
 #, c-format
 msgid "Protocol %u not supported, dropping\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:1824
+#: src/vpn/gnunet-service-vpn.c:1826
 msgid "# Packets dropped (channel not yet online)"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2004
+#: src/vpn/gnunet-service-vpn.c:2006
 msgid "# ICMPv4 packets dropped (not allowed)"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2025
+#: src/vpn/gnunet-service-vpn.c:2027
 msgid "# ICMPv6 packets dropped (not allowed)"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2233
+#: src/vpn/gnunet-service-vpn.c:2235
 msgid "# Packets received from TUN interface"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2266 src/vpn/gnunet-service-vpn.c:2302
+#: src/vpn/gnunet-service-vpn.c:2268 src/vpn/gnunet-service-vpn.c:2304
 #, c-format
 msgid "Packet received for unmapped destination `%s' (dropping it)\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2312
+#: src/vpn/gnunet-service-vpn.c:2314
 msgid "Received IPv4 packet with options (dropping it)\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2326
+#: src/vpn/gnunet-service-vpn.c:2328
 #, c-format
 msgid "Received packet of unknown protocol %d from TUN (dropping it)\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2365
+#: src/vpn/gnunet-service-vpn.c:2367
 msgid "Failed to find unallocated IPv4 address in VPN's range\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2420
+#: src/vpn/gnunet-service-vpn.c:2422
 msgid "Failed to find unallocated IPv6 address in VPN's range\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2462 src/vpn/gnunet-service-vpn.c:2684
+#: src/vpn/gnunet-service-vpn.c:2464 src/vpn/gnunet-service-vpn.c:2686
 msgid "# Active destinations"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2733
+#: src/vpn/gnunet-service-vpn.c:2735
 msgid "Failed to allocate IP address for new destination\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:2996
+#: src/vpn/gnunet-service-vpn.c:2998
 #, fuzzy
 msgid "Must specify valid IPv6 address"
 msgstr "“%s”不可用。\n"
 
-#: src/vpn/gnunet-service-vpn.c:3020
+#: src/vpn/gnunet-service-vpn.c:3022
 msgid "Must specify valid IPv6 mask"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:3028
+#: src/vpn/gnunet-service-vpn.c:3030
 msgid "IPv6 support disabled as this system does not support IPv6\n"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:3041
+#: src/vpn/gnunet-service-vpn.c:3043
 #, fuzzy
 msgid "Must specify valid IPv4 address"
 msgstr "“%s”不可用。\n"
 
-#: src/vpn/gnunet-service-vpn.c:3054
+#: src/vpn/gnunet-service-vpn.c:3056
 msgid "Must specify valid IPv4 mask"
 msgstr ""
 
-#: src/vpn/gnunet-service-vpn.c:3064
+#: src/vpn/gnunet-service-vpn.c:3066
 msgid "IPv4 support disabled as this system does not support IPv4\n"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:145
+#: src/vpn/gnunet-vpn.c:147
 #, fuzzy
 msgid "Error creating tunnel\n"
 msgstr "创建用户出错"
 
-#: src/vpn/gnunet-vpn.c:189 src/vpn/gnunet-vpn.c:220
+#: src/vpn/gnunet-vpn.c:191 src/vpn/gnunet-vpn.c:222
 #, c-format
 msgid "Option `%s' makes no sense with option `%s'.\n"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:202
+#: src/vpn/gnunet-vpn.c:204
 #, fuzzy, c-format
 msgid "Option `%s' or `%s' is required.\n"
 msgstr "%s:选项“%s”有歧义\n"
 
-#: src/vpn/gnunet-vpn.c:214
+#: src/vpn/gnunet-vpn.c:216
 #, c-format
 msgid "Option `%s' or `%s' is required when using option `%s'.\n"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:234
+#: src/vpn/gnunet-vpn.c:236
 #, fuzzy, c-format
 msgid "`%s' is not a valid peer identifier.\n"
 msgstr "“%s”不可用。\n"
 
-#: src/vpn/gnunet-vpn.c:254
+#: src/vpn/gnunet-vpn.c:256
 #, fuzzy, c-format
 msgid "`%s' is not a valid IP address.\n"
 msgstr "“%s”不可用。\n"
 
-#: src/vpn/gnunet-vpn.c:290
+#: src/vpn/gnunet-vpn.c:292
 msgid "request that result should be an IPv4 address"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:295
+#: src/vpn/gnunet-vpn.c:297
 msgid "request that result should be an IPv6 address"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:301
+#: src/vpn/gnunet-vpn.c:303
 msgid "how long should the mapping be valid for new tunnels?"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:307
+#: src/vpn/gnunet-vpn.c:309
 msgid "destination IP for the tunnel"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:313
+#: src/vpn/gnunet-vpn.c:315
 msgid "peer offering the service we would like to access"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:319
+#: src/vpn/gnunet-vpn.c:321
 msgid "name of the service we would like to access"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:324
+#: src/vpn/gnunet-vpn.c:326
 msgid "service is offered via TCP"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:329
+#: src/vpn/gnunet-vpn.c:331
 msgid "service is offered via UDP"
 msgstr ""
 
-#: src/vpn/gnunet-vpn.c:342
+#: src/vpn/gnunet-vpn.c:344
 msgid "Setup tunnels via VPN."
 msgstr ""
 
-#: src/zonemaster/gnunet-service-zonemaster.c:836
-#: src/zonemaster/gnunet-service-zonemaster-monitor.c:414
+#: src/zonemaster/gnunet-service-zonemaster.c:838
+#: src/zonemaster/gnunet-service-zonemaster-monitor.c:416
 #, fuzzy
 msgid "Failed to connect to the namestore!\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/include/gnunet_common.h:770 src/include/gnunet_common.h:777
-#: src/include/gnunet_common.h:787
+#: src/include/gnunet_common.h:772 src/include/gnunet_common.h:779
+#: src/include/gnunet_common.h:789
 #, fuzzy, c-format
 msgid "Assertion failed at %s:%d. Aborting.\n"
 msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n"
 
-#: src/include/gnunet_common.h:795
+#: src/include/gnunet_common.h:797
 #, c-format
 msgid "Assertion failed at %s:%d.\n"
 msgstr ""
 
-#: src/include/gnunet_common.h:807
+#: src/include/gnunet_common.h:809
 #, c-format
 msgid "External protocol violation detected at %s:%d.\n"
 msgstr ""
 
-#: src/include/gnunet_common.h:834 src/include/gnunet_common.h:843
+#: src/include/gnunet_common.h:836 src/include/gnunet_common.h:845
 #, c-format
 msgid "`%s' failed on file `%s' at %s:%d with error: %s\n"
 msgstr ""
 
+#, fuzzy
+#~ msgid "Invalid tunnel owner `%s'\n"
+#~ msgstr "IP 格式无效:“%s”\n"
+
+#, fuzzy
+#~ msgid "Provide information about a particular tunnel"
+#~ msgstr "无法获取有关用户“%s”的信息:%s\n"
+
+#, fuzzy
+#~ msgid "Failed to store membership information!\n"
+#~ msgstr "打开日志文件“%s”失败:%s\n"
+
+#, fuzzy
+#~ msgid "Failed to test membership!\n"
+#~ msgstr "发送消息失败。\n"
+
+#, fuzzy
+#~ msgid "Dropping invalid fragment\n"
+#~ msgstr "“%s”的参数无效。\n"
+
+#, fuzzy
+#~ msgid "Failed to store fragment\n"
+#~ msgstr "运行 %s失败:%s %d\n"
+
+#, fuzzy
+#~ msgid "Failed to get fragment!\n"
+#~ msgstr "发送消息失败。\n"
+
+#, fuzzy
+#~ msgid "Failed to get message!\n"
+#~ msgstr "发送消息失败。\n"
+
+#, fuzzy
+#~ msgid "Failed to get message fragment!\n"
+#~ msgstr "打开日志文件“%s”失败:%s\n"
+
+#, fuzzy
+#~ msgid "Failed to get master counters!\n"
+#~ msgstr "发送消息失败。\n"
+
+#, fuzzy
+#~ msgid "Failed to begin modifying state: %d\n"
+#~ msgstr "运行 %s失败:%s %d\n"
+
+#, fuzzy
+#~ msgid "Failed to modify state: %d\n"
+#~ msgstr "运行 %s失败:%s %d\n"
+
+#, fuzzy
+#~ msgid "Failed to end modifying state!\n"
+#~ msgstr "运行 %s失败:%s %d\n"
+
+#, fuzzy
+#~ msgid "Failed to begin synchronizing state!\n"
+#~ msgstr "发送消息失败。\n"
+
+#, fuzzy
+#~ msgid "Failed to end synchronizing state!\n"
+#~ msgstr "发送消息失败。\n"
+
+#, fuzzy
+#~ msgid "Failed to reset state!\n"
+#~ msgstr "发送消息失败。\n"
+
+#, fuzzy
+#~ msgid "Failed to get state variable!\n"
+#~ msgstr "发送消息失败。\n"
+
+#, fuzzy
+#~ msgid "Unable to initialize Mysql.\n"
+#~ msgstr "无法初始化 SQLite:%s。\n"
+
+#, fuzzy
+#~ msgid "Failed to run SQL statement `%s'\n"
+#~ msgstr "解析配置文件“%s”失败\n"
+
+#, fuzzy
+#~ msgid "`%s' failed at %s:%d with error: %s (%d)\n"
+#~ msgstr "“%s”于 %s:%d 处失败,错误为:%s\n"
+
+#, fuzzy
+#~ msgid "SQLite database running\n"
+#~ msgstr "sqlite 数据仓库"
+
+#, fuzzy
+#~ msgid "--place missing or invalid.\n"
+#~ msgstr "“%s”的参数无效。\n"
+
+#, fuzzy
+#~ msgid "name or public key of ego"
+#~ msgstr "“%s”的参数无效。\n"
+
+#, fuzzy
+#~ msgid "wait for incoming messages"
+#~ msgstr "发送消息失败。\n"
+
+#, fuzzy
+#~ msgid "number of messages to replay from history"
+#~ msgstr "每次迭代所使用的消息数量"
+
 #~ msgid "Could not resolve `%s' (%s): %s\n"
 #~ msgstr "无法解析“%s”(%s):%s\n"
 
index 5fd65141bc63ca10cb50188c59b89b9c4406c0a1..03738e4edcc74d6fa1054ad334e961ed9fed91ec 100644 (file)
@@ -11,13 +11,7 @@ endif
 
 if HAVE_EXPERIMENTAL
  EXP_DIR = \
-  rps \
-  multicast \
-  psycutil \
-  psycstore \
-  psyc \
-  social
-#  dv (FTBFS)
+  rps
 if HAVE_ABE
 if HAVE_JSON
  EXP_DIR += \
index 64ae35786eadbc50fc3578e6054ab10087debdcb..dc32f5498521916cec64f4811c6a7dc5dd657d3d 100644 (file)
@@ -16,7 +16,7 @@ UNIX_MATCH_GID = YES
 # logging with a new log file each day.  Note that only the last 3
 # log files are preserved.
 # GLOBAL_POSTFIX = -l $GNUNET_CACHE_HOME/{}-%Y-%m-%d.log
-GLOBAL_PREFIX = @MONKEYPREFIX@
+GLOBAL_PREFIX = 
 
 # If set to YES, ARM will only start services that are marked as
 # system-level services (and we'll expect a second ARM to be
index c85645b9d7a472877b6720adc2d410de808b0125..83f9e1b6ab2aadb6cbeb9385df36029c934a51b6 100644 (file)
@@ -60,6 +60,7 @@ libgnunetatstesting_la_SOURCES = \
 libgnunetatstesting_la_LIBADD = \
   $(top_builddir)/src/testbed/libgnunettestbed.la \
   $(top_builddir)/src/core/libgnunetcore.la \
+       $(top_builddir)/src/transport/libgnunettransport.la \
   $(top_builddir)/src/ats/libgnunetats.la \
   $(top_builddir)/src/util/libgnunetutil.la \
   $(GN_LIBINTL)
index 2a62d71bd2fe5881d1866dd84e80dff9c40afc47..ac8a411ebcacdbd6908bfb273a5528a9edafde86 100644 (file)
@@ -97,6 +97,7 @@ libgnunet_plugin_ats_mlp_la_SOURCES = \
 libgnunet_plugin_ats_mlp_la_LIBADD = \
   libgnunetats.la \
   $(top_builddir)/src/statistics/libgnunetstatistics.la \
+       $(top_builddir)/src/nt/libgnunetnt.la \
   $(top_builddir)/src/util/libgnunetutil.la
 libgnunet_plugin_ats_mlp_la_LDFLAGS = \
   $(GN_PLUGIN_LDFLAGS) \
@@ -107,6 +108,7 @@ libgnunet_plugin_ats_ril_la_SOURCES = \
 libgnunet_plugin_ats_ril_la_LIBADD = \
   libgnunetats.la \
   $(top_builddir)/src/statistics/libgnunetstatistics.la \
+       $(top_builddir)/src/nt/libgnunetnt.la \
   $(top_builddir)/src/util/libgnunetutil.la \
   $(LTLIBINTL)
 libgnunet_plugin_ats_ril_la_LDFLAGS = \
@@ -214,6 +216,8 @@ EXTRA_DIST = \
   ats.h ats2.h \
   plugin_ats2_common.c \
   test_delay \
+  test_ats2_lib.conf \
+  test_ats_api.conf \
   test_ats_api_mlp.conf \
   test_ats_api_ril.conf \
   test_ats_api_proportional.conf
index 51296ae50c54d91bee1b5336dc68f0171b573744..f6cc860cc56a4f792b897dc55fc81c434d19c8e2 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -323,9 +323,9 @@ struct GNUNET_CADET_LocalInfoPath
   struct GNUNET_MessageHeader header;
 
   /**
-   * Zero.
+   * Offset of the peer that was requested.
    */
-  uint32_t reserved GNUNET_PACKED;
+  uint32_t off GNUNET_PACKED;
 };
 
 
@@ -338,7 +338,7 @@ struct GNUNET_CADET_LocalInfoPeers
    * Type: #GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_PEERS
    */
   struct GNUNET_MessageHeader header;
-  
+
   /**
    * Number of paths.
    */
@@ -348,7 +348,7 @@ struct GNUNET_CADET_LocalInfoPeers
    * Do we have a tunnel toward this peer?
    */
   int16_t tunnel GNUNET_PACKED;
-  
+
   /**
    * Shortest known path.
    */
index 2f35e365e71045d52c39812d39521b49fcfff683..fcc79c3d50074b6660052bcb468449f93e35ee59 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -66,7 +66,7 @@ struct GNUNET_CADET_GetPath
    * Backoff for reconnect attempts.
    */
   struct GNUNET_TIME_Relative backoff;
-  
+
   /**
    * Peer we want information about.
    */
@@ -109,7 +109,7 @@ check_get_path (void *cls,
 /**
  * Process a local peer info reply, pass info to the user.
  *
- * @param cls Closure 
+ * @param cls Closure
  * @param message Message itself.
  */
 static void
@@ -118,9 +118,10 @@ handle_get_path (void *cls,
 {
   struct GNUNET_CADET_GetPath *gp = cls;
   struct GNUNET_CADET_PeerPathDetail ppd;
-  
+
   ppd.peer = gp->id;
   ppd.path = (const struct GNUNET_PeerIdentity *) &message[1];
+  ppd.target_offset = ntohl (message->off);
   ppd.path_length = (ntohs (message->header.size) - sizeof (*message))
     / sizeof (struct GNUNET_PeerIdentity);
   gp->path_cb (gp->path_cb_cls,
@@ -131,7 +132,7 @@ handle_get_path (void *cls,
 /**
  * Process a local peer info reply, pass info to the user.
  *
- * @param cls Closure 
+ * @param cls Closure
  * @param message Message itself.
  */
 static void
@@ -177,7 +178,7 @@ error_handler (void *cls,
                                                     gp);
 }
 
-  
+
 /**
  * Reconnect to the service and try again.
  *
index 7d83f496a436aade1986a9d0453a137d4e5396f0..db16e4015a1eeeb39102cce56a0a0411e6601536 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -279,7 +279,7 @@ cadet_test_run (void *cls,
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                 "Some links failed (%u), ending\n",
                 links_failed);
-    exit (2);
+    exit (77);
   }
   if  (num_peers != ctx->num_peers)
   {
index dba517a7b52b322b463f0c700fce010b64ed81e8..932d069a12ef759d9298f98b7f5053ff07a878a7 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -103,7 +103,7 @@ static struct GNUNET_CADET_GetPath *gpo;
 
 /**
  * Active peer listing operation.
- */ 
+ */
 static struct GNUNET_CADET_PeersLister *plo;
 
 /**
@@ -220,7 +220,7 @@ shutdown_task (void *cls)
   {
     GNUNET_CADET_channel_destroy (ch);
     ch = NULL;
-  } 
+  }
   if (NULL != gpo)
   {
     GNUNET_CADET_get_path_cancel (gpo);
@@ -306,12 +306,12 @@ read_stdio (void *cls)
   if (GNUNET_NO == echo)
   {
     // Use MQ's notification if too much data of stdin is pooring in too fast.
-    if (STREAM_BUFFER_SIZE < sent_pkt) 
+    if (STREAM_BUFFER_SIZE < sent_pkt)
     {
       GNUNET_MQ_notify_sent (env, mq_cb, cls);
       sent_pkt = 0;
     }
-    else 
+    else
     {
       listen_stdio ();
     }
@@ -563,7 +563,7 @@ path_callback (void *cls,
           ppd->path_length);
   for (unsigned int i = 0; i < ppd->path_length; i++)
     FPRINTF (stdout,
-            "%s ",
+            (i == ppd->target_offset) ? "*%s* " : "%s ",
             GNUNET_i2s (&ppd->path[i]));
   FPRINTF (stdout,
           "\n");
@@ -626,7 +626,7 @@ show_peer (void *cls)
       GNUNET_CRYPTO_eddsa_public_key_from_string (peer_id,
                                                   strlen (peer_id),
                                                   &pid.public_key))
-    {
+  {
     fprintf (stderr,
              _("Invalid peer ID `%s'\n"),
              peer_id);
@@ -859,7 +859,7 @@ main (int argc,
     GNUNET_GETOPT_option_flag ('e',
                               "echo",
                               gettext_noop ("Activate echo mode"),
-                              &echo), 
+                              &echo),
     GNUNET_GETOPT_option_string ('o',
                                  "open-port",
                                  "SHARED_SECRET",
index d64242943beda39a8d18a032bcb919a7265cf052..e29330f999cfd1d5bf03b33ee439b09d0ead4be8 100644 (file)
@@ -885,6 +885,13 @@ path_info_iterator (void *cls,
   path_length = GCPP_get_length (path);
   path_size = sizeof (struct GNUNET_PeerIdentity) * path_length;
   if (sizeof (*resp) + path_size > UINT16_MAX)
+  {
+    /* try just giving the relevant path */
+    path_length = GNUNET_MIN ((UINT16_MAX - sizeof (*resp)) / sizeof (struct GNUNET_PeerIdentity),
+                              off);
+    path_size = sizeof (struct GNUNET_PeerIdentity) * path_length;
+  }
+  if (sizeof (*resp) + path_size > UINT16_MAX)
   {
     LOG (GNUNET_ERROR_TYPE_WARNING,
          "Path of %u entries is too long for info message\n",
@@ -899,9 +906,10 @@ path_info_iterator (void *cls,
   /* Don't copy first peer.  First peer is always the local one.  Last
    * peer is always the destination (leave as 0, EOL).
    */
-  for (unsigned int i = 0; i <= off; i++)
+  for (unsigned int i = 0; i < path_length; i++)
     id[i] = *GCP_get_id (GCPP_get_peer_at_offset (path,
                                                   i));
+  resp->off = htonl (off);
   GNUNET_MQ_send (mq,
                   env);
   return GNUNET_YES;
index 38e29230acba4d96c9aef1da62256fb136e17aad..161015d00019cc53c29ac919416e30e9e112fb28 100644 (file)
 
 from __future__ import absolute_import
 from __future__ import print_function
+from __future__ import division
+from builtins import str
+from builtins import range
+from past.utils import old_div
 import argparse
 import random
 from math import ceil, log, floor
@@ -39,18 +43,18 @@ def bsc(n):
 
 def simulate(k, n, verbose):
     assert k < n
-    largest_arc = int(2**ceil(log(n, 2))) / 2
+    largest_arc = old_div(int(2**ceil(log(n, 2))), 2)
     num_ghosts = (2 * largest_arc) - n
     if verbose:
         print("we have", num_ghosts, "ghost peers")
         # n.b. all peers with idx<k are evil
-    peers = range(n)
+    peers = list(range(n))
     # py2-3 compatible, backwards.
     # refer to http://python-future.org/compatible_idioms.html#xrange
-    info = [1 << x for x in xrange(n)]
+    info = [1 << x for x in range(n)]
 
     def done_p():
-        for x in xrange(k, n):
+        for x in range(k, n):
             if bsc(info[x]) < n-k:
                 return False
         return True
@@ -63,7 +67,7 @@ def simulate(k, n, verbose):
             if verbose:
                 print("-- subround --")
             new_info = [x for x in info]
-            for peer_physical in xrange(n):
+            for peer_physical in range(n):
                 peer_logical = peers[peer_physical]
                 peer_type = None
                 partner_logical = (peer_logical + arc) % n
@@ -105,6 +109,6 @@ if __name__ == "__main__":
 
     args = parser.parse_args()
     sum = 0.0
-    for n in xrange(0, args.r):
+    for n in range(0, args.r):
         sum += simulate(args.k, args.n, args.verbose)
-    print(sum / args.r)
+    print(old_div(sum, args.r))
index fa42c3c1ab0484cecfa4b6903d465817e91681f4..4f17fa3598aaf25a3289a96f86e40e4538fa389c 100644 (file)
@@ -81,3 +81,7 @@ WAN_QUOTA_OUT = unlimited
 
 [core]
 USE_EPHEMERAL_KEYS = NO
+
+[rps]
+START_ON_DEMAND = NO
+IMMEDIATE_START = NO
index f33e62baefc82728e91e048ef92d7d75c399d544..4381171c5ee41b26f26a7852c0da9f9a35f5d693 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -132,7 +132,7 @@ FAILURE:
 int
 main (int argc, char *argv[])
 {
-  char cfg_name[128];
+  char cfg_name[PATH_MAX];
   char *const xargv[] = {
     "perf-datacache",
     "-c",
index e647ae8337e6e746bb73555869d9624427fb4ce2..d62a31c27be37f56b5f4408c1ce0eb0127aa99f4 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -155,7 +155,7 @@ FAILURE:
 int
 main (int argc, char *argv[])
 {
-  char cfg_name[128];
+  char cfg_name[PATH_MAX];
   char *const xargv[] = {
     "test-datacache",
     "-c",
index 117d8be4e43bbd3c3cfc881a6d2d4e0f872f25d5..7c4e56ea58077e231af242aae7e8c9e1dd004a9f 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -123,7 +123,7 @@ int
 main (int argc,
       char *argv[])
 {
-  char cfg_name[128];
+  char cfg_name[PATH_MAX];
   char *const xargv[] = {
     "test-datacache-quota",
     "-c",
index 939e60e4d444d3acd56f33d0be1771c4077086da..2c261b155ad8038181ee59300d9cc3f498500c12 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -595,7 +595,7 @@ int
 main (int argc,
       char *argv[])
 {
-  char cfg_name[128];
+  char cfg_name[PATH_MAX];
 
   plugin_name = GNUNET_TESTING_get_testname_from_underscore (argv[0]);
   GNUNET_snprintf (cfg_name,
index 9ba8fa1b02036a749cc369d1351f0554f80ab777..f68d1f38992df100fcfd228562ac0d903116eb73 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -519,8 +519,8 @@ run (void *cls, char *const *args, const char *cfgfile,
 int
 main (int argc, char *argv[])
 {
-  char dir_name[128];
-  char cfg_name[128];
+  char dir_name[PATH_MAX];
+  char cfg_name[PATH_MAX];
   char *const xargv[] = {
     "perf-plugin-datastore",
     "-c",
index 94db6e116e95cc47d4f65dd5a23bc4413019cf10..0a3018411926557c243618b3c52fbeab2fa3ab03 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -153,7 +153,11 @@ init_connection (struct Plugin *plugin)
                             "SELECT hash FROM gn090",
                             0),
     GNUNET_PQ_make_prepare ("estimate_size",
-                            "SELECT SUM(LENGTH(value))+256*COUNT(*) AS total FROM gn090",
+                            "SELECT CASE WHEN NOT EXISTS"
+                            "  (SELECT 1 FROM gn090)"
+                            "  THEN 0"
+                            "  ELSE (SELECT SUM(LENGTH(value))+256*COUNT(*) FROM gn090)"
+                            "END AS total",
                             0),
     GNUNET_PQ_PREPARED_STATEMENT_END
   };
index fa96ea9b7b73fb0346cf95c9add7a68c04fb7968..daf6cccb35afda9ab0b2bf512692d0b0a40c0f2b 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -635,7 +635,7 @@ duc_dummy (void *cls,
 
 
 /**
- * check if plugin is actually working 
+ * check if plugin is actually working
  */
 static int
 test_plugin (const char *cfg_name)
@@ -644,7 +644,7 @@ test_plugin (const char *cfg_name)
   struct GNUNET_CONFIGURATION_Handle *cfg;
   struct GNUNET_DATASTORE_PluginFunctions *api;
   struct GNUNET_DATASTORE_PluginEnvironment env;
-  
+
   cfg = GNUNET_CONFIGURATION_create ();
   if (GNUNET_OK !=
       GNUNET_CONFIGURATION_load (cfg,
@@ -691,9 +691,9 @@ int
 main (int argc,
       char *argv[])
 {
-  char cfg_name[128];
+  char cfg_name[PATH_MAX];
   int ret;
-    
+
   plugin_name = GNUNET_TESTING_get_testname_from_underscore (argv[0]);
   GNUNET_snprintf (cfg_name,
                    sizeof (cfg_name),
index d592ccc8058b7f36781150624aeeb687ea811221..d91fe748baeb5f81c810675ba069ac12248308cc 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -337,7 +337,7 @@ ignore_payload_cb (void *cls,
 static int
 test_plugin (const char *cfg_name)
 {
-  char libname[128];
+  char libname[PATH_MAX];
   struct GNUNET_CONFIGURATION_Handle *cfg;
   struct GNUNET_DATASTORE_PluginFunctions *api;
   struct GNUNET_DATASTORE_PluginEnvironment env;
@@ -378,7 +378,7 @@ test_plugin (const char *cfg_name)
 int
 main (int argc, char *argv[])
 {
-  char cfg_name[128];
+  char cfg_name[PATH_MAX];
   int ret;
 
   plugin_name = GNUNET_TESTING_get_testname_from_underscore (argv[0]);
index 4b054314c56e44fa0f22fb43c4df679fb8ff083e..c37b8ddb9f1959a5bc21876e27974ca0a37c8392 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -436,8 +436,8 @@ run (void *cls, char *const *args, const char *cfgfile,
 int
 main (int argc, char *argv[])
 {
-  char dir_name[128];
-  char cfg_name[128];
+  char dir_name[PATH_MAX];
+  char cfg_name[PATH_MAX];
   char *const xargv[] = {
     "test-plugin-datastore",
     "-c",
index 05582cbd06202ff866457e1b44f9748912dd977f..38a9f9622590c7fc528b62f91c97fca06ade6be6 100644 (file)
@@ -124,7 +124,7 @@ time.sleep(1)
 
 print("TEST: Testing get...", end='')
 rc, stdo, stde = r_get(['-k', 'testkey', '-T', '50 ms', '-t', '8'], want_stdo=True, failer=end_arm_failer)
-stdo = stdo.replace('\r', '').splitlines()
+stdo = stdo.decode('utf-8').replace('\r', '').splitlines()
 expect = "Result 0, type 8:\ntestdata".splitlines()
 if len(stdo) != 2 or len(expect) != 2 or stdo[0] != expect[0] or stdo[1] != expect[1]:
     fail("output `{}' differs from expected `{}'".format(stdo, expect))
diff --git a/src/dv/.gitignore b/src/dv/.gitignore
deleted file mode 100644 (file)
index b3068b1..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-gnunet-service-dv
-gnunet-dv
diff --git a/src/dv/Makefile.am b/src/dv/Makefile.am
deleted file mode 100644 (file)
index c443211..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-# This Makefile.am is in the public domain
-AM_CPPFLAGS = -I$(top_srcdir)/src/include
-
-if MINGW
- WINFLAGS = -Wl,--no-undefined -Wl,--export-all-symbols 
-endif
-
-if USE_COVERAGE
-  AM_CFLAGS = --coverage -O0
-  XLIB = -lgcov
-endif
-
-plugindir = $(libdir)/gnunet
-
-libexecdir= $(pkglibdir)/libexec/
-
-pkgcfgdir= $(pkgdatadir)/config.d/
-
-pkgcfg_DATA = \
-  dv.conf
-
-lib_LTLIBRARIES = libgnunetdv.la
-
-plugin_LTLIBRARIES = libgnunet_plugin_transport_dv.la
-
-libgnunetdv_la_SOURCES = \
-  dv_api.c dv.h 
-libgnunetdv_la_LIBADD = \
-  $(top_builddir)/src/util/libgnunetutil.la \
-  $(GN_LIBINTL) $(XLIB)
-libgnunetdv_la_LDFLAGS = \
-  $(GN_LIB_LDFLAGS)  $(WINFLAGS) \
-  -version-info 0:0:0
-
-
-noinst_PROGRAMS = \
- gnunet-dv
-
-libexec_PROGRAMS = \
- gnunet-service-dv
-
-gnunet_service_dv_SOURCES = \
- gnunet-service-dv.c dv.h
-gnunet_service_dv_LDADD = \
-  $(top_builddir)/src/ats/libgnunetats.la \
-  $(top_builddir)/src/set/libgnunetset.la \
-  $(top_builddir)/src/statistics/libgnunetstatistics.la \
-  $(top_builddir)/src/core/libgnunetcore.la \
-  $(top_builddir)/src/util/libgnunetutil.la \
-  $(GN_LIBINTL)
-
-gnunet_dv_SOURCES = \
- gnunet-dv.c dv.h
-gnunet_dv_LDADD = \
-  libgnunetdv.la \
-  $(top_builddir)/src/util/libgnunetutil.la \
-  $(GN_LIBINTL)
-
-libgnunet_plugin_transport_dv_la_SOURCES = \
-  plugin_transport_dv.c
-libgnunet_plugin_transport_dv_la_LIBADD = \
-  libgnunetdv.la \
-  $(top_builddir)/src/ats/libgnunetats.la \
-  $(top_builddir)/src/hello/libgnunethello.la \
-  $(top_builddir)/src/util/libgnunetutil.la 
-libgnunet_plugin_transport_dv_la_LDFLAGS = \
- $(GN_PLUGIN_LDFLAGS)
-
-if HAVE_TESTING
-check_PROGRAMS = \
- test_transport_blacklist \
- test_transport_dv
-endif
-
-if ENABLE_TEST_RUN
- AM_TESTS_ENVIRONMENT=export GNUNET_PREFIX=$${GNUNET_PREFIX:-@libdir@};export PATH=$${GNUNET_PREFIX:-@prefix@}/bin:$$PATH;unset XDG_DATA_HOME;unset XDG_CONFIG_HOME;
- TESTS = $(check_PROGRAMS) 
-endif
-
-test_transport_dv_SOURCES = \
- test_transport_dv.c
-test_transport_dv_LDADD = \
- $(top_builddir)/src/testbed/libgnunettestbed.la \
- $(top_builddir)/src/core/libgnunetcore.la \
- $(top_builddir)/src/transport/libgnunettransport.la \
- $(top_builddir)/src/util/libgnunetutil.la 
-
-test_transport_blacklist_SOURCES = \
- test_transport_blacklist.c
-test_transport_blacklist_LDADD = \
- $(top_builddir)/src/testbed/libgnunettestbed.la \
- $(top_builddir)/src/core/libgnunetcore.la \
- $(top_builddir)/src/transport/libgnunettransport.la \
- $(top_builddir)/src/util/libgnunetutil.la 
-
-EXTRA_DIST = \
-  test_transport_dv_data.conf \
-  test_transport_blacklist_data.conf \
-  template_dv.conf
-
diff --git a/src/dv/dv.conf.in b/src/dv/dv.conf.in
deleted file mode 100644 (file)
index 145c58b..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-[dv]
-START_ON_DEMAND = @START_ON_DEMAND@
-ACCEPT_FROM6 = ::1;
-ACCEPT_FROM = 127.0.0.1;
-BINARY = gnunet-service-dv
-HOSTNAME = localhost
-@UNIXONLY@ PORT = 2571
-UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-service-dv.sock
-UNIX_MATCH_UID = YES
-UNIX_MATCH_GID = YES
-# ACCEPT_FROM =
-# ACCEPT_FROM6 =
-# REJECT_FROM =
-# REJECT_FROM6 =
-# BINDTO =
diff --git a/src/dv/dv.h b/src/dv/dv.h
deleted file mode 100644 (file)
index b85d9c3..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
-     This file is part of GNUnet.
-     Copyright (C) 2013 GNUnet e.V.
-
-     GNUnet is free software: you can redistribute it and/or modify it
-     under the terms of the GNU Affero General Public License as published
-     by the Free Software Foundation, either version 3 of the License,
-     or (at your option) any later version.
-
-     GNUnet is distributed in the hope that it will be useful, but
-     WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     Affero General Public License for more details.
-    
-     You should have received a copy of the GNU Affero General Public License
-     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
-*/
-
-/**
- * @author Christian Grothoff
- * @file dv/dv.h
- * @brief IPC messages between DV service and DV plugin
- */
-#ifndef DV_H
-#define DV_H
-
-#include "gnunet_common.h"
-
-GNUNET_NETWORK_STRUCT_BEGIN
-
-/**
- * DV service tells plugin about a DV-connection being
- * now available.
- */
-struct GNUNET_DV_ConnectMessage
-{
-  /**
-   * Type: #GNUNET_MESSAGE_TYPE_DV_CONNECT
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * The distance to the peer that we are now connected to
-   */
-  uint32_t distance GNUNET_PACKED;
-
-  /**
-   * The other peer (at the given distance).
-   */
-  struct GNUNET_PeerIdentity peer;
-
-  /**
-   * The network the peer is in
-   */
-  uint32_t network GNUNET_PACKED;
-
-};
-
-
-/**
- * DV service tells plugin about a DV-connection being
- * no longer available.
- *
- * Sender address is copied to the end of this struct,
- * followed by the actual message received.
- */
-struct GNUNET_DV_DisconnectMessage
-{
-  /**
-   * Type: #GNUNET_MESSAGE_TYPE_DV_DISCONNECT
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * Always zero.
-   */
-  uint32_t reserved GNUNET_PACKED;
-
-  /**
-   * The peer that is no longer available.
-   */
-  struct GNUNET_PeerIdentity peer;
-
-};
-
-
-/**
- * DV Message, contains a message that was received via DV for this
- * peer.  Send from the DV service to the DV plugin.
- *
- * Sender address is copied to the end of this struct,
- * followed by the actual message received.
- */
-struct GNUNET_DV_ReceivedMessage
-{
-  /**
-   * Type: #GNUNET_MESSAGE_TYPE_DV_RECV
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * The distance to the peer that we received the message from
-   */
-  uint32_t distance GNUNET_PACKED;
-
-  /**
-   * The (actual) sender of the message
-   */
-  struct GNUNET_PeerIdentity sender;
-
-  /* payload follows */
-};
-
-
-/**
- * Message from plugin to DV service, requesting a
- * message to be routed.
- */
-struct GNUNET_DV_SendMessage
-{
-  /**
-   * Type: #GNUNET_MESSAGE_TYPE_DV_SEND
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * Reserved for alignment. 0.
-   */
-  uint32_t reserved GNUNET_PACKED;
-
-  /**
-   * The (actual) target of the message
-   */
-  struct GNUNET_PeerIdentity target;
-
-};
-
-
-/**
- * Message from service to DV plugin, saying that our
- * distance to another peer changed.
- */
-struct GNUNET_DV_DistanceUpdateMessage
-{
-  /**
-   * Type: #GNUNET_MESSAGE_TYPE_DV_DISTANCE_CHANGED.
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * What is the new distance?
-   */
-  uint32_t distance GNUNET_PACKED;
-
-  /**
-   * The peer for which the distance changed.
-   */
-  struct GNUNET_PeerIdentity peer;
-
-  /**
-   * The network the peer is in
-   */
-  uint32_t network GNUNET_PACKED;
-
-};
-
-
-GNUNET_NETWORK_STRUCT_END
-
-#endif
diff --git a/src/dv/dv_api.c b/src/dv/dv_api.c
deleted file mode 100644 (file)
index dd46ce9..0000000
+++ /dev/null
@@ -1,467 +0,0 @@
-/*
-     This file is part of GNUnet.
-     Copyright (C) 2009--2013, 2016 GNUnet e.V.
-
-     GNUnet is free software: you can redistribute it and/or modify it
-     under the terms of the GNU Affero General Public License as published
-     by the Free Software Foundation, either version 3 of the License,
-     or (at your option) any later version.
-
-     GNUnet is distributed in the hope that it will be useful, but
-     WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     Affero General Public License for more details.
-    
-     You should have received a copy of the GNU Affero General Public License
-     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
-*/
-
-/**
- * @file dv/dv_api.c
- * @brief library to access the DV service
- * @author Christian Grothoff
- * @author Nathan Evans
- */
-#include "platform.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_dv_service.h"
-#include "gnunet_protocols.h"
-#include "dv.h"
-#include "gnunet_transport_plugin.h"
-
-#define LOG(kind,...) GNUNET_log_from (kind, "dv-api",__VA_ARGS__)
-
-
-/**
- * Information we track for each peer.
- */
-struct ConnectedPeer
-{
-
-  /**
-   * Identity of the peer.
-   */
-  struct GNUNET_PeerIdentity pid;
-
-};
-
-
-/**
- * Handle to the DV service.
- */
-struct GNUNET_DV_ServiceHandle
-{
-
-  /**
-   * Connection to DV service.
-   */
-  struct GNUNET_MQ_Handle *mq;
-
-  /**
-   * Our configuration.
-   */
-  const struct GNUNET_CONFIGURATION_Handle *cfg;
-
-  /**
-   * Closure for the callbacks.
-   */
-  void *cls;
-
-  /**
-   * Function to call on connect events.
-   */
-  GNUNET_DV_ConnectCallback connect_cb;
-
-  /**
-   * Function to call on distance change events.
-   */
-  GNUNET_DV_DistanceChangedCallback distance_cb;
-
-  /**
-   * Function to call on disconnect events.
-   */
-  GNUNET_DV_DisconnectCallback disconnect_cb;
-
-  /**
-   * Function to call on receiving messages events.
-   */
-  GNUNET_DV_MessageReceivedCallback message_cb;
-
-  /**
-   * Information tracked per connected peer.  Maps peer
-   * identities to `struct ConnectedPeer` entries.
-   */
-  struct GNUNET_CONTAINER_MultiPeerMap *peers;
-
-};
-
-
-/**
- * Disconnect and then reconnect to the DV service.
- *
- * @param sh service handle
- */
-static void
-reconnect (struct GNUNET_DV_ServiceHandle *sh);
-
-
-/**
- * We got disconnected from the service and thus all of the
- * connections need to be torn down.
- *
- * @param cls the `struct GNUNET_DV_ServiceHandle`
- * @param key a peer identity
- * @param value a `struct ConnectedPeer` to clean up
- * @return #GNUNET_OK (continue to iterate)
- */
-static int
-cleanup_send_cb (void *cls,
-                const struct GNUNET_PeerIdentity *key,
-                void *value)
-{
-  struct GNUNET_DV_ServiceHandle *sh = cls;
-  struct ConnectedPeer *peer = value;
-
-  GNUNET_assert (GNUNET_YES ==
-                GNUNET_CONTAINER_multipeermap_remove (sh->peers,
-                                                      key,
-                                                      peer));
-  sh->disconnect_cb (sh->cls,
-                     key);
-  GNUNET_free (peer);
-  return GNUNET_OK;
-}
-
-
-/**
- * Handles a message sent from the DV service to us.
- * Parse it out and give it to the plugin.
- *
- * @param cls the handle to the DV API
- * @param cm the message that was received
- */
-static void
-handle_connect (void *cls,
-                const struct GNUNET_DV_ConnectMessage *cm)
-{
-  struct GNUNET_DV_ServiceHandle *sh = cls;
-  struct ConnectedPeer *peer;
-
-  peer = GNUNET_CONTAINER_multipeermap_get (sh->peers,
-                                            &cm->peer);
-  if (NULL != peer)
-  {
-    GNUNET_break (0);
-    reconnect (sh);
-    return;
-  }
-  peer = GNUNET_new (struct ConnectedPeer);
-  peer->pid = cm->peer;
-  GNUNET_assert (GNUNET_OK ==
-                 GNUNET_CONTAINER_multipeermap_put (sh->peers,
-                                                    &peer->pid,
-                                                    peer,
-                                                    GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
-  sh->connect_cb (sh->cls,
-                  &cm->peer,
-                  ntohl (cm->distance),
-                  (enum GNUNET_NetworkType) ntohl (cm->network));
-}
-
-
-/**
- * Handles a message sent from the DV service to us.
- * Parse it out and give it to the plugin.
- *
- * @param cls the handle to the DV API
- * @param dm the message that was received
- */
-static void
-handle_disconnect (void *cls,
-                   const struct GNUNET_DV_DisconnectMessage *dm)
-{
-  struct GNUNET_DV_ServiceHandle *sh = cls;
-  struct ConnectedPeer *peer;
-
-  peer = GNUNET_CONTAINER_multipeermap_get (sh->peers,
-                                            &dm->peer);
-  if (NULL == peer)
-  {
-    GNUNET_break (0);
-    reconnect (sh);
-    return;
-  }
-  cleanup_send_cb (sh,
-                   &dm->peer,
-                   peer);
-}
-
-
-/**
- * Handles a message sent from the DV service to us.
- * Parse it out and give it to the plugin.
- *
- * @param cls the handle to the DV API
- * @param msg the message that was received
- */
-static void
-handle_distance_update (void *cls,
-                        const struct GNUNET_DV_DistanceUpdateMessage *dum)
-{
-  struct GNUNET_DV_ServiceHandle *sh = cls;
-  struct ConnectedPeer *peer;
-
-  peer = GNUNET_CONTAINER_multipeermap_get (sh->peers,
-                                            &dum->peer);
-  if (NULL == peer)
-  {
-    GNUNET_break (0);
-    reconnect (sh);
-    return;
-  }
-  sh->distance_cb (sh->cls,
-                   &dum->peer,
-                   ntohl (dum->distance),
-                   (enum GNUNET_NetworkType) ntohl (dum->network));
-}
-
-
-/**
- * Handles a message sent from the DV service to us.
- * Parse it out and give it to the plugin.
- *
- * @param cls the handle to the DV API
- * @param rm the message that was received
- */
-static int
-check_received (void *cls,
-                const struct GNUNET_DV_ReceivedMessage *rm)
-{
-  struct GNUNET_DV_ServiceHandle *sh = cls;
-  const struct GNUNET_MessageHeader *payload;
-
-  if (NULL ==
-      GNUNET_CONTAINER_multipeermap_get (sh->peers,
-                                         &rm->sender))
-  {
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-  if (ntohs (rm->header.size) - sizeof (struct GNUNET_DV_ReceivedMessage) <
-      sizeof (*payload))
-  {
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-  payload = (const struct GNUNET_MessageHeader *) &rm[1];
-  if (ntohs (rm->header.size) !=
-      sizeof (struct GNUNET_DV_ReceivedMessage) + ntohs (payload->size))
-  {
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-  return GNUNET_OK;
-}
-
-
-/**
- * Handles a message sent from the DV service to us.
- * Parse it out and give it to the plugin.
- *
- * @param cls the handle to the DV API
- * @param rm the message that was received
- */
-static void
-handle_received (void *cls,
-                 const struct GNUNET_DV_ReceivedMessage *rm)
-{
-  struct GNUNET_DV_ServiceHandle *sh = cls;
-  const struct GNUNET_MessageHeader *payload;
-
-  payload = (const struct GNUNET_MessageHeader *) &rm[1];
-  sh->message_cb (sh->cls,
-                  &rm->sender,
-                  ntohl (rm->distance),
-                  payload);
-}
-
-
-/**
- * Generic error handler, called with the appropriate error code and
- * the same closure specified at the creation of the message queue.
- * Not every message queue implementation supports an error handler.
- *
- * @param cls closure with the `struct GNUNET_DV_ServiceHandle *`
- * @param error error code
- */
-static void
-mq_error_handler (void *cls,
-                  enum GNUNET_MQ_Error error)
-{
-  struct GNUNET_DV_ServiceHandle *sh = cls;
-
-  reconnect (sh);
-}
-
-
-/**
- * Disconnect and then reconnect to the DV service.
- *
- * @param sh service handle
- */
-static void
-reconnect (struct GNUNET_DV_ServiceHandle *sh)
-{
-  struct GNUNET_MQ_MessageHandler handlers[] = {
-    GNUNET_MQ_hd_fixed_size (connect,
-                             GNUNET_MESSAGE_TYPE_DV_CONNECT,
-                             struct GNUNET_DV_ConnectMessage,
-                             sh),
-    GNUNET_MQ_hd_fixed_size (disconnect,
-                             GNUNET_MESSAGE_TYPE_DV_DISCONNECT,
-                             struct GNUNET_DV_DisconnectMessage,
-                             sh),
-    GNUNET_MQ_hd_fixed_size (distance_update,
-                             GNUNET_MESSAGE_TYPE_DV_DISTANCE_CHANGED,
-                             struct GNUNET_DV_DistanceUpdateMessage,
-                             sh),
-    GNUNET_MQ_hd_var_size (received,
-                           GNUNET_MESSAGE_TYPE_DV_RECV,
-                           struct GNUNET_DV_ReceivedMessage,
-                           sh),
-    GNUNET_MQ_handler_end ()
-  };
-  struct GNUNET_MessageHeader *sm;
-  struct GNUNET_MQ_Envelope *env;
-
-  if (NULL != sh->mq)
-  {
-    GNUNET_MQ_destroy (sh->mq);
-    sh->mq = NULL;
-  }
-  GNUNET_CONTAINER_multipeermap_iterate (sh->peers,
-                                        &cleanup_send_cb,
-                                        sh);
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Connecting to DV service\n");
-  sh->mq = GNUNET_CLIENT_connect (sh->cfg,
-                                  "dv",
-                                  handlers,
-                                  &mq_error_handler,
-                                  sh);
-  if (NULL == sh->mq)
-  {
-    GNUNET_break (0);
-    return;
-  }
-  env = GNUNET_MQ_msg (sm,
-                       GNUNET_MESSAGE_TYPE_DV_START);
-  GNUNET_MQ_send (sh->mq,
-                  env);
-}
-
-
-/**
- * Connect to the DV service.
- *
- * @param cfg configuration
- * @param cls closure for callbacks
- * @param connect_cb function to call on connects
- * @param distance_cb function to call if distances change
- * @param disconnect_cb function to call on disconnects
- * @param message_cb function to call if we receive messages
- * @return handle to access the service
- */
-struct GNUNET_DV_ServiceHandle *
-GNUNET_DV_service_connect (const struct GNUNET_CONFIGURATION_Handle *cfg,
-                          void *cls,
-                          GNUNET_DV_ConnectCallback connect_cb,
-                          GNUNET_DV_DistanceChangedCallback distance_cb,
-                          GNUNET_DV_DisconnectCallback disconnect_cb,
-                          GNUNET_DV_MessageReceivedCallback message_cb)
-{
-  struct GNUNET_DV_ServiceHandle *sh;
-
-  sh = GNUNET_new (struct GNUNET_DV_ServiceHandle);
-  sh->cfg = cfg;
-  sh->cls = cls;
-  sh->connect_cb = connect_cb;
-  sh->distance_cb = distance_cb;
-  sh->disconnect_cb = disconnect_cb;
-  sh->message_cb = message_cb;
-  sh->peers = GNUNET_CONTAINER_multipeermap_create (128,
-                                                    GNUNET_YES);
-  reconnect (sh);
-  return sh;
-}
-
-
-/**
- * Disconnect from DV service.
- *
- * @param sh service handle
- */
-void
-GNUNET_DV_service_disconnect (struct GNUNET_DV_ServiceHandle *sh)
-{
-  if (NULL == sh)
-    return;
-  if (NULL != sh->mq)
-  {
-    GNUNET_MQ_destroy (sh->mq);
-    sh->mq = NULL;
-  }
-  GNUNET_CONTAINER_multipeermap_iterate (sh->peers,
-                                        &cleanup_send_cb,
-                                        sh);
-  GNUNET_CONTAINER_multipeermap_destroy (sh->peers);
-  GNUNET_free (sh);
-}
-
-
-/**
- * Send a message via DV service.
- *
- * @param sh service handle
- * @param target intended recpient
- * @param msg message payload
- */
-void
-GNUNET_DV_send (struct GNUNET_DV_ServiceHandle *sh,
-               const struct GNUNET_PeerIdentity *target,
-               const struct GNUNET_MessageHeader *msg)
-{
-  struct GNUNET_DV_SendMessage *sm;
-  struct ConnectedPeer *peer;
-  struct GNUNET_MQ_Envelope *env;
-
-  if (ntohs (msg->size) + sizeof (*sm) >= GNUNET_MAX_MESSAGE_SIZE)
-  {
-    GNUNET_break (0);
-    return;
-  }
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Asked to send %u bytes of type %u to %s\n",
-       (unsigned int) ntohs (msg->size),
-       (unsigned int) ntohs (msg->type),
-       GNUNET_i2s (target));
-  peer = GNUNET_CONTAINER_multipeermap_get (sh->peers,
-                                            target);
-  if (NULL == peer)
-  {
-    GNUNET_break (0);
-    return;
-  }
-  GNUNET_assert (NULL != sh->mq);
-  env = GNUNET_MQ_msg_nested_mh (sm,
-                                 GNUNET_MESSAGE_TYPE_DV_SEND,
-                                 msg);
-  sm->target = *target;
-  GNUNET_MQ_send (sh->mq,
-                  env);
-}
-
-
-/* end of dv_api.c */
diff --git a/src/dv/gnunet-dv.c b/src/dv/gnunet-dv.c
deleted file mode 100644 (file)
index 90d8144..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
-     This file is part of GNUnet.
-     Copyright (C) 2013 GNUnet e.V.
-
-     GNUnet is free software: you can redistribute it and/or modify it
-     under the terms of the GNU Affero General Public License as published
-     by the Free Software Foundation, either version 3 of the License,
-     or (at your option) any later version.
-
-     GNUnet is distributed in the hope that it will be useful, but
-     WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     Affero General Public License for more details.
-    
-     You should have received a copy of the GNU Affero General Public License
-     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
-*/
-/**
- * @file dv/gnunet-dv.c
- * @brief DV monitoring command line tool
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_dv_service.h"
-
-/**
- * Handle to DV service.
- */
-static struct GNUNET_DV_ServiceHandle *sh;
-
-/**
- * Was verbose specified?
- */
-static unsigned int verbose;
-
-
-/**
- * Function called if DV starts to be able to talk to a peer.
- *
- * @param cls closure
- * @param peer newly connected peer
- * @param distance distance to the peer
- * @param network the network the next hop is located in
- */
-static void
-connect_cb (void *cls,
-           const struct GNUNET_PeerIdentity *peer,
-           uint32_t distance,
-            enum GNUNET_NetworkType network)
-{
-  fprintf (stderr, "Connect: %s at %u\n",
-          GNUNET_i2s (peer),
-          (unsigned int) distance);
-}
-
-
-/**
- * Function called if DV distance to a peer is changed.
- *
- * @param cls closure
- * @param peer connected peer
- * @param distance new distance to the peer
- * @param network network used on first hop to peer
- */
-static void
-change_cb (void *cls,
-          const struct GNUNET_PeerIdentity *peer,
-          uint32_t distance,
-           enum GNUNET_NetworkType network)
-{
-  fprintf (stderr, "Change: %s at %u\n",
-          GNUNET_i2s (peer),
-          (unsigned int) distance);
-}
-
-
-/**
- * Function called if DV is no longer able to talk to a peer.
- *
- * @param cls closure
- * @param peer peer that disconnected
- */
-static void
-disconnect_cb (void *cls,
-              const struct GNUNET_PeerIdentity *peer)
-{
-  fprintf (stderr, "Disconnect: %s\n",
-          GNUNET_i2s (peer));
-}
-
-
-/**
- * Function called if DV receives a message for this peer.
- *
- * @param cls closure
- * @param sender sender of the message
- * @param distance how far did the message travel
- * @param msg actual message payload
- */
-static void
-message_cb (void *cls,
-           const struct GNUNET_PeerIdentity *sender,
-           uint32_t distance,
-           const struct GNUNET_MessageHeader *msg)
-{
-  if (verbose)
-    fprintf (stderr, "Message: %s at %u sends %u bytes of type %u\n",
-            GNUNET_i2s (sender),
-            (unsigned int) distance,
-            (unsigned int) ntohs (msg->size),
-            (unsigned int) ntohs (msg->type));
-}
-
-
-/**
- * Task run on shutdown.
- *
- * @param cls NULL
- */
-static void
-shutdown_task (void *cls)
-{
-  GNUNET_DV_service_disconnect (sh);
-  sh = NULL;
-}
-
-
-/**
- * Main function that will be run by the scheduler.
- *
- * @param cls closure
- * @param args remaining command-line arguments
- * @param cfgfile name of the configuration file used (for saving, can be NULL!)
- * @param cfg configuration
- */
-static void
-run (void *cls, char *const *args, const char *cfgfile,
-     const struct GNUNET_CONFIGURATION_Handle *cfg)
-{
-  sh = GNUNET_DV_service_connect (cfg, NULL,
-                                 &connect_cb,
-                                 &change_cb,
-                                 &disconnect_cb,
-                                 &message_cb);
-  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
-}
-
-
-/**
- * The main function.
- *
- * @param argc number of arguments from the command line
- * @param argv command line arguments
- * @return 0 ok, 1 on error
- */
-int
-main (int argc, char *const *argv)
-{
-  int res;
-
-  struct GNUNET_GETOPT_CommandLineOption options[] = {
-
-    GNUNET_GETOPT_option_verbose (&verbose),
-
-    GNUNET_GETOPT_OPTION_END
-  };
-
-  if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
-    return 2;
-
-  res = GNUNET_PROGRAM_run (argc, argv, "gnunet-dv",
-                           gettext_noop ("Print information about DV state"),
-                           options, &run,
-                           NULL);
-  GNUNET_free ((void *) argv);
-
-  if (GNUNET_OK != res)
-    return 1;
-  return 0;
-}
-
-/* end of gnunet-dv.c */
diff --git a/src/dv/gnunet-service-dv.c b/src/dv/gnunet-service-dv.c
deleted file mode 100644 (file)
index dd2ff9c..0000000
+++ /dev/null
@@ -1,2146 +0,0 @@
-/*
-     This file is part of GNUnet.
-     Copyright (C) 2013, 2016 GNUnet e.V.
-
-     GNUnet is free software: you can redistribute it and/or modify it
-     under the terms of the GNU Affero General Public License as published
-     by the Free Software Foundation, either version 3 of the License,
-     or (at your option) any later version.
-
-     GNUnet is distributed in the hope that it will be useful, but
-     WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     Affero General Public License for more details.
-    
-     You should have received a copy of the GNU Affero General Public License
-     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
-*/
-
-/**
- * @file dv/gnunet-service-dv.c
- * @brief the distance vector service, primarily handles gossip of nearby
- * peers and sending/receiving DV messages from core and decapsulating
- * them
- *
- * @author Christian Grothoff
- * @author Nathan Evans
- */
-#include "platform.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_protocols.h"
-#include "gnunet_core_service.h"
-#include "gnunet_hello_lib.h"
-#include "gnunet_peerinfo_service.h"
-#include "gnunet_statistics_service.h"
-#include "gnunet_set_service.h"
-#include "gnunet_ats_service.h"
-#include "dv.h"
-#include <gcrypt.h>
-
-
-/**
- * How often do we establish the consensu?
- */
-#define GNUNET_DV_CONSENSUS_FREQUENCY GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_MINUTES, 5)
-
-/**
- * Maximum number of messages we queue per peer.
- */
-#define MAX_QUEUE_SIZE 16
-
-/**
- * Maximum number of messages we queue towards the clients/plugin.
- */
-#define MAX_QUEUE_SIZE_PLUGIN 1024
-
-/**
- * The default fisheye depth, from how many hops away will
- * we keep peers?
- */
-#define DEFAULT_FISHEYE_DEPTH 3
-
-/**
- * How many hops is a direct neighbor away?
- */
-#define DIRECT_NEIGHBOR_COST 1
-
-
-GNUNET_NETWORK_STRUCT_BEGIN
-
-/**
- * Information about a peer DV can route to.  These entries are what
- * we use as the binary format to establish consensus to create our
- * routing table and as the address format in the HELLOs.
- */
-struct Target
-{
-
-  /**
-   * Identity of the peer we can reach.
-   */
-  struct GNUNET_PeerIdentity peer;
-
-  /**
-   * How many hops (1-3) is this peer away? in network byte order
-   */
-  uint32_t distance GNUNET_PACKED;
-
-};
-
-
-/**
- * Message exchanged between DV services (via core), requesting a
- * message to be routed.
- */
-struct RouteMessage
-{
-  /**
-   * Type: #GNUNET_MESSAGE_TYPE_DV_ROUTE
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * Expected (remaining) distance.  Must be always smaller than
-   * #DEFAULT_FISHEYE_DEPTH, should be zero at the target.  Must
-   * be decremented by one at each hop.  Peers must not forward
-   * these messages further once the counter has reached zero.
-   */
-  uint32_t distance GNUNET_PACKED;
-
-  /**
-   * The (actual) target of the message (this peer, if distance is zero).
-   */
-  struct GNUNET_PeerIdentity target;
-
-  /**
-   * The (actual) sender of the message.
-   */
-  struct GNUNET_PeerIdentity sender;
-
-};
-
-GNUNET_NETWORK_STRUCT_END
-
-
-/**
- * Information about a direct neighbor (core-level, excluding
- * DV-links, only DV-enabled peers).
- */
-struct DirectNeighbor
-{
-
-  /**
-   * Identity of the peer.
-   */
-  struct GNUNET_PeerIdentity peer;
-
-  /**
-   * Session ID we use whenever we create a set union with
-   * this neighbor; constructed from the XOR of our peer
-   * IDs and then salted with "DV-SALT" to avoid conflicts
-   * with other applications.
-   */
-  struct GNUNET_HashCode real_session_id;
-
-  /**
-   * Transmit handle to core service.
-   */
-  struct GNUNET_MQ_Handle *mq;
-
-  /**
-   * Routing table of the neighbor, NULL if not yet established.
-   * Keys are peer identities, values are 'struct Target' entries.
-   * Note that the distances in the targets are from the point-of-view
-   * of the peer, not from us!
-   */
-  struct GNUNET_CONTAINER_MultiPeerMap *neighbor_table;
-
-  /**
-   * Updated routing table of the neighbor, under construction,
-   * NULL if we are not currently building it.
-   * Keys are peer identities, values are 'struct Target' entries.
-   * Note that the distances in the targets are from the point-of-view
-   * of the other peer, not from us!
-   */
-  struct GNUNET_CONTAINER_MultiPeerMap *neighbor_table_consensus;
-
-  /**
-   * Our current (exposed) routing table as a set.
-   */
-  struct GNUNET_SET_Handle *my_set;
-
-  /**
-   * Handle for our current active set union operation.
-   */
-  struct GNUNET_SET_OperationHandle *set_op;
-
-  /**
-   * Handle used if we are listening for this peer, waiting for the
-   * other peer to initiate construction of the set union.  NULL if
-   * we ar the initiating peer.
-   */
-  struct GNUNET_SET_ListenHandle *listen_handle;
-
-  /**
-   * ID of the task we use to (periodically) update our consensus
-   * with this peer.  Used if we are the initiating peer.
-   */
-  struct GNUNET_SCHEDULER_Task *initiate_task;
-
-  /**
-   * At what offset are we, with respect to inserting our own routes
-   * into the consensus?
-   */
-  unsigned int consensus_insertion_offset;
-
-  /**
-   * At what distance are we, with respect to inserting our own routes
-   * into the consensus?
-   */
-  unsigned int consensus_insertion_distance;
-
-  /**
-   * Elements in consensus
-   */
-  unsigned int consensus_elements;
-
-  /**
-   * Direct one hop route
-   */
-  struct Route *direct_route;
-
-  /**
-   * Flag set within 'check_target_removed' to trigger full global route refresh.
-   */
-  int target_removed;
-
-  /**
-   * Our distance to this peer, 0 for unknown.
-   */
-  uint32_t distance;
-
-  /**
-   * The network this peer is in
-   */
-  enum GNUNET_NetworkType network;
-
-  /**
-   * Is this neighbor connected at the core level?
-   */
-  int connected;
-
-};
-
-
-/**
- * A route includes information about the next hop,
- * the target, and the ultimate distance to the
- * target.
- */
-struct Route
-{
-
-  /**
-   * Which peer do we need to forward the message to?
-   */
-  struct DirectNeighbor *next_hop;
-
-  /**
-   * What would be the target, and how far is it away?
-   */
-  struct Target target;
-
-  /**
-   * Offset of this target in the respective consensus set.
-   */
-  unsigned int set_offset;
-
-};
-
-
-/**
- * Set of targets we bring to a consensus; all targets in a set have a
- * distance equal to the sets distance (which is implied by the array
- * index of the set).
- */
-struct ConsensusSet
-{
-
-  /**
-   * Array of targets in the set, may include NULL entries if a
-   * neighbor has disconnected; the targets are allocated with the
-   * respective container (all_routes), not here.
-   */
-  struct Route **targets;
-
-  /**
-   * Size of the @e targets array.
-   */
-  unsigned int array_length;
-
-};
-
-
-/**
- * Peermap of all of our neighbors; processing these usually requires
- * first checking to see if the peer is core-connected and if the
- * distance is 1, in which case they are direct neighbors.
- */
-static struct GNUNET_CONTAINER_MultiPeerMap *direct_neighbors;
-
-/**
- * Hashmap with all routes that we currently support; contains
- * routing information for all peers from distance 2
- * up to distance #DEFAULT_FISHEYE_DEPTH.
- */
-static struct GNUNET_CONTAINER_MultiPeerMap *all_routes;
-
-/**
- * Array of consensus sets we expose to the outside world.  Sets
- * are structured by the distance to the target.
- */
-static struct ConsensusSet consensi[DEFAULT_FISHEYE_DEPTH];
-
-/**
- * Handle to the core service api.
- */
-static struct GNUNET_CORE_Handle *core_api;
-
-/**
- * The identity of our peer.
- */
-static struct GNUNET_PeerIdentity my_identity;
-
-/**
- * The configuration for this service.
- */
-static const struct GNUNET_CONFIGURATION_Handle *cfg;
-
-/**
- * The client, the DV plugin connected to us (or an event monitor).
- * Hopefully this client will never change, although if the plugin
- * dies and returns for some reason it may happen.
- */
-static struct GNUNET_NotificationContext *nc;
-
-/**
- * Handle for the statistics service.
- */
-static struct GNUNET_STATISTICS_Handle *stats;
-
-/**
- * Handle to ATS service.
- */
-static struct GNUNET_ATS_PerformanceHandle *ats;
-
-/**
- * Task scheduled to refresh routes based on direct neighbours.
- */
-static struct GNUNET_SCHEDULER_Task *rr_task;
-
-/**
- * #GNUNET_YES if we are shutting down.
- */
-static int in_shutdown;
-
-/**
- * Start creating a new DV set union by initiating the connection.
- *
- * @param cls the 'struct DirectNeighbor' of the peer we're building
- *        a routing consensus with
- */
-static void
-initiate_set_union (void *cls);
-
-
-/**
- * Start creating a new DV set union construction, our neighbour has
- * asked for it (callback for listening peer).
- *
- * @param cls the 'struct DirectNeighbor' of the peer we're building
- *        a routing consensus with
- * @param other_peer the other peer
- * @param context_msg message with application specific information from
- *        the other peer
- * @param request request from the other peer, use GNUNET_SET_accept
- *        to accept it, otherwise the request will be refused
- *        Note that we don't use a return value here, as it is also
- *        necessary to specify the set we want to do the operation with,
- *        whith sometimes can be derived from the context message.
- *        Also necessary to specify the timeout.
- */
-static void
-listen_set_union (void *cls,
-                 const struct GNUNET_PeerIdentity *other_peer,
-                 const struct GNUNET_MessageHeader *context_msg,
-                 struct GNUNET_SET_Request *request);
-
-
-/**
- * Forward a message from another peer to the plugin.
- *
- * @param message the message to send to the plugin
- * @param origin the original sender of the message
- * @param distance distance to the original sender of the message
- */
-static void
-send_data_to_plugin (const struct GNUNET_MessageHeader *message,
-                    const struct GNUNET_PeerIdentity *origin,
-                    uint32_t distance)
-{
-  struct GNUNET_DV_ReceivedMessage *received_msg;
-  size_t size;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Delivering message from peer `%s' at distance %u\n",
-              GNUNET_i2s (origin),
-              (unsigned int) distance);
-  size = sizeof (struct GNUNET_DV_ReceivedMessage) +
-    ntohs (message->size);
-  if (size >= GNUNET_MAX_MESSAGE_SIZE)
-  {
-    GNUNET_break (0); /* too big */
-    return;
-  }
-  received_msg = GNUNET_malloc (size);
-  received_msg->header.size = htons (size);
-  received_msg->header.type = htons (GNUNET_MESSAGE_TYPE_DV_RECV);
-  received_msg->distance = htonl (distance);
-  received_msg->sender = *origin;
-  GNUNET_memcpy (&received_msg[1], message, ntohs (message->size));
-  GNUNET_notification_context_broadcast (nc,
-                                         &received_msg->header,
-                                         GNUNET_YES);
-  GNUNET_free (received_msg);
-}
-
-
-/**
- * Forward a control message to the plugin.
- *
- * @param message the message to send to the plugin
- */
-static void
-send_control_to_plugin (const struct GNUNET_MessageHeader *message)
-{
-  GNUNET_notification_context_broadcast (nc,
-                                         message,
-                                         GNUNET_NO);
-}
-
-
-/**
- * Send a DISTANCE_CHANGED message to the plugin.
- *
- * @param peer peer with a changed distance
- * @param distance new distance to the peer
- * @param network network used by the neighbor
- */
-static void
-send_distance_change_to_plugin (const struct GNUNET_PeerIdentity *peer,
-                               uint32_t distance,
-                                enum GNUNET_NetworkType network)
-{
-  struct GNUNET_DV_DistanceUpdateMessage du_msg;
-
-  GNUNET_break (GNUNET_NT_UNSPECIFIED != network);
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Delivering DISTANCE_CHANGED for message about peer `%s'\n",
-              GNUNET_i2s (peer));
-  du_msg.header.size = htons (sizeof (du_msg));
-  du_msg.header.type = htons (GNUNET_MESSAGE_TYPE_DV_DISTANCE_CHANGED);
-  du_msg.distance = htonl (distance);
-  du_msg.peer = *peer;
-  du_msg.network = htonl ((uint32_t) network);
-  send_control_to_plugin (&du_msg.header);
-}
-
-
-/**
- * Give a CONNECT message to the plugin.
- *
- * @param target peer that connected
- * @param distance distance to the target
- * @param network the network the next hop is located in
- */
-static void
-send_connect_to_plugin (const struct GNUNET_PeerIdentity *target,
-                       uint32_t distance,
-                        enum GNUNET_NetworkType network)
-{
-  struct GNUNET_DV_ConnectMessage cm;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Delivering CONNECT about peer %s with distance %u\n",
-              GNUNET_i2s (target), distance);
-  cm.header.size = htons (sizeof (cm));
-  cm.header.type = htons (GNUNET_MESSAGE_TYPE_DV_CONNECT);
-  cm.distance = htonl (distance);
-  cm.network = htonl ((uint32_t) network);
-  cm.peer = *target;
-  send_control_to_plugin (&cm.header);
-}
-
-
-/**
- * Give a DISCONNECT message to the plugin.
- *
- * @param target peer that disconnected
- */
-static void
-send_disconnect_to_plugin (const struct GNUNET_PeerIdentity *target)
-{
-  struct GNUNET_DV_DisconnectMessage dm;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Delivering DISCONNECT about peer `%s'\n",
-              GNUNET_i2s (target));
-  dm.header.size = htons (sizeof (dm));
-  dm.header.type = htons (GNUNET_MESSAGE_TYPE_DV_DISCONNECT);
-  dm.reserved = htonl (0);
-  dm.peer = *target;
-  send_control_to_plugin (&dm.header);
-}
-
-
-/**
- * Forward the given payload to the given target.
- *
- * @param target where to send the message
- * @param distance distance to the @a sender
- * @param sender original sender of the message
- * @param actual_target ultimate recipient for the message
- * @param payload payload of the message
- */
-static void
-forward_payload (struct DirectNeighbor *target,
-                uint32_t distance,
-                const struct GNUNET_PeerIdentity *sender,
-                const struct GNUNET_PeerIdentity *actual_target,
-                const struct GNUNET_MessageHeader *payload)
-{
-  struct GNUNET_MQ_Envelope *env;
-  struct RouteMessage *rm;
-
-  if ( (GNUNET_MQ_get_length (target->mq) >= MAX_QUEUE_SIZE) &&
-       (0 != memcmp (sender,
-                    &my_identity,
-                    sizeof (struct GNUNET_PeerIdentity))) )
-  {
-    /* not _our_ client and queue is full, drop */
-    GNUNET_STATISTICS_update (stats,
-                              "# messages dropped",
-                              1,
-                             GNUNET_NO);
-    return;
-  }
-  if (sizeof (struct RouteMessage) + ntohs (payload->size)
-      >= GNUNET_MAX_MESSAGE_SIZE)
-  {
-    GNUNET_break (0);
-    return;
-  }
-  env = GNUNET_MQ_msg_nested_mh (rm,
-                                GNUNET_MESSAGE_TYPE_DV_ROUTE,
-                                payload);
-  rm->distance = htonl (distance);
-  rm->target = *actual_target;
-  rm->sender = *sender;
-  GNUNET_MQ_send (target->mq,
-                 env);
-}
-
-
-/**
- * Find a free slot for storing a 'route' in the 'consensi'
- * set at the given distance.
- *
- * @param distance distance to use for the set slot
- */
-static unsigned int
-get_consensus_slot (uint32_t distance)
-{
-  struct ConsensusSet *cs;
-  unsigned int i;
-
-  GNUNET_assert (distance < DEFAULT_FISHEYE_DEPTH);
-  cs = &consensi[distance];
-  i = 0;
-  while ( (i < cs->array_length) &&
-         (NULL != cs->targets[i]) ) i++;
-  if (i == cs->array_length)
-  {
-    GNUNET_array_grow (cs->targets,
-                      cs->array_length,
-                      cs->array_length * 2 + 2);
-  }
-  return i;
-}
-
-
-/**
- * Allocate a slot in the consensus set for a route.
- *
- * @param route route to initialize
- * @param distance which consensus set to use
- */
-static void
-allocate_route (struct Route *route,
-               uint32_t distance)
-{
-  unsigned int i;
-
-  if (distance >= DEFAULT_FISHEYE_DEPTH)
-  {
-    route->target.distance = htonl (distance);
-    route->set_offset = UINT_MAX; /* invalid slot */
-    return;
-  }
-  i = get_consensus_slot (distance);
-  route->set_offset = i;
-  consensi[distance].targets[i] = route;
-  route->target.distance = htonl (distance);
-}
-
-
-/**
- * Release a slot in the consensus set for a route.
- *
- * @param route route to release the slot from
- */
-static void
-release_route (struct Route *route)
-{
-  if (UINT_MAX == route->set_offset)
-    return;
-  GNUNET_assert (ntohl (route->target.distance) < DEFAULT_FISHEYE_DEPTH);
-  consensi[ntohl (route->target.distance)].targets[route->set_offset] = NULL;
-  route->set_offset = UINT_MAX; /* indicate invalid slot */
-}
-
-
-/**
- * Move a route from one consensus set to another.
- *
- * @param route route to move
- * @param new_distance new distance for the route (destination set)
- */
-static void
-move_route (struct Route *route,
-           uint32_t new_distance)
-{
-  release_route (route);
-  allocate_route (route, new_distance);
-}
-
-
-/**
- * Initialize this neighbors 'my_set' and when done give
- * it to the pending set operation for execution.
- *
- * Add a single element to the set per call:
- *
- * If we reached the last element of a consensus element: increase distance
- *
- *
- * @param cls the neighbor for which we are building the set
- */
-static void
-build_set (void *cls)
-{
-  struct DirectNeighbor *neighbor = cls;
-  struct GNUNET_SET_Element element;
-  struct Target *target;
-  struct Route *route;
-
-  target = NULL;
-  /* skip over NULL entries */
-  while ( (DEFAULT_FISHEYE_DEPTH > neighbor->consensus_insertion_distance) &&
-         (consensi[neighbor->consensus_insertion_distance].array_length > neighbor->consensus_insertion_offset) &&
-         (NULL == consensi[neighbor->consensus_insertion_distance].targets[neighbor->consensus_insertion_offset]) )
-    neighbor->consensus_insertion_offset++;
-  while ( (DEFAULT_FISHEYE_DEPTH > neighbor->consensus_insertion_distance) &&
-         (consensi[neighbor->consensus_insertion_distance].array_length == neighbor->consensus_insertion_offset) )
-  {
-    /* If we reached the last element of a consensus array element: increase distance and start with next array */
-    neighbor->consensus_insertion_offset = 0;
-    neighbor->consensus_insertion_distance++;
-    /* skip over NULL entries */
-    while ( (DEFAULT_FISHEYE_DEPTH > neighbor->consensus_insertion_distance) &&
-           (consensi[neighbor->consensus_insertion_distance].array_length  > neighbor->consensus_insertion_offset) &&
-           (NULL == consensi[neighbor->consensus_insertion_distance].targets[neighbor->consensus_insertion_offset]) )
-      neighbor->consensus_insertion_offset++;
-  }
-  if (DEFAULT_FISHEYE_DEPTH == neighbor->consensus_insertion_distance)
-  {
-    /* we have added all elements to the set, run the operation */
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-               "Finished building my SET for peer `%s' with %u elements, committing\n",
-               GNUNET_i2s (&neighbor->peer),
-               neighbor->consensus_elements);
-    GNUNET_SET_commit (neighbor->set_op,
-                      neighbor->my_set);
-    GNUNET_SET_destroy (neighbor->my_set);
-    neighbor->my_set = NULL;
-    return;
-  }
-
-  route = consensi[neighbor->consensus_insertion_distance].targets[neighbor->consensus_insertion_offset];
-  GNUNET_assert (NULL != route);
-  target = &route->target;
-  GNUNET_assert (ntohl (target->distance) < DEFAULT_FISHEYE_DEPTH);
-  element.size = sizeof (struct Target);
-  element.element_type = htons (0);
-  element.data = target;
-
-  /* Find next non-NULL entry */
-  neighbor->consensus_insertion_offset++;
-  if ( (0 != memcmp (&target->peer,
-                    &my_identity,
-                    sizeof (my_identity))) &&
-       (0 != memcmp (&target->peer,
-                    &neighbor->peer,
-                    sizeof (struct GNUNET_PeerIdentity))) )
-  {
-    /* Add target if it is not the neighbor or this peer */
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "Adding peer `%s' with distance %u to SET\n",
-                GNUNET_i2s (&target->peer),
-                ntohl (target->distance) + 1);
-    GNUNET_SET_add_element (neighbor->my_set,
-                            &element,
-                            &build_set, neighbor);
-    neighbor->consensus_elements++;
-  }
-  else
-    build_set (neighbor);
-}
-
-
-/**
- * A peer is now connected to us at distance 1.  Initiate DV exchange.
- *
- * @param neighbor entry for the neighbor at distance 1
- */
-static void
-handle_direct_connect (struct DirectNeighbor *neighbor)
-{
-  struct Route *route;
-  struct GNUNET_HashCode h1;
-  struct GNUNET_HashCode h2;
-  struct GNUNET_HashCode session_id;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "Direct connection to %s established, routing table exchange begins.\n",
-             GNUNET_i2s (&neighbor->peer));
-  GNUNET_STATISTICS_update (stats,
-                           "# peers connected (1-hop)",
-                           1, GNUNET_NO);
-  route = GNUNET_CONTAINER_multipeermap_get (all_routes,
-                                            &neighbor->peer);
-  if (NULL != route)
-  {
-    GNUNET_assert (GNUNET_YES ==
-                  GNUNET_CONTAINER_multipeermap_remove (all_routes,
-                                                         &neighbor->peer,
-                                                         route));
-    send_disconnect_to_plugin (&neighbor->peer);
-    release_route (route);
-    GNUNET_free (route);
-  }
-
-  neighbor->direct_route = GNUNET_new (struct Route);
-  neighbor->direct_route->next_hop = neighbor;
-  neighbor->direct_route->target.peer = neighbor->peer;
-  allocate_route (neighbor->direct_route, DIRECT_NEIGHBOR_COST);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Adding direct route to %s\n",
-              GNUNET_i2s (&neighbor->direct_route->target.peer));
-
-
-  /* construct session ID seed as XOR of both peer's identities */
-  GNUNET_CRYPTO_hash (&my_identity,
-                     sizeof (my_identity),
-                     &h1);
-  GNUNET_CRYPTO_hash (&neighbor->peer,
-                     sizeof (struct GNUNET_PeerIdentity),
-                     &h2);
-  GNUNET_CRYPTO_hash_xor (&h1,
-                         &h2,
-                         &session_id);
-  /* make sure session ID is unique across applications by salting it with 'DV' */
-  GNUNET_CRYPTO_hkdf (&neighbor->real_session_id, sizeof (struct GNUNET_HashCode),
-                     GCRY_MD_SHA512, GCRY_MD_SHA256,
-                     "DV-SALT", 2,
-                     &session_id, sizeof (session_id),
-                     NULL, 0);
-  if (0 < memcmp (&neighbor->peer,
-                 &my_identity,
-                 sizeof (struct GNUNET_PeerIdentity)))
-  {
-    if (NULL != neighbor->listen_handle)
-    {
-      GNUNET_break (0);
-    }
-    else
-      neighbor->initiate_task = GNUNET_SCHEDULER_add_now (&initiate_set_union,
-                                                          neighbor);
-  }
-  else
-  {
-    if (NULL != neighbor->listen_handle)
-    {
-      GNUNET_break (0);
-    }
-    else
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                  "Starting SET listen operation with peer `%s'\n",
-                  GNUNET_i2s (&neighbor->peer));
-      neighbor->listen_handle = GNUNET_SET_listen (cfg,
-                                                   GNUNET_SET_OPERATION_UNION,
-                                                   &neighbor->real_session_id,
-                                                   &listen_set_union,
-                                                   neighbor);
-    }
-  }
-}
-
-
-/**
- * Method called whenever a peer connects.
- *
- * @param cls closure
- * @param peer peer identity this notification is about
- * @param mq message queue for sending data to @a peer
- * @return our `struct DirectNeighbour` for this peer
- */
-static void *
-handle_core_connect (void *cls,
-                    const struct GNUNET_PeerIdentity *peer,
-                    struct GNUNET_MQ_Handle *mq)
-{
-  struct DirectNeighbor *neighbor;
-
-  /* Check for connect to self message */
-  if (0 == memcmp (&my_identity,
-                  peer,
-                  sizeof (struct GNUNET_PeerIdentity)))
-    return NULL;
-  /* check if entry exists */
-  neighbor = GNUNET_CONTAINER_multipeermap_get (direct_neighbors,
-                                               peer);
-  if (NULL != neighbor)
-  {
-    GNUNET_break (GNUNET_NT_UNSPECIFIED != neighbor->network);
-    GNUNET_break (GNUNET_YES != neighbor->connected);
-    neighbor->connected = GNUNET_YES;
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-               "Core connected to %s (distance %u)\n",
-               GNUNET_i2s (peer),
-               (unsigned int) neighbor->distance);
-    if (DIRECT_NEIGHBOR_COST != neighbor->distance)
-      return NULL;
-    handle_direct_connect (neighbor);
-    return NULL;
-  }
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "Core connected to %s (distance unknown)\n",
-             GNUNET_i2s (peer));
-  neighbor = GNUNET_new (struct DirectNeighbor);
-  neighbor->peer = *peer;
-  GNUNET_assert (GNUNET_YES ==
-                GNUNET_CONTAINER_multipeermap_put (direct_neighbors,
-                                                   &neighbor->peer,
-                                                   neighbor,
-                                                   GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
-  neighbor->connected = GNUNET_YES;
-  neighbor->distance = 0; /* unknown */
-  neighbor->network = GNUNET_NT_UNSPECIFIED;
-  return neighbor;
-}
-
-
-/**
- * Called for each 'target' in a neighbor table to free the associated memory.
- *
- * @param cls NULL
- * @param key key of the value
- * @param value value to free
- * @return #GNUNET_OK to continue to iterate
- */
-static int
-free_targets (void *cls,
-             const struct GNUNET_PeerIdentity *key,
-             void *value)
-{
-  GNUNET_free (value);
-  return GNUNET_OK;
-}
-
-
-/**
- * Add a new route to the given @a target via the given @a neighbor.
- *
- * @param target the target of the route
- * @param neighbor the next hop for communicating with the @a target
- */
-static void
-add_new_route (struct Target *target,
-               struct DirectNeighbor *neighbor)
-{
-  struct Route *route;
-
-  route = GNUNET_new (struct Route);
-  route->next_hop = neighbor;
-  route->target.peer = target->peer;
-  allocate_route (route, ntohl (target->distance) + 1);
-  GNUNET_assert (GNUNET_YES ==
-                GNUNET_CONTAINER_multipeermap_put (all_routes,
-                                                   &route->target.peer,
-                                                   route,
-                                                   GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
-  send_connect_to_plugin (&route->target.peer,
-                          ntohl (route->target.distance),
-                          neighbor->network);
-}
-
-
-/**
- * Multipeerhmap iterator for checking if a given route is
- * (now) useful to this peer.
- *
- * @param cls the direct neighbor for the given route
- * @param key key value stored under
- * @param value a 'struct Target' that may or may not be useful; not that
- *        the distance in 'target' does not include the first hop yet
- * @return #GNUNET_YES to continue iteration, #GNUNET_NO to stop
- */
-static int
-check_possible_route (void *cls,
-                     const struct GNUNET_PeerIdentity *key,
-                     void *value)
-{
-  struct DirectNeighbor *neighbor = cls;
-  struct Target *target = value;
-  struct Route *route;
-
-  if (GNUNET_YES ==
-      GNUNET_CONTAINER_multipeermap_contains (direct_neighbors,
-                                              key))
-    return GNUNET_YES; /* direct route, do not care about alternatives */
-  route = GNUNET_CONTAINER_multipeermap_get (all_routes,
-                                            key);
-  if (NULL != route)
-  {
-    /* we have an existing route, check how it compares with going via 'target' */
-    if (ntohl (route->target.distance) > ntohl (target->distance) + 1)
-    {
-      /* via 'target' is cheaper than the existing route; switch to alternative route! */
-      move_route (route, ntohl (target->distance) + 1);
-      route->next_hop = neighbor;
-      send_distance_change_to_plugin (&target->peer,
-                                      ntohl (target->distance) + 1,
-                                      neighbor->network);
-    }
-    return GNUNET_YES; /* got a route to this target already */
-  }
-  if (ntohl (target->distance) >= DEFAULT_FISHEYE_DEPTH)
-    return GNUNET_YES; /* distance is too large to be interesting */
-  add_new_route (target, neighbor);
-  return GNUNET_YES;
-}
-
-
-/**
- * Multipeermap iterator for finding routes that were previously
- * "hidden" due to a better route (called after a disconnect event).
- *
- * @param cls NULL
- * @param key peer identity of the given direct neighbor
- * @param value a `struct DirectNeighbor` to check for additional routes
- * @return #GNUNET_YES to continue iteration
- */
-static int
-refresh_routes (void *cls,
-               const struct GNUNET_PeerIdentity *key,
-               void *value)
-{
-  struct DirectNeighbor *neighbor = value;
-
-  if ( (GNUNET_YES != neighbor->connected) ||
-       (DIRECT_NEIGHBOR_COST != neighbor->distance) )
-    return GNUNET_YES;
-  if (NULL != neighbor->neighbor_table)
-    GNUNET_CONTAINER_multipeermap_iterate (neighbor->neighbor_table,
-                                          &check_possible_route,
-                                          neighbor);
-  return GNUNET_YES;
-}
-
-
-/**
- * Task to run #refresh_routes() on all direct neighbours.
- *
- * @param cls NULL
- */
-static void
-refresh_routes_task (void *cls)
-{
-  rr_task = NULL;
-  GNUNET_CONTAINER_multipeermap_iterate (direct_neighbors,
-                                        &refresh_routes,
-                                         NULL);
-}
-
-
-/**
- * Asynchronously run #refresh_routes() at the next opportunity
- * on all direct neighbours.
- */
-static void
-schedule_refresh_routes ()
-{
-  if (NULL == rr_task)
-    rr_task = GNUNET_SCHEDULER_add_now (&refresh_routes_task,
-                                        NULL);
-}
-
-
-/**
- * Multipeermap iterator for freeing routes that go via a particular
- * neighbor that disconnected and is thus no longer available.
- *
- * @param cls the direct neighbor that is now unavailable
- * @param key key value stored under
- * @param value a `struct Route` that may or may not go via neighbor
- *
- * @return #GNUNET_YES to continue iteration, #GNUNET_NO to stop
- */
-static int
-cull_routes (void *cls,
-            const struct GNUNET_PeerIdentity *key,
-            void *value)
-{
-  struct DirectNeighbor *neighbor = cls;
-  struct Route *route = value;
-
-  if (route->next_hop != neighbor)
-    return GNUNET_YES; /* not affected */
-  GNUNET_assert (GNUNET_YES ==
-                GNUNET_CONTAINER_multipeermap_remove (all_routes, key, value));
-  release_route (route);
-  send_disconnect_to_plugin (&route->target.peer);
-  GNUNET_free (route);
-  return GNUNET_YES;
-}
-
-
-/**
- * Handle the case that a direct connection to a peer is
- * disrupted.  Remove all routes via that peer and
- * stop the consensus with it.
- *
- * @param neighbor peer that was disconnected (or at least is no
- *    longer at distance 1)
- */
-static void
-handle_direct_disconnect (struct DirectNeighbor *neighbor)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Culling routes via %s due to direct disconnect\n",
-             GNUNET_i2s (&neighbor->peer));
-  GNUNET_CONTAINER_multipeermap_iterate (all_routes,
-                                        &cull_routes,
-                                         neighbor);
-  if (NULL != neighbor->direct_route)
-  {
-    release_route (neighbor->direct_route);
-    GNUNET_free (neighbor->direct_route);
-    neighbor->direct_route = NULL;
-  }
-  if (NULL != neighbor->neighbor_table_consensus)
-  {
-    GNUNET_CONTAINER_multipeermap_iterate (neighbor->neighbor_table_consensus,
-                                          &free_targets,
-                                          NULL);
-    GNUNET_CONTAINER_multipeermap_destroy (neighbor->neighbor_table_consensus);
-    neighbor->neighbor_table_consensus = NULL;
-  }
-  if (NULL != neighbor->neighbor_table)
-  {
-    GNUNET_CONTAINER_multipeermap_iterate (neighbor->neighbor_table,
-                                          &free_targets,
-                                          NULL);
-    GNUNET_CONTAINER_multipeermap_destroy (neighbor->neighbor_table);
-    neighbor->neighbor_table = NULL;
-  }
-  if (NULL != neighbor->set_op)
-  {
-    GNUNET_SET_operation_cancel (neighbor->set_op);
-    neighbor->set_op = NULL;
-  }
-  if (NULL != neighbor->my_set)
-  {
-    GNUNET_SET_destroy (neighbor->my_set);
-    neighbor->my_set = NULL;
-  }
-  if (NULL != neighbor->listen_handle)
-  {
-    GNUNET_SET_listen_cancel (neighbor->listen_handle);
-    neighbor->listen_handle = NULL;
-  }
-  if (NULL != neighbor->initiate_task)
-  {
-    GNUNET_SCHEDULER_cancel (neighbor->initiate_task);
-    neighbor->initiate_task = NULL;
-  }
-}
-
-
-/**
- * Function that is called with QoS information about an address; used
- * to update our current distance to another peer.
- *
- * @param cls closure
- * @param address the address
- * @param active #GNUNET_YES if this address is actively used
- *        to maintain a connection to a peer;
- *        #GNUNET_NO if the address is not actively used;
- *        #GNUNET_SYSERR if this address is no longer available for ATS
- * @param bandwidth_out assigned outbound bandwidth for the connection
- * @param bandwidth_in assigned inbound bandwidth for the connection
- * @param prop performance data for the address (as far as known)
- */
-static void
-handle_ats_update (void *cls,
-                  const struct GNUNET_HELLO_Address *address,
-                  int active,
-                  struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out,
-                  struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in,
-                  const struct GNUNET_ATS_Properties *prop)
-{
-  struct DirectNeighbor *neighbor;
-  uint32_t distance;
-  enum GNUNET_NetworkType network;
-
-  if (NULL == address)
-  {
-    /* ATS service temporarily disconnected */
-    return;
-  }
-
-  if (GNUNET_YES != active)
-  {
-    // FIXME: handle disconnect/inactive case too!
-    return;
-  }
-  distance = prop->distance;
-  network = prop->scope;
-  GNUNET_break (GNUNET_NT_UNSPECIFIED != network);
-  /* check if entry exists */
-  neighbor = GNUNET_CONTAINER_multipeermap_get (direct_neighbors,
-                                               &address->peer);
-  if (NULL != neighbor)
-  {
-    neighbor->network = network;
-    if (neighbor->distance == distance)
-      return; /* nothing new to see here, move along */
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "ATS says distance to %s is now %u\n",
-                GNUNET_i2s (&address->peer),
-                (unsigned int) distance);
-    if ( (DIRECT_NEIGHBOR_COST == neighbor->distance) &&
-        (DIRECT_NEIGHBOR_COST == distance) )
-      return; /* no change */
-    if (DIRECT_NEIGHBOR_COST == neighbor->distance)
-    {
-      neighbor->distance = distance;
-      GNUNET_STATISTICS_update (stats,
-                               "# peers connected (1-hop)",
-                               -1, GNUNET_NO);
-      handle_direct_disconnect (neighbor);
-      schedule_refresh_routes ();
-      return;
-    }
-    neighbor->distance = distance;
-    if (DIRECT_NEIGHBOR_COST != neighbor->distance)
-      return;
-    if (GNUNET_YES != neighbor->connected)
-      return;
-    handle_direct_connect (neighbor);
-    return;
-  }
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "ATS says distance to %s is now %u\n",
-             GNUNET_i2s (&address->peer),
-             (unsigned int) distance);
-  neighbor = GNUNET_new (struct DirectNeighbor);
-  neighbor->peer = address->peer;
-  GNUNET_assert (GNUNET_YES ==
-                GNUNET_CONTAINER_multipeermap_put (direct_neighbors,
-                                                   &neighbor->peer,
-                                                   neighbor,
-                                                   GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
-  neighbor->connected = GNUNET_NO; /* not yet */
-  neighbor->distance = distance;
-  neighbor->network = network;
-}
-
-
-/**
- * Check if a target was removed from the set of the other peer; if so,
- * if we also used it for our route, we need to remove it from our
- * 'all_routes' set (and later check if an alternative path now exists).
- *
- * @param cls the `struct DirectNeighbor`
- * @param key peer identity for the target
- * @param value a `struct Target` previously reachable via the given neighbor
- */
-static int
-check_target_removed (void *cls,
-                     const struct GNUNET_PeerIdentity *key,
-                     void *value)
-{
-  struct DirectNeighbor *neighbor = cls;
-  struct Target *new_target;
-  struct Route *current_route;
-
-  new_target = GNUNET_CONTAINER_multipeermap_get (neighbor->neighbor_table_consensus,
-                                                 key);
-  current_route = GNUNET_CONTAINER_multipeermap_get (all_routes,
-                                                     key);
-  if (NULL != new_target)
-  {
-    /* target was in old set, is in new set */
-    if ( (NULL != current_route) &&
-         (current_route->next_hop == neighbor) &&
-         (current_route->target.distance != new_target->distance) )
-    {
-      /* need to recalculate routes due to distance change */
-      neighbor->target_removed = GNUNET_YES;
-    }
-    return GNUNET_OK;
-  }
-  /* target was revoked, check if it was used */
-  if ( (NULL == current_route) ||
-       (current_route->next_hop != neighbor) )
-  {
-    /* didn't matter, wasn't used */
-    return GNUNET_OK;
-  }
-  /* remove existing route */
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Lost route to %s\n",
-              GNUNET_i2s (&current_route->target.peer));
-  GNUNET_assert (GNUNET_YES ==
-                 GNUNET_CONTAINER_multipeermap_remove (all_routes, key, current_route));
-  send_disconnect_to_plugin (&current_route->target.peer);
-  release_route (current_route);
-  GNUNET_free (current_route);
-  neighbor->target_removed = GNUNET_YES;
-  return GNUNET_OK;
-}
-
-
-/**
- * Check if a target was added to the set of the other peer; if it
- * was added or impoves the existing route, do the needed updates.
- *
- * @param cls the `struct DirectNeighbor`
- * @param key peer identity for the target
- * @param value a `struct Target` now reachable via the given neighbor
- */
-static int
-check_target_added (void *cls,
-                   const struct GNUNET_PeerIdentity *key,
-                   void *value)
-{
-  struct DirectNeighbor *neighbor = cls;
-  struct Target *target = value;
-  struct Route *current_route;
-
-  /* target was revoked, check if it was used */
-  current_route = GNUNET_CONTAINER_multipeermap_get (all_routes,
-                                                    key);
-  if (NULL != current_route)
-  {
-    /* route exists */
-    if (current_route->next_hop == neighbor)
-    {
-      /* we had the same route before, no change in target */
-      if (ntohl (target->distance) + 1 != ntohl (current_route->target.distance))
-      {
-        /* but distance changed! */
-        if (ntohl (target->distance) + 1 > DEFAULT_FISHEYE_DEPTH)
-        {
-          /* distance increased beyond what is allowed, kill route */
-          GNUNET_assert (GNUNET_YES ==
-                         GNUNET_CONTAINER_multipeermap_remove (all_routes,
-                                                               key,
-                                                               current_route));
-          send_disconnect_to_plugin (key);
-          release_route (current_route);
-          GNUNET_free (current_route);
-        }
-        else
-        {
-          /* distance decreased, update route */
-          move_route (current_route,
-                      ntohl (target->distance) + 1);
-          send_distance_change_to_plugin (&target->peer,
-                                          ntohl (target->distance) + 1,
-                                          neighbor->network);
-        }
-      }
-      return GNUNET_OK;
-    }
-    if (ntohl (current_route->target.distance) <= ntohl (target->distance) + 1)
-    {
-      /* alternative, shorter route exists, ignore */
-      return GNUNET_OK;
-    }
-    /* new route is better than the existing one, take over! */
-    /* NOTE: minor security issue: malicious peers may advertise
-       very short routes to take over longer paths; as we don't
-       check that the shorter routes actually work, a malicious
-       direct neighbor can use this to DoS our long routes */
-
-    move_route (current_route, ntohl (target->distance) + 1);
-    current_route->next_hop = neighbor;
-    send_distance_change_to_plugin (&target->peer,
-                                    ntohl (target->distance) + 1,
-                                    neighbor->network);
-    return GNUNET_OK;
-  }
-  /* new route */
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "Discovered new route to %s using %u hops\n",
-             GNUNET_i2s (&target->peer),
-             (unsigned int) (ntohl (target->distance) + 1));
-  current_route = GNUNET_new (struct Route);
-  current_route->next_hop = neighbor;
-  current_route->target.peer = target->peer;
-  allocate_route (current_route, ntohl (target->distance) + 1);
-  GNUNET_assert (GNUNET_YES ==
-                GNUNET_CONTAINER_multipeermap_put (all_routes,
-                                                   &current_route->target.peer,
-                                                   current_route,
-                                                   GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
-
-  send_connect_to_plugin (&current_route->target.peer,
-                         ntohl (current_route->target.distance),
-                         neighbor->network);
-  return GNUNET_OK;
-}
-
-
-/**
- * Callback for set operation results. Called for each element
- * in the result set.
- * We have learned a new route from the other peer.  Add it to the
- * route set we're building.
- *
- * @param cls the `struct DirectNeighbor` we're building the consensus with
- * @param element a result element, only valid if status is #GNUNET_SET_STATUS_OK
- * @param current_size current set size
- * @param status see `enum GNUNET_SET_Status`
- */
-static void
-handle_set_union_result (void *cls,
-                        const struct GNUNET_SET_Element *element,
-                         uint64_t current_size,
-                        enum GNUNET_SET_Status status)
-{
-  struct DirectNeighbor *neighbor = cls;
-  struct DirectNeighbor *dn;
-  struct Target *target;
-  const struct Target *ctarget;
-  char *status_str;
-
-  switch (status)
-  {
-  case GNUNET_SET_STATUS_OK:
-    status_str = "GNUNET_SET_STATUS_OK";
-    break;
-  case GNUNET_SET_STATUS_FAILURE:
-    status_str = "GNUNET_SET_STATUS_FAILURE";
-    break;
-  case GNUNET_SET_STATUS_HALF_DONE:
-    status_str = "GNUNET_SET_STATUS_HALF_DONE";
-    break;
-  case GNUNET_SET_STATUS_DONE:
-    status_str = "GNUNET_SET_STATUS_DONE";
-    break;
-  default:
-    status_str = "UNDEFINED";
-    break;
-  }
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "Got SET union result: %s\n",
-             status_str);
-  switch (status)
-  {
-  case GNUNET_SET_STATUS_OK:
-    if (sizeof (struct Target) != element->size)
-    {
-      GNUNET_break_op (0);
-      return;
-    }
-    ctarget = element->data;
-    if ( (NULL !=
-          (dn = GNUNET_CONTAINER_multipeermap_get (direct_neighbors,
-                                                   &ctarget->peer))) &&
-         (DIRECT_NEIGHBOR_COST == dn->distance) )
-    {
-      /* this is a direct neighbor of ours, we do not care about routes
-         to this peer */
-      return;
-    }
-    target = GNUNET_new (struct Target);
-    GNUNET_memcpy (target, element->data, sizeof (struct Target));
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "Received information about peer `%s' with distance %u from SET\n",
-                GNUNET_i2s (&target->peer),
-                ntohl (target->distance) + 1);
-
-    if (NULL == neighbor->neighbor_table_consensus)
-      neighbor->neighbor_table_consensus
-        = GNUNET_CONTAINER_multipeermap_create (10, GNUNET_NO);
-    if (GNUNET_YES !=
-       GNUNET_CONTAINER_multipeermap_put (neighbor->neighbor_table_consensus,
-                                          &target->peer,
-                                          target,
-                                          GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY))
-    {
-      GNUNET_break_op (0);
-      GNUNET_free (target);
-    }
-    break;
-  case GNUNET_SET_STATUS_FAILURE:
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-               "Failed to establish DV union, will try again later\n");
-    neighbor->set_op = NULL;
-    if (NULL != neighbor->neighbor_table_consensus)
-    {
-      GNUNET_CONTAINER_multipeermap_iterate (neighbor->neighbor_table_consensus,
-                                            &free_targets,
-                                            NULL);
-      GNUNET_CONTAINER_multipeermap_destroy (neighbor->neighbor_table_consensus);
-      neighbor->neighbor_table_consensus = NULL;
-    }
-    if (0 < memcmp (&neighbor->peer,
-                   &my_identity,
-                   sizeof (struct GNUNET_PeerIdentity)))
-      neighbor->initiate_task = GNUNET_SCHEDULER_add_delayed (GNUNET_DV_CONSENSUS_FREQUENCY,
-                                                             &initiate_set_union,
-                                                             neighbor);
-    break;
-  case GNUNET_SET_STATUS_HALF_DONE:
-    break;
-  case GNUNET_SET_STATUS_DONE:
-    /* we got all of our updates; integrate routing table! */
-    neighbor->target_removed = GNUNET_NO;
-    if (NULL == neighbor->neighbor_table_consensus)
-      neighbor->neighbor_table_consensus = GNUNET_CONTAINER_multipeermap_create (10, GNUNET_NO);
-    if (NULL != neighbor->neighbor_table)
-      GNUNET_CONTAINER_multipeermap_iterate (neighbor->neighbor_table,
-                                             &check_target_removed,
-                                             neighbor);
-    if (GNUNET_YES == neighbor->target_removed)
-    {
-      /* check if we got an alternative for the removed routes */
-      schedule_refresh_routes ();
-    }
-    /* add targets that appeared (and check for improved routes) */
-    GNUNET_CONTAINER_multipeermap_iterate (neighbor->neighbor_table_consensus,
-                                           &check_target_added,
-                                           neighbor);
-    if (NULL != neighbor->neighbor_table)
-    {
-      GNUNET_CONTAINER_multipeermap_iterate (neighbor->neighbor_table,
-                                             &free_targets,
-                                             NULL);
-      GNUNET_CONTAINER_multipeermap_destroy (neighbor->neighbor_table);
-      neighbor->neighbor_table = NULL;
-    }
-    neighbor->neighbor_table = neighbor->neighbor_table_consensus;
-    neighbor->neighbor_table_consensus = NULL;
-
-    /* operation done, schedule next run! */
-    neighbor->set_op = NULL;
-    if (0 < memcmp (&neighbor->peer,
-                   &my_identity,
-                   sizeof (struct GNUNET_PeerIdentity)))
-      neighbor->initiate_task = GNUNET_SCHEDULER_add_delayed (GNUNET_DV_CONSENSUS_FREQUENCY,
-                                                             &initiate_set_union,
-                                                             neighbor);
-    break;
-  default:
-    GNUNET_break (0);
-    return;
-  }
-}
-
-
-/**
- * Start creating a new DV set union construction, our neighbour has
- * asked for it (callback for listening peer).
- *
- * @param cls the 'struct DirectNeighbor' of the peer we're building
- *        a routing consensus with
- * @param other_peer the other peer
- * @param context_msg message with application specific information from
- *        the other peer
- * @param request request from the other peer, use GNUNET_SET_accept
- *        to accept it, otherwise the request will be refused
- *        Note that we don't use a return value here, as it is also
- *        necessary to specify the set we want to do the operation with,
- *        whith sometimes can be derived from the context message.
- *        Also necessary to specify the timeout.
- */
-static void
-listen_set_union (void *cls,
-                 const struct GNUNET_PeerIdentity *other_peer,
-                 const struct GNUNET_MessageHeader *context_msg,
-                 struct GNUNET_SET_Request *request)
-{
-  struct DirectNeighbor *neighbor = cls;
-
-  if (NULL == request)
-    return; /* why??? */
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "Starting to create consensus with %s\n",
-             GNUNET_i2s (&neighbor->peer));
-  if (NULL != neighbor->set_op)
-  {
-    GNUNET_SET_operation_cancel (neighbor->set_op);
-    neighbor->set_op = NULL;
-  }
-  if (NULL != neighbor->my_set)
-  {
-    GNUNET_SET_destroy (neighbor->my_set);
-    neighbor->my_set = NULL;
-  }
-  neighbor->my_set = GNUNET_SET_create (cfg,
-                                       GNUNET_SET_OPERATION_UNION);
-  neighbor->set_op = GNUNET_SET_accept (request,
-                                       GNUNET_SET_RESULT_ADDED,
-                                        (struct GNUNET_SET_Option[]) {{ 0 }},
-                                       &handle_set_union_result,
-                                       neighbor);
-  neighbor->consensus_insertion_offset = 0;
-  neighbor->consensus_insertion_distance = 0;
-  neighbor->consensus_elements = 0;
-  build_set (neighbor);
-}
-
-
-/**
- * Start creating a new DV set union by initiating the connection.
- *
- * @param cls the `struct DirectNeighbor *` of the peer we're building
- *        a routing consensus with
- */
-static void
-initiate_set_union (void *cls)
-{
-  struct DirectNeighbor *neighbor = cls;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "Initiating SET union with peer `%s'\n",
-             GNUNET_i2s (&neighbor->peer));
-  neighbor->initiate_task = NULL;
-  neighbor->my_set = GNUNET_SET_create (cfg,
-                                       GNUNET_SET_OPERATION_UNION);
-  neighbor->set_op = GNUNET_SET_prepare (&neighbor->peer,
-                                         &neighbor->real_session_id,
-                                         NULL,
-                                         GNUNET_SET_RESULT_ADDED,
-                                         (struct GNUNET_SET_Option[]) {{ 0 }},
-                                         &handle_set_union_result,
-                                         neighbor);
-  neighbor->consensus_insertion_offset = 0;
-  neighbor->consensus_insertion_distance = 0;
-  neighbor->consensus_elements = 0;
-  build_set (neighbor);
-}
-
-
-/**
- * Check that @a rm is well-formed.
- *
- * @param cls closure
- * @param rm the message
- * @return #GNUNET_OK if @a rm is well-formed.
- */
-static int
-check_dv_route_message (void *cls,
-                       const struct RouteMessage *rm)
-{
-  const struct GNUNET_MessageHeader *payload;
-
-  if (ntohs (rm->header.size) < sizeof (struct RouteMessage) + sizeof (struct GNUNET_MessageHeader))
-  {
-    GNUNET_break_op (0);
-    return GNUNET_SYSERR;
-  }
-  payload = (const struct GNUNET_MessageHeader *) &rm[1];
-  if (ntohs (rm->header.size) != sizeof (struct RouteMessage) + ntohs (payload->size))
-  {
-    GNUNET_break_op (0);
-    return GNUNET_SYSERR;
-  }
-  return GNUNET_OK;
-}
-
-
-/**
- * Core handler for DV data messages.  Whatever this message
- * contains all we really have to do is rip it out of its
- * DV layering and give it to our pal the DV plugin to report
- * in with.
- *
- * @param cls closure
- * @param rm the message
- */
-static void
-handle_dv_route_message (void *cls,
-                        const struct RouteMessage *rm)
-{
-  struct DirectNeighbor *neighbor = cls;
-  const struct GNUNET_MessageHeader *payload;
-  struct Route *route;
-  struct DirectNeighbor *nneighbor;
-  struct DirectNeighbor *dn;
-  struct Target *target;
-  uint32_t distance;
-  char me[5];
-  char src[5];
-  char prev[5];
-  char dst[5];
-
-  distance = ntohl (rm->distance);
-  payload = (const struct GNUNET_MessageHeader *) &rm[1];
-  strncpy (prev, GNUNET_i2s (&neighbor->peer), 4);
-  strncpy (me, GNUNET_i2s (&my_identity), 4);
-  strncpy (src, GNUNET_i2s (&rm->sender), 4);
-  strncpy (dst, GNUNET_i2s (&rm->target), 4);
-  prev[4] = me[4] = src[4] = dst[4] = '\0';
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "Handling DV message with %u bytes payload of type %u from %s to %s routed by %s to me (%s @ hop %u)\n",
-              (unsigned int) (ntohs (rm->header.size) - sizeof (struct RouteMessage)),
-              ntohs (payload->type),
-              src,
-             dst,
-              prev,
-             me,
-              (unsigned int) distance + 1);
-
-  if (0 == memcmp (&rm->target,
-                  &my_identity,
-                  sizeof (struct GNUNET_PeerIdentity)))
-  {
-    if ((NULL !=
-        (dn = GNUNET_CONTAINER_multipeermap_get (direct_neighbors,
-                                                 &rm->sender))) &&
-       (DIRECT_NEIGHBOR_COST == dn->distance))
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                  "Discarding DV message, as %s is a direct neighbor\n",
-                  GNUNET_i2s (&rm->sender));
-      GNUNET_STATISTICS_update (stats,
-                                "# messages discarded (direct neighbor)",
-                                1, GNUNET_NO);
-      return;
-    }
-    /* message is for me, check reverse route! */
-    route = GNUNET_CONTAINER_multipeermap_get (all_routes,
-                                              &rm->sender);
-    if ( (NULL == route) &&
-         (distance < DEFAULT_FISHEYE_DEPTH) )
-    {
-      /* don't have reverse route yet, learn it! */
-      target = GNUNET_new (struct Target);
-      target->peer = rm->sender;
-      target->distance = htonl (distance);
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                  "Learning sender %s at distance %u from delivery!\n",
-                  GNUNET_i2s (&rm->sender),
-                  (unsigned int) distance + 1);
-      if (NULL == neighbor->neighbor_table)
-        neighbor->neighbor_table = GNUNET_CONTAINER_multipeermap_create (10, GNUNET_NO);
-      if (GNUNET_YES !=
-          GNUNET_CONTAINER_multipeermap_put (neighbor->neighbor_table,
-                                             &target->peer,
-                                             target,
-                                             GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY))
-      {
-        GNUNET_break_op (0);
-        GNUNET_free (target);
-        return;
-      }
-      add_new_route (target, neighbor);
-    }
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-               "Delivering %u bytes from %s to myself!\n",
-               ntohs (payload->size),
-                GNUNET_i2s (&rm->sender));
-    send_data_to_plugin (payload,
-                        &rm->sender,
-                        1 + distance);
-    return;
-  }
-  if ( (NULL == GNUNET_CONTAINER_multipeermap_get (direct_neighbors,
-                                                   &rm->sender)) &&
-       (NULL == GNUNET_CONTAINER_multipeermap_get (all_routes,
-                                                   &rm->sender)) )
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "Learning sender %s at distance %u from forwarding!\n",
-                GNUNET_i2s (&rm->sender),
-                1 + distance);
-    target = GNUNET_new (struct Target);
-    target->peer = rm->sender;
-    target->distance = htonl (distance);
-    if (NULL == neighbor->neighbor_table)
-      neighbor->neighbor_table = GNUNET_CONTAINER_multipeermap_create (10, GNUNET_NO);
-    if (GNUNET_YES !=
-        GNUNET_CONTAINER_multipeermap_put (neighbor->neighbor_table,
-                                           &target->peer,
-                                           target,
-                                           GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY))
-    {
-      GNUNET_break_op (0);
-      GNUNET_free (target);
-      return;
-    }
-    add_new_route (target, neighbor);
-  }
-
-  route = GNUNET_CONTAINER_multipeermap_get (all_routes,
-                                            &rm->target);
-  if (NULL == route)
-  {
-    nneighbor = GNUNET_CONTAINER_multipeermap_get (direct_neighbors,
-                                                  &rm->target);
-    if (NULL == nneighbor)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                  "No route to %s, not routing %u bytes!\n",
-                  GNUNET_i2s (&rm->target),
-                  ntohs (payload->size));
-      GNUNET_STATISTICS_update (stats,
-                                "# messages discarded (no route)",
-                                1, GNUNET_NO);
-      return;
-    }
-  }
-  else
-  {
-    nneighbor = route->next_hop;
-  }
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "Forwarding message to %s\n",
-             GNUNET_i2s (&nneighbor->peer));
-  forward_payload (nneighbor,
-                  distance + 1,
-                  &rm->sender,
-                  &rm->target,
-                  payload);
-}
-
-
-/**
- * Check that @a msg is well-formed
- *
- * @param cls identification of the client
- * @param message the actual message
- * @return #GNUNET_OK if @a msg is well-formed
- */
-static int
-check_dv_send_message (void *cls,
-                       const struct GNUNET_DV_SendMessage *msg)
-{
-  const struct GNUNET_MessageHeader *payload;
-
-  if (ntohs (msg->header.size) < sizeof (struct GNUNET_DV_SendMessage) +
-      sizeof (struct GNUNET_MessageHeader))
-  {
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-  payload = (const struct GNUNET_MessageHeader *) &msg[1];
-  if (ntohs (msg->header.size) != sizeof (struct GNUNET_DV_SendMessage) + ntohs (payload->size))
-  {
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-  return GNUNET_OK;
-}
-
-
-/**
- * Service server's handler for message send requests (which come
- * bubbling up to us through the DV plugin).
- *
- * @param cls identification of the client
- * @param message the actual message
- */
-static void
-handle_dv_send_message (void *cls,
-                        const struct GNUNET_DV_SendMessage *msg)
-{
-  struct GNUNET_SERVICE_Client *client = cls;
-  struct Route *route;
-  const struct GNUNET_MessageHeader *payload;
-
-  payload = (const struct GNUNET_MessageHeader *) &msg[1];
-  route = GNUNET_CONTAINER_multipeermap_get (all_routes,
-                                            &msg->target);
-  if (NULL == route)
-  {
-    /* got disconnected */
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "No route to %s, dropping local message of type %u\n",
-                GNUNET_i2s (&msg->target),
-                ntohs (payload->type));
-    GNUNET_STATISTICS_update (stats,
-                             "# local messages discarded (no route)",
-                             1, GNUNET_NO);
-    GNUNET_SERVICE_client_continue (client);
-    return;
-  }
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "Forwarding %u bytes of type %u to %s\n",
-             ntohs (payload->size),
-              ntohs (payload->type),
-             GNUNET_i2s (&msg->target));
-
-  forward_payload (route->next_hop,
-                  0 /* first hop, distance is zero */,
-                  &my_identity,
-                  &msg->target,
-                  payload);
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-/**
- * Cleanup all of the data structures associated with a given neighbor.
- *
- * @param neighbor neighbor to clean up
- */
-static void
-cleanup_neighbor (struct DirectNeighbor *neighbor)
-{
-  handle_direct_disconnect (neighbor);
-  GNUNET_assert (GNUNET_YES ==
-                GNUNET_CONTAINER_multipeermap_remove (direct_neighbors,
-                                                      &neighbor->peer,
-                                                      neighbor));
-  GNUNET_free (neighbor);
-}
-
-
-/**
- * Method called whenever a given peer disconnects.
- *
- * @param cls closure
- * @param peer peer identity this notification is about
- * @param internal_cls the corresponding `struct DirectNeighbor`
- */
-static void
-handle_core_disconnect (void *cls,
-                       const struct GNUNET_PeerIdentity *peer,
-                       void *internal_cls)
-{
-  struct DirectNeighbor *neighbor = internal_cls;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Received core peer disconnect message for peer `%s'!\n",
-             GNUNET_i2s (peer));
-  /* Check for disconnect from self message */
-  if (NULL == neighbor)
-    return;
-  GNUNET_break (GNUNET_YES == neighbor->connected);
-  neighbor->connected = GNUNET_NO;
-  if (DIRECT_NEIGHBOR_COST == neighbor->distance)
-  {
-    GNUNET_STATISTICS_update (stats,
-                             "# peers connected (1-hop)",
-                             -1,
-                             GNUNET_NO);
-  }
-  cleanup_neighbor (neighbor);
-  if (GNUNET_YES == in_shutdown)
-    return;
-  schedule_refresh_routes ();
-}
-
-
-/**
- * Multipeermap iterator for freeing routes.  Should never be called.
- *
- * @param cls NULL
- * @param key key value stored under
- * @param value the route to be freed
- * @return #GNUNET_YES to continue iteration, #GNUNET_NO to stop
- */
-static int
-free_route (void *cls,
-            const struct GNUNET_PeerIdentity *key,
-            void *value)
-{
-  struct Route *route = value;
-
-  GNUNET_break (0);
-  GNUNET_assert (GNUNET_YES ==
-                GNUNET_CONTAINER_multipeermap_remove (all_routes, key, value));
-  release_route (route);
-  send_disconnect_to_plugin (&route->target.peer);
-  GNUNET_free (route);
-  return GNUNET_YES;
-}
-
-
-/**
- * Multipeermap iterator for freeing direct neighbors. Should never be called.
- *
- * @param cls NULL
- * @param key key value stored under
- * @param value the direct neighbor to be freed
- * @return #GNUNET_YES to continue iteration, #GNUNET_NO to stop
- */
-static int
-free_direct_neighbors (void *cls,
-                       const struct GNUNET_PeerIdentity *key,
-                       void *value)
-{
-  struct DirectNeighbor *neighbor = value;
-
-  cleanup_neighbor (neighbor);
-  return GNUNET_YES;
-}
-
-
-/**
- * Task run during shutdown.
- *
- * @param cls unused
- */
-static void
-shutdown_task (void *cls)
-{
-  unsigned int i;
-
-  in_shutdown = GNUNET_YES;
-  GNUNET_assert (NULL != core_api);
-  GNUNET_CORE_disconnect (core_api);
-  core_api = NULL;
-  GNUNET_ATS_performance_done (ats);
-  ats = NULL;
-  GNUNET_CONTAINER_multipeermap_iterate (direct_neighbors,
-                                         &free_direct_neighbors,
-                                        NULL);
-  GNUNET_CONTAINER_multipeermap_iterate (all_routes,
-                                         &free_route,
-                                        NULL);
-  GNUNET_CONTAINER_multipeermap_destroy (direct_neighbors);
-  GNUNET_CONTAINER_multipeermap_destroy (all_routes);
-  GNUNET_STATISTICS_destroy (stats, GNUNET_NO);
-  stats = NULL;
-  GNUNET_notification_context_destroy (nc);
-  nc = NULL;
-  for (i=0;i<DEFAULT_FISHEYE_DEPTH;i++)
-  {
-    GNUNET_array_grow (consensi[i].targets,
-                      consensi[i].array_length,
-                      0);
-  }
-  if (NULL != rr_task)
-  {
-    GNUNET_SCHEDULER_cancel (rr_task);
-    rr_task = NULL;
-  }
-}
-
-
-/**
- * Notify newly connected client about an existing route.
- *
- * @param cls the `struct GNUNET_SERVICE_Client *`
- * @param key peer identity
- * @param value the `struct Route *`
- * @return #GNUNET_OK (continue to iterate)
- */
-static int
-notify_client_about_route (void *cls,
-                           const struct GNUNET_PeerIdentity *key,
-                           void *value)
-{
-  struct GNUNET_SERVICE_Client *client = cls;
-  struct Route *route = value;
-  struct GNUNET_MQ_Envelope *env;
-  struct GNUNET_DV_ConnectMessage *cm;
-
-  env = GNUNET_MQ_msg (cm,
-                       GNUNET_MESSAGE_TYPE_DV_CONNECT);
-  cm->distance = htonl (route->target.distance);
-  cm->peer = route->target.peer;
-  GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client),
-                  env);
-  return GNUNET_OK;
-}
-
-
-/**
- * Handle START-message.  This is the first message sent to us
- * by the client (can only be one!).
- *
- * @param cls closure (always NULL)
- * @param client identification of the client
- * @param message the actual message
- */
-static void
-handle_start (void *cls,
-              const struct GNUNET_MessageHeader *message)
-{
-  struct GNUNET_SERVICE_Client *client = cls;
-
-  GNUNET_notification_context_add (nc,
-                                   GNUNET_SERVICE_client_get_mq (client));
-  GNUNET_SERVICE_client_continue (client);
-  GNUNET_CONTAINER_multipeermap_iterate (all_routes,
-                                        &notify_client_about_route,
-                                        client);
-}
-
-
-/**
- * Called on core init.
- *
- * @param cls unused
- * @param identity this peer's identity
- */
-static void
-core_init (void *cls,
-           const struct GNUNET_PeerIdentity *identity)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "I am peer: %s\n",
-              GNUNET_i2s (identity));
-  my_identity = *identity;
-}
-
-
-/**
- * Process dv requests.
- *
- * @param cls closure
- * @param c configuration to use
- * @param service the initialized service
- */
-static void
-run (void *cls,
-     const struct GNUNET_CONFIGURATION_Handle *c,
-     struct GNUNET_SERVICE_Handle *service)
-{
-  struct GNUNET_MQ_MessageHandler core_handlers[] = {
-    GNUNET_MQ_hd_var_size (dv_route_message,
-                           GNUNET_MESSAGE_TYPE_DV_ROUTE,
-                           struct RouteMessage,
-                           NULL),
-    GNUNET_MQ_handler_end ()
-  };
-  in_shutdown = GNUNET_NO;
-  cfg = c;
-  direct_neighbors = GNUNET_CONTAINER_multipeermap_create (128,
-                                                          GNUNET_NO);
-  all_routes = GNUNET_CONTAINER_multipeermap_create (65536,
-                                                    GNUNET_NO);
-  core_api = GNUNET_CORE_connect (cfg,
-                                 NULL,
-                                 &core_init,
-                                 &handle_core_connect,
-                                 &handle_core_disconnect,
-                                 core_handlers);
-
-  if (NULL == core_api)
-    return;
-  ats = GNUNET_ATS_performance_init (cfg,
-                                    &handle_ats_update,
-                                    NULL);
-  if (NULL == ats)
-  {
-    GNUNET_CORE_disconnect (core_api);
-    core_api = NULL;
-    return;
-  }
-  nc = GNUNET_notification_context_create (MAX_QUEUE_SIZE_PLUGIN);
-  stats = GNUNET_STATISTICS_create ("dv",
-                                   cfg);
-  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
-                                NULL);
-}
-
-
-/**
- * Callback called when a client connects to the service.
- *
- * @param cls closure for the service
- * @param c the new client that connected to the service
- * @param mq the message queue used to send messages to the client
- * @return @a c
- */
-static void *
-client_connect_cb (void *cls,
-                  struct GNUNET_SERVICE_Client *c,
-                  struct GNUNET_MQ_Handle *mq)
-{
-  return c;
-}
-
-
-/**
- * Callback called when a client disconnected from the service
- *
- * @param cls closure for the service
- * @param c the client that disconnected
- * @param internal_cls should be equal to @a c
- */
-static void
-client_disconnect_cb (void *cls,
-                     struct GNUNET_SERVICE_Client *c,
-                     void *internal_cls)
-{
-  GNUNET_assert (c == internal_cls);
-}
-
-
-/**
- * Define "main" method using service macro.
- */
-GNUNET_SERVICE_MAIN
-("dv",
- GNUNET_SERVICE_OPTION_NONE,
- &run,
- &client_connect_cb,
- &client_disconnect_cb,
- NULL,
- GNUNET_MQ_hd_fixed_size (start,
-                         GNUNET_MESSAGE_TYPE_DV_START,
-                         struct GNUNET_MessageHeader,
-                         NULL),
- GNUNET_MQ_hd_var_size (dv_send_message,
-                        GNUNET_MESSAGE_TYPE_DV_SEND,
-                        struct GNUNET_DV_SendMessage,
-                        NULL),
- GNUNET_MQ_handler_end ());
-
-
-/* end of gnunet-service-dv.c */
diff --git a/src/dv/plugin_transport_dv.c b/src/dv/plugin_transport_dv.c
deleted file mode 100644 (file)
index a99c170..0000000
+++ /dev/null
@@ -1,910 +0,0 @@
-/*
-     This file is part of GNUnet
-     Copyright (C) 2002--2014 GNUnet e.V.
-
-     GNUnet is free software: you can redistribute it and/or modify it
-     under the terms of the GNU Affero General Public License as published
-     by the Free Software Foundation, either version 3 of the License,
-     or (at your option) any later version.
-
-     GNUnet is distributed in the hope that it will be useful, but
-     WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     Affero General Public License for more details.
-    
-     You should have received a copy of the GNU Affero General Public License
-     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
-*/
-
-/**
- * @file dv/plugin_transport_dv.c
- * @brief DV transport service, takes incoming DV requests and deals with
- * the DV service
- * @author Nathan Evans
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_protocols.h"
-#include "gnunet_statistics_service.h"
-#include "gnunet_dv_service.h"
-#include "gnunet_transport_service.h"
-#include "gnunet_transport_plugin.h"
-#include "dv.h"
-
-
-#define LOG(kind,...) GNUNET_log_from (kind, "transport-dv",__VA_ARGS__)
-
-
-/**
- * Encapsulation of all of the state of the plugin.
- */
-struct Plugin;
-
-
-/**
- * Session handle for connections.
- */
-struct GNUNET_ATS_Session
-{
-  /**
-   * Pointer to the global plugin struct.
-   */
-  struct Plugin *plugin;
-
-  /**
-   * Address we use for the other peer.
-   */
-  struct GNUNET_HELLO_Address *address;
-
-  /**
-   * To whom are we talking to.
-   */
-  struct GNUNET_PeerIdentity sender;
-
-  /**
-   * Number of bytes waiting for transmission to this peer.
-   * FIXME: not set yet.
-   */
-  unsigned long long bytes_in_queue;
-
-  /**
-   * Number of messages waiting for transmission to this peer.
-   * FIXME: not set yet.
-   */
-  unsigned int msgs_in_queue;
-
-  /**
-   * Current distance to the given peer.
-   */
-  uint32_t distance;
-
-  /**
-   * Current network the next hop peer is located in
-   */
-  enum GNUNET_NetworkType network;
-
-  /**
-   * Does the transport service know about this session (and we thus
-   * need to call `session_end` when it is released?)
-   */
-  int active;
-
-};
-
-
-/**
- * Encapsulation of all of the state of the plugin.
- */
-struct Plugin
-{
-  /**
-   * Our environment.
-   */
-  struct GNUNET_TRANSPORT_PluginEnvironment *env;
-
-  /**
-   * Hash map of sessions (active and inactive).
-   */
-  struct GNUNET_CONTAINER_MultiPeerMap *sessions;
-
-  /**
-   * Copy of the handler array where the closures are
-   * set to this struct's instance.
-   */
-  struct GNUNET_SERVER_MessageHandler *handlers;
-
-  /**
-   * Handle to the DV service
-   */
-  struct GNUNET_DV_ServiceHandle *dvh;
-
-  /**
-   * Tokenizer for boxed messages.
-   */
-  struct GNUNET_SERVER_MessageStreamTokenizer *mst;
-
-  /**
-   * Function to call about session status changes.
-   */
-  GNUNET_TRANSPORT_SessionInfoCallback sic;
-
-  /**
-   * Closure for @e sic.
-   */
-  void *sic_cls;
-};
-
-
-/**
- * If a session monitor is attached, notify it about the new
- * session state.
- *
- * @param plugin our plugin
- * @param session session that changed state
- * @param state new state of the session
- */
-static void
-notify_session_monitor (struct Plugin *plugin,
-                        struct GNUNET_ATS_Session *session,
-                        enum GNUNET_TRANSPORT_SessionState state)
-{
-  struct GNUNET_TRANSPORT_SessionInfo info;
-
-  if (NULL == plugin->sic)
-    return;
-  memset (&info, 0, sizeof (info));
-  info.state = state;
-  info.is_inbound = GNUNET_SYSERR; /* hard to say */
-  info.num_msg_pending = session->msgs_in_queue;
-  info.num_bytes_pending = session->bytes_in_queue;
-  /* info.receive_delay remains zero as this is not supported by DV
-     (cannot selectively not receive from 'core') */
-  info.session_timeout = GNUNET_TIME_UNIT_FOREVER_ABS;
-  info.address = session->address;
-  plugin->sic (plugin->sic_cls,
-               session,
-               &info);
-}
-
-
-/**
- * Notify transport service about the change in distance.
- *
- * @param session session where the distance changed
- */
-static void
-notify_distance_change (struct GNUNET_ATS_Session *session)
-{
-  struct Plugin *plugin = session->plugin;
-
-  if (GNUNET_YES != session->active)
-    return;
-  plugin->env->update_address_distance (plugin->env->cls,
-                                        session->address,
-                                        session->distance);
-}
-
-
-/**
- * Function called by MST on each message from the box.
- *
- * @param cls closure with the `struct Plugin *`
- * @param client identification of the client (with the 'struct GNUNET_ATS_Session')
- * @param message the actual message
- * @return #GNUNET_OK on success
- */
-static int
-unbox_cb (void *cls,
-         void *client,
-         const struct GNUNET_MessageHeader *message)
-{
-  struct Plugin *plugin = cls;
-  struct GNUNET_ATS_Session *session = client;
-
-  session->active = GNUNET_YES;
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Delivering message of type %u with %u bytes from peer `%s'\n",
-       ntohs (message->type),
-       ntohs (message->size),
-       GNUNET_i2s (&session->sender));
-  plugin->env->receive (plugin->env->cls,
-                        session->address,
-                        session,
-                        message);
-  plugin->env->update_address_distance (plugin->env->cls,
-                                        session->address,
-                                        session->distance);
-  return GNUNET_OK;
-}
-
-
-/**
- * Handler for messages received from the DV service.
- *
- * @param cls closure with the plugin
- * @param sender sender of the message
- * @param distance how far did the message travel
- * @param msg actual message payload
- */
-static void
-handle_dv_message_received (void *cls,
-                           const struct GNUNET_PeerIdentity *sender,
-                           uint32_t distance,
-                           const struct GNUNET_MessageHeader *msg)
-{
-  struct Plugin *plugin = cls;
-  struct GNUNET_ATS_Session *session;
-
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Received DV_MESSAGE_RECEIVED message for peer `%s': new distance %u\n",
-       GNUNET_i2s (sender),
-       distance);
-  session = GNUNET_CONTAINER_multipeermap_get (plugin->sessions,
-                                              sender);
-  if (NULL == session)
-  {
-    GNUNET_break (0);
-    return;
-  }
-  if (GNUNET_MESSAGE_TYPE_DV_BOX == ntohs (msg->type))
-  {
-    /* need to unbox using MST */
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "Unboxing DV message using MST\n");
-    GNUNET_SERVER_mst_receive (plugin->mst,
-                              session,
-                              (const char *) &msg[1],
-                              ntohs (msg->size) - sizeof (struct GNUNET_MessageHeader),
-                              GNUNET_YES,
-                              GNUNET_NO);
-    return;
-  }
-  session->active = GNUNET_YES;
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Delivering message of type %u with %u bytes from peer `%s'\n",
-       ntohs (msg->type),
-       ntohs (msg->size),
-       GNUNET_i2s (sender));
-  plugin->env->receive (plugin->env->cls,
-                        session->address,
-                        session,
-                        msg);
-  plugin->env->update_address_distance (plugin->env->cls,
-                                        session->address,
-                                        session->distance);
-}
-
-
-/**
- * Function called if DV starts to be able to talk to a peer.
- *
- * @param cls closure with `struct Plugin *`
- * @param peer newly connected peer
- * @param distance distance to the peer
- * @param network the network the next hop is located in
- */
-static void
-handle_dv_connect (void *cls,
-                  const struct GNUNET_PeerIdentity *peer,
-                  uint32_t distance,
-                   enum GNUNET_NetworkType network)
-{
-  struct Plugin *plugin = cls;
-  struct GNUNET_ATS_Session *session;
-
-  GNUNET_break (GNUNET_NT_UNSPECIFIED != network);
-  /**
-   * This requires transport plugin to be linked to libgnunetats.
-   * If you remove it, also remove libgnunetats linkage from Makefile.am
-   */
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Received DV_CONNECT message for peer `%s' with next hop in network %s\n",
-       GNUNET_i2s (peer),
-       GNUNET_NT_to_string (network));
-
-  session = GNUNET_CONTAINER_multipeermap_get (plugin->sessions,
-                                              peer);
-  if (NULL != session)
-  {
-    GNUNET_break (0);
-    session->distance = distance;
-    notify_distance_change (session);
-    return; /* nothing to do */
-  }
-
-  session = GNUNET_new (struct GNUNET_ATS_Session);
-  session->address = GNUNET_HELLO_address_allocate (peer, "dv",
-                                                    NULL, 0,
-                                                    GNUNET_HELLO_ADDRESS_INFO_NONE);
-  session->sender = *peer;
-  session->plugin = plugin;
-  session->distance = distance;
-  session->network = network;
-  GNUNET_assert(GNUNET_YES ==
-                GNUNET_CONTAINER_multipeermap_put (plugin->sessions,
-                                                   &session->sender, session,
-                                                   GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
-
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Creating new DV session %p for peer `%s' at distance %u\n",
-       session,
-       GNUNET_i2s (peer),
-       distance);
-
-  session->active = GNUNET_YES;
-  plugin->env->session_start (plugin->env->cls,
-                              session->address,
-                              session,
-                              network);
-  plugin->env->update_address_distance (plugin->env->cls,
-                                        session->address,
-                                        session->distance);
-
-  notify_session_monitor (session->plugin,
-                          session,
-                          GNUNET_TRANSPORT_SS_UP);
-}
-
-
-/**
- * Function called if DV distance to a peer is changed.
- *
- * @param cls closure with `struct Plugin *`
- * @param peer connected peer
- * @param distance new distance to the peer
- * @param network network type used for the connection
- */
-static void
-handle_dv_distance_changed (void *cls,
-                           const struct GNUNET_PeerIdentity *peer,
-                           uint32_t distance,
-                            enum GNUNET_NetworkType network)
-{
-  struct Plugin *plugin = cls;
-  struct GNUNET_ATS_Session *session;
-
-  GNUNET_break (GNUNET_NT_UNSPECIFIED != network);
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Received `%s' message for peer `%s': new distance %u\n",
-       "DV_DISTANCE_CHANGED",
-       GNUNET_i2s (peer),
-       distance);
-  session = GNUNET_CONTAINER_multipeermap_get (plugin->sessions,
-                                              peer);
-  if (NULL == session)
-  {
-    GNUNET_break (0);
-    handle_dv_connect (plugin, peer, distance, network);
-    return;
-  }
-  session->distance = distance;
-  notify_distance_change (session);
-}
-
-
-/**
- * Release session object and clean up associated resources.
- *
- * @param session session to clean up
- */
-static void
-free_session (struct GNUNET_ATS_Session *session)
-{
-  struct Plugin *plugin = session->plugin;
-
-  GNUNET_assert (GNUNET_YES ==
-                GNUNET_CONTAINER_multipeermap_remove (plugin->sessions,
-                                                      &session->sender,
-                                                      session));
-
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Freeing session %p for peer `%s'\n",
-       session,
-       GNUNET_i2s (&session->sender));
-  if (GNUNET_YES == session->active)
-  {
-    notify_session_monitor (session->plugin,
-                           session,
-                           GNUNET_TRANSPORT_SS_DONE);
-    plugin->env->session_end (plugin->env->cls,
-                             session->address,
-                             session);
-    session->active = GNUNET_NO;
-  }
-  GNUNET_HELLO_address_free (session->address);
-  GNUNET_free (session);
-}
-
-
-/**
- * Function called if DV is no longer able to talk to a peer.
- *
- * @param cls closure with `struct Plugin *`
- * @param peer peer that disconnected
- */
-static void
-handle_dv_disconnect (void *cls,
-                      const struct GNUNET_PeerIdentity *peer)
-{
-  struct Plugin *plugin = cls;
-  struct GNUNET_ATS_Session *session;
-
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Received `%s' message for peer `%s'\n",
-       "DV_DISCONNECT",
-       GNUNET_i2s (peer));
-  session = GNUNET_CONTAINER_multipeermap_get (plugin->sessions,
-                                              peer);
-  if (NULL == session)
-    return; /* nothing to do */
-  free_session (session);
-}
-
-
-/**
- * Function that can be used by the transport service to transmit
- * a message using the plugin.
- *
- * @param cls closure
- * @param session the session used
- * @param priority how important is the message
- * @param msgbuf the message to transmit
- * @param msgbuf_size number of bytes in 'msgbuf'
- * @param timeout when should we time out
- * @param cont continuation to call once the message has
- *        been transmitted (or if the transport is ready
- *        for the next transmission call; or if the
- *        peer disconnected...)
- * @param cont_cls closure for @a cont
- * @return number of bytes used (on the physical network, with overheads);
- *         -1 on hard errors (i.e. address invalid); 0 is a legal value
- *         and does NOT mean that the message was not transmitted (DV)
- */
-static ssize_t
-dv_plugin_send (void *cls,
-               struct GNUNET_ATS_Session *session,
-                const char *msgbuf,
-                size_t msgbuf_size,
-                unsigned int priority,
-                struct GNUNET_TIME_Relative timeout,
-                GNUNET_TRANSPORT_TransmitContinuation cont,
-                void *cont_cls)
-{
-  struct Plugin *plugin = cls;
-  const struct GNUNET_MessageHeader *msg;
-  struct GNUNET_MessageHeader *box;
-
-  box = NULL;
-  msg = (const struct GNUNET_MessageHeader *) msgbuf;
-  if (ntohs (msg->size) != msgbuf_size)
-  {
-    /* need to box */
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "Boxing DV message\n");
-    box = GNUNET_malloc (sizeof (struct GNUNET_MessageHeader) + msgbuf_size);
-    box->type = htons (GNUNET_MESSAGE_TYPE_DV_BOX);
-    box->size = htons (sizeof (struct GNUNET_MessageHeader) + msgbuf_size);
-    GNUNET_memcpy (&box[1], msgbuf, msgbuf_size);
-    msg = box;
-  }
-  GNUNET_DV_send (plugin->dvh,
-                  &session->sender,
-                  msg);
-  cont (cont_cls,
-        &session->sender,
-        GNUNET_OK,
-        msgbuf_size, 0);
-  GNUNET_free_non_null (box);
-  return 0; /* DV */
-}
-
-
-/**
- * Function that can be used to force the plugin to disconnect
- * from the given peer and cancel all previous transmissions
- * (and their continuations).
- *
- * @param cls closure with the `struct Plugin *`
- * @param target peer from which to disconnect
- */
-static void
-dv_plugin_disconnect_peer (void *cls,
-                           const struct GNUNET_PeerIdentity *target)
-{
-  struct Plugin *plugin = cls;
-  struct GNUNET_ATS_Session *session;
-
-  session = GNUNET_CONTAINER_multipeermap_get (plugin->sessions,
-                                              target);
-  if (NULL == session)
-    return; /* nothing to do */
-  session->active = GNUNET_NO;
-}
-
-
-/**
- * Function that can be used to force the plugin to disconnect
- * from the given peer and cancel all previous transmissions
- * (and their continuations).
- *
- * @param cls closure with the `struct Plugin *`
- * @param session which session to disconnect
- * @return #GNUNET_OK
- */
-static int
-dv_plugin_disconnect_session (void *cls,
-                              struct GNUNET_ATS_Session *session)
-{
-  session->active = GNUNET_NO;
-  return GNUNET_OK;
-}
-
-
-/**
- * Convert the transports address to a nice, human-readable
- * format.
- *
- * @param cls closure
- * @param type name of the transport that generated the address
- * @param addr one of the addresses of the host, NULL for the last address
- *        the specific address format depends on the transport
- * @param addrlen length of the address
- * @param numeric should (IP) addresses be displayed in numeric form?
- * @param timeout after how long should we give up?
- * @param asc function to call on each string
- * @param asc_cls closure for @a asc
- */
-static void
-dv_plugin_address_pretty_printer (void *cls,
-                                  const char *type,
-                                  const void *addr,
-                                  size_t addrlen,
-                                  int numeric,
-                                  struct GNUNET_TIME_Relative timeout,
-                                  GNUNET_TRANSPORT_AddressStringCallback asc,
-                                  void *asc_cls)
-{
-  if ( (0 == addrlen) &&
-       (0 == strcmp (type, "dv")) )
-    asc (asc_cls,
-         "dv",
-         GNUNET_OK);
-  else
-    asc (asc_cls,
-         NULL,
-         GNUNET_SYSERR);
-  asc (asc_cls,
-       NULL,
-       GNUNET_OK);
-}
-
-
-/**
- * Convert the DV address to a pretty string.
- *
- * @param cls closure
- * @param addr the (hopefully) DV address
- * @param addrlen the length of the @a addr
- * @return string representing the DV address
- */
-static const char *
-dv_plugin_address_to_string (void *cls,
-                             const void *addr,
-                             size_t addrlen)
-{
-  if (0 != addrlen)
-  {
-    GNUNET_break (0); /* malformed */
-    return NULL;
-  }
-  return "dv";
-}
-
-
-/**
- * Another peer has suggested an address for this peer and transport
- * plugin.  Check that this could be a valid address.  This function
- * is not expected to 'validate' the address in the sense of trying to
- * connect to it but simply to see if the binary format is technically
- * legal for establishing a connection to this peer (and make sure that
- * the address really corresponds to our network connection/settings
- * and not some potential man-in-the-middle).
- *
- * @param cls closure
- * @param addr pointer to the address
- * @param addrlen length of @a addr
- * @return #GNUNET_OK if this is a plausible address for this peer
- *         and transport, #GNUNET_SYSERR if not
- *
- */
-static int
-dv_plugin_check_address (void *cls,
-                         const void *addr,
-                         size_t addrlen)
-{
-  if (0 != addrlen)
-    return GNUNET_SYSERR;
-  return GNUNET_OK;
-}
-
-
-/**
- * Create a new session to transmit data to the target
- * This session will used to send data to this peer and the plugin will
- * notify us by calling the env->session_end function
- *
- * @param cls the plugin
- * @param address the address
- * @return the session if the address is valid, NULL otherwise
- */
-static struct GNUNET_ATS_Session *
-dv_get_session (void *cls,
-               const struct GNUNET_HELLO_Address *address)
-{
-  struct Plugin *plugin = cls;
-  struct GNUNET_ATS_Session *session;
-
-  if (0 != address->address_length)
-    return NULL;
-  session = GNUNET_CONTAINER_multipeermap_get (plugin->sessions,
-                                              &address->peer);
-  if (NULL == session)
-    return NULL; /* not valid right now */
-  session->active = GNUNET_YES;
-  return session;
-}
-
-
-/**
- * Function called to convert a string address to
- * a binary address.
- *
- * @param cls closure ('struct Plugin*')
- * @param addr string address
- * @param addrlen length of the @a addr including \0 termination
- * @param buf location to store the buffer
- *        If the function returns #GNUNET_SYSERR, its contents are undefined.
- * @param added length of created address
- * @return #GNUNET_OK on success, #GNUNET_SYSERR on failure
- */
-static int
-dv_plugin_string_to_address (void *cls,
-                            const char *addr,
-                            uint16_t addrlen,
-                            void **buf,
-                            size_t *added)
-{
-  if ( (addrlen == 3) &&
-       (0 == strcmp ("dv", addr)) )
-  {
-    *added = 0;
-    return GNUNET_OK;
-  }
-  return GNUNET_SYSERR;
-}
-
-
-/**
- * Function that will be called whenever the transport service wants to
- * notify the plugin that a session is still active and in use and
- * therefore the session timeout for this session has to be updated
- *
- * @param cls closure (`struct Plugin *`)
- * @param peer which peer was the session for
- * @param session which session is being updated
- */
-static void
-dv_plugin_update_session_timeout (void *cls,
-                                  const struct GNUNET_PeerIdentity *peer,
-                                  struct GNUNET_ATS_Session *session)
-{
-  /* DV currently doesn't time out like "normal" plugins,
-     so it should be safe to do nothing, right?
-     (or should we add an internal timeout?) */
-}
-
-
-/**
- * Function to obtain the network type for a session
- * FIXME: we should probably look at the network type
- * used by the next hop here.  Or find some other way
- * to properly allow ATS-DV resource allocation.
- *
- * @param cls closure (`struct Plugin *`)
- * @param session the session
- * @return the network type
- */
-static enum GNUNET_NetworkType
-dv_get_network (void *cls,
-               struct GNUNET_ATS_Session *session)
-{
-  GNUNET_assert (NULL != session);
-  return session->network;
-}
-
-
-/**
- * Function obtain the network type for an address.
- *
- * @param cls closure (`struct Plugin *`)
- * @param address the address
- * @return the network type
- */
-static enum GNUNET_NetworkType
-dv_plugin_get_network_for_address (void *cls,
-                                   const struct GNUNET_HELLO_Address *address)
-{
-  return GNUNET_NT_WAN; /* FOR NOW */
-}
-
-
-/**
- * Function that is called to get the keepalive factor.
- * #GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT is divided by this number to
- * calculate the interval between keepalive packets.
- *
- * @param cls closure with the `struct Plugin`
- * @return keepalive factor
- */
-static unsigned int
-dv_plugin_query_keepalive_factor (void *cls)
-{
-  return 3;
-}
-
-
-/**
- * Return information about the given session to the
- * monitor callback.
- *
- * @param cls the `struct Plugin` with the monitor callback (`sic`)
- * @param peer peer we send information about
- * @param value our `struct GNUNET_ATS_Session` to send information about
- * @return #GNUNET_OK (continue to iterate)
- */
-static int
-send_session_info_iter (void *cls,
-                        const struct GNUNET_PeerIdentity *peer,
-                        void *value)
-{
-  struct Plugin *plugin = cls;
-  struct GNUNET_ATS_Session *session = value;
-
-  if (GNUNET_YES != session->active)
-    return GNUNET_OK;
-  notify_session_monitor (plugin,
-                          session,
-                          GNUNET_TRANSPORT_SS_UP);
-  return GNUNET_OK;
-}
-
-
-/**
- * Begin monitoring sessions of a plugin.  There can only
- * be one active monitor per plugin (i.e. if there are
- * multiple monitors, the transport service needs to
- * multiplex the generated events over all of them).
- *
- * @param cls closure of the plugin
- * @param sic callback to invoke, NULL to disable monitor;
- *            plugin will being by iterating over all active
- *            sessions immediately and then enter monitor mode
- * @param sic_cls closure for @a sic
- */
-static void
-dv_plugin_setup_monitor (void *cls,
-                          GNUNET_TRANSPORT_SessionInfoCallback sic,
-                          void *sic_cls)
-{
-  struct Plugin *plugin = cls;
-
-  plugin->sic = sic;
-  plugin->sic_cls = sic_cls;
-  if (NULL != sic)
-  {
-    GNUNET_CONTAINER_multipeermap_iterate (plugin->sessions,
-                                           &send_session_info_iter,
-                                           plugin);
-    /* signal end of first iteration */
-    sic (sic_cls, NULL, NULL);
-  }
-}
-
-
-/**
- * Entry point for the plugin.
- *
- * @param cls closure with the plugin environment
- * @return plugin API
- */
-void *
-libgnunet_plugin_transport_dv_init (void *cls)
-{
-  struct GNUNET_TRANSPORT_PluginEnvironment *env = cls;
-  struct GNUNET_TRANSPORT_PluginFunctions *api;
-  struct Plugin *plugin;
-
-  plugin = GNUNET_new (struct Plugin);
-  plugin->env = env;
-  plugin->sessions = GNUNET_CONTAINER_multipeermap_create (1024 * 8, GNUNET_YES);
-  plugin->mst = GNUNET_SERVER_mst_create (&unbox_cb,
-                                         plugin);
-  plugin->dvh = GNUNET_DV_service_connect (env->cfg,
-                                          plugin,
-                                          &handle_dv_connect,
-                                          &handle_dv_distance_changed,
-                                          &handle_dv_disconnect,
-                                          &handle_dv_message_received);
-  if (NULL == plugin->dvh)
-  {
-    GNUNET_CONTAINER_multipeermap_destroy (plugin->sessions);
-    GNUNET_SERVER_mst_destroy (plugin->mst);
-    GNUNET_free (plugin);
-    return NULL;
-  }
-  api = GNUNET_new (struct GNUNET_TRANSPORT_PluginFunctions);
-  api->cls = plugin;
-  api->send = &dv_plugin_send;
-  api->disconnect_peer = &dv_plugin_disconnect_peer;
-  api->disconnect_session = &dv_plugin_disconnect_session;
-  api->address_pretty_printer = &dv_plugin_address_pretty_printer;
-  api->check_address = &dv_plugin_check_address;
-  api->address_to_string = &dv_plugin_address_to_string;
-  api->string_to_address = &dv_plugin_string_to_address;
-  api->query_keepalive_factor = &dv_plugin_query_keepalive_factor;
-  api->get_session = &dv_get_session;
-  api->get_network = &dv_get_network;
-  api->get_network_for_address = &dv_plugin_get_network_for_address;
-  api->update_session_timeout = &dv_plugin_update_session_timeout;
-  api->setup_monitor = &dv_plugin_setup_monitor;
-  return api;
-}
-
-
-/**
- * Function called to free a session.
- *
- * @param cls NULL
- * @param key unused
- * @param value session to free
- * @return #GNUNET_OK (continue to iterate)
- */
-static int
-free_session_iterator (void *cls,
-                      const struct GNUNET_PeerIdentity *key,
-                      void *value)
-{
-  struct GNUNET_ATS_Session *session = value;
-
-  free_session (session);
-  return GNUNET_OK;
-}
-
-
-/**
- * Exit point from the plugin.
- *
- * @param cls plugin API
- * @return NULL
- */
-void *
-libgnunet_plugin_transport_dv_done (void *cls)
-{
-  struct GNUNET_TRANSPORT_PluginFunctions *api = cls;
-  struct Plugin *plugin = api->cls;
-
-  GNUNET_DV_service_disconnect (plugin->dvh);
-  GNUNET_CONTAINER_multipeermap_iterate (plugin->sessions,
-                                        &free_session_iterator,
-                                        NULL);
-  GNUNET_CONTAINER_multipeermap_destroy (plugin->sessions);
-  GNUNET_SERVER_mst_destroy (plugin->mst);
-  GNUNET_free (plugin);
-  GNUNET_free (api);
-  return NULL;
-}
-
-/* end of plugin_transport_dv.c */
diff --git a/src/dv/template_dv.conf b/src/dv/template_dv.conf
deleted file mode 100644 (file)
index d371542..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-# Peers:
-#
-# `G3FK2T8AMPJ0H556QXEYVTEW409BP3KHPCG99TV66V8NYAS1KEWG'
-# `6DEVS8Y51AT0TGNNHR7A75H47XXYJEFRZXX5RVQ9Q6S7Z49SYXT0'
-# `6YNBKM6TTK64FAG9DF0292AW5JA9CCAC04JTY0HF8XHP635HPBBG'
-# `DK5WZKKDHH06BH1H0DE0Z8CPBTG9AD8P85SF02WW3285AT3V0V50'
-#
-
-[testbed]
-OVERLAY_TOPOLOGY = CLIQUE
-SETUP_TIMEOUT = 3 m
-OPERATION_TIMEOUT = 30 s
-CACHE_SIZE = 0
-
-[transport-blacklist-G3FK2T8AMPJ0H556QXEYVTEW409BP3KHPCG99TV66V8NYAS1KEWG]
-6DEVS8Y51AT0TGNNHR7A75H47XXYJEFRZXX5RVQ9Q6S7Z49SYXT0 = tcp
-
-[transport-blacklist-6DEVS8Y51AT0TGNNHR7A75H47XXYJEFRZXX5RVQ9Q6S7Z49SYXT0]
-G3FK2T8AMPJ0H556QXEYVTEW409BP3KHPCG99TV66V8NYAS1KEWG = tcp
-
-[transport-blacklist-6YNBKM6TTK64FAG9DF0292AW5JA9CCAC04JTY0HF8XHP635HPBBG]
-
-[transport-blacklist-DK5WZKKDHH06BH1H0DE0Z8CPBTG9AD8P85SF02WW3285AT3V0V50]
-
-[PATHS]
-GNUNET_TEST_HOME = $GNUNET_TMP/test-gnunet-dv-testing/
-
-[peerinfo]
-USE_INCLUDED_HELLOS = NO
-
-[nat]
-RETURN_LOCAL_ADDRESSES = YES
-
diff --git a/src/dv/test_transport_blacklist.c b/src/dv/test_transport_blacklist.c
deleted file mode 100644 (file)
index 4fc9b49..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
-     This file is part of GNUnet.
-     Copyright (C) 2009, 2013 GNUnet e.V.
-
-     GNUnet is free software: you can redistribute it and/or modify it
-     under the terms of the GNU Affero General Public License as published
-     by the Free Software Foundation, either version 3 of the License,
-     or (at your option) any later version.
-
-     GNUnet is distributed in the hope that it will be useful, but
-     WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     Affero General Public License for more details.
-    
-     You should have received a copy of the GNU Affero General Public License
-     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
-*/
-/**
- * @file dv/test_transport_blacklist.c
- * @brief base testcase for testing blacklist
- */
-#include "platform.h"
-#include "gnunet_core_service.h"
-#include "gnunet_testbed_service.h"
-
-/**
- * Return value from main, set to 0 on success.
- */
-static int ok;
-
-
-static void
-test_connection (void *cls,
-                 struct GNUNET_TESTBED_RunHandle *h,
-                unsigned int num_peers,
-                struct GNUNET_TESTBED_Peer **peers,
-                 unsigned int links_succeeded,
-                 unsigned int links_failed)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Links successful %u / %u failed\n", links_succeeded, links_failed);
-  if ( (4 == num_peers) && (0 == links_failed) )
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-               "Testbed connect peers despite blacklist!\n");
-    ok = 1;
-  }
-  else
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-               "Note that getting a message about a timeout during setup is expected for this test.\n");
-  }
-  GNUNET_SCHEDULER_shutdown ();
-}
-
-
-int
-main (int argc, char *argv[])
-{
-  (void) GNUNET_TESTBED_test_run ("test-transport-blacklist",
-                                 "test_transport_blacklist_data.conf",
-                                 4,
-                                 0, NULL, NULL,
-                                 &test_connection, NULL);
-  return ok;
-}
-
-/* end of test_transport_blacklist.c */
diff --git a/src/dv/test_transport_blacklist_data.conf b/src/dv/test_transport_blacklist_data.conf
deleted file mode 100644 (file)
index ea55a19..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-@INLINE@ template_dv.conf
-
-[transport]
-PORT = 52565
-PLUGINS = tcp 
diff --git a/src/dv/test_transport_dv.c b/src/dv/test_transport_dv.c
deleted file mode 100644 (file)
index 03b6087..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
-     This file is part of GNUnet.
-     Copyright (C) 2009, 2013 GNUnet e.V.
-
-     GNUnet is free software: you can redistribute it and/or modify it
-     under the terms of the GNU Affero General Public License as published
-     by the Free Software Foundation, either version 3 of the License,
-     or (at your option) any later version.
-
-     GNUnet is distributed in the hope that it will be useful, but
-     WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     Affero General Public License for more details.
-    
-     You should have received a copy of the GNU Affero General Public License
-     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
-*/
-/**
- * @file dv/test_transport_dv.c
- * @brief base testcase for testing distance vector transport
- */
-#include "platform.h"
-#include "gnunet_core_service.h"
-#include "gnunet_testbed_service.h"
-
-/**
- * Return value from main, set to 0 on success.
- */
-static int ok;
-
-struct GNUNET_TESTBED_Operation *topology_op;
-
-static struct GNUNET_SCHEDULER_Task * shutdown_task;
-
-
-static void
-do_shutdown (void *cls)
-{
-  shutdown_task = NULL;
-  if (NULL != topology_op)
-  {
-    GNUNET_TESTBED_operation_done (topology_op);
-    topology_op = NULL;
-  }
-}
-
-
-static void
-topology_completed (void *cls,
-                    unsigned int nsuccess,
-                    unsigned int nfailures)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Links successful %u / %u failed\n",
-              nsuccess,
-              nfailures);
-  GNUNET_TESTBED_operation_done (topology_op);
-  topology_op = NULL;
-
-  if (nfailures > 0)
-  {
-    fprintf (stderr,
-             "Error: links successful %u but %u failed\n",
-             nsuccess,
-             nfailures);
-    ok = 1;
-  }
-  else
-    ok = 0;
-
-  GNUNET_SCHEDULER_shutdown ();
-}
-
-
-static void
-test_connection (void *cls,
-                 struct GNUNET_TESTBED_RunHandle *h,
-                unsigned int num_peers,
-                struct GNUNET_TESTBED_Peer **peers,
-                 unsigned int links_succeeded,
-                 unsigned int links_failed)
-{
-  shutdown_task = GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
-                                                NULL);
-  if (4 != num_peers)
-  {
-    ok = 1;
-    fprintf (stderr,
-             "Only %u out of 4 peers were started ...\n",
-             num_peers);
-  }
-
-  if (0 != links_failed)
-  {
-    /* All peers except DV peers are connected  */
-    fprintf (stderr,
-             "Testbed failed to connect peers (%u links OK, %u links failed)\n",
-             links_succeeded,
-             links_failed);
-
-    topology_op = GNUNET_TESTBED_overlay_configure_topology
-      (NULL, num_peers, peers, NULL,
-       &topology_completed, NULL,
-       GNUNET_TESTBED_TOPOLOGY_CLIQUE,
-       GNUNET_TESTBED_TOPOLOGY_OPTION_END);
-    return;
-  }
-
-  ok = 1;
-  fprintf (stderr,
-           "Testbed connected peers, should not happen...\n");
-  GNUNET_SCHEDULER_shutdown ();
-}
-
-
-int
-main (int argc, char *argv[])
-{
-  ok = 1;
-  /* Connecting initial topology */
-  (void) GNUNET_TESTBED_test_run ("test-transport-dv",
-                                 "test_transport_dv_data.conf",
-                                 4,
-                                 0, NULL, NULL,
-                                 &test_connection, NULL);
-  return ok;
-}
-
-/* end of test_transport_dv.c */
diff --git a/src/dv/test_transport_dv_data.conf b/src/dv/test_transport_dv_data.conf
deleted file mode 100644 (file)
index a21fba8..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-@INLINE@ template_dv.conf
-
-[transport]
-PORT = 52565
-PLUGINS = tcp dv
-#PREFIX = valgrind --leak-check=full --track-fds=yes --leak-resolution=high
-
-[dv]
-START_ON_DEMAND = YES
-# PREFIX = valgrind --leak-check=full --track-fds=yes --leak-resolution=high
-
-[set]
-START_ON_DEMAND = YES
-# PREFIX = valgrind --leak-check=full --track-fds=yes --leak-resolution=high
-
-[core]
-# PREFIX = valgrind --leak-check=full --track-fds=yes --leak-resolution=high
-
-
index 33260a79408979c1a9ae5fe75ef5d5d1d346ebe4..d452bbf3c6bb32c6ef24afb6394cf57af0b8d577 100644 (file)
@@ -282,11 +282,6 @@ check_SCRIPTS += \
 endif
 endif
 
-if ENABLE_MONKEY
- MONKEY = @MONKEYPREFIX@
- AM_LDFLAGS = -no-install
-endif
-
 
 if ENABLE_TEST_RUN
 AM_TESTS_ENVIRONMENT=export GNUNET_PREFIX=$${GNUNET_PREFIX:-@libdir@};export PATH=$${GNUNET_PREFIX:-@prefix@}/bin:$$PATH;unset XDG_DATA_HOME;unset XDG_CONFIG_HOME; $(MONKEY)
index 92bcf776db0475f57472969615e394164524a6da..1e4c5c2685684fb95981b1b9872506ac4d74c814 100644 (file)
@@ -11,6 +11,8 @@ BINARY = gnunet-service-fs
 ACCEPT_FROM = 127.0.0.1;
 ACCEPT_FROM6 = ::1;
 
+# PREFIX = valgrind
+
 # Do we introduce artificial delays? (may improve anonymity)
 DELAY = YES
 
index 4a86a717f89ea324aa4a589bb30ce4030da93888..115f99391aa1c07f0ce7212ee0f25296b305a684 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -332,10 +332,7 @@ process_helper_msgs (void *cls,
       break;
     }
     if (NULL == ds->toplevel)
-    {
-      GNUNET_break (0);
       break;
-    }
     ds->progress_callback (ds->progress_callback_cls,
                           NULL, GNUNET_SYSERR,
                           GNUNET_FS_DIRSCANNER_ALL_COUNTED);
@@ -408,10 +405,7 @@ process_helper_msgs (void *cls,
       break;
     }
     if (NULL == ds->toplevel)
-    {
-      GNUNET_break (0);
       break;
-    }
     ds->stop_task = GNUNET_SCHEDULER_add_now (&finish_scan,
                                              ds);
     return GNUNET_OK;
index c7f3c4152e921c1d5d95c6cee625a923a7a90317..71ab1122c8ce3d0baceeb0318f6bf07e47a342d9 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -716,17 +716,21 @@ handle_index_start_failed (void *cls,
   struct GNUNET_FS_PublishContext *pc = cls;
   struct GNUNET_FS_FileInformation *p;
   const char *emsg = (const char *) &msg[1];
+  char *msgtxt;
 
   GNUNET_MQ_destroy (pc->mq);
   pc->mq = NULL;
   p = pc->fi_pos;
-  GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-              _("Can not index file `%s': %s.  Will try to insert instead.\n"),
-              p->filename,
-              gettext (emsg));
-  p->data.file.do_index = GNUNET_NO;
+  GNUNET_asprintf (&msgtxt,
+                   _("Can not index file `%s': %s.\n"),
+                   p->filename,
+                   gettext (emsg));
+  signal_publish_error (p,
+                        pc,
+                        msgtxt);
+  GNUNET_free (msgtxt);
   GNUNET_FS_file_information_sync_ (p);
-  publish_content (pc);
+  GNUNET_FS_publish_sync_ (pc);
 }
 
 
index a825795cbbcd092a5ff48b47cf3a5e82e5488998..eb8a7ed19e082b2c7d3b6b5f3c99fc9d539f26b4 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -684,7 +684,7 @@ directory_scan_cb (void *cls,
   case GNUNET_FS_DIRSCANNER_INTERNAL_ERROR:
     FPRINTF (stdout,
              "%s",
-             _("Internal error scanning directory.\n"));
+             _("Error scanning directory.\n"));
     ret = 1;
     GNUNET_SCHEDULER_shutdown ();
     break;
index 57d8eed5d9de4eb8489213eae60b8d64f030b5d5..3995b1b5b405161ff3c31a989fb789f6ab6ce682 100644 (file)
@@ -172,8 +172,11 @@ progress_cb (void *cls, const struct GNUNET_FS_ProgressInfo *info)
     is_directory =
         GNUNET_FS_meta_data_test_for_directory (info->value.search.
                                                 specifics.result.meta);
-    if (filename != NULL)
+    if (NULL != filename)
     {
+      while ( (filename[0] != '\0') &&
+             ('/' == filename[strlen(filename)-1]) )
+       filename[strlen(filename)-1] = '\0';
       GNUNET_DISK_filename_canonicalize (filename);
       if (GNUNET_YES == is_directory)
         printf ("gnunet-download -o \"%s%s\" -R %s\n", filename, GNUNET_FS_DIRECTORY_EXT, uri);
index 61f73a50a4af0a5125ce7432667e9b18ae6e5f6c..9ba250dfa9a4f17797d4310e9d5adcf0aaa0269d 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -469,8 +469,11 @@ reset_cadet (struct CadetHandle *mh)
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
              "Resetting cadet channel to %s\n",
              GNUNET_i2s (&mh->target));
-  GNUNET_CADET_channel_destroy (mh->channel);
-  mh->channel = NULL;
+  if (NULL != mh->channel)
+  {
+    GNUNET_CADET_channel_destroy (mh->channel);
+    mh->channel = NULL;
+  }
   GNUNET_CONTAINER_multihashmap_iterate (mh->waiting_map,
                                         &move_to_pending,
                                         mh);
@@ -741,7 +744,17 @@ GSF_cadet_release_clients (void *cls,
              "Timeout on cadet channel to %s\n",
              GNUNET_i2s (&mh->target));
   if (NULL != mh->channel)
-    GNUNET_CADET_channel_destroy (mh->channel);
+  {
+    struct GNUNET_CADET_Channel *channel = mh->channel;
+
+    mh->channel = NULL;
+    GNUNET_CADET_channel_destroy (channel);
+  }
+  if (NULL != mh->reset_task)
+  {
+    GNUNET_SCHEDULER_cancel (mh->reset_task);
+    mh->reset_task = NULL;
+  }
   return GNUNET_YES;
 }
 
index 416ab5db35f836a711ab2ce60d73ac81b5eb5e29..d5a036c28e0e550436f82dd3bec3d6486cda4cf3 100755 (executable)
@@ -18,6 +18,7 @@
 #    SPDX-License-Identifier: AGPL3.0-or-later
 #
 # Testcase for file-sharing command-line tools (publish, search, download)
+from __future__ import print_function
 import sys
 import os
 import subprocess
index 2b9a18f21abc5ff69628ff39f0222d4a5a6ba728..3bbb2eb3db6f6f40278a098078e8e08c6be88420 100644 (file)
@@ -4,3 +4,9 @@ gnunet-dns2gns
 gnunet-gns
 gnunet-gns-proxy
 gnunet-gns-benchmark
+test_gns_proxy
+local.crt
+local.der
+local.key
+server.csr
+gnunet-gns-proxy-setup-ca
index 1abc57d5760b4109a732852ce02acea99d060aec..434d50f34c4d0dce0cd712e9146ce8a5f8ac2df6 100644 (file)
@@ -14,7 +14,8 @@ EXTRA_DIST = \
   test_gns_simple_lookup.conf \
   gns-helper-service-w32.conf \
   w32nsp.def \
-  gnunet-gns-proxy-setup-ca \
+  openssl.cnf \
+  gnunet-gns-proxy-setup-ca.in \
   zonefiles/J7POEUT41A8PBFS7KVVDRF88GBOU4HK8PSU5QKVLVE3R9T91E99G.zkey \
   zonefiles/OEFL7A4VEF1B40QLEMTG5D8G1CN6EN16QUSG5R2DT71GRJN34LSG.zkey \
   zonefiles/test_zonekey \
@@ -79,19 +80,30 @@ bin_PROGRAMS = \
 noinst_PROGRAMS = \
   gnunet-gns-benchmark
 
+pkgdata_DATA = \
+  openssl.cnf
+
 if HAVE_MHD
 if LINUX
 bin_PROGRAMS += gnunet-bcd
 endif
 endif
 
-bin_SCRIPTS = gnunet-gns-proxy-setup-ca
-
 plugin_LTLIBRARIES = \
   libgnunet_plugin_block_gns.la \
   libgnunet_plugin_gnsrecord_gns.la
 
 
+bin_SCRIPTS = \
+  gnunet-gns-proxy-setup-ca
+
+# See: https://www.gnu.org/software/automake/manual/html_node/Scripts.html#Scripts
+do_subst = sed -e 's,[@]pkgdatadir[@],$(pkgdatadir),g'
+
+gnunet-gns-proxy-setup-ca: gnunet-gns-proxy-setup-ca.in Makefile
+       $(do_subst) < $(srcdir)/gnunet-gns-proxy-setup-ca.in > gnunet-gns-proxy-setup-ca
+       chmod +x gnunet-gns-proxy-setup-ca
+
 libgnunet_plugin_gnsrecord_gns_la_SOURCES = \
   plugin_gnsrecord_gns.c
 libgnunet_plugin_gnsrecord_gns_la_LIBADD = \
diff --git a/src/gns/gnunet-gns-proxy-setup-ca b/src/gns/gnunet-gns-proxy-setup-ca
deleted file mode 100644 (file)
index 7c1d58d..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/bin/sh
-# This shell script will generate an X509 certificate for your gnunet-gns-proxy
-# and install it (for both GNUnet and your browser).
-#
-
-# TODO: We should sed the real paths to the binaries involved here.
-
-if ! which openssl > /dev/null
-then
-    echo "'openssl' command not found. Please install it."
-    exit 1
-fi
-
-
-echo "Generating CA"
-options=''
-while getopts "c:" opt; do
-  case $opt in
-    c)
-      options="$options -c $OPTARG"
-      ;;
-    \?)
-      echo "Invalid option: -$OPTARG" >&2
-      exit 1
-      ;;
-    :)
-      echo "Option -$OPTARG requires an argument." >&2
-      exit 1
-      ;;
-  esac
-done
-
-GNSCERT=`mktemp /tmp/gnscertXXXXXX.pem`
-GNSCAKY=`mktemp /tmp/gnscakeyXXXXXX.pem`
-GNSCANO=`mktemp /tmp/gnscakeynoencXXXXXX.pem`
-GNS_CA_CERT_PEM=`gnunet-config -s gns-proxy -o PROXY_CACERT -f $options`
-mkdir -p `dirname $GNS_CA_CERT_PEM`
-
-openssl req -new -x509 -days 3650 -extensions v3_ca -keyout $GNSCAKY -out $GNSCERT -subj "/C=ZZ/L=World/O=GNU/OU=GNUnet/CN=GNS Proxy CA/emailAddress=bounce@gnunet.org" -passout pass:"GNU Name System"
-
-echo "Removing passphrase from key"
-openssl rsa -passin pass:"GNU Name System" -in $GNSCAKY -out $GNSCANO
-
-echo "Making private key available to gnunet-gns-proxy"
-cat $GNSCERT $GNSCANO > $GNS_CA_CERT_PEM
-
-if ! which certutil > /dev/null
-then
-  echo "'certutil' command not found. Not importing into browsers."
-else
-  echo "Importing CA into browsers"
-  for f in ~/.mozilla/firefox/*.*/
-  do
-    if [ -d $f ]; then
-      echo "Importing CA info Firefox at $f"
-      # delete old certificate (if any)
-      certutil -D -n "GNS Proxy CA" -d "$f" >/dev/null 2>/dev/null
-      # add new certificate
-      certutil -A -n "GNS Proxy CA" -t CT,, -d "$f" < $GNSCERT
-    fi
-  done
-
-  if [ -d ~/.pki/nssdb/ ]; then
-    echo "Importing CA into Chrome at ~/.pki/nssdb/"
-    # delete old certificate (if any)
-    certutil -D -n "GNS Proxy CA" -d ~/.pki/nssdb/ >/dev/null 2>/dev/null
-    # add new certificate
-    certutil -A -n "GNS Proxy CA" -t CT,, -d ~/.pki/nssdb/ < $GNSCERT
-  fi
-fi
-
-echo "Cleaning up."
-rm -f $GNSCAKY $GNSCANO $GNSCERT
-
-echo "==================================="
-echo "You can now start gnunet-gns-proxy."
-echo "Afterwards, configure your browser "
-echo " to use a SOCKS proxy on port 7777."
-echo "==================================="
diff --git a/src/gns/gnunet-gns-proxy-setup-ca.in b/src/gns/gnunet-gns-proxy-setup-ca.in
new file mode 100644 (file)
index 0000000..0a6fab1
--- /dev/null
@@ -0,0 +1,78 @@
+#!/bin/sh
+# This shell script will generate an X509 certificate for your gnunet-gns-proxy
+# and install it (for both GNUnet and your browser).
+#
+
+OPENSSLCFG=@pkgdatadir@/openssl.cnf
+if ! which openssl > /dev/null
+then
+    echo "'openssl' command not found. Please install it."
+    exit 1
+fi
+
+echo "Generating CA"
+options=''
+while getopts "c:" opt; do
+  case $opt in
+    c)
+      options="$options -c $OPTARG"
+      ;;
+    \?)
+      echo "Invalid option: -$OPTARG" >&2
+      exit 1
+      ;;
+    :)
+      echo "Option -$OPTARG requires an argument." >&2
+      exit 1
+      ;;
+  esac
+done
+
+GNSCERT=`mktemp /tmp/gnscertXXXXXX.pem`
+GNSCAKY=`mktemp /tmp/gnscakeyXXXXXX.pem`
+GNSCANO=`mktemp /tmp/gnscakeynoencXXXXXX.pem`
+GNS_CA_CERT_PEM=`gnunet-config -s gns-proxy -o PROXY_CACERT -f $options`
+mkdir -p `dirname $GNS_CA_CERT_PEM`
+
+openssl req -config $OPENSSLCFG -new -x509 -days 3650 -extensions v3_ca -keyout $GNSCAKY -out $GNSCERT -subj "/C=ZZ/L=World/O=GNU/OU=GNUnet/CN=GNS Proxy CA/emailAddress=bounce@gnunet.org" -passout pass:"GNU Name System"
+
+echo "Removing passphrase from key"
+openssl rsa -passin pass:"GNU Name System" -in $GNSCAKY -out $GNSCANO
+
+echo "Making private key available to gnunet-gns-proxy"
+cat $GNSCERT $GNSCANO > $GNS_CA_CERT_PEM
+
+if ! which certutil > /dev/null
+then
+  echo "The 'certutil' command was not found. Not importing into browsers."
+  echo "For 'certutil' install nss."
+else
+  echo "Importing CA into browsers"
+  for f in ~/.mozilla/firefox/*.*/
+  do
+    if [ -d $f ]; then
+      echo "Importing CA info Firefox at $f"
+      # delete old certificate (if any)
+      certutil -D -n "GNS Proxy CA" -d "$f" >/dev/null 2>/dev/null
+      # add new certificate
+      certutil -A -n "GNS Proxy CA" -t CT,, -d "$f" < $GNSCERT
+    fi
+  done
+
+  if [ -d ~/.pki/nssdb/ ]; then
+    echo "Importing CA into Chrome at ~/.pki/nssdb/"
+    # delete old certificate (if any)
+    certutil -D -n "GNS Proxy CA" -d ~/.pki/nssdb/ >/dev/null 2>/dev/null
+    # add new certificate
+    certutil -A -n "GNS Proxy CA" -t CT,, -d ~/.pki/nssdb/ < $GNSCERT
+  fi
+fi
+
+echo "Cleaning up."
+rm -f $GNSCAKY $GNSCANO $GNSCERT
+
+echo "==================================="
+echo "You can now start gnunet-gns-proxy."
+echo "Afterwards, configure your browser "
+echo " to use a SOCKS proxy on port 7777."
+echo "==================================="
index 21451651d5a40845218180cfa4f336d56c50d700..65a7b60183487a72893057e8ac38c3d1f62f7d92 100644 (file)
@@ -972,7 +972,7 @@ check_ssl_certificate (struct Socks5Request *s5r)
   if (CURLE_OK !=
       curl_easy_getinfo (s5r->curl,
                         CURLINFO_TLS_SESSION,
-                        (struct curl_slist **) &tlsinfo))
+                        &tlsinfo))
     return GNUNET_SYSERR;
   if (CURLSSLBACKEND_GNUTLS != tlsinfo->backend)
   {
@@ -2045,11 +2045,12 @@ create_response (void *cls,
         const char *us;
         long upload_size;
 
+        upload_size = 0;
         us = MHD_lookup_connection_value (con,
                                           MHD_HEADER_KIND,
                                           MHD_HTTP_HEADER_CONTENT_LENGTH);
         if ( (NULL != us) &&
-            (1 == sscanf (us,
+                    (1 == sscanf (us,
                            "%ld",
                            &upload_size)) &&
              (upload_size >= 0) )
@@ -2149,7 +2150,7 @@ create_response (void *cls,
       curl_easy_setopt (s5r->curl,
                         CURLOPT_USE_SSL,
                         CURLUSESSL_ALL);
-      if (NULL != s5r->dane_data)
+      if (0 < s5r->num_danes)
         curl_easy_setopt (s5r->curl,
                           CURLOPT_SSL_VERIFYPEER,
                           0L);
diff --git a/src/gns/openssl.cnf b/src/gns/openssl.cnf
new file mode 100644 (file)
index 0000000..503460f
--- /dev/null
@@ -0,0 +1,245 @@
+#
+# OpenSSL example configuration file.
+# This is mostly being used for generation of certificate requests.
+#
+
+# This definition stops the following lines choking if HOME isn't
+# defined.
+HOME                   = .
+RANDFILE               = $ENV::HOME/.rnd
+
+# Extra OBJECT IDENTIFIER info:
+#oid_file              = $ENV::HOME/.oid
+oid_section            = new_oids
+
+# To use this configuration file with the "-extfile" option of the
+# "openssl x509" utility, name here the section containing the
+# X.509v3 extensions to use:
+# extensions           = 
+# (Alternatively, use a configuration file that has only
+# X.509v3 extensions in its main [= default] section.)
+
+[ new_oids ]
+
+# We can add new OIDs in here for use by 'ca' and 'req'.
+# Add a simple OID like this:
+# testoid1=1.2.3.4
+# Or use config file substitution like this:
+# testoid2=${testoid1}.5.6
+
+####################################################################
+[ ca ]
+default_ca     = CA_default            # The default ca section
+
+####################################################################
+[ CA_default ]
+
+dir            = ./demoCA              # Where everything is kept
+certs          = $dir/certs            # Where the issued certs are kept
+crl_dir                = $dir/crl              # Where the issued crl are kept
+database       = $dir/index.txt        # database index file.
+new_certs_dir  = $dir/newcerts         # default place for new certs.
+
+certificate    = $dir/cacert.pem       # The CA certificate
+serial         = $dir/serial           # The current serial number
+crl            = $dir/crl.pem          # The current CRL
+private_key    = $dir/private/cakey.pem# The private key
+RANDFILE       = $dir/private/.rand    # private random number file
+
+x509_extensions        = usr_cert              # The extentions to add to the cert
+
+# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
+# so this is commented out by default to leave a V1 CRL.
+# crl_extensions       = crl_ext
+
+default_days   = 365                   # how long to certify for
+default_crl_days= 30                   # how long before next CRL
+default_md     = md5                   # which md to use.
+preserve       = no                    # keep passed DN ordering
+
+# A few difference way of specifying how similar the request should look
+# For type CA, the listed attributes must be the same, and the optional
+# and supplied fields are just that :-)
+policy         = policy_match
+
+# For the CA policy
+[ policy_match ]
+countryName            = match
+stateOrProvinceName    = match
+organizationName       = match
+organizationalUnitName = optional
+commonName             = supplied
+emailAddress           = optional
+
+# For the 'anything' policy
+# At this point in time, you must list all acceptable 'object'
+# types.
+[ policy_anything ]
+countryName            = optional
+stateOrProvinceName    = optional
+localityName           = optional
+organizationName       = optional
+organizationalUnitName = optional
+commonName             = supplied
+emailAddress           = optional
+
+####################################################################
+[ req ]
+default_bits           = 1024
+default_keyfile        = privkey.pem
+distinguished_name     = req_distinguished_name
+attributes             = req_attributes
+x509_extensions        = v3_ca # The extentions to add to the self signed cert
+
+# Passwords for private keys if not present they will be prompted for
+# input_password = secret
+# output_password = secret
+
+# This sets a mask for permitted string types. There are several options. 
+# default: PrintableString, T61String, BMPString.
+# pkix  : PrintableString, BMPString.
+# utf8only: only UTF8Strings.
+# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings).
+# MASK:XXXX a literal mask value.
+# WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings
+# so use this option with caution!
+string_mask = nombstr
+
+# req_extensions = v3_req # The extensions to add to a certificate request
+
+[ req_distinguished_name ]
+countryName                    = Country Name (2 letter code)
+countryName_default            = AU
+countryName_min                        = 2
+countryName_max                        = 2
+
+stateOrProvinceName            = State or Province Name (full name)
+stateOrProvinceName_default    = Some-State
+
+localityName                   = Locality Name (eg, city)
+
+0.organizationName             = Organization Name (eg, company)
+0.organizationName_default     = Internet Widgits Pty Ltd
+
+# we can do this but it is not needed normally :-)
+#1.organizationName            = Second Organization Name (eg, company)
+#1.organizationName_default    = World Wide Web Pty Ltd
+
+organizationalUnitName         = Organizational Unit Name (eg, section)
+#organizationalUnitName_default        =
+
+commonName                     = Common Name (eg, YOUR name)
+commonName_max                 = 64
+
+emailAddress                   = Email Address
+emailAddress_max               = 40
+
+# SET-ex3                      = SET extension number 3
+
+[ req_attributes ]
+challengePassword              = A challenge password
+challengePassword_min          = 4
+challengePassword_max          = 20
+
+unstructuredName               = An optional company name
+
+[ usr_cert ]
+
+# These extensions are added when 'ca' signs a request.
+
+# This goes against PKIX guidelines but some CAs do it and some software
+# requires this to avoid interpreting an end user certificate as a CA.
+
+basicConstraints=CA:FALSE
+
+# Here are some examples of the usage of nsCertType. If it is omitted
+# the certificate can be used for anything *except* object signing.
+
+# This is OK for an SSL server.
+# nsCertType                   = server
+
+# For an object signing certificate this would be used.
+# nsCertType = objsign
+
+# For normal client use this is typical
+# nsCertType = client, email
+
+# and for everything including object signing:
+# nsCertType = client, email, objsign
+
+# This is typical in keyUsage for a client certificate.
+# keyUsage = nonRepudiation, digitalSignature, keyEncipherment
+
+# This will be displayed in Netscape's comment listbox.
+nsComment                      = "OpenSSL Generated Certificate"
+
+# PKIX recommendations harmless if included in all certificates.
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid,issuer:always
+
+# This stuff is for subjectAltName and issuerAltname.
+# Import the email address.
+# subjectAltName=email:copy
+
+# Copy subject details
+# issuerAltName=issuer:copy
+
+#nsCaRevocationUrl             = http://www.domain.dom/ca-crl.pem
+#nsBaseUrl
+#nsRevocationUrl
+#nsRenewalUrl
+#nsCaPolicyUrl
+#nsSslServerName
+
+[ v3_req ]
+
+# Extensions to add to a certificate request
+
+basicConstraints = CA:FALSE
+keyUsage = nonRepudiation, digitalSignature, keyEncipherment
+
+[ v3_ca ]
+
+
+# Extensions for a typical CA
+
+
+# PKIX recommendation.
+
+subjectKeyIdentifier=hash
+
+authorityKeyIdentifier=keyid:always,issuer:always
+
+# This is what PKIX recommends but some broken software chokes on critical
+# extensions.
+#basicConstraints = critical,CA:true
+# So we do this instead.
+basicConstraints = CA:true
+
+# Key usage: this is typical for a CA certificate. However since it will
+# prevent it being used as an test self-signed certificate it is best
+# left out by default.
+# keyUsage = cRLSign, keyCertSign
+
+# Some might want this also
+# nsCertType = sslCA, emailCA
+
+# Include email address in subject alt name: another PKIX recommendation
+# subjectAltName=email:copy
+# Copy issuer details
+# issuerAltName=issuer:copy
+
+# DER hex encoding of an extension: beware experts only!
+# obj=DER:02:03
+# Where 'obj' is a standard or added object
+# You can even override a supported extension:
+# basicConstraints= critical, DER:30:03:01:01:FF
+
+[ crl_ext ]
+
+# CRL extensions.
+# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL.
+
+# issuerAltName=issuer:copy
+authorityKeyIdentifier=keyid:always,issuer:always
+
diff --git a/src/gns/test_gns_nick_shorten.conf b/src/gns/test_gns_nick_shorten.conf
deleted file mode 100644 (file)
index 317477c..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-@INLINE@ test_gns_defaults.conf
-
-[PATHS]
-GNUNET_TEST_HOME = $GNUNET_TMP/test-gnunet-gns-peer-1/
-
-[dht]
-START_ON_DEMAND = YES
-
-[transport]
-PLUGINS =
-
-[gns]
-#PREFIX = valgrind --leak-check=full --track-origins=yes
-START_ON_DEMAND = YES
-AUTO_IMPORT_PKEY = YES
-MAX_PARALLEL_BACKGROUND_QUERIES = 10
-DEFAULT_LOOKUP_TIMEOUT = 15 s
-RECORD_PUT_INTERVAL = 1 h
-ZONE_PUBLISH_TIME_WINDOW = 1 h
-DNS_ROOT=PD67SGHF3E0447TU9HADIVU9OM7V4QHTOG0EBU69TFRI2LG63DR0
-#USE_CACHE = NO
-
-[revocation]
-WORKBITS = 1
index 66adbb63122249f3de4f5cec1fe1f7b92eb12d76..c7c66bc27016674859762a12002733322573f575 100755 (executable)
@@ -7,6 +7,13 @@ if [ -z $LOCATION ]
 then
   LOCATION="gnunet-config"
 fi
+
+if [ -z $(which timeout) ]
+then
+  echo "timeout utility not found which is required for test."
+  exit 77
+fi
+
 $LOCATION --version 1> /dev/null
 if test $? != 0
 then
index 195cac0759fd3dbe79ec2b046587ab443fe7c668..4e84e023c54afd64258a304b0a60980c65abdc26 100644 (file)
@@ -33,6 +33,7 @@ gnunetinclude_HEADERS = \
   gnunet_ats_application_service.h \
   gnunet_ats_transport_service.h \
   gnunet_ats_plugin.h \
+  gnunet_ats_plugin_new.h \
   gnunet_bandwidth_lib.h \
   gnunet_bio_lib.h \
   gnunet_block_lib.h \
@@ -58,7 +59,6 @@ gnunetinclude_HEADERS = \
   gnunet_dnsparser_lib.h \
   gnunet_dnsstub_lib.h \
   gnunet_dns_service.h \
-  gnunet_dv_service.h \
   gnunet_fragmentation_lib.h \
   gnunet_friends_lib.h \
   gnunet_fs_service.h \
@@ -69,8 +69,8 @@ gnunetinclude_HEADERS = \
   gnunet_hello_lib.h \
   gnunet_helper_lib.h \
   gnunet_identity_service.h \
-       gnunet_abe_lib.h \
-       gnunet_reclaim_attribute_lib.h \
+  gnunet_abe_lib.h \
+  gnunet_reclaim_attribute_lib.h \
   gnunet_reclaim_attribute_plugin.h \
   gnunet_reclaim_plugin.h \
   gnunet_reclaim_service.h \
@@ -78,7 +78,6 @@ gnunetinclude_HEADERS = \
   gnunet_load_lib.h \
   gnunet_cadet_service.h \
   gnunet_microphone_lib.h \
-  gnunet_multicast_service.h \
   gnunet_mst_lib.h \
   gnunet_mq_lib.h \
   gnunet_my_lib.h \
@@ -101,19 +100,13 @@ gnunetinclude_HEADERS = \
   gnunet_peerstore_service.h \
   gnunet_plugin_lib.h \
   gnunet_pq_lib.h \
-  gnunet_psycstore_plugin.h \
-  gnunet_psycstore_service.h \
-  gnunet_psyc_service.h \
-  gnunet_psyc_util_lib.h \
-  gnunet_psyc_env.h \
-  gnunet_psyc_message.h \
-  gnunet_psyc_slicer.h \
   gnunet_program_lib.h \
   gnunet_protocols.h \
   gnunet_resolver_service.h \
   gnunet_regex_service.h \
   gnunet_rest_lib.h \
   gnunet_rest_plugin.h \
+       gnunet_rps_service.h \
   gnunet_revocation_service.h \
   gnunet_scalarproduct_service.h \
   gnunet_scheduler_lib.h \
@@ -122,7 +115,6 @@ gnunetinclude_HEADERS = \
   gnunet_set_service.h \
   gnunet_signal_lib.h \
   gnunet_signatures.h \
-  gnunet_social_service.h \
   gnunet_socks.h \
   gnunet_speaker_lib.h \
   gnunet_sq_lib.h \
@@ -133,6 +125,7 @@ gnunetinclude_HEADERS = \
   gnunet_testing_lib.h \
   gnunet_time_lib.h \
   gnunet_transport_service.h \
+  gnunet_transport_address_service.h \
   gnunet_transport_communication_service.h \
   gnunet_transport_core_service.h \
   gnunet_transport_hello_service.h \
index ac3d11216bf36ddd60581153c184d23d87eaf9fd..b8326657dfc8b4d6a9b384f7483a29e84da94cad 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -369,7 +369,7 @@ GNUNET_CADET_channel_get_info (struct GNUNET_CADET_Channel *channel,
 
 /**
  * Internal details about a channel.
- */ 
+ */
 struct GNUNET_CADET_ChannelInternals
 {
   /**
@@ -431,7 +431,7 @@ GNUNET_CADET_get_channel_cancel (struct GNUNET_CADET_ChannelMonitor *cm);
 
 /**
  * Information we return per peer.
- */ 
+ */
 struct GNUNET_CADET_PeerListEntry
 {
   /**
@@ -446,7 +446,7 @@ struct GNUNET_CADET_PeerListEntry
 
   /**
    * Number of disjoint known paths to @e peer.
-   */ 
+   */
   unsigned int n_paths;
 
   /**
@@ -504,7 +504,7 @@ GNUNET_CADET_list_peers_cancel (struct GNUNET_CADET_PeersLister *pl);
 
 /**
  * Detailed information we return per peer.
- */ 
+ */
 struct GNUNET_CADET_PeerPathDetail
 {
   /**
@@ -512,6 +512,11 @@ struct GNUNET_CADET_PeerPathDetail
    */
   struct GNUNET_PeerIdentity peer;
 
+  /**
+   * Offset of the target peer on the @e path.
+   */
+  unsigned int target_offset;
+
   /**
    * Number of entries on the @e path.
    */
@@ -583,7 +588,7 @@ struct GNUNET_CADET_TunnelDetails
 
   /**
    * How many channels use the tunnel.
-   */ 
+   */
   uint32_t channels;
 
   /**
@@ -597,8 +602,8 @@ struct GNUNET_CADET_TunnelDetails
   uint16_t estate;
 
   /**
-   * What is our connectivity state? 
-   */ 
+   * What is our connectivity state?
+   */
   uint16_t cstate;
 };
 
index e482e5ebef9c28b1f1a30881b949fa1c32aca389..ca49d31093cd06ab961eea7c94b0d2c8066a91cb 100644 (file)
@@ -119,6 +119,7 @@ extern "C"
  */
 #define GNUNET_VA_ARG_ENUM(va,X) ((enum X) va_arg (va, int))
 
+
 /**
  * @ingroup logging
  * define #GNUNET_EXTRA_LOGGING if using this header outside the GNUnet source
@@ -410,7 +411,7 @@ GNUNET_get_log_call_status (int caller_level,
  */
 void
 GNUNET_log_nocheck (enum GNUNET_ErrorType kind, const char *message, ...)
-  __attribute__ ((format (gnu_printf, 2, 3)));
+  __attribute__ ((format (printf, 2, 3)));
 
 /* from glib */
 #if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__)
diff --git a/src/include/gnunet_dv_service.h b/src/include/gnunet_dv_service.h
deleted file mode 100644 (file)
index 3349127..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
-     This file is part of GNUnet.
-     Copyright (C) 2013, 2016 GNUnet e.V.
-
-     GNUnet is free software: you can redistribute it and/or modify it
-     under the terms of the GNU Affero General Public License as published
-     by the Free Software Foundation, either version 3 of the License,
-     or (at your option) any later version.
-
-     GNUnet is distributed in the hope that it will be useful, but
-     WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     Affero General Public License for more details.
-    
-     You should have received a copy of the GNU Affero General Public License
-     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
-*/
-
-/**
- * @author Christian Grothoff
- *
- * @file
- * DV service API (should only be used by the DV plugin)
- *
- * @defgroup dv  DV service
- * Distance Vector routing
- *
- * The DV service API should only be used by the DV plugin.
- * @{
- */
-#ifndef GNUNET_SERVICE_DV_H
-#define GNUNET_SERVICE_DV_H
-
-#include "gnunet_util_lib.h"
-#include "gnunet_ats_service.h"
-
-/**
- * Signature of a function to be called if DV
- * starts to be able to talk to a peer.
- *
- * @param cls closure
- * @param peer newly connected peer
- * @param distance distance to the peer
- * @param network the peer is located in
- */
-typedef void
-(*GNUNET_DV_ConnectCallback)(void *cls,
-                             const struct GNUNET_PeerIdentity *peer,
-                             uint32_t distance,
-                             enum GNUNET_NetworkType network);
-
-
-/**
- * Signature of a function to be called if DV
- * distance to a peer is changed.
- *
- * @param cls closure
- * @param peer connected peer
- * @param distance new distance to the peer
- * @param network this network will be used to reach the next hop
- */
-typedef void
-(*GNUNET_DV_DistanceChangedCallback)(void *cls,
-                                     const struct GNUNET_PeerIdentity *peer,
-                                     uint32_t distance,
-                                     enum GNUNET_NetworkType network);
-
-
-/**
- * Signature of a function to be called if DV
- * is no longer able to talk to a peer.
- *
- * @param cls closure
- * @param peer peer that disconnected
- */
-typedef void
-(*GNUNET_DV_DisconnectCallback)(void *cls,
-                                const struct GNUNET_PeerIdentity *peer);
-
-
-/**
- * Signature of a function to be called if DV
- * receives a message for this peer.
- *
- * @param cls closure
- * @param sender sender of the message
- * @param distance how far did the message travel
- * @param msg actual message payload
- */
-typedef void
-(*GNUNET_DV_MessageReceivedCallback)(void *cls,
-                                     const struct GNUNET_PeerIdentity *sender,
-                                     uint32_t distance,
-                                     const struct GNUNET_MessageHeader *msg);
-
-
-/**
- * Signature of a function called once the delivery of a
- * message has been successful.
- *
- * @param cls closure
- */
-typedef void
-(*GNUNET_DV_MessageSentCallback)(void *cls);
-
-
-/**
- * Handle to the DV service.
- */
-struct GNUNET_DV_ServiceHandle;
-
-
-/**
- * Connect to the DV service.
- *
- * @param cfg configuration
- * @param cls closure for callbacks
- * @param connect_cb function to call on connects
- * @param distance_cb function to call if distances change
- * @param disconnect_cb function to call on disconnects
- * @param message_cb function to call if we receive messages
- * @return handle to access the service
- */
-struct GNUNET_DV_ServiceHandle *
-GNUNET_DV_service_connect (const struct GNUNET_CONFIGURATION_Handle *cfg,
-                          void *cls,
-                          GNUNET_DV_ConnectCallback connect_cb,
-                          GNUNET_DV_DistanceChangedCallback distance_cb,
-                          GNUNET_DV_DisconnectCallback disconnect_cb,
-                          GNUNET_DV_MessageReceivedCallback message_cb);
-
-
-/**
- * Disconnect from DV service.
- *
- * @param sh service handle
- */
-void
-GNUNET_DV_service_disconnect (struct GNUNET_DV_ServiceHandle *sh);
-
-
-/**
- * Handle for a send operation.
- */
-struct GNUNET_DV_TransmitHandle;
-
-
-/**
- * Send a message via DV service.
- *
- * @param sh service handle
- * @param target intended recpient
- * @param msg message payload
- * @return handle to cancel the operation
- */
-void
-GNUNET_DV_send (struct GNUNET_DV_ServiceHandle *sh,
-               const struct GNUNET_PeerIdentity *target,
-               const struct GNUNET_MessageHeader *msg);
-
-
-#endif
-
-/** @} */  /* end of group */
index c2256fd0a0558efbb37f9e9d4b4ac260a6260cbe..fcd422701cd410dfb72b26514f260c710adae315 100644 (file)
@@ -526,7 +526,7 @@ GNUNET_HELLO_extract_address (const void *raw,
  *
  * @param address a peer's address
  * @return NULL if the address is mal-formed, otherwise the prefix
- */ 
+ */
 char *
 GNUNET_HELLO_address_to_prefix (const char *address);
 
diff --git a/src/include/gnunet_multicast_service.h b/src/include/gnunet_multicast_service.h
deleted file mode 100644 (file)
index 58fca0b..0000000
+++ /dev/null
@@ -1,925 +0,0 @@
-/*
-     This file is part of GNUnet.
-     Copyright (C) 2012, 2013 GNUnet e.V.
-
-     GNUnet is free software: you can redistribute it and/or modify it
-     under the terms of the GNU Affero General Public License as published
-     by the Free Software Foundation, either version 3 of the License,
-     or (at your option) any later version.
-
-     GNUnet is distributed in the hope that it will be useful, but
-     WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     Affero General Public License for more details.
-    
-     You should have received a copy of the GNU Affero General Public License
-     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
-*/
-
-/**
- * @author Gabor X Toth
- * @author Christian Grothoff
- *
- * @file
- * Multicast service; multicast messaging via CADET
- *
- * @defgroup multicast  Multicast service
- * Multicast messaging via CADET.
- * @{
- */
-
-#ifndef GNUNET_MULTICAST_SERVICE_H
-#define GNUNET_MULTICAST_SERVICE_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#if 0                           /* keep Emacsens' auto-indent happy */
-}
-#endif
-#endif
-
-#include "gnunet_util_lib.h"
-#include "gnunet_transport_service.h"
-
-/**
- * Version number of GNUnet-multicast API.
- */
-#define GNUNET_MULTICAST_VERSION 0x00000000
-
-/**
- * Opaque handle for a multicast group member.
- */
-struct GNUNET_MULTICAST_Member;
-
-/**
- * Handle for the origin of a multicast group.
- */
-struct GNUNET_MULTICAST_Origin;
-
-
-enum GNUNET_MULTICAST_MessageFlags
-{
-  /**
-   * First fragment of a message.
-   */
-  GNUNET_MULTICAST_MESSAGE_FIRST_FRAGMENT = 1 << 0,
-
-  /**
-   * Last fragment of a message.
-   */
-  GNUNET_MULTICAST_MESSAGE_LAST_FRAGMENT = 1 << 1,
-
-  /**
-   * OR'ed flags if message is not fragmented.
-   */
-  GNUNET_MULTICAST_MESSAGE_NOT_FRAGMENTED
-    = GNUNET_MULTICAST_MESSAGE_FIRST_FRAGMENT
-  | GNUNET_MULTICAST_MESSAGE_LAST_FRAGMENT,
-
-  /**
-   * Historic message, used only locally when replaying messages from local
-   * storage.
-   */
-  GNUNET_MULTICAST_MESSAGE_HISTORIC = 1 << 30
-
-};
-
-
-GNUNET_NETWORK_STRUCT_BEGIN
-
-/**
- * Header of a multicast message fragment.
- *
- * This format is public as the replay mechanism must replay message fragments using the
- * same format.  This is needed as we want to integrity-check message fragments within
- * the multicast layer to avoid multicasting mal-formed messages.
- */
-struct GNUNET_MULTICAST_MessageHeader
-{
-
-  /**
-   * Header for all multicast message fragments from the origin.
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * Number of hops this message fragment has taken since the origin.
-   *
-   * Helpful to determine shortest paths to the origin among honest peers for
-   * unicast requests from members.  Updated at each hop and thus not signed and
-   * not secure.
-   */
-  uint32_t hop_counter GNUNET_PACKED;
-
-  /**
-   * ECC signature of the message fragment.
-   *
-   * Signature must match the public key of the multicast group.
-   */
-  struct GNUNET_CRYPTO_EddsaSignature signature;
-
-  /**
-   * Purpose for the signature and size of the signed data.
-   */
-  struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
-
-  /**
-   * Number of the message fragment, monotonically increasing starting from 1.
-   */
-  uint64_t fragment_id GNUNET_PACKED;
-
-  /**
-   * Byte offset of this @e fragment of the @e message.
-   */
-  uint64_t fragment_offset GNUNET_PACKED;
-
-  /**
-   * Number of the message this fragment belongs to.
-   *
-   * Set in GNUNET_MULTICAST_origin_to_all().
-   */
-  uint64_t message_id GNUNET_PACKED;
-
-  /**
-   * Counter that monotonically increases whenever a member parts the group.
-   *
-   * Set in GNUNET_MULTICAST_origin_to_all().
-   *
-   * It has significance in case of replay requests: when a member has missed
-   * messages and gets a replay request: in this case if the @a group_generation
-   * is still the same before and after the missed messages, it means that no
-   * @e join or @e part operations happened during the missed messages.
-   */
-  uint64_t group_generation GNUNET_PACKED;
-
-  /**
-   * Flags for this message fragment.
-   *
-   * @see enum GNUNET_MULTICAST_MessageFlags
-   */
-  uint32_t flags GNUNET_PACKED;
-
-  /* Followed by message body. */
-};
-
-
-/**
- * Header of a request from a member to the origin.
- */
-struct GNUNET_MULTICAST_RequestHeader
-{
-  /**
-   * Header for all requests from a member to the origin.
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * Public key of the sending member.
-   */
-  struct GNUNET_CRYPTO_EcdsaPublicKey member_pub_key;
-
-  /**
-   * ECC signature of the request fragment.
-   *
-   * Signature must match the public key of the multicast group.
-   */
-  struct GNUNET_CRYPTO_EcdsaSignature signature;
-
-  /**
-   * Purpose for the signature and size of the signed data.
-   */
-  struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
-
-  /**
-   * Number of the request fragment.
-   * Monotonically increasing from 1.
-   */
-  uint64_t fragment_id GNUNET_PACKED;
-
-  /**
-   * Byte offset of this @e fragment of the @e request.
-   */
-  uint64_t fragment_offset GNUNET_PACKED;
-
-  /**
-   * Number of the request this fragment belongs to.
-   *
-   * Set in GNUNET_MULTICAST_origin_to_all().
-   */
-  uint64_t request_id GNUNET_PACKED;
-
-  /**
-   * Flags for this request.
-   */
-  enum GNUNET_MULTICAST_MessageFlags flags GNUNET_PACKED;
-
-  /* Followed by request body. */
-};
-
-GNUNET_NETWORK_STRUCT_END
-
-
-/**
- * Maximum size of a multicast message fragment.
- */
-#define GNUNET_MULTICAST_FRAGMENT_MAX_SIZE (63 * 1024)
-
-#define GNUNET_MULTICAST_FRAGMENT_MAX_PAYLOAD           \
-  (GNUNET_MULTICAST_FRAGMENT_MAX_SIZE                   \
-   - sizeof (struct GNUNET_MULTICAST_MessageHeader))
-
-
-/**
- * Handle that identifies a join request.
- *
- * Used to match calls to #GNUNET_MULTICAST_JoinRequestCallback to the
- * corresponding calls to #GNUNET_MULTICAST_join_decision().
- */
-struct GNUNET_MULTICAST_JoinHandle;
-
-
-/**
- * Function to call with the decision made for a join request.
- *
- * Must be called once and only once in response to an invocation of the
- * #GNUNET_MULTICAST_JoinRequestCallback.
- *
- * @param jh
- *        Join request handle.
- * @param is_admitted
- *        #GNUNET_YES    if the join is approved,
- *        #GNUNET_NO     if it is disapproved,
- *        #GNUNET_SYSERR if we cannot answer the request.
- * @param relay_count
- *        Number of relays given.
- * @param relays
- *        Array of suggested peers that might be useful relays to use
- *        when joining the multicast group (essentially a list of peers that
- *        are already part of the multicast group and might thus be willing
- *        to help with routing).  If empty, only this local peer (which must
- *        be the multicast origin) is a good candidate for building the
- *        multicast tree.  Note that it is unnecessary to specify our own
- *        peer identity in this array.
- * @param join_resp
- *        Message to send in response to the joining peer;
- *        can also be used to redirect the peer to a different group at the
- *        application layer; this response is to be transmitted to the
- *        peer that issued the request even if admission is denied.
- */
-struct GNUNET_MULTICAST_ReplayHandle *
-GNUNET_MULTICAST_join_decision (struct GNUNET_MULTICAST_JoinHandle *jh,
-                                int is_admitted,
-                                uint16_t relay_count,
-                                const struct GNUNET_PeerIdentity *relays,
-                                const struct GNUNET_MessageHeader *join_resp);
-
-
-/**
- * Method called whenever another peer wants to join the multicast group.
- *
- * Implementations of this function must call GNUNET_MULTICAST_join_decision()
- * with the decision.
- *
- * @param cls
- *        Closure.
- * @param member_pub_key
- *        Public key of the member requesting join.
- * @param join_msg
- *        Application-dependent join message from the new member.
- * @param jh
- *        Join handle to pass to GNUNET_MULTICAST_join_decison().
- */
-typedef void
-(*GNUNET_MULTICAST_JoinRequestCallback) (void *cls,
-                                         const struct GNUNET_CRYPTO_EcdsaPublicKey *member_pub_key,
-                                         const struct GNUNET_MessageHeader *join_msg,
-                                         struct GNUNET_MULTICAST_JoinHandle *jh);
-
-
-/**
- * Method called to inform about the decision in response to a join request.
- *
- * If @a is_admitted is not #GNUNET_YES, then the multicast service disconnects
- * the client and the multicast member handle returned by
- * GNUNET_MULTICAST_member_join() is invalidated.
- *
- * @param cls
- *         Closure.
- * @param is_admitted
- *         #GNUNET_YES or #GNUNET_NO or #GNUNET_SYSERR
- * @param peer
- *        The peer we are connected to and the join decision is from.
- * @param relay_count
- *        Number of peers in the @a relays array.
- * @param relays
- *        Peer identities of members of the group, which serve as relays
- *        and can be used to join the group at.  If empty, only the origin can
- *        be used to connect to the group.
- * @param join_msg
- *        Application-dependent join message from the origin.
- */
-typedef void
-(*GNUNET_MULTICAST_JoinDecisionCallback) (void *cls,
-                                          int is_admitted,
-                                          const struct GNUNET_PeerIdentity *peer,
-                                          uint16_t relay_count,
-                                          const struct GNUNET_PeerIdentity *relays,
-                                          const struct GNUNET_MessageHeader *join_msg);
-
-
-/**
- * Function called whenever a group member has transmitted a request
- * to the origin (other than joining or leaving).
- *
- * FIXME: need to distinguish between origin cancelling a message (some fragments
- * were sent, then the rest 'discarded') and the case where we got disconnected;
- * right now, both would mean 'msg' is NULL, but they could be quite different...
- * So the semantics from the receiver side of
- * GNUNET_MULTICAST_member_to_origin_cancel() are not clear here.   Maybe we
- * should do something with the flags in this case?
- *
- * @param cls
- *        Closure (set from GNUNET_MULTICAST_origin_start).
- * @param sender
- *        Identity of the sender.
- * @param req
- *        Request to the origin.
- * @param flags
- *        Flags for the request.
- */
-typedef void
-(*GNUNET_MULTICAST_RequestCallback) (void *cls,
-                                     const struct GNUNET_MULTICAST_RequestHeader *req);
-
-
-/**
- * Function called whenever a group member is receiving a message fragment from
- * the origin.
- *
- * If admission to the group is denied, this function is called once with the
- * response of the @e origin (as given to GNUNET_MULTICAST_join_decision()) and
- * then a second time with NULL to indicate that the connection failed for good.
- *
- * FIXME: need to distinguish between origin cancelling a message (some fragments
- * were sent, then the rest 'discarded') and the case where we got disconnected;
- * right now, both would mean 'msg' is NULL, but they could be quite different...
- * So the semantics from the receiver side of
- * GNUNET_MULTICAST_origin_to_all_cancel() are not clear here.
- *
- * @param cls
- *        Closure (set from GNUNET_MULTICAST_member_join())
- * @param msg
- *        Message from the origin, NULL if the origin shut down
- *        (or we were kicked out, and we should thus call
- *        GNUNET_MULTICAST_member_part() next)
- */
-typedef void
-(*GNUNET_MULTICAST_MessageCallback) (void *cls,
-                                     const struct GNUNET_MULTICAST_MessageHeader *msg);
-
-
-/**
- * Opaque handle to a replay request from the multicast service.
- */
-struct GNUNET_MULTICAST_ReplayHandle;
-
-
-/**
- * Functions with this signature are called whenever the multicast service needs
- * a message fragment to be replayed by fragment_id.
- *
- * Implementations of this function MUST call GNUNET_MULTICAST_replay() ONCE
- * (with a message or an error); however, if the origin is destroyed or the
- * group is left, the replay handle must no longer be used.
- *
- * @param cls
- *        Closure (set from GNUNET_MULTICAST_origin_start()
- *        or GNUNET_MULTICAST_member_join()).
- * @param member_pub_key
- *        The member requesting replay.
- * @param fragment_id
- *        Which message fragment should be replayed.
- * @param flags
- *        Flags for the replay.
- * @param rh
- *        Handle to pass to message transmit function.
- */
-typedef void
-(*GNUNET_MULTICAST_ReplayFragmentCallback) (void *cls,
-                                            const struct GNUNET_CRYPTO_EcdsaPublicKey *member_pub_key,
-                                            uint64_t fragment_id,
-                                            uint64_t flags,
-                                            struct GNUNET_MULTICAST_ReplayHandle *rh);
-
-/**
- * Functions with this signature are called whenever the multicast service needs
- * a message fragment to be replayed by message_id and fragment_offset.
- *
- * Implementations of this function MUST call GNUNET_MULTICAST_replay() ONCE
- * (with a message or an error); however, if the origin is destroyed or the
- * group is left, the replay handle must no longer be used.
- *
- * @param cls
- *        Closure (set from GNUNET_MULTICAST_origin_start()
- *        or GNUNET_MULTICAST_member_join()).
- * @param member_pub_key
- *        The member requesting replay.
- * @param message_id
- *        Which message should be replayed.
- * @param fragment_offset
- *        Offset of the fragment within of @a message_id to be replayed.
- * @param flags
- *        Flags for the replay.
- * @param rh
- *        Handle to pass to message transmit function.
- */
-typedef void
-(*GNUNET_MULTICAST_ReplayMessageCallback) (void *cls,
-                                           const struct GNUNET_CRYPTO_EcdsaPublicKey *member_pub_key,
-                                           uint64_t message_id,
-                                           uint64_t fragment_offset,
-                                           uint64_t flags,
-                                           struct GNUNET_MULTICAST_ReplayHandle *rh);
-
-
-/**
- * Possible error codes during replay.
- */
-enum GNUNET_MULTICAST_ReplayErrorCode
-{
-
-  /**
-   * Everything is fine.
-   */
-  GNUNET_MULTICAST_REC_OK = 0,
-
-  /**
-   * Message fragment not found in the message store.
-   *
-   * Either discarded if it is too old, or not arrived yet if this member has
-   * missed some messages.
-   */
-  GNUNET_MULTICAST_REC_NOT_FOUND = 1,
-
-  /**
-   * Fragment ID counter was larger than the highest counter this
-   * replay function has ever encountered; thus it is likely the
-   * origin never sent it and we're at the HEAD of the multicast
-   * stream as far as this node is concerned.
-   *
-   * FIXME: needed?
-   */
-  GNUNET_MULTICAST_REC_PAST_HEAD = 2,
-
-  /**
-   * Access is denied to the requested fragment, membership test did not pass.
-   */
-  GNUNET_MULTICAST_REC_ACCESS_DENIED = 3,
-
-  /**
-   * Internal error (i.e. database error).  Try some other peer.
-   */
-  GNUNET_MULTICAST_REC_INTERNAL_ERROR = 4
-
-};
-
-
-/**
- * Replay a message fragment for the multicast group.
- *
- * @param rh
- *        Replay handle identifying which replay operation was requested.
- * @param msg
- *        Replayed message fragment, NULL if not found / an error occurred.
- * @param ec
- *        Error code.  See enum GNUNET_MULTICAST_ReplayErrorCode
- *        If not #GNUNET_MULTICAST_REC_OK, the replay handle is invalidated.
- */
-void
-GNUNET_MULTICAST_replay_response (struct GNUNET_MULTICAST_ReplayHandle *rh,
-                                  const struct GNUNET_MessageHeader *msg,
-                                  enum GNUNET_MULTICAST_ReplayErrorCode ec);
-
-
-/**
- * Indicate the end of the replay session.
- *
- * Invalidates the replay handle.
- *
- * @param rh Replay session to end.
- */
-void
-GNUNET_MULTICAST_replay_response_end (struct GNUNET_MULTICAST_ReplayHandle *rh);
-
-
-/**
- * Function called to provide data for a transmission for a replay.
- *
- * @see GNUNET_MULTICAST_replay2()
- */
-typedef int
-(*GNUNET_MULTICAST_ReplayTransmitNotify) (void *cls,
-                                          size_t *data_size,
-                                          void *data);
-
-
-/**
- * Replay a message for the multicast group.
- *
- * @param rh
- *        Replay handle identifying which replay operation was requested.
- * @param notify
- *        Function to call to get the message.
- * @param notify_cls
- *        Closure for @a notify.
- */
-void
-GNUNET_MULTICAST_replay_response2 (struct GNUNET_MULTICAST_ReplayHandle *rh,
-                                   GNUNET_MULTICAST_ReplayTransmitNotify notify,
-                                   void *notify_cls);
-
-
-/**
- * Start a multicast group.
- *
- * Peers that issue GNUNET_MULTICAST_member_join() can transmit a join request
- * to either an existing group member or to the origin.  If the joining is
- * approved, the member is cleared for @e replay and will begin to receive
- * messages transmitted to the group.  If joining is disapproved, the failed
- * candidate will be given a response.  Members in the group can send messages
- * to the origin.
- *
- * TODO: This function could optionally offer to advertise the origin in the
- * P2P overlay network(where?) under the respective public key so that other
- * peers can find an alternate PeerId to join it. Higher level protocols may
- * however provide other means of solving the problem of the offline host
- * (see secushare specs about that) and therefore merely need a way to provide
- * a list of possible PeerIds.
- *
- * @param cfg
- *        Configuration to use.
- * @param priv_key
- *        ECC key that will be used to sign messages for this
- *        multicast session; public key is used to identify the multicast group;
- * @param max_fragment_id
- *        Maximum fragment ID already sent to the group.
- *        0 for a new group.
- * @param join_request_cb
- *        Function called to approve / disapprove joining of a peer.
- * @param replay_frag_cb
- *        Function that can be called to replay a message fragment.
- * @param replay_msg_cb
- *        Function that can be called to replay a message.
- * @param request_cb
- *        Function called with message fragments from group members.
- * @param message_cb
- *        Function called with the message fragments sent to the
- *        network by GNUNET_MULTICAST_origin_to_all().  These message fragments
- *        should be stored for answering replay requests later.
- * @param cls
- *        Closure for the various callbacks that follow.
- *
- * @return Handle for the origin, NULL on error.
- */
-struct GNUNET_MULTICAST_Origin *
-GNUNET_MULTICAST_origin_start (const struct GNUNET_CONFIGURATION_Handle *cfg,
-                               const struct GNUNET_CRYPTO_EddsaPrivateKey *priv_key,
-                               uint64_t max_fragment_id,
-                               GNUNET_MULTICAST_JoinRequestCallback join_request_cb,
-                               GNUNET_MULTICAST_ReplayFragmentCallback replay_frag_cb,
-                               GNUNET_MULTICAST_ReplayMessageCallback replay_msg_cb,
-                               GNUNET_MULTICAST_RequestCallback request_cb,
-                               GNUNET_MULTICAST_MessageCallback message_cb,
-                               void *cls);
-
-/**
- * Function called to provide data for a transmission from the origin to all
- * members.
- *
- * Note that returning #GNUNET_OK or #GNUNET_SYSERR (but not #GNUNET_NO)
- * invalidates the respective transmission handle.
- *
- * @param cls
- *        Closure.
- * @param[in,out] data_size
- *        Initially set to the number of bytes available in
- *        @a data, should be set to the number of bytes written to data.
- * @param[out] data
- *        Where to write the body of the message to give to the
- *         method. The function must copy at most @a data_size bytes to @a data.
- *
- * @return #GNUNET_SYSERR on error (fatal, aborts transmission)
- *         #GNUNET_NO on success, if more data is to be transmitted later.
- *         Should be used if @a data_size was not big enough to take all the
- *         data.  If 0 is returned in @a data_size the transmission is paused,
- *         and can be resumed with GNUNET_MULTICAST_origin_to_all_resume().
- *         #GNUNET_YES if this completes the transmission (all data supplied)
- * @deprecated should move to MQ-style API!
- */
-typedef int
-(*GNUNET_MULTICAST_OriginTransmitNotify) (void *cls,
-                                          size_t *data_size,
-                                          void *data);
-
-
-/**
- * Handle for a request to send a message to all multicast group members
- * (from the origin).
- */
-struct GNUNET_MULTICAST_OriginTransmitHandle;
-
-
-/**
- * Send a message to the multicast group.
- *
- * @param origin
- *        Handle to the multicast group.
- * @param message_id
- *        Application layer ID for the message.  Opaque to multicast.
- * @param group_generation
- *        Group generation of the message.  Documented in
- *        struct GNUNET_MULTICAST_MessageHeader.
- * @param notify
- *        Function to call to get the message.
- * @param notify_cls
- *        Closure for @a notify.
- *
- * @return NULL on error (i.e. request already pending).
- * @deprecated should move to MQ-style API!
- */
-struct GNUNET_MULTICAST_OriginTransmitHandle *
-GNUNET_MULTICAST_origin_to_all (struct GNUNET_MULTICAST_Origin *origin,
-                                uint64_t message_id,
-                                uint64_t group_generation,
-                                GNUNET_MULTICAST_OriginTransmitNotify notify,
-                                void *notify_cls);
-
-
-
-/**
- * Resume message transmission to multicast group.
- *
- * @param th  Transmission to cancel.
- */
-void
-GNUNET_MULTICAST_origin_to_all_resume (struct GNUNET_MULTICAST_OriginTransmitHandle *th);
-
-
-/**
- * Cancel request for message transmission to multicast group.
- *
- * @param th  Transmission to cancel.
- */
-void
-GNUNET_MULTICAST_origin_to_all_cancel (struct GNUNET_MULTICAST_OriginTransmitHandle *th);
-
-
-/**
- * Stop a multicast group.
- *
- * @param origin Multicast group to stop.
- */
-void
-GNUNET_MULTICAST_origin_stop (struct GNUNET_MULTICAST_Origin *origin,
-                              GNUNET_ContinuationCallback stop_cb,
-                              void *stop_cls);
-
-
-/**
- * Join a multicast group.
- *
- * The entity joining is always the local peer.  Further information about the
- * candidate can be provided in @a join_msg.  If the join fails, the
- * @a message_cb is invoked with a (failure) response and then with NULL.  If
- * the join succeeds, outstanding (state) messages and ongoing multicast
- * messages will be given to the @a message_cb until the member decides to part
- * the group.  The @a mem_test_cb and @a replay_cb functions may be called at
- * anytime by the multicast service to support relaying messages to other
- * members of the group.
- *
- * @param cfg
- *        Configuration to use.
- * @param group_key
- *        ECC public key that identifies the group to join.
- * @param member_pub_key
- *        ECC key that identifies the member
- *        and used to sign requests sent to the origin.
- * @param origin
- *        Peer ID of the origin to send unicast requsets to.  If NULL,
- *        unicast requests are sent back via multiple hops on the reverse path
- *        of multicast messages.
- * @param relay_count
- *        Number of peers in the @a relays array.
- * @param relays
- *        Peer identities of members of the group, which serve as relays
- *        and can be used to join the group at. and send the @a join_request to.
- *        If empty, the @a join_request is sent directly to the @a origin.
- * @param join_msg
- *        Application-dependent join message to be passed to the peer @a origin.
- * @param join_request_cb
- *        Function called to approve / disapprove joining of a peer.
- * @param join_decision_cb
- *        Function called to inform about the join decision.
- * @param replay_frag_cb
- *        Function that can be called to replay message fragments
- *        this peer already knows from this group. NULL if this
- *        client is unable to support replay.
- * @param replay_msg_cb
- *        Function that can be called to replay message fragments
- *        this peer already knows from this group. NULL if this
- *        client is unable to support replay.
- * @param message_cb
- *        Function to be called for all message fragments we
- *        receive from the group, excluding those our @a replay_cb
- *        already has.
- * @param cls
- *        Closure for callbacks.
- *
- * @return Handle for the member, NULL on error.
- */
-struct GNUNET_MULTICAST_Member *
-GNUNET_MULTICAST_member_join (const struct GNUNET_CONFIGURATION_Handle *cfg,
-                              const struct GNUNET_CRYPTO_EddsaPublicKey *group_key,
-                              const struct GNUNET_CRYPTO_EcdsaPrivateKey *member_pub_key,
-                              const struct GNUNET_PeerIdentity *origin,
-                              uint16_t relay_count,
-                              const struct GNUNET_PeerIdentity *relays,
-                              const struct GNUNET_MessageHeader *join_request,
-                              GNUNET_MULTICAST_JoinRequestCallback join_request_cb,
-                              GNUNET_MULTICAST_JoinDecisionCallback join_decision_cb,
-                              GNUNET_MULTICAST_ReplayFragmentCallback replay_frag_cb,
-                              GNUNET_MULTICAST_ReplayMessageCallback replay_msg_cb,
-                              GNUNET_MULTICAST_MessageCallback message_cb,
-                              void *cls);
-
-/**
- * Handle for a replay request.
- */
-struct GNUNET_MULTICAST_MemberReplayHandle;
-
-
-/**
- * Request a fragment to be replayed by fragment ID.
- *
- * Useful if messages below the @e max_known_fragment_id given when joining are
- * needed and not known to the client.
- *
- * @param member
- *        Membership handle.
- * @param fragment_id
- *        ID of a message fragment that this client would like to see replayed.
- * @param flags
- *        Additional flags for the replay request.
- *        It is used and defined by GNUNET_MULTICAST_ReplayFragmentCallback
- *
- * @return Replay request handle, NULL on error.
- */
-struct GNUNET_MULTICAST_MemberReplayHandle *
-GNUNET_MULTICAST_member_replay_fragment (struct GNUNET_MULTICAST_Member *member,
-                                         uint64_t fragment_id,
-                                         uint64_t flags);
-
-
-/**
- * Request a message fr to be replayed.
- *
- * Useful if messages below the @e max_known_fragment_id given when joining are
- * needed and not known to the client.
- *
- * @param member
- *        Membership handle.
- * @param message_id
- *        ID of the message this client would like to see replayed.
- * @param fragment_offset
- *        Offset of the fragment within the message to replay.
- * @param flags
- *        Additional flags for the replay request.
- *        It is used & defined by GNUNET_MULTICAST_ReplayMessageCallback
- *
- * @return Replay request handle, NULL on error.
- */
-struct GNUNET_MULTICAST_MemberReplayHandle *
-GNUNET_MULTICAST_member_replay_message (struct GNUNET_MULTICAST_Member *member,
-                                        uint64_t message_id,
-                                        uint64_t fragment_offset,
-                                        uint64_t flags);
-
-
-/**
- * Cancel a replay request.
- *
- * @param rh
- *        Request to cancel.
- */
-void
-GNUNET_MULTICAST_member_replay_cancel (struct GNUNET_MULTICAST_MemberReplayHandle *rh);
-
-
-/**
- * Part a multicast group.
- *
- * Disconnects from all group members and invalidates the @a member handle.
- *
- * An application-dependent part message can be transmitted beforehand using
- * #GNUNET_MULTICAST_member_to_origin())
- *
- * @param member
- *        Membership handle.
- */
-void
-GNUNET_MULTICAST_member_part (struct GNUNET_MULTICAST_Member *member,
-                              GNUNET_ContinuationCallback part_cb,
-                              void *part_cls);
-
-
-/**
- * Function called to provide data for a transmission from a member to the origin.
- *
- * Note that returning #GNUNET_OK or #GNUNET_SYSERR (but not #GNUNET_NO)
- * invalidates the respective transmission handle.
- *
- * @param cls
- *        Closure.
- * @param[in,out] data_size
- *        Initially set to the number of bytes available in
- *        @a data, should be set to the number of bytes written to data.
- * @param[out] data
- *        Where to write the body of the message to give to the
- *        method. The function must copy at most @a data_size bytes to @a data.
- *
- * @return #GNUNET_SYSERR on error (fatal, aborts transmission)
- *         #GNUNET_NO on success, if more data is to be transmitted later.
- *         Should be used if @a data_size was not big enough to take all the
- *         data.  If 0 is returned in @a data_size the transmission is paused,
- *         and can be resumed with GNUNET_MULTICAST_member_to_origin_resume().
- *         #GNUNET_YES if this completes the transmission (all data supplied)
- * @deprecated should move to MQ-style API!
- */
-typedef int
-(*GNUNET_MULTICAST_MemberTransmitNotify) (void *cls,
-                                          size_t *data_size,
-                                          void *data);
-
-
-/**
- * Handle for a message to be delivered from a member to the origin.
- */
-struct GNUNET_MULTICAST_MemberTransmitHandle;
-
-
-/**
- * Send a message to the origin of the multicast group.
- *
- * @param member
- *        Membership handle.
- * @param request_id
- *        Application layer ID for the request.  Opaque to multicast.
- * @param notify
- *        Callback to call to get the message.
- * @param notify_cls
- *        Closure for @a notify.
- *
- * @return Handle to cancel request, NULL on error (i.e. request already pending).
- * @deprecated should move to MQ-style API!
- */
-struct GNUNET_MULTICAST_MemberTransmitHandle *
-GNUNET_MULTICAST_member_to_origin (struct GNUNET_MULTICAST_Member *member,
-                                   uint64_t request_id,
-                                   GNUNET_MULTICAST_MemberTransmitNotify notify,
-                                   void *notify_cls);
-
-
-/**
- * Resume message transmission to origin.
- *
- * @param th
- *        Transmission to cancel.
- */
-void
-GNUNET_MULTICAST_member_to_origin_resume (struct GNUNET_MULTICAST_MemberTransmitHandle *th);
-
-
-/**
- * Cancel request for message transmission to origin.
- *
- * @param th
- *        Transmission to cancel.
- */
-void
-GNUNET_MULTICAST_member_to_origin_cancel (struct GNUNET_MULTICAST_MemberTransmitHandle *th);
-
-
-#if 0                           /* keep Emacsens' auto-indent happy */
-{
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-/* ifndef GNUNET_MULTICAST_SERVICE_H */
-#endif
-
-/** @} */  /* end of group */
index 46a7da7926974dfd651c6255ae5f551322fa1d15..3b603b4c0b3c98103109db87cee8e251cddeb54f 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -47,7 +47,8 @@ extern "C"
  * Function called for each matching record.
  *
  * @param cls closure
- * @param serial unique serial number of the record
+ * @param serial unique serial number of the record, MUST NOT BE ZERO,
+ *               and must be monotonically increasing while iterating
  * @param zone_key private key of the zone
  * @param label name that is being mapped (at most 255 characters long)
  * @param rd_count number of entries in @a rd array
@@ -115,7 +116,9 @@ struct GNUNET_NAMESTORE_PluginFunctions
    *
    * @param cls closure (internal context for the plugin)
    * @param zone private key of the zone, NULL for all zones
-   * @param serial serial (to exclude) in the list of matching records
+   * @param serial serial (to exclude) in the list of matching records;
+   *        0 means to exclude nothing; results must be returned using
+   *        the minimum possible sequence number first (ordered by serial)
    * @param limit maximum number of results to return to @a iter
    * @param iter function to call with the result
    * @param iter_cls closure for @a iter
index 79343018441281c91441c425365a36f6d2d24953..46620b829fa5e4c8454ab2725d432666d2375991 100644 (file)
@@ -2633,7 +2633,7 @@ extern "C"
  */
 #define GNUNET_MESSAGE_TYPE_RPS_CS_SEED           954
 
-#ifdef ENABLE_MALICIOUS
+#if ENABLE_MALICIOUS
 /**
  * Turn RPS service malicious
  */
@@ -3106,40 +3106,47 @@ extern "C"
 /**
  * Type of a fragment of a CORE message created by transport to adjust
  * message length to a queue's MTU.
- */ 
+ */
 #define GNUNET_MESSAGE_TYPE_TRANSPORT_FRAGMENT 1214
 
-/** 
+/**
  * Acknowledgement generated for a fragment.
- */ 
+ */
 #define GNUNET_MESSAGE_TYPE_TRANSPORT_FRAGMENT_ACK 1215
 
-/** 
+/**
  * Wrapper around non-fragmented CORE message used to measure RTT
  * and ensure reliability.
- */ 
+ */
 #define GNUNET_MESSAGE_TYPE_TRANSPORT_RELIABILITY_BOX 1216
 
-/** 
+/**
  * Confirmation for a #GNUNET_MESSAGE_TYPE_TRANSPORT_RELIABILITY_BOX.
- */ 
+ */
 #define GNUNET_MESSAGE_TYPE_TRANSPORT_RELIABILITY_ACK 1217
 
-/** 
+/**
  * Message sent for topology discovery at transport level.
- */ 
+ */
 #define GNUNET_MESSAGE_TYPE_TRANSPORT_DV_LEARN 1218
 
-/** 
+/**
  * Source-routed transport message based DV information gathered.
- */ 
+ */
 #define GNUNET_MESSAGE_TYPE_TRANSPORT_DV_BOX 1219
 
 /**
  * Transport signalling incoming backchannel message to a communicator.
- */ 
+ */
 #define GNUNET_MESSAGE_TYPE_TRANSPORT_COMMUNICATOR_BACKCHANNEL_INCOMING 1220
 
+/**
+ * We learned a possible network address of another peer. Transport
+ * should consider verifying it, and if successful, remembering it
+ * in the Peerstore.
+ */
+#define GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_CONSIDER_VERIFY 1221
+
 
 /**
  * Message sent to indicate to the transport that a monitor
@@ -3230,7 +3237,7 @@ extern "C"
 
 /**
  * TCP communicator end of stream.
- */ 
+ */
 #define GNUNET_MESSAGE_TYPE_COMMUNICATOR_TCP_FINISH 1452
 
 /**
diff --git a/src/include/gnunet_psyc_env.h b/src/include/gnunet_psyc_env.h
deleted file mode 100644 (file)
index 0d878cb..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-/*
- * This file is part of GNUnet.
- * Copyright (C) 2013 GNUnet e.V.
- *
- * GNUnet is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNUnet is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
- */
-
-/**
- * @author Gabor X Toth
- *
- * @file
- * PSYC Environment library
- *
- * @defgroup psyc-util-env  PSYC Utilities library: Environment
- * Environment data structure operations for PSYC and Social messages.
- *
- * Library providing operations for the @e environment of
- * PSYC and Social messages, and for (de)serializing variable values.
- *
- * @{
- */
-
-
-#ifndef GNUNET_PSYC_ENV_H
-#define GNUNET_PSYC_ENV_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#if 0                           /* keep Emacsens' auto-indent happy */
-}
-#endif
-#endif
-
-
-/**
- * Possible operations on PSYC state (persistent) and transient variables (per message).
- */
-enum GNUNET_PSYC_Operator
-{
-  /**
-   * Set value of a transient variable.
-   */
-  GNUNET_PSYC_OP_SET = ':',
-
-  /**
-   * Assign value for a persistent state variable.
-   *
-   * If an assigned value is NULL, the variable is deleted.
-   */
-  GNUNET_PSYC_OP_ASSIGN = '=',
-
-  /**
-   * Augment state variable.
-   *
-   * Used for appending strings, adding numbers, and adding new items to a list or dictionary.
-   */
-  GNUNET_PSYC_OP_AUGMENT = '+',
-
-  /**
-   * Diminish state variable.
-   *
-   * Used for subtracting numbers, and removing items from a list or dictionary.
-   */
-  GNUNET_PSYC_OP_DIMINISH = '-',
-
-  /**
-   * Update state variable.
-   *
-   * Used for modifying a single item of a list or dictionary.
-   */
-  GNUNET_PSYC_OP_UPDATE = '@',
-};
-
-
-/**
- * PSYC variable types.
- */
-enum GNUNET_PSYC_Type
-{
-  GNUNET_PSYC_TYPE_DATA = 0,
-  GNUNET_PSYC_TYPE_NUMBER,
-  GNUNET_PSYC_TYPE_LIST,
-  GNUNET_PSYC_TYPE_DICT
-};
-
-
-/**
- * PSYC state modifier.
- */
-struct GNUNET_PSYC_Modifier
-{
-  /**
-   * State operation.
-   */
-  enum GNUNET_PSYC_Operator oper;
-
-  /**
-   * Variable name.
-   */
-  const char *name;
-
-  /**
-   * Size of @a value.
-   */
-  size_t value_size;
-
-  /**
-   * Value of variable.
-   */
-  const void *value;
-
-  /**
-   * Next modifier.
-   */
-  struct GNUNET_PSYC_Modifier *next;
-
-  /**
-   * Previous modifier.
-   */
-  struct GNUNET_PSYC_Modifier *prev;
-};
-
-
-/**
- * Environment for a message.
- *
- * Contains modifiers.
- */
-struct GNUNET_PSYC_Environment;
-
-
-/**
- * Create an environment.
- *
- * @return A newly allocated environment.
- */
-struct GNUNET_PSYC_Environment *
-GNUNET_PSYC_env_create ();
-
-
-/**
- * Add a modifier to the environment.
- *
- * @param env The environment.
- * @param oper Operation to perform.
- * @param name Name of the variable.
- * @param value Value of the variable.
- * @param value_size Size of @a value.
- */
-void
-GNUNET_PSYC_env_add (struct GNUNET_PSYC_Environment *env,
-                     enum GNUNET_PSYC_Operator oper, const char *name,
-                     const void *value, size_t value_size);
-
-
-/**
- * Get the first modifier of the environment.
- */
-struct GNUNET_PSYC_Modifier *
-GNUNET_PSYC_env_head (const struct GNUNET_PSYC_Environment *env);
-
-
-
-/**
- * Get the last modifier of the environment.
- */
-struct GNUNET_PSYC_Modifier *
-GNUNET_PSYC_env_tail (const struct GNUNET_PSYC_Environment *env);
-
-
-/**
- * Remove a modifier from the environment.
- */
-void
-GNUNET_PSYC_env_remove (struct GNUNET_PSYC_Environment *env,
-                        struct GNUNET_PSYC_Modifier *mod);
-
-
-/**
- * Remove a modifier at the beginning of the environment.
- */
-int
-GNUNET_PSYC_env_shift (struct GNUNET_PSYC_Environment *env,
-                       enum GNUNET_PSYC_Operator *oper, const char **name,
-                       const void **value, size_t *value_size);
-
-
-/**
- * Iterator for modifiers in the environment.
- *
- * @param cls Closure.
- * @param mod Modifier.
- *
- * @return #GNUNET_YES to continue iterating,
- *         #GNUNET_NO to stop.
- */
-typedef int
-(*GNUNET_PSYC_Iterator) (void *cls, enum GNUNET_PSYC_Operator oper,
-                         const char *name, const char *value,
-                         uint32_t value_size);
-
-
-/**
- * Iterate through all modifiers in the environment.
- *
- * @param env The environment.
- * @param it Iterator.
- * @param it_cls Closure for iterator.
- */
-void
-GNUNET_PSYC_env_iterate (const struct GNUNET_PSYC_Environment *env,
-                         GNUNET_PSYC_Iterator it, void *it_cls);
-
-
-/**
- * Get the number of modifiers in the environment.
- *
- * @param env The environment.
- *
- * @return Number of modifiers.
- */
-size_t
-GNUNET_PSYC_env_get_count (const struct GNUNET_PSYC_Environment *env);
-
-
-/**
- * Destroy an environment.
- *
- * @param env The environment to destroy.
- */
-void
-GNUNET_PSYC_env_destroy (struct GNUNET_PSYC_Environment *env);
-
-
-/**
- * Get the type of variable.
- *
- * @param name Name of the variable.
- *
- * @return Variable type.
- */
-enum GNUNET_PSYC_Type
-GNUNET_PSYC_var_get_type (char *name);
-
-
-/**
- * Perform an operation on a variable.
- *
- * @param name Name of variable.
- * @param current_value Current value of variable.
- * @param current_value_size Size of @a current_value.
- * @param oper Operator.
- * @param args Arguments for the operation.
- * @param args_size Size of @a args.
- * @param return_value Return value.
- * @param return_value_size Size of @a return_value.
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-int
-GNUNET_PSYC_operation (char *name, void *current_value, size_t current_value_size,
-                       enum GNUNET_PSYC_Operator oper, void *args, size_t args_size,
-                       void **return_value, size_t *return_value_size);
-
-
-/**
- * Get the variable's value as an integer.
- *
- * @param size Size of value.
- * @param value Raw value of variable.
- * @param[out] number Value converted to a 64-bit integer.
- *
- * @return #GNUNET_OK on success, #GNUNET_SYSERR if an error occurred (e.g. the value is invalid).
- */
-int
-GNUNET_PSYC_value_to_number (size_t size, const void *value, int64_t *number);
-
-
-/**
- * Get the variable's value as a dictionary.
- *
- * @param size Size of value.
- * @param value Raw value of variable.
- * @param[out] dict A newly created hashmap holding the elements of the dictionary.
- *
- * @return #GNUNET_OK on success, #GNUNET_SYSERR if an error occurred (e.g. the value is invalid).
- */
-int
-GNUNET_PSYC_value_to_dict (size_t size, const void *value, struct GNUNET_CONTAINER_MultiHashMap **dict);
-
-
-/**
- * Create a PSYC variable value from an integer.
- *
- * @param number The number to convert.
- * @param[out] value_size Size of returned value.
- *
- * @return A newly allocated value or NULL on error.
- */
-void *
-GNUNET_PSYC_value_from_number (int64_t number, size_t *value_size);
-
-
-/**
- * Create a PSYC variable value from a dictionary.
- *
- * @param dict The dict to convert.
- * @param[out] value_size Size of returned value.
- *
- * @return A newly allocated value or NULL on error.
- */
-void *
-GNUNET_PSYC_value_from_dict (struct GNUNET_CONTAINER_MultiHashMap *dict, size_t *value_size);
-
-
-#if 0                           /* keep Emacsens' auto-indent happy */
-{
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-/* ifndef GNUNET_PSYC_ENV_H */
-#endif
-
-/** @} */  /* end of group */
diff --git a/src/include/gnunet_psyc_message.h b/src/include/gnunet_psyc_message.h
deleted file mode 100644 (file)
index d0cf9cc..0000000
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
-     This file is part of GNUnet.
-     Copyright (C) 2012, 2013 GNUnet e.V.
-
-     GNUnet is free software: you can redistribute it and/or modify it
-     under the terms of the GNU Affero General Public License as published
-     by the Free Software Foundation, either version 3 of the License,
-     or (at your option) any later version.
-
-     GNUnet is distributed in the hope that it will be useful, but
-     WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     Affero General Public License for more details.
-    
-     You should have received a copy of the GNU Affero General Public License
-     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
-*/
-
-/**
- * @author Gabor X Toth
- *
- * @file
- * PSYC message utilities; receiving/transmitting/logging PSYC messages
- *
- * @defgroup psyc-util-message  PSYC Utilities library: Messages
- * Receiving, transmitting, logging PSYC messages.
- * @{
- */
-
-#ifndef GNUNET_PSYC_MESSAGE_H
-#define GNUNET_PSYC_MESSAGE_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#if 0                           /* keep Emacsens' auto-indent happy */
-}
-#endif
-#endif
-
-
-#include "gnunet_util_lib.h"
-#include "gnunet_psyc_util_lib.h"
-#include "gnunet_psyc_service.h"
-
-
-/**
- * Create a PSYC message.
- *
- * @param method_name
- *        PSYC method for the message.
- * @param env
- *        Environment for the message.
- * @param data
- *        Data payload for the message.
- * @param data_size
- *        Size of @a data.
- *
- * @return Message header with size information,
- *         followed by the message parts.
- *
- * FIXME: arg order
- */
-struct GNUNET_PSYC_Message *
-GNUNET_PSYC_message_create (const char *method_name,
-                            const struct GNUNET_PSYC_Environment *env,
-                            const void *data,
-                            size_t data_size);
-
-/**
- * Parse PSYC message.
- *
- * @param msg
- *        The PSYC message to parse.
- * @param env
- *        The environment for the message with a list of modifiers.
- * @param[out] method_name
- *        Pointer to the method name inside @a pmsg.
- * @param[out] data
- *        Pointer to data inside @a pmsg.
- * @param[out] data_size
- *        Size of @data is written here.
- *
- * @return #GNUNET_OK on success,
- *         #GNUNET_SYSERR on parse error.
- *
- * FIXME: arg order
- */
-int
-GNUNET_PSYC_message_parse (const struct GNUNET_PSYC_MessageHeader *msg,
-                           const char **method_name,
-                           struct GNUNET_PSYC_Environment *env,
-                           const void **data,
-                           uint16_t *data_size);
-
-
-void
-GNUNET_PSYC_log_message (enum GNUNET_ErrorType kind,
-                         const struct GNUNET_MessageHeader *msg);
-
-
-struct GNUNET_PSYC_TransmitHandle;
-
-/**
- * Create a transmission handle.
- */
-struct GNUNET_PSYC_TransmitHandle *
-GNUNET_PSYC_transmit_create (struct GNUNET_MQ_Handle *mq);
-
-
-/**
- * Destroy a transmission handle.
- */
-void
-GNUNET_PSYC_transmit_destroy (struct GNUNET_PSYC_TransmitHandle *tmit);
-
-
-/**
- * Transmit a message.
- *
- * @param tmit
- *        Transmission handle.
- * @param method_name
- *        Which method should be invoked.
- * @param env
- *        Environment for the message.
- *        Should stay available until the first call to notify_data.
- *        Can be NULL if there are no modifiers or @a notify_mod is
- *        provided instead.
- * @param notify_mod
- *        Function to call to obtain modifiers.
- *        Can be NULL if there are no modifiers or @a env is provided instead.
- * @param notify_data
- *        Function to call to obtain fragments of the data.
- * @param notify_cls
- *        Closure for @a notify_mod and @a notify_data.
- * @param flags
- *        Flags for the message being transmitted.
- *
- * @return #GNUNET_OK if the transmission was started.
- *         #GNUNET_SYSERR if another transmission is already going on.
- */
-int
-GNUNET_PSYC_transmit_message (struct GNUNET_PSYC_TransmitHandle *tmit,
-                              const char *method_name,
-                              const struct GNUNET_PSYC_Environment *env,
-                              GNUNET_PSYC_TransmitNotifyModifier notify_mod,
-                              GNUNET_PSYC_TransmitNotifyData notify_data,
-                              void *notify_cls,
-                              uint32_t flags);
-
-
-/**
- * Resume transmission.
- *
- * @param tmit  Transmission handle.
- */
-void
-GNUNET_PSYC_transmit_resume (struct GNUNET_PSYC_TransmitHandle *tmit);
-
-
-/**
- * Abort transmission request.
- *
- * @param tmit  Transmission handle.
- */
-void
-GNUNET_PSYC_transmit_cancel (struct GNUNET_PSYC_TransmitHandle *tmit);
-
-
-/**
- * Got acknowledgement of a transmitted message part, continue transmission.
- *
- * @param tmit  Transmission handle.
- */
-void
-GNUNET_PSYC_transmit_got_ack (struct GNUNET_PSYC_TransmitHandle *tmit);
-
-
-struct GNUNET_PSYC_ReceiveHandle;
-
-
-/**
- * Create handle for receiving messages.
- */
-struct GNUNET_PSYC_ReceiveHandle *
-GNUNET_PSYC_receive_create (GNUNET_PSYC_MessageCallback message_cb,
-                            GNUNET_PSYC_MessagePartCallback message_part_cb,
-                            void *cb_cls);
-
-
-/**
- * Destroy handle for receiving messages.
- */
-void
-GNUNET_PSYC_receive_destroy (struct GNUNET_PSYC_ReceiveHandle *recv);
-
-
-/**
- * Reset stored data related to the last received message.
- */
-void
-GNUNET_PSYC_receive_reset (struct GNUNET_PSYC_ReceiveHandle *recv);
-
-
-/**
- * Handle incoming PSYC message.
- *
- * @param recv
- *        Receive handle.
- * @param msg
- *        The message.
- *
- * @return #GNUNET_OK on success,
- *         #GNUNET_SYSERR on receive error.
- */
-int
-GNUNET_PSYC_receive_message (struct GNUNET_PSYC_ReceiveHandle *recv,
-                             const struct GNUNET_PSYC_MessageHeader *msg);
-
-
-/**
- * Check if @a data contains a series of valid message parts.
- *
- * @param data_size
- *        Size of @a data.
- * @param data
- *        Data.
- * @param[out] first_ptype
- *        Type of first message part.
- * @param[out] last_ptype
- *        Type of last message part.
- *
- * @return Number of message parts found in @a data.
- *         or GNUNET_SYSERR if the message contains invalid parts.
- */
-int
-GNUNET_PSYC_receive_check_parts (uint16_t data_size, const char *data,
-                                 uint16_t *first_ptype, uint16_t *last_ptype);
-
-
-/**
- * Initialize PSYC message header.
- */
-void
-GNUNET_PSYC_message_header_init (struct GNUNET_PSYC_MessageHeader *pmsg,
-                                 const struct GNUNET_MULTICAST_MessageHeader *mmsg,
-                                 uint32_t flags);
-
-
-/**
- * Create a new PSYC message header from a multicast message for sending it to clients.
- */
-struct GNUNET_PSYC_MessageHeader *
-GNUNET_PSYC_message_header_create (const struct GNUNET_MULTICAST_MessageHeader *mmsg,
-                                   uint32_t flags);
-
-
-/**
- * Create a new PSYC message header from a PSYC message.
- */
-struct GNUNET_PSYC_MessageHeader *
-GNUNET_PSYC_message_header_create_from_psyc (const struct GNUNET_PSYC_Message *msg);
-
-
-#if 0                           /* keep Emacsens' auto-indent happy */
-{
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-/* ifndef GNUNET_PSYC_MESSAGE_H */
-#endif
-
-/** @} */  /* end of group */
diff --git a/src/include/gnunet_psyc_service.h b/src/include/gnunet_psyc_service.h
deleted file mode 100644 (file)
index 3a3131e..0000000
+++ /dev/null
@@ -1,1364 +0,0 @@
-/*
-     This file is part of GNUnet.
-     Copyright (C) 2012, 2013 GNUnet e.V.
-
-     GNUnet is free software: you can redistribute it and/or modify it
-     under the terms of the GNU Affero General Public License as published
-     by the Free Software Foundation, either version 3 of the License,
-     or (at your option) any later version.
-
-     GNUnet is distributed in the hope that it will be useful, but
-     WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     Affero General Public License for more details.
-    
-     You should have received a copy of the GNU Affero General Public License
-     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
-*/
-
-/**
- * @author Gabor X Toth
- * @author Christian Grothoff
- *
- * @file
- * PSYC service
- *
- * @defgroup psyc  PSYC service
- * Send/receive messages in PSYC channels and access the PSYC Store.
- *
- * Note that clients of this API are NOT expected to understand the PSYC message
- * format, only the semantics!  Parsing (and serializing) the PSYC stream format
- * is done within the implementation of the libgnunetpsyc library, and this API
- * deliberately exposes as little as possible of the actual data stream format
- * to the application!
- *
- * NOTE:
- * - this API does not know about PSYC's "root" and "places";
- *   there is no 'root' in GNUnet-PSYC as we're decentralized;
- *   'places' and 'persons' are combined within the same
- *   abstraction, that of a "channel".  Channels are identified
- *   and accessed in this API using a public/private key.
- *   Higher-level applications should use NAMES within GNS
- *   to obtain public keys, and the distinction between
- *   'places' and 'persons' can then be made with the help
- *   of the naming system (and/or conventions).
- *   Channels are (as in PSYC) organized into a hierarchy; each
- *   channel master (the one with the private key) is then
- *   the operator of the multicast group (its Origin in
- *   the terminology of the multicast API).
- * - The API supports passing large amounts of data using
- *   'streaming' for the argument passed to a method.  State
- *   and variables must fit into memory and cannot be streamed
- *   (thus, no passing of 4 GB of data in a variable;
- *   once we implement this, we might want to create a
- *   @c \#define for the maximum size of a variable).
- * - PSYC defines standard variables, methods, etc.  This
- *   library deliberately abstracts over all of these; a
- *   higher-level API should combine the naming system (GNS)
- *   and standard methods (_converse, _notice, _request,
- *   _warning, _error etc) and variables (_action, _color,
- *   _time, etc).  However, this API does take over the
- *   routing variables, specifically '_context' (channel),
- *   and '_source'.  We only kind-of support '_target', as
- *   the target is either everyone in the group or the
- *   origin, and never just a single member of the group;
- *   for such individual messages, an application needs to
- *   construct an 'inbox' channel where the master (only)
- *   receives messages (but never forwards; private responses
- *   would be transmitted by joining the senders 'inbox'
- *   channel -- or a inbox#bob subchannel).  The
- *   goal for all of this is to keep the abstractions in this
- *   API minimal: interaction with multicast, try \& slice,
- *   state/variable/channel management.  Higher-level
- *   operations belong elsewhere (so maybe this API should
- *   be called 'PSYC-low', whereas a higher-level API
- *   implementing defaults for standard methods and
- *   variables might be called 'PSYC-std' or 'PSYC-high'.
- *
- *   In PSYC terminology this is simply called the "PSYC
- *   routing layer" and the abstractions, for instance in
- *   psyced, are quite similar. The higher one is called
- *   "PSYC entity layer." In the text rendering of the
- *   protocol the two are separated by an empty line. See
- *   http://about.psyc.eu/Spec:Packet and related.  --lynX
- *
- * @{
- */
-
-#ifndef GNUNET_PSYC_SERVICE_H
-#define GNUNET_PSYC_SERVICE_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#if 0                           /* keep Emacsens' auto-indent happy */
-}
-#endif
-#endif
-
-#include "gnunet_util_lib.h"
-#include "gnunet_multicast_service.h"
-//Mingw work around
-#ifdef MINGW
-    # ifndef  UINT64_MAX
-    # define  UINT64_MAX 0xffffffffffffffffULL
-    # endif
-#endif
-
-/**
- * Version number of GNUnet-PSYC API.
- */
-#define GNUNET_PSYC_VERSION 0x00000000
-
-
-/**
- * Policy flags for a channel.
- */
-enum GNUNET_PSYC_ChannelFlags
-{
-  /**
-   * Admission must be confirmed by the master.
-   */
-  GNUNET_PSYC_CHANNEL_ADMISSION_CONTROL = 1 << 0,
-
-  /**
-   * Past messages are only available to slaves who were admitted at the time
-   * they were sent to the channel.
-   */
-  GNUNET_PSYC_CHANNEL_RESTRICTED_HISTORY = 1 << 1
-};
-
-
-/**
- * PSYC channel policies.
- */
-enum GNUNET_PSYC_Policy
-{
-  /**
-   * Anyone can join the channel, without announcing their presence;
-   * all messages are always public and can be distributed freely.
-   * Joins may be announced, but this is not required.
-   */
-  GNUNET_PSYC_CHANNEL_ANONYMOUS = 0,
-
-  /**
-   * The master must approve membership to the channel, messages must only be
-   * distributed to current channel slaves.  This includes the channel
-   * state as well as transient messages.
-   */
-  GNUNET_PSYC_CHANNEL_PRIVATE
-    = GNUNET_PSYC_CHANNEL_ADMISSION_CONTROL
-    | GNUNET_PSYC_CHANNEL_RESTRICTED_HISTORY
-
-#if IDEAS_FOR_FUTURE
-  /**
-   * Anyone can freely join the channel (no approval required);
-   * however, messages must only be distributed to current channel
-   * slaves, so the master must still acknowledge that the slave
-   * joined before transient messages are delivered.  As approval is
-   * guaranteed, the presistent channel state can be synchronized freely
-   * immediately, prior to master confirmation.
-   */
-  GNUNET_PSYC_CHANNEL_OPEN
-    = GNUNET_PSYC_CHANNEL_RESTRICTED_HISTORY,
-
-  /**
-   * The master must approve joins to the channel, but past messages can be
-   * freely distributed to slaves.
-   */
-  GNUNET_PSYC_CHANNEL_CLOSED
-    = GNUNET_PSYC_CHANNEL_ADMISSION_CONTROL,
-#endif
-};
-
-
-enum GNUNET_PSYC_MessageFlags
-{
-  /**
-   * Default / no flags.
-   */
-  GNUNET_PSYC_MESSAGE_DEFAULT = 0,
-
-  /**
-   * Historic message, retrieved from PSYCstore.
-   */
-  GNUNET_PSYC_MESSAGE_HISTORIC = 1 << 0,
-
-  /**
-   * Request from slave to master.
-   */
-  GNUNET_PSYC_MESSAGE_REQUEST = 1 << 1,
-
-  /**
-   * Message can be delivered out of order.
-   */
-  GNUNET_PSYC_MESSAGE_ORDER_ANY = 1 << 2
-};
-
-
-/**
- * Values for the @a state_delta field of GNUNET_PSYC_MessageHeader.
- */
-enum GNUNET_PSYC_StateDeltaValues
-{
-  GNUNET_PSYC_STATE_RESET = 0,
-
-  GNUNET_PSYC_STATE_NOT_MODIFIED = UINT64_MAX
-};
-
-
-GNUNET_NETWORK_STRUCT_BEGIN
-
-/**
- * A PSYC message.
- *
- * Used for single-fragment messages e.g. in a join request or response.
- */
-struct GNUNET_PSYC_Message
-{
-  /**
-   * Message header with size and type information.
-   */
-  struct GNUNET_MessageHeader header;
-
-  /* Followed by concatenated PSYC message parts:
-   * messages with GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_* types
-   */
-};
-
-
-/**
- * Header of a PSYC message.
- *
- * The PSYC service adds this when delivering the message to local clients,
- * not present on the multicast layer.
- */
-struct GNUNET_PSYC_MessageHeader
-{
-  /**
-   * Generic message header with size and type information.
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * Flags for this message fragment.
-   *
-   * @see enum GNUNET_PSYC_MessageFlags
-   */
-  uint32_t flags GNUNET_PACKED;
-
-  /**
-   * Number of the message this message part belongs to.
-   * Monotonically increasing from 1.
-   */
-  uint64_t message_id GNUNET_PACKED;
-
-  /**
-   * Byte offset of this @e fragment of the @e message.
-   */
-  uint64_t fragment_offset GNUNET_PACKED;
-
-  /**
-   * Sending slave's public key.
-   * Not set if the message is from the master.
-   */
-  struct GNUNET_CRYPTO_EcdsaPublicKey slave_pub_key;
-
-  /* Followed by concatenated PSYC message parts:
-   * messages with GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_* types
-   */
-};
-
-
-/**
- * The method of a message.
- */
-struct GNUNET_PSYC_MessageMethod
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_METHOD
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * OR'ed GNUNET_PSYC_MasterTransmitFlags
-   */
-  uint32_t flags GNUNET_PACKED;
-
-  /**
-   * Number of message IDs since the last message that contained state
-   * operations. @see enum GNUNET_PSYC_StateDeltaValues
-   */
-  uint64_t state_delta GNUNET_PACKED;
-
-  /* Followed by NUL-terminated method name. */
-};
-
-
-/**
- * A modifier of a message.
- */
-struct GNUNET_PSYC_MessageModifier
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MODIFIER
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * Size of value.
-   */
-  uint32_t value_size GNUNET_PACKED;
-
-  /**
-   * Size of name, including NUL terminator.
-   */
-  uint16_t name_size GNUNET_PACKED;
-
-  /**
-   * enum GNUNET_PSYC_Operator
-   */
-  uint8_t oper;
-
-  /* Followed by NUL-terminated name, then the value. */
-};
-
-
-struct GNUNET_PSYC_CountersResultMessage
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_PSYC_RESULT_COUNTERS
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * Status code for the operation.
-   */
-  uint32_t result_code GNUNET_PACKED;
-
-  /**
-   * Last message ID sent to the channel.
-   */
-  uint64_t max_message_id GNUNET_PACKED;
-};
-
-
-/**
- * Join request sent to a PSYC master.
- */
-struct GNUNET_PSYC_JoinRequestMessage
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_PSYC_MASTER_JOIN_REQUEST
-   */
-  struct GNUNET_MessageHeader header;
-  /**
-   * Public key of the joining slave.
-   */
-  struct GNUNET_CRYPTO_EcdsaPublicKey slave_pub_key;
-
-  /* Followed by struct GNUNET_MessageHeader join_request */
-};
-
-
-/**
- * Join decision sent in reply to a join request.
- */
-struct GNUNET_PSYC_JoinDecisionMessage
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_PSYC_JOIN_DECISION
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * #GNUNET_YES if the slave was admitted.
-   */
-  int32_t is_admitted;
-
-  /**
-   * Public key of the joining slave.
-   * Only set when the master is sending the decision,
-   * not set when a slave is receiving it.
-   */
-  struct GNUNET_CRYPTO_EcdsaPublicKey slave_pub_key;
-
-  /* Followed by struct GNUNET_MessageHeader join_response */
-};
-
-
-enum GNUNET_PSYC_HistoryReplayFlags
-{
-  /**
-   * Replay locally available messages.
-   */
-  GNUNET_PSYC_HISTORY_REPLAY_LOCAL  = 0,
-
-  /**
-   * Replay messages from remote peers if not found locally.
-   */
-  GNUNET_PSYC_HISTORY_REPLAY_REMOTE = 1,
-};
-
-
-struct GNUNET_PSYC_HistoryRequestMessage
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_PSYC_CHANNEL_HISTORY_REPLAY
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * @see enum GNUNET_PSYC_HistoryReplayFlags
-   */
-  uint32_t flags GNUNET_PACKED;
-
-  /**
-   * ID for this operation.
-   */
-  uint64_t op_id GNUNET_PACKED;
-
-  uint64_t start_message_id GNUNET_PACKED;
-
-  uint64_t end_message_id GNUNET_PACKED;
-
-  uint64_t message_limit GNUNET_PACKED;
-
-  /* Followed by NUL-terminated method name prefix. */
-};
-
-
-struct GNUNET_PSYC_StateRequestMessage
-{
-  /**
-   * Types:
-   * - GNUNET_MESSAGE_TYPE_PSYC_CHANNEL_STATE_GET
-   * - GNUNET_MESSAGE_TYPE_PSYC_CHANNEL_STATE_GET_PREFIX
-   */
-  struct GNUNET_MessageHeader header;
-
-  uint32_t reserved GNUNET_PACKED;
-
-  /**
-   * ID for this operation.
-   */
-  uint64_t op_id GNUNET_PACKED;
-
-  /* Followed by NUL-terminated name. */
-};
-
-
-/**** service -> library ****/
-
-
-/**
- * Answer from service to client about last operation.
- */
-struct GNUNET_PSYC_OperationResultMessage
-{
-  /**
-   * Types:
-   * - GNUNET_MESSAGE_TYPE_PSYC_RESULT_CODE
-   * - GNUNET_MESSAGE_TYPE_PSYC_CHANNEL_STATE_RESULT
-   */
-  struct GNUNET_MessageHeader header;
-
-  uint32_t reserved GNUNET_PACKED;
-
-  /**
-   * Operation ID.
-   */
-  uint64_t op_id GNUNET_PACKED;
-
-  /**
-   * Status code for the operation.
-   */
-  uint64_t result_code GNUNET_PACKED;
-
-  /* Followed by:
-   * - on error: NUL-terminated error message
-   * - on success: one of the following message types
-   *
-   *   For a STATE_RESULT, one of:
-   *   - GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MODIFIER
-   *   - GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MOD_CONT
-   *   - GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_END
-   */
-};
-
-GNUNET_NETWORK_STRUCT_END
-
-
-#define GNUNET_PSYC_MODIFIER_MAX_PAYLOAD        \
-  GNUNET_MULTICAST_FRAGMENT_MAX_PAYLOAD         \
-  - sizeof (struct GNUNET_PSYC_MessageModifier)
-
-#define GNUNET_PSYC_MOD_CONT_MAX_PAYLOAD        \
-  GNUNET_MULTICAST_FRAGMENT_MAX_PAYLOAD         \
-  - sizeof (struct GNUNET_MessageHeader)
-
-#define GNUNET_PSYC_DATA_MAX_PAYLOAD            \
-  GNUNET_MULTICAST_FRAGMENT_MAX_PAYLOAD         \
-  - sizeof (struct GNUNET_MessageHeader)
-
-
-/**
- * PSYC message part processing states.
- */
-enum GNUNET_PSYC_MessageState
-{
-  GNUNET_PSYC_MESSAGE_STATE_START    = 0,
-  GNUNET_PSYC_MESSAGE_STATE_HEADER   = 1,
-  GNUNET_PSYC_MESSAGE_STATE_METHOD   = 2,
-  GNUNET_PSYC_MESSAGE_STATE_MODIFIER = 3,
-  GNUNET_PSYC_MESSAGE_STATE_MOD_CONT = 4,
-  GNUNET_PSYC_MESSAGE_STATE_DATA     = 5,
-  GNUNET_PSYC_MESSAGE_STATE_END      = 6,
-  GNUNET_PSYC_MESSAGE_STATE_CANCEL   = 7,
-  GNUNET_PSYC_MESSAGE_STATE_ERROR    = 8,
-};
-
-
-/**
- * Handle that identifies a join request.
- *
- * Used to match calls to #GNUNET_PSYC_JoinCallback to the
- * corresponding calls to GNUNET_PSYC_join_decision().
- */
-struct GNUNET_PSYC_JoinHandle;
-
-
-/**
- * Method called from PSYC upon receiving a message.
- *
- * @param cls  Closure.
- * @param message_id  Sequence number of the message.
- * @param flags  OR'ed GNUNET_PSYC_MessageFlags
- * @param msg  Message part, one of the following types:
- */
-typedef void
-(*GNUNET_PSYC_MessageCallback) (void *cls,
-                                const struct GNUNET_PSYC_MessageHeader *msg);
-
-
-/**
- * Method called from PSYC upon receiving part of a message.
- *
- * @param cls
- *        Closure.
- * @param slave_pub_key
- *        Public key of the slave sending the message.
- *        Only set for channel master.
- * @param message_id
- *        Sequence number of the message.
- * @param flags
- *        OR'ed GNUNET_PSYC_MessageFlags
- * @param fragment_offset
- *        Multicast message fragment offset.
- * @param msg  Message part, one of the following types:
- * - #GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_HEADER
- * - #GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_METHOD
- * - #GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MODIFIER
- * - #GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MOD_CONT
- * - #GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_DATA
- * or NULL if an error occurred while receiving a message.
- */
-typedef void
-(*GNUNET_PSYC_MessagePartCallback) (void *cls,
-                                    const struct GNUNET_PSYC_MessageHeader *msg,
-                                    const struct GNUNET_MessageHeader *pmsg);
-
-
-/**
- * Method called from PSYC upon receiving a join request.
- *
- * @param cls
- *        Closure.
- * @param slave_pub_key
- *        Public key of the slave requesting join.
- * @param join_msg
- *        Join message sent along with the request.
- * @param jh
- *        Join handle to use with GNUNET_PSYC_join_decision()
- */
-typedef void
-(*GNUNET_PSYC_JoinRequestCallback) (void *cls,
-                                    const struct GNUNET_PSYC_JoinRequestMessage *req,
-                                    const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_pub_key,
-                                    const struct GNUNET_PSYC_Message *join_msg,
-                                    struct GNUNET_PSYC_JoinHandle *jh);
-
-
-/**
- * Function to call with the decision made for a join request.
- *
- * Must be called once and only once in response to an invocation of the
- * #GNUNET_PSYC_JoinCallback.
- *
- * @param jh  Join request handle.
- * @param is_admitted
- *   #GNUNET_YES    if the join is approved,
- *   #GNUNET_NO     if it is disapproved,
- *   #GNUNET_SYSERR if we cannot answer the request.
- * @param relay_count  Number of relays given.
- * @param relays  Array of suggested peers that might be useful relays to use
- *        when joining the multicast group (essentially a list of peers that
- *        are already part of the multicast group and might thus be willing
- *        to help with routing).  If empty, only this local peer (which must
- *        be the multicast origin) is a good candidate for building the
- *        multicast tree.  Note that it is unnecessary to specify our own
- *        peer identity in this array.
- * @param join_resp  Application-dependent join response message to send along
- *        with the decision.
- *
- * @return #GNUNET_OK on success,
- *         #GNUNET_SYSERR if @a join_resp is too large.
- */
-int
-GNUNET_PSYC_join_decision (struct GNUNET_PSYC_JoinHandle *jh,
-                           int is_admitted,
-                           uint32_t relay_count,
-                           const struct GNUNET_PeerIdentity *relays,
-                           const struct GNUNET_PSYC_Message *join_resp);
-
-
-/**
- * Handle for the master of a PSYC channel.
- */
-struct GNUNET_PSYC_Master;
-
-
-/**
- * Function called once we are connected to the PSYC service
- * and the channel master is started.
- *
- * Also called when we reconnected to the service
- * after the connection closed unexpectedly.
- *
- * @param cls
- *        Closure.
- * @param result
- *        #GNUNET_YES if there were already messages sent to the channel,
- *        #GNUNET_NO  if the message history is empty,
- *        #GNUNET_SYSERR on error.
- * @param max_message_id
- *        Last message ID sent to the channel.
- */
-typedef void
-(*GNUNET_PSYC_MasterStartCallback) (void *cls, int result,
-                                    uint64_t max_message_id);
-
-
-/**
- * Start a PSYC master channel.
- *
- * Will start a multicast group identified by the given ECC key.  Messages
- * received from group members will be given to the respective handler methods.
- * If a new member wants to join a group, the "join" method handler will be
- * invoked; the join handler must then generate a "join" message to approve the
- * joining of the new member.  The channel can also change group membership
- * without explicit requests.  Note that PSYC doesn't itself "understand" join
- * or part messages, the respective methods must call other PSYC functions to
- * inform PSYC about the meaning of the respective events.
- *
- * @param cfg  Configuration to use (to connect to PSYC service).
- * @param channel_key  ECC key that will be used to sign messages for this
- *        PSYC session. The public key is used to identify the PSYC channel.
- *        Note that end-users will usually not use the private key directly, but
- *        rather look it up in GNS for places managed by other users, or select
- *        a file with the private key(s) when setting up their own channels
- *        FIXME: we'll likely want to use NOT the p521 curve here, but a cheaper
- *        one in the future.
- * @param policy  Channel policy specifying join and history restrictions.
- *        Used to automate join decisions.
- * @param master_start_cb  Function to invoke after the channel master started.
- * @param join_request_cb  Function to invoke when a slave wants to join.
- * @param message_cb  Function to invoke on message parts sent to the channel
- *        and received from slaves
- * @param cls  Closure for @a method and @a join_cb.
- *
- * @return Handle for the channel master, NULL on error.
- */
-struct GNUNET_PSYC_Master *
-GNUNET_PSYC_master_start (const struct GNUNET_CONFIGURATION_Handle *cfg,
-                          const struct GNUNET_CRYPTO_EddsaPrivateKey *channel_key,
-                          enum GNUNET_PSYC_Policy policy,
-                          GNUNET_PSYC_MasterStartCallback master_start_cb,
-                          GNUNET_PSYC_JoinRequestCallback join_request_cb,
-                          GNUNET_PSYC_MessageCallback message_cb,
-                          GNUNET_PSYC_MessagePartCallback message_part_cb,
-                          void *cls);
-
-
-/**
- * Function called to provide data for a transmission via PSYC.
- *
- * Note that returning #GNUNET_YES or #GNUNET_SYSERR (but not #GNUNET_NO)
- * invalidates the respective transmission handle.
- *
- * @param cls Closure.
- * @param[in,out] data_size Initially set to the number of bytes available in
- *        @a data, should be set to the number of bytes written to data.
- * @param[out] data Where to write the body of the message to give to the
- *         method. The function must copy at most @a data_size bytes to @a data.
- * @return #GNUNET_SYSERR on error (fatal, aborts transmission)
- *         #GNUNET_NO on success, if more data is to be transmitted later.
- *         Should be used if @a data_size was not big enough to take all the
- *         data.  If 0 is returned in @a data_size the transmission is paused,
- *         and can be resumed with GNUNET_PSYC_master_transmit_resume().
- *         #GNUNET_YES if this completes the transmission (all data supplied)
- */
-typedef int
-(*GNUNET_PSYC_TransmitNotifyData) (void *cls,
-                                   uint16_t *data_size,
-                                   void *data);
-
-/**
- * Function called to provide a modifier for a transmission via PSYC.
- *
- * Note that returning #GNUNET_YES or #GNUNET_SYSERR (but not #GNUNET_NO)
- * invalidates the respective transmission handle.
- *
- * @param cls Closure.
- * @param[in,out] data_size  Initially set to the number of bytes available in
- *         @a data, should be set to the number of bytes written to data.
- * @param[out] data  Where to write the modifier's name and value.
- *         The function must copy at most @a data_size bytes to @a data.
- *         When this callback is first called for a modifier, @a data should
- *         contain: "name\0value".  If the whole value does not fit, subsequent
- *         calls to this function should write continuations of the value to
- *         @a data.
- * @param[out] oper  Where to write the operator of the modifier.
- *         Only needed during the first call to this callback at the beginning
- *         of the modifier.  In case of subsequent calls asking for value
- *         continuations @a oper is set to #NULL.
- * @param[out] full_value_size  Where to write the full size of the value.
- *         Only needed during the first call to this callback at the beginning
- *         of the modifier.  In case of subsequent calls asking for value
- *         continuations @a value_size is set to #NULL.
- * @return #GNUNET_SYSERR on error (fatal, aborts transmission)
- *         #GNUNET_NO on success, if more data is to be transmitted later.
- *         Should be used if @a data_size was not big enough to take all the
- *         data for the modifier's value (the name must be always returned
- *         during the first call to this callback).
- *         If 0 is returned in @a data_size the transmission is paused,
- *         and can be resumed with GNUNET_PSYC_master_transmit_resume().
- *         #GNUNET_YES if this completes the modifier (the whole value is supplied).
- */
-typedef int
-(*GNUNET_PSYC_TransmitNotifyModifier) (void *cls,
-                                       uint16_t *data_size,
-                                       void *data,
-                                       uint8_t *oper,
-                                       uint32_t *full_value_size);
-
-/**
- * Flags for transmitting messages to a channel by the master.
- */
-enum GNUNET_PSYC_MasterTransmitFlags
-{
-  GNUNET_PSYC_MASTER_TRANSMIT_NONE = 0,
-
-  /**
-   * Whether this message should reset the channel state,
-   * i.e. remove all previously stored state variables.
-   */
-
-  GNUNET_PSYC_MASTER_TRANSMIT_STATE_RESET = 1 << 0,
-
-  /**
-   * Whether this message contains any state modifiers.
-   */
-  GNUNET_PSYC_MASTER_TRANSMIT_STATE_MODIFY = 1 << 1,
-
-  /**
-   * Add PSYC header variable with the hash of the current channel state.
-   */
-  GNUNET_PSYC_MASTER_TRANSMIT_STATE_HASH = 1 << 2,
-
-  /**
-   * Whether we need to increment the group generation counter after
-   * transmitting this message.
-   */
-  GNUNET_PSYC_MASTER_TRANSMIT_INC_GROUP_GEN = 1 << 3
-};
-
-
-/**
- * Handle for a pending PSYC transmission operation.
- */
-struct GNUNET_PSYC_MasterTransmitHandle;
-
-
-/**
- * Send a message to call a method to all members in the PSYC channel.
- *
- * @param master Handle to the PSYC channel.
- * @param method_name Which method should be invoked.
- * @param notify_mod Function to call to obtain modifiers.
- * @param notify_data Function to call to obtain fragments of the data.
- * @param notify_cls Closure for @a notify_mod and @a notify_data.
- * @param flags Flags for the message being transmitted.
- * @return Transmission handle, NULL on error (i.e. more than one request queued).
- */
-struct GNUNET_PSYC_MasterTransmitHandle *
-GNUNET_PSYC_master_transmit (struct GNUNET_PSYC_Master *master,
-                             const char *method_name,
-                             GNUNET_PSYC_TransmitNotifyModifier notify_mod,
-                             GNUNET_PSYC_TransmitNotifyData notify_data,
-                             void *notify_cls,
-                             enum GNUNET_PSYC_MasterTransmitFlags flags);
-
-
-/**
- * Resume transmission to the channel.
- *
- * @param th Handle of the request that is being resumed.
- */
-void
-GNUNET_PSYC_master_transmit_resume (struct GNUNET_PSYC_MasterTransmitHandle *th);
-
-
-/**
- * Abort transmission request to channel.
- *
- * @param th Handle of the request that is being aborted.
- */
-void
-GNUNET_PSYC_master_transmit_cancel (struct GNUNET_PSYC_MasterTransmitHandle *th);
-
-
-/**
- * Relay a message
- *
- * @param master Handle to the PSYC channel.
- * @param method_name Which method should be invoked.
- * @param notify_mod Function to call to obtain modifiers.
- * @param notify_data Function to call to obtain fragments of the data.
- * @param notify_cls Closure for @a notify_mod and @a notify_data.
- * @param flags Flags for the message being transmitted.
- * @return Transmission handle, NULL on error (i.e. more than one request queued).
- */
-struct GNUNET_PSYC_MasterTransmitHandle *
-GNUNET_PSYC_master_relay (struct GNUNET_PSYC_Master *master,
-                          uint64_t message_id);
-
-
-/**
- * Stop a PSYC master channel.
- *
- * @param master
- *        PSYC channel master to stop.
- * @param keep_active
- *        Keep place active after last application disconnected.
- * @param stop_cb
- *        Function called after the master stopped
- *        and disconnected from the psyc service.
- * @param stop_cls
- *        Closure for @a part_cb.
- */
-void
-GNUNET_PSYC_master_stop (struct GNUNET_PSYC_Master *master,
-                         int keep_active,
-                         GNUNET_ContinuationCallback stop_cb,
-                         void *stop_cls);
-
-
-/**
- * Handle for a PSYC channel slave.
- */
-struct GNUNET_PSYC_Slave;
-
-
-/**
- * Function called after the slave connected to the PSYC service.
- *
- * Also called when reconnected to the service
- * after the connection closed unexpectedly.
- *
- * @param cls
- *        Closure.
- * @param result
- *        #GNUNET_YES if there were already messages sent to the channel,
- *        #GNUNET_NO  if the message history is empty,
- *        #GNUNET_SYSERR on error.
- * @param max_message_id
- *        Last message ID sent to the channel.
- */
-typedef void
-(*GNUNET_PSYC_SlaveConnectCallback) (void *cls, int result,
-                                     uint64_t max_message_id);
-
-
-/**
- * Method called to inform about the decision in response to a join request.
- *
- * If @a is_admitted is not #GNUNET_YES, then sending messages to the channel is
- * not possible, but earlier history can be still queried.
- *
- * @param cls  Closure.
- * @param is_admitted  #GNUNET_YES or #GNUNET_NO or #GNUNET_SYSERR
- * @param join_msg  Application-dependent join message from the origin.
- */
-typedef void
-(*GNUNET_PSYC_JoinDecisionCallback) (void *cls,
-                                     const struct GNUNET_PSYC_JoinDecisionMessage *dcsn,
-                                     int is_admitted,
-                                     const struct GNUNET_PSYC_Message *join_msg);
-
-/**
- * Flags for GNUNET_PSYC_slave_join()
- */
-enum GNUNET_PSYC_SlaveJoinFlags
-{
-  GNUNET_PSYC_SLAVE_JOIN_NONE  = 0,
-
-  /**
-   * Local join for history access, no network connection is established.
-   */
-  GNUNET_PSYC_SLAVE_JOIN_LOCAL = 1,
-};
-
-
-/**
- * Join a PSYC channel.
- *
- * The entity joining is always the local peer.  The user must immediately use
- * the GNUNET_PSYC_slave_transmit() functions to transmit a @e join_msg to the
- * channel; if the join request succeeds, the channel state (and @e recent
- * method calls) will be replayed to the joining member.  There is no explicit
- * notification on failure (as the channel may simply take days to approve,
- * and disapproval is simply being ignored).
- *
- * @param cfg
- *        Configuration to use.
- * @param channel_pub_key
- *        ECC public key that identifies the channel we wish to join.
- * @param slave_pub_key
- *        ECC private-public key pair that identifies the slave, and
- *        used by multicast to sign the join request and subsequent unicast
- *        requests sent to the master.
- * @param flags
- *        Join flags.
- * @param origin
- *        Peer identity of the origin.
- * @param relay_count
- *        Number of peers in the @a relays array.
- * @param relays
- *        Peer identities of members of the multicast group, which serve
- *        as relays and used to join the group at.
- * @param message_cb
- *        Function to invoke on message fragments received from the channel.
- * @param message_part_cb
- *        Function to invoke on message parts received from the channel.
- * @param slave_connect_cb
- *        Function invoked once we have connected to the PSYC service.
- * @param join_decision_cb
- *        Function invoked once we have received a join decision.
- * @param cls
- *        Closure for @a message_cb and @a slave_joined_cb.
- * @param join_msg
- *        Join message.
- *
- * @return Handle for the slave, NULL on error.
- */
-struct GNUNET_PSYC_Slave *
-GNUNET_PSYC_slave_join (const struct GNUNET_CONFIGURATION_Handle *cfg,
-                        const struct GNUNET_CRYPTO_EddsaPublicKey *channel_pub_key,
-                        const struct GNUNET_CRYPTO_EcdsaPrivateKey *slave_pub_key,
-                        enum GNUNET_PSYC_SlaveJoinFlags flags,
-                        const struct GNUNET_PeerIdentity *origin,
-                        uint32_t relay_count,
-                        const struct GNUNET_PeerIdentity *relays,
-                        GNUNET_PSYC_MessageCallback message_cb,
-                        GNUNET_PSYC_MessagePartCallback message_part_cb,
-                        GNUNET_PSYC_SlaveConnectCallback slave_connect_cb,
-                        GNUNET_PSYC_JoinDecisionCallback join_decision_cb,
-                        void *cls,
-                        const struct GNUNET_PSYC_Message *join_msg);
-
-
-/**
- * Part a PSYC channel.
- *
- * Will terminate the connection to the PSYC service.  Polite clients should
- * first explicitly send a part request (via GNUNET_PSYC_slave_transmit()).
- *
- * @param slave
- *        Slave handle.
- * @param keep_active
- *        Keep place active after last application disconnected.
- * @param part_cb
- *        Function called after the slave parted the channel
- *        and disconnected from the psyc service.
- * @param part_cls
- *        Closure for @a part_cb.
- */
-void
-GNUNET_PSYC_slave_part (struct GNUNET_PSYC_Slave *slave,
-                        int keep_active,
-                        GNUNET_ContinuationCallback part_cb,
-                        void *part_cls);
-
-
-/**
- * Flags for transmitting messages to the channel master by a slave.
- */
-enum GNUNET_PSYC_SlaveTransmitFlags
-{
-  GNUNET_PSYC_SLAVE_TRANSMIT_NONE = 0
-};
-
-
-/**
- * Handle for a pending PSYC transmission operation.
- */
-struct GNUNET_PSYC_SlaveTransmitHandle;
-
-
-/**
- * Request a message to be sent to the channel master.
- *
- * @param slave Slave handle.
- * @param method_name Which (PSYC) method should be invoked (on host).
- * @param notify_mod Function to call to obtain modifiers.
- * @param notify_data Function to call to obtain fragments of the data.
- * @param notify_cls Closure for @a notify.
- * @param flags Flags for the message being transmitted.
- * @return Transmission handle, NULL on error (i.e. more than one request queued).
- */
-struct GNUNET_PSYC_SlaveTransmitHandle *
-GNUNET_PSYC_slave_transmit (struct GNUNET_PSYC_Slave *slave,
-                            const char *method_name,
-                            GNUNET_PSYC_TransmitNotifyModifier notify_mod,
-                            GNUNET_PSYC_TransmitNotifyData notify_data,
-                            void *notify_cls,
-                            enum GNUNET_PSYC_SlaveTransmitFlags flags);
-
-
-/**
- * Resume transmission to the master.
- *
- * @param th Handle of the request that is being resumed.
- */
-void
-GNUNET_PSYC_slave_transmit_resume (struct GNUNET_PSYC_SlaveTransmitHandle *th);
-
-
-/**
- * Abort transmission request to master.
- *
- * @param th Handle of the request that is being aborted.
- */
-void
-GNUNET_PSYC_slave_transmit_cancel (struct GNUNET_PSYC_SlaveTransmitHandle *th);
-
-
-/**
- * Handle to access PSYC channel operations for both the master and slaves.
- */
-struct GNUNET_PSYC_Channel;
-
-
-/**
- * Convert a channel @a master to a @e channel handle to access the @e channel
- * APIs.
- *
- * @param master Channel master handle.
- * @return Channel handle, valid for as long as @a master is valid.
- */
-struct GNUNET_PSYC_Channel *
-GNUNET_PSYC_master_get_channel (struct GNUNET_PSYC_Master *master);
-
-
-/**
- * Convert @a slave to a @e channel handle to access the @e channel APIs.
- *
- * @param slave Slave handle.
- * @return Channel handle, valid for as long as @a slave is valid.
- */
-struct GNUNET_PSYC_Channel *
-GNUNET_PSYC_slave_get_channel (struct GNUNET_PSYC_Slave *slave);
-
-
-/**
- * Add a slave to the channel's membership list.
- *
- * Note that this will NOT generate any PSYC traffic, it will merely update the
- * local database to modify how we react to <em>membership test</em> queries.
- * The channel master still needs to explicitly transmit a @e join message to
- * notify other channel members and they then also must still call this function
- * in their respective methods handling the @e join message.  This way, how @e
- * join and @e part operations are exactly implemented is still up to the
- * application; for example, there might be a @e part_all method to kick out
- * everyone.
- *
- * Note that channel slaves are explicitly trusted to execute such methods
- * correctly; not doing so correctly will result in either denying other slaves
- * access or offering access to channel data to non-members.
- *
- * @param channel
- *        Channel handle.
- * @param slave_pub_key
- *        Identity of channel slave to add.
- * @param announced_at
- *        ID of the message that announced the membership change.
- * @param effective_since
- *        Addition of slave is in effect since this message ID.
- * @param result_cb
- *        Function to call with the result of the operation.
- *        The @e result_code argument is #GNUNET_OK on success, or
- *        #GNUNET_SYSERR on error.  In case of an error, the @e data argument
- *        can contain an optional error message.
- * @param cls
- *        Closure for @a result_cb.
- */
-void
-GNUNET_PSYC_channel_slave_add (struct GNUNET_PSYC_Channel *channel,
-                               const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_pub_key,
-                               uint64_t announced_at,
-                               uint64_t effective_since,
-                               GNUNET_ResultCallback result_cb,
-                               void *cls);
-
-
-/**
- * Remove a slave from the channel's membership list.
- *
- * Note that this will NOT generate any PSYC traffic, it will merely update the
- * local database to modify how we react to <em>membership test</em> queries.
- * The channel master still needs to explicitly transmit a @e part message to
- * notify other channel members and they then also must still call this function
- * in their respective methods handling the @e part message.  This way, how
- * @e join and @e part operations are exactly implemented is still up to the
- * application; for example, there might be a @e part_all message to kick out
- * everyone.
- *
- * Note that channel members are explicitly trusted to perform these
- * operations correctly; not doing so correctly will result in either
- * denying members access or offering access to channel data to
- * non-members.
- *
- * @param channel
- *        Channel handle.
- * @param slave_pub_key
- *        Identity of channel slave to remove.
- * @param announced_at
- *        ID of the message that announced the membership change.
- * @param result_cb
- *        Function to call with the result of the operation.
- *        The @e result_code argument is #GNUNET_OK on success, or
- *        #GNUNET_SYSERR on error.  In case of an error, the @e data argument
- *        can contain an optional error message.
- * @param cls
- *        Closure for @a result_cb.
- */
-void
-GNUNET_PSYC_channel_slave_remove (struct GNUNET_PSYC_Channel *channel,
-                                  const struct GNUNET_CRYPTO_EcdsaPublicKey
-                                  *slave_pub_key,
-                                  uint64_t announced_at,
-                                  GNUNET_ResultCallback result_cb,
-                                  void *cls);
-
-
-/**
- * History request handle.
- */
-struct GNUNET_PSYC_HistoryRequest;
-
-
-/**
- * Request to replay a part of the message history of the channel.
- *
- * Historic messages (but NOT the state at the time) will be replayed (given to
- * the normal method handlers) if available and if access is permitted.
- *
- * @param channel
- *        Which channel should be replayed?
- * @param start_message_id
- *        Earliest interesting point in history.
- * @param end_message_id
- *        Last (inclusive) interesting point in history.
- * @param method_prefix
- *        Retrieve only messages with a matching method prefix.
- * @param flags
- *        OR'ed enum GNUNET_PSYC_HistoryReplayFlags
- * @param result_cb
- *        Function to call when the requested history has been fully replayed.
- *        Once this function has been called, the client must not call
- *        GNUNET_PSYC_channel_history_replay_cancel() anymore.
- * @param cls
- *        Closure for the callbacks.
- *
- * @return Handle to cancel history replay operation.
- */
-struct GNUNET_PSYC_HistoryRequest *
-GNUNET_PSYC_channel_history_replay (struct GNUNET_PSYC_Channel *channel,
-                                    uint64_t start_message_id,
-                                    uint64_t end_message_id,
-                                    const char *method_prefix,
-                                    uint32_t flags,
-                                    GNUNET_PSYC_MessageCallback message_cb,
-                                    GNUNET_PSYC_MessagePartCallback message_part_cb,
-                                    GNUNET_ResultCallback result_cb,
-                                    void *cls);
-
-
-/**
- * Request to replay the latest messages from the message history of the channel.
- *
- * Historic messages (but NOT the state at the time) will be replayed (given to
- * the normal method handlers) if available and if access is permitted.
- *
- * @param channel
- *        Which channel should be replayed?
- * @param message_limit
- *        Maximum number of messages to replay.
- * @param flags
- *        OR'ed enum GNUNET_PSYC_HistoryReplayFlags
- * @param finish_cb
- *        Function to call when the requested history has been fully replayed
- *        (counting message IDs might not suffice, as some messages might be
- *        secret and thus the listener would not know the story is finished
- *        without being told explicitly)o once this function has been called, the
- *        client must not call GNUNET_PSYC_channel_history_replay_cancel() anymore.
- * @param cls
- *        Closure for the callbacks.
- *
- * @return Handle to cancel history replay operation.
- */
-struct GNUNET_PSYC_HistoryRequest *
-GNUNET_PSYC_channel_history_replay_latest (struct GNUNET_PSYC_Channel *channel,
-                                           uint64_t message_limit,
-                                           const char *method_prefix,
-                                           uint32_t flags,
-                                           GNUNET_PSYC_MessageCallback message_cb,
-                                           GNUNET_PSYC_MessagePartCallback message_part_cb,
-                                           GNUNET_ResultCallback result_cb,
-                                           void *cls);
-
-
-void
-GNUNET_PSYC_channel_history_replay_cancel (struct GNUNET_PSYC_Channel *channel,
-                                           struct GNUNET_PSYC_HistoryRequest *hr);
-
-
-/**
- * Function called to inform a member about stored state values for a channel.
- *
- * If @a full_value_size > value_size then this function is called multiple
- * times until the whole value arrived.
- *
- * @param cls
- *        Closure.
- * @param name
- *        Name of the state variable.
- *        NULL if there are no more state variables to be returned.
- * @param value
- *        Value of the state variable.
- * @param value_size
- *        Number of bytes in @a value.
- * @param full_value_size
- *        Number of bytes in the full value, including continuations.
- *        Only set for the first part of a variable,
- *        in case of a continuation it is 0.
- */
-typedef void
-(*GNUNET_PSYC_StateVarCallback) (void *cls,
-                                 const struct GNUNET_MessageHeader *mod,
-                                 const char *name,
-                                 const void *value,
-                                 uint32_t value_size,
-                                 uint32_t full_value_size);
-
-
-/**
- * State request handle.
- */
-struct GNUNET_PSYC_StateRequest;
-
-
-/**
- * Retrieve the best matching channel state variable.
- *
- * If the requested variable name is not present in the state, the nearest
- * less-specific name is matched; for example, requesting "_a_b" will match "_a"
- * if "_a_b" does not exist.
- *
- * @param channel
- *        Channel handle.
- * @param full_name
- *        Full name of the requested variable.
- *        The actual variable returned might have a shorter name.
- * @param var_cb
- *        Function called once when a matching state variable is found.
- *        Not called if there's no matching state variable.
- * @param result_cb
- *        Function called after the operation finished.
- *        (i.e. all state variables have been returned via @a state_cb)
- * @param cls
- *        Closure for the callbacks.
- */
-struct GNUNET_PSYC_StateRequest *
-GNUNET_PSYC_channel_state_get (struct GNUNET_PSYC_Channel *channel,
-                               const char *full_name,
-                               GNUNET_PSYC_StateVarCallback var_cb,
-                               GNUNET_ResultCallback result_cb,
-                               void *cls);
-
-
-/**
- * Return all channel state variables whose name matches a given prefix.
- *
- * A name matches if it starts with the given @a name_prefix, thus requesting
- * the empty prefix ("") will match all values; requesting "_a_b" will also
- * return values stored under "_a_b_c".
- *
- * The @a state_cb is invoked on all matching state variables asynchronously, as
- * the state is stored in and retrieved from the PSYCstore,
- *
- * @param channel
- *        Channel handle.
- * @param name_prefix
- *        Prefix of the state variable name to match.
- * @param var_cb
- *        Function called once when a matching state variable is found.
- *        Not called if there's no matching state variable.
- * @param result_cb
- *        Function called after the operation finished.
- *        (i.e. all state variables have been returned via @a state_cb)
- * @param cls
- *        Closure for the callbacks.
- */
-struct GNUNET_PSYC_StateRequest *
-GNUNET_PSYC_channel_state_get_prefix (struct GNUNET_PSYC_Channel *channel,
-                                      const char *name_prefix,
-                                      GNUNET_PSYC_StateVarCallback var_cb,
-                                      GNUNET_ResultCallback result_cb,
-                                      void *cls);
-
-/**
- * Cancel a state request operation.
- *
- * @param sr
- *        Handle for the operation to cancel.
- */
-void
-GNUNET_PSYC_channel_state_get_cancel (struct GNUNET_PSYC_StateRequest *sr);
-
-
-
-#if 0                           /* keep Emacsens' auto-indent happy */
-{
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-/* ifndef GNUNET_PSYC_SERVICE_H */
-#endif
-
-/** @} */  /* end of group */
diff --git a/src/include/gnunet_psyc_slicer.h b/src/include/gnunet_psyc_slicer.h
deleted file mode 100644 (file)
index 87f66d7..0000000
+++ /dev/null
@@ -1,378 +0,0 @@
-/*
-     This file is part of GNUnet.
-     Copyright (C) 2013 GNUnet e.V.
-
-     GNUnet is free software: you can redistribute it and/or modify it
-     under the terms of the GNU Affero General Public License as published
-     by the Free Software Foundation, either version 3 of the License,
-     or (at your option) any later version.
-
-     GNUnet is distributed in the hope that it will be useful, but
-     WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     Affero General Public License for more details.
-    
-     You should have received a copy of the GNU Affero General Public License
-     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
-*/
-
-/**
- * @author Gabor X Toth
- * @author Christian Grothoff
- *
- * @file
- * PSYC Slicer library
- *
- * @defgroup psyc-util-slicer  PSYC Utilities library: Slicer
- * Try-and-slice processing of PSYC method names and environment.
- * @{
- */
-
-#ifndef GNUNET_PSYC_SLICER_H
-#define GNUNET_PSYC_SLICER_H
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#if 0                           /* keep Emacsens' auto-indent happy */
-}
-#endif
-#endif
-
-#include "gnunet_util_lib.h"
-
-
-/**
- * Handle to an implementation of try-and-slice.
- */
-struct GNUNET_PSYC_Slicer;
-
-
-/**
- * Function called upon receiving a message indicating a call to a @e method.
- *
- * This function is called one or more times for each message until all data
- * fragments arrive from the network.
- *
- * @param cls
- *        Closure.
- * @param msg
- *        Message part, as it arrived from the network.
- * @param message_id
- *        Message counter, monotonically increasing from 1.
- * @param flags
- *        OR'ed GNUNET_PSYC_MessageFlags
- * @param fragment_offset
- *        Multicast message fragment offset.
- * @param tmit_flags
- *        OR'ed GNUNET_PSYC_MasterTransmitFlags
- * @param nym
- *        The sender of the message.
- *        Can be NULL if the message is not connected to a pseudonym.
- * @param method_name
- *        Original method name from PSYC.
- *        May be more specific than the registered method name due to
- *        try-and-slice matching.
- */
-typedef void
-(*GNUNET_PSYC_MethodCallback) (void *cls,
-                               const struct GNUNET_PSYC_MessageHeader *msg,
-                               const struct GNUNET_PSYC_MessageMethod *meth,
-                               uint64_t message_id,
-                               const char *method_name);
-
-
-/**
- * Function called upon receiving a modifier of a message.
- *
- * @param cls
- *        Closure.
- * @param message_id
- *        Message ID this data fragment belongs to.
- * @param flags
- *        OR'ed GNUNET_PSYC_MessageFlags
- * @param fragment_offset
- *        Multicast message fragment offset.
- * @param msg
- *        Message part, as it arrived from the network.
- * @param oper
- *        Operation to perform.
- *        0 in case of a modifier continuation.
- * @param name
- *        Name of the modifier.
- *        NULL in case of a modifier continuation.
- * @param value
- *        Value of the modifier.
- * @param value_size
- *        Size of @value.
- */
-typedef void
-(*GNUNET_PSYC_ModifierCallback) (void *cls,
-                                 const struct GNUNET_PSYC_MessageHeader *msg,
-                                 const struct GNUNET_MessageHeader *pmsg,
-                                 uint64_t message_id,
-                                 enum GNUNET_PSYC_Operator oper,
-                                 const char *name,
-                                 const void *value,
-                                 uint16_t value_size,
-                                 uint16_t full_value_size);
-
-
-/**
- * Function called upon receiving a data fragment of a message.
- *
- * @param cls
- *        Closure.
- * @param msg
- *        Message part, as it arrived from the network.
- * @param message_id
- *        Message ID this data fragment belongs to.
- * @param flags
- *        OR'ed GNUNET_PSYC_MessageFlags
- * @param fragment_offset
- *        Multicast message fragment offset.
- * @param data
- *        Data stream given to the method.
- * @param data_size
- *        Number of bytes in @a data.
- * @param end
- *        End of message?
- *        #GNUNET_NO     if there are further fragments,
- *        #GNUNET_YES    if this is the last fragment,
- *        #GNUNET_SYSERR indicates the message was cancelled by the sender.
- */
-typedef void
-(*GNUNET_PSYC_DataCallback) (void *cls,
-                             const struct GNUNET_PSYC_MessageHeader *msg,
-                             const struct GNUNET_MessageHeader *pmsg,
-                             uint64_t message_id,
-                             const void *data,
-                             uint16_t data_size);
-
-
-/**
- * End of message.
- *
- * @param cls
- *        Closure.
- * @param msg
- *        Message part, as it arrived from the network.
- * @param message_id
- *        Message ID this data fragment belongs to.
- * @param flags
- *        OR'ed GNUNET_PSYC_MessageFlags
- * @param fragment_offset
- *        Multicast message fragment offset.
- * @param cancelled
- *        #GNUNET_YES if the message was cancelled,
- *        #GNUNET_NO  if the message is complete.
- */
-typedef void
-(*GNUNET_PSYC_EndOfMessageCallback) (void *cls,
-                                     const struct GNUNET_PSYC_MessageHeader *msg,
-                                     const struct GNUNET_MessageHeader *pmsg,
-                                     uint64_t message_id,
-                                     uint8_t is_cancelled);
-
-
-/**
- * Create a try-and-slice instance.
- *
- * A slicer processes incoming messages and notifies callbacks about matching
- * methods or modifiers encountered.
- *
- * @return A new try-and-slice construct.
- */
-struct GNUNET_PSYC_Slicer *
-GNUNET_PSYC_slicer_create (void);
-
-
-/**
- * Add a method to the try-and-slice instance.
- *
- * The callbacks are called for messages with a matching @a method_name prefix.
- *
- * @param slicer
- *        The try-and-slice instance to extend.
- * @param method_name
- *        Name of the given method, use empty string to match all.
- * @param method_cb
- *        Method handler invoked upon a matching message.
- * @param modifier_cb
- *        Modifier handler, invoked after @a method_cb
- *        for each modifier in the message.
- * @param data_cb
- *        Data handler, invoked after @a modifier_cb for each data fragment.
- * @param eom_cb
- *        Invoked upon reaching the end of a matching message.
- * @param cls
- *        Closure for the callbacks.
- */
-void
-GNUNET_PSYC_slicer_method_add (struct GNUNET_PSYC_Slicer *slicer,
-                               const char *method_name,
-                               GNUNET_PSYC_MessageCallback msg_cb,
-                               GNUNET_PSYC_MethodCallback method_cb,
-                               GNUNET_PSYC_ModifierCallback modifier_cb,
-                               GNUNET_PSYC_DataCallback data_cb,
-                               GNUNET_PSYC_EndOfMessageCallback eom_cb,
-                               void *cls);
-
-/**
- * Remove a registered method from the try-and-slice instance.
- *
- * Removes one matching handler registered with the given
- * @a method_name and callbacks.
- *
- * @param slicer
- *        The try-and-slice instance.
- * @param method_name
- *        Name of the method to remove.
- * @param method_cb
- *        Only remove matching method handler, or NULL.
- * @param modifier_cb
- *        Only remove matching modifier handler, or NULL.
- * @param data_cb
- *        Only remove matching data handler, or NULL.
- * @param eom_cb
- *        Only remove matching End of Message handler, or NULL.
- *
- * @return #GNUNET_OK if a method handler was removed,
- *         #GNUNET_NO if no handler matched the given method name and callbacks.
- */
-int
-GNUNET_PSYC_slicer_method_remove (struct GNUNET_PSYC_Slicer *slicer,
-                                  const char *method_name,
-                                  GNUNET_PSYC_MessageCallback msg_cb,
-                                  GNUNET_PSYC_MethodCallback method_cb,
-                                  GNUNET_PSYC_ModifierCallback modifier_cb,
-                                  GNUNET_PSYC_DataCallback data_cb,
-                                  GNUNET_PSYC_EndOfMessageCallback eom_cb);
-
-
-/**
- * Watch a place for changed objects.
- *
- * @param slicer
- *        The try-and-slice instance.
- * @param object_filter
- *        Object prefix to match.
- * @param modifier_cb
- *        Function to call when encountering a state modifier.
- * @param cls
- *        Closure for callback.
- */
-void
-GNUNET_PSYC_slicer_modifier_add (struct GNUNET_PSYC_Slicer *slicer,
-                                 const char *object_filter,
-                                 GNUNET_PSYC_ModifierCallback modifier_cb,
-                                 void *cls);
-
-
-/**
- * Remove a registered modifier from the try-and-slice instance.
- *
- * Removes one matching handler registered with the given
- * @a object_filter and callback.
- *
- * @param slicer
- *        The try-and-slice instance.
- * @param object_filter
- *        Object prefix to match.
- * @param modifier_cb
- *        Function to call when encountering a state modifier changes.
- */
-int
-GNUNET_PSYC_slicer_modifier_remove (struct GNUNET_PSYC_Slicer *slicer,
-                                    const char *object_filter,
-                                    GNUNET_PSYC_ModifierCallback modifier_cb);
-
-
-/**
- * Process an incoming message and call matching handlers.
- *
- * @param slicer
- *        The slicer to use.
- * @param msg
- *        The message as it arrived from the network.
- */
-void
-GNUNET_PSYC_slicer_message (struct GNUNET_PSYC_Slicer *slicer,
-                            const struct GNUNET_PSYC_MessageHeader *msg);
-
-
-/**
- * Process an incoming message part and call matching handlers.
- *
- * @param slicer
- *        The slicer to use.
- * @param message_id
- *        ID of the message.
- * @param flags
- *        Flags for the message.
- *        @see enum GNUNET_PSYC_MessageFlags
- * @param fragment offset
- *        Fragment offset of the message.
- * @param msg
- *        The message part as it arrived from the network.
- */
-void
-GNUNET_PSYC_slicer_message_part (struct GNUNET_PSYC_Slicer *slicer,
-                                 const struct GNUNET_PSYC_MessageHeader *msg,
-                                 const struct GNUNET_MessageHeader *pmsg);
-
-
-/**
- * Remove all registered method handlers.
- *
- * @param slicer
- *        Slicer to clear.
- */
-void
-GNUNET_PSYC_slicer_method_clear (struct GNUNET_PSYC_Slicer *slicer);
-
-
-/**
- * Remove all registered modifier handlers.
- *
- * @param slicer
- *        Slicer to clear.
- */
-void
-GNUNET_PSYC_slicer_modifier_clear (struct GNUNET_PSYC_Slicer *slicer);
-
-
-/**
- * Remove all registered method & modifier handlers.
- *
- * @param slicer
- *        Slicer to clear.
- */
-void
-GNUNET_PSYC_slicer_clear (struct GNUNET_PSYC_Slicer *slicer);
-
-
-/**
- * Destroy a given try-and-slice instance.
- *
- * @param slicer
- *        Slicer to destroy
- */
-void
-GNUNET_PSYC_slicer_destroy (struct GNUNET_PSYC_Slicer *slicer);
-
-
-#if 0                           /* keep Emacsens' auto-indent happy */
-{
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-/* ifndef GNUNET_PSYC_SLICER_H */
-#endif
-
-/** @} */  /* end of group */
diff --git a/src/include/gnunet_psyc_util_lib.h b/src/include/gnunet_psyc_util_lib.h
deleted file mode 100644 (file)
index 57eec65..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
-     This file is part of GNUnet.
-     Copyright (C) 2012, 2013 GNUnet e.V.
-
-     GNUnet is free software: you can redistribute it and/or modify it
-     under the terms of the GNU Affero General Public License as published
-     by the Free Software Foundation, either version 3 of the License,
-     or (at your option) any later version.
-
-     GNUnet is distributed in the hope that it will be useful, but
-     WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     Affero General Public License for more details.
-    
-     You should have received a copy of the GNU Affero General Public License
-     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
-*/
-
-/**
- * @author Gabor X Toth
- *
- * @file
- * PSYC utilities: messages, environment, slicer
- */
-
-#ifndef GNUNET_PSYC_UTIL_LIB_H
-#define GNUNET_PSYC_UTIL_LIB_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#if 0                           /* keep Emacsens' auto-indent happy */
-}
-#endif
-#endif
-
-
-#include "gnunet_psyc_env.h"
-#include "gnunet_psyc_message.h"
-#include "gnunet_psyc_slicer.h"
-
-
-#if 0                           /* keep Emacsens' auto-indent happy */
-{
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-/* ifndef GNUNET_PSYC_UTIL_LIB_H */
-#endif
diff --git a/src/include/gnunet_psycstore_plugin.h b/src/include/gnunet_psycstore_plugin.h
deleted file mode 100644 (file)
index fac549f..0000000
+++ /dev/null
@@ -1,383 +0,0 @@
-/*
-     This file is part of GNUnet
-     Copyright (C) 2013 GNUnet e.V.
-
-     GNUnet is free software: you can redistribute it and/or modify it
-     under the terms of the GNU Affero General Public License as published
-     by the Free Software Foundation, either version 3 of the License,
-     or (at your option) any later version.
-
-     GNUnet is distributed in the hope that it will be useful, but
-     WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     Affero General Public License for more details.
-    
-     You should have received a copy of the GNU Affero General Public License
-     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
-*/
-
-/**
- * @author Gabor X Toth
- *
- * @file
- * Plugin API for the PSYCstore database backend
- *
- * @defgroup psycstore-plugin  PSYC Store plugin API
- * Plugin API for the PSYC Store database backend
- * @{
- */
-#ifndef GNUNET_PSYCSTORE_PLUGIN_H
-#define GNUNET_PSYCSTORE_PLUGIN_H
-
-#include "gnunet_util_lib.h"
-#include "gnunet_psycstore_service.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#if 0                           /* keep Emacsens' auto-indent happy */
-}
-#endif
-#endif
-
-
-/**
- * Struct returned by the initialization function of the plugin.
- */
-struct GNUNET_PSYCSTORE_PluginFunctions
-{
-
-  /**
-   * Closure to pass to all plugin functions.
-   */
-  void *cls;
-
-  /**
-   * Store join/leave events for a PSYC channel in order to be able to answer
-   * membership test queries later.
-   *
-   * @see GNUNET_PSYCSTORE_membership_store()
-   *
-   * @return #GNUNET_OK on success, else #GNUNET_SYSERR
-   */
-  int
-  (*membership_store) (void *cls,
-                       const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                       const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_key,
-                       int did_join,
-                       uint64_t announced_at,
-                       uint64_t effective_since,
-                       uint64_t group_generation);
-
-  /**
-   * Test if a member was admitted to the channel at the given message ID.
-   *
-   * @see GNUNET_PSYCSTORE_membership_test()
-   *
-   * @return #GNUNET_YES if the member was admitted, #GNUNET_NO if not,
-   *         #GNUNET_SYSERR if there was en error.
-   */
-  int
-  (*membership_test) (void *cls,
-                      const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                      const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_key,
-                      uint64_t message_id);
-
-  /**
-   * Store a message fragment sent to a channel.
-   *
-   * @see GNUNET_PSYCSTORE_fragment_store()
-   *
-   * @return #GNUNET_OK on success, else #GNUNET_SYSERR
-   */
-  int
-  (*fragment_store) (void *cls,
-                     const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                     const struct GNUNET_MULTICAST_MessageHeader *message,
-                     uint32_t psycstore_flags);
-
-  /**
-   * Set additional flags for a given message.
-   *
-   * They are OR'd with any existing flags set.
-   *
-   * @param cls Closure.
-   * @param channel_key Public key of the channel.
-   * @param message_id ID of the message.
-   * @param psycstore_flags OR'd GNUNET_PSYCSTORE_MessageFlags.
-   *
-   * @return #GNUNET_OK on success, else #GNUNET_SYSERR
-   */
-  int
-  (*message_add_flags) (void *cls,
-                        const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                        uint64_t message_id,
-                        uint32_t psycstore_flags);
-
-  /**
-   * Retrieve a message fragment range by fragment ID.
-   *
-   * @see GNUNET_PSYCSTORE_fragment_get()
-   *
-   * @return #GNUNET_OK on success, else #GNUNET_SYSERR
-   */
-  int
-  (*fragment_get) (void *cls,
-                   const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                   uint64_t first_fragment_id,
-                   uint64_t last_fragment_id,
-                   uint64_t *returned_fragments,
-                   GNUNET_PSYCSTORE_FragmentCallback cb,
-                   void *cb_cls);
-
-  /**
-   * Retrieve latest message fragments.
-   *
-   * @see GNUNET_PSYCSTORE_fragment_get()
-   *
-   * @return #GNUNET_OK on success, else #GNUNET_SYSERR
-   */
-  int
-  (*fragment_get_latest) (void *cls,
-                          const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                          uint64_t fragment_limit,
-                          uint64_t *returned_fragments,
-                          GNUNET_PSYCSTORE_FragmentCallback cb,
-                          void *cb_cls);
-
-  /**
-   * Retrieve all fragments of a message ID range.
-   *
-   * @see GNUNET_PSYCSTORE_message_get()
-   *
-   * @return #GNUNET_OK on success, else #GNUNET_SYSERR
-   */
-  int
-  (*message_get) (void *cls,
-                  const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                  uint64_t first_fragment_id,
-                  uint64_t last_fragment_id,
-                  uint64_t fragment_limit,
-                  uint64_t *returned_fragments,
-                  GNUNET_PSYCSTORE_FragmentCallback cb,
-                  void *cb_cls);
-
-  /**
-   * Retrieve all fragments of the latest messages.
-   *
-   * @see GNUNET_PSYCSTORE_message_get()
-   *
-   * @return #GNUNET_OK on success, else #GNUNET_SYSERR
-   */
-  int
-  (*message_get_latest) (void *cls,
-                         const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                         uint64_t fragment_limit,
-                         uint64_t *returned_fragments,
-                         GNUNET_PSYCSTORE_FragmentCallback cb,
-                         void *cb_cls);
-
-  /**
-   * Retrieve a fragment of message specified by its message ID and fragment
-   * offset.
-   *
-   * @see GNUNET_PSYCSTORE_message_get_fragment()
-   *
-   * @return #GNUNET_OK on success, else #GNUNET_SYSERR
-   */
-  int
-  (*message_get_fragment) (void *cls,
-                           const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                           uint64_t message_id,
-                           uint64_t fragment_offset,
-                           GNUNET_PSYCSTORE_FragmentCallback cb,
-                           void *cb_cls);
-
-  /**
-   * Retrieve the max. values of message counters for a channel.
-   *
-   * @see GNUNET_PSYCSTORE_counters_get()
-   *
-   * @return #GNUNET_OK on success, else #GNUNET_SYSERR
-   */
-  int
-  (*counters_message_get) (void *cls,
-                           const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                           uint64_t *max_fragment_id,
-                           uint64_t *max_message_id,
-                           uint64_t *max_group_generation);
-
-  /**
-   * Retrieve the max. values of state counters for a channel.
-   *
-   * @see GNUNET_PSYCSTORE_counters_get()
-   *
-   * @return #GNUNET_OK on success, else #GNUNET_SYSERR
-   */
-  int
-  (*counters_state_get) (void *cls,
-                         const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                         uint64_t *max_state_message_id);
-
-
-  /**
-   * Begin modifying current state.
-   *
-   * @see GNUNET_PSYCSTORE_state_modify()
-   *
-   * @return #GNUNET_OK on success, else #GNUNET_SYSERR
-   */
-  int
-  (*state_modify_begin) (void *cls,
-                         const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                         uint64_t message_id, uint64_t state_delta);
-
-  /**
-   * Set the current value of a state variable.
-   *
-   * The state modification process is started with state_modify_begin(),
-   * which is followed by one or more calls to this function,
-   * and finished with state_modify_end().
-   *
-   * @see GNUNET_PSYCSTORE_state_modify()
-   *
-   * @return #GNUNET_OK on success, else #GNUNET_SYSERR
-   */
-  int
-  (*state_modify_op) (void *cls,
-                      const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                      enum GNUNET_PSYC_Operator op,
-                      const char *name, const void *value, size_t value_size);
-
-
-  /**
-   * End modifying current state.
-   *
-   * @see GNUNET_PSYCSTORE_state_modify()
-   *
-   * @return #GNUNET_OK on success, else #GNUNET_SYSERR
-   */
-  int
-  (*state_modify_end) (void *cls,
-                       const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                       uint64_t message_id);
-
-
-  /**
-   * Begin synchronizing state.
-   *
-   * @see GNUNET_PSYCSTORE_state_sync()
-   *
-   * @return #GNUNET_OK on success, else #GNUNET_SYSERR
-   */
-  int
-  (*state_sync_begin) (void *cls,
-                         const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key);
-
-  /**
-   * Assign value of a state variable while synchronizing state.
-   *
-   * The state synchronization process is started with state_sync_begin(),
-   * which is followed by one or more calls to this function,
-   * and finished using state_sync_end().
-   *
-   * @see GNUNET_PSYCSTORE_state_sync()
-   *
-   * @return #GNUNET_OK on success, else #GNUNET_SYSERR
-   */
-  int
-  (*state_sync_assign) (void *cls,
-                        const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                        const char *name, const void *value, size_t value_size);
-
-
-  /**
-   * End synchronizing state.
-   *
-   * @see GNUNET_PSYCSTORE_state_sync()
-   *
-   * @return #GNUNET_OK on success, else #GNUNET_SYSERR
-   */
-  int
-  (*state_sync_end) (void *cls,
-                     const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                     uint64_t max_state_message_id,
-                     uint64_t state_hash_message_id);
-
-
-  /**
-   * Reset the state of a channel.
-   *
-   * Delete all state variables stored for the given channel.
-   *
-   * @see GNUNET_PSYCSTORE_state_reset()
-   *
-   * @return #GNUNET_OK on success, else #GNUNET_SYSERR
-   */
-  int
-  (*state_reset) (void *cls,
-                  const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key);
-
-  /**
-   * Update signed state values from the current ones.
-   *
-   * Sets value_signed = value_current for each variable for the given channel.
-   */
-  int
-  (*state_update_signed) (void *cls,
-                          const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key);
-
-
-  /**
-   * Retrieve a state variable by name (exact match).
-   *
-   * @return #GNUNET_OK on success, else #GNUNET_SYSERR
-   */
-  int
-  (*state_get) (void *cls,
-                const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                const char *name,
-                GNUNET_PSYCSTORE_StateCallback cb,
-                void *cb_cls);
-
-  /**
-   * Retrieve all state variables for a channel with the given prefix.
-   *
-   * @see GNUNET_PSYCSTORE_state_get_prefix()
-   *
-   * @return #GNUNET_OK on success, else #GNUNET_SYSERR
-   */
-  int
-  (*state_get_prefix) (void *cls,
-                       const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                       const char *name,
-                       GNUNET_PSYCSTORE_StateCallback cb,
-                       void *cb_cls);
-
-
-  /**
-   * Retrieve all signed state variables for a channel.
-   *
-   * @return #GNUNET_OK on success, else #GNUNET_SYSERR
-   */
-  int
-  (*state_get_signed) (void *cls,
-                       const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                       GNUNET_PSYCSTORE_StateCallback cb,
-                       void *cb_cls);
-
-};
-
-
-#if 0                           /* keep Emacsens' auto-indent happy */
-{
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-/** @} */  /* end of group */
diff --git a/src/include/gnunet_psycstore_service.h b/src/include/gnunet_psycstore_service.h
deleted file mode 100644 (file)
index 92516f4..0000000
+++ /dev/null
@@ -1,701 +0,0 @@
-/*
-     This file is part of GNUnet.
-     Copyright (C) 2013 GNUnet e.V.
-
-     GNUnet is free software: you can redistribute it and/or modify it
-     under the terms of the GNU Affero General Public License as published
-     by the Free Software Foundation, either version 3 of the License,
-     or (at your option) any later version.
-
-     GNUnet is distributed in the hope that it will be useful, but
-     WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     Affero General Public License for more details.
-    
-     You should have received a copy of the GNU Affero General Public License
-     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
-*/
-
-/**
- * @author Gabor X Toth
- * @author Christian Grothoff
- *
- * @file
- * PSYCstore service; implements persistent storage for the PSYC service
- *
- * @defgroup psycstore  PSYC Store service
- * Persistent storage for the PSYC service.
- * @{
- */
-#ifndef GNUNET_PSYCSTORE_SERVICE_H
-#define GNUNET_PSYCSTORE_SERVICE_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#if 0                           /* keep Emacsens' auto-indent happy */
-}
-#endif
-#endif
-
-#include "gnunet_util_lib.h"
-#include "gnunet_psyc_util_lib.h"
-#include "gnunet_multicast_service.h"
-#include "gnunet_psyc_service.h"
-
-/**
- * Version number of GNUnet PSYCstore API.
- */
-#define GNUNET_PSYCSTORE_VERSION 0x00000000
-
-/**
- * Membership test failed.
- */
-#define GNUNET_PSYCSTORE_MEMBERSHIP_TEST_FAILED -2
-
-/**
- * Flags for stored messages.
- */
-enum GNUNET_PSYCSTORE_MessageFlags
-{
-  /**
-   * The message contains state modifiers.
-   */
-  GNUNET_PSYCSTORE_MESSAGE_STATE = 1 << 0,
-
-  /**
-   * The state modifiers have been applied to the state store.
-   */
-  GNUNET_PSYCSTORE_MESSAGE_STATE_APPLIED = 1 << 1,
-
-  /**
-   * The message contains a state hash.
-   */
-  GNUNET_PSYCSTORE_MESSAGE_STATE_HASH = 1 << 2
-};
-
-
-/**
- * Handle for a PSYCstore
- */
-struct GNUNET_PSYCSTORE_Handle;
-
-
-/**
- * Connect to the PSYCstore service.
- *
- * @param cfg Configuration to use.
- *
- * @return Handle for the connecton.
- */
-struct GNUNET_PSYCSTORE_Handle *
-GNUNET_PSYCSTORE_connect (const struct GNUNET_CONFIGURATION_Handle *cfg);
-
-
-/**
- * Disconnect from the PSYCstore service.
- *
- * @param h Handle for the connection.
- */
-void
-GNUNET_PSYCSTORE_disconnect (struct GNUNET_PSYCSTORE_Handle *h);
-
-
-/**
- * Handle for an operation on the PSYCSTORE (useful to cancel the operation).
- */
-struct GNUNET_PSYCSTORE_OperationHandle;
-
-
-/**
- * Function called with the result of an asynchronous operation.
- *
- * @param cls
- *        Closure.
- * @param result
- *        Result of the operation.
- * @param err_msg
- *        Error message, or NULL if there's no error.
- * @param err_msg_size
- *        Size of @a err_msg
- */
-typedef void
-(*GNUNET_PSYCSTORE_ResultCallback) (void *cls,
-                                    int64_t result,
-                                    const char *err_msg,
-                                    uint16_t err_msg_size);
-
-
-/**
- * Store join/leave events for a PSYC channel in order to be able to answer
- * membership test queries later.
- *
- * @param h
- *        Handle for the PSYCstore.
- * @param channel_key
- *        The channel where the event happened.
- * @param slave_key
- *        Public key of joining/leaving slave.
- * @param did_join
- *        #GNUNET_YES on join, #GNUNET_NO on part.
- * @param announced_at
- *        ID of the message that announced the membership change.
- * @param effective_since
- *        Message ID this membership change is in effect since.
- *        For joins it is <= announced_at, for parts it is always 0.
- * @param group_generation
- *        In case of a part, the last group generation the slave has access to.
- *        It has relevance when a larger message have fragments with different
- *        group generations.
- * @param result_cb
- *        Callback to call with the result of the storage operation.
- * @param cls
- *        Closure for the callback.
- *
- * @return Operation handle that can be used to cancel the operation.
- */
-struct GNUNET_PSYCSTORE_OperationHandle *
-GNUNET_PSYCSTORE_membership_store (struct GNUNET_PSYCSTORE_Handle *h,
-                                   const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                                   const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_key,
-                                   int did_join,
-                                   uint64_t announced_at,
-                                   uint64_t effective_since,
-                                   uint64_t group_generation,
-                                   GNUNET_PSYCSTORE_ResultCallback result_cb,
-                                   void *cls);
-
-
-/**
- * Test if a member was admitted to the channel at the given message ID.
- *
- * This is useful when relaying and replaying messages to check if a particular
- * slave has access to the message fragment with a given group generation.  It
- * is also used when handling join requests to determine whether the slave is
- * currently admitted to the channel.
- *
- * @param h
- *        Handle for the PSYCstore.
- * @param channel_key
- *        The channel we are interested in.
- * @param slave_key
- *        Public key of slave whose membership to check.
- * @param message_id
- *        Message ID for which to do the membership test.
- * @param group_generation
- *        Group generation of the fragment of the message to test.
- *        It has relevance if the message consists of multiple fragments with
- *        different group generations.
- * @param result_cb
- *        Callback to call with the test result.
- * @param cls
- *        Closure for the callback.
- *
- * @return Operation handle that can be used to cancel the operation.
- */
-struct GNUNET_PSYCSTORE_OperationHandle *
-GNUNET_PSYCSTORE_membership_test (struct GNUNET_PSYCSTORE_Handle *h,
-                                  const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                                  const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_key,
-                                  uint64_t message_id,
-                                  uint64_t group_generation,
-                                  GNUNET_PSYCSTORE_ResultCallback result_cb,
-                                  void *cls);
-
-
-/**
- * Store a message fragment sent to a channel.
- *
- * @param h Handle for the PSYCstore.
- * @param channel_key The channel the message belongs to.
- * @param msg Message to store.
- * @param psycstore_flags Flags indicating whether the PSYC message contains
- *        state modifiers.
- * @param result_cb Callback to call with the result of the operation.
- * @param cls Closure for the callback.
- *
- * @return Handle that can be used to cancel the operation.
- */
-struct GNUNET_PSYCSTORE_OperationHandle *
-GNUNET_PSYCSTORE_fragment_store (struct GNUNET_PSYCSTORE_Handle *h,
-                                 const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                                 const struct GNUNET_MULTICAST_MessageHeader *msg,
-                                 enum GNUNET_PSYCSTORE_MessageFlags psycstore_flags,
-                                 GNUNET_PSYCSTORE_ResultCallback result_cb,
-                                 void *cls);
-
-
-/**
- * Function called with one message fragment, as the result of a
- * GNUNET_PSYCSTORE_fragment_get() or GNUNET_PSYCSTORE_message_get() call.
- *
- * @param cls Closure.
- * @param message The retrieved message fragment.  A NULL value indicates that
- *        there are no more results to be returned.
- * @param psycstore_flags Flags stored with the message.
- *
- * @return #GNUNET_NO to stop calling this callback with further fragments,
- *         #GNUNET_YES to continue.
- */
-typedef int
-(*GNUNET_PSYCSTORE_FragmentCallback) (void *cls,
-                                      struct GNUNET_MULTICAST_MessageHeader *message,
-                                      enum GNUNET_PSYCSTORE_MessageFlags psycstore_flags);
-
-
-/**
- * Retrieve message fragments by fragment ID range.
- *
- * @param h
- *        Handle for the PSYCstore.
- * @param channel_key
- *        The channel we are interested in.
- * @param slave_key
- *        The slave requesting the fragment.  If not NULL, a membership test is
- *        performed first and the fragment is only returned if the slave has
- *        access to it.
- * @param first_fragment_id
- *        First fragment ID to retrieve.
- *        Use 0 to get the latest message fragment.
- * @param last_fragment_id
- *        Last consecutive fragment ID to retrieve.
- *        Use 0 to get the latest message fragment.
- * @param fragment_cb
- *        Callback to call with the retrieved fragments.
- * @param result_cb
- *        Callback to call with the result of the operation.
- * @param cls
- *        Closure for the callbacks.
- *
- * @return Handle that can be used to cancel the operation.
- */
-struct GNUNET_PSYCSTORE_OperationHandle *
-GNUNET_PSYCSTORE_fragment_get (struct GNUNET_PSYCSTORE_Handle *h,
-                               const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                               const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_key,
-                               uint64_t first_message_id,
-                               uint64_t last_message_id,
-                               GNUNET_PSYCSTORE_FragmentCallback fragment_cb,
-                               GNUNET_PSYCSTORE_ResultCallback result_cb,
-                               void *cls);
-
-
-/**
- * Retrieve latest message fragments.
- *
- * @param h
- *        Handle for the PSYCstore.
- * @param channel_key
- *        The channel we are interested in.
- * @param slave_key
- *        The slave requesting the fragment.  If not NULL, a membership test is
- *        performed first and the fragment is only returned if the slave has
- *        access to it.
- * @param first_fragment_id
- *        First fragment ID to retrieve.
- *        Use 0 to get the latest message fragment.
- * @param last_fragment_id
- *        Last consecutive fragment ID to retrieve.
- *        Use 0 to get the latest message fragment.
- * @param fragment_limit
- *        Maximum number of fragments to retrieve.
- * @param fragment_cb
- *        Callback to call with the retrieved fragments.
- * @param result_cb
- *        Callback to call with the result of the operation.
- * @param cls
- *        Closure for the callbacks.
- *
- * @return Handle that can be used to cancel the operation.
- */
-struct GNUNET_PSYCSTORE_OperationHandle *
-GNUNET_PSYCSTORE_fragment_get_latest (struct GNUNET_PSYCSTORE_Handle *h,
-                                      const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                                      const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_key,
-                                      uint64_t fragment_limit,
-                                      GNUNET_PSYCSTORE_FragmentCallback fragment_cb,
-                                      GNUNET_PSYCSTORE_ResultCallback result_cb,
-                                      void *cls);
-
-
-/**
- * Retrieve all fragments of messages in a message ID range.
- *
- * @param h
- *        Handle for the PSYCstore.
- * @param channel_key
- *        The channel we are interested in.
- * @param slave_key
- *        The slave requesting the message.
- *        If not NULL, a membership test is performed first
- *        and the message is only returned if the slave has access to it.
- * @param first_message_id
- *        First message ID to retrieve.
- * @param last_message_id
- *        Last consecutive message ID to retrieve.
- * @param fragment_limit
- *        Maximum number of fragments to retrieve.
- * @param method_prefix
- *        Retrieve only messages with a matching method prefix.
- * @param fragment_cb
- *        Callback to call with the retrieved fragments.
- * @param result_cb
- *        Callback to call with the result of the operation.
- * @param cls
- *        Closure for the callbacks.
- *
- * @return Handle that can be used to cancel the operation.
- */
-struct GNUNET_PSYCSTORE_OperationHandle *
-GNUNET_PSYCSTORE_message_get (struct GNUNET_PSYCSTORE_Handle *h,
-                              const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                              const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_key,
-                              uint64_t first_message_id,
-                              uint64_t last_message_id,
-                              uint64_t fragment_limit,
-                              const char *method_prefix,
-                              GNUNET_PSYCSTORE_FragmentCallback fragment_cb,
-                              GNUNET_PSYCSTORE_ResultCallback result_cb,
-                              void *cls);
-
-
-/**
- * Retrieve all fragments of the latest messages.
- *
- * @param h
- *        Handle for the PSYCstore.
- * @param channel_key
- *        The channel we are interested in.
- * @param slave_key
- *        The slave requesting the message.
- *        If not NULL, a membership test is performed first
- *        and the message is only returned if the slave has access to it.
- * @param message_limit
- *        Maximum number of messages to retrieve.
- * @param method_prefix
- *        Retrieve only messages with a matching method prefix.
- * @param fragment_cb
- *        Callback to call with the retrieved fragments.
- * @param result_cb
- *        Callback to call with the result of the operation.
- * @param cls
- *        Closure for the callbacks.
- *
- * @return Handle that can be used to cancel the operation.
- */
-struct GNUNET_PSYCSTORE_OperationHandle *
-GNUNET_PSYCSTORE_message_get_latest (struct GNUNET_PSYCSTORE_Handle *h,
-                                     const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                                     const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_key,
-                                     uint64_t message_limit,
-                                     const char *method_prefix,
-                                     GNUNET_PSYCSTORE_FragmentCallback fragment_cb,
-                                     GNUNET_PSYCSTORE_ResultCallback result_cb,
-                                     void *cls);
-
-
-/**
- * Retrieve a fragment of message specified by its message ID and fragment
- * offset.
- *
- * @param h
- *        Handle for the PSYCstore.
- * @param channel_key
- *        The channel we are interested in.
- * @param slave_key
- *        The slave requesting the message fragment.  If not NULL, a membership
- *        test is performed first and the message fragment is only returned
- *        if the slave has access to it.
- * @param message_id
- *        Message ID to retrieve.  Use 0 to get the latest message.
- * @param fragment_offset
- *        Offset of the fragment to retrieve.
- * @param fragment_cb
- *        Callback to call with the retrieved fragments.
- * @param result_cb
- *        Callback to call with the result of the operation.
- * @param cls
- *        Closure for the callbacks.
- *
- * @return Handle that can be used to cancel the operation.
- */
-struct GNUNET_PSYCSTORE_OperationHandle *
-GNUNET_PSYCSTORE_message_get_fragment (struct GNUNET_PSYCSTORE_Handle *h,
-                                       const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                                       const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_key,
-                                       uint64_t message_id,
-                                       uint64_t fragment_offset,
-                                       GNUNET_PSYCSTORE_FragmentCallback fragment_cb,
-                                       GNUNET_PSYCSTORE_ResultCallback result_cb,
-                                       void *cls);
-
-
-/**
- * Callback used to return the latest value of counters for the channel master.
- *
- * @see GNUNET_PSYCSTORE_counters_get()
- *
- * @param cls Closure.
- * @param result_code
- *        Status code for the operation:
- *        #GNUNET_OK: success, counter values are returned.
- *        #GNUNET_NO: no message has been sent to the channel yet.
- *        #GNUNET_SYSERR: an error occurred.
- * @param max_fragment_id
- *        Latest message fragment ID, used by multicast.
- * @param max_message_id
- *        Latest message ID, used by PSYC.
- * @param max_group_generation
- *        Latest group generation, used by PSYC.
- * @param max_state_message_id
- *        Latest message ID containing state modifiers that
- *        was applied to the state store.  Used for the state sync process.
- */
-typedef void
-(*GNUNET_PSYCSTORE_CountersCallback) (void *cls,
-                                      int result_code,
-                                      uint64_t max_fragment_id,
-                                      uint64_t max_message_id,
-                                      uint64_t max_group_generation,
-                                      uint64_t max_state_message_id);
-
-
-/**
- * Retrieve latest values of counters for a channel.
- *
- * The current value of counters are needed
- * - when a channel master is restarted, so that it can continue incrementing
- *   the counters from their last value.
- * - when a channel slave rejoins and starts the state synchronization process.
- *
- * @param h
- *        Handle for the PSYCstore.
- * @param channel_key
- *        Public key that identifies the channel.
- * @param counters_cb
- *        Callback to call with the result.
- * @param cls
- *        Closure for the @a ccb callback.
- *
- * @return Handle that can be used to cancel the operation.
- */
-struct GNUNET_PSYCSTORE_OperationHandle *
-GNUNET_PSYCSTORE_counters_get (struct GNUNET_PSYCSTORE_Handle *h,
-                               struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                               GNUNET_PSYCSTORE_CountersCallback counters_cb,
-                               void *cls);
-
-
-/**
- * Apply modifiers of a message to the current channel state.
- *
- * An error is returned if there are missing messages containing state
- * operations before the current one.
- *
- * @param h
- *        Handle for the PSYCstore.
- * @param channel_key
- *        The channel we are interested in.
- * @param message_id
- *        ID of the message that contains the @a modifiers.
- * @param state_delta
- *        Value of the @e state_delta PSYC header variable of the message.
- * @param result_cb
- *        Callback to call with the result of the operation.
- * @param cls
- *        Closure for the @a result_cb callback.
- *
- * @return Handle that can be used to cancel the operation.
- */
-struct GNUNET_PSYCSTORE_OperationHandle *
-GNUNET_PSYCSTORE_state_modify (struct GNUNET_PSYCSTORE_Handle *h,
-                               const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                               uint64_t message_id,
-                               uint64_t state_delta,
-                               GNUNET_PSYCSTORE_ResultCallback result_cb,
-                               void *cls);
-
-
-/**
- * Store synchronized state.
- *
- * @param h
- *        Handle for the PSYCstore.
- * @param channel_key
- *        The channel we are interested in.
- * @param max_state_message_id
- *        ID of the last stateful message before @a state_hash_message_id.
- * @param state_hash_message_id
- *        ID of the message that contains the state_hash PSYC header variable.
- * @param modifier_count
- *        Number of elements in the @a modifiers array.
- * @param modifiers
- *        Full state to store.
- * @param result_cb
- *        Callback to call with the result of the operation.
- * @param cls
- *        Closure for the callback.
- *
- * @return Handle that can be used to cancel the operation.
- */
-struct GNUNET_PSYCSTORE_OperationHandle *
-GNUNET_PSYCSTORE_state_sync (struct GNUNET_PSYCSTORE_Handle *h,
-                             const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                             uint64_t max_state_message_id,
-                             uint64_t state_hash_message_id,
-                             size_t modifier_count,
-                             const struct GNUNET_PSYC_Modifier *modifiers,
-                             GNUNET_PSYCSTORE_ResultCallback result_cb,
-                             void *cls);
-
-
-
-/**
- * Reset the state of a channel.
- *
- * Delete all state variables stored for the given channel.
- *
- * @param h
- *        Handle for the PSYCstore.
- * @param channel_key
- *        The channel we are interested in.
- * @param result_cb
- *        Callback to call with the result of the operation.
- * @param cls
- *        Closure for the callback.
- *
- * @return Handle that can be used to cancel the operation.
- */
-struct GNUNET_PSYCSTORE_OperationHandle *
-GNUNET_PSYCSTORE_state_reset (struct GNUNET_PSYCSTORE_Handle *h,
-                              const struct GNUNET_CRYPTO_EddsaPublicKey
-                              *channel_key,
-                              GNUNET_PSYCSTORE_ResultCallback result_cb,
-                              void *cls);
-
-
-/**
- * Update signed values of state variables in the state store.
- *
- * @param h
- *        Handle for the PSYCstore.
- * @param channel_key
- *        The channel we are interested in.
- * @param message_id
- *        Message ID that contained the state @a hash.
- * @param hash
- *        Hash of the serialized full state.
- * @param result_cb
- *        Callback to call with the result of the operation.
- * @param cls
- *        Closure for the callback.
- *
- */
-struct GNUNET_PSYCSTORE_OperationHandle *
-GNUNET_PSYCSTORE_state_hash_update (struct GNUNET_PSYCSTORE_Handle *h,
-                                    const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                                    uint64_t message_id,
-                                    const struct GNUNET_HashCode *hash,
-                                    GNUNET_PSYCSTORE_ResultCallback result_cb,
-                                    void *cls);
-
-
-/**
- * Function called with the value of a state variable.
- *
- * @param cls
- *        Closure.
- * @param name
- *        Name of the state variable.  A NULL value indicates that there are no more
- *        state variables to be returned.
- * @param value
- *        Value of the state variable.
- * @param value_size
- *        Number of bytes in @a value.
- *
- * @return #GNUNET_NO to stop calling this callback with further variables,
- *         #GNUNET_YES to continue.
- */;
-typedef int
-(*GNUNET_PSYCSTORE_StateCallback) (void *cls, const char *name,
-                                   const void *value, uint32_t value_size);
-
-
-/**
- * Retrieve the best matching state variable.
- *
- * @param h
- *        Handle for the PSYCstore.
- * @param channel_key
- *        The channel we are interested in.
- * @param name
- *        Name of variable to match, the returned variable might be less specific.
- * @param state_cb
- *        Callback to return the matching state variable.
- * @param result_cb
- *        Callback to call with the result of the operation.
- * @param cls
- *        Closure for the callbacks.
- *
- * @return Handle that can be used to cancel the operation.
- */
-struct GNUNET_PSYCSTORE_OperationHandle *
-GNUNET_PSYCSTORE_state_get (struct GNUNET_PSYCSTORE_Handle *h,
-                            const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                            const char *name,
-                            GNUNET_PSYCSTORE_StateCallback state_cb,
-                            GNUNET_PSYCSTORE_ResultCallback result_cb,
-                            void *cls);
-
-
-/**
- * Retrieve all state variables for a channel with the given prefix.
- *
- * @param h
- *        Handle for the PSYCstore.
- * @param channel_key
- *        The channel we are interested in.
- * @param name_prefix
- *        Prefix of state variable names to match.
- * @param state_cb
- *        Callback to return matching state variables.
- * @param result_cb
- *        Callback to call with the result of the operation.
- * @param cls
- *        Closure for the callbacks.
- *
- * @return Handle that can be used to cancel the operation.
- */
-struct GNUNET_PSYCSTORE_OperationHandle *
-GNUNET_PSYCSTORE_state_get_prefix (struct GNUNET_PSYCSTORE_Handle *h,
-                                   const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                                   const char *name_prefix,
-                                   GNUNET_PSYCSTORE_StateCallback state_cb,
-                                   GNUNET_PSYCSTORE_ResultCallback result_cb,
-                                   void *cls);
-
-
-/**
- * Cancel an operation.
- *
- * @param op Handle for the operation to cancel.
- */
-int
-GNUNET_PSYCSTORE_operation_cancel (struct GNUNET_PSYCSTORE_OperationHandle *op);
-
-
-
-
-#if 0                           /* keep Emacsens' auto-indent happy */
-{
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-/* ifndef GNUNET_PSYCSTORE_SERVICE_H */
-#endif
-
-/** @} */  /* end of group */
index 8ae9f1e936fc56b21fa5cd2f4eafb7122ccd3317..b1dd1b5af9646ec164554888d7a459fade0c9b98 100644 (file)
@@ -137,7 +137,7 @@ GNUNET_RPS_seed_ids (struct GNUNET_RPS_Handle *h, uint32_t n,
 GNUNET_RPS_request_cancel (struct GNUNET_RPS_Request_Handle *rh);
 
 
-#ifdef ENABLE_MALICIOUS
+#if ENABLE_MALICIOUS
 /**
  * Turn RPS service to act malicious.
  *
diff --git a/src/include/gnunet_sensor_service.h b/src/include/gnunet_sensor_service.h
deleted file mode 100644 (file)
index 391db58..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
-      This file is part of GNUnet
-      Copyright (C)
-
-      GNUnet is free software: you can redistribute it and/or modify it
-      under the terms of the GNU Affero General Public License as published
-      by the Free Software Foundation, either version 3 of the License,
-      or (at your option) any later version.
-
-      GNUnet is distributed in the hope that it will be useful, but
-      WITHOUT ANY WARRANTY; without even the implied warranty of
-      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-      Affero General Public License for more details.
-     
-      You should have received a copy of the GNU Affero General Public License
-      along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
- */
-
-/**
- * @author Omar Tarabai
- *
- * @file
- * API to the sensor service
- *
- * @defgroup sensor  Sensor service
- *
- * @{
- */
-
-#ifndef GNUNET_SENSOR_SERVICE_H
-#define GNUNET_SENSOR_SERVICE_H
-
-#include "gnunet_common.h"
-#include "gnunet_util_lib.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#if 0                           /* keep Emacsens' auto-indent happy */
-}
-#endif
-#endif
-
-
-/**
- * Handle to the sensor service.
- */
-struct GNUNET_SENSOR_Handle;
-
-/**
- * Context for an iteration request.
- */
-struct GNUNET_SENSOR_IterateContext;
-
-/**
- * Context of a force anomaly request
- */
-struct GNUNET_SENSOR_ForceAnomalyContext;
-
-/**
- * Structure containing brief info about sensor
- */
-struct SensorInfoShort
-{
-
-  /*
-   * Sensor name
-   */
-  char *name;
-
-  /*
-   * First part of version number
-   */
-  uint16_t version_major;
-
-  /*
-   * Second part of version number
-   */
-  uint16_t version_minor;
-
-  /*
-   * Sensor description
-   */
-  char *description;
-
-};
-
-/**
- * Sensor iterate request callback.
- *
- * @param cls closure
- * @param sensor Brief sensor information
- * @param error message
- */
-typedef void (*GNUNET_SENSOR_SensorIterateCB) (void *cls,
-                                                const struct SensorInfoShort *
-                                                sensor, const char *err_msg);
-
-
-/**
- * Continuation called with a status result.
- *
- * @param cls closure
- * @param emsg error message, NULL on success
- */
-typedef void (*GNUNET_SENSOR_Continuation) (void *cls, const char *emsg);
-
-
-/**
- * Disconnect from the sensor service
- *
- * @param h handle to disconnect
- */
-void
-GNUNET_SENSOR_disconnect (struct GNUNET_SENSOR_Handle *h);
-
-
-/**
- * Connect to the sensor service.
- *
- * @return NULL on error
- */
-struct GNUNET_SENSOR_Handle *
-GNUNET_SENSOR_connect (const struct GNUNET_CONFIGURATION_Handle *cfg);
-
-
-/**
- * Cancel an iteration request.
- * This should be called before the iterate callback is called with a NULL value.
- *
- * @param ic context of the iterator to cancel
- */
-void
-GNUNET_SENSOR_iterate_cancel (struct GNUNET_SENSOR_IterateContext
-                                     *ic);
-
-
-/**
- * Get one or all sensors loaded by the sensor service.
- * The callback will be called with each sensor received and once with a NULL
- * value to signal end of iteration.
- *
- * @param h Handle to SENSOR service
- * @param timeout how long to wait until timing out
- * @param sensorname Name of the required sensor, NULL to get all
- * @param callback the function to call for each sensor
- * @param callback_cls closure for callback
- * @return iterator context
- */
-struct GNUNET_SENSOR_IterateContext *
-GNUNET_SENSOR_iterate (struct GNUNET_SENSOR_Handle *h,
-                               struct GNUNET_TIME_Relative timeout,
-                               const char *sensor_name,
-                               GNUNET_SENSOR_SensorIterateCB callback,
-                               void *callback_cls);
-
-
-/**
- * Cancel a force anomaly request.
- *
- * @param fa Force anomaly context returned by GNUNET_SENSOR_force_anomaly()
- */
-void
-GNUNET_SENSOR_force_anomaly_cancel (struct GNUNET_SENSOR_ForceAnomalyContext
-                                    *fa);
-
-
-/**
- * Force an anomaly status change on a given sensor. If the sensor reporting
- * module is running, this will trigger the usual reporting logic, therefore,
- * please only use this in a test environment.
- *
- * Also, if the sensor analysis module is running, it might conflict and cause
- * undefined behaviour if it detects a real anomaly.
- *
- * @param h Service handle
- * @param sensor_name Sensor name to set the anomaly status
- * @param anomalous The desired status: #GNUNET_YES / #GNUNET_NO
- * @param cont Continuation function to be called after the request is sent
- * @param cont_cls Closure for cont
- */
-struct GNUNET_SENSOR_ForceAnomalyContext *
-GNUNET_SENSOR_force_anomaly (struct GNUNET_SENSOR_Handle *h, char *sensor_name,
-                             int anomalous, GNUNET_SENSOR_Continuation cont,
-                             void *cont_cls);
-
-
-#if 0                           /* keep Emacsens' auto-indent happy */
-{
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-/** @} */  /* end of group */
diff --git a/src/include/gnunet_sensor_util_lib.h b/src/include/gnunet_sensor_util_lib.h
deleted file mode 100644 (file)
index f4eaad9..0000000
+++ /dev/null
@@ -1,520 +0,0 @@
-/*
-     This file is part of GNUnet.
-     Copyright (C)
-
-     GNUnet is free software: you can redistribute it and/or modify it
-     under the terms of the GNU Affero General Public License as published
-     by the Free Software Foundation, either version 3 of the License,
-     or (at your option) any later version.
-
-     GNUnet is distributed in the hope that it will be useful, but
-     WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     Affero General Public License for more details.
-    
-     You should have received a copy of the GNU Affero General Public License
-     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
-*/
-
-/**
- * @author Omar Tarabai
- *
- * @file
- * Sensor utilities
- *
- * @defgroup sensor  Sensor Utilities library
- *
- * @{
- */
-
-#ifndef GNUNET_SENSOR_UTIL_LIB_H
-#define GNUNET_SENSOR_UTIL_LIB_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#if 0                           /* keep Emacsens' auto-indent happy */
-}
-#endif
-#endif
-
-/**
- * Structure containing sensor definition
- */
-struct GNUNET_SENSOR_SensorInfo
-{
-
-  /**
-   * The configuration handle
-   * carrying sensor information
-   */
-  struct GNUNET_CONFIGURATION_Handle *cfg;
-
-  /**
-   * Sensor name
-   */
-  char *name;
-
-  /**
-   * Path to definition file
-   */
-  char *def_file;
-
-  /**
-   * First part of version number
-   */
-  uint16_t version_major;
-
-  /**
-   * Second part of version number
-   */
-  uint16_t version_minor;
-
-  /**
-   * Sensor description
-   */
-  char *description;
-
-  /**
-   * Sensor currently enabled
-   */
-  int enabled;
-
-  /**
-   * Category under which the sensor falls (e.g. tcp, datastore)
-   */
-  char *category;
-
-  /**
-   * When does the sensor become active
-   */
-  struct GNUNET_TIME_Absolute *start_time;
-
-  /**
-   * When does the sensor expire
-   */
-  struct GNUNET_TIME_Absolute *end_time;
-
-  /**
-   * Time interval to collect sensor information (e.g. every 1 min)
-   */
-  struct GNUNET_TIME_Relative interval;
-
-  /**
-   * Lifetime of an information sample after which it is deleted from storage
-   * If not supplied, will default to the interval value
-   */
-  struct GNUNET_TIME_Relative lifetime;
-
-  /**
-   * A set of required peer capabilities for the sensor to collect meaningful information (e.g. ipv6)
-   */
-  char *capabilities;
-
-  /**
-   * Either "gnunet-statistics" or external "process"
-   */
-  char *source;
-
-  /**
-   * Name of the GNUnet service that is the source for the gnunet-statistics entry
-   */
-  char *gnunet_stat_service;
-
-  /**
-   * Name of the gnunet-statistics entry
-   */
-  char *gnunet_stat_name;
-
-  /**
-   * Handle to statistics get request (OR NULL)
-   */
-  struct GNUNET_STATISTICS_GetHandle *gnunet_stat_get_handle;
-
-  /**
-   * Name of the external process to be executed
-   */
-  char *ext_process;
-
-  /**
-   * Arguments to be passed to the external process
-   */
-  char *ext_args;
-
-  /**
-   * Handle to the external process
-   */
-  struct GNUNET_OS_CommandHandle *ext_cmd;
-
-  /**
-   * Did we already receive a value
-   * from the currently running external
-   * proccess ? #GNUNET_YES / #GNUNET_NO
-   */
-  int ext_cmd_value_received;
-
-  /**
-   * The output datatype to be expected
-   */
-  char *expected_datatype;
-
-  /**
-   * Peer-identity of peer running collection point
-   */
-  struct GNUNET_PeerIdentity *collection_point;
-
-  /**
-   * Do we report received sensor values to collection point?
-   * #GNUNET_YES / #GNUNET_NO
-   */
-  int report_values;
-
-  /**
-   * Time interval to send sensor values to collection point (e.g. every 30 mins)
-   */
-  struct GNUNET_TIME_Relative value_reporting_interval;
-
-  /**
-   * Do we report anomalies to collection point?
-   * #GNUNET_YES / #GNUNET_NO
-   */
-  int report_anomalies;
-
-  /**
-   * Execution task (OR NULL)
-   */
-  struct GNUNET_SCHEDULER_Task * execution_task;
-
-  /**
-   * Is the sensor being executed
-   */
-  int running;
-
-};
-
-/**
- * Anomaly report received and stored by sensor dashboard.
- * Sensor name and peer id are not included because they are part of the
- * peerstore key.
- */
-struct GNUNET_SENSOR_DashboardAnomalyEntry
-{
-
-  /**
-   * New anomaly status
-   */
-  uint16_t anomalous;
-
-  /**
-   * Percentage of neighbors reported the same anomaly
-   */
-  float anomalous_neighbors;
-
-};
-
-GNUNET_NETWORK_STRUCT_BEGIN
-/**
- * Used to communicate brief information about a sensor.
- */
-    struct GNUNET_SENSOR_SensorBriefMessage
-{
-
-  /**
-   * GNUNET general message header.
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * Size of sensor name string, allocated at position 0 after this struct.
-   */
-  uint16_t name_size;
-
-  /**
-   * First part of sensor version number
-   */
-  uint16_t version_major;
-
-  /**
-   * Second part of sensor version number
-   */
-  uint16_t version_minor;
-
-};
-
-/**
- * Used to communicate full information about a sensor.
- */
-struct GNUNET_SENSOR_SensorFullMessage
-{
-
-  /**
-   * GNUNET general message header.
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * Size of sensor name.
-   * Name allocated at position 0 after this struct.
-   */
-  uint16_t sensorname_size;
-
-  /**
-   * Size of the sensor definition file carrying full sensor information.
-   * The file content allocated at position 1 after this struct.
-   */
-  uint16_t sensorfile_size;
-
-  /**
-   * Name of the file (usually script) associated with this sensor.
-   * At the moment we only support having one file per sensor.
-   * The file name is allocated at position 2 after this struct.
-   */
-  uint16_t scriptname_size;
-
-  /**
-   * Size of the file (usually script) associated with this sensor.
-   * The file content is allocated at position 3 after this struct.
-   */
-  uint16_t scriptfile_size;
-
-};
-
-/**
- * Used to communicate sensor values to
- * collection points (SENSORDASHBAORD service)
- */
-struct GNUNET_SENSOR_ValueMessage
-{
-
-  /**
-   * GNUNET general message header
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * Hash of sensor name
-   */
-  struct GNUNET_HashCode sensorname_hash;
-
-  /**
-   * First part of sensor version number
-   */
-  uint16_t sensorversion_major;
-
-  /**
-   * Second part of sensor version number
-   */
-  uint16_t sensorversion_minor;
-
-  /**
-   * Timestamp of recorded reading
-   */
-  struct GNUNET_TIME_Absolute timestamp;
-
-  /**
-   * Size of sensor value, allocated at poistion 0 after this struct
-   */
-  uint16_t value_size;
-
-};
-
-/**
- * Message carrying an anomaly status change report
- */
-struct GNUNET_SENSOR_AnomalyReportMessage
-{
-
-  /**
-   * Hash of sensor name
-   */
-  struct GNUNET_HashCode sensorname_hash;
-
-  /**
-   * First part of sensor version number
-   */
-  uint16_t sensorversion_major;
-
-  /**
-   * Second part of sensor version name
-   */
-  uint16_t sensorversion_minor;
-
-  /**
-   * New anomaly status
-   */
-  uint16_t anomalous;
-
-  /**
-   * Percentage of neighbors reported the same anomaly
-   */
-  float anomalous_neighbors;
-
-};
-
-GNUNET_NETWORK_STRUCT_END
-/**
- * Given two version numbers as major and minor, compare them.
- *
- * @param v1_major First part of first version number
- * @param v1_minor Second part of first version number
- * @param v2_major First part of second version number
- * @param v2_minor Second part of second version number
- */
-    int
-GNUNET_SENSOR_version_compare (uint16_t v1_major, uint16_t v1_minor,
-                               uint16_t v2_major, uint16_t v2_minor);
-
-
-/**
- * Reads sensor definitions from given sensor directory.
- *
- * @param sensordir Path to sensor directory.
- * @return a multihashmap of loaded sensors
- */
-struct GNUNET_CONTAINER_MultiHashMap *
-GNUNET_SENSOR_load_all_sensors (char *sensor_dir);
-
-
-/**
- * Get path to the default directory containing the sensor definition files with
- * a trailing directory separator.
- *
- * @return Default sensor files directory full path
- */
-char *
-GNUNET_SENSOR_get_default_sensor_dir ();
-
-
-/**
- * Destroys a group of sensors in a hashmap and the hashmap itself
- *
- * @param sensors hashmap containing the sensors
- */
-void
-GNUNET_SENSOR_destroy_sensors (struct GNUNET_CONTAINER_MultiHashMap *sensors);
-
-
-struct GNUNET_SENSOR_crypto_pow_context;
-
-/**
- * Block carrying arbitrary data + its proof-of-work + signature
- */
-struct GNUNET_SENSOR_crypto_pow_block
-{
-
-  /**
-   * Proof-of-work value
-   */
-  uint64_t pow;
-
-  /**
-   * Data signature
-   */
-  struct GNUNET_CRYPTO_EddsaSignature signature;
-
-  /**
-   * Size of the msg component (allocated after this struct)
-   */
-  size_t msg_size;
-
-  /**
-   * Purpose of signing.
-   * Data is allocated after this (timestamp, public_key, msg).
-   */
-  struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
-
-  /**
-   * First part of data - timestamp
-   */
-  struct GNUNET_TIME_Absolute timestamp;
-
-  /**
-   * Second part of data - Public key
-   */
-  struct GNUNET_CRYPTO_EddsaPublicKey public_key;
-
-};
-
-
-/**
- * Continuation called with a status result.
- *
- * @param cls closure
- * @param pow Proof-of-work value
- * @param purpose Signed block (size, purpose, data)
- * @param signature Signature, NULL on error
- */
-typedef void (*GNUNET_SENSOR_UTIL_pow_callback) (void *cls,
-                                                 struct
-                                                 GNUNET_SENSOR_crypto_pow_block
-                                                 * block);
-
-
-/**
- * Cancel an operation started by #GNUNET_SENSOR_crypto_pow_sign().
- * Call only before callback function passed to #GNUNET_SENSOR_crypto_pow_sign()
- * is called with the result.
- */
-void
-GNUNET_SENSOR_crypto_pow_sign_cancel (struct GNUNET_SENSOR_crypto_pow_context
-                                      *cx);
-
-
-/**
- * Calculate proof-of-work and sign a message.
- *
- * @param msg Message to calculate pow and sign
- * @param msg_size size of msg
- * @param timestamp Timestamp to add to the message to protect against replay attacks
- * @param public_key Public key of the origin peer, to protect against redirect attacks
- * @param private_key Private key of the origin peer to sign the result
- * @param matching_bits Number of leading zeros required in the result hash
- * @param callback Callback function to call with the result
- * @param callback_cls Closure for callback
- * @return Operation context
- */
-struct GNUNET_SENSOR_crypto_pow_context *
-GNUNET_SENSOR_crypto_pow_sign (void *msg, size_t msg_size,
-                               struct GNUNET_TIME_Absolute *timestamp,
-                               struct GNUNET_CRYPTO_EddsaPublicKey *public_key,
-                               struct GNUNET_CRYPTO_EddsaPrivateKey
-                               *private_key, int matching_bits,
-                               GNUNET_SENSOR_UTIL_pow_callback callback,
-                               void *callback_cls);
-
-
-/**
- * Verify that proof-of-work and signature in the given block are valid.
- * If all valid, a pointer to the payload within the block is set and the size
- * of the payload is returned.
- *
- * **VERY IMPORTANT** : You will still need to verify the timestamp yourself.
- *
- * @param block The block received and needs to be verified
- * @param matching_bits Number of leading zeros in the hash used to verify pow
- * @param public_key Public key of the peer that sent this block
- * @param payload Where to store the pointer to the payload
- * @return Size of the payload
- */
-size_t
-GNUNET_SENSOR_crypto_verify_pow_sign (struct GNUNET_SENSOR_crypto_pow_block *
-                                      block, int matching_bits,
-                                      struct GNUNET_CRYPTO_EddsaPublicKey *
-                                      public_key, void **payload);
-
-
-#if 0                           /* keep Emacsens' auto-indent happy */
-{
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-/* ifndef GNUNET_SENSOR_UTIL_LIB_H */
-#endif
-
-/** @} */  /* end of group */
-
-/* end of gnunet_sensor_util_lib.h */
diff --git a/src/include/gnunet_sensordashboard_service.h b/src/include/gnunet_sensordashboard_service.h
deleted file mode 100644 (file)
index ffa24e3..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
-      This file is part of GNUnet
-      Copyright (C)
-
-      GNUnet is free software: you can redistribute it and/or modify it
-      under the terms of the GNU Affero General Public License as published
-      by the Free Software Foundation, either version 3 of the License,
-      or (at your option) any later version.
-
-      GNUnet is distributed in the hope that it will be useful, but
-      WITHOUT ANY WARRANTY; without even the implied warranty of
-      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-      Affero General Public License for more details.
-     
-      You should have received a copy of the GNU Affero General Public License
-      along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
- */
-
-/**
- * @author Omar Tarabai
- *
- * @file
- * API to the sensordashboard service
- *
- * @defgroup sensordashboard  Sensor Dashboard service
- *
- * @{
- */
-#ifndef GNUNET_SENSORDASHBOARD_SERVICE_H
-#define GNUNET_SENSORDASHBOARD_SERVICE_H
-
-#include "gnunet_common.h"
-#include "gnunet_util_lib.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#if 0                           /* keep Emacsens' auto-indent happy */
-}
-#endif
-#endif
-
-
-#if 0                           /* keep Emacsens' auto-indent happy */
-{
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-/** @} */  /* end of group */
diff --git a/src/include/gnunet_social_service.h b/src/include/gnunet_social_service.h
deleted file mode 100644 (file)
index 7faa336..0000000
+++ /dev/null
@@ -1,1344 +0,0 @@
-/*
-     This file is part of GNUnet.
-     Copyright (C) 2013 GNUnet e.V.
-
-     GNUnet is free software: you can redistribute it and/or modify it
-     under the terms of the GNU Affero General Public License as published
-     by the Free Software Foundation, either version 3 of the License,
-     or (at your option) any later version.
-
-     GNUnet is distributed in the hope that it will be useful, but
-     WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     Affero General Public License for more details.
-    
-     You should have received a copy of the GNU Affero General Public License
-     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
-*/
-
-/**
- * @author Gabor X Toth
- * @author Christian Grothoff
- *
- * @file
- * Social service; implements social interactions through the PSYC service.
- */
-
-/** @defgroup social Social service
-Social interactions through the PSYC service.
-
-# Overview
-
-The social service provides an API for social interactions based on a one-to-many messaging model.
-It manages subscriptions of applications to places, provides messaging functionality in places,
-allows access to the local message history and manages the GNS zone of _egos_ (user identities).
-
-The service stores private and public keys of subscribed places, as well as files received in subscribed places.
-
-# Concepts and terminology
-
-## Ego, Nym
-
-An _ego_ is an identity of a user, a private-public key pair.
-A _nym_ is an identity of another user in the network, identified by its public key.
-Each user can have multiple identities.
-
-struct GNUNET_SOCIAL_Ego and struct GNUNET_SOCIAL_Nym represents one of these identities.
-
-## Place, Host, Guest
-
-A _place_ is where social interactions happen.  It is owned and created by an _ego_.
-Creating a new place happens by an _ego_ entering a new place as a _host_,
-where _guests_ can enter later to receive messages sent to the place.
-
-A place is identified by its public key.
-
-- struct GNUNET_SOCIAL_Host represents a place entered as host,
-- struct GNUNET_SOCIAL_Guest is used for a place entered as guest.
-- A struct GNUNET_SOCIAL_Place can be obtained for both a host and guest place
-  using GNUNET_SOCIAL_host_get_place() and GNUNET_SOCIAL_guest_get_place()
-  and can be used with API functions common to hosts and guests.
-
-## History
-
-Messages sent to places are stored locally by the PSYCstore service, and can be queried any time.
-GNUNET_SOCIAL_history_replay_latest() retrieves the latest N messages sent to the place,
-while GNUNET_SOCIAL_history_replay() is used to query a given message ID range.
-
-## GNU Name System
-
-The GNU Name System is used for assigning human-readable names to nyms and places.
-There's a _GNS zone_ corresponding to each _nym_.
-An _ego_ can publish PKEY and PLACE records in its own zone, pointing to nyms and places, respectively.
-
-## Announcement, talk request
-
-The host can _announce_ messages to the place, using GNUNET_SOCIAL_host_announce().
-Guests can send _talk_ requests to the host, using GNUNET_SOCIAL_guest_talk().
-The host receives talk requests of guests and can _relay_ them to the place,
-or process it using a message handler function.
-
-# Using the API
-
-## Connecting to the service
-
-A client first establishes an _application connection_ to the service using
-GNUNET_SOCIAL_app_connect() providing its _application ID_, then receives the
-public keys of subscribed places and available egos in response.
-
-## Reconnecting to places
-
-Then the application can reconnect to its subscribed places by establishing
-_place connections_ with GNUNET_SOCIAL_host_enter_reconnect() and
-GNUNET_SOCIAL_guest_enter_reconnect().
-
-## Subscribing to a place
-
-Entering and subscribing a new host or guest place is done using
-GNUNET_SOCIAL_host_enter() and GNUNET_SOCIAL_guest_enter().
-
-## Disconnecting from a place
-
-An application can disconnect from a place while the social service keeps its
-network connection active, using GNUNET_SOCIAL_host_disconnect() and
-GNUNET_SOCIAL_guest_disconnect().
-
-## Leaving a place
-
-To permanently leave a place, see GNUNET_SOCIAL_host_leave() and GNUNET_SOCIAL_guest_leave().
-When leaving a place its network connections are closed and all applications are unsubscribed from the place.
-
-# Message methods
-
-## _converse
-
-Human conversation in a private or public place.
-
-### Environment
-
-#### _id_reply
-Message ID this message is in reply to.
-
-#### _id_thread
-Thread ID, the first message ID in the thread.
-
-#### _nym_author
-Nym of the author.
-
-FIXME: Are nyms a different data type from egos and person entities?
-Do they have a different format than any other entity address?
-Questions and thoughts on how to fix this in "questions.org"
-
-#### _sig_author
-Signature of the message body and its variables by the author.
-
-### Data
-
-Message body.
-
-## _notice_place
-
-Notification about a place.
-
-TODO: Applications can decide to auto-subscribe to certain places,
-e.g. files under a given size.
-
-### Environment
-
-#### Using GNS
-
-##### _gns_place
-GNS name of the place in a globally unique .zkey zone
-
-FIXME: A custom _gns PSYC data type should be avoidable by parsing
-and interpreting PSYC uniforms appropriately.
-Thoughts on this in "questions.org"
-
-#### Without GNS
-
-##### _key_pub_place
-Public key of place
-
-FIXME: _key_pub can't be the data type for GNUnet-specific cryptographic
-addressing. Questions and thoughts on how to fix this in "questions.org"
-
-##### _peer_origin
-Peer ID of origin
-
-##### _list_peer_relays
-List of peer IDs of relays
-
-## _notice_place_file
-
-Notification about a place hosting a file.
-
-### Environment
-
-The environment of _notice_place above, plus the following:
-
-#### _size_file
-Size of file
-
-#### _type_file
-MIME type of file
-
-#### _name_file
-Name of file
-
-#### _description_file
-Description of file
-
-## _file
-
-Messages with a _file method contain a file,
-which is saved to disk upon reception at the following location:
-$GNUNET_DATA_HOME/social/files/<H(place_pub)>/<H(message_id)>
-
-### Environment
-
-#### _size_file
-Size of file
-
-#### _type_file
-MIME type of file
-
-#### _name_file
-Name of file
-
-#### _description_file
-Description of file
-
-@{
-*/
-
-
-#ifndef GNUNET_SOCIAL_SERVICE_H
-#define GNUNET_SOCIAL_SERVICE_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#if 0                           /* keep Emacsens' auto-indent happy */
-}
-#endif
-#endif
-
-#include <stdint.h>
-#include "gnunet_util_lib.h"
-#include "gnunet_psyc_util_lib.h"
-#include "gnunet_identity_service.h"
-#include "gnunet_namestore_service.h"
-#include "gnunet_psyc_service.h"
-
-
-/**
- * Version number of GNUnet Social API.
- */
-#define GNUNET_SOCIAL_VERSION 0x00000000
-
-/**
- * Maximum size of client ID including '\0' terminator.
- */
-#define GNUNET_SOCIAL_APP_MAX_ID_SIZE 256
-
-enum GNUNET_SOCIAL_MsgProcFlags {
-  GNUNET_SOCIAL_MSG_PROC_NONE = 0,
-  GNUNET_SOCIAL_MSG_PROC_RELAY = 1,
-  GNUNET_SOCIAL_MSG_PROC_SAVE= 2,
-};
-
-/**
- * Handle for an application.
- */
-struct GNUNET_SOCIAL_App;
-
-/**
- * Handle for an ego (own identity)
- */
-struct GNUNET_SOCIAL_Ego;
-
-/**
- * Handle for a pseudonym of another user in the network.
- */
-struct GNUNET_SOCIAL_Nym;
-
-/**
- * Handle for a place where social interactions happen.
- */
-struct GNUNET_SOCIAL_Place;
-
-/**
- * Host handle for a place that we entered.
- */
-struct GNUNET_SOCIAL_Host;
-
-/**
- * Guest handle for place that we entered.
- */
-struct GNUNET_SOCIAL_Guest;
-
-/**
- * Handle that can be used to reconnect to a place as host.
- */
-struct GNUNET_SOCIAL_HostConnection;
-
-/**
- * Handle that can be used to reconnect to a place as guest.
- */
-struct GNUNET_SOCIAL_GuestConnection;
-
-/**
- * Notification about an available identity.
- *
- * @param cls
- *        Closure.
- * @param pub_key
- *        Public key of ego.
- * @param name
- *        Name of ego.
- */
-typedef void
-(*GNUNET_SOCIAL_AppEgoCallback) (void *cls,
-                                 struct GNUNET_SOCIAL_Ego *ego,
-                                 const struct GNUNET_CRYPTO_EcdsaPublicKey *ego_pub_key,
-                                 const char *name);
-
-
-/**
- * Entry status of a place per application.
- */
-enum GNUNET_SOCIAL_AppPlaceState
-{
-  /**
-   * The place was once entered by the ego, but left since.
-   * It's possible to establish a local connection to the place
-   * without re-entering to fetch history from the PSYCstore.
-   * @see enum GNUNET_PSYC_SlaveJoinFlags and GNUNET_SOCIAL_guest_enter()
-   */
-  GNUNET_SOCIAL_PLACE_STATE_ARCHIVED = 0,
-
-  /**
-   * The place is entered by the ego,
-   * but this application is not subscribed to it.
-   */
-  GNUNET_SOCIAL_PLACE_STATE_ENTERED = 1,
-
-  /**
-   * The place is entered by the ego and
-   * and this application is subscribed to it.
-   */
-  GNUNET_SOCIAL_PLACE_STATE_SUBSCRIBED = 2,
-};
-
-
-/**
- * Called after receiving initial list of egos and places.
- */
-typedef void
-(*GNUNET_SOCIAL_AppConnectedCallback) (void *cls);
-
-
-/**
- * Notification about a home.
- *
- * @param cls
- *        Closure.
- * @param hconn
- *        Host connection, to be used with GNUNET_SOCIAL_host_enter_reconnect()
- * @param ego
- *        Ego used to enter the place.
- * @param place_pub_key
- *        Public key of the place.
- * @param place_state
- *        @see enum GNUNET_SOCIAL_AppPlaceState
- */
-typedef void
-(*GNUNET_SOCIAL_AppHostPlaceCallback) (void *cls,
-                                       struct GNUNET_SOCIAL_HostConnection *hconn,
-                                       struct GNUNET_SOCIAL_Ego *ego,
-                                       const struct GNUNET_CRYPTO_EddsaPublicKey *place_pub_key,
-                                       enum GNUNET_SOCIAL_AppPlaceState place_state);
-
-/**
- * Notification about a place.
- *
- * @param cls
- *        Closure.
- * @param gconn
- *        Guest connection, to be used with GNUNET_SOCIAL_guest_enter_reconnect()
- * @param ego
- *        Ego used to enter the place.
- * @param place_pub_key
- *        Public key of the place.
- * @param place_state
- *        @see enum GNUNET_SOCIAL_AppPlaceState
- */
-typedef void
-(*GNUNET_SOCIAL_AppGuestPlaceCallback) (void *cls,
-                                        struct GNUNET_SOCIAL_GuestConnection *gconn,
-                                        struct GNUNET_SOCIAL_Ego *ego,
-                                        const struct GNUNET_CRYPTO_EddsaPublicKey *place_pub_key,
-                                        enum GNUNET_SOCIAL_AppPlaceState place_state);
-
-
-/**
- * Establish application connection to the social service.
- *
- * The @host_cb and @guest_cb functions are
- * initially called for each entered places,
- * then later each time a new place is entered with the current app ID.
- *
- * @param cfg
- *        Configuration.
- * @param ego_cb
- *        Function to notify about an available ego.
- * @param host_cb
- *        Function to notify about a place entered as host.
- * @param guest_cb
- *        Function to notify about a place entered as guest.
- * @param cls
- *        Closure for the callbacks.
- *
- * @return Handle that can be used to stop listening.
- */
-struct GNUNET_SOCIAL_App *
-GNUNET_SOCIAL_app_connect (const struct GNUNET_CONFIGURATION_Handle *cfg,
-                           const char *id,
-                           GNUNET_SOCIAL_AppEgoCallback ego_cb,
-                           GNUNET_SOCIAL_AppHostPlaceCallback host_cb,
-                           GNUNET_SOCIAL_AppGuestPlaceCallback guest_cb,
-                           GNUNET_SOCIAL_AppConnectedCallback connected_cb,
-                           void *cls);
-
-
-/**
- * Disconnect app.
- *
- * @param app
- *        Application handle.
- * @param disconnect_cb
- *        Disconnect callback.
- * @param disconnect_cls
- *        Disconnect closure.
- */
-void
-GNUNET_SOCIAL_app_disconnect (struct GNUNET_SOCIAL_App *app,
-                              GNUNET_ContinuationCallback disconnect_cb,
-                              void *disconnect_cls);
-
-
-/**
- * Get the public key of @a ego.
- *
- * @param ego
- *        Ego.
- *
- * @return Public key of ego.
- */
-const struct GNUNET_CRYPTO_EcdsaPublicKey *
-GNUNET_SOCIAL_ego_get_pub_key (const struct GNUNET_SOCIAL_Ego *ego);
-
-
-/**
- * Get the name of @a ego.
- *
- * @param ego
- *        Ego.
- *
- * @return Public key of @a ego.
- */
-const char *
-GNUNET_SOCIAL_ego_get_name (const struct GNUNET_SOCIAL_Ego *ego);
-
-
-/**
- * Get the public key of a @a nym.
- *
- * Suitable, for example, to be used with GNUNET_SOCIAL_zone_add_nym().
- *
- * @param nym
- *        Pseudonym to map to a cryptographic identifier.
- *
- * @return Public key of nym.
- */
-const struct GNUNET_CRYPTO_EcdsaPublicKey *
-GNUNET_SOCIAL_nym_get_pub_key (const struct GNUNET_SOCIAL_Nym *nym);
-
-
-/**
- * Get the hash of the public key of a @a nym.
- *
- * @param nym
- *        Pseudonym to map to a cryptographic identifier.
- *
- * @return Hash of the public key of nym.
- */
-const struct GNUNET_HashCode *
-GNUNET_SOCIAL_nym_get_pub_key_hash (const struct GNUNET_SOCIAL_Nym *nym);
-
-
-/**
- * Function called asking for nym to be admitted to the place.
- *
- * Should call either GNUNET_SOCIAL_host_admit() or
- * GNUNET_SOCIAL_host_reject_entry() (possibly asynchronously).  If this host
- * cannot decide, it is fine to call neither function, in which case hopefully
- * some other host of the place exists that will make the decision.  The @a nym
- * reference remains valid until the #GNUNET_SOCIAL_FarewellCallback is invoked
- * for it.
- *
- * @param cls
- *        Closure.
- * @param nym
- *        Handle for the user who wants to enter.
- * @param method_name
- *        Method name in the entry request.
- * @param variable_count
- *        Number of elements in the @a variables array.
- * @param variables
- *        Variables present in the message.
- * @param data
- *        Payload given on enter (e.g. a password).
- * @param data_size
- *        Number of bytes in @a data.
- */
-typedef void
-(*GNUNET_SOCIAL_AnswerDoorCallback) (void *cls,
-                                     struct GNUNET_SOCIAL_Nym *nym,
-                                     const char *method_name,
-                                     struct GNUNET_PSYC_Environment *env,
-                                     const void *data,
-                                     size_t data_size);
-
-
-/**
- * Function called when a @a nym leaves the place.
- *
- * This is also called if the @a nym was never given permission to enter
- * (i.e. the @a nym stopped asking to get in).
- *
- * @param cls
- *        Closure.
- * @param nym
- *        Handle for the user who left.
- */
-typedef void
-(*GNUNET_SOCIAL_FarewellCallback) (void *cls,
-                                   const struct GNUNET_SOCIAL_Nym *nym,
-                                   struct GNUNET_PSYC_Environment *env);
-
-
-/**
- * Function called after the host entered a home.
- *
- * @param cls
- *        Closure.
- * @param result
- *        #GNUNET_OK on success, or
- *        #GNUNET_SYSERR on error.
- * @param place_pub_key
- *        Public key of home.
- * @param max_message_id
- *        Last message ID sent to the channel.
- *        Or 0 if no messages have been sent to the place yet.
- */
-typedef void
-(*GNUNET_SOCIAL_HostEnterCallback) (void *cls, int result,
-                                    const struct GNUNET_CRYPTO_EddsaPublicKey *place_pub_key,
-                                    uint64_t max_message_id);
-
-
-/**
- * Enter a place as host.
- *
- * A place is created upon first entering, and it is active until permanently
- * left using GNUNET_SOCIAL_host_leave().
- *
- * @param cfg
- *        Configuration to contact the social service.
- * @param ego
- *        Identity of the host.
- * @param place_key
- *        Private-public key pair of the place.
- *        NULL for ephemeral places.
- * @param policy
- *        Policy specifying entry and history restrictions for the place.
- * @param slicer
- *        Slicer to handle incoming messages.
- * @param enter_cb
- *        Function called when the place is entered and ready to use.
- * @param answer_door_cb
- *        Function to handle new nyms that want to enter.
- * @param farewell_cb
- *        Function to handle departing nyms.
- * @param cls
- *        Closure for the callbacks.
- *
- * @return Handle for the host.
- */
-struct GNUNET_SOCIAL_Host *
-GNUNET_SOCIAL_host_enter (const struct GNUNET_SOCIAL_App *app,
-                          const struct GNUNET_SOCIAL_Ego *ego,
-                          enum GNUNET_PSYC_Policy policy,
-                          struct GNUNET_PSYC_Slicer *slicer,
-                          GNUNET_SOCIAL_HostEnterCallback enter_cb,
-                          GNUNET_SOCIAL_AnswerDoorCallback answer_door_cb,
-                          GNUNET_SOCIAL_FarewellCallback farewell_cb,
-                          void *cls);
-
-
-/**
- * Reconnect to an already entered place as host.
- *
- * @param hconn
- *        Host connection handle.
- *        @see GNUNET_SOCIAL_app_connect() & GNUNET_SOCIAL_AppHostPlaceCallback()
- * @param slicer
- *        Slicer to handle incoming messages.
- * @param enter_cb
- *        Function called when the place is entered and ready to use.
- * @param answer_door_cb
- *        Function to handle new nyms that want to enter.
- * @param farewell_cb
- *        Function to handle departing nyms.
- * @param cls
- *        Closure for the callbacks.
- *
- * @return Handle for the host.
- */
-struct GNUNET_SOCIAL_Host *
-GNUNET_SOCIAL_host_enter_reconnect (struct GNUNET_SOCIAL_HostConnection *hconn,
-                                    struct GNUNET_PSYC_Slicer *slicer,
-                                    GNUNET_SOCIAL_HostEnterCallback enter_cb,
-                                    GNUNET_SOCIAL_AnswerDoorCallback answer_door_cb,
-                                    GNUNET_SOCIAL_FarewellCallback farewell_cb,
-                                    void *cls);
-
-
-/**
- * Decision whether to admit @a nym into the place or refuse entry.
- *
- * @param hst
- *        Host of the place.
- * @param nym
- *        Handle for the entity that wanted to enter.
- * @param is_admitted
- *        #GNUNET_YES    if @a nym is admitted,
- *        #GNUNET_NO     if @a nym is refused entry,
- *        #GNUNET_SYSERR if we cannot answer the request.
- * @param entry_resp
- *        Entry response message, or NULL.
- * @return #GNUNET_OK on success,
- *         #GNUNET_SYSERR if the message is too large.
- */
-int
-GNUNET_SOCIAL_host_entry_decision (struct GNUNET_SOCIAL_Host *hst,
-                                   struct GNUNET_SOCIAL_Nym *nym,
-                                   int is_admitted,
-                                   const struct GNUNET_PSYC_Message *entry_resp);
-
-
-/**
- * Throw @a nym out of the place.
- *
- * Sends a _notice_place_leave announcement to the home.
- *
- * The @a nym reference will remain valid until the
- * #GNUNET_SOCIAL_FarewellCallback is invoked,
- * which should be very soon after this call.
- *
- * @param host
- *        Host of the place.
- * @param nym
- *        Handle for the entity to be ejected.
- * @param env
- *        Environment for the message or NULL.
- *        _nym is set to @e nym regardless whether an @e env is provided.
- */
-void
-GNUNET_SOCIAL_host_eject (struct GNUNET_SOCIAL_Host *host,
-                          const struct GNUNET_SOCIAL_Nym *nym,
-                          struct GNUNET_PSYC_Environment *env);
-
-
-/**
- * Flags for announcements by a host.
- */
-enum GNUNET_SOCIAL_AnnounceFlags
-{
-  GNUNET_SOCIAL_ANNOUNCE_NONE = 0,
-
-  /**
-   * Whether this announcement removes all objects from the place.
-   *
-   * New objects can be still added to the now empty place using the @e env
-   * parameter of the same announcement.
-   */
-  GNUNET_SOCIAL_ANNOUNCE_CLEAR_OBJECTS = 1 << 0
-};
-
-
-/**
- * Handle for an announcement request.
- */
-struct GNUNET_SOCIAL_Announcement;
-
-
-/**
- * Send a message to all nyms that are present in the place.
- *
- * This function is restricted to the host.  Nyms can only send requests
- * to the host who can decide to relay it to everyone in the place.
- *
- * @param host
- *        Host of the place.
- * @param method_name
- *        Method to use for the announcement.
- * @param env
- *        Environment containing variables for the message and operations
- *        on objects of the place.
- *        Has to remain available until the first call to @a notify_data.
- *        Can be NULL.
- * @param notify_data
- *        Function to call to get the payload of the announcement.
- * @param notify_data_cls
- *        Closure for @a notify.
- * @param flags
- *        Flags for this announcement.
- *
- * @return NULL on error (another announcement already in progress?).
- */
-struct GNUNET_SOCIAL_Announcement *
-GNUNET_SOCIAL_host_announce (struct GNUNET_SOCIAL_Host *host,
-                             const char *method_name,
-                             const struct GNUNET_PSYC_Environment *env,
-                             GNUNET_PSYC_TransmitNotifyData notify_data,
-                             void *notify_data_cls,
-                             enum GNUNET_SOCIAL_AnnounceFlags flags);
-
-
-/**
- * Resume transmitting announcement.
- *
- * @param a
- *        The announcement to resume.
- */
-void
-GNUNET_SOCIAL_host_announce_resume (struct GNUNET_SOCIAL_Announcement *a);
-
-
-/**
- * Cancel announcement.
- *
- * @param a
- *        The announcement to cancel.
- */
-void
-GNUNET_SOCIAL_host_announce_cancel (struct GNUNET_SOCIAL_Announcement *a);
-
-
-/**
- * Allow relaying messages from guests matching a given @a method_prefix.
- *
- * @param host
- *        The host.
- * @param method_prefix
- *        Method prefix to allow.
- */
-void
-GNUNET_SOCIAL_host_relay_allow_method (struct GNUNET_SOCIAL_Host *host,
-                                       const char *method_prefix);
-
-
-/**
- * Allow relaying changes to objects of the place.
- *
- * Only applies to messages with an allowed method name.
- * @see GNUNET_SCOIAL_host_relay_allow_method()
- *
- * @param host
- *        The host.
- * @param object_prefix
- *        Object prefix to allow modifying.
- */
-void
-GNUNET_SOCIAL_host_relay_allow_method (struct GNUNET_SOCIAL_Host *host,
-                                       const char *object_prefix);
-
-
-/**
- * Stop relaying messages from guests.
- *
- * Remove all allowed relay rules.
- *
- *
- *
- */
-void
-GNUNET_SOCIAL_host_relay_stop (struct GNUNET_SOCIAL_Host *host);
-
-
-/**
- * Obtain handle for a hosted place.
- *
- * The returned handle can be used to access the place API.
- *
- * @param host
- *        Handle for the host.
- *
- * @return Handle for the hosted place, valid as long as @a host is valid.
- */
-struct GNUNET_SOCIAL_Place *
-GNUNET_SOCIAL_host_get_place (struct GNUNET_SOCIAL_Host *host);
-
-
-/**
- * Disconnect from a home.
- *
- * Invalidates host handle.
- *
- * @param hst
- *        The host to disconnect.
- * @param disconnect_cb
- *        Function called after disconnected from the service.
- * @param cls
- *        Closure for @a disconnect_cb.
- */
-void
-GNUNET_SOCIAL_host_disconnect (struct GNUNET_SOCIAL_Host *hst,
-                               GNUNET_ContinuationCallback disconnect_cb,
-                               void *cls);
-
-
-/**
- * Stop hosting a home.
- *
- * Sends a _notice_place_closing announcement to the home.
- * Invalidates host handle.
- *
- * @param hst
- *        Host leaving.
- * @param env
- *        Environment for the message or NULL.
- * @param disconnect_cb
- *        Function called after the host left the place
- *        and disconnected from the service.
- * @param cls
- *        Closure for @a disconnect_cb.
- */
-void
-GNUNET_SOCIAL_host_leave (struct GNUNET_SOCIAL_Host *hst,
-                          const struct GNUNET_PSYC_Environment *env,
-                          GNUNET_ContinuationCallback disconnect_cb,
-                          void *cls);
-
-
-/**
- * Function called after the guest entered the local copy of the place.
- *
- * History and object query functions can be used after this call,
- * but new messages can't be sent or received.
- *
- * @param cls
- *        Closure.
- * @param result
- *        #GNUNET_OK on success, or
- *        #GNUNET_SYSERR on error, e.g. could not connect to the service, or
- *        could not resolve GNS name.
- * @param place_pub_key
- *        Public key of place.
- * @param max_message_id
- *        Last message ID sent to the place.
- *        Or 0 if no messages have been sent to the place yet.
- */
-typedef void
-(*GNUNET_SOCIAL_GuestEnterCallback) (void *cls, int result,
-                                     const struct GNUNET_CRYPTO_EddsaPublicKey *place_pub_key,
-                                     uint64_t max_message_id);
-
-
-/**
- * Function called upon a guest receives a decision about entry to the place.
- *
- * @param is_admitted
- *        Is the guest admitted to the place?
- *        #GNUNET_YES    if admitted,
- *        #GNUNET_NO     if refused entry,
- *        #GNUNET_SYSERR if the request could not be answered.
- * @param data
- *        Entry response message.
- */
-typedef void
-(*GNUNET_SOCIAL_EntryDecisionCallback) (void *cls,
-                                        int is_admitted,
-                                        const struct GNUNET_PSYC_Message *entry_resp);
-
-
-/**
- * Request entry to a place as a guest.
- *
- * @param app
- *        Application handle.
- * @param ego
- *        Identity of the guest.
- * @param place_pub_key
- *        Public key of the place to enter.
- * @param flags
- *        Flags for the entry.
- * @param origin
- *        Peer identity of the origin of the underlying multicast group.
- * @param relay_count
- *        Number of elements in the @a relays array.
- * @param relays
- *        Relays for the underlying multicast group.
- * @param entry_msg
- *        Entry message.
- * @param slicer
- *        Slicer to use for processing incoming requests from guests.
- *
- * @return NULL on errors, otherwise handle for the guest.
- */
-struct GNUNET_SOCIAL_Guest *
-GNUNET_SOCIAL_guest_enter (const struct GNUNET_SOCIAL_App *app,
-                           const struct GNUNET_SOCIAL_Ego *ego,
-                           const struct GNUNET_CRYPTO_EddsaPublicKey *place_pub_key,
-                           enum GNUNET_PSYC_SlaveJoinFlags flags,
-                           const struct GNUNET_PeerIdentity *origin,
-                           uint32_t relay_count,
-                           const struct GNUNET_PeerIdentity *relays,
-                           const struct GNUNET_PSYC_Message *entry_msg,
-                           struct GNUNET_PSYC_Slicer *slicer,
-                           GNUNET_SOCIAL_GuestEnterCallback local_enter_cb,
-                           GNUNET_SOCIAL_EntryDecisionCallback entry_dcsn_cb,
-                           void *cls);
-
-
-/**
- * Request entry to a place by name as a guest.
- *
- * @param app
- *        Application handle.
- * @param ego
- *        Identity of the guest.
- * @param gns_name
- *        GNS name of the place to enter.  Either in the form of
- *        'room.friend.gnu', or 'NYMPUBKEY.zkey'.  This latter case refers to
- *        the 'PLACE' record of the empty label ("+") in the GNS zone with the
- *        nym's public key 'NYMPUBKEY', and can be used to request entry to a
- *        pseudonym's place directly.
- * @param password
- *        Password to decrypt the record, or NULL for cleartext records.
- * @param join_msg
- *        Entry request message.
- * @param slicer
- *        Slicer to use for processing incoming requests from guests.
- * @param local_enter_cb
- *        Called upon connection established to the social service.
- * @param entry_decision_cb
- *        Called upon receiving entry decision.
- *
- * @return NULL on errors, otherwise handle for the guest.
- */
-struct GNUNET_SOCIAL_Guest *
-GNUNET_SOCIAL_guest_enter_by_name (const struct GNUNET_SOCIAL_App *app,
-                                   const struct GNUNET_SOCIAL_Ego *ego,
-                                   const char *gns_name,
-                                   const char *password,
-                                   const struct GNUNET_PSYC_Message *join_msg,
-                                   struct GNUNET_PSYC_Slicer *slicer,
-                                   GNUNET_SOCIAL_GuestEnterCallback local_enter_cb,
-                                   GNUNET_SOCIAL_EntryDecisionCallback entry_decision_cb,
-                                   void *cls);
-
-
-/**
- * Reconnect to an already entered place as guest.
- *
- * @param gconn
- *        Guest connection handle.
- *        @see GNUNET_SOCIAL_app_connect() & GNUNET_SOCIAL_AppGuestPlaceCallback()
- * @param flags
- *        Flags for the entry.
- * @param slicer
- *        Slicer to use for processing incoming requests from guests.
- * @param local_enter_cb
- *        Called upon connection established to the social service.
- * @param entry_decision_cb
- *        Called upon receiving entry decision.
- *
- * @return NULL on errors, otherwise handle for the guest.
- */
-struct GNUNET_SOCIAL_Guest *
-GNUNET_SOCIAL_guest_enter_reconnect (struct GNUNET_SOCIAL_GuestConnection *gconn,
-                                     enum GNUNET_PSYC_SlaveJoinFlags flags,
-                                     struct GNUNET_PSYC_Slicer *slicer,
-                                     GNUNET_SOCIAL_GuestEnterCallback local_enter_cb,
-                                     void *cls);
-
-
-/**
- * Flags for talking to the host of a place.
- */
-enum GNUNET_SOCIAL_TalkFlags
-{
-  GNUNET_SOCIAL_TALK_NONE = 0
-};
-
-
-/**
- * A talk request.
- */
-struct GNUNET_SOCIAL_TalkRequest;
-
-
-/**
- * Talk to the host of the place.
- *
- * @param place
- *        Place where we want to talk to the host.
- * @param method_name
- *        Method to invoke on the host.
- * @param env
- *        Environment containing variables for the message, or NULL.
- * @param notify_data
- *        Function to use to get the payload for the method.
- * @param notify_data_cls
- *        Closure for @a notify_data.
- * @param flags
- *        Flags for the message being sent.
- *
- * @return NULL if we are already trying to talk to the host,
- *         otherwise handle to cancel the request.
- */
-struct GNUNET_SOCIAL_TalkRequest *
-GNUNET_SOCIAL_guest_talk (struct GNUNET_SOCIAL_Guest *guest,
-                          const char *method_name,
-                          const struct GNUNET_PSYC_Environment *env,
-                          GNUNET_PSYC_TransmitNotifyData notify_data,
-                          void *notify_data_cls,
-                          enum GNUNET_SOCIAL_TalkFlags flags);
-
-
-/**
- * Resume talking to the host of the place.
- *
- * @param tr
- *        Talk request to resume.
- */
-void
-GNUNET_SOCIAL_guest_talk_resume (struct GNUNET_SOCIAL_TalkRequest *tr);
-
-
-/**
- * Cancel talking to the host of the place.
- *
- * @param tr
- *        Talk request to cancel.
- */
-void
-GNUNET_SOCIAL_guest_talk_cancel (struct GNUNET_SOCIAL_TalkRequest *tr);
-
-
-/**
- * Disconnect from a place.
- *
- * Invalidates guest handle.
- *
- * @param gst
- *        The guest to disconnect.
- * @param disconnect_cb
- *        Function called after disconnected from the service.
- * @param cls
- *        Closure for @a disconnect_cb.
- */
-void
-GNUNET_SOCIAL_guest_disconnect (struct GNUNET_SOCIAL_Guest *gst,
-                                GNUNET_ContinuationCallback disconnect_cb,
-                                void *cls);
-
-
-/**
- * Leave a place temporarily or permanently.
- *
- * Notifies the owner of the place about leaving, and destroys the place handle.
- *
- * @param place
- *        Place to leave.
- * @param env
- *        Optional environment for the leave message if @a keep_active
- *        is #GNUNET_NO.  NULL if not needed.
- * @param disconnect_cb
- *        Called upon disconnecting from the social service.
- */
-void
-GNUNET_SOCIAL_guest_leave (struct GNUNET_SOCIAL_Guest *gst,
-                           struct GNUNET_PSYC_Environment *env,
-                           GNUNET_ContinuationCallback disconnect_cb,
-                           void *leave_cls);
-
-
-/**
- * Obtain handle for a place entered as guest.
- *
- * The returned handle can be used to access the place API.
- *
- * @param guest  Handle for the guest.
- *
- * @return Handle for the place, valid as long as @a guest is valid.
- */
-struct GNUNET_SOCIAL_Place *
-GNUNET_SOCIAL_guest_get_place (struct GNUNET_SOCIAL_Guest *guest);
-
-
-/**
- * A history request.
- */
-struct GNUNET_SOCIAL_HistoryRequest;
-
-
-/**
- * Get the public key of a place.
- *
- * @param plc
- *        Place.
- *
- * @return Public key of the place.
- */
-const struct GNUNET_CRYPTO_EddsaPublicKey *
-GNUNET_SOCIAL_place_get_pub_key (const struct GNUNET_SOCIAL_Place *plc);
-
-
-/**
- * Set message processing @a flags for a @a method_prefix.
- *
- * @param plc
- *        Place.
- * @param method_prefix
- *        Method prefix @a flags apply to.
- * @param flags
- *        The flags that apply to a matching @a method_prefix.
- */
-void
-GNUNET_SOCIAL_place_msg_proc_set (struct GNUNET_SOCIAL_Place *plc,
-                                  const char *method_prefix,
-                                  enum GNUNET_SOCIAL_MsgProcFlags flags);
-
-/**
- * Clear all message processing flags previously set for this place.
- */
-void
-GNUNET_SOCIAL_place_msg_proc_clear (struct GNUNET_SOCIAL_Place *plc);
-
-
-/**
- * Learn about the history of a place.
- *
- * Messages are returned through the @a slicer function
- * and have the #GNUNET_PSYC_MESSAGE_HISTORIC flag set.
- *
- * @param place
- *        Place we want to learn more about.
- * @param start_message_id
- *        First historic message we are interested in.
- * @param end_message_id
- *        Last historic message we are interested in (inclusive).
- * @param method_prefix
- *        Only retrieve messages with this method prefix.
- * @param flags
- *        OR'ed GNUNET_PSYC_HistoryReplayFlags
- * @param slicer
- *        Slicer to use for retrieved messages.
- *        Can be the same as the slicer of the place.
- * @param result_cb
- *        Function called after all messages retrieved.
- *        NULL if not needed.
- * @param cls Closure for @a result_cb.
- */
-struct GNUNET_SOCIAL_HistoryRequest *
-GNUNET_SOCIAL_place_history_replay (struct GNUNET_SOCIAL_Place *plc,
-                                    uint64_t start_message_id,
-                                    uint64_t end_message_id,
-                                    const char *method_prefix,
-                                    uint32_t flags,
-                                    struct GNUNET_PSYC_Slicer *slicer,
-                                    GNUNET_ResultCallback result_cb,
-                                    void *cls);
-
-
-/**
- * Learn about the history of a place.
- *
- * Sends messages through the slicer function of the place where
- * start_message_id <= message_id <= end_message_id.
- * The messages will have the #GNUNET_PSYC_MESSAGE_HISTORIC flag set.
- *
- * To get the latest message, use 0 for both the start and end message ID.
- *
- * @param place
- *        Place we want to learn more about.
- * @param message_limit
- *        Maximum number of historic messages we are interested in.
- * @param result_cb
- *        Function called after all messages retrieved.
- *        NULL if not needed.
- * @param cls Closure for @a result_cb.
- */
-struct GNUNET_SOCIAL_HistoryRequest *
-GNUNET_SOCIAL_place_history_replay_latest (struct GNUNET_SOCIAL_Place *plc,
-                                           uint64_t message_limit,
-                                           const char *method_prefix,
-                                           uint32_t flags,
-                                           struct GNUNET_PSYC_Slicer *slicer,
-                                           GNUNET_ResultCallback result_cb,
-                                           void *cls);
-
-/**
- * Cancel learning about the history of a place.
- *
- * @param hist
- *        History lesson to cancel.
- */
-void
-GNUNET_SOCIAL_place_history_replay_cancel (struct GNUNET_SOCIAL_HistoryRequest *hist);
-
-
-struct GNUNET_SOCIAL_LookHandle;
-
-
-/**
- * Look at a particular object in the place.
- *
- * The best matching object is returned (its name might be less specific than
- * what was requested).
- *
- * @param place
- *        The place to look the object at.
- * @param full_name
- *        Full name of the object.
- *
- * @return NULL if there is no such object at this place.
- */
-struct GNUNET_SOCIAL_LookHandle *
-GNUNET_SOCIAL_place_look_at (struct GNUNET_SOCIAL_Place *plc,
-                             const char *full_name,
-                             GNUNET_PSYC_StateVarCallback var_cb,
-                             GNUNET_ResultCallback result_cb,
-                             void *cls);
-
-/**
- * Look for objects in the place with a matching name prefix.
- *
- * @param place
- *        The place to look its objects at.
- * @param name_prefix
- *        Look at objects with names beginning with this value.
- * @param var_cb
- *        Function to call for each object found.
- * @param cls
- *        Closure for callback function.
- *
- * @return Handle that can be used to stop looking at objects.
- */
-struct GNUNET_SOCIAL_LookHandle *
-GNUNET_SOCIAL_place_look_for (struct GNUNET_SOCIAL_Place *plc,
-                              const char *name_prefix,
-                              GNUNET_PSYC_StateVarCallback var_cb,
-                              GNUNET_ResultCallback result_cb,
-                              void *cls);
-
-
-/**
- * Stop looking at objects.
- *
- * @param lh Look handle to stop.
- */
-void
-GNUNET_SOCIAL_place_look_cancel (struct GNUNET_SOCIAL_LookHandle *lh);
-
-
-/**
- * Advertise a @e place in the GNS zone of @a ego.
- *
- * @param app
- *        Application handle.
- * @param ego
- *        Ego.
- * @param place_pub_key
- *        Public key of place to add.
- * @param name
- *        The name for the PLACE record to put in the zone.
- * @param password
- *        Password used to encrypt the record or NULL to keep it cleartext.
- * @param relay_count
- *        Number of elements in the @a relays array.
- * @param relays
- *        List of relays to put in the PLACE record to advertise
- *        as entry points to the place in addition to the origin.
- * @param expiration_time
- *        Expiration time of the record, use 0 to remove the record.
- * @param result_cb
- *        Function called with the result of the operation.
- * @param result_cls
- *        Closure for @a result_cb
- *
- * @return #GNUNET_OK if the request was sent,
- *         #GNUNET_SYSERR on error, e.g. the name/password is too long.
- */
-int
-GNUNET_SOCIAL_zone_add_place (const struct GNUNET_SOCIAL_App *app,
-                              const struct GNUNET_SOCIAL_Ego *ego,
-                              const char *name,
-                              const char *password,
-                              const struct GNUNET_CRYPTO_EddsaPublicKey *place_pub_key,
-                              const struct GNUNET_PeerIdentity *origin,
-                              uint32_t relay_count,
-                              const struct GNUNET_PeerIdentity *relays,
-                              struct GNUNET_TIME_Absolute expiration_time,
-                              GNUNET_ResultCallback result_cb,
-                              void *result_cls);
-
-
-/**
- * Add public key to the GNS zone of the @e ego.
- *
- * @param cfg
- *        Configuration.
- * @param ego
- *        Ego.
- * @param name
- *        The name for the PKEY record to put in the zone.
- * @param nym_pub_key
- *        Public key of nym to add.
- * @param expiration_time
- *        Expiration time of the record, use 0 to remove the record.
- * @param result_cb
- *        Function called with the result of the operation.
- * @param result_cls
- *        Closure for @a result_cb
- *
- * @return #GNUNET_OK if the request was sent,
- *         #GNUNET_SYSERR on error, e.g. the name is too long.
- */
-int
-GNUNET_SOCIAL_zone_add_nym (const struct GNUNET_SOCIAL_App *app,
-                            const struct GNUNET_SOCIAL_Ego *ego,
-                            const char *name,
-                            const struct GNUNET_CRYPTO_EcdsaPublicKey *nym_pub_key,
-                            struct GNUNET_TIME_Absolute expiration_time,
-                            GNUNET_ResultCallback result_cb,
-                            void *result_cls);
-
-
-#if 0                           /* keep Emacsens' auto-indent happy */
-{
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-/* ifndef GNUNET_SOCIAL_SERVICE_H */
-#endif
-
-/** @} */  /* end of group */
diff --git a/src/include/gnunet_transport_address_service.h b/src/include/gnunet_transport_address_service.h
new file mode 100644 (file)
index 0000000..9f0717d
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+     This file is part of GNUnet.
+     Copyright (C) 2009-2018 GNUnet e.V.
+
+     GNUnet is free software: you can redistribute it and/or modify it
+     under the terms of the GNU Affero General Public License as published
+     by the Free Software Foundation, either version 3 of the License,
+     or (at your option) any later version.
+
+     GNUnet is distributed in the hope that it will be useful, but
+     WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+     Affero General Public License for more details.
+
+     You should have received a copy of the GNU Affero General Public License
+     along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+     SPDX-License-Identifier: AGPL3.0-or-later
+*/
+
+/**
+ * @author Christian Grothoff
+ *
+ * @file
+ * Provide addresses to transport for validation
+ *
+ * @defgroup transport TRANSPORT service
+ * Low-level communication with other peers
+ *
+ * @see [Documentation](https://gnunet.org/transport-service)
+ *
+ * @{
+ */
+
+#ifndef GNUNET_TRANSPORT_ADDRESS_SERVICE_H
+#define GNUNET_TRANSPORT_ADDRESS_SERVICE_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#if 0                           /* keep Emacsens' auto-indent happy */
+}
+#endif
+#endif
+
+#include "gnunet_util_lib.h"
+#include "gnunet_nt_lib.h"
+
+/**
+ * Version number of the transport address API.
+ */
+#define GNUNET_TRANSPORT_ADDRESS_VERSION 0x00000000
+
+
+/**
+ * Opaque handle to the transport service for communicators.
+ */
+struct GNUNET_TRANSPORT_AddressHandle;
+
+
+/**
+ * Connect to the transport service.
+ *
+ * @param cfg configuration to use
+ * @return NULL on error
+ */
+struct GNUNET_TRANSPORT_AddressHandle *
+GNUNET_TRANSPORT_address_connect (const struct GNUNET_CONFIGURATION_Handle *cfg);
+
+
+/**
+ * Disconnect from the transport service.
+ *
+ * @param ch handle returned from connect
+ */
+void
+GNUNET_TRANSPORT_address_disconnect (struct GNUNET_TRANSPORT_AddressHandle *ch);
+
+
+/**
+ * The client has learned about a possible address for peer @a pid
+ * (i.e. via broadcast, multicast, DHT, ...).  The transport service
+ * should consider validating it. Note that the plugin is NOT expected
+ * to have verified the signature, the transport service must decide
+ * whether to check the signature.
+ *
+ * While the notification is sent to @a ch asynchronously, this API
+ * does not return a handle as the delivery of addresses is simply
+ * unreliable, and if @a ch is down, the data provided will simply be
+ * lost.
+ *
+ * @param ch communicator handle
+ * @param pid peer the address is for
+ * @param raw raw address data
+ * @param raw_size number of bytes in @a raw
+ */
+void
+GNUNET_TRANSPORT_address_try (struct GNUNET_TRANSPORT_AddressHandle *ch,
+                              const struct GNUNET_PeerIdentity *pid,
+                              const void *raw,
+                              const size_t raw_size);
+
+
+#if 0                           /* keep Emacsens' auto-indent happy */
+{
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+/* ifndef GNUNET_TRANSPORT_ADDRESS_SERVICE_H */
+#endif
+
+/** @} */  /* end of group */
+
+/* end of gnunet_transport_address_service.h */
index d568c621ee3a1f759852c5d163348f99b99891a4..58a1e997951857b4ccfe212cc261d396034e3bc4 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -107,7 +107,7 @@ enum GNUNET_TRANSPORT_AddressClass
    * Bitmask for "any" address.
    */
   GNUNET_TRANSPORT_AC_ANY = 65535
-  
+
 };
 
 
index 1bae7ca4436d3205ceb23918ddbdc6b49bc7b415..01b0bcf9ef7f8420bf46443ece1fa698b80ee148 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -281,4 +281,14 @@ atoll (const char *nptr);
  */
 #define GNUNET_TERM_SIG SIGTERM
 
+
+#ifndef PATH_MAX
+/**
+ * Assumed maximum path length.
+ */
+#define PATH_MAX 4096
+#endif
+
+
+
 #endif
index bcfa6b212a12b40a0824eb597255de55c6c08e9e..59f2bb94971b3e67d361745dae877999be468aca 100644 (file)
@@ -10,29 +10,25 @@ PRIVATE_KEY = hostkeys/c_bootstrap_server
 [transport]
 UNIXPATH = $GNUNET_RUNTIME_DIR/test-service-transport-8
 PORT = 20011
-PLUGINS = tcp udp http_client https_client http_server https_server
+PLUGINS = tcp
 
 [transport-tcp]
 PORT = 20010
 ADVERTISED_PORT = 20010
 
-[transport-udp]
-PORT = 20009
-
-[transport-http_server]
-PORT = 20008
-
-[transport-https_server]
-PORT = 20007
-
 [hostlist]
 OPTIONS = -p
-SERVERs = 
+SERVERs =
 
 [nat]
 BEHIND_NAT = NO
 DISABLEV6 = NO
+UNIXPATH = $GNUNET_RUNTIME_DIR/test-service-nat-4
+PORT = 20070
 
+[nat-auto]
+UNIXPATH = $GNUNET_RUNTIME_DIR/test-service-natauto-4
+PORT = 20076
 
 [arm]
 UNIXPATH = $GNUNET_RUNTIME_DIR/test-service-arm-4
@@ -94,6 +90,3 @@ PORT = 20001
 [nse]
 UNIXPATH = $GNUNET_RUNTIME_DIR/test-service-nse-12
 PORT = 20015
-
-
-
index 0040a8dc00740f958708ef4ba7cf5db31587ec70..550bd38f71b2f20b18f09e98bf2d4eec01ef21e5 100644 (file)
@@ -10,7 +10,7 @@ PRIVATE_KEY = hostkeys/c_nat_client
 [transport]
 UNIXPATH = $GNUNET_RUNTIME_DIR/test-service-transport-50
 PORT = 20065
-PLUGINS = tcp udp http_client https_client
+PLUGINS = tcp
 
 [transport-tcp]
 PORT = 0
@@ -25,7 +25,12 @@ SERVERS = http://localhost:8080/
 [nat]
 BEHIND_NAT = YES
 DISABLEV6 = NO
+UNIXPATH = $GNUNET_RUNTIME_DIR/test-service-nat-46
+PORT = 20071
 
+[nat-auto]
+UNIXPATH = $GNUNET_RUNTIME_DIR/test-service-natauto-46
+PORT = 20077
 
 [arm]
 UNIXPATH = $GNUNET_RUNTIME_DIR/test-service-arm-46
index 38a7d7fbc456c6bda5ead7c2e0d8314c11ae3adc..4573df601a199ad88a6829ce9a250661f751a25b 100644 (file)
@@ -7,7 +7,7 @@ GNUNET_TEST_HOME = $GNUNET_TMP/c_no_nat_client/
 PRIVATE_KEY = hostkeys/c_no_nat_client
 
 [transport]
-PLUGINS = tcp udp http_client https_client
+PLUGINS = tcp
 UNIXPATH = $GNUNET_RUNTIME_DIR/test-service-transport-22
 PORT = 20029
 
@@ -15,17 +15,18 @@ PORT = 20029
 PORT = 20028
 ADVERTISED_PORT = 20028
 
-[transport-udp]
-PORT = 20027
-BROADCAST_INTERVAL = 30 s
-
 [hostlist]
 SERVERS = http://localhost:8080/
 
 [nat]
 BEHIND_NAT = NO
 DISABLEV6 = NO
+UNIXPATH = $GNUNET_RUNTIME_DIR/test-service-nat-18
+PORT = 20072
 
+[nat-auto]
+UNIXPATH = $GNUNET_RUNTIME_DIR/test-service-natauto-18
+PORT = 20074
 
 [arm]
 UNIXPATH = $GNUNET_RUNTIME_DIR/test-service-arm-18
index 6c8f07632d9d7bfb30103e523a39246ca7e5854f..a7d9a436f0f66ec0797aa15a64850d5dd953d658 100644 (file)
@@ -8,7 +8,7 @@ PRIVATE_KEY = hostkeys/c_no_nat_client_2
 
 
 [transport]
-PLUGINS = tcp udp http_client https_client
+PLUGINS = tcp
 UNIXPATH = $GNUNET_RUNTIME_DIR/test-service-transport-22
 PORT = 20039
 
@@ -26,6 +26,12 @@ SERVERS = http://localhost:8080/
 [nat]
 BEHIND_NAT = NO
 DISABLEV6 = NO
+PORT = 20073
+UNIXPATH = $GNUNET_RUNTIME_DIR/test-service-nat-18
+
+[nat-auto]
+PORT = 20075
+UNIXPATH = $GNUNET_RUNTIME_DIR/test-service-natauto-18
 
 
 [arm]
@@ -111,5 +117,3 @@ PORT = 20038
 [dv]
 UNIXPATH = $GNUNET_RUNTIME_DIR/test-service-dv-36
 PORT = 20039
-
-
index 73be6f295515cfa638c84a35c900bc4020b2c67a..83acb908fcc713b8698349ae59567e78e58cd8ed 100644 (file)
@@ -19,6 +19,7 @@
 #
 # Testcase for gnunet-peerinfo
 from __future__ import print_function
+from builtins import object
 import os
 import re
 import subprocess
index 0d02a792f6be6760750eb45805235fc40a87488d..c9342ecf0820cd8e55a93da4cfe9a5b070b80b7a 100644 (file)
 #    WITHOUT ANY WARRANTY; without even the implied warranty of
 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 #    Affero General Public License for more details.
-#   
+#
 #    You should have received a copy of the GNU Affero General Public License
 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 #    SPDX-License-Identifier: AGPL3.0-or-later
 #
 # Functions for integration testing
+from __future__ import unicode_literals
+from __future__ import print_function
+from builtins import object
+from builtins import str
 import os
 import subprocess
 import sys
 import shutil
 import time
 from gnunet_pyexpect import pexpect
+import logging
 
+logger = logging.getLogger()
+handler = logging.StreamHandler()
+formatter = logging.Formatter(
+        '%(asctime)s %(name)-12s %(levelname)-8s %(message)s')
+handler.setFormatter(formatter)
+logger.addHandler(handler)
+logger.setLevel(logging.DEBUG)
 
-class Check:
+class Check(object):
     def __init__(self, test):
         self.fulfilled = False
         self.conditions = list()
@@ -55,7 +67,7 @@ class Check:
             time.sleep(1)
             execs += 1
         if ((False == res) and (execs >= timeout)):
-            print(('Check had timeout after ' + str(timeout) + ' seconds'))
+            logger.debug('Check had timeout after %s seconds', str(timeout))
             neg_cont(self)
         elif ((False == res) and (execs < timeout)):
             if (None != neg_cont):
@@ -83,7 +95,7 @@ class Check:
                 neg += 1
             else:
                 pos += 1
-        print((str(pos) + ' out of ' + str(pos+neg) + ' conditions fulfilled'))
+        logger.debug('%s out of %s conditions fulfilled', str(pos), str(pos+neg))
         return self.fulfilled
 
     def reset(self):
@@ -92,7 +104,7 @@ class Check:
             c.fulfilled = False
 
 
-class Condition:
+class Condition(object):
     def __init__(self):
         self.fulfilled = False
         self.type = 'generic'
@@ -106,9 +118,9 @@ class Condition:
 
     def evaluate(self, failed_only):
         if ((self.fulfilled == False) and (failed_only == True)):
-            print(str(self.type) + 'condition for was ' + str(self.fulfilled))
+            logger.debug('%s condition for was %s', str(self.type), str(self.fulfilled))
         elif (failed_only == False):
-            print(str(self.type) + 'condition for was ' + str(self.fulfilled))
+            logger.debug('%s condition for was %s', str(self.type), str(self.fulfilled))
         return self.fulfilled
 
 
@@ -131,26 +143,26 @@ class FileExistCondition(Condition):
 
     def evaluate(self, failed_only):
         if ((self.fulfilled == False) and (failed_only == True)):
-            print(str(self.type) + 'condition for file '+self.file+' was ' + str(self.fulfilled))
+            logger.debug('%s confition for file %s was %s', str(self.type), self.file, str(self.fulfilled))
         elif (failed_only == False):
-            print(str(self.type) + 'condition for file '+self.file+' was ' + str(self.fulfilled))
+            logger.debug('%s confition for file %s was %s', str(self.type), self.file, str(self.fulfilled))
         return self.fulfilled
 
 
-class StatisticsCondition (Condition):
+class StatisticsCondition(Condition):
     def __init__(self, peer, subsystem, name, value):
         self.fulfilled = False
         self.type = 'statistics'
         self.peer = peer
         self.subsystem = subsystem
         self.name = name
-        self.value = value
+        self.value = str(value)
         self.result = -1
 
     def check(self):
         if (self.fulfilled == False):
             self.result = self.peer.get_statistics_value(self.subsystem, self.name)
-            if (str(self.result) == str(self.value)):
+            if (self.result == self.value):
                 self.fulfilled = True
                 return True
             else:
@@ -159,10 +171,6 @@ class StatisticsCondition (Condition):
             return True
 
     def evaluate(self, failed_only):
-        if (self.result == -1):
-            res = 'NaN'
-        else:
-            res = str(self.result)
         if (self.fulfilled == False):
             fail = " FAIL!"
             op = " != "
@@ -170,12 +178,12 @@ class StatisticsCondition (Condition):
             fail = ""
             op = " == "
         if (((self.fulfilled == False) and (failed_only == True)) or (failed_only == False)):
-            print(self.peer.id[:4] + " " + self.peer.cfg + " " + str(self.type) + ' condition in subsystem "' + self.subsystem.ljust(12) + '" : "' + self.name.ljust(30) + '" : (expected/real value) ' + str(self.value) + op + res + fail)
+            logger.debug('%s %s condition in subsystem %s: %s: (expected/real value) %s %s %s %s', self.peer.id[:4].decode("utf-8"), self.peer.cfg, self.subsystem.ljust(12), self.name.ljust(30), self.value, op, self.result, fail)
         return self.fulfilled
 
 
 # Specify two statistic values and check if they are equal
-class EqualStatisticsCondition (Condition):
+class EqualStatisticsCondition(Condition):
     def __init__(self, peer, subsystem, name, peer2, subsystem2, name2):
         self.fulfilled = False
         self.type = 'equalstatistics'
@@ -192,7 +200,7 @@ class EqualStatisticsCondition (Condition):
         if (self.fulfilled == False):
             self.result = self.peer.get_statistics_value(self.subsystem, self.name)
             self.result2 = self.peer2.get_statistics_value(self.subsystem2, self.name2)
-            if (str(self.result) == str(self.result2)):
+            if (self.result == self.result2):
                 self.fulfilled = True
                 return True
             else:
@@ -201,26 +209,12 @@ class EqualStatisticsCondition (Condition):
             return True
 
     def evaluate(self, failed_only):
-        if (self.result == -1):
-            res = 'NaN'
-        else:
-            res = str(self.result)
-        if (self.result2 == -1):
-            res2 = 'NaN'
-        else:
-            res2 = str(self.result2)
-        if (self.fulfilled == False):
-            fail = " FAIL!"
-            op = " != "
-        else:
-            fail = ""
-            op = " == "
         if (((self.fulfilled == False) and (failed_only == True)) or (failed_only == False)):
-            print(self.peer.id[:4] + ' "' + self.subsystem.ljust(12) + '" "' + self.name.ljust(30) + '" == ' + str(self.result) + " " + self.peer2.id[:4] + ' "' + self.subsystem2.ljust(12) + '" ' + self.name2.ljust(30) + '" ' + str(self.result2))
+            logger.debug('%s %s %s == %s %s %s %s %s', self.peer.id[:4], self.subsystem.ljust(12), self.name.ljust(30), self.result, self.peer2.id[:4], self.subsystem2.ljust(12), self.name2.ljust(30), self.result2)
         return self.fulfilled
 
 
-class Test:
+class Test(object):
     def __init__(self, testname, verbose):
         self.peers = list()
         self.verbose = verbose
@@ -252,10 +246,11 @@ class Test:
             print(msg)
 
 
-class Peer:
+class Peer(object):
     def __init__(self, test, cfg_file):
         if (False == os.path.isfile(cfg_file)):
-            print(("Peer cfg " + cfg_file + ": FILE NOT FOUND"))
+            # print(("Peer cfg " + cfg_file + ": FILE NOT FOUND"))
+            logger.debug('Peer cfg %s : FILE NOT FOUND', cfg_file)
         self.id = "<NaN>"
         self.test = test
         self.started = False
@@ -263,22 +258,30 @@ class Peer:
 
     def __del__(self):
         if (self.started == True):
-            print('ERROR! Peer using cfg ' + self.cfg + ' was not stopped')
+            # print('ERROR! Peer using cfg ' + self.cfg + ' was not stopped')
+            logger.debug('ERROR! Peer using cfg %s was not stopped', self.cfg)
             ret = self.stop()
             if (False == ret):
-                print('ERROR! Peer using cfg ' + self.cfg + ' could not be stopped')
+                # print('ERROR! Peer using cfg ' +
+                #       self.cfg +
+                #       ' could not be stopped')
+                logger.debug('ERROR! Peer using cfg %s could not be stopped', self.cfg)
                 self.started = False
             return ret
         else:
             return False
 
     def start(self):
+        os.unsetenv ("XDG_CONFIG_HOME")
+        os.unsetenv ("XDG_DATA_HOME")
+        os.unsetenv ("XDG_CACHE_HOME")
         self.test.p("Starting peer using cfg " + self.cfg)
         try:
             server = subprocess.Popen([self.test.gnunetarm, '-sq', '-c', self.cfg])
             server.communicate()
         except OSError:
-            print("Can not start peer")
+            # print("Can not start peer")
+            logger.debug('Can not start peer')
             self.started = False
             return False
         self.started = True
@@ -288,9 +291,10 @@ class Peer:
             server.spawn(None, [self.test.gnunetpeerinfo, '-c', self.cfg, '-s'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
             test = server.read("stdout", 1024)
         except OSError:
-            print("Can not get peer identity")
-        test = (test.split('`')[1])
-        self.id = test.split('\'')[0]
+            # print("Can not get peer identity")
+            logger.debug('Can not get peer identity')
+        test = (test.split(b'`')[1])
+        self.id = test.split(b'\'')[0]
         return True
 
     def stop(self):
@@ -301,7 +305,8 @@ class Peer:
             server = subprocess.Popen([self.test.gnunetarm, '-eq', '-c', self.cfg])
             server.communicate()
         except OSError:
-            print("Can not stop peer")
+            # print("Can not stop peer")
+            logger.debug('Can not stop peer')
             return False
         self.started = False
         return True
@@ -311,12 +316,15 @@ class Peer:
         server.spawn(None, [self.test.gnunetstatistics, '-c', self.cfg, '-q', '-n', name, '-s', subsystem], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
         # server.expect ("stdout", re.compile (r""))
         test = server.read("stdout", 10240)
-        tests = test.partition('\n')
+        tests = test.partition(b'\n')
         # On W32 GNUnet outputs with \r\n, rather than \n
-        if os.name == 'nt' and tests[1] == '\n' and tests[0][-1] == '\r':
+        if os.name == 'nt' and tests[1] == b'\n' and tests[0][-1] == b'\r':
             tests = (tests[0][:-1], tests[1], tests[2])
         tests = tests[0]
-        if (tests.isdigit() == True):
-            return tests
+        result = tests.decode("utf-8").strip()
+        logger.debug('running gnunet-statistics %s for %s "/" %s yields %s', self.cfg, name, subsystem, result)
+        if (result.isdigit() == True):
+            return result
         else:
+            logger.debug('Invalid statistics value: %s is not a number!', result)
             return -1
index 5bd9380190dcfb4e271fec2e95906d08bbde3f2c..f0de1c0cd3181e841e2f942f3831a37726c232a6 100755 (executable)
 #    WITHOUT ANY WARRANTY; without even the implied warranty of
 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 #    Affero General Public License for more details.
-#   
+#
 #    You should have received a copy of the GNU Affero General Public License
 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 #    SPDX-License-Identifier: AGPL3.0-or-later
 #
 #
+from __future__ import print_function
 import signal
 import sys
 import os
index 0444cf24979254d6753e08c656b089156679b6ad..b5d6dd518ca34cf6e08279ccc0bf140cbfd18a0e 100755 (executable)
@@ -25,6 +25,7 @@
 # Conditions for successful exit:
 # Both peers have 2 connected peers in transport, core, topology, fs and dht
 
+from __future__ import print_function
 import sys
 import signal
 import os
index f8b41177878573a8118a001ddcd140475c01e0f5..a81c78540c716b93d6a92d67e265e2b1712eecc3 100755 (executable)
 #    WITHOUT ANY WARRANTY; without even the implied warranty of
 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 #    Affero General Public License for more details.
-#   
+#
 #    You should have received a copy of the GNU Affero General Public License
 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 #    SPDX-License-Identifier: AGPL3.0-or-later
 #
-# 
+#
+from __future__ import print_function
 import sys
 import signal
 import os
@@ -29,8 +30,8 @@ from gnunet_testing import Peer
 from gnunet_testing import Test
 from gnunet_testing import Check
 from gnunet_testing import Condition
-from gnunet_testing import * 
+from gnunet_testing import *
+
 
 #
 # This test tests if a fresh peer bootstraps from a hostlist server and then
@@ -71,16 +72,16 @@ def cleanup ():
 
 def success_disconnect_cont (check):
        print('Peers disconnected successfully')
-       global success 
+       global success
        success = True;
 
 
-def fail_disconnect_cont (check):    
-       global success 
+def fail_disconnect_cont (check):
+       global success
        success = False;
        print('Peers failed to disconnect')
-       check.evaluate(True)   
-  
+       check.evaluate(True)
+
 def check_disconnect ():
   test.p ('Shutting down bootstrap server')
   server.stop ()
@@ -98,8 +99,8 @@ def success_connect_cont (check):
        check_disconnect ()
 
 
-def fail_connect_cont (check):    
-  global success 
+def fail_connect_cont (check):
+  global success
   success= False
   print('Peers failed to connected!')
   check.evaluate(True)
@@ -107,33 +108,33 @@ def fail_connect_cont (check):
 
 def check_connect ():
   check = Check (test)
+  check.add (StatisticsCondition (server, 'transport', '# peers connected',1))
+  check.add (StatisticsCondition (server, 'core', '# peers connected',1))
+  check.add (StatisticsCondition (server, 'topology', '# peers connected',1))
+  check.add (StatisticsCondition (server, 'dht', '# peers connected',1))
+  check.add (StatisticsCondition (server, 'fs', '# peers connected',1))
+
   check.add (StatisticsCondition (client, 'transport', '# peers connected',1))
   check.add (StatisticsCondition (client, 'core', '# peers connected',1))
   check.add (StatisticsCondition (client, 'topology', '# peers connected',1))
   check.add (StatisticsCondition (client, 'dht', '# peers connected',1))
   check.add (StatisticsCondition (client, 'fs', '# peers connected',1))
-  
-  check.add (StatisticsCondition (server, 'transport', '# peers connected',1))
-  check.add (StatisticsCondition (server, 'core', '# peers connected',1))
-  check.add (StatisticsCondition (server, 'topology', '# peers connected',1))
-  check.add (StatisticsCondition (server, 'dht', '# peers connected',1))
-  check.add (StatisticsCondition (server, 'fs', '# peers connected',1))  
-  
+
   check.run_blocking (check_timeout, success_connect_cont, fail_connect_cont)
 
-# 
+#
 # Test execution
-# 
+#
 
 def SigHandler(signum = None, frame = None):
-       global success  
+       global success
        global server
-       global client  
-       
+       global client
+
        print('Test was aborted!')
        if (None != server):
                server.stop ()
-       if (None != client):            
+       if (None != client):
                client.stop ()
        cleanup ()
        sys.exit(success)
@@ -142,67 +143,63 @@ def run ():
        global success
        global test
        global server
-       global client    
-       
+       global client
+
        server = None
        client = None
-       success = False  
-       
+       success = False
+
        for sig in signals:
                signal.signal(sig, SigHandler)
 
        test = Test ('test_integration_bootstrap_and_connect.py', verbose)
        cleanup ()
-       
+
        server = Peer(test, './confs/c_bootstrap_server.conf');
        client = Peer(test, './confs/c_no_nat_client.conf');
-       
+
        if (True != server.start()):
                print('Failed to start server')
                if (None != server):
                        server.stop ()
                cleanup ()
                sys.exit(success)
-               
+
        # Give the server time to start
-       time.sleep(5)           
-               
+       time.sleep(5)
+
        if (True != client.start()):
                print('Failed to start client')
                if (None != server):
                        server.stop ()
-               if (None != client):            
+               if (None != client):
                        client.stop ()
                cleanup ()
                sys.exit(success)
-       
+
        if ((client.started == True) and (server.started == True)):
                test.p ('Peers started, running check')
                time.sleep(5)
                check_connect ()
        server.stop ()
        client.stop ()
-       
+
        cleanup ()
-       
+
        if (success == False):
                print ('Test failed')
-               return False 
+               return False
        else:
                return True
 
 try:
        run ()
-except (KeyboardInterrupt, SystemExit):    
+except (KeyboardInterrupt, SystemExit):
        print('Test interrupted')
        server.stop ()
        client.stop ()
        cleanup ()
 if (success == False):
-       sys.exit(1)   
+       sys.exit(1)
 else:
-       sys.exit(0)    
-     
-       
-     
-       
+       sys.exit(0)
index 88549274132a720304c9226f00e09fbf324ee95e..601586f47eefb2f85493b4aabacff53091eb2ffc 100755 (executable)
 #    WITHOUT ANY WARRANTY; without even the implied warranty of
 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 #    Affero General Public License for more details.
-#   
+#
 #    You should have received a copy of the GNU Affero General Public License
 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 #    SPDX-License-Identifier: AGPL3.0-or-later
 #
 #
+from __future__ import print_function
 import sys
 import signal
 import os
index 13179eef62cd1249ccc283d253314b882d9fa0ba..e8abacd4871aae75a1c0902b6746f416ea263617 100755 (executable)
 #    WITHOUT ANY WARRANTY; without even the implied warranty of
 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 #    Affero General Public License for more details.
-#   
+#
 #    You should have received a copy of the GNU Affero General Public License
 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 #    SPDX-License-Identifier: AGPL3.0-or-later
 #
-# 
+#
+from __future__ import print_function
 import sys
 import os
 import subprocess
@@ -29,13 +30,13 @@ from gnunet_testing import Peer
 from gnunet_testing import Test
 from gnunet_testing import Check
 from gnunet_testing import Condition
-from gnunet_testing import * 
+from gnunet_testing import *
+
 
 #
 # This test tests if a fresh peer bootstraps from a hostlist server and then
 # successfully connects to the server. When both peers are connected
-# in transport, core, topology, fs, botth peers are shutdown and restarted 
+# in transport, core, topology, fs, botth peers are shutdown and restarted
 #
 # Conditions for successful exit:
 # Both peers have 1 connected peer in transport, core, topology, fs after restart
@@ -67,68 +68,68 @@ def cleanup_onerror (function, path, excinfo):
 
 def cleanup ():
     retries = 10
-    path = os.path.join (tmp, "c_bootstrap_server")  
-    test.p ("Removing " + path)      
+    path = os.path.join (tmp, "c_bootstrap_server")
+    test.p ("Removing " + path)
     while ((os.path.exists(path)) and (retries > 0)):
         shutil.rmtree ((path), False, cleanup_onerror)
         time.sleep (1)
         retries -= 1
     if (os.path.exists(path)):
-        test.p ("Failed to remove " + path) 
-        
-    
+        test.p ("Failed to remove " + path)
+
+
     retries = 10
-    path = os.path.join (tmp, "c_no_nat_client")  
-    test.p ("Removing " + path)      
+    path = os.path.join (tmp, "c_no_nat_client")
+    test.p ("Removing " + path)
     while ((os.path.exists(path)) and (retries > 0)):
         shutil.rmtree ((path), False, cleanup_onerror)
         time.sleep (1)
         retries -= 1
     if (os.path.exists(path)):
-        test.p ("Failed to remove " + path) 
+        test.p ("Failed to remove " + path)
 
 def success_restart_cont (check):
-       global success 
-       print('Peers connected successfully after restart')
+       global success
+       print('Peers connected successfully after restart')
        server.stop ()
        client.stop ()
-       success = True; 
+       success = True;
 
 
-def fail_restart_cont (check):    
-       global success 
+def fail_restart_cont (check):
+       global success
        success = False;
        print('Peers failed to connect after restart')
-       check.evaluate(True)   
-    
+       check.evaluate(True)
+
 
 def success_connect_cont (check):
        print('Peers connected successfully')
        server.stop ()
        client.stop ()
-       
+
        time.sleep(5)
-       
+
        test.p ('Restarting client & server')
        server.start ()
        client.start ()
-       
+
        check = Check (test)
        check.add (StatisticsCondition (client, 'transport', '# peers connected',1))
        check.add (StatisticsCondition (client, 'core', '# peers connected',1))
        check.add (StatisticsCondition (client, 'topology', '# peers connected',1))
        check.add (StatisticsCondition (client, 'fs', '# peers connected',1))
-       
+
        check.add (StatisticsCondition (server, 'transport', '# peers connected',1))
        check.add (StatisticsCondition (server, 'core', '# peers connected',1))
        check.add (StatisticsCondition (server, 'topology', '# peers connected',1))
-       check.add (StatisticsCondition (server, 'fs', '# peers connected',1))  
-       
+       check.add (StatisticsCondition (server, 'fs', '# peers connected',1))
+
        check.run_blocking (check_timeout, success_restart_cont, fail_restart_cont)
 
 
-def fail_connect_cont (check):    
-       global success 
+def fail_connect_cont (check):
+       global success
        success= False;
        print('Peers failed to connect')
        check.evaluate(True)
@@ -140,28 +141,28 @@ def check_connect ():
        check.add (StatisticsCondition (client, 'core', '# peers connected',1))
        check.add (StatisticsCondition (client, 'topology', '# peers connected',1))
        check.add (StatisticsCondition (client, 'fs', '# peers connected',1))
-       
+
        check.add (StatisticsCondition (server, 'transport', '# peers connected',1))
        check.add (StatisticsCondition (server, 'core', '# peers connected',1))
        check.add (StatisticsCondition (server, 'topology', '# peers connected',1))
-       check.add (StatisticsCondition (server, 'fs', '# peers connected',1))  
-       
+       check.add (StatisticsCondition (server, 'fs', '# peers connected',1))
+
        check.run_blocking (check_timeout, success_connect_cont, fail_connect_cont)
 
-# 
+#
 # Test execution
-# 
+#
 
 
 def SigHandler(signum = None, frame = None):
-       global success  
+       global success
        global server
-       global client  
-       
+       global client
+
        print('Test was aborted!')
        if (None != server):
                server.stop ()
-       if (None != client):            
+       if (None != client):
                client.stop ()
        cleanup ()
        sys.exit(success)
@@ -171,68 +172,66 @@ def run ():
        global test
        global server
        global client
-       
+
        success = False
        server = None
-       client = None   
+       client = None
 
        for sig in signals:
                signal.signal(sig, SigHandler)
-       
-       
+
+
        test = Test ('test_integration_disconnect', verbose)
        cleanup ()
        server = Peer(test, './confs/c_bootstrap_server.conf');
        server.start();
-       
+
        client = Peer(test, './confs/c_no_nat_client.conf');
        client.start();
-       
+
 
        if (True != server.start()):
                print('Failed to start server')
                if (None != server):
                        server.stop ()
-               if (None != server):            
+               if (None != server):
                        client.stop ()
                cleanup ()
                sys.exit(success)
-               
+
        # Give the server time to start
        time.sleep(5)
-                       
+
        if (True != client.start()):
                print('Failed to start client')
                if (None != server):
                        server.stop ()
-               if (None != server):            
+               if (None != server):
                        client.stop ()
                cleanup ()
                sys.exit(success)
-       
+
        check_connect ()
-       
-       server.stop ()    
+
+       server.stop ()
        client.stop ()
        cleanup ()
-       
+
        if (success == False):
                print ('Test failed')
                return True
        else:
                return False
 
-       
+
 try:
     run ()
-except (KeyboardInterrupt, SystemExit):    
+except (KeyboardInterrupt, SystemExit):
     print('Test interrupted')
     server.stop ()
     client.stop ()
     cleanup ()
 if (success == False):
-       sys.exit(1)   
+       sys.exit(1)
 else:
-       sys.exit(0)    
-
-       
+       sys.exit(0)
index d9714f8754a6cee7813de276ed51190620637cd5..61d2ea9667a5df0a072c30e704481fe17addf794 100755 (executable)
 #    WITHOUT ANY WARRANTY; without even the implied warranty of
 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 #    Affero General Public License for more details.
-#   
+#
 #    You should have received a copy of the GNU Affero General Public License
 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 #    SPDX-License-Identifier: AGPL3.0-or-later
 #
 #
+from __future__ import print_function
 import sys
 import os
 import subprocess
diff --git a/src/multicast/.gitignore b/src/multicast/.gitignore
deleted file mode 100644 (file)
index a97844e..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-gnunet-service-multicast
-gnunet-multicast
-test_multicast 
-test_multicast_multipeer
-test_multicast_2peers
-test_multicast_multipeer_line
-test_multicast_multipeer_star
diff --git a/src/multicast/Makefile.am b/src/multicast/Makefile.am
deleted file mode 100644 (file)
index 61a9f8b..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-# This Makefile.am is in the public domain
-AM_CPPFLAGS = -I$(top_srcdir)/src/include
-
-pkgcfgdir= $(pkgdatadir)/config.d/
-
-libexecdir= $(pkglibdir)/libexec/
-
-pkgcfg_DATA = \
-  multicast.conf
-
-if MINGW
- WINFLAGS = -Wl,--no-undefined -Wl,--export-all-symbols
-endif
-
-if USE_COVERAGE
-  AM_CFLAGS = -fprofile-arcs -ftest-coverage
-endif
-
-lib_LTLIBRARIES = libgnunetmulticast.la
-
-libgnunetmulticast_la_SOURCES = \
-  multicast_api.c multicast.h
-libgnunetmulticast_la_LIBADD = \
-  $(top_builddir)/src/util/libgnunetutil.la \
-  $(GN_LIBINTL) $(XLIB)
-libgnunetmulticast_la_LDFLAGS = \
-  $(GN_LIB_LDFLAGS)  $(WINFLAGS) \
-  -version-info 0:0:0
-
-
-bin_PROGRAMS = \
- gnunet-multicast
-
-libexec_PROGRAMS = \
- gnunet-service-multicast \
- $(EXP_LIBEXEC)
-
-gnunet_multicast_SOURCES = \
- gnunet-multicast.c
-gnunet_multicast_LDADD = \
-  $(top_builddir)/src/util/libgnunetutil.la \
-  $(GN_LIBINTL)
-
-gnunet_service_multicast_SOURCES = \
- gnunet-service-multicast.c
-gnunet_service_multicast_LDADD = \
-  $(top_builddir)/src/util/libgnunetutil.la \
-  $(top_builddir)/src/cadet/libgnunetcadet.la \
-  $(top_builddir)/src/statistics/libgnunetstatistics.la \
-  $(GN_LIBINTL)
-
-check_PROGRAMS = \
-  test_multicast \
-  test_multicast_multipeer_star \
-  test_multicast_multipeer_line
-
-if ENABLE_TEST_RUN
-AM_TESTS_ENVIRONMENT=export GNUNET_PREFIX=$${GNUNET_PREFIX:-@libdir@}; export PATH=$${GNUNET_PREFIX:-@prefix@}/bin:$$PATH; unset XDG_DATA_HOME; unset XDG_CONFIG_HOME;
-TESTS = $(check_PROGRAMS)
-endif
-
-test_multicast_SOURCES = \
- test_multicast.c
-test_multicast_LDADD = \
-  libgnunetmulticast.la \
-  $(top_builddir)/src/testing/libgnunettesting.la \
-  $(top_builddir)/src/util/libgnunetutil.la
-test_multicast_multipeer_star_SOURCES = \
-  test_multicast_multipeer.c
-test_multicast_multipeer_star_LDADD = \
-  libgnunetmulticast.la \
-  $(top_builddir)/src/testbed/libgnunettestbed.la \
-  $(top_builddir)/src/util/libgnunetutil.la
-test_multicast_multipeer_line_SOURCES = \
-  test_multicast_multipeer.c
-test_multicast_multipeer_line_LDADD = \
-  libgnunetmulticast.la \
-  $(top_builddir)/src/testbed/libgnunettestbed.la \
-  $(top_builddir)/src/util/libgnunetutil.la
diff --git a/src/multicast/gnunet-multicast.c b/src/multicast/gnunet-multicast.c
deleted file mode 100644 (file)
index 63e1d52..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
-     This file is part of GNUnet.
-     Copyright (C) 2013 GNUnet e.V.
-
-     GNUnet is free software: you can redistribute it and/or modify it
-     under the terms of the GNU Affero General Public License as published
-     by the Free Software Foundation, either version 3 of the License,
-     or (at your option) any later version.
-
-     GNUnet is distributed in the hope that it will be useful, but
-     WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     Affero General Public License for more details.
-    
-     You should have received a copy of the GNU Affero General Public License
-     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
-*/
-
-/**
- * @file multicast/gnunet-multicast.c
- * @brief multicast for writing a tool
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "gnunet_util_lib.h"
-/* #include "gnunet_multicast_service.h" */
-
-/**
- * Final status code.
- */
-static int ret;
-
-/**
- * Main function that will be run by the scheduler.
- *
- * @param cls closure
- * @param args remaining command-line arguments
- * @param cfgfile name of the configuration file used (for saving, can be NULL!)
- * @param cfg configuration
- */
-static void
-run (void *cls, char *const *args, const char *cfgfile,
-     const struct GNUNET_CONFIGURATION_Handle *cfg)
-{
-  /* main code here */
-  puts( gettext_noop ("This command doesn't do anything yet.") );
-  ret = -1;
-}
-
-
-/**
- * The main function.
- *
- * @param argc number of arguments from the command line
- * @param argv command line arguments
- * @return 0 ok, 1 on error
- */
-int
-main (int argc, char *const *argv)
-{
-  static const struct GNUNET_GETOPT_CommandLineOption options[] = {
-    /* FIMXE: add options here */
-    GNUNET_GETOPT_OPTION_END
-  };
-  if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
-    return 2;
-
-  ret = (GNUNET_OK ==
-        GNUNET_PROGRAM_run (argc, argv, "gnunet-multicast",
-                            gettext_noop ("This command doesn't do anything yet."),
-                            options, &run,
-                            NULL)) ? ret : 1;
-  GNUNET_free ((void*) argv);
-  return ret;
-}
-
-/* end of gnunet-multicast.c */
diff --git a/src/multicast/gnunet-service-multicast.c b/src/multicast/gnunet-service-multicast.c
deleted file mode 100644 (file)
index 18c3661..0000000
+++ /dev/null
@@ -1,2234 +0,0 @@
-/*
-     This file is part of GNUnet.
-     Copyright (C) 2009 GNUnet e.V.
-
-     GNUnet is free software: you can redistribute it and/or modify it
-     under the terms of the GNU Affero General Public License as published
-     by the Free Software Foundation, either version 3 of the License,
-     or (at your option) any later version.
-
-     GNUnet is distributed in the hope that it will be useful, but
-     WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     Affero General Public License for more details.
-    
-     You should have received a copy of the GNU Affero General Public License
-     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
-*/
-
-/**
- * @file multicast/gnunet-service-multicast.c
- * @brief program that does multicast
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_signatures.h"
-#include "gnunet_applications.h"
-#include "gnunet_statistics_service.h"
-#include "gnunet_cadet_service.h"
-#include "gnunet_multicast_service.h"
-#include "multicast.h"
-
-/**
- * Handle to our current configuration.
- */
-static const struct GNUNET_CONFIGURATION_Handle *cfg;
-
-/**
- * Service handle.
- */
-static struct GNUNET_SERVICE_Handle *service;
-
-/**
- * CADET handle.
- */
-static struct GNUNET_CADET_Handle *cadet;
-
-/**
- * Identity of this peer.
- */
-static struct GNUNET_PeerIdentity this_peer;
-
-/**
- * Handle to the statistics service.
- */
-static struct GNUNET_STATISTICS_Handle *stats;
-
-/**
- * All connected origin clients.
- * Group's pub_key_hash -> struct Origin * (uniq)
- */
-static struct GNUNET_CONTAINER_MultiHashMap *origins;
-
-/**
- * All connected member clients.
- * Group's pub_key_hash -> struct Member * (multi)
- */
-static struct GNUNET_CONTAINER_MultiHashMap *members;
-
-/**
- * Connected member clients per group.
- * Group's pub_key_hash -> Member's pub_key_hash (uniq) -> struct Member * (uniq)
- */
-static struct GNUNET_CONTAINER_MultiHashMap *group_members;
-
-/**
- * Incoming CADET channels with connected children in the tree.
- * Group's pub_key_hash -> struct Channel * (multi)
- */
-static struct GNUNET_CONTAINER_MultiHashMap *channels_in;
-
-/**
- * Outgoing CADET channels connecting to parents in the tree.
- * Group's pub_key_hash -> struct Channel * (multi)
- */
-static struct GNUNET_CONTAINER_MultiHashMap *channels_out;
-
-/**
- * Incoming replay requests from CADET.
- * Group's pub_key_hash ->
- *   H(fragment_id, message_id, fragment_offset, flags) -> struct Channel *
- */
-static struct GNUNET_CONTAINER_MultiHashMap *replay_req_cadet;
-
-/**
- * Incoming replay requests from clients.
- * Group's pub_key_hash ->
- *   H(fragment_id, message_id, fragment_offset, flags) -> struct GNUNET_SERVICE_Client *
- */
-static struct GNUNET_CONTAINER_MultiHashMap *replay_req_client;
-
-
-/**
- * Join status of a remote peer.
- */
-enum JoinStatus
-{
-  JOIN_REFUSED  = -1,
-  JOIN_NOT_ASKED = 0,
-  JOIN_WAITING   = 1,
-  JOIN_ADMITTED  = 2,
-};
-
-enum ChannelDirection
-{
-  DIR_INCOMING = 0,
-  DIR_OUTGOING = 1,
-};
-
-
-/**
- * Context for a CADET channel.
- */
-struct Channel
-{
-  /**
-   * Group the channel belongs to.
-   *
-   * Only set for outgoing channels.
-   */
-  struct Group *group;
-
-  /**
-   * CADET channel.
-   */
-  struct GNUNET_CADET_Channel *channel;
-
-  // FIXME: not used
-  /**
-   * CADET transmission handle.
-   */
-  struct GNUNET_CADET_TransmitHandle *tmit_handle;
-
-  /**
-   * Public key of the target group.
-   */
-  struct GNUNET_CRYPTO_EddsaPublicKey group_pub_key;
-
-  /**
-   * Hash of @a group_pub_key.
-   */
-  struct GNUNET_HashCode group_pub_hash;
-
-  /**
-   * Public key of the joining member.
-   */
-  struct GNUNET_CRYPTO_EcdsaPublicKey member_pub_key;
-
-  /**
-   * Remote peer identity.
-   */
-  struct GNUNET_PeerIdentity peer;
-
-  /**
-   * Current window size, set by cadet_notify_window_change()
-   */
-  int32_t window_size;
-
-  /**
-   * Is the connection established?
-   */
-  int8_t is_connected;
-
-  /**
-   * Is the remote peer admitted to the group?
-   * @see enum JoinStatus
-   */
-  int8_t join_status;
-
-  /**
-   * Number of messages waiting to be sent to CADET.
-   */
-  uint8_t msgs_pending;
-
-  /**
-   * Channel direction.
-   * @see enum ChannelDirection
-   */
-  uint8_t direction;
-};
-
-
-/**
- * List of connected clients.
- */
-struct ClientList
-{
-  struct ClientList *prev;
-  struct ClientList *next;
-  struct GNUNET_SERVICE_Client *client;
-};
-
-
-/**
- * Client context for an origin or member.
- */
-struct Group
-{
-  struct ClientList *clients_head;
-  struct ClientList *clients_tail;
-
-  /**
-   * Public key of the group.
-   */
-  struct GNUNET_CRYPTO_EddsaPublicKey pub_key;
-
-  /**
-   * Hash of @a pub_key.
-   */
-  struct GNUNET_HashCode pub_key_hash;
-
-  /**
-   * CADET port hash.
-   */
-  struct GNUNET_HashCode cadet_port_hash;
-
-  /**
-   * Is the client disconnected? #GNUNET_YES or #GNUNET_NO
-   */
-  uint8_t is_disconnected;
-
-  /**
-   * Is this an origin (#GNUNET_YES), or member (#GNUNET_NO)?
-   */
-  uint8_t is_origin;
-
-  union {
-    struct Origin *origin;
-    struct Member *member;
-  };
-};
-
-
-/**
-* Client context for a group's origin.
- */
-struct Origin
-{
-  struct Group group;
-
-  /**
-   * Private key of the group.
-   */
-  struct GNUNET_CRYPTO_EddsaPrivateKey priv_key;
-
-  /**
-   * CADET port.
-   */
-  struct GNUNET_CADET_Port *cadet_port;
-
-  /**
-   * Last message fragment ID sent to the group.
-   */
-  uint64_t max_fragment_id;
-};
-
-
-/**
- * Client context for a group member.
- */
-struct Member
-{
-  struct Group group;
-
-  /**
-   * Private key of the member.
-   */
-  struct GNUNET_CRYPTO_EcdsaPrivateKey priv_key;
-
-  /**
-   * Public key of the member.
-   */
-  struct GNUNET_CRYPTO_EcdsaPublicKey pub_key;
-
-  /**
-   * Hash of @a pub_key.
-   */
-  struct GNUNET_HashCode pub_key_hash;
-
-  /**
-   * Join request sent to the origin / members.
-   */
-  struct MulticastJoinRequestMessage *join_req;
-
-  /**
-   * Join decision sent in reply to our request.
-   *
-   * Only a positive decision is stored here, in case of a negative decision the
-   * client is disconnected.
-   */
-  struct MulticastJoinDecisionMessageHeader *join_dcsn;
-
-  /**
-   * CADET channel to the origin.
-   */
-  struct Channel *origin_channel;
-
-  /**
-   * Peer identity of origin.
-   */
-  struct GNUNET_PeerIdentity origin;
-
-  /**
-   * Peer identity of relays (other members to connect).
-   */
-  struct GNUNET_PeerIdentity *relays;
-
-  /**
-   * Last request fragment ID sent to the origin.
-   */
-  uint64_t max_fragment_id;
-
-  /**
-   * Number of @a relays.
-   */
-  uint32_t relay_count;
-};
-
-
-/**
- * Client context.
- */
-struct Client {
-  struct GNUNET_SERVICE_Client *client;
-  struct Group *group;
-};
-
-
-struct ReplayRequestKey
-{
-  uint64_t fragment_id;
-  uint64_t message_id;
-  uint64_t fragment_offset;
-  uint64_t flags;
-};
-
-
-static struct Channel *
-cadet_channel_create (struct Group *grp, struct GNUNET_PeerIdentity *peer);
-
-static void
-cadet_channel_destroy (struct Channel *chn);
-
-static void
-client_send_join_decision (struct Member *mem,
-                           const struct MulticastJoinDecisionMessageHeader *hdcsn);
-
-
-/**
- * Task run during shutdown.
- *
- * @param cls unused
- */
-static void
-shutdown_task (void *cls)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "shutting down\n");
-  if (NULL != cadet)
-  {
-    GNUNET_CADET_disconnect (cadet);
-    cadet = NULL;
-  }
-  if (NULL != stats)
-  {
-    GNUNET_STATISTICS_destroy (stats, GNUNET_YES);
-    stats = NULL;
-  }
-  /* FIXME: do more clean up here */
-}
-
-
-/**
- * Clean up origin data structures after a client disconnected.
- */
-static void
-cleanup_origin (struct Origin *orig)
-{
-  struct Group *grp = &orig->group;
-  GNUNET_CONTAINER_multihashmap_remove (origins, &grp->pub_key_hash, orig);
-  if (NULL != orig->cadet_port)
-  {
-    GNUNET_CADET_close_port (orig->cadet_port);
-    orig->cadet_port = NULL;
-  }
-  GNUNET_free (orig);
-}
-
-
-/**
- * Clean up member data structures after a client disconnected.
- */
-static void
-cleanup_member (struct Member *mem)
-{
-  struct Group *grp = &mem->group;
-  struct GNUNET_CONTAINER_MultiHashMap *
-    grp_mem = GNUNET_CONTAINER_multihashmap_get (group_members,
-                                                 &grp->pub_key_hash);
-  GNUNET_assert (NULL != grp_mem);
-  GNUNET_CONTAINER_multihashmap_remove (grp_mem, &mem->pub_key_hash, mem);
-
-  if (0 == GNUNET_CONTAINER_multihashmap_size (grp_mem))
-  {
-    GNUNET_CONTAINER_multihashmap_remove (group_members, &grp->pub_key_hash,
-                                          grp_mem);
-    GNUNET_CONTAINER_multihashmap_destroy (grp_mem);
-  }
-  if (NULL != mem->join_dcsn)
-  {
-    GNUNET_free (mem->join_dcsn);
-    mem->join_dcsn = NULL;
-  }
-  if (NULL != mem->origin_channel)
-  {
-    GNUNET_CADET_channel_destroy (mem->origin_channel->channel);
-    mem->origin_channel = NULL;
-  }
-  GNUNET_CONTAINER_multihashmap_remove (members, &grp->pub_key_hash, mem);
-  GNUNET_free (mem);
-}
-
-
-/**
- * Clean up group data structures after a client disconnected.
- */
-static void
-cleanup_group (struct Group *grp)
-{
-  (GNUNET_YES == grp->is_origin)
-    ? cleanup_origin (grp->origin)
-    : cleanup_member (grp->member);
-}
-
-
-void
-replay_key_hash (uint64_t fragment_id, uint64_t message_id,
-                 uint64_t fragment_offset, uint64_t flags,
-                 struct GNUNET_HashCode *key_hash)
-{
-  struct ReplayRequestKey key = {
-    .fragment_id = fragment_id,
-    .message_id = message_id,
-    .fragment_offset = fragment_offset,
-    .flags = flags,
-  };
-  GNUNET_CRYPTO_hash (&key, sizeof (key), key_hash);
-}
-
-
-/**
- * Remove channel from replay request hashmap.
- *
- * @param chn
- *        Channel to remove.
- *
- * @return #GNUNET_YES if there are more entries to process,
- *         #GNUNET_NO when reached end of hashmap.
- */
-static int
-replay_req_remove_cadet (struct Channel *chn)
-{
-  if (NULL == chn || NULL == chn->group)
-    return GNUNET_SYSERR;
-
-  struct GNUNET_CONTAINER_MultiHashMap *
-    grp_replay_req = GNUNET_CONTAINER_multihashmap_get (replay_req_cadet,
-                                                        &chn->group->pub_key_hash);
-  if (NULL == grp_replay_req)
-    return GNUNET_NO;
-
-  struct GNUNET_CONTAINER_MultiHashMapIterator *
-    it = GNUNET_CONTAINER_multihashmap_iterator_create (grp_replay_req);
-  struct GNUNET_HashCode key;
-  const struct Channel *c;
-  while (GNUNET_YES
-         == GNUNET_CONTAINER_multihashmap_iterator_next (it, &key,
-                                                         (const void **) &c))
-  {
-    if (c == chn)
-    {
-      GNUNET_CONTAINER_multihashmap_remove (grp_replay_req, &key, chn);
-      GNUNET_CONTAINER_multihashmap_iterator_destroy (it);
-      return GNUNET_YES;
-    }
-  }
-  GNUNET_CONTAINER_multihashmap_iterator_destroy (it);
-  return GNUNET_NO;
-}
-
-
-/**
- * Remove client from replay request hashmap.
- *
- * @param client
- *        Client to remove.
- *
- * @return #GNUNET_YES if there are more entries to process,
- *         #GNUNET_NO when reached end of hashmap.
- */
-static int
-replay_req_remove_client (struct Group *grp, struct GNUNET_SERVICE_Client *client)
-{
-  struct GNUNET_CONTAINER_MultiHashMap *
-    grp_replay_req = GNUNET_CONTAINER_multihashmap_get (replay_req_client,
-                                                        &grp->pub_key_hash);
-  if (NULL == grp_replay_req)
-    return GNUNET_NO;
-
-  struct GNUNET_CONTAINER_MultiHashMapIterator *
-    it = GNUNET_CONTAINER_multihashmap_iterator_create (grp_replay_req);
-  struct GNUNET_HashCode key;
-  const struct GNUNET_SERVICE_Client *c;
-  while (GNUNET_YES
-         == GNUNET_CONTAINER_multihashmap_iterator_next (it, &key,
-                                                         (const void **) &c))
-  {
-    if (c == client)
-    {
-      GNUNET_CONTAINER_multihashmap_remove (grp_replay_req, &key, client);
-      GNUNET_CONTAINER_multihashmap_iterator_destroy (it);
-      return GNUNET_YES;
-    }
-  }
-  GNUNET_CONTAINER_multihashmap_iterator_destroy (it);
-  return GNUNET_NO;
-}
-
-
-/**
- * Send message to a client.
- */
-static void
-client_send (struct GNUNET_SERVICE_Client *client,
-             const struct GNUNET_MessageHeader *msg)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "%p Sending message to client.\n", client);
-
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg_copy (msg);
-
-  GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client),
-                  env);
-}
-
-
-/**
- * Send message to all clients connected to the group.
- */
-static void
-client_send_group_keep_envelope (const struct Group *grp,
-                                 struct GNUNET_MQ_Envelope *env)
-{
-  struct ClientList *cli = grp->clients_head;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "%p Sending message to all clients of the group.\n",
-              grp);
-  while (NULL != cli)
-  {
-    GNUNET_MQ_send_copy (GNUNET_SERVICE_client_get_mq (cli->client),
-                         env);
-    cli = cli->next;
-  }
-}
-
-
-/**
- * Send message to all clients connected to the group and
- * takes care of freeing @env.
- */
-static void
-client_send_group (const struct Group *grp,
-                   struct GNUNET_MQ_Envelope *env)
-{
-  client_send_group_keep_envelope (grp, env);
-  GNUNET_MQ_discard (env);
-}
-
-
-/**
- * Iterator callback for sending a message to origin clients.
- */
-static int
-client_send_origin_cb (void *cls, const struct GNUNET_HashCode *pub_key_hash,
-                       void *origin)
-{
-  struct GNUNET_MQ_Envelope *env = cls;
-  struct Member *orig = origin;
-
-  client_send_group_keep_envelope (&orig->group, env);
-  return GNUNET_YES;
-}
-
-
-/**
- * Iterator callback for sending a message to member clients.
- */
-static int
-client_send_member_cb (void *cls, const struct GNUNET_HashCode *pub_key_hash,
-                       void *member)
-{
-  struct GNUNET_MQ_Envelope *env = cls;
-  struct Member *mem = member;
-
-  if (NULL != mem->join_dcsn)
-  { /* Only send message to admitted members */
-    client_send_group_keep_envelope (&mem->group, env);
-  }
-  return GNUNET_YES;
-}
-
-
-/**
- * Send message to all origin and member clients connected to the group.
- *
- * @param pub_key_hash
- *        H(key_pub) of the group.
- * @param msg
- *        Message to send.
- */
-static int
-client_send_all (struct GNUNET_HashCode *pub_key_hash,
-                 struct GNUNET_MQ_Envelope *env)
-{
-  int n = 0;
-  n += GNUNET_CONTAINER_multihashmap_get_multiple (origins, pub_key_hash,
-                                                   client_send_origin_cb,
-                                                   (void *) env);
-  n += GNUNET_CONTAINER_multihashmap_get_multiple (members, pub_key_hash,
-                                                   client_send_member_cb,
-                                                   (void *) env);
-  GNUNET_MQ_discard (env);
-  return n;
-}
-
-
-/**
- * Send message to a random origin client or a random member client.
- *
- * @param grp  The group to send @a msg to.
- * @param msg  Message to send.
- */
-static int
-client_send_random (struct GNUNET_HashCode *pub_key_hash,
-                    struct GNUNET_MQ_Envelope *env)
-{
-  int n = 0;
-  n = GNUNET_CONTAINER_multihashmap_get_random (origins, client_send_origin_cb,
-                                                 (void *) env);
-  if (n <= 0)
-    n = GNUNET_CONTAINER_multihashmap_get_random (members, client_send_member_cb,
-                                                   (void *) env);
-  GNUNET_MQ_discard (env);
-  return n;
-}
-
-
-/**
- * Send message to all origin clients connected to the group.
- *
- * @param pub_key_hash
- *        H(key_pub) of the group.
- * @param msg
- *        Message to send.
- */
-static int
-client_send_origin (struct GNUNET_HashCode *pub_key_hash,
-                    struct GNUNET_MQ_Envelope *env)
-{
-  int n = 0;
-  n += GNUNET_CONTAINER_multihashmap_get_multiple (origins, pub_key_hash,
-                                                   client_send_origin_cb,
-                                                   (void *) env);
-  return n;
-}
-
-
-/**
- * Send fragment acknowledgement to all clients of the channel.
- *
- * @param pub_key_hash
- *        H(key_pub) of the group.
- */
-static void
-client_send_ack (struct GNUNET_HashCode *pub_key_hash)
-{
-  struct GNUNET_MQ_Envelope *env;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Sending message ACK to client.\n");
-  env = GNUNET_MQ_msg_header (GNUNET_MESSAGE_TYPE_MULTICAST_FRAGMENT_ACK);
-  client_send_all (pub_key_hash, env);
-}
-
-
-struct CadetTransmitClosure
-{
-  struct Channel *chn;
-  const struct GNUNET_MessageHeader *msg;
-};
-
-
-/**
- * Send a message to a CADET channel.
- *
- * @param chn  Channel.
- * @param msg  Message.
- */
-static void
-cadet_send_channel (struct Channel *chn, const struct GNUNET_MessageHeader *msg)
-{
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg_copy (msg);
-
-  GNUNET_MQ_send (GNUNET_CADET_get_mq (chn->channel), env);
-
-  if (0 < chn->window_size)
-  {
-    client_send_ack (&chn->group_pub_hash);
-  }
-  else
-  {
-    chn->msgs_pending++;
-    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-                "%p Queuing message. Pending messages: %u\n",
-                chn, chn->msgs_pending);
-  }
-}
-
-
-/**
- * Create CADET channel and send a join request.
- */
-static void
-cadet_send_join_request (struct Member *mem)
-{
-  mem->origin_channel = cadet_channel_create (&mem->group, &mem->origin);
-  cadet_send_channel (mem->origin_channel, &mem->join_req->header);
-
-  uint32_t i;
-  for (i = 0; i < mem->relay_count; i++)
-  {
-    struct Channel *
-      chn = cadet_channel_create (&mem->group, &mem->relays[i]);
-    cadet_send_channel (chn, &mem->join_req->header);
-  }
-}
-
-
-static int
-cadet_send_join_decision_cb (void *cls,
-                             const struct GNUNET_HashCode *group_pub_hash,
-                             void *channel)
-{
-  const struct MulticastJoinDecisionMessageHeader *hdcsn = cls;
-  struct Channel *chn = channel;
-
-  const struct MulticastJoinDecisionMessage *dcsn =
-    (struct MulticastJoinDecisionMessage *) &hdcsn[1];
-
-  if (0 == memcmp (&hdcsn->member_pub_key, &chn->member_pub_key, sizeof (chn->member_pub_key))
-      && 0 == memcmp (&hdcsn->peer, &chn->peer, sizeof (chn->peer)))
-  {
-    if (GNUNET_YES == ntohl (dcsn->is_admitted))
-    {
-      chn->join_status = JOIN_ADMITTED;
-    }
-    else
-    {
-      chn->join_status = JOIN_REFUSED;
-    }
-    cadet_send_channel (chn, &hdcsn->header);
-    return GNUNET_YES;
-  }
-
-  // return GNUNET_YES to continue the multihashmap_get iteration
-  return GNUNET_YES;
-}
-
-
-/**
- * Send join decision to a remote peer.
- */
-static void
-cadet_send_join_decision (struct Group *grp,
-                          const struct MulticastJoinDecisionMessageHeader *hdcsn)
-{
-  GNUNET_CONTAINER_multihashmap_get_multiple (channels_in, &grp->pub_key_hash,
-                                              &cadet_send_join_decision_cb,
-                                              (void *) hdcsn);
-}
-
-
-/**
- * Iterator callback for sending a message to origin clients.
- */
-static int
-cadet_send_cb (void *cls, const struct GNUNET_HashCode *pub_key_hash,
-               void *channel)
-{
-  const struct GNUNET_MessageHeader *msg = cls;
-  struct Channel *chn = channel;
-  if (JOIN_ADMITTED == chn->join_status)
-    cadet_send_channel (chn, msg);
-  return GNUNET_YES;
-}
-
-
-/**
- * Send message to all connected children.
- */
-static int
-cadet_send_children (struct GNUNET_HashCode *pub_key_hash,
-                     const struct GNUNET_MessageHeader *msg)
-{
-  int n = 0;
-  if (channels_in != NULL)
-    n += GNUNET_CONTAINER_multihashmap_get_multiple (channels_in, pub_key_hash,
-                                                     cadet_send_cb, (void *) msg);
-  return n;
-}
-
-
-#if 0      // unused as yet
-/**
- * Send message to all connected parents.
- */
-static int
-cadet_send_parents (struct GNUNET_HashCode *pub_key_hash,
-                    const struct GNUNET_MessageHeader *msg)
-{
-  int n = 0;
-  if (channels_in != NULL)
-    n += GNUNET_CONTAINER_multihashmap_get_multiple (channels_out, pub_key_hash,
-                                                     cadet_send_cb, (void *) msg);
-  return n;
-}
-#endif
-
-
-/**
- * CADET channel connect handler.
- *
- * @see GNUNET_CADET_ConnectEventHandler()
- */
-static void *
-cadet_notify_connect (void *cls,
-                      struct GNUNET_CADET_Channel *channel,
-                      const struct GNUNET_PeerIdentity *source)
-{
-  struct Channel *chn = GNUNET_malloc (sizeof (struct Channel));
-  chn->group = cls;
-  chn->channel = channel;
-  chn->direction = DIR_INCOMING;
-  chn->join_status = JOIN_NOT_ASKED;
-      
-  GNUNET_CONTAINER_multihashmap_put (channels_in, &chn->group->pub_key_hash, chn,
-                                     GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
-  return chn;
-}
-
-
-/**
- * CADET window size change handler.
- *
- * @see GNUNET_CADET_WindowSizeEventHandler()
- */
-static void
-cadet_notify_window_change (void *cls,
-                            const struct GNUNET_CADET_Channel *channel,
-                            int window_size)
-{
-  struct Channel *chn = cls;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "%p Window size changed to %d.  Pending messages: %u\n",
-              chn, window_size, chn->msgs_pending);
-
-  chn->is_connected = GNUNET_YES;
-  chn->window_size = (int32_t) window_size;
-
-  for (int i = 0; i < window_size; i++)
-  {
-    if (0 < chn->msgs_pending)
-    {
-      client_send_ack (&chn->group_pub_hash);
-      chn->msgs_pending--;
-    }
-    else
-    {
-      break;
-    }
-  }
-}
-
-
-/**
- * CADET channel disconnect handler.
- *
- * @see GNUNET_CADET_DisconnectEventHandler()
- */
-static void
-cadet_notify_disconnect (void *cls,
-                         const struct GNUNET_CADET_Channel *channel)
-{
-  if (NULL == cls)
-    return;
-
-  struct Channel *chn = cls;
-  if (NULL != chn->group)
-  {
-    if (GNUNET_NO == chn->group->is_origin)
-    {
-      struct Member *mem = (struct Member *) chn->group;
-      if (chn == mem->origin_channel)
-        mem->origin_channel = NULL;
-    }
-  }
-
-  int ret;
-  do
-  {
-    ret = replay_req_remove_cadet (chn);
-  }
-  while (GNUNET_YES == ret);
-
-  GNUNET_free (chn);
-}
-
-
-static int
-check_cadet_join_request (void *cls,
-                          const struct MulticastJoinRequestMessage *req)
-{
-  struct Channel *chn = cls;
-
-  if (NULL == chn
-      || JOIN_NOT_ASKED != chn->join_status)
-  {
-    return GNUNET_SYSERR;
-  }
-
-  uint16_t size = ntohs (req->header.size);
-  if (size < sizeof (*req))
-  {
-    GNUNET_break_op (0);
-    return GNUNET_SYSERR;
-  }
-  if (ntohl (req->purpose.size) != (size
-                                    - sizeof (req->header)
-                                    - sizeof (req->reserved)
-                                    - sizeof (req->signature)))
-  {
-    GNUNET_break_op (0);
-    return GNUNET_SYSERR;
-  }
-  if (GNUNET_OK !=
-      GNUNET_CRYPTO_ecdsa_verify (GNUNET_SIGNATURE_PURPOSE_MULTICAST_REQUEST,
-                                  &req->purpose, &req->signature,
-                                  &req->member_pub_key))
-  {
-    GNUNET_break_op (0);
-    return GNUNET_SYSERR;
-  }
-
-  return GNUNET_OK;
-}
-
-
-/**
- * Incoming join request message from CADET.
- */
-static void
-handle_cadet_join_request (void *cls,
-                           const struct MulticastJoinRequestMessage *req)
-{
-  struct Channel *chn = cls;
-  GNUNET_CADET_receive_done (chn->channel);
-
-  struct GNUNET_HashCode group_pub_hash;
-  GNUNET_CRYPTO_hash (&req->group_pub_key, sizeof (req->group_pub_key), &group_pub_hash);
-  chn->group_pub_key = req->group_pub_key;
-  chn->group_pub_hash = group_pub_hash;
-  chn->member_pub_key = req->member_pub_key;
-  chn->peer = req->peer;
-  chn->join_status = JOIN_WAITING;
-
-  client_send_all (&group_pub_hash,
-                   GNUNET_MQ_msg_copy (&req->header));
-}
-
-
-static int
-check_cadet_join_decision (void *cls,
-                           const struct MulticastJoinDecisionMessageHeader *hdcsn)
-{
-  uint16_t size = ntohs (hdcsn->header.size);
-  if (size < sizeof (struct MulticastJoinDecisionMessageHeader) +
-             sizeof (struct MulticastJoinDecisionMessage))
-  {
-    GNUNET_break_op (0);
-    return GNUNET_SYSERR;
-  }
-
-  struct Channel *chn = cls;
-  if (NULL == chn)
-  {
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-  if (NULL == chn->group || GNUNET_NO != chn->group->is_origin)
-  {
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-  switch (chn->join_status)
-  {
-  case JOIN_REFUSED:
-    return GNUNET_SYSERR;
-
-  case JOIN_ADMITTED:
-    return GNUNET_OK;
-
-  case JOIN_NOT_ASKED:
-  case JOIN_WAITING:
-    break;
-  }
-
-  return GNUNET_OK;
-}
-
-
-/**
- * Incoming join decision message from CADET.
- */
-static void
-handle_cadet_join_decision (void *cls,
-                            const struct MulticastJoinDecisionMessageHeader *hdcsn)
-{
-  const struct MulticastJoinDecisionMessage *
-    dcsn = (const struct MulticastJoinDecisionMessage *) &hdcsn[1];
-
-  struct Channel *chn = cls;
-  GNUNET_CADET_receive_done (chn->channel);
-
-  // FIXME: do we need to copy chn->peer or compare it with hdcsn->peer?
-  struct Member *mem = (struct Member *) chn->group;
-  client_send_join_decision (mem, hdcsn);
-  if (GNUNET_YES == ntohl (dcsn->is_admitted))
-  {
-    chn->join_status = JOIN_ADMITTED;
-  }
-  else
-  {
-    chn->join_status = JOIN_REFUSED;
-    cadet_channel_destroy (chn);
-  }
-}
-
-
-static int
-check_cadet_message (void *cls,
-                     const struct GNUNET_MULTICAST_MessageHeader *msg)
-{
-  uint16_t size = ntohs (msg->header.size);
-  if (size < sizeof (*msg))
-  {
-    GNUNET_break_op (0);
-    return GNUNET_SYSERR;
-  }
-
-  struct Channel *chn = cls;
-  if (NULL == chn)
-  {
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-  if (ntohl (msg->purpose.size) != (size
-                                    - sizeof (msg->header)
-                                    - sizeof (msg->hop_counter)
-                                    - sizeof (msg->signature)))
-  {
-    GNUNET_break_op (0);
-    return GNUNET_SYSERR;
-  }
-  if (GNUNET_OK !=
-      GNUNET_CRYPTO_eddsa_verify (GNUNET_SIGNATURE_PURPOSE_MULTICAST_MESSAGE,
-                                  &msg->purpose, &msg->signature,
-                                  &chn->group_pub_key))
-  {
-    GNUNET_break_op (0);
-    return GNUNET_SYSERR;
-  }
-
-  return GNUNET_OK;
-}
-
-
-/**
- * Incoming multicast message from CADET.
- */
-static void
-handle_cadet_message (void *cls,
-                      const struct GNUNET_MULTICAST_MessageHeader *msg)
-{
-  struct Channel *chn = cls;
-  GNUNET_CADET_receive_done (chn->channel);
-  client_send_all (&chn->group_pub_hash,
-                   GNUNET_MQ_msg_copy (&msg->header));
-}
-
-
-static int
-check_cadet_request (void *cls,
-                     const struct GNUNET_MULTICAST_RequestHeader *req)
-{
-  uint16_t size = ntohs (req->header.size);
-  if (size < sizeof (*req))
-  {
-    GNUNET_break_op (0);
-    return GNUNET_SYSERR;
-  }
-
-  struct Channel *chn = cls;
-  if (NULL == chn)
-  {
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-  if (ntohl (req->purpose.size) != (size
-                                    - sizeof (req->header)
-                                    - sizeof (req->member_pub_key)
-                                    - sizeof (req->signature)))
-  {
-    GNUNET_break_op (0);
-    return GNUNET_SYSERR;
-  }
-  if (GNUNET_OK !=
-      GNUNET_CRYPTO_ecdsa_verify (GNUNET_SIGNATURE_PURPOSE_MULTICAST_REQUEST,
-                                  &req->purpose, &req->signature,
-                                  &req->member_pub_key))
-  {
-    GNUNET_break_op (0);
-    return GNUNET_SYSERR;
-  }
-
-  return GNUNET_OK;
-}
-
-
-/**
- * Incoming multicast request message from CADET.
- */
-static void
-handle_cadet_request (void *cls,
-                      const struct GNUNET_MULTICAST_RequestHeader *req)
-{
-  struct Channel *chn = cls;
-  GNUNET_CADET_receive_done (chn->channel);
-  client_send_origin (&chn->group_pub_hash,
-                      GNUNET_MQ_msg_copy (&req->header));
-}
-
-
-// FIXME: do checks in handle_cadet_replay_request
-//static int
-//check_cadet_replay_request (void *cls,
-//                            const struct MulticastReplayRequestMessage *req)
-//{
-//  uint16_t size = ntohs (req->header.size);
-//  if (size < sizeof (*req))
-//  {
-//    GNUNET_break_op (0);
-//    return GNUNET_SYSERR;
-//  }
-//
-//  struct Channel *chn = cls;
-//  if (NULL == chn)
-//  {
-//    GNUNET_break_op (0);
-//    return GNUNET_SYSERR;
-//  }
-//
-//  return GNUNET_OK;
-//}
-
-
-/**
- * Incoming multicast replay request from CADET.
- */
-static void
-handle_cadet_replay_request (void *cls,
-                             const struct MulticastReplayRequestMessage *req)
-{
-  struct Channel *chn = cls;
-
-  GNUNET_CADET_receive_done (chn->channel);
-
-  struct MulticastReplayRequestMessage rep = *req;
-  GNUNET_memcpy (&rep.member_pub_key, &chn->member_pub_key, sizeof (chn->member_pub_key));
-
-  struct GNUNET_CONTAINER_MultiHashMap *
-    grp_replay_req = GNUNET_CONTAINER_multihashmap_get (replay_req_cadet,
-                                                        &chn->group->pub_key_hash);
-  if (NULL == grp_replay_req)
-  {
-    grp_replay_req = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_NO);
-    GNUNET_CONTAINER_multihashmap_put (replay_req_cadet,
-                                       &chn->group->pub_key_hash, grp_replay_req,
-                                       GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
-  }
-  struct GNUNET_HashCode key_hash;
-  replay_key_hash (rep.fragment_id,
-                   rep.message_id,
-                   rep.fragment_offset,
-                   rep.flags,
-                   &key_hash);
-  GNUNET_CONTAINER_multihashmap_put (grp_replay_req, &key_hash, chn,
-                                     GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
-
-  client_send_random (&chn->group_pub_hash,
-                      GNUNET_MQ_msg_copy (&rep.header));
-}
-
-
-static int
-check_cadet_replay_response (void *cls,
-                             const struct MulticastReplayResponseMessage *res)
-{
-  struct Channel *chn = cls;
-  if (NULL == chn)
-  {
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-  return GNUNET_OK;
-}
-
-
-/**
- * Incoming multicast replay response from CADET.
- */
-static void
-handle_cadet_replay_response (void *cls,
-                              const struct MulticastReplayResponseMessage *res)
-{
-  struct Channel *chn = cls;
-  GNUNET_CADET_receive_done (chn->channel);
-
-  /* @todo FIXME: got replay error response, send request to other members */
-}
-
-
-static void
-group_set_cadet_port_hash (struct Group *grp)
-{
-  struct CadetPort {
-    struct GNUNET_CRYPTO_EddsaPublicKey pub_key;
-    uint32_t app_type;
-  } port = {
-    grp->pub_key,
-    GNUNET_APPLICATION_TYPE_MULTICAST,
-  };
-  GNUNET_CRYPTO_hash (&port, sizeof (port), &grp->cadet_port_hash);
-}
-
-
-
-/**
- * Create new outgoing CADET channel.
- *
- * @param peer
- *        Peer to connect to.
- * @param group_pub_key
- *        Public key of group the channel belongs to.
- * @param group_pub_hash
- *        Hash of @a group_pub_key.
- *
- * @return Channel.
- */
-static struct Channel *
-cadet_channel_create (struct Group *grp, struct GNUNET_PeerIdentity *peer)
-{
-  struct Channel *chn = GNUNET_malloc (sizeof (*chn));
-  chn->group = grp;
-  chn->group_pub_key = grp->pub_key;
-  chn->group_pub_hash = grp->pub_key_hash;
-  chn->peer = *peer;
-  chn->direction = DIR_OUTGOING;
-  chn->is_connected = GNUNET_NO;
-  chn->join_status = JOIN_WAITING;
-
-  struct GNUNET_MQ_MessageHandler cadet_handlers[] = {
-    GNUNET_MQ_hd_var_size (cadet_message,
-                           GNUNET_MESSAGE_TYPE_MULTICAST_MESSAGE,
-                           struct GNUNET_MULTICAST_MessageHeader,
-                           chn),
-
-    GNUNET_MQ_hd_var_size (cadet_join_decision,
-                           GNUNET_MESSAGE_TYPE_MULTICAST_JOIN_DECISION,
-                           struct MulticastJoinDecisionMessageHeader,
-                           chn),
-
-    GNUNET_MQ_hd_fixed_size (cadet_replay_request,
-                             GNUNET_MESSAGE_TYPE_MULTICAST_REPLAY_REQUEST,
-                             struct MulticastReplayRequestMessage,
-                             chn),
-
-    GNUNET_MQ_hd_var_size (cadet_replay_response,
-                           GNUNET_MESSAGE_TYPE_MULTICAST_REPLAY_RESPONSE,
-                           struct MulticastReplayResponseMessage,
-                           chn),
-
-    GNUNET_MQ_handler_end ()
-  };
-
-  chn->channel = GNUNET_CADET_channel_create (cadet, chn, &chn->peer,
-                                              &grp->cadet_port_hash,
-                                              GNUNET_CADET_OPTION_RELIABLE,
-                                              cadet_notify_window_change,
-                                              cadet_notify_disconnect,
-                                              cadet_handlers);
-  GNUNET_CONTAINER_multihashmap_put (channels_out, &chn->group_pub_hash, chn,
-                                     GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
-  return chn;
-}
-
-
-/**
- * Destroy outgoing CADET channel.
- */
-static void
-cadet_channel_destroy (struct Channel *chn)
-{
-  GNUNET_CADET_channel_destroy (chn->channel);
-  GNUNET_CONTAINER_multihashmap_remove_all (channels_out, &chn->group_pub_hash);
-  GNUNET_free (chn);
-}
-
-/**
- * Handle a connecting client starting an origin.
- */
-static void
-handle_client_origin_start (void *cls,
-                            const struct MulticastOriginStartMessage *msg)
-{
-  struct Client *c = cls;
-  struct GNUNET_SERVICE_Client *client = c->client;
-
-  struct GNUNET_CRYPTO_EddsaPublicKey pub_key;
-  struct GNUNET_HashCode pub_key_hash;
-
-  GNUNET_CRYPTO_eddsa_key_get_public (&msg->group_key, &pub_key);
-  GNUNET_CRYPTO_hash (&pub_key, sizeof (pub_key), &pub_key_hash);
-
-  struct Origin *
-    orig = GNUNET_CONTAINER_multihashmap_get (origins, &pub_key_hash);
-  struct Group *grp;
-
-  if (NULL == orig)
-  {
-    orig = GNUNET_new (struct Origin);
-    orig->priv_key = msg->group_key;
-    orig->max_fragment_id = GNUNET_ntohll (msg->max_fragment_id);
-
-    grp = c->group = &orig->group;
-    grp->origin = orig;
-    grp->is_origin = GNUNET_YES;
-    grp->pub_key = pub_key;
-    grp->pub_key_hash = pub_key_hash;
-    grp->is_disconnected = GNUNET_NO;
-
-    GNUNET_CONTAINER_multihashmap_put (origins, &grp->pub_key_hash, orig,
-                                       GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
-
-    group_set_cadet_port_hash (grp);
-
-    struct GNUNET_MQ_MessageHandler cadet_handlers[] = {
-      GNUNET_MQ_hd_var_size (cadet_message,
-                             GNUNET_MESSAGE_TYPE_MULTICAST_MESSAGE,
-                             struct GNUNET_MULTICAST_MessageHeader,
-                             grp),
-
-      GNUNET_MQ_hd_var_size (cadet_request,
-                             GNUNET_MESSAGE_TYPE_MULTICAST_REQUEST,
-                             struct GNUNET_MULTICAST_RequestHeader,
-                             grp),
-
-      GNUNET_MQ_hd_var_size (cadet_join_request,
-                             GNUNET_MESSAGE_TYPE_MULTICAST_JOIN_REQUEST,
-                             struct MulticastJoinRequestMessage,
-                             grp),
-
-      GNUNET_MQ_hd_fixed_size (cadet_replay_request,
-                               GNUNET_MESSAGE_TYPE_MULTICAST_REPLAY_REQUEST,
-                               struct MulticastReplayRequestMessage,
-                               grp),
-
-      GNUNET_MQ_hd_var_size (cadet_replay_response,
-                             GNUNET_MESSAGE_TYPE_MULTICAST_REPLAY_RESPONSE,
-                             struct MulticastReplayResponseMessage,
-                             grp),
-
-      GNUNET_MQ_handler_end ()
-    };
-
-
-    orig->cadet_port = GNUNET_CADET_open_port (cadet,
-                                               &grp->cadet_port_hash,
-                                               cadet_notify_connect,
-                                               grp,
-                                               cadet_notify_window_change,
-                                               cadet_notify_disconnect,
-                                               cadet_handlers);
-  }
-  else
-  {
-    grp = &orig->group;
-  }
-
-  struct ClientList *cl = GNUNET_new (struct ClientList);
-  cl->client = client;
-  GNUNET_CONTAINER_DLL_insert (grp->clients_head, grp->clients_tail, cl);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Client connected as origin to group %s.\n",
-              orig, GNUNET_h2s (&grp->pub_key_hash));
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-static int
-check_client_member_join (void *cls,
-                          const struct MulticastMemberJoinMessage *msg)
-{
-  uint16_t msg_size = ntohs (msg->header.size);
-  struct GNUNET_PeerIdentity *relays = (struct GNUNET_PeerIdentity *) &msg[1];
-  uint32_t relay_count = ntohl (msg->relay_count);
-
-  if (0 != relay_count)
-  {
-    if (UINT32_MAX / relay_count < sizeof (*relays)){
-        GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                      "relay_count (%lu) * sizeof (*relays)  (%lu) exceeds UINT32_MAX!\n",
-                (unsigned long)relay_count,
-                sizeof (*relays));
-        return GNUNET_SYSERR;
-    }
-  }
-  uint32_t relay_size = relay_count * sizeof (*relays);
-  struct GNUNET_MessageHeader *join_msg = NULL;
-  uint16_t join_msg_size = 0;
-  if (sizeof (*msg) + relay_size + sizeof (struct GNUNET_MessageHeader)
-      <= msg_size)
-  {
-    join_msg = (struct GNUNET_MessageHeader *)
-      (((char *) &msg[1]) + relay_size);
-    join_msg_size = ntohs (join_msg->size);
-    if (UINT16_MAX - join_msg_size < sizeof (struct MulticastJoinRequestMessage)){
-        GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                    "join_msg_size (%u) + sizeof (struct MulticastJoinRequestMessage) (%lu) exceeds UINT16_MAX!\n",
-                (unsigned)join_msg_size,
-                (unsigned long)sizeof (struct MulticastJoinRequestMessage));
-        return GNUNET_SYSERR;
-    } 
-  }
-  if (msg_size != (sizeof (*msg) + relay_size + join_msg_size)){
-      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                    "msg_size does not match real size of message!\n");
-      return GNUNET_SYSERR;
-  }else{
-      return GNUNET_OK;
-  }
-}
-
-
-/**
- * Handle a connecting client joining a group.
- */
-static void
-handle_client_member_join (void *cls,
-                           const struct MulticastMemberJoinMessage *msg)
-{
-  struct Client *c = cls;
-  struct GNUNET_SERVICE_Client *client = c->client;
-
-  uint16_t msg_size = ntohs (msg->header.size);
-
-  struct GNUNET_CRYPTO_EcdsaPublicKey mem_pub_key;
-  struct GNUNET_HashCode pub_key_hash, mem_pub_key_hash;
-
-  GNUNET_CRYPTO_ecdsa_key_get_public (&msg->member_key, &mem_pub_key);
-  GNUNET_CRYPTO_hash (&mem_pub_key, sizeof (mem_pub_key), &mem_pub_key_hash);
-  GNUNET_CRYPTO_hash (&msg->group_pub_key, sizeof (msg->group_pub_key), &pub_key_hash);
-  
-  struct GNUNET_CONTAINER_MultiHashMap *
-    grp_mem = GNUNET_CONTAINER_multihashmap_get (group_members, &pub_key_hash);
-  struct Member *mem = NULL;
-  struct Group *grp;
-
-  if (NULL != grp_mem)
-  {
-    mem = GNUNET_CONTAINER_multihashmap_get (grp_mem, &mem_pub_key_hash);
-  }
-  
-  if (NULL == mem)
-  {
-    mem = GNUNET_new (struct Member);
-    mem->origin = msg->origin;
-    mem->priv_key = msg->member_key;
-    mem->pub_key = mem_pub_key;
-    mem->pub_key_hash = mem_pub_key_hash;
-    mem->max_fragment_id = 0; // FIXME
-
-    grp = c->group = &mem->group;
-    grp->member = mem;
-    grp->is_origin = GNUNET_NO;
-    grp->pub_key = msg->group_pub_key;
-    grp->pub_key_hash = pub_key_hash;
-    grp->is_disconnected = GNUNET_NO;
-    group_set_cadet_port_hash (grp);
-  
-    if (NULL == grp_mem)
-    {
-      grp_mem = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_YES);
-      GNUNET_CONTAINER_multihashmap_put (group_members, &grp->pub_key_hash, grp_mem,
-                                         GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
-    }
-    GNUNET_CONTAINER_multihashmap_put (grp_mem, &mem->pub_key_hash, mem,
-                                       GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
-   
-    // FIXME: should the members hash map have option UNIQUE_FAST?
-    GNUNET_CONTAINER_multihashmap_put (members, &grp->pub_key_hash, mem,
-                                       GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
-  }
-  else
-  {
-    grp = &mem->group;
-  }
-
-  struct ClientList *cl = GNUNET_new (struct ClientList);
-  cl->client = client;
-  GNUNET_CONTAINER_DLL_insert (grp->clients_head, grp->clients_tail, cl);
-
-  char *str = GNUNET_CRYPTO_ecdsa_public_key_to_string (&mem->pub_key);
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Client connected to group %s as member %s (%s). size = %d\n",
-              GNUNET_h2s (&grp->pub_key_hash),
-              GNUNET_h2s2 (&mem->pub_key_hash),
-              str,
-              GNUNET_CONTAINER_multihashmap_size (members));
-  GNUNET_free (str);
-
-  if (NULL != mem->join_dcsn)
-  { /* Already got a join decision, send it to client. */
-    struct GNUNET_MQ_Envelope *
-      env = GNUNET_MQ_msg_copy (&mem->join_dcsn->header);
-
-    GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client),
-                    env);
-  }
-  else
-  { /* First client of the group, send join request. */
-    struct GNUNET_PeerIdentity *relays = (struct GNUNET_PeerIdentity *) &msg[1];
-    uint32_t relay_count = ntohl (msg->relay_count);
-    uint16_t relay_size = relay_count * sizeof (*relays);
-    struct GNUNET_MessageHeader *join_msg = NULL;
-    uint16_t join_msg_size = 0;
-    if (sizeof (*msg) + relay_size + sizeof (struct GNUNET_MessageHeader)
-        <= msg_size)
-    {
-      join_msg = (struct GNUNET_MessageHeader *)
-        (((char *) &msg[1]) + relay_size);
-      join_msg_size = ntohs (join_msg->size);
-    }
-
-    uint16_t req_msg_size = sizeof (struct MulticastJoinRequestMessage) + join_msg_size;
-    struct MulticastJoinRequestMessage *
-      req = GNUNET_malloc (req_msg_size);
-    req->header.size = htons (req_msg_size);
-    req->header.type = htons (GNUNET_MESSAGE_TYPE_MULTICAST_JOIN_REQUEST);
-    req->group_pub_key = grp->pub_key;
-    req->peer = this_peer;
-    GNUNET_CRYPTO_ecdsa_key_get_public (&mem->priv_key, &req->member_pub_key);
-    if (0 < join_msg_size)
-      GNUNET_memcpy (&req[1], join_msg, join_msg_size);
-
-    req->member_pub_key = mem->pub_key;
-    req->purpose.size = htonl (req_msg_size
-                               - sizeof (req->header)
-                               - sizeof (req->reserved)
-                               - sizeof (req->signature));
-    req->purpose.purpose = htonl (GNUNET_SIGNATURE_PURPOSE_MULTICAST_REQUEST);
-
-    if (GNUNET_OK != GNUNET_CRYPTO_ecdsa_sign (&mem->priv_key, &req->purpose,
-                                               &req->signature))
-    {
-      /* FIXME: handle error */
-      GNUNET_assert (0);
-    }
-
-    if (NULL != mem->join_req)
-      GNUNET_free (mem->join_req);
-    mem->join_req = req;
-
-    if (0 ==
-        client_send_origin (&grp->pub_key_hash,
-                            GNUNET_MQ_msg_copy (&mem->join_req->header)))
-    { /* No local origins, send to remote origin */
-      cadet_send_join_request (mem);
-    }
-  }
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-static void
-client_send_join_decision (struct Member *mem,
-                           const struct MulticastJoinDecisionMessageHeader *hdcsn)
-{
-  client_send_group (&mem->group, GNUNET_MQ_msg_copy (&hdcsn->header));
-
-  const struct MulticastJoinDecisionMessage *
-    dcsn = (const struct MulticastJoinDecisionMessage *) &hdcsn[1];
-  if (GNUNET_YES == ntohl (dcsn->is_admitted))
-  { /* Member admitted, store join_decision. */
-    uint16_t dcsn_size = ntohs (dcsn->header.size);
-    mem->join_dcsn = GNUNET_malloc (dcsn_size);
-    GNUNET_memcpy (mem->join_dcsn, dcsn, dcsn_size);
-  }
-  else
-  { /* Refused entry, but replay would be still possible for past members. */
-  }
-}
-
-
-static int
-check_client_join_decision (void *cls,
-                            const struct MulticastJoinDecisionMessageHeader *hdcsn)
-{
-  return GNUNET_OK;
-}
-
-
-/**
- * Join decision from client.
- */
-static void
-handle_client_join_decision (void *cls,
-                             const struct MulticastJoinDecisionMessageHeader *hdcsn)
-{
-  struct Client *c = cls;
-  struct GNUNET_SERVICE_Client *client = c->client;
-  struct Group *grp = c->group;
-
-  if (NULL == grp)
-  {
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-  GNUNET_assert (GNUNET_NO == grp->is_disconnected);
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p got join decision from client for group %s..\n",
-              grp, GNUNET_h2s (&grp->pub_key_hash));
-
-  struct GNUNET_CONTAINER_MultiHashMap *
-    grp_mem = GNUNET_CONTAINER_multihashmap_get (group_members,
-                                                 &grp->pub_key_hash);
-  struct Member *mem = NULL;
-  if (NULL != grp_mem)
-  {
-    struct GNUNET_HashCode member_key_hash;
-    GNUNET_CRYPTO_hash (&hdcsn->member_pub_key, sizeof (hdcsn->member_pub_key),
-                        &member_key_hash);
-    mem = GNUNET_CONTAINER_multihashmap_get (grp_mem, &member_key_hash);
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "%p ..and member %s: %p\n",
-                grp, GNUNET_h2s (&member_key_hash), mem);
-  }
-  
-  if (NULL != mem) 
-  { /* Found local member */
-    client_send_join_decision (mem, hdcsn);
-  }
-  else
-  { /* Look for remote member */
-    cadet_send_join_decision (grp, hdcsn);
-  }
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-static void
-handle_client_part_request (void *cls,
-                            const struct GNUNET_MessageHeader *msg)
-{
-  struct Client *c = cls;
-  struct GNUNET_SERVICE_Client *client = c->client;
-  struct Group *grp = c->group;
-  struct GNUNET_MQ_Envelope *env;
-
-  if (NULL == grp)
-  {
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-  GNUNET_assert (GNUNET_NO == grp->is_disconnected);
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p got part request from client for group %s.\n",
-              grp, GNUNET_h2s (&grp->pub_key_hash));
-  grp->is_disconnected = GNUNET_YES;
-  env = GNUNET_MQ_msg_header (GNUNET_MESSAGE_TYPE_MULTICAST_PART_ACK);
-  client_send_group (grp, env);
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-static int
-check_client_multicast_message (void *cls,
-                                const struct GNUNET_MULTICAST_MessageHeader *msg)
-{
-  return GNUNET_OK;
-}
-
-
-/**
- * Incoming message from a client.
- */
-static void
-handle_client_multicast_message (void *cls,
-                                 const struct GNUNET_MULTICAST_MessageHeader *msg)
-{
-  // FIXME: what if GNUNET_YES == grp->is_disconnected? Do we allow sending messages?
-  struct Client *c = cls;
-  struct GNUNET_SERVICE_Client *client = c->client;
-  struct Group *grp = c->group;
-
-  if (NULL == grp)
-  {
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-  GNUNET_assert (GNUNET_YES == grp->is_origin);
-  struct Origin *orig = grp->origin;
-
-  // FIXME: use GNUNET_MQ_msg_copy
-  /* FIXME: yucky, should use separate message structs for P2P and CS! */
-  struct GNUNET_MULTICAST_MessageHeader *
-    out = (struct GNUNET_MULTICAST_MessageHeader *) GNUNET_copy_message (&msg->header);
-  out->fragment_id = GNUNET_htonll (++orig->max_fragment_id);
-  out->purpose.size = htonl (ntohs (out->header.size)
-                             - sizeof (out->header)
-                             - sizeof (out->hop_counter)
-                             - sizeof (out->signature));
-  out->purpose.purpose = htonl (GNUNET_SIGNATURE_PURPOSE_MULTICAST_MESSAGE);
-
-  if (GNUNET_OK != GNUNET_CRYPTO_eddsa_sign (&orig->priv_key, &out->purpose,
-                                             &out->signature))
-  {
-    GNUNET_assert (0);
-  }
-
-  client_send_all (&grp->pub_key_hash, GNUNET_MQ_msg_copy (&out->header));
-  cadet_send_children (&grp->pub_key_hash, &out->header);
-  client_send_ack (&grp->pub_key_hash);
-  GNUNET_free (out);
-
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-static int
-check_client_multicast_request (void *cls,
-                                const struct GNUNET_MULTICAST_RequestHeader *req)
-{
-  return GNUNET_OK;
-}
-
-
-/**
- * Incoming request from a client.
- */
-static void
-handle_client_multicast_request (void *cls,
-                                 const struct GNUNET_MULTICAST_RequestHeader *req)
-{
-  struct Client *c = cls;
-  struct GNUNET_SERVICE_Client *client = c->client;
-  struct Group *grp = c->group;
-
-  if (NULL == grp)
-  {
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-  GNUNET_assert (GNUNET_NO == grp->is_disconnected);
-  GNUNET_assert (GNUNET_NO == grp->is_origin);
-  struct Member *mem = grp->member;
-
-  /* FIXME: yucky, should use separate message structs for P2P and CS! */
-  struct GNUNET_MULTICAST_RequestHeader *
-    out = (struct GNUNET_MULTICAST_RequestHeader *) GNUNET_copy_message (&req->header);
-  out->member_pub_key = mem->pub_key;
-  out->fragment_id = GNUNET_ntohll (++mem->max_fragment_id);
-  out->purpose.size = htonl (ntohs (out->header.size)
-                             - sizeof (out->header)
-                             - sizeof (out->member_pub_key)
-                             - sizeof (out->signature));
-  out->purpose.purpose = htonl (GNUNET_SIGNATURE_PURPOSE_MULTICAST_REQUEST);
-
-  if (GNUNET_OK != GNUNET_CRYPTO_ecdsa_sign (&mem->priv_key, &out->purpose,
-                                             &out->signature))
-  {
-    GNUNET_assert (0);
-  }
-
-  uint8_t send_ack = GNUNET_YES;
-  if (0 ==
-      client_send_origin (&grp->pub_key_hash,
-                          GNUNET_MQ_msg_copy (&out->header)))
-  { /* No local origins, send to remote origin */
-    if (NULL != mem->origin_channel)
-    {
-      cadet_send_channel (mem->origin_channel, &out->header);
-      send_ack = GNUNET_NO;
-    }
-    else
-    {
-      /* FIXME: not yet connected to origin */
-      GNUNET_SERVICE_client_drop (client);
-      GNUNET_free (out);
-      return;
-    }
-  }
-  if (GNUNET_YES == send_ack)
-  {
-    client_send_ack (&grp->pub_key_hash);
-  }
-  GNUNET_free (out);
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-/**
- * Incoming replay request from a client.
- */
-static void
-handle_client_replay_request (void *cls,
-                              const struct MulticastReplayRequestMessage *rep)
-{
-  struct Client *c = cls;
-  struct GNUNET_SERVICE_Client *client = c->client;
-  struct Group *grp = c->group;
-
-  if (NULL == grp)
-  {
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-  GNUNET_assert (GNUNET_NO == grp->is_disconnected);
-  GNUNET_assert (GNUNET_NO == grp->is_origin);
-  struct Member *mem = grp->member;
-
-  struct GNUNET_CONTAINER_MultiHashMap *
-    grp_replay_req = GNUNET_CONTAINER_multihashmap_get (replay_req_client,
-                                                        &grp->pub_key_hash);
-  if (NULL == grp_replay_req)
-  {
-    grp_replay_req = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_NO);
-    GNUNET_CONTAINER_multihashmap_put (replay_req_client,
-                                       &grp->pub_key_hash, grp_replay_req,
-                                       GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
-  }
-
-  struct GNUNET_HashCode key_hash;
-  replay_key_hash (rep->fragment_id, rep->message_id, rep->fragment_offset,
-                   rep->flags, &key_hash);
-  GNUNET_CONTAINER_multihashmap_put (grp_replay_req, &key_hash, client,
-                                     GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
-
-  if (0 ==
-      client_send_origin (&grp->pub_key_hash,
-                          GNUNET_MQ_msg_copy (&rep->header)))
-  { /* No local origin, replay from remote members / origin. */
-    if (NULL != mem->origin_channel)
-    {
-      cadet_send_channel (mem->origin_channel, &rep->header);
-    }
-    else
-    {
-      /* FIXME: not yet connected to origin */
-      
-      GNUNET_assert (0);
-      GNUNET_SERVICE_client_drop (client);
-      return;
-    }
-  }
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-static int
-cadet_send_replay_response_cb (void *cls,
-                               const struct GNUNET_HashCode *key_hash,
-                               void *value)
-{
-  struct Channel *chn = value;
-  struct GNUNET_MessageHeader *msg = cls;
-
-  cadet_send_channel (chn, msg);
-  return GNUNET_OK;
-}
-
-
-static int
-client_send_replay_response_cb (void *cls,
-                                const struct GNUNET_HashCode *key_hash,
-                                void *value)
-{
-  struct GNUNET_SERVICE_Client *client = value;
-  struct GNUNET_MessageHeader *msg = cls;
-
-  client_send (client, msg);
-  return GNUNET_OK;
-}
-
-
-static int
-check_client_replay_response_end (void *cls,
-                                  const struct MulticastReplayResponseMessage *res)
-{
-  return GNUNET_OK;
-}
-
-
-/**
- * End of replay response from a client.
- */
-static void
-handle_client_replay_response_end (void *cls,
-                                   const struct MulticastReplayResponseMessage *res)
-{
-  struct Client *c = cls;
-  struct GNUNET_SERVICE_Client *client = c->client;
-  struct Group *grp = c->group;
-
-  if (NULL == grp)
-  {
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-  GNUNET_assert (GNUNET_NO == grp->is_disconnected);
-
-  struct GNUNET_HashCode key_hash;
-  replay_key_hash (res->fragment_id, res->message_id, res->fragment_offset,
-                   res->flags, &key_hash);
-
-  struct GNUNET_CONTAINER_MultiHashMap *
-    grp_replay_req_cadet = GNUNET_CONTAINER_multihashmap_get (replay_req_cadet,
-                                                              &grp->pub_key_hash);
-  if (NULL != grp_replay_req_cadet)
-  {
-    GNUNET_CONTAINER_multihashmap_remove_all (grp_replay_req_cadet, &key_hash);
-  }
-  struct GNUNET_CONTAINER_MultiHashMap *
-    grp_replay_req_client = GNUNET_CONTAINER_multihashmap_get (replay_req_client,
-                                                               &grp->pub_key_hash);
-  if (NULL != grp_replay_req_client)
-  {
-    GNUNET_CONTAINER_multihashmap_remove_all (grp_replay_req_client, &key_hash);
-  }
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-static int
-check_client_replay_response (void *cls,
-                              const struct MulticastReplayResponseMessage *res)
-{
-  const struct GNUNET_MessageHeader *msg;
-  if (GNUNET_MULTICAST_REC_OK == res->error_code)
-  {
-    msg = GNUNET_MQ_extract_nested_mh (res);
-    if (NULL == msg)
-    {
-      return GNUNET_SYSERR;
-    }
-  }
-  return GNUNET_OK;
-}
-
-
-/**
- * Incoming replay response from a client.
- *
- * Respond with a multicast message on success, or otherwise with an error code.
- */
-static void
-handle_client_replay_response (void *cls,
-                               const struct MulticastReplayResponseMessage *res)
-{
-  struct Client *c = cls;
-  struct GNUNET_SERVICE_Client *client = c->client;
-  struct Group *grp = c->group;
-
-  if (NULL == grp)
-  {
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-  GNUNET_assert (GNUNET_NO == grp->is_disconnected);
-
-  const struct GNUNET_MessageHeader *msg = &res->header;
-  if (GNUNET_MULTICAST_REC_OK == res->error_code)
-  {
-    msg = GNUNET_MQ_extract_nested_mh (res);
-  }
-
-  struct GNUNET_HashCode key_hash;
-  replay_key_hash (res->fragment_id, res->message_id, res->fragment_offset,
-                   res->flags, &key_hash);
-
-  struct GNUNET_CONTAINER_MultiHashMap *
-    grp_replay_req_cadet = GNUNET_CONTAINER_multihashmap_get (replay_req_cadet,
-                                                              &grp->pub_key_hash);
-  if (NULL != grp_replay_req_cadet)
-  {
-    GNUNET_CONTAINER_multihashmap_get_multiple (grp_replay_req_cadet, &key_hash,
-                                                cadet_send_replay_response_cb,
-                                                (void *) msg);
-  }
-  if (GNUNET_MULTICAST_REC_OK == res->error_code)
-  {
-    struct GNUNET_CONTAINER_MultiHashMap *
-      grp_replay_req_client = GNUNET_CONTAINER_multihashmap_get (replay_req_client,
-                                                                 &grp->pub_key_hash);
-    if (NULL != grp_replay_req_client)
-    {
-      GNUNET_CONTAINER_multihashmap_get_multiple (grp_replay_req_client, &key_hash,
-                                                  client_send_replay_response_cb,
-                                                  (void *) msg);
-    }
-  }
-  else
-  {
-    handle_client_replay_response_end (c, res);
-    return;
-  }
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-/**
- * A new client connected.
- *
- * @param cls NULL
- * @param client client to add
- * @param mq message queue for @a client
- * @return @a client
- */
-static void *
-client_notify_connect (void *cls,
-                       struct GNUNET_SERVICE_Client *client,
-                       struct GNUNET_MQ_Handle *mq)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Client connected: %p\n", client);
-  /* FIXME: send connect ACK */
-
-  struct Client *c = GNUNET_new (struct Client);
-  c->client = client;
-
-  return c;
-}
-
-
-/**
- * Called whenever a client is disconnected.
- * Frees our resources associated with that client.
- *
- * @param cls closure
- * @param client identification of the client
- * @param app_ctx must match @a client
- */
-static void
-client_notify_disconnect (void *cls,
-                          struct GNUNET_SERVICE_Client *client,
-                          void *app_ctx)
-{
-  struct Client *c = app_ctx;
-  struct Group *grp = c->group;
-  GNUNET_free (c);
-
-  if (NULL == grp)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "%p User context is NULL in client_disconnect()\n", grp);
-    GNUNET_break (0);
-    return;
-  }
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Client (%s) disconnected from group %s\n",
-              grp, (GNUNET_YES == grp->is_origin) ? "origin" : "member",
-              GNUNET_h2s (&grp->pub_key_hash));
-
-  // FIXME (due to protocol change): here we must not remove all clients,
-  // only the one we were notified about!
-  struct ClientList *cl = grp->clients_head;
-  while (NULL != cl)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "iterating clients for group %p\n",
-                grp);
-    if (cl->client == client)
-    {
-      GNUNET_CONTAINER_DLL_remove (grp->clients_head, grp->clients_tail, cl);
-      GNUNET_free (cl);
-      break;
-    }
-    cl = cl->next;
-  }
-
-  while (GNUNET_YES == replay_req_remove_client (grp, client));
-
-  if (NULL == grp->clients_head)
-  { /* Last client disconnected. */
-    cleanup_group (grp);
-  }
-}
-
-
-/**
- * Service started.
- *
- * @param cls closure
- * @param server the initialized server
- * @param cfg configuration to use
- */
-static void
-run (void *cls,
-     const struct GNUNET_CONFIGURATION_Handle *c,
-     struct GNUNET_SERVICE_Handle *svc)
-{
-  cfg = c;
-  service = svc;
-  GNUNET_CRYPTO_get_peer_identity (cfg, &this_peer);
-
-  stats = GNUNET_STATISTICS_create ("multicast", cfg);
-  origins = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_YES);
-  members = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_YES);
-  group_members = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_NO);
-  channels_in = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_YES);
-  channels_out = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_YES);
-  replay_req_cadet = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_NO);
-  replay_req_client = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_NO);
-
-  cadet = GNUNET_CADET_connect (cfg);
-
-  GNUNET_assert (NULL != cadet);
-
-  GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
-                                NULL);
-}
-
-
-/**
- * Define "main" method using service macro.
- */
-GNUNET_SERVICE_MAIN
-("multicast",
- GNUNET_SERVICE_OPTION_NONE,
- &run,
- &client_notify_connect,
- &client_notify_disconnect,
- NULL,
- GNUNET_MQ_hd_fixed_size (client_origin_start,
-                          GNUNET_MESSAGE_TYPE_MULTICAST_ORIGIN_START,
-                          struct MulticastOriginStartMessage,
-                          NULL),
- GNUNET_MQ_hd_var_size (client_member_join,
-                        GNUNET_MESSAGE_TYPE_MULTICAST_MEMBER_JOIN,
-                        struct MulticastMemberJoinMessage,
-                        NULL),
- GNUNET_MQ_hd_var_size (client_join_decision,
-                        GNUNET_MESSAGE_TYPE_MULTICAST_JOIN_DECISION,
-                        struct MulticastJoinDecisionMessageHeader,
-                        NULL),
- GNUNET_MQ_hd_fixed_size (client_part_request,
-                          GNUNET_MESSAGE_TYPE_MULTICAST_PART_REQUEST,
-                          struct GNUNET_MessageHeader,
-                          NULL),
- GNUNET_MQ_hd_var_size (client_multicast_message,
-                        GNUNET_MESSAGE_TYPE_MULTICAST_MESSAGE,
-                        struct GNUNET_MULTICAST_MessageHeader,
-                        NULL),
- GNUNET_MQ_hd_var_size (client_multicast_request,
-                        GNUNET_MESSAGE_TYPE_MULTICAST_REQUEST,
-                        struct GNUNET_MULTICAST_RequestHeader,
-                        NULL),
- GNUNET_MQ_hd_fixed_size (client_replay_request,
-                          GNUNET_MESSAGE_TYPE_MULTICAST_REPLAY_REQUEST,
-                          struct MulticastReplayRequestMessage,
-                          NULL),
- GNUNET_MQ_hd_var_size (client_replay_response,
-                        GNUNET_MESSAGE_TYPE_MULTICAST_REPLAY_RESPONSE,
-                        struct MulticastReplayResponseMessage,
-                        NULL),
- GNUNET_MQ_hd_var_size (client_replay_response_end,
-                        GNUNET_MESSAGE_TYPE_MULTICAST_REPLAY_RESPONSE_END,
-                        struct MulticastReplayResponseMessage,
-                        NULL));
-
-/* end of gnunet-service-multicast.c */
diff --git a/src/multicast/multicast.conf.in b/src/multicast/multicast.conf.in
deleted file mode 100644 (file)
index 97a5413..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-[multicast]
-START_ON_DEMAND = @START_ON_DEMAND@
-BINARY = gnunet-service-multicast
-
-UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-service-multicast.sock
-UNIX_MATCH_UID = YES
-UNIX_MATCH_GID = YES
-
-@UNIXONLY@PORT = 2109
-HOSTNAME = localhost
-ACCEPT_FROM = 127.0.0.1;
-ACCEPT_FROM6 = ::1;
-
-# DISABLE_SOCKET_FORWARDING = NO
-# USERNAME = 
-# MAXBUF =
-# TIMEOUT =
-# DISABLEV6 =
-# BINDTO =
-# REJECT_FROM =
-# REJECT_FROM6 =
-# PREFIX =
diff --git a/src/multicast/multicast.h b/src/multicast/multicast.h
deleted file mode 100644 (file)
index 8a3ca14..0000000
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
-     This file is part of GNUnet.
-     Copyright (C) 2012, 2013 GNUnet e.V.
-
-     GNUnet is free software: you can redistribute it and/or modify it
-     under the terms of the GNU Affero General Public License as published
-     by the Free Software Foundation, either version 3 of the License,
-     or (at your option) any later version.
-
-     GNUnet is distributed in the hope that it will be useful, but
-     WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     Affero General Public License for more details.
-    
-     You should have received a copy of the GNU Affero General Public License
-     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
-*/
-
-/**
- * @file multicast/multicast.h
- * @brief multicast IPC messages
- * @author Christian Grothoff
- * @author Gabor X Toth
- */
-#ifndef MULTICAST_H
-#define MULTICAST_H
-
-#include "platform.h"
-#include "gnunet_multicast_service.h"
-
-GNUNET_NETWORK_STRUCT_BEGIN
-
-
-/**
- * Header of a join request sent to the origin or another member.
- */
-struct MulticastJoinRequestMessage
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_MULTICAST_JOIN_REQUEST
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * Always zero.
-   */
-  uint32_t reserved;
-
-  /**
-   * ECC signature of the rest of the fields of the join request.
-   *
-   * Signature must match the public key of the joining member.
-   */
-  struct GNUNET_CRYPTO_EcdsaSignature signature;
-
-  /**
-   * Purpose for the signature and size of the signed data.
-   */
-  struct GNUNET_CRYPTO_EccSignaturePurpose purpose;
-
-  /**
-   * Public key of the target group.
-   */
-  struct GNUNET_CRYPTO_EddsaPublicKey group_pub_key;
-
-  /**
-   * Public key of the joining member.
-   */
-  struct GNUNET_CRYPTO_EcdsaPublicKey member_pub_key;
-
-  /**
-   * Peer identity of the joining member.
-   */
-  struct GNUNET_PeerIdentity peer;
-
-  /* Followed by struct GNUNET_MessageHeader join_message */
-};
-
-
-/**
- * Header of a join decision message sent to a peer requesting join.
- */
-struct MulticastJoinDecisionMessage
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_MULTICAST_JOIN_DECISION
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * #GNUNET_YES    if the peer was admitted
-   * #GNUNET_NO     if entry was refused,
-   * #GNUNET_SYSERR if the request could not be answered.
-   */
-  int32_t is_admitted;
-
-  /**
-   * Number of relays given.
-   */
-  uint32_t relay_count;
-
-  /* Followed by relay_count peer identities */
-
-  /* Followed by the join response message */
-};
-
-
-/**
- * Header added to a struct MulticastJoinDecisionMessage
- * when sent between the client and service.
- */
-struct MulticastJoinDecisionMessageHeader
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_MULTICAST_JOIN_DECISION
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * C->S: Peer to send the join decision to.
-   * S->C: Peer we received the join decision from.
-   */
-  struct GNUNET_PeerIdentity peer;
-
-  /**
-   * C->S: Public key of the member requesting join.
-   * S->C: Unused.
-   */
-  struct GNUNET_CRYPTO_EcdsaPublicKey member_pub_key;
-
-  /* Followed by struct MulticastJoinDecisionMessage */
-};
-
-
-/**
- * Message sent from the client to the service to notify the service
- * about the result of a membership test.
- */
-struct MulticastMembershipTestResultMessage
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_MULTICAST_MEMBERSHIP_TEST_RESULT
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * Unique ID that identifies the associated membership test.
-   */
-  uint32_t uid;
-
-  /**
-   * #GNUNET_YES    if the peer is a member
-   * #GNUNET_NO     if peer is not a member,
-   * #GNUNET_SYSERR if the test could not be answered.
-   */
-  int32_t is_admitted;
-};
-
-
-/**
- * Message sent from the client to the service OR the service to the
- * client asking for a message fragment to be replayed.
- */
-struct MulticastReplayRequestMessage
-{
-
-  /**
-   * The message type should be
-   * #GNUNET_MESSAGE_TYPE_MULTICAST_REPLAY_REQUEST.
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * S->C: Public key of the member requesting replay.
-   * C->S: Unused.
-   */
-  struct GNUNET_CRYPTO_EcdsaPublicKey member_pub_key;
-
-  /**
-   * ID of the message that is being requested.
-   */
-  uint64_t fragment_id;
-
-  /**
-   * ID of the message that is being requested.
-   */
-  uint64_t message_id;
-
-  /**
-   * Offset of the fragment that is being requested.
-   */
-  uint64_t fragment_offset;
-
-  /**
-   * Additional flags for the request.
-   */
-  uint64_t flags;
-
-  /**
-   * Replay request ID.
-   */
-  uint32_t uid;
-};
-
-
-/**
- * Message sent from the client to the service to give the service
- * a replayed message.
- */
-struct MulticastReplayResponseMessage
-{
-
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_MULTICAST_REPLAY_RESPONSE
-   *    or GNUNET_MESSAGE_TYPE_MULTICAST_REPLAY_RESPONSE_END
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * ID of the message that is being requested.
-   */
-  uint64_t fragment_id;
-
-  /**
-   * ID of the message that is being requested.
-   */
-  uint64_t message_id;
-
-  /**
-   * Offset of the fragment that is being requested.
-   */
-  uint64_t fragment_offset;
-
-  /**
-   * Additional flags for the request.
-   */
-  uint64_t flags;
-
-  /**
-   * An `enum GNUNET_MULTICAST_ReplayErrorCode` identifying issues (in NBO).
-   */
-  int32_t error_code;
-
-  /* followed by replayed message */
-};
-
-
-/**
- * Message sent from the client to the service to notify the service
- * about the starting of a multicast group with this peers as its origin.
- */
-struct MulticastOriginStartMessage
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_MULTICAST_ORIGIN_START
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * Always zero.
-   */
-  uint32_t reserved;
-
-  /**
-   * Private, non-ephemeral key for the multicast group.
-   */
-  struct GNUNET_CRYPTO_EddsaPrivateKey group_key;
-
-  /**
-   * Last fragment ID sent to the group, used to continue counting fragments if
-   * we resume operating * a group.
-   */
-  uint64_t max_fragment_id;
-};
-
-
-struct MulticastMemberJoinMessage
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_MULTICAST_MEMBER_JOIN
-   */
-  struct GNUNET_MessageHeader header;
-
-  uint32_t relay_count GNUNET_PACKED;
-
-  struct GNUNET_CRYPTO_EddsaPublicKey group_pub_key;
-
-  struct GNUNET_CRYPTO_EcdsaPrivateKey member_key;
-
-  struct GNUNET_PeerIdentity origin;
-
-  /* Followed by struct GNUNET_PeerIdentity relays[relay_count] */
-
-  /* Followed by struct GNUNET_MessageHeader join_msg */
-};
-
-
-GNUNET_NETWORK_STRUCT_END
-
-#endif
-/* end of multicast.h */
diff --git a/src/multicast/multicast_api.c b/src/multicast/multicast_api.c
deleted file mode 100644 (file)
index e5e8302..0000000
+++ /dev/null
@@ -1,1399 +0,0 @@
-/*
-     This file is part of GNUnet.
-     Copyright (C) 2012, 2013 GNUnet e.V.
-
-     GNUnet is free software: you can redistribute it and/or modify it
-     under the terms of the GNU Affero General Public License as published
-     by the Free Software Foundation, either version 3 of the License,
-     or (at your option) any later version.
-
-     GNUnet is distributed in the hope that it will be useful, but
-     WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     Affero General Public License for more details.
-    
-     You should have received a copy of the GNU Affero General Public License
-     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
-*/
-
-/**
- * @file multicast/multicast_api.c
- * @brief Multicast service; implements multicast groups using CADET connections.
- * @author Christian Grothoff
- * @author Gabor X Toth
- */
-
-#include "platform.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_multicast_service.h"
-#include "multicast.h"
-
-#define LOG(kind,...) GNUNET_log_from (kind, "multicast-api",__VA_ARGS__)
-
-
-/**
- * Handle for a request to send a message to all multicast group members
- * (from the origin).
- */
-struct GNUNET_MULTICAST_OriginTransmitHandle
-{
-  GNUNET_MULTICAST_OriginTransmitNotify notify;
-  void *notify_cls;
-  struct GNUNET_MULTICAST_Origin *origin;
-
-  uint64_t message_id;
-  uint64_t group_generation;
-  uint64_t fragment_offset;
-};
-
-
-/**
- * Handle for a message to be delivered from a member to the origin.
- */
-struct GNUNET_MULTICAST_MemberTransmitHandle
-{
-  GNUNET_MULTICAST_MemberTransmitNotify notify;
-  void *notify_cls;
-  struct GNUNET_MULTICAST_Member *member;
-
-  uint64_t request_id;
-  uint64_t fragment_offset;
-};
-
-
-struct GNUNET_MULTICAST_Group
-{
-  /**
-   * Configuration to use.
-   */
-  const struct GNUNET_CONFIGURATION_Handle *cfg;
-
-  /**
-   * Client connection to the service.
-   */
-  struct GNUNET_MQ_Handle *mq;
-
-  /**
-   * Message to send on connect.
-   */
-  struct GNUNET_MQ_Envelope *connect_env;
-
-  /**
-   * Time to wait until we try to reconnect on failure.
-   */
-  struct GNUNET_TIME_Relative reconnect_delay;
-
-  /**
-   * Task for reconnecting when the listener fails.
-   */
-  struct GNUNET_SCHEDULER_Task *reconnect_task;
-
-  GNUNET_MULTICAST_JoinRequestCallback join_req_cb;
-  GNUNET_MULTICAST_ReplayFragmentCallback replay_frag_cb;
-  GNUNET_MULTICAST_ReplayMessageCallback replay_msg_cb;
-  GNUNET_MULTICAST_MessageCallback message_cb;
-  void *cb_cls;
-
-  /**
-   * Function called after disconnected from the service.
-   */
-  GNUNET_ContinuationCallback disconnect_cb;
-
-  /**
-   * Closure for @a disconnect_cb.
-   */
-  void *disconnect_cls;
-
-  /**
-   * Are we currently transmitting a message?
-   */
-  uint8_t in_transmit;
-
-  /**
-   * Number of MULTICAST_FRAGMENT_ACK messages we are still waiting for.
-   */
-  uint8_t acks_pending;
-
-  /**
-   * Is this the origin or a member?
-   */
-  uint8_t is_origin;
-
-  /**
-   * Is this channel in the process of disconnecting from the service?
-   * #GNUNET_YES or #GNUNET_NO
-   */
-  uint8_t is_disconnecting;
-};
-
-
-/**
- * Handle for the origin of a multicast group.
- */
-struct GNUNET_MULTICAST_Origin
-{
-  struct GNUNET_MULTICAST_Group grp;
-  struct GNUNET_MULTICAST_OriginTransmitHandle tmit;
-
-  GNUNET_MULTICAST_RequestCallback request_cb;
-};
-
-
-/**
- * Handle for a multicast group member.
- */
-struct GNUNET_MULTICAST_Member
-{
-  struct GNUNET_MULTICAST_Group grp;
-  struct GNUNET_MULTICAST_MemberTransmitHandle tmit;
-
-  GNUNET_MULTICAST_JoinDecisionCallback join_dcsn_cb;
-
-  /**
-   * Replay fragment -> struct GNUNET_MULTICAST_MemberReplayHandle *
-   */
-  struct GNUNET_CONTAINER_MultiHashMap *replay_reqs;
-
-  uint64_t next_fragment_id;
-};
-
-
-/**
- * Handle that identifies a join request.
- *
- * Used to match calls to #GNUNET_MULTICAST_JoinRequestCallback to the
- * corresponding calls to #GNUNET_MULTICAST_join_decision().
- */
-struct GNUNET_MULTICAST_JoinHandle
-{
-  struct GNUNET_MULTICAST_Group *group;
-
-  /**
-   * Public key of the member requesting join.
-   */
-  struct GNUNET_CRYPTO_EcdsaPublicKey member_pub_key;
-
-  /**
-   * Peer identity of the member requesting join.
-   */
-  struct GNUNET_PeerIdentity peer;
-};
-
-
-/**
- * Opaque handle to a replay request from the multicast service.
- */
-struct GNUNET_MULTICAST_ReplayHandle
-{
-  struct GNUNET_MULTICAST_Group *grp;
-  struct MulticastReplayRequestMessage req;
-};
-
-
-/**
- * Handle for a replay request.
- */
-struct GNUNET_MULTICAST_MemberReplayHandle
-{
-};
-
-
-static void
-origin_to_all (struct GNUNET_MULTICAST_Origin *orig);
-
-static void
-member_to_origin (struct GNUNET_MULTICAST_Member *mem);
-
-
-/**
- * Check join request message.
- */
-static int
-check_group_join_request (void *cls,
-                          const struct MulticastJoinRequestMessage *jreq)
-{
-  uint16_t size = ntohs (jreq->header.size);
-
-  if (sizeof (*jreq) == size)
-    return GNUNET_OK;
-
-  if (sizeof (*jreq) + sizeof (struct GNUNET_MessageHeader) <= size)
-    return GNUNET_OK;
-
-  return GNUNET_SYSERR;
-}
-
-
-/**
- * Receive join request from service.
- */
-static void
-handle_group_join_request (void *cls,
-                           const struct MulticastJoinRequestMessage *jreq)
-{
-  struct GNUNET_MULTICAST_Group *grp = cls;
-  struct GNUNET_MULTICAST_JoinHandle *jh;
-  const struct GNUNET_MessageHeader *jmsg = NULL;
-
-  if (NULL == grp)
-  {
-    GNUNET_break (0);
-    return;
-  }
-  if (NULL == grp->join_req_cb)
-    return;
-
-  if (sizeof (*jreq) + sizeof (*jmsg) <= ntohs (jreq->header.size))
-    jmsg = (const struct GNUNET_MessageHeader *) &jreq[1];
-
-  jh = GNUNET_malloc (sizeof (*jh));
-  jh->group = grp;
-  jh->member_pub_key = jreq->member_pub_key;
-  jh->peer = jreq->peer;
-  grp->join_req_cb (grp->cb_cls, &jreq->member_pub_key, jmsg, jh);
-
-  grp->reconnect_delay = GNUNET_TIME_UNIT_MILLISECONDS;
-}
-
-
-/**
- * Check multicast message.
- */
-static int
-check_group_message (void *cls,
-                     const struct GNUNET_MULTICAST_MessageHeader *mmsg)
-{
-  return GNUNET_OK;
-}
-
-
-/**
- * Receive multicast message from service.
- */
-static void
-handle_group_message (void *cls,
-                      const struct GNUNET_MULTICAST_MessageHeader *mmsg)
-{
-  struct GNUNET_MULTICAST_Group *grp = cls;
-
-  if (GNUNET_YES == grp->is_disconnecting)
-    return;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Calling message callback with a message of size %u.\n",
-              ntohs (mmsg->header.size));
-
-  if (NULL != grp->message_cb)
-    grp->message_cb (grp->cb_cls, mmsg);
-
-  grp->reconnect_delay = GNUNET_TIME_UNIT_MILLISECONDS;
-}
-
-
-/**
- * Receive message/request fragment acknowledgement from service.
- */
-static void
-handle_group_fragment_ack (void *cls,
-                           const struct GNUNET_MessageHeader *msg)
-{
-  struct GNUNET_MULTICAST_Group *grp = cls;
-
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "%p Got fragment ACK. in_transmit=%u, acks_pending=%u\n",
-       grp, grp->in_transmit, grp->acks_pending);
-
-  if (0 == grp->acks_pending)
-  {
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "%p Ignoring extraneous fragment ACK.\n", grp);
-    return;
-  }
-  grp->acks_pending--;
-
-  if (GNUNET_YES != grp->in_transmit)
-    return;
-
-  if (GNUNET_YES == grp->is_origin)
-    origin_to_all ((struct GNUNET_MULTICAST_Origin *) grp);
-  else
-    member_to_origin ((struct GNUNET_MULTICAST_Member *) grp);
-
-  grp->reconnect_delay = GNUNET_TIME_UNIT_MILLISECONDS;
-}
-
-
-/**
- * Check unicast request.
- */
-static int
-check_origin_request (void *cls,
-                      const struct GNUNET_MULTICAST_RequestHeader *req)
-{
-  return GNUNET_OK;
-}
-
-
-/**
- * Origin receives unicast request from a member.
- */
-static void
-handle_origin_request (void *cls,
-                       const struct GNUNET_MULTICAST_RequestHeader *req)
-{
-  struct GNUNET_MULTICAST_Group *grp;
-  struct GNUNET_MULTICAST_Origin *orig = cls;
-  grp = &orig->grp;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Calling request callback with a request of size %u.\n",
-              ntohs (req->header.size));
-
-  if (NULL != orig->request_cb)
-    orig->request_cb (grp->cb_cls, req);
-
-  grp->reconnect_delay = GNUNET_TIME_UNIT_MILLISECONDS;
-}
-
-
-/**
- * Receive multicast replay request from service.
- */
-static void
-handle_group_replay_request (void *cls,
-                             const struct MulticastReplayRequestMessage *rep)
-
-{
-  struct GNUNET_MULTICAST_Group *grp = cls;
-
-  if (GNUNET_YES == grp->is_disconnecting)
-    return;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Got replay request.\n");
-
-  if (0 != rep->fragment_id)
-  {
-    if (NULL != grp->replay_frag_cb)
-    {
-      struct GNUNET_MULTICAST_ReplayHandle * rh = GNUNET_malloc (sizeof (*rh));
-      rh->grp = grp;
-      rh->req = *rep;
-      grp->replay_frag_cb (grp->cb_cls, &rep->member_pub_key,
-                           GNUNET_ntohll (rep->fragment_id),
-                           GNUNET_ntohll (rep->flags), rh);
-    }
-  }
-  else if (0 != rep->message_id)
-  {
-    if (NULL != grp->replay_msg_cb)
-    {
-      struct GNUNET_MULTICAST_ReplayHandle * rh = GNUNET_malloc (sizeof (*rh));
-      rh->grp = grp;
-      rh->req = *rep;
-      grp->replay_msg_cb (grp->cb_cls, &rep->member_pub_key,
-                          GNUNET_ntohll (rep->message_id),
-                          GNUNET_ntohll (rep->fragment_offset),
-                          GNUNET_ntohll (rep->flags), rh);
-    }
-  }
-
-  grp->reconnect_delay = GNUNET_TIME_UNIT_MILLISECONDS;
-}
-
-
-/**
- * Check replay response.
- */
-static int
-check_member_replay_response (void *cls,
-                              const struct MulticastReplayResponseMessage *res)
-{
-  uint16_t size = ntohs (res->header.size);
-
-  if (sizeof (*res) == size)
-    return GNUNET_OK;
-
-  if (sizeof (*res) + sizeof (struct GNUNET_MULTICAST_MessageHeader) <= size)
-    return GNUNET_OK;
-
-  return GNUNET_SYSERR;
-}
-
-
-/**
- * Receive replay response from service.
- */
-static void
-handle_member_replay_response (void *cls,
-                               const struct MulticastReplayResponseMessage *res)
-{
-  struct GNUNET_MULTICAST_Group *grp;
-  struct GNUNET_MULTICAST_Member *mem = cls;
-  grp = &mem->grp;
-
-  if (GNUNET_YES == grp->is_disconnecting)
-    return;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Got replay response.\n");
-
-  // FIXME: return result
-}
-
-
-/**
- * Check join decision.
- */
-static int
-check_member_join_decision (void *cls,
-                            const struct MulticastJoinDecisionMessageHeader *hdcsn)
-{
-  return GNUNET_OK; // checked in handle below
-}
-
-
-/**
- * Member receives join decision.
- */
-static void
-handle_member_join_decision (void *cls,
-                             const struct MulticastJoinDecisionMessageHeader *hdcsn)
-{
-  struct GNUNET_MULTICAST_Group *grp;
-  struct GNUNET_MULTICAST_Member *mem = cls;
-  grp = &mem->grp;
-
-  const struct MulticastJoinDecisionMessage *
-    dcsn = (const struct MulticastJoinDecisionMessage *) &hdcsn[1];
-
-  uint16_t dcsn_size = ntohs (dcsn->header.size);
-  int is_admitted = ntohl (dcsn->is_admitted);
-
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "%p Member got join decision from multicast: %d\n",
-       mem, is_admitted);
-
-  const struct GNUNET_MessageHeader *join_resp = NULL;
-  uint16_t join_resp_size = 0;
-
-  uint16_t relay_count = ntohl (dcsn->relay_count);
-  const struct GNUNET_PeerIdentity *relays = NULL;
-  uint16_t relay_size = relay_count * sizeof (*relays);
-  if (0 < relay_count)
-  {
-    if (dcsn_size < sizeof (*dcsn) + relay_size)
-    {
-      GNUNET_break_op (0);
-      is_admitted = GNUNET_SYSERR;
-    }
-    else
-    {
-      relays = (struct GNUNET_PeerIdentity *) &dcsn[1];
-    }
-  }
-
-  if (sizeof (*dcsn) + relay_size + sizeof (*join_resp) <= dcsn_size)
-  {
-    join_resp = (const struct GNUNET_MessageHeader *) ((char *) &dcsn[1] + relay_size);
-    join_resp_size = ntohs (join_resp->size);
-  }
-  if (dcsn_size < sizeof (*dcsn) + relay_size + join_resp_size)
-  {
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "Received invalid join decision message from multicast: %u < %u + %u + %u\n",
-         dcsn_size , sizeof (*dcsn), relay_size, join_resp_size);
-    GNUNET_break_op (0);
-    is_admitted = GNUNET_SYSERR;
-  }
-
-  if (NULL != mem->join_dcsn_cb)
-    mem->join_dcsn_cb (grp->cb_cls, is_admitted, &hdcsn->peer,
-                       relay_count, relays, join_resp);
-
-  // FIXME:
-  //if (GNUNET_YES != is_admitted)
-  //  GNUNET_MULTICAST_member_part (mem);
-
-  grp->reconnect_delay = GNUNET_TIME_UNIT_MILLISECONDS;
-}
-
-
-static void
-group_cleanup (struct GNUNET_MULTICAST_Group *grp)
-{
-  if (NULL != grp->connect_env)
-  {
-    GNUNET_MQ_discard (grp->connect_env);
-    grp->connect_env = NULL;
-  }
-  if (NULL != grp->mq)
-  {
-    GNUNET_MQ_destroy (grp->mq);
-    grp->mq = NULL;
-  }
-  if (NULL != grp->disconnect_cb)
-  {
-    grp->disconnect_cb (grp->disconnect_cls);
-    grp->disconnect_cb = NULL;
-  }
-  GNUNET_free (grp);
-}
-
-
-static void
-handle_group_part_ack (void *cls,
-                       const struct GNUNET_MessageHeader *msg)
-{
-  struct GNUNET_MULTICAST_Group *grp = cls;
-
-  group_cleanup (grp);
-}
-
-
-/**
- * Function to call with the decision made for a join request.
- *
- * Must be called once and only once in response to an invocation of the
- * #GNUNET_MULTICAST_JoinRequestCallback.
- *
- * @param join
- *        Join request handle.
- * @param is_admitted
- *        #GNUNET_YES    if the join is approved,
- *        #GNUNET_NO     if it is disapproved,
- *        #GNUNET_SYSERR if we cannot answer the request.
- * @param relay_count
- *        Number of relays given.
- * @param relays
- *        Array of suggested peers that might be useful relays to use
- *        when joining the multicast group (essentially a list of peers that
- *        are already part of the multicast group and might thus be willing
- *        to help with routing).  If empty, only this local peer (which must
- *        be the multicast origin) is a good candidate for building the
- *        multicast tree.  Note that it is unnecessary to specify our own
- *        peer identity in this array.
- * @param join_resp
- *        Message to send in response to the joining peer;
- *        can also be used to redirect the peer to a different group at the
- *        application layer; this response is to be transmitted to the
- *        peer that issued the request even if admission is denied.
- */
-struct GNUNET_MULTICAST_ReplayHandle *
-GNUNET_MULTICAST_join_decision (struct GNUNET_MULTICAST_JoinHandle *join,
-                                int is_admitted,
-                                uint16_t relay_count,
-                                const struct GNUNET_PeerIdentity *relays,
-                                const struct GNUNET_MessageHeader *join_resp)
-{
-  struct GNUNET_MULTICAST_Group *grp = join->group;
-  uint16_t join_resp_size = (NULL != join_resp) ? ntohs (join_resp->size) : 0;
-  uint16_t relay_size = relay_count * sizeof (*relays);
-
-  struct MulticastJoinDecisionMessageHeader *hdcsn;
-  struct MulticastJoinDecisionMessage *dcsn;
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg_extra (hdcsn, sizeof (*dcsn) + relay_size + join_resp_size,
-                               GNUNET_MESSAGE_TYPE_MULTICAST_JOIN_DECISION);
-  hdcsn->member_pub_key = join->member_pub_key;
-  hdcsn->peer = join->peer;
-
-  dcsn = (struct MulticastJoinDecisionMessage *) &hdcsn[1];
-  dcsn->header.type = htons (GNUNET_MESSAGE_TYPE_MULTICAST_JOIN_DECISION);
-  dcsn->header.size = htons (sizeof (*dcsn) + relay_size + join_resp_size);
-  dcsn->is_admitted = htonl (is_admitted);
-  dcsn->relay_count = htonl (relay_count);
-  if (0 < relay_size)
-    GNUNET_memcpy (&dcsn[1], relays, relay_size);
-  if (0 < join_resp_size)
-    GNUNET_memcpy (((char *) &dcsn[1]) + relay_size, join_resp, join_resp_size);
-
-  GNUNET_MQ_send (grp->mq, env);
-  GNUNET_free (join);
-  return NULL;
-}
-
-
-/**
- * Replay a message fragment for the multicast group.
- *
- * @param rh
- *        Replay handle identifying which replay operation was requested.
- * @param msg
- *        Replayed message fragment, NULL if not found / an error occurred.
- * @param ec
- *        Error code.  See enum GNUNET_MULTICAST_ReplayErrorCode
- *        If not #GNUNET_MULTICAST_REC_OK, the replay handle is invalidated.
- */
-void
-GNUNET_MULTICAST_replay_response (struct GNUNET_MULTICAST_ReplayHandle *rh,
-                                  const struct GNUNET_MessageHeader *msg,
-                                  enum GNUNET_MULTICAST_ReplayErrorCode ec)
-{
-  uint8_t msg_size = (NULL != msg) ? ntohs (msg->size) : 0;
-  struct MulticastReplayResponseMessage *res;
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg_extra (res, msg_size,
-                               GNUNET_MESSAGE_TYPE_MULTICAST_REPLAY_RESPONSE);
-  res->fragment_id = rh->req.fragment_id;
-  res->message_id = rh->req.message_id;
-  res->fragment_offset = rh->req.fragment_offset;
-  res->flags = rh->req.flags;
-  res->error_code = htonl (ec);
-
-  if (GNUNET_MULTICAST_REC_OK == ec)
-  {
-    GNUNET_assert (NULL != msg);
-    GNUNET_memcpy (&res[1], msg, msg_size);
-  }
-
-  GNUNET_MQ_send (rh->grp->mq, env);
-
-  if (GNUNET_MULTICAST_REC_OK != ec)
-    GNUNET_free (rh);
-}
-
-
-/**
- * Indicate the end of the replay session.
- *
- * Invalidates the replay handle.
- *
- * @param rh
- *        Replay session to end.
- */
-void
-GNUNET_MULTICAST_replay_response_end (struct GNUNET_MULTICAST_ReplayHandle *rh)
-{
-  struct MulticastReplayResponseMessage *end;
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg (end, GNUNET_MESSAGE_TYPE_MULTICAST_REPLAY_RESPONSE_END);
-
-  end->fragment_id = rh->req.fragment_id;
-  end->message_id = rh->req.message_id;
-  end->fragment_offset = rh->req.fragment_offset;
-  end->flags = rh->req.flags;
-
-  GNUNET_MQ_send (rh->grp->mq, env);
-  GNUNET_free (rh);
-}
-
-
-/**
- * Replay a message for the multicast group.
- *
- * @param rh
- *        Replay handle identifying which replay operation was requested.
- * @param notify
- *        Function to call to get the message.
- * @param notify_cls
- *        Closure for @a notify.
- */
-void
-GNUNET_MULTICAST_replay_response2 (struct GNUNET_MULTICAST_ReplayHandle *rh,
-                                   GNUNET_MULTICAST_ReplayTransmitNotify notify,
-                                   void *notify_cls)
-{
-}
-
-
-static void
-origin_connect (struct GNUNET_MULTICAST_Origin *orig);
-
-
-static void
-origin_reconnect (void *cls)
-{
-  origin_connect (cls);
-}
-
-
-/**
- * Origin client disconnected from service.
- *
- * Reconnect after backoff period.
- */
-static void
-origin_disconnected (void *cls, enum GNUNET_MQ_Error error)
-{
-  struct GNUNET_MULTICAST_Origin *orig = cls;
-  struct GNUNET_MULTICAST_Group *grp = &orig->grp;
-
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Origin client disconnected (%d), re-connecting\n",
-       (int) error);
-  if (NULL != grp->mq)
-  {
-    GNUNET_MQ_destroy (grp->mq);
-    grp->mq = NULL;
-  }
-
-  grp->reconnect_task = GNUNET_SCHEDULER_add_delayed (grp->reconnect_delay,
-                                                      origin_reconnect,
-                                                      orig);
-  grp->reconnect_delay = GNUNET_TIME_STD_BACKOFF (grp->reconnect_delay);
-}
-
-
-/**
- * Connect to service as origin.
- */
-static void
-origin_connect (struct GNUNET_MULTICAST_Origin *orig)
-{
-  struct GNUNET_MULTICAST_Group *grp = &orig->grp;
-
-  struct GNUNET_MQ_MessageHandler handlers[] = {
-    GNUNET_MQ_hd_var_size (group_message,
-                           GNUNET_MESSAGE_TYPE_MULTICAST_MESSAGE,
-                           struct GNUNET_MULTICAST_MessageHeader,
-                           grp),
-    GNUNET_MQ_hd_var_size (origin_request,
-                           GNUNET_MESSAGE_TYPE_MULTICAST_REQUEST,
-                           struct GNUNET_MULTICAST_RequestHeader,
-                           orig),
-    GNUNET_MQ_hd_fixed_size (group_fragment_ack,
-                             GNUNET_MESSAGE_TYPE_MULTICAST_FRAGMENT_ACK,
-                             struct GNUNET_MessageHeader,
-                             grp),
-    GNUNET_MQ_hd_var_size (group_join_request,
-                           GNUNET_MESSAGE_TYPE_MULTICAST_JOIN_REQUEST,
-                           struct MulticastJoinRequestMessage,
-                           grp),
-    GNUNET_MQ_hd_fixed_size (group_part_ack,
-                             GNUNET_MESSAGE_TYPE_MULTICAST_PART_ACK,
-                             struct GNUNET_MessageHeader,
-                             grp),
-    GNUNET_MQ_hd_fixed_size (group_replay_request,
-                             GNUNET_MESSAGE_TYPE_MULTICAST_REPLAY_REQUEST,
-                             struct MulticastReplayRequestMessage,
-                             grp),
-    GNUNET_MQ_handler_end ()
-  };
-
-  grp->mq = GNUNET_CLIENT_connect (grp->cfg, "multicast",
-                                   handlers, origin_disconnected, orig);
-  GNUNET_assert (NULL != grp->mq);
-  GNUNET_MQ_send_copy (grp->mq, grp->connect_env);
-}
-
-
-/**
- * Start a multicast group.
- *
- * Will advertise the origin in the P2P overlay network under the respective
- * public key so that other peer can find this peer to join it.  Peers that
- * issue GNUNET_MULTICAST_member_join() can then transmit a join request to
- * either an existing group member or to the origin.  If the joining is
- * approved, the member is cleared for @e replay and will begin to receive
- * messages transmitted to the group.  If joining is disapproved, the failed
- * candidate will be given a response.  Members in the group can send messages
- * to the origin (one at a time).
- *
- * @param cfg
- *        Configuration to use.
- * @param priv_key
- *        ECC key that will be used to sign messages for this
- *        multicast session; public key is used to identify the multicast group;
- * @param max_fragment_id
- *        Maximum fragment ID already sent to the group.
- *        0 for a new group.
- * @param join_request_cb
- *        Function called to approve / disapprove joining of a peer.
- * @param replay_frag_cb
- *        Function that can be called to replay a message fragment.
- * @param replay_msg_cb
- *        Function that can be called to replay a message.
- * @param request_cb
- *        Function called with message fragments from group members.
- * @param message_cb
- *        Function called with the message fragments sent to the
- *        network by GNUNET_MULTICAST_origin_to_all().  These message fragments
- *        should be stored for answering replay requests later.
- * @param cls
- *        Closure for the various callbacks that follow.
- *
- * @return Handle for the origin, NULL on error.
- */
-struct GNUNET_MULTICAST_Origin *
-GNUNET_MULTICAST_origin_start (const struct GNUNET_CONFIGURATION_Handle *cfg,
-                               const struct GNUNET_CRYPTO_EddsaPrivateKey *priv_key,
-                               uint64_t max_fragment_id,
-                               GNUNET_MULTICAST_JoinRequestCallback join_request_cb,
-                               GNUNET_MULTICAST_ReplayFragmentCallback replay_frag_cb,
-                               GNUNET_MULTICAST_ReplayMessageCallback replay_msg_cb,
-                               GNUNET_MULTICAST_RequestCallback request_cb,
-                               GNUNET_MULTICAST_MessageCallback message_cb,
-                               void *cls)
-{
-  struct GNUNET_MULTICAST_Origin *orig = GNUNET_malloc (sizeof (*orig));
-  struct GNUNET_MULTICAST_Group *grp = &orig->grp;
-
-  struct MulticastOriginStartMessage *start;
-  grp->connect_env = GNUNET_MQ_msg (start,
-                                    GNUNET_MESSAGE_TYPE_MULTICAST_ORIGIN_START);
-  start->max_fragment_id = max_fragment_id;
-  start->group_key = *priv_key;
-
-  grp->cfg = cfg;
-  grp->is_origin = GNUNET_YES;
-  grp->reconnect_delay = GNUNET_TIME_UNIT_MILLISECONDS;
-
-  grp->cb_cls = cls;
-  grp->join_req_cb = join_request_cb;
-  grp->replay_frag_cb = replay_frag_cb;
-  grp->replay_msg_cb = replay_msg_cb;
-  grp->message_cb = message_cb;
-
-  orig->request_cb = request_cb;
-
-  origin_connect (orig);
-  return orig;
-}
-
-
-/**
- * Stop a multicast group.
- *
- * @param origin
- *        Multicast group to stop.
- */
-void
-GNUNET_MULTICAST_origin_stop (struct GNUNET_MULTICAST_Origin *orig,
-                              GNUNET_ContinuationCallback stop_cb,
-                              void *stop_cls)
-{
-  struct GNUNET_MULTICAST_Group *grp = &orig->grp;
-  struct GNUNET_MQ_Envelope *env;
-
-  grp->is_disconnecting = GNUNET_YES;
-  grp->disconnect_cb = stop_cb;
-  grp->disconnect_cls = stop_cls;
-  env = GNUNET_MQ_msg_header (GNUNET_MESSAGE_TYPE_MULTICAST_PART_REQUEST);
-  GNUNET_MQ_send (grp->mq, env);
-}
-
-
-static void
-origin_to_all (struct GNUNET_MULTICAST_Origin *orig)
-{
-  LOG (GNUNET_ERROR_TYPE_DEBUG, "%p origin_to_all()\n", orig);
-  struct GNUNET_MULTICAST_Group *grp = &orig->grp;
-  struct GNUNET_MULTICAST_OriginTransmitHandle *tmit = &orig->tmit;
-  GNUNET_assert (GNUNET_YES == grp->in_transmit);
-
-  size_t buf_size = GNUNET_MULTICAST_FRAGMENT_MAX_SIZE;
-  struct GNUNET_MULTICAST_MessageHeader *msg;
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg_extra (msg, buf_size - sizeof(*msg),
-                               GNUNET_MESSAGE_TYPE_MULTICAST_MESSAGE);
-
-  int ret = tmit->notify (tmit->notify_cls, &buf_size, &msg[1]);
-
-  if (! (GNUNET_YES == ret || GNUNET_NO == ret)
-      || GNUNET_MULTICAST_FRAGMENT_MAX_SIZE < buf_size)
-  {
-    LOG (GNUNET_ERROR_TYPE_ERROR,
-         "%p OriginTransmitNotify() returned error or invalid message size.\n",
-         orig);
-    /* FIXME: handle error */
-    GNUNET_MQ_discard (env);
-    return;
-  }
-
-  if (GNUNET_NO == ret && 0 == buf_size)
-  {
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "%p OriginTransmitNotify() - transmission paused.\n", orig);
-    GNUNET_MQ_discard (env);
-    return; /* Transmission paused. */
-  }
-
-  msg->header.size = htons (sizeof (*msg) + buf_size);
-  msg->message_id = GNUNET_htonll (tmit->message_id);
-  msg->group_generation = tmit->group_generation;
-  msg->fragment_offset = GNUNET_htonll (tmit->fragment_offset);
-  tmit->fragment_offset += sizeof (*msg) + buf_size;
-
-  grp->acks_pending++;
-  GNUNET_MQ_send (grp->mq, env);
-
-  if (GNUNET_YES == ret)
-    grp->in_transmit = GNUNET_NO;
-}
-
-
-/**
- * Send a message to the multicast group.
- *
- * @param orig
- *        Handle to the multicast group.
- * @param message_id
- *        Application layer ID for the message.  Opaque to multicast.
- * @param group_generation
- *        Group generation of the message.
- *        Documented in struct GNUNET_MULTICAST_MessageHeader.
- * @param notify
- *        Function to call to get the message.
- * @param notify_cls
- *        Closure for @a notify.
- *
- * @return Message handle on success,
- *         NULL on error (i.e. another request is already pending).
- */
-struct GNUNET_MULTICAST_OriginTransmitHandle *
-GNUNET_MULTICAST_origin_to_all (struct GNUNET_MULTICAST_Origin *orig,
-                                uint64_t message_id,
-                                uint64_t group_generation,
-                                GNUNET_MULTICAST_OriginTransmitNotify notify,
-                                void *notify_cls)
-{
-  struct GNUNET_MULTICAST_Group *grp = &orig->grp;
-  if (GNUNET_YES == grp->in_transmit)
-    return NULL;
-  grp->in_transmit = GNUNET_YES;
-
-  struct GNUNET_MULTICAST_OriginTransmitHandle *tmit = &orig->tmit;
-  tmit->origin = orig;
-  tmit->message_id = message_id;
-  tmit->fragment_offset = 0;
-  tmit->group_generation = group_generation;
-  tmit->notify = notify;
-  tmit->notify_cls = notify_cls;
-
-  origin_to_all (orig);
-  return tmit;
-}
-
-
-/**
- * Resume message transmission to multicast group.
- *
- * @param th
- *        Transmission to cancel.
- */
-void
-GNUNET_MULTICAST_origin_to_all_resume (struct GNUNET_MULTICAST_OriginTransmitHandle *th)
-{
-  struct GNUNET_MULTICAST_Group *grp = &th->origin->grp;
-  if (0 != grp->acks_pending || GNUNET_YES != grp->in_transmit)
-    return;
-  origin_to_all (th->origin);
-}
-
-
-/**
- * Cancel request for message transmission to multicast group.
- *
- * @param th
- *        Transmission to cancel.
- */
-void
-GNUNET_MULTICAST_origin_to_all_cancel (struct GNUNET_MULTICAST_OriginTransmitHandle *th)
-{
-  th->origin->grp.in_transmit = GNUNET_NO;
-}
-
-
-static void
-member_connect (struct GNUNET_MULTICAST_Member *mem);
-
-
-static void
-member_reconnect (void *cls)
-{
-  member_connect (cls);
-}
-
-
-/**
- * Member client disconnected from service.
- *
- * Reconnect after backoff period.
- */
-static void
-member_disconnected (void *cls, enum GNUNET_MQ_Error error)
-{
-  struct GNUNET_MULTICAST_Member *mem = cls;
-  struct GNUNET_MULTICAST_Group *grp = &mem->grp;
-
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Member client disconnected (%d), re-connecting\n",
-       (int) error);
-  GNUNET_MQ_destroy (grp->mq);
-  grp->mq = NULL;
-
-  grp->reconnect_task = GNUNET_SCHEDULER_add_delayed (grp->reconnect_delay,
-                                                      member_reconnect,
-                                                      mem);
-  grp->reconnect_delay = GNUNET_TIME_STD_BACKOFF (grp->reconnect_delay);
-}
-
-
-/**
- * Connect to service as member.
- */
-static void
-member_connect (struct GNUNET_MULTICAST_Member *mem)
-{
-  struct GNUNET_MULTICAST_Group *grp = &mem->grp;
-
-  struct GNUNET_MQ_MessageHandler handlers[] = {
-    GNUNET_MQ_hd_var_size (group_message,
-                           GNUNET_MESSAGE_TYPE_MULTICAST_MESSAGE,
-                           struct GNUNET_MULTICAST_MessageHeader,
-                           grp),
-    GNUNET_MQ_hd_fixed_size (group_fragment_ack,
-                             GNUNET_MESSAGE_TYPE_MULTICAST_FRAGMENT_ACK,
-                             struct GNUNET_MessageHeader,
-                             grp),
-    GNUNET_MQ_hd_var_size (group_join_request,
-                           GNUNET_MESSAGE_TYPE_MULTICAST_JOIN_REQUEST,
-                           struct MulticastJoinRequestMessage,
-                           grp),
-    GNUNET_MQ_hd_var_size (member_join_decision,
-                           GNUNET_MESSAGE_TYPE_MULTICAST_JOIN_DECISION,
-                           struct MulticastJoinDecisionMessageHeader,
-                           mem),
-    GNUNET_MQ_hd_fixed_size (group_part_ack,
-                             GNUNET_MESSAGE_TYPE_MULTICAST_PART_ACK,
-                             struct GNUNET_MessageHeader,
-                             grp),
-    GNUNET_MQ_hd_fixed_size (group_replay_request,
-                             GNUNET_MESSAGE_TYPE_MULTICAST_REPLAY_REQUEST,
-                             struct MulticastReplayRequestMessage,
-                             grp),
-    GNUNET_MQ_hd_var_size (member_replay_response,
-                           GNUNET_MESSAGE_TYPE_MULTICAST_REPLAY_RESPONSE,
-                           struct MulticastReplayResponseMessage,
-                           mem),
-    GNUNET_MQ_handler_end ()
-  };
-
-  grp->mq = GNUNET_CLIENT_connect (grp->cfg, "multicast",
-                                   handlers, member_disconnected, mem);
-  GNUNET_assert (NULL != grp->mq);
-  GNUNET_MQ_send_copy (grp->mq, grp->connect_env);
-}
-
-
-/**
- * Join a multicast group.
- *
- * The entity joining is always the local peer.  Further information about the
- * candidate can be provided in the @a join_request message.  If the join fails, the
- * @a message_cb is invoked with a (failure) response and then with NULL.  If
- * the join succeeds, outstanding (state) messages and ongoing multicast
- * messages will be given to the @a message_cb until the member decides to part
- * the group.  The @a replay_cb function may be called at any time by the
- * multicast service to support relaying messages to other members of the group.
- *
- * @param cfg
- *        Configuration to use.
- * @param group_key
- *        ECC public key that identifies the group to join.
- * @param member_key
- *        ECC key that identifies the member
- *        and used to sign requests sent to the origin.
- * @param origin
- *        Peer ID of the origin to send unicast requsets to.  If NULL,
- *        unicast requests are sent back via multiple hops on the reverse path
- *        of multicast messages.
- * @param relay_count
- *        Number of peers in the @a relays array.
- * @param relays
- *        Peer identities of members of the group, which serve as relays
- *        and can be used to join the group at. and send the @a join_request to.
- *        If empty, the @a join_request is sent directly to the @a origin.
- * @param join_msg
- *        Application-dependent join message to be passed to the peer @a origin.
- * @param join_request_cb
- *        Function called to approve / disapprove joining of a peer.
- * @param join_decision_cb
- *        Function called to inform about the join decision.
- * @param replay_frag_cb
- *        Function that can be called to replay message fragments
- *        this peer already knows from this group. NULL if this
- *        client is unable to support replay.
- * @param replay_msg_cb
- *        Function that can be called to replay message fragments
- *        this peer already knows from this group. NULL if this
- *        client is unable to support replay.
- * @param message_cb
- *        Function to be called for all message fragments we
- *        receive from the group, excluding those our @a replay_cb
- *        already has.
- * @param cls
- *        Closure for callbacks.
- *
- * @return Handle for the member, NULL on error.
- */
-struct GNUNET_MULTICAST_Member *
-GNUNET_MULTICAST_member_join (const struct GNUNET_CONFIGURATION_Handle *cfg,
-                              const struct GNUNET_CRYPTO_EddsaPublicKey *group_pub_key,
-                              const struct GNUNET_CRYPTO_EcdsaPrivateKey *member_key,
-                              const struct GNUNET_PeerIdentity *origin,
-                              uint16_t relay_count,
-                              const struct GNUNET_PeerIdentity *relays,
-                              const struct GNUNET_MessageHeader *join_msg,
-                              GNUNET_MULTICAST_JoinRequestCallback join_request_cb,
-                              GNUNET_MULTICAST_JoinDecisionCallback join_decision_cb,
-                              GNUNET_MULTICAST_ReplayFragmentCallback replay_frag_cb,
-                              GNUNET_MULTICAST_ReplayMessageCallback replay_msg_cb,
-                              GNUNET_MULTICAST_MessageCallback message_cb,
-                              void *cls)
-{
-  struct GNUNET_MULTICAST_Member *mem = GNUNET_malloc (sizeof (*mem));
-  struct GNUNET_MULTICAST_Group *grp = &mem->grp;
-
-  uint16_t relay_size = relay_count * sizeof (*relays);
-  uint16_t join_msg_size = (NULL != join_msg) ? ntohs (join_msg->size) : 0;
-  struct MulticastMemberJoinMessage *join;
-  grp->connect_env = GNUNET_MQ_msg_extra (join, relay_size + join_msg_size,
-                                          GNUNET_MESSAGE_TYPE_MULTICAST_MEMBER_JOIN);
-  join->group_pub_key = *group_pub_key;
-  join->member_key = *member_key;
-  join->origin = *origin;
-  join->relay_count = ntohl (relay_count);
-  if (0 < relay_size)
-    GNUNET_memcpy (&join[1], relays, relay_size);
-  if (0 < join_msg_size)
-    GNUNET_memcpy (((char *) &join[1]) + relay_size, join_msg, join_msg_size);
-
-  grp->cfg = cfg;
-  grp->is_origin = GNUNET_NO;
-  grp->reconnect_delay = GNUNET_TIME_UNIT_MILLISECONDS;
-
-  mem->join_dcsn_cb = join_decision_cb;
-  grp->join_req_cb = join_request_cb;
-  grp->replay_frag_cb = replay_frag_cb;
-  grp->replay_msg_cb = replay_msg_cb;
-  grp->message_cb = message_cb;
-  grp->cb_cls = cls;
-
-  member_connect (mem);
-  return mem;
-}
-
-
-/**
- * Part a multicast group.
- *
- * Disconnects from all group members and invalidates the @a member handle.
- *
- * An application-dependent part message can be transmitted beforehand using
- * #GNUNET_MULTICAST_member_to_origin())
- *
- * @param member
- *        Membership handle.
- */
-void
-GNUNET_MULTICAST_member_part (struct GNUNET_MULTICAST_Member *mem,
-                              GNUNET_ContinuationCallback part_cb,
-                              void *part_cls)
-{
-  struct GNUNET_MULTICAST_Group *grp = &mem->grp;
-  struct GNUNET_MQ_Envelope *env;
-
-  mem->join_dcsn_cb = NULL;
-  grp->join_req_cb = NULL;
-  grp->message_cb = NULL;
-  grp->replay_msg_cb = NULL;
-  grp->replay_frag_cb = NULL;
-  grp->is_disconnecting = GNUNET_YES;
-  grp->disconnect_cb = part_cb;
-  grp->disconnect_cls = part_cls;
-  env = GNUNET_MQ_msg_header (GNUNET_MESSAGE_TYPE_MULTICAST_PART_REQUEST);
-  GNUNET_MQ_send (grp->mq, env);
-}
-
-
-void
-member_replay_request (struct GNUNET_MULTICAST_Member *mem,
-                       uint64_t fragment_id,
-                       uint64_t message_id,
-                       uint64_t fragment_offset,
-                       uint64_t flags)
-{
-  struct MulticastReplayRequestMessage *rep;
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg (rep, GNUNET_MESSAGE_TYPE_MULTICAST_REPLAY_REQUEST);
-
-  rep->fragment_id = GNUNET_htonll (fragment_id);
-  rep->message_id = GNUNET_htonll (message_id);
-  rep->fragment_offset = GNUNET_htonll (fragment_offset);
-  rep->flags = GNUNET_htonll (flags);
-
-  GNUNET_MQ_send (mem->grp.mq, env);
-}
-
-
-/**
- * Request a fragment to be replayed by fragment ID.
- *
- * Useful if messages below the @e max_known_fragment_id given when joining are
- * needed and not known to the client.
- *
- * @param member
- *        Membership handle.
- * @param fragment_id
- *        ID of a message fragment that this client would like to see replayed.
- * @param flags
- *        Additional flags for the replay request.
- *        It is used and defined by GNUNET_MULTICAST_ReplayFragmentCallback
- *
- * @return Replay request handle.
- */
-struct GNUNET_MULTICAST_MemberReplayHandle *
-GNUNET_MULTICAST_member_replay_fragment (struct GNUNET_MULTICAST_Member *mem,
-                                         uint64_t fragment_id,
-                                         uint64_t flags)
-{
-  member_replay_request (mem, fragment_id, 0, 0, flags);
-  // FIXME: return something useful
-  return NULL;
-}
-
-
-/**
- * Request a message fragment to be replayed.
- *
- * Useful if messages below the @e max_known_fragment_id given when joining are
- * needed and not known to the client.
- *
- * @param member
- *        Membership handle.
- * @param message_id
- *        ID of the message this client would like to see replayed.
- * @param fragment_offset
- *        Offset of the fragment within the message to replay.
- * @param flags
- *        Additional flags for the replay request.
- *        It is used & defined by GNUNET_MULTICAST_ReplayMessageCallback
- *
- * @return Replay request handle, NULL on error.
- */
-struct GNUNET_MULTICAST_MemberReplayHandle *
-GNUNET_MULTICAST_member_replay_message (struct GNUNET_MULTICAST_Member *mem,
-                                        uint64_t message_id,
-                                        uint64_t fragment_offset,
-                                        uint64_t flags)
-{
-  member_replay_request (mem, 0, message_id, fragment_offset, flags);
-  // FIXME: return something useful
-  return NULL;
-}
-
-
-static void
-member_to_origin (struct GNUNET_MULTICAST_Member *mem)
-{
-  LOG (GNUNET_ERROR_TYPE_DEBUG, "member_to_origin()\n");
-  struct GNUNET_MULTICAST_Group *grp = &mem->grp;
-  struct GNUNET_MULTICAST_MemberTransmitHandle *tmit = &mem->tmit;
-  GNUNET_assert (GNUNET_YES == grp->in_transmit);
-
-  size_t buf_size = GNUNET_MULTICAST_FRAGMENT_MAX_SIZE;
-  struct GNUNET_MULTICAST_RequestHeader *req;
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg_extra (req, buf_size - sizeof(*req),
-                               GNUNET_MESSAGE_TYPE_MULTICAST_REQUEST);
-
-  int ret = tmit->notify (tmit->notify_cls, &buf_size, &req[1]);
-
-  if (! (GNUNET_YES == ret || GNUNET_NO == ret)
-      || GNUNET_MULTICAST_FRAGMENT_MAX_SIZE < buf_size)
-  {
-    LOG (GNUNET_ERROR_TYPE_ERROR,
-         "MemberTransmitNotify() returned error or invalid message size. "
-         "ret=%d, buf_size=%u\n", ret, buf_size);
-    /* FIXME: handle error */
-    GNUNET_MQ_discard (env);
-    return;
-  }
-
-  if (GNUNET_NO == ret && 0 == buf_size)
-  {
-    /* Transmission paused. */
-    GNUNET_MQ_discard (env);
-    return;
-  }
-
-  req->header.size = htons (sizeof (*req) + buf_size);
-  req->request_id = GNUNET_htonll (tmit->request_id);
-  req->fragment_offset = GNUNET_ntohll (tmit->fragment_offset);
-  tmit->fragment_offset += sizeof (*req) + buf_size;
-
-  GNUNET_MQ_send (grp->mq, env);
-
-  if (GNUNET_YES == ret)
-    grp->in_transmit = GNUNET_NO;
-}
-
-
-/**
- * Send a message to the origin of the multicast group.
- *
- * @param mem
- *        Membership handle.
- * @param request_id
- *        Application layer ID for the request.  Opaque to multicast.
- * @param notify
- *        Callback to call to get the message.
- * @param notify_cls
- *        Closure for @a notify.
- *
- * @return Handle to cancel request, NULL on error (i.e. request already pending).
- */
-struct GNUNET_MULTICAST_MemberTransmitHandle *
-GNUNET_MULTICAST_member_to_origin (struct GNUNET_MULTICAST_Member *mem,
-                                   uint64_t request_id,
-                                   GNUNET_MULTICAST_MemberTransmitNotify notify,
-                                   void *notify_cls)
-{
-  if (GNUNET_YES == mem->grp.in_transmit)
-    return NULL;
-  mem->grp.in_transmit = GNUNET_YES;
-
-  struct GNUNET_MULTICAST_MemberTransmitHandle *tmit = &mem->tmit;
-  tmit->member = mem;
-  tmit->request_id = request_id;
-  tmit->fragment_offset = 0;
-  tmit->notify = notify;
-  tmit->notify_cls = notify_cls;
-
-  member_to_origin (mem);
-  return tmit;
-}
-
-
-/**
- * Resume message transmission to origin.
- *
- * @param th
- *        Transmission to cancel.
- */
-void
-GNUNET_MULTICAST_member_to_origin_resume (struct GNUNET_MULTICAST_MemberTransmitHandle *th)
-{
-  struct GNUNET_MULTICAST_Group *grp = &th->member->grp;
-  if (0 != grp->acks_pending || GNUNET_YES != grp->in_transmit)
-    return;
-  member_to_origin (th->member);
-}
-
-
-/**
- * Cancel request for message transmission to origin.
- *
- * @param th
- *        Transmission to cancel.
- */
-void
-GNUNET_MULTICAST_member_to_origin_cancel (struct GNUNET_MULTICAST_MemberTransmitHandle *th)
-{
-  th->member->grp.in_transmit = GNUNET_NO;
-}
-
-
-/* end of multicast_api.c */
diff --git a/src/multicast/test_multicast.c b/src/multicast/test_multicast.c
deleted file mode 100644 (file)
index 70efdcb..0000000
+++ /dev/null
@@ -1,758 +0,0 @@
-/*
- * This file is part of GNUnet
- * Copyright (C) 2013 GNUnet e.V.
- *
- * GNUnet is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNUnet is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
- */
-
-/**
- * @file multicast/test_multicast.c
- * @brief Tests for the Multicast API.
- * @author Gabor X Toth
- */
-
-#include <inttypes.h>
-
-#include "platform.h"
-#include "gnunet_crypto_lib.h"
-#include "gnunet_common.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_testing_lib.h"
-#include "gnunet_multicast_service.h"
-
-#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 30)
-
-/**
- * Return value from 'main'.
- */
-static int res;
-
-/**
- * Handle for task for timeout termination.
- */
-static struct GNUNET_SCHEDULER_Task * end_badly_task;
-
-static const struct GNUNET_CONFIGURATION_Handle *cfg;
-
-struct GNUNET_PeerIdentity this_peer;
-
-struct GNUNET_MULTICAST_Origin *origin;
-struct GNUNET_MULTICAST_Member *member;
-
-struct GNUNET_CRYPTO_EddsaPrivateKey *group_key;
-struct GNUNET_CRYPTO_EddsaPublicKey group_pub_key;
-
-struct GNUNET_CRYPTO_EcdsaPrivateKey *member_key;
-struct GNUNET_CRYPTO_EcdsaPublicKey member_pub_key;
-
-struct TransmitClosure {
-  struct GNUNET_MULTICAST_OriginTransmitHandle *orig_tmit;
-  struct GNUNET_MULTICAST_MemberTransmitHandle *mem_tmit;
-  char * data[16];
-  uint8_t data_delay[16];
-  uint8_t data_count;
-  uint8_t paused;
-  uint8_t n;
-} tmit_cls;
-
-struct OriginClosure {
-  uint8_t msgs_expected;
-  uint8_t n;
-} origin_cls;
-
-struct MemberClosure {
-  uint8_t msgs_expected;
-  size_t n;
-} member_cls;
-
-struct GNUNET_MessageHeader *join_req, *join_resp;
-
-enum
-{
-  TEST_NONE                = 0,
-  TEST_ORIGIN_START        = 1,
-  TEST_MEMBER_JOIN_REFUSE  = 2,
-  TEST_MEMBER_JOIN_ADMIT   = 3,
-  TEST_ORIGIN_TO_ALL       = 4,
-  TEST_ORIGIN_TO_ALL_RECV  = 5,
-  TEST_MEMBER_TO_ORIGIN    = 6,
-  TEST_MEMBER_REPLAY_ERROR = 7,
-  TEST_MEMBER_REPLAY_OK    = 8,
-  TEST_MEMBER_PART         = 9,
-  TEST_ORIGIN_STOP        = 10,
-} test;
-
-uint64_t replay_fragment_id;
-uint64_t replay_flags;
-
-static void
-member_join (int t);
-
-
-/**
- * Clean up all resources used.
- */
-static void
-cleanup ()
-{
-  if (NULL != member)
-  {
-    GNUNET_MULTICAST_member_part (member, NULL, NULL);
-    member = NULL;
-  }
-  if (NULL != origin)
-  {
-    GNUNET_MULTICAST_origin_stop (origin, NULL, NULL);
-    origin = NULL;
-  }
-}
-
-
-/**
- * Terminate the test case (failure).
- *
- * @param cls NULL
- */
-static void
-end_badly (void *cls)
-{
-  res = 1;
-  cleanup ();
-  GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Test FAILED.\n");
-}
-
-
-/**
- * Terminate the test case (success).
- *
- * @param cls NULL
- */
-static void
-end_normally (void *cls)
-{
-  res = 0;
-  cleanup ();
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Test PASSED.\n");
-}
-
-
-/**
- * Finish the test case (successfully).
- */
-static void
-end ()
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Ending tests.\n");
-
-  if (end_badly_task != NULL)
-  {
-    GNUNET_SCHEDULER_cancel (end_badly_task);
-    end_badly_task = NULL;
-  }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MILLISECONDS,
-                               &end_normally, NULL);
-}
-
-
-static void
-tmit_resume (void *cls)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Transmission resumed.\n");
-  struct TransmitClosure *tmit = cls;
-  if (NULL != tmit->orig_tmit)
-    GNUNET_MULTICAST_origin_to_all_resume (tmit->orig_tmit);
-  else if (NULL != tmit->mem_tmit)
-    GNUNET_MULTICAST_member_to_origin_resume (tmit->mem_tmit);
-}
-
-
-static int
-tmit_notify (void *cls, size_t *data_size, void *data)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Test #%u: origin_tmit_notify()\n", test);
-  struct TransmitClosure *tmit = cls;
-
-  if (0 == tmit->data_count)
-  {
-    *data_size = 0;
-    return GNUNET_YES;
-  }
-
-  uint16_t size = strlen (tmit->data[tmit->n]);
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Transmit notify data: %u bytes available, processing fragment %u/%u (size %u).\n",
-              (unsigned int) *data_size,
-              tmit->n + 1,
-              tmit->data_count,
-              size);
-  if (*data_size < size)
-  {
-    *data_size = 0;
-    GNUNET_assert (0);
-    return GNUNET_SYSERR;
-  }
-
-  if (GNUNET_YES != tmit->paused && 0 < tmit->data_delay[tmit->n])
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Transmission paused.\n");
-    tmit->paused = GNUNET_YES;
-    GNUNET_SCHEDULER_add_delayed (
-      GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS,
-                                     tmit->data_delay[tmit->n]),
-      tmit_resume, tmit);
-    *data_size = 0;
-    return GNUNET_NO;
-  }
-  tmit->paused = GNUNET_NO;
-
-  *data_size = size;
-  GNUNET_memcpy (data, tmit->data[tmit->n], size);
-
-  return ++tmit->n < tmit->data_count ? GNUNET_NO : GNUNET_YES;
-}
-
-
-static void
-member_recv_join_request (void *cls,
-                          const struct GNUNET_CRYPTO_EcdsaPublicKey *member_key,
-                          const struct GNUNET_MessageHeader *join_msg,
-                          struct GNUNET_MULTICAST_JoinHandle *jh)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%u: member_recv_join_request()\n", test);
-}
-
-
-static void
-origin_stopped (void *cls)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%u: origin_stopped()\n", test);
-  end ();
-}
-
-
-static void
-schedule_origin_stop (void *cls)
-{
-  test = TEST_ORIGIN_STOP;
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%u: origin_stop()\n", test);
-  GNUNET_MULTICAST_origin_stop (origin, origin_stopped, NULL);
-  origin = NULL;
-}
-
-
-static void
-member_parted (void *cls)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%u: member_parted()\n", test);
-  member = NULL;
-
-  switch (test)
-  {
-  case TEST_MEMBER_JOIN_REFUSE:
-    // Test 3 starts here
-    member_join (TEST_MEMBER_JOIN_ADMIT);
-    break;
-
-  case TEST_MEMBER_PART:
-    GNUNET_SCHEDULER_add_now (&schedule_origin_stop, NULL);
-    break;
-
-  default:
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "Invalid test #%d in member_parted()\n", test);
-    GNUNET_assert (0);
-  }
-}
-
-
-static void
-schedule_member_part (void *cls)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%u: schedule_member_part()\n", test);
-  GNUNET_MULTICAST_member_part (member, member_parted, NULL);
-}
-
-
-static void
-member_part ()
-{
-  test = TEST_MEMBER_PART;
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%u: member_part()\n", test);
-  // Test 10 starts here
-  GNUNET_SCHEDULER_add_now (&schedule_member_part, NULL);
-}
-
-
-static void
-member_replay_ok ()
-{
-  // Execution of test 8 here
-  test = TEST_MEMBER_REPLAY_OK;
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%u: member_replay_ok()\n", test);
-  replay_fragment_id = 1;
-  replay_flags = 1 | 1<<11;
-  GNUNET_MULTICAST_member_replay_fragment (member, replay_fragment_id,
-                                           replay_flags);
-}
-
-
-static void
-member_replay_error ()
-{
-  test = TEST_MEMBER_REPLAY_ERROR;
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%u: member_replay_error()\n", test);
-  replay_fragment_id = 1234;
-  replay_flags = 11 | 1<<11;
-  GNUNET_MULTICAST_member_replay_fragment (member, replay_fragment_id,
-                                           replay_flags);
-}
-
-
-static void
-origin_recv_replay_msg (void *cls,
-                        const struct GNUNET_CRYPTO_EcdsaPublicKey *member_key,
-                        uint64_t message_id,
-                        uint64_t fragment_offset,
-                        uint64_t flags,
-                        struct GNUNET_MULTICAST_ReplayHandle *rh)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%u: origin_recv_replay_msg()\n", test);
-  GNUNET_assert (0);
-}
-
-
-static void
-member_recv_replay_msg (void *cls,
-                        const struct GNUNET_CRYPTO_EcdsaPublicKey *member_key,
-                        uint64_t message_id,
-                        uint64_t fragment_offset,
-                        uint64_t flags,
-                        struct GNUNET_MULTICAST_ReplayHandle *rh)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%u: member_recv_replay_msg()\n", test);
-  GNUNET_assert (0);
-}
-
-
-static void
-origin_recv_replay_frag (void *cls,
-                         const struct GNUNET_CRYPTO_EcdsaPublicKey *member_key,
-                         uint64_t fragment_id,
-                         uint64_t flags,
-                         struct GNUNET_MULTICAST_ReplayHandle *rh)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%u: origin_recv_replay_frag()"
-              " - fragment_id=%" PRIu64 " flags=%" PRIu64 "\n",
-              test, fragment_id, flags);
-  GNUNET_assert (replay_fragment_id == fragment_id && replay_flags == flags);
-  switch (test)
-  {
-  case TEST_MEMBER_REPLAY_ERROR:
-    // Test 8 starts here
-    GNUNET_MULTICAST_replay_response (rh, NULL, GNUNET_SYSERR);
-    member_replay_ok ();
-    break;
-
-  case TEST_MEMBER_REPLAY_OK:
-  {
-    struct GNUNET_MULTICAST_MessageHeader mmsg = {
-      .header = {
-        .type = htons (GNUNET_MESSAGE_TYPE_MULTICAST_MESSAGE),
-        .size = htons (sizeof (mmsg)),
-      },
-      .fragment_id = GNUNET_htonll (1),
-      .message_id = GNUNET_htonll (1),
-      .fragment_offset = 0,
-      .group_generation = GNUNET_htonll (1),
-      .flags = 0,
-    };
-    member_cls.n = 0;
-    member_cls.msgs_expected = 1;
-    GNUNET_MULTICAST_replay_response (rh, &mmsg.header, GNUNET_MULTICAST_REC_OK);
-    GNUNET_MULTICAST_replay_response_end (rh);
-    break;
-  }
-
-  default:
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "Invalid test #%d in origin_recv_replay_frag()\n", test);
-    GNUNET_assert (0);
-  }
-}
-
-
-static void
-member_recv_replay_frag (void *cls,
-                         const struct GNUNET_CRYPTO_EcdsaPublicKey *member_key,
-                         uint64_t fragment_id,
-                         uint64_t flags,
-                         struct GNUNET_MULTICAST_ReplayHandle *rh)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%u: member_recv_replay_frag()\n", test);
-  GNUNET_assert (0);
-}
-
-
-static void
-origin_recv_request (void *cls,
-                     const struct GNUNET_MULTICAST_RequestHeader *req)
-{
-  struct OriginClosure *ocls = cls;
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%u: origin_recv_request()\n", test);
-  if (++ocls->n != ocls->msgs_expected)
-    return;
-
-  GNUNET_assert (0 == memcmp (&req->member_pub_key,
-                              &member_pub_key, sizeof (member_pub_key)));
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Test #%u: verify message content, take first 3 bytes: %.3s\n",
-              test, (char *)&req[1]);
-  GNUNET_assert (0 == memcmp (&req[1], "abc", 3));
-
-  // Test 7 starts here
-  member_replay_error ();
-}
-
-
-static void
-member_to_origin ()
-{
-  test = TEST_MEMBER_TO_ORIGIN;
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%u: member_to_origin()\n", test);
-
-  struct TransmitClosure *tmit = &tmit_cls;
-  *tmit = (struct TransmitClosure) {};
-  tmit->data[0] = "abc def";
-  tmit->data[1] = "ghi jkl mno";
-  tmit->data_delay[1] = 2;
-  tmit->data[2] = "pqr stuw xyz";
-  tmit->data_count = 3;
-
-  origin_cls.n = 0;
-  origin_cls.msgs_expected = 1;
-
-  tmit->mem_tmit = GNUNET_MULTICAST_member_to_origin (member, 1,
-                                                      tmit_notify, tmit);
-}
-
-
-static void
-member_recv_message (void *cls,
-                     const struct GNUNET_MULTICAST_MessageHeader *msg)
-{
-  struct MemberClosure *mcls = cls;
-
-  // Test 5 starts here after message has been received from origin
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Test #%u: member_recv_message() %u/%u\n",
-              test,
-              (unsigned int) (mcls->n + 1),
-              mcls->msgs_expected);
-  if (++mcls->n != mcls->msgs_expected)
-    return;
-
-  // FIXME: check message content
-
-  switch (test)
-  {
-  case TEST_ORIGIN_TO_ALL:
-    test = TEST_ORIGIN_TO_ALL_RECV;
-    break;
-
-  case TEST_ORIGIN_TO_ALL_RECV:
-    // Test 6 starts here
-    member_to_origin ();
-    break;
-
-  case TEST_MEMBER_REPLAY_OK:
-    // Test 9 starts here
-    GNUNET_assert (replay_fragment_id == GNUNET_ntohll (msg->fragment_id));
-    member_part ();
-    break;
-
-  default:
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "Invalid test #%d in origin_recv_message()\n", test);
-    GNUNET_assert (0);
-  }
-}
-
-
-static void
-origin_recv_message (void *cls,
-                     const struct GNUNET_MULTICAST_MessageHeader *msg)
-{
-  struct OriginClosure *ocls = cls;
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%u: origin_recv_message() %u/%u\n",
-              test, ocls->n + 1, ocls->msgs_expected);
-  if (++ocls->n != ocls->msgs_expected)
-    return;
-
-  // FIXME: check message content
-
-  switch (test)
-  {
-  case TEST_ORIGIN_TO_ALL:
-    // Prepare to execute test 5
-    test = TEST_ORIGIN_TO_ALL_RECV;
-    break;
-
-  case TEST_ORIGIN_TO_ALL_RECV:
-    // Test 6 starts here
-    member_to_origin ();
-    break;
-
-  default:
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "Invalid test #%d in origin_recv_message()\n", test);
-    GNUNET_assert (0);
-  }
-}
-
-
-static void
-origin_to_all ()
-{
-  test = TEST_ORIGIN_TO_ALL;
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%u: origin_to_all()\n", test);
-
-  struct TransmitClosure *tmit = &tmit_cls;
-  *tmit = (struct TransmitClosure) {};
-  tmit->data[0] = "ABC DEF";
-  tmit->data[1] =  GNUNET_malloc (GNUNET_MULTICAST_FRAGMENT_MAX_PAYLOAD + 1);
-  uint16_t i;
-  for (i = 0; i < GNUNET_MULTICAST_FRAGMENT_MAX_PAYLOAD; i++)
-    tmit->data[1][i] = (0 == i % 10000) ? '0' + i / 10000 : '_';
-  tmit->data[2] = "GHI JKL MNO";
-  tmit->data_delay[2] = 2;
-  tmit->data[3] = "PQR STUW XYZ";
-  tmit->data_count = 4;
-
-  origin_cls.n = member_cls.n = 0;
-  origin_cls.msgs_expected = member_cls.msgs_expected = tmit->data_count;
-
-  tmit->orig_tmit = GNUNET_MULTICAST_origin_to_all (origin, 1, 1,
-                                                    tmit_notify, tmit);
-}
-
-
-static void
-member_recv_join_decision (void *cls,
-                           int is_admitted,
-                           const struct GNUNET_PeerIdentity *peer,
-                           uint16_t relay_count,
-                           const struct GNUNET_PeerIdentity *relays,
-                           const struct GNUNET_MessageHeader *join_msg)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%u: member_recv_join_decision() - is_admitted: %d\n",
-              test, is_admitted);
-
-  GNUNET_assert (join_msg->size == join_resp->size);
-  GNUNET_assert (join_msg->type == join_resp->type);
-  GNUNET_assert (0 == memcmp (join_msg, join_resp, ntohs (join_resp->size)));
-
-  switch (test)
-  {
-  case TEST_MEMBER_JOIN_REFUSE:
-    GNUNET_assert (0 == relay_count);
-    // Test 3 starts here
-    GNUNET_SCHEDULER_add_now (&schedule_member_part, NULL);
-    break;
-
-  case TEST_MEMBER_JOIN_ADMIT:
-    GNUNET_assert (1 == relay_count);
-    GNUNET_assert (0 == memcmp (relays, &this_peer, sizeof (this_peer)));
-    // Test 4 starts here
-    origin_to_all ();
-    break;
-
-  default:
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "Invalid test #%d in member_recv_join_decision()\n", test);
-    GNUNET_assert (0);
-  }
-}
-
-/**
- * Test: origin receives join request
- */
-static void
-origin_recv_join_request (void *cls,
-                          const struct GNUNET_CRYPTO_EcdsaPublicKey *mem_key,
-                          const struct GNUNET_MessageHeader *join_msg,
-                          struct GNUNET_MULTICAST_JoinHandle *jh)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%u: origin_recv_join_request()\n", test);
-
-  GNUNET_assert (0 == memcmp (mem_key, &member_pub_key, sizeof (member_pub_key)));
-  GNUNET_assert (join_msg->size == join_req->size);
-  GNUNET_assert (join_msg->type == join_req->type);
-  GNUNET_assert (0 == memcmp (join_msg, join_req, ntohs (join_req->size)));
-
-  char data[] = "here's the decision";
-  uint8_t data_size = strlen (data) + 1;
-  join_resp = GNUNET_malloc (sizeof (join_resp) + data_size);
-  join_resp->size = htons (sizeof (join_resp) + data_size);
-  join_resp->type = htons (456);
-  GNUNET_memcpy (&join_resp[1], data, data_size);
-
-  switch (test)
-  {
-  case TEST_MEMBER_JOIN_REFUSE:
-    // Test 3 starts here
-    GNUNET_MULTICAST_join_decision (jh, GNUNET_NO, 0, NULL, join_resp);
-    break;
-
-  case TEST_MEMBER_JOIN_ADMIT:
-    // Test 3 is running
-    GNUNET_MULTICAST_join_decision (jh, GNUNET_YES, 1, &this_peer, join_resp);
-    break;
-
-  default:
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "Invalid test #%d in origin_recv_join_request()\n", test);
-    GNUNET_assert (0);
-    break;
-  }
-}
-
-/**
- * Test: member joins multicast group
- */
-static void
-member_join (int t)
-{
-  test = t;
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%u: member_join()\n", test);
-
-  member_key = GNUNET_CRYPTO_ecdsa_key_create ();
-  GNUNET_CRYPTO_ecdsa_key_get_public (member_key, &member_pub_key);
-
-  if (NULL != join_req)
-    GNUNET_free (join_req);
-
-  char data[] = "let me in!";
-  uint8_t data_size = strlen (data) + 1;
-  join_req = GNUNET_malloc (sizeof (join_req) + data_size);
-  join_req->size = htons (sizeof (join_req) + data_size);
-  join_req->type = htons (123);
-  GNUNET_memcpy (&join_req[1], data, data_size);
-
-  member = GNUNET_MULTICAST_member_join (cfg, &group_pub_key, member_key,
-                                         &this_peer, 1, &this_peer, join_req,
-                                         member_recv_join_request,
-                                         member_recv_join_decision,
-                                         member_recv_replay_frag,
-                                         member_recv_replay_msg,
-                                         member_recv_message,
-                                         &member_cls);
-}
-
-/**
- * Test: Start a multicast group as origin
- */
-static void
-origin_start ()
-{
-  test = TEST_ORIGIN_START;
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%u: origin_start()\n", test);
-
-  group_key = GNUNET_CRYPTO_eddsa_key_create ();
-  GNUNET_CRYPTO_eddsa_key_get_public (group_key, &group_pub_key);
-
-  origin = GNUNET_MULTICAST_origin_start (cfg, group_key, 0,
-                                          origin_recv_join_request,
-                                          origin_recv_replay_frag,
-                                          origin_recv_replay_msg,
-                                          origin_recv_request,
-                                          origin_recv_message,
-                                          &origin_cls);
-  // Test 2 starts here
-  member_join (TEST_MEMBER_JOIN_REFUSE);
-}
-
-
-/**
- * Main function of the test, run from scheduler.
- *
- * @param cls NULL
- * @param cfg configuration we use (also to connect to Multicast service)
- * @param peer handle to access more of the peer (not used)
- */
-static void
-#if DEBUG_TEST_MULTICAST
-run (void *cls,
-     char *const *args,
-     const char *cfgfile,
-     const struct GNUNET_CONFIGURATION_Handle *c)
-#else
-run (void *cls,
-     const struct GNUNET_CONFIGURATION_Handle *c,
-     struct GNUNET_TESTING_Peer *peer)
-#endif
-{
-  cfg = c;
-  end_badly_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT,
-                                                &end_badly, NULL);
-  GNUNET_CRYPTO_get_peer_identity (cfg, &this_peer);
-
-  // Test 1 starts here
-  origin_start ();
-}
-
-
-int
-main (int argc, char *argv[])
-{
-  res = 1;
-#if DEBUG_TEST_MULTICAST
-  const struct GNUNET_GETOPT_CommandLineOption opts[] = {
-    GNUNET_GETOPT_OPTION_END
-  };
-  if (GNUNET_OK != GNUNET_PROGRAM_run (argc, argv, "test-multicast",
-                                       "test-multicast [options]",
-                                       opts, &run, NULL))
-    return 1;
-#else
-  if (0 != GNUNET_TESTING_peer_run ("test-multicast", "test_multicast.conf", &run, NULL))
-    return 1;
-#endif
-  return res;
-}
-
-/* end of test_multicast.c */
diff --git a/src/multicast/test_multicast.conf b/src/multicast/test_multicast.conf
deleted file mode 100644 (file)
index b2f1a76..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-[testbed]
-HOSTNAME = localhost
-
-[arm]
-GLOBAL_POSTFIX=-L ERROR
-
-[multicast]
-#PREFIX = tmux new-window gdb -x ./cmd.gdb  --args
-#PREFIX = valgrind --leak-check=full
-UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-service-multicast.sock
-
-[vpn]
-START_ON_DEMAND = NO
-
-[peerinfo]
-# Do not use shipped gnunet HELLOs 
-USE_INCLUDED_HELLOS = NO
-
-# Option to disable all disk IO; only useful for testbed runs
-# (large-scale experiments); disables persistence of HELLOs!
-NO_IO = YES
-
-[hostlist]
-IMMEDIATE_START = NO
-START_ON_DEMAND = NO
-
-[nat]
-ENABLE_UPNP = NO
-
-[fs]
-IMMEDIATE_START = NO
-START_ON_DEMAND = NO
-
-[vpn]
-IMMEDIATE_START = NO
-START_ON_DEMAND = NO
-
-[revocation]
-IMMEDIATE_START = NO
-START_ON_DEMAND = NO
-
-[gns]
-IMMEDIATE_START = NO
-START_ON_DEMAND = NO
-
-[namestore]
-IMMEDIATE_START = NO
-START_ON_DEMAND = NO
-
-[namecache]
-IMMEDIATE_START = NO
-START_ON_DEMAND = NO
-
-[topology]
-IMMEDIATE_START = NO
-START_ON_DEMAND = NO
diff --git a/src/multicast/test_multicast_2peers.c b/src/multicast/test_multicast_2peers.c
deleted file mode 100644 (file)
index ea99602..0000000
+++ /dev/null
@@ -1,520 +0,0 @@
-/*
- * This file is part of GNUnet
- * Copyright (C) 2013 GNUnet e.V.
- *
- * GNUnet is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNUnet is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
- */
-
-/**
- * @file multicast/test_multicast_2peers.c
- * @brief Tests for the Multicast API with two peers doing the ping
- *        pong test.
- * @author xrs
- */
-
-#include <inttypes.h>
-
-#include "platform.h"
-#include "gnunet_crypto_lib.h"
-#include "gnunet_common.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_testbed_service.h"
-#include "gnunet_multicast_service.h"
-
-#define NUM_PEERS 2
-
-static struct GNUNET_TESTBED_Operation *op0;
-static struct GNUNET_TESTBED_Operation *op1;
-static struct GNUNET_TESTBED_Operation *pi_op0;
-static struct GNUNET_TESTBED_Operation *pi_op1;
-
-static struct GNUNET_TESTBED_Peer **peers;
-const struct GNUNET_PeerIdentity *peer_id[2];
-
-static struct GNUNET_SCHEDULER_Task *timeout_tid;
-
-static struct GNUNET_MULTICAST_Origin *origin;
-static struct GNUNET_MULTICAST_Member *member;
-
-struct GNUNET_CRYPTO_EddsaPrivateKey *group_key;
-struct GNUNET_CRYPTO_EddsaPublicKey group_pub_key;
-
-struct GNUNET_CRYPTO_EcdsaPrivateKey *member_key;
-struct GNUNET_CRYPTO_EcdsaPublicKey member_pub_key;
-
-/**
- * Global result for testcase.
- */
-static int result;
-
-
-/**
- * Function run on CTRL-C or shutdown (i.e. success/timeout/etc.).
- * Cleans up.
- */
-static void
-shutdown_task (void *cls)
-{
-  if (NULL != op0)
-  {
-    GNUNET_TESTBED_operation_done (op0);
-    op0 = NULL;
-  }
-  if (NULL != op1)
-  {
-    GNUNET_TESTBED_operation_done (op1);
-    op1 = NULL;
-  }
-  if (NULL != pi_op0)
-  {
-    GNUNET_TESTBED_operation_done (pi_op0);
-    pi_op0 = NULL;
-  }
-  if (NULL != pi_op1)
-  {
-    GNUNET_TESTBED_operation_done (pi_op1);
-    pi_op1 = NULL;
-  }
-  if (NULL != timeout_tid)
-    {
-      GNUNET_SCHEDULER_cancel (timeout_tid);
-      timeout_tid = NULL;
-    }
-}
-
-
-static void
-timeout_task (void *cls)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-             "Timeout!\n");
-  result = GNUNET_SYSERR;
-  GNUNET_SCHEDULER_shutdown ();
-}
-
-
-static void
-member_join_request (void *cls,
-                     const struct GNUNET_CRYPTO_EcdsaPublicKey *member_pub_key,
-                     const struct GNUNET_MessageHeader *join_msg,
-                     struct GNUNET_MULTICAST_JoinHandle *jh)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Member sent a join request.\n");
-
-}
-
-
-static int
-notify (void *cls,
-        size_t *data_size,
-        void *data)
-{
-
-  char text[] = "ping";
-  *data_size = strlen(text)+1;
-  GNUNET_memcpy(data, text, *data_size);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Member sents message to origin: %s\n", text);
-
-  return GNUNET_YES;
-}
-
-
-static void
-member_join_decision (void *cls,
-                      int is_admitted,
-                      const struct GNUNET_PeerIdentity *peer,
-                      uint16_t relay_count,
-                      const struct GNUNET_PeerIdentity *relays,
-                      const struct GNUNET_MessageHeader *join_msg)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Member received a decision from origin: %s\n",
-              (GNUNET_YES == is_admitted)
-              ? "accepted"
-              : "rejected");
-
-  if (GNUNET_YES == is_admitted)
-  {
-    struct GNUNET_MULTICAST_MemberTransmitHandle *req;
-
-    // FIXME: move to MQ-style API!
-    req = GNUNET_MULTICAST_member_to_origin (member,
-                                             0,
-                                             &notify,
-                                             NULL);
-  }
-}
-
-
-static void
-member_message (void *cls,
-                const struct GNUNET_MULTICAST_MessageHeader *msg)
-{
-  if (0 != strncmp ("pong", (char *)&msg[1], 4))
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "member did not receive pong\n");
-    result = GNUNET_SYSERR;
-    GNUNET_SCHEDULER_shutdown ();
-  }
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "member receives: %s\n", (char *)&msg[1]);
-
-  // Testcase ends here.
-  result = GNUNET_YES;
-  GNUNET_SCHEDULER_shutdown ();
-}
-
-
-static void
-origin_join_request (void *cls,
-                 const struct GNUNET_CRYPTO_EcdsaPublicKey *member_pub_key,
-                 const struct GNUNET_MessageHeader *join_msg,
-                 struct GNUNET_MULTICAST_JoinHandle *jh)
-{
-  struct GNUNET_MessageHeader *join_resp;
-
-  uint8_t data_size = ntohs (join_msg->size);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "origin got a join request...\n");
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "origin receives: '%s'\n", (char *)&join_msg[1]);
-
-  const char data[] = "Come in!";
-  data_size = strlen (data) + 1;
-  join_resp = GNUNET_malloc (sizeof (join_resp) + data_size);
-  join_resp->size = htons (sizeof (join_resp) + data_size);
-  join_resp->type = htons (123);
-  GNUNET_memcpy (&join_resp[1], data, data_size);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "origin sends: '%s'\n", data);
-
-  GNUNET_MULTICAST_join_decision (jh,
-                                  GNUNET_YES,
-                                  0,
-                                  NULL,
-                                  join_resp);
-  GNUNET_free (join_resp);
-  result = GNUNET_OK;
-}
-
-
-int
-origin_notify (void *cls,
-               size_t *data_size,
-               void *data)
-{
-  char text[] = "pong";
-
-  *data_size = strlen(text)+1;
-  GNUNET_memcpy (data,
-                 text,
-                 *data_size);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "origin sends (to all): %s\n", text);
-
-  return GNUNET_YES;
-}
-
-
-static void
-origin_request (void *cls,
-                const struct GNUNET_MULTICAST_RequestHeader *req)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "origin receives: %s\n", (char *)&req[1]);
-
-  if (0 != strncmp ("ping", (char *)&req[1], 4))
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "origin didn't reveice a correct request");
-
-  GNUNET_MULTICAST_origin_to_all (origin,
-                                  0,
-                                  0,
-                                  origin_notify,
-                                  NULL);
-}
-
-
-static void
-origin_message (void *cls,
-                const struct GNUNET_MULTICAST_MessageHeader *msg)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "origin message msg\n");
-}
-
-
-static void
-service_connect1 (void *cls,
-                  struct GNUNET_TESTBED_Operation *op,
-                  void *ca_result,
-                  const char *emsg)
-{
-  member = ca_result;
-
-  if (NULL == member)
-  {
-    result = GNUNET_SYSERR;
-    GNUNET_SCHEDULER_shutdown ();
-  }
-  else
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Connected to multicast service of member\n");
-  }
-}
-
-
-static void
-multicast_da1 (void *cls,
-               void * op_result)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Member parting from multicast group\n");
-
-  GNUNET_MULTICAST_member_part (member, NULL, NULL);
-}
-
-
-static void *
-multicast_ca1 (void *cls,
-               const struct GNUNET_CONFIGURATION_Handle *cfg)
-{
-  struct GNUNET_MessageHeader *join_msg;
-  void *ret;
-
-  // Get members keys
-  member_key = GNUNET_CRYPTO_ecdsa_key_create ();
-  GNUNET_CRYPTO_ecdsa_key_get_public (member_key, &member_pub_key);
-
-  char data[] = "Hi, can I enter?";
-  uint8_t data_size = strlen (data) + 1;
-  join_msg = GNUNET_malloc (sizeof (join_msg) + data_size);
-  join_msg->size = htons (sizeof (join_msg) + data_size);
-  join_msg->type = htons (123);
-  GNUNET_memcpy (&join_msg[1], data, data_size);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Members tries to join multicast group\n");
-
-  ret = GNUNET_MULTICAST_member_join (cfg,
-                                       &group_pub_key,
-                                       member_key,
-                                       peer_id[0],
-                                       0,
-                                       NULL,
-                                       join_msg, /* join message */
-                                       member_join_request,
-                                       member_join_decision,
-                                       NULL, /* no test for member_replay_frag */
-                                       NULL, /* no test for member_replay_msg */
-                                       member_message,
-                                       NULL);
-  GNUNET_free (join_msg);
-  return ret;
-}
-
-
-static void
-peer_information_cb (void *cls,
-                     struct GNUNET_TESTBED_Operation *op,
-                     const struct GNUNET_TESTBED_PeerInformation *pinfo,
-                     const char *emsg)
-{
-  int i = (int) (long) cls;
-
-  if (NULL == pinfo)
-  {
-    result = GNUNET_SYSERR;
-    GNUNET_SCHEDULER_shutdown ();
-  }
-
-  peer_id[i] = pinfo->result.id;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Got peer information of %s (%s)\n", (0==i)?"origin":"member" ,GNUNET_i2s(pinfo->result.id));
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Create member peer\n");
-
-  if (0 == i)
-  {
-    /* connect to multicast service of member */
-    op1 = GNUNET_TESTBED_service_connect (NULL,                    /* Closure for operation */
-                                          peers[1],                /* The peer whose service to connect to */
-                                          "multicast",             /* The name of the service */
-                                          service_connect1,   /* callback to call after a handle to service
-                                                                 is opened */
-                                          NULL,                    /* closure for the above callback */
-                                          multicast_ca1,      /* callback to call with peer's configuration;
-                                                                 this should open the needed service connection */
-                                          multicast_da1,     /* callback to be called when closing the
-                                                                opened service connection */
-                                          NULL);                   /* closure for the above two callbacks */
-  }
-}
-
-
-/**
- * Test logic of peer "0" being origin starts here.
- *
- * @param cls closure, for the example: NULL
- * @param op should be equal to "dht_op"
- * @param ca_result result of the connect operation, the
- *        connection to the DHT service
- * @param emsg error message, if testbed somehow failed to
- *        connect to the DHT.
- */
-static void
-service_connect0 (void *cls,
-                  struct GNUNET_TESTBED_Operation *op,
-                  void *ca_result,
-                  const char *emsg)
-{
-  origin = ca_result;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Connected to multicast service of origin\n");
-
-  // Get GNUnet identity of origin
-  pi_op0 = GNUNET_TESTBED_peer_get_information (peers[0],
-                                               GNUNET_TESTBED_PIT_IDENTITY,
-                                               peer_information_cb,
-                                               (void *) 0);
-  // Get GNUnet identity of member
-  pi_op1 = GNUNET_TESTBED_peer_get_information (peers[1],
-                                               GNUNET_TESTBED_PIT_IDENTITY,
-                                               peer_information_cb,
-                                               (void *) 1);
-
-  /* Connection to service successful. Here we'd usually do something with
-   * the service. */
-  result = GNUNET_OK;
-  //GNUNET_SCHEDULER_shutdown (); /* Also kills the testbed */
-}
-
-
-
-/**
- * Function run when service multicast has started and is providing us
- * with a configuration file.
- */
-static void *
-multicast_ca0 (void *cls,
-               const struct GNUNET_CONFIGURATION_Handle *cfg)
-{
-  group_key = GNUNET_CRYPTO_eddsa_key_create ();
-  GNUNET_CRYPTO_eddsa_key_get_public (group_key, &group_pub_key);
-
-  return GNUNET_MULTICAST_origin_start (cfg,
-                                        group_key,
-                                        0,
-                                        origin_join_request,
-                                        NULL, /* no test for origin_replay_frag */
-                                        NULL, /* no test for origin_replay_msg */
-                                        origin_request,
-                                        origin_message,
-                                        NULL);
-}
-
-static void
-multicast_da0 (void *cls,
-               void *op_result)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Origin closes multicast group\n");
-
-  GNUNET_MULTICAST_origin_stop (origin, NULL, NULL);
-}
-
-
-/**
- * Main function inovked from TESTBED once all of the
- * peers are up and running.  This one then connects
- * just to the multicast service of peer 0 and 1.
- * Peer 0 is going to be origin.
- * Peer 1 is going to be one member.
- * Origin will start a multicast group and the member will try to join it.
- * After that we execute some multicast test.
- *
- * @param cls closure
- * @param h the run handle
- * @param peers started peers for the test
- * @param num_peers size of the 'peers' array
- * @param links_succeeded number of links between peers that were created
- * @param links_failed number of links testbed was unable to establish
- */
-static void
-testbed_master (void *cls,
-     struct GNUNET_TESTBED_RunHandle *h,
-     unsigned int num_peers,
-     struct GNUNET_TESTBED_Peer **p,
-     unsigned int links_succeeded,
-     unsigned int links_failed)
-{
-  /* Testbed is ready with peers running and connected in a pre-defined overlay
-     topology (FIXME)  */
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Connected to testbed_master()\n");
-
-  peers = p;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Create origin peer\n");
-  op0 = GNUNET_TESTBED_service_connect (NULL,                    /* Closure for operation */
-                                        peers[0],                /* The peer whose service to connect to */
-                                        "multicast",             /* The name of the service */
-                                        service_connect0,   /* callback to call after a handle to service
-                                                               is opened */
-                                        NULL,                    /* closure for the above callback */
-                                        multicast_ca0,      /* callback to call with peer's configuration;
-                                                               this should open the needed service connection */
-                                        multicast_da0,     /* callback to be called when closing the
-                                                              opened service connection */
-                                        NULL);                   /* closure for the above two callbacks */
-
-  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL); /* Schedule a new task on shutdown */
-
-  /* Schedule the shutdown task with a delay of a few Seconds */
-  timeout_tid = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 50),
-                                             &timeout_task, NULL);
-}
-
-
-int
-main (int argc, char *argv[])
-{
-  int ret;
-
-  result = GNUNET_SYSERR;
-  ret = GNUNET_TESTBED_test_run
-      ("test-multicast-2peers",  /* test case name */
-       "test_multicast.conf", /* template configuration */
-       NUM_PEERS,       /* number of peers to start */
-       0LL, /* Event mask - set to 0 for no event notifications */
-       NULL, /* Controller event callback */
-       NULL, /* Closure for controller event callback */
-       testbed_master, /* continuation callback to be called when testbed setup is complete */
-       NULL); /* Closure for the test_master callback */
-  if ( (GNUNET_OK != ret) || (GNUNET_OK != result) )
-    return 1;
-  return 0;
-}
-
-
-/* end of test_multicast_2peers.c */
diff --git a/src/multicast/test_multicast_line.conf b/src/multicast/test_multicast_line.conf
deleted file mode 100644 (file)
index c1ce7c6..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-[testbed]
-HOSTNAME = localhost
-OVERLAY_TOPOLOGY = LINE
-
-[arm]
-GLOBAL_POSTFIX=-L ERROR
-
-[multicast]
-#PREFIX = tmux new-window gdb -x ./cmd.gdb  --args
-#PREFIX = valgrind --leak-check=full
-UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-service-multicast.sock
-
-[vpn]
-START_ON_DEMAND = NO
-
-[peerinfo]
-# Do not use shipped gnunet HELLOs 
-USE_INCLUDED_HELLOS = NO
-
-# Option to disable all disk IO; only useful for testbed runs
-# (large-scale experiments); disables persistence of HELLOs!
-NO_IO = YES
-
-[cadet]
-ID_ANNOUNCE_TIME = 5 s
-
-[hostlist]
-IMMEDIATE_START = NO
-START_ON_DEMAND = NO
-
-[nat]
-ENABLE_UPNP = NO
-
-[fs]
-IMMEDIATE_START = NO
-START_ON_DEMAND = NO
-
-[vpn]
-IMMEDIATE_START = NO
-START_ON_DEMAND = NO
-
-[revocation]
-IMMEDIATE_START = NO
-START_ON_DEMAND = NO
-
-[gns]
-IMMEDIATE_START = NO
-START_ON_DEMAND = NO
-
-[namestore]
-IMMEDIATE_START = NO
-START_ON_DEMAND = NO
-
-[namecache]
-IMMEDIATE_START = NO
-START_ON_DEMAND = NO
-
-[topology]
-IMMEDIATE_START = NO
-START_ON_DEMAND = NO
-
-[nse]
-WORKBITS = 0
diff --git a/src/multicast/test_multicast_multipeer.c b/src/multicast/test_multicast_multipeer.c
deleted file mode 100644 (file)
index 9b44e05..0000000
+++ /dev/null
@@ -1,643 +0,0 @@
-/*
- * This file is part of GNUnet
- * Copyright (C) 2013 GNUnet e.V.
- *
- * GNUnet is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNUnet is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
- */
-
-/**
- * @file multicast/test_multicast_multipeers.c
- * @brief Tests for the Multicast API with multiple peers.
- * @author xrs
- */
-
-#include <inttypes.h>
-
-#include "platform.h"
-#include "gnunet_crypto_lib.h"
-#include "gnunet_common.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_testbed_service.h"
-#include "gnunet_multicast_service.h"
-
-#define PEERS_REQUESTED 12
-
-struct MulticastPeerContext
-{
-  int peer; /* peer number */
-  struct GNUNET_CRYPTO_EcdsaPrivateKey *key;
-  const struct GNUNET_PeerIdentity *id;
-  struct GNUNET_TESTBED_Operation *op; /* not yet in use */
-  struct GNUNET_TESTBED_Operation *pi_op; /* not yet in use */
-  int test_ok;
-};
-
-enum pingpong
-{
-  PING = 1,
-  PONG = 2
-};
-
-struct pingpong_msg
-{
-  int peer;
-  enum pingpong msg;
-};
-
-static void service_connect (void *cls,
-                             struct GNUNET_TESTBED_Operation *op,
-                             void *ca_result,
-                             const char *emsg);
-
-static struct MulticastPeerContext **multicast_peers;
-static struct GNUNET_TESTBED_Peer **peers;
-
-static struct GNUNET_TESTBED_Operation *op[PEERS_REQUESTED];
-static struct GNUNET_TESTBED_Operation *pi_op[PEERS_REQUESTED];
-
-static struct GNUNET_MULTICAST_Origin *origin;
-static struct GNUNET_MULTICAST_Member *members[PEERS_REQUESTED]; /* first element always empty */
-
-static struct GNUNET_SCHEDULER_Task *timeout_tid;
-
-static struct GNUNET_CRYPTO_EddsaPrivateKey *group_key;
-static struct GNUNET_CRYPTO_EddsaPublicKey group_pub_key;
-static struct GNUNET_HashCode group_pub_key_hash;
-
-/**
- * Global result for testcase.
- */
-static int result;
-
-/**
- * Function run on CTRL-C or shutdown (i.e. success/timeout/etc.).
- * Cleans up.
- */
-static void
-shutdown_task (void *cls)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "shutdown_task!\n");
-  for (int i=0;i<PEERS_REQUESTED;i++)
-  {
-    if (NULL != op[i])
-    {
-      GNUNET_TESTBED_operation_done(op[i]);
-      op[i] = NULL;
-    }
-    if (NULL != pi_op[i])
-    {
-      GNUNET_TESTBED_operation_done (pi_op[i]);
-      pi_op[i] = NULL;
-    }
-  }
-
-  if (NULL != multicast_peers)
-  {
-    for (int i=0; i < PEERS_REQUESTED; i++)
-    {
-      GNUNET_free_non_null (multicast_peers[i]->key);
-      GNUNET_free (multicast_peers[i]);
-      multicast_peers[i] = NULL;
-    }
-    GNUNET_free (multicast_peers);
-    multicast_peers = NULL;
-  }
-
-  if (NULL != timeout_tid)
-  {
-    GNUNET_SCHEDULER_cancel (timeout_tid);
-    timeout_tid = NULL;
-  }
-}
-
-
-static void
-timeout_task (void *cls)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-             "Timeout!\n");
-  result = GNUNET_SYSERR;
-  GNUNET_SCHEDULER_shutdown ();
-}
-
-
-static void
-member_join_request (void *cls,
-                     const struct GNUNET_CRYPTO_EcdsaPublicKey *member_pub_key,
-                     const struct GNUNET_MessageHeader *join_msg,
-                     struct GNUNET_MULTICAST_JoinHandle *jh)
-{
-  struct MulticastPeerContext *mc_peer = (struct MulticastPeerContext*)cls;
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Peer #%u (%s) sent a join request.\n",
-              mc_peer->peer,
-              GNUNET_i2s (multicast_peers[mc_peer->peer]->id));
-}
-
-
-static int
-notify (void *cls,
-        size_t *data_size,
-        void *data)
-{
-  struct MulticastPeerContext *mc_peer = (struct MulticastPeerContext*)cls;
-
-  struct pingpong_msg *pp_msg = GNUNET_new (struct pingpong_msg);
-  pp_msg->peer = mc_peer->peer;
-  pp_msg->msg = PING;
-
-  *data_size = sizeof (struct pingpong_msg);
-  GNUNET_memcpy(data, pp_msg, *data_size);
-  GNUNET_free (pp_msg);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Peer #%u sents ping to origin\n", mc_peer->peer);
-
-  return GNUNET_YES;
-}
-
-
-static void
-member_join_decision (void *cls,
-                      int is_admitted,
-                      const struct GNUNET_PeerIdentity *peer,
-                      uint16_t relay_count,
-                      const struct GNUNET_PeerIdentity *relays,
-                      const struct GNUNET_MessageHeader *join_msg)
-{
-  struct MulticastPeerContext *mc_peer = (struct MulticastPeerContext*)cls;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Peer #%u (%s) received a decision from origin: %s\n",
-              mc_peer->peer,
-              GNUNET_i2s (multicast_peers[mc_peer->peer]->id),
-              (GNUNET_YES == is_admitted)?"accepted":"rejected");
-
-  if (GNUNET_YES == is_admitted)
-  {
-    GNUNET_MULTICAST_member_to_origin (members[mc_peer->peer],
-                                       0,
-                                       notify,
-                                       cls);
-
-  }
-}
-
-
-static void
-member_replay_frag ()
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "member replay frag...\n");
-}
-
-
-static void
-member_replay_msg ()
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "member replay msg...\n");
-}
-
-
-static void
-origin_disconnected_cb (void *cls)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Origin disconnected. Shutting down.\n");
-  result = GNUNET_YES;
-  GNUNET_SCHEDULER_shutdown ();
-}
-
-
-static void
-member_disconnected_cb (void *cls)
-{
-  for (int i = 1; i < PEERS_REQUESTED; ++i)
-    if (GNUNET_NO == multicast_peers[i]->test_ok)
-      return;
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "All member disconnected. Stopping origin.\n");
-  GNUNET_MULTICAST_origin_stop (origin, origin_disconnected_cb, cls);
-}
-
-
-static void
-member_message (void *cls,
-                const struct GNUNET_MULTICAST_MessageHeader *msg)
-{
-  struct MulticastPeerContext *mc_peer = (struct MulticastPeerContext*)cls;
-  struct pingpong_msg *pp_msg = (struct pingpong_msg*) &(msg[1]);
-
-  if (PONG == pp_msg->msg && mc_peer->peer == pp_msg->peer)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-                "peer #%i (%s) receives a pong\n",
-                mc_peer->peer,
-                GNUNET_i2s (multicast_peers[mc_peer->peer]->id));
-    mc_peer->test_ok = GNUNET_OK;
-    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-                "peer #%u (%s) parting from multicast group\n",
-                mc_peer->peer,
-                GNUNET_i2s (multicast_peers[mc_peer->peer]->id));
-
-    GNUNET_MULTICAST_member_part (members[mc_peer->peer], member_disconnected_cb, cls);
-  }
-}
-
-
-static void
-origin_join_request (void *cls,
-                 const struct GNUNET_CRYPTO_EcdsaPublicKey *member_pub_key,
-                 const struct GNUNET_MessageHeader *join_msg,
-                 struct GNUNET_MULTICAST_JoinHandle *jh)
-{
-  struct GNUNET_MessageHeader *join_resp;
-
-  uint8_t data_size = ntohs (join_msg->size);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "origin got a join request...\n");
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "origin receives: '%s'\n", (char *)&join_msg[1]);
-
-  char data[] = "Come in!";
-  data_size = strlen (data) + 1;
-  join_resp = GNUNET_malloc (sizeof (join_resp) + data_size);
-  join_resp->size = htons (sizeof (join_resp) + data_size);
-  join_resp->type = htons (123);
-  GNUNET_memcpy (&join_resp[1], data, data_size);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "origin sends: '%s'\n", data);
-
-  GNUNET_MULTICAST_join_decision (jh,
-                                  GNUNET_YES,
-                                  0,
-                                  NULL,
-                                  join_resp);
-
-  result = GNUNET_OK;
-}
-
-
-static void
-origin_replay_frag (void *cls,
-                    const struct GNUNET_CRYPTO_EcdsaPublicKey *member_pub_key,
-                    uint64_t fragment_id,
-                    uint64_t flags,
-                    struct GNUNET_MULTICAST_ReplayHandle *rh)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "origin replay fraq msg\n");
-}
-
-
-static void
-origin_replay_msg (void *cls,
-                   const struct GNUNET_CRYPTO_EcdsaPublicKey *member_pub_key,
-                   uint64_t message_id,
-                   uint64_t fragment_offset,
-                   uint64_t flags,
-                   struct GNUNET_MULTICAST_ReplayHandle *rh)
-{
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "origin replay msg\n");
-}
-
-
-static int
-origin_notify (void *cls,
-               size_t *data_size,
-               void *data)
-{
-  struct pingpong_msg *rcv_pp_msg = (struct pingpong_msg*)cls;
-  struct pingpong_msg *pp_msg = GNUNET_new (struct pingpong_msg);
-
-  pp_msg->peer = rcv_pp_msg->peer;
-  pp_msg->msg = PONG;
-  *data_size = sizeof (struct pingpong_msg);
-  GNUNET_memcpy(data, pp_msg, *data_size);
-  GNUNET_free (pp_msg);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "origin sends pong\n");
-
-  return GNUNET_YES;
-}
-
-
-static void
-origin_request (void *cls,
-                const struct GNUNET_MULTICAST_RequestHeader *req)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "origin receives a msg\n");
-
-  req++;
-  struct pingpong_msg *pp_msg = (struct pingpong_msg *) req;
-
-  if (1 != pp_msg->msg) {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "origin didn't reveice a correct request");
-  }
-
-  GNUNET_MULTICAST_origin_to_all (origin,
-                                  0,
-                                  0,
-                                  origin_notify,
-                                  pp_msg);
-}
-
-
-static void
-origin_message (void *cls,
-                const struct GNUNET_MULTICAST_MessageHeader *msg)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "origin message msg\n");
-}
-
-
-static void
-multicast_disconnect (void *cls,
-                      void *op_result)
-{
-
-}
-
-
-static void *
-multicast_connect (void *cls,
-                   const struct GNUNET_CONFIGURATION_Handle *cfg)
-{
-  struct MulticastPeerContext *multicast_peer = cls;
-  struct GNUNET_MessageHeader *join_msg;
-  char data[64];
-
-  if (0 == multicast_peer->peer)
-  {
-    group_key = GNUNET_CRYPTO_eddsa_key_create ();
-    GNUNET_CRYPTO_eddsa_key_get_public (group_key, &group_pub_key);
-
-    GNUNET_CRYPTO_hash (&group_pub_key, sizeof (group_pub_key), &group_pub_key_hash);
-    origin = GNUNET_MULTICAST_origin_start (cfg,
-                                            group_key,
-                                            0,
-                                            origin_join_request,
-                                            origin_replay_frag,
-                                            origin_replay_msg,
-                                            origin_request,
-                                            origin_message,
-                                            cls);
-    if (NULL == origin)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-                  "Peer #%u could not create a multicast group",
-                  multicast_peer->peer);
-      return NULL;
-    }
-    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-                "Peer #%u connected as origin to group %s\n",
-                multicast_peer->peer,
-                GNUNET_h2s (&group_pub_key_hash));
-    return origin;
-  }
-  else
-  {
-    multicast_peer->key = GNUNET_CRYPTO_ecdsa_key_create ();
-
-    sprintf(data, "Hi, I am peer #%u (%s). Can I enter?",
-            multicast_peer->peer,
-            GNUNET_i2s (multicast_peers[multicast_peer->peer]->id));
-    uint8_t data_size = strlen (data) + 1;
-    join_msg = GNUNET_malloc (sizeof (join_msg) + data_size);
-    join_msg->size = htons (sizeof (join_msg) + data_size);
-    join_msg->type = htons (123);
-    GNUNET_memcpy (&join_msg[1], data, data_size);
-
-    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-                "Peer #%u (%s) tries to join multicast group %s\n",
-                multicast_peer->peer,
-                GNUNET_i2s (multicast_peers[multicast_peer->peer]->id),
-                GNUNET_h2s (&group_pub_key_hash));
-
-    members[multicast_peer->peer] =
-      GNUNET_MULTICAST_member_join (cfg,
-                                    &group_pub_key,
-                                    multicast_peer->key,
-                                    multicast_peers[0]->id,
-                                    0,
-                                    NULL,
-                                    join_msg, /* join message */
-                                    member_join_request,
-                                    member_join_decision,
-                                    member_replay_frag,
-                                    member_replay_msg,
-                                    member_message,
-                                    cls);
-    return members[multicast_peer->peer];
-  }
-}
-
-
-static void
-peer_information_cb (void *cls,
-                     struct GNUNET_TESTBED_Operation *operation,
-                     const struct GNUNET_TESTBED_PeerInformation *pinfo,
-                     const char *emsg)
-{
-  struct MulticastPeerContext *mc_peer = (struct MulticastPeerContext*)cls;
-
-  if (NULL == pinfo) {
-    GNUNET_log (GNUNET_ERROR_TYPE_INFO, "got no peer information\n");
-    result = GNUNET_SYSERR;
-    GNUNET_SCHEDULER_shutdown ();
-  }
-
-  multicast_peers[mc_peer->peer]->id = pinfo->result.id;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Got peer information of %s (%s)\n",
-              (0 == mc_peer->peer)? "origin" : "member",
-              GNUNET_i2s (pinfo->result.id));
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Create peer #%u (%s)\n",
-              mc_peer->peer,
-              GNUNET_i2s (multicast_peers[mc_peer->peer]->id));
-
-  if (0 != mc_peer->peer)
-  {
-    /* connect to multicast service of members */
-    op[mc_peer->peer] =
-      GNUNET_TESTBED_service_connect (/* Closure for operation */
-                                      NULL,
-                                      /* The peer whose service to connect to */
-                                      peers[mc_peer->peer],
-                                      /* The name of the service */
-                                      "multicast",
-                                      /* called after a handle to service is opened */
-                                      service_connect,
-                                      /* closure for the above callback */
-                                      cls,
-                                      /* called when opening the service connection */
-                                      multicast_connect,
-                                      /* called when closing the service connection */
-                                      multicast_disconnect,
-                                      /* closure for the above two callbacks */
-                                      cls);
-  }
-}
-
-
-static void
-service_connect (void *cls,
-                 struct GNUNET_TESTBED_Operation *op,
-                 void *ca_result,
-                 const char *emsg)
-{
-  struct MulticastPeerContext *mc_peer = (struct MulticastPeerContext*)cls;
-
-  if (NULL == ca_result)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-                "Connection adapter not created for peer #%u (%s)\n",
-                mc_peer->peer,
-                GNUNET_i2s (multicast_peers[mc_peer->peer]->id));
-
-    result = GNUNET_SYSERR;
-    GNUNET_SCHEDULER_shutdown();
-  }
-
-  if (0 == mc_peer->peer)
-  {
-    // Get GNUnet identity of members
-    for (int i = 0; i<PEERS_REQUESTED; i++)
-    {
-      pi_op[i] = GNUNET_TESTBED_peer_get_information (peers[i],
-                                                      GNUNET_TESTBED_PIT_IDENTITY,
-                                                      peer_information_cb,
-                                                      multicast_peers[i]);
-    }
-  }
-}
-
-
-
-/**
- * Main function inovked from TESTBED once all of the
- * peers are up and running.  This one then connects
- * just to the multicast service of peer 0 and 1.
- * Peer 0 is going to be origin.
- * Peer 1 is going to be one member.
- * Origin will start a multicast group and the member will try to join it.
- * After that we execute some multicast test.
- *
- * @param cls closure
- * @param h the run handle
- * @param peers started peers for the test
- * @param PEERS_REQUESTED size of the 'peers' array
- * @param links_succeeded number of links between peers that were created
- * @param links_failed number of links testbed was unable to establish
- */
-static void
-testbed_master (void *cls,
-                struct GNUNET_TESTBED_RunHandle *h,
-                unsigned int num_peers,
-                struct GNUNET_TESTBED_Peer **p,
-                unsigned int links_succeeded,
-                unsigned int links_failed)
-{
-  /* Testbed is ready with peers running and connected in a pre-defined overlay
-     topology (FIXME)  */
-  peers = p;
-  multicast_peers = GNUNET_new_array (PEERS_REQUESTED, struct MulticastPeerContext*);
-
-  // Create test contexts for members
-  for (int i = 0; i<PEERS_REQUESTED; i++)
-  {
-    multicast_peers[i] = GNUNET_new (struct MulticastPeerContext);
-    multicast_peers[i]->peer = i;
-    multicast_peers[i]->test_ok = GNUNET_NO;
-  }
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Create origin peer\n");
-  op[0] =
-    GNUNET_TESTBED_service_connect (/* Closure for operation */
-                                    NULL,
-                                    /* The peer whose service to connect to */
-                                    peers[0],
-                                    /* The name of the service */
-                                    "multicast",
-                                    /* called after a handle to service is opened */
-                                    service_connect,
-                                    /* closure for the above callback */
-                                    multicast_peers[0],
-                                    /* called when opening the service connection */
-                                    multicast_connect,
-                                    /* called when closing the service connection */
-                                    multicast_disconnect,
-                                    /* closure for the above two callbacks */
-                                    multicast_peers[0]);
-  /* Schedule a new task on shutdown */
-  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
-  /* Schedule the shutdown task with a delay of a few Seconds */
-  timeout_tid =
-    GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
-                                  (GNUNET_TIME_UNIT_SECONDS, 400),
-                                 &timeout_task,
-                                  NULL);
-}
-
-
-int
-main (int argc, char *argv[])
-{
-  int ret;
-  char const *config_file;
-
-  if (strstr (argv[0], "_line") != NULL)
-  {
-    config_file = "test_multicast_line.conf";
-  }
-  else if (strstr(argv[0], "_star") != NULL)
-  {
-    config_file = "test_multicast_star.conf";
-  }
-  else
-  {
-    config_file = "test_multicast_star.conf";
-  }
-
-  result = GNUNET_SYSERR;
-  ret =
-    GNUNET_TESTBED_test_run ("test-multicast-multipeer",
-                             config_file,
-                             /* number of peers to start */
-                             PEERS_REQUESTED,
-                             /* Event mask - set to 0 for no event notifications */
-                             0LL,
-                             /* Controller event callback */
-                             NULL,
-                             /* Closure for controller event callback */
-                             NULL,
-                             /* called when testbed setup is complete */
-                             testbed_master,
-                             /* Closure for the test_master callback */
-                             NULL);
-  if ( (GNUNET_OK != ret) || (GNUNET_OK != result) )
-    return 1;
-  return 0;
-}
-
-/* end of test_multicast_multipeer.c */
diff --git a/src/multicast/test_multicast_star.conf b/src/multicast/test_multicast_star.conf
deleted file mode 100644 (file)
index 516c0e3..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-[testbed]
-HOSTNAME = localhost
-OVERLAY_TOPOLOGY = STAR
-
-[arm]
-GLOBAL_POSTFIX=-L ERROR
-
-[multicast]
-#PREFIX = tmux new-window gdb -x ./cmd.gdb  --args
-#PREFIX = valgrind --leak-check=full
-UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-service-multicast.sock
-
-[vpn]
-START_ON_DEMAND = NO
-
-[peerinfo]
-# Do not use shipped gnunet HELLOs 
-USE_INCLUDED_HELLOS = NO
-
-# Option to disable all disk IO; only useful for testbed runs
-# (large-scale experiments); disables persistence of HELLOs!
-NO_IO = YES
-
-[cadet]
-ID_ANNOUNCE_TIME = 5 s
-
-[hostlist]
-IMMEDIATE_START = NO
-START_ON_DEMAND = NO
-
-[nat]
-ENABLE_UPNP = NO
-
-[fs]
-IMMEDIATE_START = NO
-START_ON_DEMAND = NO
-
-[vpn]
-IMMEDIATE_START = NO
-START_ON_DEMAND = NO
-
-[revocation]
-IMMEDIATE_START = NO
-START_ON_DEMAND = NO
-
-[gns]
-IMMEDIATE_START = NO
-START_ON_DEMAND = NO
-
-[namestore]
-IMMEDIATE_START = NO
-START_ON_DEMAND = NO
-
-[namecache]
-IMMEDIATE_START = NO
-START_ON_DEMAND = NO
-
-[topology]
-IMMEDIATE_START = NO
-START_ON_DEMAND = NO
-
-[nse]
-WORKBITS = 0
-
index 4323780d5096372bc88569a17b14ec4a41c0592b..c093cb2a956e903a550ba1db77080526278dfc92 100644 (file)
@@ -173,7 +173,7 @@ database_setup (struct Plugin *plugin)
                                         &entry->query));
       GNUNET_STRINGS_base64_decode (block,
                                     strlen (block),
-                                    &block_buffer);
+                                    (void**)&block_buffer);
       entry->block = (struct GNUNET_GNSRECORD_Block *) block_buffer;
       if (GNUNET_OK !=
           GNUNET_CONTAINER_multihashmap_put (plugin->hm,
index c2a630a461758d8e0f73b1c30c5cd5aef51f982c..20900a3f60948eca6b575618d474174fdb03a744 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -102,7 +102,7 @@ run (void *cls, char *const *args, const char *cfgfile,
 int
 main (int argc, char *argv[])
 {
-  char cfg_name[128];
+  char cfg_name[PATH_MAX];
   char *const xargv[] = {
     "test-plugin-namecache",
     "-c",
index b1f8fcf4c26c96a9630ab885b477251f8aea3ba2..45be0fe750b859912344c69cc430339a2ef2bae7 100644 (file)
@@ -124,7 +124,7 @@ struct ZoneIteration
    * message and free the data structure once @e cache_ops is zero.
    */
   int send_end;
-  
+
 };
 
 
@@ -268,7 +268,7 @@ struct CacheOperation
    * for if applicable, can be NULL.
    */
   struct ZoneIteration *zi;
-  
+
   /**
    * Client's request ID.
    */
@@ -318,12 +318,12 @@ struct StoreActivity
 
 /**
  * Entry in list of cached nick resolutions.
- */ 
+ */
 struct NickCache
 {
   /**
    * Zone the cache entry is for.
-   */ 
+   */
   struct GNUNET_CRYPTO_EcdsaPrivateKey zone;
 
   /**
@@ -339,7 +339,7 @@ struct NickCache
 
 
 /**
- * We cache nick records to reduce DB load. 
+ * We cache nick records to reduce DB load.
  */
 static struct NickCache nick_cache[NC_SIZE];
 
@@ -489,7 +489,7 @@ free_store_activity (struct StoreActivity *sa)
  * record, which (if found) is then copied to @a cls for future use.
  *
  * @param cls a `struct GNUNET_GNSRECORD_Data **` for storing the nick (if found)
- * @param seq sequence number of the record
+ * @param seq sequence number of the record, MUST NOT BE ZERO
  * @param private_key the private key of the zone (unused)
  * @param label should be #GNUNET_GNS_EMPTY_LABEL_AT
  * @param rd_count number of records in @a rd
@@ -506,7 +506,7 @@ lookup_nick_it (void *cls,
   struct GNUNET_GNSRECORD_Data **res = cls;
 
   (void) private_key;
-  (void) seq;
+  GNUNET_assert (0 != seq);
   if (0 != strcmp (label, GNUNET_GNS_EMPTY_LABEL_AT))
   {
     GNUNET_break (0);
@@ -607,7 +607,7 @@ get_nick_record (const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone)
       return nick;
     }
   }
-  
+
   nick = NULL;
   res = GSN_database->lookup_records (GSN_database->cls,
                                      zone,
@@ -872,7 +872,7 @@ zone_iteration_done_client_continue (struct ZoneIteration *zi)
   em->r_id = htonl (zi->request_id);
   GNUNET_MQ_send (zi->nc->mq,
                   env);
-      
+
   GNUNET_CONTAINER_DLL_remove (zi->nc->op_head,
                               zi->nc->op_tail,
                               zi);
@@ -1270,9 +1270,16 @@ struct RecordLookupContext
 
 
 /**
- * FIXME.
+ * Function called by the namestore plugin when we are trying to lookup
+ * a record as part of #handle_record_lookup().  Merges all results into
+ * the context.
  *
- * @param seq sequence number of the record
+ * @param cls closure with a `struct RecordLookupContext`
+ * @param seq unique serial number of the record, MUST NOT BE ZERO
+ * @param zone_key private key of the zone
+ * @param label name that is being mapped (at most 255 characters long)
+ * @param rd_count number of entries in @a rd array
+ * @param rd array of records with data to store
  */
 static void
 lookup_it (void *cls,
@@ -1285,7 +1292,7 @@ lookup_it (void *cls,
   struct RecordLookupContext *rlc = cls;
 
   (void) private_key;
-  (void) seq;
+  GNUNET_assert (0 != seq);
   if (0 != strcmp (label,
                    rlc->label))
     return;
@@ -1609,7 +1616,7 @@ handle_record_store (void *cls,
                            conv_name)) ||
              (GNUNET_GNSRECORD_TYPE_NICK != rd[i].record_type) )
           rd_clean_off++;
-       
+
        if ( (0 == strcmp (GNUNET_GNS_EMPTY_LABEL_AT,
                            conv_name)) &&
             (GNUNET_GNSRECORD_TYPE_NICK == rd[i].record_type) )
@@ -1680,7 +1687,7 @@ struct ZoneToNameCtx
  * Zone to name iterator
  *
  * @param cls struct ZoneToNameCtx *
- * @param seq sequence number of the record
+ * @param seq sequence number of the record, MUST NOT BE ZERO
  * @param zone_key the zone key
  * @param name name
  * @param rd_count number of records in @a rd
@@ -1704,7 +1711,7 @@ handle_zone_to_name_it (void *cls,
   char *name_tmp;
   char *rd_tmp;
 
-  (void) seq;
+  GNUNET_assert (0 != seq);
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
              "Found result for zone-to-name lookup: `%s'\n",
              name);
@@ -1822,7 +1829,7 @@ struct ZoneIterationProcResult
  * Process results for zone iteration from database
  *
  * @param cls struct ZoneIterationProcResult
- * @param seq sequence number of the record
+ * @param seq sequence number of the record, MUST NOT BE ZERO
  * @param zone_key the zone key
  * @param name name
  * @param rd_count number of records for this name
@@ -1839,6 +1846,7 @@ zone_iterate_proc (void *cls,
   struct ZoneIterationProcResult *proc = cls;
   int do_refresh_block;
 
+  GNUNET_assert (0 != seq);
   if ( (NULL == zone_key) &&
        (NULL == name) )
   {
@@ -1876,7 +1884,7 @@ zone_iterate_proc (void *cls,
       do_refresh_block = GNUNET_YES;
       break;
     }
-  if (GNUNET_YES == do_refresh_block)    
+  if (GNUNET_YES == do_refresh_block)
     refresh_block (NULL,
                   proc->zi,
                    0,
@@ -2116,7 +2124,7 @@ monitor_iteration_next (void *cls);
  * A #GNUNET_NAMESTORE_RecordIterator for monitors.
  *
  * @param cls a 'struct ZoneMonitor *' with information about the monitor
- * @param seq sequence number of the record
+ * @param seq sequence number of the record, MUST NOT BE ZERO
  * @param zone_key zone key of the zone
  * @param name name
  * @param rd_count number of records in @a rd
@@ -2132,6 +2140,7 @@ monitor_iterate_cb (void *cls,
 {
   struct ZoneMonitor *zm = cls;
 
+  GNUNET_assert (0 != seq);
   zm->seq = seq;
   GNUNET_assert (NULL != name);
   GNUNET_STATISTICS_update (statistics,
index 78e99442c718da84a5ce43fdbd29b979d69c44ca..01cf592ea8cb1a019bada333cb92f1dc763eb3e7 100644 (file)
@@ -79,10 +79,41 @@ struct FlatFileEntry
    */
   char *label;
 
-
 };
 
 
+/**
+ * Hash contactenation of @a pkey and @a label into @a h
+ *
+ * @param pkey a key
+ * @param label a label
+ * @param h[out] initialized hash
+ */
+static void
+hash_pkey_and_label (const struct GNUNET_CRYPTO_EcdsaPrivateKey *pkey,
+                     const char *label,
+                     struct GNUNET_HashCode *h)
+{
+  char *key;
+  size_t label_len;
+  size_t key_len;
+
+  label_len = strlen (label);
+  key_len = label_len + sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey);
+  key = GNUNET_malloc (key_len);
+  GNUNET_memcpy (key,
+                 label,
+                 label_len);
+  GNUNET_memcpy (key + label_len,
+                 pkey,
+                 sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey));
+  GNUNET_CRYPTO_hash (key,
+                      key_len,
+                      h);
+  GNUNET_free (key);
+}
+
+
 /**
  * Initialize the database connections and associated
  * data structures (create tables and indices
@@ -262,23 +293,9 @@ database_setup (struct Plugin *plugin)
         GNUNET_free (private_key);
       }
 
-      {
-        char *key;
-        size_t key_len;
-
-        key_len = strlen (label) + sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey);
-        key = GNUNET_malloc (strlen (label) + sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey));
-        GNUNET_memcpy (key,
-                       label,
-                       strlen (label));
-        GNUNET_memcpy (key+strlen(label),
-                       &entry->private_key,
-                       sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey));
-        GNUNET_CRYPTO_hash (key,
-                            key_len,
-                            &hkey);
-        GNUNET_free (key);
-      }
+      hash_pkey_and_label (&entry->private_key,
+                           label,
+                           &hkey);
       if (GNUNET_OK !=
           GNUNET_CONTAINER_multihashmap_put (plugin->hm,
                                              &hkey,
@@ -425,24 +442,14 @@ namestore_heap_store_records (void *cls,
 {
   struct Plugin *plugin = cls;
   uint64_t rvalue;
-  size_t key_len;
-  char *key;
   struct GNUNET_HashCode hkey;
   struct FlatFileEntry *entry;
 
   rvalue = GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_WEAK,
                                     UINT64_MAX);
-  key_len = strlen (label) + sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey);
-  key = GNUNET_malloc (key_len);
-  GNUNET_memcpy (key,
-                 label,
-                 strlen (label));
-  GNUNET_memcpy (key + strlen(label),
-                 zone_key,
-                 sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey));
-  GNUNET_CRYPTO_hash (key,
-                      key_len,
-                      &hkey);
+  hash_pkey_and_label (zone_key,
+                       label,
+                       &hkey);
   GNUNET_CONTAINER_multihashmap_remove_all (plugin->hm,
                                             &hkey);
   if (0 == rd_count)
@@ -501,27 +508,15 @@ namestore_heap_lookup_records (void *cls,
   struct Plugin *plugin = cls;
   struct FlatFileEntry *entry;
   struct GNUNET_HashCode hkey;
-  char *key;
-  size_t key_len;
 
   if (NULL == zone)
   {
     GNUNET_break (0);
     return GNUNET_SYSERR;
   }
-  key_len = strlen (label) + sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey);
-  key = GNUNET_malloc (key_len);
-  GNUNET_memcpy (key,
-                label,
-                strlen (label));
-  GNUNET_memcpy (key+strlen(label),
-                zone,
-                sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey));
-  GNUNET_CRYPTO_hash (key,
-                      key_len,
-                      &hkey);
-  GNUNET_free (key);
-
+  hash_pkey_and_label (zone,
+                       label,
+                       &hkey);
   entry = GNUNET_CONTAINER_multihashmap_get (plugin->hm,
                                             &hkey);
 
@@ -529,7 +524,7 @@ namestore_heap_lookup_records (void *cls,
     return GNUNET_NO;
   if (NULL != iter)
     iter (iter_cls,
-         0,
+         1, /* zero is illegal */
          &entry->private_key,
          entry->label,
          entry->record_count,
@@ -609,7 +604,7 @@ iterate_zones (void *cls,
   }
   ic->iter (ic->iter_cls,
            ic->pos,
-            (NULL == ic->zone) 
+            (NULL == ic->zone)
            ? &entry->private_key
            : ic->zone,
             entry->label,
@@ -695,7 +690,7 @@ zone_to_name (void *cls,
                      sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey)))
     {
       ztn->iter (ztn->iter_cls,
-                 0,
+                 i + 1, /* zero is illegal! */
                  &entry->private_key,
                  entry->label,
                  entry->record_count,
index 57a8ae2be396684b1a4cf3205ae16418f7c70c01..f2e065882261308495c42d8d3336d35c86a7eb20 100644 (file)
@@ -400,6 +400,7 @@ parse_result_call_iterator (void *cls,
     {
       struct GNUNET_GNSRECORD_Data rd[GNUNET_NZL(record_count)];
 
+      GNUNET_assert (0 != serial);
       if (GNUNET_OK !=
           GNUNET_GNSRECORD_records_deserialize (data_size,
                                                 data,
index 96b0d6457424fb1d3f7c4889cb7f8cd5ab9366b6..e4bfcde16ffeea54fd7767c8303d19814fd373d4 100644 (file)
@@ -521,6 +521,7 @@ get_records_and_call_iterator (struct Plugin *plugin,
       {
         struct GNUNET_GNSRECORD_Data rd[record_count];
 
+        GNUNET_assert (0 != seq);
         if (GNUNET_OK !=
             GNUNET_GNSRECORD_records_deserialize (data_size,
                                                   data,
index b9c7fbef911e67610180707700c6ec4d8a1b98eb..9c978749fe1174404e1953527244107b3438cc59 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -107,7 +107,8 @@ test_record (void *cls,
   GNUNET_snprintf (tname,
                    sizeof (tname),
                   "a%u",
-                   (unsigned int ) id);
+                   (unsigned int) id);
+  GNUNET_assert (trd_count == rd_count);
   for (unsigned int i=0;i<trd_count;i++)
   {
     GNUNET_assert (rd[i].data_size == id % 10);
@@ -198,7 +199,7 @@ int
 main (int argc,
       char *argv[])
 {
-  char cfg_name[128];
+  char cfg_name[PATH_MAX];
   char *const xargv[] = {
     "test-plugin-namestore",
     "-c",
index f2af27c0bf198de77b6bb8c2bc635c12cc20cd74..4b56b34c79d4777f3c3814e377277a54f47650aa 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -565,10 +565,7 @@ GNUNET_PEERINFO_add_peer (struct GNUNET_PEERINFO_Handle *h,
   struct GNUNET_PeerIdentity peer;
 
   if (NULL == h->mq)
-  {
-    GNUNET_break (0);
     return NULL;
-  }
   GNUNET_assert (GNUNET_OK ==
                  GNUNET_HELLO_get_id (hello,
                                       &peer));
index 3aef05769e63b71e32ddb0933b882993a8051025..c6acdce5649a9b58b6c8f53d54a642a9a9275168 100644 (file)
@@ -107,7 +107,9 @@ check_PROGRAMS = \
  $(FLAT_TESTS)
 
 EXTRA_DIST = \
- test_peerstore_api_data.conf
+ test_peerstore_api_data.conf \
+ test_plugin_peerstore_flat.conf \
+ test_plugin_peerstore_sqlite.conf
 
 if ENABLE_TEST_RUN
 AM_TESTS_ENVIRONMENT=export GNUNET_PREFIX=$${GNUNET_PREFIX:-@libdir@};export PATH=$${GNUNET_PREFIX:-@prefix@}/bin:$$PATH;unset XDG_DATA_HOME;unset XDG_CONFIG_HOME;
index 6abdef43a60457db3c8cda5d42b4aa438941960f..243e26c8b6c83c16daa6940c7b80d1d369f21ef0 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -75,6 +75,16 @@ struct GNUNET_PEERSTORE_Handle
    */
   struct GNUNET_CONTAINER_MultiHashMap *watches;
 
+  /**
+   * ID of the task trying to reconnect to the service.
+   */
+  struct GNUNET_SCHEDULER_Task *reconnect_task;
+
+  /**
+   * Delay until we try to reconnect.
+   */
+  struct GNUNET_TIME_Relative reconnect_delay;
+
   /**
    * Are we in the process of disconnecting but need to sync first?
    */
@@ -245,10 +255,72 @@ struct GNUNET_PEERSTORE_WatchContext
 /**
  * Close the existing connection to PEERSTORE and reconnect.
  *
- * @param h handle to the service
+ * @param cls a `struct GNUNET_PEERSTORE_Handle *h`
+ */
+static void
+reconnect (void *cls);
+
+
+/**
+ * Disconnect from the peerstore service.
+ *
+ * @param h peerstore handle to disconnect
+ */
+static void
+disconnect (struct GNUNET_PEERSTORE_Handle *h)
+{
+  struct GNUNET_PEERSTORE_IterateContext *next;
+
+  for (struct GNUNET_PEERSTORE_IterateContext *ic = h->iterate_head;
+       NULL != ic;
+       ic = next)
+  {
+    next = ic->next;
+    if (GNUNET_YES == ic->iterating)
+    {
+      GNUNET_PEERSTORE_Processor icb;
+      void *icb_cls;
+
+      icb = ic->callback;
+      icb_cls = ic->callback_cls;
+      GNUNET_PEERSTORE_iterate_cancel (ic);
+      if (NULL != icb)
+        icb (icb_cls,
+             NULL,
+             "Iteration canceled due to reconnection");
+    }
+  }
+
+  if (NULL != h->mq)
+  {
+    GNUNET_MQ_destroy (h->mq);
+    h->mq = NULL;
+  }
+}
+
+
+/**
+ * Function that will schedule the job that will try
+ * to connect us again to the client.
+ *
+ * @param h peerstore to reconnect
  */
 static void
-reconnect (struct GNUNET_PEERSTORE_Handle *h);
+disconnect_and_schedule_reconnect (struct GNUNET_PEERSTORE_Handle *h)
+{
+  GNUNET_assert (NULL == h->reconnect_task);
+  disconnect (h);
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "Scheduling task to reconnect to PEERSTORE service in %s.\n",
+       GNUNET_STRINGS_relative_time_to_string (h->reconnect_delay,
+                                               GNUNET_YES));
+  h->reconnect_task =
+      GNUNET_SCHEDULER_add_delayed (h->reconnect_delay,
+                                    &reconnect,
+                                    h);
+  h->reconnect_delay = GNUNET_TIME_STD_BACKOFF (h->reconnect_delay);
+}
+
 
 
 /**
@@ -288,7 +360,7 @@ handle_client_error (void *cls,
   LOG (GNUNET_ERROR_TYPE_ERROR,
        "Received an error notification from MQ of type: %d\n",
        error);
-  reconnect (h);
+  disconnect_and_schedule_reconnect (h);
 }
 
 
@@ -345,7 +417,7 @@ destroy_watch (void *cls,
  * @param h Handle to the service.
  */
 static void
-do_disconnect (struct GNUNET_PEERSTORE_Handle *h)
+final_disconnect (struct GNUNET_PEERSTORE_Handle *h)
 {
   if (NULL != h->mq)
   {
@@ -419,7 +491,7 @@ GNUNET_PEERSTORE_disconnect (struct GNUNET_PEERSTORE_Handle *h,
     while (NULL != (sc = h->store_head))
       GNUNET_PEERSTORE_store_cancel (sc);
   }
-  do_disconnect (h);
+  final_disconnect (h);
 }
 
 
@@ -443,8 +515,9 @@ GNUNET_PEERSTORE_store_cancel (struct GNUNET_PEERSTORE_StoreContext *sc)
   GNUNET_free (sc->value);
   GNUNET_free (sc->key);
   GNUNET_free (sc);
-  if ((GNUNET_YES == h->disconnecting) && (NULL == h->store_head))
-    do_disconnect (h);
+  if ( (GNUNET_YES == h->disconnecting) &&
+       (NULL == h->store_head) )
+    final_disconnect (h);
 }
 
 
@@ -530,7 +603,7 @@ handle_iterate_end (void *cls,
   {
     LOG (GNUNET_ERROR_TYPE_ERROR,
          _("Unexpected iteration response, this should not happen.\n"));
-    reconnect (h);
+    disconnect_and_schedule_reconnect (h);
     return;
   }
   callback = ic->callback;
@@ -538,7 +611,10 @@ handle_iterate_end (void *cls,
   ic->iterating = GNUNET_NO;
   GNUNET_PEERSTORE_iterate_cancel (ic);
   if (NULL != callback)
-    callback (callback_cls, NULL, NULL);
+    callback (callback_cls,
+              NULL,
+              NULL);
+  h->reconnect_delay = GNUNET_TIME_UNIT_ZERO;
 }
 
 
@@ -579,7 +655,7 @@ handle_iterate_result (void *cls,
   {
     LOG (GNUNET_ERROR_TYPE_ERROR,
          _("Unexpected iteration response, this should not happen.\n"));
-    reconnect (h);
+    disconnect_and_schedule_reconnect (h);
     return;
   }
   ic->iterating = GNUNET_YES;
@@ -715,7 +791,7 @@ handle_watch_record (void *cls,
   record = PEERSTORE_parse_record_message (msg);
   if (NULL == record)
   {
-    reconnect (h);
+    disconnect_and_schedule_reconnect (h);
     return;
   }
   PEERSTORE_hash_key (record->sub_system,
@@ -730,13 +806,14 @@ handle_watch_record (void *cls,
     LOG (GNUNET_ERROR_TYPE_ERROR,
          _("Received a watch result for a non existing watch.\n"));
     PEERSTORE_destroy_record (record);
-    reconnect (h);
+    disconnect_and_schedule_reconnect (h);
     return;
   }
   if (NULL != wc->callback)
     wc->callback (wc->callback_cls,
                   record,
                   NULL);
+  h->reconnect_delay = GNUNET_TIME_UNIT_ZERO;
   PEERSTORE_destroy_record (record);
 }
 
@@ -744,11 +821,12 @@ handle_watch_record (void *cls,
 /**
  * Close the existing connection to PEERSTORE and reconnect.
  *
- * @param h handle to the service
+ * @param cls a `struct GNUNET_PEERSTORE_Handle *`
  */
 static void
-reconnect (struct GNUNET_PEERSTORE_Handle *h)
+reconnect (void *cls)
 {
+  struct GNUNET_PEERSTORE_Handle *h = cls;
   struct GNUNET_MQ_MessageHandler mq_handlers[] = {
     GNUNET_MQ_hd_fixed_size (iterate_end,
                              GNUNET_MESSAGE_TYPE_PEERSTORE_ITERATE_END,
@@ -764,34 +842,10 @@ reconnect (struct GNUNET_PEERSTORE_Handle *h)
                            h),
     GNUNET_MQ_handler_end ()
   };
-  struct GNUNET_PEERSTORE_IterateContext *ic;
-  struct GNUNET_PEERSTORE_IterateContext *next;
-  GNUNET_PEERSTORE_Processor icb;
-  void *icb_cls;
-  struct GNUNET_PEERSTORE_StoreContext *sc;
   struct GNUNET_MQ_Envelope *ev;
 
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "Reconnecting...\n");
-  for (ic = h->iterate_head; NULL != ic; ic = next)
-  {
-    next = ic->next;
-    if (GNUNET_YES == ic->iterating)
-    {
-      icb = ic->callback;
-      icb_cls = ic->callback_cls;
-      GNUNET_PEERSTORE_iterate_cancel (ic);
-      if (NULL != icb)
-        icb (icb_cls,
-             NULL,
-             "Iteration canceled due to reconnection");
-    }
-  }
-  if (NULL != h->mq)
-  {
-    GNUNET_MQ_destroy (h->mq);
-    h->mq = NULL;
-  }
   h->mq = GNUNET_CLIENT_connect (h->cfg,
                                  "peerstore",
                                  mq_handlers,
@@ -805,7 +859,9 @@ reconnect (struct GNUNET_PEERSTORE_Handle *h)
     GNUNET_CONTAINER_multihashmap_iterate (h->watches,
                                            &rewatch_it,
                                            h);
-  for (ic = h->iterate_head; NULL != ic; ic = ic->next)
+  for (struct GNUNET_PEERSTORE_IterateContext *ic = h->iterate_head;
+       NULL != ic;
+       ic = ic->next)
   {
     ev = PEERSTORE_create_record_mq_envelope (ic->sub_system,
                                               &ic->peer,
@@ -816,7 +872,9 @@ reconnect (struct GNUNET_PEERSTORE_Handle *h)
                                               GNUNET_MESSAGE_TYPE_PEERSTORE_ITERATE);
     GNUNET_MQ_send (h->mq, ev);
   }
-  for (sc = h->store_head; NULL != sc; sc = sc->next)
+  for (struct GNUNET_PEERSTORE_StoreContext *sc = h->store_head;
+       NULL != sc;
+       sc = sc->next)
   {
     ev = PEERSTORE_create_record_mq_envelope (sc->sub_system,
                                               &sc->peer,
index cd1837e1a0e87e1b9fcf1c836732ce3396870ffe..0cd2522ecd67bc0629716db25b41235680b527c1 100644 (file)
@@ -440,7 +440,7 @@ database_setup (struct Plugin *plugin)
         o = NULL;
         s = GNUNET_STRINGS_base64_decode (peer,
                                           strlen (peer),
-                                          &o);
+                                          (void**)&o);
         if (sizeof (struct GNUNET_PeerIdentity) == s)
           GNUNET_memcpy (&entry->peer,
                          o,
@@ -451,7 +451,7 @@ database_setup (struct Plugin *plugin)
       }
       entry->value_size = GNUNET_STRINGS_base64_decode (value,
                                                         strlen (value),
-                                                        (char**)&entry->value);
+                                                        (void**)&entry->value);
       if (GNUNET_SYSERR ==
           GNUNET_STRINGS_fancy_time_to_absolute (expiry,
                                                  &entry->expiry))
index 5f18d153225245219f1ed47848e23acddb69ff42..d6be5f06d577f8fd4d5d50588cfdefd820a9fbaf 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -188,7 +188,7 @@ run (void *cls,
 int
 main (int argc, char *argv[])
 {
-  char cfg_name[128];
+  char cfg_name[PATH_MAX];
   char *const xargv[] = {
     "test-plugin-peerstore",
     "-c",
index b0f0a8a6b283fd1e4c3e07228b2d43d96fb56823..336ca8c4253556f8de7a2389ab8a72f4eb76724a 100644 (file)
@@ -11,7 +11,7 @@
   WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Affero General Public License for more details.
+
   You should have received a copy of the GNU Affero General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
diff --git a/src/psyc/.gitignore b/src/psyc/.gitignore
deleted file mode 100644 (file)
index 14a1753..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-gnunet-service-psyc
-test_psyc
diff --git a/src/psyc/Makefile.am b/src/psyc/Makefile.am
deleted file mode 100644 (file)
index 511e3e3..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-# This Makefile.am is in the public domain
-AM_CPPFLAGS = -I$(top_srcdir)/src/include
-
-pkgcfgdir= $(pkgdatadir)/config.d/
-
-libexecdir= $(pkglibdir)/libexec/
-
-pkgcfg_DATA = \
-  psyc.conf
-
-
-if MINGW
- WINFLAGS = -Wl,--no-undefined -Wl,--export-all-symbols
-endif
-
-if USE_COVERAGE
-  AM_CFLAGS = --coverage -O0
-  XLIB = -lgcov
-endif
-
-lib_LTLIBRARIES = libgnunetpsyc.la
-
-libgnunetpsyc_la_SOURCES = \
-  psyc_api.c psyc.h
-libgnunetpsyc_la_LIBADD = \
-  $(top_builddir)/src/util/libgnunetutil.la \
-  $(top_builddir)/src/psycutil/libgnunetpsycutil.la \
-  $(GN_LIBINTL) $(XLIB)
-libgnunetpsyc_la_LDFLAGS = \
-  $(GN_LIB_LDFLAGS)  $(WINFLAGS) \
-  -version-info 0:0:0
-
-bin_PROGRAMS =
-
-libexec_PROGRAMS = \
-  gnunet-service-psyc
-
-gnunet_service_psyc_SOURCES = \
-  gnunet-service-psyc.c
-gnunet_service_psyc_LDADD = \
-  $(top_builddir)/src/util/libgnunetutil.la \
-  $(top_builddir)/src/statistics/libgnunetstatistics.la \
-  $(top_builddir)/src/multicast/libgnunetmulticast.la \
-  $(top_builddir)/src/psycstore/libgnunetpsycstore.la \
-  $(top_builddir)/src/psycutil/libgnunetpsycutil.la \
-  $(GN_LIBINTL)
-gnunet_service_psyc_CFLAGS = $(AM_CFLAGS)
-
-
-if HAVE_TESTING
-check_PROGRAMS = \
- test_psyc
-# test_psyc2
-endif
-
-if ENABLE_TEST_RUN
-AM_TESTS_ENVIRONMENT=export GNUNET_PREFIX=$${GNUNET_PREFIX:-@libdir@};export PATH=$${GNUNET_PREFIX:-@prefix@}/bin:$$PATH;unset XDG_DATA_HOME;unset XDG_CONFIG_HOME;
-TESTS = $(check_PROGRAMS)
-endif
-
-test_psyc_SOURCES = \
- test_psyc.c
-test_psyc_LDADD = \
-  libgnunetpsyc.la \
-  $(top_builddir)/src/psycutil/libgnunetpsycutil.la \
-  $(top_builddir)/src/testing/libgnunettesting.la \
-  $(top_builddir)/src/util/libgnunetutil.la
-#test_psyc2_SOURCES = \
-#  test_psyc2.c
-#test_psyc2_LDADD = \
-#  libgnunetpsyc.la \
-#  $(top_builddir)/src/psycutil/libgnunetpsycutil.la \
-#  $(top_builddir)/src/testbed/libgnunettestbed.la \
-#  $(top_builddir)/src/util/libgnunetutil.la
-
-EXTRA_DIST = \
-  test_psyc.conf
diff --git a/src/psyc/gnunet-service-psyc.c b/src/psyc/gnunet-service-psyc.c
deleted file mode 100644 (file)
index 6f2f7a9..0000000
+++ /dev/null
@@ -1,2860 +0,0 @@
-/*
- * This file is part of GNUnet
- * Copyright (C) 2013 GNUnet e.V.
- *
- * GNUnet is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNUnet is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
- */
-
-/**
- * @file psyc/gnunet-service-psyc.c
- * @brief PSYC service
- * @author Gabor X Toth
- */
-
-#include <inttypes.h>
-
-#include "platform.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_constants.h"
-#include "gnunet_protocols.h"
-#include "gnunet_statistics_service.h"
-#include "gnunet_multicast_service.h"
-#include "gnunet_psycstore_service.h"
-#include "gnunet_psyc_service.h"
-#include "gnunet_psyc_util_lib.h"
-#include "psyc.h"
-
-
-/**
- * Handle to our current configuration.
- */
-static const struct GNUNET_CONFIGURATION_Handle *cfg;
-
-/**
- * Service handle.
- */
-static struct GNUNET_SERVICE_Handle *service;
-
-/**
- * Handle to the statistics service.
- */
-static struct GNUNET_STATISTICS_Handle *stats;
-
-/**
- * Handle to the PSYCstore.
- */
-static struct GNUNET_PSYCSTORE_Handle *store;
-
-/**
- * All connected masters.
- * Channel's pub_key_hash -> struct Master
- */
-static struct GNUNET_CONTAINER_MultiHashMap *masters;
-
-/**
- * All connected slaves.
- * Channel's pub_key_hash -> struct Slave
- */
-static struct GNUNET_CONTAINER_MultiHashMap *slaves;
-
-/**
- * Connected slaves per channel.
- * Channel's pub_key_hash -> Slave's pub_key -> struct Slave
- */
-static struct GNUNET_CONTAINER_MultiHashMap *channel_slaves;
-
-
-/**
- * Message in the transmission queue.
- */
-struct TransmitMessage
-{
-  struct TransmitMessage *prev;
-  struct TransmitMessage *next;
-
-  struct GNUNET_SERVICE_Client *client;
-
-  /**
-   * ID assigned to the message.
-   */
-  uint64_t id;
-
-  /**
-   * Size of message.
-   */
-  uint16_t size;
-
-  /**
-   * Type of first message part.
-   */
-  uint16_t first_ptype;
-
-  /**
-   * Type of last message part.
-   */
-  uint16_t last_ptype;
-
-  /* Followed by message */
-};
-
-
-/**
- * Cache for received message fragments.
- * Message fragments are only sent to clients after all modifiers arrived.
- *
- * chan_key -> MultiHashMap chan_msgs
- */
-static struct GNUNET_CONTAINER_MultiHashMap *recv_cache;
-
-
-/**
- * Entry in the chan_msgs hashmap of @a recv_cache:
- * fragment_id -> RecvCacheEntry
- */
-struct RecvCacheEntry
-{
-  struct GNUNET_MULTICAST_MessageHeader *mmsg;
-  uint16_t ref_count;
-};
-
-
-/**
- * Entry in the @a recv_frags hash map of a @a Channel.
- * message_id -> FragmentQueue
- */
-struct FragmentQueue
-{
-  /**
-   * Fragment IDs stored in @a recv_cache.
-   */
-  struct GNUNET_CONTAINER_Heap *fragments;
-
-  /**
-   * Total size of received fragments.
-   */
-  uint64_t size;
-
-  /**
-   * Total size of received header fragments (METHOD & MODIFIERs)
-   */
-  uint64_t header_size;
-
-  /**
-   * The @a state_delta field from struct GNUNET_PSYC_MessageMethod.
-   */
-  uint64_t state_delta;
-
-  /**
-   * The @a flags field from struct GNUNET_PSYC_MessageMethod.
-   */
-  uint32_t flags;
-
-  /**
-   * Receive state of message.
-   *
-   * @see MessageFragmentState
-   */
-  uint8_t state;
-
-  /**
-   * Whether the state is already modified in PSYCstore.
-   */
-  uint8_t state_is_modified;
-
-  /**
-   * Is the message queued for delivery to the client?
-   * i.e. added to the recv_msgs queue
-   */
-  uint8_t is_queued;
-};
-
-
-/**
- * List of connected clients.
- */
-struct ClientList
-{
-  struct ClientList *prev;
-  struct ClientList *next;
-
-  struct GNUNET_SERVICE_Client *client;
-};
-
-
-struct Operation
-{
-  struct Operation *prev;
-  struct Operation *next;
-
-  struct GNUNET_SERVICE_Client *client;
-  struct Channel *channel;
-  uint64_t op_id;
-  uint32_t flags;
-};
-
-
-/**
- * Common part of the client context for both a channel master and slave.
- */
-struct Channel
-{
-  struct ClientList *clients_head;
-  struct ClientList *clients_tail;
-
-  struct Operation *op_head;
-  struct Operation *op_tail;
-
-  struct TransmitMessage *tmit_head;
-  struct TransmitMessage *tmit_tail;
-
-  /**
-   * Current PSYCstore operation.
-   */
-  struct GNUNET_PSYCSTORE_OperationHandle *store_op;
-
-  /**
-   * Received fragments not yet sent to the client.
-   * message_id -> FragmentQueue
-   */
-  struct GNUNET_CONTAINER_MultiHashMap *recv_frags;
-
-  /**
-   * Received message IDs not yet sent to the client.
-   */
-  struct GNUNET_CONTAINER_Heap *recv_msgs;
-
-  /**
-   * Public key of the channel.
-   */
-  struct GNUNET_CRYPTO_EddsaPublicKey pub_key;
-
-  /**
-   * Hash of @a pub_key.
-   */
-  struct GNUNET_HashCode pub_key_hash;
-
-  /**
-   * Last message ID sent to the client.
-   * 0 if there is no such message.
-   */
-  uint64_t max_message_id;
-
-  /**
-   * ID of the last stateful message, where the state operations has been
-   * processed and saved to PSYCstore and which has been sent to the client.
-   * 0 if there is no such message.
-   */
-  uint64_t max_state_message_id;
-
-  /**
-   * Expected value size for the modifier being received from the PSYC service.
-   */
-  uint32_t tmit_mod_value_size_expected;
-
-  /**
-   * Actual value size for the modifier being received from the PSYC service.
-   */
-  uint32_t tmit_mod_value_size;
-
-  /**
-   * Is this channel ready to receive messages from client?
-   * #GNUNET_YES or #GNUNET_NO
-   */
-  uint8_t is_ready;
-
-  /**
-   * Is the client disconnected?
-   * #GNUNET_YES or #GNUNET_NO
-   */
-  uint8_t is_disconnecting;
-
-  /**
-   * Is this a channel master (#GNUNET_YES), or slave (#GNUNET_NO)?
-   */
-  uint8_t is_master;
-
-  union {
-    struct Master *master;
-    struct Slave *slave;
-  };
-};
-
-
-/**
- * Client context for a channel master.
- */
-struct Master
-{
-  /**
-   * Channel struct common for Master and Slave
-   */
-  struct Channel channel;
-
-  /**
-   * Private key of the channel.
-   */
-  struct GNUNET_CRYPTO_EddsaPrivateKey priv_key;
-
-  /**
-   * Handle for the multicast origin.
-   */
-  struct GNUNET_MULTICAST_Origin *origin;
-
-  /**
-   * Transmit handle for multicast.
-   */
-  struct GNUNET_MULTICAST_OriginTransmitHandle *tmit_handle;
-
-  /**
-   * Incoming join requests from multicast.
-   * member_pub_key -> struct GNUNET_MULTICAST_JoinHandle *
-   */
-  struct GNUNET_CONTAINER_MultiHashMap *join_reqs;
-
-  /**
-   * Last message ID transmitted to this channel.
-   *
-   * Incremented before sending a message, thus the message_id in messages sent
-   * starts from 1.
-   */
-  uint64_t max_message_id;
-
-  /**
-   * ID of the last message with state operations transmitted to the channel.
-   * 0 if there is no such message.
-   */
-  uint64_t max_state_message_id;
-
-  /**
-   * Maximum group generation transmitted to the channel.
-   */
-  uint64_t max_group_generation;
-
-  /**
-   * @see enum GNUNET_PSYC_Policy
-   */
-  enum GNUNET_PSYC_Policy policy;
-};
-
-
-/**
- * Client context for a channel slave.
- */
-struct Slave
-{
-  /**
-   * Channel struct common for Master and Slave
-   */
-  struct Channel channel;
-
-  /**
-   * Private key of the slave.
-   */
-  struct GNUNET_CRYPTO_EcdsaPrivateKey priv_key;
-
-  /**
-   * Public key of the slave.
-   */
-  struct GNUNET_CRYPTO_EcdsaPublicKey pub_key;
-
-  /**
-   * Hash of @a pub_key.
-   */
-  struct GNUNET_HashCode pub_key_hash;
-
-  /**
-   * Handle for the multicast member.
-   */
-  struct GNUNET_MULTICAST_Member *member;
-
-  /**
-   * Transmit handle for multicast.
-   */
-  struct GNUNET_MULTICAST_MemberTransmitHandle *tmit_handle;
-
-  /**
-   * Peer identity of the origin.
-   */
-  struct GNUNET_PeerIdentity origin;
-
-  /**
-   * Number of items in @a relays.
-   */
-  uint32_t relay_count;
-
-  /**
-   * Relays that multicast can use to connect.
-   */
-  struct GNUNET_PeerIdentity *relays;
-
-  /**
-   * Join request to be transmitted to the master on join.
-   */
-  struct GNUNET_PSYC_Message *join_msg;
-
-  /**
-   * Join decision received from multicast.
-   */
-  struct GNUNET_PSYC_JoinDecisionMessage *join_dcsn;
-
-  /**
-   * Maximum request ID for this channel.
-   */
-  uint64_t max_request_id;
-
-  /**
-   * Join flags.
-   */
-  enum GNUNET_PSYC_SlaveJoinFlags join_flags;
-};
-
-
-/**
- * Client context.
- */
-struct Client {
-  struct GNUNET_SERVICE_Client *client;
-  struct Channel *channel;
-};
-
-
-struct ReplayRequestKey
-{
-  uint64_t fragment_id;
-  uint64_t message_id;
-  uint64_t fragment_offset;
-  uint64_t flags;
-};
-
-
-static void
-transmit_message (struct Channel *chn);
-
-static uint64_t
-message_queue_run (struct Channel *chn);
-
-static uint64_t
-message_queue_drop (struct Channel *chn);
-
-
-static void
-schedule_transmit_message (void *cls)
-{
-  struct Channel *chn = cls;
-
-  transmit_message (chn);
-}
-
-
-/**
- * Task run during shutdown.
- *
- * @param cls unused
- */
-static void
-shutdown_task (void *cls)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "shutting down...\n");
-  GNUNET_PSYCSTORE_disconnect (store);
-  if (NULL != stats)
-  {
-    GNUNET_STATISTICS_destroy (stats, GNUNET_YES);
-    stats = NULL;
-  }
-}
-
-
-static struct Operation *
-op_add (struct Channel *chn, struct GNUNET_SERVICE_Client *client,
-        uint64_t op_id, uint32_t flags)
-{
-  struct Operation *op = GNUNET_malloc (sizeof (*op));
-  op->client = client;
-  op->channel = chn;
-  op->op_id = op_id;
-  op->flags = flags;
-  GNUNET_CONTAINER_DLL_insert (chn->op_head, chn->op_tail, op);
-  return op;
-}
-
-
-static void
-op_remove (struct Operation *op)
-{
-  GNUNET_CONTAINER_DLL_remove (op->channel->op_head, op->channel->op_tail, op);
-  GNUNET_free (op);
-}
-
-
-/**
- * Clean up master data structures after a client disconnected.
- */
-static void
-cleanup_master (struct Master *mst)
-{
-  struct Channel *chn = &mst->channel;
-
-  GNUNET_CONTAINER_multihashmap_destroy (mst->join_reqs);
-  GNUNET_CONTAINER_multihashmap_remove (masters, &chn->pub_key_hash, mst);
-}
-
-
-/**
- * Clean up slave data structures after a client disconnected.
- */
-static void
-cleanup_slave (struct Slave *slv)
-{
-  struct Channel *chn = &slv->channel;
-  struct GNUNET_CONTAINER_MultiHashMap *
-    chn_slv = GNUNET_CONTAINER_multihashmap_get (channel_slaves,
-                                                &chn->pub_key_hash);
-  GNUNET_assert (NULL != chn_slv);
-  GNUNET_CONTAINER_multihashmap_remove (chn_slv, &slv->pub_key_hash, slv);
-
-  if (0 == GNUNET_CONTAINER_multihashmap_size (chn_slv))
-  {
-    GNUNET_CONTAINER_multihashmap_remove (channel_slaves, &chn->pub_key_hash,
-                                          chn_slv);
-    GNUNET_CONTAINER_multihashmap_destroy (chn_slv);
-  }
-  GNUNET_CONTAINER_multihashmap_remove (slaves, &chn->pub_key_hash, slv);
-
-  if (NULL != slv->join_msg)
-  {
-    GNUNET_free (slv->join_msg);
-    slv->join_msg = NULL;
-  }
-  if (NULL != slv->relays)
-  {
-    GNUNET_free (slv->relays);
-    slv->relays = NULL;
-  }
-  GNUNET_CONTAINER_multihashmap_remove (slaves, &chn->pub_key_hash, slv);
-}
-
-
-/**
- * Clean up channel data structures after a client disconnected.
- */
-static void
-cleanup_channel (struct Channel *chn)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Cleaning up channel %s. master? %u\n",
-              chn,
-              GNUNET_h2s (&chn->pub_key_hash),
-              chn->is_master);
-  message_queue_drop (chn);
-  GNUNET_CONTAINER_multihashmap_destroy (chn->recv_frags);
-  chn->recv_frags = NULL;
-
-  if (NULL != chn->store_op)
-  {
-    GNUNET_PSYCSTORE_operation_cancel (chn->store_op);
-    chn->store_op = NULL;
-  }
-
-  (GNUNET_YES == chn->is_master)
-    ? cleanup_master (chn->master)
-    : cleanup_slave (chn->slave);
-  GNUNET_free (chn);
-}
-
-
-/**
- * Called whenever a client is disconnected.
- * Frees our resources associated with that client.
- *
- * @param cls closure
- * @param client identification of the client
- * @param app_ctx must match @a client
- */
-static void
-client_notify_disconnect (void *cls,
-                          struct GNUNET_SERVICE_Client *client,
-                          void *app_ctx)
-{
-  struct Client *c = app_ctx;
-  struct Channel *chn = c->channel;
-  GNUNET_free (c);
-
-  if (NULL == chn)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "%p User context is NULL in client_notify_disconnect ()\n",
-                chn);
-    GNUNET_break (0);
-    return;
-  }
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Client %p (%s) disconnected from channel %s\n",
-              chn,
-              client,
-              (GNUNET_YES == chn->is_master) ? "master" : "slave",
-              GNUNET_h2s (&chn->pub_key_hash));
-
-  struct ClientList *cli = chn->clients_head;
-  while (NULL != cli)
-  {
-    if (cli->client == client)
-    {
-      GNUNET_CONTAINER_DLL_remove (chn->clients_head, chn->clients_tail, cli);
-      GNUNET_free (cli);
-      break;
-    }
-    cli = cli->next;
-  }
-
-  struct Operation *op = chn->op_head;
-  while (NULL != op)
-  {
-    if (op->client == client)
-    {
-      op->client = NULL;
-      break;
-    }
-    op = op->next;
-  }
-
-  if (NULL == chn->clients_head)
-  { /* Last client disconnected. */
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "%p Last client (%s) disconnected from channel %s\n",
-                chn,
-                (GNUNET_YES == chn->is_master) ? "master" : "slave",
-                GNUNET_h2s (&chn->pub_key_hash));
-    chn->is_disconnecting = GNUNET_YES;
-    cleanup_channel (chn);
-  }
-}
-
-
-/**
- * A new client connected.
- *
- * @param cls NULL
- * @param client client to add
- * @param mq message queue for @a client
- * @return @a client
- */
-static void *
-client_notify_connect (void *cls,
-                       struct GNUNET_SERVICE_Client *client,
-                       struct GNUNET_MQ_Handle *mq)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Client connected: %p\n", client);
-
-  struct Client *c = GNUNET_malloc (sizeof (*c));
-  c->client = client;
-
-  return c;
-}
-
-
-/**
- * Send message to all clients connected to the channel.
- */
-static void
-client_send_msg (const struct Channel *chn,
-                 const struct GNUNET_MessageHeader *msg)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Sending message to clients of channel %p.\n",
-              chn);
-
-  struct ClientList *cli = chn->clients_head;
-  while (NULL != cli)
-  {
-    struct GNUNET_MQ_Envelope *
-      env = GNUNET_MQ_msg_copy (msg);
-
-    GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (cli->client),
-                    env);
-    cli = cli->next;
-  }
-}
-
-
-/**
- * Send a result code back to the client.
- *
- * @param client
- *        Client that should receive the result code.
- * @param result_code
- *        Code to transmit.
- * @param op_id
- *        Operation ID in network byte order.
- * @param data
- *        Data payload or NULL.
- * @param data_size
- *        Size of @a data.
- */
-static void
-client_send_result (struct GNUNET_SERVICE_Client *client, uint64_t op_id,
-                    int64_t result_code, const void *data, uint16_t data_size)
-{
-  struct GNUNET_OperationResultMessage *res;
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg_extra (res,
-                               data_size,
-                               GNUNET_MESSAGE_TYPE_PSYC_RESULT_CODE);
-  res->result_code = GNUNET_htonll (result_code);
-  res->op_id = op_id;
-  if (0 < data_size)
-    GNUNET_memcpy (&res[1], data, data_size);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "%p Sending result to client for OP ID %" PRIu64 ": %" PRId64 " (size: %u)\n",
-             client,
-              GNUNET_ntohll (op_id),
-              result_code,
-              data_size);
-
-  GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client), env);
-}
-
-
-/**
- * Closure for join_mem_test_cb()
- */
-struct JoinMemTestClosure
-{
-  struct GNUNET_CRYPTO_EcdsaPublicKey slave_pub_key;
-  struct Channel *channel;
-  struct GNUNET_MULTICAST_JoinHandle *join_handle;
-  struct GNUNET_PSYC_JoinRequestMessage *join_msg;
-};
-
-
-/**
- * Membership test result callback used for join requests.
- */
-static void
-join_mem_test_cb (void *cls, int64_t result,
-                  const char *err_msg, uint16_t err_msg_size)
-{
-  struct JoinMemTestClosure *jcls = cls;
-
-  if (GNUNET_NO == result && GNUNET_YES == jcls->channel->is_master)
-  { /* Pass on join request to client if this is a master channel */
-    struct Master *mst = jcls->channel->master;
-    struct GNUNET_HashCode slave_pub_hash;
-    GNUNET_CRYPTO_hash (&jcls->slave_pub_key, sizeof (jcls->slave_pub_key),
-                        &slave_pub_hash);
-    GNUNET_CONTAINER_multihashmap_put (mst->join_reqs, &slave_pub_hash, jcls->join_handle,
-                                       GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
-    client_send_msg (jcls->channel, &jcls->join_msg->header);
-  }
-  else
-  {
-    if (GNUNET_SYSERR == result)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                  "Could not perform membership test (%.*s)\n",
-                  err_msg_size, err_msg);
-    }
-    // FIXME: add relays
-    GNUNET_MULTICAST_join_decision (jcls->join_handle, result, 0, NULL, NULL);
-  }
-  GNUNET_free (jcls->join_msg);
-  GNUNET_free (jcls);
-}
-
-
-/**
- * Incoming join request from multicast.
- */
-static void
-mcast_recv_join_request (void *cls,
-                         const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_pub_key,
-                         const struct GNUNET_MessageHeader *join_msg,
-                         struct GNUNET_MULTICAST_JoinHandle *jh)
-{
-  struct Channel *chn = cls;
-  uint16_t join_msg_size = 0;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Got join request.\n",
-              chn);
-  if (NULL != join_msg)
-  {
-    if (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE == ntohs (join_msg->type))
-    {
-      join_msg_size = ntohs (join_msg->size);
-    }
-    else
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-                  "%p Got join message with invalid type %u.\n",
-                  chn,
-                  ntohs (join_msg->type));
-    }
-  }
-
-  struct GNUNET_PSYC_JoinRequestMessage *
-    req = GNUNET_malloc (sizeof (*req) + join_msg_size);
-  req->header.size = htons (sizeof (*req) + join_msg_size);
-  req->header.type = htons (GNUNET_MESSAGE_TYPE_PSYC_JOIN_REQUEST);
-  req->slave_pub_key = *slave_pub_key;
-  if (0 < join_msg_size)
-    GNUNET_memcpy (&req[1], join_msg, join_msg_size);
-
-  struct JoinMemTestClosure *jcls = GNUNET_malloc (sizeof (*jcls));
-  jcls->slave_pub_key = *slave_pub_key;
-  jcls->channel = chn;
-  jcls->join_handle = jh;
-  jcls->join_msg = req;
-
-  GNUNET_PSYCSTORE_membership_test (store, &chn->pub_key, slave_pub_key,
-                                    chn->max_message_id, 0,
-                                    &join_mem_test_cb, jcls);
-}
-
-
-/**
- * Join decision received from multicast.
- */
-static void
-mcast_recv_join_decision (void *cls, int is_admitted,
-                          const struct GNUNET_PeerIdentity *peer,
-                          uint16_t relay_count,
-                          const struct GNUNET_PeerIdentity *relays,
-                          const struct GNUNET_MessageHeader *join_resp)
-{
-  struct Slave *slv = cls;
-  struct Channel *chn = &slv->channel;
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Got join decision: %d\n",
-              slv,
-              is_admitted);
-  if (GNUNET_YES == chn->is_ready)
-  {
-    /* Already admitted */
-    return;
-  }
-
-  uint16_t join_resp_size = (NULL != join_resp) ? ntohs (join_resp->size) : 0;
-  struct GNUNET_PSYC_JoinDecisionMessage *
-    dcsn = slv->join_dcsn = GNUNET_malloc (sizeof (*dcsn) + join_resp_size);
-  dcsn->header.size = htons (sizeof (*dcsn) + join_resp_size);
-  dcsn->header.type = htons (GNUNET_MESSAGE_TYPE_PSYC_JOIN_DECISION);
-  dcsn->is_admitted = htonl (is_admitted);
-  if (0 < join_resp_size)
-    GNUNET_memcpy (&dcsn[1], join_resp, join_resp_size);
-
-  client_send_msg (chn, &dcsn->header);
-
-  if (GNUNET_YES == is_admitted
-      && ! (GNUNET_PSYC_SLAVE_JOIN_LOCAL & slv->join_flags))
-  {
-    chn->is_ready = GNUNET_YES;
-  }
-}
-
-
-static int
-store_recv_fragment_replay (void *cls,
-                            struct GNUNET_MULTICAST_MessageHeader *msg,
-                            enum GNUNET_PSYCSTORE_MessageFlags flags)
-{
-  struct GNUNET_MULTICAST_ReplayHandle *rh = cls;
-
-  GNUNET_MULTICAST_replay_response (rh, &msg->header, GNUNET_MULTICAST_REC_OK);
-  return GNUNET_YES;
-}
-
-
-/**
- * Received result of GNUNET_PSYCSTORE_fragment_get() for multicast replay.
- */
-static void
-store_recv_fragment_replay_result (void *cls,
-                                   int64_t result,
-                                   const char *err_msg,
-                                   uint16_t err_msg_size)
-{
-  struct GNUNET_MULTICAST_ReplayHandle *rh = cls;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Fragment replay: PSYCSTORE returned %" PRId64 " (%.*s)\n",
-              rh,
-              result,
-              err_msg_size,
-              err_msg);
-  switch (result)
-  {
-  case GNUNET_YES:
-    break;
-
-  case GNUNET_NO:
-    GNUNET_MULTICAST_replay_response (rh, NULL,
-                                      GNUNET_MULTICAST_REC_NOT_FOUND);
-    return;
-
-  case GNUNET_PSYCSTORE_MEMBERSHIP_TEST_FAILED:
-    GNUNET_MULTICAST_replay_response (rh, NULL,
-                                      GNUNET_MULTICAST_REC_ACCESS_DENIED);
-    return;
-
-  case GNUNET_SYSERR:
-    GNUNET_MULTICAST_replay_response (rh, NULL,
-                                      GNUNET_MULTICAST_REC_INTERNAL_ERROR);
-    return;
-  }
-  /* GNUNET_MULTICAST_replay_response frees 'rh' when passed
-   * an error code, so it must be ensured no further processing
-   * is attempted on 'rh'. Maybe this should be refactored as
-   * it doesn't look very intuitive.   --lynX
-   */
-  GNUNET_MULTICAST_replay_response_end (rh);
-}
-
-
-/**
- * Incoming fragment replay request from multicast.
- */
-static void
-mcast_recv_replay_fragment (void *cls,
-                            const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_pub_key,
-                            uint64_t fragment_id, uint64_t flags,
-                            struct GNUNET_MULTICAST_ReplayHandle *rh)
-
-{
-  struct Channel *chn = cls;
-  GNUNET_PSYCSTORE_fragment_get (store, &chn->pub_key, slave_pub_key,
-                                 fragment_id, fragment_id,
-                                 &store_recv_fragment_replay,
-                                 &store_recv_fragment_replay_result, rh);
-}
-
-
-/**
- * Incoming message replay request from multicast.
- */
-static void
-mcast_recv_replay_message (void *cls,
-                           const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_pub_key,
-                           uint64_t message_id,
-                           uint64_t fragment_offset,
-                           uint64_t flags,
-                           struct GNUNET_MULTICAST_ReplayHandle *rh)
-{
-  struct Channel *chn = cls;
-  GNUNET_PSYCSTORE_message_get (store, &chn->pub_key, slave_pub_key,
-                                message_id, message_id, 1, NULL,
-                                &store_recv_fragment_replay,
-                                &store_recv_fragment_replay_result, rh);
-}
-
-
-/**
- * Convert an uint64_t in network byte order to a HashCode
- * that can be used as key in a MultiHashMap
- */
-static inline void
-hash_key_from_nll (struct GNUNET_HashCode *key, uint64_t n)
-{
-  /* use little-endian order, as idx_of MultiHashMap casts key to unsigned int */
-  /* TODO: use built-in byte swap functions if available */
-
-  n = ((n <<  8) & 0xFF00FF00FF00FF00ULL) | ((n >>  8) & 0x00FF00FF00FF00FFULL);
-  n = ((n << 16) & 0xFFFF0000FFFF0000ULL) | ((n >> 16) & 0x0000FFFF0000FFFFULL);
-
-  *key = (struct GNUNET_HashCode) {};
-  *((uint64_t *) key)
-    = (n << 32) | (n >> 32);
-}
-
-
-/**
- * Convert an uint64_t in host byte order to a HashCode
- * that can be used as key in a MultiHashMap
- */
-static inline void
-hash_key_from_hll (struct GNUNET_HashCode *key, uint64_t n)
-{
-#if __BYTE_ORDER == __BIG_ENDIAN
-  hash_key_from_nll (key, n);
-#elif __BYTE_ORDER == __LITTLE_ENDIAN
-  *key = (struct GNUNET_HashCode) {};
-  *((uint64_t *) key) = n;
-#else
-  #error byteorder undefined
-#endif
-}
-
-
-/**
- * Initialize PSYC message header.
- */
-static inline void
-psyc_msg_init (struct GNUNET_PSYC_MessageHeader *pmsg,
-               const struct GNUNET_MULTICAST_MessageHeader *mmsg, uint32_t flags)
-{
-  uint16_t size = ntohs (mmsg->header.size);
-  uint16_t psize = sizeof (*pmsg) + size - sizeof (*mmsg);
-
-  pmsg->header.size = htons (psize);
-  pmsg->header.type = htons (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE);
-  pmsg->message_id = mmsg->message_id;
-  pmsg->fragment_offset = mmsg->fragment_offset;
-  pmsg->flags = htonl (flags);
-
-  GNUNET_memcpy (&pmsg[1], &mmsg[1], size - sizeof (*mmsg));
-}
-
-
-/**
- * Create a new PSYC message from a multicast message for sending it to clients.
- */
-static inline struct GNUNET_PSYC_MessageHeader *
-psyc_msg_new (const struct GNUNET_MULTICAST_MessageHeader *mmsg, uint32_t flags)
-{
-  struct GNUNET_PSYC_MessageHeader *pmsg;
-  uint16_t size = ntohs (mmsg->header.size);
-  uint16_t psize = sizeof (*pmsg) + size - sizeof (*mmsg);
-
-  pmsg = GNUNET_malloc (psize);
-  psyc_msg_init (pmsg, mmsg, flags);
-  return pmsg;
-}
-
-
-/**
- * Send multicast message to all clients connected to the channel.
- */
-static void
-client_send_mcast_msg (struct Channel *chn,
-                       const struct GNUNET_MULTICAST_MessageHeader *mmsg,
-                       uint32_t flags)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Sending multicast message to client. fragment_id: %" PRIu64 ", message_id: %" PRIu64 "\n",
-              chn,
-              GNUNET_ntohll (mmsg->fragment_id),
-              GNUNET_ntohll (mmsg->message_id));
-
-  struct GNUNET_PSYC_MessageHeader *
-    pmsg = GNUNET_PSYC_message_header_create (mmsg, flags);
-  client_send_msg (chn, &pmsg->header);
-  GNUNET_free (pmsg);
-}
-
-
-/**
- * Send multicast request to all clients connected to the channel.
- */
-static void
-client_send_mcast_req (struct Master *mst,
-                       const struct GNUNET_MULTICAST_RequestHeader *req)
-{
-  struct Channel *chn = &mst->channel;
-
-  struct GNUNET_PSYC_MessageHeader *pmsg;
-  uint16_t size = ntohs (req->header.size);
-  uint16_t psize = sizeof (*pmsg) + size - sizeof (*req);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Sending multicast request to client. fragment_id: %" PRIu64 ", message_id: %" PRIu64 "\n",
-              chn,
-              GNUNET_ntohll (req->fragment_id),
-              GNUNET_ntohll (req->request_id));
-
-  pmsg = GNUNET_malloc (psize);
-  pmsg->header.size = htons (psize);
-  pmsg->header.type = htons (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE);
-  pmsg->message_id = req->request_id;
-  pmsg->fragment_offset = req->fragment_offset;
-  pmsg->flags = htonl (GNUNET_PSYC_MESSAGE_REQUEST);
-  pmsg->slave_pub_key = req->member_pub_key;
-  GNUNET_memcpy (&pmsg[1], &req[1], size - sizeof (*req));
-
-  client_send_msg (chn, &pmsg->header);
-
-  /* FIXME: save req to PSYCstore so that it can be resent later to clients */
-
-  GNUNET_free (pmsg);
-}
-
-
-/**
- * Insert a multicast message fragment into the queue belonging to the message.
- *
- * @param chn          Channel.
- * @param mmsg         Multicast message fragment.
- * @param msg_id_hash  Message ID of @a mmsg in a struct GNUNET_HashCode.
- * @param first_ptype  First PSYC message part type in @a mmsg.
- * @param last_ptype   Last PSYC message part type in @a mmsg.
- */
-static void
-fragment_queue_insert (struct Channel *chn,
-                       const struct GNUNET_MULTICAST_MessageHeader *mmsg,
-                       uint16_t first_ptype, uint16_t last_ptype)
-{
-  const uint16_t size = ntohs (mmsg->header.size);
-  const uint64_t frag_offset = GNUNET_ntohll (mmsg->fragment_offset);
-  struct GNUNET_CONTAINER_MultiHashMap
-    *chan_msgs = GNUNET_CONTAINER_multihashmap_get (recv_cache,
-                                                    &chn->pub_key_hash);
-
-  struct GNUNET_HashCode msg_id_hash;
-  hash_key_from_nll (&msg_id_hash, mmsg->message_id);
-
-  struct FragmentQueue
-    *fragq = GNUNET_CONTAINER_multihashmap_get (chn->recv_frags, &msg_id_hash);
-
-  if (NULL == fragq)
-  {
-    fragq = GNUNET_malloc (sizeof (*fragq));
-    fragq->state = MSG_FRAG_STATE_HEADER;
-    fragq->fragments
-      = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN);
-
-    GNUNET_CONTAINER_multihashmap_put (chn->recv_frags, &msg_id_hash, fragq,
-                                       GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
-
-    if (NULL == chan_msgs)
-    {
-      chan_msgs = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_NO);
-      GNUNET_CONTAINER_multihashmap_put (recv_cache, &chn->pub_key_hash, chan_msgs,
-                                         GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
-    }
-  }
-
-  struct GNUNET_HashCode frag_id_hash;
-  hash_key_from_nll (&frag_id_hash, mmsg->fragment_id);
-  struct RecvCacheEntry
-    *cache_entry = GNUNET_CONTAINER_multihashmap_get (chan_msgs, &frag_id_hash);
-  if (NULL == cache_entry)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "%p Adding message fragment to cache. message_id: %" PRIu64 ", fragment_id: %" PRIu64 "\n",
-                chn,
-                GNUNET_ntohll (mmsg->message_id),
-                GNUNET_ntohll (mmsg->fragment_id));
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "%p header_size: %" PRIu64 " + %u\n",
-                chn,
-                fragq->header_size,
-                size);
-    cache_entry = GNUNET_malloc (sizeof (*cache_entry));
-    cache_entry->ref_count = 1;
-    cache_entry->mmsg = GNUNET_malloc (size);
-    GNUNET_memcpy (cache_entry->mmsg, mmsg, size);
-    GNUNET_CONTAINER_multihashmap_put (chan_msgs, &frag_id_hash, cache_entry,
-                                       GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
-  }
-  else
-  {
-    cache_entry->ref_count++;
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "%p Message fragment is already in cache. message_id: %" PRIu64 ", fragment_id: %" PRIu64 ", ref_count: %u\n",
-                chn,
-                GNUNET_ntohll (mmsg->message_id),
-                GNUNET_ntohll (mmsg->fragment_id),
-                cache_entry->ref_count);
-  }
-
-  if (MSG_FRAG_STATE_HEADER == fragq->state)
-  {
-    if (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_METHOD == first_ptype)
-    {
-      struct GNUNET_PSYC_MessageMethod *
-        pmeth = (struct GNUNET_PSYC_MessageMethod *) &mmsg[1];
-      fragq->state_delta = GNUNET_ntohll (pmeth->state_delta);
-      fragq->flags = ntohl (pmeth->flags);
-    }
-
-    if (last_ptype < GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_DATA)
-    {
-      fragq->header_size += size;
-    }
-    else if (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_METHOD == first_ptype
-             || frag_offset == fragq->header_size)
-    { /* header is now complete */
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                  "%p Header of message %" PRIu64 " is complete.\n",
-                  chn,
-                  GNUNET_ntohll (mmsg->message_id));
-
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                  "%p Adding message %" PRIu64 " to queue.\n",
-                  chn,
-                  GNUNET_ntohll (mmsg->message_id));
-      fragq->state = MSG_FRAG_STATE_DATA;
-    }
-    else
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                  "%p Header of message %" PRIu64 " is NOT complete yet: %" PRIu64 " != %" PRIu64 "\n",
-                  chn,
-                  GNUNET_ntohll (mmsg->message_id),
-                  frag_offset,
-                  fragq->header_size);
-    }
-  }
-
-  switch (last_ptype)
-  {
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_END:
-    if (frag_offset == fragq->size)
-      fragq->state = MSG_FRAG_STATE_END;
-    else
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                  "%p Message %" PRIu64 " is NOT complete yet: %" PRIu64 " != %" PRIu64 "\n",
-                  chn,
-                  GNUNET_ntohll (mmsg->message_id),
-                  frag_offset,
-                  fragq->size);
-    break;
-
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_CANCEL:
-    /* Drop message without delivering to client if it's a single fragment */
-    fragq->state =
-      (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_METHOD == first_ptype)
-      ? MSG_FRAG_STATE_DROP
-      : MSG_FRAG_STATE_CANCEL;
-  }
-
-  switch (fragq->state)
-  {
-  case MSG_FRAG_STATE_DATA:
-  case MSG_FRAG_STATE_END:
-  case MSG_FRAG_STATE_CANCEL:
-    if (GNUNET_NO == fragq->is_queued)
-    {
-      GNUNET_CONTAINER_heap_insert (chn->recv_msgs, NULL,
-                                    GNUNET_ntohll (mmsg->message_id));
-      fragq->is_queued = GNUNET_YES;
-    }
-  }
-
-  fragq->size += size;
-  GNUNET_CONTAINER_heap_insert (fragq->fragments, NULL,
-                                GNUNET_ntohll (mmsg->fragment_id));
-}
-
-
-/**
- * Run fragment queue of a message.
- *
- * Send fragments of a message in order to client, after all modifiers arrived
- * from multicast.
- *
- * @param chn
- *        Channel.
- * @param msg_id
- *        ID of the message @a fragq belongs to.
- * @param fragq
- *        Fragment queue of the message.
- * @param drop
- *        Drop message without delivering to client?
- *        #GNUNET_YES or #GNUNET_NO.
- */
-static void
-fragment_queue_run (struct Channel *chn, uint64_t msg_id,
-                    struct FragmentQueue *fragq, uint8_t drop)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Running message fragment queue for message %" PRIu64 " (state: %u).\n",
-              chn,
-              msg_id,
-              fragq->state);
-
-  struct GNUNET_CONTAINER_MultiHashMap
-    *chan_msgs = GNUNET_CONTAINER_multihashmap_get (recv_cache,
-                                                    &chn->pub_key_hash);
-  GNUNET_assert (NULL != chan_msgs);
-  uint64_t frag_id;
-
-  while (GNUNET_YES == GNUNET_CONTAINER_heap_peek2 (fragq->fragments, NULL,
-                                                    &frag_id))
-  {
-    struct GNUNET_HashCode frag_id_hash;
-    hash_key_from_hll (&frag_id_hash, frag_id);
-    struct RecvCacheEntry *cache_entry
-      = GNUNET_CONTAINER_multihashmap_get (chan_msgs, &frag_id_hash);
-    if (cache_entry != NULL)
-    {
-      if (GNUNET_NO == drop)
-      {
-        client_send_mcast_msg (chn, cache_entry->mmsg, 0);
-      }
-      if (cache_entry->ref_count <= 1)
-      {
-        GNUNET_CONTAINER_multihashmap_remove (chan_msgs, &frag_id_hash,
-                                              cache_entry);
-        GNUNET_free (cache_entry->mmsg);
-        GNUNET_free (cache_entry);
-      }
-      else
-      {
-        cache_entry->ref_count--;
-      }
-    }
-#if CACHE_AGING_IMPLEMENTED
-    else if (GNUNET_NO == drop)
-    {
-      /* TODO: fragment not in cache anymore, retrieve it from PSYCstore */
-    }
-#endif
-
-    GNUNET_CONTAINER_heap_remove_root (fragq->fragments);
-  }
-
-  if (MSG_FRAG_STATE_END <= fragq->state)
-  {
-    struct GNUNET_HashCode msg_id_hash;
-    hash_key_from_hll (&msg_id_hash, msg_id);
-
-    GNUNET_CONTAINER_multihashmap_remove (chn->recv_frags, &msg_id_hash, fragq);
-    GNUNET_CONTAINER_heap_destroy (fragq->fragments);
-    GNUNET_free (fragq);
-  }
-  else
-  {
-    fragq->is_queued = GNUNET_NO;
-  }
-}
-
-
-struct StateModifyClosure
-{
-  struct Channel *channel;
-  uint64_t msg_id;
-  struct GNUNET_HashCode msg_id_hash;
-};
-
-
-void
-store_recv_state_modify_result (void *cls, int64_t result,
-                                const char *err_msg, uint16_t err_msg_size)
-{
-  struct StateModifyClosure *mcls = cls;
-  struct Channel *chn = mcls->channel;
-  uint64_t msg_id = mcls->msg_id;
-
-  struct FragmentQueue *
-    fragq = GNUNET_CONTAINER_multihashmap_get (chn->recv_frags, &mcls->msg_id_hash);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p GNUNET_PSYCSTORE_state_modify() returned %" PRId64 " (%.*s)\n",
-              chn, result, err_msg_size, err_msg);
-
-  switch (result)
-  {
-  case GNUNET_OK:
-  case GNUNET_NO:
-    if (NULL != fragq)
-      fragq->state_is_modified = GNUNET_YES;
-    if (chn->max_state_message_id < msg_id)
-      chn->max_state_message_id = msg_id;
-    if (chn->max_message_id < msg_id)
-      chn->max_message_id = msg_id;
-
-    if (NULL != fragq)
-      fragment_queue_run (chn, msg_id, fragq, MSG_FRAG_STATE_DROP == fragq->state);
-    GNUNET_CONTAINER_heap_remove_root (chn->recv_msgs);
-    message_queue_run (chn);
-    break;
-
-  default:
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "%p GNUNET_PSYCSTORE_state_modify() failed with error %" PRId64 " (%.*s)\n",
-                chn, result, err_msg_size, err_msg);
-    /** @todo FIXME: handle state_modify error */
-  }
-}
-
-
-/**
- * Run message queue.
- *
- * Send messages in queue to client in order after a message has arrived from
- * multicast, according to the following:
- * - A message is only sent if all of its modifiers arrived.
- * - A stateful message is only sent if the previous stateful message
- *   has already been delivered to the client.
- *
- * @param chn  Channel.
- *
- * @return Number of messages removed from queue and sent to client.
- */
-static uint64_t
-message_queue_run (struct Channel *chn)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Running message queue.\n", chn);
-  uint64_t n = 0;
-  uint64_t msg_id;
-
-  while (GNUNET_YES == GNUNET_CONTAINER_heap_peek2 (chn->recv_msgs, NULL,
-                                                    &msg_id))
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "%p Processing message %" PRIu64 " in queue.\n", chn, msg_id);
-    struct GNUNET_HashCode msg_id_hash;
-    hash_key_from_hll (&msg_id_hash, msg_id);
-
-    struct FragmentQueue *
-      fragq = GNUNET_CONTAINER_multihashmap_get (chn->recv_frags, &msg_id_hash);
-
-    if (NULL == fragq || fragq->state <= MSG_FRAG_STATE_HEADER)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                  "%p No fragq (%p) or header not complete.\n",
-                  chn, fragq);
-      break;
-    }
-
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "%p Fragment queue entry:  state: %u, state delta: "
-                "%" PRIu64 " - %" PRIu64 " ?= %" PRIu64 "\n",
-                chn, fragq->state, msg_id, fragq->state_delta, chn->max_state_message_id);
-
-    if (MSG_FRAG_STATE_DATA <= fragq->state)
-    {
-      /* Check if there's a missing message before the current one */
-      if (GNUNET_PSYC_STATE_NOT_MODIFIED == fragq->state_delta)
-      {
-        GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "%p state NOT modified\n", chn);
-
-        if (!(fragq->flags & GNUNET_PSYC_MESSAGE_ORDER_ANY)
-            && (chn->max_message_id != msg_id - 1
-                && chn->max_message_id != msg_id))
-        {
-          GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                      "%p Out of order message. "
-                      "(%" PRIu64 " != %" PRIu64 " - 1)\n",
-                      chn, chn->max_message_id, msg_id);
-          break;
-          // FIXME: keep track of messages processed in this queue run,
-          //        and only stop after reaching the end
-        }
-      }
-      else
-      {
-        GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "%p state modified\n", chn);
-        if (GNUNET_YES != fragq->state_is_modified)
-        {
-          if (msg_id - fragq->state_delta != chn->max_state_message_id)
-          {
-            GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                        "%p Out of order stateful message. "
-                        "(%" PRIu64 " - %" PRIu64 " != %" PRIu64 ")\n",
-                        chn, msg_id, fragq->state_delta, chn->max_state_message_id);
-            break;
-            // FIXME: keep track of messages processed in this queue run,
-            //        and only stop after reaching the end
-          }
-
-          struct StateModifyClosure *mcls = GNUNET_malloc (sizeof (*mcls));
-          mcls->channel = chn;
-          mcls->msg_id = msg_id;
-          mcls->msg_id_hash = msg_id_hash;
-
-          /* Apply modifiers to state in PSYCstore */
-          GNUNET_PSYCSTORE_state_modify (store, &chn->pub_key, msg_id,
-                                         fragq->state_delta,
-                                         store_recv_state_modify_result, mcls);
-          break; // continue after asynchronous state modify result
-        }
-      }
-      chn->max_message_id = msg_id;
-    }
-    fragment_queue_run (chn, msg_id, fragq, MSG_FRAG_STATE_DROP == fragq->state);
-    GNUNET_CONTAINER_heap_remove_root (chn->recv_msgs);
-    n++;
-  }
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Removed %" PRIu64 " messages from queue.\n", chn, n);
-  return n;
-}
-
-
-/**
- * Drop message queue of a channel.
- *
- * Remove all messages in queue without sending it to clients.
- *
- * @param chn  Channel.
- *
- * @return Number of messages removed from queue.
- */
-static uint64_t
-message_queue_drop (struct Channel *chn)
-{
-  uint64_t n = 0;
-  uint64_t msg_id;
-  while (GNUNET_YES == GNUNET_CONTAINER_heap_peek2 (chn->recv_msgs, NULL,
-                                                    &msg_id))
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-                "%p Dropping message %" PRIu64 " from queue.\n", chn, msg_id);
-    struct GNUNET_HashCode msg_id_hash;
-    hash_key_from_hll (&msg_id_hash, msg_id);
-
-    struct FragmentQueue *
-      fragq = GNUNET_CONTAINER_multihashmap_get (chn->recv_frags, &msg_id_hash);
-    GNUNET_assert (NULL != fragq);
-    fragment_queue_run (chn, msg_id, fragq, GNUNET_YES);
-    GNUNET_CONTAINER_heap_remove_root (chn->recv_msgs);
-    n++;
-  }
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Removed %" PRIu64 " messages from queue.\n", chn, n);
-  return n;
-}
-
-
-/**
- * Received result of GNUNET_PSYCSTORE_fragment_store().
- */
-static void
-store_recv_fragment_store_result (void *cls, int64_t result,
-                                  const char *err_msg, uint16_t err_msg_size)
-{
-  struct Channel *chn = cls;
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p GNUNET_PSYCSTORE_fragment_store() returned %" PRId64 " (%.*s)\n",
-              chn, result, err_msg_size, err_msg);
-}
-
-
-/**
- * Handle incoming message fragment from multicast.
- *
- * Store it using PSYCstore and send it to the clients of the channel in order.
- */
-static void
-mcast_recv_message (void *cls, const struct GNUNET_MULTICAST_MessageHeader *mmsg)
-{
-  struct Channel *chn = cls;
-  uint16_t size = ntohs (mmsg->header.size);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Received multicast message of size %u. "
-              "fragment_id=%" PRIu64 ", message_id=%" PRIu64
-              ", fragment_offset=%" PRIu64 ", flags=%" PRIu64 "\n",
-              chn, size,
-              GNUNET_ntohll (mmsg->fragment_id),
-              GNUNET_ntohll (mmsg->message_id),
-              GNUNET_ntohll (mmsg->fragment_offset),
-              GNUNET_ntohll (mmsg->flags));
-
-  GNUNET_PSYCSTORE_fragment_store (store, &chn->pub_key, mmsg, 0,
-                                   &store_recv_fragment_store_result, chn);
-
-  uint16_t first_ptype = 0, last_ptype = 0;
-  int check = GNUNET_PSYC_receive_check_parts (size - sizeof (*mmsg),
-                                               (const char *) &mmsg[1],
-                                               &first_ptype, &last_ptype);
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Message check result %d, first part type %u, last part type %u\n",
-              chn, check, first_ptype, last_ptype);
-  if (GNUNET_SYSERR == check)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-                "%p Dropping incoming multicast message with invalid parts.\n",
-                chn);
-    GNUNET_break_op (0);
-    return;
-  }
-
-  fragment_queue_insert (chn, mmsg, first_ptype, last_ptype);
-  message_queue_run (chn);
-}
-
-
-/**
- * Incoming request fragment from multicast for a master.
- *
- * @param cls  Master.
- * @param req  The request.
- */
-static void
-mcast_recv_request (void *cls,
-                    const struct GNUNET_MULTICAST_RequestHeader *req)
-{
-  struct Master *mst = cls;
-  uint16_t size = ntohs (req->header.size);
-
-  char *str = GNUNET_CRYPTO_ecdsa_public_key_to_string (&req->member_pub_key);
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Received multicast request of size %u from %s.\n",
-              mst, size, str);
-  GNUNET_free (str);
-
-  uint16_t first_ptype = 0, last_ptype = 0;
-  if (GNUNET_SYSERR
-      == GNUNET_PSYC_receive_check_parts (size - sizeof (*req),
-                                          (const char *) &req[1],
-                                          &first_ptype, &last_ptype))
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-                "%p Dropping incoming multicast request with invalid parts.\n",
-                mst);
-    GNUNET_break_op (0);
-    return;
-  }
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Message parts: first: type %u, last: type %u\n",
-              first_ptype, last_ptype);
-
-  /* FIXME: in-order delivery */
-  client_send_mcast_req (mst, req);
-}
-
-
-/**
- * Response from PSYCstore with the current counter values for a channel master.
- */
-static void
-store_recv_master_counters (void *cls, int result, uint64_t max_fragment_id,
-                            uint64_t max_message_id, uint64_t max_group_generation,
-                            uint64_t max_state_message_id)
-{
-  struct Master *mst = cls;
-  struct Channel *chn = &mst->channel;
-  chn->store_op = NULL;
-
-  struct GNUNET_PSYC_CountersResultMessage res;
-  res.header.type = htons (GNUNET_MESSAGE_TYPE_PSYC_MASTER_START_ACK);
-  res.header.size = htons (sizeof (res));
-  res.result_code = htonl (result);
-  res.max_message_id = GNUNET_htonll (max_message_id);
-
-  if (GNUNET_OK == result || GNUNET_NO == result)
-  {
-    mst->max_message_id = max_message_id;
-    chn->max_message_id = max_message_id;
-    chn->max_state_message_id = max_state_message_id;
-    mst->max_group_generation = max_group_generation;
-    mst->origin
-      = GNUNET_MULTICAST_origin_start (cfg, &mst->priv_key, max_fragment_id,
-                                       mcast_recv_join_request,
-                                       mcast_recv_replay_fragment,
-                                       mcast_recv_replay_message,
-                                       mcast_recv_request,
-                                       mcast_recv_message, chn);
-    chn->is_ready = GNUNET_YES;
-  }
-  else
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "%p GNUNET_PSYCSTORE_counters_get() "
-                "returned %d for channel %s.\n",
-                chn, result, GNUNET_h2s (&chn->pub_key_hash));
-  }
-
-  client_send_msg (chn, &res.header);
-}
-
-
-/**
- * Response from PSYCstore with the current counter values for a channel slave.
- */
-void
-store_recv_slave_counters (void *cls, int result, uint64_t max_fragment_id,
-                           uint64_t max_message_id, uint64_t max_group_generation,
-                           uint64_t max_state_message_id)
-{
-  struct Slave *slv = cls;
-  struct Channel *chn = &slv->channel;
-  chn->store_op = NULL;
-
-  struct GNUNET_PSYC_CountersResultMessage res;
-  res.header.type = htons (GNUNET_MESSAGE_TYPE_PSYC_SLAVE_JOIN_ACK);
-  res.header.size = htons (sizeof (res));
-  res.result_code = htonl (result);
-  res.max_message_id = GNUNET_htonll (max_message_id);
-
-  if (GNUNET_YES == result || GNUNET_NO == result)
-  {
-    chn->max_message_id = max_message_id;
-    chn->max_state_message_id = max_state_message_id;
-    slv->member
-      = GNUNET_MULTICAST_member_join (cfg, &chn->pub_key, &slv->priv_key,
-                                      &slv->origin,
-                                      slv->relay_count, slv->relays,
-                                      &slv->join_msg->header,
-                                      mcast_recv_join_request,
-                                      mcast_recv_join_decision,
-                                      mcast_recv_replay_fragment,
-                                      mcast_recv_replay_message,
-                                      mcast_recv_message, chn);
-    if (NULL != slv->join_msg)
-    {
-      GNUNET_free (slv->join_msg);
-      slv->join_msg = NULL;
-    }
-  }
-  else
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "%p GNUNET_PSYCSTORE_counters_get() "
-                "returned %d for channel %s.\n",
-                chn, result, GNUNET_h2s (&chn->pub_key_hash));
-  }
-
-  client_send_msg (chn, &res.header);
-}
-
-
-static void
-channel_init (struct Channel *chn)
-{
-  chn->recv_msgs
-    = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN);
-  chn->recv_frags = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_NO);
-}
-
-
-/**
- * Handle a connecting client starting a channel master.
- */
-static void
-handle_client_master_start (void *cls,
-                            const struct MasterStartRequest *req)
-{
-  struct Client *c = cls;
-  struct GNUNET_SERVICE_Client *client = c->client;
-
-  struct GNUNET_CRYPTO_EddsaPublicKey pub_key;
-  struct GNUNET_HashCode pub_key_hash;
-
-  GNUNET_CRYPTO_eddsa_key_get_public (&req->channel_key, &pub_key);
-  GNUNET_CRYPTO_hash (&pub_key, sizeof (pub_key), &pub_key_hash);
-
-  struct Master *
-    mst = GNUNET_CONTAINER_multihashmap_get (masters, &pub_key_hash);
-  struct Channel *chn;
-
-  if (NULL == mst)
-  {
-    mst = GNUNET_malloc (sizeof (*mst));
-    mst->policy = ntohl (req->policy);
-    mst->priv_key = req->channel_key;
-    mst->join_reqs = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_NO);
-
-    chn = c->channel = &mst->channel;
-    chn->master = mst;
-    chn->is_master = GNUNET_YES;
-    chn->pub_key = pub_key;
-    chn->pub_key_hash = pub_key_hash;
-    channel_init (chn);
-
-    GNUNET_CONTAINER_multihashmap_put (masters, &chn->pub_key_hash, chn,
-                                       GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
-    chn->store_op = GNUNET_PSYCSTORE_counters_get (store, &chn->pub_key,
-                                                   store_recv_master_counters, mst);
-  }
-  else
-  {
-    chn = &mst->channel;
-
-    struct GNUNET_PSYC_CountersResultMessage *res;
-    struct GNUNET_MQ_Envelope *
-      env = GNUNET_MQ_msg (res, GNUNET_MESSAGE_TYPE_PSYC_MASTER_START_ACK);
-    res->result_code = htonl (GNUNET_OK);
-    res->max_message_id = GNUNET_htonll (mst->max_message_id);
-
-    GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client), env);
-  }
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Client connected as master to channel %s.\n",
-              mst, GNUNET_h2s (&chn->pub_key_hash));
-
-  struct ClientList *cli = GNUNET_malloc (sizeof (*cli));
-  cli->client = client;
-  GNUNET_CONTAINER_DLL_insert (chn->clients_head, chn->clients_tail, cli);
-
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-static int
-check_client_slave_join (void *cls,
-                         const struct SlaveJoinRequest *req)
-{
-  return GNUNET_OK;
-}
-
-
-/**
- * Handle a connecting client joining as a channel slave.
- */
-static void
-handle_client_slave_join (void *cls,
-                          const struct SlaveJoinRequest *req)
-{
-  struct Client *c = cls;
-  struct GNUNET_SERVICE_Client *client = c->client;
-
-  uint16_t req_size = ntohs (req->header.size);
-
-  struct GNUNET_CRYPTO_EcdsaPublicKey slv_pub_key;
-  struct GNUNET_HashCode pub_key_hash, slv_pub_hash;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "got join request from client %p\n",
-              client);
-  GNUNET_CRYPTO_ecdsa_key_get_public (&req->slave_key, &slv_pub_key);
-  GNUNET_CRYPTO_hash (&slv_pub_key, sizeof (slv_pub_key), &slv_pub_hash);
-  GNUNET_CRYPTO_hash (&req->channel_pub_key, sizeof (req->channel_pub_key), &pub_key_hash);
-
-  struct GNUNET_CONTAINER_MultiHashMap *
-    chn_slv = GNUNET_CONTAINER_multihashmap_get (channel_slaves, &pub_key_hash);
-  struct Slave *slv = NULL;
-  struct Channel *chn;
-
-  if (NULL != chn_slv)
-  {
-    slv = GNUNET_CONTAINER_multihashmap_get (chn_slv, &slv_pub_hash);
-  }
-  if (NULL == slv)
-  {
-    slv = GNUNET_malloc (sizeof (*slv));
-    slv->priv_key = req->slave_key;
-    slv->pub_key = slv_pub_key;
-    slv->pub_key_hash = slv_pub_hash;
-    slv->origin = req->origin;
-    slv->relay_count = ntohl (req->relay_count);
-    slv->join_flags = ntohl (req->flags);
-
-    const struct GNUNET_PeerIdentity *
-      relays = (const struct GNUNET_PeerIdentity *) &req[1];
-    uint16_t relay_size = slv->relay_count * sizeof (*relays);
-    uint16_t join_msg_size = 0;
-
-    if (sizeof (*req) + relay_size + sizeof (struct GNUNET_MessageHeader)
-        <= req_size)
-    {
-      struct GNUNET_PSYC_Message *
-        join_msg = (struct GNUNET_PSYC_Message *) (((char *) &req[1]) + relay_size);
-      join_msg_size = ntohs (join_msg->header.size);
-      slv->join_msg = GNUNET_malloc (join_msg_size);
-      GNUNET_memcpy (slv->join_msg, join_msg, join_msg_size);
-    }
-    if (sizeof (*req) + relay_size + join_msg_size != req_size)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                  "%u + %u + %u != %u\n",
-                  (unsigned int) sizeof (*req),
-                  relay_size,
-                  join_msg_size,
-                  req_size);
-      GNUNET_break (0);
-      GNUNET_SERVICE_client_drop (client);
-      GNUNET_free (slv);
-      return;
-    }
-    if (0 < slv->relay_count)
-    {
-      slv->relays = GNUNET_malloc (relay_size);
-      GNUNET_memcpy (slv->relays, &req[1], relay_size);
-    }
-
-    chn = c->channel = &slv->channel;
-    chn->slave = slv;
-    chn->is_master = GNUNET_NO;
-    chn->pub_key = req->channel_pub_key;
-    chn->pub_key_hash = pub_key_hash;
-    channel_init (chn);
-
-    if (NULL == chn_slv)
-    {
-      chn_slv = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_YES);
-      GNUNET_CONTAINER_multihashmap_put (channel_slaves, &chn->pub_key_hash, chn_slv,
-                                         GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
-    }
-    GNUNET_CONTAINER_multihashmap_put (chn_slv, &slv->pub_key_hash, chn,
-                                       GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
-    GNUNET_CONTAINER_multihashmap_put (slaves, &chn->pub_key_hash, chn,
-                                       GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
-    chn->store_op = GNUNET_PSYCSTORE_counters_get (store, &chn->pub_key,
-                                                   &store_recv_slave_counters, slv);
-  }
-  else
-  {
-    chn = &slv->channel;
-
-    struct GNUNET_PSYC_CountersResultMessage *res;
-
-    struct GNUNET_MQ_Envelope *
-      env = GNUNET_MQ_msg (res, GNUNET_MESSAGE_TYPE_PSYC_SLAVE_JOIN_ACK);
-    res->result_code = htonl (GNUNET_OK);
-    res->max_message_id = GNUNET_htonll (chn->max_message_id);
-
-    GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client), env);
-
-    if (GNUNET_PSYC_SLAVE_JOIN_LOCAL & slv->join_flags)
-    {
-      mcast_recv_join_decision (slv, GNUNET_YES,
-                                NULL, 0, NULL, NULL);
-    }
-    else if (NULL == slv->member)
-    {
-      slv->member
-        = GNUNET_MULTICAST_member_join (cfg, &chn->pub_key, &slv->priv_key,
-                                        &slv->origin,
-                                        slv->relay_count, slv->relays,
-                                        &slv->join_msg->header,
-                                        &mcast_recv_join_request,
-                                        &mcast_recv_join_decision,
-                                        &mcast_recv_replay_fragment,
-                                        &mcast_recv_replay_message,
-                                        &mcast_recv_message, chn);
-      if (NULL != slv->join_msg)
-      {
-        GNUNET_free (slv->join_msg);
-        slv->join_msg = NULL;
-      }
-    }
-    else if (NULL != slv->join_dcsn)
-    {
-      struct GNUNET_MQ_Envelope *
-        env = GNUNET_MQ_msg_copy (&slv->join_dcsn->header);
-      GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client), env);
-    }
-  }
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Client %p connected as slave to channel %s.\n",
-              client,
-              GNUNET_h2s (&chn->pub_key_hash));
-
-  struct ClientList *cli = GNUNET_malloc (sizeof (*cli));
-  cli->client = client;
-  GNUNET_CONTAINER_DLL_insert (chn->clients_head, chn->clients_tail, cli);
-
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-struct JoinDecisionClosure
-{
-  int32_t is_admitted;
-  struct GNUNET_MessageHeader *msg;
-};
-
-
-/**
- * Iterator callback for sending join decisions to multicast.
- */
-static int
-mcast_send_join_decision (void *cls, const struct GNUNET_HashCode *pub_key_hash,
-                          void *value)
-{
-  struct JoinDecisionClosure *jcls = cls;
-  struct GNUNET_MULTICAST_JoinHandle *jh = value;
-  // FIXME: add relays
-  GNUNET_MULTICAST_join_decision (jh, jcls->is_admitted, 0, NULL, jcls->msg);
-  return GNUNET_YES;
-}
-
-
-static int
-check_client_join_decision (void *cls,
-                            const struct GNUNET_PSYC_JoinDecisionMessage *dcsn)
-{
-  return GNUNET_OK;
-}
-
-
-/**
- * Join decision from client.
- */
-static void
-handle_client_join_decision (void *cls,
-                             const struct GNUNET_PSYC_JoinDecisionMessage *dcsn)
-{
-  struct Client *c = cls;
-  struct GNUNET_SERVICE_Client *client = c->client;
-  struct Channel *chn = c->channel;
-  if (NULL == chn)
-  {
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-  GNUNET_assert (GNUNET_YES == chn->is_master);
-  struct Master *mst = chn->master;
-
-  struct JoinDecisionClosure jcls;
-  jcls.is_admitted = ntohl (dcsn->is_admitted);
-  jcls.msg
-    = (sizeof (*dcsn) + sizeof (*jcls.msg) <= ntohs (dcsn->header.size))
-    ? (struct GNUNET_MessageHeader *) &dcsn[1]
-    : NULL;
-
-  struct GNUNET_HashCode slave_pub_hash;
-  GNUNET_CRYPTO_hash (&dcsn->slave_pub_key, sizeof (dcsn->slave_pub_key),
-                      &slave_pub_hash);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Got join decision (%d) from client for channel %s..\n",
-              mst, jcls.is_admitted, GNUNET_h2s (&chn->pub_key_hash));
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p ..and slave %s.\n",
-              mst, GNUNET_h2s (&slave_pub_hash));
-
-  GNUNET_CONTAINER_multihashmap_get_multiple (mst->join_reqs, &slave_pub_hash,
-                                              &mcast_send_join_decision, &jcls);
-  GNUNET_CONTAINER_multihashmap_remove_all (mst->join_reqs, &slave_pub_hash);
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-static void
-channel_part_cb (void *cls)
-{
-  struct GNUNET_SERVICE_Client *client = cls;
-  struct GNUNET_MQ_Envelope *env;
-
-  env = GNUNET_MQ_msg_header (GNUNET_MESSAGE_TYPE_PSYC_PART_ACK);
-  GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client),
-                  env);
-}
-
-
-static void
-handle_client_part_request (void *cls,
-                            const struct GNUNET_MessageHeader *msg)
-{
-  struct Client *c = cls;
-
-  c->channel->is_disconnecting = GNUNET_YES;
-  if (GNUNET_YES == c->channel->is_master)
-  {
-    struct Master *mst = (struct Master *) c->channel;
-   
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "Got part request from master %p\n",
-                mst);
-    GNUNET_assert (NULL != mst->origin);
-    GNUNET_MULTICAST_origin_stop (mst->origin, channel_part_cb, c->client);
-  }
-  else
-  {
-    struct Slave *slv = (struct Slave *) c->channel;
-
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "Got part request from slave %p\n",
-                slv);
-    GNUNET_assert (NULL != slv->member);
-    GNUNET_MULTICAST_member_part (slv->member, channel_part_cb, c->client);
-  }
-  GNUNET_SERVICE_client_continue (c->client);
-}
-
-
-/**
- * Send acknowledgement to a client.
- *
- * Sent after a message fragment has been passed on to multicast.
- *
- * @param chn The channel struct for the client.
- */
-static void
-send_message_ack (struct Channel *chn, struct GNUNET_SERVICE_Client *client)
-{
-  struct GNUNET_MessageHeader *res;
-  struct GNUNET_MQ_Envelope *
-      env = GNUNET_MQ_msg (res, GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_ACK);
-
-  /* FIXME? */
-  GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client), env);
-}
-
-
-/**
- * Callback for the transmit functions of multicast.
- */
-static int
-transmit_notify (void *cls, size_t *data_size, void *data)
-{
-  struct Channel *chn = cls;
-  struct TransmitMessage *tmit_msg = chn->tmit_head;
-
-  if (NULL == tmit_msg || *data_size < tmit_msg->size)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "%p transmit_notify: nothing to send.\n", chn);
-    if (NULL != tmit_msg && *data_size < tmit_msg->size)
-      GNUNET_break (0);
-    *data_size = 0;
-    return GNUNET_NO;
-  }
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p transmit_notify: sending %u bytes.\n", chn, tmit_msg->size);
-
-  *data_size = tmit_msg->size;
-  GNUNET_memcpy (data, &tmit_msg[1], *data_size);
-
-  int ret
-    = (tmit_msg->last_ptype < GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_END)
-    ? GNUNET_NO
-    : GNUNET_YES;
-
-  /* FIXME: handle disconnecting clients */
-  if (NULL != tmit_msg->client)
-    send_message_ack (chn, tmit_msg->client);
-
-  GNUNET_CONTAINER_DLL_remove (chn->tmit_head, chn->tmit_tail, tmit_msg);
-
-  if (NULL != chn->tmit_head)
-  {
-    GNUNET_SCHEDULER_add_now (&schedule_transmit_message, chn);
-  }
-  else if (GNUNET_YES == chn->is_disconnecting
-           && tmit_msg->last_ptype < GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_END)
-  {
-    /* FIXME: handle partial message (when still in_transmit) */
-    GNUNET_free (tmit_msg);
-    return GNUNET_SYSERR;
-  }
-  GNUNET_free (tmit_msg);
-  return ret;
-}
-
-
-/**
- * Callback for the transmit functions of multicast.
- */
-static int
-master_transmit_notify (void *cls, size_t *data_size, void *data)
-{
-  int ret = transmit_notify (cls, data_size, data);
-
-  if (GNUNET_YES == ret)
-  {
-    struct Master *mst = cls;
-    mst->tmit_handle = NULL;
-  }
-  return ret;
-}
-
-
-/**
- * Callback for the transmit functions of multicast.
- */
-static int
-slave_transmit_notify (void *cls, size_t *data_size, void *data)
-{
-  int ret = transmit_notify (cls, data_size, data);
-
-  if (GNUNET_YES == ret)
-  {
-    struct Slave *slv = cls;
-    slv->tmit_handle = NULL;
-  }
-  return ret;
-}
-
-
-/**
- * Transmit a message from a channel master to the multicast group.
- */
-static void
-master_transmit_message (struct Master *mst)
-{
-  struct Channel *chn = &mst->channel;
-  struct TransmitMessage *tmit_msg = chn->tmit_head;
-  if (NULL == tmit_msg)
-    return;
-  if (NULL == mst->tmit_handle)
-  {
-    mst->tmit_handle = GNUNET_MULTICAST_origin_to_all (mst->origin,
-                                                       tmit_msg->id,
-                                                       mst->max_group_generation,
-                                                       &master_transmit_notify,
-                                                       mst);
-  }
-  else
-  {
-    GNUNET_MULTICAST_origin_to_all_resume (mst->tmit_handle);
-  }
-}
-
-
-/**
- * Transmit a message from a channel slave to the multicast group.
- */
-static void
-slave_transmit_message (struct Slave *slv)
-{
-  if (NULL == slv->channel.tmit_head)
-    return;
-  if (NULL == slv->tmit_handle)
-  {
-    slv->tmit_handle = GNUNET_MULTICAST_member_to_origin (slv->member,
-                                                          slv->channel.tmit_head->id,
-                                                          &slave_transmit_notify,
-                                                          slv);
-  }
-  else
-  {
-    GNUNET_MULTICAST_member_to_origin_resume (slv->tmit_handle);
-  }
-}
-
-
-static void
-transmit_message (struct Channel *chn)
-{
-  chn->is_master
-    ? master_transmit_message (chn->master)
-    : slave_transmit_message (chn->slave);
-}
-
-
-/**
- * Queue a message from a channel master for sending to the multicast group.
- */
-static void
-master_queue_message (struct Master *mst, struct TransmitMessage *tmit_msg)
-{
-  if (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_METHOD == tmit_msg->first_ptype)
-  {
-    tmit_msg->id = ++mst->max_message_id;
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "%p master_queue_message: message_id=%" PRIu64 "\n",
-                mst, tmit_msg->id);
-    struct GNUNET_PSYC_MessageMethod *pmeth
-      = (struct GNUNET_PSYC_MessageMethod *) &tmit_msg[1];
-
-    if (pmeth->flags & GNUNET_PSYC_MASTER_TRANSMIT_STATE_RESET)
-    {
-      pmeth->state_delta = GNUNET_htonll (GNUNET_PSYC_STATE_RESET);
-    }
-    else if (pmeth->flags & GNUNET_PSYC_MASTER_TRANSMIT_STATE_MODIFY)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                  "%p master_queue_message: state_delta=%" PRIu64 "\n",
-                  mst, tmit_msg->id - mst->max_state_message_id);
-      pmeth->state_delta = GNUNET_htonll (tmit_msg->id
-                                          - mst->max_state_message_id);
-      mst->max_state_message_id = tmit_msg->id;
-    }
-    else
-    {
-        GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                    "%p master_queue_message: state not modified\n", mst);
-      pmeth->state_delta = GNUNET_htonll (GNUNET_PSYC_STATE_NOT_MODIFIED);
-    }
-
-    if (pmeth->flags & GNUNET_PSYC_MASTER_TRANSMIT_STATE_HASH)
-    {
-      /// @todo add state_hash to PSYC header
-    }
-  }
-}
-
-
-/**
- * Queue a message from a channel slave for sending to the multicast group.
- */
-static void
-slave_queue_message (struct Slave *slv, struct TransmitMessage *tmit_msg)
-{
-  if (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_METHOD == tmit_msg->first_ptype)
-  {
-    struct GNUNET_PSYC_MessageMethod *pmeth
-      = (struct GNUNET_PSYC_MessageMethod *) &tmit_msg[1];
-    pmeth->state_delta = GNUNET_htonll (GNUNET_PSYC_STATE_NOT_MODIFIED);
-    tmit_msg->id = ++slv->max_request_id;
-  }
-}
-
-
-/**
- * Queue PSYC message parts for sending to multicast.
- *
- * @param chn
- *        Channel to send to.
- * @param client
- *        Client the message originates from.
- * @param data_size
- *        Size of @a data.
- * @param data
- *        Concatenated message parts.
- * @param first_ptype
- *        First message part type in @a data.
- * @param last_ptype
- *        Last message part type in @a data.
- */
-static struct TransmitMessage *
-queue_message (struct Channel *chn,
-               struct GNUNET_SERVICE_Client *client,
-               size_t data_size,
-               const void *data,
-               uint16_t first_ptype, uint16_t last_ptype)
-{
-  struct TransmitMessage *
-    tmit_msg = GNUNET_malloc (sizeof (*tmit_msg) + data_size);
-  GNUNET_memcpy (&tmit_msg[1], data, data_size);
-  tmit_msg->client = client;
-  tmit_msg->size = data_size;
-  tmit_msg->first_ptype = first_ptype;
-  tmit_msg->last_ptype = last_ptype;
-
-  /* FIXME: separate queue per message ID */
-
-  GNUNET_CONTAINER_DLL_insert_tail (chn->tmit_head, chn->tmit_tail, tmit_msg);
-
-  chn->is_master
-    ? master_queue_message (chn->master, tmit_msg)
-    : slave_queue_message (chn->slave, tmit_msg);
-  return tmit_msg;
-}
-
-
-/**
- * Cancel transmission of current message.
- *
- * @param chn    Channel to send to.
- * @param client  Client the message originates from.
- */
-static void
-transmit_cancel (struct Channel *chn, struct GNUNET_SERVICE_Client *client)
-{
-  uint16_t type = GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_CANCEL;
-
-  struct GNUNET_MessageHeader msg;
-  msg.size = htons (sizeof (msg));
-  msg.type = htons (type);
-
-  queue_message (chn, client, sizeof (msg), &msg, type, type);
-  transmit_message (chn);
-
-  /* FIXME: cleanup */
-}
-
-
-static int
-check_client_psyc_message (void *cls,
-                           const struct GNUNET_MessageHeader *msg)
-{
-  return GNUNET_OK;
-}
-
-
-/**
- * Incoming message from a master or slave client.
- */
-static void
-handle_client_psyc_message (void *cls,
-                            const struct GNUNET_MessageHeader *msg)
-{
-  struct Client *c = cls;
-  struct GNUNET_SERVICE_Client *client = c->client;
-  struct Channel *chn = c->channel;
-  if (NULL == chn)
-  {
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Received message from client.\n", chn);
-  GNUNET_PSYC_log_message (GNUNET_ERROR_TYPE_DEBUG, msg);
-
-  if (GNUNET_YES != chn->is_ready)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-                "%p Channel is not ready yet, disconnecting client %p.\n",
-                chn,
-                client);
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-
-  uint16_t size = ntohs (msg->size);
-  if (GNUNET_MULTICAST_FRAGMENT_MAX_PAYLOAD < size - sizeof (*msg))
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "%p Message payload too large: %u < %u.\n",
-                chn,
-                (unsigned int) GNUNET_MULTICAST_FRAGMENT_MAX_PAYLOAD,
-                (unsigned int) (size - sizeof (*msg)));
-    GNUNET_break (0);
-    transmit_cancel (chn, client);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-
-  uint16_t first_ptype = 0, last_ptype = 0;
-  if (GNUNET_SYSERR
-      == GNUNET_PSYC_receive_check_parts (size - sizeof (*msg),
-                                          (const char *) &msg[1],
-                                          &first_ptype, &last_ptype))
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "%p Received invalid message part from client.\n", chn);
-    GNUNET_break (0);
-    transmit_cancel (chn, client);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Received message with first part type %u and last part type %u.\n",
-              chn, first_ptype, last_ptype);
-
-  queue_message (chn, client, size - sizeof (*msg), &msg[1],
-                 first_ptype, last_ptype);
-  transmit_message (chn);
-  /* FIXME: send a few ACKs even before transmit_notify is called */
-
-  GNUNET_SERVICE_client_continue (client);
-};
-
-
-/**
- * Received result of GNUNET_PSYCSTORE_membership_store()
- */
-static void
-store_recv_membership_store_result (void *cls,
-                                    int64_t result,
-                                    const char *err_msg,
-                                    uint16_t err_msg_size)
-{
-  struct Operation *op = cls;
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p GNUNET_PSYCSTORE_membership_store() returned %" PRId64 " (%.*s)\n",
-              op->channel,
-              result,
-              (int) err_msg_size,
-              err_msg);
-
-  if (NULL != op->client)
-    client_send_result (op->client, op->op_id, result, err_msg, err_msg_size);
-  op_remove (op);
-}
-
-
-/**
- * Client requests to add/remove a slave in the membership database.
- */
-static void
-handle_client_membership_store (void *cls,
-                                const struct ChannelMembershipStoreRequest *req)
-{
-  struct Client *c = cls;
-  struct GNUNET_SERVICE_Client *client = c->client;
-  struct Channel *chn = c->channel;
-  if (NULL == chn)
-  {
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-
-  struct Operation *op = op_add (chn, client, req->op_id, 0);
-
-  uint64_t announced_at = GNUNET_ntohll (req->announced_at);
-  uint64_t effective_since = GNUNET_ntohll (req->effective_since);
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Received membership store request from client.\n", chn);
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p did_join: %u, announced_at: %" PRIu64 ", effective_since: %" PRIu64 "\n",
-              chn, req->did_join, announced_at, effective_since);
-
-  GNUNET_PSYCSTORE_membership_store (store, &chn->pub_key, &req->slave_pub_key,
-                                     req->did_join, announced_at, effective_since,
-                                     0, /* FIXME: group_generation */
-                                     &store_recv_membership_store_result, op);
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-/**
- * Received a fragment for GNUNET_PSYCSTORE_fragment_get(),
- * in response to a history request from a client.
- */
-static int
-store_recv_fragment_history (void *cls,
-                             struct GNUNET_MULTICAST_MessageHeader *mmsg,
-                             enum GNUNET_PSYCSTORE_MessageFlags flags)
-{
-  struct Operation *op = cls;
-  if (NULL == op->client)
-  { /* Requesting client already disconnected. */
-    return GNUNET_NO;
-  }
-  struct Channel *chn = op->channel;
-
-  struct GNUNET_PSYC_MessageHeader *pmsg;
-  uint16_t msize = ntohs (mmsg->header.size);
-  uint16_t psize = sizeof (*pmsg) + msize - sizeof (*mmsg);
-
-  struct GNUNET_OperationResultMessage *
-    res = GNUNET_malloc (sizeof (*res) + psize);
-  res->header.size = htons (sizeof (*res) + psize);
-  res->header.type = htons (GNUNET_MESSAGE_TYPE_PSYC_HISTORY_RESULT);
-  res->op_id = op->op_id;
-  res->result_code = GNUNET_htonll (GNUNET_OK);
-
-  pmsg = (struct GNUNET_PSYC_MessageHeader *) &res[1];
-  GNUNET_PSYC_message_header_init (pmsg, mmsg, flags | GNUNET_PSYC_MESSAGE_HISTORIC);
-  GNUNET_memcpy (&res[1], pmsg, psize);
-
-  /** @todo FIXME: send only to requesting client */
-  client_send_msg (chn, &res->header);
-
-  GNUNET_free (res);
-  return GNUNET_YES;
-}
-
-
-/**
- * Received the result of GNUNET_PSYCSTORE_fragment_get(),
- * in response to a history request from a client.
- */
-static void
-store_recv_fragment_history_result (void *cls, int64_t result,
-                                    const char *err_msg, uint16_t err_msg_size)
-{
-  struct Operation *op = cls;
-  if (NULL == op->client)
-  { /* Requesting client already disconnected. */
-    return;
-  }
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p History replay #%" PRIu64 ": "
-              "PSYCSTORE returned %" PRId64 " (%.*s)\n",
-              op->channel, GNUNET_ntohll (op->op_id), result, err_msg_size, err_msg);
-
-  if (op->flags & GNUNET_PSYC_HISTORY_REPLAY_REMOTE)
-  {
-    /** @todo Multicast replay request for messages not found locally. */
-  }
-
-  client_send_result (op->client, op->op_id, result, err_msg, err_msg_size);
-  op_remove (op);
-}
-
-
-static int
-check_client_history_replay (void *cls,
-                             const struct GNUNET_PSYC_HistoryRequestMessage *req)
-{
-  return GNUNET_OK;
-}
-
-
-/**
- * Client requests channel history.
- */
-static void
-handle_client_history_replay (void *cls,
-                              const struct GNUNET_PSYC_HistoryRequestMessage *req)
-{
-  struct Client *c = cls;
-  struct GNUNET_SERVICE_Client *client = c->client;
-  struct Channel *chn = c->channel;
-  if (NULL == chn)
-  {
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-
-  uint16_t size = ntohs (req->header.size);
-  const char *method_prefix = (const char *) &req[1];
-
-  if (size < sizeof (*req) + 1
-      || '\0' != method_prefix[size - sizeof (*req) - 1])
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "%p History replay #%" PRIu64 ": "
-                "invalid method prefix. size: %u < %u?\n",
-                chn,
-                GNUNET_ntohll (req->op_id),
-                size,
-                (unsigned int) sizeof (*req) + 1);
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-
-  struct Operation *op = op_add (chn, client, req->op_id, ntohl (req->flags));
-
-  if (0 == req->message_limit)
-  {
-    GNUNET_PSYCSTORE_message_get (store, &chn->pub_key, NULL,
-                                  GNUNET_ntohll (req->start_message_id),
-                                  GNUNET_ntohll (req->end_message_id),
-                                  0, method_prefix,
-                                  &store_recv_fragment_history,
-                                  &store_recv_fragment_history_result, op);
-  }
-  else
-  {
-    GNUNET_PSYCSTORE_message_get_latest (store, &chn->pub_key, NULL,
-                                         GNUNET_ntohll (req->message_limit),
-                                         method_prefix,
-                                         &store_recv_fragment_history,
-                                         &store_recv_fragment_history_result,
-                                         op);
-  }
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-/**
- * Received state var from PSYCstore, send it to client.
- */
-static int
-store_recv_state_var (void *cls, const char *name,
-                      const void *value, uint32_t value_size)
-{
-  struct Operation *op = cls;
-  struct GNUNET_OperationResultMessage *res;
-  struct GNUNET_MQ_Envelope *env;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p state_get #%" PRIu64 " - received var from PSYCstore: %s\n",
-              op->channel, GNUNET_ntohll (op->op_id), name);
-
-  if (NULL != name) /* First part */
-  {
-    uint16_t name_size = strnlen (name, GNUNET_PSYC_MODIFIER_MAX_PAYLOAD) + 1;
-    struct GNUNET_PSYC_MessageModifier *mod;
-    env = GNUNET_MQ_msg_extra (res,
-                               sizeof (*mod) + name_size + value_size,
-                               GNUNET_MESSAGE_TYPE_PSYC_STATE_RESULT);
-    res->op_id = op->op_id;
-
-    mod = (struct GNUNET_PSYC_MessageModifier *) &res[1];
-    mod->header.size = htons (sizeof (*mod) + name_size + value_size);
-    mod->header.type = htons (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MODIFIER);
-    mod->name_size = htons (name_size);
-    mod->value_size = htonl (value_size);
-    mod->oper = htons (GNUNET_PSYC_OP_ASSIGN);
-    GNUNET_memcpy (&mod[1], name, name_size);
-    GNUNET_memcpy (((char *) &mod[1]) + name_size, value, value_size);
-  }
-  else /* Continuation */
-  {
-    struct GNUNET_MessageHeader *mod;
-    env = GNUNET_MQ_msg_extra (res,
-                               sizeof (*mod) + value_size,
-                               GNUNET_MESSAGE_TYPE_PSYC_STATE_RESULT);
-    res->op_id = op->op_id;
-
-    mod = (struct GNUNET_MessageHeader *) &res[1];
-    mod->size = htons (sizeof (*mod) + value_size);
-    mod->type = htons (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MOD_CONT);
-    GNUNET_memcpy (&mod[1], value, value_size);
-  }
-
-  // FIXME: client might have been disconnected
-  GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (op->client), env);
-  return GNUNET_YES;
-}
-
-
-/**
- * Received result of GNUNET_PSYCSTORE_state_get()
- * or GNUNET_PSYCSTORE_state_get_prefix()
- */
-static void
-store_recv_state_result (void *cls, int64_t result,
-                         const char *err_msg, uint16_t err_msg_size)
-{
-  struct Operation *op = cls;
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p state_get #%" PRIu64 ": "
-              "PSYCSTORE returned %" PRId64 " (%.*s)\n",
-              op->channel, GNUNET_ntohll (op->op_id), result, err_msg_size, err_msg);
-
-  // FIXME: client might have been disconnected
-  client_send_result (op->client, op->op_id, result, err_msg, err_msg_size);
-  op_remove (op);
-}
-
-
-static int
-check_client_state_get (void *cls,
-                         const struct StateRequest *req)
-{
-  struct Client *c = cls;
-  struct Channel *chn = c->channel;
-  if (NULL == chn)
-  {
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-
-  uint16_t name_size = ntohs (req->header.size) - sizeof (*req);
-  const char *name = (const char *) &req[1];
-  if (0 == name_size || '\0' != name[name_size - 1])
-  {
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-
-  return GNUNET_OK;
-}
-
-
-/**
- * Client requests best matching state variable from PSYCstore.
- */
-static void
-handle_client_state_get (void *cls,
-                         const struct StateRequest *req)
-{
-  struct Client *c = cls;
-  struct GNUNET_SERVICE_Client *client = c->client;
-  struct Channel *chn = c->channel;
-
-  const char *name = (const char *) &req[1];
-  struct Operation *op = op_add (chn, client, req->op_id, 0);
-  GNUNET_PSYCSTORE_state_get (store, &chn->pub_key, name,
-                              &store_recv_state_var,
-                              &store_recv_state_result, op);
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-static int
-check_client_state_get_prefix (void *cls,
-                               const struct StateRequest *req)
-{
-  struct Client *c = cls;
-  struct Channel *chn = c->channel;
-  if (NULL == chn)
-  {
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-
-  uint16_t name_size = ntohs (req->header.size) - sizeof (*req);
-  const char *name = (const char *) &req[1];
-  if (0 == name_size || '\0' != name[name_size - 1])
-  {
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-
-  return GNUNET_OK;
-}
-
-
-/**
- * Client requests state variables with a given prefix from PSYCstore.
- */
-static void
-handle_client_state_get_prefix (void *cls,
-                                const struct StateRequest *req)
-{
-  struct Client *c = cls;
-  struct GNUNET_SERVICE_Client *client = c->client;
-  struct Channel *chn = c->channel;
-
-  const char *name = (const char *) &req[1];
-  struct Operation *op = op_add (chn, client, req->op_id, 0);
-  GNUNET_PSYCSTORE_state_get_prefix (store, &chn->pub_key, name,
-                                     &store_recv_state_var,
-                                     &store_recv_state_result, op);
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-/**
- * Initialize the PSYC service.
- *
- * @param cls Closure.
- * @param server The initialized server.
- * @param c Configuration to use.
- */
-static void
-run (void *cls,
-     const struct GNUNET_CONFIGURATION_Handle *c,
-     struct GNUNET_SERVICE_Handle *svc)
-{
-  cfg = c;
-  service = svc;
-  store = GNUNET_PSYCSTORE_connect (cfg);
-  stats = GNUNET_STATISTICS_create ("psyc", cfg);
-  masters = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_YES);
-  slaves = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_YES);
-  channel_slaves = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_NO);
-  recv_cache = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_NO);
-  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
-}
-
-
-/**
- * Define "main" method using service macro.
- */
-GNUNET_SERVICE_MAIN
-("psyc",
- GNUNET_SERVICE_OPTION_NONE,
- &run,
- &client_notify_connect,
- &client_notify_disconnect,
- NULL,
- GNUNET_MQ_hd_fixed_size (client_master_start,
-                          GNUNET_MESSAGE_TYPE_PSYC_MASTER_START,
-                          struct MasterStartRequest,
-                          NULL),
- GNUNET_MQ_hd_var_size (client_slave_join,
-                        GNUNET_MESSAGE_TYPE_PSYC_SLAVE_JOIN,
-                        struct SlaveJoinRequest,
-                        NULL),
- GNUNET_MQ_hd_var_size (client_join_decision,
-                        GNUNET_MESSAGE_TYPE_PSYC_JOIN_DECISION,
-                        struct GNUNET_PSYC_JoinDecisionMessage,
-                        NULL),
- GNUNET_MQ_hd_fixed_size (client_part_request,
-                          GNUNET_MESSAGE_TYPE_PSYC_PART_REQUEST,
-                          struct GNUNET_MessageHeader,
-                          NULL),
- GNUNET_MQ_hd_var_size (client_psyc_message,
-                        GNUNET_MESSAGE_TYPE_PSYC_MESSAGE,
-                        struct GNUNET_MessageHeader,
-                        NULL),
- GNUNET_MQ_hd_fixed_size (client_membership_store,
-                          GNUNET_MESSAGE_TYPE_PSYC_CHANNEL_MEMBERSHIP_STORE,
-                          struct ChannelMembershipStoreRequest,
-                          NULL),
- GNUNET_MQ_hd_var_size (client_history_replay,
-                        GNUNET_MESSAGE_TYPE_PSYC_HISTORY_REPLAY,
-                        struct GNUNET_PSYC_HistoryRequestMessage,
-                        NULL),
- GNUNET_MQ_hd_var_size (client_state_get,
-                        GNUNET_MESSAGE_TYPE_PSYC_STATE_GET,
-                        struct StateRequest,
-                        NULL),
- GNUNET_MQ_hd_var_size (client_state_get_prefix,
-                        GNUNET_MESSAGE_TYPE_PSYC_STATE_GET_PREFIX,
-                        struct StateRequest,
-                        NULL));
-
-/* end of gnunet-service-psyc.c */
diff --git a/src/psyc/psyc.conf.in b/src/psyc/psyc.conf.in
deleted file mode 100644 (file)
index 764ccfa..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-[psyc]
-START_ON_DEMAND = @START_ON_DEMAND@
-BINARY = gnunet-service-psyc
-
-UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-service-psyc.sock
-UNIX_MATCH_UID = YES
-UNIX_MATCH_GID = YES
-
-@UNIXONLY@PORT = 2115
-HOSTNAME = localhost
-ACCEPT_FROM = 127.0.0.1;
-ACCEPT_FROM6 = ::1;
diff --git a/src/psyc/psyc.h b/src/psyc/psyc.h
deleted file mode 100644 (file)
index 74bbf3e..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * This file is part of GNUnet
- * Copyright (C) 2013 GNUnet e.V.
- *
- * GNUnet is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNUnet is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
- */
-
-/**
- * @file psyc/psyc.h
- * @brief Common type definitions for the PSYC service and API.
- * @author Gabor X Toth
- */
-
-#ifndef PSYC_H
-#define PSYC_H
-
-#include "platform.h"
-#include "gnunet_psyc_service.h"
-
-
-int
-GNUNET_PSYC_check_message_parts (uint16_t data_size, const char *data,
-                                 uint16_t *first_ptype, uint16_t *last_ptype);
-
-void
-GNUNET_PSYC_log_message (enum GNUNET_ErrorType kind,
-                         const struct GNUNET_MessageHeader *msg);
-
-
-enum MessageState
-{
-  MSG_STATE_START    = 0,
-  MSG_STATE_HEADER   = 1,
-  MSG_STATE_METHOD   = 2,
-  MSG_STATE_MODIFIER = 3,
-  MSG_STATE_MOD_CONT = 4,
-  MSG_STATE_DATA     = 5,
-  MSG_STATE_END      = 6,
-  MSG_STATE_CANCEL   = 7,
-  MSG_STATE_ERROR    = 8,
-};
-
-
-enum MessageFragmentState
-{
-  MSG_FRAG_STATE_START    = 0,
-  MSG_FRAG_STATE_HEADER   = 1,
-  MSG_FRAG_STATE_DATA     = 2,
-  MSG_FRAG_STATE_END      = 3,
-  MSG_FRAG_STATE_CANCEL   = 4,
-  MSG_FRAG_STATE_DROP     = 5,
-};
-
-
-GNUNET_NETWORK_STRUCT_BEGIN
-
-
-/**** library -> service ****/
-
-
-struct MasterStartRequest
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_PSYC_MASTER_START
-   */
-  struct GNUNET_MessageHeader header;
-
-  uint32_t policy GNUNET_PACKED;
-
-  struct GNUNET_CRYPTO_EddsaPrivateKey channel_key;
-};
-
-
-struct SlaveJoinRequest
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_PSYC_SLAVE_JOIN
-   */
-  struct GNUNET_MessageHeader header;
-
-  uint32_t relay_count GNUNET_PACKED;
-
-  struct GNUNET_CRYPTO_EddsaPublicKey channel_pub_key;
-
-  struct GNUNET_CRYPTO_EcdsaPrivateKey slave_key;
-
-  struct GNUNET_PeerIdentity origin;
-
-  uint32_t flags GNUNET_PACKED;
-
-  /* Followed by struct GNUNET_PeerIdentity relays[relay_count] */
-
-  /* Followed by struct GNUNET_MessageHeader join_msg */
-};
-
-
-struct ChannelMembershipStoreRequest
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_PSYC_CHANNEL_MEMBERSHIP_STORE
-   */
-  struct GNUNET_MessageHeader header;
-
-  uint32_t reserved GNUNET_PACKED;
-
-  uint64_t op_id GNUNET_PACKED;
-
-  struct GNUNET_CRYPTO_EcdsaPublicKey slave_pub_key;
-
-  uint64_t announced_at GNUNET_PACKED;
-
-  uint64_t effective_since GNUNET_PACKED;
-
-  uint8_t did_join;
-};
-
-
-struct HistoryRequest
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_PSYC_CHANNEL_HISTORY_REQUEST
-   */
-  struct GNUNET_MessageHeader header;
-
-  uint32_t reserved GNUNET_PACKED;
-
-  /**
-   * ID for this operation.
-   */
-  uint64_t op_id GNUNET_PACKED;
-
-  uint64_t start_message_id GNUNET_PACKED;
-
-  uint64_t end_message_id GNUNET_PACKED;
-
-  uint64_t message_limit GNUNET_PACKED;
-};
-
-
-struct StateRequest
-{
-  /**
-   * Types:
-   * - GNUNET_MESSAGE_TYPE_PSYC_CHANNEL_STATE_GET
-   * - GNUNET_MESSAGE_TYPE_PSYC_CHANNEL_STATE_GET_PREFIX
-   */
-  struct GNUNET_MessageHeader header;
-
-  uint32_t reserved GNUNET_PACKED;
-
-  /**
-   * ID for this operation.
-   */
-  uint64_t op_id GNUNET_PACKED;
-
-  /* Followed by NUL-terminated name. */
-};
-
-
-/**** service -> library ****/
-
-
-GNUNET_NETWORK_STRUCT_END
-
-#endif
diff --git a/src/psyc/psyc_api.c b/src/psyc/psyc_api.c
deleted file mode 100644 (file)
index 37ea112..0000000
+++ /dev/null
@@ -1,1584 +0,0 @@
-/*
- * This file is part of GNUnet
- * Copyright (C) 2013 GNUnet e.V.
- *
- * GNUnet is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNUnet is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
- */
-
-/**
- * @file psyc/psyc_api.c
- * @brief PSYC service; high-level access to the PSYC protocol
- *        note that clients of this API are NOT expected to
- *        understand the PSYC message format, only the semantics!
- *        Parsing (and serializing) the PSYC stream format is done
- *        within the implementation of the libgnunetpsyc library,
- *        and this API deliberately exposes as little as possible
- *        of the actual data stream format to the application!
- * @author Gabor X Toth
- */
-
-#include <inttypes.h>
-
-#include "platform.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_multicast_service.h"
-#include "gnunet_psyc_service.h"
-#include "gnunet_psyc_util_lib.h"
-#include "psyc.h"
-
-#define LOG(kind,...) GNUNET_log_from (kind, "psyc-api",__VA_ARGS__)
-
-
-/**
- * Handle to access PSYC channel operations for both the master and slaves.
- */
-struct GNUNET_PSYC_Channel
-{
-  /**
-   * Configuration to use.
-   */
-  const struct GNUNET_CONFIGURATION_Handle *cfg;
-
-  /**
-   * Client connection to the service.
-   */
-  struct GNUNET_MQ_Handle *mq;
-
-  /**
-   * Message to send on connect.
-   */
-  struct GNUNET_MQ_Envelope *connect_env;
-
-  /**
-   * Time to wait until we try to reconnect on failure.
-   */
-  struct GNUNET_TIME_Relative reconnect_delay;
-
-  /**
-   * Task for reconnecting when the listener fails.
-   */
-  struct GNUNET_SCHEDULER_Task *reconnect_task;
-
-  /**
-   * Async operations.
-   */
-  struct GNUNET_OP_Handle *op;
-
-  /**
-   * Transmission handle;
-   */
-  struct GNUNET_PSYC_TransmitHandle *tmit;
-
-  /**
-   * Receipt handle;
-   */
-  struct GNUNET_PSYC_ReceiveHandle *recv;
-
-  /**
-   * Function called after disconnected from the service.
-   */
-  GNUNET_ContinuationCallback disconnect_cb;
-
-  /**
-   * Closure for @a disconnect_cb.
-   */
-  void *disconnect_cls;
-
-  /**
-   * Are we polling for incoming messages right now?
-   */
-  uint8_t in_receive;
-
-  /**
-   * Is this a master or slave channel?
-   */
-  uint8_t is_master;
-
-  /**
-   * Is this channel in the process of disconnecting from the service?
-   * #GNUNET_YES or #GNUNET_NO
-   */
-  uint8_t is_disconnecting;
-};
-
-
-/**
- * Handle for the master of a PSYC channel.
- */
-struct GNUNET_PSYC_Master
-{
-  struct GNUNET_PSYC_Channel chn;
-
-  GNUNET_PSYC_MasterStartCallback start_cb;
-
-  /**
-   * Join request callback.
-   */
-  GNUNET_PSYC_JoinRequestCallback join_req_cb;
-
-  /**
-   * Closure for the callbacks.
-   */
-  void *cb_cls;
-};
-
-
-/**
- * Handle for a PSYC channel slave.
- */
-struct GNUNET_PSYC_Slave
-{
-  struct GNUNET_PSYC_Channel chn;
-
-  GNUNET_PSYC_SlaveConnectCallback connect_cb;
-
-  GNUNET_PSYC_JoinDecisionCallback join_dcsn_cb;
-
-  /**
-   * Closure for the callbacks.
-   */
-  void *cb_cls;
-};
-
-
-/**
- * Handle that identifies a join request.
- *
- * Used to match calls to #GNUNET_PSYC_JoinRequestCallback to the
- * corresponding calls to GNUNET_PSYC_join_decision().
- */
-struct GNUNET_PSYC_JoinHandle
-{
-  struct GNUNET_PSYC_Master *mst;
-  struct GNUNET_CRYPTO_EcdsaPublicKey slave_pub_key;
-};
-
-
-/**
- * Handle for a pending PSYC transmission operation.
- */
-struct GNUNET_PSYC_SlaveTransmitHandle
-{
-
-};
-
-
-struct GNUNET_PSYC_HistoryRequest
-{
-  /**
-   * Channel.
-   */
-  struct GNUNET_PSYC_Channel *chn;
-
-  /**
-   * Operation ID.
-   */
-  uint64_t op_id;
-
-  /**
-   * Message handler.
-   */
-  struct GNUNET_PSYC_ReceiveHandle *recv;
-
-  /**
-   * Function to call when the operation finished.
-   */
-  GNUNET_ResultCallback result_cb;
-
-  /**
-   * Closure for @a result_cb.
-   */
-  void *cls;
-};
-
-
-struct GNUNET_PSYC_StateRequest
-{
-  /**
-   * Channel.
-   */
-  struct GNUNET_PSYC_Channel *chn;
-
-  /**
-   * Operation ID.
-   */
-  uint64_t op_id;
-
-  /**
-   * State variable result callback.
-   */
-  GNUNET_PSYC_StateVarCallback var_cb;
-
-  /**
-   * Function to call when the operation finished.
-   */
-  GNUNET_ResultCallback result_cb;
-
-  /**
-   * Closure for @a result_cb.
-   */
-  void *cls;
-};
-
-
-static int
-check_channel_result (void *cls,
-                      const struct GNUNET_OperationResultMessage *res)
-{
-  return GNUNET_OK;
-}
-
-
-static void
-handle_channel_result (void *cls,
-                       const struct GNUNET_OperationResultMessage *res)
-{
-  struct GNUNET_PSYC_Channel *chn = cls;
-
-  uint16_t size = ntohs (res->header.size);
-  if (size < sizeof (*res))
-  { /* Error, message too small. */
-    GNUNET_break (0);
-    return;
-  }
-
-  uint16_t data_size = size - sizeof (*res);
-  const char *data = (0 < data_size) ? (void *) &res[1] : NULL;
-  GNUNET_OP_result (chn->op, GNUNET_ntohll (res->op_id),
-                    GNUNET_ntohll (res->result_code),
-                    data, data_size, NULL);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "handle_channel_result: Received result message with OP ID %" PRIu64 "\n",
-              GNUNET_ntohll (res->op_id));
-}
-
-
-static void
-op_recv_history_result (void *cls, int64_t result,
-                        const void *data, uint16_t data_size)
-{
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Received history replay result: %" PRId64 ".\n", result);
-
-  struct GNUNET_PSYC_HistoryRequest *hist = cls;
-
-  if (NULL != hist->result_cb)
-    hist->result_cb (hist->cls, result, data, data_size);
-
-  GNUNET_PSYC_receive_destroy (hist->recv);
-  GNUNET_free (hist);
-}
-
-
-static void
-op_recv_state_result (void *cls, int64_t result,
-                      const void *data, uint16_t data_size)
-{
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Received state request result: %" PRId64 ".\n", result);
-
-  struct GNUNET_PSYC_StateRequest *sr = cls;
-
-  if (NULL != sr->result_cb)
-    sr->result_cb (sr->cls, result, data, data_size);
-
-  GNUNET_free (sr);
-}
-
-
-static int
-check_channel_history_result (void *cls,
-                              const struct GNUNET_OperationResultMessage *res)
-{
-  struct GNUNET_PSYC_MessageHeader *
-    pmsg = (struct GNUNET_PSYC_MessageHeader *) GNUNET_MQ_extract_nested_mh (res);
-  uint16_t size = ntohs (res->header.size);
-
-  if ( (NULL == pmsg) ||
-       (size < sizeof (*res) + sizeof (*pmsg)) )
-  { /* Error, message too small. */
-    GNUNET_break_op (0);
-    return GNUNET_SYSERR;
-  }
-  return GNUNET_OK;
-}
-
-
-static void
-handle_channel_history_result (void *cls,
-                               const struct GNUNET_OperationResultMessage *res)
-{
-  struct GNUNET_PSYC_Channel *chn = cls;
-  struct GNUNET_PSYC_MessageHeader *
-    pmsg = (struct GNUNET_PSYC_MessageHeader *) GNUNET_MQ_extract_nested_mh (res);
-  GNUNET_ResultCallback result_cb = NULL;
-  struct GNUNET_PSYC_HistoryRequest *hist = NULL;
-
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "%p Received historic fragment for message #%" PRIu64 ".\n",
-       chn,
-       GNUNET_ntohll (pmsg->message_id));
-
-  if (GNUNET_YES != GNUNET_OP_get (chn->op,
-                                   GNUNET_ntohll (res->op_id),
-                                   &result_cb, (void *) &hist, NULL))
-  { /* Operation not found. */
-    LOG (GNUNET_ERROR_TYPE_WARNING,
-         "%p Replay operation not found for historic fragment of message #%"
-         PRIu64 ".\n",
-         chn, GNUNET_ntohll (pmsg->message_id));
-    return;
-  }
-
-  GNUNET_PSYC_receive_message (hist->recv,
-                               (const struct GNUNET_PSYC_MessageHeader *) pmsg);
-}
-
-
-static int
-check_channel_state_result (void *cls,
-                            const struct GNUNET_OperationResultMessage *res)
-{
-  const struct GNUNET_MessageHeader *mod = GNUNET_MQ_extract_nested_mh (res);
-  uint16_t mod_size;
-  uint16_t size;
-
-  if (NULL == mod)
-  {
-    GNUNET_break_op (0);
-    return GNUNET_SYSERR;
-  }
-  mod_size = ntohs (mod->size);
-  size = ntohs (res->header.size);
-  if (size - sizeof (*res) != mod_size)
-  {
-    GNUNET_break_op (0);
-    return GNUNET_SYSERR;
-  }
-  return GNUNET_OK;
-}
-
-
-static void
-handle_channel_state_result (void *cls,
-                             const struct GNUNET_OperationResultMessage *res)
-{
-  struct GNUNET_PSYC_Channel *chn = cls;
-
-  GNUNET_ResultCallback result_cb = NULL;
-  struct GNUNET_PSYC_StateRequest *sr = NULL;
-
-  if (GNUNET_YES != GNUNET_OP_get (chn->op,
-                                   GNUNET_ntohll (res->op_id),
-                                   &result_cb, (void *) &sr, NULL))
-  { /* Operation not found. */
-    return;
-  }
-
-  const struct GNUNET_MessageHeader *mod = GNUNET_MQ_extract_nested_mh (res);
-  if (NULL == mod)
-  {
-    GNUNET_break_op (0);
-    return;
-  }
-  uint16_t mod_size = ntohs (mod->size);
-
-  switch (ntohs (mod->type))
-  {
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MODIFIER:
-  {
-    const struct GNUNET_PSYC_MessageModifier *
-      pmod = (const struct GNUNET_PSYC_MessageModifier *) mod;
-
-    const char *name = (const char *) &pmod[1];
-    uint16_t name_size = ntohs (pmod->name_size);
-    if (0 == name_size
-        || mod_size - sizeof (*pmod) < name_size
-        || '\0' != name[name_size - 1])
-    {
-      GNUNET_break_op (0);
-      return;
-    }
-    sr->var_cb (sr->cls, mod, name, name + name_size,
-                ntohs (pmod->header.size) - sizeof (*pmod),
-                ntohs (pmod->value_size));
-    break;
-  }
-
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MOD_CONT:
-    sr->var_cb (sr->cls, mod, NULL, (const char *) &mod[1],
-                mod_size - sizeof (*mod), 0);
-    break;
-  }
-}
-
-
-static int
-check_channel_message (void *cls,
-                       const struct GNUNET_PSYC_MessageHeader *pmsg)
-{
-  return GNUNET_OK;
-}
-
-
-static void
-handle_channel_message (void *cls,
-                        const struct GNUNET_PSYC_MessageHeader *pmsg)
-{
-  struct GNUNET_PSYC_Channel *chn = cls;
-
-  GNUNET_PSYC_receive_message (chn->recv, pmsg);
-}
-
-
-static void
-handle_channel_message_ack (void *cls,
-                            const struct GNUNET_MessageHeader *msg)
-{
-  struct GNUNET_PSYC_Channel *chn = cls;
-
-  GNUNET_PSYC_transmit_got_ack (chn->tmit);
-}
-
-
-static void
-handle_master_start_ack (void *cls,
-                         const struct GNUNET_PSYC_CountersResultMessage *cres)
-{
-  struct GNUNET_PSYC_Master *mst = cls;
-
-  int32_t result = ntohl (cres->result_code);
-  if (GNUNET_OK != result && GNUNET_NO != result)
-  {
-    LOG (GNUNET_ERROR_TYPE_ERROR, "Could not start master: %ld\n", result);
-    GNUNET_break (0);
-    /* FIXME: disconnect */
-  }
-  if (NULL != mst->start_cb)
-    mst->start_cb (mst->cb_cls, result, GNUNET_ntohll (cres->max_message_id));
-}
-
-
-static int
-check_master_join_request (void *cls,
-                           const struct GNUNET_PSYC_JoinRequestMessage *req)
-{
-  if ( ((sizeof (*req) + sizeof (struct GNUNET_PSYC_Message)) <= ntohs (req->header.size)) &&
-       (NULL == GNUNET_MQ_extract_nested_mh (req)) )
-  {
-    GNUNET_break_op (0);
-    return GNUNET_SYSERR;
-  }
-  return GNUNET_OK;
-}
-
-
-static void
-handle_master_join_request (void *cls,
-                            const struct GNUNET_PSYC_JoinRequestMessage *req)
-{
-  struct GNUNET_PSYC_Master *mst = cls;
-
-  if (NULL == mst->join_req_cb)
-    return;
-
-  const struct GNUNET_PSYC_Message *join_msg = NULL;
-  if (sizeof (*req) + sizeof (*join_msg) <= ntohs (req->header.size))
-  {
-    join_msg = (struct GNUNET_PSYC_Message *) GNUNET_MQ_extract_nested_mh (req);
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "Received join_msg of type %u and size %u.\n",
-         ntohs (join_msg->header.type),
-         ntohs (join_msg->header.size));
-  }
-
-  struct GNUNET_PSYC_JoinHandle *jh = GNUNET_malloc (sizeof (*jh));
-  jh->mst = mst;
-  jh->slave_pub_key = req->slave_pub_key;
-
-  if (NULL != mst->join_req_cb)
-    mst->join_req_cb (mst->cb_cls, req, &req->slave_pub_key, join_msg, jh);
-}
-
-
-static void
-handle_slave_join_ack (void *cls,
-                       const struct GNUNET_PSYC_CountersResultMessage *cres)
-{
-  struct GNUNET_PSYC_Slave *slv = cls;
-
-  int32_t result = ntohl (cres->result_code);
-  if (GNUNET_YES != result && GNUNET_NO != result)
-  {
-    LOG (GNUNET_ERROR_TYPE_ERROR, "Could not join slave.\n");
-    GNUNET_break (0);
-    /* FIXME: disconnect */
-  }
-  if (NULL != slv->connect_cb)
-    slv->connect_cb (slv->cb_cls, result, GNUNET_ntohll (cres->max_message_id));
-}
-
-
-static int
-check_slave_join_decision (void *cls,
-                           const struct GNUNET_PSYC_JoinDecisionMessage *dcsn)
-{
-  return GNUNET_OK;
-}
-
-
-static void
-handle_slave_join_decision (void *cls,
-                            const struct GNUNET_PSYC_JoinDecisionMessage *dcsn)
-{
-  struct GNUNET_PSYC_Slave *slv = cls;
-
-  struct GNUNET_PSYC_Message *pmsg = NULL;
-  if (ntohs (dcsn->header.size) <= sizeof (*dcsn) + sizeof (*pmsg))
-    pmsg = (struct GNUNET_PSYC_Message *) &dcsn[1];
-
-  if (NULL != slv->join_dcsn_cb)
-    slv->join_dcsn_cb (slv->cb_cls, dcsn, ntohl (dcsn->is_admitted), pmsg);
-}
-
-
-static void
-channel_cleanup (struct GNUNET_PSYC_Channel *chn)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "cleaning up channel %p\n",
-              chn);
-  if (NULL != chn->tmit)
-  {
-    GNUNET_PSYC_transmit_destroy (chn->tmit);
-    chn->tmit = NULL;
-  }
-  if (NULL != chn->recv)
-  {
-
-    GNUNET_PSYC_receive_destroy (chn->recv);
-    chn->recv = NULL;
-  }
-  if (NULL != chn->connect_env)
-  {
-    GNUNET_MQ_discard (chn->connect_env);
-    chn->connect_env = NULL;
-  }
-  if (NULL != chn->mq)
-  {
-    GNUNET_MQ_destroy (chn->mq);
-    chn->mq = NULL;
-  }
-  if (NULL != chn->disconnect_cb)
-  {
-    chn->disconnect_cb (chn->disconnect_cls);
-    chn->disconnect_cb = NULL;
-  }
-  GNUNET_free (chn);
-}
-
-
-static void
-handle_channel_part_ack (void *cls,
-                         const struct GNUNET_MessageHeader *msg)
-{
-  struct GNUNET_PSYC_Channel *chn = cls;
-
-  channel_cleanup (chn); 
-}
-
-
-/*** MASTER ***/
-
-
-static void
-master_connect (struct GNUNET_PSYC_Master *mst);
-
-
-static void
-master_reconnect (void *cls)
-{
-  master_connect (cls);
-}
-
-
-/**
- * Master client disconnected from service.
- *
- * Reconnect after backoff period.
- */
-static void
-master_disconnected (void *cls, enum GNUNET_MQ_Error error)
-{
-  struct GNUNET_PSYC_Master *mst = cls;
-  struct GNUNET_PSYC_Channel *chn = &mst->chn;
-
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Master client disconnected (%d), re-connecting\n",
-       (int) error);
-  if (NULL != chn->tmit)
-  {
-    GNUNET_PSYC_transmit_destroy (chn->tmit);
-    chn->tmit = NULL;
-  }
-  if (NULL != chn->mq)
-  {
-    GNUNET_MQ_destroy (chn->mq);
-    chn->mq = NULL;
-  }
-  chn->reconnect_task = GNUNET_SCHEDULER_add_delayed (chn->reconnect_delay,
-                                                      master_reconnect,
-                                                      mst);
-  chn->reconnect_delay = GNUNET_TIME_STD_BACKOFF (chn->reconnect_delay);
-}
-
-
-static void
-master_connect (struct GNUNET_PSYC_Master *mst)
-{
-  struct GNUNET_PSYC_Channel *chn = &mst->chn;
-
-  struct GNUNET_MQ_MessageHandler handlers[] = {
-    GNUNET_MQ_hd_fixed_size (master_start_ack,
-                             GNUNET_MESSAGE_TYPE_PSYC_MASTER_START_ACK,
-                             struct GNUNET_PSYC_CountersResultMessage,
-                             mst),
-    GNUNET_MQ_hd_var_size (master_join_request,
-                           GNUNET_MESSAGE_TYPE_PSYC_JOIN_REQUEST,
-                           struct GNUNET_PSYC_JoinRequestMessage,
-                           mst),
-    GNUNET_MQ_hd_fixed_size (channel_part_ack,
-                             GNUNET_MESSAGE_TYPE_PSYC_PART_ACK,
-                             struct GNUNET_MessageHeader,
-                             chn),
-    GNUNET_MQ_hd_var_size (channel_message,
-                           GNUNET_MESSAGE_TYPE_PSYC_MESSAGE,
-                           struct GNUNET_PSYC_MessageHeader,
-                           chn),
-    GNUNET_MQ_hd_fixed_size (channel_message_ack,
-                             GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_ACK,
-                             struct GNUNET_MessageHeader,
-                             chn),
-    GNUNET_MQ_hd_var_size (channel_history_result,
-                           GNUNET_MESSAGE_TYPE_PSYC_HISTORY_RESULT,
-                           struct GNUNET_OperationResultMessage,
-                           chn),
-    GNUNET_MQ_hd_var_size (channel_state_result,
-                           GNUNET_MESSAGE_TYPE_PSYC_STATE_RESULT,
-                           struct GNUNET_OperationResultMessage,
-                           chn),
-    GNUNET_MQ_hd_var_size (channel_result,
-                           GNUNET_MESSAGE_TYPE_PSYC_RESULT_CODE,
-                           struct GNUNET_OperationResultMessage,
-                           chn),
-    GNUNET_MQ_handler_end ()
-  };
-
-  chn->mq = GNUNET_CLIENT_connect (chn->cfg,
-                                   "psyc",
-                                   handlers,
-                                   &master_disconnected,
-                                   mst);
-  GNUNET_assert (NULL != chn->mq);
-  chn->tmit = GNUNET_PSYC_transmit_create (chn->mq);
-
-  GNUNET_MQ_send_copy (chn->mq, chn->connect_env);
-}
-
-
-/**
- * Start a PSYC master channel.
- *
- * Will start a multicast group identified by the given ECC key.  Messages
- * received from group members will be given to the respective handler methods.
- * If a new member wants to join a group, the "join" method handler will be
- * invoked; the join handler must then generate a "join" message to approve the
- * joining of the new member.  The channel can also change group membership
- * without explicit requests.  Note that PSYC doesn't itself "understand" join
- * or part messages, the respective methods must call other PSYC functions to
- * inform PSYC about the meaning of the respective events.
- *
- * @param cfg  Configuration to use (to connect to PSYC service).
- * @param channel_key  ECC key that will be used to sign messages for this
- *        PSYC session. The public key is used to identify the PSYC channel.
- *        Note that end-users will usually not use the private key directly, but
- *        rather look it up in GNS for places managed by other users, or select
- *        a file with the private key(s) when setting up their own channels
- *        FIXME: we'll likely want to use NOT the p521 curve here, but a cheaper
- *        one in the future.
- * @param policy  Channel policy specifying join and history restrictions.
- *        Used to automate join decisions.
- * @param message_cb  Function to invoke on message parts received from slaves.
- * @param join_request_cb  Function to invoke when a slave wants to join.
- * @param master_start_cb  Function to invoke after the channel master started.
- * @param cls  Closure for @a method and @a join_cb.
- *
- * @return Handle for the channel master, NULL on error.
- */
-struct GNUNET_PSYC_Master *
-GNUNET_PSYC_master_start (const struct GNUNET_CONFIGURATION_Handle *cfg,
-                          const struct GNUNET_CRYPTO_EddsaPrivateKey *channel_key,
-                          enum GNUNET_PSYC_Policy policy,
-                          GNUNET_PSYC_MasterStartCallback start_cb,
-                          GNUNET_PSYC_JoinRequestCallback join_request_cb,
-                          GNUNET_PSYC_MessageCallback message_cb,
-                          GNUNET_PSYC_MessagePartCallback message_part_cb,
-                          void *cls)
-{
-  struct GNUNET_PSYC_Master *mst = GNUNET_new (struct GNUNET_PSYC_Master);
-  struct GNUNET_PSYC_Channel *chn = &mst->chn;
-  struct MasterStartRequest *req;
-
-  chn->connect_env = GNUNET_MQ_msg (req,
-                                    GNUNET_MESSAGE_TYPE_PSYC_MASTER_START);
-  req->channel_key = *channel_key;
-  req->policy = policy;
-
-  chn->cfg = cfg;
-  chn->is_master = GNUNET_YES;
-  chn->reconnect_delay = GNUNET_TIME_UNIT_MILLISECONDS;
-
-  chn->op = GNUNET_OP_create ();
-  chn->recv = GNUNET_PSYC_receive_create (message_cb, message_part_cb, cls);
-
-  mst->start_cb = start_cb;
-  mst->join_req_cb = join_request_cb;
-  mst->cb_cls = cls;
-
-  master_connect (mst);
-  return mst;
-}
-
-
-/**
- * Stop a PSYC master channel.
- *
- * @param master PSYC channel master to stop.
- * @param keep_active  FIXME
- */
-void
-GNUNET_PSYC_master_stop (struct GNUNET_PSYC_Master *mst,
-                         int keep_active,
-                         GNUNET_ContinuationCallback stop_cb,
-                         void *stop_cls)
-{
-  struct GNUNET_PSYC_Channel *chn = &mst->chn;
-  struct GNUNET_MQ_Envelope *env;
-
-  chn->is_disconnecting = GNUNET_YES;
-  chn->disconnect_cb = stop_cb;
-  chn->disconnect_cls = stop_cls;
-  env = GNUNET_MQ_msg_header (GNUNET_MESSAGE_TYPE_PSYC_PART_REQUEST);
-  GNUNET_MQ_send (chn->mq, env);
-}
-
-
-/**
- * Function to call with the decision made for a join request.
- *
- * Must be called once and only once in response to an invocation of the
- * #GNUNET_PSYC_JoinCallback.
- *
- * @param jh Join request handle.
- * @param is_admitted  #GNUNET_YES    if the join is approved,
- *                     #GNUNET_NO     if it is disapproved,
- *                     #GNUNET_SYSERR if we cannot answer the request.
- * @param relay_count Number of relays given.
- * @param relays Array of suggested peers that might be useful relays to use
- *        when joining the multicast group (essentially a list of peers that
- *        are already part of the multicast group and might thus be willing
- *        to help with routing).  If empty, only this local peer (which must
- *        be the multicast origin) is a good candidate for building the
- *        multicast tree.  Note that it is unnecessary to specify our own
- *        peer identity in this array.
- * @param join_resp  Application-dependent join response message.
- *
- * @return #GNUNET_OK on success,
- *         #GNUNET_SYSERR if the message is too large.
- */
-int
-GNUNET_PSYC_join_decision (struct GNUNET_PSYC_JoinHandle *jh,
-                           int is_admitted,
-                           uint32_t relay_count,
-                           const struct GNUNET_PeerIdentity *relays,
-                           const struct GNUNET_PSYC_Message *join_resp)
-{
-  struct GNUNET_PSYC_Channel *chn = &jh->mst->chn;
-  struct GNUNET_PSYC_JoinDecisionMessage *dcsn;
-  uint16_t join_resp_size
-    = (NULL != join_resp) ? ntohs (join_resp->header.size) : 0;
-  uint16_t relay_size = relay_count * sizeof (*relays);
-
-  if (GNUNET_MULTICAST_FRAGMENT_MAX_PAYLOAD
-      < sizeof (*dcsn) + relay_size + join_resp_size)
-    return GNUNET_SYSERR;
-
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg_extra (dcsn, relay_size + join_resp_size,
-                               GNUNET_MESSAGE_TYPE_PSYC_JOIN_DECISION);
-  dcsn->is_admitted = htonl (is_admitted);
-  dcsn->slave_pub_key = jh->slave_pub_key;
-
-  if (0 < join_resp_size)
-    GNUNET_memcpy (&dcsn[1], join_resp, join_resp_size);
-
-  GNUNET_MQ_send (chn->mq, env);
-  GNUNET_free (jh);
-  return GNUNET_OK;
-}
-
-
-/**
- * Send a message to call a method to all members in the PSYC channel.
- *
- * @param master Handle to the PSYC channel.
- * @param method_name Which method should be invoked.
- * @param notify_mod Function to call to obtain modifiers.
- * @param notify_data Function to call to obtain fragments of the data.
- * @param notify_cls Closure for @a notify_mod and @a notify_data.
- * @param flags Flags for the message being transmitted.
- *
- * @return Transmission handle, NULL on error (i.e. more than one request queued).
- */
-struct GNUNET_PSYC_MasterTransmitHandle *
-GNUNET_PSYC_master_transmit (struct GNUNET_PSYC_Master *mst,
-                             const char *method_name,
-                             GNUNET_PSYC_TransmitNotifyModifier notify_mod,
-                             GNUNET_PSYC_TransmitNotifyData notify_data,
-                             void *notify_cls,
-                             enum GNUNET_PSYC_MasterTransmitFlags flags)
-{
-  if (GNUNET_OK
-      == GNUNET_PSYC_transmit_message (mst->chn.tmit, method_name, NULL,
-                                       notify_mod, notify_data, notify_cls,
-                                       flags))
-    return (struct GNUNET_PSYC_MasterTransmitHandle *) mst->chn.tmit;
-  else
-    return NULL;
-}
-
-
-/**
- * Resume transmission to the channel.
- *
- * @param tmit  Handle of the request that is being resumed.
- */
-void
-GNUNET_PSYC_master_transmit_resume (struct GNUNET_PSYC_MasterTransmitHandle *tmit)
-{
-  GNUNET_PSYC_transmit_resume ((struct GNUNET_PSYC_TransmitHandle *) tmit);
-}
-
-
-/**
- * Abort transmission request to the channel.
- *
- * @param tmit  Handle of the request that is being aborted.
- */
-void
-GNUNET_PSYC_master_transmit_cancel (struct GNUNET_PSYC_MasterTransmitHandle *tmit)
-{
-  GNUNET_PSYC_transmit_cancel ((struct GNUNET_PSYC_TransmitHandle *) tmit);
-}
-
-
-/**
- * Convert a channel @a master to a @e channel handle to access the @e channel
- * APIs.
- *
- * @param master Channel master handle.
- *
- * @return Channel handle, valid for as long as @a master is valid.
- */
-struct GNUNET_PSYC_Channel *
-GNUNET_PSYC_master_get_channel (struct GNUNET_PSYC_Master *master)
-{
-  return &master->chn;
-}
-
-
-/*** SLAVE ***/
-
-
-static void
-slave_connect (struct GNUNET_PSYC_Slave *slv);
-
-
-static void
-slave_reconnect (void *cls)
-{
-  slave_connect (cls);
-}
-
-
-/**
- * Slave client disconnected from service.
- *
- * Reconnect after backoff period.
- */
-static void
-slave_disconnected (void *cls,
-                    enum GNUNET_MQ_Error error)
-{
-  struct GNUNET_PSYC_Slave *slv = cls;
-  struct GNUNET_PSYC_Channel *chn = &slv->chn;
-
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Slave client disconnected (%d), re-connecting\n",
-       (int) error);
-  if (NULL != chn->tmit)
-  {
-    GNUNET_PSYC_transmit_destroy (chn->tmit);
-    chn->tmit = NULL;
-  }
-  if (NULL != chn->mq)
-  {
-    GNUNET_MQ_destroy (chn->mq);
-    chn->mq = NULL;
-  }
-  chn->reconnect_task = GNUNET_SCHEDULER_add_delayed (chn->reconnect_delay,
-                                                      &slave_reconnect,
-                                                      slv);
-  chn->reconnect_delay = GNUNET_TIME_STD_BACKOFF (chn->reconnect_delay);
-}
-
-
-static void
-slave_connect (struct GNUNET_PSYC_Slave *slv)
-{
-  struct GNUNET_PSYC_Channel *chn = &slv->chn;
-
-  struct GNUNET_MQ_MessageHandler handlers[] = {
-    GNUNET_MQ_hd_fixed_size (slave_join_ack,
-                             GNUNET_MESSAGE_TYPE_PSYC_SLAVE_JOIN_ACK,
-                             struct GNUNET_PSYC_CountersResultMessage,
-                             slv),
-    GNUNET_MQ_hd_var_size (slave_join_decision,
-                           GNUNET_MESSAGE_TYPE_PSYC_JOIN_DECISION,
-                           struct GNUNET_PSYC_JoinDecisionMessage,
-                           slv),
-    GNUNET_MQ_hd_fixed_size (channel_part_ack,
-                             GNUNET_MESSAGE_TYPE_PSYC_PART_ACK,
-                             struct GNUNET_MessageHeader,
-                             chn),
-    GNUNET_MQ_hd_var_size (channel_message,
-                           GNUNET_MESSAGE_TYPE_PSYC_MESSAGE,
-                           struct GNUNET_PSYC_MessageHeader,
-                           chn),
-    GNUNET_MQ_hd_fixed_size (channel_message_ack,
-                             GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_ACK,
-                             struct GNUNET_MessageHeader,
-                             chn),
-    GNUNET_MQ_hd_var_size (channel_history_result,
-                           GNUNET_MESSAGE_TYPE_PSYC_HISTORY_RESULT,
-                           struct GNUNET_OperationResultMessage,
-                           chn),
-    GNUNET_MQ_hd_var_size (channel_state_result,
-                           GNUNET_MESSAGE_TYPE_PSYC_STATE_RESULT,
-                           struct GNUNET_OperationResultMessage,
-                           chn),
-    GNUNET_MQ_hd_var_size (channel_result,
-                           GNUNET_MESSAGE_TYPE_PSYC_RESULT_CODE,
-                           struct GNUNET_OperationResultMessage,
-                           chn),
-    GNUNET_MQ_handler_end ()
-  };
-
-  chn->mq = GNUNET_CLIENT_connect (chn->cfg,
-                                   "psyc",
-                                   handlers,
-                                   &slave_disconnected,
-                                   slv);
-  if (NULL == chn->mq)
-  {
-    chn->reconnect_task = GNUNET_SCHEDULER_add_delayed (chn->reconnect_delay,
-                                                        &slave_reconnect,
-                                                        slv);
-    chn->reconnect_delay = GNUNET_TIME_STD_BACKOFF (chn->reconnect_delay);
-    return;
-  }
-  chn->tmit = GNUNET_PSYC_transmit_create (chn->mq);
-
-  GNUNET_MQ_send_copy (chn->mq, chn->connect_env);
-}
-
-
-/**
- * Join a PSYC channel.
- *
- * The entity joining is always the local peer.  The user must immediately use
- * the GNUNET_PSYC_slave_transmit() functions to transmit a @e join_msg to the
- * channel; if the join request succeeds, the channel state (and @e recent
- * method calls) will be replayed to the joining member.  There is no explicit
- * notification on failure (as the channel may simply take days to approve,
- * and disapproval is simply being ignored).
- *
- * @param cfg
- *        Configuration to use.
- * @param channel_key  ECC public key that identifies the channel we wish to join.
- * @param slave_key  ECC private-public key pair that identifies the slave, and
- *        used by multicast to sign the join request and subsequent unicast
- *        requests sent to the master.
- * @param origin  Peer identity of the origin.
- * @param relay_count  Number of peers in the @a relays array.
- * @param relays  Peer identities of members of the multicast group, which serve
- *        as relays and used to join the group at.
- * @param message_cb  Function to invoke on message parts received from the
- *        channel, typically at least contains method handlers for @e join and
- *        @e part.
- * @param slave_connect_cb  Function invoked once we have connected to the
- *        PSYC service.
- * @param join_decision_cb  Function invoked once we have received a join
- *       decision.
- * @param cls  Closure for @a message_cb and @a slave_joined_cb.
- * @param method_name  Method name for the join request.
- * @param env  Environment containing transient variables for the request, or NULL.
- * @param data  Payload for the join message.
- * @param data_size  Number of bytes in @a data.
- *
- * @return Handle for the slave, NULL on error.
- */
-struct GNUNET_PSYC_Slave *
-GNUNET_PSYC_slave_join (const struct GNUNET_CONFIGURATION_Handle *cfg,
-                        const struct GNUNET_CRYPTO_EddsaPublicKey *channel_pub_key,
-                        const struct GNUNET_CRYPTO_EcdsaPrivateKey *slave_key,
-                        enum GNUNET_PSYC_SlaveJoinFlags flags,
-                        const struct GNUNET_PeerIdentity *origin,
-                        uint32_t relay_count,
-                        const struct GNUNET_PeerIdentity *relays,
-                        GNUNET_PSYC_MessageCallback message_cb,
-                        GNUNET_PSYC_MessagePartCallback message_part_cb,
-                        GNUNET_PSYC_SlaveConnectCallback connect_cb,
-                        GNUNET_PSYC_JoinDecisionCallback join_decision_cb,
-                        void *cls,
-                        const struct GNUNET_PSYC_Message *join_msg)
-{
-  struct GNUNET_PSYC_Slave *slv = GNUNET_malloc (sizeof (*slv));
-  struct GNUNET_PSYC_Channel *chn = &slv->chn;
-  uint16_t relay_size = relay_count * sizeof (*relays);
-  uint16_t join_msg_size;
-  if (NULL == join_msg)
-    join_msg_size = 0;
-  else
-    join_msg_size = ntohs (join_msg->header.size);
-
-  struct SlaveJoinRequest *req;
-  chn->connect_env = GNUNET_MQ_msg_extra (req, relay_size + join_msg_size,
-                                          GNUNET_MESSAGE_TYPE_PSYC_SLAVE_JOIN);
-  req->channel_pub_key = *channel_pub_key;
-  req->slave_key = *slave_key;
-  req->origin = *origin;
-  req->relay_count = htonl (relay_count);
-  req->flags = htonl (flags);
-
-  if (0 < relay_size)
-    GNUNET_memcpy (&req[1], relays, relay_size);
-
-  if (NULL != join_msg)
-    GNUNET_memcpy ((char *) &req[1] + relay_size, join_msg, join_msg_size);
-
-  chn->cfg = cfg;
-  chn->is_master = GNUNET_NO;
-  chn->reconnect_delay = GNUNET_TIME_UNIT_MILLISECONDS;
-
-  chn->op = GNUNET_OP_create ();
-  chn->recv = GNUNET_PSYC_receive_create (message_cb, message_part_cb, cls);
-
-  slv->connect_cb = connect_cb;
-  slv->join_dcsn_cb = join_decision_cb;
-  slv->cb_cls = cls;
-
-  slave_connect (slv);
-  return slv;
-}
-
-
-/**
- * Part a PSYC channel.
- *
- * Will terminate the connection to the PSYC service.  Polite clients should
- * first explicitly send a part request (via GNUNET_PSYC_slave_transmit()).
- *
- * @param slave Slave handle.
- */
-void
-GNUNET_PSYC_slave_part (struct GNUNET_PSYC_Slave *slv,
-                        int keep_active,
-                        GNUNET_ContinuationCallback part_cb,
-                        void *part_cls)
-{
-  struct GNUNET_PSYC_Channel *chn = &slv->chn;
-  struct GNUNET_MQ_Envelope *env;
-
-  chn->is_disconnecting = GNUNET_YES;
-  chn->disconnect_cb = part_cb;
-  chn->disconnect_cls = part_cls;
-  env = GNUNET_MQ_msg_header (GNUNET_MESSAGE_TYPE_PSYC_PART_REQUEST);
-  GNUNET_MQ_send (chn->mq, env);
-}
-
-
-/**
- * Request a message to be sent to the channel master.
- *
- * @param slave Slave handle.
- * @param method_name Which (PSYC) method should be invoked (on host).
- * @param notify_mod Function to call to obtain modifiers.
- * @param notify_data Function to call to obtain fragments of the data.
- * @param notify_cls Closure for @a notify.
- * @param flags Flags for the message being transmitted.
- *
- * @return Transmission handle, NULL on error (i.e. more than one request
- *         queued).
- */
-struct GNUNET_PSYC_SlaveTransmitHandle *
-GNUNET_PSYC_slave_transmit (struct GNUNET_PSYC_Slave *slv,
-                            const char *method_name,
-                            GNUNET_PSYC_TransmitNotifyModifier notify_mod,
-                            GNUNET_PSYC_TransmitNotifyData notify_data,
-                            void *notify_cls,
-                            enum GNUNET_PSYC_SlaveTransmitFlags flags)
-
-{
-  if (GNUNET_OK
-      == GNUNET_PSYC_transmit_message (slv->chn.tmit, method_name, NULL,
-                                       notify_mod, notify_data, notify_cls,
-                                       flags))
-    return (struct GNUNET_PSYC_SlaveTransmitHandle *) slv->chn.tmit;
-  else
-    return NULL;
-}
-
-
-/**
- * Resume transmission to the master.
- *
- * @param tmit Handle of the request that is being resumed.
- */
-void
-GNUNET_PSYC_slave_transmit_resume (struct GNUNET_PSYC_SlaveTransmitHandle *tmit)
-{
-  GNUNET_PSYC_transmit_resume ((struct GNUNET_PSYC_TransmitHandle *) tmit);
-}
-
-
-/**
- * Abort transmission request to master.
- *
- * @param tmit Handle of the request that is being aborted.
- */
-void
-GNUNET_PSYC_slave_transmit_cancel (struct GNUNET_PSYC_SlaveTransmitHandle *tmit)
-{
-  GNUNET_PSYC_transmit_cancel ((struct GNUNET_PSYC_TransmitHandle *) tmit);
-}
-
-
-/**
- * Convert @a slave to a @e channel handle to access the @e channel APIs.
- *
- * @param slv Slave handle.
- *
- * @return Channel handle, valid for as long as @a slave is valid.
- */
-struct GNUNET_PSYC_Channel *
-GNUNET_PSYC_slave_get_channel (struct GNUNET_PSYC_Slave *slv)
-{
-  return &slv->chn;
-}
-
-
-/**
- * Add a slave to the channel's membership list.
- *
- * Note that this will NOT generate any PSYC traffic, it will merely update the
- * local database to modify how we react to <em>membership test</em> queries.
- * The channel master still needs to explicitly transmit a @e join message to
- * notify other channel members and they then also must still call this function
- * in their respective methods handling the @e join message.  This way, how @e
- * join and @e part operations are exactly implemented is still up to the
- * application; for example, there might be a @e part_all method to kick out
- * everyone.
- *
- * Note that channel slaves are explicitly trusted to execute such methods
- * correctly; not doing so correctly will result in either denying other slaves
- * access or offering access to channel data to non-members.
- *
- * @param chn
- *        Channel handle.
- * @param slave_pub_key
- *        Identity of channel slave to add.
- * @param announced_at
- *        ID of the message that announced the membership change.
- * @param effective_since
- *        Addition of slave is in effect since this message ID.
- * @param result_cb
- *        Function to call with the result of the operation.
- *        The @e result_code argument is #GNUNET_OK on success, or
- *        #GNUNET_SYSERR on error.  In case of an error, the @e data argument
- *        can contain an optional error message.
- * @param cls
- *        Closure for @a result_cb.
- */
-void
-GNUNET_PSYC_channel_slave_add (struct GNUNET_PSYC_Channel *chn,
-                               const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_pub_key,
-                               uint64_t announced_at,
-                               uint64_t effective_since,
-                               GNUNET_ResultCallback result_cb,
-                               void *cls)
-{
-  struct ChannelMembershipStoreRequest *req;
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg (req, GNUNET_MESSAGE_TYPE_PSYC_CHANNEL_MEMBERSHIP_STORE);
-  req->slave_pub_key = *slave_pub_key;
-  req->announced_at = GNUNET_htonll (announced_at);
-  req->effective_since = GNUNET_htonll (effective_since);
-  req->did_join = GNUNET_YES;
-  req->op_id = GNUNET_htonll (GNUNET_OP_add (chn->op, result_cb, cls, NULL));
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "GNUNET_PSYC_channel_slave_add, OP ID: %" PRIu64 "\n",
-              GNUNET_ntohll (req->op_id));
-  GNUNET_MQ_send (chn->mq, env);
-}
-
-
-/**
- * Remove a slave from the channel's membership list.
- *
- * Note that this will NOT generate any PSYC traffic, it will merely update the
- * local database to modify how we react to <em>membership test</em> queries.
- * The channel master still needs to explicitly transmit a @e part message to
- * notify other channel members and they then also must still call this function
- * in their respective methods handling the @e part message.  This way, how
- * @e join and @e part operations are exactly implemented is still up to the
- * application; for example, there might be a @e part_all message to kick out
- * everyone.
- *
- * Note that channel members are explicitly trusted to perform these
- * operations correctly; not doing so correctly will result in either
- * denying members access or offering access to channel data to
- * non-members.
- *
- * @param chn
- *        Channel handle.
- * @param slave_pub_key
- *        Identity of channel slave to remove.
- * @param announced_at
- *        ID of the message that announced the membership change.
- * @param result_cb
- *        Function to call with the result of the operation.
- *        The @e result_code argument is #GNUNET_OK on success, or
- *        #GNUNET_SYSERR on error.  In case of an error, the @e data argument
- *        can contain an optional error message.
- * @param cls
- *        Closure for @a result_cb.
- */
-void
-GNUNET_PSYC_channel_slave_remove (struct GNUNET_PSYC_Channel *chn,
-                                  const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_pub_key,
-                                  uint64_t announced_at,
-                                  GNUNET_ResultCallback result_cb,
-                                  void *cls)
-{
-  struct ChannelMembershipStoreRequest *req;
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg (req, GNUNET_MESSAGE_TYPE_PSYC_CHANNEL_MEMBERSHIP_STORE);
-  req->slave_pub_key = *slave_pub_key;
-  req->announced_at = GNUNET_htonll (announced_at);
-  req->did_join = GNUNET_NO;
-  req->op_id = GNUNET_htonll (GNUNET_OP_add (chn->op, result_cb, cls, NULL));
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "GNUNET_PSYC_channel_slave_remove, OP ID: %" PRIu64 "\n",
-              GNUNET_ntohll (req->op_id));
-  GNUNET_MQ_send (chn->mq, env);
-}
-
-
-static struct GNUNET_PSYC_HistoryRequest *
-channel_history_replay (struct GNUNET_PSYC_Channel *chn,
-                        uint64_t start_message_id,
-                        uint64_t end_message_id,
-                        uint64_t message_limit,
-                        const char *method_prefix,
-                        uint32_t flags,
-                        GNUNET_PSYC_MessageCallback message_cb,
-                        GNUNET_PSYC_MessagePartCallback message_part_cb,
-                        GNUNET_ResultCallback result_cb,
-                        void *cls)
-{
-  struct GNUNET_PSYC_HistoryRequestMessage *req;
-  struct GNUNET_PSYC_HistoryRequest *hist = GNUNET_malloc (sizeof (*hist));
-  hist->chn = chn;
-  hist->recv = GNUNET_PSYC_receive_create (message_cb, message_part_cb, cls);
-  hist->result_cb = result_cb;
-  hist->cls = cls;
-  hist->op_id = GNUNET_OP_add (chn->op, op_recv_history_result, hist, NULL);
-
-  GNUNET_assert (NULL != method_prefix);
-  uint16_t method_size = strnlen (method_prefix,
-                                  GNUNET_MAX_MESSAGE_SIZE
-                                  - sizeof (*req)) + 1;
-  GNUNET_assert ('\0' == method_prefix[method_size - 1]);
-
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg_extra (req, method_size,
-                               GNUNET_MESSAGE_TYPE_PSYC_HISTORY_REPLAY);
-  req->start_message_id = GNUNET_htonll (start_message_id);
-  req->end_message_id = GNUNET_htonll (end_message_id);
-  req->message_limit = GNUNET_htonll (message_limit);
-  req->flags = htonl (flags);
-  req->op_id = GNUNET_htonll (hist->op_id);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "channel_history_replay, OP ID: %" PRIu64 "\n",
-              GNUNET_ntohll (req->op_id));
-  GNUNET_memcpy (&req[1], method_prefix, method_size);
-
-  GNUNET_MQ_send (chn->mq, env);
-  return hist;
-}
-
-
-/**
- * Request to replay a part of the message history of the channel.
- *
- * Historic messages (but NOT the state at the time) will be replayed and given
- * to the normal method handlers with a #GNUNET_PSYC_MESSAGE_HISTORIC flag set.
- *
- * Messages are retrieved from the local PSYCstore if available,
- * otherwise requested from the network.
- *
- * @param channel
- *        Which channel should be replayed?
- * @param start_message_id
- *        Earliest interesting point in history.
- * @param end_message_id
- *        Last (inclusive) interesting point in history.
- * @param method_prefix
- *        Retrieve only messages with a matching method prefix.
- * @param flags
- *        OR'ed enum GNUNET_PSYC_HistoryReplayFlags
- * @param result_cb
- *        Function to call when the requested history has been fully replayed.
- * @param cls
- *        Closure for the callbacks.
- *
- * @return Handle to cancel history replay operation.
- */
-struct GNUNET_PSYC_HistoryRequest *
-GNUNET_PSYC_channel_history_replay (struct GNUNET_PSYC_Channel *chn,
-                                    uint64_t start_message_id,
-                                    uint64_t end_message_id,
-                                    const char *method_prefix,
-                                    uint32_t flags,
-                                    GNUNET_PSYC_MessageCallback message_cb,
-                                    GNUNET_PSYC_MessagePartCallback message_part_cb,
-                                    GNUNET_ResultCallback result_cb,
-                                    void *cls)
-{
-  return channel_history_replay (chn, start_message_id, end_message_id, 0,
-                                 method_prefix, flags,
-                                 message_cb, message_part_cb, result_cb, cls);
-}
-
-
-/**
- * Request to replay the latest messages from the message history of the channel.
- *
- * Historic messages (but NOT the state at the time) will be replayed (given to
- * the normal method handlers) if available and if access is permitted.
- *
- * @param channel
- *        Which channel should be replayed?
- * @param message_limit
- *        Maximum number of messages to replay.
- * @param method_prefix
- *        Retrieve only messages with a matching method prefix.
- *        Use NULL or "" to retrieve all.
- * @param flags
- *        OR'ed enum GNUNET_PSYC_HistoryReplayFlags
- * @param result_cb
- *        Function to call when the requested history has been fully replayed.
- * @param cls
- *        Closure for the callbacks.
- *
- * @return Handle to cancel history replay operation.
- */
-struct GNUNET_PSYC_HistoryRequest *
-GNUNET_PSYC_channel_history_replay_latest (struct GNUNET_PSYC_Channel *chn,
-                                           uint64_t message_limit,
-                                           const char *method_prefix,
-                                           uint32_t flags,
-                                           GNUNET_PSYC_MessageCallback message_cb,
-                                           GNUNET_PSYC_MessagePartCallback message_part_cb,
-                                           GNUNET_ResultCallback result_cb,
-                                           void *cls)
-{
-  return channel_history_replay (chn, 0, 0, message_limit, method_prefix, flags,
-                                 message_cb, message_part_cb, result_cb, cls);
-}
-
-
-void
-GNUNET_PSYC_channel_history_replay_cancel (struct GNUNET_PSYC_Channel *channel,
-                                           struct GNUNET_PSYC_HistoryRequest *hist)
-{
-  GNUNET_PSYC_receive_destroy (hist->recv);
-  GNUNET_OP_remove (hist->chn->op, hist->op_id);
-  GNUNET_free (hist);
-}
-
-
-/**
- * Retrieve the best matching channel state variable.
- *
- * If the requested variable name is not present in the state, the nearest
- * less-specific name is matched; for example, requesting "_a_b" will match "_a"
- * if "_a_b" does not exist.
- *
- * @param channel
- *        Channel handle.
- * @param full_name
- *        Full name of the requested variable.
- *        The actual variable returned might have a shorter name.
- * @param var_cb
- *        Function called once when a matching state variable is found.
- *        Not called if there's no matching state variable.
- * @param result_cb
- *        Function called after the operation finished.
- *        (i.e. all state variables have been returned via @a state_cb)
- * @param cls
- *        Closure for the callbacks.
- */
-static struct GNUNET_PSYC_StateRequest *
-channel_state_get (struct GNUNET_PSYC_Channel *chn,
-                   uint16_t type, const char *name,
-                   GNUNET_PSYC_StateVarCallback var_cb,
-                   GNUNET_ResultCallback result_cb, void *cls)
-{
-  struct StateRequest *req;
-  struct GNUNET_PSYC_StateRequest *sr = GNUNET_malloc (sizeof (*sr));
-  sr->chn = chn;
-  sr->var_cb = var_cb;
-  sr->result_cb = result_cb;
-  sr->cls = cls;
-  sr->op_id = GNUNET_OP_add (chn->op, op_recv_state_result, sr, NULL);
-
-  GNUNET_assert (NULL != name);
-  size_t name_size = strnlen (name, GNUNET_MAX_MESSAGE_SIZE
-                              - sizeof (*req)) + 1;
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg_extra (req, name_size, type);
-  req->op_id = GNUNET_htonll (sr->op_id);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "channel_state_get, OP ID: %" PRIu64 "\n",
-              GNUNET_ntohll (req->op_id));
-
-  GNUNET_memcpy (&req[1], name, name_size);
-
-  GNUNET_MQ_send (chn->mq, env);
-  return sr;
-}
-
-
-/**
- * Retrieve the best matching channel state variable.
- *
- * If the requested variable name is not present in the state, the nearest
- * less-specific name is matched; for example, requesting "_a_b" will match "_a"
- * if "_a_b" does not exist.
- *
- * @param channel
- *        Channel handle.
- * @param full_name
- *        Full name of the requested variable.
- *        The actual variable returned might have a shorter name.
- * @param var_cb
- *        Function called once when a matching state variable is found.
- *        Not called if there's no matching state variable.
- * @param result_cb
- *        Function called after the operation finished.
- *        (i.e. all state variables have been returned via @a state_cb)
- * @param cls
- *        Closure for the callbacks.
- */
-struct GNUNET_PSYC_StateRequest *
-GNUNET_PSYC_channel_state_get (struct GNUNET_PSYC_Channel *chn,
-                               const char *full_name,
-                               GNUNET_PSYC_StateVarCallback var_cb,
-                               GNUNET_ResultCallback result_cb,
-                               void *cls)
-{
-  return channel_state_get (chn, GNUNET_MESSAGE_TYPE_PSYC_STATE_GET,
-                            full_name, var_cb, result_cb, cls);
-
-}
-
-
-/**
- * Return all channel state variables whose name matches a given prefix.
- *
- * A name matches if it starts with the given @a name_prefix, thus requesting
- * the empty prefix ("") will match all values; requesting "_a_b" will also
- * return values stored under "_a_b_c".
- *
- * The @a state_cb is invoked on all matching state variables asynchronously, as
- * the state is stored in and retrieved from the PSYCstore,
- *
- * @param channel
- *        Channel handle.
- * @param name_prefix
- *        Prefix of the state variable name to match.
- * @param var_cb
- *        Function called once when a matching state variable is found.
- *        Not called if there's no matching state variable.
- * @param result_cb
- *        Function called after the operation finished.
- *        (i.e. all state variables have been returned via @a state_cb)
- * @param cls
- *        Closure for the callbacks.
- */
-struct GNUNET_PSYC_StateRequest *
-GNUNET_PSYC_channel_state_get_prefix (struct GNUNET_PSYC_Channel *chn,
-                                      const char *name_prefix,
-                                      GNUNET_PSYC_StateVarCallback var_cb,
-                                      GNUNET_ResultCallback result_cb,
-                                      void *cls)
-{
-  return channel_state_get (chn, GNUNET_MESSAGE_TYPE_PSYC_STATE_GET_PREFIX,
-                            name_prefix, var_cb, result_cb, cls);
-}
-
-
-/**
- * Cancel a state request operation.
- *
- * @param sr
- *        Handle for the operation to cancel.
- */
-void
-GNUNET_PSYC_channel_state_get_cancel (struct GNUNET_PSYC_StateRequest *sr)
-{
-  GNUNET_OP_remove (sr->chn->op, sr->op_id);
-  GNUNET_free (sr);
-}
-
-/* end of psyc_api.c */
diff --git a/src/psyc/psyc_test_lib.h b/src/psyc/psyc_test_lib.h
deleted file mode 100644 (file)
index 0ad9910..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * This file is part of GNUnet
- * Copyright (C) 2013 GNUnet e.V.
- *
- * GNUnet is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNUnet is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
- */
-
-/**
- * @file psyc/test_psyc_api_join.c
- * @brief library for writing psyc tests
- * @author xrs
- */
-
-#define MAX_TESTBED_OPS 32
-
-struct pctx
-{
-  int idx;
-  
-  struct GNUNET_TESTBED_Peer *testbed_peer;
-  
-  const struct GNUNET_PeerIdentity *peer_id;
-
-  const struct GNUNET_PeerIdentity *peer_id_master;
-
-  /**
-   * Used to simulate egos (not peerid)
-   */
-  const struct GNUNET_CRYPTO_EcdsaPrivateKey *id_key;
-
-  const struct GNUNET_CRYPTO_EcdsaPublicKey *id_pub_key;
-
-  /**
-   * Used to store either GNUNET_PSYC_Master or GNUNET_PSYC_Slave handle
-   */
-  void *psyc;
-
-  struct GNUNET_PSYC_Channel *channel;
-
-  const struct GNUNET_CRYPTO_EddsaPrivateKey *channel_key;
-
-  struct GNUNET_CRYPTO_EddsaPublicKey *channel_pub_key;
-
-  int test_ok;
-};
-
-static struct GNUNET_SCHEDULER_Task *timeout_task_id;
-
-static int result = GNUNET_SYSERR;
-
-static struct GNUNET_TESTBED_Operation *op[MAX_TESTBED_OPS];
-
-static int op_cnt = 0;
-
diff --git a/src/psyc/test_psyc.c b/src/psyc/test_psyc.c
deleted file mode 100644 (file)
index b6e27bb..0000000
+++ /dev/null
@@ -1,1018 +0,0 @@
-/*
- * This file is part of GNUnet
- * Copyright (C) 2013 GNUnet e.V.
- *
- * GNUnet is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNUnet is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
- */
-
-/**
- * @file psyc/test_psyc.c
- * @brief Tests for the PSYC API.
- * @author Gabor X Toth
- * @author Christian Grothoff
- */
-
-#include <inttypes.h>
-
-#include "platform.h"
-#include "gnunet_crypto_lib.h"
-#include "gnunet_common.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_testing_lib.h"
-#include "gnunet_psyc_util_lib.h"
-#include "gnunet_psyc_service.h"
-
-#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 30)
-
-/**
- * Return value from 'main'.
- */
-static int res;
-
-static const struct GNUNET_CONFIGURATION_Handle *cfg;
-
-static struct GNUNET_PeerIdentity this_peer;
-
-/**
- * Handle for task for timeout termination.
- */
-static struct GNUNET_SCHEDULER_Task * end_badly_task;
-
-static struct GNUNET_PSYC_Master *mst;
-static struct GNUNET_PSYC_Slave *slv;
-
-static struct GNUNET_PSYC_Channel *mst_chn, *slv_chn;
-
-static struct GNUNET_CRYPTO_EddsaPrivateKey *channel_key;
-static struct GNUNET_CRYPTO_EcdsaPrivateKey *slave_key;
-
-static struct GNUNET_CRYPTO_EddsaPublicKey channel_pub_key;
-static struct GNUNET_CRYPTO_EcdsaPublicKey slave_pub_key;
-
-struct TransmitClosure
-{
-  struct GNUNET_PSYC_MasterTransmitHandle *mst_tmit;
-  struct GNUNET_PSYC_SlaveTransmitHandle *slv_tmit;
-  struct GNUNET_PSYC_Environment *env;
-  struct GNUNET_PSYC_Modifier *mod;
-  char *data[16];
-  const char *mod_value;
-  size_t mod_value_size;
-  uint8_t data_delay[16];
-  uint8_t data_count;
-  uint8_t paused;
-  uint8_t n;
-};
-
-static struct TransmitClosure *tmit;
-
-static uint8_t join_req_count, end_count;
-
-enum
-{
-  TEST_NONE                         = 0,
-  TEST_MASTER_START                 = 1,
-  TEST_SLAVE_JOIN_REJECT            = 2,
-  TEST_SLAVE_JOIN_ACCEPT            = 3,
-  TEST_SLAVE_ADD                    = 4,
-  TEST_SLAVE_REMOVE                 = 5,
-  TEST_SLAVE_TRANSMIT               = 6,
-  TEST_MASTER_TRANSMIT              = 7,
-  TEST_MASTER_HISTORY_REPLAY_LATEST = 8,
-  TEST_SLAVE_HISTORY_REPLAY_LATEST  = 9,
-  TEST_MASTER_HISTORY_REPLAY       = 10,
-  TEST_SLAVE_HISTORY_REPLAY        = 11,
-  TEST_MASTER_STATE_GET            = 12,
-  TEST_SLAVE_STATE_GET             = 13,
-  TEST_MASTER_STATE_GET_PREFIX     = 14,
-  TEST_SLAVE_STATE_GET_PREFIX      = 15,
-} test;
-
-
-static void
-master_transmit ();
-
-static void
-master_history_replay_latest ();
-
-
-static void
-master_stopped (void *cls)
-{
-  if (NULL != tmit)
-  {
-    GNUNET_PSYC_env_destroy (tmit->env);
-    GNUNET_free (tmit);
-    tmit = NULL;
-  }
-  GNUNET_SCHEDULER_shutdown ();
-}
-
-
-static void
-slave_parted (void *cls)
-{
-  if (NULL != mst)
-  {
-    GNUNET_PSYC_master_stop (mst, GNUNET_NO, &master_stopped, NULL);
-    mst = NULL;
-  }
-  else
-    master_stopped (NULL);
-}
-
-
-/**
- * Clean up all resources used.
- */
-static void
-cleanup ()
-{
-  if (NULL != slv)
-  {
-    GNUNET_PSYC_slave_part (slv, GNUNET_NO, &slave_parted, NULL);
-    slv = NULL;
-  }
-  else
-    slave_parted (NULL);
-}
-
-
-/**
- * Terminate the test case (failure).
- *
- * @param cls NULL
- */
-static void
-end_badly (void *cls)
-{
-  res = 1;
-  cleanup ();
-  GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Test FAILED.\n");
-}
-
-
-/**
- * Terminate the test case (success).
- *
- * @param cls NULL
- */
-static void
-end_normally (void *cls)
-{
-  res = 0;
-  cleanup ();
-  GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Test PASSED.\n");
-}
-
-
-/**
- * Finish the test case (successfully).
- */
-static void
-end ()
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Ending tests.\n");
-
-  if (end_badly_task != NULL)
-  {
-    GNUNET_SCHEDULER_cancel (end_badly_task);
-    end_badly_task = NULL;
-  }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MILLISECONDS,
-                               &end_normally, NULL);
-}
-
-
-static void
-master_message_cb (void *cls, const struct GNUNET_PSYC_MessageHeader *msg)
-{
-  GNUNET_assert (NULL != msg);
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%d: Master got PSYC message fragment of size %u "
-              "belonging to message ID %" PRIu64 " with flags %x\n",
-              test, ntohs (msg->header.size),
-              GNUNET_ntohll (msg->message_id), ntohl (msg->flags));
-  // FIXME
-}
-
-
-static void
-master_message_part_cb (void *cls, const struct GNUNET_PSYC_MessageHeader *msg,
-                        const struct GNUNET_MessageHeader *pmsg)
-{
-  GNUNET_assert (NULL != msg && NULL != pmsg);
-
-  uint64_t message_id = GNUNET_ntohll (msg->message_id);
-  uint32_t flags = ntohl (msg->flags);
-
-  uint16_t type = ntohs (pmsg->type);
-  uint16_t size = ntohs (pmsg->size);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%d: Master got message part of type %u and size %u "
-              "belonging to message ID %" PRIu64 " with flags %x\n",
-              test, type, size, message_id, flags);
-
-  switch (test)
-  {
-  case TEST_SLAVE_TRANSMIT:
-    if (GNUNET_PSYC_MESSAGE_REQUEST != flags)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                  "Test #%d: Unexpected request flags: %x" PRIu32 "\n",
-                  test, flags);
-      GNUNET_assert (0);
-      return;
-    }
-    // FIXME: check rest of message
-
-    if (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_END == type)
-      master_transmit ();
-    break;
-
-  case TEST_MASTER_TRANSMIT:
-    if (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_END == type && 2 == ++end_count)
-      master_history_replay_latest ();
-    break;
-
-  case TEST_MASTER_HISTORY_REPLAY:
-  case TEST_MASTER_HISTORY_REPLAY_LATEST:
-    if (GNUNET_PSYC_MESSAGE_HISTORIC != flags)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                  "Test #%d: Unexpected flags for historic message: %x" PRIu32 "\n",
-                  test, flags);
-      GNUNET_assert (0);
-      return;
-    }
-    break;
-
-  default:
-    GNUNET_assert (0);
-  }
-}
-
-
-static void
-slave_message_cb (void *cls, const struct GNUNET_PSYC_MessageHeader *msg)
-{
-  GNUNET_assert (NULL != msg);
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%d: Slave got PSYC message fragment of size %u "
-              "belonging to message ID %" PRIu64 " with flags %x\n",
-              test, ntohs (msg->header.size),
-              GNUNET_ntohll (msg->message_id), ntohl (msg->flags));
-  // FIXME
-}
-
-
-static void
-slave_message_part_cb (void *cls,
-                       const struct GNUNET_PSYC_MessageHeader *msg,
-                       const struct GNUNET_MessageHeader *pmsg)
-{
-  GNUNET_assert (NULL != msg && NULL != pmsg);
-
-  uint64_t message_id = GNUNET_ntohll (msg->message_id);
-  uint32_t flags = ntohl (msg->flags);
-
-  uint16_t type = ntohs (pmsg->type);
-  uint16_t size = ntohs (pmsg->size);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%d: Slave got message part of type %u and size %u "
-              "belonging to message ID %" PRIu64 " with flags %x\n",
-              test, type, size, message_id, flags);
-
-  switch (test)
-  {
-  case TEST_MASTER_TRANSMIT:
-    if (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_END == type && 2 == ++end_count)
-      master_history_replay_latest ();
-    break;
-
-  case TEST_SLAVE_HISTORY_REPLAY:
-  case TEST_SLAVE_HISTORY_REPLAY_LATEST:
-    if (GNUNET_PSYC_MESSAGE_HISTORIC != flags)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                  "Test #%d: Unexpected flags for historic message: %x" PRIu32 "\n",
-                  test, flags);
-      GNUNET_assert (0);
-      return;
-    }
-    break;
-
-  default:
-    GNUNET_assert (0);
-  }
-}
-
-
-static void
-state_get_var (void *cls, const struct GNUNET_MessageHeader *mod,
-               const char *name, const void *value,
-               uint32_t value_size, uint32_t full_value_size)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Got state var: %s\n%.*s\n",
-              name,
-              (int) value_size,
-              (const char *) value);
-}
-
-
-/*** Slave state_get_prefix() ***/
-
-static void
-slave_state_get_prefix_result (void *cls, int64_t result,
-                               const void *err_msg, uint16_t err_msg_size)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%d: slave_state_get_prefix:\t%" PRId64 " (%.*s)\n",
-              test, result,
-              (int) err_msg_size,
-              (const char *) err_msg);
-  // FIXME: GNUNET_assert (2 == result);
-  end ();
-}
-
-
-static void
-slave_state_get_prefix ()
-{
-  test = TEST_SLAVE_STATE_GET_PREFIX;
-  GNUNET_PSYC_channel_state_get_prefix (slv_chn, "_foo", state_get_var,
-                                        slave_state_get_prefix_result, NULL);
-}
-
-
-/*** Master state_get_prefix() ***/
-
-
-static void
-master_state_get_prefix_result (void *cls, int64_t result,
-                                const void *err_msg, uint16_t err_msg_size)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%d: master_state_get_prefix:\t%" PRId64 " (%s)\n",
-              test, result, (char *) err_msg);
-  // FIXME: GNUNET_assert (2 == result);
-  slave_state_get_prefix ();
-}
-
-
-static void
-master_state_get_prefix ()
-{
-  test = TEST_MASTER_STATE_GET_PREFIX;
-  GNUNET_PSYC_channel_state_get_prefix (mst_chn, "_foo", state_get_var,
-                                        master_state_get_prefix_result, NULL);
-}
-
-
-/*** Slave state_get() ***/
-
-
-static void
-slave_state_get_result (void *cls, int64_t result,
-                        const void *err_msg, uint16_t err_msg_size)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%d: slave_state_get:\t%" PRId64 " (%.*s)\n",
-              test, result, err_msg_size, (char *) err_msg);
-  // FIXME: GNUNET_assert (2 == result);
-  master_state_get_prefix ();
-}
-
-
-static void
-slave_state_get ()
-{
-  test = TEST_SLAVE_STATE_GET;
-  GNUNET_PSYC_channel_state_get (slv_chn, "_foo_bar_baz", state_get_var,
-                                 slave_state_get_result, NULL);
-}
-
-
-/*** Master state_get() ***/
-
-
-static void
-master_state_get_result (void *cls, int64_t result,
-                         const void *err_msg, uint16_t err_msg_size)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%d: master_state_get:\t%" PRId64 " (%.*s)\n",
-              test, result, err_msg_size, (char *) err_msg);
-  // FIXME: GNUNET_assert (1 == result);
-  slave_state_get ();
-}
-
-
-static void
-master_state_get ()
-{
-  test = TEST_MASTER_STATE_GET;
-  GNUNET_PSYC_channel_state_get (mst_chn, "_foo_bar_baz", state_get_var,
-                                 master_state_get_result, NULL);
-}
-
-
-/*** Slave history_replay() ***/
-
-static void
-slave_history_replay_result (void *cls, int64_t result,
-                             const void *err_msg, uint16_t err_msg_size)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%d: slave_history_replay:\t%" PRId64 " (%.*s)\n",
-              test, result,
-              (int) err_msg_size,
-              (const char *) err_msg);
-  GNUNET_assert (9 == result);
-
-  master_state_get ();
-}
-
-
-static void
-slave_history_replay ()
-{
-  test = TEST_SLAVE_HISTORY_REPLAY;
-  GNUNET_PSYC_channel_history_replay (slv_chn, 1, 1, "",
-                                      GNUNET_PSYC_HISTORY_REPLAY_LOCAL,
-                                      slave_message_cb,
-                                      slave_message_part_cb,
-                                      slave_history_replay_result, NULL);
-}
-
-
-/*** Master history_replay() ***/
-
-
-static void
-master_history_replay_result (void *cls, int64_t result,
-                              const void *err_msg, uint16_t err_msg_size)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%d: master_history_replay:\t%" PRId64 " (%.*s)\n",
-              test, result,
-              (int) err_msg_size,
-              (const char *) err_msg);
-  GNUNET_assert (9 == result);
-
-  slave_history_replay ();
-}
-
-
-static void
-master_history_replay ()
-{
-  test = TEST_MASTER_HISTORY_REPLAY;
-  GNUNET_PSYC_channel_history_replay (mst_chn, 1, 1, "",
-                                      GNUNET_PSYC_HISTORY_REPLAY_LOCAL,
-                                      master_message_cb,
-                                      master_message_part_cb,
-                                      master_history_replay_result, NULL);
-}
-
-
-/*** Slave history_replay_latest() ***/
-
-
-static void
-slave_history_replay_latest_result (void *cls, int64_t result,
-                                    const void *err_msg, uint16_t err_msg_size)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%d: slave_history_replay_latest:\t%" PRId64 " (%.*s)\n",
-              test, result,
-              (int) err_msg_size,
-              (const char *) err_msg);
-  GNUNET_assert (9 == result);
-
-  master_history_replay ();
-}
-
-
-static void
-slave_history_replay_latest ()
-{
-  test = TEST_SLAVE_HISTORY_REPLAY_LATEST;
-  GNUNET_PSYC_channel_history_replay_latest (slv_chn, 1, "",
-                                             GNUNET_PSYC_HISTORY_REPLAY_LOCAL,
-                                             &slave_message_cb,
-                                             &slave_message_part_cb,
-                                             &slave_history_replay_latest_result,
-                                             NULL);
-}
-
-
-/*** Master history_replay_latest() ***/
-
-
-static void
-master_history_replay_latest_result (void *cls, int64_t result,
-                                     const void *err_msg, uint16_t err_msg_size)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%d: master_history_replay_latest:\t%" PRId64 " (%.*s)\n",
-              test, result, err_msg_size, (char *) err_msg);
-  GNUNET_assert (9 == result);
-
-  slave_history_replay_latest ();
-}
-
-
-static void
-master_history_replay_latest ()
-{
-  test = TEST_MASTER_HISTORY_REPLAY_LATEST;
-  GNUNET_PSYC_channel_history_replay_latest (mst_chn, 1, "",
-                                             GNUNET_PSYC_HISTORY_REPLAY_LOCAL,
-                                             &master_message_cb,
-                                             &master_message_part_cb,
-                                             &master_history_replay_latest_result,
-                                             NULL);
-}
-
-
-static void
-transmit_resume (void *cls)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Test #%d: Transmission resumed.\n", test);
-  struct TransmitClosure *tmit = cls;
-  if (NULL != tmit->mst_tmit)
-    GNUNET_PSYC_master_transmit_resume (tmit->mst_tmit);
-  else
-    GNUNET_PSYC_slave_transmit_resume (tmit->slv_tmit);
-}
-
-
-static int
-tmit_notify_data (void *cls, uint16_t *data_size, void *data)
-{
-  struct TransmitClosure *tmit = cls;
-  if (0 == tmit->data_count)
-  {
-    *data_size = 0;
-    return GNUNET_YES;
-  }
-
-  uint16_t size = strlen (tmit->data[tmit->n]);
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Test #%d: Transmit notify data: %u bytes available, "
-              "processing fragment %u/%u (size %u).\n",
-              test, *data_size, tmit->n + 1, tmit->data_count, size);
-  if (*data_size < size)
-  {
-    *data_size = 0;
-    GNUNET_assert (0);
-    return GNUNET_SYSERR;
-  }
-
-  if (GNUNET_YES != tmit->paused && 0 < tmit->data_delay[tmit->n])
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "Test #%d: Transmission paused.\n", test);
-    tmit->paused = GNUNET_YES;
-    GNUNET_SCHEDULER_add_delayed (
-      GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS,
-                                     tmit->data_delay[tmit->n]),
-      &transmit_resume, tmit);
-    *data_size = 0;
-    return GNUNET_NO;
-  }
-  tmit->paused = GNUNET_NO;
-
-  *data_size = size;
-  GNUNET_memcpy (data, tmit->data[tmit->n], size);
-
-  return ++tmit->n < tmit->data_count ? GNUNET_NO : GNUNET_YES;
-}
-
-
-static int
-tmit_notify_mod (void *cls, uint16_t *data_size, void *data, uint8_t *oper,
-                 uint32_t *full_value_size)
-{
-  struct TransmitClosure *tmit = cls;
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Test #%d: Transmit notify modifier: %u bytes available, "
-              "%u modifiers left to process.\n",
-              test, *data_size, (unsigned int) GNUNET_PSYC_env_get_count (tmit->env));
-
-  uint16_t name_size = 0;
-  size_t value_size = 0;
-  const char *value = NULL;
-
-  if (NULL != oper && NULL != tmit->mod)
-  { /* New modifier */
-    tmit->mod = tmit->mod->next;
-    if (NULL == tmit->mod)
-    { /* No more modifiers, continue with data */
-      *data_size = 0;
-      return GNUNET_YES;
-    }
-
-    GNUNET_assert (tmit->mod->value_size < UINT32_MAX);
-    *full_value_size = tmit->mod->value_size;
-    *oper = tmit->mod->oper;
-    name_size = strlen (tmit->mod->name);
-
-    if (name_size + 1 + tmit->mod->value_size <= *data_size)
-    {
-      *data_size = name_size + 1 + tmit->mod->value_size;
-    }
-    else
-    {
-      tmit->mod_value_size = tmit->mod->value_size;
-      value_size = *data_size - name_size - 1;
-      tmit->mod_value_size -= value_size;
-      tmit->mod_value = tmit->mod->value + value_size;
-    }
-
-    GNUNET_memcpy (data, tmit->mod->name, name_size);
-    ((char *)data)[name_size] = '\0';
-    GNUNET_memcpy ((char *)data + name_size + 1, tmit->mod->value, value_size);
-  }
-  else if (NULL != tmit->mod_value && 0 < tmit->mod_value_size)
-  { /* Modifier continuation */
-    value = tmit->mod_value;
-    if (tmit->mod_value_size <= *data_size)
-    {
-      value_size = tmit->mod_value_size;
-      tmit->mod_value = NULL;
-    }
-    else
-    {
-      value_size = *data_size;
-      tmit->mod_value += value_size;
-    }
-    tmit->mod_value_size -= value_size;
-
-    if (*data_size < value_size)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                  "value larger than buffer: %u < %zu\n",
-                  *data_size, value_size);
-      *data_size = 0;
-      return GNUNET_NO;
-    }
-
-    *data_size = value_size;
-    GNUNET_memcpy (data, value, value_size);
-  }
-
-  return GNUNET_NO;
-}
-
-
-static void
-slave_join ();
-
-
-static void
-slave_transmit ()
-{
-  test = TEST_SLAVE_TRANSMIT;
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%d: Slave sending request to master.\n", test);
-
-  tmit = GNUNET_new (struct TransmitClosure);
-  tmit->env = GNUNET_PSYC_env_create ();
-  GNUNET_PSYC_env_add (tmit->env, GNUNET_PSYC_OP_ASSIGN,
-                              "_abc", "abc def", 7);
-  GNUNET_PSYC_env_add (tmit->env, GNUNET_PSYC_OP_ASSIGN,
-                              "_abc_def", "abc def ghi", 11);
-  tmit->mod = GNUNET_PSYC_env_head (tmit->env);
-  tmit->n = 0;
-  tmit->data[0] = "slave test";
-  tmit->data_count = 1;
-  tmit->slv_tmit
-    = GNUNET_PSYC_slave_transmit (slv, "_request_test", &tmit_notify_mod,
-                                  &tmit_notify_data, tmit,
-                                  GNUNET_PSYC_SLAVE_TRANSMIT_NONE);
-}
-
-
-static void
-slave_remove_cb (void *cls, int64_t result,
-                 const void *err_msg, uint16_t err_msg_size)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%d: slave_remove:\t%" PRId64 " (%.*s)\n",
-              test, result, err_msg_size, (char *) err_msg);
-
-  slave_transmit ();
-}
-
-
-static void
-slave_remove ()
-{
-  test = TEST_SLAVE_REMOVE;
-  struct GNUNET_PSYC_Channel *chn = GNUNET_PSYC_master_get_channel (mst);
-  GNUNET_PSYC_channel_slave_remove (chn, &slave_pub_key, 2,
-                                    &slave_remove_cb, chn);
-}
-
-
-static void
-slave_add_cb (void *cls, int64_t result,
-              const void *err_msg, uint16_t err_msg_size)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%d: slave_add:\t%" PRId64 " (%.*s)\n",
-              test, result, err_msg_size, (char *) err_msg);
-  slave_remove ();
-}
-
-
-static void
-slave_add ()
-{
-  test = TEST_SLAVE_ADD;
-  struct GNUNET_PSYC_Channel *chn = GNUNET_PSYC_master_get_channel (mst);
-  GNUNET_PSYC_channel_slave_add (chn, &slave_pub_key, 2, 2, &slave_add_cb, chn);
-}
-
-
-static void
-schedule_second_slave_join (void *cls)
-{
-  slave_join (TEST_SLAVE_JOIN_ACCEPT);
-}
-
-
-static void
-first_slave_parted (void *cls)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "First slave parted.\n");
-  GNUNET_SCHEDULER_add_now (&schedule_second_slave_join, NULL);
-}
-
-
-static void
-schedule_first_slave_part (void *cls)
-{
-  GNUNET_PSYC_slave_part (slv, GNUNET_NO, &first_slave_parted, NULL);
-}
-
-
-static void
-join_decision_cb (void *cls,
-                  const struct GNUNET_PSYC_JoinDecisionMessage *dcsn,
-                  int is_admitted,
-                  const struct GNUNET_PSYC_Message *join_msg)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%d: Slave got join decision: %d\n", test, is_admitted);
-
-  switch (test)
-  {
-  case TEST_SLAVE_JOIN_REJECT:
-    GNUNET_assert (0 == is_admitted);
-    GNUNET_assert (1 == join_req_count);
-    GNUNET_SCHEDULER_add_now (&schedule_first_slave_part, NULL);
-    break;
-
-  case TEST_SLAVE_JOIN_ACCEPT:
-    GNUNET_assert (1 == is_admitted);
-    GNUNET_assert (2 == join_req_count);
-    slave_add ();
-    break;
-
-  default:
-    GNUNET_break (0);
-  }
-}
-
-
-static void
-join_request_cb (void *cls,
-                 const struct GNUNET_PSYC_JoinRequestMessage *req,
-                 const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_key,
-                 const struct GNUNET_PSYC_Message *join_msg,
-                 struct GNUNET_PSYC_JoinHandle *jh)
-{
-  struct GNUNET_HashCode slave_key_hash;
-  GNUNET_CRYPTO_hash (slave_key, sizeof (*slave_key), &slave_key_hash);
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%d: Got join request #%u from %s.\n",
-              test, join_req_count, GNUNET_h2s (&slave_key_hash));
-
-  /* Reject first request */
-  int is_admitted = (0 < join_req_count++) ? GNUNET_YES : GNUNET_NO;
-  GNUNET_PSYC_join_decision (jh, is_admitted, 0, NULL, NULL);
-}
-
-
-static void
-slave_connect_cb (void *cls, int result, uint64_t max_message_id)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%d: Slave connected: %d, max_message_id: %" PRIu64 "\n",
-              test, result, max_message_id);
-  GNUNET_assert (TEST_SLAVE_JOIN_REJECT == test || TEST_SLAVE_JOIN_ACCEPT == test);
-  GNUNET_assert (GNUNET_OK == result || GNUNET_NO == result);
-}
-
-
-static void
-slave_join (int t)
-{
-  test = t;
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%d: Joining slave.\n", t);
-
-  struct GNUNET_PeerIdentity origin = this_peer;
-  struct GNUNET_PSYC_Environment *env = GNUNET_PSYC_env_create ();
-  GNUNET_PSYC_env_add (env, GNUNET_PSYC_OP_ASSIGN,
-                              "_foo", "bar baz", 7);
-  GNUNET_PSYC_env_add (env, GNUNET_PSYC_OP_ASSIGN,
-                              "_foo_bar", "foo bar baz", 11);
-  struct GNUNET_PSYC_Message *
-    join_msg = GNUNET_PSYC_message_create ("_request_join", env, "some data", 9);
-
-  slv = GNUNET_PSYC_slave_join (cfg,
-                                &channel_pub_key,
-                                slave_key,
-                                GNUNET_PSYC_SLAVE_JOIN_NONE,
-                                &origin,
-                                0,
-                                NULL,
-                                &slave_message_cb,
-                                &slave_message_part_cb,
-                                &slave_connect_cb,
-                                &join_decision_cb,
-                                NULL,
-                                join_msg);
-  GNUNET_free (join_msg);
-  slv_chn = GNUNET_PSYC_slave_get_channel (slv);
-  GNUNET_PSYC_env_destroy (env);
-}
-
-
-static void
-master_transmit ()
-{
-  test = TEST_MASTER_TRANSMIT;
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%d: Master sending message to all.\n", test);
-  end_count = 0;
-
-  uint32_t i, j;
-
-  char *name_max = "_test_max";
-  uint8_t name_max_size = sizeof ("_test_max");
-  char *val_max = GNUNET_malloc (GNUNET_PSYC_MODIFIER_MAX_PAYLOAD);
-  for (i = 0; i < GNUNET_PSYC_MODIFIER_MAX_PAYLOAD; i++)
-    val_max[i] = (0 == i % 10000) ? '0' + i / 10000 : '.';
-
-  char *name_cont = "_test_cont";
-  uint8_t name_cont_size = sizeof ("_test_cont");
-  char *val_cont = GNUNET_malloc (GNUNET_PSYC_MODIFIER_MAX_PAYLOAD
-                                  + GNUNET_PSYC_MOD_CONT_MAX_PAYLOAD);
-  for (i = 0; i < GNUNET_PSYC_MODIFIER_MAX_PAYLOAD - name_cont_size; i++)
-    val_cont[i] = (0 == i % 10000) ? '0' + i / 10000 : ':';
-  for (j = 0; j < GNUNET_PSYC_MOD_CONT_MAX_PAYLOAD; j++, i++)
-    val_cont[i] = (0 == j % 10000) ? '0' + j / 10000 : '!';
-
-  tmit = GNUNET_new (struct TransmitClosure);
-  tmit->env = GNUNET_PSYC_env_create ();
-  GNUNET_PSYC_env_add (tmit->env, GNUNET_PSYC_OP_ASSIGN,
-                              "_foo", "bar baz", 7);
-  GNUNET_PSYC_env_add (tmit->env, GNUNET_PSYC_OP_ASSIGN,
-                              name_max, val_max,
-                              GNUNET_PSYC_MODIFIER_MAX_PAYLOAD
-                              - name_max_size);
-  GNUNET_PSYC_env_add (tmit->env, GNUNET_PSYC_OP_ASSIGN,
-                              "_foo_bar", "foo bar baz", 11);
-  GNUNET_PSYC_env_add (tmit->env, GNUNET_PSYC_OP_ASSIGN,
-                              name_cont, val_cont,
-                              GNUNET_PSYC_MODIFIER_MAX_PAYLOAD - name_cont_size
-                              + GNUNET_PSYC_MOD_CONT_MAX_PAYLOAD);
-  tmit->mod = GNUNET_PSYC_env_head (tmit->env);
-  tmit->data[0] = "foo";
-  tmit->data[1] =  GNUNET_malloc (GNUNET_PSYC_DATA_MAX_PAYLOAD + 1);
-  for (i = 0; i < GNUNET_PSYC_DATA_MAX_PAYLOAD; i++)
-    tmit->data[1][i] = (0 == i % 10000) ? '0' + i / 10000 : '_';
-  tmit->data[2] = "foo bar";
-  tmit->data[3] = "foo bar baz";
-  tmit->data_delay[1] = 3;
-  tmit->data_count = 4;
-  tmit->mst_tmit
-    = GNUNET_PSYC_master_transmit (mst, "_notice_test", &tmit_notify_mod,
-                                   &tmit_notify_data, tmit,
-                                   GNUNET_PSYC_MASTER_TRANSMIT_INC_GROUP_GEN);
-}
-
-
-static void
-master_start_cb (void *cls, int result, uint64_t max_message_id)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Test #%d: Master started: %d, max_message_id: %" PRIu64 "\n",
-              test, result, max_message_id);
-  GNUNET_assert (TEST_MASTER_START == test);
-  GNUNET_assert (GNUNET_OK == result || GNUNET_NO == result);
-  slave_join (TEST_SLAVE_JOIN_REJECT);
-}
-
-
-static void
-master_start ()
-{
-  test = TEST_MASTER_START;
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Test #%d: Starting master.\n", test);
-  mst = GNUNET_PSYC_master_start (cfg, channel_key, GNUNET_PSYC_CHANNEL_PRIVATE,
-                                  &master_start_cb, &join_request_cb,
-                                  &master_message_cb, &master_message_part_cb,
-                                  NULL);
-  mst_chn = GNUNET_PSYC_master_get_channel (mst);
-}
-
-
-static void
-schedule_master_start (void *cls)
-{
-  master_start ();
-}
-
-
-/**
- * Main function of the test, run from scheduler.
- *
- * @param cls NULL
- * @param cfg configuration we use (also to connect to PSYC service)
- * @param peer handle to access more of the peer (not used)
- */
-static void
-#if DEBUG_TEST_PSYC
-run (void *cls, char *const *args, const char *cfgfile,
-     const struct GNUNET_CONFIGURATION_Handle *c)
-#else
-run (void *cls,
-     const struct GNUNET_CONFIGURATION_Handle *c,
-     struct GNUNET_TESTING_Peer *peer)
-#endif
-{
-  cfg = c;
-  end_badly_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL);
-
-  GNUNET_CRYPTO_get_peer_identity (cfg, &this_peer);
-
-  channel_key = GNUNET_CRYPTO_eddsa_key_create ();
-  slave_key = GNUNET_CRYPTO_ecdsa_key_create ();
-
-  GNUNET_CRYPTO_eddsa_key_get_public (channel_key, &channel_pub_key);
-  GNUNET_CRYPTO_ecdsa_key_get_public (slave_key, &slave_pub_key);
-
-#if DEBUG_TEST_PSYC
-  master_start ();
-#else
-  /* Allow some time for the services to initialize. */
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
-                                &schedule_master_start, NULL);
-#endif
-}
-
-
-int
-main (int argc, char *argv[])
-{
-  res = 1;
-#if DEBUG_TEST_PSYC
-  const struct GNUNET_GETOPT_CommandLineOption opts[] = {
-    GNUNET_GETOPT_OPTION_END
-  };
-  if (GNUNET_OK != GNUNET_PROGRAM_run (argc, argv, "test-psyc",
-                                       "test-psyc [options]",
-                                       opts, &run, NULL))
-    return 1;
-#else
-  if (0 != GNUNET_TESTING_peer_run ("test-psyc", "test_psyc.conf", &run, NULL))
-    return 1;
-#endif
-  return res;
-}
-
-/* end of test_psyc.c */
diff --git a/src/psyc/test_psyc.conf b/src/psyc/test_psyc.conf
deleted file mode 100644 (file)
index 6ff031f..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-@INLINE@ ../../contrib/conf/gnunet/no_forcestart.conf
-
-[testbed]
-HOSTNAME = localhost
-OVERLAY_TOPOLOGY = STAR
-
-[peerinfo]
-# Option to disable all disk IO; only useful for testbed runs
-# (large-scale experiments); disables persistence of HELLOs!
-NO_IO = YES
-
-[cadet]
-ID_ANNOUNCE_TIME = 5 s
-
-[nat]
-ENABLE_UPNP = NO
-
-[psyc]
-IMMEDIATE_START = YES
-START_ON_DEMAND = YES
-
-[multicast]
-IMMEDIATE_START = YES
-START_ON_DEMAND = YES
-
-[psycstore]
-IMMEDIATE_START = YES
-START_ON_DEMAND = YES
diff --git a/src/psyc/test_psyc2.c b/src/psyc/test_psyc2.c
deleted file mode 100644 (file)
index c6e7237..0000000
+++ /dev/null
@@ -1,284 +0,0 @@
-/*
- * This file is part of GNUnet
- * Copyright (C) 2013 GNUnet e.V.
- *
- * GNUnet is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNUnet is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
- */
-
-/**
- * @file psyc/test_psyc2.c
- * @brief Testbed test for the PSYC API.
- * @author xrs
- */
-
-#include "platform.h"
-#include "gnunet_crypto_lib.h"
-#include "gnunet_common.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_testbed_service.h"
-#include "gnunet_psyc_util_lib.h"
-#include "gnunet_psyc_service.h"
-
-#define PEERS_REQUESTED 2
-
-static int result;
-
-static struct GNUNET_SCHEDULER_Task *timeout_tid;
-static struct pctx **pctx;
-
-static struct GNUNET_CRYPTO_EddsaPrivateKey *channel_key;
-static struct GNUNET_CRYPTO_EddsaPublicKey channel_pub_key;
-
-static struct GNUNET_CRYPTO_EcdsaPrivateKey *slave_key;
-static struct GNUNET_CRYPTO_EcdsaPublicKey slave_pub_key;
-
-/**
- * Task To perform tests
- */
-static struct GNUNET_SCHEDULER_Task *test_task;
-
-/**
- * Peer id couter
- */
-static unsigned int pids;
-
-struct pctx
-{
-  int idx;
-  struct GNUNET_TESTBED_Peer *peer;
-  const struct GNUNET_PeerIdentity *id;
-
-  struct GNUNET_TESTBED_Operation *op; 
-
-  /**
-   * psyc service handle
-   */
-  void *psyc;
-  struct GNUNET_PSYC_Master *mst;
-  struct GNUNET_PSYC_Slave *slv;
-
-  /**
-   * result for test on peer
-   */
-  int test_ok;
-};
-
-static void
-shutdown_task (void *cls)
-{
-  if (NULL != pctx)
-  {
-    if (NULL != pctx[0]->mst)
-      GNUNET_PSYC_master_stop (pctx[0]->mst, GNUNET_NO, NULL, NULL);  
-
-    for (int i=0; i < PEERS_REQUESTED; i++)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Operation done.\n");
-      GNUNET_TESTBED_operation_done (pctx[i]->op);
-      GNUNET_free_non_null (pctx[i]);
-    }
-    GNUNET_free (pctx);
-  }
-
-  if (NULL != timeout_tid)
-    GNUNET_SCHEDULER_cancel (timeout_tid);
-}
-
-static void
-timeout_task (void *cls)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Timeout!\n");
-  result = GNUNET_SYSERR;
-  GNUNET_SCHEDULER_shutdown ();
-}
-
-static void 
-start_test (void *cls)
-{
-}
-
-static void
-pinfo_cb (void *cls,
-          struct GNUNET_TESTBED_Operation *operation,
-          const struct GNUNET_TESTBED_PeerInformation *pinfo,
-          const char *emsg)
-{
-  struct pctx *pc = (struct pctx*) cls;
-
-  pc->id = pinfo->result.id;
-
-  pids++;
-  if (pids < (PEERS_REQUESTED - 1))
-    return;
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Got all IDs, starting test\n");
-  test_task = GNUNET_SCHEDULER_add_now (&start_test, NULL);
-}
-
-static void
-mst_start_cb () 
-{
-}
-
-static void 
-join_request_cb ()
-{
-}
-
-static void
-mst_message_cb ()
-{
-}
-
-static void
-mst_message_part_cb ()
-{
-}
-
-static void 
-slv_message_cb ()
-{
-}
-
-static void 
-slv_message_part_cb ()
-{
-}
-
-static void
-slv_connect_cb () 
-{
-}
-
-static void
-join_decision_cb ()
-{
-}
-
-static void *
-psyc_ca (void *cls,
-         const struct GNUNET_CONFIGURATION_Handle *cfg)
-{
-  struct GNUNET_PSYC_Message *join_msg = NULL;
-  struct pctx *pc = (struct pctx *) cls;
-
-  if (0 == pc->idx)
-  {
-    pc->mst = GNUNET_PSYC_master_start (cfg, channel_key, 
-                                        GNUNET_PSYC_CHANNEL_PRIVATE,
-                                        &mst_start_cb, &join_request_cb,
-                                        &mst_message_cb, &mst_message_part_cb,
-                                        NULL);
-    return pc->mst;
-  }
-
-  pc->slv = GNUNET_PSYC_slave_join (cfg, &channel_pub_key, slave_key,
-                                    GNUNET_PSYC_SLAVE_JOIN_NONE,
-                                    &pid, 0, NULL, &slv_message_cb, 
-                                    &slv_message_part_cb,
-                                    &slv_connect_cb, &join_decision_cb, 
-                                    NULL, join_msg);
-  return pc->slv;
-} 
-
-static void
-psyc_da (void *cls,
-         void *op_result)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Disconnected from service.\n");
-} 
-
-static void
-service_connect (void *cls,
-                 struct GNUNET_TESTBED_Operation *op,
-                 void *ca_result,
-                 const char *emsg)
-{
-  struct pctx *pc = (struct pctx *) cls;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Connected to service\n");
-
-  GNUNET_assert (NULL != ca_result);
-
-  // FIXME: we need a simple service handle to connect to the service, then 
-  // get peer information and AFTER that make PSYC ops. Compare to CADET. 
-  pc->psyc = ca_result;
-
-  GNUNET_TESTBED_peer_get_information (pc->peer, 
-                                       GNUNET_TESTBED_PIT_IDENTITY, 
-                                       pinfo_cb, pc);
-}
-
-static void
-testbed_master (void *cls,
-     struct GNUNET_TESTBED_RunHandle *h,
-     unsigned int num_peers,
-     struct GNUNET_TESTBED_Peer **p,
-     unsigned int links_succeeded,
-     unsigned int links_failed)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Connected to testbed_master()\n");
-
-  // Create ctx for peers
-  pctx = GNUNET_new_array (PEERS_REQUESTED, struct pctx*);
-  for (int i = 0; i<PEERS_REQUESTED; i++) 
-  {
-    pctx[i] = GNUNET_new (struct pctx);
-    pctx[i]->idx = i;
-    pctx[i]->peer = p[i];
-    pctx[i]->id = NULL;
-    pctx[i]->mst = NULL;
-    pctx[i]->op = NULL;
-    pctx[i]->test_ok = GNUNET_NO;
-  }
-
-  channel_key = GNUNET_CRYPTO_eddsa_key_create ();
-  slave_key = GNUNET_CRYPTO_ecdsa_key_create ();
-
-  GNUNET_CRYPTO_eddsa_key_get_public (channel_key, &channel_pub_key);
-  GNUNET_CRYPTO_ecdsa_key_get_public (slave_key, &slave_pub_key);
-
-  pctx[0]->op = 
-    GNUNET_TESTBED_service_connect (NULL, p[0], "psyc", service_connect, 
-                                    pctx[0], psyc_ca, psyc_da, pctx[0]);
-
-  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL); 
-
-  timeout_tid = 
-    GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 5),
-                                  &timeout_task, NULL);
-}
-
-int
-main (int argc, char *argv[])
-{
-  int ret;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "test\n");
-
-  result = GNUNET_SYSERR;
-
-  ret = GNUNET_TESTBED_test_run ("test-psyc2", "test_psyc.conf",
-                                 PEERS_REQUESTED, 0LL, NULL, NULL, 
-                                 testbed_master, NULL);
-
-  if ((GNUNET_OK != ret) || (GNUNET_OK != result))
-    return 1;
-
-  return 0;
-}
-
-/* end of test-psyc2.c */
diff --git a/src/psyc/test_psyc_api_join.c b/src/psyc/test_psyc_api_join.c
deleted file mode 100644 (file)
index 419fa11..0000000
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * This file is part of GNUnet
- * Copyright (C) 2013 GNUnet e.V.
- *
- * GNUnet is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNUnet is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
- */
-
-/**
- * @file psyc/test_psyc_api_join.c
- * @brief Testbed test for the PSYC API.
- * @author xrs
- */
-
-/**
- * Lessons Learned:
- * - define topology in config
- * - psyc slave join needs part to end (same with master)
- * - GNUNET_SCHEDULER_add_delayed return value will outdate at call time
- * - main can not contain GNUNET_log()
- */
-
-#include "platform.h"
-#include "gnunet_crypto_lib.h"
-#include "gnunet_common.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_testbed_service.h"
-#include "gnunet_psyc_util_lib.h"
-#include "gnunet_psyc_service.h"
-#include "psyc_test_lib.h"
-
-static struct pctx PEERS[2];
-
-static int pids;
-
-
-static void 
-shutdown_task (void *cls)
-{
-  if (NULL != timeout_task_id) {
-    GNUNET_SCHEDULER_cancel (timeout_task_id);
-    timeout_task_id = NULL;
-  }
-
-  for (int i=0;i<2;i++) {
-    GNUNET_free (PEERS[i].channel_pub_key);
-
-    if (NULL != PEERS[i].psyc)
-    {
-      if (0 == i) 
-        GNUNET_PSYC_master_stop (PEERS[i].psyc, GNUNET_NO, NULL, NULL);
-      else 
-        GNUNET_PSYC_slave_part (PEERS[i].psyc, GNUNET_NO, NULL, NULL);
-    }
-  }
-
-  for (int i=0;i<MAX_TESTBED_OPS;i++)
-    if (NULL != op[i])
-      GNUNET_TESTBED_operation_done (op[i]);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Shut down!\n");
-}
-
-static void
-timeout_task (void *cls)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Timeout!\n");
-
-  timeout_task_id = NULL;
-
-  result = GNUNET_SYSERR;
-  GNUNET_SCHEDULER_shutdown ();
-}
-
-static void
-join_decision_cb (void *cls,
-                  const struct GNUNET_PSYC_JoinDecisionMessage *dcsn,
-                  int is_admitted,
-                  const struct GNUNET_PSYC_Message *join_msg)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "slave: got join decision: %s\n", 
-              (GNUNET_YES == is_admitted) ? "admitted":"rejected");
-
-  result = (GNUNET_YES == is_admitted) ? GNUNET_OK : GNUNET_SYSERR;
-
-  GNUNET_SCHEDULER_shutdown ();
-}
-
-static void
-join_request_cb (void *cls,
-                 const struct GNUNET_PSYC_JoinRequestMessage *req,
-                 const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_key,
-                 const struct GNUNET_PSYC_Message *join_msg,
-                 struct GNUNET_PSYC_JoinHandle *jh)
-{
-  struct GNUNET_HashCode slave_key_hash;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "master: got join request.\n");
-
-  GNUNET_CRYPTO_hash (slave_key, sizeof (*slave_key), &slave_key_hash);
-
-  GNUNET_PSYC_join_decision (jh, GNUNET_YES, 0, NULL, NULL);
-}
-
-static void
-psyc_da ()
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "disconnect form PSYC service\n");
-}
-
-static void *
-psyc_ca (void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg) 
-{
-  struct pctx *peer = (struct pctx*) cls;
-
-  // Case: master role
-  if (0 == peer->idx) {
-    GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Connecting to PSYC as master ...\n");
-
-    peer->psyc = (struct GNUNET_PSYC_Master *) 
-      GNUNET_PSYC_master_start (cfg,
-                                peer->channel_key,
-                                GNUNET_PSYC_CHANNEL_PRIVATE,
-                                NULL,
-                                join_request_cb,
-                                NULL,
-                                NULL,
-                                cls);
-    return peer->psyc;
-  }
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Connecting to PSYC as slave ...\n");
-
-  struct GNUNET_PSYC_Environment *env = GNUNET_PSYC_env_create ();
-  GNUNET_PSYC_env_add (env, GNUNET_PSYC_OP_ASSIGN, "_foo", "bar baz", 7);
-  GNUNET_PSYC_env_add (env, GNUNET_PSYC_OP_ASSIGN, "_foo_bar", "foo bar baz", 11);
-
-  struct GNUNET_PSYC_Message *
-    join_msg = GNUNET_PSYC_message_create ("_request_join", env, "some data", 40);
-
-  peer->psyc = (struct GNUNET_PSYC_Slave *)
-    GNUNET_PSYC_slave_join (cfg,
-                            peer->channel_pub_key,
-                            peer->id_key,
-                            GNUNET_PSYC_SLAVE_JOIN_NONE,
-                            peer->peer_id_master, 
-                            0,
-                            NULL,
-                            NULL,
-                            NULL,
-                            NULL,
-                            join_decision_cb,
-                            cls,
-                            join_msg);
-
-  GNUNET_free (join_msg);
-  peer->channel = GNUNET_PSYC_slave_get_channel (peer->psyc);
-  GNUNET_PSYC_env_destroy (env);
-
-  return peer->psyc;
-}
-
-static void
-service_connect (void *cls,
-                 struct GNUNET_TESTBED_Operation *op,
-                 void *ca_result,
-                 const char *emsg)
-{
-  GNUNET_assert (NULL != ca_result);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Connected to the service\n");
-}
-
-static void 
-connect_to_services (void *cls)
-{
-  for (int i = 0; i < 2; i++)
-  {
-    PEERS[i].peer_id_master = PEERS[0].peer_id;
-
-    op[op_cnt++] = 
-      GNUNET_TESTBED_service_connect (NULL, PEERS[i].testbed_peer, "psyc", 
-                                      &service_connect, &PEERS[i], &psyc_ca, 
-                                      &psyc_da, &PEERS[i]);
-  }
-}
-
-static void
-pinfo_cb (void *cls,
-          struct GNUNET_TESTBED_Operation *operation,
-          const struct GNUNET_TESTBED_PeerInformation *pinfo,
-          const char *emsg)
-{
-  struct pctx *peer = (struct pctx*) cls;
-
-  peer->peer_id = pinfo->result.id;
-
-  pids++;
-  if (pids < 2)
-    return;
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Got all IDs, starting test\n");
-
-  GNUNET_SCHEDULER_add_now (&connect_to_services, NULL);
-}
-
-static void
-testbed_master (void *cls,
-     struct GNUNET_TESTBED_RunHandle *h,
-     unsigned int num_peers,
-     struct GNUNET_TESTBED_Peer **p,
-     unsigned int links_succeeded,
-     unsigned int links_failed)
-{
-  struct GNUNET_CRYPTO_EddsaPrivateKey *channel_key = NULL;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Connected to testbed_master\n");
-
-  // Set up shutdown logic
-  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL); 
-  timeout_task_id = 
-    GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 15),
-                                  &timeout_task, NULL);
-  GNUNET_assert (NULL != timeout_task_id);
-
-  // Set up channel key
-  channel_key = GNUNET_CRYPTO_eddsa_key_create ();
-  GNUNET_assert (NULL != channel_key);
-  
-  // Set up information contexts for peers
-  for (int i=0 ; i < 2 ; i++)
-  {
-    PEERS[i].idx = i;
-    PEERS[i].testbed_peer = p[i];
-
-    // Create "egos"
-    PEERS[i].id_key = GNUNET_CRYPTO_ecdsa_key_create ();
-
-    // Set up channel keys shared by master and slave
-    PEERS[i].channel_key = channel_key; 
-
-    PEERS[i].channel_pub_key = 
-      GNUNET_malloc (sizeof (struct GNUNET_CRYPTO_EddsaPublicKey));
-    // Get public key 
-    GNUNET_CRYPTO_eddsa_key_get_public (PEERS[i].channel_key, 
-                                        PEERS[i].channel_pub_key);
-    // Get peerinfo
-    op[op_cnt++] = 
-      GNUNET_TESTBED_peer_get_information (p[i], 
-                                           GNUNET_TESTBED_PIT_IDENTITY, 
-                                           pinfo_cb, &PEERS[i]);
-  }
-}
-
-int 
-main (int argc, char *argv[])
-{
-  int ret; 
-
-  ret = GNUNET_TESTBED_test_run ("test_psyc_api_join", "test_psyc.conf",
-                                 2, 0LL, NULL, NULL, 
-                                 &testbed_master, NULL);
-
-  if ( (GNUNET_OK != ret) || (GNUNET_OK != result) )
-    return 1;
-
-  return 0;
-}
-
-/* end of test_psyc_api_join.c */
diff --git a/src/psycstore/.gitignore b/src/psycstore/.gitignore
deleted file mode 100644 (file)
index 5ec7832..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-gnunet-service-psycstore
-test_plugin_psycstore_mysql
-test_plugin_psycstore_sqlite
-test_plugin_psycstore_postgres
-test_psycstore
diff --git a/src/psycstore/Makefile.am b/src/psycstore/Makefile.am
deleted file mode 100644 (file)
index 557bb42..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-# This Makefile.am is in the public domain
-AM_CPPFLAGS = -I$(top_srcdir)/src/include
-
-plugindir = $(libdir)/gnunet
-
-pkgcfgdir= $(pkgdatadir)/config.d/
-
-libexecdir= $(pkglibdir)/libexec/
-
-pkgcfg_DATA = \
-  psycstore.conf
-
-
-if MINGW
- WINFLAGS = -Wl,--no-undefined -Wl,--export-all-symbols
-endif
-
-if USE_COVERAGE
-  AM_CFLAGS = --coverage -O0
-  XLIB = -lgcov
-endif
-
-if HAVE_MYSQL
-MYSQL_PLUGIN = libgnunet_plugin_psycstore_mysql.la
-if HAVE_TESTING
-MYSQL_TESTS = test_plugin_psycstore_mysql
-endif
-endif
-
-if HAVE_POSTGRESQL
-POSTGRES_PLUGIN = libgnunet_plugin_psycstore_postgres.la
-if HAVE_TESTING
-POSTGRES_TESTS = test_plugin_psycstore_postgres
-endif
-endif
-
-if HAVE_SQLITE
-SQLITE_PLUGIN = libgnunet_plugin_psycstore_sqlite.la
-if HAVE_TESTING
-SQLITE_TESTS = test_plugin_psycstore_sqlite
-endif
-endif
-
-lib_LTLIBRARIES = libgnunetpsycstore.la
-
-libgnunetpsycstore_la_SOURCES = \
-  psycstore_api.c \
-  psycstore.h
-libgnunetpsycstore_la_LIBADD = \
-  $(top_builddir)/src/util/libgnunetutil.la \
-  $(GN_LIBINTL) $(XLIB)
-libgnunetpsycstore_la_LDFLAGS = \
-  $(GN_LIB_LDFLAGS)  $(WINFLAGS) \
-  -version-info 0:0:0
-
-bin_PROGRAMS =
-
-libexec_PROGRAMS = \
- gnunet-service-psycstore
-
-gnunet_service_psycstore_SOURCES = \
- gnunet-service-psycstore.c
-gnunet_service_psycstore_LDADD = \
-  $(top_builddir)/src/statistics/libgnunetstatistics.la \
-  $(top_builddir)/src/util/libgnunetutil.la \
-  $(top_builddir)/src/psycutil/libgnunetpsycutil.la \
-  $(GN_LIBINTL)
-
-plugin_LTLIBRARIES = \
-  $(SQLITE_PLUGIN) \
-  $(MYSQL_PLUGIN) \
-  $(POSTGRES_PLUGIN)
-
-
-libgnunet_plugin_psycstore_mysql_la_SOURCES = \
-  plugin_psycstore_mysql.c
-libgnunet_plugin_psycstore_mysql_la_LIBADD = \
-  libgnunetpsycstore.la  \
-  $(top_builddir)/src/my/libgnunetmy.la \
-  $(top_builddir)/src/mysql/libgnunetmysql.la \
-  $(top_builddir)/src/statistics/libgnunetstatistics.la \
-  $(top_builddir)/src/util/libgnunetutil.la $(XLIBS) \
-  $(LTLIBINTL)
-libgnunet_plugin_psycstore_mysql_la_LDFLAGS = \
- $(GN_PLUGIN_LDFLAGS)
-
-libgnunet_plugin_psycstore_postgres_la_SOURCES = \
-  plugin_psycstore_postgres.c
-libgnunet_plugin_psycstore_postgres_la_LIBADD = \
-  libgnunetpsycstore.la  \
-  $(top_builddir)/src/pq/libgnunetpq.la  \
-  $(top_builddir)/src/statistics/libgnunetstatistics.la \
-  $(top_builddir)/src/util/libgnunetutil.la $(XLIBS) -lpq \
-  $(LTLIBINTL)
-libgnunet_plugin_psycstore_postgres_la_LDFLAGS = \
-  $(GN_PLUGIN_LDFLAGS) $(POSTGRESQL_LDFLAGS)
-libgnunet_plugin_psycstore_postgres_la_CPPFLAGS = \
-  $(POSTGRESQL_CPPFLAGS) $(AM_CPPFLAGS)
-
-
-libgnunet_plugin_psycstore_sqlite_la_SOURCES = \
-  plugin_psycstore_sqlite.c
-libgnunet_plugin_psycstore_sqlite_la_LIBADD = \
-  libgnunetpsycstore.la  \
-  $(top_builddir)/src/statistics/libgnunetstatistics.la \
-  $(top_builddir)/src/util/libgnunetutil.la $(XLIBS) -lsqlite3 \
-  $(LTLIBINTL)
-libgnunet_plugin_psycstore_sqlite_la_LDFLAGS = \
- $(GN_PLUGIN_LDFLAGS)
-
-
-if HAVE_SQLITE
-if HAVE_TESTING
-check_PROGRAMS = \
- $(SQLITE_TESTS) \
- $(MYSQL_TESTS) \
- $(POSTGRES_TESTS) \
- test_psycstore
-endif
-endif
-
-if ENABLE_TEST_RUN
-AM_TESTS_ENVIRONMENT=export GNUNET_PREFIX=$${GNUNET_PREFIX:-@libdir@};export PATH=$${GNUNET_PREFIX:-@prefix@}/bin:$$PATH;unset XDG_DATA_HOME;unset XDG_CONFIG_HOME;
-TESTS = $(check_PROGRAMS)
-endif
-
-test_psycstore_SOURCES = \
- test_psycstore.c
-test_psycstore_LDADD = \
-  libgnunetpsycstore.la \
-  $(top_builddir)/src/testing/libgnunettesting.la \
-  $(top_builddir)/src/util/libgnunetutil.la
-
-EXTRA_DIST = \
-  test_psycstore.conf
-
-
-test_plugin_psycstore_sqlite_SOURCES = \
- test_plugin_psycstore.c
-test_plugin_psycstore_sqlite_LDADD = \
-  $(top_builddir)/src/testing/libgnunettesting.la \
-  $(top_builddir)/src/util/libgnunetutil.la
-
-test_plugin_psycstore_mysql_SOURCES = \
- test_plugin_psycstore.c
-test_plugin_psycstore_mysql_LDADD = \
-  $(top_builddir)/src/testing/libgnunettesting.la \
-  $(top_builddir)/src/util/libgnunetutil.la
-
-test_plugin_psycstore_postgres_SOURCES = \
- test_plugin_psycstore.c
-test_plugin_psycstore_postgres_LDADD = \
- $(top_builddir)/src/testing/libgnunettesting.la \
- $(top_builddir)/src/util/libgnunetutil.la
-
diff --git a/src/psycstore/gnunet-service-psycstore.c b/src/psycstore/gnunet-service-psycstore.c
deleted file mode 100644 (file)
index 9aebd3e..0000000
+++ /dev/null
@@ -1,1049 +0,0 @@
-/**
- * This file is part of GNUnet
- * Copyright (C) 2013 GNUnet e.V.
- *
- * GNUnet is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNUnet is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
- */
-
-/**
- * @file psycstore/gnunet-service-psycstore.c
- * @brief PSYCstore service
- * @author Gabor X Toth
- * @author Christian Grothoff
- */
-
-#include <inttypes.h>
-
-#include "platform.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_constants.h"
-#include "gnunet_protocols.h"
-#include "gnunet_statistics_service.h"
-#include "gnunet_psyc_util_lib.h"
-#include "gnunet_psycstore_service.h"
-#include "gnunet_psycstore_plugin.h"
-#include "psycstore.h"
-
-
-/**
- * Handle to our current configuration.
- */
-static const struct GNUNET_CONFIGURATION_Handle *cfg;
-
-/**
- * Service handle.
- */
-static struct GNUNET_SERVICE_Handle *service;
-
-/**
- * Handle to the statistics service.
- */
-static struct GNUNET_STATISTICS_Handle *stats;
-
-/**
- * Database handle
- */
-static struct GNUNET_PSYCSTORE_PluginFunctions *db;
-
-/**
- * Name of the database plugin
- */
-static char *db_lib_name;
-
-
-/**
- * Task run during shutdown.
- *
- * @param cls unused
- */
-static void
-shutdown_task (void *cls)
-{
-  if (NULL != stats)
-  {
-    GNUNET_STATISTICS_destroy (stats, GNUNET_NO);
-    stats = NULL;
-  }
-  GNUNET_break (NULL == GNUNET_PLUGIN_unload (db_lib_name, db));
-  GNUNET_free (db_lib_name);
-  db_lib_name = NULL;
-}
-
-
-/**
- * Send a result code back to the client.
- *
- * @param client
- *        Client that should receive the result code.
- * @param result_code
- *        Code to transmit.
- * @param op_id
- *        Operation ID in network byte order.
- * @param err_msg
- *        Error message to include (or NULL for none).
- */
-static void
-send_result_code (struct GNUNET_SERVICE_Client *client,
-                  uint64_t op_id,
-                  int64_t result_code,
-                  const char *err_msg)
-{
-  struct OperationResult *res;
-  size_t err_size = 0;
-
-  if (NULL != err_msg)
-    err_size = strnlen (err_msg,
-                        GNUNET_MAX_MESSAGE_SIZE - sizeof (*res) - 1) + 1;
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg_extra (res, err_size,
-                               GNUNET_MESSAGE_TYPE_PSYCSTORE_RESULT_CODE);
-  res->result_code = GNUNET_htonll (result_code - INT64_MIN);
-  res->op_id = op_id;
-  if (0 < err_size)
-  {
-    GNUNET_memcpy (&res[1], err_msg, err_size);
-    ((char *) &res[1])[err_size - 1] = '\0';
-  }
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "Sending result to client: %" PRId64 " (%s)\n",
-             result_code, err_msg);
-  GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client), env);
-}
-
-
-enum
-{
-  MEMBERSHIP_TEST_NOT_NEEDED = 0,
-  MEMBERSHIP_TEST_NEEDED = 1,
-  MEMBERSHIP_TEST_DONE = 2,
-} MessageMembershipTest;
-
-
-struct SendClosure
-{
-  struct GNUNET_SERVICE_Client *client;
-
-  /**
-   * Channel's public key.
-   */
-  struct GNUNET_CRYPTO_EddsaPublicKey channel_key;
-
-  /**
-   * Slave's public key.
-   */
-  struct GNUNET_CRYPTO_EcdsaPublicKey slave_key;
-
-  /**
-   * Operation ID.
-   */
-  uint64_t op_id;
-
-  /**
-   * Membership test result.
-   */
-  int membership_test_result;
-
-  /**
-   * Do membership test with @a slave_key before returning fragment?
-   * @see enum MessageMembershipTest
-   */
-  uint8_t membership_test;
-};
-
-
-static int
-send_fragment (void *cls, struct GNUNET_MULTICAST_MessageHeader *msg,
-               enum GNUNET_PSYCSTORE_MessageFlags flags)
-{
-  struct SendClosure *sc = cls;
-  struct FragmentResult *res;
-
-  if (MEMBERSHIP_TEST_NEEDED == sc->membership_test)
-  {
-    sc->membership_test = MEMBERSHIP_TEST_DONE;
-    sc->membership_test_result
-      = db->membership_test (db->cls, &sc->channel_key, &sc->slave_key,
-                             GNUNET_ntohll (msg->message_id));
-    switch (sc->membership_test_result)
-    {
-    case GNUNET_YES:
-      break;
-
-    case GNUNET_NO:
-    case GNUNET_SYSERR:
-      return GNUNET_NO;
-    }
-  }
-
-  size_t msg_size = ntohs (msg->header.size);
-
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg_extra (res, msg_size,
-                               GNUNET_MESSAGE_TYPE_PSYCSTORE_RESULT_FRAGMENT);
-  res->op_id = sc->op_id;
-  res->psycstore_flags = htonl (flags);
-  GNUNET_memcpy (&res[1], msg, msg_size);
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "Sending fragment %llu to client\n",
-             (unsigned long long) GNUNET_ntohll (msg->fragment_id));
-  GNUNET_free (msg);
-
-  GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (sc->client), env);
-  return GNUNET_YES;
-}
-
-
-static int
-send_state_var (void *cls, const char *name,
-                const void *value, uint32_t value_size)
-{
-  struct SendClosure *sc = cls;
-  struct StateResult *res;
-  size_t name_size = strlen (name) + 1;
-
-  /** @todo FIXME: split up value into 64k chunks */
-
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg_extra (res, name_size + value_size,
-                               GNUNET_MESSAGE_TYPE_PSYCSTORE_RESULT_STATE);
-  res->op_id = sc->op_id;
-  res->name_size = htons (name_size);
-  GNUNET_memcpy (&res[1], name, name_size);
-  GNUNET_memcpy ((char *) &res[1] + name_size, value, value_size);
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Sending state variable %s to client\n", name);
-
-  GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (sc->client), env);
-  return GNUNET_OK;
-}
-
-
-static void
-handle_client_membership_store (void *cls,
-                                const struct MembershipStoreRequest *req)
-{
-  struct GNUNET_SERVICE_Client *client = cls;
-
-  int ret = db->membership_store (db->cls, &req->channel_key, &req->slave_key,
-                                  req->did_join,
-                                  GNUNET_ntohll (req->announced_at),
-                                  GNUNET_ntohll (req->effective_since),
-                                  GNUNET_ntohll (req->group_generation));
-
-  if (ret != GNUNET_OK)
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                _("Failed to store membership information!\n"));
-
-  send_result_code (client, req->op_id, ret, NULL);
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-static void
-handle_client_membership_test (void *cls,
-                               const struct MembershipTestRequest *req)
-{
-  struct GNUNET_SERVICE_Client *client = cls;
-
-  int ret = db->membership_test (db->cls, &req->channel_key, &req->slave_key,
-                                 GNUNET_ntohll (req->message_id));
-  switch (ret)
-  {
-  case GNUNET_YES:
-  case GNUNET_NO:
-    break;
-  default:
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                _("Failed to test membership!\n"));
-  }
-
-  send_result_code (client, req->op_id, ret, NULL);
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-static int
-check_client_fragment_store (void *cls,
-                             const struct FragmentStoreRequest *req)
-{
-  return GNUNET_OK;
-}
-
-
-static void
-handle_client_fragment_store (void *cls,
-                              const struct FragmentStoreRequest *req)
-{
-  struct GNUNET_SERVICE_Client *client = cls;
-
-  const struct GNUNET_MessageHeader *
-    msg = GNUNET_MQ_extract_nested_mh (req);
-  if (NULL == msg
-      || ntohs (msg->size) < sizeof (struct GNUNET_MULTICAST_MessageHeader))
-  {
-    GNUNET_break (0);
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                _("Dropping invalid fragment\n"));
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-
-  int ret = db->fragment_store (db->cls, &req->channel_key,
-                                (const struct GNUNET_MULTICAST_MessageHeader *)
-                                msg, ntohl (req->psycstore_flags));
-
-  if (ret != GNUNET_OK)
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                _("Failed to store fragment\n"));
-
-  send_result_code (client, req->op_id, ret, NULL);
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-static void
-handle_client_fragment_get (void *cls,
-                            const struct FragmentGetRequest *req)
-{
-  struct GNUNET_SERVICE_Client *client = cls;
-
-  struct SendClosure
-    sc = { .op_id = req->op_id,
-           .client = client,
-           .channel_key = req->channel_key,
-           .slave_key = req->slave_key,
-           .membership_test = req->do_membership_test };
-
-  int64_t ret;
-  uint64_t ret_frags = 0;
-  uint64_t first_fragment_id = GNUNET_ntohll (req->first_fragment_id);
-  uint64_t last_fragment_id = GNUNET_ntohll (req->last_fragment_id);
-  uint64_t limit = GNUNET_ntohll (req->fragment_limit);
-
-  if (0 == limit)
-    ret = db->fragment_get (db->cls, &req->channel_key,
-                            first_fragment_id, last_fragment_id,
-                            &ret_frags, send_fragment, &sc);
-  else
-    ret = db->fragment_get_latest (db->cls, &req->channel_key, limit,
-                                   &ret_frags, send_fragment, &sc);
-
-  switch (ret)
-  {
-  case GNUNET_YES:
-  case GNUNET_NO:
-    if (MEMBERSHIP_TEST_DONE == sc.membership_test)
-    {
-      switch (sc.membership_test_result)
-      {
-      case GNUNET_YES:
-        break;
-
-      case GNUNET_NO:
-        ret = GNUNET_PSYCSTORE_MEMBERSHIP_TEST_FAILED;
-        break;
-
-      case GNUNET_SYSERR:
-        ret = GNUNET_SYSERR;
-        break;
-      }
-    }
-    break;
-  default:
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                _("Failed to get fragment!\n"));
-  }
-  send_result_code (client, req->op_id, (ret < 0) ? ret : ret_frags, NULL);
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-static int
-check_client_message_get (void *cls,
-                          const struct MessageGetRequest *req)
-{
-  return GNUNET_OK;
-}
-
-
-static void
-handle_client_message_get (void *cls,
-                           const struct MessageGetRequest *req)
-{
-  struct GNUNET_SERVICE_Client *client = cls;
-
-  uint16_t size = ntohs (req->header.size);
-  const char *method_prefix = (const char *) &req[1];
-
-  if (size < sizeof (*req) + 1
-      || '\0' != method_prefix[size - sizeof (*req) - 1])
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "Message get: invalid method prefix. size: %u < %u?\n",
-                size,
-                (unsigned int) (sizeof (*req) + 1));
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-
-  struct SendClosure
-    sc = { .op_id = req->op_id,
-           .client = client,
-           .channel_key = req->channel_key,
-           .slave_key = req->slave_key,
-           .membership_test = req->do_membership_test };
-
-  int64_t ret;
-  uint64_t ret_frags = 0;
-  uint64_t first_message_id = GNUNET_ntohll (req->first_message_id);
-  uint64_t last_message_id = GNUNET_ntohll (req->last_message_id);
-  uint64_t msg_limit = GNUNET_ntohll (req->message_limit);
-  uint64_t frag_limit = GNUNET_ntohll (req->fragment_limit);
-
-  /** @todo method_prefix */
-  if (0 == msg_limit)
-    ret = db->message_get (db->cls, &req->channel_key,
-                           first_message_id, last_message_id, frag_limit,
-                           &ret_frags, send_fragment, &sc);
-  else
-    ret = db->message_get_latest (db->cls, &req->channel_key, msg_limit,
-                                  &ret_frags, send_fragment, &sc);
-
-  switch (ret)
-  {
-  case GNUNET_YES:
-  case GNUNET_NO:
-    break;
-  default:
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                _("Failed to get message!\n"));
-  }
-
-  send_result_code (client, req->op_id, (ret < 0) ? ret : ret_frags, NULL);
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-static void
-handle_client_message_get_fragment (void *cls,
-                                    const struct MessageGetFragmentRequest *req)
-{
-  struct GNUNET_SERVICE_Client *client = cls;
-
-  struct SendClosure
-    sc = { .op_id = req->op_id, .client = client,
-           .channel_key = req->channel_key, .slave_key = req->slave_key,
-           .membership_test = req->do_membership_test };
-
-  int ret = db->message_get_fragment (db->cls, &req->channel_key,
-                                      GNUNET_ntohll (req->message_id),
-                                      GNUNET_ntohll (req->fragment_offset),
-                                      &send_fragment, &sc);
-  switch (ret)
-  {
-  case GNUNET_YES:
-  case GNUNET_NO:
-    break;
-  default:
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                _("Failed to get message fragment!\n"));
-  }
-
-  send_result_code (client, req->op_id, ret, NULL);
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-static void
-handle_client_counters_get (void *cls,
-                            const struct OperationRequest *req)
-{
-  struct GNUNET_SERVICE_Client *client = cls;
-
-  struct CountersResult *res;
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg (res, GNUNET_MESSAGE_TYPE_PSYCSTORE_RESULT_COUNTERS);
-
-  int ret = db->counters_message_get (db->cls, &req->channel_key,
-                                      &res->max_fragment_id, &res->max_message_id,
-                                      &res->max_group_generation);
-  switch (ret)
-  {
-  case GNUNET_OK:
-    ret = db->counters_state_get (db->cls, &req->channel_key,
-                                  &res->max_state_message_id);
-  case GNUNET_NO:
-    break;
-  default:
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                _("Failed to get master counters!\n"));
-  }
-
-  res->result_code = htonl (ret);
-  res->op_id = req->op_id;
-  res->max_fragment_id = GNUNET_htonll (res->max_fragment_id);
-  res->max_message_id = GNUNET_htonll (res->max_message_id);
-  res->max_group_generation = GNUNET_htonll (res->max_group_generation);
-  res->max_state_message_id = GNUNET_htonll (res->max_state_message_id);
-
-  GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client), env);
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-struct StateModifyClosure
-{
-  const struct GNUNET_CRYPTO_EddsaPublicKey channel_key;
-  struct GNUNET_PSYC_ReceiveHandle *recv;
-  enum GNUNET_PSYC_MessageState msg_state;
-  char mod_oper;
-  char *mod_name;
-  char *mod_value;
-  uint32_t mod_value_size;
-  uint32_t mod_value_remaining;
-};
-
-
-static void
-recv_state_message_part (void *cls,
-                         const struct GNUNET_PSYC_MessageHeader *msg,
-                         const struct GNUNET_MessageHeader *pmsg)
-{
-  struct StateModifyClosure *scls = cls;
-  uint16_t psize;
-
-  if (NULL == msg)
-  { // FIXME: error on unknown message
-    return;
-  }
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "recv_state_message_part()  message_id: %" PRIu64
-              ", fragment_offset: %" PRIu64 ", flags: %u\n",
-              GNUNET_ntohll (msg->message_id),
-              GNUNET_ntohll (msg->fragment_offset),
-              ntohl (msg->flags));
-
-  if (NULL == pmsg)
-  {
-    scls->msg_state = GNUNET_PSYC_MESSAGE_STATE_ERROR;
-    return;
-  }
-
-  switch (ntohs (pmsg->type))
-  {
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_METHOD:
-  {
-    scls->msg_state = GNUNET_PSYC_MESSAGE_STATE_METHOD;
-    break;
-  }
-
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MODIFIER:
-  {
-    struct GNUNET_PSYC_MessageModifier *
-      pmod = (struct GNUNET_PSYC_MessageModifier *) pmsg;
-    psize = ntohs (pmod->header.size);
-    uint16_t name_size = ntohs (pmod->name_size);
-    uint32_t value_size = ntohl (pmod->value_size);
-
-    const char *name = (const char *) &pmod[1];
-    const void *value = name + name_size;
-
-    if (GNUNET_PSYC_OP_SET != pmod->oper)
-    { // Apply non-transient operation.
-      if (psize == sizeof (*pmod) + name_size + value_size)
-      {
-        db->state_modify_op (db->cls, &scls->channel_key,
-                             pmod->oper, name, value, value_size);
-      }
-      else
-      {
-        scls->mod_oper = pmod->oper;
-        scls->mod_name = GNUNET_malloc (name_size);
-        GNUNET_memcpy (scls->mod_name, name, name_size);
-
-        scls->mod_value_size = value_size;
-        scls->mod_value = GNUNET_malloc (scls->mod_value_size);
-        scls->mod_value_remaining
-          = scls->mod_value_size - (psize - sizeof (*pmod) - name_size);
-        GNUNET_memcpy (scls->mod_value, value, value_size - scls->mod_value_remaining);
-      }
-    }
-    scls->msg_state = GNUNET_PSYC_MESSAGE_STATE_MODIFIER;
-    break;
-  }
-
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MOD_CONT:
-    if (GNUNET_PSYC_OP_SET != scls->mod_oper)
-    {
-      if (scls->mod_value_remaining == 0)
-      {
-        GNUNET_break_op (0);
-        scls->msg_state = GNUNET_PSYC_MESSAGE_STATE_ERROR;
-      }
-      psize = ntohs (pmsg->size);
-      GNUNET_memcpy (scls->mod_value + (scls->mod_value_size - scls->mod_value_remaining),
-              &pmsg[1], psize - sizeof (*pmsg));
-      scls->mod_value_remaining -= psize - sizeof (*pmsg);
-      if (0 == scls->mod_value_remaining)
-      {
-        db->state_modify_op (db->cls, &scls->channel_key,
-                             scls->mod_oper, scls->mod_name,
-                             scls->mod_value, scls->mod_value_size);
-        GNUNET_free (scls->mod_name);
-        GNUNET_free (scls->mod_value);
-        scls->mod_oper = 0;
-        scls->mod_name = NULL;
-        scls->mod_value = NULL;
-        scls->mod_value_size = 0;
-      }
-    }
-    scls->msg_state = GNUNET_PSYC_MESSAGE_STATE_MOD_CONT;
-    break;
-
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_DATA:
-    scls->msg_state = GNUNET_PSYC_MESSAGE_STATE_DATA;
-    break;
-
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_END:
-    scls->msg_state = GNUNET_PSYC_MESSAGE_STATE_END;
-    break;
-
-  default:
-    scls->msg_state = GNUNET_PSYC_MESSAGE_STATE_ERROR;
-  }
-}
-
-
-static int
-recv_state_fragment (void *cls, struct GNUNET_MULTICAST_MessageHeader *msg,
-                     enum GNUNET_PSYCSTORE_MessageFlags flags)
-{
-  struct StateModifyClosure *scls = cls;
-
-  if (NULL == scls->recv)
-  {
-    scls->recv = GNUNET_PSYC_receive_create (NULL, recv_state_message_part,
-                                             scls);
-  }
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "recv_state_fragment: %" PRIu64 "\n", GNUNET_ntohll (msg->fragment_id));
-
-  struct GNUNET_PSYC_MessageHeader *
-    pmsg = GNUNET_PSYC_message_header_create (msg, flags);
-  GNUNET_PSYC_receive_message (scls->recv, pmsg);
-  GNUNET_free (pmsg);
-
-  return GNUNET_YES;
-}
-
-
-static void
-handle_client_state_modify (void *cls,
-                            const struct StateModifyRequest *req)
-{
-  struct GNUNET_SERVICE_Client *client = cls;
-
-  uint64_t message_id = GNUNET_ntohll (req->message_id);
-  uint64_t state_delta = GNUNET_ntohll (req->state_delta);
-  uint64_t ret_frags = 0;
-  struct StateModifyClosure
-    scls = { .channel_key = req->channel_key };
-
-  int ret = db->state_modify_begin (db->cls, &req->channel_key,
-                                    message_id, state_delta);
-
-  if (GNUNET_OK != ret)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-                _("Failed to begin modifying state: %d\n"), ret);
-  }
-  else
-  {
-    ret = db->message_get (db->cls, &req->channel_key,
-                           message_id, message_id, 0,
-                           &ret_frags, recv_state_fragment, &scls);
-    if (GNUNET_OK != ret)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                  _("Failed to modify state: %d\n"), ret);
-      GNUNET_break (0);
-    }
-    else
-    {
-      if (GNUNET_OK != db->state_modify_end (db->cls, &req->channel_key, message_id))
-      {
-        GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                    _("Failed to end modifying state!\n"));
-        GNUNET_break (0);
-      }
-    }
-    if (NULL != scls.recv)
-    {
-      GNUNET_PSYC_receive_destroy (scls.recv);
-    }
-  }
-
-  send_result_code (client, req->op_id, ret, NULL);
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-static int
-check_client_state_sync (void *cls,
-                         const struct StateSyncRequest *req)
-{
-  return GNUNET_OK;
-}
-
-
-/** @todo FIXME: stop processing further state sync messages after an error */
-static void
-handle_client_state_sync (void *cls,
-                          const struct StateSyncRequest *req)
-{
-  struct GNUNET_SERVICE_Client *client = cls;
-
-  int ret = GNUNET_SYSERR;
-  const char *name = (const char *) &req[1];
-  uint16_t name_size = ntohs (req->name_size);
-
-  if (name_size <= 2 || '\0' != name[name_size - 1])
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                _("Tried to set invalid state variable name!\n"));
-    GNUNET_break_op (0);
-  }
-  else
-  {
-    ret = GNUNET_OK;
-
-    if (req->flags & STATE_OP_FIRST)
-    {
-      ret = db->state_sync_begin (db->cls, &req->channel_key);
-    }
-    if (ret != GNUNET_OK)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                  _("Failed to begin synchronizing state!\n"));
-    }
-    else
-    {
-      ret = db->state_sync_assign (db->cls, &req->channel_key, name,
-                                   name + ntohs (req->name_size),
-                                   ntohs (req->header.size) - sizeof (*req)
-                                   - ntohs (req->name_size));
-    }
-
-    if (GNUNET_OK == ret && req->flags & STATE_OP_LAST)
-    {
-      ret = db->state_sync_end (db->cls, &req->channel_key,
-                                GNUNET_ntohll (req->max_state_message_id),
-                                GNUNET_ntohll (req->state_hash_message_id));
-      if (ret != GNUNET_OK)
-        GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                    _("Failed to end synchronizing state!\n"));
-    }
-  }
-  send_result_code (client, req->op_id, ret, NULL);
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-static void
-handle_client_state_reset (void *cls,
-                           const struct OperationRequest *req)
-{
-  struct GNUNET_SERVICE_Client *client = cls;
-
-  int ret = db->state_reset (db->cls, &req->channel_key);
-
-  if (ret != GNUNET_OK)
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                _("Failed to reset state!\n"));
-
-  send_result_code (client, req->op_id, ret, NULL);
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-static void
-handle_client_state_hash_update (void *cls,
-                                 const struct StateHashUpdateRequest *req)
-{
-  struct GNUNET_SERVICE_Client *client = cls;
-
-  int ret = db->state_reset (db->cls, &req->channel_key);
-  if (ret != GNUNET_OK)
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                _("Failed to reset state!\n"));
-
-  send_result_code (client, req->op_id, ret, NULL);
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-static int
-check_client_state_get (void *cls,
-                        const struct OperationRequest *req)
-{
-  return GNUNET_OK;
-}
-
-
-static void
-handle_client_state_get (void *cls,
-                         const struct OperationRequest *req)
-{
-  struct GNUNET_SERVICE_Client *client = cls;
-
-  struct SendClosure sc = { .op_id = req->op_id, .client = client };
-  int64_t ret = GNUNET_SYSERR;
-  const char *name = (const char *) &req[1];
-  uint16_t name_size = ntohs (req->header.size) - sizeof (*req);
-
-  if (name_size <= 2 || '\0' != name[name_size - 1])
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                _("Tried to get invalid state variable name!\n"));
-    GNUNET_break (0);
-  }
-  else
-  {
-    ret = db->state_get (db->cls, &req->channel_key, name,
-                         &send_state_var, &sc);
-    if (GNUNET_NO == ret && name_size >= 5) /* min: _a_b\0 */
-    {
-      char *p, *n = GNUNET_malloc (name_size);
-      GNUNET_memcpy (n, name, name_size);
-      while (&n[1] < (p = strrchr (n, '_')) && GNUNET_NO == ret)
-      {
-        *p = '\0';
-        ret = db->state_get (db->cls, &req->channel_key, n,
-                             &send_state_var, &sc);
-      }
-      GNUNET_free (n);
-    }
-  }
-  switch (ret)
-  {
-  case GNUNET_OK:
-  case GNUNET_NO:
-    break;
-  default:
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                _("Failed to get state variable!\n"));
-  }
-
-  send_result_code (client, req->op_id, ret, NULL);
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-static int
-check_client_state_get_prefix (void *cls,
-                               const struct OperationRequest *req)
-{
-  return GNUNET_OK;
-}
-
-
-static void
-handle_client_state_get_prefix (void *cls,
-                                const struct OperationRequest *req)
-{
-  struct GNUNET_SERVICE_Client *client = cls;
-
-  struct SendClosure sc = { .op_id = req->op_id, .client = client };
-  int64_t ret = GNUNET_SYSERR;
-  const char *name = (const char *) &req[1];
-  uint16_t name_size = ntohs (req->header.size) - sizeof (*req);
-
-  if (name_size <= 1 || '\0' != name[name_size - 1])
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                _("Tried to get invalid state variable name!\n"));
-    GNUNET_break (0);
-  }
-  else
-  {
-    ret = db->state_get_prefix (db->cls, &req->channel_key, name,
-                                &send_state_var, &sc);
-  }
-  switch (ret)
-  {
-  case GNUNET_OK:
-  case GNUNET_NO:
-    break;
-  default:
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                _("Failed to get state variable!\n"));
-  }
-
-  send_result_code (client, req->op_id, ret, NULL);
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-/**
- * A new client connected.
- *
- * @param cls NULL
- * @param client client to add
- * @param mq message queue for @a client
- * @return @a client
- */
-static void *
-client_notify_connect (void *cls,
-                       struct GNUNET_SERVICE_Client *client,
-                       struct GNUNET_MQ_Handle *mq)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Client connected: %p\n", client);
-
-  return client;
-}
-
-
-/**
- * Called whenever a client is disconnected.
- * Frees our resources associated with that client.
- *
- * @param cls closure
- * @param client identification of the client
- * @param app_ctx must match @a client
- */
-static void
-client_notify_disconnect (void *cls,
-                          struct GNUNET_SERVICE_Client *client,
-                          void *app_ctx)
-{
-}
-
-
-/**
- * Initialize the PSYCstore service.
- *
- * @param cls Closure.
- * @param server The initialized server.
- * @param c Configuration to use.
- */
-static void
-run (void *cls,
-     const struct GNUNET_CONFIGURATION_Handle *c,
-     struct GNUNET_SERVICE_Handle *svc)
-{
-  cfg = c;
-  service = svc;
-
-  /* Loading database plugin */
-  char *database;
-  if (GNUNET_OK !=
-      GNUNET_CONFIGURATION_get_value_string (cfg, "psycstore", "database",
-                                             &database))
-  {
-    GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
-                              "psycstore",
-                              "database");
-  }
-  else
-  {
-    GNUNET_asprintf (&db_lib_name,
-                    "libgnunet_plugin_psycstore_%s",
-                    database);
-    db = GNUNET_PLUGIN_load (db_lib_name, (void *) cfg);
-    GNUNET_free (database);
-  }
-  if (NULL == db)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-               "Could not load database backend `%s'\n",
-               db_lib_name);
-    GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
-    return;
-  }
-
-  stats = GNUNET_STATISTICS_create ("psycstore", cfg);
-  GNUNET_SCHEDULER_add_shutdown (shutdown_task,
-                                NULL);
-}
-
-/**
- * Define "main" method using service macro.
- */
-GNUNET_SERVICE_MAIN
-("psycstore",
- GNUNET_SERVICE_OPTION_NONE,
- run,
- client_notify_connect,
- client_notify_disconnect,
- NULL,
- GNUNET_MQ_hd_fixed_size (client_membership_store,
-                          GNUNET_MESSAGE_TYPE_PSYCSTORE_MEMBERSHIP_STORE,
-                          struct MembershipStoreRequest,
-                          NULL),
- GNUNET_MQ_hd_fixed_size (client_membership_test,
-                          GNUNET_MESSAGE_TYPE_PSYCSTORE_MEMBERSHIP_TEST,
-                          struct MembershipTestRequest,
-                          NULL),
- GNUNET_MQ_hd_var_size (client_fragment_store,
-                        GNUNET_MESSAGE_TYPE_PSYCSTORE_FRAGMENT_STORE,
-                        struct FragmentStoreRequest,
-                        NULL),
- GNUNET_MQ_hd_fixed_size (client_fragment_get,
-                          GNUNET_MESSAGE_TYPE_PSYCSTORE_FRAGMENT_GET,
-                          struct FragmentGetRequest,
-                          NULL),
- GNUNET_MQ_hd_var_size (client_message_get,
-                        GNUNET_MESSAGE_TYPE_PSYCSTORE_MESSAGE_GET,
-                        struct MessageGetRequest,
-                        NULL),
- GNUNET_MQ_hd_fixed_size (client_message_get_fragment,
-                          GNUNET_MESSAGE_TYPE_PSYCSTORE_MESSAGE_GET_FRAGMENT,
-                          struct MessageGetFragmentRequest,
-                          NULL),
- GNUNET_MQ_hd_fixed_size (client_counters_get,
-                          GNUNET_MESSAGE_TYPE_PSYCSTORE_COUNTERS_GET,
-                          struct OperationRequest,
-                          NULL),
- GNUNET_MQ_hd_fixed_size (client_state_modify,
-                          GNUNET_MESSAGE_TYPE_PSYCSTORE_STATE_MODIFY,
-                          struct StateModifyRequest,
-                          NULL),
- GNUNET_MQ_hd_var_size (client_state_sync,
-                        GNUNET_MESSAGE_TYPE_PSYCSTORE_STATE_SYNC,
-                        struct StateSyncRequest,
-                        NULL),
- GNUNET_MQ_hd_fixed_size (client_state_reset,
-                          GNUNET_MESSAGE_TYPE_PSYCSTORE_STATE_RESET,
-                          struct OperationRequest,
-                          NULL),
- GNUNET_MQ_hd_fixed_size (client_state_hash_update,
-                          GNUNET_MESSAGE_TYPE_PSYCSTORE_STATE_HASH_UPDATE,
-                          struct StateHashUpdateRequest,
-                          NULL),
- GNUNET_MQ_hd_var_size (client_state_get,
-                        GNUNET_MESSAGE_TYPE_PSYCSTORE_STATE_GET,
-                        struct OperationRequest,
-                        NULL),
- GNUNET_MQ_hd_var_size (client_state_get_prefix,
-                        GNUNET_MESSAGE_TYPE_PSYCSTORE_STATE_GET_PREFIX,
-                        struct OperationRequest,
-                        NULL));
-
-/* end of gnunet-service-psycstore.c */
diff --git a/src/psycstore/plugin_psycstore_mysql.c b/src/psycstore/plugin_psycstore_mysql.c
deleted file mode 100644 (file)
index c36b6f7..0000000
+++ /dev/null
@@ -1,1960 +0,0 @@
-/*
- * This file is part of GNUnet
- * Copyright (C) 2013 GNUnet e.V.
- *
- * GNUnet is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNUnet is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
- */
-
-/**
- * @file psycstore/plugin_psycstore_mysql.c
- * @brief mysql-based psycstore backend
- * @author Gabor X Toth
- * @author Christian Grothoff
- * @author Christophe Genevey
- */
-
-#include "platform.h"
-#include "gnunet_psycstore_plugin.h"
-#include "gnunet_psycstore_service.h"
-#include "gnunet_multicast_service.h"
-#include "gnunet_crypto_lib.h"
-#include "gnunet_psyc_util_lib.h"
-#include "psycstore.h"
-#include "gnunet_my_lib.h"
-#include "gnunet_mysql_lib.h"
-#include <mysql/mysql.h>
-
-/**
- * After how many ms "busy" should a DB operation fail for good?  A
- * low value makes sure that we are more responsive to requests
- * (especially PUTs).  A high value guarantees a higher success rate
- * (SELECTs in iterate can take several seconds despite LIMIT=1).
- *
- * The default value of 1s should ensure that users do not experience
- * huge latencies while at the same time allowing operations to
- * succeed with reasonable probability.
- */
-#define BUSY_TIMEOUT_MS 1000
-
-#define DEBUG_PSYCSTORE GNUNET_EXTRA_LOGGING
-
-/**
- * Log an error message at log-level 'level' that indicates
- * a failure of the command 'cmd' on file 'filename'
- * with the message given by strerror(errno).
- */
-#define LOG_MYSQL(db, level, cmd, stmt)                                 \
-  do {                                                                  \
-    GNUNET_log_from (level, "psycstore-mysql",                          \
-                     _("`%s' failed at %s:%d with error: %s\n"),        \
-                     cmd, __FILE__, __LINE__,                           \
-                     mysql_stmt_error (GNUNET_MYSQL_statement_get_stmt(stmt))); \
-  } while (0)
-
-#define LOG(kind,...) GNUNET_log_from (kind, "psycstore-mysql", __VA_ARGS__)
-
-enum Transactions {
-  TRANSACTION_NONE = 0,
-  TRANSACTION_STATE_MODIFY,
-  TRANSACTION_STATE_SYNC,
-};
-
-/**
- * Context for all functions in this plugin.
- */
-struct Plugin
-{
-
-  const struct GNUNET_CONFIGURATION_Handle *cfg;
-
-  /**
-   * MySQL context.
-   */
-  struct GNUNET_MYSQL_Context *mc;
-
-  /**
-   * Current transaction.
-   */
-  enum Transactions transaction;
-
-  /**
-   * Precompiled SQL for channel_key_store()
-   */
-  struct GNUNET_MYSQL_StatementHandle *insert_channel_key;
-
-  /**
-   * Precompiled SQL for slave_key_store()
-   */
-  struct GNUNET_MYSQL_StatementHandle *insert_slave_key;
-
-  /**
-   * Precompiled SQL for membership_store()
-   */
-  struct GNUNET_MYSQL_StatementHandle *insert_membership;
-
-  /**
-   * Precompiled SQL for membership_test()
-   */
-  struct GNUNET_MYSQL_StatementHandle *select_membership;
-
-  /**
-   * Precompiled SQL for fragment_store()
-   */
-  struct GNUNET_MYSQL_StatementHandle *insert_fragment;
-
-  /**
-   * Precompiled SQL for message_add_flags()
-   */
-  struct GNUNET_MYSQL_StatementHandle *update_message_flags;
-
-  /**
-   * Precompiled SQL for fragment_get()
-   */
-  struct GNUNET_MYSQL_StatementHandle *select_fragments;
-
-  /**
-   * Precompiled SQL for fragment_get()
-   */
-  struct GNUNET_MYSQL_StatementHandle *select_latest_fragments;
-
-  /**
-   * Precompiled SQL for message_get()
-   */
-  struct GNUNET_MYSQL_StatementHandle *select_messages;
-
-  /**
-   * Precompiled SQL for message_get()
-   */
-  struct GNUNET_MYSQL_StatementHandle *select_latest_messages;
-
-  /**
-   * Precompiled SQL for message_get_fragment()
-   */
-  struct GNUNET_MYSQL_StatementHandle *select_message_fragment;
-
-  /**
-   * Precompiled SQL for counters_get_message()
-   */
-  struct GNUNET_MYSQL_StatementHandle *select_counters_message;
-
-  /**
-   * Precompiled SQL for counters_get_state()
-   */
-  struct GNUNET_MYSQL_StatementHandle *select_counters_state;
-
-  /**
-   * Precompiled SQL for state_modify_end()
-   */
-  struct GNUNET_MYSQL_StatementHandle *update_state_hash_message_id;
-
-  /**
-   * Precompiled SQL for state_sync_end()
-   */
-  struct GNUNET_MYSQL_StatementHandle *update_max_state_message_id;
-
-  /**
-   * Precompiled SQL for state_modify_op()
-   */
-  struct GNUNET_MYSQL_StatementHandle *insert_state_current;
-
-  /**
-   * Precompiled SQL for state_modify_end()
-   */
-  struct GNUNET_MYSQL_StatementHandle *delete_state_empty;
-
-  /**
-   * Precompiled SQL for state_set_signed()
-   */
-  struct GNUNET_MYSQL_StatementHandle *update_state_signed;
-
-  /**
-   * Precompiled SQL for state_sync()
-   */
-  struct GNUNET_MYSQL_StatementHandle *insert_state_sync;
-
-  /**
-   * Precompiled SQL for state_sync()
-   */
-  struct GNUNET_MYSQL_StatementHandle *delete_state;
-
-  /**
-   * Precompiled SQL for state_sync()
-   */
-  struct GNUNET_MYSQL_StatementHandle *insert_state_from_sync;
-
-  /**
-   * Precompiled SQL for state_sync()
-   */
-  struct GNUNET_MYSQL_StatementHandle *delete_state_sync;
-
-  /**
-   * Precompiled SQL for state_get_signed()
-   */
-  struct GNUNET_MYSQL_StatementHandle *select_state_signed;
-
-  /**
-   * Precompiled SQL for state_get()
-   */
-  struct GNUNET_MYSQL_StatementHandle *select_state_one;
-
-  /**
-   * Precompiled SQL for state_get_prefix()
-   */
-  struct GNUNET_MYSQL_StatementHandle *select_state_prefix;
-
-};
-
-#if DEBUG_PSYCSTORE
-
-static void
-mysql_trace (void *cls, const char *sql)
-{
-  LOG(GNUNET_ERROR_TYPE_DEBUG, "MYSQL query:\n%s\n", sql);
-}
-
-#endif
-
-
-/**
- * @brief Prepare a SQL statement
- *
- * @param dbh handle to the database
- * @param sql SQL statement, UTF-8 encoded
- * @param stmt set to the prepared statement
- * @return #GNUNET_OK on success, #GNUNET_SYSERR on failure
- */
-static int
-mysql_prepare (struct GNUNET_MYSQL_Context *mc,
-              const char *sql,
-              struct GNUNET_MYSQL_StatementHandle **stmt)
-{
-  *stmt = GNUNET_MYSQL_statement_prepare (mc,
-                                          sql);
-
-  if (NULL == *stmt)
-  {
-    LOG (GNUNET_ERROR_TYPE_ERROR,
-         _("Error preparing SQL query: %s\n  %s\n"),
-         mysql_stmt_error (GNUNET_MYSQL_statement_get_stmt (*stmt)),
-         sql);
-    return GNUNET_SYSERR;
-  }
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Prepared `%s' / %p\n",
-       sql,
-       stmt);
-  return GNUNET_OK;
-}
-
-
-/**
- * Initialize the database connections and associated
- * data structures (create tables and indices
- * as needed as well).
- *
- * @param plugin the plugin context (state for this module)
- * @return #GNUNET_OK on success
- */
-static int
-database_setup (struct Plugin *plugin)
-{
-  /* Open database and precompile statements */
-  plugin->mc = GNUNET_MYSQL_context_create (plugin->cfg,
-                                            "psycstore-mysql");
-
-  if (NULL == plugin->mc)
-  {
-    LOG (GNUNET_ERROR_TYPE_ERROR,
-         _("Unable to initialize Mysql.\n"));
-    return GNUNET_SYSERR;
-  }
-
-#define STMT_RUN(sql) \
-  if (GNUNET_OK != \
-      GNUNET_MYSQL_statement_run (plugin->mc, \
-                                  sql)) \
-  { \
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, \
-                _("Failed to run SQL statement `%s'\n"), \
-                sql); \
-    return GNUNET_SYSERR; \
-  }
-
-  /* Create tables */
-  STMT_RUN ("CREATE TABLE IF NOT EXISTS channels (\n"
-            " id BIGINT UNSIGNED AUTO_INCREMENT,\n"
-            " pub_key BLOB(32),\n"
-            " max_state_message_id BIGINT UNSIGNED,\n"
-            " state_hash_message_id BIGINT UNSIGNED,\n"
-            " PRIMARY KEY(id),\n"
-            " UNIQUE KEY(pub_key(32))\n"
-            ");");
-
-  STMT_RUN ("CREATE TABLE IF NOT EXISTS slaves (\n"
-            " id BIGINT UNSIGNED AUTO_INCREMENT,\n"
-            " pub_key BLOB(32),\n"
-            " PRIMARY KEY(id),\n"
-            " UNIQUE KEY(pub_key(32))\n"
-            ");");
-
-  STMT_RUN ("CREATE TABLE IF NOT EXISTS membership (\n"
-            "  channel_id BIGINT UNSIGNED NOT NULL REFERENCES channels(id),\n"
-            "  slave_id BIGINT UNSIGNED NOT NULL REFERENCES slaves(id),\n"
-            "  did_join TINYINT NOT NULL,\n"
-            "  announced_at BIGINT UNSIGNED NOT NULL,\n"
-            "  effective_since BIGINT UNSIGNED NOT NULL,\n"
-            "  group_generation BIGINT UNSIGNED NOT NULL\n"
-            ");");
-
-/*** FIX because IF NOT EXISTS doesn't work ***/
-  GNUNET_MYSQL_statement_run (plugin->mc,
-                              "CREATE INDEX idx_membership_channel_id_slave_id "
-                              "ON membership (channel_id, slave_id);");
-
-  /** @todo messages table: add method_name column */
-  STMT_RUN ("CREATE TABLE IF NOT EXISTS messages (\n"
-            "  channel_id BIGINT UNSIGNED NOT NULL REFERENCES channels(id),\n"
-            "  hop_counter BIGINT UNSIGNED NOT NULL,\n"
-            "  signature BLOB,\n"
-            "  purpose BLOB,\n"
-            "  fragment_id BIGINT UNSIGNED NOT NULL,\n"
-            "  fragment_offset BIGINT UNSIGNED NOT NULL,\n"
-                              "  message_id BIGINT UNSIGNED NOT NULL,\n"
-            "  group_generation BIGINT UNSIGNED NOT NULL,\n"
-            "  multicast_flags BIGINT UNSIGNED NOT NULL,\n"
-            "  psycstore_flags BIGINT UNSIGNED NOT NULL,\n"
-            "  data BLOB,\n"
-            "  PRIMARY KEY (channel_id, fragment_id),\n"
-            "  UNIQUE KEY(channel_id, message_id, fragment_offset)\n"
-            ");");
-
-  STMT_RUN ("CREATE TABLE IF NOT EXISTS state (\n"
-            "  channel_id BIGINT UNSIGNED NOT NULL REFERENCES channels(id),\n"
-            "  name TEXT NOT NULL,\n"
-            "  value_current BLOB,\n"
-            "  value_signed BLOB\n"
-            //"  PRIMARY KEY (channel_id, name(255))\n"
-            ");");
-
-  STMT_RUN ("CREATE TABLE IF NOT EXISTS state_sync (\n"
-            "  channel_id BIGINT UNSIGNED NOT NULL REFERENCES channels(id),\n"
-            "  name TEXT NOT NULL,\n"
-            "  value BLOB\n"
-            //"  PRIMARY KEY (channel_id, name(255))\n"
-            ");");
-#undef STMT_RUN
-
-  /* Prepare statements */
-#define PREP(stmt,handle)                                    \
-  if (GNUNET_OK != mysql_prepare (plugin->mc, stmt, handle)) \
-  { \
-    GNUNET_break (0); \
-    return GNUNET_SYSERR; \
-  }
-  PREP ("INSERT IGNORE INTO channels (pub_key) VALUES (?);",
-        &plugin->insert_channel_key);
-  PREP ("INSERT IGNORE INTO slaves (pub_key) VALUES (?);",
-        &plugin->insert_slave_key);
-  PREP ("INSERT INTO membership\n"
-        " (channel_id, slave_id, did_join, announced_at,\n"
-        "  effective_since, group_generation)\n"
-        "VALUES ((SELECT id FROM channels WHERE pub_key = ?),\n"
-        "        (SELECT id FROM slaves WHERE pub_key = ?),\n"
-        "        ?, ?, ?, ?);",
-        &plugin->insert_membership);
-  PREP ("SELECT did_join FROM membership\n"
-        "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?)\n"
-        "      AND slave_id = (SELECT id FROM slaves WHERE pub_key = ?)\n"
-        "      AND effective_since <= ? AND did_join = 1\n"
-        "ORDER BY announced_at DESC LIMIT 1;",
-        &plugin->select_membership);
-
-  PREP ("INSERT IGNORE INTO messages\n"
-        " (channel_id, hop_counter, signature, purpose,\n"
-        "  fragment_id, fragment_offset, message_id,\n"
-        "  group_generation, multicast_flags, psycstore_flags, data)\n"
-        "VALUES ((SELECT id FROM channels WHERE pub_key = ?),\n"
-        "        ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);",
-        &plugin->insert_fragment);
-
-  PREP ("UPDATE messages\n"
-        "SET psycstore_flags = psycstore_flags | ?\n"
-        "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?)\n"
-        "      AND message_id = ? AND fragment_offset = 0;",
-        &plugin->update_message_flags);
-
-  PREP ("SELECT hop_counter, signature, purpose, fragment_id,\n"
-        "       fragment_offset, message_id, group_generation,\n"
-        "       multicast_flags, psycstore_flags, data\n"
-        "FROM messages\n"
-        "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?)\n"
-        "      AND ? <= fragment_id AND fragment_id <= ? LIMIT 1;",
-        &plugin->select_fragments);
-
-  /** @todo select_messages: add method_prefix filter */
-  PREP ("SELECT hop_counter, signature, purpose, fragment_id,\n"
-        "       fragment_offset, message_id, group_generation,\n"
-        "       multicast_flags, psycstore_flags, data\n"
-        "FROM messages\n"
-        "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?)\n"
-        "      AND ? <= message_id AND message_id <= ?\n"
-        "LIMIT ?;",
-        &plugin->select_messages);
-
-  PREP ("SELECT * FROM\n"
-        "(SELECT hop_counter, signature, purpose, fragment_id,\n"
-        "        fragment_offset, message_id, group_generation,\n"
-        "        multicast_flags, psycstore_flags, data\n"
-        " FROM messages\n"
-        " WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?)\n"
-        " ORDER BY fragment_id DESC\n"
-        " LIMIT ?)\n"
-        "ORDER BY fragment_id;",
-        &plugin->select_latest_fragments);
-
-  /** @todo select_latest_messages: add method_prefix filter */
-  PREP ("SELECT hop_counter, signature, purpose, fragment_id,\n"
-        "       fragment_offset, message_id, group_generation,\n"
-        "        multicast_flags, psycstore_flags, data\n"
-        "FROM messages\n"
-        "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?)\n"
-        "      AND message_id IN\n"
-        "      (SELECT message_id\n"
-        "       FROM messages\n"
-        "       WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?)\n"
-        "       GROUP BY message_id\n"
-        "       ORDER BY message_id\n"
-        "       DESC LIMIT ?)\n"
-        "ORDER BY fragment_id;",
-        &plugin->select_latest_messages);
-
-  PREP ("SELECT hop_counter, signature, purpose, fragment_id,\n"
-        "       fragment_offset, message_id, group_generation,\n"
-        "       multicast_flags, psycstore_flags, data\n"
-        "FROM messages\n"
-        "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?)\n"
-        "      AND message_id = ? AND fragment_offset = ?;",
-        &plugin->select_message_fragment);
-
-  PREP ("SELECT fragment_id, message_id, group_generation\n"
-        "FROM messages\n"
-        "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?)\n"
-        "ORDER BY fragment_id DESC LIMIT 1;",
-        &plugin->select_counters_message);
-
-  PREP ("SELECT max_state_message_id\n"
-        "FROM channels\n"
-        "WHERE pub_key = ? AND max_state_message_id IS NOT NULL;",
-        &plugin->select_counters_state);
-
-  PREP ("UPDATE channels\n"
-        "SET max_state_message_id = ?\n"
-        "WHERE pub_key = ?;",
-        &plugin->update_max_state_message_id);
-
-  PREP ("UPDATE channels\n"
-        "SET state_hash_message_id = ?\n"
-        "WHERE pub_key = ?;",
-        &plugin->update_state_hash_message_id);
-
-  PREP ("REPLACE INTO state\n"
-        "  (channel_id, name, value_current, value_signed)\n"
-        "SELECT new.channel_id, new.name, new.value_current, old.value_signed\n"
-        "FROM (SELECT (SELECT id FROM channels WHERE pub_key = ?) AS channel_id,\n"
-        "             (SELECT ?) AS name,\n"
-        "             (SELECT ?) AS value_current\n"
-        "     ) AS new\n"
-        "LEFT JOIN (SELECT channel_id, name, value_signed\n"
-        "           FROM state) AS old\n"
-        "ON new.channel_id = old.channel_id AND new.name = old.name;",
-        &plugin->insert_state_current);
-
-  PREP ("DELETE FROM state\n"
-        "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?)\n"
-        "      AND (value_current IS NULL OR length(value_current) = 0)\n"
-        "      AND (value_signed IS NULL OR length(value_signed) = 0);",
-        &plugin->delete_state_empty);
-
-  PREP ("UPDATE state\n"
-        "SET value_signed = value_current\n"
-        "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?);",
-        &plugin->update_state_signed);
-
-  PREP ("DELETE FROM state\n"
-        "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?);",
-        &plugin->delete_state);
-
-  PREP ("INSERT INTO state_sync (channel_id, name, value)\n"
-        "VALUES ((SELECT id FROM channels WHERE pub_key = ?), ?, ?);",
-        &plugin->insert_state_sync);
-
-  PREP ("INSERT INTO state\n"
-        " (channel_id, name, value_current, value_signed)\n"
-        "SELECT channel_id, name, value, value\n"
-        "FROM state_sync\n"
-        "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?);",
-        &plugin->insert_state_from_sync);
-
-  PREP ("DELETE FROM state_sync\n"
-        "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?);",
-        &plugin->delete_state_sync);
-
-  PREP ("SELECT value_current\n"
-        "FROM state\n"
-        "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?)\n"
-        "      AND name = ?;",
-        &plugin->select_state_one);
-
-  PREP ("SELECT name, value_current\n"
-        "FROM state\n"
-        "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?)\n"
-        "      AND (name = ? OR substr(name, 1, ?) = ?);",
-        &plugin->select_state_prefix);
-
-  PREP ("SELECT name, value_signed\n"
-        "FROM state\n"
-        "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?)"
-        "      AND value_signed IS NOT NULL;",
-        &plugin->select_state_signed);
-#undef PREP
-
-  return GNUNET_OK;
-}
-
-
-/**
- * Shutdown database connection and associate data
- * structures.
- * @param plugin the plugin context (state for this module)
- */
-static void
-database_shutdown (struct Plugin *plugin)
-{
-  GNUNET_MYSQL_context_destroy (plugin->mc);
-}
-
-
-/**
- * Execute a prepared statement with a @a channel_key argument.
- *
- * @param plugin Plugin handle.
- * @param stmt Statement to execute.
- * @param channel_key Public key of the channel.
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-exec_channel (struct Plugin *plugin, struct GNUNET_MYSQL_StatementHandle *stmt,
-              const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key)
-{
-  struct GNUNET_MY_QueryParam params[] = {
-    GNUNET_MY_query_param_auto_from_type (channel_key),
-    GNUNET_MY_query_param_end
-  };
-
-  if (GNUNET_OK != GNUNET_MY_exec_prepared (plugin->mc, stmt, params))
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql exec_channel", stmt);
-  }
-
-  if (0 != mysql_stmt_reset (GNUNET_MYSQL_statement_get_stmt (stmt)))
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql_stmt_reset", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  return GNUNET_OK;
-}
-
-
-/**
- * Begin a transaction.
- */
-static int
-transaction_begin (struct Plugin *plugin, enum Transactions transaction)
-{
-  if (GNUNET_OK != GNUNET_MYSQL_statement_run (plugin->mc, "BEGIN"))
-  {
-    LOG(GNUNET_ERROR_TYPE_ERROR, "transaction_begin failed");
-    return GNUNET_SYSERR;
-  }
-
-  plugin->transaction = transaction;
-  return GNUNET_OK;
-}
-
-
-/**
- * Commit current transaction.
- */
-static int
-transaction_commit (struct Plugin *plugin)
-{
-  if (GNUNET_OK != GNUNET_MYSQL_statement_run (plugin->mc, "COMMIT"))
-  {
-    LOG(GNUNET_ERROR_TYPE_ERROR, "transaction_commit failed");
-    return GNUNET_SYSERR;
-  }
-
-  plugin->transaction = TRANSACTION_NONE;
-  return GNUNET_OK;
-}
-
-
-/**
- * Roll back current transaction.
- */
-static int
-transaction_rollback (struct Plugin *plugin)
-{
-  if (GNUNET_OK != GNUNET_MYSQL_statement_run (plugin->mc, "ROLLBACK"))
-  {
-    LOG(GNUNET_ERROR_TYPE_ERROR, "transaction_rollback failed");
-    return GNUNET_SYSERR;
-  }
-
-  plugin->transaction = TRANSACTION_NONE;
-  return GNUNET_OK;
-}
-
-
-static int
-channel_key_store (struct Plugin *plugin,
-                   const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key)
-{
-  struct GNUNET_MYSQL_StatementHandle *stmt = plugin->insert_channel_key;
-
-  struct GNUNET_MY_QueryParam params[] = {
-    GNUNET_MY_query_param_auto_from_type (channel_key),
-    GNUNET_MY_query_param_end
-  };
-
-  if (GNUNET_OK != GNUNET_MY_exec_prepared (plugin->mc, stmt, params))
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql exec_prepared", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  if (0 != mysql_stmt_reset (GNUNET_MYSQL_statement_get_stmt (stmt)))
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql_stmt_reset", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  return GNUNET_OK;
-}
-
-
-static int
-slave_key_store (struct Plugin *plugin,
-                 const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_key)
-{
-  struct GNUNET_MYSQL_StatementHandle *stmt = plugin->insert_slave_key;
-
-  struct GNUNET_MY_QueryParam params[] = {
-    GNUNET_MY_query_param_auto_from_type (slave_key),
-    GNUNET_MY_query_param_end
-  };
-
-  if (GNUNET_OK != GNUNET_MY_exec_prepared (plugin->mc, stmt, params))
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql exec_prepared", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  if (0 != mysql_stmt_reset (GNUNET_MYSQL_statement_get_stmt (stmt)))
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql_stmt_reset", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  return GNUNET_OK;
-}
-
-
-/**
- * Store join/leave events for a PSYC channel in order to be able to answer
- * membership test queries later.
- *
- * @see GNUNET_PSYCSTORE_membership_store()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-mysql_membership_store (void *cls,
-                         const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                         const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_key,
-                         int did_join,
-                         uint64_t announced_at,
-                         uint64_t effective_since,
-                         uint64_t group_generation)
-{
-  struct Plugin *plugin = cls;
-
-  uint32_t idid_join = (uint32_t)did_join;
-
-  struct GNUNET_MYSQL_StatementHandle *stmt = plugin->insert_membership;
-
-  GNUNET_assert (TRANSACTION_NONE == plugin->transaction);
-
-  if (announced_at > INT64_MAX ||
-      effective_since > INT64_MAX ||
-      group_generation > INT64_MAX)
-  {
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-
-  if (GNUNET_OK != channel_key_store (plugin, channel_key)
-      || GNUNET_OK != slave_key_store (plugin, slave_key))
-    return GNUNET_SYSERR;
-
-  struct GNUNET_MY_QueryParam params[] = {
-    GNUNET_MY_query_param_auto_from_type (channel_key),
-    GNUNET_MY_query_param_auto_from_type (slave_key),
-    GNUNET_MY_query_param_uint32 (&idid_join),
-    GNUNET_MY_query_param_uint64 (&announced_at),
-    GNUNET_MY_query_param_uint64 (&effective_since),
-    GNUNET_MY_query_param_uint64 (&group_generation),
-    GNUNET_MY_query_param_end
-  };
-
-  if (GNUNET_OK != GNUNET_MY_exec_prepared (plugin->mc, stmt, params))
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql exec_prepared", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  if (0 != mysql_stmt_reset (GNUNET_MYSQL_statement_get_stmt (stmt)))
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql_stmt_reset", stmt);
-    return GNUNET_SYSERR;
-  }
-  return GNUNET_OK;
-}
-
-/**
- * Test if a member was admitted to the channel at the given message ID.
- *
- * @see GNUNET_PSYCSTORE_membership_test()
- *
- * @return #GNUNET_YES if the member was admitted, #GNUNET_NO if not,
- *         #GNUNET_SYSERR if there was en error.
- */
-static int
-membership_test (void *cls,
-                 const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                 const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_key,
-                 uint64_t message_id)
-{
-  struct Plugin *plugin = cls;
-
-  struct GNUNET_MYSQL_StatementHandle *stmt = plugin->select_membership;
-
-  uint32_t did_join = 0;
-
-  int ret = GNUNET_SYSERR;
-
-  struct GNUNET_MY_QueryParam params_select[] = {
-    GNUNET_MY_query_param_auto_from_type (channel_key),
-    GNUNET_MY_query_param_auto_from_type (slave_key),
-    GNUNET_MY_query_param_uint64 (&message_id),
-    GNUNET_MY_query_param_end
-  };
-
-  if (GNUNET_OK != GNUNET_MY_exec_prepared (plugin->mc, stmt, params_select))
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "mysql execute prepared", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  struct GNUNET_MY_ResultSpec results_select[] = {
-    GNUNET_MY_result_spec_uint32 (&did_join),
-    GNUNET_MY_result_spec_end
-  };
-
-  switch (GNUNET_MY_extract_result (stmt, results_select))
-  {
-    case GNUNET_NO:
-      ret = GNUNET_NO;
-      break;
-    case GNUNET_OK:
-      ret = GNUNET_YES;
-      break;
-    default:
-      LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "mysql extract_result", stmt);
-      return GNUNET_SYSERR;
-  }
-
-  if (0 != mysql_stmt_reset (GNUNET_MYSQL_statement_get_stmt (stmt)))
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql_stmt_reset", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  return ret;
-}
-
-/**
- * Store a message fragment sent to a channel.
- *
- * @see GNUNET_PSYCSTORE_fragment_store()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-fragment_store (void *cls,
-                const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                const struct GNUNET_MULTICAST_MessageHeader *msg,
-                uint32_t psycstore_flags)
-{
-  struct Plugin *plugin = cls;
-
-  struct GNUNET_MYSQL_StatementHandle *stmt = plugin->insert_fragment;
-
-  GNUNET_assert (TRANSACTION_NONE == plugin->transaction);
-
-  uint64_t fragment_id = GNUNET_ntohll (msg->fragment_id);
-
-  uint64_t fragment_offset = GNUNET_ntohll (msg->fragment_offset);
-  uint64_t message_id = GNUNET_ntohll (msg->message_id);
-  uint64_t group_generation = GNUNET_ntohll (msg->group_generation);
-
-  uint64_t hop_counter = ntohl(msg->hop_counter);
-  uint64_t flags = ntohl(msg->flags);
-
-  if (fragment_id > INT64_MAX || fragment_offset > INT64_MAX ||
-      message_id > INT64_MAX || group_generation > INT64_MAX)
-  {
-    LOG(GNUNET_ERROR_TYPE_ERROR,
-         "Tried to store fragment with a field > INT64_MAX: "
-         "%lu, %lu, %lu, %lu\n", fragment_id, fragment_offset,
-         message_id, group_generation);
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-
-  if (GNUNET_OK != channel_key_store (plugin, channel_key))
-    return GNUNET_SYSERR;
-
-  struct GNUNET_MY_QueryParam params_insert[] = {
-    GNUNET_MY_query_param_auto_from_type (channel_key),
-    GNUNET_MY_query_param_uint64 (&hop_counter),
-    GNUNET_MY_query_param_auto_from_type (&msg->signature),
-    GNUNET_MY_query_param_auto_from_type (&msg->purpose),
-    GNUNET_MY_query_param_uint64 (&fragment_id),
-    GNUNET_MY_query_param_uint64 (&fragment_offset),
-    GNUNET_MY_query_param_uint64 (&message_id),
-    GNUNET_MY_query_param_uint64 (&group_generation),
-    GNUNET_MY_query_param_uint64 (&flags),
-    GNUNET_MY_query_param_uint32 (&psycstore_flags),
-    GNUNET_MY_query_param_fixed_size (&msg[1], ntohs (msg->header.size)
-                                                  - sizeof (*msg)),
-    GNUNET_MY_query_param_end
-  };
-
-  if (GNUNET_OK != GNUNET_MY_exec_prepared (plugin->mc, stmt, params_insert))
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql execute prepared", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  if (0 != mysql_stmt_reset (GNUNET_MYSQL_statement_get_stmt (stmt)))
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql_stmt_reset", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  return GNUNET_OK;
-}
-
-/**
- * Set additional flags for a given message.
- *
- * They are OR'd with any existing flags set.
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-message_add_flags (void *cls,
-                   const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                   uint64_t message_id,
-                   uint32_t psycstore_flags)
-{
-  struct Plugin *plugin = cls;
-  struct GNUNET_MYSQL_StatementHandle *stmt = plugin->update_message_flags;
-
-  int sql_ret;
-  int ret = GNUNET_SYSERR;
-
-  struct GNUNET_MY_QueryParam params_update[] = {
-    GNUNET_MY_query_param_uint32 (&psycstore_flags),
-    GNUNET_MY_query_param_auto_from_type (channel_key),
-    GNUNET_MY_query_param_uint64 (&message_id),
-    GNUNET_MY_query_param_end
-  };
-
-  sql_ret = GNUNET_MY_exec_prepared (plugin->mc, stmt, params_update);
-  switch (sql_ret)
-  {
-    case GNUNET_OK:
-      ret = GNUNET_OK;
-      break;
-
-    default:
-       LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql execute prepared", stmt);
-  }
-
-  if (0 != mysql_stmt_reset (GNUNET_MYSQL_statement_get_stmt (stmt)))
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql_stmt_reset", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  return ret;
-}
-
-
-static int
-fragment_row (struct GNUNET_MYSQL_StatementHandle *stmt,
-              GNUNET_PSYCSTORE_FragmentCallback cb,
-              void *cb_cls,
-              uint64_t *returned_fragments)
-{
-
-  uint32_t hop_counter;
-  void *signature = NULL;
-  void *purpose = NULL;
-  size_t signature_size;
-  size_t purpose_size;
-  uint64_t fragment_id;
-  uint64_t fragment_offset;
-  uint64_t message_id;
-  uint64_t group_generation;
-  uint64_t flags;
-  void *buf;
-  size_t buf_size;
-  int ret = GNUNET_SYSERR;
-  int sql_ret;
-  struct GNUNET_MULTICAST_MessageHeader *mp;
-  uint64_t msg_flags;
-  struct GNUNET_MY_ResultSpec results[] = {
-    GNUNET_MY_result_spec_uint32 (&hop_counter),
-    GNUNET_MY_result_spec_variable_size (&signature, &signature_size),
-    GNUNET_MY_result_spec_variable_size (&purpose, &purpose_size),
-    GNUNET_MY_result_spec_uint64 (&fragment_id),
-    GNUNET_MY_result_spec_uint64 (&fragment_offset),
-    GNUNET_MY_result_spec_uint64 (&message_id),
-    GNUNET_MY_result_spec_uint64 (&group_generation),
-    GNUNET_MY_result_spec_uint64 (&msg_flags),
-    GNUNET_MY_result_spec_uint64 (&flags),
-    GNUNET_MY_result_spec_variable_size (&buf,
-                                         &buf_size),
-    GNUNET_MY_result_spec_end
-  };
-
-  do
-  {
-    sql_ret = GNUNET_MY_extract_result (stmt, results);
-    switch (sql_ret)
-    {
-    case GNUNET_NO:
-      if (ret != GNUNET_YES)
-        ret = GNUNET_NO;
-      break;
-
-    case GNUNET_YES:
-      mp = GNUNET_malloc (sizeof (*mp) + buf_size);
-
-      mp->header.size = htons (sizeof (*mp) + buf_size);
-      mp->header.type = htons (GNUNET_MESSAGE_TYPE_MULTICAST_MESSAGE);
-      mp->hop_counter = htonl (hop_counter);
-      GNUNET_memcpy (&mp->signature,
-                     signature,
-                     signature_size);
-      GNUNET_memcpy (&mp->purpose,
-                     purpose,
-                     purpose_size);
-      mp->fragment_id = GNUNET_htonll (fragment_id);
-      mp->fragment_offset = GNUNET_htonll (fragment_offset);
-      mp->message_id = GNUNET_htonll (message_id);
-      mp->group_generation = GNUNET_htonll (group_generation);
-      mp->flags = htonl(msg_flags);
-
-      GNUNET_memcpy (&mp[1],
-                     buf,
-                     buf_size);
-      ret = cb (cb_cls, mp, (enum GNUNET_PSYCSTORE_MessageFlags) flags);
-      if (NULL != returned_fragments)
-        (*returned_fragments)++;
-      GNUNET_MY_cleanup_result (results);
-      break;
-
-    default:
-      LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                 "mysql extract_result", stmt);
-    }
-  }
-  while (GNUNET_YES == sql_ret);
-
-  // for debugging
-  if (GNUNET_NO == ret)
-    GNUNET_log (GNUNET_ERROR_TYPE_WARNING | GNUNET_ERROR_TYPE_BULK,
-               "Empty result set\n");
-
-  return ret;
-}
-
-
-static int
-fragment_select (struct Plugin *plugin,
-                 struct GNUNET_MYSQL_StatementHandle *stmt,
-                 struct GNUNET_MY_QueryParam *params,
-                 uint64_t *returned_fragments,
-                 GNUNET_PSYCSTORE_FragmentCallback cb,
-                 void *cb_cls)
-{
-  int ret = GNUNET_SYSERR;
-  int sql_ret;
-
-  sql_ret = GNUNET_MY_exec_prepared (plugin->mc, stmt, params);
-  switch (sql_ret)
-  {
-    case GNUNET_NO:
-      if (ret != GNUNET_YES)
-        ret = GNUNET_NO;
-      break;
-
-    case GNUNET_YES:
-      ret = fragment_row (stmt, cb, cb_cls, returned_fragments);
-      break;
-
-    default:
-      LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                 "mysql exec_prepared", stmt);
-  }
-  return ret;
-}
-
-
-/**
- * Retrieve a message fragment range by fragment ID.
- *
- * @see GNUNET_PSYCSTORE_fragment_get()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-fragment_get (void *cls,
-              const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-              uint64_t first_fragment_id,
-              uint64_t last_fragment_id,
-              uint64_t *returned_fragments,
-              GNUNET_PSYCSTORE_FragmentCallback cb,
-              void *cb_cls)
-{
-  struct Plugin *plugin = cls;
-  struct GNUNET_MYSQL_StatementHandle *stmt = plugin->select_fragments;
-  int ret = GNUNET_SYSERR;
-  struct GNUNET_MY_QueryParam params_select[] = {
-    GNUNET_MY_query_param_auto_from_type (channel_key),
-    GNUNET_MY_query_param_uint64 (&first_fragment_id),
-    GNUNET_MY_query_param_uint64 (&last_fragment_id),
-    GNUNET_MY_query_param_end
-  };
-
-  *returned_fragments = 0;
-  ret = fragment_select (plugin, stmt, params_select, returned_fragments, cb, cb_cls);
-
-  if (0 != mysql_stmt_reset (GNUNET_MYSQL_statement_get_stmt (stmt)))
-  {
-    LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql_stmt_reset", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  return ret;
-}
-
-
-/**
- * Retrieve a message fragment range by fragment ID.
- *
- * @see GNUNET_PSYCSTORE_fragment_get_latest()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-fragment_get_latest (void *cls,
-                     const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                     uint64_t fragment_limit,
-                     uint64_t *returned_fragments,
-                     GNUNET_PSYCSTORE_FragmentCallback cb,
-                     void *cb_cls)
-{
-  struct Plugin *plugin = cls;
-
-  struct GNUNET_MYSQL_StatementHandle *stmt = plugin->select_latest_fragments;
-
-  int ret = GNUNET_SYSERR;
-  *returned_fragments = 0;
-
-  struct GNUNET_MY_QueryParam params_select[] = {
-    GNUNET_MY_query_param_auto_from_type (channel_key),
-    GNUNET_MY_query_param_uint64 (&fragment_limit),
-    GNUNET_MY_query_param_end
-  };
-
-  ret = fragment_select (plugin, stmt, params_select, returned_fragments, cb, cb_cls);
-
-  if (0 != mysql_stmt_reset (GNUNET_MYSQL_statement_get_stmt (stmt)))
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql_stmt_reset", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  return ret;
-}
-
-
-/**
- * Retrieve all fragments of a message ID range.
- *
- * @see GNUNET_PSYCSTORE_message_get()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-message_get (void *cls,
-             const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-             uint64_t first_message_id,
-             uint64_t last_message_id,
-             uint64_t fragment_limit,
-             uint64_t *returned_fragments,
-             GNUNET_PSYCSTORE_FragmentCallback cb,
-             void *cb_cls)
-{
-  struct Plugin *plugin = cls;
-  struct GNUNET_MYSQL_StatementHandle *stmt = plugin->select_messages;
-  int ret;
-
-  if (0 == fragment_limit)
-    fragment_limit = UINT64_MAX;
-
-  struct GNUNET_MY_QueryParam params_select[] = {
-    GNUNET_MY_query_param_auto_from_type (channel_key),
-    GNUNET_MY_query_param_uint64 (&first_message_id),
-    GNUNET_MY_query_param_uint64 (&last_message_id),
-    GNUNET_MY_query_param_uint64 (&fragment_limit),
-    GNUNET_MY_query_param_end
-  };
-
-  *returned_fragments = 0;
-  ret = fragment_select (plugin, stmt, params_select, returned_fragments, cb, cb_cls);
-
-  if (0 != mysql_stmt_reset (GNUNET_MYSQL_statement_get_stmt (stmt)))
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql_stmt_reset", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  return ret;
-}
-
-
-/**
- * Retrieve all fragments of the latest messages.
- *
- * @see GNUNET_PSYCSTORE_message_get_latest()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-message_get_latest (void *cls,
-                    const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                    uint64_t message_limit,
-                    uint64_t *returned_fragments,
-                    GNUNET_PSYCSTORE_FragmentCallback cb,
-                    void *cb_cls)
-{
-  struct Plugin *plugin = cls;
-
-  struct GNUNET_MYSQL_StatementHandle *stmt = plugin->select_latest_messages;
-
-  int ret = GNUNET_SYSERR;
-  *returned_fragments = 0;
-
-  struct GNUNET_MY_QueryParam params_select[] = {
-    GNUNET_MY_query_param_auto_from_type (channel_key),
-    GNUNET_MY_query_param_auto_from_type (channel_key),
-    GNUNET_MY_query_param_uint64 (&message_limit),
-    GNUNET_MY_query_param_end
-  };
-
-  ret = fragment_select (plugin, stmt, params_select, returned_fragments, cb, cb_cls);
-
-  if (0 != mysql_stmt_reset (GNUNET_MYSQL_statement_get_stmt (stmt)))
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql_stmt_reset", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  return ret;
-}
-
-
-/**
- * Retrieve a fragment of message specified by its message ID and fragment
- * offset.
- *
- * @see GNUNET_PSYCSTORE_message_get_fragment()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-message_get_fragment (void *cls,
-                      const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                      uint64_t message_id,
-                      uint64_t fragment_offset,
-                      GNUNET_PSYCSTORE_FragmentCallback cb,
-                      void *cb_cls)
-{
-  struct Plugin *plugin = cls;
-  struct GNUNET_MYSQL_StatementHandle *stmt = plugin->select_message_fragment;
-  int sql_ret;
-  int ret = GNUNET_SYSERR;
-
-  struct GNUNET_MY_QueryParam params_select[] = {
-    GNUNET_MY_query_param_auto_from_type (channel_key),
-    GNUNET_MY_query_param_uint64 (&message_id),
-    GNUNET_MY_query_param_uint64 (&fragment_offset),
-    GNUNET_MY_query_param_end
-  };
-
-  sql_ret = GNUNET_MY_exec_prepared (plugin->mc, stmt, params_select);
-  switch (sql_ret)
-  {
-    case GNUNET_NO:
-      ret = GNUNET_NO;
-      break;
-
-    case GNUNET_OK:
-      ret = fragment_row (stmt, cb, cb_cls, NULL);
-      break;
-
-    default:
-      LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql execute prepared", stmt);
-  }
-
-  if (0 != mysql_stmt_reset (GNUNET_MYSQL_statement_get_stmt (stmt)))
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql_stmt_reset", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  return ret;
-}
-
-/**
- * Retrieve the max. values of message counters for a channel.
- *
- * @see GNUNET_PSYCSTORE_counters_get()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-counters_message_get (void *cls,
-                      const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                      uint64_t *max_fragment_id,
-                      uint64_t *max_message_id,
-                      uint64_t *max_group_generation)
-{
-  struct Plugin *plugin = cls;
-
-  struct GNUNET_MYSQL_StatementHandle *stmt = plugin->select_counters_message;
-
-  int ret = GNUNET_SYSERR;
-
-  struct GNUNET_MY_QueryParam params_select[] = {
-    GNUNET_MY_query_param_auto_from_type (channel_key),
-    GNUNET_MY_query_param_end
-  };
-
-  if (GNUNET_OK != GNUNET_MY_exec_prepared (plugin->mc, stmt, params_select))
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql execute prepared", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  struct GNUNET_MY_ResultSpec results_select[] = {
-    GNUNET_MY_result_spec_uint64 (max_fragment_id),
-    GNUNET_MY_result_spec_uint64 (max_message_id),
-    GNUNET_MY_result_spec_uint64 (max_group_generation),
-    GNUNET_MY_result_spec_end
-  };
-
-  ret = GNUNET_MY_extract_result (stmt, results_select);
-
-  if (GNUNET_OK != ret)
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql extract_result", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  if (0 != mysql_stmt_reset (GNUNET_MYSQL_statement_get_stmt (stmt)))
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql_stmt_reset", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  return ret;
-}
-
-/**
- * Retrieve the max. values of state counters for a channel.
- *
- * @see GNUNET_PSYCSTORE_counters_get()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-counters_state_get (void *cls,
-                    const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                    uint64_t *max_state_message_id)
-{
-  struct Plugin *plugin = cls;
-
-  struct GNUNET_MYSQL_StatementHandle *stmt = plugin->select_counters_state;
-
-  int ret = GNUNET_SYSERR;
-
-  struct GNUNET_MY_QueryParam params_select[] = {
-    GNUNET_MY_query_param_auto_from_type (channel_key),
-    GNUNET_MY_query_param_end
-  };
-
-  if (GNUNET_OK != GNUNET_MY_exec_prepared (plugin->mc, stmt, params_select))
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql execute prepared", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  struct GNUNET_MY_ResultSpec results_select[] = {
-    GNUNET_MY_result_spec_uint64 (max_state_message_id),
-    GNUNET_MY_result_spec_end
-  };
-
-  ret = GNUNET_MY_extract_result (stmt, results_select);
-
-  if (GNUNET_OK != ret)
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql extract_result", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  if (0 != mysql_stmt_reset (GNUNET_MYSQL_statement_get_stmt (stmt)))
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql_stmt_reset", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  return ret;
-}
-
-
-/**
- * Assign a value to a state variable.
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-state_assign (struct Plugin *plugin, struct GNUNET_MYSQL_StatementHandle *stmt,
-              const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-              const char *name, const void *value, size_t value_size)
-{
-  int ret = GNUNET_SYSERR;
-
-  struct GNUNET_MY_QueryParam params[] = {
-    GNUNET_MY_query_param_auto_from_type (channel_key),
-    GNUNET_MY_query_param_string (name),
-    GNUNET_MY_query_param_fixed_size(value, value_size),
-    GNUNET_MY_query_param_end
-  };
-
-  ret = GNUNET_MY_exec_prepared (plugin->mc, stmt, params);
-  if (GNUNET_OK != ret)
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql exec_prepared", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  if (0 != mysql_stmt_reset (GNUNET_MYSQL_statement_get_stmt (stmt)))
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql_stmt_reset", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  return ret;
-}
-
-
-static int
-update_message_id (struct Plugin *plugin, struct GNUNET_MYSQL_StatementHandle *stmt,
-                   const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                   uint64_t message_id)
-{
-  struct GNUNET_MY_QueryParam params[] = {
-    GNUNET_MY_query_param_uint64 (&message_id),
-    GNUNET_MY_query_param_auto_from_type (channel_key),
-    GNUNET_MY_query_param_end
-  };
-
-  if (GNUNET_OK != GNUNET_MY_exec_prepared (plugin->mc,
-                                            stmt,
-                                            params))
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql execute prepared", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  if (0 != mysql_stmt_reset (GNUNET_MYSQL_statement_get_stmt (stmt)))
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql_stmt_reset", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  return GNUNET_OK;
-}
-
-
-/**
- * Begin modifying current state.
- */
-static int
-state_modify_begin (void *cls,
-                    const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                    uint64_t message_id, uint64_t state_delta)
-{
-  struct Plugin *plugin = cls;
-
-  if (state_delta > 0)
-  {
-    /**
-     * We can only apply state modifiers in the current message if modifiers in
-     * the previous stateful message (message_id - state_delta) were already
-     * applied.
-     */
-
-    uint64_t max_state_message_id = 0;
-    int ret = counters_state_get (plugin, channel_key, &max_state_message_id);
-    switch (ret)
-    {
-    case GNUNET_OK:
-    case GNUNET_NO: // no state yet
-      ret = GNUNET_OK;
-      break;
-    default:
-      return ret;
-    }
-
-    if (max_state_message_id < message_id - state_delta)
-      return GNUNET_NO; /* some stateful messages not yet applied */
-    else if (message_id - state_delta < max_state_message_id)
-      return GNUNET_NO; /* changes already applied */
-  }
-
-  if (TRANSACTION_NONE != plugin->transaction)
-  {
-    /** @todo FIXME: wait for other transaction to finish  */
-    return GNUNET_SYSERR;
-  }
-  return transaction_begin (plugin, TRANSACTION_STATE_MODIFY);
-}
-
-
-/**
- * Set the current value of state variable.
- *
- * @see GNUNET_PSYCSTORE_state_modify()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-state_modify_op (void *cls,
-                 const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                 enum GNUNET_PSYC_Operator op,
-                 const char *name, const void *value, size_t value_size)
-{
-  struct Plugin *plugin = cls;
-  GNUNET_assert (TRANSACTION_STATE_MODIFY == plugin->transaction);
-
-  switch (op)
-  {
-  case GNUNET_PSYC_OP_ASSIGN:
-    return state_assign (plugin, plugin->insert_state_current,
-                         channel_key, name, value, value_size);
-
-  default: /** @todo implement more state operations */
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-}
-
-
-/**
- * End modifying current state.
- */
-static int
-state_modify_end (void *cls,
-                  const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                  uint64_t message_id)
-{
-  struct Plugin *plugin = cls;
-  GNUNET_assert (TRANSACTION_STATE_MODIFY == plugin->transaction);
-
-  return
-    GNUNET_OK == exec_channel (plugin, plugin->delete_state_empty, channel_key)
-    && GNUNET_OK == update_message_id (plugin,
-                                       plugin->update_max_state_message_id,
-                                       channel_key, message_id)
-    && GNUNET_OK == transaction_commit (plugin)
-    ? GNUNET_OK : GNUNET_SYSERR;
-}
-
-
-/**
- * Begin state synchronization.
- */
-static int
-state_sync_begin (void *cls,
-                  const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key)
-{
-  struct Plugin *plugin = cls;
-  return exec_channel (plugin, plugin->delete_state_sync, channel_key);
-}
-
-
-/**
- * Assign current value of a state variable.
- *
- * @see GNUNET_PSYCSTORE_state_modify()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-state_sync_assign (void *cls,
-                const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                const char *name, const void *value, size_t value_size)
-{
-  struct Plugin *plugin = cls;
-  return state_assign (cls, plugin->insert_state_sync,
-                       channel_key, name, value, value_size);
-}
-
-
-/**
- * End modifying current state.
- */
-static int
-state_sync_end (void *cls,
-                const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                uint64_t max_state_message_id,
-                uint64_t state_hash_message_id)
-{
-  struct Plugin *plugin = cls;
-  int ret = GNUNET_SYSERR;
-
-  if (TRANSACTION_NONE != plugin->transaction)
-  {
-    /** @todo FIXME: wait for other transaction to finish  */
-    return GNUNET_SYSERR;
-  }
-
-  GNUNET_OK == transaction_begin (plugin, TRANSACTION_STATE_SYNC)
-    && GNUNET_OK == exec_channel (plugin, plugin->delete_state, channel_key)
-    && GNUNET_OK == exec_channel (plugin, plugin->insert_state_from_sync,
-                                  channel_key)
-    && GNUNET_OK == exec_channel (plugin, plugin->delete_state_sync,
-                                  channel_key)
-    && GNUNET_OK == update_message_id (plugin,
-                                       plugin->update_state_hash_message_id,
-                                       channel_key, state_hash_message_id)
-    && GNUNET_OK == update_message_id (plugin,
-                                       plugin->update_max_state_message_id,
-                                       channel_key, max_state_message_id)
-    && GNUNET_OK == transaction_commit (plugin)
-    ? ret = GNUNET_OK
-    : transaction_rollback (plugin);
-  return ret;
-}
-
-
-/**
- * Delete the whole state.
- *
- * @see GNUNET_PSYCSTORE_state_reset()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-state_reset (void *cls, const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key)
-{
-  struct Plugin *plugin = cls;
-  return exec_channel (plugin, plugin->delete_state, channel_key);
-}
-
-
-/**
- * Update signed values of state variables in the state store.
- *
- * @see GNUNET_PSYCSTORE_state_hash_update()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-state_update_signed (void *cls,
-                     const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key)
-{
-  struct Plugin *plugin = cls;
-  return exec_channel (plugin, plugin->update_state_signed, channel_key);
-}
-
-
-/**
- * Retrieve a state variable by name.
- *
- * @see GNUNET_PSYCSTORE_state_get()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-state_get (void *cls, const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-           const char *name, GNUNET_PSYCSTORE_StateCallback cb, void *cb_cls)
-{
-  struct Plugin *plugin = cls;
-  int ret = GNUNET_SYSERR;
-  int sql_ret ;
-
-  struct GNUNET_MYSQL_StatementHandle *stmt = plugin->select_state_one;
-
-  struct GNUNET_MY_QueryParam params_select[] = {
-    GNUNET_MY_query_param_auto_from_type (channel_key),
-    GNUNET_MY_query_param_string (name),
-    GNUNET_MY_query_param_end
-  };
-
-  void *value_current = NULL;
-  size_t value_size = 0;
-
-  struct GNUNET_MY_ResultSpec results[] = {
-    GNUNET_MY_result_spec_variable_size (&value_current, &value_size),
-    GNUNET_MY_result_spec_end
-  };
-
-  if (GNUNET_OK != GNUNET_MY_exec_prepared (plugin->mc, stmt, params_select))
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql exec_prepared", stmt);
-  }
-  else
-  {
-    sql_ret = GNUNET_MY_extract_result (stmt, results);
-    switch (sql_ret)
-    {
-    case GNUNET_NO:
-      ret = GNUNET_NO;
-      break;
-
-    case GNUNET_YES:
-      ret = cb (cb_cls, name, value_current, value_size);
-      break;
-
-    default:
-      LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "mysql extract_result", stmt);
-    }
-  }
-
-  if (0 != mysql_stmt_reset (GNUNET_MYSQL_statement_get_stmt (stmt)))
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql_stmt_reset", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  return ret;
-}
-
-
-/**
- * Retrieve all state variables for a channel with the given prefix.
- *
- * @see GNUNET_PSYCSTORE_state_get_prefix()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-state_get_prefix (void *cls, const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                  const char *name, GNUNET_PSYCSTORE_StateCallback cb,
-                  void *cb_cls)
-{
-  struct Plugin *plugin = cls;
-  int ret = GNUNET_SYSERR;
-
-  struct GNUNET_MYSQL_StatementHandle *stmt = plugin->select_state_prefix;
-
-  uint32_t name_len = (uint32_t) strlen (name);
-
-  struct GNUNET_MY_QueryParam params_select[] = {
-    GNUNET_MY_query_param_auto_from_type (channel_key),
-    GNUNET_MY_query_param_string (name),
-    GNUNET_MY_query_param_uint32 (&name_len),
-    GNUNET_MY_query_param_string (name),
-    GNUNET_MY_query_param_end
-  };
-
-  char *name2 = "";
-  void *value_current = NULL;
-  size_t value_size = 0;
-
-  struct GNUNET_MY_ResultSpec results[] = {
-    GNUNET_MY_result_spec_string (&name2),
-    GNUNET_MY_result_spec_variable_size (&value_current, &value_size),
-    GNUNET_MY_result_spec_end
-  };;
-
-  int sql_ret;
-
-  if (GNUNET_OK != GNUNET_MY_exec_prepared (plugin->mc, stmt, params_select))
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql exec_prepared", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  do
-  {
-    sql_ret = GNUNET_MY_extract_result (stmt, results);
-    switch (sql_ret)
-    {
-      case GNUNET_NO:
-        if (ret != GNUNET_YES)
-          ret = GNUNET_NO;
-        break;
-
-      case GNUNET_YES:
-        ret = cb (cb_cls, (const char *) name2, value_current, value_size);
-
-        if (ret != GNUNET_YES)
-          sql_ret = GNUNET_NO;
-        break;
-
-      default:
-        LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                  "mysql extract_result", stmt);
-    }
-  }
-  while (sql_ret == GNUNET_YES);
-
-  if (0 != mysql_stmt_reset (GNUNET_MYSQL_statement_get_stmt (stmt)))
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql_stmt_reset", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  return ret;
-}
-
-
-/**
- * Retrieve all signed state variables for a channel.
- *
- * @see GNUNET_PSYCSTORE_state_get_signed()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-state_get_signed (void *cls,
-                  const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                  GNUNET_PSYCSTORE_StateCallback cb, void *cb_cls)
-{
-  struct Plugin *plugin = cls;
-  int ret = GNUNET_SYSERR;
-
-  struct GNUNET_MYSQL_StatementHandle *stmt = plugin->select_state_signed;
-
-  struct GNUNET_MY_QueryParam params_select[] = {
-    GNUNET_MY_query_param_auto_from_type (channel_key),
-    GNUNET_MY_query_param_end
-  };
-
-  int sql_ret;
-
-  char *name = "";
-  void *value_signed = NULL;
-  size_t value_size = 0;
-
-  struct GNUNET_MY_ResultSpec results[] = {
-    GNUNET_MY_result_spec_string (&name),
-    GNUNET_MY_result_spec_variable_size (&value_signed, &value_size),
-    GNUNET_MY_result_spec_end
-  };
-
-  if (GNUNET_OK != GNUNET_MY_exec_prepared (plugin->mc, stmt, params_select))
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql exec_prepared", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  do
-  {
-    sql_ret = GNUNET_MY_extract_result (stmt, results);
-    switch (sql_ret)
-    {
-      case GNUNET_NO:
-        if (ret != GNUNET_YES)
-          ret = GNUNET_NO;
-        break;
-
-      case GNUNET_YES:
-        ret = cb (cb_cls, (const char *) name, value_signed, value_size);
-
-        if (ret != GNUNET_YES)
-            sql_ret = GNUNET_NO;
-        break;
-
-      default:
-         LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql extract_result", stmt);
-    }
-  }
-  while (sql_ret == GNUNET_YES);
-
-  if (0 != mysql_stmt_reset (GNUNET_MYSQL_statement_get_stmt (stmt)))
-  {
-    LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-              "mysql_stmt_reset", stmt);
-    return GNUNET_SYSERR;
-  }
-
-  return ret;
-}
-
-
-/**
- * Entry point for the plugin.
- *
- * @param cls The struct GNUNET_CONFIGURATION_Handle.
- * @return NULL on error, otherwise the plugin context
- */
-void *
-libgnunet_plugin_psycstore_mysql_init (void *cls)
-{
-  static struct Plugin plugin;
-  const struct GNUNET_CONFIGURATION_Handle *cfg = cls;
-  struct GNUNET_PSYCSTORE_PluginFunctions *api;
-
-  if (NULL != plugin.cfg)
-    return NULL;                /* can only initialize once! */
-  memset (&plugin, 0, sizeof (struct Plugin));
-  plugin.cfg = cfg;
-  if (GNUNET_OK != database_setup (&plugin))
-  {
-    database_shutdown (&plugin);
-    return NULL;
-  }
-  api = GNUNET_new (struct GNUNET_PSYCSTORE_PluginFunctions);
-  api->cls = &plugin;
-  api->membership_store = &mysql_membership_store;
-  api->membership_test = &membership_test;
-  api->fragment_store = &fragment_store;
-  api->message_add_flags = &message_add_flags;
-  api->fragment_get = &fragment_get;
-  api->fragment_get_latest = &fragment_get_latest;
-  api->message_get = &message_get;
-  api->message_get_latest = &message_get_latest;
-  api->message_get_fragment = &message_get_fragment;
-  api->counters_message_get = &counters_message_get;
-  api->counters_state_get = &counters_state_get;
-  api->state_modify_begin = &state_modify_begin;
-  api->state_modify_op = &state_modify_op;
-  api->state_modify_end = &state_modify_end;
-  api->state_sync_begin = &state_sync_begin;
-  api->state_sync_assign = &state_sync_assign;
-  api->state_sync_end = &state_sync_end;
-  api->state_reset = &state_reset;
-  api->state_update_signed = &state_update_signed;
-  api->state_get = &state_get;
-  api->state_get_prefix = &state_get_prefix;
-  api->state_get_signed = &state_get_signed;
-
-  LOG (GNUNET_ERROR_TYPE_INFO, _("Mysql database running\n"));
-  return api;
-}
-
-
-/**
- * Exit point from the plugin.
- *
- * @param cls The plugin context (as returned by "init")
- * @return Always NULL
- */
-void *
-libgnunet_plugin_psycstore_mysql_done (void *cls)
-{
-  struct GNUNET_PSYCSTORE_PluginFunctions *api = cls;
-  struct Plugin *plugin = api->cls;
-
-  database_shutdown (plugin);
-  plugin->cfg = NULL;
-  GNUNET_free (api);
-  LOG (GNUNET_ERROR_TYPE_DEBUG, "Mysql plugin is finished\n");
-  return NULL;
-}
-
-/* end of plugin_psycstore_mysql.c */
diff --git a/src/psycstore/plugin_psycstore_postgres.c b/src/psycstore/plugin_psycstore_postgres.c
deleted file mode 100644 (file)
index 33c9960..0000000
+++ /dev/null
@@ -1,1530 +0,0 @@
-/*
- * This file is part of GNUnet
- * Copyright (C) 2016 GNUnet e.V.
- *
- * GNUnet is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNUnet is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
- */
-
-/**
- * @file psycstore/plugin_psycstore_postgres.c
- * @brief PostgresQL-based psycstore backend
- * @author Daniel Golle
- * @author Gabor X Toth
- * @author Christian Grothoff
- * @author Christophe Genevey
- * @author Jeffrey Burdges
- */
-
-#include "platform.h"
-#include "gnunet_psycstore_plugin.h"
-#include "gnunet_psycstore_service.h"
-#include "gnunet_multicast_service.h"
-#include "gnunet_crypto_lib.h"
-#include "gnunet_psyc_util_lib.h"
-#include "psycstore.h"
-#include "gnunet_pq_lib.h"
-
-/**
- * After how many ms "busy" should a DB operation fail for good?  A
- * low value makes sure that we are more responsive to requests
- * (especially PUTs).  A high value guarantees a higher success rate
- * (SELECTs in iterate can take several seconds despite LIMIT=1).
- *
- * The default value of 1s should ensure that users do not experience
- * huge latencies while at the same time allowing operations to
- * succeed with reasonable probability.
- */
-#define BUSY_TIMEOUT_MS 1000
-
-#define DEBUG_PSYCSTORE GNUNET_EXTRA_LOGGING
-
-#define LOG(kind,...) GNUNET_log_from (kind, "psycstore-postgres", __VA_ARGS__)
-
-enum Transactions {
-  TRANSACTION_NONE = 0,
-  TRANSACTION_STATE_MODIFY,
-  TRANSACTION_STATE_SYNC,
-};
-
-/**
- * Context for all functions in this plugin.
- */
-struct Plugin
-{
-
-  const struct GNUNET_CONFIGURATION_Handle *cfg;
-
-  /**
-   * Native Postgres database handle.
-   */
-  PGconn *dbh;
-
-  enum Transactions transaction;
-
-  void *cls;
-};
-
-
-/**
- * Initialize the database connections and associated
- * data structures (create tables and indices
- * as needed as well).
- *
- * @param plugin the plugin context (state for this module)
- * @return #GNUNET_OK on success
- */
-static int
-database_setup (struct Plugin *plugin)
-{
-  struct GNUNET_PQ_ExecuteStatement es[] = {
-    GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS channels (\n"
-                            " id SERIAL,\n"
-                            " pub_key BYTEA NOT NULL CHECK (LENGTH(pub_key)=32),\n"
-                            " max_state_message_id BIGINT,\n"
-                            " state_hash_message_id BIGINT,\n"
-                            " PRIMARY KEY(id)\n"
-                            ")"
-                            "WITH OIDS"),
-    GNUNET_PQ_make_execute ("CREATE UNIQUE INDEX IF NOT EXISTS channel_pub_key_idx \n"
-                            " ON channels (pub_key)"),
-    GNUNET_PQ_make_execute ("CREATE OR REPLACE FUNCTION get_chan_id(BYTEA) RETURNS INTEGER AS \n"
-                            " 'SELECT id FROM channels WHERE pub_key=$1;' LANGUAGE SQL STABLE \n"
-                            "RETURNS NULL ON NULL INPUT"),
-    GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS slaves (\n"
-                            " id SERIAL,\n"
-                            " pub_key BYTEA NOT NULL CHECK (LENGTH(pub_key)=32),\n"
-                            " PRIMARY KEY(id)\n"
-                            ")"
-                            "WITH OIDS"),
-    GNUNET_PQ_make_execute ("CREATE UNIQUE INDEX IF NOT EXISTS slaves_pub_key_idx \n"
-                            " ON slaves (pub_key)"),
-    GNUNET_PQ_make_execute ("CREATE OR REPLACE FUNCTION get_slave_id(BYTEA) RETURNS INTEGER AS \n"
-                            " 'SELECT id FROM slaves WHERE pub_key=$1;' LANGUAGE SQL STABLE \n"
-                            "RETURNS NULL ON NULL INPUT"),
-    GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS membership (\n"
-                            "  channel_id BIGINT NOT NULL REFERENCES channels(id),\n"
-                            "  slave_id BIGINT NOT NULL REFERENCES slaves(id),\n"
-                            "  did_join INT NOT NULL,\n"
-                            "  announced_at BIGINT NOT NULL,\n"
-                            "  effective_since BIGINT NOT NULL,\n"
-                            "  group_generation BIGINT NOT NULL\n"
-                            ")"
-                            "WITH OIDS"),
-    GNUNET_PQ_make_execute ("CREATE INDEX IF NOT EXISTS idx_membership_channel_id_slave_id "
-                            "ON membership (channel_id, slave_id)"),
-    /** @todo messages table: add method_name column */
-    GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS messages (\n"
-                            "  channel_id BIGINT NOT NULL REFERENCES channels(id),\n"
-                            "  hop_counter INT NOT NULL,\n"
-                            "  signature BYTEA CHECK (LENGTH(signature)=64),\n"
-                            "  purpose BYTEA CHECK (LENGTH(purpose)=8),\n"
-                            "  fragment_id BIGINT NOT NULL,\n"
-                            "  fragment_offset BIGINT NOT NULL,\n"
-                            "  message_id BIGINT NOT NULL,\n"
-                            "  group_generation BIGINT NOT NULL,\n"
-                            "  multicast_flags INT NOT NULL,\n"
-                            "  psycstore_flags INT NOT NULL,\n"
-                            "  data BYTEA,\n"
-                            "  PRIMARY KEY (channel_id, fragment_id),\n"
-                            "  UNIQUE (channel_id, message_id, fragment_offset)\n"
-                            ")"
-                            "WITH OIDS"),
-    GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS state (\n"
-                            "  channel_id BIGINT NOT NULL REFERENCES channels(id),\n"
-                            "  name TEXT NOT NULL,\n"
-                            "  value_current BYTEA,\n"
-                            "  value_signed BYTEA,\n"
-                            "  PRIMARY KEY (channel_id, name)\n"
-                            ")"
-                            "WITH OIDS"),
-    GNUNET_PQ_make_execute ("CREATE TABLE IF NOT EXISTS state_sync (\n"
-                            "  channel_id BIGINT NOT NULL REFERENCES channels(id),\n"
-                            "  name TEXT NOT NULL,\n"
-                            "  value BYTEA,\n"
-                            "  PRIMARY KEY (channel_id, name)\n"
-                            ")"
-                            "WITH OIDS"),
-    GNUNET_PQ_EXECUTE_STATEMENT_END
-  };
-
-  /* Open database and precompile statements */
-  plugin->dbh = GNUNET_PQ_connect_with_cfg (plugin->cfg,
-                                            "psycstore-postgres");
-  if (NULL == plugin->dbh)
-    return GNUNET_SYSERR;
-  if (GNUNET_OK !=
-      GNUNET_PQ_exec_statements (plugin->dbh,
-                                 es))
-  {
-    PQfinish (plugin->dbh);
-    plugin->dbh = NULL;
-    return GNUNET_SYSERR;
-  }
-
-  /* Prepare statements */
-  {
-    struct GNUNET_PQ_PreparedStatement ps[] = {
-      GNUNET_PQ_make_prepare ("transaction_begin",
-                              "BEGIN", 0),
-      GNUNET_PQ_make_prepare ("transaction_commit",
-                              "COMMIT", 0),
-      GNUNET_PQ_make_prepare ("transaction_rollback",
-                              "ROLLBACK", 0),
-      GNUNET_PQ_make_prepare ("insert_channel_key",
-                              "INSERT INTO channels (pub_key) VALUES ($1)"
-                              " ON CONFLICT DO NOTHING", 1),
-      GNUNET_PQ_make_prepare ("insert_slave_key",
-                              "INSERT INTO slaves (pub_key) VALUES ($1)"
-                              " ON CONFLICT DO NOTHING", 1),
-      GNUNET_PQ_make_prepare ("insert_membership",
-                              "INSERT INTO membership\n"
-                              " (channel_id, slave_id, did_join, announced_at,\n"
-                              "  effective_since, group_generation)\n"
-                              "VALUES (get_chan_id($1),\n"
-                              "        get_slave_id($2),\n"
-                              "        $3, $4, $5, $6)", 6),
-      GNUNET_PQ_make_prepare ("select_membership",
-                              "SELECT did_join FROM membership\n"
-                              "WHERE channel_id = get_chan_id($1)\n"
-                              "      AND slave_id = get_slave_id($2)\n"
-                              "      AND effective_since <= $3 AND did_join = 1\n"
-                              "ORDER BY announced_at DESC LIMIT 1", 3),
-      GNUNET_PQ_make_prepare ("insert_fragment",
-                              "INSERT INTO messages\n"
-                              " (channel_id, hop_counter, signature, purpose,\n"
-                              "  fragment_id, fragment_offset, message_id,\n"
-                              "  group_generation, multicast_flags, psycstore_flags, data)\n"
-                              "VALUES (get_chan_id($1),\n"
-                              "        $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)"
-                              "ON CONFLICT DO NOTHING", 11),
-      GNUNET_PQ_make_prepare ("update_message_flags",
-                              "UPDATE messages\n"
-                              "SET psycstore_flags = psycstore_flags | $1\n"
-                              "WHERE channel_id = get_chan_id($2) \n"
-                              "      AND message_id = $3 AND fragment_offset = 0", 3),
-      GNUNET_PQ_make_prepare ("select_fragments",
-                              "SELECT hop_counter, signature, purpose, fragment_id,\n"
-                              "       fragment_offset, message_id, group_generation,\n"
-                              "       multicast_flags, psycstore_flags, data\n"
-                              "FROM messages\n"
-                              "WHERE channel_id = get_chan_id($1) \n"
-                              "      AND $2 <= fragment_id AND fragment_id <= $3", 3),
-      /** @todo select_messages: add method_prefix filter */
-      GNUNET_PQ_make_prepare ("select_messages",
-                              "SELECT hop_counter, signature, purpose, fragment_id,\n"
-                              "       fragment_offset, message_id, group_generation,\n"
-                              "       multicast_flags, psycstore_flags, data\n"
-                              "FROM messages\n"
-                              "WHERE channel_id = get_chan_id($1) \n"
-                              "      AND $2 <= message_id AND message_id <= $3\n"
-                              "LIMIT $4;", 4),
-      /** @todo select_latest_messages: add method_prefix filter */
-      GNUNET_PQ_make_prepare ("select_latest_fragments",
-                              "SELECT  rev.hop_counter AS hop_counter,\n"
-                              "        rev.signature AS signature,\n"
-                              "        rev.purpose AS purpose,\n"
-                              "        rev.fragment_id AS fragment_id,\n"
-                              "        rev.fragment_offset AS fragment_offset,\n"
-                              "        rev.message_id AS message_id,\n"
-                              "        rev.group_generation AS group_generation,\n"
-                              "        rev.multicast_flags AS multicast_flags,\n"
-                              "        rev.psycstore_flags AS psycstore_flags,\n"
-                              "        rev.data AS data\n"
-                              " FROM\n"
-                              " (SELECT hop_counter, signature, purpose, fragment_id,\n"
-                              "        fragment_offset, message_id, group_generation,\n"
-                              "        multicast_flags, psycstore_flags, data \n"
-                              "  FROM messages\n"
-                              "  WHERE channel_id = get_chan_id($1) \n"
-                              "  ORDER BY fragment_id DESC\n"
-                              "  LIMIT $2) AS rev\n"
-                              " ORDER BY rev.fragment_id;", 2),
-      GNUNET_PQ_make_prepare ("select_latest_messages",
-                              "SELECT hop_counter, signature, purpose, fragment_id,\n"
-                              "       fragment_offset, message_id, group_generation,\n"
-                              "        multicast_flags, psycstore_flags, data\n"
-                              "FROM messages\n"
-                              "WHERE channel_id = get_chan_id($1)\n"
-                              "      AND message_id IN\n"
-                              "      (SELECT message_id\n"
-                              "       FROM messages\n"
-                              "       WHERE channel_id = get_chan_id($2) \n"
-                              "       GROUP BY message_id\n"
-                              "       ORDER BY message_id\n"
-                              "       DESC LIMIT $3)\n"
-                              "ORDER BY fragment_id", 3),
-      GNUNET_PQ_make_prepare ("select_message_fragment",
-                              "SELECT hop_counter, signature, purpose, fragment_id,\n"
-                              "       fragment_offset, message_id, group_generation,\n"
-                              "       multicast_flags, psycstore_flags, data\n"
-                              "FROM messages\n"
-                              "WHERE channel_id = get_chan_id($1) \n"
-                              "      AND message_id = $2 AND fragment_offset = $3", 3),
-      GNUNET_PQ_make_prepare ("select_counters_message",
-                              "SELECT fragment_id, message_id, group_generation\n"
-                              "FROM messages\n"
-                              "WHERE channel_id = get_chan_id($1)\n"
-                              "ORDER BY fragment_id DESC LIMIT 1", 1),
-      GNUNET_PQ_make_prepare ("select_counters_state",
-                              "SELECT max_state_message_id\n"
-                              "FROM channels\n"
-                              "WHERE pub_key = $1 AND max_state_message_id IS NOT NULL", 1),
-      GNUNET_PQ_make_prepare ("update_max_state_message_id",
-                              "UPDATE channels\n"
-                              "SET max_state_message_id = $1\n"
-                              "WHERE pub_key = $2", 2),
-
-      GNUNET_PQ_make_prepare ("update_state_hash_message_id",
-                              "UPDATE channels\n"
-                              "SET state_hash_message_id = $1\n"
-                              "WHERE pub_key = $2", 2),
-      GNUNET_PQ_make_prepare ("insert_state_current",
-                              "INSERT INTO state\n"
-                              "  (channel_id, name, value_current, value_signed)\n"
-                              "SELECT new.channel_id, new.name,\n"
-                              "       new.value_current, old.value_signed\n"
-                              "FROM (SELECT get_chan_id($1) AS channel_id,\n"
-                              "             $2::TEXT AS name, $3::BYTEA AS value_current) AS new\n"
-                              "LEFT JOIN (SELECT channel_id, name, value_signed\n"
-                              "           FROM state) AS old\n"
-                              "ON new.channel_id = old.channel_id AND new.name = old.name\n"
-                              "ON CONFLICT (channel_id, name)\n"
-                              "   DO UPDATE SET value_current = EXCLUDED.value_current,\n"
-                              "                 value_signed = EXCLUDED.value_signed", 3),
-      GNUNET_PQ_make_prepare ("delete_state_empty",
-                              "DELETE FROM state\n"
-                              "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = $1)\n"
-                              "      AND (value_current IS NULL OR length(value_current) = 0)\n"
-                              "      AND (value_signed IS NULL OR length(value_signed) = 0)", 1),
-      GNUNET_PQ_make_prepare ("update_state_signed",
-                              "UPDATE state\n"
-                              "SET value_signed = value_current\n"
-                              "WHERE channel_id = get_chan_id($1) ", 1),
-      GNUNET_PQ_make_prepare ("delete_state",
-                              "DELETE FROM state\n"
-                              "WHERE channel_id = get_chan_id($1) ", 1),
-      GNUNET_PQ_make_prepare ("insert_state_sync",
-                              "INSERT INTO state_sync (channel_id, name, value)\n"
-                              "VALUES (get_chan_id($1), $2, $3)", 3),
-      GNUNET_PQ_make_prepare ("insert_state_from_sync",
-                              "INSERT INTO state\n"
-                              " (channel_id, name, value_current, value_signed)\n"
-                              "SELECT channel_id, name, value, value\n"
-                              "FROM state_sync\n"
-                              "WHERE channel_id = get_chan_id($1)", 1),
-      GNUNET_PQ_make_prepare ("delete_state_sync",
-                              "DELETE FROM state_sync\n"
-                              "WHERE channel_id = get_chan_id($1)", 1),
-      GNUNET_PQ_make_prepare ("select_state_one",
-                              "SELECT value_current\n"
-                              "FROM state\n"
-                              "WHERE channel_id = get_chan_id($1)\n"
-                              "      AND name = $2", 2),
-      GNUNET_PQ_make_prepare ("select_state_prefix",
-                              "SELECT name, value_current\n"
-                              "FROM state\n"
-                              "WHERE channel_id = get_chan_id($1)\n"
-                              "      AND (name = $2 OR substr(name, 1, $3) = $4)", 4),
-      GNUNET_PQ_make_prepare ("select_state_signed",
-                              "SELECT name, value_signed\n"
-                              "FROM state\n"
-                              "WHERE channel_id = get_chan_id($1)\n"
-                              "      AND value_signed IS NOT NULL", 1),
-      GNUNET_PQ_PREPARED_STATEMENT_END
-    };
-
-    if (GNUNET_OK !=
-        GNUNET_PQ_prepare_statements (plugin->dbh,
-                                      ps))
-    {
-      PQfinish (plugin->dbh);
-      plugin->dbh = NULL;
-      return GNUNET_SYSERR;
-    }
-  }
-
-  return GNUNET_OK;
-}
-
-
-/**
- * Shutdown database connection and associate data
- * structures.
- * @param plugin the plugin context (state for this module)
- */
-static void
-database_shutdown (struct Plugin *plugin)
-{
-  PQfinish (plugin->dbh);
-  plugin->dbh = NULL;
-}
-
-
-/**
- * Execute a prepared statement with a @a channel_key argument.
- *
- * @param plugin Plugin handle.
- * @param stmt Statement to execute.
- * @param channel_key Public key of the channel.
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-exec_channel (struct Plugin *plugin, const char *stmt,
-              const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key)
-{
-  struct GNUNET_PQ_QueryParam params[] = {
-    GNUNET_PQ_query_param_auto_from_type (channel_key),
-    GNUNET_PQ_query_param_end
-  };
-
-  if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS !=
-      GNUNET_PQ_eval_prepared_non_select (plugin->dbh, stmt, params))
-    return GNUNET_SYSERR;
-
-  return GNUNET_OK;
-}
-
-
-/**
- * Begin a transaction.
- */
-static int
-transaction_begin (struct Plugin *plugin, enum Transactions transaction)
-{
-  struct GNUNET_PQ_QueryParam params[] = {
-    GNUNET_PQ_query_param_end
-  };
-
-  if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS !=
-      GNUNET_PQ_eval_prepared_non_select (plugin->dbh, "transaction_begin", params))
-    return GNUNET_SYSERR;
-
-  plugin->transaction = transaction;
-  return GNUNET_OK;
-}
-
-
-/**
- * Commit current transaction.
- */
-static int
-transaction_commit (struct Plugin *plugin)
-{
-  struct GNUNET_PQ_QueryParam params[] = {
-    GNUNET_PQ_query_param_end
-  };
-
-  if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS !=
-      GNUNET_PQ_eval_prepared_non_select (plugin->dbh, "transaction_commit", params))
-    return GNUNET_SYSERR;
-
-  plugin->transaction = TRANSACTION_NONE;
-  return GNUNET_OK;
-}
-
-
-/**
- * Roll back current transaction.
- */
-static int
-transaction_rollback (struct Plugin *plugin)
-{
-  struct GNUNET_PQ_QueryParam params[] = {
-    GNUNET_PQ_query_param_end
-  };
-
-  if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS !=
-      GNUNET_PQ_eval_prepared_non_select (plugin->dbh, "transaction_rollback", params))
-    return GNUNET_SYSERR;
-
-  plugin->transaction = TRANSACTION_NONE;
-  return GNUNET_OK;
-}
-
-
-static int
-channel_key_store (struct Plugin *plugin,
-                   const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key)
-{
-  struct GNUNET_PQ_QueryParam params[] = {
-    GNUNET_PQ_query_param_auto_from_type (channel_key),
-    GNUNET_PQ_query_param_end
-  };
-
-  if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=
-      GNUNET_PQ_eval_prepared_non_select (plugin->dbh,
-                                         "insert_channel_key",
-                                         params))
-    return GNUNET_SYSERR;
-
-  return GNUNET_OK;
-}
-
-
-static int
-slave_key_store (struct Plugin *plugin,
-                 const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_key)
-{
-  struct GNUNET_PQ_QueryParam params[] = {
-    GNUNET_PQ_query_param_auto_from_type (slave_key),
-    GNUNET_PQ_query_param_end
-  };
-
-  if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=
-      GNUNET_PQ_eval_prepared_non_select (plugin->dbh, "insert_slave_key", params))
-    return GNUNET_SYSERR;
-
-  return GNUNET_OK;
-}
-
-
-/**
- * Store join/leave events for a PSYC channel in order to be able to answer
- * membership test queries later.
- *
- * @see GNUNET_PSYCSTORE_membership_store()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-postgres_membership_store (void *cls,
-                           const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                           const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_key,
-                           int did_join,
-                           uint64_t announced_at,
-                           uint64_t effective_since,
-                           uint64_t group_generation)
-{
-  struct Plugin *plugin = cls;
-  uint32_t idid_join = (uint32_t) did_join;
-
-  GNUNET_assert (TRANSACTION_NONE == plugin->transaction);
-
-  if ( (announced_at > INT64_MAX) ||
-       (effective_since > INT64_MAX) ||
-       (group_generation > INT64_MAX) )
-  {
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-
-  if ( (GNUNET_OK !=
-       channel_key_store (plugin, channel_key)) ||
-       (GNUNET_OK !=
-       slave_key_store (plugin, slave_key)) )
-    return GNUNET_SYSERR;
-
-  struct GNUNET_PQ_QueryParam params[] = {
-    GNUNET_PQ_query_param_auto_from_type (channel_key),
-    GNUNET_PQ_query_param_auto_from_type (slave_key),
-    GNUNET_PQ_query_param_uint32 (&idid_join),
-    GNUNET_PQ_query_param_uint64 (&announced_at),
-    GNUNET_PQ_query_param_uint64 (&effective_since),
-    GNUNET_PQ_query_param_uint64 (&group_generation),
-    GNUNET_PQ_query_param_end
-  };
-
-  if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=
-      GNUNET_PQ_eval_prepared_non_select (plugin->dbh,
-                                         "insert_membership",
-                                         params))
-    return GNUNET_SYSERR;
-
-  return GNUNET_OK;
-}
-
-/**
- * Test if a member was admitted to the channel at the given message ID.
- *
- * @see GNUNET_PSYCSTORE_membership_test()
- *
- * @return #GNUNET_YES if the member was admitted, #GNUNET_NO if not,
- *         #GNUNET_SYSERR if there was en error.
- */
-static int
-membership_test (void *cls,
-                 const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                 const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_key,
-                 uint64_t message_id)
-{
-  struct Plugin *plugin = cls;
-
-  uint32_t did_join = 0;
-
-  struct GNUNET_PQ_QueryParam params_select[] = {
-    GNUNET_PQ_query_param_auto_from_type (channel_key),
-    GNUNET_PQ_query_param_auto_from_type (slave_key),
-    GNUNET_PQ_query_param_uint64 (&message_id),
-    GNUNET_PQ_query_param_end
-  };
-
-  struct GNUNET_PQ_ResultSpec results_select[] = {
-    GNUNET_PQ_result_spec_uint32 ("did_join", &did_join),
-    GNUNET_PQ_result_spec_end
-  };
-
-  if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=
-      GNUNET_PQ_eval_prepared_singleton_select (plugin->dbh, "select_membership", 
-                                                params_select, results_select))
-     return GNUNET_SYSERR;
-
-  return GNUNET_OK;
-}
-
-/**
- * Store a message fragment sent to a channel.
- *
- * @see GNUNET_PSYCSTORE_fragment_store()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-fragment_store (void *cls,
-                const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                const struct GNUNET_MULTICAST_MessageHeader *msg,
-                uint32_t psycstore_flags)
-{
-  struct Plugin *plugin = cls;
-
-  GNUNET_assert (TRANSACTION_NONE == plugin->transaction);
-
-  uint64_t fragment_id = GNUNET_ntohll (msg->fragment_id);
-
-  uint64_t fragment_offset = GNUNET_ntohll (msg->fragment_offset);
-  uint64_t message_id = GNUNET_ntohll (msg->message_id);
-  uint64_t group_generation = GNUNET_ntohll (msg->group_generation);
-
-  uint32_t hop_counter = ntohl(msg->hop_counter);
-  uint32_t flags = ntohl(msg->flags);
-
-  if (fragment_id > INT64_MAX || fragment_offset > INT64_MAX ||
-      message_id > INT64_MAX || group_generation > INT64_MAX)
-  {
-    LOG(GNUNET_ERROR_TYPE_ERROR,
-         "Tried to store fragment with a field > INT64_MAX: "
-         "%lu, %lu, %lu, %lu\n", fragment_id, fragment_offset,
-         message_id, group_generation);
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-
-  if (GNUNET_OK != channel_key_store (plugin, channel_key))
-    return GNUNET_SYSERR;
-
-  struct GNUNET_PQ_QueryParam params_insert[] = {
-    GNUNET_PQ_query_param_auto_from_type (channel_key),
-    GNUNET_PQ_query_param_uint32 (&hop_counter),
-    GNUNET_PQ_query_param_auto_from_type (&msg->signature),
-    GNUNET_PQ_query_param_auto_from_type (&msg->purpose),
-    GNUNET_PQ_query_param_uint64 (&fragment_id),
-    GNUNET_PQ_query_param_uint64 (&fragment_offset),
-    GNUNET_PQ_query_param_uint64 (&message_id),
-    GNUNET_PQ_query_param_uint64 (&group_generation),
-    GNUNET_PQ_query_param_uint32 (&flags),
-    GNUNET_PQ_query_param_uint32 (&psycstore_flags),
-    GNUNET_PQ_query_param_fixed_size (&msg[1], ntohs (msg->header.size) - sizeof (*msg)),
-    GNUNET_PQ_query_param_end
-  };
-
-  if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS !=
-      GNUNET_PQ_eval_prepared_non_select (plugin->dbh, "insert_fragment", params_insert))
-    return GNUNET_SYSERR;
-
-  return GNUNET_OK;
-}
-
-/**
- * Set additional flags for a given message.
- *
- * They are OR'd with any existing flags set.
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-message_add_flags (void *cls,
-                   const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                   uint64_t message_id,
-                   uint32_t psycstore_flags)
-{
-  struct Plugin *plugin = cls;
-
-  struct GNUNET_PQ_QueryParam params_update[] = {
-    GNUNET_PQ_query_param_uint32 (&psycstore_flags),
-    GNUNET_PQ_query_param_auto_from_type (channel_key),
-    GNUNET_PQ_query_param_uint64 (&message_id),
-    GNUNET_PQ_query_param_end
-  };
-
-  if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS !=
-      GNUNET_PQ_eval_prepared_non_select (plugin->dbh, "update_message_flags", params_update))
-    return GNUNET_SYSERR;
-
-  return GNUNET_OK;
-}
-
-
-/**
- * Closure for #fragment_rows.
- */
-struct FragmentRowsContext {
-  GNUNET_PSYCSTORE_FragmentCallback cb;
-  void *cb_cls;
-
-  uint64_t *returned_fragments;
-
-  /* I preserved this but I do not see the point since
-   * it cannot stop the loop early and gets overwritten ?? */
-  int ret;
-};
-
-
-/**
- * Callback that retrieves the results of a SELECT statement
- * reading form the messages table.
- *
- * Only passed to GNUNET_PQ_eval_prepared_multi_select and
- * has type GNUNET_PQ_PostgresResultHandler.
- *
- * @param cls closure
- * @param result the postgres result
- * @param num_result the number of results in @a result
- */
-void fragment_rows (void *cls,
-                    PGresult *res,
-                    unsigned int num_results)
-{
-  struct FragmentRowsContext *c = cls;
-
-  for (unsigned int i=0;i<num_results;i++)
-  {
-    uint32_t hop_counter;
-    void *signature = NULL;
-    void *purpose = NULL;
-    size_t signature_size;
-    size_t purpose_size;
-    uint64_t fragment_id;
-    uint64_t fragment_offset;
-    uint64_t message_id;
-    uint64_t group_generation;
-    uint32_t flags;
-    void *buf;
-    size_t buf_size;
-    uint32_t msg_flags;
-    struct GNUNET_PQ_ResultSpec results[] = {
-      GNUNET_PQ_result_spec_uint32 ("hop_counter", &hop_counter),
-      GNUNET_PQ_result_spec_variable_size ("signature", &signature, &signature_size),
-      GNUNET_PQ_result_spec_variable_size ("purpose", &purpose, &purpose_size),
-      GNUNET_PQ_result_spec_uint64 ("fragment_id", &fragment_id),
-      GNUNET_PQ_result_spec_uint64 ("fragment_offset", &fragment_offset),
-      GNUNET_PQ_result_spec_uint64 ("message_id", &message_id),
-      GNUNET_PQ_result_spec_uint64 ("group_generation", &group_generation),
-      GNUNET_PQ_result_spec_uint32 ("multicast_flags", &msg_flags),
-      GNUNET_PQ_result_spec_uint32 ("psycstore_flags", &flags),
-      GNUNET_PQ_result_spec_variable_size ("data", &buf, &buf_size),
-      GNUNET_PQ_result_spec_end
-    };
-    struct GNUNET_MULTICAST_MessageHeader *mp;
-
-    if (GNUNET_YES != GNUNET_PQ_extract_result (res, results, i))
-    {
-      GNUNET_PQ_cleanup_result(results);  /* missing previously, a memory leak?? */
-      break;  /* nothing more?? */
-    }
-
-    mp = GNUNET_malloc (sizeof (*mp) + buf_size);
-
-    mp->header.size = htons (sizeof (*mp) + buf_size);
-    mp->header.type = htons (GNUNET_MESSAGE_TYPE_MULTICAST_MESSAGE);
-    mp->hop_counter = htonl (hop_counter);
-    GNUNET_memcpy (&mp->signature,
-                   signature, signature_size);
-    GNUNET_memcpy (&mp->purpose,
-                   purpose, purpose_size);
-    mp->fragment_id = GNUNET_htonll (fragment_id);
-    mp->fragment_offset = GNUNET_htonll (fragment_offset);
-    mp->message_id = GNUNET_htonll (message_id);
-    mp->group_generation = GNUNET_htonll (group_generation);
-    mp->flags = htonl(msg_flags);
-
-    GNUNET_memcpy (&mp[1],
-                   buf, buf_size);
-    GNUNET_PQ_cleanup_result(results);
-    c->ret = c->cb (c->cb_cls, mp, (enum GNUNET_PSYCSTORE_MessageFlags) flags);
-    if (NULL != c->returned_fragments)
-      (*c->returned_fragments)++;
-  }
-}
-
-
-static int
-fragment_select (struct Plugin *plugin,
-                 const char *stmt,
-                 struct GNUNET_PQ_QueryParam *params,
-                 uint64_t *returned_fragments,
-                 GNUNET_PSYCSTORE_FragmentCallback cb,
-                 void *cb_cls)
-{
-  /* Stack based closure */
-  struct FragmentRowsContext frc = {
-    .cb = cb,
-    .cb_cls = cb_cls,
-    .returned_fragments = returned_fragments,
-    .ret = GNUNET_SYSERR
-  };
-
-  if (0 > GNUNET_PQ_eval_prepared_multi_select (plugin->dbh,
-                                                stmt, params,
-                                                &fragment_rows, &frc))
-    return GNUNET_SYSERR;
-  return frc.ret;  /* GNUNET_OK ?? */
-}
-
-/**
- * Retrieve a message fragment range by fragment ID.
- *
- * @see GNUNET_PSYCSTORE_fragment_get()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-fragment_get (void *cls,
-              const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-              uint64_t first_fragment_id,
-              uint64_t last_fragment_id,
-              uint64_t *returned_fragments,
-              GNUNET_PSYCSTORE_FragmentCallback cb,
-              void *cb_cls)
-{
-  struct Plugin *plugin = cls;
-  struct GNUNET_PQ_QueryParam params_select[] = {
-    GNUNET_PQ_query_param_auto_from_type (channel_key),
-    GNUNET_PQ_query_param_uint64 (&first_fragment_id),
-    GNUNET_PQ_query_param_uint64 (&last_fragment_id),
-    GNUNET_PQ_query_param_end
-  };
-
-  *returned_fragments = 0;
-  return fragment_select (plugin,
-                          "select_fragments",
-                          params_select,
-                          returned_fragments,
-                          cb, cb_cls);
-}
-
-
-/**
- * Retrieve a message fragment range by fragment ID.
- *
- * @see GNUNET_PSYCSTORE_fragment_get_latest()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-fragment_get_latest (void *cls,
-                     const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                     uint64_t fragment_limit,
-                     uint64_t *returned_fragments,
-                     GNUNET_PSYCSTORE_FragmentCallback cb,
-                     void *cb_cls)
-{
-  struct Plugin *plugin = cls;
-
-  *returned_fragments = 0;
-
-  struct GNUNET_PQ_QueryParam params_select[] = {
-    GNUNET_PQ_query_param_auto_from_type (channel_key),
-    GNUNET_PQ_query_param_uint64 (&fragment_limit),
-    GNUNET_PQ_query_param_end
-  };
-
-  return fragment_select (plugin,
-                          "select_latest_fragments",
-                          params_select,
-                          returned_fragments,
-                          cb, cb_cls);
-}
-
-
-/**
- * Retrieve all fragments of a message ID range.
- *
- * @see GNUNET_PSYCSTORE_message_get()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-message_get (void *cls,
-             const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-             uint64_t first_message_id,
-             uint64_t last_message_id,
-             uint64_t fragment_limit,
-             uint64_t *returned_fragments,
-             GNUNET_PSYCSTORE_FragmentCallback cb,
-             void *cb_cls)
-{
-  struct Plugin *plugin = cls;
-  struct GNUNET_PQ_QueryParam params_select[] = {
-    GNUNET_PQ_query_param_auto_from_type (channel_key),
-    GNUNET_PQ_query_param_uint64 (&first_message_id),
-    GNUNET_PQ_query_param_uint64 (&last_message_id),
-    GNUNET_PQ_query_param_uint64 (&fragment_limit),
-    GNUNET_PQ_query_param_end
-  };
-
-  if (0 == fragment_limit)
-    fragment_limit = INT64_MAX;
-  *returned_fragments = 0;
-  return fragment_select (plugin,
-                          "select_messages",
-                          params_select,
-                          returned_fragments,
-                          cb, cb_cls);
-}
-
-
-/**
- * Retrieve all fragments of the latest messages.
- *
- * @see GNUNET_PSYCSTORE_message_get_latest()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-message_get_latest (void *cls,
-                    const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                    uint64_t message_limit,
-                    uint64_t *returned_fragments,
-                    GNUNET_PSYCSTORE_FragmentCallback cb,
-                    void *cb_cls)
-{
-  struct Plugin *plugin = cls;
-  struct GNUNET_PQ_QueryParam params_select[] = {
-    GNUNET_PQ_query_param_auto_from_type (channel_key),
-    GNUNET_PQ_query_param_auto_from_type (channel_key),
-    GNUNET_PQ_query_param_uint64 (&message_limit),
-    GNUNET_PQ_query_param_end
-  };
-
-  *returned_fragments = 0;
-  return fragment_select (plugin,
-                          "select_latest_messages",
-                          params_select,
-                          returned_fragments,
-                          cb, cb_cls);
-}
-
-
-/**
- * Retrieve a fragment of message specified by its message ID and fragment
- * offset.
- *
- * @see GNUNET_PSYCSTORE_message_get_fragment()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-message_get_fragment (void *cls,
-                      const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                      uint64_t message_id,
-                      uint64_t fragment_offset,
-                      GNUNET_PSYCSTORE_FragmentCallback cb,
-                      void *cb_cls)
-{
-  struct Plugin *plugin = cls;
-  const char *stmt = "select_message_fragment";
-
-  struct GNUNET_PQ_QueryParam params_select[] = {
-    GNUNET_PQ_query_param_auto_from_type (channel_key),
-    GNUNET_PQ_query_param_uint64 (&message_id),
-    GNUNET_PQ_query_param_uint64 (&fragment_offset),
-    GNUNET_PQ_query_param_end
-  };
-
-  /* Stack based closure */
-  struct FragmentRowsContext frc = {
-    .cb = cb,
-    .cb_cls = cb_cls,
-    .returned_fragments = NULL,
-    .ret = GNUNET_SYSERR
-  };
-
-  if (0 > GNUNET_PQ_eval_prepared_multi_select (plugin->dbh,
-                                                stmt, params_select,
-                                                &fragment_rows, &frc))
-    return GNUNET_SYSERR;
-  return frc.ret;  /* GNUNET_OK ?? */
-}
-
-/**
- * Retrieve the max. values of message counters for a channel.
- *
- * @see GNUNET_PSYCSTORE_counters_get()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-counters_message_get (void *cls,
-                      const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                      uint64_t *max_fragment_id,
-                      uint64_t *max_message_id,
-                      uint64_t *max_group_generation)
-{
-  struct Plugin *plugin = cls;
-
-  const char *stmt = "select_counters_message";
-
-  struct GNUNET_PQ_QueryParam params_select[] = {
-    GNUNET_PQ_query_param_auto_from_type (channel_key),
-    GNUNET_PQ_query_param_end
-  };
-
-  struct GNUNET_PQ_ResultSpec results_select[] = {
-    GNUNET_PQ_result_spec_uint64 ("fragment_id", max_fragment_id),
-    GNUNET_PQ_result_spec_uint64 ("message_id", max_message_id),
-    GNUNET_PQ_result_spec_uint64 ("group_generation", max_group_generation),
-    GNUNET_PQ_result_spec_end
-  };
-
-  if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=
-      GNUNET_PQ_eval_prepared_singleton_select (plugin->dbh, stmt, 
-                                                params_select, results_select))
-     return GNUNET_SYSERR;
-
-  return GNUNET_OK;
-}
-
-/**
- * Retrieve the max. values of state counters for a channel.
- *
- * @see GNUNET_PSYCSTORE_counters_get()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-counters_state_get (void *cls,
-                    const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                    uint64_t *max_state_message_id)
-{
-  struct Plugin *plugin = cls;
-
-  const char *stmt = "select_counters_state";
-
-  struct GNUNET_PQ_QueryParam params_select[] = {
-    GNUNET_PQ_query_param_auto_from_type (channel_key),
-    GNUNET_PQ_query_param_end
-  };
-
-  struct GNUNET_PQ_ResultSpec results_select[] = {
-    GNUNET_PQ_result_spec_uint64 ("max_state_message_id", max_state_message_id),
-    GNUNET_PQ_result_spec_end
-  };
-
-  if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=
-      GNUNET_PQ_eval_prepared_singleton_select (plugin->dbh, stmt, 
-                                                params_select, results_select))
-     return GNUNET_SYSERR;
-
-  return GNUNET_OK;
-}
-
-
-/**
- * Assign a value to a state variable.
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-state_assign (struct Plugin *plugin, const char *stmt,
-              const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-              const char *name, const void *value, size_t value_size)
-{
-  struct GNUNET_PQ_QueryParam params[] = {
-    GNUNET_PQ_query_param_auto_from_type (channel_key),
-    GNUNET_PQ_query_param_string (name),
-    GNUNET_PQ_query_param_fixed_size (value, value_size),
-    GNUNET_PQ_query_param_end
-  };
-
-  if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS !=
-      GNUNET_PQ_eval_prepared_non_select (plugin->dbh, stmt, params))
-    return GNUNET_SYSERR;
-
-  return GNUNET_OK;
-}
-
-
-static int
-update_message_id (struct Plugin *plugin,
-                   const char *stmt,
-                   const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                   uint64_t message_id)
-{
-  struct GNUNET_PQ_QueryParam params[] = {
-    GNUNET_PQ_query_param_uint64 (&message_id),
-    GNUNET_PQ_query_param_auto_from_type (channel_key),
-    GNUNET_PQ_query_param_end
-  };
-
-  if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS !=
-      GNUNET_PQ_eval_prepared_non_select (plugin->dbh, stmt, params))
-    return GNUNET_SYSERR;
-
-  return GNUNET_OK;
-}
-
-
-/**
- * Begin modifying current state.
- */
-static int
-state_modify_begin (void *cls,
-                    const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                    uint64_t message_id, uint64_t state_delta)
-{
-  struct Plugin *plugin = cls;
-
-  if (state_delta > 0)
-  {
-    /**
-     * We can only apply state modifiers in the current message if modifiers in
-     * the previous stateful message (message_id - state_delta) were already
-     * applied.
-     */
-
-    uint64_t max_state_message_id = 0;
-    int ret = counters_state_get (plugin, channel_key, &max_state_message_id);
-    switch (ret)
-    {
-    case GNUNET_OK:
-    case GNUNET_NO: // no state yet
-      ret = GNUNET_OK;
-      break;
-
-    default:
-      return ret;
-    }
-
-    if (max_state_message_id < message_id - state_delta)
-      return GNUNET_NO; /* some stateful messages not yet applied */
-    else if (message_id - state_delta < max_state_message_id)
-      return GNUNET_NO; /* changes already applied */
-  }
-
-  if (TRANSACTION_NONE != plugin->transaction)
-  {
-    /** @todo FIXME: wait for other transaction to finish  */
-    return GNUNET_SYSERR;
-  }
-  return transaction_begin (plugin, TRANSACTION_STATE_MODIFY);
-}
-
-
-/**
- * Set the current value of state variable.
- *
- * @see GNUNET_PSYCSTORE_state_modify()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-state_modify_op (void *cls,
-                 const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                 enum GNUNET_PSYC_Operator op,
-                 const char *name, const void *value, size_t value_size)
-{
-  struct Plugin *plugin = cls;
-  GNUNET_assert (TRANSACTION_STATE_MODIFY == plugin->transaction);
-
-  switch (op)
-  {
-  case GNUNET_PSYC_OP_ASSIGN:
-    return state_assign (plugin, "insert_state_current",
-                         channel_key, name, value, value_size);
-
-  default: /** @todo implement more state operations */
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-}
-
-
-/**
- * End modifying current state.
- */
-static int
-state_modify_end (void *cls,
-                  const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                  uint64_t message_id)
-{
-  struct Plugin *plugin = cls;
-  GNUNET_assert (TRANSACTION_STATE_MODIFY == plugin->transaction);
-
-  return
-    GNUNET_OK == exec_channel (plugin, "delete_state_empty", channel_key)
-    && GNUNET_OK == update_message_id (plugin,
-                                       "update_max_state_message_id",
-                                       channel_key, message_id)
-    && GNUNET_OK == transaction_commit (plugin)
-    ? GNUNET_OK : GNUNET_SYSERR;
-}
-
-
-/**
- * Begin state synchronization.
- */
-static int
-state_sync_begin (void *cls,
-                  const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key)
-{
-  struct Plugin *plugin = cls;
-  return exec_channel (plugin, "delete_state_sync", channel_key);
-}
-
-
-/**
- * Assign current value of a state variable.
- *
- * @see GNUNET_PSYCSTORE_state_modify()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-state_sync_assign (void *cls,
-                const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                const char *name, const void *value, size_t value_size)
-{
-  struct Plugin *plugin = cls;
-  return state_assign (plugin, "insert_state_sync",
-                       channel_key, name, value, value_size);
-}
-
-
-/**
- * End modifying current state.
- */
-static int
-state_sync_end (void *cls,
-                const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                uint64_t max_state_message_id,
-                uint64_t state_hash_message_id)
-{
-  struct Plugin *plugin = cls;
-  int ret = GNUNET_SYSERR;
-
-  if (TRANSACTION_NONE != plugin->transaction)
-  {
-    /** @todo FIXME: wait for other transaction to finish  */
-    return GNUNET_SYSERR;
-  }
-
-  GNUNET_OK == transaction_begin (plugin, TRANSACTION_STATE_SYNC)
-    && GNUNET_OK == exec_channel (plugin, "delete_state", channel_key)
-    && GNUNET_OK == exec_channel (plugin, "insert_state_from_sync",
-                                  channel_key)
-    && GNUNET_OK == exec_channel (plugin, "delete_state_sync",
-                                  channel_key)
-    && GNUNET_OK == update_message_id (plugin,
-                                       "update_state_hash_message_id",
-                                       channel_key, state_hash_message_id)
-    && GNUNET_OK == update_message_id (plugin,
-                                       "update_max_state_message_id",
-                                       channel_key, max_state_message_id)
-    && GNUNET_OK == transaction_commit (plugin)
-    ? ret = GNUNET_OK
-    : transaction_rollback (plugin);
-  return ret;
-}
-
-
-/**
- * Delete the whole state.
- *
- * @see GNUNET_PSYCSTORE_state_reset()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-state_reset (void *cls, const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key)
-{
-  struct Plugin *plugin = cls;
-  return exec_channel (plugin, "delete_state", channel_key);
-}
-
-
-/**
- * Update signed values of state variables in the state store.
- *
- * @see GNUNET_PSYCSTORE_state_hash_update()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-state_update_signed (void *cls,
-                     const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key)
-{
-  struct Plugin *plugin = cls;
-  return exec_channel (plugin, "update_state_signed", channel_key);
-}
-
-
-/**
- * Retrieve a state variable by name.
- *
- * @see GNUNET_PSYCSTORE_state_get()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-state_get (void *cls, const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-           const char *name, GNUNET_PSYCSTORE_StateCallback cb, void *cb_cls)
-{
-  struct Plugin *plugin = cls;
-
-  const char *stmt = "select_state_one";
-
-  struct GNUNET_PQ_QueryParam params_select[] = {
-    GNUNET_PQ_query_param_auto_from_type (channel_key),
-    GNUNET_PQ_query_param_string (name),
-    GNUNET_PQ_query_param_end
-  };
-
-  void *value_current = NULL;
-  size_t value_size = 0;
-
-  struct GNUNET_PQ_ResultSpec results_select[] = {
-    GNUNET_PQ_result_spec_variable_size ("value_current", &value_current, &value_size),
-    GNUNET_PQ_result_spec_end
-  };
-
-  if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=
-      GNUNET_PQ_eval_prepared_singleton_select (plugin->dbh, stmt, 
-                                                params_select, results_select))
-     return GNUNET_SYSERR;
-
-  return cb (cb_cls, name, value_current,
-            value_size);
-}
-
-
-
-/**
- * Closure for #get_state_cb.
- */
-struct GetStateContext {
-  const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key;
-  // const char *name,
-  GNUNET_PSYCSTORE_StateCallback cb;
-  void *cb_cls;
-
-  const char *value_id;
-
-  /* I preserved this but I do not see the point since
-   * it cannot stop the loop early and gets overwritten ?? */
-  int ret;
-};
-
-
-/**
- * Callback that retrieves the results of a SELECT statement
- * reading form the state table.
- *
- * Only passed to GNUNET_PQ_eval_prepared_multi_select and
- * has type GNUNET_PQ_PostgresResultHandler.
- *
- * @param cls closure
- * @param result the postgres result
- * @param num_result the number of results in @a result
- */
-static void 
-get_state_cb (void *cls,
-                PGresult *res,
-                unsigned int num_results)
-{
-  struct GetStateContext *c = cls;
-
-  for (unsigned int i=0;i<num_results;i++)
-  {
-    char *name = "";
-    void *value = NULL;
-    size_t value_size = 0;
-
-    struct GNUNET_PQ_ResultSpec results[] = {
-      GNUNET_PQ_result_spec_string ("name", &name),
-      GNUNET_PQ_result_spec_variable_size (c->value_id, &value, &value_size),
-      GNUNET_PQ_result_spec_end
-    };
-
-    if (GNUNET_YES != GNUNET_PQ_extract_result (res, results, i))
-    {
-      GNUNET_PQ_cleanup_result(results);  /* previously invoked via PQclear?? */
-      break;  /* nothing more?? */
-    }
-
-    c->ret = c->cb (c->cb_cls, (const char *) name, value, value_size);
-    GNUNET_PQ_cleanup_result(results);
-  }
-}
-
-/**
- * Retrieve all state variables for a channel with the given prefix.
- *
- * @see GNUNET_PSYCSTORE_state_get_prefix()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-state_get_prefix (void *cls, const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                  const char *name, GNUNET_PSYCSTORE_StateCallback cb,
-                  void *cb_cls)
-{
-  struct Plugin *plugin = cls;
-
-  const char *stmt = "select_state_prefix";
-
-  uint32_t name_len = (uint32_t) strlen (name);
-
-  struct GNUNET_PQ_QueryParam params_select[] = {
-    GNUNET_PQ_query_param_auto_from_type (channel_key),
-    GNUNET_PQ_query_param_string (name),
-    GNUNET_PQ_query_param_uint32 (&name_len),
-    GNUNET_PQ_query_param_string (name),
-    GNUNET_PQ_query_param_end
-  };
-
-  struct GetStateContext gsc = {
-    .cb = cb,
-    .cb_cls = cb_cls,
-    .value_id = "value_current",
-    .ret = GNUNET_NO
-  };
-
-  if (0 > GNUNET_PQ_eval_prepared_multi_select (plugin->dbh,
-                                                stmt, params_select,
-                                                &get_state_cb, &gsc))
-    return GNUNET_SYSERR;
-  return gsc.ret;  /* GNUNET_OK ?? */
-}
-
-
-/**
- * Retrieve all signed state variables for a channel.
- *
- * @see GNUNET_PSYCSTORE_state_get_signed()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-state_get_signed (void *cls,
-                  const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                  GNUNET_PSYCSTORE_StateCallback cb, void *cb_cls)
-{
-  struct Plugin *plugin = cls;
-
-  const char *stmt = "select_state_signed";
-
-  struct GNUNET_PQ_QueryParam params_select[] = {
-    GNUNET_PQ_query_param_auto_from_type (channel_key),
-    GNUNET_PQ_query_param_end
-  };
-
-  struct GetStateContext gsc = {
-    .cb = cb,
-    .cb_cls = cb_cls,
-    .value_id = "value_signed",
-    .ret = GNUNET_NO
-  };
-
-  if (0 > GNUNET_PQ_eval_prepared_multi_select (plugin->dbh,
-                                                stmt, params_select,
-                                                &get_state_cb, &gsc))
-    return GNUNET_SYSERR;
-  return gsc.ret;  /* GNUNET_OK ?? */
-}
-
-
-/**
- * Entry point for the plugin.
- *
- * @param cls The struct GNUNET_CONFIGURATION_Handle.
- * @return NULL on error, otherwise the plugin context
- */
-void *
-libgnunet_plugin_psycstore_postgres_init (void *cls)
-{
-  static struct Plugin plugin;
-  const struct GNUNET_CONFIGURATION_Handle *cfg = cls;
-  struct GNUNET_PSYCSTORE_PluginFunctions *api;
-
-  if (NULL != plugin.cfg)
-    return NULL;                /* can only initialize once! */
-  memset (&plugin, 0, sizeof (struct Plugin));
-  plugin.cfg = cfg;
-  if (GNUNET_OK != database_setup (&plugin))
-  {
-    database_shutdown (&plugin);
-    return NULL;
-  }
-  api = GNUNET_new (struct GNUNET_PSYCSTORE_PluginFunctions);
-  api->cls = &plugin;
-  api->membership_store = &postgres_membership_store;
-  api->membership_test = &membership_test;
-  api->fragment_store = &fragment_store;
-  api->message_add_flags = &message_add_flags;
-  api->fragment_get = &fragment_get;
-  api->fragment_get_latest = &fragment_get_latest;
-  api->message_get = &message_get;
-  api->message_get_latest = &message_get_latest;
-  api->message_get_fragment = &message_get_fragment;
-  api->counters_message_get = &counters_message_get;
-  api->counters_state_get = &counters_state_get;
-  api->state_modify_begin = &state_modify_begin;
-  api->state_modify_op = &state_modify_op;
-  api->state_modify_end = &state_modify_end;
-  api->state_sync_begin = &state_sync_begin;
-  api->state_sync_assign = &state_sync_assign;
-  api->state_sync_end = &state_sync_end;
-  api->state_reset = &state_reset;
-  api->state_update_signed = &state_update_signed;
-  api->state_get = &state_get;
-  api->state_get_prefix = &state_get_prefix;
-  api->state_get_signed = &state_get_signed;
-
-  LOG (GNUNET_ERROR_TYPE_INFO, _("Postgres database running\n"));
-  return api;
-}
-
-
-/**
- * Exit point from the plugin.
- *
- * @param cls The plugin context (as returned by "init")
- * @return Always NULL
- */
-void *
-libgnunet_plugin_psycstore_postgres_done (void *cls)
-{
-  struct GNUNET_PSYCSTORE_PluginFunctions *api = cls;
-  struct Plugin *plugin = api->cls;
-
-  database_shutdown (plugin);
-  plugin->cfg = NULL;
-  GNUNET_free (api);
-  LOG (GNUNET_ERROR_TYPE_DEBUG, "Postgres plugin has finished\n");
-  return NULL;
-}
-
-/* end of plugin_psycstore_postgres.c */
diff --git a/src/psycstore/plugin_psycstore_sqlite.c b/src/psycstore/plugin_psycstore_sqlite.c
deleted file mode 100644 (file)
index 24de383..0000000
+++ /dev/null
@@ -1,1948 +0,0 @@
-/*
- * This file is part of GNUnet
- * Copyright (C) 2013 GNUnet e.V.
- *
- * GNUnet is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNUnet is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
- */
-
-/**
- * @file psycstore/plugin_psycstore_sqlite.c
- * @brief sqlite-based psycstore backend
- * @author Gabor X Toth
- * @author Christian Grothoff
- */
-
-/*
- * FIXME: SQLite3 only supports signed 64-bit integers natively,
- *        thus it can only store 63 bits of the uint64_t's.
- */
-
-#include "platform.h"
-#include "gnunet_psycstore_plugin.h"
-#include "gnunet_psycstore_service.h"
-#include "gnunet_multicast_service.h"
-#include "gnunet_crypto_lib.h"
-#include "gnunet_psyc_util_lib.h"
-#include "psycstore.h"
-#include <sqlite3.h>
-
-/**
- * After how many ms "busy" should a DB operation fail for good?  A
- * low value makes sure that we are more responsive to requests
- * (especially PUTs).  A high value guarantees a higher success rate
- * (SELECTs in iterate can take several seconds despite LIMIT=1).
- *
- * The default value of 1s should ensure that users do not experience
- * huge latencies while at the same time allowing operations to
- * succeed with reasonable probability.
- */
-#define BUSY_TIMEOUT_MS 1000
-
-#define DEBUG_PSYCSTORE GNUNET_EXTRA_LOGGING
-
-/**
- * Log an error message at log-level 'level' that indicates
- * a failure of the command 'cmd' on file 'filename'
- * with the message given by strerror(errno).
- */
-#define LOG_SQLITE(db, level, cmd) do { GNUNET_log_from (level, "psycstore-sqlite", _("`%s' failed at %s:%d with error: %s (%d)\n"), cmd, __FILE__, __LINE__, sqlite3_errmsg(db->dbh), sqlite3_errcode(db->dbh)); } while(0)
-
-#define LOG(kind,...) GNUNET_log_from (kind, "psycstore-sqlite", __VA_ARGS__)
-
-enum Transactions {
-  TRANSACTION_NONE = 0,
-  TRANSACTION_STATE_MODIFY,
-  TRANSACTION_STATE_SYNC,
-};
-
-/**
- * Context for all functions in this plugin.
- */
-struct Plugin
-{
-
-  const struct GNUNET_CONFIGURATION_Handle *cfg;
-
-  /**
-   * Database filename.
-   */
-  char *fn;
-
-  /**
-   * Native SQLite database handle.
-   */
-  sqlite3 *dbh;
-
-  /**
-   * Current transaction.
-   */
-  enum Transactions transaction;
-
-  sqlite3_stmt *transaction_begin;
-
-  sqlite3_stmt *transaction_commit;
-
-  sqlite3_stmt *transaction_rollback;
-
-  /**
-   * Precompiled SQL for channel_key_store()
-   */
-  sqlite3_stmt *insert_channel_key;
-
-  /**
-   * Precompiled SQL for slave_key_store()
-   */
-  sqlite3_stmt *insert_slave_key;
-
-
-  /**
-   * Precompiled SQL for membership_store()
-   */
-  sqlite3_stmt *insert_membership;
-
-  /**
-   * Precompiled SQL for membership_test()
-   */
-  sqlite3_stmt *select_membership;
-
-
-  /**
-   * Precompiled SQL for fragment_store()
-   */
-  sqlite3_stmt *insert_fragment;
-
-  /**
-   * Precompiled SQL for message_add_flags()
-   */
-  sqlite3_stmt *update_message_flags;
-
-  /**
-   * Precompiled SQL for fragment_get()
-   */
-  sqlite3_stmt *select_fragments;
-
-  /**
-   * Precompiled SQL for fragment_get()
-   */
-  sqlite3_stmt *select_latest_fragments;
-
-  /**
-   * Precompiled SQL for message_get()
-   */
-  sqlite3_stmt *select_messages;
-
-  /**
-   * Precompiled SQL for message_get()
-   */
-  sqlite3_stmt *select_latest_messages;
-
-  /**
-   * Precompiled SQL for message_get_fragment()
-   */
-  sqlite3_stmt *select_message_fragment;
-
-  /**
-   * Precompiled SQL for counters_get_message()
-   */
-  sqlite3_stmt *select_counters_message;
-
-  /**
-   * Precompiled SQL for counters_get_state()
-   */
-  sqlite3_stmt *select_counters_state;
-
-  /**
-   * Precompiled SQL for state_modify_end()
-   */
-  sqlite3_stmt *update_state_hash_message_id;
-
-  /**
-   * Precompiled SQL for state_sync_end()
-   */
-  sqlite3_stmt *update_max_state_message_id;
-
-  /**
-   * Precompiled SQL for state_modify_op()
-   */
-  sqlite3_stmt *insert_state_current;
-
-  /**
-   * Precompiled SQL for state_modify_end()
-   */
-  sqlite3_stmt *delete_state_empty;
-
-  /**
-   * Precompiled SQL for state_set_signed()
-   */
-  sqlite3_stmt *update_state_signed;
-
-  /**
-   * Precompiled SQL for state_sync()
-   */
-  sqlite3_stmt *insert_state_sync;
-
-  /**
-   * Precompiled SQL for state_sync()
-   */
-  sqlite3_stmt *delete_state;
-
-  /**
-   * Precompiled SQL for state_sync()
-   */
-  sqlite3_stmt *insert_state_from_sync;
-
-  /**
-   * Precompiled SQL for state_sync()
-   */
-  sqlite3_stmt *delete_state_sync;
-
-  /**
-   * Precompiled SQL for state_get_signed()
-   */
-  sqlite3_stmt *select_state_signed;
-
-  /**
-   * Precompiled SQL for state_get()
-   */
-  sqlite3_stmt *select_state_one;
-
-  /**
-   * Precompiled SQL for state_get_prefix()
-   */
-  sqlite3_stmt *select_state_prefix;
-
-};
-
-#if DEBUG_PSYCSTORE
-
-static void
-sql_trace (void *cls, const char *sql)
-{
-  LOG (GNUNET_ERROR_TYPE_DEBUG, "SQL query:\n%s\n", sql);
-}
-
-#endif
-
-/**
- * @brief Prepare a SQL statement
- *
- * @param dbh handle to the database
- * @param sql SQL statement, UTF-8 encoded
- * @param stmt set to the prepared statement
- * @return 0 on success
- */
-static int
-sql_prepare (sqlite3 *dbh, const char *sql, sqlite3_stmt **stmt)
-{
-  char *tail;
-  int result;
-
-  result = sqlite3_prepare_v2 (dbh, sql, strlen (sql), stmt,
-                               (const char **) &tail);
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Prepared `%s' / %p: %d\n", sql, *stmt, result);
-  if (result != SQLITE_OK)
-    LOG (GNUNET_ERROR_TYPE_ERROR,
-        _("Error preparing SQL query: %s\n  %s\n"),
-        sqlite3_errmsg (dbh), sql);
-  return result;
-}
-
-
-/**
- * @brief Prepare a SQL statement
- *
- * @param dbh handle to the database
- * @param sql SQL statement, UTF-8 encoded
- * @return 0 on success
- */
-static int
-sql_exec (sqlite3 *dbh, const char *sql)
-{
-  int result;
-
-  result = sqlite3_exec (dbh, sql, NULL, NULL, NULL);
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Executed `%s' / %d\n", sql, result);
-  if (result != SQLITE_OK)
-    LOG (GNUNET_ERROR_TYPE_ERROR,
-        _("Error executing SQL query: %s\n  %s\n"),
-        sqlite3_errmsg (dbh), sql);
-  return result;
-}
-
-
-/**
- * Initialize the database connections and associated
- * data structures (create tables and indices
- * as needed as well).
- *
- * @param plugin the plugin context (state for this module)
- * @return GNUNET_OK on success
- */
-static int
-database_setup (struct Plugin *plugin)
-{
-  char *filename;
-
-  if (GNUNET_OK !=
-      GNUNET_CONFIGURATION_get_value_filename (plugin->cfg, "psycstore-sqlite",
-                                               "FILENAME", &filename))
-  {
-    GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
-                              "psycstore-sqlite", "FILENAME");
-    return GNUNET_SYSERR;
-  }
-  if (GNUNET_OK != GNUNET_DISK_file_test (filename))
-  {
-    if (GNUNET_OK != GNUNET_DISK_directory_create_for_file (filename))
-    {
-      GNUNET_break (0);
-      GNUNET_free (filename);
-      return GNUNET_SYSERR;
-    }
-  }
-  /* filename should be UTF-8-encoded. If it isn't, it's a bug */
-  plugin->fn = filename;
-
-  /* Open database and precompile statements */
-  if (SQLITE_OK != sqlite3_open (plugin->fn, &plugin->dbh))
-  {
-    LOG (GNUNET_ERROR_TYPE_ERROR,
-        _("Unable to initialize SQLite: %s.\n"),
-        sqlite3_errmsg (plugin->dbh));
-    return GNUNET_SYSERR;
-  }
-
-#if DEBUG_PSYCSTORE
-  sqlite3_trace (plugin->dbh, &sql_trace, NULL);
-#endif
-
-  sql_exec (plugin->dbh, "PRAGMA temp_store=MEMORY");
-  sql_exec (plugin->dbh, "PRAGMA synchronous=NORMAL");
-  sql_exec (plugin->dbh, "PRAGMA legacy_file_format=OFF");
-  sql_exec (plugin->dbh, "PRAGMA auto_vacuum=INCREMENTAL");
-  sql_exec (plugin->dbh, "PRAGMA encoding=\"UTF-8\"");
-#if ! DEBUG_PSYCSTORE
-  sql_exec (plugin->dbh, "PRAGMA locking_mode=EXCLUSIVE");
-#endif
-  sql_exec (plugin->dbh, "PRAGMA page_size=4096");
-
-  sqlite3_busy_timeout (plugin->dbh, BUSY_TIMEOUT_MS);
-
-  /* Create tables */
-
-  sql_exec (plugin->dbh,
-            "CREATE TABLE IF NOT EXISTS channels (\n"
-            "  id INTEGER PRIMARY KEY,\n"
-            "  pub_key BLOB(32) UNIQUE,\n"
-            "  max_state_message_id INTEGER,\n" // last applied state message ID
-            "  state_hash_message_id INTEGER\n" // last message ID with a state hash
-            ");");
-
-  sql_exec (plugin->dbh,
-            "CREATE TABLE IF NOT EXISTS slaves (\n"
-            "  id INTEGER PRIMARY KEY,\n"
-            "  pub_key BLOB(32) UNIQUE\n"
-            ");");
-
-  sql_exec (plugin->dbh,
-            "CREATE TABLE IF NOT EXISTS membership (\n"
-            "  channel_id INTEGER NOT NULL REFERENCES channels(id),\n"
-            "  slave_id INTEGER NOT NULL REFERENCES slaves(id),\n"
-            "  did_join INTEGER NOT NULL,\n"
-            "  announced_at INTEGER NOT NULL,\n"
-            "  effective_since INTEGER NOT NULL,\n"
-            "  group_generation INTEGER NOT NULL\n"
-            ");");
-  sql_exec (plugin->dbh,
-            "CREATE INDEX IF NOT EXISTS idx_membership_channel_id_slave_id "
-            "ON membership (channel_id, slave_id);");
-
-  /** @todo messages table: add method_name column */
-  sql_exec (plugin->dbh,
-            "CREATE TABLE IF NOT EXISTS messages (\n"
-            "  channel_id INTEGER NOT NULL REFERENCES channels(id),\n"
-            "  hop_counter INTEGER NOT NULL,\n"
-            "  signature BLOB,\n"
-            "  purpose BLOB,\n"
-            "  fragment_id INTEGER NOT NULL,\n"
-            "  fragment_offset INTEGER NOT NULL,\n"
-            "  message_id INTEGER NOT NULL,\n"
-            "  group_generation INTEGER NOT NULL,\n"
-            "  multicast_flags INTEGER NOT NULL,\n"
-            "  psycstore_flags INTEGER NOT NULL,\n"
-            "  data BLOB,\n"
-            "  PRIMARY KEY (channel_id, fragment_id),\n"
-            "  UNIQUE (channel_id, message_id, fragment_offset)\n"
-            ");");
-
-  sql_exec (plugin->dbh,
-            "CREATE TABLE IF NOT EXISTS state (\n"
-            "  channel_id INTEGER NOT NULL REFERENCES channels(id),\n"
-            "  name TEXT NOT NULL,\n"
-            "  value_current BLOB,\n"
-            "  value_signed BLOB,\n"
-            "  PRIMARY KEY (channel_id, name)\n"
-            ");");
-
-  sql_exec (plugin->dbh,
-            "CREATE TABLE IF NOT EXISTS state_sync (\n"
-            "  channel_id INTEGER NOT NULL REFERENCES channels(id),\n"
-            "  name TEXT NOT NULL,\n"
-            "  value BLOB,\n"
-            "  PRIMARY KEY (channel_id, name)\n"
-            ");");
-
-  /* Prepare statements */
-
-  sql_prepare (plugin->dbh, "BEGIN;", &plugin->transaction_begin);
-
-  sql_prepare (plugin->dbh, "COMMIT;", &plugin->transaction_commit);
-
-  sql_prepare (plugin->dbh, "ROLLBACK;", &plugin->transaction_rollback);
-
-  sql_prepare (plugin->dbh,
-               "INSERT OR IGNORE INTO channels (pub_key) VALUES (?);",
-               &plugin->insert_channel_key);
-
-  sql_prepare (plugin->dbh,
-               "INSERT OR IGNORE INTO slaves (pub_key) VALUES (?);",
-               &plugin->insert_slave_key);
-
-  sql_prepare (plugin->dbh,
-               "INSERT INTO membership\n"
-               " (channel_id, slave_id, did_join, announced_at,\n"
-               "  effective_since, group_generation)\n"
-               "VALUES ((SELECT id FROM channels WHERE pub_key = ?),\n"
-               "        (SELECT id FROM slaves WHERE pub_key = ?),\n"
-               "        ?, ?, ?, ?);",
-               &plugin->insert_membership);
-
-  sql_prepare (plugin->dbh,
-               "SELECT did_join FROM membership\n"
-               "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?)\n"
-               "      AND slave_id = (SELECT id FROM slaves WHERE pub_key = ?)\n"
-               "      AND effective_since <= ? AND did_join = 1\n"
-               "ORDER BY announced_at DESC LIMIT 1;",
-               &plugin->select_membership);
-
-  sql_prepare (plugin->dbh,
-               "INSERT OR IGNORE INTO messages\n"
-               " (channel_id, hop_counter, signature, purpose,\n"
-               "  fragment_id, fragment_offset, message_id,\n"
-               "  group_generation, multicast_flags, psycstore_flags, data)\n"
-               "VALUES ((SELECT id FROM channels WHERE pub_key = ?),\n"
-               "        ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);",
-               &plugin->insert_fragment);
-
-  sql_prepare (plugin->dbh,
-               "UPDATE messages\n"
-               "SET psycstore_flags = psycstore_flags | ?\n"
-               "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?)\n"
-               "      AND message_id = ? AND fragment_offset = 0;",
-               &plugin->update_message_flags);
-
-  sql_prepare (plugin->dbh,
-               "SELECT hop_counter, signature, purpose, fragment_id,\n"
-               "       fragment_offset, message_id, group_generation,\n"
-               "       multicast_flags, psycstore_flags, data\n"
-               "FROM messages\n"
-               "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?)\n"
-               "      AND ? <= fragment_id AND fragment_id <= ?;",
-               &plugin->select_fragments);
-
-  /** @todo select_messages: add method_prefix filter */
-  sql_prepare (plugin->dbh,
-               "SELECT hop_counter, signature, purpose, fragment_id,\n"
-               "       fragment_offset, message_id, group_generation,\n"
-               "       multicast_flags, psycstore_flags, data\n"
-               "FROM messages\n"
-               "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?)\n"
-               "      AND ? <= message_id AND message_id <= ?"
-               "LIMIT ?;",
-               &plugin->select_messages);
-
-  sql_prepare (plugin->dbh,
-               "SELECT * FROM\n"
-               "(SELECT hop_counter, signature, purpose, fragment_id,\n"
-               "        fragment_offset, message_id, group_generation,\n"
-               "        multicast_flags, psycstore_flags, data\n"
-               " FROM messages\n"
-               " WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?)\n"
-               " ORDER BY fragment_id DESC\n"
-               " LIMIT ?)\n"
-               "ORDER BY fragment_id;",
-               &plugin->select_latest_fragments);
-
-  /** @todo select_latest_messages: add method_prefix filter */
-  sql_prepare (plugin->dbh,
-               "SELECT hop_counter, signature, purpose, fragment_id,\n"
-               "       fragment_offset, message_id, group_generation,\n"
-               "        multicast_flags, psycstore_flags, data\n"
-               "FROM messages\n"
-               "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?)\n"
-               "      AND message_id IN\n"
-               "      (SELECT message_id\n"
-               "       FROM messages\n"
-               "       WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?)\n"
-               "       GROUP BY message_id\n"
-               "       ORDER BY message_id\n"
-               "       DESC LIMIT ?)\n"
-               "ORDER BY fragment_id;",
-               &plugin->select_latest_messages);
-
-  sql_prepare (plugin->dbh,
-               "SELECT hop_counter, signature, purpose, fragment_id,\n"
-               "       fragment_offset, message_id, group_generation,\n"
-               "       multicast_flags, psycstore_flags, data\n"
-               "FROM messages\n"
-               "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?)\n"
-               "      AND message_id = ? AND fragment_offset = ?;",
-               &plugin->select_message_fragment);
-
-  sql_prepare (plugin->dbh,
-               "SELECT fragment_id, message_id, group_generation\n"
-               "FROM messages\n"
-               "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?)\n"
-               "ORDER BY fragment_id DESC LIMIT 1;",
-               &plugin->select_counters_message);
-
-  sql_prepare (plugin->dbh,
-               "SELECT max_state_message_id\n"
-               "FROM channels\n"
-               "WHERE pub_key = ? AND max_state_message_id IS NOT NULL;",
-               &plugin->select_counters_state);
-
-  sql_prepare (plugin->dbh,
-               "UPDATE channels\n"
-               "SET max_state_message_id = ?\n"
-               "WHERE pub_key = ?;",
-               &plugin->update_max_state_message_id);
-
-  sql_prepare (plugin->dbh,
-               "UPDATE channels\n"
-               "SET state_hash_message_id = ?\n"
-               "WHERE pub_key = ?;",
-               &plugin->update_state_hash_message_id);
-
-  sql_prepare (plugin->dbh,
-               "INSERT OR REPLACE INTO state\n"
-               "  (channel_id, name, value_current, value_signed)\n"
-               "SELECT new.channel_id, new.name,\n"
-               "       new.value_current, old.value_signed\n"
-               "FROM (SELECT (SELECT id FROM channels WHERE pub_key = ?)\n"
-               "             AS channel_id,\n"
-               "             ? AS name, ? AS value_current) AS new\n"
-               "LEFT JOIN (SELECT channel_id, name, value_signed\n"
-               "           FROM state) AS old\n"
-               "ON new.channel_id = old.channel_id AND new.name = old.name;",
-               &plugin->insert_state_current);
-
-  sql_prepare (plugin->dbh,
-               "DELETE FROM state\n"
-               "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?)\n"
-               "      AND (value_current IS NULL OR length(value_current) = 0)\n"
-               "      AND (value_signed IS NULL OR length(value_signed) = 0);",
-               &plugin->delete_state_empty);
-
-  sql_prepare (plugin->dbh,
-               "UPDATE state\n"
-               "SET value_signed = value_current\n"
-               "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?);",
-               &plugin->update_state_signed);
-
-  sql_prepare (plugin->dbh,
-               "DELETE FROM state\n"
-               "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?);",
-               &plugin->delete_state);
-
-  sql_prepare (plugin->dbh,
-               "INSERT INTO state_sync (channel_id, name, value)\n"
-               "VALUES ((SELECT id FROM channels WHERE pub_key = ?), ?, ?);",
-               &plugin->insert_state_sync);
-
-  sql_prepare (plugin->dbh,
-               "INSERT INTO state\n"
-               " (channel_id, name, value_current, value_signed)\n"
-               "SELECT channel_id, name, value, value\n"
-               "FROM state_sync\n"
-               "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?);",
-               &plugin->insert_state_from_sync);
-
-  sql_prepare (plugin->dbh,
-               "DELETE FROM state_sync\n"
-               "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?);",
-               &plugin->delete_state_sync);
-
-  sql_prepare (plugin->dbh,
-               "SELECT value_current\n"
-               "FROM state\n"
-               "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?)\n"
-               "      AND name = ?;",
-               &plugin->select_state_one);
-
-  sql_prepare (plugin->dbh,
-               "SELECT name, value_current\n"
-               "FROM state\n"
-               "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?)\n"
-               "      AND (name = ? OR substr(name, 1, ?) = ?);",
-               &plugin->select_state_prefix);
-
-  sql_prepare (plugin->dbh,
-               "SELECT name, value_signed\n"
-               "FROM state\n"
-               "WHERE channel_id = (SELECT id FROM channels WHERE pub_key = ?)"
-               "      AND value_signed IS NOT NULL;",
-               &plugin->select_state_signed);
-
-  return GNUNET_OK;
-}
-
-
-/**
- * Shutdown database connection and associate data
- * structures.
- * @param plugin the plugin context (state for this module)
- */
-static void
-database_shutdown (struct Plugin *plugin)
-{
-  int result;
-  sqlite3_stmt *stmt;
-  while (NULL != (stmt = sqlite3_next_stmt (plugin->dbh, NULL)))
-  {
-    result = sqlite3_finalize (stmt);
-    if (SQLITE_OK != result)
-      LOG (GNUNET_ERROR_TYPE_WARNING,
-           "Failed to close statement %p: %d\n", stmt, result);
-  }
-  if (SQLITE_OK != sqlite3_close (plugin->dbh))
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR, "sqlite3_close");
-
-  GNUNET_free_non_null (plugin->fn);
-}
-
-/**
- * Execute a prepared statement with a @a channel_key argument.
- *
- * @param plugin Plugin handle.
- * @param stmt Statement to execute.
- * @param channel_key Public key of the channel.
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-exec_channel (struct Plugin *plugin, sqlite3_stmt *stmt,
-              const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key)
-{
-  if (SQLITE_OK != sqlite3_bind_blob (stmt, 1, channel_key,
-                                      sizeof (*channel_key), SQLITE_STATIC))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_bind");
-  }
-  else if (SQLITE_DONE != sqlite3_step (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_step");
-  }
-
-  if (SQLITE_OK != sqlite3_reset (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_reset");
-    return GNUNET_SYSERR;
-  }
-
-  return GNUNET_OK;
-}
-
-/**
- * Begin a transaction.
- */
-static int
-transaction_begin (struct Plugin *plugin, enum Transactions transaction)
-{
-  sqlite3_stmt *stmt = plugin->transaction_begin;
-
-  if (SQLITE_DONE != sqlite3_step (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_step");
-  }
-  if (SQLITE_OK != sqlite3_reset (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_reset");
-    return GNUNET_SYSERR;
-  }
-
-  plugin->transaction = transaction;
-  return GNUNET_OK;
-}
-
-
-/**
- * Commit current transaction.
- */
-static int
-transaction_commit (struct Plugin *plugin)
-{
-  sqlite3_stmt *stmt = plugin->transaction_commit;
-
-  if (SQLITE_DONE != sqlite3_step (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_step");
-  }
-  if (SQLITE_OK != sqlite3_reset (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_reset");
-    return GNUNET_SYSERR;
-  }
-
-  plugin->transaction = TRANSACTION_NONE;
-  return GNUNET_OK;
-}
-
-
-/**
- * Roll back current transaction.
- */
-static int
-transaction_rollback (struct Plugin *plugin)
-{
-  sqlite3_stmt *stmt = plugin->transaction_rollback;
-
-  if (SQLITE_DONE != sqlite3_step (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_step");
-  }
-  if (SQLITE_OK != sqlite3_reset (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_reset");
-    return GNUNET_SYSERR;
-  }
-  plugin->transaction = TRANSACTION_NONE;
-  return GNUNET_OK;
-}
-
-
-static int
-channel_key_store (struct Plugin *plugin,
-                   const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key)
-{
-  sqlite3_stmt *stmt = plugin->insert_channel_key;
-
-  if (SQLITE_OK != sqlite3_bind_blob (stmt, 1, channel_key,
-                                      sizeof (*channel_key), SQLITE_STATIC))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_bind");
-  }
-  else if (SQLITE_DONE != sqlite3_step (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_step");
-  }
-
-  if (SQLITE_OK != sqlite3_reset (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_reset");
-    return GNUNET_SYSERR;
-  }
-
-  return GNUNET_OK;
-}
-
-
-static int
-slave_key_store (struct Plugin *plugin,
-                 const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_key)
-{
-  sqlite3_stmt *stmt = plugin->insert_slave_key;
-
-  if (SQLITE_OK != sqlite3_bind_blob (stmt, 1, slave_key,
-                                      sizeof (*slave_key), SQLITE_STATIC))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_bind");
-  }
-  else if (SQLITE_DONE != sqlite3_step (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_step");
-  }
-
-
-  if (SQLITE_OK != sqlite3_reset (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_reset");
-    return GNUNET_SYSERR;
-  }
-
-  return GNUNET_OK;
-}
-
-
-/**
- * Store join/leave events for a PSYC channel in order to be able to answer
- * membership test queries later.
- *
- * @see GNUNET_PSYCSTORE_membership_store()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-sqlite_membership_store (void *cls,
-                         const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                         const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_key,
-                         int did_join,
-                         uint64_t announced_at,
-                         uint64_t effective_since,
-                         uint64_t group_generation)
-{
-  struct Plugin *plugin = cls;
-  sqlite3_stmt *stmt = plugin->insert_membership;
-
-  GNUNET_assert (TRANSACTION_NONE == plugin->transaction);
-
-  if (announced_at > INT64_MAX ||
-      effective_since > INT64_MAX ||
-      group_generation > INT64_MAX)
-  {
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-
-  if (GNUNET_OK != channel_key_store (plugin, channel_key)
-      || GNUNET_OK != slave_key_store (plugin, slave_key))
-    return GNUNET_SYSERR;
-
-  if (SQLITE_OK != sqlite3_bind_blob (stmt, 1, channel_key,
-                                      sizeof (*channel_key), SQLITE_STATIC)
-      || SQLITE_OK != sqlite3_bind_blob (stmt, 2, slave_key,
-                                         sizeof (*slave_key), SQLITE_STATIC)
-      || SQLITE_OK != sqlite3_bind_int (stmt, 3, did_join)
-      || SQLITE_OK != sqlite3_bind_int64 (stmt, 4, announced_at)
-      || SQLITE_OK != sqlite3_bind_int64 (stmt, 5, effective_since)
-      || SQLITE_OK != sqlite3_bind_int64 (stmt, 6, group_generation))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_bind");
-  }
-  else if (SQLITE_DONE != sqlite3_step (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_step");
-  }
-
-  if (SQLITE_OK != sqlite3_reset (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_reset");
-    return GNUNET_SYSERR;
-  }
-
-  return GNUNET_OK;
-}
-
-/**
- * Test if a member was admitted to the channel at the given message ID.
- *
- * @see GNUNET_PSYCSTORE_membership_test()
- *
- * @return #GNUNET_YES if the member was admitted, #GNUNET_NO if not,
- *         #GNUNET_SYSERR if there was en error.
- */
-static int
-membership_test (void *cls,
-                 const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                 const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_key,
-                 uint64_t message_id)
-{
-  struct Plugin *plugin = cls;
-  sqlite3_stmt *stmt = plugin->select_membership;
-  int ret = GNUNET_SYSERR;
-
-  if (SQLITE_OK != sqlite3_bind_blob (stmt, 1, channel_key,
-                                      sizeof (*channel_key), SQLITE_STATIC)
-      || SQLITE_OK != sqlite3_bind_blob (stmt, 2, slave_key,
-                                         sizeof (*slave_key), SQLITE_STATIC)
-      || SQLITE_OK != sqlite3_bind_int64 (stmt, 3, message_id))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_bind");
-  }
-  else
-  {
-    switch (sqlite3_step (stmt))
-    {
-    case SQLITE_DONE:
-      ret = GNUNET_NO;
-      break;
-    case SQLITE_ROW:
-      ret = GNUNET_YES;
-    }
-  }
-
-  if (SQLITE_OK != sqlite3_reset (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_reset");
-  }
-
-  return ret;
-}
-
-/**
- * Store a message fragment sent to a channel.
- *
- * @see GNUNET_PSYCSTORE_fragment_store()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-fragment_store (void *cls,
-                const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                const struct GNUNET_MULTICAST_MessageHeader *msg,
-                uint32_t psycstore_flags)
-{
-  struct Plugin *plugin = cls;
-  sqlite3_stmt *stmt = plugin->insert_fragment;
-
-  GNUNET_assert (TRANSACTION_NONE == plugin->transaction);
-
-  uint64_t fragment_id = GNUNET_ntohll (msg->fragment_id);
-  uint64_t fragment_offset = GNUNET_ntohll (msg->fragment_offset);
-  uint64_t message_id = GNUNET_ntohll (msg->message_id);
-  uint64_t group_generation = GNUNET_ntohll (msg->group_generation);
-
-  if (fragment_id > INT64_MAX || fragment_offset > INT64_MAX ||
-      message_id > INT64_MAX || group_generation > INT64_MAX)
-  {
-    LOG (GNUNET_ERROR_TYPE_ERROR,
-         "Tried to store fragment with a field > INT64_MAX: "
-         "%lu, %lu, %lu, %lu\n", fragment_id, fragment_offset,
-         message_id, group_generation);
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-
-  if (GNUNET_OK != channel_key_store (plugin, channel_key))
-    return GNUNET_SYSERR;
-
-  if (SQLITE_OK != sqlite3_bind_blob (stmt, 1, channel_key,
-                                      sizeof (*channel_key), SQLITE_STATIC)
-      || SQLITE_OK != sqlite3_bind_int64 (stmt, 2, ntohl (msg->hop_counter) )
-      || SQLITE_OK != sqlite3_bind_blob (stmt, 3, (const void *) &msg->signature,
-                                         sizeof (msg->signature), SQLITE_STATIC)
-      || SQLITE_OK != sqlite3_bind_blob (stmt, 4, (const void *) &msg->purpose,
-                                         sizeof (msg->purpose), SQLITE_STATIC)
-      || SQLITE_OK != sqlite3_bind_int64 (stmt, 5, fragment_id)
-      || SQLITE_OK != sqlite3_bind_int64 (stmt, 6, fragment_offset)
-      || SQLITE_OK != sqlite3_bind_int64 (stmt, 7, message_id)
-      || SQLITE_OK != sqlite3_bind_int64 (stmt, 8, group_generation)
-      || SQLITE_OK != sqlite3_bind_int64 (stmt, 9, ntohl (msg->flags))
-      || SQLITE_OK != sqlite3_bind_int64 (stmt, 10, psycstore_flags)
-      || SQLITE_OK != sqlite3_bind_blob (stmt, 11, (const void *) &msg[1],
-                                         ntohs (msg->header.size)
-                                         - sizeof (*msg), SQLITE_STATIC))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_bind");
-  }
-  else if (SQLITE_DONE != sqlite3_step (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_step");
-  }
-
-  if (SQLITE_OK != sqlite3_reset (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_reset");
-    return GNUNET_SYSERR;
-  }
-
-  return GNUNET_OK;
-}
-
-/**
- * Set additional flags for a given message.
- *
- * They are OR'd with any existing flags set.
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-message_add_flags (void *cls,
-                   const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                   uint64_t message_id,
-                   uint32_t psycstore_flags)
-{
-  struct Plugin *plugin = cls;
-  sqlite3_stmt *stmt = plugin->update_message_flags;
-  int ret = GNUNET_SYSERR;
-
-  if (SQLITE_OK != sqlite3_bind_int64 (stmt, 1, psycstore_flags)
-      || SQLITE_OK != sqlite3_bind_blob (stmt, 2, channel_key,
-                                         sizeof (*channel_key), SQLITE_STATIC)
-      || SQLITE_OK != sqlite3_bind_int64 (stmt, 3, message_id))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_bind");
-  }
-  else
-  {
-    switch (sqlite3_step (stmt))
-    {
-    case SQLITE_DONE:
-      ret = sqlite3_total_changes (plugin->dbh) > 0 ? GNUNET_OK : GNUNET_NO;
-      break;
-    default:
-      LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                  "sqlite3_step");
-    }
-  }
-
-  if (SQLITE_OK != sqlite3_reset (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_reset");
-    return GNUNET_SYSERR;
-  }
-
-  return ret;
-}
-
-static int
-fragment_row (sqlite3_stmt *stmt, GNUNET_PSYCSTORE_FragmentCallback cb,
-              void *cb_cls)
-{
-  int data_size = sqlite3_column_bytes (stmt, 9);
-  struct GNUNET_MULTICAST_MessageHeader *msg
-    = GNUNET_malloc (sizeof (*msg) + data_size);
-
-  msg->header.size = htons (sizeof (*msg) + data_size);
-  msg->header.type = htons (GNUNET_MESSAGE_TYPE_MULTICAST_MESSAGE);
-  msg->hop_counter = htonl ((uint32_t) sqlite3_column_int64 (stmt, 0));
-  GNUNET_memcpy (&msg->signature,
-          sqlite3_column_blob (stmt, 1),
-          sqlite3_column_bytes (stmt, 1));
-  GNUNET_memcpy (&msg->purpose,
-          sqlite3_column_blob (stmt, 2),
-          sqlite3_column_bytes (stmt, 2));
-  msg->fragment_id = GNUNET_htonll (sqlite3_column_int64 (stmt, 3));
-  msg->fragment_offset = GNUNET_htonll (sqlite3_column_int64 (stmt, 4));
-  msg->message_id = GNUNET_htonll (sqlite3_column_int64 (stmt, 5));
-  msg->group_generation = GNUNET_htonll (sqlite3_column_int64 (stmt, 6));
-  msg->flags = htonl (sqlite3_column_int64 (stmt, 7));
-  GNUNET_memcpy (&msg[1], sqlite3_column_blob (stmt, 9), data_size);
-
-  return cb (cb_cls, (void *) msg, sqlite3_column_int64 (stmt, 8));
-}
-
-
-static int
-fragment_select (struct Plugin *plugin, sqlite3_stmt *stmt,
-                 uint64_t *returned_fragments,
-                 GNUNET_PSYCSTORE_FragmentCallback cb, void *cb_cls)
-{
-  int ret = GNUNET_SYSERR;
-  int sql_ret;
-
-  do
-  {
-    sql_ret = sqlite3_step (stmt);
-    switch (sql_ret)
-    {
-    case SQLITE_DONE:
-      if (ret != GNUNET_OK)
-        ret = GNUNET_NO;
-      break;
-    case SQLITE_ROW:
-      ret = fragment_row (stmt, cb, cb_cls);
-      (*returned_fragments)++;
-      if (ret != GNUNET_YES)
-        sql_ret = SQLITE_DONE;
-      break;
-    default:
-      LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                  "sqlite3_step");
-    }
-  }
-  while (sql_ret == SQLITE_ROW);
-
-  return ret;
-}
-
-/**
- * Retrieve a message fragment range by fragment ID.
- *
- * @see GNUNET_PSYCSTORE_fragment_get()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-fragment_get (void *cls,
-              const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-              uint64_t first_fragment_id,
-              uint64_t last_fragment_id,
-              uint64_t *returned_fragments,
-              GNUNET_PSYCSTORE_FragmentCallback cb,
-              void *cb_cls)
-{
-  struct Plugin *plugin = cls;
-  sqlite3_stmt *stmt = plugin->select_fragments;
-  int ret = GNUNET_SYSERR;
-  *returned_fragments = 0;
-
-  if (SQLITE_OK != sqlite3_bind_blob (stmt, 1, channel_key,
-                                      sizeof (*channel_key),
-                                      SQLITE_STATIC)
-      || SQLITE_OK != sqlite3_bind_int64 (stmt, 2, first_fragment_id)
-      || SQLITE_OK != sqlite3_bind_int64 (stmt, 3, last_fragment_id))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_bind");
-  }
-  else
-  {
-    ret = fragment_select (plugin, stmt, returned_fragments, cb, cb_cls);
-  }
-
-  if (SQLITE_OK != sqlite3_reset (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_reset");
-  }
-
-  return ret;
-}
-
-
-/**
- * Retrieve a message fragment range by fragment ID.
- *
- * @see GNUNET_PSYCSTORE_fragment_get_latest()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-fragment_get_latest (void *cls,
-                     const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                     uint64_t fragment_limit,
-                     uint64_t *returned_fragments,
-                     GNUNET_PSYCSTORE_FragmentCallback cb,
-                     void *cb_cls)
-{
-  struct Plugin *plugin = cls;
-  sqlite3_stmt *stmt = plugin->select_latest_fragments;
-  int ret = GNUNET_SYSERR;
-  *returned_fragments = 0;
-
-  if (SQLITE_OK != sqlite3_bind_blob (stmt, 1, channel_key,
-                                      sizeof (*channel_key),
-                                      SQLITE_STATIC)
-      || SQLITE_OK != sqlite3_bind_int64 (stmt, 2, fragment_limit))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_bind");
-  }
-  else
-  {
-    ret = fragment_select (plugin, stmt, returned_fragments, cb, cb_cls);
-  }
-
-  if (SQLITE_OK != sqlite3_reset (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_reset");
-  }
-
-  return ret;
-}
-
-
-/**
- * Retrieve all fragments of a message ID range.
- *
- * @see GNUNET_PSYCSTORE_message_get()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-message_get (void *cls,
-             const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-             uint64_t first_message_id,
-             uint64_t last_message_id,
-             uint64_t fragment_limit,
-             uint64_t *returned_fragments,
-             GNUNET_PSYCSTORE_FragmentCallback cb,
-             void *cb_cls)
-{
-  struct Plugin *plugin = cls;
-  sqlite3_stmt *stmt = plugin->select_messages;
-  int ret = GNUNET_SYSERR;
-  *returned_fragments = 0;
-
-  if (SQLITE_OK != sqlite3_bind_blob (stmt, 1, channel_key,
-                                      sizeof (*channel_key),
-                                      SQLITE_STATIC)
-      || SQLITE_OK != sqlite3_bind_int64 (stmt, 2, first_message_id)
-      || SQLITE_OK != sqlite3_bind_int64 (stmt, 3, last_message_id)
-      || SQLITE_OK != sqlite3_bind_int64 (stmt, 4,
-                                          (0 != fragment_limit)
-                                          ? fragment_limit
-                                          : INT64_MAX))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_bind");
-  }
-  else
-  {
-    ret = fragment_select (plugin, stmt, returned_fragments, cb, cb_cls);
-  }
-
-  if (SQLITE_OK != sqlite3_reset (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_reset");
-  }
-
-  return ret;
-}
-
-
-/**
- * Retrieve all fragments of the latest messages.
- *
- * @see GNUNET_PSYCSTORE_message_get_latest()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-message_get_latest (void *cls,
-                    const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                    uint64_t message_limit,
-                    uint64_t *returned_fragments,
-                    GNUNET_PSYCSTORE_FragmentCallback cb,
-                    void *cb_cls)
-{
-  struct Plugin *plugin = cls;
-  sqlite3_stmt *stmt = plugin->select_latest_messages;
-  int ret = GNUNET_SYSERR;
-  *returned_fragments = 0;
-
-  if (SQLITE_OK != sqlite3_bind_blob (stmt, 1, channel_key,
-                                      sizeof (*channel_key),
-                                      SQLITE_STATIC)
-      || SQLITE_OK != sqlite3_bind_blob (stmt, 2, channel_key,
-                                         sizeof (*channel_key),
-                                         SQLITE_STATIC)
-      || SQLITE_OK != sqlite3_bind_int64 (stmt, 3, message_limit))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_bind");
-  }
-  else
-  {
-    ret = fragment_select (plugin, stmt, returned_fragments, cb, cb_cls);
-  }
-
-  if (SQLITE_OK != sqlite3_reset (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_reset");
-  }
-
-  return ret;
-}
-
-
-/**
- * Retrieve a fragment of message specified by its message ID and fragment
- * offset.
- *
- * @see GNUNET_PSYCSTORE_message_get_fragment()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-message_get_fragment (void *cls,
-                      const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                      uint64_t message_id,
-                      uint64_t fragment_offset,
-                      GNUNET_PSYCSTORE_FragmentCallback cb,
-                      void *cb_cls)
-{
-  struct Plugin *plugin = cls;
-  sqlite3_stmt *stmt = plugin->select_message_fragment;
-  int ret = GNUNET_SYSERR;
-
-  if (SQLITE_OK != sqlite3_bind_blob (stmt, 1, channel_key,
-                                      sizeof (*channel_key),
-                                      SQLITE_STATIC)
-      || SQLITE_OK != sqlite3_bind_int64 (stmt, 2, message_id)
-      || SQLITE_OK != sqlite3_bind_int64 (stmt, 3, fragment_offset))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_bind");
-  }
-  else
-  {
-    switch (sqlite3_step (stmt))
-    {
-    case SQLITE_DONE:
-      ret = GNUNET_NO;
-      break;
-    case SQLITE_ROW:
-      ret = fragment_row (stmt, cb, cb_cls);
-      break;
-    default:
-      LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                  "sqlite3_step");
-    }
-  }
-
-  if (SQLITE_OK != sqlite3_reset (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_reset");
-  }
-
-  return ret;
-}
-
-/**
- * Retrieve the max. values of message counters for a channel.
- *
- * @see GNUNET_PSYCSTORE_counters_get()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-counters_message_get (void *cls,
-                      const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                      uint64_t *max_fragment_id,
-                      uint64_t *max_message_id,
-                      uint64_t *max_group_generation)
-{
-  struct Plugin *plugin = cls;
-  sqlite3_stmt *stmt = plugin->select_counters_message;
-  int ret = GNUNET_SYSERR;
-
-  if (SQLITE_OK != sqlite3_bind_blob (stmt, 1, channel_key,
-                                      sizeof (*channel_key),
-                                      SQLITE_STATIC))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_bind");
-  }
-  else
-  {
-    switch (sqlite3_step (stmt))
-    {
-    case SQLITE_DONE:
-      ret = GNUNET_NO;
-      break;
-    case SQLITE_ROW:
-      *max_fragment_id = sqlite3_column_int64 (stmt, 0);
-      *max_message_id = sqlite3_column_int64 (stmt, 1);
-      *max_group_generation = sqlite3_column_int64 (stmt, 2);
-      ret = GNUNET_OK;
-      break;
-    default:
-      LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                  "sqlite3_step");
-    }
-  }
-
-  if (SQLITE_OK != sqlite3_reset (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_reset");
-  }
-
-  return ret;
-}
-
-/**
- * Retrieve the max. values of state counters for a channel.
- *
- * @see GNUNET_PSYCSTORE_counters_get()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-counters_state_get (void *cls,
-                    const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                    uint64_t *max_state_message_id)
-{
-  struct Plugin *plugin = cls;
-  sqlite3_stmt *stmt = plugin->select_counters_state;
-  int ret = GNUNET_SYSERR;
-
-  if (SQLITE_OK != sqlite3_bind_blob (stmt, 1, channel_key,
-                                      sizeof (*channel_key),
-                                      SQLITE_STATIC))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_bind");
-  }
-  else
-  {
-    switch (sqlite3_step (stmt))
-    {
-    case SQLITE_DONE:
-      ret = GNUNET_NO;
-      break;
-    case SQLITE_ROW:
-      *max_state_message_id = sqlite3_column_int64 (stmt, 0);
-      ret = GNUNET_OK;
-      break;
-    default:
-      LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                  "sqlite3_step");
-    }
-  }
-
-  if (SQLITE_OK != sqlite3_reset (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_reset");
-  }
-
-  return ret;
-}
-
-
-/**
- * Assign a value to a state variable.
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-state_assign (struct Plugin *plugin, sqlite3_stmt *stmt,
-              const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-              const char *name, const void *value, size_t value_size)
-{
-  int ret = GNUNET_SYSERR;
-
-  if (SQLITE_OK != sqlite3_bind_blob (stmt, 1, channel_key,
-                                      sizeof (*channel_key), SQLITE_STATIC)
-      || SQLITE_OK != sqlite3_bind_text (stmt, 2, name, -1, SQLITE_STATIC)
-      || SQLITE_OK != sqlite3_bind_blob (stmt, 3, value, value_size,
-                                         SQLITE_STATIC))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_bind");
-  }
-  else
-  {
-    switch (sqlite3_step (stmt))
-    {
-    case SQLITE_DONE:
-      ret = 0 < sqlite3_total_changes (plugin->dbh) ? GNUNET_OK : GNUNET_NO;
-      break;
-    default:
-      LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                  "sqlite3_step");
-    }
-  }
-
-  if (SQLITE_OK != sqlite3_reset (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_reset");
-    return GNUNET_SYSERR;
-  }
-
-  return ret;
-}
-
-
-static int
-update_message_id (struct Plugin *plugin, sqlite3_stmt *stmt,
-                   const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                   uint64_t message_id)
-{
-  if (SQLITE_OK != sqlite3_bind_int64 (stmt, 1, message_id)
-      || SQLITE_OK != sqlite3_bind_blob (stmt, 2, channel_key,
-                                         sizeof (*channel_key), SQLITE_STATIC))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_bind");
-  }
-  else if (SQLITE_DONE != sqlite3_step (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_step");
-  }
-  if (SQLITE_OK != sqlite3_reset (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_reset");
-    return GNUNET_SYSERR;
-  }
-  return GNUNET_OK;
-}
-
-
-/**
- * Begin modifying current state.
- */
-static int
-state_modify_begin (void *cls,
-                    const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                    uint64_t message_id, uint64_t state_delta)
-{
-  struct Plugin *plugin = cls;
-
-  if (state_delta > 0)
-  {
-    /**
-     * We can only apply state modifiers in the current message if modifiers in
-     * the previous stateful message (message_id - state_delta) were already
-     * applied.
-     */
-
-    uint64_t max_state_message_id = 0;
-    int ret = counters_state_get (plugin, channel_key, &max_state_message_id);
-    switch (ret)
-    {
-    case GNUNET_OK:
-    case GNUNET_NO: // no state yet
-      ret = GNUNET_OK;
-      break;
-    default:
-      return ret;
-    }
-
-    if (max_state_message_id < message_id - state_delta)
-      return GNUNET_NO; /* some stateful messages not yet applied */
-    else if (message_id - state_delta < max_state_message_id)
-      return GNUNET_NO; /* changes already applied */
-  }
-
-  if (TRANSACTION_NONE != plugin->transaction)
-  {
-    /** @todo FIXME: wait for other transaction to finish  */
-    return GNUNET_SYSERR;
-  }
-  return transaction_begin (plugin, TRANSACTION_STATE_MODIFY);
-}
-
-
-/**
- * Set the current value of state variable.
- *
- * @see GNUNET_PSYCSTORE_state_modify()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-state_modify_op (void *cls,
-                 const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                 enum GNUNET_PSYC_Operator op,
-                 const char *name, const void *value, size_t value_size)
-{
-  struct Plugin *plugin = cls;
-  GNUNET_assert (TRANSACTION_STATE_MODIFY == plugin->transaction);
-
-  switch (op)
-  {
-  case GNUNET_PSYC_OP_ASSIGN:
-    return state_assign (plugin, plugin->insert_state_current, channel_key,
-                         name, value, value_size);
-
-  default: /** @todo implement more state operations */
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-}
-
-
-/**
- * End modifying current state.
- */
-static int
-state_modify_end (void *cls,
-                  const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                  uint64_t message_id)
-{
-  struct Plugin *plugin = cls;
-  GNUNET_assert (TRANSACTION_STATE_MODIFY == plugin->transaction);
-
-  return
-    GNUNET_OK == exec_channel (plugin, plugin->delete_state_empty, channel_key)
-    && GNUNET_OK == update_message_id (plugin,
-                                       plugin->update_max_state_message_id,
-                                       channel_key, message_id)
-    && GNUNET_OK == transaction_commit (plugin)
-    ? GNUNET_OK : GNUNET_SYSERR;
-}
-
-
-/**
- * Begin state synchronization.
- */
-static int
-state_sync_begin (void *cls,
-                  const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key)
-{
-  struct Plugin *plugin = cls;
-  return exec_channel (plugin, plugin->delete_state_sync, channel_key);
-}
-
-
-/**
- * Assign current value of a state variable.
- *
- * @see GNUNET_PSYCSTORE_state_modify()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-state_sync_assign (void *cls,
-                const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                const char *name, const void *value, size_t value_size)
-{
-  struct Plugin *plugin = cls;
-  return state_assign (cls, plugin->insert_state_sync, channel_key,
-                       name, value, value_size);
-}
-
-
-/**
- * End modifying current state.
- */
-static int
-state_sync_end (void *cls,
-                const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                uint64_t max_state_message_id,
-                uint64_t state_hash_message_id)
-{
-  struct Plugin *plugin = cls;
-  int ret = GNUNET_SYSERR;
-
-  if (TRANSACTION_NONE != plugin->transaction)
-  {
-    /** @todo FIXME: wait for other transaction to finish  */
-    return GNUNET_SYSERR;
-  }
-
-  GNUNET_OK == transaction_begin (plugin, TRANSACTION_STATE_SYNC)
-    && GNUNET_OK == exec_channel (plugin, plugin->delete_state, channel_key)
-    && GNUNET_OK == exec_channel (plugin, plugin->insert_state_from_sync,
-                                  channel_key)
-    && GNUNET_OK == exec_channel (plugin, plugin->delete_state_sync,
-                                  channel_key)
-    && GNUNET_OK == update_message_id (plugin,
-                                       plugin->update_state_hash_message_id,
-                                       channel_key, state_hash_message_id)
-    && GNUNET_OK == update_message_id (plugin,
-                                       plugin->update_max_state_message_id,
-                                       channel_key, max_state_message_id)
-    && GNUNET_OK == transaction_commit (plugin)
-    ? ret = GNUNET_OK
-    : transaction_rollback (plugin);
-  return ret;
-}
-
-
-/**
- * Delete the whole state.
- *
- * @see GNUNET_PSYCSTORE_state_reset()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-state_reset (void *cls, const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key)
-{
-  struct Plugin *plugin = cls;
-  return exec_channel (plugin, plugin->delete_state, channel_key);
-}
-
-
-/**
- * Update signed values of state variables in the state store.
- *
- * @see GNUNET_PSYCSTORE_state_hash_update()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-state_update_signed (void *cls,
-                     const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key)
-{
-  struct Plugin *plugin = cls;
-  return exec_channel (plugin, plugin->update_state_signed, channel_key);
-}
-
-
-/**
- * Retrieve a state variable by name.
- *
- * @see GNUNET_PSYCSTORE_state_get()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-state_get (void *cls, const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-           const char *name, GNUNET_PSYCSTORE_StateCallback cb, void *cb_cls)
-{
-  struct Plugin *plugin = cls;
-  int ret = GNUNET_SYSERR;
-
-  sqlite3_stmt *stmt = plugin->select_state_one;
-
-  if (SQLITE_OK != sqlite3_bind_blob (stmt, 1, channel_key,
-                                      sizeof (*channel_key),
-                                      SQLITE_STATIC)
-      || SQLITE_OK != sqlite3_bind_text (stmt, 2, name, -1, SQLITE_STATIC))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_bind");
-  }
-  else
-  {
-    switch (sqlite3_step (stmt))
-    {
-    case SQLITE_DONE:
-      ret = GNUNET_NO;
-      break;
-    case SQLITE_ROW:
-      ret = cb (cb_cls, name, sqlite3_column_blob (stmt, 0),
-                sqlite3_column_bytes (stmt, 0));
-      break;
-    default:
-      LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                  "sqlite3_step");
-    }
-  }
-
-  if (SQLITE_OK != sqlite3_reset (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_reset");
-  }
-
-  return ret;
-}
-
-
-/**
- * Retrieve all state variables for a channel with the given prefix.
- *
- * @see GNUNET_PSYCSTORE_state_get_prefix()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-state_get_prefix (void *cls, const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                  const char *name, GNUNET_PSYCSTORE_StateCallback cb,
-                  void *cb_cls)
-{
-  struct Plugin *plugin = cls;
-  int ret = GNUNET_SYSERR;
-  sqlite3_stmt *stmt = plugin->select_state_prefix;
-  size_t name_len = strlen (name);
-
-  if (SQLITE_OK != sqlite3_bind_blob (stmt, 1, channel_key,
-                                      sizeof (*channel_key), SQLITE_STATIC)
-      || SQLITE_OK != sqlite3_bind_text (stmt, 2, name, name_len, SQLITE_STATIC)
-      || SQLITE_OK != sqlite3_bind_int (stmt, 3, name_len)
-      || SQLITE_OK != sqlite3_bind_text (stmt, 4, name, name_len, SQLITE_STATIC))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_bind");
-  }
-  else
-  {
-    int sql_ret;
-    do
-    {
-      sql_ret = sqlite3_step (stmt);
-      switch (sql_ret)
-      {
-      case SQLITE_DONE:
-        if (ret != GNUNET_OK)
-          ret = GNUNET_NO;
-        break;
-      case SQLITE_ROW:
-        ret = cb (cb_cls, (const char *) sqlite3_column_text (stmt, 0),
-                  sqlite3_column_blob (stmt, 1),
-                  sqlite3_column_bytes (stmt, 1));
-        if (ret != GNUNET_YES)
-          sql_ret = SQLITE_DONE;
-        break;
-      default:
-        LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                    "sqlite3_step");
-      }
-    }
-    while (sql_ret == SQLITE_ROW);
-  }
-  if (SQLITE_OK != sqlite3_reset (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_reset");
-  }
-  return ret;
-}
-
-
-/**
- * Retrieve all signed state variables for a channel.
- *
- * @see GNUNET_PSYCSTORE_state_get_signed()
- *
- * @return #GNUNET_OK on success, else #GNUNET_SYSERR
- */
-static int
-state_get_signed (void *cls,
-                  const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                  GNUNET_PSYCSTORE_StateCallback cb, void *cb_cls)
-{
-  struct Plugin *plugin = cls;
-  int ret = GNUNET_SYSERR;
-
-  sqlite3_stmt *stmt = plugin->select_state_signed;
-
-  if (SQLITE_OK != sqlite3_bind_blob (stmt, 1, channel_key,
-                                      sizeof (*channel_key), SQLITE_STATIC))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_bind");
-  }
-  else
-  {
-    int sql_ret;
-    do
-    {
-      sql_ret = sqlite3_step (stmt);
-      switch (sql_ret)
-      {
-      case SQLITE_DONE:
-        if (ret != GNUNET_OK)
-          ret = GNUNET_NO;
-        break;
-      case SQLITE_ROW:
-        ret = cb (cb_cls, (const char *) sqlite3_column_text (stmt, 0),
-                  sqlite3_column_blob (stmt, 1),
-                  sqlite3_column_bytes (stmt, 1));
-        if (ret != GNUNET_YES)
-          sql_ret = SQLITE_DONE;
-        break;
-      default:
-        LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                    "sqlite3_step");
-      }
-    }
-    while (sql_ret == SQLITE_ROW);
-  }
-
-  if (SQLITE_OK != sqlite3_reset (stmt))
-  {
-    LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
-                "sqlite3_reset");
-  }
-
-  return ret;
-}
-
-
-/**
- * Entry point for the plugin.
- *
- * @param cls The struct GNUNET_CONFIGURATION_Handle.
- * @return NULL on error, otherwise the plugin context
- */
-void *
-libgnunet_plugin_psycstore_sqlite_init (void *cls)
-{
-  static struct Plugin plugin;
-  const struct GNUNET_CONFIGURATION_Handle *cfg = cls;
-  struct GNUNET_PSYCSTORE_PluginFunctions *api;
-
-  if (NULL != plugin.cfg)
-    return NULL;                /* can only initialize once! */
-  memset (&plugin, 0, sizeof (struct Plugin));
-  plugin.cfg = cfg;
-  if (GNUNET_OK != database_setup (&plugin))
-  {
-    database_shutdown (&plugin);
-    return NULL;
-  }
-  api = GNUNET_new (struct GNUNET_PSYCSTORE_PluginFunctions);
-  api->cls = &plugin;
-  api->membership_store = &sqlite_membership_store;
-  api->membership_test = &membership_test;
-  api->fragment_store = &fragment_store;
-  api->message_add_flags = &message_add_flags;
-  api->fragment_get = &fragment_get;
-  api->fragment_get_latest = &fragment_get_latest;
-  api->message_get = &message_get;
-  api->message_get_latest = &message_get_latest;
-  api->message_get_fragment = &message_get_fragment;
-  api->counters_message_get = &counters_message_get;
-  api->counters_state_get = &counters_state_get;
-  api->state_modify_begin = &state_modify_begin;
-  api->state_modify_op = &state_modify_op;
-  api->state_modify_end = &state_modify_end;
-  api->state_sync_begin = &state_sync_begin;
-  api->state_sync_assign = &state_sync_assign;
-  api->state_sync_end = &state_sync_end;
-  api->state_reset = &state_reset;
-  api->state_update_signed = &state_update_signed;
-  api->state_get = &state_get;
-  api->state_get_prefix = &state_get_prefix;
-  api->state_get_signed = &state_get_signed;
-
-  LOG (GNUNET_ERROR_TYPE_INFO, _("SQLite database running\n"));
-  return api;
-}
-
-
-/**
- * Exit point from the plugin.
- *
- * @param cls The plugin context (as returned by "init")
- * @return Always NULL
- */
-void *
-libgnunet_plugin_psycstore_sqlite_done (void *cls)
-{
-  struct GNUNET_PSYCSTORE_PluginFunctions *api = cls;
-  struct Plugin *plugin = api->cls;
-
-  database_shutdown (plugin);
-  plugin->cfg = NULL;
-  GNUNET_free (api);
-  LOG (GNUNET_ERROR_TYPE_DEBUG, "SQLite plugin is finished\n");
-  return NULL;
-}
-
-/* end of plugin_psycstore_sqlite.c */
diff --git a/src/psycstore/psycstore.conf.in b/src/psycstore/psycstore.conf.in
deleted file mode 100644 (file)
index 3905db1..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-[psycstore]
-START_ON_DEMAND = @START_ON_DEMAND@
-BINARY = gnunet-service-psycstore
-
-UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-service-psycstore.sock
-UNIX_MATCH_UID = YES
-UNIX_MATCH_GID = YES
-
-@UNIXONLY@PORT = 2111
-HOSTNAME = localhost
-ACCEPT_FROM = 127.0.0.1;
-ACCEPT_FROM6 = ::1;
-
-DATABASE = sqlite
-
-[psycstore-sqlite]
-FILENAME = $GNUNET_DATA_HOME/psycstore/sqlite.db
-
-[psycstore-mysql]
-DATABASE = gnunet
-CONFIG = ~/.my.cnf
-# USER = gnunet
-# PASSWORD =
-# HOST = localhost
-# PORT = 3306
-
-[psycstore-postgres]
-CONFIG = connect_timeout=10; dbname=gnunet
diff --git a/src/psycstore/psycstore.h b/src/psycstore/psycstore.h
deleted file mode 100644 (file)
index 9a1c06a..0000000
+++ /dev/null
@@ -1,520 +0,0 @@
-/*
- * This file is part of GNUnet
- * Copyright (C) 2013 GNUnet e.V.
- *
- * GNUnet is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNUnet is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
- */
-
-/**
- * @file psycstore/psycstore.h
- * @brief Common type definitions for the PSYCstore service and API.
- * @author Gabor X Toth
- */
-
-#ifndef GNUNET_PSYCSTORE_H
-#define GNUNET_PSYCSTORE_H
-
-#include "gnunet_common.h"
-
-
-GNUNET_NETWORK_STRUCT_BEGIN
-
-/**
- * Answer from service to client about last operation.
- */
-struct OperationResult
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_PSYCSTORE_RESULT_CODE
-   */
-  struct GNUNET_MessageHeader header;
-
-  uint32_t reserved GNUNET_PACKED;
-
-  /**
-   * Operation ID.
-   */
-  uint64_t op_id GNUNET_PACKED;
-
-  /**lowed by
-   * Status code for the operation.
-   */
-  uint64_t result_code GNUNET_PACKED;
-
-  /* followed by 0-terminated error message (on error) */
-
-};
-
-
-/**
- * Answer from service to client about master counters.
- *
- * @see GNUNET_PSYCSTORE_counters_get()
- */
-struct CountersResult
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_PSYCSTORE_RESULT_COUNTERS
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * Status code for the operation:
-   * #GNUNET_OK: success, counter values are returned.
-   * #GNUNET_NO: no message has been sent to the channel yet.
-   * #GNUNET_SYSERR: an error occurred.
-   */
-  uint32_t result_code GNUNET_PACKED;
-
-  /**
-   * Operation ID.
-   */
-  uint64_t op_id GNUNET_PACKED;
-
-  uint64_t max_fragment_id GNUNET_PACKED;
-
-  uint64_t max_message_id GNUNET_PACKED;
-
-  uint64_t max_group_generation GNUNET_PACKED;
-
-  uint64_t max_state_message_id GNUNET_PACKED;
-};
-
-
-/**
- * Answer from service to client containing a message fragment.
- */
-struct FragmentResult
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_PSYCSTORE_RESULT_CODE
-   */
-  struct GNUNET_MessageHeader header;
-
-  uint32_t psycstore_flags GNUNET_PACKED;
-
-  /**
-   * Operation ID.
-   */
-  uint64_t op_id GNUNET_PACKED;
-
-  /* Followed by GNUNET_MULTICAST_MessageHeader */
-};
-
-
-/**
- * Answer from service to client containing a state variable.
- */
-struct StateResult
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_PSYCSTORE_RESULT_CODE
-   */
-  struct GNUNET_MessageHeader header;
-
-  uint16_t name_size GNUNET_PACKED;
-
-  uint16_t reserved GNUNET_PACKED;
-
-  /**
-   * Operation ID.
-   */
-  uint64_t op_id GNUNET_PACKED;
-
-  /* Followed by name and value */
-};
-
-
-/**
- * Generic operation request.
- */
-struct OperationRequest
-{
-  struct GNUNET_MessageHeader header;
-
-  uint32_t reserved GNUNET_PACKED;
-
-  /**
-   * Operation ID.
-   */
-  uint64_t op_id GNUNET_PACKED;
-
-  struct GNUNET_CRYPTO_EddsaPublicKey channel_key;
-};
-
-
-/**
- * @see GNUNET_PSYCSTORE_membership_store()
- */
-struct MembershipStoreRequest
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_PSYCSTORE_MEMBERSHIP_STORE
-   */
-  struct GNUNET_MessageHeader header;
-
-  uint32_t reserved GNUNET_PACKED;
-
-  /**
-   * Operation ID.
-   */
-  uint64_t op_id GNUNET_PACKED;
-
-  /**
-   * Channel's public key.
-   */
-  struct GNUNET_CRYPTO_EddsaPublicKey channel_key;
-
-  /**
-   * Slave's public key.
-   */
-  struct GNUNET_CRYPTO_EcdsaPublicKey slave_key;
-
-  uint64_t announced_at GNUNET_PACKED;
-  uint64_t effective_since GNUNET_PACKED;
-  uint64_t group_generation GNUNET_PACKED;
-  uint8_t did_join;
-};
-
-
-/**
- * @see GNUNET_PSYCSTORE_membership_test()
- */
-struct MembershipTestRequest
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_PSYCSTORE_MEMBERSHIP_TEST
-   */
-  struct GNUNET_MessageHeader header;
-
-  uint32_t reserved GNUNET_PACKED;
-
-  /**
-   * Operation ID.
-   */
-  uint64_t op_id GNUNET_PACKED;
-
-  /**
-   * Channel's public key.
-   */
-  struct GNUNET_CRYPTO_EddsaPublicKey channel_key;
-
-  /**
-   * Slave's public key.
-   */
-  struct GNUNET_CRYPTO_EcdsaPublicKey slave_key;
-
-  uint64_t message_id GNUNET_PACKED;
-
-  uint64_t group_generation GNUNET_PACKED;
-};
-
-
-/**
- * @see GNUNET_PSYCSTORE_fragment_store()
- */
-struct FragmentStoreRequest
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_PSYCSTORE_FRAGMENT_STORE
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * enum GNUNET_PSYCSTORE_MessageFlags
-   */
-  uint32_t psycstore_flags GNUNET_PACKED;
-
-  /**
-   * Channel's public key.
-   */
-  struct GNUNET_CRYPTO_EddsaPublicKey channel_key;
-
-  /**
-   * Operation ID.
-   */
-  uint64_t op_id;
-
-  /* Followed by fragment */
-};
-
-
-/**
- * @see GNUNET_PSYCSTORE_fragment_get()
- */
-struct FragmentGetRequest
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_PSYCSTORE_FRAGMENT_GET
-   */
-  struct GNUNET_MessageHeader header;
-
-  uint32_t reserved GNUNET_PACKED;
-
-  /**
-   * Operation ID.
-   */
-  uint64_t op_id GNUNET_PACKED;
-
-  /**
-   * Channel's public key.
-   */
-  struct GNUNET_CRYPTO_EddsaPublicKey channel_key;
-
-  /**
-   * Slave's public key.
-   */
-  struct GNUNET_CRYPTO_EcdsaPublicKey slave_key;
-
-  /**
-   * First fragment ID to request.
-   */
-  uint64_t first_fragment_id GNUNET_PACKED;
-
-  /**
-   * Last fragment ID to request.
-   */
-  uint64_t last_fragment_id GNUNET_PACKED;
-
-  /**
-   * Maximum number of fragments to retrieve.
-   */
-  uint64_t fragment_limit GNUNET_PACKED;
-
-  /**
-   * Do membership test with @a slave_key before returning fragment?
-   * #GNUNET_YES or #GNUNET_NO
-   */
-  uint8_t do_membership_test;
-};
-
-
-/**
- * @see GNUNET_PSYCSTORE_message_get()
- */
-struct MessageGetRequest
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_PSYCSTORE_MESSAGE_GET
-   */
-  struct GNUNET_MessageHeader header;
-
-  uint32_t reserved GNUNET_PACKED;
-
-  /**
-   * Operation ID.
-   */
-  uint64_t op_id GNUNET_PACKED;
-
-  /**
-   * Channel's public key.
-   */
-  struct GNUNET_CRYPTO_EddsaPublicKey channel_key;
-
-  /**
-   * Slave's public key.
-   */
-  struct GNUNET_CRYPTO_EcdsaPublicKey slave_key;
-
-  /**
-   * First message ID to request.
-   */
-  uint64_t first_message_id GNUNET_PACKED;
-
-  /**
-   * Last message ID to request.
-   */
-  uint64_t last_message_id GNUNET_PACKED;
-
-  /**
-   * Maximum number of messages to retrieve.
-   */
-  uint64_t message_limit GNUNET_PACKED;
-
-  /**
-   * Maximum number of fragments to retrieve.
-   */
-  uint64_t fragment_limit GNUNET_PACKED;
-
-  /**
-   * Do membership test with @a slave_key before returning fragment?
-   * #GNUNET_YES or #GNUNET_NO
-   */
-  uint8_t do_membership_test;
-
-  /* Followed by method_prefix */
-};
-
-
-/**
- * @see GNUNET_PSYCSTORE_message_get_fragment()
- */
-struct MessageGetFragmentRequest
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_PSYCSTORE_MESSAGE_FRAGMENT_GET
-   */
-  struct GNUNET_MessageHeader header;
-
-  uint32_t reserved GNUNET_PACKED;
-
-  /**
-   * Operation ID.
-   */
-  uint64_t op_id GNUNET_PACKED;
-
-  /**
-   * Channel's public key.
-   */
-  struct GNUNET_CRYPTO_EddsaPublicKey channel_key;
-
-  /**
-   * Slave's public key.
-   */
-  struct GNUNET_CRYPTO_EcdsaPublicKey slave_key;
-
-  /**
-   * Requested message ID.
-   */
-  uint64_t message_id GNUNET_PACKED;
-
-  /**
-   * Requested fragment offset.
-   */
-  uint64_t fragment_offset GNUNET_PACKED;
-
-  /**
-   * Do membership test with @a slave_key before returning fragment?
-   * #GNUNET_YES or #GNUNET_NO
-   */
-  uint8_t do_membership_test;
-};
-
-
-/**
- * @see GNUNET_PSYCSTORE_state_hash_update()
- */
-struct StateHashUpdateRequest
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_PSYCSTORE_STATE_HASH_UPDATE
-   */
-  struct GNUNET_MessageHeader header;
-
-  uint32_t reserved GNUNET_PACKED;
-
-  /**
-   * Operation ID.
-   */
-  uint64_t op_id GNUNET_PACKED;
-
-  /**
-   * Channel's public key.
-   */
-  struct GNUNET_CRYPTO_EddsaPublicKey channel_key;
-
-  struct GNUNET_HashCode hash;
-};
-
-
-enum StateOpFlags
-{
-  STATE_OP_FIRST = 1 << 0,
-  STATE_OP_LAST = 1 << 1
-};
-
-
-/**
- * @see GNUNET_PSYCSTORE_state_modify()
- */
-struct StateModifyRequest
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_PSYCSTORE_STATE_MODIFY
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * Operation ID.
-   */
-  uint64_t op_id GNUNET_PACKED;
-
-  /**
-   * ID of the message to apply the state changes in.
-   */
-  uint64_t message_id GNUNET_PACKED;
-
-  /**
-   * State delta of the message with ID @a message_id.
-   */
-  uint64_t state_delta GNUNET_PACKED;
-
-  /**
-   * Channel's public key.
-   */
-  struct GNUNET_CRYPTO_EddsaPublicKey channel_key;
-};
-
-
-/**
- * @see GNUNET_PSYCSTORE_state_sync()
- */
-struct StateSyncRequest
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_PSYCSTORE_STATE_SYNC
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * Size of name, including NUL terminator.
-   */
-  uint16_t name_size GNUNET_PACKED;
-
-  /**
-   * OR'd StateOpFlags
-   */
-  uint8_t flags;
-
-  uint8_t reserved;
-
-  /**
-   * Operation ID.
-   */
-  uint64_t op_id GNUNET_PACKED;
-
-  /**
-   * ID of the message that contains the state_hash PSYC header variable.
-   */
-  uint64_t state_hash_message_id GNUNET_PACKED;
-
-  /**
-   * ID of the last stateful message before @a state_hash_message_id.
-   */
-  uint64_t max_state_message_id GNUNET_PACKED;
-
-  /**
-   * Channel's public key.
-   */
-  struct GNUNET_CRYPTO_EddsaPublicKey channel_key;
-
-  /* Followed by NUL-terminated name, then the value. */
-};
-
-
-GNUNET_NETWORK_STRUCT_END
-
-#endif
diff --git a/src/psycstore/psycstore_api.c b/src/psycstore/psycstore_api.c
deleted file mode 100644 (file)
index ab4cd0f..0000000
+++ /dev/null
@@ -1,1285 +0,0 @@
-/*
- * This file is part of GNUnet
- * Copyright (C) 2013 GNUnet e.V.
- *
- * GNUnet is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNUnet is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
- */
-
-/**
- * @file psycstore/psycstore_api.c
- * @brief API to interact with the PSYCstore service
- * @author Gabor X Toth
- * @author Christian Grothoff
- */
-
-#include <inttypes.h>
-
-#include "platform.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_constants.h"
-#include "gnunet_protocols.h"
-#include "gnunet_psycstore_service.h"
-#include "gnunet_multicast_service.h"
-#include "psycstore.h"
-
-#define LOG(kind,...) GNUNET_log_from (kind, "psycstore-api",__VA_ARGS__)
-
-/**
- * Handle for an operation with the PSYCstore service.
- */
-struct GNUNET_PSYCSTORE_OperationHandle
-{
-
-  /**
-   * Main PSYCstore handle.
-   */
-  struct GNUNET_PSYCSTORE_Handle *h;
-
-  /**
-   * Data callbacks.
-   */
-  union {
-    GNUNET_PSYCSTORE_FragmentCallback fragment_cb;
-    GNUNET_PSYCSTORE_CountersCallback counters_cb;
-    GNUNET_PSYCSTORE_StateCallback state_cb;
-  };
-
-  /**
-   * Closure for callbacks.
-   */
-  void *cls;
-
-  /**
-   * Message envelope.
-   */
-  struct GNUNET_MQ_Envelope *env;
-
-  /**
-   * Operation ID.
-   */
-  uint64_t op_id;
-};
-
-
-/**
- * Handle for the service.
- */
-struct GNUNET_PSYCSTORE_Handle
-{
-  /**
-   * Configuration to use.
-   */
-  const struct GNUNET_CONFIGURATION_Handle *cfg;
-
-  /**
-   * Client connection.
-   */
-  struct GNUNET_MQ_Handle *mq;
-
-  /**
-   * Async operations.
-   */
-  struct GNUNET_OP_Handle *op;
-
-  /**
-   * Task doing exponential back-off trying to reconnect.
-   */
-  struct GNUNET_SCHEDULER_Task *reconnect_task;
-
-  /**
-   * Delay for next connect retry.
-   */
-  struct GNUNET_TIME_Relative reconnect_delay;
-
-
-  GNUNET_PSYCSTORE_FragmentCallback *fragment_cb;
-
-  GNUNET_PSYCSTORE_CountersCallback *counters_cb;
-
-  GNUNET_PSYCSTORE_StateCallback *state_cb;
-  /**
-   * Closure for callbacks.
-   */
-  void *cb_cls;
-};
-
-
-static int
-check_result_code (void *cls, const struct OperationResult *opres)
-{
-  uint16_t size = ntohs (opres->header.size);
-  const char *str = (const char *) &opres[1];
-  if ( (sizeof (*opres) < size) &&
-       ('\0' != str[size - sizeof (*opres) - 1]) )
-  {
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-
-  return GNUNET_OK;
-}
-
-
-static void
-handle_result_code (void *cls, const struct OperationResult *opres)
-{
-  struct GNUNET_PSYCSTORE_Handle *h = cls;
-  struct GNUNET_PSYCSTORE_OperationHandle *op = NULL;
-  uint16_t size = ntohs (opres->header.size);
-
-  const char *
-    str = (sizeof (*opres) < size) ? (const char *) &opres[1] : "";
-
-  if (GNUNET_YES == GNUNET_OP_result (h->op, GNUNET_ntohll (opres->op_id),
-                                      GNUNET_ntohll (opres->result_code) + INT64_MIN,
-                                      str, size - sizeof (*opres), (void **) &op))
-  {
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "handle_result_code: Received result message with OP ID: %" PRIu64 "\n",
-         GNUNET_ntohll (opres->op_id));
-    GNUNET_free (op);
-  }
-  else
-  {
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "handle_result_code: No callback registered for OP ID %" PRIu64 ".\n",
-         GNUNET_ntohll (opres->op_id));
-  }
-  h->reconnect_delay = GNUNET_TIME_UNIT_MILLISECONDS;
-}
-
-
-static void
-handle_result_counters (void *cls, const struct CountersResult *cres)
-{
-  struct GNUNET_PSYCSTORE_Handle *h = cls;
-  struct GNUNET_PSYCSTORE_OperationHandle *op = NULL;
-
-  if (GNUNET_YES == GNUNET_OP_get (h->op, GNUNET_ntohll (cres->op_id),
-                                   NULL, NULL, (void **) &op))
-  {
-    GNUNET_assert (NULL != op);
-    if (NULL != op->counters_cb)
-    {
-      op->counters_cb (op->cls,
-                       ntohl (cres->result_code),
-                       GNUNET_ntohll (cres->max_fragment_id),
-                       GNUNET_ntohll (cres->max_message_id),
-                       GNUNET_ntohll (cres->max_group_generation),
-                       GNUNET_ntohll (cres->max_state_message_id));
-    }
-    GNUNET_OP_remove (h->op, GNUNET_ntohll (cres->op_id));
-    GNUNET_free (op);
-  }
-  else
-  {
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "handle_result_counters: No callback registered for OP ID %" PRIu64 ".\n",
-         GNUNET_ntohll (cres->op_id));
-  }
-  h->reconnect_delay = GNUNET_TIME_UNIT_MILLISECONDS;
-}
-
-
-static int
-check_result_fragment (void *cls, const struct FragmentResult *fres)
-{
-  uint16_t size = ntohs (fres->header.size);
-  struct GNUNET_MULTICAST_MessageHeader *mmsg =
-    (struct GNUNET_MULTICAST_MessageHeader *) &fres[1];
-  if (sizeof (*fres) + sizeof (*mmsg) < size
-      && sizeof (*fres) + ntohs (mmsg->header.size) != size)
-  {
-    LOG (GNUNET_ERROR_TYPE_ERROR,
-         "check_result_fragment: Received message with invalid length %lu bytes.\n",
-         size, sizeof (*fres));
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-  return GNUNET_OK;
-}
-
-
-static void
-handle_result_fragment (void *cls, const struct FragmentResult *fres)
-{
-  struct GNUNET_PSYCSTORE_Handle *h = cls;
-  struct GNUNET_PSYCSTORE_OperationHandle *op = NULL;
-
-  if (GNUNET_YES == GNUNET_OP_get (h->op, GNUNET_ntohll (fres->op_id),
-                                   NULL, NULL, (void **) &op))
-  {
-    GNUNET_assert (NULL != op);
-    if (NULL != op->fragment_cb)
-      op->fragment_cb (op->cls,
-                       (struct GNUNET_MULTICAST_MessageHeader *) &fres[1],
-                       ntohl (fres->psycstore_flags));
-    //GNUNET_OP_remove (h->op, GNUNET_ntohll (fres->op_id));
-    //GNUNET_free (op);
-  }
-  else
-  {
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "handle_result_fragment: No callback registered for OP ID %" PRIu64 ".\n",
-         GNUNET_ntohll (fres->op_id));
-  }
-  h->reconnect_delay = GNUNET_TIME_UNIT_MILLISECONDS;
-}
-
-
-static int
-check_result_state (void *cls, const struct StateResult *sres)
-{
-  const char *name = (const char *) &sres[1];
-  uint16_t size = ntohs (sres->header.size);
-  uint16_t name_size = ntohs (sres->name_size);
-
-  if (name_size <= 2
-      || size - sizeof (*sres) < name_size
-      || '\0' != name[name_size - 1])
-  {
-    LOG (GNUNET_ERROR_TYPE_ERROR,
-         "check_result_state: Received state result message with invalid name.\n");
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-  return GNUNET_OK;
-}
-
-
-static void
-handle_result_state (void *cls, const struct StateResult *sres)
-{
-  struct GNUNET_PSYCSTORE_Handle *h = cls;
-  struct GNUNET_PSYCSTORE_OperationHandle *op = NULL;
-
-  const char *name = (const char *) &sres[1];
-  uint16_t name_size = ntohs (sres->name_size);
-
-  if (GNUNET_YES == GNUNET_OP_get (h->op, GNUNET_ntohll (sres->op_id),
-                                   NULL, NULL, (void **) &op))
-  {
-    GNUNET_assert (NULL != op);
-    if (NULL != op->state_cb)
-       op->state_cb (op->cls, name, (char *) &sres[1] + name_size,
-                     ntohs (sres->header.size) - sizeof (*sres) - name_size);
-    //GNUNET_OP_remove (h->op, GNUNET_ntohll (sres->op_id));
-    //GNUNET_free (op);
-  }
-  else
-  {
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "handle_result_state: No callback registered for OP ID %" PRIu64 ".\n",
-         GNUNET_ntohll (sres->op_id));
-  }
-  h->reconnect_delay = GNUNET_TIME_UNIT_MILLISECONDS;
-}
-
-
-static void
-reconnect (void *cls);
-
-
-/**
- * Client disconnected from service.
- *
- * Reconnect after backoff period.=
- */
-static void
-disconnected (void *cls, enum GNUNET_MQ_Error error)
-{
-  struct GNUNET_PSYCSTORE_Handle *h = cls;
-
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Origin client disconnected (%d), re-connecting\n",
-       (int) error);
-  if (NULL != h->mq)
-  {
-    GNUNET_MQ_destroy (h->mq);
-    GNUNET_OP_destroy (h->op);
-    h->mq = NULL;
-    h->op = NULL;
-  }
-
-  h->reconnect_task = GNUNET_SCHEDULER_add_delayed (h->reconnect_delay,
-                                                    &reconnect, h);
-  h->reconnect_delay = GNUNET_TIME_STD_BACKOFF (h->reconnect_delay);
-}
-
-
-static void
-do_connect (struct GNUNET_PSYCSTORE_Handle *h)
-{
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Connecting to PSYCstore service.\n");
-
-  struct GNUNET_MQ_MessageHandler handlers[] = {
-    GNUNET_MQ_hd_var_size (result_code,
-                           GNUNET_MESSAGE_TYPE_PSYCSTORE_RESULT_CODE,
-                           struct OperationResult,
-                           h),
-    GNUNET_MQ_hd_fixed_size (result_counters,
-                             GNUNET_MESSAGE_TYPE_PSYCSTORE_RESULT_COUNTERS,
-                             struct CountersResult,
-                             h),
-    GNUNET_MQ_hd_var_size (result_fragment,
-                           GNUNET_MESSAGE_TYPE_PSYCSTORE_RESULT_FRAGMENT,
-                           struct FragmentResult,
-                           h),
-    GNUNET_MQ_hd_var_size (result_state,
-                           GNUNET_MESSAGE_TYPE_PSYCSTORE_RESULT_STATE,
-                           struct StateResult,
-                           h),
-    GNUNET_MQ_handler_end ()
-  };
-
-  h->op = GNUNET_OP_create ();
-  GNUNET_assert (NULL == h->mq);
-  h->mq = GNUNET_CLIENT_connect (h->cfg, "psycstore",
-                                 handlers, disconnected, h);
-  GNUNET_assert (NULL != h->mq);
-}
-
-
-/**
- * Try again to connect to the PSYCstore service.
- *
- * @param cls Handle to the PSYCstore service.
- */
-static void
-reconnect (void *cls)
-{
-  struct GNUNET_PSYCSTORE_Handle *h = cls;
-
-  h->reconnect_task = NULL;
-  do_connect (cls);
-}
-
-
-/**
- * Connect to the PSYCstore service.
- *
- * @param cfg The configuration to use
- * @return Handle to use
- */
-struct GNUNET_PSYCSTORE_Handle *
-GNUNET_PSYCSTORE_connect (const struct GNUNET_CONFIGURATION_Handle *cfg)
-{
-  struct GNUNET_PSYCSTORE_Handle *h
-    = GNUNET_new (struct GNUNET_PSYCSTORE_Handle);
-  h->cfg = cfg;
-  h->reconnect_delay = GNUNET_TIME_UNIT_MILLISECONDS;
-  do_connect (h);
-  return h;
-}
-
-
-/**
- * Disconnect from PSYCstore service
- *
- * @param h Handle to destroy
- */
-void
-GNUNET_PSYCSTORE_disconnect (struct GNUNET_PSYCSTORE_Handle *h)
-{
-  GNUNET_assert (NULL != h);
-  if (h->reconnect_task != NULL)
-  {
-    GNUNET_SCHEDULER_cancel (h->reconnect_task);
-    h->reconnect_task = NULL;
-  }
-  if (NULL != h->mq)
-  {
-    // FIXME: free data structures for pending operations
-    GNUNET_MQ_destroy (h->mq);
-    h->mq = NULL;
-  }
-  GNUNET_free (h);
-}
-
-
-/**
- * Message sent notification.
- *
- * Remove invalidated envelope pointer.
- */
-static void
-message_sent (void *cls)
-{
-  struct GNUNET_PSYCSTORE_OperationHandle *op = cls;
-  op->env = NULL;
-}
-
-
-/**
- * Create a new operation.
- */
-static struct GNUNET_PSYCSTORE_OperationHandle *
-op_create (struct GNUNET_PSYCSTORE_Handle *h,
-           struct GNUNET_OP_Handle *hop,
-           GNUNET_PSYCSTORE_ResultCallback result_cb,
-           void *cls)
-{
-  struct GNUNET_PSYCSTORE_OperationHandle *
-    op = GNUNET_malloc (sizeof (*op));
-  op->h = h;
-  op->op_id = GNUNET_OP_add (hop,
-                             (GNUNET_ResultCallback) result_cb,
-                             cls, op);
-  return op;
-}
-
-
-/**
- * Send a message associated with an operation.
- *
- * @param h
- *        PSYCstore handle.
- * @param op
- *        Operation handle.
- * @param env
- *        Message envelope to send.
- * @param[out] op_id
- *        Operation ID to write in network byte order. NULL if not needed.
- *
- * @return Operation handle.
- *
- */
-static struct GNUNET_PSYCSTORE_OperationHandle *
-op_send (struct GNUNET_PSYCSTORE_Handle *h,
-         struct GNUNET_PSYCSTORE_OperationHandle *op,
-         struct GNUNET_MQ_Envelope *env,
-         uint64_t *op_id)
-{
-  op->env = env;
-  if (NULL != op_id)
-    *op_id = GNUNET_htonll (op->op_id);
-
-  GNUNET_MQ_notify_sent (env, message_sent, op);
-  GNUNET_MQ_send (h->mq, env);
-  return op;
-}
-
-
-/**
- * Cancel a PSYCstore operation. Note that the operation MAY still
- * be executed; this merely cancels the continuation; if the request
- * was already transmitted, the service may still choose to complete
- * the operation.
- *
- * @param op Operation to cancel.
- *
- * @return #GNUNET_YES if message was not sent yet and got discarded,
- *         #GNUNET_NO  if it was already sent, and only the callbacks got cancelled.
- */
-int
-GNUNET_PSYCSTORE_operation_cancel (struct GNUNET_PSYCSTORE_OperationHandle *op)
-{
-  struct GNUNET_PSYCSTORE_Handle *h = op->h;
-  int ret = GNUNET_NO;
-
-  if (NULL != op->env)
-  {
-    GNUNET_MQ_send_cancel (op->env);
-    ret = GNUNET_YES;
-  }
-
-  GNUNET_OP_remove (h->op, op->op_id);
-  GNUNET_free (op);
-
-  return ret;
-}
-
-
-/**
- * Store join/leave events for a PSYC channel in order to be able to answer
- * membership test queries later.
- *
- * @param h
- *        Handle for the PSYCstore.
- * @param channel_key
- *        The channel where the event happened.
- * @param slave_key
- *        Public key of joining/leaving slave.
- * @param did_join
- *        #GNUNET_YES on join, #GNUNET_NO on part.
- * @param announced_at
- *        ID of the message that announced the membership change.
- * @param effective_since
- *        Message ID this membership change is in effect since.
- *        For joins it is <= announced_at, for parts it is always 0.
- * @param group_generation
- *        In case of a part, the last group generation the slave has access to.
- *        It has relevance when a larger message have fragments with different
- *        group generations.
- * @param result_cb
- *        Callback to call with the result of the storage operation.
- * @param cls
- *        Closure for the callback.
- *
- * @return Operation handle that can be used to cancel the operation.
- */
-struct GNUNET_PSYCSTORE_OperationHandle *
-GNUNET_PSYCSTORE_membership_store (struct GNUNET_PSYCSTORE_Handle *h,
-                                   const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                                   const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_key,
-                                   int did_join,
-                                   uint64_t announced_at,
-                                   uint64_t effective_since,
-                                   uint64_t group_generation,
-                                   GNUNET_PSYCSTORE_ResultCallback result_cb,
-                                   void *cls)
-{
-  GNUNET_assert (NULL != h);
-  GNUNET_assert (NULL != channel_key);
-  GNUNET_assert (NULL != slave_key);
-  GNUNET_assert (GNUNET_YES == did_join || GNUNET_NO == did_join);
-  GNUNET_assert (did_join
-                 ? effective_since <= announced_at
-                 : effective_since == 0);
-
-  struct MembershipStoreRequest *req;
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg (req, GNUNET_MESSAGE_TYPE_PSYCSTORE_MEMBERSHIP_STORE);
-  req->channel_key = *channel_key;
-  req->slave_key = *slave_key;
-  req->did_join = did_join;
-  req->announced_at = GNUNET_htonll (announced_at);
-  req->effective_since = GNUNET_htonll (effective_since);
-  req->group_generation = GNUNET_htonll (group_generation);
-
-  return
-    op_send (h, op_create (h, h->op, result_cb, cls),
-             env, &req->op_id);
-}
-
-
-/**
- * Test if a member was admitted to the channel at the given message ID.
- *
- * This is useful when relaying and replaying messages to check if a particular
- * slave has access to the message fragment with a given group generation.  It
- * is also used when handling join requests to determine whether the slave is
- * currently admitted to the channel.
- *
- * @param h
- *        Handle for the PSYCstore.
- * @param channel_key
- *        The channel we are interested in.
- * @param slave_key
- *        Public key of slave whose membership to check.
- * @param message_id
- *        Message ID for which to do the membership test.
- * @param group_generation
- *        Group generation of the fragment of the message to test.
- *        It has relevance if the message consists of multiple fragments with
- *        different group generations.
- * @param result_cb
- *        Callback to call with the test result.
- * @param cls
- *        Closure for the callback.
- *
- * @return Operation handle that can be used to cancel the operation.
- */
-struct GNUNET_PSYCSTORE_OperationHandle *
-GNUNET_PSYCSTORE_membership_test (struct GNUNET_PSYCSTORE_Handle *h,
-                                  const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                                  const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_key,
-                                  uint64_t message_id,
-                                  uint64_t group_generation,
-                                  GNUNET_PSYCSTORE_ResultCallback result_cb,
-                                  void *cls)
-{
-  struct MembershipTestRequest *req;
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg (req, GNUNET_MESSAGE_TYPE_PSYCSTORE_MEMBERSHIP_TEST);
-  req->channel_key = *channel_key;
-  req->slave_key = *slave_key;
-  req->message_id = GNUNET_htonll (message_id);
-  req->group_generation = GNUNET_htonll (group_generation);
-
-  return
-    op_send (h, op_create (h, h->op, result_cb, cls),
-             env, &req->op_id);
-}
-
-
-/**
- * Store a message fragment sent to a channel.
- *
- * @param h Handle for the PSYCstore.
- * @param channel_key The channel the message belongs to.
- * @param message Message to store.
- * @param psycstore_flags Flags indicating whether the PSYC message contains
- *        state modifiers.
- * @param result_cb Callback to call with the result of the operation.
- * @param cls Closure for the callback.
- *
- * @return Handle that can be used to cancel the operation.
- */
-struct GNUNET_PSYCSTORE_OperationHandle *
-GNUNET_PSYCSTORE_fragment_store (struct GNUNET_PSYCSTORE_Handle *h,
-                                 const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                                 const struct GNUNET_MULTICAST_MessageHeader *msg,
-                                 enum GNUNET_PSYCSTORE_MessageFlags psycstore_flags,
-                                 GNUNET_PSYCSTORE_ResultCallback result_cb,
-                                 void *cls)
-{
-  uint16_t size = ntohs (msg->header.size);
-  struct FragmentStoreRequest *req;
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg_extra (req, size,
-                               GNUNET_MESSAGE_TYPE_PSYCSTORE_FRAGMENT_STORE);
-  req->channel_key = *channel_key;
-  req->psycstore_flags = htonl (psycstore_flags);
-  GNUNET_memcpy (&req[1], msg, size);
-
-  return
-    op_send (h, op_create (h, h->op, result_cb, cls),
-             env, &req->op_id);
-}
-
-
-/**
- * Retrieve message fragments by fragment ID range.
- *
- * @param h
- *        Handle for the PSYCstore.
- * @param channel_key
- *        The channel we are interested in.
- * @param slave_key
- *        The slave requesting the fragment.  If not NULL, a membership test is
- *        performed first and the fragment is only returned if the slave has
- *        access to it.
- * @param first_fragment_id
- *        First fragment ID to retrieve.
- *        Use 0 to get the latest message fragment.
- * @param last_fragment_id
- *        Last consecutive fragment ID to retrieve.
- *        Use 0 to get the latest message fragment.
- * @param fragment_limit
- *        Maximum number of fragments to retrieve.
- * @param fragment_cb
- *        Callback to call with the retrieved fragments.
- * @param result_cb
- *        Callback to call with the result of the operation.
- * @param cls
- *        Closure for the callbacks.
- *
- * @return Handle that can be used to cancel the operation.
- */
-struct GNUNET_PSYCSTORE_OperationHandle *
-GNUNET_PSYCSTORE_fragment_get (struct GNUNET_PSYCSTORE_Handle *h,
-                               const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                               const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_key,
-                               uint64_t first_fragment_id,
-                               uint64_t last_fragment_id,
-                               GNUNET_PSYCSTORE_FragmentCallback fragment_cb,
-                               GNUNET_PSYCSTORE_ResultCallback result_cb,
-                               void *cls)
-{
-  struct FragmentGetRequest *req;
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg (req, GNUNET_MESSAGE_TYPE_PSYCSTORE_FRAGMENT_GET);
-  req->channel_key = *channel_key;
-  req->first_fragment_id = GNUNET_htonll (first_fragment_id);
-  req->last_fragment_id = GNUNET_htonll (last_fragment_id);
-  if (NULL != slave_key)
-  {
-    req->slave_key = *slave_key;
-    req->do_membership_test = GNUNET_YES;
-  }
-
-  struct GNUNET_PSYCSTORE_OperationHandle *
-    op = op_create (h, h->op, result_cb, cls);
-  op->fragment_cb = fragment_cb;
-  op->cls = cls;
-  return op_send (h, op, env, &req->op_id);
-}
-
-
-/**
- * Retrieve latest message fragments.
- *
- * @param h
- *        Handle for the PSYCstore.
- * @param channel_key
- *        The channel we are interested in.
- * @param slave_key
- *        The slave requesting the fragment.  If not NULL, a membership test is
- *        performed first and the fragment is only returned if the slave has
- *        access to it.
- * @param first_fragment_id
- *        First fragment ID to retrieve.
- *        Use 0 to get the latest message fragment.
- * @param last_fragment_id
- *        Last consecutive fragment ID to retrieve.
- *        Use 0 to get the latest message fragment.
- * @param fragment_limit
- *        Maximum number of fragments to retrieve.
- * @param fragment_cb
- *        Callback to call with the retrieved fragments.
- * @param result_cb
- *        Callback to call with the result of the operation.
- * @param cls
- *        Closure for the callbacks.
- *
- * @return Handle that can be used to cancel the operation.
- */
-struct GNUNET_PSYCSTORE_OperationHandle *
-GNUNET_PSYCSTORE_fragment_get_latest (struct GNUNET_PSYCSTORE_Handle *h,
-                                      const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                                      const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_key,
-                                      uint64_t fragment_limit,
-                                      GNUNET_PSYCSTORE_FragmentCallback fragment_cb,
-                                      GNUNET_PSYCSTORE_ResultCallback result_cb,
-                                      void *cls)
-{
-  struct FragmentGetRequest *req;
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg (req, GNUNET_MESSAGE_TYPE_PSYCSTORE_FRAGMENT_GET);
-  req->channel_key = *channel_key;
-  req->fragment_limit = GNUNET_ntohll (fragment_limit);
-  if (NULL != slave_key)
-  {
-    req->slave_key = *slave_key;
-    req->do_membership_test = GNUNET_YES;
-  }
-
-  struct GNUNET_PSYCSTORE_OperationHandle *
-    op = op_create (h, h->op, result_cb, cls);
-  op->fragment_cb = fragment_cb;
-  op->cls = cls;
-  return op_send (h, op, env, &req->op_id);
-}
-
-
-/**
- * Retrieve all fragments of messages in a message ID range.
- *
- * @param h
- *        Handle for the PSYCstore.
- * @param channel_key
- *        The channel we are interested in.
- * @param slave_key
- *        The slave requesting the message.
- *        If not NULL, a membership test is performed first
- *        and the message is only returned if the slave has access to it.
- * @param first_message_id
- *        First message ID to retrieve.
- * @param last_message_id
- *        Last consecutive message ID to retrieve.
- * @param fragment_limit
- *        Maximum number of fragments to retrieve.
- * @param method_prefix
- *        Retrieve only messages with a matching method prefix.
- * @todo Implement method_prefix query.
- * @param fragment_cb
- *        Callback to call with the retrieved fragments.
- * @param result_cb
- *        Callback to call with the result of the operation.
- * @param cls
- *        Closure for the callbacks.
- *
- * @return Handle that can be used to cancel the operation.
- */
-struct GNUNET_PSYCSTORE_OperationHandle *
-GNUNET_PSYCSTORE_message_get (struct GNUNET_PSYCSTORE_Handle *h,
-                              const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                              const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_key,
-                              uint64_t first_message_id,
-                              uint64_t last_message_id,
-                              uint64_t fragment_limit,
-                              const char *method_prefix,
-                              GNUNET_PSYCSTORE_FragmentCallback fragment_cb,
-                              GNUNET_PSYCSTORE_ResultCallback result_cb,
-                              void *cls)
-{
-  struct MessageGetRequest *req;
-  if (NULL == method_prefix)
-    method_prefix = "";
-  uint16_t method_size = strnlen (method_prefix,
-                                  GNUNET_MAX_MESSAGE_SIZE
-                                  - sizeof (*req)) + 1;
-
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg_extra (req, method_size,
-                               GNUNET_MESSAGE_TYPE_PSYCSTORE_MESSAGE_GET);
-  req->channel_key = *channel_key;
-  req->first_message_id = GNUNET_htonll (first_message_id);
-  req->last_message_id = GNUNET_htonll (last_message_id);
-  req->fragment_limit = GNUNET_htonll (fragment_limit);
-  if (NULL != slave_key)
-  {
-    req->slave_key = *slave_key;
-    req->do_membership_test = GNUNET_YES;
-  }
-  GNUNET_memcpy (&req[1], method_prefix, method_size);
-  ((char *) &req[1])[method_size - 1] = '\0';
-
-  struct GNUNET_PSYCSTORE_OperationHandle *
-    op = op_create (h, h->op, result_cb, cls);
-  op->fragment_cb = fragment_cb;
-  op->cls = cls;
-  return op_send (h, op, env, &req->op_id);
-}
-
-
-/**
- * Retrieve all fragments of the latest messages.
- *
- * @param h
- *        Handle for the PSYCstore.
- * @param channel_key
- *        The channel we are interested in.
- * @param slave_key
- *        The slave requesting the message.
- *        If not NULL, a membership test is performed first
- *        and the message is only returned if the slave has access to it.
- * @param message_limit
- *        Maximum number of messages to retrieve.
- * @param method_prefix
- *        Retrieve only messages with a matching method prefix.
- * @todo Implement method_prefix query.
- * @param fragment_cb
- *        Callback to call with the retrieved fragments.
- * @param result_cb
- *        Callback to call with the result of the operation.
- * @param cls
- *        Closure for the callbacks.
- *
- * @return Handle that can be used to cancel the operation.
- */
-struct GNUNET_PSYCSTORE_OperationHandle *
-GNUNET_PSYCSTORE_message_get_latest (struct GNUNET_PSYCSTORE_Handle *h,
-                                     const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                                     const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_key,
-                                     uint64_t message_limit,
-                                     const char *method_prefix,
-                                     GNUNET_PSYCSTORE_FragmentCallback fragment_cb,
-                                     GNUNET_PSYCSTORE_ResultCallback result_cb,
-                                     void *cls)
-{
-  struct MessageGetRequest *req;
-
-  if (NULL == method_prefix)
-    method_prefix = "";
-  uint16_t method_size = strnlen (method_prefix,
-                                  GNUNET_MAX_MESSAGE_SIZE
-                                  - sizeof (*req)) + 1;
-  GNUNET_assert ('\0' == method_prefix[method_size - 1]);
-
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg_extra (req, method_size,
-                               GNUNET_MESSAGE_TYPE_PSYCSTORE_MESSAGE_GET);
-  req->channel_key = *channel_key;
-  req->message_limit = GNUNET_ntohll (message_limit);
-  if (NULL != slave_key)
-  {
-    req->slave_key = *slave_key;
-    req->do_membership_test = GNUNET_YES;
-  }
-  GNUNET_memcpy (&req[1], method_prefix, method_size);
-
-  struct GNUNET_PSYCSTORE_OperationHandle *
-    op = op_create (h, h->op, result_cb, cls);
-  op->fragment_cb = fragment_cb;
-  op->cls = cls;
-  return op_send (h, op, env, &req->op_id);
-}
-
-
-/**
- * Retrieve a fragment of message specified by its message ID and fragment
- * offset.
- *
- * @param h
- *        Handle for the PSYCstore.
- * @param channel_key
- *        The channel we are interested in.
- * @param slave_key
- *        The slave requesting the message fragment.  If not NULL, a membership
- *        test is performed first and the message fragment is only returned
- *        if the slave has access to it.
- * @param message_id
- *        Message ID to retrieve.  Use 0 to get the latest message.
- * @param fragment_offset
- *        Offset of the fragment to retrieve.
- * @param fragment_cb
- *        Callback to call with the retrieved fragments.
- * @param result_cb
- *        Callback to call with the result of the operation.
- * @param cls
- *        Closure for the callbacks.
- *
- * @return Handle that can be used to cancel the operation.
- */
-struct GNUNET_PSYCSTORE_OperationHandle *
-GNUNET_PSYCSTORE_message_get_fragment (struct GNUNET_PSYCSTORE_Handle *h,
-                                       const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                                       const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_key,
-                                       uint64_t message_id,
-                                       uint64_t fragment_offset,
-                                       GNUNET_PSYCSTORE_FragmentCallback fragment_cb,
-                                       GNUNET_PSYCSTORE_ResultCallback result_cb,
-                                       void *cls)
-{
-  struct MessageGetFragmentRequest *req;
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg (req, GNUNET_MESSAGE_TYPE_PSYCSTORE_MESSAGE_GET_FRAGMENT);
-
-  req->channel_key = *channel_key;
-  req->message_id = GNUNET_htonll (message_id);
-  req->fragment_offset = GNUNET_htonll (fragment_offset);
-  if (NULL != slave_key)
-  {
-    req->slave_key = *slave_key;
-    req->do_membership_test = GNUNET_YES;
-  }
-
-  struct GNUNET_PSYCSTORE_OperationHandle *
-    op = op_create (h, h->op, result_cb, cls);
-  op->fragment_cb = fragment_cb;
-  op->cls = cls;
-  return op_send (h, op, env, &req->op_id);
-}
-
-
-/**
- * Retrieve latest values of counters for a channel master.
- *
- * The current value of counters are needed when a channel master is restarted,
- * so that it can continue incrementing the counters from their last value.
- *
- * @param h
- *        Handle for the PSYCstore.
- * @param channel_key
- *        Public key that identifies the channel.
- * @param ccb
- *        Callback to call with the result.
- * @param ccb_cls
- *        Closure for the @a ccb callback.
- *
- * @return Handle that can be used to cancel the operation.
- */
-struct GNUNET_PSYCSTORE_OperationHandle *
-GNUNET_PSYCSTORE_counters_get (struct GNUNET_PSYCSTORE_Handle *h,
-                               struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                               GNUNET_PSYCSTORE_CountersCallback counters_cb,
-                               void *cls)
-{
-  struct OperationRequest *req;
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg (req, GNUNET_MESSAGE_TYPE_PSYCSTORE_COUNTERS_GET);
-  req->channel_key = *channel_key;
-
-  struct GNUNET_PSYCSTORE_OperationHandle *
-    op = op_create (h, h->op, NULL, NULL);
-  op->counters_cb = counters_cb;
-  op->cls = cls;
-  return op_send (h, op, env, &req->op_id);
-}
-
-
-/**
- * Apply modifiers of a message to the current channel state.
- *
- * An error is returned if there are missing messages containing state
- * operations before the current one.
- *
- * @param h
- *        Handle for the PSYCstore.
- * @param channel_key
- *        The channel we are interested in.
- * @param message_id
- *        ID of the message that contains the @a modifiers.
- * @param state_delta
- *        Value of the _state_delta PSYC header variable of the message.
- * @param result_cb
- *        Callback to call with the result of the operation.
- * @param cls
- *        Closure for @a result_cb.
- *
- * @return Handle that can be used to cancel the operation.
- */
-struct GNUNET_PSYCSTORE_OperationHandle *
-GNUNET_PSYCSTORE_state_modify (struct GNUNET_PSYCSTORE_Handle *h,
-                               const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                               uint64_t message_id,
-                               uint64_t state_delta,
-                               GNUNET_PSYCSTORE_ResultCallback result_cb,
-                               void *cls)
-{
-  struct StateModifyRequest *req;
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg (req, GNUNET_MESSAGE_TYPE_PSYCSTORE_STATE_MODIFY);
-  req->channel_key = *channel_key;
-  req->message_id = GNUNET_htonll (message_id);
-  req->state_delta = GNUNET_htonll (state_delta);
-
-  return op_send (h, op_create (h, h->op, result_cb, cls),
-                  env, &req->op_id);
-}
-
-
-struct StateSyncClosure
-{
-  GNUNET_PSYCSTORE_ResultCallback result_cb;
-  void *cls;
-  uint8_t last;
-};
-
-
-static void
-state_sync_result (void *cls, int64_t result,
-                   const char *err_msg, uint16_t err_msg_size)
-{
-  struct StateSyncClosure *ssc = cls;
-  if (GNUNET_OK != result || ssc->last)
-    ssc->result_cb (ssc->cls, result, err_msg, err_msg_size);
-  GNUNET_free (ssc);
-}
-
-
-/**
- * Store synchronized state.
- *
- * @param h
- *        Handle for the PSYCstore.
- * @param channel_key
- *        The channel we are interested in.
- * @param max_state_message_id
- *        ID of the last stateful message before @a state_hash_message_id.
- * @param state_hash_message_id
- *        ID of the message that contains the state_hash PSYC header variable.
- * @param modifier_count
- *        Number of elements in the @a modifiers array.
- * @param modifiers
- *        Full state to store.
- * @param result_cb
- *        Callback to call with the result of the operation.
- * @param cls
- *        Closure for the callback.
- *
- * @return Handle that can be used to cancel the operation.
- */
-struct GNUNET_PSYCSTORE_OperationHandle *
-GNUNET_PSYCSTORE_state_sync (struct GNUNET_PSYCSTORE_Handle *h,
-                             const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                             uint64_t max_state_message_id,
-                             uint64_t state_hash_message_id,
-                             size_t modifier_count,
-                             const struct GNUNET_PSYC_Modifier *modifiers,
-                             GNUNET_PSYCSTORE_ResultCallback result_cb,
-                             void *cls)
-{
-  struct GNUNET_PSYCSTORE_OperationHandle *op = NULL;
-  size_t i;
-
-  for (i = 0; i < modifier_count; i++) {
-    struct StateSyncRequest *req;
-    uint16_t name_size = strlen (modifiers[i].name) + 1;
-
-    struct GNUNET_MQ_Envelope *
-      env = GNUNET_MQ_msg_extra (req,
-                                 sizeof (*req) + name_size + modifiers[i].value_size,
-                                 GNUNET_MESSAGE_TYPE_PSYCSTORE_STATE_SYNC);
-
-    req->header.type = htons (GNUNET_MESSAGE_TYPE_PSYCSTORE_STATE_SYNC);
-    req->header.size = htons (sizeof (*req) + name_size
-                              + modifiers[i].value_size);
-    req->channel_key = *channel_key;
-    req->max_state_message_id = GNUNET_htonll (max_state_message_id);
-    req->state_hash_message_id = GNUNET_htonll (state_hash_message_id);
-    req->name_size = htons (name_size);
-    req->flags
-      = (0 == i)
-      ? STATE_OP_FIRST
-      : (modifier_count - 1 == i)
-      ? STATE_OP_LAST
-      : 0;
-
-    GNUNET_memcpy (&req[1], modifiers[i].name, name_size);
-    GNUNET_memcpy ((char *) &req[1] + name_size, modifiers[i].value, modifiers[i].value_size);
-
-    struct StateSyncClosure *ssc = GNUNET_malloc (sizeof (*ssc));
-    ssc->last = (req->flags & STATE_OP_LAST);
-    ssc->result_cb = result_cb;
-    ssc->cls = cls;
-
-    op_send (h, op_create (h, h->op, state_sync_result, ssc),
-             env, &req->op_id);
-  }
-  // FIXME: only one operation is returned,
-  //        add pointers to other operations and make all cancellable.
-  return op;
-}
-
-
-/**
- * Reset the state of a channel.
- *
- * Delete all state variables stored for the given channel.
- *
- * @param h
- *        Handle for the PSYCstore.
- * @param channel_key
- *        The channel we are interested in.
- * @param result_cb
- *        Callback to call with the result of the operation.
- * @param cls
- *        Closure for the callback.
- *
- * @return Handle that can be used to cancel the operation.
- */
-struct GNUNET_PSYCSTORE_OperationHandle *
-GNUNET_PSYCSTORE_state_reset (struct GNUNET_PSYCSTORE_Handle *h,
-                              const struct GNUNET_CRYPTO_EddsaPublicKey
-                              *channel_key,
-                              GNUNET_PSYCSTORE_ResultCallback result_cb,
-                              void *cls)
-{
-  struct OperationRequest *req;
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg (req, GNUNET_MESSAGE_TYPE_PSYCSTORE_STATE_RESET);
-  req->channel_key = *channel_key;
-
-  return
-    op_send (h, op_create (h, h->op, result_cb, cls),
-             env, &req->op_id);
-}
-
-
-/**
- * Update signed values of state variables in the state store.
- *
- * @param h
- *        Handle for the PSYCstore.
- * @param channel_key
- *        The channel we are interested in.
- * @param message_id
- *        Message ID that contained the state @a hash.
- * @param hash
- *        Hash of the serialized full state.
- * @param result_cb
- *        Callback to call with the result of the operation.
- * @param cls
- *        Closure for the callback.
- */
-struct GNUNET_PSYCSTORE_OperationHandle *
-GNUNET_PSYCSTORE_state_hash_update (struct GNUNET_PSYCSTORE_Handle *h,
-                                    const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                                    uint64_t message_id,
-                                    const struct GNUNET_HashCode *hash,
-                                    GNUNET_PSYCSTORE_ResultCallback result_cb,
-                                    void *cls)
-{
-  struct StateHashUpdateRequest *req;
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg (req, GNUNET_MESSAGE_TYPE_PSYCSTORE_STATE_HASH_UPDATE);
-  req->channel_key = *channel_key;
-  req->hash = *hash;
-
-  return
-    op_send (h, op_create (h, h->op, result_cb, cls),
-             env, &req->op_id);
-}
-
-
-/**
- * Retrieve the best matching state variable.
- *
- * @param h
- *        Handle for the PSYCstore.
- * @param channel_key
- *        The channel we are interested in.
- * @param name
- *        Name of variable to match, the returned variable might be less specific.
- * @param state_cb
- *        Callback to return the matching state variable.
- * @param result_cb
- *        Callback to call with the result of the operation.
- * @param cls
- *        Closure for the callbacks.
- *
- * @return Handle that can be used to cancel the operation.
- */
-struct GNUNET_PSYCSTORE_OperationHandle *
-GNUNET_PSYCSTORE_state_get (struct GNUNET_PSYCSTORE_Handle *h,
-                            const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                            const char *name,
-                            GNUNET_PSYCSTORE_StateCallback state_cb,
-                            GNUNET_PSYCSTORE_ResultCallback result_cb,
-                            void *cls)
-{
-  size_t name_size = strlen (name) + 1;
-  struct OperationRequest *req;
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg_extra (req, name_size,
-                               GNUNET_MESSAGE_TYPE_PSYCSTORE_STATE_GET);
-  req->channel_key = *channel_key;
-  GNUNET_memcpy (&req[1], name, name_size);
-
-  struct GNUNET_PSYCSTORE_OperationHandle *
-    op = op_create (h, h->op, result_cb, cls);
-  op->state_cb = state_cb;
-  op->cls = cls;
-  return op_send (h, op, env, &req->op_id);
-}
-
-
-/**
- * Retrieve all state variables for a channel with the given prefix.
- *
- * @param h
- *        Handle for the PSYCstore.
- * @param channel_key
- *        The channel we are interested in.
- * @param name_prefix
- *        Prefix of state variable names to match.
- * @param state_cb
- *        Callback to return matching state variables.
- * @param result_cb
- *        Callback to call with the result of the operation.
- * @param cls
- *        Closure for the callbacks.
- *
- * @return Handle that can be used to cancel the operation.
- */
-struct GNUNET_PSYCSTORE_OperationHandle *
-GNUNET_PSYCSTORE_state_get_prefix (struct GNUNET_PSYCSTORE_Handle *h,
-                                   const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
-                                   const char *name_prefix,
-                                   GNUNET_PSYCSTORE_StateCallback state_cb,
-                                   GNUNET_PSYCSTORE_ResultCallback result_cb,
-                                   void *cls)
-{
-  size_t name_size = strlen (name_prefix) + 1;
-  struct OperationRequest *req;
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg_extra (req, name_size,
-                               GNUNET_MESSAGE_TYPE_PSYCSTORE_STATE_GET_PREFIX);
-  req->channel_key = *channel_key;
-  GNUNET_memcpy (&req[1], name_prefix, name_size);
-
-  struct GNUNET_PSYCSTORE_OperationHandle *
-    op = op_create (h, h->op, result_cb, cls);
-  op->state_cb = state_cb;
-  op->cls = cls;
-  return op_send (h, op, env, &req->op_id);
-}
-
-/* end of psycstore_api.c */
diff --git a/src/psycstore/test_plugin_psycstore.c b/src/psycstore/test_plugin_psycstore.c
deleted file mode 100644 (file)
index ff4eac8..0000000
+++ /dev/null
@@ -1,532 +0,0 @@
-/*
- * This file is part of GNUnet
- * Copyright (C) 2013 GNUnet e.V.
- *
- * GNUnet is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNUnet is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
- */
-
-/**
- * @author Gabor X Toth
- * @author Christian Grothoff
- *
- * @file
- * Test for the PSYCstore plugins.
- */
-
-#include <inttypes.h>
-
-#include "platform.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_testing_lib.h"
-#include "gnunet_psycstore_plugin.h"
-#include "gnunet_psycstore_service.h"
-#include "gnunet_multicast_service.h"
-
-#define DEBUG_PSYCSTORE GNUNET_EXTRA_LOGGING
-#if DEBUG_PSYCSTORE
-# define LOG_LEVEL "DEBUG"
-#else
-# define LOG_LEVEL "WARNING"
-#endif
-
-#define C2ARG(str) str, (sizeof (str) - 1)
-
-#define LOG(kind,...)                                                          \
-  GNUNET_log_from (kind, "test-plugin-psycstore", __VA_ARGS__)
-
-static int ok;
-
-/**
- * Name of plugin under test.
- */
-static const char *plugin_name;
-
-static struct GNUNET_CRYPTO_EddsaPrivateKey *channel_key;
-static struct GNUNET_CRYPTO_EcdsaPrivateKey *slave_key;
-
-static struct GNUNET_CRYPTO_EddsaPublicKey channel_pub_key;
-static struct GNUNET_CRYPTO_EcdsaPublicKey slave_pub_key;
-
-/**
- * Function called when the service shuts down.  Unloads our psycstore
- * plugin.
- *
- * @param api api to unload
- */
-static void
-unload_plugin (struct GNUNET_PSYCSTORE_PluginFunctions *api)
-{
-  char *libname;
-
-  GNUNET_asprintf (&libname, "libgnunet_plugin_psycstore_%s", plugin_name);
-  GNUNET_break (NULL == GNUNET_PLUGIN_unload (libname, api));
-  GNUNET_free (libname);
-}
-
-
-/**
- * Load the psycstore plugin.
- *
- * @param cfg configuration to pass
- * @return NULL on error
- */
-static struct GNUNET_PSYCSTORE_PluginFunctions *
-load_plugin (const struct GNUNET_CONFIGURATION_Handle *cfg)
-{
-  struct GNUNET_PSYCSTORE_PluginFunctions *ret;
-  char *libname;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO, _ ("Loading `%s' psycstore plugin\n"),
-              plugin_name);
-  GNUNET_asprintf (&libname, "libgnunet_plugin_psycstore_%s", plugin_name);
-  if (NULL == (ret = GNUNET_PLUGIN_load (libname, (void*) cfg)))
-  {
-    FPRINTF (stderr, "Failed to load plugin `%s'!\n", plugin_name);
-    return NULL;
-  }
-  GNUNET_free (libname);
-  return ret;
-}
-
-
-#define MAX_MSG 16
-
-struct FragmentClosure
-{
-  uint8_t n;
-  uint64_t flags[MAX_MSG];
-  struct GNUNET_MULTICAST_MessageHeader *msg[MAX_MSG];
-};
-
-static int
-fragment_cb (void *cls, struct GNUNET_MULTICAST_MessageHeader *msg2,
-             enum GNUNET_PSYCSTORE_MessageFlags flags)
-{
-  struct FragmentClosure *fcls = cls;
-  struct GNUNET_MULTICAST_MessageHeader *msg1;
-  uint64_t flags1;
-  int ret;
-
-  if (fcls->n >= MAX_MSG)
-    {
-      GNUNET_break (0);
-      return GNUNET_SYSERR;
-    }
-  msg1 = fcls->msg[fcls->n];
-  flags1 = fcls->flags[fcls->n++];
-  if (NULL == msg1)
-    {
-      GNUNET_break (0);
-      return GNUNET_SYSERR;
-    }
-
-  if (flags1 == flags && msg1->header.size == msg2->header.size
-      && 0 == memcmp (msg1, msg2, ntohs (msg1->header.size)))
-  {
-    LOG (GNUNET_ERROR_TYPE_DEBUG, "Fragment %llu matches\n",
-         GNUNET_ntohll (msg1->fragment_id));
-    ret = GNUNET_YES;
-  }
-  else
-  {
-    LOG (GNUNET_ERROR_TYPE_ERROR, "Fragment %llu differs\n",
-         GNUNET_ntohll (msg1->fragment_id));
-    ret = GNUNET_SYSERR;
-  }
-
-  GNUNET_free (msg2);
-  return ret;
-}
-
-
-struct StateClosure {
-  size_t n;
-  char *name[16];
-  void *value[16];
-  size_t value_size[16];
-};
-
-static int
-state_cb (void *cls, const char *name, const void *value, uint32_t value_size)
-{
-  struct StateClosure *scls = cls;
-  const void *val = scls->value[scls->n]; // FIXME: check for n out-of-bounds FIRST!
-  size_t val_size = scls->value_size[scls->n++];
-
-  /* FIXME: check name */
-
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "  name = %s, value_size = %u\n",
-       name, value_size);
-
-  return GNUNET_YES;
-  return value_size == val_size && 0 == memcmp (value, val, val_size)
-    ? GNUNET_YES
-    : GNUNET_SYSERR;
-}
-
-
-static void
-run (void *cls, char *const *args, const char *cfgfile,
-     const struct GNUNET_CONFIGURATION_Handle *cfg)
-{
-  struct GNUNET_PSYCSTORE_PluginFunctions *db;
-
-  ok = 1;
-  db = load_plugin (cfg);
-  if (NULL == db)
-  {
-    FPRINTF (stderr,
-             "%s",
-            "Failed to initialize PSYCstore.  "
-             "Database likely not setup, skipping test.\n");
-    ok = 77;
-    return;
-  }
-
-  /* Store & test membership */
-
-  LOG (GNUNET_ERROR_TYPE_INFO, "MEMBERSHIP\n");
-
-  channel_key = GNUNET_CRYPTO_eddsa_key_create ();
-  slave_key = GNUNET_CRYPTO_ecdsa_key_create ();
-
-  GNUNET_CRYPTO_eddsa_key_get_public (channel_key,
-                                                  &channel_pub_key);
-  GNUNET_CRYPTO_ecdsa_key_get_public (slave_key, &slave_pub_key);
-
-  LOG (GNUNET_ERROR_TYPE_INFO, "membership_store()\n");
-
-  GNUNET_assert (GNUNET_OK == db->membership_store (db->cls, &channel_pub_key,
-                                                    &slave_pub_key, GNUNET_YES,
-                                                    4, 2, 1));
-
-  LOG (GNUNET_ERROR_TYPE_INFO, "membership_test()\n");
-
-  GNUNET_assert (GNUNET_YES == db->membership_test (db->cls, &channel_pub_key,
-                                                    &slave_pub_key, 4));
-
-  GNUNET_assert (GNUNET_YES == db->membership_test (db->cls, &channel_pub_key,
-                                                    &slave_pub_key, 2));
-
-  GNUNET_assert (GNUNET_NO == db->membership_test (db->cls, &channel_pub_key,
-                                                   &slave_pub_key, 1));
-
-  /* Store & get messages */
-
-  LOG (GNUNET_ERROR_TYPE_INFO, "MESSAGES\n");
-
-  struct GNUNET_MULTICAST_MessageHeader *msg
-    = GNUNET_malloc (sizeof (*msg) + sizeof (channel_pub_key));
-  GNUNET_assert (msg != NULL);
-
-  msg->header.type = htons (GNUNET_MESSAGE_TYPE_MULTICAST_MESSAGE);
-  msg->header.size = htons (sizeof (*msg) + sizeof (channel_pub_key));
-
-  uint64_t fragment_id = INT64_MAX - 1;
-  msg->fragment_id = GNUNET_htonll (fragment_id);
-
-  uint64_t message_id = INT64_MAX - 10;
-  msg->message_id = GNUNET_htonll (message_id);
-
-  uint64_t group_generation = INT64_MAX - 3;
-  msg->group_generation = GNUNET_htonll (group_generation);
-
-  msg->hop_counter = htonl (9);
-  msg->fragment_offset = GNUNET_htonll (0);
-  msg->flags = htonl (GNUNET_MULTICAST_MESSAGE_LAST_FRAGMENT);
-
-  GNUNET_memcpy (&msg[1], &channel_pub_key, sizeof (channel_pub_key));
-
-  msg->purpose.size = htonl (ntohs (msg->header.size)
-                             - sizeof (msg->header)
-                             - sizeof (msg->hop_counter)
-                             - sizeof (msg->signature));
-  msg->purpose.purpose = htonl (234);
-  GNUNET_assert (GNUNET_OK ==
-                 GNUNET_CRYPTO_eddsa_sign (channel_key, &msg->purpose, &msg->signature));
-
-  LOG (GNUNET_ERROR_TYPE_INFO, "fragment_store()\n");
-
-  struct FragmentClosure fcls = { 0 };
-  fcls.n = 0;
-  fcls.msg[0] = msg;
-  fcls.flags[0] = GNUNET_PSYCSTORE_MESSAGE_STATE;
-
-  GNUNET_assert (
-    GNUNET_OK == db->fragment_store (db->cls, &channel_pub_key, msg,
-                                     fcls.flags[0]));
-
-  LOG (GNUNET_ERROR_TYPE_INFO, "fragment_get(%" PRIu64 ")\n", fragment_id);
-
-  uint64_t ret_frags = 0;
-  GNUNET_assert (
-    GNUNET_OK == db->fragment_get (db->cls, &channel_pub_key,
-                                   fragment_id, fragment_id,
-                                   &ret_frags, fragment_cb, &fcls));
-  GNUNET_assert (fcls.n == 1);
-
-  LOG (GNUNET_ERROR_TYPE_INFO, "message_get_fragment()\n");
-
-  fcls.n = 0;
-  GNUNET_assert (
-    GNUNET_OK == db->message_get_fragment (db->cls, &channel_pub_key,
-                                           GNUNET_ntohll (msg->message_id),
-                                           GNUNET_ntohll (msg->fragment_offset),
-                                           fragment_cb, &fcls));
-  GNUNET_assert (fcls.n == 1);
-
-  LOG (GNUNET_ERROR_TYPE_INFO, "message_add_flags()\n");
-  GNUNET_assert (
-    GNUNET_OK == db->message_add_flags (db->cls, &channel_pub_key,
-                                        GNUNET_ntohll (msg->message_id),
-                                        GNUNET_PSYCSTORE_MESSAGE_STATE_APPLIED));
-  LOG (GNUNET_ERROR_TYPE_INFO, "fragment_get(%" PRIu64 ")\n", fragment_id);
-
-  fcls.n = 0;
-  fcls.flags[0] |= GNUNET_PSYCSTORE_MESSAGE_STATE_APPLIED;
-
-  GNUNET_assert (
-    GNUNET_OK == db->fragment_get (db->cls, &channel_pub_key,
-                                   fragment_id, fragment_id,
-                                   &ret_frags, fragment_cb, &fcls));
-
-  GNUNET_assert (fcls.n == 1);
-
-  LOG (GNUNET_ERROR_TYPE_INFO, "fragment_store()\n");
-
-  struct GNUNET_MULTICAST_MessageHeader *msg1
-    = GNUNET_malloc (sizeof (*msg1) + sizeof (channel_pub_key));
-
-  GNUNET_memcpy (msg1, msg, sizeof (*msg1) + sizeof (channel_pub_key));
-
-  msg1->fragment_id = GNUNET_htonll (INT64_MAX);
-  msg1->fragment_offset = GNUNET_htonll (32768);
-
-  fcls.n = 0;
-  fcls.msg[1] = msg1;
-  fcls.flags[1] = GNUNET_PSYCSTORE_MESSAGE_STATE_HASH;
-
-  GNUNET_assert (GNUNET_OK == db->fragment_store (db->cls, &channel_pub_key, msg1,
-                                                  fcls.flags[1]));
-
-  LOG (GNUNET_ERROR_TYPE_INFO, "message_get()\n");
-
-  GNUNET_assert (
-    GNUNET_OK == db->message_get (db->cls, &channel_pub_key,
-                                  message_id, message_id, 0,
-                                  &ret_frags, fragment_cb, &fcls));
-  GNUNET_assert (fcls.n == 2 && ret_frags == 2);
-
-  /* Message counters */
-
-  LOG (GNUNET_ERROR_TYPE_INFO, "counters_message_get()\n");
-
-  fragment_id = 0;
-  message_id = 0;
-  group_generation = 0;
-  GNUNET_assert (
-    GNUNET_OK == db->counters_message_get (db->cls, &channel_pub_key,
-                                           &fragment_id, &message_id,
-                                           &group_generation)
-    && fragment_id == GNUNET_ntohll (msg1->fragment_id)
-    && message_id == GNUNET_ntohll (msg1->message_id)
-    && group_generation == GNUNET_ntohll (msg1->group_generation));
-
-  /* Modify state */
-
-  LOG (GNUNET_ERROR_TYPE_INFO, "STATE\n");
-
-  LOG (GNUNET_ERROR_TYPE_INFO, "state_modify_*()\n");
-
-  message_id = GNUNET_ntohll (fcls.msg[0]->message_id) + 1;
-  GNUNET_assert (GNUNET_OK == db->state_modify_begin (db->cls, &channel_pub_key,
-                                                      message_id, 0));
-
-  GNUNET_assert (GNUNET_OK == db->state_modify_op (db->cls, &channel_pub_key,
-                                                   GNUNET_PSYC_OP_ASSIGN,
-                                                   "_foo",
-                                                   C2ARG("one two three")));
-
-  GNUNET_assert (GNUNET_OK == db->state_modify_op (db->cls, &channel_pub_key,
-                                                   GNUNET_PSYC_OP_ASSIGN,
-                                                   "_foo_bar", slave_key,
-                                                   sizeof (*slave_key)));
-
-  GNUNET_assert (GNUNET_OK == db->state_modify_end (db->cls, &channel_pub_key,
-                                                    message_id));
-
-  LOG (GNUNET_ERROR_TYPE_INFO, "state_get()\n");
-
-  struct StateClosure scls = { 0 };
-  scls.n = 0;
-  scls.value[0] = "one two three";
-  scls.value_size[0] = strlen ("one two three");
-
-  GNUNET_assert (GNUNET_OK == db->state_get (db->cls, &channel_pub_key, "_foo",
-                                             state_cb, &scls));
-  GNUNET_assert (scls.n == 1);
-
-  LOG (GNUNET_ERROR_TYPE_INFO, "state_get_prefix()\n");
-
-  scls.n = 0;
-  scls.value[1] = slave_key;
-  scls.value_size[1] = sizeof (*slave_key);
-
-  GNUNET_assert (GNUNET_OK == db->state_get_prefix (db->cls, &channel_pub_key,
-                                                    "_foo", state_cb, &scls));
-  GNUNET_assert (scls.n == 2);
-
-  LOG (GNUNET_ERROR_TYPE_INFO, "state_get_signed()\n");
-
-  scls.n = 0;
-  GNUNET_assert (GNUNET_NO == db->state_get_signed (db->cls, &channel_pub_key,
-                                                    state_cb, &scls));
-  GNUNET_assert (scls.n == 0);
-
-  LOG (GNUNET_ERROR_TYPE_INFO, "state_update_signed()\n");
-
-  GNUNET_assert (GNUNET_OK == db->state_update_signed (db->cls,
-                                                       &channel_pub_key));
-
-  LOG (GNUNET_ERROR_TYPE_INFO, "state_get_signed()\n");
-
-  scls.n = 0;
-  GNUNET_assert (GNUNET_YES == db->state_get_signed (db->cls, &channel_pub_key,
-                                                     state_cb, &scls));
-  GNUNET_assert (scls.n == 2);
-
-  /* State counters */
-
-  LOG (GNUNET_ERROR_TYPE_INFO, "counters_state_get()\n");
-
-  uint64_t max_state_msg_id = 0;
-  GNUNET_assert (GNUNET_OK == db->counters_state_get (db->cls, &channel_pub_key,
-                                                      &max_state_msg_id)
-                 && max_state_msg_id == message_id);
-
-  /* State sync */
-
-  LOG (GNUNET_ERROR_TYPE_INFO, "state_sync_*()\n");
-
-  scls.n = 0;
-  scls.value[0] = channel_key;
-  scls.value_size[0] = sizeof (*channel_key);
-  scls.value[1] = "three two one";
-  scls.value_size[1] = strlen ("three two one");
-
-  GNUNET_assert (GNUNET_OK == db->state_sync_begin (db->cls, &channel_pub_key));
-
-  GNUNET_assert (GNUNET_OK == db->state_sync_assign (db->cls, &channel_pub_key,
-                                                     "_sync_bar", scls.value[0],
-                                                     scls.value_size[0]));
-
-  GNUNET_assert (GNUNET_OK == db->state_sync_assign (db->cls, &channel_pub_key,
-                                                     "_sync_foo", scls.value[1],
-                                                     scls.value_size[1]));
-
-  GNUNET_assert (GNUNET_OK == db->state_sync_end (db->cls, &channel_pub_key,
-                                                  max_state_msg_id,
-                                                  INT64_MAX - 5));
-
-  GNUNET_assert (GNUNET_NO == db->state_get_prefix (db->cls, &channel_pub_key,
-                                                    "_foo", state_cb, &scls));
-  GNUNET_assert (scls.n == 0);
-
-  GNUNET_assert (GNUNET_OK == db->state_get_prefix (db->cls, &channel_pub_key,
-                                                    "_sync", state_cb, &scls));
-  GNUNET_assert (scls.n == 2);
-
-  scls.n = 0;
-  GNUNET_assert (GNUNET_OK == db->state_get_signed (db->cls, &channel_pub_key,
-                                                    state_cb, &scls));
-  GNUNET_assert (scls.n == 2);
-
-  /* Modify state after sync */
-
-  LOG (GNUNET_ERROR_TYPE_INFO, "state_modify_*()\n");
-
-  message_id = GNUNET_ntohll (fcls.msg[0]->message_id) + 6;
-  GNUNET_assert (GNUNET_OK == db->state_modify_begin (db->cls, &channel_pub_key,
-                                                      message_id,
-                                                      message_id - max_state_msg_id));
-
-  GNUNET_assert (GNUNET_OK == db->state_modify_op (db->cls, &channel_pub_key,
-                                                   GNUNET_PSYC_OP_ASSIGN,
-                                                   "_sync_foo",
-                                                   C2ARG("five six seven")));
-
-  GNUNET_assert (GNUNET_OK == db->state_modify_end (db->cls, &channel_pub_key,
-                                                    message_id));
-
-  /* Reset state */
-
-  LOG (GNUNET_ERROR_TYPE_INFO, "state_reset()\n");
-
-  scls.n = 0;
-  GNUNET_assert (GNUNET_OK == db->state_reset (db->cls, &channel_pub_key));
-  GNUNET_assert (scls.n == 0);
-
-  ok = 0;
-
-  if (NULL != channel_key)
-  {
-    GNUNET_free (channel_key);
-    channel_key = NULL;
-  }
-  if (NULL != slave_key)
-  {
-    GNUNET_free (slave_key);
-    slave_key = NULL;
-  }
-
-  unload_plugin (db);
-}
-
-
-int
-main (int argc, char *argv[])
-{
-  char cfg_name[128];
-  char *const xargv[] = {
-    "test-plugin-psycstore",
-    "-c", cfg_name,
-    "-L", LOG_LEVEL,
-    NULL
-  };
-  struct GNUNET_GETOPT_CommandLineOption options[] = {
-    GNUNET_GETOPT_OPTION_END
-  };
-  GNUNET_DISK_directory_remove ("/tmp/gnunet-test-plugin-psycstore-sqlite");
-  GNUNET_log_setup ("test-plugin-psycstore", LOG_LEVEL, NULL);
-  plugin_name = GNUNET_TESTING_get_testname_from_underscore (argv[0]);
-  GNUNET_snprintf (cfg_name, sizeof (cfg_name), "test_plugin_psycstore_%s.conf",
-                   plugin_name);
-  GNUNET_PROGRAM_run ((sizeof (xargv) / sizeof (char *)) - 1, xargv,
-                      "test-plugin-psycstore", "nohelp", options, &run, NULL);
-
-  if ( (0 != ok) &&
-       (77 != ok) )
-    FPRINTF (stderr, "Missed some testcases: %d\n", ok);
-
-#if ! DEBUG_PSYCSTORE
-  GNUNET_DISK_directory_remove ("/tmp/gnunet-test-plugin-psycstore-sqlite");
-#endif
-
-  return ok;
-}
-
-/* end of test_plugin_psycstore.c */
diff --git a/src/psycstore/test_plugin_psycstore_mysql.conf b/src/psycstore/test_plugin_psycstore_mysql.conf
deleted file mode 100644 (file)
index e15b3fd..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-[psycstore-mysql]
-DATABASE = test
-# CONFIG = ~/.my.cnf
-# USER = gnunet
-# PASSWORD =
-# HOST = localhost
-# PORT = 3306
diff --git a/src/psycstore/test_plugin_psycstore_postgres.conf b/src/psycstore/test_plugin_psycstore_postgres.conf
deleted file mode 100644 (file)
index 4b870dd..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-[psycstore-postgres]
-CONFIG = connect_timeout=10; dbname=template1
diff --git a/src/psycstore/test_plugin_psycstore_sqlite.conf b/src/psycstore/test_plugin_psycstore_sqlite.conf
deleted file mode 100644 (file)
index 498b1d0..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-[psycstore-sqlite]
-FILENAME = $GNUNET_TMP/gnunet-test-plugin-psycstore-sqlite/sqlite.db
diff --git a/src/psycstore/test_psycstore.c b/src/psycstore/test_psycstore.c
deleted file mode 100644 (file)
index ca50904..0000000
+++ /dev/null
@@ -1,586 +0,0 @@
-/*
- * This file is part of GNUnet
- * Copyright (C) 2013 GNUnet e.V.
- *
- * GNUnet is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNUnet is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
- */
-
-/**
- * @file psycstore/test_psycstore.c
- * @brief Test for the PSYCstore service.
- * @author Gabor X Toth
- * @author Christian Grothoff
- */
-
-#include <inttypes.h>
-
-#include "platform.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_common.h"
-#include "gnunet_testing_lib.h"
-#include "gnunet_psycstore_service.h"
-
-#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 30)
-
-
-/**
- * Return value from 'main'.
- */
-static int res;
-
-/**
- * Handle to PSYCstore service.
- */
-static struct GNUNET_PSYCSTORE_Handle *h;
-
-/**
- * Handle to PSYCstore operation.
- */
-static struct GNUNET_PSYCSTORE_OperationHandle *op;
-
-/**
- * Handle for task for timeout termination.
- */
-static struct GNUNET_SCHEDULER_Task *end_badly_task;
-
-static struct GNUNET_CRYPTO_EddsaPrivateKey *channel_key;
-static struct GNUNET_CRYPTO_EcdsaPrivateKey *slave_key;
-
-static struct GNUNET_CRYPTO_EddsaPublicKey channel_pub_key;
-static struct GNUNET_CRYPTO_EcdsaPublicKey slave_pub_key;
-
-static struct FragmentClosure
-{
-  uint8_t n;
-  uint8_t n_expected;
-  uint64_t flags[16];
-  struct GNUNET_MULTICAST_MessageHeader *msg[16];
-} fcls;
-
-struct StateClosure {
-  size_t n;
-  char *name[16];
-  void *value[16];
-  size_t value_size[16];
-} scls;
-
-static struct GNUNET_PSYC_Modifier modifiers[16];
-
-/**
- * Clean up all resources used.
- */
-static void
-cleanup ()
-{
-  if (NULL != op)
-  {
-    GNUNET_PSYCSTORE_operation_cancel (op);
-    op = NULL;
-  }
-  if (NULL != h)
-  {
-    GNUNET_PSYCSTORE_disconnect (h);
-    h = NULL;
-  }
-  if (NULL != channel_key)
-  {
-    GNUNET_free (channel_key);
-    channel_key = NULL;
-  }
-  if (NULL != slave_key)
-  {
-    GNUNET_free (slave_key);
-    slave_key = NULL;
-  }
-  GNUNET_SCHEDULER_shutdown ();
-}
-
-
-/**
- * Terminate the testcase (failure).
- *
- * @param cls NULL
- */
-static void
-end_badly (void *cls)
-{
-  res = 1;
-  cleanup ();
-}
-
-
-/**
- * Terminate the testcase (success).
- *
- * @param cls NULL
- */
-static void
-end_normally (void *cls)
-{
-  res = 0;
-  cleanup ();
-}
-
-
-/**
- * Finish the testcase (successfully).
- */
-static void
-end ()
-{
-  if (NULL != end_badly_task)
-  {
-    GNUNET_SCHEDULER_cancel (end_badly_task);
-    end_badly_task = NULL;
-  }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MILLISECONDS,
-                               &end_normally, NULL);
-}
-
-
-static void
-state_reset_result (void *cls,
-                    int64_t result,
-                    const char *err_msg,
-                    uint16_t err_msg_size)
-{
-  op = NULL;
-  GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-              "state_reset_result:\t%d\n",
-              (int) result);
-  GNUNET_assert (GNUNET_OK == result);
-
-  op = GNUNET_PSYCSTORE_state_reset (h, &channel_pub_key,
-                                     &state_reset_result, cls);
-  GNUNET_PSYCSTORE_operation_cancel (op);
-  op = NULL;
-  end ();
-}
-
-
-static int
-state_result (void *cls,
-              const char *name,
-              const void *value,
-              uint32_t value_size)
-{
-  struct StateClosure *scls = cls;
-  const char *nam = scls->name[scls->n];
-  const void *val = scls->value[scls->n];
-  size_t val_size = scls->value_size[scls->n++];
-
-  if (value_size == val_size
-      && 0 == memcmp (value, val, val_size)
-      && 0 == strcmp (name, nam))
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "  variable %s matches\n",
-                name);
-    return GNUNET_YES;
-  }
-  else
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "  variable %s differs\nReceived: %.*s\nExpected: %.*s\n",
-                name, (int) value_size, (char*) value, (int) val_size, (char*) val);
-    GNUNET_assert (0);
-    return GNUNET_SYSERR;
-  }
-}
-
-
-static void
-state_get_prefix_result (void *cls, int64_t result,
-                         const char *err_msg, uint16_t err_msg_size)
-{
-  struct StateClosure *scls = cls;
-  op = NULL;
-  GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "state_get_prefix_result:\t%ld\n", (long int) result);
-  GNUNET_assert (GNUNET_OK == result && 2 == scls->n);
-
-  op = GNUNET_PSYCSTORE_state_reset (h, &channel_pub_key,
-                                     &state_reset_result, cls);
-}
-
-
-static void
-state_get_result (void *cls, int64_t result,
-                  const char *err_msg, uint16_t err_msg_size)
-{
-  op = NULL;
-  GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "state_get_result:\t%ld\n", (long int) result);
-  GNUNET_assert (GNUNET_OK == result);
-
-  scls.n = 0;
-
-  scls.name[0] = "_sync_bar";
-  scls.value[0] = "ten eleven twelve";
-  scls.value_size[0] = sizeof ("ten eleven twelve") - 1;
-
-  scls.name[1] = "_sync_foo";
-  scls.value[1] = "three two one";
-  scls.value_size[1] = sizeof ("three two one") - 1;
-
-  op = GNUNET_PSYCSTORE_state_get_prefix (h, &channel_pub_key, "_sync",
-                                          &state_result,
-                                          &state_get_prefix_result, &scls);
-}
-
-
-static void
-counters_result (void *cls, int status, uint64_t max_fragment_id,
-                 uint64_t max_message_id, uint64_t max_group_generation,
-                 uint64_t max_state_message_id)
-{
-  struct FragmentClosure *fcls = cls;
-  int result = 0;
-  op = NULL;
-
-  if (GNUNET_OK == status
-      && max_fragment_id == GNUNET_ntohll (fcls->msg[2]->fragment_id)
-      && max_message_id == GNUNET_ntohll (fcls->msg[2]->message_id)
-      && max_group_generation == GNUNET_ntohll (fcls->msg[2]->group_generation)
-      && max_state_message_id == GNUNET_ntohll (fcls->msg[0]->message_id))
-    result = 1;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "counters_get:\t%d\n", result);
-  GNUNET_assert (result == 1);
-
-  scls.n = 0;
-  scls.name[0] = "_sync_bar";
-  scls.value[0] = "ten eleven twelve";
-  scls.value_size[0] = sizeof ("ten eleven twelve") - 1;
-
-  op = GNUNET_PSYCSTORE_state_get (h, &channel_pub_key, "_sync_bar_x_yy_zzz",
-                                   &state_result, &state_get_result, &scls);
-}
-
-
-static void
-state_modify_result (void *cls, int64_t result,
-                     const char *err_msg, uint16_t err_msg_size)
-{
-  op = NULL;
-  GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "state_modify_result:\t%ld\n", (long int) result);
-  GNUNET_assert (GNUNET_OK == result);
-
-  op = GNUNET_PSYCSTORE_counters_get (h, &channel_pub_key,
-                                      &counters_result, cls);
-}
-
-
-static void
-state_sync_result (void *cls, int64_t result,
-                   const char *err_msg, uint16_t err_msg_size)
-{
-  struct FragmentClosure *fcls = cls;
-  op = NULL;
-  GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "state_sync_result:\t%ld\n", (long int) result);
-  GNUNET_assert (GNUNET_OK == result);
-
-  op = GNUNET_PSYCSTORE_state_modify (h, &channel_pub_key,
-                                      GNUNET_ntohll (fcls->msg[0]->message_id),
-                                      0, state_modify_result, fcls);
-}
-
-
-static int
-fragment_result (void *cls,
-                 struct GNUNET_MULTICAST_MessageHeader *msg,
-                 enum GNUNET_PSYCSTORE_MessageFlags flags)
-{
-  struct FragmentClosure *fcls = cls;
-  GNUNET_assert (fcls->n < fcls->n_expected);
-  struct GNUNET_MULTICAST_MessageHeader *msg0 = fcls->msg[fcls->n];
-  uint64_t flags0 = fcls->flags[fcls->n++];
-
-  if (flags == flags0 && msg->header.size == msg0->header.size
-      && 0 == memcmp (msg, msg0, ntohs (msg->header.size)))
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "  fragment %" PRIu64 " matches\n",
-                GNUNET_ntohll (msg->fragment_id));
-    return GNUNET_YES;
-  }
-  else
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "  fragment differs: expected %" PRIu64 ", got %" PRIu64 "\n",
-                GNUNET_ntohll (msg0->fragment_id),
-                GNUNET_ntohll (msg->fragment_id));
-    GNUNET_assert (0);
-    return GNUNET_SYSERR;
-  }
-}
-
-
-static void
-message_get_latest_result (void *cls, int64_t result,
-                           const char *err_msg, uint16_t err_msg_size)
-{
-  struct FragmentClosure *fcls = cls;
-  op = NULL;
-  GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "message_get_latest:\t%ld\n", (long int) result);
-  GNUNET_assert (0 < result && fcls->n == fcls->n_expected);
-
-  modifiers[0] = (struct GNUNET_PSYC_Modifier) {
-    .oper = '=',
-    .name = "_sync_foo",
-    .value = "three two one",
-    .value_size = sizeof ("three two one") - 1
-  };
-  modifiers[1] = (struct GNUNET_PSYC_Modifier) {
-    .oper = '=',
-    .name = "_sync_bar",
-    .value = "ten eleven twelve",
-    .value_size = sizeof ("ten eleven twelve") - 1
-  };
-
-  op = GNUNET_PSYCSTORE_state_sync (h, &channel_pub_key,
-                                    GNUNET_ntohll (fcls->msg[0]->message_id) + 1,
-                                    GNUNET_ntohll (fcls->msg[0]->message_id) + 2,
-                                    2, modifiers, state_sync_result, fcls);
-}
-
-
-static void
-message_get_result (void *cls, int64_t result,
-                    const char *err_msg, uint16_t err_msg_size)
-{
-  struct FragmentClosure *fcls = cls;
-  op = NULL;
-  GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "message_get:\t%ld\n", (long int) result);
-  GNUNET_assert (0 < result && fcls->n == fcls->n_expected);
-
-  fcls->n = 0;
-  fcls->n_expected = 3;
-  op = GNUNET_PSYCSTORE_message_get_latest (h, &channel_pub_key, &slave_pub_key,
-                                            1, "", &fragment_result,
-                                            &message_get_latest_result, fcls);
-}
-
-
-static void
-message_get_fragment_result (void *cls, int64_t result,
-                             const char *err_msg, uint16_t err_msg_size)
-{
-  struct FragmentClosure *fcls = cls;
-  op = NULL;
-  GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "message_get_fragment:\t%ld\n", (long int) result);
-  GNUNET_assert (0 < result && fcls->n == fcls->n_expected);
-
-  fcls->n = 0;
-  fcls->n_expected = 3;
-  uint64_t message_id = GNUNET_ntohll (fcls->msg[0]->message_id);
-  op = GNUNET_PSYCSTORE_message_get (h, &channel_pub_key, &slave_pub_key,
-                                     message_id, message_id, 0, "",
-                                     &fragment_result,
-                                     &message_get_result, fcls);
-}
-
-
-static void
-fragment_get_latest_result (void *cls, int64_t result,
-                            const char *err_msg, uint16_t err_msg_size)
-{
-  struct FragmentClosure *fcls = cls;
-  op = NULL;
-  GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "fragment_get_latest:\t%ld\n", (long int) result);
-  GNUNET_assert (0 < result && fcls->n == fcls->n_expected);
-
-  fcls->n = 1;
-  fcls->n_expected = 2;
-  op = GNUNET_PSYCSTORE_message_get_fragment (h, &channel_pub_key, &slave_pub_key,
-                                              GNUNET_ntohll (fcls->msg[1]->message_id),
-                                              GNUNET_ntohll (fcls->msg[1]->fragment_offset),
-                                              &fragment_result,
-                                              &message_get_fragment_result, fcls);
-}
-
-
-static void
-fragment_get_result (void *cls, int64_t result,
-                     const char *err_msg, uint16_t err_msg_size)
-{
-  struct FragmentClosure *fcls = cls;
-  op = NULL;
-  GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-              "fragment_get:\t%d\n",
-              (int) result);
-  GNUNET_assert (0 < result && fcls->n == fcls->n_expected);
-
-  fcls->n = 0;
-  fcls->n_expected = 3;
-  op = GNUNET_PSYCSTORE_fragment_get_latest (h, &channel_pub_key,
-                                             &slave_pub_key, fcls->n_expected,
-                                             &fragment_result,
-                                             &fragment_get_latest_result, fcls);
-}
-
-
-static void
-fragment_store_result (void *cls, int64_t result,
-                       const char *err_msg, uint16_t err_msg_size)
-{
-  op = NULL;
-  GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "fragment_store:\t%ld\n", (long int) result);
-  GNUNET_assert (GNUNET_OK == result);
-
-  if ((intptr_t) cls == GNUNET_YES)
-  { /* last fragment */
-    fcls.n = 0;
-    fcls.n_expected = 1;
-    uint64_t fragment_id = GNUNET_ntohll (fcls.msg[0]->fragment_id);
-    op = GNUNET_PSYCSTORE_fragment_get (h, &channel_pub_key, &slave_pub_key,
-                                        fragment_id, fragment_id,
-                                        &fragment_result,
-                                        &fragment_get_result, &fcls);
-  }
-}
-
-
-static void
-fragment_store ()
-{
-  struct GNUNET_MULTICAST_MessageHeader *msg;
-  fcls.flags[0] = GNUNET_PSYCSTORE_MESSAGE_STATE;
-  fcls.msg[0] = msg = GNUNET_malloc (sizeof (*msg) + sizeof (channel_pub_key));
-  GNUNET_assert (msg != NULL);
-
-  msg->header.type = htons (GNUNET_MESSAGE_TYPE_MULTICAST_MESSAGE);
-  msg->header.size = htons (sizeof (*msg) + sizeof (channel_pub_key));
-
-  msg->hop_counter = htonl (9);
-  msg->fragment_id = GNUNET_htonll (INT64_MAX - 8);
-  msg->fragment_offset = GNUNET_htonll (0);
-  msg->message_id = GNUNET_htonll (INT64_MAX - 10);
-  msg->group_generation = GNUNET_htonll (INT64_MAX - 3);
-  msg->flags = htonl (GNUNET_MULTICAST_MESSAGE_LAST_FRAGMENT);
-
-  GNUNET_memcpy (&msg[1], &channel_pub_key, sizeof (channel_pub_key));
-
-  msg->purpose.size = htonl (ntohs (msg->header.size)
-                             - sizeof (msg->header)
-                             - sizeof (msg->hop_counter)
-                             - sizeof (msg->signature));
-  msg->purpose.purpose = htonl (234);
-  GNUNET_assert (GNUNET_OK == GNUNET_CRYPTO_eddsa_sign (channel_key, &msg->purpose,
-                                                        &msg->signature));
-
-  op = GNUNET_PSYCSTORE_fragment_store (h, &channel_pub_key, msg, fcls.flags[0],
-                                        &fragment_store_result, GNUNET_NO);
-
-  fcls.flags[1] = GNUNET_PSYCSTORE_MESSAGE_STATE_APPLIED;
-  fcls.msg[1] = msg = GNUNET_malloc (sizeof (*msg) + sizeof (channel_pub_key));
-  GNUNET_memcpy (msg, fcls.msg[0], sizeof (*msg) + sizeof (channel_pub_key));
-  msg->fragment_id = GNUNET_htonll (INT64_MAX - 4);
-  msg->fragment_offset = GNUNET_htonll (1024);
-
-  op = GNUNET_PSYCSTORE_fragment_store (h, &channel_pub_key, msg, fcls.flags[1],
-                                        &fragment_store_result, GNUNET_NO);
-
-  fcls.flags[2] = GNUNET_PSYCSTORE_MESSAGE_STATE_HASH;
-  fcls.msg[2] = msg = GNUNET_malloc (sizeof (*msg) + sizeof (channel_pub_key));
-  GNUNET_memcpy (msg, fcls.msg[1], sizeof (*msg) + sizeof (channel_pub_key));
-  msg->fragment_id = GNUNET_htonll (INT64_MAX);
-  msg->fragment_offset = GNUNET_htonll (16384);
-
-  op = GNUNET_PSYCSTORE_fragment_store (h, &channel_pub_key, msg, fcls.flags[2],
-                                        &fragment_store_result, (void *) GNUNET_YES);
-}
-
-
-static void
-membership_test_result (void *cls, int64_t result,
-                        const char *err_msg, uint16_t err_msg_size)
-{
-  op = NULL;
-  GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "membership_test:\t%ld\n", (long int) result);
-  GNUNET_assert (GNUNET_OK == result);
-
-  fragment_store ();
-}
-
-
-static void
-membership_store_result (void *cls, int64_t result,
-                         const char *err_msg, uint16_t err_msg_size)
-{
-  op = NULL;
-  GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "membership_store:\t%ld\n", (long int) result);
-  GNUNET_assert (GNUNET_OK == result);
-
-  op = GNUNET_PSYCSTORE_membership_test (h, &channel_pub_key, &slave_pub_key,
-                                         INT64_MAX - 10, 2,
-                                         &membership_test_result, NULL);
-}
-
-
-/**
- * Main function of the test, run from scheduler.
- *
- * @param cls NULL
- * @param cfg configuration we use (also to connect to PSYCstore service)
- * @param peer handle to access more of the peer (not used)
- */
-static void
-#if DEBUG_TEST_PSYCSTORE
-run (void *cls, char *const *args, const char *cfgfile,
-     const struct GNUNET_CONFIGURATION_Handle *cfg)
-#else
-run (void *cls,
-     const struct GNUNET_CONFIGURATION_Handle *cfg,
-     struct GNUNET_TESTING_Peer *peer)
-#endif
-{
-  end_badly_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL);
-
-  h = GNUNET_PSYCSTORE_connect (cfg);
-  GNUNET_assert (NULL != h);
-
-  channel_key = GNUNET_CRYPTO_eddsa_key_create ();
-  slave_key = GNUNET_CRYPTO_ecdsa_key_create ();
-
-  GNUNET_CRYPTO_eddsa_key_get_public (channel_key, &channel_pub_key);
-  GNUNET_CRYPTO_ecdsa_key_get_public (slave_key, &slave_pub_key);
-
-  op = GNUNET_PSYCSTORE_membership_store (h, &channel_pub_key, &slave_pub_key,
-                                          GNUNET_YES, INT64_MAX - 5,
-                                          INT64_MAX - 10, 2,
-                                          &membership_store_result, NULL);
-}
-
-
-int
-main (int argc, char *argv[])
-{
-  res = 1;
-#if DEBUG_TEST_PSYCSTORE
-  const struct GNUNET_GETOPT_CommandLineOption opts[] = {
-    GNUNET_GETOPT_OPTION_END
-  };
-  if (GNUNET_OK != GNUNET_PROGRAM_run (argc, argv, "test-psycstore",
-                                       "test-psycstore [options]",
-                                       opts, &run, NULL))
-    return 1;
-#else
-  if (0 != GNUNET_TESTING_service_run ("test-psycstore", "psycstore",
-                                       "test_psycstore.conf", &run, NULL))
-    return 1;
-#endif
-  return res;
-}
-
-/* end of test_psycstore.c */
diff --git a/src/psycstore/test_psycstore.conf b/src/psycstore/test_psycstore.conf
deleted file mode 100644 (file)
index fa7c2d0..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-[PATHS]
-GNUNET_TEST_HOME = $GNUNET_TMP/test-gnunet-psycstore/
-
-[psycstore]
-DATABASE = sqlite
-
-[psycstore-sqlite]
-FILENAME = $GNUNET_TEST_HOME/psycstore/sqlite.db
diff --git a/src/psycutil/.gitignore b/src/psycutil/.gitignore
deleted file mode 100644 (file)
index 03d8197..0000000
+++ /dev/null
@@ -1 +0,0 @@
-test_psyc_env
diff --git a/src/psycutil/Makefile.am b/src/psycutil/Makefile.am
deleted file mode 100644 (file)
index 2732c3a..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# This Makefile.am is in the public domain
-AM_CPPFLAGS = -I$(top_srcdir)/src/include
-
-pkgcfgdir= $(pkgdatadir)/config.d/
-
-libexecdir= $(pkglibdir)/libexec/
-
-if MINGW
- WINFLAGS = -Wl,--no-undefined -Wl,--export-all-symbols
-endif
-
-if USE_COVERAGE
-  AM_CFLAGS = --coverage -O0
-  XLIB = -lgcov
-endif
-
-lib_LTLIBRARIES = libgnunetpsycutil.la
-
-libgnunetpsycutil_la_SOURCES = \
-  psyc_env.c \
-  psyc_message.c \
-  psyc_slicer.c
-libgnunetpsycutil_la_LIBADD = \
-  $(top_builddir)/src/util/libgnunetutil.la \
-  $(GN_LIBINTL) $(XLIB)
-libgnunetpsycutil_la_LDFLAGS = \
-  $(GN_LIB_LDFLAGS)  $(WINFLAGS) \
-  -version-info 0:0:0
-
-if HAVE_TESTING
-check_PROGRAMS = \
- test_psyc_env
-endif
-
-if ENABLE_TEST_RUN
-AM_TESTS_ENVIRONMENT=export GNUNET_PREFIX=$${GNUNET_PREFIX:-@libdir@};export PATH=$${GNUNET_PREFIX:-@prefix@}/bin:$$PATH;unset XDG_DATA_HOME;unset XDG_CONFIG_HOME;
-TESTS = $(check_PROGRAMS)
-endif
-
-test_psyc_env_SOURCES = \
- test_psyc_env.c
-test_psyc_env_LDADD = \
-  libgnunetpsycutil.la \
-  $(top_builddir)/src/testing/libgnunettesting.la \
-  $(top_builddir)/src/util/libgnunetutil.la
diff --git a/src/psycutil/psyc_env.c b/src/psycutil/psyc_env.c
deleted file mode 100644 (file)
index fc4b8eb..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * This file is part of GNUnet.
- * Copyright (C) 2013 GNUnet e.V.
- *
- * GNUnet is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNUnet is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
- */
-
-/**
- * @author Gabor X Toth
- *
- * @file
- * Library providing operations for the @e environment of
- * PSYC and Social messages.
- */
-
-#include "platform.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_psyc_env.h"
-
-/**
- * Environment for a message.
- *
- * Contains modifiers.
- */
-struct GNUNET_PSYC_Environment
-{
-  struct GNUNET_PSYC_Modifier *mod_head;
-  struct GNUNET_PSYC_Modifier *mod_tail;
-  size_t mod_count;
-};
-
-
-/**
- * Create an environment.
- *
- * @return A newly allocated environment.
- */
-struct GNUNET_PSYC_Environment *
-GNUNET_PSYC_env_create ()
-{
-  return GNUNET_new (struct GNUNET_PSYC_Environment);
-}
-
-
-/**
- * Add a modifier to the environment.
- *
- * @param env The environment.
- * @param oper Operation to perform.
- * @param name Name of the variable.
- * @param value Value of the variable.
- * @param value_size Size of @a value.
- */
-void
-GNUNET_PSYC_env_add (struct GNUNET_PSYC_Environment *env,
-                     enum GNUNET_PSYC_Operator oper, const char *name,
-                     const void *value, size_t value_size)
-{
-  struct GNUNET_PSYC_Modifier *mod = GNUNET_new (struct GNUNET_PSYC_Modifier);
-  mod->oper = oper;
-  mod->name = name;
-  mod->value = value;
-  mod->value_size = value_size;
-  GNUNET_CONTAINER_DLL_insert_tail (env->mod_head, env->mod_tail, mod);
-  env->mod_count++;
-}
-
-
-/**
- * Get the first modifier of the environment.
- */
-struct GNUNET_PSYC_Modifier *
-GNUNET_PSYC_env_head (const struct GNUNET_PSYC_Environment *env)
-{
-  return env->mod_head;
-}
-
-
-/**
- * Get the last modifier of the environment.
- */
-struct GNUNET_PSYC_Modifier *
-GNUNET_PSYC_env_tail (const struct GNUNET_PSYC_Environment *env)
-{
-  return env->mod_tail;
-}
-
-
-/**
- * Remove a modifier from the environment.
- */
-void
-GNUNET_PSYC_env_remove (struct GNUNET_PSYC_Environment *env,
-                        struct GNUNET_PSYC_Modifier *mod)
-{
-  GNUNET_CONTAINER_DLL_remove (env->mod_head, env->mod_tail, mod);
-}
-
-
-/**
- * Get the modifier at the beginning of an environment and remove it.
- *
- * @param env
- * @param oper
- * @param name
- * @param value
- * @param value_size
- *
- * @return
- */
-int
-GNUNET_PSYC_env_shift (struct GNUNET_PSYC_Environment *env,
-                       enum GNUNET_PSYC_Operator *oper, const char **name,
-                       const void **value, size_t *value_size)
-{
-  if (NULL == env->mod_head)
-    return GNUNET_NO;
-
-  struct GNUNET_PSYC_Modifier *mod = env->mod_head;
-  *oper = mod->oper;
-  *name = mod->name;
-  *value = mod->value;
-  *value_size = mod->value_size;
-
-  GNUNET_CONTAINER_DLL_remove (env->mod_head, env->mod_tail, mod);
-  GNUNET_free (mod);
-  env->mod_count--;
-
-  return GNUNET_YES;
-}
-
-
-/**
- * Iterate through all modifiers in the environment.
- *
- * @param env The environment.
- * @param it Iterator.
- * @param it_cls Closure for iterator.
- */
-void
-GNUNET_PSYC_env_iterate (const struct GNUNET_PSYC_Environment *env,
-                         GNUNET_PSYC_Iterator it, void *it_cls)
-{
-  struct GNUNET_PSYC_Modifier *mod;
-  for (mod = env->mod_head; NULL != mod; mod = mod->next)
-    it (it_cls, mod->oper, mod->name, mod->value, mod->value_size);
-}
-
-
-/**
- * Get the number of modifiers in the environment.
- *
- * @param env The environment.
- *
- * @return Number of modifiers.
- */
-size_t
-GNUNET_PSYC_env_get_count (const struct GNUNET_PSYC_Environment *env)
-{
-  return env->mod_count;
-}
-
-
-/**
- * Destroy an environment.
- *
- * @param env The environment to destroy.
- */
-void
-GNUNET_PSYC_env_destroy (struct GNUNET_PSYC_Environment *env)
-{
-  struct GNUNET_PSYC_Modifier *mod, *prev = NULL;
-  for (mod = env->mod_head; NULL != mod; mod = mod->next)
-  {
-    if (NULL != prev)
-      GNUNET_free (prev);
-    prev = mod;
-  }
-  if (NULL != prev)
-    GNUNET_free (prev);
-
-  GNUNET_free (env);
-}
diff --git a/src/psycutil/psyc_message.c b/src/psycutil/psyc_message.c
deleted file mode 100644 (file)
index a03eff4..0000000
+++ /dev/null
@@ -1,1355 +0,0 @@
-/*
- * This file is part of GNUnet
- * Copyright (C) 2013 GNUnet e.V.
- *
- * GNUnet is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNUnet is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
- */
-
-/**
- * @file psycutil/psyc_message.c
- * @brief PSYC utilities; receiving/transmitting/logging PSYC messages.
- * @author Gabor X Toth
- */
-
-#include <inttypes.h>
-
-#include "platform.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_psyc_util_lib.h"
-#include "gnunet_psyc_service.h"
-
-#define LOG(kind,...) GNUNET_log_from (kind, "psyc-util",__VA_ARGS__)
-
-
-struct GNUNET_PSYC_TransmitHandle
-{
-  /**
-   * Client connection to service.
-   */
-  struct GNUNET_MQ_Handle *mq;
-
-  /**
-   * Message currently being received from the client.
-   */
-  struct GNUNET_MessageHeader *msg;
-
-  /**
-   * Envelope for @a msg
-   */
-  struct GNUNET_MQ_Envelope *env;
-
-  /**
-   * Callback to request next modifier from client.
-   */
-  GNUNET_PSYC_TransmitNotifyModifier notify_mod;
-
-  /**
-   * Closure for the notify callbacks.
-   */
-  void *notify_mod_cls;
-
-  /**
-   * Callback to request next data fragment from client.
-   */
-  GNUNET_PSYC_TransmitNotifyData notify_data;
-
-  /**
-   * Closure for the notify callbacks.
-   */
-  void *notify_data_cls;
-
-  /**
-   * Modifier of the environment that is currently being transmitted.
-   */
-  struct GNUNET_PSYC_Modifier *mod;
-
-  /**
-   *
-   */
-  const char *mod_value;
-
-  /**
-   * Number of bytes remaining to be transmitted from the current modifier value.
-   */
-  uint32_t mod_value_remaining;
-
-  /**
-   * State of the current message being received from client.
-   */
-  enum GNUNET_PSYC_MessageState state;
-
-  /**
-   * Number of PSYC_TRANSMIT_ACK messages we are still waiting for.
-   */
-  uint8_t acks_pending;
-
-  /**
-   * Is transmission paused?
-   */
-  uint8_t paused;
-
-  /**
-   * Are we currently transmitting a message?
-   */
-  uint8_t in_transmit;
-
-  /**
-   * Notify callback is currently being called.
-   */
-  uint8_t in_notify;
-
-};
-
-
-
-struct GNUNET_PSYC_ReceiveHandle
-{
-  /**
-   * Message callback.
-   */
-  GNUNET_PSYC_MessageCallback message_cb;
-
-  /**
-   * Message part callback.
-   */
-  GNUNET_PSYC_MessagePartCallback message_part_cb;
-
-  /**
-   * Closure for the callbacks.
-   */
-  void *cb_cls;
-
-  /**
-   * ID of the message being received from the PSYC service.
-   */
-  uint64_t message_id;
-
-  /**
-   * Public key of the slave from which a message is being received.
-   */
-  struct GNUNET_CRYPTO_EcdsaPublicKey slave_pub_key;
-
-  /**
-   * State of the currently being received message from the PSYC service.
-   */
-  enum GNUNET_PSYC_MessageState state;
-
-  /**
-   * Flags for the currently being received message from the PSYC service.
-   */
-  enum GNUNET_PSYC_MessageFlags flags;
-
-  /**
-   * Expected value size for the modifier being received from the PSYC service.
-   */
-  uint32_t mod_value_size_expected;
-
-  /**
-   * Actual value size for the modifier being received from the PSYC service.
-   */
-  uint32_t mod_value_size;
-};
-
-
-/**** Messages ****/
-
-
-/**
- * Create a PSYC message.
- *
- * @param method_name
- *        PSYC method for the message.
- * @param env
- *        Environment for the message.
- * @param data
- *        Data payload for the message.
- * @param data_size
- *        Size of @a data.
- *
- * @return Message header with size information,
- *         followed by the message parts.
- */
-struct GNUNET_PSYC_Message *
-GNUNET_PSYC_message_create (const char *method_name,
-                            const struct GNUNET_PSYC_Environment *env,
-                            const void *data,
-                            size_t data_size)
-{
-  struct GNUNET_PSYC_Modifier *mod = NULL;
-  struct GNUNET_PSYC_MessageMethod *pmeth = NULL;
-  struct GNUNET_PSYC_MessageModifier *pmod = NULL;
-  struct GNUNET_MessageHeader *pmsg = NULL;
-  uint16_t env_size = 0;
-  if (NULL != env)
-  {
-    mod = GNUNET_PSYC_env_head (env);
-    while (NULL != mod)
-    {
-      env_size += sizeof (*pmod) + strlen (mod->name) + 1 + mod->value_size;
-      mod = mod->next;
-    }
-  }
-
-  struct GNUNET_PSYC_Message *msg;
-  uint16_t method_name_size = strlen (method_name) + 1;
-  if (method_name_size == 1)
-    return NULL;
-
-  uint16_t msg_size = sizeof (*msg)                      /* header */
-    + sizeof (*pmeth) + method_name_size                 /* method */
-    + env_size                                           /* modifiers */
-    + ((0 < data_size) ? sizeof (*pmsg) + data_size : 0) /* data */
-    + sizeof (*pmsg);                                    /* end of message */
-  msg = GNUNET_malloc (msg_size);
-  msg->header.size = htons (msg_size);
-  msg->header.type = htons (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE); /* FIXME */
-
-  pmeth = (struct GNUNET_PSYC_MessageMethod *) &msg[1];
-  pmeth->header.type = htons (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_METHOD);
-  pmeth->header.size = htons (sizeof (*pmeth) + method_name_size);
-  GNUNET_memcpy (&pmeth[1], method_name, method_name_size);
-
-  uint16_t p = sizeof (*msg) + sizeof (*pmeth) + method_name_size;
-  if (NULL != env)
-  {
-    mod = GNUNET_PSYC_env_head (env);
-    while (NULL != mod)
-    {
-      uint16_t mod_name_size = strlen (mod->name) + 1;
-      pmod = (struct GNUNET_PSYC_MessageModifier *) ((char *) msg + p);
-      pmod->header.type = htons (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MODIFIER);
-      pmod->header.size = sizeof (*pmod) + mod_name_size + mod->value_size;
-      p += pmod->header.size;
-      pmod->header.size = htons (pmod->header.size);
-
-      pmod->oper = mod->oper;
-      pmod->name_size = htons (mod_name_size);
-      pmod->value_size = htonl (mod->value_size);
-
-      GNUNET_memcpy (&pmod[1], mod->name, mod_name_size);
-      if (0 < mod->value_size)
-        GNUNET_memcpy ((char *) &pmod[1] + mod_name_size, mod->value, mod->value_size);
-
-      mod = mod->next;
-    }
-  }
-
-  if (0 < data_size)
-  {
-    pmsg = (struct GNUNET_MessageHeader *) ((char *) msg + p);
-    pmsg->size = sizeof (*pmsg) + data_size;
-    p += pmsg->size;
-    pmsg->size = htons (pmsg->size);
-    pmsg->type = htons (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_DATA);
-    GNUNET_memcpy (&pmsg[1], data, data_size);
-  }
-
-  pmsg = (struct GNUNET_MessageHeader *) ((char *) msg + p);
-  pmsg->size = htons (sizeof (*pmsg));
-  pmsg->type = htons (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_END);
-
-  GNUNET_assert (p + sizeof (*pmsg) == msg_size);
-  return msg;
-}
-
-
-void
-GNUNET_PSYC_log_message (enum GNUNET_ErrorType kind,
-                         const struct GNUNET_MessageHeader *msg)
-{
-  uint16_t size = ntohs (msg->size);
-  uint16_t type = ntohs (msg->type);
-
-  GNUNET_log (kind,
-              "Message of type %d and size %u:\n",
-              type,
-              size);
-  switch (type)
-  {
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE:
-  {
-    const struct GNUNET_PSYC_MessageHeader *pmsg
-      = (const struct GNUNET_PSYC_MessageHeader *) msg;
-    GNUNET_log (kind,
-                "\tID: %" PRIu64 "\tflags: %x" PRIu32 "\n",
-                GNUNET_ntohll (pmsg->message_id),
-                ntohl (pmsg->flags));
-    break;
-  }
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_METHOD:
-  {
-    const struct GNUNET_PSYC_MessageMethod *meth
-      = (const struct GNUNET_PSYC_MessageMethod *) msg;
-    GNUNET_log (kind,
-                "\t%.*s\n",
-                (int) (size - sizeof (*meth)),
-                (const char *) &meth[1]);
-    break;
-  }
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MODIFIER:
-  {
-    const struct GNUNET_PSYC_MessageModifier *mod
-      = (const struct GNUNET_PSYC_MessageModifier *) msg;
-    uint16_t name_size = ntohs (mod->name_size);
-    char oper = ' ' < mod->oper ? mod->oper : ' ';
-    GNUNET_log (kind,
-                "\t%c%.*s\t%.*s\n",
-                oper,
-                (int) name_size,
-                (const char *) &mod[1],
-                (int) (size - sizeof (*mod) - name_size),
-                ((const char *) &mod[1]) + name_size);
-    break;
-  }
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MOD_CONT:
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_DATA:
-    GNUNET_log (kind,
-                "\t%.*s\n",
-                (int) (size - sizeof (*msg)),
-                (const char *) &msg[1]);
-    break;
-  }
-}
-
-
-/**** Transmitting messages ****/
-
-
-/**
- * Create a transmission handle.
- */
-struct GNUNET_PSYC_TransmitHandle *
-GNUNET_PSYC_transmit_create (struct GNUNET_MQ_Handle *mq)
-{
-  struct GNUNET_PSYC_TransmitHandle *tmit = GNUNET_new (struct GNUNET_PSYC_TransmitHandle);
-
-  tmit->mq = mq;
-  return tmit;
-}
-
-
-/**
- * Destroy a transmission handle.
- */
-void
-GNUNET_PSYC_transmit_destroy (struct GNUNET_PSYC_TransmitHandle *tmit)
-{
-  GNUNET_free (tmit);
-}
-
-
-/**
- * Queue a message part for transmission.
- *
- * The message part is added to the current message buffer.
- * When this buffer is full, it is added to the transmission queue.
- *
- * @param tmit
- *        Transmission handle.
- * @param msg
- *        Message part, or NULL.
- * @param tmit_now
- *        Transmit message now, or wait for buffer to fill up?
- *        #GNUNET_YES or #GNUNET_NO.
- */
-static void
-transmit_queue_insert (struct GNUNET_PSYC_TransmitHandle *tmit,
-                       const struct GNUNET_MessageHeader *msg,
-                       uint8_t tmit_now)
-{
-  uint16_t size = (NULL != msg) ? ntohs (msg->size) : 0;
-
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Queueing message part of type %u and size %u (tmit_now: %u)).\n",
-       NULL != msg ? ntohs (msg->type) : 0, size, tmit_now);
-
-  if (NULL != tmit->msg)
-  {
-    if (NULL == msg
-        || GNUNET_MULTICAST_FRAGMENT_MAX_PAYLOAD < tmit->msg->size + size)
-    {
-      /* End of message or buffer is full, add it to transmission queue
-       * and start with empty buffer */
-      tmit->msg->size = htons (tmit->msg->size);
-      GNUNET_MQ_send (tmit->mq, tmit->env);
-      tmit->env = NULL;
-      tmit->msg = NULL;
-      tmit->acks_pending++;
-    }
-    else
-    {
-      /* Message fits in current buffer, append */
-      GNUNET_memcpy ((char *) tmit->msg + tmit->msg->size, msg, size);
-      tmit->msg->size += size;
-    }
-  }
-
-  if (NULL == tmit->msg && NULL != msg)
-  {
-    /* Empty buffer, copy over message. */
-    tmit->env = GNUNET_MQ_msg_extra (tmit->msg,
-                                     GNUNET_MULTICAST_FRAGMENT_MAX_PAYLOAD,
-                                     GNUNET_MESSAGE_TYPE_PSYC_MESSAGE);
-    /* store current message size in host byte order
-     * then later switch it to network byte order before sending */
-    tmit->msg->size = sizeof (*tmit->msg) + size;
-
-    GNUNET_memcpy (&tmit->msg[1], msg, size);
-  }
-
-  if (NULL != tmit->msg
-      && (GNUNET_YES == tmit_now
-          || (GNUNET_MULTICAST_FRAGMENT_MAX_PAYLOAD
-              < tmit->msg->size + sizeof (struct GNUNET_MessageHeader))))
-  {
-    /* End of message or buffer is full, add it to transmission queue. */
-    tmit->msg->size = htons (tmit->msg->size);
-    GNUNET_MQ_send (tmit->mq, tmit->env);
-    tmit->env = NULL;
-    tmit->msg = NULL;
-    tmit->acks_pending++;
-  }
-}
-
-
-/**
- * Request data from client to transmit.
- *
- * @param tmit  Transmission handle.
- */
-static void
-transmit_data (struct GNUNET_PSYC_TransmitHandle *tmit)
-{
-  int notify_ret = GNUNET_YES;
-  uint16_t data_size = 0;
-  char data[GNUNET_MULTICAST_FRAGMENT_MAX_PAYLOAD] = "";
-  struct GNUNET_MessageHeader *msg = (struct GNUNET_MessageHeader *) data;
-  msg->type = htons (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_DATA);
-
-  if (NULL != tmit->notify_data)
-  {
-    data_size = GNUNET_PSYC_DATA_MAX_PAYLOAD;
-    tmit->in_notify = GNUNET_YES;
-    notify_ret = tmit->notify_data (tmit->notify_data_cls, &data_size, &msg[1]);
-    tmit->in_notify = GNUNET_NO;
-  }
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "transmit_data (ret: %d, size: %u): %.*s\n",
-       notify_ret, data_size, data_size, &msg[1]);
-  switch (notify_ret)
-  {
-  case GNUNET_NO:
-    if (0 == data_size)
-    {
-      /* Transmission paused, nothing to send. */
-      tmit->paused = GNUNET_YES;
-      return;
-    }
-    break;
-
-  case GNUNET_YES:
-    tmit->state = GNUNET_PSYC_MESSAGE_STATE_END;
-    break;
-
-  default:
-    LOG (GNUNET_ERROR_TYPE_ERROR,
-         "TransmitNotifyData callback returned error when requesting data.\n");
-
-    tmit->state = GNUNET_PSYC_MESSAGE_STATE_CANCEL;
-    msg->type = htons (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_CANCEL);
-    msg->size = htons (sizeof (*msg));
-    transmit_queue_insert (tmit, msg, GNUNET_YES);
-    tmit->in_transmit = GNUNET_NO;
-    return;
-  }
-
-  if (0 < data_size)
-  {
-    GNUNET_assert (data_size <= GNUNET_PSYC_DATA_MAX_PAYLOAD);
-    msg->size = htons (sizeof (*msg) + data_size);
-    transmit_queue_insert (tmit, msg, !notify_ret);
-  }
-
-  /* End of message. */
-  if (GNUNET_YES == notify_ret)
-  {
-    msg->type = htons (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_END);
-    msg->size = htons (sizeof (*msg));
-    transmit_queue_insert (tmit, msg, GNUNET_YES);
-    /* FIXME: wait for ACK before setting in_transmit to no */
-    tmit->in_transmit = GNUNET_NO;
-  }
-}
-
-
-/**
- * Request a modifier from a client to transmit.
- *
- * @param tmit  Transmission handle.
- */
-static void
-transmit_mod (struct GNUNET_PSYC_TransmitHandle *tmit)
-{
-  uint16_t max_data_size = 0;
-  uint16_t data_size = 0;
-  char data[GNUNET_MULTICAST_FRAGMENT_MAX_PAYLOAD] = "";
-  struct GNUNET_MessageHeader *msg = (struct GNUNET_MessageHeader *) data;
-  int notify_ret = GNUNET_YES;
-
-  switch (tmit->state)
-  {
-  case GNUNET_PSYC_MESSAGE_STATE_MODIFIER:
-  {
-    struct GNUNET_PSYC_MessageModifier *mod
-      = (struct GNUNET_PSYC_MessageModifier *) msg;
-    msg->type = htons (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MODIFIER);
-    msg->size = sizeof (struct GNUNET_PSYC_MessageModifier);
-
-    if (NULL != tmit->notify_mod)
-    {
-      max_data_size = GNUNET_PSYC_MODIFIER_MAX_PAYLOAD;
-      data_size = max_data_size;
-      tmit->in_notify = GNUNET_YES;
-      notify_ret = tmit->notify_mod (tmit->notify_mod_cls, &data_size, &mod[1],
-                                     &mod->oper, &mod->value_size);
-      tmit->in_notify = GNUNET_NO;
-    }
-
-    mod->name_size = strnlen ((char *) &mod[1], data_size) + 1;
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "transmit_mod (ret: %d, size: %u + %u): %.*s\n",
-         notify_ret, mod->name_size, mod->value_size, data_size, &mod[1]);
-    if (mod->name_size < data_size)
-    {
-      tmit->mod_value_remaining
-        = mod->value_size - (data_size - mod->name_size);
-      mod->value_size = htonl (mod->value_size);
-      mod->name_size = htons (mod->name_size);
-    }
-    else if (0 < data_size)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Got invalid modifier name.\n");
-      notify_ret = GNUNET_SYSERR;
-    }
-    break;
-  }
-  case GNUNET_PSYC_MESSAGE_STATE_MOD_CONT:
-  {
-    msg->type = htons (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MOD_CONT);
-    msg->size = sizeof (struct GNUNET_MessageHeader);
-
-    if (NULL != tmit->notify_mod)
-    {
-      max_data_size = GNUNET_PSYC_MOD_CONT_MAX_PAYLOAD;
-      data_size = max_data_size;
-      tmit->in_notify = GNUNET_YES;
-      notify_ret = tmit->notify_mod (tmit->notify_mod_cls,
-                                     &data_size, &msg[1], NULL, NULL);
-      tmit->in_notify = GNUNET_NO;
-    }
-    tmit->mod_value_remaining -= data_size;
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "transmit_mod (ret: %d, size: %u): %.*s\n",
-         notify_ret, data_size, data_size, &msg[1]);
-    break;
-  }
-  default:
-    GNUNET_assert (0);
-  }
-
-  switch (notify_ret)
-  {
-  case GNUNET_NO:
-    if (0 == data_size)
-    { /* Transmission paused, nothing to send. */
-      tmit->paused = GNUNET_YES;
-      return;
-    }
-    tmit->state
-      = (0 == tmit->mod_value_remaining)
-      ? GNUNET_PSYC_MESSAGE_STATE_MODIFIER
-      : GNUNET_PSYC_MESSAGE_STATE_MOD_CONT;
-    break;
-
-  case GNUNET_YES: /* End of modifiers. */
-    GNUNET_assert (0 == tmit->mod_value_remaining);
-    break;
-
-  default:
-    LOG (GNUNET_ERROR_TYPE_ERROR,
-         "TransmitNotifyModifier callback returned with error.\n");
-
-    tmit->state = GNUNET_PSYC_MESSAGE_STATE_CANCEL;
-    msg->type = htons (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_CANCEL);
-    msg->size = htons (sizeof (*msg));
-    transmit_queue_insert (tmit, msg, GNUNET_YES);
-    tmit->in_transmit = GNUNET_NO;
-    return;
-  }
-
-  if (0 < data_size)
-  {
-    GNUNET_assert (data_size <= max_data_size);
-    msg->size = htons (msg->size + data_size);
-    transmit_queue_insert (tmit, msg, GNUNET_NO);
-  }
-
-  if (GNUNET_YES == notify_ret)
-  {
-    tmit->state = GNUNET_PSYC_MESSAGE_STATE_DATA;
-    if (0 == tmit->acks_pending)
-      transmit_data (tmit);
-  }
-  else
-  {
-    transmit_mod (tmit);
-  }
-}
-
-
-int
-transmit_notify_env (void *cls, uint16_t *data_size, void *data, uint8_t *oper,
-                     uint32_t *full_value_size)
-
-{
-  struct GNUNET_PSYC_TransmitHandle *tmit = cls;
-  uint16_t name_size = 0;
-  uint32_t value_size = 0;
-  const char *value = NULL;
-
-  if (NULL != oper)
-  { /* New modifier */
-    if (NULL != tmit->mod)
-      tmit->mod = tmit->mod->next;
-    if (NULL == tmit->mod)
-    { /* No more modifiers, continue with data */
-      *data_size = 0;
-      return GNUNET_YES;
-    }
-
-    GNUNET_assert (tmit->mod->value_size < UINT32_MAX);
-    *full_value_size = tmit->mod->value_size;
-    *oper = tmit->mod->oper;
-    name_size = strlen (tmit->mod->name) + 1;
-
-    if (name_size + tmit->mod->value_size <= *data_size)
-    {
-      value_size = tmit->mod->value_size;
-      *data_size = name_size + value_size;
-    }
-    else /* full modifier does not fit in data, continuation needed */
-    {
-      value_size = *data_size - name_size;
-      tmit->mod_value = tmit->mod->value + value_size;
-    }
-
-    GNUNET_memcpy (data, tmit->mod->name, name_size);
-    GNUNET_memcpy ((char *)data + name_size, tmit->mod->value, value_size);
-    return GNUNET_NO;
-  }
-  else
-  { /* Modifier continuation */
-    GNUNET_assert (NULL != tmit->mod_value && 0 < tmit->mod_value_remaining);
-    value = tmit->mod_value;
-    if (tmit->mod_value_remaining <= *data_size)
-    {
-      value_size = tmit->mod_value_remaining;
-      tmit->mod_value = NULL;
-    }
-    else
-    {
-      value_size = *data_size;
-      tmit->mod_value += value_size;
-    }
-
-    if (*data_size < value_size)
-    {
-      LOG (GNUNET_ERROR_TYPE_DEBUG,
-           "Value in environment larger than buffer: %u < %zu\n",
-           *data_size, value_size);
-      *data_size = 0;
-      return GNUNET_NO;
-    }
-
-    *data_size = value_size;
-    GNUNET_memcpy (data, value, value_size);
-    return (NULL == tmit->mod_value) ? GNUNET_YES : GNUNET_NO;
-  }
-}
-
-
-/**
- * Transmit a message.
- *
- * @param tmit
- *        Transmission handle.
- * @param method_name
- *        Which method should be invoked.
- * @param env
- *        Environment for the message.
- *        Should stay available until the first call to notify_data.
- *        Can be NULL if there are no modifiers or @a notify_mod is
- *        provided instead.
- * @param notify_mod
- *        Function to call to obtain modifiers.
- *        Can be NULL if there are no modifiers or @a env is provided instead.
- * @param notify_data
- *        Function to call to obtain fragments of the data.
- * @param notify_cls
- *        Closure for @a notify_mod and @a notify_data.
- * @param flags
- *        Flags for the message being transmitted.
- *
- * @return #GNUNET_OK if the transmission was started.
- *         #GNUNET_SYSERR if another transmission is already going on.
- */
-int
-GNUNET_PSYC_transmit_message (struct GNUNET_PSYC_TransmitHandle *tmit,
-                              const char *method_name,
-                              const struct GNUNET_PSYC_Environment *env,
-                              GNUNET_PSYC_TransmitNotifyModifier notify_mod,
-                              GNUNET_PSYC_TransmitNotifyData notify_data,
-                              void *notify_cls,
-                              uint32_t flags)
-{
-  if (GNUNET_NO != tmit->in_transmit)
-    return GNUNET_SYSERR;
-  tmit->in_transmit = GNUNET_YES;
-
-  size_t size = strlen (method_name) + 1;
-  struct GNUNET_PSYC_MessageMethod *pmeth;
-
-  tmit->env = GNUNET_MQ_msg_extra (tmit->msg,
-                                   GNUNET_MULTICAST_FRAGMENT_MAX_PAYLOAD,
-                                   GNUNET_MESSAGE_TYPE_PSYC_MESSAGE);
-  /* store current message size in host byte order
-   * then later switch it to network byte order before sending */
-  tmit->msg->size = sizeof (*tmit->msg) + sizeof (*pmeth) + size;
-
-  if (NULL != notify_mod)
-  {
-    tmit->notify_mod = notify_mod;
-    tmit->notify_mod_cls = notify_cls;
-  }
-  else
-  {
-    tmit->notify_mod = &transmit_notify_env;
-    tmit->notify_mod_cls = tmit;
-    if (NULL != env)
-    {
-      struct GNUNET_PSYC_Modifier mod = {};
-      mod.next = GNUNET_PSYC_env_head (env);
-      tmit->mod = &mod;
-
-      struct GNUNET_PSYC_Modifier *m = tmit->mod;
-      while (NULL != (m = m->next))
-      {
-        if (m->oper != GNUNET_PSYC_OP_SET)
-          flags |= GNUNET_PSYC_MASTER_TRANSMIT_STATE_MODIFY;
-      }
-    }
-    else
-    {
-      tmit->mod = NULL;
-    }
-  }
-
-  pmeth = (struct GNUNET_PSYC_MessageMethod *) &tmit->msg[1];
-  pmeth->header.type = htons (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_METHOD);
-  pmeth->header.size = htons (sizeof (*pmeth) + size);
-  pmeth->flags = htonl (flags);
-  GNUNET_memcpy (&pmeth[1], method_name, size);
-
-  tmit->state = GNUNET_PSYC_MESSAGE_STATE_MODIFIER;
-  tmit->notify_data = notify_data;
-  tmit->notify_data_cls = notify_cls;
-
-  transmit_mod (tmit);
-  return GNUNET_OK;
-}
-
-
-/**
- * Resume transmission.
- *
- * @param tmit  Transmission handle.
- */
-void
-GNUNET_PSYC_transmit_resume (struct GNUNET_PSYC_TransmitHandle *tmit)
-{
-  if (GNUNET_YES != tmit->in_transmit || GNUNET_NO != tmit->in_notify)
-    return;
-
-  if (0 == tmit->acks_pending)
-  {
-    tmit->paused = GNUNET_NO;
-    transmit_data (tmit);
-  }
-}
-
-
-/**
- * Abort transmission request.
- *
- * @param tmit  Transmission handle.
- */
-void
-GNUNET_PSYC_transmit_cancel (struct GNUNET_PSYC_TransmitHandle *tmit)
-{
-  if (GNUNET_NO == tmit->in_transmit)
-    return;
-
-  tmit->state = GNUNET_PSYC_MESSAGE_STATE_CANCEL;
-  tmit->in_transmit = GNUNET_NO;
-  tmit->paused = GNUNET_NO;
-
-  /* FIXME */
-  struct GNUNET_MessageHeader msg;
-  msg.type = htons (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_CANCEL);
-  msg.size = htons (sizeof (msg));
-  transmit_queue_insert (tmit, &msg, GNUNET_YES);
-}
-
-
-/**
- * Got acknowledgement of a transmitted message part, continue transmission.
- *
- * @param tmit  Transmission handle.
- */
-void
-GNUNET_PSYC_transmit_got_ack (struct GNUNET_PSYC_TransmitHandle *tmit)
-{
-  if (0 == tmit->acks_pending)
-  {
-    LOG (GNUNET_ERROR_TYPE_WARNING, "Ignoring extraneous message ACK\n");
-    GNUNET_break (0);
-    return;
-  }
-  tmit->acks_pending--;
-
-  if (GNUNET_YES == tmit->paused)
-    return;
-
-  switch (tmit->state)
-  {
-  case GNUNET_PSYC_MESSAGE_STATE_MODIFIER:
-  case GNUNET_PSYC_MESSAGE_STATE_MOD_CONT:
-    transmit_mod (tmit);
-    break;
-
-  case GNUNET_PSYC_MESSAGE_STATE_DATA:
-    transmit_data (tmit);
-    break;
-
-  case GNUNET_PSYC_MESSAGE_STATE_END:
-  case GNUNET_PSYC_MESSAGE_STATE_CANCEL:
-    break;
-
-  default:
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "Ignoring message ACK in state %u.\n", tmit->state);
-  }
-}
-
-
-/**** Receiving messages ****/
-
-
-/**
- * Create handle for receiving messages.
- */
-struct GNUNET_PSYC_ReceiveHandle *
-GNUNET_PSYC_receive_create (GNUNET_PSYC_MessageCallback message_cb,
-                            GNUNET_PSYC_MessagePartCallback message_part_cb,
-                            void *cb_cls)
-{
-  struct GNUNET_PSYC_ReceiveHandle *recv = GNUNET_malloc (sizeof (*recv));
-  recv->message_cb = message_cb;
-  recv->message_part_cb = message_part_cb;
-  recv->cb_cls = cb_cls;
-  return recv;
-}
-
-
-/**
- * Destroy handle for receiving messages.
- */
-void
-GNUNET_PSYC_receive_destroy (struct GNUNET_PSYC_ReceiveHandle *recv)
-{
-  GNUNET_free (recv);
-}
-
-
-/**
- * Reset stored data related to the last received message.
- */
-void
-GNUNET_PSYC_receive_reset (struct GNUNET_PSYC_ReceiveHandle *recv)
-{
-  recv->state = GNUNET_PSYC_MESSAGE_STATE_START;
-  recv->flags = 0;
-  recv->message_id = 0;
-  recv->mod_value_size = 0;
-  recv->mod_value_size_expected = 0;
-}
-
-
-static void
-recv_error (struct GNUNET_PSYC_ReceiveHandle *recv)
-{
-  if (NULL != recv->message_part_cb)
-    recv->message_part_cb (recv->cb_cls, NULL, NULL);
-
-  if (NULL != recv->message_cb)
-    recv->message_cb (recv->cb_cls, NULL);
-
-  GNUNET_PSYC_receive_reset (recv);
-}
-
-
-/**
- * Handle incoming PSYC message.
- *
- * @param recv  Receive handle.
- * @param msg   The message.
- *
- * @return #GNUNET_OK on success,
- *         #GNUNET_SYSERR on receive error.
- */
-int
-GNUNET_PSYC_receive_message (struct GNUNET_PSYC_ReceiveHandle *recv,
-                             const struct GNUNET_PSYC_MessageHeader *msg)
-{
-  uint16_t size = ntohs (msg->header.size);
-  uint32_t flags = ntohl (msg->flags);
-
-  GNUNET_PSYC_log_message (GNUNET_ERROR_TYPE_DEBUG,
-                           (struct GNUNET_MessageHeader *) msg);
-
-  if (GNUNET_PSYC_MESSAGE_STATE_START == recv->state)
-  {
-    recv->message_id = GNUNET_ntohll (msg->message_id);
-    recv->flags = flags;
-    recv->slave_pub_key = msg->slave_pub_key;
-    recv->mod_value_size = 0;
-    recv->mod_value_size_expected = 0;
-  }
-  else if (GNUNET_ntohll (msg->message_id) != recv->message_id)
-  {
-    // FIXME
-    LOG (GNUNET_ERROR_TYPE_WARNING,
-         "Unexpected message ID. Got: %" PRIu64 ", expected: %" PRIu64 "\n",
-         GNUNET_ntohll (msg->message_id), recv->message_id);
-    GNUNET_break_op (0);
-    recv_error (recv);
-    return GNUNET_SYSERR;
-  }
-  else if (flags != recv->flags)
-  {
-    LOG (GNUNET_ERROR_TYPE_WARNING,
-         "Unexpected message flags. Got: %lu, expected: %lu\n",
-         flags, recv->flags);
-    GNUNET_break_op (0);
-    recv_error (recv);
-    return GNUNET_SYSERR;
-  }
-
-  uint16_t pos = 0, psize = 0, ptype, size_eq, size_min;
-
-  for (pos = 0; sizeof (*msg) + pos < size; pos += psize)
-  {
-    const struct GNUNET_MessageHeader *pmsg
-      = (const struct GNUNET_MessageHeader *) ((char *) &msg[1] + pos);
-    psize = ntohs (pmsg->size);
-    ptype = ntohs (pmsg->type);
-    size_eq = size_min = 0;
-
-    if (psize < sizeof (*pmsg) || sizeof (*msg) + pos + psize > size)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-                  "Dropping message of type %u with invalid size %u.\n",
-                  ptype, psize);
-      recv_error (recv);
-      return GNUNET_SYSERR;
-    }
-
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "Received message part of type %u and size %u from PSYC.\n",
-                ptype, psize);
-    GNUNET_PSYC_log_message (GNUNET_ERROR_TYPE_DEBUG, pmsg);
-
-    switch (ptype)
-    {
-    case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_METHOD:
-      size_min = sizeof (struct GNUNET_PSYC_MessageMethod);
-      break;
-    case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MODIFIER:
-      size_min = sizeof (struct GNUNET_PSYC_MessageModifier);
-      break;
-    case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MOD_CONT:
-    case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_DATA:
-      size_min = sizeof (struct GNUNET_MessageHeader);
-      break;
-    case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_END:
-    case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_CANCEL:
-      size_eq = sizeof (struct GNUNET_MessageHeader);
-      break;
-    default:
-      GNUNET_break_op (0);
-      recv_error (recv);
-      return GNUNET_SYSERR;
-    }
-
-    if (! ((0 < size_eq && psize == size_eq)
-           || (0 < size_min && size_min <= psize)))
-    {
-      GNUNET_break_op (0);
-      recv_error (recv);
-      return GNUNET_SYSERR;
-    }
-
-    switch (ptype)
-    {
-    case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_METHOD:
-    {
-      struct GNUNET_PSYC_MessageMethod *meth
-        = (struct GNUNET_PSYC_MessageMethod *) pmsg;
-
-      if (GNUNET_PSYC_MESSAGE_STATE_START != recv->state)
-      {
-        LOG (GNUNET_ERROR_TYPE_WARNING,
-             "Dropping out of order message method (%u).\n",
-             recv->state);
-        /* It is normal to receive an incomplete message right after connecting,
-         * but should not happen later.
-         * FIXME: add a check for this condition.
-         */
-        GNUNET_break_op (0);
-        recv_error (recv);
-        return GNUNET_SYSERR;
-      }
-
-      if ('\0' != *((char *) meth + psize - 1))
-      {
-        LOG (GNUNET_ERROR_TYPE_WARNING,
-             "Dropping message with malformed method. "
-             "Message ID: %" PRIu64 "\n", recv->message_id);
-        GNUNET_break_op (0);
-        recv_error (recv);
-        return GNUNET_SYSERR;
-      }
-      recv->state = GNUNET_PSYC_MESSAGE_STATE_METHOD;
-      break;
-    }
-    case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MODIFIER:
-    {
-      if (!(GNUNET_PSYC_MESSAGE_STATE_METHOD == recv->state
-            || GNUNET_PSYC_MESSAGE_STATE_MODIFIER == recv->state
-            || GNUNET_PSYC_MESSAGE_STATE_MOD_CONT == recv->state))
-      {
-        LOG (GNUNET_ERROR_TYPE_WARNING,
-             "Dropping out of order message modifier (%u).\n",
-             recv->state);
-        GNUNET_break_op (0);
-        recv_error (recv);
-        return GNUNET_SYSERR;
-      }
-
-      struct GNUNET_PSYC_MessageModifier *mod
-        = (struct GNUNET_PSYC_MessageModifier *) pmsg;
-
-      uint16_t name_size = ntohs (mod->name_size);
-      recv->mod_value_size_expected = ntohl (mod->value_size);
-      recv->mod_value_size = psize - sizeof (*mod) - name_size;
-
-      if (psize < sizeof (*mod) + name_size
-          || '\0' != *((char *) &mod[1] + name_size - 1)
-          || recv->mod_value_size_expected < recv->mod_value_size)
-      {
-        LOG (GNUNET_ERROR_TYPE_WARNING, "Dropping malformed modifier.\n");
-        GNUNET_break_op (0);
-        recv_error (recv);
-        return GNUNET_SYSERR;
-      }
-      recv->state = GNUNET_PSYC_MESSAGE_STATE_MODIFIER;
-      break;
-    }
-    case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MOD_CONT:
-    {
-      recv->mod_value_size += psize - sizeof (*pmsg);
-
-      if (!(GNUNET_PSYC_MESSAGE_STATE_MODIFIER == recv->state
-            || GNUNET_PSYC_MESSAGE_STATE_MOD_CONT == recv->state)
-          || recv->mod_value_size_expected < recv->mod_value_size)
-      {
-        LOG (GNUNET_ERROR_TYPE_WARNING,
-             "Dropping out of order message modifier continuation "
-             "!(%u == %u || %u == %u) || %lu < %lu.\n",
-             GNUNET_PSYC_MESSAGE_STATE_MODIFIER, recv->state,
-             GNUNET_PSYC_MESSAGE_STATE_MOD_CONT, recv->state,
-             recv->mod_value_size_expected, recv->mod_value_size);
-        GNUNET_break_op (0);
-        recv_error (recv);
-        return GNUNET_SYSERR;
-      }
-      break;
-    }
-    case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_DATA:
-    {
-      if (recv->state < GNUNET_PSYC_MESSAGE_STATE_METHOD
-          || recv->mod_value_size_expected != recv->mod_value_size)
-      {
-        LOG (GNUNET_ERROR_TYPE_WARNING,
-             "Dropping out of order message data fragment "
-             "(%u < %u || %lu != %lu).\n",
-             recv->state, GNUNET_PSYC_MESSAGE_STATE_METHOD,
-             recv->mod_value_size_expected, recv->mod_value_size);
-
-        GNUNET_break_op (0);
-        recv_error (recv);
-        return GNUNET_SYSERR;
-      }
-      recv->state = GNUNET_PSYC_MESSAGE_STATE_DATA;
-      break;
-    }
-    }
-
-    if (NULL != recv->message_part_cb)
-      recv->message_part_cb (recv->cb_cls, msg, pmsg);
-
-    switch (ptype)
-    {
-    case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_END:
-    case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_CANCEL:
-      GNUNET_PSYC_receive_reset (recv);
-      break;
-    }
-  }
-
-  if (NULL != recv->message_cb)
-    recv->message_cb (recv->cb_cls, msg);
-  return GNUNET_OK;
-}
-
-
-/**
- * Check if @a data contains a series of valid message parts.
- *
- * @param      data_size    Size of @a data.
- * @param      data        Data.
- * @param[out] first_ptype  Type of first message part.
- * @param[out] last_ptype   Type of last message part.
- *
- * @return Number of message parts found in @a data.
- *         or GNUNET_SYSERR if the message contains invalid parts.
- */
-int
-GNUNET_PSYC_receive_check_parts (uint16_t data_size, const char *data,
-                                 uint16_t *first_ptype, uint16_t *last_ptype)
-{
-  const struct GNUNET_MessageHeader *pmsg;
-  uint16_t parts = 0, ptype = 0, psize = 0, pos = 0;
-  if (NULL != first_ptype)
-    *first_ptype = 0;
-  if (NULL != last_ptype)
-    *last_ptype = 0;
-
-  for (pos = 0; pos < data_size; pos += psize, parts++)
-  {
-    pmsg = (const struct GNUNET_MessageHeader *) (data + pos);
-    GNUNET_PSYC_log_message (GNUNET_ERROR_TYPE_DEBUG, pmsg);
-    psize = ntohs (pmsg->size);
-    ptype = ntohs (pmsg->type);
-    if (0 == parts && NULL != first_ptype)
-      *first_ptype = ptype;
-    if (NULL != last_ptype
-        && *last_ptype < GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_END)
-      *last_ptype = ptype;
-    if (psize < sizeof (*pmsg)
-        || pos + psize > data_size
-        || ptype < GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_METHOD
-        || GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_CANCEL < ptype)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-                  "Invalid message part of type %u and size %u.\n",
-                  ptype, psize);
-      return GNUNET_SYSERR;
-    }
-    /** @todo FIXME: check message part order */
-  }
-  return parts;
-}
-
-
-struct ParseMessageClosure
-{
-  struct GNUNET_PSYC_Environment *env;
-  const char **method_name;
-  const void **data;
-  uint16_t *data_size;
-  enum GNUNET_PSYC_MessageState msg_state;
-};
-
-
-static void
-parse_message_part_cb (void *cls,
-                       const struct GNUNET_PSYC_MessageHeader *msg,
-                       const struct GNUNET_MessageHeader *pmsg)
-{
-  struct ParseMessageClosure *pmc = cls;
-  if (NULL == pmsg)
-  {
-    pmc->msg_state = GNUNET_PSYC_MESSAGE_STATE_ERROR;
-    return;
-  }
-
-  switch (ntohs (pmsg->type))
-  {
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_METHOD:
-  {
-    struct GNUNET_PSYC_MessageMethod *
-      pmeth = (struct GNUNET_PSYC_MessageMethod *) pmsg;
-    *pmc->method_name = (const char *) &pmeth[1];
-    pmc->msg_state = GNUNET_PSYC_MESSAGE_STATE_METHOD;
-    break;
-  }
-
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MODIFIER:
-  {
-    struct GNUNET_PSYC_MessageModifier *
-      pmod = (struct GNUNET_PSYC_MessageModifier *) pmsg;
-
-    const char *name = (const char *) &pmod[1];
-    const void *value = name + ntohs (pmod->name_size);
-    GNUNET_PSYC_env_add (pmc->env, pmod->oper, name, value,
-                         ntohl (pmod->value_size));
-    pmc->msg_state = GNUNET_PSYC_MESSAGE_STATE_MODIFIER;
-    break;
-  }
-
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_DATA:
-    *pmc->data = &pmsg[1];
-    *pmc->data_size = ntohs (pmsg->size) - sizeof (*pmsg);
-    pmc->msg_state = GNUNET_PSYC_MESSAGE_STATE_DATA;
-    break;
-
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_END:
-    pmc->msg_state = GNUNET_PSYC_MESSAGE_STATE_END;
-    break;
-
-  default:
-    pmc->msg_state = GNUNET_PSYC_MESSAGE_STATE_ERROR;
-  }
-}
-
-
-/**
- * Parse PSYC message.
- *
- * @param msg
- *        The PSYC message to parse.
- * @param[out] method_name
- *        Pointer to the method name inside @a pmsg.
- * @param env
- *        The environment for the message with a list of modifiers.
- * @param[out] data
- *        Pointer to data inside @a msg.
- * @param[out] data_size
- *        Size of @data is written here.
- *
- * @return #GNUNET_OK on success,
- *         #GNUNET_SYSERR on parse error.
- */
-int
-GNUNET_PSYC_message_parse (const struct GNUNET_PSYC_MessageHeader *msg,
-                           const char **method_name,
-                           struct GNUNET_PSYC_Environment *env,
-                           const void **data,
-                           uint16_t *data_size)
-{
-  struct ParseMessageClosure cls;
-  cls.env = env;
-  cls.method_name = method_name;
-  cls.data = data;
-  cls.data_size = data_size;
-
-  struct GNUNET_PSYC_ReceiveHandle *
-    recv = GNUNET_PSYC_receive_create (NULL, parse_message_part_cb, &cls);
-  int ret = GNUNET_PSYC_receive_message (recv, msg);
-  GNUNET_PSYC_receive_destroy (recv);
-
-  if (GNUNET_OK != ret)
-    return GNUNET_SYSERR;
-
-  return (GNUNET_PSYC_MESSAGE_STATE_END == cls.msg_state)
-    ? GNUNET_OK
-    : GNUNET_NO;
-}
-
-
-/**
- * Initialize PSYC message header.
- */
-void
-GNUNET_PSYC_message_header_init (struct GNUNET_PSYC_MessageHeader *pmsg,
-                                 const struct GNUNET_MULTICAST_MessageHeader *mmsg,
-                                 uint32_t flags)
-{
-  uint16_t size = ntohs (mmsg->header.size);
-  uint16_t psize = sizeof (*pmsg) + size - sizeof (*mmsg);
-
-  pmsg->header.size = htons (psize);
-  pmsg->header.type = htons (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE);
-  pmsg->message_id = mmsg->message_id;
-  pmsg->fragment_offset = mmsg->fragment_offset;
-  pmsg->flags = htonl (flags);
-
-  GNUNET_memcpy (&pmsg[1], &mmsg[1], size - sizeof (*mmsg));
-}
-
-
-/**
- * Create a new PSYC message header from a multicast message.
- */
-struct GNUNET_PSYC_MessageHeader *
-GNUNET_PSYC_message_header_create (const struct GNUNET_MULTICAST_MessageHeader *mmsg,
-                                   uint32_t flags)
-{
-  struct GNUNET_PSYC_MessageHeader *pmsg;
-  uint16_t size = ntohs (mmsg->header.size);
-  uint16_t psize = sizeof (*pmsg) + size - sizeof (*mmsg);
-
-  pmsg = GNUNET_malloc (psize);
-  GNUNET_PSYC_message_header_init (pmsg, mmsg, flags);
-  return pmsg;
-}
-
-
-/**
- * Create a new PSYC message header from a PSYC message.
- */
-struct GNUNET_PSYC_MessageHeader *
-GNUNET_PSYC_message_header_create_from_psyc (const struct GNUNET_PSYC_Message *msg)
-{
-  uint16_t msg_size = ntohs (msg->header.size);
-  struct GNUNET_PSYC_MessageHeader *
-    pmsg = GNUNET_malloc (sizeof (*pmsg) + msg_size - sizeof (*msg));
-  pmsg->header.type = htons (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE);
-  pmsg->header.size = htons (sizeof (*pmsg) + msg_size - sizeof (*msg));
-  GNUNET_memcpy (&pmsg[1], &msg[1], msg_size - sizeof (*msg));
-  return pmsg;
-}
diff --git a/src/psycutil/psyc_slicer.c b/src/psycutil/psyc_slicer.c
deleted file mode 100644 (file)
index 9b25d8a..0000000
+++ /dev/null
@@ -1,711 +0,0 @@
-/*
- * This file is part of GNUnet
- * Copyright (C) 2013 GNUnet e.V.
- *
- * GNUnet is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNUnet is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
- */
-
-/**
- * @author Gabor X Toth
- *
- * @file
- * PSYC Slicer API
- */
-
-#include <inttypes.h>
-
-#include "platform.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_psyc_util_lib.h"
-
-#define LOG(kind,...) GNUNET_log_from (kind, "psyc-util-slicer",__VA_ARGS__)
-
-
-/**
- * Handle for a try-and-slice instance.
- */
-struct GNUNET_PSYC_Slicer
-{
-  /**
-   * Method handlers: H(method_name) -> SlicerMethodCallbacks
-   */
-  struct GNUNET_CONTAINER_MultiHashMap *method_handlers;
-
-  /**
-   * Modifier handlers: H(modifier_name) -> SlicerModifierCallbacks
-   */
-  struct GNUNET_CONTAINER_MultiHashMap *modifier_handlers;
-
-  /**
-   * Receive handle for incoming messages.
-   */
-  struct GNUNET_PSYC_ReceiveHandle *recv;
-
-  /**
-   * Currently being processed message.
-   */
-  const struct GNUNET_PSYC_MessageHeader *msg;
-
-  /**
-   * Currently being processed message part.
-   */
-  const struct GNUNET_MessageHeader *pmsg;
-
-  /**
-   * ID of currently being received message.
-   */
-  uint64_t message_id;
-
-  /**
-   * Fragment offset of currently being received message.
-   */
-  uint64_t fragment_offset;
-
-  /**
-   * Flags of currently being received message.
-   */
-  uint32_t flags;
-
-  /**
-   * Method name of currently being received message.
-   */
-  char *method_name;
-
-  /**
-   * Name of currently processed modifier.
-   */
-  char *mod_name;
-
-  /**
-   * Value of currently processed modifier.
-   */
-  char *mod_value;
-
-  /**
-   * Public key of the nym the current message originates from.
-   */
-  struct GNUNET_CRYPTO_EcdsaPublicKey nym_pub_key;
-
-  /**
-   * Size of @a method_name (including terminating \0).
-   */
-  uint16_t method_name_size;
-
-  /**
-   * Size of @a modifier_name (including terminating \0).
-   */
-  uint16_t mod_name_size;
-
-  /**
-   * Size of modifier value fragment.
-   */
-  uint16_t mod_value_size;
-
-  /**
-   * Full size of modifier value.
-   */
-  uint16_t mod_full_value_size;
-
-  /**
-   * Remaining bytes from the value of the current modifier.
-   */
-  uint16_t mod_value_remaining;
-
-  /**
-   * Operator of currently processed modifier.
-   */
-  uint8_t mod_oper;
-};
-
-
-/**
- * Callbacks for a slicer method handler.
- */
-struct SlicerMethodCallbacks
-{
-  GNUNET_PSYC_MessageCallback msg_cb;
-  GNUNET_PSYC_MethodCallback method_cb;
-  GNUNET_PSYC_ModifierCallback modifier_cb;
-  GNUNET_PSYC_DataCallback data_cb;
-  GNUNET_PSYC_EndOfMessageCallback eom_cb;
-  void *cls;
-};
-
-
-struct SlicerMethodRemoveClosure
-{
-  struct GNUNET_PSYC_Slicer *slicer;
-  struct SlicerMethodCallbacks rm_cbs;
-};
-
-
-/**
- * Callbacks for a slicer method handler.
- */
-struct SlicerModifierCallbacks
-{
-  GNUNET_PSYC_ModifierCallback modifier_cb;
-  void *cls;
-};
-
-
-struct SlicerModifierRemoveClosure
-{
-  struct GNUNET_PSYC_Slicer *slicer;
-  struct SlicerModifierCallbacks rm_cbs;
-};
-
-
-/**
- * Call a method handler for an incoming message part.
- */
-static int
-slicer_method_handler_notify (void *cls, const struct GNUNET_HashCode *key,
-                              void *value)
-{
-  struct GNUNET_PSYC_Slicer *slicer = cls;
-  const struct GNUNET_MessageHeader *pmsg = slicer->pmsg;
-  struct SlicerMethodCallbacks *cbs = value;
-
-  uint16_t ptype = ntohs (pmsg->type);
-  switch (ptype)
-  {
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_METHOD:
-  {
-    if (NULL != cbs->msg_cb)
-      cbs->msg_cb (cbs->cls, slicer->msg);
-    if (NULL == cbs->method_cb)
-      break;
-    struct GNUNET_PSYC_MessageMethod *
-      meth = (struct GNUNET_PSYC_MessageMethod *) pmsg;
-    cbs->method_cb (cbs->cls, slicer->msg, meth, slicer->message_id,
-                    slicer->method_name);
-    break;
-  }
-
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MODIFIER:
-  {
-    if (NULL == cbs->modifier_cb)
-      break;
-    struct GNUNET_PSYC_MessageModifier *
-      mod = (struct GNUNET_PSYC_MessageModifier *) pmsg;
-    cbs->modifier_cb (cbs->cls, slicer->msg, &mod->header, slicer->message_id,
-                      mod->oper, (const char *) &mod[1],
-                      (const void *) &mod[1] + ntohs (mod->name_size),
-                      ntohs (mod->header.size) - sizeof (*mod) - ntohs (mod->name_size),
-                      ntohs (mod->value_size));
-    break;
-  }
-
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MOD_CONT:
-  {
-    if (NULL == cbs->modifier_cb)
-      break;
-    cbs->modifier_cb (cbs->cls, slicer->msg, pmsg, slicer->message_id,
-                      slicer->mod_oper, slicer->mod_name, &pmsg[1],
-                      ntohs (pmsg->size) - sizeof (*pmsg),
-                      slicer->mod_full_value_size);
-    break;
-  }
-
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_DATA:
-  {
-    if (NULL == cbs->data_cb)
-      break;
-    cbs->data_cb (cbs->cls, slicer->msg, pmsg, slicer->message_id,
-                  &pmsg[1], ntohs (pmsg->size) - sizeof (*pmsg));
-    break;
-  }
-
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_END:
-    if (NULL == cbs->eom_cb)
-      break;
-    cbs->eom_cb (cbs->cls, slicer->msg, pmsg, slicer->message_id, GNUNET_NO);
-    break;
-
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_CANCEL:
-    if (NULL == cbs->eom_cb)
-      break;
-    cbs->eom_cb (cbs->cls, slicer->msg, pmsg, slicer->message_id, GNUNET_YES);
-    break;
-  }
-  return GNUNET_YES;
-}
-
-
-/**
- * Call a method handler for an incoming message part.
- */
-static int
-slicer_modifier_handler_notify (void *cls, const struct GNUNET_HashCode *key,
-                                void *value)
-{
-  struct GNUNET_PSYC_Slicer *slicer = cls;
-  struct SlicerModifierCallbacks *cbs = value;
-
-  cbs->modifier_cb (cbs->cls, slicer->msg, slicer->pmsg, slicer->message_id,
-                    slicer->mod_oper, slicer->mod_name, slicer->mod_value,
-                    slicer->mod_value_size, slicer->mod_full_value_size);
-  return GNUNET_YES;
-}
-
-
-/**
- * Process an incoming message and call matching handlers.
- *
- * @param slicer
- *        The slicer to use.
- * @param msg
- *        The message as it arrived from the network.
- */
-void
-GNUNET_PSYC_slicer_message (struct GNUNET_PSYC_Slicer *slicer,
-                            const struct GNUNET_PSYC_MessageHeader *msg)
-{
-  GNUNET_PSYC_receive_message (slicer->recv, msg);
-}
-
-
-/**
- * Process an incoming message part and call matching handlers.
- *
- * @param cls
- *        Closure.
- * @param message_id
- *        ID of the message.
- * @param flags
- *        Flags for the message.
- *        @see enum GNUNET_PSYC_MessageFlags
- * @param msg
- *        The message part. as it arrived from the network.
- */
-void
-GNUNET_PSYC_slicer_message_part (struct GNUNET_PSYC_Slicer *slicer,
-                                 const struct GNUNET_PSYC_MessageHeader *msg,
-                                 const struct GNUNET_MessageHeader *pmsg)
-{
-  slicer->msg = msg;
-  slicer->pmsg = pmsg;
-
-  uint64_t message_id = GNUNET_ntohll (msg->message_id);
-
-  uint16_t ptype = ntohs (pmsg->type);
-  if (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_METHOD == ptype)
-  {
-    struct GNUNET_PSYC_MessageMethod *
-      meth = (struct GNUNET_PSYC_MessageMethod *) pmsg;
-    slicer->method_name_size = ntohs (meth->header.size) - sizeof (*meth);
-    slicer->method_name = GNUNET_malloc (slicer->method_name_size);
-    GNUNET_memcpy (slicer->method_name, &meth[1], slicer->method_name_size);
-     slicer->message_id = message_id;
-  }
-  else
-  {
-    GNUNET_assert (message_id == slicer->message_id);
-  }
-
-  char *nym_str = GNUNET_CRYPTO_ecdsa_public_key_to_string (&msg->slave_pub_key);
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Slicer received message of type %u and size %u, "
-       "with ID %" PRIu64 " and method %s from %s\n",
-       ptype, ntohs (pmsg->size), message_id, slicer->method_name, nym_str);
-  GNUNET_free (nym_str);
-
-  /* try-and-slice modifier */
-
-  switch (ptype)
-  {
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MODIFIER:
-  {
-    struct GNUNET_PSYC_MessageModifier *
-      mod = (struct GNUNET_PSYC_MessageModifier *) pmsg;
-    slicer->mod_oper = mod->oper;
-    slicer->mod_name_size = ntohs (mod->name_size);
-    slicer->mod_name = GNUNET_malloc (slicer->mod_name_size);
-    GNUNET_memcpy (slicer->mod_name, &mod[1], slicer->mod_name_size);
-    slicer->mod_value = (char *) &mod[1] + slicer->mod_name_size;
-    slicer->mod_full_value_size = ntohs (mod->value_size);
-    slicer->mod_value_remaining = slicer->mod_full_value_size;
-    slicer->mod_value_size
-      = ntohs (mod->header.size) - sizeof (*mod) - slicer->mod_name_size;
-    // fall through
-  }
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MOD_CONT:
-    if (ptype == GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MOD_CONT)
-    {
-      slicer->mod_value = (char *) &pmsg[1];
-      slicer->mod_value_size = ntohs (pmsg->size) - sizeof (*pmsg);
-    }
-    slicer->mod_value_remaining -= slicer->mod_value_size;
-    char *name = GNUNET_malloc (slicer->mod_name_size);
-    GNUNET_memcpy (name, slicer->mod_name, slicer->mod_name_size);
-    do
-    {
-      struct GNUNET_HashCode key;
-      uint16_t name_len = strlen (name);
-      GNUNET_CRYPTO_hash (name, name_len, &key);
-      GNUNET_CONTAINER_multihashmap_get_multiple (slicer->modifier_handlers, &key,
-                                                  slicer_modifier_handler_notify,
-                                                  slicer);
-      char *p = strrchr (name, '_');
-      if (NULL == p)
-        break;
-      *p = '\0';
-    } while (1);
-    GNUNET_free (name);
-  }
-
-  /* try-and-slice method */
-
-  char *name = GNUNET_malloc (slicer->method_name_size);
-  GNUNET_memcpy (name, slicer->method_name, slicer->method_name_size);
-  do
-  {
-    struct GNUNET_HashCode key;
-    uint16_t name_len = strlen (name);
-    GNUNET_CRYPTO_hash (name, name_len, &key);
-    GNUNET_CONTAINER_multihashmap_get_multiple (slicer->method_handlers, &key,
-                                                slicer_method_handler_notify,
-                                                slicer);
-    char *p = strrchr (name, '_');
-    if (NULL == p)
-      break;
-    *p = '\0';
-  } while (1);
-  GNUNET_free (name);
-
-  if (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_END <= ptype)
-    GNUNET_free (slicer->method_name);
-
-  if (0 == slicer->mod_value_remaining && NULL != slicer->mod_name)
-  {
-    GNUNET_free (slicer->mod_name);
-    slicer->mod_name = NULL;
-    slicer->mod_name_size = 0;
-    slicer->mod_value_size = 0;
-    slicer->mod_full_value_size = 0;
-    slicer->mod_oper = 0;
-  }
-
-  slicer->msg = NULL;
-  slicer->pmsg = NULL;
-}
-
-
-/**
- * Create a try-and-slice instance.
- *
- * A slicer processes incoming messages and notifies callbacks about matching
- * methods or modifiers encountered.
- *
- * @return A new try-and-slice construct.
- */
-struct GNUNET_PSYC_Slicer *
-GNUNET_PSYC_slicer_create (void)
-{
-  struct GNUNET_PSYC_Slicer *slicer = GNUNET_malloc (sizeof (*slicer));
-  slicer->method_handlers = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_NO);
-  slicer->modifier_handlers = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_NO);
-  slicer->recv = GNUNET_PSYC_receive_create (NULL,
-                                             (GNUNET_PSYC_MessagePartCallback)
-                                             GNUNET_PSYC_slicer_message_part,
-                                             slicer);
-  return slicer;
-}
-
-
-/**
- * Add a method to the try-and-slice instance.
- *
- * The callbacks are called for messages with a matching @a method_name prefix.
- *
- * @param slicer
- *        The try-and-slice instance to extend.
- * @param method_name
- *        Name of the given method, use empty string to match all.
- * @param method_cb
- *        Method handler invoked upon a matching message.
- * @param modifier_cb
- *        Modifier handler, invoked after @a method_cb
- *        for each modifier in the message.
- * @param data_cb
- *        Data handler, invoked after @a modifier_cb for each data fragment.
- * @param eom_cb
- *        Invoked upon reaching the end of a matching message.
- * @param cls
- *        Closure for the callbacks.
- */
-void
-GNUNET_PSYC_slicer_method_add (struct GNUNET_PSYC_Slicer *slicer,
-                               const char *method_name,
-                               GNUNET_PSYC_MessageCallback msg_cb,
-                               GNUNET_PSYC_MethodCallback method_cb,
-                               GNUNET_PSYC_ModifierCallback modifier_cb,
-                               GNUNET_PSYC_DataCallback data_cb,
-                               GNUNET_PSYC_EndOfMessageCallback eom_cb,
-                               void *cls)
-{
-  struct GNUNET_HashCode key;
-  GNUNET_CRYPTO_hash (method_name, strlen (method_name), &key);
-
-  struct SlicerMethodCallbacks *cbs = GNUNET_malloc (sizeof (*cbs));
-  cbs->msg_cb = msg_cb,
-  cbs->method_cb = method_cb;
-  cbs->modifier_cb = modifier_cb;
-  cbs->data_cb = data_cb;
-  cbs->eom_cb = eom_cb;
-  cbs->cls = cls;
-
-  GNUNET_CONTAINER_multihashmap_put (slicer->method_handlers, &key, cbs,
-                                     GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
-}
-
-
-static int
-slicer_method_remove (void *cls, const struct GNUNET_HashCode *key, void *value)
-{
-  struct SlicerMethodRemoveClosure *rm_cls = cls;
-  struct GNUNET_PSYC_Slicer *slicer = rm_cls->slicer;
-  struct SlicerMethodCallbacks *rm_cbs = &rm_cls->rm_cbs;
-  struct SlicerMethodCallbacks *cbs = value;
-
-  if ((NULL == rm_cbs->msg_cb || cbs->msg_cb == rm_cbs->msg_cb)
-      && (NULL == rm_cbs->method_cb || cbs->method_cb == rm_cbs->method_cb)
-      && (NULL == rm_cbs->modifier_cb || cbs->modifier_cb == rm_cbs->modifier_cb)
-      && (NULL == rm_cbs->data_cb || cbs->data_cb == rm_cbs->data_cb)
-      && (NULL == rm_cbs->eom_cb || cbs->eom_cb == rm_cbs->eom_cb))
-  {
-    GNUNET_CONTAINER_multihashmap_remove (slicer->method_handlers, key, cbs);
-    GNUNET_free (cbs);
-    return GNUNET_NO;
-  }
-  return GNUNET_YES;
-}
-
-
-/**
- * Remove a registered method from the try-and-slice instance.
- *
- * Removes one matching handler registered with the given
- * @a method_name and  callbacks.
- *
- * @param slicer
- *        The try-and-slice instance.
- * @param method_name
- *        Name of the method to remove.
- * @param method_cb
- *        Method handler.
- * @param modifier_cb
- *        Modifier handler.
- * @param data_cb
- *        Data handler.
- * @param eom_cb
- *        End of message handler.
- *
- * @return #GNUNET_OK if a method handler was removed,
- *         #GNUNET_NO if no handler matched the given method name and callbacks.
- */
-int
-GNUNET_PSYC_slicer_method_remove (struct GNUNET_PSYC_Slicer *slicer,
-                                  const char *method_name,
-                                  GNUNET_PSYC_MessageCallback msg_cb,
-                                  GNUNET_PSYC_MethodCallback method_cb,
-                                  GNUNET_PSYC_ModifierCallback modifier_cb,
-                                  GNUNET_PSYC_DataCallback data_cb,
-                                  GNUNET_PSYC_EndOfMessageCallback eom_cb)
-{
-  struct GNUNET_HashCode key;
-  GNUNET_CRYPTO_hash (method_name, strlen (method_name), &key);
-
-  struct SlicerMethodRemoveClosure rm_cls;
-  rm_cls.slicer = slicer;
-  struct SlicerMethodCallbacks *rm_cbs = &rm_cls.rm_cbs;
-  rm_cbs->msg_cb = msg_cb;
-  rm_cbs->method_cb = method_cb;
-  rm_cbs->modifier_cb = modifier_cb;
-  rm_cbs->data_cb = data_cb;
-  rm_cbs->eom_cb = eom_cb;
-
-  return
-    (GNUNET_SYSERR
-     == GNUNET_CONTAINER_multihashmap_get_multiple (slicer->method_handlers, &key,
-                                                    slicer_method_remove,
-                                                    &rm_cls))
-    ? GNUNET_NO
-    : GNUNET_OK;
-}
-
-
-/**
- * Watch a place for changed objects.
- *
- * @param slicer
- *        The try-and-slice instance.
- * @param object_filter
- *        Object prefix to match.
- * @param modifier_cb
- *        Function to call when encountering a state modifier.
- * @param cls
- *        Closure for callback.
- */
-void
-GNUNET_PSYC_slicer_modifier_add (struct GNUNET_PSYC_Slicer *slicer,
-                                 const char *object_filter,
-                                 GNUNET_PSYC_ModifierCallback modifier_cb,
-                                 void *cls)
-{
-  struct SlicerModifierCallbacks *cbs = GNUNET_malloc (sizeof *cbs);
-  cbs->modifier_cb = modifier_cb;
-  cbs->cls = cls;
-
-  struct GNUNET_HashCode key;
-  GNUNET_CRYPTO_hash (object_filter, strlen (object_filter), &key);
-  GNUNET_CONTAINER_multihashmap_put (slicer->modifier_handlers, &key, cbs,
-                                     GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
-}
-
-
-static int
-slicer_modifier_remove (void *cls, const struct GNUNET_HashCode *key, void *value)
-{
-  struct SlicerModifierRemoveClosure *rm_cls = cls;
-  struct GNUNET_PSYC_Slicer *slicer = rm_cls->slicer;
-  struct SlicerModifierCallbacks *rm_cbs = &rm_cls->rm_cbs;
-  struct SlicerModifierCallbacks *cbs = value;
-
-  if (cbs->modifier_cb == rm_cbs->modifier_cb)
-  {
-    GNUNET_CONTAINER_multihashmap_remove (slicer->modifier_handlers, key, cbs);
-    GNUNET_free (cbs);
-    return GNUNET_NO;
-  }
-  return GNUNET_YES;
-}
-
-
-/**
- * Remove a registered modifier from the try-and-slice instance.
- *
- * Removes one matching handler registered with the given
- * @a object_filter and @a modifier_cb.
- *
- * @param slicer
- *        The try-and-slice instance.
- * @param object_filter
- *        Object prefix to match.
- * @param modifier_cb
- *        Function to call when encountering a state modifier changes.
- */
-int
-GNUNET_PSYC_slicer_modifier_remove (struct GNUNET_PSYC_Slicer *slicer,
-                                    const char *object_filter,
-                                    GNUNET_PSYC_ModifierCallback modifier_cb)
-{
-  struct GNUNET_HashCode key;
-  GNUNET_CRYPTO_hash (object_filter, strlen (object_filter), &key);
-
-  struct SlicerModifierRemoveClosure rm_cls;
-  rm_cls.slicer = slicer;
-  struct SlicerModifierCallbacks *rm_cbs = &rm_cls.rm_cbs;
-  rm_cbs->modifier_cb = modifier_cb;
-
-  return
-    (GNUNET_SYSERR
-     == GNUNET_CONTAINER_multihashmap_get_multiple (slicer->modifier_handlers, &key,
-                                                    slicer_modifier_remove,
-                                                    &rm_cls))
-    ? GNUNET_NO
-    : GNUNET_OK;
- }
-
-
-static int
-slicer_method_free (void *cls, const struct GNUNET_HashCode *key, void *value)
-{
-  struct SlicerMethodCallbacks *cbs = value;
-  GNUNET_free (cbs);
-  return GNUNET_YES;
-}
-
-
-static int
-slicer_modifier_free (void *cls, const struct GNUNET_HashCode *key, void *value)
-{
-  struct SlicerModifierCallbacks *cbs = value;
-  GNUNET_free (cbs);
-  return GNUNET_YES;
-}
-
-
-/**
- * Remove all registered method handlers.
- *
- * @param slicer
- *        Slicer to clear.
- */
-void
-GNUNET_PSYC_slicer_method_clear (struct GNUNET_PSYC_Slicer *slicer)
-{
-  GNUNET_CONTAINER_multihashmap_iterate (slicer->method_handlers,
-                                         slicer_method_free, NULL);
-  GNUNET_CONTAINER_multihashmap_clear (slicer->method_handlers);
-}
-
-
-/**
- * Remove all registered modifier handlers.
- *
- * @param slicer
- *        Slicer to clear.
- */
-void
-GNUNET_PSYC_slicer_modifier_clear (struct GNUNET_PSYC_Slicer *slicer)
-{
-  GNUNET_CONTAINER_multihashmap_iterate (slicer->modifier_handlers,
-                                         slicer_modifier_free, NULL);
-  GNUNET_CONTAINER_multihashmap_clear (slicer->modifier_handlers);
-}
-
-
-/**
- * Remove all registered method & modifier handlers.
- *
- * @param slicer
- *        Slicer to clear.
- */
-void
-GNUNET_PSYC_slicer_clear (struct GNUNET_PSYC_Slicer *slicer)
-{
-  GNUNET_PSYC_slicer_method_clear (slicer);
-  GNUNET_PSYC_slicer_modifier_clear (slicer);
-}
-
-
-/**
- * Destroy a given try-and-slice instance.
- *
- * @param slicer
- *        Slicer to destroy
- */
-void
-GNUNET_PSYC_slicer_destroy (struct GNUNET_PSYC_Slicer *slicer)
-{
-  GNUNET_PSYC_slicer_clear (slicer);
-  GNUNET_CONTAINER_multihashmap_destroy (slicer->method_handlers);
-  GNUNET_CONTAINER_multihashmap_destroy (slicer->modifier_handlers);
-  GNUNET_PSYC_receive_destroy (slicer->recv);
-  GNUNET_free (slicer);
-}
diff --git a/src/psycutil/test_psyc_env.c b/src/psycutil/test_psyc_env.c
deleted file mode 100644 (file)
index 432e155..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * This file is part of GNUnet.
- * Copyright (C) 2013 GNUnet e.V.
- *
- * GNUnet is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNUnet is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
- */
-
-/**
- * @author Gabor X Toth
- *
- * @file
- * Tests for the environment library.
- */
-
-#include "platform.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_testing_lib.h"
-#include "gnunet_psyc_util_lib.h"
-
-struct GNUNET_PSYC_Modifier mods[] = {
-  { .oper = GNUNET_PSYC_OP_SET,
-    .name = "_foo", .value = "foo", .value_size = 3 },
-
-  { .oper = GNUNET_PSYC_OP_ASSIGN,
-    .name = "_foo_bar", .value = "foo bar", .value_size = 7 },
-
-  { .oper = GNUNET_PSYC_OP_AUGMENT,
-    .name = "_foo_bar_baz", .value = "foo bar baz", .value_size = 11 }
-};
-
-struct ItCls
-{
-  size_t n;
-};
-
-int
-iterator (void *cls, enum GNUNET_PSYC_Operator oper,
-          const char *name, const char *value, uint32_t value_size)
-{
-  struct ItCls *it_cls = cls;
-  struct GNUNET_PSYC_Modifier *m = &mods[it_cls->n++];
-
-  GNUNET_assert (oper == m->oper);
-  GNUNET_assert (value_size == m->value_size);
-  GNUNET_assert (0 == memcmp (name, m->name, strlen (m->name)));
-  GNUNET_assert (0 == memcmp (value, m->value, m->value_size));
-
-  return GNUNET_YES;
-}
-
-int
-main (int argc, char *argv[])
-{
-  GNUNET_log_setup ("test-env", "WARNING", NULL);
-
-  struct GNUNET_PSYC_Environment *env = GNUNET_PSYC_env_create ();
-  GNUNET_assert (NULL != env);
-  int i, len = 3;
-
-  for (i = 0; i < len; i++)
-  {
-    GNUNET_PSYC_env_add (env, mods[i].oper, mods[i].name,
-                         mods[i].value, mods[i].value_size);
-  }
-
-  struct ItCls it_cls = { .n = 0 };
-  GNUNET_PSYC_env_iterate (env, iterator, &it_cls);
-  GNUNET_assert (len == it_cls.n);
-
-  for (i = 0; i < len; i++)
-  {
-    enum GNUNET_PSYC_Operator oper;
-    const char *name;
-    const void *value;
-    size_t value_size;
-    GNUNET_PSYC_env_shift (env, &oper, &name, &value, &value_size);
-    GNUNET_assert (len - i - 1 == GNUNET_PSYC_env_get_count (env));
-  }
-
-  GNUNET_PSYC_env_destroy (env);
-
-  return 0;
-}
index f36154ebd4fcbc9e82903024c86d2834dcbb1407..a49ab0ef0ebb9866feeff5b14e47187a5c0279b1 100644 (file)
@@ -67,6 +67,7 @@ libgnunet_plugin_rest_copying_la_LDFLAGS = \
 libgnunet_plugin_rest_peerinfo_la_SOURCES = \
   plugin_rest_peerinfo.c
 libgnunet_plugin_rest_peerinfo_la_LIBADD = \
+  $(top_builddir)/src/hello/libgnunethello.la \
        $(top_builddir)/src/peerinfo/libgnunetpeerinfo.la \
   $(top_builddir)/src/rest/libgnunetrest.la \
   $(top_builddir)/src/json/libgnunetjson.la \
@@ -104,6 +105,7 @@ libgnunet_plugin_rest_namestore_la_LDFLAGS = \
 libgnunet_plugin_rest_gns_la_SOURCES = \
   plugin_rest_gns.c
 libgnunet_plugin_rest_gns_la_LIBADD = \
+  $(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
   $(top_builddir)/src/gns/libgnunetgns.la \
        $(top_builddir)/src/rest/libgnunetrest.la \
   $(top_builddir)/src/identity/libgnunetidentity.la \
index 5fa17076d17e0da1e4a7e2cb3e8b3f837dc7f8fe..e755f079b354e05624da0f00560525051d8d0f8b 100644 (file)
@@ -935,12 +935,24 @@ oidc_ticket_issue_cb (void* cls,
                                             &handle->ticket,
                                             handle->oidc->nonce);
   code_base64_final_string = base64_encode (code_json_string);
-  GNUNET_asprintf (&redirect_uri, "%s.%s/%s?%s=%s&state=%s",
-                   handle->redirect_prefix,
-                   handle->tld,
-                   handle->redirect_suffix,
-                   handle->oidc->response_type,
-                   code_base64_final_string, handle->oidc->state);
+  if ( (NULL != handle->redirect_prefix) &&
+       (NULL != handle->redirect_suffix) &&
+       (NULL != handle->tld) )
+  {
+
+    GNUNET_asprintf (&redirect_uri, "%s.%s/%s?%s=%s&state=%s",
+                     handle->redirect_prefix,
+                     handle->tld,
+                     handle->redirect_suffix,
+                     handle->oidc->response_type,
+                     code_base64_final_string, handle->oidc->state);
+  } else {
+    GNUNET_asprintf (&redirect_uri, "%s?%s=%s&state=%s",
+                     handle->oidc->redirect_uri,
+                     handle->oidc->response_type,
+                     code_base64_final_string, handle->oidc->state);
+
+  }
   resp = GNUNET_REST_create_response ("");
   MHD_add_response_header (resp, "Location", redirect_uri);
   handle->proc (handle->proc_cls, resp, MHD_HTTP_FOUND);
@@ -1095,13 +1107,25 @@ build_redirect (void *cls)
 
   if (GNUNET_YES == handle->oidc->user_cancelled)
   {
-    GNUNET_asprintf (&redirect_uri, "%s.%s/%s?error=%s&error_description=%s&state=%s",
-                     handle->redirect_prefix,
-                     handle->tld,
-                     handle->redirect_suffix,
-                     "access_denied",
-                     "User denied access",
-                     handle->oidc->state);
+    if ( (NULL != handle->redirect_prefix) &&
+         (NULL != handle->redirect_suffix) &&
+         (NULL != handle->tld) )
+    {
+      GNUNET_asprintf (&redirect_uri, "%s.%s/%s?error=%s&error_description=%s&state=%s",
+                       handle->redirect_prefix,
+                       handle->tld,
+                       handle->redirect_suffix,
+                       "access_denied",
+                       "User denied access",
+                       handle->oidc->state);
+    } else {
+      GNUNET_asprintf (&redirect_uri, "%s?error=%s&error_description=%s&state=%s",
+                       handle->oidc->redirect_uri,
+                       "access_denied",
+                       "User denied access",
+                       handle->oidc->state);
+
+    }
     resp = GNUNET_REST_create_response ("");
     MHD_add_response_header (resp, "Location", redirect_uri);
     handle->proc (handle->proc_cls, resp, MHD_HTTP_FOUND);
@@ -1137,25 +1161,35 @@ lookup_redirect_uri_result (void *cls,
     if (GNUNET_GNSRECORD_TYPE_RECLAIM_OIDC_REDIRECT != rd[i].record_type)
       continue;
     if (0 != strncmp (rd[i].data,
-                     handle->oidc->redirect_uri,
-                     rd[i].data_size))
+                      handle->oidc->redirect_uri,
+                      rd[i].data_size))
       continue;
     tmp = GNUNET_strndup (rd[i].data,
                           rd[i].data_size);
-    pos = strrchr (tmp,
-                   (unsigned char) '.');
-    *pos = '\0';
-    handle->redirect_prefix = GNUNET_strdup (tmp);
-    tmp_key_str = pos + 1;
-    pos = strchr (tmp_key_str,
-                  (unsigned char) '/');
-    *pos = '\0';
-    handle->redirect_suffix = GNUNET_strdup (pos + 1);
-
-    GNUNET_STRINGS_string_to_data (tmp_key_str,
-                                   strlen (tmp_key_str),
-                                   &redirect_zone,
-                                   sizeof (redirect_zone));
+    if (NULL == strstr (tmp,
+                        handle->oidc->client_id))
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                  "Redirect uri %s does not contain client_id %s",
+                  tmp,
+                  handle->oidc->client_id);
+    } else {
+
+      pos = strrchr (tmp,
+                     (unsigned char) '.');
+      *pos = '\0';
+      handle->redirect_prefix = GNUNET_strdup (tmp);
+      tmp_key_str = pos + 1;
+      pos = strchr (tmp_key_str,
+                    (unsigned char) '/');
+      *pos = '\0';
+      handle->redirect_suffix = GNUNET_strdup (pos + 1);
+
+      GNUNET_STRINGS_string_to_data (tmp_key_str,
+                                     strlen (tmp_key_str),
+                                     &redirect_zone,
+                                     sizeof (redirect_zone));
+    }
     GNUNET_SCHEDULER_add_now (&build_redirect, handle);
     GNUNET_free (tmp);
     return;
@@ -1300,7 +1334,7 @@ build_authz_response (void *cls)
   {
     handle->emsg = GNUNET_strdup (OIDC_ERROR_KEY_INVALID_SCOPE);
     handle->edesc=GNUNET_strdup ("The requested scope is invalid, unknown, or "
-                                "malformed.");
+                                 "malformed.");
     GNUNET_SCHEDULER_add_now (&do_redirect_error, handle);
     GNUNET_free (expected_scope);
     return;
@@ -1337,7 +1371,7 @@ tld_iter (void *cls,
     return;
   }
   if (0 == memcmp (&pkey, &handle->oidc->client_pkey,
-                    sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey)))
+                   sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey)))
     handle->tld = GNUNET_strdup (option+1);
 }
 
@@ -1431,7 +1465,7 @@ authorize_endpoint (struct GNUNET_REST_RequestHandle *con_handle,
                                                  tld_iter,
                                                  handle);
   if (NULL == handle->tld)
-    handle->tld = GNUNET_strdup (tmp_ego->keystring);
+    handle->tld = GNUNET_strdup (handle->oidc->client_id);
   GNUNET_SCHEDULER_add_now (&build_authz_response, handle);
 }
 
index 212e8e7776c59d98eeae059e14bff09a9613de88..5caa616caebb8b807221176af63028321c468467 100644 (file)
@@ -19,6 +19,7 @@
 #
 # Testcase for ego revocation
 from __future__ import print_function
+from builtins import str
 import sys
 import os
 import subprocess
index 36a167203978d9fdc532dd9bf776e04b5d9b5c3b..98fc8dccb2405030cf46c8905c1324e60d814f37 100644 (file)
@@ -1574,7 +1574,7 @@ static void mal_init_peer (struct RPSPeer *rps_peer)
 static void
 mal_pre (struct RPSPeer *rps_peer, struct GNUNET_RPS_Handle *h)
 {
-  #ifdef ENABLE_MALICIOUS
+  #if ENABLE_MALICIOUS
   uint32_t num_mal_peers;
 
   GNUNET_assert ( (1 >= portion) &&
@@ -1605,7 +1605,7 @@ mal_cb (struct RPSPeer *rps_peer)
     return;
   }
 
-  #ifdef ENABLE_MALICIOUS
+  #if ENABLE_MALICIOUS
   GNUNET_assert ( (1 >= portion) &&
                   (0 <  portion) );
   num_mal_peers = round (portion * num_peers);
@@ -2636,9 +2636,11 @@ stat_iterator (void *cls,
   (void) subsystem;
   (void) is_persistent;
 
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Got stat value: %s - %" PRIu64 "\n",
-      name,
-      value);
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+              "Got stat value: %s - %" PRIu64 " (%u)\n",
+              name,
+              value,
+              rps_peer->index);
   to_file (rps_peer->file_name_stats,
           "%s: %" PRIu64 "\n",
           name,
@@ -2650,7 +2652,9 @@ stat_iterator (void *cls,
   return GNUNET_OK;
 }
 
-void post_profiler (struct RPSPeer *rps_peer)
+
+void
+post_profiler (struct RPSPeer *rps_peer)
 {
   if (COLLECT_STATISTICS != cur_test_run.have_collect_statistics)
   {
index 08f2450f56399bcd5a17d22b7569033b0fefa019..05d5c91c31ee3cae05e7a10a9fa4fb4a25a4b3ee 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -261,7 +261,7 @@ struct ChannelCtx
 };
 
 
-#ifdef ENABLE_MALICIOUS
+#if ENABLE_MALICIOUS
 
 /**
  * If type is 2 This struct is used to store the attacked peers in a DLL
@@ -492,7 +492,7 @@ static struct GNUNET_PEERINFO_Handle *peerinfo_handle;
 static struct GNUNET_PEERINFO_NotifyContext *peerinfo_notify_handle;
 
 
-#ifdef ENABLE_MALICIOUS
+#if ENABLE_MALICIOUS
 /**
  * Type of malicious peer
  *
@@ -1379,6 +1379,7 @@ mq_notify_sent_cb (void *cls)
     if (0 == strncmp ("PUSH", pending_msg->type, 4))
       GNUNET_STATISTICS_update(stats, "# pushes sent", 1, GNUNET_NO);
     if (0 == strncmp ("PULL REQUEST", pending_msg->type, 12) &&
+                      NULL != map_single_hop &&
         GNUNET_NO == GNUNET_CONTAINER_multipeermap_contains (map_single_hop,
           &pending_msg->peer_ctx->peer_id))
       GNUNET_STATISTICS_update(stats,
@@ -2576,7 +2577,7 @@ insert_in_sampler (void *cls,
      * messages to it */
     //indicate_sending_intention (peer);
   }
-  #ifdef TO_FILE
+#ifdef TO_FILE
   sub->num_observed_peers++;
   GNUNET_CONTAINER_multipeermap_put
     (sub->observed_unique_peers,
@@ -2590,7 +2591,7 @@ insert_in_sampler (void *cls,
           sub->num_observed_peers,
           num_observed_unique_peers,
           1.0*num_observed_unique_peers/sub->num_observed_peers)
-  #endif /* TO_FILE */
+#endif /* TO_FILE */
 }
 
 
@@ -2675,11 +2676,23 @@ static void
 remove_peer (struct Sub *sub,
              const struct GNUNET_PeerIdentity *peer)
 {
-  (void) View_remove_peer (sub->view, peer);
-  CustomPeerMap_remove_peer (sub->pull_map, peer);
-  CustomPeerMap_remove_peer (sub->push_map, peer);
-  RPS_sampler_reinitialise_by_value (sub->sampler, peer);
-  destroy_peer (get_peer_ctx (sub->peer_map, peer));
+  (void) View_remove_peer (sub->view,
+                           peer);
+  CustomPeerMap_remove_peer (sub->pull_map,
+                             peer);
+  CustomPeerMap_remove_peer (sub->push_map,
+                             peer);
+  RPS_sampler_reinitialise_by_value (sub->sampler,
+                                     peer);
+  /* We want to destroy the peer now.
+   * Sometimes, it just seems that it's already been removed from the peer_map,
+   * so check the peer_map first. */
+  if (GNUNET_YES == check_peer_known (sub->peer_map,
+                                      peer))
+  {
+          destroy_peer (get_peer_ctx (sub->peer_map,
+                                      peer));
+  }
 }
 
 
@@ -2701,15 +2714,19 @@ clean_peer (struct Sub *sub,
     LOG (GNUNET_ERROR_TYPE_DEBUG,
         "Going to remove send channel to peer %s\n",
         GNUNET_i2s (peer));
-    #ifdef ENABLE_MALICIOUS
-    if (0 != GNUNET_CRYPTO_cmp_peer_identity (&attacked_peer, peer))
-      (void) destroy_sending_channel (get_peer_ctx (sub->peer_map, peer));
+    #if ENABLE_MALICIOUS
+    if (0 != GNUNET_CRYPTO_cmp_peer_identity (&attacked_peer,
+                                              peer))
+      (void) destroy_sending_channel (get_peer_ctx (sub->peer_map,
+                                                    peer));
     #else /* ENABLE_MALICIOUS */
-    (void) destroy_sending_channel (get_peer_ctx (sub->peer_map, peer));
+    (void) destroy_sending_channel (get_peer_ctx (sub->peer_map,
+                                                  peer));
     #endif /* ENABLE_MALICIOUS */
   }
 
-  if (GNUNET_NO == GNUNET_CONTAINER_multipeermap_contains (sub->peer_map, peer))
+  if (GNUNET_NO == GNUNET_CONTAINER_multipeermap_contains (sub->peer_map,
+                                                           peer))
   {
     /* Peer was already removed by callback on destroyed channel */
     LOG (GNUNET_ERROR_TYPE_WARNING,
@@ -2846,19 +2863,15 @@ new_sub (const struct GNUNET_HashCode *hash,
   {
     char *tmp_filename_valid_peers;
     char str_hash[105];
-    uint32_t len_filename_valid_peers;
-
-    (void) GNUNET_snprintf (str_hash, 105, GNUNET_h2s_full (hash));
-    tmp_filename_valid_peers = GNUNET_strdup (sub->filename_valid_peers);
-    GNUNET_free (sub->filename_valid_peers);
-    len_filename_valid_peers = strlen (tmp_filename_valid_peers) + 105; /* Len of full hash + 1 */
-    sub->filename_valid_peers = GNUNET_malloc (len_filename_valid_peers);
-    strncat (sub->filename_valid_peers,
-             tmp_filename_valid_peers,
-             len_filename_valid_peers);
-    strncat (sub->filename_valid_peers,
-             str_hash,
-             len_filename_valid_peers);
+
+    GNUNET_snprintf (str_hash,
+                    sizeof (str_hash),
+                    GNUNET_h2s_full (hash));
+    tmp_filename_valid_peers = sub->filename_valid_peers;
+    GNUNET_asprintf (&sub->filename_valid_peers,
+                    "%s%s",
+                    tmp_filename_valid_peers,
+                    str_hash);
     GNUNET_free (tmp_filename_valid_peers);
   }
   sub->peer_map = GNUNET_CONTAINER_multipeermap_create (4, GNUNET_NO);
@@ -2874,7 +2887,7 @@ new_sub (const struct GNUNET_HashCode *hash,
 
   /* Logging of internals */
   sub->file_name_view_log = store_prefix_file_name (&own_identity, "view");
-  #ifdef TO_FILE
+#ifdef TO_FILE
   sub->file_name_observed_log = store_prefix_file_name (&own_identity,
                                                        "observed");
   sub->file_name_push_recv = store_prefix_file_name (&own_identity,
@@ -2884,7 +2897,7 @@ new_sub (const struct GNUNET_HashCode *hash,
   sub->num_observed_peers = 0;
   sub->observed_unique_peers = GNUNET_CONTAINER_multipeermap_create (1,
                                                                     GNUNET_NO);
-  #endif /* TO_FILE */
+#endif /* TO_FILE */
 
   /* Set up data structures for gossip */
   sub->push_map = CustomPeerMap_create (4);
@@ -2915,8 +2928,10 @@ static void
 destroy_sub (struct Sub *sub)
 {
 #ifdef TO_FILE
-  char push_recv_str[1536] = ""; /* 256 * 6 (1 whitespace, 1 comma, up to 4 chars) */
-  char pull_delays_str[1536] = ""; /* 256 * 6 (1 whitespace, 1 comma, up to 4 chars) */
+#define SIZE_DUMP_FILE 1536 /* 256 * 6 (1 whitespace, 1 comma, up to 4 chars) */
+  char push_recv_str[SIZE_DUMP_FILE + 1] = "";
+  char pull_delays_str[SIZE_DUMP_FILE + 1] = "";
+  char *recv_str_iter;
 #endif /* TO_FILE */
   GNUNET_assert (NULL != sub);
   GNUNET_assert (NULL != sub->do_round_task);
@@ -2945,36 +2960,49 @@ destroy_sub (struct Sub *sub)
   sub->file_name_observed_log = NULL;
 
   /* Write push frequencies to disk */
+  recv_str_iter = push_recv_str;
   for (uint32_t i = 0; i < 256; i++)
   {
     char push_recv_str_tmp[8];
-    (void) snprintf (push_recv_str_tmp, 8, "%" PRIu32 "\n", sub->push_recv[i]);
-    (void) strncat (push_recv_str,
-                    push_recv_str_tmp,
-                    1535 - strnlen (push_recv_str, 1536));
-  }
-  (void) strncat (push_recv_str,
-                  "\n",
-                  1535 - strnlen (push_recv_str, 1536));
-  LOG (GNUNET_ERROR_TYPE_DEBUG, "Writing push stats to disk\n");
-  to_file_w_len (sub->file_name_push_recv, 1535, push_recv_str);
+
+    GNUNET_snprintf (push_recv_str_tmp,
+                    sizeof (push_recv_str_tmp),
+                    "%" PRIu32 "\n",
+                    sub->push_recv[i]);
+    recv_str_iter = stpncpy (recv_str_iter,
+                             push_recv_str_tmp,
+                             6);
+  }
+  (void) stpcpy (recv_str_iter,
+                 "\n");
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "Writing push stats to disk\n");
+  to_file_w_len (sub->file_name_push_recv,
+                 SIZE_DUMP_FILE,
+                 push_recv_str);
   GNUNET_free (sub->file_name_push_recv);
   sub->file_name_push_recv = NULL;
 
   /* Write pull delays to disk */
+  recv_str_iter = pull_delays_str;
   for (uint32_t i = 0; i < 256; i++)
   {
     char pull_delays_str_tmp[8];
-    (void) snprintf (pull_delays_str_tmp, 8, "%" PRIu32 "\n", sub->pull_delays[i]);
-    (void) strncat (pull_delays_str,
-                    pull_delays_str_tmp,
-                    1535 - strnlen (pull_delays_str, 1536));
-  }
-  (void) strncat (pull_delays_str,
-                  "\n",
-                  1535 - strnlen (pull_delays_str, 1536));
+
+    GNUNET_snprintf (pull_delays_str_tmp,
+                    sizeof (pull_delays_str_tmp),
+                    "%" PRIu32 "\n",
+                    sub->pull_delays[i]);
+    recv_str_iter = stpncpy (recv_str_iter,
+                             pull_delays_str_tmp,
+                             6);
+  }
+  (void) stpcpy (recv_str_iter,
+                 "\n");
   LOG (GNUNET_ERROR_TYPE_DEBUG, "Writing pull delays to disk\n");
-  to_file_w_len (sub->file_name_pull_delays, 1535, pull_delays_str);
+  to_file_w_len (sub->file_name_pull_delays,
+                 SIZE_DUMP_FILE,
+                 pull_delays_str);
   GNUNET_free (sub->file_name_pull_delays);
   sub->file_name_pull_delays = NULL;
 
@@ -3028,8 +3056,11 @@ core_connects (void *cls,
   (void) cls;
   (void) mq;
 
-  GNUNET_CONTAINER_multipeermap_put (map_single_hop, peer, NULL,
-      GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY);
+  GNUNET_assert (GNUNET_YES ==
+                GNUNET_CONTAINER_multipeermap_put (map_single_hop,
+                                                   peer,
+                                                   NULL,
+                                                   GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
   return NULL;
 }
 
@@ -3436,7 +3467,7 @@ handle_peer_push (void *cls,
     GNUNET_STATISTICS_update(stats, "# push message received", 1, GNUNET_NO);
   }
 
-  #ifdef ENABLE_MALICIOUS
+  #if ENABLE_MALICIOUS
   struct AttackedPeer *tmp_att_peer;
 
   if ( (1 == mal_type) ||
@@ -3512,7 +3543,7 @@ handle_peer_pull_request (void *cls,
     }
   }
 
-  #ifdef ENABLE_MALICIOUS
+  #if ENABLE_MALICIOUS
   if (1 == mal_type
       || 3 == mal_type)
   { /* Try to maximise representation */
@@ -3606,7 +3637,7 @@ handle_peer_pull_reply (void *cls,
   const struct GNUNET_PeerIdentity *peers;
   struct Sub *sub = channel_ctx->peer_ctx->sub;
   uint32_t i;
-#ifdef ENABLE_MALICIOUS
+#if ENABLE_MALICIOUS
   struct AttackedPeer *tmp_att_peer;
 #endif /* ENABLE_MALICIOUS */
 
@@ -3618,7 +3649,8 @@ handle_peer_pull_reply (void *cls,
                               "# pull reply messages received",
                               1,
                               GNUNET_NO);
-    if (GNUNET_NO == GNUNET_CONTAINER_multipeermap_contains (map_single_hop,
+    if (NULL != map_single_hop &&
+        GNUNET_NO == GNUNET_CONTAINER_multipeermap_contains (map_single_hop,
           &channel_ctx->peer_ctx->peer_id))
     {
       GNUNET_STATISTICS_update (stats,
@@ -3628,7 +3660,7 @@ handle_peer_pull_reply (void *cls,
     }
   }
 
-  #ifdef ENABLE_MALICIOUS
+  #if ENABLE_MALICIOUS
   // We shouldn't even receive pull replies as we're not sending
   if (2 == mal_type)
   {
@@ -3649,7 +3681,7 @@ handle_peer_pull_reply (void *cls,
          i,
          GNUNET_i2s (&peers[i]));
 
-    #ifdef ENABLE_MALICIOUS
+    #if ENABLE_MALICIOUS
     if ((NULL != att_peer_set) &&
         (1 == mal_type || 3 == mal_type))
     { /* Add attacked peer to local list */
@@ -3670,25 +3702,30 @@ handle_peer_pull_reply (void *cls,
     }
     #endif /* ENABLE_MALICIOUS */
     /* Make sure we 'know' about this peer */
-    (void) insert_peer (channel_ctx->peer_ctx->sub, &peers[i]);
+    (void) insert_peer (channel_ctx->peer_ctx->sub,
+                        &peers[i]);
 
     if (GNUNET_YES == check_peer_valid (channel_ctx->peer_ctx->sub->valid_peers,
                                         &peers[i]))
     {
-      CustomPeerMap_put (channel_ctx->peer_ctx->sub->pull_map, &peers[i]);
+      CustomPeerMap_put (channel_ctx->peer_ctx->sub->pull_map,
+                         &peers[i]);
     }
     else
     {
       schedule_operation (channel_ctx->peer_ctx,
                           insert_in_pull_map,
                           channel_ctx->peer_ctx->sub); /* cls */
-      (void) issue_peer_online_check (channel_ctx->peer_ctx->sub, &peers[i]);
+      (void) issue_peer_online_check (channel_ctx->peer_ctx->sub,
+                                      &peers[i]);
     }
   }
 
-  UNSET_PEER_FLAG (get_peer_ctx (channel_ctx->peer_ctx->sub->peer_map, sender),
+  UNSET_PEER_FLAG (get_peer_ctx (channel_ctx->peer_ctx->sub->peer_map,
+                                 sender),
                    Peers_PULL_REPLY_PENDING);
-  clean_peer (channel_ctx->peer_ctx->sub, sender);
+  clean_peer (channel_ctx->peer_ctx->sub,
+              sender);
 
   GNUNET_break_op (check_peer_known (channel_ctx->peer_ctx->sub->peer_map,
                                      sender));
@@ -3812,7 +3849,7 @@ send_push (struct PeerContext *peer_ctx)
 }
 
 
-#ifdef ENABLE_MALICIOUS
+#if ENABLE_MALICIOUS
 
 
 /**
@@ -4534,7 +4571,7 @@ shutdown_task (void *cls)
   }
   GNUNET_CADET_disconnect (cadet_handle);
   cadet_handle = NULL;
-#ifdef ENABLE_MALICIOUS
+#if ENABLE_MALICIOUS
   struct AttackedPeer *tmp_att_peer;
   GNUNET_array_grow (mal_peers,
                      num_mal_peers,
@@ -4647,7 +4684,7 @@ run (void *cls,
   GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "STARTING SERVICE (rps) for peer [%s]\n",
               GNUNET_i2s (&own_identity));
-#ifdef ENABLE_MALICIOUS
+#if ENABLE_MALICIOUS
   GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
               "Malicious execution compiled in.\n");
 #endif /* ENABLE_MALICIOUS */
@@ -4740,7 +4777,7 @@ GNUNET_SERVICE_MAIN
    GNUNET_MESSAGE_TYPE_RPS_CS_SEED,
    struct GNUNET_RPS_CS_SeedMessage,
    NULL),
-#ifdef ENABLE_MALICIOUS
+#if ENABLE_MALICIOUS
  GNUNET_MQ_hd_var_size (client_act_malicious,
    GNUNET_MESSAGE_TYPE_RPS_ACT_MALICIOUS,
    struct GNUNET_RPS_CS_ActMaliciousMessage,
index 18a433d6b5fb2ab72b0b52da973e8ff7d1933a83..d3cc8d1042fbfb87dbeb88f32ed103322760facb 100644 (file)
@@ -82,7 +82,8 @@ CustomPeerMap_create (unsigned int len)
 
   c_peer_map = GNUNET_new (struct CustomPeerMap);
   c_peer_map->hash_map = GNUNET_CONTAINER_multihashmap32_create (len);
-  c_peer_map->peer_map = GNUNET_CONTAINER_multipeermap_create (len, GNUNET_NO);
+  c_peer_map->peer_map = GNUNET_CONTAINER_multipeermap_create (len,
+                                                               GNUNET_NO);
   return c_peer_map;
 }
 
@@ -129,10 +130,16 @@ CustomPeerMap_put (const struct CustomPeerMap *c_peer_map,
     p = GNUNET_new (struct GNUNET_PeerIdentity);
     *p = *peer;
     GNUNET_assert (p != peer);
-    GNUNET_assert (0 == memcmp (p, peer, sizeof(struct GNUNET_PeerIdentity)));
-    GNUNET_CONTAINER_multipeermap_put (c_peer_map->peer_map, p, index,
+    GNUNET_assert (0 == memcmp (p,
+                                peer,
+                                sizeof(struct GNUNET_PeerIdentity)));
+    GNUNET_CONTAINER_multipeermap_put (c_peer_map->peer_map,
+                                       p,
+                                       index,
         GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
-    GNUNET_CONTAINER_multihashmap32_put (c_peer_map->hash_map, *index, p,
+    GNUNET_CONTAINER_multihashmap32_put (c_peer_map->hash_map,
+                                         *index,
+                                         p,
         GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
     GNUNET_assert (GNUNET_CONTAINER_multihashmap32_size (c_peer_map->hash_map) ==
                    GNUNET_CONTAINER_multipeermap_size (c_peer_map->peer_map));
@@ -194,30 +201,38 @@ CustomPeerMap_remove_peer (const struct CustomPeerMap *c_peer_map,
   uint32_t *last_index;
   struct GNUNET_PeerIdentity *last_p;
 
-  if (GNUNET_NO == CustomPeerMap_contains_peer (c_peer_map, peer))
+  if (GNUNET_NO == CustomPeerMap_contains_peer (c_peer_map,
+                                                peer))
   {
     return GNUNET_NO;
   }
-  index = CustomPeerMap_get_index_pointer (c_peer_map, peer);
+  index = CustomPeerMap_get_index_pointer (c_peer_map,
+                                           peer);
   GNUNET_assert (*index < CustomPeerMap_size (c_peer_map));
   /* Need to get the pointer stored in the hashmap to free it */
-  p = GNUNET_CONTAINER_multihashmap32_get (c_peer_map->hash_map, *index);
+  p = GNUNET_CONTAINER_multihashmap32_get (c_peer_map->hash_map,
+                                           *index);
   GNUNET_assert (NULL != p);
-  GNUNET_CONTAINER_multihashmap32_remove_all (c_peer_map->hash_map, *index);
+  GNUNET_CONTAINER_multihashmap32_remove_all (c_peer_map->hash_map,
+                                              *index);
   // TODO wrong peerid?
-  GNUNET_CONTAINER_multipeermap_remove_all (c_peer_map->peer_map, peer);
+  GNUNET_CONTAINER_multipeermap_remove_all (c_peer_map->peer_map,
+                                            peer);
   if (*index != CustomPeerMap_size (c_peer_map))
   { /* fill 'gap' with peer at last index */
     last_p =
       GNUNET_CONTAINER_multihashmap32_get (c_peer_map->hash_map,
                                            CustomPeerMap_size (c_peer_map));
     GNUNET_assert (NULL != last_p);
-    last_index = GNUNET_CONTAINER_multipeermap_get (c_peer_map->peer_map, last_p);
+    last_index = GNUNET_CONTAINER_multipeermap_get (c_peer_map->peer_map,
+                                                    last_p);
     GNUNET_assert (NULL != last_index);
     GNUNET_assert (CustomPeerMap_size (c_peer_map) == *last_index);
-    GNUNET_CONTAINER_multihashmap32_put (c_peer_map->hash_map, *index, last_p,
+    GNUNET_CONTAINER_multihashmap32_put (c_peer_map->hash_map,
+                                         *index, last_p,
         GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY);
-    GNUNET_CONTAINER_multihashmap32_remove_all (c_peer_map->hash_map, *last_index);
+    GNUNET_CONTAINER_multihashmap32_remove_all (c_peer_map->hash_map,
+                                                *last_index);
     *last_index = *index;
   }
   GNUNET_free (index);
index 1369d3fdfba1b431bf5eb8ca0d1295ac28dfef89..6049da5a07efde2ee03b7c2c663f262f87cc85dd 100644 (file)
@@ -83,8 +83,7 @@ BLUETOOTH_QUOTA_OUT = unlimited
 DISABLE_TRY_CONNECT = YES
 
 [cadet]
-#OPTIONS=-l /tmp/rps_profiler_logs/cadet-[]-%Y-%m-%d.log
-#PREFIX = valgrind
+OPTIONS=-l /tmp/rps_profiler_logs/cadet-[]-%Y-%m-%d.log
 
 #[arm]
 #GLOBAL_POSTFIX=-l /tmp/rps_profiler_logs/other-[]-%Y-%m-%d.log
index 7f54feca1623ca0a1c09cf820ceac269f2622d5a..85829f2470a25f3dcd157db75da9c432f544e3a5 100644 (file)
@@ -80,41 +80,36 @@ get_file_handle (const char *name)
   if (NULL == open_files)
   {
     open_files = GNUNET_CONTAINER_multihashmap_create (16,
-        GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY);
+                                                      GNUNET_NO);
+    LOG (GNUNET_ERROR_TYPE_DEBUG,
+         "Created map of open files.\n");
   }
   GNUNET_CRYPTO_hash (name,
-                      strnlen (name,
-                               512),
+                      strlen (name),
                       &hash);
-  if (GNUNET_NO == GNUNET_CONTAINER_multihashmap_contains (open_files,
-                                                           &hash))
-  {
-    fh = GNUNET_DISK_file_open (name,
-                                GNUNET_DISK_OPEN_WRITE |
-                                GNUNET_DISK_OPEN_CREATE |
-                                GNUNET_DISK_OPEN_APPEND,
-                                GNUNET_DISK_PERM_USER_READ |
-                                GNUNET_DISK_PERM_USER_WRITE |
-                                GNUNET_DISK_PERM_GROUP_READ);
-    if (NULL == fh)
-    {
-      LOG (GNUNET_ERROR_TYPE_ERROR,
-           "Opening file `%s' failed.\n",
-           name);
-      GNUNET_assert (0);
-    }
-    GNUNET_CONTAINER_multihashmap_put (open_files,
-                                       &hash,
-                                       fh,
-                                       GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY);
+  if (NULL != (fh = GNUNET_CONTAINER_multihashmap_get (open_files,
+                                                      &hash)))
     return fh;
-  }
-  else
+  fh = GNUNET_DISK_file_open (name,
+                             GNUNET_DISK_OPEN_WRITE |
+                             GNUNET_DISK_OPEN_CREATE |
+                             GNUNET_DISK_OPEN_APPEND,
+                             GNUNET_DISK_PERM_USER_READ |
+                             GNUNET_DISK_PERM_USER_WRITE |
+                             GNUNET_DISK_PERM_GROUP_READ);
+  if (NULL == fh)
   {
-    fh = GNUNET_CONTAINER_multihashmap_get (open_files,
-                                            &hash);
-    return fh;
+    LOG (GNUNET_ERROR_TYPE_ERROR,
+        "Opening file `%s' failed.\n",
+        name);
+    GNUNET_assert (0);
   }
+  GNUNET_assert (GNUNET_YES ==
+                GNUNET_CONTAINER_multihashmap_put (open_files,
+                                                   &hash,
+                                                   fh,
+                                                   GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
+  return fh;
 }
 
 
@@ -162,6 +157,7 @@ close_all_files ()
                                                close_files_iter,
                                                NULL);
   GNUNET_CONTAINER_multihashmap_destroy (open_files);
+  open_files = NULL;
   return ret;
 }
 
@@ -491,6 +487,7 @@ static int ensure_folder_exist (void)
   }
   if (GNUNET_YES != GNUNET_DISK_directory_test ("/tmp/rps/", GNUNET_NO))
   {
+    LOG (GNUNET_ERROR_TYPE_ERROR, "Could not create directory `/tmp/rps'\n");
     return GNUNET_SYSERR;
   }
   return GNUNET_YES;
index cf15a9909b42c7dbc143e437f871b34ca52687d1..484d0f7da102feee05de6c721622d5d8f58403fc 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -28,7 +28,7 @@
 #ifndef RPS_TEST_UTIL_H
 #define RPS_TEST_UTIL_H
 
-#define TO_FILE 1
+#define TO_FILE 0
 
 
 char *
index ef968ffbb7cd1be38042f072a6cc8dc007927091..5bfef93b01f47cebad9f11b69fb56067fc14f1b8 100644 (file)
@@ -79,7 +79,7 @@ struct GNUNET_RPS_CS_SeedMessage
   /* Followed by num_peers * GNUNET_PeerIdentity */
 };
 
-#ifdef ENABLE_MALICIOUS
+#if ENABLE_MALICIOUS
 /**
  * Message from client to service to turn service malicious.
  */
index 6fac4cf6f5ca0d9faa34532bbf02faf669115224..d0b241a2bda5928cc00357861a2a2cf1bd515d1e 100644 (file)
@@ -806,7 +806,7 @@ GNUNET_RPS_seed_ids (struct GNUNET_RPS_Handle *h,
 }
 
 
-#ifdef ENABLE_MALICIOUS
+#if ENABLE_MALICIOUS
 /**
  * Turn RPS service to act malicious.
  *
index 126cc5decc73b003304ddc5b2a6fb4bda5341f69..26066bf1078518b11ee21678ef8e3176c7729aff 100644 (file)
@@ -1357,7 +1357,7 @@ static void mal_init_peer (struct RPSPeer *rps_peer)
 static void
 mal_pre (struct RPSPeer *rps_peer, struct GNUNET_RPS_Handle *h)
 {
-  #ifdef ENABLE_MALICIOUS
+  #if ENABLE_MALICIOUS
   uint32_t num_mal_peers;
 
   GNUNET_assert ( (1 >= portion) &&
@@ -1388,7 +1388,7 @@ mal_cb (struct RPSPeer *rps_peer)
     return;
   }
 
-  #ifdef ENABLE_MALICIOUS
+  #if ENABLE_MALICIOUS
   GNUNET_assert ( (1 >= portion) &&
                   (0 <  portion) );
   num_mal_peers = round (portion * num_peers);
index 1555a71a5d0cab83704df8631e3e1235dc326bc7..c22113af55ff796208db89cd06e705c08d1a35bd 100644 (file)
@@ -82,7 +82,7 @@ DISABLE_TRY_CONNECT = YES
 
 [cadet]
 #OPTIONS=-l /tmp/rps_profiler_logs/cadet-[]-%Y-%m-%d.log
-#PREFIX = valgrind
+#PREFIX = valgrind --log-file=/tmp/rps/valgrind_gnunet-service-cadet_%p
 
 #[arm]
 #GLOBAL_POSTFIX=-l /tmp/rps_profiler_logs/other-[]-%Y-%m-%d.log
index d4c01fedbf646c726207d6fc176801dc9034cc9f..1ffde04362ec9fc3162184b3bfdcf78eb41d8a74 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -898,7 +898,9 @@ restore_fair (const struct GNUNET_CRYPTO_PaillierPublicKey *ppub,
   GNUNET_assert (NULL != (big_b = gcry_mpi_new (0)));
 
   // a = (N,0)^T
-  GNUNET_CRYPTO_mpi_scan_unsigned (&a_1, ppub, sizeof (struct GNUNET_CRYPTO_PaillierPublicKey));
+  GNUNET_CRYPTO_mpi_scan_unsigned (&a_1,
+                                   ppub,
+                                   sizeof (struct GNUNET_CRYPTO_PaillierPublicKey));
   GNUNET_assert (NULL != (a_2 = gcry_mpi_new (0)));
   gcry_mpi_set_ui (a_2, 0);
   // b = (x,1)^T
@@ -957,15 +959,9 @@ restore_fair (const struct GNUNET_CRYPTO_PaillierPublicKey *ppub,
     gcry_mpi_set (big_b, big_t);
   }
 
-  {
-    gcry_mpi_t paillier_n;
-
-    GNUNET_CRYPTO_mpi_scan_unsigned (&paillier_n, ppub, sizeof (struct GNUNET_CRYPTO_PaillierPublicKey));
-
-    gcry_mpi_set (xres, b_2);
-    gcry_mpi_invm (xres, xres, elgamal_q);
-    gcry_mpi_mulm (xres, xres, b_1, elgamal_q);
-  }
+  gcry_mpi_set (xres, b_2);
+  gcry_mpi_invm (xres, xres, elgamal_q);
+  gcry_mpi_mulm (xres, xres, b_1, elgamal_q);
 
   gcry_mpi_release (a_1);
   gcry_mpi_release (a_2);
@@ -984,7 +980,8 @@ restore_fair (const struct GNUNET_CRYPTO_PaillierPublicKey *ppub,
 
 
 static void
-get_fair_encryption_challenge (const struct GNUNET_SECRETSHARING_FairEncryption *fe, gcry_mpi_t e)
+get_fair_encryption_challenge (const struct GNUNET_SECRETSHARING_FairEncryption *fe,
+                               gcry_mpi_t *e)
 {
   struct {
     struct GNUNET_CRYPTO_PaillierCiphertext c;
@@ -994,18 +991,27 @@ get_fair_encryption_challenge (const struct GNUNET_SECRETSHARING_FairEncryption
   } hash_data;
   struct GNUNET_HashCode e_hash;
 
+  memset (&hash_data,
+          0,
+          sizeof (hash_data));
   GNUNET_memcpy (&hash_data.c, &fe->c, sizeof (struct GNUNET_CRYPTO_PaillierCiphertext));
   GNUNET_memcpy (&hash_data.h, &fe->h, GNUNET_SECRETSHARING_ELGAMAL_BITS / 8);
   GNUNET_memcpy (&hash_data.t1, &fe->t1, GNUNET_SECRETSHARING_ELGAMAL_BITS / 8);
   GNUNET_memcpy (&hash_data.t2, &fe->t2, GNUNET_CRYPTO_PAILLIER_BITS * 2 / 8);
-
-  GNUNET_CRYPTO_mpi_scan_unsigned (&e, &e_hash, sizeof (struct GNUNET_HashCode));
-  gcry_mpi_mod (e, e, elgamal_q);
+  GNUNET_CRYPTO_hash (&hash_data,
+                      sizeof (hash_data),
+                      &e_hash);
+  /* This allocates "e" */
+  GNUNET_CRYPTO_mpi_scan_unsigned (e,
+                                   &e_hash,
+                                   sizeof (struct GNUNET_HashCode));
+  gcry_mpi_mod (*e, *e, elgamal_q);
 }
 
 
 static int
-verify_fair (const struct GNUNET_CRYPTO_PaillierPublicKey *ppub, const struct GNUNET_SECRETSHARING_FairEncryption *fe)
+verify_fair (const struct GNUNET_CRYPTO_PaillierPublicKey *ppub,
+             const struct GNUNET_SECRETSHARING_FairEncryption *fe)
 {
   gcry_mpi_t n;
   gcry_mpi_t n_sq;
@@ -1023,11 +1029,13 @@ verify_fair (const struct GNUNET_CRYPTO_PaillierPublicKey *ppub, const struct GN
   GNUNET_assert (NULL != (n_sq = gcry_mpi_new (0)));
   GNUNET_assert (NULL != (tmp1 = gcry_mpi_new (0)));
   GNUNET_assert (NULL != (tmp2 = gcry_mpi_new (0)));
-  GNUNET_assert (NULL != (e = gcry_mpi_new (0)));
 
-  get_fair_encryption_challenge (fe, e);
+  get_fair_encryption_challenge (fe,
+                                 &e /* this allocates e */);
 
-  GNUNET_CRYPTO_mpi_scan_unsigned (&n, ppub, sizeof (struct GNUNET_CRYPTO_PaillierPublicKey));
+  GNUNET_CRYPTO_mpi_scan_unsigned (&n,
+                                   ppub,
+                                   sizeof (struct GNUNET_CRYPTO_PaillierPublicKey));
   GNUNET_CRYPTO_mpi_scan_unsigned (&t1, fe->t1, GNUNET_CRYPTO_PAILLIER_BITS / 8);
   GNUNET_CRYPTO_mpi_scan_unsigned (&z, fe->z, GNUNET_SECRETSHARING_ELGAMAL_BITS / 8);
   GNUNET_CRYPTO_mpi_scan_unsigned (&y, fe->h, GNUNET_SECRETSHARING_ELGAMAL_BITS / 8);
@@ -1096,7 +1104,9 @@ cleanup:
  * @param[out] fe the fair encryption
  */
 static void
-encrypt_fair (gcry_mpi_t v, const struct GNUNET_CRYPTO_PaillierPublicKey *ppub, struct GNUNET_SECRETSHARING_FairEncryption *fe)
+encrypt_fair (gcry_mpi_t v,
+              const struct GNUNET_CRYPTO_PaillierPublicKey *ppub,
+              struct GNUNET_SECRETSHARING_FairEncryption *fe)
 {
   gcry_mpi_t r;
   gcry_mpi_t s;
@@ -1111,6 +1121,7 @@ encrypt_fair (gcry_mpi_t v, const struct GNUNET_CRYPTO_PaillierPublicKey *ppub,
   gcry_mpi_t Y;
   gcry_mpi_t G;
   gcry_mpi_t h;
+
   GNUNET_assert (NULL != (r = gcry_mpi_new (0)));
   GNUNET_assert (NULL != (s = gcry_mpi_new (0)));
   GNUNET_assert (NULL != (t1 = gcry_mpi_new (0)));
@@ -1118,13 +1129,14 @@ encrypt_fair (gcry_mpi_t v, const struct GNUNET_CRYPTO_PaillierPublicKey *ppub,
   GNUNET_assert (NULL != (z = gcry_mpi_new (0)));
   GNUNET_assert (NULL != (w = gcry_mpi_new (0)));
   GNUNET_assert (NULL != (n_sq = gcry_mpi_new (0)));
-  GNUNET_assert (NULL != (e = gcry_mpi_new (0)));
   GNUNET_assert (NULL != (u = gcry_mpi_new (0)));
   GNUNET_assert (NULL != (Y = gcry_mpi_new (0)));
   GNUNET_assert (NULL != (G = gcry_mpi_new (0)));
   GNUNET_assert (NULL != (h = gcry_mpi_new (0)));
 
-  GNUNET_CRYPTO_mpi_scan_unsigned (&n, ppub, sizeof (struct GNUNET_CRYPTO_PaillierPublicKey));
+  GNUNET_CRYPTO_mpi_scan_unsigned (&n,
+                                   ppub,
+                                   sizeof (struct GNUNET_CRYPTO_PaillierPublicKey));
   gcry_mpi_mul (n_sq, n, n);
   gcry_mpi_add_ui (G, n, 1);
 
@@ -1170,8 +1182,8 @@ encrypt_fair (gcry_mpi_t v, const struct GNUNET_CRYPTO_PaillierPublicKey *ppub,
                                     GNUNET_CRYPTO_PAILLIER_BITS * 2 / 8,
                                     t2);
 
-
-  get_fair_encryption_challenge (fe, e);
+  get_fair_encryption_challenge (fe,
+                                 &e /* This allocates "e" */);
 
   // compute z
   gcry_mpi_mul (z, e, v);
index bd8da6177f6bd60af405e646f7e55335f03a0bb6..df8566abdb0bcb7920d9745736af7cc151ffe696 100644 (file)
@@ -8,8 +8,9 @@ ACCEPT_FROM6 = ::1;
 UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-service-secretsharing.sock
 UNIX_MATCH_UID = YES
 UNIX_MATCH_GID = YES
+# PREFIX = valgrind --leak-check=yes
 # DISABLE_SOCKET_FORWARDING = NO
-# USERNAME = 
+# USERNAME =
 # MAXBUF =
 # TIMEOUT =
 # DISABLEV6 =
index 3391c88dbd3c991e49e1d7e954d96895f36e6f11..7c8e454802e49ea3537e3a1e35efc06ccc0c7f3f 100644 (file)
@@ -34,3 +34,7 @@ RETURN_LOCAL_ADDRESSES = YES
 [nse]
 START_ON_DEMAND = NO
 
+
+[rps]
+START_ON_DEMAND = NO
+IMMEDIATE_START = NO
diff --git a/src/social/.gitignore b/src/social/.gitignore
deleted file mode 100644 (file)
index 875aa11..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-gnunet-social
-gnunet-service-social
-test_social
diff --git a/src/social/Makefile.am b/src/social/Makefile.am
deleted file mode 100644 (file)
index 94a9ba1..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-# This Makefile.am is in the public domain
-AM_CPPFLAGS = -I$(top_srcdir)/src/include
-
-pkgcfgdir= $(pkgdatadir)/config.d/
-
-libexecdir= $(pkglibdir)/libexec/
-
-pkgcfg_DATA = \
-  social.conf
-
-
-if MINGW
- WINFLAGS = -Wl,--no-undefined -Wl,--export-all-symbols
-endif
-
-if USE_COVERAGE
-  AM_CFLAGS = --coverage -O0
-  XLIB = -lgcov
-endif
-
-lib_LTLIBRARIES = libgnunetsocial.la
-
-libgnunetsocial_la_SOURCES = \
-  social_api.c social.h
-libgnunetsocial_la_LIBADD = \
-  $(top_builddir)/src/util/libgnunetutil.la \
-  $(top_builddir)/src/psycutil/libgnunetpsycutil.la \
-  $(GN_LIBINTL) $(XLIB)
-libgnunetsocial_la_LDFLAGS = \
-  $(GN_LIB_LDFLAGS)  $(WINFLAGS) \
-  -version-info 0:0:0
-
-bin_PROGRAMS = \
- gnunet-social
-
-libexec_PROGRAMS = \
- gnunet-service-social
-
-gnunet_social_SOURCES = \
-  gnunet-social.c
-gnunet_social_LDADD = \
-  libgnunetsocial.la \
-  $(top_builddir)/src/psycutil/libgnunetpsycutil.la \
-  $(top_builddir)/src/util/libgnunetutil.la
-
-gnunet_service_social_SOURCES = \
- gnunet-service-social.c
-gnunet_service_social_LDADD = \
-  $(top_builddir)/src/util/libgnunetutil.la \
-  $(top_builddir)/src/statistics/libgnunetstatistics.la \
-  $(top_builddir)/src/psycutil/libgnunetpsycutil.la \
-  $(top_builddir)/src/psyc/libgnunetpsyc.la \
-  $(top_builddir)/src/identity/libgnunetidentity.la \
-  $(top_builddir)/src/gns/libgnunetgns.la \
-  $(top_builddir)/src/namestore/libgnunetnamestore.la \
-  $(GN_LIBINTL)
-
-
-if HAVE_TESTING
-check_PROGRAMS = \
- test_social
-endif
-
-if ENABLE_TEST_RUN
-AM_TESTS_ENVIRONMENT=export GNUNET_PREFIX=$${GNUNET_PREFIX:-@libdir@};export PATH=$${GNUNET_PREFIX:-@prefix@}/bin:$$PATH;unset XDG_DATA_HOME;unset XDG_CONFIG_HOME;
-TESTS = $(check_PROGRAMS)
-endif
-
-test_social_SOURCES = \
- test_social.c
-test_social_LDADD = \
-  libgnunetsocial.la \
-  $(top_builddir)/src/testing/libgnunettesting.la \
-  $(top_builddir)/src/util/libgnunetutil.la \
-  $(top_builddir)/src/psycutil/libgnunetpsycutil.la \
-  $(top_builddir)/src/identity/libgnunetidentity.la
-
-EXTRA_DIST = \
-  test_social.conf
diff --git a/src/social/gnunet-service-social.c b/src/social/gnunet-service-social.c
deleted file mode 100644 (file)
index 33fabae..0000000
+++ /dev/null
@@ -1,3760 +0,0 @@
-/*
- * This file is part of GNUnet
- * Copyright (C) 2013 GNUnet e.V.
- *
- * GNUnet is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNUnet is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
- */
-
-/**
- * @file social/gnunet-service-social.c
- * @brief Social service
- * @author Gabor X Toth
- */
-
-#include <inttypes.h>
-#include <strings.h>
-
-#include "platform.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_constants.h"
-#include "gnunet_protocols.h"
-#include "gnunet_identity_service.h"
-#include "gnunet_namestore_service.h"
-#include "gnunet_gns_service.h"
-#include "gnunet_statistics_service.h"
-#include "gnunet_psyc_service.h"
-#include "gnunet_psyc_util_lib.h"
-#include "gnunet_social_service.h"
-#include "social.h"
-
-
-/**
- * Handle to our current configuration.
- */
-static const struct GNUNET_CONFIGURATION_Handle *cfg;
-
-/**
- * Service handle.
- */
-static struct GNUNET_SERVICE_Handle *service;
-
-/* Handles to other services */
-static struct GNUNET_IDENTITY_Handle *id;
-static struct GNUNET_GNS_Handle *gns;
-static struct GNUNET_NAMESTORE_Handle *namestore;
-static struct GNUNET_STATISTICS_Handle *stats;
-
-/**
- * ID of this peer.
- */
-static struct GNUNET_PeerIdentity this_peer;
-
-/**
- * All connected hosts.
- * H(place_pub_key) -> struct Host
- */
-static struct GNUNET_CONTAINER_MultiHashMap *hosts;
-
-/**
- * All connected guests.
- * H(place_pub_key) -> struct Guest
- */
-static struct GNUNET_CONTAINER_MultiHashMap *guests;
-
-/**
- * Connected guests per place.
- * H(place_pub_key) -> ego_pub_key -> struct Guest
- */
-static struct GNUNET_CONTAINER_MultiHashMap *place_guests;
-
-/**
- * Places entered as host or guest.
- * H(place_pub_key) -> struct HostEnterRequest OR struct GuestEnterRequest
- */
-static struct GNUNET_CONTAINER_MultiHashMap *places;
-
-/**
- * Places entered per application.
- * H(app_id) -> H(place_pub_key) -> NULL
- */
-static struct GNUNET_CONTAINER_MultiHashMap *apps_places;
-
-/**
- * Application subscriptions per place.
- * H(place_pub_key) -> H(app_id)
- */
-//static struct GNUNET_CONTAINER_MultiHashMap *places_apps;
-
-/**
- * Connected applications.
- * H(app_id) -> struct Application
- */
-static struct GNUNET_CONTAINER_MultiHashMap *apps;
-
-/**
- * All egos.
- * H(ego_pub_key) -> struct Ego
- */
-static struct GNUNET_CONTAINER_MultiHashMap *egos;
-
-/**
- * Directory for storing social data.
- * Default: $GNUNET_DATA_HOME/social
- */
-static char *dir_social;
-
-/**
- * Directory for storing place data.
- * $dir_social/places
- */
-static char *dir_places;
-
-/**
- * Directory for storing app data.
- * $dir_social/apps
- */
-static char *dir_apps;
-
-
-/**
- * Message fragment transmission queue.
- */
-struct FragmentTransmitQueue
-{
-  struct FragmentTransmitQueue *prev;
-  struct FragmentTransmitQueue *next;
-
-  struct GNUNET_SERVICE_Client *client;
-
-  /**
-   * Pointer to the next message part inside the data after this struct.
-   */
-  struct GNUNET_MessageHeader *next_part;
-
-  /**
-   * Size of message.
-   */
-  uint16_t size;
-
-  /**
-   * @see enum GNUNET_PSYC_MessageState
-   */
-  uint8_t state;
-
-  /* Followed by one or more message parts. */
-};
-
-
-/**
- * Message transmission queue.
- */
-struct MessageTransmitQueue
-{
-  struct MessageTransmitQueue *prev;
-  struct MessageTransmitQueue *next;
-
-  struct FragmentTransmitQueue *frags_head;
-  struct FragmentTransmitQueue *frags_tail;
-
-  struct GNUNET_SERVICE_Client *client;
-};
-
-/**
- * List of connected clients.
- */
-struct ClientListItem
-{
-  struct ClientListItem *prev;
-  struct ClientListItem *next;
-
-  struct GNUNET_SERVICE_Client *client;
-};
-
-
-/**
- * Common part of the client context for both a host and guest.
- */
-struct Place
-{
-  struct ClientListItem *clients_head;
-  struct ClientListItem *clients_tail;
-
-  struct MessageTransmitQueue *tmit_msgs_head;
-  struct MessageTransmitQueue *tmit_msgs_tail;
-
-  struct GNUNET_PSYC_Channel *channel;
-
-  /**
-   * Private key of home in case of a host.
-   */
-  struct GNUNET_CRYPTO_EddsaPublicKey key;
-
-  /**
-   * Public key of place.
-   */
-  struct GNUNET_CRYPTO_EddsaPublicKey pub_key;
-
-  /**
-   * Hash of @a pub_key.
-   */
-  struct GNUNET_HashCode pub_key_hash;
-
-  /**
-   * Private key of ego.
-   */
-  struct GNUNET_CRYPTO_EcdsaPrivateKey ego_key;
-
-  /**
-   * Public key of ego.
-   */
-  struct GNUNET_CRYPTO_EcdsaPublicKey ego_pub_key;
-
-  /**
-   * Hash of @a ego_pub_key.
-   */
-  struct GNUNET_HashCode ego_pub_hash;
-
-  /**
-   * Slicer for processing incoming messages.
-   */
-  struct GNUNET_PSYC_Slicer *slicer;
-
-  /**
-   * Last message ID received for the place.
-   * 0 if there is no such message.
-   */
-  uint64_t max_message_id;
-
-  /**
-   * Offset where the file is currently being written.
-   */
-  uint64_t file_offset;
-
-  /**
-   * Whether or not to save the file (#GNUNET_YES or #GNUNET_NO)
-   */
-  uint8_t file_save;
-
-  /**
-   * Is this place ready to receive messages from client?
-   * #GNUNET_YES or #GNUNET_NO
-   */
-  uint8_t is_ready;
-
-  /**
-   * Is the client disconnecting?
-   * #GNUNET_YES or #GNUNET_NO
-   */
-  uint8_t is_disconnecting;
-
-  /**
-   * Is this a host (#GNUNET_YES), or guest (#GNUNET_NO)?
-   */
-  uint8_t is_host;
-
-  union {
-    struct Host *host;
-    struct Guest *guest;
-  };
-};
-
-
-/**
- * Client context for a host.
- */
-struct Host
-{
-  /**
-   * Place struct common for Host and Guest
-   */
-  struct Place place;
-
-  /**
-   * Handle for the multicast origin.
-   */
-  struct GNUNET_PSYC_Master *master;
-
-  /**
-   * Transmit handle for multicast.
-   */
-  struct GNUNET_PSYC_MasterTransmitHandle *tmit_handle;
-
-  /**
-   * Incoming join requests.
-   * guest_key -> struct GNUNET_PSYC_JoinHandle *
-   */
-  struct GNUNET_CONTAINER_MultiHashMap *join_reqs;
-
-  /**
-   * Messages being relayed.
-   */
-  struct GNUNET_CONTAINER_MultiHashMap *relay_msgs;
-
-  /**
-   * @see enum GNUNET_PSYC_Policy
-   */
-  enum GNUNET_PSYC_Policy policy;
-};
-
-
-/**
- * Client context for a guest.
- */
-struct Guest
-{
-  /**
-   * Place struct common for Host and Guest.
-   */
-  struct Place place;
-
-  /**
-   * Handle for the PSYC slave.
-   */
-  struct GNUNET_PSYC_Slave *slave;
-
-  /**
-   * Transmit handle for multicast.
-   */
-  struct GNUNET_PSYC_SlaveTransmitHandle *tmit_handle;
-
-  /**
-   * Peer identity of the origin.
-   */
-  struct GNUNET_PeerIdentity origin;
-
-  /**
-   * Number of items in @a relays.
-   */
-  uint32_t relay_count;
-
-  /**
-   * Relays that multicast can use to connect.
-   */
-  struct GNUNET_PeerIdentity *relays;
-
-  /**
-   * Join request to be transmitted to the master on join.
-   */
-  struct GNUNET_MessageHeader *join_req; // FIXME: not used!
-
-  /**
-   * Join decision received from PSYC.
-   */
-  struct GNUNET_PSYC_JoinDecisionMessage *join_dcsn;
-
-  /**
-   * Join flags for the PSYC service.
-   */
-  enum GNUNET_PSYC_SlaveJoinFlags join_flags;
-};
-
-
-/**
- * Context for a client.
- */
-struct Client
-{
-  /**
-   * Client handle.
-   */
-  struct GNUNET_SERVICE_Client *client;
-
-  /**
-   * Place where the client entered.
-   */
-  struct Place *place;
-
-  /**
-   * Message queue for the message currently being transmitted
-   * by this client.
-   */
-  struct MessageTransmitQueue *tmit_msg;
-
-  /**
-   * ID for application clients.
-   */
-  char *app_id;
-};
-
-
-struct Application
-{
-  struct ClientListItem *clients_head;
-  struct ClientListItem *clients_tail;
-};
-
-
-struct Ego {
-  struct GNUNET_CRYPTO_EcdsaPrivateKey key;
-  char *name;
-};
-
-
-struct OperationClosure
-{
-  struct Client *client;
-  uint64_t op_id;
-  uint32_t flags;
-};
-
-
-static int
-psyc_transmit_message (struct Place *plc);
-
-
-/**
- * Clean up place data structures after a client disconnected.
- *
- * @param cls the `struct Place` to clean up
- */
-static void
-cleanup_place (void *cls);
-
-
-static struct MessageTransmitQueue *
-psyc_transmit_queue_message (struct Place *plc,
-                             struct GNUNET_SERVICE_Client *client,
-                             size_t data_size,
-                             const void *data,
-                             uint16_t first_ptype, uint16_t last_ptype,
-                             struct MessageTransmitQueue *tmit_msg);
-
-
-static int
-place_entry_cleanup (void *cls,
-                     const struct GNUNET_HashCode *key,
-                     void *value)
-{
-  struct Place *plc = value;
-
-  cleanup_place (plc);
-  return GNUNET_YES;
-}
-
-
-/**
- * Task run during shutdown.
- *
- * @param cls unused
- */
-static void
-shutdown_task (void *cls)
-{
-  GNUNET_CONTAINER_multihashmap_iterate (hosts, place_entry_cleanup, NULL);
-  GNUNET_CONTAINER_multihashmap_iterate (guests, place_entry_cleanup, NULL);
-
-  if (NULL != id)
-  {
-    GNUNET_IDENTITY_disconnect (id);
-    id = NULL;
-  }
-  if (NULL != namestore)
-  {
-    GNUNET_NAMESTORE_disconnect (namestore);
-    namestore = NULL;
-  }
-  if (NULL != gns)
-  {
-    GNUNET_GNS_disconnect (gns);
-    gns = NULL;
-  }
-  if (NULL != stats)
-  {
-    GNUNET_STATISTICS_destroy (stats, GNUNET_YES);
-    stats = NULL;
-  }
-}
-
-
-/**
- * Clean up host data structures after a client disconnected.
- */
-static void
-cleanup_host (struct Host *hst)
-{
-  struct Place *plc = &hst->place;
-
-  GNUNET_CONTAINER_multihashmap_destroy (hst->join_reqs);
-  GNUNET_CONTAINER_multihashmap_destroy (hst->relay_msgs);
-  GNUNET_CONTAINER_multihashmap_remove (hosts, &plc->pub_key_hash, plc);
-}
-
-
-/**
- * Clean up guest data structures after a client disconnected.
- */
-static void
-cleanup_guest (struct Guest *gst)
-{
-  struct Place *plc = &gst->place;
-  struct GNUNET_CONTAINER_MultiHashMap *
-    plc_gst = GNUNET_CONTAINER_multihashmap_get (place_guests,
-                                                 &plc->pub_key_hash);
-  if (NULL != plc_gst)
-  {
-    GNUNET_CONTAINER_multihashmap_remove (plc_gst, &plc->ego_pub_hash, gst);
-
-    if (0 == GNUNET_CONTAINER_multihashmap_size (plc_gst))
-    {
-      GNUNET_CONTAINER_multihashmap_remove (place_guests, &plc->pub_key_hash,
-                                            plc_gst);
-      GNUNET_CONTAINER_multihashmap_destroy (plc_gst);
-    }
-  }
-  GNUNET_CONTAINER_multihashmap_remove (guests, &plc->pub_key_hash, gst);
-  if (NULL != gst->join_req)
-    GNUNET_free (gst->join_req);
-  if (NULL != gst->relays)
-    GNUNET_free (gst->relays);
-  GNUNET_CONTAINER_multihashmap_remove (guests, &plc->pub_key_hash, plc);
-}
-
-
-/**
- * Clean up place data structures after a client disconnected.
- *
- * @param cls the `struct Place` to clean up
- */
-static void
-cleanup_place (void *cls)
-{
-  struct Place *plc = cls;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "cleaning up place %s\n",
-              GNUNET_h2s (&plc->pub_key_hash));
-
-  (GNUNET_YES == plc->is_host)
-    ? cleanup_host ((struct Host *) plc)
-    : cleanup_guest ((struct Guest *) plc);
-
-  GNUNET_PSYC_slicer_destroy (plc->slicer);
-  GNUNET_free (plc);
-}
-
-
-/**
- * Called whenever a client is disconnected.
- * Frees our resources associated with that client.
- *
- * @param cls closure
- * @param client identification of the client
- * @param app_ctx must match @a client
- */
-static void
-client_notify_disconnect (void *cls,
-                          struct GNUNET_SERVICE_Client *client,
-                          void *app_ctx)
-{
-  struct Client *c = app_ctx;
-  struct Place *plc = c->place;
-
-  if (NULL != c->app_id)
-    GNUNET_free (c->app_id);
-
-  GNUNET_free (c);
-
-  if (NULL == plc)
-    return; // application client, nothing to do
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Client (%s) disconnected from place %s\n",
-              plc, (GNUNET_YES == plc->is_host) ? "host" : "guest",
-              GNUNET_h2s (&plc->pub_key_hash));
-
-  struct ClientListItem *cli = plc->clients_head;
-  while (NULL != cli)
-  {
-    if (cli->client == client)
-    {
-      GNUNET_CONTAINER_DLL_remove (plc->clients_head,
-                                   plc->clients_tail,
-                                   cli);
-      GNUNET_free (cli);
-      break;
-    }
-    cli = cli->next;
-  }
-  if (GNUNET_YES == plc->is_disconnecting)
-  {
-    GNUNET_PSYC_slicer_destroy (plc->slicer);
-    GNUNET_free (plc);
-  }
-}
-
-
-/**
- * A new client connected.
- *
- * @param cls NULL
- * @param client client to add
- * @param mq message queue for @a client
- * @return @a client
- */
-static void *
-client_notify_connect (void *cls,
-                       struct GNUNET_SERVICE_Client *client,
-                       struct GNUNET_MQ_Handle *mq)
-{
-  struct Client *c = GNUNET_new (struct Client);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Client %p connected with queue %p\n",
-              client,
-              mq);
-  c->client = client;
-  return c;
-}
-
-
-/**
- * Send message to all clients connected to a place and
- * takes care of freeing @env.
- */
-static void
-place_send_msg (const struct Place *plc,
-                struct GNUNET_MQ_Envelope *env)
-{
-  struct ClientListItem *cli = plc->clients_head;
-  
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Sending message to clients of place.\n", plc);
-  while (NULL != cli)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "Sending message to client %p\n",
-                cli);
-    GNUNET_MQ_send_copy (GNUNET_SERVICE_client_get_mq (cli->client),
-                         env);
-    cli = cli->next;
-  }
-  GNUNET_MQ_discard (env);
-}
-
-
-static void
-place_send_leave_ack (struct Place *plc)
-{
-  struct GNUNET_MQ_Envelope *env;
-  
-  for (struct ClientListItem *cli = plc->clients_head;
-       NULL != cli;
-       cli = cli->next)
-  {
-    env = GNUNET_MQ_msg_header (GNUNET_MESSAGE_TYPE_SOCIAL_PLACE_LEAVE_ACK);
-    GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (cli->client),
-                    env); 
-  }
-}
-
-
-/**
- * Send a result code back to the client.
- *
- * @param client
- *        Client that should receive the result code.
- * @param result_code
- *        Code to transmit.
- * @param op_id
- *        Operation ID in network byte order.
- * @param data
- *        Data payload or NULL.
- * @param data_size
- *        Size of @a data.
- */
-static void
-client_send_result (struct GNUNET_SERVICE_Client *client, uint64_t op_id,
-                    int64_t result_code, const void *data, uint16_t data_size)
-{
-  struct GNUNET_MQ_Envelope *env;
-  struct GNUNET_OperationResultMessage *res;
-
-  env = GNUNET_MQ_msg_extra (res,
-                             data_size,
-                             GNUNET_MESSAGE_TYPE_PSYC_RESULT_CODE);
-  res->result_code = GNUNET_htonll (result_code);
-  res->op_id = op_id;
-  if (0 < data_size)
-    GNUNET_memcpy (&res[1], data, data_size);
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "%p Sending result to client for operation #%" PRIu64 ": "
-              "%" PRId64 " (size: %u)\n",
-             client, GNUNET_ntohll (op_id), result_code, data_size);
-  GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client), env);
-}
-
-
-static void
-client_send_host_enter_ack (struct GNUNET_SERVICE_Client *client,
-                            struct Host *hst, uint32_t result)
-{
-  struct GNUNET_MQ_Envelope *env;
-  struct HostEnterAck *hack;
-  struct Place *plc = &hst->place;
-
-  env = GNUNET_MQ_msg (hack,
-                       GNUNET_MESSAGE_TYPE_SOCIAL_HOST_ENTER_ACK); 
-  hack->result_code = htonl (result);
-  hack->max_message_id = GNUNET_htonll (plc->max_message_id);
-  hack->place_pub_key = plc->pub_key;
-
-  if (NULL != client)
-    GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client),
-                    env);
-  else
-    place_send_msg (plc, env);
-}
-
-
-/**
- * Called after a PSYC master is started.
- */
-static void
-psyc_master_started (void *cls, int result, uint64_t max_message_id)
-{
-  struct Host *hst = cls;
-  struct Place *plc = &hst->place;
-  plc->max_message_id = max_message_id;
-  plc->is_ready = GNUNET_YES;
-
-  client_send_host_enter_ack (NULL, hst, result);
-}
-
-
-/**
- * Called when a PSYC master receives a join request.
- */
-static void
-psyc_recv_join_request (void *cls,
-                        const struct GNUNET_PSYC_JoinRequestMessage *req,
-                        const struct GNUNET_CRYPTO_EcdsaPublicKey *slave_key,
-                        const struct GNUNET_PSYC_Message *join_msg,
-                        struct GNUNET_PSYC_JoinHandle *jh)
-{
-  struct Host *hst = cls;
-  struct GNUNET_HashCode slave_key_hash;
-  GNUNET_CRYPTO_hash (slave_key, sizeof (*slave_key), &slave_key_hash);
-  GNUNET_CONTAINER_multihashmap_put (hst->join_reqs, &slave_key_hash, jh,
-                                     GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
-  place_send_msg (&hst->place,
-                  GNUNET_MQ_msg_copy (&req->header));
-}
-
-
-/**
- * Called after a PSYC slave is connected.
- */
-static void
-psyc_slave_connected (void *cls, int result, uint64_t max_message_id)
-{
-  struct GNUNET_PSYC_CountersResultMessage *res;
-  struct GNUNET_MQ_Envelope *env;
-  struct Guest *gst = cls;
-  struct Place *plc = &gst->place;
-
-  plc->max_message_id = max_message_id;
-  plc->is_ready = GNUNET_YES;
-  env = GNUNET_MQ_msg (res,
-                       GNUNET_MESSAGE_TYPE_SOCIAL_GUEST_ENTER_ACK);
-  res->result_code =
-    (result != GNUNET_SYSERR) ? htonl (GNUNET_OK) : htonl (GNUNET_SYSERR);
-  res->max_message_id = GNUNET_htonll (plc->max_message_id);
-  place_send_msg (plc, env);
-}
-
-
-static void
-slave_parted_after_join_decision (void *cls)
-{
-  struct Guest *gst = cls;
-
-  GNUNET_assert (NULL != gst->join_dcsn);
-  place_send_msg (&gst->place, GNUNET_MQ_msg_copy (&gst->join_dcsn->header));
-}
-
-
-/**
- * Called when a PSYC slave receives a join decision.
- */
-static void
-psyc_recv_join_dcsn (void *cls,
-                     const struct GNUNET_PSYC_JoinDecisionMessage *dcsn,
-                     int is_admitted,
-                     const struct GNUNET_PSYC_Message *join_msg)
-{
-  struct Guest *gst = cls;
-
-  gst->join_dcsn = GNUNET_malloc (dcsn->header.size);
-  GNUNET_memcpy (gst->join_dcsn,
-                 dcsn,
-                 dcsn->header.size);
-  if (GNUNET_NO == is_admitted)
-  {
-    GNUNET_PSYC_slave_part (gst->slave,
-                            GNUNET_NO,
-                            &slave_parted_after_join_decision,
-                            gst);
-    gst->slave = NULL;
-    return;
-  }
-  place_send_msg (&gst->place, GNUNET_MQ_msg_copy (&gst->join_dcsn->header));
-}
-
-
-/**
- * Called when a PSYC master or slave receives a message.
- */
-static void
-psyc_recv_message (void *cls,
-                   const struct GNUNET_PSYC_MessageHeader *msg)
-{
-  struct Place *plc = cls;
-
-  char *str = GNUNET_CRYPTO_ecdsa_public_key_to_string (&msg->slave_pub_key);
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Received PSYC message of size %u from %s.\n",
-              plc, ntohs (msg->header.size), str);
-  GNUNET_free (str);
-
-  GNUNET_PSYC_slicer_message (plc->slicer, msg);
-
-  place_send_msg (plc, GNUNET_MQ_msg_copy (&msg->header));
-}
-
-
-/**
- * Relay a message part received from a guest to the the place.
- *
- * @param hst
- *        Host.
- * @param pmsg
- *        Message part.
- * @param nym_pub_key
- *        Nym the message is received from.
- */
-static void
-host_relay_message_part (struct Host *hst,
-                         const struct GNUNET_MessageHeader *pmsg,
-                         const struct GNUNET_CRYPTO_EcdsaPublicKey *nym_pub_key)
-{
-  /* separate queue per nym */
-  struct GNUNET_HashCode nym_pub_hash;
-  GNUNET_CRYPTO_hash (nym_pub_key, sizeof (*nym_pub_key), &nym_pub_hash);
-
-  struct MessageTransmitQueue *
-    tmit_msg = GNUNET_CONTAINER_multihashmap_get (hst->relay_msgs, &nym_pub_hash);
-
-  uint16_t ptype = ntohs (pmsg->type);
-
-  if (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_METHOD == ptype)
-  {
-    /* FIXME: last message was unfinished, cancel & remove from queue */
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-               "FIXME: last message was unfinished.\n");
-  }
-
-  tmit_msg = psyc_transmit_queue_message (&hst->place, NULL, ntohs (pmsg->size),
-                                          pmsg, ptype, ptype, tmit_msg);
-
-  switch (ptype)
-  {
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_METHOD:
-    GNUNET_assert (GNUNET_YES == GNUNET_CONTAINER_multihashmap_put
-                                     (hst->relay_msgs, &nym_pub_hash, tmit_msg,
-                                       GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
-    break;
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_END:
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_CANCEL:
-    GNUNET_assert (GNUNET_YES == GNUNET_CONTAINER_multihashmap_remove
-                                    (hst->relay_msgs, &nym_pub_hash, tmit_msg));
-    break;
-  }
-}
-
-
-/**
- * Received a method to be relayed from a guest.
- */
-static void
-place_recv_relay_method (void *cls,
-                         const struct GNUNET_PSYC_MessageHeader *msg,
-                         const struct GNUNET_PSYC_MessageMethod *meth,
-                         uint64_t message_id,
-                         const char *method_name)
-{
-  struct Place *plc = cls;
-
-  if (GNUNET_PSYC_MESSAGE_REQUEST & ntohs (msg->flags)
-      && GNUNET_YES == plc->is_host)
-  {
-    struct Host *hst = cls;
-    host_relay_message_part (hst, &meth->header, &msg->slave_pub_key);
-  }
-}
-
-
-/**
- * Received a modifier to be relayed from a guest.
- */
-static void
-place_recv_relay_modifier (void *cls,
-                           const struct GNUNET_PSYC_MessageHeader *msg,
-                           const struct GNUNET_MessageHeader *pmsg,
-                           uint64_t message_id,
-                           enum GNUNET_PSYC_Operator oper,
-                           const char *name,
-                           const void *value,
-                           uint16_t value_size,
-                           uint16_t full_value_size)
-{
-  struct Place *plc = cls;
-
-  if (GNUNET_PSYC_MESSAGE_REQUEST & ntohs (msg->flags)
-      && GNUNET_YES == plc->is_host)
-  {
-    struct Host *hst = cls;
-    host_relay_message_part (hst, pmsg, &msg->slave_pub_key);
-  }
-}
-
-/**
- * Received a data fragment to be relayed from a guest.
- */
-static void
-place_recv_relay_data (void *cls,
-                       const struct GNUNET_PSYC_MessageHeader *msg,
-                       const struct GNUNET_MessageHeader *pmsg,
-                       uint64_t message_id,
-                       const void *data,
-                       uint16_t data_size)
-{
-  struct Place *plc = cls;
-
-  if (GNUNET_PSYC_MESSAGE_REQUEST & ntohs (msg->flags)
-      && GNUNET_YES == plc->is_host)
-  {
-    struct Host *hst = cls;
-    host_relay_message_part (hst, pmsg, &msg->slave_pub_key);
-  }
-}
-
-
-/**
- * Received end of message to be relayed from a guest.
- */
-static void
-place_recv_relay_eom (void *cls,
-                      const struct GNUNET_PSYC_MessageHeader *msg,
-                      const struct GNUNET_MessageHeader *pmsg,
-                      uint64_t message_id,
-                      uint8_t is_cancelled)
-{
-  struct Place *plc = cls;
-
-  if (GNUNET_PSYC_MESSAGE_REQUEST & ntohs (msg->flags)
-      && GNUNET_YES == plc->is_host)
-  {
-    struct Host *hst = cls;
-    host_relay_message_part (hst, pmsg, &msg->slave_pub_key);
-  }
-}
-
-
-/**
- * Received a method to be saved to disk.
- *
- * Create a new file for writing the data part of the message into,
- * if the file does not yet exist.
- */
-static void
-place_recv_save_method (void *cls,
-                        const struct GNUNET_PSYC_MessageHeader *msg,
-                        const struct GNUNET_PSYC_MessageMethod *meth,
-                        uint64_t message_id,
-                        const char *method_name)
-{
-  struct Place *plc = cls;
-  plc->file_offset = 0;
-  plc->file_save = GNUNET_NO;
-
-  char *place_pub_str = GNUNET_CRYPTO_eddsa_public_key_to_string (&plc->pub_key);
-  char *filename = NULL;
-  GNUNET_asprintf (&filename, "%s%c" "%s%c" "%s%c" "%" PRIu64 ".part",
-                   dir_social, DIR_SEPARATOR,
-                   "files", DIR_SEPARATOR,
-                   place_pub_str, DIR_SEPARATOR,
-                   GNUNET_ntohll (msg->message_id));
-  GNUNET_free (place_pub_str);
-
-  /* save if does not already exist */
-  if (GNUNET_YES != GNUNET_DISK_file_test (filename))
-  {
-    if (0 == GNUNET_DISK_fn_write (filename, NULL, 0,
-                                   GNUNET_DISK_PERM_USER_READ
-                                   | GNUNET_DISK_PERM_USER_WRITE))
-    {
-      plc->file_save = GNUNET_YES;
-    }
-    else
-    {
-      GNUNET_break (0);
-    }
-  }
-  GNUNET_free (filename);
-}
-
-
-/**
- * Received a data fragment to be saved to disk.
- *
- * Append data fragment to the file.
- */
-static void
-place_recv_save_data (void *cls,
-                      const struct GNUNET_PSYC_MessageHeader *msg,
-                      const struct GNUNET_MessageHeader *pmsg,
-                      uint64_t message_id,
-                      const void *data,
-                      uint16_t data_size)
-{
-  struct Place *plc = cls;
-  if (GNUNET_YES != plc->file_save)
-    return;
-
-  char *place_pub_str = GNUNET_CRYPTO_eddsa_public_key_to_string (&plc->pub_key);
-  char *filename = NULL;
-  GNUNET_asprintf (&filename, "%s%c" "%s%c" "%s%c" "%" PRIu64 ".part",
-                   dir_social, DIR_SEPARATOR,
-                   "files", DIR_SEPARATOR,
-                   place_pub_str, DIR_SEPARATOR,
-                   GNUNET_ntohll (msg->message_id));
-  GNUNET_free (place_pub_str);
-  if (GNUNET_SYSERR == GNUNET_DISK_directory_create_for_file (filename))
-  {
-    GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, "create", filename);
-    GNUNET_free (filename);
-    return;
-  }
-
-  struct GNUNET_DISK_FileHandle *
-    fh = GNUNET_DISK_file_open (filename, GNUNET_DISK_OPEN_WRITE,
-                                GNUNET_DISK_PERM_NONE);
-  if (NULL != fh)
-  {
-    if (plc->file_offset != GNUNET_DISK_file_seek
-                           (fh, plc->file_offset, GNUNET_DISK_SEEK_SET)) {
-      GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, "seek", filename);
-      GNUNET_DISK_file_close (fh);
-      GNUNET_free (filename);
-      return;
-    }
-    GNUNET_DISK_file_write (fh, data, data_size);
-    GNUNET_DISK_file_close (fh);
-    GNUNET_free (filename);
-  }
-  else
-  {
-    GNUNET_free (filename);
-    GNUNET_break (0);
-  }
-  plc->file_offset += data_size;
-}
-
-
-/**
- * Received end of message to be saved to disk.
- *
- * Remove .part ending from the filename.
- */
-static void
-place_recv_save_eom (void *cls,
-                     const struct GNUNET_PSYC_MessageHeader *msg,
-                     const struct GNUNET_MessageHeader *pmsg,
-                     uint64_t message_id,
-                     uint8_t is_cancelled)
-{
-  struct Place *plc = cls;
-  if (GNUNET_YES != plc->file_save)
-    return;
-
-  char *place_pub_str = GNUNET_CRYPTO_eddsa_public_key_to_string (&plc->pub_key);
-  char *fn = NULL;
-  GNUNET_asprintf (&fn, "%s%c%s%c%s%c%" PRIu64,
-                   dir_social, DIR_SEPARATOR,
-                   "files", DIR_SEPARATOR,
-                   place_pub_str, DIR_SEPARATOR,
-                   GNUNET_ntohll (msg->message_id));
-  GNUNET_free (place_pub_str);
-  char *fn_part = NULL;
-  GNUNET_asprintf (&fn_part, "%s.part", fn);
-
-  if (rename (fn_part, fn)) {
-      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                 "Failed to rename %s into %s: %s (%d)\n",
-                 fn_part, fn, strerror (errno), errno);
-  }
-
-  GNUNET_free (fn);
-  GNUNET_free (fn_part);
-}
-
-
-/**
- * Initialize place data structure.
- */
-static void
-place_init (struct Place *plc)
-{
-  plc->slicer = GNUNET_PSYC_slicer_create ();
-}
-
-
-/**
- * Add a place to the @e places hash map.
- *
- * @param ereq
- *        Entry request.
- *
- * @return #GNUNET_OK if the place was added
- *         #GNUNET_NO if the place already exists in the hash map
- *         #GNUNET_SYSERR on error
- */
-static int
-place_add (const struct PlaceEnterRequest *ereq)
-{
-  struct EgoPlacePublicKey ego_place_pub_key = {
-    .ego_pub_key = ereq->ego_pub_key,
-    .place_pub_key = ereq->place_pub_key,
-  };
-  struct GNUNET_HashCode ego_place_pub_hash;
-  GNUNET_CRYPTO_hash (&ego_place_pub_key, sizeof (ego_place_pub_key), &ego_place_pub_hash);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "  ego_place_pub_hash = %s\n", GNUNET_h2s (&ego_place_pub_hash));
-
-  struct GNUNET_MessageHeader *
-    place_msg = GNUNET_CONTAINER_multihashmap_get (places, &ego_place_pub_hash);
-  if (NULL != place_msg)
-    return GNUNET_NO;
-
-  place_msg = GNUNET_copy_message (&ereq->header);
-  if (GNUNET_OK != GNUNET_CONTAINER_multihashmap_put (places, &ego_place_pub_hash, place_msg,
-                                                      GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST))
-  {
-    GNUNET_break (0);
-    GNUNET_free (place_msg);
-    return GNUNET_SYSERR;
-  }
-
-  return GNUNET_OK;
-}
-
-/**
- * Add a place to the @e app_places hash map.
- *
- * @param app_id
- *        Application ID.
- * @param ereq
- *        Entry request.
- *
- * @return #GNUNET_OK if the place was added
- *         #GNUNET_NO if the place already exists in the hash map
- *         #GNUNET_SYSERR on error
- */
-static int
-app_place_add (const char *app_id,
-               const struct PlaceEnterRequest *ereq)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Adding app place to hashmap:\n");
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "  app_id = %s\n", app_id);
-
-  struct GNUNET_HashCode app_id_hash;
-  GNUNET_CRYPTO_hash (app_id, strlen (app_id) + 1, &app_id_hash);
-
-  struct EgoPlacePublicKey ego_place_pub_key = {
-    .ego_pub_key = ereq->ego_pub_key,
-    .place_pub_key = ereq->place_pub_key,
-  };
-  struct GNUNET_HashCode ego_place_pub_hash;
-  GNUNET_CRYPTO_hash (&ego_place_pub_key, sizeof (ego_place_pub_key), &ego_place_pub_hash);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "  ego_place_pub_hash = %s\n", GNUNET_h2s (&ego_place_pub_hash));
-
-  struct GNUNET_CONTAINER_MultiHashMap *
-    app_places = GNUNET_CONTAINER_multihashmap_get (apps_places, &app_id_hash);
-  if (NULL == app_places)
-  {
-    app_places = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_NO);
-    GNUNET_CONTAINER_multihashmap_put (apps_places, &app_id_hash, app_places,
-                                       GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
-  }
-
-  if (GNUNET_YES == GNUNET_CONTAINER_multihashmap_contains (app_places, &ego_place_pub_hash))
-    return GNUNET_NO;
-
-  if (GNUNET_SYSERR == place_add (ereq))
-  {
-    return GNUNET_SYSERR;
-  }
-
-  if (GNUNET_OK != GNUNET_CONTAINER_multihashmap_put (app_places, &ego_place_pub_hash, NULL,
-                                                      GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST))
-  {
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-  return GNUNET_OK;
-}
-
-
-/**
- * Save place entry message to disk.
- *
- * @param app_id
- *        Application ID.
- * @param ereq
- *        Entry request message.
- */
-static int
-app_place_save (const char *app_id,
-                const struct PlaceEnterRequest *ereq)
-{
-  if (GNUNET_SYSERR == app_place_add (app_id, ereq))
-  {
-    GNUNET_assert (0);
-  }
-
-  if (NULL == dir_places)
-    return GNUNET_SYSERR;
-
-  char *ego_pub_str = GNUNET_CRYPTO_ecdsa_public_key_to_string (&ereq->ego_pub_key);
-  char *place_pub_str = GNUNET_CRYPTO_eddsa_public_key_to_string (&ereq->place_pub_key);
-  char *filename = NULL;
-  GNUNET_asprintf (&filename, "%s%c" "%s%c" "%s%c" "%s",
-                   dir_social, DIR_SEPARATOR,
-                   "places", DIR_SEPARATOR,
-                   ego_pub_str, DIR_SEPARATOR,
-                   place_pub_str);
-  int ret = GNUNET_DISK_directory_create_for_file (filename);
-  if (GNUNET_OK != ret
-      || 0 > GNUNET_DISK_fn_write (filename, ereq, ntohs (ereq->header.size),
-                                   GNUNET_DISK_PERM_USER_READ
-                                   | GNUNET_DISK_PERM_USER_WRITE))
-  {
-    GNUNET_break (0);
-    ret = GNUNET_SYSERR;
-  }
-  GNUNET_free (filename);
-
-  if (ret == GNUNET_OK)
-  {
-    GNUNET_asprintf (&filename, "%s%c" "%s%c" "%s%c" "%s%c" "%s",
-                     dir_social, DIR_SEPARATOR,
-                     "apps", DIR_SEPARATOR,
-                     app_id, DIR_SEPARATOR,
-                     ego_pub_str, DIR_SEPARATOR,
-                     place_pub_str);
-    ret = GNUNET_DISK_directory_create_for_file (filename);
-    if (GNUNET_OK != ret
-        || 0 > GNUNET_DISK_fn_write (filename, "", 0,
-                                     GNUNET_DISK_PERM_USER_READ
-                                     | GNUNET_DISK_PERM_USER_WRITE))
-    {
-      GNUNET_break (0);
-      ret = GNUNET_SYSERR;
-    }
-    GNUNET_free (filename);
-  }
-  GNUNET_free (ego_pub_str);
-  GNUNET_free (place_pub_str);
-  return ret;
-}
-
-
-int
-app_place_remove (const char *app_id,
-                  const struct GNUNET_CRYPTO_EcdsaPublicKey *ego_pub_key,
-                  const struct GNUNET_CRYPTO_EddsaPublicKey *place_pub_key)
-{
-  struct GNUNET_HashCode ego_pub_hash;
-  struct GNUNET_HashCode place_pub_hash;
-  GNUNET_CRYPTO_hash (ego_pub_key, sizeof (*ego_pub_key), &ego_pub_hash);
-  GNUNET_CRYPTO_hash (place_pub_key, sizeof (*place_pub_key), &place_pub_hash);
-
-  char *ego_pub_str = GNUNET_CRYPTO_ecdsa_public_key_to_string (ego_pub_key);
-  char *place_pub_str = GNUNET_CRYPTO_eddsa_public_key_to_string (place_pub_key);
-  char *app_place_filename = NULL;
-  GNUNET_asprintf (&app_place_filename,
-                   "%s%c" "%s%c" "%s%c" "%s%c" "%s",
-                   dir_social, DIR_SEPARATOR,
-                   "apps", DIR_SEPARATOR,
-                   app_id, DIR_SEPARATOR,
-                   ego_pub_str, DIR_SEPARATOR,
-                   place_pub_str);
-  GNUNET_free (ego_pub_str);
-  GNUNET_free (place_pub_str);
-
-  struct GNUNET_HashCode app_id_hash;
-  GNUNET_CRYPTO_hash (app_id, strlen (app_id) + 1, &app_id_hash);
-
-  struct GNUNET_CONTAINER_MultiHashMap *
-    app_places = GNUNET_CONTAINER_multihashmap_get (apps_places, &app_id_hash);
-
-  if (NULL != app_places)
-    GNUNET_CONTAINER_multihashmap_remove (app_places, &place_pub_hash, NULL);
-
-  int ret = GNUNET_OK;
-
-  if (0 != unlink (app_place_filename))
-  {
-    GNUNET_break (0);
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "Error removing app place file: %s: %s (%d)\n",
-                app_place_filename, strerror (errno), errno);
-    ret = GNUNET_SYSERR;
-  }
-  GNUNET_free (app_place_filename);
-
-  return ret;
-}
-
-
-/**
- * Enter place as host.
- *
- * @param hreq
- *        Host entry request.
- * @param[out] ret_hst
- *        Returned Host struct.
- *
- * @return #GNUNET_YES if the host entered the place just now,
- *         #GNUNET_NO  if the place is already entered,
- *         #GNUNET_SYSERR if place_pub_key was set
- *                        but its private key was not found
- */
-static int
-host_enter (const struct HostEnterRequest *hreq, struct Host **ret_hst)
-{
-  int ret = GNUNET_NO;
-  struct GNUNET_HashCode place_pub_hash;
-  GNUNET_CRYPTO_hash (&hreq->place_pub_key, sizeof (hreq->place_pub_key),
-                      &place_pub_hash);
-  struct Host *hst = GNUNET_CONTAINER_multihashmap_get (hosts, &place_pub_hash);
-
-  if (NULL == hst)
-  {
-    hst = GNUNET_new (struct Host);
-    hst->policy = hreq->policy;
-    hst->join_reqs = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_NO);
-    hst->relay_msgs = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_NO);
-
-    struct Place *plc = &hst->place;
-    place_init (plc);
-    plc->is_host = GNUNET_YES;
-    plc->pub_key = hreq->place_pub_key;
-    plc->pub_key_hash = place_pub_hash;
-
-    GNUNET_CONTAINER_multihashmap_put (hosts, &plc->pub_key_hash, plc,
-                                       GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
-    hst->master = GNUNET_PSYC_master_start (cfg, &hreq->place_key, hst->policy,
-                                            &psyc_master_started,
-                                            &psyc_recv_join_request,
-                                            &psyc_recv_message, NULL, hst);
-    plc->channel = GNUNET_PSYC_master_get_channel (hst->master);
-    ret = GNUNET_YES;
-  }
-
-  if (NULL != ret_hst)
-    *ret_hst = hst;
-  return ret;
-}
-
-
-static int
-msg_proc_parse (const struct MsgProcRequest *mpreq,
-                uint32_t *flags,
-                const char **method_prefix,
-                struct GNUNET_HashCode *method_hash)
-{
-  ssize_t method_size = ntohs (mpreq->header.size) - sizeof (*mpreq);
-  uint16_t offset;
-
-  if (method_size < 0)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "MsgProcRequest has invalid size\n");
-    return GNUNET_SYSERR;
-  }
-
-  offset = GNUNET_STRINGS_buffer_tokenize ((const char *) &mpreq[1],
-                                           method_size,
-                                           1,
-                                           method_prefix);
-  if (0 == offset || offset != method_size || *method_prefix == NULL)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "MsgProcRequest contains invalid method\n");
-    return GNUNET_SYSERR;
-  }
-  GNUNET_CRYPTO_hash (*method_prefix, (size_t) method_size, method_hash);
-  *flags = ntohl (mpreq->flags);
-  return GNUNET_OK;
-}
-
-
-void
-app_notify_place (const struct GNUNET_MessageHeader *msg,
-                  struct GNUNET_SERVICE_Client *client)
-{
-  struct AppPlaceMessage *amsg;
-  struct GNUNET_MQ_Envelope *env;
-  uint16_t msg_size = ntohs (msg->size);
-  
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Sending place notification of type %u to client.\n",
-              client, ntohs (msg->type));
-  switch (ntohs (msg->type))
-  {
-  case GNUNET_MESSAGE_TYPE_SOCIAL_HOST_ENTER:
-  {
-    struct HostEnterRequest *hreq = (struct HostEnterRequest *) msg;
-    if (msg_size < sizeof (struct HostEnterRequest))
-      return;
-    env = GNUNET_MQ_msg (amsg,
-                         GNUNET_MESSAGE_TYPE_SOCIAL_APP_PLACE);
-    // FIXME: also notify about not entered places
-    amsg->place_state = GNUNET_SOCIAL_PLACE_STATE_ENTERED;
-    amsg->is_host = GNUNET_YES;
-    amsg->ego_pub_key = hreq->ego_pub_key;
-    amsg->place_pub_key = hreq->place_pub_key;
-    GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client),
-                    env);
-    break;
-  }
-  case GNUNET_MESSAGE_TYPE_SOCIAL_GUEST_ENTER:
-  {
-    if (msg_size < sizeof (struct GuestEnterRequest))
-      return;
-    struct GuestEnterRequest *greq = (struct GuestEnterRequest *) msg;
-    env = GNUNET_MQ_msg (amsg,
-                         GNUNET_MESSAGE_TYPE_SOCIAL_APP_PLACE);
-    // FIXME: also notify about not entered places
-    amsg->place_state = GNUNET_SOCIAL_PLACE_STATE_ENTERED;
-    amsg->is_host = GNUNET_NO;
-    amsg->ego_pub_key = greq->ego_pub_key;
-    amsg->place_pub_key = greq->place_pub_key;
-    GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client),
-                    env);
-    break;
-  }
-  default:
-    return;
-  }
-}
-
-
-void
-app_notify_place_end (struct GNUNET_SERVICE_Client *client)
-{
-  struct GNUNET_MQ_Envelope *env;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Sending end of place list notification to client\n",
-              client);
-  env = GNUNET_MQ_msg_header (GNUNET_MESSAGE_TYPE_SOCIAL_APP_PLACE_END);
-  GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client),
-                  env);
-}
-
-
-void
-app_notify_ego (struct Ego *ego, struct GNUNET_SERVICE_Client *client)
-{
-  struct AppEgoMessage *emsg;
-  struct GNUNET_MQ_Envelope *env;
-  size_t name_size = strlen (ego->name) + 1;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Sending ego notification to client: %s\n",
-              client, ego->name);
-  env = GNUNET_MQ_msg_extra (emsg,
-                             name_size,
-                             GNUNET_MESSAGE_TYPE_SOCIAL_APP_EGO);
-  GNUNET_CRYPTO_ecdsa_key_get_public (&ego->key, &emsg->ego_pub_key);
-  GNUNET_memcpy (&emsg[1], ego->name, name_size);
-  GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client),
-                  env);
-}
-
-
-void
-app_notify_ego_end (struct GNUNET_SERVICE_Client *client)
-{
-  struct GNUNET_MQ_Envelope *env;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Sending end of ego list notification to client\n",
-              client);
-  env = GNUNET_MQ_msg_header (GNUNET_MESSAGE_TYPE_SOCIAL_APP_EGO_END);
-  GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client),
-                  env);
-}
-
-
-int
-app_place_entry_notify (void *cls, const struct GNUNET_HashCode *key, void *value)
-{
-  struct GNUNET_MessageHeader *
-    msg = GNUNET_CONTAINER_multihashmap_get (places, key);
-  if (NULL != msg)
-    app_notify_place (msg, cls);
-  return GNUNET_YES;
-}
-
-
-int
-ego_entry (void *cls, const struct GNUNET_HashCode *key, void *value)
-{
-  app_notify_ego (value, cls);
-  return GNUNET_YES;
-}
-
-
-static int
-check_client_msg_proc_set (void *cls,
-                           const struct MsgProcRequest *mpreq)
-{
-  return GNUNET_OK;
-}
-
-
-/**
- * Handle a client setting message proccesing flags for a method prefix.
- */
-static void
-handle_client_msg_proc_set (void *cls,
-                            const struct MsgProcRequest *mpreq)
-{
-  struct Client *c = cls;
-  struct GNUNET_SERVICE_Client *client = c->client;
-  struct Place *plc = c->place;
-  if (NULL == plc)
-  {
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-
-  const char *method_prefix = NULL;
-  uint32_t flags = 0;
-  struct GNUNET_HashCode method_hash;
-
-  if (GNUNET_OK !=
-      msg_proc_parse (mpreq, &flags, &method_prefix, &method_hash))
-  {
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-#if 0
-  GNUNET_PSYC_slicer_method_remove (plc->slicer, method_prefix,
-                                    place_recv_relay_method,
-                                    place_recv_relay_modifier,
-                                    place_recv_relay_data,
-                                    place_recv_relay_eom);
-  GNUNET_PSYC_slicer_method_remove (plc->slicer, method_prefix,
-                                    place_recv_save_method,
-                                    NULL,
-                                    place_recv_save_data,
-                                    place_recv_save_eom);
-#endif
-  if (flags & GNUNET_SOCIAL_MSG_PROC_RELAY)
-  {
-    GNUNET_PSYC_slicer_method_add (plc->slicer, method_prefix, NULL,
-                                   place_recv_relay_method,
-                                   place_recv_relay_modifier,
-                                   place_recv_relay_data,
-                                   place_recv_relay_eom,
-                                   plc);
-  }
-  if (flags & GNUNET_SOCIAL_MSG_PROC_SAVE)
-  {
-    GNUNET_PSYC_slicer_method_add (plc->slicer, method_prefix, NULL,
-                                   place_recv_save_method,
-                                   NULL,
-                                   place_recv_save_data,
-                                   place_recv_save_eom,
-                                   plc);
-  }
-
-  /** @todo Save flags to be able to resume relaying/saving after restart */
-
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-/**
- * Handle a connecting client requesting to clear all relay rules.
- */
-static void
-handle_client_msg_proc_clear (void *cls,
-                              const struct GNUNET_MessageHeader *msg)
-{
-  struct Client *c = cls;
-  struct GNUNET_SERVICE_Client *client = c->client;
-  struct Place *plc = c->place;
-  if (NULL == plc)
-  {
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-
-  GNUNET_PSYC_slicer_clear (plc->slicer);
-
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-static int
-check_client_host_enter (void *cls,
-                         const struct HostEnterRequest *hr)
-{
-  return GNUNET_OK;
-}
-
-
-/**
- * Handle a connecting client entering a place as host.
- */
-static void
-handle_client_host_enter (void *cls,
-                          const struct HostEnterRequest *hr)
-{
-  struct Client *c = cls;
-  struct GNUNET_SERVICE_Client *client = c->client;
-  struct HostEnterRequest *
-    hreq = (struct HostEnterRequest *) GNUNET_copy_message (&hr->header);
-
-  uint8_t app_id_size = ntohs (hreq->header.size) - sizeof (*hreq);
-  const char *app_id = NULL;
-  uint16_t offset = GNUNET_STRINGS_buffer_tokenize ((const char *) &hreq[1],
-                                                    app_id_size, 1, &app_id);
-  if (0 == offset || offset != app_id_size || app_id == NULL)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "offset = %u, app_id_size = %u, app_id = %s\n",
-                offset, app_id_size, app_id);
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-
-  struct Host *hst = NULL;
-  struct Place *plc = NULL;
-  int ret = GNUNET_OK;
-
-  struct GNUNET_CRYPTO_EddsaPublicKey empty_pub_key;
-  memset (&empty_pub_key, 0, sizeof (empty_pub_key));
-
-  if (0 == memcmp (&hreq->place_pub_key, &empty_pub_key, sizeof (empty_pub_key)))
-  { // no public key set: create new private key & save the place
-    struct GNUNET_CRYPTO_EddsaPrivateKey *
-      place_key = GNUNET_CRYPTO_eddsa_key_create ();
-    hreq->place_key = *place_key;
-    GNUNET_CRYPTO_eddsa_key_get_public (place_key, &hreq->place_pub_key);
-    GNUNET_CRYPTO_eddsa_key_clear (place_key);
-    GNUNET_free (place_key);
-
-    app_place_save (app_id, (const struct PlaceEnterRequest *) hreq);
-  }
-
-  switch (host_enter (hreq, &hst))
-  {
-  case GNUNET_YES:
-    plc = c->place = &hst->place;
-    plc->host = hst;
-    break;
-
-  case GNUNET_NO:
-  {
-    plc = c->place = &hst->place;
-    plc->host = hst;
-    client_send_host_enter_ack (client, hst, GNUNET_OK);
-    break;
-  }
-  case GNUNET_SYSERR:
-    ret = GNUNET_SYSERR;
-  }
-
-  if (ret != GNUNET_SYSERR)
-  {
-
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "%p Client connected as host to place %s.\n",
-                hst, GNUNET_h2s (&plc->pub_key_hash));
-
-    struct ClientListItem *cli = GNUNET_new (struct ClientListItem);
-    cli->client = client;
-    GNUNET_CONTAINER_DLL_insert (plc->clients_head, plc->clients_tail, cli);
-    c->place = plc;
-    app_notify_place (&hreq->header, client);
-  }
-
-  GNUNET_CRYPTO_eddsa_key_clear (&hreq->place_key);
-  GNUNET_free (hreq);
-
-  if (GNUNET_OK == ret)
-    GNUNET_SERVICE_client_continue (client);
-  else
-    GNUNET_SERVICE_client_drop (client);
-}
-
-
-/**
- * Enter place as guest.
- *
- * @param greq
- *        Guest entry request.
- * @param[out] ret_gst
- *        Returned Guest struct.
- *
- * @return #GNUNET_YES if the guest entered the place just now,
- *         #GNUNET_NO  if the place is already entered,
- *         #GNUNET_SYSERR on error.
- */
-static int
-guest_enter (const struct GuestEnterRequest *greq, struct Guest **ret_gst)
-{
-  int ret = GNUNET_NO;
-  uint16_t greq_size = ntohs (greq->header.size);
-
-  struct GNUNET_CRYPTO_EcdsaPublicKey ego_pub_key = greq->ego_pub_key;
-  struct GNUNET_HashCode ego_pub_hash;
-  GNUNET_CRYPTO_hash (&ego_pub_key, sizeof (ego_pub_key), &ego_pub_hash);
-  struct Ego *ego = GNUNET_CONTAINER_multihashmap_get (egos, &ego_pub_hash);
-
-  if (NULL == ego)
-  {
-    return GNUNET_SYSERR;
-  }
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "entering as guest\n");
-  struct GNUNET_HashCode place_pub_hash;
-  GNUNET_CRYPTO_hash (&greq->place_pub_key, sizeof (greq->place_pub_key),
-                      &place_pub_hash);
-
-  struct GNUNET_CONTAINER_MultiHashMap *
-    plc_gst = GNUNET_CONTAINER_multihashmap_get (place_guests, &place_pub_hash);
-  struct Guest *gst = NULL;
-  int new_guest;
-
-  if (NULL != plc_gst)
-    gst = GNUNET_CONTAINER_multihashmap_get (plc_gst, &ego_pub_hash);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "plc_gst = %p, gst = %p\n",
-              plc_gst,
-              gst);
-
-  if (NULL == gst)
-  {
-    gst = GNUNET_new (struct Guest);
-    new_guest = GNUNET_YES;
-  }
-  else new_guest = GNUNET_NO;
-
-  if (NULL == gst->slave)
-  {
-    gst->origin = greq->origin;
-    gst->relay_count = ntohl (greq->relay_count);
-
-    uint16_t len;
-    uint16_t remaining = ntohs (greq->header.size) - sizeof (*greq);
-    const char *app_id = (const char *) &greq[1];
-    const char *p = app_id;
-
-    len = strnlen (app_id, remaining);
-    if (len == remaining)
-    {
-      GNUNET_free (gst);
-      GNUNET_break (0);
-      return GNUNET_SYSERR;
-    }
-    p += len + 1;
-    remaining -= len + 1;
-
-    const struct GNUNET_PeerIdentity *relays = NULL;
-    uint16_t relay_size = gst->relay_count * sizeof (*relays);
-    if (remaining < relay_size)
-    {
-      GNUNET_free (gst);
-      GNUNET_break (0);
-      return GNUNET_SYSERR;
-    }
-    if (0 < relay_size)
-      relays = (const struct GNUNET_PeerIdentity *) p;
-    p += relay_size;
-    remaining -= relay_size;
-
-    struct GNUNET_PSYC_Message *join_msg = NULL;
-    uint16_t join_msg_size = 0;
-
-    if (sizeof (struct GNUNET_MessageHeader) <= remaining)
-    {
-      join_msg = (struct GNUNET_PSYC_Message *) p;
-      join_msg_size = ntohs (join_msg->header.size);
-      p += join_msg_size;
-      remaining -= join_msg_size;
-    }
-    if (0 != remaining)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                  "%zu + %u + %u != %u\n",
-                  sizeof (*greq), relay_size, join_msg_size, greq_size);
-      GNUNET_free (gst);
-      GNUNET_break (0);
-      return GNUNET_SYSERR;
-    }
-    if (0 < relay_size)
-    {
-      gst->relays = GNUNET_malloc (relay_size);
-      GNUNET_memcpy (gst->relays, relays, relay_size);
-    }
-
-    gst->join_flags = ntohl (greq->flags);
-
-    struct Place *plc = &gst->place;
-    place_init (plc);
-    plc->is_host = GNUNET_NO;
-    plc->pub_key = greq->place_pub_key;
-    plc->pub_key_hash = place_pub_hash;
-    plc->ego_pub_key = ego_pub_key;
-    plc->ego_pub_hash = ego_pub_hash;
-    plc->ego_key = ego->key;
-
-    if (NULL == plc_gst)
-    {
-      plc_gst = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_YES);
-      (void) GNUNET_CONTAINER_multihashmap_put (place_guests, &plc->pub_key_hash, plc_gst,
-                                                GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
-    }
-    if (GNUNET_YES == new_guest)
-    {
-      (void) GNUNET_CONTAINER_multihashmap_put (plc_gst, &plc->ego_pub_hash, gst,
-                                                GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
-      (void) GNUNET_CONTAINER_multihashmap_put (guests, &plc->pub_key_hash, gst,
-                                              GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
-
-    }
-    gst->slave
-      = GNUNET_PSYC_slave_join (cfg, &plc->pub_key, &plc->ego_key,
-                                gst->join_flags, &gst->origin,
-                                gst->relay_count, gst->relays,
-                                &psyc_recv_message, NULL,
-                                &psyc_slave_connected,
-                                &psyc_recv_join_dcsn,
-                                gst, join_msg);
-    plc->channel = GNUNET_PSYC_slave_get_channel (gst->slave);
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "slave entered channel %p\n",
-                plc->channel);
-    ret = GNUNET_YES;
-  }
-
-  // TODO: explain to automatic code scanners why free(gst) not necessary
-  if (NULL != ret_gst)
-    *ret_gst = gst;
-  return ret;
-}
-
-
-static int
-client_guest_enter (struct Client *c,
-                    const struct GuestEnterRequest *greq)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "client_guest_enter\n");
-  struct GNUNET_PSYC_CountersResultMessage *result_msg;
-  struct GNUNET_MQ_Envelope *env;
-  struct GNUNET_SERVICE_Client *client = c->client;
-  uint16_t remaining = ntohs (greq->header.size) - sizeof (*greq);
-  const char *app_id = NULL;
-  uint16_t offset = GNUNET_STRINGS_buffer_tokenize ((const char *) &greq[1],
-                                                    remaining, 1, &app_id);
-  struct Guest *gst = NULL;
-  struct Place *plc = NULL;
-
-  if (0 == offset)
-  {
-    return GNUNET_SYSERR;
-  }
-  switch (guest_enter (greq, &gst))
-  {
-  case GNUNET_YES:
-  {
-    plc = c->place = &gst->place;
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "guest entered successfully to local place %s\n",
-                GNUNET_h2s (&plc->pub_key_hash));
-    plc->guest = gst;
-    app_place_save (app_id, (const struct PlaceEnterRequest *) greq);
-    app_notify_place (&greq->header, client);
-    break;
-  }
-  case GNUNET_NO:
-  {
-    plc = c->place = &gst->place;
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "guest re-entered successfully to local place %s\n",
-                GNUNET_h2s (&plc->pub_key_hash));
-    plc->guest = gst;
-    env = GNUNET_MQ_msg (result_msg,
-                         GNUNET_MESSAGE_TYPE_SOCIAL_GUEST_ENTER_ACK);
-    result_msg->result_code = htonl (GNUNET_OK);
-    result_msg->max_message_id = GNUNET_htonll (plc->max_message_id);
-    GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client),
-                    env);
-    if (NULL != gst->join_dcsn)
-    { 
-      env = GNUNET_MQ_msg_copy (&gst->join_dcsn->header);
-      GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client),
-                      env);
-    }
-    break;
-  }
-  case GNUNET_SYSERR:
-  {
-    return GNUNET_SYSERR;
-  }
-  }
-
-  struct ClientListItem *cli = GNUNET_new (struct ClientListItem);
-  cli->client = client;
-  GNUNET_CONTAINER_DLL_insert (plc->clients_head, plc->clients_tail, cli);
-  return GNUNET_OK;
-}
-
-
-static int
-check_client_guest_enter (void *cls,
-                          const struct GuestEnterRequest *greq)
-{
-  return GNUNET_OK;
-}
-
-
-/**
- * Handle a connecting client entering a place as guest.
- */
-static void
-handle_client_guest_enter (void *cls,
-                           const struct GuestEnterRequest *greq)
-{
-  struct Client *c = cls;
-
-  if (GNUNET_SYSERR == client_guest_enter (c, greq))
-  {
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (c->client);
-    return;
-  }
-  GNUNET_SERVICE_client_continue (c->client);
-}
-
-
-struct GuestEnterByNameClosure
-{
-  struct Client *client;
-  char *app_id;
-  char *password;
-  struct GNUNET_CRYPTO_EcdsaPublicKey ego_pub_key;
-  struct GNUNET_MessageHeader *join_msg;
-};
-
-
-/**
- * Result of a GNS name lookup for entering a place.
- *
- * @see GNUNET_SOCIAL_guest_enter_by_name
- */
-static void
-gns_result_guest_enter (void *cls, uint32_t rd_count,
-                        const struct GNUNET_GNSRECORD_Data *rd)
-{
-  struct GuestEnterByNameClosure *gcls = cls;
-  struct Client *c = gcls->client;
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p GNS result: %u records.\n",
-              c, rd_count);
-
-  const struct GNUNET_GNSRECORD_PlaceData *
-    rec = (const struct GNUNET_GNSRECORD_PlaceData *) rd->data;
-
-  if (0 == rd_count || rd->data_size < sizeof (*rec))
-  {
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (c->client);
-    return;
-  }
-
-  uint16_t relay_count = ntohl (rec->relay_count);
-  struct GNUNET_PeerIdentity *relays = NULL;
-
-  if (0 < relay_count)
-  {
-    if (rd->data_size == sizeof (*rec) + relay_count * sizeof (struct GNUNET_PeerIdentity))
-    {
-      relays = (struct GNUNET_PeerIdentity *) &rec[1];
-    }
-    else
-    {
-      relay_count = 0;
-      GNUNET_break_op (0);
-    }
-  }
-
-  uint16_t app_id_size = strlen (gcls->app_id) + 1;
-  uint16_t relay_size = relay_count * sizeof (*relays);
-  uint16_t join_msg_size = 0;
-  if (NULL != gcls->join_msg)
-    join_msg_size = ntohs (gcls->join_msg->size);
-  uint16_t greq_size = sizeof (struct GuestEnterRequest)
-    + app_id_size + relay_size + join_msg_size;
-  struct GuestEnterRequest *greq = GNUNET_malloc (greq_size);
-  greq->header.size = htons (greq_size);
-  greq->header.type = htons (GNUNET_MESSAGE_TYPE_SOCIAL_GUEST_ENTER);
-  greq->ego_pub_key = gcls->ego_pub_key;
-  greq->place_pub_key = rec->place_pub_key;
-  greq->origin = rec->origin;
-  greq->relay_count = rec->relay_count;
-
-  void *p = &greq[1];
-  GNUNET_memcpy (p, gcls->app_id, app_id_size);
-  p += app_id_size;
-  GNUNET_memcpy (p, relays, relay_size);
-  p += relay_size;
-  GNUNET_memcpy (p, gcls->join_msg, join_msg_size);
-
-  client_guest_enter (c, greq);
-
-  GNUNET_free (gcls->app_id);
-  if (NULL != gcls->password)
-    GNUNET_free (gcls->password);
-  if (NULL != gcls->join_msg)
-    GNUNET_free (gcls->join_msg);
-  GNUNET_free (gcls);
-  GNUNET_free (greq);
-}
-
-
-static int
-check_client_guest_enter_by_name (void *cls,
-                                  const struct GuestEnterByNameRequest *greq)
-{
-  return GNUNET_OK;
-}
-
-
-/**
- * Handle a connecting client entering a place as guest using a GNS address.
- *
- * Look up GNS address and generate a GuestEnterRequest from that.
- */
-static void
-handle_client_guest_enter_by_name (void *cls,
-                                   const struct GuestEnterByNameRequest *greq)
-{
-  struct Client *c = cls;
-  struct GNUNET_SERVICE_Client *client = c->client;
-
-  struct GuestEnterByNameClosure *gcls = GNUNET_malloc (sizeof (*gcls));
-  gcls->client = c;
-  gcls->ego_pub_key = greq->ego_pub_key;
-
-  const char *p = (const char *) &greq[1];
-  const char *app_id = NULL, *password = NULL, *gns_name = NULL;
-  uint16_t remaining = ntohs (greq->header.size) - sizeof (*greq);
-  uint16_t offset = GNUNET_STRINGS_buffer_tokenize (p, remaining, 3,
-                                                    &app_id,
-                                                    &gns_name,
-                                                    &password);
-  p += offset;
-  remaining -= offset;
-
-  if (0 != offset && sizeof (*gcls->join_msg) <= remaining)
-  {
-    gcls->join_msg = GNUNET_copy_message ((struct GNUNET_MessageHeader *) p);
-    remaining -= ntohs (gcls->join_msg->size);
-  }
-
-  if (0 == offset || 0 != remaining)
-  {
-    if (NULL != gcls->join_msg)
-      GNUNET_free (gcls->join_msg);
-    GNUNET_free (gcls);
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-
-  uint16_t app_id_size = strlen (app_id) + 1;
-  gcls->app_id = GNUNET_malloc (app_id_size);
-  GNUNET_memcpy (gcls->app_id, app_id, app_id_size);
-
-  uint16_t password_size = strlen (password);
-  if (0 < password_size++)
-  {
-    gcls->password = GNUNET_malloc (password_size);
-    GNUNET_memcpy (gcls->password, password, password_size);
-  }
-
-  GNUNET_GNS_lookup (gns, gns_name,
-                     &greq->ego_pub_key,
-                     GNUNET_GNSRECORD_TYPE_PLACE,
-                     GNUNET_GNS_LO_DEFAULT,
-                     &gns_result_guest_enter, gcls);
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-static int
-check_client_app_connect (void *cls,
-                          const struct AppConnectRequest *creq)
-{
-  return GNUNET_OK;
-}
-
-
-/**
- * Handle application connection.
- */
-static void
-handle_client_app_connect (void *cls,
-                           const struct AppConnectRequest *creq)
-{
-  struct Client *c = cls;
-  struct GNUNET_SERVICE_Client *client = c->client;
-  ssize_t app_id_size = ntohs (creq->header.size) - sizeof (*creq);
-  const char *app_id = NULL;
-  uint16_t offset;
-  if (app_id_size < 0)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "AppConnectRequest has invalid size\n");
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-
-  offset = GNUNET_STRINGS_buffer_tokenize ((const char *) &creq[1],
-                                           (size_t) app_id_size,
-                                           1, 
-                                           &app_id);
-  if (0 == offset || offset != app_id_size)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "AppConnectRequest contains invalid app ID\n"); 
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-
-  struct GNUNET_HashCode app_id_hash;
-  GNUNET_CRYPTO_hash (app_id, (size_t) app_id_size, &app_id_hash);
-
-  GNUNET_CONTAINER_multihashmap_iterate (egos, ego_entry, client);
-  app_notify_ego_end (client);
-
-  struct GNUNET_CONTAINER_MultiHashMap *
-    app_places = GNUNET_CONTAINER_multihashmap_get (apps_places, &app_id_hash);
-  if (NULL != app_places)
-    GNUNET_CONTAINER_multihashmap_iterate (app_places, app_place_entry_notify, client);
-  app_notify_place_end (client);
-
-  struct ClientListItem *cli = GNUNET_new (struct ClientListItem);
-  cli->client = client;
-  struct Application *app = GNUNET_CONTAINER_multihashmap_get (apps,
-                                                               &app_id_hash);
-  if (NULL == app) {
-    app = GNUNET_malloc (sizeof (*app));
-    (void) GNUNET_CONTAINER_multihashmap_put (apps, &app_id_hash, app,
-                                              GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
-  }
-  GNUNET_CONTAINER_DLL_insert (app->clients_head, app->clients_tail, cli);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Application %s connected.\n", app, app_id);
-
-  c->app_id = GNUNET_malloc ((size_t) app_id_size);
-  GNUNET_memcpy (c->app_id, app_id, (size_t) app_id_size);
-
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-/**
- * Handle application detach request.
- */
-static void
-handle_client_app_detach (void *cls,
-                          const struct AppDetachRequest *req)
-{
-  struct Client *c = cls;
-  struct GNUNET_SERVICE_Client *client = c->client;
-
-  int ret = app_place_remove (c->app_id, &req->ego_pub_key, &req->place_pub_key);
-  client_send_result (client, req->op_id, ret, NULL, 0);
-
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-static void
-place_leave_cb (void *cls)
-{
-  struct Place *plc = cls;
-
-  place_send_leave_ack (plc);
-  (GNUNET_YES == plc->is_host)
-    ? cleanup_host ((struct Host *) plc)
-    : cleanup_guest ((struct Guest *) plc);
-}
-
-
-/**
- * Handle application leave request.
- */
-static void
-handle_client_place_leave (void *cls,
-                           const struct GNUNET_MessageHeader *msg)
-{
-  struct Client *c = cls;
-  struct GNUNET_SERVICE_Client *client = c->client;
-  struct Place *plc = c->place;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "got leave request from %s for place %s",
-              plc->is_host? "host" : "slave",
-              GNUNET_h2s (&plc->pub_key_hash)); 
-  if (NULL == plc)
-  {
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-
-  if (GNUNET_YES != plc->is_disconnecting)
-  {
-    plc->is_disconnecting = GNUNET_YES;
-    if (plc->is_host)
-    {
-      struct Host *host = plc->host;
-      GNUNET_assert (NULL != host);
-      GNUNET_PSYC_master_stop (host->master, GNUNET_NO, &place_leave_cb, plc);
-    }
-    else
-    {
-      struct Guest *guest = plc->guest;
-      GNUNET_assert (NULL != guest);
-      GNUNET_PSYC_slave_part (guest->slave, GNUNET_NO, &place_leave_cb, plc);
-    }
-  }
-  else
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "got leave request but place is already leaving\n");
-  }
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-struct JoinDecisionClosure
-{
-  int32_t is_admitted;
-  struct GNUNET_PSYC_Message *msg;
-};
-
-
-/**
- * Iterator callback for responding to join requests.
- */
-static int
-psyc_send_join_decision (void *cls, const struct GNUNET_HashCode *pub_key_hash,
-                         void *value)
-{
-  struct JoinDecisionClosure *jcls = cls;
-  struct GNUNET_PSYC_JoinHandle *jh = value;
-  // FIXME: add relays
-  GNUNET_PSYC_join_decision (jh, jcls->is_admitted, 0, NULL, jcls->msg);
-  return GNUNET_YES;
-}
-
-
-static int
-check_client_join_decision (void *cls,
-                            const struct GNUNET_PSYC_JoinDecisionMessage *dcsn)
-{
-  return GNUNET_OK;
-}
-
-
-/**
- * Handle an entry decision from a host client.
- */
-static void
-handle_client_join_decision (void *cls,
-                             const struct GNUNET_PSYC_JoinDecisionMessage *dcsn)
-{
-  struct Client *c = cls;
-  struct GNUNET_SERVICE_Client *client = c->client;
-  struct Place *plc = c->place;
-  if (NULL == plc || GNUNET_YES != plc->is_host)
-  {
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-  struct Host *hst = plc->host;
-
-  struct JoinDecisionClosure jcls;
-  jcls.is_admitted = ntohl (dcsn->is_admitted);
-  jcls.msg
-    = (sizeof (*dcsn) + sizeof (*jcls.msg) <= ntohs (dcsn->header.size))
-    ? (struct GNUNET_PSYC_Message *) &dcsn[1]
-    : NULL;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "jcls.msg = %p\n",
-              jcls.msg);
-  struct GNUNET_HashCode slave_pub_hash;
-  GNUNET_CRYPTO_hash (&dcsn->slave_pub_key, sizeof (dcsn->slave_pub_key),
-                      &slave_pub_hash);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Got join decision (%d) from client for place %s..\n",
-              hst, jcls.is_admitted, GNUNET_h2s (&plc->pub_key_hash));
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p ..and slave %s.\n",
-              hst, GNUNET_h2s (&slave_pub_hash));
-
-  GNUNET_CONTAINER_multihashmap_get_multiple (hst->join_reqs, &slave_pub_hash,
-                                              &psyc_send_join_decision, &jcls);
-  GNUNET_CONTAINER_multihashmap_remove_all (hst->join_reqs, &slave_pub_hash);
-
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-/**
- * Send acknowledgement to a client.
- *
- * Sent after a message fragment has been passed on to multicast.
- *
- * @param plc The place struct for the client.
- */
-static void
-send_message_ack (struct Place *plc, struct GNUNET_SERVICE_Client *client)
-{
-  struct GNUNET_MQ_Envelope *env;
-
-  env = GNUNET_MQ_msg_header (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_ACK);
-  GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client),
-                  env);
-}
-
-
-/**
- * Proceed to the next message part in the transmission queue.
- *
- * @param plc
- *        Place where the transmission is going on.
- * @param tmit_msg
- *        Currently transmitted message.
- * @param tmit_frag
- *        Currently transmitted message fragment.
- *
- * @return @a tmit_frag, or NULL if reached the end of fragment.
- */
-static struct FragmentTransmitQueue *
-psyc_transmit_queue_next_part (struct Place *plc,
-                               struct MessageTransmitQueue *tmit_msg,
-                               struct FragmentTransmitQueue *tmit_frag)
-{
-  uint16_t psize = ntohs (tmit_frag->next_part->size);
-  if ((char *) tmit_frag->next_part + psize - ((char *) &tmit_frag[1])
-      < tmit_frag->size)
-  {
-    tmit_frag->next_part
-      = (struct GNUNET_MessageHeader *) ((char *) tmit_frag->next_part + psize);
-  }
-  else /* Reached end of current fragment. */
-  {
-    if (NULL != tmit_frag->client)
-      send_message_ack (plc, tmit_frag->client);
-    GNUNET_CONTAINER_DLL_remove (tmit_msg->frags_head, tmit_msg->frags_tail, tmit_frag);
-    GNUNET_free (tmit_frag);
-    tmit_frag = NULL;
-  }
-  return tmit_frag;
-}
-
-
-/**
- * Proceed to next message in transmission queue.
- *
- * @param plc
- *        Place where the transmission is going on.
- * @param tmit_msg
- *        Currently transmitted message.
- *
- * @return The next message in queue, or NULL if queue is empty.
- */
-static struct MessageTransmitQueue *
-psyc_transmit_queue_next_msg (struct Place *plc,
-                              struct MessageTransmitQueue *tmit_msg)
-{
-  GNUNET_CONTAINER_DLL_remove (plc->tmit_msgs_head, plc->tmit_msgs_tail, tmit_msg);
-  GNUNET_free (tmit_msg);
-  return plc->tmit_msgs_head;
-}
-
-
-/**
- * Callback for data transmission to PSYC.
- */
-static int
-psyc_transmit_notify_data (void *cls, uint16_t *data_size, void *data)
-{
-  struct Place *plc = cls;
-  struct MessageTransmitQueue *tmit_msg = plc->tmit_msgs_head;
-  GNUNET_assert (NULL != tmit_msg);
-  struct FragmentTransmitQueue *tmit_frag = tmit_msg->frags_head;
-  if (NULL == tmit_frag)
-  { /* Rest of the message have not arrived yet, pause transmission */
-    *data_size = 0;
-    return GNUNET_NO;
-  }
-  struct GNUNET_MessageHeader *pmsg = tmit_frag->next_part;
-  if (NULL == pmsg)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "%p psyc_transmit_notify_data: nothing to send.\n", plc);
-    *data_size = 0;
-    return GNUNET_NO;
-  }
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p psyc_transmit_notify_data()\n", plc);
-  GNUNET_PSYC_log_message (GNUNET_ERROR_TYPE_DEBUG, pmsg);
-
-  uint16_t ptype = ntohs (pmsg->type);
-  uint16_t pdata_size = ntohs (pmsg->size) - sizeof (*pmsg);
-  int ret;
-
-  switch (ptype)
-  {
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_DATA:
-    if (*data_size < pdata_size)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "%p psyc_transmit_notify_data: buffer size too small for data.\n", plc);
-      *data_size = 0;
-      return GNUNET_NO;
-    }
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "%p psyc_transmit_notify_data: sending %u bytes.\n",
-                plc, pdata_size);
-
-    *data_size = pdata_size;
-    GNUNET_memcpy (data, &pmsg[1], *data_size);
-    ret = GNUNET_NO;
-    break;
-
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_END:
-    *data_size = 0;
-    ret = GNUNET_YES;
-    break;
-
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_CANCEL:
-    *data_size = 0;
-    ret = GNUNET_SYSERR;
-    break;
-
-  default:
-    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-                "%p psyc_transmit_notify_data: unexpected message part of type %u.\n",
-                plc, ptype);
-    ret = GNUNET_SYSERR;
-  }
-
-  if (GNUNET_SYSERR == ret && GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_CANCEL != ptype)
-  {
-    *data_size = 0;
-    tmit_msg = psyc_transmit_queue_next_msg (plc, tmit_msg);
-    GNUNET_SERVICE_client_drop (tmit_frag->client);
-    GNUNET_SCHEDULER_add_now (&cleanup_place, plc);
-    return ret;
-  }
-  else
-  {
-    tmit_frag = psyc_transmit_queue_next_part (plc, tmit_msg, tmit_frag);
-    if (NULL != tmit_frag)
-    {
-      struct GNUNET_MessageHeader *pmsg = tmit_frag->next_part;
-      ptype = ntohs (pmsg->type);
-      switch (ptype)
-      {
-      case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_END:
-        ret = GNUNET_YES;
-        break;
-      case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_CANCEL:
-        ret = GNUNET_SYSERR;
-        break;
-      }
-      switch (ptype)
-      {
-      case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_END:
-      case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_CANCEL:
-        tmit_frag = psyc_transmit_queue_next_part (plc, tmit_msg, tmit_frag);
-      }
-    }
-
-    if (NULL == tmit_msg->frags_head
-        && GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_END <= ptype)
-    { /* Reached end of current message. */
-      tmit_msg = psyc_transmit_queue_next_msg (plc, tmit_msg);
-    }
-  }
-
-  if (ret != GNUNET_NO)
-  {
-    if (NULL != tmit_msg)
-    {
-      psyc_transmit_message (plc);
-    }
-    /* FIXME: handle partial message (when still in_transmit) */
-  }
-  return ret;
-}
-
-
-/**
- * Callback for modifier transmission to PSYC.
- */
-static int
-psyc_transmit_notify_mod (void *cls, uint16_t *data_size, void *data,
-                          uint8_t *oper, uint32_t *full_value_size)
-{
-  struct Place *plc = cls;
-  struct MessageTransmitQueue *tmit_msg = plc->tmit_msgs_head;
-  GNUNET_assert (NULL != tmit_msg);
-  struct FragmentTransmitQueue *tmit_frag = tmit_msg->frags_head;
-  if (NULL == tmit_frag)
-  { /* Rest of the message have not arrived yet, pause transmission */
-    *data_size = 0;
-    return GNUNET_NO;
-  }
-  struct GNUNET_MessageHeader *pmsg = tmit_frag->next_part;
-  if (NULL == pmsg)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "%p psyc_transmit_notify_mod: nothing to send.\n", plc);
-    *data_size = 0;
-    return GNUNET_NO;
-  }
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p psyc_transmit_notify_mod()\n", plc);
-  GNUNET_PSYC_log_message (GNUNET_ERROR_TYPE_DEBUG, pmsg);
-
-  uint16_t ptype = ntohs (pmsg->type);
-  int ret;
-
-  switch (ptype)
-  {
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MODIFIER:
-  {
-    if (NULL == oper)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                  "%p psyc_transmit_notify_mod: oper is NULL.\n", plc);
-      ret = GNUNET_SYSERR;
-      break;
-    }
-    struct GNUNET_PSYC_MessageModifier *
-      pmod = (struct GNUNET_PSYC_MessageModifier *) tmit_frag->next_part;
-    uint16_t mod_size = ntohs (pmod->header.size) - sizeof (*pmod);
-
-    if (*data_size < mod_size)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "%p psyc_transmit_notify_mod: buffer size too small for data.\n", plc);
-      *data_size = 0;
-      return GNUNET_NO;
-    }
-
-    *full_value_size = ntohl (pmod->value_size);
-    *oper = pmod->oper;
-    *data_size = mod_size;
-    GNUNET_memcpy (data, &pmod[1], mod_size);
-    ret = GNUNET_NO;
-    break;
-  }
-
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MOD_CONT:
-  {
-    if (NULL != oper)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                  "%p psyc_transmit_notify_mod: oper is not NULL.\n", plc);
-      ret = GNUNET_SYSERR;
-      break;
-    }
-    uint16_t mod_size = ntohs (pmsg->size) - sizeof (*pmsg);
-    if (*data_size < mod_size)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "%p psyc_transmit_notify_mod: buffer size too small for data.\n", plc);
-      *data_size = 0;
-      return GNUNET_NO;
-    }
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "%p psyc_transmit_notify_mod: sending %u bytes.\n", plc, mod_size);
-
-    *data_size = mod_size;
-    GNUNET_memcpy (data, &pmsg[1], *data_size);
-    ret = GNUNET_NO;
-    break;
-  }
-
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_DATA:
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_END:
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_CANCEL:
-    *data_size = 0;
-    ret = GNUNET_YES;
-    break;
-
-  default:
-    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-                "%p psyc_transmit_notify_mod: unexpected message part of type %u.\n",
-                plc, ptype);
-    ret = GNUNET_SYSERR;
-  }
-
-  if (GNUNET_SYSERR == ret)
-  {
-    *data_size = 0;
-    ret = GNUNET_SYSERR;
-    tmit_msg = psyc_transmit_queue_next_msg (plc, tmit_msg);
-    GNUNET_SERVICE_client_drop (tmit_frag->client);
-    GNUNET_SCHEDULER_add_now (&cleanup_place, plc);
-  }
-  else
-  {
-    if (GNUNET_YES != ret)
-      psyc_transmit_queue_next_part (plc, tmit_msg, tmit_frag);
-
-    if (NULL == tmit_msg->frags_head
-        && GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_END <= ptype)
-    { /* Reached end of current message. */
-      tmit_msg = psyc_transmit_queue_next_msg (plc, tmit_msg);
-    }
-  }
-  return ret;
-}
-
-/**
- * Callback for data transmission from a host to PSYC.
- */
-static int
-host_transmit_notify_data (void *cls, uint16_t *data_size, void *data)
-{
-  int ret = psyc_transmit_notify_data (cls, data_size, data);
-
-  if (GNUNET_NO != ret)
-  {
-    struct Host *hst = cls;
-    hst->tmit_handle = NULL;
-  }
-  return ret;
-}
-
-
-/**
- * Callback for the transmit functions of multicast.
- */
-static int
-guest_transmit_notify_data (void *cls, uint16_t *data_size, void *data)
-{
-  int ret = psyc_transmit_notify_data (cls, data_size, data);
-
-  if (GNUNET_NO != ret)
-  {
-    struct Guest *gst = cls;
-    gst->tmit_handle = NULL;
-  }
-  return ret;
-}
-
-
-/**
- * Callback for modifier transmission from a host to PSYC.
- */
-static int
-host_transmit_notify_mod (void *cls, uint16_t *data_size, void *data,
-                          uint8_t *oper, uint32_t *full_value_size)
-{
-  int ret = psyc_transmit_notify_mod (cls, data_size, data,
-                                      oper, full_value_size);
-  if (GNUNET_SYSERR == ret)
-  {
-    struct Host *hst = cls;
-    hst->tmit_handle = NULL;
-  }
-  return ret;
-}
-
-
-/**
- * Callback for modifier transmission from a guest to PSYC.
- */
-static int
-guest_transmit_notify_mod (void *cls, uint16_t *data_size, void *data,
-                           uint8_t *oper, uint32_t *full_value_size)
-{
-  int ret = psyc_transmit_notify_mod (cls, data_size, data,
-                                      oper, full_value_size);
-  if (GNUNET_SYSERR == ret)
-  {
-    struct Guest *gst = cls;
-    gst->tmit_handle = NULL;
-  }
-  return ret;
-}
-
-
-/**
- * Get method part of next message from transmission queue.
- *
- * @param plc
- *        Place
- *
- * @return #GNUNET_OK on success
- *         #GNUNET_NO if there are no more messages in queue.
- *         #GNUNET_SYSERR if the next message is malformed.
- */
-static struct GNUNET_PSYC_MessageMethod *
-psyc_transmit_queue_next_method (struct Place *plc)
-{
-  struct MessageTransmitQueue *tmit_msg = plc->tmit_msgs_head;
-  if (NULL == tmit_msg)
-    return GNUNET_NO;
-
-  struct FragmentTransmitQueue *tmit_frag = tmit_msg->frags_head;
-  if (NULL == tmit_frag)
-  {
-    GNUNET_break (0);
-    return GNUNET_NO;
-  }
-
-  struct GNUNET_MessageHeader *pmsg = tmit_frag->next_part;
-  if (NULL == pmsg
-      || GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_METHOD != ntohs (pmsg->type))
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-                "%p psyc_transmit_queue_next_method: unexpected message part of type %u.\n",
-                plc, NULL != pmsg ? ntohs (pmsg->type) : 0);
-    GNUNET_break (0);
-    return NULL;
-  }
-
-  uint16_t psize = ntohs (pmsg->size);
-  struct GNUNET_PSYC_MessageMethod *
-    pmeth = (struct GNUNET_PSYC_MessageMethod *) GNUNET_copy_message (pmsg);
-
-  if (psize < sizeof (*pmeth) + 1 || '\0' != *((char *) pmeth + psize - 1))
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-                "%p psyc_transmit_queue_next_method: invalid method name.\n",
-                plc);
-    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-                "%zu <= %u || NUL != %u\n",
-                sizeof (*pmeth), psize, *((char *) pmeth + psize - 1));
-    GNUNET_break (0);
-    GNUNET_free (pmeth);
-    return NULL;
-  }
-
-  psyc_transmit_queue_next_part (plc, tmit_msg, tmit_frag);
-  return pmeth;
-}
-
-
-/**
- * Transmit the next message in queue from the host to the PSYC channel.
- */
-static int
-psyc_master_transmit_message (struct Host *hst)
-{
-  struct Place *plc = &hst->place;
-
-  if (NULL == hst->tmit_handle)
-  {
-    struct GNUNET_PSYC_MessageMethod *
-      pmeth = psyc_transmit_queue_next_method (plc);
-    if (NULL == pmeth)
-      return GNUNET_SYSERR;
-
-    hst->tmit_handle = (void *) &hst->tmit_handle;
-    struct GNUNET_PSYC_MasterTransmitHandle *
-      tmit_handle = GNUNET_PSYC_master_transmit (hst->master, (const char *) &pmeth[1],
-                                                 &host_transmit_notify_mod,
-                                                 &host_transmit_notify_data, hst,
-                                                 pmeth->flags);
-    if (NULL != hst->tmit_handle)
-      hst->tmit_handle = tmit_handle;
-    GNUNET_free (pmeth);
-  }
-  else
-  {
-    GNUNET_PSYC_master_transmit_resume (hst->tmit_handle);
-  }
-  return GNUNET_OK;
-}
-
-
-/**
- * Transmit the next message in queue from a guest to the PSYC channel.
- */
-static int
-psyc_slave_transmit_message (struct Guest *gst)
-{
-  struct Place *plc = &gst->place;
-
-  if (NULL == gst->tmit_handle)
-  {
-    struct GNUNET_PSYC_MessageMethod *
-      pmeth = psyc_transmit_queue_next_method (plc);
-    if (NULL == pmeth)
-      return GNUNET_SYSERR;
-
-    gst->tmit_handle = (void *) &gst->tmit_handle;
-    struct GNUNET_PSYC_SlaveTransmitHandle *
-      tmit_handle = GNUNET_PSYC_slave_transmit (gst->slave, (const char *) &pmeth[1],
-                                                 &guest_transmit_notify_mod,
-                                                 &guest_transmit_notify_data, gst,
-                                                 pmeth->flags);
-    if (NULL != gst->tmit_handle)
-      gst->tmit_handle = tmit_handle;
-    GNUNET_free (pmeth);
-  }
-  else
-  {
-    GNUNET_PSYC_slave_transmit_resume (gst->tmit_handle);
-  }
-  return GNUNET_OK;
-}
-
-
-/**
- * Transmit a message to PSYC.
- */
-static int
-psyc_transmit_message (struct Place *plc)
-{
-  return
-    (plc->is_host)
-    ? psyc_master_transmit_message ((struct Host *) plc)
-    : psyc_slave_transmit_message ((struct Guest *) plc);
-}
-
-
-/**
- * Queue message parts for sending to PSYC.
- *
- * @param plc          Place to send to.
- * @param client       Client the message originates from.
- * @param data_size    Size of @a data.
- * @param data         Concatenated message parts.
- * @param first_ptype  First message part type in @a data.
- * @param last_ptype   Last message part type in @a data.
- */
-static struct MessageTransmitQueue *
-psyc_transmit_queue_message (struct Place *plc,
-                             struct GNUNET_SERVICE_Client *client,
-                             size_t data_size,
-                             const void *data,
-                             uint16_t first_ptype, uint16_t last_ptype,
-                             struct MessageTransmitQueue *tmit_msg)
-{
-  if (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_METHOD == first_ptype)
-  {
-    tmit_msg = GNUNET_malloc (sizeof (*tmit_msg));
-    GNUNET_CONTAINER_DLL_insert_tail (plc->tmit_msgs_head, plc->tmit_msgs_tail, tmit_msg);
-  }
-  else if (NULL == tmit_msg)
-  {
-    return NULL;
-  }
-
-  struct FragmentTransmitQueue *
-    tmit_frag = GNUNET_malloc (sizeof (*tmit_frag) + data_size);
-  GNUNET_memcpy (&tmit_frag[1], data, data_size);
-  tmit_frag->next_part = (struct GNUNET_MessageHeader *) &tmit_frag[1];
-  tmit_frag->client = client;
-  tmit_frag->size = data_size;
-
-  GNUNET_CONTAINER_DLL_insert_tail (tmit_msg->frags_head, tmit_msg->frags_tail, tmit_frag);
-  tmit_msg->client = client;
-  return tmit_msg;
-}
-
-
-///**
-// * Cancel transmission of current message to PSYC.
-// *
-// * @param plc          Place to send to.
-// * @param client  Client the message originates from.
-// */
-//static void
-//psyc_transmit_cancel (struct Place *plc, struct GNUNET_SERVICE_Client *client)
-//{
-//  uint16_t type = GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_CANCEL;
-//
-//  struct GNUNET_MessageHeader msg;
-//  msg.size = htons (sizeof (msg));
-//  msg.type = htons (type);
-//
-//  psyc_transmit_queue_message (plc, client, sizeof (msg), &msg, type, type, NULL);
-//  psyc_transmit_message (plc);
-//
-//  /* FIXME: cleanup */
-//}
-
-
-static int
-check_client_psyc_message (void *cls,
-                           const struct GNUNET_MessageHeader *msg)
-{
-  return GNUNET_OK;
-}
-
-
-/**
- * Handle an incoming message from a client, to be transmitted to the place.
- */
-static void
-handle_client_psyc_message (void *cls,
-                            const struct GNUNET_MessageHeader *msg)
-{
-  struct Client *c = cls;
-  struct GNUNET_SERVICE_Client *client = c->client;
-  struct Place *plc = c->place;
-  int ret;
-
-  if (NULL == plc)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-                "received PSYC message for non-existing client %p\n",
-                client);
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Received message of type %d from client.\n", plc, ntohs (msg->type));
-  GNUNET_PSYC_log_message (GNUNET_ERROR_TYPE_DEBUG, msg);
-
-  if (GNUNET_YES != plc->is_ready)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-                "%p Place is not ready yet, disconnecting client.\n", plc);
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-
-  uint16_t size = ntohs (msg->size);
-  uint16_t psize = size - sizeof (*msg);
-  if (psize < sizeof (struct GNUNET_MessageHeader)
-      || GNUNET_MULTICAST_FRAGMENT_MAX_PAYLOAD < psize)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "%p Received message with invalid payload size (%u) from client.\n",
-                plc, psize);
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-
-  uint16_t first_ptype = 0;
-  uint16_t last_ptype = 0;
-  if (GNUNET_SYSERR ==
-      GNUNET_PSYC_receive_check_parts (psize, (const char *) &msg[1],
-                                       &first_ptype, &last_ptype))
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "%p Received invalid message part from client.\n", plc);
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Received message with first part type %u and last part type %u.\n",
-              plc, first_ptype, last_ptype);
-
-  c->tmit_msg
-    = psyc_transmit_queue_message (plc, client, psize, &msg[1],
-                                   first_ptype, last_ptype, c->tmit_msg);
-  if (NULL != c->tmit_msg)
-  {
-    if (GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_END <= last_ptype)
-      c->tmit_msg = NULL;
-    ret = psyc_transmit_message (plc);
-  }
-  else
-  {
-    ret = GNUNET_SYSERR;
-  }
-  if (GNUNET_OK != ret)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "%p Received invalid message part from client.\n", plc);
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-/**
- * A historic message arrived from PSYC.
- */
-static void
-psyc_recv_history_message (void *cls, const struct GNUNET_PSYC_MessageHeader *msg)
-{
-  struct OperationClosure *opcls = cls;
-  struct Client *c = opcls->client;
-  struct Place *plc = c->place;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Received historic message #%" PRId64 " (flags: %x)\n",
-              plc, GNUNET_ntohll (msg->message_id), ntohl (msg->flags));
-
-  uint16_t size = ntohs (msg->header.size);
-
-  struct GNUNET_OperationResultMessage *
-    res = GNUNET_malloc (sizeof (*res) + size);
-  res->header.size = htons (sizeof (*res) + size);
-  res->header.type = htons (GNUNET_MESSAGE_TYPE_PSYC_HISTORY_RESULT);
-  res->op_id = opcls->op_id;
-  res->result_code = GNUNET_htonll (GNUNET_OK);
-
-  GNUNET_memcpy (&res[1], msg, size);
-
-  /** @todo FIXME: send only to requesting client */
-  place_send_msg (plc, GNUNET_MQ_msg_copy (&res->header));
-
-  GNUNET_free (res);
-}
-
-
-/**
- * Result of message history replay from PSYC.
- */
-static void
-psyc_recv_history_result (void *cls, int64_t result,
-                          const void *err_msg, uint16_t err_msg_size)
-{
-  struct OperationClosure *opcls = cls;
-  struct Client *c = opcls->client;
-  struct Place *plc = c->place;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p History replay #%" PRIu64 ": "
-              "PSYCstore returned %" PRId64 " (%.*s)\n",
-              plc, GNUNET_ntohll (opcls->op_id), result,
-              err_msg_size, (const char *) err_msg);
-
-  // FIXME: place might have been destroyed
-  client_send_result (c->client, opcls->op_id, result, err_msg, err_msg_size);
-}
-
-
-static int
-check_client_history_replay (void *cls,
-                             const struct GNUNET_PSYC_HistoryRequestMessage *req)
-{
-  return GNUNET_OK;
-}
-
-
-/**
- * Client requests channel history.
- */
-static void
-handle_client_history_replay (void *cls,
-                              const struct GNUNET_PSYC_HistoryRequestMessage *req)
-{
-  struct Client *c = cls;
-  struct GNUNET_SERVICE_Client *client = c->client;
-  struct Place *plc = c->place;
-  if (NULL == plc)
-  {
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-
-  uint16_t size = ntohs (req->header.size);
-  const char *method_prefix = (const char *) &req[1];
-
-  if (size < sizeof (*req) + 1
-      || '\0' != method_prefix[size - sizeof (*req) - 1])
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "%p History replay #%" PRIu64 ": "
-                "invalid method prefix. size: %u < %zu?\n",
-                plc, GNUNET_ntohll (req->op_id), size, sizeof (*req) + 1);
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-
-  struct OperationClosure *opcls = GNUNET_malloc (sizeof (*opcls));
-  opcls->client = c;
-  opcls->op_id = req->op_id;
-  opcls->flags = ntohl (req->flags);
-
-  if (0 == req->message_limit)
-    GNUNET_PSYC_channel_history_replay (plc->channel,
-                                        GNUNET_ntohll (req->start_message_id),
-                                        GNUNET_ntohll (req->end_message_id),
-                                        method_prefix, opcls->flags,
-                                        psyc_recv_history_message, NULL,
-                                        psyc_recv_history_result, opcls);
-  else
-    GNUNET_PSYC_channel_history_replay_latest (plc->channel,
-                                               GNUNET_ntohll (req->message_limit),
-                                               method_prefix, opcls->flags,
-                                               psyc_recv_history_message, NULL,
-                                               psyc_recv_history_result, opcls);
-
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-/**
- * A state variable part arrived from PSYC.
- */
-void
-psyc_recv_state_var (void *cls,
-                     const struct GNUNET_MessageHeader *mod,
-                     const char *name,
-                     const void *value,
-                     uint32_t value_size,
-                     uint32_t full_value_size)
-{
-  struct GNUNET_OperationResultMessage *result_msg;
-  struct GNUNET_MQ_Envelope *env;
-  struct OperationClosure *opcls = cls;
-  struct Client *c = opcls->client;
-  struct Place *plc = c->place;
-  uint16_t size = ntohs (mod->size);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p Received state variable %s from PSYC\n",
-              plc, name);
-  env = GNUNET_MQ_msg_extra (result_msg,
-                             size,
-                             GNUNET_MESSAGE_TYPE_PSYC_STATE_RESULT);
-  result_msg->op_id = opcls->op_id;
-  result_msg->result_code = GNUNET_htonll (GNUNET_OK);
-  GNUNET_memcpy (&result_msg[1], mod, size);
-  /** @todo FIXME: send only to requesting client */
-  place_send_msg (plc, env);
-}
-
-
-/**
- * Result of retrieving state variable from PSYC.
- */
-static void
-psyc_recv_state_result (void *cls, int64_t result,
-                        const void *err_msg, uint16_t err_msg_size)
-{
-  struct OperationClosure *opcls = cls;
-  struct Client *c = opcls->client;
-  struct Place *plc = c->place;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p State get #%" PRIu64 ": "
-              "PSYCstore returned %" PRId64 " (%.*s)\n",
-              plc, GNUNET_ntohll (opcls->op_id), result,
-              err_msg_size, (const char *) err_msg);
-
-  // FIXME: place might have been destroyed
-  client_send_result (c->client, opcls->op_id, result, err_msg, err_msg_size);
-}
-
-
-static int
-check_client_state_get (void *cls,
-                        const struct GNUNET_PSYC_StateRequestMessage *req)
-{
-  return GNUNET_OK;
-}
-
-
-/**
- * Client requests channel history.
- */
-static void
-handle_client_state_get (void *cls,
-                         const struct GNUNET_PSYC_StateRequestMessage *req)
-{
-  struct Client *c = cls;
-  struct GNUNET_SERVICE_Client *client = c->client;
-  struct Place *plc = c->place;
-  if (NULL == plc)
-  {
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-
-  uint16_t size = ntohs (req->header.size);
-  const char *name = (const char *) &req[1];
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%p State get #%" PRIu64 ": %s\n",
-              plc, GNUNET_ntohll (req->op_id), name);
-
-  if (size < sizeof (*req) + 1
-      || '\0' != name[size - sizeof (*req) - 1])
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "%p State get #%" PRIu64 ": "
-                "invalid name. size: %u < %zu?\n",
-                plc, GNUNET_ntohll (req->op_id), size, sizeof (*req) + 1);
-    GNUNET_break (0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-
-  struct OperationClosure *opcls = GNUNET_malloc (sizeof (*opcls));
-  opcls->client = c;
-  opcls->op_id = req->op_id;
-
-  switch (ntohs (req->header.type))
-  {
-  case GNUNET_MESSAGE_TYPE_PSYC_STATE_GET:
-      GNUNET_PSYC_channel_state_get (plc->channel, name,
-                                     psyc_recv_state_var,
-                                     psyc_recv_state_result, opcls);
-      break;
-
-  case GNUNET_MESSAGE_TYPE_PSYC_STATE_GET_PREFIX:
-      GNUNET_PSYC_channel_state_get_prefix (plc->channel, name,
-                                            psyc_recv_state_var,
-                                            psyc_recv_state_result, opcls);
-      break;
-
-  default:
-      GNUNET_assert (0);
-  }
-
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-#define check_client_state_get_prefix check_client_state_get
-#define handle_client_state_get_prefix handle_client_state_get
-
-
-static void
-namestore_recv_records_store_result (void *cls, int32_t result,
-                                     const char *err_msg)
-{
-  struct OperationClosure *opcls = cls;
-  struct Client *c = opcls->client;
-
-  // FIXME: client might have been disconnected
-  client_send_result (c->client, opcls->op_id, result, err_msg,
-                      (NULL != err_msg) ? strlen (err_msg) : 0);
-  GNUNET_free (opcls);
-}
-
-
-static int
-check_client_zone_add_place (void *cls,
-                             const struct ZoneAddPlaceRequest *preq)
-{
-  return GNUNET_OK;
-}
-
-
-/**
- * Handle request to add PLACE record to GNS zone.
- */
-static void
-handle_client_zone_add_place (void *cls,
-                              const struct ZoneAddPlaceRequest *preq)
-{
-  struct Client *c = cls;
-  struct GNUNET_SERVICE_Client *client = c->client;
-
-  uint16_t remaining = ntohs (preq->header.size) - sizeof (*preq);
-  const char *p = (const char *) &preq[1];
-  const char *name = NULL, *password = NULL;
-  uint16_t offset = GNUNET_STRINGS_buffer_tokenize (p, remaining, 2,
-                                                    &name, &password);
-  remaining -= offset;
-  p += offset;
-  const struct GNUNET_PeerIdentity *
-    relays = (const struct GNUNET_PeerIdentity *) p;
-  uint16_t relay_size = ntohl (preq->relay_count) * sizeof (*relays);
-
-  if (0 == offset || remaining != relay_size)
-  {
-    GNUNET_break (0);
-    client_send_result (client, preq->op_id, GNUNET_SYSERR, NULL, 0);
-    GNUNET_SERVICE_client_drop (client);
-    return;
-  }
-
-  struct GNUNET_GNSRECORD_Data rd = { };
-  rd.record_type = GNUNET_GNSRECORD_TYPE_PLACE;
-  rd.flags = GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION;
-  rd.expiration_time = GNUNET_ntohll (preq->expiration_time);
-
-  struct GNUNET_GNSRECORD_PlaceData *
-    rec = GNUNET_malloc (sizeof (*rec) + relay_size);
-  rec->place_pub_key = preq->place_pub_key;
-  rec->origin = this_peer;
-  rec->relay_count = preq->relay_count;
-  GNUNET_memcpy (&rec[1], relays, relay_size);
-
-  rd.data = rec;
-  rd.data_size = sizeof (*rec) + relay_size;
-
-  struct GNUNET_HashCode ego_pub_hash;
-  GNUNET_CRYPTO_hash (&preq->ego_pub_key, sizeof (preq->ego_pub_key), &ego_pub_hash);
-  struct Ego *ego = GNUNET_CONTAINER_multihashmap_get (egos, &ego_pub_hash);
-  if (NULL == ego)
-  {
-    client_send_result (client, preq->op_id, GNUNET_SYSERR, NULL, 0);
-  }
-  else
-  {
-    struct OperationClosure *opcls = GNUNET_malloc (sizeof (*opcls));
-    opcls->client = c;
-    opcls->op_id = preq->op_id;
-    GNUNET_NAMESTORE_records_store (namestore, &ego->key,
-                                    name, 1, &rd,
-                                    namestore_recv_records_store_result, opcls);
-    /** @todo refresh stored records later */
-  }
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-static int
-check_client_zone_add_nym (void *cls,
-                           const struct ZoneAddNymRequest *nreq)
-{
-  return GNUNET_OK;
-}
-
-
-/**
- * Handle request to add PLACE record to GNS zone.
- */
-static void
-handle_client_zone_add_nym (void *cls,
-                            const struct ZoneAddNymRequest *nreq)
-{
-  struct Client *c = cls;
-  struct GNUNET_SERVICE_Client *client = c->client;
-
-  uint16_t name_size = ntohs (nreq->header.size) - sizeof (*nreq);
-  const char *name = NULL;
-  uint16_t offset = GNUNET_STRINGS_buffer_tokenize ((const char *) &nreq[1],
-                                                    name_size, 1, &name);
-  if (0 == offset || offset != name_size)
-  {
-    GNUNET_break (0);
-    client_send_result (client, nreq->op_id, GNUNET_SYSERR, NULL, 0);
-    GNUNET_SERVICE_client_continue (client);
-    return;
-  }
-
-  struct GNUNET_GNSRECORD_Data rd = { };
-  rd.record_type = GNUNET_GNSRECORD_TYPE_PKEY;
-  rd.flags = GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION;
-  rd.expiration_time = GNUNET_ntohll (nreq->expiration_time);
-  rd.data = &nreq->nym_pub_key;
-  rd.data_size = sizeof (nreq->nym_pub_key);
-
-  struct GNUNET_HashCode ego_pub_hash;
-  GNUNET_CRYPTO_hash (&nreq->ego_pub_key, sizeof (nreq->ego_pub_key), &ego_pub_hash);
-  struct Ego *ego = GNUNET_CONTAINER_multihashmap_get (egos, &ego_pub_hash);
-  if (NULL == ego)
-  {
-    client_send_result (client, nreq->op_id, GNUNET_SYSERR, NULL, 0);
-  }
-  else
-  {
-    struct OperationClosure *opcls = GNUNET_malloc (sizeof (*opcls));
-    opcls->client = c;
-    opcls->op_id = nreq->op_id;
-    GNUNET_NAMESTORE_records_store (namestore, &ego->key,
-                                    name, 1, &rd,
-                                    namestore_recv_records_store_result, opcls);
-    /** @todo refresh stored records later */
-  }
-  GNUNET_SERVICE_client_continue (client);
-}
-
-
-const char *
-path_basename (const char *path)
-{
-  const char *basename = strrchr (path, DIR_SEPARATOR);
-  if (NULL != basename)
-    basename++;
-
-  if (NULL == basename || '\0' == *basename)
-    return NULL;
-
-  return basename;
-}
-
-
-struct PlaceLoadClosure
-{
-  const char *app_id;
-  const char *ego_pub_str;
-};
-
-
-/** Load a place file */
-int
-file_place_load (void *cls, const char *place_filename)
-{
-  struct PlaceLoadClosure *plcls = cls;
-
-  const char *place_pub_str = path_basename (place_filename);
-  if (NULL == place_pub_str)
-  {
-    GNUNET_break (0);
-    return GNUNET_OK;
-  }
-
-  char *filename = NULL;
-  GNUNET_asprintf (&filename, "%s%c" "%s%c" "%s%c" "%s",
-                   dir_social, DIR_SEPARATOR,
-                   "places", DIR_SEPARATOR,
-                   plcls->ego_pub_str, DIR_SEPARATOR,
-                   place_pub_str);
-
-  uint64_t file_size = 0;
-  if (GNUNET_OK !=
-      GNUNET_DISK_file_size (filename, &file_size, GNUNET_YES, GNUNET_YES)
-      || file_size < sizeof (struct PlaceEnterRequest))
-  {
-    GNUNET_free (filename);
-    return GNUNET_OK;
-  }
-
-  struct PlaceEnterRequest *ereq = GNUNET_malloc (file_size);
-  ssize_t read_size = GNUNET_DISK_fn_read (filename, ereq, file_size);
-  GNUNET_free (filename);
-  if (read_size < 0 || read_size < sizeof (*ereq))
-  {
-    GNUNET_free (ereq);
-    return GNUNET_OK;
-  }
-
-  uint16_t ereq_size = ntohs (ereq->header.size);
-  if (read_size != ereq_size)
-  {
-    GNUNET_free (ereq);
-    return GNUNET_OK;
-  }
-
-  switch (ntohs (ereq->header.type))
-  {
-  case GNUNET_MESSAGE_TYPE_SOCIAL_HOST_ENTER:
-    if (ereq_size < sizeof (struct HostEnterRequest))
-    {
-      GNUNET_free (ereq);
-      return GNUNET_OK;
-    }
-    struct HostEnterRequest *hreq = (struct HostEnterRequest *) ereq;
-    host_enter (hreq, NULL);
-    break;
-
-  case GNUNET_MESSAGE_TYPE_SOCIAL_GUEST_ENTER:
-    if (ereq_size < sizeof (struct GuestEnterRequest))
-    {
-      GNUNET_free (ereq);
-      return GNUNET_OK;
-    }
-    struct GuestEnterRequest *greq = (struct GuestEnterRequest *) ereq;
-    guest_enter (greq, NULL);
-    break;
-
-  default:
-    GNUNET_free (ereq);
-    return GNUNET_OK;
-  }
-
-  if (GNUNET_SYSERR == app_place_add (plcls->app_id, ereq))
-  {
-    GNUNET_assert (0);
-  }
-  GNUNET_free (ereq);
-  return GNUNET_OK;
-}
-
-
-/**
- * Read @e place_pub_str entries in @a dir_ego
- *
- * @param dir_ego
- *        Data directory of an application ego.
- *        $GNUNET_DATA_HOME/social/apps/$app_id/$ego_pub_str/
- */
-int
-scan_app_ego_dir (void *cls, const char *dir_ego)
-{
-  struct PlaceLoadClosure *plcls = cls;
-  plcls->ego_pub_str = path_basename (dir_ego);
-
-  if (NULL != plcls->ego_pub_str)
-    GNUNET_DISK_directory_scan (dir_ego, file_place_load, plcls);
-
-  return GNUNET_OK;
-}
-
-/**
- * Read @e ego_pub_str entries in @a dir_app
- *
- * @param dir_app
- *        Data directory of an application.
- *        $GNUNET_DATA_HOME/social/apps/$app_id/
- */
-int
-scan_app_dir (void *cls, const char *dir_app)
-{
-  if (GNUNET_YES != GNUNET_DISK_directory_test (dir_app, GNUNET_YES))
-    return GNUNET_OK;
-
-  struct PlaceLoadClosure plcls;
-  plcls.app_id = path_basename (dir_app);
-
-  if (NULL != plcls.app_id)
-    GNUNET_DISK_directory_scan (dir_app, scan_app_ego_dir, &plcls);
-
-  return GNUNET_OK;
-}
-
-
-static void
-identity_recv_ego (void *cls, struct GNUNET_IDENTITY_Ego *id_ego,
-                   void **ctx, const char *name)
-{
-  if (NULL == id_ego) // end of initial list of egos
-    return;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "social service received ego %s\n",
-              name);
-
-  struct GNUNET_CRYPTO_EcdsaPublicKey ego_pub_key;
-  GNUNET_IDENTITY_ego_get_public_key (id_ego, &ego_pub_key);
-
-  struct GNUNET_HashCode ego_pub_hash;
-  GNUNET_CRYPTO_hash (&ego_pub_key, sizeof (ego_pub_key), &ego_pub_hash);
-
-  struct Ego *ego = GNUNET_CONTAINER_multihashmap_get (egos, &ego_pub_hash);
-  if (NULL == ego && NULL == name)
-  {
-    // an ego that is none of our business has been deleted
-    return;
-  }
-  if (NULL != ego)
-  {
-    // one of our egos has been changed
-    GNUNET_free (ego->name);
-    if (NULL == name)
-    {
-      // one of our egos has been deleted
-      GNUNET_CONTAINER_multihashmap_remove (egos, &ego_pub_hash, ego);
-      GNUNET_free (ego);
-      return;
-    }
-  }
-  else
-  {
-    ego = GNUNET_malloc (sizeof (*ego));
-  }
-  ego->key = *(GNUNET_IDENTITY_ego_get_private_key (id_ego));
-  size_t name_size = strlen (name) + 1;
-  ego->name = GNUNET_malloc (name_size);
-  GNUNET_memcpy (ego->name, name, name_size);
-
-  GNUNET_CONTAINER_multihashmap_put (egos, &ego_pub_hash, ego,
-                                     GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE);
-
-  // FIXME: notify clients about changed ego
-}
-
-
-/**
- * Initialize the PSYC service.
- *
- * @param cls Closure.
- * @param server The initialized server.
- * @param c Configuration to use.
- */
-static void
-run (void *cls,
-     const struct GNUNET_CONFIGURATION_Handle *c,
-     struct GNUNET_SERVICE_Handle *svc)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "starting social service\n");
-
-  cfg = c;
-  service = svc;
-  GNUNET_CRYPTO_get_peer_identity (cfg, &this_peer);
-
-  hosts = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_YES);
-  guests = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_YES);
-  place_guests = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_NO);
-
-  egos = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_NO);
-  apps = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_NO);
-  places = GNUNET_CONTAINER_multihashmap_create(1, GNUNET_NO);
-  apps_places = GNUNET_CONTAINER_multihashmap_create(1, GNUNET_NO);
-  //places_apps = GNUNET_CONTAINER_multihashmap_create(1, GNUNET_NO);
-
-  id = GNUNET_IDENTITY_connect (cfg, &identity_recv_ego, NULL);
-  gns = GNUNET_GNS_connect (cfg);
-  namestore = GNUNET_NAMESTORE_connect (cfg);
-  stats = GNUNET_STATISTICS_create ("social", cfg);
-
-  if (GNUNET_OK !=
-      GNUNET_CONFIGURATION_get_value_filename (cfg, "social", "DATA_HOME",
-                                               &dir_social))
-  {
-    GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
-                               "social", "DATA_HOME");
-    GNUNET_break (0);
-    return;
-  }
-  GNUNET_asprintf (&dir_places, "%s%c%s",
-                   dir_social, DIR_SEPARATOR, "places");
-  GNUNET_asprintf (&dir_apps, "%s%c%s",
-                   dir_social, DIR_SEPARATOR, "apps");
-
-  GNUNET_DISK_directory_scan (dir_apps, scan_app_dir, NULL);
-
-  GNUNET_SCHEDULER_add_shutdown (shutdown_task, NULL);
-}
-
-
-/**
- * Define "main" method using service macro.
- */
-GNUNET_SERVICE_MAIN
-("social",
- GNUNET_SERVICE_OPTION_NONE,
- run,
- client_notify_connect,
- client_notify_disconnect,
- NULL,
- GNUNET_MQ_hd_var_size (client_host_enter,
-                        GNUNET_MESSAGE_TYPE_SOCIAL_HOST_ENTER,
-                        struct HostEnterRequest,
-                        NULL),
- GNUNET_MQ_hd_var_size (client_guest_enter,
-                        GNUNET_MESSAGE_TYPE_SOCIAL_GUEST_ENTER,
-                        struct GuestEnterRequest,
-                        NULL),
- GNUNET_MQ_hd_var_size (client_guest_enter_by_name,
-                        GNUNET_MESSAGE_TYPE_SOCIAL_GUEST_ENTER_BY_NAME,
-                        struct GuestEnterByNameRequest,
-                        NULL),
- GNUNET_MQ_hd_var_size (client_join_decision,
-                        GNUNET_MESSAGE_TYPE_PSYC_JOIN_DECISION,
-                        struct GNUNET_PSYC_JoinDecisionMessage,
-                        NULL),
- GNUNET_MQ_hd_var_size (client_psyc_message,
-                        GNUNET_MESSAGE_TYPE_PSYC_MESSAGE,
-                        struct GNUNET_MessageHeader,
-                        NULL),
- GNUNET_MQ_hd_var_size (client_history_replay,
-                        GNUNET_MESSAGE_TYPE_PSYC_HISTORY_REPLAY,
-                        struct GNUNET_PSYC_HistoryRequestMessage,
-                        NULL),
- GNUNET_MQ_hd_var_size (client_state_get,
-                        GNUNET_MESSAGE_TYPE_PSYC_STATE_GET,
-                        struct GNUNET_PSYC_StateRequestMessage,
-                        NULL),
- GNUNET_MQ_hd_var_size (client_state_get_prefix,
-                        GNUNET_MESSAGE_TYPE_PSYC_STATE_GET_PREFIX,
-                        struct GNUNET_PSYC_StateRequestMessage,
-                        NULL),
- GNUNET_MQ_hd_var_size (client_zone_add_place,
-                        GNUNET_MESSAGE_TYPE_SOCIAL_ZONE_ADD_PLACE,
-                        struct ZoneAddPlaceRequest,
-                        NULL),
- GNUNET_MQ_hd_var_size (client_zone_add_nym,
-                        GNUNET_MESSAGE_TYPE_SOCIAL_ZONE_ADD_NYM,
-                        struct ZoneAddNymRequest,
-                        NULL),
- GNUNET_MQ_hd_var_size (client_app_connect,
-                        GNUNET_MESSAGE_TYPE_SOCIAL_APP_CONNECT,
-                        struct AppConnectRequest,
-                        NULL),
- GNUNET_MQ_hd_fixed_size (client_app_detach,
-                          GNUNET_MESSAGE_TYPE_SOCIAL_APP_DETACH,
-                          struct AppDetachRequest,
-                          NULL),
- GNUNET_MQ_hd_fixed_size (client_place_leave,
-                          GNUNET_MESSAGE_TYPE_SOCIAL_PLACE_LEAVE,
-                          struct GNUNET_MessageHeader,
-                          NULL),
- GNUNET_MQ_hd_var_size (client_msg_proc_set,
-                        GNUNET_MESSAGE_TYPE_SOCIAL_MSG_PROC_SET,
-                        struct MsgProcRequest,
-                        NULL),
- GNUNET_MQ_hd_fixed_size (client_msg_proc_clear,
-                          GNUNET_MESSAGE_TYPE_SOCIAL_MSG_PROC_CLEAR,
-                          struct GNUNET_MessageHeader,
-                          NULL));
-
-/* end of gnunet-service-social.c */
diff --git a/src/social/gnunet-social.c b/src/social/gnunet-social.c
deleted file mode 100644 (file)
index 14701bf..0000000
+++ /dev/null
@@ -1,1411 +0,0 @@
-/*
-     This file is part of GNUnet.
-     Copyright (C) 2016 GNUnet e.V.
-
-     GNUnet is free software: you can redistribute it and/or modify it
-     under the terms of the GNU Affero General Public License as published
-     by the Free Software Foundation, either version 3 of the License,
-     or (at your option) any later version.
-
-     GNUnet is distributed in the hope that it will be useful, but
-     WITHOUT ANY WARRANTY; without even the implied warranty of
-     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     Affero General Public License for more details.
-    
-     You should have received a copy of the GNU Affero General Public License
-     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
-*/
-
-/**
- * CLI tool to interact with the social service.
- *
- * @author Gabor X Toth
- */
-
-#include <inttypes.h>
-
-#include "platform.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_social_service.h"
-
-#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 30)
-
-#define DATA2ARG(data) data, sizeof (data)
-
-/* operations corresponding to API calls */
-
-/** --status */
-static int op_status;
-
-/** --host-enter */
-static int op_host_enter;
-
-/** --host-reconnect */
-static int op_host_reconnect;
-
-/** --host-leave */
-static int op_host_leave;
-
-/** --host-announce */
-static int op_host_announce;
-
-/** --host-assign */
-static int op_host_assign;
-
-/** --guest-enter */
-static int op_guest_enter;
-
-/** --guest-reconnect */
-static int op_guest_reconnect;
-
-/** --guest-leave */
-static int op_guest_leave;
-
-/** --guest-talk */
-static int op_guest_talk;
-
-/** --replay */
-static int op_replay;
-
-/** --replay-latest */
-static int op_replay_latest;
-
-/** --look-at */
-static int op_look_at;
-
-/** --look-for */
-static int op_look_for;
-
-
-/* options */
-
-/** --app */
-static char *opt_app = "cli";
-
-/** --place */
-static char *opt_place;
-
-/** --ego */
-static char *opt_ego;
-
-/** --gns */
-static char *opt_gns;
-
-/** --peer */
-static char *opt_peer;
-
-/** --follow */
-static int opt_follow;
-
-/** --welcome */
-static int opt_welcome;
-
-/** --deny */
-static int opt_deny;
-
-/** --method */
-static char *opt_method;
-
-/** --data */
-// FIXME: should come from STDIN
-static char *opt_data;
-
-/** --name */
-static char *opt_name;
-
-/** --start */
-static unsigned long long opt_start;
-
-/** --until */
-static unsigned long long opt_until;
-
-/** --limit */
-static unsigned long long opt_limit;
-
-
-/* global vars */
-
-/** exit code */
-static int ret = 1;
-
-/** are we waiting for service to close our connection */
-static char is_disconnecting = 0;
-
-/** Task handle for timeout termination. */
-struct GNUNET_SCHEDULER_Task *timeout_task;
-
-const struct GNUNET_CONFIGURATION_Handle *cfg;
-
-struct GNUNET_PeerIdentity peer, this_peer;
-
-struct GNUNET_SOCIAL_App *app;
-
-/** public key of connected place */
-struct GNUNET_CRYPTO_EddsaPublicKey place_pub_key;
-
-struct GNUNET_PSYC_Slicer *slicer;
-
-struct GNUNET_SOCIAL_Ego *ego;
-struct GNUNET_CRYPTO_EcdsaPublicKey ego_pub_key;
-
-struct GNUNET_SOCIAL_Host *hst;
-struct GNUNET_SOCIAL_Guest *gst;
-struct GNUNET_SOCIAL_Place *plc;
-
-const char *method_received;
-
-
-/* DISCONNECT */
-
-
-/**
- * Callback called after the host or guest place disconnected.
- */
-static void
-disconnected (void *cls)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "disconnected()\n");
-  GNUNET_SCHEDULER_shutdown ();
-}
-
-
-/**
- * Callback called after the application disconnected.
- */
-static void
-app_disconnected (void *cls)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "app_disconnected()\n");
-  if (hst || gst)
-  {
-    if (hst)
-    {
-      GNUNET_SOCIAL_host_disconnect (hst, disconnected, NULL);
-    }
-    if (gst)
-    {
-      GNUNET_SOCIAL_guest_disconnect (gst, disconnected, NULL);
-    }
-  }
-  else
-  {
-    GNUNET_SCHEDULER_shutdown ();
-  }
-}
-
-
-/**
- * Disconnect from connected GNUnet services.
- */
-static void
-disconnect ()
-{
-  // handle that we get called several times from several places, but should we?
-  if (!is_disconnecting++) {
-    GNUNET_SOCIAL_app_disconnect (app, app_disconnected, NULL);
-  }
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "disconnect() called for the #%d time\n", is_disconnecting);
-}
-
-
-static void
-scheduler_shutdown (void *cls)
-{
-  disconnect ();
-}
-
-
-/**
- * Callback called when the program failed to finish the requested operation in time.
- */
-static void
-timeout (void *cls)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "timeout()\n");
-  disconnect ();
-}
-
-static void
-schedule_success (void *cls)
-{
-  ret = 0;
-  disconnect ();
-}
-
-
-static void
-schedule_fail (void *cls)
-{
-  disconnect ();
-}
-
-
-/**
- * Schedule exit with success result.
- */
-static void
-exit_success ()
-{
-  if (timeout_task != NULL)
-  {
-    GNUNET_SCHEDULER_cancel (timeout_task);
-    timeout_task = NULL;
-  }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, schedule_success, NULL);
-}
-
-
-/**
- * Schedule exit with failure result.
- */
-static void
-exit_fail ()
-{
-  if (timeout_task != NULL)
-  {
-    GNUNET_SCHEDULER_cancel (timeout_task);
-    timeout_task = NULL;
-  }
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, schedule_fail, NULL);
-}
-
-
-/* LEAVE */
-
-
-/**
- * Callback notifying about the host has left and stopped hosting the place.
- *
- * This also indicates the end of the connection to the service.
- */
-static void
-host_left (void *cls)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "The host has left the place.\n");
-  exit_success ();
-}
-
-
-/**
- * Leave a place permanently and stop hosting a place.
- */
-static void
-host_leave ()
-{
-  GNUNET_SOCIAL_host_leave (hst, NULL, host_left, NULL);
-  hst = NULL;
-  plc = NULL;
-}
-
-
-/**
- * Callback notifying about the guest has left the place.
- *
- * This also indicates the end of the connection to the service.
- */
-static void
-guest_left (void *cls)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Guest has left the place.\n");
-}
-
-
-/**
- * Leave a place permanently as guest.
- */
-static void
-guest_leave ()
-{
-  struct GNUNET_PSYC_Environment *env = GNUNET_PSYC_env_create ();
-  // FIXME: wrong use of vars
-  GNUNET_PSYC_env_add (env, GNUNET_PSYC_OP_SET,
-                       "_message", DATA2ARG ("Leaving."));
-  GNUNET_SOCIAL_guest_leave (gst, env, guest_left, NULL);
-  GNUNET_PSYC_env_destroy (env);
-  gst = NULL;
-  plc = NULL;
-}
-
-
-/* ANNOUNCE / ASSIGN / TALK */
-
-
-struct TransmitClosure
-{
-  const char *data;
-  size_t size;
-} tmit;
-
-
-/**
- * Callback notifying about available buffer space to write message data
- * when transmitting messages using host_announce() or guest_talk()
- */
-static int
-notify_data (void *cls, uint16_t *data_size, void *data)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Transmit notify data: %u bytes available\n",
-              *data_size);
-
-  struct TransmitClosure *tmit = cls;
-  uint16_t size = tmit->size < *data_size ? tmit->size : *data_size;
-  *data_size = size;
-  GNUNET_memcpy (data, tmit->data, size);
-
-  tmit->size -= size;
-  tmit->data += size;
-
-  if (0 == tmit->size)
-  {
-    if ((op_host_announce || op_host_assign || op_guest_talk) && !opt_follow)
-    {
-      exit_success ();
-    }
-    return GNUNET_YES;
-  }
-  else
-  {
-    return GNUNET_NO;
-  }
-}
-
-
-/**
- * Host announcement - send a message to the place.
- */
-static void
-host_announce (const char *method, const char *data, size_t data_size)
-{
-  struct GNUNET_PSYC_Environment *env = GNUNET_PSYC_env_create ();
-  GNUNET_PSYC_env_add (env, GNUNET_PSYC_OP_SET,
-                       "_foo", DATA2ARG ("bar baz"));
-
-  tmit = (struct TransmitClosure) {};
-  tmit.data = data;
-  tmit.size = data_size;
-
-  GNUNET_SOCIAL_host_announce (hst, method, env,
-                               notify_data, &tmit,
-                               GNUNET_SOCIAL_ANNOUNCE_NONE);
-  GNUNET_PSYC_env_destroy (env);
-}
-
-
-/**
- * Assign a state var of @a name to the value of @a data.
- */
-static void
-host_assign (const char *name, const char *data, size_t data_size)
-{
-  struct GNUNET_PSYC_Environment *env = GNUNET_PSYC_env_create ();
-  GNUNET_PSYC_env_add (env, GNUNET_PSYC_OP_ASSIGN,
-                       name, data, data_size);
-
-  tmit = (struct TransmitClosure) {};
-  GNUNET_SOCIAL_host_announce (hst, "_assign", env,
-                               notify_data, &tmit,
-                               GNUNET_SOCIAL_ANNOUNCE_NONE);
-  GNUNET_PSYC_env_destroy (env);
-}
-
-
-/**
- * Guest talk request to host.
- */
-static void
-guest_talk (const char *method,
-            const char *data, size_t data_size)
-{
-  struct GNUNET_PSYC_Environment *env = GNUNET_PSYC_env_create ();
-  GNUNET_PSYC_env_add (env, GNUNET_PSYC_OP_SET,
-                       "_foo", DATA2ARG ("bar baz"));
-
-  tmit = (struct TransmitClosure) {};
-  tmit.data = data;
-  tmit.size = data_size;
-
-  GNUNET_SOCIAL_guest_talk (gst, method, env,
-                            notify_data, &tmit,
-                            GNUNET_SOCIAL_TALK_NONE);
-  GNUNET_PSYC_env_destroy (env);
-}
-
-
-/* HISTORY REPLAY */
-
-
-/**
- * Callback notifying about the end of history replay results.
- */
-static void
-recv_history_replay_result (void *cls, int64_t result,
-                            const void *data, uint16_t data_size)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Received history replay result: %" PRId64 "\n"
-              "%.*s\n",
-              result, data_size, (const char *) data);
-
-  if (op_replay || op_replay_latest)
-  {
-    exit_success ();
-  }
-}
-
-
-/**
- * Replay history between a given @a start and @a end message IDs,
- * optionally filtered by a method @a prefix.
- */
-static void
-history_replay (uint64_t start, uint64_t end, const char *prefix)
-{
-  GNUNET_SOCIAL_place_history_replay (plc, start, end, prefix,
-                                      GNUNET_PSYC_HISTORY_REPLAY_LOCAL,
-                                      slicer,
-                                      recv_history_replay_result,
-                                      NULL);
-}
-
-
-/**
- * Replay latest @a limit messages.
- */
-static void
-history_replay_latest (uint64_t limit, const char *prefix)
-{
-  GNUNET_SOCIAL_place_history_replay_latest (plc, limit, prefix,
-                                             GNUNET_PSYC_HISTORY_REPLAY_LOCAL,
-                                             slicer,
-                                             recv_history_replay_result,
-                                             NULL);
-}
-
-
-/* LOOK AT/FOR */
-
-
-/**
- * Callback notifying about the end of state var results.
- */
-static void
-look_result (void *cls, int64_t result_code,
-             const void *data, uint16_t data_size)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Received look result: %" PRId64 "\n", result_code);
-
-  if (op_look_at || op_look_for)
-  {
-    exit_success ();
-  }
-}
-
-
-/**
- * Callback notifying about a state var result.
- */
-static void
-look_var (void *cls,
-          const struct GNUNET_MessageHeader *mod,
-          const char *name,
-          const void *value,
-          uint32_t value_size,
-          uint32_t full_value_size)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Received var: %s\n%.*s\n",
-              name, value_size, (const char *) value);
-}
-
-
-/**
- * Look for a state var using exact match of the name.
- */
-static void
-look_at (const char *full_name)
-{
-  GNUNET_SOCIAL_place_look_at (plc, full_name, look_var, look_result, NULL);
-}
-
-
-/**
- * Look for state vars by name prefix.
- */
-static void
-look_for (const char *name_prefix)
-{
-  GNUNET_SOCIAL_place_look_for (plc, name_prefix, look_var, look_result, NULL);
-}
-
-
-/* SLICER */
-
-
-/**
- * Callback notifying about the start of a new incoming message.
- */
-static void
-slicer_recv_method (void *cls,
-                    const struct GNUNET_PSYC_MessageHeader *msg,
-                    const struct GNUNET_PSYC_MessageMethod *meth,
-                    uint64_t message_id,
-                    const char *method_name)
-{
-  method_received = method_name;
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Received method for message ID %" PRIu64 ":\n"
-              "%s (flags: %x)\n",
-              message_id, method_name, ntohl (meth->flags));
-  /* routing header is missing, so we just print double newline */
-  printf("\n");
-  /* we output . instead of | to indicate that this is not proper PSYC syntax */
-  /* FIXME: use libpsyc here */
-}
-
-
-/**
- * Callback notifying about an incoming modifier.
- */
-static void
-slicer_recv_modifier (void *cls,
-                      const struct GNUNET_PSYC_MessageHeader *msg,
-                      const struct GNUNET_MessageHeader *pmsg,
-                      uint64_t message_id,
-                      enum GNUNET_PSYC_Operator oper,
-                      const char *name,
-                      const void *value,
-                      uint16_t value_size,
-                      uint16_t full_value_size)
-{
-#if 0
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Received modifier for message ID %" PRIu64 ":\n"
-              "%c%s: %.*s (size: %u)\n",
-              message_id, oper, name, value_size, (const char *) value, value_size);
-#else
-  /* obviously not binary safe */
-  printf("%c%s\t%.*s\n",
-              oper, name, value_size, (const char *) value);
-#endif
-}
-
-
-/**
- * Callback notifying about an incoming data fragment.
- */
-static void
-slicer_recv_data (void *cls,
-                  const struct GNUNET_PSYC_MessageHeader *msg,
-                  const struct GNUNET_MessageHeader *pmsg,
-                  uint64_t message_id,
-                  const void *data,
-                  uint16_t data_size)
-{
-#if 0
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Received data for message ID %" PRIu64 ":\n"
-              "%.*s\n",
-              message_id, data_size, (const char *) data);
-#else
-  /* obviously not binary safe */
-  printf("%s\n%.*s\n",
-              method_received, data_size, (const char *) data);
-#endif
-}
-
-
-/**
- * Callback notifying about the end of a message.
- */
-static void
-slicer_recv_eom (void *cls,
-                const struct GNUNET_PSYC_MessageHeader *msg,
-                const struct GNUNET_MessageHeader *pmsg,
-                uint64_t message_id,
-                uint8_t is_cancelled)
-{
-  printf(".\n");
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Received end of message ID %" PRIu64
-              ", cancelled: %u\n",
-              message_id, is_cancelled);
-}
-
-
-/**
- * Create a slicer for receiving message parts.
- */
-static struct GNUNET_PSYC_Slicer *
-slicer_create ()
-{
-  slicer = GNUNET_PSYC_slicer_create ();
-
-  /* register slicer to receive incoming messages with any method name */
-  GNUNET_PSYC_slicer_method_add (slicer, "", NULL,
-                                 slicer_recv_method, slicer_recv_modifier,
-                                 slicer_recv_data, slicer_recv_eom, NULL);
-  return slicer;
-}
-
-
-/* GUEST ENTER */
-
-
-/**
- * Callback called when the guest receives an entry decision from the host.
- *
- * It is called once after using guest_enter() or guest_enter_by_name(),
- * in case of a reconnection only the local enter callback is called.
- */
-static void
-guest_recv_entry_decision (void *cls,
-                           int is_admitted,
-                           const struct GNUNET_PSYC_Message *entry_msg)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Guest received entry decision %d\n",
-              is_admitted);
-
-  if (NULL != entry_msg)
-  {
-    struct GNUNET_PSYC_Environment *env = GNUNET_PSYC_env_create ();
-    const char *method_name = NULL;
-    const void *data = NULL;
-    uint16_t data_size = 0;
-    struct GNUNET_PSYC_MessageHeader *
-      pmsg = GNUNET_PSYC_message_header_create_from_psyc (entry_msg);
-    GNUNET_PSYC_message_parse (pmsg, &method_name, env, &data, &data_size);
-    GNUNET_free (pmsg);
-
-    GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-                "%s\n%.*s\n",
-                method_name, data_size, (const char *) data);
-  }
-
-  if (op_guest_enter && !opt_follow)
-  {
-    exit_success ();
-  }
-}
-
-
-/**
- * Callback called after a guest connection is established to the local service.
- */
-static void
-guest_recv_local_enter (void *cls, int result,
-                        const struct GNUNET_CRYPTO_EddsaPublicKey *pub_key,
-                        uint64_t max_message_id)
-{
-  char *pub_str = GNUNET_CRYPTO_eddsa_public_key_to_string (pub_key);
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Guest entered local place: %s, max_message_id: %" PRIu64 "\n",
-              pub_str, max_message_id);
-  GNUNET_free (pub_str);
-  GNUNET_assert (0 <= result);
-
-  if (op_guest_enter && !opt_follow)
-  {
-    exit_success ();
-  }
-}
-
-
-/**
- * Create entry request message.
- */
-static struct GNUNET_PSYC_Message *
-guest_enter_msg_create ()
-{
-  const char *method_name = "_request_enter";
-  struct GNUNET_PSYC_Environment *env = GNUNET_PSYC_env_create ();
-  GNUNET_PSYC_env_add (env, GNUNET_PSYC_OP_SET,
-                       "_foo", DATA2ARG ("bar"));
-  void *data = "let me in";
-  uint16_t data_size = strlen (data) + 1;
-
-  return GNUNET_PSYC_message_create (method_name, env, data, data_size);
-}
-
-
-/**
- * Enter a place as guest, using its public key and peer ID.
- */
-static void
-guest_enter (const struct GNUNET_CRYPTO_EddsaPublicKey *pub_key,
-             const struct GNUNET_PeerIdentity *peer)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Entering to place as guest.\n");
-
-  if (NULL == ego)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "--ego missing or invalid\n");
-    exit_fail ();
-    return;
-  }
-
-  struct GNUNET_PSYC_Message *join_msg = guest_enter_msg_create ();
-  gst = GNUNET_SOCIAL_guest_enter (app, ego, pub_key,
-                                   GNUNET_PSYC_SLAVE_JOIN_NONE,
-                                   peer, 0, NULL, join_msg, slicer_create (),
-                                   guest_recv_local_enter,
-                                   guest_recv_entry_decision, NULL);
-  GNUNET_free (join_msg);
-  plc = GNUNET_SOCIAL_guest_get_place (gst);
-}
-
-
-/**
- * Enter a place as guest using its GNS address.
- */
-static void
-guest_enter_by_name (const char *gns_name)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Entering to place by name as guest.\n");
-
-  struct GNUNET_PSYC_Message *join_msg = guest_enter_msg_create ();
-  gst = GNUNET_SOCIAL_guest_enter_by_name (app, ego, gns_name, NULL,
-                                           join_msg, slicer,
-                                           guest_recv_local_enter,
-                                           guest_recv_entry_decision, NULL);
-  GNUNET_free (join_msg);
-  plc = GNUNET_SOCIAL_guest_get_place (gst);
-}
-
-
-/* HOST ENTER */
-
-
-/**
- * Callback called when a @a nym wants to enter the place.
- *
- * The request needs to be replied with an entry decision.
- */
-static void
-host_answer_door (void *cls,
-                  struct GNUNET_SOCIAL_Nym *nym,
-                  const char *method_name,
-                  struct GNUNET_PSYC_Environment *env,
-                  const void *data,
-                  size_t data_size)
-{
-  const struct GNUNET_CRYPTO_EcdsaPublicKey *
-    nym_key = GNUNET_SOCIAL_nym_get_pub_key (nym);
-  char *
-    nym_str = GNUNET_CRYPTO_ecdsa_public_key_to_string (nym_key);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Entry request: %s\n", nym_str);
-  GNUNET_free (nym_str);
-
-  if (opt_welcome)
-  {
-    struct GNUNET_PSYC_Message *
-      resp = GNUNET_PSYC_message_create ("_notice_place_admit", env,
-                                         DATA2ARG ("Welcome, nym!"));
-    GNUNET_SOCIAL_host_entry_decision (hst, nym, GNUNET_YES, resp);
-    GNUNET_free (resp);
-  }
-  else if (opt_deny)
-  {
-    struct GNUNET_PSYC_Message *
-      resp = GNUNET_PSYC_message_create ("_notice_place_refuse", NULL,
-                                         DATA2ARG ("Go away!"));
-    GNUNET_SOCIAL_host_entry_decision (hst, nym, GNUNET_NO, resp);
-    GNUNET_free (resp);
-  }
-
-
-}
-
-
-/**
- * Callback called when a @a nym has left the place.
- */
-static void
-host_farewell (void *cls,
-               const struct GNUNET_SOCIAL_Nym *nym,
-               struct GNUNET_PSYC_Environment *env)
-{
-  const struct GNUNET_CRYPTO_EcdsaPublicKey *
-    nym_key = GNUNET_SOCIAL_nym_get_pub_key (nym);
-  char *
-    nym_str = GNUNET_CRYPTO_ecdsa_public_key_to_string (nym_key);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Farewell: %s\n", nym_str);
-  GNUNET_free (nym_str);
-}
-
-
-/**
- * Callback called after the host entered the place.
- */
-static void
-host_entered (void *cls, int result,
-              const struct GNUNET_CRYPTO_EddsaPublicKey *pub_key,
-              uint64_t max_message_id)
-{
-  place_pub_key = *pub_key;
-  char *pub_str = GNUNET_CRYPTO_eddsa_public_key_to_string (pub_key);
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Host entered: %s, max_message_id: %" PRIu64 "\n",
-              pub_str, max_message_id);
-  GNUNET_free (pub_str);
-
-  if (op_host_enter && !opt_follow)
-  {
-    exit_success ();
-  }
-}
-
-
-/**
- * Enter and start hosting a place.
- */
-static void
-host_enter ()
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "host_enter()\n");
-
-  if (NULL == ego)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "--ego missing or invalid\n");
-    exit_fail ();
-    return;
-  }
-
-  hst = GNUNET_SOCIAL_host_enter (app, ego,
-                                  GNUNET_PSYC_CHANNEL_PRIVATE,
-                                  slicer_create (), host_entered,
-                                  host_answer_door, host_farewell, NULL);
-  plc = GNUNET_SOCIAL_host_get_place (hst);
-}
-
-
-/* PLACE RECONNECT */
-
-
-/**
- * Perform operations common to both host & guest places.
- */
-static void
-place_reconnected ()
-{
-  static int first_run = GNUNET_YES;
-  if (GNUNET_NO == first_run)
-    return;
-  first_run = GNUNET_NO;
-
-  if (op_replay) {
-    history_replay (opt_start, opt_until, opt_method);
-  }
-  else if (op_replay_latest) {
-    history_replay_latest (opt_limit, opt_method);
-  }
-  else if (op_look_at) {
-    look_at (opt_name);
-  }
-  else if (op_look_for) {
-    look_for (opt_name);
-  }
-}
-
-
-/**
- * Callback called after reconnecting to a host place.
- */
-static void
-host_reconnected (void *cls, int result,
-                 const struct GNUNET_CRYPTO_EddsaPublicKey *place_pub_key,
-                 uint64_t max_message_id)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Host reconnected.\n");
-
-  if (op_host_leave) {
-    host_leave ();
-  }
-  else if (op_host_announce) {
-    host_announce (opt_method, opt_data, strlen (opt_data));
-  }
-  else if (op_host_assign) {
-    host_assign (opt_name, opt_data, strlen (opt_data) + 1);
-  }
-  else {
-    place_reconnected ();
-  }
-}
-
-
-/**
- * Callback called after reconnecting to a guest place.
- */
-static void
-guest_reconnected (void *cls, int result,
-                   const struct GNUNET_CRYPTO_EddsaPublicKey *place_pub_key,
-                   uint64_t max_message_id)
-{
-  char *place_pub_str = GNUNET_CRYPTO_eddsa_public_key_to_string (place_pub_key);
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Guest reconnected to place %s.\n", place_pub_str);
-  GNUNET_free (place_pub_str);
-
-  if (op_guest_leave) {
-    guest_leave ();
-  }
-  else if (op_guest_talk) {
-    guest_talk (opt_method, opt_data, strlen (opt_data));
-  }
-  else {
-    place_reconnected ();
-  }
-}
-
-
-/* APP */
-
-
-/**
- * Callback called after the ego and place callbacks.
- */
-static void
-app_connected (void *cls)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "App connected: %p\n", cls);
-
-  if (op_status)
-  {
-    exit_success ();
-  }
-  else if (op_host_enter)
-  {
-    host_enter ();
-  }
-  else if (op_guest_enter)
-  {
-    if (opt_gns)
-    {
-      guest_enter_by_name (opt_gns);
-    }
-    else
-    {
-      if (opt_peer)
-      {
-        if (GNUNET_OK != GNUNET_CRYPTO_eddsa_public_key_from_string (opt_peer,
-                                                                     strlen (opt_peer),
-                                                                     &peer.public_key))
-        {
-          GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                      "--peer invalid");
-          exit_fail ();
-          return;
-        }
-      }
-      else
-      {
-        peer = this_peer;
-      }
-      guest_enter (&place_pub_key, &peer);
-    }
-  }
-  printf(".\n");
-}
-
-
-/**
- * Callback notifying about a host place available for reconnection.
- */
-static void
-app_recv_host (void *cls,
-               struct GNUNET_SOCIAL_HostConnection *hconn,
-               struct GNUNET_SOCIAL_Ego *ego,
-               const struct GNUNET_CRYPTO_EddsaPublicKey *host_pub_key,
-               enum GNUNET_SOCIAL_AppPlaceState place_state)
-{
-  char *host_pub_str = GNUNET_CRYPTO_eddsa_public_key_to_string (host_pub_key);
-  printf ("Host\t%s\n", host_pub_str);
-  GNUNET_free (host_pub_str);
-
-  if ((op_host_reconnect || op_host_leave || op_host_announce || op_host_assign
-       || op_replay || op_replay_latest
-       || op_look_at || op_look_for)
-      && 0 == memcmp (&place_pub_key, host_pub_key, sizeof (*host_pub_key)))
-  {
-    hst = GNUNET_SOCIAL_host_enter_reconnect (hconn, slicer_create (), host_reconnected,
-                                              host_answer_door, host_farewell, NULL);
-    plc = GNUNET_SOCIAL_host_get_place (hst);
-  }
-}
-
-
-/**
- * Callback notifying about a guest place available for reconnection.
- */
-static void
-app_recv_guest (void *cls,
-                struct GNUNET_SOCIAL_GuestConnection *gconn,
-                struct GNUNET_SOCIAL_Ego *ego,
-                const struct GNUNET_CRYPTO_EddsaPublicKey *guest_pub_key,
-                enum GNUNET_SOCIAL_AppPlaceState place_state)
-{
-  char *guest_pub_str = GNUNET_CRYPTO_eddsa_public_key_to_string (guest_pub_key);
-  printf ("Guest\t%s\n", guest_pub_str);
-  GNUNET_free (guest_pub_str);
-
-  if ((op_guest_reconnect || op_guest_leave || op_guest_talk
-       || op_replay || op_replay_latest
-       || op_look_at || op_look_for)
-      && 0 == memcmp (&place_pub_key, guest_pub_key, sizeof (*guest_pub_key)))
-  {
-    gst = GNUNET_SOCIAL_guest_enter_reconnect (gconn, GNUNET_PSYC_SLAVE_JOIN_NONE,
-                                               slicer_create (), guest_reconnected, NULL);
-    plc = GNUNET_SOCIAL_guest_get_place (gst);
-  }
-}
-
-
-/**
- * Callback notifying about an available ego.
- */
-static void
-app_recv_ego (void *cls,
-              struct GNUNET_SOCIAL_Ego *e,
-              const struct GNUNET_CRYPTO_EcdsaPublicKey *pub_key,
-              const char *name)
-{
-  char *s = GNUNET_CRYPTO_ecdsa_public_key_to_string (pub_key);
-  printf ("Ego\t%s\t%s\n", s, name);
-  GNUNET_free (s);
-
-  if (0 == memcmp (&ego_pub_key, pub_key, sizeof (*pub_key))
-      || (NULL != opt_ego && 0 == strcmp (opt_ego, name)))
-  {
-    ego = e;
-  }
-
-}
-
-
-
-/**
- * Establish application connection to receive available egos and places.
- */
-static void
-app_connect (void *cls)
-{
-  app = GNUNET_SOCIAL_app_connect (cfg, opt_app,
-                                   app_recv_ego,
-                                   app_recv_host,
-                                   app_recv_guest,
-                                   app_connected,
-                                   NULL);
-}
-
-
-/**
- * Main function run by the scheduler.
- *
- * @param cls closure
- * @param args remaining command-line arguments
- * @param cfgfile name of the configuration file used (for saving, can be NULL!)
- * @param c configuration
- */
-static void
-run (void *cls, char *const *args, const char *cfgfile,
-     const struct GNUNET_CONFIGURATION_Handle *c)
-{
-  cfg = c;
-  GNUNET_CRYPTO_get_peer_identity (cfg, &this_peer);
-
-  if (!opt_method)
-    opt_method = "message";
-  if (!opt_data)
-    opt_data = "";
-  if (!opt_name)
-    opt_name = "";
-
-  if (! (op_status
-         || op_host_enter || op_host_reconnect || op_host_leave
-         || op_host_announce || op_host_assign
-         || op_guest_enter || op_guest_reconnect
-         || op_guest_leave || op_guest_talk
-         || op_replay || op_replay_latest
-         || op_look_at || op_look_for))
-  {
-    op_status = 1;
-    fputs("Caution: This tool does not produce correct binary safe PSYC syntax.\n\n", stderr);
-  }
-
-  GNUNET_SCHEDULER_add_shutdown (scheduler_shutdown, NULL);
-  if (!opt_follow)
-  {
-    timeout_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, timeout, NULL);
-  }
-
-  if ((op_host_reconnect || op_host_leave || op_host_announce || op_host_assign
-       || op_guest_reconnect || (op_guest_enter && !opt_gns)
-       || op_guest_leave || op_guest_talk
-       || op_replay || op_replay_latest
-       || op_look_at || op_look_for)
-      && (!opt_place
-          || GNUNET_OK != GNUNET_CRYPTO_eddsa_public_key_from_string (opt_place,
-                                                                      strlen (opt_place),
-                                                                      &place_pub_key)))
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                _("--place missing or invalid.\n"));
-    /* FIXME: why does it segfault here? */
-    exit_fail ();
-    return;
-  }
-
-  if (opt_ego)
-  {
-    if (GNUNET_OK !=
-        GNUNET_CRYPTO_ecdsa_public_key_from_string (opt_ego,
-                                                strlen (opt_ego),
-                                                &ego_pub_key))
-    {
-      FPRINTF (stderr,
-               _("Public key `%s' malformed\n"),
-               opt_ego);
-      exit_fail ();
-      return;
-    }
-  }
-
-  GNUNET_SCHEDULER_add_now (app_connect, NULL);
-}
-
-
-/**
- * The main function to obtain peer information.
- *
- * @param argc number of arguments from the command line
- * @param argv command line arguments
- * @return 0 ok, 1 on error
- */
-int
-main (int argc, char *const *argv)
-{
-  int res;
-  struct GNUNET_GETOPT_CommandLineOption options[] = {
-    /*
-     * gnunet program options in addition to the ones below:
-     *
-     * -c, --config=FILENAME
-     * -l, --logfile=LOGFILE
-     * -L, --log=LOGLEVEL
-     * -h, --help
-     * -v, --version
-     */
-
-    /* operations */
-
-    GNUNET_GETOPT_option_flag ('A',
-                                  "host-assign",
-                                  gettext_noop ("assign --name in state to --data"),
-                                  &op_host_assign),
-
-    GNUNET_GETOPT_option_flag ('B',
-                                  "guest-leave",
-                                  gettext_noop ("say good-bye and leave somebody else's place"),
-                                  &op_guest_leave),
-
-    GNUNET_GETOPT_option_flag ('C',
-                                  "host-enter",
-                                  gettext_noop ("create a place"),
-                                  &op_host_enter),
-
-    GNUNET_GETOPT_option_flag ('D',
-                                  "host-leave",
-                                  gettext_noop ("destroy a place we were hosting"),
-                                  &op_host_leave),
-
-    GNUNET_GETOPT_option_flag ('E',
-                                  "guest-enter",
-                                  gettext_noop ("enter somebody else's place"),
-                                  &op_guest_enter),
-
-
-    GNUNET_GETOPT_option_flag ('F',
-                                  "look-for",
-                                  gettext_noop ("find state matching name prefix"),
-                                  &op_look_for),
-
-    GNUNET_GETOPT_option_flag ('H',
-                                  "replay-latest",
-                                  gettext_noop ("replay history of messages up to the given --limit"),
-                                  &op_replay_latest),
-
-    GNUNET_GETOPT_option_flag ('N',
-                                  "host-reconnect",
-                                  gettext_noop ("reconnect to a previously created place"),
-                                  &op_host_reconnect),
-
-    GNUNET_GETOPT_option_flag ('P',
-                                  "host-announce",
-                                  gettext_noop ("publish something to a place we are hosting"),
-                                  &op_host_announce),
-
-    GNUNET_GETOPT_option_flag ('R',
-                                  "guest-reconnect",
-                                  gettext_noop ("reconnect to a previously entered place"),
-                                  &op_guest_reconnect),
-
-    GNUNET_GETOPT_option_flag ('S',
-                                  "look-at",
-                                  gettext_noop ("search for state matching exact name"),
-                                  &op_look_at),
-
-    GNUNET_GETOPT_option_flag ('T',
-                                  "guest-talk",
-                                  gettext_noop ("submit something to somebody's place"),
-                                  &op_guest_talk),
-
-    GNUNET_GETOPT_option_flag ('U',
-                                  "status",
-                                  gettext_noop ("list of egos and subscribed places"),
-                                  &op_status),
-
-    GNUNET_GETOPT_option_flag ('X',
-                                  "replay",
-                                  gettext_noop ("extract and replay history between message IDs --start and --until"),
-                                  &op_replay),
-
-
-    /* options */
-
-    GNUNET_GETOPT_option_string ('a',
-                                 "app",
-                                 "APPLICATION_ID",
-                                 gettext_noop ("application ID to use when connecting"),
-                                 &opt_app),
-
-    GNUNET_GETOPT_option_string ('d',
-                                 "data",
-                                 "DATA",
-                                 gettext_noop ("message body or state value"),
-                                 &opt_data),
-
-    GNUNET_GETOPT_option_string ('e',
-                                 "ego",
-                                 "NAME|PUBKEY",
-                                 gettext_noop ("name or public key of ego"),
-                                 &opt_ego),
-
-    GNUNET_GETOPT_option_flag ('f',
-                                  "follow",
-                                  gettext_noop ("wait for incoming messages"),
-                                  &opt_follow),
-
-    GNUNET_GETOPT_option_string ('g',
-                                 "gns",
-                                 "GNS_NAME",
-                                 gettext_noop ("GNS name"),
-                                 &opt_gns),
-
-    GNUNET_GETOPT_option_string ('i',
-                                 "peer",
-                                 "PEER_ID",
-                                 gettext_noop ("peer ID for --guest-enter"),
-                                 &opt_peer),
-
-    GNUNET_GETOPT_option_string ('k',
-                                 "name",
-                                 "VAR_NAME",
-                                 gettext_noop ("name (key) to query from state"),
-                                 &opt_name),
-
-    GNUNET_GETOPT_option_string ('m',
-                                 "method",
-                                 "METHOD_NAME",
-                                 gettext_noop ("method name"),
-                                 &opt_method),
-
-    GNUNET_GETOPT_option_ulong ('n',
-                                    "limit",
-                                    NULL,
-                                    gettext_noop ("number of messages to replay from history"),
-                                    &opt_limit),
-
-    GNUNET_GETOPT_option_string ('p',
-                                 "place",
-                                 "PUBKEY",
-                                 gettext_noop ("key address of place"),
-                                 &opt_place),
-
-    GNUNET_GETOPT_option_ulong ('s',
-                                    "start",
-                                    NULL,
-                                    gettext_noop ("start message ID for history replay"),
-                                    &opt_start),
-
-    GNUNET_GETOPT_option_flag ('w',
-                                  "welcome",
-                                  gettext_noop ("respond to entry requests by admitting all guests"),
-                                  &opt_welcome),
-
-    GNUNET_GETOPT_option_ulong ('u',
-                                    "until",
-                                    NULL,
-                                    gettext_noop ("end message ID for history replay"),
-                                    &opt_until),
-
-    GNUNET_GETOPT_option_flag ('y',
-                                  "deny",
-                                  gettext_noop ("respond to entry requests by refusing all guests"),
-                                  &opt_deny),
-
-    GNUNET_GETOPT_OPTION_END
-  };
-
-  if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
-    return 2;
-
-  const char *help =
-    _ ("gnunet-social - Interact with the social service: enter/leave, send/receive messages, access history and state.\n");
-  const char *usage =
-    "gnunet-social [--status]\n"
-    "\n"
-    "gnunet-social --host-enter --ego <NAME or PUBKEY> [--follow] [--welcome | --deny]\n"
-    "gnunet-social --host-reconnect --place <PUBKEY> [--follow] [--welcome | --deny]\n"
-    "gnunet-social --host-leave --place <PUBKEY>\n"
-    "gnunet-social --host-assign --place <PUBKEY> --name <NAME> --data <VALUE>\n"
-// FIXME: some state ops not implemented yet (no hurry)
-//  "gnunet-social --host-augment --place <PUBKEY> --name <NAME> --data <VALUE>\n"
-//  "gnunet-social --host-diminish --place <PUBKEY> --name <NAME> --data <VALUE>\n"
-//  "gnunet-social --host-set --place <PUBKEY> --name <NAME> --data <VALUE>\n"
-    "gnunet-social --host-announce --place <PUBKEY> --method <METHOD_NAME> --data <MESSAGE_BODY>\n"
-    "\n"
-    "gnunet-social --guest-enter --place <PUBKEY> --peer <PEERID> --ego <NAME or PUBKEY> [--follow]\n"
-    "gnunet-social --guest-enter --gns <GNS_NAME> --ego <NAME or PUBKEY> [--follow]\n"
-    "gnunet-social --guest-reconnect --place <PUBKEY> [--follow]\n"
-    "gnunet-social --guest-leave --place <PUBKEY>\n"
-    "gnunet-social --guest-talk --place <PUBKEY> --method <METHOD_NAME> --data <MESSAGE_BODY>\n"
-    "\n"
-    "gnunet-social --replay --place <PUBKEY> --start <MSGID> --until <MSGID>  [--method <METHOD_PREFIX>]\n"
-    "gnunet-social --replay-latest --place <PUBKEY> --limit <MSG_LIMIT> [--method <METHOD_PREFIX>]\n"
-    "\n"
-    "gnunet-social --look-at --place <PUBKEY> --name <FULL_NAME>\n"
-    "gnunet-social --look-for --place <PUBKEY> --name <NAME_PREFIX>\n";
-
-  res = GNUNET_PROGRAM_run (argc, argv, help, usage, options, &run, NULL);
-
-  GNUNET_free ((void *) argv);
-
-  if (GNUNET_OK == res)
-    return ret;
-  else
-    return 1;
-}
diff --git a/src/social/social.conf.in b/src/social/social.conf.in
deleted file mode 100644 (file)
index 3fe754c..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-[social]
-START_ON_DEMAND = @START_ON_DEMAND@
-BINARY = gnunet-service-social
-RUN_PER_USER = YES
-
-UNIXPATH = $GNUNET_USER_RUNTIME_DIR/gnunet-service-social.sock
-UNIX_MATCH_UID = YES
-UNIX_MATCH_GID = YES
-
-@UNIXONLY@PORT = 2116
-HOSTNAME = localhost
-ACCEPT_FROM = 127.0.0.1;
-ACCEPT_FROM6 = ::1;
-
-DATA_HOME = $GNUNET_DATA_HOME/social
diff --git a/src/social/social.h b/src/social/social.h
deleted file mode 100644 (file)
index 73f73f6..0000000
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- * This file is part of GNUnet
- * Copyright (C) 2013 GNUnet e.V.
- *
- * GNUnet is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNUnet is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
- */
-
-/**
- * @file social/social.h
- * @brief Common type definitions for the Social service and API.
- * @author Gabor X Toth
- */
-
-#ifndef SOCIAL_H
-#define SOCIAL_H
-
-#include "platform.h"
-#include "gnunet_social_service.h"
-
-enum MessageState
-{
-  MSG_STATE_START    = 0,
-  MSG_STATE_HEADER   = 1,
-  MSG_STATE_METHOD   = 2,
-  MSG_STATE_MODIFIER = 3,
-  MSG_STATE_MOD_CONT = 4,
-  MSG_STATE_DATA     = 5,
-  MSG_STATE_END      = 6,
-  MSG_STATE_CANCEL   = 7,
-  MSG_STATE_ERROR    = 8,
-};
-
-
-GNUNET_NETWORK_STRUCT_BEGIN
-
-/**** library -> service ****/
-
-
-struct AppConnectRequest
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_SOCIAL_APP_CONNECT
-   */
-  struct GNUNET_MessageHeader header;
-
-  /* Followed by char *app_id */
-};
-
-
-struct AppDetachRequest
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_SOCIAL_APP_DETACH
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * Public key of place.
-   */
-  struct GNUNET_CRYPTO_EddsaPublicKey place_pub_key;
-
-  /**
-   * Public key of ego.
-   */
-  struct GNUNET_CRYPTO_EcdsaPublicKey ego_pub_key;
-
-  /**
-   * Operation ID.
-   */
-  uint64_t op_id GNUNET_PACKED;
-};
-
-
-struct MsgProcRequest
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_SOCIAL_MSG_PROC_SET
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * @see enum GNUNET_SOCIAL_MsgProcFlags
-   */
-  uint32_t flags;
-
-  /* Followed by char *method_prefix */
-};
-
-
-struct HostEnterRequest
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_SOCIAL_HOST_ENTER
-   */
-  struct GNUNET_MessageHeader header;
-
-  uint32_t policy GNUNET_PACKED;
-
-  struct GNUNET_CRYPTO_EcdsaPublicKey ego_pub_key;
-
-  struct GNUNET_CRYPTO_EddsaPublicKey place_pub_key;
-
-  struct GNUNET_CRYPTO_EddsaPrivateKey place_key;
-
-  /* Followed by char *app_id */
-};
-
-
-struct GuestEnterRequest
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_SOCIAL_GUEST_ENTER
-   */
-  struct GNUNET_MessageHeader header;
-
-  uint32_t relay_count GNUNET_PACKED;
-
-  struct GNUNET_CRYPTO_EcdsaPublicKey ego_pub_key;
-
-  struct GNUNET_CRYPTO_EddsaPublicKey place_pub_key;
-
-  struct GNUNET_PeerIdentity origin;
-
-  uint32_t flags GNUNET_PACKED;
-
-  /* Followed by char *app_id */
-  /* Followed by struct GNUNET_PeerIdentity relays[relay_count] */
-  /* Followed by struct GNUNET_MessageHeader *join_msg */
-};
-
-
-/** Compatible parts of HostEnterRequest and GuestEnterRequest */
-struct PlaceEnterRequest
-{
-  struct GNUNET_MessageHeader header;
-
-  uint32_t reserved GNUNET_PACKED;
-
-  struct GNUNET_CRYPTO_EcdsaPublicKey ego_pub_key;
-
-  struct GNUNET_CRYPTO_EddsaPublicKey place_pub_key;
-};
-
-
-struct EgoPlacePublicKey
-{
-  struct GNUNET_CRYPTO_EcdsaPublicKey ego_pub_key;
-  struct GNUNET_CRYPTO_EddsaPublicKey place_pub_key;
-};
-
-
-struct GuestEnterByNameRequest
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_SOCIAL_GUEST_ENTER_BY_NAME
-   */
-  struct GNUNET_MessageHeader header;
-
-  struct GNUNET_CRYPTO_EcdsaPublicKey ego_pub_key;
-
-  /* Followed by char *app_id */
-  /* Followed by char *gns_name */
-  /* Followed by char *password */
-  /* Followed by struct GNUNET_MessageHeader *join_msg */
-};
-
-
-struct ZoneAddPlaceRequest
-{
-  struct GNUNET_MessageHeader header;
-
-  uint32_t relay_count GNUNET_PACKED;
-
-  /**
-   * Operation ID.
-   */
-  uint64_t op_id;
-
-  /**
-   * Expiration time: absolute value in us.
-   */
-  uint64_t expiration_time;
-
-  struct GNUNET_CRYPTO_EcdsaPublicKey ego_pub_key;
-
-  struct GNUNET_CRYPTO_EddsaPublicKey place_pub_key;
-
-  struct GNUNET_PeerIdentity origin;
-
-  /* Followed by const char *name */
-  /* Followed by const char *password */
-  /* Followed by  struct GNUNET_PeerIdentity *relays[relay_count] */
-};
-
-
-struct ZoneAddNymRequest
-{
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * Operation ID.
-   */
-  uint64_t op_id;
-
-  /**
-   * Expiration time: absolute value in us.
-   */
-  uint64_t expiration_time;
-
-  struct GNUNET_CRYPTO_EcdsaPublicKey ego_pub_key;
-
-  struct GNUNET_CRYPTO_EcdsaPublicKey nym_pub_key;
-
-  /* Followed by const char *name */
-};
-
-
-/**** service -> library ****/
-
-
-struct AppEgoMessage
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_SOCIAL_APP_EGO
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * Public key of ego.
-   */
-  struct GNUNET_CRYPTO_EcdsaPublicKey ego_pub_key;
-
-  /* Followed by char *name */
-};
-
-
-struct AppPlaceMessage
-{
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_SOCIAL_APP_PLACE
-   */
-  struct GNUNET_MessageHeader header;
-
-  struct GNUNET_CRYPTO_EcdsaPublicKey ego_pub_key;
-
-  struct GNUNET_CRYPTO_EddsaPublicKey place_pub_key;
-
-  uint8_t is_host;
-
-  uint8_t place_state;
-};
-
-
-struct HostEnterAck {
-  /**
-   * Type: GNUNET_MESSAGE_TYPE_SOCIAL_HOST_ENTER_ACK
-   */
-  struct GNUNET_MessageHeader header;
-
-  /**
-   * Status code for the operation.
-   */
-  uint32_t result_code GNUNET_PACKED;
-
-  /**
-   * Last message ID sent to the channel.
-   */
-  uint64_t max_message_id GNUNET_PACKED;
-
-  /**
-   * Public key of the place.
-   */
-  struct GNUNET_CRYPTO_EddsaPublicKey place_pub_key;
-};
-
-
-GNUNET_NETWORK_STRUCT_END
-
-#endif
diff --git a/src/social/social_api.c b/src/social/social_api.c
deleted file mode 100644 (file)
index 9b96580..0000000
+++ /dev/null
@@ -1,2827 +0,0 @@
-/*
- * This file is part of GNUnet
- * Copyright (C) 2013 GNUnet e.V.
- *
- * GNUnet is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNUnet is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
- */
-
-/**
- * @author Gabor X Toth
- *
- * @file
- * Social service; implements social interactions using the PSYC service.
- */
-
-#include <inttypes.h>
-#include <string.h>
-
-#include "platform.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_psyc_service.h"
-#include "gnunet_psyc_util_lib.h"
-#include "gnunet_social_service.h"
-#include "social.h"
-
-#define LOG(kind,...) GNUNET_log_from (kind, "social-api",__VA_ARGS__)
-
-/**
- * Handle for an ego.
- */
-struct GNUNET_SOCIAL_Ego
-{
-  struct GNUNET_CRYPTO_EcdsaPublicKey pub_key;
-  struct GNUNET_HashCode pub_key_hash;
-  char *name;
-};
-
-
-/**
- * Handle for a pseudonym of another user in the network.
- */
-struct GNUNET_SOCIAL_Nym
-{
-  struct GNUNET_CRYPTO_EcdsaPublicKey pub_key;
-  struct GNUNET_HashCode pub_key_hash;
-};
-
-
-/**
- * Handle for an application.
- */
-struct GNUNET_SOCIAL_App
-{
-  /**
-   * Configuration to use.
-   */
-  const struct GNUNET_CONFIGURATION_Handle *cfg;
-
-  /**
-   * Client connection to the service.
-   */
-  struct GNUNET_MQ_Handle *mq;
-
-  /**
-   * Message to send on connect.
-   */
-  struct GNUNET_MQ_Envelope *connect_env;
-
-  /**
-   * Time to wait until we try to reconnect on failure.
-   */
-  struct GNUNET_TIME_Relative reconnect_delay;
-
-  /**
-   * Task for reconnecting when the listener fails.
-   */
-  struct GNUNET_SCHEDULER_Task *reconnect_task;
-
-  /**
-   * Async operations.
-   */
-  struct GNUNET_OP_Handle *op;
-
-  /**
-   * Function called after disconnected from the service.
-   */
-  GNUNET_ContinuationCallback disconnect_cb;
-
-  /**
-   * Closure for @a disconnect_cb.
-   */
-  void *disconnect_cls;
-
-  /**
-   * Application ID.
-   */
-  char *id;
-
-  /**
-   * Hash map of all egos.
-   * pub_key_hash -> struct GNUNET_SOCIAL_Ego *
-   */
-  struct GNUNET_CONTAINER_MultiHashMap *egos;
-
-  GNUNET_SOCIAL_AppEgoCallback ego_cb;
-  GNUNET_SOCIAL_AppHostPlaceCallback host_cb;
-  GNUNET_SOCIAL_AppGuestPlaceCallback guest_cb;
-  GNUNET_SOCIAL_AppConnectedCallback connected_cb;
-  void *cb_cls;
-};
-
-
-struct GNUNET_SOCIAL_HostConnection
-{
-  struct GNUNET_SOCIAL_App *app;
-
-  struct AppPlaceMessage plc_msg;
-};
-
-
-struct GNUNET_SOCIAL_GuestConnection
-{
-  struct GNUNET_SOCIAL_App *app;
-
-  struct AppPlaceMessage plc_msg;
-};
-
-
-/**
- * Handle for a place where social interactions happen.
- */
-struct GNUNET_SOCIAL_Place
-{
-  /**
-   * Configuration to use.
-   */
-  const struct GNUNET_CONFIGURATION_Handle *cfg;
-
-  /**
-   * Client connection to the service.
-   */
-  struct GNUNET_MQ_Handle *mq;
-
-  /**
-   * Message to send on connect.
-   */
-  struct GNUNET_MQ_Envelope *connect_env;
-
-  /**
-   * Time to wait until we try to reconnect on failure.
-   */
-  struct GNUNET_TIME_Relative reconnect_delay;
-
-  /**
-   * Task for reconnecting when the listener fails.
-   */
-  struct GNUNET_SCHEDULER_Task *reconnect_task;
-
-  /**
-   * Async operations.
-   */
-  struct GNUNET_OP_Handle *op;
-
-  /**
-   * Transmission handle.
-   */
-  struct GNUNET_PSYC_TransmitHandle *tmit;
-
-  /**
-   * Slicer for processing incoming messages.
-   */
-  struct GNUNET_PSYC_Slicer *slicer;
-
-  // FIXME: do we need is_disconnecing like on the psyc and multicast APIs?
-  /**
-   * Function called after disconnected from the service.
-   */
-  GNUNET_ContinuationCallback disconnect_cb;
-
-  /**
-   * Closure for @a disconnect_cb.
-   */
-  void *disconnect_cls;
-
-  /**
-   * Public key of the place.
-   */
-  struct GNUNET_CRYPTO_EddsaPublicKey pub_key;
-
-  /**
-   * Public key of the ego.
-   */
-  struct GNUNET_CRYPTO_EcdsaPublicKey ego_pub_key;
-
-  /**
-   * Does this place belong to a host (#GNUNET_YES) or guest (#GNUNET_NO)?
-   */
-  uint8_t is_host;
-};
-
-
-/**
- * Host handle for a place that we entered.
- */
-struct GNUNET_SOCIAL_Host
-{
-  struct GNUNET_SOCIAL_Place plc;
-
-  /**
-   * Slicer for processing incoming messages from guests.
-   */
-  struct GNUNET_PSYC_Slicer *slicer;
-
-  GNUNET_SOCIAL_HostEnterCallback enter_cb;
-
-  GNUNET_SOCIAL_AnswerDoorCallback answer_door_cb;
-
-  GNUNET_SOCIAL_FarewellCallback farewell_cb;
-
-  /**
-   * Closure for callbacks.
-   */
-  void *cb_cls;
-
-  struct GNUNET_SOCIAL_Nym *notice_place_leave_nym;
-  struct GNUNET_PSYC_Environment *notice_place_leave_env;
-};
-
-
-/**
- * Guest handle for place that we entered.
- */
-struct GNUNET_SOCIAL_Guest
-{
-  struct GNUNET_SOCIAL_Place plc;
-
-  GNUNET_SOCIAL_GuestEnterCallback enter_cb;
-
-  GNUNET_SOCIAL_EntryDecisionCallback entry_dcsn_cb;
-
-  /**
-   * Closure for callbacks.
-   */
-  void *cb_cls;
-};
-
-
-/**
- * Hash map of all nyms.
- * pub_key_hash -> struct GNUNET_SOCIAL_Nym *
- */
-struct GNUNET_CONTAINER_MultiHashMap *nyms;
-
-
-/**
- * Handle for an announcement request.
- */
-struct GNUNET_SOCIAL_Announcement
-{
-
-};
-
-
-/**
- * A talk request.
- */
-struct GNUNET_SOCIAL_TalkRequest
-{
-
-};
-
-
-/**
- * A history lesson.
- */
-struct GNUNET_SOCIAL_HistoryRequest
-{
-  /**
-   * Place.
-   */
-  struct GNUNET_SOCIAL_Place *plc;
-
-  /**
-   * Operation ID.
-   */
-  uint64_t op_id;
-
-  /**
-   * Slicer for processing incoming messages.
-   */
-  struct GNUNET_PSYC_Slicer *slicer;
-
-  /**
-   * Function to call when the operation finished.
-   */
-  GNUNET_ResultCallback result_cb;
-
-  /**
-   * Closure for @a result_cb.
-   */
-  void *cls;
-};
-
-
-struct GNUNET_SOCIAL_LookHandle
-{
-  /**
-   * Place.
-   */
-  struct GNUNET_SOCIAL_Place *plc;
-
-  /**
-   * Operation ID.
-   */
-  uint64_t op_id;
-
-  /**
-   * State variable result callback.
-   */
-  GNUNET_PSYC_StateVarCallback var_cb;
-
-  /**
-   * Function to call when the operation finished.
-   */
-  GNUNET_ResultCallback result_cb;
-
-  /**
-   * Name of current modifier being received.
-   */
-  char *mod_name;
-
-  /**
-   * Size of current modifier value being received.
-   */
-  size_t mod_value_size;
-
-  /**
-   * Remaining size of current modifier value still to be received.
-   */
-  size_t mod_value_remaining;
-
-  /**
-   * Closure for @a result_cb.
-   */
-  void *cls;
-};
-
-
-struct ZoneAddPlaceHandle
-{
-  GNUNET_ResultCallback result_cb;
-  void *result_cls;
-};
-
-
-struct ZoneAddNymHandle
-{
-  GNUNET_ResultCallback result_cb;
-  void *result_cls;
-};
-
-
-/*** CLEANUP / DISCONNECT ***/
-
-
-static void
-host_cleanup (struct GNUNET_SOCIAL_Host *hst)
-{
-  if (NULL != hst->slicer)
-  {
-    GNUNET_PSYC_slicer_destroy (hst->slicer);
-    hst->slicer = NULL;
-  }
-  GNUNET_free (hst);
-}
-
-
-static void
-guest_cleanup (struct GNUNET_SOCIAL_Guest *gst)
-{
-  GNUNET_free (gst);
-}
-
-
-static void
-place_cleanup (struct GNUNET_SOCIAL_Place *plc)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "cleaning up place %p\n",
-              plc);
-  if (NULL != plc->tmit)
-  {
-    GNUNET_PSYC_transmit_destroy (plc->tmit);
-    plc->tmit = NULL;
-  }
-  if (NULL != plc->connect_env)
-  {
-    GNUNET_MQ_discard (plc->connect_env);
-    plc->connect_env = NULL;
-  }
-  if (NULL != plc->mq)
-  {
-    GNUNET_MQ_destroy (plc->mq);
-    plc->mq = NULL;
-  }
-  if (NULL != plc->disconnect_cb)
-  {
-    plc->disconnect_cb (plc->disconnect_cls);
-    plc->disconnect_cb = NULL;
-  }
-
-  (GNUNET_YES == plc->is_host)
-    ? host_cleanup ((struct GNUNET_SOCIAL_Host *) plc)
-    : guest_cleanup ((struct GNUNET_SOCIAL_Guest *) plc);
-}
-
-
-static void
-place_disconnect (struct GNUNET_SOCIAL_Place *plc)
-{
-  place_cleanup (plc);
-}
-
-
-/*** NYM ***/
-
-static struct GNUNET_SOCIAL_Nym *
-nym_get_or_create (const struct GNUNET_CRYPTO_EcdsaPublicKey *pub_key)
-{
-  struct GNUNET_SOCIAL_Nym *nym = NULL;
-  struct GNUNET_HashCode pub_key_hash;
-
-  if (NULL == pub_key)
-    return NULL;
-
-  GNUNET_CRYPTO_hash (pub_key, sizeof (*pub_key), &pub_key_hash);
-
-  if (NULL == nyms)
-    nyms = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_YES);
-  else
-    nym = GNUNET_CONTAINER_multihashmap_get (nyms, &pub_key_hash);
-
-  if (NULL == nym)
-  {
-    nym = GNUNET_new (struct GNUNET_SOCIAL_Nym);
-    nym->pub_key = *pub_key;
-    nym->pub_key_hash = pub_key_hash;
-    GNUNET_CONTAINER_multihashmap_put (nyms, &nym->pub_key_hash, nym,
-                                       GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
-  }
-  return nym;
-}
-
-
-static void
-nym_destroy (struct GNUNET_SOCIAL_Nym *nym)
-{
-  GNUNET_CONTAINER_multihashmap_remove (nyms, &nym->pub_key_hash, nym);
-  GNUNET_free (nym);
-}
-
-
-/*** MESSAGE HANDLERS ***/
-
-/** _notice_place_leave from guests */
-
-static void
-host_recv_notice_place_leave_method (void *cls,
-                                     const struct GNUNET_PSYC_MessageHeader *msg,
-                                     const struct GNUNET_PSYC_MessageMethod *meth,
-                                     uint64_t message_id,
-                                     const char *method_name)
-{
-  struct GNUNET_SOCIAL_Host *hst = cls;
-
-  if (0 == memcmp (&(struct GNUNET_CRYPTO_EcdsaPublicKey) {},
-                   &msg->slave_pub_key, sizeof (msg->slave_pub_key)))
-    return;
-
-  struct GNUNET_SOCIAL_Nym *nym = nym_get_or_create (&msg->slave_pub_key);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Host received method for message ID %" PRIu64 " from nym %s: %s\n",
-              message_id, GNUNET_h2s (&nym->pub_key_hash), method_name);
-
-  hst->notice_place_leave_nym = (struct GNUNET_SOCIAL_Nym *) nym;
-  hst->notice_place_leave_env = GNUNET_PSYC_env_create ();
-
-  char *str = GNUNET_CRYPTO_ecdsa_public_key_to_string (&hst->notice_place_leave_nym->pub_key);
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "_notice_place_leave: got method from nym %s (%s).\n",
-              GNUNET_h2s (&hst->notice_place_leave_nym->pub_key_hash), str);
-  GNUNET_free (str);
-}
-
-
-static void
-host_recv_notice_place_leave_modifier (void *cls,
-                                       const struct GNUNET_PSYC_MessageHeader *msg,
-                                       const struct GNUNET_MessageHeader *pmsg,
-                                       uint64_t message_id,
-                                       enum GNUNET_PSYC_Operator oper,
-                                       const char *name,
-                                       const void *value,
-                                       uint16_t value_size,
-                                       uint16_t full_value_size)
-{
-  struct GNUNET_SOCIAL_Host *hst = cls;
-  if (NULL == hst->notice_place_leave_env)
-    return;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Host received modifier for _notice_place_leave message with ID %" PRIu64 ":\n"
-              "%c%s: %.*s\n",
-              message_id, oper, name, value_size, (const char *) value);
-
-  /* skip _nym, it's added later in eom() */
-  if (0 == memcmp (name, "_nym", sizeof ("_nym"))
-      || 0 == memcmp (name, "_nym_", sizeof ("_nym_") - 1))
-    return;
-
-  GNUNET_PSYC_env_add (hst->notice_place_leave_env,
-                       GNUNET_PSYC_OP_SET, name, value, value_size);
-}
-
-
-static void
-host_recv_notice_place_leave_eom (void *cls,
-                                  const struct GNUNET_PSYC_MessageHeader *msg,
-                                  const struct GNUNET_MessageHeader *pmsg,
-                                  uint64_t message_id,
-                                  uint8_t is_cancelled)
-{
-  struct GNUNET_SOCIAL_Host *hst = cls;
-  if (NULL == hst->notice_place_leave_env)
-    return;
-
-  char *str = GNUNET_CRYPTO_ecdsa_public_key_to_string (&hst->notice_place_leave_nym->pub_key);
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "_notice_place_leave: got EOM from nym %s (%s).\n",
-              GNUNET_h2s (&hst->notice_place_leave_nym->pub_key_hash), str);
-  GNUNET_free (str);
-
-  if (GNUNET_YES != is_cancelled)
-  {
-    if (NULL != hst->farewell_cb)
-      hst->farewell_cb (hst->cb_cls, hst->notice_place_leave_nym,
-                        hst->notice_place_leave_env);
-    /* announce leaving guest to place */
-    GNUNET_PSYC_env_add (hst->notice_place_leave_env, GNUNET_PSYC_OP_SET,
-                         "_nym", hst->notice_place_leave_nym,
-                         sizeof (*hst->notice_place_leave_nym));
-    GNUNET_SOCIAL_host_announce (hst, "_notice_place_leave",
-                                 hst->notice_place_leave_env,
-                                 NULL, NULL, GNUNET_SOCIAL_ANNOUNCE_NONE);
-    nym_destroy (hst->notice_place_leave_nym);
-  }
-  GNUNET_PSYC_env_destroy (hst->notice_place_leave_env);
-  hst->notice_place_leave_env = NULL;
-}
-
-
-/*** PLACE ***/
-
-
-static int
-check_place_result (void *cls,
-                    const struct GNUNET_OperationResultMessage *res)
-{
-  uint16_t size = ntohs (res->header.size);
-  if (size < sizeof (*res))
-  { /* Error, message too small. */
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-  return GNUNET_OK;
-}
-
-
-static void
-handle_place_result (void *cls,
-                     const struct GNUNET_OperationResultMessage *res)
-{
-  struct GNUNET_SOCIAL_Place *plc = cls;
-
-  uint16_t size = ntohs (res->header.size);
-  uint16_t data_size = size - sizeof (*res);
-  const char *data = (0 < data_size) ? (const char *) &res[1] : NULL;
-
-  GNUNET_OP_result (plc->op, GNUNET_ntohll (res->op_id),
-                    GNUNET_ntohll (res->result_code),
-                    data, data_size, NULL);
-}
-
-
-static int
-check_app_result (void *cls,
-                  const struct GNUNET_OperationResultMessage *res)
-{
-  uint16_t size = ntohs (res->header.size);
-  if (size < sizeof (*res))
-  { /* Error, message too small. */
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-  return GNUNET_OK;
-}
-
-
-static void
-handle_app_result (void *cls,
-                   const struct GNUNET_OperationResultMessage *res)
-{
-  struct GNUNET_SOCIAL_App *app = cls;
-
-  uint16_t size = ntohs (res->header.size);
-  uint16_t data_size = size - sizeof (*res);
-  const char *data = (0 < data_size) ? (const char *) &res[1] : NULL;
-
-  GNUNET_OP_result (app->op, GNUNET_ntohll (res->op_id),
-                    GNUNET_ntohll (res->result_code),
-                    data, data_size, NULL);
-}
-
-
-static void
-op_recv_history_result (void *cls, int64_t result,
-                        const void *err_msg, uint16_t err_msg_size)
-{
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Received history replay result: %" PRId64 ".\n", result);
-
-  struct GNUNET_SOCIAL_HistoryRequest *hist = cls;
-
-  if (NULL != hist->result_cb)
-    hist->result_cb (hist->cls, result, err_msg, err_msg_size);
-
-  GNUNET_free (hist);
-}
-
-
-static void
-op_recv_state_result (void *cls, int64_t result,
-                      const void *err_msg, uint16_t err_msg_size)
-{
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Received state request result: %" PRId64 ".\n", result);
-
-  struct GNUNET_SOCIAL_LookHandle *look = cls;
-
-  if (NULL != look->result_cb)
-    look->result_cb (look->cls, result, err_msg, err_msg_size);
-
-  GNUNET_free (look);
-}
-
-
-static int
-check_place_history_result (void *cls,
-                            const struct GNUNET_OperationResultMessage *res)
-{
-  struct GNUNET_PSYC_MessageHeader *
-    pmsg = (struct GNUNET_PSYC_MessageHeader *) GNUNET_MQ_extract_nested_mh (res);
-  uint16_t size = ntohs (res->header.size);
-
-  if (NULL == pmsg || size < sizeof (*res) + sizeof (*pmsg))
-  { /* Error, message too small. */
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
-  }
-  return GNUNET_OK;
-}
-
-
-static void
-handle_place_history_result (void *cls,
-                             const struct GNUNET_OperationResultMessage *res)
-{
-  struct GNUNET_SOCIAL_Place *plc = cls;
-  struct GNUNET_PSYC_MessageHeader *
-    pmsg = (struct GNUNET_PSYC_MessageHeader *) GNUNET_MQ_extract_nested_mh (res);
-
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "%p Received historic fragment for message #%" PRIu64 ".\n",
-       plc, GNUNET_ntohll (pmsg->message_id));
-
-  GNUNET_ResultCallback result_cb = NULL;
-  struct GNUNET_SOCIAL_HistoryRequest *hist = NULL;
-
-  if (GNUNET_YES != GNUNET_OP_get (plc->op,
-                                   GNUNET_ntohll (res->op_id),
-                                   &result_cb, (void *) &hist, NULL))
-  { /* Operation not found. */
-    LOG (GNUNET_ERROR_TYPE_WARNING,
-         "%p Replay operation not found for historic fragment of message #%"
-         PRIu64 ".\n",
-         plc, GNUNET_ntohll (pmsg->message_id));
-    return;
-  }
-
-  GNUNET_PSYC_slicer_message (hist->slicer,
-                              (const struct GNUNET_PSYC_MessageHeader *) pmsg);
-}
-
-
-static int
-check_place_state_result (void *cls,
-                          const struct GNUNET_OperationResultMessage *res)
-{
-  const struct GNUNET_MessageHeader *mod = GNUNET_MQ_extract_nested_mh (res);
-  if (NULL == mod)
-  {
-    GNUNET_break_op (0);
-    LOG (GNUNET_ERROR_TYPE_WARNING,
-         "Invalid modifier in state result\n");
-    return GNUNET_SYSERR;
-  }
-
-  uint16_t size = ntohs (res->header.size);
-  uint16_t mod_size = ntohs (mod->size);
-  if (size - sizeof (*res) != mod_size)
-  {
-    GNUNET_break_op (0);
-    LOG (GNUNET_ERROR_TYPE_WARNING,
-         "Invalid modifier size in state result: %u - %u != %u\n",
-         ntohs (res->header.size), sizeof (*res), mod_size);
-    return GNUNET_SYSERR;
-  }
-  return GNUNET_OK;
-}
-
-
-static void
-handle_place_state_result (void *cls,
-                           const struct GNUNET_OperationResultMessage *res)
-{
-  struct GNUNET_SOCIAL_Place *plc = cls;
-
-  GNUNET_ResultCallback result_cb = NULL;
-  struct GNUNET_SOCIAL_LookHandle *look = NULL;
-
-  if (GNUNET_YES != GNUNET_OP_get (plc->op,
-                                   GNUNET_ntohll (res->op_id),
-                                   &result_cb, (void *) &look, NULL))
-  { /* Operation not found. */
-    return;
-  }
-
-  const struct GNUNET_MessageHeader *mod = GNUNET_MQ_extract_nested_mh (res);
-  uint16_t mod_size = ntohs (mod->size);
-
-  switch (ntohs (mod->type))
-  {
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MODIFIER:
-  {
-    const struct GNUNET_PSYC_MessageModifier *
-      pmod = (const struct GNUNET_PSYC_MessageModifier *) mod;
-
-    const char *name = (const char *) &pmod[1];
-    uint16_t name_size = ntohs (pmod->name_size);
-    if (0 == name_size
-        || mod_size - sizeof (*pmod) < name_size
-        || '\0' != name[name_size - 1])
-    {
-      GNUNET_break_op (0);
-      LOG (GNUNET_ERROR_TYPE_WARNING,
-           "Invalid modifier name in state result\n");
-      return;
-    }
-    look->mod_value_size = ntohs (pmod->value_size);
-    look->var_cb (look->cls, mod, name, name + name_size,
-                  mod_size - sizeof (*mod) - name_size,
-                  look->mod_value_size);
-    if (look->mod_value_size > mod_size - sizeof (*mod) - name_size)
-    {
-        look->mod_value_remaining = look->mod_value_size;
-        look->mod_name = GNUNET_malloc (name_size);
-        GNUNET_memcpy (look->mod_name, name, name_size);
-    }
-    break;
-  }
-
-  case GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_MOD_CONT:
-    look->var_cb (look->cls, mod, look->mod_name, (const char *) &mod[1],
-                  mod_size - sizeof (*mod), look->mod_value_size);
-    look->mod_value_remaining -= mod_size - sizeof (*mod);
-    if (0 == look->mod_value_remaining)
-    {
-        GNUNET_free (look->mod_name);
-    }
-    break;
-  }
-}
-
-
-static void
-handle_place_message_ack (void *cls,
-                          const struct GNUNET_MessageHeader *msg)
-{
-  struct GNUNET_SOCIAL_Place *plc = cls;
-
-  GNUNET_PSYC_transmit_got_ack (plc->tmit);
-}
-
-
-static int
-check_place_message (void *cls,
-                     const struct GNUNET_PSYC_MessageHeader *pmsg)
-{
-  return GNUNET_OK;
-}
-
-
-static void
-handle_place_message (void *cls,
-                      const struct GNUNET_PSYC_MessageHeader *pmsg)
-{
-  struct GNUNET_SOCIAL_Place *plc = cls;
-
-  GNUNET_PSYC_slicer_message (plc->slicer, pmsg);
-}
-
-
-static int
-check_host_message (void *cls,
-                    const struct GNUNET_PSYC_MessageHeader *pmsg)
-{
-  return GNUNET_OK;
-}
-
-
-static void
-handle_host_message (void *cls,
-                     const struct GNUNET_PSYC_MessageHeader *pmsg)
-{
-  struct GNUNET_SOCIAL_Host *hst = cls;
-
-  GNUNET_PSYC_slicer_message (hst->slicer, pmsg);
-  GNUNET_PSYC_slicer_message (hst->plc.slicer, pmsg);
-}
-
-
-static void
-handle_host_enter_ack (void *cls,
-                       const struct HostEnterAck *hack)
-{
-  struct GNUNET_SOCIAL_Host *hst = cls;
-
-  hst->plc.pub_key = hack->place_pub_key;
-
-  int32_t result = ntohl (hack->result_code);
-  if (NULL != hst->enter_cb)
-    hst->enter_cb (hst->cb_cls, result, &hack->place_pub_key,
-                   GNUNET_ntohll (hack->max_message_id));
-}
-
-
-static int
-check_host_enter_request (void *cls,
-                          const struct GNUNET_PSYC_JoinRequestMessage *req)
-{
-  return GNUNET_OK;
-}
-
-
-static void
-handle_host_enter_request (void *cls,
-                           const struct GNUNET_PSYC_JoinRequestMessage *req)
-{
-  struct GNUNET_SOCIAL_Host *hst = cls;
-
-  if (NULL == hst->answer_door_cb)
-     return;
-
-  const char *method_name = NULL;
-  struct GNUNET_PSYC_Environment *env = NULL;
-  struct GNUNET_PSYC_MessageHeader *entry_pmsg = NULL;
-  const void *data = NULL;
-  uint16_t data_size = 0;
-  char *str;
-  const struct GNUNET_PSYC_Message *join_msg = NULL;
-
-  do
-  {
-    if (sizeof (*req) + sizeof (*join_msg) <= ntohs (req->header.size))
-    {
-      join_msg = (struct GNUNET_PSYC_Message *) GNUNET_MQ_extract_nested_mh (req);
-      LOG (GNUNET_ERROR_TYPE_DEBUG,
-           "Received join_msg of type %u and size %u.\n",
-           ntohs (join_msg->header.type), ntohs (join_msg->header.size));
-
-      env = GNUNET_PSYC_env_create ();
-      entry_pmsg = GNUNET_PSYC_message_header_create_from_psyc (join_msg);
-      if (GNUNET_OK != GNUNET_PSYC_message_parse (entry_pmsg, &method_name, env,
-                                                  &data, &data_size))
-      {
-        GNUNET_break_op (0);
-        str = GNUNET_CRYPTO_ecdsa_public_key_to_string (&req->slave_pub_key);
-        LOG (GNUNET_ERROR_TYPE_WARNING,
-             "Ignoring invalid entry request from nym %s.\n",
-             str);
-        GNUNET_free (str);
-        break;
-      }
-    }
-
-    struct GNUNET_SOCIAL_Nym *nym = nym_get_or_create (&req->slave_pub_key);
-    hst->answer_door_cb (hst->cb_cls, nym, method_name, env,
-                         data, data_size);
-  } while (0);
-
-  if (NULL != env)
-    GNUNET_PSYC_env_destroy (env);
-  if (NULL != entry_pmsg)
-    GNUNET_free (entry_pmsg);
-}
-
-
-static void
-handle_guest_enter_ack (void *cls,
-                        const struct GNUNET_PSYC_CountersResultMessage *cres)
-{
-  struct GNUNET_SOCIAL_Guest *gst = cls;
-
-  int32_t result = ntohl (cres->result_code);
-  if (NULL != gst->enter_cb)
-    gst->enter_cb (gst->cb_cls, result, &gst->plc.pub_key,
-                   GNUNET_ntohll (cres->max_message_id));
-}
-
-
-static int
-check_guest_enter_decision (void *cls,
-                            const struct GNUNET_PSYC_JoinDecisionMessage *dcsn)
-{
-  return GNUNET_OK;
-}
-
-
-static void
-handle_guest_enter_decision (void *cls,
-                             const struct GNUNET_PSYC_JoinDecisionMessage *dcsn)
-{
-  struct GNUNET_SOCIAL_Guest *gst = cls;
-
-  struct GNUNET_PSYC_Message *pmsg = NULL;
-  if (ntohs (dcsn->header.size) > sizeof (*dcsn))
-    pmsg = (struct GNUNET_PSYC_Message *) GNUNET_MQ_extract_nested_mh (dcsn);
-
-  if (NULL != gst->entry_dcsn_cb)
-    gst->entry_dcsn_cb (gst->cb_cls, ntohl (dcsn->is_admitted), pmsg);
-}
-
-
-static int
-check_app_ego (void *cls,
-               const struct AppEgoMessage *emsg)
-{
-  return GNUNET_OK;
-}
-
-
-static void
-handle_app_ego (void *cls,
-                const struct AppEgoMessage *emsg)
-{
-  struct GNUNET_SOCIAL_App *app = cls;
-
-  uint16_t name_size = ntohs (emsg->header.size) - sizeof (*emsg);
-
-  struct GNUNET_HashCode ego_pub_hash;
-  GNUNET_CRYPTO_hash (&emsg->ego_pub_key, sizeof (emsg->ego_pub_key),
-                      &ego_pub_hash);
-
-  struct GNUNET_SOCIAL_Ego *
-    ego = GNUNET_CONTAINER_multihashmap_get (app->egos, &ego_pub_hash);
-  if (NULL == ego)
-  {
-    ego = GNUNET_malloc (sizeof (*ego));
-    ego->pub_key = emsg->ego_pub_key;
-    ego->name = GNUNET_malloc (name_size);
-    GNUNET_memcpy (ego->name, &emsg[1], name_size);
-  }
-  else
-  {
-    ego->name = GNUNET_realloc (ego->name, name_size);
-    GNUNET_memcpy (ego->name, &emsg[1], name_size);
-  }
-
-  GNUNET_CONTAINER_multihashmap_put (app->egos, &ego_pub_hash, ego,
-                                     GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE);
-
-  if (NULL != app->ego_cb)
-    app->ego_cb (app->cb_cls, ego, &ego->pub_key, ego->name);
-}
-
-
-static void
-handle_app_ego_end (void *cls,
-                    const struct GNUNET_MessageHeader *msg)
-{
-  //struct GNUNET_SOCIAL_App *app = cls;
-}
-
-
-static int
-check_app_place (void *cls,
-                 const struct AppPlaceMessage *pmsg)
-{
-  return GNUNET_OK;
-}
-
-
-static void
-handle_app_place (void *cls,
-                  const struct AppPlaceMessage *pmsg)
-{
-  struct GNUNET_SOCIAL_App *app = cls;
-
-  if ((GNUNET_YES == pmsg->is_host && NULL == app->host_cb)
-      || (GNUNET_NO == pmsg->is_host && NULL == app->guest_cb))
-    return;
-
-  struct GNUNET_HashCode ego_pub_hash;
-  GNUNET_CRYPTO_hash (&pmsg->ego_pub_key, sizeof (pmsg->ego_pub_key),
-                      &ego_pub_hash);
-  struct GNUNET_SOCIAL_Ego *
-    ego = GNUNET_CONTAINER_multihashmap_get (app->egos, &ego_pub_hash);
-  if (NULL == ego)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failure to obtain ego %s.\n",
-               GNUNET_h2s (&ego_pub_hash));
-    GNUNET_break (0);
-    return;
-  }
-
-  if (GNUNET_YES == pmsg->is_host)
-  {
-    if (NULL != app->host_cb) {
-      struct GNUNET_SOCIAL_HostConnection *hconn = GNUNET_malloc (sizeof (*hconn));
-      hconn->app = app;
-      hconn->plc_msg = *pmsg;
-      app->host_cb (app->cb_cls, hconn, ego, &pmsg->place_pub_key, pmsg->place_state);
-      GNUNET_free (hconn);
-    }
-  }
-  else if (NULL != app->guest_cb)
-  {
-    struct GNUNET_SOCIAL_GuestConnection *gconn = GNUNET_malloc (sizeof (*gconn));
-    gconn->app = app;
-    gconn->plc_msg = *pmsg;
-    app->guest_cb (app->cb_cls, gconn, ego, &pmsg->place_pub_key, pmsg->place_state);
-    GNUNET_free (gconn);
-  }
-}
-
-
-static void
-handle_app_place_end (void *cls,
-                      const struct GNUNET_MessageHeader *msg)
-{
-  struct GNUNET_SOCIAL_App *app = cls;
-
-  if (NULL != app->connected_cb)
-    app->connected_cb (app->cb_cls);
-}
-
-
-/**
- * Handler for a #GNUNET_MESSAGE_TYPE_SOCIAL_PLACE_LEAVE_ACK message received
- * from the social service.
- *
- * @param cls the place of type `struct GNUNET_SOCIAL_Place`
- * @param msg the message received from the service
- */
-static void
-handle_place_leave_ack (void *cls,
-                        const struct GNUNET_MessageHeader *msg)
-{
-  struct GNUNET_SOCIAL_Place *plc = cls;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%s left place %p\n",
-              plc->is_host ? "host" : "guest", 
-              plc);
-  place_disconnect (plc);  
-}
-
-
-/*** HOST ***/
-
-
-static void
-host_connect (struct GNUNET_SOCIAL_Host *hst);
-
-
-static void
-host_reconnect (void *cls)
-{
-  host_connect (cls);
-}
-
-
-/**
- * Host client disconnected from service.
- *
- * Reconnect after backoff period.
- */
-static void
-host_disconnected (void *cls, enum GNUNET_MQ_Error error)
-{
-  struct GNUNET_SOCIAL_Host *hst = cls;
-  struct GNUNET_SOCIAL_Place *plc = &hst->plc;
-
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Host client disconnected (%d), re-connecting\n",
-       (int) error);
-  if (NULL != plc->tmit)
-  {
-    GNUNET_PSYC_transmit_destroy (plc->tmit);
-    plc->tmit = NULL;
-  }
-  if (NULL != plc->mq)
-  {
-    GNUNET_MQ_destroy (plc->mq);
-    plc->mq = NULL;
-  }
-
-  plc->reconnect_task = GNUNET_SCHEDULER_add_delayed (plc->reconnect_delay,
-                                                      host_reconnect,
-                                                      hst);
-  plc->reconnect_delay = GNUNET_TIME_STD_BACKOFF (plc->reconnect_delay);
-}
-
-
-static void
-host_connect (struct GNUNET_SOCIAL_Host *hst)
-{
-  struct GNUNET_SOCIAL_Place *plc = &hst->plc;
-
-  struct GNUNET_MQ_MessageHandler handlers[] = {
-    GNUNET_MQ_hd_fixed_size (host_enter_ack,
-                             GNUNET_MESSAGE_TYPE_SOCIAL_HOST_ENTER_ACK,
-                             struct HostEnterAck,
-                             hst),
-    GNUNET_MQ_hd_fixed_size (place_leave_ack,
-                             GNUNET_MESSAGE_TYPE_SOCIAL_PLACE_LEAVE_ACK,
-                             struct GNUNET_MessageHeader,
-                             plc),
-    GNUNET_MQ_hd_var_size (host_enter_request,
-                           GNUNET_MESSAGE_TYPE_PSYC_JOIN_REQUEST,
-                           struct GNUNET_PSYC_JoinRequestMessage,
-                           hst),
-    GNUNET_MQ_hd_var_size (host_message,
-                           GNUNET_MESSAGE_TYPE_PSYC_MESSAGE,
-                           struct GNUNET_PSYC_MessageHeader,
-                           hst),
-    GNUNET_MQ_hd_fixed_size (place_message_ack,
-                             GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_ACK,
-                             struct GNUNET_MessageHeader,
-                             plc),
-    GNUNET_MQ_hd_var_size (place_history_result,
-                           GNUNET_MESSAGE_TYPE_PSYC_HISTORY_RESULT,
-                           struct GNUNET_OperationResultMessage,
-                           plc),
-    GNUNET_MQ_hd_var_size (place_state_result,
-                           GNUNET_MESSAGE_TYPE_PSYC_STATE_RESULT,
-                           struct GNUNET_OperationResultMessage,
-                           plc),
-    GNUNET_MQ_hd_var_size (place_result,
-                           GNUNET_MESSAGE_TYPE_PSYC_RESULT_CODE,
-                           struct GNUNET_OperationResultMessage,
-                           plc),
-    GNUNET_MQ_handler_end ()
-  };
-
-  plc->mq = GNUNET_CLIENT_connect (plc->cfg, "social",
-                                   handlers, host_disconnected, hst);
-  GNUNET_assert (NULL != plc->mq);
-  plc->tmit = GNUNET_PSYC_transmit_create (plc->mq);
-
-  GNUNET_MQ_send_copy (plc->mq, plc->connect_env);
-}
-
-
-/**
- * Enter a place as host.
- *
- * A place is created upon first entering, and it is active until permanently
- * left using GNUNET_SOCIAL_host_leave().
- *
- * @param app
- *        Application handle.
- * @param ego
- *        Identity of the host.
- * @param policy
- *        Policy specifying entry and history restrictions for the place.
- * @param slicer
- *        Slicer to handle incoming messages.
- * @param enter_cb
- *        Function called when the place is entered and ready to use.
- * @param answer_door_cb
- *        Function to handle new nyms that want to enter.
- * @param farewell_cb
- *        Function to handle departing nyms.
- * @param cls
- *        Closure for the callbacks.
- *
- * @return Handle for the host. This handle contains the pubkey.
- */
-struct GNUNET_SOCIAL_Host *
-GNUNET_SOCIAL_host_enter (const struct GNUNET_SOCIAL_App *app,
-                          const struct GNUNET_SOCIAL_Ego *ego,
-                          enum GNUNET_PSYC_Policy policy,
-                          struct GNUNET_PSYC_Slicer *slicer,
-                          GNUNET_SOCIAL_HostEnterCallback enter_cb,
-                          GNUNET_SOCIAL_AnswerDoorCallback answer_door_cb,
-                          GNUNET_SOCIAL_FarewellCallback farewell_cb,
-                          void *cls)
-{
-  struct GNUNET_SOCIAL_Host *hst = GNUNET_malloc (sizeof (*hst));
-  struct GNUNET_SOCIAL_Place *plc = &hst->plc;
-
-  plc->cfg = app->cfg;
-  plc->is_host = GNUNET_YES;
-  plc->slicer = slicer;
-
-  hst->enter_cb = enter_cb;
-  hst->answer_door_cb = answer_door_cb;
-  hst->farewell_cb = farewell_cb;
-  hst->cb_cls = cls;
-
-  plc->op = GNUNET_OP_create ();
-
-  hst->slicer = GNUNET_PSYC_slicer_create ();
-  GNUNET_PSYC_slicer_method_add (hst->slicer, "_notice_place_leave", NULL,
-                                 host_recv_notice_place_leave_method,
-                                 host_recv_notice_place_leave_modifier,
-                                 NULL, host_recv_notice_place_leave_eom, hst);
-
-  uint16_t app_id_size = strlen (app->id) + 1;
-  struct HostEnterRequest *hreq;
-  plc->connect_env = GNUNET_MQ_msg_extra (hreq, app_id_size,
-                                          GNUNET_MESSAGE_TYPE_SOCIAL_HOST_ENTER);
-  hreq->policy = policy;
-  hreq->ego_pub_key = ego->pub_key;
-  GNUNET_memcpy (&hreq[1], app->id, app_id_size);
-
-  host_connect (hst);
-  return hst;
-}
-
-
-/**
- * Reconnect to an already entered place as host.
- *
- * @param hconn
- *        Host connection handle.
- *        @see GNUNET_SOCIAL_app_connect() & GNUNET_SOCIAL_AppHostPlaceCallback()
- * @param slicer
- *        Slicer to handle incoming messages.
- * @param enter_cb
- *        Function called when the place is entered and ready to use.
- * @param answer_door_cb
- *        Function to handle new nyms that want to enter.
- * @param farewell_cb
- *        Function to handle departing nyms.
- * @param cls
- *        Closure for the callbacks.
- *
- * @return Handle for the host.
- */
- struct GNUNET_SOCIAL_Host *
-GNUNET_SOCIAL_host_enter_reconnect (struct GNUNET_SOCIAL_HostConnection *hconn,
-                                    struct GNUNET_PSYC_Slicer *slicer,
-                                    GNUNET_SOCIAL_HostEnterCallback enter_cb,
-                                    GNUNET_SOCIAL_AnswerDoorCallback answer_door_cb,
-                                    GNUNET_SOCIAL_FarewellCallback farewell_cb,
-                                    void *cls)
-{
-  struct GNUNET_SOCIAL_Host *hst = GNUNET_malloc (sizeof (*hst));
-  struct GNUNET_SOCIAL_Place *plc = &hst->plc;
-
-  hst->enter_cb = enter_cb;
-  hst->answer_door_cb = answer_door_cb;
-  hst->farewell_cb = farewell_cb;
-  hst->cb_cls = cls;
-
-  plc->cfg = hconn->app->cfg;
-  plc->is_host = GNUNET_YES;
-  plc->slicer = slicer;
-  plc->pub_key = hconn->plc_msg.place_pub_key;
-  plc->ego_pub_key = hconn->plc_msg.ego_pub_key;
-
-  plc->op = GNUNET_OP_create ();
-
-  hst->slicer = GNUNET_PSYC_slicer_create ();
-  GNUNET_PSYC_slicer_method_add (hst->slicer, "_notice_place_leave", NULL,
-                                 host_recv_notice_place_leave_method,
-                                 host_recv_notice_place_leave_modifier,
-                                 NULL, host_recv_notice_place_leave_eom, hst);
-
-  size_t app_id_size = strlen (hconn->app->id) + 1;
-  struct HostEnterRequest *hreq;
-  plc->connect_env = GNUNET_MQ_msg_extra (hreq, app_id_size,
-                                          GNUNET_MESSAGE_TYPE_SOCIAL_HOST_ENTER);
-  hreq->place_pub_key = hconn->plc_msg.place_pub_key;
-  hreq->ego_pub_key = hconn->plc_msg.ego_pub_key;
-  GNUNET_memcpy (&hreq[1], hconn->app->id, app_id_size);
-
-  host_connect (hst);
-  return hst;
-}
-
-
-/**
- * Decision whether to admit @a nym into the place or refuse entry.
- *
- * @param hst
- *        Host of the place.
- * @param nym
- *        Handle for the entity that wanted to enter.
- * @param is_admitted
- *        #GNUNET_YES    if @a nym is admitted,
- *        #GNUNET_NO     if @a nym is refused entry,
- *        #GNUNET_SYSERR if we cannot answer the request.
- * @param method_name
- *        Method name for the rejection message.
- * @param env
- *        Environment containing variables for the message, or NULL.
- * @param data
- *        Data for the rejection message to send back.
- * @param data_size
- *        Number of bytes in @a data for method.
- * @return #GNUNET_OK on success,
- *         #GNUNET_SYSERR if the message is too large.
- */
-int
-GNUNET_SOCIAL_host_entry_decision (struct GNUNET_SOCIAL_Host *hst,
-                                   struct GNUNET_SOCIAL_Nym *nym,
-                                   int is_admitted,
-                                   const struct GNUNET_PSYC_Message *entry_resp)
-{
-  struct GNUNET_SOCIAL_Place *plc = &hst->plc;
-  struct GNUNET_PSYC_JoinDecisionMessage *dcsn;
-  uint16_t entry_resp_size
-    = (NULL != entry_resp) ? ntohs (entry_resp->header.size) : 0;
-
-  if (GNUNET_MULTICAST_FRAGMENT_MAX_PAYLOAD < sizeof (*dcsn) + entry_resp_size)
-    return GNUNET_SYSERR;
-
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg_extra (dcsn, entry_resp_size,
-                               GNUNET_MESSAGE_TYPE_PSYC_JOIN_DECISION);
-  dcsn->is_admitted = htonl (is_admitted);
-  dcsn->slave_pub_key = nym->pub_key;
-
-  if (0 < entry_resp_size)
-    GNUNET_memcpy (&dcsn[1], entry_resp, entry_resp_size);
-
-  GNUNET_MQ_send (plc->mq, env);
-  return GNUNET_OK;
-}
-
-
-/**
- * Throw @a nym out of the place.
- *
- * The @a nym reference will remain valid until the
- * #GNUNET_SOCIAL_FarewellCallback is invoked,
- * which should be very soon after this call.
- *
- * @param host
- *        Host of the place.
- * @param nym
- *        Handle for the entity to be ejected.
- * @param env
- *        Environment for the message or NULL.
- */
-void
-GNUNET_SOCIAL_host_eject (struct GNUNET_SOCIAL_Host *hst,
-                          const struct GNUNET_SOCIAL_Nym *nym,
-                          struct GNUNET_PSYC_Environment *e)
-{
-  struct GNUNET_PSYC_Environment *env = e;
-  if (NULL == env)
-    env = GNUNET_PSYC_env_create ();
-  GNUNET_PSYC_env_add (env, GNUNET_PSYC_OP_SET,
-                       "_nym", &nym->pub_key, sizeof (nym->pub_key));
-  GNUNET_SOCIAL_host_announce (hst, "_notice_place_leave", env, NULL, NULL,
-                               GNUNET_SOCIAL_ANNOUNCE_NONE);
-  if (NULL == e)
-    GNUNET_PSYC_env_destroy (env);
-}
-
-
-/**
- * Get the public key of @a ego.
- *
- * @param ego
- *        Ego.
- *
- * @return Public key of ego.
- */
-const struct GNUNET_CRYPTO_EcdsaPublicKey *
-GNUNET_SOCIAL_ego_get_pub_key (const struct GNUNET_SOCIAL_Ego *ego)
-{
-  return &ego->pub_key;
-}
-
-
-/**
- * Get the hash of the public key of @a ego.
- *
- * @param ego
- *        Ego.
- *
- * @return Hash of the public key of @a ego.
- */
-const struct GNUNET_HashCode *
-GNUNET_SOCIAL_ego_get_pub_key_hash (const struct GNUNET_SOCIAL_Ego *ego)
-{
-  return &ego->pub_key_hash;
-}
-
-
-/**
- * Get the name of @a ego.
- *
- * @param ego
- *        Ego.
- *
- * @return Public key of @a ego.
- */
-const char *
-GNUNET_SOCIAL_ego_get_name (const struct GNUNET_SOCIAL_Ego *ego)
-{
-  return ego->name;
-}
-
-
-/**
- * Get the public key of @a nym.
- *
- * Suitable, for example, to be used with GNUNET_SOCIAL_zone_add_nym().
- *
- * @param nym
- *        Pseudonym.
- *
- * @return Public key of @a nym.
- */
-const struct GNUNET_CRYPTO_EcdsaPublicKey *
-GNUNET_SOCIAL_nym_get_pub_key (const struct GNUNET_SOCIAL_Nym *nym)
-{
-  return &nym->pub_key;
-}
-
-
-/**
- * Get the hash of the public key of @a nym.
- *
- * @param nym
- *        Pseudonym.
- *
- * @return Hash of the public key of @a nym.
- */
-const struct GNUNET_HashCode *
-GNUNET_SOCIAL_nym_get_pub_key_hash (const struct GNUNET_SOCIAL_Nym *nym)
-{
-  return &nym->pub_key_hash;
-}
-
-
-/**
- * Send a message to all nyms that are present in the place.
- *
- * This function is restricted to the host.  Nyms can only send requests
- * to the host who can decide to relay it to everyone in the place.
- *
- * @param host  Host of the place.
- * @param method_name Method to use for the announcement.
- * @param env  Environment containing variables for the message and operations
- *          on objects of the place.  Can be NULL.
- * @param notify Function to call to get the payload of the announcement.
- * @param notify_cls Closure for @a notify.
- * @param flags Flags for this announcement.
- *
- * @return NULL on error (announcement already in progress?).
- */
-struct GNUNET_SOCIAL_Announcement *
-GNUNET_SOCIAL_host_announce (struct GNUNET_SOCIAL_Host *hst,
-                             const char *method_name,
-                             const struct GNUNET_PSYC_Environment *env,
-                             GNUNET_PSYC_TransmitNotifyData notify_data,
-                             void *notify_data_cls,
-                             enum GNUNET_SOCIAL_AnnounceFlags flags)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "PSYC_transmit_message for host, method: %s\n",
-              method_name);
-  if (GNUNET_OK ==
-      GNUNET_PSYC_transmit_message (hst->plc.tmit, method_name, env,
-                                    NULL, notify_data, notify_data_cls, flags))
-    return (struct GNUNET_SOCIAL_Announcement *) hst->plc.tmit;
-  else
-    return NULL;
-}
-
-
-/**
- * Resume transmitting announcement.
- *
- * @param a
- *        The announcement to resume.
- */
-void
-GNUNET_SOCIAL_host_announce_resume (struct GNUNET_SOCIAL_Announcement *a)
-{
-  GNUNET_PSYC_transmit_resume ((struct GNUNET_PSYC_TransmitHandle *) a);
-}
-
-
-/**
- * Cancel announcement.
- *
- * @param a
- *        The announcement to cancel.
- */
-void
-GNUNET_SOCIAL_host_announce_cancel (struct GNUNET_SOCIAL_Announcement *a)
-{
-  GNUNET_PSYC_transmit_cancel ((struct GNUNET_PSYC_TransmitHandle *) a);
-}
-
-
-/**
- * Obtain handle for a hosted place.
- *
- * The returned handle can be used to access the place API.
- *
- * @param host  Handle for the host.
- *
- * @return Handle for the hosted place, valid as long as @a host is valid.
- */
-struct GNUNET_SOCIAL_Place *
-GNUNET_SOCIAL_host_get_place (struct GNUNET_SOCIAL_Host *hst)
-{
-  return &hst->plc;
-}
-
-
-/**
- * Disconnect from a home.
- *
- * Invalidates host handle.
- *
- * @param hst
- *        The host to disconnect.
- */
-void
-GNUNET_SOCIAL_host_disconnect (struct GNUNET_SOCIAL_Host *hst,
-                               GNUNET_ContinuationCallback disconnect_cb,
-                               void *cls)
-{
-  struct GNUNET_SOCIAL_Place *plc = &hst->plc;
-
-  plc->disconnect_cb = disconnect_cb;
-  plc->disconnect_cls = cls;
-  place_disconnect (plc);
-}
-
-
-/**
- * Stop hosting the home.
- *
- * Sends a _notice_place_closing announcement to the home.
- * Invalidates host handle.
- *
- * @param hst
- *        The host leaving.
- * @param env
- *        Environment for the message or NULL.
- *        _nym is set to @e nym regardless whether an @e env is provided.
- * @param disconnect_cb
- *        Function called after the host left the place
- *        and disconnected from the social service.
- * @param cls
- *        Closure for @a disconnect_cb.
- */
-void
-GNUNET_SOCIAL_host_leave (struct GNUNET_SOCIAL_Host *hst,
-                          const struct GNUNET_PSYC_Environment *env,
-                          GNUNET_ContinuationCallback disconnect_cb,
-                          void *cls)
-{
-  struct GNUNET_MQ_Envelope *envelope;
-
-  GNUNET_SOCIAL_host_announce (hst, "_notice_place_closing", env, NULL, NULL,
-                               GNUNET_SOCIAL_ANNOUNCE_NONE);
-  hst->plc.disconnect_cb = disconnect_cb;
-  hst->plc.disconnect_cls = cls;
-  envelope = GNUNET_MQ_msg_header (GNUNET_MESSAGE_TYPE_SOCIAL_PLACE_LEAVE);
-  GNUNET_MQ_send (hst->plc.mq,
-                  envelope);
-}
-
-
-/*** GUEST ***/
-
-
-static void
-guest_connect (struct GNUNET_SOCIAL_Guest *gst);
-
-
-static void
-guest_reconnect (void *cls)
-{
-  guest_connect (cls);
-}
-
-
-/**
- * Guest client disconnected from service.
- *
- * Reconnect after backoff period.
- */
-static void
-guest_disconnected (void *cls, enum GNUNET_MQ_Error error)
-{
-  struct GNUNET_SOCIAL_Guest *gst = cls;
-  struct GNUNET_SOCIAL_Place *plc = &gst->plc;
-
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Guest client disconnected (%d), re-connecting\n",
-       (int) error);
-  if (NULL != plc->tmit)
-  {
-    GNUNET_PSYC_transmit_destroy (plc->tmit);
-    plc->tmit = NULL;
-  }
-  if (NULL != plc->mq)
-  {
-    GNUNET_MQ_destroy (plc->mq);
-    plc->mq = NULL;
-  }
-
-  plc->reconnect_task = GNUNET_SCHEDULER_add_delayed (plc->reconnect_delay,
-                                                      guest_reconnect,
-                                                      gst);
-  plc->reconnect_delay = GNUNET_TIME_STD_BACKOFF (plc->reconnect_delay);
-}
-
-
-static void
-guest_connect (struct GNUNET_SOCIAL_Guest *gst)
-{
-  struct GNUNET_SOCIAL_Place *plc = &gst->plc;
-
-  struct GNUNET_MQ_MessageHandler handlers[] = {
-    GNUNET_MQ_hd_fixed_size (guest_enter_ack,
-                             GNUNET_MESSAGE_TYPE_SOCIAL_GUEST_ENTER_ACK,
-                             struct GNUNET_PSYC_CountersResultMessage,
-                             gst),
-    GNUNET_MQ_hd_fixed_size (place_leave_ack,
-                             GNUNET_MESSAGE_TYPE_SOCIAL_PLACE_LEAVE_ACK,
-                             struct GNUNET_MessageHeader,
-                             plc),
-    GNUNET_MQ_hd_var_size (guest_enter_decision,
-                           GNUNET_MESSAGE_TYPE_PSYC_JOIN_DECISION,
-                           struct GNUNET_PSYC_JoinDecisionMessage,
-                           gst),
-    GNUNET_MQ_hd_var_size (place_message,
-                           GNUNET_MESSAGE_TYPE_PSYC_MESSAGE,
-                           struct GNUNET_PSYC_MessageHeader,
-                           plc),
-    GNUNET_MQ_hd_fixed_size (place_message_ack,
-                             GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_ACK,
-                             struct GNUNET_MessageHeader,
-                             plc),
-    GNUNET_MQ_hd_var_size (place_history_result,
-                           GNUNET_MESSAGE_TYPE_PSYC_HISTORY_RESULT,
-                           struct GNUNET_OperationResultMessage,
-                           plc),
-    GNUNET_MQ_hd_var_size (place_state_result,
-                           GNUNET_MESSAGE_TYPE_PSYC_STATE_RESULT,
-                           struct GNUNET_OperationResultMessage,
-                           plc),
-    GNUNET_MQ_hd_var_size (place_result,
-                           GNUNET_MESSAGE_TYPE_PSYC_RESULT_CODE,
-                           struct GNUNET_OperationResultMessage,
-                           plc),
-    GNUNET_MQ_handler_end ()
-  };
-
-  plc->mq = GNUNET_CLIENT_connect (plc->cfg, "social",
-                                   handlers, guest_disconnected, gst);
-  GNUNET_assert (NULL != plc->mq);
-  plc->tmit = GNUNET_PSYC_transmit_create (plc->mq);
-
-  GNUNET_MQ_send_copy (plc->mq, plc->connect_env);
-}
-
-
-static struct GNUNET_MQ_Envelope *
-guest_enter_request_create (const char *app_id,
-                            const struct GNUNET_CRYPTO_EcdsaPublicKey *ego_pub_key,
-                            const struct GNUNET_CRYPTO_EddsaPublicKey *place_pub_key,
-                            const struct GNUNET_PeerIdentity *origin,
-                            size_t relay_count,
-                            const struct GNUNET_PeerIdentity *relays,
-                            const struct GNUNET_PSYC_Message *join_msg)
-{
-  uint16_t app_id_size = strlen (app_id) + 1;
-  uint16_t join_msg_size = ntohs (join_msg->header.size);
-  uint16_t relay_size = relay_count * sizeof (*relays);
-
-  struct GuestEnterRequest *greq;
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg_extra (greq, app_id_size + relay_size + join_msg_size,
-                               GNUNET_MESSAGE_TYPE_SOCIAL_GUEST_ENTER);
-  greq->place_pub_key = *place_pub_key;
-  greq->ego_pub_key = *ego_pub_key;
-  greq->origin = *origin;
-  greq->relay_count = htonl (relay_count);
-
-  char *p = (char *) &greq[1];
-  GNUNET_memcpy (p, app_id, app_id_size);
-  p += app_id_size;
-
-  if (0 < relay_size)
-  {
-    GNUNET_memcpy (p, relays, relay_size);
-    p += relay_size;
-  }
-
-  GNUNET_memcpy (p, join_msg, join_msg_size);
-  return env;
-}
-
-
-/**
- * Request entry to a place as a guest.
- *
- * @param app
- *        Application handle.
- * @param ego
- *        Identity of the guest.
- * @param place_pub_key
- *        Public key of the place to enter.
- * @param flags
- *        Flags for the entry.
- * @param origin
- *        Peer identity of the origin of the underlying multicast group.
- * @param relay_count
- *        Number of elements in the @a relays array.
- * @param relays
- *        Relays for the underlying multicast group.
- * @param method_name
- *        Method name for the message.
- * @param env
- *        Environment containing variables for the message, or NULL.
- * @param data
- *        Payload for the message to give to the enter callback.
- * @param data_size
- *        Number of bytes in @a data.
- * @param slicer
- *        Slicer to use for processing incoming requests from guests.
- *
- * @return NULL on errors, otherwise handle for the guest.
- */
-struct GNUNET_SOCIAL_Guest *
-GNUNET_SOCIAL_guest_enter (const struct GNUNET_SOCIAL_App *app,
-                           const struct GNUNET_SOCIAL_Ego *ego,
-                           const struct GNUNET_CRYPTO_EddsaPublicKey *place_pub_key,
-                           enum GNUNET_PSYC_SlaveJoinFlags flags,
-                           const struct GNUNET_PeerIdentity *origin,
-                           uint32_t relay_count,
-                           const struct GNUNET_PeerIdentity *relays,
-                           const struct GNUNET_PSYC_Message *entry_msg,
-                           struct GNUNET_PSYC_Slicer *slicer,
-                           GNUNET_SOCIAL_GuestEnterCallback local_enter_cb,
-                           GNUNET_SOCIAL_EntryDecisionCallback entry_dcsn_cb,
-                           void *cls)
-{
-  struct GNUNET_SOCIAL_Guest *gst = GNUNET_malloc (sizeof (*gst));
-  struct GNUNET_SOCIAL_Place *plc = &gst->plc;
-
-  plc->ego_pub_key = ego->pub_key;
-  plc->pub_key = *place_pub_key;
-  plc->cfg = app->cfg;
-  plc->is_host = GNUNET_NO;
-  plc->slicer = slicer;
-
-  plc->op = GNUNET_OP_create ();
-
-  plc->connect_env
-    = guest_enter_request_create (app->id, &ego->pub_key, &plc->pub_key,
-                                  origin, relay_count, relays, entry_msg);
-
-  gst->enter_cb = local_enter_cb;
-  gst->entry_dcsn_cb = entry_dcsn_cb;
-  gst->cb_cls = cls;
-
-  guest_connect (gst);
-  return gst;
-}
-
-
-/**
- * Request entry to a place by name as a guest.
- *
- * @param app
- *        Application handle.
- * @param ego
- *        Identity of the guest.
- * @param gns_name
- *        GNS name of the place to enter.  Either in the form of
- *        'room.friend.gnu', or 'NYMPUBKEY.zkey'.  This latter case refers to
- *        the 'PLACE' record of the empty label ("+") in the GNS zone with the
- *        nym's public key 'NYMPUBKEY', and can be used to request entry to a
- *        pseudonym's place directly.
- * @param password
- *        Password to decrypt the record, or NULL for cleartext records.
- * @param join_msg
- *        Entry request message or NULL.
- * @param slicer
- *        Slicer to use for processing incoming requests from guests.
- * @param local_enter_cb
- *        Called upon connection established to the social service.
- * @param entry_decision_cb
- *        Called upon receiving entry decision.
- *
- * @return NULL on errors, otherwise handle for the guest.
- */
-struct GNUNET_SOCIAL_Guest *
-GNUNET_SOCIAL_guest_enter_by_name (const struct GNUNET_SOCIAL_App *app,
-                                   const struct GNUNET_SOCIAL_Ego *ego,
-                                   const char *gns_name,
-                                   const char *password,
-                                   const struct GNUNET_PSYC_Message *join_msg,
-                                   struct GNUNET_PSYC_Slicer *slicer,
-                                   GNUNET_SOCIAL_GuestEnterCallback local_enter_cb,
-                                   GNUNET_SOCIAL_EntryDecisionCallback entry_decision_cb,
-                                   void *cls)
-{
-  struct GNUNET_SOCIAL_Guest *gst = GNUNET_malloc (sizeof (*gst));
-  struct GNUNET_SOCIAL_Place *plc = &gst->plc;
-
-  if (NULL == password)
-    password = "";
-
-  uint16_t app_id_size = strlen (app->id) + 1;
-  uint16_t gns_name_size = strlen (gns_name) + 1;
-  uint16_t password_size = strlen (password) + 1;
-
-  uint16_t join_msg_size = 0;
-  if (NULL != join_msg)
-    join_msg_size = ntohs (join_msg->header.size);
-
-  struct GuestEnterByNameRequest *greq;
-  plc->connect_env
-    = GNUNET_MQ_msg_extra (greq, app_id_size + gns_name_size
-                           + password_size + join_msg_size,
-                           GNUNET_MESSAGE_TYPE_SOCIAL_GUEST_ENTER_BY_NAME);
-
-  greq->ego_pub_key = ego->pub_key;
-
-  char *p = (char *) &greq[1];
-  GNUNET_memcpy (p, app->id, app_id_size);
-  p += app_id_size;
-  GNUNET_memcpy (p, gns_name, gns_name_size);
-  p += gns_name_size;
-  GNUNET_memcpy (p, password, password_size);
-  p += password_size;
-  if (NULL != join_msg)
-    GNUNET_memcpy (p, join_msg, join_msg_size);
-
-  plc->ego_pub_key = ego->pub_key;
-  plc->cfg = app->cfg;
-  plc->is_host = GNUNET_NO;
-  plc->slicer = slicer;
-
-  plc->op = GNUNET_OP_create ();
-
-  gst->enter_cb = local_enter_cb;
-  gst->entry_dcsn_cb = entry_decision_cb;
-  gst->cb_cls = cls;
-
-  guest_connect (gst);
-  return gst;
-}
-
-
-struct ReconnectContext
-{
-  struct GNUNET_SOCIAL_Guest *guest;
-  int *result;
-  int64_t *max_message_id;
-  GNUNET_SOCIAL_GuestEnterCallback enter_cb;
-  void *enter_cls;
-};
-
-
-static void
-guest_enter_reconnect_cb (void *cls,
-                          int result,
-                          const struct GNUNET_CRYPTO_EddsaPublicKey *place_pub_key,
-                          uint64_t max_message_id)
-{
-  struct ReconnectContext *reconnect_ctx = cls;
-
-  GNUNET_assert (NULL != reconnect_ctx);
-  reconnect_ctx->result = GNUNET_new (int);
-  *(reconnect_ctx->result) = result; 
-  reconnect_ctx->max_message_id = GNUNET_new (int64_t);
-  *(reconnect_ctx->max_message_id) = max_message_id;
-}
-
-
-static void
-guest_entry_dcsn_reconnect_cb (void *cls,
-                               int is_admitted,
-                               const struct GNUNET_PSYC_Message *entry_resp)
-{
-  struct ReconnectContext *reconnect_ctx = cls;
-  struct GNUNET_SOCIAL_Guest *gst = reconnect_ctx->guest;
-
-  GNUNET_assert (NULL != reconnect_ctx);
-  GNUNET_assert (NULL != reconnect_ctx->result);
-  GNUNET_assert (NULL != reconnect_ctx->max_message_id);
-  if (GNUNET_YES != is_admitted)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "Guest was rejected after calling "
-                "GNUNET_SOCIAL_guest_enter_reconnect ()\n");
-  }
-  else if (NULL != reconnect_ctx->enter_cb)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "guest reconnected!\n");
-    reconnect_ctx->enter_cb (reconnect_ctx->enter_cls,
-                             *(reconnect_ctx->result),
-                             &gst->plc.pub_key,
-                             *(reconnect_ctx->max_message_id));
-  }
-  GNUNET_free (reconnect_ctx->result);
-  GNUNET_free (reconnect_ctx->max_message_id);
-  GNUNET_free (reconnect_ctx);
-}
-
-
-/**
- * Reconnect to an already entered place as guest.
- *
- * @param gconn
- *        Guest connection handle.
- *        @see GNUNET_SOCIAL_app_connect() & GNUNET_SOCIAL_AppGuestPlaceCallback()
- * @param flags
- *        Flags for the entry.
- * @param slicer
- *        Slicer to use for processing incoming requests from guests.
- * @param enter_cb
- *        Called upon re-entering is complete.
- * @param entry_decision_cb
- *        Called upon receiving entry decision.
- *
- * @return NULL on errors, otherwise handle for the guest.
- */
-struct GNUNET_SOCIAL_Guest *
-GNUNET_SOCIAL_guest_enter_reconnect (struct GNUNET_SOCIAL_GuestConnection *gconn,
-                                     enum GNUNET_PSYC_SlaveJoinFlags flags,
-                                     struct GNUNET_PSYC_Slicer *slicer,
-                                     GNUNET_SOCIAL_GuestEnterCallback enter_cb,
-                                     void *cls)
-{
-  struct GNUNET_SOCIAL_Guest *gst = GNUNET_malloc (sizeof (*gst));
-  struct GNUNET_SOCIAL_Place *plc = &gst->plc;
-  struct ReconnectContext *reconnect_ctx;
-
-  uint16_t app_id_size = strlen (gconn->app->id) + 1;
-  struct GuestEnterRequest *greq;
-  plc->connect_env
-    = GNUNET_MQ_msg_extra (greq, app_id_size,
-                           GNUNET_MESSAGE_TYPE_SOCIAL_GUEST_ENTER);
-  greq->ego_pub_key = gconn->plc_msg.ego_pub_key;
-  greq->place_pub_key = gconn->plc_msg.place_pub_key;
-  greq->flags = htonl (flags);
-
-  GNUNET_memcpy (&greq[1], gconn->app->id, app_id_size);
-
-  plc->cfg = gconn->app->cfg;
-  plc->is_host = GNUNET_NO;
-  plc->slicer = slicer;
-  plc->pub_key = gconn->plc_msg.place_pub_key;
-  plc->ego_pub_key = gconn->plc_msg.ego_pub_key;
-
-  reconnect_ctx = GNUNET_new (struct ReconnectContext);
-  reconnect_ctx->guest = gst;
-  reconnect_ctx->enter_cb = enter_cb;
-  reconnect_ctx->enter_cls = cls;
-
-  plc->op = GNUNET_OP_create ();
-  gst->enter_cb = &guest_enter_reconnect_cb;
-  gst->entry_dcsn_cb = &guest_entry_dcsn_reconnect_cb;
-  gst->cb_cls = reconnect_ctx;
-
-  guest_connect (gst);
-  return gst;
-}
-
-
-/**
- * Talk to the host of the place.
- *
- * @param place
- *        Place where we want to talk to the host.
- * @param method_name
- *        Method to invoke on the host.
- * @param env
- *        Environment containing variables for the message, or NULL.
- * @param notify_data
- *        Function to use to get the payload for the method.
- * @param notify_data_cls
- *        Closure for @a notify_data.
- * @param flags
- *        Flags for the message being sent.
- *
- * @return NULL if we are already trying to talk to the host,
- *         otherwise handle to cancel the request.
- */
-struct GNUNET_SOCIAL_TalkRequest *
-GNUNET_SOCIAL_guest_talk (struct GNUNET_SOCIAL_Guest *gst,
-                          const char *method_name,
-                          const struct GNUNET_PSYC_Environment *env,
-                          GNUNET_PSYC_TransmitNotifyData notify_data,
-                          void *notify_data_cls,
-                          enum GNUNET_SOCIAL_TalkFlags flags)
-{
-  struct GNUNET_SOCIAL_Place *plc = &gst->plc;
-  GNUNET_assert (NULL != plc->tmit);
-
-  if (GNUNET_OK ==
-      GNUNET_PSYC_transmit_message (plc->tmit, method_name, env,
-                                    NULL, notify_data, notify_data_cls, flags))
-    return (struct GNUNET_SOCIAL_TalkRequest *) plc->tmit;
-  else
-    return NULL;
-}
-
-
-/**
- * Resume talking to the host of the place.
- *
- * @param tr
- *        Talk request to resume.
- */
-void
-GNUNET_SOCIAL_guest_talk_resume (struct GNUNET_SOCIAL_TalkRequest *tr)
-{
-  GNUNET_PSYC_transmit_resume ((struct GNUNET_PSYC_TransmitHandle *) tr);
-}
-
-
-/**
- * Cancel talking to the host of the place.
- *
- * @param tr
- *        Talk request to cancel.
- */
-void
-GNUNET_SOCIAL_guest_talk_cancel (struct GNUNET_SOCIAL_TalkRequest *tr)
-{
-  GNUNET_PSYC_transmit_cancel ( (struct GNUNET_PSYC_TransmitHandle *) tr);
-}
-
-
-/**
- * Disconnect from a place.
- *
- * Invalidates guest handle.
- *
- * @param gst
- *        The guest to disconnect.
- */
-void
-GNUNET_SOCIAL_guest_disconnect (struct GNUNET_SOCIAL_Guest *gst,
-                                GNUNET_ContinuationCallback disconnect_cb,
-                                void *cls)
-{
-  struct GNUNET_SOCIAL_Place *plc = &gst->plc;
-
-  plc->disconnect_cb = disconnect_cb;
-  plc->disconnect_cls = cls;
-  place_disconnect (plc);
-}
-
-
-/**
- * Leave a place temporarily or permanently.
- *
- * Notifies the owner of the place about leaving, and destroys the place handle.
- *
- * @param place
- *        Place to leave.
- * @param keep_active
- *        Keep place active after last application disconnected.
- *        #GNUNET_YES or #GNUNET_NO
- * @param env
- *        Optional environment for the leave message if @a keep_active
- *        is #GNUNET_NO.  NULL if not needed.
- * @param leave_cb
- *        Called upon disconnecting from the social service.
- */
-void
-GNUNET_SOCIAL_guest_leave (struct GNUNET_SOCIAL_Guest *gst,
-                           struct GNUNET_PSYC_Environment *env,
-                           GNUNET_ContinuationCallback disconnect_cb,
-                           void *cls)
-{
-  struct GNUNET_MQ_Envelope *envelope;
-
-  GNUNET_SOCIAL_guest_talk (gst, "_notice_place_leave", env, NULL, NULL,
-                            GNUNET_SOCIAL_TALK_NONE);
-  gst->plc.disconnect_cb = disconnect_cb;
-  gst->plc.disconnect_cls = cls;
-  envelope = GNUNET_MQ_msg_header (GNUNET_MESSAGE_TYPE_SOCIAL_PLACE_LEAVE);
-  GNUNET_MQ_send (gst->plc.mq,
-                  envelope);
-}
-
-
-/**
- * Obtain handle for a place entered as guest.
- *
- * The returned handle can be used to access the place API.
- *
- * @param guest  Handle for the guest.
- *
- * @return Handle for the place, valid as long as @a guest is valid.
- */
-struct GNUNET_SOCIAL_Place *
-GNUNET_SOCIAL_guest_get_place (struct GNUNET_SOCIAL_Guest *gst)
-{
-  return &gst->plc;
-}
-
-
-/**
- * Obtain the public key of a place.
- *
- * @param plc
- *        Place.
- *
- * @return Public key of the place.
- */
-const struct GNUNET_CRYPTO_EddsaPublicKey *
-GNUNET_SOCIAL_place_get_pub_key (const struct GNUNET_SOCIAL_Place *plc)
-{
-  return &plc->pub_key;
-}
-
-
-/**
- * Set message processing @a flags for a @a method_prefix.
- *
- * @param plc
- *        Place.
- * @param method_prefix
- *        Method prefix @a flags apply to.
- * @param flags
- *        The flags that apply to a matching @a method_prefix.
- */
-void
-GNUNET_SOCIAL_place_msg_proc_set (struct GNUNET_SOCIAL_Place *plc,
-                                  const char *method_prefix,
-                                  enum GNUNET_SOCIAL_MsgProcFlags flags)
-{
-  GNUNET_assert (NULL != method_prefix);
-  struct MsgProcRequest *mpreq;
-  uint16_t method_size = strnlen (method_prefix,
-                                  GNUNET_MAX_MESSAGE_SIZE
-                                  - sizeof (*mpreq)) + 1;
-  GNUNET_assert ('\0' == method_prefix[method_size - 1]);
-
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg_extra (mpreq, method_size,
-                               GNUNET_MESSAGE_TYPE_SOCIAL_MSG_PROC_SET);
-  mpreq->flags = htonl (flags);
-  GNUNET_memcpy (&mpreq[1], method_prefix, method_size);
-
-  GNUNET_MQ_send (plc->mq, env);
-}
-
-
-/**
- * Clear all message processing flags previously set for this place.
- */
-void
-GNUNET_SOCIAL_place_msg_proc_clear (struct GNUNET_SOCIAL_Place *plc)
-{
-  struct GNUNET_MessageHeader *req;
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg (req, GNUNET_MESSAGE_TYPE_SOCIAL_MSG_PROC_CLEAR);
-
-  GNUNET_MQ_send (plc->mq, env);
-}
-
-
-static struct GNUNET_SOCIAL_HistoryRequest *
-place_history_replay (struct GNUNET_SOCIAL_Place *plc,
-                      uint64_t start_message_id,
-                      uint64_t end_message_id,
-                      uint64_t message_limit,
-                      const char *method_prefix,
-                      uint32_t flags,
-                      struct GNUNET_PSYC_Slicer *slicer,
-                      GNUNET_ResultCallback result_cb,
-                      void *cls)
-{
-  struct GNUNET_PSYC_HistoryRequestMessage *req;
-  struct GNUNET_SOCIAL_HistoryRequest *hist = GNUNET_malloc (sizeof (*hist));
-  hist->plc = plc;
-  hist->slicer = slicer;
-  hist->result_cb = result_cb;
-  hist->cls = cls;
-  hist->op_id = GNUNET_OP_add (plc->op, op_recv_history_result, hist, NULL);
-
-  GNUNET_assert (NULL != method_prefix);
-  uint16_t method_size = strnlen (method_prefix,
-                                  GNUNET_MAX_MESSAGE_SIZE
-                                  - sizeof (*req)) + 1;
-  GNUNET_assert ('\0' == method_prefix[method_size - 1]);
-
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg_extra (req, method_size,
-                               GNUNET_MESSAGE_TYPE_PSYC_HISTORY_REPLAY);
-  req->start_message_id = GNUNET_htonll (start_message_id);
-  req->end_message_id = GNUNET_htonll (end_message_id);
-  req->message_limit = GNUNET_htonll (message_limit);
-  req->flags = htonl (flags);
-  req->op_id = GNUNET_htonll (hist->op_id);
-  GNUNET_memcpy (&req[1], method_prefix, method_size);
-
-  GNUNET_MQ_send (plc->mq, env);
-  return hist;
-}
-
-
-/**
- * Learn about the history of a place.
- *
- * Messages are returned through the @a slicer function
- * and have the #GNUNET_PSYC_MESSAGE_HISTORIC flag set.
- *
- * @param place
- *        Place we want to learn more about.
- * @param start_message_id
- *        First historic message we are interested in.
- * @param end_message_id
- *        Last historic message we are interested in (inclusive).
- * @param method_prefix
- *        Only retrieve messages with this method prefix.
- * @param flags
- *        OR'ed GNUNET_PSYC_HistoryReplayFlags
- * @param slicer
- *        Slicer to use for retrieved messages.
- *        Can be the same as the slicer of the place.
- * @param result_cb
- *        Function called after all messages retrieved.
- *        NULL if not needed.
- * @param cls Closure for @a result_cb.
- */
-struct GNUNET_SOCIAL_HistoryRequest *
-GNUNET_SOCIAL_place_history_replay (struct GNUNET_SOCIAL_Place *plc,
-                                    uint64_t start_message_id,
-                                    uint64_t end_message_id,
-                                    const char *method_prefix,
-                                    uint32_t flags,
-                                    struct GNUNET_PSYC_Slicer *slicer,
-                                    GNUNET_ResultCallback result_cb,
-                                    void *cls)
-{
-  return place_history_replay (plc, start_message_id, end_message_id, 0,
-                               method_prefix, flags, slicer, result_cb, cls);
-}
-
-
-/**
- * Learn about the history of a place.
- *
- * Sends messages through the slicer function of the place where
- * start_message_id <= message_id <= end_message_id.
- * The messages will have the #GNUNET_PSYC_MESSAGE_HISTORIC flag set.
- *
- * To get the latest message, use 0 for both the start and end message ID.
- *
- * @param place
- *        Place we want to learn more about.
- * @param message_limit
- *        Maximum number of historic messages we are interested in.
- * @param method_prefix
- *        Only retrieve messages with this method prefix.
- * @param flags
- *        OR'ed GNUNET_PSYC_HistoryReplayFlags
- * @param result_cb
- *        Function called after all messages retrieved.
- *        NULL if not needed.
- * @param cls Closure for @a result_cb.
- */
-struct GNUNET_SOCIAL_HistoryRequest *
-GNUNET_SOCIAL_place_history_replay_latest (struct GNUNET_SOCIAL_Place *plc,
-                                           uint64_t message_limit,
-                                           const char *method_prefix,
-                                           uint32_t flags,
-                                           struct GNUNET_PSYC_Slicer *slicer,
-                                           GNUNET_ResultCallback result_cb,
-                                           void *cls)
-{
-  return place_history_replay (plc, 0, 0, message_limit, method_prefix, flags,
-                               slicer, result_cb, cls);
-}
-
-
-/**
- * Cancel learning about the history of a place.
- *
- * @param hist
- *        History lesson to cancel.
- */
-void
-GNUNET_SOCIAL_place_history_replay_cancel (struct GNUNET_SOCIAL_HistoryRequest *hist)
-{
-  GNUNET_OP_remove (hist->plc->op, hist->op_id);
-  GNUNET_free (hist);
-}
-
-
-/**
- * Request matching state variables.
- */
-static struct GNUNET_SOCIAL_LookHandle *
-place_state_get (struct GNUNET_SOCIAL_Place *plc,
-                 uint16_t type, const char *name,
-                 GNUNET_PSYC_StateVarCallback var_cb,
-                 GNUNET_ResultCallback result_cb, void *cls)
-{
-  struct GNUNET_PSYC_StateRequestMessage *req;
-  struct GNUNET_SOCIAL_LookHandle *look = GNUNET_malloc (sizeof (*look));
-  look->plc = plc;
-  look->var_cb = var_cb;
-  look->result_cb = result_cb;
-  look->cls = cls;
-  look->op_id = GNUNET_OP_add (plc->op, &op_recv_state_result, look, NULL);
-
-  GNUNET_assert (NULL != name);
-  size_t name_size = strnlen (name, GNUNET_MAX_MESSAGE_SIZE
-                              - sizeof (*req)) + 1;
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg_extra (req, name_size, type);
-  req->op_id = GNUNET_htonll (look->op_id);
-  GNUNET_memcpy (&req[1], name, name_size);
-
-  GNUNET_MQ_send (plc->mq, env);
-  return look;
-}
-
-
-/**
- * Look at a particular object in the place.
- *
- * The best matching object is returned (its name might be less specific than
- * what was requested).
- *
- * @param place
- *        The place where to look.
- * @param full_name
- *        Full name of the object.
- * @param value_size
- *        Set to the size of the returned value.
- *
- * @return NULL if there is no such object at this place.
- */
-struct GNUNET_SOCIAL_LookHandle *
-GNUNET_SOCIAL_place_look_at (struct GNUNET_SOCIAL_Place *plc,
-                             const char *full_name,
-                             GNUNET_PSYC_StateVarCallback var_cb,
-                             GNUNET_ResultCallback result_cb,
-                             void *cls)
-{
-  return place_state_get (plc, GNUNET_MESSAGE_TYPE_PSYC_STATE_GET,
-                          full_name, var_cb, result_cb, cls);
-}
-
-
-/**
- * Look for objects in the place with a matching name prefix.
- *
- * @param place
- *        The place where to look.
- * @param name_prefix
- *        Look at objects with names beginning with this value.
- * @param var_cb
- *        Function to call for each object found.
- * @param cls
- *        Closure for callback function.
- *
- * @return Handle that can be used to stop looking at objects.
- */
-struct GNUNET_SOCIAL_LookHandle *
-GNUNET_SOCIAL_place_look_for (struct GNUNET_SOCIAL_Place *plc,
-                              const char *name_prefix,
-                              GNUNET_PSYC_StateVarCallback var_cb,
-                              GNUNET_ResultCallback result_cb,
-                              void *cls)
-{
-  return place_state_get (plc, GNUNET_MESSAGE_TYPE_PSYC_STATE_GET_PREFIX,
-                          name_prefix, var_cb, result_cb, cls);
-}
-
-
-/**
- * Cancel a state request operation.
- *
- * @param sr
- *        Handle for the operation to cancel.
- */
-void
-GNUNET_SOCIAL_place_look_cancel (struct GNUNET_SOCIAL_LookHandle *look)
-{
-  GNUNET_OP_remove (look->plc->op, look->op_id);
-  GNUNET_free (look);
-}
-
-
-static void
-op_recv_zone_add_place_result (void *cls, int64_t result,
-                               const void *err_msg, uint16_t err_msg_size)
-{
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Received zone add place result: %" PRId64 ".\n", result);
-
-  struct ZoneAddPlaceHandle *add_plc = cls;
-  if (NULL != add_plc->result_cb)
-    add_plc->result_cb (add_plc->result_cls, result, err_msg, err_msg_size);
-
-  GNUNET_free (add_plc);
-}
-
-
-/**
- * Advertise @e place in the GNS zone of @e ego.
- *
- * @param app
- *        Application handle.
- * @param ego
- *        Ego.
- * @param place_pub_key
- *        Public key of place to add.
- * @param name
- *        The name for the PLACE record to put in the zone.
- * @param password
- *        Password used to encrypt the record or NULL to keep it cleartext.
- * @param relay_count
- *        Number of elements in the @a relays array.
- * @param relays
- *        List of relays to put in the PLACE record to advertise
- *        as entry points to the place in addition to the origin.
- * @param expiration_time
- *        Expiration time of the record, use 0 to remove the record.
- * @param result_cb
- *        Function called with the result of the operation.
- * @param result_cls
- *        Closure for @a result_cb
- *
- * @return #GNUNET_OK if the request was sent,
- *         #GNUNET_SYSERR on error, e.g. the name/password is too long.
- */
-int
-GNUNET_SOCIAL_zone_add_place (const struct GNUNET_SOCIAL_App *app,
-                              const struct GNUNET_SOCIAL_Ego *ego,
-                              const char *name,
-                              const char *password,
-                              const struct GNUNET_CRYPTO_EddsaPublicKey *place_pub_key,
-                              const struct GNUNET_PeerIdentity *origin,
-                              uint32_t relay_count,
-                              const struct GNUNET_PeerIdentity *relays,
-                              struct GNUNET_TIME_Absolute expiration_time,
-                              GNUNET_ResultCallback result_cb,
-                              void *result_cls)
-{
-  struct ZoneAddPlaceRequest *preq;
-  size_t name_size = strlen (name) + 1;
-  size_t password_size = strlen (password) + 1;
-  size_t relay_size = relay_count * sizeof (*relays);
-  size_t payload_size = name_size + password_size + relay_size;
-
-  if (GNUNET_MAX_MESSAGE_SIZE < sizeof (*preq) + payload_size)
-    return GNUNET_SYSERR;
-
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg_extra (preq, payload_size,
-                               GNUNET_MESSAGE_TYPE_SOCIAL_ZONE_ADD_PLACE);
-  preq->expiration_time = GNUNET_htonll (expiration_time.abs_value_us);
-  preq->ego_pub_key = ego->pub_key;
-  preq->place_pub_key = *place_pub_key;
-  preq->origin = *origin;
-  preq->relay_count = htonl (relay_count);
-
-  char *p = (char *) &preq[1];
-  GNUNET_memcpy (p, name, name_size);
-  p += name_size;
-  GNUNET_memcpy (p, password, password_size);
-  p += password_size;
-  GNUNET_memcpy (p, relays, relay_size);
-
-  struct ZoneAddPlaceHandle * add_plc = GNUNET_malloc (sizeof (*add_plc));
-  add_plc->result_cb = result_cb;
-  add_plc->result_cls = result_cls;
-
-  preq->op_id = GNUNET_htonll (GNUNET_OP_add (app->op,
-                                              op_recv_zone_add_place_result,
-                                              add_plc, NULL));
-
-  GNUNET_MQ_send (app->mq, env);
-  return GNUNET_OK;
-}
-
-
-static void
-op_recv_zone_add_nym_result (void *cls, int64_t result,
-                             const void *err_msg, uint16_t err_msg_size)
-{
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Received zone add nym result: %" PRId64 ".\n", result);
-
-  struct ZoneAddNymHandle *add_nym = cls;
-  if (NULL != add_nym->result_cb)
-    add_nym->result_cb (add_nym->result_cls, result, err_msg, err_msg_size);
-
-  GNUNET_free (add_nym);
-}
-
-
-/**
- * Add nym to the GNS zone of @e ego.
- *
- * @param cfg
- *        Configuration.
- * @param ego
- *        Ego.
- * @param name
- *        The name for the PKEY record to put in the zone.
- * @param nym_pub_key
- *        Public key of nym to add.
- * @param expiration_time
- *        Expiration time of the record, use 0 to remove the record.
- * @param result_cb
- *        Function called with the result of the operation.
- * @param result_cls
- *        Closure for @a result_cb
- *
- * @return #GNUNET_OK if the request was sent,
- *         #GNUNET_SYSERR on error, e.g. the name is too long.
- */
-int
-GNUNET_SOCIAL_zone_add_nym (const struct GNUNET_SOCIAL_App *app,
-                            const struct GNUNET_SOCIAL_Ego *ego,
-                            const char *name,
-                            const struct GNUNET_CRYPTO_EcdsaPublicKey *nym_pub_key,
-                            struct GNUNET_TIME_Absolute expiration_time,
-                            GNUNET_ResultCallback result_cb,
-                            void *result_cls)
-{
-  struct ZoneAddNymRequest *nreq;
-
-  size_t name_size = strlen (name) + 1;
-  if (GNUNET_MAX_MESSAGE_SIZE < sizeof (*nreq) + name_size)
-    return GNUNET_SYSERR;
-
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg_extra (nreq, name_size,
-                               GNUNET_MESSAGE_TYPE_SOCIAL_ZONE_ADD_NYM);
-  nreq->expiration_time = GNUNET_htonll (expiration_time.abs_value_us);
-  nreq->ego_pub_key = ego->pub_key;
-  nreq->nym_pub_key = *nym_pub_key;
-  GNUNET_memcpy (&nreq[1], name, name_size);
-
-  struct ZoneAddNymHandle *add_nym = GNUNET_malloc (sizeof (*add_nym));
-  add_nym->result_cb = result_cb;
-  add_nym->result_cls = result_cls;
-
-  nreq->op_id = GNUNET_htonll (GNUNET_OP_add (app->op,
-                                              op_recv_zone_add_nym_result,
-                                              add_nym, NULL));
-
-  GNUNET_MQ_send (app->mq, env);
-  return GNUNET_OK;
-}
-
-
-/*** APP ***/
-
-
-static void
-app_connect (struct GNUNET_SOCIAL_App *app);
-
-
-static void
-app_reconnect (void *cls)
-{
-  app_connect (cls);
-}
-
-
-/**
- * App client disconnected from service.
- *
- * Reconnect after backoff period.
- */
-static void
-app_disconnected (void *cls, enum GNUNET_MQ_Error error)
-{
-  struct GNUNET_SOCIAL_App *app = cls;
-
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "App client disconnected (%d), re-connecting\n",
-       (int) error);
-  if (NULL != app->mq)
-  {
-    GNUNET_MQ_destroy (app->mq);
-    app->mq = NULL;
-  }
-
-  app->reconnect_task = GNUNET_SCHEDULER_add_delayed (app->reconnect_delay,
-                                                      app_reconnect,
-                                                      app);
-  app->reconnect_delay = GNUNET_TIME_STD_BACKOFF (app->reconnect_delay);
-}
-
-
-static void
-app_connect (struct GNUNET_SOCIAL_App *app)
-{
-  struct GNUNET_MQ_MessageHandler handlers[] = {
-    GNUNET_MQ_hd_var_size (app_ego,
-                           GNUNET_MESSAGE_TYPE_SOCIAL_APP_EGO,
-                           struct AppEgoMessage,
-                           app),
-    GNUNET_MQ_hd_fixed_size (app_ego_end,
-                             GNUNET_MESSAGE_TYPE_SOCIAL_APP_EGO_END,
-                             struct GNUNET_MessageHeader,
-                             app),
-    GNUNET_MQ_hd_var_size (app_place,
-                           GNUNET_MESSAGE_TYPE_SOCIAL_APP_PLACE,
-                           struct AppPlaceMessage,
-                           app),
-    GNUNET_MQ_hd_fixed_size (app_place_end,
-                             GNUNET_MESSAGE_TYPE_SOCIAL_APP_PLACE_END,
-                             struct GNUNET_MessageHeader,
-                             app),
-    GNUNET_MQ_hd_var_size (app_result,
-                           GNUNET_MESSAGE_TYPE_PSYC_RESULT_CODE,
-                           struct GNUNET_OperationResultMessage,
-                           app),
-    GNUNET_MQ_handler_end ()
-  };
-
-  app->mq = GNUNET_CLIENT_connect (app->cfg, "social",
-                                   handlers, app_disconnected, app);
-  GNUNET_assert (NULL != app->mq);
-  GNUNET_MQ_send_copy (app->mq, app->connect_env);
-}
-
-
-/**
- * Connect application to the social service.
- *
- * The @host_place_cb and @guest_place_cb functions are
- * initially called for each entered places,
- * then later each time a new place is entered with the current application ID.
- *
- * @param cfg
- *        Configuration.
- * @param id
- *        Application ID.
- * @param ego_cb
- *        Function to notify about an available ego.
- * @param host_cb
- *        Function to notify about a place entered as host.
- * @param guest_cb
- *        Function to notify about a place entered as guest.
- * @param cls
- *        Closure for the callbacks.
- *
- * @return Handle that can be used to stop listening.
- */
-struct GNUNET_SOCIAL_App *
-GNUNET_SOCIAL_app_connect (const struct GNUNET_CONFIGURATION_Handle *cfg,
-                           const char *id,
-                           GNUNET_SOCIAL_AppEgoCallback ego_cb,
-                           GNUNET_SOCIAL_AppHostPlaceCallback host_cb,
-                           GNUNET_SOCIAL_AppGuestPlaceCallback guest_cb,
-                           GNUNET_SOCIAL_AppConnectedCallback connected_cb,
-                           void *cls)
-{
-  uint16_t app_id_size = strnlen (id, GNUNET_SOCIAL_APP_MAX_ID_SIZE);
-  if (GNUNET_SOCIAL_APP_MAX_ID_SIZE == app_id_size)
-    return NULL;
-  app_id_size++;
-
-  struct GNUNET_SOCIAL_App *app = GNUNET_malloc (sizeof *app);
-  app->cfg = cfg;
-  app->ego_cb = ego_cb;
-  app->host_cb = host_cb;
-  app->guest_cb = guest_cb;
-  app->connected_cb = connected_cb;
-  app->cb_cls = cls;
-  app->egos = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_NO);
-  app->op = GNUNET_OP_create ();
-  app->id = GNUNET_malloc (app_id_size);
-  GNUNET_memcpy (app->id, id, app_id_size);
-
-  struct AppConnectRequest *creq;
-  app->connect_env = GNUNET_MQ_msg_extra (creq, app_id_size,
-                                          GNUNET_MESSAGE_TYPE_SOCIAL_APP_CONNECT);
-  GNUNET_memcpy (&creq[1], app->id, app_id_size);
-
-  app_connect (app);
-  return app;
-}
-
-
-static void
-app_cleanup (struct GNUNET_SOCIAL_App *app)
-{
-  if (NULL != app->mq)
-  {
-    GNUNET_MQ_destroy (app->mq);
-    app->mq = NULL;
-  }
-  if (NULL != app->disconnect_cb)
-  {
-    app->disconnect_cb (app->disconnect_cls);
-    app->disconnect_cb = NULL;
-  }
-  GNUNET_free (app);
-}
-
-/**
- * Disconnect application.
- *
- * @param app
- *        Application handle.
- * @param disconnect_cb
- *        Disconnect callback.
- * @param disconnect_cls
- *        Disconnect closure.
- */
-void
-GNUNET_SOCIAL_app_disconnect (struct GNUNET_SOCIAL_App *app,
-                              GNUNET_ContinuationCallback disconnect_cb,
-                              void *disconnect_cls)
-{
-  if (NULL == app) return;
-
-  app->disconnect_cb = disconnect_cb;
-  app->disconnect_cls = disconnect_cls;
-
-  if (NULL != app->mq)
-  {
-    struct GNUNET_MQ_Envelope *env = GNUNET_MQ_get_last_envelope (app->mq);
-    if (NULL != env)
-    {
-      GNUNET_MQ_notify_sent (env, (GNUNET_SCHEDULER_TaskCallback) app_cleanup, app);
-    }
-    else
-    {
-      app_cleanup (app);
-    }
-  }
-  else
-  {
-    app_cleanup (app);
-  }
-}
-
-
-/**
- * Detach application from a place.
- *
- * Removes the place from the entered places list for this application.
- * Note: this does not disconnect from the place.
- *
- * @see GNUNET_SOCIAL_host_disconnect() and GNUNET_SOCIAL_guest_disconnect()
- *
- * @param app
- *        Application.
- * @param plc
- *        Place.
- */
-void
-GNUNET_SOCIAL_app_detach (struct GNUNET_SOCIAL_App *app,
-                          struct GNUNET_SOCIAL_Place *plc)
-{
-  struct AppDetachRequest *dreq;
-  struct GNUNET_MQ_Envelope *
-    env = GNUNET_MQ_msg (dreq, GNUNET_MESSAGE_TYPE_SOCIAL_APP_DETACH);
-  dreq->place_pub_key = plc->pub_key;
-  dreq->ego_pub_key = plc->ego_pub_key;
-
-  GNUNET_MQ_send (app->mq, env);
-}
-
-
-/* end of social_api.c */
diff --git a/src/social/test_social.c b/src/social/test_social.c
deleted file mode 100644 (file)
index feac3c5..0000000
+++ /dev/null
@@ -1,1449 +0,0 @@
-/*
- * This file is part of GNUnet
- * Copyright (C) 2013 GNUnet e.V.
- *
- * GNUnet is free software: you can redistribute it and/or modify it
- * under the terms of the GNU Affero General Public License as published
- * by the Free Software Foundation, either version 3 of the License,
- * or (at your option) any later version.
- *
- * GNUnet is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-     SPDX-License-Identifier: AGPL3.0-or-later
- */
-/**
- * @file social/test_social.c
- * @brief Tests for the Social API.
- * @author Gabor X Toth
- */
-
-#include <inttypes.h>
-
-#include "platform.h"
-#include "gnunet_crypto_lib.h"
-#include "gnunet_common.h"
-#include "gnunet_util_lib.h"
-#include "gnunet_testing_lib.h"
-#include "gnunet_psyc_util_lib.h"
-#include "gnunet_social_service.h"
-#include "gnunet_identity_service.h"
-
-#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 30)
-
-#define DATA2ARG(data) data, sizeof (data)
-
-/**
- * Return value from 'main'.
- */
-int res;
-
-struct GNUNET_SOCIAL_App *app;
-const char *app_id = "test";
-
-/**
- * Handle for task for timeout termination.
- */
-struct GNUNET_SCHEDULER_Task *end_badly_task;
-
-const struct GNUNET_CONFIGURATION_Handle *cfg;
-
-struct GNUNET_PeerIdentity this_peer;
-
-struct GNUNET_IDENTITY_Handle *id;
-
-const struct GNUNET_IDENTITY_Ego *identity_host_ego;
-const struct GNUNET_IDENTITY_Ego *identity_guest_ego;
-
-const struct GNUNET_SOCIAL_Ego *host_ego;
-const struct GNUNET_SOCIAL_Ego *guest_ego;
-
-const char *host_name = "Host One";
-const char *guest_name = "Guest One";
-
-struct GNUNET_CRYPTO_EddsaPrivateKey *place_key;
-struct GNUNET_CRYPTO_EcdsaPrivateKey *guest_key;
-
-struct GNUNET_CRYPTO_EddsaPublicKey place_pub_key;
-struct GNUNET_HashCode place_pub_hash;
-
-const struct GNUNET_CRYPTO_EcdsaPublicKey *guest_pub_key;
-const struct GNUNET_CRYPTO_EcdsaPublicKey *host_pub_key;
-
-struct GNUNET_PSYC_Slicer *host_slicer;
-struct GNUNET_PSYC_Slicer *guest_slicer;
-
-struct GNUNET_SOCIAL_Host *hst;
-struct GNUNET_SOCIAL_Guest *gst;
-
-struct GNUNET_SOCIAL_Place *hst_plc;
-struct GNUNET_SOCIAL_Place *gst_plc;
-
-struct GNUNET_SOCIAL_Nym *nym_eject;
-
-struct GuestEnterMessage
-{
-  struct GNUNET_PSYC_Message *msg;
-  const char *method_name;
-  struct GNUNET_PSYC_Environment *env;
-  void *data;
-  uint16_t data_size;
-} guest_enter_msg;
-
-struct TransmitClosure
-{
-  struct GNUNET_SOCIAL_Announcement *host_ann;
-  struct GNUNET_SOCIAL_TalkRequest *guest_talk;
-  struct GNUNET_PSYC_Environment *env;
-  char *data[16];
-  uint8_t data_delay[16];
-  uint8_t data_count;
-  uint8_t paused;
-  uint8_t n;
-} tmit;
-
-struct ResultClosure {
-  uint32_t n;
-} mod_foo_bar_rcls;
-
-uint8_t join_req_count;
-struct GNUNET_PSYC_Message *join_resp;
-
-uint32_t counter;
-
-uint8_t is_guest_nym_added = GNUNET_NO;
-uint8_t is_host_reconnected = GNUNET_NO;
-uint8_t is_guest_reconnected = GNUNET_NO;
-
-enum
-{
-  TEST_NONE                         =  0,
-  TEST_IDENTITIES_CREATE            =  1,
-  TEST_HOST_ENTER                   =  2,
-  TEST_GUEST_ENTER                  =  3,
-  TEST_HOST_ANSWER_DOOR_REFUSE      =  4,
-  TEST_GUEST_RECV_ENTRY_DCSN_REFUSE =  5,
-  TEST_HOST_ANSWER_DOOR_ADMIT       =  6,
-  TEST_GUEST_RECV_ENTRY_DCSN_ADMIT  =  7,
-  TEST_HOST_ANNOUNCE                       =  8,
-  TEST_HOST_ANNOUNCE_END            =  9,
-  TEST_GUEST_TALK                   = 10,
-  TEST_HOST_ANNOUNCE2                      = 11,
-  TEST_HOST_ANNOUNCE2_END           = 12,
-  TEST_GUEST_HISTORY_REPLAY         = 13,
-  TEST_GUEST_HISTORY_REPLAY_LATEST  = 14,
-  TEST_GUEST_LOOK_AT                = 15,
-  TEST_GUEST_LOOK_FOR               = 16,
-  TEST_GUEST_LEAVE                  = 17,
-  TEST_ZONE_ADD_PLACE               = 18,
-  TEST_GUEST_ENTER_BY_NAME          = 19,
-  TEST_RECONNECT                    = 20,
-  TEST_GUEST_LEAVE2                 = 21,
-  TEST_HOST_LEAVE                   = 22,
-} test;
-
-
-static void
-schedule_guest_leave (void *cls);
-
-
-static void
-host_answer_door (void *cls,
-                  struct GNUNET_SOCIAL_Nym *nym,
-                  const char *method_name,
-                  struct GNUNET_PSYC_Environment *env,
-                  const void *data,
-                  size_t data_size);
-
-static void
-host_enter ();
-
-static void
-guest_init ();
-
-static void
-guest_enter ();
-
-static void
-guest_enter_by_name ();
-
-static void
-guest_talk ();
-
-static void
-host_announce2 ();
-
-
-/**
- * Terminate the test case (failure).
- *
- * @param cls NULL
- */
-static void
-end_badly (void *cls)
-{
-  end_badly_task = NULL;
-  GNUNET_SCHEDULER_shutdown ();
-  res = 2;
-  GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-              "Test FAILED.\n");
-}
-
-
-/**
- * Terminate the test case (failure).
- *
- * @param cls NULL
- */
-static void
-end_shutdown (void *cls)
-{
-  if (NULL != id)
-  {
-    GNUNET_IDENTITY_disconnect (id);
-    id = NULL;
-  }
-
-  if (NULL != guest_slicer)
-  {
-    GNUNET_PSYC_slicer_destroy (guest_slicer);
-    guest_slicer = NULL;
-  }
-
-  if (NULL != host_slicer)
-  {
-    GNUNET_PSYC_slicer_destroy (host_slicer);
-    host_slicer = NULL;
-  }
-  if (NULL != end_badly_task)
-  {
-    GNUNET_SCHEDULER_cancel (end_badly_task);
-    end_badly_task = NULL;
-  }
-  if (NULL != gst)
-  {
-    GNUNET_SOCIAL_guest_leave (gst, NULL, NULL, NULL);
-    gst = NULL;
-    gst_plc = NULL;
-  }
-  if (NULL != hst)
-  {
-    GNUNET_SOCIAL_host_leave (hst, NULL, NULL, NULL);
-    hst = NULL;
-    hst_plc = NULL;
-  }
-  GNUNET_SOCIAL_app_disconnect (app, NULL, NULL);
-}
-
-
-/**
- * Terminate the test case (success).
- *
- * @param cls NULL
- */
-static void
-end_normally (void *cls)
-{
-  GNUNET_SCHEDULER_shutdown ();
-  res = 0;
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE, "Test PASSED.\n");
-}
-
-
-/**
- * Finish the test case (successfully).
- */
-static void
-end ()
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: Ending tests.\n", test);
-
-  if (end_badly_task != NULL)
-  {
-    GNUNET_SCHEDULER_cancel (end_badly_task);
-    end_badly_task = NULL;
-  }
-  GNUNET_SCHEDULER_add_now (&end_normally, NULL);
-}
-
-
-static void
-transmit_resume (void *cls)
-{
-  struct TransmitClosure *tmit = cls;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-             "Test #%u: Transmission resumed.\n", test);
-  if (NULL != tmit->host_ann)
-    GNUNET_SOCIAL_host_announce_resume (tmit->host_ann);
-  else
-    GNUNET_SOCIAL_guest_talk_resume (tmit->guest_talk);
-}
-
-
-static int
-notify_data (void *cls, uint16_t *data_size, void *data)
-{
-  struct TransmitClosure *tmit = cls;
-  if (NULL != tmit->env)
-  {
-    GNUNET_PSYC_env_destroy (tmit->env);
-    tmit->env = NULL;
-  }
-  if (0 == tmit->data_count)
-  {
-    *data_size = 0;
-    return GNUNET_YES;
-  }
-
-  uint16_t size = strlen (tmit->data[tmit->n]);
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: Transmit notify data: %u bytes available, "
-              "processing fragment %u/%u (size %u).\n",
-              test, *data_size, tmit->n + 1, tmit->data_count, size);
-  if (*data_size < size)
-  {
-    *data_size = 0;
-    GNUNET_assert (0);
-    return GNUNET_SYSERR;
-  }
-
-  if (GNUNET_YES != tmit->paused && 0 < tmit->data_delay[tmit->n])
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-                "Test #%u: Transmission paused.\n", test);
-    tmit->paused = GNUNET_YES;
-    GNUNET_SCHEDULER_add_delayed (
-      GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS,
-                                     tmit->data_delay[tmit->n]),
-      &transmit_resume, tmit);
-    *data_size = 0;
-    return GNUNET_NO;
-  }
-  tmit->paused = GNUNET_NO;
-
-  *data_size = size;
-  GNUNET_memcpy (data, tmit->data[tmit->n], size);
-
-  return ++tmit->n < tmit->data_count ? GNUNET_NO : GNUNET_YES;
-}
-
-
-static void
-host_left ()
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: The host has left the place.\n", test);
-  end ();
-}
-
-
-static void
-schedule_host_leave (void *cls)
-{
-  test = TEST_HOST_LEAVE;
-  GNUNET_SOCIAL_host_leave (hst, NULL, &host_left, NULL);
-  hst = NULL;
-  hst_plc = NULL;
-}
-
-
-static void
-host_farewell2 (void *cls,
-               const struct GNUNET_SOCIAL_Nym *nym,
-               struct GNUNET_PSYC_Environment *env)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Nym left the place again.\n");
-  GNUNET_SCHEDULER_add_now (&schedule_host_leave, NULL);
-}
-
-
-static void
-host_reconnected (void *cls, int result,
-                 const struct GNUNET_CRYPTO_EddsaPublicKey *home_pub_key,
-                 uint64_t max_message_id)
-{
-  place_pub_key = *home_pub_key;
-  GNUNET_CRYPTO_hash (&place_pub_key, sizeof (place_pub_key), &place_pub_hash);
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: Host reconnected to place %s\n",
-              test, GNUNET_h2s (&place_pub_hash));
-
-  is_host_reconnected = GNUNET_YES;
-  if (GNUNET_YES == is_guest_reconnected)
-  {
-    GNUNET_assert (NULL != gst);
-    GNUNET_SCHEDULER_add_now (&schedule_guest_leave, NULL);
-  }
-}
-
-
-static void
-guest_reconnected (void *cls, int result,
-                   const struct GNUNET_CRYPTO_EddsaPublicKey *place_pub_key,
-                   uint64_t max_message_id)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: Guest reconnected to place: %d\n",
-              test, result);
-  GNUNET_assert (0 <= result);
-
-  is_guest_reconnected = GNUNET_YES;
-  if (GNUNET_YES == is_host_reconnected)
-  {
-    GNUNET_assert (NULL != gst);
-    GNUNET_SCHEDULER_add_now (&schedule_guest_leave, NULL);
-  }
-}
-
-
-static void
-app_connected (void *cls)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: App connected: %p\n", test, cls);
-}
-
-
-static void
-app_recv_host (void *cls,
-               struct GNUNET_SOCIAL_HostConnection *hconn,
-               struct GNUNET_SOCIAL_Ego *ego,
-               const struct GNUNET_CRYPTO_EddsaPublicKey *host_pub_key,
-               enum GNUNET_SOCIAL_AppPlaceState place_state)
-{
-  struct GNUNET_HashCode host_pub_hash;
-
-  GNUNET_CRYPTO_hash (host_pub_key,
-                      sizeof (*host_pub_key),
-                      &host_pub_hash);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: Got app host place notification: %s\n",
-              test,
-              GNUNET_h2s (&host_pub_hash));
-
-  if (test == TEST_RECONNECT)
-  {
-    if (0 == memcmp (&place_pub_key, host_pub_key, sizeof (*host_pub_key)))
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-                  "Test #%u: Reconnecting to host place: %s\n",
-                  test, GNUNET_h2s (&host_pub_hash));
-      hst = GNUNET_SOCIAL_host_enter_reconnect (hconn, host_slicer,
-                                                &host_reconnected,
-                                                &host_answer_door,
-                                                &host_farewell2,
-                                                NULL);
-    }
-  }
-}
-
-
-static void
-app_recv_guest (void *cls,
-                struct GNUNET_SOCIAL_GuestConnection *gconn,
-                struct GNUNET_SOCIAL_Ego *ego,
-                const struct GNUNET_CRYPTO_EddsaPublicKey *guest_pub_key,
-                enum GNUNET_SOCIAL_AppPlaceState place_state)
-{
-  struct GNUNET_HashCode guest_pub_hash;
-
-  GNUNET_CRYPTO_hash (guest_pub_key,
-                      sizeof (*guest_pub_key),
-                      &guest_pub_hash);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: Got app guest place notification: %s\n",
-              test, GNUNET_h2s (&guest_pub_hash));
-
-  if (test == TEST_RECONNECT)
-  {
-    if (0 == memcmp (&place_pub_key,
-                     guest_pub_key,
-                     sizeof (*guest_pub_key)))
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-                  "Test #%u: Reconnecting to guest place: %s\n",
-                  test, GNUNET_h2s (&guest_pub_hash));
-      gst = GNUNET_SOCIAL_guest_enter_reconnect (gconn,
-                                                 GNUNET_PSYC_SLAVE_JOIN_NONE,
-                                                 guest_slicer,
-                                                 &guest_reconnected,
-                                                 NULL);
-      GNUNET_assert (NULL != gst);
-    }
-  }
-}
-
-
-static void
-enter_if_ready ()
-{
-  if (NULL == host_ego || NULL == guest_ego)
-  {
-    return;
-  }
-  host_enter ();
-  guest_init ();
-}
-
-
-static void
-app_recv_ego (void *cls,
-              struct GNUNET_SOCIAL_Ego *ego,
-              const struct GNUNET_CRYPTO_EcdsaPublicKey *ego_pub_key,
-              const char *name)
-{
-  char *ego_pub_str = GNUNET_CRYPTO_ecdsa_public_key_to_string (ego_pub_key);
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: Got app ego notification: %p %s %s\n",
-              test, ego, name, ego_pub_str);
-  GNUNET_free (ego_pub_str);
-
-  if (NULL != strstr (name, host_name))
-  {
-    host_ego = ego;
-    host_pub_key = ego_pub_key;
-    if (TEST_IDENTITIES_CREATE == test)
-    {
-      enter_if_ready ();
-    }
-    else
-    {
-      GNUNET_assert (TEST_RECONNECT == test);
-    }
-  }
-  else if (NULL != strstr (name, guest_name))
-  {
-    guest_ego = ego;
-    guest_pub_key = ego_pub_key;
-    if (TEST_IDENTITIES_CREATE == test)
-    {
-      enter_if_ready ();
-    }
-    else
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-                  "test = %d\n",
-                  test);
-      GNUNET_assert (TEST_RECONNECT == test);
-    }
-  }
-}
-
-
-static void
-schedule_reconnect (void *cls)
-{
-  test = TEST_RECONNECT;
-  GNUNET_SOCIAL_host_disconnect (hst, NULL, NULL);
-  GNUNET_SOCIAL_guest_disconnect (gst, NULL, NULL);
-  hst = NULL;
-  gst = NULL;
-
-  GNUNET_SOCIAL_app_disconnect (app, NULL, NULL);
-  app = GNUNET_SOCIAL_app_connect (cfg, app_id,
-                                   &app_recv_ego,
-                                   &app_recv_host,
-                                   &app_recv_guest,
-                                   &app_connected,
-                                   NULL);
-}
-
-
-static void
-host_recv_zone_add_place_result (void *cls, int64_t result,
-                                 const void *data, uint16_t data_size)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: Zone add place result: %" PRId64 " (%.*s).\n",
-              test, result, data_size, (const char *) data);
-  GNUNET_assert (GNUNET_YES == result);
-
-  GNUNET_assert (GNUNET_YES == is_guest_nym_added);
-  guest_enter_by_name ();
-}
-
-
-static void
-zone_add_place ()
-{
-  test = TEST_ZONE_ADD_PLACE;
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: Adding place to zone.\n", test);
-
-  GNUNET_SOCIAL_zone_add_place (app, host_ego, "home", "let.me*in!",
-                                &place_pub_key, &this_peer, 1, &this_peer,
-                                GNUNET_TIME_relative_to_absolute (GNUNET_TIME_UNIT_MINUTES),
-                                host_recv_zone_add_place_result, app);
-}
-
-
-static void
-host_farewell (void *cls,
-               const struct GNUNET_SOCIAL_Nym *nym,
-               struct GNUNET_PSYC_Environment *env)
-{
-  const struct GNUNET_CRYPTO_EcdsaPublicKey *
-    nym_key = GNUNET_SOCIAL_nym_get_pub_key (nym);
-
-  char *str = GNUNET_CRYPTO_ecdsa_public_key_to_string (nym_key);
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: Farewell: nym %s (%s) has left the place.\n",
-              test, GNUNET_h2s (GNUNET_SOCIAL_nym_get_pub_key_hash (nym)), str);
-  GNUNET_free (str);
-  GNUNET_assert (1 == GNUNET_PSYC_env_get_count (env));
-  if (0 != memcmp (guest_pub_key, nym_key, sizeof (*nym_key)))
-  {
-    str = GNUNET_CRYPTO_ecdsa_public_key_to_string (guest_pub_key);
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "Test #%u: Farewell: nym does not match guest: %s\n",
-                test, str);
-    GNUNET_free (str);
-    GNUNET_assert (0);
-  }
-  zone_add_place ();
-}
-
-
-static void
-guest_left (void *cls)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: The guest has left the place.\n", test);
-}
-
-
-static void
-guest_leave ()
-{
-  if (test < TEST_RECONNECT)
-    test = TEST_GUEST_LEAVE;
-  else
-    test = TEST_GUEST_LEAVE2;
-
-  struct GNUNET_PSYC_Environment *env = GNUNET_PSYC_env_create ();
-  GNUNET_PSYC_env_add (env, GNUNET_PSYC_OP_SET,
-                       "_notice_place_leave", DATA2ARG ("Leaving."));
-  GNUNET_SOCIAL_guest_leave (gst, env, &guest_left, NULL);
-  GNUNET_PSYC_env_destroy (env);
-  gst = NULL;
-  gst_plc = NULL;
-}
-
-
-static void
-schedule_guest_leave (void *cls)
-{
-  guest_leave ();
-}
-
-
-static void
-guest_look_for_result (void *cls,
-                      int64_t result_code,
-                      const void *data,
-                      uint16_t data_size)
-{
-  struct ResultClosure *rcls = cls;
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: guest_look_for_result: %" PRId64 "\n",
-              test, result_code);
-  GNUNET_assert (GNUNET_OK == result_code);
-  GNUNET_assert (6 == rcls->n);
-  GNUNET_free (rcls);
-  GNUNET_SCHEDULER_add_now (&schedule_guest_leave, NULL);
-}
-
-
-static void
-guest_look_for_var (void *cls,
-                   const struct GNUNET_MessageHeader *mod,
-                   const char *name,
-                   const void *value,
-                   uint32_t value_size,
-                   uint32_t full_value_size)
-{
-  struct ResultClosure *rcls = cls;
-  rcls->n++;
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: guest_look_for_var: %s\n%.*s\n",
-              test, name, value_size, (const char *) value);
-}
-
-
-static void
-guest_look_for ()
-{
-  test = TEST_GUEST_LOOK_FOR;
-  struct ResultClosure *rcls = GNUNET_malloc (sizeof (*rcls));
-  GNUNET_SOCIAL_place_look_for (gst_plc, "_foo", guest_look_for_var, guest_look_for_result, rcls);
-}
-
-
-static void
-guest_look_at_result (void *cls, int64_t result_code,
-                      const void *data, uint16_t data_size)
-{
-  struct ResultClosure *rcls = cls;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: guest_look_at_result: %" PRId64 "\n",
-              test, result_code);
-  GNUNET_assert (GNUNET_OK == result_code);
-  GNUNET_assert (1 == rcls->n);
-  GNUNET_free (rcls);
-  guest_look_for ();
-}
-
-
-static void
-guest_look_at_var (void *cls,
-                   const struct GNUNET_MessageHeader *mod,
-                   const char *name,
-                   const void *value,
-                   uint32_t value_size,
-                   uint32_t full_value_size)
-{
-  struct ResultClosure *rcls = cls;
-  rcls->n++;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: guest_look_at_var: %s\n%.*s\n",
-              test ,name, value_size, (const char *) value);
-}
-
-
-static void
-guest_look_at ()
-{
-  test = TEST_GUEST_LOOK_AT;
-  struct ResultClosure *rcls = GNUNET_malloc (sizeof (*rcls));
-  GNUNET_SOCIAL_place_look_at (gst_plc, "_foo_bar", guest_look_at_var, guest_look_at_result, rcls);
-}
-
-
-static void
-guest_recv_history_replay_latest_result (void *cls, int64_t result,
-                                         const void *data, uint16_t data_size)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: Guest received latest history replay result "
-              "(%" PRIu32 " messages, %" PRId64 " fragments):\n"
-              "%.*s\n",
-              test, counter, result, data_size, (const char *) data);
-  //GNUNET_assert (2 == counter); /* message count */
-  //GNUNET_assert (7 == result); /* fragment count */
-
-  guest_look_at ();
-}
-
-
-static void
-guest_history_replay_latest ()
-{
-  test = TEST_GUEST_HISTORY_REPLAY_LATEST;
-  counter = 0;
-  GNUNET_SOCIAL_place_history_replay_latest (gst_plc, 3, "",
-                                             GNUNET_PSYC_HISTORY_REPLAY_LOCAL,
-                                             guest_slicer,
-                                             &guest_recv_history_replay_latest_result,
-                                             NULL);
-}
-
-
-static void
-guest_recv_history_replay_result (void *cls, int64_t result,
-                                  const void *data, uint16_t data_size)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: Guest received history replay result: %" PRId64 "\n"
-              "%.*s\n",
-              test, result, data_size, (const char *) data);
-//  GNUNET_assert (2 == counter); /* message count */
-//  GNUNET_assert (7 == result); /* fragment count */
-
-  guest_history_replay_latest ();
-}
-
-
-static void
-guest_history_replay ()
-{
-  test = TEST_GUEST_HISTORY_REPLAY;
-  counter = 0;
-  GNUNET_SOCIAL_place_history_replay (gst_plc, 1, 3, "",
-                                      GNUNET_PSYC_HISTORY_REPLAY_LOCAL,
-                                      guest_slicer,
-                                      &guest_recv_history_replay_result,
-                                      NULL);
-}
-
-
-static void
-guest_recv_method (void *cls,
-                   const struct GNUNET_PSYC_MessageHeader *msg,
-                   const struct GNUNET_PSYC_MessageMethod *meth,
-                   uint64_t message_id,
-                   const char *method_name)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: Guest received method for message ID %" PRIu64 ":\n"
-              "%s (flags: %x)\n",
-              test, message_id, method_name, ntohl (meth->flags));
-  /** @todo FIXME: check message */
-}
-
-
-static void
-guest_recv_modifier (void *cls,
-                     const struct GNUNET_PSYC_MessageHeader *msg,
-                     const struct GNUNET_MessageHeader *pmsg,
-                     uint64_t message_id,
-                     enum GNUNET_PSYC_Operator oper,
-                     const char *name,
-                     const void *value,
-                     uint16_t value_size,
-                     uint16_t full_value_size)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: Guest received modifier for message ID %" PRIu64 ":\n"
-              "%c%s: %.*s (size: %u)\n",
-              test, message_id, oper, name, value_size, (const char *) value, value_size);
-  /** @todo FIXME: check modifier */
-}
-
-static void
-guest_recv_mod_foo_bar (void *cls,
-                        const struct GNUNET_PSYC_MessageHeader *msg,
-                        const struct GNUNET_MessageHeader *pmsg,
-                        uint64_t message_id,
-                        enum GNUNET_PSYC_Operator oper,
-                        const char *name,
-                        const void *value,
-                        uint16_t value_size,
-                        uint16_t full_value_size)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: Guest received modifier matching _foo_bar for message ID %" PRIu64 ":\n"
-              "%c%s: %.*s (size: %u)\n",
-              test, message_id, oper, name, value_size, (const char *) value, value_size);
-  struct ResultClosure *rc = cls;
-  rc->n++;
-  /** @todo FIXME: check modifier */
-}
-
-
-static void
-guest_recv_data (void *cls,
-                 const struct GNUNET_PSYC_MessageHeader *msg,
-                 const struct GNUNET_MessageHeader *pmsg,
-                 uint64_t message_id,
-                 const void *data,
-                 uint16_t data_size)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: Guest received data for message ID %" PRIu64 ":\n"
-              "%.*s\n",
-              test, message_id, data_size, (const char *) data);
-  /** @todo FIXME: check data */
-}
-
-
-static void
-guest_recv_eom (void *cls,
-                const struct GNUNET_PSYC_MessageHeader *msg,
-                const struct GNUNET_MessageHeader *pmsg,
-                uint64_t message_id,
-                uint8_t is_cancelled)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: Guest received end of message ID %" PRIu64
-              ", cancelled: %u\n",
-              test, message_id, is_cancelled);
-
-  switch (test)
-  {
-  case TEST_HOST_ANNOUNCE:
-    test = TEST_HOST_ANNOUNCE_END;
-    break;
-
-  case TEST_HOST_ANNOUNCE_END:
-    guest_talk ();
-    break;
-
-  case TEST_HOST_ANNOUNCE2:
-    test = TEST_HOST_ANNOUNCE2_END;
-    break;
-
-  case TEST_HOST_ANNOUNCE2_END:
-    guest_history_replay ();
-    break;
-
-  case TEST_GUEST_HISTORY_REPLAY:
-  case TEST_GUEST_HISTORY_REPLAY_LATEST:
-    counter++;
-    break;
-
-  default:
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "invalid test: %d\n", test);
-    GNUNET_assert (0);
-  }
-}
-
-
-static void
-host_recv_method (void *cls,
-                  const struct GNUNET_PSYC_MessageHeader *msg,
-                  const struct GNUNET_PSYC_MessageMethod *meth,
-                  uint64_t message_id,
-                  const char *method_name)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: Host received method for message ID %" PRIu64 ":\n"
-              "%s\n",
-              test, message_id, method_name);
-  /** @todo FIXME: check message */
-}
-
-
-static void
-host_recv_modifier (void *cls,
-                    const struct GNUNET_PSYC_MessageHeader *msg,
-                    const struct GNUNET_MessageHeader *pmsg,
-                    uint64_t message_id,
-                    enum GNUNET_PSYC_Operator oper,
-                    const char *name,
-                    const void *value,
-                    uint16_t value_size,
-                    uint16_t full_value_size)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: Host received modifier for message ID %" PRIu64 ":\n"
-              "%c%s: %.*s\n",
-              test, message_id, oper, name, value_size, (const char *) value);
-}
-
-
-static void
-host_recv_data (void *cls,
-                const struct GNUNET_PSYC_MessageHeader *msg,
-                const struct GNUNET_MessageHeader *pmsg,
-                uint64_t message_id,
-                const void *data,
-                uint16_t data_size)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: Host received data for message ID %" PRIu64 ":\n"
-              "%.*s\n",
-              test, message_id, data_size, (const char *) data);
-}
-
-
-static void
-host_recv_eom (void *cls,
-               const struct GNUNET_PSYC_MessageHeader *msg,
-               const struct GNUNET_MessageHeader *pmsg,
-               uint64_t message_id,
-               uint8_t is_cancelled)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: Host received end of message ID %" PRIu64
-              ", cancelled: %u\n",
-              test, message_id, is_cancelled);
-
-  switch (test)
-  {
-  case TEST_HOST_ANNOUNCE:
-    test = TEST_HOST_ANNOUNCE_END;
-    break;
-
-  case TEST_HOST_ANNOUNCE_END:
-    guest_talk ();
-    break;
-
-  case TEST_HOST_ANNOUNCE2:
-    test = TEST_HOST_ANNOUNCE2_END;
-    break;
-
-  case TEST_HOST_ANNOUNCE2_END:
-    guest_history_replay ();
-    break;
-
-  case TEST_GUEST_TALK:
-    host_announce2 ();
-    break;
-
-  default:
-    if (TEST_GUEST_LEAVE <= test)
-      break;
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Invalid test: #%u\n", test);
-    GNUNET_assert (0);
-  }
-}
-
-
-static void
-guest_talk ()
-{
-  test = TEST_GUEST_TALK;
-
-  tmit = (struct TransmitClosure) {};
-  tmit.env = GNUNET_PSYC_env_create ();
-  GNUNET_PSYC_env_add (tmit.env, GNUNET_PSYC_OP_ASSIGN,
-                       "_bar_foo", DATA2ARG ("one two three"));
-  GNUNET_PSYC_env_add (tmit.env, GNUNET_PSYC_OP_ASSIGN,
-                       "_bar_baz", DATA2ARG ("four five"));
-  tmit.data[0] = "zzz xxx yyy ";
-  tmit.data[1] = "zyx wvu tsr qpo.\n";
-  tmit.data_delay[1] = 1;
-  tmit.data[2] = "testing ten nine eight.\n";
-  tmit.data_count = 3;
-
-  tmit.guest_talk
-    = GNUNET_SOCIAL_guest_talk (gst, "_converse_guest", tmit.env,
-                                &notify_data, &tmit,
-                                GNUNET_SOCIAL_TALK_NONE);
-}
-
-
-static void
-host_announce ()
-{
-  test = TEST_HOST_ANNOUNCE;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: Host announcement.\n", test);
-
-  tmit = (struct TransmitClosure) {};
-  tmit.env = GNUNET_PSYC_env_create ();
-  GNUNET_PSYC_env_add (tmit.env, GNUNET_PSYC_OP_ASSIGN,
-                       "_foo", DATA2ARG ("bar baz"));
-  GNUNET_PSYC_env_add (tmit.env, GNUNET_PSYC_OP_ASSIGN,
-                       "_foo_bar", DATA2ARG ("foo bar"));
-  GNUNET_PSYC_env_add (tmit.env, GNUNET_PSYC_OP_ASSIGN,
-                       "_foo_bar_baz", DATA2ARG ("foo bar baz"));
-  tmit.data[0] = "aaa bbb ccc ";
-  tmit.data[1] = "abc def ghi jkl.\n";
-  tmit.data_delay[1] = 1;
-  tmit.data[2] = "testing one two three ";
-  tmit.data[3] = "four five.\n";
-  tmit.data_count = 4;
-
-  tmit.host_ann
-    = GNUNET_SOCIAL_host_announce (hst, "_converse_host", tmit.env,
-                                   &notify_data, &tmit,
-                                   GNUNET_SOCIAL_ANNOUNCE_NONE);
-}
-
-
-static void
-host_announce2 ()
-{
-  GNUNET_assert (2 == mod_foo_bar_rcls.n);
-  GNUNET_PSYC_slicer_modifier_remove (guest_slicer, "_foo_bar",
-                                      guest_recv_mod_foo_bar);
-
-  test = TEST_HOST_ANNOUNCE2;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: Host announcement 2.\n", test);
-
-  tmit = (struct TransmitClosure) {};
-  tmit.env = GNUNET_PSYC_env_create ();
-  GNUNET_PSYC_env_add (tmit.env, GNUNET_PSYC_OP_ASSIGN,
-                       "_foo2", DATA2ARG ("BAR BAZ"));
-  GNUNET_PSYC_env_add (tmit.env, GNUNET_PSYC_OP_ASSIGN,
-                       "_foo2_bar", DATA2ARG ("FOO BAR"));
-  GNUNET_PSYC_env_add (tmit.env, GNUNET_PSYC_OP_ASSIGN,
-                       "_foo2_bar_baz", DATA2ARG ("FOO BAR BAZ"));
-  tmit.data[0] = "AAA BBB CCC ";
-  tmit.data[1] = "ABC DEF GHI JKL.\n";
-  tmit.data[2] = "TESTING ONE TWO THREE.\n";
-  tmit.data_count = 3;
-
-  tmit.host_ann
-    = GNUNET_SOCIAL_host_announce (hst, "_converse_host_two", tmit.env,
-                                   &notify_data, &tmit,
-                                   GNUNET_SOCIAL_ANNOUNCE_NONE);
-}
-
-
-static void
-guest_recv_entry_decision (void *cls,
-                           int is_admitted,
-                           const struct GNUNET_PSYC_Message *entry_msg)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: Guest received entry decision (try %u): %d.\n",
-              test, join_req_count, is_admitted);
-
-  if (NULL != entry_msg)
-  {
-    struct GNUNET_PSYC_Environment *env = GNUNET_PSYC_env_create ();
-    const char *method_name = NULL;
-    const void *data = NULL;
-    uint16_t data_size = 0;
-    struct GNUNET_PSYC_MessageHeader *
-      pmsg = GNUNET_PSYC_message_header_create_from_psyc (entry_msg);
-    GNUNET_PSYC_message_parse (pmsg, &method_name, env, &data, &data_size);
-    GNUNET_free (pmsg);
-
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "%s\n%.*s\n",
-                method_name, data_size, (const char *) data);
-    /** @todo FIXME: check response message */
-  }
-
-  switch (test)
-  {
-  case TEST_GUEST_RECV_ENTRY_DCSN_REFUSE:
-    GNUNET_assert (GNUNET_NO == is_admitted);
-    test = TEST_HOST_ANSWER_DOOR_ADMIT;
-    GNUNET_SOCIAL_guest_disconnect (gst, &guest_enter, NULL);
-    break;
-
-  case TEST_GUEST_RECV_ENTRY_DCSN_ADMIT:
-    GNUNET_assert (GNUNET_YES == is_admitted);
-    host_announce ();
-    break;
-
-  case TEST_GUEST_ENTER_BY_NAME:
-    GNUNET_SCHEDULER_add_now (&schedule_reconnect, NULL);
-    break;
-
-  default:
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "invalid test: %d\n", test);
-    GNUNET_assert (0);
-  }
-}
-
-
-static void
-host_answer_door (void *cls,
-                  struct GNUNET_SOCIAL_Nym *nym,
-                  const char *method_name,
-                  struct GNUNET_PSYC_Environment *env,
-                  const void *data,
-                  size_t data_size)
-{
-  join_req_count++;
-
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: Host received entry request from guest (try %u).\n",
-              (uint8_t) test, join_req_count);
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "%s\n%.*s\n",
-              method_name, (int) data_size, (const char *) data);
-
-  switch (test)
-  {
-  case TEST_HOST_ANSWER_DOOR_REFUSE:
-    test = TEST_GUEST_RECV_ENTRY_DCSN_REFUSE;
-    join_resp = GNUNET_PSYC_message_create ("_notice_place_refuse", env,
-                                            DATA2ARG ("Go away!"));
-    GNUNET_SOCIAL_host_entry_decision (hst, nym, GNUNET_NO, join_resp);
-    break;
-
-  case TEST_HOST_ANSWER_DOOR_ADMIT:
-    test = TEST_GUEST_RECV_ENTRY_DCSN_ADMIT;
-    // fall through
-
-  case TEST_GUEST_ENTER_BY_NAME:
-   join_resp = GNUNET_PSYC_message_create ("_notice_place_admit", env,
-                                            DATA2ARG ("Welcome, nym!"));
-    GNUNET_SOCIAL_host_entry_decision (hst, nym, GNUNET_YES, join_resp);
-    break;
-
-  default:
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Invalid test: #%u\n", test);
-    GNUNET_assert (0);
-  }
-}
-
-
-static void
-guest_recv_local_enter (void *cls, int result,
-                        const struct GNUNET_CRYPTO_EddsaPublicKey *place_pub_key,
-                        uint64_t max_message_id)
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: Guest entered local place: %d\n",
-              test, result);
-  GNUNET_assert (GNUNET_OK == result);
-}
-
-
-static void
-guest_enter ()
-{
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: Entering place as guest.\n", test);
-
-  struct GuestEnterMessage *emsg = &guest_enter_msg;
-
-  emsg->method_name = "_request_enter";
-  emsg->env = GNUNET_PSYC_env_create ();
-  GNUNET_PSYC_env_add (emsg->env, GNUNET_PSYC_OP_ASSIGN,
-                       "_abc", "abc def", 7);
-  GNUNET_PSYC_env_add (emsg->env, GNUNET_PSYC_OP_ASSIGN,
-                       "_abc_def", "abc def ghi", 11);
-  emsg->data = "let me in";
-  emsg->data_size = strlen (emsg->data) + 1;
-  emsg->msg = GNUNET_PSYC_message_create (emsg->method_name, emsg->env,
-                                          emsg->data, emsg->data_size);
-
-  gst = GNUNET_SOCIAL_guest_enter (app, guest_ego, &place_pub_key,
-                                   GNUNET_PSYC_SLAVE_JOIN_NONE,
-                                   &this_peer, 0, NULL, emsg->msg, guest_slicer,
-                                   guest_recv_local_enter,
-                                   guest_recv_entry_decision, NULL);
-  gst_plc = GNUNET_SOCIAL_guest_get_place (gst);
-
-  GNUNET_SOCIAL_place_msg_proc_set (gst_plc, "_converse",
-                                    GNUNET_SOCIAL_MSG_PROC_SAVE);
-}
-
-
-static void
-guest_enter_by_name ()
-{
-  test = TEST_GUEST_ENTER_BY_NAME;
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: Entering place by name as guest.\n", test);
-
-  struct GuestEnterMessage *emsg = &guest_enter_msg;
-
-  emsg->method_name = "_request_enter";
-  emsg->env = GNUNET_PSYC_env_create ();
-  GNUNET_PSYC_env_add (emsg->env, GNUNET_PSYC_OP_ASSIGN,
-                       "_abc", "abc def", 7);
-  GNUNET_PSYC_env_add (emsg->env, GNUNET_PSYC_OP_ASSIGN,
-                       "_abc_def", "abc def ghi", 11);
-  emsg->data = "let me in";
-  emsg->data_size = strlen (emsg->data) + 1;
-  emsg->msg = GNUNET_PSYC_message_create (emsg->method_name, emsg->env,
-                                          emsg->data, emsg->data_size);
-
-  gst = GNUNET_SOCIAL_guest_enter_by_name (app, guest_ego,
-                                           "home.host.gnu", "let.me*in!",
-                                           emsg->msg, guest_slicer,
-                                           guest_recv_local_enter,
-                                           guest_recv_entry_decision, NULL);
-  gst_plc = GNUNET_SOCIAL_guest_get_place (gst);
-}
-
-
-static void
-app_recv_zone_add_nym_result (void *cls, int64_t result,
-                              const void *data, uint16_t data_size)
-{
-  GNUNET_assert (GNUNET_YES == result);
-  is_guest_nym_added = GNUNET_YES;
-}
-
-
-static void
-guest_init ()
-{
-  guest_pub_key = GNUNET_SOCIAL_ego_get_pub_key (guest_ego);
-
-  guest_slicer = GNUNET_PSYC_slicer_create ();
-  GNUNET_PSYC_slicer_method_add (guest_slicer, "", NULL,
-                                 guest_recv_method, guest_recv_modifier,
-                                 guest_recv_data, guest_recv_eom, NULL);
-  GNUNET_PSYC_slicer_modifier_add (guest_slicer, "_foo_bar",
-                                   guest_recv_mod_foo_bar, &mod_foo_bar_rcls);
-  test = TEST_HOST_ANSWER_DOOR_REFUSE;
-
-  GNUNET_SOCIAL_zone_add_nym (app, guest_ego, "host", host_pub_key,
-                              GNUNET_TIME_relative_to_absolute (GNUNET_TIME_UNIT_MINUTES),
-                              app_recv_zone_add_nym_result, NULL);
-}
-
-
-static void
-id_host_created (void *cls, const char *emsg)
-{
-  if (NULL != emsg)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "Test #%u: Could not create host identity: %s\n",
-                test, emsg);
-#if ! DEBUG_TEST_SOCIAL
-    GNUNET_assert (0);
-#endif
-  }
-
-}
-
-
-static void
-id_guest_created (void *cls, const char *emsg)
-{
-  if (NULL != emsg)
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "Test #%u: Could not create guest identity: %s\n",
-                test, emsg);
-#if ! DEBUG_TEST_SOCIAL
-    GNUNET_assert (0);
-#endif
-  }
-  //if (NULL != guest_ego)
-  //  guest_init ();
-}
-
-
-static void
-host_entered (void *cls, int result,
-              const struct GNUNET_CRYPTO_EddsaPublicKey *home_pub_key,
-              uint64_t max_message_id)
-{
-  place_pub_key = *home_pub_key;
-  GNUNET_CRYPTO_hash (&place_pub_key, sizeof (place_pub_key), &place_pub_hash);
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: Host entered place %s\n",
-              test, GNUNET_h2s (&place_pub_hash));
-  guest_enter ();
-}
-
-
-static void
-host_enter ()
-{
-  host_slicer = GNUNET_PSYC_slicer_create ();
-  GNUNET_PSYC_slicer_method_add (host_slicer, "", NULL,
-                                 host_recv_method, host_recv_modifier,
-                                 host_recv_data, host_recv_eom, NULL);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "Test #%u: Entering place as host.\n", test);
-  test = TEST_HOST_ENTER;
-  hst = GNUNET_SOCIAL_host_enter (app, host_ego,
-                                  GNUNET_PSYC_CHANNEL_PRIVATE,
-                                  host_slicer, host_entered,
-                                  host_answer_door, host_farewell, NULL);
-  hst_plc = GNUNET_SOCIAL_host_get_place (hst);
-
-  GNUNET_SOCIAL_place_msg_proc_set (hst_plc, "_converse",
-                                    GNUNET_SOCIAL_MSG_PROC_RELAY);
-}
-
-
-static void
-start_app_if_ready ()
-{
-  if (NULL == identity_host_ego || NULL == identity_guest_ego)
-  {
-    return;
-  }
-  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-              "starting app...\n");
-  app = GNUNET_SOCIAL_app_connect (cfg,
-                                   app_id,
-                                   app_recv_ego,
-                                   app_recv_host,
-                                   app_recv_guest,
-                                   app_connected,
-                                   NULL);
-}
-
-
-static void
-identity_ego_cb (void *cls, struct GNUNET_IDENTITY_Ego *ego,
-                 void **ctx, const char *name)
-{
-  if (NULL != ego)
-  {
-    if (ego == identity_host_ego)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-                  "Host ego deleted\n");
-    }
-    else if (ego == identity_guest_ego)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-                  "Guest ego deleted\n");
-    }
-    else if (0 == strcmp (name, host_name))
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-                  "Created ego %s\n",
-                  name);
-      identity_host_ego = ego;
-      start_app_if_ready ();
-    }
-    else if (0 == strcmp (name, guest_name))
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
-                  "Created guest ego %s\n",
-                  name);
-      identity_guest_ego = ego;
-      start_app_if_ready ();
-    }
-  }
-}
-
-
-/**
- * Main function of the test, run from scheduler.
- *
- * @param cls NULL
- * @param cfg configuration we use (also to connect to Social service)
- * @param peer handle to access more of the peer (not used)
- */
-static void
-#if DEBUG_TEST_SOCIAL
-run (void *cls, char *const *args, const char *cfgfile,
-     const struct GNUNET_CONFIGURATION_Handle *c)
-#else
-run (void *cls,
-     const struct GNUNET_CONFIGURATION_Handle *c,
-     struct GNUNET_TESTING_Peer *peer)
-#endif
-{
-  cfg = c;
-  res = 1;
-  end_badly_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT,
-                                                &end_badly, NULL);
-  GNUNET_SCHEDULER_add_shutdown (&end_shutdown,
-                                 NULL);
-  GNUNET_CRYPTO_get_peer_identity (cfg, &this_peer);
-
-  id = GNUNET_IDENTITY_connect (cfg, &identity_ego_cb, NULL);
-
-  test = TEST_IDENTITIES_CREATE;
-  GNUNET_IDENTITY_create (id, host_name, &id_host_created, NULL);
-  GNUNET_IDENTITY_create (id, guest_name, &id_guest_created, NULL);
-}
-
-
-int
-main (int argc, char *argv[])
-{
-  res = 1;
-#if DEBUG_TEST_SOCIAL
-  const struct GNUNET_GETOPT_CommandLineOption opts[] = {
-    GNUNET_GETOPT_OPTION_END
-  };
-  if (GNUNET_OK != GNUNET_PROGRAM_run (argc, argv, "test-social",
-                                       "test-social [options]",
-                                       opts, &run, NULL))
-    return 1;
-#else
-  if (0 != GNUNET_TESTING_peer_run ("test-social", "test_social.conf", &run, NULL))
-    return 1;
-#endif
-  return res;
-}
-
-/* end of test_social.c */
diff --git a/src/social/test_social.conf b/src/social/test_social.conf
deleted file mode 100644 (file)
index bc48776..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-@INLINE@ ../../contrib/conf/gnunet/no_forcestart.conf
-
-[PATHS]
-GNUNET_TEST_HOME = $GNUNET_TMP/gnunet-test-social/
-
-[social]
-IMMEDIATE_START = YES
-
-[transport]
-PLUGINS = tcp
-
-[nat]
-DISABLEV6 = YES
-ENABLE_UPNP = NO
-BEHIND_NAT = NO
-ALLOW_NAT = NO
-INTERNAL_ADDRESS = 127.0.0.1
-EXTERNAL_ADDRESS = 127.0.0.1
-
index 36200aa26bb0494ae9ebd567de63908b5f99b92c..e74071b81d430f6e4a84062c7637766563c39776 100644 (file)
@@ -11,7 +11,7 @@
   WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Affero General Public License for more details.
+
   You should have received a copy of the GNU Affero General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
index 381c1bd85a2f4a51892bc3ba00c9fa989704e81b..43ae06f817e10ca7a92294465a68d37fd7be17e4 100644 (file)
@@ -43,3 +43,7 @@ RETURN_LOCAL_ADDRESSES = YES
 
 [peerinfo]
 NO_IO = YES
+
+[rps]
+START_ON_DEMAND = NO
+IMMEDIATE_START = NO
index 727bfb13415f2ac3868c450f3f9cdaeadf06d0a2..39e5f15743d19bc595b694d76ea2af93654d78b9 100644 (file)
@@ -95,4 +95,5 @@ test_testing_sharedservices_LDADD = \
  $(top_builddir)/src/util/libgnunetutil.la
 
 EXTRA_DIST = \
-  test_testing_defaults.conf
+  test_testing_defaults.conf \
+  test_testing_sharedservices.conf
index e6a18bc86a46d62a8832f19c00fe77c8e77addd3..2e7c39113e0ab6efd4b10a8ddde712142a97b831 100644 (file)
@@ -19,3 +19,7 @@ INTERNAL_ADDRESS = 127.0.0.1
 EXTERNAL_ADDRESS = 127.0.0.1
 USE_LOCALADDR = NO
 
+
+[rps]
+START_ON_DEMAND = NO
+IMMEDIATE_START = NO
index 24ce1b35891f5b98f4f18b36bc5d8efe87e4ee54..92eac7e7157cdc180ac4d0eb82db3456f73e87ac 100644 (file)
@@ -24,3 +24,7 @@ INTERNAL_ADDRESS = 127.0.0.1
 EXTERNAL_ADDRESS = 127.0.0.1
 USE_LOCALADDR = NO
 
+
+[rps]
+START_ON_DEMAND = NO
+IMMEDIATE_START = NO
index b34815364b56805d2da2f1bcf2bef086e8736cf3..7dbd97294c5d05e8c2a58a153359c8aceb85ae8a 100644 (file)
@@ -11,7 +11,7 @@
       WITHOUT ANY WARRANTY; without even the implied warranty of
       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
       Affero General Public License for more details.
-     
+
       You should have received a copy of the GNU Affero General Public License
       along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -786,7 +786,7 @@ update_config (void *cls,
   struct UpdateContext *uc = cls;
   unsigned int ival;
   char cval[12];
-  char uval[128];
+  char uval[PATH_MAX];
   char *single_variable;
   char *per_host_variable;
   unsigned long long num_per_host;
@@ -839,7 +839,9 @@ update_config (void *cls,
         GNUNET_CONFIGURATION_get_value_yesno (uc->cfg, "testing",
                                               single_variable))
     {
-      GNUNET_snprintf (uval, sizeof (uval), "%s/%s.sock",
+      GNUNET_snprintf (uval,
+                       sizeof (uval),
+                       "%s/%s.sock",
                        uc->gnunet_home, section);
       value = uval;
     }
index 4278e1266f5983a4f72e8d25b71251466ff0d764..f23724444c42d72c92e87e2cbc32de28ca793de5 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
index 43d3da3752f0c0cd984faf452070458e956e83e0..8d8636bffd173f3c8d537e2a0dc1046fdfe0ceb5 100644 (file)
@@ -24,3 +24,7 @@ USE_HOSTNAME = NO
 
 [nse]
 WORKBITS = 0
+
+[rps]
+START_ON_DEMAND = NO
+IMMEDIATE_START = NO
index 3de46cf6f594d3622d124d2dde443cb70dc3a4c4..9cf16ddb6d691db5a69d8750a2f0bd8a1e6764c3 100644 (file)
@@ -154,6 +154,7 @@ endif
 
 lib_LTLIBRARIES = \
   libgnunettransport.la \
+  libgnunettransportaddress.la \
   libgnunettransportcore.la \
   libgnunettransportcommunicator.la \
   libgnunettransportmonitor.la \
@@ -197,6 +198,15 @@ libgnunettransport_la_LDFLAGS = \
 
 
 
+libgnunettransportaddress_la_SOURCES = \
+  transport_api2_address.c
+libgnunettransportaddress_la_LIBADD = \
+  $(top_builddir)/src/util/libgnunetutil.la \
+  $(GN_LIBINTL)
+libgnunettransportaddress_la_LDFLAGS = \
+  $(GN_LIB_LDFLAGS) $(WINFLAGS) \
+  -version-info 0:0:0
+
 libgnunettransportcore_la_SOURCES = \
   transport_api2_core.c
 libgnunettransportcore_la_LIBADD = \
@@ -271,7 +281,7 @@ gnunet_communicator_udp_LDADD = \
   $(top_builddir)/src/nt/libgnunetnt.la \
   $(top_builddir)/src/statistics/libgnunetstatistics.la \
   $(top_builddir)/src/util/libgnunetutil.la \
-  $(LIBGCRYPT_LIBS) 
+  $(LIBGCRYPT_LIBS)
 
 
 gnunet_helper_transport_wlan_SOURCES = \
@@ -1339,6 +1349,7 @@ test_transport_api_slow_ats_LDADD = \
 
 
 EXTRA_DIST = \
+communicator-unix.conf \
 test_plugin_hostkey \
 test_plugin_hostkey.ecc \
 test_delay \
index 93f510be03a905cc1503e5f59d593f1c2b3b5a85..47bffa2baa42e2d06f23aec10041c6cd6deaffc7 100644 (file)
@@ -24,7 +24,7 @@
  * @author Christian Grothoff
  *
  * TODO:
- * - add and use util/ check for IPv6 availability (#V6)
+ * - add and use util/ check for IPv6 availability (#5553)
  * - support DNS names in BINDTO option (#5528)
  * - support NAT connection reversal method (#5529)
  * - support other TCP-specific NAT traversal methods (#5531)
index c88f7f6f5a2f9aecd60de7a978dfec5c14396f94..550ba7c854cb2061906dc7e7e7b85f93fdc6ea3d 100644 (file)
  * @author Christian Grothoff
  *
  * TODO:
- * - add and use util/ check for IPv6 availability (#V6)
+ * - add and use util/ check for IPv6 availability (#5553)
  * - consider imposing transmission limits in the absence
  *   of ACKs; or: maybe this should be done at TNG service level?
  *   (at least the receiver might want to enforce limits on
- *    KX/DH operations per sender in here)
+ *    KX/DH operations per sender in here) (#5552)
  * - overall, we should look more into flow control support
  *   (either in backchannel, or general solution in TNG service)
- * - handle addresses discovered from broadcasts (#BC)
+ * - handle addresses discovered from broadcasts (#5551)
  *   (think: what was the story again on address validation?
  *    where is the API for that!?!)
  * - support DNS names in BINDTO option (#5528)
@@ -1672,7 +1672,7 @@ sock_read (void *cls)
                                "# broadcasts received",
                                1,
                                GNUNET_NO);
-      // FIXME #BC: we effectively just got a HELLO!
+      // FIXME #5551: we effectively just got a HELLO!
       // trigger verification NOW!
       return;
     }
index d392b3a462c5206546f0bfb6f322121eb3103810..7d7d04375d87373ccdd824d6cb3acb86eb359ef2 100644 (file)
  *   #6 to ensure flow control and RTT are OK, we always do the
  *      'validation', even if address comes from PEERSTORE
  *   #7 
- * - ACK handling / retransmission 
+ * - ACK handling / retransmission
+ * - address verification
  * - track RTT, distance, loss, etc.
  * - DV data structures:
  *   + learning
- *   + forgetting 
+ *   + forgetting
  *   + using them!
  * - routing of messages (using DV data structures!)
  * - handling of DV-boxed messages that need to be forwarded
  * - backchannel message encryption & decryption
- * - 
+ * -
  *
  * Easy:
  * - use ATS bandwidth allocation callback and schedule transmissions!
@@ -72,7 +73,7 @@
  *   (requires planning at receiver, and additional MST-style demultiplex
  *    at receiver!)
  * - could avoid copying body of message into each fragment and keep
- *   fragments as just pointers into the original message and only 
+ *   fragments as just pointers into the original message and only
  *   fully build fragments just before transmission (optimization, should
  *   reduce CPU and memory use)
  *
 /**
  * How many messages can we have pending for a given communicator
  * process before we start to throttle that communicator?
- * 
+ *
  * Used if a communicator might be CPU-bound and cannot handle the traffic.
  */
 #define COMMUNICATOR_TOTAL_QUEUE_LIMIT 512
  * How many messages can we have pending for a given session (queue to
  * a particular peer via a communicator) process before we start to
  * throttle that queue?
- * 
+ *
  * Used if ATS assigns more bandwidth to a particular transmission
  * method than that transmission method can right now handle. (Yes,
  * ATS should eventually notice utilization below allocation and
@@ -195,7 +196,7 @@ struct TransportBackchannelEncapsulationMessage
 
   // FIXME: probably should add random IV here as well,
   // especially if we re-use ephemeral keys!
-  
+
   /**
    * HMAC over the ciphertext of the encrypted, variable-size
    * body that follows.  Verified via DH of @e target and
@@ -224,8 +225,8 @@ struct EphemeralConfirmation
    * only interpret the value as a mononic time and reject
    * "older" values than the last one observed.  Even with this,
    * there is no real guarantee against replay achieved here,
-   * as the latest timestamp is not persisted.  This is 
-   * necessary as we do not want to require synchronized 
+   * as the latest timestamp is not persisted.  This is
+   * necessary as we do not want to require synchronized
    * clocks and may not have a bidirectional communication
    * channel.  Communicators must protect against replay
    * attacks when using backchannel communication!
@@ -373,17 +374,17 @@ struct TransportFragmentBox
   /**
    * Original message ID for of the message that all the1
    * fragments belong to.  Must be the same for all fragments.
-   */ 
+   */
   struct GNUNET_ShortHashCode msg_uuid;
 
   /**
    * Offset of this fragment in the overall message.
-   */ 
+   */
   uint16_t frag_off GNUNET_PACKED;
 
   /**
    * Total size of the message that is being fragmented.
-   */ 
+   */
   uint16_t msg_size GNUNET_PACKED;
 
 };
@@ -412,13 +413,13 @@ struct TransportFragmentAckMessage
   /**
    * Bitfield of up to 64 additional fragments following the
    * @e msg_uuid being acknowledged by this message.
-   */ 
+   */
   uint64_t extra_acks GNUNET_PACKED;
 
   /**
    * Original message ID for of the message that all the
    * fragments belong to.
-   */ 
+   */
   struct GNUNET_ShortHashCode msg_uuid;
 
   /**
@@ -444,7 +445,7 @@ struct TransportFragmentAckMessage
  * to a subset of their neighbours to limit discoverability of the
  * network topology).  To the extend that the @e bidirectional bits
  * are set, peers may learn the inverse paths even if they did not
- * initiate. 
+ * initiate.
  *
  * Unless received on a bidirectional queue and @e num_hops just
  * zero, peers that can forward to the initator should always try to
@@ -469,13 +470,13 @@ struct TransportDVLearn
    * to possibly instantly learn a path in both directions.  Each peer
    * should shift this value by one to the left, and then set the
    * lowest bit IF the current sender can be reached from it (without
-   * DV routing).  
-   */ 
+   * DV routing).
+   */
   uint16_t bidirectional GNUNET_PACKED;
 
   /**
    * Peers receiving this message and delaying forwarding to other
-   * peers for any reason should increment this value such as to 
+   * peers for any reason should increment this value such as to
    * enable the origin to determine the actual network-only delay
    * in addition to the real-time delay (assuming the message loops
    * back to the origin).
@@ -486,11 +487,11 @@ struct TransportDVLearn
    * Identity of the peer that started this learning activity.
    */
   struct GNUNET_PeerIdentity initiator;
-  
+
   /* Followed by @e num_hops `struct GNUNET_PeerIdentity` values,
      excluding the initiator of the DV trace; the last entry is the
      current sender; the current peer must not be included. */
-  
+
 };
 
 
@@ -527,7 +528,7 @@ struct TransportDVBox
    * Number of hops this messages includes. In NBO.
    */
   uint16_t num_hops GNUNET_PACKED;
-  
+
   /**
    * Identity of the peer that originated the message.
    */
@@ -577,7 +578,7 @@ enum ClientType
 /**
  * Entry in our cache of ephemeral keys we currently use.
  * This way, we only sign an ephemeral once per @e target,
- * and then can re-use it over multiple 
+ * and then can re-use it over multiple
  * #GNUNET_MESSAGE_TYPE_TRANSPORT_BACKCHANNEL_ENCAPSULATION
  * messages (as signing is expensive).
  */
@@ -645,39 +646,39 @@ struct DistanceVectorHop
 
   /**
    * Kept in a MDLL, sorted by @e timeout.
-   */ 
+   */
   struct DistanceVectorHop *next_dv;
 
   /**
    * Kept in a MDLL, sorted by @e timeout.
-   */ 
+   */
   struct DistanceVectorHop *prev_dv;
 
   /**
    * Kept in a MDLL.
-   */ 
+   */
   struct DistanceVectorHop *next_neighbour;
 
   /**
    * Kept in a MDLL.
-   */ 
+   */
   struct DistanceVectorHop *prev_neighbour;
 
   /**
    * What would be the next hop to @e target?
-   */ 
+   */
   struct Neighbour *next_hop;
 
   /**
    * Distance vector entry this hop belongs with.
-   */ 
+   */
   struct DistanceVector *dv;
-  
+
   /**
    * Array of @e distance hops to the target, excluding @e next_hop.
    * NULL if the entire path is us to @e next_hop to `target`. Allocated
    * at the end of this struct.
-   */ 
+   */
   const struct GNUNET_PeerIdentity *path;
 
   /**
@@ -685,11 +686,11 @@ struct DistanceVectorHop
    * while learning?
    */
   struct GNUNET_TIME_Absolute timeout;
-  
+
   /**
    * How many hops in total to the `target` (excluding @e next_hop and `target` itself),
    * thus 0 still means a distance of 2 hops (to @e next_hop and then to `target`)?
-   */ 
+   */
   unsigned int distance;
 };
 
@@ -708,12 +709,12 @@ struct DistanceVector
 
   /**
    * Known paths to @e target.
-   */ 
+   */
   struct DistanceVectorHop *dv_head;
 
   /**
    * Known paths to @e target.
-   */ 
+   */
   struct DistanceVectorHop *dv_tail;
 
   /**
@@ -737,19 +738,19 @@ struct QueueEntry
 
   /**
    * Kept as a DLL.
-   */ 
+   */
   struct QueueEntry *next;
 
   /**
    * Kept as a DLL.
-   */ 
+   */
   struct QueueEntry *prev;
 
   /**
    * ATS session this entry is queued with.
    */
   struct GNUNET_ATS_Session *session;
-  
+
   /**
    * Message ID used for this message with the queue used for transmission.
    */
@@ -785,12 +786,12 @@ struct GNUNET_ATS_Session
 
   /**
    * Head of DLL of unacked transmission requests.
-   */ 
+   */
   struct QueueEntry *queue_head;
 
   /**
    * End of DLL of unacked transmission requests.
-   */ 
+   */
   struct QueueEntry *queue_tail;
 
   /**
@@ -816,9 +817,9 @@ struct GNUNET_ATS_Session
   /**
    * Task scheduled for the time when this queue can (likely) transmit the
    * next message. Still needs to check with the @e tracker_out to be sure.
-   */ 
+   */
   struct GNUNET_SCHEDULER_Task *transmit_task;
-  
+
   /**
    * Our current RTT estimate for this ATS session.
    */
@@ -826,9 +827,9 @@ struct GNUNET_ATS_Session
 
   /**
    * Message ID generator for transmissions on this queue.
-   */ 
+   */
   uint64_t mid_gen;
-  
+
   /**
    * Unique identifier of this ATS session with the communicator.
    */
@@ -858,7 +859,7 @@ struct GNUNET_ATS_Session
    * Length of the DLL starting at @e queue_head.
    */
   unsigned int queue_length;
-  
+
   /**
    * Network type offered by this ATS session.
    */
@@ -883,14 +884,14 @@ struct GNUNET_ATS_Session
 
 /**
  * Information we keep for a message that we are reassembling.
- */ 
+ */
 struct ReassemblyContext
 {
 
   /**
    * Original message ID for of the message that all the
    * fragments belong to.
-   */ 
+   */
   struct GNUNET_ShortHashCode msg_uuid;
 
   /**
@@ -900,7 +901,7 @@ struct ReassemblyContext
 
   /**
    * Entry in the reassembly heap (sorted by expiration).
-   */ 
+   */
   struct GNUNET_CONTAINER_HeapNode *hn;
 
   /**
@@ -918,7 +919,7 @@ struct ReassemblyContext
    * task is for the latter case.
    */
   struct GNUNET_SCHEDULER_Task *ack_task;
-  
+
   /**
    * At what time will we give up reassembly of this message?
    */
@@ -941,7 +942,7 @@ struct ReassemblyContext
    * to be acknowledged in the next cummulative ACK.
    */
   uint64_t extra_acks;
-  
+
   /**
    * Unique ID of the lowest fragment UUID to be acknowledged in the
    * next cummulative ACK.  Only valid if @e num_acks > 0.
@@ -953,7 +954,7 @@ struct ReassemblyContext
    * whenever we send a #GNUNET_MESSAGE_TYPE_TRANSPORT_FRAGMENT_ACK.
    */
   unsigned int num_acks;
-  
+
   /**
    * How big is the message we are reassembling in total?
    */
@@ -986,21 +987,21 @@ struct Neighbour
    * Map with `struct ReassemblyContext` structs for fragments under
    * reassembly. May be NULL if we currently have no fragments from
    * this @e pid (lazy initialization).
-   */ 
+   */
   struct GNUNET_CONTAINER_MultiShortmap *reassembly_map;
 
   /**
    * Heap with `struct ReassemblyContext` structs for fragments under
    * reassembly. May be NULL if we currently have no fragments from
    * this @e pid (lazy initialization).
-   */ 
+   */
   struct GNUNET_CONTAINER_Heap *reassembly_heap;
 
   /**
    * Task to free old entries from the @e reassembly_heap and @e reassembly_map.
    */
   struct GNUNET_SCHEDULER_Task *reassembly_timeout_task;
-  
+
   /**
    * Head of list of messages pending for this neighbour.
    */
@@ -1014,13 +1015,13 @@ struct Neighbour
   /**
    * Head of MDLL of DV hops that have this neighbour as next hop. Must be
    * purged if this neighbour goes down.
-   */ 
+   */
   struct DistanceVectorHop *dv_head;
 
   /**
    * Tail of MDLL of DV hops that have this neighbour as next hop. Must be
    * purged if this neighbour goes down.
-   */ 
+   */
   struct DistanceVectorHop *dv_tail;
 
   /**
@@ -1035,7 +1036,7 @@ struct Neighbour
 
   /**
    * Task run to cleanup pending messages that have exceeded their timeout.
-   */  
+   */
   struct GNUNET_SCHEDULER_Task *timeout_task;
 
   /**
@@ -1052,15 +1053,15 @@ struct Neighbour
 
   /**
    * What is the earliest timeout of any message in @e pending_msg_tail?
-   */ 
+   */
   struct GNUNET_TIME_Absolute earliest_timeout;
-  
+
 };
 
 
 /**
  * Types of different pending messages.
- */ 
+ */
 enum PendingMessageType
 {
 
@@ -1084,7 +1085,7 @@ enum PendingMessageType
    */
   PMT_ACKNOWLEDGEMENT = 3
 
-  
+
 };
 
 
@@ -1101,13 +1102,13 @@ enum PendingMessageType
  * either calculate the next fragment (based on @e frag_off) from the
  * current node, or, if all fragments have already been created,
  * descend to the @e head_frag.  Even though the node was already
- * fragmented, the fragment may be too big if the fragment was 
+ * fragmented, the fragment may be too big if the fragment was
  * generated for a queue with a larger MTU. In this case, the node
  * may be fragmented again, thus creating a tree.
  *
  * When acknowledgements for fragments are received, the tree
- * must be pruned, removing those parts that were already 
- * acknowledged.  When fragments are sent over a reliable 
+ * must be pruned, removing those parts that were already
+ * acknowledged.  When fragments are sent over a reliable
  * channel, they can be immediately removed.
  *
  * If a message is ever fragmented, then the original "full" message
@@ -1130,7 +1131,7 @@ struct PendingMessage
    * Kept in a MDLL of messages from this @a client (if @e pmt is #PMT_CORE)
    */
   struct PendingMessage *next_client;
-  
+
   /**
    * Kept in a MDLL of messages from this @a client  (if @e pmt is #PMT_CORE)
    */
@@ -1140,7 +1141,7 @@ struct PendingMessage
    * Kept in a MDLL of messages from this @a cpm (if @e pmt is #PMT_FRAGMENT_BOx)
    */
   struct PendingMessage *next_frag;
-  
+
   /**
    * Kept in a MDLL of messages from this @a cpm  (if @e pmt is #PMT_FRAGMENT_BOX)
    */
@@ -1148,24 +1149,24 @@ struct PendingMessage
 
   /**
    * This message, reliability boxed. Only possibly available if @e pmt is #PMT_CORE.
-   */ 
+   */
   struct PendingMessage *bpm;
-  
+
   /**
    * Target of the request.
    */
   struct Neighbour *target;
-      
+
   /**
    * Client that issued the transmission request, if @e pmt is #PMT_CORE.
    */
   struct TransportClient *client;
-  
+
   /**
    * Head of a MDLL of fragments created for this core message.
    */
   struct PendingMessage *head_frag;
-  
+
   /**
    * Tail of a MDLL of fragments created for this core message.
    */
@@ -1175,7 +1176,7 @@ struct PendingMessage
    * Our parent in the fragmentation tree.
    */
   struct PendingMessage *frag_parent;
-    
+
   /**
    * At what time should we give up on the transmission (and no longer retry)?
    */
@@ -1191,12 +1192,12 @@ struct PendingMessage
    * initialized if @e msg_uuid_set is #GNUNET_YES).
    */
   struct GNUNET_ShortHashCode msg_uuid;
-  
+
   /**
    * Counter incremented per generated fragment.
-   */ 
+   */
   uint32_t frag_uuidgen;
-  
+
   /**
    * Type of the pending message.
    */
@@ -1209,14 +1210,14 @@ struct PendingMessage
 
   /**
    * Offset at which we should generate the next fragment.
-   */ 
+   */
   uint16_t frag_off;
 
   /**
    * #GNUNET_YES once @e msg_uuid was initialized
    */
   int16_t msg_uuid_set;
-  
+
   /* Followed by @e bytes_msg to transmit */
 };
 
@@ -1316,7 +1317,7 @@ struct TransportClient
     struct {
 
       /**
-       * Head of list of messages pending for this client, sorted by 
+       * Head of list of messages pending for this client, sorted by
        * transmission time ("next_attempt" + possibly internal prioritization).
        */
       struct PendingMessage *pending_msg_head;
@@ -1384,7 +1385,7 @@ struct TransportClient
        * is globally unable to keep up.
        */
       unsigned int total_queue_length;
-      
+
       /**
        * Characteristics of this communicator.
        */
@@ -1559,7 +1560,7 @@ free_distance_vector_hop (struct DistanceVectorHop *dvh)
   GNUNET_free (dvh);
   if (NULL == dv->dv_head)
   {
-    GNUNET_assert (GNUNET_YES == 
+    GNUNET_assert (GNUNET_YES ==
                   GNUNET_CONTAINER_multipeermap_remove (dv_routes,
                                                         &dv->target,
                                                         dv));
@@ -1764,7 +1765,7 @@ free_reassembly_cb (void *cls,
   struct ReassemblyContext *rc = value;
   (void) cls;
   (void) key;
-  
+
   free_reassembly_context (rc);
   return GNUNET_OK;
 }
@@ -1779,7 +1780,7 @@ static void
 free_neighbour (struct Neighbour *neighbour)
 {
   struct DistanceVectorHop *dvh;
-  
+
   GNUNET_assert (NULL == neighbour->session_head);
   GNUNET_assert (GNUNET_YES ==
                 GNUNET_CONTAINER_multipeermap_remove (neighbours,
@@ -1881,25 +1882,25 @@ cores_send_disconnect_info (const struct GNUNET_PeerIdentity *pid)
 
 /**
  * We believe we are ready to transmit a message on a queue. Double-checks
- * with the queue's "tracker_out" and then gives the message to the 
+ * with the queue's "tracker_out" and then gives the message to the
  * communicator for transmission (updating the tracker, and re-scheduling
- * itself if applicable).  
+ * itself if applicable).
  *
  * @param cls the `struct GNUNET_ATS_Session` to process transmissions for
- */ 
+ */
 static void
 transmit_on_queue (void *cls);
 
 
 /**
- * Schedule next run of #transmit_on_queue().  Does NOTHING if 
+ * Schedule next run of #transmit_on_queue().  Does NOTHING if
  * we should run immediately or if the message queue is empty.
  * Test for no task being added AND queue not being empty to
  * transmit immediately afterwards!  This function must only
  * be called if the message queue is non-empty!
  *
  * @param queue the queue to do scheduling for
- */ 
+ */
 static void
 schedule_transmit_on_queue (struct GNUNET_ATS_Session *queue)
 {
@@ -1914,7 +1915,7 @@ schedule_transmit_on_queue (struct GNUNET_ATS_Session *queue)
     GNUNET_STATISTICS_update (GST_stats,
                              "# Transmission throttled due to communicator queue limit",
                              1,
-                             GNUNET_NO);    
+                             GNUNET_NO);
     return;
   }
   if (queue->queue_length >= SESSION_QUEUE_LIMIT)
@@ -1922,10 +1923,10 @@ schedule_transmit_on_queue (struct GNUNET_ATS_Session *queue)
     GNUNET_STATISTICS_update (GST_stats,
                              "# Transmission throttled due to session queue limit",
                              1,
-                             GNUNET_NO);    
+                             GNUNET_NO);
     return;
   }
-      
+
   wsize = (0 == queue->mtu)
     ? pm->bytes_msg /* FIXME: add overheads? */
     : queue->mtu;
@@ -2213,7 +2214,7 @@ check_client_send (void *cls,
  * Free fragment tree below @e root, excluding @e root itself.
  *
  * @param root root of the tree to free
- */  
+ */
 static void
 free_fragment_tree (struct PendingMessage *root)
 {
@@ -2328,7 +2329,7 @@ check_queue_timeouts (void *cls)
                                GNUNET_NO);
       client_send_response (pm,
                            GNUNET_NO,
-                           0);      
+                           0);
       continue;
     }
     earliest_timeout = GNUNET_TIME_absolute_min (earliest_timeout,
@@ -2407,7 +2408,7 @@ handle_client_send (void *cls,
     target->earliest_timeout.abs_value_us = pm->timeout.abs_value_us;
     if (NULL != target->timeout_task)
       GNUNET_SCHEDULER_cancel (target->timeout_task);
-    target->timeout_task 
+    target->timeout_task
       = GNUNET_SCHEDULER_add_at (target->earliest_timeout,
                                 &check_queue_timeouts,
                                 target);
@@ -2542,7 +2543,7 @@ expire_ephemerals (void *cls)
  * one, cache it and return it.
  *
  * @param pid peer to look up ephemeral for
- * @param private_key[out] set to the private key 
+ * @param private_key[out] set to the private key
  * @param ephemeral_key[out] set to the key
  * @param ephemeral_sender_sig[out] set to the signature
  * @param ephemeral_validity[out] set to the validity expiration time
@@ -2556,7 +2557,7 @@ lookup_ephemeral (const struct GNUNET_PeerIdentity *pid,
 {
   struct EphemeralCacheEntry *ece;
   struct EphemeralConfirmation ec;
-  
+
   ece = GNUNET_CONTAINER_multipeermap_get (ephemeral_map,
                                           pid);
   if ( (NULL != ece) &&
@@ -2618,7 +2619,7 @@ route_message (const struct GNUNET_PeerIdentity *target,
   GNUNET_free (hdr);
 }
 
-  
+
 /**
  * Communicator requests backchannel transmission.  Process the request.
  *
@@ -2636,7 +2637,7 @@ handle_communicator_backchannel (void *cls,
   struct TransportBackchannelRequestPayload ppay;
   char *mpos;
   uint16_t msize;
-  
+
   /* encapsulate and encrypt message */
   msize = ntohs (cb->header.size) - sizeof (*cb) + sizeof (struct TransportBackchannelRequestPayload);
   enc = GNUNET_malloc (sizeof (*enc) + msize);
@@ -2871,7 +2872,7 @@ struct CommunicatorMessageContext
  *
  * @param cmc context for demultiplexing
  * @param msg message to demultiplex
- */ 
+ */
 static void
 demultiplex_with_cmc (struct CommunicatorMessageContext *cmc,
                      const struct GNUNET_MessageHeader *msg);
@@ -2949,7 +2950,7 @@ handle_raw_message (void *cls,
                    env);
   }
   /* FIXME: consider doing this _only_ once the message
-     was drained from the CORE MQs to extend flow control to CORE! 
+     was drained from the CORE MQs to extend flow control to CORE!
      (basically, increment counter in cmc, decrement on MQ send continuation! */
   finish_cmc_handling (cmc);
 }
@@ -2974,12 +2975,12 @@ check_fragment_box (void *cls,
     GNUNET_break_op (0);
     return GNUNET_SYSERR;
   }
-  if (bsize + ntohs (fb->frag_off) > ntohs (fb->msg_size)) 
+  if (bsize + ntohs (fb->frag_off) > ntohs (fb->msg_size))
   {
     GNUNET_break_op (0);
     return GNUNET_SYSERR;
   }
-  if (ntohs (fb->frag_off) >= ntohs (fb->msg_size)) 
+  if (ntohs (fb->frag_off) >= ntohs (fb->msg_size))
   {
     GNUNET_break_op (0);
     return GNUNET_SYSERR;
@@ -3046,7 +3047,7 @@ handle_fragment_box (void *cls,
   if (NULL == n)
   {
     struct GNUNET_SERVICE_Client *client = cmc->tc->client;
-       
+
     GNUNET_break (0);
     finish_cmc_handling (cmc);
     GNUNET_SERVICE_client_drop (client);
@@ -3096,7 +3097,7 @@ handle_fragment_box (void *cls,
     finish_cmc_handling (cmc);
     return;
   }
-  
+
   /* reassemble */
   fsize = ntohs (fb->header.size) - sizeof (*fb);
   frag_off = ntohs (fb->frag_off);
@@ -3112,7 +3113,7 @@ handle_fragment_box (void *cls,
       rc->msg_missing--;
     }
   }
-                                   
+
   /* Compute cummulative ACK */
   frag_uuid = ntohl (fb->frag_uuid);
   cdelay = GNUNET_TIME_absolute_get_duration (rc->last_frag);
@@ -3151,7 +3152,7 @@ handle_fragment_box (void *cls,
              ( (rc->frag_uuid < frag_uuid + 64) &&
                (rc->extra_acks == (rc->extra_acks & ~ ((1LLU << (64 - (rc->frag_uuid - frag_uuid))) - 1LLU))) ) ) )
   {
-    /* can fit ack by shifting extra acks and starting at 
+    /* can fit ack by shifting extra acks and starting at
        frag_uid, test above esured that the bits we will
        shift 'extra_acks' by are all zero. */
     rc->extra_acks <<= (rc->frag_uuid - frag_uuid);
@@ -3162,8 +3163,8 @@ handle_fragment_box (void *cls,
   if (65 == rc->num_acks) /* FIXME: maybe use smaller threshold? This is very aggressive. */
     ack_now = GNUNET_YES; /* maximum acks received */
   // FIXME: possibly also ACK based on RTT (but for that we'd need to
-  // determine the session used for the ACK first!)  
-  
+  // determine the session used for the ACK first!)
+
   /* is reassembly complete? */
   if (0 != rc->msg_missing)
   {
@@ -3187,7 +3188,7 @@ handle_fragment_box (void *cls,
                        msg);
   /* FIXME: really free here? Might be bad if fragments are still
      en-route and we forget that we finished this reassembly immediately!
-     -> keep around until timeout? 
+     -> keep around until timeout?
      -> shorten timeout based on ACK? */
   free_reassembly_context (rc);
 }
@@ -3204,7 +3205,7 @@ handle_fragment_ack (void *cls,
                     const struct TransportFragmentAckMessage *fa)
 {
   struct CommunicatorMessageContext *cmc = cls;
-  
+
   // FIXME: do work: identify original message; then identify fragments being acked;
   // remove those from the tree to prevent retransmission;
   // compute RTT
@@ -3248,10 +3249,10 @@ handle_reliability_box (void *cls,
 
     /* FIXME: implement cummulative ACKs and ack_countdown,
        then setting the avg_ack_delay field below: */
-    ack = GNUNET_malloc (sizeof (*ack) + 
+    ack = GNUNET_malloc (sizeof (*ack) +
                         sizeof (struct GNUNET_ShortHashCode));
     ack->header.type = htons (GNUNET_MESSAGE_TYPE_TRANSPORT_RELIABILITY_ACK);
-    ack->header.size = htons (sizeof (*ack) + 
+    ack->header.size = htons (sizeof (*ack) +
                              sizeof (struct GNUNET_ShortHashCode));
     memcpy (&ack[1],
            &rb->msg_uuid,
@@ -3276,7 +3277,7 @@ handle_reliability_ack (void *cls,
                        const struct TransportReliabilityAckMessage *ra)
 {
   struct CommunicatorMessageContext *cmc = cls;
-  
+
   // FIXME: do work: find message that was acknowledged, and
   // remove from transmission queue; update RTT.
   finish_cmc_handling (cmc);
@@ -3331,7 +3332,7 @@ handle_backchannel_encapsulation (void *cls,
   // FIXME: check HMAC
   // FIXME: decrypt payload
   // FIXME: forward to specified communicator!
-  // (using GNUNET_MESSAGE_TYPE_TRANSPORT_COMMUNICATOR_BACKCHANNEL_INCOMING)  
+  // (using GNUNET_MESSAGE_TYPE_TRANSPORT_COMMUNICATOR_BACKCHANNEL_INCOMING)
   finish_cmc_handling (cmc);
 }
 
@@ -3388,7 +3389,7 @@ handle_dv_learn (void *cls,
                 const struct TransportDVLearn *dvl)
 {
   struct CommunicatorMessageContext *cmc = cls;
-  
+
   // FIXME: learn path from DV message (if bi-directional flags are set)
   // FIXME: expand DV message, forward on (unless path is getting too long)
   finish_cmc_handling (cmc);
@@ -3419,7 +3420,7 @@ check_dv_box (void *cls,
     return GNUNET_SYSERR;
   }
   isize = ntohs (inbox->size);
-  if (size != sizeof (*dvb) + num_hops * sizeof (struct GNUNET_PeerIdentity) + isize) 
+  if (size != sizeof (*dvb) + num_hops * sizeof (struct GNUNET_PeerIdentity) + isize)
   {
     GNUNET_break_op (0);
     return GNUNET_SYSERR;
@@ -3455,14 +3456,14 @@ handle_dv_box (void *cls,
   {
     // FIXME: if we are not the target, shorten path and forward along.
     // Try from the _end_ of hops array if we know the given
-    // neighbour (shortening the path!). 
+    // neighbour (shortening the path!).
     // NOTE: increment total_hops!
     finish_cmc_handling (cmc);
     return;
   }
   /* We are the target. Unbox and handle message. */
   cmc->im.sender = dvb->origin;
-  cmc->total_hops = ntohs (dvb->total_hops); 
+  cmc->total_hops = ntohs (dvb->total_hops);
   demultiplex_with_cmc (cmc,
                        inbox);
 }
@@ -3516,7 +3517,7 @@ handle_incoming_msg (void *cls,
  *
  * @param cmc context for demultiplexing
  * @param msg message to demultiplex
- */ 
+ */
 static void
 demultiplex_with_cmc (struct CommunicatorMessageContext *cmc,
                      const struct GNUNET_MessageHeader *msg)
@@ -3606,7 +3607,7 @@ tracker_update_in_cb (void *cls)
   struct GNUNET_ATS_Session *queue = cls;
   struct GNUNET_TIME_Relative in_delay;
   unsigned int rsize;
-  
+
   rsize = (0 == queue->mtu) ? IN_PACKET_SIZE_WITHOUT_MTU : queue->mtu;
   in_delay = GNUNET_BANDWIDTH_tracker_get_delay (&queue->tracker_in,
                                                 rsize);
@@ -3632,7 +3633,7 @@ set_pending_message_uuid (struct PendingMessage *pm)
 
 
 /**
- * Fragment the given @a pm to the given @a mtu.  Adds 
+ * Fragment the given @a pm to the given @a mtu.  Adds
  * additional fragments to the neighbour as well. If the
  * @a mtu is too small, generates and error for the @a pm
  * and returns NULL.
@@ -3648,7 +3649,7 @@ fragment_message (struct PendingMessage *pm,
   struct PendingMessage *ff;
 
   set_pending_message_uuid (pm);
-  
+
   /* This invariant is established in #handle_add_queue_message() */
   GNUNET_assert (mtu > sizeof (struct TransportFragmentBox));
 
@@ -3756,7 +3757,7 @@ reliability_box_message (struct PendingMessage *pm)
   if (NULL != pm->bpm)
     return pm->bpm; /* already computed earlier: do nothing */
   GNUNET_assert (NULL == pm->head_frag);
-  if (pm->bytes_msg + sizeof (rbox) > UINT16_MAX) 
+  if (pm->bytes_msg + sizeof (rbox) > UINT16_MAX)
   {
     /* failed hard */
     GNUNET_break (0);
@@ -3766,7 +3767,7 @@ reliability_box_message (struct PendingMessage *pm)
     return NULL;
   }
   bpm = GNUNET_malloc (sizeof (struct PendingMessage) +
-                      sizeof (rbox) + 
+                      sizeof (rbox) +
                       pm->bytes_msg);
   bpm->target = pm->target;
   bpm->frag_parent = pm;
@@ -3796,12 +3797,12 @@ reliability_box_message (struct PendingMessage *pm)
 
 /**
  * We believe we are ready to transmit a message on a queue. Double-checks
- * with the queue's "tracker_out" and then gives the message to the 
+ * with the queue's "tracker_out" and then gives the message to the
  * communicator for transmission (updating the tracker, and re-scheduling
- * itself if applicable).  
+ * itself if applicable).
  *
  * @param cls the `struct GNUNET_ATS_Session` to process transmissions for
- */ 
+ */
 static void
 transmit_on_queue (void *cls)
 {
@@ -3818,7 +3819,7 @@ transmit_on_queue (void *cls)
   if (NULL == (pm = n->pending_msg_head))
   {
     /* no message pending, nothing to do here! */
-    return; 
+    return;
   }
   schedule_transmit_on_queue (queue);
   if (NULL != queue->transmit_task)
@@ -3874,7 +3875,7 @@ transmit_on_queue (void *cls)
   queue->tc->details.communicator.total_queue_length++;
   GNUNET_MQ_send (queue->tc->mq,
                  env);
-  
+
   // FIXME: do something similar to the logic below
   // in defragmentation / reliability ACK handling!
 
@@ -3892,7 +3893,7 @@ transmit_on_queue (void *cls)
            (PMT_FRAGMENT_BOX == s->pmt) )
   {
     struct PendingMessage *pos;
-    
+
     /* Fragment sent over reliabile channel */
     free_fragment_tree (s);
     pos = s->frag_parent;
@@ -3912,9 +3913,9 @@ transmit_on_queue (void *cls)
                                    pos->head_frag,
                                    pos->tail_frag,
                                    s);
-      GNUNET_free (s);      
+      GNUNET_free (s);
     }
-    
+
     /* Was this the last applicable fragmment? */
     if ( (NULL == pm->head_frag) &&
         (pm->frag_off == pm->bytes_msg) )
@@ -3981,7 +3982,7 @@ transmit_on_queue (void *cls)
                                          s);
     }
   }
-  
+
   /* finally, re-schedule queue transmission task itself */
   schedule_transmit_on_queue (queue);
 }
@@ -4023,13 +4024,13 @@ tracker_excess_out_cb (void *cls)
 {
   /* FIXME: trigger excess bandwidth report to core? Right now,
      this is done internally within transport_api2_core already,
-     but we probably want to change the logic and trigger it 
+     but we probably want to change the logic and trigger it
      from here via a message instead! */
   /* TODO: maybe inform ATS at this point? */
   GNUNET_STATISTICS_update (GST_stats,
                            "# Excess outbound bandwidth reported",
                            1,
-                           GNUNET_NO);    
+                           GNUNET_NO);
 }
 
 
@@ -4047,7 +4048,7 @@ tracker_excess_in_cb (void *cls)
   GNUNET_STATISTICS_update (GST_stats,
                            "# Excess inbound bandwidth reported",
                            1,
-                           GNUNET_NO);    
+                           GNUNET_NO);
 }
 
 
@@ -4126,7 +4127,7 @@ handle_add_queue_message (void *cls,
       .nt = queue->nt,
       .cc = tc->details.communicator.cc
     };
-    
+
     queue->sr = GNUNET_ATS_session_add (ats,
                                        &neighbour->pid,
                                        queue->address,
@@ -4224,7 +4225,7 @@ handle_send_message_ack (void *cls,
 {
   struct TransportClient *tc = cls;
   struct QueueEntry *queue;
-  
+
   if (CT_COMMUNICATOR != tc->type)
   {
     GNUNET_break (0);
@@ -4251,12 +4252,12 @@ handle_send_message_ack (void *cls,
       queue = qe;
       break;
     }
-    break;     
+    break;
   }
   if (NULL == queue)
   {
     /* this should never happen */
-    GNUNET_break (0); 
+    GNUNET_break (0);
     GNUNET_SERVICE_client_drop (tc->client);
     return;
   }
@@ -4286,10 +4287,10 @@ handle_send_message_ack (void *cls,
     GNUNET_STATISTICS_update (GST_stats,
                              "# Transmission throttled due to session queue limit",
                              -1,
-                             GNUNET_NO);    
+                             GNUNET_NO);
     schedule_transmit_on_queue (queue->session);
   }
+
   /* TODO: we also should react on the status! */
   // FIXME: this probably requires queue->pm = s assignment!
   // FIXME: react to communicator status about transmission request. We got:
@@ -4452,7 +4453,7 @@ ats_suggestion_cb (void *cls,
     GNUNET_STATISTICS_update (GST_stats,
                              "# ATS suggestions ignored due to missing communicator",
                              1,
-                             GNUNET_NO);    
+                             GNUNET_NO);
     return;
   }
   /* forward suggestion for queue creation to communicator */
@@ -4481,7 +4482,7 @@ ats_suggestion_cb (void *cls,
  *
  * @param cls the `struct TransportClient`
  * @param cqr confirmation message
- */ 
+ */
 static void
 handle_queue_create_ok (void *cls,
                        const struct GNUNET_TRANSPORT_CreateQueueResponse *cqr)
@@ -4501,7 +4502,7 @@ handle_queue_create_ok (void *cls,
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
              "Request #%u for communicator to create queue succeeded\n",
              (unsigned int) ntohs (cqr->request_id));
-  GNUNET_SERVICE_client_continue (tc->client);    
+  GNUNET_SERVICE_client_continue (tc->client);
 }
 
 
@@ -4512,7 +4513,7 @@ handle_queue_create_ok (void *cls,
  *
  * @param cls the `struct TransportClient`
  * @param cqr failure message
- */ 
+ */
 static void
 handle_queue_create_fail (void *cls,
                          const struct GNUNET_TRANSPORT_CreateQueueResponse *cqr)
@@ -4532,7 +4533,61 @@ handle_queue_create_fail (void *cls,
                            "# ATS suggestions failed in queue creation at communicator",
                            1,
                            GNUNET_NO);
-  GNUNET_SERVICE_client_continue (tc->client);    
+  GNUNET_SERVICE_client_continue (tc->client);
+}
+
+
+/**
+ * Check #GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_CONSIDER_VERIFY
+ * messages. We do nothing here, real verification is done later.
+ *
+ * @param cls a `struct TransportClient *`
+ * @param msg message to verify
+ * @return #GNUNET_OK
+ */
+static int
+check_address_consider_verify (void *cls,
+                               const struct GNUNET_TRANSPORT_AddressToVerify *hdr)
+{
+  (void) cls;
+  (void) hdr;
+  return GNUNET_OK;
+}
+
+
+/**
+ * Given another peers address, consider checking it for validity
+ * and then adding it to the Peerstore.
+ *
+ * @param cls a `struct TransportClient`
+ * @param hdr message containing the raw address data and
+ *        signature in the body, see #GNUNET_HELLO_extract_address()
+ */
+static void
+handle_address_consider_verify (void *cls,
+                                const struct GNUNET_TRANSPORT_AddressToVerify *hdr)
+{
+  char *address;
+  enum GNUNET_NetworkType nt;
+  struct GNUNET_TIME_Absolute expiration;
+
+  (void) cls;
+  // FIXME: pre-check: do we know this address already?
+  // FIXME: pre-check: rate-limit signature verification / validation!
+  address = GNUNET_HELLO_extract_address (&hdr[1],
+                                          ntohs (hdr->header.size) - sizeof (*hdr),
+                                          &hdr->peer,
+                                          &nt,
+                                          &expiration);
+  if (NULL == address)
+  {
+    GNUNET_break_op (0);
+    return;
+  }
+  if (0 == GNUNET_TIME_absolute_get_remaining (expiration).rel_value_us)
+    return; /* expired */
+  // FIXME: do begin actual verification here!
+  GNUNET_free (address);
 }
 
 
@@ -4775,6 +4830,10 @@ GNUNET_SERVICE_MAIN
                        GNUNET_MESSAGE_TYPE_TRANSPORT_QUEUE_SETUP,
                        struct GNUNET_TRANSPORT_AddQueueMessage,
                        NULL),
+ GNUNET_MQ_hd_var_size (address_consider_verify,
+                       GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_CONSIDER_VERIFY,
+                       struct GNUNET_TRANSPORT_AddressToVerify,
+                       NULL),
  GNUNET_MQ_hd_fixed_size (del_queue_message,
                           GNUNET_MESSAGE_TYPE_TRANSPORT_QUEUE_TEARDOWN,
                           struct GNUNET_TRANSPORT_DelQueueMessage,
index 8d22d0c7af9606da824049841f76e561a6e5d0b8..6abe8d2d2db83d4b605bf9495ac2ef9644a0bf3c 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -1115,7 +1115,8 @@ GST_validation_handle_ping (const struct GNUNET_PeerIdentity *sender,
   }
   ping = (const struct TransportPingMessage *) hdr;
   if (0 !=
-      memcmp (&ping->target, &GST_my_identity,
+      memcmp (&ping->target,
+              &GST_my_identity,
               sizeof (struct GNUNET_PeerIdentity)))
   {
     GNUNET_STATISTICS_update (GST_stats,
index d93c4423c1e94086174067e33aa4eb3fc5e9f417..a0dd8061701545cfebcf854af1dc8b5e02dee01d 100644 (file)
@@ -11,7 +11,7 @@
   WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Affero General Public License for more details.
+
   You should have received a copy of the GNU Affero General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -1471,6 +1471,12 @@ tcp_nat_port_map_callback (void *cls,
     args = sizeof (t4);
     break;
   case AF_INET6:
+    if (IN6_IS_ADDR_LINKLOCAL (&((struct sockaddr_in6 *) addr)->sin6_addr))
+    {
+      /* skip link local, we don't allow them in
+         #tcp_plugin_check_address() */
+      return;
+    }
     GNUNET_assert(addrlen == sizeof(struct sockaddr_in6));
     memset (&t6, 0, sizeof(t6));
     GNUNET_memcpy (&t6.ipv6_addr,
index 931ba4810d502f2d49e54d47eafd3965e3a414ed..c0e02c3d9ad7075078a53a313ca4e3800db6eeae 100644 (file)
@@ -1081,6 +1081,32 @@ struct GNUNET_TRANSPORT_MonitorData
 
 };
 
+
+/**
+ * Request to verify address.
+ */
+struct GNUNET_TRANSPORT_AddressToVerify
+{
+
+  /**
+   * Type will be #GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_CONSIDER_VERIFY.
+   */
+  struct GNUNET_MessageHeader header;
+
+  /**
+   * Reserved. 0.
+   */
+  uint32_t reserved;
+
+  /**
+   * Peer the address is from.
+   */
+  struct GNUNET_PeerIdentity peer;
+
+  /* followed by variable-size raw address */
+};
+
+
 #endif
 
 GNUNET_NETWORK_STRUCT_END
diff --git a/src/transport/transport_api2_address.c b/src/transport/transport_api2_address.c
new file mode 100644 (file)
index 0000000..1ff599e
--- /dev/null
@@ -0,0 +1,249 @@
+/*
+     This file is part of GNUnet.
+     Copyright (C) 2009-2013, 2016, 2018, 2019 GNUnet e.V.
+
+     GNUnet is free software: you can redistribute it and/or modify it
+     under the terms of the GNU Affero General Public License as published
+     by the Free Software Foundation, either version 3 of the License,
+     or (at your option) any later version.
+
+     GNUnet is distributed in the hope that it will be useful, but
+     WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+     Affero General Public License for more details.
+
+     You should have received a copy of the GNU Affero General Public License
+     along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+     SPDX-License-Identifier: AGPL3.0-or-later
+*/
+
+/**
+ * @file transport/transport_api2_address.c
+ * @brief library to inform the transport service about addresses to be validated
+ * @author Christian Grothoff
+ */
+#include "platform.h"
+#include "gnunet_util_lib.h"
+#include "gnunet_constants.h"
+#include "gnunet_protocols.h"
+#include "gnunet_transport_address_service.h"
+#include "gnunet_ats_transport_service.h"
+#include "transport.h"
+
+#define LOG(kind,...) GNUNET_log_from (kind, "transport-api-address",__VA_ARGS__)
+
+
+/**
+ * Handle for the transport service (includes all of the
+ * state for the transport service).
+ */
+struct GNUNET_TRANSPORT_AddressHandle
+{
+
+  /**
+   * My client connection to the transport service.
+   */
+  struct GNUNET_MQ_Handle *mq;
+
+  /**
+   * My configuration.
+   */
+  const struct GNUNET_CONFIGURATION_Handle *cfg;
+
+  /**
+   * ID of the task trying to reconnect to the service.
+   */
+  struct GNUNET_SCHEDULER_Task *reconnect_task;
+
+  /**
+   * Delay until we try to reconnect.
+   */
+  struct GNUNET_TIME_Relative reconnect_delay;
+
+};
+
+
+/**
+ * Function that will schedule the job that will try
+ * to connect us again to the client.
+ *
+ * @param h transport service to reconnect
+ */
+static void
+disconnect_and_schedule_reconnect (struct GNUNET_TRANSPORT_AddressHandle *h);
+
+
+/**
+ * Generic error handler, called with the appropriate
+ * error code and the same closure specified at the creation of
+ * the message queue.
+ * Not every message queue implementation supports an error handler.
+ *
+ * @param cls closure with the `struct GNUNET_TRANSPORT_AddressHandle *`
+ * @param error error code
+ */
+static void
+mq_error_handler (void *cls,
+                  enum GNUNET_MQ_Error error)
+{
+  struct GNUNET_TRANSPORT_AddressHandle *h = cls;
+
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "Error receiving from transport service, disconnecting temporarily.\n");
+  disconnect_and_schedule_reconnect (h);
+}
+
+
+/**
+ * Try again to connect to transport service.
+ *
+ * @param cls the handle to the transport service
+ */
+static void
+reconnect (void *cls)
+{
+  struct GNUNET_TRANSPORT_AddressHandle *h = cls;
+  struct GNUNET_MQ_MessageHandler handlers[] = {
+    GNUNET_MQ_handler_end ()
+  };
+
+  h->reconnect_task = NULL;
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "Connecting to transport service.\n");
+  GNUNET_assert (NULL == h->mq);
+  h->mq = GNUNET_CLIENT_connect (h->cfg,
+                                 "transport",
+                                 handlers,
+                                 &mq_error_handler,
+                                 h);
+}
+
+
+/**
+ * Disconnect from the transport service.
+ *
+ * @param h transport service to disconnect
+ */
+static void
+disconnect (struct GNUNET_TRANSPORT_AddressHandle *h)
+{
+  if (NULL != h->mq)
+  {
+    GNUNET_MQ_destroy (h->mq);
+    h->mq = NULL;
+  }
+}
+
+
+/**
+ * Function that will schedule the job that will try
+ * to connect us again to the client.
+ *
+ * @param h transport service to reconnect
+ */
+static void
+disconnect_and_schedule_reconnect (struct GNUNET_TRANSPORT_AddressHandle *h)
+{
+  GNUNET_assert (NULL == h->reconnect_task);
+  disconnect (h);
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "Scheduling task to reconnect to transport service in %s.\n",
+       GNUNET_STRINGS_relative_time_to_string (h->reconnect_delay,
+                                               GNUNET_YES));
+  h->reconnect_task =
+      GNUNET_SCHEDULER_add_delayed (h->reconnect_delay,
+                                    &reconnect,
+                                    h);
+  h->reconnect_delay = GNUNET_TIME_STD_BACKOFF (h->reconnect_delay);
+}
+
+
+/**
+ * Connect to the transport service.
+ *
+ * @param cfg configuration to use
+ * @return NULL on error
+ */
+struct GNUNET_TRANSPORT_AddressHandle *
+GNUNET_TRANSPORT_address_connect (const struct GNUNET_CONFIGURATION_Handle *cfg)
+{
+  struct GNUNET_TRANSPORT_AddressHandle *h;
+
+  h = GNUNET_new (struct GNUNET_TRANSPORT_AddressHandle);
+  h->cfg = cfg;
+  h->reconnect_delay = GNUNET_TIME_UNIT_ZERO;
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "Connecting to transport service\n");
+  reconnect (h);
+  if (NULL == h->mq)
+  {
+    GNUNET_free (h);
+    return NULL;
+  }
+  return h;
+}
+
+
+/**
+ * Disconnect from the transport service.
+ *
+ * @param handle handle to the service as returned from #GNUNET_TRANSPORT_address_connect()
+ */
+void
+GNUNET_TRANSPORT_address_disconnect (struct GNUNET_TRANSPORT_AddressHandle *handle)
+{
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "Transport disconnect called!\n");
+  /* this disconnects all neighbours... */
+  disconnect (handle);
+  /* and now we stop trying to connect again... */
+  if (NULL != handle->reconnect_task)
+  {
+    GNUNET_SCHEDULER_cancel (handle->reconnect_task);
+    handle->reconnect_task = NULL;
+  }
+  GNUNET_free (handle);
+}
+
+
+/**
+ * The client has learned about a possible address for peer @a pid
+ * (i.e. via broadcast, multicast, DHT, ...).  The transport service
+ * should consider validating it. Note that the plugin is NOT expected
+ * to have verified the signature, the transport service must decide
+ * whether to check the signature.
+ *
+ * While the notification is sent to @a ch asynchronously, this API
+ * does not return a handle as the delivery of addresses is simply
+ * unreliable, and if @a ch is down, the data provided will simply be
+ * lost.
+ *
+ * @param ch communicator handle
+ * @param pid peer the address is for
+ * @param raw raw address data
+ * @param raw_size number of bytes in @a raw
+ */
+void
+GNUNET_TRANSPORT_address_try (struct GNUNET_TRANSPORT_AddressHandle *ch,
+                              const struct GNUNET_PeerIdentity *pid,
+                              const void *raw,
+                              const size_t raw_size)
+{
+  struct GNUNET_MQ_Envelope *env;
+  struct GNUNET_TRANSPORT_AddressToVerify *hdr;
+
+  env = GNUNET_MQ_msg_extra (hdr,
+                             raw_size,
+                             GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_CONSIDER_VERIFY);
+  hdr->peer = *pid;
+  memcpy (&hdr[1],
+          raw,
+          raw_size);
+  GNUNET_MQ_send (ch->mq,
+                  env);
+}
+
+
+
+/* end of transport_api2_address.c */
index b144ef6b692721b2df62bceafed6235f752fa077..75287b5e79b36d11c362ac0a06f79d9a4b49f94e 100644 (file)
@@ -558,7 +558,7 @@ handle_connect (void *cls,
                       &cim->id);
   if (NULL != n)
   {
-    GNUNET_break (0);
+    GNUNET_break (0); /* FIXME: this assertion seems to fail sometimes!? */
     disconnect_and_schedule_reconnect (h);
     return;
   }
index 7b190ca760d731e6bcb72032aa54ca4548eeaf0c..dfa6c7947da8ec400099839dc5b798ddaa0eb622 100644 (file)
@@ -73,3 +73,4 @@ test_hexcoder
 test_regex
 test_tun
 gnunet-timeout
+python27_location
index 625ff87a21a6e5dbc1c0c047af1e8e4ccf6aed5f..0ba06f4bb6f895b3485720dfe671c2cf2a6d6e11 100644 (file)
@@ -41,7 +41,7 @@ if USE_COVERAGE
 endif
 
 if ENABLE_BENCHMARK
-  BENCHMARK = benchmark.c
+  BENCHMARK = benchmark.c benchmark.h
   PTHREAD = -lpthread
 endif
 
@@ -225,8 +225,13 @@ gnunet_timeout_SOURCES = \
  gnunet-timeout-w32.c
 endif
 
+# This is horrible, but compared to the alternatives and the solution
+# which preceded this it is a good compromise and good enough for one
+# file. Everyone else is invited to patch it locally.
 
-do_subst = $(SED) -e 's,[@]PYTHON[@],$(PYTHON),g'
+xENV=$(shell which env)
+
+do_subst = $(SED) -e 's,[@]ENV[@],${xENV},g'
 
 gnunet-qr: gnunet-qr.py.in Makefile
        $(do_subst) < $(top_srcdir)/src/util/gnunet-qr.py.in > gnunet-qr
index cf5c2a3345adae5a167d59393c9d3d405d76573d..7605ea1518e2fe85c4e0012191635fbdd3a67dcf 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -417,7 +417,7 @@ GNUNET_CONTAINER_multihashmap_iterate (struct GNUNET_CONTAINER_MultiHashMap *map
       }
     }
   }
-  GNUNET_assert (--map->next_cache_off < NEXT_CACHE_SIZE);    
+  GNUNET_assert (--map->next_cache_off < NEXT_CACHE_SIZE);
   return count;
 }
 
@@ -764,18 +764,19 @@ grow (struct GNUNET_CONTAINER_MultiHashMap *map)
   unsigned int new_len;
   unsigned int idx;
 
-  map->modification_counter++;
-
   old_map = map->map;
   old_len = map->map_length;
+  GNUNET_assert (0 != old_len);
   new_len = old_len * 2;
-  /* if we would exceed heap size limit for the _first_ time,
-     try staying just below the limit */
-  if ( (new_len * sizeof (union MapEntry) > GNUNET_MAX_MALLOC_CHECKED) &&
-       ((old_len+1) * sizeof (union MapEntry) < GNUNET_MAX_MALLOC_CHECKED) )
-    new_len = GNUNET_MAX_MALLOC_CHECKED / sizeof (union MapEntry);
-  new_map = GNUNET_new_array (new_len,
-                              union MapEntry);
+  if (0 == new_len) /* 2^31 * 2 == 0 */
+    new_len = old_len; /* never use 0 */
+  if (new_len == old_len)
+    return; /* nothing changed */
+  new_map = GNUNET_malloc_large (new_len *
+                                 sizeof (union MapEntry));
+  if (NULL == new_map)
+    return; /* grow not possible */
+  map->modification_counter++;
   map->map_length = new_len;
   map->map = new_map;
   for (unsigned int i = 0; i < old_len; i++)
index 4b19c7c1026220a2f78b1cd95b2f8a29311a34a0..a614c04aef5442e3bd534ad68e5d2be124b75d7d 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -146,8 +146,13 @@ GNUNET_CONTAINER_multihashmap32_create (unsigned int len)
 
   GNUNET_assert (len > 0);
   ret = GNUNET_new (struct GNUNET_CONTAINER_MultiHashMap32);
-  ret->map = GNUNET_new_array (len,
-                              struct MapEntry *);
+  ret->map = GNUNET_malloc_large (len *
+                                  sizeof (struct MapEntry *));
+  if (NULL == ret->map)
+  {
+    GNUNET_free (ret);
+    return NULL;
+  }
   ret->map_length = len;
   return ret;
 }
@@ -268,7 +273,7 @@ GNUNET_CONTAINER_multihashmap32_iterate (struct GNUNET_CONTAINER_MultiHashMap32
                             e->key,
                             e->value))
        {
-         GNUNET_assert (--map->next_cache_off < NEXT_CACHE_SIZE);      
+         GNUNET_assert (--map->next_cache_off < NEXT_CACHE_SIZE);
           return GNUNET_SYSERR;
        }
       }
@@ -463,13 +468,18 @@ grow (struct GNUNET_CONTAINER_MultiHashMap32 *map)
   unsigned int new_len;
   unsigned int idx;
 
-  map->modification_counter++;
-
   old_map = map->map;
   old_len = map->map_length;
   new_len = old_len * 2;
-  new_map = GNUNET_new_array (new_len,
-                             struct MapEntry *);
+  if (0 == new_len) /* 2^31 * 2 == 0 */
+    new_len = old_len; /* never use 0 */
+  if (new_len == old_len)
+    return; /* nothing changed */
+  new_map = GNUNET_malloc_large (new_len *
+                                 sizeof (struct MapEntry *));
+  if (NULL == new_map)
+    return; /* grow not possible */
+  map->modification_counter++;
   map->map_length = new_len;
   map->map = new_map;
   for (unsigned int i = 0; i < old_len; i++)
index 8fa23df723f9ddd8f6a4f8aeb0d4d0674c684cde..613efc0a9d4f67eb066b1ab372c9c2fd7c546556 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -200,8 +200,13 @@ GNUNET_CONTAINER_multipeermap_create (unsigned int len,
 
   GNUNET_assert (len > 0);
   map = GNUNET_new (struct GNUNET_CONTAINER_MultiPeerMap);
-  map->map = GNUNET_new_array (len,
-                              union MapEntry);
+  map->map = GNUNET_malloc_large (len *
+                                  sizeof (union MapEntry));
+  if (NULL == map->map)
+  {
+    GNUNET_free (map);
+    return NULL;
+  }
   map->map_length = len;
   map->use_small_entries = do_not_copy_keys;
   return map;
@@ -493,7 +498,7 @@ GNUNET_CONTAINER_multipeermap_remove (struct GNUNET_CONTAINER_MultiPeerMap *map,
        if (NULL == p)
          map->map[i].bme = bme->next;
        else
-         p->next = bme->next;  
+         p->next = bme->next;
        update_next_cache_bme (map,
                               bme);
        GNUNET_free (bme);
@@ -685,18 +690,23 @@ grow (struct GNUNET_CONTAINER_MultiPeerMap *map)
   unsigned int old_len;
   unsigned int new_len;
   unsigned int idx;
-  unsigned int i;
-
-  map->modification_counter++;
 
   old_map = map->map;
   old_len = map->map_length;
+  GNUNET_assert (0 != old_len);
   new_len = old_len * 2;
-  new_map = GNUNET_new_array (new_len,
-                             union MapEntry);
+  if (0 == new_len) /* 2^31 * 2 == 0 */
+    new_len = old_len; /* never use 0 */
+  if (new_len == old_len)
+    return; /* nothing changed */
+  new_map = GNUNET_malloc_large (new_len *
+                                 sizeof (union MapEntry));
+  if (NULL == new_map)
+    return; /* grow not possible */
+  map->modification_counter++;
   map->map_length = new_len;
   map->map = new_map;
-  for (i = 0; i < old_len; i++)
+  for (unsigned int i = 0; i < old_len; i++)
   {
     if (map->use_small_entries)
     {
@@ -829,7 +839,7 @@ GNUNET_CONTAINER_multipeermap_get_multiple (struct GNUNET_CONTAINER_MultiPeerMap
   int count;
   union MapEntry me;
   union MapEntry *ce;
-  
+
   ce = &map->next_cache[map->next_cache_off];
   GNUNET_assert (++map->next_cache_off < NEXT_CACHE_SIZE);
   count = 0;
@@ -903,7 +913,7 @@ GNUNET_CONTAINER_multipeermap_get_random (const struct GNUNET_CONTAINER_MultiPee
 {
   unsigned int off;
   union MapEntry me;
-  
+
   if (0 == map->size)
     return 0;
   if (NULL == it)
index a48581b6a2b8d6dfcdc6f5e8c5924bd27ef23bfb..966e23d35d7a948efed1e35f999fcd75dd91f78f 100644 (file)
@@ -11,7 +11,7 @@
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Affero General Public License for more details.
-    
+
      You should have received a copy of the GNU Affero General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -183,8 +183,8 @@ struct GNUNET_CONTAINER_MultiShortmapIterator
  * Create a multi hash map.
  *
  * @param len initial size (map will grow as needed)
- * @param do_not_copy_keys GNUNET_NO is always safe and should be used by default;
- *                         GNUNET_YES means that on 'put', the 'key' does not have
+ * @param do_not_copy_keys #GNUNET_NO is always safe and should be used by default;
+ *                         #GNUNET_YES means that on 'put', the 'key' does not have
  *                         to be copied as the destination of the pointer is
  *                         guaranteed to be life as long as the value is stored in
  *                         the hashmap.  This can significantly reduce memory
@@ -202,8 +202,13 @@ GNUNET_CONTAINER_multishortmap_create (unsigned int len,
 
   GNUNET_assert (len > 0);
   map = GNUNET_new (struct GNUNET_CONTAINER_MultiShortmap);
-  map->map = GNUNET_new_array (len,
-                              union MapEntry);
+  map->map = GNUNET_malloc_large (len *
+                                  sizeof (union MapEntry));
+  if (NULL == map->map)
+  {
+    GNUNET_free (map);
+    return NULL;
+  }
   map->map_length = len;
   map->use_small_entries = do_not_copy_keys;
   return map;
@@ -355,7 +360,7 @@ GNUNET_CONTAINER_multishortmap_iterate (struct GNUNET_CONTAINER_MultiShortmap *m
     if (map->use_small_entries)
     {
       struct SmallMapEntry *sme;
-    
+
       ce->sme = me.sme;
       while (NULL != (sme = ce->sme))
       {
@@ -366,7 +371,7 @@ GNUNET_CONTAINER_multishortmap_iterate (struct GNUNET_CONTAINER_MultiShortmap *m
                               sme->value)) )
        {
          GNUNET_assert (--map->next_cache_off < NEXT_CACHE_SIZE);
-         return GNUNET_SYSERR; 
+         return GNUNET_SYSERR;
        }
        count++;
       }
@@ -458,7 +463,7 @@ GNUNET_CONTAINER_multishortmap_remove (struct GNUNET_CONTAINER_MultiShortmap *ma
   if (map->use_small_entries)
   {
     struct SmallMapEntry *p = NULL;
-    
+
     for (struct SmallMapEntry *sme = me.sme; NULL != sme; sme = sme->next)
     {
       if ((0 == memcmp (key,
@@ -482,7 +487,7 @@ GNUNET_CONTAINER_multishortmap_remove (struct GNUNET_CONTAINER_MultiShortmap *ma
   else
   {
     struct BigMapEntry *p = NULL;
-    
+
     for (struct BigMapEntry *bme = me.bme; NULL != bme; bme = bme->next)
     {
       if ((0 == memcmp (key,
@@ -686,13 +691,18 @@ grow (struct GNUNET_CONTAINER_MultiShortmap *map)
   unsigned int new_len;
   unsigned int idx;
 
-  map->modification_counter++;
-
   old_map = map->map;
   old_len = map->map_length;
   new_len = old_len * 2;
-  new_map = GNUNET_new_array (new_len,
-                             union MapEntry);
+  if (0 == new_len) /* 2^31 * 2 == 0 */
+    new_len = old_len; /* never use 0 */
+  if (new_len == old_len)
+    return; /* nothing changed */
+  new_map = GNUNET_malloc_large (new_len *
+                                 sizeof (union MapEntry));
+  if (NULL == new_map)
+    return; /* grow not possible */
+  map->modification_counter++;
   map->map_length = new_len;
   map->map = new_map;
   for (unsigned int i = 0; i < old_len; i++)
index 2baa76ef2ebcfdaaee45e2782fe29263a2187e77..7546ca1e970999deaf9fcba5505f70f63a86376a 100644 (file)
  * @author Christian Grothoff
  */
 #include "platform.h"
+#if HAVE_LIBIDN2
 #if HAVE_IDN2_H
 #include <idn2.h>
 #elif HAVE_IDN2_IDN2_H
 #include <idn2/idn2.h>
-#elif HAVE_IDNA_H
+#endif
+#elif HAVE_LIBIDN
+#if HAVE_IDNA_H
 #include <idna.h>
 #elif HAVE_IDN_IDNA_H
 #include <idn/idna.h>
 #endif
+#endif
 #if WINDOWS
 #include <idn-free.h>
 #endif
@@ -1084,12 +1088,19 @@ GNUNET_DNSPARSER_builder_add_cert (char *dst,
 {
   struct GNUNET_TUN_DnsCertRecord dcert;
 
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wtautological-constant-out-of-range-compare"
+#endif
   if ( (cert->cert_type > UINT16_MAX) ||
        (cert->algorithm > UINT8_MAX) )
   {
     GNUNET_break (0);
     return GNUNET_SYSERR;
   }
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
   if (*off + sizeof (struct GNUNET_TUN_DnsCertRecord) + cert->certificate_size > dst_len)
     return GNUNET_NO;
   dcert.cert_type = htons ((uint16_t) cert->cert_type);
index a5918fdf85f4365765803f5ed55fd219ca79e4f7..ceed8bd7751d959fabb2a1bb332901bde4e4efdb 100755 (executable)
@@ -1,4 +1,6 @@
-#!@PYTHON@
+#!@ENV@ python2.7
+from __future__ import print_function
+from builtins import str
 import sys
 import getopt
 import subprocess
@@ -100,7 +102,7 @@ if __name__ == '__main__':
                         cmd += " " + str(a)
                 if (verbose):
                         print('Running `' + cmd +'`')
-                res=subprocess.call(args)
+                res = subprocess.call(args)
                 if (0 != res):
                         print('Failed to add URI ' + str(symbol.data))
                 else:
index d85885d64f77274dcd9b81855393c5fb6d66443f..0df213588d2811bbd6887b27f12ad2a81236237e 100644 (file)
@@ -773,6 +773,41 @@ pack (const char *hostname,
   return GNUNET_OK;
 }
 
+static void
+cache_answers(const char* name,
+              struct GNUNET_DNSPARSER_Record *records,
+              unsigned int num_records)
+{
+  struct ResolveCache *rc;
+  struct GNUNET_DNSPARSER_Record *record;
+  struct RecordListEntry *rle;
+
+  for (unsigned int i = 0; i != num_records; i++)
+  {
+    record = &records[i];
+
+    for (rc = cache_head; NULL != rc; rc = rc->next)
+      if (0 == strcasecmp (rc->hostname,
+                           name))
+        break;
+    if (NULL == rc)
+    {
+      rc = GNUNET_new (struct ResolveCache);
+      rc->hostname = GNUNET_strdup (name);
+      GNUNET_CONTAINER_DLL_insert (cache_head,
+                                   cache_tail,
+                                   rc);
+      cache_size++;
+    }
+    /* TODO: ought to check first if we have this exact record
+       already in the cache! */
+    rle = GNUNET_new (struct RecordListEntry);
+    rle->record = GNUNET_DNSPARSER_duplicate_record (record);
+    GNUNET_CONTAINER_DLL_insert (rc->records_head,
+                                 rc->records_tail,
+                                 rle);
+  }
+}
 
 /**
  * We got a result from DNS. Add it to the cache and
@@ -784,39 +819,47 @@ pack (const char *hostname,
  */
 static void
 handle_resolve_result (void *cls,
-                      const struct GNUNET_TUN_DnsHeader *dns,
+                       const struct GNUNET_TUN_DnsHeader *dns,
                        size_t dns_len)
 {
   struct ActiveLookup *al = cls;
   struct GNUNET_DNSPARSER_Packet *parsed;
-  struct ResolveCache *rc;
 
   parsed = GNUNET_DNSPARSER_parse ((const char *)dns,
-                                  dns_len);
+                                   dns_len);
   if (NULL == parsed)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-               "Failed to parse DNS reply (hostname %s, request ID %u)\n",
+                "Failed to parse DNS reply (hostname %s, request ID %u)\n",
                 al->hostname,
-               al->dns_id);
+                al->dns_id);
     return;
   }
   if (al->dns_id != ntohs (parsed->id))
   {
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-               "Request ID in DNS reply does not match\n");
+                "Request ID in DNS reply does not match\n");
     GNUNET_DNSPARSER_free_packet (parsed);
     return;
   }
   if (0 == parsed->num_answers + parsed->num_authority_records + parsed->num_additional_records)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-               "DNS reply (hostname %s, request ID %u) contains no answers\n",
+                "DNS reply (hostname %s, request ID %u) contains no answers\n",
                 al->hostname,
-               (unsigned int) al->client_request_id);
+                (unsigned int) al->client_request_id);
+    /* resume by trying again from cache */
+    if (GNUNET_NO ==
+        try_cache (al->hostname,
+                   al->record_type,
+                   al->client_request_id,
+                   al->client))
+      /* cache failed, tell client we could not get an answer */
+    {
+      send_end_msg (al->client_request_id,
+                    al->client);
+    }
     GNUNET_DNSPARSER_free_packet (parsed);
-    send_end_msg (al->client_request_id,
-                  al->client);
     free_active_lookup (al);
     return;
   }
@@ -829,84 +872,13 @@ handle_resolve_result (void *cls,
               al->hostname,
               (unsigned int) al->client_request_id);
   /* add to cache */
-  for (unsigned int i = 0; i != parsed->num_answers; i++)
-  {
-    struct GNUNET_DNSPARSER_Record *record = &parsed->answers[i];
-    struct RecordListEntry *rle;
-
-    for (rc = cache_head; NULL != rc; rc = rc->next)
-      if (0 == strcasecmp (rc->hostname,
-                           record->name))
-        break;
-    if (NULL == rc)
-    {
-      rc = GNUNET_new (struct ResolveCache);
-      rc->hostname = GNUNET_strdup (record->name);
-      GNUNET_CONTAINER_DLL_insert (cache_head,
-                                   cache_tail,
-                                   rc);
-      cache_size++;
-    }
-    /* TODO: ought to check first if we have this exact record
-       already in the cache! */
-    rle = GNUNET_new (struct RecordListEntry);
-    rle->record = GNUNET_DNSPARSER_duplicate_record (record);
-    GNUNET_CONTAINER_DLL_insert (rc->records_head,
-                                 rc->records_tail,
-                                 rle);
-  }
-  for (unsigned int i = 0; i != parsed->num_authority_records; i++)
-  {
-    struct GNUNET_DNSPARSER_Record *record = &parsed->authority_records[i];
-    struct RecordListEntry *rle;
-
-    for (rc = cache_head; NULL != rc; rc = rc->next)
-      if (0 == strcasecmp (rc->hostname,
-                           record->name))
-        break;
-    if (NULL == rc)
-    {
-      rc = GNUNET_new (struct ResolveCache);
-      rc->hostname = GNUNET_strdup (record->name);
-      GNUNET_CONTAINER_DLL_insert (cache_head,
-                                   cache_tail,
-                                   rc);
-      cache_size++;
-    }
-    /* TODO: ought to check first if we have this exact record
-       already in the cache! */
-    rle = GNUNET_new (struct RecordListEntry);
-    rle->record = GNUNET_DNSPARSER_duplicate_record (record);
-    GNUNET_CONTAINER_DLL_insert (rc->records_head,
-                                 rc->records_tail,
-                                 rle);
-  }
-  for (unsigned int i = 0; i != parsed->num_additional_records; i++)
-  {
-    struct GNUNET_DNSPARSER_Record *record = &parsed->additional_records[i];
-    struct RecordListEntry *rle;
+  cache_answers(al->hostname,
+                parsed->answers, parsed->num_answers);
+  cache_answers(al->hostname,
+                parsed->authority_records, parsed->num_authority_records);
+  cache_answers(al->hostname,
+                parsed->additional_records, parsed->num_additional_records);
 
-    for (rc = cache_head; NULL != rc; rc = rc->next)
-      if (0 == strcasecmp (rc->hostname,
-                           record->name))
-        break;
-    if (NULL == rc)
-    {
-      rc = GNUNET_new (struct ResolveCache);
-      rc->hostname = GNUNET_strdup (record->name);
-      GNUNET_CONTAINER_DLL_insert (cache_head,
-                                   cache_tail,
-                                   rc);
-      cache_size++;
-    }
-    /* TODO: ought to check first if we have this exact record
-       already in the cache! */
-    rle = GNUNET_new (struct RecordListEntry);
-    rle->record = GNUNET_DNSPARSER_duplicate_record (record);
-    GNUNET_CONTAINER_DLL_insert (rc->records_head,
-                                 rc->records_tail,
-                                 rle);
-  }
   /* see if we need to do the 2nd request for AAAA records */
   if ( (GNUNET_DNSPARSER_TYPE_ALL == al->record_type) &&
        (GNUNET_NO == al->did_aaaa) )
@@ -968,7 +940,7 @@ handle_resolve_timeout (void *cls)
 
   al->timeout_task = NULL;
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "DNS lookup timeout!\n");
+              "DNS lookup timeout!\n");
   send_end_msg (al->client_request_id,
                 al->client);
   free_active_lookup (al);
@@ -987,9 +959,9 @@ handle_resolve_timeout (void *cls)
  */
 static int
 resolve_and_cache (const char* hostname,
-                  uint16_t record_type,
-                  uint32_t client_request_id,
-                  struct GNUNET_SERVICE_Client *client)
+                   uint16_t record_type,
+                   uint32_t client_request_id,
+                   struct GNUNET_SERVICE_Client *client)
 {
   char *packet_buf;
   size_t packet_size;
@@ -998,8 +970,8 @@ resolve_and_cache (const char* hostname,
   uint16_t type;
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "resolve_and_cache `%s'\n",
-             hostname);
+              "resolve_and_cache `%s'\n",
+              hostname);
   dns_id = (uint16_t) GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_NONCE,
                                                 UINT16_MAX);
 
@@ -1015,7 +987,7 @@ resolve_and_cache (const char* hostname,
             &packet_size))
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-               "Failed to pack query for hostname `%s'\n",
+                "Failed to pack query for hostname `%s'\n",
                 hostname);
     return GNUNET_SYSERR;
   }
@@ -1031,19 +1003,19 @@ resolve_and_cache (const char* hostname,
                                                    al);
   al->resolve_handle =
     GNUNET_DNSSTUB_resolve (dnsstub_ctx,
-                           packet_buf,
-                           packet_size,
-                           &handle_resolve_result,
-                           al);
+                            packet_buf,
+                            packet_size,
+                            &handle_resolve_result,
+                            al);
   GNUNET_free (packet_buf);
   GNUNET_CONTAINER_DLL_insert (lookup_head,
-                              lookup_tail,
-                              al);
+                               lookup_tail,
+                               al);
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "Resolving %s, client_request_id = %u, dns_id = %u\n",
-             hostname,
+              "Resolving %s, client_request_id = %u, dns_id = %u\n",
+              hostname,
               (unsigned int) client_request_id,
-             (unsigned int) dns_id);
+              (unsigned int) dns_id);
   return GNUNET_OK;
 }
 
@@ -1059,29 +1031,29 @@ resolve_and_cache (const char* hostname,
  */
 static void
 process_get (const char *hostname,
-            uint16_t record_type,
-            uint32_t client_request_id,
-            struct GNUNET_SERVICE_Client *client)
+             uint16_t record_type,
+             uint32_t client_request_id,
+             struct GNUNET_SERVICE_Client *client)
 {
   char fqdn[255];
 
   if (  (NULL != my_domain) &&
-       (NULL == strchr (hostname,
-                        (unsigned char) '.')) &&
-       (strlen (hostname) + strlen (my_domain) <= 253) )
+        (NULL == strchr (hostname,
+                         (unsigned char) '.')) &&
+        (strlen (hostname) + strlen (my_domain) <= 253) )
   {
     GNUNET_snprintf (fqdn,
-                    sizeof (fqdn),
-                    "%s.%s",
-                    hostname,
-                    my_domain);
+                     sizeof (fqdn),
+                     "%s.%s",
+                     hostname,
+                     my_domain);
   }
   else if (strlen (hostname) < 255)
   {
     GNUNET_snprintf (fqdn,
-                    sizeof (fqdn),
-                    "%s",
-                    hostname);
+                     sizeof (fqdn),
+                     "%s",
+                     hostname);
   }
   else
   {
@@ -1117,7 +1089,7 @@ process_get (const char *hostname,
  */
 static int
 check_get (void *cls,
-          const struct GNUNET_RESOLVER_GetMessage *get)
+           const struct GNUNET_RESOLVER_GetMessage *get)
 {
   uint16_t size;
   int direction;
@@ -1134,23 +1106,23 @@ check_get (void *cls,
   af = ntohl (get->af);
   switch (af)
   {
-  case AF_INET:
-    if (size != sizeof (struct in_addr))
-    {
-      GNUNET_break (0);
-      return GNUNET_SYSERR;
-    }
-    break;
-  case AF_INET6:
-    if (size != sizeof (struct in6_addr))
-    {
+    case AF_INET:
+      if (size != sizeof (struct in_addr))
+      {
+        GNUNET_break (0);
+        return GNUNET_SYSERR;
+      }
+      break;
+    case AF_INET6:
+      if (size != sizeof (struct in6_addr))
+      {
+        GNUNET_break (0);
+        return GNUNET_SYSERR;
+      }
+      break;
+    default:
       GNUNET_break (0);
       return GNUNET_SYSERR;
-    }
-    break;
-  default:
-    GNUNET_break (0);
-    return GNUNET_SYSERR;
   }
   return GNUNET_OK;
 }
@@ -1164,7 +1136,7 @@ check_get (void *cls,
  */
 static void
 handle_get (void *cls,
-           const struct GNUNET_RESOLVER_GetMessage *msg)
+            const struct GNUNET_RESOLVER_GetMessage *msg)
 {
   struct GNUNET_SERVICE_Client *client = cls;
   int direction;
@@ -1183,36 +1155,36 @@ handle_get (void *cls,
     switch (af)
     {
       case AF_UNSPEC:
-      {
-       process_get (hostname,
-                     GNUNET_DNSPARSER_TYPE_ALL,
-                     client_request_id,
-                     client);
-       break;
-      }
+        {
+          process_get (hostname,
+                       GNUNET_DNSPARSER_TYPE_ALL,
+                       client_request_id,
+                       client);
+          break;
+        }
       case AF_INET:
-      {
-       process_get (hostname,
-                     GNUNET_DNSPARSER_TYPE_A,
-                     client_request_id,
-                     client);
-        break;
-      }
+        {
+          process_get (hostname,
+                       GNUNET_DNSPARSER_TYPE_A,
+                       client_request_id,
+                       client);
+          break;
+        }
       case AF_INET6:
-      {
-       process_get (hostname,
-                     GNUNET_DNSPARSER_TYPE_AAAA,
-                     client_request_id,
-                     client);
-        break;
-      }
+        {
+          process_get (hostname,
+                       GNUNET_DNSPARSER_TYPE_AAAA,
+                       client_request_id,
+                       client);
+          break;
+        }
       default:
-      {
-        GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                   "got invalid af: %d\n",
-                   af);
-        GNUNET_assert (0);
-      }
+        {
+          GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                      "got invalid af: %d\n",
+                      af);
+          GNUNET_assert (0);
+        }
     }
   }
   else
@@ -1246,7 +1218,7 @@ shutdown_task (void *cls)
   while (NULL != hosts_head)
     free_hosts_entry (hosts_head);
   GNUNET_DNSSTUB_stop (dnsstub_ctx);
-  GNUNET_free (my_domain);
+  GNUNET_free_non_null (my_domain);
 }
 
 
@@ -1261,9 +1233,9 @@ shutdown_task (void *cls)
  */
 static void
 add_host (const char *hostname,
-         uint16_t rec_type,
-         const void *data,
-         size_t data_size)
+          uint16_t rec_type,
+          const void *data,
+          size_t data_size)
 {
   struct ResolveCache *rc;
   struct RecordListEntry *rle;
@@ -1275,18 +1247,18 @@ add_host (const char *hostname,
   rec->dns_traffic_class = GNUNET_TUN_DNS_CLASS_INTERNET;
   rec->name = GNUNET_strdup (hostname);
   rec->data.raw.data = GNUNET_memdup (data,
-                                     data_size);
+                                      data_size);
   rec->data.raw.data_len = data_size;
   rle = GNUNET_new (struct RecordListEntry);
   rle->record = rec;
   rc = GNUNET_new (struct ResolveCache);
   rc->hostname = GNUNET_strdup (hostname);
   GNUNET_CONTAINER_DLL_insert (rc->records_head,
-                              rc->records_tail,
-                              rle);
+                               rc->records_tail,
+                               rle);
   GNUNET_CONTAINER_DLL_insert (hosts_head,
-                              hosts_tail,
-                              rc);
+                               hosts_tail,
+                               rc);
 }
 
 
@@ -1298,7 +1270,7 @@ add_host (const char *hostname,
  */
 static void
 extract_hosts (const char *line,
-              size_t line_len)
+               size_t line_len)
 {
   const char *c;
   struct in_addr v4;
@@ -1308,19 +1280,19 @@ extract_hosts (const char *line,
 
   /* ignore everything after '#' */
   c = memrchr (line,
-              (unsigned char) '#',
-              line_len);
+               (unsigned char) '#',
+               line_len);
   if (NULL != c)
     line_len = c - line;
   /* ignore leading whitespace */
   while ( (0 < line_len) &&
-         isspace ((unsigned char) *line) )
+          isspace ((unsigned char) *line) )
   {
     line++;
     line_len--;
   }
   tbuf = GNUNET_strndup (line,
-                        line_len);
+                         line_len);
   tok = strtok (tbuf, " \t");
   if (NULL == tok)
   {
@@ -1328,24 +1300,24 @@ extract_hosts (const char *line,
     return;
   }
   if (1 == inet_pton (AF_INET,
-                     tok,
-                     &v4))
+                      tok,
+                      &v4))
   {
     while (NULL != (tok = strtok (NULL, " \t")))
       add_host (tok,
-               GNUNET_DNSPARSER_TYPE_A,
-               &v4,
-               sizeof (struct in_addr));
+                GNUNET_DNSPARSER_TYPE_A,
+                &v4,
+                sizeof (struct in_addr));
   }
   else if (1 == inet_pton (AF_INET6,
-                          tok,
-                          &v6))
+                           tok,
+                           &v6))
   {
     while (NULL != (tok = strtok (NULL, " \t")))
       add_host (tok,
-               GNUNET_DNSPARSER_TYPE_AAAA,
-               &v6,
-               sizeof (struct in6_addr));
+                GNUNET_DNSPARSER_TYPE_AAAA,
+                &v6,
+                sizeof (struct in6_addr));
   }
   GNUNET_free (tbuf);
 }
@@ -1364,36 +1336,36 @@ load_etc_hosts (void)
   size_t read_offset;
 
   fh = GNUNET_DISK_file_open ("/etc/hosts",
-                             GNUNET_DISK_OPEN_READ,
-                             GNUNET_DISK_PERM_NONE);
+                              GNUNET_DISK_OPEN_READ,
+                              GNUNET_DISK_PERM_NONE);
   if (NULL == fh)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-               "Failed to open /etc/hosts");
+                "Failed to open /etc/hosts");
     return;
   }
   if (GNUNET_OK !=
       GNUNET_DISK_file_handle_size (fh,
-                                   &bytes_read))
+                                    &bytes_read))
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-               "Could not determin size of /etc/hosts. "
-               "DNS resolution will not be possible.\n");
+                "Could not determin size of /etc/hosts. "
+                "DNS resolution will not be possible.\n");
     GNUNET_DISK_file_close (fh);
     return;
   }
   if ((size_t) bytes_read > SIZE_MAX)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-               "/etc/hosts file too large to mmap. "
-               "DNS resolution will not be possible.\n");
+                "/etc/hosts file too large to mmap. "
+                "DNS resolution will not be possible.\n");
     GNUNET_DISK_file_close (fh);
     return;
   }
   buf = GNUNET_DISK_file_map (fh,
-                             &mh,
-                             GNUNET_DISK_MAP_TYPE_READ,
-                             (size_t) bytes_read);
+                              &mh,
+                              GNUNET_DISK_MAP_TYPE_READ,
+                              (size_t) bytes_read);
   read_offset = 0;
   while (read_offset < (size_t) bytes_read)
   {
@@ -1406,7 +1378,7 @@ load_etc_hosts (void)
       break;
     line_len = newline - buf - read_offset;
     extract_hosts (buf + read_offset,
-                  line_len);
+                   line_len);
     read_offset += line_len + 1;
   }
   GNUNET_DISK_file_unmap (mh);
@@ -1423,8 +1395,8 @@ load_etc_hosts (void)
  */
 static void
 init_cb (void *cls,
-        const struct GNUNET_CONFIGURATION_Handle *cfg,
-        struct GNUNET_SERVICE_Handle *sh)
+         const struct GNUNET_CONFIGURATION_Handle *cfg,
+         struct GNUNET_SERVICE_Handle *sh)
 {
   char **dns_servers;
   int num_dns_servers;
@@ -1433,23 +1405,23 @@ init_cb (void *cls,
   (void) sh;
   load_etc_hosts ();
   GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
-                                cls);
+                                 cls);
   dnsstub_ctx = GNUNET_DNSSTUB_start (128);
   dns_servers = NULL;
   num_dns_servers = lookup_dns_servers (&dns_servers);
   if (0 >= num_dns_servers)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-               _("No DNS server available. DNS resolution will not be possible.\n"));
+                _("No DNS server available. DNS resolution will not be possible.\n"));
     return;
   }
   for (int i = 0; i < num_dns_servers; i++)
   {
     int result = GNUNET_DNSSTUB_add_dns_ip (dnsstub_ctx, dns_servers[i]);
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-               "Adding DNS server '%s': %s\n",
-               dns_servers[i],
-               GNUNET_OK == result ? "success" : "failure");
+                "Adding DNS server '%s': %s\n",
+                dns_servers[i],
+                GNUNET_OK == result ? "success" : "failure");
     GNUNET_free (dns_servers[i]);
   }
   GNUNET_free_non_null (dns_servers);
@@ -1466,8 +1438,8 @@ init_cb (void *cls,
  */
 static void *
 connect_cb (void *cls,
-           struct GNUNET_SERVICE_Client *c,
-           struct GNUNET_MQ_Handle *mq)
+            struct GNUNET_SERVICE_Client *c,
+            struct GNUNET_MQ_Handle *mq)
 {
   (void) cls;
   (void) mq;
@@ -1485,8 +1457,8 @@ connect_cb (void *cls,
  */
 static void
 disconnect_cb (void *cls,
-              struct GNUNET_SERVICE_Client *c,
-              void *internal_cls)
+               struct GNUNET_SERVICE_Client *c,
+               void *internal_cls)
 {
   struct ActiveLookup *n;
   (void) cls;
@@ -1515,9 +1487,9 @@ GNUNET_SERVICE_MAIN
  &disconnect_cb,
  NULL,
  GNUNET_MQ_hd_var_size (get,
-                       GNUNET_MESSAGE_TYPE_RESOLVER_REQUEST,
-                       struct GNUNET_RESOLVER_GetMessage,
-                       NULL),
+                        GNUNET_MESSAGE_TYPE_RESOLVER_REQUEST,
+                        struct GNUNET_RESOLVER_GetMessage,
+                        NULL),
  GNUNET_MQ_handler_end ());
 
 
index d2f5add19c9c30f25b667e9f9e090ecebff7a887..72ab8b72d0a6cfa524d4d8b64453244eb4dd81fa 100644 (file)
@@ -964,6 +964,7 @@ GNUNET_MQ_send_cancel (struct GNUNET_MQ_Envelope *ev)
   {
     /* complex case, we already started with transmitting
        the message using the callbacks. */
+    GNUNET_assert (GNUNET_NO == mq->in_flight);
     GNUNET_assert (0 < mq->queue_length);
     mq->queue_length--;
     mq->cancel_impl (mq,
index dd0d5d5cf43b32645a1c82e7fa1d71f0ae0326bf..3bd7ccec7e4c61cbb1128396e99e067c72c9cc9a 100644 (file)
@@ -658,8 +658,8 @@ sighandler_shutdown ()
   int old_errno = errno;        /* backup errno */
 
   if (getpid () != my_pid)
-    exit (1);                   /* we have fork'ed since the signal handler was created,
-                                 * ignore the signal, see https://gnunet.org/vfork discussion */
+    _exit (1);                   /* we have fork'ed since the signal handler was created,
+                                  * ignore the signal, see https://gnunet.org/vfork discussion */
   GNUNET_DISK_file_write (GNUNET_DISK_pipe_handle
                           (shutdown_pipe_handle, GNUNET_DISK_PIPE_END_WRITE),
                           &c, sizeof (c));
index 5117f006fd48ddb4f2b767d02a31cd211b35b4bb..f38e4b353c507e6d29b2deebd9e39f093ed7dc9f 100644 (file)
@@ -888,6 +888,8 @@ accept_client (void *cls)
     start_client (slc->sh,
                  sock);
   }
+  if (0 != sh->suspend_state)
+    return;
   slc->listen_task
     = GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL,
                                     slc->listen_socket,