summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authort3sserakt <t3ss@posteo.de>2022-03-17 15:12:06 +0100
committert3sserakt <t3ss@posteo.de>2022-03-17 15:12:06 +0100
commit8d41efc36bec5bc5ec29278a365d5a63d7349084 (patch)
tree99177b1b5400df5ae7180c2af1f47408cace1034
parent95a1edacccd9b3bf769a144a12d41946d0ac25dc (diff)
parentea4a5dd6ca3d62f852b5c2de94071b7fc8f0544c (diff)
Merge branch 'master' of ssh://git.gnunet.org/gnunet
-rw-r--r--ChangeLog180
-rwxr-xr-xbootstrap12
-rw-r--r--configure.ac1
-rw-r--r--contrib/Makefile.am1
-rw-r--r--contrib/conf/uncrustify.cfg2
m---------contrib/gana0
-rw-r--r--contrib/xdg-scheme-handler/README.md2
-rw-r--r--doc/handbook/chapters/developer.texi2
-rw-r--r--doc/handbook/chapters/philosophy.texi5
-rw-r--r--doc/handbook/chapters/user.texi29
-rw-r--r--doc/man/gnunet-search.1311
-rw-r--r--doc/tutorial/tutorial.texi4
-rw-r--r--po/POTFILES.in106
-rw-r--r--po/de.po690
-rw-r--r--po/es.po723
-rw-r--r--po/fr.po674
-rw-r--r--po/it.po681
-rw-r--r--po/sr.po715
-rw-r--r--po/sv.po700
-rw-r--r--po/vi.po700
-rw-r--r--po/zh_CN.po675
-rw-r--r--src/ats/ats.conf.in12
-rw-r--r--src/ats/gnunet-ats-solver-eval.c5
-rw-r--r--src/block/bg_bf.c4
-rw-r--r--src/block/block.c33
-rw-r--r--src/block/plugin_block_template.c82
-rw-r--r--src/block/plugin_block_test.c120
-rw-r--r--src/consensus/plugin_block_consensus.c61
-rw-r--r--src/consensus/test_consensus.conf2
-rw-r--r--src/datacache/datacache.c86
-rw-r--r--src/datacache/plugin_datacache_heap.c70
-rw-r--r--src/datacache/plugin_datacache_postgres.c23
-rw-r--r--src/datacache/plugin_datacache_sqlite.c62
-rw-r--r--src/datacache/plugin_datacache_template.c2
-rw-r--r--src/dht/.gitignore1
-rw-r--r--src/dht/Makefile.am23
-rw-r--r--src/dht/dht_api.c251
-rwxr-xr-xsrc/dht/dhtu_testbed_connect.sh31
-rw-r--r--src/dht/dhtu_testbed_deploy.conf26
-rwxr-xr-xsrc/dht/dhtu_testbed_deploy.sh84
-rw-r--r--src/dht/gnunet-dht-get.c24
-rw-r--r--src/dht/gnunet-dht-hello.c178
-rw-r--r--src/dht/gnunet-service-dht.c467
-rw-r--r--src/dht/gnunet-service-dht.h93
-rw-r--r--src/dht/gnunet-service-dht_clients.c177
-rw-r--r--src/dht/gnunet-service-dht_datacache.c139
-rw-r--r--src/dht/gnunet-service-dht_datacache.h13
-rw-r--r--src/dht/gnunet-service-dht_hello.c154
-rw-r--r--src/dht/gnunet-service-dht_hello.h55
-rw-r--r--src/dht/gnunet-service-dht_neighbours.c1761
-rw-r--r--src/dht/gnunet-service-dht_neighbours.h84
-rw-r--r--src/dht/gnunet-service-dht_nse.c121
-rw-r--r--src/dht/gnunet-service-dht_nse.h52
-rw-r--r--src/dht/gnunet-service-dht_routing.c36
-rw-r--r--src/dht/plugin_block_dht.c388
-rw-r--r--src/dht/test_dht_topo.c28
-rw-r--r--src/dhtu/Makefile.am7
-rw-r--r--src/dhtu/dhtu.conf7
-rw-r--r--src/dhtu/plugin_dhtu_gnunet.c63
-rw-r--r--src/dhtu/plugin_dhtu_ip.c434
-rw-r--r--src/dns/plugin_block_dns.c128
-rw-r--r--src/fs/fs_file_information.c2
-rw-r--r--src/fs/fs_uri.c26
-rw-r--r--src/fs/gnunet-search.c599
-rw-r--r--src/fs/gnunet-service-fs_pr.c74
-rw-r--r--src/fs/plugin_block_fs.c117
-rw-r--r--src/gns/Makefile.am26
-rw-r--r--src/gns/gnunet-bcd.c2
-rw-r--r--src/gns/gnunet-dns2gns.c209
-rw-r--r--src/gns/gnunet-service-gns.c8
-rw-r--r--src/gns/gnunet-service-gns_resolver.c348
-rw-r--r--src/gns/plugin_block_gns.c132
-rw-r--r--src/gns/plugin_gnsrecord_gns.c40
-rwxr-xr-xsrc/gns/test_gns_cname_lookup.sh99
-rwxr-xr-xsrc/gns/test_gns_gns2dns_cname_lookup.sh9
-rwxr-xr-xsrc/gns/test_gns_gns2dns_lookup.sh14
-rwxr-xr-xsrc/gns/test_gns_gns2dns_zkey_lookup.sh14
-rwxr-xr-xsrc/gns/test_gns_redirect_lookup.sh100
-rw-r--r--src/gnsrecord/Makefile.am18
-rw-r--r--src/gnsrecord/gnsrecord.c21
-rw-r--r--src/gnsrecord/gnsrecord_crypto.c58
-rw-r--r--src/gnsrecord/gnsrecord_misc.c250
-rw-r--r--src/gnsrecord/gnunet-gnsrecord-tvg.c226
-rw-r--r--src/gnsrecord/perf_gnsrecord_crypto.c6
-rw-r--r--src/gnsrecord/plugin_gnsrecord_dns.c7
-rw-r--r--src/gnsrecord/test_gnsrecord_block_expiration.c6
-rw-r--r--src/gnsrecord/test_gnsrecord_testvectors.c33
-rw-r--r--src/hello/.gitignore2
-rw-r--r--src/hello/Makefile.am19
-rw-r--r--src/hello/hello-uri.c891
-rw-r--r--src/hello/test_hello-ng.c23
-rw-r--r--src/hello/test_hello-uri.c212
-rw-r--r--src/hostlist/gnunet-daemon-hostlist_client.c6
-rw-r--r--src/identity/Makefile.am3
-rw-r--r--src/identity/gnunet-service-identity.c3
-rw-r--r--src/include/Makefile.am1
-rw-r--r--src/include/gnunet_block_group_lib.h2
-rw-r--r--src/include/gnunet_block_lib.h144
-rw-r--r--src/include/gnunet_block_plugin.h61
-rw-r--r--src/include/gnunet_common.h27
-rw-r--r--src/include/gnunet_crypto_lib.h55
-rw-r--r--src/include/gnunet_datacache_lib.h2
-rw-r--r--src/include/gnunet_datacache_plugin.h13
-rw-r--r--src/include/gnunet_dht_service.h81
-rw-r--r--src/include/gnunet_dhtu_plugin.h26
-rw-r--r--src/include/gnunet_fs_service.h2
-rw-r--r--src/include/gnunet_gns_service.h6
-rw-r--r--src/include/gnunet_gnsrecord_lib.h98
-rw-r--r--src/include/gnunet_gnsrecord_plugin.h17
-rw-r--r--src/include/gnunet_hello_uri_lib.h248
-rw-r--r--src/include/gnunet_json_lib.h8
-rw-r--r--src/include/gnunet_namestore_service.h88
-rw-r--r--src/include/gnunet_protocols.h24
-rw-r--r--src/include/gnunet_strings_lib.h16
-rw-r--r--src/include/gnunet_time_lib.h13
-rw-r--r--src/json/json_pack.c6
-rw-r--r--src/messenger/gnunet-service-messenger.c4
-rw-r--r--src/messenger/gnunet-service-messenger_member_session.c8
-rw-r--r--src/messenger/gnunet-service-messenger_room.c28
-rw-r--r--src/messenger/gnunet-service-messenger_room.h15
-rw-r--r--src/messenger/gnunet-service-messenger_service.c8
-rw-r--r--src/messenger/messenger.conf.in6
-rw-r--r--src/messenger/messenger_api_message.c12
-rw-r--r--src/namecache/test_namecache_api_cache_block.c7
-rw-r--r--src/namestore/Makefile.am11
-rw-r--r--src/namestore/gnunet-namestore.c105
-rw-r--r--src/namestore/gnunet-service-namestore.c396
-rw-r--r--src/namestore/namestore.h28
-rw-r--r--src/namestore/namestore_api.c173
-rw-r--r--src/namestore/plugin_namestore_sqlite.c10
-rw-r--r--src/namestore/test_namestore_api_lookup_nick.c4
-rw-r--r--src/namestore/test_namestore_api_lookup_public.c2
-rw-r--r--src/namestore/test_namestore_api_lookup_shadow.c2
-rw-r--r--src/namestore/test_namestore_api_lookup_shadow_filter.c2
-rw-r--r--src/namestore/test_namestore_api_remove.c2
-rw-r--r--src/namestore/test_namestore_api_remove_not_existing_record.c2
-rw-r--r--src/namestore/test_namestore_api_zone_to_name.c10
-rwxr-xr-xsrc/namestore/test_namestore_delete.sh10
-rwxr-xr-xsrc/namestore/test_plugin_rest_namestore.sh10
-rw-r--r--src/reclaim/reclaim_api.c1
-rw-r--r--src/reclaim/test_reclaim.conf2
-rwxr-xr-xsrc/reclaim/test_reclaim_consume.sh14
-rw-r--r--src/regex/plugin_block_regex.c287
-rw-r--r--src/revocation/gnunet-revocation-tvg.c1
-rw-r--r--src/revocation/plugin_block_revocation.c74
-rw-r--r--src/revocation/revocation_api.c2
-rw-r--r--src/set/plugin_block_set_test.c44
-rw-r--r--src/seti/plugin_block_seti_test.c72
-rw-r--r--src/setu/plugin_block_setu_test.c76
-rw-r--r--src/transport/Makefile.am8
-rw-r--r--src/transport/gnunet-communicator-tcp.c16
-rw-r--r--src/transport/gnunet-service-tng.c20
-rw-r--r--src/transport/gnunet-service-transport.c4
-rwxr-xr-xsrc/transport/test_transport_simple_send.sh7
-rwxr-xr-xsrc/transport/test_transport_simple_send_broadcast.sh8
-rwxr-xr-xsrc/transport/test_transport_simple_send_dv.sh8
-rwxr-xr-xsrc/transport/test_transport_simple_send_dv_circle.sh9
-rwxr-xr-xsrc/transport/test_transport_simple_send_string.sh8
-rwxr-xr-xsrc/transport/test_transport_udp_backchannel.sh9
-rw-r--r--src/util/common_logging.c25
-rw-r--r--src/util/crypto_cs.c214
-rw-r--r--src/util/crypto_hash.c3
-rw-r--r--src/util/dnsstub.c42
-rw-r--r--src/util/getopt_helpers.c3
-rw-r--r--src/util/gnunet-crypto-tvg.c24
-rw-r--r--src/util/network.c3
-rw-r--r--src/util/plugin.c4
-rw-r--r--src/util/strings.c41
-rw-r--r--src/util/test_crypto_cs.c334
-rw-r--r--src/util/test_strings.c7
-rw-r--r--src/util/time.c7
-rw-r--r--src/zonemaster/gnunet-service-zonemaster-monitor.c65
-rw-r--r--src/zonemaster/gnunet-service-zonemaster.c103
173 files changed, 11592 insertions, 6949 deletions
diff --git a/ChangeLog b/ChangeLog
index bf3f089bd..b5596af5c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,183 @@
+Fri, 4 Mar 2022 14:17:37 +0100 (0e6b1f4a2)
+NAMESTORE: Warn use of low relative expiration times - Martin Schanzenbach
+
+Thu, 3 Mar 2022 21:34:09 +0100 (0f0ff3785)
+NAMESTORE: Do not display label for TOMBSTONE only record sets - Martin Schanzenbach
+
+Thu, 3 Mar 2022 21:31:15 +0100 (64598c8fe)
+GNS: Fix publishing of private records - Martin Schanzenbach
+
+Mon, 28 Feb 2022 02:51:04 +0000 (8d9b10826)
+Add `contrib/get_version.sh` to `EXTRA_DIST` (for allowing to launch `autoreconf -i` with the released tarball, when necessary) - madmurphy
+
+Sun, 27 Feb 2022 20:54:49 +0100 (fd1d4df8f)
+BUILD: Allow boostrap when offline (if gana files exist) - Martin Schanzenbach
+
+Sat, 26 Feb 2022 23:26:33 +0100 (82d9ca012)
+BUILD: Detect missing libsodium. Fixes #7153 - Martin Schanzenbach
+
+Fri, 25 Feb 2022 00:46:09 +0100 (5e4cbb92b)
+add GNUNET_B2S() macro; fix dht_line_test: we sign over query_hash, not block key - Martin Schanzenbach
+
+Mon, 21 Feb 2022 00:11:28 +0100 (7bc5bb42a)
+fix #7173 - Christian Grothoff
+
+Sun, 20 Feb 2022 21:34:39 +0100 (3bda89642)
+add salt argument to GNUNET_CRYPTO_CS_r_derive() - Christian Grothoff
+
+Wed, 12 Jan 2022 20:42:34 +0100 (ac77d5f43)
+add new HELLO_URI block support to block plugin - Christian Grothoff
+
+Wed, 12 Jan 2022 14:34:56 +0100 (3e3081cfd)
+incomplete first hack of new hello-uri lib - Christian Grothoff
+
+Mon, 10 Jan 2022 21:51:53 +0100 (ba9296269)
+first steps towards usable dhtu - Christian Grothoff
+
+Fri, 18 Feb 2022 13:02:24 +0100 (a85bfe2fe)
+DOC: Fix error - Martin Schanzenbach
+
+Thu, 17 Feb 2022 12:53:23 +0100 (d4dffb077)
+DOC: Fixed git links in tutorial - Martin Schanzenbach
+
+Tue, 15 Feb 2022 14:37:56 +0100 (f72ffa1a9)
+GNS: Allow lowercase and uppercase - Martin Schanzenbach
+
+Tue, 15 Feb 2022 00:13:04 +0000 (839b4da34)
+Fix incorrect information in `contrib/xdg-scheme-handler/README` - madmurphy
+
+Tue, 15 Feb 2022 00:07:16 +0000 (679d390e4)
+`gnunet-search`: Reduce the help page and include Alessio's suggestions - madmurphy
+
+Mon, 14 Feb 2022 16:00:15 +0100 (336acc330)
+GNS/NAMESTORE: Fix GNS2DNS delegations - Martin Schanzenbach
+
+Mon, 14 Feb 2022 15:15:03 +0100 (6866469e6)
+UTIL: Fix DNS resolution - Martin Schanzenbach
+
+Mon, 14 Feb 2022 12:15:54 +0100 (8f7f4944a)
+GNS: Rename CNAME test; bugfix - Martin Schanzenbach
+
+Sat, 12 Feb 2022 20:18:16 +0000 (e94d71fdc)
+`man gnunet-search`: better layout for `--printf` examples - madmurphy
+
+Sat, 12 Feb 2022 18:14:33 +0000 (8c316d9dc)
+`man gnunet-search`: add `--printf` examples, update page date - madmurphy
+
+Fri, 11 Feb 2022 15:20:37 +0000 (c252554c5)
+`man gnunet-search`: not just quotes - madmurphy
+
+Fri, 11 Feb 2022 14:59:28 +0000 (b99f65d5e)
+`man gnunet-search`: general review (cont'd) - madmurphy
+
+Fri, 11 Feb 2022 03:20:27 +0000 (c4bd3744a)
+`man gnunet-search`: general review - madmurphy
+
+Fri, 11 Feb 2022 02:52:46 +0000 (0e04edc6b)
+`man gnunet-search`: note about libextractor - madmurphy
+
+Fri, 11 Feb 2022 02:45:23 +0000 (d267f384a)
+`man gnunet-search`: metatype string - madmurphy
+
+Fri, 11 Feb 2022 01:49:29 +0000 (55307d34d)
+`man gnunet-search`: update synopsis - madmurphy
+
+Fri, 11 Feb 2022 01:32:58 +0000 (3ce3d040f)
+First draft of updated man page for `gnunet-search` (to be reviewed) - madmurphy
+
+Thu, 10 Feb 2022 22:45:00 +0000 (9294003d1)
+Add missing information to `gnunet-search`'s help page - madmurphy
+
+Thu, 10 Feb 2022 22:24:56 +0000 (4b887d8a8)
+New version of `gnunet-search` is ready to be tested - madmurphy
+
+Thu, 10 Feb 2022 22:20:32 +0000 (82e288bca)
+Use `const` for `GNUNET_FS_file_information_get_filename()`'s only argument - madmurphy
+
+Thu, 10 Feb 2022 22:12:48 +0000 (99dcb607e)
+Add newline before help pages' footer - madmurphy
+
+Mon, 7 Feb 2022 15:59:04 +0100 (14b3c75ab)
+GNS: LSD0001 improvements - Martin Schanzenbach
+
+Sat, 5 Feb 2022 17:17:37 +0100 (aa85ac347)
+GNS: Add tombstone string processing; also handle tombstones in monitor properly - Martin Schanzenbach
+
+Sat, 5 Feb 2022 00:50:38 +0100 (ee865f851)
+GNS: Implement Tombstone logic - Martin Schanzenbach
+
+Thu, 3 Feb 2022 22:47:03 +0100 (f3eaf5dae)
+GNS: Move VPN to DNS2GNS. Fixes #7171 - Martin Schanzenbach
+
+Thu, 3 Feb 2022 18:44:40 +0100 (afd2cb5db)
+GNS: Introduce REDIRECT records. Fixes #7172 - Martin Schanzenbach
+
+Thu, 3 Feb 2022 18:12:10 +0100 (3d72be074)
+GNS: Introduce CRITICAL flag. Fixes #7169 - Martin Schanzenbach
+
+Thu, 3 Feb 2022 09:25:12 +0100 (112ef3796)
+GNS: Rework GNS block wire format - Martin Schanzenbach
+
+Tue, 1 Feb 2022 17:52:33 +0100 (4f07822ff)
+GNS: Fix context strings in key derivation according to LSD0001 - Martin Schanzenbach
+
+Tue, 1 Feb 2022 15:48:52 +0100 (816bab695)
+GNS: Fix revocation wire format - Martin Schanzenbach
+
+Wed, 26 Jan 2022 22:41:40 +0100 (e96a8d741)
+added CS test vectors - Gian Demarmels
+
+Thu, 20 Jan 2022 15:21:53 +0100 (856078f62)
+DOC: Update README and handbook for dependencies - Martin Schanzenbach
+
+Tue, 18 Jan 2022 14:05:12 +0100 (18bf1b905)
+UTIL: Add UTF-8 NFC test - Martin Schanzenbach
+
+Tue, 18 Jan 2022 11:05:41 +0100 (54554ca53)
+GNS: Towards NFC - Martin Schanzenbach
+
+Fri, 14 Jan 2022 18:42:27 +0100 (7e43ac554)
+RECLAIM: Add DIDs - trizuz - Martin Schanzenbach
+
+Mon, 10 Jan 2022 10:31:59 +0100 (8f8351c2d)
+add more information to ensure signatures are fresh and request-specific - Christian Grothoff
+
+Sun, 9 Jan 2022 12:22:04 +0100 (ec19c1e31)
+DHT: modify API and protocol messages to add path signatures, except for now the actual signatures are just placeholders (signing and signature verification are missing) - Christian Grothoff
+
+Tue, 4 Jan 2022 22:18:34 +0100 (d228a5859)
+BUILD: Make GANA generation mandatory for beetstrap. Requires recutils - Martin Schanzenbach
+
+Tue, 4 Jan 2022 15:53:29 +0100 (a5ca7d597)
+BUILD: gnunet-signatures from gana - Martin Schanzenbach
+
+Tue, 4 Jan 2022 15:37:21 +0100 (7b6e0eb4f)
+BUILD: Add gana gnunet-signatures; do not yet copy - Martin Schanzenbach
+
+Tue, 4 Jan 2022 15:23:22 +0100 (c5f6aafd6)
+BUILD: Add gana GNS TLDs - Martin Schanzenbach
+
+Tue, 4 Jan 2022 13:47:07 +0100 (8fc699d2a)
+BUILD: Add gana build target for easy updates of generated headers - Martin Schanzenbach
+
+Sun, 2 Jan 2022 14:53:35 +0100 (329f0458f)
+clean up am_closest_peer and other functions - Christian Grothoff
+
+Sun, 2 Jan 2022 13:10:25 +0100 (bb686c483)
+revise DHT hashing functions, add test logic - Christian Grothoff
+
+Wed, 29 Dec 2021 19:12:28 +0100 (daa928456)
+implement revised block API - Christian Grothoff
+
+Wed, 29 Dec 2021 00:11:40 +0100 (68b028c18)
+implement new block API for FS, fix FTBFS - Christian Grothoff
+
+Tue, 28 Dec 2021 23:39:36 +0100 (8d8976f00)
+revise block plugin design as per discussion with Martin today (only implemented for GNS) - Christian Grothoff
+
+Thu, 16 Dec 2021 18:13:21 +0100 (88fb1d89e)
+IDENTITY: Expose encryption based on identities on CLI - Martin Schanzenbach
+
Tue, 21 Dec 2021 15:27:27 +0100 (ff714cca7)
changed derive_secrets API - Gian Demarmels
diff --git a/bootstrap b/bootstrap
index 766eed237..9d31d7ad7 100755
--- a/bootstrap
+++ b/bootstrap
@@ -97,9 +97,9 @@ submodules()
if ! git --version >/dev/null; then
echo "git not installed, skipping submodule update"
else
- git submodule update --init || exit 1
- git submodule update --remote --recursive || exit 1
- git submodule sync || exit 1
+ git submodule update --init && \
+ git submodule update --remote --recursive && \
+ git submodule sync
fi
}
@@ -112,17 +112,17 @@ gana_update()
cd gnu-name-system-record-types && \
make && \
cp gnu_name_system_record_types.h ../../../src/include/ && \
- make clean
+ make clean || exit 1
cd ../gnu-name-system-default-tlds && \
make && \
cp tlds.conf ../../../src/gns && \
- make clean
+ make clean || exit 1
# Signatures
cd ../gnunet-signatures && \
make && \
cp gnunet_signatures.h ../../../src/include && \
- make clean
+ make clean || exit 1
cd $cwd
else
echo "ERROR: No recutils found! Unable to generate recent GANA headers and configs."
diff --git a/configure.ac b/configure.ac
index 3ccfc9c1b..713817168 100644
--- a/configure.ac
+++ b/configure.ac
@@ -816,6 +816,7 @@ AC_CHECK_LIB([kvm], [kvm_open])
AC_CHECK_LIB([kstat], [kstat_open])
# check for libsodium version >= 1.0.18
+libsodium=0
AC_CHECK_HEADER([sodium.h],
[AC_CHECK_LIB([sodium], [crypto_core_ed25519_scalar_mul],
[libsodium=1],
diff --git a/contrib/Makefile.am b/contrib/Makefile.am
index 4e7928c7e..e05e9caf9 100644
--- a/contrib/Makefile.am
+++ b/contrib/Makefile.am
@@ -206,6 +206,7 @@ EXTRA_DIST = \
docker/README.md \
docker/gnunet.conf \
benchmark/collect.awk \
+ get_version.sh \
gnunet_infrastructure/handbook_pull.sh \
guix.scm \
indent_pre-commit \
diff --git a/contrib/conf/uncrustify.cfg b/contrib/conf/uncrustify.cfg
index 6ced05d7a..b02ebc4a5 100644
--- a/contrib/conf/uncrustify.cfg
+++ b/contrib/conf/uncrustify.cfg
@@ -28,7 +28,7 @@ ls_code_width=true
pos_arith=lead
# Fully parenthesize boolean exprs
-mod_full_paren_if_bool=true
+mod_full_paren_if_bool=false
# Braces should be on their own line
nl_fdef_brace=add
diff --git a/contrib/gana b/contrib/gana
-Subproject 3a71278a2aab67f9a1888af172b507d6e08364c
+Subproject 048ad729b3177a5de1726517bc905e6cd7688d0
diff --git a/contrib/xdg-scheme-handler/README.md b/contrib/xdg-scheme-handler/README.md
index 919ae37f8..07ff87bdc 100644
--- a/contrib/xdg-scheme-handler/README.md
+++ b/contrib/xdg-scheme-handler/README.md
@@ -5,4 +5,4 @@ To register the `gnunet://` URI scheme, launch the following commands from this
directory as a privileged user:
install -Dm644 gnunet-uri.desktop /usr/share/applications/gnunet-uri.desktop
- update-mime-database /usr/share/applications/
+ update-mime-database /usr/share/mime
diff --git a/doc/handbook/chapters/developer.texi b/doc/handbook/chapters/developer.texi
index e3ff20dcd..5f91a646e 100644
--- a/doc/handbook/chapters/developer.texi
+++ b/doc/handbook/chapters/developer.texi
@@ -6250,7 +6250,7 @@ by NAMESTORE.
Here a client uses the @code{GNUNET_NAMESTORE_zone_iteration_start}
function and passes the namestore handle, the zone to iterate over and a
callback function to call with the result.
-If the client wants to iterate over all the WHAT!? FIXME, it passes NULL for the zone.
+To iterate over all the zones, it is possible to pass NULL for the zone.
A @code{GNUNET_NAMESTORE_ZoneIterator} handle is returned to be used to
continue iteration.
diff --git a/doc/handbook/chapters/philosophy.texi b/doc/handbook/chapters/philosophy.texi
index 785a65e42..180589829 100644
--- a/doc/handbook/chapters/philosophy.texi
+++ b/doc/handbook/chapters/philosophy.texi
@@ -7,11 +7,12 @@
@c of GNUnet.
The primary goal of the GNUnet project is to provide a reliable, open,
non-discriminating and censorship-resistant system for information
-exchange. We value free speech above state interests and intellectual
+exchange.
+We value free speech above state interests and intellectual
monopoly. GNUnet's long-term goal is to serve as a development
platform for the next generation of Internet protocols.
-GNUnet is an anarchistic network. Participants are encouraged to
+Participants are encouraged to
contribute at least as much resources (storage, bandwidth) to the network
as they consume, so that their participation does not have a negative
impact on other users.
diff --git a/doc/handbook/chapters/user.texi b/doc/handbook/chapters/user.texi
index aa912f96f..0b44ab57c 100644
--- a/doc/handbook/chapters/user.texi
+++ b/doc/handbook/chapters/user.texi
@@ -1561,6 +1561,9 @@ The GNS currently supports the record types as defined in
@uref{https://git.gnunet.org/gana.git/tree/gnu-name-system-record-types/registry.rec, GANA}.
In addition, GNS supports DNS record types, such as A, AAAA or TXT.
+For a complete description of the records, please refer to the specification
+at @uref{https://lsd.gnunet.org/lsd0001, LSD0001}.
+
In the following, we discuss GNS records with specific behaviour or special
handling of DNS records.
@@ -1570,8 +1573,9 @@ handling of DNS records.
* BOX::
* LEHO::
* VPN::
-* CNAME::
+* REDIRECT::
* GNS2DNS::
+* TOMBSTONE::
* SOA SRV PTR and MX::
@end menu
@@ -1668,11 +1672,11 @@ having the following lines in the @file{gnunet.conf} configuration file:
TCP_REDIRECTS = 80:localhost4:8080
@end example
-@node CNAME
-@subsubsection CNAME
+@node REDIRECT
+@subsubsection REDIRECT
-As specified in RFC 1035 whenever a CNAME is encountered the query
-needs to be restarted with the specified name. In GNS a CNAME
+As specified in LSD0001 whenever a REDIRECT is encountered the query
+needs to be restarted with the specified name. A REDIRECT
can either be:
@itemize @bullet
@@ -1721,6 +1725,21 @@ However, imagine the nameserver was "ns.gnunet.org". In this case,
delegating to "ns.gnunet.org" would mean that despite using GNS,
censorship in the DNS ".org" zone would still be effective.
+@node TOMBSTONE
+@subsubsection TOMBSTONE
+
+The GNUnet GNS implementation uses the TOMBSTONE record to ensure
+ciphertext indistinguishability for published records.
+It must be ensured that when relative expiration times are decreased, the
+expiration time of the next record block MUST be after the last published block.
+A similar issue arises if the record set under a label is deleted and reused
+later.
+
+The creation and maintenance of the TOMBSTONE record is done automatically.
+You do not need to mind it yourself and can safely ignore any TOMBSTONE
+blocks you may see when investigating your zone(s).
+TOMBSTONE records are always private and will never be published.
+
@node SOA SRV PTR and MX
@subsubsection SOA SRV PTR and MX
diff --git a/doc/man/gnunet-search.1 b/doc/man/gnunet-search.1
index 4ec5189de..a3c6e8ece 100644
--- a/doc/man/gnunet-search.1
+++ b/doc/man/gnunet-search.1
@@ -21,7 +21,7 @@
.\"
.\" SPDX-License-Identifier: GPL3.0-or-later OR FDL1.3-or-later
.\"
-.Dd February 25, 2012
+.Dd February 12, 2022
.Dt GNUNET-SEARCH 1
.Os
.Sh NAME
@@ -30,13 +30,18 @@
.Sh SYNOPSIS
.Nm
.Op Fl a Ar LEVEL | Fl -anonymity= Ns Ar LEVEL
+.Op Fl b | -bookmark-only
.Op Fl c Ar FILENAME | Fl -config= Ns Ar FILENAME
+.Op Fl F Ar FORMAT | Fl -dir-printf= Ns Ar FORMAT
+.Op Fl f Ar FORMAT | Fl -printf= Ns Ar FORMAT
.Op Fl h | -help
+.Op Fl i Ar FORMAT | Fl -iter-printf= Ns Ar FORMAT
.Op Fl L Ar LOGLEVEL | Fl -loglevel= Ns Ar LOGLEVEL
.Op Fl l Ar FILENAME | Fl -logfile= Ns Ar FILENAME
.Op Fl o Ar FILENAME | Fl -output= Ns Ar FILENAME
.Op Fl n | -no-network
.Op Fl N Ar VALUE | Fl -results= Ns Ar VALUE
+.Op Fl s | -silent
.Op Fl t Ar DELAY | Fl -timeout= Ns Ar DELAY
.Op Fl v | -version
.Op Fl V | -verbose
@@ -63,40 +68,207 @@ The specific numeric value (for anonymity levels above 1) is simple:
Given an anonymity level L (above 1), each request FS makes on your behalf must be hidden in L-1 equivalent requests of cover traffic (traffic your peer routes for others) in the same time-period.
The time-period is twice the average delay by which GNUnet artificially delays traffic.
Note that regardless of the anonymity level you choose, peers that cache content in the network always use anonymity level 1.
+.It Fl b | -bookmark-only
+Do not search, print only the URI that points to the search with the given keywords.
.It Fl c Ar FILENAME | Fl -config= Ns Ar FILENAME
Use the configuration file
.Ar FILENAME
(default:
-.Pa ~/.config/gnunet.conf )
+.Pa ~/.config/gnunet.conf Ns
+).
+.It Fl F Ar FORMAT | Fl -dir-printf= Ns Ar FORMAT
+Write the search results for directories according to
+.Ar FORMAT Ns
+\&. The directives supported here are identical to those supported in the
+.Fl -printf
+argument (please refer to it for more information). If missing,
+.Fl -dir-printf
+defaults to
+.Fl -printf Ns
+\&. If
+.Fl -printf
+is missing too
+.Fl -dir-printf
+defaults to
+.Ql #%n:\engnunet-download -o "%f" -R %u\en\en Ns
+\&.
+.It Fl f Ar FORMAT | Fl -printf= Ns Ar FORMAT
+Write the search results according to
+.Ar FORMAT Ns
+, in which
+.Ql \e
+and
+.Ql %
+directives are interpreted as follows:
+.Bl -tag -width indent
+.It Li \e\e
+a literal backslash
+.No ( Ql \e Ns )
+.It Li \ea
+an alarm bell
+.It Li \eb
+a backspace
+.It Li \ee
+an escape
+.It Li \ef
+a form feed
+.It Li \en
+a newline
+.It Li \er
+a carriage return
+.It Li \et
+a horizontal tab
+.It Li \ev
+a vertical tab
+.It Li \e0
+an ASCII NUL.
+.It Li \eN...
+the character whose ASCII code is N..., expressed in octal digits
+.It Li \exX...
+the character whose ASCII code is X..., expressed in hexadecimal digits
+.Pp
+.El
+.Sy Note:
+The
+.Ql \e
+character followed by any other character not listed above is treated as an ordinary character, so both characters are printed.
+.Bl -tag -width indent
+.It Li %%
+a percent sign
+.It Li %a
+the complete list of all the printable metadata properties available, displayed according to the
+.Fl -iter-printf
+argument; this specifier optionally supports metatype filtering via hash sign
+.No (e.g.
+.Ql %2#a
+prints all embedded file names, if present - see libextractor's metatypes for the complete list of numerical identifiers)
+.It Li %f
+the file's name
+.It Li %j
+the first printable metadata property available, displayed according to the
+.Fl -iter-printf
+argument; this specifier optionally supports metatype filtering via hash sign
+.No (e.g.
+.Ql %5#j
+prints a book title, if present); see libextractor's metatypes for the complete list of numerical identifiers)
+.It Li %l
+the file name's length
+.It Li %m
+the file's mime type
+.It Li %n
+the search result number
+.It Li %s
+the file's size in bytes
+.It Li %u
+the file's URI
+.El
+.Pp
+.Sy Note:
+The
+.Ql %
+character followed by any other character not listed above is treated as an ordinary character, so both characters are printed.
+.Pp
+If missing,
+.Fl -printf
+defaults to
+.Ql #%n:\engnunet-download -o "%f" %u\en\en Ns
+\&.
.It Fl h | -help
Print the help page.
+.It Fl i Ar FORMAT | Fl -iter-printf= Ns Ar FORMAT
+When the
+.Ql %a
+or
+.Ql %j
+format specifiers appear in
+.Fl -printf
+or
+.Fl -dir-printf Ns
+, list each metadata property according to
+.Ar FORMAT Ns
+, in which the
+.Ql \e
+directives are interpreted as in
+.Fl -printf
+and
+.Fl -dir-printf Ns
+, while the
+.Ql %
+directives are interpreted as follows:
+.Bl -tag -width indent
+.It Li %%
+a percent sign
+.It Li %p
+the property's content
+.It Li %l
+the property content's length in bytes
+.It Li %i
+the property type's unique identifier
+.It Li %n
+the property number
+.It Li %t
+the property type (available only if compiled with libextractor)
+.It Li %w
+the name of the plugin that provided the information
+.El
+.Pp
+.Sy Note:
+The
+.Ql %
+character followed by any other character not listed above is treated as an ordinary character, so both characters are printed.
+.Pp
+If missing,
+.Fl -iter-printf
+defaults to
+.Ql \& \& %t: %p\en
+or
+.Ql \& \& MetaType #%i: %p\en Ns
+, depending on whether the program was compiled with libextractor or not.
.It Fl L Ar LOGLEVEL | Fl -loglevel= Ns Ar LOGLEVEL
Change the loglevel.
-Possible values for LOGLEVEL are ERROR, WARNING, INFO and DEBUG.
+Possible values for
+.Ar LOGLEVEL
+are ERROR, WARNING, INFO and DEBUG.
.It Fl l Ar FILENAME | Fl -logfile= Ns Ar FILENAME
Write logs to
.Ar FILENAME .
.It Fl o Ar FILENAME | Fl -output= Ns Ar FILENAME
Writes a GNUnet directory containing all of the search results to
-.Ar FILENAME .
+.Ar FILENAME
+.No (e.g.
+.Ql gnunet-search --output=commons.gnd commons Ns
+).
.It Fl n | -no-network
Only search locally, do not forward requests to other peers.
.It Fl N Ar VALUE | Fl -results= Ns Ar VALUE
Automatically terminate the search after receiving
.Ar VALUE
results.
+.It Fl s | -silent
+Enable silent mode and do not print any result (the
+.Fl -output
+argument is required).
.It Fl t Ar DELAY | Fl -timeout= Ns Ar DELAY
Automatically timeout search after
.Ar DELAY .
The value given must be a number followed by a space and a time unit, for example "500 ms".
-Note that the quotes are required on the shell.
-Otherwise the search runs until gnunet-search is aborted with CTRL-C.
+Note that the quotes are required on the shell. Without a unit it defaults to microseconds (1000000 = 1 second).
+If 0 or omitted the search runs until gnunet-search is aborted with CTRL-C.
.It Fl v | -version
print the version number
.It Fl V | -verbose
-print meta data from search results as well
+append
+.Ql %a\en
+to the default
+.Fl -printf
+and
+.Fl -dir-printf
+arguments \[u2013] ignored when these are provided by the user
.El
-You can run gnunet-search with an URI instead of a keyword.
+.Pp
+It is possible to run
+.Nm gnunet-search
+with an URI instead of a keyword.
The URI can have the format for a namespace search or for a keyword search.
For a namespace search, the format is
.Pp
@@ -108,46 +280,137 @@ For a keyword search, use
.Pp
If the format does not correspond to a GNUnet URI, GNUnet will automatically assume that keywords are supplied directly.
.sp
-If multiple keywords are passed, gnunet-search will look for content matching any of the keywords.
-The prefix "+" makes a keyword mandatory.
+If multiple keywords are passed,
+.Nm gnunet-search
+will look for content matching any of the keywords.
+The
+.Ql +
+prefix makes a keyword mandatory.
.Sh FILES
.Pa ~/.config/gnunet.conf
GNUnet configuration file; specifies the default value for the timeout
.Sh EXAMPLES
-.Dl $ gnunet-search "Das Kapital"
+Example 1:
+.Pp
+.Dl $ gnunet-search 'Das Kapital'
.Pp
-Searches for content matching the keyword "Das Kapital".
+searches for content matching the keyword
+.Dq Das Kapital Ns
+.
+.Pp
+Example 2:
+.Pp
+.Dl $ gnunet-search Das Kapital
+.Pp
+searches for content matching either keyword
+.Dq Das
+or keyword
+.Dq Kapital Ns
+.
+.Pp
+Example 3:
.Pp
.Dl $ gnunet-search +Das +Kapital
.Pp
-Searches for content matching both mandatory keywords "Das" and "Kapital".
+searches for content matching both mandatory keywords
+.Dq Das
+and
+.Dq Kapital Ns
+.
.sp
-Search results are printed by gnunet-search like this:
+Search results are printed by
+.Nm gnunet-search
+like this:
.Pp
.ad l
gnunet-download -o "COPYING" gnunet://fs/chk/HASH1.HASH2.SIZE
- Description: The GNU General Public License
- Mime-type: text/plain
+.Pp
+ Description: The GNU General Public License
+ Mime-type: text/plain
+ ...
.ad b
-
+.Pp
The first line contains the command to run to download the file.
-The suggested filename in the example is COPYING.
-The GNUnet URI consists of the key and query hash of the file and finally the size of the file.
-After the command to download the file, GNUnet will print meta-data about the file as advertised in the search result.
-The meta-data here is the description ("The GNU General Public License") and the mime-type ("text-plain").
+The suggested filename in the example is
+.Ql COPYING Ns
+\&. The GNUnet URI consists of the key and query hash of the file and finally the size of the file.
+If the
+.Fl -verbose
+option was provided, after the command to download the file, GNUnet will print metadata about the file as advertised in the search result.
+The metadata here is the description
+.No ( Ns
+.Dq The GNU General Public License Ns
+) and the mime-type
+.No ( Ns
+.Dq text-plain Ns
+).
See the options for
.Xr gnunet-publish 1
-on how to supply meta-data by hand.
+on how to supply metadata by hand.
+.Pp
+The
+.Fl -printf
+.No ( Ns
+.Fl f Ns
+),
+.Fl -dir-printf
+.No ( Ns
+.Fl F Ns
+) and
+.Fl -iter-printf
+.No ( Ns
+.Fl i Ns
+) arguments offer powerful tools for manipulating the output printed. For instance,
+.Pp
+Example 4:
+.Pp
+.ad l
+ $ gnunet-search -f '%f (%s bytes)\en' commons
+.Pp
+will print a simple list of the results that match the
+.Dq commons
+keyword, with only the file name and the size printed, without any URI. Or, for instance,
+.Pp
+Example 5:
+.Pp
+.ad l
+ #!/bin/sh
+ {
+ printf '<list>'
+ gnunet-search -f '
+ <file uri="%u">
+ <filename len="%l">%f</filename>
+ <size>%s</size>
+ <mimetype>%m</mimetype>
+ <result_id>%n</result_id>
+ <metadata>%a
+ </metadata>
+ </file>' \e
+ -i '
+ <property tid="%i" type="%t">
+ <content len="%l">%p</content>
+ <property_id>%n</property_id>
+ <provided_by>%w</provided_by>
+ </property>' \e
+ -t '2 s' commons
+ printf '\en</list>\en'
+ } > commons.xml
+.Pp
+will run for two seconds and then create a file named
+.Pa commons.xml Ns
+, containing the search results that match the
+.Dq commons
+keyword in XML format.
.Sh SEE ALSO
.Xr gnunet-download 1 ,
.Xr gnunet-fs-gtk 1 ,
.Xr gnunet-publish 1 ,
.Xr gnunet.conf 5
.sp
-The full documentation for gnunet is maintained as a Texinfo manual.
+The full documentation for GNUnet is maintained as a Texinfo manual.
If the
.Xr info 1
-and gnunet programs are properly installed at your site, the command
+and gnunet packages are properly installed at your site, the command
.Pp
.Dl info gnunet
.Pp
diff --git a/doc/tutorial/tutorial.texi b/doc/tutorial/tutorial.texi
index 0a011c0c8..f849e116a 100644
--- a/doc/tutorial/tutorial.texi
+++ b/doc/tutorial/tutorial.texi
@@ -225,7 +225,7 @@ This is required for obtaining the repository, which is achieved with
the following command:
@example
-$ git clone https://git.gnunet.org/gnunet
+$ git clone https://git.gnunet.org/gnunet.git
@end example
@noindent
@@ -795,7 +795,7 @@ a template build system for writing GNUnet extensions in C. It can be
obtained as follows:
@example
-$ git clone https://git.gnunet.org/gnunet-ext
+$ git clone https://git.gnunet.org/gnunet-ext.git
$ cd gnunet-ext/
$ ./bootstrap
$ ./configure --prefix=$PREFIX --with-gnunet=$PREFIX
diff --git a/po/POTFILES.in b/po/POTFILES.in
index ad5c68056..64df0a13b 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -10,14 +10,13 @@ src/arm/arm_monitor_api.c
src/arm/gnunet-arm.c
src/arm/gnunet-service-arm.c
src/arm/mockup-service.c
-src/ats-tool/gnunet-ats.c
src/ats/ats_api_connectivity.c
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.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_normalization.c
src/ats/gnunet-service-ats_performance.c
@@ -26,6 +25,7 @@ src/ats/gnunet-service-ats_preferences.c
src/ats/gnunet-service-ats_reservations.c
src/ats/gnunet-service-ats_scheduling.c
src/ats/plugin_ats_proportional.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
@@ -43,8 +43,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
@@ -60,15 +60,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
@@ -97,16 +97,15 @@ src/datastore/plugin_datastore_template.c
src/dht/dht_api.c
src/dht/dht_test_lib.c
src/dht/gnunet-dht-get.c
+src/dht/gnunet-dht-hello.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
src/dht/gnunet-service-dht_datacache.c
-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/dhtu/plugin_dhtu_gnunet.c
src/dhtu/plugin_dhtu_ip.c
@@ -144,8 +143,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
@@ -165,9 +164,9 @@ 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-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
@@ -183,11 +182,11 @@ src/gnsrecord/gnsrecord_serialization.c
src/gnsrecord/gnunet-gnsrecord-tvg.c
src/gnsrecord/json_gnsrecord.c
src/gnsrecord/plugin_gnsrecord_dns.c
-src/gnsrecord/test.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/hello/hello-uri.c
src/hostlist/gnunet-daemon-hostlist.c
src/hostlist/gnunet-daemon-hostlist_client.c
src/hostlist/gnunet-daemon-hostlist_server.c
@@ -203,8 +202,8 @@ src/json/json_helper.c
src/json/json_mhd.c
src/json/json_pack.c
src/messenger/gnunet-messenger.c
-src/messenger/gnunet-service-messenger.c
src/messenger/gnunet-service-messenger_basement.c
+src/messenger/gnunet-service-messenger.c
src/messenger/gnunet-service-messenger_ego_store.c
src/messenger/gnunet-service-messenger_handle.c
src/messenger/gnunet-service-messenger_list_handles.c
@@ -244,8 +243,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
@@ -271,17 +270,17 @@ 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-tool/plugin_rest_peerinfo.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/peerinfo-tool/plugin_rest_peerinfo.c
src/peerstore/gnunet-peerstore.c
src/peerstore/gnunet-service-peerstore.c
src/peerstore/peerstore_api.c
@@ -315,7 +314,6 @@ src/reclaim/plugin_rest_reclaim.c
src/reclaim/reclaim_api.c
src/reclaim/reclaim_attribute.c
src/reclaim/reclaim_credential.c
-src/reclaim/test.c
src/regex/gnunet-daemon-regexprofiler.c
src/regex/gnunet-regex-profiler.c
src/regex/gnunet-regex-simulation-profiler.c
@@ -334,27 +332,27 @@ src/rest/gnunet-rest-server.c
src/rest/plugin_rest_config.c
src/rest/plugin_rest_copying.c
src/rest/rest.c
-src/revocation/gnunet-revocation-tvg.c
src/revocation/gnunet-revocation.c
+src/revocation/gnunet-revocation-tvg.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
@@ -368,12 +366,12 @@ src/set/gnunet-set-ibf-profiler.c
src/set/gnunet-set-profiler.c
src/set/ibf.c
src/set/ibf_sim.c
-src/set/plugin_block_set_test.c
-src/set/set_api.c
src/seti/gnunet-service-seti.c
src/seti/gnunet-seti-profiler.c
src/seti/plugin_block_seti_test.c
src/seti/seti_api.c
+src/set/plugin_block_set_test.c
+src/set/set_api.c
src/setu/gnunet-service-setu.c
src/setu/gnunet-service-setu_strata_estimator.c
src/setu/gnunet-setu-ibf-profiler.c
@@ -392,16 +390,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
@@ -410,23 +407,23 @@ 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/testbed_api.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-cmds-helper.c
src/testing/gnunet-testing.c
src/testing/list-keys.c
-src/testing/testing.c
src/testing/testing_api_cmd_batch.c
src/testing/testing_api_cmd_block_until_external_trigger.c
src/testing/testing_api_cmd_end.c
@@ -442,51 +439,41 @@ src/testing/testing_api_cmd_system_create.c
src/testing/testing_api_cmd_system_destroy.c
src/testing/testing_api_loop.c
src/testing/testing_api_traits.c
+src/testing/testing.c
src/topology/friends.c
src/topology/gnunet-daemon-topology.c
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-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/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-communicator.c
-src/transport/transport-testing-filenames.c
-src/transport/transport-testing-filenames2.c
-src/transport/transport-testing-loggers.c
-src/transport/transport-testing-loggers2.c
-src/transport/transport-testing-main.c
-src/transport/transport-testing-main2.c
-src/transport/transport-testing-send.c
-src/transport/transport-testing-send2.c
-src/transport/transport-testing.c
-src/transport/transport-testing2.c
src/transport/transport_api2_application.c
src/transport/transport_api2_communication.c
src/transport/transport_api2_core.c
@@ -505,6 +492,17 @@ src/transport/transport_api_monitor_peers.c
src/transport/transport_api_monitor_plugins.c
src/transport/transport_api_offer_hello.c
src/transport/transport_api_traits.c
+src/transport/transport-testing2.c
+src/transport/transport-testing.c
+src/transport/transport-testing-communicator.c
+src/transport/transport-testing-filenames2.c
+src/transport/transport-testing-filenames.c
+src/transport/transport-testing-loggers2.c
+src/transport/transport-testing-loggers.c
+src/transport/transport-testing-main2.c
+src/transport/transport-testing-main.c
+src/transport/transport-testing-send2.c
+src/transport/transport-testing-send.c
src/util/bandwidth.c
src/util/benchmark.c
src/util/bio.c
@@ -520,8 +518,8 @@ src/util/consttime_memcmp.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/container_multiuuidmap.c
@@ -548,8 +546,8 @@ src/util/dnsstub.c
src/util/getopt.c
src/util/getopt_helpers.c
src/util/gnunet-base32.c
-src/util/gnunet-config-diff.c
src/util/gnunet-config.c
+src/util/gnunet-config-diff.c
src/util/gnunet-crypto-tvg.c
src/util/gnunet-ecc.c
src/util/gnunet-qr.c
@@ -587,8 +585,8 @@ src/vpn/gnunet-helper-vpn.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/gnunet_json_lib.h
src/testbed/testbed_api.h
diff --git a/po/de.po b/po/de.po
index 678ba739f..a30b16bc2 100644
--- a/po/de.po
+++ b/po/de.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gnunet 0.10.1\n"
"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2022-01-10 15:13+0100\n"
+"POT-Creation-Date: 2022-03-04 22:23+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,7 +21,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 1.7.4\n"
-#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1304
+#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1254
#, fuzzy, c-format
msgid "Ego `%s' not known to identity service\n"
msgstr "`%s': unbekannter Dienst: %s\n"
@@ -33,7 +33,7 @@ msgstr ""
#: src/abd/gnunet-abd.c:558 src/abd/gnunet-service-abd.c:1751
#: src/namestore/gnunet-namestore-fcfsd.c:1080
-#: src/namestore/gnunet-namestore.c:1001
+#: src/namestore/gnunet-namestore.c:951
#, fuzzy, c-format
msgid "Failed to connect to namestore\n"
msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
@@ -621,44 +621,44 @@ msgstr ""
msgid "Print information about ATS state"
msgstr "Informationen über andere GNUnet Knoten ausgeben."
-#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044
+#: src/ats/gnunet-ats-solver-eval.c:2993 src/ats/gnunet-ats-solver-eval.c:3045
#, c-format
msgid ""
"Could not load quota for network `%s': `%s', assigning default bandwidth "
"%llu\n"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3011
+#: src/ats/gnunet-ats-solver-eval.c:3012
#, c-format
msgid ""
"No outbound quota configured for network `%s', assigning default bandwidth "
"%llu\n"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3063
+#: src/ats/gnunet-ats-solver-eval.c:3064
#, c-format
msgid ""
"No outbound quota configure for network `%s', assigning default bandwidth "
"%llu\n"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3552
+#: src/ats/gnunet-ats-solver-eval.c:3553
msgid "solver to use"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3557
+#: src/ats/gnunet-ats-solver-eval.c:3558
msgid "experiment to use"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3564
+#: src/ats/gnunet-ats-solver-eval.c:3565
msgid "print logging"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3569
+#: src/ats/gnunet-ats-solver-eval.c:3570
msgid "save logging to disk"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3574
+#: src/ats/gnunet-ats-solver-eval.c:3575
msgid "disable normalization"
msgstr ""
@@ -1540,39 +1540,7 @@ msgstr "# Bytes empfangen über TCP"
msgid "# updates to my type map"
msgstr ""
-#: src/datacache/datacache.c:117 src/datacache/datacache.c:275
-#: src/datastore/gnunet-service-datastore.c:743
-msgid "# bytes stored"
-msgstr "# gespeicherte Bytes"
-
-#: src/datacache/datacache.c:121 src/datacache/datacache.c:279
-msgid "# items stored"
-msgstr "# gespeicherte Objekte"
-
-#: src/datacache/datacache.c:185
-#, c-format
-msgid "Loading `%s' datacache plugin\n"
-msgstr ""
-
-#: src/datacache/datacache.c:203
-#, 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:297
-msgid "# requests received"
-msgstr "# Anfragen empfangen"
-
-#: src/datacache/datacache.c:308
-msgid "# requests filtered by bloom filter"
-msgstr ""
-
-#: src/datacache/datacache.c:329
-#, fuzzy
-msgid "# proximity search requests received"
-msgstr "# Klartext PONG Nachrichten empfangen"
-
-#: src/datacache/plugin_datacache_heap.c:527
+#: src/datacache/plugin_datacache_heap.c:555
msgid "Heap datacache running\n"
msgstr ""
@@ -1594,7 +1562,7 @@ msgstr ""
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:693
+#: src/datacache/plugin_datacache_sqlite.c:723
#: src/datastore/plugin_datastore_sqlite.c:531
#: src/namecache/plugin_namecache_sqlite.c:237
#: src/namestore/plugin_namestore_sqlite.c:273
@@ -1783,6 +1751,10 @@ msgstr ""
msgid "Could not find matching reservation"
msgstr ""
+#: src/datastore/gnunet-service-datastore.c:743
+msgid "# bytes stored"
+msgstr "# gespeicherte Bytes"
+
#: src/datastore/gnunet-service-datastore.c:758
#, c-format
msgid "Need %llu bytes more space (%llu allowed, using %llu)\n"
@@ -1970,7 +1942,7 @@ msgstr ""
#: src/datastore/plugin_datastore_sqlite.c:1337
#: src/namecache/plugin_namecache_sqlite.c:564
-#: src/namestore/plugin_namestore_sqlite.c:765
+#: src/namestore/plugin_namestore_sqlite.c:775
msgid "Sqlite database running\n"
msgstr "Sqlite-Datenbank läuft\n"
@@ -1978,55 +1950,65 @@ msgstr "Sqlite-Datenbank läuft\n"
msgid "Template database running\n"
msgstr ""
-#: src/dht/gnunet-dht-get.c:159
+#: src/dht/gnunet-dht-get.c:164
#, c-format
msgid ""
"Result %d, type %d:\n"
"%.*s\n"
msgstr ""
-#: src/dht/gnunet-dht-get.c:160
+#: src/dht/gnunet-dht-get.c:165
#, c-format
msgid "Result %d, type %d:\n"
msgstr ""
-#: src/dht/gnunet-dht-get.c:209
+#: src/dht/gnunet-dht-get.c:215
msgid "Must provide key for DHT GET!\n"
msgstr ""
-#: src/dht/gnunet-dht-get.c:217 src/dht/gnunet-dht-monitor.c:255
+#: src/dht/gnunet-dht-get.c:223 src/dht/gnunet-dht-hello.c:119
+#: src/dht/gnunet-dht-monitor.c:255
+#, c-format
msgid "Failed to connect to DHT service!\n"
msgstr "Verbindung zum DHT-Dienst ist fehlgeschlagen!\n"
-#: src/dht/gnunet-dht-get.c:227
+#: src/dht/gnunet-dht-get.c:233
msgid "Issuing DHT GET with key"
msgstr ""
-#: src/dht/gnunet-dht-get.c:260 src/dht/gnunet-dht-monitor.c:302
+#: src/dht/gnunet-dht-get.c:269 src/dht/gnunet-dht-monitor.c:302
#: src/dht/gnunet-dht-put.c:200
msgid "the query key"
msgstr ""
-#: src/dht/gnunet-dht-get.c:266
+#: src/dht/gnunet-dht-get.c:275
msgid "how many parallel requests (replicas) to create"
msgstr ""
-#: src/dht/gnunet-dht-get.c:272 src/dht/gnunet-dht-monitor.c:308
+#: src/dht/gnunet-dht-get.c:280 src/dht/gnunet-dht-put.c:217
+msgid "use DHT's record route option"
+msgstr ""
+
+#: src/dht/gnunet-dht-get.c:286 src/dht/gnunet-dht-monitor.c:308
msgid "the type of data to look for"
msgstr ""
-#: src/dht/gnunet-dht-get.c:278
+#: src/dht/gnunet-dht-get.c:292
msgid "how long to execute this query before giving up?"
msgstr ""
-#: src/dht/gnunet-dht-get.c:284 src/dht/gnunet-dht-put.c:206
+#: src/dht/gnunet-dht-get.c:298 src/dht/gnunet-dht-put.c:206
msgid "use DHT's demultiplex everywhere option"
msgstr ""
-#: src/dht/gnunet-dht-get.c:301
+#: src/dht/gnunet-dht-get.c:315
msgid "Issue a GET request to the GNUnet DHT, prints results."
msgstr ""
+#: src/dht/gnunet-dht-hello.c:166
+msgid "Obtain HELLO from DHT or provide HELLO to DHT for bootstrapping"
+msgstr ""
+
#: src/dht/gnunet-dht-monitor.c:315
msgid "how long should the monitor command run"
msgstr ""
@@ -2066,10 +2048,6 @@ msgstr ""
msgid "how many replicas to create"
msgstr ""
-#: src/dht/gnunet-dht-put.c:217
-msgid "use DHT's record route option"
-msgstr ""
-
#: src/dht/gnunet-dht-put.c:223
msgid "the type to insert data as"
msgstr ""
@@ -2125,17 +2103,17 @@ msgstr ""
msgid "Measure quality and performance of the DHT service."
msgstr ""
-#: src/dht/plugin_block_dht.c:328
+#: src/dht/plugin_block_dht.c:404
#, fuzzy, c-format
msgid "Block not of type %u\n"
msgstr "Kein Transport des Typs %d bekannt.\n"
-#: src/dht/plugin_block_dht.c:337
+#: src/dht/plugin_block_dht.c:413
#, c-format
msgid "Size mismatch for block with type %u\n"
msgstr ""
-#: src/dht/plugin_block_dht.c:348
+#: src/dht/plugin_block_dht.c:424
#, c-format
msgid "Block of type %u is malformed\n"
msgstr ""
@@ -2872,20 +2850,20 @@ msgstr ""
msgid "LOC URI malformed (signature failed validation)"
msgstr ""
-#: src/fs/fs_uri.c:653
+#: src/fs/fs_uri.c:652
#, fuzzy
msgid "invalid argument"
msgstr "Ungültiges Argument »%s«\n"
-#: src/fs/fs_uri.c:665
+#: src/fs/fs_uri.c:671
msgid "Unrecognized URI type"
msgstr ""
-#: src/fs/fs_uri.c:1071 src/fs/fs_uri.c:1098
+#: src/fs/fs_uri.c:1075 src/fs/fs_uri.c:1102
msgid "No keywords specified!\n"
msgstr "Keine Schlüsselwörter angegeben!\n"
-#: src/fs/fs_uri.c:1104
+#: src/fs/fs_uri.c:1108
msgid "Number of double-quotes not balanced!\n"
msgstr ""
@@ -3012,7 +2990,7 @@ msgid "Downloading `%s' done (%s/s).\n"
msgstr "Dateien aus dem GNUnet herunterladen."
#: src/fs/gnunet-download.c:206 src/fs/gnunet-publish.c:299
-#: src/fs/gnunet-search.c:229 src/fs/gnunet-unindex.c:117
+#: src/fs/gnunet-search.c:538 src/fs/gnunet-unindex.c:117
#, c-format
msgid "Unexpected status: %d\n"
msgstr ""
@@ -3036,12 +3014,12 @@ msgid "Target filename must be specified.\n"
msgstr ""
#: src/fs/gnunet-download.c:271 src/fs/gnunet-publish.c:869
-#: src/fs/gnunet-search.c:294 src/fs/gnunet-unindex.c:154
+#: src/fs/gnunet-unindex.c:154
#, fuzzy, c-format
msgid "Could not initialize `%s' subsystem.\n"
msgstr "`%s' Dienst konnte nicht initialisiert werden.\n"
-#: src/fs/gnunet-download.c:318 src/fs/gnunet-search.c:334
+#: src/fs/gnunet-download.c:318
msgid "set the desired LEVEL of receiver-anonymity"
msgstr "Den Grad LEVEL der gewünschten Empfänger-Anonymität setzen"
@@ -3049,7 +3027,7 @@ msgstr "Den Grad LEVEL der gewünschten Empfänger-Anonymität setzen"
msgid "delete incomplete downloads (when aborted with CTRL-C)"
msgstr ""
-#: src/fs/gnunet-download.c:330 src/fs/gnunet-search.c:339
+#: src/fs/gnunet-download.c:330 src/fs/gnunet-search.c:740
msgid "only search the local peer (no P2P network search)"
msgstr ""
@@ -3307,39 +3285,112 @@ msgstr ""
msgid "Publish a file or directory on GNUnet"
msgstr ""
-#: src/fs/gnunet-search.c:130
+#: src/fs/gnunet-search.c:441
#, c-format
msgid "Failed to write directory with search results to `%s'\n"
msgstr ""
-#: src/fs/gnunet-search.c:219
+#: src/fs/gnunet-search.c:527
#, fuzzy, c-format
msgid "Error searching: %s.\n"
msgstr "Fehler beim Verlassen der DHT.\n"
-#: src/fs/gnunet-search.c:281
+#: src/fs/gnunet-search.c:587
+#, c-format
+msgid "Conflicting options --bookmark-only and --silent.\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:594
+#, c-format
+msgid "Conflicting options --bookmark-only and --output.\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:600
+#, c-format
+msgid "An output file is mandatory for silent mode.\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:621
msgid "Could not create keyword URI from arguments.\n"
msgstr ""
-#: src/fs/gnunet-search.c:308
+#: src/fs/gnunet-search.c:629
+msgid ""
+"Invalid URI. Valid URIs for searching are keyword query URIs\n"
+"(\"gnunet://fs/ksk/...\") and namespace content URIs (\"gnunet://fs/sks/..."
+"\").\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:654
+#, fuzzy, c-format
+msgid "Could not initialize the `%s` subsystem.\n"
+msgstr "`%s' Dienst konnte nicht initialisiert werden.\n"
+
+#: src/fs/gnunet-search.c:668
#, fuzzy
msgid "Could not start searching.\n"
msgstr "Fehler beim Starten der Collection.\n"
-#: src/fs/gnunet-search.c:345
-msgid "write search results to file starting with PREFIX"
+#: src/fs/gnunet-search.c:694
+#, fuzzy
+msgid "set the desired LEVEL of receiver-anonymity (default: 1)"
+msgstr "Den Grad LEVEL der gewünschten Empfänger-Anonymität setzen"
+
+#: src/fs/gnunet-search.c:700
+msgid "do not search, print only the URI that points to this search"
msgstr ""
-#: src/fs/gnunet-search.c:351
-msgid "automatically terminate search after DELAY"
+#: src/fs/gnunet-search.c:707
+msgid ""
+"write search results for directories according to FORMAT; accepted "
+"placeholders are: %a, %f, %j, %l, %m, %n, %s; defaults to the value of --"
+"printf when omitted or to `"
msgstr ""
-#: src/fs/gnunet-search.c:357
+#: src/fs/gnunet-search.c:717
+msgid ""
+"write search results according to FORMAT; accepted placeholders are: %a, %f, "
+"%j, %l, %m, %n, %s; defaults to `"
+msgstr ""
+
+#: src/fs/gnunet-search.c:725
+msgid ""
+"when the %a or %j placeholders appear in --printf or --dir-printf, list each "
+"metadata property according to FORMAT; accepted placeholders are: %i, %l, "
+"%n, %p"
+msgstr ""
+
+#: src/fs/gnunet-search.c:734
msgid "automatically terminate search after VALUE results are found"
msgstr ""
-#: src/fs/gnunet-search.c:371
-msgid "Search GNUnet for files that were published on GNUnet"
+#: src/fs/gnunet-search.c:746
+msgid ""
+"create a GNUnet directory with search results at FILENAME (e.g. `gnunet-"
+"search --output=commons"
+msgstr ""
+
+#: src/fs/gnunet-search.c:753
+msgid "silent mode (requires the --output argument)"
+msgstr ""
+
+#: src/fs/gnunet-search.c:759
+msgid ""
+"automatically terminate search after DELAY; the value given must be a number "
+"followed by a space and a time unit, for example \"500 ms\"; without a unit "
+"it defaults to microseconds - 1000000 = 1 second; if 0 or omitted it means "
+"to wait for CTRL-C"
+msgstr ""
+
+#: src/fs/gnunet-search.c:768
+#, c-format
+msgid ""
+"be verbose (append \"%a\\n\" to the default --printf and --dir-printf "
+"arguments - ignored when these are provided by the user)"
+msgstr ""
+
+#: src/fs/gnunet-search.c:781
+msgid "Search for files that have been published on GNUnet\n"
msgstr ""
#: src/fs/gnunet-service-fs.c:371 src/fs/gnunet-service-fs.c:878
@@ -3691,67 +3742,72 @@ msgstr ""
msgid "Expected a base32-encoded public zone key\n"
msgstr ""
-#: src/gns/gnunet-bcd.c:571
+#: src/gns/gnunet-bcd.c:573
#, fuzzy, c-format
msgid "Invalid port number %u\n"
msgstr "Ungültige Parameter. Abbruch.\n"
-#: src/gns/gnunet-bcd.c:612 src/namestore/gnunet-namestore-fcfsd.c:1113
+#: src/gns/gnunet-bcd.c:614 src/namestore/gnunet-namestore-fcfsd.c:1113
#, fuzzy
msgid "Unable to set up the daemon\n"
msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
-#: src/gns/gnunet-bcd.c:635 src/namestore/gnunet-namestore-fcfsd.c:987
+#: src/gns/gnunet-bcd.c:637 src/namestore/gnunet-namestore-fcfsd.c:987
#, fuzzy
msgid "Failed to start HTTP server\n"
msgstr "Fehler beim Senden einer `%s' Anfrage an den SMTP Server.\n"
-#: src/gns/gnunet-bcd.c:658
+#: src/gns/gnunet-bcd.c:660
msgid "Run HTTP server on port PORT (default is 8888)"
msgstr ""
-#: src/gns/gnunet-bcd.c:667
+#: src/gns/gnunet-bcd.c:669
msgid "GNUnet HTTP server to create business cards"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:241
+#: src/gns/gnunet-dns2gns.c:298
msgid "Failed to pack DNS response into UDP packet!\n"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:315
+#: src/gns/gnunet-dns2gns.c:379
#, fuzzy
msgid "Failed to parse DNS response!\n"
msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
-#: src/gns/gnunet-dns2gns.c:452
+#: src/gns/gnunet-dns2gns.c:453
+#, c-format
+msgid "VPN returned empty result for `%s'\n"
+msgstr ""
+
+#: src/gns/gnunet-dns2gns.c:655
#, c-format
msgid "Cannot parse DNS request from %s\n"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:468
+#: src/gns/gnunet-dns2gns.c:671
#, 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:476
+#: src/gns/gnunet-dns2gns.c:679
#, 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:637
+#: src/gns/gnunet-dns2gns.c:840
#, fuzzy
msgid "No DNS server specified!\n"
msgstr "Keine Schlüsselwörter angegeben!\n"
-#: src/gns/gnunet-dns2gns.c:786
+#: src/gns/gnunet-dns2gns.c:995
msgid "IP of recursive DNS resolver to use (required)"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:792
+#: src/gns/gnunet-dns2gns.c:1001
msgid "UDP port to listen on for inbound DNS requests; default: 2853"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:809
+#: src/gns/gnunet-dns2gns.c:1018
msgid "GNUnet DNS-to-GNS proxy (a DNS server)"
msgstr ""
@@ -3933,19 +3989,19 @@ msgstr ""
msgid "GNUnet GNS resolver tool"
msgstr "GNUnet Netzwerk Topologie tracen."
-#: src/gns/gnunet-service-gns.c:505
+#: src/gns/gnunet-service-gns.c:501
#, fuzzy
msgid "Properly base32-encoded public key required"
msgstr "# Bytes empfangen über TCP"
-#: src/gns/gnunet-service-gns.c:541
+#: src/gns/gnunet-service-gns.c:537
#, 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:560
-#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442
-#: src/zonemaster/gnunet-service-zonemaster.c:885
+#: src/gns/gnunet-service-gns.c:556
+#: src/zonemaster/gnunet-service-zonemaster-monitor.c:421
+#: src/zonemaster/gnunet-service-zonemaster.c:870
#, fuzzy
msgid "Could not connect to DHT!\n"
msgstr "Verbindung zu gnunetd konnte nicht hergestellt werden.\n"
@@ -3960,95 +4016,98 @@ msgstr "Fehler beim Konvertieren von Parametern in URI!\n"
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:706
+#: src/gns/gnunet-service-gns_resolver.c:659
#, c-format
msgid "Protocol `%s' unknown, skipping labels.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:718
+#: src/gns/gnunet-service-gns_resolver.c:671
#, c-format
msgid "Service `%s' unknown for protocol `%s', trying as number.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:724
+#: src/gns/gnunet-service-gns_resolver.c:677
#, fuzzy, c-format
msgid "Service `%s' not a port, skipping service labels.\n"
msgstr "Kommando `%s' wurde nicht gefunden!\n"
-#: src/gns/gnunet-service-gns_resolver.c:938
+#: src/gns/gnunet-service-gns_resolver.c:891
#, fuzzy
msgid "Failed to parse DNS response\n"
msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
-#: src/gns/gnunet-service-gns_resolver.c:1129
+#: src/gns/gnunet-service-gns_resolver.c:1082
#, c-format
msgid "Skipping record of unsupported type %d\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1447
-#, c-format
-msgid "VPN returned empty result for `%s'\n"
-msgstr ""
-
-#: src/gns/gnunet-service-gns_resolver.c:1919
+#: src/gns/gnunet-service-gns_resolver.c:1859
#, c-format
msgid "Name `%s' cannot be converted to IDNA."
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1934
+#: src/gns/gnunet-service-gns_resolver.c:1874
#, c-format
msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1979
+#: src/gns/gnunet-service-gns_resolver.c:1914
#, 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:2406
+#: src/gns/gnunet-service-gns_resolver.c:2312
+msgid "Unable to process critical delegation record\n"
+msgstr ""
+
+#: src/gns/gnunet-service-gns_resolver.c:2317
msgid "GNS lookup recursion failed (no delegation record found)\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2429
+#: src/gns/gnunet-service-gns_resolver.c:2340
#, 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:2594
+#: src/gns/gnunet-service-gns_resolver.c:2505
#, c-format
msgid "GNS namecache returned empty result for `%s'\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2734
+#: src/gns/gnunet-service-gns_resolver.c:2652
#, c-format
msgid "Zone %s was revoked, resolution fails\n"
msgstr ""
-#: src/gns/plugin_gnsrecord_gns.c:174
+#: src/gns/plugin_gnsrecord_gns.c:136
+msgid "This is a memento of an older block for internal maintenance."
+msgstr ""
+
+#: src/gns/plugin_gnsrecord_gns.c:175
#, fuzzy, c-format
msgid "Unable to parse zone key record `%s'\n"
msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n"
-#: src/gns/plugin_gnsrecord_gns.c:187
+#: src/gns/plugin_gnsrecord_gns.c:188
msgid "Record type does not match parsed record type\n"
msgstr ""
-#: src/gns/plugin_gnsrecord_gns.c:213
+#: src/gns/plugin_gnsrecord_gns.c:211
#, fuzzy, c-format
msgid "Unable to parse GNS2DNS record `%s'\n"
msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n"
-#: src/gns/plugin_gnsrecord_gns.c:229
+#: src/gns/plugin_gnsrecord_gns.c:227
#, fuzzy, c-format
msgid "Failed to serialize GNS2DNS record with value `%s': Not a DNS name.\n"
msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
-#: src/gns/plugin_gnsrecord_gns.c:253
+#: src/gns/plugin_gnsrecord_gns.c:251
#, 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:285
+#: src/gns/plugin_gnsrecord_gns.c:283
#, fuzzy, c-format
msgid "Unable to parse BOX record string `%s'\n"
msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':"
@@ -4058,6 +4117,34 @@ msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':"
msgid "Gns REST API initialized\n"
msgstr " Verbindung fehlgeschlagen\n"
+#: src/gnsrecord/gnsrecord_misc.c:448
+msgid "Zone delegation record not allowed in apex."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:456
+msgid "Zone delegation record set contains mutually exclusive records."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:466
+msgid "Multiple REDIRECT records."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:475 src/gnsrecord/gnsrecord_misc.c:501
+msgid "Redirection record set conains mutually exclusive records."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:482
+msgid "Redirection records not allowed in apex."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:493
+msgid "Redirection records not allowed in apex.."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:515
+msgid "Mutually exclusive records."
+msgstr ""
+
#: src/gnsrecord/plugin_gnsrecord_dns.c:367
#, c-format
msgid "Unable to parse IPv4 address `%s'\n"
@@ -4303,7 +4390,7 @@ msgid "# hostlist downloads initiated"
msgstr ""
#: src/hostlist/gnunet-daemon-hostlist_client.c:1144
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1728
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1732
msgid "# milliseconds between hostlist downloads"
msgstr ""
@@ -4364,21 +4451,21 @@ msgstr ""
msgid "# hostlist URIs written to file"
msgstr ""
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1657
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1661
#: src/transport/plugin_transport_http_client.c:2300
#, c-format
msgid "Invalid proxy type: `%s', disabling proxy! Check configuration!\n"
msgstr ""
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1686
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1690
msgid "Learning is enabled on this peer\n"
msgstr ""
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1699
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1703
msgid "Learning is not enabled on this peer\n"
msgstr ""
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1713
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1717
#, c-format
msgid ""
"Since learning is not enabled on this peer, hostlist file `%s' was removed\n"
@@ -4570,49 +4657,49 @@ msgstr ""
msgid "Maintain egos"
msgstr ""
-#: src/identity/gnunet-service-identity.c:503
+#: src/identity/gnunet-service-identity.c:502
msgid "no default known"
msgstr ""
-#: src/identity/gnunet-service-identity.c:528
+#: src/identity/gnunet-service-identity.c:527
msgid "default configured, but ego unknown (internal error)"
msgstr ""
-#: src/identity/gnunet-service-identity.c:621
-#: src/identity/gnunet-service-identity.c:896
-#: src/identity/gnunet-service-identity.c:1016
+#: src/identity/gnunet-service-identity.c:620
+#: src/identity/gnunet-service-identity.c:895
+#: src/identity/gnunet-service-identity.c:1015
#, 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:631
+#: src/identity/gnunet-service-identity.c:630
msgid "Unknown ego specified for service (internal error)"
msgstr ""
-#: src/identity/gnunet-service-identity.c:725
+#: src/identity/gnunet-service-identity.c:724
msgid "identifier already in use for another ego"
msgstr ""
-#: src/identity/gnunet-service-identity.c:872
+#: src/identity/gnunet-service-identity.c:871
msgid "target name already exists"
msgstr ""
-#: src/identity/gnunet-service-identity.c:914
-#: src/identity/gnunet-service-identity.c:1033
+#: src/identity/gnunet-service-identity.c:913
+#: src/identity/gnunet-service-identity.c:1032
msgid "no matching ego found"
msgstr ""
-#: src/identity/gnunet-service-identity.c:1131
+#: src/identity/gnunet-service-identity.c:1130
#, 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:1189
+#: src/identity/gnunet-service-identity.c:1188
#, 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:1198
+#: src/identity/gnunet-service-identity.c:1197
#, fuzzy, c-format
msgid "Failed to create directory `%s' for storing egos\n"
msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n"
@@ -4652,7 +4739,7 @@ msgstr "`%s' konnte nicht aufgelöst werden: %s\n"
msgid "No records found for `%s'"
msgstr "Dienst `%s' konnte nicht ordentlich entladen werden!\n"
-#: src/namecache/gnunet-namecache.c:119 src/namestore/gnunet-namestore.c:459
+#: src/namecache/gnunet-namecache.c:119 src/namestore/gnunet-namestore.c:469
#, c-format
msgid "\tCorrupt or unsupported record of type %u\n"
msgstr ""
@@ -4672,7 +4759,7 @@ msgstr "Ungültiger Parameter: `%s'\n"
msgid "You must specify a name\n"
msgstr "Sie müssen einen Empfänger angeben!\n"
-#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1641
+#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1591
msgid "name of the record to add/delete/display"
msgstr ""
@@ -4681,7 +4768,7 @@ msgstr ""
msgid "specifies the public key of the zone to look in"
msgstr "Die Priorität des Inhalts angeben"
-#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1702
+#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1652
#, fuzzy
msgid "GNUnet zone manipulation tool"
msgstr "GNUnet Konfiguration"
@@ -4829,140 +4916,113 @@ msgstr ""
msgid "GNU Name System First-Come-First-Served name registration service"
msgstr ""
-#: src/namestore/gnunet-namestore.c:334
+#: src/namestore/gnunet-namestore.c:340
#, c-format
msgid "Adding record failed: %s\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:362
+#: src/namestore/gnunet-namestore.c:368
#, c-format
msgid "Deleting record failed, record does not exist%s%s\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:369
+#: src/namestore/gnunet-namestore.c:375
#, c-format
msgid "Deleting record failed%s%s\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:656
-#, c-format
-msgid "A %s record exists already under `%s', no other records can be added.\n"
-msgstr ""
-
#: src/namestore/gnunet-namestore.c:668
#, c-format
msgid ""
-"A zone key record exists already under `%s', no other records can be added.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:680
-#, c-format
-msgid ""
"A SOA record exists already under `%s', cannot add a second SOA to the same "
"zone.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:696
-#, c-format
-msgid "Records already exist under `%s', cannot add `%s' record.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:711
-#, c-format
-msgid "Records already exist under `%s', cannot add record.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:726
-#, c-format
-msgid ""
-"Non-GNS2DNS records already exist under `%s', cannot add GNS2DNS record.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:846
+#: src/namestore/gnunet-namestore.c:789
#, c-format
msgid "There are no records under label `%s' that could be deleted.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:889
+#: src/namestore/gnunet-namestore.c:832
#, c-format
msgid ""
"There are no records under label `%s' that match the request for deletion.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:970
+#: src/namestore/gnunet-namestore.c:920
#, fuzzy, c-format
msgid "Failed to replace records: %s\n"
msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n"
-#: src/namestore/gnunet-namestore.c:993
+#: src/namestore/gnunet-namestore.c:943
#, c-format
msgid "No options given\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1014 src/namestore/gnunet-namestore.c:1066
-#: src/namestore/gnunet-namestore.c:1076 src/namestore/gnunet-namestore.c:1105
-#: src/namestore/gnunet-namestore.c:1126 src/namestore/gnunet-namestore.c:1153
-#: src/namestore/gnunet-namestore.c:1230
+#: src/namestore/gnunet-namestore.c:964 src/namestore/gnunet-namestore.c:1016
+#: src/namestore/gnunet-namestore.c:1026 src/namestore/gnunet-namestore.c:1055
+#: src/namestore/gnunet-namestore.c:1076 src/namestore/gnunet-namestore.c:1103
+#: src/namestore/gnunet-namestore.c:1180
#, fuzzy, c-format
msgid "Missing option `%s' for operation `%s'\n"
msgstr "Unbekannte Operation `%s'\n"
-#: src/namestore/gnunet-namestore.c:1016
+#: src/namestore/gnunet-namestore.c:966
msgid "replace"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1045
+#: src/namestore/gnunet-namestore.c:995
#, fuzzy, c-format
msgid "Invalid nick `%s'\n"
msgstr "Ungültiger Parameter: `%s'\n"
-#: src/namestore/gnunet-namestore.c:1068 src/namestore/gnunet-namestore.c:1078
-#: src/namestore/gnunet-namestore.c:1107 src/namestore/gnunet-namestore.c:1128
-#: src/namestore/gnunet-namestore.c:1232
+#: src/namestore/gnunet-namestore.c:1018 src/namestore/gnunet-namestore.c:1028
+#: src/namestore/gnunet-namestore.c:1057 src/namestore/gnunet-namestore.c:1078
+#: src/namestore/gnunet-namestore.c:1182
msgid "add"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1086
+#: src/namestore/gnunet-namestore.c:1036
#, fuzzy, c-format
msgid "Unsupported type `%s'\n"
msgstr "Kommando `%s' wird nicht unterstützt. Vorgang wird abgebrochen.\n"
-#: src/namestore/gnunet-namestore.c:1096
+#: src/namestore/gnunet-namestore.c:1046
#, c-format
msgid "For DNS record types `SRV', `TLSA' and `OPENPGPKEY'"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1116
+#: src/namestore/gnunet-namestore.c:1066
#, 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:1135 src/namestore/gnunet-namestore.c:1239
+#: src/namestore/gnunet-namestore.c:1085 src/namestore/gnunet-namestore.c:1189
#, fuzzy, c-format
msgid "Invalid time format `%s'\n"
msgstr "Ungültiger Parameter: `%s'\n"
-#: src/namestore/gnunet-namestore.c:1155
+#: src/namestore/gnunet-namestore.c:1105
msgid "del"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1197
+#: src/namestore/gnunet-namestore.c:1147
#, c-format
msgid "Invalid public key for reverse lookup `%s'\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1222
+#: src/namestore/gnunet-namestore.c:1172
#: src/peerinfo-tool/gnunet-peerinfo.c:737
#, fuzzy, c-format
msgid "Invalid URI `%s'\n"
msgstr "Ungültiger Parameter: `%s'\n"
-#: src/namestore/gnunet-namestore.c:1292
+#: src/namestore/gnunet-namestore.c:1242
#, c-format
msgid "Label `%s' contains `.' which is not allowed\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1342
+#: src/namestore/gnunet-namestore.c:1292
#, c-format
msgid ""
"No default identity configured for `namestore' subsystem\n"
@@ -4970,107 +5030,112 @@ msgid ""
"Run gnunet-identity -d to get a list of choices for $NAME\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1407
+#: src/namestore/gnunet-namestore.c:1357
#, c-format
msgid "Superfluous command line arguments (starting with `%s') ignored\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1436
+#: src/namestore/gnunet-namestore.c:1386
#, 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:1483
+#: src/namestore/gnunet-namestore.c:1433
msgid "Empty record line argument is not allowed.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1495
+#: src/namestore/gnunet-namestore.c:1445
#, c-format
msgid "Invalid expiration time `%s' (must be without unit)\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1507 src/namestore/gnunet-namestore.c:1523
-#: src/namestore/gnunet-namestore.c:1540
+#: src/namestore/gnunet-namestore.c:1457 src/namestore/gnunet-namestore.c:1473
+#: src/namestore/gnunet-namestore.c:1490
#, fuzzy, c-format
msgid "Missing entries in record line `%s'.\n"
msgstr "Anwendung `%s' konnte nicht initialisiert werden.\n"
-#: src/namestore/gnunet-namestore.c:1515
+#: src/namestore/gnunet-namestore.c:1465
#, fuzzy, c-format
msgid "Unknown record type `%s'\n"
msgstr "Unbekannter Befehl »%s«\n"
-#: src/namestore/gnunet-namestore.c:1553
+#: src/namestore/gnunet-namestore.c:1503
#, 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:1610
+#: src/namestore/gnunet-namestore.c:1560
msgid "add record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1613
+#: src/namestore/gnunet-namestore.c:1563
msgid "delete record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1617
+#: src/namestore/gnunet-namestore.c:1567
msgid "display records"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1624
+#: src/namestore/gnunet-namestore.c:1574
msgid ""
"expiration time for record to use (for adding only), \"never\" is possible"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1630
+#: src/namestore/gnunet-namestore.c:1580
msgid "set the desired nick name for the zone"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1635
+#: src/namestore/gnunet-namestore.c:1585
msgid "monitor changes in the namestore"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1647
+#: src/namestore/gnunet-namestore.c:1597
msgid "determine our name for the given PKEY"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1654
+#: src/namestore/gnunet-namestore.c:1604
msgid ""
"set record set to values given by (possibly multiple) RECORDLINES; can be "
"specified multiple times"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1660
+#: src/namestore/gnunet-namestore.c:1610
msgid "type of the record to add/delete/display"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1665
+#: src/namestore/gnunet-namestore.c:1615
msgid "URI to import into our zone"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1671
+#: src/namestore/gnunet-namestore.c:1621
msgid "value of the record to add/delete"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1675
+#: src/namestore/gnunet-namestore.c:1625
msgid "create or list public record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1681
+#: src/namestore/gnunet-namestore.c:1631
msgid ""
"create shadow record (only valid if all other records of the same type have "
"expired"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1687
+#: src/namestore/gnunet-namestore.c:1637
msgid "name of the ego controlling the zone"
msgstr ""
-#: src/namestore/gnunet-service-namestore.c:871
+#: src/namestore/gnunet-service-namestore.c:879
#, c-format
msgid "Failed to replicate block in namecache: %s\n"
msgstr ""
+#: src/namestore/gnunet-service-namestore.c:1668
+#, fuzzy
+msgid "Store failed"
+msgstr "Verbindung fehlgeschlagen: %s\n"
+
#: src/namestore/gnunet-zoneimport.c:1847
msgid "size to use for the main hash map"
msgstr ""
@@ -5079,10 +5144,6 @@ msgstr ""
msgid "minimum expiration time we assume for imported records"
msgstr ""
-#: src/namestore/namestore_api.c:373
-msgid "Namestore failed to store record\n"
-msgstr ""
-
#: src/namestore/plugin_namestore_flat.c:195
#, c-format
msgid "File too big to map: %llu bytes.\n"
@@ -5678,6 +5739,51 @@ msgstr ""
msgid "Daemon to run to perform IP protocol translation to GNUnet"
msgstr ""
+#: src/reclaim/gnunet-did.c:209
+#, fuzzy, c-format
+msgid "Invalid DID `%s'\n"
+msgstr "Ungültiger Parameter: `%s'\n"
+
+#: src/reclaim/gnunet-did.c:835
+msgid "Create a DID Document and display its DID"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:840
+msgid "Get the DID Document associated with the given DID"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:844
+msgid "Show the DID for a given ego"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:849
+msgid "Remove the DID"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:853 src/reclaim/gnunet-did.c:857
+msgid "Replace the DID Document."
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:863
+msgid "The Decentralized Identity (DID)"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:869
+msgid "The DID Document to store in GNUNET"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:874
+msgid "The name of the EGO"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:880
+msgid "The time until the DID Document is going to expire (e.g. 5d)"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:889
+msgid "Manage Decentralized Identities (DIDs)"
+msgstr ""
+
#: src/reclaim/gnunet-reclaim.c:802
#, fuzzy, c-format
msgid "Ego is required\n"
@@ -6563,17 +6669,17 @@ msgid ""
"free topology cannot be more than %u. Given `%s = %llu'"
msgstr ""
-#: src/testbed/testbed_api_topology.c:1033 src/testing/testing.c:2643
+#: src/testbed/testbed_api_topology.c:1033 src/testing/testing.c:2657
#, c-format
msgid "Topology file %s not found\n"
msgstr ""
-#: src/testbed/testbed_api_topology.c:1041 src/testing/testing.c:2651
+#: src/testbed/testbed_api_topology.c:1041 src/testing/testing.c:2665
#, c-format
msgid "Topology file %s has no data\n"
msgstr ""
-#: src/testbed/testbed_api_topology.c:1049 src/testing/testing.c:2659
+#: src/testbed/testbed_api_topology.c:1049 src/testing/testing.c:2673
#, c-format
msgid "Topology file %s cannot be read\n"
msgstr ""
@@ -6775,7 +6881,7 @@ msgstr ""
#: src/transport/gnunet-communicator-tcp.c:3338
#: src/transport/gnunet-communicator-udp.c:3856
-#: src/transport/gnunet-service-tng.c:10512
+#: src/transport/gnunet-service-tng.c:10623
#: src/transport/gnunet-service-transport.c:2627
msgid "Transport service is lacking key configuration settings. Exiting.\n"
msgstr ""
@@ -7978,60 +8084,60 @@ msgstr ""
msgid "Need a non-empty hostname for service `%s'.\n"
msgstr ""
-#: src/util/common_logging.c:626 src/util/common_logging.c:665
+#: src/util/common_logging.c:648 src/util/common_logging.c:687
#, c-format
msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n"
msgstr ""
-#: src/util/common_logging.c:904
+#: src/util/common_logging.c:926
#, c-format
msgid "Message `%.*s' repeated %u times in the last %s\n"
msgstr ""
-#: src/util/common_logging.c:1108
+#: src/util/common_logging.c:1131
msgid "ERROR"
msgstr "FEHLER"
-#: src/util/common_logging.c:1110
+#: src/util/common_logging.c:1133
msgid "WARNING"
msgstr "WARNUNG"
-#: src/util/common_logging.c:1112
+#: src/util/common_logging.c:1135
msgid "MESSAGE"
msgstr ""
-#: src/util/common_logging.c:1114
+#: src/util/common_logging.c:1137
msgid "INFO"
msgstr "INFO"
-#: src/util/common_logging.c:1116
+#: src/util/common_logging.c:1139
msgid "DEBUG"
msgstr "DEBUG"
-#: src/util/common_logging.c:1118
+#: src/util/common_logging.c:1141
msgid "NONE"
msgstr ""
-#: src/util/common_logging.c:1119
+#: src/util/common_logging.c:1142
msgid "INVALID"
msgstr ""
-#: src/util/common_logging.c:1400
+#: src/util/common_logging.c:1423
msgid "unknown address"
msgstr "Unbekannte Adresse"
-#: src/util/common_logging.c:1445
+#: src/util/common_logging.c:1468
msgid "invalid address"
msgstr "Ungültige Adresse"
-#: src/util/common_logging.c:1464
+#: src/util/common_logging.c:1487
#, 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:1487
+#: src/util/common_logging.c:1510
#, fuzzy, c-format
msgid ""
"Configuration specifies invalid value for option `%s' in section `%s': %s\n"
@@ -8180,17 +8286,17 @@ msgstr ""
msgid "Could not bind to any port: %s\n"
msgstr "IP des Hosts `%s' konnte nicht ermittelt werden: %s\n"
-#: src/util/dnsstub.c:344
+#: src/util/dnsstub.c:370
#, c-format
-msgid "Received DNS response that is too small (%u bytes)"
+msgid "Received DNS response that is too small (%u bytes)\n"
msgstr ""
-#: src/util/dnsstub.c:482
+#: src/util/dnsstub.c:508
#, 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:487
+#: src/util/dnsstub.c:513
#, c-format
msgid "Sent DNS request to %s\n"
msgstr ""
@@ -8277,84 +8383,84 @@ msgstr ""
"Argumente, die für lange Optionen zwingend sind, sind auch für kurze "
"Optionen zwingend.\n"
-#: src/util/getopt_helpers.c:196
+#: src/util/getopt_helpers.c:197
msgid "print this help"
msgstr ""
-#: src/util/getopt_helpers.c:261
+#: src/util/getopt_helpers.c:262
msgid "be verbose"
msgstr ""
-#: src/util/getopt_helpers.c:377
+#: src/util/getopt_helpers.c:378
msgid "configure logging to use LOGLEVEL"
msgstr ""
-#: src/util/getopt_helpers.c:444
+#: src/util/getopt_helpers.c:445
msgid "configure logging to write logs to FILENAME"
msgstr ""
-#: src/util/getopt_helpers.c:461
+#: src/util/getopt_helpers.c:462
#, fuzzy
msgid "use configuration file FILENAME"
msgstr ""
"Einen Wert aus der Konfigurationsdatei auf der Standardausgabe ausgeben"
-#: src/util/getopt_helpers.c:497 src/util/getopt_helpers.c:811
-#: src/util/getopt_helpers.c:867
+#: src/util/getopt_helpers.c:498 src/util/getopt_helpers.c:812
+#: src/util/getopt_helpers.c:868
#, 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:569
+#: src/util/getopt_helpers.c:570
#, fuzzy, c-format
msgid ""
"You must pass a relative time (optionally with sign) to the `%s' option.\n"
msgstr "Sie müssen eine relative Zeit zu der Option »%s« übergeben.\n"
-#: src/util/getopt_helpers.c:576
+#: src/util/getopt_helpers.c:577
#, c-format
msgid "Value given for time travel `%s' option is too big.\n"
msgstr ""
-#: src/util/getopt_helpers.c:594
+#: src/util/getopt_helpers.c:595
msgid "[+/-]MICROSECONDS"
msgstr ""
-#: src/util/getopt_helpers.c:596
+#: src/util/getopt_helpers.c:597
msgid "modify system time by given offset (for debugging/testing only)"
msgstr ""
-#: src/util/getopt_helpers.c:630
+#: src/util/getopt_helpers.c:631
#, 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:684
+#: src/util/getopt_helpers.c:685
#, 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:741
+#: src/util/getopt_helpers.c:742
#, fuzzy, c-format
msgid "You must pass a timestamp 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:748
+#: src/util/getopt_helpers.c:749
#, c-format
msgid "The maximum precision allowed for timestamps is seconds.\n"
msgstr ""
-#: src/util/getopt_helpers.c:804
+#: src/util/getopt_helpers.c:805
#, c-format
msgid "Your input for the '%s' option has to be a non negative number\n"
msgstr ""
-#: src/util/getopt_helpers.c:874
+#: src/util/getopt_helpers.c:875
#, 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:952
+#: src/util/getopt_helpers.c:953
#, c-format
msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n"
msgstr ""
@@ -8387,7 +8493,7 @@ msgstr ""
msgid "Manipulate GNUnet configuration files"
msgstr "GNUnet-Konfigurationsdateien bearbeiten"
-#: src/util/gnunet-crypto-tvg.c:1072
+#: src/util/gnunet-crypto-tvg.c:1483
msgid "verify a test vector from stdin"
msgstr ""
@@ -8643,7 +8749,7 @@ msgstr "Verbindung zu %u.%u.%u.%u:%u fehlgeschlagen: %s\n"
msgid "Unable to shorten unix path `%s' while keeping name unique\n"
msgstr ""
-#: src/util/network.c:1306
+#: src/util/network.c:1307
#, c-format
msgid ""
"Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n"
@@ -8775,77 +8881,77 @@ msgstr ""
msgid "Character sets requested were `%s'->`%s'\n"
msgstr ""
-#: src/util/strings.c:487
+#: src/util/strings.c:514
msgid "Failed to expand `$HOME': environment variable `HOME' not set"
msgstr ""
-#: src/util/strings.c:1023
+#: src/util/strings.c:1050
msgid "IPv6 address did not start with `['\n"
msgstr "IPv6-Adresse beginnt nicht mit »[«\n"
-#: src/util/strings.c:1031
+#: src/util/strings.c:1058
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:1038
+#: src/util/strings.c:1065
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:1046
+#: src/util/strings.c:1073
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:1055
+#: src/util/strings.c:1082
#, fuzzy, c-format
msgid "Invalid IPv6 address `%s': %s\n"
msgstr "Ungültige Antwort auf `%s' von `%s'\n"
-#: src/util/strings.c:1237 src/util/strings.c:1248
+#: src/util/strings.c:1264 src/util/strings.c:1275
msgid "Port not in range\n"
msgstr "Port außerhalb des Bereichs\n"
-#: src/util/strings.c:1257
+#: src/util/strings.c:1284
#, c-format
msgid "Malformed port policy `%s'\n"
msgstr ""
-#: src/util/strings.c:1328 src/util/strings.c:1357 src/util/strings.c:1404
-#: src/util/strings.c:1424
+#: src/util/strings.c:1355 src/util/strings.c:1384 src/util/strings.c:1431
+#: src/util/strings.c:1451
#, c-format
msgid "Invalid format for IP: `%s'\n"
msgstr "Ungültiges Format für IP: »%s«\n"
-#: src/util/strings.c:1382
+#: src/util/strings.c:1409
#, 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:1433
+#: src/util/strings.c:1460
#, fuzzy, c-format
msgid "Invalid format: `%s'\n"
msgstr "Ungültiges Format für IP: `%s'\n"
-#: src/util/strings.c:1475
+#: src/util/strings.c:1502
#, 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:1525
+#: src/util/strings.c:1552
#, fuzzy, c-format
msgid "Wrong format `%s' for netmask\n"
msgstr "Falsches Format `%s' für Netzmaske: %s\n"
-#: src/util/strings.c:1556
+#: src/util/strings.c:1583
#, fuzzy, c-format
msgid "Wrong format `%s' for network\n"
msgstr "Falsches Format `%s' für Netzwerk: %s\n"
-#: src/util/time.c:863 src/util/time.c:891
+#: src/util/time.c:870 src/util/time.c:898
#, c-format
msgid "Failed to map `%s', cannot assure monotonic time!\n"
msgstr ""
-#: src/util/time.c:899
+#: src/util/time.c:906
#, c-format
msgid ""
"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
@@ -9025,12 +9131,26 @@ msgstr "Dienst wird über UDP angeboten"
msgid "Setup tunnels via VPN."
msgstr "Tunnel über VPN einrichten."
-#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418
-#: src/zonemaster/gnunet-service-zonemaster.c:847
+#: src/zonemaster/gnunet-service-zonemaster-monitor.c:397
+#: src/zonemaster/gnunet-service-zonemaster.c:832
#, fuzzy
msgid "Failed to connect to the namestore!\n"
msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
+#~ msgid "# items stored"
+#~ msgstr "# gespeicherte Objekte"
+
+#, fuzzy, c-format
+#~ msgid "Failed to load datacache plugin for `%s'\n"
+#~ msgstr "Fehler beim Aktualisieren der Daten des Moduls `%s'\n"
+
+#~ msgid "# requests received"
+#~ msgstr "# Anfragen empfangen"
+
+#, fuzzy
+#~ msgid "# proximity search requests received"
+#~ msgstr "# Klartext PONG Nachrichten empfangen"
+
#, fuzzy
#~ msgid "# requests for random value received"
#~ msgstr "# Anfragen empfangen"
diff --git a/po/es.po b/po/es.po
index 5f3787759..27a21fc63 100644
--- 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: 2022-01-10 15:13+0100\n"
+"POT-Creation-Date: 2022-03-04 22:23+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,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1304
+#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1254
#, fuzzy, c-format
msgid "Ego `%s' not known to identity service\n"
msgstr "'%s': servicio desconocido: %s\n"
@@ -30,7 +30,7 @@ msgstr "El bloque del tipo %u está mal formado\n"
#: src/abd/gnunet-abd.c:558 src/abd/gnunet-service-abd.c:1751
#: src/namestore/gnunet-namestore-fcfsd.c:1080
-#: src/namestore/gnunet-namestore.c:1001
+#: src/namestore/gnunet-namestore.c:951
#, c-format
msgid "Failed to connect to namestore\n"
msgstr "Se produjo un fallo al conectar con el almacén de nombres\n"
@@ -664,7 +664,7 @@ msgstr "salida prolija (incluye las propiedades de direcciones del ATS)"
msgid "Print information about ATS state"
msgstr "Imprime información acerca del estado del ATS"
-#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044
+#: src/ats/gnunet-ats-solver-eval.c:2993 src/ats/gnunet-ats-solver-eval.c:3045
#, c-format
msgid ""
"Could not load quota for network `%s': `%s', assigning default bandwidth "
@@ -673,7 +673,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:3011
+#: src/ats/gnunet-ats-solver-eval.c:3012
#, c-format
msgid ""
"No outbound quota configured for network `%s', assigning default bandwidth "
@@ -682,7 +682,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:3063
+#: src/ats/gnunet-ats-solver-eval.c:3064
#, c-format
msgid ""
"No outbound quota configure for network `%s', assigning default bandwidth "
@@ -691,25 +691,25 @@ 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:3552
+#: src/ats/gnunet-ats-solver-eval.c:3553
#, fuzzy
msgid "solver to use"
msgstr "valor a establecer"
-#: src/ats/gnunet-ats-solver-eval.c:3557
+#: src/ats/gnunet-ats-solver-eval.c:3558
msgid "experiment to use"
msgstr "experimento para usar"
-#: src/ats/gnunet-ats-solver-eval.c:3564
+#: src/ats/gnunet-ats-solver-eval.c:3565
#, fuzzy
msgid "print logging"
msgstr "Iniciando descarga «%s».\n"
-#: src/ats/gnunet-ats-solver-eval.c:3569
+#: src/ats/gnunet-ats-solver-eval.c:3570
msgid "save logging to disk"
msgstr "guarda protocolo al fichero en disco"
-#: src/ats/gnunet-ats-solver-eval.c:3574
+#: src/ats/gnunet-ats-solver-eval.c:3575
msgid "disable normalization"
msgstr "deshabilita normalización"
@@ -1608,40 +1608,7 @@ msgstr "# mapas de tipos recibidos"
msgid "# updates to my type map"
msgstr "# actualizaciones de mi mapa de tipos"
-#: src/datacache/datacache.c:117 src/datacache/datacache.c:275
-#: src/datastore/gnunet-service-datastore.c:743
-msgid "# bytes stored"
-msgstr "# bytes almacenados"
-
-#: src/datacache/datacache.c:121 src/datacache/datacache.c:279
-msgid "# items stored"
-msgstr "# elementos almacenados"
-
-#: src/datacache/datacache.c:185
-#, c-format
-msgid "Loading `%s' datacache plugin\n"
-msgstr "Cargando el módulo de la cache de datos «%s»\n"
-
-#: src/datacache/datacache.c:203
-#, 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:297
-msgid "# requests received"
-msgstr "# peticiones recibidas"
-
-#: src/datacache/datacache.c:308
-msgid "# requests filtered by bloom filter"
-msgstr "# peticiones filtradas por el «bloomfilter»"
-
-#: src/datacache/datacache.c:329
-#, fuzzy
-msgid "# proximity search requests received"
-msgstr "# búsquedas de clientes recibidas"
-
-#: src/datacache/plugin_datacache_heap.c:527
+#: src/datacache/plugin_datacache_heap.c:555
msgid "Heap datacache running\n"
msgstr "Caché de datos de montículo (heap) ejecutándose\n"
@@ -1663,7 +1630,7 @@ msgstr "Caché de datos de montículo (heap) ejecutándose\n"
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:693
+#: src/datacache/plugin_datacache_sqlite.c:723
#: src/datastore/plugin_datastore_sqlite.c:531
#: src/namecache/plugin_namecache_sqlite.c:237
#: src/namestore/plugin_namestore_sqlite.c:273
@@ -1856,6 +1823,10 @@ msgstr "# reservado"
msgid "Could not find matching reservation"
msgstr "No se pudo encontrar una reserva coincidente"
+#: src/datastore/gnunet-service-datastore.c:743
+msgid "# bytes stored"
+msgstr "# bytes almacenados"
+
#: src/datastore/gnunet-service-datastore.c:758
#, c-format
msgid "Need %llu bytes more space (%llu allowed, using %llu)\n"
@@ -2051,7 +2022,7 @@ msgstr ""
#: src/datastore/plugin_datastore_sqlite.c:1337
#: src/namecache/plugin_namecache_sqlite.c:564
-#: src/namestore/plugin_namestore_sqlite.c:765
+#: src/namestore/plugin_namestore_sqlite.c:775
msgid "Sqlite database running\n"
msgstr "Base de datos sqlite ejecutándose\n"
@@ -2059,7 +2030,7 @@ msgstr "Base de datos sqlite ejecutándose\n"
msgid "Template database running\n"
msgstr "Base de datos de plantilla ejecutándose\n"
-#: src/dht/gnunet-dht-get.c:159
+#: src/dht/gnunet-dht-get.c:164
#, c-format
msgid ""
"Result %d, type %d:\n"
@@ -2068,52 +2039,63 @@ msgstr ""
"Resultado %d, tipo %d:\n"
"%.*s\n"
-#: src/dht/gnunet-dht-get.c:160
+#: src/dht/gnunet-dht-get.c:165
#, fuzzy, c-format
msgid "Result %d, type %d:\n"
msgstr ""
"Resultado %d, tipo %d:\n"
"%.*s\n"
-#: src/dht/gnunet-dht-get.c:209
+#: src/dht/gnunet-dht-get.c:215
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:217 src/dht/gnunet-dht-monitor.c:255
+#: src/dht/gnunet-dht-get.c:223 src/dht/gnunet-dht-hello.c:119
+#: src/dht/gnunet-dht-monitor.c:255
+#, c-format
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:227
+#: src/dht/gnunet-dht-get.c:233
#, fuzzy
msgid "Issuing DHT GET with key"
msgstr "Enviando un «GET» DHT con clave"
-#: src/dht/gnunet-dht-get.c:260 src/dht/gnunet-dht-monitor.c:302
+#: src/dht/gnunet-dht-get.c:269 src/dht/gnunet-dht-monitor.c:302
#: src/dht/gnunet-dht-put.c:200
msgid "the query key"
msgstr "la clave de búsqueda"
-#: src/dht/gnunet-dht-get.c:266
+#: src/dht/gnunet-dht-get.c:275
msgid "how many parallel requests (replicas) to create"
msgstr "cuantas peticiones paralelas (réplicas) crear"
-#: src/dht/gnunet-dht-get.c:272 src/dht/gnunet-dht-monitor.c:308
+#: src/dht/gnunet-dht-get.c:280 src/dht/gnunet-dht-put.c:217
+#, fuzzy
+msgid "use DHT's record route option"
+msgstr "opción para usar el demultiplexado de la DHT siempre"
+
+#: src/dht/gnunet-dht-get.c:286 src/dht/gnunet-dht-monitor.c:308
msgid "the type of data to look for"
msgstr "el tipo de datos a buscar"
-#: src/dht/gnunet-dht-get.c:278
+#: src/dht/gnunet-dht-get.c:292
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:284 src/dht/gnunet-dht-put.c:206
+#: src/dht/gnunet-dht-get.c:298 src/dht/gnunet-dht-put.c:206
msgid "use DHT's demultiplex everywhere option"
msgstr "opción para usar el demultiplexado de la DHT siempre"
-#: src/dht/gnunet-dht-get.c:301
+#: src/dht/gnunet-dht-get.c:315
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-hello.c:166
+msgid "Obtain HELLO from DHT or provide HELLO to DHT for bootstrapping"
+msgstr ""
+
#: src/dht/gnunet-dht-monitor.c:315
msgid "how long should the monitor command run"
msgstr "cuanto tiempo debe ejecutarse el comando de monitorización"
@@ -2153,11 +2135,6 @@ msgstr "cuanto tiempo almacenar esta entrada en la DHT (en segundos)"
msgid "how many replicas to create"
msgstr "cuantas réplicas crear"
-#: src/dht/gnunet-dht-put.c:217
-#, 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:223
msgid "the type to insert data as"
msgstr "el tipo de datos a insertar"
@@ -2217,17 +2194,17 @@ msgstr ""
msgid "Measure quality and performance of the DHT service."
msgstr "Medir la calidad y rendimiento del servicio NSE."
-#: src/dht/plugin_block_dht.c:328
+#: src/dht/plugin_block_dht.c:404
#, c-format
msgid "Block not of type %u\n"
msgstr "El bloque no es del tipo %u\n"
-#: src/dht/plugin_block_dht.c:337
+#: src/dht/plugin_block_dht.c:413
#, fuzzy, c-format
msgid "Size mismatch for block with type %u\n"
msgstr "Discrepancias de tamaños para el bloque\n"
-#: src/dht/plugin_block_dht.c:348
+#: src/dht/plugin_block_dht.c:424
#, c-format
msgid "Block of type %u is malformed\n"
msgstr "El bloque del tipo %u está mal formado\n"
@@ -2995,20 +2972,20 @@ msgstr "URI SKS mal formada (no se encuentra el tiempo de expiración)"
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:653
+#: src/fs/fs_uri.c:652
#, fuzzy
msgid "invalid argument"
msgstr "Parámetro no válido «%s»\n"
-#: src/fs/fs_uri.c:665
+#: src/fs/fs_uri.c:671
msgid "Unrecognized URI type"
msgstr "Tipo de URI no reconocido"
-#: src/fs/fs_uri.c:1071 src/fs/fs_uri.c:1098
+#: src/fs/fs_uri.c:1075 src/fs/fs_uri.c:1102
msgid "No keywords specified!\n"
msgstr "¡Ninguna palabra clave especificada!\n"
-#: src/fs/fs_uri.c:1104
+#: src/fs/fs_uri.c:1108
msgid "Number of double-quotes not balanced!\n"
msgstr "¡Número de comillas dobles no balanceado!\n"
@@ -3137,7 +3114,7 @@ msgid "Downloading `%s' done (%s/s).\n"
msgstr "Finalizada descarga «%s» (%s/s).\n"
#: src/fs/gnunet-download.c:206 src/fs/gnunet-publish.c:299
-#: src/fs/gnunet-search.c:229 src/fs/gnunet-unindex.c:117
+#: src/fs/gnunet-search.c:538 src/fs/gnunet-unindex.c:117
#, c-format
msgid "Unexpected status: %d\n"
msgstr "Estado inesperado: %d\n"
@@ -3160,12 +3137,12 @@ msgid "Target filename must be specified.\n"
msgstr "El nombre de fichero de destino debe ser especificado.\n"
#: src/fs/gnunet-download.c:271 src/fs/gnunet-publish.c:869
-#: src/fs/gnunet-search.c:294 src/fs/gnunet-unindex.c:154
+#: src/fs/gnunet-unindex.c:154
#, c-format
msgid "Could not initialize `%s' subsystem.\n"
msgstr "No se pudo inicializar el subsistema «%s».\n"
-#: src/fs/gnunet-download.c:318 src/fs/gnunet-search.c:334
+#: src/fs/gnunet-download.c:318
msgid "set the desired LEVEL of receiver-anonymity"
msgstr "establece el nivel LEVEL deseado de anonimato del receptor"
@@ -3173,7 +3150,7 @@ msgstr "establece el nivel LEVEL deseado de anonimato del receptor"
msgid "delete incomplete downloads (when aborted with CTRL-C)"
msgstr "borra descargas incompletas (cuando fueron abortadas con CTRL-C="
-#: src/fs/gnunet-download.c:330 src/fs/gnunet-search.c:339
+#: src/fs/gnunet-download.c:330 src/fs/gnunet-search.c:740
msgid "only search the local peer (no P2P network search)"
msgstr "únicamente buscar en el par local (no buscar en la red P2P)"
@@ -3439,40 +3416,114 @@ msgstr ""
msgid "Publish a file or directory on GNUnet"
msgstr "Publicar un fichero o un directorio en GNUnet"
-#: src/fs/gnunet-search.c:130
+#: src/fs/gnunet-search.c:441
#, 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:219
+#: src/fs/gnunet-search.c:527
#, c-format
msgid "Error searching: %s.\n"
msgstr "Error buscando: %s.\n"
-#: src/fs/gnunet-search.c:281
+#: src/fs/gnunet-search.c:587
+#, c-format
+msgid "Conflicting options --bookmark-only and --silent.\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:594
+#, c-format
+msgid "Conflicting options --bookmark-only and --output.\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:600
+#, c-format
+msgid "An output file is mandatory for silent mode.\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:621
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:308
+#: src/fs/gnunet-search.c:629
+msgid ""
+"Invalid URI. Valid URIs for searching are keyword query URIs\n"
+"(\"gnunet://fs/ksk/...\") and namespace content URIs (\"gnunet://fs/sks/..."
+"\").\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:654
+#, fuzzy, c-format
+msgid "Could not initialize the `%s` subsystem.\n"
+msgstr "No se pudo inicializar el subsistema «%s».\n"
+
+#: src/fs/gnunet-search.c:668
msgid "Could not start searching.\n"
msgstr "No se pudo empezar a buscar.\n"
-#: src/fs/gnunet-search.c:345
-msgid "write search results to file starting with PREFIX"
-msgstr "escribir resultados de búsqueda al fichero que empiecen por «PREFIX»"
+#: src/fs/gnunet-search.c:694
+#, fuzzy
+msgid "set the desired LEVEL of receiver-anonymity (default: 1)"
+msgstr "establece el nivel LEVEL deseado de anonimato del receptor"
+
+#: src/fs/gnunet-search.c:700
+msgid "do not search, print only the URI that points to this search"
+msgstr ""
-#: src/fs/gnunet-search.c:351
-msgid "automatically terminate search after DELAY"
-msgstr "terminar búsqueda automáticamente después de «DELAY»"
+#: src/fs/gnunet-search.c:707
+msgid ""
+"write search results for directories according to FORMAT; accepted "
+"placeholders are: %a, %f, %j, %l, %m, %n, %s; defaults to the value of --"
+"printf when omitted or to `"
+msgstr ""
-#: src/fs/gnunet-search.c:357
+#: src/fs/gnunet-search.c:717
+msgid ""
+"write search results according to FORMAT; accepted placeholders are: %a, %f, "
+"%j, %l, %m, %n, %s; defaults to `"
+msgstr ""
+
+#: src/fs/gnunet-search.c:725
+msgid ""
+"when the %a or %j placeholders appear in --printf or --dir-printf, list each "
+"metadata property according to FORMAT; accepted placeholders are: %i, %l, "
+"%n, %p"
+msgstr ""
+
+#: src/fs/gnunet-search.c:734
msgid "automatically terminate search after VALUE results are found"
msgstr "terminar búsqueda después de «VALUE» resultados encontrados"
-#: src/fs/gnunet-search.c:371
-msgid "Search GNUnet for files that were published on GNUnet"
+#: src/fs/gnunet-search.c:746
+msgid ""
+"create a GNUnet directory with search results at FILENAME (e.g. `gnunet-"
+"search --output=commons"
+msgstr ""
+
+#: src/fs/gnunet-search.c:753
+msgid "silent mode (requires the --output argument)"
+msgstr ""
+
+#: src/fs/gnunet-search.c:759
+msgid ""
+"automatically terminate search after DELAY; the value given must be a number "
+"followed by a space and a time unit, for example \"500 ms\"; without a unit "
+"it defaults to microseconds - 1000000 = 1 second; if 0 or omitted it means "
+"to wait for CTRL-C"
+msgstr ""
+
+#: src/fs/gnunet-search.c:768
+#, c-format
+msgid ""
+"be verbose (append \"%a\\n\" to the default --printf and --dir-printf "
+"arguments - ignored when these are provided by the user)"
+msgstr ""
+
+#: src/fs/gnunet-search.c:781
+#, fuzzy
+msgid "Search for files that have been published on GNUnet\n"
msgstr "Buscar en GNUnet ficheros que han sido publicados en GNUnet"
#: src/fs/gnunet-service-fs.c:371 src/fs/gnunet-service-fs.c:878
@@ -3816,70 +3867,75 @@ msgstr "Desindexa un fichero previamente indexado con «gnunet-publish»."
msgid "Expected a base32-encoded public zone key\n"
msgstr ""
-#: src/gns/gnunet-bcd.c:571
+#: src/gns/gnunet-bcd.c:573
#, fuzzy, c-format
msgid "Invalid port number %u\n"
msgstr "Número de puerto %llu no válido. Saliendo.\n"
-#: src/gns/gnunet-bcd.c:612 src/namestore/gnunet-namestore-fcfsd.c:1113
+#: src/gns/gnunet-bcd.c:614 src/namestore/gnunet-namestore-fcfsd.c:1113
#, fuzzy
msgid "Unable to set up the daemon\n"
msgstr "Imposible crear la cuenta de usuario:"
-#: src/gns/gnunet-bcd.c:635 src/namestore/gnunet-namestore-fcfsd.c:987
+#: src/gns/gnunet-bcd.c:637 src/namestore/gnunet-namestore-fcfsd.c:987
msgid "Failed to start HTTP server\n"
msgstr "Se produjo un fallo al iniciar el servidor HTTP\n"
-#: src/gns/gnunet-bcd.c:658
+#: src/gns/gnunet-bcd.c:660
msgid "Run HTTP server on port PORT (default is 8888)"
msgstr ""
-#: src/gns/gnunet-bcd.c:667
+#: src/gns/gnunet-bcd.c:669
msgid "GNUnet HTTP server to create business cards"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:241
+#: src/gns/gnunet-dns2gns.c:298
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:315
+#: src/gns/gnunet-dns2gns.c:379
#, fuzzy
msgid "Failed to parse DNS response!\n"
msgstr "Se produjo un fallo al procesar la petición DNS. Omitiendo.\n"
-#: src/gns/gnunet-dns2gns.c:452
+#: src/gns/gnunet-dns2gns.c:453
+#, fuzzy, c-format
+msgid "VPN returned empty result for `%s'\n"
+msgstr "El ATS devolvió resultados para %u direcciones\n"
+
+#: src/gns/gnunet-dns2gns.c:655
#, 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:468
+#: src/gns/gnunet-dns2gns.c:671
#, 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:476
+#: src/gns/gnunet-dns2gns.c:679
#, 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:637
+#: src/gns/gnunet-dns2gns.c:840
#, fuzzy
msgid "No DNS server specified!\n"
msgstr "¡Ninguna palabra clave especificada!\n"
-#: src/gns/gnunet-dns2gns.c:786
+#: src/gns/gnunet-dns2gns.c:995
msgid "IP of recursive DNS resolver to use (required)"
msgstr "IP del resolvedor recursivo DNS a usar (requerido)"
-#: src/gns/gnunet-dns2gns.c:792
+#: src/gns/gnunet-dns2gns.c:1001
#, 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:809
+#: src/gns/gnunet-dns2gns.c:1018
msgid "GNUnet DNS-to-GNS proxy (a DNS server)"
msgstr "Pasarela GNUnet DNS-a-GNS (un servidor DNS)"
@@ -4063,19 +4119,19 @@ msgstr ""
msgid "GNUnet GNS resolver tool"
msgstr "Herramienta de acceso GNUnet GNS"
-#: src/gns/gnunet-service-gns.c:505
+#: src/gns/gnunet-service-gns.c:501
#, fuzzy
msgid "Properly base32-encoded public key required"
msgstr "Tipo requerido\n"
-#: src/gns/gnunet-service-gns.c:541
+#: src/gns/gnunet-service-gns.c:537
#, 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:560
-#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442
-#: src/zonemaster/gnunet-service-zonemaster.c:885
+#: src/gns/gnunet-service-gns.c:556
+#: src/zonemaster/gnunet-service-zonemaster-monitor.c:421
+#: src/zonemaster/gnunet-service-zonemaster.c:870
msgid "Could not connect to DHT!\n"
msgstr "¡No se pudo conectar a la DHT!\n"
@@ -4089,97 +4145,100 @@ msgstr "¡Se produjo un error al convertir los argumentos a una URI!\n"
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:706
+#: src/gns/gnunet-service-gns_resolver.c:659
#, fuzzy, c-format
msgid "Protocol `%s' unknown, skipping labels.\n"
msgstr "Módulo «%s» no encontrado\n"
-#: src/gns/gnunet-service-gns_resolver.c:718
+#: src/gns/gnunet-service-gns_resolver.c:671
#, c-format
msgid "Service `%s' unknown for protocol `%s', trying as number.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:724
+#: src/gns/gnunet-service-gns_resolver.c:677
#, fuzzy, c-format
msgid "Service `%s' not a port, skipping service labels.\n"
msgstr "Módulo «%s» no encontrado\n"
-#: src/gns/gnunet-service-gns_resolver.c:938
+#: src/gns/gnunet-service-gns_resolver.c:891
#, 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:1129
+#: src/gns/gnunet-service-gns_resolver.c:1082
#, c-format
msgid "Skipping record of unsupported type %d\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1447
-#, 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:1919
+#: src/gns/gnunet-service-gns_resolver.c:1859
#, c-format
msgid "Name `%s' cannot be converted to IDNA."
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1934
+#: src/gns/gnunet-service-gns_resolver.c:1874
#, c-format
msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1979
+#: src/gns/gnunet-service-gns_resolver.c:1914
#, 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:2406
+#: src/gns/gnunet-service-gns_resolver.c:2312
+msgid "Unable to process critical delegation record\n"
+msgstr ""
+
+#: src/gns/gnunet-service-gns_resolver.c:2317
msgid "GNS lookup recursion failed (no delegation record found)\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2429
+#: src/gns/gnunet-service-gns_resolver.c:2340
#, 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:2594
+#: src/gns/gnunet-service-gns_resolver.c:2505
#, c-format
msgid "GNS namecache returned empty result for `%s'\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2734
+#: src/gns/gnunet-service-gns_resolver.c:2652
#, c-format
msgid "Zone %s was revoked, resolution fails\n"
msgstr ""
-#: src/gns/plugin_gnsrecord_gns.c:174
+#: src/gns/plugin_gnsrecord_gns.c:136
+msgid "This is a memento of an older block for internal maintenance."
+msgstr ""
+
+#: src/gns/plugin_gnsrecord_gns.c:175
#, fuzzy, c-format
msgid "Unable to parse zone key record `%s'\n"
msgstr "No se pudo procesar el registro MX «%s»\n"
-#: src/gns/plugin_gnsrecord_gns.c:187
+#: src/gns/plugin_gnsrecord_gns.c:188
msgid "Record type does not match parsed record type\n"
msgstr ""
-#: src/gns/plugin_gnsrecord_gns.c:213
+#: src/gns/plugin_gnsrecord_gns.c:211
#, 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:229
+#: src/gns/plugin_gnsrecord_gns.c:227
#, fuzzy, c-format
msgid "Failed to serialize GNS2DNS record with value `%s': Not a DNS name.\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:253
+#: src/gns/plugin_gnsrecord_gns.c:251
#, 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:285
+#: src/gns/plugin_gnsrecord_gns.c:283
#, fuzzy, c-format
msgid "Unable to parse BOX record string `%s'\n"
msgstr "No se pudo procesar la cadena de registro VPN «%s»\n"
@@ -4189,6 +4248,34 @@ msgstr "No se pudo procesar la cadena de registro VPN «%s»\n"
msgid "Gns REST API initialized\n"
msgstr "Conexión fallida\n"
+#: src/gnsrecord/gnsrecord_misc.c:448
+msgid "Zone delegation record not allowed in apex."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:456
+msgid "Zone delegation record set contains mutually exclusive records."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:466
+msgid "Multiple REDIRECT records."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:475 src/gnsrecord/gnsrecord_misc.c:501
+msgid "Redirection record set conains mutually exclusive records."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:482
+msgid "Redirection records not allowed in apex."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:493
+msgid "Redirection records not allowed in apex.."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:515
+msgid "Mutually exclusive records."
+msgstr ""
+
#: src/gnsrecord/plugin_gnsrecord_dns.c:367
#, c-format
msgid "Unable to parse IPv4 address `%s'\n"
@@ -4456,7 +4543,7 @@ msgid "# hostlist downloads initiated"
msgstr "# descargas de listas de máquinas iniciadas"
#: src/hostlist/gnunet-daemon-hostlist_client.c:1144
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1728
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1732
msgid "# milliseconds between hostlist downloads"
msgstr "# milisegundos entre descargas de listas de máquinas"
@@ -4519,21 +4606,21 @@ msgstr "Error escribiendo URI de listas de máquinas al fichero «%s»\n"
msgid "# hostlist URIs written to file"
msgstr "# URI de listas de máquinas escritas a fichero"
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1657
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1661
#: src/transport/plugin_transport_http_client.c:2300
#, c-format
msgid "Invalid proxy type: `%s', disabling proxy! Check configuration!\n"
msgstr ""
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1686
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1690
msgid "Learning is enabled on this peer\n"
msgstr "El aprendizaje está habilitado en este par\n"
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1699
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1703
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:1713
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1717
#, c-format
msgid ""
"Since learning is not enabled on this peer, hostlist file `%s' was removed\n"
@@ -4737,51 +4824,51 @@ msgstr ""
msgid "Maintain egos"
msgstr ""
-#: src/identity/gnunet-service-identity.c:503
+#: src/identity/gnunet-service-identity.c:502
msgid "no default known"
msgstr ""
-#: src/identity/gnunet-service-identity.c:528
+#: src/identity/gnunet-service-identity.c:527
msgid "default configured, but ego unknown (internal error)"
msgstr ""
-#: src/identity/gnunet-service-identity.c:621
-#: src/identity/gnunet-service-identity.c:896
-#: src/identity/gnunet-service-identity.c:1016
+#: src/identity/gnunet-service-identity.c:620
+#: src/identity/gnunet-service-identity.c:895
+#: src/identity/gnunet-service-identity.c:1015
#, 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:631
+#: src/identity/gnunet-service-identity.c:630
msgid "Unknown ego specified for service (internal error)"
msgstr ""
-#: src/identity/gnunet-service-identity.c:725
+#: src/identity/gnunet-service-identity.c:724
msgid "identifier already in use for another ego"
msgstr ""
-#: src/identity/gnunet-service-identity.c:872
+#: src/identity/gnunet-service-identity.c:871
#, fuzzy
msgid "target name already exists"
msgstr "El registro ya existía en el almacén de nombres"
-#: src/identity/gnunet-service-identity.c:914
-#: src/identity/gnunet-service-identity.c:1033
+#: src/identity/gnunet-service-identity.c:913
+#: src/identity/gnunet-service-identity.c:1032
msgid "no matching ego found"
msgstr ""
-#: src/identity/gnunet-service-identity.c:1131
+#: src/identity/gnunet-service-identity.c:1130
#, 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:1189
+#: src/identity/gnunet-service-identity.c:1188
#, 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:1198
+#: src/identity/gnunet-service-identity.c:1197
#, fuzzy, c-format
msgid "Failed to create directory `%s' for storing egos\n"
msgstr "Se produjo un fallo al leer el directorio «%s»\n"
@@ -4822,7 +4909,7 @@ msgstr "No se pudo acceder al fichero «%s»: %s\n"
msgid "No records found for `%s'"
msgstr "No se han encontrado ficheros en «%s»\n"
-#: src/namecache/gnunet-namecache.c:119 src/namestore/gnunet-namestore.c:459
+#: src/namecache/gnunet-namecache.c:119 src/namestore/gnunet-namestore.c:469
#, c-format
msgid "\tCorrupt or unsupported record of type %u\n"
msgstr "\tRegistro corrupto o no soportado del tipo %u\n"
@@ -4842,7 +4929,7 @@ msgstr "Parámetro no válido «%s»\n"
msgid "You must specify a name\n"
msgstr "¡Debes especificar un receptor!\n"
-#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1641
+#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1591
msgid "name of the record to add/delete/display"
msgstr "nombre del registro a añadir/borrar/mostrar"
@@ -4851,7 +4938,7 @@ msgstr "nombre del registro a añadir/borrar/mostrar"
msgid "specifies the public key of the zone to look in"
msgstr "Especificar el tipo del registro a buscar"
-#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1702
+#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1652
msgid "GNUnet zone manipulation tool"
msgstr "Herramienta de manipulación de zona de GNUnet"
@@ -5003,140 +5090,113 @@ msgstr ""
msgid "GNU Name System First-Come-First-Served name registration service"
msgstr "Servicio de registro GNUnet GNS primero en llegar, primero en servirse"
-#: src/namestore/gnunet-namestore.c:334
+#: src/namestore/gnunet-namestore.c:340
#, c-format
msgid "Adding record failed: %s\n"
msgstr "No se pudo añadir el registro: %s\n"
-#: src/namestore/gnunet-namestore.c:362
+#: src/namestore/gnunet-namestore.c:368
#, 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:369
+#: src/namestore/gnunet-namestore.c:375
#, fuzzy, c-format
msgid "Deleting record failed%s%s\n"
msgstr "No se pudo borrar el registro: %s\n"
-#: src/namestore/gnunet-namestore.c:656
-#, c-format
-msgid "A %s record exists already under `%s', no other records can be added.\n"
-msgstr ""
-
#: src/namestore/gnunet-namestore.c:668
#, c-format
msgid ""
-"A zone key record exists already under `%s', no other records can be added.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:680
-#, c-format
-msgid ""
"A SOA record exists already under `%s', cannot add a second SOA to the same "
"zone.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:696
-#, c-format
-msgid "Records already exist under `%s', cannot add `%s' record.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:711
-#, c-format
-msgid "Records already exist under `%s', cannot add record.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:726
-#, c-format
-msgid ""
-"Non-GNS2DNS records already exist under `%s', cannot add GNS2DNS record.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:846
+#: src/namestore/gnunet-namestore.c:789
#, c-format
msgid "There are no records under label `%s' that could be deleted.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:889
+#: src/namestore/gnunet-namestore.c:832
#, c-format
msgid ""
"There are no records under label `%s' that match the request for deletion.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:970
+#: src/namestore/gnunet-namestore.c:920
#, 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:993
+#: src/namestore/gnunet-namestore.c:943
#, c-format
msgid "No options given\n"
msgstr "No se han proporcionado opciones\n"
-#: src/namestore/gnunet-namestore.c:1014 src/namestore/gnunet-namestore.c:1066
-#: src/namestore/gnunet-namestore.c:1076 src/namestore/gnunet-namestore.c:1105
-#: src/namestore/gnunet-namestore.c:1126 src/namestore/gnunet-namestore.c:1153
-#: src/namestore/gnunet-namestore.c:1230
+#: src/namestore/gnunet-namestore.c:964 src/namestore/gnunet-namestore.c:1016
+#: src/namestore/gnunet-namestore.c:1026 src/namestore/gnunet-namestore.c:1055
+#: src/namestore/gnunet-namestore.c:1076 src/namestore/gnunet-namestore.c:1103
+#: src/namestore/gnunet-namestore.c:1180
#, 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:1016
+#: src/namestore/gnunet-namestore.c:966
msgid "replace"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1045
+#: src/namestore/gnunet-namestore.c:995
#, fuzzy, c-format
msgid "Invalid nick `%s'\n"
msgstr "URI no válida: «%s»\n"
-#: src/namestore/gnunet-namestore.c:1068 src/namestore/gnunet-namestore.c:1078
-#: src/namestore/gnunet-namestore.c:1107 src/namestore/gnunet-namestore.c:1128
-#: src/namestore/gnunet-namestore.c:1232
+#: src/namestore/gnunet-namestore.c:1018 src/namestore/gnunet-namestore.c:1028
+#: src/namestore/gnunet-namestore.c:1057 src/namestore/gnunet-namestore.c:1078
+#: src/namestore/gnunet-namestore.c:1182
msgid "add"
msgstr "añadir"
-#: src/namestore/gnunet-namestore.c:1086
+#: src/namestore/gnunet-namestore.c:1036
#, c-format
msgid "Unsupported type `%s'\n"
msgstr "Tipo no soportado «%s»\n"
-#: src/namestore/gnunet-namestore.c:1096
+#: src/namestore/gnunet-namestore.c:1046
#, c-format
msgid "For DNS record types `SRV', `TLSA' and `OPENPGPKEY'"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1116
+#: src/namestore/gnunet-namestore.c:1066
#, 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:1135 src/namestore/gnunet-namestore.c:1239
+#: src/namestore/gnunet-namestore.c:1085 src/namestore/gnunet-namestore.c:1189
#, c-format
msgid "Invalid time format `%s'\n"
msgstr "Formato de tiempo no válido «%s»\n"
-#: src/namestore/gnunet-namestore.c:1155
+#: src/namestore/gnunet-namestore.c:1105
msgid "del"
msgstr "borrar"
-#: src/namestore/gnunet-namestore.c:1197
+#: src/namestore/gnunet-namestore.c:1147
#, 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:1222
+#: src/namestore/gnunet-namestore.c:1172
#: src/peerinfo-tool/gnunet-peerinfo.c:737
#, c-format
msgid "Invalid URI `%s'\n"
msgstr "URI no válida: «%s»\n"
-#: src/namestore/gnunet-namestore.c:1292
+#: src/namestore/gnunet-namestore.c:1242
#, c-format
msgid "Label `%s' contains `.' which is not allowed\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1342
+#: src/namestore/gnunet-namestore.c:1292
#, c-format
msgid ""
"No default identity configured for `namestore' subsystem\n"
@@ -5144,113 +5204,118 @@ msgid ""
"Run gnunet-identity -d to get a list of choices for $NAME\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1407
+#: src/namestore/gnunet-namestore.c:1357
#, fuzzy, c-format
msgid "Superfluous command line arguments (starting with `%s') ignored\n"
msgstr "Argumentos superfluos (ignorados).\n"
-#: src/namestore/gnunet-namestore.c:1436
+#: src/namestore/gnunet-namestore.c:1386
#, fuzzy, c-format
msgid "Cannot connect to identity service\n"
msgstr "¡No se pudo conectar al servicio %s!\n"
-#: src/namestore/gnunet-namestore.c:1483
+#: src/namestore/gnunet-namestore.c:1433
msgid "Empty record line argument is not allowed.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1495
+#: src/namestore/gnunet-namestore.c:1445
#, c-format
msgid "Invalid expiration time `%s' (must be without unit)\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1507 src/namestore/gnunet-namestore.c:1523
-#: src/namestore/gnunet-namestore.c:1540
+#: src/namestore/gnunet-namestore.c:1457 src/namestore/gnunet-namestore.c:1473
+#: src/namestore/gnunet-namestore.c:1490
#, 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:1515
+#: src/namestore/gnunet-namestore.c:1465
#, fuzzy, c-format
msgid "Unknown record type `%s'\n"
msgstr "Comando desconocido «%s»\n"
-#: src/namestore/gnunet-namestore.c:1553
+#: src/namestore/gnunet-namestore.c:1503
#, 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:1610
+#: src/namestore/gnunet-namestore.c:1560
msgid "add record"
msgstr "añadir registro"
-#: src/namestore/gnunet-namestore.c:1613
+#: src/namestore/gnunet-namestore.c:1563
msgid "delete record"
msgstr "borrar registro"
-#: src/namestore/gnunet-namestore.c:1617
+#: src/namestore/gnunet-namestore.c:1567
msgid "display records"
msgstr "mostrar registros"
-#: src/namestore/gnunet-namestore.c:1624
+#: src/namestore/gnunet-namestore.c:1574
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:1630
+#: src/namestore/gnunet-namestore.c:1580
#, fuzzy
msgid "set the desired nick name for the zone"
msgstr "establece el nivel LEVEL deseado de replicación"
-#: src/namestore/gnunet-namestore.c:1635
+#: src/namestore/gnunet-namestore.c:1585
#, 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:1647
+#: src/namestore/gnunet-namestore.c:1597
#, fuzzy
msgid "determine our name for the given PKEY"
msgstr "establece las preferencias para el par dado"
-#: src/namestore/gnunet-namestore.c:1654
+#: src/namestore/gnunet-namestore.c:1604
msgid ""
"set record set to values given by (possibly multiple) RECORDLINES; can be "
"specified multiple times"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1660
+#: src/namestore/gnunet-namestore.c:1610
msgid "type of the record to add/delete/display"
msgstr "tipo del registro a añadir/borrar/mostrar"
-#: src/namestore/gnunet-namestore.c:1665
+#: src/namestore/gnunet-namestore.c:1615
msgid "URI to import into our zone"
msgstr "URI a importar a nuestra zona"
-#: src/namestore/gnunet-namestore.c:1671
+#: src/namestore/gnunet-namestore.c:1621
msgid "value of the record to add/delete"
msgstr "valor del registro a añadir/borrar"
-#: src/namestore/gnunet-namestore.c:1675
+#: src/namestore/gnunet-namestore.c:1625
msgid "create or list public record"
msgstr "crear o listar registros públicos"
-#: src/namestore/gnunet-namestore.c:1681
+#: src/namestore/gnunet-namestore.c:1631
msgid ""
"create shadow record (only valid if all other records of the same type have "
"expired"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1687
+#: src/namestore/gnunet-namestore.c:1637
#, fuzzy
msgid "name of the ego controlling the zone"
msgstr "nombre de la sección a la que acceder"
-#: src/namestore/gnunet-service-namestore.c:871
+#: src/namestore/gnunet-service-namestore.c:879
#, 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-service-namestore.c:1668
+#, fuzzy
+msgid "Store failed"
+msgstr "«gnunet-ecc» falló"
+
#: src/namestore/gnunet-zoneimport.c:1847
msgid "size to use for the main hash map"
msgstr ""
@@ -5259,11 +5324,6 @@ msgstr ""
msgid "minimum expiration time we assume for imported records"
msgstr ""
-#: src/namestore/namestore_api.c:373
-#, 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_flat.c:195
#, c-format
msgid "File too big to map: %llu bytes.\n"
@@ -5867,6 +5927,51 @@ 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-did.c:209
+#, fuzzy, c-format
+msgid "Invalid DID `%s'\n"
+msgstr "URI no válida: «%s»\n"
+
+#: src/reclaim/gnunet-did.c:835
+msgid "Create a DID Document and display its DID"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:840
+msgid "Get the DID Document associated with the given DID"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:844
+msgid "Show the DID for a given ego"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:849
+msgid "Remove the DID"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:853 src/reclaim/gnunet-did.c:857
+msgid "Replace the DID Document."
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:863
+msgid "The Decentralized Identity (DID)"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:869
+msgid "The DID Document to store in GNUNET"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:874
+msgid "The name of the EGO"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:880
+msgid "The time until the DID Document is going to expire (e.g. 5d)"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:889
+msgid "Manage Decentralized Identities (DIDs)"
+msgstr ""
+
#: src/reclaim/gnunet-reclaim.c:802
#, fuzzy, c-format
msgid "Ego is required\n"
@@ -6780,17 +6885,17 @@ msgid ""
"free topology cannot be more than %u. Given `%s = %llu'"
msgstr ""
-#: src/testbed/testbed_api_topology.c:1033 src/testing/testing.c:2643
+#: src/testbed/testbed_api_topology.c:1033 src/testing/testing.c:2657
#, 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:1041 src/testing/testing.c:2651
+#: src/testbed/testbed_api_topology.c:1041 src/testing/testing.c:2665
#, 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:1049 src/testing/testing.c:2659
+#: src/testbed/testbed_api_topology.c:1049 src/testing/testing.c:2673
#, c-format
msgid "Topology file %s cannot be read\n"
msgstr "El fichero de topología %s no puede ser leido\n"
@@ -7019,7 +7124,7 @@ msgstr ""
#: src/transport/gnunet-communicator-tcp.c:3338
#: src/transport/gnunet-communicator-udp.c:3856
-#: src/transport/gnunet-service-tng.c:10512
+#: src/transport/gnunet-service-tng.c:10623
#: src/transport/gnunet-service-transport.c:2627
#, fuzzy
msgid "Transport service is lacking key configuration settings. Exiting.\n"
@@ -8290,58 +8395,58 @@ msgstr ""
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:626 src/util/common_logging.c:665
+#: src/util/common_logging.c:648 src/util/common_logging.c:687
#, c-format
msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n"
msgstr ""
-#: src/util/common_logging.c:904
+#: src/util/common_logging.c:926
#, 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:1108
+#: src/util/common_logging.c:1131
msgid "ERROR"
msgstr "ERROR"
-#: src/util/common_logging.c:1110
+#: src/util/common_logging.c:1133
msgid "WARNING"
msgstr "PELIGRO"
-#: src/util/common_logging.c:1112
+#: src/util/common_logging.c:1135
msgid "MESSAGE"
msgstr "MENSAJE"
-#: src/util/common_logging.c:1114
+#: src/util/common_logging.c:1137
msgid "INFO"
msgstr "INFORMACIÓN"
-#: src/util/common_logging.c:1116
+#: src/util/common_logging.c:1139
msgid "DEBUG"
msgstr "DEPURACIÓN"
-#: src/util/common_logging.c:1118
+#: src/util/common_logging.c:1141
msgid "NONE"
msgstr "NINGUNO"
-#: src/util/common_logging.c:1119
+#: src/util/common_logging.c:1142
msgid "INVALID"
msgstr "NO VÁLIDO"
-#: src/util/common_logging.c:1400
+#: src/util/common_logging.c:1423
msgid "unknown address"
msgstr "dirección desconocida"
-#: src/util/common_logging.c:1445
+#: src/util/common_logging.c:1468
msgid "invalid address"
msgstr "dirección no válida"
-#: src/util/common_logging.c:1464
+#: src/util/common_logging.c:1487
#, 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:1487
+#: src/util/common_logging.c:1510
#, c-format
msgid ""
"Configuration specifies invalid value for option `%s' in section `%s': %s\n"
@@ -8496,17 +8601,17 @@ msgstr ""
msgid "Could not bind to any port: %s\n"
msgstr "No se pudo asociar con ningún puerto: %s\n"
-#: src/util/dnsstub.c:344
-#, c-format
-msgid "Received DNS response that is too small (%u bytes)"
+#: src/util/dnsstub.c:370
+#, fuzzy, c-format
+msgid "Received DNS response that is too small (%u bytes)\n"
msgstr "Recibida respuesta DNS demasiado pequeña (%u bytes)"
-#: src/util/dnsstub.c:482
+#: src/util/dnsstub.c:508
#, 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:487
+#: src/util/dnsstub.c:513
#, c-format
msgid "Sent DNS request to %s\n"
msgstr "Petición DNS enviada a %s\n"
@@ -8593,83 +8698,83 @@ msgstr ""
"Los parámetros obligatorios para las opciones largas también lo son para sus "
"versiones cortas.\n"
-#: src/util/getopt_helpers.c:196
+#: src/util/getopt_helpers.c:197
msgid "print this help"
msgstr "imprime esta ayuda"
-#: src/util/getopt_helpers.c:261
+#: src/util/getopt_helpers.c:262
msgid "be verbose"
msgstr ""
-#: src/util/getopt_helpers.c:377
+#: src/util/getopt_helpers.c:378
msgid "configure logging to use LOGLEVEL"
msgstr ""
-#: src/util/getopt_helpers.c:444
+#: src/util/getopt_helpers.c:445
msgid "configure logging to write logs to FILENAME"
msgstr ""
-#: src/util/getopt_helpers.c:461
+#: src/util/getopt_helpers.c:462
#, fuzzy
msgid "use configuration file FILENAME"
msgstr "crear ficheros de configuración únicos"
-#: src/util/getopt_helpers.c:497 src/util/getopt_helpers.c:811
-#: src/util/getopt_helpers.c:867
+#: src/util/getopt_helpers.c:498 src/util/getopt_helpers.c:812
+#: src/util/getopt_helpers.c:868
#, 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:569
+#: src/util/getopt_helpers.c:570
#, fuzzy, c-format
msgid ""
"You must pass a relative time (optionally with sign) to the `%s' option.\n"
msgstr "Debes introducir un tiempo relativo en la opción «%s».\n"
-#: src/util/getopt_helpers.c:576
+#: src/util/getopt_helpers.c:577
#, c-format
msgid "Value given for time travel `%s' option is too big.\n"
msgstr ""
-#: src/util/getopt_helpers.c:594
+#: src/util/getopt_helpers.c:595
msgid "[+/-]MICROSECONDS"
msgstr ""
-#: src/util/getopt_helpers.c:596
+#: src/util/getopt_helpers.c:597
msgid "modify system time by given offset (for debugging/testing only)"
msgstr ""
-#: src/util/getopt_helpers.c:630
+#: src/util/getopt_helpers.c:631
#, 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:684
+#: src/util/getopt_helpers.c:685
#, 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:741
+#: src/util/getopt_helpers.c:742
#, fuzzy, c-format
msgid "You must pass a timestamp to the `%s' option.\n"
msgstr "Tienes que introducir un número en la opción «%s».\n"
-#: src/util/getopt_helpers.c:748
+#: src/util/getopt_helpers.c:749
#, c-format
msgid "The maximum precision allowed for timestamps is seconds.\n"
msgstr ""
-#: src/util/getopt_helpers.c:804
+#: src/util/getopt_helpers.c:805
#, c-format
msgid "Your input for the '%s' option has to be a non negative number\n"
msgstr ""
-#: src/util/getopt_helpers.c:874
+#: src/util/getopt_helpers.c:875
#, 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:952
+#: src/util/getopt_helpers.c:953
#, c-format
msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n"
msgstr ""
@@ -8702,7 +8807,7 @@ msgstr ""
msgid "Manipulate GNUnet configuration files"
msgstr "Manipular ficheros de configuración de GNUnet"
-#: src/util/gnunet-crypto-tvg.c:1072
+#: src/util/gnunet-crypto-tvg.c:1483
msgid "verify a test vector from stdin"
msgstr ""
@@ -8962,7 +9067,7 @@ msgstr "Error escribiendo a «%s»: %s\n"
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:1306
+#: src/util/network.c:1307
#, c-format
msgid ""
"Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n"
@@ -9102,85 +9207,85 @@ msgstr ""
msgid "Character sets requested were `%s'->`%s'\n"
msgstr "Los conjuntos de caracteres pedidos fueron «%s»->«%s»\n"
-#: src/util/strings.c:487
+#: src/util/strings.c:514
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:1023
+#: src/util/strings.c:1050
msgid "IPv6 address did not start with `['\n"
msgstr "La dirección IPv6 no empezaba con «[»\n"
-#: src/util/strings.c:1031
+#: src/util/strings.c:1058
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:1038
+#: src/util/strings.c:1065
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:1046
+#: src/util/strings.c:1073
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:1055
+#: src/util/strings.c:1082
#, c-format
msgid "Invalid IPv6 address `%s': %s\n"
msgstr "Dirección IPv6 «%s» no válida: %s\n"
-#: src/util/strings.c:1237 src/util/strings.c:1248
+#: src/util/strings.c:1264 src/util/strings.c:1275
msgid "Port not in range\n"
msgstr ""
-#: src/util/strings.c:1257
+#: src/util/strings.c:1284
#, fuzzy, c-format
msgid "Malformed port policy `%s'\n"
msgstr "Se produjo un fallo al iniciar el servicio «%s»\n"
-#: src/util/strings.c:1328 src/util/strings.c:1357 src/util/strings.c:1404
-#: src/util/strings.c:1424
+#: src/util/strings.c:1355 src/util/strings.c:1384 src/util/strings.c:1431
+#: src/util/strings.c:1451
#, c-format
msgid "Invalid format for IP: `%s'\n"
msgstr "Formato no válido para la IP: «%s»\n"
-#: src/util/strings.c:1382
+#: src/util/strings.c:1409
#, 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:1433
+#: src/util/strings.c:1460
#, fuzzy, c-format
msgid "Invalid format: `%s'\n"
msgstr "Formato de tiempo no válido «%s»\n"
-#: src/util/strings.c:1475
+#: src/util/strings.c:1502
#, 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:1525
+#: src/util/strings.c:1552
#, c-format
msgid "Wrong format `%s' for netmask\n"
msgstr "Formato «%s» erroneo para máscara de red\n"
-#: src/util/strings.c:1556
+#: src/util/strings.c:1583
#, c-format
msgid "Wrong format `%s' for network\n"
msgstr "Formato «%s» erroneo para red\n"
-#: src/util/time.c:863 src/util/time.c:891
+#: src/util/time.c:870 src/util/time.c:898
#, 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:899
+#: src/util/time.c:906
#, c-format
msgid ""
"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
@@ -9362,11 +9467,44 @@ msgstr "el servicio es ofrecido vía UDP"
msgid "Setup tunnels via VPN."
msgstr "Configurar túneles vía VPN."
-#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418
-#: src/zonemaster/gnunet-service-zonemaster.c:847
+#: src/zonemaster/gnunet-service-zonemaster-monitor.c:397
+#: src/zonemaster/gnunet-service-zonemaster.c:832
msgid "Failed to connect to the namestore!\n"
msgstr "¡Se produjo un fallo al conectar con el almacén de nombres!\n"
+#~ msgid "# items stored"
+#~ msgstr "# elementos almacenados"
+
+#, c-format
+#~ msgid "Loading `%s' datacache plugin\n"
+#~ msgstr "Cargando el módulo de la cache de datos «%s»\n"
+
+#, 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"
+
+#~ msgid "# requests received"
+#~ msgstr "# peticiones recibidas"
+
+#~ msgid "# requests filtered by bloom filter"
+#~ msgstr "# peticiones filtradas por el «bloomfilter»"
+
+#, fuzzy
+#~ msgid "# proximity search requests received"
+#~ msgstr "# búsquedas de clientes recibidas"
+
+#~ msgid "write search results to file starting with PREFIX"
+#~ 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»"
+
+#, fuzzy
+#~ msgid "Namestore failed to store record\n"
+#~ msgstr "El almacén de nombres no pudo añadir el registro\n"
+
#, fuzzy
#~ msgid "# requests for random value received"
#~ msgstr "# peticiones recibidas"
@@ -11531,9 +11669,6 @@ msgstr "¡Se produjo un fallo al conectar con el almacén de nombres!\n"
#~ msgid "interrupted by shutdown"
#~ msgstr "interrumpido por apagado"
-#~ msgid "gnunet-ecc failed"
-#~ msgstr "«gnunet-ecc» falló"
-
#~ msgid ""
#~ "File `%s' does not contain a valid private key (too long, %llu bytes). "
#~ "Renaming it.\n"
diff --git a/po/fr.po b/po/fr.po
index 3692461e5..f8d8afeed 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gnunet 0.10.1\n"
"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2022-01-10 15:13+0100\n"
+"POT-Creation-Date: 2022-03-04 22:23+0100\n"
"PO-Revision-Date: 2021-11-21 00:53+0100\n"
"Last-Translator: Stéphane Aulery <lkppo@free.fr>\n"
"Language-Team: French <traduc@traduc.org>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
-#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1304
+#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1254
#, c-format
msgid "Ego `%s' not known to identity service\n"
msgstr ""
@@ -29,7 +29,7 @@ msgstr ""
#: src/abd/gnunet-abd.c:558 src/abd/gnunet-service-abd.c:1751
#: src/namestore/gnunet-namestore-fcfsd.c:1080
-#: src/namestore/gnunet-namestore.c:1001
+#: src/namestore/gnunet-namestore.c:951
#, c-format
msgid "Failed to connect to namestore\n"
msgstr ""
@@ -611,44 +611,44 @@ msgstr ""
msgid "Print information about ATS state"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044
+#: src/ats/gnunet-ats-solver-eval.c:2993 src/ats/gnunet-ats-solver-eval.c:3045
#, c-format
msgid ""
"Could not load quota for network `%s': `%s', assigning default bandwidth "
"%llu\n"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3011
+#: src/ats/gnunet-ats-solver-eval.c:3012
#, c-format
msgid ""
"No outbound quota configured for network `%s', assigning default bandwidth "
"%llu\n"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3063
+#: src/ats/gnunet-ats-solver-eval.c:3064
#, c-format
msgid ""
"No outbound quota configure for network `%s', assigning default bandwidth "
"%llu\n"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3552
+#: src/ats/gnunet-ats-solver-eval.c:3553
msgid "solver to use"
msgstr "solveur utilisé"
-#: src/ats/gnunet-ats-solver-eval.c:3557
+#: src/ats/gnunet-ats-solver-eval.c:3558
msgid "experiment to use"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3564
+#: src/ats/gnunet-ats-solver-eval.c:3565
msgid "print logging"
msgstr "afficher le journal"
-#: src/ats/gnunet-ats-solver-eval.c:3569
+#: src/ats/gnunet-ats-solver-eval.c:3570
msgid "save logging to disk"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3574
+#: src/ats/gnunet-ats-solver-eval.c:3575
msgid "disable normalization"
msgstr ""
@@ -1492,38 +1492,7 @@ msgstr ""
msgid "# updates to my type map"
msgstr ""
-#: src/datacache/datacache.c:117 src/datacache/datacache.c:275
-#: src/datastore/gnunet-service-datastore.c:743
-msgid "# bytes stored"
-msgstr ""
-
-#: src/datacache/datacache.c:121 src/datacache/datacache.c:279
-msgid "# items stored"
-msgstr ""
-
-#: src/datacache/datacache.c:185
-#, c-format
-msgid "Loading `%s' datacache plugin\n"
-msgstr ""
-
-#: src/datacache/datacache.c:203
-#, c-format
-msgid "Failed to load datacache plugin for `%s'\n"
-msgstr ""
-
-#: src/datacache/datacache.c:297
-msgid "# requests received"
-msgstr ""
-
-#: src/datacache/datacache.c:308
-msgid "# requests filtered by bloom filter"
-msgstr ""
-
-#: src/datacache/datacache.c:329
-msgid "# proximity search requests received"
-msgstr ""
-
-#: src/datacache/plugin_datacache_heap.c:527
+#: src/datacache/plugin_datacache_heap.c:555
msgid "Heap datacache running\n"
msgstr ""
@@ -1545,7 +1514,7 @@ msgstr ""
msgid "`%s' failed at %s:%d with error: %s\n"
msgstr ""
-#: src/datacache/plugin_datacache_sqlite.c:693
+#: src/datacache/plugin_datacache_sqlite.c:723
#: src/datastore/plugin_datastore_sqlite.c:531
#: src/namecache/plugin_namecache_sqlite.c:237
#: src/namestore/plugin_namestore_sqlite.c:273
@@ -1728,6 +1697,10 @@ msgstr "# réservé"
msgid "Could not find matching reservation"
msgstr ""
+#: src/datastore/gnunet-service-datastore.c:743
+msgid "# bytes stored"
+msgstr ""
+
#: src/datastore/gnunet-service-datastore.c:758
#, c-format
msgid "Need %llu bytes more space (%llu allowed, using %llu)\n"
@@ -1907,7 +1880,7 @@ msgstr ""
#: src/datastore/plugin_datastore_sqlite.c:1337
#: src/namecache/plugin_namecache_sqlite.c:564
-#: src/namestore/plugin_namestore_sqlite.c:765
+#: src/namestore/plugin_namestore_sqlite.c:775
msgid "Sqlite database running\n"
msgstr ""
@@ -1915,7 +1888,7 @@ msgstr ""
msgid "Template database running\n"
msgstr ""
-#: src/dht/gnunet-dht-get.c:159
+#: src/dht/gnunet-dht-get.c:164
#, c-format
msgid ""
"Result %d, type %d:\n"
@@ -1924,50 +1897,60 @@ msgstr ""
"Resultat %d, type %d :\n"
"%.*s\n"
-#: src/dht/gnunet-dht-get.c:160
+#: src/dht/gnunet-dht-get.c:165
#, fuzzy, c-format
msgid "Result %d, type %d:\n"
msgstr ""
"Resultat %d, type %d :\n"
"%.*s\n"
-#: src/dht/gnunet-dht-get.c:209
+#: src/dht/gnunet-dht-get.c:215
msgid "Must provide key for DHT GET!\n"
msgstr ""
-#: src/dht/gnunet-dht-get.c:217 src/dht/gnunet-dht-monitor.c:255
+#: src/dht/gnunet-dht-get.c:223 src/dht/gnunet-dht-hello.c:119
+#: src/dht/gnunet-dht-monitor.c:255
+#, c-format
msgid "Failed to connect to DHT service!\n"
msgstr ""
-#: src/dht/gnunet-dht-get.c:227
+#: src/dht/gnunet-dht-get.c:233
msgid "Issuing DHT GET with key"
msgstr ""
-#: src/dht/gnunet-dht-get.c:260 src/dht/gnunet-dht-monitor.c:302
+#: src/dht/gnunet-dht-get.c:269 src/dht/gnunet-dht-monitor.c:302
#: src/dht/gnunet-dht-put.c:200
msgid "the query key"
msgstr ""
-#: src/dht/gnunet-dht-get.c:266
+#: src/dht/gnunet-dht-get.c:275
msgid "how many parallel requests (replicas) to create"
msgstr ""
-#: src/dht/gnunet-dht-get.c:272 src/dht/gnunet-dht-monitor.c:308
+#: src/dht/gnunet-dht-get.c:280 src/dht/gnunet-dht-put.c:217
+msgid "use DHT's record route option"
+msgstr ""
+
+#: src/dht/gnunet-dht-get.c:286 src/dht/gnunet-dht-monitor.c:308
msgid "the type of data to look for"
msgstr ""
-#: src/dht/gnunet-dht-get.c:278
+#: src/dht/gnunet-dht-get.c:292
msgid "how long to execute this query before giving up?"
msgstr ""
-#: src/dht/gnunet-dht-get.c:284 src/dht/gnunet-dht-put.c:206
+#: src/dht/gnunet-dht-get.c:298 src/dht/gnunet-dht-put.c:206
msgid "use DHT's demultiplex everywhere option"
msgstr ""
-#: src/dht/gnunet-dht-get.c:301
+#: src/dht/gnunet-dht-get.c:315
msgid "Issue a GET request to the GNUnet DHT, prints results."
msgstr ""
+#: src/dht/gnunet-dht-hello.c:166
+msgid "Obtain HELLO from DHT or provide HELLO to DHT for bootstrapping"
+msgstr ""
+
#: src/dht/gnunet-dht-monitor.c:315
msgid "how long should the monitor command run"
msgstr ""
@@ -2007,10 +1990,6 @@ msgstr ""
msgid "how many replicas to create"
msgstr ""
-#: src/dht/gnunet-dht-put.c:217
-msgid "use DHT's record route option"
-msgstr ""
-
#: src/dht/gnunet-dht-put.c:223
msgid "the type to insert data as"
msgstr ""
@@ -2066,17 +2045,17 @@ msgstr ""
msgid "Measure quality and performance of the DHT service."
msgstr ""
-#: src/dht/plugin_block_dht.c:328
+#: src/dht/plugin_block_dht.c:404
#, c-format
msgid "Block not of type %u\n"
msgstr ""
-#: src/dht/plugin_block_dht.c:337
+#: src/dht/plugin_block_dht.c:413
#, c-format
msgid "Size mismatch for block with type %u\n"
msgstr ""
-#: src/dht/plugin_block_dht.c:348
+#: src/dht/plugin_block_dht.c:424
#, c-format
msgid "Block of type %u is malformed\n"
msgstr ""
@@ -2767,20 +2746,20 @@ msgstr ""
msgid "LOC URI malformed (signature failed validation)"
msgstr ""
-#: src/fs/fs_uri.c:653
+#: src/fs/fs_uri.c:652
#, fuzzy
msgid "invalid argument"
msgstr "Argument invalide « %s »\n"
-#: src/fs/fs_uri.c:665
+#: src/fs/fs_uri.c:671
msgid "Unrecognized URI type"
msgstr "Type d’URI non reconnu"
-#: src/fs/fs_uri.c:1071 src/fs/fs_uri.c:1098
+#: src/fs/fs_uri.c:1075 src/fs/fs_uri.c:1102
msgid "No keywords specified!\n"
msgstr ""
-#: src/fs/fs_uri.c:1104
+#: src/fs/fs_uri.c:1108
msgid "Number of double-quotes not balanced!\n"
msgstr ""
@@ -2904,7 +2883,7 @@ msgid "Downloading `%s' done (%s/s).\n"
msgstr ""
#: src/fs/gnunet-download.c:206 src/fs/gnunet-publish.c:299
-#: src/fs/gnunet-search.c:229 src/fs/gnunet-unindex.c:117
+#: src/fs/gnunet-search.c:538 src/fs/gnunet-unindex.c:117
#, c-format
msgid "Unexpected status: %d\n"
msgstr ""
@@ -2927,12 +2906,12 @@ msgid "Target filename must be specified.\n"
msgstr ""
#: src/fs/gnunet-download.c:271 src/fs/gnunet-publish.c:869
-#: src/fs/gnunet-search.c:294 src/fs/gnunet-unindex.c:154
+#: src/fs/gnunet-unindex.c:154
#, c-format
msgid "Could not initialize `%s' subsystem.\n"
msgstr ""
-#: src/fs/gnunet-download.c:318 src/fs/gnunet-search.c:334
+#: src/fs/gnunet-download.c:318
msgid "set the desired LEVEL of receiver-anonymity"
msgstr ""
@@ -2940,7 +2919,7 @@ msgstr ""
msgid "delete incomplete downloads (when aborted with CTRL-C)"
msgstr ""
-#: src/fs/gnunet-download.c:330 src/fs/gnunet-search.c:339
+#: src/fs/gnunet-download.c:330 src/fs/gnunet-search.c:740
msgid "only search the local peer (no P2P network search)"
msgstr ""
@@ -3176,38 +3155,110 @@ msgstr ""
msgid "Publish a file or directory on GNUnet"
msgstr ""
-#: src/fs/gnunet-search.c:130
+#: src/fs/gnunet-search.c:441
#, c-format
msgid "Failed to write directory with search results to `%s'\n"
msgstr ""
-#: src/fs/gnunet-search.c:219
+#: src/fs/gnunet-search.c:527
#, c-format
msgid "Error searching: %s.\n"
msgstr ""
-#: src/fs/gnunet-search.c:281
+#: src/fs/gnunet-search.c:587
+#, c-format
+msgid "Conflicting options --bookmark-only and --silent.\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:594
+#, c-format
+msgid "Conflicting options --bookmark-only and --output.\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:600
+#, c-format
+msgid "An output file is mandatory for silent mode.\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:621
msgid "Could not create keyword URI from arguments.\n"
msgstr ""
-#: src/fs/gnunet-search.c:308
+#: src/fs/gnunet-search.c:629
+msgid ""
+"Invalid URI. Valid URIs for searching are keyword query URIs\n"
+"(\"gnunet://fs/ksk/...\") and namespace content URIs (\"gnunet://fs/sks/..."
+"\").\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:654
+#, c-format
+msgid "Could not initialize the `%s` subsystem.\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:668
msgid "Could not start searching.\n"
msgstr ""
-#: src/fs/gnunet-search.c:345
-msgid "write search results to file starting with PREFIX"
+#: src/fs/gnunet-search.c:694
+msgid "set the desired LEVEL of receiver-anonymity (default: 1)"
+msgstr ""
+
+#: src/fs/gnunet-search.c:700
+msgid "do not search, print only the URI that points to this search"
+msgstr ""
+
+#: src/fs/gnunet-search.c:707
+msgid ""
+"write search results for directories according to FORMAT; accepted "
+"placeholders are: %a, %f, %j, %l, %m, %n, %s; defaults to the value of --"
+"printf when omitted or to `"
+msgstr ""
+
+#: src/fs/gnunet-search.c:717
+msgid ""
+"write search results according to FORMAT; accepted placeholders are: %a, %f, "
+"%j, %l, %m, %n, %s; defaults to `"
msgstr ""
-#: src/fs/gnunet-search.c:351
-msgid "automatically terminate search after DELAY"
+#: src/fs/gnunet-search.c:725
+msgid ""
+"when the %a or %j placeholders appear in --printf or --dir-printf, list each "
+"metadata property according to FORMAT; accepted placeholders are: %i, %l, "
+"%n, %p"
msgstr ""
-#: src/fs/gnunet-search.c:357
+#: src/fs/gnunet-search.c:734
msgid "automatically terminate search after VALUE results are found"
msgstr ""
-#: src/fs/gnunet-search.c:371
-msgid "Search GNUnet for files that were published on GNUnet"
+#: src/fs/gnunet-search.c:746
+msgid ""
+"create a GNUnet directory with search results at FILENAME (e.g. `gnunet-"
+"search --output=commons"
+msgstr ""
+
+#: src/fs/gnunet-search.c:753
+msgid "silent mode (requires the --output argument)"
+msgstr ""
+
+#: src/fs/gnunet-search.c:759
+msgid ""
+"automatically terminate search after DELAY; the value given must be a number "
+"followed by a space and a time unit, for example \"500 ms\"; without a unit "
+"it defaults to microseconds - 1000000 = 1 second; if 0 or omitted it means "
+"to wait for CTRL-C"
+msgstr ""
+
+#: src/fs/gnunet-search.c:768
+#, c-format
+msgid ""
+"be verbose (append \"%a\\n\" to the default --printf and --dir-printf "
+"arguments - ignored when these are provided by the user)"
+msgstr ""
+
+#: src/fs/gnunet-search.c:781
+msgid "Search for files that have been published on GNUnet\n"
msgstr ""
#: src/fs/gnunet-service-fs.c:371 src/fs/gnunet-service-fs.c:878
@@ -3531,64 +3582,69 @@ msgstr ""
msgid "Expected a base32-encoded public zone key\n"
msgstr ""
-#: src/gns/gnunet-bcd.c:571
+#: src/gns/gnunet-bcd.c:573
#, fuzzy, c-format
msgid "Invalid port number %u\n"
msgstr "Argument invalide « %s »\n"
-#: src/gns/gnunet-bcd.c:612 src/namestore/gnunet-namestore-fcfsd.c:1113
+#: src/gns/gnunet-bcd.c:614 src/namestore/gnunet-namestore-fcfsd.c:1113
msgid "Unable to set up the daemon\n"
msgstr ""
-#: src/gns/gnunet-bcd.c:635 src/namestore/gnunet-namestore-fcfsd.c:987
+#: src/gns/gnunet-bcd.c:637 src/namestore/gnunet-namestore-fcfsd.c:987
msgid "Failed to start HTTP server\n"
msgstr ""
-#: src/gns/gnunet-bcd.c:658
+#: src/gns/gnunet-bcd.c:660
msgid "Run HTTP server on port PORT (default is 8888)"
msgstr ""
-#: src/gns/gnunet-bcd.c:667
+#: src/gns/gnunet-bcd.c:669
msgid "GNUnet HTTP server to create business cards"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:241
+#: src/gns/gnunet-dns2gns.c:298
msgid "Failed to pack DNS response into UDP packet!\n"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:315
+#: src/gns/gnunet-dns2gns.c:379
#, fuzzy
msgid "Failed to parse DNS response!\n"
msgstr "Échec du démarrage de %s\n"
-#: src/gns/gnunet-dns2gns.c:452
+#: src/gns/gnunet-dns2gns.c:453
+#, c-format
+msgid "VPN returned empty result for `%s'\n"
+msgstr ""
+
+#: src/gns/gnunet-dns2gns.c:655
#, c-format
msgid "Cannot parse DNS request from %s\n"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:468
+#: src/gns/gnunet-dns2gns.c:671
#, c-format
msgid "Received malformed DNS request from %s\n"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:476
+#: src/gns/gnunet-dns2gns.c:679
#, c-format
msgid "Received unsupported DNS request from %s\n"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:637
+#: src/gns/gnunet-dns2gns.c:840
msgid "No DNS server specified!\n"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:786
+#: src/gns/gnunet-dns2gns.c:995
msgid "IP of recursive DNS resolver to use (required)"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:792
+#: src/gns/gnunet-dns2gns.c:1001
msgid "UDP port to listen on for inbound DNS requests; default: 2853"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:809
+#: src/gns/gnunet-dns2gns.c:1018
msgid "GNUnet DNS-to-GNS proxy (a DNS server)"
msgstr ""
@@ -3766,17 +3822,17 @@ msgstr ""
msgid "GNUnet GNS resolver tool"
msgstr ""
-#: src/gns/gnunet-service-gns.c:505
+#: src/gns/gnunet-service-gns.c:501
msgid "Properly base32-encoded public key required"
msgstr ""
-#: src/gns/gnunet-service-gns.c:541
+#: src/gns/gnunet-service-gns.c:537
msgid "Failed to connect to the namecache!\n"
msgstr ""
-#: src/gns/gnunet-service-gns.c:560
-#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442
-#: src/zonemaster/gnunet-service-zonemaster.c:885
+#: src/gns/gnunet-service-gns.c:556
+#: src/zonemaster/gnunet-service-zonemaster-monitor.c:421
+#: src/zonemaster/gnunet-service-zonemaster.c:870
msgid "Could not connect to DHT!\n"
msgstr ""
@@ -3788,94 +3844,97 @@ msgstr ""
msgid "Failed to connect to the DNS service!\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:706
+#: src/gns/gnunet-service-gns_resolver.c:659
#, c-format
msgid "Protocol `%s' unknown, skipping labels.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:718
+#: src/gns/gnunet-service-gns_resolver.c:671
#, c-format
msgid "Service `%s' unknown for protocol `%s', trying as number.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:724
+#: src/gns/gnunet-service-gns_resolver.c:677
#, c-format
msgid "Service `%s' not a port, skipping service labels.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:938
+#: src/gns/gnunet-service-gns_resolver.c:891
msgid "Failed to parse DNS response\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1129
+#: src/gns/gnunet-service-gns_resolver.c:1082
#, c-format
msgid "Skipping record of unsupported type %d\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1447
-#, c-format
-msgid "VPN returned empty result for `%s'\n"
-msgstr ""
-
-#: src/gns/gnunet-service-gns_resolver.c:1919
+#: src/gns/gnunet-service-gns_resolver.c:1859
#, c-format
msgid "Name `%s' cannot be converted to IDNA."
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1934
+#: src/gns/gnunet-service-gns_resolver.c:1874
#, c-format
msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1979
+#: src/gns/gnunet-service-gns_resolver.c:1914
#, c-format
msgid "GNS lookup failed (zero records found for `%s')\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2406
+#: src/gns/gnunet-service-gns_resolver.c:2312
+msgid "Unable to process critical delegation record\n"
+msgstr ""
+
+#: src/gns/gnunet-service-gns_resolver.c:2317
msgid "GNS lookup recursion failed (no delegation record found)\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2429
+#: src/gns/gnunet-service-gns_resolver.c:2340
#, c-format
msgid "Failed to cache GNS resolution: %s\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2594
+#: src/gns/gnunet-service-gns_resolver.c:2505
#, c-format
msgid "GNS namecache returned empty result for `%s'\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2734
+#: src/gns/gnunet-service-gns_resolver.c:2652
#, c-format
msgid "Zone %s was revoked, resolution fails\n"
msgstr ""
-#: src/gns/plugin_gnsrecord_gns.c:174
+#: src/gns/plugin_gnsrecord_gns.c:136
+msgid "This is a memento of an older block for internal maintenance."
+msgstr ""
+
+#: src/gns/plugin_gnsrecord_gns.c:175
#, c-format
msgid "Unable to parse zone key record `%s'\n"
msgstr ""
-#: src/gns/plugin_gnsrecord_gns.c:187
+#: src/gns/plugin_gnsrecord_gns.c:188
msgid "Record type does not match parsed record type\n"
msgstr ""
-#: src/gns/plugin_gnsrecord_gns.c:213
+#: src/gns/plugin_gnsrecord_gns.c:211
#, c-format
msgid "Unable to parse GNS2DNS record `%s'\n"
msgstr ""
-#: src/gns/plugin_gnsrecord_gns.c:229
+#: src/gns/plugin_gnsrecord_gns.c:227
#, c-format
msgid "Failed to serialize GNS2DNS record with value `%s': Not a DNS name.\n"
msgstr ""
-#: src/gns/plugin_gnsrecord_gns.c:253
+#: src/gns/plugin_gnsrecord_gns.c:251
#, c-format
msgid "Unable to parse VPN record string `%s'\n"
msgstr ""
-#: src/gns/plugin_gnsrecord_gns.c:285
+#: src/gns/plugin_gnsrecord_gns.c:283
#, c-format
msgid "Unable to parse BOX record string `%s'\n"
msgstr ""
@@ -3884,6 +3943,34 @@ msgstr ""
msgid "Gns REST API initialized\n"
msgstr ""
+#: src/gnsrecord/gnsrecord_misc.c:448
+msgid "Zone delegation record not allowed in apex."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:456
+msgid "Zone delegation record set contains mutually exclusive records."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:466
+msgid "Multiple REDIRECT records."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:475 src/gnsrecord/gnsrecord_misc.c:501
+msgid "Redirection record set conains mutually exclusive records."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:482
+msgid "Redirection records not allowed in apex."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:493
+msgid "Redirection records not allowed in apex.."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:515
+msgid "Mutually exclusive records."
+msgstr ""
+
#: src/gnsrecord/plugin_gnsrecord_dns.c:367
#, c-format
msgid "Unable to parse IPv4 address `%s'\n"
@@ -4124,7 +4211,7 @@ msgid "# hostlist downloads initiated"
msgstr ""
#: src/hostlist/gnunet-daemon-hostlist_client.c:1144
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1728
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1732
msgid "# milliseconds between hostlist downloads"
msgstr ""
@@ -4182,21 +4269,21 @@ msgstr ""
msgid "# hostlist URIs written to file"
msgstr ""
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1657
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1661
#: src/transport/plugin_transport_http_client.c:2300
#, c-format
msgid "Invalid proxy type: `%s', disabling proxy! Check configuration!\n"
msgstr ""
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1686
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1690
msgid "Learning is enabled on this peer\n"
msgstr ""
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1699
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1703
msgid "Learning is not enabled on this peer\n"
msgstr ""
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1713
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1717
#, c-format
msgid ""
"Since learning is not enabled on this peer, hostlist file `%s' was removed\n"
@@ -4384,49 +4471,49 @@ msgstr ""
msgid "Maintain egos"
msgstr ""
-#: src/identity/gnunet-service-identity.c:503
+#: src/identity/gnunet-service-identity.c:502
msgid "no default known"
msgstr ""
-#: src/identity/gnunet-service-identity.c:528
+#: src/identity/gnunet-service-identity.c:527
msgid "default configured, but ego unknown (internal error)"
msgstr ""
-#: src/identity/gnunet-service-identity.c:621
-#: src/identity/gnunet-service-identity.c:896
-#: src/identity/gnunet-service-identity.c:1016
+#: src/identity/gnunet-service-identity.c:620
+#: src/identity/gnunet-service-identity.c:895
+#: src/identity/gnunet-service-identity.c:1015
#, c-format
msgid "Failed to write subsystem default identifier map to `%s'.\n"
msgstr ""
-#: src/identity/gnunet-service-identity.c:631
+#: src/identity/gnunet-service-identity.c:630
msgid "Unknown ego specified for service (internal error)"
msgstr ""
-#: src/identity/gnunet-service-identity.c:725
+#: src/identity/gnunet-service-identity.c:724
msgid "identifier already in use for another ego"
msgstr ""
-#: src/identity/gnunet-service-identity.c:872
+#: src/identity/gnunet-service-identity.c:871
msgid "target name already exists"
msgstr ""
-#: src/identity/gnunet-service-identity.c:914
-#: src/identity/gnunet-service-identity.c:1033
+#: src/identity/gnunet-service-identity.c:913
+#: src/identity/gnunet-service-identity.c:1032
msgid "no matching ego found"
msgstr ""
-#: src/identity/gnunet-service-identity.c:1131
+#: src/identity/gnunet-service-identity.c:1130
#, c-format
msgid "Failed to parse ego information in `%s'\n"
msgstr ""
-#: src/identity/gnunet-service-identity.c:1189
+#: src/identity/gnunet-service-identity.c:1188
#, c-format
msgid "Failed to parse subsystem identity configuration file `%s'\n"
msgstr ""
-#: src/identity/gnunet-service-identity.c:1198
+#: src/identity/gnunet-service-identity.c:1197
#, c-format
msgid "Failed to create directory `%s' for storing egos\n"
msgstr ""
@@ -4466,7 +4553,7 @@ msgstr ""
msgid "No records found for `%s'"
msgstr ""
-#: src/namecache/gnunet-namecache.c:119 src/namestore/gnunet-namestore.c:459
+#: src/namecache/gnunet-namecache.c:119 src/namestore/gnunet-namestore.c:469
#, c-format
msgid "\tCorrupt or unsupported record of type %u\n"
msgstr ""
@@ -4486,7 +4573,7 @@ msgstr "fornat invalide : « %s »\n"
msgid "You must specify a name\n"
msgstr ""
-#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1641
+#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1591
msgid "name of the record to add/delete/display"
msgstr ""
@@ -4494,7 +4581,7 @@ msgstr ""
msgid "specifies the public key of the zone to look in"
msgstr ""
-#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1702
+#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1652
msgid "GNUnet zone manipulation tool"
msgstr ""
@@ -4635,140 +4722,113 @@ msgstr ""
msgid "GNU Name System First-Come-First-Served name registration service"
msgstr ""
-#: src/namestore/gnunet-namestore.c:334
+#: src/namestore/gnunet-namestore.c:340
#, c-format
msgid "Adding record failed: %s\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:362
+#: src/namestore/gnunet-namestore.c:368
#, c-format
msgid "Deleting record failed, record does not exist%s%s\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:369
+#: src/namestore/gnunet-namestore.c:375
#, c-format
msgid "Deleting record failed%s%s\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:656
-#, c-format
-msgid "A %s record exists already under `%s', no other records can be added.\n"
-msgstr ""
-
#: src/namestore/gnunet-namestore.c:668
#, c-format
msgid ""
-"A zone key record exists already under `%s', no other records can be added.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:680
-#, c-format
-msgid ""
"A SOA record exists already under `%s', cannot add a second SOA to the same "
"zone.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:696
-#, c-format
-msgid "Records already exist under `%s', cannot add `%s' record.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:711
-#, c-format
-msgid "Records already exist under `%s', cannot add record.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:726
-#, c-format
-msgid ""
-"Non-GNS2DNS records already exist under `%s', cannot add GNS2DNS record.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:846
+#: src/namestore/gnunet-namestore.c:789
#, c-format
msgid "There are no records under label `%s' that could be deleted.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:889
+#: src/namestore/gnunet-namestore.c:832
#, c-format
msgid ""
"There are no records under label `%s' that match the request for deletion.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:970
+#: src/namestore/gnunet-namestore.c:920
#, fuzzy, c-format
msgid "Failed to replace records: %s\n"
msgstr "Résolution de « %s » échouée : %s\n"
-#: src/namestore/gnunet-namestore.c:993
+#: src/namestore/gnunet-namestore.c:943
#, c-format
msgid "No options given\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1014 src/namestore/gnunet-namestore.c:1066
-#: src/namestore/gnunet-namestore.c:1076 src/namestore/gnunet-namestore.c:1105
-#: src/namestore/gnunet-namestore.c:1126 src/namestore/gnunet-namestore.c:1153
-#: src/namestore/gnunet-namestore.c:1230
+#: src/namestore/gnunet-namestore.c:964 src/namestore/gnunet-namestore.c:1016
+#: src/namestore/gnunet-namestore.c:1026 src/namestore/gnunet-namestore.c:1055
+#: src/namestore/gnunet-namestore.c:1076 src/namestore/gnunet-namestore.c:1103
+#: src/namestore/gnunet-namestore.c:1180
#, c-format
msgid "Missing option `%s' for operation `%s'\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1016
+#: src/namestore/gnunet-namestore.c:966
msgid "replace"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1045
+#: src/namestore/gnunet-namestore.c:995
#, c-format
msgid "Invalid nick `%s'\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1068 src/namestore/gnunet-namestore.c:1078
-#: src/namestore/gnunet-namestore.c:1107 src/namestore/gnunet-namestore.c:1128
-#: src/namestore/gnunet-namestore.c:1232
+#: src/namestore/gnunet-namestore.c:1018 src/namestore/gnunet-namestore.c:1028
+#: src/namestore/gnunet-namestore.c:1057 src/namestore/gnunet-namestore.c:1078
+#: src/namestore/gnunet-namestore.c:1182
msgid "add"
msgstr "ajouter"
-#: src/namestore/gnunet-namestore.c:1086
+#: src/namestore/gnunet-namestore.c:1036
#, c-format
msgid "Unsupported type `%s'\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1096
+#: src/namestore/gnunet-namestore.c:1046
#, c-format
msgid "For DNS record types `SRV', `TLSA' and `OPENPGPKEY'"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1116
+#: src/namestore/gnunet-namestore.c:1066
#, c-format
msgid "Value `%s' invalid for record type `%s'\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1135 src/namestore/gnunet-namestore.c:1239
+#: src/namestore/gnunet-namestore.c:1085 src/namestore/gnunet-namestore.c:1189
#, c-format
msgid "Invalid time format `%s'\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1155
+#: src/namestore/gnunet-namestore.c:1105
msgid "del"
msgstr "supprimer"
-#: src/namestore/gnunet-namestore.c:1197
+#: src/namestore/gnunet-namestore.c:1147
#, c-format
msgid "Invalid public key for reverse lookup `%s'\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1222
+#: src/namestore/gnunet-namestore.c:1172
#: src/peerinfo-tool/gnunet-peerinfo.c:737
#, c-format
msgid "Invalid URI `%s'\n"
msgstr "URI invalide « %s »\n"
-#: src/namestore/gnunet-namestore.c:1292
+#: src/namestore/gnunet-namestore.c:1242
#, c-format
msgid "Label `%s' contains `.' which is not allowed\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1342
+#: src/namestore/gnunet-namestore.c:1292
#, c-format
msgid ""
"No default identity configured for `namestore' subsystem\n"
@@ -4776,107 +4836,112 @@ msgid ""
"Run gnunet-identity -d to get a list of choices for $NAME\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1407
+#: src/namestore/gnunet-namestore.c:1357
#, c-format
msgid "Superfluous command line arguments (starting with `%s') ignored\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1436
+#: src/namestore/gnunet-namestore.c:1386
#, c-format
msgid "Cannot connect to identity service\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1483
+#: src/namestore/gnunet-namestore.c:1433
msgid "Empty record line argument is not allowed.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1495
+#: src/namestore/gnunet-namestore.c:1445
#, c-format
msgid "Invalid expiration time `%s' (must be without unit)\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1507 src/namestore/gnunet-namestore.c:1523
-#: src/namestore/gnunet-namestore.c:1540
+#: src/namestore/gnunet-namestore.c:1457 src/namestore/gnunet-namestore.c:1473
+#: src/namestore/gnunet-namestore.c:1490
#, c-format
msgid "Missing entries in record line `%s'.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1515
+#: src/namestore/gnunet-namestore.c:1465
#, fuzzy, c-format
msgid "Unknown record type `%s'\n"
msgstr "Commande « %s » inconnue\n"
-#: src/namestore/gnunet-namestore.c:1553
+#: src/namestore/gnunet-namestore.c:1503
#, fuzzy, c-format
msgid "Invalid record data for type %s: `%s'.\n"
msgstr "fornat invalide : « %s »\n"
-#: src/namestore/gnunet-namestore.c:1610
+#: src/namestore/gnunet-namestore.c:1560
msgid "add record"
msgstr "ajouter un enregistrement"
-#: src/namestore/gnunet-namestore.c:1613
+#: src/namestore/gnunet-namestore.c:1563
msgid "delete record"
msgstr "suprimer un enregistrement"
-#: src/namestore/gnunet-namestore.c:1617
+#: src/namestore/gnunet-namestore.c:1567
msgid "display records"
msgstr "afficher les enregistrements"
-#: src/namestore/gnunet-namestore.c:1624
+#: src/namestore/gnunet-namestore.c:1574
msgid ""
"expiration time for record to use (for adding only), \"never\" is possible"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1630
+#: src/namestore/gnunet-namestore.c:1580
msgid "set the desired nick name for the zone"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1635
+#: src/namestore/gnunet-namestore.c:1585
msgid "monitor changes in the namestore"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1647
+#: src/namestore/gnunet-namestore.c:1597
msgid "determine our name for the given PKEY"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1654
+#: src/namestore/gnunet-namestore.c:1604
msgid ""
"set record set to values given by (possibly multiple) RECORDLINES; can be "
"specified multiple times"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1660
+#: src/namestore/gnunet-namestore.c:1610
msgid "type of the record to add/delete/display"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1665
+#: src/namestore/gnunet-namestore.c:1615
msgid "URI to import into our zone"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1671
+#: src/namestore/gnunet-namestore.c:1621
msgid "value of the record to add/delete"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1675
+#: src/namestore/gnunet-namestore.c:1625
msgid "create or list public record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1681
+#: src/namestore/gnunet-namestore.c:1631
msgid ""
"create shadow record (only valid if all other records of the same type have "
"expired"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1687
+#: src/namestore/gnunet-namestore.c:1637
msgid "name of the ego controlling the zone"
msgstr ""
-#: src/namestore/gnunet-service-namestore.c:871
+#: src/namestore/gnunet-service-namestore.c:879
#, c-format
msgid "Failed to replicate block in namecache: %s\n"
msgstr ""
+#: src/namestore/gnunet-service-namestore.c:1668
+#, fuzzy
+msgid "Store failed"
+msgstr "pa_stream_new() échoué : %s\n"
+
#: src/namestore/gnunet-zoneimport.c:1847
msgid "size to use for the main hash map"
msgstr ""
@@ -4885,10 +4950,6 @@ msgstr ""
msgid "minimum expiration time we assume for imported records"
msgstr ""
-#: src/namestore/namestore_api.c:373
-msgid "Namestore failed to store record\n"
-msgstr ""
-
#: src/namestore/plugin_namestore_flat.c:195
#, c-format
msgid "File too big to map: %llu bytes.\n"
@@ -5453,6 +5514,51 @@ msgstr ""
msgid "Daemon to run to perform IP protocol translation to GNUnet"
msgstr ""
+#: src/reclaim/gnunet-did.c:209
+#, fuzzy, c-format
+msgid "Invalid DID `%s'\n"
+msgstr "URI invalide « %s »\n"
+
+#: src/reclaim/gnunet-did.c:835
+msgid "Create a DID Document and display its DID"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:840
+msgid "Get the DID Document associated with the given DID"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:844
+msgid "Show the DID for a given ego"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:849
+msgid "Remove the DID"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:853 src/reclaim/gnunet-did.c:857
+msgid "Replace the DID Document."
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:863
+msgid "The Decentralized Identity (DID)"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:869
+msgid "The DID Document to store in GNUNET"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:874
+msgid "The name of the EGO"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:880
+msgid "The time until the DID Document is going to expire (e.g. 5d)"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:889
+msgid "Manage Decentralized Identities (DIDs)"
+msgstr ""
+
#: src/reclaim/gnunet-reclaim.c:802
#, c-format
msgid "Ego is required\n"
@@ -6317,17 +6423,17 @@ msgid ""
"free topology cannot be more than %u. Given `%s = %llu'"
msgstr ""
-#: src/testbed/testbed_api_topology.c:1033 src/testing/testing.c:2643
+#: src/testbed/testbed_api_topology.c:1033 src/testing/testing.c:2657
#, c-format
msgid "Topology file %s not found\n"
msgstr ""
-#: src/testbed/testbed_api_topology.c:1041 src/testing/testing.c:2651
+#: src/testbed/testbed_api_topology.c:1041 src/testing/testing.c:2665
#, c-format
msgid "Topology file %s has no data\n"
msgstr ""
-#: src/testbed/testbed_api_topology.c:1049 src/testing/testing.c:2659
+#: src/testbed/testbed_api_topology.c:1049 src/testing/testing.c:2673
#, c-format
msgid "Topology file %s cannot be read\n"
msgstr ""
@@ -6525,7 +6631,7 @@ msgstr ""
#: src/transport/gnunet-communicator-tcp.c:3338
#: src/transport/gnunet-communicator-udp.c:3856
-#: src/transport/gnunet-service-tng.c:10512
+#: src/transport/gnunet-service-tng.c:10623
#: src/transport/gnunet-service-transport.c:2627
msgid "Transport service is lacking key configuration settings. Exiting.\n"
msgstr ""
@@ -7683,58 +7789,58 @@ msgstr ""
msgid "Need a non-empty hostname for service `%s'.\n"
msgstr ""
-#: src/util/common_logging.c:626 src/util/common_logging.c:665
+#: src/util/common_logging.c:648 src/util/common_logging.c:687
#, c-format
msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n"
msgstr ""
-#: src/util/common_logging.c:904
+#: src/util/common_logging.c:926
#, c-format
msgid "Message `%.*s' repeated %u times in the last %s\n"
msgstr ""
-#: src/util/common_logging.c:1108
+#: src/util/common_logging.c:1131
msgid "ERROR"
msgstr "ERREUR"
-#: src/util/common_logging.c:1110
+#: src/util/common_logging.c:1133
msgid "WARNING"
msgstr "AVERTISSEMENT"
-#: src/util/common_logging.c:1112
+#: src/util/common_logging.c:1135
msgid "MESSAGE"
msgstr ""
-#: src/util/common_logging.c:1114
+#: src/util/common_logging.c:1137
msgid "INFO"
msgstr "INFO"
-#: src/util/common_logging.c:1116
+#: src/util/common_logging.c:1139
msgid "DEBUG"
msgstr "DEBUG"
-#: src/util/common_logging.c:1118
+#: src/util/common_logging.c:1141
msgid "NONE"
msgstr "AUCUN"
-#: src/util/common_logging.c:1119
+#: src/util/common_logging.c:1142
msgid "INVALID"
msgstr "INVALIDE"
-#: src/util/common_logging.c:1400
+#: src/util/common_logging.c:1423
msgid "unknown address"
msgstr "adresse inconnue"
-#: src/util/common_logging.c:1445
+#: src/util/common_logging.c:1468
msgid "invalid address"
msgstr "adresse invalide"
-#: src/util/common_logging.c:1464
+#: src/util/common_logging.c:1487
#, c-format
msgid "Configuration fails to specify option `%s' in section `%s'!\n"
msgstr ""
-#: src/util/common_logging.c:1487
+#: src/util/common_logging.c:1510
#, c-format
msgid ""
"Configuration specifies invalid value for option `%s' in section `%s': %s\n"
@@ -7879,17 +7985,17 @@ msgstr ""
msgid "Could not bind to any port: %s\n"
msgstr ""
-#: src/util/dnsstub.c:344
+#: src/util/dnsstub.c:370
#, c-format
-msgid "Received DNS response that is too small (%u bytes)"
+msgid "Received DNS response that is too small (%u bytes)\n"
msgstr ""
-#: src/util/dnsstub.c:482
+#: src/util/dnsstub.c:508
#, 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:487
+#: src/util/dnsstub.c:513
#, c-format
msgid "Sent DNS request to %s\n"
msgstr ""
@@ -7974,82 +8080,82 @@ msgid ""
"Arguments mandatory for long options are also mandatory for short options.\n"
msgstr ""
-#: src/util/getopt_helpers.c:196
+#: src/util/getopt_helpers.c:197
msgid "print this help"
msgstr ""
-#: src/util/getopt_helpers.c:261
+#: src/util/getopt_helpers.c:262
msgid "be verbose"
msgstr ""
-#: src/util/getopt_helpers.c:377
+#: src/util/getopt_helpers.c:378
msgid "configure logging to use LOGLEVEL"
msgstr ""
-#: src/util/getopt_helpers.c:444
+#: src/util/getopt_helpers.c:445
msgid "configure logging to write logs to FILENAME"
msgstr ""
-#: src/util/getopt_helpers.c:461
+#: src/util/getopt_helpers.c:462
msgid "use configuration file FILENAME"
msgstr ""
-#: src/util/getopt_helpers.c:497 src/util/getopt_helpers.c:811
-#: src/util/getopt_helpers.c:867
+#: src/util/getopt_helpers.c:498 src/util/getopt_helpers.c:812
+#: src/util/getopt_helpers.c:868
#, c-format
msgid "You must pass a number to the `%s' option.\n"
msgstr ""
-#: src/util/getopt_helpers.c:569
+#: src/util/getopt_helpers.c:570
#, c-format
msgid ""
"You must pass a relative time (optionally with sign) to the `%s' option.\n"
msgstr ""
-#: src/util/getopt_helpers.c:576
+#: src/util/getopt_helpers.c:577
#, c-format
msgid "Value given for time travel `%s' option is too big.\n"
msgstr ""
-#: src/util/getopt_helpers.c:594
+#: src/util/getopt_helpers.c:595
msgid "[+/-]MICROSECONDS"
msgstr ""
-#: src/util/getopt_helpers.c:596
+#: src/util/getopt_helpers.c:597
msgid "modify system time by given offset (for debugging/testing only)"
msgstr ""
-#: src/util/getopt_helpers.c:630
+#: src/util/getopt_helpers.c:631
#, c-format
msgid "You must pass relative time to the `%s' option.\n"
msgstr ""
-#: src/util/getopt_helpers.c:684
+#: src/util/getopt_helpers.c:685
#, c-format
msgid "You must pass absolute time to the `%s' option.\n"
msgstr ""
-#: src/util/getopt_helpers.c:741
+#: src/util/getopt_helpers.c:742
#, c-format
msgid "You must pass a timestamp to the `%s' option.\n"
msgstr ""
-#: src/util/getopt_helpers.c:748
+#: src/util/getopt_helpers.c:749
#, c-format
msgid "The maximum precision allowed for timestamps is seconds.\n"
msgstr ""
-#: src/util/getopt_helpers.c:804
+#: src/util/getopt_helpers.c:805
#, c-format
msgid "Your input for the '%s' option has to be a non negative number\n"
msgstr ""
-#: src/util/getopt_helpers.c:874
+#: src/util/getopt_helpers.c:875
#, c-format
msgid "You must pass a number below %u to the `%s' option.\n"
msgstr ""
-#: src/util/getopt_helpers.c:952
+#: src/util/getopt_helpers.c:953
#, c-format
msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n"
msgstr ""
@@ -8082,7 +8188,7 @@ msgstr ""
msgid "Manipulate GNUnet configuration files"
msgstr ""
-#: src/util/gnunet-crypto-tvg.c:1072
+#: src/util/gnunet-crypto-tvg.c:1483
msgid "verify a test vector from stdin"
msgstr ""
@@ -8336,7 +8442,7 @@ msgstr ""
msgid "Unable to shorten unix path `%s' while keeping name unique\n"
msgstr ""
-#: src/util/network.c:1306
+#: src/util/network.c:1307
#, c-format
msgid ""
"Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n"
@@ -8462,77 +8568,77 @@ msgstr ""
msgid "Character sets requested were `%s'->`%s'\n"
msgstr ""
-#: src/util/strings.c:487
+#: src/util/strings.c:514
msgid "Failed to expand `$HOME': environment variable `HOME' not set"
msgstr ""
-#: src/util/strings.c:1023
+#: src/util/strings.c:1050
msgid "IPv6 address did not start with `['\n"
msgstr ""
-#: src/util/strings.c:1031
+#: src/util/strings.c:1058
msgid "IPv6 address did contain ':' to separate port number\n"
msgstr ""
-#: src/util/strings.c:1038
+#: src/util/strings.c:1065
msgid "IPv6 address did contain ']' before ':' to separate port number\n"
msgstr ""
-#: src/util/strings.c:1046
+#: src/util/strings.c:1073
msgid "IPv6 address did contain a valid port number after the last ':'\n"
msgstr ""
-#: src/util/strings.c:1055
+#: src/util/strings.c:1082
#, c-format
msgid "Invalid IPv6 address `%s': %s\n"
msgstr ""
-#: src/util/strings.c:1237 src/util/strings.c:1248
+#: src/util/strings.c:1264 src/util/strings.c:1275
msgid "Port not in range\n"
msgstr ""
-#: src/util/strings.c:1257
+#: src/util/strings.c:1284
#, c-format
msgid "Malformed port policy `%s'\n"
msgstr ""
-#: src/util/strings.c:1328 src/util/strings.c:1357 src/util/strings.c:1404
-#: src/util/strings.c:1424
+#: src/util/strings.c:1355 src/util/strings.c:1384 src/util/strings.c:1431
+#: src/util/strings.c:1451
#, c-format
msgid "Invalid format for IP: `%s'\n"
msgstr ""
-#: src/util/strings.c:1382
+#: src/util/strings.c:1409
#, c-format
msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)."
msgstr ""
-#: src/util/strings.c:1433
+#: src/util/strings.c:1460
#, c-format
msgid "Invalid format: `%s'\n"
msgstr "fornat invalide : « %s »\n"
-#: src/util/strings.c:1475
+#: src/util/strings.c:1502
#, c-format
msgid "Invalid network notation (does not end with ';': `%s')\n"
msgstr ""
-#: src/util/strings.c:1525
+#: src/util/strings.c:1552
#, c-format
msgid "Wrong format `%s' for netmask\n"
msgstr ""
-#: src/util/strings.c:1556
+#: src/util/strings.c:1583
#, c-format
msgid "Wrong format `%s' for network\n"
msgstr ""
-#: src/util/time.c:863 src/util/time.c:891
+#: src/util/time.c:870 src/util/time.c:898
#, c-format
msgid "Failed to map `%s', cannot assure monotonic time!\n"
msgstr ""
-#: src/util/time.c:899
+#: src/util/time.c:906
#, c-format
msgid ""
"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
@@ -8702,8 +8808,8 @@ msgstr ""
msgid "Setup tunnels via VPN."
msgstr "Configurer des tunnels via VPN."
-#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418
-#: src/zonemaster/gnunet-service-zonemaster.c:847
+#: src/zonemaster/gnunet-service-zonemaster-monitor.c:397
+#: src/zonemaster/gnunet-service-zonemaster.c:832
msgid "Failed to connect to the namestore!\n"
msgstr ""
diff --git a/po/it.po b/po/it.po
index 8537d1afe..b97c40faa 100644
--- a/po/it.po
+++ b/po/it.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gnunet 0.10.1\n"
"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2022-01-10 15:13+0100\n"
+"POT-Creation-Date: 2022-03-04 22:23+0100\n"
"PO-Revision-Date: 2019-10-16 11:00+0200\n"
"Last-Translator: Sebastiano Pistore <sebastianopistore.info@protonmail.ch>\n"
"Language-Team: Italian <tp@lists.linux.it>\n"
@@ -20,7 +20,7 @@ msgstr ""
"X-Generator: Poedit 2.2.3\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1304
+#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1254
#, c-format
msgid "Ego `%s' not known to identity service\n"
msgstr ""
@@ -32,7 +32,7 @@ msgstr ""
#: src/abd/gnunet-abd.c:558 src/abd/gnunet-service-abd.c:1751
#: src/namestore/gnunet-namestore-fcfsd.c:1080
-#: src/namestore/gnunet-namestore.c:1001
+#: src/namestore/gnunet-namestore.c:951
#, c-format
msgid "Failed to connect to namestore\n"
msgstr ""
@@ -612,44 +612,44 @@ msgstr ""
msgid "Print information about ATS state"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044
+#: src/ats/gnunet-ats-solver-eval.c:2993 src/ats/gnunet-ats-solver-eval.c:3045
#, c-format
msgid ""
"Could not load quota for network `%s': `%s', assigning default bandwidth "
"%llu\n"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3011
+#: src/ats/gnunet-ats-solver-eval.c:3012
#, c-format
msgid ""
"No outbound quota configured for network `%s', assigning default bandwidth "
"%llu\n"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3063
+#: src/ats/gnunet-ats-solver-eval.c:3064
#, c-format
msgid ""
"No outbound quota configure for network `%s', assigning default bandwidth "
"%llu\n"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3552
+#: src/ats/gnunet-ats-solver-eval.c:3553
msgid "solver to use"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3557
+#: src/ats/gnunet-ats-solver-eval.c:3558
msgid "experiment to use"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3564
+#: src/ats/gnunet-ats-solver-eval.c:3565
msgid "print logging"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3569
+#: src/ats/gnunet-ats-solver-eval.c:3570
msgid "save logging to disk"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3574
+#: src/ats/gnunet-ats-solver-eval.c:3575
msgid "disable normalization"
msgstr ""
@@ -1498,39 +1498,7 @@ msgstr ""
msgid "# updates to my type map"
msgstr ""
-#: src/datacache/datacache.c:117 src/datacache/datacache.c:275
-#: src/datastore/gnunet-service-datastore.c:743
-msgid "# bytes stored"
-msgstr ""
-
-#: src/datacache/datacache.c:121 src/datacache/datacache.c:279
-msgid "# items stored"
-msgstr "# elementi memorizzati"
-
-#: src/datacache/datacache.c:185
-#, c-format
-msgid "Loading `%s' datacache plugin\n"
-msgstr ""
-
-#: src/datacache/datacache.c:203
-#, c-format
-msgid "Failed to load datacache plugin for `%s'\n"
-msgstr ""
-
-#: src/datacache/datacache.c:297
-msgid "# requests received"
-msgstr ""
-
-#: src/datacache/datacache.c:308
-msgid "# requests filtered by bloom filter"
-msgstr ""
-
-#: src/datacache/datacache.c:329
-#, fuzzy
-msgid "# proximity search requests received"
-msgstr "# richieste GET ricevute"
-
-#: src/datacache/plugin_datacache_heap.c:527
+#: src/datacache/plugin_datacache_heap.c:555
msgid "Heap datacache running\n"
msgstr ""
@@ -1552,7 +1520,7 @@ msgstr ""
msgid "`%s' failed at %s:%d with error: %s\n"
msgstr ""
-#: src/datacache/plugin_datacache_sqlite.c:693
+#: src/datacache/plugin_datacache_sqlite.c:723
#: src/datastore/plugin_datastore_sqlite.c:531
#: src/namecache/plugin_namecache_sqlite.c:237
#: src/namestore/plugin_namestore_sqlite.c:273
@@ -1736,6 +1704,10 @@ msgstr ""
msgid "Could not find matching reservation"
msgstr ""
+#: src/datastore/gnunet-service-datastore.c:743
+msgid "# bytes stored"
+msgstr ""
+
#: src/datastore/gnunet-service-datastore.c:758
#, c-format
msgid "Need %llu bytes more space (%llu allowed, using %llu)\n"
@@ -1916,7 +1888,7 @@ msgstr ""
#: src/datastore/plugin_datastore_sqlite.c:1337
#: src/namecache/plugin_namecache_sqlite.c:564
-#: src/namestore/plugin_namestore_sqlite.c:765
+#: src/namestore/plugin_namestore_sqlite.c:775
msgid "Sqlite database running\n"
msgstr ""
@@ -1924,55 +1896,65 @@ msgstr ""
msgid "Template database running\n"
msgstr ""
-#: src/dht/gnunet-dht-get.c:159
+#: src/dht/gnunet-dht-get.c:164
#, c-format
msgid ""
"Result %d, type %d:\n"
"%.*s\n"
msgstr ""
-#: src/dht/gnunet-dht-get.c:160
+#: src/dht/gnunet-dht-get.c:165
#, c-format
msgid "Result %d, type %d:\n"
msgstr ""
-#: src/dht/gnunet-dht-get.c:209
+#: src/dht/gnunet-dht-get.c:215
msgid "Must provide key for DHT GET!\n"
msgstr ""
-#: src/dht/gnunet-dht-get.c:217 src/dht/gnunet-dht-monitor.c:255
+#: src/dht/gnunet-dht-get.c:223 src/dht/gnunet-dht-hello.c:119
+#: src/dht/gnunet-dht-monitor.c:255
+#, c-format
msgid "Failed to connect to DHT service!\n"
msgstr ""
-#: src/dht/gnunet-dht-get.c:227
+#: src/dht/gnunet-dht-get.c:233
msgid "Issuing DHT GET with key"
msgstr ""
-#: src/dht/gnunet-dht-get.c:260 src/dht/gnunet-dht-monitor.c:302
+#: src/dht/gnunet-dht-get.c:269 src/dht/gnunet-dht-monitor.c:302
#: src/dht/gnunet-dht-put.c:200
msgid "the query key"
msgstr ""
-#: src/dht/gnunet-dht-get.c:266
+#: src/dht/gnunet-dht-get.c:275
msgid "how many parallel requests (replicas) to create"
msgstr ""
-#: src/dht/gnunet-dht-get.c:272 src/dht/gnunet-dht-monitor.c:308
+#: src/dht/gnunet-dht-get.c:280 src/dht/gnunet-dht-put.c:217
+msgid "use DHT's record route option"
+msgstr ""
+
+#: src/dht/gnunet-dht-get.c:286 src/dht/gnunet-dht-monitor.c:308
msgid "the type of data to look for"
msgstr ""
-#: src/dht/gnunet-dht-get.c:278
+#: src/dht/gnunet-dht-get.c:292
msgid "how long to execute this query before giving up?"
msgstr ""
-#: src/dht/gnunet-dht-get.c:284 src/dht/gnunet-dht-put.c:206
+#: src/dht/gnunet-dht-get.c:298 src/dht/gnunet-dht-put.c:206
msgid "use DHT's demultiplex everywhere option"
msgstr ""
-#: src/dht/gnunet-dht-get.c:301
+#: src/dht/gnunet-dht-get.c:315
msgid "Issue a GET request to the GNUnet DHT, prints results."
msgstr ""
+#: src/dht/gnunet-dht-hello.c:166
+msgid "Obtain HELLO from DHT or provide HELLO to DHT for bootstrapping"
+msgstr ""
+
#: src/dht/gnunet-dht-monitor.c:315
msgid "how long should the monitor command run"
msgstr ""
@@ -2012,10 +1994,6 @@ msgstr ""
msgid "how many replicas to create"
msgstr ""
-#: src/dht/gnunet-dht-put.c:217
-msgid "use DHT's record route option"
-msgstr ""
-
#: src/dht/gnunet-dht-put.c:223
msgid "the type to insert data as"
msgstr ""
@@ -2070,17 +2048,17 @@ msgstr ""
msgid "Measure quality and performance of the DHT service."
msgstr ""
-#: src/dht/plugin_block_dht.c:328
+#: src/dht/plugin_block_dht.c:404
#, c-format
msgid "Block not of type %u\n"
msgstr ""
-#: src/dht/plugin_block_dht.c:337
+#: src/dht/plugin_block_dht.c:413
#, c-format
msgid "Size mismatch for block with type %u\n"
msgstr ""
-#: src/dht/plugin_block_dht.c:348
+#: src/dht/plugin_block_dht.c:424
#, c-format
msgid "Block of type %u is malformed\n"
msgstr ""
@@ -2782,19 +2760,19 @@ msgstr ""
msgid "LOC URI malformed (signature failed validation)"
msgstr ""
-#: src/fs/fs_uri.c:653
+#: src/fs/fs_uri.c:652
msgid "invalid argument"
msgstr "argomento non valido"
-#: src/fs/fs_uri.c:665
+#: src/fs/fs_uri.c:671
msgid "Unrecognized URI type"
msgstr ""
-#: src/fs/fs_uri.c:1071 src/fs/fs_uri.c:1098
+#: src/fs/fs_uri.c:1075 src/fs/fs_uri.c:1102
msgid "No keywords specified!\n"
msgstr ""
-#: src/fs/fs_uri.c:1104
+#: src/fs/fs_uri.c:1108
msgid "Number of double-quotes not balanced!\n"
msgstr ""
@@ -2918,7 +2896,7 @@ msgid "Downloading `%s' done (%s/s).\n"
msgstr ""
#: src/fs/gnunet-download.c:206 src/fs/gnunet-publish.c:299
-#: src/fs/gnunet-search.c:229 src/fs/gnunet-unindex.c:117
+#: src/fs/gnunet-search.c:538 src/fs/gnunet-unindex.c:117
#, c-format
msgid "Unexpected status: %d\n"
msgstr ""
@@ -2941,12 +2919,12 @@ msgid "Target filename must be specified.\n"
msgstr ""
#: src/fs/gnunet-download.c:271 src/fs/gnunet-publish.c:869
-#: src/fs/gnunet-search.c:294 src/fs/gnunet-unindex.c:154
+#: src/fs/gnunet-unindex.c:154
#, c-format
msgid "Could not initialize `%s' subsystem.\n"
msgstr ""
-#: src/fs/gnunet-download.c:318 src/fs/gnunet-search.c:334
+#: src/fs/gnunet-download.c:318
msgid "set the desired LEVEL of receiver-anonymity"
msgstr ""
@@ -2954,7 +2932,7 @@ msgstr ""
msgid "delete incomplete downloads (when aborted with CTRL-C)"
msgstr ""
-#: src/fs/gnunet-download.c:330 src/fs/gnunet-search.c:339
+#: src/fs/gnunet-download.c:330 src/fs/gnunet-search.c:740
msgid "only search the local peer (no P2P network search)"
msgstr ""
@@ -3195,38 +3173,110 @@ msgstr ""
msgid "Publish a file or directory on GNUnet"
msgstr ""
-#: src/fs/gnunet-search.c:130
+#: src/fs/gnunet-search.c:441
#, c-format
msgid "Failed to write directory with search results to `%s'\n"
msgstr ""
-#: src/fs/gnunet-search.c:219
+#: src/fs/gnunet-search.c:527
#, c-format
msgid "Error searching: %s.\n"
msgstr ""
-#: src/fs/gnunet-search.c:281
+#: src/fs/gnunet-search.c:587
+#, c-format
+msgid "Conflicting options --bookmark-only and --silent.\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:594
+#, c-format
+msgid "Conflicting options --bookmark-only and --output.\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:600
+#, c-format
+msgid "An output file is mandatory for silent mode.\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:621
msgid "Could not create keyword URI from arguments.\n"
msgstr ""
-#: src/fs/gnunet-search.c:308
+#: src/fs/gnunet-search.c:629
+msgid ""
+"Invalid URI. Valid URIs for searching are keyword query URIs\n"
+"(\"gnunet://fs/ksk/...\") and namespace content URIs (\"gnunet://fs/sks/..."
+"\").\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:654
+#, c-format
+msgid "Could not initialize the `%s` subsystem.\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:668
msgid "Could not start searching.\n"
msgstr ""
-#: src/fs/gnunet-search.c:345
-msgid "write search results to file starting with PREFIX"
+#: src/fs/gnunet-search.c:694
+msgid "set the desired LEVEL of receiver-anonymity (default: 1)"
msgstr ""
-#: src/fs/gnunet-search.c:351
-msgid "automatically terminate search after DELAY"
+#: src/fs/gnunet-search.c:700
+msgid "do not search, print only the URI that points to this search"
+msgstr ""
+
+#: src/fs/gnunet-search.c:707
+msgid ""
+"write search results for directories according to FORMAT; accepted "
+"placeholders are: %a, %f, %j, %l, %m, %n, %s; defaults to the value of --"
+"printf when omitted or to `"
+msgstr ""
+
+#: src/fs/gnunet-search.c:717
+msgid ""
+"write search results according to FORMAT; accepted placeholders are: %a, %f, "
+"%j, %l, %m, %n, %s; defaults to `"
+msgstr ""
+
+#: src/fs/gnunet-search.c:725
+msgid ""
+"when the %a or %j placeholders appear in --printf or --dir-printf, list each "
+"metadata property according to FORMAT; accepted placeholders are: %i, %l, "
+"%n, %p"
msgstr ""
-#: src/fs/gnunet-search.c:357
+#: src/fs/gnunet-search.c:734
msgid "automatically terminate search after VALUE results are found"
msgstr ""
-#: src/fs/gnunet-search.c:371
-msgid "Search GNUnet for files that were published on GNUnet"
+#: src/fs/gnunet-search.c:746
+msgid ""
+"create a GNUnet directory with search results at FILENAME (e.g. `gnunet-"
+"search --output=commons"
+msgstr ""
+
+#: src/fs/gnunet-search.c:753
+msgid "silent mode (requires the --output argument)"
+msgstr ""
+
+#: src/fs/gnunet-search.c:759
+msgid ""
+"automatically terminate search after DELAY; the value given must be a number "
+"followed by a space and a time unit, for example \"500 ms\"; without a unit "
+"it defaults to microseconds - 1000000 = 1 second; if 0 or omitted it means "
+"to wait for CTRL-C"
+msgstr ""
+
+#: src/fs/gnunet-search.c:768
+#, c-format
+msgid ""
+"be verbose (append \"%a\\n\" to the default --printf and --dir-printf "
+"arguments - ignored when these are provided by the user)"
+msgstr ""
+
+#: src/fs/gnunet-search.c:781
+msgid "Search for files that have been published on GNUnet\n"
msgstr ""
#: src/fs/gnunet-service-fs.c:371 src/fs/gnunet-service-fs.c:878
@@ -3554,65 +3604,70 @@ msgstr ""
msgid "Expected a base32-encoded public zone key\n"
msgstr ""
-#: src/gns/gnunet-bcd.c:571
+#: src/gns/gnunet-bcd.c:573
#, fuzzy, c-format
msgid "Invalid port number %u\n"
msgstr "# messaggi PONG ricevuti"
-#: src/gns/gnunet-bcd.c:612 src/namestore/gnunet-namestore-fcfsd.c:1113
+#: src/gns/gnunet-bcd.c:614 src/namestore/gnunet-namestore-fcfsd.c:1113
#, fuzzy
msgid "Unable to set up the daemon\n"
msgstr "Generazione statistiche fallita\n"
-#: src/gns/gnunet-bcd.c:635 src/namestore/gnunet-namestore-fcfsd.c:987
+#: src/gns/gnunet-bcd.c:637 src/namestore/gnunet-namestore-fcfsd.c:987
msgid "Failed to start HTTP server\n"
msgstr "Impossibile avviare il server HTTP\n"
-#: src/gns/gnunet-bcd.c:658
+#: src/gns/gnunet-bcd.c:660
msgid "Run HTTP server on port PORT (default is 8888)"
msgstr ""
-#: src/gns/gnunet-bcd.c:667
+#: src/gns/gnunet-bcd.c:669
msgid "GNUnet HTTP server to create business cards"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:241
+#: src/gns/gnunet-dns2gns.c:298
msgid "Failed to pack DNS response into UDP packet!\n"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:315
+#: src/gns/gnunet-dns2gns.c:379
#, fuzzy
msgid "Failed to parse DNS response!\n"
msgstr "Generazione statistiche fallita\n"
-#: src/gns/gnunet-dns2gns.c:452
+#: src/gns/gnunet-dns2gns.c:453
+#, c-format
+msgid "VPN returned empty result for `%s'\n"
+msgstr ""
+
+#: src/gns/gnunet-dns2gns.c:655
#, c-format
msgid "Cannot parse DNS request from %s\n"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:468
+#: src/gns/gnunet-dns2gns.c:671
#, c-format
msgid "Received malformed DNS request from %s\n"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:476
+#: src/gns/gnunet-dns2gns.c:679
#, c-format
msgid "Received unsupported DNS request from %s\n"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:637
+#: src/gns/gnunet-dns2gns.c:840
msgid "No DNS server specified!\n"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:786
+#: src/gns/gnunet-dns2gns.c:995
msgid "IP of recursive DNS resolver to use (required)"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:792
+#: src/gns/gnunet-dns2gns.c:1001
msgid "UDP port to listen on for inbound DNS requests; default: 2853"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:809
+#: src/gns/gnunet-dns2gns.c:1018
msgid "GNUnet DNS-to-GNS proxy (a DNS server)"
msgstr ""
@@ -3790,18 +3845,18 @@ msgstr ""
msgid "GNUnet GNS resolver tool"
msgstr ""
-#: src/gns/gnunet-service-gns.c:505
+#: src/gns/gnunet-service-gns.c:501
#, fuzzy
msgid "Properly base32-encoded public key required"
msgstr "# messaggi PONG ricevuti"
-#: src/gns/gnunet-service-gns.c:541
+#: src/gns/gnunet-service-gns.c:537
msgid "Failed to connect to the namecache!\n"
msgstr ""
-#: src/gns/gnunet-service-gns.c:560
-#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442
-#: src/zonemaster/gnunet-service-zonemaster.c:885
+#: src/gns/gnunet-service-gns.c:556
+#: src/zonemaster/gnunet-service-zonemaster-monitor.c:421
+#: src/zonemaster/gnunet-service-zonemaster.c:870
msgid "Could not connect to DHT!\n"
msgstr ""
@@ -3813,94 +3868,97 @@ msgstr ""
msgid "Failed to connect to the DNS service!\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:706
+#: src/gns/gnunet-service-gns_resolver.c:659
#, c-format
msgid "Protocol `%s' unknown, skipping labels.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:718
+#: src/gns/gnunet-service-gns_resolver.c:671
#, c-format
msgid "Service `%s' unknown for protocol `%s', trying as number.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:724
+#: src/gns/gnunet-service-gns_resolver.c:677
#, c-format
msgid "Service `%s' not a port, skipping service labels.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:938
+#: src/gns/gnunet-service-gns_resolver.c:891
msgid "Failed to parse DNS response\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1129
+#: src/gns/gnunet-service-gns_resolver.c:1082
#, c-format
msgid "Skipping record of unsupported type %d\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1447
-#, c-format
-msgid "VPN returned empty result for `%s'\n"
-msgstr ""
-
-#: src/gns/gnunet-service-gns_resolver.c:1919
+#: src/gns/gnunet-service-gns_resolver.c:1859
#, c-format
msgid "Name `%s' cannot be converted to IDNA."
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1934
+#: src/gns/gnunet-service-gns_resolver.c:1874
#, c-format
msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1979
+#: src/gns/gnunet-service-gns_resolver.c:1914
#, c-format
msgid "GNS lookup failed (zero records found for `%s')\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2406
+#: src/gns/gnunet-service-gns_resolver.c:2312
+msgid "Unable to process critical delegation record\n"
+msgstr ""
+
+#: src/gns/gnunet-service-gns_resolver.c:2317
msgid "GNS lookup recursion failed (no delegation record found)\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2429
+#: src/gns/gnunet-service-gns_resolver.c:2340
#, c-format
msgid "Failed to cache GNS resolution: %s\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2594
+#: src/gns/gnunet-service-gns_resolver.c:2505
#, c-format
msgid "GNS namecache returned empty result for `%s'\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2734
+#: src/gns/gnunet-service-gns_resolver.c:2652
#, c-format
msgid "Zone %s was revoked, resolution fails\n"
msgstr ""
-#: src/gns/plugin_gnsrecord_gns.c:174
+#: src/gns/plugin_gnsrecord_gns.c:136
+msgid "This is a memento of an older block for internal maintenance."
+msgstr ""
+
+#: src/gns/plugin_gnsrecord_gns.c:175
#, fuzzy, c-format
msgid "Unable to parse zone key record `%s'\n"
msgstr "Impossibile avviare il servizio ' %s'\n"
-#: src/gns/plugin_gnsrecord_gns.c:187
+#: src/gns/plugin_gnsrecord_gns.c:188
msgid "Record type does not match parsed record type\n"
msgstr ""
-#: src/gns/plugin_gnsrecord_gns.c:213
+#: src/gns/plugin_gnsrecord_gns.c:211
#, c-format
msgid "Unable to parse GNS2DNS record `%s'\n"
msgstr ""
-#: src/gns/plugin_gnsrecord_gns.c:229
+#: src/gns/plugin_gnsrecord_gns.c:227
#, c-format
msgid "Failed to serialize GNS2DNS record with value `%s': Not a DNS name.\n"
msgstr ""
-#: src/gns/plugin_gnsrecord_gns.c:253
+#: src/gns/plugin_gnsrecord_gns.c:251
#, c-format
msgid "Unable to parse VPN record string `%s'\n"
msgstr ""
-#: src/gns/plugin_gnsrecord_gns.c:285
+#: src/gns/plugin_gnsrecord_gns.c:283
#, fuzzy, c-format
msgid "Unable to parse BOX record string `%s'\n"
msgstr "Impossibile avviare il servizio ' %s'\n"
@@ -3909,6 +3967,34 @@ msgstr "Impossibile avviare il servizio ' %s'\n"
msgid "Gns REST API initialized\n"
msgstr ""
+#: src/gnsrecord/gnsrecord_misc.c:448
+msgid "Zone delegation record not allowed in apex."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:456
+msgid "Zone delegation record set contains mutually exclusive records."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:466
+msgid "Multiple REDIRECT records."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:475 src/gnsrecord/gnsrecord_misc.c:501
+msgid "Redirection record set conains mutually exclusive records."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:482
+msgid "Redirection records not allowed in apex."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:493
+msgid "Redirection records not allowed in apex.."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:515
+msgid "Mutually exclusive records."
+msgstr ""
+
#: src/gnsrecord/plugin_gnsrecord_dns.c:367
#, c-format
msgid "Unable to parse IPv4 address `%s'\n"
@@ -4149,7 +4235,7 @@ msgid "# hostlist downloads initiated"
msgstr ""
#: src/hostlist/gnunet-daemon-hostlist_client.c:1144
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1728
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1732
msgid "# milliseconds between hostlist downloads"
msgstr ""
@@ -4207,21 +4293,21 @@ msgstr ""
msgid "# hostlist URIs written to file"
msgstr ""
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1657
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1661
#: src/transport/plugin_transport_http_client.c:2300
#, c-format
msgid "Invalid proxy type: `%s', disabling proxy! Check configuration!\n"
msgstr ""
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1686
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1690
msgid "Learning is enabled on this peer\n"
msgstr ""
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1699
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1703
msgid "Learning is not enabled on this peer\n"
msgstr ""
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1713
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1717
#, c-format
msgid ""
"Since learning is not enabled on this peer, hostlist file `%s' was removed\n"
@@ -4410,49 +4496,49 @@ msgstr ""
msgid "Maintain egos"
msgstr ""
-#: src/identity/gnunet-service-identity.c:503
+#: src/identity/gnunet-service-identity.c:502
msgid "no default known"
msgstr ""
-#: src/identity/gnunet-service-identity.c:528
+#: src/identity/gnunet-service-identity.c:527
msgid "default configured, but ego unknown (internal error)"
msgstr ""
-#: src/identity/gnunet-service-identity.c:621
-#: src/identity/gnunet-service-identity.c:896
-#: src/identity/gnunet-service-identity.c:1016
+#: src/identity/gnunet-service-identity.c:620
+#: src/identity/gnunet-service-identity.c:895
+#: src/identity/gnunet-service-identity.c:1015
#, c-format
msgid "Failed to write subsystem default identifier map to `%s'.\n"
msgstr ""
-#: src/identity/gnunet-service-identity.c:631
+#: src/identity/gnunet-service-identity.c:630
msgid "Unknown ego specified for service (internal error)"
msgstr ""
-#: src/identity/gnunet-service-identity.c:725
+#: src/identity/gnunet-service-identity.c:724
msgid "identifier already in use for another ego"
msgstr ""
-#: src/identity/gnunet-service-identity.c:872
+#: src/identity/gnunet-service-identity.c:871
msgid "target name already exists"
msgstr ""
-#: src/identity/gnunet-service-identity.c:914
-#: src/identity/gnunet-service-identity.c:1033
+#: src/identity/gnunet-service-identity.c:913
+#: src/identity/gnunet-service-identity.c:1032
msgid "no matching ego found"
msgstr ""
-#: src/identity/gnunet-service-identity.c:1131
+#: src/identity/gnunet-service-identity.c:1130
#, c-format
msgid "Failed to parse ego information in `%s'\n"
msgstr ""
-#: src/identity/gnunet-service-identity.c:1189
+#: src/identity/gnunet-service-identity.c:1188
#, c-format
msgid "Failed to parse subsystem identity configuration file `%s'\n"
msgstr ""
-#: src/identity/gnunet-service-identity.c:1198
+#: src/identity/gnunet-service-identity.c:1197
#, c-format
msgid "Failed to create directory `%s' for storing egos\n"
msgstr ""
@@ -4492,7 +4578,7 @@ msgstr ""
msgid "No records found for `%s'"
msgstr ""
-#: src/namecache/gnunet-namecache.c:119 src/namestore/gnunet-namestore.c:459
+#: src/namecache/gnunet-namecache.c:119 src/namestore/gnunet-namestore.c:469
#, c-format
msgid "\tCorrupt or unsupported record of type %u\n"
msgstr ""
@@ -4512,7 +4598,7 @@ msgstr "# messaggi PONG ricevuti"
msgid "You must specify a name\n"
msgstr "È necessario specificare un nome\n"
-#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1641
+#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1591
msgid "name of the record to add/delete/display"
msgstr ""
@@ -4520,7 +4606,7 @@ msgstr ""
msgid "specifies the public key of the zone to look in"
msgstr ""
-#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1702
+#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1652
msgid "GNUnet zone manipulation tool"
msgstr ""
@@ -4662,140 +4748,113 @@ msgstr ""
msgid "GNU Name System First-Come-First-Served name registration service"
msgstr ""
-#: src/namestore/gnunet-namestore.c:334
+#: src/namestore/gnunet-namestore.c:340
#, c-format
msgid "Adding record failed: %s\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:362
+#: src/namestore/gnunet-namestore.c:368
#, c-format
msgid "Deleting record failed, record does not exist%s%s\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:369
+#: src/namestore/gnunet-namestore.c:375
#, c-format
msgid "Deleting record failed%s%s\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:656
-#, c-format
-msgid "A %s record exists already under `%s', no other records can be added.\n"
-msgstr ""
-
#: src/namestore/gnunet-namestore.c:668
#, c-format
msgid ""
-"A zone key record exists already under `%s', no other records can be added.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:680
-#, c-format
-msgid ""
"A SOA record exists already under `%s', cannot add a second SOA to the same "
"zone.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:696
-#, c-format
-msgid "Records already exist under `%s', cannot add `%s' record.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:711
-#, c-format
-msgid "Records already exist under `%s', cannot add record.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:726
-#, c-format
-msgid ""
-"Non-GNS2DNS records already exist under `%s', cannot add GNS2DNS record.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:846
+#: src/namestore/gnunet-namestore.c:789
#, c-format
msgid "There are no records under label `%s' that could be deleted.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:889
+#: src/namestore/gnunet-namestore.c:832
#, c-format
msgid ""
"There are no records under label `%s' that match the request for deletion.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:970
+#: src/namestore/gnunet-namestore.c:920
#, fuzzy, c-format
msgid "Failed to replace records: %s\n"
msgstr "Impossibile avviare il servizio ' %s'\n"
-#: src/namestore/gnunet-namestore.c:993
+#: src/namestore/gnunet-namestore.c:943
#, c-format
msgid "No options given\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1014 src/namestore/gnunet-namestore.c:1066
-#: src/namestore/gnunet-namestore.c:1076 src/namestore/gnunet-namestore.c:1105
-#: src/namestore/gnunet-namestore.c:1126 src/namestore/gnunet-namestore.c:1153
-#: src/namestore/gnunet-namestore.c:1230
+#: src/namestore/gnunet-namestore.c:964 src/namestore/gnunet-namestore.c:1016
+#: src/namestore/gnunet-namestore.c:1026 src/namestore/gnunet-namestore.c:1055
+#: src/namestore/gnunet-namestore.c:1076 src/namestore/gnunet-namestore.c:1103
+#: src/namestore/gnunet-namestore.c:1180
#, c-format
msgid "Missing option `%s' for operation `%s'\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1016
+#: src/namestore/gnunet-namestore.c:966
msgid "replace"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1045
+#: src/namestore/gnunet-namestore.c:995
#, c-format
msgid "Invalid nick `%s'\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1068 src/namestore/gnunet-namestore.c:1078
-#: src/namestore/gnunet-namestore.c:1107 src/namestore/gnunet-namestore.c:1128
-#: src/namestore/gnunet-namestore.c:1232
+#: src/namestore/gnunet-namestore.c:1018 src/namestore/gnunet-namestore.c:1028
+#: src/namestore/gnunet-namestore.c:1057 src/namestore/gnunet-namestore.c:1078
+#: src/namestore/gnunet-namestore.c:1182
msgid "add"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1086
+#: src/namestore/gnunet-namestore.c:1036
#, c-format
msgid "Unsupported type `%s'\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1096
+#: src/namestore/gnunet-namestore.c:1046
#, c-format
msgid "For DNS record types `SRV', `TLSA' and `OPENPGPKEY'"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1116
+#: src/namestore/gnunet-namestore.c:1066
#, c-format
msgid "Value `%s' invalid for record type `%s'\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1135 src/namestore/gnunet-namestore.c:1239
+#: src/namestore/gnunet-namestore.c:1085 src/namestore/gnunet-namestore.c:1189
#, c-format
msgid "Invalid time format `%s'\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1155
+#: src/namestore/gnunet-namestore.c:1105
msgid "del"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1197
+#: src/namestore/gnunet-namestore.c:1147
#, c-format
msgid "Invalid public key for reverse lookup `%s'\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1222
+#: src/namestore/gnunet-namestore.c:1172
#: src/peerinfo-tool/gnunet-peerinfo.c:737
#, c-format
msgid "Invalid URI `%s'\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1292
+#: src/namestore/gnunet-namestore.c:1242
#, c-format
msgid "Label `%s' contains `.' which is not allowed\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1342
+#: src/namestore/gnunet-namestore.c:1292
#, c-format
msgid ""
"No default identity configured for `namestore' subsystem\n"
@@ -4803,107 +4862,111 @@ msgid ""
"Run gnunet-identity -d to get a list of choices for $NAME\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1407
+#: src/namestore/gnunet-namestore.c:1357
#, c-format
msgid "Superfluous command line arguments (starting with `%s') ignored\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1436
+#: src/namestore/gnunet-namestore.c:1386
#, c-format
msgid "Cannot connect to identity service\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1483
+#: src/namestore/gnunet-namestore.c:1433
msgid "Empty record line argument is not allowed.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1495
+#: src/namestore/gnunet-namestore.c:1445
#, c-format
msgid "Invalid expiration time `%s' (must be without unit)\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1507 src/namestore/gnunet-namestore.c:1523
-#: src/namestore/gnunet-namestore.c:1540
+#: src/namestore/gnunet-namestore.c:1457 src/namestore/gnunet-namestore.c:1473
+#: src/namestore/gnunet-namestore.c:1490
#, c-format
msgid "Missing entries in record line `%s'.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1515
+#: src/namestore/gnunet-namestore.c:1465
#, fuzzy, c-format
msgid "Unknown record type `%s'\n"
msgstr "Comando `%s' sconosciuto.\n"
-#: src/namestore/gnunet-namestore.c:1553
+#: src/namestore/gnunet-namestore.c:1503
#, fuzzy, c-format
msgid "Invalid record data for type %s: `%s'.\n"
msgstr "Indirizzo IPv6 non valido: `%s'\n"
-#: src/namestore/gnunet-namestore.c:1610
+#: src/namestore/gnunet-namestore.c:1560
msgid "add record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1613
+#: src/namestore/gnunet-namestore.c:1563
msgid "delete record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1617
+#: src/namestore/gnunet-namestore.c:1567
msgid "display records"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1624
+#: src/namestore/gnunet-namestore.c:1574
msgid ""
"expiration time for record to use (for adding only), \"never\" is possible"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1630
+#: src/namestore/gnunet-namestore.c:1580
msgid "set the desired nick name for the zone"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1635
+#: src/namestore/gnunet-namestore.c:1585
msgid "monitor changes in the namestore"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1647
+#: src/namestore/gnunet-namestore.c:1597
msgid "determine our name for the given PKEY"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1654
+#: src/namestore/gnunet-namestore.c:1604
msgid ""
"set record set to values given by (possibly multiple) RECORDLINES; can be "
"specified multiple times"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1660
+#: src/namestore/gnunet-namestore.c:1610
msgid "type of the record to add/delete/display"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1665
+#: src/namestore/gnunet-namestore.c:1615
msgid "URI to import into our zone"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1671
+#: src/namestore/gnunet-namestore.c:1621
msgid "value of the record to add/delete"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1675
+#: src/namestore/gnunet-namestore.c:1625
msgid "create or list public record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1681
+#: src/namestore/gnunet-namestore.c:1631
msgid ""
"create shadow record (only valid if all other records of the same type have "
"expired"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1687
+#: src/namestore/gnunet-namestore.c:1637
msgid "name of the ego controlling the zone"
msgstr ""
-#: src/namestore/gnunet-service-namestore.c:871
+#: src/namestore/gnunet-service-namestore.c:879
#, c-format
msgid "Failed to replicate block in namecache: %s\n"
msgstr ""
+#: src/namestore/gnunet-service-namestore.c:1668
+msgid "Store failed"
+msgstr ""
+
#: src/namestore/gnunet-zoneimport.c:1847
msgid "size to use for the main hash map"
msgstr ""
@@ -4912,10 +4975,6 @@ msgstr ""
msgid "minimum expiration time we assume for imported records"
msgstr ""
-#: src/namestore/namestore_api.c:373
-msgid "Namestore failed to store record\n"
-msgstr ""
-
#: src/namestore/plugin_namestore_flat.c:195
#, c-format
msgid "File too big to map: %llu bytes.\n"
@@ -5481,6 +5540,51 @@ msgstr ""
msgid "Daemon to run to perform IP protocol translation to GNUnet"
msgstr ""
+#: src/reclaim/gnunet-did.c:209
+#, c-format
+msgid "Invalid DID `%s'\n"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:835
+msgid "Create a DID Document and display its DID"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:840
+msgid "Get the DID Document associated with the given DID"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:844
+msgid "Show the DID for a given ego"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:849
+msgid "Remove the DID"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:853 src/reclaim/gnunet-did.c:857
+msgid "Replace the DID Document."
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:863
+msgid "The Decentralized Identity (DID)"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:869
+msgid "The DID Document to store in GNUNET"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:874
+msgid "The name of the EGO"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:880
+msgid "The time until the DID Document is going to expire (e.g. 5d)"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:889
+msgid "Manage Decentralized Identities (DIDs)"
+msgstr ""
+
#: src/reclaim/gnunet-reclaim.c:802
#, c-format
msgid "Ego is required\n"
@@ -6348,17 +6452,17 @@ msgid ""
"free topology cannot be more than %u. Given `%s = %llu'"
msgstr ""
-#: src/testbed/testbed_api_topology.c:1033 src/testing/testing.c:2643
+#: src/testbed/testbed_api_topology.c:1033 src/testing/testing.c:2657
#, c-format
msgid "Topology file %s not found\n"
msgstr ""
-#: src/testbed/testbed_api_topology.c:1041 src/testing/testing.c:2651
+#: src/testbed/testbed_api_topology.c:1041 src/testing/testing.c:2665
#, c-format
msgid "Topology file %s has no data\n"
msgstr ""
-#: src/testbed/testbed_api_topology.c:1049 src/testing/testing.c:2659
+#: src/testbed/testbed_api_topology.c:1049 src/testing/testing.c:2673
#, c-format
msgid "Topology file %s cannot be read\n"
msgstr ""
@@ -6556,7 +6660,7 @@ msgstr ""
#: src/transport/gnunet-communicator-tcp.c:3338
#: src/transport/gnunet-communicator-udp.c:3856
-#: src/transport/gnunet-service-tng.c:10512
+#: src/transport/gnunet-service-tng.c:10623
#: src/transport/gnunet-service-transport.c:2627
msgid "Transport service is lacking key configuration settings. Exiting.\n"
msgstr ""
@@ -7736,58 +7840,58 @@ msgstr ""
msgid "Need a non-empty hostname for service `%s'.\n"
msgstr ""
-#: src/util/common_logging.c:626 src/util/common_logging.c:665
+#: src/util/common_logging.c:648 src/util/common_logging.c:687
#, c-format
msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n"
msgstr ""
-#: src/util/common_logging.c:904
+#: src/util/common_logging.c:926
#, c-format
msgid "Message `%.*s' repeated %u times in the last %s\n"
msgstr ""
-#: src/util/common_logging.c:1108
+#: src/util/common_logging.c:1131
msgid "ERROR"
msgstr "ERRORE"
-#: src/util/common_logging.c:1110
+#: src/util/common_logging.c:1133
msgid "WARNING"
msgstr "ATTENZIONE"
-#: src/util/common_logging.c:1112
+#: src/util/common_logging.c:1135
msgid "MESSAGE"
msgstr ""
-#: src/util/common_logging.c:1114
+#: src/util/common_logging.c:1137
msgid "INFO"
msgstr "INFO"
-#: src/util/common_logging.c:1116
+#: src/util/common_logging.c:1139
msgid "DEBUG"
msgstr "DEBUG"
-#: src/util/common_logging.c:1118
+#: src/util/common_logging.c:1141
msgid "NONE"
msgstr "NESSUNA"
-#: src/util/common_logging.c:1119
+#: src/util/common_logging.c:1142
msgid "INVALID"
msgstr "NON VALIDO"
-#: src/util/common_logging.c:1400
+#: src/util/common_logging.c:1423
msgid "unknown address"
msgstr "indirizzo sconosciuto"
-#: src/util/common_logging.c:1445
+#: src/util/common_logging.c:1468
msgid "invalid address"
msgstr "indirizzo non valido"
-#: src/util/common_logging.c:1464
+#: src/util/common_logging.c:1487
#, c-format
msgid "Configuration fails to specify option `%s' in section `%s'!\n"
msgstr ""
-#: src/util/common_logging.c:1487
+#: src/util/common_logging.c:1510
#, c-format
msgid ""
"Configuration specifies invalid value for option `%s' in section `%s': %s\n"
@@ -7932,17 +8036,17 @@ msgstr ""
msgid "Could not bind to any port: %s\n"
msgstr ""
-#: src/util/dnsstub.c:344
+#: src/util/dnsstub.c:370
#, c-format
-msgid "Received DNS response that is too small (%u bytes)"
+msgid "Received DNS response that is too small (%u bytes)\n"
msgstr ""
-#: src/util/dnsstub.c:482
+#: src/util/dnsstub.c:508
#, fuzzy, c-format
msgid "Failed to send DNS request to %s: %s\n"
msgstr "Generazione statistiche fallita\n"
-#: src/util/dnsstub.c:487
+#: src/util/dnsstub.c:513
#, c-format
msgid "Sent DNS request to %s\n"
msgstr ""
@@ -8027,82 +8131,82 @@ msgid ""
"Arguments mandatory for long options are also mandatory for short options.\n"
msgstr ""
-#: src/util/getopt_helpers.c:196
+#: src/util/getopt_helpers.c:197
msgid "print this help"
msgstr ""
-#: src/util/getopt_helpers.c:261
+#: src/util/getopt_helpers.c:262
msgid "be verbose"
msgstr ""
-#: src/util/getopt_helpers.c:377
+#: src/util/getopt_helpers.c:378
msgid "configure logging to use LOGLEVEL"
msgstr ""
-#: src/util/getopt_helpers.c:444
+#: src/util/getopt_helpers.c:445
msgid "configure logging to write logs to FILENAME"
msgstr ""
-#: src/util/getopt_helpers.c:461
+#: src/util/getopt_helpers.c:462
msgid "use configuration file FILENAME"
msgstr ""
-#: src/util/getopt_helpers.c:497 src/util/getopt_helpers.c:811
-#: src/util/getopt_helpers.c:867
+#: src/util/getopt_helpers.c:498 src/util/getopt_helpers.c:812
+#: src/util/getopt_helpers.c:868
#, c-format
msgid "You must pass a number to the `%s' option.\n"
msgstr ""
-#: src/util/getopt_helpers.c:569
+#: src/util/getopt_helpers.c:570
#, c-format
msgid ""
"You must pass a relative time (optionally with sign) to the `%s' option.\n"
msgstr ""
-#: src/util/getopt_helpers.c:576
+#: src/util/getopt_helpers.c:577
#, c-format
msgid "Value given for time travel `%s' option is too big.\n"
msgstr ""
-#: src/util/getopt_helpers.c:594
+#: src/util/getopt_helpers.c:595
msgid "[+/-]MICROSECONDS"
msgstr ""
-#: src/util/getopt_helpers.c:596
+#: src/util/getopt_helpers.c:597
msgid "modify system time by given offset (for debugging/testing only)"
msgstr ""
-#: src/util/getopt_helpers.c:630
+#: src/util/getopt_helpers.c:631
#, c-format
msgid "You must pass relative time to the `%s' option.\n"
msgstr ""
-#: src/util/getopt_helpers.c:684
+#: src/util/getopt_helpers.c:685
#, c-format
msgid "You must pass absolute time to the `%s' option.\n"
msgstr ""
-#: src/util/getopt_helpers.c:741
+#: src/util/getopt_helpers.c:742
#, c-format
msgid "You must pass a timestamp to the `%s' option.\n"
msgstr ""
-#: src/util/getopt_helpers.c:748
+#: src/util/getopt_helpers.c:749
#, c-format
msgid "The maximum precision allowed for timestamps is seconds.\n"
msgstr ""
-#: src/util/getopt_helpers.c:804
+#: src/util/getopt_helpers.c:805
#, c-format
msgid "Your input for the '%s' option has to be a non negative number\n"
msgstr ""
-#: src/util/getopt_helpers.c:874
+#: src/util/getopt_helpers.c:875
#, c-format
msgid "You must pass a number below %u to the `%s' option.\n"
msgstr ""
-#: src/util/getopt_helpers.c:952
+#: src/util/getopt_helpers.c:953
#, c-format
msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n"
msgstr ""
@@ -8135,7 +8239,7 @@ msgstr ""
msgid "Manipulate GNUnet configuration files"
msgstr ""
-#: src/util/gnunet-crypto-tvg.c:1072
+#: src/util/gnunet-crypto-tvg.c:1483
msgid "verify a test vector from stdin"
msgstr ""
@@ -8389,7 +8493,7 @@ msgstr ""
msgid "Unable to shorten unix path `%s' while keeping name unique\n"
msgstr ""
-#: src/util/network.c:1306
+#: src/util/network.c:1307
#, c-format
msgid ""
"Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n"
@@ -8516,77 +8620,77 @@ msgstr ""
msgid "Character sets requested were `%s'->`%s'\n"
msgstr ""
-#: src/util/strings.c:487
+#: src/util/strings.c:514
msgid "Failed to expand `$HOME': environment variable `HOME' not set"
msgstr ""
-#: src/util/strings.c:1023
+#: src/util/strings.c:1050
msgid "IPv6 address did not start with `['\n"
msgstr ""
-#: src/util/strings.c:1031
+#: src/util/strings.c:1058
msgid "IPv6 address did contain ':' to separate port number\n"
msgstr ""
-#: src/util/strings.c:1038
+#: src/util/strings.c:1065
msgid "IPv6 address did contain ']' before ':' to separate port number\n"
msgstr ""
-#: src/util/strings.c:1046
+#: src/util/strings.c:1073
msgid "IPv6 address did contain a valid port number after the last ':'\n"
msgstr ""
-#: src/util/strings.c:1055
+#: src/util/strings.c:1082
#, c-format
msgid "Invalid IPv6 address `%s': %s\n"
msgstr ""
-#: src/util/strings.c:1237 src/util/strings.c:1248
+#: src/util/strings.c:1264 src/util/strings.c:1275
msgid "Port not in range\n"
msgstr ""
-#: src/util/strings.c:1257
+#: src/util/strings.c:1284
#, c-format
msgid "Malformed port policy `%s'\n"
msgstr ""
-#: src/util/strings.c:1328 src/util/strings.c:1357 src/util/strings.c:1404
-#: src/util/strings.c:1424
+#: src/util/strings.c:1355 src/util/strings.c:1384 src/util/strings.c:1431
+#: src/util/strings.c:1451
#, c-format
msgid "Invalid format for IP: `%s'\n"
msgstr ""
-#: src/util/strings.c:1382
+#: src/util/strings.c:1409
#, c-format
msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)."
msgstr ""
-#: src/util/strings.c:1433
+#: src/util/strings.c:1460
#, c-format
msgid "Invalid format: `%s'\n"
msgstr ""
-#: src/util/strings.c:1475
+#: src/util/strings.c:1502
#, c-format
msgid "Invalid network notation (does not end with ';': `%s')\n"
msgstr ""
-#: src/util/strings.c:1525
+#: src/util/strings.c:1552
#, c-format
msgid "Wrong format `%s' for netmask\n"
msgstr ""
-#: src/util/strings.c:1556
+#: src/util/strings.c:1583
#, c-format
msgid "Wrong format `%s' for network\n"
msgstr ""
-#: src/util/time.c:863 src/util/time.c:891
+#: src/util/time.c:870 src/util/time.c:898
#, c-format
msgid "Failed to map `%s', cannot assure monotonic time!\n"
msgstr ""
-#: src/util/time.c:899
+#: src/util/time.c:906
#, c-format
msgid ""
"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
@@ -8760,11 +8864,18 @@ msgstr ""
msgid "Setup tunnels via VPN."
msgstr ""
-#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418
-#: src/zonemaster/gnunet-service-zonemaster.c:847
+#: src/zonemaster/gnunet-service-zonemaster-monitor.c:397
+#: src/zonemaster/gnunet-service-zonemaster.c:832
msgid "Failed to connect to the namestore!\n"
msgstr ""
+#~ msgid "# items stored"
+#~ msgstr "# elementi memorizzati"
+
+#, fuzzy
+#~ msgid "# proximity search requests received"
+#~ msgstr "# richieste GET ricevute"
+
#, fuzzy
#~ msgid "# requests for random value received"
#~ msgstr "# richieste GET ricevute"
diff --git a/po/sr.po b/po/sr.po
index 4109ed3ed..47494eeff 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gnunet-0.10.1\n"
"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2022-01-10 15:13+0100\n"
+"POT-Creation-Date: 2022-03-04 22:23+0100\n"
"PO-Revision-Date: 2020-10-23 18:39+0200\n"
"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian <(nothing)>\n"
@@ -18,7 +18,7 @@ msgstr ""
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
-#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1304
+#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1254
#, c-format
msgid "Ego `%s' not known to identity service\n"
msgstr "Его „%s“ није познат услузи идентитета\n"
@@ -30,7 +30,7 @@ msgstr "Јавни кључ „%s“ није добро оформљен\n"
#: src/abd/gnunet-abd.c:558 src/abd/gnunet-service-abd.c:1751
#: src/namestore/gnunet-namestore-fcfsd.c:1080
-#: src/namestore/gnunet-namestore.c:1001
+#: src/namestore/gnunet-namestore.c:951
#, c-format
msgid "Failed to connect to namestore\n"
msgstr "Нисам успео да се повежем са смештајем назива\n"
@@ -628,7 +628,7 @@ msgstr "опширан излаз (укључује својства АТС ад
msgid "Print information about ATS state"
msgstr "Исписује податке о АТС стању"
-#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044
+#: src/ats/gnunet-ats-solver-eval.c:2993 src/ats/gnunet-ats-solver-eval.c:3045
#, c-format
msgid ""
"Could not load quota for network `%s': `%s', assigning default bandwidth "
@@ -637,7 +637,7 @@ msgstr ""
"Не могу да учитам квоту за мрежу „%s“: „%s“, додељујем основни пропусни "
"опсег %llu\n"
-#: src/ats/gnunet-ats-solver-eval.c:3011
+#: src/ats/gnunet-ats-solver-eval.c:3012
#, c-format
msgid ""
"No outbound quota configured for network `%s', assigning default bandwidth "
@@ -646,7 +646,7 @@ msgstr ""
"Нема подешене одлазне квоте за мрежу „%s“, додељујем основни пропусни опсег "
"%llu\n"
-#: src/ats/gnunet-ats-solver-eval.c:3063
+#: src/ats/gnunet-ats-solver-eval.c:3064
#, c-format
msgid ""
"No outbound quota configure for network `%s', assigning default bandwidth "
@@ -655,23 +655,23 @@ msgstr ""
"Није подешена одлазна квота за мрежу „%s“, додељујем основни пропусни опсег "
"%llu\n"
-#: src/ats/gnunet-ats-solver-eval.c:3552
+#: src/ats/gnunet-ats-solver-eval.c:3553
msgid "solver to use"
msgstr "решавач за коришћење"
-#: src/ats/gnunet-ats-solver-eval.c:3557
+#: src/ats/gnunet-ats-solver-eval.c:3558
msgid "experiment to use"
msgstr "експеримент за коришћење"
-#: src/ats/gnunet-ats-solver-eval.c:3564
+#: src/ats/gnunet-ats-solver-eval.c:3565
msgid "print logging"
msgstr "исписује дневничење"
-#: src/ats/gnunet-ats-solver-eval.c:3569
+#: src/ats/gnunet-ats-solver-eval.c:3570
msgid "save logging to disk"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3574
+#: src/ats/gnunet-ats-solver-eval.c:3575
msgid "disable normalization"
msgstr ""
@@ -1560,39 +1560,7 @@ msgstr "# мапе врсте су примљене"
msgid "# updates to my type map"
msgstr "# ажурирања за моју мапу врсте"
-#: src/datacache/datacache.c:117 src/datacache/datacache.c:275
-#: src/datastore/gnunet-service-datastore.c:743
-msgid "# bytes stored"
-msgstr "# бајтови су смештени"
-
-#: src/datacache/datacache.c:121 src/datacache/datacache.c:279
-msgid "# items stored"
-msgstr "# ставке су смештене"
-
-#: src/datacache/datacache.c:185
-#, c-format
-msgid "Loading `%s' datacache plugin\n"
-msgstr "Учитавам прикључак „%s“ оставе података\n"
-
-#: src/datacache/datacache.c:203
-#, c-format
-msgid "Failed to load datacache plugin for `%s'\n"
-msgstr "Нисам успео да учитам прикључак оставе података за „%s“\n"
-
-#: src/datacache/datacache.c:297
-msgid "# requests received"
-msgstr "# захтеви су примљени"
-
-#: src/datacache/datacache.c:308
-msgid "# requests filtered by bloom filter"
-msgstr "# захтеви су филтрирани блум филтером"
-
-#: src/datacache/datacache.c:329
-#, fuzzy
-msgid "# proximity search requests received"
-msgstr "# претраге клијента су примљене"
-
-#: src/datacache/plugin_datacache_heap.c:527
+#: src/datacache/plugin_datacache_heap.c:555
msgid "Heap datacache running\n"
msgstr "Остава података скупине ради\n"
@@ -1614,7 +1582,7 @@ msgstr "Остава података скупине ради\n"
msgid "`%s' failed at %s:%d with error: %s\n"
msgstr "„%s“ није успело на %s:%d са грешком: %s\n"
-#: src/datacache/plugin_datacache_sqlite.c:693
+#: src/datacache/plugin_datacache_sqlite.c:723
#: src/datastore/plugin_datastore_sqlite.c:531
#: src/namecache/plugin_namecache_sqlite.c:237
#: src/namestore/plugin_namestore_sqlite.c:273
@@ -1804,6 +1772,10 @@ msgstr "# је резервисано"
msgid "Could not find matching reservation"
msgstr "Не могу да нађем одговарајућу резервацију"
+#: src/datastore/gnunet-service-datastore.c:743
+msgid "# bytes stored"
+msgstr "# бајтови су смештени"
+
#: src/datastore/gnunet-service-datastore.c:758
#, c-format
msgid "Need %llu bytes more space (%llu allowed, using %llu)\n"
@@ -1990,7 +1962,7 @@ msgstr ""
#: src/datastore/plugin_datastore_sqlite.c:1337
#: src/namecache/plugin_namecache_sqlite.c:564
-#: src/namestore/plugin_namestore_sqlite.c:765
+#: src/namestore/plugin_namestore_sqlite.c:775
msgid "Sqlite database running\n"
msgstr "База података Скулајта ради\n"
@@ -1998,7 +1970,7 @@ msgstr "База података Скулајта ради\n"
msgid "Template database running\n"
msgstr "База података шаблона ради\n"
-#: src/dht/gnunet-dht-get.c:159
+#: src/dht/gnunet-dht-get.c:164
#, c-format
msgid ""
"Result %d, type %d:\n"
@@ -2007,51 +1979,62 @@ msgstr ""
"Резултат %d, врста %d:\n"
"%.*s\n"
-#: src/dht/gnunet-dht-get.c:160
+#: src/dht/gnunet-dht-get.c:165
#, fuzzy, c-format
msgid "Result %d, type %d:\n"
msgstr ""
"Резултат %d, врста %d:\n"
"%.*s\n"
-#: src/dht/gnunet-dht-get.c:209
+#: src/dht/gnunet-dht-get.c:215
msgid "Must provide key for DHT GET!\n"
msgstr "Морате доставити кључ за ДХТ ДОБАВИ!\n"
-#: src/dht/gnunet-dht-get.c:217 src/dht/gnunet-dht-monitor.c:255
+#: src/dht/gnunet-dht-get.c:223 src/dht/gnunet-dht-hello.c:119
+#: src/dht/gnunet-dht-monitor.c:255
+#, c-format
msgid "Failed to connect to DHT service!\n"
msgstr "Нисам успео да се повежем са „DHT“ услугом!\n"
-#: src/dht/gnunet-dht-get.c:227
+#: src/dht/gnunet-dht-get.c:233
#, fuzzy
msgid "Issuing DHT GET with key"
msgstr "Издајем ДХТ ДОБАВИ са кључем"
-#: src/dht/gnunet-dht-get.c:260 src/dht/gnunet-dht-monitor.c:302
+#: src/dht/gnunet-dht-get.c:269 src/dht/gnunet-dht-monitor.c:302
#: src/dht/gnunet-dht-put.c:200
msgid "the query key"
msgstr "кључ упита"
-#: src/dht/gnunet-dht-get.c:266
+#: src/dht/gnunet-dht-get.c:275
msgid "how many parallel requests (replicas) to create"
msgstr "колико паралелних захтева (реплика) да направи"
-#: src/dht/gnunet-dht-get.c:272 src/dht/gnunet-dht-monitor.c:308
+#: src/dht/gnunet-dht-get.c:280 src/dht/gnunet-dht-put.c:217
+#, fuzzy
+msgid "use DHT's record route option"
+msgstr "користи опцију ДХТ-а демултиплексирај свуда"
+
+#: src/dht/gnunet-dht-get.c:286 src/dht/gnunet-dht-monitor.c:308
msgid "the type of data to look for"
msgstr "врста података за тражење"
-#: src/dht/gnunet-dht-get.c:278
+#: src/dht/gnunet-dht-get.c:292
msgid "how long to execute this query before giving up?"
msgstr "колико дуго да извршава овај упит пре одустајања?"
-#: src/dht/gnunet-dht-get.c:284 src/dht/gnunet-dht-put.c:206
+#: src/dht/gnunet-dht-get.c:298 src/dht/gnunet-dht-put.c:206
msgid "use DHT's demultiplex everywhere option"
msgstr "користи опцију ДХТ-а демултиплексирај свуда"
-#: src/dht/gnunet-dht-get.c:301
+#: src/dht/gnunet-dht-get.c:315
msgid "Issue a GET request to the GNUnet DHT, prints results."
msgstr "Издаје ДОБАВИ захтев ГНУнет ДХТ-у, исписује резултате."
+#: src/dht/gnunet-dht-hello.c:166
+msgid "Obtain HELLO from DHT or provide HELLO to DHT for bootstrapping"
+msgstr ""
+
#: src/dht/gnunet-dht-monitor.c:315
msgid "how long should the monitor command run"
msgstr "колико дуго треба да ради наредба праћења"
@@ -2091,11 +2074,6 @@ msgstr "колико ће дуго да држи овај унос у дхт-у
msgid "how many replicas to create"
msgstr "број реплика за стварање"
-#: src/dht/gnunet-dht-put.c:217
-#, fuzzy
-msgid "use DHT's record route option"
-msgstr "користи опцију ДХТ-а демултиплексирај свуда"
-
#: src/dht/gnunet-dht-put.c:223
msgid "the type to insert data as"
msgstr "врста за уметање података"
@@ -2153,17 +2131,17 @@ msgstr ""
msgid "Measure quality and performance of the DHT service."
msgstr "Мери квалитет и учинковитост НСЕ услуге."
-#: src/dht/plugin_block_dht.c:328
+#: src/dht/plugin_block_dht.c:404
#, c-format
msgid "Block not of type %u\n"
msgstr "Блок није врсте %u\n"
-#: src/dht/plugin_block_dht.c:337
+#: src/dht/plugin_block_dht.c:413
#, fuzzy, c-format
msgid "Size mismatch for block with type %u\n"
msgstr "Величин не одговара за блок\n"
-#: src/dht/plugin_block_dht.c:348
+#: src/dht/plugin_block_dht.c:424
#, c-format
msgid "Block of type %u is malformed\n"
msgstr "Блок врсте %u је лош\n"
@@ -2902,20 +2880,20 @@ msgstr "SKS УРИ је лоше (не могу да обрадим време
msgid "LOC URI malformed (signature failed validation)"
msgstr "SKS УРИ је лоше (потврђивање потписа није успело)"
-#: src/fs/fs_uri.c:653
+#: src/fs/fs_uri.c:652
#, fuzzy
msgid "invalid argument"
msgstr "Неисправан аргумент „%s“\n"
-#: src/fs/fs_uri.c:665
+#: src/fs/fs_uri.c:671
msgid "Unrecognized URI type"
msgstr "Непозната УРИ врста"
-#: src/fs/fs_uri.c:1071 src/fs/fs_uri.c:1098
+#: src/fs/fs_uri.c:1075 src/fs/fs_uri.c:1102
msgid "No keywords specified!\n"
msgstr "Нису наведене речи кључа!\n"
-#: src/fs/fs_uri.c:1104
+#: src/fs/fs_uri.c:1108
msgid "Number of double-quotes not balanced!\n"
msgstr "Број двоструких квота које нису уравнотежене!\n"
@@ -3043,7 +3021,7 @@ msgid "Downloading `%s' done (%s/s).\n"
msgstr "Преузимање „%s“ је готово (%s/сек).\n"
#: src/fs/gnunet-download.c:206 src/fs/gnunet-publish.c:299
-#: src/fs/gnunet-search.c:229 src/fs/gnunet-unindex.c:117
+#: src/fs/gnunet-search.c:538 src/fs/gnunet-unindex.c:117
#, c-format
msgid "Unexpected status: %d\n"
msgstr "Неочекивано стање: %d\n"
@@ -3066,12 +3044,12 @@ msgid "Target filename must be specified.\n"
msgstr "Назив циљне датотеке мора бити наведен.\n"
#: src/fs/gnunet-download.c:271 src/fs/gnunet-publish.c:869
-#: src/fs/gnunet-search.c:294 src/fs/gnunet-unindex.c:154
+#: src/fs/gnunet-unindex.c:154
#, c-format
msgid "Could not initialize `%s' subsystem.\n"
msgstr "Не могу да покренем „%s“ субсистем.\n"
-#: src/fs/gnunet-download.c:318 src/fs/gnunet-search.c:334
+#: src/fs/gnunet-download.c:318
msgid "set the desired LEVEL of receiver-anonymity"
msgstr "поставља жељени НИВО анонимности примаоца"
@@ -3079,7 +3057,7 @@ msgstr "поставља жељени НИВО анонимности прима
msgid "delete incomplete downloads (when aborted with CTRL-C)"
msgstr "брише недовршена преузимања (када се прекине са КТРЛ-Ц)"
-#: src/fs/gnunet-download.c:330 src/fs/gnunet-search.c:339
+#: src/fs/gnunet-download.c:330 src/fs/gnunet-search.c:740
msgid "only search the local peer (no P2P network search)"
msgstr "тражи само локалног парњака (без претраге П2П мреже)"
@@ -3338,38 +3316,112 @@ msgstr ""
msgid "Publish a file or directory on GNUnet"
msgstr "Објављује датотеку или директоријум на ГНУнет-у"
-#: src/fs/gnunet-search.c:130
+#: src/fs/gnunet-search.c:441
#, c-format
msgid "Failed to write directory with search results to `%s'\n"
msgstr "Нисам успео да пишем директоријум са резултатима претраге за „%s“\n"
-#: src/fs/gnunet-search.c:219
+#: src/fs/gnunet-search.c:527
#, c-format
msgid "Error searching: %s.\n"
msgstr "Грешка претраге: %s.\n"
-#: src/fs/gnunet-search.c:281
+#: src/fs/gnunet-search.c:587
+#, c-format
+msgid "Conflicting options --bookmark-only and --silent.\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:594
+#, c-format
+msgid "Conflicting options --bookmark-only and --output.\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:600
+#, c-format
+msgid "An output file is mandatory for silent mode.\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:621
msgid "Could not create keyword URI from arguments.\n"
msgstr "Не могу да створим УРИ кључне речи из аргумената.\n"
-#: src/fs/gnunet-search.c:308
+#: src/fs/gnunet-search.c:629
+msgid ""
+"Invalid URI. Valid URIs for searching are keyword query URIs\n"
+"(\"gnunet://fs/ksk/...\") and namespace content URIs (\"gnunet://fs/sks/..."
+"\").\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:654
+#, fuzzy, c-format
+msgid "Could not initialize the `%s` subsystem.\n"
+msgstr "Не могу да покренем „%s“ субсистем.\n"
+
+#: src/fs/gnunet-search.c:668
msgid "Could not start searching.\n"
msgstr "Не могу да покренем претрагу.\n"
-#: src/fs/gnunet-search.c:345
-msgid "write search results to file starting with PREFIX"
-msgstr "пише резултате претраге у датотеку која почиње са ПРЕФИКСОМ"
+#: src/fs/gnunet-search.c:694
+#, fuzzy
+msgid "set the desired LEVEL of receiver-anonymity (default: 1)"
+msgstr "поставља жељени НИВО анонимности примаоца"
+
+#: src/fs/gnunet-search.c:700
+msgid "do not search, print only the URI that points to this search"
+msgstr ""
+
+#: src/fs/gnunet-search.c:707
+msgid ""
+"write search results for directories according to FORMAT; accepted "
+"placeholders are: %a, %f, %j, %l, %m, %n, %s; defaults to the value of --"
+"printf when omitted or to `"
+msgstr ""
+
+#: src/fs/gnunet-search.c:717
+msgid ""
+"write search results according to FORMAT; accepted placeholders are: %a, %f, "
+"%j, %l, %m, %n, %s; defaults to `"
+msgstr ""
-#: src/fs/gnunet-search.c:351
-msgid "automatically terminate search after DELAY"
-msgstr "самостално окончава претрагу након ЗАСТОЈА"
+#: src/fs/gnunet-search.c:725
+msgid ""
+"when the %a or %j placeholders appear in --printf or --dir-printf, list each "
+"metadata property according to FORMAT; accepted placeholders are: %i, %l, "
+"%n, %p"
+msgstr ""
-#: src/fs/gnunet-search.c:357
+#: src/fs/gnunet-search.c:734
msgid "automatically terminate search after VALUE results are found"
msgstr "самостално окончава претрагу након што су пронађени резултати ВРЕДНОСТ"
-#: src/fs/gnunet-search.c:371
-msgid "Search GNUnet for files that were published on GNUnet"
+#: src/fs/gnunet-search.c:746
+msgid ""
+"create a GNUnet directory with search results at FILENAME (e.g. `gnunet-"
+"search --output=commons"
+msgstr ""
+
+#: src/fs/gnunet-search.c:753
+msgid "silent mode (requires the --output argument)"
+msgstr ""
+
+#: src/fs/gnunet-search.c:759
+msgid ""
+"automatically terminate search after DELAY; the value given must be a number "
+"followed by a space and a time unit, for example \"500 ms\"; without a unit "
+"it defaults to microseconds - 1000000 = 1 second; if 0 or omitted it means "
+"to wait for CTRL-C"
+msgstr ""
+
+#: src/fs/gnunet-search.c:768
+#, c-format
+msgid ""
+"be verbose (append \"%a\\n\" to the default --printf and --dir-printf "
+"arguments - ignored when these are provided by the user)"
+msgstr ""
+
+#: src/fs/gnunet-search.c:781
+#, fuzzy
+msgid "Search for files that have been published on GNUnet\n"
msgstr "Претражује ГНУнет за датотекама које су објављене на ГНУнет-у"
#: src/fs/gnunet-service-fs.c:371 src/fs/gnunet-service-fs.c:878
@@ -3712,68 +3764,73 @@ msgstr ""
msgid "Expected a base32-encoded public zone key\n"
msgstr ""
-#: src/gns/gnunet-bcd.c:571
+#: src/gns/gnunet-bcd.c:573
#, fuzzy, c-format
msgid "Invalid port number %u\n"
msgstr "Неисправан број прикључника %llu. Излазим.\n"
-#: src/gns/gnunet-bcd.c:612 src/namestore/gnunet-namestore-fcfsd.c:1113
+#: src/gns/gnunet-bcd.c:614 src/namestore/gnunet-namestore-fcfsd.c:1113
#, fuzzy
msgid "Unable to set up the daemon\n"
msgstr "Не могу да увезем приватни кључ из датотеке „%s“\n"
-#: src/gns/gnunet-bcd.c:635 src/namestore/gnunet-namestore-fcfsd.c:987
+#: src/gns/gnunet-bcd.c:637 src/namestore/gnunet-namestore-fcfsd.c:987
msgid "Failed to start HTTP server\n"
msgstr "Нисам успео да покренем ХТТП сервер\n"
-#: src/gns/gnunet-bcd.c:658
+#: src/gns/gnunet-bcd.c:660
#, fuzzy
msgid "Run HTTP server on port PORT (default is 8888)"
msgstr "Покрећем ХТТП сервер на прикључнику ПРИКЉУЧНИК (основно је 8888)"
-#: src/gns/gnunet-bcd.c:667
+#: src/gns/gnunet-bcd.c:669
msgid "GNUnet HTTP server to create business cards"
msgstr "ГНУнет ХТТП сервер за стварање бизнис картица"
-#: src/gns/gnunet-dns2gns.c:241
+#: src/gns/gnunet-dns2gns.c:298
msgid "Failed to pack DNS response into UDP packet!\n"
msgstr "Нисам успео да упакујем ДНС одговор у УДП пакет!\n"
-#: src/gns/gnunet-dns2gns.c:315
+#: src/gns/gnunet-dns2gns.c:379
#, fuzzy
msgid "Failed to parse DNS response!\n"
msgstr "Нисам успео да обрадим ДНС одговор\n"
-#: src/gns/gnunet-dns2gns.c:452
+#: src/gns/gnunet-dns2gns.c:453
+#, fuzzy, c-format
+msgid "VPN returned empty result for `%s'\n"
+msgstr "АТС је вратио резултате за %u адресе\n"
+
+#: src/gns/gnunet-dns2gns.c:655
#, c-format
msgid "Cannot parse DNS request from %s\n"
msgstr "Не могу да обрадим ДНС захтев од „%s“\n"
-#: src/gns/gnunet-dns2gns.c:468
+#: src/gns/gnunet-dns2gns.c:671
#, c-format
msgid "Received malformed DNS request from %s\n"
msgstr "Примих лош ДНС захтев од „%s“\n"
-#: src/gns/gnunet-dns2gns.c:476
+#: src/gns/gnunet-dns2gns.c:679
#, c-format
msgid "Received unsupported DNS request from %s\n"
msgstr "Примих неподржан ДНС захтев од „%s“\n"
-#: src/gns/gnunet-dns2gns.c:637
+#: src/gns/gnunet-dns2gns.c:840
msgid "No DNS server specified!\n"
msgstr "Није наведен ДНС сервер!\n"
-#: src/gns/gnunet-dns2gns.c:786
+#: src/gns/gnunet-dns2gns.c:995
msgid "IP of recursive DNS resolver to use (required)"
msgstr "ИП дубинског ДНС решавача за коришћење (потребно)"
-#: src/gns/gnunet-dns2gns.c:792
+#: src/gns/gnunet-dns2gns.c:1001
#, fuzzy
msgid "UDP port to listen on for inbound DNS requests; default: 2853"
msgstr ""
"УДП прикључник на коме ће ослушкивати за долазним ДНС захтевима; основно: 53"
-#: src/gns/gnunet-dns2gns.c:809
+#: src/gns/gnunet-dns2gns.c:1018
msgid "GNUnet DNS-to-GNS proxy (a DNS server)"
msgstr "Посредник ДНС-до-ГНС ГНУнет-а (ДНС сервер)"
@@ -3953,18 +4010,18 @@ msgstr ""
msgid "GNUnet GNS resolver tool"
msgstr "Алат ГНУнет ГНС решавача"
-#: src/gns/gnunet-service-gns.c:505
+#: src/gns/gnunet-service-gns.c:501
#, fuzzy
msgid "Properly base32-encoded public key required"
msgstr "исправан јавни кључ се захтева"
-#: src/gns/gnunet-service-gns.c:541
+#: src/gns/gnunet-service-gns.c:537
msgid "Failed to connect to the namecache!\n"
msgstr "Нисам успео да се повежем са оставом назива!\n"
-#: src/gns/gnunet-service-gns.c:560
-#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442
-#: src/zonemaster/gnunet-service-zonemaster.c:885
+#: src/gns/gnunet-service-gns.c:556
+#: src/zonemaster/gnunet-service-zonemaster-monitor.c:421
+#: src/zonemaster/gnunet-service-zonemaster.c:870
msgid "Could not connect to DHT!\n"
msgstr "Не могу да се повежем на ДХТ!\n"
@@ -3976,94 +4033,97 @@ msgstr "Грешка претварања ГНС одговора у ДНС од
msgid "Failed to connect to the DNS service!\n"
msgstr "Нисам успео да се повежем са ДНС услугом!\n"
-#: src/gns/gnunet-service-gns_resolver.c:706
+#: src/gns/gnunet-service-gns_resolver.c:659
#, c-format
msgid "Protocol `%s' unknown, skipping labels.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:718
+#: src/gns/gnunet-service-gns_resolver.c:671
#, c-format
msgid "Service `%s' unknown for protocol `%s', trying as number.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:724
+#: src/gns/gnunet-service-gns_resolver.c:677
#, c-format
msgid "Service `%s' not a port, skipping service labels.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:938
+#: src/gns/gnunet-service-gns_resolver.c:891
msgid "Failed to parse DNS response\n"
msgstr "Нисам успео да обрадим ДНС одговор\n"
-#: src/gns/gnunet-service-gns_resolver.c:1129
+#: src/gns/gnunet-service-gns_resolver.c:1082
#, c-format
msgid "Skipping record of unsupported type %d\n"
msgstr "Прескачем запис неподржане врсте %d\n"
-#: src/gns/gnunet-service-gns_resolver.c:1447
-#, fuzzy, c-format
-msgid "VPN returned empty result for `%s'\n"
-msgstr "АТС је вратио резултате за %u адресе\n"
-
-#: src/gns/gnunet-service-gns_resolver.c:1919
+#: src/gns/gnunet-service-gns_resolver.c:1859
#, c-format
msgid "Name `%s' cannot be converted to IDNA."
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1934
+#: src/gns/gnunet-service-gns_resolver.c:1874
#, c-format
msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
msgstr "ГНС претраживање је резултирало ДНС називом који је предуг („%s“)\n"
-#: src/gns/gnunet-service-gns_resolver.c:1979
+#: src/gns/gnunet-service-gns_resolver.c:1914
#, fuzzy, c-format
msgid "GNS lookup failed (zero records found for `%s')\n"
msgstr "Дубачење ГНС претраге није успело (нисам нашао запис изасланства)\n"
-#: src/gns/gnunet-service-gns_resolver.c:2406
+#: src/gns/gnunet-service-gns_resolver.c:2312
+msgid "Unable to process critical delegation record\n"
+msgstr ""
+
+#: src/gns/gnunet-service-gns_resolver.c:2317
msgid "GNS lookup recursion failed (no delegation record found)\n"
msgstr "Дубачење ГНС претраге није успело (нисам нашао запис изасланства)\n"
-#: src/gns/gnunet-service-gns_resolver.c:2429
+#: src/gns/gnunet-service-gns_resolver.c:2340
#, c-format
msgid "Failed to cache GNS resolution: %s\n"
msgstr "Нисам успео да сместим у оставу ГНС резолуцију: %s\n"
-#: src/gns/gnunet-service-gns_resolver.c:2594
+#: src/gns/gnunet-service-gns_resolver.c:2505
#, fuzzy, c-format
msgid "GNS namecache returned empty result for `%s'\n"
msgstr "АТС је вратио резултате за %u адресе\n"
-#: src/gns/gnunet-service-gns_resolver.c:2734
+#: src/gns/gnunet-service-gns_resolver.c:2652
#, c-format
msgid "Zone %s was revoked, resolution fails\n"
msgstr "Зона %s је опозвана, резолуција није успела\n"
-#: src/gns/plugin_gnsrecord_gns.c:174
+#: src/gns/plugin_gnsrecord_gns.c:136
+msgid "This is a memento of an older block for internal maintenance."
+msgstr ""
+
+#: src/gns/plugin_gnsrecord_gns.c:175
#, fuzzy, c-format
msgid "Unable to parse zone key record `%s'\n"
msgstr "Не могу да обрадим „MX“ запис „%s“\n"
-#: src/gns/plugin_gnsrecord_gns.c:187
+#: src/gns/plugin_gnsrecord_gns.c:188
msgid "Record type does not match parsed record type\n"
msgstr ""
-#: src/gns/plugin_gnsrecord_gns.c:213
+#: src/gns/plugin_gnsrecord_gns.c:211
#, c-format
msgid "Unable to parse GNS2DNS record `%s'\n"
msgstr "Не могу да обрадим „GNS2DNS“ запис „%s“\n"
-#: src/gns/plugin_gnsrecord_gns.c:229
+#: src/gns/plugin_gnsrecord_gns.c:227
#, fuzzy, c-format
msgid "Failed to serialize GNS2DNS record with value `%s': Not a DNS name.\n"
msgstr "Нисам успео да серијализујем ГНС2ДНС запис са вредношћу „%s“\n"
-#: src/gns/plugin_gnsrecord_gns.c:253
+#: src/gns/plugin_gnsrecord_gns.c:251
#, c-format
msgid "Unable to parse VPN record string `%s'\n"
msgstr "Не могу да обрадим ниску ВПН записа „%s“\n"
-#: src/gns/plugin_gnsrecord_gns.c:285
+#: src/gns/plugin_gnsrecord_gns.c:283
#, fuzzy, c-format
msgid "Unable to parse BOX record string `%s'\n"
msgstr "Не могу да обрадим ниску ВПН записа „%s“\n"
@@ -4073,6 +4133,34 @@ msgstr "Не могу да обрадим ниску ВПН записа „%s
msgid "Gns REST API initialized\n"
msgstr "Меш је покренут\n"
+#: src/gnsrecord/gnsrecord_misc.c:448
+msgid "Zone delegation record not allowed in apex."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:456
+msgid "Zone delegation record set contains mutually exclusive records."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:466
+msgid "Multiple REDIRECT records."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:475 src/gnsrecord/gnsrecord_misc.c:501
+msgid "Redirection record set conains mutually exclusive records."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:482
+msgid "Redirection records not allowed in apex."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:493
+msgid "Redirection records not allowed in apex.."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:515
+msgid "Mutually exclusive records."
+msgstr ""
+
#: src/gnsrecord/plugin_gnsrecord_dns.c:367
#, c-format
msgid "Unable to parse IPv4 address `%s'\n"
@@ -4321,7 +4409,7 @@ msgid "# hostlist downloads initiated"
msgstr "# преузимања списка домаћина су започета"
#: src/hostlist/gnunet-daemon-hostlist_client.c:1144
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1728
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1732
msgid "# milliseconds between hostlist downloads"
msgstr "# милисекунди између преузимања списка домаћина"
@@ -4382,21 +4470,21 @@ msgstr "Грешка писања УРИ-а списка домаћина у д
msgid "# hostlist URIs written to file"
msgstr "# УРИ-и списка домаћина су записани у датотеку"
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1657
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1661
#: src/transport/plugin_transport_http_client.c:2300
#, c-format
msgid "Invalid proxy type: `%s', disabling proxy! Check configuration!\n"
msgstr ""
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1686
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1690
msgid "Learning is enabled on this peer\n"
msgstr "Учење је укључено на овом парњаку\n"
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1699
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1703
msgid "Learning is not enabled on this peer\n"
msgstr "Учење није укључено на овом парњаку\n"
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1713
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1717
#, c-format
msgid ""
"Since learning is not enabled on this peer, hostlist file `%s' was removed\n"
@@ -4595,50 +4683,50 @@ msgstr ""
msgid "Maintain egos"
msgstr "Одржава егое"
-#: src/identity/gnunet-service-identity.c:503
+#: src/identity/gnunet-service-identity.c:502
msgid "no default known"
msgstr "основнст није позната"
-#: src/identity/gnunet-service-identity.c:528
+#: src/identity/gnunet-service-identity.c:527
msgid "default configured, but ego unknown (internal error)"
msgstr "основни је подешен, али его није познат (унутрашња грешка)"
-#: src/identity/gnunet-service-identity.c:621
-#: src/identity/gnunet-service-identity.c:896
-#: src/identity/gnunet-service-identity.c:1016
+#: src/identity/gnunet-service-identity.c:620
+#: src/identity/gnunet-service-identity.c:895
+#: src/identity/gnunet-service-identity.c:1015
#, c-format
msgid "Failed to write subsystem default identifier map to `%s'.\n"
msgstr "Нисам успео да запишем основну мапу одредника подсистема у „%s“.\n"
-#: src/identity/gnunet-service-identity.c:631
+#: src/identity/gnunet-service-identity.c:630
msgid "Unknown ego specified for service (internal error)"
msgstr "Непознат его је наведен за услугу (унутрашња грешка)"
-#: src/identity/gnunet-service-identity.c:725
+#: src/identity/gnunet-service-identity.c:724
msgid "identifier already in use for another ego"
msgstr "одредник се већ користи за други его"
-#: src/identity/gnunet-service-identity.c:872
+#: src/identity/gnunet-service-identity.c:871
msgid "target name already exists"
msgstr "назив мете већ постоји"
-#: src/identity/gnunet-service-identity.c:914
-#: src/identity/gnunet-service-identity.c:1033
+#: src/identity/gnunet-service-identity.c:913
+#: src/identity/gnunet-service-identity.c:1032
msgid "no matching ego found"
msgstr "нисам нашао одговарајући его"
-#: src/identity/gnunet-service-identity.c:1131
+#: src/identity/gnunet-service-identity.c:1130
#, c-format
msgid "Failed to parse ego information in `%s'\n"
msgstr "Нисам успео да обрадим податке егоа у „%s“\n"
-#: src/identity/gnunet-service-identity.c:1189
+#: src/identity/gnunet-service-identity.c:1188
#, c-format
msgid "Failed to parse subsystem identity configuration file `%s'\n"
msgstr ""
"Нисам успео да обрадим датотеку подешавања идентитета субсистема „%s“\n"
-#: src/identity/gnunet-service-identity.c:1198
+#: src/identity/gnunet-service-identity.c:1197
#, c-format
msgid "Failed to create directory `%s' for storing egos\n"
msgstr "Нисам успео да направим директоријум „%s“ за смештајне егое\n"
@@ -4678,7 +4766,7 @@ msgstr "Не могу да приступим датотеци „%s“: %s\n"
msgid "No records found for `%s'"
msgstr "Нисам нашао записе за „%s“"
-#: src/namecache/gnunet-namecache.c:119 src/namestore/gnunet-namestore.c:459
+#: src/namecache/gnunet-namecache.c:119 src/namestore/gnunet-namestore.c:469
#, c-format
msgid "\tCorrupt or unsupported record of type %u\n"
msgstr "\tОштећен или неподржан запис врсте %u\n"
@@ -4698,7 +4786,7 @@ msgstr "Неисправан јавни кључ за обратну претр
msgid "You must specify a name\n"
msgstr "Морате навести назив\n"
-#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1641
+#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1591
msgid "name of the record to add/delete/display"
msgstr "назив записа за додавање/брисање/приказ"
@@ -4707,7 +4795,7 @@ msgstr "назив записа за додавање/брисање/прика
msgid "specifies the public key of the zone to look in"
msgstr "наводи јавни кључ зоне за претраживање"
-#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1702
+#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1652
msgid "GNUnet zone manipulation tool"
msgstr "Алат манипуслисања ГНУнет зоном"
@@ -4853,140 +4941,113 @@ msgstr ""
msgid "GNU Name System First-Come-First-Served name registration service"
msgstr "Услуга регистрације назива Први Стиже Први Служи ГНУ Система Назива"
-#: src/namestore/gnunet-namestore.c:334
+#: src/namestore/gnunet-namestore.c:340
#, c-format
msgid "Adding record failed: %s\n"
msgstr "Додавање записа није успело: %s\n"
-#: src/namestore/gnunet-namestore.c:362
+#: src/namestore/gnunet-namestore.c:368
#, c-format
msgid "Deleting record failed, record does not exist%s%s\n"
msgstr "Брисање записа није успело, запис не постоји%s%s\n"
-#: src/namestore/gnunet-namestore.c:369
+#: src/namestore/gnunet-namestore.c:375
#, c-format
msgid "Deleting record failed%s%s\n"
msgstr "Брисање записа није успело%s%s\n"
-#: src/namestore/gnunet-namestore.c:656
-#, c-format
-msgid "A %s record exists already under `%s', no other records can be added.\n"
-msgstr ""
-
#: src/namestore/gnunet-namestore.c:668
#, c-format
msgid ""
-"A zone key record exists already under `%s', no other records can be added.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:680
-#, c-format
-msgid ""
"A SOA record exists already under `%s', cannot add a second SOA to the same "
"zone.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:696
-#, c-format
-msgid "Records already exist under `%s', cannot add `%s' record.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:711
-#, c-format
-msgid "Records already exist under `%s', cannot add record.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:726
-#, c-format
-msgid ""
-"Non-GNS2DNS records already exist under `%s', cannot add GNS2DNS record.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:846
+#: src/namestore/gnunet-namestore.c:789
#, fuzzy, c-format
msgid "There are no records under label `%s' that could be deleted.\n"
msgstr "Нема позива који би могао бити отказан управо сада.\n"
-#: src/namestore/gnunet-namestore.c:889
+#: src/namestore/gnunet-namestore.c:832
#, c-format
msgid ""
"There are no records under label `%s' that match the request for deletion.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:970
+#: src/namestore/gnunet-namestore.c:920
#, fuzzy, c-format
msgid "Failed to replace records: %s\n"
msgstr "Нисам успео да обрадим ДАНЕ запис: %s\n"
-#: src/namestore/gnunet-namestore.c:993
+#: src/namestore/gnunet-namestore.c:943
#, c-format
msgid "No options given\n"
msgstr "Нису дате опције\n"
-#: src/namestore/gnunet-namestore.c:1014 src/namestore/gnunet-namestore.c:1066
-#: src/namestore/gnunet-namestore.c:1076 src/namestore/gnunet-namestore.c:1105
-#: src/namestore/gnunet-namestore.c:1126 src/namestore/gnunet-namestore.c:1153
-#: src/namestore/gnunet-namestore.c:1230
+#: src/namestore/gnunet-namestore.c:964 src/namestore/gnunet-namestore.c:1016
+#: src/namestore/gnunet-namestore.c:1026 src/namestore/gnunet-namestore.c:1055
+#: src/namestore/gnunet-namestore.c:1076 src/namestore/gnunet-namestore.c:1103
+#: src/namestore/gnunet-namestore.c:1180
#, c-format
msgid "Missing option `%s' for operation `%s'\n"
msgstr "Недостаје опција „%s“ за радњу „%s“\n"
-#: src/namestore/gnunet-namestore.c:1016
+#: src/namestore/gnunet-namestore.c:966
msgid "replace"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1045
+#: src/namestore/gnunet-namestore.c:995
#, c-format
msgid "Invalid nick `%s'\n"
msgstr "Неисправан надимак „%s“\n"
-#: src/namestore/gnunet-namestore.c:1068 src/namestore/gnunet-namestore.c:1078
-#: src/namestore/gnunet-namestore.c:1107 src/namestore/gnunet-namestore.c:1128
-#: src/namestore/gnunet-namestore.c:1232
+#: src/namestore/gnunet-namestore.c:1018 src/namestore/gnunet-namestore.c:1028
+#: src/namestore/gnunet-namestore.c:1057 src/namestore/gnunet-namestore.c:1078
+#: src/namestore/gnunet-namestore.c:1182
msgid "add"
msgstr "додај"
-#: src/namestore/gnunet-namestore.c:1086
+#: src/namestore/gnunet-namestore.c:1036
#, c-format
msgid "Unsupported type `%s'\n"
msgstr "Неподржана врста „%s“\n"
-#: src/namestore/gnunet-namestore.c:1096
+#: src/namestore/gnunet-namestore.c:1046
#, c-format
msgid "For DNS record types `SRV', `TLSA' and `OPENPGPKEY'"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1116
+#: src/namestore/gnunet-namestore.c:1066
#, c-format
msgid "Value `%s' invalid for record type `%s'\n"
msgstr "Вредност „%s“ је неисправна за врсту записа „%s“\n"
-#: src/namestore/gnunet-namestore.c:1135 src/namestore/gnunet-namestore.c:1239
+#: src/namestore/gnunet-namestore.c:1085 src/namestore/gnunet-namestore.c:1189
#, c-format
msgid "Invalid time format `%s'\n"
msgstr "Неисправан формат времена „%s“\n"
-#: src/namestore/gnunet-namestore.c:1155
+#: src/namestore/gnunet-namestore.c:1105
msgid "del"
msgstr "обриши"
-#: src/namestore/gnunet-namestore.c:1197
+#: src/namestore/gnunet-namestore.c:1147
#, c-format
msgid "Invalid public key for reverse lookup `%s'\n"
msgstr "Неисправан јавни кључ за обратну претрагу „%s“\n"
-#: src/namestore/gnunet-namestore.c:1222
+#: src/namestore/gnunet-namestore.c:1172
#: src/peerinfo-tool/gnunet-peerinfo.c:737
#, c-format
msgid "Invalid URI `%s'\n"
msgstr "Неисправан УРИ „%s“\n"
-#: src/namestore/gnunet-namestore.c:1292
+#: src/namestore/gnunet-namestore.c:1242
#, c-format
msgid "Label `%s' contains `.' which is not allowed\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1342
+#: src/namestore/gnunet-namestore.c:1292
#, c-format
msgid ""
"No default identity configured for `namestore' subsystem\n"
@@ -4994,108 +5055,113 @@ msgid ""
"Run gnunet-identity -d to get a list of choices for $NAME\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1407
+#: src/namestore/gnunet-namestore.c:1357
#, c-format
msgid "Superfluous command line arguments (starting with `%s') ignored\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1436
+#: src/namestore/gnunet-namestore.c:1386
#, c-format
msgid "Cannot connect to identity service\n"
msgstr "Не могу да се повежем са услугом идентитета\n"
-#: src/namestore/gnunet-namestore.c:1483
+#: src/namestore/gnunet-namestore.c:1433
msgid "Empty record line argument is not allowed.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1495
+#: src/namestore/gnunet-namestore.c:1445
#, c-format
msgid "Invalid expiration time `%s' (must be without unit)\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1507 src/namestore/gnunet-namestore.c:1523
-#: src/namestore/gnunet-namestore.c:1540
+#: src/namestore/gnunet-namestore.c:1457 src/namestore/gnunet-namestore.c:1473
+#: src/namestore/gnunet-namestore.c:1490
#, fuzzy, c-format
msgid "Missing entries in record line `%s'.\n"
msgstr "Недостаје функција „%s“ у прикључку преноса за „%s“\n"
-#: src/namestore/gnunet-namestore.c:1515
+#: src/namestore/gnunet-namestore.c:1465
#, fuzzy, c-format
msgid "Unknown record type `%s'\n"
msgstr "Непозната наредба „%s“\n"
-#: src/namestore/gnunet-namestore.c:1553
+#: src/namestore/gnunet-namestore.c:1503
#, fuzzy, c-format
msgid "Invalid record data for type %s: `%s'.\n"
msgstr "Неисправан формат за ИП: „%s“\n"
-#: src/namestore/gnunet-namestore.c:1610
+#: src/namestore/gnunet-namestore.c:1560
msgid "add record"
msgstr "додаје запис"
-#: src/namestore/gnunet-namestore.c:1613
+#: src/namestore/gnunet-namestore.c:1563
msgid "delete record"
msgstr "брише запис"
-#: src/namestore/gnunet-namestore.c:1617
+#: src/namestore/gnunet-namestore.c:1567
msgid "display records"
msgstr "приказује записе"
-#: src/namestore/gnunet-namestore.c:1624
+#: src/namestore/gnunet-namestore.c:1574
msgid ""
"expiration time for record to use (for adding only), \"never\" is possible"
msgstr "време истека записа за коришћење (само за додавање), „never“ је могуће"
-#: src/namestore/gnunet-namestore.c:1630
+#: src/namestore/gnunet-namestore.c:1580
msgid "set the desired nick name for the zone"
msgstr "поставља жељени назив надимка за зону"
-#: src/namestore/gnunet-namestore.c:1635
+#: src/namestore/gnunet-namestore.c:1585
msgid "monitor changes in the namestore"
msgstr "прати измене у смештају назива"
-#: src/namestore/gnunet-namestore.c:1647
+#: src/namestore/gnunet-namestore.c:1597
msgid "determine our name for the given PKEY"
msgstr "одређује наш назив за дати „PKEY“"
-#: src/namestore/gnunet-namestore.c:1654
+#: src/namestore/gnunet-namestore.c:1604
msgid ""
"set record set to values given by (possibly multiple) RECORDLINES; can be "
"specified multiple times"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1660
+#: src/namestore/gnunet-namestore.c:1610
msgid "type of the record to add/delete/display"
msgstr "врста записа за додавање/брисање/приказ"
-#: src/namestore/gnunet-namestore.c:1665
+#: src/namestore/gnunet-namestore.c:1615
msgid "URI to import into our zone"
msgstr "УРИ за увоз у нашу зону"
-#: src/namestore/gnunet-namestore.c:1671
+#: src/namestore/gnunet-namestore.c:1621
msgid "value of the record to add/delete"
msgstr "вредност записа за додавање/брисање"
-#: src/namestore/gnunet-namestore.c:1675
+#: src/namestore/gnunet-namestore.c:1625
msgid "create or list public record"
msgstr "ствара или исписује јавни запис"
-#: src/namestore/gnunet-namestore.c:1681
+#: src/namestore/gnunet-namestore.c:1631
msgid ""
"create shadow record (only valid if all other records of the same type have "
"expired"
msgstr ""
"прави сеновити запис (важи само ако су сви остали записи исте врсте истекли"
-#: src/namestore/gnunet-namestore.c:1687
+#: src/namestore/gnunet-namestore.c:1637
msgid "name of the ego controlling the zone"
msgstr "назив егоа који контролише зону"
-#: src/namestore/gnunet-service-namestore.c:871
+#: src/namestore/gnunet-service-namestore.c:879
#, c-format
msgid "Failed to replicate block in namecache: %s\n"
msgstr "Нисам успео да реплицирам блок у остави назива: %s\n"
+#: src/namestore/gnunet-service-namestore.c:1668
+#, fuzzy
+msgid "Store failed"
+msgstr "# Неуспеси „СТАВИ“ смештаја података"
+
#: src/namestore/gnunet-zoneimport.c:1847
msgid "size to use for the main hash map"
msgstr ""
@@ -5104,10 +5170,6 @@ msgstr ""
msgid "minimum expiration time we assume for imported records"
msgstr ""
-#: src/namestore/namestore_api.c:373
-msgid "Namestore failed to store record\n"
-msgstr "Смештај назива није успео да смести запис\n"
-
#: src/namestore/plugin_namestore_flat.c:195
#, c-format
msgid "File too big to map: %llu bytes.\n"
@@ -5699,6 +5761,51 @@ msgstr "Нисам успео да се повежем са „%s“ услуг
msgid "Daemon to run to perform IP protocol translation to GNUnet"
msgstr "Демон за покретање за обављање превода ИП протокола у ГНУнет"
+#: src/reclaim/gnunet-did.c:209
+#, fuzzy, c-format
+msgid "Invalid DID `%s'\n"
+msgstr "Неисправан УРИ „%s“\n"
+
+#: src/reclaim/gnunet-did.c:835
+msgid "Create a DID Document and display its DID"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:840
+msgid "Get the DID Document associated with the given DID"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:844
+msgid "Show the DID for a given ego"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:849
+msgid "Remove the DID"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:853 src/reclaim/gnunet-did.c:857
+msgid "Replace the DID Document."
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:863
+msgid "The Decentralized Identity (DID)"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:869
+msgid "The DID Document to store in GNUNET"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:874
+msgid "The name of the EGO"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:880
+msgid "The time until the DID Document is going to expire (e.g. 5d)"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:889
+msgid "Manage Decentralized Identities (DIDs)"
+msgstr ""
+
#: src/reclaim/gnunet-reclaim.c:802
#, fuzzy, c-format
msgid "Ego is required\n"
@@ -6622,17 +6729,17 @@ msgstr ""
"Број ивица које се могу успоставити приликом додавања новог чвора у "
"слободном размештају лествице не може бити већи од %u. Дато је „%s = %llu“"
-#: src/testbed/testbed_api_topology.c:1033 src/testing/testing.c:2643
+#: src/testbed/testbed_api_topology.c:1033 src/testing/testing.c:2657
#, c-format
msgid "Topology file %s not found\n"
msgstr "Нисам нашао датотеку размештаја „%s“\n"
-#: src/testbed/testbed_api_topology.c:1041 src/testing/testing.c:2651
+#: src/testbed/testbed_api_topology.c:1041 src/testing/testing.c:2665
#, c-format
msgid "Topology file %s has no data\n"
msgstr "Датотека размештаја „%s“ нема података\n"
-#: src/testbed/testbed_api_topology.c:1049 src/testing/testing.c:2659
+#: src/testbed/testbed_api_topology.c:1049 src/testing/testing.c:2673
#, c-format
msgid "Topology file %s cannot be read\n"
msgstr "Не могу да прочитам датотеку размештаја „%s“\n"
@@ -6847,7 +6954,7 @@ msgstr ""
#: src/transport/gnunet-communicator-tcp.c:3338
#: src/transport/gnunet-communicator-udp.c:3856
-#: src/transport/gnunet-service-tng.c:10512
+#: src/transport/gnunet-service-tng.c:10623
#: src/transport/gnunet-service-transport.c:2627
msgid "Transport service is lacking key configuration settings. Exiting.\n"
msgstr "Услузи преноса недостају поставке подешавања кључа. Излазим.\n"
@@ -8085,58 +8192,58 @@ msgstr ""
msgid "Need a non-empty hostname for service `%s'.\n"
msgstr "Потребан је не-празан назив домаћина за услугу „%s“.\n"
-#: src/util/common_logging.c:626 src/util/common_logging.c:665
+#: src/util/common_logging.c:648 src/util/common_logging.c:687
#, c-format
msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n"
msgstr ""
-#: src/util/common_logging.c:904
+#: src/util/common_logging.c:926
#, c-format
msgid "Message `%.*s' repeated %u times in the last %s\n"
msgstr "Порука „%.*s“ је поновљена %u пута у прошлости %s\n"
-#: src/util/common_logging.c:1108
+#: src/util/common_logging.c:1131
msgid "ERROR"
msgstr "ГРЕШКА"
-#: src/util/common_logging.c:1110
+#: src/util/common_logging.c:1133
msgid "WARNING"
msgstr "УПОЗОРЕЊЕ"
-#: src/util/common_logging.c:1112
+#: src/util/common_logging.c:1135
msgid "MESSAGE"
msgstr ""
-#: src/util/common_logging.c:1114
+#: src/util/common_logging.c:1137
msgid "INFO"
msgstr "ПОДАЦИ"
-#: src/util/common_logging.c:1116
+#: src/util/common_logging.c:1139
msgid "DEBUG"
msgstr "ПРОЧИШЋАВАЊЕ"
-#: src/util/common_logging.c:1118
+#: src/util/common_logging.c:1141
msgid "NONE"
msgstr "НИШТА"
-#: src/util/common_logging.c:1119
+#: src/util/common_logging.c:1142
msgid "INVALID"
msgstr "НЕИСПРАВНО"
-#: src/util/common_logging.c:1400
+#: src/util/common_logging.c:1423
msgid "unknown address"
msgstr "непозната адреса"
-#: src/util/common_logging.c:1445
+#: src/util/common_logging.c:1468
msgid "invalid address"
msgstr "неисправна адреса"
-#: src/util/common_logging.c:1464
+#: src/util/common_logging.c:1487
#, c-format
msgid "Configuration fails to specify option `%s' in section `%s'!\n"
msgstr "Подешавање није успело да наведе опцију „%s“ у одељку „%s“!\n"
-#: src/util/common_logging.c:1487
+#: src/util/common_logging.c:1510
#, c-format
msgid ""
"Configuration specifies invalid value for option `%s' in section `%s': %s\n"
@@ -8288,17 +8395,17 @@ msgstr "Нисам успео да претворим УТФ-8 назив „%s
msgid "Could not bind to any port: %s\n"
msgstr "Не могу да се вежем ни за један прикључник: %s\n"
-#: src/util/dnsstub.c:344
-#, c-format
-msgid "Received DNS response that is too small (%u bytes)"
+#: src/util/dnsstub.c:370
+#, fuzzy, c-format
+msgid "Received DNS response that is too small (%u bytes)\n"
msgstr "Примих ДНС одговор који је премали (%u бајта)"
-#: src/util/dnsstub.c:482
+#: src/util/dnsstub.c:508
#, fuzzy, c-format
msgid "Failed to send DNS request to %s: %s\n"
msgstr "Нисам успео да пошаљем ДНС захтев за %s\n"
-#: src/util/dnsstub.c:487
+#: src/util/dnsstub.c:513
#, c-format
msgid "Sent DNS request to %s\n"
msgstr "Послао сам ДНС захтев за %s\n"
@@ -8384,83 +8491,83 @@ msgid ""
msgstr ""
"Аргументи обавезни за дуге опције су такође обавезни за кратке опције.\n"
-#: src/util/getopt_helpers.c:196
+#: src/util/getopt_helpers.c:197
msgid "print this help"
msgstr ""
-#: src/util/getopt_helpers.c:261
+#: src/util/getopt_helpers.c:262
msgid "be verbose"
msgstr ""
-#: src/util/getopt_helpers.c:377
+#: src/util/getopt_helpers.c:378
msgid "configure logging to use LOGLEVEL"
msgstr ""
-#: src/util/getopt_helpers.c:444
+#: src/util/getopt_helpers.c:445
msgid "configure logging to write logs to FILENAME"
msgstr ""
-#: src/util/getopt_helpers.c:461
+#: src/util/getopt_helpers.c:462
#, fuzzy
msgid "use configuration file FILENAME"
msgstr "ствара јединствене датотеке подешавања"
-#: src/util/getopt_helpers.c:497 src/util/getopt_helpers.c:811
-#: src/util/getopt_helpers.c:867
+#: src/util/getopt_helpers.c:498 src/util/getopt_helpers.c:812
+#: src/util/getopt_helpers.c:868
#, c-format
msgid "You must pass a number to the `%s' option.\n"
msgstr "Морате да проследите број опцији „%s“.\n"
-#: src/util/getopt_helpers.c:569
+#: src/util/getopt_helpers.c:570
#, fuzzy, c-format
msgid ""
"You must pass a relative time (optionally with sign) to the `%s' option.\n"
msgstr "Морате да проследите релативно време опцији „%s“.\n"
-#: src/util/getopt_helpers.c:576
+#: src/util/getopt_helpers.c:577
#, c-format
msgid "Value given for time travel `%s' option is too big.\n"
msgstr ""
-#: src/util/getopt_helpers.c:594
+#: src/util/getopt_helpers.c:595
msgid "[+/-]MICROSECONDS"
msgstr ""
-#: src/util/getopt_helpers.c:596
+#: src/util/getopt_helpers.c:597
msgid "modify system time by given offset (for debugging/testing only)"
msgstr ""
-#: src/util/getopt_helpers.c:630
+#: src/util/getopt_helpers.c:631
#, c-format
msgid "You must pass relative time to the `%s' option.\n"
msgstr "Морате да проследите релативно време опцији „%s“.\n"
-#: src/util/getopt_helpers.c:684
+#: src/util/getopt_helpers.c:685
#, fuzzy, c-format
msgid "You must pass absolute time to the `%s' option.\n"
msgstr "Морате да проследите релативно време опцији „%s“.\n"
-#: src/util/getopt_helpers.c:741
+#: src/util/getopt_helpers.c:742
#, fuzzy, c-format
msgid "You must pass a timestamp to the `%s' option.\n"
msgstr "Морате да проследите број опцији „%s“.\n"
-#: src/util/getopt_helpers.c:748
+#: src/util/getopt_helpers.c:749
#, c-format
msgid "The maximum precision allowed for timestamps is seconds.\n"
msgstr ""
-#: src/util/getopt_helpers.c:804
+#: src/util/getopt_helpers.c:805
#, c-format
msgid "Your input for the '%s' option has to be a non negative number\n"
msgstr ""
-#: src/util/getopt_helpers.c:874
+#: src/util/getopt_helpers.c:875
#, fuzzy, c-format
msgid "You must pass a number below %u to the `%s' option.\n"
msgstr "Морате да проследите број опцији „%s“.\n"
-#: src/util/getopt_helpers.c:952
+#: src/util/getopt_helpers.c:953
#, c-format
msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n"
msgstr ""
@@ -8493,7 +8600,7 @@ msgstr ""
msgid "Manipulate GNUnet configuration files"
msgstr "Управља ГНУнет датотекама подешавања"
-#: src/util/gnunet-crypto-tvg.c:1072
+#: src/util/gnunet-crypto-tvg.c:1483
msgid "verify a test vector from stdin"
msgstr ""
@@ -8755,7 +8862,7 @@ msgid "Unable to shorten unix path `%s' while keeping name unique\n"
msgstr ""
"Не могу да скратим јуникс путању „%s“ док задржавам назив јединственим\n"
-#: src/util/network.c:1306
+#: src/util/network.c:1307
#, c-format
msgid ""
"Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n"
@@ -8890,78 +8997,78 @@ msgstr ""
msgid "Character sets requested were `%s'->`%s'\n"
msgstr "Скупови знакова се захтевају где је „%s“–>„%s“\n"
-#: src/util/strings.c:487
+#: src/util/strings.c:514
msgid "Failed to expand `$HOME': environment variable `HOME' not set"
msgstr ""
"Нисам успео да раширим „$HOME“: променљива окружења „HOME“ није постављена"
-#: src/util/strings.c:1023
+#: src/util/strings.c:1050
msgid "IPv6 address did not start with `['\n"
msgstr "ИПв6 адреса не почиње са [\n"
-#: src/util/strings.c:1031
+#: src/util/strings.c:1058
msgid "IPv6 address did contain ':' to separate port number\n"
msgstr "ИПв6 адреса садржи : за раздвајање броја прикључника\n"
-#: src/util/strings.c:1038
+#: src/util/strings.c:1065
msgid "IPv6 address did contain ']' before ':' to separate port number\n"
msgstr "ИПв6 адреса садржи ] пре : за раздвајање броја прикључника\n"
-#: src/util/strings.c:1046
+#: src/util/strings.c:1073
msgid "IPv6 address did contain a valid port number after the last ':'\n"
msgstr "ИПв6 адреса садржи исправан број прикључника након последње „:“\n"
-#: src/util/strings.c:1055
+#: src/util/strings.c:1082
#, c-format
msgid "Invalid IPv6 address `%s': %s\n"
msgstr "Неисправна ИПв6 адреса „%s“: %s\n"
-#: src/util/strings.c:1237 src/util/strings.c:1248
+#: src/util/strings.c:1264 src/util/strings.c:1275
msgid "Port not in range\n"
msgstr "Прикључник није у опсегу\n"
-#: src/util/strings.c:1257
+#: src/util/strings.c:1284
#, c-format
msgid "Malformed port policy `%s'\n"
msgstr "Лоша политика прикључника „%s“\n"
-#: src/util/strings.c:1328 src/util/strings.c:1357 src/util/strings.c:1404
-#: src/util/strings.c:1424
+#: src/util/strings.c:1355 src/util/strings.c:1384 src/util/strings.c:1431
+#: src/util/strings.c:1451
#, c-format
msgid "Invalid format for IP: `%s'\n"
msgstr "Неисправан формат за ИП: „%s“\n"
-#: src/util/strings.c:1382
+#: src/util/strings.c:1409
#, c-format
msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)."
msgstr "Неисправна напомена мреже („/%d“ није исправно у ИПв4 ЦИДР-у)."
-#: src/util/strings.c:1433
+#: src/util/strings.c:1460
#, c-format
msgid "Invalid format: `%s'\n"
msgstr "Неисправан формат: „%s“\n"
-#: src/util/strings.c:1475
+#: src/util/strings.c:1502
#, c-format
msgid "Invalid network notation (does not end with ';': `%s')\n"
msgstr "Неисправна напомена мреже (не завршава се са „;“: „%s“)\n"
-#: src/util/strings.c:1525
+#: src/util/strings.c:1552
#, c-format
msgid "Wrong format `%s' for netmask\n"
msgstr "Погрешан формат „%s“ за мрежну маску\n"
-#: src/util/strings.c:1556
+#: src/util/strings.c:1583
#, c-format
msgid "Wrong format `%s' for network\n"
msgstr "Погрешан формат „%s“ за мрежу\n"
-#: src/util/time.c:863 src/util/time.c:891
+#: src/util/time.c:870 src/util/time.c:898
#, c-format
msgid "Failed to map `%s', cannot assure monotonic time!\n"
msgstr ""
-#: src/util/time.c:899
+#: src/util/time.c:906
#, c-format
msgid ""
"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
@@ -9137,11 +9244,41 @@ msgstr "услуга се нуди путем УДП-ом"
msgid "Setup tunnels via VPN."
msgstr "Поставља тунеле путем ВПН-а."
-#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418
-#: src/zonemaster/gnunet-service-zonemaster.c:847
+#: src/zonemaster/gnunet-service-zonemaster-monitor.c:397
+#: src/zonemaster/gnunet-service-zonemaster.c:832
msgid "Failed to connect to the namestore!\n"
msgstr "Нисам успео да се повежем са смештајем назива!\n"
+#~ msgid "# items stored"
+#~ msgstr "# ставке су смештене"
+
+#, c-format
+#~ msgid "Loading `%s' datacache plugin\n"
+#~ msgstr "Учитавам прикључак „%s“ оставе података\n"
+
+#, c-format
+#~ msgid "Failed to load datacache plugin for `%s'\n"
+#~ msgstr "Нисам успео да учитам прикључак оставе података за „%s“\n"
+
+#~ msgid "# requests received"
+#~ msgstr "# захтеви су примљени"
+
+#~ msgid "# requests filtered by bloom filter"
+#~ msgstr "# захтеви су филтрирани блум филтером"
+
+#, fuzzy
+#~ msgid "# proximity search requests received"
+#~ msgstr "# претраге клијента су примљене"
+
+#~ msgid "write search results to file starting with PREFIX"
+#~ msgstr "пише резултате претраге у датотеку која почиње са ПРЕФИКСОМ"
+
+#~ msgid "automatically terminate search after DELAY"
+#~ msgstr "самостално окончава претрагу након ЗАСТОЈА"
+
+#~ msgid "Namestore failed to store record\n"
+#~ msgstr "Смештај назива није успео да смести запис\n"
+
#, fuzzy
#~ msgid "# requests for random value received"
#~ msgstr "# захтеви су примљени"
diff --git a/po/sv.po b/po/sv.po
index 267613776..d6dcda9e2 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: GNUnet 0.7.0b\n"
"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2022-01-10 15:13+0100\n"
+"POT-Creation-Date: 2022-03-04 22:23+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,7 +16,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1304
+#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1254
#, fuzzy, c-format
msgid "Ego `%s' not known to identity service\n"
msgstr "\"%s\": okänd tjänst: %s\n"
@@ -28,7 +28,7 @@ msgstr "Ogiltigt argument: \"%s\"\n"
#: src/abd/gnunet-abd.c:558 src/abd/gnunet-service-abd.c:1751
#: src/namestore/gnunet-namestore-fcfsd.c:1080
-#: src/namestore/gnunet-namestore.c:1001
+#: src/namestore/gnunet-namestore.c:951
#, fuzzy, c-format
msgid "Failed to connect to namestore\n"
msgstr "Misslyckades att ansluta till gnunetd.\n"
@@ -628,45 +628,45 @@ msgstr ""
msgid "Print information about ATS state"
msgstr "Skriv ut information om GNUnets motparter."
-#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044
+#: src/ats/gnunet-ats-solver-eval.c:2993 src/ats/gnunet-ats-solver-eval.c:3045
#, c-format
msgid ""
"Could not load quota for network `%s': `%s', assigning default bandwidth "
"%llu\n"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3011
+#: src/ats/gnunet-ats-solver-eval.c:3012
#, c-format
msgid ""
"No outbound quota configured for network `%s', assigning default bandwidth "
"%llu\n"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3063
+#: src/ats/gnunet-ats-solver-eval.c:3064
#, c-format
msgid ""
"No outbound quota configure for network `%s', assigning default bandwidth "
"%llu\n"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3552
+#: src/ats/gnunet-ats-solver-eval.c:3553
msgid "solver to use"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3557
+#: src/ats/gnunet-ats-solver-eval.c:3558
msgid "experiment to use"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3564
+#: src/ats/gnunet-ats-solver-eval.c:3565
#, fuzzy
msgid "print logging"
msgstr "Startade samling \"%s\".\n"
-#: src/ats/gnunet-ats-solver-eval.c:3569
+#: src/ats/gnunet-ats-solver-eval.c:3570
msgid "save logging to disk"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3574
+#: src/ats/gnunet-ats-solver-eval.c:3575
msgid "disable normalization"
msgstr ""
@@ -1568,42 +1568,7 @@ msgstr "# krypterade PONG-meddelanden mottagna"
msgid "# updates to my type map"
msgstr ""
-#: src/datacache/datacache.c:117 src/datacache/datacache.c:275
-#: src/datastore/gnunet-service-datastore.c:743
-#, fuzzy
-msgid "# bytes stored"
-msgstr "# byte krypterade"
-
-#: src/datacache/datacache.c:121 src/datacache/datacache.c:279
-#, fuzzy
-msgid "# items stored"
-msgstr "# byte krypterade"
-
-#: src/datacache/datacache.c:185
-#, c-format
-msgid "Loading `%s' datacache plugin\n"
-msgstr ""
-
-#: src/datacache/datacache.c:203
-#, 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:297
-#, fuzzy
-msgid "# requests received"
-msgstr "# byte mottogs via TCP"
-
-#: src/datacache/datacache.c:308
-msgid "# requests filtered by bloom filter"
-msgstr ""
-
-#: src/datacache/datacache.c:329
-#, fuzzy
-msgid "# proximity search requests received"
-msgstr "# klartext PONG-meddelanden mottagna"
-
-#: src/datacache/plugin_datacache_heap.c:527
+#: src/datacache/plugin_datacache_heap.c:555
msgid "Heap datacache running\n"
msgstr ""
@@ -1625,7 +1590,7 @@ msgstr ""
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:693
+#: src/datacache/plugin_datacache_sqlite.c:723
#: src/datastore/plugin_datastore_sqlite.c:531
#: src/namecache/plugin_namecache_sqlite.c:237
#: src/namestore/plugin_namestore_sqlite.c:273
@@ -1816,6 +1781,11 @@ msgstr ""
msgid "Could not find matching reservation"
msgstr ""
+#: src/datastore/gnunet-service-datastore.c:743
+#, fuzzy
+msgid "# bytes stored"
+msgstr "# byte krypterade"
+
#: src/datastore/gnunet-service-datastore.c:758
#, c-format
msgid "Need %llu bytes more space (%llu allowed, using %llu)\n"
@@ -2003,7 +1973,7 @@ msgstr ""
#: src/datastore/plugin_datastore_sqlite.c:1337
#: src/namecache/plugin_namecache_sqlite.c:564
-#: src/namestore/plugin_namestore_sqlite.c:765
+#: src/namestore/plugin_namestore_sqlite.c:775
msgid "Sqlite database running\n"
msgstr ""
@@ -2011,56 +1981,65 @@ msgstr ""
msgid "Template database running\n"
msgstr ""
-#: src/dht/gnunet-dht-get.c:159
+#: src/dht/gnunet-dht-get.c:164
#, c-format
msgid ""
"Result %d, type %d:\n"
"%.*s\n"
msgstr ""
-#: src/dht/gnunet-dht-get.c:160
+#: src/dht/gnunet-dht-get.c:165
#, c-format
msgid "Result %d, type %d:\n"
msgstr ""
-#: src/dht/gnunet-dht-get.c:209
+#: src/dht/gnunet-dht-get.c:215
msgid "Must provide key for DHT GET!\n"
msgstr ""
-#: src/dht/gnunet-dht-get.c:217 src/dht/gnunet-dht-monitor.c:255
-#, fuzzy
+#: src/dht/gnunet-dht-get.c:223 src/dht/gnunet-dht-hello.c:119
+#: src/dht/gnunet-dht-monitor.c:255
+#, fuzzy, c-format
msgid "Failed to connect to DHT service!\n"
msgstr "Misslyckades att ansluta till gnunetd.\n"
-#: src/dht/gnunet-dht-get.c:227
+#: src/dht/gnunet-dht-get.c:233
msgid "Issuing DHT GET with key"
msgstr ""
-#: src/dht/gnunet-dht-get.c:260 src/dht/gnunet-dht-monitor.c:302
+#: src/dht/gnunet-dht-get.c:269 src/dht/gnunet-dht-monitor.c:302
#: src/dht/gnunet-dht-put.c:200
msgid "the query key"
msgstr ""
-#: src/dht/gnunet-dht-get.c:266
+#: src/dht/gnunet-dht-get.c:275
msgid "how many parallel requests (replicas) to create"
msgstr ""
-#: src/dht/gnunet-dht-get.c:272 src/dht/gnunet-dht-monitor.c:308
+#: src/dht/gnunet-dht-get.c:280 src/dht/gnunet-dht-put.c:217
+msgid "use DHT's record route option"
+msgstr ""
+
+#: src/dht/gnunet-dht-get.c:286 src/dht/gnunet-dht-monitor.c:308
msgid "the type of data to look for"
msgstr ""
-#: src/dht/gnunet-dht-get.c:278
+#: src/dht/gnunet-dht-get.c:292
msgid "how long to execute this query before giving up?"
msgstr ""
-#: src/dht/gnunet-dht-get.c:284 src/dht/gnunet-dht-put.c:206
+#: src/dht/gnunet-dht-get.c:298 src/dht/gnunet-dht-put.c:206
msgid "use DHT's demultiplex everywhere option"
msgstr ""
-#: src/dht/gnunet-dht-get.c:301
+#: src/dht/gnunet-dht-get.c:315
msgid "Issue a GET request to the GNUnet DHT, prints results."
msgstr ""
+#: src/dht/gnunet-dht-hello.c:166
+msgid "Obtain HELLO from DHT or provide HELLO to DHT for bootstrapping"
+msgstr ""
+
#: src/dht/gnunet-dht-monitor.c:315
msgid "how long should the monitor command run"
msgstr ""
@@ -2100,10 +2079,6 @@ msgstr ""
msgid "how many replicas to create"
msgstr ""
-#: src/dht/gnunet-dht-put.c:217
-msgid "use DHT's record route option"
-msgstr ""
-
#: src/dht/gnunet-dht-put.c:223
msgid "the type to insert data as"
msgstr ""
@@ -2160,17 +2135,17 @@ msgstr ""
msgid "Measure quality and performance of the DHT service."
msgstr "Kan inte tillgå tjänsten"
-#: src/dht/plugin_block_dht.c:328
+#: src/dht/plugin_block_dht.c:404
#, 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:337
+#: src/dht/plugin_block_dht.c:413
#, c-format
msgid "Size mismatch for block with type %u\n"
msgstr ""
-#: src/dht/plugin_block_dht.c:348
+#: src/dht/plugin_block_dht.c:424
#, c-format
msgid "Block of type %u is malformed\n"
msgstr ""
@@ -2907,20 +2882,20 @@ msgstr ""
msgid "LOC URI malformed (signature failed validation)"
msgstr ""
-#: src/fs/fs_uri.c:653
+#: src/fs/fs_uri.c:652
#, fuzzy
msgid "invalid argument"
msgstr "Ogiltigt argument: \"%s\"\n"
-#: src/fs/fs_uri.c:665
+#: src/fs/fs_uri.c:671
msgid "Unrecognized URI type"
msgstr ""
-#: src/fs/fs_uri.c:1071 src/fs/fs_uri.c:1098
+#: src/fs/fs_uri.c:1075 src/fs/fs_uri.c:1102
msgid "No keywords specified!\n"
msgstr "Inga nyckelord angivna!\n"
-#: src/fs/fs_uri.c:1104
+#: src/fs/fs_uri.c:1108
msgid "Number of double-quotes not balanced!\n"
msgstr ""
@@ -3049,7 +3024,7 @@ msgid "Downloading `%s' done (%s/s).\n"
msgstr "Uppladdning vägrades!"
#: src/fs/gnunet-download.c:206 src/fs/gnunet-publish.c:299
-#: src/fs/gnunet-search.c:229 src/fs/gnunet-unindex.c:117
+#: src/fs/gnunet-search.c:538 src/fs/gnunet-unindex.c:117
#, c-format
msgid "Unexpected status: %d\n"
msgstr ""
@@ -3073,12 +3048,12 @@ msgid "Target filename must be specified.\n"
msgstr ""
#: src/fs/gnunet-download.c:271 src/fs/gnunet-publish.c:869
-#: src/fs/gnunet-search.c:294 src/fs/gnunet-unindex.c:154
+#: src/fs/gnunet-unindex.c:154
#, fuzzy, c-format
msgid "Could not initialize `%s' subsystem.\n"
msgstr "Misslyckades att initiera tjänsten \"%s\".\n"
-#: src/fs/gnunet-download.c:318 src/fs/gnunet-search.c:334
+#: src/fs/gnunet-download.c:318
msgid "set the desired LEVEL of receiver-anonymity"
msgstr ""
@@ -3086,7 +3061,7 @@ msgstr ""
msgid "delete incomplete downloads (when aborted with CTRL-C)"
msgstr ""
-#: src/fs/gnunet-download.c:330 src/fs/gnunet-search.c:339
+#: src/fs/gnunet-download.c:330 src/fs/gnunet-search.c:740
msgid "only search the local peer (no P2P network search)"
msgstr ""
@@ -3330,40 +3305,112 @@ msgstr ""
msgid "Publish a file or directory on GNUnet"
msgstr ""
-#: src/fs/gnunet-search.c:130
+#: src/fs/gnunet-search.c:441
#, c-format
msgid "Failed to write directory with search results to `%s'\n"
msgstr ""
-#: src/fs/gnunet-search.c:219
+#: src/fs/gnunet-search.c:527
#, fuzzy, c-format
msgid "Error searching: %s.\n"
msgstr "Fel vid lämning av DHT.\n"
-#: src/fs/gnunet-search.c:281
+#: src/fs/gnunet-search.c:587
+#, c-format
+msgid "Conflicting options --bookmark-only and --silent.\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:594
+#, c-format
+msgid "Conflicting options --bookmark-only and --output.\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:600
+#, c-format
+msgid "An output file is mandatory for silent mode.\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:621
#, fuzzy
msgid "Could not create keyword URI from arguments.\n"
msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
-#: src/fs/gnunet-search.c:308
+#: src/fs/gnunet-search.c:629
+msgid ""
+"Invalid URI. Valid URIs for searching are keyword query URIs\n"
+"(\"gnunet://fs/ksk/...\") and namespace content URIs (\"gnunet://fs/sks/..."
+"\").\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:654
+#, fuzzy, c-format
+msgid "Could not initialize the `%s` subsystem.\n"
+msgstr "Misslyckades att initiera tjänsten \"%s\".\n"
+
+#: src/fs/gnunet-search.c:668
#, fuzzy
msgid "Could not start searching.\n"
msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
-#: src/fs/gnunet-search.c:345
-msgid "write search results to file starting with PREFIX"
+#: src/fs/gnunet-search.c:694
+msgid "set the desired LEVEL of receiver-anonymity (default: 1)"
msgstr ""
-#: src/fs/gnunet-search.c:351
-msgid "automatically terminate search after DELAY"
+#: src/fs/gnunet-search.c:700
+msgid "do not search, print only the URI that points to this search"
msgstr ""
-#: src/fs/gnunet-search.c:357
+#: src/fs/gnunet-search.c:707
+msgid ""
+"write search results for directories according to FORMAT; accepted "
+"placeholders are: %a, %f, %j, %l, %m, %n, %s; defaults to the value of --"
+"printf when omitted or to `"
+msgstr ""
+
+#: src/fs/gnunet-search.c:717
+msgid ""
+"write search results according to FORMAT; accepted placeholders are: %a, %f, "
+"%j, %l, %m, %n, %s; defaults to `"
+msgstr ""
+
+#: src/fs/gnunet-search.c:725
+msgid ""
+"when the %a or %j placeholders appear in --printf or --dir-printf, list each "
+"metadata property according to FORMAT; accepted placeholders are: %i, %l, "
+"%n, %p"
+msgstr ""
+
+#: src/fs/gnunet-search.c:734
msgid "automatically terminate search after VALUE results are found"
msgstr ""
-#: src/fs/gnunet-search.c:371
-msgid "Search GNUnet for files that were published on GNUnet"
+#: src/fs/gnunet-search.c:746
+msgid ""
+"create a GNUnet directory with search results at FILENAME (e.g. `gnunet-"
+"search --output=commons"
+msgstr ""
+
+#: src/fs/gnunet-search.c:753
+msgid "silent mode (requires the --output argument)"
+msgstr ""
+
+#: src/fs/gnunet-search.c:759
+msgid ""
+"automatically terminate search after DELAY; the value given must be a number "
+"followed by a space and a time unit, for example \"500 ms\"; without a unit "
+"it defaults to microseconds - 1000000 = 1 second; if 0 or omitted it means "
+"to wait for CTRL-C"
+msgstr ""
+
+#: src/fs/gnunet-search.c:768
+#, c-format
+msgid ""
+"be verbose (append \"%a\\n\" to the default --printf and --dir-printf "
+"arguments - ignored when these are provided by the user)"
+msgstr ""
+
+#: src/fs/gnunet-search.c:781
+msgid "Search for files that have been published on GNUnet\n"
msgstr ""
#: src/fs/gnunet-service-fs.c:371 src/fs/gnunet-service-fs.c:878
@@ -3715,68 +3762,73 @@ msgstr ""
msgid "Expected a base32-encoded public zone key\n"
msgstr ""
-#: src/gns/gnunet-bcd.c:571
+#: src/gns/gnunet-bcd.c:573
#, fuzzy, c-format
msgid "Invalid port number %u\n"
msgstr "Ogiltiga argument. Avslutar.\n"
-#: src/gns/gnunet-bcd.c:612 src/namestore/gnunet-namestore-fcfsd.c:1113
+#: src/gns/gnunet-bcd.c:614 src/namestore/gnunet-namestore-fcfsd.c:1113
#, fuzzy
msgid "Unable to set up the daemon\n"
msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
-#: src/gns/gnunet-bcd.c:635 src/namestore/gnunet-namestore-fcfsd.c:987
+#: src/gns/gnunet-bcd.c:637 src/namestore/gnunet-namestore-fcfsd.c:987
#, fuzzy
msgid "Failed to start HTTP server\n"
msgstr "Misslyckades att starta samling.\n"
-#: src/gns/gnunet-bcd.c:658
+#: src/gns/gnunet-bcd.c:660
msgid "Run HTTP server on port PORT (default is 8888)"
msgstr ""
-#: src/gns/gnunet-bcd.c:667
+#: src/gns/gnunet-bcd.c:669
msgid "GNUnet HTTP server to create business cards"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:241
+#: src/gns/gnunet-dns2gns.c:298
#, 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:315
+#: src/gns/gnunet-dns2gns.c:379
#, fuzzy
msgid "Failed to parse DNS response!\n"
msgstr "Misslyckades att skicka HTTP-begäran till värd \"%s\": %s\n"
-#: src/gns/gnunet-dns2gns.c:452
+#: src/gns/gnunet-dns2gns.c:453
+#, c-format
+msgid "VPN returned empty result for `%s'\n"
+msgstr ""
+
+#: src/gns/gnunet-dns2gns.c:655
#, 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:468
+#: src/gns/gnunet-dns2gns.c:671
#, 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:476
+#: src/gns/gnunet-dns2gns.c:679
#, 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:637
+#: src/gns/gnunet-dns2gns.c:840
#, fuzzy
msgid "No DNS server specified!\n"
msgstr "Inga nyckelord angivna!\n"
-#: src/gns/gnunet-dns2gns.c:786
+#: src/gns/gnunet-dns2gns.c:995
msgid "IP of recursive DNS resolver to use (required)"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:792
+#: src/gns/gnunet-dns2gns.c:1001
msgid "UDP port to listen on for inbound DNS requests; default: 2853"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:809
+#: src/gns/gnunet-dns2gns.c:1018
msgid "GNUnet DNS-to-GNS proxy (a DNS server)"
msgstr ""
@@ -3958,19 +4010,19 @@ msgstr ""
msgid "GNUnet GNS resolver tool"
msgstr "Spåra GNUnets nätverkstopologi."
-#: src/gns/gnunet-service-gns.c:505
+#: src/gns/gnunet-service-gns.c:501
#, fuzzy
msgid "Properly base32-encoded public key required"
msgstr "Ogiltigt argument: \"%s\"\n"
-#: src/gns/gnunet-service-gns.c:541
+#: src/gns/gnunet-service-gns.c:537
#, fuzzy
msgid "Failed to connect to the namecache!\n"
msgstr "Misslyckades att ansluta till gnunetd.\n"
-#: src/gns/gnunet-service-gns.c:560
-#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442
-#: src/zonemaster/gnunet-service-zonemaster.c:885
+#: src/gns/gnunet-service-gns.c:556
+#: src/zonemaster/gnunet-service-zonemaster-monitor.c:421
+#: src/zonemaster/gnunet-service-zonemaster.c:870
#, fuzzy
msgid "Could not connect to DHT!\n"
msgstr "Kunde inte ansluta till gnunetd.\n"
@@ -3984,95 +4036,98 @@ msgstr ""
msgid "Failed to connect to the DNS service!\n"
msgstr "Misslyckades att ansluta till gnunetd.\n"
-#: src/gns/gnunet-service-gns_resolver.c:706
+#: src/gns/gnunet-service-gns_resolver.c:659
#, c-format
msgid "Protocol `%s' unknown, skipping labels.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:718
+#: src/gns/gnunet-service-gns_resolver.c:671
#, c-format
msgid "Service `%s' unknown for protocol `%s', trying as number.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:724
+#: src/gns/gnunet-service-gns_resolver.c:677
#, c-format
msgid "Service `%s' not a port, skipping service labels.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:938
+#: src/gns/gnunet-service-gns_resolver.c:891
#, 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:1129
+#: src/gns/gnunet-service-gns_resolver.c:1082
#, c-format
msgid "Skipping record of unsupported type %d\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1447
-#, c-format
-msgid "VPN returned empty result for `%s'\n"
-msgstr ""
-
-#: src/gns/gnunet-service-gns_resolver.c:1919
+#: src/gns/gnunet-service-gns_resolver.c:1859
#, c-format
msgid "Name `%s' cannot be converted to IDNA."
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1934
+#: src/gns/gnunet-service-gns_resolver.c:1874
#, c-format
msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1979
+#: src/gns/gnunet-service-gns_resolver.c:1914
#, 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:2406
+#: src/gns/gnunet-service-gns_resolver.c:2312
+msgid "Unable to process critical delegation record\n"
+msgstr ""
+
+#: src/gns/gnunet-service-gns_resolver.c:2317
msgid "GNS lookup recursion failed (no delegation record found)\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2429
+#: src/gns/gnunet-service-gns_resolver.c:2340
#, 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:2594
+#: src/gns/gnunet-service-gns_resolver.c:2505
#, c-format
msgid "GNS namecache returned empty result for `%s'\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2734
+#: src/gns/gnunet-service-gns_resolver.c:2652
#, c-format
msgid "Zone %s was revoked, resolution fails\n"
msgstr ""
-#: src/gns/plugin_gnsrecord_gns.c:174
+#: src/gns/plugin_gnsrecord_gns.c:136
+msgid "This is a memento of an older block for internal maintenance."
+msgstr ""
+
+#: src/gns/plugin_gnsrecord_gns.c:175
#, fuzzy, c-format
msgid "Unable to parse zone key record `%s'\n"
msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
-#: src/gns/plugin_gnsrecord_gns.c:187
+#: src/gns/plugin_gnsrecord_gns.c:188
msgid "Record type does not match parsed record type\n"
msgstr ""
-#: src/gns/plugin_gnsrecord_gns.c:213
+#: src/gns/plugin_gnsrecord_gns.c:211
#, 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:229
+#: src/gns/plugin_gnsrecord_gns.c:227
#, fuzzy, c-format
msgid "Failed to serialize GNS2DNS record with value `%s': Not a DNS name.\n"
msgstr "Kunde inte tolka konfigurationsfil \"%s\".\n"
-#: src/gns/plugin_gnsrecord_gns.c:253
+#: src/gns/plugin_gnsrecord_gns.c:251
#, 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:285
+#: src/gns/plugin_gnsrecord_gns.c:283
#, fuzzy, c-format
msgid "Unable to parse BOX record string `%s'\n"
msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
@@ -4082,6 +4137,34 @@ msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
msgid "Gns REST API initialized\n"
msgstr " Anslutning misslyckades\n"
+#: src/gnsrecord/gnsrecord_misc.c:448
+msgid "Zone delegation record not allowed in apex."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:456
+msgid "Zone delegation record set contains mutually exclusive records."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:466
+msgid "Multiple REDIRECT records."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:475 src/gnsrecord/gnsrecord_misc.c:501
+msgid "Redirection record set conains mutually exclusive records."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:482
+msgid "Redirection records not allowed in apex."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:493
+msgid "Redirection records not allowed in apex.."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:515
+msgid "Mutually exclusive records."
+msgstr ""
+
#: src/gnsrecord/plugin_gnsrecord_dns.c:367
#, fuzzy, c-format
msgid "Unable to parse IPv4 address `%s'\n"
@@ -4328,7 +4411,7 @@ msgid "# hostlist downloads initiated"
msgstr ""
#: src/hostlist/gnunet-daemon-hostlist_client.c:1144
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1728
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1732
msgid "# milliseconds between hostlist downloads"
msgstr ""
@@ -4387,21 +4470,21 @@ msgstr ""
msgid "# hostlist URIs written to file"
msgstr ""
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1657
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1661
#: src/transport/plugin_transport_http_client.c:2300
#, c-format
msgid "Invalid proxy type: `%s', disabling proxy! Check configuration!\n"
msgstr ""
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1686
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1690
msgid "Learning is enabled on this peer\n"
msgstr ""
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1699
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1703
msgid "Learning is not enabled on this peer\n"
msgstr ""
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1713
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1717
#, c-format
msgid ""
"Since learning is not enabled on this peer, hostlist file `%s' was removed\n"
@@ -4592,49 +4675,49 @@ msgstr ""
msgid "Maintain egos"
msgstr ""
-#: src/identity/gnunet-service-identity.c:503
+#: src/identity/gnunet-service-identity.c:502
msgid "no default known"
msgstr ""
-#: src/identity/gnunet-service-identity.c:528
+#: src/identity/gnunet-service-identity.c:527
msgid "default configured, but ego unknown (internal error)"
msgstr ""
-#: src/identity/gnunet-service-identity.c:621
-#: src/identity/gnunet-service-identity.c:896
-#: src/identity/gnunet-service-identity.c:1016
+#: src/identity/gnunet-service-identity.c:620
+#: src/identity/gnunet-service-identity.c:895
+#: src/identity/gnunet-service-identity.c:1015
#, 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:631
+#: src/identity/gnunet-service-identity.c:630
msgid "Unknown ego specified for service (internal error)"
msgstr ""
-#: src/identity/gnunet-service-identity.c:725
+#: src/identity/gnunet-service-identity.c:724
msgid "identifier already in use for another ego"
msgstr ""
-#: src/identity/gnunet-service-identity.c:872
+#: src/identity/gnunet-service-identity.c:871
msgid "target name already exists"
msgstr ""
-#: src/identity/gnunet-service-identity.c:914
-#: src/identity/gnunet-service-identity.c:1033
+#: src/identity/gnunet-service-identity.c:913
+#: src/identity/gnunet-service-identity.c:1032
msgid "no matching ego found"
msgstr ""
-#: src/identity/gnunet-service-identity.c:1131
+#: src/identity/gnunet-service-identity.c:1130
#, 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:1189
+#: src/identity/gnunet-service-identity.c:1188
#, 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:1198
+#: src/identity/gnunet-service-identity.c:1197
#, fuzzy, c-format
msgid "Failed to create directory `%s' for storing egos\n"
msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
@@ -4675,7 +4758,7 @@ msgstr "Kunde inte köra \"%s\": %s\n"
msgid "No records found for `%s'"
msgstr "%d filer hittades i katalog.\n"
-#: src/namecache/gnunet-namecache.c:119 src/namestore/gnunet-namestore.c:459
+#: src/namecache/gnunet-namecache.c:119 src/namestore/gnunet-namestore.c:469
#, c-format
msgid "\tCorrupt or unsupported record of type %u\n"
msgstr ""
@@ -4695,7 +4778,7 @@ msgstr "Ogiltigt argument: \"%s\"\n"
msgid "You must specify a name\n"
msgstr "Du måste ange en mottagare!\n"
-#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1641
+#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1591
msgid "name of the record to add/delete/display"
msgstr ""
@@ -4704,7 +4787,7 @@ msgstr ""
msgid "specifies the public key of the zone to look in"
msgstr "ange prioritet för innehållet"
-#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1702
+#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1652
#, fuzzy
msgid "GNUnet zone manipulation tool"
msgstr "GNUnet-konfiguration"
@@ -4852,146 +4935,119 @@ msgstr ""
msgid "GNU Name System First-Come-First-Served name registration service"
msgstr ""
-#: src/namestore/gnunet-namestore.c:334
+#: src/namestore/gnunet-namestore.c:340
#, fuzzy, c-format
msgid "Adding record failed: %s\n"
msgstr ""
"\n"
"Fel vid uppladdning av fil: %s\n"
-#: src/namestore/gnunet-namestore.c:362
+#: src/namestore/gnunet-namestore.c:368
#, 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:369
+#: src/namestore/gnunet-namestore.c:375
#, fuzzy, c-format
msgid "Deleting record failed%s%s\n"
msgstr ""
"\n"
"Fel vid uppladdning av fil: %s\n"
-#: src/namestore/gnunet-namestore.c:656
-#, c-format
-msgid "A %s record exists already under `%s', no other records can be added.\n"
-msgstr ""
-
#: src/namestore/gnunet-namestore.c:668
#, c-format
msgid ""
-"A zone key record exists already under `%s', no other records can be added.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:680
-#, c-format
-msgid ""
"A SOA record exists already under `%s', cannot add a second SOA to the same "
"zone.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:696
-#, c-format
-msgid "Records already exist under `%s', cannot add `%s' record.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:711
-#, c-format
-msgid "Records already exist under `%s', cannot add record.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:726
-#, c-format
-msgid ""
-"Non-GNS2DNS records already exist under `%s', cannot add GNS2DNS record.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:846
+#: src/namestore/gnunet-namestore.c:789
#, c-format
msgid "There are no records under label `%s' that could be deleted.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:889
+#: src/namestore/gnunet-namestore.c:832
#, c-format
msgid ""
"There are no records under label `%s' that match the request for deletion.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:970
+#: src/namestore/gnunet-namestore.c:920
#, 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:993
+#: src/namestore/gnunet-namestore.c:943
#, c-format
msgid "No options given\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1014 src/namestore/gnunet-namestore.c:1066
-#: src/namestore/gnunet-namestore.c:1076 src/namestore/gnunet-namestore.c:1105
-#: src/namestore/gnunet-namestore.c:1126 src/namestore/gnunet-namestore.c:1153
-#: src/namestore/gnunet-namestore.c:1230
+#: src/namestore/gnunet-namestore.c:964 src/namestore/gnunet-namestore.c:1016
+#: src/namestore/gnunet-namestore.c:1026 src/namestore/gnunet-namestore.c:1055
+#: src/namestore/gnunet-namestore.c:1076 src/namestore/gnunet-namestore.c:1103
+#: src/namestore/gnunet-namestore.c:1180
#, fuzzy, c-format
msgid "Missing option `%s' for operation `%s'\n"
msgstr "Konfigurationsfil \"%s\" skapad.\n"
-#: src/namestore/gnunet-namestore.c:1016
+#: src/namestore/gnunet-namestore.c:966
msgid "replace"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1045
+#: src/namestore/gnunet-namestore.c:995
#, fuzzy, c-format
msgid "Invalid nick `%s'\n"
msgstr "Ogiltiga argument: "
-#: src/namestore/gnunet-namestore.c:1068 src/namestore/gnunet-namestore.c:1078
-#: src/namestore/gnunet-namestore.c:1107 src/namestore/gnunet-namestore.c:1128
-#: src/namestore/gnunet-namestore.c:1232
+#: src/namestore/gnunet-namestore.c:1018 src/namestore/gnunet-namestore.c:1028
+#: src/namestore/gnunet-namestore.c:1057 src/namestore/gnunet-namestore.c:1078
+#: src/namestore/gnunet-namestore.c:1182
msgid "add"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1086
+#: src/namestore/gnunet-namestore.c:1036
#, fuzzy, c-format
msgid "Unsupported type `%s'\n"
msgstr "Kommando \"%s\" stöds ej. Avbryter.\n"
-#: src/namestore/gnunet-namestore.c:1096
+#: src/namestore/gnunet-namestore.c:1046
#, c-format
msgid "For DNS record types `SRV', `TLSA' and `OPENPGPKEY'"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1116
+#: src/namestore/gnunet-namestore.c:1066
#, 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:1135 src/namestore/gnunet-namestore.c:1239
+#: src/namestore/gnunet-namestore.c:1085 src/namestore/gnunet-namestore.c:1189
#, fuzzy, c-format
msgid "Invalid time format `%s'\n"
msgstr "Ogiltigt format för IP: \"%s\"\n"
-#: src/namestore/gnunet-namestore.c:1155
+#: src/namestore/gnunet-namestore.c:1105
msgid "del"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1197
+#: src/namestore/gnunet-namestore.c:1147
#, fuzzy, c-format
msgid "Invalid public key for reverse lookup `%s'\n"
msgstr "Ogiltigt argument: \"%s\"\n"
-#: src/namestore/gnunet-namestore.c:1222
+#: src/namestore/gnunet-namestore.c:1172
#: src/peerinfo-tool/gnunet-peerinfo.c:737
#, fuzzy, c-format
msgid "Invalid URI `%s'\n"
msgstr "Ogiltiga argument: "
-#: src/namestore/gnunet-namestore.c:1292
+#: src/namestore/gnunet-namestore.c:1242
#, c-format
msgid "Label `%s' contains `.' which is not allowed\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1342
+#: src/namestore/gnunet-namestore.c:1292
#, c-format
msgid ""
"No default identity configured for `namestore' subsystem\n"
@@ -4999,111 +5055,116 @@ msgid ""
"Run gnunet-identity -d to get a list of choices for $NAME\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1407
+#: src/namestore/gnunet-namestore.c:1357
#, fuzzy, c-format
msgid "Superfluous command line arguments (starting with `%s') ignored\n"
msgstr "Onödiga argument (ignorerade).\n"
-#: src/namestore/gnunet-namestore.c:1436
+#: src/namestore/gnunet-namestore.c:1386
#, fuzzy, c-format
msgid "Cannot connect to identity service\n"
msgstr "Kunde inte ansluta till gnunetd.\n"
-#: src/namestore/gnunet-namestore.c:1483
+#: src/namestore/gnunet-namestore.c:1433
msgid "Empty record line argument is not allowed.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1495
+#: src/namestore/gnunet-namestore.c:1445
#, c-format
msgid "Invalid expiration time `%s' (must be without unit)\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1507 src/namestore/gnunet-namestore.c:1523
-#: src/namestore/gnunet-namestore.c:1540
+#: src/namestore/gnunet-namestore.c:1457 src/namestore/gnunet-namestore.c:1473
+#: src/namestore/gnunet-namestore.c:1490
#, fuzzy, c-format
msgid "Missing entries in record line `%s'.\n"
msgstr "Kunde inte slå upp \"%s\": %s\n"
-#: src/namestore/gnunet-namestore.c:1515
+#: src/namestore/gnunet-namestore.c:1465
#, fuzzy, c-format
msgid "Unknown record type `%s'\n"
msgstr "Okänd operation \"%s\"\n"
-#: src/namestore/gnunet-namestore.c:1553
+#: src/namestore/gnunet-namestore.c:1503
#, 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:1610
+#: src/namestore/gnunet-namestore.c:1560
msgid "add record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1613
+#: src/namestore/gnunet-namestore.c:1563
msgid "delete record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1617
+#: src/namestore/gnunet-namestore.c:1567
msgid "display records"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1624
+#: src/namestore/gnunet-namestore.c:1574
msgid ""
"expiration time for record to use (for adding only), \"never\" is possible"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1630
+#: src/namestore/gnunet-namestore.c:1580
#, fuzzy
msgid "set the desired nick name for the zone"
msgstr "Skriv ut information om GNUnets motparter."
-#: src/namestore/gnunet-namestore.c:1635
+#: src/namestore/gnunet-namestore.c:1585
#, fuzzy
msgid "monitor changes in the namestore"
msgstr "Misslyckades att ansluta till gnunetd.\n"
-#: src/namestore/gnunet-namestore.c:1647
+#: src/namestore/gnunet-namestore.c:1597
#, fuzzy
msgid "determine our name for the given PKEY"
msgstr "Skriv ut information om GNUnets motparter."
-#: src/namestore/gnunet-namestore.c:1654
+#: src/namestore/gnunet-namestore.c:1604
msgid ""
"set record set to values given by (possibly multiple) RECORDLINES; can be "
"specified multiple times"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1660
+#: src/namestore/gnunet-namestore.c:1610
msgid "type of the record to add/delete/display"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1665
+#: src/namestore/gnunet-namestore.c:1615
msgid "URI to import into our zone"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1671
+#: src/namestore/gnunet-namestore.c:1621
msgid "value of the record to add/delete"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1675
+#: src/namestore/gnunet-namestore.c:1625
msgid "create or list public record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1681
+#: src/namestore/gnunet-namestore.c:1631
msgid ""
"create shadow record (only valid if all other records of the same type have "
"expired"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1687
+#: src/namestore/gnunet-namestore.c:1637
#, fuzzy
msgid "name of the ego controlling the zone"
msgstr "Visa värde av alternativet"
-#: src/namestore/gnunet-service-namestore.c:871
+#: src/namestore/gnunet-service-namestore.c:879
#, 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-service-namestore.c:1668
+#, fuzzy
+msgid "Store failed"
+msgstr "gnunet-update misslyckades!"
+
#: src/namestore/gnunet-zoneimport.c:1847
msgid "size to use for the main hash map"
msgstr ""
@@ -5112,10 +5173,6 @@ msgstr ""
msgid "minimum expiration time we assume for imported records"
msgstr ""
-#: src/namestore/namestore_api.c:373
-msgid "Namestore failed to store record\n"
-msgstr ""
-
#: src/namestore/plugin_namestore_flat.c:195
#, c-format
msgid "File too big to map: %llu bytes.\n"
@@ -5714,6 +5771,51 @@ msgstr "Misslyckades att initiera tjänsten \"%s\".\n"
msgid "Daemon to run to perform IP protocol translation to GNUnet"
msgstr ""
+#: src/reclaim/gnunet-did.c:209
+#, fuzzy, c-format
+msgid "Invalid DID `%s'\n"
+msgstr "Ogiltiga argument: "
+
+#: src/reclaim/gnunet-did.c:835
+msgid "Create a DID Document and display its DID"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:840
+msgid "Get the DID Document associated with the given DID"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:844
+msgid "Show the DID for a given ego"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:849
+msgid "Remove the DID"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:853 src/reclaim/gnunet-did.c:857
+msgid "Replace the DID Document."
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:863
+msgid "The Decentralized Identity (DID)"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:869
+msgid "The DID Document to store in GNUNET"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:874
+msgid "The name of the EGO"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:880
+msgid "The time until the DID Document is going to expire (e.g. 5d)"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:889
+msgid "Manage Decentralized Identities (DIDs)"
+msgstr ""
+
#: src/reclaim/gnunet-reclaim.c:802
#, fuzzy, c-format
msgid "Ego is required\n"
@@ -6611,17 +6713,17 @@ msgid ""
"free topology cannot be more than %u. Given `%s = %llu'"
msgstr ""
-#: src/testbed/testbed_api_topology.c:1033 src/testing/testing.c:2643
+#: src/testbed/testbed_api_topology.c:1033 src/testing/testing.c:2657
#, fuzzy, c-format
msgid "Topology file %s not found\n"
msgstr "\"%s\" misslyckades: tabell hittades inte!\n"
-#: src/testbed/testbed_api_topology.c:1041 src/testing/testing.c:2651
+#: src/testbed/testbed_api_topology.c:1041 src/testing/testing.c:2665
#, c-format
msgid "Topology file %s has no data\n"
msgstr ""
-#: src/testbed/testbed_api_topology.c:1049 src/testing/testing.c:2659
+#: src/testbed/testbed_api_topology.c:1049 src/testing/testing.c:2673
#, c-format
msgid "Topology file %s cannot be read\n"
msgstr ""
@@ -6828,7 +6930,7 @@ msgstr ""
#: src/transport/gnunet-communicator-tcp.c:3338
#: src/transport/gnunet-communicator-udp.c:3856
-#: src/transport/gnunet-service-tng.c:10512
+#: src/transport/gnunet-service-tng.c:10623
#: src/transport/gnunet-service-transport.c:2627
#, fuzzy
msgid "Transport service is lacking key configuration settings. Exiting.\n"
@@ -8075,58 +8177,58 @@ msgstr ""
msgid "Need a non-empty hostname for service `%s'.\n"
msgstr ""
-#: src/util/common_logging.c:626 src/util/common_logging.c:665
+#: src/util/common_logging.c:648 src/util/common_logging.c:687
#, c-format
msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n"
msgstr ""
-#: src/util/common_logging.c:904
+#: src/util/common_logging.c:926
#, c-format
msgid "Message `%.*s' repeated %u times in the last %s\n"
msgstr ""
-#: src/util/common_logging.c:1108
+#: src/util/common_logging.c:1131
msgid "ERROR"
msgstr "FEL"
-#: src/util/common_logging.c:1110
+#: src/util/common_logging.c:1133
msgid "WARNING"
msgstr "VARNING"
-#: src/util/common_logging.c:1112
+#: src/util/common_logging.c:1135
msgid "MESSAGE"
msgstr "MEDDELANDE"
-#: src/util/common_logging.c:1114
+#: src/util/common_logging.c:1137
msgid "INFO"
msgstr "INFO"
-#: src/util/common_logging.c:1116
+#: src/util/common_logging.c:1139
msgid "DEBUG"
msgstr "FELSÖKNING"
-#: src/util/common_logging.c:1118
+#: src/util/common_logging.c:1141
msgid "NONE"
msgstr ""
-#: src/util/common_logging.c:1119
+#: src/util/common_logging.c:1142
msgid "INVALID"
msgstr ""
-#: src/util/common_logging.c:1400
+#: src/util/common_logging.c:1423
msgid "unknown address"
msgstr ""
-#: src/util/common_logging.c:1445
+#: src/util/common_logging.c:1468
msgid "invalid address"
msgstr ""
-#: src/util/common_logging.c:1464
+#: src/util/common_logging.c:1487
#, fuzzy, c-format
msgid "Configuration fails to specify option `%s' in section `%s'!\n"
msgstr "Konfigurationsfil \"%s\" skapad.\n"
-#: src/util/common_logging.c:1487
+#: src/util/common_logging.c:1510
#, fuzzy, c-format
msgid ""
"Configuration specifies invalid value for option `%s' in section `%s': %s\n"
@@ -8273,17 +8375,17 @@ msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
msgid "Could not bind to any port: %s\n"
msgstr "Kunde inte köra \"%s\": %s\n"
-#: src/util/dnsstub.c:344
+#: src/util/dnsstub.c:370
#, c-format
-msgid "Received DNS response that is too small (%u bytes)"
+msgid "Received DNS response that is too small (%u bytes)\n"
msgstr ""
-#: src/util/dnsstub.c:482
+#: src/util/dnsstub.c:508
#, 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:487
+#: src/util/dnsstub.c:513
#, fuzzy, c-format
msgid "Sent DNS request to %s\n"
msgstr "Misslyckades att skicka HTTP-begäran till värd \"%s\": %s\n"
@@ -8370,83 +8472,83 @@ msgstr ""
"Argument som är obligatoriska för långa flaggor är också obligatoriska för "
"korta flaggor.\n"
-#: src/util/getopt_helpers.c:196
+#: src/util/getopt_helpers.c:197
msgid "print this help"
msgstr "skriv ut denna hjälp"
-#: src/util/getopt_helpers.c:261
+#: src/util/getopt_helpers.c:262
msgid "be verbose"
msgstr "var informativ"
-#: src/util/getopt_helpers.c:377
+#: src/util/getopt_helpers.c:378
msgid "configure logging to use LOGLEVEL"
msgstr ""
-#: src/util/getopt_helpers.c:444
+#: src/util/getopt_helpers.c:445
msgid "configure logging to write logs to FILENAME"
msgstr ""
-#: src/util/getopt_helpers.c:461
+#: src/util/getopt_helpers.c:462
#, fuzzy
msgid "use configuration file FILENAME"
msgstr "skriv ut ett värde från konfigurationsfilen till standard ut"
-#: src/util/getopt_helpers.c:497 src/util/getopt_helpers.c:811
-#: src/util/getopt_helpers.c:867
+#: src/util/getopt_helpers.c:498 src/util/getopt_helpers.c:812
+#: src/util/getopt_helpers.c:868
#, 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:569
+#: src/util/getopt_helpers.c:570
#, fuzzy, c-format
msgid ""
"You must pass a relative time (optionally with sign) to the `%s' option.\n"
msgstr "Du måste skicka med ett nummer till flaggan \"%s\".\n"
-#: src/util/getopt_helpers.c:576
+#: src/util/getopt_helpers.c:577
#, c-format
msgid "Value given for time travel `%s' option is too big.\n"
msgstr ""
-#: src/util/getopt_helpers.c:594
+#: src/util/getopt_helpers.c:595
msgid "[+/-]MICROSECONDS"
msgstr ""
-#: src/util/getopt_helpers.c:596
+#: src/util/getopt_helpers.c:597
msgid "modify system time by given offset (for debugging/testing only)"
msgstr ""
-#: src/util/getopt_helpers.c:630
+#: src/util/getopt_helpers.c:631
#, 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:684
+#: src/util/getopt_helpers.c:685
#, 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:741
+#: src/util/getopt_helpers.c:742
#, fuzzy, c-format
msgid "You must pass a timestamp to the `%s' option.\n"
msgstr "Du måste skicka med ett nummer till flaggan \"%s\".\n"
-#: src/util/getopt_helpers.c:748
+#: src/util/getopt_helpers.c:749
#, c-format
msgid "The maximum precision allowed for timestamps is seconds.\n"
msgstr ""
-#: src/util/getopt_helpers.c:804
+#: src/util/getopt_helpers.c:805
#, c-format
msgid "Your input for the '%s' option has to be a non negative number\n"
msgstr ""
-#: src/util/getopt_helpers.c:874
+#: src/util/getopt_helpers.c:875
#, 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:952
+#: src/util/getopt_helpers.c:953
#, c-format
msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n"
msgstr ""
@@ -8480,7 +8582,7 @@ msgstr ""
msgid "Manipulate GNUnet configuration files"
msgstr "skriv ut ett värde från konfigurationsfilen till standard ut"
-#: src/util/gnunet-crypto-tvg.c:1072
+#: src/util/gnunet-crypto-tvg.c:1483
msgid "verify a test vector from stdin"
msgstr ""
@@ -8734,7 +8836,7 @@ msgstr "Fel vid skapandet av användare"
msgid "Unable to shorten unix path `%s' while keeping name unique\n"
msgstr ""
-#: src/util/network.c:1306
+#: src/util/network.c:1307
#, c-format
msgid ""
"Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n"
@@ -8864,77 +8966,77 @@ msgstr ""
msgid "Character sets requested were `%s'->`%s'\n"
msgstr ""
-#: src/util/strings.c:487
+#: src/util/strings.c:514
msgid "Failed to expand `$HOME': environment variable `HOME' not set"
msgstr ""
-#: src/util/strings.c:1023
+#: src/util/strings.c:1050
msgid "IPv6 address did not start with `['\n"
msgstr ""
-#: src/util/strings.c:1031
+#: src/util/strings.c:1058
msgid "IPv6 address did contain ':' to separate port number\n"
msgstr ""
-#: src/util/strings.c:1038
+#: src/util/strings.c:1065
msgid "IPv6 address did contain ']' before ':' to separate port number\n"
msgstr ""
-#: src/util/strings.c:1046
+#: src/util/strings.c:1073
msgid "IPv6 address did contain a valid port number after the last ':'\n"
msgstr ""
-#: src/util/strings.c:1055
+#: src/util/strings.c:1082
#, fuzzy, c-format
msgid "Invalid IPv6 address `%s': %s\n"
msgstr "Ogiltigt svar på \"%s\".\n"
-#: src/util/strings.c:1237 src/util/strings.c:1248
+#: src/util/strings.c:1264 src/util/strings.c:1275
msgid "Port not in range\n"
msgstr ""
-#: src/util/strings.c:1257
+#: src/util/strings.c:1284
#, fuzzy, c-format
msgid "Malformed port policy `%s'\n"
msgstr "Misslyckades att starta samling.\n"
-#: src/util/strings.c:1328 src/util/strings.c:1357 src/util/strings.c:1404
-#: src/util/strings.c:1424
+#: src/util/strings.c:1355 src/util/strings.c:1384 src/util/strings.c:1431
+#: src/util/strings.c:1451
#, c-format
msgid "Invalid format for IP: `%s'\n"
msgstr "Ogiltigt format för IP: \"%s\"\n"
-#: src/util/strings.c:1382
+#: src/util/strings.c:1409
#, 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:1433
+#: src/util/strings.c:1460
#, fuzzy, c-format
msgid "Invalid format: `%s'\n"
msgstr "Ogiltigt format för IP: \"%s\"\n"
-#: src/util/strings.c:1475
+#: src/util/strings.c:1502
#, 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:1525
+#: src/util/strings.c:1552
#, fuzzy, c-format
msgid "Wrong format `%s' for netmask\n"
msgstr "Fel format \"%s\" för nätmask: %s\n"
-#: src/util/strings.c:1556
+#: src/util/strings.c:1583
#, fuzzy, c-format
msgid "Wrong format `%s' for network\n"
msgstr "Fel format \"%s\" för nätverk: %s\n"
-#: src/util/time.c:863 src/util/time.c:891
+#: src/util/time.c:870 src/util/time.c:898
#, c-format
msgid "Failed to map `%s', cannot assure monotonic time!\n"
msgstr ""
-#: src/util/time.c:899
+#: src/util/time.c:906
#, c-format
msgid ""
"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
@@ -9118,13 +9220,29 @@ msgstr "# byte mottagna via UDP"
msgid "Setup tunnels via VPN."
msgstr ""
-#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418
-#: src/zonemaster/gnunet-service-zonemaster.c:847
+#: src/zonemaster/gnunet-service-zonemaster-monitor.c:397
+#: src/zonemaster/gnunet-service-zonemaster.c:832
#, fuzzy
msgid "Failed to connect to the namestore!\n"
msgstr "Misslyckades att ansluta till gnunetd.\n"
#, fuzzy
+#~ msgid "# items stored"
+#~ msgstr "# byte krypterade"
+
+#, fuzzy, c-format
+#~ msgid "Failed to load datacache plugin for `%s'\n"
+#~ msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
+
+#, fuzzy
+#~ msgid "# requests received"
+#~ msgstr "# byte mottogs via TCP"
+
+#, fuzzy
+#~ msgid "# proximity search requests received"
+#~ msgstr "# klartext PONG-meddelanden mottagna"
+
+#, fuzzy
#~ msgid "# requests for random value received"
#~ msgstr "# byte mottogs via TCP"
@@ -10546,10 +10664,6 @@ msgstr "Misslyckades att ansluta till gnunetd.\n"
#~ msgstr "Filen \"%s\" innehåller ingen pseudonym.\n"
#, fuzzy
-#~ msgid "gnunet-ecc failed"
-#~ msgstr "gnunet-update misslyckades!"
-
-#, fuzzy
#~ msgid ""
#~ "File `%s' does not contain a valid private key (too long, %llu bytes). "
#~ "Renaming it.\n"
diff --git a/po/vi.po b/po/vi.po
index a24e83e72..7d8ac0adf 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gnunet 0.8.0a\n"
"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2022-01-10 15:13+0100\n"
+"POT-Creation-Date: 2022-03-04 22:23+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,7 +19,7 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: LocFactoryEditor 1.7b3\n"
-#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1304
+#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1254
#, c-format
msgid "Ego `%s' not known to identity service\n"
msgstr ""
@@ -31,7 +31,7 @@ msgstr "Đối số không hợp lệ cho « %s ».\n"
#: src/abd/gnunet-abd.c:558 src/abd/gnunet-service-abd.c:1751
#: src/namestore/gnunet-namestore-fcfsd.c:1080
-#: src/namestore/gnunet-namestore.c:1001
+#: src/namestore/gnunet-namestore.c:951
#, fuzzy, c-format
msgid "Failed to connect to namestore\n"
msgstr "Không kết nối được đến trình nền gnunetd."
@@ -636,45 +636,45 @@ msgstr ""
msgid "Print information about ATS state"
msgstr "In ra thông tin về các đồng đẳng GNUnet."
-#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044
+#: src/ats/gnunet-ats-solver-eval.c:2993 src/ats/gnunet-ats-solver-eval.c:3045
#, c-format
msgid ""
"Could not load quota for network `%s': `%s', assigning default bandwidth "
"%llu\n"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3011
+#: src/ats/gnunet-ats-solver-eval.c:3012
#, c-format
msgid ""
"No outbound quota configured for network `%s', assigning default bandwidth "
"%llu\n"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3063
+#: src/ats/gnunet-ats-solver-eval.c:3064
#, c-format
msgid ""
"No outbound quota configure for network `%s', assigning default bandwidth "
"%llu\n"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3552
+#: src/ats/gnunet-ats-solver-eval.c:3553
msgid "solver to use"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3557
+#: src/ats/gnunet-ats-solver-eval.c:3558
msgid "experiment to use"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3564
+#: src/ats/gnunet-ats-solver-eval.c:3565
#, fuzzy
msgid "print logging"
msgstr "Theo dõi"
-#: src/ats/gnunet-ats-solver-eval.c:3569
+#: src/ats/gnunet-ats-solver-eval.c:3570
msgid "save logging to disk"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3574
+#: src/ats/gnunet-ats-solver-eval.c:3575
msgid "disable normalization"
msgstr ""
@@ -1576,42 +1576,7 @@ msgstr "# các thông báo phát hiện dht được nhận"
msgid "# updates to my type map"
msgstr ""
-#: src/datacache/datacache.c:117 src/datacache/datacache.c:275
-#: src/datastore/gnunet-service-datastore.c:743
-#, fuzzy
-msgid "# bytes stored"
-msgstr "# các byte trong kho dữ liệu"
-
-#: src/datacache/datacache.c:121 src/datacache/datacache.c:279
-#, fuzzy
-msgid "# items stored"
-msgstr "# các byte trong kho dữ liệu"
-
-#: src/datacache/datacache.c:185
-#, c-format
-msgid "Loading `%s' datacache plugin\n"
-msgstr ""
-
-#: src/datacache/datacache.c:203
-#, 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:297
-#, fuzzy
-msgid "# requests received"
-msgstr "# các yêu cầu get (lấy) dht được nhận"
-
-#: src/datacache/datacache.c:308
-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:329
-#, 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:527
+#: src/datacache/plugin_datacache_heap.c:555
#, fuzzy
msgid "Heap datacache running\n"
msgstr "kho dữ liệu sqlite"
@@ -1634,7 +1599,7 @@ msgstr "kho dữ liệu sqlite"
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:693
+#: src/datacache/plugin_datacache_sqlite.c:723
#: src/datastore/plugin_datastore_sqlite.c:531
#: src/namecache/plugin_namecache_sqlite.c:237
#: src/namestore/plugin_namestore_sqlite.c:273
@@ -1831,6 +1796,11 @@ msgstr ""
msgid "Could not find matching reservation"
msgstr ""
+#: src/datastore/gnunet-service-datastore.c:743
+#, fuzzy
+msgid "# bytes stored"
+msgstr "# các byte trong kho dữ liệu"
+
#: src/datastore/gnunet-service-datastore.c:758
#, c-format
msgid "Need %llu bytes more space (%llu allowed, using %llu)\n"
@@ -2023,7 +1993,7 @@ msgstr ""
#: src/datastore/plugin_datastore_sqlite.c:1337
#: src/namecache/plugin_namecache_sqlite.c:564
-#: src/namestore/plugin_namestore_sqlite.c:765
+#: src/namestore/plugin_namestore_sqlite.c:775
#, fuzzy
msgid "Sqlite database running\n"
msgstr "kho dữ liệu sqlite"
@@ -2032,56 +2002,65 @@ msgstr "kho dữ liệu sqlite"
msgid "Template database running\n"
msgstr ""
-#: src/dht/gnunet-dht-get.c:159
+#: src/dht/gnunet-dht-get.c:164
#, c-format
msgid ""
"Result %d, type %d:\n"
"%.*s\n"
msgstr ""
-#: src/dht/gnunet-dht-get.c:160
+#: src/dht/gnunet-dht-get.c:165
#, c-format
msgid "Result %d, type %d:\n"
msgstr ""
-#: src/dht/gnunet-dht-get.c:209
+#: src/dht/gnunet-dht-get.c:215
msgid "Must provide key for DHT GET!\n"
msgstr ""
-#: src/dht/gnunet-dht-get.c:217 src/dht/gnunet-dht-monitor.c:255
-#, fuzzy
+#: src/dht/gnunet-dht-get.c:223 src/dht/gnunet-dht-hello.c:119
+#: src/dht/gnunet-dht-monitor.c:255
+#, fuzzy, c-format
msgid "Failed to connect to DHT service!\n"
msgstr "Lỗi kết nối đến gnunetd.\n"
-#: src/dht/gnunet-dht-get.c:227
+#: src/dht/gnunet-dht-get.c:233
msgid "Issuing DHT GET with key"
msgstr ""
-#: src/dht/gnunet-dht-get.c:260 src/dht/gnunet-dht-monitor.c:302
+#: src/dht/gnunet-dht-get.c:269 src/dht/gnunet-dht-monitor.c:302
#: src/dht/gnunet-dht-put.c:200
msgid "the query key"
msgstr ""
-#: src/dht/gnunet-dht-get.c:266
+#: src/dht/gnunet-dht-get.c:275
msgid "how many parallel requests (replicas) to create"
msgstr ""
-#: src/dht/gnunet-dht-get.c:272 src/dht/gnunet-dht-monitor.c:308
+#: src/dht/gnunet-dht-get.c:280 src/dht/gnunet-dht-put.c:217
+msgid "use DHT's record route option"
+msgstr ""
+
+#: src/dht/gnunet-dht-get.c:286 src/dht/gnunet-dht-monitor.c:308
msgid "the type of data to look for"
msgstr ""
-#: src/dht/gnunet-dht-get.c:278
+#: src/dht/gnunet-dht-get.c:292
msgid "how long to execute this query before giving up?"
msgstr ""
-#: src/dht/gnunet-dht-get.c:284 src/dht/gnunet-dht-put.c:206
+#: src/dht/gnunet-dht-get.c:298 src/dht/gnunet-dht-put.c:206
msgid "use DHT's demultiplex everywhere option"
msgstr ""
-#: src/dht/gnunet-dht-get.c:301
+#: src/dht/gnunet-dht-get.c:315
msgid "Issue a GET request to the GNUnet DHT, prints results."
msgstr ""
+#: src/dht/gnunet-dht-hello.c:166
+msgid "Obtain HELLO from DHT or provide HELLO to DHT for bootstrapping"
+msgstr ""
+
#: src/dht/gnunet-dht-monitor.c:315
msgid "how long should the monitor command run"
msgstr ""
@@ -2121,10 +2100,6 @@ msgstr ""
msgid "how many replicas to create"
msgstr ""
-#: src/dht/gnunet-dht-put.c:217
-msgid "use DHT's record route option"
-msgstr ""
-
#: src/dht/gnunet-dht-put.c:223
msgid "the type to insert data as"
msgstr ""
@@ -2181,17 +2156,17 @@ msgstr ""
msgid "Measure quality and performance of the DHT service."
msgstr "Không thể truy cập đến dịch vụ"
-#: src/dht/plugin_block_dht.c:328
+#: src/dht/plugin_block_dht.c:404
#, 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:337
+#: src/dht/plugin_block_dht.c:413
#, c-format
msgid "Size mismatch for block with type %u\n"
msgstr ""
-#: src/dht/plugin_block_dht.c:348
+#: src/dht/plugin_block_dht.c:424
#, c-format
msgid "Block of type %u is malformed\n"
msgstr ""
@@ -2926,20 +2901,20 @@ msgstr ""
msgid "LOC URI malformed (signature failed validation)"
msgstr ""
-#: src/fs/fs_uri.c:653
+#: src/fs/fs_uri.c:652
#, fuzzy
msgid "invalid argument"
msgstr "Đối số không hợp lệ cho « %s ».\n"
-#: src/fs/fs_uri.c:665
+#: src/fs/fs_uri.c:671
msgid "Unrecognized URI type"
msgstr ""
-#: src/fs/fs_uri.c:1071 src/fs/fs_uri.c:1098
+#: src/fs/fs_uri.c:1075 src/fs/fs_uri.c:1102
msgid "No keywords specified!\n"
msgstr "Chưa ghi rõ từ khoá.\n"
-#: src/fs/fs_uri.c:1104
+#: src/fs/fs_uri.c:1108
msgid "Number of double-quotes not balanced!\n"
msgstr "Có dấu nháy kép thừa hay thiếu.\n"
@@ -3067,7 +3042,7 @@ 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:206 src/fs/gnunet-publish.c:299
-#: src/fs/gnunet-search.c:229 src/fs/gnunet-unindex.c:117
+#: src/fs/gnunet-search.c:538 src/fs/gnunet-unindex.c:117
#, fuzzy, c-format
msgid "Unexpected status: %d\n"
msgstr "Gặp sự kiện bất thường: %d\n"
@@ -3091,12 +3066,12 @@ msgid "Target filename must be specified.\n"
msgstr ""
#: src/fs/gnunet-download.c:271 src/fs/gnunet-publish.c:869
-#: src/fs/gnunet-search.c:294 src/fs/gnunet-unindex.c:154
+#: src/fs/gnunet-unindex.c:154
#, 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:318 src/fs/gnunet-search.c:334
+#: src/fs/gnunet-download.c:318
#, 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"
@@ -3105,7 +3080,7 @@ msgstr "đặt CẤP mong muốn của tình trạng nặc danh của người g
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:330 src/fs/gnunet-search.c:339
+#: src/fs/gnunet-download.c:330 src/fs/gnunet-search.c:740
msgid "only search the local peer (no P2P network search)"
msgstr ""
@@ -3365,41 +3340,114 @@ msgstr ""
msgid "Publish a file or directory on GNUnet"
msgstr ""
-#: src/fs/gnunet-search.c:130
+#: src/fs/gnunet-search.c:441
#, c-format
msgid "Failed to write directory with search results to `%s'\n"
msgstr ""
-#: src/fs/gnunet-search.c:219
+#: src/fs/gnunet-search.c:527
#, 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:281
+#: src/fs/gnunet-search.c:587
+#, c-format
+msgid "Conflicting options --bookmark-only and --silent.\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:594
+#, c-format
+msgid "Conflicting options --bookmark-only and --output.\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:600
+#, c-format
+msgid "An output file is mandatory for silent mode.\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:621
#, 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:308
+#: src/fs/gnunet-search.c:629
+msgid ""
+"Invalid URI. Valid URIs for searching are keyword query URIs\n"
+"(\"gnunet://fs/ksk/...\") and namespace content URIs (\"gnunet://fs/sks/..."
+"\").\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:654
+#, fuzzy, c-format
+msgid "Could not initialize the `%s` subsystem.\n"
+msgstr "Lỗi sơ khởi dịch vụ « %s ».\n"
+
+#: src/fs/gnunet-search.c:668
#, fuzzy
msgid "Could not start searching.\n"
msgstr "Không thể tạo miền tên.\n"
-#: src/fs/gnunet-search.c:345
-msgid "write search results to file starting with PREFIX"
+#: src/fs/gnunet-search.c:694
+#, fuzzy
+msgid "set the desired LEVEL of receiver-anonymity (default: 1)"
+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-search.c:700
+msgid "do not search, print only the URI that points to this search"
+msgstr ""
+
+#: src/fs/gnunet-search.c:707
+msgid ""
+"write search results for directories according to FORMAT; accepted "
+"placeholders are: %a, %f, %j, %l, %m, %n, %s; defaults to the value of --"
+"printf when omitted or to `"
msgstr ""
-#: src/fs/gnunet-search.c:351
-msgid "automatically terminate search after DELAY"
+#: src/fs/gnunet-search.c:717
+msgid ""
+"write search results according to FORMAT; accepted placeholders are: %a, %f, "
+"%j, %l, %m, %n, %s; defaults to `"
msgstr ""
-#: src/fs/gnunet-search.c:357
+#: src/fs/gnunet-search.c:725
+msgid ""
+"when the %a or %j placeholders appear in --printf or --dir-printf, list each "
+"metadata property according to FORMAT; accepted placeholders are: %i, %l, "
+"%n, %p"
+msgstr ""
+
+#: src/fs/gnunet-search.c:734
msgid "automatically terminate search after VALUE results are found"
msgstr ""
-#: src/fs/gnunet-search.c:371
+#: src/fs/gnunet-search.c:746
+msgid ""
+"create a GNUnet directory with search results at FILENAME (e.g. `gnunet-"
+"search --output=commons"
+msgstr ""
+
+#: src/fs/gnunet-search.c:753
+msgid "silent mode (requires the --output argument)"
+msgstr ""
+
+#: src/fs/gnunet-search.c:759
+msgid ""
+"automatically terminate search after DELAY; the value given must be a number "
+"followed by a space and a time unit, for example \"500 ms\"; without a unit "
+"it defaults to microseconds - 1000000 = 1 second; if 0 or omitted it means "
+"to wait for CTRL-C"
+msgstr ""
+
+#: src/fs/gnunet-search.c:768
+#, c-format
+msgid ""
+"be verbose (append \"%a\\n\" to the default --printf and --dir-printf "
+"arguments - ignored when these are provided by the user)"
+msgstr ""
+
+#: src/fs/gnunet-search.c:781
#, fuzzy
-msgid "Search GNUnet for files that were published on GNUnet"
+msgid "Search for files that have been published on GNUnet\n"
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:371 src/fs/gnunet-service-fs.c:878
@@ -3760,68 +3808,73 @@ msgstr ""
msgid "Expected a base32-encoded public zone key\n"
msgstr ""
-#: src/gns/gnunet-bcd.c:571
+#: src/gns/gnunet-bcd.c:573
#, fuzzy, c-format
msgid "Invalid port number %u\n"
msgstr "Đối số không hợp lệ cho « %s ».\n"
-#: src/gns/gnunet-bcd.c:612 src/namestore/gnunet-namestore-fcfsd.c:1113
+#: src/gns/gnunet-bcd.c:614 src/namestore/gnunet-namestore-fcfsd.c:1113
#, fuzzy
msgid "Unable to set up the daemon\n"
msgstr "Không thể tạo tài khoản người dùng cho trình nền."
-#: src/gns/gnunet-bcd.c:635 src/namestore/gnunet-namestore-fcfsd.c:987
+#: src/gns/gnunet-bcd.c:637 src/namestore/gnunet-namestore-fcfsd.c:987
#, fuzzy
msgid "Failed to start HTTP server\n"
msgstr "Lỗi bắt đầu thu thập.\n"
-#: src/gns/gnunet-bcd.c:658
+#: src/gns/gnunet-bcd.c:660
msgid "Run HTTP server on port PORT (default is 8888)"
msgstr ""
-#: src/gns/gnunet-bcd.c:667
+#: src/gns/gnunet-bcd.c:669
msgid "GNUnet HTTP server to create business cards"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:241
+#: src/gns/gnunet-dns2gns.c:298
#, 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:315
+#: src/gns/gnunet-dns2gns.c:379
#, 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-dns2gns.c:452
+#: src/gns/gnunet-dns2gns.c:453
+#, c-format
+msgid "VPN returned empty result for `%s'\n"
+msgstr ""
+
+#: src/gns/gnunet-dns2gns.c:655
#, c-format
msgid "Cannot parse DNS request from %s\n"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:468
+#: src/gns/gnunet-dns2gns.c:671
#, 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:476
+#: src/gns/gnunet-dns2gns.c:679
#, 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:637
+#: src/gns/gnunet-dns2gns.c:840
#, fuzzy
msgid "No DNS server specified!\n"
msgstr "Chưa ghi rõ từ khoá.\n"
-#: src/gns/gnunet-dns2gns.c:786
+#: src/gns/gnunet-dns2gns.c:995
msgid "IP of recursive DNS resolver to use (required)"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:792
+#: src/gns/gnunet-dns2gns.c:1001
msgid "UDP port to listen on for inbound DNS requests; default: 2853"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:809
+#: src/gns/gnunet-dns2gns.c:1018
msgid "GNUnet DNS-to-GNS proxy (a DNS server)"
msgstr ""
@@ -4003,19 +4056,19 @@ msgstr ""
msgid "GNUnet GNS resolver tool"
msgstr "Bản ghi lỗi GNUnet"
-#: src/gns/gnunet-service-gns.c:505
+#: src/gns/gnunet-service-gns.c:501
#, 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:541
+#: src/gns/gnunet-service-gns.c:537
#, 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:560
-#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442
-#: src/zonemaster/gnunet-service-zonemaster.c:885
+#: src/gns/gnunet-service-gns.c:556
+#: src/zonemaster/gnunet-service-zonemaster-monitor.c:421
+#: src/zonemaster/gnunet-service-zonemaster.c:870
#, fuzzy
msgid "Could not connect to DHT!\n"
msgstr "Không thể kết nối tới %s:%u: %s\n"
@@ -4030,95 +4083,98 @@ msgstr "Gặp lỗi khi chuyển đổi các đối số sang URI.\n"
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:706
+#: src/gns/gnunet-service-gns_resolver.c:659
#, c-format
msgid "Protocol `%s' unknown, skipping labels.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:718
+#: src/gns/gnunet-service-gns_resolver.c:671
#, c-format
msgid "Service `%s' unknown for protocol `%s', trying as number.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:724
+#: src/gns/gnunet-service-gns_resolver.c:677
#, c-format
msgid "Service `%s' not a port, skipping service labels.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:938
+#: src/gns/gnunet-service-gns_resolver.c:891
#, 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:1129
+#: src/gns/gnunet-service-gns_resolver.c:1082
#, c-format
msgid "Skipping record of unsupported type %d\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1447
-#, c-format
-msgid "VPN returned empty result for `%s'\n"
-msgstr ""
-
-#: src/gns/gnunet-service-gns_resolver.c:1919
+#: src/gns/gnunet-service-gns_resolver.c:1859
#, c-format
msgid "Name `%s' cannot be converted to IDNA."
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1934
+#: src/gns/gnunet-service-gns_resolver.c:1874
#, c-format
msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1979
+#: src/gns/gnunet-service-gns_resolver.c:1914
#, 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:2406
+#: src/gns/gnunet-service-gns_resolver.c:2312
+msgid "Unable to process critical delegation record\n"
+msgstr ""
+
+#: src/gns/gnunet-service-gns_resolver.c:2317
msgid "GNS lookup recursion failed (no delegation record found)\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2429
+#: src/gns/gnunet-service-gns_resolver.c:2340
#, 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:2594
+#: src/gns/gnunet-service-gns_resolver.c:2505
#, c-format
msgid "GNS namecache returned empty result for `%s'\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2734
+#: src/gns/gnunet-service-gns_resolver.c:2652
#, c-format
msgid "Zone %s was revoked, resolution fails\n"
msgstr ""
-#: src/gns/plugin_gnsrecord_gns.c:174
+#: src/gns/plugin_gnsrecord_gns.c:136
+msgid "This is a memento of an older block for internal maintenance."
+msgstr ""
+
+#: src/gns/plugin_gnsrecord_gns.c:175
#, fuzzy, c-format
msgid "Unable to parse zone key record `%s'\n"
msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
-#: src/gns/plugin_gnsrecord_gns.c:187
+#: src/gns/plugin_gnsrecord_gns.c:188
msgid "Record type does not match parsed record type\n"
msgstr ""
-#: src/gns/plugin_gnsrecord_gns.c:213
+#: src/gns/plugin_gnsrecord_gns.c:211
#, 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:229
+#: src/gns/plugin_gnsrecord_gns.c:227
#, fuzzy, c-format
msgid "Failed to serialize GNS2DNS record with value `%s': Not a DNS name.\n"
msgstr "Không thể truy cập đến tập tin gnunet-directory « %s »\n"
-#: src/gns/plugin_gnsrecord_gns.c:253
+#: src/gns/plugin_gnsrecord_gns.c:251
#, 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:285
+#: src/gns/plugin_gnsrecord_gns.c:283
#, 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"
@@ -4128,6 +4184,34 @@ msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
msgid "Gns REST API initialized\n"
msgstr "Lỗi sơ khởi lõi.\n"
+#: src/gnsrecord/gnsrecord_misc.c:448
+msgid "Zone delegation record not allowed in apex."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:456
+msgid "Zone delegation record set contains mutually exclusive records."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:466
+msgid "Multiple REDIRECT records."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:475 src/gnsrecord/gnsrecord_misc.c:501
+msgid "Redirection record set conains mutually exclusive records."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:482
+msgid "Redirection records not allowed in apex."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:493
+msgid "Redirection records not allowed in apex.."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:515
+msgid "Mutually exclusive records."
+msgstr ""
+
#: src/gnsrecord/plugin_gnsrecord_dns.c:367
#, fuzzy, c-format
msgid "Unable to parse IPv4 address `%s'\n"
@@ -4378,7 +4462,7 @@ msgid "# hostlist downloads initiated"
msgstr ""
#: src/hostlist/gnunet-daemon-hostlist_client.c:1144
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1728
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1732
msgid "# milliseconds between hostlist downloads"
msgstr ""
@@ -4439,21 +4523,21 @@ msgstr ""
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:1657
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1661
#: src/transport/plugin_transport_http_client.c:2300
#, c-format
msgid "Invalid proxy type: `%s', disabling proxy! Check configuration!\n"
msgstr ""
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1686
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1690
msgid "Learning is enabled on this peer\n"
msgstr ""
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1699
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1703
msgid "Learning is not enabled on this peer\n"
msgstr ""
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1713
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1717
#, c-format
msgid ""
"Since learning is not enabled on this peer, hostlist file `%s' was removed\n"
@@ -4651,49 +4735,49 @@ msgstr ""
msgid "Maintain egos"
msgstr ""
-#: src/identity/gnunet-service-identity.c:503
+#: src/identity/gnunet-service-identity.c:502
msgid "no default known"
msgstr ""
-#: src/identity/gnunet-service-identity.c:528
+#: src/identity/gnunet-service-identity.c:527
msgid "default configured, but ego unknown (internal error)"
msgstr ""
-#: src/identity/gnunet-service-identity.c:621
-#: src/identity/gnunet-service-identity.c:896
-#: src/identity/gnunet-service-identity.c:1016
+#: src/identity/gnunet-service-identity.c:620
+#: src/identity/gnunet-service-identity.c:895
+#: src/identity/gnunet-service-identity.c:1015
#, 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:631
+#: src/identity/gnunet-service-identity.c:630
msgid "Unknown ego specified for service (internal error)"
msgstr ""
-#: src/identity/gnunet-service-identity.c:725
+#: src/identity/gnunet-service-identity.c:724
msgid "identifier already in use for another ego"
msgstr ""
-#: src/identity/gnunet-service-identity.c:872
+#: src/identity/gnunet-service-identity.c:871
msgid "target name already exists"
msgstr ""
-#: src/identity/gnunet-service-identity.c:914
-#: src/identity/gnunet-service-identity.c:1033
+#: src/identity/gnunet-service-identity.c:913
+#: src/identity/gnunet-service-identity.c:1032
msgid "no matching ego found"
msgstr ""
-#: src/identity/gnunet-service-identity.c:1131
+#: src/identity/gnunet-service-identity.c:1130
#, 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:1189
+#: src/identity/gnunet-service-identity.c:1188
#, 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:1198
+#: src/identity/gnunet-service-identity.c:1197
#, 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"
@@ -4734,7 +4818,7 @@ msgstr "Không thể truy cập đến « %s »: %s\n"
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:119 src/namestore/gnunet-namestore.c:459
+#: src/namecache/gnunet-namecache.c:119 src/namestore/gnunet-namestore.c:469
#, c-format
msgid "\tCorrupt or unsupported record of type %u\n"
msgstr ""
@@ -4754,7 +4838,7 @@ msgstr "Đối số không hợp lệ cho « %s ».\n"
msgid "You must specify a name\n"
msgstr "Phải ghi rõ tên hiệu\n"
-#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1641
+#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1591
msgid "name of the record to add/delete/display"
msgstr ""
@@ -4763,7 +4847,7 @@ msgstr ""
msgid "specifies 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:233 src/namestore/gnunet-namestore.c:1702
+#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1652
#, fuzzy
msgid "GNUnet zone manipulation tool"
msgstr "Cấu hình GNUnet"
@@ -4912,140 +4996,113 @@ msgstr ""
msgid "GNU Name System First-Come-First-Served name registration service"
msgstr ""
-#: src/namestore/gnunet-namestore.c:334
+#: src/namestore/gnunet-namestore.c:340
#, 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:362
+#: src/namestore/gnunet-namestore.c:368
#, 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:369
+#: src/namestore/gnunet-namestore.c:375
#, 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:656
-#, c-format
-msgid "A %s record exists already under `%s', no other records can be added.\n"
-msgstr ""
-
#: src/namestore/gnunet-namestore.c:668
#, c-format
msgid ""
-"A zone key record exists already under `%s', no other records can be added.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:680
-#, c-format
-msgid ""
"A SOA record exists already under `%s', cannot add a second SOA to the same "
"zone.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:696
-#, c-format
-msgid "Records already exist under `%s', cannot add `%s' record.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:711
-#, c-format
-msgid "Records already exist under `%s', cannot add record.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:726
-#, c-format
-msgid ""
-"Non-GNS2DNS records already exist under `%s', cannot add GNS2DNS record.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:846
+#: src/namestore/gnunet-namestore.c:789
#, c-format
msgid "There are no records under label `%s' that could be deleted.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:889
+#: src/namestore/gnunet-namestore.c:832
#, c-format
msgid ""
"There are no records under label `%s' that match the request for deletion.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:970
+#: src/namestore/gnunet-namestore.c:920
#, 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:993
+#: src/namestore/gnunet-namestore.c:943
#, fuzzy, c-format
msgid "No options given\n"
msgstr "chưa đưa ra tên"
-#: src/namestore/gnunet-namestore.c:1014 src/namestore/gnunet-namestore.c:1066
-#: src/namestore/gnunet-namestore.c:1076 src/namestore/gnunet-namestore.c:1105
-#: src/namestore/gnunet-namestore.c:1126 src/namestore/gnunet-namestore.c:1153
-#: src/namestore/gnunet-namestore.c:1230
+#: src/namestore/gnunet-namestore.c:964 src/namestore/gnunet-namestore.c:1016
+#: src/namestore/gnunet-namestore.c:1026 src/namestore/gnunet-namestore.c:1055
+#: src/namestore/gnunet-namestore.c:1076 src/namestore/gnunet-namestore.c:1103
+#: src/namestore/gnunet-namestore.c:1180
#, 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:1016
+#: src/namestore/gnunet-namestore.c:966
msgid "replace"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1045
+#: src/namestore/gnunet-namestore.c:995
#, 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:1068 src/namestore/gnunet-namestore.c:1078
-#: src/namestore/gnunet-namestore.c:1107 src/namestore/gnunet-namestore.c:1128
-#: src/namestore/gnunet-namestore.c:1232
+#: src/namestore/gnunet-namestore.c:1018 src/namestore/gnunet-namestore.c:1028
+#: src/namestore/gnunet-namestore.c:1057 src/namestore/gnunet-namestore.c:1078
+#: src/namestore/gnunet-namestore.c:1182
msgid "add"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1086
+#: src/namestore/gnunet-namestore.c:1036
#, 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:1096
+#: src/namestore/gnunet-namestore.c:1046
#, c-format
msgid "For DNS record types `SRV', `TLSA' and `OPENPGPKEY'"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1116
+#: src/namestore/gnunet-namestore.c:1066
#, c-format
msgid "Value `%s' invalid for record type `%s'\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1135 src/namestore/gnunet-namestore.c:1239
+#: src/namestore/gnunet-namestore.c:1085 src/namestore/gnunet-namestore.c:1189
#, fuzzy, c-format
msgid "Invalid time format `%s'\n"
msgstr "Địa chỉ IP định dạng sai: %s\n"
-#: src/namestore/gnunet-namestore.c:1155
+#: src/namestore/gnunet-namestore.c:1105
msgid "del"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1197
+#: src/namestore/gnunet-namestore.c:1147
#, 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:1222
+#: src/namestore/gnunet-namestore.c:1172
#: src/peerinfo-tool/gnunet-peerinfo.c:737
#, 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:1292
+#: src/namestore/gnunet-namestore.c:1242
#, c-format
msgid "Label `%s' contains `.' which is not allowed\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1342
+#: src/namestore/gnunet-namestore.c:1292
#, c-format
msgid ""
"No default identity configured for `namestore' subsystem\n"
@@ -5053,110 +5110,115 @@ msgid ""
"Run gnunet-identity -d to get a list of choices for $NAME\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1407
+#: src/namestore/gnunet-namestore.c:1357
#, c-format
msgid "Superfluous command line arguments (starting with `%s') ignored\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1436
+#: src/namestore/gnunet-namestore.c:1386
#, 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:1483
+#: src/namestore/gnunet-namestore.c:1433
msgid "Empty record line argument is not allowed.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1495
+#: src/namestore/gnunet-namestore.c:1445
#, c-format
msgid "Invalid expiration time `%s' (must be without unit)\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1507 src/namestore/gnunet-namestore.c:1523
-#: src/namestore/gnunet-namestore.c:1540
+#: src/namestore/gnunet-namestore.c:1457 src/namestore/gnunet-namestore.c:1473
+#: src/namestore/gnunet-namestore.c:1490
#, 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:1515
+#: src/namestore/gnunet-namestore.c:1465
#, fuzzy, c-format
msgid "Unknown record type `%s'\n"
msgstr "Không rõ câu lệnh « %s ».\n"
-#: src/namestore/gnunet-namestore.c:1553
+#: src/namestore/gnunet-namestore.c:1503
#, 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:1610
+#: src/namestore/gnunet-namestore.c:1560
msgid "add record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1613
+#: src/namestore/gnunet-namestore.c:1563
msgid "delete record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1617
+#: src/namestore/gnunet-namestore.c:1567
msgid "display records"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1624
+#: src/namestore/gnunet-namestore.c:1574
msgid ""
"expiration time for record to use (for adding only), \"never\" is possible"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1630
+#: src/namestore/gnunet-namestore.c:1580
#, 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:1635
+#: src/namestore/gnunet-namestore.c:1585
#, 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:1647
+#: src/namestore/gnunet-namestore.c:1597
#, 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:1654
+#: src/namestore/gnunet-namestore.c:1604
msgid ""
"set record set to values given by (possibly multiple) RECORDLINES; can be "
"specified multiple times"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1660
+#: src/namestore/gnunet-namestore.c:1610
msgid "type of the record to add/delete/display"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1665
+#: src/namestore/gnunet-namestore.c:1615
msgid "URI to import into our zone"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1671
+#: src/namestore/gnunet-namestore.c:1621
msgid "value of the record to add/delete"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1675
+#: src/namestore/gnunet-namestore.c:1625
msgid "create or list public record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1681
+#: src/namestore/gnunet-namestore.c:1631
msgid ""
"create shadow record (only valid if all other records of the same type have "
"expired"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1687
+#: src/namestore/gnunet-namestore.c:1637
msgid "name of the ego controlling the zone"
msgstr ""
-#: src/namestore/gnunet-service-namestore.c:871
+#: src/namestore/gnunet-service-namestore.c:879
#, 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-service-namestore.c:1668
+#, fuzzy
+msgid "Store failed"
+msgstr "Kho dữ liệu đầy.\n"
+
#: src/namestore/gnunet-zoneimport.c:1847
msgid "size to use for the main hash map"
msgstr ""
@@ -5165,10 +5227,6 @@ msgstr ""
msgid "minimum expiration time we assume for imported records"
msgstr ""
-#: src/namestore/namestore_api.c:373
-msgid "Namestore failed to store record\n"
-msgstr ""
-
#: src/namestore/plugin_namestore_flat.c:195
#, c-format
msgid "File too big to map: %llu bytes.\n"
@@ -5769,6 +5827,51 @@ msgstr "Lỗi sơ khởi dịch vụ « %s ».\n"
msgid "Daemon to run to perform IP protocol translation to GNUnet"
msgstr ""
+#: src/reclaim/gnunet-did.c:209
+#, fuzzy, c-format
+msgid "Invalid DID `%s'\n"
+msgstr "Dữ liệu nhập không hợp lệ.\n"
+
+#: src/reclaim/gnunet-did.c:835
+msgid "Create a DID Document and display its DID"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:840
+msgid "Get the DID Document associated with the given DID"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:844
+msgid "Show the DID for a given ego"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:849
+msgid "Remove the DID"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:853 src/reclaim/gnunet-did.c:857
+msgid "Replace the DID Document."
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:863
+msgid "The Decentralized Identity (DID)"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:869
+msgid "The DID Document to store in GNUNET"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:874
+msgid "The name of the EGO"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:880
+msgid "The time until the DID Document is going to expire (e.g. 5d)"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:889
+msgid "Manage Decentralized Identities (DIDs)"
+msgstr ""
+
#: src/reclaim/gnunet-reclaim.c:802
#, fuzzy, c-format
msgid "Ego is required\n"
@@ -6665,17 +6768,17 @@ msgid ""
"free topology cannot be more than %u. Given `%s = %llu'"
msgstr ""
-#: src/testbed/testbed_api_topology.c:1033 src/testing/testing.c:2643
+#: src/testbed/testbed_api_topology.c:1033 src/testing/testing.c:2657
#, 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:1041 src/testing/testing.c:2651
+#: src/testbed/testbed_api_topology.c:1041 src/testing/testing.c:2665
#, 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:1049 src/testing/testing.c:2659
+#: src/testbed/testbed_api_topology.c:1049 src/testing/testing.c:2673
#, 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"
@@ -6888,7 +6991,7 @@ msgstr ""
#: src/transport/gnunet-communicator-tcp.c:3338
#: src/transport/gnunet-communicator-udp.c:3856
-#: src/transport/gnunet-service-tng.c:10512
+#: src/transport/gnunet-service-tng.c:10623
#: src/transport/gnunet-service-transport.c:2627
#, fuzzy
msgid "Transport service is lacking key configuration settings. Exiting.\n"
@@ -8128,59 +8231,59 @@ msgstr ""
msgid "Need a non-empty hostname for service `%s'.\n"
msgstr ""
-#: src/util/common_logging.c:626 src/util/common_logging.c:665
+#: src/util/common_logging.c:648 src/util/common_logging.c:687
#, c-format
msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n"
msgstr ""
-#: src/util/common_logging.c:904
+#: src/util/common_logging.c:926
#, 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:1108
+#: src/util/common_logging.c:1131
msgid "ERROR"
msgstr "LỖI"
-#: src/util/common_logging.c:1110
+#: src/util/common_logging.c:1133
msgid "WARNING"
msgstr "CẢNH BÁO"
-#: src/util/common_logging.c:1112
+#: src/util/common_logging.c:1135
msgid "MESSAGE"
msgstr ""
-#: src/util/common_logging.c:1114
+#: src/util/common_logging.c:1137
msgid "INFO"
msgstr "TIN"
-#: src/util/common_logging.c:1116
+#: src/util/common_logging.c:1139
msgid "DEBUG"
msgstr "GỠ LỖI"
-#: src/util/common_logging.c:1118
+#: src/util/common_logging.c:1141
msgid "NONE"
msgstr ""
-#: src/util/common_logging.c:1119
+#: src/util/common_logging.c:1142
msgid "INVALID"
msgstr ""
-#: src/util/common_logging.c:1400
+#: src/util/common_logging.c:1423
msgid "unknown address"
msgstr ""
-#: src/util/common_logging.c:1445
+#: src/util/common_logging.c:1468
msgid "invalid address"
msgstr ""
-#: src/util/common_logging.c:1464
+#: src/util/common_logging.c:1487
#, 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:1487
+#: src/util/common_logging.c:1510
#, fuzzy, c-format
msgid ""
"Configuration specifies invalid value for option `%s' in section `%s': %s\n"
@@ -8330,17 +8433,17 @@ msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
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:344
+#: src/util/dnsstub.c:370
#, c-format
-msgid "Received DNS response that is too small (%u bytes)"
+msgid "Received DNS response that is too small (%u bytes)\n"
msgstr ""
-#: src/util/dnsstub.c:482
+#: src/util/dnsstub.c:508
#, 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:487
+#: src/util/dnsstub.c:513
#, fuzzy, c-format
msgid "Sent DNS request to %s\n"
msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
@@ -8428,84 +8531,84 @@ 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:196
+#: src/util/getopt_helpers.c:197
msgid "print this help"
msgstr "hiển thị trợ giúp này"
-#: src/util/getopt_helpers.c:261
+#: src/util/getopt_helpers.c:262
msgid "be verbose"
msgstr "xuất chi tiết"
-#: src/util/getopt_helpers.c:377
+#: src/util/getopt_helpers.c:378
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:444
+#: src/util/getopt_helpers.c:445
#, 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:461
+#: src/util/getopt_helpers.c:462
#, 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:497 src/util/getopt_helpers.c:811
-#: src/util/getopt_helpers.c:867
+#: src/util/getopt_helpers.c:498 src/util/getopt_helpers.c:812
+#: src/util/getopt_helpers.c:868
#, 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:569
+#: src/util/getopt_helpers.c:570
#, fuzzy, c-format
msgid ""
"You must pass a relative time (optionally with sign) 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:576
+#: src/util/getopt_helpers.c:577
#, c-format
msgid "Value given for time travel `%s' option is too big.\n"
msgstr ""
-#: src/util/getopt_helpers.c:594
+#: src/util/getopt_helpers.c:595
msgid "[+/-]MICROSECONDS"
msgstr ""
-#: src/util/getopt_helpers.c:596
+#: src/util/getopt_helpers.c:597
msgid "modify system time by given offset (for debugging/testing only)"
msgstr ""
-#: src/util/getopt_helpers.c:630
+#: src/util/getopt_helpers.c:631
#, 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:684
+#: src/util/getopt_helpers.c:685
#, 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:741
+#: src/util/getopt_helpers.c:742
#, fuzzy, c-format
msgid "You must pass a timestamp 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:748
+#: src/util/getopt_helpers.c:749
#, c-format
msgid "The maximum precision allowed for timestamps is seconds.\n"
msgstr ""
-#: src/util/getopt_helpers.c:804
+#: src/util/getopt_helpers.c:805
#, c-format
msgid "Your input for the '%s' option has to be a non negative number\n"
msgstr ""
-#: src/util/getopt_helpers.c:874
+#: src/util/getopt_helpers.c:875
#, 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:952
+#: src/util/getopt_helpers.c:953
#, c-format
msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n"
msgstr ""
@@ -8539,7 +8642,7 @@ msgstr ""
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-crypto-tvg.c:1072
+#: src/util/gnunet-crypto-tvg.c:1483
msgid "verify a test vector from stdin"
msgstr ""
@@ -8792,7 +8895,7 @@ msgstr "Gặp lỗi khi tạo người dùng"
msgid "Unable to shorten unix path `%s' while keeping name unique\n"
msgstr ""
-#: src/util/network.c:1306
+#: src/util/network.c:1307
#, c-format
msgid ""
"Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n"
@@ -8920,78 +9023,78 @@ msgstr ""
msgid "Character sets requested were `%s'->`%s'\n"
msgstr ""
-#: src/util/strings.c:487
+#: src/util/strings.c:514
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:1023
+#: src/util/strings.c:1050
msgid "IPv6 address did not start with `['\n"
msgstr ""
-#: src/util/strings.c:1031
+#: src/util/strings.c:1058
msgid "IPv6 address did contain ':' to separate port number\n"
msgstr ""
-#: src/util/strings.c:1038
+#: src/util/strings.c:1065
msgid "IPv6 address did contain ']' before ':' to separate port number\n"
msgstr ""
-#: src/util/strings.c:1046
+#: src/util/strings.c:1073
msgid "IPv6 address did contain a valid port number after the last ':'\n"
msgstr ""
-#: src/util/strings.c:1055
+#: src/util/strings.c:1082
#, 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:1237 src/util/strings.c:1248
+#: src/util/strings.c:1264 src/util/strings.c:1275
msgid "Port not in range\n"
msgstr ""
-#: src/util/strings.c:1257
+#: src/util/strings.c:1284
#, fuzzy, c-format
msgid "Malformed port policy `%s'\n"
msgstr "Lỗi bắt đầu thu thập.\n"
-#: src/util/strings.c:1328 src/util/strings.c:1357 src/util/strings.c:1404
-#: src/util/strings.c:1424
+#: src/util/strings.c:1355 src/util/strings.c:1384 src/util/strings.c:1431
+#: src/util/strings.c:1451
#, c-format
msgid "Invalid format for IP: `%s'\n"
msgstr "Địa chỉ IP định dạng sai: %s\n"
-#: src/util/strings.c:1382
+#: src/util/strings.c:1409
#, 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:1433
+#: src/util/strings.c:1460
#, fuzzy, c-format
msgid "Invalid format: `%s'\n"
msgstr "Địa chỉ IP định dạng sai: %s\n"
-#: src/util/strings.c:1475
+#: src/util/strings.c:1502
#, 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:1525
+#: src/util/strings.c:1552
#, 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:1556
+#: src/util/strings.c:1583
#, fuzzy, c-format
msgid "Wrong format `%s' for network\n"
msgstr "Mạng có định dạng sai « %s »: %s\n"
-#: src/util/time.c:863 src/util/time.c:891
+#: src/util/time.c:870 src/util/time.c:898
#, c-format
msgid "Failed to map `%s', cannot assure monotonic time!\n"
msgstr ""
-#: src/util/time.c:899
+#: src/util/time.c:906
#, c-format
msgid ""
"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
@@ -9175,13 +9278,32 @@ msgstr "# các byte đã nhận qua UDP"
msgid "Setup tunnels via VPN."
msgstr ""
-#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418
-#: src/zonemaster/gnunet-service-zonemaster.c:847
+#: src/zonemaster/gnunet-service-zonemaster-monitor.c:397
+#: src/zonemaster/gnunet-service-zonemaster.c:832
#, fuzzy
msgid "Failed to connect to the namestore!\n"
msgstr "Không kết nối được đến trình nền gnunetd."
#, fuzzy
+#~ msgid "# items stored"
+#~ msgstr "# các byte trong kho dữ liệu"
+
+#, 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"
+
+#, fuzzy
+#~ msgid "# requests received"
+#~ msgstr "# các yêu cầu get (lấy) dht được nhận"
+
+#~ msgid "# requests filtered by bloom filter"
+#~ msgstr "# các yêu cầu được lọc theo bộ lọc bloom"
+
+#, fuzzy
+#~ msgid "# proximity search requests received"
+#~ msgstr "# các yêu cầu khách lỗ hổng được nhận"
+
+#, fuzzy
#~ msgid "# requests for random value received"
#~ msgstr "# tổng số yêu cầu lỗ hổng được nhận"
diff --git a/po/zh_CN.po b/po/zh_CN.po
index a7784f73d..dedd6914a 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gnunet-0.8.1\n"
"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2022-01-10 15:13+0100\n"
+"POT-Creation-Date: 2022-03-04 22:23+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,7 +16,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1304
+#: src/abd/gnunet-abd.c:392 src/namestore/gnunet-namestore.c:1254
#, c-format
msgid "Ego `%s' not known to identity service\n"
msgstr ""
@@ -28,7 +28,7 @@ msgstr "“%s”的参数无效。\n"
#: src/abd/gnunet-abd.c:558 src/abd/gnunet-service-abd.c:1751
#: src/namestore/gnunet-namestore-fcfsd.c:1080
-#: src/namestore/gnunet-namestore.c:1001
+#: src/namestore/gnunet-namestore.c:951
#, fuzzy, c-format
msgid "Failed to connect to namestore\n"
msgstr "初始化“%s”服务失败。\n"
@@ -619,45 +619,45 @@ msgstr ""
msgid "Print information about ATS state"
msgstr "无法获取有关用户“%s”的信息:%s\n"
-#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044
+#: src/ats/gnunet-ats-solver-eval.c:2993 src/ats/gnunet-ats-solver-eval.c:3045
#, c-format
msgid ""
"Could not load quota for network `%s': `%s', assigning default bandwidth "
"%llu\n"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3011
+#: src/ats/gnunet-ats-solver-eval.c:3012
#, c-format
msgid ""
"No outbound quota configured for network `%s', assigning default bandwidth "
"%llu\n"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3063
+#: src/ats/gnunet-ats-solver-eval.c:3064
#, c-format
msgid ""
"No outbound quota configure for network `%s', assigning default bandwidth "
"%llu\n"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3552
+#: src/ats/gnunet-ats-solver-eval.c:3553
msgid "solver to use"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3557
+#: src/ats/gnunet-ats-solver-eval.c:3558
msgid "experiment to use"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3564
+#: src/ats/gnunet-ats-solver-eval.c:3565
#, fuzzy
msgid "print logging"
msgstr "未知的命令“%s”。\n"
-#: src/ats/gnunet-ats-solver-eval.c:3569
+#: src/ats/gnunet-ats-solver-eval.c:3570
msgid "save logging to disk"
msgstr ""
-#: src/ats/gnunet-ats-solver-eval.c:3574
+#: src/ats/gnunet-ats-solver-eval.c:3575
msgid "disable normalization"
msgstr ""
@@ -1522,38 +1522,7 @@ msgstr ""
msgid "# updates to my type map"
msgstr ""
-#: src/datacache/datacache.c:117 src/datacache/datacache.c:275
-#: src/datastore/gnunet-service-datastore.c:743
-msgid "# bytes stored"
-msgstr ""
-
-#: src/datacache/datacache.c:121 src/datacache/datacache.c:279
-msgid "# items stored"
-msgstr ""
-
-#: src/datacache/datacache.c:185
-#, c-format
-msgid "Loading `%s' datacache plugin\n"
-msgstr ""
-
-#: src/datacache/datacache.c:203
-#, c-format
-msgid "Failed to load datacache plugin for `%s'\n"
-msgstr ""
-
-#: src/datacache/datacache.c:297
-msgid "# requests received"
-msgstr ""
-
-#: src/datacache/datacache.c:308
-msgid "# requests filtered by bloom filter"
-msgstr ""
-
-#: src/datacache/datacache.c:329
-msgid "# proximity search requests received"
-msgstr ""
-
-#: src/datacache/plugin_datacache_heap.c:527
+#: src/datacache/plugin_datacache_heap.c:555
#, fuzzy
msgid "Heap datacache running\n"
msgstr "sqlite 数据仓库"
@@ -1576,7 +1545,7 @@ msgstr "sqlite 数据仓库"
msgid "`%s' failed at %s:%d with error: %s\n"
msgstr "“%s”于 %s:%d 处失败,错误为:%s\n"
-#: src/datacache/plugin_datacache_sqlite.c:693
+#: src/datacache/plugin_datacache_sqlite.c:723
#: src/datastore/plugin_datastore_sqlite.c:531
#: src/namecache/plugin_namecache_sqlite.c:237
#: src/namestore/plugin_namestore_sqlite.c:273
@@ -1761,6 +1730,10 @@ msgstr ""
msgid "Could not find matching reservation"
msgstr ""
+#: src/datastore/gnunet-service-datastore.c:743
+msgid "# bytes stored"
+msgstr ""
+
#: src/datastore/gnunet-service-datastore.c:758
#, c-format
msgid "Need %llu bytes more space (%llu allowed, using %llu)\n"
@@ -1945,7 +1918,7 @@ msgstr ""
#: src/datastore/plugin_datastore_sqlite.c:1337
#: src/namecache/plugin_namecache_sqlite.c:564
-#: src/namestore/plugin_namestore_sqlite.c:765
+#: src/namestore/plugin_namestore_sqlite.c:775
#, fuzzy
msgid "Sqlite database running\n"
msgstr "sqlite 数据仓库"
@@ -1954,56 +1927,65 @@ msgstr "sqlite 数据仓库"
msgid "Template database running\n"
msgstr ""
-#: src/dht/gnunet-dht-get.c:159
+#: src/dht/gnunet-dht-get.c:164
#, c-format
msgid ""
"Result %d, type %d:\n"
"%.*s\n"
msgstr ""
-#: src/dht/gnunet-dht-get.c:160
+#: src/dht/gnunet-dht-get.c:165
#, c-format
msgid "Result %d, type %d:\n"
msgstr ""
-#: src/dht/gnunet-dht-get.c:209
+#: src/dht/gnunet-dht-get.c:215
msgid "Must provide key for DHT GET!\n"
msgstr ""
-#: src/dht/gnunet-dht-get.c:217 src/dht/gnunet-dht-monitor.c:255
-#, fuzzy
+#: src/dht/gnunet-dht-get.c:223 src/dht/gnunet-dht-hello.c:119
+#: src/dht/gnunet-dht-monitor.c:255
+#, fuzzy, c-format
msgid "Failed to connect to DHT service!\n"
msgstr "初始化“%s”服务失败。\n"
-#: src/dht/gnunet-dht-get.c:227
+#: src/dht/gnunet-dht-get.c:233
msgid "Issuing DHT GET with key"
msgstr ""
-#: src/dht/gnunet-dht-get.c:260 src/dht/gnunet-dht-monitor.c:302
+#: src/dht/gnunet-dht-get.c:269 src/dht/gnunet-dht-monitor.c:302
#: src/dht/gnunet-dht-put.c:200
msgid "the query key"
msgstr ""
-#: src/dht/gnunet-dht-get.c:266
+#: src/dht/gnunet-dht-get.c:275
msgid "how many parallel requests (replicas) to create"
msgstr ""
-#: src/dht/gnunet-dht-get.c:272 src/dht/gnunet-dht-monitor.c:308
+#: src/dht/gnunet-dht-get.c:280 src/dht/gnunet-dht-put.c:217
+msgid "use DHT's record route option"
+msgstr ""
+
+#: src/dht/gnunet-dht-get.c:286 src/dht/gnunet-dht-monitor.c:308
msgid "the type of data to look for"
msgstr ""
-#: src/dht/gnunet-dht-get.c:278
+#: src/dht/gnunet-dht-get.c:292
msgid "how long to execute this query before giving up?"
msgstr ""
-#: src/dht/gnunet-dht-get.c:284 src/dht/gnunet-dht-put.c:206
+#: src/dht/gnunet-dht-get.c:298 src/dht/gnunet-dht-put.c:206
msgid "use DHT's demultiplex everywhere option"
msgstr ""
-#: src/dht/gnunet-dht-get.c:301
+#: src/dht/gnunet-dht-get.c:315
msgid "Issue a GET request to the GNUnet DHT, prints results."
msgstr ""
+#: src/dht/gnunet-dht-hello.c:166
+msgid "Obtain HELLO from DHT or provide HELLO to DHT for bootstrapping"
+msgstr ""
+
#: src/dht/gnunet-dht-monitor.c:315
msgid "how long should the monitor command run"
msgstr ""
@@ -2043,10 +2025,6 @@ msgstr ""
msgid "how many replicas to create"
msgstr ""
-#: src/dht/gnunet-dht-put.c:217
-msgid "use DHT's record route option"
-msgstr ""
-
#: src/dht/gnunet-dht-put.c:223
msgid "the type to insert data as"
msgstr ""
@@ -2103,17 +2081,17 @@ msgstr ""
msgid "Measure quality and performance of the DHT service."
msgstr "无法访问该服务"
-#: src/dht/plugin_block_dht.c:328
+#: src/dht/plugin_block_dht.c:404
#, c-format
msgid "Block not of type %u\n"
msgstr ""
-#: src/dht/plugin_block_dht.c:337
+#: src/dht/plugin_block_dht.c:413
#, c-format
msgid "Size mismatch for block with type %u\n"
msgstr ""
-#: src/dht/plugin_block_dht.c:348
+#: src/dht/plugin_block_dht.c:424
#, c-format
msgid "Block of type %u is malformed\n"
msgstr ""
@@ -2820,20 +2798,20 @@ msgstr ""
msgid "LOC URI malformed (signature failed validation)"
msgstr ""
-#: src/fs/fs_uri.c:653
+#: src/fs/fs_uri.c:652
#, fuzzy
msgid "invalid argument"
msgstr "“%s”的参数无效。\n"
-#: src/fs/fs_uri.c:665
+#: src/fs/fs_uri.c:671
msgid "Unrecognized URI type"
msgstr ""
-#: src/fs/fs_uri.c:1071 src/fs/fs_uri.c:1098
+#: src/fs/fs_uri.c:1075 src/fs/fs_uri.c:1102
msgid "No keywords specified!\n"
msgstr ""
-#: src/fs/fs_uri.c:1104
+#: src/fs/fs_uri.c:1108
msgid "Number of double-quotes not balanced!\n"
msgstr ""
@@ -2960,7 +2938,7 @@ msgid "Downloading `%s' done (%s/s).\n"
msgstr ""
#: src/fs/gnunet-download.c:206 src/fs/gnunet-publish.c:299
-#: src/fs/gnunet-search.c:229 src/fs/gnunet-unindex.c:117
+#: src/fs/gnunet-search.c:538 src/fs/gnunet-unindex.c:117
#, c-format
msgid "Unexpected status: %d\n"
msgstr ""
@@ -2984,12 +2962,12 @@ msgid "Target filename must be specified.\n"
msgstr ""
#: src/fs/gnunet-download.c:271 src/fs/gnunet-publish.c:869
-#: src/fs/gnunet-search.c:294 src/fs/gnunet-unindex.c:154
+#: src/fs/gnunet-unindex.c:154
#, fuzzy, c-format
msgid "Could not initialize `%s' subsystem.\n"
msgstr "初始化“%s”服务失败。\n"
-#: src/fs/gnunet-download.c:318 src/fs/gnunet-search.c:334
+#: src/fs/gnunet-download.c:318
msgid "set the desired LEVEL of receiver-anonymity"
msgstr ""
@@ -2997,7 +2975,7 @@ msgstr ""
msgid "delete incomplete downloads (when aborted with CTRL-C)"
msgstr ""
-#: src/fs/gnunet-download.c:330 src/fs/gnunet-search.c:339
+#: src/fs/gnunet-download.c:330 src/fs/gnunet-search.c:740
msgid "only search the local peer (no P2P network search)"
msgstr ""
@@ -3235,38 +3213,110 @@ msgstr ""
msgid "Publish a file or directory on GNUnet"
msgstr ""
-#: src/fs/gnunet-search.c:130
+#: src/fs/gnunet-search.c:441
#, c-format
msgid "Failed to write directory with search results to `%s'\n"
msgstr ""
-#: src/fs/gnunet-search.c:219
+#: src/fs/gnunet-search.c:527
#, fuzzy, c-format
msgid "Error searching: %s.\n"
msgstr "创建用户出错"
-#: src/fs/gnunet-search.c:281
+#: src/fs/gnunet-search.c:587
+#, c-format
+msgid "Conflicting options --bookmark-only and --silent.\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:594
+#, c-format
+msgid "Conflicting options --bookmark-only and --output.\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:600
+#, c-format
+msgid "An output file is mandatory for silent mode.\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:621
msgid "Could not create keyword URI from arguments.\n"
msgstr ""
-#: src/fs/gnunet-search.c:308
+#: src/fs/gnunet-search.c:629
+msgid ""
+"Invalid URI. Valid URIs for searching are keyword query URIs\n"
+"(\"gnunet://fs/ksk/...\") and namespace content URIs (\"gnunet://fs/sks/..."
+"\").\n"
+msgstr ""
+
+#: src/fs/gnunet-search.c:654
+#, fuzzy, c-format
+msgid "Could not initialize the `%s` subsystem.\n"
+msgstr "初始化“%s”服务失败。\n"
+
+#: src/fs/gnunet-search.c:668
msgid "Could not start searching.\n"
msgstr ""
-#: src/fs/gnunet-search.c:345
-msgid "write search results to file starting with PREFIX"
+#: src/fs/gnunet-search.c:694
+msgid "set the desired LEVEL of receiver-anonymity (default: 1)"
+msgstr ""
+
+#: src/fs/gnunet-search.c:700
+msgid "do not search, print only the URI that points to this search"
+msgstr ""
+
+#: src/fs/gnunet-search.c:707
+msgid ""
+"write search results for directories according to FORMAT; accepted "
+"placeholders are: %a, %f, %j, %l, %m, %n, %s; defaults to the value of --"
+"printf when omitted or to `"
+msgstr ""
+
+#: src/fs/gnunet-search.c:717
+msgid ""
+"write search results according to FORMAT; accepted placeholders are: %a, %f, "
+"%j, %l, %m, %n, %s; defaults to `"
msgstr ""
-#: src/fs/gnunet-search.c:351
-msgid "automatically terminate search after DELAY"
+#: src/fs/gnunet-search.c:725
+msgid ""
+"when the %a or %j placeholders appear in --printf or --dir-printf, list each "
+"metadata property according to FORMAT; accepted placeholders are: %i, %l, "
+"%n, %p"
msgstr ""
-#: src/fs/gnunet-search.c:357
+#: src/fs/gnunet-search.c:734
msgid "automatically terminate search after VALUE results are found"
msgstr ""
-#: src/fs/gnunet-search.c:371
-msgid "Search GNUnet for files that were published on GNUnet"
+#: src/fs/gnunet-search.c:746
+msgid ""
+"create a GNUnet directory with search results at FILENAME (e.g. `gnunet-"
+"search --output=commons"
+msgstr ""
+
+#: src/fs/gnunet-search.c:753
+msgid "silent mode (requires the --output argument)"
+msgstr ""
+
+#: src/fs/gnunet-search.c:759
+msgid ""
+"automatically terminate search after DELAY; the value given must be a number "
+"followed by a space and a time unit, for example \"500 ms\"; without a unit "
+"it defaults to microseconds - 1000000 = 1 second; if 0 or omitted it means "
+"to wait for CTRL-C"
+msgstr ""
+
+#: src/fs/gnunet-search.c:768
+#, c-format
+msgid ""
+"be verbose (append \"%a\\n\" to the default --printf and --dir-printf "
+"arguments - ignored when these are provided by the user)"
+msgstr ""
+
+#: src/fs/gnunet-search.c:781
+msgid "Search for files that have been published on GNUnet\n"
msgstr ""
#: src/fs/gnunet-service-fs.c:371 src/fs/gnunet-service-fs.c:878
@@ -3596,67 +3646,72 @@ msgstr ""
msgid "Expected a base32-encoded public zone key\n"
msgstr ""
-#: src/gns/gnunet-bcd.c:571
+#: src/gns/gnunet-bcd.c:573
#, fuzzy, c-format
msgid "Invalid port number %u\n"
msgstr "“%s”的参数无效。\n"
-#: src/gns/gnunet-bcd.c:612 src/namestore/gnunet-namestore-fcfsd.c:1113
+#: src/gns/gnunet-bcd.c:614 src/namestore/gnunet-namestore-fcfsd.c:1113
#, fuzzy
msgid "Unable to set up the daemon\n"
msgstr "发送消息失败。\n"
-#: src/gns/gnunet-bcd.c:635 src/namestore/gnunet-namestore-fcfsd.c:987
+#: src/gns/gnunet-bcd.c:637 src/namestore/gnunet-namestore-fcfsd.c:987
#, fuzzy
msgid "Failed to start HTTP server\n"
msgstr "初始化“%s”服务失败。\n"
-#: src/gns/gnunet-bcd.c:658
+#: src/gns/gnunet-bcd.c:660
msgid "Run HTTP server on port PORT (default is 8888)"
msgstr ""
-#: src/gns/gnunet-bcd.c:667
+#: src/gns/gnunet-bcd.c:669
msgid "GNUnet HTTP server to create business cards"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:241
+#: src/gns/gnunet-dns2gns.c:298
#, fuzzy
msgid "Failed to pack DNS response into UDP packet!\n"
msgstr "打开日志文件“%s”失败:%s\n"
-#: src/gns/gnunet-dns2gns.c:315
+#: src/gns/gnunet-dns2gns.c:379
#, fuzzy
msgid "Failed to parse DNS response!\n"
msgstr "打开日志文件“%s”失败:%s\n"
-#: src/gns/gnunet-dns2gns.c:452
+#: src/gns/gnunet-dns2gns.c:453
+#, c-format
+msgid "VPN returned empty result for `%s'\n"
+msgstr ""
+
+#: src/gns/gnunet-dns2gns.c:655
#, c-format
msgid "Cannot parse DNS request from %s\n"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:468
+#: src/gns/gnunet-dns2gns.c:671
#, c-format
msgid "Received malformed DNS request from %s\n"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:476
+#: src/gns/gnunet-dns2gns.c:679
#, c-format
msgid "Received unsupported DNS request from %s\n"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:637
+#: src/gns/gnunet-dns2gns.c:840
msgid "No DNS server specified!\n"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:786
+#: src/gns/gnunet-dns2gns.c:995
msgid "IP of recursive DNS resolver to use (required)"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:792
+#: src/gns/gnunet-dns2gns.c:1001
msgid "UDP port to listen on for inbound DNS requests; default: 2853"
msgstr ""
-#: src/gns/gnunet-dns2gns.c:809
+#: src/gns/gnunet-dns2gns.c:1018
msgid "GNUnet DNS-to-GNS proxy (a DNS server)"
msgstr ""
@@ -3836,19 +3891,19 @@ msgstr ""
msgid "GNUnet GNS resolver tool"
msgstr "GNUnet 错误日志"
-#: src/gns/gnunet-service-gns.c:505
+#: src/gns/gnunet-service-gns.c:501
#, fuzzy
msgid "Properly base32-encoded public key required"
msgstr "“%s”的参数无效。\n"
-#: src/gns/gnunet-service-gns.c:541
+#: src/gns/gnunet-service-gns.c:537
#, fuzzy
msgid "Failed to connect to the namecache!\n"
msgstr "初始化“%s”服务失败。\n"
-#: src/gns/gnunet-service-gns.c:560
-#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442
-#: src/zonemaster/gnunet-service-zonemaster.c:885
+#: src/gns/gnunet-service-gns.c:556
+#: src/zonemaster/gnunet-service-zonemaster-monitor.c:421
+#: src/zonemaster/gnunet-service-zonemaster.c:870
#, fuzzy
msgid "Could not connect to DHT!\n"
msgstr "无法连接到 %s:%u:%s\n"
@@ -3862,95 +3917,98 @@ msgstr ""
msgid "Failed to connect to the DNS service!\n"
msgstr "初始化“%s”服务失败。\n"
-#: src/gns/gnunet-service-gns_resolver.c:706
+#: src/gns/gnunet-service-gns_resolver.c:659
#, c-format
msgid "Protocol `%s' unknown, skipping labels.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:718
+#: src/gns/gnunet-service-gns_resolver.c:671
#, c-format
msgid "Service `%s' unknown for protocol `%s', trying as number.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:724
+#: src/gns/gnunet-service-gns_resolver.c:677
#, c-format
msgid "Service `%s' not a port, skipping service labels.\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:938
+#: src/gns/gnunet-service-gns_resolver.c:891
#, fuzzy
msgid "Failed to parse DNS response\n"
msgstr "打开日志文件“%s”失败:%s\n"
-#: src/gns/gnunet-service-gns_resolver.c:1129
+#: src/gns/gnunet-service-gns_resolver.c:1082
#, c-format
msgid "Skipping record of unsupported type %d\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1447
-#, c-format
-msgid "VPN returned empty result for `%s'\n"
-msgstr ""
-
-#: src/gns/gnunet-service-gns_resolver.c:1919
+#: src/gns/gnunet-service-gns_resolver.c:1859
#, c-format
msgid "Name `%s' cannot be converted to IDNA."
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1934
+#: src/gns/gnunet-service-gns_resolver.c:1874
#, c-format
msgid "GNS lookup resulted in DNS name that is too long (`%s')\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:1979
+#: src/gns/gnunet-service-gns_resolver.c:1914
#, 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:2406
+#: src/gns/gnunet-service-gns_resolver.c:2312
+msgid "Unable to process critical delegation record\n"
+msgstr ""
+
+#: src/gns/gnunet-service-gns_resolver.c:2317
msgid "GNS lookup recursion failed (no delegation record found)\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2429
+#: src/gns/gnunet-service-gns_resolver.c:2340
#, fuzzy, c-format
msgid "Failed to cache GNS resolution: %s\n"
msgstr "打开日志文件“%s”失败:%s\n"
-#: src/gns/gnunet-service-gns_resolver.c:2594
+#: src/gns/gnunet-service-gns_resolver.c:2505
#, c-format
msgid "GNS namecache returned empty result for `%s'\n"
msgstr ""
-#: src/gns/gnunet-service-gns_resolver.c:2734
+#: src/gns/gnunet-service-gns_resolver.c:2652
#, c-format
msgid "Zone %s was revoked, resolution fails\n"
msgstr ""
-#: src/gns/plugin_gnsrecord_gns.c:174
+#: src/gns/plugin_gnsrecord_gns.c:136
+msgid "This is a memento of an older block for internal maintenance."
+msgstr ""
+
+#: src/gns/plugin_gnsrecord_gns.c:175
#, fuzzy, c-format
msgid "Unable to parse zone key record `%s'\n"
msgstr "解析配置文件“%s”失败\n"
-#: src/gns/plugin_gnsrecord_gns.c:187
+#: src/gns/plugin_gnsrecord_gns.c:188
msgid "Record type does not match parsed record type\n"
msgstr ""
-#: src/gns/plugin_gnsrecord_gns.c:213
+#: src/gns/plugin_gnsrecord_gns.c:211
#, fuzzy, c-format
msgid "Unable to parse GNS2DNS record `%s'\n"
msgstr "解析配置文件“%s”失败\n"
-#: src/gns/plugin_gnsrecord_gns.c:229
+#: src/gns/plugin_gnsrecord_gns.c:227
#, fuzzy, c-format
msgid "Failed to serialize GNS2DNS record with value `%s': Not a DNS name.\n"
msgstr "解析配置文件“%s”失败\n"
-#: src/gns/plugin_gnsrecord_gns.c:253
+#: src/gns/plugin_gnsrecord_gns.c:251
#, fuzzy, c-format
msgid "Unable to parse VPN record string `%s'\n"
msgstr "解析配置文件“%s”失败\n"
-#: src/gns/plugin_gnsrecord_gns.c:285
+#: src/gns/plugin_gnsrecord_gns.c:283
#, fuzzy, c-format
msgid "Unable to parse BOX record string `%s'\n"
msgstr "解析配置文件“%s”失败\n"
@@ -3959,6 +4017,34 @@ msgstr "解析配置文件“%s”失败\n"
msgid "Gns REST API initialized\n"
msgstr ""
+#: src/gnsrecord/gnsrecord_misc.c:448
+msgid "Zone delegation record not allowed in apex."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:456
+msgid "Zone delegation record set contains mutually exclusive records."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:466
+msgid "Multiple REDIRECT records."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:475 src/gnsrecord/gnsrecord_misc.c:501
+msgid "Redirection record set conains mutually exclusive records."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:482
+msgid "Redirection records not allowed in apex."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:493
+msgid "Redirection records not allowed in apex.."
+msgstr ""
+
+#: src/gnsrecord/gnsrecord_misc.c:515
+msgid "Mutually exclusive records."
+msgstr ""
+
#: src/gnsrecord/plugin_gnsrecord_dns.c:367
#, fuzzy, c-format
msgid "Unable to parse IPv4 address `%s'\n"
@@ -4202,7 +4288,7 @@ msgid "# hostlist downloads initiated"
msgstr ""
#: src/hostlist/gnunet-daemon-hostlist_client.c:1144
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1728
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1732
msgid "# milliseconds between hostlist downloads"
msgstr ""
@@ -4260,21 +4346,21 @@ msgstr ""
msgid "# hostlist URIs written to file"
msgstr ""
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1657
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1661
#: src/transport/plugin_transport_http_client.c:2300
#, c-format
msgid "Invalid proxy type: `%s', disabling proxy! Check configuration!\n"
msgstr ""
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1686
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1690
msgid "Learning is enabled on this peer\n"
msgstr ""
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1699
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1703
msgid "Learning is not enabled on this peer\n"
msgstr ""
-#: src/hostlist/gnunet-daemon-hostlist_client.c:1713
+#: src/hostlist/gnunet-daemon-hostlist_client.c:1717
#, c-format
msgid ""
"Since learning is not enabled on this peer, hostlist file `%s' was removed\n"
@@ -4464,49 +4550,49 @@ msgstr ""
msgid "Maintain egos"
msgstr ""
-#: src/identity/gnunet-service-identity.c:503
+#: src/identity/gnunet-service-identity.c:502
msgid "no default known"
msgstr ""
-#: src/identity/gnunet-service-identity.c:528
+#: src/identity/gnunet-service-identity.c:527
msgid "default configured, but ego unknown (internal error)"
msgstr ""
-#: src/identity/gnunet-service-identity.c:621
-#: src/identity/gnunet-service-identity.c:896
-#: src/identity/gnunet-service-identity.c:1016
+#: src/identity/gnunet-service-identity.c:620
+#: src/identity/gnunet-service-identity.c:895
+#: src/identity/gnunet-service-identity.c:1015
#, fuzzy, c-format
msgid "Failed to write subsystem default identifier map to `%s'.\n"
msgstr "解析配置文件“%s”失败\n"
-#: src/identity/gnunet-service-identity.c:631
+#: src/identity/gnunet-service-identity.c:630
msgid "Unknown ego specified for service (internal error)"
msgstr ""
-#: src/identity/gnunet-service-identity.c:725
+#: src/identity/gnunet-service-identity.c:724
msgid "identifier already in use for another ego"
msgstr ""
-#: src/identity/gnunet-service-identity.c:872
+#: src/identity/gnunet-service-identity.c:871
msgid "target name already exists"
msgstr ""
-#: src/identity/gnunet-service-identity.c:914
-#: src/identity/gnunet-service-identity.c:1033
+#: src/identity/gnunet-service-identity.c:913
+#: src/identity/gnunet-service-identity.c:1032
msgid "no matching ego found"
msgstr ""
-#: src/identity/gnunet-service-identity.c:1131
+#: src/identity/gnunet-service-identity.c:1130
#, fuzzy, c-format
msgid "Failed to parse ego information in `%s'\n"
msgstr "解析配置文件“%s”失败\n"
-#: src/identity/gnunet-service-identity.c:1189
+#: src/identity/gnunet-service-identity.c:1188
#, fuzzy, c-format
msgid "Failed to parse subsystem identity configuration file `%s'\n"
msgstr "解析配置文件“%s”失败\n"
-#: src/identity/gnunet-service-identity.c:1198
+#: src/identity/gnunet-service-identity.c:1197
#, fuzzy, c-format
msgid "Failed to create directory `%s' for storing egos\n"
msgstr "解析配置文件“%s”失败\n"
@@ -4546,7 +4632,7 @@ msgstr "无法解析“%s”(%s):%s\n"
msgid "No records found for `%s'"
msgstr "运行 %s失败:%s %d\n"
-#: src/namecache/gnunet-namecache.c:119 src/namestore/gnunet-namestore.c:459
+#: src/namecache/gnunet-namecache.c:119 src/namestore/gnunet-namestore.c:469
#, c-format
msgid "\tCorrupt or unsupported record of type %u\n"
msgstr ""
@@ -4566,7 +4652,7 @@ msgstr "“%s”的参数无效。\n"
msgid "You must specify a name\n"
msgstr "您必须指定一个接收方!\n"
-#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1641
+#: src/namecache/gnunet-namecache.c:214 src/namestore/gnunet-namestore.c:1591
msgid "name of the record to add/delete/display"
msgstr ""
@@ -4574,7 +4660,7 @@ msgstr ""
msgid "specifies the public key of the zone to look in"
msgstr ""
-#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1702
+#: src/namecache/gnunet-namecache.c:233 src/namestore/gnunet-namestore.c:1652
#, fuzzy
msgid "GNUnet zone manipulation tool"
msgstr "GNUnet 配置"
@@ -4723,140 +4809,113 @@ msgstr ""
msgid "GNU Name System First-Come-First-Served name registration service"
msgstr ""
-#: src/namestore/gnunet-namestore.c:334
+#: src/namestore/gnunet-namestore.c:340
#, c-format
msgid "Adding record failed: %s\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:362
+#: src/namestore/gnunet-namestore.c:368
#, c-format
msgid "Deleting record failed, record does not exist%s%s\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:369
+#: src/namestore/gnunet-namestore.c:375
#, c-format
msgid "Deleting record failed%s%s\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:656
-#, c-format
-msgid "A %s record exists already under `%s', no other records can be added.\n"
-msgstr ""
-
#: src/namestore/gnunet-namestore.c:668
#, c-format
msgid ""
-"A zone key record exists already under `%s', no other records can be added.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:680
-#, c-format
-msgid ""
"A SOA record exists already under `%s', cannot add a second SOA to the same "
"zone.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:696
-#, c-format
-msgid "Records already exist under `%s', cannot add `%s' record.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:711
-#, c-format
-msgid "Records already exist under `%s', cannot add record.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:726
-#, c-format
-msgid ""
-"Non-GNS2DNS records already exist under `%s', cannot add GNS2DNS record.\n"
-msgstr ""
-
-#: src/namestore/gnunet-namestore.c:846
+#: src/namestore/gnunet-namestore.c:789
#, c-format
msgid "There are no records under label `%s' that could be deleted.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:889
+#: src/namestore/gnunet-namestore.c:832
#, c-format
msgid ""
"There are no records under label `%s' that match the request for deletion.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:970
+#: src/namestore/gnunet-namestore.c:920
#, fuzzy, c-format
msgid "Failed to replace records: %s\n"
msgstr "打开日志文件“%s”失败:%s\n"
-#: src/namestore/gnunet-namestore.c:993
+#: src/namestore/gnunet-namestore.c:943
#, c-format
msgid "No options given\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1014 src/namestore/gnunet-namestore.c:1066
-#: src/namestore/gnunet-namestore.c:1076 src/namestore/gnunet-namestore.c:1105
-#: src/namestore/gnunet-namestore.c:1126 src/namestore/gnunet-namestore.c:1153
-#: src/namestore/gnunet-namestore.c:1230
+#: src/namestore/gnunet-namestore.c:964 src/namestore/gnunet-namestore.c:1016
+#: src/namestore/gnunet-namestore.c:1026 src/namestore/gnunet-namestore.c:1055
+#: src/namestore/gnunet-namestore.c:1076 src/namestore/gnunet-namestore.c:1103
+#: src/namestore/gnunet-namestore.c:1180
#, fuzzy, c-format
msgid "Missing option `%s' for operation `%s'\n"
msgstr "配置文件“%s”已写入。\n"
-#: src/namestore/gnunet-namestore.c:1016
+#: src/namestore/gnunet-namestore.c:966
msgid "replace"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1045
+#: src/namestore/gnunet-namestore.c:995
#, fuzzy, c-format
msgid "Invalid nick `%s'\n"
msgstr "无效条目。\n"
-#: src/namestore/gnunet-namestore.c:1068 src/namestore/gnunet-namestore.c:1078
-#: src/namestore/gnunet-namestore.c:1107 src/namestore/gnunet-namestore.c:1128
-#: src/namestore/gnunet-namestore.c:1232
+#: src/namestore/gnunet-namestore.c:1018 src/namestore/gnunet-namestore.c:1028
+#: src/namestore/gnunet-namestore.c:1057 src/namestore/gnunet-namestore.c:1078
+#: src/namestore/gnunet-namestore.c:1182
msgid "add"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1086
+#: src/namestore/gnunet-namestore.c:1036
#, fuzzy, c-format
msgid "Unsupported type `%s'\n"
msgstr "未知的命令“%s”。\n"
-#: src/namestore/gnunet-namestore.c:1096
+#: src/namestore/gnunet-namestore.c:1046
#, c-format
msgid "For DNS record types `SRV', `TLSA' and `OPENPGPKEY'"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1116
+#: src/namestore/gnunet-namestore.c:1066
#, c-format
msgid "Value `%s' invalid for record type `%s'\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1135 src/namestore/gnunet-namestore.c:1239
+#: src/namestore/gnunet-namestore.c:1085 src/namestore/gnunet-namestore.c:1189
#, fuzzy, c-format
msgid "Invalid time format `%s'\n"
msgstr "IP 格式无效:“%s”\n"
-#: src/namestore/gnunet-namestore.c:1155
+#: src/namestore/gnunet-namestore.c:1105
msgid "del"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1197
+#: src/namestore/gnunet-namestore.c:1147
#, fuzzy, c-format
msgid "Invalid public key for reverse lookup `%s'\n"
msgstr "“%s”的参数无效。\n"
-#: src/namestore/gnunet-namestore.c:1222
+#: src/namestore/gnunet-namestore.c:1172
#: src/peerinfo-tool/gnunet-peerinfo.c:737
#, fuzzy, c-format
msgid "Invalid URI `%s'\n"
msgstr "无效条目。\n"
-#: src/namestore/gnunet-namestore.c:1292
+#: src/namestore/gnunet-namestore.c:1242
#, c-format
msgid "Label `%s' contains `.' which is not allowed\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1342
+#: src/namestore/gnunet-namestore.c:1292
#, c-format
msgid ""
"No default identity configured for `namestore' subsystem\n"
@@ -4864,110 +4923,115 @@ msgid ""
"Run gnunet-identity -d to get a list of choices for $NAME\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1407
+#: src/namestore/gnunet-namestore.c:1357
#, c-format
msgid "Superfluous command line arguments (starting with `%s') ignored\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1436
+#: src/namestore/gnunet-namestore.c:1386
#, fuzzy, c-format
msgid "Cannot connect to identity service\n"
msgstr "无法连接到 %s:%u:%s\n"
-#: src/namestore/gnunet-namestore.c:1483
+#: src/namestore/gnunet-namestore.c:1433
msgid "Empty record line argument is not allowed.\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1495
+#: src/namestore/gnunet-namestore.c:1445
#, c-format
msgid "Invalid expiration time `%s' (must be without unit)\n"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1507 src/namestore/gnunet-namestore.c:1523
-#: src/namestore/gnunet-namestore.c:1540
+#: src/namestore/gnunet-namestore.c:1457 src/namestore/gnunet-namestore.c:1473
+#: src/namestore/gnunet-namestore.c:1490
#, fuzzy, c-format
msgid "Missing entries in record line `%s'.\n"
msgstr "解析配置文件“%s”失败\n"
-#: src/namestore/gnunet-namestore.c:1515
+#: src/namestore/gnunet-namestore.c:1465
#, fuzzy, c-format
msgid "Unknown record type `%s'\n"
msgstr "未知的命令“%s”。\n"
-#: src/namestore/gnunet-namestore.c:1553
+#: src/namestore/gnunet-namestore.c:1503
#, fuzzy, c-format
msgid "Invalid record data for type %s: `%s'.\n"
msgstr "IP 格式无效:“%s”\n"
-#: src/namestore/gnunet-namestore.c:1610
+#: src/namestore/gnunet-namestore.c:1560
msgid "add record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1613
+#: src/namestore/gnunet-namestore.c:1563
msgid "delete record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1617
+#: src/namestore/gnunet-namestore.c:1567
msgid "display records"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1624
+#: src/namestore/gnunet-namestore.c:1574
msgid ""
"expiration time for record to use (for adding only), \"never\" is possible"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1630
+#: src/namestore/gnunet-namestore.c:1580
#, fuzzy
msgid "set the desired nick name for the zone"
msgstr "无法获取有关用户“%s”的信息:%s\n"
-#: src/namestore/gnunet-namestore.c:1635
+#: src/namestore/gnunet-namestore.c:1585
#, fuzzy
msgid "monitor changes in the namestore"
msgstr "初始化“%s”服务失败。\n"
-#: src/namestore/gnunet-namestore.c:1647
+#: src/namestore/gnunet-namestore.c:1597
#, fuzzy
msgid "determine our name for the given PKEY"
msgstr "无法获取有关用户“%s”的信息:%s\n"
-#: src/namestore/gnunet-namestore.c:1654
+#: src/namestore/gnunet-namestore.c:1604
msgid ""
"set record set to values given by (possibly multiple) RECORDLINES; can be "
"specified multiple times"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1660
+#: src/namestore/gnunet-namestore.c:1610
msgid "type of the record to add/delete/display"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1665
+#: src/namestore/gnunet-namestore.c:1615
msgid "URI to import into our zone"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1671
+#: src/namestore/gnunet-namestore.c:1621
msgid "value of the record to add/delete"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1675
+#: src/namestore/gnunet-namestore.c:1625
msgid "create or list public record"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1681
+#: src/namestore/gnunet-namestore.c:1631
msgid ""
"create shadow record (only valid if all other records of the same type have "
"expired"
msgstr ""
-#: src/namestore/gnunet-namestore.c:1687
+#: src/namestore/gnunet-namestore.c:1637
msgid "name of the ego controlling the zone"
msgstr ""
-#: src/namestore/gnunet-service-namestore.c:871
+#: src/namestore/gnunet-service-namestore.c:879
#, fuzzy, c-format
msgid "Failed to replicate block in namecache: %s\n"
msgstr "发送消息失败。\n"
+#: src/namestore/gnunet-service-namestore.c:1668
+#, fuzzy
+msgid "Store failed"
+msgstr "“%s”已连接到“%s”。\n"
+
#: src/namestore/gnunet-zoneimport.c:1847
msgid "size to use for the main hash map"
msgstr ""
@@ -4976,10 +5040,6 @@ msgstr ""
msgid "minimum expiration time we assume for imported records"
msgstr ""
-#: src/namestore/namestore_api.c:373
-msgid "Namestore failed to store record\n"
-msgstr ""
-
#: src/namestore/plugin_namestore_flat.c:195
#, c-format
msgid "File too big to map: %llu bytes.\n"
@@ -5560,6 +5620,51 @@ msgstr "初始化“%s”服务失败。\n"
msgid "Daemon to run to perform IP protocol translation to GNUnet"
msgstr ""
+#: src/reclaim/gnunet-did.c:209
+#, fuzzy, c-format
+msgid "Invalid DID `%s'\n"
+msgstr "无效条目。\n"
+
+#: src/reclaim/gnunet-did.c:835
+msgid "Create a DID Document and display its DID"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:840
+msgid "Get the DID Document associated with the given DID"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:844
+msgid "Show the DID for a given ego"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:849
+msgid "Remove the DID"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:853 src/reclaim/gnunet-did.c:857
+msgid "Replace the DID Document."
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:863
+msgid "The Decentralized Identity (DID)"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:869
+msgid "The DID Document to store in GNUNET"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:874
+msgid "The name of the EGO"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:880
+msgid "The time until the DID Document is going to expire (e.g. 5d)"
+msgstr ""
+
+#: src/reclaim/gnunet-did.c:889
+msgid "Manage Decentralized Identities (DIDs)"
+msgstr ""
+
#: src/reclaim/gnunet-reclaim.c:802
#, fuzzy, c-format
msgid "Ego is required\n"
@@ -6448,17 +6553,17 @@ msgid ""
"free topology cannot be more than %u. Given `%s = %llu'"
msgstr ""
-#: src/testbed/testbed_api_topology.c:1033 src/testing/testing.c:2643
+#: src/testbed/testbed_api_topology.c:1033 src/testing/testing.c:2657
#, c-format
msgid "Topology file %s not found\n"
msgstr ""
-#: src/testbed/testbed_api_topology.c:1041 src/testing/testing.c:2651
+#: src/testbed/testbed_api_topology.c:1041 src/testing/testing.c:2665
#, c-format
msgid "Topology file %s has no data\n"
msgstr ""
-#: src/testbed/testbed_api_topology.c:1049 src/testing/testing.c:2659
+#: src/testbed/testbed_api_topology.c:1049 src/testing/testing.c:2673
#, c-format
msgid "Topology file %s cannot be read\n"
msgstr ""
@@ -6665,7 +6770,7 @@ msgstr ""
#: src/transport/gnunet-communicator-tcp.c:3338
#: src/transport/gnunet-communicator-udp.c:3856
-#: src/transport/gnunet-service-tng.c:10512
+#: src/transport/gnunet-service-tng.c:10623
#: src/transport/gnunet-service-transport.c:2627
#, fuzzy
msgid "Transport service is lacking key configuration settings. Exiting.\n"
@@ -7852,58 +7957,58 @@ msgstr ""
msgid "Need a non-empty hostname for service `%s'.\n"
msgstr ""
-#: src/util/common_logging.c:626 src/util/common_logging.c:665
+#: src/util/common_logging.c:648 src/util/common_logging.c:687
#, c-format
msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n"
msgstr ""
-#: src/util/common_logging.c:904
+#: src/util/common_logging.c:926
#, fuzzy, c-format
msgid "Message `%.*s' repeated %u times in the last %s\n"
msgstr "消息“%.*s”重复了 %u 次,在最近 %llu 秒内\n"
-#: src/util/common_logging.c:1108
+#: src/util/common_logging.c:1131
msgid "ERROR"
msgstr "错误"
-#: src/util/common_logging.c:1110
+#: src/util/common_logging.c:1133
msgid "WARNING"
msgstr "警告"
-#: src/util/common_logging.c:1112
+#: src/util/common_logging.c:1135
msgid "MESSAGE"
msgstr ""
-#: src/util/common_logging.c:1114
+#: src/util/common_logging.c:1137
msgid "INFO"
msgstr "信息"
-#: src/util/common_logging.c:1116
+#: src/util/common_logging.c:1139
msgid "DEBUG"
msgstr "调试"
-#: src/util/common_logging.c:1118
+#: src/util/common_logging.c:1141
msgid "NONE"
msgstr ""
-#: src/util/common_logging.c:1119
+#: src/util/common_logging.c:1142
msgid "INVALID"
msgstr ""
-#: src/util/common_logging.c:1400
+#: src/util/common_logging.c:1423
msgid "unknown address"
msgstr ""
-#: src/util/common_logging.c:1445
+#: src/util/common_logging.c:1468
msgid "invalid address"
msgstr ""
-#: src/util/common_logging.c:1464
+#: src/util/common_logging.c:1487
#, fuzzy, c-format
msgid "Configuration fails to specify option `%s' in section `%s'!\n"
msgstr "配置不满足配置规范文件“%s”的约束!\n"
-#: src/util/common_logging.c:1487
+#: src/util/common_logging.c:1510
#, fuzzy, c-format
msgid ""
"Configuration specifies invalid value for option `%s' in section `%s': %s\n"
@@ -8050,17 +8155,17 @@ msgstr "打开日志文件“%s”失败:%s\n"
msgid "Could not bind to any port: %s\n"
msgstr "找不到主机“%s”的 IP:%s\n"
-#: src/util/dnsstub.c:344
+#: src/util/dnsstub.c:370
#, c-format
-msgid "Received DNS response that is too small (%u bytes)"
+msgid "Received DNS response that is too small (%u bytes)\n"
msgstr ""
-#: src/util/dnsstub.c:482
+#: src/util/dnsstub.c:508
#, fuzzy, c-format
msgid "Failed to send DNS request to %s: %s\n"
msgstr "打开日志文件“%s”失败:%s\n"
-#: src/util/dnsstub.c:487
+#: src/util/dnsstub.c:513
#, fuzzy, c-format
msgid "Sent DNS request to %s\n"
msgstr "打开日志文件“%s”失败:%s\n"
@@ -8145,83 +8250,83 @@ msgid ""
"Arguments mandatory for long options are also mandatory for short options.\n"
msgstr "长选项的必选参数对短选项也是必选的。\n"
-#: src/util/getopt_helpers.c:196
+#: src/util/getopt_helpers.c:197
msgid "print this help"
msgstr ""
-#: src/util/getopt_helpers.c:261
+#: src/util/getopt_helpers.c:262
msgid "be verbose"
msgstr ""
-#: src/util/getopt_helpers.c:377
+#: src/util/getopt_helpers.c:378
msgid "configure logging to use LOGLEVEL"
msgstr ""
-#: src/util/getopt_helpers.c:444
+#: src/util/getopt_helpers.c:445
msgid "configure logging to write logs to FILENAME"
msgstr ""
-#: src/util/getopt_helpers.c:461
+#: src/util/getopt_helpers.c:462
#, fuzzy
msgid "use configuration file FILENAME"
msgstr "更改配置文件中的一个值"
-#: src/util/getopt_helpers.c:497 src/util/getopt_helpers.c:811
-#: src/util/getopt_helpers.c:867
+#: src/util/getopt_helpers.c:498 src/util/getopt_helpers.c:812
+#: src/util/getopt_helpers.c:868
#, c-format
msgid "You must pass a number to the `%s' option.\n"
msgstr "您必须向“%s”选项传递一个数字。\n"
-#: src/util/getopt_helpers.c:569
+#: src/util/getopt_helpers.c:570
#, fuzzy, c-format
msgid ""
"You must pass a relative time (optionally with sign) to the `%s' option.\n"
msgstr "您必须向“%s”选项传递一个数字。\n"
-#: src/util/getopt_helpers.c:576
+#: src/util/getopt_helpers.c:577
#, c-format
msgid "Value given for time travel `%s' option is too big.\n"
msgstr ""
-#: src/util/getopt_helpers.c:594
+#: src/util/getopt_helpers.c:595
msgid "[+/-]MICROSECONDS"
msgstr ""
-#: src/util/getopt_helpers.c:596
+#: src/util/getopt_helpers.c:597
msgid "modify system time by given offset (for debugging/testing only)"
msgstr ""
-#: src/util/getopt_helpers.c:630
+#: src/util/getopt_helpers.c:631
#, fuzzy, c-format
msgid "You must pass relative time to the `%s' option.\n"
msgstr "您必须向“%s”选项传递一个数字。\n"
-#: src/util/getopt_helpers.c:684
+#: src/util/getopt_helpers.c:685
#, fuzzy, c-format
msgid "You must pass absolute time to the `%s' option.\n"
msgstr "您必须向“%s”选项传递一个数字。\n"
-#: src/util/getopt_helpers.c:741
+#: src/util/getopt_helpers.c:742
#, fuzzy, c-format
msgid "You must pass a timestamp to the `%s' option.\n"
msgstr "您必须向“%s”选项传递一个数字。\n"
-#: src/util/getopt_helpers.c:748
+#: src/util/getopt_helpers.c:749
#, c-format
msgid "The maximum precision allowed for timestamps is seconds.\n"
msgstr ""
-#: src/util/getopt_helpers.c:804
+#: src/util/getopt_helpers.c:805
#, c-format
msgid "Your input for the '%s' option has to be a non negative number\n"
msgstr ""
-#: src/util/getopt_helpers.c:874
+#: src/util/getopt_helpers.c:875
#, fuzzy, c-format
msgid "You must pass a number below %u to the `%s' option.\n"
msgstr "您必须向“%s”选项传递一个数字。\n"
-#: src/util/getopt_helpers.c:952
+#: src/util/getopt_helpers.c:953
#, c-format
msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n"
msgstr ""
@@ -8255,7 +8360,7 @@ msgstr ""
msgid "Manipulate GNUnet configuration files"
msgstr "更改配置文件中的一个值"
-#: src/util/gnunet-crypto-tvg.c:1072
+#: src/util/gnunet-crypto-tvg.c:1483
msgid "verify a test vector from stdin"
msgstr ""
@@ -8508,7 +8613,7 @@ msgstr "创建用户出错"
msgid "Unable to shorten unix path `%s' while keeping name unique\n"
msgstr ""
-#: src/util/network.c:1306
+#: src/util/network.c:1307
#, c-format
msgid ""
"Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n"
@@ -8636,77 +8741,77 @@ msgstr ""
msgid "Character sets requested were `%s'->`%s'\n"
msgstr ""
-#: src/util/strings.c:487
+#: src/util/strings.c:514
msgid "Failed to expand `$HOME': environment variable `HOME' not set"
msgstr "扩展“$HOME”失败:没有设置环境变量“HOME”"
-#: src/util/strings.c:1023
+#: src/util/strings.c:1050
msgid "IPv6 address did not start with `['\n"
msgstr ""
-#: src/util/strings.c:1031
+#: src/util/strings.c:1058
msgid "IPv6 address did contain ':' to separate port number\n"
msgstr ""
-#: src/util/strings.c:1038
+#: src/util/strings.c:1065
msgid "IPv6 address did contain ']' before ':' to separate port number\n"
msgstr ""
-#: src/util/strings.c:1046
+#: src/util/strings.c:1073
msgid "IPv6 address did contain a valid port number after the last ':'\n"
msgstr ""
-#: src/util/strings.c:1055
+#: src/util/strings.c:1082
#, fuzzy, c-format
msgid "Invalid IPv6 address `%s': %s\n"
msgstr "无效的进程优先级“%s”\n"
-#: src/util/strings.c:1237 src/util/strings.c:1248
+#: src/util/strings.c:1264 src/util/strings.c:1275
msgid "Port not in range\n"
msgstr ""
-#: src/util/strings.c:1257
+#: src/util/strings.c:1284
#, fuzzy, c-format
msgid "Malformed port policy `%s'\n"
msgstr "解析配置文件“%s”失败\n"
-#: src/util/strings.c:1328 src/util/strings.c:1357 src/util/strings.c:1404
-#: src/util/strings.c:1424
+#: src/util/strings.c:1355 src/util/strings.c:1384 src/util/strings.c:1431
+#: src/util/strings.c:1451
#, c-format
msgid "Invalid format for IP: `%s'\n"
msgstr "IP 格式无效:“%s”\n"
-#: src/util/strings.c:1382
+#: src/util/strings.c:1409
#, c-format
msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)."
msgstr "网络表示法无效(“/%d” 在 IPv4 CIDR 中是非法的)。"
-#: src/util/strings.c:1433
+#: src/util/strings.c:1460
#, fuzzy, c-format
msgid "Invalid format: `%s'\n"
msgstr "IP 格式无效:“%s”\n"
-#: src/util/strings.c:1475
+#: src/util/strings.c:1502
#, c-format
msgid "Invalid network notation (does not end with ';': `%s')\n"
msgstr "无效的网络表示法(没有以“;”结尾:“%s”)\n"
-#: src/util/strings.c:1525
+#: src/util/strings.c:1552
#, c-format
msgid "Wrong format `%s' for netmask\n"
msgstr "网络掩码的格式“%s”错误\n"
-#: src/util/strings.c:1556
+#: src/util/strings.c:1583
#, c-format
msgid "Wrong format `%s' for network\n"
msgstr "网络的格式“%s”错误\n"
-#: src/util/time.c:863 src/util/time.c:891
+#: src/util/time.c:870 src/util/time.c:898
#, c-format
msgid "Failed to map `%s', cannot assure monotonic time!\n"
msgstr ""
-#: src/util/time.c:899
+#: src/util/time.c:906
#, c-format
msgid ""
"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
@@ -8882,8 +8987,8 @@ msgstr ""
msgid "Setup tunnels via VPN."
msgstr ""
-#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418
-#: src/zonemaster/gnunet-service-zonemaster.c:847
+#: src/zonemaster/gnunet-service-zonemaster-monitor.c:397
+#: src/zonemaster/gnunet-service-zonemaster.c:832
#, fuzzy
msgid "Failed to connect to the namestore!\n"
msgstr "初始化“%s”服务失败。\n"
diff --git a/src/ats/ats.conf.in b/src/ats/ats.conf.in
index 4abddd99c..2c65869dd 100644
--- a/src/ats/ats.conf.in
+++ b/src/ats/ats.conf.in
@@ -15,8 +15,8 @@ MODE = proportional
# IMPORTANT: Do not lower those quotas below 10 MiB
# Or your peer may not bootstrap correctly.
# Network specific inbound/outbound quotas
-UNSPECIFIED_QUOTA_IN = 10 MiB
-UNSPECIFIED_QUOTA_OUT = 10 MiB
+UNSPECIFIED_QUOTA_IN = unlimited
+UNSPECIFIED_QUOTA_OUT = unlimited
# LOOPBACK
LOOPBACK_QUOTA_IN = unlimited
LOOPBACK_QUOTA_OUT = unlimited
@@ -27,8 +27,8 @@ LAN_QUOTA_OUT = unlimited
WAN_QUOTA_IN = 10 MiB
WAN_QUOTA_OUT = 10 MiB
# WLAN
-WLAN_QUOTA_IN = 10 MiB
-WLAN_QUOTA_OUT = 10 MiB
+WLAN_QUOTA_IN = unlimited
+WLAN_QUOTA_OUT = unlimited
# BLUETOOTH
BLUETOOTH_QUOTA_IN = 10 MiB
BLUETOOTH_QUOTA_OUT = 10 MiB
@@ -38,7 +38,7 @@ BLUETOOTH_QUOTA_OUT = 10 MiB
# How proportional to preferences is bandwidth distribution in a network
# 1.0: Fair with respect to addresses without preferences
# > 1.0: The bigger, the more respect is paid to preferences
-PROP_PROPORTIONALITY_FACTOR = 2.00
-# Should we stick to existing connections are prefer to switch?
+PROP_PROPORTIONALITY_FACTOR = 10.00
+# Should we stick to existing connections or prefer to switch?
# [1.0...2.0], lower value prefers to switch, bigger value is more tolerant
PROP_STABILITY_FACTOR = 1.25
diff --git a/src/ats/gnunet-ats-solver-eval.c b/src/ats/gnunet-ats-solver-eval.c
index 25b963532..ba7994686 100644
--- a/src/ats/gnunet-ats-solver-eval.c
+++ b/src/ats/gnunet-ats-solver-eval.c
@@ -442,7 +442,7 @@ GNUNET_ATS_solver_logging_write_to_disk (struct LoggingHandle *l, int
}
}
-cleanup:
+ cleanup:
next = lf_head;
for (cur = next; NULL != cur; cur = next)
{
@@ -1414,7 +1414,8 @@ load_op_add_address (struct GNUNET_ATS_TEST_Operation *o,
}
else
{
- GNUNET_STRINGS_utf8_toupper (op_network, op_network);
+ GNUNET_break (GNUNET_OK == GNUNET_STRINGS_utf8_toupper (op_network,
+ op_network));
if (0 == strcmp (op_network, "UNSPECIFIED"))
{
o->address_network = GNUNET_NT_UNSPECIFIED;
diff --git a/src/block/bg_bf.c b/src/block/bg_bf.c
index ae8ee0e51..601f605a2 100644
--- a/src/block/bg_bf.c
+++ b/src/block/bg_bf.c
@@ -61,7 +61,7 @@ struct BfGroupInternals
* @return #GNUNET_OK on success, #GNUNET_NO if serialization is not
* supported, #GNUNET_SYSERR on error
*/
-static int
+static enum GNUNET_GenericReturnValue
bf_group_serialize_cb (struct GNUNET_BLOCK_Group *bg,
uint32_t *nonce,
void **raw_data,
@@ -124,7 +124,7 @@ bf_group_mark_seen_cb (struct GNUNET_BLOCK_Group *bg,
* @return #GNUNET_OK on success, #GNUNET_NO if the nonces were different and thus
* we failed.
*/
-static int
+static enum GNUNET_GenericReturnValue
bf_group_merge_cb (struct GNUNET_BLOCK_Group *bg1,
const struct GNUNET_BLOCK_Group *bg2)
{
diff --git a/src/block/block.c b/src/block/block.c
index 5824946f7..2e3c1dc70 100644
--- a/src/block/block.c
+++ b/src/block/block.c
@@ -1,6 +1,6 @@
/*
This file is part of GNUnet.
- Copyright (C) 2010, 2017, 2021 GNUnet e.V.
+ Copyright (C) 2010, 2017, 2021, 2022 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
@@ -255,35 +255,6 @@ GNUNET_BLOCK_group_create (struct GNUNET_BLOCK_Context *ctx,
}
-enum GNUNET_BLOCK_EvaluationResult
-GNUNET_BLOCK_evaluate (struct GNUNET_BLOCK_Context *ctx,
- enum GNUNET_BLOCK_Type type,
- struct GNUNET_BLOCK_Group *group,
- enum GNUNET_BLOCK_EvaluationOptions eo,
- const struct GNUNET_HashCode *query,
- const void *xquery,
- size_t xquery_size,
- const void *reply_block,
- size_t reply_block_size)
-{
- struct GNUNET_BLOCK_PluginFunctions *plugin = find_plugin (ctx,
- type);
-
- if (NULL == plugin)
- return GNUNET_BLOCK_EVALUATION_TYPE_NOT_SUPPORTED;
- return plugin->evaluate (plugin->cls,
- ctx,
- type,
- group,
- eo,
- query,
- xquery,
- xquery_size,
- reply_block,
- reply_block_size);
-}
-
-
enum GNUNET_GenericReturnValue
GNUNET_BLOCK_get_key (struct GNUNET_BLOCK_Context *ctx,
enum GNUNET_BLOCK_Type type,
@@ -327,7 +298,6 @@ GNUNET_BLOCK_check_query (struct GNUNET_BLOCK_Context *ctx,
enum GNUNET_GenericReturnValue
GNUNET_BLOCK_check_block (struct GNUNET_BLOCK_Context *ctx,
enum GNUNET_BLOCK_Type type,
- const struct GNUNET_HashCode *query,
const void *block,
size_t block_size)
{
@@ -338,7 +308,6 @@ GNUNET_BLOCK_check_block (struct GNUNET_BLOCK_Context *ctx,
return GNUNET_SYSERR;
return plugin->check_block (plugin->cls,
type,
- query,
block,
block_size);
}
diff --git a/src/block/plugin_block_template.c b/src/block/plugin_block_template.c
index 13d9adfda..dcaf1afaa 100644
--- a/src/block/plugin_block_template.c
+++ b/src/block/plugin_block_template.c
@@ -1,6 +1,6 @@
/*
This file is part of GNUnet
- Copyright (C) 2010 GNUnet e.V.
+ Copyright (C) 2010, 2021, 2022 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
@@ -92,49 +92,6 @@ block_plugin_template_create_group (void *cls,
/**
- * Function called to validate a reply or a request. For
- * request evaluation, simply pass "NULL" for the reply_block.
- *
- * @param cls closure
- * @param ctx context
- * @param type block type
- * @param group block group to use
- * @param eo control flags
- * @param query original query (hash)
- * @param xquery extrended query data (can be NULL, depending on type)
- * @param xquery_size number of bytes in xquery
- * @param reply_block response to validate
- * @param reply_block_size number of bytes in reply block
- * @return characterization of result
- */
-static enum GNUNET_BLOCK_EvaluationResult
-block_plugin_template_evaluate (void *cls,
- struct GNUNET_BLOCK_Context *ctx,
- enum GNUNET_BLOCK_Type type,
- struct GNUNET_BLOCK_Group *group,
- enum GNUNET_BLOCK_EvaluationOptions eo,
- const struct GNUNET_HashCode *query,
- const void *xquery,
- size_t xquery_size,
- const void *reply_block,
- size_t reply_block_size)
-{
- struct GNUNET_HashCode chash;
-
- if (NULL == reply_block)
- return GNUNET_BLOCK_EVALUATION_REQUEST_VALID;
- GNUNET_CRYPTO_hash (reply_block,
- reply_block_size,
- &chash);
- if (GNUNET_YES ==
- GNUNET_BLOCK_GROUP_bf_test_and_set (group,
- &chash))
- return GNUNET_BLOCK_EVALUATION_OK_DUPLICATE;
- return GNUNET_BLOCK_EVALUATION_TYPE_NOT_SUPPORTED;
-}
-
-
-/**
* Function called to validate a query.
*
* @param cls closure
@@ -143,16 +100,16 @@ block_plugin_template_evaluate (void *cls,
* @param query original query (hash)
* @param xquery extrended query data (can be NULL, depending on type)
* @param xquery_size number of bytes in @a xquery
- * @return #GNUNET_OK if the query is fine, #GNUNET_NO if not
+ * @return #GNUNET_OK if the query is fine, #GNUNET_NO if not, #GNUNET_SYSERR if not supported
*/
static enum GNUNET_GenericReturnValue
block_plugin_template_check_query (void *cls,
- enum GNUNET_BLOCK_Type type,
- const struct GNUNET_HashCode *query,
- const void *xquery,
- size_t xquery_size)
+ enum GNUNET_BLOCK_Type type,
+ const struct GNUNET_HashCode *query,
+ const void *xquery,
+ size_t xquery_size)
{
- return GNUNET_OK;
+ return GNUNET_SYSERR;
}
@@ -161,19 +118,17 @@ block_plugin_template_check_query (void *cls,
*
* @param cls closure
* @param type block type
- * @param query key for the block (hash), must match exactly
* @param block block data to validate
* @param block_size number of bytes in @a block
- * @return #GNUNET_OK if the block is fine, #GNUNET_NO if not
+ * @return #GNUNET_OK if the block is fine, #GNUNET_NO if not, #GNUNET_SYSERR if not supported
*/
static enum GNUNET_GenericReturnValue
block_plugin_template_check_block (void *cls,
enum GNUNET_BLOCK_Type type,
- const struct GNUNET_HashCode *query,
const void *block,
size_t block_size)
{
- return GNUNET_OK;
+ return GNUNET_SYSERR;
}
@@ -195,16 +150,16 @@ block_plugin_template_check_block (void *cls,
*/
static enum GNUNET_BLOCK_ReplyEvaluationResult
block_plugin_template_check_reply (
- void *cls,
- enum GNUNET_BLOCK_Type type,
- struct GNUNET_BLOCK_Group *group,
- const struct GNUNET_HashCode *query,
- const void *xquery,
- size_t xquery_size,
- const void *reply_block,
- size_t reply_block_size)
+ void *cls,
+ enum GNUNET_BLOCK_Type type,
+ struct GNUNET_BLOCK_Group *group,
+ const struct GNUNET_HashCode *query,
+ const void *xquery,
+ size_t xquery_size,
+ const void *reply_block,
+ size_t reply_block_size)
{
- return GNUNET_BLOCK_REPLY_OK_MORE;
+ return GNUNET_BLOCK_REPLY_TYPE_NOT_SUPPORTED;
}
@@ -245,7 +200,6 @@ libgnunet_plugin_block_template_init (void *cls)
struct GNUNET_BLOCK_PluginFunctions *api;
api = GNUNET_new (struct GNUNET_BLOCK_PluginFunctions);
- api->evaluate = &block_plugin_template_evaluate;
api->get_key = &block_plugin_template_get_key;
api->check_query = &block_plugin_template_check_query;
api->check_block = &block_plugin_template_check_block;
diff --git a/src/block/plugin_block_test.c b/src/block/plugin_block_test.c
index fd643c4dc..05d379387 100644
--- a/src/block/plugin_block_test.c
+++ b/src/block/plugin_block_test.c
@@ -1,6 +1,6 @@
/*
This file is part of GNUnet
- Copyright (C) 2010 GNUnet e.V.
+ Copyright (C) 2010, 2021, 2022 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
@@ -90,59 +90,6 @@ block_plugin_test_create_group (void *cls,
/**
- * Function called to validate a reply or a request. For
- * request evaluation, simply pass "NULL" for the reply_block.
- *
- * @param cls closure
- * @param ctx block context
- * @param type block type
- * @param group group to check against
- * @param eo control flags
- * @param query original query (hash)
- * @param xquery extrended query data (can be NULL, depending on type)
- * @param xquery_size number of bytes in @a xquery
- * @param reply_block response to validate
- * @param reply_block_size number of bytes in @a reply_block
- * @return characterization of result
- */
-static enum GNUNET_BLOCK_EvaluationResult
-block_plugin_test_evaluate (void *cls,
- struct GNUNET_BLOCK_Context *ctx,
- enum GNUNET_BLOCK_Type type,
- struct GNUNET_BLOCK_Group *group,
- enum GNUNET_BLOCK_EvaluationOptions eo,
- const struct GNUNET_HashCode *query,
- const void *xquery,
- size_t xquery_size,
- const void *reply_block,
- size_t reply_block_size)
-{
- struct GNUNET_HashCode chash;
-
- if (GNUNET_BLOCK_TYPE_TEST != type)
- {
- GNUNET_break (0);
- return GNUNET_BLOCK_EVALUATION_TYPE_NOT_SUPPORTED;
- }
- if (0 != xquery_size)
- {
- GNUNET_break_op (0);
- return GNUNET_BLOCK_EVALUATION_REQUEST_INVALID;
- }
- if (NULL == reply_block)
- return GNUNET_BLOCK_EVALUATION_REQUEST_VALID;
- GNUNET_CRYPTO_hash (reply_block,
- reply_block_size,
- &chash);
- if (GNUNET_YES ==
- GNUNET_BLOCK_GROUP_bf_test_and_set (group,
- &chash))
- return GNUNET_BLOCK_EVALUATION_OK_DUPLICATE;
- return GNUNET_BLOCK_EVALUATION_OK_MORE;
-}
-
-
-/**
* Function called to validate a query.
*
* @param cls closure
@@ -151,15 +98,18 @@ block_plugin_test_evaluate (void *cls,
* @param query original query (hash)
* @param xquery extrended query data (can be NULL, depending on type)
* @param xquery_size number of bytes in @a xquery
- * @return #GNUNET_OK if the query is fine, #GNUNET_NO if not
+ * @return #GNUNET_OK if the query is fine, #GNUNET_NO if not, #GNUNET_SYSERR if @a type is not supported
*/
static enum GNUNET_GenericReturnValue
block_plugin_test_check_query (void *cls,
- enum GNUNET_BLOCK_Type type,
- const struct GNUNET_HashCode *query,
- const void *xquery,
- size_t xquery_size)
+ enum GNUNET_BLOCK_Type type,
+ const struct GNUNET_HashCode *query,
+ const void *xquery,
+ size_t xquery_size)
{
+ (void) cls;
+ (void) query;
+ (void) xquery;
if (GNUNET_BLOCK_TYPE_TEST != type)
{
GNUNET_break (0);
@@ -168,9 +118,9 @@ block_plugin_test_check_query (void *cls,
if (0 != xquery_size)
{
GNUNET_break_op (0);
- return GNUNET_SYSERR;
+ return GNUNET_NO;
}
- return GNUNET_BLOCK_EVALUATION_REQUEST_VALID;
+ return GNUNET_OK;
}
@@ -179,18 +129,19 @@ block_plugin_test_check_query (void *cls,
*
* @param cls closure
* @param type block type
- * @param query key for the block (hash), must match exactly
* @param block block data to validate
* @param block_size number of bytes in @a block
- * @return #GNUNET_OK if the block is fine, #GNUNET_NO if not
+ * @return #GNUNET_OK if the block is fine, #GNUNET_NO if not, #GNUNET_SYSERR if @a type is not supported
*/
static enum GNUNET_GenericReturnValue
block_plugin_test_check_block (void *cls,
- enum GNUNET_BLOCK_Type type,
- const struct GNUNET_HashCode *query,
- const void *block,
- size_t block_size)
+ enum GNUNET_BLOCK_Type type,
+ const void *block,
+ size_t block_size)
{
+ (void) cls;
+ (void) block;
+ (void) block_size;
if (GNUNET_BLOCK_TYPE_TEST != type)
{
GNUNET_break (0);
@@ -218,16 +169,20 @@ block_plugin_test_check_block (void *cls,
*/
static enum GNUNET_BLOCK_ReplyEvaluationResult
block_plugin_test_check_reply (void *cls,
- enum GNUNET_BLOCK_Type type,
- struct GNUNET_BLOCK_Group *group,
- const struct GNUNET_HashCode *query,
- const void *xquery,
- size_t xquery_size,
- const void *reply_block,
- size_t reply_block_size)
+ enum GNUNET_BLOCK_Type type,
+ struct GNUNET_BLOCK_Group *group,
+ const struct GNUNET_HashCode *query,
+ const void *xquery,
+ size_t xquery_size,
+ const void *reply_block,
+ size_t reply_block_size)
{
struct GNUNET_HashCode chash;
+ (void) cls;
+ (void) query;
+ (void) xquery;
+ (void) xquery_size;
if (GNUNET_BLOCK_TYPE_TEST != type)
{
GNUNET_break (0);
@@ -252,8 +207,7 @@ block_plugin_test_check_reply (void *cls,
* @param block block to get the key for
* @param block_size number of bytes in @a block
* @param key set to the key (query) for the given block
- * @return #GNUNET_OK on success, #GNUNET_SYSERR if type not supported
- * (or if extracting a key from a block of this type does not work)
+ * @return #GNUNET_OK on success, #GNUNET_SYSERR if type not supported, #GNUNET_NO if extracting a key from a block of this type does not work
*/
static enum GNUNET_GenericReturnValue
block_plugin_test_get_key (void *cls,
@@ -262,9 +216,16 @@ block_plugin_test_get_key (void *cls,
size_t block_size,
struct GNUNET_HashCode *key)
{
- /* always fails since there is no fixed relationship between
- * keys and values for test values */
- return GNUNET_SYSERR;
+ (void) cls;
+ (void) block;
+ (void) block_size;
+ (void) key;
+ if (GNUNET_BLOCK_TYPE_TEST != type)
+ {
+ GNUNET_break (0);
+ return GNUNET_SYSERR;
+ }
+ return GNUNET_NO;
}
@@ -284,7 +245,6 @@ libgnunet_plugin_block_test_init (void *cls)
struct GNUNET_BLOCK_PluginFunctions *api;
api = GNUNET_new (struct GNUNET_BLOCK_PluginFunctions);
- api->evaluate = &block_plugin_test_evaluate;
api->get_key = &block_plugin_test_get_key;
api->check_query = &block_plugin_test_check_query;
api->check_block = &block_plugin_test_check_block;
diff --git a/src/consensus/plugin_block_consensus.c b/src/consensus/plugin_block_consensus.c
index 430a2c0cb..f30b9b0d7 100644
--- a/src/consensus/plugin_block_consensus.c
+++ b/src/consensus/plugin_block_consensus.c
@@ -47,57 +47,6 @@ struct BlockContext
};
-/**
- * Function called to validate a reply or a request. For
- * request evaluation, simply pass "NULL" for the reply_block.
- *
- * @param cls closure
- * @param ctx context
- * @param type block type
- * @param group block group to use
- * @param eo control flags
- * @param query original query (hash)
- * @param xquery extrended query data (can be NULL, depending on type)
- * @param xquery_size number of bytes in xquery
- * @param reply_block response to validate
- * @param reply_block_size number of bytes in reply block
- * @return characterization of result
- */
-static enum GNUNET_BLOCK_EvaluationResult
-block_plugin_consensus_evaluate (void *cls,
- struct GNUNET_BLOCK_Context *ctx,
- enum GNUNET_BLOCK_Type type,
- struct GNUNET_BLOCK_Group *group,
- enum GNUNET_BLOCK_EvaluationOptions eo,
- const struct GNUNET_HashCode *query,
- const void *xquery,
- size_t xquery_size,
- const void *reply_block,
- size_t reply_block_size)
-{
- struct BlockContext *bctx = cls;
- const struct ConsensusElement *ce = reply_block;
-
- if (reply_block_size < sizeof(struct ConsensusElement))
- return GNUNET_BLOCK_EVALUATION_RESULT_INVALID;
- if ( (0 != ce->marker) ||
- (0 == ce->payload_type) )
- return GNUNET_BLOCK_EVALUATION_OK_MORE;
-
- if (NULL == bctx->bc)
- bctx->bc = GNUNET_BLOCK_context_create (bctx->cfg);
- return GNUNET_BLOCK_evaluate (bctx->bc,
- type,
- group,
- eo,
- query,
- xquery,
- xquery_size,
- &ce[1],
- reply_block_size
- - sizeof(struct ConsensusElement));
-}
-
/**
* Function called to validate a query.
@@ -128,7 +77,6 @@ block_plugin_consensus_check_query (void *cls,
*
* @param cls closure
* @param type block type
- * @param query key for the block (hash), must match exactly
* @param block block data to validate
* @param block_size number of bytes in @a block
* @return #GNUNET_OK if the block is fine, #GNUNET_NO if not
@@ -136,7 +84,6 @@ block_plugin_consensus_check_query (void *cls,
static enum GNUNET_GenericReturnValue
block_plugin_consensus_check_block (void *cls,
enum GNUNET_BLOCK_Type type,
- const struct GNUNET_HashCode *query,
const void *block,
size_t block_size)
{
@@ -144,7 +91,10 @@ block_plugin_consensus_check_block (void *cls,
const struct ConsensusElement *ce = block;
if (block_size < sizeof(*ce))
+ {
+ GNUNET_break_op (0);
return GNUNET_NO;
+ }
if ( (0 != ce->marker) ||
(0 == ce->payload_type) )
return GNUNET_OK;
@@ -152,7 +102,6 @@ block_plugin_consensus_check_block (void *cls,
ctx->bc = GNUNET_BLOCK_context_create (ctx->cfg);
return GNUNET_BLOCK_check_block (ctx->bc,
ntohl (ce->payload_type),
- query,
&ce[1],
block_size - sizeof(*ce));
}
@@ -188,8 +137,7 @@ block_plugin_consensus_check_reply (
struct BlockContext *ctx = cls;
const struct ConsensusElement *ce = reply_block;
- if (reply_block_size < sizeof(struct ConsensusElement))
- return GNUNET_NO;
+ GNUNET_assert (reply_block_size >= sizeof(struct ConsensusElement));
if ( (0 != ce->marker) ||
(0 == ce->payload_type) )
return GNUNET_BLOCK_REPLY_OK_MORE;
@@ -246,7 +194,6 @@ libgnunet_plugin_block_consensus_init (void *cls)
ctx->cfg = cfg;
api = GNUNET_new (struct GNUNET_BLOCK_PluginFunctions);
api->cls = ctx;
- api->evaluate = &block_plugin_consensus_evaluate;
api->get_key = &block_plugin_consensus_get_key;
api->check_query = &block_plugin_consensus_check_query;
api->check_block = &block_plugin_consensus_check_block;
diff --git a/src/consensus/test_consensus.conf b/src/consensus/test_consensus.conf
index 67b366405..df7fb6861 100644
--- a/src/consensus/test_consensus.conf
+++ b/src/consensus/test_consensus.conf
@@ -3,7 +3,7 @@ GNUNET_TEST_HOME = $GNUNET_TMP/test-consensus/
[consensus]
#OPTIONS = -L INFO
-BINARY = gnunet-service-evil-consensus
+BINARY = gnunet-service-consensus
#PREFIX = valgrind
diff --git a/src/datacache/datacache.c b/src/datacache/datacache.c
index 944a99aad..761ab801f 100644
--- a/src/datacache/datacache.c
+++ b/src/datacache/datacache.c
@@ -114,11 +114,11 @@ env_delete_notify (void *cls,
h->utilization -= size;
GNUNET_CONTAINER_bloomfilter_remove (h->filter, key);
GNUNET_STATISTICS_update (h->stats,
- gettext_noop ("# bytes stored"),
+ "# bytes stored",
-(long long) size,
GNUNET_NO);
GNUNET_STATISTICS_update (h->stats,
- gettext_noop ("# items stored"),
+ "# items stored",
-1,
GNUNET_NO);
}
@@ -136,15 +136,25 @@ GNUNET_DATACACHE_create (const struct GNUNET_CONFIGURATION_Handle *cfg,
const struct GNUNET_OS_ProjectData *pd;
if (GNUNET_OK !=
- GNUNET_CONFIGURATION_get_value_size (cfg, section, "QUOTA", &quota))
+ GNUNET_CONFIGURATION_get_value_size (cfg,
+ section,
+ "QUOTA",
+ &quota))
{
- GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR, section, "QUOTA");
+ GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
+ section,
+ "QUOTA");
return NULL;
}
if (GNUNET_OK !=
- GNUNET_CONFIGURATION_get_value_string (cfg, section, "DATABASE", &name))
+ GNUNET_CONFIGURATION_get_value_string (cfg,
+ section,
+ "DATABASE",
+ &name))
{
- GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR, section, "DATABASE");
+ GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
+ section,
+ "DATABASE");
return NULL;
}
bf_size = quota / 32; /* 8 bit per entry, 1 bit per 32 kb in DB */
@@ -152,10 +162,14 @@ GNUNET_DATACACHE_create (const struct GNUNET_CONFIGURATION_Handle *cfg,
ret = GNUNET_new (struct GNUNET_DATACACHE_Handle);
if (GNUNET_YES !=
- GNUNET_CONFIGURATION_get_value_yesno (cfg, section, "DISABLE_BF"))
+ GNUNET_CONFIGURATION_get_value_yesno (cfg,
+ section,
+ "DISABLE_BF"))
{
if (GNUNET_YES !=
- GNUNET_CONFIGURATION_get_value_yesno (cfg, section, "DISABLE_BF_RC"))
+ GNUNET_CONFIGURATION_get_value_yesno (cfg,
+ section,
+ "DISABLE_BF_RC"))
{
ret->bloom_name = GNUNET_DISK_mktemp ("gnunet-datacachebloom");
}
@@ -174,7 +188,8 @@ GNUNET_DATACACHE_create (const struct GNUNET_CONFIGURATION_Handle *cfg,
5); /* approx. 3% false positives at max use */
}
}
- ret->stats = GNUNET_STATISTICS_create ("datacache", cfg);
+ ret->stats = GNUNET_STATISTICS_create ("datacache",
+ cfg);
ret->section = GNUNET_strdup (section);
ret->env.cfg = cfg;
ret->env.delete_notify = &env_delete_notify;
@@ -182,25 +197,31 @@ GNUNET_DATACACHE_create (const struct GNUNET_CONFIGURATION_Handle *cfg,
ret->env.cls = ret;
ret->env.delete_notify = &env_delete_notify;
ret->env.quota = quota;
- LOG (GNUNET_ERROR_TYPE_INFO, _ ("Loading `%s' datacache plugin\n"), name);
- GNUNET_asprintf (&libname, "libgnunet_plugin_datacache_%s", name);
+ LOG (GNUNET_ERROR_TYPE_INFO,
+ "Loading `%s' datacache plugin\n",
+ name);
+ GNUNET_asprintf (&libname,
+ "libgnunet_plugin_datacache_%s",
+ name);
ret->short_name = name;
ret->lib_name = libname;
/* Load the plugin within GNUnet's default context */
pd = GNUNET_OS_project_data_get ();
GNUNET_OS_init (GNUNET_OS_project_data_default ());
- ret->api = GNUNET_PLUGIN_load (libname, &ret->env);
+ ret->api = GNUNET_PLUGIN_load (libname,
+ &ret->env);
GNUNET_OS_init (pd);
if (NULL == ret->api)
{
/* Try to load the plugin within the application's context
This normally happens when the application is not GNUnet itself but a
third party; inside GNUnet this is effectively a double failure. */
- ret->api = GNUNET_PLUGIN_load (libname, &ret->env);
+ ret->api = GNUNET_PLUGIN_load (libname,
+ &ret->env);
if (NULL == ret->api)
{
LOG (GNUNET_ERROR_TYPE_ERROR,
- _ ("Failed to load datacache plugin for `%s'\n"),
+ "Failed to load datacache plugin for `%s'\n",
name);
GNUNET_DATACACHE_destroy (ret);
return NULL;
@@ -216,7 +237,9 @@ GNUNET_DATACACHE_destroy (struct GNUNET_DATACACHE_Handle *h)
if (NULL != h->filter)
GNUNET_CONTAINER_bloomfilter_free (h->filter);
if (NULL != h->api)
- GNUNET_break (NULL == GNUNET_PLUGIN_unload (h->lib_name, h->api));
+ GNUNET_break (NULL ==
+ GNUNET_PLUGIN_unload (h->lib_name,
+ h->api));
GNUNET_free (h->lib_name);
GNUNET_free (h->short_name);
GNUNET_free (h->section);
@@ -270,17 +293,19 @@ GNUNET_DATACACHE_put (struct GNUNET_DATACACHE_Handle *h,
"Stored data under key `%s' in cache\n",
GNUNET_h2s (key));
if (NULL != h->filter)
- GNUNET_CONTAINER_bloomfilter_add (h->filter, key);
+ GNUNET_CONTAINER_bloomfilter_add (h->filter,
+ key);
GNUNET_STATISTICS_update (h->stats,
- gettext_noop ("# bytes stored"),
+ "# bytes stored",
used,
GNUNET_NO);
GNUNET_STATISTICS_update (h->stats,
- gettext_noop ("# items stored"),
+ "# items stored",
1,
GNUNET_NO);
while (h->utilization + used > h->env.quota)
- GNUNET_assert (GNUNET_OK == h->api->del (h->api->cls));
+ GNUNET_assert (GNUNET_OK ==
+ h->api->del (h->api->cls));
h->utilization += used;
return GNUNET_OK;
}
@@ -294,18 +319,18 @@ GNUNET_DATACACHE_get (struct GNUNET_DATACACHE_Handle *h,
void *iter_cls)
{
GNUNET_STATISTICS_update (h->stats,
- gettext_noop ("# requests received"),
+ "# requests received",
1,
GNUNET_NO);
LOG (GNUNET_ERROR_TYPE_DEBUG,
"Processing request for key `%s'\n",
GNUNET_h2s (key));
if ((NULL != h->filter) &&
- (GNUNET_OK != GNUNET_CONTAINER_bloomfilter_test (h->filter, key)))
+ (GNUNET_OK !=
+ GNUNET_CONTAINER_bloomfilter_test (h->filter, key)))
{
GNUNET_STATISTICS_update (h->stats,
- gettext_noop (
- "# requests filtered by bloom filter"),
+ "# requests filtered by bloom filter",
1,
GNUNET_NO);
LOG (GNUNET_ERROR_TYPE_DEBUG,
@@ -313,26 +338,33 @@ GNUNET_DATACACHE_get (struct GNUNET_DATACACHE_Handle *h,
GNUNET_h2s (key));
return 0; /* can not be present */
}
- return h->api->get (h->api->cls, key, type, iter, iter_cls);
+ return h->api->get (h->api->cls,
+ key,
+ type,
+ iter, iter_cls);
}
unsigned int
GNUNET_DATACACHE_get_closest (struct GNUNET_DATACACHE_Handle *h,
const struct GNUNET_HashCode *key,
+ enum GNUNET_BLOCK_Type type,
unsigned int num_results,
GNUNET_DATACACHE_Iterator iter,
void *iter_cls)
{
GNUNET_STATISTICS_update (h->stats,
- gettext_noop (
- "# proximity search requests received"),
+ "# proximity search requests received",
1,
GNUNET_NO);
LOG (GNUNET_ERROR_TYPE_DEBUG,
"Processing proximity search at `%s'\n",
GNUNET_h2s (key));
- return h->api->get_closest (h->api->cls, key, num_results, iter, iter_cls);
+ return h->api->get_closest (h->api->cls,
+ key,
+ type,
+ num_results,
+ iter, iter_cls);
}
diff --git a/src/datacache/plugin_datacache_heap.c b/src/datacache/plugin_datacache_heap.c
index fbd3aea9a..5b50468a5 100644
--- a/src/datacache/plugin_datacache_heap.c
+++ b/src/datacache/plugin_datacache_heap.c
@@ -158,7 +158,7 @@ struct PutContext
* @param value an existing value
* @return #GNUNET_YES if not found (to continue to iterate)
*/
-static int
+static enum GNUNET_GenericReturnValue
put_cb (void *cls,
const struct GNUNET_HashCode *key,
void *value)
@@ -224,15 +224,20 @@ heap_plugin_put (void *cls,
{
struct Plugin *plugin = cls;
struct Value *val;
- struct PutContext put_ctx;
-
- put_ctx.found = GNUNET_NO;
- put_ctx.data = data;
- put_ctx.size = size;
- put_ctx.path_info = path_info;
- put_ctx.path_info_len = path_info_len;
- put_ctx.discard_time = discard_time;
- put_ctx.type = type;
+ struct PutContext put_ctx = {
+ .data = data,
+ .size = size,
+ .path_info = path_info,
+ .path_info_len = path_info_len,
+ .discard_time = discard_time,
+ .type = type
+ };
+
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Storing %u bytes under key %s with path length %u\n",
+ (unsigned int) size,
+ GNUNET_h2s (key),
+ path_info_len);
GNUNET_CONTAINER_multihashmap_get_multiple (plugin->map,
key,
&put_cb,
@@ -313,12 +318,25 @@ get_cb (void *cls,
struct Value *val = value;
int ret;
- if ((get_ctx->type != val->type) &&
- (GNUNET_BLOCK_TYPE_ANY != get_ctx->type))
+ if ( (get_ctx->type != val->type) &&
+ (GNUNET_BLOCK_TYPE_ANY != get_ctx->type) )
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Result for key %s does not match block type %d\n",
+ GNUNET_h2s (key),
+ get_ctx->type);
return GNUNET_OK;
- if (0 ==
- GNUNET_TIME_absolute_get_remaining (val->discard_time).rel_value_us)
+ }
+ if (GNUNET_TIME_absolute_is_past (val->discard_time))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Result for key %s is expired\n",
+ GNUNET_h2s (key));
return GNUNET_OK;
+ }
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Found result for key %s\n",
+ GNUNET_h2s (key));
if (NULL != get_ctx->iter)
ret = get_ctx->iter (get_ctx->iter_cls,
key,
@@ -409,13 +427,16 @@ struct GetClosestContext
{
struct Value **values;
+ const struct GNUNET_HashCode *key;
+
+ enum GNUNET_BLOCK_Type type;
+
unsigned int num_results;
- const struct GNUNET_HashCode *key;
};
-static int
+static enum GNUNET_GenericReturnValue
find_closest (void *cls,
const struct GNUNET_HashCode *key,
void *value)
@@ -427,6 +448,9 @@ find_closest (void *cls,
if (1 != GNUNET_CRYPTO_hash_cmp (key,
gcc->key))
return GNUNET_OK; /* useless */
+ if ( (val->type != gcc->type) &&
+ (GNUNET_BLOCK_TYPE_ANY != gcc->type) )
+ return GNUNET_OK; /* useless */
j = gcc->num_results;
for (unsigned int i = 0; i < gcc->num_results; i++)
{
@@ -435,8 +459,9 @@ find_closest (void *cls,
j = i;
break;
}
- if (1 == GNUNET_CRYPTO_hash_cmp (&gcc->values[i]->key,
- key))
+ if (1 ==
+ GNUNET_CRYPTO_hash_cmp (&gcc->values[i]->key,
+ key))
{
j = i;
break;
@@ -457,6 +482,7 @@ find_closest (void *cls,
*
* @param cls closure (internal context for the plugin)
* @param key area of the keyspace to look into
+ * @param type desired block type for the replies
* @param num_results number of results that should be returned to @a iter
* @param iter maybe NULL (to just count)
* @param iter_cls closure for @a iter
@@ -465,6 +491,7 @@ find_closest (void *cls,
static unsigned int
heap_plugin_get_closest (void *cls,
const struct GNUNET_HashCode *key,
+ enum GNUNET_BLOCK_Type type,
unsigned int num_results,
GNUNET_DATACACHE_Iterator iter,
void *iter_cls)
@@ -473,14 +500,15 @@ heap_plugin_get_closest (void *cls,
struct Value *values[num_results];
struct GetClosestContext gcc = {
.values = values,
- .num_results = num_results,
+ .type = type,
+ .num_results = num_results * 2,
.key = key
};
GNUNET_CONTAINER_multihashmap_iterate (plugin->map,
&find_closest,
&gcc);
- for (unsigned int i = 0; i < num_results; i++)
+ for (unsigned int i = 0; i < num_results * 2; i++)
{
if (NULL == values[i])
return i;
@@ -493,7 +521,7 @@ heap_plugin_get_closest (void *cls,
values[i]->path_info_len,
values[i]->path_info);
}
- return num_results;
+ return num_results * 2;
}
diff --git a/src/datacache/plugin_datacache_postgres.c b/src/datacache/plugin_datacache_postgres.c
index 6a44c44a5..1a83cda86 100644
--- a/src/datacache/plugin_datacache_postgres.c
+++ b/src/datacache/plugin_datacache_postgres.c
@@ -1,6 +1,6 @@
/*
This file is part of GNUnet
- Copyright (C) 2006, 2009, 2010, 2012, 2015, 2017, 2018 GNUnet e.V.
+ Copyright (C) 2006, 2009, 2010, 2012, 2015, 2017, 2018, 2022 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
@@ -109,9 +109,20 @@ init_connection (struct Plugin *plugin)
" ORDER BY prox ASC, discard_time ASC LIMIT 1",
0),
GNUNET_PQ_make_prepare ("get_closest",
- "SELECT discard_time,type,value,path,key FROM gn011dc "
- "WHERE key>=$1 AND discard_time >= $2 ORDER BY key ASC LIMIT $3",
- 3),
+ "(SELECT discard_time,type,value,path,key FROM gn011dc"
+ " WHERE key >= $1"
+ " AND discard_time >= $2"
+ " AND ( (type = $3) OR ( 0 = $3) )"
+ " ORDER BY key ASC"
+ " LIMIT $4)"
+ " UNION "
+ "(SELECT discard_time,type,value,path,key FROM gn011dc"
+ " WHERE key <= $1"
+ " AND discard_time >= $2"
+ " AND ( (type = $3) OR ( 0 = $3) )"
+ " ORDER BY key DESC"
+ " LIMIT $4)",
+ 4),
GNUNET_PQ_make_prepare ("delrow",
"DELETE FROM gn011dc WHERE oid=$1",
1),
@@ -511,6 +522,7 @@ extract_result_cb (void *cls,
*
* @param cls closure (internal context for the plugin)
* @param key area of the keyspace to look into
+ * @param type desired block type for the replies
* @param num_results number of results that should be returned to @a iter
* @param iter maybe NULL (to just count)
* @param iter_cls closure for @a iter
@@ -519,16 +531,19 @@ extract_result_cb (void *cls,
static unsigned int
postgres_plugin_get_closest (void *cls,
const struct GNUNET_HashCode *key,
+ enum GNUNET_BLOCK_Type type,
unsigned int num_results,
GNUNET_DATACACHE_Iterator iter,
void *iter_cls)
{
struct Plugin *plugin = cls;
uint32_t num_results32 = (uint32_t) num_results;
+ uint32_t type32 = (uint32_t) type;
struct GNUNET_TIME_Absolute now;
struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_auto_from_type (key),
GNUNET_PQ_query_param_absolute_time (&now),
+ GNUNET_PQ_query_param_uint32 (&type32),
GNUNET_PQ_query_param_uint32 (&num_results32),
GNUNET_PQ_query_param_end
};
diff --git a/src/datacache/plugin_datacache_sqlite.c b/src/datacache/plugin_datacache_sqlite.c
index d08b32caf..6f2165433 100644
--- a/src/datacache/plugin_datacache_sqlite.c
+++ b/src/datacache/plugin_datacache_sqlite.c
@@ -454,6 +454,7 @@ sqlite_plugin_del (void *cls)
*
* @param cls closure (internal context for the plugin)
* @param key area of the keyspace to look into
+ * @param type desired block type for the replies
* @param num_results number of results that should be returned to @a iter
* @param iter maybe NULL (to just count)
* @param iter_cls closure for @a iter
@@ -462,11 +463,13 @@ sqlite_plugin_del (void *cls)
static unsigned int
sqlite_plugin_get_closest (void *cls,
const struct GNUNET_HashCode *key,
+ enum GNUNET_BLOCK_Type type,
unsigned int num_results,
GNUNET_DATACACHE_Iterator iter,
void *iter_cls)
{
struct Plugin *plugin = cls;
+ uint32_t type32 = type;
uint32_t num_results32 = num_results;
struct GNUNET_TIME_Absolute now;
struct GNUNET_TIME_Absolute exp;
@@ -474,38 +477,46 @@ sqlite_plugin_get_closest (void *cls,
void *dat;
unsigned int cnt;
size_t psize;
- uint32_t type;
+ uint32_t rtype;
struct GNUNET_HashCode hc;
struct GNUNET_DHT_PathElement *path;
- struct GNUNET_SQ_QueryParam params[] =
- { GNUNET_SQ_query_param_auto_from_type (key),
+ struct GNUNET_SQ_QueryParam params[] = {
+ GNUNET_SQ_query_param_auto_from_type (key),
GNUNET_SQ_query_param_absolute_time (&now),
+ GNUNET_SQ_query_param_uint32 (&type32),
GNUNET_SQ_query_param_uint32 (&num_results32),
- GNUNET_SQ_query_param_end };
- struct GNUNET_SQ_ResultSpec rs[] =
- { GNUNET_SQ_result_spec_variable_size (&dat, &size),
+ GNUNET_SQ_query_param_end
+ };
+ struct GNUNET_SQ_ResultSpec rs[] = {
+ GNUNET_SQ_result_spec_variable_size (&dat, &size),
GNUNET_SQ_result_spec_absolute_time (&exp),
GNUNET_SQ_result_spec_variable_size ((void **) &path, &psize),
- GNUNET_SQ_result_spec_uint32 (&type),
+ GNUNET_SQ_result_spec_uint32 (&rtype),
GNUNET_SQ_result_spec_auto_from_type (&hc),
- GNUNET_SQ_result_spec_end };
+ GNUNET_SQ_result_spec_end
+ };
now = GNUNET_TIME_absolute_get ();
LOG (GNUNET_ERROR_TYPE_DEBUG,
"Processing GET_CLOSEST for key `%s'\n",
GNUNET_h2s (key));
- if (GNUNET_OK != GNUNET_SQ_bind (plugin->get_closest_stmt, params))
+ if (GNUNET_OK !=
+ GNUNET_SQ_bind (plugin->get_closest_stmt,
+ params))
{
LOG_SQLITE (plugin->dbh,
GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
"sqlite3_bind_xxx");
- GNUNET_SQ_reset (plugin->dbh, plugin->get_closest_stmt);
+ GNUNET_SQ_reset (plugin->dbh,
+ plugin->get_closest_stmt);
return 0;
}
cnt = 0;
while (SQLITE_ROW == sqlite3_step (plugin->get_closest_stmt))
{
- if (GNUNET_OK != GNUNET_SQ_extract_result (plugin->get_closest_stmt, rs))
+ if (GNUNET_OK !=
+ GNUNET_SQ_extract_result (plugin->get_closest_stmt,
+ rs))
{
GNUNET_break (0);
break;
@@ -522,14 +533,22 @@ sqlite_plugin_get_closest (void *cls,
"Found %u-byte result at %s when processing GET_CLOSE\n",
(unsigned int) size,
GNUNET_h2s (&hc));
- if (GNUNET_OK != iter (iter_cls, &hc, size, dat, type, exp, psize, path))
+ if (GNUNET_OK != iter (iter_cls,
+ &hc,
+ size,
+ dat,
+ rtype,
+ exp,
+ psize,
+ path))
{
GNUNET_SQ_cleanup_result (rs);
break;
}
GNUNET_SQ_cleanup_result (rs);
}
- GNUNET_SQ_reset (plugin->dbh, plugin->get_closest_stmt);
+ GNUNET_SQ_reset (plugin->dbh,
+ plugin->get_closest_stmt);
return cnt;
}
@@ -620,7 +639,7 @@ libgnunet_plugin_datacache_sqlite_init (void *cls)
&plugin->get_stmt)) ||
(SQLITE_OK != sq_prepare (plugin->dbh,
"SELECT _ROWID_,key,value FROM ds091"
- " WHERE expire < ?"
+ " WHERE expire < ?1"
" ORDER BY expire ASC LIMIT 1",
&plugin->del_expired_stmt)) ||
(SQLITE_OK != sq_prepare (plugin->dbh,
@@ -632,8 +651,19 @@ libgnunet_plugin_datacache_sqlite_init (void *cls)
&plugin->del_stmt)) ||
(SQLITE_OK !=
sq_prepare (plugin->dbh,
- "SELECT value,expire,path,type,key FROM ds091 "
- "WHERE key>=? AND expire >= ? ORDER BY KEY ASC LIMIT ?",
+ "SELECT * FROM ("
+ " SELECT value,expire,path,type,key FROM ds091 "
+ " WHERE key>=?1 "
+ " AND expire >= ?2"
+ " AND ( (type=?3) or (0 == ?3) )"
+ " ORDER BY KEY ASC LIMIT ?4)"
+ "UNION "
+ "SELECT * FROM ("
+ " SELECT value,expire,path,type,key FROM ds091 "
+ " WHERE key<=?1 "
+ " AND expire >= ?2"
+ " AND ( (type=?3) or (0 == ?3) )"
+ " ORDER BY KEY DESC LIMIT ?4)",
&plugin->get_closest_stmt)))
{
LOG_SQLITE (plugin->dbh,
diff --git a/src/datacache/plugin_datacache_template.c b/src/datacache/plugin_datacache_template.c
index 231413ce9..2f7b41dbe 100644
--- a/src/datacache/plugin_datacache_template.c
+++ b/src/datacache/plugin_datacache_template.c
@@ -116,6 +116,7 @@ template_plugin_del (void *cls)
*
* @param cls closure (internal context for the plugin)
* @param key area of the keyspace to look into
+ * @param type desired block type for the replies
* @param num_results number of results that should be returned to @a iter
* @param iter maybe NULL (to just count)
* @param iter_cls closure for @a iter
@@ -124,6 +125,7 @@ template_plugin_del (void *cls)
static unsigned int
template_plugin_get_closest (void *cls,
const struct GNUNET_HashCode *key,
+ enum GNUNET_BLOCK_Type type,
unsigned int num_results,
GNUNET_DATACACHE_Iterator iter,
void *iter_cls)
diff --git a/src/dht/.gitignore b/src/dht/.gitignore
index 25b1daf28..bd8af1217 100644
--- a/src/dht/.gitignore
+++ b/src/dht/.gitignore
@@ -10,3 +10,4 @@ test_dht_monitor
test_dht_multipeer
test_dht_tools.py
test_dht_twopeer
+gnunet-dht-hello
diff --git a/src/dht/Makefile.am b/src/dht/Makefile.am
index be48fab02..68a17723d 100644
--- a/src/dht/Makefile.am
+++ b/src/dht/Makefile.am
@@ -50,7 +50,8 @@ libexec_PROGRAMS = \
bin_PROGRAMS = \
gnunet-dht-monitor \
gnunet-dht-get \
- gnunet-dht-put
+ gnunet-dht-put \
+ gnunet-dht-hello
noinst_PROGRAMS = \
gnunet-dht-profiler
@@ -58,8 +59,6 @@ noinst_PROGRAMS = \
gnunet_service_dht_SOURCES = \
gnunet-service-dht.c gnunet-service-dht.h \
gnunet-service-dht_datacache.c gnunet-service-dht_datacache.h \
- gnunet-service-dht_hello.c gnunet-service-dht_hello.h \
- gnunet-service-dht_nse.c gnunet-service-dht_nse.h \
gnunet-service-dht_neighbours.c gnunet-service-dht_neighbours.h \
gnunet-service-dht_routing.c gnunet-service-dht_routing.h
gnunet_service_dht_LDADD = \
@@ -72,6 +71,7 @@ gnunet_service_dht_LDADD = \
$(top_builddir)/src/peerinfo/libgnunetpeerinfo.la \
$(top_builddir)/src/hello/libgnunethello.la \
$(top_builddir)/src/block/libgnunetblock.la \
+ $(top_builddir)/src/block/libgnunetblockgroup.la \
$(top_builddir)/src/datacache/libgnunetdatacache.la \
$(top_builddir)/src/util/libgnunetutil.la \
-lm
@@ -82,16 +82,22 @@ gnunet_dht_get_SOURCES = \
gnunet-dht-get.c
gnunet_dht_get_LDADD = \
libgnunetdht.la \
- $(top_builddir)/src/core/libgnunetcore.la \
$(top_builddir)/src/util/libgnunetutil.la
gnunet_dht_get_LDFLAGS = \
$(GN_LIBINTL)
+gnunet_dht_hello_SOURCES = \
+ gnunet-dht-hello.c
+gnunet_dht_hello_LDADD = \
+ libgnunetdht.la \
+ $(top_builddir)/src/util/libgnunetutil.la
+gnunet_dht_hello_LDFLAGS = \
+ $(GN_LIBINTL)
+
gnunet_dht_put_SOURCES = \
gnunet-dht-put.c
gnunet_dht_put_LDADD = \
libgnunetdht.la \
- $(top_builddir)/src/core/libgnunetcore.la \
$(top_builddir)/src/util/libgnunetutil.la
gnunet_dht_put_LDFLAGS = \
$(GN_LIBINTL)
@@ -100,7 +106,6 @@ gnunet_dht_monitor_SOURCES = \
gnunet-dht-monitor.c
gnunet_dht_monitor_LDADD = \
libgnunetdht.la \
- $(top_builddir)/src/core/libgnunetcore.la \
$(top_builddir)/src/util/libgnunetutil.la
gnunet_dht_monitor_LDFLAGS = \
$(GN_LIBINTL)
@@ -199,7 +204,6 @@ test_dht_monitor_LDADD = \
libgnunetdht.la
EXTRA_DIST = \
- $(check_SCRIPTS) \
gnunet-service-dht_clients.c \
test_dht_api_data.conf \
test_dht_api_peer1.conf \
@@ -209,7 +213,10 @@ EXTRA_DIST = \
test_dht_line.conf \
test_dht_tools.conf \
test_dht_tools.py.in \
- test_dht_multipeer_topology.dat
+ test_dht_multipeer_topology.dat \
+ dhtu_testbed_connect.sh \
+ dhtu_testbed_deploy.conf \
+ dhtu_testbed_deploy.sh
if HAVE_PYTHON
check_SCRIPTS = \
diff --git a/src/dht/dht_api.c b/src/dht/dht_api.c
index 8389bbb95..474198004 100644
--- a/src/dht/dht_api.c
+++ b/src/dht/dht_api.c
@@ -1,6 +1,6 @@
/*
This file is part of GNUnet.
- Copyright (C) 2009, 2010, 2011, 2012, 2016, 2018 GNUnet e.V.
+ Copyright (C) 2009-2012, 2016, 2018, 2022 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
@@ -197,6 +197,40 @@ struct GNUNET_DHT_MonitorHandle
/**
+ * Handle to get a HELLO URL from the DHT for manual bootstrapping.
+ */
+struct GNUNET_DHT_HelloGetHandle
+{
+
+ /**
+ * DLL.
+ */
+ struct GNUNET_DHT_HelloGetHandle *next;
+
+ /**
+ * DLL.
+ */
+ struct GNUNET_DHT_HelloGetHandle *prev;
+
+ /**
+ * Function to call with the result.
+ */
+ GNUNET_DHT_HelloGetCallback cb;
+
+ /**
+ * Closure for @a cb.
+ */
+ void *cb_cls;
+
+ /**
+ * Connection to the DHT service.
+ */
+ struct GNUNET_DHT_Handle *dht_handle;
+
+};
+
+
+/**
* Connection to the DHT service.
*/
struct GNUNET_DHT_Handle
@@ -232,6 +266,16 @@ struct GNUNET_DHT_Handle
struct GNUNET_DHT_PutHandle *put_tail;
/**
+ * DLL.
+ */
+ struct GNUNET_DHT_HelloGetHandle *hgh_head;
+
+ /**
+ * DLL.
+ */
+ struct GNUNET_DHT_HelloGetHandle *hgh_tail;
+
+ /**
* Hash map containing the current outstanding unique GET requests
* (values are of type `struct GNUNET_DHT_GetHandle`).
*/
@@ -517,9 +561,10 @@ handle_monitor_get (void *cls,
const struct GNUNET_DHT_MonitorGetMessage *msg)
{
struct GNUNET_DHT_Handle *handle = cls;
- struct GNUNET_DHT_MonitorHandle *mh;
- for (mh = handle->monitor_head; NULL != mh; mh = mh->next)
+ for (struct GNUNET_DHT_MonitorHandle *mh = handle->monitor_head;
+ NULL != mh;
+ mh = mh->next)
{
if (NULL == mh->get_cb)
continue;
@@ -582,10 +627,12 @@ handle_monitor_get_resp (void *cls,
const struct GNUNET_DHT_PathElement *path;
uint32_t getl = ntohl (msg->get_path_length);
uint32_t putl = ntohl (msg->put_path_length);
- struct GNUNET_DHT_MonitorHandle *mh;
+
path = (const struct GNUNET_DHT_PathElement *) &msg[1];
- for (mh = handle->monitor_head; NULL != mh; mh = mh->next)
+ for (struct GNUNET_DHT_MonitorHandle *mh = handle->monitor_head;
+ NULL != mh;
+ mh = mh->next)
{
if (NULL == mh->get_resp_cb)
continue;
@@ -597,9 +644,9 @@ handle_monitor_get_resp (void *cls,
sizeof(struct GNUNET_HashCode)))))
mh->get_resp_cb (mh->cb_cls,
(enum GNUNET_BLOCK_Type) ntohl (msg->type),
- path,
+ &path[putl],
getl,
- &path[getl],
+ path,
putl,
GNUNET_TIME_absolute_ntoh (msg->expiration_time),
&msg->key,
@@ -726,14 +773,21 @@ process_client_result (void *cls,
const struct GNUNET_DHT_ClientResultMessage *crm = cls;
struct GNUNET_DHT_GetHandle *get_handle = value;
size_t msize = ntohs (crm->header.size) - sizeof(*crm);
+ uint16_t type = ntohl (crm->type);
uint32_t put_path_length = ntohl (crm->put_path_length);
uint32_t get_path_length = ntohl (crm->get_path_length);
- const struct GNUNET_DHT_PathElement *put_path;
- const struct GNUNET_DHT_PathElement *get_path;
+ const struct GNUNET_DHT_PathElement *put_path
+ = (const struct GNUNET_DHT_PathElement *) &crm[1];
+ const struct GNUNET_DHT_PathElement *get_path
+ = &put_path[put_path_length];
+ const void *data
+ = &get_path[get_path_length];
+ size_t meta_length
+ = sizeof(struct GNUNET_DHT_PathElement) * (get_path_length
+ + put_path_length);
+ size_t data_length
+ = msize - meta_length;
struct GNUNET_HashCode hc;
- size_t data_length;
- size_t meta_length;
- const void *data;
if (crm->unique_id != get_handle->unique_id)
{
@@ -745,12 +799,14 @@ process_client_result (void *cls,
(unsigned long long) get_handle->unique_id);
return GNUNET_YES;
}
- /* FIXME: might want to check that type matches */
- meta_length =
- sizeof(struct GNUNET_DHT_PathElement) * (get_path_length + put_path_length);
- data_length = msize - meta_length;
- put_path = (const struct GNUNET_DHT_PathElement *) &crm[1];
- get_path = &put_path[put_path_length];
+ if ( (get_handle->type != GNUNET_BLOCK_TYPE_ANY) &&
+ (get_handle->type != type) )
+ {
+ /* type mismatch */
+ GNUNET_break (0);
+ return GNUNET_YES;
+ }
+
{
char *pp;
char *gp;
@@ -768,7 +824,6 @@ process_client_result (void *cls,
GNUNET_free (gp);
GNUNET_free (pp);
}
- data = &get_path[get_path_length];
/* remember that we've seen this result */
GNUNET_CRYPTO_hash (data,
data_length,
@@ -786,7 +841,7 @@ process_client_result (void *cls,
get_path_length,
put_path,
put_path_length,
- ntohl (crm->type),
+ type,
data_length,
data);
return GNUNET_YES;
@@ -813,6 +868,53 @@ handle_client_result (void *cls,
/**
+ * Process a client HELLO message received from the service.
+ *
+ * @param cls The DHT handle.
+ * @param hdr HELLO URL message from the service.
+ * @return #GNUNET_OK if @a hdr is well-formed
+ */
+static enum GNUNET_GenericReturnValue
+check_client_hello (void *cls,
+ const struct GNUNET_MessageHeader *hdr)
+{
+ uint16_t len = ntohs (hdr->size);
+ const char *buf = (const char *) &hdr[1];
+
+ (void) cls;
+ if ('\0' != buf[len - sizeof (*hdr) - 1])
+ {
+ GNUNET_break (0);
+ return GNUNET_SYSERR;
+ }
+ return GNUNET_OK;
+}
+
+
+/**
+ * Process a client HELLO message received from the service.
+ *
+ * @param cls The DHT handle.
+ * @param hdr HELLO URL message from the service.
+ */
+static void
+handle_client_hello (void *cls,
+ const struct GNUNET_MessageHeader *hdr)
+{
+ struct GNUNET_DHT_Handle *handle = cls;
+ const char *url = (const char *) &hdr[1];
+ struct GNUNET_DHT_HelloGetHandle *hgh;
+
+ while (NULL != (hgh = handle->hgh_head))
+ {
+ hgh->cb (hgh->cb_cls,
+ url);
+ GNUNET_DHT_hello_get_cancel (hgh);
+ }
+}
+
+
+/**
* Process a MQ PUT transmission notification.
*
* @param cls The DHT handle.
@@ -859,6 +961,10 @@ try_connect (struct GNUNET_DHT_Handle *h)
GNUNET_MESSAGE_TYPE_DHT_CLIENT_RESULT,
struct GNUNET_DHT_ClientResultMessage,
h),
+ GNUNET_MQ_hd_var_size (client_hello,
+ GNUNET_MESSAGE_TYPE_DHT_CLIENT_HELLO_URL,
+ struct GNUNET_MessageHeader,
+ h),
GNUNET_MQ_handler_end ()
};
@@ -1194,8 +1300,7 @@ GNUNET_DHT_pp2s (const struct GNUNET_DHT_PathElement *path,
unsigned int
-GNUNET_DHT_verify_path (const struct GNUNET_HashCode *key,
- const void *data,
+GNUNET_DHT_verify_path (const void *data,
size_t data_size,
struct GNUNET_TIME_Absolute exp_time,
const struct GNUNET_DHT_PathElement *put_path,
@@ -1207,47 +1312,125 @@ GNUNET_DHT_verify_path (const struct GNUNET_HashCode *key,
struct GNUNET_DHT_HopSignature hs = {
.purpose.purpose = htonl (GNUNET_SIGNATURE_PURPOSE_DHT_HOP),
.purpose.size = htonl (sizeof (hs)),
- .expiration_time = GNUNET_TIME_absolute_hton (exp_time),
- .key = *key,
+ .expiration_time = GNUNET_TIME_absolute_hton (exp_time)
};
+ const struct GNUNET_PeerIdentity *pred;
+ const struct GNUNET_PeerIdentity *succ;
unsigned int i;
if (0 == get_path_len + put_path_len)
return 0;
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Verifying signatures with GPL: %u PPL: %u!\n",
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "%s is verifying signatures with GPL: %u PPL: %u!\n",
+ GNUNET_i2s (me),
get_path_len,
put_path_len);
+ for (unsigned int j = 0; j<put_path_len; j++)
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "PP%u=%s\n",
+ j,
+ GNUNET_i2s (&put_path[j].pred));
+ for (unsigned int j = 0; j<get_path_len; j++)
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "GP%u=%s\n",
+ j,
+ GNUNET_i2s (&get_path[j].pred));
+
i = put_path_len + get_path_len - 1;
GNUNET_CRYPTO_hash (data,
data_size,
&hs.h_data);
while (i > 0)
{
- hs.pred = (i - 1 >= put_path_len)
- ? get_path[i - put_path_len - 1].pred
- : put_path[i - 1].pred;
+ pred = (i - 1 >= put_path_len)
+ ? &get_path[i - put_path_len - 1].pred
+ : &put_path[i - 1].pred;
if (i + 1 == get_path_len + put_path_len)
- hs.succ = *me;
+ succ = me;
else
- hs.succ = (i + 1 >= put_path_len)
- ? get_path[i + 1 - put_path_len].pred
- : put_path[i + 1].pred;
+ succ = (i + 1 >= put_path_len)
+ ? &get_path[i + 1 - put_path_len].pred
+ : &put_path[i + 1].pred;
+ hs.pred = *pred;
+ hs.succ = *succ;
if (GNUNET_OK !=
GNUNET_CRYPTO_eddsa_verify (
GNUNET_SIGNATURE_PURPOSE_DHT_HOP,
&hs,
(i - 1 >= put_path_len)
- ? &get_path[i - put_path_len - 1].sig
+ ? &get_path[i - put_path_len - 1].sig
: &put_path[i - 1].sig,
(i >= put_path_len)
? &get_path[i - put_path_len].pred.public_key
: &put_path[i].pred.public_key))
+ {
+ GNUNET_break_op (0);
return i;
+ }
i--;
}
return i;
}
+struct GNUNET_DHT_HelloGetHandle *
+GNUNET_DHT_hello_get (struct GNUNET_DHT_Handle *dht_handle,
+ GNUNET_DHT_HelloGetCallback cb,
+ void *cb_cls)
+{
+ struct GNUNET_DHT_HelloGetHandle *hgh;
+ struct GNUNET_MessageHeader *hdr;
+ struct GNUNET_MQ_Envelope *env;
+
+ hgh = GNUNET_new (struct GNUNET_DHT_HelloGetHandle);
+ hgh->cb = cb;
+ hgh->cb_cls = cb_cls;
+ hgh->dht_handle = dht_handle;
+ GNUNET_CONTAINER_DLL_insert (dht_handle->hgh_head,
+ dht_handle->hgh_tail,
+ hgh);
+ env = GNUNET_MQ_msg (hdr,
+ GNUNET_MESSAGE_TYPE_DHT_CLIENT_HELLO_GET);
+ GNUNET_MQ_send (dht_handle->mq,
+ env);
+ return hgh;
+}
+
+
+void
+GNUNET_DHT_hello_get_cancel (struct GNUNET_DHT_HelloGetHandle *hgh)
+{
+ struct GNUNET_DHT_Handle *dht_handle = hgh->dht_handle;
+
+ GNUNET_CONTAINER_DLL_remove (dht_handle->hgh_head,
+ dht_handle->hgh_tail,
+ hgh);
+ GNUNET_free (hgh);
+}
+
+
+void
+GNUNET_DHT_hello_offer (struct GNUNET_DHT_Handle *dht_handle,
+ const char *url,
+ GNUNET_SCHEDULER_TaskCallback cb,
+ void *cb_cls)
+{
+ struct GNUNET_MessageHeader *hdr;
+ size_t slen = strlen (url) + 1;
+ struct GNUNET_MQ_Envelope *env;
+
+ env = GNUNET_MQ_msg_extra (hdr,
+ slen,
+ GNUNET_MESSAGE_TYPE_DHT_CLIENT_HELLO_URL);
+ memcpy (&hdr[1],
+ url,
+ slen);
+ GNUNET_MQ_notify_sent (env,
+ cb,
+ cb_cls);
+ GNUNET_MQ_send (dht_handle->mq,
+ env);
+}
+
+
/* end of dht_api.c */
diff --git a/src/dht/dhtu_testbed_connect.sh b/src/dht/dhtu_testbed_connect.sh
new file mode 100755
index 000000000..871e9eb1b
--- /dev/null
+++ b/src/dht/dhtu_testbed_connect.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+# This file is in the public domain.
+
+# Helper script for dhtu_testbed_deploy.sh.
+# Do not invoke directly.
+
+n=$1
+CFG="/tmp/deployment/${n}.conf"
+HELLO=`gnunet-dht-hello -c $CFG`
+
+# Create dense topology:
+#for OFF in `seq 1 $MAX`
+#do
+# TCFG="/tmp/deployment/${OFF}.conf"
+# gnunet-dht-hello -c $TCFG $HELLO
+#done
+#exit 0
+
+# Create sparse topology:
+R=1
+while test `expr $R \* $R \* $R` -lt $MAX
+do
+ END=`expr $R \* $R`
+ for M in `seq $R $R $END`
+ do
+ OFF=`expr \( $n + $M \) % $MAX`
+ TCFG="/tmp/deployment/${OFF}.conf"
+ gnunet-dht-hello -c $TCFG $HELLO
+ done
+ R=`expr $R + 1`
+done
diff --git a/src/dht/dhtu_testbed_deploy.conf b/src/dht/dhtu_testbed_deploy.conf
new file mode 100644
index 000000000..59d69894a
--- /dev/null
+++ b/src/dht/dhtu_testbed_deploy.conf
@@ -0,0 +1,26 @@
+# This file is in the public domain.
+
+# Simple configuration template to deploy a DHT testbed
+# with peers using the IP underlay.
+
+[paths]
+GNUNET_DATA_HOME=/tmp/%N%
+
+[dht]
+UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-service-dht-%N%.sock
+
+[dhtu-ip]
+ENABLED = YES
+NSE = 10
+UDP_PORT = %N%
+
+[dhtu-gnunet]
+ENABLED = NO
+
+[statistics]
+DISABLE = YES
+
+[dhtcache]
+DATABASE = heap
+QUOTA = 50 MB
+DISABLE_BF_RC = YES
diff --git a/src/dht/dhtu_testbed_deploy.sh b/src/dht/dhtu_testbed_deploy.sh
new file mode 100755
index 000000000..908bbf685
--- /dev/null
+++ b/src/dht/dhtu_testbed_deploy.sh
@@ -0,0 +1,84 @@
+#!/bin/bash
+# This file is in the public domain.
+
+# We will use UDP ports above this number.
+MINPORT=10000
+
+# Cleanup to run whenever we exit
+function cleanup()
+{
+ for n in `jobs -p`
+ do
+ kill $n 2> /dev/null || true
+ done
+ wait
+}
+
+# Install cleanup handler (except for kill -9)
+trap cleanup EXIT
+
+if test -z "$1"
+then
+ echo "Call with the number of peers to launch."
+ exit 1
+fi
+
+if test ! -x `which parallel`
+then
+ echo "This script requires GNU parallel"
+ exit 1
+fi
+
+if test ! -x `which gnunet-service-dht`
+then
+ echo "This script requires gnunet-service-dht in \$PATH"
+ exit 1
+fi
+
+if test ! -x `which gnunet-dht-hello`
+then
+ echo "This script requires gnunet-dht-hello in \$PATH"
+ exit 1
+fi
+
+MAX=`expr $1 - 1`
+
+# export GNUNET_FORCE_LOG="dht*;;;;DEBUG"
+
+echo -n "Starting $1 peers "
+mkdir -p /tmp/deployment
+for n in `seq 0 $MAX`
+do
+ PORT=`expr $MINPORT + $n`
+ CFG="/tmp/deployment/${n}.conf"
+ cat dhtu_testbed_deploy.conf | sed -e "s/%N%/$PORT/" > $CFG
+ gnunet-service-dht -c $CFG &> /tmp/deployment/$n.log &
+ echo -n "."
+done
+
+echo ""
+echo "$1 peers ready".
+
+unset GNUNET_FORCE_LOG
+
+function connect()
+{
+ n=$1
+}
+
+echo -n "Connecting peers ..."
+
+export MAX
+if test 0 != $MAX
+then
+ seq 0 $MAX | parallel ./dhtu_testbed_connect.sh :::
+fi
+
+
+echo ""
+echo "Network ready. Press ENTER to terminate the testbed!"
+echo "Interact with peers using '-c /tmp/deployment/\$N.conf'"
+
+read
+
+exit 0
diff --git a/src/dht/gnunet-dht-get.c b/src/dht/gnunet-dht-get.c
index f1076490b..42ffe75ba 100644
--- a/src/dht/gnunet-dht-get.c
+++ b/src/dht/gnunet-dht-get.c
@@ -58,6 +58,11 @@ static unsigned int verbose;
static int demultixplex_everywhere;
/**
+ * Use #GNUNET_DHT_RO_RECORD_ROUTE.
+ */
+static int record_route;
+
+/**
* Handle to the DHT
*/
static struct GNUNET_DHT_Handle *dht_handle;
@@ -160,9 +165,9 @@ get_result_iterator (void *cls,
: _ ("Result %d, type %d:\n"),
result_count,
type,
- (unsigned int) size,
+ (int) size,
(char *) data);
- if (verbose)
+ if (record_route && verbose)
{
fprintf (stdout,
" GET path: ");
@@ -200,6 +205,7 @@ run (void *cls,
const struct GNUNET_CONFIGURATION_Handle *c)
{
struct GNUNET_HashCode key;
+ enum GNUNET_DHT_RouteOption ro;
cfg = c;
if (NULL == query_key)
@@ -228,13 +234,16 @@ run (void *cls,
GNUNET_h2s_full (&key));
GNUNET_SCHEDULER_add_shutdown (&cleanup_task, NULL);
tt = GNUNET_SCHEDULER_add_delayed (timeout_request, &timeout_task, NULL);
+ ro = GNUNET_DHT_RO_NONE;
+ if (demultixplex_everywhere)
+ ro |= GNUNET_DHT_RO_DEMULTIPLEX_EVERYWHERE;
+ if (record_route)
+ ro |= GNUNET_DHT_RO_RECORD_ROUTE;
get_handle = GNUNET_DHT_get_start (dht_handle,
query_type,
&key,
replication,
- (demultixplex_everywhere)
- ? GNUNET_DHT_RO_DEMULTIPLEX_EVERYWHERE
- : GNUNET_DHT_RO_NONE,
+ ro,
NULL,
0,
&get_result_iterator,
@@ -265,6 +274,11 @@ main (int argc, char *const *argv)
"LEVEL",
gettext_noop ("how many parallel requests (replicas) to create"),
&replication),
+ GNUNET_GETOPT_option_flag (
+ 'R',
+ "record",
+ gettext_noop ("use DHT's record route option"),
+ &record_route),
GNUNET_GETOPT_option_uint (
't',
"type",
diff --git a/src/dht/gnunet-dht-hello.c b/src/dht/gnunet-dht-hello.c
new file mode 100644
index 000000000..369ed5643
--- /dev/null
+++ b/src/dht/gnunet-dht-hello.c
@@ -0,0 +1,178 @@
+/*
+ This file is part of GNUnet.
+ Copyright (C) 2022 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 dht/gnunet-dht-hello.c
+ * @brief Obtain HELLO from DHT for bootstrapping
+ * @author Christian Grothoff
+ */
+#include "platform.h"
+#include "gnunet_dht_service.h"
+
+#define LOG(kind, ...) GNUNET_log_from (kind, "dht-clients", __VA_ARGS__)
+
+/**
+ * Handle to the DHT
+ */
+static struct GNUNET_DHT_Handle *dht_handle;
+
+/**
+ * Handle to the DHT hello get operation.
+ */
+static struct GNUNET_DHT_HelloGetHandle *get_hello_handle;
+
+/**
+ * Global status value
+ */
+static int global_ret;
+
+
+/**
+ * Task run to clean up on shutdown.
+ *
+ * @param cls unused
+ */
+static void
+cleanup_task (void *cls)
+{
+ if (NULL != get_hello_handle)
+ {
+ GNUNET_DHT_hello_get_cancel (get_hello_handle);
+ get_hello_handle = NULL;
+ }
+ if (NULL != dht_handle)
+ {
+ GNUNET_DHT_disconnect (dht_handle);
+ dht_handle = NULL;
+ }
+}
+
+
+/**
+ * Task run when we are finished. Triggers shutdown.
+ *
+ * @param cls unused
+ */
+static void
+hello_done_cb (void *cls)
+{
+ GNUNET_SCHEDULER_shutdown ();
+}
+
+
+/**
+ * Function called on our HELLO.
+ *
+ * @param cls closure
+ * @param url the HELLO URL
+ */
+static void
+hello_result_cb (void *cls,
+ const char *url)
+{
+ get_hello_handle = NULL;
+ fprintf (stdout,
+ "%s\n",
+ url);
+ GNUNET_SCHEDULER_shutdown ();
+}
+
+
+/**
+ * Main function that will be run by the scheduler.
+ *
+ * @param cls closure, NULL
+ * @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)
+{
+ (void) cls;
+ (void) cfgfile;
+ GNUNET_SCHEDULER_add_shutdown (&cleanup_task,
+ NULL);
+ if (NULL == (dht_handle = GNUNET_DHT_connect (cfg,
+ 1)))
+ {
+ fprintf (stderr,
+ _ ("Failed to connect to DHT service!\n"));
+ global_ret = EXIT_NOTCONFIGURED;
+ GNUNET_SCHEDULER_shutdown ();
+ return;
+ }
+ if (NULL == args[0])
+ {
+ get_hello_handle = GNUNET_DHT_hello_get (dht_handle,
+ &hello_result_cb,
+ NULL);
+ GNUNET_break (NULL != get_hello_handle);
+ }
+ else
+ {
+ GNUNET_DHT_hello_offer (dht_handle,
+ args[0],
+ &hello_done_cb,
+ NULL);
+ }
+}
+
+
+/**
+ * Entry point for gnunet-dht-hello
+ *
+ * @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)
+{
+ struct GNUNET_GETOPT_CommandLineOption options[] = {
+ GNUNET_GETOPT_OPTION_END
+ };
+ enum GNUNET_GenericReturnValue iret;
+
+ if (GNUNET_OK !=
+ GNUNET_STRINGS_get_utf8_args (argc, argv,
+ &argc, &argv))
+ return 2;
+ iret = GNUNET_PROGRAM_run (
+ argc,
+ argv,
+ "gnunet-dht-hello [URL]",
+ gettext_noop (
+ "Obtain HELLO from DHT or provide HELLO to DHT for bootstrapping"),
+ options,
+ &run,
+ NULL);
+ if (GNUNET_SYSERR == iret)
+ return EXIT_FAILURE;
+ if (GNUNET_NO == iret)
+ return EXIT_SUCCESS;
+ return global_ret;
+}
+
+
+/* end of gnunet-dht-hello.c */
diff --git a/src/dht/gnunet-service-dht.c b/src/dht/gnunet-service-dht.c
index da46dcfee..39433791d 100644
--- a/src/dht/gnunet-service-dht.c
+++ b/src/dht/gnunet-service-dht.c
@@ -27,53 +27,335 @@
#include "platform.h"
#include "gnunet_block_lib.h"
#include "gnunet_util_lib.h"
-#include "gnunet_transport_service.h"
-#include "gnunet_transport_hello_service.h"
#include "gnunet_hello_lib.h"
+#include "gnunet_hello_uri_lib.h"
#include "gnunet_dht_service.h"
#include "gnunet_statistics_service.h"
#include "gnunet-service-dht.h"
#include "gnunet-service-dht_datacache.h"
-#include "gnunet-service-dht_hello.h"
#include "gnunet-service-dht_neighbours.h"
-#include "gnunet-service-dht_nse.h"
#include "gnunet-service-dht_routing.h"
/**
+ * How often do we broadcast our HELLO to neighbours if
+ * nothing special happens?
+ */
+#define HELLO_FREQUENCY GNUNET_TIME_UNIT_HOURS
+
+
+/**
+ * Information we keep per underlay.
+ */
+struct GDS_Underlay
+{
+
+ /**
+ * Kept in a DLL.
+ */
+ struct GDS_Underlay *next;
+
+ /**
+ * Kept in a DLL.
+ */
+ struct GDS_Underlay *prev;
+
+ /**
+ * Environment for this underlay.
+ */
+ struct GNUNET_DHTU_PluginEnvironment env;
+
+ /**
+ * Underlay API handle.
+ */
+ struct GNUNET_DHTU_PluginFunctions *dhtu;
+
+ /**
+ * current network size estimate for this underlay.
+ */
+ double network_size_estimate;
+
+ /**
+ * Name of the underlay (i.e. "gnunet" or "ip").
+ */
+ char *name;
+
+ /**
+ * Name of the library providing the underlay.
+ */
+ char *libname;
+};
+
+
+/**
+ * An address of this peer.
+ */
+struct MyAddress
+{
+ /**
+ * Kept in a DLL.
+ */
+ struct MyAddress *next;
+
+ /**
+ * Kept in a DLL.
+ */
+ struct MyAddress *prev;
+
+ /**
+ * Underlay handle for the address.
+ */
+ struct GNUNET_DHTU_Source *source;
+
+ /**
+ * Textual representation of the address.
+ */
+ char *url;
+
+ /**
+ * Underlay of this address.
+ */
+ struct GDS_Underlay *u;
+};
+
+
+/**
* Our HELLO
*/
-struct GNUNET_MessageHeader *GDS_my_hello;
+struct GNUNET_HELLO_Builder *GDS_my_hello;
/**
- * Handle to get our current HELLO.
+ * Identity of this peer.
*/
-static struct GNUNET_TRANSPORT_HelloGetHandle *ghh;
+struct GNUNET_PeerIdentity GDS_my_identity;
/**
- * Hello address expiration
+ * Hash of the identity of this peer.
*/
-struct GNUNET_TIME_Relative hello_expiration;
+struct GNUNET_HashCode GDS_my_identity_hash;
+
+/**
+ * Our private key.
+ */
+struct GNUNET_CRYPTO_EddsaPrivateKey GDS_my_private_key;
+
+/**
+ * Task broadcasting our HELLO.
+ */
+static struct GNUNET_SCHEDULER_Task *hello_task;
+
+/**
+ * Handles for the DHT underlays.
+ */
+static struct GDS_Underlay *u_head;
+
+/**
+ * Handles for the DHT underlays.
+ */
+static struct GDS_Underlay *u_tail;
+
+/**
+ * Head of addresses of this peer.
+ */
+static struct MyAddress *a_head;
+
+/**
+ * Tail of addresses of this peer.
+ */
+static struct MyAddress *a_tail;
+
+/**
+ * log of the current network size estimate, used as the point where
+ * we switch between random and deterministic routing.
+ */
+static double log_of_network_size_estimate;
+
+
+/**
+ * Callback that is called when network size estimate is updated.
+ *
+ * @param cls a `struct GDS_Underlay`
+ * @param timestamp time when the estimate was received from the server (or created by the server)
+ * @param logestimate the log(Base 2) value of the current network size estimate
+ * @param std_dev standard deviation for the estimate
+ *
+ */
+static void
+update_network_size_estimate (void *cls,
+ struct GNUNET_TIME_Absolute timestamp,
+ double logestimate,
+ double std_dev)
+{
+ struct GDS_Underlay *u = cls;
+ double sum = 0.0;
+
+ GNUNET_STATISTICS_update (GDS_stats,
+ "# Network size estimates received",
+ 1,
+ GNUNET_NO);
+ /* do not allow estimates < 0.5 */
+ u->network_size_estimate = pow (2.0,
+ GNUNET_MAX (0.5,
+ logestimate));
+ for (struct GDS_Underlay *p = u_head; NULL != p; p = p->next)
+ sum += p->network_size_estimate;
+ if (sum <= 2.0)
+ log_of_network_size_estimate = 0.5;
+ else
+ log_of_network_size_estimate = log2 (sum);
+}
+
+
+/**
+ * Return the current NSE
+ *
+ * @return the current NSE as a logarithm
+ */
+double
+GDS_NSE_get (void)
+{
+ return log_of_network_size_estimate;
+}
#include "gnunet-service-dht_clients.c"
/**
- * Receive the HELLO from transport service, free current and replace
- * if necessary.
+ * Task run periodically to broadcast our HELLO.
*
* @param cls NULL
- * @param message HELLO message of peer
*/
static void
-process_hello (void *cls,
- const struct GNUNET_MessageHeader *message)
+broadcast_hello (void *cls)
{
- GNUNET_free (GDS_my_hello);
- GDS_my_hello = GNUNET_malloc (ntohs (message->size));
- GNUNET_memcpy (GDS_my_hello,
- message,
- ntohs (message->size));
+ struct GNUNET_MessageHeader *hello;
+
+ (void) cls;
+ /* TODO: randomize! */
+ hello_task = GNUNET_SCHEDULER_add_delayed (HELLO_FREQUENCY,
+ &broadcast_hello,
+ NULL);
+ hello = GNUNET_HELLO_builder_to_dht_hello_msg (GDS_my_hello,
+ &GDS_my_private_key);
+ if (NULL == hello)
+ {
+ GNUNET_break (0);
+ return;
+ }
+ GDS_NEIGHBOURS_broadcast (hello);
+ GNUNET_free (hello);
+}
+
+
+/**
+ * Function to call with new addresses of this peer.
+ *
+ * @param cls the closure
+ * @param address address under which we are likely reachable,
+ * pointer will remain valid until @e address_del_cb is called; to be used for HELLOs. Example: "ip+udp://$PID/1.1.1.1:2086/"
+ * @param source handle for sending from this address, NULL if we can only receive
+ * @param[out] ctx storage space for DHT to use in association with this address
+ */
+static void
+u_address_add (void *cls,
+ const char *address,
+ struct GNUNET_DHTU_Source *source,
+ void **ctx)
+{
+ struct GDS_Underlay *u = cls;
+ struct MyAddress *a;
+
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Underlay adds address %s for this peer\n",
+ address);
+ a = GNUNET_new (struct MyAddress);
+ a->source = source;
+ a->url = GNUNET_strdup (address);
+ a->u = u;
+ GNUNET_CONTAINER_DLL_insert (a_head,
+ a_tail,
+ a);
+ *ctx = a;
+ GNUNET_HELLO_builder_add_address (GDS_my_hello,
+ address);
+ if (NULL != hello_task)
+ GNUNET_SCHEDULER_cancel (hello_task);
+ hello_task = GNUNET_SCHEDULER_add_now (&broadcast_hello,
+ NULL);
+}
+
+
+/**
+ * Function to call with expired addresses of this peer.
+ *
+ * @param[in] ctx storage space used by the DHT in association with this address
+ */
+static void
+u_address_del (void *ctx)
+{
+ struct MyAddress *a = ctx;
+
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Underlay deletes address %s for this peer\n",
+ a->url);
+ GNUNET_HELLO_builder_del_address (GDS_my_hello,
+ a->url);
+ GNUNET_CONTAINER_DLL_remove (a_head,
+ a_tail,
+ a);
+ GNUNET_free (a->url);
+ GNUNET_free (a);
+ if (NULL != hello_task)
+ GNUNET_SCHEDULER_cancel (hello_task);
+ hello_task = GNUNET_SCHEDULER_add_now (&broadcast_hello,
+ NULL);
+}
+
+
+void
+GDS_u_try_connect (const struct GNUNET_PeerIdentity *pid,
+ const char *address)
+{
+ for (struct GDS_Underlay *u = u_head;
+ NULL != u;
+ u = u->next)
+ u->dhtu->try_connect (u->dhtu->cls,
+ pid,
+ address);
+}
+
+
+void
+GDS_u_send (struct GDS_Underlay *u,
+ struct GNUNET_DHTU_Target *target,
+ const void *msg,
+ size_t msg_size,
+ GNUNET_SCHEDULER_TaskCallback finished_cb,
+ void *finished_cb_cls)
+{
+ u->dhtu->send (u->dhtu->cls,
+ target,
+ msg,
+ msg_size,
+ finished_cb,
+ finished_cb_cls);
+}
+
+
+void
+GDS_u_drop (struct GDS_Underlay *u,
+ struct GNUNET_DHTU_PreferenceHandle *ph)
+{
+ u->dhtu->drop (ph);
+}
+
+
+struct GNUNET_DHTU_PreferenceHandle *
+GDS_u_hold (struct GDS_Underlay *u,
+ struct GNUNET_DHTU_Target *target)
+{
+ return u->dhtu->hold (u->dhtu->cls,
+ target);
}
@@ -85,30 +367,97 @@ process_hello (void *cls,
static void
shutdown_task (void *cls)
{
- if (NULL != ghh)
+ struct GDS_Underlay *u;
+
+ while (NULL != (u = u_head))
{
- GNUNET_TRANSPORT_hello_get_cancel (ghh);
- ghh = NULL;
+ GNUNET_PLUGIN_unload (u->libname,
+ u->dhtu);
+ GNUNET_CONTAINER_DLL_remove (u_head,
+ u_tail,
+ u);
+ GNUNET_free (u->name);
+ GNUNET_free (u->libname);
+ GNUNET_free (u);
}
GDS_NEIGHBOURS_done ();
GDS_DATACACHE_done ();
GDS_ROUTING_done ();
- GDS_HELLO_done ();
- GDS_NSE_done ();
if (NULL != GDS_block_context)
{
GNUNET_BLOCK_context_destroy (GDS_block_context);
GDS_block_context = NULL;
}
+ GDS_CLIENTS_stop ();
if (NULL != GDS_stats)
{
GNUNET_STATISTICS_destroy (GDS_stats,
GNUNET_YES);
GDS_stats = NULL;
}
- GNUNET_free (GDS_my_hello);
- GDS_my_hello = NULL;
- GDS_CLIENTS_stop ();
+ if (NULL != GDS_my_hello)
+ {
+ GNUNET_HELLO_builder_free (GDS_my_hello);
+ GDS_my_hello = NULL;
+ }
+ if (NULL != hello_task)
+ {
+ GNUNET_SCHEDULER_cancel (hello_task);
+ hello_task = NULL;
+ }
+}
+
+
+/**
+ * Function iterating over all configuration sections.
+ * Loads plugins for enabled DHT underlays.
+ *
+ * @param cls NULL
+ * @param section configuration section to inspect
+ */
+static void
+load_underlay (void *cls,
+ const char *section)
+{
+ struct GDS_Underlay *u;
+ char *libname;
+
+ (void) cls;
+ if (0 != strncasecmp (section,
+ "dhtu-",
+ strlen ("dhtu-")))
+ return;
+ if (GNUNET_YES !=
+ GNUNET_CONFIGURATION_get_value_yesno (GDS_cfg,
+ section,
+ "ENABLED"))
+ return;
+ section += strlen ("dhtu-");
+ u = GNUNET_new (struct GDS_Underlay);
+ u->env.cls = u;
+ u->env.cfg = GDS_cfg;
+ u->env.address_add_cb = &u_address_add;
+ u->env.address_del_cb = &u_address_del;
+ u->env.network_size_cb = &update_network_size_estimate;
+ u->env.connect_cb = &GDS_u_connect;
+ u->env.disconnect_cb = &GDS_u_disconnect;
+ u->env.receive_cb = &GDS_u_receive;
+ GNUNET_asprintf (&libname,
+ "libgnunet_plugin_dhtu_%s",
+ section);
+ u->dhtu = GNUNET_PLUGIN_load (libname,
+ &u->env);
+ if (NULL == u->dhtu)
+ {
+ GNUNET_free (libname);
+ GNUNET_free (u);
+ return;
+ }
+ u->libname = libname;
+ u->name = GNUNET_strdup (section);
+ GNUNET_CONTAINER_DLL_insert (u_head,
+ u_tail,
+ u);
}
@@ -126,34 +475,64 @@ run (void *cls,
{
GDS_cfg = c;
GDS_service = service;
- if (GNUNET_OK !=
- GNUNET_CONFIGURATION_get_value_time (c,
- "transport",
- "HELLO_EXPIRATION",
- &hello_expiration))
{
- hello_expiration = GNUNET_CONSTANTS_HELLO_ADDRESS_EXPIRATION;
+ char *keyfile;
+
+ if (GNUNET_OK !=
+ GNUNET_CONFIGURATION_get_value_filename (GDS_cfg,
+ "PEER",
+ "PRIVATE_KEY",
+ &keyfile))
+ {
+ GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
+ "PEER",
+ "PRIVATE_KEY");
+ GNUNET_SCHEDULER_shutdown ();
+ return;
+ }
+ if (GNUNET_SYSERR ==
+ GNUNET_CRYPTO_eddsa_key_from_file (keyfile,
+ GNUNET_YES,
+ &GDS_my_private_key))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Failed to setup peer's private key\n");
+ GNUNET_free (keyfile);
+ GNUNET_SCHEDULER_shutdown ();
+ return;
+ }
+ GNUNET_free (keyfile);
}
+ GNUNET_CRYPTO_eddsa_key_get_public (&GDS_my_private_key,
+ &GDS_my_identity.public_key);
+ GDS_my_hello = GNUNET_HELLO_builder_new (&GDS_my_identity);
+ GNUNET_CRYPTO_hash (&GDS_my_identity,
+ sizeof(struct GNUNET_PeerIdentity),
+ &GDS_my_identity_hash);
GDS_block_context = GNUNET_BLOCK_context_create (GDS_cfg);
GDS_stats = GNUNET_STATISTICS_create ("dht",
GDS_cfg);
- GNUNET_SERVICE_suspend (GDS_service);
GDS_CLIENTS_init ();
GDS_ROUTING_init ();
- GDS_NSE_init ();
GDS_DATACACHE_init ();
- GDS_HELLO_init ();
- if (GNUNET_OK != GDS_NEIGHBOURS_init ())
+ GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
+ NULL);
+ if (GNUNET_OK !=
+ GDS_NEIGHBOURS_init ())
{
- shutdown_task (NULL);
+ GNUNET_SCHEDULER_shutdown ();
+ return;
+ }
+ GNUNET_CONFIGURATION_iterate_sections (GDS_cfg,
+ &load_underlay,
+ NULL);
+ if (NULL == u_head)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "No DHT underlays configured!\n");
+ GNUNET_SCHEDULER_shutdown ();
return;
}
- GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
- NULL);
- ghh = GNUNET_TRANSPORT_hello_get (GDS_cfg,
- GNUNET_TRANSPORT_AC_GLOBAL,
- &process_hello,
- NULL);
}
diff --git a/src/dht/gnunet-service-dht.h b/src/dht/gnunet-service-dht.h
index 367ff426e..a1513fcce 100644
--- a/src/dht/gnunet-service-dht.h
+++ b/src/dht/gnunet-service-dht.h
@@ -27,6 +27,7 @@
#define GNUNET_SERVICE_DHT_H
#include "gnunet-service-dht_datacache.h"
+#include "gnunet-service-dht_neighbours.h"
#include "gnunet_statistics_service.h"
#include "gnunet_transport_service.h"
@@ -34,6 +35,11 @@
#define DEBUG_DHT GNUNET_EXTRA_LOGGING
/**
+ * Information we keep per underlay.
+ */
+struct GDS_Underlay;
+
+/**
* Configuration we use.
*/
extern const struct GNUNET_CONFIGURATION_Handle *GDS_cfg;
@@ -54,9 +60,81 @@ extern struct GNUNET_BLOCK_Context *GDS_block_context;
extern struct GNUNET_STATISTICS_Handle *GDS_stats;
/**
- * Our HELLO
+ * Our HELLO builder.
+ */
+extern struct GNUNET_HELLO_Builder *GDS_my_hello;
+
+/**
+ * Identity of this peer.
+ */
+extern struct GNUNET_PeerIdentity GDS_my_identity;
+
+/**
+ * Hash of the identity of this peer.
+ */
+extern struct GNUNET_HashCode GDS_my_identity_hash;
+
+/**
+ * Our private key.
+ */
+extern struct GNUNET_CRYPTO_EddsaPrivateKey GDS_my_private_key;
+
+
+/**
+ * Ask all underlays to connect to peer @a pid at @a address.
+ *
+ * @param pid identity of the peer we would connect to
+ * @param address an address of @a pid
+ */
+void
+GDS_u_try_connect (const struct GNUNET_PeerIdentity *pid,
+ const char *address);
+
+
+/**
+ * Send message to some other participant over the network. Note that
+ * sending is not guaranteeing that the other peer actually received the
+ * message. For any given @a target, the DHT must wait for the @a
+ * finished_cb to be called before calling send() again.
+ *
+ * @param u underlay to use for transmission
+ * @param target receiver identification
+ * @param msg message
+ * @param msg_size number of bytes in @a msg
+ * @param finished_cb function called once transmission is done
+ * (not called if @a target disconnects, then only the
+ * disconnect_cb is called).
+ * @param finished_cb_cls closure for @a finished_cb
+ */
+void
+GDS_u_send (struct GDS_Underlay *u,
+ struct GNUNET_DHTU_Target *target,
+ const void *msg,
+ size_t msg_size,
+ GNUNET_SCHEDULER_TaskCallback finished_cb,
+ void *finished_cb_cls);
+
+
+/**
+ * Drop a hold @a ph from underlay @a u.
+ *
+ * @param u the underlay controlling the hold
+ * @param ph the preference handle
+ */
+void
+GDS_u_drop (struct GDS_Underlay *u,
+ struct GNUNET_DHTU_PreferenceHandle *ph);
+
+
+/**
+ * Create a hold on @a target at underlay @a u.
+ *
+ * @param u the underlay controlling the target
+ * @param target the peer to hold the connection to
*/
-extern struct GNUNET_MessageHeader *GDS_my_hello;
+struct GNUNET_DHTU_PreferenceHandle *
+GDS_u_hold (struct GDS_Underlay *u,
+ struct GNUNET_DHTU_Target *target);
/**
@@ -68,8 +146,9 @@ extern struct GNUNET_MessageHeader *GDS_my_hello;
* @param query_hash hash of the original query, might not match key in @a bd
* @param get_path_length number of entries in @a get_path
* @param get_path path the reply has taken
+ * @return true on success, false on failures
*/
-void
+bool
GDS_CLIENTS_handle_reply (const struct GDS_DATACACHE_BlockData *bd,
const struct GNUNET_HashCode *query_hash,
unsigned int get_path_length,
@@ -128,4 +207,12 @@ GDS_CLIENTS_process_put (enum GNUNET_DHT_RouteOption options,
uint32_t hop_count,
uint32_t desired_replication_level);
+/**
+ * Return the current NSE
+ *
+ * @return the current NSE as a logarithm
+ */
+double
+GDS_NSE_get (void);
+
#endif
diff --git a/src/dht/gnunet-service-dht_clients.c b/src/dht/gnunet-service-dht_clients.c
index a1c3024de..6a4f58d1f 100644
--- a/src/dht/gnunet-service-dht_clients.c
+++ b/src/dht/gnunet-service-dht_clients.c
@@ -24,7 +24,6 @@
* @author Christian Grothoff
* @author Nathan Evans
*/
-
#include "platform.h"
#include "gnunet_constants.h"
#include "gnunet_protocols.h"
@@ -36,6 +35,14 @@
/**
+ * Enable slow sanity checks to debug issues.
+ * 0: do not check
+ * 1: check all external inputs
+ * 2: check internal computations as well
+ */
+#define SANITY_CHECKS 2
+
+/**
* Should routing details be logged to stderr (for debugging)?
*/
#define LOG_TRAFFIC(kind, ...) GNUNET_log_from (kind, "dht-traffic", \
@@ -503,6 +510,15 @@ handle_dht_local_put (void *cls,
(unsigned long) (size - sizeof(struct GNUNET_DHT_ClientPutMessage)),
GNUNET_h2s (&dht_msg->key),
(unsigned int) bd.type);
+ if (GNUNET_OK !=
+ GNUNET_BLOCK_check_block (GDS_block_context,
+ bd.type,
+ bd.data,
+ bd.data_size))
+ {
+ GNUNET_break (0);
+ return;
+ }
GNUNET_STATISTICS_update (GDS_stats,
"# PUT requests received from clients",
1,
@@ -511,9 +527,9 @@ handle_dht_local_put (void *cls,
"CLIENT-PUT %s\n",
GNUNET_h2s_full (&dht_msg->key));
/* give to local clients */
- GDS_CLIENTS_handle_reply (&bd,
- &bd.key,
- 0, NULL /* get path */);
+ GNUNET_break (GDS_CLIENTS_handle_reply (&bd,
+ &bd.key,
+ 0, NULL /* get path */));
{
struct GNUNET_CONTAINER_BloomFilter *peer_bf;
@@ -561,10 +577,12 @@ static void
handle_local_result (void *cls,
const struct GDS_DATACACHE_BlockData *bd)
{
- /* FIXME: use 'cls' instead of looking up the client? */
- GDS_CLIENTS_handle_reply (bd,
- &bd->key,
- 0, NULL /* get_path */);
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Datacache provided result for query key %s\n",
+ GNUNET_h2s (&bd->key));
+ GNUNET_break (GDS_CLIENTS_handle_reply (bd,
+ &bd->key,
+ 0, NULL /* get_path */));
}
@@ -917,7 +935,7 @@ forward_reply (void *cls,
GNUNET_NO);
return GNUNET_YES; /* type mismatch */
}
- if ( (0 == (record->msg_options & GNUNET_DHT_RO_FIND_PEER)) &&
+ if ( (0 == (record->msg_options & GNUNET_DHT_RO_FIND_APPROXIMATE)) &&
(0 != GNUNET_memcmp (&frc->bd->key,
query_hash)) )
{
@@ -973,9 +991,6 @@ forward_reply (void *cls,
/* should be impossible to encounter here */
GNUNET_break (0);
return GNUNET_YES;
- case GNUNET_BLOCK_REPLY_INVALID:
- GNUNET_break_op (0);
- return GNUNET_NO;
case GNUNET_BLOCK_REPLY_IRRELEVANT:
return GNUNET_YES;
default:
@@ -996,7 +1011,7 @@ forward_reply (void *cls,
reply->put_path_length = htonl (frc->bd->put_path_length);
reply->unique_id = record->unique_id;
reply->expiration = GNUNET_TIME_absolute_hton (frc->bd->expiration_time);
- reply->key = frc->bd->key;
+ reply->key = *query_hash;
paths = (struct GNUNET_DHT_PathElement *) &reply[1];
GNUNET_memcpy (paths,
frc->bd->put_path,
@@ -1004,7 +1019,8 @@ forward_reply (void *cls,
* frc->bd->put_path_length);
GNUNET_memcpy (&paths[frc->bd->put_path_length],
frc->get_path,
- sizeof(struct GNUNET_DHT_PathElement) * frc->get_path_length);
+ sizeof(struct GNUNET_DHT_PathElement)
+ * frc->get_path_length);
GNUNET_memcpy (&paths[frc->get_path_length + frc->bd->put_path_length],
frc->bd->data,
frc->bd->data_size);
@@ -1020,7 +1036,7 @@ forward_reply (void *cls,
}
-void
+bool
GDS_CLIENTS_handle_reply (const struct GDS_DATACACHE_BlockData *bd,
const struct GNUNET_HashCode *query_hash,
unsigned int get_path_length,
@@ -1035,14 +1051,31 @@ GDS_CLIENTS_handle_reply (const struct GDS_DATACACHE_BlockData *bd,
if (msize >= GNUNET_MAX_MESSAGE_SIZE)
{
GNUNET_break (0);
- return;
+ return false;
}
+#if SANITY_CHECKS > 1
+ if (0 !=
+ GNUNET_DHT_verify_path (bd->data,
+ bd->data_size,
+ bd->expiration_time,
+ bd->put_path,
+ bd->put_path_length,
+ get_path,
+ get_path_length,
+ &GDS_my_identity))
+ {
+ GNUNET_break (0);
+ return false;
+ }
+#endif
frc.bd = bd;
frc.get_path = get_path;
frc.get_path_length = get_path_length;
LOG (GNUNET_ERROR_TYPE_DEBUG,
- "Forwarding reply for query hash %s to client\n",
- GNUNET_h2s (query_hash));
+ "Forwarding reply for query hash %s with GPL %u and PPL %u to client\n",
+ GNUNET_h2s (query_hash),
+ get_path_length,
+ bd->put_path_length);
if (0 ==
GNUNET_CONTAINER_multihashmap_get_multiple (forward_map,
query_hash,
@@ -1057,6 +1090,102 @@ GDS_CLIENTS_handle_reply (const struct GDS_DATACACHE_BlockData *bd,
1,
GNUNET_NO);
}
+ return true;
+}
+
+
+/* **************** HELLO logic ***************** */
+
+/**
+ * Handler for HELLO GET message. Reply to client
+ * with a URL of our HELLO.
+ *
+ * @param cls the client we received this message from
+ * @param msg the actual message received
+ *
+ */
+static void
+handle_dht_local_hello_get (void *cls,
+ const struct GNUNET_MessageHeader *msg)
+{
+ struct ClientHandle *ch = cls;
+ char *url = GNUNET_HELLO_builder_to_url (GDS_my_hello,
+ &GDS_my_private_key);
+ size_t slen = strlen (url) + 1;
+ struct GNUNET_MessageHeader *hdr;
+ struct GNUNET_MQ_Envelope *env;
+
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Handling request from local client for my HELLO\n");
+ env = GNUNET_MQ_msg_extra (hdr,
+ slen,
+ GNUNET_MESSAGE_TYPE_DHT_CLIENT_HELLO_URL);
+ memcpy (&hdr[1],
+ url,
+ slen);
+ GNUNET_free (url);
+ GNUNET_MQ_send (ch->mq,
+ env);
+ GNUNET_SERVICE_client_continue (ch->client);
+}
+
+
+/**
+ * Process a client HELLO message received from the service.
+ *
+ * @param cls the client we received this message from
+ * @param hdr HELLO URL message from the service.
+ * @return #GNUNET_OK if @a hdr is well-formed
+ */
+static enum GNUNET_GenericReturnValue
+check_dht_local_hello_offer (void *cls,
+ const struct GNUNET_MessageHeader *hdr)
+{
+ uint16_t len = ntohs (hdr->size);
+ const char *buf = (const char *) &hdr[1];
+
+ (void) cls;
+ if ('\0' != buf[len - sizeof (*hdr) - 1])
+ {
+ GNUNET_break (0);
+ return GNUNET_SYSERR;
+ }
+ return GNUNET_OK;
+}
+
+
+/**
+ * Handler for HELLO OFFER message. Try to use the
+ * HELLO to connect to another peer.
+ *
+ * @param cls the client we received this message from
+ * @param msg the actual message received
+ */
+static void
+handle_dht_local_hello_offer (void *cls,
+ const struct GNUNET_MessageHeader *msg)
+{
+ struct ClientHandle *ch = cls;
+ const char *url = (const char *) &msg[1];
+ struct GNUNET_HELLO_Builder *b;
+ struct GNUNET_PeerIdentity pid;
+
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Local client provided HELLO URL %s\n",
+ url);
+ b = GNUNET_HELLO_builder_from_url (url);
+ if (NULL == b)
+ {
+ GNUNET_break (0);
+ GNUNET_SERVICE_client_drop (ch->client);
+ return;
+ }
+ GNUNET_SERVICE_client_continue (ch->client);
+ GNUNET_HELLO_builder_iterate (b,
+ &pid,
+ &GDS_try_connect,
+ &pid);
+ GNUNET_HELLO_builder_free (b);
}
@@ -1330,8 +1459,8 @@ response_action (void *cls,
bd->put_path_length * sizeof(struct GNUNET_DHT_PathElement));
GNUNET_memcpy (path,
resp_ctx->get_path,
- resp_ctx->get_path_length * sizeof(struct
- GNUNET_DHT_PathElement));
+ resp_ctx->get_path_length
+ * sizeof(struct GNUNET_DHT_PathElement));
GNUNET_memcpy (&path[resp_ctx->get_path_length],
bd->data,
bd->data_size);
@@ -1504,6 +1633,14 @@ GDS_CLIENTS_stop (void)
GNUNET_MESSAGE_TYPE_DHT_CLIENT_GET_RESULTS_KNOWN, \
struct GNUNET_DHT_ClientGetResultSeenMessage, \
NULL), \
+ GNUNET_MQ_hd_fixed_size (dht_local_hello_get, \
+ GNUNET_MESSAGE_TYPE_DHT_CLIENT_HELLO_GET, \
+ struct GNUNET_MessageHeader, \
+ NULL), \
+ GNUNET_MQ_hd_var_size (dht_local_hello_offer, \
+ GNUNET_MESSAGE_TYPE_DHT_CLIENT_HELLO_URL, \
+ struct GNUNET_MessageHeader, \
+ NULL), \
GNUNET_MQ_handler_end ())
diff --git a/src/dht/gnunet-service-dht_datacache.c b/src/dht/gnunet-service-dht_datacache.c
index cb778717b..be0a6db81 100644
--- a/src/dht/gnunet-service-dht_datacache.c
+++ b/src/dht/gnunet-service-dht_datacache.c
@@ -36,7 +36,7 @@
* How many "closest" results to we return for migration when
* asked (at most)?
*/
-#define NUM_CLOSEST 42
+#define NUM_CLOSEST 4
/**
@@ -68,7 +68,7 @@ GDS_DATACACHE_handle_put (const struct GDS_DATACACHE_BlockData *bd)
1,
GNUNET_NO);
GNUNET_CRYPTO_hash_xor (&bd->key,
- &my_identity_hash,
+ &GDS_my_identity_hash,
&xor);
r = GNUNET_DATACACHE_put (datacache,
&bd->key,
@@ -126,7 +126,7 @@ struct GetRequestContext
/**
* Return value to give back.
*/
- enum GNUNET_BLOCK_EvaluationResult eval;
+ enum GNUNET_BLOCK_ReplyEvaluationResult eval;
};
@@ -204,13 +204,6 @@ datacache_get_iterator (void *cls,
1,
GNUNET_NO);
break;
- case GNUNET_BLOCK_REPLY_INVALID:
- /* maybe it expired? */
- GNUNET_STATISTICS_update (GDS_stats,
- "# Invalid RESULTS found in datacache",
- 1,
- GNUNET_NO);
- break;
case GNUNET_BLOCK_REPLY_IRRELEVANT:
GNUNET_STATISTICS_update (GDS_stats,
"# Irrelevant RESULTS found in datacache",
@@ -222,7 +215,7 @@ datacache_get_iterator (void *cls,
}
-enum GNUNET_BLOCK_EvaluationResult
+enum GNUNET_BLOCK_ReplyEvaluationResult
GDS_DATACACHE_handle_get (const struct GNUNET_HashCode *key,
enum GNUNET_BLOCK_Type type,
const void *xquery,
@@ -231,22 +224,23 @@ GDS_DATACACHE_handle_get (const struct GNUNET_HashCode *key,
GDS_DATACACHE_GetCallback gc,
void *gc_cls)
{
- struct GetRequestContext ctx;
+ struct GetRequestContext ctx = {
+ .eval = GNUNET_BLOCK_REPLY_TYPE_NOT_SUPPORTED,
+ .key = *key,
+ .xquery = xquery,
+ .xquery_size = xquery_size,
+ .bg = bg,
+ .gc = gc,
+ .gc_cls = gc_cls
+ };
unsigned int r;
if (NULL == datacache)
- return GNUNET_BLOCK_EVALUATION_REQUEST_VALID;
+ return GNUNET_BLOCK_REPLY_TYPE_NOT_SUPPORTED;
GNUNET_STATISTICS_update (GDS_stats,
"# GET requests given to datacache",
1,
GNUNET_NO);
- ctx.eval = GNUNET_BLOCK_EVALUATION_REQUEST_VALID;
- ctx.key = *key;
- ctx.xquery = xquery;
- ctx.xquery_size = xquery_size;
- ctx.bg = bg;
- ctx.gc = gc;
- ctx.gc_cls = gc_cls;
r = GNUNET_DATACACHE_get (datacache,
key,
type,
@@ -261,85 +255,44 @@ GDS_DATACACHE_handle_get (const struct GNUNET_HashCode *key,
}
-/**
- * Closure for #datacache_get_successors_iterator().
- */
-struct SuccContext
-{
- /**
- * Function to call on the result
- */
- GDS_DATACACHE_GetCallback cb;
-
- /**
- * Closure for @e cb.
- */
- void *cb_cls;
-
-};
-
-
-/**
- * Iterator for local get request results,
- *
- * @param cls closure with the `struct GNUNET_HashCode *` with the trail ID
- * @param key the key this data is stored under
- * @param size the size of the data identified by key
- * @param data the actual data
- * @param type the type of the data
- * @param exp when does this value expire?
- * @param put_path_length number of peers in @a put_path
- * @param put_path path the reply took on put
- * @return #GNUNET_OK to continue iteration, anything else
- * to stop iteration.
- */
-static enum GNUNET_GenericReturnValue
-datacache_get_successors_iterator (void *cls,
- const struct GNUNET_HashCode *key,
- size_t size,
- const char *data,
- enum GNUNET_BLOCK_Type type,
- struct GNUNET_TIME_Absolute exp,
- unsigned int put_path_length,
- const struct
- GNUNET_DHT_PathElement *put_path)
-{
- const struct SuccContext *sc = cls;
- struct GDS_DATACACHE_BlockData bd = {
- .key = *key,
- .expiration_time = exp,
- .put_path = put_path,
- .data = data,
- .data_size = size,
- .put_path_length = put_path_length,
- .type = type
- };
-
- /* NOTE: The datacache currently does not store the RO from
- the original 'put', so we don't know the 'correct' option
- at this point anymore. Thus, we conservatively assume
- that recording is desired (for now). */
- sc->cb (sc->cb_cls,
- &bd);
- return GNUNET_OK;
-}
-
-
-void
+enum GNUNET_BLOCK_ReplyEvaluationResult
GDS_DATACACHE_get_closest (const struct GNUNET_HashCode *key,
+ enum GNUNET_BLOCK_Type type,
+ const void *xquery,
+ size_t xquery_size,
+ struct GNUNET_BLOCK_Group *bg,
GDS_DATACACHE_GetCallback cb,
void *cb_cls)
{
- struct SuccContext sc = {
- .cb = cb,
- .cb_cls = cb_cls
+ struct GetRequestContext ctx = {
+ .eval = GNUNET_BLOCK_REPLY_TYPE_NOT_SUPPORTED,
+ .key = *key,
+ .xquery = xquery,
+ .xquery_size = xquery_size,
+ .bg = bg,
+ .gc = cb,
+ .gc_cls = cb_cls
};
+ unsigned int r;
- (void) GNUNET_DATACACHE_get_closest (datacache,
- key,
- NUM_CLOSEST,
- &datacache_get_successors_iterator,
- &sc);
+ if (NULL == datacache)
+ return GNUNET_BLOCK_REPLY_TYPE_NOT_SUPPORTED;
+ GNUNET_STATISTICS_update (GDS_stats,
+ "# GET closest requests given to datacache",
+ 1,
+ GNUNET_NO);
+ r = GNUNET_DATACACHE_get_closest (datacache,
+ key,
+ type,
+ NUM_CLOSEST,
+ &datacache_get_iterator,
+ &ctx);
+ LOG (GNUNET_ERROR_TYPE_DEBUG,
+ "DATACACHE approximate GET for key %s completed (%d). %u results found.\n",
+ GNUNET_h2s (key),
+ ctx.eval,
+ r);
+ return ctx.eval;
}
diff --git a/src/dht/gnunet-service-dht_datacache.h b/src/dht/gnunet-service-dht_datacache.h
index 691a51e0e..d860139f5 100644
--- a/src/dht/gnunet-service-dht_datacache.h
+++ b/src/dht/gnunet-service-dht_datacache.h
@@ -107,7 +107,7 @@ typedef void
* @param gc_cls closure for @a gc
* @return evaluation result for the local replies
*/
-enum GNUNET_BLOCK_EvaluationResult
+enum GNUNET_BLOCK_ReplyEvaluationResult
GDS_DATACACHE_handle_get (const struct GNUNET_HashCode *key,
enum GNUNET_BLOCK_Type type,
const void *xquery,
@@ -122,11 +122,20 @@ GDS_DATACACHE_handle_get (const struct GNUNET_HashCode *key,
* another peer.
*
* @param key the location at which the peer is looking for data that is close
+ * @param type requested data type
+ * @param xquery extended query
+ * @param xquery_size number of bytes in xquery
+ * @param bg block group to use for evaluation of replies
* @param cb function to call with the result
* @param cb_cls closure for @a cb
+ * @return evaluation result for the local replies
*/
-void
+enum GNUNET_BLOCK_ReplyEvaluationResult
GDS_DATACACHE_get_closest (const struct GNUNET_HashCode *key,
+ enum GNUNET_BLOCK_Type type,
+ const void *xquery,
+ size_t xquery_size,
+ struct GNUNET_BLOCK_Group *bg,
GDS_DATACACHE_GetCallback cb,
void *cb_cls);
diff --git a/src/dht/gnunet-service-dht_hello.c b/src/dht/gnunet-service-dht_hello.c
deleted file mode 100644
index 949456575..000000000
--- a/src/dht/gnunet-service-dht_hello.c
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- This file is part of GNUnet.
- Copyright (C) 2011 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 dht/gnunet-service-dht_hello.c
- * @brief GNUnet DHT integration with peerinfo
- * @author Christian Grothoff
- *
- * TODO:
- * - consider adding mechanism to remove expired HELLOs
- */
-#include "platform.h"
-#include "gnunet-service-dht.h"
-#include "gnunet-service-dht_hello.h"
-#include "gnunet_peerinfo_service.h"
-
-
-/**
- * Handle for peerinfo notifications.
- */
-static struct GNUNET_PEERINFO_NotifyContext *pnc;
-
-/**
- * Hash map of peers to HELLOs.
- */
-static struct GNUNET_CONTAINER_MultiPeerMap *peer_to_hello;
-
-
-/**
- * Obtain a peer's HELLO if available
- *
- * @param peer peer to look for a HELLO from
- * @return HELLO for the given peer
- */
-const struct GNUNET_HELLO_Message *
-GDS_HELLO_get (const struct GNUNET_PeerIdentity *peer)
-{
- if (NULL == peer_to_hello)
- return NULL;
- return GNUNET_CONTAINER_multipeermap_get (peer_to_hello,
- peer);
-}
-
-
-/**
- * Function called for each HELLO known to PEERINFO.
- *
- * @param cls closure
- * @param peer id of the peer, NULL for last call
- * @param hello hello message for the peer (can be NULL)
- * @param err_msg error message (not used)
- *
- * FIXME this is called once per address. Merge instead of replacing?
- */
-static void
-process_hello (void *cls,
- const struct GNUNET_PeerIdentity *peer,
- const struct GNUNET_HELLO_Message *hello,
- const char *err_msg)
-{
- struct GNUNET_TIME_Absolute ex;
- struct GNUNET_HELLO_Message *hm;
-
- if (NULL == hello)
- return;
- ex = GNUNET_HELLO_get_last_expiration (hello);
- if (0 == GNUNET_TIME_absolute_get_remaining (ex).rel_value_us)
- return;
- GNUNET_STATISTICS_update (GDS_stats,
- "# HELLOs obtained from peerinfo",
- 1,
- GNUNET_NO);
- hm = GNUNET_CONTAINER_multipeermap_get (peer_to_hello,
- peer);
- GNUNET_free (hm);
- hm = GNUNET_malloc (GNUNET_HELLO_size (hello));
- GNUNET_memcpy (hm,
- hello,
- GNUNET_HELLO_size (hello));
- GNUNET_assert (GNUNET_SYSERR !=
- GNUNET_CONTAINER_multipeermap_put (peer_to_hello,
- peer,
- hm,
- GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE));
-}
-
-
-/**
- * Initialize HELLO subsystem.
- */
-void
-GDS_HELLO_init ()
-{
- pnc = GNUNET_PEERINFO_notify (GDS_cfg,
- GNUNET_NO,
- &process_hello,
- NULL);
- peer_to_hello = GNUNET_CONTAINER_multipeermap_create (256,
- GNUNET_NO);
-}
-
-
-/**
- * Free memory occopied by the HELLO.
- */
-static enum GNUNET_GenericReturnValue
-free_hello (void *cls,
- const struct GNUNET_PeerIdentity *key,
- void *hello)
-{
- GNUNET_free (hello);
- return GNUNET_OK;
-}
-
-
-/**
- * Shutdown HELLO subsystem.
- */
-void
-GDS_HELLO_done ()
-{
- if (NULL != pnc)
- {
- GNUNET_PEERINFO_notify_cancel (pnc);
- pnc = NULL;
- }
- if (NULL != peer_to_hello)
- {
- GNUNET_CONTAINER_multipeermap_iterate (peer_to_hello,
- &free_hello,
- NULL);
- GNUNET_CONTAINER_multipeermap_destroy (peer_to_hello);
- }
-}
-
-
-/* end of gnunet-service-dht_hello.c */
diff --git a/src/dht/gnunet-service-dht_hello.h b/src/dht/gnunet-service-dht_hello.h
deleted file mode 100644
index f8b90862d..000000000
--- a/src/dht/gnunet-service-dht_hello.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- This file is part of GNUnet.
- Copyright (C) 2011 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 dht/gnunet-service-dht_hello.h
- * @brief GNUnet DHT integration with peerinfo
- * @author Christian Grothoff
- */
-#ifndef GNUNET_SERVICE_DHT_HELLO_H
-#define GNUNET_SERVICE_DHT_HELLO_H
-
-#include "gnunet_util_lib.h"
-#include "gnunet_hello_lib.h"
-
-/**
- * Obtain a peer's HELLO if available
- *
- * @param peer peer to look for a HELLO from
- * @return HELLO for the given peer
- */
-const struct GNUNET_HELLO_Message *
-GDS_HELLO_get (const struct GNUNET_PeerIdentity *peer);
-
-
-/**
- * Initialize HELLO subsystem.
- */
-void
-GDS_HELLO_init (void);
-
-
-/**
- * Shutdown HELLO subsystem.
- */
-void
-GDS_HELLO_done (void);
-
-#endif
diff --git a/src/dht/gnunet-service-dht_neighbours.c b/src/dht/gnunet-service-dht_neighbours.c
index cf150ea0c..2f9cbab84 100644
--- a/src/dht/gnunet-service-dht_neighbours.c
+++ b/src/dht/gnunet-service-dht_neighbours.c
@@ -28,13 +28,10 @@
#include "gnunet_constants.h"
#include "gnunet_protocols.h"
#include "gnunet_signatures.h"
-#include "gnunet_ats_service.h"
-#include "gnunet_core_service.h"
#include "gnunet_hello_lib.h"
+#include "gnunet_hello_uri_lib.h"
#include "gnunet-service-dht.h"
-#include "gnunet-service-dht_hello.h"
#include "gnunet-service-dht_neighbours.h"
-#include "gnunet-service-dht_nse.h"
#include "gnunet-service-dht_routing.h"
#include "dht.h"
@@ -42,9 +39,17 @@
__VA_ARGS__)
/**
- * Enable slow sanity checks to debug issues.
+ * Enable slow sanity checks to debug issues.
+ *
+ * TODO: might want to eventually implement probabilistic
+ * load-based path verification, but for now it is all or nothing
+ * based on this define.
+ *
+ * 0: do not check -- if signatures become performance critical
+ * 1: check all external inputs -- normal production for now
+ * 2: check internal computations as well -- for debugging
*/
-#define SANITY_CHECKS 1
+#define SANITY_CHECKS 2
/**
* How many buckets will we allow in total.
@@ -74,6 +79,7 @@
#define DHT_MINIMUM_FIND_PEER_INTERVAL GNUNET_TIME_relative_multiply ( \
GNUNET_TIME_UNIT_MINUTES, 2)
+
/**
* How long to additionally wait on average per #bucket_size to send out the
* FIND PEER requests if we did successfully connect (!) to a a new peer and
@@ -83,7 +89,7 @@
* top). Also the range in which we randomize, so the effective value
* is half of the number given here.
*/
-#define DHT_AVG_FIND_PEER_INTERVAL GNUNET_TIME_relative_multiply ( \
+#define DHT_AVG_FIND_PEER_INTERVAL GNUNET_TIME_relative_multiply ( \
GNUNET_TIME_UNIT_SECONDS, 6)
/**
@@ -91,11 +97,6 @@
*/
#define GET_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MINUTES, 2)
-/**
- * Hello address expiration
- */
-extern struct GNUNET_TIME_Relative hello_expiration;
-
GNUNET_NETWORK_STRUCT_BEGIN
@@ -263,81 +264,134 @@ GNUNET_NETWORK_STRUCT_END
/**
* Entry for a peer in a bucket.
*/
-struct PeerInfo
+struct PeerInfo;
+
+
+/**
+ * List of targets that we can use to reach this peer.
+ */
+struct Target
{
/**
- * Next peer entry (DLL)
+ * Kept in a DLL.
*/
- struct PeerInfo *next;
+ struct Target *next;
/**
- * Prev peer entry (DLL)
+ * Kept in a DLL.
*/
- struct PeerInfo *prev;
+ struct Target *prev;
/**
* Handle for sending messages to this peer.
*/
- struct GNUNET_MQ_Handle *mq;
+ struct GNUNET_DHTU_Target *utarget;
/**
- * What is the identity of the peer?
+ * Underlay providing this target.
*/
- const struct GNUNET_PeerIdentity *id;
+ struct GDS_Underlay *u;
/**
- * Hash of @e id.
+ * Peer this is a target for.
*/
- struct GNUNET_HashCode phash;
+ struct PeerInfo *pi;
/**
- * Which bucket is this peer in?
+ * Handle used to 'hold' the connection to this peer.
*/
- int peer_bucket;
+ struct GNUNET_DHTU_PreferenceHandle *ph;
+
+ /**
+ * Set to number of messages are waiting for the transmission to finish.
+ */
+ unsigned int load;
+
+ /**
+ * Set to @a true if the target was dropped, but we could not clean
+ * up yet because @e busy was also true.
+ */
+ bool dropped;
+
};
/**
- * Peers are grouped into buckets.
+ * Entry for a peer in a bucket.
*/
-struct PeerBucket
+struct PeerInfo
{
/**
- * Head of DLL
+ * What is the identity of the peer?
*/
- struct PeerInfo *head;
+ struct GNUNET_PeerIdentity id;
/**
- * Tail of DLL
+ * Hash of @e id.
*/
- struct PeerInfo *tail;
+ struct GNUNET_HashCode phash;
/**
- * Number of peers in the bucket.
+ * When does our HELLO from this peer expire?
*/
- unsigned int peers_size;
+ struct GNUNET_TIME_Absolute hello_expiration;
+
+ /**
+ * Next peer entry (DLL)
+ */
+ struct PeerInfo *next;
+
+ /**
+ * Prev peer entry (DLL)
+ */
+ struct PeerInfo *prev;
+
+ /**
+ * Head of DLL of targets for this peer.
+ */
+ struct Target *t_head;
+
+ /**
+ * Tail of DLL of targets for this peer.
+ */
+ struct Target *t_tail;
+
+ /**
+ * Block with a HELLO of this peer.
+ */
+ void *hello;
+
+ /**
+ * Number of bytes in @e hello.
+ */
+ size_t hello_size;
+
+ /**
+ * Which bucket is this peer in?
+ */
+ int peer_bucket;
};
/**
- * Information about a peer that we would like to connect to.
+ * Peers are grouped into buckets.
*/
-struct ConnectInfo
+struct PeerBucket
{
/**
- * Handle to active HELLO offer operation, or NULL.
+ * Head of DLL
*/
- struct GNUNET_TRANSPORT_OfferHelloHandle *oh;
+ struct PeerInfo *head;
/**
- * Handle to active connectivity suggestion operation, or NULL.
+ * Tail of DLL
*/
- struct GNUNET_ATS_ConnectivitySuggestHandle *sh;
+ struct PeerInfo *tail;
/**
- * How much would we like to connect to this peer?
+ * Number of peers in the bucket.
*/
- uint32_t strength;
+ unsigned int peers_size;
};
@@ -374,12 +428,6 @@ static struct PeerBucket k_buckets[MAX_BUCKETS];
static struct GNUNET_CONTAINER_MultiPeerMap *all_connected_peers;
/**
- * Hash map of all peers we would like to be connected to.
- * Values are of type `struct ConnectInfo`.
- */
-static struct GNUNET_CONTAINER_MultiPeerMap *all_desired_peers;
-
-/**
* Maximum size for each bucket.
*/
static unsigned int bucket_size = DEFAULT_BUCKET_SIZE;
@@ -389,30 +437,83 @@ static unsigned int bucket_size = DEFAULT_BUCKET_SIZE;
*/
static struct GNUNET_SCHEDULER_Task *find_peer_task;
-/**
- * Identity of this peer.
- */
-static struct GNUNET_PeerIdentity my_identity;
/**
- * Hash of the identity of this peer.
+ * Function called whenever we finished sending to a target.
+ * Marks the transmission as finished (and the target as ready
+ * for the next message).
+ *
+ * @param cls a `struct Target *`
*/
-struct GNUNET_HashCode my_identity_hash;
+static void
+send_done_cb (void *cls)
+{
+ struct Target *t = cls;
+ struct PeerInfo *pi = t->pi; /* NULL if t->dropped! */
-/**
- * Handle to CORE.
- */
-static struct GNUNET_CORE_Handle *core_api;
+ GNUNET_assert (t->load > 0);
+ t->load--;
+ if (0 < t->load)
+ return;
+ if (t->dropped)
+ {
+ GNUNET_free (t);
+ return;
+ }
+ /* move target back to the front */
+ GNUNET_CONTAINER_DLL_remove (pi->t_head,
+ pi->t_tail,
+ t);
+ GNUNET_CONTAINER_DLL_insert (pi->t_head,
+ pi->t_tail,
+