aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-x.buildbot/build.sh2
-rwxr-xr-x.buildbot/firefly-x86_64-amdepyc_deploy.sh1
-rw-r--r--AUTHORS2
-rw-r--r--ChangeLog170
-rw-r--r--README6
-rw-r--r--configure.ac12
-rwxr-xr-xcontrib/scripts/netjail/netjail_core.sh57
-rwxr-xr-xcontrib/scripts/netjail/netjail_setup_internet.sh105
-rw-r--r--contrib/services/systemd/Makefile.am5
-rw-r--r--contrib/services/systemd/gnunet-user.service11
-rw-r--r--contrib/services/systemd/gnunet.service17
-rw-r--r--contrib/services/systemd/sysusers-gnunet.conf4
-rw-r--r--contrib/services/systemd/tmpfiles-gnunet.conf10
-rw-r--r--debian/changelog87
-rw-r--r--debian/control2
-rw-r--r--debian/gnunet.config6
-rw-r--r--debian/gnunet.dirs1
-rw-r--r--debian/gnunet.install6
-rw-r--r--debian/gnunet.postinst435
-rw-r--r--debian/gnunet.postrm118
-rw-r--r--debian/gnunet.service12
-rw-r--r--debian/gnunet.templates25
-rwxr-xr-xdebian/rules7
-rw-r--r--doc/handbook/Makefile.am106
-rw-r--r--doc/handbook/chapters/developer.texi28
-rw-r--r--doc/man/gnunet-search.12
-rw-r--r--po/POTFILES.in36
-rw-r--r--po/de.po1330
-rw-r--r--po/es.po1413
-rw-r--r--po/fr.po1284
-rw-r--r--po/it.po1269
-rw-r--r--po/sr.po1407
-rw-r--r--po/sv.po1343
-rw-r--r--po/vi.po1361
-rw-r--r--po/zh_CN.po1327
-rw-r--r--src/Makefile.am2
-rw-r--r--src/arm/arm_api.c7
-rw-r--r--src/ats-tests/.gitignore14
-rw-r--r--src/ats-tests/Makefile.am169
-rw-r--r--src/ats-tests/ats-testing-experiment.c820
-rw-r--r--src/ats-tests/ats-testing-log.c979
-rw-r--r--src/ats-tests/ats-testing-preferences.c265
-rw-r--r--src/ats-tests/ats-testing-traffic.c393
-rw-r--r--src/ats-tests/ats-testing.c975
-rw-r--r--src/ats-tests/ats-testing.h757
-rw-r--r--src/ats-tests/experiments/evaluation1_dru_3_peers_1addr_1scope_prop.conf24
-rw-r--r--src/ats-tests/experiments/evaluation1_dru_3_peers_1addr_1scope_prop.exp46
-rw-r--r--src/ats-tests/experiments/send_linear_10_sec.exp30
-rw-r--r--src/ats-tests/experiments/test.exp55
-rw-r--r--src/ats-tests/gnunet-ats-sim.c399
-rw-r--r--src/ats-tests/gnunet-solver-eval.c1025
-rw-r--r--src/ats-tests/gnunet_ats_sim_default.conf6
-rw-r--r--src/ats-tests/perf_ats.c601
-rw-r--r--src/ats-tests/perf_ats.h256
-rw-r--r--src/ats-tests/perf_ats_logging.c780
-rw-r--r--src/ats-tests/perf_ats_proportional_bandwidth.conf4
-rw-r--r--src/ats-tests/perf_ats_proportional_latency.conf4
-rw-r--r--src/ats-tests/perf_ats_proportional_none.conf4
-rw-r--r--src/ats-tests/template_perf_ats.conf52
-rw-r--r--src/block/Makefile.am13
-rw-r--r--src/consensus/Makefile.am1
-rw-r--r--src/conversation/conversation_api.c1
-rw-r--r--src/curl/curl.c51
-rw-r--r--src/datacache/plugin_datacache_postgres.c4
-rw-r--r--src/datacache/plugin_datacache_sqlite.c2
-rw-r--r--src/datastore/datastore_api.c4
-rw-r--r--src/datastore/plugin_datastore_mysql.c2
-rw-r--r--src/datastore/plugin_datastore_postgres.c2
-rw-r--r--src/datastore/plugin_datastore_sqlite.c4
-rw-r--r--src/dht/Makefile.am1
-rw-r--r--src/dht/gnunet-service-dht_neighbours.c12
-rw-r--r--src/dhtu/plugin_dhtu_ip.c67
-rw-r--r--src/dns/Makefile.am6
-rw-r--r--src/fs/Makefile.am5
-rw-r--r--src/gns/gnunet-gns-proxy.c2
-rw-r--r--src/gnsrecord/Makefile.am2
-rw-r--r--src/hostlist/hostlist.conf2
-rw-r--r--src/identity/identity_api.c4
-rw-r--r--src/identity/plugin_rest_identity.c26
-rw-r--r--src/include/Makefile.am2
-rw-r--r--src/include/gnunet_common.h42
-rw-r--r--src/include/gnunet_configuration_lib.h193
-rw-r--r--src/include/gnunet_container_lib.h3
-rw-r--r--src/include/gnunet_curl_lib.h2
-rw-r--r--src/include/gnunet_db_lib.h44
-rw-r--r--src/include/gnunet_disk_lib.h26
-rw-r--r--src/include/gnunet_json_lib.h304
-rw-r--r--src/include/gnunet_messenger_service.h12
-rw-r--r--src/include/gnunet_pq_lib.h125
-rw-r--r--src/include/gnunet_protocols.h7
-rw-r--r--src/include/gnunet_setu_service.h26
-rw-r--r--src/include/gnunet_testbed_ng_service.h284
-rw-r--r--src/include/gnunet_testing_ng_lib.h74
-rw-r--r--src/include/gnunet_testing_plugin.h7
-rw-r--r--src/include/gnunet_util_lib.h3
-rw-r--r--src/include/platform.h34
-rw-r--r--src/json/Makefile.am12
-rw-r--r--src/json/json.c37
-rw-r--r--src/json/json_pack.c325
-rw-r--r--src/messenger/gnunet-messenger.c7
-rw-r--r--src/messenger/gnunet-service-messenger_handle.c32
-rw-r--r--src/messenger/gnunet-service-messenger_member.c1
-rw-r--r--src/messenger/gnunet-service-messenger_room.c1
-rw-r--r--src/namecache/namecache_api.c1
-rw-r--r--src/namestore/Makefile.am4
-rw-r--r--src/namestore/gnunet-namestore-fcfsd.c12
-rw-r--r--src/namestore/plugin_rest_namestore.c6
-rw-r--r--src/namestore/zonefiles/BW7PTMDSN5KS42GMK2VKVE96BAYDS3QVMAS7SC5208FD6HFTAXE0.zkey1
-rw-r--r--src/namestore/zonefiles/CNFGWF0JH0C65M6PQW6VSRR6D3NEZVHAQF6NC037J01TETS6CJ30.zkeybin32 -> 0 bytes
-rw-r--r--src/namestore/zonefiles/KHW2Y5A7X59Z8BC2GHSEQ9WGZ5HWVEF25TBFR3Q5QHCERMVM76DG.zkey1
-rw-r--r--src/namestore/zonefiles/TWY43VS959JJ41KN2FG8782EJ2N0XDF4J6BWASR1BK5BPPRWQJAG.zkey2
-rw-r--r--src/nse/Makefile.am1
-rw-r--r--src/peerinfo-tool/Makefile.am8
-rw-r--r--src/pq/Makefile.am1
-rw-r--r--src/pq/pq.h31
-rw-r--r--src/pq/pq_connect.c84
-rw-r--r--src/pq/pq_event.c320
-rw-r--r--src/pq/test_pq.c129
-rw-r--r--src/reclaim/Makefile.am13
-rw-r--r--src/regex/Makefile.am4
-rw-r--r--src/rest/plugin_rest_config.c14
-rw-r--r--src/revocation/Makefile.am5
-rw-r--r--src/revocation/gnunet-service-revocation.c1
-rw-r--r--src/secretsharing/Makefile.am1
-rw-r--r--src/set/ibf.c2
-rw-r--r--src/set/ibf.h1
-rw-r--r--src/setu/gnunet-service-setu.c2085
-rw-r--r--src/setu/gnunet-service-setu_protocol.h78
-rw-r--r--src/setu/gnunet-service-setu_strata_estimator.c362
-rw-r--r--src/setu/gnunet-service-setu_strata_estimator.h54
-rw-r--r--src/setu/ibf.c290
-rw-r--r--src/setu/ibf.h65
-rw-r--r--src/setu/perf_setu_api.c571
-rw-r--r--src/setu/setu.h49
-rw-r--r--src/setu/setu_api.c40
-rw-r--r--src/setu/test_setu_api.c60
-rw-r--r--src/testbed/Makefile.am59
-rw-r--r--src/testbed/gnunet-cmd.c123
-rw-r--r--src/testbed/testbed_api.h6
-rw-r--r--src/testbed/testbed_api_cmd_controller.c203
-rw-r--r--src/testbed/testbed_api_cmd_peer.c281
-rw-r--r--src/testbed/testbed_api_cmd_peer_store.c60
-rw-r--r--src/testbed/testbed_api_cmd_send_peer_ready.c103
-rw-r--r--src/testbed/testbed_api_cmd_tng_connect.c55
-rw-r--r--src/testbed/testbed_api_cmd_tng_service.c276
-rw-r--r--src/testbed/testbed_api_hosts.c53
-rw-r--r--src/testbed/testbed_helper.h54
-rw-r--r--src/testing/Makefile.am50
-rw-r--r--src/testing/gnunet-cmds-helper.c (renamed from src/testbed/gnunet-cmds-helper.c)205
-rwxr-xr-xsrc/testing/netjail_core.sh (renamed from src/testbed/netjail_core.sh)15
-rwxr-xr-xsrc/testing/netjail_exec.sh (renamed from src/testbed/netjail_exec.sh)4
-rwxr-xr-xsrc/testing/netjail_start.sh (renamed from src/testbed/netjail_start.sh)2
-rwxr-xr-xsrc/testing/netjail_stop.sh (renamed from src/testbed/netjail_stop.sh)2
-rw-r--r--src/testing/test_testing_api_cmd_netjail.c (renamed from src/testbed/test_testbed_api_cmd_netjail.c)21
-rw-r--r--src/testing/test_testing_plugin_testcmd.c (renamed from src/testbed/plugin_testcmd.c)9
-rw-r--r--src/testing/testing_api_cmd_block_until_all_peers_started.c (renamed from src/testbed/testbed_api_cmd_block_until_all_peers_started.c)41
-rw-r--r--src/testing/testing_api_cmd_local_test_finished.c (renamed from src/testbed/testbed_api_cmd_local_test_finished.c)50
-rw-r--r--src/testing/testing_api_cmd_netjail_start.c (renamed from src/testbed/testbed_api_cmd_netjail_start.c)66
-rw-r--r--src/testing/testing_api_cmd_netjail_start_testsystem.c (renamed from src/testbed/testbed_api_cmd_netjail_start_testbed.c)318
-rw-r--r--src/testing/testing_api_cmd_netjail_stop.c (renamed from src/testbed/testbed_api_cmd_netjail_stop.c)64
-rw-r--r--src/testing/testing_api_cmd_netjail_stop_testsystem.c (renamed from src/testbed/testbed_api_cmd_netjail_stop_testbed.c)68
-rw-r--r--src/testing/testing_api_cmd_send_peer_ready.c36
-rw-r--r--src/testing/testing_api_cmd_system_create.c25
-rw-r--r--src/testing/testing_api_cmd_system_destroy.c116
-rw-r--r--src/testing/testing_api_loop.c44
-rw-r--r--src/testing/testing_cmds.h90
-rw-r--r--src/transport/Makefile.am71
-rw-r--r--src/transport/gnunet-communicator-tcp.c32
-rw-r--r--src/transport/plugin_cmd_simple_send.c188
-rw-r--r--src/transport/test_transport_api2_tcp_node1.conf23
-rw-r--r--src/transport/test_transport_api2_tcp_node2.conf22
-rw-r--r--src/transport/test_transport_api_cmd_simple_send.c80
-rw-r--r--src/transport/test_transport_plugin_cmd_simple_send.c248
-rwxr-xr-xsrc/transport/test_transport_simple_send.sh2
-rw-r--r--src/transport/transport-testing-cmds.h81
-rw-r--r--src/transport/transport-testing-ng.h74
-rw-r--r--src/transport/transport-testing2.h37
-rw-r--r--src/transport/transport_api_cmd_connecting_peers.c118
-rw-r--r--src/transport/transport_api_cmd_send_simple.c82
-rw-r--r--src/transport/transport_api_cmd_start_peer.c274
-rw-r--r--src/transport/transport_api_cmd_stop_peer.c163
-rw-r--r--src/util/Makefile.am10
-rw-r--r--src/util/client.c1
-rw-r--r--src/util/common_logging.c4
-rw-r--r--src/util/configuration.c1096
-rw-r--r--src/util/configuration_helper.c302
-rw-r--r--src/util/configuration_loader.c91
-rw-r--r--src/util/crypto_hkdf.c6
-rw-r--r--src/util/disk.c194
-rw-r--r--src/util/gnunet-config.c318
-rw-r--r--src/util/network.c30
-rw-r--r--src/util/os_installation.c2
-rw-r--r--src/util/os_priority.c14
-rw-r--r--src/util/plugin.c6
-rw-r--r--src/util/program.c89
-rw-r--r--src/util/strings.c2
-rw-r--r--src/util/test_plugin.c52
-rw-r--r--src/util/test_plugin_plug.c5
-rw-r--r--src/vpn/Makefile.am5
-rw-r--r--src/vpn/gnunet-helper-vpn.c11
200 files changed, 14351 insertions, 17665 deletions
diff --git a/.buildbot/build.sh b/.buildbot/build.sh
index f1f474ee7..8dfd1fccd 100755
--- a/.buildbot/build.sh
+++ b/.buildbot/build.sh
@@ -1,4 +1,4 @@
1#!/bin/bash 1#!/bin/bash
2echo "Cleanup old installation..." 2echo "Cleanup old installation..."
3rm -rf /tmp/gnunet 3rm -rf /tmp/gnunet
4./bootstrap && ./configure --prefix=/tmp/gnunet --enable-experimental && make 4./bootstrap && ./configure --prefix=/tmp/gnunet --enable-experimental && make -j16
diff --git a/.buildbot/firefly-x86_64-amdepyc_deploy.sh b/.buildbot/firefly-x86_64-amdepyc_deploy.sh
index 8ba9d35be..de37b59f1 100755
--- a/.buildbot/firefly-x86_64-amdepyc_deploy.sh
+++ b/.buildbot/firefly-x86_64-amdepyc_deploy.sh
@@ -1,7 +1,6 @@
1#!/bin/bash 1#!/bin/bash
2 2
3# Deploy docs from buildbot 3# Deploy docs from buildbot
4
5cd doc 4cd doc
6make html 5make html
7cd .. 6cd ..
diff --git a/AUTHORS b/AUTHORS
index 061d51379..5e79e2020 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -5,7 +5,7 @@ Bug reports: https://bugs.gnunet.org
5Security related bug reports: security@gnunet.org 5Security related bug reports: security@gnunet.org
6License: mostly AGPLv3+, some (GPL3+,MIT/X11,LGPL3+,Public Domain,BSD-3) 6License: mostly AGPLv3+, some (GPL3+,MIT/X11,LGPL3+,Public Domain,BSD-3)
7 7
8Primary developers (0.9.x series): 8Primary developers (since 0.9.x series):
9Alejandra Morales 9Alejandra Morales
10Andreas Fuchs 10Andreas Fuchs
11Bart Polot <bart@net.in.tum.de> 11Bart Polot <bart@net.in.tum.de>
diff --git a/ChangeLog b/ChangeLog
index aa0f2e425..c347c141d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,171 @@
1Wed, 1 Sep 2021 10:28:09 +0200 (d51000320)
2add fix for GNUnet directory permissions by madmurphy - Christian Grothoff
3
4Mon, 30 Aug 2021 09:35:40 +0200 (9eb417e72)
5exec' - Christian Grothoff
6
7Sat, 28 Aug 2021 21:50:06 +0200 (2994fa434)
8improve error message and inherit stderr as suggested by Florian - Christian Grothoff
9
10Sat, 28 Aug 2021 18:42:53 +0200 (c6528ac77)
11debian: systemd installation - Florian Dold
12
13Sat, 28 Aug 2021 18:31:33 +0200 (eacbf5923)
14debian: clean up - Florian Dold
15
16Sat, 28 Aug 2021 18:27:45 +0200 (ec6b80f07)
17debian: more fixes and formatting - Florian Dold
18
19Sat, 28 Aug 2021 18:27:11 +0200 (830bc7ab2)
20debian: more fixes - Florian Dold
21
22Sat, 28 Aug 2021 18:23:05 +0200 (941ea7f20)
23debian: various packaging fixes - Florian Dold
24
25Sat, 28 Aug 2021 17:46:26 +0200 (b317b3e11)
26use ISO 8609 / RFC 3339 timestamps for logging - Florian Dold
27
28Sat, 28 Aug 2021 16:54:38 +0200 (e74fadf93)
29release GNUnet 0.15.3 - Christian Grothoff
30
31Sat, 28 Aug 2021 12:54:32 +0200 (1757980da)
32partial fix for problems raised by Alessio on the ML - Christian Grothoff
33
34Sat, 28 Aug 2021 12:50:20 +0200 (66e906c25)
35partial fix for problems raised by Alessio on the ML - Christian Grothoff
36
37Wed, 25 Aug 2021 12:52:12 +0200 (45532e7bc)
38further simplify libgnunetpq event API and implementation, also trigger events on 'loopback' that are not socket-activated - Christian Grothoff
39
40Tue, 24 Aug 2021 16:12:34 +0200 (a0e689f5e)
41debian: libgnunet-dev should not depend on GNUnet - Florian Dold
42
43Sun, 8 Aug 2021 22:10:55 +0200 (b71740271)
44debian: do not pollute skel (see Debian Policy Section 10.7.5.) - Florian Dold
45
46Sun, 8 Aug 2021 21:20:09 +0200 (2de19bb85)
47debian: leave out debian version '0', as lintian complains - Florian Dold
48
49Sun, 8 Aug 2021 21:14:42 +0200 (788f1edbe)
50debian: bump version (0.15.0-1) - Florian Dold
51
52Fri, 6 Aug 2021 11:56:36 +0200 (564a1945e)
53debian: bump version - Florian Dold
54
55Wed, 4 Aug 2021 20:41:25 +0200 (ff5075e7f)
56do not generate tautological comparison warnings for assertions (if gcc/clang version supports them) - Christian Grothoff
57
58Wed, 4 Aug 2021 15:09:17 +0200 (873381c65)
59first cmd for a simple tng test running. part of cleanup and sanity check when starting missing - t3sserakt
60
61Sun, 1 Aug 2021 16:23:32 +0200 (372516f77)
620 for absolute time is special, and should be treated as such in JSON generation - Christian Grothoff
63
64Sun, 1 Aug 2021 14:53:14 +0200 (c98bf47a8)
65PQ: fix notification API bugs - Christian Grothoff
66
67Sun, 1 Aug 2021 12:26:20 +0200 (2032f3ce3)
68debian: compat level, removal of user units, tweaks - Florian Dold
69
70Sat, 31 Jul 2021 22:42:45 +0200 (d02ea47f5)
71JSON: allow NULL-passing to GNUNET_JSON_pack_data_varsize - Christian Grothoff
72
73Sat, 31 Jul 2021 20:04:51 +0200 (be8bbf724)
74debian: bump version - Florian Dold
75
76Sat, 31 Jul 2021 16:47:33 +0200 (9b3442d2f)
77debian: Do not remove users/groups in postrm - Florian Dold
78
79Sat, 31 Jul 2021 16:08:36 +0200 (aa0f0adef)
80debian: fix date - Florian Dold
81
82Sat, 31 Jul 2021 12:58:00 +0200 (e3dc68562)
83debian: bump version to 0.14.1-9 - Florian Dold
84
85Fri, 30 Jul 2021 22:20:05 +0200 (dccf60f89)
86config: handle syntax error instead of dereferencing NULL pointer - Florian Dold
87
88Fri, 2 Apr 2021 15:46:25 +0200 (ebc70e1bc)
89SETU: Implement LSD0003 - Martin Schanzenbach
90
91Thu, 29 Jul 2021 14:26:22 -0400 (72250781a)
92use modern spelling for LLONG_{MAX,MIN} - Thien-Thi Nguyen
93
94Thu, 29 Jul 2021 17:15:32 +0200 (6212bce41)
95config: restrict directives in files loaded via @inline-secret@ - Florian Dold
96
97Thu, 29 Jul 2021 10:42:18 -0400 (12e29f004)
98add dependency lib to a couple targets - Thien-Thi Nguyen
99
100Thu, 29 Jul 2021 16:13:16 +0200 (b69774cba)
101do not warn when GNUNET_DISK_file_test can't access file - Florian Dold
102
103Thu, 29 Jul 2021 15:40:36 +0200 (73ae1f379)
104config: prettier pretty printing - Florian Dold
105
106Thu, 29 Jul 2021 15:03:19 +0200 (8af5277c8)
107debian: bump version - Florian Dold
108
109Thu, 29 Jul 2021 14:59:10 +0200 (b41bca631)
110fall back to /etc for default configuration entry point - Florian Dold
111
112Wed, 28 Jul 2021 21:23:44 +0200 (cadca90ca)
113debian: bump version - Florian Dold
114
115Wed, 28 Jul 2021 21:00:30 +0200 (3012383a1)
116config: report stats for secret sections - Florian Dold
117
118Wed, 28 Jul 2021 20:19:38 +0200 (346706b18)
119config: extended diagnostics, import cycle detection, deterministic load order - Florian Dold
120
121Wed, 28 Jul 2021 18:59:07 +0200 (1af9f6c1c)
122config: sort globbed files - Florian Dold
123
124Wed, 28 Jul 2021 17:34:44 +0200 (7a0caef7a)
125diagnostics mode for gnunet-config - Florian Dold
126
127Wed, 28 Jul 2021 15:47:39 +0200 (2cdd91d55)
128fall back to /etc if user config can't be found - Florian Dold
129
130Wed, 28 Jul 2021 15:26:55 +0200 (94ea7a1fa)
131implement @inline-secret@ directive - Florian Dold
132
133Wed, 28 Jul 2021 14:31:38 +0200 (7615d46b0)
134implement config inline globbing - Florian Dold
135
136Mon, 26 Jul 2021 20:30:28 +0200 (28dfb1220)
137config: resolve realpath of parent config file, fix docs - Florian Dold
138
139Mon, 26 Jul 2021 20:03:29 +0200 (51e5fab47)
140config: free real basepath - Florian Dold
141
142Mon, 26 Jul 2021 19:59:29 +0200 (cda72d5c4)
143config: resolve realpath of base dir, not config - Florian Dold
144
145Mon, 26 Jul 2021 19:35:56 +0200 (473939543)
146debian: bump version - Florian Dold
147
148Mon, 26 Jul 2021 19:33:38 +0200 (16fe9a808)
149config: resolve symlinks for @INLINE@-ed files - Florian Dold
150
151Mon, 26 Jul 2021 17:49:43 +0200 (302e97b01)
152debian: bump version - Florian Dold
153
154Mon, 26 Jul 2021 16:32:34 +0200 (90095d19b)
155implement typed JSON packer - Christian Grothoff
156
157Mon, 26 Jul 2021 15:45:39 +0200 (baa855368)
158debian: bump version - Florian Dold
159
160Mon, 26 Jul 2021 15:31:14 +0200 (51990dbbf)
161JSON: add draft for new GNUNET_JSON_PACK API - Christian Grothoff
162
163Sat, 24 Jul 2021 22:50:22 +0200 (d63771f25)
164minimal test for new pq event functionality - Christian Grothoff
165
166Sat, 24 Jul 2021 22:05:46 +0200 (31eae6bbe)
167early draft for libgnunetpq event notification support - Christian Grothoff
168
1Fri, 23 Jul 2021 20:10:45 +0200 (be8bca817) 169Fri, 23 Jul 2021 20:10:45 +0200 (be8bca817)
2introduce new TIME helper functions - Christian Grothoff 170introduce new TIME helper functions - Christian Grothoff
3 171
@@ -838,7 +1006,7 @@ Mon Dec 16 09:33:36 2019 +0100
838 1006
839Sat 07 Dec 2019 02:38:53 PM CET 1007Sat 07 Dec 2019 02:38:53 PM CET
840 Protocol-breaking change, using more standards-compliant 1008 Protocol-breaking change, using more standards-compliant
841 EdDSA and RSA operations. Also changing POW function to 1009 EdDSA and RSA operations. Also changing POW function to
842 make it less ASIC-compatible. This marks the switch to 1010 make it less ASIC-compatible. This marks the switch to
843 the 0.12.0 protocol family. 1011 the 0.12.0 protocol family.
844 1012
diff --git a/README b/README
index 1bf3d29bf..dd67fb36b 100644
--- a/README
+++ b/README
@@ -240,9 +240,9 @@ chmod u+s $(DESTDIR)$(libexecdir)/gnunet-helper-transport-bluetooth
240chown root $(DESTDIR)$(libexecdir)/gnunet-helper-dns 240chown root $(DESTDIR)$(libexecdir)/gnunet-helper-dns
241chgrp $(GNUNETDNS_GROUP) $(DESTDIR)$(libexecdir)/gnunet-helper-dns 241chgrp $(GNUNETDNS_GROUP) $(DESTDIR)$(libexecdir)/gnunet-helper-dns
242chmod 4750 $(DESTDIR)$(libexecdir)/gnunet-helper-dns 242chmod 4750 $(DESTDIR)$(libexecdir)/gnunet-helper-dns
243chgrp $(GNUNETDNS_GROUP) $(DESTDIR)$(libexecdir)/gnunet-helper-dns 243chgrp $(GNUNETDNS_GROUP) $(DESTDIR)$(libexecdir)/gnunet-service-dns
244chown gnunet:$(GNUNETDNS_GROUP) $(DESTDIR)$(libexecdir)/gnunet-helper-dns 244chown gnunet:$(GNUNETDNS_GROUP) $(DESTDIR)$(libexecdir)/gnunet-service-dns
245chmod 2750 $(DESTDIR)$(libexecdir)/gnunet-helper-dns 245chmod 2750 $(DESTDIR)$(libexecdir)/gnunet-service-dns
246chown root:root $(DESTDIR)$(libexecdir)/gnunet-helper-exit 246chown root:root $(DESTDIR)$(libexecdir)/gnunet-helper-exit
247chmod u+s $(DESTDIR)$(libexecdir)/gnunet-helper-exit 247chmod u+s $(DESTDIR)$(libexecdir)/gnunet-helper-exit
248chown root:root $(DESTDIR)$(libexecdir)/gnunet-helper-nat-server 248chown root:root $(DESTDIR)$(libexecdir)/gnunet-helper-nat-server
diff --git a/configure.ac b/configure.ac
index 00746a6db..770ba499e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -21,7 +21,7 @@
21# 21#
22AC_PREREQ([2.69]) 22AC_PREREQ([2.69])
23# Checks for programs. 23# Checks for programs.
24AC_INIT([gnunet],[0.14.1],[bug-gnunet@gnu.org]) 24AC_INIT([gnunet],[0.15.4-alpha.0],[bug-gnunet@gnu.org])
25AC_CONFIG_AUX_DIR([build-aux]) 25AC_CONFIG_AUX_DIR([build-aux])
26 26
27# check for legacy option that is no longer supported (#5627) and fail hard 27# check for legacy option that is no longer supported (#5627) and fail hard
@@ -581,7 +581,7 @@ AS_IF([test "x$activate_texinfo4" = "xyes"],
581 TEXINFO_HTMLFLAGS="--no-split --css-include=style.css --css-include=manual.css" 581 TEXINFO_HTMLFLAGS="--no-split --css-include=style.css --css-include=manual.css"
582 ],[ 582 ],[
583 AM_CONDITIONAL([ACTIVATE_TEXINFO4],false) 583 AM_CONDITIONAL([ACTIVATE_TEXINFO4],false)
584 AC_DEFINE([INCLUDE_MANPAGES],[0],[Using texinfo version 5 or later switches]) 584 AC_DEFINE([ACTIVATE_TEXINFO04],[0],[Using texinfo version 5 or later switches])
585 TEXINFO_HTMLFLAGS="--no-split --css-ref='../style.css' --css-ref='../manual.css'" 585 TEXINFO_HTMLFLAGS="--no-split --css-ref='../style.css' --css-ref='../manual.css'"
586 586
587 ]) 587 ])
@@ -949,7 +949,7 @@ AC_ARG_WITH(libogg,
949 ogg=1,)]) 949 ogg=1,)])
950AM_CONDITIONAL(HAVE_OGG, [test "$ogg" = 1]) 950AM_CONDITIONAL(HAVE_OGG, [test "$ogg" = 1])
951AS_IF([test x"$ogg" = x1], 951AS_IF([test x"$ogg" = x1],
952 [AC_DEFINE([HAVE_OGG],[1],[Have ogg])] 952 [AC_DEFINE([HAVE_OGG],[1],[Have ogg])],
953 [AC_DEFINE([HAVE_OGG],[0],[Lacking ogg])]) 953 [AC_DEFINE([HAVE_OGG],[0],[Lacking ogg])])
954 954
955 955
@@ -1299,8 +1299,9 @@ gl_LIBUNISTRING
1299AS_IF([test $HAVE_LIBUNISTRING != yes], 1299AS_IF([test $HAVE_LIBUNISTRING != yes],
1300 [AC_MSG_ERROR([GNUnet requires libunistring])]) 1300 [AC_MSG_ERROR([GNUnet requires libunistring])])
1301 1301
1302AS_VERSION_COMPARE([$LIBUNISTRING_VERSION],[0.9.1.1], 1302# Currently broken on Debian :-(
1303 [AC_MSG_ERROR([GNUnet requires libunistring >= 0.9.1.1])]) 1303#AS_VERSION_COMPARE([$LIBUNISTRING_VERSION],[0.9.1.1],
1304# [AC_MSG_ERROR([GNUnet requires libunistring >= 0.9.1.1, found $LIBUNISTRING_VERSION])])
1304 1305
1305AC_CHECK_HEADERS([unistr.h], 1306AC_CHECK_HEADERS([unistr.h],
1306 , 1307 ,
@@ -1920,7 +1921,6 @@ src/arm/arm.conf
1920src/ats/Makefile 1921src/ats/Makefile
1921src/ats/ats.conf 1922src/ats/ats.conf
1922src/ats-tool/Makefile 1923src/ats-tool/Makefile
1923src/ats-tests/Makefile
1924src/auction/Makefile 1924src/auction/Makefile
1925src/block/Makefile 1925src/block/Makefile
1926src/cadet/Makefile 1926src/cadet/Makefile
diff --git a/contrib/scripts/netjail/netjail_core.sh b/contrib/scripts/netjail/netjail_core.sh
index d070f7220..d53315052 100755
--- a/contrib/scripts/netjail/netjail_core.sh
+++ b/contrib/scripts/netjail/netjail_core.sh
@@ -2,6 +2,7 @@
2# 2#
3 3
4JAILOR=${SUDO_USER:?must run in sudo} 4JAILOR=${SUDO_USER:?must run in sudo}
5PREFIX=${PPID:?must run from a parent process}
5 6
6# running with `sudo` is required to be 7# running with `sudo` is required to be
7# able running the actual commands as the 8# able running the actual commands as the
@@ -9,6 +10,22 @@ JAILOR=${SUDO_USER:?must run in sudo}
9 10
10export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" 11export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
11 12
13export RESULT=
14export NAMESPACE_NUM=0
15export INTERFACE_NUM=0
16
17netjail_next_namespace() {
18 local NUM=$NAMESPACE_NUM
19 NAMESPACE_NUM=$(($NAMESPACE_NUM + 1))
20 RESULT=$NUM
21}
22
23netjail_next_interface() {
24 local NUM=$INTERFACE_NUM
25 INTERFACE_NUM=$(($INTERFACE_NUM + 1))
26 RESULT=$NUM
27}
28
12netjail_opt() { 29netjail_opt() {
13 local OPT=$1 30 local OPT=$1
14 shift 1 31 shift 1
@@ -17,7 +34,7 @@ netjail_opt() {
17 34
18 while [ $# -gt 0 ]; do 35 while [ $# -gt 0 ]; do
19 if [ "$1" = "$OPT" ]; then 36 if [ "$1" = "$OPT" ]; then
20 printf "%d" $INDEX 37 RESULT=$INDEX
21 return 38 return
22 fi 39 fi
23 40
@@ -25,7 +42,7 @@ netjail_opt() {
25 shift 1 42 shift 1
26 done 43 done
27 44
28 printf "%d" 0 45 RESULT=0
29} 46}
30 47
31netjail_opts() { 48netjail_opts() {
@@ -42,7 +59,7 @@ netjail_opts() {
42 shift 1 59 shift 1
43 done 60 done
44 61
45 printf "$DEF" 62 RESULT="$DEF"
46} 63}
47 64
48netjail_check() { 65netjail_check() {
@@ -73,15 +90,15 @@ netjail_check_bin() {
73 fi 90 fi
74} 91}
75 92
76netjail_print_name() {
77 printf "%s%02x%02x" $1 $2 ${3:-0}
78}
79
80netjail_bridge() { 93netjail_bridge() {
81 local BRIDGE=$1 94 netjail_next_interface
95 local NUM=$RESULT
96 local BRIDGE=$(printf "%06x-%08x" $PREFIX $NUM)
82 97
83 ip link add $BRIDGE type bridge 98 ip link add $BRIDGE type bridge
84 ip link set dev $BRIDGE up 99 ip link set dev $BRIDGE up
100
101 RESULT=$BRIDGE
85} 102}
86 103
87netjail_bridge_clear() { 104netjail_bridge_clear() {
@@ -91,9 +108,13 @@ netjail_bridge_clear() {
91} 108}
92 109
93netjail_node() { 110netjail_node() {
94 local NODE=$1 111 netjail_next_namespace
112 local NUM=$RESULT
113 local NODE=$(printf "%06x-%08x" $PREFIX $NUM)
95 114
96 ip netns add $NODE 115 ip netns add $NODE
116
117 RESULT=$NODE
97} 118}
98 119
99netjail_node_clear() { 120netjail_node_clear() {
@@ -108,8 +129,13 @@ netjail_node_link_bridge() {
108 local ADDRESS=$3 129 local ADDRESS=$3
109 local MASK=$4 130 local MASK=$4
110 131
111 local LINK_IF="$NODE-$BRIDGE-0" 132 netjail_next_interface
112 local LINK_BR="$NODE-$BRIDGE-1" 133 local NUM_IF=$RESULT
134 netjail_next_interface
135 local NUM_BR=$RESULT
136
137 local LINK_IF=$(printf "%06x-%08x" $PREFIX $NUM_IF)
138 local LINK_BR=$(printf "%06x-%08x" $PREFIX $NUM_BR)
113 139
114 ip link add $LINK_IF type veth peer name $LINK_BR 140 ip link add $LINK_IF type veth peer name $LINK_BR
115 ip link set $LINK_IF netns $NODE 141 ip link set $LINK_IF netns $NODE
@@ -120,13 +146,12 @@ netjail_node_link_bridge() {
120 ip -n $NODE link set up dev lo 146 ip -n $NODE link set up dev lo
121 147
122 ip link set $LINK_BR up 148 ip link set $LINK_BR up
149
150 RESULT=$LINK_BR
123} 151}
124 152
125netjail_node_unlink_bridge() { 153netjail_node_unlink_bridge() {
126 local NODE=$1 154 local LINK_BR=$1
127 local BRIDGE=$2
128
129 local LINK_BR="$NODE-$BRIDGE-1"
130 155
131 ip link delete $LINK_BR 156 ip link delete $LINK_BR
132} 157}
@@ -152,7 +177,7 @@ netjail_node_exec() {
152 local FD_OUT=$3 177 local FD_OUT=$3
153 shift 3 178 shift 3
154 179
155 unshare -fp --kill-child -- ip netns exec $NODE sudo -u $JAILOR -- $@ 1>& $FD_OUT 0<& $FD_IN 180 ip netns exec $NODE sudo -u $JAILOR -- $@ 1>& $FD_OUT 0<& $FD_IN
156} 181}
157 182
158netjail_kill() { 183netjail_kill() {
diff --git a/contrib/scripts/netjail/netjail_setup_internet.sh b/contrib/scripts/netjail/netjail_setup_internet.sh
index 6ae047274..e3880783f 100755
--- a/contrib/scripts/netjail/netjail_setup_internet.sh
+++ b/contrib/scripts/netjail/netjail_setup_internet.sh
@@ -1,4 +1,5 @@
1#!/bin/sh 1#!/bin/sh
2
2. "./netjail_core.sh" 3. "./netjail_core.sh"
3 4
4set -eu 5set -eu
@@ -6,6 +7,7 @@ set -x
6 7
7export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" 8export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
8 9
10PREFIX=$PPID
9LOCAL_M=$1 11LOCAL_M=$1
10GLOBAL_N=$2 12GLOBAL_N=$2
11 13
@@ -14,11 +16,14 @@ shift 2
14netjail_check $(($LOCAL_M * $GLOBAL_N)) 16netjail_check $(($LOCAL_M * $GLOBAL_N))
15 17
16# Starts optionally an amount of nodes without NAT starting with "92.68.151.1" 18# Starts optionally an amount of nodes without NAT starting with "92.68.151.1"
17KNOWN=$(netjail_opt '--known' $@) 19netjail_opt '--known' $@
18KNOWN_NUM=$(netjail_opts '--known' 0 $@) 20KNOWN=$RESULT
21netjail_opts '--known' 0 $@
22KNOWN_NUM=$RESULT
19 23
20# Starts optionally 'stunserver' on "92.68.150.254": 24# Starts optionally 'stunserver' on "92.68.150.254":
21STUN=$(netjail_opt '--stun' $@) 25netjail_opt '--stun' $@
26STUN=$RESULT
22 27
23if [ $KNOWN -gt 0 ]; then 28if [ $KNOWN -gt 0 ]; then
24 shift 2 29 shift 2
@@ -32,8 +37,6 @@ if [ $STUN -gt 0 ]; then
32 netjail_check_bin stunserver 37 netjail_check_bin stunserver
33 38
34 shift 1 39 shift 1
35
36 STUN_NODE=$(netjail_print_name "S" 254)
37fi 40fi
38 41
39netjail_check_bin $1 42netjail_check_bin $1
@@ -45,43 +48,42 @@ KNOWN_GROUP="92.68.151"
45CLEANUP=0 48CLEANUP=0
46echo "Start [local: $LOCAL_GROUP.0/24, global: $GLOBAL_GROUP.0/16, stun: $STUN]" 49echo "Start [local: $LOCAL_GROUP.0/24, global: $GLOBAL_GROUP.0/16, stun: $STUN]"
47 50
48NETWORK_NET=$(netjail_print_name "n" $GLOBAL_N $LOCAL_M) 51netjail_bridge
49 52NETWORK_NET=$RESULT
50netjail_bridge $NETWORK_NET
51 53
52for X in $(seq $KNOWN); do 54for X in $(seq $KNOWN); do
53 KNOWN_NODE=$(netjail_print_name "K" $X) 55 netjail_node
54 56 KNOWN_NODES[$X]=$RESULT
55 netjail_node $KNOWN_NODE 57 netjail_node_link_bridge ${KNOWN_NODES[$X]} $NETWORK_NET "$KNOWN_GROUP.$X" 16
56 netjail_node_link_bridge $KNOWN_NODE $NETWORK_NET "$KNOWN_GROUP.$X" 16 58 KNOWN_LINKS[$X]=$RESULT
57done 59done
58 60
59for N in $(seq $GLOBAL_N); do 61declare -A NODES
60 ROUTER=$(netjail_print_name "R" $N) 62declare -A NODE_LINKS
61
62 netjail_node $ROUTER
63 netjail_node_link_bridge $ROUTER $NETWORK_NET "$GLOBAL_GROUP.$N" 16
64 63
65 ROUTER_NET=$(netjail_print_name "r" $N) 64for N in $(seq $GLOBAL_N); do
66 65 netjail_node
67 netjail_bridge $ROUTER_NET 66 ROUTERS[$N]=$RESULT
67 netjail_node_link_bridge ${ROUTERS[$N]} $NETWORK_NET "$GLOBAL_GROUP.$N" 16
68 NETWORK_LINKS[$N]=$RESULT
69 netjail_bridge
70 ROUTER_NETS[$N]=$RESULT
68 71
69 for M in $(seq $LOCAL_M); do 72 for M in $(seq $LOCAL_M); do
70 NODE=$(netjail_print_name "N" $N $M) 73 netjail_node
71 74 NODES[$N,$M]=$RESULT
72 netjail_node $NODE 75 netjail_node_link_bridge ${NODES[$N,$M]} ${ROUTER_NETS[$N]} "$LOCAL_GROUP.$M" 24
73 netjail_node_link_bridge $NODE $ROUTER_NET "$LOCAL_GROUP.$M" 24 76 NODE_LINKS[$N,$M]=$RESULT
74 done 77 done
75 78
76 ROUTER_ADDR="$LOCAL_GROUP.$(($LOCAL_M+1))" 79 ROUTER_ADDR="$LOCAL_GROUP.$(($LOCAL_M+1))"
77 80 netjail_node_link_bridge ${ROUTERS[$N]} ${ROUTER_NETS[$N]} $ROUTER_ADDR 24
78 netjail_node_link_bridge $ROUTER $ROUTER_NET $ROUTER_ADDR 24 81 ROUTER_LINKS[$N]=$RESULT
79 netjail_node_add_nat $ROUTER $ROUTER_ADDR 24 82
83 netjail_node_add_nat ${ROUTERS[$N]} $ROUTER_ADDR 24
80 84
81 for M in $(seq $LOCAL_M); do 85 for M in $(seq $LOCAL_M); do
82 NODE=$(netjail_print_name "N" $N $M) 86 netjail_node_add_default ${NODES[$N,$M]} $ROUTER_ADDR
83
84 netjail_node_add_default $NODE $ROUTER_ADDR
85 done 87 done
86done 88done
87 89
@@ -89,67 +91,58 @@ WAITING=""
89KILLING="" 91KILLING=""
90 92
91if [ $STUN -gt 0 ]; then 93if [ $STUN -gt 0 ]; then
92 netjail_node $STUN_NODE 94 netjail_node
95 STUN_NODE=$RESULT
93 netjail_node_link_bridge $STUN_NODE $NETWORK_NET "$GLOBAL_GROUP.254" 16 96 netjail_node_link_bridge $STUN_NODE $NETWORK_NET "$GLOBAL_GROUP.254" 16
97 STUN_LINK=$RESULT
94 98
95 netjail_node_exec $STUN_NODE 0 1 stunserver & 99 netjail_node_exec $STUN_NODE 0 1 stunserver &
96 KILLING="$!" 100 KILLING="$!"
97fi 101fi
98 102
99for X in $(seq $KNOWN); do 103for X in $(seq $KNOWN); do
100 KNOWN_NODE=$(netjail_print_name "K" $X)
101 INDEX=$(($X - 1)) 104 INDEX=$(($X - 1))
102 105
103 FD_X=$(($INDEX * 2 + 3 + 0)) 106 FD_X=$(($INDEX * 2 + 3 + 0))
104 FD_Y=$(($INDEX * 2 + 3 + 1)) 107 FD_Y=$(($INDEX * 2 + 3 + 1))
105 108
106 netjail_node_exec $KNOWN_NODE $FD_X $FD_Y $@ & 109 netjail_node_exec ${KNOWN_NODES[$X]} $FD_X $FD_Y $@ &
107 WAITING="$! $WAITING" 110 WAITING="$! $WAITING"
108done 111done
109 112
110for N in $(seq $GLOBAL_N); do 113for N in $(seq $GLOBAL_N); do
111 for M in $(seq $LOCAL_M); do 114 for M in $(seq $LOCAL_M); do
112 NODE=$(netjail_print_name "N" $N $M)
113 INDEX=$(($LOCAL_M * ($N - 1) + $M - 1 + $KNOWN)) 115 INDEX=$(($LOCAL_M * ($N - 1) + $M - 1 + $KNOWN))
114 116
115 FD_X=$(($INDEX * 2 + 3 + 0)) 117 FD_X=$(($INDEX * 2 + 3 + 0))
116 FD_Y=$(($INDEX * 2 + 3 + 1)) 118 FD_Y=$(($INDEX * 2 + 3 + 1))
117 119
118 netjail_node_exec $NODE $FD_X $FD_Y $@ & 120 netjail_node_exec ${NODES[$N,$M]} $FD_X $FD_Y $@ &
119 WAITING="$! $WAITING" 121 WAITING="$! $WAITING"
120 done 122 done
121done 123done
122 124
123cleanup() { 125cleanup() {
124 if [ $STUN -gt 0 ]; then 126 if [ $STUN -gt 0 ]; then
125 STUN_NODE=$(netjail_print_name "S" 254) 127 netjail_node_unlink_bridge $STUN_LINK
126
127 netjail_node_unlink_bridge $STUN_NODE $NETWORK_NET
128 netjail_node_clear $STUN_NODE 128 netjail_node_clear $STUN_NODE
129 fi 129 fi
130 130
131 for X in $(seq $KNOWN); do 131 for X in $(seq $KNOWN); do
132 KNOWN_NODE=$(netjail_print_name "K" $X) 132 netjail_node_unlink_bridge ${KNOWN_LINKS[$X]}
133 133 netjail_node_clear ${KNOWN_NODES[$X]}
134 netjail_node_unlink_bridge $KNOWN_NODE $NETWORK_NET
135 netjail_node_clear $KNOWN_NODE
136 done 134 done
137 135
138 for N in $(seq $GLOBAL_N); do 136 for N in $(seq $GLOBAL_N); do
139 ROUTER_NET=$(netjail_print_name "r" $N)
140
141 for M in $(seq $LOCAL_M); do 137 for M in $(seq $LOCAL_M); do
142 NODE=$(netjail_print_name "N" $N $M) 138 netjail_node_unlink_bridge ${NODE_LINKS[$N,$M]}
143 139 netjail_node_clear ${NODES[$N,$M]}
144 netjail_node_unlink_bridge $NODE $ROUTER_NET
145 netjail_node_clear $NODE
146 done 140 done
147 141
148 ROUTER=$(netjail_print_name "R" $N) 142 netjail_node_unlink_bridge ${ROUTER_LINKS[$N]}
149 143 netjail_bridge_clear ${ROUTER_NETS[$N]}
150 netjail_bridge_clear $ROUTER_NET 144 netjail_node_unlink_bridge ${NETWORK_LINKS[$N]}
151 netjail_node_unlink_bridge $ROUTER $NETWORK_NET 145 netjail_node_clear ${ROUTERS[$N]}
152 netjail_node_clear $ROUTER
153 done 146 done
154 147
155 netjail_bridge_clear $NETWORK_NET 148 netjail_bridge_clear $NETWORK_NET
@@ -162,7 +155,7 @@ trapped_cleanup() {
162 cleanup 155 cleanup
163} 156}
164 157
165trap 'trapped_cleanup' 2 158trap 'trapped_cleanup' ERR
166 159
167netjail_waitall $WAITING 160netjail_waitall $WAITING
168netjail_killall $KILLING 161netjail_killall $KILLING
diff --git a/contrib/services/systemd/Makefile.am b/contrib/services/systemd/Makefile.am
index 39a6f2a81..ec2ff7704 100644
--- a/contrib/services/systemd/Makefile.am
+++ b/contrib/services/systemd/Makefile.am
@@ -1,7 +1,10 @@
1pkginitdir= $(pkgdatadir)/services/systemd 1pkginitdir= $(pkgdatadir)/services/systemd
2 2
3pkginit_DATA = \ 3pkginit_DATA = \
4 gnunet.service 4 gnunet.service \
5 gnunet-user.service \
6 sysusers-gnunet.conf \
7 tmpfiles-gnunet.conf
5 8
6EXTRA_DIST = \ 9EXTRA_DIST = \
7 $(pkginit_DATA) 10 $(pkginit_DATA)
diff --git a/contrib/services/systemd/gnunet-user.service b/contrib/services/systemd/gnunet-user.service
new file mode 100644
index 000000000..c9d3be0ad
--- /dev/null
+++ b/contrib/services/systemd/gnunet-user.service
@@ -0,0 +1,11 @@
1# Typically to be place into /usr/lib/systemd/user/gnunet.service
2[Unit]
3Description=GNUnet user service
4After=network.target
5
6[Service]
7Type=simple
8ExecStart=/usr/lib/gnunet/libexec/gnunet-service-arm -c ~/.config/gnunet.conf
9
10[Install]
11WantedBy=multi-user.target
diff --git a/contrib/services/systemd/gnunet.service b/contrib/services/systemd/gnunet.service
index 1c458cea6..daa38a046 100644
--- a/contrib/services/systemd/gnunet.service
+++ b/contrib/services/systemd/gnunet.service
@@ -1,15 +1,14 @@
1# Copyright (C) 2019 GNUnet e.V. 1# Typically placed into /usr/lib/systemd/system/gnunet.service
2#
3# Copying and distribution of this file, with or without modification,
4# are permitted in any medium without royalty provided the copyright
5# notice and this notice are preserved. This file is offered as-is,
6# without any warranty.
7
8[Unit] 2[Unit]
9Description=Service that runs a GNUnet for the user gnunet 3Description=GNUnet system service
10After=network.target 4After=network.target
11 5
12[Service] 6[Service]
13User=gnunet
14Type=simple 7Type=simple
8User=gnunet
15ExecStart=/usr/lib/gnunet/libexec/gnunet-service-arm -c /etc/gnunet.conf 9ExecStart=/usr/lib/gnunet/libexec/gnunet-service-arm -c /etc/gnunet.conf
10StateDirectory=gnunet
11StateDirectoryMode=0700
12
13[Install]
14WantedBy=multi-user.target
diff --git a/contrib/services/systemd/sysusers-gnunet.conf b/contrib/services/systemd/sysusers-gnunet.conf
new file mode 100644
index 000000000..b7b8abeed
--- /dev/null
+++ b/contrib/services/systemd/sysusers-gnunet.conf
@@ -0,0 +1,4 @@
1# Typically placed into /usr/lib/sysusers.d/gnunet.conf
2g gnunet -
3u gnunet - "GNUnet system account" /var/lib/gnunet
4g gnunetdns -
diff --git a/contrib/services/systemd/tmpfiles-gnunet.conf b/contrib/services/systemd/tmpfiles-gnunet.conf
new file mode 100644
index 000000000..ffffa3284
--- /dev/null
+++ b/contrib/services/systemd/tmpfiles-gnunet.conf
@@ -0,0 +1,10 @@
1# Typically placed into /usr/lib/tmpfiles.d/gnunet.conf
2d /var/lib/gnunet 0700 gnunet gnunet - -
3z /usr/lib/gnunet/gnunet-helper-dns 4750 root gnunetdns - -
4z /usr/lib/gnunet/gnunet-service-dns 2750 gnunet gnunetdns - -
5z /usr/lib/gnunet/libexec/gnunet-helper-vpn 4750 root root - -
6z /usr/lib/gnunet/libexec/gnunet-helper-transport-wlan 4750 root root - -
7z /usr/lib/gnunet/libexec/gnunet-helper-transport-bluetooth 4750 root root - -
8z /usr/lib/gnunet/libexec/gnunet-helper-exit 4750 root root - -
9z /usr/lib/gnunet/libexec/gnunet-helper-nat-server 4750 root root - -
10z /usr/lib/gnunet/libexec/gnunet-helper-nat-client 4750 root root - -
diff --git a/debian/changelog b/debian/changelog
index a078f81c5..b330ee4ee 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,90 @@
1gnunet (0.15.3) unstable; urgency=low
2
3 * New upstream release, bumping version.
4
5 -- Christian Grothoff <grothoff@gnu.org> Sat, 28 Aug 2021 21:14:18 +0200
6
7gnunet (0.15.2) unstable; urgency=low
8
9 * New upstream release, bumping version.
10 * Fixes linker issues. Very strange that Debian insists on explicit indirect dependencies for plugins.
11
12 -- Christian Grothoff <grothoff@gnu.org> Tue, 24 Aug 2021 21:14:18 +0200
13
14gnunet (0.15.1) unstable; urgency=low
15
16 * New upstream release, bumping version.
17
18 -- Christian Grothoff <grothoff@gnu.org> Mon, 23 Aug 2021 21:14:18 +0200
19
20gnunet (0.15.0) unstable; urgency=low
21
22 * New upstream release, bumping version.
23
24 -- Florian Dold <florian@dold.me> Sun, 08 Aug 2021 21:14:18 +0200
25
26gnunet (0.14.1-13) unstable; urgency=low
27
28 * Minor upstream fixes.
29
30 -- Florian Dold <florian@dold.me> Fri, 06 Aug 2021 11:56:29 +0200
31
32gnunet (0.14.1-12) unstable; urgency=low
33
34 * Lower debhelper compatibility level to 12.
35 * Do not inject user units in postinst for now.
36 * Tweaks to packaging.
37
38 -- Florian Dold <florian@dold.me> Sat, 31 Jul 2021 20:04:42 +0200
39
40gnunet (0.14.1-11) unstable; urgency=low
41
42 * Make configuration parsing more permissive.
43
44 -- Florian Dold <florian@dold.me> Sat, 31 Jul 2021 20:04:42 +0200
45
46gnunet (0.14.1-10) unstable; urgency=low
47
48 * Do not remove users/groups in postrm.
49
50 -- Florian Dold <florian@dold.me> Sat, 31 Jul 2021 16:46:13 +0200
51
52gnunet (0.14.1-9) unstable; urgency=low
53
54 * Fix some bugs in configuration file parsing.
55
56 -- Florian Dold <florian@dold.me> Sat, 31 Jul 2021 16:08:19 +0200
57
58gnunet (0.14.1-8) unstable; urgency=low
59
60 * Allow configuration entry point to fall back to /etc/.
61
62 -- Florian Dold <florian@dold.me> Thu, 29 Jul 2021 15:03:08 +0200
63
64gnunet (0.14.1-7) unstable; urgency=low
65
66 * Implement new configuration directives and diagnostics.
67
68 -- Florian Dold <florian@dold.me> Wed, 28 Jul 2021 21:23:36 +0200
69
70gnunet (0.14.1-6) unstable; urgency=low
71
72 * Fix path resolution of inlined config files.
73
74 -- Florian Dold <florian@dold.me> Mon, 26 Jul 2021 19:35:45 +0200
75
76gnunet (0.14.1-5) unstable; urgency=low
77
78 * New JSON construction helpers.
79
80 -- Florian Dold <florian@dold.me> Mon, 26 Jul 2021 17:49:20 +0200
81
82gnunet (0.14.1-4) unstable; urgency=low
83
84 * New absolute/relative time helpers.
85
86 -- Florian Dold <florian@dold.me> Mon, 26 Jul 2021 15:44:44 +0200
87
1gnunet (0.14.1-3) unstable; urgency=low 88gnunet (0.14.1-3) unstable; urgency=low
2 89
3 * Allow decoding larger JSON objects than 1 kb. 90 * Allow decoding larger JSON objects than 1 kb.
diff --git a/debian/control b/debian/control
index 01b549286..57acc6e1e 100644
--- a/debian/control
+++ b/debian/control
@@ -6,7 +6,7 @@ Build-Depends:
6 autoconf (>=2.59), 6 autoconf (>=2.59),
7 automake (>=1.11.1), 7 automake (>=1.11.1),
8 autopoint, 8 autopoint,
9 debhelper-compat (= 13), 9 debhelper-compat (= 12),
10 gettext, 10 gettext,
11 iptables, 11 iptables,
12 libbluetooth-dev, 12 libbluetooth-dev,
diff --git a/debian/gnunet.config b/debian/gnunet.config
index 6daa6818e..ebb94c56f 100644
--- a/debian/gnunet.config
+++ b/debian/gnunet.config
@@ -4,12 +4,6 @@ set -e
4 4
5. /usr/share/debconf/confmodule 5. /usr/share/debconf/confmodule
6 6
7db_input low gnunet-systempeer/username || true
8db_go
9
10db_input low gnunet-systempeer/groupname || true
11db_go
12
13db_input medium gnunet-systempeer/autostart || true 7db_input medium gnunet-systempeer/autostart || true
14db_go 8db_go
15 9
diff --git a/debian/gnunet.dirs b/debian/gnunet.dirs
index 1e2a7d4c0..e6da73664 100644
--- a/debian/gnunet.dirs
+++ b/debian/gnunet.dirs
@@ -1,2 +1 @@
1var/lib/gnunet var/lib/gnunet
2var/log/gnunetd
diff --git a/debian/gnunet.install b/debian/gnunet.install
index 0de11b4c2..a19f47cc8 100644
--- a/debian/gnunet.install
+++ b/debian/gnunet.install
@@ -1,13 +1,9 @@
1etc/gnunet.conf 1etc/gnunet.conf
2usr/bin/ 2usr/bin/
3usr/libexec/gnunet-cmds-helper
3usr/lib/*/gnunet/ 4usr/lib/*/gnunet/
4usr/lib/*/*.so.* 5usr/lib/*/*.so.*
5usr/share/man/ 6usr/share/man/
6usr/share/info/ 7usr/share/info/
7usr/share/doc/gnunet/ 8usr/share/doc/gnunet/
8usr/share/gnunet/ 9usr/share/gnunet/
9debian/etc/skel/.config/ etc/skel/
10debian/etc/skel/.config/gnunet.conf etc/skel/.config/
11debian/etc/skel/.config/systemd etc/skel/.config/
12debian/etc/skel/.config/systemd/gnunet-user-gns-proxy.service etc/skel/.config/systemd/
13debian/etc/skel/.config/systemd/gnunet-userpeer.service etc/skel/.config/systemd/
diff --git a/debian/gnunet.postinst b/debian/gnunet.postinst
index b6317f5be..fe36500c0 100644
--- a/debian/gnunet.postinst
+++ b/debian/gnunet.postinst
@@ -9,13 +9,13 @@ set -e
9# in /etc/nsswitch.conf to automatically enable nss-gns support; do not change 9# in /etc/nsswitch.conf to automatically enable nss-gns support; do not change
10# the configuration if the "hosts" line already references some gns lookups 10# the configuration if the "hosts" line already references some gns lookups
11insert_gns() { 11insert_gns() {
12 echo -n "Checking NSS setup..." 12 echo -n "Checking NSS setup..."
13 # abort if /etc/nsswitch.conf does not exist 13 # abort if /etc/nsswitch.conf does not exist
14 if ! [ -e /etc/nsswitch.conf ]; then 14 if ! [ -e /etc/nsswitch.conf ]; then
15 echo "Could not find /etc/nsswitch.conf." 15 echo "Could not find /etc/nsswitch.conf."
16 return 1 16 return 1
17 fi 17 fi
18 perl -i -pe ' 18 perl -i -pe '
19 sub insert { 19 sub insert {
20 # this also splits on tab 20 # this also splits on tab
21 my @bits=split(" ", shift); 21 my @bits=split(" ", shift);
@@ -35,270 +35,169 @@ insert_gns() {
35 } 35 }
36 s/^(hosts:\s+)(.*)/$1.insert($2)/e; 36 s/^(hosts:\s+)(.*)/$1.insert($2)/e;
37 ' /etc/nsswitch.conf 37 ' /etc/nsswitch.conf
38 echo " done." 38 echo " done."
39} 39}
40 40
41case "${1}" in 41case "${1}" in
42 configure) 42configure)
43 db_version 2.0 43 db_version 2.0
44 44
45 db_get gnunet-systempeer/username 45 _USERNAME="gnunet"
46 _USERNAME="${RET:-gnunet}" 46 _GROUPNAME="gnunet"
47 47
48 db_get gnunet-systempeer/groupname 48 db_get gnunet-systempeer/autostart
49 _GROUPNAME="${RET:-gnunet}" 49 _AUTOSTART="${RET}" # boolean
50 50
51 db_get gnunet-systempeer/autostart 51 db_get gnunet-dns/libnsswitch
52 _AUTOSTART="${RET}" # boolean 52 _LIBNSSWITCH="${RET}" # boolean
53 53
54 db_get gnunet-dns/libnsswitch 54 db_get gnunet-user/proxy
55 _LIBNSSWITCH="${RET}" # boolean 55 _PROXY="${RET}" # boolean
56 56
57 db_get gnunet-user/proxy 57 db_stop
58 _PROXY="${RET}" # boolean 58
59 59 # Read default values
60 db_stop 60 GNUNET_HOME="/var/lib/gnunet"
61 61
62 CONFIG_FILE="/etc/default/gnunet" 62 # Creating gnunet group if needed
63 63 if ! getent group ${_GROUPNAME} >/dev/null; then
64 # Read default values 64 echo -n "Creating new GNUnet group ${_GROUPNAME}:"
65 GNUNET_HOME="/var/lib/gnunet" 65 addgroup --quiet --system ${_GROUPNAME}
66 eval $(grep GNUNET_HOME /etc/gnunet.conf | tr -d '[:blank:]') 66 echo " done."
67 67 fi
68 # Creating gnunet group if needed 68
69 if ! getent group ${_GROUPNAME} > /dev/null 69 # Creating gnunet user if needed
70 then 70 if ! getent passwd ${_USERNAME} >/dev/null; then
71 echo -n "Creating new GNUnet group ${_GROUPNAME}:" 71 echo -n "Creating new GNUnet user ${_USERNAME}:"
72 addgroup --quiet --system ${_GROUPNAME} 72 adduser --quiet --system --ingroup ${_GROUPNAME} --home ${GNUNET_HOME} ${_USERNAME}
73 echo " done." 73 echo " done."
74 fi 74 fi
75 75
76 # Creating gnunet user if needed 76 # Add a special secured group
77 if ! getent passwd ${_USERNAME} > /dev/null 77 GNUNETDNS_GROUP="gnunetdns"
78 then 78
79 echo -n "Creating new GNUnet user ${_USERNAME}:" 79 # Creating gnunetdns group if needed
80 adduser --quiet --system --ingroup ${_GROUPNAME} --home ${GNUNET_HOME} ${_USERNAME} 80 if ! getent group ${GNUNETDNS_GROUP} >/dev/null; then
81 echo " done." 81 echo -n "Creating new secured GNUnet group ${GNUNETDNS_GROUP}:"
82 fi 82 addgroup --quiet --system ${GNUNETDNS_GROUP}
83 83 echo " done."
84 # Add a special secured group 84 fi
85 GNUNETDNS_GROUP="gnunetdns" 85
86 86 # Copy the libnss_gns files to the libnss directory
87 # Creating gnunetdns group if needed 87 if ${_LIBNSSWITCH}; then
88 if ! getent group ${GNUNETDNS_GROUP} > /dev/null 88 echo "Editing /etc/nsswitch.conf to use GNS before DNS"
89 then 89 # $2 equals the currently installed version if it exists
90 echo -n "Creating new secured GNUnet group ${GNUNETDNS_GROUP}:" 90 if [ -z "$2" ]; then
91 addgroup --quiet --system ${GNUNETDNS_GROUP} 91 # first install: setup the recommended configuration (unless
92 echo " done." 92 # nsswitch.conf already contains mdns entries)
93 fi 93 insert_gns
94 94 if [ "$?" -gt 0 ]; then
95 # Copy the libnss_gns files to the libnss directory 95 echo "nsswitch does not exist on this system"
96 if ${_LIBNSSWITCH} 96 fi
97 then 97 fi
98 echo "Editing /etc/nsswitch.conf to use GNS before DNS" 98 echo " done."
99 # $2 equals the currently installed version if it exists 99 fi
100 if [ -z "$2" ]; then 100
101 # first install: setup the recommended configuration (unless 101 # # Change the proxy settings for Firefox and Chromium if desired
102 # nsswitch.conf already contains mdns entries) 102 # if ${_PROXY}
103 insert_gns 103 # then
104 if [ "$?" -gt 0 ]; then 104 # mkdir -p /etc/X11/xinit/xinitrc.d/
105 echo "nsswitch does not exist on this system" 105 #cat > "/etc/X11/xinit/xinitrc.d/80-gnunet-user-services" << "EOF"
106 fi 106 ##!/bin/bash
107 fi 107 #systemctl --user daemon-reload
108 echo " done." 108 #systemctl --user start gnunet-user
109 fi 109 #systemctl --user enable gnunet-user
110 110 #user=$(whoami)
111 # Install GNUnet configuration for all users provided non exists 111 #gnunet_proxy=$(gnunet-config -c /etc/skel/.config/gnunet.conf -s gns-proxy | grep 'IMMEDIATE_START = YES')
112 userlist=$(awk -F ':' '$3>=1000 && $3<2000 {print $1}' /etc/passwd) 112 #
113 users=($userlist) 113 ## Enable GNS proxy for new users informed by /etc/skel.
114 homedirlist=$(awk -F ':' '$3>=1000 && $3<2000 {print $6}' /etc/passwd) 114 #if [ "$gnunet_proxy" ]; then
115 homedirs=($homedirlist) 115 #
116 116 # # Calculate user specific port
117 for (( i=0; i<${#users[@]}; i++ )); do 117 # port=$((8000+$(id -u $user)))
118 usermod -aG gnunet ${users[$i]} 118 #
119 if [ -n "$i" ] && [ -d "${homedirs[$i]}" ]; then 119 # gnunet-config -c $HOME/.config/gnunet.conf \
120 mkdir -p ${homedirs[$i]}/.config/systemd/user/ 120 # --section=gns-proxy \
121 121 # --option=OPTIONS \
122 cat > "${homedirs[$i]}/.config/systemd/user/gnunet-user.service" << EOF 122 # --value="-p $port"
123# Copyright (C) 2019 GNUnet e.V. 123 #
124# 124 # # Firefox
125# Copying and distribution of this file, with or without modification, 125 # defaultprofile=$(ls $HOME/.mozilla/firefox/*.default)
126# are permitted in any medium without royalty provided the copyright 126 # if [ ! "$defaultprofile" ];then
127# notice and this notice are preserved. This file is offered as-is, 127 # timeout 3s firefox --headless # dirty: create profile if not existent
128# without any warranty. 128 # fi
129 129 # for ffprofile in $HOME/.mozilla/firefox/*.*/; do
130[Unit] 130 # js=$ffprofile/user.js
131Description=Service that runs a GNUnet for the user gnunet 131 # if [ -f "$js" ]; then
132After=network.target 132 # sed -i '/Preferences for using the GNU Name System/d' "$js"
133 133 # sed -i '/network.proxy.socks/d' "$js"
134[Service] 134 # sed -i '/network.proxy.socks_port/d' "$js"
135Type=forking 135 # sed -i '/network.proxy.socks_remote_dns/d' "$js"
136ExecStart=/usr/bin/gnunet-arm -s -c ${homedirs[$i]}/.config/gnunet.conf 136 # sed -i '/network.proxy.type/d' "$js"
137ExecStop=/usr/bin/gnunet-arm -e -c ${homedirs[$i]}/.config/gnunet.conf 137 # fi
138 138 # echo "// Preferences for using the GNU Name System" >> "$js"
139[Install] 139 # echo "user_pref(\"network.proxy.socks\", \"localhost\");" >> "$js"
140WantedBy=multi-user.target 140 # echo "user_pref(\"network.proxy.socks_port\", $port);" >> "$js"
141EOF 141 # echo "user_pref(\"network.proxy.socks_remote_dns\", true);" >> "$js"
142 142 # echo "user_pref(\"network.proxy.type\", 1);" >> "$js"
143 chown "${users[$i]}":"${users[$i]}" "${homedirs[$i]}/.config/systemd/user/gnunet-user.service" 143 # done
144 if [ ! -f "${homedirs[$i]}/.config/gnunet.conf" ]; then 144 #
145 mkdir -p ${homedirs[$i]}/.config/ 145 # # Chromium
146 cp /etc/skel/.config/gnunet.conf "${homedirs[$i]}/.config/gnunet.conf" 146 # profile="$HOME/.profile"
147 chmod 644 "${homedirs[$i]}/.config/gnunet.conf" 147 # if [ -f "$profile" ]; then
148 fi 148 # sed -i '/CHROMIUM_USER_FLAGS/d' "$profile"
149 fi 149 # fi
150 port=$((8000+$(id -u "${users[$i]}"))) 150 # echo "export CHROMIUM_USER_FLAGS=--proxy-server=socks5://localhost:$port" \
151 gnunet-config -c "${homedirs[$i]}/.config/gnunet.conf" \ 151 # >> "$profile"
152 --section=gns-proxy \ 152 #fi
153 --option=IMMEDIATE_START \ 153 #
154 --value=YES 154 ## Create/Renew GNS certificate authority (CA) per user.
155 gnunet-config -c "${homedirs[$i]}/.config/gnunet.conf" \ 155 #gnunet-gns-proxy-setup-ca
156 --section=gns-proxy \ 156 #EOF
157 --option=OPTIONS \ 157 # fi
158 --value="-p $port" 158
159 chown "${users[$i]}":"${users[$i]}" "${homedirs[$i]}/.config/gnunet.conf" 159 # Update files and directories permissions.
160 done 160 # Assuming default values, this *should* not be changed.
161 161 echo -n "Updating files and directories permissions:"
162 # Change the proxy settings for Firefox and Chromium if desired 162 # Secure access to the data directory
163 if ${_PROXY} 163 chmod 0700 "${GNUNET_HOME}" || true
164 then 164 # Restrict access on setuid binaries
165 mkdir -p /etc/X11/xinit/xinitrc.d/ 165 for file in /usr/bin/gnunet-helper-exit \
166cat > "/etc/X11/xinit/xinitrc.d/80-gnunet-user-services" << "EOF" 166 /usr/bin/gnunet-helper-nat-client \
167#!/bin/bash 167 /usr/bin/gnunet-helper-nat-server \
168systemctl --user daemon-reload 168 /usr/bin/gnunet-helper-transport-bluetooth \
169systemctl --user start gnunet-user 169 /usr/bin/gnunet-helper-transport-wlan \
170systemctl --user enable gnunet-user 170 /usr/bin/gnunet-helper-vpn; do
171user=$(whoami) 171 # only do something when no setting exists
172gnunet_proxy=$(gnunet-config -c /etc/skel/.config/gnunet.conf -s gns-proxy | grep 'IMMEDIATE_START = YES') 172 if ! dpkg-statoverride --list $file >/dev/null 2>&1 && [ -e $file ]; then
173 173 chown root:${_GROUPNAME} $file
174# Enable GNS proxy for new users informed by /etc/skel. 174 chmod 4750 $file
175if [ "$gnunet_proxy" ]; then 175 fi
176 176 done
177 # Calculate user specific port 177 if ! dpkg-statoverride --list /usr/bin/gnunet-helper-dns >/dev/null 2>&1 &&
178 port=$((8000+$(id -u $user))) 178 [ -e /usr/bin/gnunet-helper-dns ]; then
179 179 chown root:${GNUNETDNS_GROUP} /usr/bin/gnunet-helper-dns
180 gnunet-config -c $HOME/.config/gnunet.conf \ 180 chmod 4750 /usr/bin/gnunet-helper-dns
181 --section=gns-proxy \ 181 fi
182 --option=OPTIONS \ 182 if ! dpkg-statoverride --list /usr/bin/gnunet-service-dns >/dev/null 2>&1 &&
183 --value="-p $port" 183 [ -e /usr/bin/gnunet-service-dns ]; then
184 184 chown ${_USERNAME}:${GNUNETDNS_GROUP} /usr/bin/gnunet-service-dns
185 # Firefox 185 chmod 2750 /usr/bin/gnunet-service-dns
186 defaultprofile=$(ls $HOME/.mozilla/firefox/*.default) 186 fi
187 if [ ! "$defaultprofile" ];then 187 echo " done."
188 timeout 3s firefox --headless # dirty: create profile if not existent 188
189 fi 189 echo "All done."
190 for ffprofile in $HOME/.mozilla/firefox/*.*/; do 190
191 js=$ffprofile/user.js 191 ;;
192 if [ -f "$js" ]; then 192
193 sed -i '/Preferences for using the GNU Name System/d' "$js" 193abort-upgrade | abort-remove | abort-deconfigure) ;;
194 sed -i '/network.proxy.socks/d' "$js" 194
195 sed -i '/network.proxy.socks_port/d' "$js" 195\
196 sed -i '/network.proxy.socks_remote_dns/d' "$js" 196 \
197 sed -i '/network.proxy.type/d' "$js" 197 *)
198 fi 198 echo "postinst called with unknown argument \`${1}'" >&2
199 echo "// Preferences for using the GNU Name System" >> "$js" 199 exit 1
200 echo "user_pref(\"network.proxy.socks\", \"localhost\");" >> "$js" 200 ;;
201 echo "user_pref(\"network.proxy.socks_port\", $port);" >> "$js"
202 echo "user_pref(\"network.proxy.socks_remote_dns\", true);" >> "$js"
203 echo "user_pref(\"network.proxy.type\", 1);" >> "$js"
204 done
205
206 # Chromium
207 profile="$HOME/.profile"
208 if [ -f "$profile" ]; then
209 sed -i '/CHROMIUM_USER_FLAGS/d' "$profile"
210 fi
211 echo "export CHROMIUM_USER_FLAGS=--proxy-server=socks5://localhost:$port" \
212 >> "$profile"
213fi
214
215# Create/Renew GNS certificate authority (CA) per user.
216gnunet-gns-proxy-setup-ca
217EOF
218 fi
219
220 # Update files and directories permissions.
221 # Assuming default values, this *should* not be changed.
222 echo -n "Updating files and directories permissions:"
223 chown -R ${_USERNAME}:${_GROUPNAME} /var/log/gnunetd
224 chown -R ${_USERNAME}:${_GROUPNAME} ${GNUNET_HOME}
225 # Secure access to the data directory
226 chmod 0700 "${GNUNET_HOME}" || true
227 # Restrict access on setuid binaries
228 for file in /usr/bin/gnunet-helper-exit \
229 /usr/bin/gnunet-helper-nat-client \
230 /usr/bin/gnunet-helper-nat-server \
231 /usr/bin/gnunet-helper-transport-bluetooth \
232 /usr/bin/gnunet-helper-transport-wlan \
233 /usr/bin/gnunet-helper-vpn
234 do
235 # only do something when no setting exists
236 if ! dpkg-statoverride --list $file >/dev/null 2>&1 && [ -e $file ]
237 then
238 chown root:${_GROUPNAME} $file
239 chmod 4750 $file
240 fi
241 done
242 if ! dpkg-statoverride --list /usr/bin/gnunet-helper-dns >/dev/null 2>&1 \
243 && [ -e /usr/bin/gnunet-helper-dns ]
244 then
245 chown root:${GNUNETDNS_GROUP} /usr/bin/gnunet-helper-dns
246 chmod 4750 /usr/bin/gnunet-helper-dns
247 fi
248 if ! dpkg-statoverride --list /usr/bin/gnunet-service-dns >/dev/null 2>&1 \
249 && [ -e /usr/bin/gnunet-service-dns ]
250 then
251 chown ${_USERNAME}:${GNUNETDNS_GROUP} /usr/bin/gnunet-service-dns
252 chmod 2750 /usr/bin/gnunet-service-dns
253 fi
254 echo " done."
255
256 # Writing new values to configuration file
257 echo -n "Writing new configuration file:"
258 CONFIG_NEW=$(tempfile)
259
260cat > "${CONFIG_NEW}" <<EOF
261# This file controls the behaviour of the GNUnet init script.
262# It will be parsed as a shell script.
263# please do not edit by hand, use 'dpkg-reconfigure gnunet-systempeer'.
264
265GNUNET_USER=${_USERNAME}
266GNUNET_GROUP=${_GROUPNAME}
267GNUNET_AUTOSTART="${_AUTOSTART}"
268EOF
269
270cat > "/etc/systemd/system/gnunet.service" <<EOF
271[Unit]
272Description=A framework for secure peer-to-peer networking
273
274[Service]
275EnvironmentFile=/etc/default/gnunet
276User=${_USERNAME}
277Type=forking
278ExecStart=/usr/bin/gnunet-arm -s -c /etc/gnunet.conf
279ExecStop=/usr/bin/gnunet-arm -e -c /etc/gnunet.conf
280
281[Install]
282WantedBy=multi-user.target
283EOF
284
285 cp -f "${CONFIG_NEW}" "${CONFIG_FILE}"
286 echo " done."
287
288 # Cleaning
289 rm -f "${CONFIG_NEW}"
290 echo "All done."
291
292 ;;
293
294 abort-upgrade|abort-remove|abort-deconfigure)
295
296 ;;
297
298 *)
299 echo "postinst called with unknown argument \`${1}'" >&2
300 exit 1
301 ;;
302esac 201esac
303 202
304#DEBHELPER# 203#DEBHELPER#
diff --git a/debian/gnunet.postrm b/debian/gnunet.postrm
index 2c3887202..592fe04a1 100644
--- a/debian/gnunet.postrm
+++ b/debian/gnunet.postrm
@@ -2,25 +2,12 @@
2 2
3set -e 3set -e
4 4
5pathfind() {
6 OLDIFS="$IFS"
7 IFS=:
8 for p in $PATH; do
9 if [ -x "$p/$*" ]; then
10 IFS="$OLDIFS"
11 return 0
12 fi
13 done
14 IFS="$OLDIFS"
15 return 1
16}
17
18remove_gns() { 5remove_gns() {
19 # abort if /etc/nsswitch.conf does not exist 6 # abort if /etc/nsswitch.conf does not exist
20 if ! [ -e /etc/nsswitch.conf ]; then 7 if ! [ -e /etc/nsswitch.conf ]; then
21 return 8 return
22 fi 9 fi
23 perl -i -pe ' 10 perl -i -pe '
24 my @remove=( 11 my @remove=(
25 "gns [NOTFOUND=return]", 12 "gns [NOTFOUND=return]",
26 ); 13 );
@@ -35,67 +22,44 @@ remove_gns() {
35 ' /etc/nsswitch.conf 22 ' /etc/nsswitch.conf
36} 23}
37 24
25_USERNAME="gnunet"
26_GROUPNAME="gnunet"
27GNUNETDNS_GROUP="gnunetdns"
28if [ -e /usr/share/debconf/confmodule ]; then
29 . /usr/share/debconf/confmodule
30 db_version 2.0
38 31
39case "${1}" in 32 db_get gnunet-dns/libnsswitch
40 purge) 33 _LIBNSSWITCH="${RET}"
41 if [ -e /usr/share/debconf/confmodule ] 34fi
42 then
43 . /usr/share/debconf/confmodule
44 db_version 2.0
45
46 db_get gnunet-systempeer/username
47 _USERNAME="${RET:-gnunet}"
48
49 db_get gnunet-systempeer/groupname
50 _GROUPNAME="${RET:-gnunet}"
51
52 db_get gnunet-dns/libnsswitch
53 _LIBNSSWITCH="${RET}"
54 else
55 _USERNAME="gnunet"
56 _GROUPNAME="gnunet"
57 fi
58
59 GNUNETDNS_GROUP="gnunetdns"
60
61 if $_LIBNSSWITCH
62 then
63 rm -rf /usr/lib/x86_64-linux-gnu/usr/libnss_gns.so.2
64 rm -rf /usr/lib/x86_64-linux-gnu/usr/libnss_gns4.so.2
65 rm -rf /usr/lib/x86_64-linux-gnu/usr/libnss_gns6.so.2
66 remove_gns
67 fi
68 35
69 if pathfind deluser 36case "${1}" in
70 then 37purge)
71 deluser --quiet --system ${_USERNAME} || true 38 if $_LIBNSSWITCH; then
72 fi 39 rm -rf /usr/lib/x86_64-linux-gnu/usr/libnss_gns.so.2
73 40 rm -rf /usr/lib/x86_64-linux-gnu/usr/libnss_gns4.so.2
74 if pathfind delgroup 41 rm -rf /usr/lib/x86_64-linux-gnu/usr/libnss_gns6.so.2
75 then 42 remove_gns
76 delgroup --quiet --system --only-if-empty ${_GROUPNAME} || true 43 fi
77 delgroup --quiet --system --only-if-empty ${GNUNETDNS_GROUP} || true 44
78 fi 45 rm -rf /var/log/gnunet.log /var/lib/gnunet /etc/default/gnunet
79 46 ;;
80 rm -rf /var/log/gnunet.log /var/lib/gnunet /etc/default/gnunet 47
81 ;; 48remove | upgrade | failed-upgrade | abort-install | abort-upgrade | disappear)
82 49
83 remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) 50 if $_LIBNSSWITCH; then
84 51 rm -rf /usr/lib/x86_64-linux-gnu/usr/libnss_gns.so.2
85 if $_LIBNSSWITCH 52 rm -rf /usr/lib/x86_64-linux-gnu/usr/libnss_gns4.so.2
86 then 53 rm -rf /usr/lib/x86_64-linux-gnu/usr/libnss_gns6.so.2
87 rm -rf /usr/lib/x86_64-linux-gnu/usr/libnss_gns.so.2 54 remove_gns
88 rm -rf /usr/lib/x86_64-linux-gnu/usr/libnss_gns4.so.2 55 fi
89 rm -rf /usr/lib/x86_64-linux-gnu/usr/libnss_gns6.so.2 56
90 remove_gns 57 ;;
91 fi 58
92 59*)
93 ;; 60 echo "postrm called with unknown argument \`${1}'" >&2
94 61 exit 1
95 *) 62 ;;
96 echo "postrm called with unknown argument \`${1}'" >&2
97 exit 1
98 ;;
99esac 63esac
100 64
101#DEBHELPER# 65#DEBHELPER#
diff --git a/debian/gnunet.service b/debian/gnunet.service
index 4b650e5ff..b538802c4 100644
--- a/debian/gnunet.service
+++ b/debian/gnunet.service
@@ -1,12 +1,12 @@
1[Unit] 1[Unit]
2Description=A framework for secure peer-to-peer networking 2Description=GNUnet system service
3After=network.target
3 4
4[Service] 5[Service]
5EnvironmentFile=/etc/default/gnunet 6Type=simple
6User=${GNUNET_USER} 7User=gnunet
7Type=forking 8ExecStart=/usr/lib/gnunet/libexec/gnunet-service-arm -c /etc/gnunet.conf
8ExecStart=/usr/bin/gnunet-arm -s -c /etc/gnunet.conf 9StateDirectory=gnunet
9ExecStop=/usr/bin/gnunet-arm -e -c /etc/gnunet.conf
10 10
11[Install] 11[Install]
12WantedBy=multi-user.target 12WantedBy=multi-user.target
diff --git a/debian/gnunet.templates b/debian/gnunet.templates
index 074fb41fe..df74f77f0 100644
--- a/debian/gnunet.templates
+++ b/debian/gnunet.templates
@@ -1,25 +1,6 @@
1Template: gnunet-systempeer/username
2Type: string
3Default: gnunet
4_Description: GNUnet user:
5 Please choose the user that the GNUnet server process will run as.
6 .
7 This should be a dedicated account. If the specified account does not
8 already exist, it will automatically be created, with no login shell.
9
10Template: gnunet-systempeer/groupname
11Type: string
12Default: gnunet
13_Description: GNUnet group:
14 Please choose the group that the GNUnet peer process will run as.
15 .
16 This should be a dedicated group, not one that already owns data.
17 Only the members of this group will have access to GNUnet data, and
18 be allowed to start and stop the GNUnet server.
19
20Template: gnunet-systempeer/autostart 1Template: gnunet-systempeer/autostart
21Type: boolean 2Type: boolean
22Default: true 3Default: false
23_Description: Should the GNUnet server be launched on boot? 4_Description: Should the GNUnet server be launched on boot?
24 If you choose this option, a GNUnet peer will be launched each time 5 If you choose this option, a GNUnet peer will be launched each time
25 the system is started. Otherwise, you will need to launch 6 the system is started. Otherwise, you will need to launch
@@ -27,7 +8,7 @@ _Description: Should the GNUnet server be launched on boot?
27 8
28Template: gnunet-dns/libnsswitch 9Template: gnunet-dns/libnsswitch
29Type: boolean 10Type: boolean
30Default: true 11Default: false
31_Description: Should GNS be hooked into the system resolution process? 12_Description: Should GNS be hooked into the system resolution process?
32 If you choose this option, GNS will be hooked into the system 13 If you choose this option, GNS will be hooked into the system
33 resolution process. Records that can be resolved using GNS are 14 resolution process. Records that can be resolved using GNS are
@@ -37,7 +18,7 @@ _Description: Should GNS be hooked into the system resolution process?
37 18
38Template: gnunet-user/proxy 19Template: gnunet-user/proxy
39Type: boolean 20Type: boolean
40Default: true 21Default: false
41_Description: Use the GNU Name System in Firefox/Chromium by default?" 22_Description: Use the GNU Name System in Firefox/Chromium by default?"
42 If you choose this option the proxy settings for Firefox and Chromium will be 23 If you choose this option the proxy settings for Firefox and Chromium will be
43 adjusted to use a user local running gnunet-gns-proxy to delegate DNS requests 24 adjusted to use a user local running gnunet-gns-proxy to delegate DNS requests
diff --git a/debian/rules b/debian/rules
index 69f44aa80..136100584 100755
--- a/debian/rules
+++ b/debian/rules
@@ -35,6 +35,9 @@ override_dh_auto_install-arch:
35 35
36override_dh_auto_install-indep: 36override_dh_auto_install-indep:
37 37
38override_dh_installsystemd:
39 dh_installsystemd -pgnunet --no-start --no-enable gnunet.service
40
38execute_after_dh_auto_install: 41execute_after_dh_auto_install:
39 dh_link -plibgnunet-dev \ 42 dh_link -plibgnunet-dev \
40 usr/lib/$(DEB_HOST_MULTIARCH)/gnunet/nss/libnss_gns.so.2 usr/lib/$(DEB_HOST_MULTIARCH)/libnss_gns.so \ 43 usr/lib/$(DEB_HOST_MULTIARCH)/gnunet/nss/libnss_gns.so.2 usr/lib/$(DEB_HOST_MULTIARCH)/libnss_gns.so \
@@ -46,7 +49,9 @@ override_dh_auto_clean:
46 rm -rf contrib/gnunet_janitor.py contrib/gnunet_pyexpect.py libltdl/ \ 49 rm -rf contrib/gnunet_janitor.py contrib/gnunet_pyexpect.py libltdl/ \
47 src/integration-tests/*.py 50 src/integration-tests/*.py
48 51
49# Remove files already present in libgnunet from main gnunet package 52# Remove files already present in libgnunet from main gnunet package and libgnunet-dev package
50override_dh_install: 53override_dh_install:
51 dh_install 54 dh_install
52 cd debian/libgnunet; find . -type f,l -exec rm -f ../gnunet/{} \; 55 cd debian/libgnunet; find . -type f,l -exec rm -f ../gnunet/{} \;
56 cd debian/libgnunet; find . -type f,l -exec rm -f ../libgnunet-dev/{} \;
57 cd debian/gnunet; find . -type f,l -exec rm -f ../libgnunet-dev/{} \;
diff --git a/doc/handbook/Makefile.am b/doc/handbook/Makefile.am
index d7bcab696..7c10b417a 100644
--- a/doc/handbook/Makefile.am
+++ b/doc/handbook/Makefile.am
@@ -1,48 +1,8 @@
1# This Makefile.am is in the public domain 1# This Makefile.am is in the public domain
2docdir = $(datadir)/doc/gnunet/ 2docdir = $(datadir)/doc/gnunet/
3 3
4infoimagedir = $(infodir)/images
5
6AM_MAKEINFOHTMLFLAGS = $(TEXINFO_HTMLFLAGS) 4AM_MAKEINFOHTMLFLAGS = $(TEXINFO_HTMLFLAGS)
7 5
8
9dist_infoimage_DATA = \
10 images/gnunet-gtk-0-10-gns-a-done.png \
11 images/gnunet-gtk-0-10-gns-a.png \
12 images/daemon_lego_block.png \
13 images/gnunet-gtk-0-10-gns.png \
14 images/gnunet-0-10-peerinfo.png \
15 images/gnunet-gtk-0-10-identity.png \
16 images/gnunet-fs-gtk-0-10-star-tab.png \
17 images/gnunet-gtk-0-10-download-area.png \
18 images/gnunet-gtk-0-10-search-selected.png \
19 images/gnunet-gtk-0-10-fs-menu.png \
20 images/gnunet-gtk-0-10-traffic.png \
21 images/gnunet-gtk-0-10-fs.png \
22 images/gnunet-namestore-gtk-phone.png \
23 images/gnunet-gtk-0-10-fs-publish-editing.png \
24 images/gnunet-namestore-gtk-vpn.png \
25 images/gnunet-gtk-0-10-fs-published.png \
26 images/gnunet-setup-exit.png \
27 images/gnunet-gtk-0-10-fs-publish.png \
28 images/iceweasel-preferences.png \
29 images/gnunet-gtk-0-10-fs-publish-select.png \
30 images/iceweasel-proxy.png \
31 images/gnunet-gtk-0-10-fs-publish-with-file_0.png \
32 images/service_lego_block.png \
33 images/gnunet-gtk-0-10-fs-publish-with-file.png \
34 images/service_stack.png \
35 images/gnunet-gtk-0-10-fs-search.png \
36 images/gnunet-tutorial-service.png \
37 images/gnunet-tutorial-system.png \
38 images/daemon_lego_block.svg \
39 images/lego_stack.svg \
40 images/service_lego_block.svg \
41 images/structure.dot \
42 images/gns.dot \
43 images/gns.jpg
44
45
46info_TEXINFOS = \ 6info_TEXINFOS = \
47 gnunet.texi 7 gnunet.texi
48 8
@@ -83,24 +43,64 @@ gnunet_TEXINFOS = \
83EXTRA_DIST = \ 43EXTRA_DIST = \
84 $(gnunet_TEXINFOS) \ 44 $(gnunet_TEXINFOS) \
85 htmlxref.cnf \ 45 htmlxref.cnf \
86 version.texi \ 46 version.texi \
87 run-gendocs.sh \ 47 run-gendocs.sh \
88 docstyle.css \ 48 docstyle.css \
89 manual.css \ 49 manual.css \
90 reset.css \ 50 reset.css \
91 style.css 51 style.css \
52 images/daemon_lego_block.svg \
53 images/lego_stack.svg \
54 images/service_lego_block.svg \
55 images/gns.dot \
56 images/structure.dot \
57 images/tng.dot \
58 images/ascension_interaction.png \
59 images/ascension_ssd.png \
60 images/messenger_room.png \
61 images/gnunet-gtk-0-10-gns-a-done.png \
62 images/gnunet-gtk-0-10-gns-a.png \
63 images/daemon_lego_block.png \
64 images/gnunet-gtk-0-10-gns.png \
65 images/gnunet-0-10-peerinfo.png \
66 images/gnunet-gtk-0-10-identity.png \
67 images/gnunet-fs-gtk-0-10-star-tab.png \
68 images/gnunet-gtk-0-10-download-area.png \
69 images/gnunet-gtk-0-10-search-selected.png \
70 images/gnunet-gtk-0-10-fs-menu.png \
71 images/gnunet-gtk-0-10-traffic.png \
72 images/gnunet-gtk-0-10-fs.png \
73 images/gnunet-namestore-gtk-phone.png \
74 images/gnunet-gtk-0-10-fs-publish-editing.png \
75 images/gnunet-namestore-gtk-vpn.png \
76 images/gnunet-gtk-0-10-fs-published.png \
77 images/gnunet-setup-exit.png \
78 images/gnunet-gtk-0-10-fs-publish.png \
79 images/iceweasel-preferences.png \
80 images/gnunet-gtk-0-10-fs-publish-select.png \
81 images/iceweasel-proxy.png \
82 images/gnunet-gtk-0-10-fs-publish-with-file_0.png \
83 images/service_lego_block.png \
84 images/gnunet-gtk-0-10-fs-publish-with-file.png \
85 images/service_stack.png \
86 images/gnunet-gtk-0-10-fs-search.png \
87 images/gnunet-tutorial-service.png \
88 images/gnunet-tutorial-system.png \
89 images/gns.jpg \
90 images/tng.png
91
92 92
93 93
94DISTCLEANFILES = \ 94DISTCLEANFILES = \
95 gnunet.cps \ 95 gnunet.cps \
96 chapters/developer.cps \ 96 chapters/developer.cps \
97 chapters/installation.cps \ 97 chapters/installation.cps \
98 chapter/philosophy.cps \ 98 chapter/philosophy.cps \
99 chapters/user.cps \ 99 chapters/user.cps \
100 chapters/configuration.cps \ 100 chapters/configuration.cps \
101 chapters/terminology.cps \ 101 chapters/terminology.cps \
102 chapters/vocabulary.cps \ 102 chapters/vocabulary.cps \
103 fdl-1.3.cps \ 103 fdl-1.3.cps \
104 agpl-3.0.cps \ 104 agpl-3.0.cps \
105 gpl-3.0.cps 105 gpl-3.0.cps
106 106
diff --git a/doc/handbook/chapters/developer.texi b/doc/handbook/chapters/developer.texi
index 3d9493cec..cf13fd816 100644
--- a/doc/handbook/chapters/developer.texi
+++ b/doc/handbook/chapters/developer.texi
@@ -689,6 +689,7 @@ Here you can find some rules to help you write code for GNUnet.
689@menu 689@menu
690* Naming conventions:: 690* Naming conventions::
691* Coding style:: 691* Coding style::
692* Continuous integration::
692* Commit messages and developer branches:: 693* Commit messages and developer branches::
693@end menu 694@end menu
694 695
@@ -1094,6 +1095,33 @@ fun (short i,
1094 1095
1095@end itemize 1096@end itemize
1096 1097
1098@cindex Continuous integration
1099@node Continuous integration
1100@subsection Continuous integration
1101
1102The continuous integration buildbot can be found at @uref{https://buildbot.gnunet.org}.
1103Repositories need to be enabled by a buildbot admin in order to participate
1104in the builds.
1105
1106The buildbot can be configured to process scripts in your repository root under @code{.buildbot/}:
1107
1108The files @code{build.sh}, @code{install.sh} and @code{test.sh} are executed
1109in order if present. If you want a specific worker to behave differently,
1110you can provide a worker specific script, e.g. @code{myworker_build.sh}.
1111In this case, the generic step will not be executed.
1112
1113For the @code{gnunet.git} repository, you may use "!tarball" or "!coverity" in
1114your commit messages.
1115"!tarball" will trigger a @code{make dist} of the gnunet source and verify that it
1116can be compiled. The artifact will then be published to @uref{https://buildbot.gnunet.org/artifacts}.
1117This is a good way to create a tarball for a release as it verifies the build
1118on another machine.
1119
1120The "!coverity" trigger will trigger a coverity build and submit the results
1121for analysis to coverity: @uref{https://scan.coverity.com/}.
1122Only developers with accounts for the GNUnet project on coverity.com are able to
1123see the analysis results.
1124
1097@cindex Commit messages and developer branches 1125@cindex Commit messages and developer branches
1098@node Commit messages and developer branches 1126@node Commit messages and developer branches
1099@subsection Commit messages and developer branches 1127@subsection Commit messages and developer branches
diff --git a/doc/man/gnunet-search.1 b/doc/man/gnunet-search.1
index a1c88f869..4ec5189de 100644
--- a/doc/man/gnunet-search.1
+++ b/doc/man/gnunet-search.1
@@ -126,9 +126,7 @@ Search results are printed by gnunet-search like this:
126.Pp 126.Pp
127.ad l 127.ad l
128 gnunet-download -o "COPYING" gnunet://fs/chk/HASH1.HASH2.SIZE 128 gnunet-download -o "COPYING" gnunet://fs/chk/HASH1.HASH2.SIZE
129
130 Description: The GNU General Public License 129 Description: The GNU General Public License
131
132 Mime-type: text/plain 130 Mime-type: text/plain
133.ad b 131.ad b
134 132
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 042a4b1df..814727dab 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -10,13 +10,6 @@ src/arm/arm_monitor_api.c
10src/arm/gnunet-arm.c 10src/arm/gnunet-arm.c
11src/arm/gnunet-service-arm.c 11src/arm/gnunet-service-arm.c
12src/arm/mockup-service.c 12src/arm/mockup-service.c
13src/ats-tests/ats-testing-experiment.c
14src/ats-tests/ats-testing-log.c
15src/ats-tests/ats-testing-preferences.c
16src/ats-tests/ats-testing-traffic.c
17src/ats-tests/ats-testing.c
18src/ats-tests/gnunet-ats-sim.c
19src/ats-tests/gnunet-solver-eval.c
20src/ats-tool/gnunet-ats.c 13src/ats-tool/gnunet-ats.c
21src/ats/ats_api_connectivity.c 14src/ats/ats_api_connectivity.c
22src/ats/ats_api_performance.c 15src/ats/ats_api_performance.c
@@ -206,6 +199,7 @@ src/json/json.c
206src/json/json_generator.c 199src/json/json_generator.c
207src/json/json_helper.c 200src/json/json_helper.c
208src/json/json_mhd.c 201src/json/json_mhd.c
202src/json/json_pack.c
209src/messenger/gnunet-messenger.c 203src/messenger/gnunet-messenger.c
210src/messenger/gnunet-service-messenger.c 204src/messenger/gnunet-service-messenger.c
211src/messenger/gnunet-service-messenger_basement.c 205src/messenger/gnunet-service-messenger_basement.c
@@ -294,6 +288,7 @@ src/peerstore/plugin_peerstore_sqlite.c
294src/pq/pq.c 288src/pq/pq.c
295src/pq/pq_connect.c 289src/pq/pq_connect.c
296src/pq/pq_eval.c 290src/pq/pq_eval.c
291src/pq/pq_event.c
297src/pq/pq_exec.c 292src/pq/pq_exec.c
298src/pq/pq_prepare.c 293src/pq/pq_prepare.c
299src/pq/pq_query_helper.c 294src/pq/pq_query_helper.c
@@ -394,8 +389,6 @@ src/template/gnunet-template.c
394src/testbed-logger/gnunet-service-testbed-logger.c 389src/testbed-logger/gnunet-service-testbed-logger.c
395src/testbed-logger/testbed_logger_api.c 390src/testbed-logger/testbed_logger_api.c
396src/testbed/generate-underlay-topology.c 391src/testbed/generate-underlay-topology.c
397src/testbed/gnunet-cmd.c
398src/testbed/gnunet-cmds-helper.c
399src/testbed/gnunet-daemon-latency-logger.c 392src/testbed/gnunet-daemon-latency-logger.c
400src/testbed/gnunet-daemon-testbed-blacklist.c 393src/testbed/gnunet-daemon-testbed-blacklist.c
401src/testbed/gnunet-daemon-testbed-underlay.c 394src/testbed/gnunet-daemon-testbed-underlay.c
@@ -413,21 +406,8 @@ src/testbed/gnunet-service-testbed_peers.c
413src/testbed/gnunet-testbed-profiler.c 406src/testbed/gnunet-testbed-profiler.c
414src/testbed/gnunet_mpi_test.c 407src/testbed/gnunet_mpi_test.c
415src/testbed/gnunet_testbed_mpi_spawn.c 408src/testbed/gnunet_testbed_mpi_spawn.c
416src/testbed/plugin_testcmd.c
417src/testbed/testbed_api.c 409src/testbed/testbed_api.c
418src/testbed/testbed_api_barriers.c 410src/testbed/testbed_api_barriers.c
419src/testbed/testbed_api_cmd_block_until_all_peers_started.c
420src/testbed/testbed_api_cmd_controller.c
421src/testbed/testbed_api_cmd_local_test_finished.c
422src/testbed/testbed_api_cmd_netjail_start.c
423src/testbed/testbed_api_cmd_netjail_start_testbed.c
424src/testbed/testbed_api_cmd_netjail_stop.c
425src/testbed/testbed_api_cmd_netjail_stop_testbed.c
426src/testbed/testbed_api_cmd_peer.c
427src/testbed/testbed_api_cmd_peer_store.c
428src/testbed/testbed_api_cmd_send_peer_ready.c
429src/testbed/testbed_api_cmd_tng_connect.c
430src/testbed/testbed_api_cmd_tng_service.c
431src/testbed/testbed_api_hosts.c 411src/testbed/testbed_api_hosts.c
432src/testbed/testbed_api_operations.c 412src/testbed/testbed_api_operations.c
433src/testbed/testbed_api_peers.c 413src/testbed/testbed_api_peers.c
@@ -438,14 +418,22 @@ src/testbed/testbed_api_test.c
438src/testbed/testbed_api_testbed.c 418src/testbed/testbed_api_testbed.c
439src/testbed/testbed_api_topology.c 419src/testbed/testbed_api_topology.c
440src/testbed/testbed_api_underlay.c 420src/testbed/testbed_api_underlay.c
421src/testing/gnunet-cmds-helper.c
441src/testing/gnunet-testing.c 422src/testing/gnunet-testing.c
442src/testing/list-keys.c 423src/testing/list-keys.c
443src/testing/testing.c 424src/testing/testing.c
444src/testing/testing_api_cmd_batch.c 425src/testing/testing_api_cmd_batch.c
426src/testing/testing_api_cmd_block_until_all_peers_started.c
445src/testing/testing_api_cmd_hello_world.c 427src/testing/testing_api_cmd_hello_world.c
446src/testing/testing_api_cmd_hello_world_birth.c 428src/testing/testing_api_cmd_hello_world_birth.c
429src/testing/testing_api_cmd_local_test_finished.c
430src/testing/testing_api_cmd_netjail_start.c
431src/testing/testing_api_cmd_netjail_start_testsystem.c
432src/testing/testing_api_cmd_netjail_stop.c
433src/testing/testing_api_cmd_netjail_stop_testsystem.c
447src/testing/testing_api_cmd_send_peer_ready.c 434src/testing/testing_api_cmd_send_peer_ready.c
448src/testing/testing_api_cmd_system_create.c 435src/testing/testing_api_cmd_system_create.c
436src/testing/testing_api_cmd_system_destroy.c
449src/testing/testing_api_loop.c 437src/testing/testing_api_loop.c
450src/testing/testing_api_trait_cmd.c 438src/testing/testing_api_trait_cmd.c
451src/testing/testing_api_trait_process.c 439src/testing/testing_api_trait_process.c
@@ -470,7 +458,6 @@ src/transport/gnunet-transport-profiler.c
470src/transport/gnunet-transport-wlan-receiver.c 458src/transport/gnunet-transport-wlan-receiver.c
471src/transport/gnunet-transport-wlan-sender.c 459src/transport/gnunet-transport-wlan-sender.c
472src/transport/gnunet-transport.c 460src/transport/gnunet-transport.c
473src/transport/plugin_cmd_simple_send.c
474src/transport/plugin_transport_http_client.c 461src/transport/plugin_transport_http_client.c
475src/transport/plugin_transport_http_common.c 462src/transport/plugin_transport_http_common.c
476src/transport/plugin_transport_http_server.c 463src/transport/plugin_transport_http_server.c
@@ -505,6 +492,7 @@ src/transport/transport_api_blacklist.c
505src/transport/transport_api_cmd_connecting_peers.c 492src/transport/transport_api_cmd_connecting_peers.c
506src/transport/transport_api_cmd_send_simple.c 493src/transport/transport_api_cmd_send_simple.c
507src/transport/transport_api_cmd_start_peer.c 494src/transport/transport_api_cmd_start_peer.c
495src/transport/transport_api_cmd_stop_peer.c
508src/transport/transport_api_core.c 496src/transport/transport_api_core.c
509src/transport/transport_api_hello_get.c 497src/transport/transport_api_hello_get.c
510src/transport/transport_api_manipulation.c 498src/transport/transport_api_manipulation.c
@@ -521,7 +509,6 @@ src/util/common_allocation.c
521src/util/common_endian.c 509src/util/common_endian.c
522src/util/common_logging.c 510src/util/common_logging.c
523src/util/configuration.c 511src/util/configuration.c
524src/util/configuration_loader.c
525src/util/consttime_memcmp.c 512src/util/consttime_memcmp.c
526src/util/container_bloomfilter.c 513src/util/container_bloomfilter.c
527src/util/container_heap.c 514src/util/container_heap.c
@@ -595,5 +582,6 @@ src/vpn/vpn_api.c
595src/zonemaster/gnunet-service-zonemaster-monitor.c 582src/zonemaster/gnunet-service-zonemaster-monitor.c
596src/zonemaster/gnunet-service-zonemaster.c 583src/zonemaster/gnunet-service-zonemaster.c
597src/fs/fs_api.h 584src/fs/fs_api.h
585src/include/gnunet_json_lib.h
598src/testbed/testbed_api.h 586src/testbed/testbed_api.h
599src/testbed/testbed_api_operations.h 587src/testbed/testbed_api_operations.h
diff --git a/po/de.po b/po/de.po
index 997019807..07d38fcad 100644
--- a/po/de.po
+++ b/po/de.po
@@ -10,7 +10,7 @@ msgid ""
10msgstr "" 10msgstr ""
11"Project-Id-Version: gnunet 0.10.1\n" 11"Project-Id-Version: gnunet 0.10.1\n"
12"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" 12"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
13"POT-Creation-Date: 2021-04-04 19:19+0200\n" 13"POT-Creation-Date: 2021-08-28 16:52+0200\n"
14"PO-Revision-Date: 2015-03-08 16:16+0100\n" 14"PO-Revision-Date: 2015-03-08 16:16+0100\n"
15"Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n" 15"Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n"
16"Language-Team: German <translation-team-de@lists.sourceforge.net>\n" 16"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
@@ -32,8 +32,8 @@ msgid "Issuer public key `%s' is not well-formed\n"
32msgstr "" 32msgstr ""
33 33
34#: src/abd/gnunet-abd.c:560 src/abd/gnunet-service-abd.c:1747 34#: src/abd/gnunet-abd.c:560 src/abd/gnunet-service-abd.c:1747
35#: src/namestore/gnunet-namestore-fcfsd.c:1067
35#: src/namestore/gnunet-namestore.c:1001 36#: src/namestore/gnunet-namestore.c:1001
36#: src/namestore/gnunet-namestore-fcfsd.c:1164
37#, fuzzy, c-format 37#, fuzzy, c-format
38msgid "Failed to connect to namestore\n" 38msgid "Failed to connect to namestore\n"
39msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" 39msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
@@ -499,108 +499,6 @@ msgstr ""
499msgid "Initiating shutdown as requested by client.\n" 499msgid "Initiating shutdown as requested by client.\n"
500msgstr "" 500msgstr ""
501 501
502#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044
503#, c-format
504msgid ""
505"Could not load quota for network `%s': `%s', assigning default bandwidth "
506"%llu\n"
507msgstr ""
508
509#: src/ats/gnunet-ats-solver-eval.c:3011
510#, c-format
511msgid ""
512"No outbound quota configured for network `%s', assigning default bandwidth "
513"%llu\n"
514msgstr ""
515
516#: src/ats/gnunet-ats-solver-eval.c:3063
517#, c-format
518msgid ""
519"No outbound quota configure for network `%s', assigning default bandwidth "
520"%llu\n"
521msgstr ""
522
523#: src/ats/gnunet-ats-solver-eval.c:3552 src/ats-tests/gnunet-solver-eval.c:997
524msgid "solver to use"
525msgstr ""
526
527#: src/ats/gnunet-ats-solver-eval.c:3557
528#: src/ats-tests/gnunet-solver-eval.c:1003
529#: src/ats-tests/gnunet-solver-eval.c:1008
530msgid "experiment to use"
531msgstr ""
532
533#: src/ats/gnunet-ats-solver-eval.c:3564
534msgid "print logging"
535msgstr ""
536
537#: src/ats/gnunet-ats-solver-eval.c:3569
538msgid "save logging to disk"
539msgstr ""
540
541#: src/ats/gnunet-ats-solver-eval.c:3574
542msgid "disable normalization"
543msgstr ""
544
545#: src/ats/gnunet-service-ats_plugins.c:326
546#, c-format
547msgid ""
548"Could not load %s quota for network `%s': `%s', assigning default bandwidth "
549"%llu\n"
550msgstr ""
551
552#: src/ats/gnunet-service-ats_plugins.c:336
553#, c-format
554msgid "%s quota configured for network `%s' is %llu\n"
555msgstr ""
556
557#: src/ats/gnunet-service-ats_plugins.c:382
558#, c-format
559msgid ""
560"No %s-quota configured for network `%s', assigning default bandwidth %llu\n"
561msgstr ""
562
563#: src/ats/gnunet-service-ats_plugins.c:474
564#, fuzzy, c-format
565msgid "Failed to initialize solver `%s'!\n"
566msgstr "SQLite Datenbank konnte nicht initialisiert werden.\n"
567
568#: src/ats/plugin_ats_proportional.c:1142
569#, fuzzy, c-format
570msgid "Invalid %s configuration %f \n"
571msgstr "Konfiguration konnte nicht aus %s geladen werden\n"
572
573#: src/ats/plugin_ats_proportional.c:1165
574#, fuzzy, c-format
575msgid "Invalid %s configuration %f\n"
576msgstr " gconfig\tGTK Konfiguration\n"
577
578#: src/ats-tests/ats-testing.c:420
579#, c-format
580msgid "Connected master [%u] with slave [%u]\n"
581msgstr ""
582
583#: src/ats-tests/ats-testing.c:427
584#, fuzzy, c-format
585msgid "Failed to connect master peer [%u] with slave [%u]\n"
586msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
587
588#: src/ats-tests/ats-testing-log.c:899
589msgid "Stop logging\n"
590msgstr "Protokollierung stoppen\n"
591
592#: src/ats-tests/ats-testing-log.c:955
593#, fuzzy, c-format
594msgid "Start logging `%s'\n"
595msgstr "Collection `%s' begonnen.\n"
596
597#: src/ats-tests/gnunet-ats-sim.c:92
598#, c-format
599msgid ""
600"Master [%u]: sent: %u KiB in %u sec. = %u KiB/s, received: %u KiB in %u sec. "
601"= %u KiB/s\n"
602msgstr ""
603
604#: src/ats-tool/gnunet-ats.c:299 502#: src/ats-tool/gnunet-ats.c:299
605#, c-format 503#, c-format
606msgid "%u address resolutions had a timeout\n" 504msgid "%u address resolutions had a timeout\n"
@@ -718,6 +616,80 @@ msgstr ""
718msgid "Print information about ATS state" 616msgid "Print information about ATS state"
719msgstr "Informationen über andere GNUnet Knoten ausgeben." 617msgstr "Informationen über andere GNUnet Knoten ausgeben."
720 618
619#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044
620#, c-format
621msgid ""
622"Could not load quota for network `%s': `%s', assigning default bandwidth "
623"%llu\n"
624msgstr ""
625
626#: src/ats/gnunet-ats-solver-eval.c:3011
627#, c-format
628msgid ""
629"No outbound quota configured for network `%s', assigning default bandwidth "
630"%llu\n"
631msgstr ""
632
633#: src/ats/gnunet-ats-solver-eval.c:3063
634#, c-format
635msgid ""
636"No outbound quota configure for network `%s', assigning default bandwidth "
637"%llu\n"
638msgstr ""
639
640#: src/ats/gnunet-ats-solver-eval.c:3552
641msgid "solver to use"
642msgstr ""
643
644#: src/ats/gnunet-ats-solver-eval.c:3557
645msgid "experiment to use"
646msgstr ""
647
648#: src/ats/gnunet-ats-solver-eval.c:3564
649msgid "print logging"
650msgstr ""
651
652#: src/ats/gnunet-ats-solver-eval.c:3569
653msgid "save logging to disk"
654msgstr ""
655
656#: src/ats/gnunet-ats-solver-eval.c:3574
657msgid "disable normalization"
658msgstr ""
659
660#: src/ats/gnunet-service-ats_plugins.c:326
661#, c-format
662msgid ""
663"Could not load %s quota for network `%s': `%s', assigning default bandwidth "
664"%llu\n"
665msgstr ""
666
667#: src/ats/gnunet-service-ats_plugins.c:336
668#, c-format
669msgid "%s quota configured for network `%s' is %llu\n"
670msgstr ""
671
672#: src/ats/gnunet-service-ats_plugins.c:382
673#, c-format
674msgid ""
675"No %s-quota configured for network `%s', assigning default bandwidth %llu\n"
676msgstr ""
677
678#: src/ats/gnunet-service-ats_plugins.c:474
679#, fuzzy, c-format
680msgid "Failed to initialize solver `%s'!\n"
681msgstr "SQLite Datenbank konnte nicht initialisiert werden.\n"
682
683#: src/ats/plugin_ats_proportional.c:1142
684#, fuzzy, c-format
685msgid "Invalid %s configuration %f \n"
686msgstr "Konfiguration konnte nicht aus %s geladen werden\n"
687
688#: src/ats/plugin_ats_proportional.c:1165
689#, fuzzy, c-format
690msgid "Invalid %s configuration %f\n"
691msgstr " gconfig\tGTK Konfiguration\n"
692
721#: src/auction/gnunet-auction-create.c:163 693#: src/auction/gnunet-auction-create.c:163
722msgid "description of the item to be sold" 694msgid "description of the item to be sold"
723msgstr "" 695msgstr ""
@@ -755,7 +727,7 @@ msgstr ""
755 727
756#: src/auction/gnunet-auction-info.c:77 src/auction/gnunet-auction-join.c:77 728#: src/auction/gnunet-auction-info.c:77 src/auction/gnunet-auction-join.c:77
757#: src/conversation/gnunet-conversation-test.c:256 729#: src/conversation/gnunet-conversation-test.c:256
758#: src/revocation/gnunet-revocation.c:564 src/template/gnunet-template.c:75 730#: src/revocation/gnunet-revocation.c:570 src/template/gnunet-template.c:75
759msgid "help text" 731msgid "help text"
760msgstr "Hilfetext" 732msgstr "Hilfetext"
761 733
@@ -854,6 +826,28 @@ msgstr "Ausführlicherer Modus (empfangene Werte ausgeben)"
854msgid "Connection to conversation service lost, trying to reconnect\n" 826msgid "Connection to conversation service lost, trying to reconnect\n"
855msgstr "" 827msgstr ""
856 828
829#: src/conversation/gnunet-conversation-test.c:120
830#, c-format
831msgid ""
832"\n"
833"End of transmission. Have a GNU day.\n"
834msgstr ""
835
836#: src/conversation/gnunet-conversation-test.c:146
837#, c-format
838msgid ""
839"\n"
840"ew are now playing your recording back. If you can hear it, your audio "
841"settings are working..."
842msgstr ""
843
844#: src/conversation/gnunet-conversation-test.c:218
845#, c-format
846msgid ""
847"We will now be recording you for %s. After that time, the recording will be "
848"played back to you..."
849msgstr ""
850
857#: src/conversation/gnunet-conversation.c:264 851#: src/conversation/gnunet-conversation.c:264
858#, c-format 852#, c-format
859msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n" 853msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n"
@@ -1113,30 +1107,8 @@ msgstr ""
1113msgid "Enables having a conversation with other GNUnet users." 1107msgid "Enables having a conversation with other GNUnet users."
1114msgstr "" 1108msgstr ""
1115 1109
1116#: src/conversation/gnunet-conversation-test.c:120
1117#, c-format
1118msgid ""
1119"\n"
1120"End of transmission. Have a GNU day.\n"
1121msgstr ""
1122
1123#: src/conversation/gnunet-conversation-test.c:146
1124#, c-format
1125msgid ""
1126"\n"
1127"We are now playing your recording back. If you can hear it, your audio "
1128"settings are working..."
1129msgstr ""
1130
1131#: src/conversation/gnunet-conversation-test.c:218
1132#, c-format
1133msgid ""
1134"We will now be recording you for %s. After that time, the recording will be "
1135"played back to you..."
1136msgstr ""
1137
1138#: src/conversation/gnunet_gst.c:664
1139#: src/conversation/gnunet-helper-audio-playback-gst.c:363 1110#: src/conversation/gnunet-helper-audio-playback-gst.c:363
1111#: src/conversation/gnunet_gst.c:664
1140#, c-format 1112#, c-format
1141msgid "Read error from STDIN: %d %s\n" 1113msgid "Read error from STDIN: %d %s\n"
1142msgstr "Fehler beim Lesen aus STDIN: %d %s\n" 1114msgstr "Fehler beim Lesen aus STDIN: %d %s\n"
@@ -1565,39 +1537,39 @@ msgstr "# Bytes empfangen über TCP"
1565msgid "# updates to my type map" 1537msgid "# updates to my type map"
1566msgstr "" 1538msgstr ""
1567 1539
1568#: src/datacache/datacache.c:115 src/datacache/datacache.c:287 1540#: src/datacache/datacache.c:115 src/datacache/datacache.c:299
1569#: src/datastore/gnunet-service-datastore.c:742 1541#: src/datastore/gnunet-service-datastore.c:742
1570msgid "# bytes stored" 1542msgid "# bytes stored"
1571msgstr "# gespeicherte Bytes" 1543msgstr "# gespeicherte Bytes"
1572 1544
1573#: src/datacache/datacache.c:119 src/datacache/datacache.c:291 1545#: src/datacache/datacache.c:119 src/datacache/datacache.c:303
1574msgid "# items stored" 1546msgid "# items stored"
1575msgstr "# gespeicherte Objekte" 1547msgstr "# gespeicherte Objekte"
1576 1548
1577#: src/datacache/datacache.c:189 1549#: src/datacache/datacache.c:190
1578#, c-format 1550#, c-format
1579msgid "Loading `%s' datacache plugin\n" 1551msgid "Loading `%s' datacache plugin\n"
1580msgstr "" 1552msgstr ""
1581 1553
1582#: src/datacache/datacache.c:197 1554#: src/datacache/datacache.c:208
1583#, fuzzy, c-format 1555#, fuzzy, c-format
1584msgid "Failed to load datacache plugin for `%s'\n" 1556msgid "Failed to load datacache plugin for `%s'\n"
1585msgstr "Fehler beim Aktualisieren der Daten des Moduls `%s'\n" 1557msgstr "Fehler beim Aktualisieren der Daten des Moduls `%s'\n"
1586 1558
1587#: src/datacache/datacache.c:320 1559#: src/datacache/datacache.c:332
1588msgid "# requests received" 1560msgid "# requests received"
1589msgstr "# Anfragen empfangen" 1561msgstr "# Anfragen empfangen"
1590 1562
1591#: src/datacache/datacache.c:331 1563#: src/datacache/datacache.c:343
1592msgid "# requests filtered by bloom filter" 1564msgid "# requests filtered by bloom filter"
1593msgstr "" 1565msgstr ""
1594 1566
1595#: src/datacache/datacache.c:358 1567#: src/datacache/datacache.c:370
1596#, fuzzy 1568#, fuzzy
1597msgid "# requests for random value received" 1569msgid "# requests for random value received"
1598msgstr "# Anfragen empfangen" 1570msgstr "# Anfragen empfangen"
1599 1571
1600#: src/datacache/datacache.c:388 1572#: src/datacache/datacache.c:400
1601#, fuzzy 1573#, fuzzy
1602msgid "# proximity search requests received" 1574msgid "# proximity search requests received"
1603msgstr "# Klartext PONG Nachrichten empfangen" 1575msgstr "# Klartext PONG Nachrichten empfangen"
@@ -1944,7 +1916,7 @@ msgstr "MySQL-Datenbank läuft\n"
1944 1916
1945#: src/datastore/plugin_datastore_postgres.c:284 1917#: src/datastore/plugin_datastore_postgres.c:284
1946#: src/datastore/plugin_datastore_postgres.c:897 1918#: src/datastore/plugin_datastore_postgres.c:897
1947msgid "Postgress exec failure" 1919msgid "Postgresql exec failure"
1948msgstr "" 1920msgstr ""
1949 1921
1950#: src/datastore/plugin_datastore_postgres.c:858 1922#: src/datastore/plugin_datastore_postgres.c:858
@@ -1980,14 +1952,25 @@ msgstr ""
1980msgid "sqlite version to old to determine size, assuming zero\n" 1952msgid "sqlite version to old to determine size, assuming zero\n"
1981msgstr "" 1953msgstr ""
1982 1954
1983#: src/datastore/plugin_datastore_sqlite.c:1274 1955#: src/datastore/plugin_datastore_sqlite.c:1266
1956#: src/datastore/plugin_datastore_sqlite.c:1279
1957#, fuzzy
1958msgid "error preparing statement\n"
1959msgstr "Fehler beim Anlegen des Tunnels\n"
1960
1961#: src/datastore/plugin_datastore_sqlite.c:1287
1962#, fuzzy
1963msgid "error stepping\n"
1964msgstr "%s wird gestoppt"
1965
1966#: src/datastore/plugin_datastore_sqlite.c:1295
1984#, c-format 1967#, c-format
1985msgid "" 1968msgid ""
1986"Using sqlite page utilization to estimate payload (%llu pages of size %llu " 1969"Using sqlite page utilization to estimate payload (%llu pages of size %llu "
1987"bytes)\n" 1970"bytes)\n"
1988msgstr "" 1971msgstr ""
1989 1972
1990#: src/datastore/plugin_datastore_sqlite.c:1316 1973#: src/datastore/plugin_datastore_sqlite.c:1337
1991#: src/namecache/plugin_namecache_sqlite.c:564 1974#: src/namecache/plugin_namecache_sqlite.c:564
1992#: src/namestore/plugin_namestore_sqlite.c:765 1975#: src/namestore/plugin_namestore_sqlite.c:765
1993msgid "Sqlite database running\n" 1976msgid "Sqlite database running\n"
@@ -2059,53 +2042,6 @@ msgstr ""
2059msgid "Prints all packets that go through the DHT." 2042msgid "Prints all packets that go through the DHT."
2060msgstr "" 2043msgstr ""
2061 2044
2062#: src/dht/gnunet_dht_profiler.c:922 src/testbed/gnunet-testbed-profiler.c:255
2063#, c-format
2064msgid "Exiting as the number of peers is %u\n"
2065msgstr ""
2066
2067#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3136
2068#, fuzzy
2069msgid "number of peers to start"
2070msgstr "Anzahl an Durchläufen"
2071
2072#: src/dht/gnunet_dht_profiler.c:961
2073msgid "number of PUTs to perform per peer"
2074msgstr ""
2075
2076#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872
2077#: src/testbed/gnunet-testbed-profiler.c:305
2078msgid "name of the file with the login information for the testbed"
2079msgstr ""
2080
2081#: src/dht/gnunet_dht_profiler.c:973
2082msgid "delay between rounds for collecting statistics (default: 30 sec)"
2083msgstr ""
2084
2085#: src/dht/gnunet_dht_profiler.c:979
2086msgid "delay to start doing PUTs (default: 1 sec)"
2087msgstr ""
2088
2089#: src/dht/gnunet_dht_profiler.c:985
2090msgid "delay to start doing GETs (default: 5 min)"
2091msgstr ""
2092
2093#: src/dht/gnunet_dht_profiler.c:990
2094msgid "replication degree for DHT PUTs"
2095msgstr ""
2096
2097#: src/dht/gnunet_dht_profiler.c:996
2098msgid "chance that a peer is selected at random for PUTs"
2099msgstr ""
2100
2101#: src/dht/gnunet_dht_profiler.c:1002
2102msgid "timeout for DHT PUT and GET requests (default: 1 min)"
2103msgstr ""
2104
2105#: src/dht/gnunet_dht_profiler.c:1023
2106msgid "Measure quality and performance of the DHT service."
2107msgstr ""
2108
2109#: src/dht/gnunet-dht-put.c:133 2045#: src/dht/gnunet-dht-put.c:133
2110msgid "Must provide KEY and DATA for DHT put!\n" 2046msgid "Must provide KEY and DATA for DHT put!\n"
2111msgstr "" 2047msgstr ""
@@ -2237,97 +2173,97 @@ msgstr "# PING Nachrichten erstellt"
2237msgid "# requests TTL-dropped" 2173msgid "# requests TTL-dropped"
2238msgstr "# dht Anfragen weitergeleitet" 2174msgstr "# dht Anfragen weitergeleitet"
2239 2175
2240#: src/dht/gnunet-service-dht_neighbours.c:1052 2176#: src/dht/gnunet-service-dht_neighbours.c:1035
2241#: src/dht/gnunet-service-dht_neighbours.c:1096 2177#: src/dht/gnunet-service-dht_neighbours.c:1072
2242msgid "# Peers excluded from routing due to Bloomfilter" 2178msgid "# Peers excluded from routing due to Bloomfilter"
2243msgstr "" 2179msgstr ""
2244 2180
2245#: src/dht/gnunet-service-dht_neighbours.c:1069 2181#: src/dht/gnunet-service-dht_neighbours.c:1045
2246#: src/dht/gnunet-service-dht_neighbours.c:1112 2182#: src/dht/gnunet-service-dht_neighbours.c:1088
2247#, fuzzy 2183#, fuzzy
2248msgid "# Peer selection failed" 2184msgid "# Peer selection failed"
2249msgstr " Verbindung fehlgeschlagen\n" 2185msgstr " Verbindung fehlgeschlagen\n"
2250 2186
2251#: src/dht/gnunet-service-dht_neighbours.c:1270 2187#: src/dht/gnunet-service-dht_neighbours.c:1246
2252#, fuzzy 2188#, fuzzy
2253msgid "# PUT requests routed" 2189msgid "# PUT requests routed"
2254msgstr "# dht Anfragen weitergeleitet" 2190msgstr "# dht Anfragen weitergeleitet"
2255 2191
2256#: src/dht/gnunet-service-dht_neighbours.c:1304 2192#: src/dht/gnunet-service-dht_neighbours.c:1280
2257msgid "# PUT messages queued for transmission" 2193msgid "# PUT messages queued for transmission"
2258msgstr "" 2194msgstr ""
2259 2195
2260#: src/dht/gnunet-service-dht_neighbours.c:1316 2196#: src/dht/gnunet-service-dht_neighbours.c:1292
2261#: src/dht/gnunet-service-dht_neighbours.c:1458 2197#: src/dht/gnunet-service-dht_neighbours.c:1434
2262#: src/dht/gnunet-service-dht_neighbours.c:1562 2198#: src/dht/gnunet-service-dht_neighbours.c:1538
2263msgid "# P2P messages dropped due to full queue" 2199msgid "# P2P messages dropped due to full queue"
2264msgstr "" 2200msgstr ""
2265 2201
2266#: src/dht/gnunet-service-dht_neighbours.c:1401 2202#: src/dht/gnunet-service-dht_neighbours.c:1377
2267#, fuzzy 2203#, fuzzy
2268msgid "# GET requests routed" 2204msgid "# GET requests routed"
2269msgstr "# dht Anfragen weitergeleitet" 2205msgstr "# dht Anfragen weitergeleitet"
2270 2206
2271#: src/dht/gnunet-service-dht_neighbours.c:1445 2207#: src/dht/gnunet-service-dht_neighbours.c:1421
2272msgid "# GET messages queued for transmission" 2208msgid "# GET messages queued for transmission"
2273msgstr "" 2209msgstr ""
2274 2210
2275#: src/dht/gnunet-service-dht_neighbours.c:1577 2211#: src/dht/gnunet-service-dht_neighbours.c:1553
2276msgid "# RESULT messages queued for transmission" 2212msgid "# RESULT messages queued for transmission"
2277msgstr "" 2213msgstr ""
2278 2214
2279#: src/dht/gnunet-service-dht_neighbours.c:1680 2215#: src/dht/gnunet-service-dht_neighbours.c:1656
2280#, fuzzy 2216#, fuzzy
2281msgid "# Expired PUTs discarded" 2217msgid "# Expired PUTs discarded"
2282msgstr "# verworfener Nachrichten" 2218msgstr "# verworfener Nachrichten"
2283 2219
2284#: src/dht/gnunet-service-dht_neighbours.c:1688 2220#: src/dht/gnunet-service-dht_neighbours.c:1664
2285#, fuzzy 2221#, fuzzy
2286msgid "# P2P PUT requests received" 2222msgid "# P2P PUT requests received"
2287msgstr "# Client Trace-Anfragen empfangen" 2223msgstr "# Client Trace-Anfragen empfangen"
2288 2224
2289#: src/dht/gnunet-service-dht_neighbours.c:1692 2225#: src/dht/gnunet-service-dht_neighbours.c:1668
2290#, fuzzy 2226#, fuzzy
2291msgid "# P2P PUT bytes received" 2227msgid "# P2P PUT bytes received"
2292msgstr "# Bytes empfangen über TCP" 2228msgstr "# Bytes empfangen über TCP"
2293 2229
2294#: src/dht/gnunet-service-dht_neighbours.c:1924 2230#: src/dht/gnunet-service-dht_neighbours.c:1900
2295msgid "# FIND PEER requests ignored due to Bloomfilter" 2231msgid "# FIND PEER requests ignored due to Bloomfilter"
2296msgstr "" 2232msgstr ""
2297 2233
2298#: src/dht/gnunet-service-dht_neighbours.c:1933 2234#: src/dht/gnunet-service-dht_neighbours.c:1909
2299msgid "# FIND PEER requests ignored due to lack of HELLO" 2235msgid "# FIND PEER requests ignored due to lack of HELLO"
2300msgstr "" 2236msgstr ""
2301 2237
2302#: src/dht/gnunet-service-dht_neighbours.c:2096 2238#: src/dht/gnunet-service-dht_neighbours.c:2072
2303#, fuzzy 2239#, fuzzy
2304msgid "# P2P GET requests received" 2240msgid "# P2P GET requests received"
2305msgstr "# Client Trace-Anfragen empfangen" 2241msgstr "# Client Trace-Anfragen empfangen"
2306 2242
2307#: src/dht/gnunet-service-dht_neighbours.c:2100 2243#: src/dht/gnunet-service-dht_neighbours.c:2076
2308#, fuzzy 2244#, fuzzy
2309msgid "# P2P GET bytes received" 2245msgid "# P2P GET bytes received"
2310msgstr "# Bytes empfangen über TCP" 2246msgstr "# Bytes empfangen über TCP"
2311 2247
2312#: src/dht/gnunet-service-dht_neighbours.c:2166 2248#: src/dht/gnunet-service-dht_neighbours.c:2142
2313msgid "# P2P FIND PEER requests processed" 2249msgid "# P2P FIND PEER requests processed"
2314msgstr "" 2250msgstr ""
2315 2251
2316#: src/dht/gnunet-service-dht_neighbours.c:2187 2252#: src/dht/gnunet-service-dht_neighbours.c:2163
2317#, fuzzy 2253#, fuzzy
2318msgid "# P2P GET requests ONLY routed" 2254msgid "# P2P GET requests ONLY routed"
2319msgstr "# dht Anfragen weitergeleitet" 2255msgstr "# dht Anfragen weitergeleitet"
2320 2256
2321#: src/dht/gnunet-service-dht_neighbours.c:2365 2257#: src/dht/gnunet-service-dht_neighbours.c:2341
2322#, fuzzy 2258#, fuzzy
2323msgid "# Expired results discarded" 2259msgid "# Expired results discarded"
2324msgstr "# verworfener Nachrichten" 2260msgstr "# verworfener Nachrichten"
2325 2261
2326#: src/dht/gnunet-service-dht_neighbours.c:2382 2262#: src/dht/gnunet-service-dht_neighbours.c:2358
2327msgid "# P2P RESULTS received" 2263msgid "# P2P RESULTS received"
2328msgstr "" 2264msgstr ""
2329 2265
2330#: src/dht/gnunet-service-dht_neighbours.c:2386 2266#: src/dht/gnunet-service-dht_neighbours.c:2362
2331#, fuzzy 2267#, fuzzy
2332msgid "# P2P RESULT bytes received" 2268msgid "# P2P RESULT bytes received"
2333msgstr "# Bytes empfangen über TCP" 2269msgstr "# Bytes empfangen über TCP"
@@ -2370,6 +2306,53 @@ msgstr ""
2370msgid "# DHT requests combined" 2306msgid "# DHT requests combined"
2371msgstr "# dht Anfragen weitergeleitet" 2307msgstr "# dht Anfragen weitergeleitet"
2372 2308
2309#: src/dht/gnunet_dht_profiler.c:922 src/testbed/gnunet-testbed-profiler.c:255
2310#, c-format
2311msgid "Exiting as the number of peers is %u\n"
2312msgstr ""
2313
2314#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3136
2315#, fuzzy
2316msgid "number of peers to start"
2317msgstr "Anzahl an Durchläufen"
2318
2319#: src/dht/gnunet_dht_profiler.c:961
2320msgid "number of PUTs to perform per peer"
2321msgstr ""
2322
2323#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872
2324#: src/testbed/gnunet-testbed-profiler.c:305
2325msgid "name of the file with the login information for the testbed"
2326msgstr ""
2327
2328#: src/dht/gnunet_dht_profiler.c:973
2329msgid "delay between rounds for collecting statistics (default: 30 sec)"
2330msgstr ""
2331
2332#: src/dht/gnunet_dht_profiler.c:979
2333msgid "delay to start doing PUTs (default: 1 sec)"
2334msgstr ""
2335
2336#: src/dht/gnunet_dht_profiler.c:985
2337msgid "delay to start doing GETs (default: 5 min)"
2338msgstr ""
2339
2340#: src/dht/gnunet_dht_profiler.c:990
2341msgid "replication degree for DHT PUTs"
2342msgstr ""
2343
2344#: src/dht/gnunet_dht_profiler.c:996
2345msgid "chance that a peer is selected at random for PUTs"
2346msgstr ""
2347
2348#: src/dht/gnunet_dht_profiler.c:1002
2349msgid "timeout for DHT PUT and GET requests (default: 1 min)"
2350msgstr ""
2351
2352#: src/dht/gnunet_dht_profiler.c:1023
2353msgid "Measure quality and performance of the DHT service."
2354msgstr ""
2355
2373#: src/dht/plugin_block_dht.c:189 2356#: src/dht/plugin_block_dht.c:189
2374#, fuzzy, c-format 2357#, fuzzy, c-format
2375msgid "Block not of type %u\n" 2358msgid "Block not of type %u\n"
@@ -2810,7 +2793,7 @@ msgstr ""
2810#: src/fs/fs_download.c:346 2793#: src/fs/fs_download.c:346
2811#, fuzzy, c-format 2794#, fuzzy, c-format
2812msgid "" 2795msgid ""
2813"Failed to access full directroy contents of `%s' for recursive download\n" 2796"Failed to access full directory contents of `%s' for recursive download\n"
2814msgstr "Fehler beim Aktualisieren der Daten des Moduls `%s'\n" 2797msgstr "Fehler beim Aktualisieren der Daten des Moduls `%s'\n"
2815 2798
2816#: src/fs/fs_download.c:528 src/fs/fs_download.c:541 2799#: src/fs/fs_download.c:528 src/fs/fs_download.c:541
@@ -3320,15 +3303,6 @@ msgid ""
3320"chk/...)" 3303"chk/...)"
3321msgstr "" 3304msgstr ""
3322 3305
3323#: src/fs/gnunet-fs.c:128
3324msgid "print a list of all indexed files"
3325msgstr ""
3326
3327#: src/fs/gnunet-fs.c:141
3328#, fuzzy
3329msgid "Special file-sharing operations"
3330msgstr "Alle Optionen anzeigen"
3331
3332#: src/fs/gnunet-fs-profiler.c:211 3306#: src/fs/gnunet-fs-profiler.c:211
3333msgid "run the experiment with COUNT peers" 3307msgid "run the experiment with COUNT peers"
3334msgstr "" 3308msgstr ""
@@ -3345,6 +3319,15 @@ msgstr ""
3345msgid "run a testbed to measure file-sharing performance" 3319msgid "run a testbed to measure file-sharing performance"
3346msgstr "" 3320msgstr ""
3347 3321
3322#: src/fs/gnunet-fs.c:128
3323msgid "print a list of all indexed files"
3324msgstr ""
3325
3326#: src/fs/gnunet-fs.c:141
3327#, fuzzy
3328msgid "Special file-sharing operations"
3329msgstr "Alle Optionen anzeigen"
3330
3348#: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:234 3331#: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:234
3349#, c-format 3332#, c-format
3350msgid "Publishing `%s' at %llu/%llu (%s remaining)\n" 3333msgid "Publishing `%s' at %llu/%llu (%s remaining)\n"
@@ -4048,53 +4031,7 @@ msgstr ""
4048msgid "look for GNS2DNS records instead of ANY" 4031msgid "look for GNS2DNS records instead of ANY"
4049msgstr "" 4032msgstr ""
4050 4033
4051#: src/gns/gnunet-gns.c:257 4034#: src/gns/gnunet-gns-import.c:490
4052#, fuzzy, c-format
4053msgid "`%s' is not a valid DNS domain name\n"
4054msgstr "»%s« ist keine gültige IP-Adresse.\n"
4055
4056#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254
4057#, c-format
4058msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n"
4059msgstr ""
4060
4061#: src/gns/gnunet-gns.c:281
4062msgid "Cannot resolve using GNS: GNUnet peer not running\n"
4063msgstr ""
4064
4065#: src/gns/gnunet-gns.c:305
4066#, c-format
4067msgid "Invalid typename specified, assuming `ANY'\n"
4068msgstr ""
4069
4070#: src/gns/gnunet-gns.c:340
4071msgid "Lookup a record for the given name"
4072msgstr ""
4073
4074#: src/gns/gnunet-gns.c:346
4075#, fuzzy
4076msgid "Specify the type of the record to lookup"
4077msgstr "Die Priorität des Inhalts angeben"
4078
4079#: src/gns/gnunet-gns.c:352
4080#, fuzzy
4081msgid "Specify a timeout for the lookup"
4082msgstr "Die Priorität des Inhalts angeben"
4083
4084#: src/gns/gnunet-gns.c:356
4085msgid "No unneeded output"
4086msgstr ""
4087
4088#: src/gns/gnunet-gns.c:361
4089msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8"
4090msgstr ""
4091
4092#: src/gns/gnunet-gns.c:375
4093#, fuzzy
4094msgid "GNUnet GNS resolver tool"
4095msgstr "GNUnet Netzwerk Topologie tracen."
4096
4097#: src/gns/gnunet-gns-import.c:491
4098msgid "This program will import some GNS authorities into your GNS namestore." 4035msgid "This program will import some GNS authorities into your GNS namestore."
4099msgstr "" 4036msgstr ""
4100 4037
@@ -4214,6 +4151,52 @@ msgstr ""
4214msgid "GNUnet GNS proxy" 4151msgid "GNUnet GNS proxy"
4215msgstr "" 4152msgstr ""
4216 4153
4154#: src/gns/gnunet-gns.c:257
4155#, fuzzy, c-format
4156msgid "`%s' is not a valid DNS domain name\n"
4157msgstr "»%s« ist keine gültige IP-Adresse.\n"
4158
4159#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254
4160#, c-format
4161msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n"
4162msgstr ""
4163
4164#: src/gns/gnunet-gns.c:281
4165msgid "Cannot resolve using GNS: GNUnet peer not running\n"
4166msgstr ""
4167
4168#: src/gns/gnunet-gns.c:305
4169#, c-format
4170msgid "Invalid typename specified, assuming `ANY'\n"
4171msgstr ""
4172
4173#: src/gns/gnunet-gns.c:340
4174msgid "Lookup a record for the given name"
4175msgstr ""
4176
4177#: src/gns/gnunet-gns.c:346
4178#, fuzzy
4179msgid "Specify the type of the record to lookup"
4180msgstr "Die Priorität des Inhalts angeben"
4181
4182#: src/gns/gnunet-gns.c:352
4183#, fuzzy
4184msgid "Specify a timeout for the lookup"
4185msgstr "Die Priorität des Inhalts angeben"
4186
4187#: src/gns/gnunet-gns.c:356
4188msgid "No unneeded output"
4189msgstr ""
4190
4191#: src/gns/gnunet-gns.c:361
4192msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8"
4193msgstr ""
4194
4195#: src/gns/gnunet-gns.c:375
4196#, fuzzy
4197msgid "GNUnet GNS resolver tool"
4198msgstr "GNUnet Netzwerk Topologie tracen."
4199
4217#: src/gns/gnunet-service-gns.c:505 4200#: src/gns/gnunet-service-gns.c:505
4218#, fuzzy 4201#, fuzzy
4219msgid "Properly base32-encoded public key required" 4202msgid "Properly base32-encoded public key required"
@@ -4225,8 +4208,8 @@ msgid "Failed to connect to the namecache!\n"
4225msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" 4208msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
4226 4209
4227#: src/gns/gnunet-service-gns.c:560 4210#: src/gns/gnunet-service-gns.c:560
4228#: src/zonemaster/gnunet-service-zonemaster.c:885
4229#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442 4211#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442
4212#: src/zonemaster/gnunet-service-zonemaster.c:885
4230#, fuzzy 4213#, fuzzy
4231msgid "Could not connect to DHT!\n" 4214msgid "Could not connect to DHT!\n"
4232msgstr "Verbindung zu gnunetd konnte nicht hergestellt werden.\n" 4215msgstr "Verbindung zu gnunetd konnte nicht hergestellt werden.\n"
@@ -4785,52 +4768,52 @@ msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
4785msgid "Failed to set default ego: %s\n" 4768msgid "Failed to set default ego: %s\n"
4786msgstr "Fehler beim Parsen der Gerätedaten von `%s' bei %s:%d.\n" 4769msgstr "Fehler beim Parsen der Gerätedaten von `%s' bei %s:%d.\n"
4787 4770
4788#: src/identity/gnunet-identity.c:462 4771#: src/identity/gnunet-identity.c:461
4789msgid "create ego NAME" 4772msgid "create ego NAME"
4790msgstr "" 4773msgstr ""
4791 4774
4792#: src/identity/gnunet-identity.c:467 4775#: src/identity/gnunet-identity.c:466
4793msgid "delete ego NAME " 4776msgid "delete ego NAME "
4794msgstr "" 4777msgstr ""
4795 4778
4796#: src/identity/gnunet-identity.c:473 4779#: src/identity/gnunet-identity.c:472
4797msgid "" 4780msgid ""
4798"set the private key for the identity to PRIVATE_KEY (use together with -C)" 4781"set the private key for the identity to PRIVATE_KEY (use together with -C)"
4799msgstr "" 4782msgstr ""
4800 4783
4801#: src/identity/gnunet-identity.c:478 4784#: src/identity/gnunet-identity.c:477
4802msgid "generate an EdDSA identity. (use together with -C) EXPERIMENTAL" 4785msgid "generate an EdDSA identity. (use together with -C) EXPERIMENTAL"
4803msgstr "" 4786msgstr ""
4804 4787
4805#: src/identity/gnunet-identity.c:482 4788#: src/identity/gnunet-identity.c:481
4806msgid "display all egos" 4789msgid "display all egos"
4807msgstr "" 4790msgstr ""
4808 4791
4809#: src/identity/gnunet-identity.c:486 4792#: src/identity/gnunet-identity.c:485
4810#, fuzzy 4793#, fuzzy
4811msgid "reduce output" 4794msgid "reduce output"
4812msgstr "Ausführliche Ausgabe" 4795msgstr "Ausführliche Ausgabe"
4813 4796
4814#: src/identity/gnunet-identity.c:493 4797#: src/identity/gnunet-identity.c:492
4815msgid "" 4798msgid ""
4816"set default identity to NAME for a subsystem SUBSYSTEM (use together with -" 4799"set default identity to NAME for a subsystem SUBSYSTEM (use together with -"
4817"s) or restrict results to NAME (use together with -d)" 4800"s) or restrict results to NAME (use together with -d)"
4818msgstr "" 4801msgstr ""
4819 4802
4820#: src/identity/gnunet-identity.c:497 4803#: src/identity/gnunet-identity.c:496
4821msgid "run in monitor mode egos" 4804msgid "run in monitor mode egos"
4822msgstr "" 4805msgstr ""
4823 4806
4824#: src/identity/gnunet-identity.c:501 4807#: src/identity/gnunet-identity.c:500
4825msgid "display private keys as well" 4808msgid "display private keys as well"
4826msgstr "" 4809msgstr ""
4827 4810
4828#: src/identity/gnunet-identity.c:508 4811#: src/identity/gnunet-identity.c:507
4829msgid "" 4812msgid ""
4830"set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)" 4813"set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)"
4831msgstr "" 4814msgstr ""
4832 4815
4833#: src/identity/gnunet-identity.c:523 4816#: src/identity/gnunet-identity.c:522
4834msgid "Maintain egos" 4817msgid "Maintain egos"
4835msgstr "" 4818msgstr ""
4836 4819
@@ -4881,11 +4864,11 @@ msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':"
4881msgid "Failed to create directory `%s' for storing egos\n" 4864msgid "Failed to create directory `%s' for storing egos\n"
4882msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n" 4865msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n"
4883 4866
4884#: src/identity/plugin_rest_identity.c:1385 4867#: src/identity/plugin_rest_identity.c:1401
4885msgid "Identity REST API initialized\n" 4868msgid "Identity REST API initialized\n"
4886msgstr "" 4869msgstr ""
4887 4870
4888#: src/json/json.c:139 4871#: src/json/json.c:120
4889#, fuzzy, c-format 4872#, fuzzy, c-format
4890msgid "Failed to parse JSON in option `%s': %s (%s)\n" 4873msgid "Failed to parse JSON in option `%s': %s (%s)\n"
4891msgstr "Datei wurde als `%s' gespeichert.\n" 4874msgstr "Datei wurde als `%s' gespeichert.\n"
@@ -4944,11 +4927,11 @@ msgstr "Die Priorität des Inhalts angeben"
4944msgid "GNUnet zone manipulation tool" 4927msgid "GNUnet zone manipulation tool"
4945msgstr "GNUnet Konfiguration" 4928msgstr "GNUnet Konfiguration"
4946 4929
4947#: src/namecache/namecache_api.c:285 4930#: src/namecache/namecache_api.c:286
4948msgid "Namecache failed to cache block" 4931msgid "Namecache failed to cache block"
4949msgstr "" 4932msgstr ""
4950 4933
4951#: src/namecache/namecache_api.c:373 4934#: src/namecache/namecache_api.c:374
4952#, fuzzy 4935#, fuzzy
4953msgid "Error communicating with namecache service" 4936msgid "Error communicating with namecache service"
4954msgstr "Informationen über andere GNUnet Knoten ausgeben." 4937msgstr "Informationen über andere GNUnet Knoten ausgeben."
@@ -4989,6 +4972,114 @@ msgstr "Sqlite-Datenbank läuft\n"
4989msgid "Failed to setup database at `%s'\n" 4972msgid "Failed to setup database at `%s'\n"
4990msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" 4973msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
4991 4974
4975#: src/namestore/gnunet-namestore-fcfsd.c:359
4976#, fuzzy
4977msgid "can not search the namestore"
4978msgstr "GNUnet testbed Controller starten."
4979
4980#: src/namestore/gnunet-namestore-fcfsd.c:413
4981#: src/namestore/gnunet-namestore-fcfsd.c:554
4982#, fuzzy
4983msgid "unable to scan namestore"
4984msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
4985
4986#: src/namestore/gnunet-namestore-fcfsd.c:441
4987#, fuzzy, c-format
4988msgid "Failed to create record for `%s': %s\n"
4989msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
4990
4991#: src/namestore/gnunet-namestore-fcfsd.c:453
4992#, fuzzy
4993msgid "no errors"
4994msgstr "Unbekannter Fehler"
4995
4996#: src/namestore/gnunet-namestore-fcfsd.c:489
4997#, c-format
4998msgid "The requested key `%s' exists as `%s'\n"
4999msgstr ""
5000
5001#: src/namestore/gnunet-namestore-fcfsd.c:496
5002msgid "key exists"
5003msgstr ""
5004
5005#: src/namestore/gnunet-namestore-fcfsd.c:513
5006#, fuzzy
5007msgid "Error creating record data\n"
5008msgstr "=\tFehler beim Lesen des Verzeichnisses.\n"
5009
5010#: src/namestore/gnunet-namestore-fcfsd.c:517
5011#, fuzzy
5012msgid "unable to store record"
5013msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
5014
5015#: src/namestore/gnunet-namestore-fcfsd.c:588
5016#, c-format
5017msgid "Requested name `%s' exists with `%u' records\n"
5018msgstr ""
5019
5020#: src/namestore/gnunet-namestore-fcfsd.c:594
5021msgid "name exists\n"
5022msgstr ""
5023
5024#: src/namestore/gnunet-namestore-fcfsd.c:780
5025msgid "unable to process submitted data"
5026msgstr ""
5027
5028#: src/namestore/gnunet-namestore-fcfsd.c:787
5029msgid "the submitted data is invalid"
5030msgstr ""
5031
5032#: src/namestore/gnunet-namestore-fcfsd.c:806
5033#, fuzzy
5034msgid "invalid parameters"
5035msgstr "Ungültiges Argument »%s«\n"
5036
5037#: src/namestore/gnunet-namestore-fcfsd.c:823
5038#, fuzzy
5039msgid "invalid name"
5040msgstr "Ungültiges Argument »%s«\n"
5041
5042#: src/namestore/gnunet-namestore-fcfsd.c:834
5043#, fuzzy, c-format
5044msgid "Unable to parse key %s\n"
5045msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n"
5046
5047#: src/namestore/gnunet-namestore-fcfsd.c:838
5048#, fuzzy
5049msgid "unable to parse key"
5050msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n"
5051
5052#: src/namestore/gnunet-namestore-fcfsd.c:949
5053msgid "No ego configured for `fcfsd` subsystem\n"
5054msgstr ""
5055
5056#: src/namestore/gnunet-namestore-fcfsd.c:974
5057#, fuzzy
5058msgid "Failed to start HTTP server\n"
5059msgstr "Fehler beim Senden einer `%s' Anfrage an den SMTP Server.\n"
5060
5061#: src/namestore/gnunet-namestore-fcfsd.c:1058
5062msgid "No port specified, using default value\n"
5063msgstr ""
5064
5065#: src/namestore/gnunet-namestore-fcfsd.c:1076
5066#, fuzzy
5067msgid "Failed to connect to identity\n"
5068msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
5069
5070#: src/namestore/gnunet-namestore-fcfsd.c:1100
5071#, fuzzy
5072msgid "Unable to set up the daemon\n"
5073msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
5074
5075#: src/namestore/gnunet-namestore-fcfsd.c:1123
5076msgid "name of the zone managed by FCFSD"
5077msgstr ""
5078
5079#: src/namestore/gnunet-namestore-fcfsd.c:1132
5080msgid "GNU Name System First-Come-First-Served name registration service"
5081msgstr ""
5082
4992#: src/namestore/gnunet-namestore.c:334 5083#: src/namestore/gnunet-namestore.c:334
4993#, c-format 5084#, c-format
4994msgid "Adding record failed: %s\n" 5085msgid "Adding record failed: %s\n"
@@ -5226,85 +5317,16 @@ msgstr ""
5226msgid "name of the ego controlling the zone" 5317msgid "name of the ego controlling the zone"
5227msgstr "" 5318msgstr ""
5228 5319
5229#: src/namestore/gnunet-namestore-fcfsd.c:552
5230#, fuzzy, c-format
5231msgid "Unsupported form value `%s'\n"
5232msgstr "Kommando `%s' wird nicht unterstützt. Vorgang wird abgebrochen.\n"
5233
5234#: src/namestore/gnunet-namestore-fcfsd.c:579
5235#, fuzzy, c-format
5236msgid "Failed to create record for domain `%s': %s\n"
5237msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
5238
5239#: src/namestore/gnunet-namestore-fcfsd.c:600
5240msgid "Error when mapping zone to name\n"
5241msgstr ""
5242
5243#: src/namestore/gnunet-namestore-fcfsd.c:633
5244#, c-format
5245msgid "Found existing name `%s' for the given key\n"
5246msgstr ""
5247
5248#: src/namestore/gnunet-namestore-fcfsd.c:646
5249#, fuzzy
5250msgid "Error creating record data.\n"
5251msgstr "=\tFehler beim Lesen des Verzeichnisses.\n"
5252
5253#: src/namestore/gnunet-namestore-fcfsd.c:707
5254#, c-format
5255msgid "Found %u existing records for domain `%s'\n"
5256msgstr ""
5257
5258#: src/namestore/gnunet-namestore-fcfsd.c:796
5259#, fuzzy, c-format
5260msgid "Failed to create page for `%s'\n"
5261msgstr "Fehler beim Aktualisieren der Daten des Moduls `%s'\n"
5262
5263#: src/namestore/gnunet-namestore-fcfsd.c:815
5264#, fuzzy, c-format
5265msgid "Failed to setup post processor for `%s'\n"
5266msgstr "Fehler beim Aktualisieren der Daten des Moduls `%s'\n"
5267
5268#: src/namestore/gnunet-namestore-fcfsd.c:850
5269msgid "Domain name must not contain `.'\n"
5270msgstr ""
5271
5272#: src/namestore/gnunet-namestore-fcfsd.c:859
5273msgid "Domain name must not contain `+'\n"
5274msgstr ""
5275
5276#: src/namestore/gnunet-namestore-fcfsd.c:1094
5277msgid "No ego configured for `fcfsd` subsystem\n"
5278msgstr ""
5279
5280#: src/namestore/gnunet-namestore-fcfsd.c:1125
5281#, fuzzy
5282msgid "Failed to start HTTP server\n"
5283msgstr "Fehler beim Senden einer `%s' Anfrage an den SMTP Server.\n"
5284
5285#: src/namestore/gnunet-namestore-fcfsd.c:1173
5286#, fuzzy
5287msgid "Failed to connect to identity\n"
5288msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
5289
5290#: src/namestore/gnunet-namestore-fcfsd.c:1200
5291msgid "name of the zone that is to be managed by FCFSD"
5292msgstr ""
5293
5294#: src/namestore/gnunet-namestore-fcfsd.c:1220
5295msgid "GNU Name System First Come First Serve name registration service"
5296msgstr ""
5297
5298#: src/namestore/gnunet-service-namestore.c:871 5320#: src/namestore/gnunet-service-namestore.c:871
5299#, c-format 5321#, c-format
5300msgid "Failed to replicate block in namecache: %s\n" 5322msgid "Failed to replicate block in namecache: %s\n"
5301msgstr "" 5323msgstr ""
5302 5324
5303#: src/namestore/gnunet-zoneimport.c:1848 5325#: src/namestore/gnunet-zoneimport.c:1847
5304msgid "size to use for the main hash map" 5326msgid "size to use for the main hash map"
5305msgstr "" 5327msgstr ""
5306 5328
5307#: src/namestore/gnunet-zoneimport.c:1854 5329#: src/namestore/gnunet-zoneimport.c:1853
5308msgid "minimum expiration time we assume for imported records" 5330msgid "minimum expiration time we assume for imported records"
5309msgstr "" 5331msgstr ""
5310 5332
@@ -5327,7 +5349,7 @@ msgstr ""
5327msgid "Flat file database running\n" 5349msgid "Flat file database running\n"
5328msgstr "Sqlite-Datenbank läuft\n" 5350msgstr "Sqlite-Datenbank läuft\n"
5329 5351
5330#: src/namestore/plugin_rest_namestore.c:1105 5352#: src/namestore/plugin_rest_namestore.c:1111
5331#, fuzzy 5353#, fuzzy
5332msgid "Namestore REST API initialized\n" 5354msgid "Namestore REST API initialized\n"
5333msgstr " Verbindung fehlgeschlagen\n" 5355msgstr " Verbindung fehlgeschlagen\n"
@@ -5617,10 +5639,6 @@ msgstr "Kommando `%s' wurde nicht gefunden!\n"
5617msgid "`upnpc' command not found\n" 5639msgid "`upnpc' command not found\n"
5618msgstr "Kommando `%s' wurde nicht gefunden!\n" 5640msgstr "Kommando `%s' wurde nicht gefunden!\n"
5619 5641
5620#: src/nse/gnunet-nse.c:124
5621msgid "Show network size estimates from NSE service."
5622msgstr ""
5623
5624#: src/nse/gnunet-nse-profiler.c:857 5642#: src/nse/gnunet-nse-profiler.c:857
5625msgid "limit to the number of connections to NSE services, 0 for none" 5643msgid "limit to the number of connections to NSE services, 0 for none"
5626msgstr "" 5644msgstr ""
@@ -5645,68 +5663,15 @@ msgstr ""
5645msgid "Measure quality and performance of the NSE service." 5663msgid "Measure quality and performance of the NSE service."
5646msgstr "" 5664msgstr ""
5647 5665
5666#: src/nse/gnunet-nse.c:124
5667msgid "Show network size estimates from NSE service."
5668msgstr ""
5669
5648#: src/nse/gnunet-service-nse.c:1450 5670#: src/nse/gnunet-service-nse.c:1450
5649#: src/revocation/gnunet-service-revocation.c:883 src/util/gnunet-scrypt.c:260 5671#: src/revocation/gnunet-service-revocation.c:883 src/util/gnunet-scrypt.c:260
5650msgid "Value is too large.\n" 5672msgid "Value is too large.\n"
5651msgstr "" 5673msgstr ""
5652 5674
5653#: src/peerinfo/gnunet-service-peerinfo.c:175
5654#, fuzzy, c-format
5655msgid "Removing expired address of transport `%s'\n"
5656msgstr "Verfügbare(r) Transport(e): %s\n"
5657
5658#: src/peerinfo/gnunet-service-peerinfo.c:306
5659#, fuzzy, c-format
5660msgid "Failed to parse HELLO in file `%s': %s\n"
5661msgstr "Datei wurde als `%s' gespeichert.\n"
5662
5663#: src/peerinfo/gnunet-service-peerinfo.c:323
5664#: src/peerinfo/gnunet-service-peerinfo.c:348
5665#, fuzzy, c-format
5666msgid "Failed to parse HELLO in file `%s'\n"
5667msgstr "Datei wurde als `%s' gespeichert.\n"
5668
5669#: src/peerinfo/gnunet-service-peerinfo.c:426
5670msgid "# peers known"
5671msgstr ""
5672
5673#: src/peerinfo/gnunet-service-peerinfo.c:468
5674#, c-format
5675msgid ""
5676"File `%s' in directory `%s' does not match naming convention. Removed.\n"
5677msgstr ""
5678"Die Datei »%s« im Verzeichnis »%s« entspricht nicht der Namenskonvention. "
5679"Die Datei wurde entfernt.\n"
5680
5681#: src/peerinfo/gnunet-service-peerinfo.c:624
5682#, fuzzy, c-format
5683msgid "Scanning directory `%s'\n"
5684msgstr "==> Verzeichnis `%s':\n"
5685
5686#: src/peerinfo/gnunet-service-peerinfo.c:631
5687#, fuzzy, c-format
5688msgid "Still no peers found in `%s'!\n"
5689msgstr "Dienst `%s' konnte nicht ordentlich entladen werden!\n"
5690
5691#: src/peerinfo/gnunet-service-peerinfo.c:1027
5692#, fuzzy, c-format
5693msgid "Cleaning up directory `%s'\n"
5694msgstr "==> Verzeichnis `%s':\n"
5695
5696#: src/peerinfo/gnunet-service-peerinfo.c:1322
5697#, c-format
5698msgid "Importing HELLOs from `%s'\n"
5699msgstr ""
5700
5701#: src/peerinfo/gnunet-service-peerinfo.c:1335
5702msgid "Skipping import of included HELLOs\n"
5703msgstr ""
5704
5705#: src/peerinfo/peerinfo_api.c:217
5706#, fuzzy
5707msgid "Failed to receive response from `PEERINFO' service."
5708msgstr "Fehler beim Empfangen der Antwort von gnunetd auf die `%s' Nachricht\n"
5709
5710#: src/peerinfo-tool/gnunet-peerinfo.c:237 5675#: src/peerinfo-tool/gnunet-peerinfo.c:237
5711#, fuzzy, c-format 5676#, fuzzy, c-format
5712msgid "%sPeer `%s'\n" 5677msgid "%sPeer `%s'\n"
@@ -5803,6 +5768,63 @@ msgstr "Anwendung `%s' konnte nicht initialisiert werden.\n"
5803msgid "Peerinfo REST API initialized\n" 5768msgid "Peerinfo REST API initialized\n"
5804msgstr " Verbindung fehlgeschlagen\n" 5769msgstr " Verbindung fehlgeschlagen\n"
5805 5770
5771#: src/peerinfo/gnunet-service-peerinfo.c:175
5772#, fuzzy, c-format
5773msgid "Removing expired address of transport `%s'\n"
5774msgstr "Verfügbare(r) Transport(e): %s\n"
5775
5776#: src/peerinfo/gnunet-service-peerinfo.c:306
5777#, fuzzy, c-format
5778msgid "Failed to parse HELLO in file `%s': %s\n"
5779msgstr "Datei wurde als `%s' gespeichert.\n"
5780
5781#: src/peerinfo/gnunet-service-peerinfo.c:323
5782#: src/peerinfo/gnunet-service-peerinfo.c:348
5783#, fuzzy, c-format
5784msgid "Failed to parse HELLO in file `%s'\n"
5785msgstr "Datei wurde als `%s' gespeichert.\n"
5786
5787#: src/peerinfo/gnunet-service-peerinfo.c:426
5788msgid "# peers known"
5789msgstr ""
5790
5791#: src/peerinfo/gnunet-service-peerinfo.c:468
5792#, c-format
5793msgid ""
5794"File `%s' in directory `%s' does not match naming convention. Removed.\n"
5795msgstr ""
5796"Die Datei »%s« im Verzeichnis »%s« entspricht nicht der Namenskonvention. "
5797"Die Datei wurde entfernt.\n"
5798
5799#: src/peerinfo/gnunet-service-peerinfo.c:624
5800#, fuzzy, c-format
5801msgid "Scanning directory `%s'\n"
5802msgstr "==> Verzeichnis `%s':\n"
5803
5804#: src/peerinfo/gnunet-service-peerinfo.c:631
5805#, fuzzy, c-format
5806msgid "Still no peers found in `%s'!\n"
5807msgstr "Dienst `%s' konnte nicht ordentlich entladen werden!\n"
5808
5809#: src/peerinfo/gnunet-service-peerinfo.c:1027
5810#, fuzzy, c-format
5811msgid "Cleaning up directory `%s'\n"
5812msgstr "==> Verzeichnis `%s':\n"
5813
5814#: src/peerinfo/gnunet-service-peerinfo.c:1322
5815#, c-format
5816msgid "Importing HELLOs from `%s'\n"
5817msgstr ""
5818
5819#: src/peerinfo/gnunet-service-peerinfo.c:1335
5820msgid "Skipping import of included HELLOs\n"
5821msgstr ""
5822
5823#: src/peerinfo/peerinfo_api.c:217
5824#, fuzzy
5825msgid "Failed to receive response from `PEERINFO' service."
5826msgstr "Fehler beim Empfangen der Antwort von gnunetd auf die `%s' Nachricht\n"
5827
5806#: src/peerstore/gnunet-peerstore.c:92 5828#: src/peerstore/gnunet-peerstore.c:92
5807msgid "peerstore" 5829msgid "peerstore"
5808msgstr "" 5830msgstr ""
@@ -5995,12 +6017,12 @@ msgstr ""
5995msgid "re:claimID command line tool" 6017msgid "re:claimID command line tool"
5996msgstr "" 6018msgstr ""
5997 6019
5998#: src/reclaim/plugin_rest_openid_connect.c:2788 6020#: src/reclaim/plugin_rest_openid_connect.c:2793
5999#, fuzzy 6021#, fuzzy
6000msgid "OpenID Connect REST API initialized\n" 6022msgid "OpenID Connect REST API initialized\n"
6001msgstr " Verbindung fehlgeschlagen\n" 6023msgstr " Verbindung fehlgeschlagen\n"
6002 6024
6003#: src/reclaim/plugin_rest_reclaim.c:1521 6025#: src/reclaim/plugin_rest_pabc.c:637 src/reclaim/plugin_rest_reclaim.c:1520
6004#, fuzzy 6026#, fuzzy
6005msgid "Identity Provider REST API initialized\n" 6027msgid "Identity Provider REST API initialized\n"
6006msgstr " Verbindung fehlgeschlagen\n" 6028msgstr " Verbindung fehlgeschlagen\n"
@@ -6019,56 +6041,56 @@ msgstr ""
6019msgid "Daemon to announce regular expressions for the peer using cadet." 6041msgid "Daemon to announce regular expressions for the peer using cadet."
6020msgstr "" 6042msgstr ""
6021 6043
6022#: src/regex/gnunet-regex-profiler.c:1390 6044#: src/regex/gnunet-regex-profiler.c:1392
6023msgid "No configuration file given. Exiting\n" 6045msgid "No configuration file given. Exiting\n"
6024msgstr "Keine Konfigurationsdatei angegeben. Abbruch\n" 6046msgstr "Keine Konfigurationsdatei angegeben. Abbruch\n"
6025 6047
6026#: src/regex/gnunet-regex-profiler.c:1432 6048#: src/regex/gnunet-regex-profiler.c:1434
6027#: src/regex/gnunet-regex-simulation-profiler.c:631 6049#: src/regex/gnunet-regex-simulation-profiler.c:631
6028#, c-format 6050#, c-format
6029msgid "No policy directory specified on command line. Exiting.\n" 6051msgid "No policy directory specified on command line. Exiting.\n"
6030msgstr "" 6052msgstr ""
6031 6053
6032#: src/regex/gnunet-regex-profiler.c:1438 6054#: src/regex/gnunet-regex-profiler.c:1440
6033#: src/regex/gnunet-regex-simulation-profiler.c:639 6055#: src/regex/gnunet-regex-simulation-profiler.c:639
6034#, c-format 6056#, c-format
6035msgid "Specified policies directory does not exist. Exiting.\n" 6057msgid "Specified policies directory does not exist. Exiting.\n"
6036msgstr "" 6058msgstr ""
6037 6059
6038#: src/regex/gnunet-regex-profiler.c:1446 6060#: src/regex/gnunet-regex-profiler.c:1448
6039#, c-format 6061#, c-format
6040msgid "No files found in `%s'\n" 6062msgid "No files found in `%s'\n"
6041msgstr "Keine Dateien in »%s« gefunden\n" 6063msgstr "Keine Dateien in »%s« gefunden\n"
6042 6064
6043#: src/regex/gnunet-regex-profiler.c:1455 6065#: src/regex/gnunet-regex-profiler.c:1457
6044msgid "No search strings file given. Exiting.\n" 6066msgid "No search strings file given. Exiting.\n"
6045msgstr "" 6067msgstr ""
6046 6068
6047#: src/regex/gnunet-regex-profiler.c:1475 6069#: src/regex/gnunet-regex-profiler.c:1477
6048msgid "Error loading search strings. Exiting.\n" 6070msgid "Error loading search strings. Exiting.\n"
6049msgstr "" 6071msgstr ""
6050 6072
6051#: src/regex/gnunet-regex-profiler.c:1563 6073#: src/regex/gnunet-regex-profiler.c:1565
6052msgid "name of the file for writing statistics" 6074msgid "name of the file for writing statistics"
6053msgstr "" 6075msgstr ""
6054 6076
6055#: src/regex/gnunet-regex-profiler.c:1570 6077#: src/regex/gnunet-regex-profiler.c:1572
6056msgid "wait TIMEOUT before ending the experiment" 6078msgid "wait TIMEOUT before ending the experiment"
6057msgstr "" 6079msgstr ""
6058 6080
6059#: src/regex/gnunet-regex-profiler.c:1576 6081#: src/regex/gnunet-regex-profiler.c:1578
6060msgid "directory with policy files" 6082msgid "directory with policy files"
6061msgstr "" 6083msgstr ""
6062 6084
6063#: src/regex/gnunet-regex-profiler.c:1584 6085#: src/regex/gnunet-regex-profiler.c:1586
6064msgid "name of file with input strings" 6086msgid "name of file with input strings"
6065msgstr "" 6087msgstr ""
6066 6088
6067#: src/regex/gnunet-regex-profiler.c:1591 6089#: src/regex/gnunet-regex-profiler.c:1593
6068msgid "name of file with hosts' names" 6090msgid "name of file with hosts' names"
6069msgstr "" 6091msgstr ""
6070 6092
6071#: src/regex/gnunet-regex-profiler.c:1604 6093#: src/regex/gnunet-regex-profiler.c:1606
6072msgid "Profiler for regex" 6094msgid "Profiler for regex"
6073msgstr "" 6095msgstr ""
6074 6096
@@ -6094,12 +6116,12 @@ msgstr ""
6094msgid "Search string `%s' is too long!\n" 6116msgid "Search string `%s' is too long!\n"
6095msgstr "Dienst »%s« läuft nicht\n" 6117msgstr "Dienst »%s« läuft nicht\n"
6096 6118
6097#: src/rest/gnunet-rest-server.c:1266 6119#: src/rest/gnunet-rest-server.c:1267
6098#, fuzzy 6120#, fuzzy
6099msgid "GNUnet REST server" 6121msgid "GNUnet REST server"
6100msgstr "GNUnet Netzwerk Topologie tracen." 6122msgstr "GNUnet Netzwerk Topologie tracen."
6101 6123
6102#: src/rest/plugin_rest_config.c:427 6124#: src/rest/plugin_rest_config.c:429
6103#, fuzzy 6125#, fuzzy
6104msgid "CONFIG REST API initialized\n" 6126msgid "CONFIG REST API initialized\n"
6105msgstr " Verbindung fehlgeschlagen\n" 6127msgstr " Verbindung fehlgeschlagen\n"
@@ -6164,71 +6186,76 @@ msgstr ""
6164msgid "Ego `%s' not found.\n" 6186msgid "Ego `%s' not found.\n"
6165msgstr "Kommando `%s' wurde nicht gefunden!\n" 6187msgstr "Kommando `%s' wurde nicht gefunden!\n"
6166 6188
6167#: src/revocation/gnunet-revocation.c:351 6189#: src/revocation/gnunet-revocation.c:350
6190#, fuzzy, c-format
6191msgid "Error: Key is invalid\n"
6192msgstr "Schlüssel »%s« ist gültig\n"
6193
6194#: src/revocation/gnunet-revocation.c:357
6168#, c-format 6195#, c-format
6169msgid "Error: revocation certificate in `%s' is not for `%s'\n" 6196msgid "Error: revocation certificate in `%s' is not for `%s'\n"
6170msgstr "" 6197msgstr ""
6171 6198
6172#: src/revocation/gnunet-revocation.c:361 6199#: src/revocation/gnunet-revocation.c:367
6173msgid "Revocation certificate ready\n" 6200msgid "Revocation certificate ready\n"
6174msgstr "" 6201msgstr ""
6175 6202
6176#: src/revocation/gnunet-revocation.c:373 6203#: src/revocation/gnunet-revocation.c:379
6177msgid "Continuing calculation where left off...\n" 6204msgid "Continuing calculation where left off...\n"
6178msgstr "" 6205msgstr ""
6179 6206
6180#: src/revocation/gnunet-revocation.c:380 6207#: src/revocation/gnunet-revocation.c:386
6181msgid "Revocation certificate not ready, calculating proof of work\n" 6208msgid "Revocation certificate not ready, calculating proof of work\n"
6182msgstr "" 6209msgstr ""
6183 6210
6184#: src/revocation/gnunet-revocation.c:418 6211#: src/revocation/gnunet-revocation.c:424
6185#, c-format 6212#, c-format
6186msgid "Public key `%s' malformed\n" 6213msgid "Public key `%s' malformed\n"
6187msgstr "" 6214msgstr ""
6188 6215
6189#: src/revocation/gnunet-revocation.c:428 6216#: src/revocation/gnunet-revocation.c:434
6190msgid "" 6217msgid ""
6191"Testing and revoking at the same time is not allowed, only executing test.\n" 6218"Testing and revoking at the same time is not allowed, only executing test.\n"
6192msgstr "" 6219msgstr ""
6193 6220
6194#: src/revocation/gnunet-revocation.c:458 6221#: src/revocation/gnunet-revocation.c:464
6195msgid "No filename to store revocation certificate given.\n" 6222msgid "No filename to store revocation certificate given.\n"
6196msgstr "" 6223msgstr ""
6197 6224
6198#: src/revocation/gnunet-revocation.c:475 6225#: src/revocation/gnunet-revocation.c:481
6199#, fuzzy, c-format 6226#, fuzzy, c-format
6200msgid "Failed to read revocation certificate from `%s'\n" 6227msgid "Failed to read revocation certificate from `%s'\n"
6201msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n" 6228msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
6202 6229
6203#: src/revocation/gnunet-revocation.c:483 6230#: src/revocation/gnunet-revocation.c:489
6204#, fuzzy, c-format 6231#, fuzzy, c-format
6205msgid "Revocation certificate corrupted in `%s'\n" 6232msgid "Revocation certificate corrupted in `%s'\n"
6206msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n" 6233msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
6207 6234
6208#: src/revocation/gnunet-revocation.c:505 6235#: src/revocation/gnunet-revocation.c:511
6209#, fuzzy 6236#, fuzzy
6210msgid "No action specified. Nothing to do.\n" 6237msgid "No action specified. Nothing to do.\n"
6211msgstr "Keine Kommandos angegeben.\n" 6238msgstr "Keine Kommandos angegeben.\n"
6212 6239
6213#: src/revocation/gnunet-revocation.c:524 6240#: src/revocation/gnunet-revocation.c:530
6214msgid "use NAME for the name of the revocation file" 6241msgid "use NAME for the name of the revocation file"
6215msgstr "" 6242msgstr ""
6216 6243
6217#: src/revocation/gnunet-revocation.c:532 6244#: src/revocation/gnunet-revocation.c:538
6218msgid "" 6245msgid ""
6219"revoke the private key associated for the the private key associated with " 6246"revoke the private key associated for the the private key associated with "
6220"the ego NAME " 6247"the ego NAME "
6221msgstr "" 6248msgstr ""
6222 6249
6223#: src/revocation/gnunet-revocation.c:539 6250#: src/revocation/gnunet-revocation.c:545
6224msgid "actually perform revocation, otherwise we just do the precomputation" 6251msgid "actually perform revocation, otherwise we just do the precomputation"
6225msgstr "" 6252msgstr ""
6226 6253
6227#: src/revocation/gnunet-revocation.c:546 6254#: src/revocation/gnunet-revocation.c:552
6228msgid "test if the public key KEY has been revoked" 6255msgid "test if the public key KEY has been revoked"
6229msgstr "" 6256msgstr ""
6230 6257
6231#: src/revocation/gnunet-revocation.c:552 6258#: src/revocation/gnunet-revocation.c:558
6232#, fuzzy 6259#, fuzzy
6233msgid "number of epochs to calculate for" 6260msgid "number of epochs to calculate for"
6234msgstr "Anzahl an Durchläufen" 6261msgstr "Anzahl an Durchläufen"
@@ -6266,18 +6293,6 @@ msgstr ""
6266msgid "Could not open revocation database file!" 6293msgid "Could not open revocation database file!"
6267msgstr "Knoten `%s' konnte nicht in der Routing Tabelle gefunden werden!\n" 6294msgstr "Knoten `%s' konnte nicht in der Routing Tabelle gefunden werden!\n"
6268 6295
6269#: src/rps/gnunet-rps.c:270
6270msgid "Seed a PeerID"
6271msgstr ""
6272
6273#: src/rps/gnunet-rps.c:275
6274msgid "Get updates of view (0 for infinite updates)"
6275msgstr ""
6276
6277#: src/rps/gnunet-rps.c:279
6278msgid "Get peers from biased stream"
6279msgstr ""
6280
6281#: src/rps/gnunet-rps-profiler.c:3142 6296#: src/rps/gnunet-rps-profiler.c:3142
6282msgid "duration of the profiling" 6297msgid "duration of the profiling"
6283msgstr "" 6298msgstr ""
@@ -6295,6 +6310,18 @@ msgstr "Anzahl an Durchläufen"
6295msgid "Measure quality and performance of the RPS service." 6310msgid "Measure quality and performance of the RPS service."
6296msgstr "" 6311msgstr ""
6297 6312
6313#: src/rps/gnunet-rps.c:270
6314msgid "Seed a PeerID"
6315msgstr ""
6316
6317#: src/rps/gnunet-rps.c:275
6318msgid "Get updates of view (0 for infinite updates)"
6319msgstr ""
6320
6321#: src/rps/gnunet-rps.c:279
6322msgid "Get peers from biased stream"
6323msgstr ""
6324
6298#: src/scalarproduct/gnunet-scalarproduct.c:229 6325#: src/scalarproduct/gnunet-scalarproduct.c:229
6299#, fuzzy 6326#, fuzzy
6300msgid "You must specify at least one message ID to check!\n" 6327msgid "You must specify at least one message ID to check!\n"
@@ -6350,15 +6377,15 @@ msgstr ""
6350msgid "Calculate the Vectorproduct with a GNUnet peer." 6377msgid "Calculate the Vectorproduct with a GNUnet peer."
6351msgstr "" 6378msgstr ""
6352 6379
6380#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118
6381#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1034
6353#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1358 6382#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1358
6354#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1355 6383#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1355
6355#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118
6356#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1063
6357#, fuzzy 6384#, fuzzy
6358msgid "Connect to CADET failed\n" 6385msgid "Connect to CADET failed\n"
6359msgstr " Verbindung fehlgeschlagen\n" 6386msgstr " Verbindung fehlgeschlagen\n"
6360 6387
6361#: src/scalarproduct/scalarproduct_api.c:189 6388#: src/scalarproduct/scalarproduct_api.c:184
6362msgid "Keys given to SCALARPRODUCT not unique!\n" 6389msgid "Keys given to SCALARPRODUCT not unique!\n"
6363msgstr "" 6390msgstr ""
6364 6391
@@ -6379,7 +6406,7 @@ msgid "also profile decryption"
6379msgstr "" 6406msgstr ""
6380 6407
6381#: src/set/gnunet-service-set.c:1916 src/seti/gnunet-service-seti.c:2467 6408#: src/set/gnunet-service-set.c:1916 src/seti/gnunet-service-seti.c:2467
6382#: src/setu/gnunet-service-setu.c:3832 6409#: src/setu/gnunet-service-setu.c:5389
6383#, fuzzy 6410#, fuzzy
6384msgid "Could not connect to CADET service\n" 6411msgid "Could not connect to CADET service\n"
6385msgstr "Verbindung zum %s-Dienst ist fehlgeschlagen!\n" 6412msgstr "Verbindung zum %s-Dienst ist fehlgeschlagen!\n"
@@ -6623,7 +6650,7 @@ msgid ""
6623"\t cap: the maximum number of links a node can have\n" 6650"\t cap: the maximum number of links a node can have\n"
6624"\t m: the number of links a node should have while joining the network\n" 6651"\t m: the number of links a node should have while joining the network\n"
6625"\t filename: the path of the file which contains topology information\n" 6652"\t filename: the path of the file which contains topology information\n"
6626"NOTE: the format of the above file is descibed here: https://www.gnunet.org/" 6653"NOTE: the format of the above file is described here: https://www.gnunet.org/"
6627"content/topology-file-format\n" 6654"content/topology-file-format\n"
6628msgstr "" 6655msgstr ""
6629 6656
@@ -6708,6 +6735,17 @@ msgstr ""
6708msgid "%.s Unknown result code." 6735msgid "%.s Unknown result code."
6709msgstr "" 6736msgstr ""
6710 6737
6738#: src/testbed/gnunet-testbed-profiler.c:290
6739msgid "tolerate COUNT number of continuous timeout failures"
6740msgstr ""
6741
6742#: src/testbed/gnunet-testbed-profiler.c:295
6743msgid ""
6744"run profiler in non-interactive mode where upon testbed setup the profiler "
6745"does not wait for a keystroke but continues to run until a termination "
6746"signal is received"
6747msgstr ""
6748
6711#: src/testbed/gnunet_testbed_mpi_spawn.c:119 6749#: src/testbed/gnunet_testbed_mpi_spawn.c:119
6712#, fuzzy 6750#, fuzzy
6713msgid "Waiting for child to exit.\n" 6751msgid "Waiting for child to exit.\n"
@@ -6720,17 +6758,6 @@ msgstr ""
6720msgid "Spawning process `%s'\n" 6758msgid "Spawning process `%s'\n"
6721msgstr "Ungültige Antwort auf `%s'.\n" 6759msgstr "Ungültige Antwort auf `%s'.\n"
6722 6760
6723#: src/testbed/gnunet-testbed-profiler.c:290
6724msgid "tolerate COUNT number of continious timeout failures"
6725msgstr ""
6726
6727#: src/testbed/gnunet-testbed-profiler.c:295
6728msgid ""
6729"run profiler in non-interactive mode where upon testbed setup the profiler "
6730"does not wait for a keystroke but continues to run until a termination "
6731"signal is received"
6732msgstr ""
6733
6734#: src/testbed/testbed_api.c:399 6761#: src/testbed/testbed_api.c:399
6735#, fuzzy, c-format 6762#, fuzzy, c-format
6736msgid "Adding host %u failed with error: %s\n" 6763msgid "Adding host %u failed with error: %s\n"
@@ -7023,14 +7050,14 @@ msgstr "# HELLO-Meldungen empfangen"
7023msgid "GNUnet topology control" 7050msgid "GNUnet topology control"
7024msgstr "" 7051msgstr ""
7025 7052
7026#: src/transport/gnunet-communicator-tcp.c:3331 7053#: src/transport/gnunet-communicator-tcp.c:3317
7027#: src/transport/gnunet-communicator-udp.c:3790 7054#: src/transport/gnunet-communicator-udp.c:3790
7028#: src/transport/gnunet-service-tng.c:10220 7055#: src/transport/gnunet-service-tng.c:10223
7029#: src/transport/gnunet-service-transport.c:2627 7056#: src/transport/gnunet-service-transport.c:2627
7030msgid "Transport service is lacking key configuration settings. Exiting.\n" 7057msgid "Transport service is lacking key configuration settings. Exiting.\n"
7031msgstr "" 7058msgstr ""
7032 7059
7033#: src/transport/gnunet-communicator-tcp.c:3668 7060#: src/transport/gnunet-communicator-tcp.c:3655
7034msgid "GNUnet TCP communicator" 7061msgid "GNUnet TCP communicator"
7035msgstr "" 7062msgstr ""
7036 7063
@@ -7059,10 +7086,6 @@ msgstr "Pfad zu »%s« kann nicht erstellt werden\n"
7059msgid "GNUnet UNIX domain socket communicator" 7086msgid "GNUnet UNIX domain socket communicator"
7060msgstr "" 7087msgstr ""
7061 7088
7062#: src/transport/gnunet-service-transport_ats.c:137
7063msgid "# Addresses given to ATS"
7064msgstr ""
7065
7066#: src/transport/gnunet-service-transport.c:445 7089#: src/transport/gnunet-service-transport.c:445
7067msgid "# messages dropped due to slow client" 7090msgid "# messages dropped due to slow client"
7068msgstr "" 7091msgstr ""
@@ -7103,6 +7126,10 @@ msgstr ""
7103msgid "Adding blacklisting entry for peer `%s':`%s'\n" 7126msgid "Adding blacklisting entry for peer `%s':`%s'\n"
7104msgstr "" 7127msgstr ""
7105 7128
7129#: src/transport/gnunet-service-transport_ats.c:137
7130msgid "# Addresses given to ATS"
7131msgstr ""
7132
7106#: src/transport/gnunet-service-transport_hello.c:195 7133#: src/transport/gnunet-service-transport_hello.c:195
7107msgid "# refreshed my HELLO" 7134msgid "# refreshed my HELLO"
7108msgstr "" 7135msgstr ""
@@ -7428,6 +7455,43 @@ msgstr ""
7428msgid "# HELLOs given to peerinfo" 7455msgid "# HELLOs given to peerinfo"
7429msgstr "" 7456msgstr ""
7430 7457
7458#: src/transport/gnunet-transport-profiler.c:220
7459#, c-format
7460msgid "%llu B in %llu ms == %.2f KB/s!\n"
7461msgstr ""
7462
7463#: src/transport/gnunet-transport-profiler.c:577
7464msgid "send data to peer"
7465msgstr ""
7466
7467#: src/transport/gnunet-transport-profiler.c:581
7468#, fuzzy
7469msgid "receive data from peer"
7470msgstr "# Bytes des Typs %d empfangen"
7471
7472#: src/transport/gnunet-transport-profiler.c:586
7473msgid "iterations"
7474msgstr ""
7475
7476#: src/transport/gnunet-transport-profiler.c:591
7477#, fuzzy
7478msgid "number of messages to send"
7479msgstr "Anzahl an Durchläufen"
7480
7481#: src/transport/gnunet-transport-profiler.c:596
7482msgid "message size to use"
7483msgstr ""
7484
7485#: src/transport/gnunet-transport-profiler.c:601
7486#: src/transport/gnunet-transport.c:1404
7487msgid "peer identity"
7488msgstr ""
7489
7490#: src/transport/gnunet-transport-profiler.c:614
7491#: src/transport/gnunet-transport.c:1426
7492msgid "Direct access to transport service."
7493msgstr "Direkter Zugriff auf den Transportdienst"
7494
7431#: src/transport/gnunet-transport.c:406 7495#: src/transport/gnunet-transport.c:406
7432#, c-format 7496#, c-format
7433msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n" 7497msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n"
@@ -7560,11 +7624,6 @@ msgstr ""
7560msgid "do not resolve hostnames" 7624msgid "do not resolve hostnames"
7561msgstr "Keine Rechnernamen auflösen" 7625msgstr "Keine Rechnernamen auflösen"
7562 7626
7563#: src/transport/gnunet-transport.c:1404
7564#: src/transport/gnunet-transport-profiler.c:601
7565msgid "peer identity"
7566msgstr ""
7567
7568#: src/transport/gnunet-transport.c:1408 7627#: src/transport/gnunet-transport.c:1408
7569msgid "monitor plugin sessions" 7628msgid "monitor plugin sessions"
7570msgstr "" 7629msgstr ""
@@ -7573,38 +7632,6 @@ msgstr ""
7573msgid "send data for benchmarking to the other peer (until CTRL-C)" 7632msgid "send data for benchmarking to the other peer (until CTRL-C)"
7574msgstr "" 7633msgstr ""
7575 7634
7576#: src/transport/gnunet-transport.c:1426
7577#: src/transport/gnunet-transport-profiler.c:614
7578msgid "Direct access to transport service."
7579msgstr "Direkter Zugriff auf den Transportdienst"
7580
7581#: src/transport/gnunet-transport-profiler.c:220
7582#, c-format
7583msgid "%llu B in %llu ms == %.2f KB/s!\n"
7584msgstr ""
7585
7586#: src/transport/gnunet-transport-profiler.c:577
7587msgid "send data to peer"
7588msgstr ""
7589
7590#: src/transport/gnunet-transport-profiler.c:581
7591#, fuzzy
7592msgid "receive data from peer"
7593msgstr "# Bytes des Typs %d empfangen"
7594
7595#: src/transport/gnunet-transport-profiler.c:586
7596msgid "iterations"
7597msgstr ""
7598
7599#: src/transport/gnunet-transport-profiler.c:591
7600#, fuzzy
7601msgid "number of messages to send"
7602msgstr "Anzahl an Durchläufen"
7603
7604#: src/transport/gnunet-transport-profiler.c:596
7605msgid "message size to use"
7606msgstr ""
7607
7608#: src/transport/plugin_transport_http_client.c:1488 7635#: src/transport/plugin_transport_http_client.c:1488
7609#: src/transport/plugin_transport_http_server.c:2331 7636#: src/transport/plugin_transport_http_server.c:2331
7610#: src/transport/plugin_transport_http_server.c:3562 7637#: src/transport/plugin_transport_http_server.c:3562
@@ -7877,21 +7904,6 @@ msgstr ""
7877msgid "TCP transport advertises itself as being on port %llu\n" 7904msgid "TCP transport advertises itself as being on port %llu\n"
7878msgstr "" 7905msgstr ""
7879 7906
7880#: src/transport/plugin_transport_udp_broadcasting.c:169
7881#, fuzzy
7882msgid "# Multicast HELLO beacons received via UDP"
7883msgstr "# Bytes empfangen über TCP"
7884
7885#: src/transport/plugin_transport_udp_broadcasting.c:553
7886msgid ""
7887"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n"
7888msgstr ""
7889
7890#: src/transport/plugin_transport_udp_broadcasting.c:571
7891#, fuzzy, c-format
7892msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n"
7893msgstr "Der Transportdienst auf Port %d konnte nicht gestartet werden.\n"
7894
7895#: src/transport/plugin_transport_udp.c:3170 7907#: src/transport/plugin_transport_udp.c:3170
7896#, c-format 7908#, c-format
7897msgid "" 7909msgid ""
@@ -7939,6 +7951,21 @@ msgstr "»%s« ist keine gültige IP-Adresse.\n"
7939msgid "Failed to create UDP network sockets\n" 7951msgid "Failed to create UDP network sockets\n"
7940msgstr "UDP-Sockets können nicht geöffnet werden\n" 7952msgstr "UDP-Sockets können nicht geöffnet werden\n"
7941 7953
7954#: src/transport/plugin_transport_udp_broadcasting.c:169
7955#, fuzzy
7956msgid "# Multicast HELLO beacons received via UDP"
7957msgstr "# Bytes empfangen über TCP"
7958
7959#: src/transport/plugin_transport_udp_broadcasting.c:553
7960msgid ""
7961"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n"
7962msgstr ""
7963
7964#: src/transport/plugin_transport_udp_broadcasting.c:571
7965#, fuzzy, c-format
7966msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n"
7967msgstr "Der Transportdienst auf Port %d konnte nicht gestartet werden.\n"
7968
7942#: src/transport/plugin_transport_unix.c:1396 7969#: src/transport/plugin_transport_unix.c:1396
7943#, fuzzy, c-format 7970#, fuzzy, c-format
7944msgid "Cannot bind to `%s'\n" 7971msgid "Cannot bind to `%s'\n"
@@ -8100,7 +8127,7 @@ msgstr ""
8100msgid "Service process failed to report status\n" 8127msgid "Service process failed to report status\n"
8101msgstr "" 8128msgstr ""
8102 8129
8103#: src/transport/tcp_service_legacy.c:1253 src/util/disk.c:1040 8130#: src/transport/tcp_service_legacy.c:1253 src/util/disk.c:1220
8104#: src/util/service.c:1637 8131#: src/util/service.c:1637
8105#, fuzzy, c-format 8132#, fuzzy, c-format
8106msgid "Cannot obtain information about user `%s': %s\n" 8133msgid "Cannot obtain information about user `%s': %s\n"
@@ -8219,47 +8246,47 @@ msgstr "Ungültiger Parameter: `%s'\n"
8219msgid "Failed to serialize metadata `%s'" 8246msgid "Failed to serialize metadata `%s'"
8220msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n" 8247msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
8221 8248
8222#: src/util/client.c:747 src/util/client.c:937 8249#: src/util/client.c:747 src/util/client.c:938
8223msgid "not a valid filename" 8250msgid "not a valid filename"
8224msgstr "" 8251msgstr ""
8225 8252
8226#: src/util/client.c:1103 8253#: src/util/client.c:1104
8227#, c-format 8254#, c-format
8228msgid "Need a non-empty hostname for service `%s'.\n" 8255msgid "Need a non-empty hostname for service `%s'.\n"
8229msgstr "" 8256msgstr ""
8230 8257
8231#: src/util/common_logging.c:259 src/util/common_logging.c:1114 8258#: src/util/common_logging.c:626 src/util/common_logging.c:665
8232msgid "DEBUG" 8259#, c-format
8233msgstr "DEBUG" 8260msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n"
8234
8235#: src/util/common_logging.c:261 src/util/common_logging.c:1112
8236msgid "INFO"
8237msgstr "INFO"
8238
8239#: src/util/common_logging.c:263 src/util/common_logging.c:1110
8240msgid "MESSAGE"
8241msgstr "" 8261msgstr ""
8242 8262
8243#: src/util/common_logging.c:265 src/util/common_logging.c:1108 8263#: src/util/common_logging.c:904
8244msgid "WARNING" 8264#, c-format
8245msgstr "WARNUNG" 8265msgid "Message `%.*s' repeated %u times in the last %s\n"
8266msgstr ""
8246 8267
8247#: src/util/common_logging.c:267 src/util/common_logging.c:1106 8268#: src/util/common_logging.c:1106
8248msgid "ERROR" 8269msgid "ERROR"
8249msgstr "FEHLER" 8270msgstr "FEHLER"
8250 8271
8251#: src/util/common_logging.c:269 src/util/common_logging.c:1116 8272#: src/util/common_logging.c:1108
8252msgid "NONE" 8273msgid "WARNING"
8253msgstr "" 8274msgstr "WARNUNG"
8254 8275
8255#: src/util/common_logging.c:626 src/util/common_logging.c:665 8276#: src/util/common_logging.c:1110
8256#, c-format 8277msgid "MESSAGE"
8257msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n"
8258msgstr "" 8278msgstr ""
8259 8279
8260#: src/util/common_logging.c:904 8280#: src/util/common_logging.c:1112
8261#, c-format 8281msgid "INFO"
8262msgid "Message `%.*s' repeated %u times in the last %s\n" 8282msgstr "INFO"
8283
8284#: src/util/common_logging.c:1114
8285msgid "DEBUG"
8286msgstr "DEBUG"
8287
8288#: src/util/common_logging.c:1116
8289msgid "NONE"
8263msgstr "" 8290msgstr ""
8264 8291
8265#: src/util/common_logging.c:1117 8292#: src/util/common_logging.c:1117
@@ -8289,38 +8316,68 @@ msgstr ""
8289"Die Konfigurationsdatei muss in der Sektion `%s' unter `%s' ein Verzeichnis " 8316"Die Konfigurationsdatei muss in der Sektion `%s' unter `%s' ein Verzeichnis "
8290"angeben, in dem FS Daten gespeichert werden.\n" 8317"angeben, in dem FS Daten gespeichert werden.\n"
8291 8318
8292#: src/util/configuration.c:370 8319#: src/util/configuration.c:790
8320#, c-format
8321msgid "Illegal directive in line %u (parsing restricted section %s)\n"
8322msgstr ""
8323
8324#: src/util/configuration.c:800
8325#, c-format
8326msgid "Bad directive in line %u\n"
8327msgstr ""
8328
8329#: src/util/configuration.c:853
8330#, c-format
8331msgid "Bad inline-secret directive in line %u\n"
8332msgstr ""
8333
8334#: src/util/configuration.c:875
8335#, c-format
8336msgid "Unknown or malformed directive '%s' in line %u\n"
8337msgstr ""
8338
8339#: src/util/configuration.c:905
8340#, fuzzy, c-format
8341msgid "Syntax error while deserializing in line %u (option without section)\n"
8342msgstr "Syntaxfehler in Konfigurationsdatei `%s' in Zeile %d.\n"
8343
8344#: src/util/configuration.c:949
8293#, fuzzy, c-format 8345#, fuzzy, c-format
8294msgid "Syntax error while deserializing in line %u\n" 8346msgid "Syntax error while deserializing in line %u\n"
8295msgstr "Syntaxfehler in Konfigurationsdatei `%s' in Zeile %d.\n" 8347msgstr "Syntaxfehler in Konfigurationsdatei `%s' in Zeile %d.\n"
8296 8348
8297#: src/util/configuration.c:420 8349#: src/util/configuration.c:1049
8298#, fuzzy, c-format 8350#, fuzzy, c-format
8299msgid "Error while reading file `%s'\n" 8351msgid "Error while reading file `%s'\n"
8300msgstr "Konfigurationsdatei `%s' konnte nicht geöffnet werden.\n" 8352msgstr "Konfigurationsdatei `%s' konnte nicht geöffnet werden.\n"
8301 8353
8302#: src/util/configuration.c:980 8354#: src/util/configuration.c:1062
8355#, fuzzy, c-format
8356msgid "Failed to parse configuration file `%s'\n"
8357msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':"
8358
8359#: src/util/configuration.c:1695
8303msgid "Not a valid relative time specification" 8360msgid "Not a valid relative time specification"
8304msgstr "" 8361msgstr ""
8305 8362
8306#: src/util/configuration.c:1050 8363#: src/util/configuration.c:1765
8307#, c-format 8364#, c-format
8308msgid "" 8365msgid ""
8309"Configuration value '%s' for '%s' in section '%s' is not in set of legal " 8366"Configuration value '%s' for '%s' in section '%s' is not in set of legal "
8310"choices\n" 8367"choices\n"
8311msgstr "" 8368msgstr ""
8312 8369
8313#: src/util/configuration.c:1145 8370#: src/util/configuration.c:1860
8314#, c-format 8371#, c-format
8315msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n" 8372msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n"
8316msgstr "" 8373msgstr ""
8317 8374
8318#: src/util/configuration.c:1177 8375#: src/util/configuration.c:1892
8319#, c-format 8376#, c-format
8320msgid "Missing closing `%s' in option `%s'\n" 8377msgid "Missing closing `%s' in option `%s'\n"
8321msgstr "" 8378msgstr ""
8322 8379
8323#: src/util/configuration.c:1243 8380#: src/util/configuration.c:1958
8324#, c-format 8381#, c-format
8325msgid "" 8382msgid ""
8326"Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined " 8383"Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined "
@@ -8365,7 +8422,7 @@ msgstr "`%s' schlug fehl bei %s:%d mit dem Fehler: `%s'.\n"
8365msgid "RSA signature verification failed at %s:%d: %s\n" 8422msgid "RSA signature verification failed at %s:%d: %s\n"
8366msgstr "RSA Signaturüberprüfung fehlgeschlagen bei %s:%d: %s\n" 8423msgstr "RSA Signaturüberprüfung fehlgeschlagen bei %s:%d: %s\n"
8367 8424
8368#: src/util/disk.c:823 8425#: src/util/disk.c:843
8369#, fuzzy, c-format 8426#, fuzzy, c-format
8370msgid "Expected `%s' to be a directory!\n" 8427msgid "Expected `%s' to be a directory!\n"
8371msgstr "`%s' erwartet, dass `%s' ein Verzeichnis ist!\n" 8428msgstr "`%s' erwartet, dass `%s' ein Verzeichnis ist!\n"
@@ -8549,60 +8606,70 @@ msgstr "Sie müssen für die Option »%s« zusätzlich eine Zahl angeben.\n"
8549msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n" 8606msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n"
8550msgstr "" 8607msgstr ""
8551 8608
8552#: src/util/gnunet-base32.c:45 8609#: src/util/gnunet-base32.c:46
8553msgid "run decoder modus, otherwise runs as encoder" 8610msgid "run decoder modus, otherwise runs as encoder"
8554msgstr "" 8611msgstr ""
8555 8612
8556#: src/util/gnunet-config.c:167 8613#: src/util/gnunet-config.c:187
8557#, fuzzy, c-format
8558msgid "failed to load configuration defaults"
8559msgstr "Konfiguration konnte nicht aus %s geladen werden\n"
8560
8561#: src/util/gnunet-config.c:179
8562#, fuzzy, c-format
8563msgid "%s or %s argument is required\n"
8564msgstr "Option `%s' macht keinen Sinn ohne die Option `%s'.\n"
8565
8566#: src/util/gnunet-config.c:186
8567#, c-format 8614#, c-format
8568msgid "The following sections are available:\n" 8615msgid "The following sections are available:\n"
8569msgstr "" 8616msgstr ""
8570 8617
8571#: src/util/gnunet-config.c:234 8618#: src/util/gnunet-config.c:201
8619#, fuzzy, c-format
8620msgid "%s, %s or %s argument is required\n"
8621msgstr "Option `%s' macht keinen Sinn ohne die Option `%s'.\n"
8622
8623#: src/util/gnunet-config.c:266
8572#, c-format 8624#, c-format
8573msgid "--option argument required to set value\n" 8625msgid "--option argument required to set value\n"
8574msgstr "" 8626msgstr ""
8575 8627
8576#: src/util/gnunet-config.c:284 8628#: src/util/gnunet-config.c:309
8577msgid "interpret option value as a filename (with $-expansion)" 8629#, fuzzy, c-format
8578msgstr "" 8630msgid "failed to load configuration defaults"
8631msgstr "Konfiguration konnte nicht aus %s geladen werden\n"
8579 8632
8580#: src/util/gnunet-config.c:291 8633#: src/util/gnunet-config.c:354
8581msgid "test if the current installation supports the specified BACKEND" 8634msgid "test if the current installation supports the specified BACKEND"
8582msgstr "" 8635msgstr ""
8583 8636
8584#: src/util/gnunet-config.c:297 8637#: src/util/gnunet-config.c:360
8585msgid "name of the section to access" 8638#, fuzzy
8639msgid "write the full configuration file, including default values"
8640msgstr "Konfiguration konnte nicht aus %s geladen werden\n"
8641
8642#: src/util/gnunet-config.c:365
8643msgid "interpret option value as a filename (with $-expansion)"
8586msgstr "" 8644msgstr ""
8587 8645
8588#: src/util/gnunet-config.c:302 8646#: src/util/gnunet-config.c:370
8589msgid "name of the option to access" 8647msgid "name of the option to access"
8590msgstr "" 8648msgstr ""
8591 8649
8592#: src/util/gnunet-config.c:307 8650#: src/util/gnunet-config.c:376
8593msgid "value to set" 8651#, fuzzy
8652msgid "rewrite the configuration file, even if nothing changed"
8653msgstr "Keine Konfigurationsdatei angegeben. Abbruch\n"
8654
8655#: src/util/gnunet-config.c:382
8656msgid "output extra diagnostics"
8594msgstr "" 8657msgstr ""
8595 8658
8596#: src/util/gnunet-config.c:312 8659#: src/util/gnunet-config.c:387
8597#, fuzzy 8660#, fuzzy
8598msgid "print available configuration sections" 8661msgid "print available configuration sections"
8599msgstr "GNUnet Konfiguration" 8662msgstr "GNUnet Konfiguration"
8600 8663
8601#: src/util/gnunet-config.c:318 8664#: src/util/gnunet-config.c:393
8602msgid "write configuration file that only contains delta to defaults" 8665msgid "name of the section to access"
8666msgstr ""
8667
8668#: src/util/gnunet-config.c:398
8669msgid "value to set"
8603msgstr "" 8670msgstr ""
8604 8671
8605#: src/util/gnunet-config.c:330 8672#: src/util/gnunet-config.c:413
8606msgid "Manipulate GNUnet configuration files" 8673msgid "Manipulate GNUnet configuration files"
8607msgstr "GNUnet-Konfigurationsdateien bearbeiten" 8674msgstr "GNUnet-Konfigurationsdateien bearbeiten"
8608 8675
@@ -8794,7 +8861,7 @@ msgstr "Verbindung zu %u.%u.%u.%u:%u fehlgeschlagen: %s\n"
8794msgid "Unable to shorten unix path `%s' while keeping name unique\n" 8861msgid "Unable to shorten unix path `%s' while keeping name unique\n"
8795msgstr "" 8862msgstr ""
8796 8863
8797#: src/util/network.c:1361 8864#: src/util/network.c:1359
8798#, c-format 8865#, c-format
8799msgid "" 8866msgid ""
8800"Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n" 8867"Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n"
@@ -8833,22 +8900,22 @@ msgstr ""
8833msgid "`%s' failed for library `%s' with error: %s\n" 8900msgid "`%s' failed for library `%s' with error: %s\n"
8834msgstr "`%s' fehlgeschlagen für die Bibliothek `%s'. Ort: %s:%d. Fehler: %s\n" 8901msgstr "`%s' fehlgeschlagen für die Bibliothek `%s'. Ort: %s:%d. Fehler: %s\n"
8835 8902
8836#: src/util/plugin.c:409 8903#: src/util/plugin.c:414
8837#, fuzzy 8904#, fuzzy
8838msgid "Could not determine plugin installation path.\n" 8905msgid "Could not determine plugin installation path.\n"
8839msgstr "Öffentliche IP-Adresse konnte nicht ermittelt werden.\n" 8906msgstr "Öffentliche IP-Adresse konnte nicht ermittelt werden.\n"
8840 8907
8841#: src/util/program.c:259 8908#: src/util/program.c:252
8842#, fuzzy, c-format 8909#, fuzzy, c-format
8843msgid "Unreadable or malformed configuration file `%s', exit ...\n" 8910msgid "Unreadable or malformed configuration file `%s', exit ...\n"
8844msgstr "Konfigurationsdatei `%s' wurde erzeugt.\n" 8911msgstr "Konfigurationsdatei `%s' wurde erzeugt.\n"
8845 8912
8846#: src/util/program.c:276 8913#: src/util/program.c:272
8847#, fuzzy, c-format 8914#, fuzzy, c-format
8848msgid "Unreadable or malformed default configuration file `%s', exit ...\n" 8915msgid "Unreadable or malformed default configuration file `%s', exit ...\n"
8849msgstr "Konfigurationsdatei `%s' wurde erzeugt.\n" 8916msgstr "Konfigurationsdatei `%s' wurde erzeugt.\n"
8850 8917
8851#: src/util/program.c:291 8918#: src/util/program.c:288
8852#, fuzzy 8919#, fuzzy
8853msgid "Unreadable or malformed configuration, exit ...\n" 8920msgid "Unreadable or malformed configuration, exit ...\n"
8854msgstr "GNUnet Konfiguration" 8921msgstr "GNUnet Konfiguration"
@@ -8916,82 +8983,82 @@ msgstr ""
8916msgid "Attempting to proxy service `%s' to invalid port %d or hostname.\n" 8983msgid "Attempting to proxy service `%s' to invalid port %d or hostname.\n"
8917msgstr "" 8984msgstr ""
8918 8985
8919#: src/util/strings.c:503 8986#: src/util/strings.c:409
8920#, c-format 8987#, c-format
8921msgid "Character sets requested were `%s'->`%s'\n" 8988msgid "Character sets requested were `%s'->`%s'\n"
8922msgstr "" 8989msgstr ""
8923 8990
8924#: src/util/strings.c:637 8991#: src/util/strings.c:501
8925msgid "Failed to expand `$HOME': environment variable `HOME' not set" 8992msgid "Failed to expand `$HOME': environment variable `HOME' not set"
8926msgstr "" 8993msgstr ""
8927 8994
8928#: src/util/strings.c:1241 8995#: src/util/strings.c:1036
8929msgid "IPv6 address did not start with `['\n" 8996msgid "IPv6 address did not start with `['\n"
8930msgstr "IPv6-Adresse beginnt nicht mit »[«\n" 8997msgstr "IPv6-Adresse beginnt nicht mit »[«\n"
8931 8998
8932#: src/util/strings.c:1249 8999#: src/util/strings.c:1044
8933msgid "IPv6 address did contain ':' to separate port number\n" 9000msgid "IPv6 address did contain ':' to separate port number\n"
8934msgstr "IPv6-Adresse enthält kein »:« zur Abtrennung der Portnummer\n" 9001msgstr "IPv6-Adresse enthält kein »:« zur Abtrennung der Portnummer\n"
8935 9002
8936#: src/util/strings.c:1256 9003#: src/util/strings.c:1051
8937msgid "IPv6 address did contain ']' before ':' to separate port number\n" 9004msgid "IPv6 address did contain ']' before ':' to separate port number\n"
8938msgstr "IPv6-Adresse enthält kein »]« vor »:« zur Abtrennung der Portnummer\n" 9005msgstr "IPv6-Adresse enthält kein »]« vor »:« zur Abtrennung der Portnummer\n"
8939 9006
8940#: src/util/strings.c:1264 9007#: src/util/strings.c:1059
8941msgid "IPv6 address did contain a valid port number after the last ':'\n" 9008msgid "IPv6 address did contain a valid port number after the last ':'\n"
8942msgstr "IPv6-Adresse enthält keine gültige Portnummer nach dem letzten »:«\n" 9009msgstr "IPv6-Adresse enthält keine gültige Portnummer nach dem letzten »:«\n"
8943 9010
8944#: src/util/strings.c:1273 9011#: src/util/strings.c:1068
8945#, fuzzy, c-format 9012#, fuzzy, c-format
8946msgid "Invalid IPv6 address `%s': %s\n" 9013msgid "Invalid IPv6 address `%s': %s\n"
8947msgstr "Ungültige Antwort auf `%s' von `%s'\n" 9014msgstr "Ungültige Antwort auf `%s' von `%s'\n"
8948 9015
8949#: src/util/strings.c:1500 src/util/strings.c:1511 9016#: src/util/strings.c:1250 src/util/strings.c:1261
8950msgid "Port not in range\n" 9017msgid "Port not in range\n"
8951msgstr "Port außerhalb des Bereichs\n" 9018msgstr "Port außerhalb des Bereichs\n"
8952 9019
8953#: src/util/strings.c:1520 9020#: src/util/strings.c:1270
8954#, c-format 9021#, c-format
8955msgid "Malformed port policy `%s'\n" 9022msgid "Malformed port policy `%s'\n"
8956msgstr "" 9023msgstr ""
8957 9024
8958#: src/util/strings.c:1603 src/util/strings.c:1632 src/util/strings.c:1679 9025#: src/util/strings.c:1341 src/util/strings.c:1370 src/util/strings.c:1417
8959#: src/util/strings.c:1699 9026#: src/util/strings.c:1437
8960#, c-format 9027#, c-format
8961msgid "Invalid format for IP: `%s'\n" 9028msgid "Invalid format for IP: `%s'\n"
8962msgstr "Ungültiges Format für IP: »%s«\n" 9029msgstr "Ungültiges Format für IP: »%s«\n"
8963 9030
8964#: src/util/strings.c:1657 9031#: src/util/strings.c:1395
8965#, c-format 9032#, c-format
8966msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)." 9033msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)."
8967msgstr "Ungültige Netzwerk-Notation ('/%d ist nicht gültig in IPv4 CIDR)." 9034msgstr "Ungültige Netzwerk-Notation ('/%d ist nicht gültig in IPv4 CIDR)."
8968 9035
8969#: src/util/strings.c:1708 9036#: src/util/strings.c:1446
8970#, fuzzy, c-format 9037#, fuzzy, c-format
8971msgid "Invalid format: `%s'\n" 9038msgid "Invalid format: `%s'\n"
8972msgstr "Ungültiges Format für IP: `%s'\n" 9039msgstr "Ungültiges Format für IP: `%s'\n"
8973 9040
8974#: src/util/strings.c:1761 9041#: src/util/strings.c:1488
8975#, c-format 9042#, c-format
8976msgid "Invalid network notation (does not end with ';': `%s')\n" 9043msgid "Invalid network notation (does not end with ';': `%s')\n"
8977msgstr "Ungültige Netzwerk-Notation (endet nicht mit »;«: »%s«)\n" 9044msgstr "Ungültige Netzwerk-Notation (endet nicht mit »;«: »%s«)\n"
8978 9045
8979#: src/util/strings.c:1811 9046#: src/util/strings.c:1538
8980#, fuzzy, c-format 9047#, fuzzy, c-format
8981msgid "Wrong format `%s' for netmask\n" 9048msgid "Wrong format `%s' for netmask\n"
8982msgstr "Falsches Format `%s' für Netzmaske: %s\n" 9049msgstr "Falsches Format `%s' für Netzmaske: %s\n"
8983 9050
8984#: src/util/strings.c:1842 9051#: src/util/strings.c:1569
8985#, fuzzy, c-format 9052#, fuzzy, c-format
8986msgid "Wrong format `%s' for network\n" 9053msgid "Wrong format `%s' for network\n"
8987msgstr "Falsches Format `%s' für Netzwerk: %s\n" 9054msgstr "Falsches Format `%s' für Netzwerk: %s\n"
8988 9055
8989#: src/util/time.c:878 src/util/time.c:906 9056#: src/util/time.c:699 src/util/time.c:727
8990#, c-format 9057#, c-format
8991msgid "Failed to map `%s', cannot assure monotonic time!\n" 9058msgid "Failed to map `%s', cannot assure monotonic time!\n"
8992msgstr "" 9059msgstr ""
8993 9060
8994#: src/util/time.c:914 9061#: src/util/time.c:735
8995#, c-format 9062#, c-format
8996msgid "" 9063msgid ""
8997"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n" 9064"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
@@ -9171,12 +9238,35 @@ msgstr "Dienst wird über UDP angeboten"
9171msgid "Setup tunnels via VPN." 9238msgid "Setup tunnels via VPN."
9172msgstr "Tunnel über VPN einrichten." 9239msgstr "Tunnel über VPN einrichten."
9173 9240
9174#: src/zonemaster/gnunet-service-zonemaster.c:847
9175#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418 9241#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418
9242#: src/zonemaster/gnunet-service-zonemaster.c:847
9176#, fuzzy 9243#, fuzzy
9177msgid "Failed to connect to the namestore!\n" 9244msgid "Failed to connect to the namestore!\n"
9178msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" 9245msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
9179 9246
9247#~ msgid "Stop logging\n"
9248#~ msgstr "Protokollierung stoppen\n"
9249
9250#, fuzzy, c-format
9251#~ msgid "Start logging `%s'\n"
9252#~ msgstr "Collection `%s' begonnen.\n"
9253
9254#, fuzzy, c-format
9255#~ msgid "Failed to connect master peer [%u] with slave [%u]\n"
9256#~ msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
9257
9258#, fuzzy, c-format
9259#~ msgid "Unsupported form value `%s'\n"
9260#~ msgstr "Kommando `%s' wird nicht unterstützt. Vorgang wird abgebrochen.\n"
9261
9262#, fuzzy, c-format
9263#~ msgid "Failed to create page for `%s'\n"
9264#~ msgstr "Fehler beim Aktualisieren der Daten des Moduls `%s'\n"
9265
9266#, fuzzy, c-format
9267#~ msgid "Failed to setup post processor for `%s'\n"
9268#~ msgstr "Fehler beim Aktualisieren der Daten des Moduls `%s'\n"
9269
9180#~ msgid "b" 9270#~ msgid "b"
9181#~ msgstr "b" 9271#~ msgstr "b"
9182 9272
@@ -9594,10 +9684,6 @@ msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
9594#~ "Fehler beim Empfangen der Antwort von gnunetd auf die `%s' Nachricht\n" 9684#~ "Fehler beim Empfangen der Antwort von gnunetd auf die `%s' Nachricht\n"
9595 9685
9596#, fuzzy 9686#, fuzzy
9597#~ msgid "unknown error"
9598#~ msgstr "Unbekannter Fehler"
9599
9600#, fuzzy
9601#~ msgid "Invalid response from `fs' service." 9687#~ msgid "Invalid response from `fs' service."
9602#~ msgstr "Ungültige Antwort auf `%s'.\n" 9688#~ msgstr "Ungültige Antwort auf `%s'.\n"
9603 9689
diff --git a/po/es.po b/po/es.po
index 81b3c36fc..b23f36ed6 100644
--- a/po/es.po
+++ b/po/es.po
@@ -8,7 +8,7 @@ msgid ""
8msgstr "" 8msgstr ""
9"Project-Id-Version: gnunet 0.9.5a\n" 9"Project-Id-Version: gnunet 0.9.5a\n"
10"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" 10"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
11"POT-Creation-Date: 2021-04-04 19:19+0200\n" 11"POT-Creation-Date: 2021-08-28 16:52+0200\n"
12"PO-Revision-Date: 2013-02-23 17:50+0100\n" 12"PO-Revision-Date: 2013-02-23 17:50+0100\n"
13"Last-Translator: Miguel Ãngel Arruga Vivas <rosen644835@gmail.com>\n" 13"Last-Translator: Miguel Ãngel Arruga Vivas <rosen644835@gmail.com>\n"
14"Language-Team: Spanish <es@li.org>\n" 14"Language-Team: Spanish <es@li.org>\n"
@@ -29,8 +29,8 @@ msgid "Issuer public key `%s' is not well-formed\n"
29msgstr "El bloque del tipo %u está mal formado\n" 29msgstr "El bloque del tipo %u está mal formado\n"
30 30
31#: src/abd/gnunet-abd.c:560 src/abd/gnunet-service-abd.c:1747 31#: src/abd/gnunet-abd.c:560 src/abd/gnunet-service-abd.c:1747
32#: src/namestore/gnunet-namestore-fcfsd.c:1067
32#: src/namestore/gnunet-namestore.c:1001 33#: src/namestore/gnunet-namestore.c:1001
33#: src/namestore/gnunet-namestore-fcfsd.c:1164
34#, c-format 34#, c-format
35msgid "Failed to connect to namestore\n" 35msgid "Failed to connect to namestore\n"
36msgstr "Se produjo un fallo al conectar con el almacén de nombres\n" 36msgstr "Se produjo un fallo al conectar con el almacén de nombres\n"
@@ -525,121 +525,6 @@ msgstr "El servicio «%s» finalizó con estado %s/%d, se reiniciará en %llu ms
525msgid "Initiating shutdown as requested by client.\n" 525msgid "Initiating shutdown as requested by client.\n"
526msgstr "Iniciando apagado bajo petición del cliente.\n" 526msgstr "Iniciando apagado bajo petición del cliente.\n"
527 527
528#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044
529#, c-format
530msgid ""
531"Could not load quota for network `%s': `%s', assigning default bandwidth "
532"%llu\n"
533msgstr ""
534"No se pudieron cargar las cuotas para la red «%s»: «%s», asignando el ancho "
535"de banda predeterminado %llu\n"
536
537#: src/ats/gnunet-ats-solver-eval.c:3011
538#, c-format
539msgid ""
540"No outbound quota configured for network `%s', assigning default bandwidth "
541"%llu\n"
542msgstr ""
543"No hay configurada una cuota de salida para la red «%s», asignando el ancho "
544"de banda predeterminado %llu\n"
545
546#: src/ats/gnunet-ats-solver-eval.c:3063
547#, c-format
548msgid ""
549"No outbound quota configure for network `%s', assigning default bandwidth "
550"%llu\n"
551msgstr ""
552"No hay configurada una cuota de salida para la red «%s», asignando el ancho "
553"de banda predeterminado %llu\n"
554
555#: src/ats/gnunet-ats-solver-eval.c:3552 src/ats-tests/gnunet-solver-eval.c:997
556#, fuzzy
557msgid "solver to use"
558msgstr "valor a establecer"
559
560#: src/ats/gnunet-ats-solver-eval.c:3557
561#: src/ats-tests/gnunet-solver-eval.c:1003
562#: src/ats-tests/gnunet-solver-eval.c:1008
563msgid "experiment to use"
564msgstr "experimento para usar"
565
566#: src/ats/gnunet-ats-solver-eval.c:3564
567#, fuzzy
568msgid "print logging"
569msgstr "Iniciando descarga «%s».\n"
570
571#: src/ats/gnunet-ats-solver-eval.c:3569
572msgid "save logging to disk"
573msgstr "guarda protocolo al fichero en disco"
574
575#: src/ats/gnunet-ats-solver-eval.c:3574
576msgid "disable normalization"
577msgstr "deshabilita normalización"
578
579#: src/ats/gnunet-service-ats_plugins.c:326
580#, fuzzy, c-format
581msgid ""
582"Could not load %s quota for network `%s': `%s', assigning default bandwidth "
583"%llu\n"
584msgstr ""
585"No se pudieron cargar las cuotas para la red «%s»: «%s», asignando el ancho "
586"de banda predeterminado %llu\n"
587
588# Miguel: "Inbound" lo he traducido como entrada en todo el texto.
589#: src/ats/gnunet-service-ats_plugins.c:336
590#, fuzzy, c-format
591msgid "%s quota configured for network `%s' is %llu\n"
592msgstr "La cuota de entrada configurada para la red «%s» es %llu\n"
593
594#: src/ats/gnunet-service-ats_plugins.c:382
595#, fuzzy, c-format
596msgid ""
597"No %s-quota configured for network `%s', assigning default bandwidth %llu\n"
598msgstr ""
599"No hay configurada una cuota de salida para la red «%s», asignando el ancho "
600"de banda predeterminado %llu\n"
601
602#: src/ats/gnunet-service-ats_plugins.c:474
603#, fuzzy, c-format
604msgid "Failed to initialize solver `%s'!\n"
605msgstr "¡No se puede inicializar el resolvedor!\n"
606
607#: src/ats/plugin_ats_proportional.c:1142
608#, fuzzy, c-format
609msgid "Invalid %s configuration %f \n"
610msgstr "Se produjo un fallo al cargar la configuración de %s\n"
611
612#: src/ats/plugin_ats_proportional.c:1165
613#, fuzzy, c-format
614msgid "Invalid %s configuration %f\n"
615msgstr "Se produjo un fallo al cargar la configuración de %s\n"
616
617#: src/ats-tests/ats-testing.c:420
618#, c-format
619msgid "Connected master [%u] with slave [%u]\n"
620msgstr ""
621
622#: src/ats-tests/ats-testing.c:427
623#, fuzzy, c-format
624msgid "Failed to connect master peer [%u] with slave [%u]\n"
625msgstr "Fallo al conectar a gnunetd.\n"
626
627#: src/ats-tests/ats-testing-log.c:899
628msgid "Stop logging\n"
629msgstr ""
630
631#: src/ats-tests/ats-testing-log.c:955
632#, fuzzy, c-format
633msgid "Start logging `%s'\n"
634msgstr "Iniciando descarga «%s».\n"
635
636#: src/ats-tests/gnunet-ats-sim.c:92
637#, c-format
638msgid ""
639"Master [%u]: sent: %u KiB in %u sec. = %u KiB/s, received: %u KiB in %u sec. "
640"= %u KiB/s\n"
641msgstr ""
642
643# Miguel: ¿Como podría traducir "resolutions" y "resolve"? 528# Miguel: ¿Como podría traducir "resolutions" y "resolve"?
644# Son difíciles de no calcar, puesto que no conozco como expresar 529# Son difíciles de no calcar, puesto que no conozco como expresar
645# el concepto de obtener una dirección a partir de un nombre 530# el concepto de obtener una dirección a partir de un nombre
@@ -774,6 +659,93 @@ msgstr "salida prolija (incluye las propiedades de direcciones del ATS)"
774msgid "Print information about ATS state" 659msgid "Print information about ATS state"
775msgstr "Imprime información acerca del estado del ATS" 660msgstr "Imprime información acerca del estado del ATS"
776 661
662#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044
663#, c-format
664msgid ""
665"Could not load quota for network `%s': `%s', assigning default bandwidth "
666"%llu\n"
667msgstr ""
668"No se pudieron cargar las cuotas para la red «%s»: «%s», asignando el ancho "
669"de banda predeterminado %llu\n"
670
671#: src/ats/gnunet-ats-solver-eval.c:3011
672#, c-format
673msgid ""
674"No outbound quota configured for network `%s', assigning default bandwidth "
675"%llu\n"
676msgstr ""
677"No hay configurada una cuota de salida para la red «%s», asignando el ancho "
678"de banda predeterminado %llu\n"
679
680#: src/ats/gnunet-ats-solver-eval.c:3063
681#, c-format
682msgid ""
683"No outbound quota configure for network `%s', assigning default bandwidth "
684"%llu\n"
685msgstr ""
686"No hay configurada una cuota de salida para la red «%s», asignando el ancho "
687"de banda predeterminado %llu\n"
688
689#: src/ats/gnunet-ats-solver-eval.c:3552
690#, fuzzy
691msgid "solver to use"
692msgstr "valor a establecer"
693
694#: src/ats/gnunet-ats-solver-eval.c:3557
695msgid "experiment to use"
696msgstr "experimento para usar"
697
698#: src/ats/gnunet-ats-solver-eval.c:3564
699#, fuzzy
700msgid "print logging"
701msgstr "Iniciando descarga «%s».\n"
702
703#: src/ats/gnunet-ats-solver-eval.c:3569
704msgid "save logging to disk"
705msgstr "guarda protocolo al fichero en disco"
706
707#: src/ats/gnunet-ats-solver-eval.c:3574
708msgid "disable normalization"
709msgstr "deshabilita normalización"
710
711#: src/ats/gnunet-service-ats_plugins.c:326
712#, fuzzy, c-format
713msgid ""
714"Could not load %s quota for network `%s': `%s', assigning default bandwidth "
715"%llu\n"
716msgstr ""
717"No se pudieron cargar las cuotas para la red «%s»: «%s», asignando el ancho "
718"de banda predeterminado %llu\n"
719
720# Miguel: "Inbound" lo he traducido como entrada en todo el texto.
721#: src/ats/gnunet-service-ats_plugins.c:336
722#, fuzzy, c-format
723msgid "%s quota configured for network `%s' is %llu\n"
724msgstr "La cuota de entrada configurada para la red «%s» es %llu\n"
725
726#: src/ats/gnunet-service-ats_plugins.c:382
727#, fuzzy, c-format
728msgid ""
729"No %s-quota configured for network `%s', assigning default bandwidth %llu\n"
730msgstr ""
731"No hay configurada una cuota de salida para la red «%s», asignando el ancho "
732"de banda predeterminado %llu\n"
733
734#: src/ats/gnunet-service-ats_plugins.c:474
735#, fuzzy, c-format
736msgid "Failed to initialize solver `%s'!\n"
737msgstr "¡No se puede inicializar el resolvedor!\n"
738
739#: src/ats/plugin_ats_proportional.c:1142
740#, fuzzy, c-format
741msgid "Invalid %s configuration %f \n"
742msgstr "Se produjo un fallo al cargar la configuración de %s\n"
743
744#: src/ats/plugin_ats_proportional.c:1165
745#, fuzzy, c-format
746msgid "Invalid %s configuration %f\n"
747msgstr "Se produjo un fallo al cargar la configuración de %s\n"
748
777#: src/auction/gnunet-auction-create.c:163 749#: src/auction/gnunet-auction-create.c:163
778msgid "description of the item to be sold" 750msgid "description of the item to be sold"
779msgstr "descripción del elemento que está por vender" 751msgstr "descripción del elemento que está por vender"
@@ -812,7 +784,7 @@ msgstr ""
812 784
813#: src/auction/gnunet-auction-info.c:77 src/auction/gnunet-auction-join.c:77 785#: src/auction/gnunet-auction-info.c:77 src/auction/gnunet-auction-join.c:77
814#: src/conversation/gnunet-conversation-test.c:256 786#: src/conversation/gnunet-conversation-test.c:256
815#: src/revocation/gnunet-revocation.c:564 src/template/gnunet-template.c:75 787#: src/revocation/gnunet-revocation.c:570 src/template/gnunet-template.c:75
816msgid "help text" 788msgid "help text"
817msgstr "texto de ayuda" 789msgstr "texto de ayuda"
818 790
@@ -916,6 +888,28 @@ msgid "Connection to conversation service lost, trying to reconnect\n"
916msgstr "" 888msgstr ""
917"El cliente se desconectó del servicio principal, tratando de reconectar.\n" 889"El cliente se desconectó del servicio principal, tratando de reconectar.\n"
918 890
891#: src/conversation/gnunet-conversation-test.c:120
892#, c-format
893msgid ""
894"\n"
895"End of transmission. Have a GNU day.\n"
896msgstr ""
897
898#: src/conversation/gnunet-conversation-test.c:146
899#, c-format
900msgid ""
901"\n"
902"ew are now playing your recording back. If you can hear it, your audio "
903"settings are working..."
904msgstr ""
905
906#: src/conversation/gnunet-conversation-test.c:218
907#, c-format
908msgid ""
909"We will now be recording you for %s. After that time, the recording will be "
910"played back to you..."
911msgstr ""
912
919#: src/conversation/gnunet-conversation.c:264 913#: src/conversation/gnunet-conversation.c:264
920#, c-format 914#, c-format
921msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n" 915msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n"
@@ -1176,30 +1170,8 @@ msgstr ""
1176msgid "Enables having a conversation with other GNUnet users." 1170msgid "Enables having a conversation with other GNUnet users."
1177msgstr "" 1171msgstr ""
1178 1172
1179#: src/conversation/gnunet-conversation-test.c:120
1180#, c-format
1181msgid ""
1182"\n"
1183"End of transmission. Have a GNU day.\n"
1184msgstr ""
1185
1186#: src/conversation/gnunet-conversation-test.c:146
1187#, c-format
1188msgid ""
1189"\n"
1190"We are now playing your recording back. If you can hear it, your audio "
1191"settings are working..."
1192msgstr ""
1193
1194#: src/conversation/gnunet-conversation-test.c:218
1195#, c-format
1196msgid ""
1197"We will now be recording you for %s. After that time, the recording will be "
1198"played back to you..."
1199msgstr ""
1200
1201#: src/conversation/gnunet_gst.c:664
1202#: src/conversation/gnunet-helper-audio-playback-gst.c:363 1173#: src/conversation/gnunet-helper-audio-playback-gst.c:363
1174#: src/conversation/gnunet_gst.c:664
1203#, c-format 1175#, c-format
1204msgid "Read error from STDIN: %d %s\n" 1176msgid "Read error from STDIN: %d %s\n"
1205msgstr "" 1177msgstr ""
@@ -1633,40 +1605,40 @@ msgstr "# mapas de tipos recibidos"
1633msgid "# updates to my type map" 1605msgid "# updates to my type map"
1634msgstr "# actualizaciones de mi mapa de tipos" 1606msgstr "# actualizaciones de mi mapa de tipos"
1635 1607
1636#: src/datacache/datacache.c:115 src/datacache/datacache.c:287 1608#: src/datacache/datacache.c:115 src/datacache/datacache.c:299
1637#: src/datastore/gnunet-service-datastore.c:742 1609#: src/datastore/gnunet-service-datastore.c:742
1638msgid "# bytes stored" 1610msgid "# bytes stored"
1639msgstr "# bytes almacenados" 1611msgstr "# bytes almacenados"
1640 1612
1641#: src/datacache/datacache.c:119 src/datacache/datacache.c:291 1613#: src/datacache/datacache.c:119 src/datacache/datacache.c:303
1642msgid "# items stored" 1614msgid "# items stored"
1643msgstr "# elementos almacenados" 1615msgstr "# elementos almacenados"
1644 1616
1645#: src/datacache/datacache.c:189 1617#: src/datacache/datacache.c:190
1646#, c-format 1618#, c-format
1647msgid "Loading `%s' datacache plugin\n" 1619msgid "Loading `%s' datacache plugin\n"
1648msgstr "Cargando el módulo de la cache de datos «%s»\n" 1620msgstr "Cargando el módulo de la cache de datos «%s»\n"
1649 1621
1650#: src/datacache/datacache.c:197 1622#: src/datacache/datacache.c:208
1651#, c-format 1623#, c-format
1652msgid "Failed to load datacache plugin for `%s'\n" 1624msgid "Failed to load datacache plugin for `%s'\n"
1653msgstr "" 1625msgstr ""
1654"Se produjo un fallo al cargar el módulo de la cache de datos para «%s»\n" 1626"Se produjo un fallo al cargar el módulo de la cache de datos para «%s»\n"
1655 1627
1656#: src/datacache/datacache.c:320 1628#: src/datacache/datacache.c:332
1657msgid "# requests received" 1629msgid "# requests received"
1658msgstr "# peticiones recibidas" 1630msgstr "# peticiones recibidas"
1659 1631
1660#: src/datacache/datacache.c:331 1632#: src/datacache/datacache.c:343
1661msgid "# requests filtered by bloom filter" 1633msgid "# requests filtered by bloom filter"
1662msgstr "# peticiones filtradas por el «bloomfilter»" 1634msgstr "# peticiones filtradas por el «bloomfilter»"
1663 1635
1664#: src/datacache/datacache.c:358 1636#: src/datacache/datacache.c:370
1665#, fuzzy 1637#, fuzzy
1666msgid "# requests for random value received" 1638msgid "# requests for random value received"
1667msgstr "# peticiones recibidas" 1639msgstr "# peticiones recibidas"
1668 1640
1669#: src/datacache/datacache.c:388 1641#: src/datacache/datacache.c:400
1670#, fuzzy 1642#, fuzzy
1671msgid "# proximity search requests received" 1643msgid "# proximity search requests received"
1672msgstr "# búsquedas de clientes recibidas" 1644msgstr "# búsquedas de clientes recibidas"
@@ -2021,7 +1993,7 @@ msgstr "Base de datos Mysql ejecutándose\n"
2021 1993
2022#: src/datastore/plugin_datastore_postgres.c:284 1994#: src/datastore/plugin_datastore_postgres.c:284
2023#: src/datastore/plugin_datastore_postgres.c:897 1995#: src/datastore/plugin_datastore_postgres.c:897
2024msgid "Postgress exec failure" 1996msgid "Postgresql exec failure"
2025msgstr "" 1997msgstr ""
2026 1998
2027#: src/datastore/plugin_datastore_postgres.c:858 1999#: src/datastore/plugin_datastore_postgres.c:858
@@ -2059,7 +2031,18 @@ msgstr ""
2059"la versión de sqlite es muy antigua para determinar el tamaño, se asume " 2031"la versión de sqlite es muy antigua para determinar el tamaño, se asume "
2060"cero\n" 2032"cero\n"
2061 2033
2062#: src/datastore/plugin_datastore_sqlite.c:1274 2034#: src/datastore/plugin_datastore_sqlite.c:1266
2035#: src/datastore/plugin_datastore_sqlite.c:1279
2036#, fuzzy
2037msgid "error preparing statement\n"
2038msgstr "Error creando el túnel\n"
2039
2040#: src/datastore/plugin_datastore_sqlite.c:1287
2041#, fuzzy
2042msgid "error stepping\n"
2043msgstr "# elementos almacenados"
2044
2045#: src/datastore/plugin_datastore_sqlite.c:1295
2063#, c-format 2046#, c-format
2064msgid "" 2047msgid ""
2065"Using sqlite page utilization to estimate payload (%llu pages of size %llu " 2048"Using sqlite page utilization to estimate payload (%llu pages of size %llu "
@@ -2068,7 +2051,7 @@ msgstr ""
2068"Usando la utilización de páginas de sqlite para estimar el «payload» (%llu " 2051"Usando la utilización de páginas de sqlite para estimar el «payload» (%llu "
2069"páginas de %llu bytes de tamaño)\n" 2052"páginas de %llu bytes de tamaño)\n"
2070 2053
2071#: src/datastore/plugin_datastore_sqlite.c:1316 2054#: src/datastore/plugin_datastore_sqlite.c:1337
2072#: src/namecache/plugin_namecache_sqlite.c:564 2055#: src/namecache/plugin_namecache_sqlite.c:564
2073#: src/namestore/plugin_namestore_sqlite.c:765 2056#: src/namestore/plugin_namestore_sqlite.c:765
2074msgid "Sqlite database running\n" 2057msgid "Sqlite database running\n"
@@ -2146,55 +2129,6 @@ msgstr "ser prolijo (imprime información de progreso)"
2146msgid "Prints all packets that go through the DHT." 2129msgid "Prints all packets that go through the DHT."
2147msgstr "Imprime todos los paquetes que pasan por la DHT." 2130msgstr "Imprime todos los paquetes que pasan por la DHT."
2148 2131
2149#: src/dht/gnunet_dht_profiler.c:922 src/testbed/gnunet-testbed-profiler.c:255
2150#, fuzzy, c-format
2151msgid "Exiting as the number of peers is %u\n"
2152msgstr "El número máximo de conexiones es %u\n"
2153
2154#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3136
2155msgid "number of peers to start"
2156msgstr "número de pares para empezar"
2157
2158#: src/dht/gnunet_dht_profiler.c:961
2159msgid "number of PUTs to perform per peer"
2160msgstr ""
2161
2162#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872
2163#: src/testbed/gnunet-testbed-profiler.c:305
2164msgid "name of the file with the login information for the testbed"
2165msgstr ""
2166"nombre del fichero con la información de acceso usada para la batería de "
2167"pruebas"
2168
2169#: src/dht/gnunet_dht_profiler.c:973
2170msgid "delay between rounds for collecting statistics (default: 30 sec)"
2171msgstr ""
2172
2173#: src/dht/gnunet_dht_profiler.c:979
2174msgid "delay to start doing PUTs (default: 1 sec)"
2175msgstr ""
2176
2177#: src/dht/gnunet_dht_profiler.c:985
2178msgid "delay to start doing GETs (default: 5 min)"
2179msgstr ""
2180
2181#: src/dht/gnunet_dht_profiler.c:990
2182msgid "replication degree for DHT PUTs"
2183msgstr ""
2184
2185#: src/dht/gnunet_dht_profiler.c:996
2186msgid "chance that a peer is selected at random for PUTs"
2187msgstr ""
2188
2189#: src/dht/gnunet_dht_profiler.c:1002
2190msgid "timeout for DHT PUT and GET requests (default: 1 min)"
2191msgstr ""
2192
2193#: src/dht/gnunet_dht_profiler.c:1023
2194#, fuzzy
2195msgid "Measure quality and performance of the DHT service."
2196msgstr "Medir la calidad y rendimiento del servicio NSE."
2197
2198#: src/dht/gnunet-dht-put.c:133 2132#: src/dht/gnunet-dht-put.c:133
2199msgid "Must provide KEY and DATA for DHT put!\n" 2133msgid "Must provide KEY and DATA for DHT put!\n"
2200msgstr "¡Se deben proveer «KEY» y «DATA» para una subida a la DHT!\n" 2134msgstr "¡Se deben proveer «KEY» y «DATA» para una subida a la DHT!\n"
@@ -2328,91 +2262,91 @@ msgstr "# mensajes «FIND PEER» iniciados"
2328msgid "# requests TTL-dropped" 2262msgid "# requests TTL-dropped"
2329msgstr "# peticiones unidas" 2263msgstr "# peticiones unidas"
2330 2264
2331#: src/dht/gnunet-service-dht_neighbours.c:1052 2265#: src/dht/gnunet-service-dht_neighbours.c:1035
2332#: src/dht/gnunet-service-dht_neighbours.c:1096 2266#: src/dht/gnunet-service-dht_neighbours.c:1072
2333msgid "# Peers excluded from routing due to Bloomfilter" 2267msgid "# Peers excluded from routing due to Bloomfilter"
2334msgstr "# Pares excluidos del encaminado debido a «Bloomfilter»" 2268msgstr "# Pares excluidos del encaminado debido a «Bloomfilter»"
2335 2269
2336#: src/dht/gnunet-service-dht_neighbours.c:1069 2270#: src/dht/gnunet-service-dht_neighbours.c:1045
2337#: src/dht/gnunet-service-dht_neighbours.c:1112 2271#: src/dht/gnunet-service-dht_neighbours.c:1088
2338msgid "# Peer selection failed" 2272msgid "# Peer selection failed"
2339msgstr "# Selecciones de pares fallidas" 2273msgstr "# Selecciones de pares fallidas"
2340 2274
2341#: src/dht/gnunet-service-dht_neighbours.c:1270 2275#: src/dht/gnunet-service-dht_neighbours.c:1246
2342msgid "# PUT requests routed" 2276msgid "# PUT requests routed"
2343msgstr "# Peticiones «PUT» encaminadas" 2277msgstr "# Peticiones «PUT» encaminadas"
2344 2278
2345#: src/dht/gnunet-service-dht_neighbours.c:1304 2279#: src/dht/gnunet-service-dht_neighbours.c:1280
2346msgid "# PUT messages queued for transmission" 2280msgid "# PUT messages queued for transmission"
2347msgstr "# mensajes «PUT» encolados para transmisión" 2281msgstr "# mensajes «PUT» encolados para transmisión"
2348 2282
2349#: src/dht/gnunet-service-dht_neighbours.c:1316 2283#: src/dht/gnunet-service-dht_neighbours.c:1292
2350#: src/dht/gnunet-service-dht_neighbours.c:1458 2284#: src/dht/gnunet-service-dht_neighbours.c:1434
2351#: src/dht/gnunet-service-dht_neighbours.c:1562 2285#: src/dht/gnunet-service-dht_neighbours.c:1538
2352msgid "# P2P messages dropped due to full queue" 2286msgid "# P2P messages dropped due to full queue"
2353msgstr "# Mensajes P2P omitidos debido a saturación de la cola" 2287msgstr "# Mensajes P2P omitidos debido a saturación de la cola"
2354 2288
2355#: src/dht/gnunet-service-dht_neighbours.c:1401 2289#: src/dht/gnunet-service-dht_neighbours.c:1377
2356msgid "# GET requests routed" 2290msgid "# GET requests routed"
2357msgstr "# Peticiones «GET» encaminadas" 2291msgstr "# Peticiones «GET» encaminadas"
2358 2292
2359#: src/dht/gnunet-service-dht_neighbours.c:1445 2293#: src/dht/gnunet-service-dht_neighbours.c:1421
2360msgid "# GET messages queued for transmission" 2294msgid "# GET messages queued for transmission"
2361msgstr "# Mensajes «GET» encolados para transmisión" 2295msgstr "# Mensajes «GET» encolados para transmisión"
2362 2296
2363#: src/dht/gnunet-service-dht_neighbours.c:1577 2297#: src/dht/gnunet-service-dht_neighbours.c:1553
2364msgid "# RESULT messages queued for transmission" 2298msgid "# RESULT messages queued for transmission"
2365msgstr "# Mensajes «RESULT» encolados para transmisión" 2299msgstr "# Mensajes «RESULT» encolados para transmisión"
2366 2300
2367#: src/dht/gnunet-service-dht_neighbours.c:1680 2301#: src/dht/gnunet-service-dht_neighbours.c:1656
2368#, fuzzy 2302#, fuzzy
2369msgid "# Expired PUTs discarded" 2303msgid "# Expired PUTs discarded"
2370msgstr "# respuestas irrelevantes descartadas" 2304msgstr "# respuestas irrelevantes descartadas"
2371 2305
2372#: src/dht/gnunet-service-dht_neighbours.c:1688 2306#: src/dht/gnunet-service-dht_neighbours.c:1664
2373msgid "# P2P PUT requests received" 2307msgid "# P2P PUT requests received"
2374msgstr "# Peticiones «PUT» P2P recibidas" 2308msgstr "# Peticiones «PUT» P2P recibidas"
2375 2309
2376#: src/dht/gnunet-service-dht_neighbours.c:1692 2310#: src/dht/gnunet-service-dht_neighbours.c:1668
2377#, fuzzy 2311#, fuzzy
2378msgid "# P2P PUT bytes received" 2312msgid "# P2P PUT bytes received"
2379msgstr "# Peticiones «PUT» P2P recibidas" 2313msgstr "# Peticiones «PUT» P2P recibidas"
2380 2314
2381#: src/dht/gnunet-service-dht_neighbours.c:1924 2315#: src/dht/gnunet-service-dht_neighbours.c:1900
2382msgid "# FIND PEER requests ignored due to Bloomfilter" 2316msgid "# FIND PEER requests ignored due to Bloomfilter"
2383msgstr "# Peticiones «FIND PEER» ignoradas debido a «Bloomfilter»" 2317msgstr "# Peticiones «FIND PEER» ignoradas debido a «Bloomfilter»"
2384 2318
2385#: src/dht/gnunet-service-dht_neighbours.c:1933 2319#: src/dht/gnunet-service-dht_neighbours.c:1909
2386msgid "# FIND PEER requests ignored due to lack of HELLO" 2320msgid "# FIND PEER requests ignored due to lack of HELLO"
2387msgstr "# Peticiones «FIND PEER» ignoradas debido a falta de «HELLO»" 2321msgstr "# Peticiones «FIND PEER» ignoradas debido a falta de «HELLO»"
2388 2322
2389#: src/dht/gnunet-service-dht_neighbours.c:2096 2323#: src/dht/gnunet-service-dht_neighbours.c:2072
2390msgid "# P2P GET requests received" 2324msgid "# P2P GET requests received"
2391msgstr "# Peticiones «GET» P2P recibidas" 2325msgstr "# Peticiones «GET» P2P recibidas"
2392 2326
2393#: src/dht/gnunet-service-dht_neighbours.c:2100 2327#: src/dht/gnunet-service-dht_neighbours.c:2076
2394#, fuzzy 2328#, fuzzy
2395msgid "# P2P GET bytes received" 2329msgid "# P2P GET bytes received"
2396msgstr "# Peticiones «GET» P2P recibidas" 2330msgstr "# Peticiones «GET» P2P recibidas"
2397 2331
2398#: src/dht/gnunet-service-dht_neighbours.c:2166 2332#: src/dht/gnunet-service-dht_neighbours.c:2142
2399msgid "# P2P FIND PEER requests processed" 2333msgid "# P2P FIND PEER requests processed"
2400msgstr "# Peticiones «FIND PEER» P2P procesadas" 2334msgstr "# Peticiones «FIND PEER» P2P procesadas"
2401 2335
2402#: src/dht/gnunet-service-dht_neighbours.c:2187 2336#: src/dht/gnunet-service-dht_neighbours.c:2163
2403msgid "# P2P GET requests ONLY routed" 2337msgid "# P2P GET requests ONLY routed"
2404msgstr "# Peticiones «GET» P2P SOLAMENTE encaminadas" 2338msgstr "# Peticiones «GET» P2P SOLAMENTE encaminadas"
2405 2339
2406#: src/dht/gnunet-service-dht_neighbours.c:2365 2340#: src/dht/gnunet-service-dht_neighbours.c:2341
2407#, fuzzy 2341#, fuzzy
2408msgid "# Expired results discarded" 2342msgid "# Expired results discarded"
2409msgstr "# respuestas irrelevantes descartadas" 2343msgstr "# respuestas irrelevantes descartadas"
2410 2344
2411#: src/dht/gnunet-service-dht_neighbours.c:2382 2345#: src/dht/gnunet-service-dht_neighbours.c:2358
2412msgid "# P2P RESULTS received" 2346msgid "# P2P RESULTS received"
2413msgstr "# Resultados (RESULTS) P2P recibidos" 2347msgstr "# Resultados (RESULTS) P2P recibidos"
2414 2348
2415#: src/dht/gnunet-service-dht_neighbours.c:2386 2349#: src/dht/gnunet-service-dht_neighbours.c:2362
2416#, fuzzy 2350#, fuzzy
2417msgid "# P2P RESULT bytes received" 2351msgid "# P2P RESULT bytes received"
2418msgstr "# Resultados (RESULTS) P2P recibidos" 2352msgstr "# Resultados (RESULTS) P2P recibidos"
@@ -2459,6 +2393,55 @@ msgstr "# Entradas añadidas a la tabla de encaminamiento"
2459msgid "# DHT requests combined" 2393msgid "# DHT requests combined"
2460msgstr "# Peticiones a la DHT combinadas" 2394msgstr "# Peticiones a la DHT combinadas"
2461 2395
2396#: src/dht/gnunet_dht_profiler.c:922 src/testbed/gnunet-testbed-profiler.c:255
2397#, fuzzy, c-format
2398msgid "Exiting as the number of peers is %u\n"
2399msgstr "El número máximo de conexiones es %u\n"
2400
2401#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3136
2402msgid "number of peers to start"
2403msgstr "número de pares para empezar"
2404
2405#: src/dht/gnunet_dht_profiler.c:961
2406msgid "number of PUTs to perform per peer"
2407msgstr ""
2408
2409#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872
2410#: src/testbed/gnunet-testbed-profiler.c:305
2411msgid "name of the file with the login information for the testbed"
2412msgstr ""
2413"nombre del fichero con la información de acceso usada para la batería de "
2414"pruebas"
2415
2416#: src/dht/gnunet_dht_profiler.c:973
2417msgid "delay between rounds for collecting statistics (default: 30 sec)"
2418msgstr ""
2419
2420#: src/dht/gnunet_dht_profiler.c:979
2421msgid "delay to start doing PUTs (default: 1 sec)"
2422msgstr ""
2423
2424#: src/dht/gnunet_dht_profiler.c:985
2425msgid "delay to start doing GETs (default: 5 min)"
2426msgstr ""
2427
2428#: src/dht/gnunet_dht_profiler.c:990
2429msgid "replication degree for DHT PUTs"
2430msgstr ""
2431
2432#: src/dht/gnunet_dht_profiler.c:996
2433msgid "chance that a peer is selected at random for PUTs"
2434msgstr ""
2435
2436#: src/dht/gnunet_dht_profiler.c:1002
2437msgid "timeout for DHT PUT and GET requests (default: 1 min)"
2438msgstr ""
2439
2440#: src/dht/gnunet_dht_profiler.c:1023
2441#, fuzzy
2442msgid "Measure quality and performance of the DHT service."
2443msgstr "Medir la calidad y rendimiento del servicio NSE."
2444
2462#: src/dht/plugin_block_dht.c:189 2445#: src/dht/plugin_block_dht.c:189
2463#, c-format 2446#, c-format
2464msgid "Block not of type %u\n" 2447msgid "Block not of type %u\n"
@@ -2911,7 +2894,7 @@ msgstr ""
2911#: src/fs/fs_download.c:346 2894#: src/fs/fs_download.c:346
2912#, fuzzy, c-format 2895#, fuzzy, c-format
2913msgid "" 2896msgid ""
2914"Failed to access full directroy contents of `%s' for recursive download\n" 2897"Failed to access full directory contents of `%s' for recursive download\n"
2915msgstr "" 2898msgstr ""
2916"Se produjo un fallo al crear el directorio para la descarga recursiva de " 2899"Se produjo un fallo al crear el directorio para la descarga recursiva de "
2917"«%s»\n" 2900"«%s»\n"
@@ -3443,14 +3426,6 @@ msgstr ""
3443"Descargar ficheros de GNUnet usando una URI GNUnet CHK o LOC (gnunet://fs/" 3426"Descargar ficheros de GNUnet usando una URI GNUnet CHK o LOC (gnunet://fs/"
3444"chk/...)" 3427"chk/...)"
3445 3428
3446#: src/fs/gnunet-fs.c:128
3447msgid "print a list of all indexed files"
3448msgstr "imprimir una lista de todos los ficheros indexados"
3449
3450#: src/fs/gnunet-fs.c:141
3451msgid "Special file-sharing operations"
3452msgstr "Operaciones especiales de compartición de ficheros"
3453
3454#: src/fs/gnunet-fs-profiler.c:211 3429#: src/fs/gnunet-fs-profiler.c:211
3455msgid "run the experiment with COUNT peers" 3430msgid "run the experiment with COUNT peers"
3456msgstr "ejecuta el experimento con «COUNT» pares" 3431msgstr "ejecuta el experimento con «COUNT» pares"
@@ -3471,6 +3446,14 @@ msgstr ""
3471"ejecuta una batería de pruebas para medir el rendimiento de la compartición " 3446"ejecuta una batería de pruebas para medir el rendimiento de la compartición "
3472"de ficheros" 3447"de ficheros"
3473 3448
3449#: src/fs/gnunet-fs.c:128
3450msgid "print a list of all indexed files"
3451msgstr "imprimir una lista de todos los ficheros indexados"
3452
3453#: src/fs/gnunet-fs.c:141
3454msgid "Special file-sharing operations"
3455msgstr "Operaciones especiales de compartición de ficheros"
3456
3474#: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:234 3457#: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:234
3475#, c-format 3458#, c-format
3476msgid "Publishing `%s' at %llu/%llu (%s remaining)\n" 3459msgid "Publishing `%s' at %llu/%llu (%s remaining)\n"
@@ -4174,54 +4157,7 @@ msgstr "¿cuánto tiempo se debe ejecutar? 0 = para siempre"
4174msgid "look for GNS2DNS records instead of ANY" 4157msgid "look for GNS2DNS records instead of ANY"
4175msgstr "" 4158msgstr ""
4176 4159
4177#: src/gns/gnunet-gns.c:257 4160#: src/gns/gnunet-gns-import.c:490
4178#, fuzzy, c-format
4179msgid "`%s' is not a valid DNS domain name\n"
4180msgstr "«%s» no es una dirección IP válida.\n"
4181
4182#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254
4183#, c-format
4184msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n"
4185msgstr ""
4186"Se produjo un fallo al convertir el nombre en formato DNS IDNA «%s» a UTF-8: "
4187"%s\n"
4188
4189#: src/gns/gnunet-gns.c:281
4190msgid "Cannot resolve using GNS: GNUnet peer not running\n"
4191msgstr ""
4192
4193#: src/gns/gnunet-gns.c:305
4194#, c-format
4195msgid "Invalid typename specified, assuming `ANY'\n"
4196msgstr ""
4197
4198#: src/gns/gnunet-gns.c:340
4199msgid "Lookup a record for the given name"
4200msgstr "Buscar el registro para el nombre dado"
4201
4202#: src/gns/gnunet-gns.c:346
4203msgid "Specify the type of the record to lookup"
4204msgstr "Especificar el tipo del registro a buscar"
4205
4206#: src/gns/gnunet-gns.c:352
4207#, fuzzy
4208msgid "Specify a timeout for the lookup"
4209msgstr "Especificar el tipo del registro a buscar"
4210
4211#: src/gns/gnunet-gns.c:356
4212msgid "No unneeded output"
4213msgstr "Sin salida innecesaria"
4214
4215#: src/gns/gnunet-gns.c:361
4216msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8"
4217msgstr ""
4218
4219#: src/gns/gnunet-gns.c:375
4220#, fuzzy
4221msgid "GNUnet GNS resolver tool"
4222msgstr "Herramienta de acceso GNUnet GNS"
4223
4224#: src/gns/gnunet-gns-import.c:491
4225msgid "This program will import some GNS authorities into your GNS namestore." 4161msgid "This program will import some GNS authorities into your GNS namestore."
4226msgstr "" 4162msgstr ""
4227 4163
@@ -4341,6 +4277,53 @@ msgstr ""
4341msgid "GNUnet GNS proxy" 4277msgid "GNUnet GNS proxy"
4342msgstr "Proxy GNUnet GNS" 4278msgstr "Proxy GNUnet GNS"
4343 4279
4280#: src/gns/gnunet-gns.c:257
4281#, fuzzy, c-format
4282msgid "`%s' is not a valid DNS domain name\n"
4283msgstr "«%s» no es una dirección IP válida.\n"
4284
4285#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254
4286#, c-format
4287msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n"
4288msgstr ""
4289"Se produjo un fallo al convertir el nombre en formato DNS IDNA «%s» a UTF-8: "
4290"%s\n"
4291
4292#: src/gns/gnunet-gns.c:281
4293msgid "Cannot resolve using GNS: GNUnet peer not running\n"
4294msgstr ""
4295
4296#: src/gns/gnunet-gns.c:305
4297#, c-format
4298msgid "Invalid typename specified, assuming `ANY'\n"
4299msgstr ""
4300
4301#: src/gns/gnunet-gns.c:340
4302msgid "Lookup a record for the given name"
4303msgstr "Buscar el registro para el nombre dado"
4304
4305#: src/gns/gnunet-gns.c:346
4306msgid "Specify the type of the record to lookup"
4307msgstr "Especificar el tipo del registro a buscar"
4308
4309#: src/gns/gnunet-gns.c:352
4310#, fuzzy
4311msgid "Specify a timeout for the lookup"
4312msgstr "Especificar el tipo del registro a buscar"
4313
4314#: src/gns/gnunet-gns.c:356
4315msgid "No unneeded output"
4316msgstr "Sin salida innecesaria"
4317
4318#: src/gns/gnunet-gns.c:361
4319msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8"
4320msgstr ""
4321
4322#: src/gns/gnunet-gns.c:375
4323#, fuzzy
4324msgid "GNUnet GNS resolver tool"
4325msgstr "Herramienta de acceso GNUnet GNS"
4326
4344#: src/gns/gnunet-service-gns.c:505 4327#: src/gns/gnunet-service-gns.c:505
4345#, fuzzy 4328#, fuzzy
4346msgid "Properly base32-encoded public key required" 4329msgid "Properly base32-encoded public key required"
@@ -4352,8 +4335,8 @@ msgid "Failed to connect to the namecache!\n"
4352msgstr "¡Se produjo un fallo al conectar con el almacén de nombres!\n" 4335msgstr "¡Se produjo un fallo al conectar con el almacén de nombres!\n"
4353 4336
4354#: src/gns/gnunet-service-gns.c:560 4337#: src/gns/gnunet-service-gns.c:560
4355#: src/zonemaster/gnunet-service-zonemaster.c:885
4356#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442 4338#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442
4339#: src/zonemaster/gnunet-service-zonemaster.c:885
4357msgid "Could not connect to DHT!\n" 4340msgid "Could not connect to DHT!\n"
4358msgstr "¡No se pudo conectar a la DHT!\n" 4341msgstr "¡No se pudo conectar a la DHT!\n"
4359 4342
@@ -4944,35 +4927,35 @@ msgstr "Se produjo un fallo al crear la página para «%s»\n"
4944msgid "Failed to set default ego: %s\n" 4927msgid "Failed to set default ego: %s\n"
4945msgstr "Se produjo un fallo al crear la página para «%s»\n" 4928msgstr "Se produjo un fallo al crear la página para «%s»\n"
4946 4929
4947#: src/identity/gnunet-identity.c:462 4930#: src/identity/gnunet-identity.c:461
4948msgid "create ego NAME" 4931msgid "create ego NAME"
4949msgstr "" 4932msgstr ""
4950 4933
4951#: src/identity/gnunet-identity.c:467 4934#: src/identity/gnunet-identity.c:466
4952#, fuzzy 4935#, fuzzy
4953msgid "delete ego NAME " 4936msgid "delete ego NAME "
4954msgstr "borrar un nombre de espacio de nombres (NAME)" 4937msgstr "borrar un nombre de espacio de nombres (NAME)"
4955 4938
4956#: src/identity/gnunet-identity.c:473 4939#: src/identity/gnunet-identity.c:472
4957msgid "" 4940msgid ""
4958"set the private key for the identity to PRIVATE_KEY (use together with -C)" 4941"set the private key for the identity to PRIVATE_KEY (use together with -C)"
4959msgstr "" 4942msgstr ""
4960 4943
4961#: src/identity/gnunet-identity.c:478 4944#: src/identity/gnunet-identity.c:477
4962msgid "generate an EdDSA identity. (use together with -C) EXPERIMENTAL" 4945msgid "generate an EdDSA identity. (use together with -C) EXPERIMENTAL"
4963msgstr "" 4946msgstr ""
4964 4947
4965#: src/identity/gnunet-identity.c:482 4948#: src/identity/gnunet-identity.c:481
4966#, fuzzy 4949#, fuzzy
4967msgid "display all egos" 4950msgid "display all egos"
4968msgstr "mostrar registros" 4951msgstr "mostrar registros"
4969 4952
4970#: src/identity/gnunet-identity.c:486 4953#: src/identity/gnunet-identity.c:485
4971#, fuzzy 4954#, fuzzy
4972msgid "reduce output" 4955msgid "reduce output"
4973msgstr "Sin salida innecesaria" 4956msgstr "Sin salida innecesaria"
4974 4957
4975#: src/identity/gnunet-identity.c:493 4958#: src/identity/gnunet-identity.c:492
4976msgid "" 4959msgid ""
4977"set default identity to NAME for a subsystem SUBSYSTEM (use together with -" 4960"set default identity to NAME for a subsystem SUBSYSTEM (use together with -"
4978"s) or restrict results to NAME (use together with -d)" 4961"s) or restrict results to NAME (use together with -d)"
@@ -4980,21 +4963,21 @@ msgstr ""
4980 4963
4981# Miguel: Aquí he dejado monitorización porque esto es 4964# Miguel: Aquí he dejado monitorización porque esto es
4982# del servicio de traducción de direcciones. 4965# del servicio de traducción de direcciones.
4983#: src/identity/gnunet-identity.c:497 4966#: src/identity/gnunet-identity.c:496
4984#, fuzzy 4967#, fuzzy
4985msgid "run in monitor mode egos" 4968msgid "run in monitor mode egos"
4986msgstr "modo de monitorización" 4969msgstr "modo de monitorización"
4987 4970
4988#: src/identity/gnunet-identity.c:501 4971#: src/identity/gnunet-identity.c:500
4989msgid "display private keys as well" 4972msgid "display private keys as well"
4990msgstr "" 4973msgstr ""
4991 4974
4992#: src/identity/gnunet-identity.c:508 4975#: src/identity/gnunet-identity.c:507
4993msgid "" 4976msgid ""
4994"set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)" 4977"set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)"
4995msgstr "" 4978msgstr ""
4996 4979
4997#: src/identity/gnunet-identity.c:523 4980#: src/identity/gnunet-identity.c:522
4998msgid "Maintain egos" 4981msgid "Maintain egos"
4999msgstr "" 4982msgstr ""
5000 4983
@@ -5047,12 +5030,12 @@ msgstr "Se produjo un fallo al borrar el fichero de configuración %s\n"
5047msgid "Failed to create directory `%s' for storing egos\n" 5030msgid "Failed to create directory `%s' for storing egos\n"
5048msgstr "Se produjo un fallo al leer el directorio «%s»\n" 5031msgstr "Se produjo un fallo al leer el directorio «%s»\n"
5049 5032
5050#: src/identity/plugin_rest_identity.c:1385 5033#: src/identity/plugin_rest_identity.c:1401
5051#, fuzzy 5034#, fuzzy
5052msgid "Identity REST API initialized\n" 5035msgid "Identity REST API initialized\n"
5053msgstr "Conexión fallida\n" 5036msgstr "Conexión fallida\n"
5054 5037
5055#: src/json/json.c:139 5038#: src/json/json.c:120
5056#, fuzzy, c-format 5039#, fuzzy, c-format
5057msgid "Failed to parse JSON in option `%s': %s (%s)\n" 5040msgid "Failed to parse JSON in option `%s': %s (%s)\n"
5058msgstr "Se produjo un fallo al procesar «HELLO» en el fichero «%s»\n" 5041msgstr "Se produjo un fallo al procesar «HELLO» en el fichero «%s»\n"
@@ -5110,13 +5093,13 @@ msgstr "Especificar el tipo del registro a buscar"
5110msgid "GNUnet zone manipulation tool" 5093msgid "GNUnet zone manipulation tool"
5111msgstr "Herramienta de manipulación de zona de GNUnet" 5094msgstr "Herramienta de manipulación de zona de GNUnet"
5112 5095
5113#: src/namecache/namecache_api.c:285 5096#: src/namecache/namecache_api.c:286
5114#, fuzzy 5097#, fuzzy
5115msgid "Namecache failed to cache block" 5098msgid "Namecache failed to cache block"
5116msgstr "El almacén de nombres no pudo añadir el registro" 5099msgstr "El almacén de nombres no pudo añadir el registro"
5117 5100
5118# Miguel: ¿Conectar y conexión? 5101# Miguel: ¿Conectar y conexión?
5119#: src/namecache/namecache_api.c:373 5102#: src/namecache/namecache_api.c:374
5120#, fuzzy 5103#, fuzzy
5121msgid "Error communicating with namecache service" 5104msgid "Error communicating with namecache service"
5122msgstr "Error al comunicar con el servicio ARM.\n" 5105msgstr "Error al comunicar con el servicio ARM.\n"
@@ -5157,6 +5140,116 @@ msgstr "Base de datos sqlite ejecutándose\n"
5157msgid "Failed to setup database at `%s'\n" 5140msgid "Failed to setup database at `%s'\n"
5158msgstr "Se produjo un fallo al inciar «%s» en «%s»\n" 5141msgstr "Se produjo un fallo al inciar «%s» en «%s»\n"
5159 5142
5143#: src/namestore/gnunet-namestore-fcfsd.c:359
5144#, fuzzy
5145msgid "can not search the namestore"
5146msgstr "No se puede iniciar el controlador maestro"
5147
5148#: src/namestore/gnunet-namestore-fcfsd.c:413
5149#: src/namestore/gnunet-namestore-fcfsd.c:554
5150#, fuzzy
5151msgid "unable to scan namestore"
5152msgstr "Se produjo un fallo al conectar con el almacén de nombres\n"
5153
5154#: src/namestore/gnunet-namestore-fcfsd.c:441
5155#, fuzzy, c-format
5156msgid "Failed to create record for `%s': %s\n"
5157msgstr "Se produjo un fallo al crear un registro para el dominio «%s»: %s\n"
5158
5159#: src/namestore/gnunet-namestore-fcfsd.c:453
5160#, fuzzy
5161msgid "no errors"
5162msgstr "error desconocido"
5163
5164#: src/namestore/gnunet-namestore-fcfsd.c:489
5165#, fuzzy, c-format
5166msgid "The requested key `%s' exists as `%s'\n"
5167msgstr "Creada la entrada '%s' en el espacio '%s'\n"
5168
5169#: src/namestore/gnunet-namestore-fcfsd.c:496
5170msgid "key exists"
5171msgstr ""
5172
5173#: src/namestore/gnunet-namestore-fcfsd.c:513
5174#, fuzzy
5175msgid "Error creating record data\n"
5176msgstr "Error interno escaneando directorio.\n"
5177
5178#: src/namestore/gnunet-namestore-fcfsd.c:517
5179#, fuzzy
5180msgid "unable to store record"
5181msgstr "El almacén de nombres no pudo añadir el registro\n"
5182
5183#: src/namestore/gnunet-namestore-fcfsd.c:588
5184#, c-format
5185msgid "Requested name `%s' exists with `%u' records\n"
5186msgstr ""
5187
5188#: src/namestore/gnunet-namestore-fcfsd.c:594
5189msgid "name exists\n"
5190msgstr ""
5191
5192#: src/namestore/gnunet-namestore-fcfsd.c:780
5193msgid "unable to process submitted data"
5194msgstr ""
5195
5196#: src/namestore/gnunet-namestore-fcfsd.c:787
5197msgid "the submitted data is invalid"
5198msgstr ""
5199
5200#: src/namestore/gnunet-namestore-fcfsd.c:806
5201#, fuzzy
5202msgid "invalid parameters"
5203msgstr "Parámetro no válido «%s»\n"
5204
5205#: src/namestore/gnunet-namestore-fcfsd.c:823
5206#, fuzzy
5207msgid "invalid name"
5208msgstr "Parámetro no válido «%s»\n"
5209
5210#: src/namestore/gnunet-namestore-fcfsd.c:834
5211#, fuzzy, c-format
5212msgid "Unable to parse key %s\n"
5213msgstr "No se pudo procesar el registro MX «%s»\n"
5214
5215#: src/namestore/gnunet-namestore-fcfsd.c:838
5216#, fuzzy
5217msgid "unable to parse key"
5218msgstr "No se pudo procesar el registro MX «%s»\n"
5219
5220#: src/namestore/gnunet-namestore-fcfsd.c:949
5221msgid "No ego configured for `fcfsd` subsystem\n"
5222msgstr ""
5223
5224#: src/namestore/gnunet-namestore-fcfsd.c:974
5225msgid "Failed to start HTTP server\n"
5226msgstr "Se produjo un fallo al iniciar el servidor HTTP\n"
5227
5228#: src/namestore/gnunet-namestore-fcfsd.c:1058
5229#, fuzzy
5230msgid "No port specified, using default value\n"
5231msgstr ""
5232"La configuración no especifica «%s», asumiendo el valor predeterminado."
5233
5234#: src/namestore/gnunet-namestore-fcfsd.c:1076
5235#, fuzzy
5236msgid "Failed to connect to identity\n"
5237msgstr "Se produjo un fallo al conectar con GNS\n"
5238
5239#: src/namestore/gnunet-namestore-fcfsd.c:1100
5240#, fuzzy
5241msgid "Unable to set up the daemon\n"
5242msgstr "Imposible crear la cuenta de usuario:"
5243
5244#: src/namestore/gnunet-namestore-fcfsd.c:1123
5245msgid "name of the zone managed by FCFSD"
5246msgstr ""
5247
5248#: src/namestore/gnunet-namestore-fcfsd.c:1132
5249#, fuzzy
5250msgid "GNU Name System First-Come-First-Served name registration service"
5251msgstr "Servicio de registro GNUnet GNS primero en llegar, primero en servirse"
5252
5160#: src/namestore/gnunet-namestore.c:334 5253#: src/namestore/gnunet-namestore.c:334
5161#, c-format 5254#, c-format
5162msgid "Adding record failed: %s\n" 5255msgid "Adding record failed: %s\n"
@@ -5400,86 +5493,16 @@ msgstr ""
5400msgid "name of the ego controlling the zone" 5493msgid "name of the ego controlling the zone"
5401msgstr "nombre de la sección a la que acceder" 5494msgstr "nombre de la sección a la que acceder"
5402 5495
5403# form??
5404#: src/namestore/gnunet-namestore-fcfsd.c:552
5405#, c-format
5406msgid "Unsupported form value `%s'\n"
5407msgstr "Forma de valor no soportada «%s»\n"
5408
5409#: src/namestore/gnunet-namestore-fcfsd.c:579
5410#, c-format
5411msgid "Failed to create record for domain `%s': %s\n"
5412msgstr "Se produjo un fallo al crear un registro para el dominio «%s»: %s\n"
5413
5414#: src/namestore/gnunet-namestore-fcfsd.c:600
5415msgid "Error when mapping zone to name\n"
5416msgstr ""
5417
5418#: src/namestore/gnunet-namestore-fcfsd.c:633
5419#, c-format
5420msgid "Found existing name `%s' for the given key\n"
5421msgstr "Encontrado nombre «%s» para la clave dada\n"
5422
5423#: src/namestore/gnunet-namestore-fcfsd.c:646
5424#, fuzzy
5425msgid "Error creating record data.\n"
5426msgstr "Error interno escaneando directorio.\n"
5427
5428#: src/namestore/gnunet-namestore-fcfsd.c:707
5429#, c-format
5430msgid "Found %u existing records for domain `%s'\n"
5431msgstr "Encontrados %u registros para el dominio «%s»\n"
5432
5433#: src/namestore/gnunet-namestore-fcfsd.c:796
5434#, c-format
5435msgid "Failed to create page for `%s'\n"
5436msgstr "Se produjo un fallo al crear la página para «%s»\n"
5437
5438#: src/namestore/gnunet-namestore-fcfsd.c:815
5439#, c-format
5440msgid "Failed to setup post processor for `%s'\n"
5441msgstr "Se produjo un fallo al configurar el post-procesador para «%s»\n"
5442
5443#: src/namestore/gnunet-namestore-fcfsd.c:850
5444msgid "Domain name must not contain `.'\n"
5445msgstr "El nombre de dominio no puede contener «.»\n"
5446
5447#: src/namestore/gnunet-namestore-fcfsd.c:859
5448msgid "Domain name must not contain `+'\n"
5449msgstr "El nombre de dominio no puede contener «+»\n"
5450
5451#: src/namestore/gnunet-namestore-fcfsd.c:1094
5452msgid "No ego configured for `fcfsd` subsystem\n"
5453msgstr ""
5454
5455#: src/namestore/gnunet-namestore-fcfsd.c:1125
5456msgid "Failed to start HTTP server\n"
5457msgstr "Se produjo un fallo al iniciar el servidor HTTP\n"
5458
5459#: src/namestore/gnunet-namestore-fcfsd.c:1173
5460#, fuzzy
5461msgid "Failed to connect to identity\n"
5462msgstr "Se produjo un fallo al conectar con GNS\n"
5463
5464#: src/namestore/gnunet-namestore-fcfsd.c:1200
5465msgid "name of the zone that is to be managed by FCFSD"
5466msgstr ""
5467
5468#: src/namestore/gnunet-namestore-fcfsd.c:1220
5469#, fuzzy
5470msgid "GNU Name System First Come First Serve name registration service"
5471msgstr "Servicio de registro GNUnet GNS primero en llegar, primero en servirse"
5472
5473#: src/namestore/gnunet-service-namestore.c:871 5496#: src/namestore/gnunet-service-namestore.c:871
5474#, fuzzy, c-format 5497#, fuzzy, c-format
5475msgid "Failed to replicate block in namecache: %s\n" 5498msgid "Failed to replicate block in namecache: %s\n"
5476msgstr "Se produjo un fallo al crear el espacio de nombres «%s»\n" 5499msgstr "Se produjo un fallo al crear el espacio de nombres «%s»\n"
5477 5500
5478#: src/namestore/gnunet-zoneimport.c:1848 5501#: src/namestore/gnunet-zoneimport.c:1847
5479msgid "size to use for the main hash map" 5502msgid "size to use for the main hash map"
5480msgstr "" 5503msgstr ""
5481 5504
5482#: src/namestore/gnunet-zoneimport.c:1854 5505#: src/namestore/gnunet-zoneimport.c:1853
5483msgid "minimum expiration time we assume for imported records" 5506msgid "minimum expiration time we assume for imported records"
5484msgstr "" 5507msgstr ""
5485 5508
@@ -5503,7 +5526,7 @@ msgstr ""
5503msgid "Flat file database running\n" 5526msgid "Flat file database running\n"
5504msgstr "Base de datos de plantilla ejecutándose\n" 5527msgstr "Base de datos de plantilla ejecutándose\n"
5505 5528
5506#: src/namestore/plugin_rest_namestore.c:1105 5529#: src/namestore/plugin_rest_namestore.c:1111
5507#, fuzzy 5530#, fuzzy
5508msgid "Namestore REST API initialized\n" 5531msgid "Namestore REST API initialized\n"
5509msgstr "Conexión fallida\n" 5532msgstr "Conexión fallida\n"
@@ -5803,11 +5826,6 @@ msgstr "comando «external-ip» no encontrado\n"
5803msgid "`upnpc' command not found\n" 5826msgid "`upnpc' command not found\n"
5804msgstr "comando «upnpc» no encontrado\n" 5827msgstr "comando «upnpc» no encontrado\n"
5805 5828
5806#: src/nse/gnunet-nse.c:124
5807#, fuzzy
5808msgid "Show network size estimates from NSE service."
5809msgstr "# Estimaciones del tamaño de red recibidas"
5810
5811#: src/nse/gnunet-nse-profiler.c:857 5829#: src/nse/gnunet-nse-profiler.c:857
5812msgid "limit to the number of connections to NSE services, 0 for none" 5830msgid "limit to the number of connections to NSE services, 0 for none"
5813msgstr "límite al número de conexiones a servicios NSE, 0 para ilimitadas" 5831msgstr "límite al número de conexiones a servicios NSE, 0 para ilimitadas"
@@ -5833,70 +5851,16 @@ msgstr "retraso entre rondas"
5833msgid "Measure quality and performance of the NSE service." 5851msgid "Measure quality and performance of the NSE service."
5834msgstr "Medir la calidad y rendimiento del servicio NSE." 5852msgstr "Medir la calidad y rendimiento del servicio NSE."
5835 5853
5854#: src/nse/gnunet-nse.c:124
5855#, fuzzy
5856msgid "Show network size estimates from NSE service."
5857msgstr "# Estimaciones del tamaño de red recibidas"
5858
5836#: src/nse/gnunet-service-nse.c:1450 5859#: src/nse/gnunet-service-nse.c:1450
5837#: src/revocation/gnunet-service-revocation.c:883 src/util/gnunet-scrypt.c:260 5860#: src/revocation/gnunet-service-revocation.c:883 src/util/gnunet-scrypt.c:260
5838msgid "Value is too large.\n" 5861msgid "Value is too large.\n"
5839msgstr "" 5862msgstr ""
5840 5863
5841#: src/peerinfo/gnunet-service-peerinfo.c:175
5842#, c-format
5843msgid "Removing expired address of transport `%s'\n"
5844msgstr "Eliminando dirección de transporte «%s»\n"
5845
5846#: src/peerinfo/gnunet-service-peerinfo.c:306
5847#, fuzzy, c-format
5848msgid "Failed to parse HELLO in file `%s': %s\n"
5849msgstr "Se produjo un fallo al procesar «HELLO» en el fichero «%s»\n"
5850
5851#: src/peerinfo/gnunet-service-peerinfo.c:323
5852#: src/peerinfo/gnunet-service-peerinfo.c:348
5853#, fuzzy, c-format
5854msgid "Failed to parse HELLO in file `%s'\n"
5855msgstr "Se produjo un fallo al procesar «HELLO» en el fichero «%s»\n"
5856
5857#: src/peerinfo/gnunet-service-peerinfo.c:426
5858msgid "# peers known"
5859msgstr "# pares conocidos"
5860
5861#: src/peerinfo/gnunet-service-peerinfo.c:468
5862#, c-format
5863msgid ""
5864"File `%s' in directory `%s' does not match naming convention. Removed.\n"
5865msgstr ""
5866"El fichero «%s» en el directorio «%s» no sigue la convención de nombres. "
5867"Eliminado.\n"
5868
5869#: src/peerinfo/gnunet-service-peerinfo.c:624
5870#, fuzzy, c-format
5871msgid "Scanning directory `%s'\n"
5872msgstr "Escaneando directorio «%s».\n"
5873
5874#: src/peerinfo/gnunet-service-peerinfo.c:631
5875#, c-format
5876msgid "Still no peers found in `%s'!\n"
5877msgstr "¡Aún no se han encontrado pares en «%s»!\n"
5878
5879#: src/peerinfo/gnunet-service-peerinfo.c:1027
5880#, fuzzy, c-format
5881msgid "Cleaning up directory `%s'\n"
5882msgstr "Escaneando directorio «%s».\n"
5883
5884#: src/peerinfo/gnunet-service-peerinfo.c:1322
5885#, c-format
5886msgid "Importing HELLOs from `%s'\n"
5887msgstr "Importando HELLO de «%s»\n"
5888
5889#: src/peerinfo/gnunet-service-peerinfo.c:1335
5890msgid "Skipping import of included HELLOs\n"
5891msgstr ""
5892
5893# Miguel: "Failed to receive" también aquí está traducido como
5894# "no se obtuvo respuesta" por claridad.
5895#: src/peerinfo/peerinfo_api.c:217
5896msgid "Failed to receive response from `PEERINFO' service."
5897msgstr ""
5898"No se obtuvo respuesta del servicio de información de pares (PEERINFO)."
5899
5900#: src/peerinfo-tool/gnunet-peerinfo.c:237 5864#: src/peerinfo-tool/gnunet-peerinfo.c:237
5901#, fuzzy, c-format 5865#, fuzzy, c-format
5902msgid "%sPeer `%s'\n" 5866msgid "%sPeer `%s'\n"
@@ -5992,6 +5956,65 @@ msgstr "Se produjo un fallo al cargar el módulo del transporte para «%s»\n"
5992msgid "Peerinfo REST API initialized\n" 5956msgid "Peerinfo REST API initialized\n"
5993msgstr "Conexión fallida\n" 5957msgstr "Conexión fallida\n"
5994 5958
5959#: src/peerinfo/gnunet-service-peerinfo.c:175
5960#, c-format
5961msgid "Removing expired address of transport `%s'\n"
5962msgstr "Eliminando dirección de transporte «%s»\n"
5963
5964#: src/peerinfo/gnunet-service-peerinfo.c:306
5965#, fuzzy, c-format
5966msgid "Failed to parse HELLO in file `%s': %s\n"
5967msgstr "Se produjo un fallo al procesar «HELLO» en el fichero «%s»\n"
5968
5969#: src/peerinfo/gnunet-service-peerinfo.c:323
5970#: src/peerinfo/gnunet-service-peerinfo.c:348
5971#, fuzzy, c-format
5972msgid "Failed to parse HELLO in file `%s'\n"
5973msgstr "Se produjo un fallo al procesar «HELLO» en el fichero «%s»\n"
5974
5975#: src/peerinfo/gnunet-service-peerinfo.c:426
5976msgid "# peers known"
5977msgstr "# pares conocidos"
5978
5979#: src/peerinfo/gnunet-service-peerinfo.c:468
5980#, c-format
5981msgid ""
5982"File `%s' in directory `%s' does not match naming convention. Removed.\n"
5983msgstr ""
5984"El fichero «%s» en el directorio «%s» no sigue la convención de nombres. "
5985"Eliminado.\n"
5986
5987#: src/peerinfo/gnunet-service-peerinfo.c:624
5988#, fuzzy, c-format
5989msgid "Scanning directory `%s'\n"
5990msgstr "Escaneando directorio «%s».\n"
5991
5992#: src/peerinfo/gnunet-service-peerinfo.c:631
5993#, c-format
5994msgid "Still no peers found in `%s'!\n"
5995msgstr "¡Aún no se han encontrado pares en «%s»!\n"
5996
5997#: src/peerinfo/gnunet-service-peerinfo.c:1027
5998#, fuzzy, c-format
5999msgid "Cleaning up directory `%s'\n"
6000msgstr "Escaneando directorio «%s».\n"
6001
6002#: src/peerinfo/gnunet-service-peerinfo.c:1322
6003#, c-format
6004msgid "Importing HELLOs from `%s'\n"
6005msgstr "Importando HELLO de «%s»\n"
6006
6007#: src/peerinfo/gnunet-service-peerinfo.c:1335
6008msgid "Skipping import of included HELLOs\n"
6009msgstr ""
6010
6011# Miguel: "Failed to receive" también aquí está traducido como
6012# "no se obtuvo respuesta" por claridad.
6013#: src/peerinfo/peerinfo_api.c:217
6014msgid "Failed to receive response from `PEERINFO' service."
6015msgstr ""
6016"No se obtuvo respuesta del servicio de información de pares (PEERINFO)."
6017
5995#: src/peerstore/gnunet-peerstore.c:92 6018#: src/peerstore/gnunet-peerstore.c:92
5996msgid "peerstore" 6019msgid "peerstore"
5997msgstr "" 6020msgstr ""
@@ -6180,12 +6203,12 @@ msgstr ""
6180msgid "re:claimID command line tool" 6203msgid "re:claimID command line tool"
6181msgstr "" 6204msgstr ""
6182 6205
6183#: src/reclaim/plugin_rest_openid_connect.c:2788 6206#: src/reclaim/plugin_rest_openid_connect.c:2793
6184#, fuzzy 6207#, fuzzy
6185msgid "OpenID Connect REST API initialized\n" 6208msgid "OpenID Connect REST API initialized\n"
6186msgstr "Conexión fallida\n" 6209msgstr "Conexión fallida\n"
6187 6210
6188#: src/reclaim/plugin_rest_reclaim.c:1521 6211#: src/reclaim/plugin_rest_pabc.c:637 src/reclaim/plugin_rest_reclaim.c:1520
6189#, fuzzy 6212#, fuzzy
6190msgid "Identity Provider REST API initialized\n" 6213msgid "Identity Provider REST API initialized\n"
6191msgstr "Conexión fallida\n" 6214msgstr "Conexión fallida\n"
@@ -6207,11 +6230,11 @@ msgstr ""
6207msgid "Daemon to announce regular expressions for the peer using cadet." 6230msgid "Daemon to announce regular expressions for the peer using cadet."
6208msgstr "Demonio para anunciar expresiones regulares para el par usando mesh." 6231msgstr "Demonio para anunciar expresiones regulares para el par usando mesh."
6209 6232
6210#: src/regex/gnunet-regex-profiler.c:1390 6233#: src/regex/gnunet-regex-profiler.c:1392
6211msgid "No configuration file given. Exiting\n" 6234msgid "No configuration file given. Exiting\n"
6212msgstr "No se ha introducido ningún fichero de configuración. Saliendo\n" 6235msgstr "No se ha introducido ningún fichero de configuración. Saliendo\n"
6213 6236
6214#: src/regex/gnunet-regex-profiler.c:1432 6237#: src/regex/gnunet-regex-profiler.c:1434
6215#: src/regex/gnunet-regex-simulation-profiler.c:631 6238#: src/regex/gnunet-regex-simulation-profiler.c:631
6216#, c-format 6239#, c-format
6217msgid "No policy directory specified on command line. Exiting.\n" 6240msgid "No policy directory specified on command line. Exiting.\n"
@@ -6219,51 +6242,51 @@ msgstr ""
6219"No se ha especificado una política de directorios en la línea de comandos. " 6242"No se ha especificado una política de directorios en la línea de comandos. "
6220"Saliendo.\n" 6243"Saliendo.\n"
6221 6244
6222#: src/regex/gnunet-regex-profiler.c:1438 6245#: src/regex/gnunet-regex-profiler.c:1440
6223#: src/regex/gnunet-regex-simulation-profiler.c:639 6246#: src/regex/gnunet-regex-simulation-profiler.c:639
6224#, c-format 6247#, c-format
6225msgid "Specified policies directory does not exist. Exiting.\n" 6248msgid "Specified policies directory does not exist. Exiting.\n"
6226msgstr "Las políticas de directorio especificadas no existen. Saliendo.\n" 6249msgstr "Las políticas de directorio especificadas no existen. Saliendo.\n"
6227 6250
6228#: src/regex/gnunet-regex-profiler.c:1446 6251#: src/regex/gnunet-regex-profiler.c:1448
6229#, c-format 6252#, c-format
6230msgid "No files found in `%s'\n" 6253msgid "No files found in `%s'\n"
6231msgstr "No se han encontrado ficheros en «%s»\n" 6254msgstr "No se han encontrado ficheros en «%s»\n"
6232 6255
6233#: src/regex/gnunet-regex-profiler.c:1455 6256#: src/regex/gnunet-regex-profiler.c:1457
6234msgid "No search strings file given. Exiting.\n" 6257msgid "No search strings file given. Exiting.\n"
6235msgstr "No se ha proporcionado un fichero de cadenas de búsqueda. Saliendo.\n" 6258msgstr "No se ha proporcionado un fichero de cadenas de búsqueda. Saliendo.\n"
6236 6259
6237#: src/regex/gnunet-regex-profiler.c:1475 6260#: src/regex/gnunet-regex-profiler.c:1477
6238msgid "Error loading search strings. Exiting.\n" 6261msgid "Error loading search strings. Exiting.\n"
6239msgstr "Error cargando cadenas de búsqueda. Saliendo.\n" 6262msgstr "Error cargando cadenas de búsqueda. Saliendo.\n"
6240 6263
6241#: src/regex/gnunet-regex-profiler.c:1563 6264#: src/regex/gnunet-regex-profiler.c:1565
6242msgid "name of the file for writing statistics" 6265msgid "name of the file for writing statistics"
6243msgstr "nombre del fichero para escribir las estadísticas" 6266msgstr "nombre del fichero para escribir las estadísticas"
6244 6267
6245#: src/regex/gnunet-regex-profiler.c:1570 6268#: src/regex/gnunet-regex-profiler.c:1572
6246#, fuzzy 6269#, fuzzy
6247msgid "wait TIMEOUT before ending the experiment" 6270msgid "wait TIMEOUT before ending the experiment"
6248msgstr "" 6271msgstr ""
6249"esperar «TIMEOUT» antes de considerar que una coincidencia de cadenas como " 6272"esperar «TIMEOUT» antes de considerar que una coincidencia de cadenas como "
6250"fallida" 6273"fallida"
6251 6274
6252#: src/regex/gnunet-regex-profiler.c:1576 6275#: src/regex/gnunet-regex-profiler.c:1578
6253msgid "directory with policy files" 6276msgid "directory with policy files"
6254msgstr "" 6277msgstr ""
6255 6278
6256#: src/regex/gnunet-regex-profiler.c:1584 6279#: src/regex/gnunet-regex-profiler.c:1586
6257#, fuzzy 6280#, fuzzy
6258msgid "name of file with input strings" 6281msgid "name of file with input strings"
6259msgstr "nombre del fichero para escribir las estadísticas" 6282msgstr "nombre del fichero para escribir las estadísticas"
6260 6283
6261#: src/regex/gnunet-regex-profiler.c:1591 6284#: src/regex/gnunet-regex-profiler.c:1593
6262#, fuzzy 6285#, fuzzy
6263msgid "name of file with hosts' names" 6286msgid "name of file with hosts' names"
6264msgstr "nombre del fichero para escribir las estadísticas" 6287msgstr "nombre del fichero para escribir las estadísticas"
6265 6288
6266#: src/regex/gnunet-regex-profiler.c:1604 6289#: src/regex/gnunet-regex-profiler.c:1606
6267msgid "Profiler for regex" 6290msgid "Profiler for regex"
6268msgstr "Perfilador para expresiones regulares." 6291msgstr "Perfilador para expresiones regulares."
6269 6292
@@ -6290,12 +6313,12 @@ msgstr "El servicio «%s» no está ejecutandose\n"
6290msgid "Search string `%s' is too long!\n" 6313msgid "Search string `%s' is too long!\n"
6291msgstr "El servicio «%s» no está ejecutandose\n" 6314msgstr "El servicio «%s» no está ejecutandose\n"
6292 6315
6293#: src/rest/gnunet-rest-server.c:1266 6316#: src/rest/gnunet-rest-server.c:1267
6294#, fuzzy 6317#, fuzzy
6295msgid "GNUnet REST server" 6318msgid "GNUnet REST server"
6296msgstr "Herramienta de acceso GNUnet GNS" 6319msgstr "Herramienta de acceso GNUnet GNS"
6297 6320
6298#: src/rest/plugin_rest_config.c:427 6321#: src/rest/plugin_rest_config.c:429
6299#, fuzzy 6322#, fuzzy
6300msgid "CONFIG REST API initialized\n" 6323msgid "CONFIG REST API initialized\n"
6301msgstr "Conexión fallida\n" 6324msgstr "Conexión fallida\n"
@@ -6364,72 +6387,77 @@ msgstr ""
6364msgid "Ego `%s' not found.\n" 6387msgid "Ego `%s' not found.\n"
6365msgstr "Módulo «%s» no encontrado\n" 6388msgstr "Módulo «%s» no encontrado\n"
6366 6389
6367#: src/revocation/gnunet-revocation.c:351 6390#: src/revocation/gnunet-revocation.c:350
6391#, fuzzy, c-format
6392msgid "Error: Key is invalid\n"
6393msgstr "Formato del pseudónimo '%s' no es válido.\n"
6394
6395#: src/revocation/gnunet-revocation.c:357
6368#, c-format 6396#, c-format
6369msgid "Error: revocation certificate in `%s' is not for `%s'\n" 6397msgid "Error: revocation certificate in `%s' is not for `%s'\n"
6370msgstr "" 6398msgstr ""
6371 6399
6372#: src/revocation/gnunet-revocation.c:361 6400#: src/revocation/gnunet-revocation.c:367
6373msgid "Revocation certificate ready\n" 6401msgid "Revocation certificate ready\n"
6374msgstr "" 6402msgstr ""
6375 6403
6376#: src/revocation/gnunet-revocation.c:373 6404#: src/revocation/gnunet-revocation.c:379
6377msgid "Continuing calculation where left off...\n" 6405msgid "Continuing calculation where left off...\n"
6378msgstr "" 6406msgstr ""
6379 6407
6380#: src/revocation/gnunet-revocation.c:380 6408#: src/revocation/gnunet-revocation.c:386
6381msgid "Revocation certificate not ready, calculating proof of work\n" 6409msgid "Revocation certificate not ready, calculating proof of work\n"
6382msgstr "" 6410msgstr ""
6383 6411
6384#: src/revocation/gnunet-revocation.c:418 6412#: src/revocation/gnunet-revocation.c:424
6385#, fuzzy, c-format 6413#, fuzzy, c-format
6386msgid "Public key `%s' malformed\n" 6414msgid "Public key `%s' malformed\n"
6387msgstr "El bloque del tipo %u está mal formado\n" 6415msgstr "El bloque del tipo %u está mal formado\n"
6388 6416
6389#: src/revocation/gnunet-revocation.c:428 6417#: src/revocation/gnunet-revocation.c:434
6390msgid "" 6418msgid ""
6391"Testing and revoking at the same time is not allowed, only executing test.\n" 6419"Testing and revoking at the same time is not allowed, only executing test.\n"
6392msgstr "" 6420msgstr ""
6393 6421
6394#: src/revocation/gnunet-revocation.c:458 6422#: src/revocation/gnunet-revocation.c:464
6395#, fuzzy 6423#, fuzzy
6396msgid "No filename to store revocation certificate given.\n" 6424msgid "No filename to store revocation certificate given.\n"
6397msgstr "Se produjo un fallo al leer la lista de amigos de «%s»\n" 6425msgstr "Se produjo un fallo al leer la lista de amigos de «%s»\n"
6398 6426
6399#: src/revocation/gnunet-revocation.c:475 6427#: src/revocation/gnunet-revocation.c:481
6400#, fuzzy, c-format 6428#, fuzzy, c-format
6401msgid "Failed to read revocation certificate from `%s'\n" 6429msgid "Failed to read revocation certificate from `%s'\n"
6402msgstr "Se produjo un fallo al leer la lista de amigos de «%s»\n" 6430msgstr "Se produjo un fallo al leer la lista de amigos de «%s»\n"
6403 6431
6404#: src/revocation/gnunet-revocation.c:483 6432#: src/revocation/gnunet-revocation.c:489
6405#, fuzzy, c-format 6433#, fuzzy, c-format
6406msgid "Revocation certificate corrupted in `%s'\n" 6434msgid "Revocation certificate corrupted in `%s'\n"
6407msgstr "Se produjo un fallo al leer la lista de amigos de «%s»\n" 6435msgstr "Se produjo un fallo al leer la lista de amigos de «%s»\n"
6408 6436
6409#: src/revocation/gnunet-revocation.c:505 6437#: src/revocation/gnunet-revocation.c:511
6410#, fuzzy 6438#, fuzzy
6411msgid "No action specified. Nothing to do.\n" 6439msgid "No action specified. Nothing to do.\n"
6412msgstr "Ninguna interfaz especificada, usando la marcada por defecto\n" 6440msgstr "Ninguna interfaz especificada, usando la marcada por defecto\n"
6413 6441
6414#: src/revocation/gnunet-revocation.c:524 6442#: src/revocation/gnunet-revocation.c:530
6415msgid "use NAME for the name of the revocation file" 6443msgid "use NAME for the name of the revocation file"
6416msgstr "" 6444msgstr ""
6417 6445
6418#: src/revocation/gnunet-revocation.c:532 6446#: src/revocation/gnunet-revocation.c:538
6419msgid "" 6447msgid ""
6420"revoke the private key associated for the the private key associated with " 6448"revoke the private key associated for the the private key associated with "
6421"the ego NAME " 6449"the ego NAME "
6422msgstr "" 6450msgstr ""
6423 6451
6424#: src/revocation/gnunet-revocation.c:539 6452#: src/revocation/gnunet-revocation.c:545
6425msgid "actually perform revocation, otherwise we just do the precomputation" 6453msgid "actually perform revocation, otherwise we just do the precomputation"
6426msgstr "" 6454msgstr ""
6427 6455
6428#: src/revocation/gnunet-revocation.c:546 6456#: src/revocation/gnunet-revocation.c:552
6429msgid "test if the public key KEY has been revoked" 6457msgid "test if the public key KEY has been revoked"
6430msgstr "" 6458msgstr ""
6431 6459
6432#: src/revocation/gnunet-revocation.c:552 6460#: src/revocation/gnunet-revocation.c:558
6433#, fuzzy 6461#, fuzzy
6434msgid "number of epochs to calculate for" 6462msgid "number of epochs to calculate for"
6435msgstr "número de pares para empezar" 6463msgstr "número de pares para empezar"
@@ -6468,18 +6496,6 @@ msgstr ""
6468msgid "Could not open revocation database file!" 6496msgid "Could not open revocation database file!"
6469msgstr "No se pudo conectar con el almacén de datos." 6497msgstr "No se pudo conectar con el almacén de datos."
6470 6498
6471#: src/rps/gnunet-rps.c:270
6472msgid "Seed a PeerID"
6473msgstr ""
6474
6475#: src/rps/gnunet-rps.c:275
6476msgid "Get updates of view (0 for infinite updates)"
6477msgstr ""
6478
6479#: src/rps/gnunet-rps.c:279
6480msgid "Get peers from biased stream"
6481msgstr ""
6482
6483#: src/rps/gnunet-rps-profiler.c:3142 6499#: src/rps/gnunet-rps-profiler.c:3142
6484#, fuzzy 6500#, fuzzy
6485msgid "duration of the profiling" 6501msgid "duration of the profiling"
@@ -6501,6 +6517,18 @@ msgstr "número de pares para empezar"
6501msgid "Measure quality and performance of the RPS service." 6517msgid "Measure quality and performance of the RPS service."
6502msgstr "Medir la calidad y rendimiento del servicio NSE." 6518msgstr "Medir la calidad y rendimiento del servicio NSE."
6503 6519
6520#: src/rps/gnunet-rps.c:270
6521msgid "Seed a PeerID"
6522msgstr ""
6523
6524#: src/rps/gnunet-rps.c:275
6525msgid "Get updates of view (0 for infinite updates)"
6526msgstr ""
6527
6528#: src/rps/gnunet-rps.c:279
6529msgid "Get peers from biased stream"
6530msgstr ""
6531
6504#: src/scalarproduct/gnunet-scalarproduct.c:229 6532#: src/scalarproduct/gnunet-scalarproduct.c:229
6505#, fuzzy 6533#, fuzzy
6506msgid "You must specify at least one message ID to check!\n" 6534msgid "You must specify at least one message ID to check!\n"
@@ -6556,15 +6584,15 @@ msgstr ""
6556msgid "Calculate the Vectorproduct with a GNUnet peer." 6584msgid "Calculate the Vectorproduct with a GNUnet peer."
6557msgstr "" 6585msgstr ""
6558 6586
6587#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118
6588#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1034
6559#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1358 6589#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1358
6560#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1355 6590#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1355
6561#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118
6562#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1063
6563#, fuzzy 6591#, fuzzy
6564msgid "Connect to CADET failed\n" 6592msgid "Connect to CADET failed\n"
6565msgstr "Conexión fallida (¿bug?)\n" 6593msgstr "Conexión fallida (¿bug?)\n"
6566 6594
6567#: src/scalarproduct/scalarproduct_api.c:189 6595#: src/scalarproduct/scalarproduct_api.c:184
6568msgid "Keys given to SCALARPRODUCT not unique!\n" 6596msgid "Keys given to SCALARPRODUCT not unique!\n"
6569msgstr "" 6597msgstr ""
6570 6598
@@ -6585,7 +6613,7 @@ msgid "also profile decryption"
6585msgstr "" 6613msgstr ""
6586 6614
6587#: src/set/gnunet-service-set.c:1916 src/seti/gnunet-service-seti.c:2467 6615#: src/set/gnunet-service-set.c:1916 src/seti/gnunet-service-seti.c:2467
6588#: src/setu/gnunet-service-setu.c:3832 6616#: src/setu/gnunet-service-setu.c:5389
6589#, fuzzy 6617#, fuzzy
6590msgid "Could not connect to CADET service\n" 6618msgid "Could not connect to CADET service\n"
6591msgstr "¡No se pudo conectar al servicio %s!\n" 6619msgstr "¡No se pudo conectar al servicio %s!\n"
@@ -6830,7 +6858,7 @@ msgid ""
6830"\t cap: the maximum number of links a node can have\n" 6858"\t cap: the maximum number of links a node can have\n"
6831"\t m: the number of links a node should have while joining the network\n" 6859"\t m: the number of links a node should have while joining the network\n"
6832"\t filename: the path of the file which contains topology information\n" 6860"\t filename: the path of the file which contains topology information\n"
6833"NOTE: the format of the above file is descibed here: https://www.gnunet.org/" 6861"NOTE: the format of the above file is described here: https://www.gnunet.org/"
6834"content/topology-file-format\n" 6862"content/topology-file-format\n"
6835msgstr "" 6863msgstr ""
6836 6864
@@ -6919,18 +6947,9 @@ msgstr "Petición ignorada porque el ARM se está apagando.\n"
6919msgid "%.s Unknown result code." 6947msgid "%.s Unknown result code."
6920msgstr "Código de respuesta del ARM desconocido.\n" 6948msgstr "Código de respuesta del ARM desconocido.\n"
6921 6949
6922#: src/testbed/gnunet_testbed_mpi_spawn.c:119
6923#, fuzzy
6924msgid "Waiting for child to exit.\n"
6925msgstr "Esperando a los pares para conectar (%u ciclos restantes)...\n"
6926
6927#: src/testbed/gnunet_testbed_mpi_spawn.c:242
6928#, fuzzy, c-format
6929msgid "Spawning process `%s'\n"
6930msgstr "Iniciando el proceso auxiliar (HELPER) «%s»\n"
6931
6932#: src/testbed/gnunet-testbed-profiler.c:290 6950#: src/testbed/gnunet-testbed-profiler.c:290
6933msgid "tolerate COUNT number of continious timeout failures" 6951#, fuzzy
6952msgid "tolerate COUNT number of continuous timeout failures"
6934msgstr "tolerar un número «COUNT» de continuas expiraciones de plazo" 6953msgstr "tolerar un número «COUNT» de continuas expiraciones de plazo"
6935 6954
6936#: src/testbed/gnunet-testbed-profiler.c:295 6955#: src/testbed/gnunet-testbed-profiler.c:295
@@ -6940,6 +6959,16 @@ msgid ""
6940"signal is received" 6959"signal is received"
6941msgstr "" 6960msgstr ""
6942 6961
6962#: src/testbed/gnunet_testbed_mpi_spawn.c:119
6963#, fuzzy
6964msgid "Waiting for child to exit.\n"
6965msgstr "Esperando a los pares para conectar (%u ciclos restantes)...\n"
6966
6967#: src/testbed/gnunet_testbed_mpi_spawn.c:242
6968#, fuzzy, c-format
6969msgid "Spawning process `%s'\n"
6970msgstr "Iniciando el proceso auxiliar (HELPER) «%s»\n"
6971
6943#: src/testbed/testbed_api.c:399 6972#: src/testbed/testbed_api.c:399
6944#, c-format 6973#, c-format
6945msgid "Adding host %u failed with error: %s\n" 6974msgid "Adding host %u failed with error: %s\n"
@@ -7260,9 +7289,9 @@ msgstr "# mensajes «HELLO» recibidos"
7260msgid "GNUnet topology control" 7289msgid "GNUnet topology control"
7261msgstr "" 7290msgstr ""
7262 7291
7263#: src/transport/gnunet-communicator-tcp.c:3331 7292#: src/transport/gnunet-communicator-tcp.c:3317
7264#: src/transport/gnunet-communicator-udp.c:3790 7293#: src/transport/gnunet-communicator-udp.c:3790
7265#: src/transport/gnunet-service-tng.c:10220 7294#: src/transport/gnunet-service-tng.c:10223
7266#: src/transport/gnunet-service-transport.c:2627 7295#: src/transport/gnunet-service-transport.c:2627
7267#, fuzzy 7296#, fuzzy
7268msgid "Transport service is lacking key configuration settings. Exiting.\n" 7297msgid "Transport service is lacking key configuration settings. Exiting.\n"
@@ -7270,7 +7299,7 @@ msgstr ""
7270"El servicio de transporte carece de opciones de configuración de clave. " 7299"El servicio de transporte carece de opciones de configuración de clave. "
7271"Saliendo.\n" 7300"Saliendo.\n"
7272 7301
7273#: src/transport/gnunet-communicator-tcp.c:3668 7302#: src/transport/gnunet-communicator-tcp.c:3655
7274#, fuzzy 7303#, fuzzy
7275msgid "GNUnet TCP communicator" 7304msgid "GNUnet TCP communicator"
7276msgstr "Configurador Gtk de GNUnet" 7305msgstr "Configurador Gtk de GNUnet"
@@ -7302,10 +7331,6 @@ msgstr "Se produjo un fallo al crear la página para «%s»\n"
7302msgid "GNUnet UNIX domain socket communicator" 7331msgid "GNUnet UNIX domain socket communicator"
7303msgstr "" 7332msgstr ""
7304 7333
7305#: src/transport/gnunet-service-transport_ats.c:137
7306msgid "# Addresses given to ATS"
7307msgstr ""
7308
7309#: src/transport/gnunet-service-transport.c:445 7334#: src/transport/gnunet-service-transport.c:445
7310msgid "# messages dropped due to slow client" 7335msgid "# messages dropped due to slow client"
7311msgstr "# mensajes omitidos debido a un cliente lento" 7336msgstr "# mensajes omitidos debido a un cliente lento"
@@ -7347,6 +7372,10 @@ msgstr "Añadiendo «%s» sin direcciones para el par «%s»\n"
7347msgid "Adding blacklisting entry for peer `%s':`%s'\n" 7372msgid "Adding blacklisting entry for peer `%s':`%s'\n"
7348msgstr "" 7373msgstr ""
7349 7374
7375#: src/transport/gnunet-service-transport_ats.c:137
7376msgid "# Addresses given to ATS"
7377msgstr ""
7378
7350#: src/transport/gnunet-service-transport_hello.c:195 7379#: src/transport/gnunet-service-transport_hello.c:195
7351msgid "# refreshed my HELLO" 7380msgid "# refreshed my HELLO"
7352msgstr "# refrescos de mi «HELLO»" 7381msgstr "# refrescos de mi «HELLO»"
@@ -7688,6 +7717,45 @@ msgstr "# revalidaciones de direcciones iniciadas"
7688msgid "# HELLOs given to peerinfo" 7717msgid "# HELLOs given to peerinfo"
7689msgstr "# «HELLO» obtenidos de «peerinfo»" 7718msgstr "# «HELLO» obtenidos de «peerinfo»"
7690 7719
7720#: src/transport/gnunet-transport-profiler.c:220
7721#, c-format
7722msgid "%llu B in %llu ms == %.2f KB/s!\n"
7723msgstr ""
7724
7725#: src/transport/gnunet-transport-profiler.c:577
7726msgid "send data to peer"
7727msgstr ""
7728
7729#: src/transport/gnunet-transport-profiler.c:581
7730#, fuzzy
7731msgid "receive data from peer"
7732msgstr "# respuestas recibidas de otros pares"
7733
7734#: src/transport/gnunet-transport-profiler.c:586
7735#, fuzzy
7736msgid "iterations"
7737msgstr "Otras configuraciones"
7738
7739#: src/transport/gnunet-transport-profiler.c:591
7740#, fuzzy
7741msgid "number of messages to send"
7742msgstr "número de mensajes a usar por iteración"
7743
7744#: src/transport/gnunet-transport-profiler.c:596
7745#, fuzzy
7746msgid "message size to use"
7747msgstr "tamaño del mensaje"
7748
7749#: src/transport/gnunet-transport-profiler.c:601
7750#: src/transport/gnunet-transport.c:1404
7751msgid "peer identity"
7752msgstr "identidad del par"
7753
7754#: src/transport/gnunet-transport-profiler.c:614
7755#: src/transport/gnunet-transport.c:1426
7756msgid "Direct access to transport service."
7757msgstr "Acceso directo al servicio de transporte."
7758
7691#: src/transport/gnunet-transport.c:406 7759#: src/transport/gnunet-transport.c:406
7692#, c-format 7760#, c-format
7693msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n" 7761msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n"
@@ -7832,11 +7900,6 @@ msgstr ""
7832msgid "do not resolve hostnames" 7900msgid "do not resolve hostnames"
7833msgstr "no resolver nombres de máquinas" 7901msgstr "no resolver nombres de máquinas"
7834 7902
7835#: src/transport/gnunet-transport.c:1404
7836#: src/transport/gnunet-transport-profiler.c:601
7837msgid "peer identity"
7838msgstr "identidad del par"
7839
7840#: src/transport/gnunet-transport.c:1408 7903#: src/transport/gnunet-transport.c:1408
7841#, fuzzy 7904#, fuzzy
7842msgid "monitor plugin sessions" 7905msgid "monitor plugin sessions"
@@ -7846,40 +7909,6 @@ msgstr "# sesiones wlan pendientes"
7846msgid "send data for benchmarking to the other peer (until CTRL-C)" 7909msgid "send data for benchmarking to the other peer (until CTRL-C)"
7847msgstr "enviar data para prueba a otro par (hasta CTRL-C)" 7910msgstr "enviar data para prueba a otro par (hasta CTRL-C)"
7848 7911
7849#: src/transport/gnunet-transport.c:1426
7850#: src/transport/gnunet-transport-profiler.c:614
7851msgid "Direct access to transport service."
7852msgstr "Acceso directo al servicio de transporte."
7853
7854#: src/transport/gnunet-transport-profiler.c:220
7855#, c-format
7856msgid "%llu B in %llu ms == %.2f KB/s!\n"
7857msgstr ""
7858
7859#: src/transport/gnunet-transport-profiler.c:577
7860msgid "send data to peer"
7861msgstr ""
7862
7863#: src/transport/gnunet-transport-profiler.c:581
7864#, fuzzy
7865msgid "receive data from peer"
7866msgstr "# respuestas recibidas de otros pares"
7867
7868#: src/transport/gnunet-transport-profiler.c:586
7869#, fuzzy
7870msgid "iterations"
7871msgstr "Otras configuraciones"
7872
7873#: src/transport/gnunet-transport-profiler.c:591
7874#, fuzzy
7875msgid "number of messages to send"
7876msgstr "número de mensajes a usar por iteración"
7877
7878#: src/transport/gnunet-transport-profiler.c:596
7879#, fuzzy
7880msgid "message size to use"
7881msgstr "tamaño del mensaje"
7882
7883#: src/transport/plugin_transport_http_client.c:1488 7912#: src/transport/plugin_transport_http_client.c:1488
7884#: src/transport/plugin_transport_http_server.c:2331 7913#: src/transport/plugin_transport_http_server.c:2331
7885#: src/transport/plugin_transport_http_server.c:3562 7914#: src/transport/plugin_transport_http_server.c:3562
@@ -8164,23 +8193,6 @@ msgstr "Transporte TCP no escuchando en ningún puerto (únicamente cliente)\n"
8164msgid "TCP transport advertises itself as being on port %llu\n" 8193msgid "TCP transport advertises itself as being on port %llu\n"
8165msgstr "El transporte TCP anuncia que está en el puerto %llu\n" 8194msgstr "El transporte TCP anuncia que está en el puerto %llu\n"
8166 8195
8167#: src/transport/plugin_transport_udp_broadcasting.c:169
8168#, fuzzy
8169msgid "# Multicast HELLO beacons received via UDP"
8170msgstr "# beacons HELLO multicast IPv6 recibidos vía UDP"
8171
8172#: src/transport/plugin_transport_udp_broadcasting.c:553
8173msgid ""
8174"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n"
8175msgstr ""
8176
8177#: src/transport/plugin_transport_udp_broadcasting.c:571
8178#, c-format
8179msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n"
8180msgstr ""
8181"Se produjo un fallo al establecer la opción de «broadcast» IPv4 para el "
8182"«socket» en el puerto %d\n"
8183
8184#: src/transport/plugin_transport_udp.c:3170 8196#: src/transport/plugin_transport_udp.c:3170
8185#, c-format 8197#, c-format
8186msgid "" 8198msgid ""
@@ -8235,6 +8247,23 @@ msgstr "«%s» no es una dirección IP válida.\n"
8235msgid "Failed to create UDP network sockets\n" 8247msgid "Failed to create UDP network sockets\n"
8236msgstr "Se produjo un fallo al crear una nueva firma" 8248msgstr "Se produjo un fallo al crear una nueva firma"
8237 8249
8250#: src/transport/plugin_transport_udp_broadcasting.c:169
8251#, fuzzy
8252msgid "# Multicast HELLO beacons received via UDP"
8253msgstr "# beacons HELLO multicast IPv6 recibidos vía UDP"
8254
8255#: src/transport/plugin_transport_udp_broadcasting.c:553
8256msgid ""
8257"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n"
8258msgstr ""
8259
8260#: src/transport/plugin_transport_udp_broadcasting.c:571
8261#, c-format
8262msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n"
8263msgstr ""
8264"Se produjo un fallo al establecer la opción de «broadcast» IPv4 para el "
8265"«socket» en el puerto %d\n"
8266
8238#: src/transport/plugin_transport_unix.c:1396 8267#: src/transport/plugin_transport_unix.c:1396
8239#, fuzzy, c-format 8268#, fuzzy, c-format
8240msgid "Cannot bind to `%s'\n" 8269msgid "Cannot bind to `%s'\n"
@@ -8405,7 +8434,7 @@ msgstr ""
8405msgid "Service process failed to report status\n" 8434msgid "Service process failed to report status\n"
8406msgstr "El proceso del servicio no devolvió un estado\n" 8435msgstr "El proceso del servicio no devolvió un estado\n"
8407 8436
8408#: src/transport/tcp_service_legacy.c:1253 src/util/disk.c:1040 8437#: src/transport/tcp_service_legacy.c:1253 src/util/disk.c:1220
8409#: src/util/service.c:1637 8438#: src/util/service.c:1637
8410#, c-format 8439#, c-format
8411msgid "Cannot obtain information about user `%s': %s\n" 8440msgid "Cannot obtain information about user `%s': %s\n"
@@ -8524,39 +8553,15 @@ msgstr "Formato de tiempo no válido «%s»\n"
8524msgid "Failed to serialize metadata `%s'" 8553msgid "Failed to serialize metadata `%s'"
8525msgstr "Se produjo un fallo al serializar metadatos" 8554msgstr "Se produjo un fallo al serializar metadatos"
8526 8555
8527#: src/util/client.c:747 src/util/client.c:937 8556#: src/util/client.c:747 src/util/client.c:938
8528msgid "not a valid filename" 8557msgid "not a valid filename"
8529msgstr "" 8558msgstr ""
8530 8559
8531#: src/util/client.c:1103 8560#: src/util/client.c:1104
8532#, c-format 8561#, c-format
8533msgid "Need a non-empty hostname for service `%s'.\n" 8562msgid "Need a non-empty hostname for service `%s'.\n"
8534msgstr "Se necesita un nombre de máquina no vacío para el servicio «%s».\n" 8563msgstr "Se necesita un nombre de máquina no vacío para el servicio «%s».\n"
8535 8564
8536#: src/util/common_logging.c:259 src/util/common_logging.c:1114
8537msgid "DEBUG"
8538msgstr "DEPURACIÓN"
8539
8540#: src/util/common_logging.c:261 src/util/common_logging.c:1112
8541msgid "INFO"
8542msgstr "INFORMACIÓN"
8543
8544#: src/util/common_logging.c:263 src/util/common_logging.c:1110
8545msgid "MESSAGE"
8546msgstr "MENSAJE"
8547
8548#: src/util/common_logging.c:265 src/util/common_logging.c:1108
8549msgid "WARNING"
8550msgstr "PELIGRO"
8551
8552#: src/util/common_logging.c:267 src/util/common_logging.c:1106
8553msgid "ERROR"
8554msgstr "ERROR"
8555
8556#: src/util/common_logging.c:269 src/util/common_logging.c:1116
8557msgid "NONE"
8558msgstr "NINGUNO"
8559
8560#: src/util/common_logging.c:626 src/util/common_logging.c:665 8565#: src/util/common_logging.c:626 src/util/common_logging.c:665
8561#, c-format 8566#, c-format
8562msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n" 8567msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n"
@@ -8567,6 +8572,30 @@ msgstr ""
8567msgid "Message `%.*s' repeated %u times in the last %s\n" 8572msgid "Message `%.*s' repeated %u times in the last %s\n"
8568msgstr "Mensaje `%.*s» repetido %u veces en el último %s\n" 8573msgstr "Mensaje `%.*s» repetido %u veces en el último %s\n"
8569 8574
8575#: src/util/common_logging.c:1106
8576msgid "ERROR"
8577msgstr "ERROR"
8578
8579#: src/util/common_logging.c:1108
8580msgid "WARNING"
8581msgstr "PELIGRO"
8582
8583#: src/util/common_logging.c:1110
8584msgid "MESSAGE"
8585msgstr "MENSAJE"
8586
8587#: src/util/common_logging.c:1112
8588msgid "INFO"
8589msgstr "INFORMACIÓN"
8590
8591#: src/util/common_logging.c:1114
8592msgid "DEBUG"
8593msgstr "DEPURACIÓN"
8594
8595#: src/util/common_logging.c:1116
8596msgid "NONE"
8597msgstr "NINGUNO"
8598
8570#: src/util/common_logging.c:1117 8599#: src/util/common_logging.c:1117
8571msgid "INVALID" 8600msgid "INVALID"
8572msgstr "NO VÃLIDO" 8601msgstr "NO VÃLIDO"
@@ -8592,22 +8621,52 @@ msgstr ""
8592"La configuración especifica un valor no válido en la opción «%s» de la " 8621"La configuración especifica un valor no válido en la opción «%s» de la "
8593"sección «%s»: %s\n" 8622"sección «%s»: %s\n"
8594 8623
8595#: src/util/configuration.c:370 8624#: src/util/configuration.c:790
8625#, c-format
8626msgid "Illegal directive in line %u (parsing restricted section %s)\n"
8627msgstr ""
8628
8629#: src/util/configuration.c:800
8630#, c-format
8631msgid "Bad directive in line %u\n"
8632msgstr ""
8633
8634#: src/util/configuration.c:853
8635#, c-format
8636msgid "Bad inline-secret directive in line %u\n"
8637msgstr ""
8638
8639#: src/util/configuration.c:875
8640#, c-format
8641msgid "Unknown or malformed directive '%s' in line %u\n"
8642msgstr ""
8643
8644#: src/util/configuration.c:905
8645#, fuzzy, c-format
8646msgid "Syntax error while deserializing in line %u (option without section)\n"
8647msgstr "Error de sintaxis en la línea %u mientras se deserializaba\n"
8648
8649#: src/util/configuration.c:949
8596#, c-format 8650#, c-format
8597msgid "Syntax error while deserializing in line %u\n" 8651msgid "Syntax error while deserializing in line %u\n"
8598msgstr "Error de sintaxis en la línea %u mientras se deserializaba\n" 8652msgstr "Error de sintaxis en la línea %u mientras se deserializaba\n"
8599 8653
8600#: src/util/configuration.c:420 8654#: src/util/configuration.c:1049
8601#, fuzzy, c-format 8655#, fuzzy, c-format
8602msgid "Error while reading file `%s'\n" 8656msgid "Error while reading file `%s'\n"
8603msgstr "Error decodificando clave %u\n" 8657msgstr "Error decodificando clave %u\n"
8604 8658
8605#: src/util/configuration.c:980 8659#: src/util/configuration.c:1062
8660#, fuzzy, c-format
8661msgid "Failed to parse configuration file `%s'\n"
8662msgstr "Se produjo un fallo al borrar el fichero de configuración %s\n"
8663
8664#: src/util/configuration.c:1695
8606#, fuzzy 8665#, fuzzy
8607msgid "Not a valid relative time specification" 8666msgid "Not a valid relative time specification"
8608msgstr "Tiempo de expiración no válido para la operación «%s»\n" 8667msgstr "Tiempo de expiración no válido para la operación «%s»\n"
8609 8668
8610#: src/util/configuration.c:1050 8669#: src/util/configuration.c:1765
8611#, c-format 8670#, c-format
8612msgid "" 8671msgid ""
8613"Configuration value '%s' for '%s' in section '%s' is not in set of legal " 8672"Configuration value '%s' for '%s' in section '%s' is not in set of legal "
@@ -8616,17 +8675,17 @@ msgstr ""
8616"El valor de configuración «%s» para «%s» de la sección «%s» no está dentro " 8675"El valor de configuración «%s» para «%s» de la sección «%s» no está dentro "
8617"de las opciones legales\n" 8676"de las opciones legales\n"
8618 8677
8619#: src/util/configuration.c:1145 8678#: src/util/configuration.c:1860
8620#, c-format 8679#, c-format
8621msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n" 8680msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n"
8622msgstr "" 8681msgstr ""
8623 8682
8624#: src/util/configuration.c:1177 8683#: src/util/configuration.c:1892
8625#, fuzzy, c-format 8684#, fuzzy, c-format
8626msgid "Missing closing `%s' in option `%s'\n" 8685msgid "Missing closing `%s' in option `%s'\n"
8627msgstr "Falta la opción «%s» para la operación «%s»\n" 8686msgstr "Falta la opción «%s» para la operación «%s»\n"
8628 8687
8629#: src/util/configuration.c:1243 8688#: src/util/configuration.c:1958
8630#, c-format 8689#, c-format
8631msgid "" 8690msgid ""
8632"Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined " 8691"Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined "
@@ -8672,7 +8731,7 @@ msgstr "El firmado ECC falló en %s:%d: %s\n"
8672msgid "RSA signature verification failed at %s:%d: %s\n" 8731msgid "RSA signature verification failed at %s:%d: %s\n"
8673msgstr "La verificación de la firma RSA fallo en %s:%d: %s\n" 8732msgstr "La verificación de la firma RSA fallo en %s:%d: %s\n"
8674 8733
8675#: src/util/disk.c:823 8734#: src/util/disk.c:843
8676#, c-format 8735#, c-format
8677msgid "Expected `%s' to be a directory!\n" 8736msgid "Expected `%s' to be a directory!\n"
8678msgstr "¡Se esperaba que «%s» fuera un directorio!\n" 8737msgstr "¡Se esperaba que «%s» fuera un directorio!\n"
@@ -8857,62 +8916,73 @@ msgstr "Tienes que introducir un número en la opción «%s».\n"
8857msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n" 8916msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n"
8858msgstr "" 8917msgstr ""
8859 8918
8860#: src/util/gnunet-base32.c:45 8919#: src/util/gnunet-base32.c:46
8861msgid "run decoder modus, otherwise runs as encoder" 8920msgid "run decoder modus, otherwise runs as encoder"
8862msgstr "" 8921msgstr ""
8863 8922
8864#: src/util/gnunet-config.c:167 8923#: src/util/gnunet-config.c:187
8865#, fuzzy, c-format
8866msgid "failed to load configuration defaults"
8867msgstr "Se produjo un fallo al cargar la configuración de %s\n"
8868
8869#: src/util/gnunet-config.c:179
8870#, fuzzy, c-format
8871msgid "%s or %s argument is required\n"
8872msgstr "el parámetro --section es necesario\n"
8873
8874#: src/util/gnunet-config.c:186
8875#, c-format 8924#, c-format
8876msgid "The following sections are available:\n" 8925msgid "The following sections are available:\n"
8877msgstr "" 8926msgstr ""
8878 8927
8879#: src/util/gnunet-config.c:234 8928#: src/util/gnunet-config.c:201
8929#, fuzzy, c-format
8930msgid "%s, %s or %s argument is required\n"
8931msgstr "el parámetro --section es necesario\n"
8932
8933#: src/util/gnunet-config.c:266
8880#, c-format 8934#, c-format
8881msgid "--option argument required to set value\n" 8935msgid "--option argument required to set value\n"
8882msgstr "el parámetro --option es necesario para establecer un valor\n" 8936msgstr "el parámetro --option es necesario para establecer un valor\n"
8883 8937
8884#: src/util/gnunet-config.c:284 8938#: src/util/gnunet-config.c:309
8885#, fuzzy 8939#, fuzzy, c-format
8886msgid "interpret option value as a filename (with $-expansion)" 8940msgid "failed to load configuration defaults"
8887msgstr "" 8941msgstr "Se produjo un fallo al cargar la configuración de %s\n"
8888"obtener la opción del valor como un nombre de fichero (con expansión del $)"
8889 8942
8890#: src/util/gnunet-config.c:291 8943#: src/util/gnunet-config.c:354
8891msgid "test if the current installation supports the specified BACKEND" 8944msgid "test if the current installation supports the specified BACKEND"
8892msgstr "" 8945msgstr ""
8893 8946
8894#: src/util/gnunet-config.c:297 8947#: src/util/gnunet-config.c:360
8895msgid "name of the section to access" 8948#, fuzzy
8896msgstr "nombre de la sección a la que acceder" 8949msgid "write the full configuration file, including default values"
8950msgstr ""
8951"La configuración no especifica «%s», asumiendo el valor predeterminado."
8952
8953#: src/util/gnunet-config.c:365
8954#, fuzzy
8955msgid "interpret option value as a filename (with $-expansion)"
8956msgstr ""
8957"obtener la opción del valor como un nombre de fichero (con expansión del $)"
8897 8958
8898#: src/util/gnunet-config.c:302 8959#: src/util/gnunet-config.c:370
8899msgid "name of the option to access" 8960msgid "name of the option to access"
8900msgstr "nombre de la opción a la que acceder" 8961msgstr "nombre de la opción a la que acceder"
8901 8962
8902#: src/util/gnunet-config.c:307 8963#: src/util/gnunet-config.c:376
8903msgid "value to set" 8964#, fuzzy
8904msgstr "valor a establecer" 8965msgid "rewrite the configuration file, even if nothing changed"
8966msgstr "No se ha introducido ningún fichero de configuración. Saliendo\n"
8967
8968#: src/util/gnunet-config.c:382
8969msgid "output extra diagnostics"
8970msgstr ""
8905 8971
8906#: src/util/gnunet-config.c:312 8972#: src/util/gnunet-config.c:387
8907#, fuzzy 8973#, fuzzy
8908msgid "print available configuration sections" 8974msgid "print available configuration sections"
8909msgstr "Falta configuración sobre las opciones de claves.\n" 8975msgstr "Falta configuración sobre las opciones de claves.\n"
8910 8976
8911#: src/util/gnunet-config.c:318 8977#: src/util/gnunet-config.c:393
8912msgid "write configuration file that only contains delta to defaults" 8978msgid "name of the section to access"
8913msgstr "" 8979msgstr "nombre de la sección a la que acceder"
8914 8980
8915#: src/util/gnunet-config.c:330 8981#: src/util/gnunet-config.c:398
8982msgid "value to set"
8983msgstr "valor a establecer"
8984
8985#: src/util/gnunet-config.c:413
8916msgid "Manipulate GNUnet configuration files" 8986msgid "Manipulate GNUnet configuration files"
8917msgstr "Manipular ficheros de configuración de GNUnet" 8987msgstr "Manipular ficheros de configuración de GNUnet"
8918 8988
@@ -9108,7 +9178,7 @@ msgstr "Error escribiendo a «%s»: %s\n"
9108msgid "Unable to shorten unix path `%s' while keeping name unique\n" 9178msgid "Unable to shorten unix path `%s' while keeping name unique\n"
9109msgstr "Imposible acortar la ruta unix «%s» manteniendo el nombre único\n" 9179msgstr "Imposible acortar la ruta unix «%s» manteniendo el nombre único\n"
9110 9180
9111#: src/util/network.c:1361 9181#: src/util/network.c:1359
9112#, c-format 9182#, c-format
9113msgid "" 9183msgid ""
9114"Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n" 9184"Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n"
@@ -9150,21 +9220,21 @@ msgstr "«%s» falló al resolver el método «%s» con error: %s\n"
9150msgid "`%s' failed for library `%s' with error: %s\n" 9220msgid "`%s' failed for library `%s' with error: %s\n"
9151msgstr "Falló «%s» para la biblioteca «%s» con error: %s\n" 9221msgstr "Falló «%s» para la biblioteca «%s» con error: %s\n"
9152 9222
9153#: src/util/plugin.c:409 9223#: src/util/plugin.c:414
9154msgid "Could not determine plugin installation path.\n" 9224msgid "Could not determine plugin installation path.\n"
9155msgstr "No se pudo determinar la ruta de instalación de los módulos.\n" 9225msgstr "No se pudo determinar la ruta de instalación de los módulos.\n"
9156 9226
9157#: src/util/program.c:259 9227#: src/util/program.c:252
9158#, fuzzy, c-format 9228#, fuzzy, c-format
9159msgid "Unreadable or malformed configuration file `%s', exit ...\n" 9229msgid "Unreadable or malformed configuration file `%s', exit ...\n"
9160msgstr "Se produjo un fallo al borrar el fichero de configuración %s\n" 9230msgstr "Se produjo un fallo al borrar el fichero de configuración %s\n"
9161 9231
9162#: src/util/program.c:276 9232#: src/util/program.c:272
9163#, fuzzy, c-format 9233#, fuzzy, c-format
9164msgid "Unreadable or malformed default configuration file `%s', exit ...\n" 9234msgid "Unreadable or malformed default configuration file `%s', exit ...\n"
9165msgstr "Se produjo un fallo al borrar el fichero de configuración %s\n" 9235msgstr "Se produjo un fallo al borrar el fichero de configuración %s\n"
9166 9236
9167#: src/util/program.c:291 9237#: src/util/program.c:288
9168#, fuzzy 9238#, fuzzy
9169msgid "Unreadable or malformed configuration, exit ...\n" 9239msgid "Unreadable or malformed configuration, exit ...\n"
9170msgstr "Se produjo un fallo al borrar el fichero de configuración %s\n" 9240msgstr "Se produjo un fallo al borrar el fichero de configuración %s\n"
@@ -9238,90 +9308,90 @@ msgstr ""
9238msgid "Attempting to proxy service `%s' to invalid port %d or hostname.\n" 9308msgid "Attempting to proxy service `%s' to invalid port %d or hostname.\n"
9239msgstr "" 9309msgstr ""
9240 9310
9241#: src/util/strings.c:503 9311#: src/util/strings.c:409
9242#, c-format 9312#, c-format
9243msgid "Character sets requested were `%s'->`%s'\n" 9313msgid "Character sets requested were `%s'->`%s'\n"
9244msgstr "Los conjuntos de caracteres pedidos fueron «%s»->«%s»\n" 9314msgstr "Los conjuntos de caracteres pedidos fueron «%s»->«%s»\n"
9245 9315
9246#: src/util/strings.c:637 9316#: src/util/strings.c:501
9247msgid "Failed to expand `$HOME': environment variable `HOME' not set" 9317msgid "Failed to expand `$HOME': environment variable `HOME' not set"
9248msgstr "" 9318msgstr ""
9249"Se produjo un fallo al expandir «$HOME»: variable de entorno «HOME» no " 9319"Se produjo un fallo al expandir «$HOME»: variable de entorno «HOME» no "
9250"establecida" 9320"establecida"
9251 9321
9252#: src/util/strings.c:1241 9322#: src/util/strings.c:1036
9253msgid "IPv6 address did not start with `['\n" 9323msgid "IPv6 address did not start with `['\n"
9254msgstr "La dirección IPv6 no empezaba con «[»\n" 9324msgstr "La dirección IPv6 no empezaba con «[»\n"
9255 9325
9256#: src/util/strings.c:1249 9326#: src/util/strings.c:1044
9257msgid "IPv6 address did contain ':' to separate port number\n" 9327msgid "IPv6 address did contain ':' to separate port number\n"
9258msgstr "La dirección IPv6 contenía «:» para separar el número de puerto\n" 9328msgstr "La dirección IPv6 contenía «:» para separar el número de puerto\n"
9259 9329
9260#: src/util/strings.c:1256 9330#: src/util/strings.c:1051
9261msgid "IPv6 address did contain ']' before ':' to separate port number\n" 9331msgid "IPv6 address did contain ']' before ':' to separate port number\n"
9262msgstr "" 9332msgstr ""
9263"La dirección IPv6 contenía «]» antes de «:» para separar el número de " 9333"La dirección IPv6 contenía «]» antes de «:» para separar el número de "
9264"puerto\n" 9334"puerto\n"
9265 9335
9266#: src/util/strings.c:1264 9336#: src/util/strings.c:1059
9267msgid "IPv6 address did contain a valid port number after the last ':'\n" 9337msgid "IPv6 address did contain a valid port number after the last ':'\n"
9268msgstr "" 9338msgstr ""
9269"La dirección IPv6 contenía un número de puerto válido después del último " 9339"La dirección IPv6 contenía un número de puerto válido después del último "
9270"«:»\n" 9340"«:»\n"
9271 9341
9272#: src/util/strings.c:1273 9342#: src/util/strings.c:1068
9273#, c-format 9343#, c-format
9274msgid "Invalid IPv6 address `%s': %s\n" 9344msgid "Invalid IPv6 address `%s': %s\n"
9275msgstr "Dirección IPv6 «%s» no válida: %s\n" 9345msgstr "Dirección IPv6 «%s» no válida: %s\n"
9276 9346
9277#: src/util/strings.c:1500 src/util/strings.c:1511 9347#: src/util/strings.c:1250 src/util/strings.c:1261
9278msgid "Port not in range\n" 9348msgid "Port not in range\n"
9279msgstr "" 9349msgstr ""
9280 9350
9281#: src/util/strings.c:1520 9351#: src/util/strings.c:1270
9282#, fuzzy, c-format 9352#, fuzzy, c-format
9283msgid "Malformed port policy `%s'\n" 9353msgid "Malformed port policy `%s'\n"
9284msgstr "Se produjo un fallo al iniciar el servicio «%s»\n" 9354msgstr "Se produjo un fallo al iniciar el servicio «%s»\n"
9285 9355
9286#: src/util/strings.c:1603 src/util/strings.c:1632 src/util/strings.c:1679 9356#: src/util/strings.c:1341 src/util/strings.c:1370 src/util/strings.c:1417
9287#: src/util/strings.c:1699 9357#: src/util/strings.c:1437
9288#, c-format 9358#, c-format
9289msgid "Invalid format for IP: `%s'\n" 9359msgid "Invalid format for IP: `%s'\n"
9290msgstr "Formato no válido para la IP: «%s»\n" 9360msgstr "Formato no válido para la IP: «%s»\n"
9291 9361
9292#: src/util/strings.c:1657 9362#: src/util/strings.c:1395
9293#, c-format 9363#, c-format
9294msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)." 9364msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)."
9295msgstr "Notación de red no válida («/%d» no es válido en IPv4 CIDR)." 9365msgstr "Notación de red no válida («/%d» no es válido en IPv4 CIDR)."
9296 9366
9297#: src/util/strings.c:1708 9367#: src/util/strings.c:1446
9298#, fuzzy, c-format 9368#, fuzzy, c-format
9299msgid "Invalid format: `%s'\n" 9369msgid "Invalid format: `%s'\n"
9300msgstr "Formato de tiempo no válido «%s»\n" 9370msgstr "Formato de tiempo no válido «%s»\n"
9301 9371
9302#: src/util/strings.c:1761 9372#: src/util/strings.c:1488
9303#, c-format 9373#, c-format
9304msgid "Invalid network notation (does not end with ';': `%s')\n" 9374msgid "Invalid network notation (does not end with ';': `%s')\n"
9305msgstr "Notación de red no válida (no termina con «;»: «%s»)\n" 9375msgstr "Notación de red no válida (no termina con «;»: «%s»)\n"
9306 9376
9307#: src/util/strings.c:1811 9377#: src/util/strings.c:1538
9308#, c-format 9378#, c-format
9309msgid "Wrong format `%s' for netmask\n" 9379msgid "Wrong format `%s' for netmask\n"
9310msgstr "Formato «%s» erroneo para máscara de red\n" 9380msgstr "Formato «%s» erroneo para máscara de red\n"
9311 9381
9312#: src/util/strings.c:1842 9382#: src/util/strings.c:1569
9313#, c-format 9383#, c-format
9314msgid "Wrong format `%s' for network\n" 9384msgid "Wrong format `%s' for network\n"
9315msgstr "Formato «%s» erroneo para red\n" 9385msgstr "Formato «%s» erroneo para red\n"
9316 9386
9317#: src/util/time.c:878 src/util/time.c:906 9387#: src/util/time.c:699 src/util/time.c:727
9318#, fuzzy, c-format 9388#, fuzzy, c-format
9319msgid "Failed to map `%s', cannot assure monotonic time!\n" 9389msgid "Failed to map `%s', cannot assure monotonic time!\n"
9320msgstr "" 9390msgstr ""
9321"Se produjo un fallo al recuperar el espacio de nombres «%s», no se pudo " 9391"Se produjo un fallo al recuperar el espacio de nombres «%s», no se pudo "
9322"retomar la operación de publicación.\n" 9392"retomar la operación de publicación.\n"
9323 9393
9324#: src/util/time.c:914 9394#: src/util/time.c:735
9325#, c-format 9395#, c-format
9326msgid "" 9396msgid ""
9327"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n" 9397"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
@@ -9503,11 +9573,46 @@ msgstr "el servicio es ofrecido vía UDP"
9503msgid "Setup tunnels via VPN." 9573msgid "Setup tunnels via VPN."
9504msgstr "Configurar túneles vía VPN." 9574msgstr "Configurar túneles vía VPN."
9505 9575
9506#: src/zonemaster/gnunet-service-zonemaster.c:847
9507#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418 9576#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418
9577#: src/zonemaster/gnunet-service-zonemaster.c:847
9508msgid "Failed to connect to the namestore!\n" 9578msgid "Failed to connect to the namestore!\n"
9509msgstr "¡Se produjo un fallo al conectar con el almacén de nombres!\n" 9579msgstr "¡Se produjo un fallo al conectar con el almacén de nombres!\n"
9510 9580
9581#, fuzzy, c-format
9582#~ msgid "Start logging `%s'\n"
9583#~ msgstr "Iniciando descarga «%s».\n"
9584
9585#, fuzzy, c-format
9586#~ msgid "Failed to connect master peer [%u] with slave [%u]\n"
9587#~ msgstr "Fallo al conectar a gnunetd.\n"
9588
9589# form??
9590#, c-format
9591#~ msgid "Unsupported form value `%s'\n"
9592#~ msgstr "Forma de valor no soportada «%s»\n"
9593
9594#, c-format
9595#~ msgid "Found existing name `%s' for the given key\n"
9596#~ msgstr "Encontrado nombre «%s» para la clave dada\n"
9597
9598#, c-format
9599#~ msgid "Found %u existing records for domain `%s'\n"
9600#~ msgstr "Encontrados %u registros para el dominio «%s»\n"
9601
9602#, c-format
9603#~ msgid "Failed to create page for `%s'\n"
9604#~ msgstr "Se produjo un fallo al crear la página para «%s»\n"
9605
9606#, c-format
9607#~ msgid "Failed to setup post processor for `%s'\n"
9608#~ msgstr "Se produjo un fallo al configurar el post-procesador para «%s»\n"
9609
9610#~ msgid "Domain name must not contain `.'\n"
9611#~ msgstr "El nombre de dominio no puede contener «.»\n"
9612
9613#~ msgid "Domain name must not contain `+'\n"
9614#~ msgstr "El nombre de dominio no puede contener «+»\n"
9615
9511#, c-format 9616#, c-format
9512#~ msgid "Unable to parse PKEY record `%s'\n" 9617#~ msgid "Unable to parse PKEY record `%s'\n"
9513#~ msgstr "No se pudo procesar el registro PKEY «%s»\n" 9618#~ msgstr "No se pudo procesar el registro PKEY «%s»\n"
@@ -10171,9 +10276,6 @@ msgstr "¡Se produjo un fallo al conectar con el almacén de nombres!\n"
10171#~ "No se ha recibido una respuesta válida para la petición «%s» del servicio " 10276#~ "No se ha recibido una respuesta válida para la petición «%s» del servicio "
10172#~ "«%s».\n" 10277#~ "«%s».\n"
10173 10278
10174#~ msgid "unknown error"
10175#~ msgstr "error desconocido"
10176
10177#~ msgid "Unexpected time for a response from `fs' service." 10279#~ msgid "Unexpected time for a response from `fs' service."
10178#~ msgstr "Tiempo inesperado para una respuesta del servicio «fs»." 10280#~ msgstr "Tiempo inesperado para una respuesta del servicio «fs»."
10179 10281
@@ -11859,10 +11961,6 @@ msgstr "¡Se produjo un fallo al conectar con el almacén de nombres!\n"
11859#~ msgid "Configuration option `%s' in section `%s' missing.\n" 11961#~ msgid "Configuration option `%s' in section `%s' missing.\n"
11860#~ msgstr "Falta la opción «%s» en la sección «%s» de la configuración\n" 11962#~ msgstr "Falta la opción «%s» en la sección «%s» de la configuración\n"
11861 11963
11862#~ msgid "Configuration fails to specify `%s', assuming default value."
11863#~ msgstr ""
11864#~ "La configuración no especifica «%s», asumiendo el valor predeterminado."
11865
11866#~ msgid "" 11964#~ msgid ""
11867#~ "Invalid value specified for option `%s' in section `%s', content pushing " 11965#~ "Invalid value specified for option `%s' in section `%s', content pushing "
11868#~ "disabled\n" 11966#~ "disabled\n"
@@ -12830,10 +12928,6 @@ msgstr "¡Se produjo un fallo al conectar con el almacén de nombres!\n"
12830#~ "aquí, tendrás que ejecutar GNUnet tu mismo cada vez que quieras usarlo." 12928#~ "aquí, tendrás que ejecutar GNUnet tu mismo cada vez que quieras usarlo."
12831 12929
12832#, fuzzy 12930#, fuzzy
12833#~ msgid "Unable to create user account for daemon."
12834#~ msgstr "Imposible crear la cuenta de usuario:"
12835
12836#, fuzzy
12837#~ msgid "Save configuration?" 12931#~ msgid "Save configuration?"
12838#~ msgstr "Configuración de GNUnet" 12932#~ msgstr "Configuración de GNUnet"
12839 12933
@@ -13435,9 +13529,6 @@ msgstr "¡Se produjo un fallo al conectar con el almacén de nombres!\n"
13435#~ "usa libextractor para añadir referencias directas adicionales a las " 13529#~ "usa libextractor para añadir referencias directas adicionales a las "
13436#~ "entradas del directorio" 13530#~ "entradas del directorio"
13437 13531
13438#~ msgid "Created entry `%s' in namespace `%s'\n"
13439#~ msgstr "Creada la entrada '%s' en el espacio '%s'\n"
13440
13441#, fuzzy 13532#, fuzzy
13442#~ msgid "" 13533#~ msgid ""
13443#~ "%16llu of %16llu bytes inserted (estimating %6s to completion) - %s\n" 13534#~ "%16llu of %16llu bytes inserted (estimating %6s to completion) - %s\n"
diff --git a/po/fr.po b/po/fr.po
index 6aba5bc6c..34f88c302 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -7,7 +7,7 @@ msgid ""
7msgstr "" 7msgstr ""
8"Project-Id-Version: gnunet 0.10.1\n" 8"Project-Id-Version: gnunet 0.10.1\n"
9"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" 9"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
10"POT-Creation-Date: 2021-04-04 19:19+0200\n" 10"POT-Creation-Date: 2021-08-28 16:52+0200\n"
11"PO-Revision-Date: 2015-12-24 01:20+0100\n" 11"PO-Revision-Date: 2015-12-24 01:20+0100\n"
12"Last-Translator: Stéphane Aulery <lkppo@free.fr>\n" 12"Last-Translator: Stéphane Aulery <lkppo@free.fr>\n"
13"Language-Team: French <traduc@traduc.org>\n" 13"Language-Team: French <traduc@traduc.org>\n"
@@ -27,8 +27,8 @@ msgid "Issuer public key `%s' is not well-formed\n"
27msgstr "" 27msgstr ""
28 28
29#: src/abd/gnunet-abd.c:560 src/abd/gnunet-service-abd.c:1747 29#: src/abd/gnunet-abd.c:560 src/abd/gnunet-service-abd.c:1747
30#: src/namestore/gnunet-namestore-fcfsd.c:1067
30#: src/namestore/gnunet-namestore.c:1001 31#: src/namestore/gnunet-namestore.c:1001
31#: src/namestore/gnunet-namestore-fcfsd.c:1164
32#, c-format 32#, c-format
33msgid "Failed to connect to namestore\n" 33msgid "Failed to connect to namestore\n"
34msgstr "" 34msgstr ""
@@ -491,108 +491,6 @@ msgstr ""
491msgid "Initiating shutdown as requested by client.\n" 491msgid "Initiating shutdown as requested by client.\n"
492msgstr "" 492msgstr ""
493 493
494#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044
495#, c-format
496msgid ""
497"Could not load quota for network `%s': `%s', assigning default bandwidth "
498"%llu\n"
499msgstr ""
500
501#: src/ats/gnunet-ats-solver-eval.c:3011
502#, c-format
503msgid ""
504"No outbound quota configured for network `%s', assigning default bandwidth "
505"%llu\n"
506msgstr ""
507
508#: src/ats/gnunet-ats-solver-eval.c:3063
509#, c-format
510msgid ""
511"No outbound quota configure for network `%s', assigning default bandwidth "
512"%llu\n"
513msgstr ""
514
515#: src/ats/gnunet-ats-solver-eval.c:3552 src/ats-tests/gnunet-solver-eval.c:997
516msgid "solver to use"
517msgstr "solveur utilisé"
518
519#: src/ats/gnunet-ats-solver-eval.c:3557
520#: src/ats-tests/gnunet-solver-eval.c:1003
521#: src/ats-tests/gnunet-solver-eval.c:1008
522msgid "experiment to use"
523msgstr ""
524
525#: src/ats/gnunet-ats-solver-eval.c:3564
526msgid "print logging"
527msgstr "afficher le journal"
528
529#: src/ats/gnunet-ats-solver-eval.c:3569
530msgid "save logging to disk"
531msgstr ""
532
533#: src/ats/gnunet-ats-solver-eval.c:3574
534msgid "disable normalization"
535msgstr ""
536
537#: src/ats/gnunet-service-ats_plugins.c:326
538#, c-format
539msgid ""
540"Could not load %s quota for network `%s': `%s', assigning default bandwidth "
541"%llu\n"
542msgstr ""
543
544#: src/ats/gnunet-service-ats_plugins.c:336
545#, c-format
546msgid "%s quota configured for network `%s' is %llu\n"
547msgstr ""
548
549#: src/ats/gnunet-service-ats_plugins.c:382
550#, c-format
551msgid ""
552"No %s-quota configured for network `%s', assigning default bandwidth %llu\n"
553msgstr ""
554
555#: src/ats/gnunet-service-ats_plugins.c:474
556#, c-format
557msgid "Failed to initialize solver `%s'!\n"
558msgstr ""
559
560#: src/ats/plugin_ats_proportional.c:1142
561#, fuzzy, c-format
562msgid "Invalid %s configuration %f \n"
563msgstr "fornat invalide : « %s »\n"
564
565#: src/ats/plugin_ats_proportional.c:1165
566#, fuzzy, c-format
567msgid "Invalid %s configuration %f\n"
568msgstr "fornat invalide : « %s »\n"
569
570#: src/ats-tests/ats-testing.c:420
571#, c-format
572msgid "Connected master [%u] with slave [%u]\n"
573msgstr ""
574
575#: src/ats-tests/ats-testing.c:427
576#, c-format
577msgid "Failed to connect master peer [%u] with slave [%u]\n"
578msgstr ""
579
580#: src/ats-tests/ats-testing-log.c:899
581msgid "Stop logging\n"
582msgstr "Arrêter la journalisation\n"
583
584#: src/ats-tests/ats-testing-log.c:955
585#, c-format
586msgid "Start logging `%s'\n"
587msgstr "Démarrer la journalisation « %s »\n"
588
589#: src/ats-tests/gnunet-ats-sim.c:92
590#, c-format
591msgid ""
592"Master [%u]: sent: %u KiB in %u sec. = %u KiB/s, received: %u KiB in %u sec. "
593"= %u KiB/s\n"
594msgstr ""
595
596#: src/ats-tool/gnunet-ats.c:299 494#: src/ats-tool/gnunet-ats.c:299
597#, c-format 495#, c-format
598msgid "%u address resolutions had a timeout\n" 496msgid "%u address resolutions had a timeout\n"
@@ -708,6 +606,80 @@ msgstr ""
708msgid "Print information about ATS state" 606msgid "Print information about ATS state"
709msgstr "" 607msgstr ""
710 608
609#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044
610#, c-format
611msgid ""
612"Could not load quota for network `%s': `%s', assigning default bandwidth "
613"%llu\n"
614msgstr ""
615
616#: src/ats/gnunet-ats-solver-eval.c:3011
617#, c-format
618msgid ""
619"No outbound quota configured for network `%s', assigning default bandwidth "
620"%llu\n"
621msgstr ""
622
623#: src/ats/gnunet-ats-solver-eval.c:3063
624#, c-format
625msgid ""
626"No outbound quota configure for network `%s', assigning default bandwidth "
627"%llu\n"
628msgstr ""
629
630#: src/ats/gnunet-ats-solver-eval.c:3552
631msgid "solver to use"
632msgstr "solveur utilisé"
633
634#: src/ats/gnunet-ats-solver-eval.c:3557
635msgid "experiment to use"
636msgstr ""
637
638#: src/ats/gnunet-ats-solver-eval.c:3564
639msgid "print logging"
640msgstr "afficher le journal"
641
642#: src/ats/gnunet-ats-solver-eval.c:3569
643msgid "save logging to disk"
644msgstr ""
645
646#: src/ats/gnunet-ats-solver-eval.c:3574
647msgid "disable normalization"
648msgstr ""
649
650#: src/ats/gnunet-service-ats_plugins.c:326
651#, c-format
652msgid ""
653"Could not load %s quota for network `%s': `%s', assigning default bandwidth "
654"%llu\n"
655msgstr ""
656
657#: src/ats/gnunet-service-ats_plugins.c:336
658#, c-format
659msgid "%s quota configured for network `%s' is %llu\n"
660msgstr ""
661
662#: src/ats/gnunet-service-ats_plugins.c:382
663#, c-format
664msgid ""
665"No %s-quota configured for network `%s', assigning default bandwidth %llu\n"
666msgstr ""
667
668#: src/ats/gnunet-service-ats_plugins.c:474
669#, c-format
670msgid "Failed to initialize solver `%s'!\n"
671msgstr ""
672
673#: src/ats/plugin_ats_proportional.c:1142
674#, fuzzy, c-format
675msgid "Invalid %s configuration %f \n"
676msgstr "fornat invalide : « %s »\n"
677
678#: src/ats/plugin_ats_proportional.c:1165
679#, fuzzy, c-format
680msgid "Invalid %s configuration %f\n"
681msgstr "fornat invalide : « %s »\n"
682
711#: src/auction/gnunet-auction-create.c:163 683#: src/auction/gnunet-auction-create.c:163
712msgid "description of the item to be sold" 684msgid "description of the item to be sold"
713msgstr "" 685msgstr ""
@@ -745,7 +717,7 @@ msgstr ""
745 717
746#: src/auction/gnunet-auction-info.c:77 src/auction/gnunet-auction-join.c:77 718#: src/auction/gnunet-auction-info.c:77 src/auction/gnunet-auction-join.c:77
747#: src/conversation/gnunet-conversation-test.c:256 719#: src/conversation/gnunet-conversation-test.c:256
748#: src/revocation/gnunet-revocation.c:564 src/template/gnunet-template.c:75 720#: src/revocation/gnunet-revocation.c:570 src/template/gnunet-template.c:75
749msgid "help text" 721msgid "help text"
750msgstr "" 722msgstr ""
751 723
@@ -838,6 +810,28 @@ msgstr ""
838msgid "Connection to conversation service lost, trying to reconnect\n" 810msgid "Connection to conversation service lost, trying to reconnect\n"
839msgstr "" 811msgstr ""
840 812
813#: src/conversation/gnunet-conversation-test.c:120
814#, c-format
815msgid ""
816"\n"
817"End of transmission. Have a GNU day.\n"
818msgstr ""
819
820#: src/conversation/gnunet-conversation-test.c:146
821#, c-format
822msgid ""
823"\n"
824"ew are now playing your recording back. If you can hear it, your audio "
825"settings are working..."
826msgstr ""
827
828#: src/conversation/gnunet-conversation-test.c:218
829#, c-format
830msgid ""
831"We will now be recording you for %s. After that time, the recording will be "
832"played back to you..."
833msgstr ""
834
841#: src/conversation/gnunet-conversation.c:264 835#: src/conversation/gnunet-conversation.c:264
842#, c-format 836#, c-format
843msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n" 837msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n"
@@ -1094,30 +1088,8 @@ msgstr ""
1094msgid "Enables having a conversation with other GNUnet users." 1088msgid "Enables having a conversation with other GNUnet users."
1095msgstr "" 1089msgstr ""
1096 1090
1097#: src/conversation/gnunet-conversation-test.c:120
1098#, c-format
1099msgid ""
1100"\n"
1101"End of transmission. Have a GNU day.\n"
1102msgstr ""
1103
1104#: src/conversation/gnunet-conversation-test.c:146
1105#, c-format
1106msgid ""
1107"\n"
1108"We are now playing your recording back. If you can hear it, your audio "
1109"settings are working..."
1110msgstr ""
1111
1112#: src/conversation/gnunet-conversation-test.c:218
1113#, c-format
1114msgid ""
1115"We will now be recording you for %s. After that time, the recording will be "
1116"played back to you..."
1117msgstr ""
1118
1119#: src/conversation/gnunet_gst.c:664
1120#: src/conversation/gnunet-helper-audio-playback-gst.c:363 1091#: src/conversation/gnunet-helper-audio-playback-gst.c:363
1092#: src/conversation/gnunet_gst.c:664
1121#, c-format 1093#, c-format
1122msgid "Read error from STDIN: %d %s\n" 1094msgid "Read error from STDIN: %d %s\n"
1123msgstr "" 1095msgstr ""
@@ -1517,38 +1489,38 @@ msgstr ""
1517msgid "# updates to my type map" 1489msgid "# updates to my type map"
1518msgstr "" 1490msgstr ""
1519 1491
1520#: src/datacache/datacache.c:115 src/datacache/datacache.c:287 1492#: src/datacache/datacache.c:115 src/datacache/datacache.c:299
1521#: src/datastore/gnunet-service-datastore.c:742 1493#: src/datastore/gnunet-service-datastore.c:742
1522msgid "# bytes stored" 1494msgid "# bytes stored"
1523msgstr "" 1495msgstr ""
1524 1496
1525#: src/datacache/datacache.c:119 src/datacache/datacache.c:291 1497#: src/datacache/datacache.c:119 src/datacache/datacache.c:303
1526msgid "# items stored" 1498msgid "# items stored"
1527msgstr "" 1499msgstr ""
1528 1500
1529#: src/datacache/datacache.c:189 1501#: src/datacache/datacache.c:190
1530#, c-format 1502#, c-format
1531msgid "Loading `%s' datacache plugin\n" 1503msgid "Loading `%s' datacache plugin\n"
1532msgstr "" 1504msgstr ""
1533 1505
1534#: src/datacache/datacache.c:197 1506#: src/datacache/datacache.c:208
1535#, c-format 1507#, c-format
1536msgid "Failed to load datacache plugin for `%s'\n" 1508msgid "Failed to load datacache plugin for `%s'\n"
1537msgstr "" 1509msgstr ""
1538 1510
1539#: src/datacache/datacache.c:320 1511#: src/datacache/datacache.c:332
1540msgid "# requests received" 1512msgid "# requests received"
1541msgstr "" 1513msgstr ""
1542 1514
1543#: src/datacache/datacache.c:331 1515#: src/datacache/datacache.c:343
1544msgid "# requests filtered by bloom filter" 1516msgid "# requests filtered by bloom filter"
1545msgstr "" 1517msgstr ""
1546 1518
1547#: src/datacache/datacache.c:358 1519#: src/datacache/datacache.c:370
1548msgid "# requests for random value received" 1520msgid "# requests for random value received"
1549msgstr "" 1521msgstr ""
1550 1522
1551#: src/datacache/datacache.c:388 1523#: src/datacache/datacache.c:400
1552msgid "# proximity search requests received" 1524msgid "# proximity search requests received"
1553msgstr "" 1525msgstr ""
1554 1526
@@ -1882,7 +1854,7 @@ msgstr ""
1882 1854
1883#: src/datastore/plugin_datastore_postgres.c:284 1855#: src/datastore/plugin_datastore_postgres.c:284
1884#: src/datastore/plugin_datastore_postgres.c:897 1856#: src/datastore/plugin_datastore_postgres.c:897
1885msgid "Postgress exec failure" 1857msgid "Postgresql exec failure"
1886msgstr "" 1858msgstr ""
1887 1859
1888#: src/datastore/plugin_datastore_postgres.c:858 1860#: src/datastore/plugin_datastore_postgres.c:858
@@ -1917,14 +1889,25 @@ msgstr ""
1917msgid "sqlite version to old to determine size, assuming zero\n" 1889msgid "sqlite version to old to determine size, assuming zero\n"
1918msgstr "" 1890msgstr ""
1919 1891
1920#: src/datastore/plugin_datastore_sqlite.c:1274 1892#: src/datastore/plugin_datastore_sqlite.c:1266
1893#: src/datastore/plugin_datastore_sqlite.c:1279
1894#, fuzzy
1895msgid "error preparing statement\n"
1896msgstr "Erreur de création du tunnel\n"
1897
1898#: src/datastore/plugin_datastore_sqlite.c:1287
1899#, fuzzy
1900msgid "error stepping\n"
1901msgstr "%s est en cours d'arrêt"
1902
1903#: src/datastore/plugin_datastore_sqlite.c:1295
1921#, c-format 1904#, c-format
1922msgid "" 1905msgid ""
1923"Using sqlite page utilization to estimate payload (%llu pages of size %llu " 1906"Using sqlite page utilization to estimate payload (%llu pages of size %llu "
1924"bytes)\n" 1907"bytes)\n"
1925msgstr "" 1908msgstr ""
1926 1909
1927#: src/datastore/plugin_datastore_sqlite.c:1316 1910#: src/datastore/plugin_datastore_sqlite.c:1337
1928#: src/namecache/plugin_namecache_sqlite.c:564 1911#: src/namecache/plugin_namecache_sqlite.c:564
1929#: src/namestore/plugin_namestore_sqlite.c:765 1912#: src/namestore/plugin_namestore_sqlite.c:765
1930msgid "Sqlite database running\n" 1913msgid "Sqlite database running\n"
@@ -2000,53 +1983,6 @@ msgstr ""
2000msgid "Prints all packets that go through the DHT." 1983msgid "Prints all packets that go through the DHT."
2001msgstr "" 1984msgstr ""
2002 1985
2003#: src/dht/gnunet_dht_profiler.c:922 src/testbed/gnunet-testbed-profiler.c:255
2004#, c-format
2005msgid "Exiting as the number of peers is %u\n"
2006msgstr ""
2007
2008#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3136
2009#, fuzzy
2010msgid "number of peers to start"
2011msgstr "nombre de valeurs"
2012
2013#: src/dht/gnunet_dht_profiler.c:961
2014msgid "number of PUTs to perform per peer"
2015msgstr ""
2016
2017#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872
2018#: src/testbed/gnunet-testbed-profiler.c:305
2019msgid "name of the file with the login information for the testbed"
2020msgstr ""
2021
2022#: src/dht/gnunet_dht_profiler.c:973
2023msgid "delay between rounds for collecting statistics (default: 30 sec)"
2024msgstr ""
2025
2026#: src/dht/gnunet_dht_profiler.c:979
2027msgid "delay to start doing PUTs (default: 1 sec)"
2028msgstr ""
2029
2030#: src/dht/gnunet_dht_profiler.c:985
2031msgid "delay to start doing GETs (default: 5 min)"
2032msgstr ""
2033
2034#: src/dht/gnunet_dht_profiler.c:990
2035msgid "replication degree for DHT PUTs"
2036msgstr ""
2037
2038#: src/dht/gnunet_dht_profiler.c:996
2039msgid "chance that a peer is selected at random for PUTs"
2040msgstr ""
2041
2042#: src/dht/gnunet_dht_profiler.c:1002
2043msgid "timeout for DHT PUT and GET requests (default: 1 min)"
2044msgstr ""
2045
2046#: src/dht/gnunet_dht_profiler.c:1023
2047msgid "Measure quality and performance of the DHT service."
2048msgstr ""
2049
2050#: src/dht/gnunet-dht-put.c:133 1986#: src/dht/gnunet-dht-put.c:133
2051msgid "Must provide KEY and DATA for DHT put!\n" 1987msgid "Must provide KEY and DATA for DHT put!\n"
2052msgstr "" 1988msgstr ""
@@ -2172,87 +2108,87 @@ msgstr ""
2172msgid "# requests TTL-dropped" 2108msgid "# requests TTL-dropped"
2173msgstr "" 2109msgstr ""
2174 2110
2175#: src/dht/gnunet-service-dht_neighbours.c:1052 2111#: src/dht/gnunet-service-dht_neighbours.c:1035
2176#: src/dht/gnunet-service-dht_neighbours.c:1096 2112#: src/dht/gnunet-service-dht_neighbours.c:1072
2177msgid "# Peers excluded from routing due to Bloomfilter" 2113msgid "# Peers excluded from routing due to Bloomfilter"
2178msgstr "" 2114msgstr ""
2179 2115
2180#: src/dht/gnunet-service-dht_neighbours.c:1069 2116#: src/dht/gnunet-service-dht_neighbours.c:1045
2181#: src/dht/gnunet-service-dht_neighbours.c:1112 2117#: src/dht/gnunet-service-dht_neighbours.c:1088
2182msgid "# Peer selection failed" 2118msgid "# Peer selection failed"
2183msgstr "" 2119msgstr ""
2184 2120
2185#: src/dht/gnunet-service-dht_neighbours.c:1270 2121#: src/dht/gnunet-service-dht_neighbours.c:1246
2186msgid "# PUT requests routed" 2122msgid "# PUT requests routed"
2187msgstr "" 2123msgstr ""
2188 2124
2189#: src/dht/gnunet-service-dht_neighbours.c:1304 2125#: src/dht/gnunet-service-dht_neighbours.c:1280
2190msgid "# PUT messages queued for transmission" 2126msgid "# PUT messages queued for transmission"
2191msgstr "" 2127msgstr ""
2192 2128
2193#: src/dht/gnunet-service-dht_neighbours.c:1316 2129#: src/dht/gnunet-service-dht_neighbours.c:1292
2194#: src/dht/gnunet-service-dht_neighbours.c:1458 2130#: src/dht/gnunet-service-dht_neighbours.c:1434
2195#: src/dht/gnunet-service-dht_neighbours.c:1562 2131#: src/dht/gnunet-service-dht_neighbours.c:1538
2196msgid "# P2P messages dropped due to full queue" 2132msgid "# P2P messages dropped due to full queue"
2197msgstr "" 2133msgstr ""
2198 2134
2199#: src/dht/gnunet-service-dht_neighbours.c:1401 2135#: src/dht/gnunet-service-dht_neighbours.c:1377
2200msgid "# GET requests routed" 2136msgid "# GET requests routed"
2201msgstr "" 2137msgstr ""
2202 2138
2203#: src/dht/gnunet-service-dht_neighbours.c:1445 2139#: src/dht/gnunet-service-dht_neighbours.c:1421
2204msgid "# GET messages queued for transmission" 2140msgid "# GET messages queued for transmission"
2205msgstr "" 2141msgstr ""
2206 2142
2207#: src/dht/gnunet-service-dht_neighbours.c:1577 2143#: src/dht/gnunet-service-dht_neighbours.c:1553
2208msgid "# RESULT messages queued for transmission" 2144msgid "# RESULT messages queued for transmission"
2209msgstr "" 2145msgstr ""
2210 2146
2211#: src/dht/gnunet-service-dht_neighbours.c:1680 2147#: src/dht/gnunet-service-dht_neighbours.c:1656
2212msgid "# Expired PUTs discarded" 2148msgid "# Expired PUTs discarded"
2213msgstr "" 2149msgstr ""
2214 2150
2215#: src/dht/gnunet-service-dht_neighbours.c:1688 2151#: src/dht/gnunet-service-dht_neighbours.c:1664
2216msgid "# P2P PUT requests received" 2152msgid "# P2P PUT requests received"
2217msgstr "" 2153msgstr ""
2218 2154
2219#: src/dht/gnunet-service-dht_neighbours.c:1692 2155#: src/dht/gnunet-service-dht_neighbours.c:1668
2220msgid "# P2P PUT bytes received" 2156msgid "# P2P PUT bytes received"
2221msgstr "" 2157msgstr ""
2222 2158
2223#: src/dht/gnunet-service-dht_neighbours.c:1924 2159#: src/dht/gnunet-service-dht_neighbours.c:1900
2224msgid "# FIND PEER requests ignored due to Bloomfilter" 2160msgid "# FIND PEER requests ignored due to Bloomfilter"
2225msgstr "" 2161msgstr ""
2226 2162
2227#: src/dht/gnunet-service-dht_neighbours.c:1933 2163#: src/dht/gnunet-service-dht_neighbours.c:1909
2228msgid "# FIND PEER requests ignored due to lack of HELLO" 2164msgid "# FIND PEER requests ignored due to lack of HELLO"
2229msgstr "" 2165msgstr ""
2230 2166
2231#: src/dht/gnunet-service-dht_neighbours.c:2096 2167#: src/dht/gnunet-service-dht_neighbours.c:2072
2232msgid "# P2P GET requests received" 2168msgid "# P2P GET requests received"
2233msgstr "" 2169msgstr ""
2234 2170
2235#: src/dht/gnunet-service-dht_neighbours.c:2100 2171#: src/dht/gnunet-service-dht_neighbours.c:2076
2236msgid "# P2P GET bytes received" 2172msgid "# P2P GET bytes received"
2237msgstr "" 2173msgstr ""
2238 2174
2239#: src/dht/gnunet-service-dht_neighbours.c:2166 2175#: src/dht/gnunet-service-dht_neighbours.c:2142
2240msgid "# P2P FIND PEER requests processed" 2176msgid "# P2P FIND PEER requests processed"
2241msgstr "" 2177msgstr ""
2242 2178
2243#: src/dht/gnunet-service-dht_neighbours.c:2187 2179#: src/dht/gnunet-service-dht_neighbours.c:2163
2244msgid "# P2P GET requests ONLY routed" 2180msgid "# P2P GET requests ONLY routed"
2245msgstr "" 2181msgstr ""
2246 2182
2247#: src/dht/gnunet-service-dht_neighbours.c:2365 2183#: src/dht/gnunet-service-dht_neighbours.c:2341
2248msgid "# Expired results discarded" 2184msgid "# Expired results discarded"
2249msgstr "" 2185msgstr ""
2250 2186
2251#: src/dht/gnunet-service-dht_neighbours.c:2382 2187#: src/dht/gnunet-service-dht_neighbours.c:2358
2252msgid "# P2P RESULTS received" 2188msgid "# P2P RESULTS received"
2253msgstr "" 2189msgstr ""
2254 2190
2255#: src/dht/gnunet-service-dht_neighbours.c:2386 2191#: src/dht/gnunet-service-dht_neighbours.c:2362
2256msgid "# P2P RESULT bytes received" 2192msgid "# P2P RESULT bytes received"
2257msgstr "" 2193msgstr ""
2258 2194
@@ -2292,6 +2228,53 @@ msgstr ""
2292msgid "# DHT requests combined" 2228msgid "# DHT requests combined"
2293msgstr "" 2229msgstr ""
2294 2230
2231#: src/dht/gnunet_dht_profiler.c:922 src/testbed/gnunet-testbed-profiler.c:255
2232#, c-format
2233msgid "Exiting as the number of peers is %u\n"
2234msgstr ""
2235
2236#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3136
2237#, fuzzy
2238msgid "number of peers to start"
2239msgstr "nombre de valeurs"
2240
2241#: src/dht/gnunet_dht_profiler.c:961
2242msgid "number of PUTs to perform per peer"
2243msgstr ""
2244
2245#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872
2246#: src/testbed/gnunet-testbed-profiler.c:305
2247msgid "name of the file with the login information for the testbed"
2248msgstr ""
2249
2250#: src/dht/gnunet_dht_profiler.c:973
2251msgid "delay between rounds for collecting statistics (default: 30 sec)"
2252msgstr ""
2253
2254#: src/dht/gnunet_dht_profiler.c:979
2255msgid "delay to start doing PUTs (default: 1 sec)"
2256msgstr ""
2257
2258#: src/dht/gnunet_dht_profiler.c:985
2259msgid "delay to start doing GETs (default: 5 min)"
2260msgstr ""
2261
2262#: src/dht/gnunet_dht_profiler.c:990
2263msgid "replication degree for DHT PUTs"
2264msgstr ""
2265
2266#: src/dht/gnunet_dht_profiler.c:996
2267msgid "chance that a peer is selected at random for PUTs"
2268msgstr ""
2269
2270#: src/dht/gnunet_dht_profiler.c:1002
2271msgid "timeout for DHT PUT and GET requests (default: 1 min)"
2272msgstr ""
2273
2274#: src/dht/gnunet_dht_profiler.c:1023
2275msgid "Measure quality and performance of the DHT service."
2276msgstr ""
2277
2295#: src/dht/plugin_block_dht.c:189 2278#: src/dht/plugin_block_dht.c:189
2296#, c-format 2279#, c-format
2297msgid "Block not of type %u\n" 2280msgid "Block not of type %u\n"
@@ -2707,7 +2690,7 @@ msgstr ""
2707#: src/fs/fs_download.c:346 2690#: src/fs/fs_download.c:346
2708#, c-format 2691#, c-format
2709msgid "" 2692msgid ""
2710"Failed to access full directroy contents of `%s' for recursive download\n" 2693"Failed to access full directory contents of `%s' for recursive download\n"
2711msgstr "" 2694msgstr ""
2712 2695
2713#: src/fs/fs_download.c:528 src/fs/fs_download.c:541 2696#: src/fs/fs_download.c:528 src/fs/fs_download.c:541
@@ -3192,14 +3175,6 @@ msgid ""
3192"chk/...)" 3175"chk/...)"
3193msgstr "" 3176msgstr ""
3194 3177
3195#: src/fs/gnunet-fs.c:128
3196msgid "print a list of all indexed files"
3197msgstr ""
3198
3199#: src/fs/gnunet-fs.c:141
3200msgid "Special file-sharing operations"
3201msgstr ""
3202
3203#: src/fs/gnunet-fs-profiler.c:211 3178#: src/fs/gnunet-fs-profiler.c:211
3204msgid "run the experiment with COUNT peers" 3179msgid "run the experiment with COUNT peers"
3205msgstr "" 3180msgstr ""
@@ -3216,6 +3191,14 @@ msgstr ""
3216msgid "run a testbed to measure file-sharing performance" 3191msgid "run a testbed to measure file-sharing performance"
3217msgstr "" 3192msgstr ""
3218 3193
3194#: src/fs/gnunet-fs.c:128
3195msgid "print a list of all indexed files"
3196msgstr ""
3197
3198#: src/fs/gnunet-fs.c:141
3199msgid "Special file-sharing operations"
3200msgstr ""
3201
3219#: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:234 3202#: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:234
3220#, c-format 3203#, c-format
3221msgid "Publishing `%s' at %llu/%llu (%s remaining)\n" 3204msgid "Publishing `%s' at %llu/%llu (%s remaining)\n"
@@ -3866,50 +3849,7 @@ msgstr ""
3866msgid "look for GNS2DNS records instead of ANY" 3849msgid "look for GNS2DNS records instead of ANY"
3867msgstr "" 3850msgstr ""
3868 3851
3869#: src/gns/gnunet-gns.c:257 3852#: src/gns/gnunet-gns-import.c:490
3870#, c-format
3871msgid "`%s' is not a valid DNS domain name\n"
3872msgstr ""
3873
3874#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254
3875#, c-format
3876msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n"
3877msgstr ""
3878
3879#: src/gns/gnunet-gns.c:281
3880msgid "Cannot resolve using GNS: GNUnet peer not running\n"
3881msgstr ""
3882
3883#: src/gns/gnunet-gns.c:305
3884#, c-format
3885msgid "Invalid typename specified, assuming `ANY'\n"
3886msgstr ""
3887
3888#: src/gns/gnunet-gns.c:340
3889msgid "Lookup a record for the given name"
3890msgstr ""
3891
3892#: src/gns/gnunet-gns.c:346
3893msgid "Specify the type of the record to lookup"
3894msgstr ""
3895
3896#: src/gns/gnunet-gns.c:352
3897msgid "Specify a timeout for the lookup"
3898msgstr ""
3899
3900#: src/gns/gnunet-gns.c:356
3901msgid "No unneeded output"
3902msgstr ""
3903
3904#: src/gns/gnunet-gns.c:361
3905msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8"
3906msgstr ""
3907
3908#: src/gns/gnunet-gns.c:375
3909msgid "GNUnet GNS resolver tool"
3910msgstr ""
3911
3912#: src/gns/gnunet-gns-import.c:491
3913msgid "This program will import some GNS authorities into your GNS namestore." 3853msgid "This program will import some GNS authorities into your GNS namestore."
3914msgstr "" 3854msgstr ""
3915 3855
@@ -4028,6 +3968,49 @@ msgstr ""
4028msgid "GNUnet GNS proxy" 3968msgid "GNUnet GNS proxy"
4029msgstr "" 3969msgstr ""
4030 3970
3971#: src/gns/gnunet-gns.c:257
3972#, c-format
3973msgid "`%s' is not a valid DNS domain name\n"
3974msgstr ""
3975
3976#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254
3977#, c-format
3978msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n"
3979msgstr ""
3980
3981#: src/gns/gnunet-gns.c:281
3982msgid "Cannot resolve using GNS: GNUnet peer not running\n"
3983msgstr ""
3984
3985#: src/gns/gnunet-gns.c:305
3986#, c-format
3987msgid "Invalid typename specified, assuming `ANY'\n"
3988msgstr ""
3989
3990#: src/gns/gnunet-gns.c:340
3991msgid "Lookup a record for the given name"
3992msgstr ""
3993
3994#: src/gns/gnunet-gns.c:346
3995msgid "Specify the type of the record to lookup"
3996msgstr ""
3997
3998#: src/gns/gnunet-gns.c:352
3999msgid "Specify a timeout for the lookup"
4000msgstr ""
4001
4002#: src/gns/gnunet-gns.c:356
4003msgid "No unneeded output"
4004msgstr ""
4005
4006#: src/gns/gnunet-gns.c:361
4007msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8"
4008msgstr ""
4009
4010#: src/gns/gnunet-gns.c:375
4011msgid "GNUnet GNS resolver tool"
4012msgstr ""
4013
4031#: src/gns/gnunet-service-gns.c:505 4014#: src/gns/gnunet-service-gns.c:505
4032msgid "Properly base32-encoded public key required" 4015msgid "Properly base32-encoded public key required"
4033msgstr "" 4016msgstr ""
@@ -4037,8 +4020,8 @@ msgid "Failed to connect to the namecache!\n"
4037msgstr "" 4020msgstr ""
4038 4021
4039#: src/gns/gnunet-service-gns.c:560 4022#: src/gns/gnunet-service-gns.c:560
4040#: src/zonemaster/gnunet-service-zonemaster.c:885
4041#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442 4023#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442
4024#: src/zonemaster/gnunet-service-zonemaster.c:885
4042msgid "Could not connect to DHT!\n" 4025msgid "Could not connect to DHT!\n"
4043msgstr "" 4026msgstr ""
4044 4027
@@ -4580,52 +4563,52 @@ msgstr ""
4580msgid "Failed to set default ego: %s\n" 4563msgid "Failed to set default ego: %s\n"
4581msgstr "" 4564msgstr ""
4582 4565
4583#: src/identity/gnunet-identity.c:462 4566#: src/identity/gnunet-identity.c:461
4584msgid "create ego NAME" 4567msgid "create ego NAME"
4585msgstr "" 4568msgstr ""
4586 4569
4587#: src/identity/gnunet-identity.c:467 4570#: src/identity/gnunet-identity.c:466
4588msgid "delete ego NAME " 4571msgid "delete ego NAME "
4589msgstr "" 4572msgstr ""
4590 4573
4591#: src/identity/gnunet-identity.c:473 4574#: src/identity/gnunet-identity.c:472
4592msgid "" 4575msgid ""
4593"set the private key for the identity to PRIVATE_KEY (use together with -C)" 4576"set the private key for the identity to PRIVATE_KEY (use together with -C)"
4594msgstr "" 4577msgstr ""
4595 4578
4596#: src/identity/gnunet-identity.c:478 4579#: src/identity/gnunet-identity.c:477
4597msgid "generate an EdDSA identity. (use together with -C) EXPERIMENTAL" 4580msgid "generate an EdDSA identity. (use together with -C) EXPERIMENTAL"
4598msgstr "" 4581msgstr ""
4599 4582
4600#: src/identity/gnunet-identity.c:482 4583#: src/identity/gnunet-identity.c:481
4601msgid "display all egos" 4584msgid "display all egos"
4602msgstr "" 4585msgstr ""
4603 4586
4604#: src/identity/gnunet-identity.c:486 4587#: src/identity/gnunet-identity.c:485
4605#, fuzzy 4588#, fuzzy
4606msgid "reduce output" 4589msgid "reduce output"
4607msgstr "sortie verbeuse" 4590msgstr "sortie verbeuse"
4608 4591
4609#: src/identity/gnunet-identity.c:493 4592#: src/identity/gnunet-identity.c:492
4610msgid "" 4593msgid ""
4611"set default identity to NAME for a subsystem SUBSYSTEM (use together with -" 4594"set default identity to NAME for a subsystem SUBSYSTEM (use together with -"
4612"s) or restrict results to NAME (use together with -d)" 4595"s) or restrict results to NAME (use together with -d)"
4613msgstr "" 4596msgstr ""
4614 4597
4615#: src/identity/gnunet-identity.c:497 4598#: src/identity/gnunet-identity.c:496
4616msgid "run in monitor mode egos" 4599msgid "run in monitor mode egos"
4617msgstr "" 4600msgstr ""
4618 4601
4619#: src/identity/gnunet-identity.c:501 4602#: src/identity/gnunet-identity.c:500
4620msgid "display private keys as well" 4603msgid "display private keys as well"
4621msgstr "" 4604msgstr ""
4622 4605
4623#: src/identity/gnunet-identity.c:508 4606#: src/identity/gnunet-identity.c:507
4624msgid "" 4607msgid ""
4625"set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)" 4608"set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)"
4626msgstr "" 4609msgstr ""
4627 4610
4628#: src/identity/gnunet-identity.c:523 4611#: src/identity/gnunet-identity.c:522
4629msgid "Maintain egos" 4612msgid "Maintain egos"
4630msgstr "" 4613msgstr ""
4631 4614
@@ -4676,11 +4659,11 @@ msgstr ""
4676msgid "Failed to create directory `%s' for storing egos\n" 4659msgid "Failed to create directory `%s' for storing egos\n"
4677msgstr "" 4660msgstr ""
4678 4661
4679#: src/identity/plugin_rest_identity.c:1385 4662#: src/identity/plugin_rest_identity.c:1401
4680msgid "Identity REST API initialized\n" 4663msgid "Identity REST API initialized\n"
4681msgstr "" 4664msgstr ""
4682 4665
4683#: src/json/json.c:139 4666#: src/json/json.c:120
4684#, fuzzy, c-format 4667#, fuzzy, c-format
4685msgid "Failed to parse JSON in option `%s': %s (%s)\n" 4668msgid "Failed to parse JSON in option `%s': %s (%s)\n"
4686msgstr "Résolution de « %s » échouée : %s\n" 4669msgstr "Résolution de « %s » échouée : %s\n"
@@ -4737,11 +4720,11 @@ msgstr ""
4737msgid "GNUnet zone manipulation tool" 4720msgid "GNUnet zone manipulation tool"
4738msgstr "" 4721msgstr ""
4739 4722
4740#: src/namecache/namecache_api.c:285 4723#: src/namecache/namecache_api.c:286
4741msgid "Namecache failed to cache block" 4724msgid "Namecache failed to cache block"
4742msgstr "" 4725msgstr ""
4743 4726
4744#: src/namecache/namecache_api.c:373 4727#: src/namecache/namecache_api.c:374
4745msgid "Error communicating with namecache service" 4728msgid "Error communicating with namecache service"
4746msgstr "" 4729msgstr ""
4747 4730
@@ -4780,6 +4763,110 @@ msgstr ""
4780msgid "Failed to setup database at `%s'\n" 4763msgid "Failed to setup database at `%s'\n"
4781msgstr "Échec du démarrage de %s\n" 4764msgstr "Échec du démarrage de %s\n"
4782 4765
4766#: src/namestore/gnunet-namestore-fcfsd.c:359
4767msgid "can not search the namestore"
4768msgstr ""
4769
4770#: src/namestore/gnunet-namestore-fcfsd.c:413
4771#: src/namestore/gnunet-namestore-fcfsd.c:554
4772msgid "unable to scan namestore"
4773msgstr ""
4774
4775#: src/namestore/gnunet-namestore-fcfsd.c:441
4776#, fuzzy, c-format
4777msgid "Failed to create record for `%s': %s\n"
4778msgstr "Résolution de « %s » échouée : %s\n"
4779
4780#: src/namestore/gnunet-namestore-fcfsd.c:453
4781#, fuzzy
4782msgid "no errors"
4783msgstr "erreur unconnue."
4784
4785#: src/namestore/gnunet-namestore-fcfsd.c:489
4786#, c-format
4787msgid "The requested key `%s' exists as `%s'\n"
4788msgstr ""
4789
4790#: src/namestore/gnunet-namestore-fcfsd.c:496
4791msgid "key exists"
4792msgstr ""
4793
4794#: src/namestore/gnunet-namestore-fcfsd.c:513
4795#, fuzzy
4796msgid "Error creating record data\n"
4797msgstr "Erreur de création du tunnel\n"
4798
4799#: src/namestore/gnunet-namestore-fcfsd.c:517
4800#, fuzzy
4801msgid "unable to store record"
4802msgstr "Échec du démarrage de %s\n"
4803
4804#: src/namestore/gnunet-namestore-fcfsd.c:588
4805#, c-format
4806msgid "Requested name `%s' exists with `%u' records\n"
4807msgstr ""
4808
4809#: src/namestore/gnunet-namestore-fcfsd.c:594
4810msgid "name exists\n"
4811msgstr ""
4812
4813#: src/namestore/gnunet-namestore-fcfsd.c:780
4814msgid "unable to process submitted data"
4815msgstr ""
4816
4817#: src/namestore/gnunet-namestore-fcfsd.c:787
4818msgid "the submitted data is invalid"
4819msgstr ""
4820
4821#: src/namestore/gnunet-namestore-fcfsd.c:806
4822#, fuzzy
4823msgid "invalid parameters"
4824msgstr "Argument invalide « %s »\n"
4825
4826#: src/namestore/gnunet-namestore-fcfsd.c:823
4827#, fuzzy
4828msgid "invalid name"
4829msgstr "Argument invalide « %s »\n"
4830
4831#: src/namestore/gnunet-namestore-fcfsd.c:834
4832#, fuzzy, c-format
4833msgid "Unable to parse key %s\n"
4834msgstr "Résolution de « %s » échouée\n"
4835
4836#: src/namestore/gnunet-namestore-fcfsd.c:838
4837#, fuzzy
4838msgid "unable to parse key"
4839msgstr "Résolution de « %s » échouée\n"
4840
4841#: src/namestore/gnunet-namestore-fcfsd.c:949
4842msgid "No ego configured for `fcfsd` subsystem\n"
4843msgstr ""
4844
4845#: src/namestore/gnunet-namestore-fcfsd.c:974
4846msgid "Failed to start HTTP server\n"
4847msgstr ""
4848
4849#: src/namestore/gnunet-namestore-fcfsd.c:1058
4850msgid "No port specified, using default value\n"
4851msgstr ""
4852
4853#: src/namestore/gnunet-namestore-fcfsd.c:1076
4854msgid "Failed to connect to identity\n"
4855msgstr ""
4856
4857#: src/namestore/gnunet-namestore-fcfsd.c:1100
4858#, fuzzy
4859msgid "Unable to set up the daemon\n"
4860msgstr "Résolution de « %s » échouée\n"
4861
4862#: src/namestore/gnunet-namestore-fcfsd.c:1123
4863msgid "name of the zone managed by FCFSD"
4864msgstr ""
4865
4866#: src/namestore/gnunet-namestore-fcfsd.c:1132
4867msgid "GNU Name System First-Come-First-Served name registration service"
4868msgstr ""
4869
4783#: src/namestore/gnunet-namestore.c:334 4870#: src/namestore/gnunet-namestore.c:334
4784#, c-format 4871#, c-format
4785msgid "Adding record failed: %s\n" 4872msgid "Adding record failed: %s\n"
@@ -5017,83 +5104,16 @@ msgstr ""
5017msgid "name of the ego controlling the zone" 5104msgid "name of the ego controlling the zone"
5018msgstr "" 5105msgstr ""
5019 5106
5020#: src/namestore/gnunet-namestore-fcfsd.c:552
5021#, c-format
5022msgid "Unsupported form value `%s'\n"
5023msgstr ""
5024
5025#: src/namestore/gnunet-namestore-fcfsd.c:579
5026#, c-format
5027msgid "Failed to create record for domain `%s': %s\n"
5028msgstr ""
5029
5030#: src/namestore/gnunet-namestore-fcfsd.c:600
5031msgid "Error when mapping zone to name\n"
5032msgstr ""
5033
5034#: src/namestore/gnunet-namestore-fcfsd.c:633
5035#, c-format
5036msgid "Found existing name `%s' for the given key\n"
5037msgstr ""
5038
5039#: src/namestore/gnunet-namestore-fcfsd.c:646
5040#, fuzzy
5041msgid "Error creating record data.\n"
5042msgstr "Erreur de création du tunnel\n"
5043
5044#: src/namestore/gnunet-namestore-fcfsd.c:707
5045#, c-format
5046msgid "Found %u existing records for domain `%s'\n"
5047msgstr ""
5048
5049#: src/namestore/gnunet-namestore-fcfsd.c:796
5050#, c-format
5051msgid "Failed to create page for `%s'\n"
5052msgstr ""
5053
5054#: src/namestore/gnunet-namestore-fcfsd.c:815
5055#, c-format
5056msgid "Failed to setup post processor for `%s'\n"
5057msgstr ""
5058
5059#: src/namestore/gnunet-namestore-fcfsd.c:850
5060msgid "Domain name must not contain `.'\n"
5061msgstr ""
5062
5063#: src/namestore/gnunet-namestore-fcfsd.c:859
5064msgid "Domain name must not contain `+'\n"
5065msgstr ""
5066
5067#: src/namestore/gnunet-namestore-fcfsd.c:1094
5068msgid "No ego configured for `fcfsd` subsystem\n"
5069msgstr ""
5070
5071#: src/namestore/gnunet-namestore-fcfsd.c:1125
5072msgid "Failed to start HTTP server\n"
5073msgstr ""
5074
5075#: src/namestore/gnunet-namestore-fcfsd.c:1173
5076msgid "Failed to connect to identity\n"
5077msgstr ""
5078
5079#: src/namestore/gnunet-namestore-fcfsd.c:1200
5080msgid "name of the zone that is to be managed by FCFSD"
5081msgstr ""
5082
5083#: src/namestore/gnunet-namestore-fcfsd.c:1220
5084msgid "GNU Name System First Come First Serve name registration service"
5085msgstr ""
5086
5087#: src/namestore/gnunet-service-namestore.c:871 5107#: src/namestore/gnunet-service-namestore.c:871
5088#, c-format 5108#, c-format
5089msgid "Failed to replicate block in namecache: %s\n" 5109msgid "Failed to replicate block in namecache: %s\n"
5090msgstr "" 5110msgstr ""
5091 5111
5092#: src/namestore/gnunet-zoneimport.c:1848 5112#: src/namestore/gnunet-zoneimport.c:1847
5093msgid "size to use for the main hash map" 5113msgid "size to use for the main hash map"
5094msgstr "" 5114msgstr ""
5095 5115
5096#: src/namestore/gnunet-zoneimport.c:1854 5116#: src/namestore/gnunet-zoneimport.c:1853
5097msgid "minimum expiration time we assume for imported records" 5117msgid "minimum expiration time we assume for imported records"
5098msgstr "" 5118msgstr ""
5099 5119
@@ -5115,7 +5135,7 @@ msgstr ""
5115msgid "Flat file database running\n" 5135msgid "Flat file database running\n"
5116msgstr "" 5136msgstr ""
5117 5137
5118#: src/namestore/plugin_rest_namestore.c:1105 5138#: src/namestore/plugin_rest_namestore.c:1111
5119msgid "Namestore REST API initialized\n" 5139msgid "Namestore REST API initialized\n"
5120msgstr "" 5140msgstr ""
5121 5141
@@ -5390,10 +5410,6 @@ msgstr ""
5390msgid "`upnpc' command not found\n" 5410msgid "`upnpc' command not found\n"
5391msgstr "" 5411msgstr ""
5392 5412
5393#: src/nse/gnunet-nse.c:124
5394msgid "Show network size estimates from NSE service."
5395msgstr ""
5396
5397#: src/nse/gnunet-nse-profiler.c:857 5413#: src/nse/gnunet-nse-profiler.c:857
5398msgid "limit to the number of connections to NSE services, 0 for none" 5414msgid "limit to the number of connections to NSE services, 0 for none"
5399msgstr "" 5415msgstr ""
@@ -5418,65 +5434,15 @@ msgstr ""
5418msgid "Measure quality and performance of the NSE service." 5434msgid "Measure quality and performance of the NSE service."
5419msgstr "" 5435msgstr ""
5420 5436
5437#: src/nse/gnunet-nse.c:124
5438msgid "Show network size estimates from NSE service."
5439msgstr ""
5440
5421#: src/nse/gnunet-service-nse.c:1450 5441#: src/nse/gnunet-service-nse.c:1450
5422#: src/revocation/gnunet-service-revocation.c:883 src/util/gnunet-scrypt.c:260 5442#: src/revocation/gnunet-service-revocation.c:883 src/util/gnunet-scrypt.c:260
5423msgid "Value is too large.\n" 5443msgid "Value is too large.\n"
5424msgstr "" 5444msgstr ""
5425 5445
5426#: src/peerinfo/gnunet-service-peerinfo.c:175
5427#, c-format
5428msgid "Removing expired address of transport `%s'\n"
5429msgstr ""
5430
5431#: src/peerinfo/gnunet-service-peerinfo.c:306
5432#, c-format
5433msgid "Failed to parse HELLO in file `%s': %s\n"
5434msgstr ""
5435
5436#: src/peerinfo/gnunet-service-peerinfo.c:323
5437#: src/peerinfo/gnunet-service-peerinfo.c:348
5438#, c-format
5439msgid "Failed to parse HELLO in file `%s'\n"
5440msgstr ""
5441
5442#: src/peerinfo/gnunet-service-peerinfo.c:426
5443msgid "# peers known"
5444msgstr ""
5445
5446#: src/peerinfo/gnunet-service-peerinfo.c:468
5447#, c-format
5448msgid ""
5449"File `%s' in directory `%s' does not match naming convention. Removed.\n"
5450msgstr ""
5451
5452#: src/peerinfo/gnunet-service-peerinfo.c:624
5453#, c-format
5454msgid "Scanning directory `%s'\n"
5455msgstr ""
5456
5457#: src/peerinfo/gnunet-service-peerinfo.c:631
5458#, c-format
5459msgid "Still no peers found in `%s'!\n"
5460msgstr ""
5461
5462#: src/peerinfo/gnunet-service-peerinfo.c:1027
5463#, c-format
5464msgid "Cleaning up directory `%s'\n"
5465msgstr ""
5466
5467#: src/peerinfo/gnunet-service-peerinfo.c:1322
5468#, c-format
5469msgid "Importing HELLOs from `%s'\n"
5470msgstr ""
5471
5472#: src/peerinfo/gnunet-service-peerinfo.c:1335
5473msgid "Skipping import of included HELLOs\n"
5474msgstr ""
5475
5476#: src/peerinfo/peerinfo_api.c:217
5477msgid "Failed to receive response from `PEERINFO' service."
5478msgstr ""
5479
5480#: src/peerinfo-tool/gnunet-peerinfo.c:237 5446#: src/peerinfo-tool/gnunet-peerinfo.c:237
5481#, c-format 5447#, c-format
5482msgid "%sPeer `%s'\n" 5448msgid "%sPeer `%s'\n"
@@ -5571,6 +5537,60 @@ msgstr ""
5571msgid "Peerinfo REST API initialized\n" 5537msgid "Peerinfo REST API initialized\n"
5572msgstr "" 5538msgstr ""
5573 5539
5540#: src/peerinfo/gnunet-service-peerinfo.c:175
5541#, c-format
5542msgid "Removing expired address of transport `%s'\n"
5543msgstr ""
5544
5545#: src/peerinfo/gnunet-service-peerinfo.c:306
5546#, c-format
5547msgid "Failed to parse HELLO in file `%s': %s\n"
5548msgstr ""
5549
5550#: src/peerinfo/gnunet-service-peerinfo.c:323
5551#: src/peerinfo/gnunet-service-peerinfo.c:348
5552#, c-format
5553msgid "Failed to parse HELLO in file `%s'\n"
5554msgstr ""
5555
5556#: src/peerinfo/gnunet-service-peerinfo.c:426
5557msgid "# peers known"
5558msgstr ""
5559
5560#: src/peerinfo/gnunet-service-peerinfo.c:468
5561#, c-format
5562msgid ""
5563"File `%s' in directory `%s' does not match naming convention. Removed.\n"
5564msgstr ""
5565
5566#: src/peerinfo/gnunet-service-peerinfo.c:624
5567#, c-format
5568msgid "Scanning directory `%s'\n"
5569msgstr ""
5570
5571#: src/peerinfo/gnunet-service-peerinfo.c:631
5572#, c-format
5573msgid "Still no peers found in `%s'!\n"
5574msgstr ""
5575
5576#: src/peerinfo/gnunet-service-peerinfo.c:1027
5577#, c-format
5578msgid "Cleaning up directory `%s'\n"
5579msgstr ""
5580
5581#: src/peerinfo/gnunet-service-peerinfo.c:1322
5582#, c-format
5583msgid "Importing HELLOs from `%s'\n"
5584msgstr ""
5585
5586#: src/peerinfo/gnunet-service-peerinfo.c:1335
5587msgid "Skipping import of included HELLOs\n"
5588msgstr ""
5589
5590#: src/peerinfo/peerinfo_api.c:217
5591msgid "Failed to receive response from `PEERINFO' service."
5592msgstr ""
5593
5574#: src/peerstore/gnunet-peerstore.c:92 5594#: src/peerstore/gnunet-peerstore.c:92
5575msgid "peerstore" 5595msgid "peerstore"
5576msgstr "" 5596msgstr ""
@@ -5754,11 +5774,11 @@ msgstr ""
5754msgid "re:claimID command line tool" 5774msgid "re:claimID command line tool"
5755msgstr "" 5775msgstr ""
5756 5776
5757#: src/reclaim/plugin_rest_openid_connect.c:2788 5777#: src/reclaim/plugin_rest_openid_connect.c:2793
5758msgid "OpenID Connect REST API initialized\n" 5778msgid "OpenID Connect REST API initialized\n"
5759msgstr "" 5779msgstr ""
5760 5780
5761#: src/reclaim/plugin_rest_reclaim.c:1521 5781#: src/reclaim/plugin_rest_pabc.c:637 src/reclaim/plugin_rest_reclaim.c:1520
5762msgid "Identity Provider REST API initialized\n" 5782msgid "Identity Provider REST API initialized\n"
5763msgstr "" 5783msgstr ""
5764 5784
@@ -5776,56 +5796,56 @@ msgstr ""
5776msgid "Daemon to announce regular expressions for the peer using cadet." 5796msgid "Daemon to announce regular expressions for the peer using cadet."
5777msgstr "" 5797msgstr ""
5778 5798
5779#: src/regex/gnunet-regex-profiler.c:1390 5799#: src/regex/gnunet-regex-profiler.c:1392
5780msgid "No configuration file given. Exiting\n" 5800msgid "No configuration file given. Exiting\n"
5781msgstr "" 5801msgstr ""
5782 5802
5783#: src/regex/gnunet-regex-profiler.c:1432 5803#: src/regex/gnunet-regex-profiler.c:1434
5784#: src/regex/gnunet-regex-simulation-profiler.c:631 5804#: src/regex/gnunet-regex-simulation-profiler.c:631
5785#, c-format 5805#, c-format
5786msgid "No policy directory specified on command line. Exiting.\n" 5806msgid "No policy directory specified on command line. Exiting.\n"
5787msgstr "" 5807msgstr ""
5788 5808
5789#: src/regex/gnunet-regex-profiler.c:1438 5809#: src/regex/gnunet-regex-profiler.c:1440
5790#: src/regex/gnunet-regex-simulation-profiler.c:639 5810#: src/regex/gnunet-regex-simulation-profiler.c:639
5791#, c-format 5811#, c-format
5792msgid "Specified policies directory does not exist. Exiting.\n" 5812msgid "Specified policies directory does not exist. Exiting.\n"
5793msgstr "" 5813msgstr ""
5794 5814
5795#: src/regex/gnunet-regex-profiler.c:1446 5815#: src/regex/gnunet-regex-profiler.c:1448
5796#, c-format 5816#, c-format
5797msgid "No files found in `%s'\n" 5817msgid "No files found in `%s'\n"
5798msgstr "" 5818msgstr ""
5799 5819
5800#: src/regex/gnunet-regex-profiler.c:1455 5820#: src/regex/gnunet-regex-profiler.c:1457
5801msgid "No search strings file given. Exiting.\n" 5821msgid "No search strings file given. Exiting.\n"
5802msgstr "" 5822msgstr ""
5803 5823
5804#: src/regex/gnunet-regex-profiler.c:1475 5824#: src/regex/gnunet-regex-profiler.c:1477
5805msgid "Error loading search strings. Exiting.\n" 5825msgid "Error loading search strings. Exiting.\n"
5806msgstr "" 5826msgstr ""
5807 5827
5808#: src/regex/gnunet-regex-profiler.c:1563 5828#: src/regex/gnunet-regex-profiler.c:1565
5809msgid "name of the file for writing statistics" 5829msgid "name of the file for writing statistics"
5810msgstr "" 5830msgstr ""
5811 5831
5812#: src/regex/gnunet-regex-profiler.c:1570 5832#: src/regex/gnunet-regex-profiler.c:1572
5813msgid "wait TIMEOUT before ending the experiment" 5833msgid "wait TIMEOUT before ending the experiment"
5814msgstr "" 5834msgstr ""
5815 5835
5816#: src/regex/gnunet-regex-profiler.c:1576 5836#: src/regex/gnunet-regex-profiler.c:1578
5817msgid "directory with policy files" 5837msgid "directory with policy files"
5818msgstr "" 5838msgstr ""
5819 5839
5820#: src/regex/gnunet-regex-profiler.c:1584 5840#: src/regex/gnunet-regex-profiler.c:1586
5821msgid "name of file with input strings" 5841msgid "name of file with input strings"
5822msgstr "" 5842msgstr ""
5823 5843
5824#: src/regex/gnunet-regex-profiler.c:1591 5844#: src/regex/gnunet-regex-profiler.c:1593
5825msgid "name of file with hosts' names" 5845msgid "name of file with hosts' names"
5826msgstr "" 5846msgstr ""
5827 5847
5828#: src/regex/gnunet-regex-profiler.c:1604 5848#: src/regex/gnunet-regex-profiler.c:1606
5829msgid "Profiler for regex" 5849msgid "Profiler for regex"
5830msgstr "" 5850msgstr ""
5831 5851
@@ -5851,11 +5871,11 @@ msgstr ""
5851msgid "Search string `%s' is too long!\n" 5871msgid "Search string `%s' is too long!\n"
5852msgstr "" 5872msgstr ""
5853 5873
5854#: src/rest/gnunet-rest-server.c:1266 5874#: src/rest/gnunet-rest-server.c:1267
5855msgid "GNUnet REST server" 5875msgid "GNUnet REST server"
5856msgstr "" 5876msgstr ""
5857 5877
5858#: src/rest/plugin_rest_config.c:427 5878#: src/rest/plugin_rest_config.c:429
5859msgid "CONFIG REST API initialized\n" 5879msgid "CONFIG REST API initialized\n"
5860msgstr "" 5880msgstr ""
5861 5881
@@ -5918,70 +5938,75 @@ msgstr ""
5918msgid "Ego `%s' not found.\n" 5938msgid "Ego `%s' not found.\n"
5919msgstr "" 5939msgstr ""
5920 5940
5921#: src/revocation/gnunet-revocation.c:351 5941#: src/revocation/gnunet-revocation.c:350
5942#, c-format
5943msgid "Error: Key is invalid\n"
5944msgstr ""
5945
5946#: src/revocation/gnunet-revocation.c:357
5922#, c-format 5947#, c-format
5923msgid "Error: revocation certificate in `%s' is not for `%s'\n" 5948msgid "Error: revocation certificate in `%s' is not for `%s'\n"
5924msgstr "" 5949msgstr ""
5925 5950
5926#: src/revocation/gnunet-revocation.c:361 5951#: src/revocation/gnunet-revocation.c:367
5927msgid "Revocation certificate ready\n" 5952msgid "Revocation certificate ready\n"
5928msgstr "" 5953msgstr ""
5929 5954
5930#: src/revocation/gnunet-revocation.c:373 5955#: src/revocation/gnunet-revocation.c:379
5931msgid "Continuing calculation where left off...\n" 5956msgid "Continuing calculation where left off...\n"
5932msgstr "" 5957msgstr ""
5933 5958
5934#: src/revocation/gnunet-revocation.c:380 5959#: src/revocation/gnunet-revocation.c:386
5935msgid "Revocation certificate not ready, calculating proof of work\n" 5960msgid "Revocation certificate not ready, calculating proof of work\n"
5936msgstr "" 5961msgstr ""
5937 5962
5938#: src/revocation/gnunet-revocation.c:418 5963#: src/revocation/gnunet-revocation.c:424
5939#, c-format 5964#, c-format
5940msgid "Public key `%s' malformed\n" 5965msgid "Public key `%s' malformed\n"
5941msgstr "" 5966msgstr ""
5942 5967
5943#: src/revocation/gnunet-revocation.c:428 5968#: src/revocation/gnunet-revocation.c:434
5944msgid "" 5969msgid ""
5945"Testing and revoking at the same time is not allowed, only executing test.\n" 5970"Testing and revoking at the same time is not allowed, only executing test.\n"
5946msgstr "" 5971msgstr ""
5947 5972
5948#: src/revocation/gnunet-revocation.c:458 5973#: src/revocation/gnunet-revocation.c:464
5949msgid "No filename to store revocation certificate given.\n" 5974msgid "No filename to store revocation certificate given.\n"
5950msgstr "" 5975msgstr ""
5951 5976
5952#: src/revocation/gnunet-revocation.c:475 5977#: src/revocation/gnunet-revocation.c:481
5953#, c-format 5978#, c-format
5954msgid "Failed to read revocation certificate from `%s'\n" 5979msgid "Failed to read revocation certificate from `%s'\n"
5955msgstr "" 5980msgstr ""
5956 5981
5957#: src/revocation/gnunet-revocation.c:483 5982#: src/revocation/gnunet-revocation.c:489
5958#, c-format 5983#, c-format
5959msgid "Revocation certificate corrupted in `%s'\n" 5984msgid "Revocation certificate corrupted in `%s'\n"
5960msgstr "" 5985msgstr ""
5961 5986
5962#: src/revocation/gnunet-revocation.c:505 5987#: src/revocation/gnunet-revocation.c:511
5963msgid "No action specified. Nothing to do.\n" 5988msgid "No action specified. Nothing to do.\n"
5964msgstr "" 5989msgstr ""
5965 5990
5966#: src/revocation/gnunet-revocation.c:524 5991#: src/revocation/gnunet-revocation.c:530
5967msgid "use NAME for the name of the revocation file" 5992msgid "use NAME for the name of the revocation file"
5968msgstr "" 5993msgstr ""
5969 5994
5970#: src/revocation/gnunet-revocation.c:532 5995#: src/revocation/gnunet-revocation.c:538
5971msgid "" 5996msgid ""
5972"revoke the private key associated for the the private key associated with " 5997"revoke the private key associated for the the private key associated with "
5973"the ego NAME " 5998"the ego NAME "
5974msgstr "" 5999msgstr ""
5975 6000
5976#: src/revocation/gnunet-revocation.c:539 6001#: src/revocation/gnunet-revocation.c:545
5977msgid "actually perform revocation, otherwise we just do the precomputation" 6002msgid "actually perform revocation, otherwise we just do the precomputation"
5978msgstr "" 6003msgstr ""
5979 6004
5980#: src/revocation/gnunet-revocation.c:546 6005#: src/revocation/gnunet-revocation.c:552
5981msgid "test if the public key KEY has been revoked" 6006msgid "test if the public key KEY has been revoked"
5982msgstr "" 6007msgstr ""
5983 6008
5984#: src/revocation/gnunet-revocation.c:552 6009#: src/revocation/gnunet-revocation.c:558
5985#, fuzzy 6010#, fuzzy
5986msgid "number of epochs to calculate for" 6011msgid "number of epochs to calculate for"
5987msgstr "nombre de valeurs" 6012msgstr "nombre de valeurs"
@@ -6015,18 +6040,6 @@ msgstr ""
6015msgid "Could not open revocation database file!" 6040msgid "Could not open revocation database file!"
6016msgstr "" 6041msgstr ""
6017 6042
6018#: src/rps/gnunet-rps.c:270
6019msgid "Seed a PeerID"
6020msgstr ""
6021
6022#: src/rps/gnunet-rps.c:275
6023msgid "Get updates of view (0 for infinite updates)"
6024msgstr ""
6025
6026#: src/rps/gnunet-rps.c:279
6027msgid "Get peers from biased stream"
6028msgstr ""
6029
6030#: src/rps/gnunet-rps-profiler.c:3142 6043#: src/rps/gnunet-rps-profiler.c:3142
6031msgid "duration of the profiling" 6044msgid "duration of the profiling"
6032msgstr "" 6045msgstr ""
@@ -6044,6 +6057,18 @@ msgstr "nombre de valeurs"
6044msgid "Measure quality and performance of the RPS service." 6057msgid "Measure quality and performance of the RPS service."
6045msgstr "" 6058msgstr ""
6046 6059
6060#: src/rps/gnunet-rps.c:270
6061msgid "Seed a PeerID"
6062msgstr ""
6063
6064#: src/rps/gnunet-rps.c:275
6065msgid "Get updates of view (0 for infinite updates)"
6066msgstr ""
6067
6068#: src/rps/gnunet-rps.c:279
6069msgid "Get peers from biased stream"
6070msgstr ""
6071
6047#: src/scalarproduct/gnunet-scalarproduct.c:229 6072#: src/scalarproduct/gnunet-scalarproduct.c:229
6048msgid "You must specify at least one message ID to check!\n" 6073msgid "You must specify at least one message ID to check!\n"
6049msgstr "" 6074msgstr ""
@@ -6098,14 +6123,14 @@ msgstr ""
6098msgid "Calculate the Vectorproduct with a GNUnet peer." 6123msgid "Calculate the Vectorproduct with a GNUnet peer."
6099msgstr "" 6124msgstr ""
6100 6125
6126#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118
6127#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1034
6101#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1358 6128#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1358
6102#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1355 6129#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1355
6103#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118
6104#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1063
6105msgid "Connect to CADET failed\n" 6130msgid "Connect to CADET failed\n"
6106msgstr "" 6131msgstr ""
6107 6132
6108#: src/scalarproduct/scalarproduct_api.c:189 6133#: src/scalarproduct/scalarproduct_api.c:184
6109msgid "Keys given to SCALARPRODUCT not unique!\n" 6134msgid "Keys given to SCALARPRODUCT not unique!\n"
6110msgstr "" 6135msgstr ""
6111 6136
@@ -6126,7 +6151,7 @@ msgid "also profile decryption"
6126msgstr "" 6151msgstr ""
6127 6152
6128#: src/set/gnunet-service-set.c:1916 src/seti/gnunet-service-seti.c:2467 6153#: src/set/gnunet-service-set.c:1916 src/seti/gnunet-service-seti.c:2467
6129#: src/setu/gnunet-service-setu.c:3832 6154#: src/setu/gnunet-service-setu.c:5389
6130#, fuzzy 6155#, fuzzy
6131msgid "Could not connect to CADET service\n" 6156msgid "Could not connect to CADET service\n"
6132msgstr "Impossible d’ouvrir « %s ».\n" 6157msgstr "Impossible d’ouvrir « %s ».\n"
@@ -6365,7 +6390,7 @@ msgid ""
6365"\t cap: the maximum number of links a node can have\n" 6390"\t cap: the maximum number of links a node can have\n"
6366"\t m: the number of links a node should have while joining the network\n" 6391"\t m: the number of links a node should have while joining the network\n"
6367"\t filename: the path of the file which contains topology information\n" 6392"\t filename: the path of the file which contains topology information\n"
6368"NOTE: the format of the above file is descibed here: https://www.gnunet.org/" 6393"NOTE: the format of the above file is described here: https://www.gnunet.org/"
6369"content/topology-file-format\n" 6394"content/topology-file-format\n"
6370msgstr "" 6395msgstr ""
6371 6396
@@ -6450,17 +6475,8 @@ msgstr ""
6450msgid "%.s Unknown result code." 6475msgid "%.s Unknown result code."
6451msgstr "%.s Code d'erreur inconnu" 6476msgstr "%.s Code d'erreur inconnu"
6452 6477
6453#: src/testbed/gnunet_testbed_mpi_spawn.c:119
6454msgid "Waiting for child to exit.\n"
6455msgstr ""
6456
6457#: src/testbed/gnunet_testbed_mpi_spawn.c:242
6458#, c-format
6459msgid "Spawning process `%s'\n"
6460msgstr ""
6461
6462#: src/testbed/gnunet-testbed-profiler.c:290 6478#: src/testbed/gnunet-testbed-profiler.c:290
6463msgid "tolerate COUNT number of continious timeout failures" 6479msgid "tolerate COUNT number of continuous timeout failures"
6464msgstr "" 6480msgstr ""
6465 6481
6466#: src/testbed/gnunet-testbed-profiler.c:295 6482#: src/testbed/gnunet-testbed-profiler.c:295
@@ -6470,6 +6486,15 @@ msgid ""
6470"signal is received" 6486"signal is received"
6471msgstr "" 6487msgstr ""
6472 6488
6489#: src/testbed/gnunet_testbed_mpi_spawn.c:119
6490msgid "Waiting for child to exit.\n"
6491msgstr ""
6492
6493#: src/testbed/gnunet_testbed_mpi_spawn.c:242
6494#, c-format
6495msgid "Spawning process `%s'\n"
6496msgstr ""
6497
6473#: src/testbed/testbed_api.c:399 6498#: src/testbed/testbed_api.c:399
6474#, c-format 6499#, c-format
6475msgid "Adding host %u failed with error: %s\n" 6500msgid "Adding host %u failed with error: %s\n"
@@ -6757,14 +6782,14 @@ msgstr ""
6757msgid "GNUnet topology control" 6782msgid "GNUnet topology control"
6758msgstr "" 6783msgstr ""
6759 6784
6760#: src/transport/gnunet-communicator-tcp.c:3331 6785#: src/transport/gnunet-communicator-tcp.c:3317
6761#: src/transport/gnunet-communicator-udp.c:3790 6786#: src/transport/gnunet-communicator-udp.c:3790
6762#: src/transport/gnunet-service-tng.c:10220 6787#: src/transport/gnunet-service-tng.c:10223
6763#: src/transport/gnunet-service-transport.c:2627 6788#: src/transport/gnunet-service-transport.c:2627
6764msgid "Transport service is lacking key configuration settings. Exiting.\n" 6789msgid "Transport service is lacking key configuration settings. Exiting.\n"
6765msgstr "" 6790msgstr ""
6766 6791
6767#: src/transport/gnunet-communicator-tcp.c:3668 6792#: src/transport/gnunet-communicator-tcp.c:3655
6768msgid "GNUnet TCP communicator" 6793msgid "GNUnet TCP communicator"
6769msgstr "" 6794msgstr ""
6770 6795
@@ -6791,10 +6816,6 @@ msgstr ""
6791msgid "GNUnet UNIX domain socket communicator" 6816msgid "GNUnet UNIX domain socket communicator"
6792msgstr "" 6817msgstr ""
6793 6818
6794#: src/transport/gnunet-service-transport_ats.c:137
6795msgid "# Addresses given to ATS"
6796msgstr ""
6797
6798#: src/transport/gnunet-service-transport.c:445 6819#: src/transport/gnunet-service-transport.c:445
6799msgid "# messages dropped due to slow client" 6820msgid "# messages dropped due to slow client"
6800msgstr "" 6821msgstr ""
@@ -6835,6 +6856,10 @@ msgstr ""
6835msgid "Adding blacklisting entry for peer `%s':`%s'\n" 6856msgid "Adding blacklisting entry for peer `%s':`%s'\n"
6836msgstr "" 6857msgstr ""
6837 6858
6859#: src/transport/gnunet-service-transport_ats.c:137
6860msgid "# Addresses given to ATS"
6861msgstr ""
6862
6838#: src/transport/gnunet-service-transport_hello.c:195 6863#: src/transport/gnunet-service-transport_hello.c:195
6839msgid "# refreshed my HELLO" 6864msgid "# refreshed my HELLO"
6840msgstr "" 6865msgstr ""
@@ -7140,6 +7165,42 @@ msgstr ""
7140msgid "# HELLOs given to peerinfo" 7165msgid "# HELLOs given to peerinfo"
7141msgstr "" 7166msgstr ""
7142 7167
7168#: src/transport/gnunet-transport-profiler.c:220
7169#, c-format
7170msgid "%llu B in %llu ms == %.2f KB/s!\n"
7171msgstr ""
7172
7173#: src/transport/gnunet-transport-profiler.c:577
7174msgid "send data to peer"
7175msgstr ""
7176
7177#: src/transport/gnunet-transport-profiler.c:581
7178msgid "receive data from peer"
7179msgstr ""
7180
7181#: src/transport/gnunet-transport-profiler.c:586
7182msgid "iterations"
7183msgstr ""
7184
7185#: src/transport/gnunet-transport-profiler.c:591
7186#, fuzzy
7187msgid "number of messages to send"
7188msgstr "nombre de valeurs"
7189
7190#: src/transport/gnunet-transport-profiler.c:596
7191msgid "message size to use"
7192msgstr ""
7193
7194#: src/transport/gnunet-transport-profiler.c:601
7195#: src/transport/gnunet-transport.c:1404
7196msgid "peer identity"
7197msgstr ""
7198
7199#: src/transport/gnunet-transport-profiler.c:614
7200#: src/transport/gnunet-transport.c:1426
7201msgid "Direct access to transport service."
7202msgstr ""
7203
7143#: src/transport/gnunet-transport.c:406 7204#: src/transport/gnunet-transport.c:406
7144#, c-format 7205#, c-format
7145msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n" 7206msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n"
@@ -7269,11 +7330,6 @@ msgstr ""
7269msgid "do not resolve hostnames" 7330msgid "do not resolve hostnames"
7270msgstr "" 7331msgstr ""
7271 7332
7272#: src/transport/gnunet-transport.c:1404
7273#: src/transport/gnunet-transport-profiler.c:601
7274msgid "peer identity"
7275msgstr ""
7276
7277#: src/transport/gnunet-transport.c:1408 7333#: src/transport/gnunet-transport.c:1408
7278msgid "monitor plugin sessions" 7334msgid "monitor plugin sessions"
7279msgstr "" 7335msgstr ""
@@ -7282,37 +7338,6 @@ msgstr ""
7282msgid "send data for benchmarking to the other peer (until CTRL-C)" 7338msgid "send data for benchmarking to the other peer (until CTRL-C)"
7283msgstr "" 7339msgstr ""
7284 7340
7285#: src/transport/gnunet-transport.c:1426
7286#: src/transport/gnunet-transport-profiler.c:614
7287msgid "Direct access to transport service."
7288msgstr ""
7289
7290#: src/transport/gnunet-transport-profiler.c:220
7291#, c-format
7292msgid "%llu B in %llu ms == %.2f KB/s!\n"
7293msgstr ""
7294
7295#: src/transport/gnunet-transport-profiler.c:577
7296msgid "send data to peer"
7297msgstr ""
7298
7299#: src/transport/gnunet-transport-profiler.c:581
7300msgid "receive data from peer"
7301msgstr ""
7302
7303#: src/transport/gnunet-transport-profiler.c:586
7304msgid "iterations"
7305msgstr ""
7306
7307#: src/transport/gnunet-transport-profiler.c:591
7308#, fuzzy
7309msgid "number of messages to send"
7310msgstr "nombre de valeurs"
7311
7312#: src/transport/gnunet-transport-profiler.c:596
7313msgid "message size to use"
7314msgstr ""
7315
7316#: src/transport/plugin_transport_http_client.c:1488 7341#: src/transport/plugin_transport_http_client.c:1488
7317#: src/transport/plugin_transport_http_server.c:2331 7342#: src/transport/plugin_transport_http_server.c:2331
7318#: src/transport/plugin_transport_http_server.c:3562 7343#: src/transport/plugin_transport_http_server.c:3562
@@ -7578,20 +7603,6 @@ msgstr ""
7578msgid "TCP transport advertises itself as being on port %llu\n" 7603msgid "TCP transport advertises itself as being on port %llu\n"
7579msgstr "" 7604msgstr ""
7580 7605
7581#: src/transport/plugin_transport_udp_broadcasting.c:169
7582msgid "# Multicast HELLO beacons received via UDP"
7583msgstr ""
7584
7585#: src/transport/plugin_transport_udp_broadcasting.c:553
7586msgid ""
7587"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n"
7588msgstr ""
7589
7590#: src/transport/plugin_transport_udp_broadcasting.c:571
7591#, c-format
7592msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n"
7593msgstr ""
7594
7595#: src/transport/plugin_transport_udp.c:3170 7606#: src/transport/plugin_transport_udp.c:3170
7596#, c-format 7607#, c-format
7597msgid "" 7608msgid ""
@@ -7638,6 +7649,20 @@ msgstr "adresse invalide"
7638msgid "Failed to create UDP network sockets\n" 7649msgid "Failed to create UDP network sockets\n"
7639msgstr "" 7650msgstr ""
7640 7651
7652#: src/transport/plugin_transport_udp_broadcasting.c:169
7653msgid "# Multicast HELLO beacons received via UDP"
7654msgstr ""
7655
7656#: src/transport/plugin_transport_udp_broadcasting.c:553
7657msgid ""
7658"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n"
7659msgstr ""
7660
7661#: src/transport/plugin_transport_udp_broadcasting.c:571
7662#, c-format
7663msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n"
7664msgstr ""
7665
7641#: src/transport/plugin_transport_unix.c:1396 7666#: src/transport/plugin_transport_unix.c:1396
7642#, c-format 7667#, c-format
7643msgid "Cannot bind to `%s'\n" 7668msgid "Cannot bind to `%s'\n"
@@ -7790,7 +7815,7 @@ msgstr ""
7790msgid "Service process failed to report status\n" 7815msgid "Service process failed to report status\n"
7791msgstr "" 7816msgstr ""
7792 7817
7793#: src/transport/tcp_service_legacy.c:1253 src/util/disk.c:1040 7818#: src/transport/tcp_service_legacy.c:1253 src/util/disk.c:1220
7794#: src/util/service.c:1637 7819#: src/util/service.c:1637
7795#, c-format 7820#, c-format
7796msgid "Cannot obtain information about user `%s': %s\n" 7821msgid "Cannot obtain information about user `%s': %s\n"
@@ -7908,39 +7933,15 @@ msgstr ""
7908msgid "Failed to serialize metadata `%s'" 7933msgid "Failed to serialize metadata `%s'"
7909msgstr "Échec du démarrage de %s\n" 7934msgstr "Échec du démarrage de %s\n"
7910 7935
7911#: src/util/client.c:747 src/util/client.c:937 7936#: src/util/client.c:747 src/util/client.c:938
7912msgid "not a valid filename" 7937msgid "not a valid filename"
7913msgstr "" 7938msgstr ""
7914 7939
7915#: src/util/client.c:1103 7940#: src/util/client.c:1104
7916#, c-format 7941#, c-format
7917msgid "Need a non-empty hostname for service `%s'.\n" 7942msgid "Need a non-empty hostname for service `%s'.\n"
7918msgstr "" 7943msgstr ""
7919 7944
7920#: src/util/common_logging.c:259 src/util/common_logging.c:1114
7921msgid "DEBUG"
7922msgstr "DEBUG"
7923
7924#: src/util/common_logging.c:261 src/util/common_logging.c:1112
7925msgid "INFO"
7926msgstr "INFO"
7927
7928#: src/util/common_logging.c:263 src/util/common_logging.c:1110
7929msgid "MESSAGE"
7930msgstr ""
7931
7932#: src/util/common_logging.c:265 src/util/common_logging.c:1108
7933msgid "WARNING"
7934msgstr "AVERTISSEMENT"
7935
7936#: src/util/common_logging.c:267 src/util/common_logging.c:1106
7937msgid "ERROR"
7938msgstr "ERREUR"
7939
7940#: src/util/common_logging.c:269 src/util/common_logging.c:1116
7941msgid "NONE"
7942msgstr "AUCUN"
7943
7944#: src/util/common_logging.c:626 src/util/common_logging.c:665 7945#: src/util/common_logging.c:626 src/util/common_logging.c:665
7945#, c-format 7946#, c-format
7946msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n" 7947msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n"
@@ -7951,6 +7952,30 @@ msgstr ""
7951msgid "Message `%.*s' repeated %u times in the last %s\n" 7952msgid "Message `%.*s' repeated %u times in the last %s\n"
7952msgstr "" 7953msgstr ""
7953 7954
7955#: src/util/common_logging.c:1106
7956msgid "ERROR"
7957msgstr "ERREUR"
7958
7959#: src/util/common_logging.c:1108
7960msgid "WARNING"
7961msgstr "AVERTISSEMENT"
7962
7963#: src/util/common_logging.c:1110
7964msgid "MESSAGE"
7965msgstr ""
7966
7967#: src/util/common_logging.c:1112
7968msgid "INFO"
7969msgstr "INFO"
7970
7971#: src/util/common_logging.c:1114
7972msgid "DEBUG"
7973msgstr "DEBUG"
7974
7975#: src/util/common_logging.c:1116
7976msgid "NONE"
7977msgstr "AUCUN"
7978
7954#: src/util/common_logging.c:1117 7979#: src/util/common_logging.c:1117
7955msgid "INVALID" 7980msgid "INVALID"
7956msgstr "INVALIDE" 7981msgstr "INVALIDE"
@@ -7974,38 +7999,68 @@ msgid ""
7974"Configuration specifies invalid value for option `%s' in section `%s': %s\n" 7999"Configuration specifies invalid value for option `%s' in section `%s': %s\n"
7975msgstr "" 8000msgstr ""
7976 8001
7977#: src/util/configuration.c:370 8002#: src/util/configuration.c:790
8003#, c-format
8004msgid "Illegal directive in line %u (parsing restricted section %s)\n"
8005msgstr ""
8006
8007#: src/util/configuration.c:800
8008#, c-format
8009msgid "Bad directive in line %u\n"
8010msgstr ""
8011
8012#: src/util/configuration.c:853
8013#, c-format
8014msgid "Bad inline-secret directive in line %u\n"
8015msgstr ""
8016
8017#: src/util/configuration.c:875
8018#, c-format
8019msgid "Unknown or malformed directive '%s' in line %u\n"
8020msgstr ""
8021
8022#: src/util/configuration.c:905
8023#, c-format
8024msgid "Syntax error while deserializing in line %u (option without section)\n"
8025msgstr ""
8026
8027#: src/util/configuration.c:949
7978#, c-format 8028#, c-format
7979msgid "Syntax error while deserializing in line %u\n" 8029msgid "Syntax error while deserializing in line %u\n"
7980msgstr "" 8030msgstr ""
7981 8031
7982#: src/util/configuration.c:420 8032#: src/util/configuration.c:1049
7983#, fuzzy, c-format 8033#, fuzzy, c-format
7984msgid "Error while reading file `%s'\n" 8034msgid "Error while reading file `%s'\n"
7985msgstr "Erreur de lecture : « %s » : %s" 8035msgstr "Erreur de lecture : « %s » : %s"
7986 8036
7987#: src/util/configuration.c:980 8037#: src/util/configuration.c:1062
8038#, fuzzy, c-format
8039msgid "Failed to parse configuration file `%s'\n"
8040msgstr "fornat invalide : « %s »\n"
8041
8042#: src/util/configuration.c:1695
7988msgid "Not a valid relative time specification" 8043msgid "Not a valid relative time specification"
7989msgstr "" 8044msgstr ""
7990 8045
7991#: src/util/configuration.c:1050 8046#: src/util/configuration.c:1765
7992#, c-format 8047#, c-format
7993msgid "" 8048msgid ""
7994"Configuration value '%s' for '%s' in section '%s' is not in set of legal " 8049"Configuration value '%s' for '%s' in section '%s' is not in set of legal "
7995"choices\n" 8050"choices\n"
7996msgstr "" 8051msgstr ""
7997 8052
7998#: src/util/configuration.c:1145 8053#: src/util/configuration.c:1860
7999#, c-format 8054#, c-format
8000msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n" 8055msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n"
8001msgstr "" 8056msgstr ""
8002 8057
8003#: src/util/configuration.c:1177 8058#: src/util/configuration.c:1892
8004#, c-format 8059#, c-format
8005msgid "Missing closing `%s' in option `%s'\n" 8060msgid "Missing closing `%s' in option `%s'\n"
8006msgstr "" 8061msgstr ""
8007 8062
8008#: src/util/configuration.c:1243 8063#: src/util/configuration.c:1958
8009#, c-format 8064#, c-format
8010msgid "" 8065msgid ""
8011"Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined " 8066"Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined "
@@ -8048,7 +8103,7 @@ msgstr ""
8048msgid "RSA signature verification failed at %s:%d: %s\n" 8103msgid "RSA signature verification failed at %s:%d: %s\n"
8049msgstr "" 8104msgstr ""
8050 8105
8051#: src/util/disk.c:823 8106#: src/util/disk.c:843
8052#, c-format 8107#, c-format
8053msgid "Expected `%s' to be a directory!\n" 8108msgid "Expected `%s' to be a directory!\n"
8054msgstr "" 8109msgstr ""
@@ -8229,59 +8284,68 @@ msgstr ""
8229msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n" 8284msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n"
8230msgstr "" 8285msgstr ""
8231 8286
8232#: src/util/gnunet-base32.c:45 8287#: src/util/gnunet-base32.c:46
8233msgid "run decoder modus, otherwise runs as encoder" 8288msgid "run decoder modus, otherwise runs as encoder"
8234msgstr "" 8289msgstr ""
8235 8290
8236#: src/util/gnunet-config.c:167 8291#: src/util/gnunet-config.c:187
8237#, fuzzy, c-format
8238msgid "failed to load configuration defaults"
8239msgstr "fornat invalide : « %s »\n"
8240
8241#: src/util/gnunet-config.c:179
8242#, c-format 8292#, c-format
8243msgid "%s or %s argument is required\n" 8293msgid "The following sections are available:\n"
8244msgstr "" 8294msgstr ""
8245 8295
8246#: src/util/gnunet-config.c:186 8296#: src/util/gnunet-config.c:201
8247#, c-format 8297#, c-format
8248msgid "The following sections are available:\n" 8298msgid "%s, %s or %s argument is required\n"
8249msgstr "" 8299msgstr ""
8250 8300
8251#: src/util/gnunet-config.c:234 8301#: src/util/gnunet-config.c:266
8252#, c-format 8302#, c-format
8253msgid "--option argument required to set value\n" 8303msgid "--option argument required to set value\n"
8254msgstr "" 8304msgstr ""
8255 8305
8256#: src/util/gnunet-config.c:284 8306#: src/util/gnunet-config.c:309
8257msgid "interpret option value as a filename (with $-expansion)" 8307#, fuzzy, c-format
8258msgstr "" 8308msgid "failed to load configuration defaults"
8309msgstr "fornat invalide : « %s »\n"
8259 8310
8260#: src/util/gnunet-config.c:291 8311#: src/util/gnunet-config.c:354
8261msgid "test if the current installation supports the specified BACKEND" 8312msgid "test if the current installation supports the specified BACKEND"
8262msgstr "" 8313msgstr ""
8263 8314
8264#: src/util/gnunet-config.c:297 8315#: src/util/gnunet-config.c:360
8265msgid "name of the section to access" 8316#, fuzzy
8317msgid "write the full configuration file, including default values"
8318msgstr "fornat invalide : « %s »\n"
8319
8320#: src/util/gnunet-config.c:365
8321msgid "interpret option value as a filename (with $-expansion)"
8266msgstr "" 8322msgstr ""
8267 8323
8268#: src/util/gnunet-config.c:302 8324#: src/util/gnunet-config.c:370
8269msgid "name of the option to access" 8325msgid "name of the option to access"
8270msgstr "" 8326msgstr ""
8271 8327
8272#: src/util/gnunet-config.c:307 8328#: src/util/gnunet-config.c:376
8273msgid "value to set" 8329msgid "rewrite the configuration file, even if nothing changed"
8330msgstr ""
8331
8332#: src/util/gnunet-config.c:382
8333msgid "output extra diagnostics"
8274msgstr "" 8334msgstr ""
8275 8335
8276#: src/util/gnunet-config.c:312 8336#: src/util/gnunet-config.c:387
8277msgid "print available configuration sections" 8337msgid "print available configuration sections"
8278msgstr "" 8338msgstr ""
8279 8339
8280#: src/util/gnunet-config.c:318 8340#: src/util/gnunet-config.c:393
8281msgid "write configuration file that only contains delta to defaults" 8341msgid "name of the section to access"
8342msgstr ""
8343
8344#: src/util/gnunet-config.c:398
8345msgid "value to set"
8282msgstr "" 8346msgstr ""
8283 8347
8284#: src/util/gnunet-config.c:330 8348#: src/util/gnunet-config.c:413
8285msgid "Manipulate GNUnet configuration files" 8349msgid "Manipulate GNUnet configuration files"
8286msgstr "" 8350msgstr ""
8287 8351
@@ -8471,7 +8535,7 @@ msgstr ""
8471msgid "Unable to shorten unix path `%s' while keeping name unique\n" 8535msgid "Unable to shorten unix path `%s' while keeping name unique\n"
8472msgstr "" 8536msgstr ""
8473 8537
8474#: src/util/network.c:1361 8538#: src/util/network.c:1359
8475#, c-format 8539#, c-format
8476msgid "" 8540msgid ""
8477"Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n" 8541"Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n"
@@ -8509,21 +8573,21 @@ msgstr ""
8509msgid "`%s' failed for library `%s' with error: %s\n" 8573msgid "`%s' failed for library `%s' with error: %s\n"
8510msgstr "" 8574msgstr ""
8511 8575
8512#: src/util/plugin.c:409 8576#: src/util/plugin.c:414
8513msgid "Could not determine plugin installation path.\n" 8577msgid "Could not determine plugin installation path.\n"
8514msgstr "" 8578msgstr ""
8515 8579
8516#: src/util/program.c:259 8580#: src/util/program.c:252
8517#, fuzzy, c-format 8581#, fuzzy, c-format
8518msgid "Unreadable or malformed configuration file `%s', exit ...\n" 8582msgid "Unreadable or malformed configuration file `%s', exit ...\n"
8519msgstr "fornat invalide : « %s »\n" 8583msgstr "fornat invalide : « %s »\n"
8520 8584
8521#: src/util/program.c:276 8585#: src/util/program.c:272
8522#, c-format 8586#, c-format
8523msgid "Unreadable or malformed default configuration file `%s', exit ...\n" 8587msgid "Unreadable or malformed default configuration file `%s', exit ...\n"
8524msgstr "" 8588msgstr ""
8525 8589
8526#: src/util/program.c:291 8590#: src/util/program.c:288
8527#, fuzzy 8591#, fuzzy
8528msgid "Unreadable or malformed configuration, exit ...\n" 8592msgid "Unreadable or malformed configuration, exit ...\n"
8529msgstr "fornat invalide : « %s »\n" 8593msgstr "fornat invalide : « %s »\n"
@@ -8588,82 +8652,82 @@ msgstr ""
8588msgid "Attempting to proxy service `%s' to invalid port %d or hostname.\n" 8652msgid "Attempting to proxy service `%s' to invalid port %d or hostname.\n"
8589msgstr "" 8653msgstr ""
8590 8654
8591#: src/util/strings.c:503 8655#: src/util/strings.c:409
8592#, c-format 8656#, c-format
8593msgid "Character sets requested were `%s'->`%s'\n" 8657msgid "Character sets requested were `%s'->`%s'\n"
8594msgstr "" 8658msgstr ""
8595 8659
8596#: src/util/strings.c:637 8660#: src/util/strings.c:501
8597msgid "Failed to expand `$HOME': environment variable `HOME' not set" 8661msgid "Failed to expand `$HOME': environment variable `HOME' not set"
8598msgstr "" 8662msgstr ""
8599 8663
8600#: src/util/strings.c:1241 8664#: src/util/strings.c:1036
8601msgid "IPv6 address did not start with `['\n" 8665msgid "IPv6 address did not start with `['\n"
8602msgstr "" 8666msgstr ""
8603 8667
8604#: src/util/strings.c:1249 8668#: src/util/strings.c:1044
8605msgid "IPv6 address did contain ':' to separate port number\n" 8669msgid "IPv6 address did contain ':' to separate port number\n"
8606msgstr "" 8670msgstr ""
8607 8671
8608#: src/util/strings.c:1256 8672#: src/util/strings.c:1051
8609msgid "IPv6 address did contain ']' before ':' to separate port number\n" 8673msgid "IPv6 address did contain ']' before ':' to separate port number\n"
8610msgstr "" 8674msgstr ""
8611 8675
8612#: src/util/strings.c:1264 8676#: src/util/strings.c:1059
8613msgid "IPv6 address did contain a valid port number after the last ':'\n" 8677msgid "IPv6 address did contain a valid port number after the last ':'\n"
8614msgstr "" 8678msgstr ""
8615 8679
8616#: src/util/strings.c:1273 8680#: src/util/strings.c:1068
8617#, c-format 8681#, c-format
8618msgid "Invalid IPv6 address `%s': %s\n" 8682msgid "Invalid IPv6 address `%s': %s\n"
8619msgstr "" 8683msgstr ""
8620 8684
8621#: src/util/strings.c:1500 src/util/strings.c:1511 8685#: src/util/strings.c:1250 src/util/strings.c:1261
8622msgid "Port not in range\n" 8686msgid "Port not in range\n"
8623msgstr "" 8687msgstr ""
8624 8688
8625#: src/util/strings.c:1520 8689#: src/util/strings.c:1270
8626#, c-format 8690#, c-format
8627msgid "Malformed port policy `%s'\n" 8691msgid "Malformed port policy `%s'\n"
8628msgstr "" 8692msgstr ""
8629 8693
8630#: src/util/strings.c:1603 src/util/strings.c:1632 src/util/strings.c:1679 8694#: src/util/strings.c:1341 src/util/strings.c:1370 src/util/strings.c:1417
8631#: src/util/strings.c:1699 8695#: src/util/strings.c:1437
8632#, c-format 8696#, c-format
8633msgid "Invalid format for IP: `%s'\n" 8697msgid "Invalid format for IP: `%s'\n"
8634msgstr "" 8698msgstr ""
8635 8699
8636#: src/util/strings.c:1657 8700#: src/util/strings.c:1395
8637#, c-format 8701#, c-format
8638msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)." 8702msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)."
8639msgstr "" 8703msgstr ""
8640 8704
8641#: src/util/strings.c:1708 8705#: src/util/strings.c:1446
8642#, c-format 8706#, c-format
8643msgid "Invalid format: `%s'\n" 8707msgid "Invalid format: `%s'\n"
8644msgstr "fornat invalide : « %s »\n" 8708msgstr "fornat invalide : « %s »\n"
8645 8709
8646#: src/util/strings.c:1761 8710#: src/util/strings.c:1488
8647#, c-format 8711#, c-format
8648msgid "Invalid network notation (does not end with ';': `%s')\n" 8712msgid "Invalid network notation (does not end with ';': `%s')\n"
8649msgstr "" 8713msgstr ""
8650 8714
8651#: src/util/strings.c:1811 8715#: src/util/strings.c:1538
8652#, c-format 8716#, c-format
8653msgid "Wrong format `%s' for netmask\n" 8717msgid "Wrong format `%s' for netmask\n"
8654msgstr "" 8718msgstr ""
8655 8719
8656#: src/util/strings.c:1842 8720#: src/util/strings.c:1569
8657#, c-format 8721#, c-format
8658msgid "Wrong format `%s' for network\n" 8722msgid "Wrong format `%s' for network\n"
8659msgstr "" 8723msgstr ""
8660 8724
8661#: src/util/time.c:878 src/util/time.c:906 8725#: src/util/time.c:699 src/util/time.c:727
8662#, c-format 8726#, c-format
8663msgid "Failed to map `%s', cannot assure monotonic time!\n" 8727msgid "Failed to map `%s', cannot assure monotonic time!\n"
8664msgstr "" 8728msgstr ""
8665 8729
8666#: src/util/time.c:914 8730#: src/util/time.c:735
8667#, c-format 8731#, c-format
8668msgid "" 8732msgid ""
8669"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n" 8733"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
@@ -8833,11 +8897,18 @@ msgstr ""
8833msgid "Setup tunnels via VPN." 8897msgid "Setup tunnels via VPN."
8834msgstr "Configurer des tunnels via VPN." 8898msgstr "Configurer des tunnels via VPN."
8835 8899
8836#: src/zonemaster/gnunet-service-zonemaster.c:847
8837#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418 8900#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418
8901#: src/zonemaster/gnunet-service-zonemaster.c:847
8838msgid "Failed to connect to the namestore!\n" 8902msgid "Failed to connect to the namestore!\n"
8839msgstr "" 8903msgstr ""
8840 8904
8905#~ msgid "Stop logging\n"
8906#~ msgstr "Arrêter la journalisation\n"
8907
8908#, c-format
8909#~ msgid "Start logging `%s'\n"
8910#~ msgstr "Démarrer la journalisation « %s »\n"
8911
8841#~ msgid "b" 8912#~ msgid "b"
8842#~ msgstr "o" 8913#~ msgstr "o"
8843 8914
@@ -9000,9 +9071,6 @@ msgstr ""
9000#~ msgid "number too large" 9071#~ msgid "number too large"
9001#~ msgstr "nombre de valeurs" 9072#~ msgstr "nombre de valeurs"
9002 9073
9003#~ msgid "unknown error"
9004#~ msgstr "erreur unconnue."
9005
9006#, fuzzy 9074#, fuzzy
9007#~ msgid "Failed to setup cadet channel!\n" 9075#~ msgid "Failed to setup cadet channel!\n"
9008#~ msgstr "Échec du démarrage de %s\n" 9076#~ msgstr "Échec du démarrage de %s\n"
diff --git a/po/it.po b/po/it.po
index 38bc3f84d..f82aaa49b 100644
--- a/po/it.po
+++ b/po/it.po
@@ -8,7 +8,7 @@ msgid ""
8msgstr "" 8msgstr ""
9"Project-Id-Version: gnunet 0.10.1\n" 9"Project-Id-Version: gnunet 0.10.1\n"
10"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" 10"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
11"POT-Creation-Date: 2021-04-04 19:19+0200\n" 11"POT-Creation-Date: 2021-08-28 16:52+0200\n"
12"PO-Revision-Date: 2019-10-16 11:00+0200\n" 12"PO-Revision-Date: 2019-10-16 11:00+0200\n"
13"Last-Translator: Sebastiano Pistore <sebastianopistore.info@protonmail.ch>\n" 13"Last-Translator: Sebastiano Pistore <sebastianopistore.info@protonmail.ch>\n"
14"Language-Team: Italian <tp@lists.linux.it>\n" 14"Language-Team: Italian <tp@lists.linux.it>\n"
@@ -31,8 +31,8 @@ msgid "Issuer public key `%s' is not well-formed\n"
31msgstr "" 31msgstr ""
32 32
33#: src/abd/gnunet-abd.c:560 src/abd/gnunet-service-abd.c:1747 33#: src/abd/gnunet-abd.c:560 src/abd/gnunet-service-abd.c:1747
34#: src/namestore/gnunet-namestore-fcfsd.c:1067
34#: src/namestore/gnunet-namestore.c:1001 35#: src/namestore/gnunet-namestore.c:1001
35#: src/namestore/gnunet-namestore-fcfsd.c:1164
36#, c-format 36#, c-format
37msgid "Failed to connect to namestore\n" 37msgid "Failed to connect to namestore\n"
38msgstr "" 38msgstr ""
@@ -492,108 +492,6 @@ msgstr ""
492msgid "Initiating shutdown as requested by client.\n" 492msgid "Initiating shutdown as requested by client.\n"
493msgstr "" 493msgstr ""
494 494
495#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044
496#, c-format
497msgid ""
498"Could not load quota for network `%s': `%s', assigning default bandwidth "
499"%llu\n"
500msgstr ""
501
502#: src/ats/gnunet-ats-solver-eval.c:3011
503#, c-format
504msgid ""
505"No outbound quota configured for network `%s', assigning default bandwidth "
506"%llu\n"
507msgstr ""
508
509#: src/ats/gnunet-ats-solver-eval.c:3063
510#, c-format
511msgid ""
512"No outbound quota configure for network `%s', assigning default bandwidth "
513"%llu\n"
514msgstr ""
515
516#: src/ats/gnunet-ats-solver-eval.c:3552 src/ats-tests/gnunet-solver-eval.c:997
517msgid "solver to use"
518msgstr ""
519
520#: src/ats/gnunet-ats-solver-eval.c:3557
521#: src/ats-tests/gnunet-solver-eval.c:1003
522#: src/ats-tests/gnunet-solver-eval.c:1008
523msgid "experiment to use"
524msgstr ""
525
526#: src/ats/gnunet-ats-solver-eval.c:3564
527msgid "print logging"
528msgstr ""
529
530#: src/ats/gnunet-ats-solver-eval.c:3569
531msgid "save logging to disk"
532msgstr ""
533
534#: src/ats/gnunet-ats-solver-eval.c:3574
535msgid "disable normalization"
536msgstr ""
537
538#: src/ats/gnunet-service-ats_plugins.c:326
539#, c-format
540msgid ""
541"Could not load %s quota for network `%s': `%s', assigning default bandwidth "
542"%llu\n"
543msgstr ""
544
545#: src/ats/gnunet-service-ats_plugins.c:336
546#, c-format
547msgid "%s quota configured for network `%s' is %llu\n"
548msgstr ""
549
550#: src/ats/gnunet-service-ats_plugins.c:382
551#, c-format
552msgid ""
553"No %s-quota configured for network `%s', assigning default bandwidth %llu\n"
554msgstr ""
555
556#: src/ats/gnunet-service-ats_plugins.c:474
557#, c-format
558msgid "Failed to initialize solver `%s'!\n"
559msgstr ""
560
561#: src/ats/plugin_ats_proportional.c:1142
562#, c-format
563msgid "Invalid %s configuration %f \n"
564msgstr ""
565
566#: src/ats/plugin_ats_proportional.c:1165
567#, c-format
568msgid "Invalid %s configuration %f\n"
569msgstr ""
570
571#: src/ats-tests/ats-testing.c:420
572#, c-format
573msgid "Connected master [%u] with slave [%u]\n"
574msgstr ""
575
576#: src/ats-tests/ats-testing.c:427
577#, c-format
578msgid "Failed to connect master peer [%u] with slave [%u]\n"
579msgstr ""
580
581#: src/ats-tests/ats-testing-log.c:899
582msgid "Stop logging\n"
583msgstr ""
584
585#: src/ats-tests/ats-testing-log.c:955
586#, c-format
587msgid "Start logging `%s'\n"
588msgstr ""
589
590#: src/ats-tests/gnunet-ats-sim.c:92
591#, c-format
592msgid ""
593"Master [%u]: sent: %u KiB in %u sec. = %u KiB/s, received: %u KiB in %u sec. "
594"= %u KiB/s\n"
595msgstr ""
596
597#: src/ats-tool/gnunet-ats.c:299 495#: src/ats-tool/gnunet-ats.c:299
598#, c-format 496#, c-format
599msgid "%u address resolutions had a timeout\n" 497msgid "%u address resolutions had a timeout\n"
@@ -710,6 +608,80 @@ msgstr ""
710msgid "Print information about ATS state" 608msgid "Print information about ATS state"
711msgstr "" 609msgstr ""
712 610
611#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044
612#, c-format
613msgid ""
614"Could not load quota for network `%s': `%s', assigning default bandwidth "
615"%llu\n"
616msgstr ""
617
618#: src/ats/gnunet-ats-solver-eval.c:3011
619#, c-format
620msgid ""
621"No outbound quota configured for network `%s', assigning default bandwidth "
622"%llu\n"
623msgstr ""
624
625#: src/ats/gnunet-ats-solver-eval.c:3063
626#, c-format
627msgid ""
628"No outbound quota configure for network `%s', assigning default bandwidth "
629"%llu\n"
630msgstr ""
631
632#: src/ats/gnunet-ats-solver-eval.c:3552
633msgid "solver to use"
634msgstr ""
635
636#: src/ats/gnunet-ats-solver-eval.c:3557
637msgid "experiment to use"
638msgstr ""
639
640#: src/ats/gnunet-ats-solver-eval.c:3564
641msgid "print logging"
642msgstr ""
643
644#: src/ats/gnunet-ats-solver-eval.c:3569
645msgid "save logging to disk"
646msgstr ""
647
648#: src/ats/gnunet-ats-solver-eval.c:3574
649msgid "disable normalization"
650msgstr ""
651
652#: src/ats/gnunet-service-ats_plugins.c:326
653#, c-format
654msgid ""
655"Could not load %s quota for network `%s': `%s', assigning default bandwidth "
656"%llu\n"
657msgstr ""
658
659#: src/ats/gnunet-service-ats_plugins.c:336
660#, c-format
661msgid "%s quota configured for network `%s' is %llu\n"
662msgstr ""
663
664#: src/ats/gnunet-service-ats_plugins.c:382
665#, c-format
666msgid ""
667"No %s-quota configured for network `%s', assigning default bandwidth %llu\n"
668msgstr ""
669
670#: src/ats/gnunet-service-ats_plugins.c:474
671#, c-format
672msgid "Failed to initialize solver `%s'!\n"
673msgstr ""
674
675#: src/ats/plugin_ats_proportional.c:1142
676#, c-format
677msgid "Invalid %s configuration %f \n"
678msgstr ""
679
680#: src/ats/plugin_ats_proportional.c:1165
681#, c-format
682msgid "Invalid %s configuration %f\n"
683msgstr ""
684
713#: src/auction/gnunet-auction-create.c:163 685#: src/auction/gnunet-auction-create.c:163
714msgid "description of the item to be sold" 686msgid "description of the item to be sold"
715msgstr "" 687msgstr ""
@@ -747,7 +719,7 @@ msgstr ""
747 719
748#: src/auction/gnunet-auction-info.c:77 src/auction/gnunet-auction-join.c:77 720#: src/auction/gnunet-auction-info.c:77 src/auction/gnunet-auction-join.c:77
749#: src/conversation/gnunet-conversation-test.c:256 721#: src/conversation/gnunet-conversation-test.c:256
750#: src/revocation/gnunet-revocation.c:564 src/template/gnunet-template.c:75 722#: src/revocation/gnunet-revocation.c:570 src/template/gnunet-template.c:75
751msgid "help text" 723msgid "help text"
752msgstr "" 724msgstr ""
753 725
@@ -840,6 +812,28 @@ msgstr ""
840msgid "Connection to conversation service lost, trying to reconnect\n" 812msgid "Connection to conversation service lost, trying to reconnect\n"
841msgstr "" 813msgstr ""
842 814
815#: src/conversation/gnunet-conversation-test.c:120
816#, c-format
817msgid ""
818"\n"
819"End of transmission. Have a GNU day.\n"
820msgstr ""
821
822#: src/conversation/gnunet-conversation-test.c:146
823#, c-format
824msgid ""
825"\n"
826"ew are now playing your recording back. If you can hear it, your audio "
827"settings are working..."
828msgstr ""
829
830#: src/conversation/gnunet-conversation-test.c:218
831#, c-format
832msgid ""
833"We will now be recording you for %s. After that time, the recording will be "
834"played back to you..."
835msgstr ""
836
843#: src/conversation/gnunet-conversation.c:264 837#: src/conversation/gnunet-conversation.c:264
844#, c-format 838#, c-format
845msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n" 839msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n"
@@ -1096,30 +1090,8 @@ msgstr ""
1096msgid "Enables having a conversation with other GNUnet users." 1090msgid "Enables having a conversation with other GNUnet users."
1097msgstr "" 1091msgstr ""
1098 1092
1099#: src/conversation/gnunet-conversation-test.c:120
1100#, c-format
1101msgid ""
1102"\n"
1103"End of transmission. Have a GNU day.\n"
1104msgstr ""
1105
1106#: src/conversation/gnunet-conversation-test.c:146
1107#, c-format
1108msgid ""
1109"\n"
1110"We are now playing your recording back. If you can hear it, your audio "
1111"settings are working..."
1112msgstr ""
1113
1114#: src/conversation/gnunet-conversation-test.c:218
1115#, c-format
1116msgid ""
1117"We will now be recording you for %s. After that time, the recording will be "
1118"played back to you..."
1119msgstr ""
1120
1121#: src/conversation/gnunet_gst.c:664
1122#: src/conversation/gnunet-helper-audio-playback-gst.c:363 1093#: src/conversation/gnunet-helper-audio-playback-gst.c:363
1094#: src/conversation/gnunet_gst.c:664
1123#, c-format 1095#, c-format
1124msgid "Read error from STDIN: %d %s\n" 1096msgid "Read error from STDIN: %d %s\n"
1125msgstr "" 1097msgstr ""
@@ -1524,39 +1496,39 @@ msgstr ""
1524msgid "# updates to my type map" 1496msgid "# updates to my type map"
1525msgstr "" 1497msgstr ""
1526 1498
1527#: src/datacache/datacache.c:115 src/datacache/datacache.c:287 1499#: src/datacache/datacache.c:115 src/datacache/datacache.c:299
1528#: src/datastore/gnunet-service-datastore.c:742 1500#: src/datastore/gnunet-service-datastore.c:742
1529msgid "# bytes stored" 1501msgid "# bytes stored"
1530msgstr "" 1502msgstr ""
1531 1503
1532#: src/datacache/datacache.c:119 src/datacache/datacache.c:291 1504#: src/datacache/datacache.c:119 src/datacache/datacache.c:303
1533msgid "# items stored" 1505msgid "# items stored"
1534msgstr "# elementi memorizzati" 1506msgstr "# elementi memorizzati"
1535 1507
1536#: src/datacache/datacache.c:189 1508#: src/datacache/datacache.c:190
1537#, c-format 1509#, c-format
1538msgid "Loading `%s' datacache plugin\n" 1510msgid "Loading `%s' datacache plugin\n"
1539msgstr "" 1511msgstr ""
1540 1512
1541#: src/datacache/datacache.c:197 1513#: src/datacache/datacache.c:208
1542#, c-format 1514#, c-format
1543msgid "Failed to load datacache plugin for `%s'\n" 1515msgid "Failed to load datacache plugin for `%s'\n"
1544msgstr "" 1516msgstr ""
1545 1517
1546#: src/datacache/datacache.c:320 1518#: src/datacache/datacache.c:332
1547msgid "# requests received" 1519msgid "# requests received"
1548msgstr "" 1520msgstr ""
1549 1521
1550#: src/datacache/datacache.c:331 1522#: src/datacache/datacache.c:343
1551msgid "# requests filtered by bloom filter" 1523msgid "# requests filtered by bloom filter"
1552msgstr "" 1524msgstr ""
1553 1525
1554#: src/datacache/datacache.c:358 1526#: src/datacache/datacache.c:370
1555#, fuzzy 1527#, fuzzy
1556msgid "# requests for random value received" 1528msgid "# requests for random value received"
1557msgstr "# richieste GET ricevute" 1529msgstr "# richieste GET ricevute"
1558 1530
1559#: src/datacache/datacache.c:388 1531#: src/datacache/datacache.c:400
1560#, fuzzy 1532#, fuzzy
1561msgid "# proximity search requests received" 1533msgid "# proximity search requests received"
1562msgstr "# richieste GET ricevute" 1534msgstr "# richieste GET ricevute"
@@ -1893,7 +1865,7 @@ msgstr ""
1893 1865
1894#: src/datastore/plugin_datastore_postgres.c:284 1866#: src/datastore/plugin_datastore_postgres.c:284
1895#: src/datastore/plugin_datastore_postgres.c:897 1867#: src/datastore/plugin_datastore_postgres.c:897
1896msgid "Postgress exec failure" 1868msgid "Postgresql exec failure"
1897msgstr "" 1869msgstr ""
1898 1870
1899#: src/datastore/plugin_datastore_postgres.c:858 1871#: src/datastore/plugin_datastore_postgres.c:858
@@ -1928,14 +1900,24 @@ msgstr ""
1928msgid "sqlite version to old to determine size, assuming zero\n" 1900msgid "sqlite version to old to determine size, assuming zero\n"
1929msgstr "" 1901msgstr ""
1930 1902
1931#: src/datastore/plugin_datastore_sqlite.c:1274 1903#: src/datastore/plugin_datastore_sqlite.c:1266
1904#: src/datastore/plugin_datastore_sqlite.c:1279
1905msgid "error preparing statement\n"
1906msgstr ""
1907
1908#: src/datastore/plugin_datastore_sqlite.c:1287
1909#, fuzzy
1910msgid "error stepping\n"
1911msgstr "# elementi memorizzati"
1912
1913#: src/datastore/plugin_datastore_sqlite.c:1295
1932#, c-format 1914#, c-format
1933msgid "" 1915msgid ""
1934"Using sqlite page utilization to estimate payload (%llu pages of size %llu " 1916"Using sqlite page utilization to estimate payload (%llu pages of size %llu "
1935"bytes)\n" 1917"bytes)\n"
1936msgstr "" 1918msgstr ""
1937 1919
1938#: src/datastore/plugin_datastore_sqlite.c:1316 1920#: src/datastore/plugin_datastore_sqlite.c:1337
1939#: src/namecache/plugin_namecache_sqlite.c:564 1921#: src/namecache/plugin_namecache_sqlite.c:564
1940#: src/namestore/plugin_namestore_sqlite.c:765 1922#: src/namestore/plugin_namestore_sqlite.c:765
1941msgid "Sqlite database running\n" 1923msgid "Sqlite database running\n"
@@ -2007,52 +1989,6 @@ msgstr ""
2007msgid "Prints all packets that go through the DHT." 1989msgid "Prints all packets that go through the DHT."
2008msgstr "" 1990msgstr ""
2009 1991
2010#: src/dht/gnunet_dht_profiler.c:922 src/testbed/gnunet-testbed-profiler.c:255
2011#, c-format
2012msgid "Exiting as the number of peers is %u\n"
2013msgstr ""
2014
2015#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3136
2016msgid "number of peers to start"
2017msgstr ""
2018
2019#: src/dht/gnunet_dht_profiler.c:961
2020msgid "number of PUTs to perform per peer"
2021msgstr ""
2022
2023#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872
2024#: src/testbed/gnunet-testbed-profiler.c:305
2025msgid "name of the file with the login information for the testbed"
2026msgstr ""
2027
2028#: src/dht/gnunet_dht_profiler.c:973
2029msgid "delay between rounds for collecting statistics (default: 30 sec)"
2030msgstr ""
2031
2032#: src/dht/gnunet_dht_profiler.c:979
2033msgid "delay to start doing PUTs (default: 1 sec)"
2034msgstr ""
2035
2036#: src/dht/gnunet_dht_profiler.c:985
2037msgid "delay to start doing GETs (default: 5 min)"
2038msgstr ""
2039
2040#: src/dht/gnunet_dht_profiler.c:990
2041msgid "replication degree for DHT PUTs"
2042msgstr ""
2043
2044#: src/dht/gnunet_dht_profiler.c:996
2045msgid "chance that a peer is selected at random for PUTs"
2046msgstr ""
2047
2048#: src/dht/gnunet_dht_profiler.c:1002
2049msgid "timeout for DHT PUT and GET requests (default: 1 min)"
2050msgstr ""
2051
2052#: src/dht/gnunet_dht_profiler.c:1023
2053msgid "Measure quality and performance of the DHT service."
2054msgstr ""
2055
2056#: src/dht/gnunet-dht-put.c:133 1992#: src/dht/gnunet-dht-put.c:133
2057msgid "Must provide KEY and DATA for DHT put!\n" 1993msgid "Must provide KEY and DATA for DHT put!\n"
2058msgstr "" 1994msgstr ""
@@ -2178,87 +2114,87 @@ msgstr ""
2178msgid "# requests TTL-dropped" 2114msgid "# requests TTL-dropped"
2179msgstr "" 2115msgstr ""
2180 2116
2181#: src/dht/gnunet-service-dht_neighbours.c:1052 2117#: src/dht/gnunet-service-dht_neighbours.c:1035
2182#: src/dht/gnunet-service-dht_neighbours.c:1096 2118#: src/dht/gnunet-service-dht_neighbours.c:1072
2183msgid "# Peers excluded from routing due to Bloomfilter" 2119msgid "# Peers excluded from routing due to Bloomfilter"
2184msgstr "" 2120msgstr ""
2185 2121
2186#: src/dht/gnunet-service-dht_neighbours.c:1069 2122#: src/dht/gnunet-service-dht_neighbours.c:1045
2187#: src/dht/gnunet-service-dht_neighbours.c:1112 2123#: src/dht/gnunet-service-dht_neighbours.c:1088
2188msgid "# Peer selection failed" 2124msgid "# Peer selection failed"
2189msgstr "" 2125msgstr ""
2190 2126
2191#: src/dht/gnunet-service-dht_neighbours.c:1270 2127#: src/dht/gnunet-service-dht_neighbours.c:1246
2192msgid "# PUT requests routed" 2128msgid "# PUT requests routed"
2193msgstr "" 2129msgstr ""
2194 2130
2195#: src/dht/gnunet-service-dht_neighbours.c:1304 2131#: src/dht/gnunet-service-dht_neighbours.c:1280
2196msgid "# PUT messages queued for transmission" 2132msgid "# PUT messages queued for transmission"
2197msgstr "" 2133msgstr ""
2198 2134
2199#: src/dht/gnunet-service-dht_neighbours.c:1316 2135#: src/dht/gnunet-service-dht_neighbours.c:1292
2200#: src/dht/gnunet-service-dht_neighbours.c:1458 2136#: src/dht/gnunet-service-dht_neighbours.c:1434
2201#: src/dht/gnunet-service-dht_neighbours.c:1562 2137#: src/dht/gnunet-service-dht_neighbours.c:1538
2202msgid "# P2P messages dropped due to full queue" 2138msgid "# P2P messages dropped due to full queue"
2203msgstr "" 2139msgstr ""
2204 2140
2205#: src/dht/gnunet-service-dht_neighbours.c:1401 2141#: src/dht/gnunet-service-dht_neighbours.c:1377
2206msgid "# GET requests routed" 2142msgid "# GET requests routed"
2207msgstr "" 2143msgstr ""
2208 2144
2209#: src/dht/gnunet-service-dht_neighbours.c:1445 2145#: src/dht/gnunet-service-dht_neighbours.c:1421
2210msgid "# GET messages queued for transmission" 2146msgid "# GET messages queued for transmission"
2211msgstr "" 2147msgstr ""
2212 2148
2213#: src/dht/gnunet-service-dht_neighbours.c:1577 2149#: src/dht/gnunet-service-dht_neighbours.c:1553
2214msgid "# RESULT messages queued for transmission" 2150msgid "# RESULT messages queued for transmission"
2215msgstr "" 2151msgstr ""
2216 2152
2217#: src/dht/gnunet-service-dht_neighbours.c:1680 2153#: src/dht/gnunet-service-dht_neighbours.c:1656
2218msgid "# Expired PUTs discarded" 2154msgid "# Expired PUTs discarded"
2219msgstr "" 2155msgstr ""
2220 2156
2221#: src/dht/gnunet-service-dht_neighbours.c:1688 2157#: src/dht/gnunet-service-dht_neighbours.c:1664
2222msgid "# P2P PUT requests received" 2158msgid "# P2P PUT requests received"
2223msgstr "" 2159msgstr ""
2224 2160
2225#: src/dht/gnunet-service-dht_neighbours.c:1692 2161#: src/dht/gnunet-service-dht_neighbours.c:1668
2226msgid "# P2P PUT bytes received" 2162msgid "# P2P PUT bytes received"
2227msgstr "" 2163msgstr ""
2228 2164
2229#: src/dht/gnunet-service-dht_neighbours.c:1924 2165#: src/dht/gnunet-service-dht_neighbours.c:1900
2230msgid "# FIND PEER requests ignored due to Bloomfilter" 2166msgid "# FIND PEER requests ignored due to Bloomfilter"
2231msgstr "" 2167msgstr ""
2232 2168
2233#: src/dht/gnunet-service-dht_neighbours.c:1933 2169#: src/dht/gnunet-service-dht_neighbours.c:1909
2234msgid "# FIND PEER requests ignored due to lack of HELLO" 2170msgid "# FIND PEER requests ignored due to lack of HELLO"
2235msgstr "" 2171msgstr ""
2236 2172
2237#: src/dht/gnunet-service-dht_neighbours.c:2096 2173#: src/dht/gnunet-service-dht_neighbours.c:2072
2238msgid "# P2P GET requests received" 2174msgid "# P2P GET requests received"
2239msgstr "" 2175msgstr ""
2240 2176
2241#: src/dht/gnunet-service-dht_neighbours.c:2100 2177#: src/dht/gnunet-service-dht_neighbours.c:2076
2242msgid "# P2P GET bytes received" 2178msgid "# P2P GET bytes received"
2243msgstr "" 2179msgstr ""
2244 2180
2245#: src/dht/gnunet-service-dht_neighbours.c:2166 2181#: src/dht/gnunet-service-dht_neighbours.c:2142
2246msgid "# P2P FIND PEER requests processed" 2182msgid "# P2P FIND PEER requests processed"
2247msgstr "" 2183msgstr ""
2248 2184
2249#: src/dht/gnunet-service-dht_neighbours.c:2187 2185#: src/dht/gnunet-service-dht_neighbours.c:2163
2250msgid "# P2P GET requests ONLY routed" 2186msgid "# P2P GET requests ONLY routed"
2251msgstr "" 2187msgstr ""
2252 2188
2253#: src/dht/gnunet-service-dht_neighbours.c:2365 2189#: src/dht/gnunet-service-dht_neighbours.c:2341
2254msgid "# Expired results discarded" 2190msgid "# Expired results discarded"
2255msgstr "" 2191msgstr ""
2256 2192
2257#: src/dht/gnunet-service-dht_neighbours.c:2382 2193#: src/dht/gnunet-service-dht_neighbours.c:2358
2258msgid "# P2P RESULTS received" 2194msgid "# P2P RESULTS received"
2259msgstr "" 2195msgstr ""
2260 2196
2261#: src/dht/gnunet-service-dht_neighbours.c:2386 2197#: src/dht/gnunet-service-dht_neighbours.c:2362
2262msgid "# P2P RESULT bytes received" 2198msgid "# P2P RESULT bytes received"
2263msgstr "" 2199msgstr ""
2264 2200
@@ -2298,6 +2234,52 @@ msgstr ""
2298msgid "# DHT requests combined" 2234msgid "# DHT requests combined"
2299msgstr "" 2235msgstr ""
2300 2236
2237#: src/dht/gnunet_dht_profiler.c:922 src/testbed/gnunet-testbed-profiler.c:255
2238#, c-format
2239msgid "Exiting as the number of peers is %u\n"
2240msgstr ""
2241
2242#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3136
2243msgid "number of peers to start"
2244msgstr ""
2245
2246#: src/dht/gnunet_dht_profiler.c:961
2247msgid "number of PUTs to perform per peer"
2248msgstr ""
2249
2250#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872
2251#: src/testbed/gnunet-testbed-profiler.c:305
2252msgid "name of the file with the login information for the testbed"
2253msgstr ""
2254
2255#: src/dht/gnunet_dht_profiler.c:973
2256msgid "delay between rounds for collecting statistics (default: 30 sec)"
2257msgstr ""
2258
2259#: src/dht/gnunet_dht_profiler.c:979
2260msgid "delay to start doing PUTs (default: 1 sec)"
2261msgstr ""
2262
2263#: src/dht/gnunet_dht_profiler.c:985
2264msgid "delay to start doing GETs (default: 5 min)"
2265msgstr ""
2266
2267#: src/dht/gnunet_dht_profiler.c:990
2268msgid "replication degree for DHT PUTs"
2269msgstr ""
2270
2271#: src/dht/gnunet_dht_profiler.c:996
2272msgid "chance that a peer is selected at random for PUTs"
2273msgstr ""
2274
2275#: src/dht/gnunet_dht_profiler.c:1002
2276msgid "timeout for DHT PUT and GET requests (default: 1 min)"
2277msgstr ""
2278
2279#: src/dht/gnunet_dht_profiler.c:1023
2280msgid "Measure quality and performance of the DHT service."
2281msgstr ""
2282
2301#: src/dht/plugin_block_dht.c:189 2283#: src/dht/plugin_block_dht.c:189
2302#, c-format 2284#, c-format
2303msgid "Block not of type %u\n" 2285msgid "Block not of type %u\n"
@@ -2723,7 +2705,7 @@ msgstr ""
2723#: src/fs/fs_download.c:346 2705#: src/fs/fs_download.c:346
2724#, c-format 2706#, c-format
2725msgid "" 2707msgid ""
2726"Failed to access full directroy contents of `%s' for recursive download\n" 2708"Failed to access full directory contents of `%s' for recursive download\n"
2727msgstr "" 2709msgstr ""
2728 2710
2729#: src/fs/fs_download.c:528 src/fs/fs_download.c:541 2711#: src/fs/fs_download.c:528 src/fs/fs_download.c:541
@@ -3208,14 +3190,6 @@ msgid ""
3208"chk/...)" 3190"chk/...)"
3209msgstr "" 3191msgstr ""
3210 3192
3211#: src/fs/gnunet-fs.c:128
3212msgid "print a list of all indexed files"
3213msgstr ""
3214
3215#: src/fs/gnunet-fs.c:141
3216msgid "Special file-sharing operations"
3217msgstr ""
3218
3219#: src/fs/gnunet-fs-profiler.c:211 3193#: src/fs/gnunet-fs-profiler.c:211
3220msgid "run the experiment with COUNT peers" 3194msgid "run the experiment with COUNT peers"
3221msgstr "" 3195msgstr ""
@@ -3232,6 +3206,14 @@ msgstr ""
3232msgid "run a testbed to measure file-sharing performance" 3206msgid "run a testbed to measure file-sharing performance"
3233msgstr "" 3207msgstr ""
3234 3208
3209#: src/fs/gnunet-fs.c:128
3210msgid "print a list of all indexed files"
3211msgstr ""
3212
3213#: src/fs/gnunet-fs.c:141
3214msgid "Special file-sharing operations"
3215msgstr ""
3216
3235#: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:234 3217#: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:234
3236#, c-format 3218#, c-format
3237msgid "Publishing `%s' at %llu/%llu (%s remaining)\n" 3219msgid "Publishing `%s' at %llu/%llu (%s remaining)\n"
@@ -3891,50 +3873,7 @@ msgstr ""
3891msgid "look for GNS2DNS records instead of ANY" 3873msgid "look for GNS2DNS records instead of ANY"
3892msgstr "" 3874msgstr ""
3893 3875
3894#: src/gns/gnunet-gns.c:257 3876#: src/gns/gnunet-gns-import.c:490
3895#, fuzzy, c-format
3896msgid "`%s' is not a valid DNS domain name\n"
3897msgstr "`%s' non è un indirizzo IP valido.\n"
3898
3899#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254
3900#, c-format
3901msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n"
3902msgstr ""
3903
3904#: src/gns/gnunet-gns.c:281
3905msgid "Cannot resolve using GNS: GNUnet peer not running\n"
3906msgstr ""
3907
3908#: src/gns/gnunet-gns.c:305
3909#, c-format
3910msgid "Invalid typename specified, assuming `ANY'\n"
3911msgstr ""
3912
3913#: src/gns/gnunet-gns.c:340
3914msgid "Lookup a record for the given name"
3915msgstr ""
3916
3917#: src/gns/gnunet-gns.c:346
3918msgid "Specify the type of the record to lookup"
3919msgstr ""
3920
3921#: src/gns/gnunet-gns.c:352
3922msgid "Specify a timeout for the lookup"
3923msgstr ""
3924
3925#: src/gns/gnunet-gns.c:356
3926msgid "No unneeded output"
3927msgstr ""
3928
3929#: src/gns/gnunet-gns.c:361
3930msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8"
3931msgstr ""
3932
3933#: src/gns/gnunet-gns.c:375
3934msgid "GNUnet GNS resolver tool"
3935msgstr ""
3936
3937#: src/gns/gnunet-gns-import.c:491
3938msgid "This program will import some GNS authorities into your GNS namestore." 3877msgid "This program will import some GNS authorities into your GNS namestore."
3939msgstr "" 3878msgstr ""
3940 3879
@@ -4053,6 +3992,49 @@ msgstr ""
4053msgid "GNUnet GNS proxy" 3992msgid "GNUnet GNS proxy"
4054msgstr "" 3993msgstr ""
4055 3994
3995#: src/gns/gnunet-gns.c:257
3996#, fuzzy, c-format
3997msgid "`%s' is not a valid DNS domain name\n"
3998msgstr "`%s' non è un indirizzo IP valido.\n"
3999
4000#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254
4001#, c-format
4002msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n"
4003msgstr ""
4004
4005#: src/gns/gnunet-gns.c:281
4006msgid "Cannot resolve using GNS: GNUnet peer not running\n"
4007msgstr ""
4008
4009#: src/gns/gnunet-gns.c:305
4010#, c-format
4011msgid "Invalid typename specified, assuming `ANY'\n"
4012msgstr ""
4013
4014#: src/gns/gnunet-gns.c:340
4015msgid "Lookup a record for the given name"
4016msgstr ""
4017
4018#: src/gns/gnunet-gns.c:346
4019msgid "Specify the type of the record to lookup"
4020msgstr ""
4021
4022#: src/gns/gnunet-gns.c:352
4023msgid "Specify a timeout for the lookup"
4024msgstr ""
4025
4026#: src/gns/gnunet-gns.c:356
4027msgid "No unneeded output"
4028msgstr ""
4029
4030#: src/gns/gnunet-gns.c:361
4031msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8"
4032msgstr ""
4033
4034#: src/gns/gnunet-gns.c:375
4035msgid "GNUnet GNS resolver tool"
4036msgstr ""
4037
4056#: src/gns/gnunet-service-gns.c:505 4038#: src/gns/gnunet-service-gns.c:505
4057#, fuzzy 4039#, fuzzy
4058msgid "Properly base32-encoded public key required" 4040msgid "Properly base32-encoded public key required"
@@ -4063,8 +4045,8 @@ msgid "Failed to connect to the namecache!\n"
4063msgstr "" 4045msgstr ""
4064 4046
4065#: src/gns/gnunet-service-gns.c:560 4047#: src/gns/gnunet-service-gns.c:560
4066#: src/zonemaster/gnunet-service-zonemaster.c:885
4067#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442 4048#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442
4049#: src/zonemaster/gnunet-service-zonemaster.c:885
4068msgid "Could not connect to DHT!\n" 4050msgid "Could not connect to DHT!\n"
4069msgstr "" 4051msgstr ""
4070 4052
@@ -4608,51 +4590,51 @@ msgstr ""
4608msgid "Failed to set default ego: %s\n" 4590msgid "Failed to set default ego: %s\n"
4609msgstr "" 4591msgstr ""
4610 4592
4611#: src/identity/gnunet-identity.c:462 4593#: src/identity/gnunet-identity.c:461
4612msgid "create ego NAME" 4594msgid "create ego NAME"
4613msgstr "" 4595msgstr ""
4614 4596
4615#: src/identity/gnunet-identity.c:467 4597#: src/identity/gnunet-identity.c:466
4616msgid "delete ego NAME " 4598msgid "delete ego NAME "
4617msgstr "" 4599msgstr ""
4618 4600
4619#: src/identity/gnunet-identity.c:473 4601#: src/identity/gnunet-identity.c:472
4620msgid "" 4602msgid ""
4621"set the private key for the identity to PRIVATE_KEY (use together with -C)" 4603"set the private key for the identity to PRIVATE_KEY (use together with -C)"
4622msgstr "" 4604msgstr ""
4623 4605
4624#: src/identity/gnunet-identity.c:478 4606#: src/identity/gnunet-identity.c:477
4625msgid "generate an EdDSA identity. (use together with -C) EXPERIMENTAL" 4607msgid "generate an EdDSA identity. (use together with -C) EXPERIMENTAL"
4626msgstr "" 4608msgstr ""
4627 4609
4628#: src/identity/gnunet-identity.c:482 4610#: src/identity/gnunet-identity.c:481
4629msgid "display all egos" 4611msgid "display all egos"
4630msgstr "" 4612msgstr ""
4631 4613
4632#: src/identity/gnunet-identity.c:486 4614#: src/identity/gnunet-identity.c:485
4633msgid "reduce output" 4615msgid "reduce output"
4634msgstr "" 4616msgstr ""
4635 4617
4636#: src/identity/gnunet-identity.c:493 4618#: src/identity/gnunet-identity.c:492
4637msgid "" 4619msgid ""
4638"set default identity to NAME for a subsystem SUBSYSTEM (use together with -" 4620"set default identity to NAME for a subsystem SUBSYSTEM (use together with -"
4639"s) or restrict results to NAME (use together with -d)" 4621"s) or restrict results to NAME (use together with -d)"
4640msgstr "" 4622msgstr ""
4641 4623
4642#: src/identity/gnunet-identity.c:497 4624#: src/identity/gnunet-identity.c:496
4643msgid "run in monitor mode egos" 4625msgid "run in monitor mode egos"
4644msgstr "" 4626msgstr ""
4645 4627
4646#: src/identity/gnunet-identity.c:501 4628#: src/identity/gnunet-identity.c:500
4647msgid "display private keys as well" 4629msgid "display private keys as well"
4648msgstr "" 4630msgstr ""
4649 4631
4650#: src/identity/gnunet-identity.c:508 4632#: src/identity/gnunet-identity.c:507
4651msgid "" 4633msgid ""
4652"set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)" 4634"set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)"
4653msgstr "" 4635msgstr ""
4654 4636
4655#: src/identity/gnunet-identity.c:523 4637#: src/identity/gnunet-identity.c:522
4656msgid "Maintain egos" 4638msgid "Maintain egos"
4657msgstr "" 4639msgstr ""
4658 4640
@@ -4703,11 +4685,11 @@ msgstr ""
4703msgid "Failed to create directory `%s' for storing egos\n" 4685msgid "Failed to create directory `%s' for storing egos\n"
4704msgstr "" 4686msgstr ""
4705 4687
4706#: src/identity/plugin_rest_identity.c:1385 4688#: src/identity/plugin_rest_identity.c:1401
4707msgid "Identity REST API initialized\n" 4689msgid "Identity REST API initialized\n"
4708msgstr "" 4690msgstr ""
4709 4691
4710#: src/json/json.c:139 4692#: src/json/json.c:120
4711#, fuzzy, c-format 4693#, fuzzy, c-format
4712msgid "Failed to parse JSON in option `%s': %s (%s)\n" 4694msgid "Failed to parse JSON in option `%s': %s (%s)\n"
4713msgstr "Impossibile avviare il servizio ' %s'\n" 4695msgstr "Impossibile avviare il servizio ' %s'\n"
@@ -4764,11 +4746,11 @@ msgstr ""
4764msgid "GNUnet zone manipulation tool" 4746msgid "GNUnet zone manipulation tool"
4765msgstr "" 4747msgstr ""
4766 4748
4767#: src/namecache/namecache_api.c:285 4749#: src/namecache/namecache_api.c:286
4768msgid "Namecache failed to cache block" 4750msgid "Namecache failed to cache block"
4769msgstr "" 4751msgstr ""
4770 4752
4771#: src/namecache/namecache_api.c:373 4753#: src/namecache/namecache_api.c:374
4772msgid "Error communicating with namecache service" 4754msgid "Error communicating with namecache service"
4773msgstr "" 4755msgstr ""
4774 4756
@@ -4807,6 +4789,110 @@ msgstr ""
4807msgid "Failed to setup database at `%s'\n" 4789msgid "Failed to setup database at `%s'\n"
4808msgstr "Impossibile avviare il servizio ' %s'\n" 4790msgstr "Impossibile avviare il servizio ' %s'\n"
4809 4791
4792#: src/namestore/gnunet-namestore-fcfsd.c:359
4793msgid "can not search the namestore"
4794msgstr ""
4795
4796#: src/namestore/gnunet-namestore-fcfsd.c:413
4797#: src/namestore/gnunet-namestore-fcfsd.c:554
4798msgid "unable to scan namestore"
4799msgstr ""
4800
4801#: src/namestore/gnunet-namestore-fcfsd.c:441
4802#, fuzzy, c-format
4803msgid "Failed to create record for `%s': %s\n"
4804msgstr "Impossibile avviare il servizio ' %s'\n"
4805
4806#: src/namestore/gnunet-namestore-fcfsd.c:453
4807#, fuzzy
4808msgid "no errors"
4809msgstr "errore sconosciuto"
4810
4811#: src/namestore/gnunet-namestore-fcfsd.c:489
4812#, c-format
4813msgid "The requested key `%s' exists as `%s'\n"
4814msgstr ""
4815
4816#: src/namestore/gnunet-namestore-fcfsd.c:496
4817msgid "key exists"
4818msgstr ""
4819
4820#: src/namestore/gnunet-namestore-fcfsd.c:513
4821#, fuzzy
4822msgid "Error creating record data\n"
4823msgstr "Errore interno."
4824
4825#: src/namestore/gnunet-namestore-fcfsd.c:517
4826#, fuzzy
4827msgid "unable to store record"
4828msgstr "Impossibile avviare il servizio.\n"
4829
4830#: src/namestore/gnunet-namestore-fcfsd.c:588
4831#, c-format
4832msgid "Requested name `%s' exists with `%u' records\n"
4833msgstr ""
4834
4835#: src/namestore/gnunet-namestore-fcfsd.c:594
4836msgid "name exists\n"
4837msgstr ""
4838
4839#: src/namestore/gnunet-namestore-fcfsd.c:780
4840msgid "unable to process submitted data"
4841msgstr ""
4842
4843#: src/namestore/gnunet-namestore-fcfsd.c:787
4844msgid "the submitted data is invalid"
4845msgstr ""
4846
4847#: src/namestore/gnunet-namestore-fcfsd.c:806
4848#, fuzzy
4849msgid "invalid parameters"
4850msgstr "argomento non valido"
4851
4852#: src/namestore/gnunet-namestore-fcfsd.c:823
4853#, fuzzy
4854msgid "invalid name"
4855msgstr "argomento non valido"
4856
4857#: src/namestore/gnunet-namestore-fcfsd.c:834
4858#, fuzzy, c-format
4859msgid "Unable to parse key %s\n"
4860msgstr "Impossibile avviare il servizio ' %s'\n"
4861
4862#: src/namestore/gnunet-namestore-fcfsd.c:838
4863#, fuzzy
4864msgid "unable to parse key"
4865msgstr "Impossibile avviare il servizio ' %s'\n"
4866
4867#: src/namestore/gnunet-namestore-fcfsd.c:949
4868msgid "No ego configured for `fcfsd` subsystem\n"
4869msgstr ""
4870
4871#: src/namestore/gnunet-namestore-fcfsd.c:974
4872msgid "Failed to start HTTP server\n"
4873msgstr "Impossibile avviare il server HTTP\n"
4874
4875#: src/namestore/gnunet-namestore-fcfsd.c:1058
4876msgid "No port specified, using default value\n"
4877msgstr ""
4878
4879#: src/namestore/gnunet-namestore-fcfsd.c:1076
4880msgid "Failed to connect to identity\n"
4881msgstr ""
4882
4883#: src/namestore/gnunet-namestore-fcfsd.c:1100
4884#, fuzzy
4885msgid "Unable to set up the daemon\n"
4886msgstr "Generazione statistiche fallita\n"
4887
4888#: src/namestore/gnunet-namestore-fcfsd.c:1123
4889msgid "name of the zone managed by FCFSD"
4890msgstr ""
4891
4892#: src/namestore/gnunet-namestore-fcfsd.c:1132
4893msgid "GNU Name System First-Come-First-Served name registration service"
4894msgstr ""
4895
4810#: src/namestore/gnunet-namestore.c:334 4896#: src/namestore/gnunet-namestore.c:334
4811#, c-format 4897#, c-format
4812msgid "Adding record failed: %s\n" 4898msgid "Adding record failed: %s\n"
@@ -5044,83 +5130,16 @@ msgstr ""
5044msgid "name of the ego controlling the zone" 5130msgid "name of the ego controlling the zone"
5045msgstr "" 5131msgstr ""
5046 5132
5047#: src/namestore/gnunet-namestore-fcfsd.c:552
5048#, c-format
5049msgid "Unsupported form value `%s'\n"
5050msgstr ""
5051
5052#: src/namestore/gnunet-namestore-fcfsd.c:579
5053#, c-format
5054msgid "Failed to create record for domain `%s': %s\n"
5055msgstr ""
5056
5057#: src/namestore/gnunet-namestore-fcfsd.c:600
5058msgid "Error when mapping zone to name\n"
5059msgstr ""
5060
5061#: src/namestore/gnunet-namestore-fcfsd.c:633
5062#, c-format
5063msgid "Found existing name `%s' for the given key\n"
5064msgstr ""
5065
5066#: src/namestore/gnunet-namestore-fcfsd.c:646
5067#, fuzzy
5068msgid "Error creating record data.\n"
5069msgstr "Errore interno."
5070
5071#: src/namestore/gnunet-namestore-fcfsd.c:707
5072#, c-format
5073msgid "Found %u existing records for domain `%s'\n"
5074msgstr ""
5075
5076#: src/namestore/gnunet-namestore-fcfsd.c:796
5077#, c-format
5078msgid "Failed to create page for `%s'\n"
5079msgstr ""
5080
5081#: src/namestore/gnunet-namestore-fcfsd.c:815
5082#, c-format
5083msgid "Failed to setup post processor for `%s'\n"
5084msgstr ""
5085
5086#: src/namestore/gnunet-namestore-fcfsd.c:850
5087msgid "Domain name must not contain `.'\n"
5088msgstr ""
5089
5090#: src/namestore/gnunet-namestore-fcfsd.c:859
5091msgid "Domain name must not contain `+'\n"
5092msgstr ""
5093
5094#: src/namestore/gnunet-namestore-fcfsd.c:1094
5095msgid "No ego configured for `fcfsd` subsystem\n"
5096msgstr ""
5097
5098#: src/namestore/gnunet-namestore-fcfsd.c:1125
5099msgid "Failed to start HTTP server\n"
5100msgstr "Impossibile avviare il server HTTP\n"
5101
5102#: src/namestore/gnunet-namestore-fcfsd.c:1173
5103msgid "Failed to connect to identity\n"
5104msgstr ""
5105
5106#: src/namestore/gnunet-namestore-fcfsd.c:1200
5107msgid "name of the zone that is to be managed by FCFSD"
5108msgstr ""
5109
5110#: src/namestore/gnunet-namestore-fcfsd.c:1220
5111msgid "GNU Name System First Come First Serve name registration service"
5112msgstr ""
5113
5114#: src/namestore/gnunet-service-namestore.c:871 5133#: src/namestore/gnunet-service-namestore.c:871
5115#, c-format 5134#, c-format
5116msgid "Failed to replicate block in namecache: %s\n" 5135msgid "Failed to replicate block in namecache: %s\n"
5117msgstr "" 5136msgstr ""
5118 5137
5119#: src/namestore/gnunet-zoneimport.c:1848 5138#: src/namestore/gnunet-zoneimport.c:1847
5120msgid "size to use for the main hash map" 5139msgid "size to use for the main hash map"
5121msgstr "" 5140msgstr ""
5122 5141
5123#: src/namestore/gnunet-zoneimport.c:1854 5142#: src/namestore/gnunet-zoneimport.c:1853
5124msgid "minimum expiration time we assume for imported records" 5143msgid "minimum expiration time we assume for imported records"
5125msgstr "" 5144msgstr ""
5126 5145
@@ -5142,7 +5161,7 @@ msgstr ""
5142msgid "Flat file database running\n" 5161msgid "Flat file database running\n"
5143msgstr "" 5162msgstr ""
5144 5163
5145#: src/namestore/plugin_rest_namestore.c:1105 5164#: src/namestore/plugin_rest_namestore.c:1111
5146msgid "Namestore REST API initialized\n" 5165msgid "Namestore REST API initialized\n"
5147msgstr "" 5166msgstr ""
5148 5167
@@ -5417,10 +5436,6 @@ msgstr ""
5417msgid "`upnpc' command not found\n" 5436msgid "`upnpc' command not found\n"
5418msgstr "" 5437msgstr ""
5419 5438
5420#: src/nse/gnunet-nse.c:124
5421msgid "Show network size estimates from NSE service."
5422msgstr ""
5423
5424#: src/nse/gnunet-nse-profiler.c:857 5439#: src/nse/gnunet-nse-profiler.c:857
5425msgid "limit to the number of connections to NSE services, 0 for none" 5440msgid "limit to the number of connections to NSE services, 0 for none"
5426msgstr "" 5441msgstr ""
@@ -5445,65 +5460,15 @@ msgstr ""
5445msgid "Measure quality and performance of the NSE service." 5460msgid "Measure quality and performance of the NSE service."
5446msgstr "" 5461msgstr ""
5447 5462
5463#: src/nse/gnunet-nse.c:124
5464msgid "Show network size estimates from NSE service."
5465msgstr ""
5466
5448#: src/nse/gnunet-service-nse.c:1450 5467#: src/nse/gnunet-service-nse.c:1450
5449#: src/revocation/gnunet-service-revocation.c:883 src/util/gnunet-scrypt.c:260 5468#: src/revocation/gnunet-service-revocation.c:883 src/util/gnunet-scrypt.c:260
5450msgid "Value is too large.\n" 5469msgid "Value is too large.\n"
5451msgstr "" 5470msgstr ""
5452 5471
5453#: src/peerinfo/gnunet-service-peerinfo.c:175
5454#, c-format
5455msgid "Removing expired address of transport `%s'\n"
5456msgstr ""
5457
5458#: src/peerinfo/gnunet-service-peerinfo.c:306
5459#, c-format
5460msgid "Failed to parse HELLO in file `%s': %s\n"
5461msgstr ""
5462
5463#: src/peerinfo/gnunet-service-peerinfo.c:323
5464#: src/peerinfo/gnunet-service-peerinfo.c:348
5465#, c-format
5466msgid "Failed to parse HELLO in file `%s'\n"
5467msgstr ""
5468
5469#: src/peerinfo/gnunet-service-peerinfo.c:426
5470msgid "# peers known"
5471msgstr "# peer conosciuti"
5472
5473#: src/peerinfo/gnunet-service-peerinfo.c:468
5474#, c-format
5475msgid ""
5476"File `%s' in directory `%s' does not match naming convention. Removed.\n"
5477msgstr ""
5478
5479#: src/peerinfo/gnunet-service-peerinfo.c:624
5480#, c-format
5481msgid "Scanning directory `%s'\n"
5482msgstr ""
5483
5484#: src/peerinfo/gnunet-service-peerinfo.c:631
5485#, c-format
5486msgid "Still no peers found in `%s'!\n"
5487msgstr ""
5488
5489#: src/peerinfo/gnunet-service-peerinfo.c:1027
5490#, c-format
5491msgid "Cleaning up directory `%s'\n"
5492msgstr ""
5493
5494#: src/peerinfo/gnunet-service-peerinfo.c:1322
5495#, c-format
5496msgid "Importing HELLOs from `%s'\n"
5497msgstr ""
5498
5499#: src/peerinfo/gnunet-service-peerinfo.c:1335
5500msgid "Skipping import of included HELLOs\n"
5501msgstr ""
5502
5503#: src/peerinfo/peerinfo_api.c:217
5504msgid "Failed to receive response from `PEERINFO' service."
5505msgstr ""
5506
5507#: src/peerinfo-tool/gnunet-peerinfo.c:237 5472#: src/peerinfo-tool/gnunet-peerinfo.c:237
5508#, c-format 5473#, c-format
5509msgid "%sPeer `%s'\n" 5474msgid "%sPeer `%s'\n"
@@ -5598,6 +5563,60 @@ msgstr ""
5598msgid "Peerinfo REST API initialized\n" 5563msgid "Peerinfo REST API initialized\n"
5599msgstr "" 5564msgstr ""
5600 5565
5566#: src/peerinfo/gnunet-service-peerinfo.c:175
5567#, c-format
5568msgid "Removing expired address of transport `%s'\n"
5569msgstr ""
5570
5571#: src/peerinfo/gnunet-service-peerinfo.c:306
5572#, c-format
5573msgid "Failed to parse HELLO in file `%s': %s\n"
5574msgstr ""
5575
5576#: src/peerinfo/gnunet-service-peerinfo.c:323
5577#: src/peerinfo/gnunet-service-peerinfo.c:348
5578#, c-format
5579msgid "Failed to parse HELLO in file `%s'\n"
5580msgstr ""
5581
5582#: src/peerinfo/gnunet-service-peerinfo.c:426
5583msgid "# peers known"
5584msgstr "# peer conosciuti"
5585
5586#: src/peerinfo/gnunet-service-peerinfo.c:468
5587#, c-format
5588msgid ""
5589"File `%s' in directory `%s' does not match naming convention. Removed.\n"
5590msgstr ""
5591
5592#: src/peerinfo/gnunet-service-peerinfo.c:624
5593#, c-format
5594msgid "Scanning directory `%s'\n"
5595msgstr ""
5596
5597#: src/peerinfo/gnunet-service-peerinfo.c:631
5598#, c-format
5599msgid "Still no peers found in `%s'!\n"
5600msgstr ""
5601
5602#: src/peerinfo/gnunet-service-peerinfo.c:1027
5603#, c-format
5604msgid "Cleaning up directory `%s'\n"
5605msgstr ""
5606
5607#: src/peerinfo/gnunet-service-peerinfo.c:1322
5608#, c-format
5609msgid "Importing HELLOs from `%s'\n"
5610msgstr ""
5611
5612#: src/peerinfo/gnunet-service-peerinfo.c:1335
5613msgid "Skipping import of included HELLOs\n"
5614msgstr ""
5615
5616#: src/peerinfo/peerinfo_api.c:217
5617msgid "Failed to receive response from `PEERINFO' service."
5618msgstr ""
5619
5601#: src/peerstore/gnunet-peerstore.c:92 5620#: src/peerstore/gnunet-peerstore.c:92
5602msgid "peerstore" 5621msgid "peerstore"
5603msgstr "" 5622msgstr ""
@@ -5781,11 +5800,11 @@ msgstr ""
5781msgid "re:claimID command line tool" 5800msgid "re:claimID command line tool"
5782msgstr "" 5801msgstr ""
5783 5802
5784#: src/reclaim/plugin_rest_openid_connect.c:2788 5803#: src/reclaim/plugin_rest_openid_connect.c:2793
5785msgid "OpenID Connect REST API initialized\n" 5804msgid "OpenID Connect REST API initialized\n"
5786msgstr "" 5805msgstr ""
5787 5806
5788#: src/reclaim/plugin_rest_reclaim.c:1521 5807#: src/reclaim/plugin_rest_pabc.c:637 src/reclaim/plugin_rest_reclaim.c:1520
5789msgid "Identity Provider REST API initialized\n" 5808msgid "Identity Provider REST API initialized\n"
5790msgstr "" 5809msgstr ""
5791 5810
@@ -5803,56 +5822,56 @@ msgstr ""
5803msgid "Daemon to announce regular expressions for the peer using cadet." 5822msgid "Daemon to announce regular expressions for the peer using cadet."
5804msgstr "" 5823msgstr ""
5805 5824
5806#: src/regex/gnunet-regex-profiler.c:1390 5825#: src/regex/gnunet-regex-profiler.c:1392
5807msgid "No configuration file given. Exiting\n" 5826msgid "No configuration file given. Exiting\n"
5808msgstr "" 5827msgstr ""
5809 5828
5810#: src/regex/gnunet-regex-profiler.c:1432 5829#: src/regex/gnunet-regex-profiler.c:1434
5811#: src/regex/gnunet-regex-simulation-profiler.c:631 5830#: src/regex/gnunet-regex-simulation-profiler.c:631
5812#, c-format 5831#, c-format
5813msgid "No policy directory specified on command line. Exiting.\n" 5832msgid "No policy directory specified on command line. Exiting.\n"
5814msgstr "" 5833msgstr ""
5815 5834
5816#: src/regex/gnunet-regex-profiler.c:1438 5835#: src/regex/gnunet-regex-profiler.c:1440
5817#: src/regex/gnunet-regex-simulation-profiler.c:639 5836#: src/regex/gnunet-regex-simulation-profiler.c:639
5818#, c-format 5837#, c-format
5819msgid "Specified policies directory does not exist. Exiting.\n" 5838msgid "Specified policies directory does not exist. Exiting.\n"
5820msgstr "" 5839msgstr ""
5821 5840
5822#: src/regex/gnunet-regex-profiler.c:1446 5841#: src/regex/gnunet-regex-profiler.c:1448
5823#, c-format 5842#, c-format
5824msgid "No files found in `%s'\n" 5843msgid "No files found in `%s'\n"
5825msgstr "" 5844msgstr ""
5826 5845
5827#: src/regex/gnunet-regex-profiler.c:1455 5846#: src/regex/gnunet-regex-profiler.c:1457
5828msgid "No search strings file given. Exiting.\n" 5847msgid "No search strings file given. Exiting.\n"
5829msgstr "" 5848msgstr ""
5830 5849
5831#: src/regex/gnunet-regex-profiler.c:1475 5850#: src/regex/gnunet-regex-profiler.c:1477
5832msgid "Error loading search strings. Exiting.\n" 5851msgid "Error loading search strings. Exiting.\n"
5833msgstr "" 5852msgstr ""
5834 5853
5835#: src/regex/gnunet-regex-profiler.c:1563 5854#: src/regex/gnunet-regex-profiler.c:1565
5836msgid "name of the file for writing statistics" 5855msgid "name of the file for writing statistics"
5837msgstr "" 5856msgstr ""
5838 5857
5839#: src/regex/gnunet-regex-profiler.c:1570 5858#: src/regex/gnunet-regex-profiler.c:1572
5840msgid "wait TIMEOUT before ending the experiment" 5859msgid "wait TIMEOUT before ending the experiment"
5841msgstr "" 5860msgstr ""
5842 5861
5843#: src/regex/gnunet-regex-profiler.c:1576 5862#: src/regex/gnunet-regex-profiler.c:1578
5844msgid "directory with policy files" 5863msgid "directory with policy files"
5845msgstr "" 5864msgstr ""
5846 5865
5847#: src/regex/gnunet-regex-profiler.c:1584 5866#: src/regex/gnunet-regex-profiler.c:1586
5848msgid "name of file with input strings" 5867msgid "name of file with input strings"
5849msgstr "" 5868msgstr ""
5850 5869
5851#: src/regex/gnunet-regex-profiler.c:1591 5870#: src/regex/gnunet-regex-profiler.c:1593
5852msgid "name of file with hosts' names" 5871msgid "name of file with hosts' names"
5853msgstr "" 5872msgstr ""
5854 5873
5855#: src/regex/gnunet-regex-profiler.c:1604 5874#: src/regex/gnunet-regex-profiler.c:1606
5856msgid "Profiler for regex" 5875msgid "Profiler for regex"
5857msgstr "" 5876msgstr ""
5858 5877
@@ -5878,11 +5897,11 @@ msgstr ""
5878msgid "Search string `%s' is too long!\n" 5897msgid "Search string `%s' is too long!\n"
5879msgstr "" 5898msgstr ""
5880 5899
5881#: src/rest/gnunet-rest-server.c:1266 5900#: src/rest/gnunet-rest-server.c:1267
5882msgid "GNUnet REST server" 5901msgid "GNUnet REST server"
5883msgstr "" 5902msgstr ""
5884 5903
5885#: src/rest/plugin_rest_config.c:427 5904#: src/rest/plugin_rest_config.c:429
5886msgid "CONFIG REST API initialized\n" 5905msgid "CONFIG REST API initialized\n"
5887msgstr "" 5906msgstr ""
5888 5907
@@ -5945,70 +5964,75 @@ msgstr ""
5945msgid "Ego `%s' not found.\n" 5964msgid "Ego `%s' not found.\n"
5946msgstr "" 5965msgstr ""
5947 5966
5948#: src/revocation/gnunet-revocation.c:351 5967#: src/revocation/gnunet-revocation.c:350
5968#, c-format
5969msgid "Error: Key is invalid\n"
5970msgstr ""
5971
5972#: src/revocation/gnunet-revocation.c:357
5949#, c-format 5973#, c-format
5950msgid "Error: revocation certificate in `%s' is not for `%s'\n" 5974msgid "Error: revocation certificate in `%s' is not for `%s'\n"
5951msgstr "" 5975msgstr ""
5952 5976
5953#: src/revocation/gnunet-revocation.c:361 5977#: src/revocation/gnunet-revocation.c:367
5954msgid "Revocation certificate ready\n" 5978msgid "Revocation certificate ready\n"
5955msgstr "" 5979msgstr ""
5956 5980
5957#: src/revocation/gnunet-revocation.c:373 5981#: src/revocation/gnunet-revocation.c:379
5958msgid "Continuing calculation where left off...\n" 5982msgid "Continuing calculation where left off...\n"
5959msgstr "" 5983msgstr ""
5960 5984
5961#: src/revocation/gnunet-revocation.c:380 5985#: src/revocation/gnunet-revocation.c:386
5962msgid "Revocation certificate not ready, calculating proof of work\n" 5986msgid "Revocation certificate not ready, calculating proof of work\n"
5963msgstr "" 5987msgstr ""
5964 5988
5965#: src/revocation/gnunet-revocation.c:418 5989#: src/revocation/gnunet-revocation.c:424
5966#, c-format 5990#, c-format
5967msgid "Public key `%s' malformed\n" 5991msgid "Public key `%s' malformed\n"
5968msgstr "" 5992msgstr ""
5969 5993
5970#: src/revocation/gnunet-revocation.c:428 5994#: src/revocation/gnunet-revocation.c:434
5971msgid "" 5995msgid ""
5972"Testing and revoking at the same time is not allowed, only executing test.\n" 5996"Testing and revoking at the same time is not allowed, only executing test.\n"
5973msgstr "" 5997msgstr ""
5974 5998
5975#: src/revocation/gnunet-revocation.c:458 5999#: src/revocation/gnunet-revocation.c:464
5976msgid "No filename to store revocation certificate given.\n" 6000msgid "No filename to store revocation certificate given.\n"
5977msgstr "" 6001msgstr ""
5978 6002
5979#: src/revocation/gnunet-revocation.c:475 6003#: src/revocation/gnunet-revocation.c:481
5980#, c-format 6004#, c-format
5981msgid "Failed to read revocation certificate from `%s'\n" 6005msgid "Failed to read revocation certificate from `%s'\n"
5982msgstr "" 6006msgstr ""
5983 6007
5984#: src/revocation/gnunet-revocation.c:483 6008#: src/revocation/gnunet-revocation.c:489
5985#, fuzzy, c-format 6009#, fuzzy, c-format
5986msgid "Revocation certificate corrupted in `%s'\n" 6010msgid "Revocation certificate corrupted in `%s'\n"
5987msgstr "Generazione statistiche fallita\n" 6011msgstr "Generazione statistiche fallita\n"
5988 6012
5989#: src/revocation/gnunet-revocation.c:505 6013#: src/revocation/gnunet-revocation.c:511
5990msgid "No action specified. Nothing to do.\n" 6014msgid "No action specified. Nothing to do.\n"
5991msgstr "" 6015msgstr ""
5992 6016
5993#: src/revocation/gnunet-revocation.c:524 6017#: src/revocation/gnunet-revocation.c:530
5994msgid "use NAME for the name of the revocation file" 6018msgid "use NAME for the name of the revocation file"
5995msgstr "" 6019msgstr ""
5996 6020
5997#: src/revocation/gnunet-revocation.c:532 6021#: src/revocation/gnunet-revocation.c:538
5998msgid "" 6022msgid ""
5999"revoke the private key associated for the the private key associated with " 6023"revoke the private key associated for the the private key associated with "
6000"the ego NAME " 6024"the ego NAME "
6001msgstr "" 6025msgstr ""
6002 6026
6003#: src/revocation/gnunet-revocation.c:539 6027#: src/revocation/gnunet-revocation.c:545
6004msgid "actually perform revocation, otherwise we just do the precomputation" 6028msgid "actually perform revocation, otherwise we just do the precomputation"
6005msgstr "" 6029msgstr ""
6006 6030
6007#: src/revocation/gnunet-revocation.c:546 6031#: src/revocation/gnunet-revocation.c:552
6008msgid "test if the public key KEY has been revoked" 6032msgid "test if the public key KEY has been revoked"
6009msgstr "" 6033msgstr ""
6010 6034
6011#: src/revocation/gnunet-revocation.c:552 6035#: src/revocation/gnunet-revocation.c:558
6012msgid "number of epochs to calculate for" 6036msgid "number of epochs to calculate for"
6013msgstr "" 6037msgstr ""
6014 6038
@@ -6042,18 +6066,6 @@ msgstr ""
6042msgid "Could not open revocation database file!" 6066msgid "Could not open revocation database file!"
6043msgstr "" 6067msgstr ""
6044 6068
6045#: src/rps/gnunet-rps.c:270
6046msgid "Seed a PeerID"
6047msgstr ""
6048
6049#: src/rps/gnunet-rps.c:275
6050msgid "Get updates of view (0 for infinite updates)"
6051msgstr ""
6052
6053#: src/rps/gnunet-rps.c:279
6054msgid "Get peers from biased stream"
6055msgstr ""
6056
6057#: src/rps/gnunet-rps-profiler.c:3142 6069#: src/rps/gnunet-rps-profiler.c:3142
6058msgid "duration of the profiling" 6070msgid "duration of the profiling"
6059msgstr "" 6071msgstr ""
@@ -6070,6 +6082,18 @@ msgstr ""
6070msgid "Measure quality and performance of the RPS service." 6082msgid "Measure quality and performance of the RPS service."
6071msgstr "" 6083msgstr ""
6072 6084
6085#: src/rps/gnunet-rps.c:270
6086msgid "Seed a PeerID"
6087msgstr ""
6088
6089#: src/rps/gnunet-rps.c:275
6090msgid "Get updates of view (0 for infinite updates)"
6091msgstr ""
6092
6093#: src/rps/gnunet-rps.c:279
6094msgid "Get peers from biased stream"
6095msgstr ""
6096
6073#: src/scalarproduct/gnunet-scalarproduct.c:229 6097#: src/scalarproduct/gnunet-scalarproduct.c:229
6074msgid "You must specify at least one message ID to check!\n" 6098msgid "You must specify at least one message ID to check!\n"
6075msgstr "" 6099msgstr ""
@@ -6124,14 +6148,14 @@ msgstr ""
6124msgid "Calculate the Vectorproduct with a GNUnet peer." 6148msgid "Calculate the Vectorproduct with a GNUnet peer."
6125msgstr "" 6149msgstr ""
6126 6150
6151#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118
6152#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1034
6127#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1358 6153#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1358
6128#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1355 6154#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1355
6129#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118
6130#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1063
6131msgid "Connect to CADET failed\n" 6155msgid "Connect to CADET failed\n"
6132msgstr "" 6156msgstr ""
6133 6157
6134#: src/scalarproduct/scalarproduct_api.c:189 6158#: src/scalarproduct/scalarproduct_api.c:184
6135msgid "Keys given to SCALARPRODUCT not unique!\n" 6159msgid "Keys given to SCALARPRODUCT not unique!\n"
6136msgstr "" 6160msgstr ""
6137 6161
@@ -6152,7 +6176,7 @@ msgid "also profile decryption"
6152msgstr "" 6176msgstr ""
6153 6177
6154#: src/set/gnunet-service-set.c:1916 src/seti/gnunet-service-seti.c:2467 6178#: src/set/gnunet-service-set.c:1916 src/seti/gnunet-service-seti.c:2467
6155#: src/setu/gnunet-service-setu.c:3832 6179#: src/setu/gnunet-service-setu.c:5389
6156#, fuzzy 6180#, fuzzy
6157msgid "Could not connect to CADET service\n" 6181msgid "Could not connect to CADET service\n"
6158msgstr "Impossibile avviare il servizio.\n" 6182msgstr "Impossibile avviare il servizio.\n"
@@ -6392,7 +6416,7 @@ msgid ""
6392"\t cap: the maximum number of links a node can have\n" 6416"\t cap: the maximum number of links a node can have\n"
6393"\t m: the number of links a node should have while joining the network\n" 6417"\t m: the number of links a node should have while joining the network\n"
6394"\t filename: the path of the file which contains topology information\n" 6418"\t filename: the path of the file which contains topology information\n"
6395"NOTE: the format of the above file is descibed here: https://www.gnunet.org/" 6419"NOTE: the format of the above file is described here: https://www.gnunet.org/"
6396"content/topology-file-format\n" 6420"content/topology-file-format\n"
6397msgstr "" 6421msgstr ""
6398 6422
@@ -6477,17 +6501,8 @@ msgstr ""
6477msgid "%.s Unknown result code." 6501msgid "%.s Unknown result code."
6478msgstr "" 6502msgstr ""
6479 6503
6480#: src/testbed/gnunet_testbed_mpi_spawn.c:119
6481msgid "Waiting for child to exit.\n"
6482msgstr ""
6483
6484#: src/testbed/gnunet_testbed_mpi_spawn.c:242
6485#, c-format
6486msgid "Spawning process `%s'\n"
6487msgstr ""
6488
6489#: src/testbed/gnunet-testbed-profiler.c:290 6504#: src/testbed/gnunet-testbed-profiler.c:290
6490msgid "tolerate COUNT number of continious timeout failures" 6505msgid "tolerate COUNT number of continuous timeout failures"
6491msgstr "" 6506msgstr ""
6492 6507
6493#: src/testbed/gnunet-testbed-profiler.c:295 6508#: src/testbed/gnunet-testbed-profiler.c:295
@@ -6497,6 +6512,15 @@ msgid ""
6497"signal is received" 6512"signal is received"
6498msgstr "" 6513msgstr ""
6499 6514
6515#: src/testbed/gnunet_testbed_mpi_spawn.c:119
6516msgid "Waiting for child to exit.\n"
6517msgstr ""
6518
6519#: src/testbed/gnunet_testbed_mpi_spawn.c:242
6520#, c-format
6521msgid "Spawning process `%s'\n"
6522msgstr ""
6523
6500#: src/testbed/testbed_api.c:399 6524#: src/testbed/testbed_api.c:399
6501#, c-format 6525#, c-format
6502msgid "Adding host %u failed with error: %s\n" 6526msgid "Adding host %u failed with error: %s\n"
@@ -6784,14 +6808,14 @@ msgstr ""
6784msgid "GNUnet topology control" 6808msgid "GNUnet topology control"
6785msgstr "" 6809msgstr ""
6786 6810
6787#: src/transport/gnunet-communicator-tcp.c:3331 6811#: src/transport/gnunet-communicator-tcp.c:3317
6788#: src/transport/gnunet-communicator-udp.c:3790 6812#: src/transport/gnunet-communicator-udp.c:3790
6789#: src/transport/gnunet-service-tng.c:10220 6813#: src/transport/gnunet-service-tng.c:10223
6790#: src/transport/gnunet-service-transport.c:2627 6814#: src/transport/gnunet-service-transport.c:2627
6791msgid "Transport service is lacking key configuration settings. Exiting.\n" 6815msgid "Transport service is lacking key configuration settings. Exiting.\n"
6792msgstr "" 6816msgstr ""
6793 6817
6794#: src/transport/gnunet-communicator-tcp.c:3668 6818#: src/transport/gnunet-communicator-tcp.c:3655
6795msgid "GNUnet TCP communicator" 6819msgid "GNUnet TCP communicator"
6796msgstr "" 6820msgstr ""
6797 6821
@@ -6818,10 +6842,6 @@ msgstr ""
6818msgid "GNUnet UNIX domain socket communicator" 6842msgid "GNUnet UNIX domain socket communicator"
6819msgstr "" 6843msgstr ""
6820 6844
6821#: src/transport/gnunet-service-transport_ats.c:137
6822msgid "# Addresses given to ATS"
6823msgstr ""
6824
6825#: src/transport/gnunet-service-transport.c:445 6845#: src/transport/gnunet-service-transport.c:445
6826msgid "# messages dropped due to slow client" 6846msgid "# messages dropped due to slow client"
6827msgstr "" 6847msgstr ""
@@ -6862,6 +6882,10 @@ msgstr ""
6862msgid "Adding blacklisting entry for peer `%s':`%s'\n" 6882msgid "Adding blacklisting entry for peer `%s':`%s'\n"
6863msgstr "" 6883msgstr ""
6864 6884
6885#: src/transport/gnunet-service-transport_ats.c:137
6886msgid "# Addresses given to ATS"
6887msgstr ""
6888
6865#: src/transport/gnunet-service-transport_hello.c:195 6889#: src/transport/gnunet-service-transport_hello.c:195
6866msgid "# refreshed my HELLO" 6890msgid "# refreshed my HELLO"
6867msgstr "" 6891msgstr ""
@@ -7179,6 +7203,41 @@ msgstr ""
7179msgid "# HELLOs given to peerinfo" 7203msgid "# HELLOs given to peerinfo"
7180msgstr "" 7204msgstr ""
7181 7205
7206#: src/transport/gnunet-transport-profiler.c:220
7207#, c-format
7208msgid "%llu B in %llu ms == %.2f KB/s!\n"
7209msgstr ""
7210
7211#: src/transport/gnunet-transport-profiler.c:577
7212msgid "send data to peer"
7213msgstr ""
7214
7215#: src/transport/gnunet-transport-profiler.c:581
7216msgid "receive data from peer"
7217msgstr ""
7218
7219#: src/transport/gnunet-transport-profiler.c:586
7220msgid "iterations"
7221msgstr ""
7222
7223#: src/transport/gnunet-transport-profiler.c:591
7224msgid "number of messages to send"
7225msgstr ""
7226
7227#: src/transport/gnunet-transport-profiler.c:596
7228msgid "message size to use"
7229msgstr ""
7230
7231#: src/transport/gnunet-transport-profiler.c:601
7232#: src/transport/gnunet-transport.c:1404
7233msgid "peer identity"
7234msgstr ""
7235
7236#: src/transport/gnunet-transport-profiler.c:614
7237#: src/transport/gnunet-transport.c:1426
7238msgid "Direct access to transport service."
7239msgstr ""
7240
7182#: src/transport/gnunet-transport.c:406 7241#: src/transport/gnunet-transport.c:406
7183#, c-format 7242#, c-format
7184msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n" 7243msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n"
@@ -7311,11 +7370,6 @@ msgstr ""
7311msgid "do not resolve hostnames" 7370msgid "do not resolve hostnames"
7312msgstr "" 7371msgstr ""
7313 7372
7314#: src/transport/gnunet-transport.c:1404
7315#: src/transport/gnunet-transport-profiler.c:601
7316msgid "peer identity"
7317msgstr ""
7318
7319#: src/transport/gnunet-transport.c:1408 7373#: src/transport/gnunet-transport.c:1408
7320msgid "monitor plugin sessions" 7374msgid "monitor plugin sessions"
7321msgstr "" 7375msgstr ""
@@ -7324,36 +7378,6 @@ msgstr ""
7324msgid "send data for benchmarking to the other peer (until CTRL-C)" 7378msgid "send data for benchmarking to the other peer (until CTRL-C)"
7325msgstr "" 7379msgstr ""
7326 7380
7327#: src/transport/gnunet-transport.c:1426
7328#: src/transport/gnunet-transport-profiler.c:614
7329msgid "Direct access to transport service."
7330msgstr ""
7331
7332#: src/transport/gnunet-transport-profiler.c:220
7333#, c-format
7334msgid "%llu B in %llu ms == %.2f KB/s!\n"
7335msgstr ""
7336
7337#: src/transport/gnunet-transport-profiler.c:577
7338msgid "send data to peer"
7339msgstr ""
7340
7341#: src/transport/gnunet-transport-profiler.c:581
7342msgid "receive data from peer"
7343msgstr ""
7344
7345#: src/transport/gnunet-transport-profiler.c:586
7346msgid "iterations"
7347msgstr ""
7348
7349#: src/transport/gnunet-transport-profiler.c:591
7350msgid "number of messages to send"
7351msgstr ""
7352
7353#: src/transport/gnunet-transport-profiler.c:596
7354msgid "message size to use"
7355msgstr ""
7356
7357#: src/transport/plugin_transport_http_client.c:1488 7381#: src/transport/plugin_transport_http_client.c:1488
7358#: src/transport/plugin_transport_http_server.c:2331 7382#: src/transport/plugin_transport_http_server.c:2331
7359#: src/transport/plugin_transport_http_server.c:3562 7383#: src/transport/plugin_transport_http_server.c:3562
@@ -7620,21 +7644,6 @@ msgstr ""
7620msgid "TCP transport advertises itself as being on port %llu\n" 7644msgid "TCP transport advertises itself as being on port %llu\n"
7621msgstr "" 7645msgstr ""
7622 7646
7623#: src/transport/plugin_transport_udp_broadcasting.c:169
7624#, fuzzy
7625msgid "# Multicast HELLO beacons received via UDP"
7626msgstr "# messaggi PONG ricevuti"
7627
7628#: src/transport/plugin_transport_udp_broadcasting.c:553
7629msgid ""
7630"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n"
7631msgstr ""
7632
7633#: src/transport/plugin_transport_udp_broadcasting.c:571
7634#, c-format
7635msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n"
7636msgstr ""
7637
7638#: src/transport/plugin_transport_udp.c:3170 7647#: src/transport/plugin_transport_udp.c:3170
7639#, c-format 7648#, c-format
7640msgid "" 7649msgid ""
@@ -7681,6 +7690,21 @@ msgstr "deve essere un indirizzo IPv4 valido"
7681msgid "Failed to create UDP network sockets\n" 7690msgid "Failed to create UDP network sockets\n"
7682msgstr "Generazione statistiche fallita\n" 7691msgstr "Generazione statistiche fallita\n"
7683 7692
7693#: src/transport/plugin_transport_udp_broadcasting.c:169
7694#, fuzzy
7695msgid "# Multicast HELLO beacons received via UDP"
7696msgstr "# messaggi PONG ricevuti"
7697
7698#: src/transport/plugin_transport_udp_broadcasting.c:553
7699msgid ""
7700"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n"
7701msgstr ""
7702
7703#: src/transport/plugin_transport_udp_broadcasting.c:571
7704#, c-format
7705msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n"
7706msgstr ""
7707
7684#: src/transport/plugin_transport_unix.c:1396 7708#: src/transport/plugin_transport_unix.c:1396
7685#, fuzzy, c-format 7709#, fuzzy, c-format
7686msgid "Cannot bind to `%s'\n" 7710msgid "Cannot bind to `%s'\n"
@@ -7839,7 +7863,7 @@ msgstr ""
7839msgid "Service process failed to report status\n" 7863msgid "Service process failed to report status\n"
7840msgstr "" 7864msgstr ""
7841 7865
7842#: src/transport/tcp_service_legacy.c:1253 src/util/disk.c:1040 7866#: src/transport/tcp_service_legacy.c:1253 src/util/disk.c:1220
7843#: src/util/service.c:1637 7867#: src/util/service.c:1637
7844#, c-format 7868#, c-format
7845msgid "Cannot obtain information about user `%s': %s\n" 7869msgid "Cannot obtain information about user `%s': %s\n"
@@ -7957,39 +7981,15 @@ msgstr ""
7957msgid "Failed to serialize metadata `%s'" 7981msgid "Failed to serialize metadata `%s'"
7958msgstr "Impossibile avviare il servizio ' %s'\n" 7982msgstr "Impossibile avviare il servizio ' %s'\n"
7959 7983
7960#: src/util/client.c:747 src/util/client.c:937 7984#: src/util/client.c:747 src/util/client.c:938
7961msgid "not a valid filename" 7985msgid "not a valid filename"
7962msgstr "" 7986msgstr ""
7963 7987
7964#: src/util/client.c:1103 7988#: src/util/client.c:1104
7965#, c-format 7989#, c-format
7966msgid "Need a non-empty hostname for service `%s'.\n" 7990msgid "Need a non-empty hostname for service `%s'.\n"
7967msgstr "" 7991msgstr ""
7968 7992
7969#: src/util/common_logging.c:259 src/util/common_logging.c:1114
7970msgid "DEBUG"
7971msgstr "DEBUG"
7972
7973#: src/util/common_logging.c:261 src/util/common_logging.c:1112
7974msgid "INFO"
7975msgstr "INFO"
7976
7977#: src/util/common_logging.c:263 src/util/common_logging.c:1110
7978msgid "MESSAGE"
7979msgstr ""
7980
7981#: src/util/common_logging.c:265 src/util/common_logging.c:1108
7982msgid "WARNING"
7983msgstr "ATTENZIONE"
7984
7985#: src/util/common_logging.c:267 src/util/common_logging.c:1106
7986msgid "ERROR"
7987msgstr "ERRORE"
7988
7989#: src/util/common_logging.c:269 src/util/common_logging.c:1116
7990msgid "NONE"
7991msgstr "NESSUNA"
7992
7993#: src/util/common_logging.c:626 src/util/common_logging.c:665 7993#: src/util/common_logging.c:626 src/util/common_logging.c:665
7994#, c-format 7994#, c-format
7995msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n" 7995msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n"
@@ -8000,6 +8000,30 @@ msgstr ""
8000msgid "Message `%.*s' repeated %u times in the last %s\n" 8000msgid "Message `%.*s' repeated %u times in the last %s\n"
8001msgstr "" 8001msgstr ""
8002 8002
8003#: src/util/common_logging.c:1106
8004msgid "ERROR"
8005msgstr "ERRORE"
8006
8007#: src/util/common_logging.c:1108
8008msgid "WARNING"
8009msgstr "ATTENZIONE"
8010
8011#: src/util/common_logging.c:1110
8012msgid "MESSAGE"
8013msgstr ""
8014
8015#: src/util/common_logging.c:1112
8016msgid "INFO"
8017msgstr "INFO"
8018
8019#: src/util/common_logging.c:1114
8020msgid "DEBUG"
8021msgstr "DEBUG"
8022
8023#: src/util/common_logging.c:1116
8024msgid "NONE"
8025msgstr "NESSUNA"
8026
8003#: src/util/common_logging.c:1117 8027#: src/util/common_logging.c:1117
8004msgid "INVALID" 8028msgid "INVALID"
8005msgstr "NON VALIDO" 8029msgstr "NON VALIDO"
@@ -8023,38 +8047,68 @@ msgid ""
8023"Configuration specifies invalid value for option `%s' in section `%s': %s\n" 8047"Configuration specifies invalid value for option `%s' in section `%s': %s\n"
8024msgstr "" 8048msgstr ""
8025 8049
8026#: src/util/configuration.c:370 8050#: src/util/configuration.c:790
8051#, c-format
8052msgid "Illegal directive in line %u (parsing restricted section %s)\n"
8053msgstr ""
8054
8055#: src/util/configuration.c:800
8056#, c-format
8057msgid "Bad directive in line %u\n"
8058msgstr ""
8059
8060#: src/util/configuration.c:853
8061#, c-format
8062msgid "Bad inline-secret directive in line %u\n"
8063msgstr ""
8064
8065#: src/util/configuration.c:875
8066#, c-format
8067msgid "Unknown or malformed directive '%s' in line %u\n"
8068msgstr ""
8069
8070#: src/util/configuration.c:905
8071#, c-format
8072msgid "Syntax error while deserializing in line %u (option without section)\n"
8073msgstr ""
8074
8075#: src/util/configuration.c:949
8027#, c-format 8076#, c-format
8028msgid "Syntax error while deserializing in line %u\n" 8077msgid "Syntax error while deserializing in line %u\n"
8029msgstr "" 8078msgstr ""
8030 8079
8031#: src/util/configuration.c:420 8080#: src/util/configuration.c:1049
8032#, c-format 8081#, c-format
8033msgid "Error while reading file `%s'\n" 8082msgid "Error while reading file `%s'\n"
8034msgstr "Errore di lettura del file `%s'\n" 8083msgstr "Errore di lettura del file `%s'\n"
8035 8084
8036#: src/util/configuration.c:980 8085#: src/util/configuration.c:1062
8086#, fuzzy, c-format
8087msgid "Failed to parse configuration file `%s'\n"
8088msgstr "Impossibile avviare il servizio ' %s'\n"
8089
8090#: src/util/configuration.c:1695
8037msgid "Not a valid relative time specification" 8091msgid "Not a valid relative time specification"
8038msgstr "" 8092msgstr ""
8039 8093
8040#: src/util/configuration.c:1050 8094#: src/util/configuration.c:1765
8041#, c-format 8095#, c-format
8042msgid "" 8096msgid ""
8043"Configuration value '%s' for '%s' in section '%s' is not in set of legal " 8097"Configuration value '%s' for '%s' in section '%s' is not in set of legal "
8044"choices\n" 8098"choices\n"
8045msgstr "" 8099msgstr ""
8046 8100
8047#: src/util/configuration.c:1145 8101#: src/util/configuration.c:1860
8048#, c-format 8102#, c-format
8049msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n" 8103msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n"
8050msgstr "" 8104msgstr ""
8051 8105
8052#: src/util/configuration.c:1177 8106#: src/util/configuration.c:1892
8053#, c-format 8107#, c-format
8054msgid "Missing closing `%s' in option `%s'\n" 8108msgid "Missing closing `%s' in option `%s'\n"
8055msgstr "" 8109msgstr ""
8056 8110
8057#: src/util/configuration.c:1243 8111#: src/util/configuration.c:1958
8058#, c-format 8112#, c-format
8059msgid "" 8113msgid ""
8060"Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined " 8114"Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined "
@@ -8097,7 +8151,7 @@ msgstr ""
8097msgid "RSA signature verification failed at %s:%d: %s\n" 8151msgid "RSA signature verification failed at %s:%d: %s\n"
8098msgstr "" 8152msgstr ""
8099 8153
8100#: src/util/disk.c:823 8154#: src/util/disk.c:843
8101#, c-format 8155#, c-format
8102msgid "Expected `%s' to be a directory!\n" 8156msgid "Expected `%s' to be a directory!\n"
8103msgstr "" 8157msgstr ""
@@ -8277,59 +8331,67 @@ msgstr ""
8277msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n" 8331msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n"
8278msgstr "" 8332msgstr ""
8279 8333
8280#: src/util/gnunet-base32.c:45 8334#: src/util/gnunet-base32.c:46
8281msgid "run decoder modus, otherwise runs as encoder" 8335msgid "run decoder modus, otherwise runs as encoder"
8282msgstr "" 8336msgstr ""
8283 8337
8284#: src/util/gnunet-config.c:167 8338#: src/util/gnunet-config.c:187
8285#, c-format 8339#, c-format
8286msgid "failed to load configuration defaults" 8340msgid "The following sections are available:\n"
8287msgstr "" 8341msgstr ""
8288 8342
8289#: src/util/gnunet-config.c:179 8343#: src/util/gnunet-config.c:201
8290#, c-format 8344#, c-format
8291msgid "%s or %s argument is required\n" 8345msgid "%s, %s or %s argument is required\n"
8292msgstr "" 8346msgstr ""
8293 8347
8294#: src/util/gnunet-config.c:186 8348#: src/util/gnunet-config.c:266
8295#, c-format 8349#, c-format
8296msgid "The following sections are available:\n" 8350msgid "--option argument required to set value\n"
8297msgstr "" 8351msgstr ""
8298 8352
8299#: src/util/gnunet-config.c:234 8353#: src/util/gnunet-config.c:309
8300#, c-format 8354#, c-format
8301msgid "--option argument required to set value\n" 8355msgid "failed to load configuration defaults"
8302msgstr "" 8356msgstr ""
8303 8357
8304#: src/util/gnunet-config.c:284 8358#: src/util/gnunet-config.c:354
8305msgid "interpret option value as a filename (with $-expansion)" 8359msgid "test if the current installation supports the specified BACKEND"
8306msgstr "" 8360msgstr ""
8307 8361
8308#: src/util/gnunet-config.c:291 8362#: src/util/gnunet-config.c:360
8309msgid "test if the current installation supports the specified BACKEND" 8363msgid "write the full configuration file, including default values"
8310msgstr "" 8364msgstr ""
8311 8365
8312#: src/util/gnunet-config.c:297 8366#: src/util/gnunet-config.c:365
8313msgid "name of the section to access" 8367msgid "interpret option value as a filename (with $-expansion)"
8314msgstr "" 8368msgstr ""
8315 8369
8316#: src/util/gnunet-config.c:302 8370#: src/util/gnunet-config.c:370
8317msgid "name of the option to access" 8371msgid "name of the option to access"
8318msgstr "" 8372msgstr ""
8319 8373
8320#: src/util/gnunet-config.c:307 8374#: src/util/gnunet-config.c:376
8321msgid "value to set" 8375msgid "rewrite the configuration file, even if nothing changed"
8322msgstr "" 8376msgstr ""
8323 8377
8324#: src/util/gnunet-config.c:312 8378#: src/util/gnunet-config.c:382
8379msgid "output extra diagnostics"
8380msgstr ""
8381
8382#: src/util/gnunet-config.c:387
8325msgid "print available configuration sections" 8383msgid "print available configuration sections"
8326msgstr "" 8384msgstr ""
8327 8385
8328#: src/util/gnunet-config.c:318 8386#: src/util/gnunet-config.c:393
8329msgid "write configuration file that only contains delta to defaults" 8387msgid "name of the section to access"
8330msgstr "" 8388msgstr ""
8331 8389
8332#: src/util/gnunet-config.c:330 8390#: src/util/gnunet-config.c:398
8391msgid "value to set"
8392msgstr ""
8393
8394#: src/util/gnunet-config.c:413
8333msgid "Manipulate GNUnet configuration files" 8395msgid "Manipulate GNUnet configuration files"
8334msgstr "" 8396msgstr ""
8335 8397
@@ -8519,7 +8581,7 @@ msgstr ""
8519msgid "Unable to shorten unix path `%s' while keeping name unique\n" 8581msgid "Unable to shorten unix path `%s' while keeping name unique\n"
8520msgstr "" 8582msgstr ""
8521 8583
8522#: src/util/network.c:1361 8584#: src/util/network.c:1359
8523#, c-format 8585#, c-format
8524msgid "" 8586msgid ""
8525"Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n" 8587"Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n"
@@ -8557,21 +8619,21 @@ msgstr ""
8557msgid "`%s' failed for library `%s' with error: %s\n" 8619msgid "`%s' failed for library `%s' with error: %s\n"
8558msgstr "" 8620msgstr ""
8559 8621
8560#: src/util/plugin.c:409 8622#: src/util/plugin.c:414
8561msgid "Could not determine plugin installation path.\n" 8623msgid "Could not determine plugin installation path.\n"
8562msgstr "" 8624msgstr ""
8563 8625
8564#: src/util/program.c:259 8626#: src/util/program.c:252
8565#, c-format 8627#, c-format
8566msgid "Unreadable or malformed configuration file `%s', exit ...\n" 8628msgid "Unreadable or malformed configuration file `%s', exit ...\n"
8567msgstr "" 8629msgstr ""
8568 8630
8569#: src/util/program.c:276 8631#: src/util/program.c:272
8570#, c-format 8632#, c-format
8571msgid "Unreadable or malformed default configuration file `%s', exit ...\n" 8633msgid "Unreadable or malformed default configuration file `%s', exit ...\n"
8572msgstr "" 8634msgstr ""
8573 8635
8574#: src/util/program.c:291 8636#: src/util/program.c:288
8575msgid "Unreadable or malformed configuration, exit ...\n" 8637msgid "Unreadable or malformed configuration, exit ...\n"
8576msgstr "" 8638msgstr ""
8577 8639
@@ -8635,82 +8697,82 @@ msgstr ""
8635msgid "Attempting to proxy service `%s' to invalid port %d or hostname.\n" 8697msgid "Attempting to proxy service `%s' to invalid port %d or hostname.\n"
8636msgstr "" 8698msgstr ""
8637 8699
8638#: src/util/strings.c:503 8700#: src/util/strings.c:409
8639#, c-format 8701#, c-format
8640msgid "Character sets requested were `%s'->`%s'\n" 8702msgid "Character sets requested were `%s'->`%s'\n"
8641msgstr "" 8703msgstr ""
8642 8704
8643#: src/util/strings.c:637 8705#: src/util/strings.c:501
8644msgid "Failed to expand `$HOME': environment variable `HOME' not set" 8706msgid "Failed to expand `$HOME': environment variable `HOME' not set"
8645msgstr "" 8707msgstr ""
8646 8708
8647#: src/util/strings.c:1241 8709#: src/util/strings.c:1036
8648msgid "IPv6 address did not start with `['\n" 8710msgid "IPv6 address did not start with `['\n"
8649msgstr "" 8711msgstr ""
8650 8712
8651#: src/util/strings.c:1249 8713#: src/util/strings.c:1044
8652msgid "IPv6 address did contain ':' to separate port number\n" 8714msgid "IPv6 address did contain ':' to separate port number\n"
8653msgstr "" 8715msgstr ""
8654 8716
8655#: src/util/strings.c:1256 8717#: src/util/strings.c:1051
8656msgid "IPv6 address did contain ']' before ':' to separate port number\n" 8718msgid "IPv6 address did contain ']' before ':' to separate port number\n"
8657msgstr "" 8719msgstr ""
8658 8720
8659#: src/util/strings.c:1264 8721#: src/util/strings.c:1059
8660msgid "IPv6 address did contain a valid port number after the last ':'\n" 8722msgid "IPv6 address did contain a valid port number after the last ':'\n"
8661msgstr "" 8723msgstr ""
8662 8724
8663#: src/util/strings.c:1273 8725#: src/util/strings.c:1068
8664#, c-format 8726#, c-format
8665msgid "Invalid IPv6 address `%s': %s\n" 8727msgid "Invalid IPv6 address `%s': %s\n"
8666msgstr "" 8728msgstr ""
8667 8729
8668#: src/util/strings.c:1500 src/util/strings.c:1511 8730#: src/util/strings.c:1250 src/util/strings.c:1261
8669msgid "Port not in range\n" 8731msgid "Port not in range\n"
8670msgstr "" 8732msgstr ""
8671 8733
8672#: src/util/strings.c:1520 8734#: src/util/strings.c:1270
8673#, c-format 8735#, c-format
8674msgid "Malformed port policy `%s'\n" 8736msgid "Malformed port policy `%s'\n"
8675msgstr "" 8737msgstr ""
8676 8738
8677#: src/util/strings.c:1603 src/util/strings.c:1632 src/util/strings.c:1679 8739#: src/util/strings.c:1341 src/util/strings.c:1370 src/util/strings.c:1417
8678#: src/util/strings.c:1699 8740#: src/util/strings.c:1437
8679#, c-format 8741#, c-format
8680msgid "Invalid format for IP: `%s'\n" 8742msgid "Invalid format for IP: `%s'\n"
8681msgstr "" 8743msgstr ""
8682 8744
8683#: src/util/strings.c:1657 8745#: src/util/strings.c:1395
8684#, c-format 8746#, c-format
8685msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)." 8747msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)."
8686msgstr "" 8748msgstr ""
8687 8749
8688#: src/util/strings.c:1708 8750#: src/util/strings.c:1446
8689#, c-format 8751#, c-format
8690msgid "Invalid format: `%s'\n" 8752msgid "Invalid format: `%s'\n"
8691msgstr "" 8753msgstr ""
8692 8754
8693#: src/util/strings.c:1761 8755#: src/util/strings.c:1488
8694#, c-format 8756#, c-format
8695msgid "Invalid network notation (does not end with ';': `%s')\n" 8757msgid "Invalid network notation (does not end with ';': `%s')\n"
8696msgstr "" 8758msgstr ""
8697 8759
8698#: src/util/strings.c:1811 8760#: src/util/strings.c:1538
8699#, c-format 8761#, c-format
8700msgid "Wrong format `%s' for netmask\n" 8762msgid "Wrong format `%s' for netmask\n"
8701msgstr "" 8763msgstr ""
8702 8764
8703#: src/util/strings.c:1842 8765#: src/util/strings.c:1569
8704#, c-format 8766#, c-format
8705msgid "Wrong format `%s' for network\n" 8767msgid "Wrong format `%s' for network\n"
8706msgstr "" 8768msgstr ""
8707 8769
8708#: src/util/time.c:878 src/util/time.c:906 8770#: src/util/time.c:699 src/util/time.c:727
8709#, c-format 8771#, c-format
8710msgid "Failed to map `%s', cannot assure monotonic time!\n" 8772msgid "Failed to map `%s', cannot assure monotonic time!\n"
8711msgstr "" 8773msgstr ""
8712 8774
8713#: src/util/time.c:914 8775#: src/util/time.c:735
8714#, c-format 8776#, c-format
8715msgid "" 8777msgid ""
8716"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n" 8778"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
@@ -8884,8 +8946,8 @@ msgstr ""
8884msgid "Setup tunnels via VPN." 8946msgid "Setup tunnels via VPN."
8885msgstr "" 8947msgstr ""
8886 8948
8887#: src/zonemaster/gnunet-service-zonemaster.c:847
8888#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418 8949#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418
8950#: src/zonemaster/gnunet-service-zonemaster.c:847
8889msgid "Failed to connect to the namestore!\n" 8951msgid "Failed to connect to the namestore!\n"
8890msgstr "" 8952msgstr ""
8891 8953
@@ -8963,9 +9025,6 @@ msgstr ""
8963#~ msgid "Connected to peer %s\n" 9025#~ msgid "Connected to peer %s\n"
8964#~ msgstr "Connessione stabilita con `%s'\n" 9026#~ msgstr "Connessione stabilita con `%s'\n"
8965 9027
8966#~ msgid "unknown error"
8967#~ msgstr "errore sconosciuto"
8968
8969#, fuzzy 9028#, fuzzy
8970#~| msgid "`%s' is not a valid IP address.\n" 9029#~| msgid "`%s' is not a valid IP address.\n"
8971#~ msgid "`%s' is not a valid IP address! Ignoring BINDTOIP.\n" 9030#~ msgid "`%s' is not a valid IP address! Ignoring BINDTOIP.\n"
diff --git a/po/sr.po b/po/sr.po
index 8faa07402..0306e08de 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -6,7 +6,7 @@ msgid ""
6msgstr "" 6msgstr ""
7"Project-Id-Version: gnunet-0.10.1\n" 7"Project-Id-Version: gnunet-0.10.1\n"
8"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" 8"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
9"POT-Creation-Date: 2021-04-04 19:19+0200\n" 9"POT-Creation-Date: 2021-08-28 16:52+0200\n"
10"PO-Revision-Date: 2020-10-23 18:39+0200\n" 10"PO-Revision-Date: 2020-10-23 18:39+0200\n"
11"Last-Translator: МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>\n" 11"Last-Translator: МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>\n"
12"Language-Team: Serbian <(nothing)>\n" 12"Language-Team: Serbian <(nothing)>\n"
@@ -29,8 +29,8 @@ msgid "Issuer public key `%s' is not well-formed\n"
29msgstr "Јавни кључ „%s“ није добро оформљен\n" 29msgstr "Јавни кључ „%s“ није добро оформљен\n"
30 30
31#: src/abd/gnunet-abd.c:560 src/abd/gnunet-service-abd.c:1747 31#: src/abd/gnunet-abd.c:560 src/abd/gnunet-service-abd.c:1747
32#: src/namestore/gnunet-namestore-fcfsd.c:1067
32#: src/namestore/gnunet-namestore.c:1001 33#: src/namestore/gnunet-namestore.c:1001
33#: src/namestore/gnunet-namestore-fcfsd.c:1164
34#, c-format 34#, c-format
35msgid "Failed to connect to namestore\n" 35msgid "Failed to connect to namestore\n"
36msgstr "ÐиÑам уÑпео да Ñе повежем Ñа Ñмештајем назива\n" 36msgstr "ÐиÑам уÑпео да Ñе повежем Ñа Ñмештајем назива\n"
@@ -506,120 +506,6 @@ msgstr ""
506msgid "Initiating shutdown as requested by client.\n" 506msgid "Initiating shutdown as requested by client.\n"
507msgstr "Започињем гашење као што је затражио клијент.\n" 507msgstr "Започињем гашење као што је затражио клијент.\n"
508 508
509#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044
510#, c-format
511msgid ""
512"Could not load quota for network `%s': `%s', assigning default bandwidth "
513"%llu\n"
514msgstr ""
515"Ðе могу да учитам квоту за мрежу „%s“: „%s“, додељујем оÑновни пропуÑни "
516"опÑег %llu\n"
517
518#: src/ats/gnunet-ats-solver-eval.c:3011
519#, c-format
520msgid ""
521"No outbound quota configured for network `%s', assigning default bandwidth "
522"%llu\n"
523msgstr ""
524"Ðема подешене одлазне квоте за мрежу „%s“, додељујем оÑновни пропуÑни опÑег "
525"%llu\n"
526
527#: src/ats/gnunet-ats-solver-eval.c:3063
528#, c-format
529msgid ""
530"No outbound quota configure for network `%s', assigning default bandwidth "
531"%llu\n"
532msgstr ""
533"Ðије подешена одлазна квота за мрежу „%s“, додељујем оÑновни пропуÑни опÑег "
534"%llu\n"
535
536#: src/ats/gnunet-ats-solver-eval.c:3552 src/ats-tests/gnunet-solver-eval.c:997
537msgid "solver to use"
538msgstr "решавач за коришћење"
539
540#: src/ats/gnunet-ats-solver-eval.c:3557
541#: src/ats-tests/gnunet-solver-eval.c:1003
542#: src/ats-tests/gnunet-solver-eval.c:1008
543msgid "experiment to use"
544msgstr "екÑперимент за коришћење"
545
546#: src/ats/gnunet-ats-solver-eval.c:3564
547msgid "print logging"
548msgstr "иÑпиÑује дневничење"
549
550#: src/ats/gnunet-ats-solver-eval.c:3569
551msgid "save logging to disk"
552msgstr ""
553
554#: src/ats/gnunet-ats-solver-eval.c:3574
555msgid "disable normalization"
556msgstr ""
557
558#: src/ats/gnunet-service-ats_plugins.c:326
559#, fuzzy, c-format
560msgid ""
561"Could not load %s quota for network `%s': `%s', assigning default bandwidth "
562"%llu\n"
563msgstr ""
564"Ðе могу да учитам квоту за мрежу „%s“: „%s“, додељујем оÑновни пропуÑни "
565"опÑег %llu\n"
566
567#: src/ats/gnunet-service-ats_plugins.c:336
568#, fuzzy, c-format
569msgid "%s quota configured for network `%s' is %llu\n"
570msgstr "Квота долазноÑти подешена за мрежу „%s“ је %llu\n"
571
572#: src/ats/gnunet-service-ats_plugins.c:382
573#, fuzzy, c-format
574msgid ""
575"No %s-quota configured for network `%s', assigning default bandwidth %llu\n"
576msgstr ""
577"Ðема подешене одлазне квоте за мрежу „%s“, додељујем оÑновни пропуÑни опÑег "
578"%llu\n"
579
580#: src/ats/gnunet-service-ats_plugins.c:474
581#, c-format
582msgid "Failed to initialize solver `%s'!\n"
583msgstr "ÐиÑам уÑпео да покренем решавача „%s“!\n"
584
585#: src/ats/plugin_ats_proportional.c:1142
586#, fuzzy, c-format
587msgid "Invalid %s configuration %f \n"
588msgstr "ÐиÑам уÑпео да учитам подешавање за „%s“\n"
589
590#: src/ats/plugin_ats_proportional.c:1165
591#, fuzzy, c-format
592msgid "Invalid %s configuration %f\n"
593msgstr "Ðађох пријатеља „%s“ у подешавањима\n"
594
595#: src/ats-tests/ats-testing.c:420
596#, c-format
597msgid "Connected master [%u] with slave [%u]\n"
598msgstr "Повезан је надређени [%u] Ñа потчињеним [%u]\n"
599
600#: src/ats-tests/ats-testing.c:427
601#, c-format
602msgid "Failed to connect master peer [%u] with slave [%u]\n"
603msgstr "ÐиÑам уÑпео да повежем надређеног парњака [%u] Ñа потчињеним [%u]\n"
604
605#: src/ats-tests/ats-testing-log.c:899
606msgid "Stop logging\n"
607msgstr "ЗауÑтављам дневничење\n"
608
609#: src/ats-tests/ats-testing-log.c:955
610#, c-format
611msgid "Start logging `%s'\n"
612msgstr "Започињем дневничење „%s“\n"
613
614#: src/ats-tests/gnunet-ats-sim.c:92
615#, c-format
616msgid ""
617"Master [%u]: sent: %u KiB in %u sec. = %u KiB/s, received: %u KiB in %u sec. "
618"= %u KiB/s\n"
619msgstr ""
620"Ðадређени [%u]: поÑлао: %u KiB за %u Ñек. = %u KiB/s, примио: %u KiB за %u "
621"Ñек. = %u KiB/s\n"
622
623#: src/ats-tool/gnunet-ats.c:299 509#: src/ats-tool/gnunet-ats.c:299
624#, c-format 510#, c-format
625msgid "%u address resolutions had a timeout\n" 511msgid "%u address resolutions had a timeout\n"
@@ -737,6 +623,90 @@ msgstr "опширан излаз (укључује ÑвојÑтва ÐТС ад
737msgid "Print information about ATS state" 623msgid "Print information about ATS state"
738msgstr "ИÑпиÑује податке о ÐТС Ñтању" 624msgstr "ИÑпиÑује податке о ÐТС Ñтању"
739 625
626#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044
627#, c-format
628msgid ""
629"Could not load quota for network `%s': `%s', assigning default bandwidth "
630"%llu\n"
631msgstr ""
632"Ðе могу да учитам квоту за мрежу „%s“: „%s“, додељујем оÑновни пропуÑни "
633"опÑег %llu\n"
634
635#: src/ats/gnunet-ats-solver-eval.c:3011
636#, c-format
637msgid ""
638"No outbound quota configured for network `%s', assigning default bandwidth "
639"%llu\n"
640msgstr ""
641"Ðема подешене одлазне квоте за мрежу „%s“, додељујем оÑновни пропуÑни опÑег "
642"%llu\n"
643
644#: src/ats/gnunet-ats-solver-eval.c:3063
645#, c-format
646msgid ""
647"No outbound quota configure for network `%s', assigning default bandwidth "
648"%llu\n"
649msgstr ""
650"Ðије подешена одлазна квота за мрежу „%s“, додељујем оÑновни пропуÑни опÑег "
651"%llu\n"
652
653#: src/ats/gnunet-ats-solver-eval.c:3552
654msgid "solver to use"
655msgstr "решавач за коришћење"
656
657#: src/ats/gnunet-ats-solver-eval.c:3557
658msgid "experiment to use"
659msgstr "екÑперимент за коришћење"
660
661#: src/ats/gnunet-ats-solver-eval.c:3564
662msgid "print logging"
663msgstr "иÑпиÑује дневничење"
664
665#: src/ats/gnunet-ats-solver-eval.c:3569
666msgid "save logging to disk"
667msgstr ""
668
669#: src/ats/gnunet-ats-solver-eval.c:3574
670msgid "disable normalization"
671msgstr ""
672
673#: src/ats/gnunet-service-ats_plugins.c:326
674#, fuzzy, c-format
675msgid ""
676"Could not load %s quota for network `%s': `%s', assigning default bandwidth "
677"%llu\n"
678msgstr ""
679"Ðе могу да учитам квоту за мрежу „%s“: „%s“, додељујем оÑновни пропуÑни "
680"опÑег %llu\n"
681
682#: src/ats/gnunet-service-ats_plugins.c:336
683#, fuzzy, c-format
684msgid "%s quota configured for network `%s' is %llu\n"
685msgstr "Квота долазноÑти подешена за мрежу „%s“ је %llu\n"
686
687#: src/ats/gnunet-service-ats_plugins.c:382
688#, fuzzy, c-format
689msgid ""
690"No %s-quota configured for network `%s', assigning default bandwidth %llu\n"
691msgstr ""
692"Ðема подешене одлазне квоте за мрежу „%s“, додељујем оÑновни пропуÑни опÑег "
693"%llu\n"
694
695#: src/ats/gnunet-service-ats_plugins.c:474
696#, c-format
697msgid "Failed to initialize solver `%s'!\n"
698msgstr "ÐиÑам уÑпео да покренем решавача „%s“!\n"
699
700#: src/ats/plugin_ats_proportional.c:1142
701#, fuzzy, c-format
702msgid "Invalid %s configuration %f \n"
703msgstr "ÐиÑам уÑпео да учитам подешавање за „%s“\n"
704
705#: src/ats/plugin_ats_proportional.c:1165
706#, fuzzy, c-format
707msgid "Invalid %s configuration %f\n"
708msgstr "Ðађох пријатеља „%s“ у подешавањима\n"
709
740#: src/auction/gnunet-auction-create.c:163 710#: src/auction/gnunet-auction-create.c:163
741msgid "description of the item to be sold" 711msgid "description of the item to be sold"
742msgstr "" 712msgstr ""
@@ -775,7 +745,7 @@ msgstr ""
775 745
776#: src/auction/gnunet-auction-info.c:77 src/auction/gnunet-auction-join.c:77 746#: src/auction/gnunet-auction-info.c:77 src/auction/gnunet-auction-join.c:77
777#: src/conversation/gnunet-conversation-test.c:256 747#: src/conversation/gnunet-conversation-test.c:256
778#: src/revocation/gnunet-revocation.c:564 src/template/gnunet-template.c:75 748#: src/revocation/gnunet-revocation.c:570 src/template/gnunet-template.c:75
779msgid "help text" 749msgid "help text"
780msgstr "текÑÑ‚ помоћи" 750msgstr "текÑÑ‚ помоћи"
781 751
@@ -876,6 +846,34 @@ msgid "Connection to conversation service lost, trying to reconnect\n"
876msgstr "" 846msgstr ""
877"Веза Ñа уÑлугом конверзације је изгубљена, покушавам поново да Ñе повежем\n" 847"Веза Ñа уÑлугом конверзације је изгубљена, покушавам поново да Ñе повежем\n"
878 848
849#: src/conversation/gnunet-conversation-test.c:120
850#, c-format
851msgid ""
852"\n"
853"End of transmission. Have a GNU day.\n"
854msgstr ""
855"\n"
856"Крај преноÑа. Ðека вам је ГÐУ дан.\n"
857
858#: src/conversation/gnunet-conversation-test.c:146
859#, fuzzy, c-format
860msgid ""
861"\n"
862"ew are now playing your recording back. If you can hear it, your audio "
863"settings are working..."
864msgstr ""
865"\n"
866"Сада пуштамо ваш Ñнимак. Ðко можете да га чујете, ваша подешавања звука Ñу "
867"добра..."
868
869#: src/conversation/gnunet-conversation-test.c:218
870#, c-format
871msgid ""
872"We will now be recording you for %s. After that time, the recording will be "
873"played back to you..."
874msgstr ""
875"Сада ћемо Ð²Ð°Ñ Ñнимати за %s. Ðакон тог времена, Ñнимак ће вам бити пуштен..."
876
879#: src/conversation/gnunet-conversation.c:264 877#: src/conversation/gnunet-conversation.c:264
880#, fuzzy, c-format 878#, fuzzy, c-format
881msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n" 879msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n"
@@ -1142,36 +1140,8 @@ msgstr "поÑтавља РЕД за коришћење за телефон"
1142msgid "Enables having a conversation with other GNUnet users." 1140msgid "Enables having a conversation with other GNUnet users."
1143msgstr "Укључује могућноÑÑ‚ конверзације Ñа другим ГÐУнет кориÑницима." 1141msgstr "Укључује могућноÑÑ‚ конверзације Ñа другим ГÐУнет кориÑницима."
1144 1142
1145#: src/conversation/gnunet-conversation-test.c:120
1146#, c-format
1147msgid ""
1148"\n"
1149"End of transmission. Have a GNU day.\n"
1150msgstr ""
1151"\n"
1152"Крај преноÑа. Ðека вам је ГÐУ дан.\n"
1153
1154#: src/conversation/gnunet-conversation-test.c:146
1155#, c-format
1156msgid ""
1157"\n"
1158"We are now playing your recording back. If you can hear it, your audio "
1159"settings are working..."
1160msgstr ""
1161"\n"
1162"Сада пуштамо ваш Ñнимак. Ðко можете да га чујете, ваша подешавања звука Ñу "
1163"добра..."
1164
1165#: src/conversation/gnunet-conversation-test.c:218
1166#, c-format
1167msgid ""
1168"We will now be recording you for %s. After that time, the recording will be "
1169"played back to you..."
1170msgstr ""
1171"Сада ћемо Ð²Ð°Ñ Ñнимати за %s. Ðакон тог времена, Ñнимак ће вам бити пуштен..."
1172
1173#: src/conversation/gnunet_gst.c:664
1174#: src/conversation/gnunet-helper-audio-playback-gst.c:363 1143#: src/conversation/gnunet-helper-audio-playback-gst.c:363
1144#: src/conversation/gnunet_gst.c:664
1175#, c-format 1145#, c-format
1176msgid "Read error from STDIN: %d %s\n" 1146msgid "Read error from STDIN: %d %s\n"
1177msgstr "Грешка читања Ñа СТÐДУЛÐЗÐ: %d %s\n" 1147msgstr "Грешка читања Ñа СТÐДУЛÐЗÐ: %d %s\n"
@@ -1587,39 +1557,39 @@ msgstr "# мапе врÑте Ñу примљене"
1587msgid "# updates to my type map" 1557msgid "# updates to my type map"
1588msgstr "# ажурирања за моју мапу врÑте" 1558msgstr "# ажурирања за моју мапу врÑте"
1589 1559
1590#: src/datacache/datacache.c:115 src/datacache/datacache.c:287 1560#: src/datacache/datacache.c:115 src/datacache/datacache.c:299
1591#: src/datastore/gnunet-service-datastore.c:742 1561#: src/datastore/gnunet-service-datastore.c:742
1592msgid "# bytes stored" 1562msgid "# bytes stored"
1593msgstr "# бајтови Ñу Ñмештени" 1563msgstr "# бајтови Ñу Ñмештени"
1594 1564
1595#: src/datacache/datacache.c:119 src/datacache/datacache.c:291 1565#: src/datacache/datacache.c:119 src/datacache/datacache.c:303
1596msgid "# items stored" 1566msgid "# items stored"
1597msgstr "# Ñтавке Ñу Ñмештене" 1567msgstr "# Ñтавке Ñу Ñмештене"
1598 1568
1599#: src/datacache/datacache.c:189 1569#: src/datacache/datacache.c:190
1600#, c-format 1570#, c-format
1601msgid "Loading `%s' datacache plugin\n" 1571msgid "Loading `%s' datacache plugin\n"
1602msgstr "Учитавам прикључак „%s“ оÑтаве података\n" 1572msgstr "Учитавам прикључак „%s“ оÑтаве података\n"
1603 1573
1604#: src/datacache/datacache.c:197 1574#: src/datacache/datacache.c:208
1605#, c-format 1575#, c-format
1606msgid "Failed to load datacache plugin for `%s'\n" 1576msgid "Failed to load datacache plugin for `%s'\n"
1607msgstr "ÐиÑам уÑпео да учитам прикључак оÑтаве података за „%s“\n" 1577msgstr "ÐиÑам уÑпео да учитам прикључак оÑтаве података за „%s“\n"
1608 1578
1609#: src/datacache/datacache.c:320 1579#: src/datacache/datacache.c:332
1610msgid "# requests received" 1580msgid "# requests received"
1611msgstr "# захтеви Ñу примљени" 1581msgstr "# захтеви Ñу примљени"
1612 1582
1613#: src/datacache/datacache.c:331 1583#: src/datacache/datacache.c:343
1614msgid "# requests filtered by bloom filter" 1584msgid "# requests filtered by bloom filter"
1615msgstr "# захтеви Ñу филтрирани блум филтером" 1585msgstr "# захтеви Ñу филтрирани блум филтером"
1616 1586
1617#: src/datacache/datacache.c:358 1587#: src/datacache/datacache.c:370
1618#, fuzzy 1588#, fuzzy
1619msgid "# requests for random value received" 1589msgid "# requests for random value received"
1620msgstr "# захтеви Ñу примљени" 1590msgstr "# захтеви Ñу примљени"
1621 1591
1622#: src/datacache/datacache.c:388 1592#: src/datacache/datacache.c:400
1623#, fuzzy 1593#, fuzzy
1624msgid "# proximity search requests received" 1594msgid "# proximity search requests received"
1625msgstr "# претраге клијента Ñу примљене" 1595msgstr "# претраге клијента Ñу примљене"
@@ -1965,7 +1935,7 @@ msgstr "База података МајÑкула ради\n"
1965 1935
1966#: src/datastore/plugin_datastore_postgres.c:284 1936#: src/datastore/plugin_datastore_postgres.c:284
1967#: src/datastore/plugin_datastore_postgres.c:897 1937#: src/datastore/plugin_datastore_postgres.c:897
1968msgid "Postgress exec failure" 1938msgid "Postgresql exec failure"
1969msgstr "" 1939msgstr ""
1970 1940
1971#: src/datastore/plugin_datastore_postgres.c:858 1941#: src/datastore/plugin_datastore_postgres.c:858
@@ -2000,7 +1970,18 @@ msgstr ""
2000msgid "sqlite version to old to determine size, assuming zero\n" 1970msgid "sqlite version to old to determine size, assuming zero\n"
2001msgstr "Ñкулајт издање је преÑтаро за одређивање величине, подразумевам нулу\n" 1971msgstr "Ñкулајт издање је преÑтаро за одређивање величине, подразумевам нулу\n"
2002 1972
2003#: src/datastore/plugin_datastore_sqlite.c:1274 1973#: src/datastore/plugin_datastore_sqlite.c:1266
1974#: src/datastore/plugin_datastore_sqlite.c:1279
1975#, fuzzy
1976msgid "error preparing statement\n"
1977msgstr "ÐиÑам уÑпео да припремим Ñтање „%s“\n"
1978
1979#: src/datastore/plugin_datastore_sqlite.c:1287
1980#, fuzzy
1981msgid "error stepping\n"
1982msgstr "„%s“ Ñе зауÑтавља"
1983
1984#: src/datastore/plugin_datastore_sqlite.c:1295
2004#, c-format 1985#, c-format
2005msgid "" 1986msgid ""
2006"Using sqlite page utilization to estimate payload (%llu pages of size %llu " 1987"Using sqlite page utilization to estimate payload (%llu pages of size %llu "
@@ -2009,7 +1990,7 @@ msgstr ""
2009"КориÑтим Ñтраницу коришћења Ñкулајта да проценим утовар (%llu Ñтранице " 1990"КориÑтим Ñтраницу коришћења Ñкулајта да проценим утовар (%llu Ñтранице "
2010"величине %llu бајта)\n" 1991"величине %llu бајта)\n"
2011 1992
2012#: src/datastore/plugin_datastore_sqlite.c:1316 1993#: src/datastore/plugin_datastore_sqlite.c:1337
2013#: src/namecache/plugin_namecache_sqlite.c:564 1994#: src/namecache/plugin_namecache_sqlite.c:564
2014#: src/namestore/plugin_namestore_sqlite.c:765 1995#: src/namestore/plugin_namestore_sqlite.c:765
2015msgid "Sqlite database running\n" 1996msgid "Sqlite database running\n"
@@ -2086,55 +2067,6 @@ msgstr "бива опширан (иÑпиÑује податке напредоÐ
2086msgid "Prints all packets that go through the DHT." 2067msgid "Prints all packets that go through the DHT."
2087msgstr "ИÑпиÑује Ñве пакете који иду кроз „DHT“." 2068msgstr "ИÑпиÑује Ñве пакете који иду кроз „DHT“."
2088 2069
2089#: src/dht/gnunet_dht_profiler.c:922 src/testbed/gnunet-testbed-profiler.c:255
2090#, c-format
2091msgid "Exiting as the number of peers is %u\n"
2092msgstr "Излазим јер је број парњака %u\n"
2093
2094#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3136
2095#, fuzzy
2096msgid "number of peers to start"
2097msgstr "број парњака у концензуÑу"
2098
2099#: src/dht/gnunet_dht_profiler.c:961
2100#, fuzzy
2101msgid "number of PUTs to perform per peer"
2102msgstr "број битова за тражење доказивања о раду"
2103
2104#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872
2105#: src/testbed/gnunet-testbed-profiler.c:305
2106msgid "name of the file with the login information for the testbed"
2107msgstr "назив датотеке Ñа подацима пријављивања за пробно меÑто"
2108
2109#: src/dht/gnunet_dht_profiler.c:973
2110msgid "delay between rounds for collecting statistics (default: 30 sec)"
2111msgstr ""
2112
2113#: src/dht/gnunet_dht_profiler.c:979
2114msgid "delay to start doing PUTs (default: 1 sec)"
2115msgstr ""
2116
2117#: src/dht/gnunet_dht_profiler.c:985
2118msgid "delay to start doing GETs (default: 5 min)"
2119msgstr ""
2120
2121#: src/dht/gnunet_dht_profiler.c:990
2122msgid "replication degree for DHT PUTs"
2123msgstr ""
2124
2125#: src/dht/gnunet_dht_profiler.c:996
2126msgid "chance that a peer is selected at random for PUTs"
2127msgstr ""
2128
2129#: src/dht/gnunet_dht_profiler.c:1002
2130msgid "timeout for DHT PUT and GET requests (default: 1 min)"
2131msgstr ""
2132
2133#: src/dht/gnunet_dht_profiler.c:1023
2134#, fuzzy
2135msgid "Measure quality and performance of the DHT service."
2136msgstr "Мери квалитет и учинковитоÑÑ‚ ÐСЕ уÑлуге."
2137
2138#: src/dht/gnunet-dht-put.c:133 2070#: src/dht/gnunet-dht-put.c:133
2139msgid "Must provide KEY and DATA for DHT put!\n" 2071msgid "Must provide KEY and DATA for DHT put!\n"
2140msgstr "Морате доÑтавити КЉУЧ и ПОДÐЦИ за ДХТ Ñтављање!\n" 2072msgstr "Морате доÑтавити КЉУЧ и ПОДÐЦИ за ДХТ Ñтављање!\n"
@@ -2261,89 +2193,89 @@ msgstr "# ÐÐЂИ ПÐРЊÐКРпоруке Ñу покренуте"
2261msgid "# requests TTL-dropped" 2193msgid "# requests TTL-dropped"
2262msgstr "# захтеви ТТЛ Ñу одбачени" 2194msgstr "# захтеви ТТЛ Ñу одбачени"
2263 2195
2264#: src/dht/gnunet-service-dht_neighbours.c:1052 2196#: src/dht/gnunet-service-dht_neighbours.c:1035
2265#: src/dht/gnunet-service-dht_neighbours.c:1096 2197#: src/dht/gnunet-service-dht_neighbours.c:1072
2266msgid "# Peers excluded from routing due to Bloomfilter" 2198msgid "# Peers excluded from routing due to Bloomfilter"
2267msgstr "# Парњаци Ñу изузети из рутирања због Блумфилтера" 2199msgstr "# Парњаци Ñу изузети из рутирања због Блумфилтера"
2268 2200
2269#: src/dht/gnunet-service-dht_neighbours.c:1069 2201#: src/dht/gnunet-service-dht_neighbours.c:1045
2270#: src/dht/gnunet-service-dht_neighbours.c:1112 2202#: src/dht/gnunet-service-dht_neighbours.c:1088
2271msgid "# Peer selection failed" 2203msgid "# Peer selection failed"
2272msgstr "# Бирање парњака није уÑпело" 2204msgstr "# Бирање парњака није уÑпело"
2273 2205
2274#: src/dht/gnunet-service-dht_neighbours.c:1270 2206#: src/dht/gnunet-service-dht_neighbours.c:1246
2275msgid "# PUT requests routed" 2207msgid "# PUT requests routed"
2276msgstr "# захтеви СТÐВИ Ñу рутирани" 2208msgstr "# захтеви СТÐВИ Ñу рутирани"
2277 2209
2278#: src/dht/gnunet-service-dht_neighbours.c:1304 2210#: src/dht/gnunet-service-dht_neighbours.c:1280
2279msgid "# PUT messages queued for transmission" 2211msgid "# PUT messages queued for transmission"
2280msgstr "# СТÐВИ поруке Ñу у реду за преноÑ" 2212msgstr "# СТÐВИ поруке Ñу у реду за преноÑ"
2281 2213
2282#: src/dht/gnunet-service-dht_neighbours.c:1316 2214#: src/dht/gnunet-service-dht_neighbours.c:1292
2283#: src/dht/gnunet-service-dht_neighbours.c:1458 2215#: src/dht/gnunet-service-dht_neighbours.c:1434
2284#: src/dht/gnunet-service-dht_neighbours.c:1562 2216#: src/dht/gnunet-service-dht_neighbours.c:1538
2285msgid "# P2P messages dropped due to full queue" 2217msgid "# P2P messages dropped due to full queue"
2286msgstr "# П2П поруке Ñу одбачене због пуног реда" 2218msgstr "# П2П поруке Ñу одбачене због пуног реда"
2287 2219
2288#: src/dht/gnunet-service-dht_neighbours.c:1401 2220#: src/dht/gnunet-service-dht_neighbours.c:1377
2289msgid "# GET requests routed" 2221msgid "# GET requests routed"
2290msgstr "# захтеви ДОБÐВИ Ñу рутирани" 2222msgstr "# захтеви ДОБÐВИ Ñу рутирани"
2291 2223
2292#: src/dht/gnunet-service-dht_neighbours.c:1445 2224#: src/dht/gnunet-service-dht_neighbours.c:1421
2293msgid "# GET messages queued for transmission" 2225msgid "# GET messages queued for transmission"
2294msgstr "# ДОБÐВИ поруке Ñу у реду за преноÑ" 2226msgstr "# ДОБÐВИ поруке Ñу у реду за преноÑ"
2295 2227
2296#: src/dht/gnunet-service-dht_neighbours.c:1577 2228#: src/dht/gnunet-service-dht_neighbours.c:1553
2297msgid "# RESULT messages queued for transmission" 2229msgid "# RESULT messages queued for transmission"
2298msgstr "# РЕЗУЛТÐТ поруке Ñу у реду за преноÑ" 2230msgstr "# РЕЗУЛТÐТ поруке Ñу у реду за преноÑ"
2299 2231
2300#: src/dht/gnunet-service-dht_neighbours.c:1680 2232#: src/dht/gnunet-service-dht_neighbours.c:1656
2301#, fuzzy 2233#, fuzzy
2302msgid "# Expired PUTs discarded" 2234msgid "# Expired PUTs discarded"
2303msgstr "# небитни одговори Ñу одбачени" 2235msgstr "# небитни одговори Ñу одбачени"
2304 2236
2305#: src/dht/gnunet-service-dht_neighbours.c:1688 2237#: src/dht/gnunet-service-dht_neighbours.c:1664
2306msgid "# P2P PUT requests received" 2238msgid "# P2P PUT requests received"
2307msgstr "# захтеви П2П СТÐВИ Ñу примљени" 2239msgstr "# захтеви П2П СТÐВИ Ñу примљени"
2308 2240
2309#: src/dht/gnunet-service-dht_neighbours.c:1692 2241#: src/dht/gnunet-service-dht_neighbours.c:1668
2310msgid "# P2P PUT bytes received" 2242msgid "# P2P PUT bytes received"
2311msgstr "# бајтови П2П СТÐВИ Ñу примљени" 2243msgstr "# бајтови П2П СТÐВИ Ñу примљени"
2312 2244
2313#: src/dht/gnunet-service-dht_neighbours.c:1924 2245#: src/dht/gnunet-service-dht_neighbours.c:1900
2314msgid "# FIND PEER requests ignored due to Bloomfilter" 2246msgid "# FIND PEER requests ignored due to Bloomfilter"
2315msgstr "# захтеви ÐÐЂИ ПÐРЊÐКРÑу занемарени због Блумфилтера" 2247msgstr "# захтеви ÐÐЂИ ПÐРЊÐКРÑу занемарени због Блумфилтера"
2316 2248
2317#: src/dht/gnunet-service-dht_neighbours.c:1933 2249#: src/dht/gnunet-service-dht_neighbours.c:1909
2318msgid "# FIND PEER requests ignored due to lack of HELLO" 2250msgid "# FIND PEER requests ignored due to lack of HELLO"
2319msgstr "# захтеви ÐÐЂИ ПÐРЊÐКРÑу занемарени због недоÑтатка „HELLO“-а" 2251msgstr "# захтеви ÐÐЂИ ПÐРЊÐКРÑу занемарени због недоÑтатка „HELLO“-а"
2320 2252
2321#: src/dht/gnunet-service-dht_neighbours.c:2096 2253#: src/dht/gnunet-service-dht_neighbours.c:2072
2322msgid "# P2P GET requests received" 2254msgid "# P2P GET requests received"
2323msgstr "# захтеви П2П ДОБÐВИ Ñу примљени" 2255msgstr "# захтеви П2П ДОБÐВИ Ñу примљени"
2324 2256
2325#: src/dht/gnunet-service-dht_neighbours.c:2100 2257#: src/dht/gnunet-service-dht_neighbours.c:2076
2326msgid "# P2P GET bytes received" 2258msgid "# P2P GET bytes received"
2327msgstr "# бајтови П2П ДОБÐВИ Ñу примљени" 2259msgstr "# бајтови П2П ДОБÐВИ Ñу примљени"
2328 2260
2329#: src/dht/gnunet-service-dht_neighbours.c:2166 2261#: src/dht/gnunet-service-dht_neighbours.c:2142
2330msgid "# P2P FIND PEER requests processed" 2262msgid "# P2P FIND PEER requests processed"
2331msgstr "# захтеви П2П ÐÐЂИ ПÐРЊÐКРÑу обрађени" 2263msgstr "# захтеви П2П ÐÐЂИ ПÐРЊÐКРÑу обрађени"
2332 2264
2333#: src/dht/gnunet-service-dht_neighbours.c:2187 2265#: src/dht/gnunet-service-dht_neighbours.c:2163
2334msgid "# P2P GET requests ONLY routed" 2266msgid "# P2P GET requests ONLY routed"
2335msgstr "# захтеви П2П ДОБÐВИ Ñу СÐМО рутирани" 2267msgstr "# захтеви П2П ДОБÐВИ Ñу СÐМО рутирани"
2336 2268
2337#: src/dht/gnunet-service-dht_neighbours.c:2365 2269#: src/dht/gnunet-service-dht_neighbours.c:2341
2338#, fuzzy 2270#, fuzzy
2339msgid "# Expired results discarded" 2271msgid "# Expired results discarded"
2340msgstr "# небитни одговори Ñу одбачени" 2272msgstr "# небитни одговори Ñу одбачени"
2341 2273
2342#: src/dht/gnunet-service-dht_neighbours.c:2382 2274#: src/dht/gnunet-service-dht_neighbours.c:2358
2343msgid "# P2P RESULTS received" 2275msgid "# P2P RESULTS received"
2344msgstr "# П2П РЕЗУЛТÐТИ Ñу примљени" 2276msgstr "# П2П РЕЗУЛТÐТИ Ñу примљени"
2345 2277
2346#: src/dht/gnunet-service-dht_neighbours.c:2386 2278#: src/dht/gnunet-service-dht_neighbours.c:2362
2347msgid "# P2P RESULT bytes received" 2279msgid "# P2P RESULT bytes received"
2348msgstr "# бајтови П2П РЕЗУЛТÐТ Ñу примљени" 2280msgstr "# бајтови П2П РЕЗУЛТÐТ Ñу примљени"
2349 2281
@@ -2383,6 +2315,55 @@ msgstr "# УноÑи Ñу додати у табелу рутирања"
2383msgid "# DHT requests combined" 2315msgid "# DHT requests combined"
2384msgstr "# ДХТ захтеви Ñу комбиновани" 2316msgstr "# ДХТ захтеви Ñу комбиновани"
2385 2317
2318#: src/dht/gnunet_dht_profiler.c:922 src/testbed/gnunet-testbed-profiler.c:255
2319#, c-format
2320msgid "Exiting as the number of peers is %u\n"
2321msgstr "Излазим јер је број парњака %u\n"
2322
2323#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3136
2324#, fuzzy
2325msgid "number of peers to start"
2326msgstr "број парњака у концензуÑу"
2327
2328#: src/dht/gnunet_dht_profiler.c:961
2329#, fuzzy
2330msgid "number of PUTs to perform per peer"
2331msgstr "број битова за тражење доказивања о раду"
2332
2333#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872
2334#: src/testbed/gnunet-testbed-profiler.c:305
2335msgid "name of the file with the login information for the testbed"
2336msgstr "назив датотеке Ñа подацима пријављивања за пробно меÑто"
2337
2338#: src/dht/gnunet_dht_profiler.c:973
2339msgid "delay between rounds for collecting statistics (default: 30 sec)"
2340msgstr ""
2341
2342#: src/dht/gnunet_dht_profiler.c:979
2343msgid "delay to start doing PUTs (default: 1 sec)"
2344msgstr ""
2345
2346#: src/dht/gnunet_dht_profiler.c:985
2347msgid "delay to start doing GETs (default: 5 min)"
2348msgstr ""
2349
2350#: src/dht/gnunet_dht_profiler.c:990
2351msgid "replication degree for DHT PUTs"
2352msgstr ""
2353
2354#: src/dht/gnunet_dht_profiler.c:996
2355msgid "chance that a peer is selected at random for PUTs"
2356msgstr ""
2357
2358#: src/dht/gnunet_dht_profiler.c:1002
2359msgid "timeout for DHT PUT and GET requests (default: 1 min)"
2360msgstr ""
2361
2362#: src/dht/gnunet_dht_profiler.c:1023
2363#, fuzzy
2364msgid "Measure quality and performance of the DHT service."
2365msgstr "Мери квалитет и учинковитоÑÑ‚ ÐСЕ уÑлуге."
2366
2386#: src/dht/plugin_block_dht.c:189 2367#: src/dht/plugin_block_dht.c:189
2387#, c-format 2368#, c-format
2388msgid "Block not of type %u\n" 2369msgid "Block not of type %u\n"
@@ -2825,7 +2806,7 @@ msgstr "Директоријум је превелик за проÑтор адÑ
2825#: src/fs/fs_download.c:346 2806#: src/fs/fs_download.c:346
2826#, fuzzy, c-format 2807#, fuzzy, c-format
2827msgid "" 2808msgid ""
2828"Failed to access full directroy contents of `%s' for recursive download\n" 2809"Failed to access full directory contents of `%s' for recursive download\n"
2829msgstr "ÐиÑам уÑпео да направим директоријум за дубинÑко преузимање „%s“\n" 2810msgstr "ÐиÑам уÑпео да направим директоријум за дубинÑко преузимање „%s“\n"
2830 2811
2831#: src/fs/fs_download.c:528 src/fs/fs_download.c:541 2812#: src/fs/fs_download.c:528 src/fs/fs_download.c:541
@@ -3337,14 +3318,6 @@ msgstr ""
3337"Преузима датотеке Ñа ГÐУнет-а кориÑтећи ГÐУнет CHK или LOC УРИ (gnunet://fs/" 3318"Преузима датотеке Ñа ГÐУнет-а кориÑтећи ГÐУнет CHK или LOC УРИ (gnunet://fs/"
3338"chk/...)" 3319"chk/...)"
3339 3320
3340#: src/fs/gnunet-fs.c:128
3341msgid "print a list of all indexed files"
3342msgstr "иÑпиÑује ÑпиÑак Ñвих индекÑираних датотека"
3343
3344#: src/fs/gnunet-fs.c:141
3345msgid "Special file-sharing operations"
3346msgstr "ПоÑебне радње дељења датотека"
3347
3348#: src/fs/gnunet-fs-profiler.c:211 3321#: src/fs/gnunet-fs-profiler.c:211
3349msgid "run the experiment with COUNT peers" 3322msgid "run the experiment with COUNT peers"
3350msgstr "одрађује екÑперимент Ñа БРОЈ парњака" 3323msgstr "одрађује екÑперимент Ñа БРОЈ парњака"
@@ -3361,6 +3334,14 @@ msgstr "ÑамоÑтално окончава екÑперимент након
3361msgid "run a testbed to measure file-sharing performance" 3334msgid "run a testbed to measure file-sharing performance"
3362msgstr "покреће пробно меÑто за мерење учинковитоÑти дељења датотека" 3335msgstr "покреће пробно меÑто за мерење учинковитоÑти дељења датотека"
3363 3336
3337#: src/fs/gnunet-fs.c:128
3338msgid "print a list of all indexed files"
3339msgstr "иÑпиÑује ÑпиÑак Ñвих индекÑираних датотека"
3340
3341#: src/fs/gnunet-fs.c:141
3342msgid "Special file-sharing operations"
3343msgstr "ПоÑебне радње дељења датотека"
3344
3364#: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:234 3345#: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:234
3365#, c-format 3346#, c-format
3366msgid "Publishing `%s' at %llu/%llu (%s remaining)\n" 3347msgid "Publishing `%s' at %llu/%llu (%s remaining)\n"
@@ -4054,51 +4035,7 @@ msgstr ""
4054msgid "look for GNS2DNS records instead of ANY" 4035msgid "look for GNS2DNS records instead of ANY"
4055msgstr "" 4036msgstr ""
4056 4037
4057#: src/gns/gnunet-gns.c:257 4038#: src/gns/gnunet-gns-import.c:490
4058#, fuzzy, c-format
4059msgid "`%s' is not a valid DNS domain name\n"
4060msgstr "„%s“ није иÑправна ИП адреÑа.\n"
4061
4062#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254
4063#, c-format
4064msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n"
4065msgstr "ÐиÑам уÑпео да претворим ДÐС ИДÐР„%s“ у УТФ-8: %s\n"
4066
4067#: src/gns/gnunet-gns.c:281
4068msgid "Cannot resolve using GNS: GNUnet peer not running\n"
4069msgstr ""
4070
4071#: src/gns/gnunet-gns.c:305
4072#, c-format
4073msgid "Invalid typename specified, assuming `ANY'\n"
4074msgstr ""
4075
4076#: src/gns/gnunet-gns.c:340
4077msgid "Lookup a record for the given name"
4078msgstr "Претражује Ð·Ð°Ð¿Ð¸Ñ Ð·Ð° датим називом"
4079
4080#: src/gns/gnunet-gns.c:346
4081msgid "Specify the type of the record to lookup"
4082msgstr "Ðаводи врÑту запиÑа за претраживање"
4083
4084#: src/gns/gnunet-gns.c:352
4085#, fuzzy
4086msgid "Specify a timeout for the lookup"
4087msgstr "Ðаводи време иÑтека за претраживање"
4088
4089#: src/gns/gnunet-gns.c:356
4090msgid "No unneeded output"
4091msgstr "Ðема непотребног излаза"
4092
4093#: src/gns/gnunet-gns.c:361
4094msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8"
4095msgstr ""
4096
4097#: src/gns/gnunet-gns.c:375
4098msgid "GNUnet GNS resolver tool"
4099msgstr "Ðлат ГÐУнет ГÐС решавача"
4100
4101#: src/gns/gnunet-gns-import.c:491
4102msgid "This program will import some GNS authorities into your GNS namestore." 4039msgid "This program will import some GNS authorities into your GNS namestore."
4103msgstr "Овај програм ће увеÑти неке ГÐС ауторитете у ваш ГÐС Ñмештај назива." 4040msgstr "Овај програм ће увеÑти неке ГÐС ауторитете у ваш ГÐС Ñмештај назива."
4104 4041
@@ -4217,6 +4154,50 @@ msgstr ""
4217msgid "GNUnet GNS proxy" 4154msgid "GNUnet GNS proxy"
4218msgstr "ГÐУнет ГÐС поÑредник" 4155msgstr "ГÐУнет ГÐС поÑредник"
4219 4156
4157#: src/gns/gnunet-gns.c:257
4158#, fuzzy, c-format
4159msgid "`%s' is not a valid DNS domain name\n"
4160msgstr "„%s“ није иÑправна ИП адреÑа.\n"
4161
4162#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254
4163#, c-format
4164msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n"
4165msgstr "ÐиÑам уÑпео да претворим ДÐС ИДÐР„%s“ у УТФ-8: %s\n"
4166
4167#: src/gns/gnunet-gns.c:281
4168msgid "Cannot resolve using GNS: GNUnet peer not running\n"
4169msgstr ""
4170
4171#: src/gns/gnunet-gns.c:305
4172#, c-format
4173msgid "Invalid typename specified, assuming `ANY'\n"
4174msgstr ""
4175
4176#: src/gns/gnunet-gns.c:340
4177msgid "Lookup a record for the given name"
4178msgstr "Претражује Ð·Ð°Ð¿Ð¸Ñ Ð·Ð° датим називом"
4179
4180#: src/gns/gnunet-gns.c:346
4181msgid "Specify the type of the record to lookup"
4182msgstr "Ðаводи врÑту запиÑа за претраживање"
4183
4184#: src/gns/gnunet-gns.c:352
4185#, fuzzy
4186msgid "Specify a timeout for the lookup"
4187msgstr "Ðаводи време иÑтека за претраживање"
4188
4189#: src/gns/gnunet-gns.c:356
4190msgid "No unneeded output"
4191msgstr "Ðема непотребног излаза"
4192
4193#: src/gns/gnunet-gns.c:361
4194msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8"
4195msgstr ""
4196
4197#: src/gns/gnunet-gns.c:375
4198msgid "GNUnet GNS resolver tool"
4199msgstr "Ðлат ГÐУнет ГÐС решавача"
4200
4220#: src/gns/gnunet-service-gns.c:505 4201#: src/gns/gnunet-service-gns.c:505
4221#, fuzzy 4202#, fuzzy
4222msgid "Properly base32-encoded public key required" 4203msgid "Properly base32-encoded public key required"
@@ -4227,8 +4208,8 @@ msgid "Failed to connect to the namecache!\n"
4227msgstr "ÐиÑам уÑпео да Ñе повежем Ñа оÑтавом назива!\n" 4208msgstr "ÐиÑам уÑпео да Ñе повежем Ñа оÑтавом назива!\n"
4228 4209
4229#: src/gns/gnunet-service-gns.c:560 4210#: src/gns/gnunet-service-gns.c:560
4230#: src/zonemaster/gnunet-service-zonemaster.c:885
4231#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442 4211#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442
4212#: src/zonemaster/gnunet-service-zonemaster.c:885
4232msgid "Could not connect to DHT!\n" 4213msgid "Could not connect to DHT!\n"
4233msgstr "Ðе могу да Ñе повежем на ДХТ!\n" 4214msgstr "Ðе могу да Ñе повежем на ДХТ!\n"
4234 4215
@@ -4786,35 +4767,35 @@ msgstr "ÐиÑам уÑпео да направим его: %s\n"
4786msgid "Failed to set default ego: %s\n" 4767msgid "Failed to set default ego: %s\n"
4787msgstr "ÐиÑам уÑпео да поÑтавим оÑновни его: %s\n" 4768msgstr "ÐиÑам уÑпео да поÑтавим оÑновни его: %s\n"
4788 4769
4789#: src/identity/gnunet-identity.c:462 4770#: src/identity/gnunet-identity.c:461
4790msgid "create ego NAME" 4771msgid "create ego NAME"
4791msgstr "Ñтвара ÐÐЗИВ ега" 4772msgstr "Ñтвара ÐÐЗИВ ега"
4792 4773
4793#: src/identity/gnunet-identity.c:467 4774#: src/identity/gnunet-identity.c:466
4794msgid "delete ego NAME " 4775msgid "delete ego NAME "
4795msgstr "брише ÐÐЗИВ ега " 4776msgstr "брише ÐÐЗИВ ега "
4796 4777
4797#: src/identity/gnunet-identity.c:473 4778#: src/identity/gnunet-identity.c:472
4798msgid "" 4779msgid ""
4799"set the private key for the identity to PRIVATE_KEY (use together with -C)" 4780"set the private key for the identity to PRIVATE_KEY (use together with -C)"
4800msgstr "" 4781msgstr ""
4801 4782
4802#: src/identity/gnunet-identity.c:478 4783#: src/identity/gnunet-identity.c:477
4803msgid "generate an EdDSA identity. (use together with -C) EXPERIMENTAL" 4784msgid "generate an EdDSA identity. (use together with -C) EXPERIMENTAL"
4804msgstr "" 4785msgstr ""
4805 4786
4806# 4787#
4807# File: util/dialtest.c++, line: 134 4788# File: util/dialtest.c++, line: 134
4808#: src/identity/gnunet-identity.c:482 4789#: src/identity/gnunet-identity.c:481
4809msgid "display all egos" 4790msgid "display all egos"
4810msgstr "приказује Ñве егое" 4791msgstr "приказује Ñве егое"
4811 4792
4812#: src/identity/gnunet-identity.c:486 4793#: src/identity/gnunet-identity.c:485
4813#, fuzzy 4794#, fuzzy
4814msgid "reduce output" 4795msgid "reduce output"
4815msgstr "опширан излаз" 4796msgstr "опширан излаз"
4816 4797
4817#: src/identity/gnunet-identity.c:493 4798#: src/identity/gnunet-identity.c:492
4818#, fuzzy 4799#, fuzzy
4819msgid "" 4800msgid ""
4820"set default identity to NAME for a subsystem SUBSYSTEM (use together with -" 4801"set default identity to NAME for a subsystem SUBSYSTEM (use together with -"
@@ -4823,22 +4804,22 @@ msgstr ""
4823"поÑтавља оÑновни идентитет на ЕГО за подÑиÑтем ПОДСИСТЕМ (кориÑтите заједно " 4804"поÑтавља оÑновни идентитет на ЕГО за подÑиÑтем ПОДСИСТЕМ (кориÑтите заједно "
4824"Ñа -s)" 4805"Ñа -s)"
4825 4806
4826#: src/identity/gnunet-identity.c:497 4807#: src/identity/gnunet-identity.c:496
4827msgid "run in monitor mode egos" 4808msgid "run in monitor mode egos"
4828msgstr "ради у режиму праћења егоа" 4809msgstr "ради у режиму праћења егоа"
4829 4810
4830#: src/identity/gnunet-identity.c:501 4811#: src/identity/gnunet-identity.c:500
4831msgid "display private keys as well" 4812msgid "display private keys as well"
4832msgstr "" 4813msgstr ""
4833 4814
4834#: src/identity/gnunet-identity.c:508 4815#: src/identity/gnunet-identity.c:507
4835msgid "" 4816msgid ""
4836"set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)" 4817"set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)"
4837msgstr "" 4818msgstr ""
4838"поÑтавља оÑновни идентитет на ЕГО за подÑиÑтем ПОДСИСТЕМ (кориÑтите заједно " 4819"поÑтавља оÑновни идентитет на ЕГО за подÑиÑтем ПОДСИСТЕМ (кориÑтите заједно "
4839"Ñа -e)" 4820"Ñа -e)"
4840 4821
4841#: src/identity/gnunet-identity.c:523 4822#: src/identity/gnunet-identity.c:522
4842msgid "Maintain egos" 4823msgid "Maintain egos"
4843msgstr "Одржава егое" 4824msgstr "Одржава егое"
4844 4825
@@ -4890,11 +4871,11 @@ msgstr ""
4890msgid "Failed to create directory `%s' for storing egos\n" 4871msgid "Failed to create directory `%s' for storing egos\n"
4891msgstr "ÐиÑам уÑпео да направим директоријум „%s“ за Ñмештајне егое\n" 4872msgstr "ÐиÑам уÑпео да направим директоријум „%s“ за Ñмештајне егое\n"
4892 4873
4893#: src/identity/plugin_rest_identity.c:1385 4874#: src/identity/plugin_rest_identity.c:1401
4894msgid "Identity REST API initialized\n" 4875msgid "Identity REST API initialized\n"
4895msgstr "" 4876msgstr ""
4896 4877
4897#: src/json/json.c:139 4878#: src/json/json.c:120
4898#, fuzzy, c-format 4879#, fuzzy, c-format
4899msgid "Failed to parse JSON in option `%s': %s (%s)\n" 4880msgid "Failed to parse JSON in option `%s': %s (%s)\n"
4900msgstr "ÐиÑам уÑпео да обрадим „HELLO“ у датотеци „%s“: %s\n" 4881msgstr "ÐиÑам уÑпео да обрадим „HELLO“ у датотеци „%s“: %s\n"
@@ -4952,11 +4933,11 @@ msgstr "наводи јавни кључ зоне за претраживање"
4952msgid "GNUnet zone manipulation tool" 4933msgid "GNUnet zone manipulation tool"
4953msgstr "Ðлат манипуÑлиÑања ГÐУнет зоном" 4934msgstr "Ðлат манипуÑлиÑања ГÐУнет зоном"
4954 4935
4955#: src/namecache/namecache_api.c:285 4936#: src/namecache/namecache_api.c:286
4956msgid "Namecache failed to cache block" 4937msgid "Namecache failed to cache block"
4957msgstr "ОÑтава назива није уÑпела да ÑмеÑти у оÑтаву блок" 4938msgstr "ОÑтава назива није уÑпела да ÑмеÑти у оÑтаву блок"
4958 4939
4959#: src/namecache/namecache_api.c:373 4940#: src/namecache/namecache_api.c:374
4960#, fuzzy 4941#, fuzzy
4961msgid "Error communicating with namecache service" 4942msgid "Error communicating with namecache service"
4962msgstr "Грешка у комуникацији Ñа уÑлугом ПОДÐЦИ_ПÐРЊÐКÐ: %s\n" 4943msgstr "Грешка у комуникацији Ñа уÑлугом ПОДÐЦИ_ПÐРЊÐКÐ: %s\n"
@@ -4996,6 +4977,113 @@ msgstr ""
4996msgid "Failed to setup database at `%s'\n" 4977msgid "Failed to setup database at `%s'\n"
4997msgstr "ÐиÑам уÑпео да покренем „%s“ на „%s“\n" 4978msgstr "ÐиÑам уÑпео да покренем „%s“ на „%s“\n"
4998 4979
4980#: src/namestore/gnunet-namestore-fcfsd.c:359
4981#, fuzzy
4982msgid "can not search the namestore"
4983msgstr "Ðе могу да покренем главног контролора"
4984
4985#: src/namestore/gnunet-namestore-fcfsd.c:413
4986#: src/namestore/gnunet-namestore-fcfsd.c:554
4987#, fuzzy
4988msgid "unable to scan namestore"
4989msgstr "ÐиÑам уÑпео да Ñе повежем Ñа Ñмештајем назива\n"
4990
4991#: src/namestore/gnunet-namestore-fcfsd.c:441
4992#, fuzzy, c-format
4993msgid "Failed to create record for `%s': %s\n"
4994msgstr "ÐиÑам уÑпео да направим Ð·Ð°Ð¿Ð¸Ñ Ð·Ð° домен „%s“: %s\n"
4995
4996#: src/namestore/gnunet-namestore-fcfsd.c:453
4997#, fuzzy
4998msgid "no errors"
4999msgstr "непозната грешка"
5000
5001#: src/namestore/gnunet-namestore-fcfsd.c:489
5002#, fuzzy, c-format
5003msgid "The requested key `%s' exists as `%s'\n"
5004msgstr "Скупови знакова Ñе захтевају где је „%s“–>„%s“\n"
5005
5006#: src/namestore/gnunet-namestore-fcfsd.c:496
5007msgid "key exists"
5008msgstr ""
5009
5010#: src/namestore/gnunet-namestore-fcfsd.c:513
5011#, fuzzy
5012msgid "Error creating record data\n"
5013msgstr "Грешка Ñтварања тунела\n"
5014
5015#: src/namestore/gnunet-namestore-fcfsd.c:517
5016#, fuzzy
5017msgid "unable to store record"
5018msgstr "Смештај назива није уÑпео да ÑмеÑти запиÑ\n"
5019
5020#: src/namestore/gnunet-namestore-fcfsd.c:588
5021#, c-format
5022msgid "Requested name `%s' exists with `%u' records\n"
5023msgstr ""
5024
5025#: src/namestore/gnunet-namestore-fcfsd.c:594
5026msgid "name exists\n"
5027msgstr ""
5028
5029#: src/namestore/gnunet-namestore-fcfsd.c:780
5030msgid "unable to process submitted data"
5031msgstr ""
5032
5033#: src/namestore/gnunet-namestore-fcfsd.c:787
5034msgid "the submitted data is invalid"
5035msgstr ""
5036
5037#: src/namestore/gnunet-namestore-fcfsd.c:806
5038#, fuzzy
5039msgid "invalid parameters"
5040msgstr "ÐеиÑправан аргумент „%s“\n"
5041
5042#: src/namestore/gnunet-namestore-fcfsd.c:823
5043#, fuzzy
5044msgid "invalid name"
5045msgstr "ÐеиÑправан аргумент „%s“\n"
5046
5047#: src/namestore/gnunet-namestore-fcfsd.c:834
5048#, fuzzy, c-format
5049msgid "Unable to parse key %s\n"
5050msgstr "Ðе могу да обрадим „MX“ Ð·Ð°Ð¿Ð¸Ñ â€ž%s“\n"
5051
5052#: src/namestore/gnunet-namestore-fcfsd.c:838
5053#, fuzzy
5054msgid "unable to parse key"
5055msgstr "Ðе могу да обрадим „MX“ Ð·Ð°Ð¿Ð¸Ñ â€ž%s“\n"
5056
5057#: src/namestore/gnunet-namestore-fcfsd.c:949
5058msgid "No ego configured for `fcfsd` subsystem\n"
5059msgstr "Ðије подешен его за „fcfsd“ подÑиÑтем\n"
5060
5061#: src/namestore/gnunet-namestore-fcfsd.c:974
5062msgid "Failed to start HTTP server\n"
5063msgstr "ÐиÑам уÑпео да покренем ХТТП Ñервер\n"
5064
5065#: src/namestore/gnunet-namestore-fcfsd.c:1058
5066msgid "No port specified, using default value\n"
5067msgstr ""
5068
5069#: src/namestore/gnunet-namestore-fcfsd.c:1076
5070msgid "Failed to connect to identity\n"
5071msgstr "ÐиÑам уÑпео да Ñе повежем Ñа идентитетом\n"
5072
5073#: src/namestore/gnunet-namestore-fcfsd.c:1100
5074#, fuzzy
5075msgid "Unable to set up the daemon\n"
5076msgstr "Ðе могу да увезем приватни кључ из датотеке „%s“\n"
5077
5078#: src/namestore/gnunet-namestore-fcfsd.c:1123
5079msgid "name of the zone managed by FCFSD"
5080msgstr ""
5081
5082#: src/namestore/gnunet-namestore-fcfsd.c:1132
5083#, fuzzy
5084msgid "GNU Name System First-Come-First-Served name registration service"
5085msgstr "УÑлуга региÑтрације назива Први Стиже Први Служи ГÐУ СиÑтема Ðазива"
5086
4999#: src/namestore/gnunet-namestore.c:334 5087#: src/namestore/gnunet-namestore.c:334
5000#, c-format 5088#, c-format
5001msgid "Adding record failed: %s\n" 5089msgid "Adding record failed: %s\n"
@@ -5234,83 +5322,16 @@ msgstr ""
5234msgid "name of the ego controlling the zone" 5322msgid "name of the ego controlling the zone"
5235msgstr "назив егоа који контролише зону" 5323msgstr "назив егоа који контролише зону"
5236 5324
5237#: src/namestore/gnunet-namestore-fcfsd.c:552
5238#, c-format
5239msgid "Unsupported form value `%s'\n"
5240msgstr "Ðеподржана вредноÑÑ‚ облика „%s“\n"
5241
5242#: src/namestore/gnunet-namestore-fcfsd.c:579
5243#, c-format
5244msgid "Failed to create record for domain `%s': %s\n"
5245msgstr "ÐиÑам уÑпео да направим Ð·Ð°Ð¿Ð¸Ñ Ð·Ð° домен „%s“: %s\n"
5246
5247#: src/namestore/gnunet-namestore-fcfsd.c:600
5248msgid "Error when mapping zone to name\n"
5249msgstr "Грешка приликом мапирања зоне у назив\n"
5250
5251#: src/namestore/gnunet-namestore-fcfsd.c:633
5252#, c-format
5253msgid "Found existing name `%s' for the given key\n"
5254msgstr "Ðађох поÑтојећи назив „%s“ за дати кључ\n"
5255
5256#: src/namestore/gnunet-namestore-fcfsd.c:646
5257#, fuzzy
5258msgid "Error creating record data.\n"
5259msgstr "Грешка Ñтварања тунела\n"
5260
5261#: src/namestore/gnunet-namestore-fcfsd.c:707
5262#, c-format
5263msgid "Found %u existing records for domain `%s'\n"
5264msgstr "Ðађох %u поÑтојећа запиÑа за домен „%s“\n"
5265
5266#: src/namestore/gnunet-namestore-fcfsd.c:796
5267#, c-format
5268msgid "Failed to create page for `%s'\n"
5269msgstr "ÐиÑам уÑпео да направим Ñтраницу за „%s“\n"
5270
5271#: src/namestore/gnunet-namestore-fcfsd.c:815
5272#, c-format
5273msgid "Failed to setup post processor for `%s'\n"
5274msgstr "ÐиÑам уÑпео да поÑтавим поÑтпроцеÑор за „%s“\n"
5275
5276#: src/namestore/gnunet-namestore-fcfsd.c:850
5277msgid "Domain name must not contain `.'\n"
5278msgstr "Ðазив домена не Ñме да Ñадржи „.“\n"
5279
5280#: src/namestore/gnunet-namestore-fcfsd.c:859
5281msgid "Domain name must not contain `+'\n"
5282msgstr "Ðазив домена не Ñме да Ñадржи „+“\n"
5283
5284#: src/namestore/gnunet-namestore-fcfsd.c:1094
5285msgid "No ego configured for `fcfsd` subsystem\n"
5286msgstr "Ðије подешен его за „fcfsd“ подÑиÑтем\n"
5287
5288#: src/namestore/gnunet-namestore-fcfsd.c:1125
5289msgid "Failed to start HTTP server\n"
5290msgstr "ÐиÑам уÑпео да покренем ХТТП Ñервер\n"
5291
5292#: src/namestore/gnunet-namestore-fcfsd.c:1173
5293msgid "Failed to connect to identity\n"
5294msgstr "ÐиÑам уÑпео да Ñе повежем Ñа идентитетом\n"
5295
5296#: src/namestore/gnunet-namestore-fcfsd.c:1200
5297msgid "name of the zone that is to be managed by FCFSD"
5298msgstr ""
5299
5300#: src/namestore/gnunet-namestore-fcfsd.c:1220
5301msgid "GNU Name System First Come First Serve name registration service"
5302msgstr "УÑлуга региÑтрације назива Први Стиже Први Служи ГÐУ СиÑтема Ðазива"
5303
5304#: src/namestore/gnunet-service-namestore.c:871 5325#: src/namestore/gnunet-service-namestore.c:871
5305#, c-format 5326#, c-format
5306msgid "Failed to replicate block in namecache: %s\n" 5327msgid "Failed to replicate block in namecache: %s\n"
5307msgstr "ÐиÑам уÑпео да реплицирам блок у оÑтави назива: %s\n" 5328msgstr "ÐиÑам уÑпео да реплицирам блок у оÑтави назива: %s\n"
5308 5329
5309#: src/namestore/gnunet-zoneimport.c:1848 5330#: src/namestore/gnunet-zoneimport.c:1847
5310msgid "size to use for the main hash map" 5331msgid "size to use for the main hash map"
5311msgstr "" 5332msgstr ""
5312 5333
5313#: src/namestore/gnunet-zoneimport.c:1854 5334#: src/namestore/gnunet-zoneimport.c:1853
5314msgid "minimum expiration time we assume for imported records" 5335msgid "minimum expiration time we assume for imported records"
5315msgstr "" 5336msgstr ""
5316 5337
@@ -5333,7 +5354,7 @@ msgstr ""
5333msgid "Flat file database running\n" 5354msgid "Flat file database running\n"
5334msgstr "База података шаблона ради\n" 5355msgstr "База података шаблона ради\n"
5335 5356
5336#: src/namestore/plugin_rest_namestore.c:1105 5357#: src/namestore/plugin_rest_namestore.c:1111
5337#, fuzzy 5358#, fuzzy
5338msgid "Namestore REST API initialized\n" 5359msgid "Namestore REST API initialized\n"
5339msgstr "Меш је покренут\n" 5360msgstr "Меш је покренут\n"
@@ -5625,10 +5646,6 @@ msgstr "ниÑам нашао наредбу „external-ip“\n"
5625msgid "`upnpc' command not found\n" 5646msgid "`upnpc' command not found\n"
5626msgstr "ниÑам нашао „upnpc“ наредбу\n" 5647msgstr "ниÑам нашао „upnpc“ наредбу\n"
5627 5648
5628#: src/nse/gnunet-nse.c:124
5629msgid "Show network size estimates from NSE service."
5630msgstr "Показује процене величине мреже из ÐСЕ уÑлуге."
5631
5632#: src/nse/gnunet-nse-profiler.c:857 5649#: src/nse/gnunet-nse-profiler.c:857
5633msgid "limit to the number of connections to NSE services, 0 for none" 5650msgid "limit to the number of connections to NSE services, 0 for none"
5634msgstr "ограничење броја веза на ÐСЕ уÑлуге, 0 за ништа" 5651msgstr "ограничење броја веза на ÐСЕ уÑлуге, 0 за ништа"
@@ -5653,67 +5670,15 @@ msgstr "заÑтој између рунди"
5653msgid "Measure quality and performance of the NSE service." 5670msgid "Measure quality and performance of the NSE service."
5654msgstr "Мери квалитет и учинковитоÑÑ‚ ÐСЕ уÑлуге." 5671msgstr "Мери квалитет и учинковитоÑÑ‚ ÐСЕ уÑлуге."
5655 5672
5673#: src/nse/gnunet-nse.c:124
5674msgid "Show network size estimates from NSE service."
5675msgstr "Показује процене величине мреже из ÐСЕ уÑлуге."
5676
5656#: src/nse/gnunet-service-nse.c:1450 5677#: src/nse/gnunet-service-nse.c:1450
5657#: src/revocation/gnunet-service-revocation.c:883 src/util/gnunet-scrypt.c:260 5678#: src/revocation/gnunet-service-revocation.c:883 src/util/gnunet-scrypt.c:260
5658msgid "Value is too large.\n" 5679msgid "Value is too large.\n"
5659msgstr "ВредноÑÑ‚ је превелика.\n" 5680msgstr "ВредноÑÑ‚ је превелика.\n"
5660 5681
5661#: src/peerinfo/gnunet-service-peerinfo.c:175
5662#, c-format
5663msgid "Removing expired address of transport `%s'\n"
5664msgstr "Уклањам иÑтеклу адреÑу преноÑа „%s“\n"
5665
5666#: src/peerinfo/gnunet-service-peerinfo.c:306
5667#, c-format
5668msgid "Failed to parse HELLO in file `%s': %s\n"
5669msgstr "ÐиÑам уÑпео да обрадим „HELLO“ у датотеци „%s“: %s\n"
5670
5671#: src/peerinfo/gnunet-service-peerinfo.c:323
5672#: src/peerinfo/gnunet-service-peerinfo.c:348
5673#, c-format
5674msgid "Failed to parse HELLO in file `%s'\n"
5675msgstr "ÐиÑам уÑпео да обрадим „HELLO“ у датотеци „%s“\n"
5676
5677#: src/peerinfo/gnunet-service-peerinfo.c:426
5678msgid "# peers known"
5679msgstr "# парњака је познато"
5680
5681#: src/peerinfo/gnunet-service-peerinfo.c:468
5682#, c-format
5683msgid ""
5684"File `%s' in directory `%s' does not match naming convention. Removed.\n"
5685msgstr ""
5686"Датотека „%s“ у директоријуму „%s“ не одговара договору именовања. Уклоњена "
5687"је.\n"
5688
5689#: src/peerinfo/gnunet-service-peerinfo.c:624
5690#, c-format
5691msgid "Scanning directory `%s'\n"
5692msgstr "Скенирам директоријум „%s“\n"
5693
5694#: src/peerinfo/gnunet-service-peerinfo.c:631
5695#, c-format
5696msgid "Still no peers found in `%s'!\n"
5697msgstr "Још увек ниÑам нашао парњаке у „%s“!\n"
5698
5699#: src/peerinfo/gnunet-service-peerinfo.c:1027
5700#, c-format
5701msgid "Cleaning up directory `%s'\n"
5702msgstr "ЧиÑтим директоријум „%s“\n"
5703
5704#: src/peerinfo/gnunet-service-peerinfo.c:1322
5705#, c-format
5706msgid "Importing HELLOs from `%s'\n"
5707msgstr "Увозим „HELLO“-е из „%s“\n"
5708
5709#: src/peerinfo/gnunet-service-peerinfo.c:1335
5710msgid "Skipping import of included HELLOs\n"
5711msgstr "ПреÑкачем увоз укључених „HELLO“-а\n"
5712
5713#: src/peerinfo/peerinfo_api.c:217
5714msgid "Failed to receive response from `PEERINFO' service."
5715msgstr "ÐиÑам уÑпео да примим одговор Ñа уÑлуге „PEERINFO“."
5716
5717#: src/peerinfo-tool/gnunet-peerinfo.c:237 5682#: src/peerinfo-tool/gnunet-peerinfo.c:237
5718#, c-format 5683#, c-format
5719msgid "%sPeer `%s'\n" 5684msgid "%sPeer `%s'\n"
@@ -5808,6 +5773,62 @@ msgstr "ÐиÑам уÑпео да учитам прикључак преноÑÐ
5808msgid "Peerinfo REST API initialized\n" 5773msgid "Peerinfo REST API initialized\n"
5809msgstr "" 5774msgstr ""
5810 5775
5776#: src/peerinfo/gnunet-service-peerinfo.c:175
5777#, c-format
5778msgid "Removing expired address of transport `%s'\n"
5779msgstr "Уклањам иÑтеклу адреÑу преноÑа „%s“\n"
5780
5781#: src/peerinfo/gnunet-service-peerinfo.c:306
5782#, c-format
5783msgid "Failed to parse HELLO in file `%s': %s\n"
5784msgstr "ÐиÑам уÑпео да обрадим „HELLO“ у датотеци „%s“: %s\n"
5785
5786#: src/peerinfo/gnunet-service-peerinfo.c:323
5787#: src/peerinfo/gnunet-service-peerinfo.c:348
5788#, c-format
5789msgid "Failed to parse HELLO in file `%s'\n"
5790msgstr "ÐиÑам уÑпео да обрадим „HELLO“ у датотеци „%s“\n"
5791
5792#: src/peerinfo/gnunet-service-peerinfo.c:426
5793msgid "# peers known"
5794msgstr "# парњака је познато"
5795
5796#: src/peerinfo/gnunet-service-peerinfo.c:468
5797#, c-format
5798msgid ""
5799"File `%s' in directory `%s' does not match naming convention. Removed.\n"
5800msgstr ""
5801"Датотека „%s“ у директоријуму „%s“ не одговара договору именовања. Уклоњена "
5802"је.\n"
5803
5804#: src/peerinfo/gnunet-service-peerinfo.c:624
5805#, c-format
5806msgid "Scanning directory `%s'\n"
5807msgstr "Скенирам директоријум „%s“\n"
5808
5809#: src/peerinfo/gnunet-service-peerinfo.c:631
5810#, c-format
5811msgid "Still no peers found in `%s'!\n"
5812msgstr "Још увек ниÑам нашао парњаке у „%s“!\n"
5813
5814#: src/peerinfo/gnunet-service-peerinfo.c:1027
5815#, c-format
5816msgid "Cleaning up directory `%s'\n"
5817msgstr "ЧиÑтим директоријум „%s“\n"
5818
5819#: src/peerinfo/gnunet-service-peerinfo.c:1322
5820#, c-format
5821msgid "Importing HELLOs from `%s'\n"
5822msgstr "Увозим „HELLO“-е из „%s“\n"
5823
5824#: src/peerinfo/gnunet-service-peerinfo.c:1335
5825msgid "Skipping import of included HELLOs\n"
5826msgstr "ПреÑкачем увоз укључених „HELLO“-а\n"
5827
5828#: src/peerinfo/peerinfo_api.c:217
5829msgid "Failed to receive response from `PEERINFO' service."
5830msgstr "ÐиÑам уÑпео да примим одговор Ñа уÑлуге „PEERINFO“."
5831
5811#: src/peerstore/gnunet-peerstore.c:92 5832#: src/peerstore/gnunet-peerstore.c:92
5812msgid "peerstore" 5833msgid "peerstore"
5813msgstr "" 5834msgstr ""
@@ -5997,11 +6018,11 @@ msgstr ""
5997msgid "re:claimID command line tool" 6018msgid "re:claimID command line tool"
5998msgstr "" 6019msgstr ""
5999 6020
6000#: src/reclaim/plugin_rest_openid_connect.c:2788 6021#: src/reclaim/plugin_rest_openid_connect.c:2793
6001msgid "OpenID Connect REST API initialized\n" 6022msgid "OpenID Connect REST API initialized\n"
6002msgstr "" 6023msgstr ""
6003 6024
6004#: src/reclaim/plugin_rest_reclaim.c:1521 6025#: src/reclaim/plugin_rest_pabc.c:637 src/reclaim/plugin_rest_reclaim.c:1520
6005msgid "Identity Provider REST API initialized\n" 6026msgid "Identity Provider REST API initialized\n"
6006msgstr "" 6027msgstr ""
6007 6028
@@ -6020,56 +6041,56 @@ msgstr "„%s“ уÑлузи недоÑтају поÑтавке подешав
6020msgid "Daemon to announce regular expressions for the peer using cadet." 6041msgid "Daemon to announce regular expressions for the peer using cadet."
6021msgstr "Демон за најаву регуларних израза за парњака који кориÑти меш." 6042msgstr "Демон за најаву регуларних израза за парњака који кориÑти меш."
6022 6043
6023#: src/regex/gnunet-regex-profiler.c:1390 6044#: src/regex/gnunet-regex-profiler.c:1392
6024msgid "No configuration file given. Exiting\n" 6045msgid "No configuration file given. Exiting\n"
6025msgstr "Ðије дата датотека подешавања. Излазим\n" 6046msgstr "Ðије дата датотека подешавања. Излазим\n"
6026 6047
6027#: src/regex/gnunet-regex-profiler.c:1432 6048#: src/regex/gnunet-regex-profiler.c:1434
6028#: src/regex/gnunet-regex-simulation-profiler.c:631 6049#: src/regex/gnunet-regex-simulation-profiler.c:631
6029#, c-format 6050#, c-format
6030msgid "No policy directory specified on command line. Exiting.\n" 6051msgid "No policy directory specified on command line. Exiting.\n"
6031msgstr "Ðа линији наредби није наведен директоријум политике. Излазим.\n" 6052msgstr "Ðа линији наредби није наведен директоријум политике. Излазим.\n"
6032 6053
6033#: src/regex/gnunet-regex-profiler.c:1438 6054#: src/regex/gnunet-regex-profiler.c:1440
6034#: src/regex/gnunet-regex-simulation-profiler.c:639 6055#: src/regex/gnunet-regex-simulation-profiler.c:639
6035#, c-format 6056#, c-format
6036msgid "Specified policies directory does not exist. Exiting.\n" 6057msgid "Specified policies directory does not exist. Exiting.\n"
6037msgstr "Ðаведени директоријум политике не поÑтоји. Излазим.\n" 6058msgstr "Ðаведени директоријум политике не поÑтоји. Излазим.\n"
6038 6059
6039#: src/regex/gnunet-regex-profiler.c:1446 6060#: src/regex/gnunet-regex-profiler.c:1448
6040#, c-format 6061#, c-format
6041msgid "No files found in `%s'\n" 6062msgid "No files found in `%s'\n"
6042msgstr "ÐиÑам нашао датотеке у „%s“\n" 6063msgstr "ÐиÑам нашао датотеке у „%s“\n"
6043 6064
6044#: src/regex/gnunet-regex-profiler.c:1455 6065#: src/regex/gnunet-regex-profiler.c:1457
6045msgid "No search strings file given. Exiting.\n" 6066msgid "No search strings file given. Exiting.\n"
6046msgstr "Ðије дата датотека ниÑки претраге. Излазим.\n" 6067msgstr "Ðије дата датотека ниÑки претраге. Излазим.\n"
6047 6068
6048#: src/regex/gnunet-regex-profiler.c:1475 6069#: src/regex/gnunet-regex-profiler.c:1477
6049msgid "Error loading search strings. Exiting.\n" 6070msgid "Error loading search strings. Exiting.\n"
6050msgstr "Грешка учитавања ниÑки претраге. Излазим.\n" 6071msgstr "Грешка учитавања ниÑки претраге. Излазим.\n"
6051 6072
6052#: src/regex/gnunet-regex-profiler.c:1563 6073#: src/regex/gnunet-regex-profiler.c:1565
6053msgid "name of the file for writing statistics" 6074msgid "name of the file for writing statistics"
6054msgstr "назив датотеке за запиÑивање ÑтатиÑтике" 6075msgstr "назив датотеке за запиÑивање ÑтатиÑтике"
6055 6076
6056#: src/regex/gnunet-regex-profiler.c:1570 6077#: src/regex/gnunet-regex-profiler.c:1572
6057msgid "wait TIMEOUT before ending the experiment" 6078msgid "wait TIMEOUT before ending the experiment"
6058msgstr "чека ВРЕМЕ_ИСТЕКРпре завршавања екÑперимента" 6079msgstr "чека ВРЕМЕ_ИСТЕКРпре завршавања екÑперимента"
6059 6080
6060#: src/regex/gnunet-regex-profiler.c:1576 6081#: src/regex/gnunet-regex-profiler.c:1578
6061msgid "directory with policy files" 6082msgid "directory with policy files"
6062msgstr "директоријум Ñа датотекама политике" 6083msgstr "директоријум Ñа датотекама политике"
6063 6084
6064#: src/regex/gnunet-regex-profiler.c:1584 6085#: src/regex/gnunet-regex-profiler.c:1586
6065msgid "name of file with input strings" 6086msgid "name of file with input strings"
6066msgstr "назив датотеке Ñа улазним ниÑкама" 6087msgstr "назив датотеке Ñа улазним ниÑкама"
6067 6088
6068#: src/regex/gnunet-regex-profiler.c:1591 6089#: src/regex/gnunet-regex-profiler.c:1593
6069msgid "name of file with hosts' names" 6090msgid "name of file with hosts' names"
6070msgstr "назив датотеке Ñа називима домаћина" 6091msgstr "назив датотеке Ñа називима домаћина"
6071 6092
6072#: src/regex/gnunet-regex-profiler.c:1604 6093#: src/regex/gnunet-regex-profiler.c:1606
6073msgid "Profiler for regex" 6094msgid "Profiler for regex"
6074msgstr "Профилатор за регуларни израз" 6095msgstr "Профилатор за регуларни израз"
6075 6096
@@ -6095,12 +6116,12 @@ msgstr "Регуларни израз „%s“ је превелик!\n"
6095msgid "Search string `%s' is too long!\n" 6116msgid "Search string `%s' is too long!\n"
6096msgstr "Регуларни израз „%s“ је превелик!\n" 6117msgstr "Регуларни израз „%s“ је превелик!\n"
6097 6118
6098#: src/rest/gnunet-rest-server.c:1266 6119#: src/rest/gnunet-rest-server.c:1267
6099#, fuzzy 6120#, fuzzy
6100msgid "GNUnet REST server" 6121msgid "GNUnet REST server"
6101msgstr "Ðлат ГÐУнет ГÐС решавача" 6122msgstr "Ðлат ГÐУнет ГÐС решавача"
6102 6123
6103#: src/rest/plugin_rest_config.c:427 6124#: src/rest/plugin_rest_config.c:429
6104msgid "CONFIG REST API initialized\n" 6125msgid "CONFIG REST API initialized\n"
6105msgstr "" 6126msgstr ""
6106 6127
@@ -6163,72 +6184,77 @@ msgstr "Уверење опозива за „%s“ је Ñмештено у „
6163msgid "Ego `%s' not found.\n" 6184msgid "Ego `%s' not found.\n"
6164msgstr "ÐиÑам нашао его „%s“.\n" 6185msgstr "ÐиÑам нашао его „%s“.\n"
6165 6186
6166#: src/revocation/gnunet-revocation.c:351 6187#: src/revocation/gnunet-revocation.c:350
6188#, fuzzy, c-format
6189msgid "Error: Key is invalid\n"
6190msgstr "Кључ „%s“ је иÑправан\n"
6191
6192#: src/revocation/gnunet-revocation.c:357
6167#, c-format 6193#, c-format
6168msgid "Error: revocation certificate in `%s' is not for `%s'\n" 6194msgid "Error: revocation certificate in `%s' is not for `%s'\n"
6169msgstr "Грешка: уверење опозива у „%s“ није за „%s“\n" 6195msgstr "Грешка: уверење опозива у „%s“ није за „%s“\n"
6170 6196
6171#: src/revocation/gnunet-revocation.c:361 6197#: src/revocation/gnunet-revocation.c:367
6172msgid "Revocation certificate ready\n" 6198msgid "Revocation certificate ready\n"
6173msgstr "Уверење опозива је Ñпремно\n" 6199msgstr "Уверење опозива је Ñпремно\n"
6174 6200
6175#: src/revocation/gnunet-revocation.c:373 6201#: src/revocation/gnunet-revocation.c:379
6176msgid "Continuing calculation where left off...\n" 6202msgid "Continuing calculation where left off...\n"
6177msgstr "" 6203msgstr ""
6178 6204
6179#: src/revocation/gnunet-revocation.c:380 6205#: src/revocation/gnunet-revocation.c:386
6180msgid "Revocation certificate not ready, calculating proof of work\n" 6206msgid "Revocation certificate not ready, calculating proof of work\n"
6181msgstr "Уверење опозива није Ñпремно, израчунавам доказ о раду\n" 6207msgstr "Уверење опозива није Ñпремно, израчунавам доказ о раду\n"
6182 6208
6183#: src/revocation/gnunet-revocation.c:418 6209#: src/revocation/gnunet-revocation.c:424
6184#, c-format 6210#, c-format
6185msgid "Public key `%s' malformed\n" 6211msgid "Public key `%s' malformed\n"
6186msgstr "Јавни кључ „%s“ је лош\n" 6212msgstr "Јавни кључ „%s“ је лош\n"
6187 6213
6188#: src/revocation/gnunet-revocation.c:428 6214#: src/revocation/gnunet-revocation.c:434
6189msgid "" 6215msgid ""
6190"Testing and revoking at the same time is not allowed, only executing test.\n" 6216"Testing and revoking at the same time is not allowed, only executing test.\n"
6191msgstr "" 6217msgstr ""
6192"ТеÑтирање и опозивање у иÑто време није дозвољено, Ñамо теÑтирање " 6218"ТеÑтирање и опозивање у иÑто време није дозвољено, Ñамо теÑтирање "
6193"извршавам.\n" 6219"извршавам.\n"
6194 6220
6195#: src/revocation/gnunet-revocation.c:458 6221#: src/revocation/gnunet-revocation.c:464
6196msgid "No filename to store revocation certificate given.\n" 6222msgid "No filename to store revocation certificate given.\n"
6197msgstr "Ðије дат назив датотеке за Ñмештање уверења опозива.\n" 6223msgstr "Ðије дат назив датотеке за Ñмештање уверења опозива.\n"
6198 6224
6199#: src/revocation/gnunet-revocation.c:475 6225#: src/revocation/gnunet-revocation.c:481
6200#, c-format 6226#, c-format
6201msgid "Failed to read revocation certificate from `%s'\n" 6227msgid "Failed to read revocation certificate from `%s'\n"
6202msgstr "ÐиÑам уÑпео да прочитам уверење опозива из „%s“\n" 6228msgstr "ÐиÑам уÑпео да прочитам уверење опозива из „%s“\n"
6203 6229
6204#: src/revocation/gnunet-revocation.c:483 6230#: src/revocation/gnunet-revocation.c:489
6205#, fuzzy, c-format 6231#, fuzzy, c-format
6206msgid "Revocation certificate corrupted in `%s'\n" 6232msgid "Revocation certificate corrupted in `%s'\n"
6207msgstr "Уверење опозива за „%s“ је Ñмештено у „%s“\n" 6233msgstr "Уверење опозива за „%s“ је Ñмештено у „%s“\n"
6208 6234
6209#: src/revocation/gnunet-revocation.c:505 6235#: src/revocation/gnunet-revocation.c:511
6210msgid "No action specified. Nothing to do.\n" 6236msgid "No action specified. Nothing to do.\n"
6211msgstr "Ðије наведена ниједна радња. Ðемам шта да радим.\n" 6237msgstr "Ðије наведена ниједна радња. Ðемам шта да радим.\n"
6212 6238
6213#: src/revocation/gnunet-revocation.c:524 6239#: src/revocation/gnunet-revocation.c:530
6214msgid "use NAME for the name of the revocation file" 6240msgid "use NAME for the name of the revocation file"
6215msgstr "кориÑти ÐÐЗИВ за назив датотеке опозивања" 6241msgstr "кориÑти ÐÐЗИВ за назив датотеке опозивања"
6216 6242
6217#: src/revocation/gnunet-revocation.c:532 6243#: src/revocation/gnunet-revocation.c:538
6218msgid "" 6244msgid ""
6219"revoke the private key associated for the the private key associated with " 6245"revoke the private key associated for the the private key associated with "
6220"the ego NAME " 6246"the ego NAME "
6221msgstr "опозива лични кључ придружен личном кључу Ñа его ÐÐЗИВОМ " 6247msgstr "опозива лични кључ придружен личном кључу Ñа его ÐÐЗИВОМ "
6222 6248
6223#: src/revocation/gnunet-revocation.c:539 6249#: src/revocation/gnunet-revocation.c:545
6224msgid "actually perform revocation, otherwise we just do the precomputation" 6250msgid "actually perform revocation, otherwise we just do the precomputation"
6225msgstr "заправо обавља опозив, у Ñупротном Ñамо радимо предизрачунавање" 6251msgstr "заправо обавља опозив, у Ñупротном Ñамо радимо предизрачунавање"
6226 6252
6227#: src/revocation/gnunet-revocation.c:546 6253#: src/revocation/gnunet-revocation.c:552
6228msgid "test if the public key KEY has been revoked" 6254msgid "test if the public key KEY has been revoked"
6229msgstr "теÑтира да ли је јавни кључ КЉУЧ опозван" 6255msgstr "теÑтира да ли је јавни кључ КЉУЧ опозван"
6230 6256
6231#: src/revocation/gnunet-revocation.c:552 6257#: src/revocation/gnunet-revocation.c:558
6232msgid "number of epochs to calculate for" 6258msgid "number of epochs to calculate for"
6233msgstr "" 6259msgstr ""
6234 6260
@@ -6265,18 +6291,6 @@ msgstr "УÑлуга ПОСТÐВИ Ñе урушила, окончавам уÑ
6265msgid "Could not open revocation database file!" 6291msgid "Could not open revocation database file!"
6266msgstr "Ðе могу да отворим датотеку базе података опозивања!" 6292msgstr "Ðе могу да отворим датотеку базе података опозивања!"
6267 6293
6268#: src/rps/gnunet-rps.c:270
6269msgid "Seed a PeerID"
6270msgstr ""
6271
6272#: src/rps/gnunet-rps.c:275
6273msgid "Get updates of view (0 for infinite updates)"
6274msgstr ""
6275
6276#: src/rps/gnunet-rps.c:279
6277msgid "Get peers from biased stream"
6278msgstr ""
6279
6280#: src/rps/gnunet-rps-profiler.c:3142 6294#: src/rps/gnunet-rps-profiler.c:3142
6281msgid "duration of the profiling" 6295msgid "duration of the profiling"
6282msgstr "" 6296msgstr ""
@@ -6296,6 +6310,18 @@ msgstr "број парњака у концензуÑу"
6296msgid "Measure quality and performance of the RPS service." 6310msgid "Measure quality and performance of the RPS service."
6297msgstr "Мери квалитет и учинковитоÑÑ‚ ÐСЕ уÑлуге." 6311msgstr "Мери квалитет и учинковитоÑÑ‚ ÐСЕ уÑлуге."
6298 6312
6313#: src/rps/gnunet-rps.c:270
6314msgid "Seed a PeerID"
6315msgstr ""
6316
6317#: src/rps/gnunet-rps.c:275
6318msgid "Get updates of view (0 for infinite updates)"
6319msgstr ""
6320
6321#: src/rps/gnunet-rps.c:279
6322msgid "Get peers from biased stream"
6323msgstr ""
6324
6299#: src/scalarproduct/gnunet-scalarproduct.c:229 6325#: src/scalarproduct/gnunet-scalarproduct.c:229
6300msgid "You must specify at least one message ID to check!\n" 6326msgid "You must specify at least one message ID to check!\n"
6301msgstr "Морате навеÑти бар један ИБ поруке за проверу!\n" 6327msgstr "Морате навеÑти бар један ИБ поруке за проверу!\n"
@@ -6359,15 +6385,15 @@ msgstr "ИБ преноÑа дељеног Ñа парњаком."
6359msgid "Calculate the Vectorproduct with a GNUnet peer." 6385msgid "Calculate the Vectorproduct with a GNUnet peer."
6360msgstr "Израчунава Производ вектора Ñа ГÐУнет парњаком." 6386msgstr "Израчунава Производ вектора Ñа ГÐУнет парњаком."
6361 6387
6388#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118
6389#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1034
6362#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1358 6390#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1358
6363#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1355 6391#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1355
6364#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118
6365#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1063
6366#, fuzzy 6392#, fuzzy
6367msgid "Connect to CADET failed\n" 6393msgid "Connect to CADET failed\n"
6368msgstr "Повезивање Ñа МЕШОМ није уÑпело\n" 6394msgstr "Повезивање Ñа МЕШОМ није уÑпело\n"
6369 6395
6370#: src/scalarproduct/scalarproduct_api.c:189 6396#: src/scalarproduct/scalarproduct_api.c:184
6371msgid "Keys given to SCALARPRODUCT not unique!\n" 6397msgid "Keys given to SCALARPRODUCT not unique!\n"
6372msgstr "" 6398msgstr ""
6373 6399
@@ -6388,7 +6414,7 @@ msgid "also profile decryption"
6388msgstr "такође Ð¾Ð¿Ð¸Ñ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð°" 6414msgstr "такође Ð¾Ð¿Ð¸Ñ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð°"
6389 6415
6390#: src/set/gnunet-service-set.c:1916 src/seti/gnunet-service-seti.c:2467 6416#: src/set/gnunet-service-set.c:1916 src/seti/gnunet-service-seti.c:2467
6391#: src/setu/gnunet-service-setu.c:3832 6417#: src/setu/gnunet-service-setu.c:5389
6392#, fuzzy 6418#, fuzzy
6393msgid "Could not connect to CADET service\n" 6419msgid "Could not connect to CADET service\n"
6394msgstr "Ðе могу да Ñе повежем Ñа „%s“ уÑлугом!\n" 6420msgstr "Ðе могу да Ñе повежем Ñа „%s“ уÑлугом!\n"
@@ -6612,6 +6638,7 @@ msgid "create COUNT number of peers"
6612msgstr "Ñтвара УКУПÐОСТ број парњака" 6638msgstr "Ñтвара УКУПÐОСТ број парњака"
6613 6639
6614#: src/testbed/generate-underlay-topology.c:379 6640#: src/testbed/generate-underlay-topology.c:379
6641#, fuzzy
6615msgid "" 6642msgid ""
6616"Generates SQLite3 database representing a given underlay topology.\n" 6643"Generates SQLite3 database representing a given underlay topology.\n"
6617"Usage: gnunet-underlay-topology [OPTIONS] db-filename TOPO [TOPOOPTS]\n" 6644"Usage: gnunet-underlay-topology [OPTIONS] db-filename TOPO [TOPOOPTS]\n"
@@ -6631,7 +6658,7 @@ msgid ""
6631"\t cap: the maximum number of links a node can have\n" 6658"\t cap: the maximum number of links a node can have\n"
6632"\t m: the number of links a node should have while joining the network\n" 6659"\t m: the number of links a node should have while joining the network\n"
6633"\t filename: the path of the file which contains topology information\n" 6660"\t filename: the path of the file which contains topology information\n"
6634"NOTE: the format of the above file is descibed here: https://www.gnunet.org/" 6661"NOTE: the format of the above file is described here: https://www.gnunet.org/"
6635"content/topology-file-format\n" 6662"content/topology-file-format\n"
6636msgstr "" 6663msgstr ""
6637"Ствара СКуЛајт3 базу података која предÑтавља дати оÑновни размештај.\n" 6664"Ствара СКуЛајт3 базу података која предÑтавља дати оÑновни размештај.\n"
@@ -6740,17 +6767,9 @@ msgstr "„%s“ уÑлуга Ñе не може покренути јер Ñе
6740msgid "%.s Unknown result code." 6767msgid "%.s Unknown result code."
6741msgstr "%.s Ðепознат код резултата." 6768msgstr "%.s Ðепознат код резултата."
6742 6769
6743#: src/testbed/gnunet_testbed_mpi_spawn.c:119
6744msgid "Waiting for child to exit.\n"
6745msgstr "Чекам на пород да изађе.\n"
6746
6747#: src/testbed/gnunet_testbed_mpi_spawn.c:242
6748#, c-format
6749msgid "Spawning process `%s'\n"
6750msgstr "Умножавам Ð¿Ñ€Ð¾Ñ†ÐµÑ â€ž%s“\n"
6751
6752#: src/testbed/gnunet-testbed-profiler.c:290 6770#: src/testbed/gnunet-testbed-profiler.c:290
6753msgid "tolerate COUNT number of continious timeout failures" 6771#, fuzzy
6772msgid "tolerate COUNT number of continuous timeout failures"
6754msgstr "толерише УКУПÐО број непрекидних неуÑпеха иÑтека времена" 6773msgstr "толерише УКУПÐО број непрекидних неуÑпеха иÑтека времена"
6755 6774
6756#: src/testbed/gnunet-testbed-profiler.c:295 6775#: src/testbed/gnunet-testbed-profiler.c:295
@@ -6763,6 +6782,15 @@ msgstr ""
6763"профајлер не чека на притиÑак таÑтера већ наÑтавља да ради Ñве док Ñе не " 6782"профајлер не чека на притиÑак таÑтера већ наÑтавља да ради Ñве док Ñе не "
6764"прими Ñигнал окончања" 6783"прими Ñигнал окончања"
6765 6784
6785#: src/testbed/gnunet_testbed_mpi_spawn.c:119
6786msgid "Waiting for child to exit.\n"
6787msgstr "Чекам на пород да изађе.\n"
6788
6789#: src/testbed/gnunet_testbed_mpi_spawn.c:242
6790#, c-format
6791msgid "Spawning process `%s'\n"
6792msgstr "Умножавам Ð¿Ñ€Ð¾Ñ†ÐµÑ â€ž%s“\n"
6793
6766#: src/testbed/testbed_api.c:399 6794#: src/testbed/testbed_api.c:399
6767#, c-format 6795#, c-format
6768msgid "Adding host %u failed with error: %s\n" 6796msgid "Adding host %u failed with error: %s\n"
@@ -7073,14 +7101,14 @@ msgstr "# „HELLO“ поруке Ñу примљене"
7073msgid "GNUnet topology control" 7101msgid "GNUnet topology control"
7074msgstr "" 7102msgstr ""
7075 7103
7076#: src/transport/gnunet-communicator-tcp.c:3331 7104#: src/transport/gnunet-communicator-tcp.c:3317
7077#: src/transport/gnunet-communicator-udp.c:3790 7105#: src/transport/gnunet-communicator-udp.c:3790
7078#: src/transport/gnunet-service-tng.c:10220 7106#: src/transport/gnunet-service-tng.c:10223
7079#: src/transport/gnunet-service-transport.c:2627 7107#: src/transport/gnunet-service-transport.c:2627
7080msgid "Transport service is lacking key configuration settings. Exiting.\n" 7108msgid "Transport service is lacking key configuration settings. Exiting.\n"
7081msgstr "УÑлузи преноÑа недоÑтају поÑтавке подешавања кључа. Излазим.\n" 7109msgstr "УÑлузи преноÑа недоÑтају поÑтавке подешавања кључа. Излазим.\n"
7082 7110
7083#: src/transport/gnunet-communicator-tcp.c:3668 7111#: src/transport/gnunet-communicator-tcp.c:3655
7084msgid "GNUnet TCP communicator" 7112msgid "GNUnet TCP communicator"
7085msgstr "" 7113msgstr ""
7086 7114
@@ -7109,10 +7137,6 @@ msgstr "Ðе могу да направим путању до „%s“\n"
7109msgid "GNUnet UNIX domain socket communicator" 7137msgid "GNUnet UNIX domain socket communicator"
7110msgstr "" 7138msgstr ""
7111 7139
7112#: src/transport/gnunet-service-transport_ats.c:137
7113msgid "# Addresses given to ATS"
7114msgstr ""
7115
7116#: src/transport/gnunet-service-transport.c:445 7140#: src/transport/gnunet-service-transport.c:445
7117msgid "# messages dropped due to slow client" 7141msgid "# messages dropped due to slow client"
7118msgstr "# поруке Ñу одбачене уÑлед Ñпорог клијента" 7142msgstr "# поруке Ñу одбачене уÑлед Ñпорог клијента"
@@ -7153,6 +7177,10 @@ msgstr "Додајем ÑƒÐ½Ð¾Ñ ÑпиÑка забрана за парњака
7153msgid "Adding blacklisting entry for peer `%s':`%s'\n" 7177msgid "Adding blacklisting entry for peer `%s':`%s'\n"
7154msgstr "Додајем ÑƒÐ½Ð¾Ñ ÑпиÑка забрана за парњака „%s“:„%s“\n" 7178msgstr "Додајем ÑƒÐ½Ð¾Ñ ÑпиÑка забрана за парњака „%s“:„%s“\n"
7155 7179
7180#: src/transport/gnunet-service-transport_ats.c:137
7181msgid "# Addresses given to ATS"
7182msgstr ""
7183
7156#: src/transport/gnunet-service-transport_hello.c:195 7184#: src/transport/gnunet-service-transport_hello.c:195
7157msgid "# refreshed my HELLO" 7185msgid "# refreshed my HELLO"
7158msgstr "# оÑвежих мој „HELLO“" 7186msgstr "# оÑвежих мој „HELLO“"
@@ -7493,6 +7521,44 @@ msgstr "# поновно потврђивање адреÑе је започет
7493msgid "# HELLOs given to peerinfo" 7521msgid "# HELLOs given to peerinfo"
7494msgstr "# „HELLO“-и Ñу добијени из података парњака" 7522msgstr "# „HELLO“-и Ñу добијени из података парњака"
7495 7523
7524#: src/transport/gnunet-transport-profiler.c:220
7525#, c-format
7526msgid "%llu B in %llu ms == %.2f KB/s!\n"
7527msgstr ""
7528
7529#: src/transport/gnunet-transport-profiler.c:577
7530msgid "send data to peer"
7531msgstr ""
7532
7533#: src/transport/gnunet-transport-profiler.c:581
7534#, fuzzy
7535msgid "receive data from peer"
7536msgstr "# одговори Ñу примљени за друге парњаке"
7537
7538#: src/transport/gnunet-transport-profiler.c:586
7539msgid "iterations"
7540msgstr ""
7541
7542#: src/transport/gnunet-transport-profiler.c:591
7543#, fuzzy
7544msgid "number of messages to send"
7545msgstr "број парњака у концензуÑу"
7546
7547#: src/transport/gnunet-transport-profiler.c:596
7548#, fuzzy
7549msgid "message size to use"
7550msgstr "екÑперимент за коришћење"
7551
7552#: src/transport/gnunet-transport-profiler.c:601
7553#: src/transport/gnunet-transport.c:1404
7554msgid "peer identity"
7555msgstr "идентитет парњака"
7556
7557#: src/transport/gnunet-transport-profiler.c:614
7558#: src/transport/gnunet-transport.c:1426
7559msgid "Direct access to transport service."
7560msgstr "ÐепоÑредан приÑтуп уÑлузи преноÑа."
7561
7496#: src/transport/gnunet-transport.c:406 7562#: src/transport/gnunet-transport.c:406
7497#, c-format 7563#, c-format
7498msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n" 7564msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n"
@@ -7630,11 +7696,6 @@ msgstr ""
7630msgid "do not resolve hostnames" 7696msgid "do not resolve hostnames"
7631msgstr "не разрешава називе домаћина" 7697msgstr "не разрешава називе домаћина"
7632 7698
7633#: src/transport/gnunet-transport.c:1404
7634#: src/transport/gnunet-transport-profiler.c:601
7635msgid "peer identity"
7636msgstr "идентитет парњака"
7637
7638#: src/transport/gnunet-transport.c:1408 7699#: src/transport/gnunet-transport.c:1408
7639msgid "monitor plugin sessions" 7700msgid "monitor plugin sessions"
7640msgstr "" 7701msgstr ""
@@ -7643,39 +7704,6 @@ msgstr ""
7643msgid "send data for benchmarking to the other peer (until CTRL-C)" 7704msgid "send data for benchmarking to the other peer (until CTRL-C)"
7644msgstr "шаље податке за оцењивање другим парњацима (Ñве до КТРЛ-Ц)" 7705msgstr "шаље податке за оцењивање другим парњацима (Ñве до КТРЛ-Ц)"
7645 7706
7646#: src/transport/gnunet-transport.c:1426
7647#: src/transport/gnunet-transport-profiler.c:614
7648msgid "Direct access to transport service."
7649msgstr "ÐепоÑредан приÑтуп уÑлузи преноÑа."
7650
7651#: src/transport/gnunet-transport-profiler.c:220
7652#, c-format
7653msgid "%llu B in %llu ms == %.2f KB/s!\n"
7654msgstr ""
7655
7656#: src/transport/gnunet-transport-profiler.c:577
7657msgid "send data to peer"
7658msgstr ""
7659
7660#: src/transport/gnunet-transport-profiler.c:581
7661#, fuzzy
7662msgid "receive data from peer"
7663msgstr "# одговори Ñу примљени за друге парњаке"
7664
7665#: src/transport/gnunet-transport-profiler.c:586
7666msgid "iterations"
7667msgstr ""
7668
7669#: src/transport/gnunet-transport-profiler.c:591
7670#, fuzzy
7671msgid "number of messages to send"
7672msgstr "број парњака у концензуÑу"
7673
7674#: src/transport/gnunet-transport-profiler.c:596
7675#, fuzzy
7676msgid "message size to use"
7677msgstr "екÑперимент за коришћење"
7678
7679#: src/transport/plugin_transport_http_client.c:1488 7707#: src/transport/plugin_transport_http_client.c:1488
7680#: src/transport/plugin_transport_http_server.c:2331 7708#: src/transport/plugin_transport_http_server.c:2331
7681#: src/transport/plugin_transport_http_server.c:3562 7709#: src/transport/plugin_transport_http_server.c:3562
@@ -7950,24 +7978,6 @@ msgstr "ТЦП Ð¿Ñ€ÐµÐ½Ð¾Ñ Ð½Ðµ оÑлушкује ни на једном прÐ
7950msgid "TCP transport advertises itself as being on port %llu\n" 7978msgid "TCP transport advertises itself as being on port %llu\n"
7951msgstr "ТЦП Ð¿Ñ€ÐµÐ½Ð¾Ñ ÑƒÐ¿Ð¾Ð·Ð¾Ñ€Ð°Ð²Ð° Ñебе да је на прикључнику %llu\n" 7979msgstr "ТЦП Ð¿Ñ€ÐµÐ½Ð¾Ñ ÑƒÐ¿Ð¾Ð·Ð¾Ñ€Ð°Ð²Ð° Ñебе да је на прикључнику %llu\n"
7952 7980
7953#: src/transport/plugin_transport_udp_broadcasting.c:169
7954#, fuzzy
7955msgid "# Multicast HELLO beacons received via UDP"
7956msgstr "# ИПв6 вишеодредишне „HELLO“ ознаке Ñу примљене путем удп-а"
7957
7958#: src/transport/plugin_transport_udp_broadcasting.c:553
7959msgid ""
7960"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n"
7961msgstr ""
7962"ИÑкључујем „HELLO“ емитовање због подешавања Ñамо пријатељ пријатељу!\n"
7963
7964#: src/transport/plugin_transport_udp_broadcasting.c:571
7965#, c-format
7966msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n"
7967msgstr ""
7968"ÐиÑам уÑпео да поÑтавим опцију ИПв4 емитовања за прикључницу емитовања на "
7969"прикључнику %d\n"
7970
7971#: src/transport/plugin_transport_udp.c:3170 7981#: src/transport/plugin_transport_udp.c:3170
7972#, c-format 7982#, c-format
7973msgid "" 7983msgid ""
@@ -8020,6 +8030,24 @@ msgstr "Морате навеÑти иÑправну ИПв6 адреÑу"
8020msgid "Failed to create UDP network sockets\n" 8030msgid "Failed to create UDP network sockets\n"
8021msgstr "ÐиÑам уÑпео да направим прикључнице мреже, прикључак није уÑпео\n" 8031msgstr "ÐиÑам уÑпео да направим прикључнице мреже, прикључак није уÑпео\n"
8022 8032
8033#: src/transport/plugin_transport_udp_broadcasting.c:169
8034#, fuzzy
8035msgid "# Multicast HELLO beacons received via UDP"
8036msgstr "# ИПв6 вишеодредишне „HELLO“ ознаке Ñу примљене путем удп-а"
8037
8038#: src/transport/plugin_transport_udp_broadcasting.c:553
8039msgid ""
8040"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n"
8041msgstr ""
8042"ИÑкључујем „HELLO“ емитовање због подешавања Ñамо пријатељ пријатељу!\n"
8043
8044#: src/transport/plugin_transport_udp_broadcasting.c:571
8045#, c-format
8046msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n"
8047msgstr ""
8048"ÐиÑам уÑпео да поÑтавим опцију ИПв4 емитовања за прикључницу емитовања на "
8049"прикључнику %d\n"
8050
8023#: src/transport/plugin_transport_unix.c:1396 8051#: src/transport/plugin_transport_unix.c:1396
8024#, fuzzy, c-format 8052#, fuzzy, c-format
8025msgid "Cannot bind to `%s'\n" 8053msgid "Cannot bind to `%s'\n"
@@ -8186,7 +8214,7 @@ msgstr "ÐŸÑ€Ð¾Ñ†ÐµÑ ÑƒÑлуге не може да покрене функци
8186msgid "Service process failed to report status\n" 8214msgid "Service process failed to report status\n"
8187msgstr "ÐŸÑ€Ð¾Ñ†ÐµÑ ÑƒÑлуге није уÑпео да извеÑти о Ñтању\n" 8215msgstr "ÐŸÑ€Ð¾Ñ†ÐµÑ ÑƒÑлуге није уÑпео да извеÑти о Ñтању\n"
8188 8216
8189#: src/transport/tcp_service_legacy.c:1253 src/util/disk.c:1040 8217#: src/transport/tcp_service_legacy.c:1253 src/util/disk.c:1220
8190#: src/util/service.c:1637 8218#: src/util/service.c:1637
8191#, c-format 8219#, c-format
8192msgid "Cannot obtain information about user `%s': %s\n" 8220msgid "Cannot obtain information about user `%s': %s\n"
@@ -8304,39 +8332,15 @@ msgstr "ÐеиÑправан формат времена „%s“\n"
8304msgid "Failed to serialize metadata `%s'" 8332msgid "Failed to serialize metadata `%s'"
8305msgstr "ÐиÑам уÑпео да Ñеријализујем ÐС Ð·Ð°Ð¿Ð¸Ñ Ñа вредношћу „%s“\n" 8333msgstr "ÐиÑам уÑпео да Ñеријализујем ÐС Ð·Ð°Ð¿Ð¸Ñ Ñа вредношћу „%s“\n"
8306 8334
8307#: src/util/client.c:747 src/util/client.c:937 8335#: src/util/client.c:747 src/util/client.c:938
8308msgid "not a valid filename" 8336msgid "not a valid filename"
8309msgstr "" 8337msgstr ""
8310 8338
8311#: src/util/client.c:1103 8339#: src/util/client.c:1104
8312#, c-format 8340#, c-format
8313msgid "Need a non-empty hostname for service `%s'.\n" 8341msgid "Need a non-empty hostname for service `%s'.\n"
8314msgstr "Потребан је не-празан назив домаћина за уÑлугу „%s“.\n" 8342msgstr "Потребан је не-празан назив домаћина за уÑлугу „%s“.\n"
8315 8343
8316#: src/util/common_logging.c:259 src/util/common_logging.c:1114
8317msgid "DEBUG"
8318msgstr "ПРОЧИШЋÐÐ’ÐЊЕ"
8319
8320#: src/util/common_logging.c:261 src/util/common_logging.c:1112
8321msgid "INFO"
8322msgstr "ПОДÐЦИ"
8323
8324#: src/util/common_logging.c:263 src/util/common_logging.c:1110
8325msgid "MESSAGE"
8326msgstr ""
8327
8328#: src/util/common_logging.c:265 src/util/common_logging.c:1108
8329msgid "WARNING"
8330msgstr "УПОЗОРЕЊЕ"
8331
8332#: src/util/common_logging.c:267 src/util/common_logging.c:1106
8333msgid "ERROR"
8334msgstr "ГРЕШКÐ"
8335
8336#: src/util/common_logging.c:269 src/util/common_logging.c:1116
8337msgid "NONE"
8338msgstr "ÐИШТÐ"
8339
8340#: src/util/common_logging.c:626 src/util/common_logging.c:665 8344#: src/util/common_logging.c:626 src/util/common_logging.c:665
8341#, c-format 8345#, c-format
8342msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n" 8346msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n"
@@ -8347,6 +8351,30 @@ msgstr ""
8347msgid "Message `%.*s' repeated %u times in the last %s\n" 8351msgid "Message `%.*s' repeated %u times in the last %s\n"
8348msgstr "Порука „%.*s“ је поновљена %u пута у прошлоÑти %s\n" 8352msgstr "Порука „%.*s“ је поновљена %u пута у прошлоÑти %s\n"
8349 8353
8354#: src/util/common_logging.c:1106
8355msgid "ERROR"
8356msgstr "ГРЕШКÐ"
8357
8358#: src/util/common_logging.c:1108
8359msgid "WARNING"
8360msgstr "УПОЗОРЕЊЕ"
8361
8362#: src/util/common_logging.c:1110
8363msgid "MESSAGE"
8364msgstr ""
8365
8366#: src/util/common_logging.c:1112
8367msgid "INFO"
8368msgstr "ПОДÐЦИ"
8369
8370#: src/util/common_logging.c:1114
8371msgid "DEBUG"
8372msgstr "ПРОЧИШЋÐÐ’ÐЊЕ"
8373
8374#: src/util/common_logging.c:1116
8375msgid "NONE"
8376msgstr "ÐИШТÐ"
8377
8350#: src/util/common_logging.c:1117 8378#: src/util/common_logging.c:1117
8351msgid "INVALID" 8379msgid "INVALID"
8352msgstr "ÐЕИСПРÐÐ’ÐО" 8380msgstr "ÐЕИСПРÐÐ’ÐО"
@@ -8371,21 +8399,51 @@ msgid ""
8371msgstr "" 8399msgstr ""
8372"Подешавање наводи неиÑправну вредноÑÑ‚ за опцију „%s“ у одељку „%s“: %s\n" 8400"Подешавање наводи неиÑправну вредноÑÑ‚ за опцију „%s“ у одељку „%s“: %s\n"
8373 8401
8374#: src/util/configuration.c:370 8402#: src/util/configuration.c:790
8403#, c-format
8404msgid "Illegal directive in line %u (parsing restricted section %s)\n"
8405msgstr ""
8406
8407#: src/util/configuration.c:800
8408#, c-format
8409msgid "Bad directive in line %u\n"
8410msgstr ""
8411
8412#: src/util/configuration.c:853
8413#, c-format
8414msgid "Bad inline-secret directive in line %u\n"
8415msgstr ""
8416
8417#: src/util/configuration.c:875
8418#, c-format
8419msgid "Unknown or malformed directive '%s' in line %u\n"
8420msgstr ""
8421
8422#: src/util/configuration.c:905
8423#, fuzzy, c-format
8424msgid "Syntax error while deserializing in line %u (option without section)\n"
8425msgstr "Грешка ÑинтакÑе приликом деÑеријализације у реду %u\n"
8426
8427#: src/util/configuration.c:949
8375#, c-format 8428#, c-format
8376msgid "Syntax error while deserializing in line %u\n" 8429msgid "Syntax error while deserializing in line %u\n"
8377msgstr "Грешка ÑинтакÑе приликом деÑеријализације у реду %u\n" 8430msgstr "Грешка ÑинтакÑе приликом деÑеријализације у реду %u\n"
8378 8431
8379#: src/util/configuration.c:420 8432#: src/util/configuration.c:1049
8380#, fuzzy, c-format 8433#, fuzzy, c-format
8381msgid "Error while reading file `%s'\n" 8434msgid "Error while reading file `%s'\n"
8382msgstr "Грешка отварања датотеке „%s“: %s\n" 8435msgstr "Грешка отварања датотеке „%s“: %s\n"
8383 8436
8384#: src/util/configuration.c:980 8437#: src/util/configuration.c:1062
8438#, fuzzy, c-format
8439msgid "Failed to parse configuration file `%s'\n"
8440msgstr "ÐиÑам уÑпео да уклоним датотеку подешавања „%s“\n"
8441
8442#: src/util/configuration.c:1695
8385msgid "Not a valid relative time specification" 8443msgid "Not a valid relative time specification"
8386msgstr "" 8444msgstr ""
8387 8445
8388#: src/util/configuration.c:1050 8446#: src/util/configuration.c:1765
8389#, c-format 8447#, c-format
8390msgid "" 8448msgid ""
8391"Configuration value '%s' for '%s' in section '%s' is not in set of legal " 8449"Configuration value '%s' for '%s' in section '%s' is not in set of legal "
@@ -8394,17 +8452,17 @@ msgstr ""
8394"ВредноÑÑ‚ подешавања '%s' за '%s' у одељку '%s' није ÑƒÑ ÐºÑƒÐ¿Ñƒ иÑправних " 8452"ВредноÑÑ‚ подешавања '%s' за '%s' у одељку '%s' није ÑƒÑ ÐºÑƒÐ¿Ñƒ иÑправних "
8395"избора\n" 8453"избора\n"
8396 8454
8397#: src/util/configuration.c:1145 8455#: src/util/configuration.c:1860
8398#, c-format 8456#, c-format
8399msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n" 8457msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n"
8400msgstr "Сумња Ñе на дубинÑко ширење, прекидам $-ширење за термин „%s“\n" 8458msgstr "Сумња Ñе на дубинÑко ширење, прекидам $-ширење за термин „%s“\n"
8401 8459
8402#: src/util/configuration.c:1177 8460#: src/util/configuration.c:1892
8403#, c-format 8461#, c-format
8404msgid "Missing closing `%s' in option `%s'\n" 8462msgid "Missing closing `%s' in option `%s'\n"
8405msgstr "ÐедоÑтаје затварење „%s“ у опцији „%s“\n" 8463msgstr "ÐедоÑтаје затварење „%s“ у опцији „%s“\n"
8406 8464
8407#: src/util/configuration.c:1243 8465#: src/util/configuration.c:1958
8408#, c-format 8466#, c-format
8409msgid "" 8467msgid ""
8410"Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined " 8468"Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined "
@@ -8451,7 +8509,7 @@ msgstr "„EdDSA“ потпиÑивање није уÑпело на %s:%d: %s\
8451msgid "RSA signature verification failed at %s:%d: %s\n" 8509msgid "RSA signature verification failed at %s:%d: %s\n"
8452msgstr "Провера „ECDSA“ потпиÑа није уÑпела на %s:%d: %s\n" 8510msgstr "Провера „ECDSA“ потпиÑа није уÑпела на %s:%d: %s\n"
8453 8511
8454#: src/util/disk.c:823 8512#: src/util/disk.c:843
8455#, c-format 8513#, c-format
8456msgid "Expected `%s' to be a directory!\n" 8514msgid "Expected `%s' to be a directory!\n"
8457msgstr "Очекивах да „%s“ буде директоријум!\n" 8515msgstr "Очекивах да „%s“ буде директоријум!\n"
@@ -8633,61 +8691,71 @@ msgstr "Морате да проÑледите број опцији „%s“.\n
8633msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n" 8691msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n"
8634msgstr "" 8692msgstr ""
8635 8693
8636#: src/util/gnunet-base32.c:45 8694#: src/util/gnunet-base32.c:46
8637msgid "run decoder modus, otherwise runs as encoder" 8695msgid "run decoder modus, otherwise runs as encoder"
8638msgstr "" 8696msgstr ""
8639 8697
8640#: src/util/gnunet-config.c:167 8698#: src/util/gnunet-config.c:187
8641#, fuzzy, c-format
8642msgid "failed to load configuration defaults"
8643msgstr "ÐиÑам уÑпео да учитам подешавање за „%s“\n"
8644
8645#: src/util/gnunet-config.c:179
8646#, fuzzy, c-format
8647msgid "%s or %s argument is required\n"
8648msgstr "аргумент „--section“ је потребан\n"
8649
8650#: src/util/gnunet-config.c:186
8651#, c-format 8699#, c-format
8652msgid "The following sections are available:\n" 8700msgid "The following sections are available:\n"
8653msgstr "" 8701msgstr ""
8654 8702
8655#: src/util/gnunet-config.c:234 8703#: src/util/gnunet-config.c:201
8704#, fuzzy, c-format
8705msgid "%s, %s or %s argument is required\n"
8706msgstr "аргумент „--section“ је потребан\n"
8707
8708#: src/util/gnunet-config.c:266
8656#, c-format 8709#, c-format
8657msgid "--option argument required to set value\n" 8710msgid "--option argument required to set value\n"
8658msgstr "аргумент „--option“ је потребан за поÑтављање вредноÑти\n" 8711msgstr "аргумент „--option“ је потребан за поÑтављање вредноÑти\n"
8659 8712
8660#: src/util/gnunet-config.c:284 8713#: src/util/gnunet-config.c:309
8661#, fuzzy 8714#, fuzzy, c-format
8662msgid "interpret option value as a filename (with $-expansion)" 8715msgid "failed to load configuration defaults"
8663msgstr "добија опцију вÑедноÑти као назив датотеке (Ñа $-ширењем)" 8716msgstr "ÐиÑам уÑпео да учитам подешавање за „%s“\n"
8664 8717
8665#: src/util/gnunet-config.c:291 8718#: src/util/gnunet-config.c:354
8666msgid "test if the current installation supports the specified BACKEND" 8719msgid "test if the current installation supports the specified BACKEND"
8667msgstr "" 8720msgstr ""
8668 8721
8669#: src/util/gnunet-config.c:297 8722#: src/util/gnunet-config.c:360
8670msgid "name of the section to access" 8723#, fuzzy
8671msgstr "назив одељка за приÑтупање" 8724msgid "write the full configuration file, including default values"
8725msgstr "ÐиÑам уÑпео да учитам подешавање за „%s“\n"
8726
8727#: src/util/gnunet-config.c:365
8728#, fuzzy
8729msgid "interpret option value as a filename (with $-expansion)"
8730msgstr "добија опцију вредноÑти као назив датотеке (Ñа $-ширењем)"
8672 8731
8673#: src/util/gnunet-config.c:302 8732#: src/util/gnunet-config.c:370
8674msgid "name of the option to access" 8733msgid "name of the option to access"
8675msgstr "назив опције за приÑтупање" 8734msgstr "назив опције за приÑтупање"
8676 8735
8677#: src/util/gnunet-config.c:307 8736#: src/util/gnunet-config.c:376
8678msgid "value to set" 8737#, fuzzy
8679msgstr "вредноÑÑ‚ за поÑтављање" 8738msgid "rewrite the configuration file, even if nothing changed"
8739msgstr "Ðије дата датотека подешавања. Излазим\n"
8680 8740
8681#: src/util/gnunet-config.c:312 8741#: src/util/gnunet-config.c:382
8742msgid "output extra diagnostics"
8743msgstr ""
8744
8745#: src/util/gnunet-config.c:387
8682#, fuzzy 8746#, fuzzy
8683msgid "print available configuration sections" 8747msgid "print available configuration sections"
8684msgstr "ÐедоÑтају поÑтавке подешавања кључа.\n" 8748msgstr "ÐедоÑтају поÑтавке подешавања кључа.\n"
8685 8749
8686#: src/util/gnunet-config.c:318 8750#: src/util/gnunet-config.c:393
8687msgid "write configuration file that only contains delta to defaults" 8751msgid "name of the section to access"
8688msgstr "" 8752msgstr "назив одељка за приÑтупање"
8753
8754#: src/util/gnunet-config.c:398
8755msgid "value to set"
8756msgstr "вредноÑÑ‚ за поÑтављање"
8689 8757
8690#: src/util/gnunet-config.c:330 8758#: src/util/gnunet-config.c:413
8691msgid "Manipulate GNUnet configuration files" 8759msgid "Manipulate GNUnet configuration files"
8692msgstr "Управља ГÐУнет датотекама подешавања" 8760msgstr "Управља ГÐУнет датотекама подешавања"
8693 8761
@@ -8885,7 +8953,7 @@ msgid "Unable to shorten unix path `%s' while keeping name unique\n"
8885msgstr "" 8953msgstr ""
8886"Ðе могу да Ñкратим Ñ˜ÑƒÐ½Ð¸ÐºÑ Ð¿ÑƒÑ‚Ð°ÑšÑƒ „%s“ док задржавам назив јединÑтвеним\n" 8954"Ðе могу да Ñкратим Ñ˜ÑƒÐ½Ð¸ÐºÑ Ð¿ÑƒÑ‚Ð°ÑšÑƒ „%s“ док задржавам назив јединÑтвеним\n"
8887 8955
8888#: src/util/network.c:1361 8956#: src/util/network.c:1359
8889#, c-format 8957#, c-format
8890msgid "" 8958msgid ""
8891"Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n" 8959"Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n"
@@ -8927,21 +8995,21 @@ msgstr "„%s“ није уÑпело да реши метод '%s' Ñа гре
8927msgid "`%s' failed for library `%s' with error: %s\n" 8995msgid "`%s' failed for library `%s' with error: %s\n"
8928msgstr "„%s“ није уÑпело за библиотеку '%s' Ñа грешком: %s\n" 8996msgstr "„%s“ није уÑпело за библиотеку '%s' Ñа грешком: %s\n"
8929 8997
8930#: src/util/plugin.c:409 8998#: src/util/plugin.c:414
8931msgid "Could not determine plugin installation path.\n" 8999msgid "Could not determine plugin installation path.\n"
8932msgstr "Ðе могу да одредим путању инÑталирања прикључка.\n" 9000msgstr "Ðе могу да одредим путању инÑталирања прикључка.\n"
8933 9001
8934#: src/util/program.c:259 9002#: src/util/program.c:252
8935#, fuzzy, c-format 9003#, fuzzy, c-format
8936msgid "Unreadable or malformed configuration file `%s', exit ...\n" 9004msgid "Unreadable or malformed configuration file `%s', exit ...\n"
8937msgstr "Лоша датотека подешавања „%s“, излазим ...\n" 9005msgstr "Лоша датотека подешавања „%s“, излазим ...\n"
8938 9006
8939#: src/util/program.c:276 9007#: src/util/program.c:272
8940#, fuzzy, c-format 9008#, fuzzy, c-format
8941msgid "Unreadable or malformed default configuration file `%s', exit ...\n" 9009msgid "Unreadable or malformed default configuration file `%s', exit ...\n"
8942msgstr "Лоша датотека подешавања „%s“, излазим ...\n" 9010msgstr "Лоша датотека подешавања „%s“, излазим ...\n"
8943 9011
8944#: src/util/program.c:291 9012#: src/util/program.c:288
8945#, fuzzy 9013#, fuzzy
8946msgid "Unreadable or malformed configuration, exit ...\n" 9014msgid "Unreadable or malformed configuration, exit ...\n"
8947msgstr "Лоше подешавање, излазим ...\n" 9015msgstr "Лоше подешавање, излазим ...\n"
@@ -9010,83 +9078,83 @@ msgstr ""
9010msgid "Attempting to proxy service `%s' to invalid port %d or hostname.\n" 9078msgid "Attempting to proxy service `%s' to invalid port %d or hostname.\n"
9011msgstr "" 9079msgstr ""
9012 9080
9013#: src/util/strings.c:503 9081#: src/util/strings.c:409
9014#, c-format 9082#, c-format
9015msgid "Character sets requested were `%s'->`%s'\n" 9083msgid "Character sets requested were `%s'->`%s'\n"
9016msgstr "Скупови знакова Ñе захтевају где је „%s“–>„%s“\n" 9084msgstr "Скупови знакова Ñе захтевају где је „%s“–>„%s“\n"
9017 9085
9018#: src/util/strings.c:637 9086#: src/util/strings.c:501
9019msgid "Failed to expand `$HOME': environment variable `HOME' not set" 9087msgid "Failed to expand `$HOME': environment variable `HOME' not set"
9020msgstr "" 9088msgstr ""
9021"ÐиÑам уÑпео да раширим „$HOME“: променљива окружења „HOME“ није поÑтављена" 9089"ÐиÑам уÑпео да раширим „$HOME“: променљива окружења „HOME“ није поÑтављена"
9022 9090
9023#: src/util/strings.c:1241 9091#: src/util/strings.c:1036
9024msgid "IPv6 address did not start with `['\n" 9092msgid "IPv6 address did not start with `['\n"
9025msgstr "ИПв6 адреÑа не почиње Ñа [\n" 9093msgstr "ИПв6 адреÑа не почиње Ñа [\n"
9026 9094
9027#: src/util/strings.c:1249 9095#: src/util/strings.c:1044
9028msgid "IPv6 address did contain ':' to separate port number\n" 9096msgid "IPv6 address did contain ':' to separate port number\n"
9029msgstr "ИПв6 адреÑа Ñадржи : за раздвајање броја прикључника\n" 9097msgstr "ИПв6 адреÑа Ñадржи : за раздвајање броја прикључника\n"
9030 9098
9031#: src/util/strings.c:1256 9099#: src/util/strings.c:1051
9032msgid "IPv6 address did contain ']' before ':' to separate port number\n" 9100msgid "IPv6 address did contain ']' before ':' to separate port number\n"
9033msgstr "ИПв6 адреÑа Ñадржи ] пре : за раздвајање броја прикључника\n" 9101msgstr "ИПв6 адреÑа Ñадржи ] пре : за раздвајање броја прикључника\n"
9034 9102
9035#: src/util/strings.c:1264 9103#: src/util/strings.c:1059
9036msgid "IPv6 address did contain a valid port number after the last ':'\n" 9104msgid "IPv6 address did contain a valid port number after the last ':'\n"
9037msgstr "ИПв6 адреÑа Ñадржи иÑправан број прикључника након поÑледње „:“\n" 9105msgstr "ИПв6 адреÑа Ñадржи иÑправан број прикључника након поÑледње „:“\n"
9038 9106
9039#: src/util/strings.c:1273 9107#: src/util/strings.c:1068
9040#, c-format 9108#, c-format
9041msgid "Invalid IPv6 address `%s': %s\n" 9109msgid "Invalid IPv6 address `%s': %s\n"
9042msgstr "ÐеиÑправна ИПв6 адреÑа „%s“: %s\n" 9110msgstr "ÐеиÑправна ИПв6 адреÑа „%s“: %s\n"
9043 9111
9044#: src/util/strings.c:1500 src/util/strings.c:1511 9112#: src/util/strings.c:1250 src/util/strings.c:1261
9045msgid "Port not in range\n" 9113msgid "Port not in range\n"
9046msgstr "Прикључник није у опÑегу\n" 9114msgstr "Прикључник није у опÑегу\n"
9047 9115
9048#: src/util/strings.c:1520 9116#: src/util/strings.c:1270
9049#, c-format 9117#, c-format
9050msgid "Malformed port policy `%s'\n" 9118msgid "Malformed port policy `%s'\n"
9051msgstr "Лоша политика прикључника „%s“\n" 9119msgstr "Лоша политика прикључника „%s“\n"
9052 9120
9053#: src/util/strings.c:1603 src/util/strings.c:1632 src/util/strings.c:1679 9121#: src/util/strings.c:1341 src/util/strings.c:1370 src/util/strings.c:1417
9054#: src/util/strings.c:1699 9122#: src/util/strings.c:1437
9055#, c-format 9123#, c-format
9056msgid "Invalid format for IP: `%s'\n" 9124msgid "Invalid format for IP: `%s'\n"
9057msgstr "ÐеиÑправан формат за ИП: „%s“\n" 9125msgstr "ÐеиÑправан формат за ИП: „%s“\n"
9058 9126
9059#: src/util/strings.c:1657 9127#: src/util/strings.c:1395
9060#, c-format 9128#, c-format
9061msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)." 9129msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)."
9062msgstr "ÐеиÑправна напомена мреже („/%d“ није иÑправно у ИПв4 ЦИДР-у)." 9130msgstr "ÐеиÑправна напомена мреже („/%d“ није иÑправно у ИПв4 ЦИДР-у)."
9063 9131
9064#: src/util/strings.c:1708 9132#: src/util/strings.c:1446
9065#, c-format 9133#, c-format
9066msgid "Invalid format: `%s'\n" 9134msgid "Invalid format: `%s'\n"
9067msgstr "ÐеиÑправан формат: „%s“\n" 9135msgstr "ÐеиÑправан формат: „%s“\n"
9068 9136
9069#: src/util/strings.c:1761 9137#: src/util/strings.c:1488
9070#, c-format 9138#, c-format
9071msgid "Invalid network notation (does not end with ';': `%s')\n" 9139msgid "Invalid network notation (does not end with ';': `%s')\n"
9072msgstr "ÐеиÑправна напомена мреже (не завршава Ñе Ñа „;“: „%s“)\n" 9140msgstr "ÐеиÑправна напомена мреже (не завршава Ñе Ñа „;“: „%s“)\n"
9073 9141
9074#: src/util/strings.c:1811 9142#: src/util/strings.c:1538
9075#, c-format 9143#, c-format
9076msgid "Wrong format `%s' for netmask\n" 9144msgid "Wrong format `%s' for netmask\n"
9077msgstr "Погрешан формат „%s“ за мрежну маÑку\n" 9145msgstr "Погрешан формат „%s“ за мрежну маÑку\n"
9078 9146
9079#: src/util/strings.c:1842 9147#: src/util/strings.c:1569
9080#, c-format 9148#, c-format
9081msgid "Wrong format `%s' for network\n" 9149msgid "Wrong format `%s' for network\n"
9082msgstr "Погрешан формат „%s“ за мрежу\n" 9150msgstr "Погрешан формат „%s“ за мрежу\n"
9083 9151
9084#: src/util/time.c:878 src/util/time.c:906 9152#: src/util/time.c:699 src/util/time.c:727
9085#, c-format 9153#, c-format
9086msgid "Failed to map `%s', cannot assure monotonic time!\n" 9154msgid "Failed to map `%s', cannot assure monotonic time!\n"
9087msgstr "" 9155msgstr ""
9088 9156
9089#: src/util/time.c:914 9157#: src/util/time.c:735
9090#, c-format 9158#, c-format
9091msgid "" 9159msgid ""
9092"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n" 9160"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
@@ -9262,11 +9330,63 @@ msgstr "уÑлуга Ñе нуди путем УДП-ом"
9262msgid "Setup tunnels via VPN." 9330msgid "Setup tunnels via VPN."
9263msgstr "ПоÑтавља тунеле путем ВПÐ-а." 9331msgstr "ПоÑтавља тунеле путем ВПÐ-а."
9264 9332
9265#: src/zonemaster/gnunet-service-zonemaster.c:847
9266#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418 9333#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418
9334#: src/zonemaster/gnunet-service-zonemaster.c:847
9267msgid "Failed to connect to the namestore!\n" 9335msgid "Failed to connect to the namestore!\n"
9268msgstr "ÐиÑам уÑпео да Ñе повежем Ñа Ñмештајем назива!\n" 9336msgstr "ÐиÑам уÑпео да Ñе повежем Ñа Ñмештајем назива!\n"
9269 9337
9338#~ msgid "Stop logging\n"
9339#~ msgstr "ЗауÑтављам дневничење\n"
9340
9341#, c-format
9342#~ msgid "Start logging `%s'\n"
9343#~ msgstr "Започињем дневничење „%s“\n"
9344
9345#, c-format
9346#~ msgid "Connected master [%u] with slave [%u]\n"
9347#~ msgstr "Повезан је надређени [%u] Ñа потчињеним [%u]\n"
9348
9349#, c-format
9350#~ msgid "Failed to connect master peer [%u] with slave [%u]\n"
9351#~ msgstr "ÐиÑам уÑпео да повежем надређеног парњака [%u] Ñа потчињеним [%u]\n"
9352
9353#, c-format
9354#~ msgid ""
9355#~ "Master [%u]: sent: %u KiB in %u sec. = %u KiB/s, received: %u KiB in %u "
9356#~ "sec. = %u KiB/s\n"
9357#~ msgstr ""
9358#~ "Ðадређени [%u]: поÑлао: %u KiB за %u Ñек. = %u KiB/s, примио: %u KiB за "
9359#~ "%u Ñек. = %u KiB/s\n"
9360
9361#, c-format
9362#~ msgid "Unsupported form value `%s'\n"
9363#~ msgstr "Ðеподржана вредноÑÑ‚ облика „%s“\n"
9364
9365#~ msgid "Error when mapping zone to name\n"
9366#~ msgstr "Грешка приликом мапирања зоне у назив\n"
9367
9368#, c-format
9369#~ msgid "Found existing name `%s' for the given key\n"
9370#~ msgstr "Ðађох поÑтојећи назив „%s“ за дати кључ\n"
9371
9372#, c-format
9373#~ msgid "Found %u existing records for domain `%s'\n"
9374#~ msgstr "Ðађох %u поÑтојећа запиÑа за домен „%s“\n"
9375
9376#, c-format
9377#~ msgid "Failed to create page for `%s'\n"
9378#~ msgstr "ÐиÑам уÑпео да направим Ñтраницу за „%s“\n"
9379
9380#, c-format
9381#~ msgid "Failed to setup post processor for `%s'\n"
9382#~ msgstr "ÐиÑам уÑпео да поÑтавим поÑтпроцеÑор за „%s“\n"
9383
9384#~ msgid "Domain name must not contain `.'\n"
9385#~ msgstr "Ðазив домена не Ñме да Ñадржи „.“\n"
9386
9387#~ msgid "Domain name must not contain `+'\n"
9388#~ msgstr "Ðазив домена не Ñме да Ñадржи „+“\n"
9389
9270#~ msgid "Client was disconnected from arm service, trying to reconnect.\n" 9390#~ msgid "Client was disconnected from arm service, trying to reconnect.\n"
9271#~ msgstr "" 9391#~ msgstr ""
9272#~ "Клијент је иÑкопчан Ñа аур уÑлуге, покушавам поново да Ñе повежем.\n" 9392#~ "Клијент је иÑкопчан Ñа аур уÑлуге, покушавам поново да Ñе повежем.\n"
@@ -9512,10 +9632,6 @@ msgstr "ÐиÑам уÑпео да Ñе повежем Ñа Ñмештајем Ð
9512#~ msgid "# UPDATE requests received" 9632#~ msgid "# UPDATE requests received"
9513#~ msgstr "# захтеви ОСВЕЖИ Ñу примљени" 9633#~ msgstr "# захтеви ОСВЕЖИ Ñу примљени"
9514 9634
9515#, c-format
9516#~ msgid "Failed to prepare statement `%s'\n"
9517#~ msgstr "ÐиÑам уÑпео да припремим Ñтање „%s“\n"
9518
9519#~ msgid "Invalid data in database. Trying to fix (by deletion).\n" 9635#~ msgid "Invalid data in database. Trying to fix (by deletion).\n"
9520#~ msgstr "" 9636#~ msgstr ""
9521#~ "ÐеиÑправан податак у бази података. Покушавам да поправим (бриÑањем).\n" 9637#~ "ÐеиÑправан податак у бази података. Покушавам да поправим (бриÑањем).\n"
@@ -9705,9 +9821,6 @@ msgstr "ÐиÑам уÑпео да Ñе повежем Ñа Ñмештајем Ð
9705#~ msgstr "" 9821#~ msgstr ""
9706#~ "ÐиÑам уÑпео да примим иÑправан одговор за „%s“ захтев од „%s“ уÑлуге.\n" 9822#~ "ÐиÑам уÑпео да примим иÑправан одговор за „%s“ захтев од „%s“ уÑлуге.\n"
9707 9823
9708#~ msgid "unknown error"
9709#~ msgstr "непозната грешка"
9710
9711#, c-format 9824#, c-format
9712#~ msgid "Insufficient space for publishing: %s" 9825#~ msgid "Insufficient space for publishing: %s"
9713#~ msgstr "Ðедовољно проÑтора за објављивање: %s" 9826#~ msgstr "Ðедовољно проÑтора за објављивање: %s"
diff --git a/po/sv.po b/po/sv.po
index f409b56ec..dfaa0f839 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,7 +7,7 @@ msgid ""
7msgstr "" 7msgstr ""
8"Project-Id-Version: GNUnet 0.7.0b\n" 8"Project-Id-Version: GNUnet 0.7.0b\n"
9"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" 9"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
10"POT-Creation-Date: 2021-04-04 19:19+0200\n" 10"POT-Creation-Date: 2021-08-28 16:52+0200\n"
11"PO-Revision-Date: 2006-01-21 17:16+0100\n" 11"PO-Revision-Date: 2006-01-21 17:16+0100\n"
12"Last-Translator: Daniel Nylander <po@danielnylander.se>\n" 12"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
13"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" 13"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
@@ -27,8 +27,8 @@ msgid "Issuer public key `%s' is not well-formed\n"
27msgstr "Ogiltigt argument: \"%s\"\n" 27msgstr "Ogiltigt argument: \"%s\"\n"
28 28
29#: src/abd/gnunet-abd.c:560 src/abd/gnunet-service-abd.c:1747 29#: src/abd/gnunet-abd.c:560 src/abd/gnunet-service-abd.c:1747
30#: src/namestore/gnunet-namestore-fcfsd.c:1067
30#: src/namestore/gnunet-namestore.c:1001 31#: src/namestore/gnunet-namestore.c:1001
31#: src/namestore/gnunet-namestore-fcfsd.c:1164
32#, fuzzy, c-format 32#, fuzzy, c-format
33msgid "Failed to connect to namestore\n" 33msgid "Failed to connect to namestore\n"
34msgstr "Misslyckades att ansluta till gnunetd.\n" 34msgstr "Misslyckades att ansluta till gnunetd.\n"
@@ -502,109 +502,6 @@ msgstr ""
502msgid "Initiating shutdown as requested by client.\n" 502msgid "Initiating shutdown as requested by client.\n"
503msgstr "" 503msgstr ""
504 504
505#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044
506#, c-format
507msgid ""
508"Could not load quota for network `%s': `%s', assigning default bandwidth "
509"%llu\n"
510msgstr ""
511
512#: src/ats/gnunet-ats-solver-eval.c:3011
513#, c-format
514msgid ""
515"No outbound quota configured for network `%s', assigning default bandwidth "
516"%llu\n"
517msgstr ""
518
519#: src/ats/gnunet-ats-solver-eval.c:3063
520#, c-format
521msgid ""
522"No outbound quota configure for network `%s', assigning default bandwidth "
523"%llu\n"
524msgstr ""
525
526#: src/ats/gnunet-ats-solver-eval.c:3552 src/ats-tests/gnunet-solver-eval.c:997
527msgid "solver to use"
528msgstr ""
529
530#: src/ats/gnunet-ats-solver-eval.c:3557
531#: src/ats-tests/gnunet-solver-eval.c:1003
532#: src/ats-tests/gnunet-solver-eval.c:1008
533msgid "experiment to use"
534msgstr ""
535
536#: src/ats/gnunet-ats-solver-eval.c:3564
537#, fuzzy
538msgid "print logging"
539msgstr "Startade samling \"%s\".\n"
540
541#: src/ats/gnunet-ats-solver-eval.c:3569
542msgid "save logging to disk"
543msgstr ""
544
545#: src/ats/gnunet-ats-solver-eval.c:3574
546msgid "disable normalization"
547msgstr ""
548
549#: src/ats/gnunet-service-ats_plugins.c:326
550#, c-format
551msgid ""
552"Could not load %s quota for network `%s': `%s', assigning default bandwidth "
553"%llu\n"
554msgstr ""
555
556#: src/ats/gnunet-service-ats_plugins.c:336
557#, c-format
558msgid "%s quota configured for network `%s' is %llu\n"
559msgstr ""
560
561#: src/ats/gnunet-service-ats_plugins.c:382
562#, c-format
563msgid ""
564"No %s-quota configured for network `%s', assigning default bandwidth %llu\n"
565msgstr ""
566
567#: src/ats/gnunet-service-ats_plugins.c:474
568#, fuzzy, c-format
569msgid "Failed to initialize solver `%s'!\n"
570msgstr "Kunde inte initiera SQLite.\n"
571
572#: src/ats/plugin_ats_proportional.c:1142
573#, fuzzy, c-format
574msgid "Invalid %s configuration %f \n"
575msgstr "Kunde inte spara konfigurationsfil \"%s\":"
576
577#: src/ats/plugin_ats_proportional.c:1165
578#, fuzzy, c-format
579msgid "Invalid %s configuration %f\n"
580msgstr "Kunde inte spara konfigurationsfil \"%s\":"
581
582#: src/ats-tests/ats-testing.c:420
583#, c-format
584msgid "Connected master [%u] with slave [%u]\n"
585msgstr ""
586
587#: src/ats-tests/ats-testing.c:427
588#, fuzzy, c-format
589msgid "Failed to connect master peer [%u] with slave [%u]\n"
590msgstr "Misslyckades att ansluta till gnunetd.\n"
591
592#: src/ats-tests/ats-testing-log.c:899
593msgid "Stop logging\n"
594msgstr ""
595
596#: src/ats-tests/ats-testing-log.c:955
597#, fuzzy, c-format
598msgid "Start logging `%s'\n"
599msgstr "Startade samling \"%s\".\n"
600
601#: src/ats-tests/gnunet-ats-sim.c:92
602#, c-format
603msgid ""
604"Master [%u]: sent: %u KiB in %u sec. = %u KiB/s, received: %u KiB in %u sec. "
605"= %u KiB/s\n"
606msgstr ""
607
608#: src/ats-tool/gnunet-ats.c:299 505#: src/ats-tool/gnunet-ats.c:299
609#, c-format 506#, c-format
610msgid "%u address resolutions had a timeout\n" 507msgid "%u address resolutions had a timeout\n"
@@ -726,6 +623,81 @@ msgstr ""
726msgid "Print information about ATS state" 623msgid "Print information about ATS state"
727msgstr "Skriv ut information om GNUnets motparter." 624msgstr "Skriv ut information om GNUnets motparter."
728 625
626#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044
627#, c-format
628msgid ""
629"Could not load quota for network `%s': `%s', assigning default bandwidth "
630"%llu\n"
631msgstr ""
632
633#: src/ats/gnunet-ats-solver-eval.c:3011
634#, c-format
635msgid ""
636"No outbound quota configured for network `%s', assigning default bandwidth "
637"%llu\n"
638msgstr ""
639
640#: src/ats/gnunet-ats-solver-eval.c:3063
641#, c-format
642msgid ""
643"No outbound quota configure for network `%s', assigning default bandwidth "
644"%llu\n"
645msgstr ""
646
647#: src/ats/gnunet-ats-solver-eval.c:3552
648msgid "solver to use"
649msgstr ""
650
651#: src/ats/gnunet-ats-solver-eval.c:3557
652msgid "experiment to use"
653msgstr ""
654
655#: src/ats/gnunet-ats-solver-eval.c:3564
656#, fuzzy
657msgid "print logging"
658msgstr "Startade samling \"%s\".\n"
659
660#: src/ats/gnunet-ats-solver-eval.c:3569
661msgid "save logging to disk"
662msgstr ""
663
664#: src/ats/gnunet-ats-solver-eval.c:3574
665msgid "disable normalization"
666msgstr ""
667
668#: src/ats/gnunet-service-ats_plugins.c:326
669#, c-format
670msgid ""
671"Could not load %s quota for network `%s': `%s', assigning default bandwidth "
672"%llu\n"
673msgstr ""
674
675#: src/ats/gnunet-service-ats_plugins.c:336
676#, c-format
677msgid "%s quota configured for network `%s' is %llu\n"
678msgstr ""
679
680#: src/ats/gnunet-service-ats_plugins.c:382
681#, c-format
682msgid ""
683"No %s-quota configured for network `%s', assigning default bandwidth %llu\n"
684msgstr ""
685
686#: src/ats/gnunet-service-ats_plugins.c:474
687#, fuzzy, c-format
688msgid "Failed to initialize solver `%s'!\n"
689msgstr "Kunde inte initiera SQLite.\n"
690
691#: src/ats/plugin_ats_proportional.c:1142
692#, fuzzy, c-format
693msgid "Invalid %s configuration %f \n"
694msgstr "Kunde inte spara konfigurationsfil \"%s\":"
695
696#: src/ats/plugin_ats_proportional.c:1165
697#, fuzzy, c-format
698msgid "Invalid %s configuration %f\n"
699msgstr "Kunde inte spara konfigurationsfil \"%s\":"
700
729#: src/auction/gnunet-auction-create.c:163 701#: src/auction/gnunet-auction-create.c:163
730msgid "description of the item to be sold" 702msgid "description of the item to be sold"
731msgstr "" 703msgstr ""
@@ -763,7 +735,7 @@ msgstr ""
763 735
764#: src/auction/gnunet-auction-info.c:77 src/auction/gnunet-auction-join.c:77 736#: src/auction/gnunet-auction-info.c:77 src/auction/gnunet-auction-join.c:77
765#: src/conversation/gnunet-conversation-test.c:256 737#: src/conversation/gnunet-conversation-test.c:256
766#: src/revocation/gnunet-revocation.c:564 src/template/gnunet-template.c:75 738#: src/revocation/gnunet-revocation.c:570 src/template/gnunet-template.c:75
767#, fuzzy 739#, fuzzy
768msgid "help text" 740msgid "help text"
769msgstr "hjälptext för -t" 741msgstr "hjälptext för -t"
@@ -865,6 +837,28 @@ msgstr ""
865msgid "Connection to conversation service lost, trying to reconnect\n" 837msgid "Connection to conversation service lost, trying to reconnect\n"
866msgstr "" 838msgstr ""
867 839
840#: src/conversation/gnunet-conversation-test.c:120
841#, c-format
842msgid ""
843"\n"
844"End of transmission. Have a GNU day.\n"
845msgstr ""
846
847#: src/conversation/gnunet-conversation-test.c:146
848#, c-format
849msgid ""
850"\n"
851"ew are now playing your recording back. If you can hear it, your audio "
852"settings are working..."
853msgstr ""
854
855#: src/conversation/gnunet-conversation-test.c:218
856#, c-format
857msgid ""
858"We will now be recording you for %s. After that time, the recording will be "
859"played back to you..."
860msgstr ""
861
868#: src/conversation/gnunet-conversation.c:264 862#: src/conversation/gnunet-conversation.c:264
869#, c-format 863#, c-format
870msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n" 864msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n"
@@ -1124,30 +1118,8 @@ msgstr ""
1124msgid "Enables having a conversation with other GNUnet users." 1118msgid "Enables having a conversation with other GNUnet users."
1125msgstr "" 1119msgstr ""
1126 1120
1127#: src/conversation/gnunet-conversation-test.c:120
1128#, c-format
1129msgid ""
1130"\n"
1131"End of transmission. Have a GNU day.\n"
1132msgstr ""
1133
1134#: src/conversation/gnunet-conversation-test.c:146
1135#, c-format
1136msgid ""
1137"\n"
1138"We are now playing your recording back. If you can hear it, your audio "
1139"settings are working..."
1140msgstr ""
1141
1142#: src/conversation/gnunet-conversation-test.c:218
1143#, c-format
1144msgid ""
1145"We will now be recording you for %s. After that time, the recording will be "
1146"played back to you..."
1147msgstr ""
1148
1149#: src/conversation/gnunet_gst.c:664
1150#: src/conversation/gnunet-helper-audio-playback-gst.c:363 1121#: src/conversation/gnunet-helper-audio-playback-gst.c:363
1122#: src/conversation/gnunet_gst.c:664
1151#, c-format 1123#, c-format
1152msgid "Read error from STDIN: %d %s\n" 1124msgid "Read error from STDIN: %d %s\n"
1153msgstr "" 1125msgstr ""
@@ -1593,42 +1565,42 @@ msgstr "# krypterade PONG-meddelanden mottagna"
1593msgid "# updates to my type map" 1565msgid "# updates to my type map"
1594msgstr "" 1566msgstr ""
1595 1567
1596#: src/datacache/datacache.c:115 src/datacache/datacache.c:287 1568#: src/datacache/datacache.c:115 src/datacache/datacache.c:299
1597#: src/datastore/gnunet-service-datastore.c:742 1569#: src/datastore/gnunet-service-datastore.c:742
1598#, fuzzy 1570#, fuzzy
1599msgid "# bytes stored" 1571msgid "# bytes stored"
1600msgstr "# byte krypterade" 1572msgstr "# byte krypterade"
1601 1573
1602#: src/datacache/datacache.c:119 src/datacache/datacache.c:291 1574#: src/datacache/datacache.c:119 src/datacache/datacache.c:303
1603#, fuzzy 1575#, fuzzy
1604msgid "# items stored" 1576msgid "# items stored"
1605msgstr "# byte krypterade" 1577msgstr "# byte krypterade"
1606 1578
1607#: src/datacache/datacache.c:189 1579#: src/datacache/datacache.c:190
1608#, c-format 1580#, c-format
1609msgid "Loading `%s' datacache plugin\n" 1581msgid "Loading `%s' datacache plugin\n"
1610msgstr "" 1582msgstr ""
1611 1583
1612#: src/datacache/datacache.c:197 1584#: src/datacache/datacache.c:208
1613#, fuzzy, c-format 1585#, fuzzy, c-format
1614msgid "Failed to load datacache plugin for `%s'\n" 1586msgid "Failed to load datacache plugin for `%s'\n"
1615msgstr "Misslyckades att läsa kompislista från \"%s\"\n" 1587msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
1616 1588
1617#: src/datacache/datacache.c:320 1589#: src/datacache/datacache.c:332
1618#, fuzzy 1590#, fuzzy
1619msgid "# requests received" 1591msgid "# requests received"
1620msgstr "# byte mottogs via TCP" 1592msgstr "# byte mottogs via TCP"
1621 1593
1622#: src/datacache/datacache.c:331 1594#: src/datacache/datacache.c:343
1623msgid "# requests filtered by bloom filter" 1595msgid "# requests filtered by bloom filter"
1624msgstr "" 1596msgstr ""
1625 1597
1626#: src/datacache/datacache.c:358 1598#: src/datacache/datacache.c:370
1627#, fuzzy 1599#, fuzzy
1628msgid "# requests for random value received" 1600msgid "# requests for random value received"
1629msgstr "# byte mottogs via TCP" 1601msgstr "# byte mottogs via TCP"
1630 1602
1631#: src/datacache/datacache.c:388 1603#: src/datacache/datacache.c:400
1632#, fuzzy 1604#, fuzzy
1633msgid "# proximity search requests received" 1605msgid "# proximity search requests received"
1634msgstr "# klartext PONG-meddelanden mottagna" 1606msgstr "# klartext PONG-meddelanden mottagna"
@@ -1977,7 +1949,7 @@ msgstr ""
1977 1949
1978#: src/datastore/plugin_datastore_postgres.c:284 1950#: src/datastore/plugin_datastore_postgres.c:284
1979#: src/datastore/plugin_datastore_postgres.c:897 1951#: src/datastore/plugin_datastore_postgres.c:897
1980msgid "Postgress exec failure" 1952msgid "Postgresql exec failure"
1981msgstr "" 1953msgstr ""
1982 1954
1983#: src/datastore/plugin_datastore_postgres.c:858 1955#: src/datastore/plugin_datastore_postgres.c:858
@@ -2013,14 +1985,25 @@ msgstr ""
2013msgid "sqlite version to old to determine size, assuming zero\n" 1985msgid "sqlite version to old to determine size, assuming zero\n"
2014msgstr "" 1986msgstr ""
2015 1987
2016#: src/datastore/plugin_datastore_sqlite.c:1274 1988#: src/datastore/plugin_datastore_sqlite.c:1266
1989#: src/datastore/plugin_datastore_sqlite.c:1279
1990#, fuzzy
1991msgid "error preparing statement\n"
1992msgstr "Klar med skapandet av värdnyckel.\n"
1993
1994#: src/datastore/plugin_datastore_sqlite.c:1287
1995#, fuzzy
1996msgid "error stepping\n"
1997msgstr "# byte krypterade"
1998
1999#: src/datastore/plugin_datastore_sqlite.c:1295
2017#, c-format 2000#, c-format
2018msgid "" 2001msgid ""
2019"Using sqlite page utilization to estimate payload (%llu pages of size %llu " 2002"Using sqlite page utilization to estimate payload (%llu pages of size %llu "
2020"bytes)\n" 2003"bytes)\n"
2021msgstr "" 2004msgstr ""
2022 2005
2023#: src/datastore/plugin_datastore_sqlite.c:1316 2006#: src/datastore/plugin_datastore_sqlite.c:1337
2024#: src/namecache/plugin_namecache_sqlite.c:564 2007#: src/namecache/plugin_namecache_sqlite.c:564
2025#: src/namestore/plugin_namestore_sqlite.c:765 2008#: src/namestore/plugin_namestore_sqlite.c:765
2026msgid "Sqlite database running\n" 2009msgid "Sqlite database running\n"
@@ -2093,54 +2076,6 @@ msgstr ""
2093msgid "Prints all packets that go through the DHT." 2076msgid "Prints all packets that go through the DHT."
2094msgstr "" 2077msgstr ""
2095 2078
2096#: src/dht/gnunet_dht_profiler.c:922 src/testbed/gnunet-testbed-profiler.c:255
2097#, fuzzy, c-format
2098msgid "Exiting as the number of peers is %u\n"
2099msgstr "Maximalt antal chattklienter uppnått.\n"
2100
2101#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3136
2102#, fuzzy
2103msgid "number of peers to start"
2104msgstr "antal iterationer"
2105
2106#: src/dht/gnunet_dht_profiler.c:961
2107msgid "number of PUTs to perform per peer"
2108msgstr ""
2109
2110#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872
2111#: src/testbed/gnunet-testbed-profiler.c:305
2112msgid "name of the file with the login information for the testbed"
2113msgstr ""
2114
2115#: src/dht/gnunet_dht_profiler.c:973
2116msgid "delay between rounds for collecting statistics (default: 30 sec)"
2117msgstr ""
2118
2119#: src/dht/gnunet_dht_profiler.c:979
2120msgid "delay to start doing PUTs (default: 1 sec)"
2121msgstr ""
2122
2123#: src/dht/gnunet_dht_profiler.c:985
2124msgid "delay to start doing GETs (default: 5 min)"
2125msgstr ""
2126
2127#: src/dht/gnunet_dht_profiler.c:990
2128msgid "replication degree for DHT PUTs"
2129msgstr ""
2130
2131#: src/dht/gnunet_dht_profiler.c:996
2132msgid "chance that a peer is selected at random for PUTs"
2133msgstr ""
2134
2135#: src/dht/gnunet_dht_profiler.c:1002
2136msgid "timeout for DHT PUT and GET requests (default: 1 min)"
2137msgstr ""
2138
2139#: src/dht/gnunet_dht_profiler.c:1023
2140#, fuzzy
2141msgid "Measure quality and performance of the DHT service."
2142msgstr "Kan inte tillgå tjänsten"
2143
2144#: src/dht/gnunet-dht-put.c:133 2079#: src/dht/gnunet-dht-put.c:133
2145msgid "Must provide KEY and DATA for DHT put!\n" 2080msgid "Must provide KEY and DATA for DHT put!\n"
2146msgstr "" 2081msgstr ""
@@ -2275,100 +2210,100 @@ msgstr "# PING-meddelanden skapade"
2275msgid "# requests TTL-dropped" 2210msgid "# requests TTL-dropped"
2276msgstr "# byte mottogs via TCP" 2211msgstr "# byte mottogs via TCP"
2277 2212
2278#: src/dht/gnunet-service-dht_neighbours.c:1052 2213#: src/dht/gnunet-service-dht_neighbours.c:1035
2279#: src/dht/gnunet-service-dht_neighbours.c:1096 2214#: src/dht/gnunet-service-dht_neighbours.c:1072
2280msgid "# Peers excluded from routing due to Bloomfilter" 2215msgid "# Peers excluded from routing due to Bloomfilter"
2281msgstr "" 2216msgstr ""
2282 2217
2283#: src/dht/gnunet-service-dht_neighbours.c:1069 2218#: src/dht/gnunet-service-dht_neighbours.c:1045
2284#: src/dht/gnunet-service-dht_neighbours.c:1112 2219#: src/dht/gnunet-service-dht_neighbours.c:1088
2285msgid "# Peer selection failed" 2220msgid "# Peer selection failed"
2286msgstr "" 2221msgstr ""
2287 2222
2288#: src/dht/gnunet-service-dht_neighbours.c:1270 2223#: src/dht/gnunet-service-dht_neighbours.c:1246
2289#, fuzzy 2224#, fuzzy
2290msgid "# PUT requests routed" 2225msgid "# PUT requests routed"
2291msgstr "# byte mottogs via TCP" 2226msgstr "# byte mottogs via TCP"
2292 2227
2293#: src/dht/gnunet-service-dht_neighbours.c:1304 2228#: src/dht/gnunet-service-dht_neighbours.c:1280
2294#, fuzzy 2229#, fuzzy
2295msgid "# PUT messages queued for transmission" 2230msgid "# PUT messages queued for transmission"
2296msgstr "# PING-meddelanden skapade" 2231msgstr "# PING-meddelanden skapade"
2297 2232
2298#: src/dht/gnunet-service-dht_neighbours.c:1316 2233#: src/dht/gnunet-service-dht_neighbours.c:1292
2299#: src/dht/gnunet-service-dht_neighbours.c:1458 2234#: src/dht/gnunet-service-dht_neighbours.c:1434
2300#: src/dht/gnunet-service-dht_neighbours.c:1562 2235#: src/dht/gnunet-service-dht_neighbours.c:1538
2301#, fuzzy 2236#, fuzzy
2302msgid "# P2P messages dropped due to full queue" 2237msgid "# P2P messages dropped due to full queue"
2303msgstr "Nätverksannonsering avstängd i konfigurationen!\n" 2238msgstr "Nätverksannonsering avstängd i konfigurationen!\n"
2304 2239
2305#: src/dht/gnunet-service-dht_neighbours.c:1401 2240#: src/dht/gnunet-service-dht_neighbours.c:1377
2306#, fuzzy 2241#, fuzzy
2307msgid "# GET requests routed" 2242msgid "# GET requests routed"
2308msgstr "# byte mottogs via TCP" 2243msgstr "# byte mottogs via TCP"
2309 2244
2310#: src/dht/gnunet-service-dht_neighbours.c:1445 2245#: src/dht/gnunet-service-dht_neighbours.c:1421
2311#, fuzzy 2246#, fuzzy
2312msgid "# GET messages queued for transmission" 2247msgid "# GET messages queued for transmission"
2313msgstr "# PING-meddelanden skapade" 2248msgstr "# PING-meddelanden skapade"
2314 2249
2315#: src/dht/gnunet-service-dht_neighbours.c:1577 2250#: src/dht/gnunet-service-dht_neighbours.c:1553
2316#, fuzzy 2251#, fuzzy
2317msgid "# RESULT messages queued for transmission" 2252msgid "# RESULT messages queued for transmission"
2318msgstr "# PING-meddelanden skapade" 2253msgstr "# PING-meddelanden skapade"
2319 2254
2320#: src/dht/gnunet-service-dht_neighbours.c:1680 2255#: src/dht/gnunet-service-dht_neighbours.c:1656
2321msgid "# Expired PUTs discarded" 2256msgid "# Expired PUTs discarded"
2322msgstr "" 2257msgstr ""
2323 2258
2324#: src/dht/gnunet-service-dht_neighbours.c:1688 2259#: src/dht/gnunet-service-dht_neighbours.c:1664
2325#, fuzzy 2260#, fuzzy
2326msgid "# P2P PUT requests received" 2261msgid "# P2P PUT requests received"
2327msgstr "# byte mottogs via TCP" 2262msgstr "# byte mottogs via TCP"
2328 2263
2329#: src/dht/gnunet-service-dht_neighbours.c:1692 2264#: src/dht/gnunet-service-dht_neighbours.c:1668
2330#, fuzzy 2265#, fuzzy
2331msgid "# P2P PUT bytes received" 2266msgid "# P2P PUT bytes received"
2332msgstr "# byte mottogs via TCP" 2267msgstr "# byte mottogs via TCP"
2333 2268
2334#: src/dht/gnunet-service-dht_neighbours.c:1924 2269#: src/dht/gnunet-service-dht_neighbours.c:1900
2335msgid "# FIND PEER requests ignored due to Bloomfilter" 2270msgid "# FIND PEER requests ignored due to Bloomfilter"
2336msgstr "" 2271msgstr ""
2337 2272
2338#: src/dht/gnunet-service-dht_neighbours.c:1933 2273#: src/dht/gnunet-service-dht_neighbours.c:1909
2339msgid "# FIND PEER requests ignored due to lack of HELLO" 2274msgid "# FIND PEER requests ignored due to lack of HELLO"
2340msgstr "" 2275msgstr ""
2341 2276
2342#: src/dht/gnunet-service-dht_neighbours.c:2096 2277#: src/dht/gnunet-service-dht_neighbours.c:2072
2343#, fuzzy 2278#, fuzzy
2344msgid "# P2P GET requests received" 2279msgid "# P2P GET requests received"
2345msgstr "# byte mottogs via TCP" 2280msgstr "# byte mottogs via TCP"
2346 2281
2347#: src/dht/gnunet-service-dht_neighbours.c:2100 2282#: src/dht/gnunet-service-dht_neighbours.c:2076
2348#, fuzzy 2283#, fuzzy
2349msgid "# P2P GET bytes received" 2284msgid "# P2P GET bytes received"
2350msgstr "# byte mottogs via TCP" 2285msgstr "# byte mottogs via TCP"
2351 2286
2352#: src/dht/gnunet-service-dht_neighbours.c:2166 2287#: src/dht/gnunet-service-dht_neighbours.c:2142
2353#, fuzzy 2288#, fuzzy
2354msgid "# P2P FIND PEER requests processed" 2289msgid "# P2P FIND PEER requests processed"
2355msgstr "# byte mottogs via TCP" 2290msgstr "# byte mottogs via TCP"
2356 2291
2357#: src/dht/gnunet-service-dht_neighbours.c:2187 2292#: src/dht/gnunet-service-dht_neighbours.c:2163
2358#, fuzzy 2293#, fuzzy
2359msgid "# P2P GET requests ONLY routed" 2294msgid "# P2P GET requests ONLY routed"
2360msgstr "# byte mottogs via TCP" 2295msgstr "# byte mottogs via TCP"
2361 2296
2362#: src/dht/gnunet-service-dht_neighbours.c:2365 2297#: src/dht/gnunet-service-dht_neighbours.c:2341
2363msgid "# Expired results discarded" 2298msgid "# Expired results discarded"
2364msgstr "" 2299msgstr ""
2365 2300
2366#: src/dht/gnunet-service-dht_neighbours.c:2382 2301#: src/dht/gnunet-service-dht_neighbours.c:2358
2367#, fuzzy 2302#, fuzzy
2368msgid "# P2P RESULTS received" 2303msgid "# P2P RESULTS received"
2369msgstr "# krypterade PONG-meddelanden mottagna" 2304msgstr "# krypterade PONG-meddelanden mottagna"
2370 2305
2371#: src/dht/gnunet-service-dht_neighbours.c:2386 2306#: src/dht/gnunet-service-dht_neighbours.c:2362
2372#, fuzzy 2307#, fuzzy
2373msgid "# P2P RESULT bytes received" 2308msgid "# P2P RESULT bytes received"
2374msgstr "# krypterade PONG-meddelanden mottagna" 2309msgstr "# krypterade PONG-meddelanden mottagna"
@@ -2411,6 +2346,54 @@ msgstr ""
2411msgid "# DHT requests combined" 2346msgid "# DHT requests combined"
2412msgstr "# byte mottogs via TCP" 2347msgstr "# byte mottogs via TCP"
2413 2348
2349#: src/dht/gnunet_dht_profiler.c:922 src/testbed/gnunet-testbed-profiler.c:255
2350#, fuzzy, c-format
2351msgid "Exiting as the number of peers is %u\n"
2352msgstr "Maximalt antal chattklienter uppnått.\n"
2353
2354#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3136
2355#, fuzzy
2356msgid "number of peers to start"
2357msgstr "antal iterationer"
2358
2359#: src/dht/gnunet_dht_profiler.c:961
2360msgid "number of PUTs to perform per peer"
2361msgstr ""
2362
2363#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872
2364#: src/testbed/gnunet-testbed-profiler.c:305
2365msgid "name of the file with the login information for the testbed"
2366msgstr ""
2367
2368#: src/dht/gnunet_dht_profiler.c:973
2369msgid "delay between rounds for collecting statistics (default: 30 sec)"
2370msgstr ""
2371
2372#: src/dht/gnunet_dht_profiler.c:979
2373msgid "delay to start doing PUTs (default: 1 sec)"
2374msgstr ""
2375
2376#: src/dht/gnunet_dht_profiler.c:985
2377msgid "delay to start doing GETs (default: 5 min)"
2378msgstr ""
2379
2380#: src/dht/gnunet_dht_profiler.c:990
2381msgid "replication degree for DHT PUTs"
2382msgstr ""
2383
2384#: src/dht/gnunet_dht_profiler.c:996
2385msgid "chance that a peer is selected at random for PUTs"
2386msgstr ""
2387
2388#: src/dht/gnunet_dht_profiler.c:1002
2389msgid "timeout for DHT PUT and GET requests (default: 1 min)"
2390msgstr ""
2391
2392#: src/dht/gnunet_dht_profiler.c:1023
2393#, fuzzy
2394msgid "Measure quality and performance of the DHT service."
2395msgstr "Kan inte tillgå tjänsten"
2396
2414#: src/dht/plugin_block_dht.c:189 2397#: src/dht/plugin_block_dht.c:189
2415#, fuzzy, c-format 2398#, fuzzy, c-format
2416msgid "Block not of type %u\n" 2399msgid "Block not of type %u\n"
@@ -2851,7 +2834,7 @@ msgstr ""
2851#: src/fs/fs_download.c:346 2834#: src/fs/fs_download.c:346
2852#, fuzzy, c-format 2835#, fuzzy, c-format
2853msgid "" 2836msgid ""
2854"Failed to access full directroy contents of `%s' for recursive download\n" 2837"Failed to access full directory contents of `%s' for recursive download\n"
2855msgstr "Misslyckades att läsa kompislista från \"%s\"\n" 2838msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
2856 2839
2857#: src/fs/fs_download.c:528 src/fs/fs_download.c:541 2840#: src/fs/fs_download.c:528 src/fs/fs_download.c:541
@@ -3363,15 +3346,6 @@ msgid ""
3363"chk/...)" 3346"chk/...)"
3364msgstr "" 3347msgstr ""
3365 3348
3366#: src/fs/gnunet-fs.c:128
3367msgid "print a list of all indexed files"
3368msgstr ""
3369
3370#: src/fs/gnunet-fs.c:141
3371#, fuzzy
3372msgid "Special file-sharing operations"
3373msgstr "Visa alla alternativ"
3374
3375#: src/fs/gnunet-fs-profiler.c:211 3349#: src/fs/gnunet-fs-profiler.c:211
3376msgid "run the experiment with COUNT peers" 3350msgid "run the experiment with COUNT peers"
3377msgstr "" 3351msgstr ""
@@ -3388,6 +3362,15 @@ msgstr ""
3388msgid "run a testbed to measure file-sharing performance" 3362msgid "run a testbed to measure file-sharing performance"
3389msgstr "" 3363msgstr ""
3390 3364
3365#: src/fs/gnunet-fs.c:128
3366msgid "print a list of all indexed files"
3367msgstr ""
3368
3369#: src/fs/gnunet-fs.c:141
3370#, fuzzy
3371msgid "Special file-sharing operations"
3372msgstr "Visa alla alternativ"
3373
3391#: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:234 3374#: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:234
3392#, c-format 3375#, c-format
3393msgid "Publishing `%s' at %llu/%llu (%s remaining)\n" 3376msgid "Publishing `%s' at %llu/%llu (%s remaining)\n"
@@ -4079,53 +4062,7 @@ msgstr ""
4079msgid "look for GNS2DNS records instead of ANY" 4062msgid "look for GNS2DNS records instead of ANY"
4080msgstr "" 4063msgstr ""
4081 4064
4082#: src/gns/gnunet-gns.c:257 4065#: src/gns/gnunet-gns-import.c:490
4083#, fuzzy, c-format
4084msgid "`%s' is not a valid DNS domain name\n"
4085msgstr "\"%s\" är inte tillgänglig."
4086
4087#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254
4088#, fuzzy, c-format
4089msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n"
4090msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
4091
4092#: src/gns/gnunet-gns.c:281
4093msgid "Cannot resolve using GNS: GNUnet peer not running\n"
4094msgstr ""
4095
4096#: src/gns/gnunet-gns.c:305
4097#, c-format
4098msgid "Invalid typename specified, assuming `ANY'\n"
4099msgstr ""
4100
4101#: src/gns/gnunet-gns.c:340
4102msgid "Lookup a record for the given name"
4103msgstr ""
4104
4105#: src/gns/gnunet-gns.c:346
4106#, fuzzy
4107msgid "Specify the type of the record to lookup"
4108msgstr "ange prioritet för innehållet"
4109
4110#: src/gns/gnunet-gns.c:352
4111#, fuzzy
4112msgid "Specify a timeout for the lookup"
4113msgstr "ange prioritet för innehållet"
4114
4115#: src/gns/gnunet-gns.c:356
4116msgid "No unneeded output"
4117msgstr ""
4118
4119#: src/gns/gnunet-gns.c:361
4120msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8"
4121msgstr ""
4122
4123#: src/gns/gnunet-gns.c:375
4124#, fuzzy
4125msgid "GNUnet GNS resolver tool"
4126msgstr "Spåra GNUnets nätverkstopologi."
4127
4128#: src/gns/gnunet-gns-import.c:491
4129msgid "This program will import some GNS authorities into your GNS namestore." 4066msgid "This program will import some GNS authorities into your GNS namestore."
4130msgstr "" 4067msgstr ""
4131 4068
@@ -4245,6 +4182,52 @@ msgstr ""
4245msgid "GNUnet GNS proxy" 4182msgid "GNUnet GNS proxy"
4246msgstr "" 4183msgstr ""
4247 4184
4185#: src/gns/gnunet-gns.c:257
4186#, fuzzy, c-format
4187msgid "`%s' is not a valid DNS domain name\n"
4188msgstr "\"%s\" är inte tillgänglig."
4189
4190#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254
4191#, fuzzy, c-format
4192msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n"
4193msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
4194
4195#: src/gns/gnunet-gns.c:281
4196msgid "Cannot resolve using GNS: GNUnet peer not running\n"
4197msgstr ""
4198
4199#: src/gns/gnunet-gns.c:305
4200#, c-format
4201msgid "Invalid typename specified, assuming `ANY'\n"
4202msgstr ""
4203
4204#: src/gns/gnunet-gns.c:340
4205msgid "Lookup a record for the given name"
4206msgstr ""
4207
4208#: src/gns/gnunet-gns.c:346
4209#, fuzzy
4210msgid "Specify the type of the record to lookup"
4211msgstr "ange prioritet för innehållet"
4212
4213#: src/gns/gnunet-gns.c:352
4214#, fuzzy
4215msgid "Specify a timeout for the lookup"
4216msgstr "ange prioritet för innehållet"
4217
4218#: src/gns/gnunet-gns.c:356
4219msgid "No unneeded output"
4220msgstr ""
4221
4222#: src/gns/gnunet-gns.c:361
4223msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8"
4224msgstr ""
4225
4226#: src/gns/gnunet-gns.c:375
4227#, fuzzy
4228msgid "GNUnet GNS resolver tool"
4229msgstr "Spåra GNUnets nätverkstopologi."
4230
4248#: src/gns/gnunet-service-gns.c:505 4231#: src/gns/gnunet-service-gns.c:505
4249#, fuzzy 4232#, fuzzy
4250msgid "Properly base32-encoded public key required" 4233msgid "Properly base32-encoded public key required"
@@ -4256,8 +4239,8 @@ msgid "Failed to connect to the namecache!\n"
4256msgstr "Misslyckades att ansluta till gnunetd.\n" 4239msgstr "Misslyckades att ansluta till gnunetd.\n"
4257 4240
4258#: src/gns/gnunet-service-gns.c:560 4241#: src/gns/gnunet-service-gns.c:560
4259#: src/zonemaster/gnunet-service-zonemaster.c:885
4260#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442 4242#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442
4243#: src/zonemaster/gnunet-service-zonemaster.c:885
4261#, fuzzy 4244#, fuzzy
4262msgid "Could not connect to DHT!\n" 4245msgid "Could not connect to DHT!\n"
4263msgstr "Kunde inte ansluta till gnunetd.\n" 4246msgstr "Kunde inte ansluta till gnunetd.\n"
@@ -4814,51 +4797,51 @@ msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
4814msgid "Failed to set default ego: %s\n" 4797msgid "Failed to set default ego: %s\n"
4815msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n" 4798msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
4816 4799
4817#: src/identity/gnunet-identity.c:462 4800#: src/identity/gnunet-identity.c:461
4818msgid "create ego NAME" 4801msgid "create ego NAME"
4819msgstr "" 4802msgstr ""
4820 4803
4821#: src/identity/gnunet-identity.c:467 4804#: src/identity/gnunet-identity.c:466
4822msgid "delete ego NAME " 4805msgid "delete ego NAME "
4823msgstr "" 4806msgstr ""
4824 4807
4825#: src/identity/gnunet-identity.c:473 4808#: src/identity/gnunet-identity.c:472
4826msgid "" 4809msgid ""
4827"set the private key for the identity to PRIVATE_KEY (use together with -C)" 4810"set the private key for the identity to PRIVATE_KEY (use together with -C)"
4828msgstr "" 4811msgstr ""
4829 4812
4830#: src/identity/gnunet-identity.c:478 4813#: src/identity/gnunet-identity.c:477
4831msgid "generate an EdDSA identity. (use together with -C) EXPERIMENTAL" 4814msgid "generate an EdDSA identity. (use together with -C) EXPERIMENTAL"
4832msgstr "" 4815msgstr ""
4833 4816
4834#: src/identity/gnunet-identity.c:482 4817#: src/identity/gnunet-identity.c:481
4835msgid "display all egos" 4818msgid "display all egos"
4836msgstr "" 4819msgstr ""
4837 4820
4838#: src/identity/gnunet-identity.c:486 4821#: src/identity/gnunet-identity.c:485
4839msgid "reduce output" 4822msgid "reduce output"
4840msgstr "" 4823msgstr ""
4841 4824
4842#: src/identity/gnunet-identity.c:493 4825#: src/identity/gnunet-identity.c:492
4843msgid "" 4826msgid ""
4844"set default identity to NAME for a subsystem SUBSYSTEM (use together with -" 4827"set default identity to NAME for a subsystem SUBSYSTEM (use together with -"
4845"s) or restrict results to NAME (use together with -d)" 4828"s) or restrict results to NAME (use together with -d)"
4846msgstr "" 4829msgstr ""
4847 4830
4848#: src/identity/gnunet-identity.c:497 4831#: src/identity/gnunet-identity.c:496
4849msgid "run in monitor mode egos" 4832msgid "run in monitor mode egos"
4850msgstr "" 4833msgstr ""
4851 4834
4852#: src/identity/gnunet-identity.c:501 4835#: src/identity/gnunet-identity.c:500
4853msgid "display private keys as well" 4836msgid "display private keys as well"
4854msgstr "" 4837msgstr ""
4855 4838
4856#: src/identity/gnunet-identity.c:508 4839#: src/identity/gnunet-identity.c:507
4857msgid "" 4840msgid ""
4858"set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)" 4841"set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)"
4859msgstr "" 4842msgstr ""
4860 4843
4861#: src/identity/gnunet-identity.c:523 4844#: src/identity/gnunet-identity.c:522
4862msgid "Maintain egos" 4845msgid "Maintain egos"
4863msgstr "" 4846msgstr ""
4864 4847
@@ -4909,12 +4892,12 @@ msgstr "Kunde inte spara konfigurationsfil \"%s\":"
4909msgid "Failed to create directory `%s' for storing egos\n" 4892msgid "Failed to create directory `%s' for storing egos\n"
4910msgstr "Misslyckades att läsa kompislista från \"%s\"\n" 4893msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
4911 4894
4912#: src/identity/plugin_rest_identity.c:1385 4895#: src/identity/plugin_rest_identity.c:1401
4913#, fuzzy 4896#, fuzzy
4914msgid "Identity REST API initialized\n" 4897msgid "Identity REST API initialized\n"
4915msgstr " Anslutning misslyckades\n" 4898msgstr " Anslutning misslyckades\n"
4916 4899
4917#: src/json/json.c:139 4900#: src/json/json.c:120
4918#, fuzzy, c-format 4901#, fuzzy, c-format
4919msgid "Failed to parse JSON in option `%s': %s (%s)\n" 4902msgid "Failed to parse JSON in option `%s': %s (%s)\n"
4920msgstr "Misslyckades att läsa kompislista från \"%s\"\n" 4903msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
@@ -4973,11 +4956,11 @@ msgstr "ange prioritet för innehållet"
4973msgid "GNUnet zone manipulation tool" 4956msgid "GNUnet zone manipulation tool"
4974msgstr "GNUnet-konfiguration" 4957msgstr "GNUnet-konfiguration"
4975 4958
4976#: src/namecache/namecache_api.c:285 4959#: src/namecache/namecache_api.c:286
4977msgid "Namecache failed to cache block" 4960msgid "Namecache failed to cache block"
4978msgstr "" 4961msgstr ""
4979 4962
4980#: src/namecache/namecache_api.c:373 4963#: src/namecache/namecache_api.c:374
4981#, fuzzy 4964#, fuzzy
4982msgid "Error communicating with namecache service" 4965msgid "Error communicating with namecache service"
4983msgstr "Skriv ut information om GNUnets motparter." 4966msgstr "Skriv ut information om GNUnets motparter."
@@ -5017,6 +5000,115 @@ msgstr ""
5017msgid "Failed to setup database at `%s'\n" 5000msgid "Failed to setup database at `%s'\n"
5018msgstr "Fel vid %s:%d.\n" 5001msgstr "Fel vid %s:%d.\n"
5019 5002
5003#: src/namestore/gnunet-namestore-fcfsd.c:359
5004#, fuzzy
5005msgid "can not search the namestore"
5006msgstr "Misslyckades att ansluta till gnunetd.\n"
5007
5008#: src/namestore/gnunet-namestore-fcfsd.c:413
5009#: src/namestore/gnunet-namestore-fcfsd.c:554
5010#, fuzzy
5011msgid "unable to scan namestore"
5012msgstr "Misslyckades att ansluta till gnunetd.\n"
5013
5014#: src/namestore/gnunet-namestore-fcfsd.c:441
5015#, fuzzy, c-format
5016msgid "Failed to create record for `%s': %s\n"
5017msgstr "Kunde inte tolka konfigurationsfil \"%s\".\n"
5018
5019#: src/namestore/gnunet-namestore-fcfsd.c:453
5020#, fuzzy
5021msgid "no errors"
5022msgstr "Okänt fel"
5023
5024#: src/namestore/gnunet-namestore-fcfsd.c:489
5025#, fuzzy, c-format
5026msgid "The requested key `%s' exists as `%s'\n"
5027msgstr "Skapade post \"%s\" i namnrymd \"%s\"\n"
5028
5029#: src/namestore/gnunet-namestore-fcfsd.c:496
5030msgid "key exists"
5031msgstr ""
5032
5033#: src/namestore/gnunet-namestore-fcfsd.c:513
5034#, fuzzy
5035msgid "Error creating record data\n"
5036msgstr "=\tFel vid läsning av katalog.\n"
5037
5038#: src/namestore/gnunet-namestore-fcfsd.c:517
5039#, fuzzy
5040msgid "unable to store record"
5041msgstr "Misslyckades att starta samling.\n"
5042
5043#: src/namestore/gnunet-namestore-fcfsd.c:588
5044#, c-format
5045msgid "Requested name `%s' exists with `%u' records\n"
5046msgstr ""
5047
5048#: src/namestore/gnunet-namestore-fcfsd.c:594
5049msgid "name exists\n"
5050msgstr ""
5051
5052#: src/namestore/gnunet-namestore-fcfsd.c:780
5053msgid "unable to process submitted data"
5054msgstr ""
5055
5056#: src/namestore/gnunet-namestore-fcfsd.c:787
5057msgid "the submitted data is invalid"
5058msgstr ""
5059
5060#: src/namestore/gnunet-namestore-fcfsd.c:806
5061#, fuzzy
5062msgid "invalid parameters"
5063msgstr "Ogiltigt argument: \"%s\"\n"
5064
5065#: src/namestore/gnunet-namestore-fcfsd.c:823
5066#, fuzzy
5067msgid "invalid name"
5068msgstr "Ogiltigt argument: \"%s\"\n"
5069
5070#: src/namestore/gnunet-namestore-fcfsd.c:834
5071#, fuzzy, c-format
5072msgid "Unable to parse key %s\n"
5073msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
5074
5075#: src/namestore/gnunet-namestore-fcfsd.c:838
5076#, fuzzy
5077msgid "unable to parse key"
5078msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
5079
5080#: src/namestore/gnunet-namestore-fcfsd.c:949
5081msgid "No ego configured for `fcfsd` subsystem\n"
5082msgstr ""
5083
5084#: src/namestore/gnunet-namestore-fcfsd.c:974
5085#, fuzzy
5086msgid "Failed to start HTTP server\n"
5087msgstr "Misslyckades att starta samling.\n"
5088
5089#: src/namestore/gnunet-namestore-fcfsd.c:1058
5090#, fuzzy
5091msgid "No port specified, using default value\n"
5092msgstr "Konfigurationsfil \"%s\" skapad.\n"
5093
5094#: src/namestore/gnunet-namestore-fcfsd.c:1076
5095#, fuzzy
5096msgid "Failed to connect to identity\n"
5097msgstr "Misslyckades att ansluta till gnunetd.\n"
5098
5099#: src/namestore/gnunet-namestore-fcfsd.c:1100
5100#, fuzzy
5101msgid "Unable to set up the daemon\n"
5102msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
5103
5104#: src/namestore/gnunet-namestore-fcfsd.c:1123
5105msgid "name of the zone managed by FCFSD"
5106msgstr ""
5107
5108#: src/namestore/gnunet-namestore-fcfsd.c:1132
5109msgid "GNU Name System First-Come-First-Served name registration service"
5110msgstr ""
5111
5020#: src/namestore/gnunet-namestore.c:334 5112#: src/namestore/gnunet-namestore.c:334
5021#, fuzzy, c-format 5113#, fuzzy, c-format
5022msgid "Adding record failed: %s\n" 5114msgid "Adding record failed: %s\n"
@@ -5264,85 +5356,16 @@ msgstr ""
5264msgid "name of the ego controlling the zone" 5356msgid "name of the ego controlling the zone"
5265msgstr "Visa värde av alternativet" 5357msgstr "Visa värde av alternativet"
5266 5358
5267#: src/namestore/gnunet-namestore-fcfsd.c:552
5268#, fuzzy, c-format
5269msgid "Unsupported form value `%s'\n"
5270msgstr "Kommando \"%s\" stöds ej. Avbryter.\n"
5271
5272#: src/namestore/gnunet-namestore-fcfsd.c:579
5273#, fuzzy, c-format
5274msgid "Failed to create record for domain `%s': %s\n"
5275msgstr "Kunde inte tolka konfigurationsfil \"%s\".\n"
5276
5277#: src/namestore/gnunet-namestore-fcfsd.c:600
5278msgid "Error when mapping zone to name\n"
5279msgstr ""
5280
5281#: src/namestore/gnunet-namestore-fcfsd.c:633
5282#, c-format
5283msgid "Found existing name `%s' for the given key\n"
5284msgstr ""
5285
5286#: src/namestore/gnunet-namestore-fcfsd.c:646
5287#, fuzzy
5288msgid "Error creating record data.\n"
5289msgstr "=\tFel vid läsning av katalog.\n"
5290
5291#: src/namestore/gnunet-namestore-fcfsd.c:707
5292#, c-format
5293msgid "Found %u existing records for domain `%s'\n"
5294msgstr ""
5295
5296#: src/namestore/gnunet-namestore-fcfsd.c:796
5297#, fuzzy, c-format
5298msgid "Failed to create page for `%s'\n"
5299msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
5300
5301#: src/namestore/gnunet-namestore-fcfsd.c:815
5302#, fuzzy, c-format
5303msgid "Failed to setup post processor for `%s'\n"
5304msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
5305
5306#: src/namestore/gnunet-namestore-fcfsd.c:850
5307msgid "Domain name must not contain `.'\n"
5308msgstr ""
5309
5310#: src/namestore/gnunet-namestore-fcfsd.c:859
5311msgid "Domain name must not contain `+'\n"
5312msgstr ""
5313
5314#: src/namestore/gnunet-namestore-fcfsd.c:1094
5315msgid "No ego configured for `fcfsd` subsystem\n"
5316msgstr ""
5317
5318#: src/namestore/gnunet-namestore-fcfsd.c:1125
5319#, fuzzy
5320msgid "Failed to start HTTP server\n"
5321msgstr "Misslyckades att starta samling.\n"
5322
5323#: src/namestore/gnunet-namestore-fcfsd.c:1173
5324#, fuzzy
5325msgid "Failed to connect to identity\n"
5326msgstr "Misslyckades att ansluta till gnunetd.\n"
5327
5328#: src/namestore/gnunet-namestore-fcfsd.c:1200
5329msgid "name of the zone that is to be managed by FCFSD"
5330msgstr ""
5331
5332#: src/namestore/gnunet-namestore-fcfsd.c:1220
5333msgid "GNU Name System First Come First Serve name registration service"
5334msgstr ""
5335
5336#: src/namestore/gnunet-service-namestore.c:871 5359#: src/namestore/gnunet-service-namestore.c:871
5337#, fuzzy, c-format 5360#, fuzzy, c-format
5338msgid "Failed to replicate block in namecache: %s\n" 5361msgid "Failed to replicate block in namecache: %s\n"
5339msgstr "Misslyckades att läsa kompislista från \"%s\"\n" 5362msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
5340 5363
5341#: src/namestore/gnunet-zoneimport.c:1848 5364#: src/namestore/gnunet-zoneimport.c:1847
5342msgid "size to use for the main hash map" 5365msgid "size to use for the main hash map"
5343msgstr "" 5366msgstr ""
5344 5367
5345#: src/namestore/gnunet-zoneimport.c:1854 5368#: src/namestore/gnunet-zoneimport.c:1853
5346msgid "minimum expiration time we assume for imported records" 5369msgid "minimum expiration time we assume for imported records"
5347msgstr "" 5370msgstr ""
5348 5371
@@ -5364,7 +5387,7 @@ msgstr ""
5364msgid "Flat file database running\n" 5387msgid "Flat file database running\n"
5365msgstr "" 5388msgstr ""
5366 5389
5367#: src/namestore/plugin_rest_namestore.c:1105 5390#: src/namestore/plugin_rest_namestore.c:1111
5368#, fuzzy 5391#, fuzzy
5369msgid "Namestore REST API initialized\n" 5392msgid "Namestore REST API initialized\n"
5370msgstr " Anslutning misslyckades\n" 5393msgstr " Anslutning misslyckades\n"
@@ -5655,11 +5678,6 @@ msgstr ""
5655msgid "`upnpc' command not found\n" 5678msgid "`upnpc' command not found\n"
5656msgstr "" 5679msgstr ""
5657 5680
5658#: src/nse/gnunet-nse.c:124
5659#, fuzzy
5660msgid "Show network size estimates from NSE service."
5661msgstr "# byte mottogs via TCP"
5662
5663#: src/nse/gnunet-nse-profiler.c:857 5681#: src/nse/gnunet-nse-profiler.c:857
5664#, fuzzy 5682#, fuzzy
5665msgid "limit to the number of connections to NSE services, 0 for none" 5683msgid "limit to the number of connections to NSE services, 0 for none"
@@ -5686,66 +5704,16 @@ msgstr ""
5686msgid "Measure quality and performance of the NSE service." 5704msgid "Measure quality and performance of the NSE service."
5687msgstr "Kan inte tillgå tjänsten" 5705msgstr "Kan inte tillgå tjänsten"
5688 5706
5707#: src/nse/gnunet-nse.c:124
5708#, fuzzy
5709msgid "Show network size estimates from NSE service."
5710msgstr "# byte mottogs via TCP"
5711
5689#: src/nse/gnunet-service-nse.c:1450 5712#: src/nse/gnunet-service-nse.c:1450
5690#: src/revocation/gnunet-service-revocation.c:883 src/util/gnunet-scrypt.c:260 5713#: src/revocation/gnunet-service-revocation.c:883 src/util/gnunet-scrypt.c:260
5691msgid "Value is too large.\n" 5714msgid "Value is too large.\n"
5692msgstr "" 5715msgstr ""
5693 5716
5694#: src/peerinfo/gnunet-service-peerinfo.c:175
5695#, fuzzy, c-format
5696msgid "Removing expired address of transport `%s'\n"
5697msgstr "Tillgängliga transport(er): %s\n"
5698
5699#: src/peerinfo/gnunet-service-peerinfo.c:306
5700#, fuzzy, c-format
5701msgid "Failed to parse HELLO in file `%s': %s\n"
5702msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
5703
5704#: src/peerinfo/gnunet-service-peerinfo.c:323
5705#: src/peerinfo/gnunet-service-peerinfo.c:348
5706#, fuzzy, c-format
5707msgid "Failed to parse HELLO in file `%s'\n"
5708msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
5709
5710#: src/peerinfo/gnunet-service-peerinfo.c:426
5711msgid "# peers known"
5712msgstr ""
5713
5714#: src/peerinfo/gnunet-service-peerinfo.c:468
5715#, c-format
5716msgid ""
5717"File `%s' in directory `%s' does not match naming convention. Removed.\n"
5718msgstr ""
5719
5720#: src/peerinfo/gnunet-service-peerinfo.c:624
5721#, fuzzy, c-format
5722msgid "Scanning directory `%s'\n"
5723msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
5724
5725#: src/peerinfo/gnunet-service-peerinfo.c:631
5726#, c-format
5727msgid "Still no peers found in `%s'!\n"
5728msgstr ""
5729
5730#: src/peerinfo/gnunet-service-peerinfo.c:1027
5731#, fuzzy, c-format
5732msgid "Cleaning up directory `%s'\n"
5733msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
5734
5735#: src/peerinfo/gnunet-service-peerinfo.c:1322
5736#, c-format
5737msgid "Importing HELLOs from `%s'\n"
5738msgstr ""
5739
5740#: src/peerinfo/gnunet-service-peerinfo.c:1335
5741msgid "Skipping import of included HELLOs\n"
5742msgstr ""
5743
5744#: src/peerinfo/peerinfo_api.c:217
5745#, fuzzy
5746msgid "Failed to receive response from `PEERINFO' service."
5747msgstr "Misslyckades att ta emot svar till \"%s\" meddelande från gnunetd\n"
5748
5749#: src/peerinfo-tool/gnunet-peerinfo.c:237 5717#: src/peerinfo-tool/gnunet-peerinfo.c:237
5750#, fuzzy, c-format 5718#, fuzzy, c-format
5751msgid "%sPeer `%s'\n" 5719msgid "%sPeer `%s'\n"
@@ -5842,6 +5810,61 @@ msgstr "Kunde inte slå upp \"%s\": %s\n"
5842msgid "Peerinfo REST API initialized\n" 5810msgid "Peerinfo REST API initialized\n"
5843msgstr " Anslutning misslyckades\n" 5811msgstr " Anslutning misslyckades\n"
5844 5812
5813#: src/peerinfo/gnunet-service-peerinfo.c:175
5814#, fuzzy, c-format
5815msgid "Removing expired address of transport `%s'\n"
5816msgstr "Tillgängliga transport(er): %s\n"
5817
5818#: src/peerinfo/gnunet-service-peerinfo.c:306
5819#, fuzzy, c-format
5820msgid "Failed to parse HELLO in file `%s': %s\n"
5821msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
5822
5823#: src/peerinfo/gnunet-service-peerinfo.c:323
5824#: src/peerinfo/gnunet-service-peerinfo.c:348
5825#, fuzzy, c-format
5826msgid "Failed to parse HELLO in file `%s'\n"
5827msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
5828
5829#: src/peerinfo/gnunet-service-peerinfo.c:426
5830msgid "# peers known"
5831msgstr ""
5832
5833#: src/peerinfo/gnunet-service-peerinfo.c:468
5834#, c-format
5835msgid ""
5836"File `%s' in directory `%s' does not match naming convention. Removed.\n"
5837msgstr ""
5838
5839#: src/peerinfo/gnunet-service-peerinfo.c:624
5840#, fuzzy, c-format
5841msgid "Scanning directory `%s'\n"
5842msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
5843
5844#: src/peerinfo/gnunet-service-peerinfo.c:631
5845#, c-format
5846msgid "Still no peers found in `%s'!\n"
5847msgstr ""
5848
5849#: src/peerinfo/gnunet-service-peerinfo.c:1027
5850#, fuzzy, c-format
5851msgid "Cleaning up directory `%s'\n"
5852msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
5853
5854#: src/peerinfo/gnunet-service-peerinfo.c:1322
5855#, c-format
5856msgid "Importing HELLOs from `%s'\n"
5857msgstr ""
5858
5859#: src/peerinfo/gnunet-service-peerinfo.c:1335
5860msgid "Skipping import of included HELLOs\n"
5861msgstr ""
5862
5863#: src/peerinfo/peerinfo_api.c:217
5864#, fuzzy
5865msgid "Failed to receive response from `PEERINFO' service."
5866msgstr "Misslyckades att ta emot svar till \"%s\" meddelande från gnunetd\n"
5867
5845#: src/peerstore/gnunet-peerstore.c:92 5868#: src/peerstore/gnunet-peerstore.c:92
5846msgid "peerstore" 5869msgid "peerstore"
5847msgstr "" 5870msgstr ""
@@ -6037,12 +6060,12 @@ msgstr ""
6037msgid "re:claimID command line tool" 6060msgid "re:claimID command line tool"
6038msgstr "" 6061msgstr ""
6039 6062
6040#: src/reclaim/plugin_rest_openid_connect.c:2788 6063#: src/reclaim/plugin_rest_openid_connect.c:2793
6041#, fuzzy 6064#, fuzzy
6042msgid "OpenID Connect REST API initialized\n" 6065msgid "OpenID Connect REST API initialized\n"
6043msgstr " Anslutning misslyckades\n" 6066msgstr " Anslutning misslyckades\n"
6044 6067
6045#: src/reclaim/plugin_rest_reclaim.c:1521 6068#: src/reclaim/plugin_rest_pabc.c:637 src/reclaim/plugin_rest_reclaim.c:1520
6046#, fuzzy 6069#, fuzzy
6047msgid "Identity Provider REST API initialized\n" 6070msgid "Identity Provider REST API initialized\n"
6048msgstr " Anslutning misslyckades\n" 6071msgstr " Anslutning misslyckades\n"
@@ -6061,61 +6084,61 @@ msgstr "GNUnet-konfiguration"
6061msgid "Daemon to announce regular expressions for the peer using cadet." 6084msgid "Daemon to announce regular expressions for the peer using cadet."
6062msgstr "" 6085msgstr ""
6063 6086
6064#: src/regex/gnunet-regex-profiler.c:1390 6087#: src/regex/gnunet-regex-profiler.c:1392
6065#, fuzzy 6088#, fuzzy
6066msgid "No configuration file given. Exiting\n" 6089msgid "No configuration file given. Exiting\n"
6067msgstr "använd konfigurationsfil FILNAMN" 6090msgstr "använd konfigurationsfil FILNAMN"
6068 6091
6069#: src/regex/gnunet-regex-profiler.c:1432 6092#: src/regex/gnunet-regex-profiler.c:1434
6070#: src/regex/gnunet-regex-simulation-profiler.c:631 6093#: src/regex/gnunet-regex-simulation-profiler.c:631
6071#, c-format 6094#, c-format
6072msgid "No policy directory specified on command line. Exiting.\n" 6095msgid "No policy directory specified on command line. Exiting.\n"
6073msgstr "" 6096msgstr ""
6074 6097
6075#: src/regex/gnunet-regex-profiler.c:1438 6098#: src/regex/gnunet-regex-profiler.c:1440
6076#: src/regex/gnunet-regex-simulation-profiler.c:639 6099#: src/regex/gnunet-regex-simulation-profiler.c:639
6077#, c-format 6100#, c-format
6078msgid "Specified policies directory does not exist. Exiting.\n" 6101msgid "Specified policies directory does not exist. Exiting.\n"
6079msgstr "" 6102msgstr ""
6080 6103
6081#: src/regex/gnunet-regex-profiler.c:1446 6104#: src/regex/gnunet-regex-profiler.c:1448
6082#, fuzzy, c-format 6105#, fuzzy, c-format
6083msgid "No files found in `%s'\n" 6106msgid "No files found in `%s'\n"
6084msgstr "%d filer hittades i katalog.\n" 6107msgstr "%d filer hittades i katalog.\n"
6085 6108
6086#: src/regex/gnunet-regex-profiler.c:1455 6109#: src/regex/gnunet-regex-profiler.c:1457
6087msgid "No search strings file given. Exiting.\n" 6110msgid "No search strings file given. Exiting.\n"
6088msgstr "" 6111msgstr ""
6089 6112
6090#: src/regex/gnunet-regex-profiler.c:1475 6113#: src/regex/gnunet-regex-profiler.c:1477
6091#, fuzzy 6114#, fuzzy
6092msgid "Error loading search strings. Exiting.\n" 6115msgid "Error loading search strings. Exiting.\n"
6093msgstr "Fel vid lämning av DHT.\n" 6116msgstr "Fel vid lämning av DHT.\n"
6094 6117
6095#: src/regex/gnunet-regex-profiler.c:1563 6118#: src/regex/gnunet-regex-profiler.c:1565
6096#, fuzzy 6119#, fuzzy
6097msgid "name of the file for writing statistics" 6120msgid "name of the file for writing statistics"
6098msgstr "Visa värde av alternativet" 6121msgstr "Visa värde av alternativet"
6099 6122
6100#: src/regex/gnunet-regex-profiler.c:1570 6123#: src/regex/gnunet-regex-profiler.c:1572
6101msgid "wait TIMEOUT before ending the experiment" 6124msgid "wait TIMEOUT before ending the experiment"
6102msgstr "" 6125msgstr ""
6103 6126
6104#: src/regex/gnunet-regex-profiler.c:1576 6127#: src/regex/gnunet-regex-profiler.c:1578
6105msgid "directory with policy files" 6128msgid "directory with policy files"
6106msgstr "" 6129msgstr ""
6107 6130
6108#: src/regex/gnunet-regex-profiler.c:1584 6131#: src/regex/gnunet-regex-profiler.c:1586
6109#, fuzzy 6132#, fuzzy
6110msgid "name of file with input strings" 6133msgid "name of file with input strings"
6111msgstr "Visa värde av alternativet" 6134msgstr "Visa värde av alternativet"
6112 6135
6113#: src/regex/gnunet-regex-profiler.c:1591 6136#: src/regex/gnunet-regex-profiler.c:1593
6114#, fuzzy 6137#, fuzzy
6115msgid "name of file with hosts' names" 6138msgid "name of file with hosts' names"
6116msgstr "Visa värde av alternativet" 6139msgstr "Visa värde av alternativet"
6117 6140
6118#: src/regex/gnunet-regex-profiler.c:1604 6141#: src/regex/gnunet-regex-profiler.c:1606
6119msgid "Profiler for regex" 6142msgid "Profiler for regex"
6120msgstr "" 6143msgstr ""
6121 6144
@@ -6142,12 +6165,12 @@ msgstr "\"%s\" är inte en fil.\n"
6142msgid "Search string `%s' is too long!\n" 6165msgid "Search string `%s' is too long!\n"
6143msgstr "\"%s\" är inte en fil.\n" 6166msgstr "\"%s\" är inte en fil.\n"
6144 6167
6145#: src/rest/gnunet-rest-server.c:1266 6168#: src/rest/gnunet-rest-server.c:1267
6146#, fuzzy 6169#, fuzzy
6147msgid "GNUnet REST server" 6170msgid "GNUnet REST server"
6148msgstr "Spåra GNUnets nätverkstopologi." 6171msgstr "Spåra GNUnets nätverkstopologi."
6149 6172
6150#: src/rest/plugin_rest_config.c:427 6173#: src/rest/plugin_rest_config.c:429
6151#, fuzzy 6174#, fuzzy
6152msgid "CONFIG REST API initialized\n" 6175msgid "CONFIG REST API initialized\n"
6153msgstr " Anslutning misslyckades\n" 6176msgstr " Anslutning misslyckades\n"
@@ -6214,72 +6237,77 @@ msgstr ""
6214msgid "Ego `%s' not found.\n" 6237msgid "Ego `%s' not found.\n"
6215msgstr "\"%s\" misslyckades: tabell hittades inte!\n" 6238msgstr "\"%s\" misslyckades: tabell hittades inte!\n"
6216 6239
6217#: src/revocation/gnunet-revocation.c:351 6240#: src/revocation/gnunet-revocation.c:350
6241#, fuzzy, c-format
6242msgid "Error: Key is invalid\n"
6243msgstr "Formatet på pseudonym \"%s\" är ogiltig.\n"
6244
6245#: src/revocation/gnunet-revocation.c:357
6218#, c-format 6246#, c-format
6219msgid "Error: revocation certificate in `%s' is not for `%s'\n" 6247msgid "Error: revocation certificate in `%s' is not for `%s'\n"
6220msgstr "" 6248msgstr ""
6221 6249
6222#: src/revocation/gnunet-revocation.c:361 6250#: src/revocation/gnunet-revocation.c:367
6223msgid "Revocation certificate ready\n" 6251msgid "Revocation certificate ready\n"
6224msgstr "" 6252msgstr ""
6225 6253
6226#: src/revocation/gnunet-revocation.c:373 6254#: src/revocation/gnunet-revocation.c:379
6227msgid "Continuing calculation where left off...\n" 6255msgid "Continuing calculation where left off...\n"
6228msgstr "" 6256msgstr ""
6229 6257
6230#: src/revocation/gnunet-revocation.c:380 6258#: src/revocation/gnunet-revocation.c:386
6231msgid "Revocation certificate not ready, calculating proof of work\n" 6259msgid "Revocation certificate not ready, calculating proof of work\n"
6232msgstr "" 6260msgstr ""
6233 6261
6234#: src/revocation/gnunet-revocation.c:418 6262#: src/revocation/gnunet-revocation.c:424
6235#, fuzzy, c-format 6263#, fuzzy, c-format
6236msgid "Public key `%s' malformed\n" 6264msgid "Public key `%s' malformed\n"
6237msgstr "Ogiltigt argument: \"%s\"\n" 6265msgstr "Ogiltigt argument: \"%s\"\n"
6238 6266
6239#: src/revocation/gnunet-revocation.c:428 6267#: src/revocation/gnunet-revocation.c:434
6240msgid "" 6268msgid ""
6241"Testing and revoking at the same time is not allowed, only executing test.\n" 6269"Testing and revoking at the same time is not allowed, only executing test.\n"
6242msgstr "" 6270msgstr ""
6243 6271
6244#: src/revocation/gnunet-revocation.c:458 6272#: src/revocation/gnunet-revocation.c:464
6245#, fuzzy 6273#, fuzzy
6246msgid "No filename to store revocation certificate given.\n" 6274msgid "No filename to store revocation certificate given.\n"
6247msgstr "Misslyckades att läsa kompislista från \"%s\"\n" 6275msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
6248 6276
6249#: src/revocation/gnunet-revocation.c:475 6277#: src/revocation/gnunet-revocation.c:481
6250#, fuzzy, c-format 6278#, fuzzy, c-format
6251msgid "Failed to read revocation certificate from `%s'\n" 6279msgid "Failed to read revocation certificate from `%s'\n"
6252msgstr "Misslyckades att läsa kompislista från \"%s\"\n" 6280msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
6253 6281
6254#: src/revocation/gnunet-revocation.c:483 6282#: src/revocation/gnunet-revocation.c:489
6255#, fuzzy, c-format 6283#, fuzzy, c-format
6256msgid "Revocation certificate corrupted in `%s'\n" 6284msgid "Revocation certificate corrupted in `%s'\n"
6257msgstr "Misslyckades att läsa kompislista från \"%s\"\n" 6285msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
6258 6286
6259#: src/revocation/gnunet-revocation.c:505 6287#: src/revocation/gnunet-revocation.c:511
6260#, fuzzy 6288#, fuzzy
6261msgid "No action specified. Nothing to do.\n" 6289msgid "No action specified. Nothing to do.\n"
6262msgstr "Inget tabellnamn angivet, använder \"%s\".\n" 6290msgstr "Inget tabellnamn angivet, använder \"%s\".\n"
6263 6291
6264#: src/revocation/gnunet-revocation.c:524 6292#: src/revocation/gnunet-revocation.c:530
6265msgid "use NAME for the name of the revocation file" 6293msgid "use NAME for the name of the revocation file"
6266msgstr "" 6294msgstr ""
6267 6295
6268#: src/revocation/gnunet-revocation.c:532 6296#: src/revocation/gnunet-revocation.c:538
6269msgid "" 6297msgid ""
6270"revoke the private key associated for the the private key associated with " 6298"revoke the private key associated for the the private key associated with "
6271"the ego NAME " 6299"the ego NAME "
6272msgstr "" 6300msgstr ""
6273 6301
6274#: src/revocation/gnunet-revocation.c:539 6302#: src/revocation/gnunet-revocation.c:545
6275msgid "actually perform revocation, otherwise we just do the precomputation" 6303msgid "actually perform revocation, otherwise we just do the precomputation"
6276msgstr "" 6304msgstr ""
6277 6305
6278#: src/revocation/gnunet-revocation.c:546 6306#: src/revocation/gnunet-revocation.c:552
6279msgid "test if the public key KEY has been revoked" 6307msgid "test if the public key KEY has been revoked"
6280msgstr "" 6308msgstr ""
6281 6309
6282#: src/revocation/gnunet-revocation.c:552 6310#: src/revocation/gnunet-revocation.c:558
6283#, fuzzy 6311#, fuzzy
6284msgid "number of epochs to calculate for" 6312msgid "number of epochs to calculate for"
6285msgstr "antal iterationer" 6313msgstr "antal iterationer"
@@ -6318,18 +6346,6 @@ msgstr ""
6318msgid "Could not open revocation database file!" 6346msgid "Could not open revocation database file!"
6319msgstr "Kunde inte ansluta till gnunetd.\n" 6347msgstr "Kunde inte ansluta till gnunetd.\n"
6320 6348
6321#: src/rps/gnunet-rps.c:270
6322msgid "Seed a PeerID"
6323msgstr ""
6324
6325#: src/rps/gnunet-rps.c:275
6326msgid "Get updates of view (0 for infinite updates)"
6327msgstr ""
6328
6329#: src/rps/gnunet-rps.c:279
6330msgid "Get peers from biased stream"
6331msgstr ""
6332
6333#: src/rps/gnunet-rps-profiler.c:3142 6349#: src/rps/gnunet-rps-profiler.c:3142
6334msgid "duration of the profiling" 6350msgid "duration of the profiling"
6335msgstr "" 6351msgstr ""
@@ -6349,6 +6365,18 @@ msgstr "antal iterationer"
6349msgid "Measure quality and performance of the RPS service." 6365msgid "Measure quality and performance of the RPS service."
6350msgstr "Kan inte tillgå tjänsten" 6366msgstr "Kan inte tillgå tjänsten"
6351 6367
6368#: src/rps/gnunet-rps.c:270
6369msgid "Seed a PeerID"
6370msgstr ""
6371
6372#: src/rps/gnunet-rps.c:275
6373msgid "Get updates of view (0 for infinite updates)"
6374msgstr ""
6375
6376#: src/rps/gnunet-rps.c:279
6377msgid "Get peers from biased stream"
6378msgstr ""
6379
6352#: src/scalarproduct/gnunet-scalarproduct.c:229 6380#: src/scalarproduct/gnunet-scalarproduct.c:229
6353#, fuzzy 6381#, fuzzy
6354msgid "You must specify at least one message ID to check!\n" 6382msgid "You must specify at least one message ID to check!\n"
@@ -6404,15 +6432,15 @@ msgstr ""
6404msgid "Calculate the Vectorproduct with a GNUnet peer." 6432msgid "Calculate the Vectorproduct with a GNUnet peer."
6405msgstr "" 6433msgstr ""
6406 6434
6435#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118
6436#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1034
6407#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1358 6437#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1358
6408#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1355 6438#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1355
6409#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118
6410#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1063
6411#, fuzzy 6439#, fuzzy
6412msgid "Connect to CADET failed\n" 6440msgid "Connect to CADET failed\n"
6413msgstr " Anslutning misslyckades (fel?)\n" 6441msgstr " Anslutning misslyckades (fel?)\n"
6414 6442
6415#: src/scalarproduct/scalarproduct_api.c:189 6443#: src/scalarproduct/scalarproduct_api.c:184
6416msgid "Keys given to SCALARPRODUCT not unique!\n" 6444msgid "Keys given to SCALARPRODUCT not unique!\n"
6417msgstr "" 6445msgstr ""
6418 6446
@@ -6433,7 +6461,7 @@ msgid "also profile decryption"
6433msgstr "" 6461msgstr ""
6434 6462
6435#: src/set/gnunet-service-set.c:1916 src/seti/gnunet-service-seti.c:2467 6463#: src/set/gnunet-service-set.c:1916 src/seti/gnunet-service-seti.c:2467
6436#: src/setu/gnunet-service-setu.c:3832 6464#: src/setu/gnunet-service-setu.c:5389
6437#, fuzzy 6465#, fuzzy
6438msgid "Could not connect to CADET service\n" 6466msgid "Could not connect to CADET service\n"
6439msgstr "Kunde inte ansluta till gnunetd.\n" 6467msgstr "Kunde inte ansluta till gnunetd.\n"
@@ -6677,7 +6705,7 @@ msgid ""
6677"\t cap: the maximum number of links a node can have\n" 6705"\t cap: the maximum number of links a node can have\n"
6678"\t m: the number of links a node should have while joining the network\n" 6706"\t m: the number of links a node should have while joining the network\n"
6679"\t filename: the path of the file which contains topology information\n" 6707"\t filename: the path of the file which contains topology information\n"
6680"NOTE: the format of the above file is descibed here: https://www.gnunet.org/" 6708"NOTE: the format of the above file is described here: https://www.gnunet.org/"
6681"content/topology-file-format\n" 6709"content/topology-file-format\n"
6682msgstr "" 6710msgstr ""
6683 6711
@@ -6762,18 +6790,8 @@ msgstr ""
6762msgid "%.s Unknown result code." 6790msgid "%.s Unknown result code."
6763msgstr "" 6791msgstr ""
6764 6792
6765#: src/testbed/gnunet_testbed_mpi_spawn.c:119
6766#, fuzzy
6767msgid "Waiting for child to exit.\n"
6768msgstr "Väntar på att motparter ska ansluta (%u iterationer kvar)...\n"
6769
6770#: src/testbed/gnunet_testbed_mpi_spawn.c:242
6771#, fuzzy, c-format
6772msgid "Spawning process `%s'\n"
6773msgstr "Startade samling \"%s\".\n"
6774
6775#: src/testbed/gnunet-testbed-profiler.c:290 6793#: src/testbed/gnunet-testbed-profiler.c:290
6776msgid "tolerate COUNT number of continious timeout failures" 6794msgid "tolerate COUNT number of continuous timeout failures"
6777msgstr "" 6795msgstr ""
6778 6796
6779#: src/testbed/gnunet-testbed-profiler.c:295 6797#: src/testbed/gnunet-testbed-profiler.c:295
@@ -6783,6 +6801,16 @@ msgid ""
6783"signal is received" 6801"signal is received"
6784msgstr "" 6802msgstr ""
6785 6803
6804#: src/testbed/gnunet_testbed_mpi_spawn.c:119
6805#, fuzzy
6806msgid "Waiting for child to exit.\n"
6807msgstr "Väntar på att motparter ska ansluta (%u iterationer kvar)...\n"
6808
6809#: src/testbed/gnunet_testbed_mpi_spawn.c:242
6810#, fuzzy, c-format
6811msgid "Spawning process `%s'\n"
6812msgstr "Startade samling \"%s\".\n"
6813
6786#: src/testbed/testbed_api.c:399 6814#: src/testbed/testbed_api.c:399
6787#, fuzzy, c-format 6815#, fuzzy, c-format
6788msgid "Adding host %u failed with error: %s\n" 6816msgid "Adding host %u failed with error: %s\n"
@@ -7079,15 +7107,15 @@ msgstr "# krypterade PONG-meddelanden mottagna"
7079msgid "GNUnet topology control" 7107msgid "GNUnet topology control"
7080msgstr "" 7108msgstr ""
7081 7109
7082#: src/transport/gnunet-communicator-tcp.c:3331 7110#: src/transport/gnunet-communicator-tcp.c:3317
7083#: src/transport/gnunet-communicator-udp.c:3790 7111#: src/transport/gnunet-communicator-udp.c:3790
7084#: src/transport/gnunet-service-tng.c:10220 7112#: src/transport/gnunet-service-tng.c:10223
7085#: src/transport/gnunet-service-transport.c:2627 7113#: src/transport/gnunet-service-transport.c:2627
7086#, fuzzy 7114#, fuzzy
7087msgid "Transport service is lacking key configuration settings. Exiting.\n" 7115msgid "Transport service is lacking key configuration settings. Exiting.\n"
7088msgstr "GNUnet-konfiguration" 7116msgstr "GNUnet-konfiguration"
7089 7117
7090#: src/transport/gnunet-communicator-tcp.c:3668 7118#: src/transport/gnunet-communicator-tcp.c:3655
7091msgid "GNUnet TCP communicator" 7119msgid "GNUnet TCP communicator"
7092msgstr "" 7120msgstr ""
7093 7121
@@ -7116,10 +7144,6 @@ msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
7116msgid "GNUnet UNIX domain socket communicator" 7144msgid "GNUnet UNIX domain socket communicator"
7117msgstr "" 7145msgstr ""
7118 7146
7119#: src/transport/gnunet-service-transport_ats.c:137
7120msgid "# Addresses given to ATS"
7121msgstr ""
7122
7123#: src/transport/gnunet-service-transport.c:445 7147#: src/transport/gnunet-service-transport.c:445
7124msgid "# messages dropped due to slow client" 7148msgid "# messages dropped due to slow client"
7125msgstr "" 7149msgstr ""
@@ -7163,6 +7187,10 @@ msgstr "Motpart \"%s\" med pålitlighet %8u och adress \"%s\"\n"
7163msgid "Adding blacklisting entry for peer `%s':`%s'\n" 7187msgid "Adding blacklisting entry for peer `%s':`%s'\n"
7164msgstr "" 7188msgstr ""
7165 7189
7190#: src/transport/gnunet-service-transport_ats.c:137
7191msgid "# Addresses given to ATS"
7192msgstr ""
7193
7166#: src/transport/gnunet-service-transport_hello.c:195 7194#: src/transport/gnunet-service-transport_hello.c:195
7167msgid "# refreshed my HELLO" 7195msgid "# refreshed my HELLO"
7168msgstr "" 7196msgstr ""
@@ -7499,6 +7527,46 @@ msgstr ""
7499msgid "# HELLOs given to peerinfo" 7527msgid "# HELLOs given to peerinfo"
7500msgstr "Meddelande mottaget från klient är ogiltig.\n" 7528msgstr "Meddelande mottaget från klient är ogiltig.\n"
7501 7529
7530#: src/transport/gnunet-transport-profiler.c:220
7531#, c-format
7532msgid "%llu B in %llu ms == %.2f KB/s!\n"
7533msgstr ""
7534
7535#: src/transport/gnunet-transport-profiler.c:577
7536msgid "send data to peer"
7537msgstr ""
7538
7539#: src/transport/gnunet-transport-profiler.c:581
7540#, fuzzy
7541msgid "receive data from peer"
7542msgstr "# byte mottagna av typen %d"
7543
7544#: src/transport/gnunet-transport-profiler.c:586
7545#, fuzzy
7546msgid "iterations"
7547msgstr "Visa alla alternativ"
7548
7549#: src/transport/gnunet-transport-profiler.c:591
7550#, fuzzy
7551msgid "number of messages to send"
7552msgstr "antal meddelanden att använda per iteration"
7553
7554#: src/transport/gnunet-transport-profiler.c:596
7555#, fuzzy
7556msgid "message size to use"
7557msgstr "meddelandestorlek"
7558
7559#: src/transport/gnunet-transport-profiler.c:601
7560#: src/transport/gnunet-transport.c:1404
7561msgid "peer identity"
7562msgstr ""
7563
7564#: src/transport/gnunet-transport-profiler.c:614
7565#: src/transport/gnunet-transport.c:1426
7566#, fuzzy
7567msgid "Direct access to transport service."
7568msgstr "Misslyckades att ansluta till gnunetd.\n"
7569
7502#: src/transport/gnunet-transport.c:406 7570#: src/transport/gnunet-transport.c:406
7503#, fuzzy, c-format 7571#, fuzzy, c-format
7504msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n" 7572msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n"
@@ -7638,11 +7706,6 @@ msgstr "Skriv ut information om GNUnets motparter."
7638msgid "do not resolve hostnames" 7706msgid "do not resolve hostnames"
7639msgstr "Misslyckades att läsa kompislista från \"%s\"\n" 7707msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
7640 7708
7641#: src/transport/gnunet-transport.c:1404
7642#: src/transport/gnunet-transport-profiler.c:601
7643msgid "peer identity"
7644msgstr ""
7645
7646#: src/transport/gnunet-transport.c:1408 7709#: src/transport/gnunet-transport.c:1408
7647msgid "monitor plugin sessions" 7710msgid "monitor plugin sessions"
7648msgstr "" 7711msgstr ""
@@ -7651,41 +7714,6 @@ msgstr ""
7651msgid "send data for benchmarking to the other peer (until CTRL-C)" 7714msgid "send data for benchmarking to the other peer (until CTRL-C)"
7652msgstr "" 7715msgstr ""
7653 7716
7654#: src/transport/gnunet-transport.c:1426
7655#: src/transport/gnunet-transport-profiler.c:614
7656#, fuzzy
7657msgid "Direct access to transport service."
7658msgstr "Misslyckades att ansluta till gnunetd.\n"
7659
7660#: src/transport/gnunet-transport-profiler.c:220
7661#, c-format
7662msgid "%llu B in %llu ms == %.2f KB/s!\n"
7663msgstr ""
7664
7665#: src/transport/gnunet-transport-profiler.c:577
7666msgid "send data to peer"
7667msgstr ""
7668
7669#: src/transport/gnunet-transport-profiler.c:581
7670#, fuzzy
7671msgid "receive data from peer"
7672msgstr "# byte mottagna av typen %d"
7673
7674#: src/transport/gnunet-transport-profiler.c:586
7675#, fuzzy
7676msgid "iterations"
7677msgstr "Visa alla alternativ"
7678
7679#: src/transport/gnunet-transport-profiler.c:591
7680#, fuzzy
7681msgid "number of messages to send"
7682msgstr "antal meddelanden att använda per iteration"
7683
7684#: src/transport/gnunet-transport-profiler.c:596
7685#, fuzzy
7686msgid "message size to use"
7687msgstr "meddelandestorlek"
7688
7689#: src/transport/plugin_transport_http_client.c:1488 7717#: src/transport/plugin_transport_http_client.c:1488
7690#: src/transport/plugin_transport_http_server.c:2331 7718#: src/transport/plugin_transport_http_server.c:2331
7691#: src/transport/plugin_transport_http_server.c:3562 7719#: src/transport/plugin_transport_http_server.c:3562
@@ -7973,21 +8001,6 @@ msgstr ""
7973msgid "TCP transport advertises itself as being on port %llu\n" 8001msgid "TCP transport advertises itself as being on port %llu\n"
7974msgstr "" 8002msgstr ""
7975 8003
7976#: src/transport/plugin_transport_udp_broadcasting.c:169
7977#, fuzzy
7978msgid "# Multicast HELLO beacons received via UDP"
7979msgstr "# krypterade PONG-meddelanden mottagna"
7980
7981#: src/transport/plugin_transport_udp_broadcasting.c:553
7982msgid ""
7983"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n"
7984msgstr ""
7985
7986#: src/transport/plugin_transport_udp_broadcasting.c:571
7987#, c-format
7988msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n"
7989msgstr ""
7990
7991#: src/transport/plugin_transport_udp.c:3170 8004#: src/transport/plugin_transport_udp.c:3170
7992#, c-format 8005#, c-format
7993msgid "" 8006msgid ""
@@ -8036,6 +8049,21 @@ msgstr "\"%s\" är inte tillgänglig."
8036msgid "Failed to create UDP network sockets\n" 8049msgid "Failed to create UDP network sockets\n"
8037msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n" 8050msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
8038 8051
8052#: src/transport/plugin_transport_udp_broadcasting.c:169
8053#, fuzzy
8054msgid "# Multicast HELLO beacons received via UDP"
8055msgstr "# krypterade PONG-meddelanden mottagna"
8056
8057#: src/transport/plugin_transport_udp_broadcasting.c:553
8058msgid ""
8059"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n"
8060msgstr ""
8061
8062#: src/transport/plugin_transport_udp_broadcasting.c:571
8063#, c-format
8064msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n"
8065msgstr ""
8066
8039#: src/transport/plugin_transport_unix.c:1396 8067#: src/transport/plugin_transport_unix.c:1396
8040#, fuzzy, c-format 8068#, fuzzy, c-format
8041msgid "Cannot bind to `%s'\n" 8069msgid "Cannot bind to `%s'\n"
@@ -8199,7 +8227,7 @@ msgstr ""
8199msgid "Service process failed to report status\n" 8227msgid "Service process failed to report status\n"
8200msgstr "" 8228msgstr ""
8201 8229
8202#: src/transport/tcp_service_legacy.c:1253 src/util/disk.c:1040 8230#: src/transport/tcp_service_legacy.c:1253 src/util/disk.c:1220
8203#: src/util/service.c:1637 8231#: src/util/service.c:1637
8204#, fuzzy, c-format 8232#, fuzzy, c-format
8205msgid "Cannot obtain information about user `%s': %s\n" 8233msgid "Cannot obtain information about user `%s': %s\n"
@@ -8319,47 +8347,47 @@ msgstr "Ogiltigt format för IP: \"%s\"\n"
8319msgid "Failed to serialize metadata `%s'" 8347msgid "Failed to serialize metadata `%s'"
8320msgstr "Misslyckades att leverera \"%s\" meddelande.\n" 8348msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
8321 8349
8322#: src/util/client.c:747 src/util/client.c:937 8350#: src/util/client.c:747 src/util/client.c:938
8323msgid "not a valid filename" 8351msgid "not a valid filename"
8324msgstr "" 8352msgstr ""
8325 8353
8326#: src/util/client.c:1103 8354#: src/util/client.c:1104
8327#, c-format 8355#, c-format
8328msgid "Need a non-empty hostname for service `%s'.\n" 8356msgid "Need a non-empty hostname for service `%s'.\n"
8329msgstr "" 8357msgstr ""
8330 8358
8331#: src/util/common_logging.c:259 src/util/common_logging.c:1114 8359#: src/util/common_logging.c:626 src/util/common_logging.c:665
8332msgid "DEBUG" 8360#, c-format
8333msgstr "FELSÖKNING" 8361msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n"
8362msgstr ""
8334 8363
8335#: src/util/common_logging.c:261 src/util/common_logging.c:1112 8364#: src/util/common_logging.c:904
8336msgid "INFO" 8365#, c-format
8337msgstr "INFO" 8366msgid "Message `%.*s' repeated %u times in the last %s\n"
8367msgstr ""
8338 8368
8339#: src/util/common_logging.c:263 src/util/common_logging.c:1110 8369#: src/util/common_logging.c:1106
8340msgid "MESSAGE" 8370msgid "ERROR"
8341msgstr "MEDDELANDE" 8371msgstr "FEL"
8342 8372
8343#: src/util/common_logging.c:265 src/util/common_logging.c:1108 8373#: src/util/common_logging.c:1108
8344msgid "WARNING" 8374msgid "WARNING"
8345msgstr "VARNING" 8375msgstr "VARNING"
8346 8376
8347#: src/util/common_logging.c:267 src/util/common_logging.c:1106 8377#: src/util/common_logging.c:1110
8348msgid "ERROR" 8378msgid "MESSAGE"
8349msgstr "FEL" 8379msgstr "MEDDELANDE"
8350 8380
8351#: src/util/common_logging.c:269 src/util/common_logging.c:1116 8381#: src/util/common_logging.c:1112
8352msgid "NONE" 8382msgid "INFO"
8353msgstr "" 8383msgstr "INFO"
8354 8384
8355#: src/util/common_logging.c:626 src/util/common_logging.c:665 8385#: src/util/common_logging.c:1114
8356#, c-format 8386msgid "DEBUG"
8357msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n" 8387msgstr "FELSÖKNING"
8358msgstr ""
8359 8388
8360#: src/util/common_logging.c:904 8389#: src/util/common_logging.c:1116
8361#, c-format 8390msgid "NONE"
8362msgid "Message `%.*s' repeated %u times in the last %s\n"
8363msgstr "" 8391msgstr ""
8364 8392
8365#: src/util/common_logging.c:1117 8393#: src/util/common_logging.c:1117
@@ -8385,39 +8413,69 @@ msgid ""
8385"Configuration specifies invalid value for option `%s' in section `%s': %s\n" 8413"Configuration specifies invalid value for option `%s' in section `%s': %s\n"
8386msgstr "Konfigurationsfil \"%s\" hittades inte. Kör \"gnunet-setup -d\"!\n" 8414msgstr "Konfigurationsfil \"%s\" hittades inte. Kör \"gnunet-setup -d\"!\n"
8387 8415
8388#: src/util/configuration.c:370 8416#: src/util/configuration.c:790
8417#, c-format
8418msgid "Illegal directive in line %u (parsing restricted section %s)\n"
8419msgstr ""
8420
8421#: src/util/configuration.c:800
8422#, c-format
8423msgid "Bad directive in line %u\n"
8424msgstr ""
8425
8426#: src/util/configuration.c:853
8427#, c-format
8428msgid "Bad inline-secret directive in line %u\n"
8429msgstr ""
8430
8431#: src/util/configuration.c:875
8432#, c-format
8433msgid "Unknown or malformed directive '%s' in line %u\n"
8434msgstr ""
8435
8436#: src/util/configuration.c:905
8437#, fuzzy, c-format
8438msgid "Syntax error while deserializing in line %u (option without section)\n"
8439msgstr "Syntaxfel i konfigurationsfil \"%s\" på rad %d.\n"
8440
8441#: src/util/configuration.c:949
8389#, fuzzy, c-format 8442#, fuzzy, c-format
8390msgid "Syntax error while deserializing in line %u\n" 8443msgid "Syntax error while deserializing in line %u\n"
8391msgstr "Syntaxfel i konfigurationsfil \"%s\" på rad %d.\n" 8444msgstr "Syntaxfel i konfigurationsfil \"%s\" på rad %d.\n"
8392 8445
8393#: src/util/configuration.c:420 8446#: src/util/configuration.c:1049
8394#, fuzzy, c-format 8447#, fuzzy, c-format
8395msgid "Error while reading file `%s'\n" 8448msgid "Error while reading file `%s'\n"
8396msgstr "Fel vid nedladdning: %s\n" 8449msgstr "Fel vid nedladdning: %s\n"
8397 8450
8398#: src/util/configuration.c:980 8451#: src/util/configuration.c:1062
8452#, fuzzy, c-format
8453msgid "Failed to parse configuration file `%s'\n"
8454msgstr "Kunde inte spara konfigurationsfil \"%s\":"
8455
8456#: src/util/configuration.c:1695
8399#, fuzzy 8457#, fuzzy
8400msgid "Not a valid relative time specification" 8458msgid "Not a valid relative time specification"
8401msgstr "Konfigurationsfil \"%s\" skapad.\n" 8459msgstr "Konfigurationsfil \"%s\" skapad.\n"
8402 8460
8403#: src/util/configuration.c:1050 8461#: src/util/configuration.c:1765
8404#, c-format 8462#, c-format
8405msgid "" 8463msgid ""
8406"Configuration value '%s' for '%s' in section '%s' is not in set of legal " 8464"Configuration value '%s' for '%s' in section '%s' is not in set of legal "
8407"choices\n" 8465"choices\n"
8408msgstr "" 8466msgstr ""
8409 8467
8410#: src/util/configuration.c:1145 8468#: src/util/configuration.c:1860
8411#, c-format 8469#, c-format
8412msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n" 8470msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n"
8413msgstr "" 8471msgstr ""
8414 8472
8415#: src/util/configuration.c:1177 8473#: src/util/configuration.c:1892
8416#, fuzzy, c-format 8474#, fuzzy, c-format
8417msgid "Missing closing `%s' in option `%s'\n" 8475msgid "Missing closing `%s' in option `%s'\n"
8418msgstr "Konfigurationsfil \"%s\" skapad.\n" 8476msgstr "Konfigurationsfil \"%s\" skapad.\n"
8419 8477
8420#: src/util/configuration.c:1243 8478#: src/util/configuration.c:1958
8421#, c-format 8479#, c-format
8422msgid "" 8480msgid ""
8423"Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined " 8481"Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined "
@@ -8461,7 +8519,7 @@ msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n"
8461msgid "RSA signature verification failed at %s:%d: %s\n" 8519msgid "RSA signature verification failed at %s:%d: %s\n"
8462msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n" 8520msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n"
8463 8521
8464#: src/util/disk.c:823 8522#: src/util/disk.c:843
8465#, fuzzy, c-format 8523#, fuzzy, c-format
8466msgid "Expected `%s' to be a directory!\n" 8524msgid "Expected `%s' to be a directory!\n"
8467msgstr "\"%s\" förväntade att \"%s\" skulle vara en katalog!\n" 8525msgstr "\"%s\" förväntade att \"%s\" skulle vara en katalog!\n"
@@ -8644,61 +8702,71 @@ msgstr "Du måste skicka med ett nummer till flaggan \"%s\".\n"
8644msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n" 8702msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n"
8645msgstr "" 8703msgstr ""
8646 8704
8647#: src/util/gnunet-base32.c:45 8705#: src/util/gnunet-base32.c:46
8648msgid "run decoder modus, otherwise runs as encoder" 8706msgid "run decoder modus, otherwise runs as encoder"
8649msgstr "" 8707msgstr ""
8650 8708
8651#: src/util/gnunet-config.c:167 8709#: src/util/gnunet-config.c:187
8652#, fuzzy, c-format
8653msgid "failed to load configuration defaults"
8654msgstr "Kunde inte spara konfigurationsfil \"%s\":"
8655
8656#: src/util/gnunet-config.c:179
8657#, fuzzy, c-format
8658msgid "%s or %s argument is required\n"
8659msgstr "%s: flagga \"%s\" är tvetydig\n"
8660
8661#: src/util/gnunet-config.c:186
8662#, c-format 8710#, c-format
8663msgid "The following sections are available:\n" 8711msgid "The following sections are available:\n"
8664msgstr "" 8712msgstr ""
8665 8713
8666#: src/util/gnunet-config.c:234 8714#: src/util/gnunet-config.c:201
8715#, fuzzy, c-format
8716msgid "%s, %s or %s argument is required\n"
8717msgstr "%s: flagga \"%s\" är tvetydig\n"
8718
8719#: src/util/gnunet-config.c:266
8667#, c-format 8720#, c-format
8668msgid "--option argument required to set value\n" 8721msgid "--option argument required to set value\n"
8669msgstr "" 8722msgstr ""
8670 8723
8671#: src/util/gnunet-config.c:284 8724#: src/util/gnunet-config.c:309
8672msgid "interpret option value as a filename (with $-expansion)" 8725#, fuzzy, c-format
8673msgstr "" 8726msgid "failed to load configuration defaults"
8727msgstr "Kunde inte spara konfigurationsfil \"%s\":"
8674 8728
8675#: src/util/gnunet-config.c:291 8729#: src/util/gnunet-config.c:354
8676msgid "test if the current installation supports the specified BACKEND" 8730msgid "test if the current installation supports the specified BACKEND"
8677msgstr "" 8731msgstr ""
8678 8732
8679#: src/util/gnunet-config.c:297 8733#: src/util/gnunet-config.c:360
8680msgid "name of the section to access" 8734#, fuzzy
8735msgid "write the full configuration file, including default values"
8736msgstr "Konfigurationsfil \"%s\" skapad.\n"
8737
8738#: src/util/gnunet-config.c:365
8739msgid "interpret option value as a filename (with $-expansion)"
8681msgstr "" 8740msgstr ""
8682 8741
8683#: src/util/gnunet-config.c:302 8742#: src/util/gnunet-config.c:370
8684#, fuzzy 8743#, fuzzy
8685msgid "name of the option to access" 8744msgid "name of the option to access"
8686msgstr "Visa värde av alternativet" 8745msgstr "Visa värde av alternativet"
8687 8746
8688#: src/util/gnunet-config.c:307 8747#: src/util/gnunet-config.c:376
8689msgid "value to set" 8748#, fuzzy
8749msgid "rewrite the configuration file, even if nothing changed"
8750msgstr "använd konfigurationsfil FILNAMN"
8751
8752#: src/util/gnunet-config.c:382
8753msgid "output extra diagnostics"
8690msgstr "" 8754msgstr ""
8691 8755
8692#: src/util/gnunet-config.c:312 8756#: src/util/gnunet-config.c:387
8693#, fuzzy 8757#, fuzzy
8694msgid "print available configuration sections" 8758msgid "print available configuration sections"
8695msgstr "GNUnet-konfiguration" 8759msgstr "GNUnet-konfiguration"
8696 8760
8697#: src/util/gnunet-config.c:318 8761#: src/util/gnunet-config.c:393
8698msgid "write configuration file that only contains delta to defaults" 8762msgid "name of the section to access"
8699msgstr "" 8763msgstr ""
8700 8764
8701#: src/util/gnunet-config.c:330 8765#: src/util/gnunet-config.c:398
8766msgid "value to set"
8767msgstr ""
8768
8769#: src/util/gnunet-config.c:413
8702#, fuzzy 8770#, fuzzy
8703msgid "Manipulate GNUnet configuration files" 8771msgid "Manipulate GNUnet configuration files"
8704msgstr "skriv ut ett värde från konfigurationsfilen till standard ut" 8772msgstr "skriv ut ett värde från konfigurationsfilen till standard ut"
@@ -8889,7 +8957,7 @@ msgstr "Fel vid skapandet av användare"
8889msgid "Unable to shorten unix path `%s' while keeping name unique\n" 8957msgid "Unable to shorten unix path `%s' while keeping name unique\n"
8890msgstr "" 8958msgstr ""
8891 8959
8892#: src/util/network.c:1361 8960#: src/util/network.c:1359
8893#, c-format 8961#, c-format
8894msgid "" 8962msgid ""
8895"Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n" 8963"Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n"
@@ -8927,22 +8995,22 @@ msgstr "\"%s\" misslyckades för fil \"%s\" vid %s:%d med fel: %s\n"
8927msgid "`%s' failed for library `%s' with error: %s\n" 8995msgid "`%s' failed for library `%s' with error: %s\n"
8928msgstr "\"%s\" misslyckades vid %s:%d med fel: %s\n" 8996msgstr "\"%s\" misslyckades vid %s:%d med fel: %s\n"
8929 8997
8930#: src/util/plugin.c:409 8998#: src/util/plugin.c:414
8931#, fuzzy 8999#, fuzzy
8932msgid "Could not determine plugin installation path.\n" 9000msgid "Could not determine plugin installation path.\n"
8933msgstr "Kunde inte fastställa min publika IPv6-adress.\n" 9001msgstr "Kunde inte fastställa min publika IPv6-adress.\n"
8934 9002
8935#: src/util/program.c:259 9003#: src/util/program.c:252
8936#, fuzzy, c-format 9004#, fuzzy, c-format
8937msgid "Unreadable or malformed configuration file `%s', exit ...\n" 9005msgid "Unreadable or malformed configuration file `%s', exit ...\n"
8938msgstr "Kunde inte spara konfigurationsfil \"%s\":" 9006msgstr "Kunde inte spara konfigurationsfil \"%s\":"
8939 9007
8940#: src/util/program.c:276 9008#: src/util/program.c:272
8941#, fuzzy, c-format 9009#, fuzzy, c-format
8942msgid "Unreadable or malformed default configuration file `%s', exit ...\n" 9010msgid "Unreadable or malformed default configuration file `%s', exit ...\n"
8943msgstr "Kunde inte spara konfigurationsfil \"%s\":" 9011msgstr "Kunde inte spara konfigurationsfil \"%s\":"
8944 9012
8945#: src/util/program.c:291 9013#: src/util/program.c:288
8946#, fuzzy 9014#, fuzzy
8947msgid "Unreadable or malformed configuration, exit ...\n" 9015msgid "Unreadable or malformed configuration, exit ...\n"
8948msgstr "Kunde inte spara konfigurationsfil \"%s\":" 9016msgstr "Kunde inte spara konfigurationsfil \"%s\":"
@@ -9009,82 +9077,82 @@ msgstr ""
9009msgid "Attempting to proxy service `%s' to invalid port %d or hostname.\n" 9077msgid "Attempting to proxy service `%s' to invalid port %d or hostname.\n"
9010msgstr "" 9078msgstr ""
9011 9079
9012#: src/util/strings.c:503 9080#: src/util/strings.c:409
9013#, c-format 9081#, c-format
9014msgid "Character sets requested were `%s'->`%s'\n" 9082msgid "Character sets requested were `%s'->`%s'\n"
9015msgstr "" 9083msgstr ""
9016 9084
9017#: src/util/strings.c:637 9085#: src/util/strings.c:501
9018msgid "Failed to expand `$HOME': environment variable `HOME' not set" 9086msgid "Failed to expand `$HOME': environment variable `HOME' not set"
9019msgstr "" 9087msgstr ""
9020 9088
9021#: src/util/strings.c:1241 9089#: src/util/strings.c:1036
9022msgid "IPv6 address did not start with `['\n" 9090msgid "IPv6 address did not start with `['\n"
9023msgstr "" 9091msgstr ""
9024 9092
9025#: src/util/strings.c:1249 9093#: src/util/strings.c:1044
9026msgid "IPv6 address did contain ':' to separate port number\n" 9094msgid "IPv6 address did contain ':' to separate port number\n"
9027msgstr "" 9095msgstr ""
9028 9096
9029#: src/util/strings.c:1256 9097#: src/util/strings.c:1051
9030msgid "IPv6 address did contain ']' before ':' to separate port number\n" 9098msgid "IPv6 address did contain ']' before ':' to separate port number\n"
9031msgstr "" 9099msgstr ""
9032 9100
9033#: src/util/strings.c:1264 9101#: src/util/strings.c:1059
9034msgid "IPv6 address did contain a valid port number after the last ':'\n" 9102msgid "IPv6 address did contain a valid port number after the last ':'\n"
9035msgstr "" 9103msgstr ""
9036 9104
9037#: src/util/strings.c:1273 9105#: src/util/strings.c:1068
9038#, fuzzy, c-format 9106#, fuzzy, c-format
9039msgid "Invalid IPv6 address `%s': %s\n" 9107msgid "Invalid IPv6 address `%s': %s\n"
9040msgstr "Ogiltigt svar på \"%s\".\n" 9108msgstr "Ogiltigt svar på \"%s\".\n"
9041 9109
9042#: src/util/strings.c:1500 src/util/strings.c:1511 9110#: src/util/strings.c:1250 src/util/strings.c:1261
9043msgid "Port not in range\n" 9111msgid "Port not in range\n"
9044msgstr "" 9112msgstr ""
9045 9113
9046#: src/util/strings.c:1520 9114#: src/util/strings.c:1270
9047#, fuzzy, c-format 9115#, fuzzy, c-format
9048msgid "Malformed port policy `%s'\n" 9116msgid "Malformed port policy `%s'\n"
9049msgstr "Misslyckades att starta samling.\n" 9117msgstr "Misslyckades att starta samling.\n"
9050 9118
9051#: src/util/strings.c:1603 src/util/strings.c:1632 src/util/strings.c:1679 9119#: src/util/strings.c:1341 src/util/strings.c:1370 src/util/strings.c:1417
9052#: src/util/strings.c:1699 9120#: src/util/strings.c:1437
9053#, c-format 9121#, c-format
9054msgid "Invalid format for IP: `%s'\n" 9122msgid "Invalid format for IP: `%s'\n"
9055msgstr "Ogiltigt format för IP: \"%s\"\n" 9123msgstr "Ogiltigt format för IP: \"%s\"\n"
9056 9124
9057#: src/util/strings.c:1657 9125#: src/util/strings.c:1395
9058#, c-format 9126#, c-format
9059msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)." 9127msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)."
9060msgstr "Ogiltig nätverksnotation (\"/%d\" är inte giltig i IPv4 CIDR)." 9128msgstr "Ogiltig nätverksnotation (\"/%d\" är inte giltig i IPv4 CIDR)."
9061 9129
9062#: src/util/strings.c:1708 9130#: src/util/strings.c:1446
9063#, fuzzy, c-format 9131#, fuzzy, c-format
9064msgid "Invalid format: `%s'\n" 9132msgid "Invalid format: `%s'\n"
9065msgstr "Ogiltigt format för IP: \"%s\"\n" 9133msgstr "Ogiltigt format för IP: \"%s\"\n"
9066 9134
9067#: src/util/strings.c:1761 9135#: src/util/strings.c:1488
9068#, c-format 9136#, c-format
9069msgid "Invalid network notation (does not end with ';': `%s')\n" 9137msgid "Invalid network notation (does not end with ';': `%s')\n"
9070msgstr "Ogiltig nätverksnotation (slutar inte med \";\": \"%s\")\n" 9138msgstr "Ogiltig nätverksnotation (slutar inte med \";\": \"%s\")\n"
9071 9139
9072#: src/util/strings.c:1811 9140#: src/util/strings.c:1538
9073#, fuzzy, c-format 9141#, fuzzy, c-format
9074msgid "Wrong format `%s' for netmask\n" 9142msgid "Wrong format `%s' for netmask\n"
9075msgstr "Fel format \"%s\" för nätmask: %s\n" 9143msgstr "Fel format \"%s\" för nätmask: %s\n"
9076 9144
9077#: src/util/strings.c:1842 9145#: src/util/strings.c:1569
9078#, fuzzy, c-format 9146#, fuzzy, c-format
9079msgid "Wrong format `%s' for network\n" 9147msgid "Wrong format `%s' for network\n"
9080msgstr "Fel format \"%s\" för nätverk: %s\n" 9148msgstr "Fel format \"%s\" för nätverk: %s\n"
9081 9149
9082#: src/util/time.c:878 src/util/time.c:906 9150#: src/util/time.c:699 src/util/time.c:727
9083#, c-format 9151#, c-format
9084msgid "Failed to map `%s', cannot assure monotonic time!\n" 9152msgid "Failed to map `%s', cannot assure monotonic time!\n"
9085msgstr "" 9153msgstr ""
9086 9154
9087#: src/util/time.c:914 9155#: src/util/time.c:735
9088#, c-format 9156#, c-format
9089msgid "" 9157msgid ""
9090"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n" 9158"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
@@ -9268,13 +9336,33 @@ msgstr "# byte mottagna via UDP"
9268msgid "Setup tunnels via VPN." 9336msgid "Setup tunnels via VPN."
9269msgstr "" 9337msgstr ""
9270 9338
9271#: src/zonemaster/gnunet-service-zonemaster.c:847
9272#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418 9339#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418
9340#: src/zonemaster/gnunet-service-zonemaster.c:847
9273#, fuzzy 9341#, fuzzy
9274msgid "Failed to connect to the namestore!\n" 9342msgid "Failed to connect to the namestore!\n"
9275msgstr "Misslyckades att ansluta till gnunetd.\n" 9343msgstr "Misslyckades att ansluta till gnunetd.\n"
9276 9344
9277#, fuzzy, c-format 9345#, fuzzy, c-format
9346#~ msgid "Start logging `%s'\n"
9347#~ msgstr "Startade samling \"%s\".\n"
9348
9349#, fuzzy, c-format
9350#~ msgid "Failed to connect master peer [%u] with slave [%u]\n"
9351#~ msgstr "Misslyckades att ansluta till gnunetd.\n"
9352
9353#, fuzzy, c-format
9354#~ msgid "Unsupported form value `%s'\n"
9355#~ msgstr "Kommando \"%s\" stöds ej. Avbryter.\n"
9356
9357#, fuzzy, c-format
9358#~ msgid "Failed to create page for `%s'\n"
9359#~ msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
9360
9361#, fuzzy, c-format
9362#~ msgid "Failed to setup post processor for `%s'\n"
9363#~ msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
9364
9365#, fuzzy, c-format
9278#~ msgid "Unable to parse PKEY record `%s'\n" 9366#~ msgid "Unable to parse PKEY record `%s'\n"
9279#~ msgstr "Misslyckades att läsa kompislista från \"%s\"\n" 9367#~ msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
9280 9368
@@ -9699,10 +9787,6 @@ msgstr "Misslyckades att ansluta till gnunetd.\n"
9699#~ msgstr "Misslyckades att ta emot svar till \"%s\" meddelande från gnunetd\n" 9787#~ msgstr "Misslyckades att ta emot svar till \"%s\" meddelande från gnunetd\n"
9700 9788
9701#, fuzzy 9789#, fuzzy
9702#~ msgid "unknown error"
9703#~ msgstr "Okänt fel"
9704
9705#, fuzzy
9706#~ msgid "Invalid response from `fs' service." 9790#~ msgid "Invalid response from `fs' service."
9707#~ msgstr "Ogiltigt svar till \"%s\" från \"%s\"\n" 9791#~ msgstr "Ogiltigt svar till \"%s\" från \"%s\"\n"
9708 9792
@@ -10731,10 +10815,6 @@ msgstr "Misslyckades att ansluta till gnunetd.\n"
10731#~ msgstr "\"%s\" ansluten till \"%s\".\n" 10815#~ msgstr "\"%s\" ansluten till \"%s\".\n"
10732 10816
10733#, fuzzy 10817#, fuzzy
10734#~ msgid "Configuration fails to specify `%s', assuming default value."
10735#~ msgstr "Konfigurationsfil \"%s\" skapad.\n"
10736
10737#, fuzzy
10738#~ msgid "Option `%s' not specified in configuration section `%s'\n" 10818#~ msgid "Option `%s' not specified in configuration section `%s'\n"
10739#~ msgstr "Inga applikationer definierade i konfiguration!\n" 10819#~ msgstr "Inga applikationer definierade i konfiguration!\n"
10740 10820
@@ -11442,9 +11522,6 @@ msgstr "Misslyckades att ansluta till gnunetd.\n"
11442#~ "använd libextractor för att lägga till ytterligare direktreferenser till " 11522#~ "använd libextractor för att lägga till ytterligare direktreferenser till "
11443#~ "katalogposter" 11523#~ "katalogposter"
11444 11524
11445#~ msgid "Created entry `%s' in namespace `%s'\n"
11446#~ msgstr "Skapade post \"%s\" i namnrymd \"%s\"\n"
11447
11448#, fuzzy 11525#, fuzzy
11449#~ msgid "" 11526#~ msgid ""
11450#~ "%16llu of %16llu bytes inserted (estimating %6s to completion) - %s\n" 11527#~ "%16llu of %16llu bytes inserted (estimating %6s to completion) - %s\n"
diff --git a/po/vi.po b/po/vi.po
index f4c284355..bfb260eef 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -8,7 +8,7 @@ msgid ""
8msgstr "" 8msgstr ""
9"Project-Id-Version: gnunet 0.8.0a\n" 9"Project-Id-Version: gnunet 0.8.0a\n"
10"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" 10"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
11"POT-Creation-Date: 2021-04-04 19:19+0200\n" 11"POT-Creation-Date: 2021-08-28 16:52+0200\n"
12"PO-Revision-Date: 2008-09-10 22:05+0930\n" 12"PO-Revision-Date: 2008-09-10 22:05+0930\n"
13"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n" 13"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
14"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n" 14"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
@@ -30,8 +30,8 @@ msgid "Issuer public key `%s' is not well-formed\n"
30msgstr "Äối số không hợp lệ cho « %s ».\n" 30msgstr "Äối số không hợp lệ cho « %s ».\n"
31 31
32#: src/abd/gnunet-abd.c:560 src/abd/gnunet-service-abd.c:1747 32#: src/abd/gnunet-abd.c:560 src/abd/gnunet-service-abd.c:1747
33#: src/namestore/gnunet-namestore-fcfsd.c:1067
33#: src/namestore/gnunet-namestore.c:1001 34#: src/namestore/gnunet-namestore.c:1001
34#: src/namestore/gnunet-namestore-fcfsd.c:1164
35#, fuzzy, c-format 35#, fuzzy, c-format
36msgid "Failed to connect to namestore\n" 36msgid "Failed to connect to namestore\n"
37msgstr "Không kết nối được đến trình ná»n gnunetd." 37msgstr "Không kết nối được đến trình ná»n gnunetd."
@@ -509,110 +509,6 @@ msgstr ""
509msgid "Initiating shutdown as requested by client.\n" 509msgid "Initiating shutdown as requested by client.\n"
510msgstr "" 510msgstr ""
511 511
512#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044
513#, c-format
514msgid ""
515"Could not load quota for network `%s': `%s', assigning default bandwidth "
516"%llu\n"
517msgstr ""
518
519#: src/ats/gnunet-ats-solver-eval.c:3011
520#, c-format
521msgid ""
522"No outbound quota configured for network `%s', assigning default bandwidth "
523"%llu\n"
524msgstr ""
525
526#: src/ats/gnunet-ats-solver-eval.c:3063
527#, c-format
528msgid ""
529"No outbound quota configure for network `%s', assigning default bandwidth "
530"%llu\n"
531msgstr ""
532
533#: src/ats/gnunet-ats-solver-eval.c:3552 src/ats-tests/gnunet-solver-eval.c:997
534msgid "solver to use"
535msgstr ""
536
537#: src/ats/gnunet-ats-solver-eval.c:3557
538#: src/ats-tests/gnunet-solver-eval.c:1003
539#: src/ats-tests/gnunet-solver-eval.c:1008
540msgid "experiment to use"
541msgstr ""
542
543#: src/ats/gnunet-ats-solver-eval.c:3564
544#, fuzzy
545msgid "print logging"
546msgstr "Theo dõi"
547
548#: src/ats/gnunet-ats-solver-eval.c:3569
549msgid "save logging to disk"
550msgstr ""
551
552#: src/ats/gnunet-ats-solver-eval.c:3574
553msgid "disable normalization"
554msgstr ""
555
556#: src/ats/gnunet-service-ats_plugins.c:326
557#, c-format
558msgid ""
559"Could not load %s quota for network `%s': `%s', assigning default bandwidth "
560"%llu\n"
561msgstr ""
562
563#: src/ats/gnunet-service-ats_plugins.c:336
564#, c-format
565msgid "%s quota configured for network `%s' is %llu\n"
566msgstr ""
567
568#: src/ats/gnunet-service-ats_plugins.c:382
569#, c-format
570msgid ""
571"No %s-quota configured for network `%s', assigning default bandwidth %llu\n"
572msgstr ""
573
574#: src/ats/gnunet-service-ats_plugins.c:474
575#, fuzzy, c-format
576msgid "Failed to initialize solver `%s'!\n"
577msgstr "Không thể sơ khởi SQLite: %s.\n"
578
579#: src/ats/plugin_ats_proportional.c:1142
580#, fuzzy, c-format
581msgid "Invalid %s configuration %f \n"
582msgstr "Không thể lưu tập tin cấu hình « %s »:"
583
584#: src/ats/plugin_ats_proportional.c:1165
585#, fuzzy, c-format
586msgid "Invalid %s configuration %f\n"
587msgstr "Không thể lưu tập tin cấu hình « %s »:"
588
589#: src/ats-tests/ats-testing.c:420
590#, c-format
591msgid "Connected master [%u] with slave [%u]\n"
592msgstr ""
593
594#: src/ats-tests/ats-testing.c:427
595#, fuzzy, c-format
596msgid "Failed to connect master peer [%u] with slave [%u]\n"
597msgstr "Lỗi kết nối đến gnunetd.\n"
598
599#: src/ats-tests/ats-testing-log.c:899
600#, fuzzy
601msgid "Stop logging\n"
602msgstr "Theo dõi"
603
604#: src/ats-tests/ats-testing-log.c:955
605#, fuzzy, c-format
606msgid "Start logging `%s'\n"
607msgstr "Äang bắt đầu tài vỠ« %s »\n"
608
609#: src/ats-tests/gnunet-ats-sim.c:92
610#, c-format
611msgid ""
612"Master [%u]: sent: %u KiB in %u sec. = %u KiB/s, received: %u KiB in %u sec. "
613"= %u KiB/s\n"
614msgstr ""
615
616#: src/ats-tool/gnunet-ats.c:299 512#: src/ats-tool/gnunet-ats.c:299
617#, c-format 513#, c-format
618msgid "%u address resolutions had a timeout\n" 514msgid "%u address resolutions had a timeout\n"
@@ -735,6 +631,81 @@ msgstr ""
735msgid "Print information about ATS state" 631msgid "Print information about ATS state"
736msgstr "In ra thông tin vỠcác đồng đẳng GNUnet." 632msgstr "In ra thông tin vỠcác đồng đẳng GNUnet."
737 633
634#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044
635#, c-format
636msgid ""
637"Could not load quota for network `%s': `%s', assigning default bandwidth "
638"%llu\n"
639msgstr ""
640
641#: src/ats/gnunet-ats-solver-eval.c:3011
642#, c-format
643msgid ""
644"No outbound quota configured for network `%s', assigning default bandwidth "
645"%llu\n"
646msgstr ""
647
648#: src/ats/gnunet-ats-solver-eval.c:3063
649#, c-format
650msgid ""
651"No outbound quota configure for network `%s', assigning default bandwidth "
652"%llu\n"
653msgstr ""
654
655#: src/ats/gnunet-ats-solver-eval.c:3552
656msgid "solver to use"
657msgstr ""
658
659#: src/ats/gnunet-ats-solver-eval.c:3557
660msgid "experiment to use"
661msgstr ""
662
663#: src/ats/gnunet-ats-solver-eval.c:3564
664#, fuzzy
665msgid "print logging"
666msgstr "Theo dõi"
667
668#: src/ats/gnunet-ats-solver-eval.c:3569
669msgid "save logging to disk"
670msgstr ""
671
672#: src/ats/gnunet-ats-solver-eval.c:3574
673msgid "disable normalization"
674msgstr ""
675
676#: src/ats/gnunet-service-ats_plugins.c:326
677#, c-format
678msgid ""
679"Could not load %s quota for network `%s': `%s', assigning default bandwidth "
680"%llu\n"
681msgstr ""
682
683#: src/ats/gnunet-service-ats_plugins.c:336
684#, c-format
685msgid "%s quota configured for network `%s' is %llu\n"
686msgstr ""
687
688#: src/ats/gnunet-service-ats_plugins.c:382
689#, c-format
690msgid ""
691"No %s-quota configured for network `%s', assigning default bandwidth %llu\n"
692msgstr ""
693
694#: src/ats/gnunet-service-ats_plugins.c:474
695#, fuzzy, c-format
696msgid "Failed to initialize solver `%s'!\n"
697msgstr "Không thể sơ khởi SQLite: %s.\n"
698
699#: src/ats/plugin_ats_proportional.c:1142
700#, fuzzy, c-format
701msgid "Invalid %s configuration %f \n"
702msgstr "Không thể lưu tập tin cấu hình « %s »:"
703
704#: src/ats/plugin_ats_proportional.c:1165
705#, fuzzy, c-format
706msgid "Invalid %s configuration %f\n"
707msgstr "Không thể lưu tập tin cấu hình « %s »:"
708
738#: src/auction/gnunet-auction-create.c:163 709#: src/auction/gnunet-auction-create.c:163
739msgid "description of the item to be sold" 710msgid "description of the item to be sold"
740msgstr "" 711msgstr ""
@@ -773,7 +744,7 @@ msgstr ""
773 744
774#: src/auction/gnunet-auction-info.c:77 src/auction/gnunet-auction-join.c:77 745#: src/auction/gnunet-auction-info.c:77 src/auction/gnunet-auction-join.c:77
775#: src/conversation/gnunet-conversation-test.c:256 746#: src/conversation/gnunet-conversation-test.c:256
776#: src/revocation/gnunet-revocation.c:564 src/template/gnunet-template.c:75 747#: src/revocation/gnunet-revocation.c:570 src/template/gnunet-template.c:75
777msgid "help text" 748msgid "help text"
778msgstr "" 749msgstr ""
779 750
@@ -874,6 +845,28 @@ msgstr ""
874msgid "Connection to conversation service lost, trying to reconnect\n" 845msgid "Connection to conversation service lost, trying to reconnect\n"
875msgstr "" 846msgstr ""
876 847
848#: src/conversation/gnunet-conversation-test.c:120
849#, c-format
850msgid ""
851"\n"
852"End of transmission. Have a GNU day.\n"
853msgstr ""
854
855#: src/conversation/gnunet-conversation-test.c:146
856#, c-format
857msgid ""
858"\n"
859"ew are now playing your recording back. If you can hear it, your audio "
860"settings are working..."
861msgstr ""
862
863#: src/conversation/gnunet-conversation-test.c:218
864#, c-format
865msgid ""
866"We will now be recording you for %s. After that time, the recording will be "
867"played back to you..."
868msgstr ""
869
877#: src/conversation/gnunet-conversation.c:264 870#: src/conversation/gnunet-conversation.c:264
878#, c-format 871#, c-format
879msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n" 872msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n"
@@ -1133,30 +1126,8 @@ msgstr ""
1133msgid "Enables having a conversation with other GNUnet users." 1126msgid "Enables having a conversation with other GNUnet users."
1134msgstr "" 1127msgstr ""
1135 1128
1136#: src/conversation/gnunet-conversation-test.c:120
1137#, c-format
1138msgid ""
1139"\n"
1140"End of transmission. Have a GNU day.\n"
1141msgstr ""
1142
1143#: src/conversation/gnunet-conversation-test.c:146
1144#, c-format
1145msgid ""
1146"\n"
1147"We are now playing your recording back. If you can hear it, your audio "
1148"settings are working..."
1149msgstr ""
1150
1151#: src/conversation/gnunet-conversation-test.c:218
1152#, c-format
1153msgid ""
1154"We will now be recording you for %s. After that time, the recording will be "
1155"played back to you..."
1156msgstr ""
1157
1158#: src/conversation/gnunet_gst.c:664
1159#: src/conversation/gnunet-helper-audio-playback-gst.c:363 1129#: src/conversation/gnunet-helper-audio-playback-gst.c:363
1130#: src/conversation/gnunet_gst.c:664
1160#, c-format 1131#, c-format
1161msgid "Read error from STDIN: %d %s\n" 1132msgid "Read error from STDIN: %d %s\n"
1162msgstr "" 1133msgstr ""
@@ -1602,42 +1573,42 @@ msgstr "# các thông báo phát hiện dht được nhận"
1602msgid "# updates to my type map" 1573msgid "# updates to my type map"
1603msgstr "" 1574msgstr ""
1604 1575
1605#: src/datacache/datacache.c:115 src/datacache/datacache.c:287 1576#: src/datacache/datacache.c:115 src/datacache/datacache.c:299
1606#: src/datastore/gnunet-service-datastore.c:742 1577#: src/datastore/gnunet-service-datastore.c:742
1607#, fuzzy 1578#, fuzzy
1608msgid "# bytes stored" 1579msgid "# bytes stored"
1609msgstr "# các byte trong kho dữ liệu" 1580msgstr "# các byte trong kho dữ liệu"
1610 1581
1611#: src/datacache/datacache.c:119 src/datacache/datacache.c:291 1582#: src/datacache/datacache.c:119 src/datacache/datacache.c:303
1612#, fuzzy 1583#, fuzzy
1613msgid "# items stored" 1584msgid "# items stored"
1614msgstr "# các byte trong kho dữ liệu" 1585msgstr "# các byte trong kho dữ liệu"
1615 1586
1616#: src/datacache/datacache.c:189 1587#: src/datacache/datacache.c:190
1617#, c-format 1588#, c-format
1618msgid "Loading `%s' datacache plugin\n" 1589msgid "Loading `%s' datacache plugin\n"
1619msgstr "" 1590msgstr ""
1620 1591
1621#: src/datacache/datacache.c:197 1592#: src/datacache/datacache.c:208
1622#, fuzzy, c-format 1593#, fuzzy, c-format
1623msgid "Failed to load datacache plugin for `%s'\n" 1594msgid "Failed to load datacache plugin for `%s'\n"
1624msgstr "Lỗi cập nhật dữ liệu cho mô-đun « %s »\n" 1595msgstr "Lỗi cập nhật dữ liệu cho mô-đun « %s »\n"
1625 1596
1626#: src/datacache/datacache.c:320 1597#: src/datacache/datacache.c:332
1627#, fuzzy 1598#, fuzzy
1628msgid "# requests received" 1599msgid "# requests received"
1629msgstr "# các yêu cầu get (lấy) dht được nhận" 1600msgstr "# các yêu cầu get (lấy) dht được nhận"
1630 1601
1631#: src/datacache/datacache.c:331 1602#: src/datacache/datacache.c:343
1632msgid "# requests filtered by bloom filter" 1603msgid "# requests filtered by bloom filter"
1633msgstr "# các yêu cầu được lá»c theo bá»™ lá»c bloom" 1604msgstr "# các yêu cầu được lá»c theo bá»™ lá»c bloom"
1634 1605
1635#: src/datacache/datacache.c:358 1606#: src/datacache/datacache.c:370
1636#, fuzzy 1607#, fuzzy
1637msgid "# requests for random value received" 1608msgid "# requests for random value received"
1638msgstr "# tổng số yêu cầu lỗ hổng được nhận" 1609msgstr "# tổng số yêu cầu lỗ hổng được nhận"
1639 1610
1640#: src/datacache/datacache.c:388 1611#: src/datacache/datacache.c:400
1641#, fuzzy 1612#, fuzzy
1642msgid "# proximity search requests received" 1613msgid "# proximity search requests received"
1643msgstr "# các yêu cầu khách lỗ hổng được nhận" 1614msgstr "# các yêu cầu khách lỗ hổng được nhận"
@@ -1996,7 +1967,7 @@ msgstr ""
1996 1967
1997#: src/datastore/plugin_datastore_postgres.c:284 1968#: src/datastore/plugin_datastore_postgres.c:284
1998#: src/datastore/plugin_datastore_postgres.c:897 1969#: src/datastore/plugin_datastore_postgres.c:897
1999msgid "Postgress exec failure" 1970msgid "Postgresql exec failure"
2000msgstr "" 1971msgstr ""
2001 1972
2002#: src/datastore/plugin_datastore_postgres.c:858 1973#: src/datastore/plugin_datastore_postgres.c:858
@@ -2034,14 +2005,25 @@ msgstr ""
2034msgid "sqlite version to old to determine size, assuming zero\n" 2005msgid "sqlite version to old to determine size, assuming zero\n"
2035msgstr "" 2006msgstr ""
2036 2007
2037#: src/datastore/plugin_datastore_sqlite.c:1274 2008#: src/datastore/plugin_datastore_sqlite.c:1266
2009#: src/datastore/plugin_datastore_sqlite.c:1279
2010#, fuzzy
2011msgid "error preparing statement\n"
2012msgstr "Hoàn thành tạo khoá.\n"
2013
2014#: src/datastore/plugin_datastore_sqlite.c:1287
2015#, fuzzy
2016msgid "error stepping\n"
2017msgstr "# các byte trong kho dữ liệu"
2018
2019#: src/datastore/plugin_datastore_sqlite.c:1295
2038#, c-format 2020#, c-format
2039msgid "" 2021msgid ""
2040"Using sqlite page utilization to estimate payload (%llu pages of size %llu " 2022"Using sqlite page utilization to estimate payload (%llu pages of size %llu "
2041"bytes)\n" 2023"bytes)\n"
2042msgstr "" 2024msgstr ""
2043 2025
2044#: src/datastore/plugin_datastore_sqlite.c:1316 2026#: src/datastore/plugin_datastore_sqlite.c:1337
2045#: src/namecache/plugin_namecache_sqlite.c:564 2027#: src/namecache/plugin_namecache_sqlite.c:564
2046#: src/namestore/plugin_namestore_sqlite.c:765 2028#: src/namestore/plugin_namestore_sqlite.c:765
2047#, fuzzy 2029#, fuzzy
@@ -2115,54 +2097,6 @@ msgstr ""
2115msgid "Prints all packets that go through the DHT." 2097msgid "Prints all packets that go through the DHT."
2116msgstr "" 2098msgstr ""
2117 2099
2118#: src/dht/gnunet_dht_profiler.c:922 src/testbed/gnunet-testbed-profiler.c:255
2119#, fuzzy, c-format
2120msgid "Exiting as the number of peers is %u\n"
2121msgstr "tăng sổ tối đa các kết nối TCP/IP"
2122
2123#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3136
2124#, fuzzy
2125msgid "number of peers to start"
2126msgstr "số lần lặp lại"
2127
2128#: src/dht/gnunet_dht_profiler.c:961
2129msgid "number of PUTs to perform per peer"
2130msgstr ""
2131
2132#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872
2133#: src/testbed/gnunet-testbed-profiler.c:305
2134msgid "name of the file with the login information for the testbed"
2135msgstr ""
2136
2137#: src/dht/gnunet_dht_profiler.c:973
2138msgid "delay between rounds for collecting statistics (default: 30 sec)"
2139msgstr ""
2140
2141#: src/dht/gnunet_dht_profiler.c:979
2142msgid "delay to start doing PUTs (default: 1 sec)"
2143msgstr ""
2144
2145#: src/dht/gnunet_dht_profiler.c:985
2146msgid "delay to start doing GETs (default: 5 min)"
2147msgstr ""
2148
2149#: src/dht/gnunet_dht_profiler.c:990
2150msgid "replication degree for DHT PUTs"
2151msgstr ""
2152
2153#: src/dht/gnunet_dht_profiler.c:996
2154msgid "chance that a peer is selected at random for PUTs"
2155msgstr ""
2156
2157#: src/dht/gnunet_dht_profiler.c:1002
2158msgid "timeout for DHT PUT and GET requests (default: 1 min)"
2159msgstr ""
2160
2161#: src/dht/gnunet_dht_profiler.c:1023
2162#, fuzzy
2163msgid "Measure quality and performance of the DHT service."
2164msgstr "Không thể truy cập đến dịch vụ"
2165
2166#: src/dht/gnunet-dht-put.c:133 2100#: src/dht/gnunet-dht-put.c:133
2167msgid "Must provide KEY and DATA for DHT put!\n" 2101msgid "Must provide KEY and DATA for DHT put!\n"
2168msgstr "" 2102msgstr ""
@@ -2296,102 +2230,102 @@ msgstr "# các thông báo PING được tạo"
2296msgid "# requests TTL-dropped" 2230msgid "# requests TTL-dropped"
2297msgstr "# các yêu cầu get (lấy) dht được nhận" 2231msgstr "# các yêu cầu get (lấy) dht được nhận"
2298 2232
2299#: src/dht/gnunet-service-dht_neighbours.c:1052 2233#: src/dht/gnunet-service-dht_neighbours.c:1035
2300#: src/dht/gnunet-service-dht_neighbours.c:1096 2234#: src/dht/gnunet-service-dht_neighbours.c:1072
2301msgid "# Peers excluded from routing due to Bloomfilter" 2235msgid "# Peers excluded from routing due to Bloomfilter"
2302msgstr "" 2236msgstr ""
2303 2237
2304#: src/dht/gnunet-service-dht_neighbours.c:1069 2238#: src/dht/gnunet-service-dht_neighbours.c:1045
2305#: src/dht/gnunet-service-dht_neighbours.c:1112 2239#: src/dht/gnunet-service-dht_neighbours.c:1088
2306#, fuzzy 2240#, fuzzy
2307msgid "# Peer selection failed" 2241msgid "# Peer selection failed"
2308msgstr "# các cuá»™c gá»i HTTP select (lá»±a chá»n)" 2242msgstr "# các cuá»™c gá»i HTTP select (lá»±a chá»n)"
2309 2243
2310#: src/dht/gnunet-service-dht_neighbours.c:1270 2244#: src/dht/gnunet-service-dht_neighbours.c:1246
2311#, fuzzy 2245#, fuzzy
2312msgid "# PUT requests routed" 2246msgid "# PUT requests routed"
2313msgstr "# các yêu cầu dht được định tuyến" 2247msgstr "# các yêu cầu dht được định tuyến"
2314 2248
2315#: src/dht/gnunet-service-dht_neighbours.c:1304 2249#: src/dht/gnunet-service-dht_neighbours.c:1280
2316#, fuzzy 2250#, fuzzy
2317msgid "# PUT messages queued for transmission" 2251msgid "# PUT messages queued for transmission"
2318msgstr "# các thông báo PING được tạo" 2252msgstr "# các thông báo PING được tạo"
2319 2253
2320#: src/dht/gnunet-service-dht_neighbours.c:1316 2254#: src/dht/gnunet-service-dht_neighbours.c:1292
2321#: src/dht/gnunet-service-dht_neighbours.c:1458 2255#: src/dht/gnunet-service-dht_neighbours.c:1434
2322#: src/dht/gnunet-service-dht_neighbours.c:1562 2256#: src/dht/gnunet-service-dht_neighbours.c:1538
2323#, fuzzy 2257#, fuzzy
2324msgid "# P2P messages dropped due to full queue" 2258msgid "# P2P messages dropped due to full queue"
2325msgstr "# các yêu cầu lá»— hổng bị bá» do trá»ng tải" 2259msgstr "# các yêu cầu lá»— hổng bị bá» do trá»ng tải"
2326 2260
2327#: src/dht/gnunet-service-dht_neighbours.c:1401 2261#: src/dht/gnunet-service-dht_neighbours.c:1377
2328#, fuzzy 2262#, fuzzy
2329msgid "# GET requests routed" 2263msgid "# GET requests routed"
2330msgstr "# các yêu cầu dht được định tuyến" 2264msgstr "# các yêu cầu dht được định tuyến"
2331 2265
2332#: src/dht/gnunet-service-dht_neighbours.c:1445 2266#: src/dht/gnunet-service-dht_neighbours.c:1421
2333#, fuzzy 2267#, fuzzy
2334msgid "# GET messages queued for transmission" 2268msgid "# GET messages queued for transmission"
2335msgstr "# các thông báo PING được tạo" 2269msgstr "# các thông báo PING được tạo"
2336 2270
2337#: src/dht/gnunet-service-dht_neighbours.c:1577 2271#: src/dht/gnunet-service-dht_neighbours.c:1553
2338#, fuzzy 2272#, fuzzy
2339msgid "# RESULT messages queued for transmission" 2273msgid "# RESULT messages queued for transmission"
2340msgstr "# các thông báo PING được tạo" 2274msgstr "# các thông báo PING được tạo"
2341 2275
2342#: src/dht/gnunet-service-dht_neighbours.c:1680 2276#: src/dht/gnunet-service-dht_neighbours.c:1656
2343msgid "# Expired PUTs discarded" 2277msgid "# Expired PUTs discarded"
2344msgstr "" 2278msgstr ""
2345 2279
2346#: src/dht/gnunet-service-dht_neighbours.c:1688 2280#: src/dht/gnunet-service-dht_neighbours.c:1664
2347#, fuzzy 2281#, fuzzy
2348msgid "# P2P PUT requests received" 2282msgid "# P2P PUT requests received"
2349msgstr "# các yêu cầu get (lấy) dht được nhận" 2283msgstr "# các yêu cầu get (lấy) dht được nhận"
2350 2284
2351#: src/dht/gnunet-service-dht_neighbours.c:1692 2285#: src/dht/gnunet-service-dht_neighbours.c:1668
2352#, fuzzy 2286#, fuzzy
2353msgid "# P2P PUT bytes received" 2287msgid "# P2P PUT bytes received"
2354msgstr "# các yêu cầu get (lấy) dht được nhận" 2288msgstr "# các yêu cầu get (lấy) dht được nhận"
2355 2289
2356#: src/dht/gnunet-service-dht_neighbours.c:1924 2290#: src/dht/gnunet-service-dht_neighbours.c:1900
2357#, fuzzy 2291#, fuzzy
2358msgid "# FIND PEER requests ignored due to Bloomfilter" 2292msgid "# FIND PEER requests ignored due to Bloomfilter"
2359msgstr "# các yêu cầu được lá»c theo bá»™ lá»c bloom" 2293msgstr "# các yêu cầu được lá»c theo bá»™ lá»c bloom"
2360 2294
2361#: src/dht/gnunet-service-dht_neighbours.c:1933 2295#: src/dht/gnunet-service-dht_neighbours.c:1909
2362msgid "# FIND PEER requests ignored due to lack of HELLO" 2296msgid "# FIND PEER requests ignored due to lack of HELLO"
2363msgstr "" 2297msgstr ""
2364 2298
2365#: src/dht/gnunet-service-dht_neighbours.c:2096 2299#: src/dht/gnunet-service-dht_neighbours.c:2072
2366#, fuzzy 2300#, fuzzy
2367msgid "# P2P GET requests received" 2301msgid "# P2P GET requests received"
2368msgstr "# các yêu cầu get (lấy) dht được nhận" 2302msgstr "# các yêu cầu get (lấy) dht được nhận"
2369 2303
2370#: src/dht/gnunet-service-dht_neighbours.c:2100 2304#: src/dht/gnunet-service-dht_neighbours.c:2076
2371#, fuzzy 2305#, fuzzy
2372msgid "# P2P GET bytes received" 2306msgid "# P2P GET bytes received"
2373msgstr "# các yêu cầu get (lấy) dht được nhận" 2307msgstr "# các yêu cầu get (lấy) dht được nhận"
2374 2308
2375#: src/dht/gnunet-service-dht_neighbours.c:2166 2309#: src/dht/gnunet-service-dht_neighbours.c:2142
2376#, fuzzy 2310#, fuzzy
2377msgid "# P2P FIND PEER requests processed" 2311msgid "# P2P FIND PEER requests processed"
2378msgstr "# các yêu cầu get (lấy) dht được nhận" 2312msgstr "# các yêu cầu get (lấy) dht được nhận"
2379 2313
2380#: src/dht/gnunet-service-dht_neighbours.c:2187 2314#: src/dht/gnunet-service-dht_neighbours.c:2163
2381#, fuzzy 2315#, fuzzy
2382msgid "# P2P GET requests ONLY routed" 2316msgid "# P2P GET requests ONLY routed"
2383msgstr "# các yêu cầu dht được định tuyến" 2317msgstr "# các yêu cầu dht được định tuyến"
2384 2318
2385#: src/dht/gnunet-service-dht_neighbours.c:2365 2319#: src/dht/gnunet-service-dht_neighbours.c:2341
2386msgid "# Expired results discarded" 2320msgid "# Expired results discarded"
2387msgstr "" 2321msgstr ""
2388 2322
2389#: src/dht/gnunet-service-dht_neighbours.c:2382 2323#: src/dht/gnunet-service-dht_neighbours.c:2358
2390#, fuzzy 2324#, fuzzy
2391msgid "# P2P RESULTS received" 2325msgid "# P2P RESULTS received"
2392msgstr "# Tín hiệu HTTP PUT được nhận" 2326msgstr "# Tín hiệu HTTP PUT được nhận"
2393 2327
2394#: src/dht/gnunet-service-dht_neighbours.c:2386 2328#: src/dht/gnunet-service-dht_neighbours.c:2362
2395#, fuzzy 2329#, fuzzy
2396msgid "# P2P RESULT bytes received" 2330msgid "# P2P RESULT bytes received"
2397msgstr "# Tín hiệu HTTP PUT được nhận" 2331msgstr "# Tín hiệu HTTP PUT được nhận"
@@ -2434,6 +2368,54 @@ msgstr ""
2434msgid "# DHT requests combined" 2368msgid "# DHT requests combined"
2435msgstr "# các yêu cầu get (lấy) dht được nhận" 2369msgstr "# các yêu cầu get (lấy) dht được nhận"
2436 2370
2371#: src/dht/gnunet_dht_profiler.c:922 src/testbed/gnunet-testbed-profiler.c:255
2372#, fuzzy, c-format
2373msgid "Exiting as the number of peers is %u\n"
2374msgstr "tăng sổ tối đa các kết nối TCP/IP"
2375
2376#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3136
2377#, fuzzy
2378msgid "number of peers to start"
2379msgstr "số lần lặp lại"
2380
2381#: src/dht/gnunet_dht_profiler.c:961
2382msgid "number of PUTs to perform per peer"
2383msgstr ""
2384
2385#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872
2386#: src/testbed/gnunet-testbed-profiler.c:305
2387msgid "name of the file with the login information for the testbed"
2388msgstr ""
2389
2390#: src/dht/gnunet_dht_profiler.c:973
2391msgid "delay between rounds for collecting statistics (default: 30 sec)"
2392msgstr ""
2393
2394#: src/dht/gnunet_dht_profiler.c:979
2395msgid "delay to start doing PUTs (default: 1 sec)"
2396msgstr ""
2397
2398#: src/dht/gnunet_dht_profiler.c:985
2399msgid "delay to start doing GETs (default: 5 min)"
2400msgstr ""
2401
2402#: src/dht/gnunet_dht_profiler.c:990
2403msgid "replication degree for DHT PUTs"
2404msgstr ""
2405
2406#: src/dht/gnunet_dht_profiler.c:996
2407msgid "chance that a peer is selected at random for PUTs"
2408msgstr ""
2409
2410#: src/dht/gnunet_dht_profiler.c:1002
2411msgid "timeout for DHT PUT and GET requests (default: 1 min)"
2412msgstr ""
2413
2414#: src/dht/gnunet_dht_profiler.c:1023
2415#, fuzzy
2416msgid "Measure quality and performance of the DHT service."
2417msgstr "Không thể truy cập đến dịch vụ"
2418
2437#: src/dht/plugin_block_dht.c:189 2419#: src/dht/plugin_block_dht.c:189
2438#, fuzzy, c-format 2420#, fuzzy, c-format
2439msgid "Block not of type %u\n" 2421msgid "Block not of type %u\n"
@@ -2875,7 +2857,7 @@ msgstr ""
2875#: src/fs/fs_download.c:346 2857#: src/fs/fs_download.c:346
2876#, fuzzy, c-format 2858#, fuzzy, c-format
2877msgid "" 2859msgid ""
2878"Failed to access full directroy contents of `%s' for recursive download\n" 2860"Failed to access full directory contents of `%s' for recursive download\n"
2879msgstr "Lỗi cập nhật dữ liệu cho mô-đun « %s »\n" 2861msgstr "Lỗi cập nhật dữ liệu cho mô-đun « %s »\n"
2880 2862
2881#: src/fs/fs_download.c:528 src/fs/fs_download.c:541 2863#: src/fs/fs_download.c:528 src/fs/fs_download.c:541
@@ -3386,15 +3368,6 @@ msgid ""
3386"chk/...)" 3368"chk/...)"
3387msgstr "" 3369msgstr ""
3388 3370
3389#: src/fs/gnunet-fs.c:128
3390msgid "print a list of all indexed files"
3391msgstr ""
3392
3393#: src/fs/gnunet-fs.c:141
3394#, fuzzy
3395msgid "Special file-sharing operations"
3396msgstr "Tùy chá»n chia sẻ tập tin"
3397
3398#: src/fs/gnunet-fs-profiler.c:211 3371#: src/fs/gnunet-fs-profiler.c:211
3399msgid "run the experiment with COUNT peers" 3372msgid "run the experiment with COUNT peers"
3400msgstr "" 3373msgstr ""
@@ -3411,6 +3384,15 @@ msgstr ""
3411msgid "run a testbed to measure file-sharing performance" 3384msgid "run a testbed to measure file-sharing performance"
3412msgstr "" 3385msgstr ""
3413 3386
3387#: src/fs/gnunet-fs.c:128
3388msgid "print a list of all indexed files"
3389msgstr ""
3390
3391#: src/fs/gnunet-fs.c:141
3392#, fuzzy
3393msgid "Special file-sharing operations"
3394msgstr "Tùy chá»n chia sẻ tập tin"
3395
3414#: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:234 3396#: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:234
3415#, c-format 3397#, c-format
3416msgid "Publishing `%s' at %llu/%llu (%s remaining)\n" 3398msgid "Publishing `%s' at %llu/%llu (%s remaining)\n"
@@ -4126,53 +4108,7 @@ msgstr ""
4126msgid "look for GNS2DNS records instead of ANY" 4108msgid "look for GNS2DNS records instead of ANY"
4127msgstr "" 4109msgstr ""
4128 4110
4129#: src/gns/gnunet-gns.c:257 4111#: src/gns/gnunet-gns-import.c:490
4130#, fuzzy, c-format
4131msgid "`%s' is not a valid DNS domain name\n"
4132msgstr "« %s » không sẵn sàng.\n"
4133
4134#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254
4135#, fuzzy, c-format
4136msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n"
4137msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
4138
4139#: src/gns/gnunet-gns.c:281
4140msgid "Cannot resolve using GNS: GNUnet peer not running\n"
4141msgstr ""
4142
4143#: src/gns/gnunet-gns.c:305
4144#, c-format
4145msgid "Invalid typename specified, assuming `ANY'\n"
4146msgstr ""
4147
4148#: src/gns/gnunet-gns.c:340
4149msgid "Lookup a record for the given name"
4150msgstr ""
4151
4152#: src/gns/gnunet-gns.c:346
4153#, fuzzy
4154msgid "Specify the type of the record to lookup"
4155msgstr "xác định mức ưu tiên của nội dung"
4156
4157#: src/gns/gnunet-gns.c:352
4158#, fuzzy
4159msgid "Specify a timeout for the lookup"
4160msgstr "xác định mức ưu tiên của nội dung"
4161
4162#: src/gns/gnunet-gns.c:356
4163msgid "No unneeded output"
4164msgstr ""
4165
4166#: src/gns/gnunet-gns.c:361
4167msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8"
4168msgstr ""
4169
4170#: src/gns/gnunet-gns.c:375
4171#, fuzzy
4172msgid "GNUnet GNS resolver tool"
4173msgstr "Bản ghi lỗi GNUnet"
4174
4175#: src/gns/gnunet-gns-import.c:491
4176msgid "This program will import some GNS authorities into your GNS namestore." 4112msgid "This program will import some GNS authorities into your GNS namestore."
4177msgstr "" 4113msgstr ""
4178 4114
@@ -4292,6 +4228,52 @@ msgstr ""
4292msgid "GNUnet GNS proxy" 4228msgid "GNUnet GNS proxy"
4293msgstr "" 4229msgstr ""
4294 4230
4231#: src/gns/gnunet-gns.c:257
4232#, fuzzy, c-format
4233msgid "`%s' is not a valid DNS domain name\n"
4234msgstr "« %s » không sẵn sàng.\n"
4235
4236#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254
4237#, fuzzy, c-format
4238msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n"
4239msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
4240
4241#: src/gns/gnunet-gns.c:281
4242msgid "Cannot resolve using GNS: GNUnet peer not running\n"
4243msgstr ""
4244
4245#: src/gns/gnunet-gns.c:305
4246#, c-format
4247msgid "Invalid typename specified, assuming `ANY'\n"
4248msgstr ""
4249
4250#: src/gns/gnunet-gns.c:340
4251msgid "Lookup a record for the given name"
4252msgstr ""
4253
4254#: src/gns/gnunet-gns.c:346
4255#, fuzzy
4256msgid "Specify the type of the record to lookup"
4257msgstr "xác định mức ưu tiên của nội dung"
4258
4259#: src/gns/gnunet-gns.c:352
4260#, fuzzy
4261msgid "Specify a timeout for the lookup"
4262msgstr "xác định mức ưu tiên của nội dung"
4263
4264#: src/gns/gnunet-gns.c:356
4265msgid "No unneeded output"
4266msgstr ""
4267
4268#: src/gns/gnunet-gns.c:361
4269msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8"
4270msgstr ""
4271
4272#: src/gns/gnunet-gns.c:375
4273#, fuzzy
4274msgid "GNUnet GNS resolver tool"
4275msgstr "Bản ghi lỗi GNUnet"
4276
4295#: src/gns/gnunet-service-gns.c:505 4277#: src/gns/gnunet-service-gns.c:505
4296#, fuzzy 4278#, fuzzy
4297msgid "Properly base32-encoded public key required" 4279msgid "Properly base32-encoded public key required"
@@ -4303,8 +4285,8 @@ msgid "Failed to connect to the namecache!\n"
4303msgstr "Không kết nối được đến trình ná»n gnunetd." 4285msgstr "Không kết nối được đến trình ná»n gnunetd."
4304 4286
4305#: src/gns/gnunet-service-gns.c:560 4287#: src/gns/gnunet-service-gns.c:560
4306#: src/zonemaster/gnunet-service-zonemaster.c:885
4307#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442 4288#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442
4289#: src/zonemaster/gnunet-service-zonemaster.c:885
4308#, fuzzy 4290#, fuzzy
4309msgid "Could not connect to DHT!\n" 4291msgid "Could not connect to DHT!\n"
4310msgstr "Không thể kết nối tới %s:%u: %s\n" 4292msgstr "Không thể kết nối tới %s:%u: %s\n"
@@ -4874,52 +4856,52 @@ msgstr "Không thể tạo miá»n tên.\n"
4874msgid "Failed to set default ego: %s\n" 4856msgid "Failed to set default ego: %s\n"
4875msgstr "Không thể tạo miá»n tên.\n" 4857msgstr "Không thể tạo miá»n tên.\n"
4876 4858
4877#: src/identity/gnunet-identity.c:462 4859#: src/identity/gnunet-identity.c:461
4878msgid "create ego NAME" 4860msgid "create ego NAME"
4879msgstr "" 4861msgstr ""
4880 4862
4881#: src/identity/gnunet-identity.c:467 4863#: src/identity/gnunet-identity.c:466
4882msgid "delete ego NAME " 4864msgid "delete ego NAME "
4883msgstr "" 4865msgstr ""
4884 4866
4885#: src/identity/gnunet-identity.c:473 4867#: src/identity/gnunet-identity.c:472
4886msgid "" 4868msgid ""
4887"set the private key for the identity to PRIVATE_KEY (use together with -C)" 4869"set the private key for the identity to PRIVATE_KEY (use together with -C)"
4888msgstr "" 4870msgstr ""
4889 4871
4890#: src/identity/gnunet-identity.c:478 4872#: src/identity/gnunet-identity.c:477
4891msgid "generate an EdDSA identity. (use together with -C) EXPERIMENTAL" 4873msgid "generate an EdDSA identity. (use together with -C) EXPERIMENTAL"
4892msgstr "" 4874msgstr ""
4893 4875
4894#: src/identity/gnunet-identity.c:482 4876#: src/identity/gnunet-identity.c:481
4895msgid "display all egos" 4877msgid "display all egos"
4896msgstr "" 4878msgstr ""
4897 4879
4898#: src/identity/gnunet-identity.c:486 4880#: src/identity/gnunet-identity.c:485
4899msgid "reduce output" 4881msgid "reduce output"
4900msgstr "" 4882msgstr ""
4901 4883
4902#: src/identity/gnunet-identity.c:493 4884#: src/identity/gnunet-identity.c:492
4903msgid "" 4885msgid ""
4904"set default identity to NAME for a subsystem SUBSYSTEM (use together with -" 4886"set default identity to NAME for a subsystem SUBSYSTEM (use together with -"
4905"s) or restrict results to NAME (use together with -d)" 4887"s) or restrict results to NAME (use together with -d)"
4906msgstr "" 4888msgstr ""
4907 4889
4908#: src/identity/gnunet-identity.c:497 4890#: src/identity/gnunet-identity.c:496
4909msgid "run in monitor mode egos" 4891msgid "run in monitor mode egos"
4910msgstr "" 4892msgstr ""
4911 4893
4912#: src/identity/gnunet-identity.c:501 4894#: src/identity/gnunet-identity.c:500
4913#, fuzzy 4895#, fuzzy
4914msgid "display private keys as well" 4896msgid "display private keys as well"
4915msgstr "hiển thị giá trị tổng kiểm của tập tin" 4897msgstr "hiển thị giá trị tổng kiểm của tập tin"
4916 4898
4917#: src/identity/gnunet-identity.c:508 4899#: src/identity/gnunet-identity.c:507
4918msgid "" 4900msgid ""
4919"set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)" 4901"set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)"
4920msgstr "" 4902msgstr ""
4921 4903
4922#: src/identity/gnunet-identity.c:523 4904#: src/identity/gnunet-identity.c:522
4923msgid "Maintain egos" 4905msgid "Maintain egos"
4924msgstr "" 4906msgstr ""
4925 4907
@@ -4970,12 +4952,12 @@ msgstr "Không thể lưu tập tin cấu hình « %s »:"
4970msgid "Failed to create directory `%s' for storing egos\n" 4952msgid "Failed to create directory `%s' for storing egos\n"
4971msgstr "Lá»—i Ä‘á»c danh sách bạn bè từ « %s »\n" 4953msgstr "Lá»—i Ä‘á»c danh sách bạn bè từ « %s »\n"
4972 4954
4973#: src/identity/plugin_rest_identity.c:1385 4955#: src/identity/plugin_rest_identity.c:1401
4974#, fuzzy 4956#, fuzzy
4975msgid "Identity REST API initialized\n" 4957msgid "Identity REST API initialized\n"
4976msgstr "Lỗi sơ khởi lõi.\n" 4958msgstr "Lỗi sơ khởi lõi.\n"
4977 4959
4978#: src/json/json.c:139 4960#: src/json/json.c:120
4979#, fuzzy, c-format 4961#, fuzzy, c-format
4980msgid "Failed to parse JSON in option `%s': %s (%s)\n" 4962msgid "Failed to parse JSON in option `%s': %s (%s)\n"
4981msgstr "Lá»—i Ä‘á»c danh sách bạn bè từ « %s »\n" 4963msgstr "Lá»—i Ä‘á»c danh sách bạn bè từ « %s »\n"
@@ -5034,11 +5016,11 @@ msgstr "xác định mức ưu tiên của nội dung"
5034msgid "GNUnet zone manipulation tool" 5016msgid "GNUnet zone manipulation tool"
5035msgstr "Cấu hình GNUnet" 5017msgstr "Cấu hình GNUnet"
5036 5018
5037#: src/namecache/namecache_api.c:285 5019#: src/namecache/namecache_api.c:286
5038msgid "Namecache failed to cache block" 5020msgid "Namecache failed to cache block"
5039msgstr "" 5021msgstr ""
5040 5022
5041#: src/namecache/namecache_api.c:373 5023#: src/namecache/namecache_api.c:374
5042#, fuzzy 5024#, fuzzy
5043msgid "Error communicating with namecache service" 5025msgid "Error communicating with namecache service"
5044msgstr "Cổng để liên lạc vá»›i giao diện ngÆ°á»i dùng GNUnet" 5026msgstr "Cổng để liên lạc vá»›i giao diện ngÆ°á»i dùng GNUnet"
@@ -5079,6 +5061,115 @@ msgstr "kho dữ liệu sqlite"
5079msgid "Failed to setup database at `%s'\n" 5061msgid "Failed to setup database at `%s'\n"
5080msgstr "Lỗi chạy %s: %s %d\n" 5062msgstr "Lỗi chạy %s: %s %d\n"
5081 5063
5064#: src/namestore/gnunet-namestore-fcfsd.c:359
5065#, fuzzy
5066msgid "can not search the namestore"
5067msgstr "Không kết nối được đến trình ná»n gnunetd."
5068
5069#: src/namestore/gnunet-namestore-fcfsd.c:413
5070#: src/namestore/gnunet-namestore-fcfsd.c:554
5071#, fuzzy
5072msgid "unable to scan namestore"
5073msgstr "Không kết nối được đến trình ná»n gnunetd."
5074
5075#: src/namestore/gnunet-namestore-fcfsd.c:441
5076#, fuzzy, c-format
5077msgid "Failed to create record for `%s': %s\n"
5078msgstr "Không thể truy cập đến tập tin gnunet-directory « %s »\n"
5079
5080#: src/namestore/gnunet-namestore-fcfsd.c:453
5081#, fuzzy
5082msgid "no errors"
5083msgstr "Lỗi không rõ"
5084
5085#: src/namestore/gnunet-namestore-fcfsd.c:489
5086#, fuzzy, c-format
5087msgid "The requested key `%s' exists as `%s'\n"
5088msgstr "Äã tạo mục nhập « %s » trong không gian tên « %s »\n"
5089
5090#: src/namestore/gnunet-namestore-fcfsd.c:496
5091msgid "key exists"
5092msgstr ""
5093
5094#: src/namestore/gnunet-namestore-fcfsd.c:513
5095#, fuzzy
5096msgid "Error creating record data\n"
5097msgstr "=\tLá»—i Ä‘á»c thÆ° mục.\n"
5098
5099#: src/namestore/gnunet-namestore-fcfsd.c:517
5100#, fuzzy
5101msgid "unable to store record"
5102msgstr "Lỗi bắt đầu thu thập.\n"
5103
5104#: src/namestore/gnunet-namestore-fcfsd.c:588
5105#, c-format
5106msgid "Requested name `%s' exists with `%u' records\n"
5107msgstr ""
5108
5109#: src/namestore/gnunet-namestore-fcfsd.c:594
5110msgid "name exists\n"
5111msgstr ""
5112
5113#: src/namestore/gnunet-namestore-fcfsd.c:780
5114msgid "unable to process submitted data"
5115msgstr ""
5116
5117#: src/namestore/gnunet-namestore-fcfsd.c:787
5118msgid "the submitted data is invalid"
5119msgstr ""
5120
5121#: src/namestore/gnunet-namestore-fcfsd.c:806
5122#, fuzzy
5123msgid "invalid parameters"
5124msgstr "Äối số không hợp lệ cho « %s ».\n"
5125
5126#: src/namestore/gnunet-namestore-fcfsd.c:823
5127#, fuzzy
5128msgid "invalid name"
5129msgstr "Äối số không hợp lệ cho « %s ».\n"
5130
5131#: src/namestore/gnunet-namestore-fcfsd.c:834
5132#, fuzzy, c-format
5133msgid "Unable to parse key %s\n"
5134msgstr "Lá»—i Ä‘á»c danh sách bạn bè từ « %s »\n"
5135
5136#: src/namestore/gnunet-namestore-fcfsd.c:838
5137#, fuzzy
5138msgid "unable to parse key"
5139msgstr "Lá»—i Ä‘á»c danh sách bạn bè từ « %s »\n"
5140
5141#: src/namestore/gnunet-namestore-fcfsd.c:949
5142msgid "No ego configured for `fcfsd` subsystem\n"
5143msgstr ""
5144
5145#: src/namestore/gnunet-namestore-fcfsd.c:974
5146#, fuzzy
5147msgid "Failed to start HTTP server\n"
5148msgstr "Lỗi bắt đầu thu thập.\n"
5149
5150#: src/namestore/gnunet-namestore-fcfsd.c:1058
5151#, fuzzy
5152msgid "No port specified, using default value\n"
5153msgstr "Tập tin cấu hình « %s » đã được ghi.\n"
5154
5155#: src/namestore/gnunet-namestore-fcfsd.c:1076
5156#, fuzzy
5157msgid "Failed to connect to identity\n"
5158msgstr "Lỗi kết nối đến gnunetd.\n"
5159
5160#: src/namestore/gnunet-namestore-fcfsd.c:1100
5161#, fuzzy
5162msgid "Unable to set up the daemon\n"
5163msgstr "Không thể tạo tài khoản ngÆ°á»i dùng cho trình ná»n."
5164
5165#: src/namestore/gnunet-namestore-fcfsd.c:1123
5166msgid "name of the zone managed by FCFSD"
5167msgstr ""
5168
5169#: src/namestore/gnunet-namestore-fcfsd.c:1132
5170msgid "GNU Name System First-Come-First-Served name registration service"
5171msgstr ""
5172
5082#: src/namestore/gnunet-namestore.c:334 5173#: src/namestore/gnunet-namestore.c:334
5083#, fuzzy, c-format 5174#, fuzzy, c-format
5084msgid "Adding record failed: %s\n" 5175msgid "Adding record failed: %s\n"
@@ -5319,85 +5410,16 @@ msgstr ""
5319msgid "name of the ego controlling the zone" 5410msgid "name of the ego controlling the zone"
5320msgstr "" 5411msgstr ""
5321 5412
5322#: src/namestore/gnunet-namestore-fcfsd.c:552
5323#, fuzzy, c-format
5324msgid "Unsupported form value `%s'\n"
5325msgstr "Lệnh không được há»— trợ « %s ». Äang hủy bá».\n"
5326
5327#: src/namestore/gnunet-namestore-fcfsd.c:579
5328#, fuzzy, c-format
5329msgid "Failed to create record for domain `%s': %s\n"
5330msgstr "Không thể truy cập đến tập tin gnunet-directory « %s »\n"
5331
5332#: src/namestore/gnunet-namestore-fcfsd.c:600
5333msgid "Error when mapping zone to name\n"
5334msgstr ""
5335
5336#: src/namestore/gnunet-namestore-fcfsd.c:633
5337#, c-format
5338msgid "Found existing name `%s' for the given key\n"
5339msgstr ""
5340
5341#: src/namestore/gnunet-namestore-fcfsd.c:646
5342#, fuzzy
5343msgid "Error creating record data.\n"
5344msgstr "=\tLá»—i Ä‘á»c thÆ° mục.\n"
5345
5346#: src/namestore/gnunet-namestore-fcfsd.c:707
5347#, c-format
5348msgid "Found %u existing records for domain `%s'\n"
5349msgstr ""
5350
5351#: src/namestore/gnunet-namestore-fcfsd.c:796
5352#, fuzzy, c-format
5353msgid "Failed to create page for `%s'\n"
5354msgstr "Không thể tạo miá»n tên.\n"
5355
5356#: src/namestore/gnunet-namestore-fcfsd.c:815
5357#, fuzzy, c-format
5358msgid "Failed to setup post processor for `%s'\n"
5359msgstr "Lỗi cập nhật dữ liệu cho mô-đun « %s »\n"
5360
5361#: src/namestore/gnunet-namestore-fcfsd.c:850
5362msgid "Domain name must not contain `.'\n"
5363msgstr ""
5364
5365#: src/namestore/gnunet-namestore-fcfsd.c:859
5366msgid "Domain name must not contain `+'\n"
5367msgstr ""
5368
5369#: src/namestore/gnunet-namestore-fcfsd.c:1094
5370msgid "No ego configured for `fcfsd` subsystem\n"
5371msgstr ""
5372
5373#: src/namestore/gnunet-namestore-fcfsd.c:1125
5374#, fuzzy
5375msgid "Failed to start HTTP server\n"
5376msgstr "Lỗi bắt đầu thu thập.\n"
5377
5378#: src/namestore/gnunet-namestore-fcfsd.c:1173
5379#, fuzzy
5380msgid "Failed to connect to identity\n"
5381msgstr "Lỗi kết nối đến gnunetd.\n"
5382
5383#: src/namestore/gnunet-namestore-fcfsd.c:1200
5384msgid "name of the zone that is to be managed by FCFSD"
5385msgstr ""
5386
5387#: src/namestore/gnunet-namestore-fcfsd.c:1220
5388msgid "GNU Name System First Come First Serve name registration service"
5389msgstr ""
5390
5391#: src/namestore/gnunet-service-namestore.c:871 5413#: src/namestore/gnunet-service-namestore.c:871
5392#, fuzzy, c-format 5414#, fuzzy, c-format
5393msgid "Failed to replicate block in namecache: %s\n" 5415msgid "Failed to replicate block in namecache: %s\n"
5394msgstr "Lỗi cập nhật dữ liệu cho mô-đun « %s »\n" 5416msgstr "Lỗi cập nhật dữ liệu cho mô-đun « %s »\n"
5395 5417
5396#: src/namestore/gnunet-zoneimport.c:1848 5418#: src/namestore/gnunet-zoneimport.c:1847
5397msgid "size to use for the main hash map" 5419msgid "size to use for the main hash map"
5398msgstr "" 5420msgstr ""
5399 5421
5400#: src/namestore/gnunet-zoneimport.c:1854 5422#: src/namestore/gnunet-zoneimport.c:1853
5401msgid "minimum expiration time we assume for imported records" 5423msgid "minimum expiration time we assume for imported records"
5402msgstr "" 5424msgstr ""
5403 5425
@@ -5420,7 +5442,7 @@ msgstr ""
5420msgid "Flat file database running\n" 5442msgid "Flat file database running\n"
5421msgstr "kho dữ liệu sqlite" 5443msgstr "kho dữ liệu sqlite"
5422 5444
5423#: src/namestore/plugin_rest_namestore.c:1105 5445#: src/namestore/plugin_rest_namestore.c:1111
5424#, fuzzy 5446#, fuzzy
5425msgid "Namestore REST API initialized\n" 5447msgid "Namestore REST API initialized\n"
5426msgstr "Lỗi sơ khởi lõi.\n" 5448msgstr "Lỗi sơ khởi lõi.\n"
@@ -5707,11 +5729,6 @@ msgstr ""
5707msgid "`upnpc' command not found\n" 5729msgid "`upnpc' command not found\n"
5708msgstr "" 5730msgstr ""
5709 5731
5710#: src/nse/gnunet-nse.c:124
5711#, fuzzy
5712msgid "Show network size estimates from NSE service."
5713msgstr "# các yêu cầu get (lấy) dht được nhận"
5714
5715#: src/nse/gnunet-nse-profiler.c:857 5732#: src/nse/gnunet-nse-profiler.c:857
5716#, fuzzy 5733#, fuzzy
5717msgid "limit to the number of connections to NSE services, 0 for none" 5734msgid "limit to the number of connections to NSE services, 0 for none"
@@ -5738,71 +5755,17 @@ msgstr ""
5738msgid "Measure quality and performance of the NSE service." 5755msgid "Measure quality and performance of the NSE service."
5739msgstr "Không thể truy cập đến dịch vụ" 5756msgstr "Không thể truy cập đến dịch vụ"
5740 5757
5758#: src/nse/gnunet-nse.c:124
5759#, fuzzy
5760msgid "Show network size estimates from NSE service."
5761msgstr "# các yêu cầu get (lấy) dht được nhận"
5762
5741#: src/nse/gnunet-service-nse.c:1450 5763#: src/nse/gnunet-service-nse.c:1450
5742#: src/revocation/gnunet-service-revocation.c:883 src/util/gnunet-scrypt.c:260 5764#: src/revocation/gnunet-service-revocation.c:883 src/util/gnunet-scrypt.c:260
5743#, fuzzy 5765#, fuzzy
5744msgid "Value is too large.\n" 5766msgid "Value is too large.\n"
5745msgstr "Giá trị không nằm trong phạm vi được phép." 5767msgstr "Giá trị không nằm trong phạm vi được phép."
5746 5768
5747#: src/peerinfo/gnunet-service-peerinfo.c:175
5748#, fuzzy, c-format
5749msgid "Removing expired address of transport `%s'\n"
5750msgstr "Äã nạp truyá»n tải « %s »\n"
5751
5752#: src/peerinfo/gnunet-service-peerinfo.c:306
5753#, fuzzy, c-format
5754msgid "Failed to parse HELLO in file `%s': %s\n"
5755msgstr "Lá»—i Ä‘á»c danh sách bạn bè từ « %s »\n"
5756
5757#: src/peerinfo/gnunet-service-peerinfo.c:323
5758#: src/peerinfo/gnunet-service-peerinfo.c:348
5759#, fuzzy, c-format
5760msgid "Failed to parse HELLO in file `%s'\n"
5761msgstr "Lá»—i Ä‘á»c danh sách bạn bè từ « %s »\n"
5762
5763#: src/peerinfo/gnunet-service-peerinfo.c:426
5764msgid "# peers known"
5765msgstr ""
5766
5767#: src/peerinfo/gnunet-service-peerinfo.c:468
5768#, c-format
5769msgid ""
5770"File `%s' in directory `%s' does not match naming convention. Removed.\n"
5771msgstr ""
5772"Tập tin « %s » trong thư mục « %s » không tùy theo quy ước đặt tên. Bị gỡ "
5773"bá».\n"
5774
5775#: src/peerinfo/gnunet-service-peerinfo.c:624
5776#, fuzzy, c-format
5777msgid "Scanning directory `%s'\n"
5778msgstr "Lá»—i Ä‘á»c danh sách bạn bè từ « %s »\n"
5779
5780#: src/peerinfo/gnunet-service-peerinfo.c:631
5781#, c-format
5782msgid "Still no peers found in `%s'!\n"
5783msgstr "Vẫn còn không tìm thấy đồng đẳng trong « %s ».\n"
5784
5785#: src/peerinfo/gnunet-service-peerinfo.c:1027
5786#, fuzzy, c-format
5787msgid "Cleaning up directory `%s'\n"
5788msgstr "Lá»—i Ä‘á»c danh sách bạn bè từ « %s »\n"
5789
5790#: src/peerinfo/gnunet-service-peerinfo.c:1322
5791#, c-format
5792msgid "Importing HELLOs from `%s'\n"
5793msgstr ""
5794
5795#: src/peerinfo/gnunet-service-peerinfo.c:1335
5796msgid "Skipping import of included HELLOs\n"
5797msgstr ""
5798
5799#: src/peerinfo/peerinfo_api.c:217
5800#, fuzzy
5801msgid "Failed to receive response from `PEERINFO' service."
5802msgstr ""
5803"\n"
5804"Không nhận được đáp ứng từ gnunetd.\n"
5805
5806#: src/peerinfo-tool/gnunet-peerinfo.c:237 5769#: src/peerinfo-tool/gnunet-peerinfo.c:237
5807#, fuzzy, c-format 5770#, fuzzy, c-format
5808msgid "%sPeer `%s'\n" 5771msgid "%sPeer `%s'\n"
@@ -5900,6 +5863,65 @@ msgstr "Không thể nạp phần bổ sung truyá»n tải « %s »\n"
5900msgid "Peerinfo REST API initialized\n" 5863msgid "Peerinfo REST API initialized\n"
5901msgstr "Lỗi sơ khởi lõi.\n" 5864msgstr "Lỗi sơ khởi lõi.\n"
5902 5865
5866#: src/peerinfo/gnunet-service-peerinfo.c:175
5867#, fuzzy, c-format
5868msgid "Removing expired address of transport `%s'\n"
5869msgstr "Äã nạp truyá»n tải « %s »\n"
5870
5871#: src/peerinfo/gnunet-service-peerinfo.c:306
5872#, fuzzy, c-format
5873msgid "Failed to parse HELLO in file `%s': %s\n"
5874msgstr "Lá»—i Ä‘á»c danh sách bạn bè từ « %s »\n"
5875
5876#: src/peerinfo/gnunet-service-peerinfo.c:323
5877#: src/peerinfo/gnunet-service-peerinfo.c:348
5878#, fuzzy, c-format
5879msgid "Failed to parse HELLO in file `%s'\n"
5880msgstr "Lá»—i Ä‘á»c danh sách bạn bè từ « %s »\n"
5881
5882#: src/peerinfo/gnunet-service-peerinfo.c:426
5883msgid "# peers known"
5884msgstr ""
5885
5886#: src/peerinfo/gnunet-service-peerinfo.c:468
5887#, c-format
5888msgid ""
5889"File `%s' in directory `%s' does not match naming convention. Removed.\n"
5890msgstr ""
5891"Tập tin « %s » trong thư mục « %s » không tùy theo quy ước đặt tên. Bị gỡ "
5892"bá».\n"
5893
5894#: src/peerinfo/gnunet-service-peerinfo.c:624
5895#, fuzzy, c-format
5896msgid "Scanning directory `%s'\n"
5897msgstr "Lá»—i Ä‘á»c danh sách bạn bè từ « %s »\n"
5898
5899#: src/peerinfo/gnunet-service-peerinfo.c:631
5900#, c-format
5901msgid "Still no peers found in `%s'!\n"
5902msgstr "Vẫn còn không tìm thấy đồng đẳng trong « %s ».\n"
5903
5904#: src/peerinfo/gnunet-service-peerinfo.c:1027
5905#, fuzzy, c-format
5906msgid "Cleaning up directory `%s'\n"
5907msgstr "Lá»—i Ä‘á»c danh sách bạn bè từ « %s »\n"
5908
5909#: src/peerinfo/gnunet-service-peerinfo.c:1322
5910#, c-format
5911msgid "Importing HELLOs from `%s'\n"
5912msgstr ""
5913
5914#: src/peerinfo/gnunet-service-peerinfo.c:1335
5915msgid "Skipping import of included HELLOs\n"
5916msgstr ""
5917
5918#: src/peerinfo/peerinfo_api.c:217
5919#, fuzzy
5920msgid "Failed to receive response from `PEERINFO' service."
5921msgstr ""
5922"\n"
5923"Không nhận được đáp ứng từ gnunetd.\n"
5924
5903#: src/peerstore/gnunet-peerstore.c:92 5925#: src/peerstore/gnunet-peerstore.c:92
5904msgid "peerstore" 5926msgid "peerstore"
5905msgstr "" 5927msgstr ""
@@ -6094,12 +6116,12 @@ msgstr ""
6094msgid "re:claimID command line tool" 6116msgid "re:claimID command line tool"
6095msgstr "" 6117msgstr ""
6096 6118
6097#: src/reclaim/plugin_rest_openid_connect.c:2788 6119#: src/reclaim/plugin_rest_openid_connect.c:2793
6098#, fuzzy 6120#, fuzzy
6099msgid "OpenID Connect REST API initialized\n" 6121msgid "OpenID Connect REST API initialized\n"
6100msgstr "Lỗi sơ khởi lõi.\n" 6122msgstr "Lỗi sơ khởi lõi.\n"
6101 6123
6102#: src/reclaim/plugin_rest_reclaim.c:1521 6124#: src/reclaim/plugin_rest_pabc.c:637 src/reclaim/plugin_rest_reclaim.c:1520
6103#, fuzzy 6125#, fuzzy
6104msgid "Identity Provider REST API initialized\n" 6126msgid "Identity Provider REST API initialized\n"
6105msgstr "Lỗi sơ khởi lõi.\n" 6127msgstr "Lỗi sơ khởi lõi.\n"
@@ -6118,61 +6140,61 @@ msgstr "Lưu cấu hình ngay bây giỠkhông?"
6118msgid "Daemon to announce regular expressions for the peer using cadet." 6140msgid "Daemon to announce regular expressions for the peer using cadet."
6119msgstr "" 6141msgstr ""
6120 6142
6121#: src/regex/gnunet-regex-profiler.c:1390 6143#: src/regex/gnunet-regex-profiler.c:1392
6122#, fuzzy 6144#, fuzzy
6123msgid "No configuration file given. Exiting\n" 6145msgid "No configuration file given. Exiting\n"
6124msgstr "dùng tập tin cấu hình TÊN_TẬP_TIN" 6146msgstr "dùng tập tin cấu hình TÊN_TẬP_TIN"
6125 6147
6126#: src/regex/gnunet-regex-profiler.c:1432 6148#: src/regex/gnunet-regex-profiler.c:1434
6127#: src/regex/gnunet-regex-simulation-profiler.c:631 6149#: src/regex/gnunet-regex-simulation-profiler.c:631
6128#, c-format 6150#, c-format
6129msgid "No policy directory specified on command line. Exiting.\n" 6151msgid "No policy directory specified on command line. Exiting.\n"
6130msgstr "" 6152msgstr ""
6131 6153
6132#: src/regex/gnunet-regex-profiler.c:1438 6154#: src/regex/gnunet-regex-profiler.c:1440
6133#: src/regex/gnunet-regex-simulation-profiler.c:639 6155#: src/regex/gnunet-regex-simulation-profiler.c:639
6134#, c-format 6156#, c-format
6135msgid "Specified policies directory does not exist. Exiting.\n" 6157msgid "Specified policies directory does not exist. Exiting.\n"
6136msgstr "" 6158msgstr ""
6137 6159
6138#: src/regex/gnunet-regex-profiler.c:1446 6160#: src/regex/gnunet-regex-profiler.c:1448
6139#, fuzzy, c-format 6161#, fuzzy, c-format
6140msgid "No files found in `%s'\n" 6162msgid "No files found in `%s'\n"
6141msgstr "Vẫn còn không tìm thấy đồng đẳng trong « %s ».\n" 6163msgstr "Vẫn còn không tìm thấy đồng đẳng trong « %s ».\n"
6142 6164
6143#: src/regex/gnunet-regex-profiler.c:1455 6165#: src/regex/gnunet-regex-profiler.c:1457
6144msgid "No search strings file given. Exiting.\n" 6166msgid "No search strings file given. Exiting.\n"
6145msgstr "" 6167msgstr ""
6146 6168
6147#: src/regex/gnunet-regex-profiler.c:1475 6169#: src/regex/gnunet-regex-profiler.c:1477
6148#, fuzzy 6170#, fuzzy
6149msgid "Error loading search strings. Exiting.\n" 6171msgid "Error loading search strings. Exiting.\n"
6150msgstr "Gặp lỗi khi tải xuống: %s\n" 6172msgstr "Gặp lỗi khi tải xuống: %s\n"
6151 6173
6152#: src/regex/gnunet-regex-profiler.c:1563 6174#: src/regex/gnunet-regex-profiler.c:1565
6153#, fuzzy 6175#, fuzzy
6154msgid "name of the file for writing statistics" 6176msgid "name of the file for writing statistics"
6155msgstr "Lá»—i lấy thông kê vá» truyá»n tải.\n" 6177msgstr "Lá»—i lấy thông kê vá» truyá»n tải.\n"
6156 6178
6157#: src/regex/gnunet-regex-profiler.c:1570 6179#: src/regex/gnunet-regex-profiler.c:1572
6158msgid "wait TIMEOUT before ending the experiment" 6180msgid "wait TIMEOUT before ending the experiment"
6159msgstr "" 6181msgstr ""
6160 6182
6161#: src/regex/gnunet-regex-profiler.c:1576 6183#: src/regex/gnunet-regex-profiler.c:1578
6162msgid "directory with policy files" 6184msgid "directory with policy files"
6163msgstr "" 6185msgstr ""
6164 6186
6165#: src/regex/gnunet-regex-profiler.c:1584 6187#: src/regex/gnunet-regex-profiler.c:1586
6166#, fuzzy 6188#, fuzzy
6167msgid "name of file with input strings" 6189msgid "name of file with input strings"
6168msgstr "Lá»—i lấy thông kê vá» truyá»n tải.\n" 6190msgstr "Lá»—i lấy thông kê vá» truyá»n tải.\n"
6169 6191
6170#: src/regex/gnunet-regex-profiler.c:1591 6192#: src/regex/gnunet-regex-profiler.c:1593
6171#, fuzzy 6193#, fuzzy
6172msgid "name of file with hosts' names" 6194msgid "name of file with hosts' names"
6173msgstr "Lá»—i lấy thông kê vá» truyá»n tải.\n" 6195msgstr "Lá»—i lấy thông kê vá» truyá»n tải.\n"
6174 6196
6175#: src/regex/gnunet-regex-profiler.c:1604 6197#: src/regex/gnunet-regex-profiler.c:1606
6176msgid "Profiler for regex" 6198msgid "Profiler for regex"
6177msgstr "" 6199msgstr ""
6178 6200
@@ -6198,12 +6220,12 @@ msgstr "« %s » không phải là một tập tin.\n"
6198msgid "Search string `%s' is too long!\n" 6220msgid "Search string `%s' is too long!\n"
6199msgstr "« %s » không phải là một tập tin.\n" 6221msgstr "« %s » không phải là một tập tin.\n"
6200 6222
6201#: src/rest/gnunet-rest-server.c:1266 6223#: src/rest/gnunet-rest-server.c:1267
6202#, fuzzy 6224#, fuzzy
6203msgid "GNUnet REST server" 6225msgid "GNUnet REST server"
6204msgstr "Bản ghi lỗi GNUnet" 6226msgstr "Bản ghi lỗi GNUnet"
6205 6227
6206#: src/rest/plugin_rest_config.c:427 6228#: src/rest/plugin_rest_config.c:429
6207#, fuzzy 6229#, fuzzy
6208msgid "CONFIG REST API initialized\n" 6230msgid "CONFIG REST API initialized\n"
6209msgstr "Lỗi sơ khởi lõi.\n" 6231msgstr "Lỗi sơ khởi lõi.\n"
@@ -6270,72 +6292,77 @@ msgstr ""
6270msgid "Ego `%s' not found.\n" 6292msgid "Ego `%s' not found.\n"
6271msgstr "Khoá phiên chạy từ đồng đẳng « %s » không thể được thẩm tra.\n" 6293msgstr "Khoá phiên chạy từ đồng đẳng « %s » không thể được thẩm tra.\n"
6272 6294
6273#: src/revocation/gnunet-revocation.c:351 6295#: src/revocation/gnunet-revocation.c:350
6296#, fuzzy, c-format
6297msgid "Error: Key is invalid\n"
6298msgstr "Äịnh dạng của biệt hiệu « %s » là không hợp lệ.\n"
6299
6300#: src/revocation/gnunet-revocation.c:357
6274#, c-format 6301#, c-format
6275msgid "Error: revocation certificate in `%s' is not for `%s'\n" 6302msgid "Error: revocation certificate in `%s' is not for `%s'\n"
6276msgstr "" 6303msgstr ""
6277 6304
6278#: src/revocation/gnunet-revocation.c:361 6305#: src/revocation/gnunet-revocation.c:367
6279msgid "Revocation certificate ready\n" 6306msgid "Revocation certificate ready\n"
6280msgstr "" 6307msgstr ""
6281 6308
6282#: src/revocation/gnunet-revocation.c:373 6309#: src/revocation/gnunet-revocation.c:379
6283msgid "Continuing calculation where left off...\n" 6310msgid "Continuing calculation where left off...\n"
6284msgstr "" 6311msgstr ""
6285 6312
6286#: src/revocation/gnunet-revocation.c:380 6313#: src/revocation/gnunet-revocation.c:386
6287msgid "Revocation certificate not ready, calculating proof of work\n" 6314msgid "Revocation certificate not ready, calculating proof of work\n"
6288msgstr "" 6315msgstr ""
6289 6316
6290#: src/revocation/gnunet-revocation.c:418 6317#: src/revocation/gnunet-revocation.c:424
6291#, fuzzy, c-format 6318#, fuzzy, c-format
6292msgid "Public key `%s' malformed\n" 6319msgid "Public key `%s' malformed\n"
6293msgstr "Äối số không hợp lệ cho « %s ».\n" 6320msgstr "Äối số không hợp lệ cho « %s ».\n"
6294 6321
6295#: src/revocation/gnunet-revocation.c:428 6322#: src/revocation/gnunet-revocation.c:434
6296msgid "" 6323msgid ""
6297"Testing and revoking at the same time is not allowed, only executing test.\n" 6324"Testing and revoking at the same time is not allowed, only executing test.\n"
6298msgstr "" 6325msgstr ""
6299 6326
6300#: src/revocation/gnunet-revocation.c:458 6327#: src/revocation/gnunet-revocation.c:464
6301#, fuzzy 6328#, fuzzy
6302msgid "No filename to store revocation certificate given.\n" 6329msgid "No filename to store revocation certificate given.\n"
6303msgstr "Lá»—i Ä‘á»c danh sách bạn bè từ « %s »\n" 6330msgstr "Lá»—i Ä‘á»c danh sách bạn bè từ « %s »\n"
6304 6331
6305#: src/revocation/gnunet-revocation.c:475 6332#: src/revocation/gnunet-revocation.c:481
6306#, fuzzy, c-format 6333#, fuzzy, c-format
6307msgid "Failed to read revocation certificate from `%s'\n" 6334msgid "Failed to read revocation certificate from `%s'\n"
6308msgstr "Lá»—i Ä‘á»c danh sách bạn bè từ « %s »\n" 6335msgstr "Lá»—i Ä‘á»c danh sách bạn bè từ « %s »\n"
6309 6336
6310#: src/revocation/gnunet-revocation.c:483 6337#: src/revocation/gnunet-revocation.c:489
6311#, fuzzy, c-format 6338#, fuzzy, c-format
6312msgid "Revocation certificate corrupted in `%s'\n" 6339msgid "Revocation certificate corrupted in `%s'\n"
6313msgstr "Lá»—i Ä‘á»c danh sách bạn bè từ « %s »\n" 6340msgstr "Lá»—i Ä‘á»c danh sách bạn bè từ « %s »\n"
6314 6341
6315#: src/revocation/gnunet-revocation.c:505 6342#: src/revocation/gnunet-revocation.c:511
6316#, fuzzy 6343#, fuzzy
6317msgid "No action specified. Nothing to do.\n" 6344msgid "No action specified. Nothing to do.\n"
6318msgstr "Chưa xác định giao diện nên dùng mặc định.\n" 6345msgstr "Chưa xác định giao diện nên dùng mặc định.\n"
6319 6346
6320#: src/revocation/gnunet-revocation.c:524 6347#: src/revocation/gnunet-revocation.c:530
6321msgid "use NAME for the name of the revocation file" 6348msgid "use NAME for the name of the revocation file"
6322msgstr "" 6349msgstr ""
6323 6350
6324#: src/revocation/gnunet-revocation.c:532 6351#: src/revocation/gnunet-revocation.c:538
6325msgid "" 6352msgid ""
6326"revoke the private key associated for the the private key associated with " 6353"revoke the private key associated for the the private key associated with "
6327"the ego NAME " 6354"the ego NAME "
6328msgstr "" 6355msgstr ""
6329 6356
6330#: src/revocation/gnunet-revocation.c:539 6357#: src/revocation/gnunet-revocation.c:545
6331msgid "actually perform revocation, otherwise we just do the precomputation" 6358msgid "actually perform revocation, otherwise we just do the precomputation"
6332msgstr "" 6359msgstr ""
6333 6360
6334#: src/revocation/gnunet-revocation.c:546 6361#: src/revocation/gnunet-revocation.c:552
6335msgid "test if the public key KEY has been revoked" 6362msgid "test if the public key KEY has been revoked"
6336msgstr "" 6363msgstr ""
6337 6364
6338#: src/revocation/gnunet-revocation.c:552 6365#: src/revocation/gnunet-revocation.c:558
6339#, fuzzy 6366#, fuzzy
6340msgid "number of epochs to calculate for" 6367msgid "number of epochs to calculate for"
6341msgstr "số lần lặp lại" 6368msgstr "số lần lặp lại"
@@ -6374,18 +6401,6 @@ msgstr ""
6374msgid "Could not open revocation database file!" 6401msgid "Could not open revocation database file!"
6375msgstr "« %s »: Không thể kết nối.\n" 6402msgstr "« %s »: Không thể kết nối.\n"
6376 6403
6377#: src/rps/gnunet-rps.c:270
6378msgid "Seed a PeerID"
6379msgstr ""
6380
6381#: src/rps/gnunet-rps.c:275
6382msgid "Get updates of view (0 for infinite updates)"
6383msgstr ""
6384
6385#: src/rps/gnunet-rps.c:279
6386msgid "Get peers from biased stream"
6387msgstr ""
6388
6389#: src/rps/gnunet-rps-profiler.c:3142 6404#: src/rps/gnunet-rps-profiler.c:3142
6390msgid "duration of the profiling" 6405msgid "duration of the profiling"
6391msgstr "" 6406msgstr ""
@@ -6405,6 +6420,18 @@ msgstr "số lần lặp lại"
6405msgid "Measure quality and performance of the RPS service." 6420msgid "Measure quality and performance of the RPS service."
6406msgstr "Không thể truy cập đến dịch vụ" 6421msgstr "Không thể truy cập đến dịch vụ"
6407 6422
6423#: src/rps/gnunet-rps.c:270
6424msgid "Seed a PeerID"
6425msgstr ""
6426
6427#: src/rps/gnunet-rps.c:275
6428msgid "Get updates of view (0 for infinite updates)"
6429msgstr ""
6430
6431#: src/rps/gnunet-rps.c:279
6432msgid "Get peers from biased stream"
6433msgstr ""
6434
6408#: src/scalarproduct/gnunet-scalarproduct.c:229 6435#: src/scalarproduct/gnunet-scalarproduct.c:229
6409#, fuzzy 6436#, fuzzy
6410msgid "You must specify at least one message ID to check!\n" 6437msgid "You must specify at least one message ID to check!\n"
@@ -6460,15 +6487,15 @@ msgstr ""
6460msgid "Calculate the Vectorproduct with a GNUnet peer." 6487msgid "Calculate the Vectorproduct with a GNUnet peer."
6461msgstr "" 6488msgstr ""
6462 6489
6490#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118
6491#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1034
6463#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1358 6492#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1358
6464#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1355 6493#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1355
6465#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118
6466#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1063
6467#, fuzzy 6494#, fuzzy
6468msgid "Connect to CADET failed\n" 6495msgid "Connect to CADET failed\n"
6469msgstr " Không kết nối được (lỗi ?)\n" 6496msgstr " Không kết nối được (lỗi ?)\n"
6470 6497
6471#: src/scalarproduct/scalarproduct_api.c:189 6498#: src/scalarproduct/scalarproduct_api.c:184
6472msgid "Keys given to SCALARPRODUCT not unique!\n" 6499msgid "Keys given to SCALARPRODUCT not unique!\n"
6473msgstr "" 6500msgstr ""
6474 6501
@@ -6489,7 +6516,7 @@ msgid "also profile decryption"
6489msgstr "" 6516msgstr ""
6490 6517
6491#: src/set/gnunet-service-set.c:1916 src/seti/gnunet-service-seti.c:2467 6518#: src/set/gnunet-service-set.c:1916 src/seti/gnunet-service-seti.c:2467
6492#: src/setu/gnunet-service-setu.c:3832 6519#: src/setu/gnunet-service-setu.c:5389
6493#, fuzzy 6520#, fuzzy
6494msgid "Could not connect to CADET service\n" 6521msgid "Could not connect to CADET service\n"
6495msgstr "Không thể kết nối tới %s:%u: %s\n" 6522msgstr "Không thể kết nối tới %s:%u: %s\n"
@@ -6733,7 +6760,7 @@ msgid ""
6733"\t cap: the maximum number of links a node can have\n" 6760"\t cap: the maximum number of links a node can have\n"
6734"\t m: the number of links a node should have while joining the network\n" 6761"\t m: the number of links a node should have while joining the network\n"
6735"\t filename: the path of the file which contains topology information\n" 6762"\t filename: the path of the file which contains topology information\n"
6736"NOTE: the format of the above file is descibed here: https://www.gnunet.org/" 6763"NOTE: the format of the above file is described here: https://www.gnunet.org/"
6737"content/topology-file-format\n" 6764"content/topology-file-format\n"
6738msgstr "" 6765msgstr ""
6739 6766
@@ -6818,18 +6845,8 @@ msgstr "« %s » đang tắt.\n"
6818msgid "%.s Unknown result code." 6845msgid "%.s Unknown result code."
6819msgstr "" 6846msgstr ""
6820 6847
6821#: src/testbed/gnunet_testbed_mpi_spawn.c:119
6822#, fuzzy
6823msgid "Waiting for child to exit.\n"
6824msgstr "Äang đợi các đồng đẳng kết nối"
6825
6826#: src/testbed/gnunet_testbed_mpi_spawn.c:242
6827#, fuzzy, c-format
6828msgid "Spawning process `%s'\n"
6829msgstr "Äang bắt đầu tài vỠ« %s »\n"
6830
6831#: src/testbed/gnunet-testbed-profiler.c:290 6848#: src/testbed/gnunet-testbed-profiler.c:290
6832msgid "tolerate COUNT number of continious timeout failures" 6849msgid "tolerate COUNT number of continuous timeout failures"
6833msgstr "" 6850msgstr ""
6834 6851
6835#: src/testbed/gnunet-testbed-profiler.c:295 6852#: src/testbed/gnunet-testbed-profiler.c:295
@@ -6839,6 +6856,16 @@ msgid ""
6839"signal is received" 6856"signal is received"
6840msgstr "" 6857msgstr ""
6841 6858
6859#: src/testbed/gnunet_testbed_mpi_spawn.c:119
6860#, fuzzy
6861msgid "Waiting for child to exit.\n"
6862msgstr "Äang đợi các đồng đẳng kết nối"
6863
6864#: src/testbed/gnunet_testbed_mpi_spawn.c:242
6865#, fuzzy, c-format
6866msgid "Spawning process `%s'\n"
6867msgstr "Äang bắt đầu tài vỠ« %s »\n"
6868
6842#: src/testbed/testbed_api.c:399 6869#: src/testbed/testbed_api.c:399
6843#, fuzzy, c-format 6870#, fuzzy, c-format
6844msgid "Adding host %u failed with error: %s\n" 6871msgid "Adding host %u failed with error: %s\n"
@@ -7141,15 +7168,15 @@ msgstr "# các thông báo PONG đã mật mã được nhận"
7141msgid "GNUnet topology control" 7168msgid "GNUnet topology control"
7142msgstr "" 7169msgstr ""
7143 7170
7144#: src/transport/gnunet-communicator-tcp.c:3331 7171#: src/transport/gnunet-communicator-tcp.c:3317
7145#: src/transport/gnunet-communicator-udp.c:3790 7172#: src/transport/gnunet-communicator-udp.c:3790
7146#: src/transport/gnunet-service-tng.c:10220 7173#: src/transport/gnunet-service-tng.c:10223
7147#: src/transport/gnunet-service-transport.c:2627 7174#: src/transport/gnunet-service-transport.c:2627
7148#, fuzzy 7175#, fuzzy
7149msgid "Transport service is lacking key configuration settings. Exiting.\n" 7176msgid "Transport service is lacking key configuration settings. Exiting.\n"
7150msgstr "Lưu cấu hình ngay bây giỠkhông?" 7177msgstr "Lưu cấu hình ngay bây giỠkhông?"
7151 7178
7152#: src/transport/gnunet-communicator-tcp.c:3668 7179#: src/transport/gnunet-communicator-tcp.c:3655
7153msgid "GNUnet TCP communicator" 7180msgid "GNUnet TCP communicator"
7154msgstr "" 7181msgstr ""
7155 7182
@@ -7178,10 +7205,6 @@ msgstr "Không thể tạo miá»n tên.\n"
7178msgid "GNUnet UNIX domain socket communicator" 7205msgid "GNUnet UNIX domain socket communicator"
7179msgstr "" 7206msgstr ""
7180 7207
7181#: src/transport/gnunet-service-transport_ats.c:137
7182msgid "# Addresses given to ATS"
7183msgstr ""
7184
7185#: src/transport/gnunet-service-transport.c:445 7208#: src/transport/gnunet-service-transport.c:445
7186#, fuzzy 7209#, fuzzy
7187msgid "# messages dropped due to slow client" 7210msgid "# messages dropped due to slow client"
@@ -7226,6 +7249,10 @@ msgstr "Không thể lấy địa chỉ của đồng đẳng « %s ».\n"
7226msgid "Adding blacklisting entry for peer `%s':`%s'\n" 7249msgid "Adding blacklisting entry for peer `%s':`%s'\n"
7227msgstr "" 7250msgstr ""
7228 7251
7252#: src/transport/gnunet-service-transport_ats.c:137
7253msgid "# Addresses given to ATS"
7254msgstr ""
7255
7229#: src/transport/gnunet-service-transport_hello.c:195 7256#: src/transport/gnunet-service-transport_hello.c:195
7230msgid "# refreshed my HELLO" 7257msgid "# refreshed my HELLO"
7231msgstr "" 7258msgstr ""
@@ -7565,6 +7592,46 @@ msgstr ""
7565msgid "# HELLOs given to peerinfo" 7592msgid "# HELLOs given to peerinfo"
7566msgstr "Nhận được thông báo « %s » sai từ đồng đẳng « %s ».\n" 7593msgstr "Nhận được thông báo « %s » sai từ đồng đẳng « %s ».\n"
7567 7594
7595#: src/transport/gnunet-transport-profiler.c:220
7596#, c-format
7597msgid "%llu B in %llu ms == %.2f KB/s!\n"
7598msgstr ""
7599
7600#: src/transport/gnunet-transport-profiler.c:577
7601msgid "send data to peer"
7602msgstr ""
7603
7604#: src/transport/gnunet-transport-profiler.c:581
7605#, fuzzy
7606msgid "receive data from peer"
7607msgstr "Yêu cầu cấp %d từ đồng đẳng %d\n"
7608
7609#: src/transport/gnunet-transport-profiler.c:586
7610#, fuzzy
7611msgid "iterations"
7612msgstr "Tùy chá»n chung"
7613
7614#: src/transport/gnunet-transport-profiler.c:591
7615#, fuzzy
7616msgid "number of messages to send"
7617msgstr "số tin nhắn cần dùng mỗi lần lặp"
7618
7619#: src/transport/gnunet-transport-profiler.c:596
7620#, fuzzy
7621msgid "message size to use"
7622msgstr "kích cỡ tin nhắn"
7623
7624#: src/transport/gnunet-transport-profiler.c:601
7625#: src/transport/gnunet-transport.c:1404
7626msgid "peer identity"
7627msgstr ""
7628
7629#: src/transport/gnunet-transport-profiler.c:614
7630#: src/transport/gnunet-transport.c:1426
7631#, fuzzy
7632msgid "Direct access to transport service."
7633msgstr "Lỗi kết nối đến gnunetd.\n"
7634
7568#: src/transport/gnunet-transport.c:406 7635#: src/transport/gnunet-transport.c:406
7569#, fuzzy, c-format 7636#, fuzzy, c-format
7570msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n" 7637msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n"
@@ -7704,11 +7771,6 @@ msgstr "In ra thông tin vỠcác đồng đẳng GNUnet."
7704msgid "do not resolve hostnames" 7771msgid "do not resolve hostnames"
7705msgstr "không quyết định các tên máy" 7772msgstr "không quyết định các tên máy"
7706 7773
7707#: src/transport/gnunet-transport.c:1404
7708#: src/transport/gnunet-transport-profiler.c:601
7709msgid "peer identity"
7710msgstr ""
7711
7712#: src/transport/gnunet-transport.c:1408 7774#: src/transport/gnunet-transport.c:1408
7713msgid "monitor plugin sessions" 7775msgid "monitor plugin sessions"
7714msgstr "" 7776msgstr ""
@@ -7717,41 +7779,6 @@ msgstr ""
7717msgid "send data for benchmarking to the other peer (until CTRL-C)" 7779msgid "send data for benchmarking to the other peer (until CTRL-C)"
7718msgstr "" 7780msgstr ""
7719 7781
7720#: src/transport/gnunet-transport.c:1426
7721#: src/transport/gnunet-transport-profiler.c:614
7722#, fuzzy
7723msgid "Direct access to transport service."
7724msgstr "Lỗi kết nối đến gnunetd.\n"
7725
7726#: src/transport/gnunet-transport-profiler.c:220
7727#, c-format
7728msgid "%llu B in %llu ms == %.2f KB/s!\n"
7729msgstr ""
7730
7731#: src/transport/gnunet-transport-profiler.c:577
7732msgid "send data to peer"
7733msgstr ""
7734
7735#: src/transport/gnunet-transport-profiler.c:581
7736#, fuzzy
7737msgid "receive data from peer"
7738msgstr "Yêu cầu cấp %d từ đồng đẳng %d\n"
7739
7740#: src/transport/gnunet-transport-profiler.c:586
7741#, fuzzy
7742msgid "iterations"
7743msgstr "Tùy chá»n chung"
7744
7745#: src/transport/gnunet-transport-profiler.c:591
7746#, fuzzy
7747msgid "number of messages to send"
7748msgstr "số tin nhắn cần dùng mỗi lần lặp"
7749
7750#: src/transport/gnunet-transport-profiler.c:596
7751#, fuzzy
7752msgid "message size to use"
7753msgstr "kích cỡ tin nhắn"
7754
7755#: src/transport/plugin_transport_http_client.c:1488 7782#: src/transport/plugin_transport_http_client.c:1488
7756#: src/transport/plugin_transport_http_server.c:2331 7783#: src/transport/plugin_transport_http_server.c:2331
7757#: src/transport/plugin_transport_http_server.c:3562 7784#: src/transport/plugin_transport_http_server.c:3562
@@ -8030,21 +8057,6 @@ msgstr ""
8030msgid "TCP transport advertises itself as being on port %llu\n" 8057msgid "TCP transport advertises itself as being on port %llu\n"
8031msgstr "" 8058msgstr ""
8032 8059
8033#: src/transport/plugin_transport_udp_broadcasting.c:169
8034#, fuzzy
8035msgid "# Multicast HELLO beacons received via UDP"
8036msgstr "# các thông báo PONG đã mật mã được nhận"
8037
8038#: src/transport/plugin_transport_udp_broadcasting.c:553
8039msgid ""
8040"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n"
8041msgstr ""
8042
8043#: src/transport/plugin_transport_udp_broadcasting.c:571
8044#, c-format
8045msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n"
8046msgstr ""
8047
8048#: src/transport/plugin_transport_udp.c:3170 8060#: src/transport/plugin_transport_udp.c:3170
8049#, c-format 8061#, c-format
8050msgid "" 8062msgid ""
@@ -8093,6 +8105,21 @@ msgstr "« %s » không sẵn sàng.\n"
8093msgid "Failed to create UDP network sockets\n" 8105msgid "Failed to create UDP network sockets\n"
8094msgstr "Không thể tạo miá»n tên.\n" 8106msgstr "Không thể tạo miá»n tên.\n"
8095 8107
8108#: src/transport/plugin_transport_udp_broadcasting.c:169
8109#, fuzzy
8110msgid "# Multicast HELLO beacons received via UDP"
8111msgstr "# các thông báo PONG đã mật mã được nhận"
8112
8113#: src/transport/plugin_transport_udp_broadcasting.c:553
8114msgid ""
8115"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n"
8116msgstr ""
8117
8118#: src/transport/plugin_transport_udp_broadcasting.c:571
8119#, c-format
8120msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n"
8121msgstr ""
8122
8096#: src/transport/plugin_transport_unix.c:1396 8123#: src/transport/plugin_transport_unix.c:1396
8097#, fuzzy, c-format 8124#, fuzzy, c-format
8098msgid "Cannot bind to `%s'\n" 8125msgid "Cannot bind to `%s'\n"
@@ -8255,7 +8282,7 @@ msgstr ""
8255msgid "Service process failed to report status\n" 8282msgid "Service process failed to report status\n"
8256msgstr "" 8283msgstr ""
8257 8284
8258#: src/transport/tcp_service_legacy.c:1253 src/util/disk.c:1040 8285#: src/transport/tcp_service_legacy.c:1253 src/util/disk.c:1220
8259#: src/util/service.c:1637 8286#: src/util/service.c:1637
8260#, c-format 8287#, c-format
8261msgid "Cannot obtain information about user `%s': %s\n" 8288msgid "Cannot obtain information about user `%s': %s\n"
@@ -8374,39 +8401,15 @@ msgstr "Äịa chỉ IP định dạng sai: %s\n"
8374msgid "Failed to serialize metadata `%s'" 8401msgid "Failed to serialize metadata `%s'"
8375msgstr "Lá»—i lấy thông kê vá» truyá»n tải.\n" 8402msgstr "Lá»—i lấy thông kê vá» truyá»n tải.\n"
8376 8403
8377#: src/util/client.c:747 src/util/client.c:937 8404#: src/util/client.c:747 src/util/client.c:938
8378msgid "not a valid filename" 8405msgid "not a valid filename"
8379msgstr "" 8406msgstr ""
8380 8407
8381#: src/util/client.c:1103 8408#: src/util/client.c:1104
8382#, c-format 8409#, c-format
8383msgid "Need a non-empty hostname for service `%s'.\n" 8410msgid "Need a non-empty hostname for service `%s'.\n"
8384msgstr "" 8411msgstr ""
8385 8412
8386#: src/util/common_logging.c:259 src/util/common_logging.c:1114
8387msgid "DEBUG"
8388msgstr "Gá»  Lá»–I"
8389
8390#: src/util/common_logging.c:261 src/util/common_logging.c:1112
8391msgid "INFO"
8392msgstr "TIN"
8393
8394#: src/util/common_logging.c:263 src/util/common_logging.c:1110
8395msgid "MESSAGE"
8396msgstr ""
8397
8398#: src/util/common_logging.c:265 src/util/common_logging.c:1108
8399msgid "WARNING"
8400msgstr "CẢNH BÃO"
8401
8402#: src/util/common_logging.c:267 src/util/common_logging.c:1106
8403msgid "ERROR"
8404msgstr "Lá»–I"
8405
8406#: src/util/common_logging.c:269 src/util/common_logging.c:1116
8407msgid "NONE"
8408msgstr ""
8409
8410#: src/util/common_logging.c:626 src/util/common_logging.c:665 8413#: src/util/common_logging.c:626 src/util/common_logging.c:665
8411#, c-format 8414#, c-format
8412msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n" 8415msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n"
@@ -8417,6 +8420,30 @@ msgstr ""
8417msgid "Message `%.*s' repeated %u times in the last %s\n" 8420msgid "Message `%.*s' repeated %u times in the last %s\n"
8418msgstr "Thông điệp « %.*s » đã lặp lại %u lần trong %llu giây trước\n" 8421msgstr "Thông điệp « %.*s » đã lặp lại %u lần trong %llu giây trước\n"
8419 8422
8423#: src/util/common_logging.c:1106
8424msgid "ERROR"
8425msgstr "Lá»–I"
8426
8427#: src/util/common_logging.c:1108
8428msgid "WARNING"
8429msgstr "CẢNH BÃO"
8430
8431#: src/util/common_logging.c:1110
8432msgid "MESSAGE"
8433msgstr ""
8434
8435#: src/util/common_logging.c:1112
8436msgid "INFO"
8437msgstr "TIN"
8438
8439#: src/util/common_logging.c:1114
8440msgid "DEBUG"
8441msgstr "Gá»  Lá»–I"
8442
8443#: src/util/common_logging.c:1116
8444msgid "NONE"
8445msgstr ""
8446
8420#: src/util/common_logging.c:1117 8447#: src/util/common_logging.c:1117
8421msgid "INVALID" 8448msgid "INVALID"
8422msgstr "" 8449msgstr ""
@@ -8442,22 +8469,52 @@ msgid ""
8442msgstr "" 8469msgstr ""
8443"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" 8470"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"
8444 8471
8445#: src/util/configuration.c:370 8472#: src/util/configuration.c:790
8473#, c-format
8474msgid "Illegal directive in line %u (parsing restricted section %s)\n"
8475msgstr ""
8476
8477#: src/util/configuration.c:800
8478#, c-format
8479msgid "Bad directive in line %u\n"
8480msgstr ""
8481
8482#: src/util/configuration.c:853
8483#, c-format
8484msgid "Bad inline-secret directive in line %u\n"
8485msgstr ""
8486
8487#: src/util/configuration.c:875
8488#, c-format
8489msgid "Unknown or malformed directive '%s' in line %u\n"
8490msgstr ""
8491
8492#: src/util/configuration.c:905
8493#, fuzzy, c-format
8494msgid "Syntax error while deserializing in line %u (option without section)\n"
8495msgstr "Gặp lỗi cú pháp trong tập tin cấu hình « %s » tại dòng %d.\n"
8496
8497#: src/util/configuration.c:949
8446#, fuzzy, c-format 8498#, fuzzy, c-format
8447msgid "Syntax error while deserializing in line %u\n" 8499msgid "Syntax error while deserializing in line %u\n"
8448msgstr "Gặp lỗi cú pháp trong tập tin cấu hình « %s » tại dòng %d.\n" 8500msgstr "Gặp lỗi cú pháp trong tập tin cấu hình « %s » tại dòng %d.\n"
8449 8501
8450#: src/util/configuration.c:420 8502#: src/util/configuration.c:1049
8451#, fuzzy, c-format 8503#, fuzzy, c-format
8452msgid "Error while reading file `%s'\n" 8504msgid "Error while reading file `%s'\n"
8453msgstr "Gặp lỗi khi tải xuống: %s\n" 8505msgstr "Gặp lỗi khi tải xuống: %s\n"
8454 8506
8455#: src/util/configuration.c:980 8507#: src/util/configuration.c:1062
8508#, fuzzy, c-format
8509msgid "Failed to parse configuration file `%s'\n"
8510msgstr "Không thể lưu tập tin cấu hình « %s »:"
8511
8512#: src/util/configuration.c:1695
8456#, fuzzy 8513#, fuzzy
8457msgid "Not a valid relative time specification" 8514msgid "Not a valid relative time specification"
8458msgstr "Giá trị cấu hình « %s » cho « %s » trong phần « %s » nên là con số\n" 8515msgstr "Giá trị cấu hình « %s » cho « %s » trong phần « %s » nên là con số\n"
8459 8516
8460#: src/util/configuration.c:1050 8517#: src/util/configuration.c:1765
8461#, c-format 8518#, c-format
8462msgid "" 8519msgid ""
8463"Configuration value '%s' for '%s' in section '%s' is not in set of legal " 8520"Configuration value '%s' for '%s' in section '%s' is not in set of legal "
@@ -8466,17 +8523,17 @@ msgstr ""
8466"Giá trị cấu hình « %s » cho « %s » trong phần « %s » không phải nằm trong " 8523"Giá trị cấu hình « %s » cho « %s » trong phần « %s » không phải nằm trong "
8467"tập hợp các sá»± chá»n được phép\n" 8524"tập hợp các sá»± chá»n được phép\n"
8468 8525
8469#: src/util/configuration.c:1145 8526#: src/util/configuration.c:1860
8470#, c-format 8527#, c-format
8471msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n" 8528msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n"
8472msgstr "" 8529msgstr ""
8473 8530
8474#: src/util/configuration.c:1177 8531#: src/util/configuration.c:1892
8475#, fuzzy, c-format 8532#, fuzzy, c-format
8476msgid "Missing closing `%s' in option `%s'\n" 8533msgid "Missing closing `%s' in option `%s'\n"
8477msgstr "Giá trị cấu hình « %s » cho « %s » trong phần « %s » nên là con số\n" 8534msgstr "Giá trị cấu hình « %s » cho « %s » trong phần « %s » nên là con số\n"
8478 8535
8479#: src/util/configuration.c:1243 8536#: src/util/configuration.c:1958
8480#, c-format 8537#, c-format
8481msgid "" 8538msgid ""
8482"Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined " 8539"Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined "
@@ -8520,7 +8577,7 @@ msgstr "%s bị lỗi tại %s:%d: « %s »\n"
8520msgid "RSA signature verification failed at %s:%d: %s\n" 8577msgid "RSA signature verification failed at %s:%d: %s\n"
8521msgstr "Lỗi thẩm tra chữ ký RSA tại %s:%d: %s\n" 8578msgstr "Lỗi thẩm tra chữ ký RSA tại %s:%d: %s\n"
8522 8579
8523#: src/util/disk.c:823 8580#: src/util/disk.c:843
8524#, c-format 8581#, c-format
8525msgid "Expected `%s' to be a directory!\n" 8582msgid "Expected `%s' to be a directory!\n"
8526msgstr "Mong đợi « %s » là một thư mục.\n" 8583msgstr "Mong đợi « %s » là một thư mục.\n"
@@ -8705,60 +8762,70 @@ msgstr "Phải gá»­i má»™t con số cho tùy chá»n « %s ».\n"
8705msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n" 8762msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n"
8706msgstr "" 8763msgstr ""
8707 8764
8708#: src/util/gnunet-base32.c:45 8765#: src/util/gnunet-base32.c:46
8709msgid "run decoder modus, otherwise runs as encoder" 8766msgid "run decoder modus, otherwise runs as encoder"
8710msgstr "" 8767msgstr ""
8711 8768
8712#: src/util/gnunet-config.c:167 8769#: src/util/gnunet-config.c:187
8713#, fuzzy, c-format
8714msgid "failed to load configuration defaults"
8715msgstr "Không thể lưu tập tin cấu hình « %s »:"
8716
8717#: src/util/gnunet-config.c:179
8718#, fuzzy, c-format
8719msgid "%s or %s argument is required\n"
8720msgstr "đặt tên hiệu cần dùng (cần thiết)"
8721
8722#: src/util/gnunet-config.c:186
8723#, c-format 8770#, c-format
8724msgid "The following sections are available:\n" 8771msgid "The following sections are available:\n"
8725msgstr "" 8772msgstr ""
8726 8773
8727#: src/util/gnunet-config.c:234 8774#: src/util/gnunet-config.c:201
8775#, fuzzy, c-format
8776msgid "%s, %s or %s argument is required\n"
8777msgstr "đặt tên hiệu cần dùng (cần thiết)"
8778
8779#: src/util/gnunet-config.c:266
8728#, c-format 8780#, c-format
8729msgid "--option argument required to set value\n" 8781msgid "--option argument required to set value\n"
8730msgstr "" 8782msgstr ""
8731 8783
8732#: src/util/gnunet-config.c:284 8784#: src/util/gnunet-config.c:309
8733msgid "interpret option value as a filename (with $-expansion)" 8785#, fuzzy, c-format
8734msgstr "" 8786msgid "failed to load configuration defaults"
8787msgstr "Không thể lưu tập tin cấu hình « %s »:"
8735 8788
8736#: src/util/gnunet-config.c:291 8789#: src/util/gnunet-config.c:354
8737msgid "test if the current installation supports the specified BACKEND" 8790msgid "test if the current installation supports the specified BACKEND"
8738msgstr "" 8791msgstr ""
8739 8792
8740#: src/util/gnunet-config.c:297 8793#: src/util/gnunet-config.c:360
8741msgid "name of the section to access" 8794#, fuzzy
8795msgid "write the full configuration file, including default values"
8796msgstr "Tập tin cấu hình « %s » đã được ghi.\n"
8797
8798#: src/util/gnunet-config.c:365
8799msgid "interpret option value as a filename (with $-expansion)"
8742msgstr "" 8800msgstr ""
8743 8801
8744#: src/util/gnunet-config.c:302 8802#: src/util/gnunet-config.c:370
8745msgid "name of the option to access" 8803msgid "name of the option to access"
8746msgstr "" 8804msgstr ""
8747 8805
8748#: src/util/gnunet-config.c:307 8806#: src/util/gnunet-config.c:376
8749msgid "value to set" 8807#, fuzzy
8808msgid "rewrite the configuration file, even if nothing changed"
8809msgstr "dùng tập tin cấu hình TÊN_TẬP_TIN"
8810
8811#: src/util/gnunet-config.c:382
8812msgid "output extra diagnostics"
8750msgstr "" 8813msgstr ""
8751 8814
8752#: src/util/gnunet-config.c:312 8815#: src/util/gnunet-config.c:387
8753#, fuzzy 8816#, fuzzy
8754msgid "print available configuration sections" 8817msgid "print available configuration sections"
8755msgstr "Lưu cấu hình ngay bây giỠkhông?" 8818msgstr "Lưu cấu hình ngay bây giỠkhông?"
8756 8819
8757#: src/util/gnunet-config.c:318 8820#: src/util/gnunet-config.c:393
8758msgid "write configuration file that only contains delta to defaults" 8821msgid "name of the section to access"
8822msgstr ""
8823
8824#: src/util/gnunet-config.c:398
8825msgid "value to set"
8759msgstr "" 8826msgstr ""
8760 8827
8761#: src/util/gnunet-config.c:330 8828#: src/util/gnunet-config.c:413
8762#, fuzzy 8829#, fuzzy
8763msgid "Manipulate GNUnet configuration files" 8830msgid "Manipulate GNUnet configuration files"
8764msgstr "cập nhật một giá trị trong tập tin cấu hình" 8831msgstr "cập nhật một giá trị trong tập tin cấu hình"
@@ -8949,7 +9016,7 @@ msgstr "Gặp lá»—i khi tạo ngÆ°á»i dùng"
8949msgid "Unable to shorten unix path `%s' while keeping name unique\n" 9016msgid "Unable to shorten unix path `%s' while keeping name unique\n"
8950msgstr "" 9017msgstr ""
8951 9018
8952#: src/util/network.c:1361 9019#: src/util/network.c:1359
8953#, c-format 9020#, c-format
8954msgid "" 9021msgid ""
8955"Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n" 9022"Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n"
@@ -8987,22 +9054,22 @@ msgstr "« %s » không giải quyết được phương pháp « %s », với l
8987msgid "`%s' failed for library `%s' with error: %s\n" 9054msgid "`%s' failed for library `%s' with error: %s\n"
8988msgstr "« %s » thất bại cho thư viện « %s » với lỗi: %s\n" 9055msgstr "« %s » thất bại cho thư viện « %s » với lỗi: %s\n"
8989 9056
8990#: src/util/plugin.c:409 9057#: src/util/plugin.c:414
8991#, fuzzy 9058#, fuzzy
8992msgid "Could not determine plugin installation path.\n" 9059msgid "Could not determine plugin installation path.\n"
8993msgstr "Không thể truy cập đến thông tin vỠkhông gian tên.\n" 9060msgstr "Không thể truy cập đến thông tin vỠkhông gian tên.\n"
8994 9061
8995#: src/util/program.c:259 9062#: src/util/program.c:252
8996#, fuzzy, c-format 9063#, fuzzy, c-format
8997msgid "Unreadable or malformed configuration file `%s', exit ...\n" 9064msgid "Unreadable or malformed configuration file `%s', exit ...\n"
8998msgstr "Không thể lưu tập tin cấu hình « %s »:" 9065msgstr "Không thể lưu tập tin cấu hình « %s »:"
8999 9066
9000#: src/util/program.c:276 9067#: src/util/program.c:272
9001#, fuzzy, c-format 9068#, fuzzy, c-format
9002msgid "Unreadable or malformed default configuration file `%s', exit ...\n" 9069msgid "Unreadable or malformed default configuration file `%s', exit ...\n"
9003msgstr "Không thể lưu tập tin cấu hình « %s »:" 9070msgstr "Không thể lưu tập tin cấu hình « %s »:"
9004 9071
9005#: src/util/program.c:291 9072#: src/util/program.c:288
9006#, fuzzy 9073#, fuzzy
9007msgid "Unreadable or malformed configuration, exit ...\n" 9074msgid "Unreadable or malformed configuration, exit ...\n"
9008msgstr "Không thể lưu tập tin cấu hình « %s »:" 9075msgstr "Không thể lưu tập tin cấu hình « %s »:"
@@ -9067,83 +9134,83 @@ msgstr ""
9067msgid "Attempting to proxy service `%s' to invalid port %d or hostname.\n" 9134msgid "Attempting to proxy service `%s' to invalid port %d or hostname.\n"
9068msgstr "" 9135msgstr ""
9069 9136
9070#: src/util/strings.c:503 9137#: src/util/strings.c:409
9071#, c-format 9138#, c-format
9072msgid "Character sets requested were `%s'->`%s'\n" 9139msgid "Character sets requested were `%s'->`%s'\n"
9073msgstr "" 9140msgstr ""
9074 9141
9075#: src/util/strings.c:637 9142#: src/util/strings.c:501
9076msgid "Failed to expand `$HOME': environment variable `HOME' not set" 9143msgid "Failed to expand `$HOME': environment variable `HOME' not set"
9077msgstr "" 9144msgstr ""
9078"Lá»—i mở rá»™ng biến môi trÆ°á»ng « $HOME »: chÆ°a đặt biến môi trÆ°á»ng « HOME »" 9145"Lá»—i mở rá»™ng biến môi trÆ°á»ng « $HOME »: chÆ°a đặt biến môi trÆ°á»ng « HOME »"
9079 9146
9080#: src/util/strings.c:1241 9147#: src/util/strings.c:1036
9081msgid "IPv6 address did not start with `['\n" 9148msgid "IPv6 address did not start with `['\n"
9082msgstr "" 9149msgstr ""
9083 9150
9084#: src/util/strings.c:1249 9151#: src/util/strings.c:1044
9085msgid "IPv6 address did contain ':' to separate port number\n" 9152msgid "IPv6 address did contain ':' to separate port number\n"
9086msgstr "" 9153msgstr ""
9087 9154
9088#: src/util/strings.c:1256 9155#: src/util/strings.c:1051
9089msgid "IPv6 address did contain ']' before ':' to separate port number\n" 9156msgid "IPv6 address did contain ']' before ':' to separate port number\n"
9090msgstr "" 9157msgstr ""
9091 9158
9092#: src/util/strings.c:1264 9159#: src/util/strings.c:1059
9093msgid "IPv6 address did contain a valid port number after the last ':'\n" 9160msgid "IPv6 address did contain a valid port number after the last ':'\n"
9094msgstr "" 9161msgstr ""
9095 9162
9096#: src/util/strings.c:1273 9163#: src/util/strings.c:1068
9097#, fuzzy, c-format 9164#, fuzzy, c-format
9098msgid "Invalid IPv6 address `%s': %s\n" 9165msgid "Invalid IPv6 address `%s': %s\n"
9099msgstr "Mức ưu tiên tiến trình không hợp lê « %s ».\n" 9166msgstr "Mức ưu tiên tiến trình không hợp lê « %s ».\n"
9100 9167
9101#: src/util/strings.c:1500 src/util/strings.c:1511 9168#: src/util/strings.c:1250 src/util/strings.c:1261
9102msgid "Port not in range\n" 9169msgid "Port not in range\n"
9103msgstr "" 9170msgstr ""
9104 9171
9105#: src/util/strings.c:1520 9172#: src/util/strings.c:1270
9106#, fuzzy, c-format 9173#, fuzzy, c-format
9107msgid "Malformed port policy `%s'\n" 9174msgid "Malformed port policy `%s'\n"
9108msgstr "Lỗi bắt đầu thu thập.\n" 9175msgstr "Lỗi bắt đầu thu thập.\n"
9109 9176
9110#: src/util/strings.c:1603 src/util/strings.c:1632 src/util/strings.c:1679 9177#: src/util/strings.c:1341 src/util/strings.c:1370 src/util/strings.c:1417
9111#: src/util/strings.c:1699 9178#: src/util/strings.c:1437
9112#, c-format 9179#, c-format
9113msgid "Invalid format for IP: `%s'\n" 9180msgid "Invalid format for IP: `%s'\n"
9114msgstr "Äịa chỉ IP định dạng sai: %s\n" 9181msgstr "Äịa chỉ IP định dạng sai: %s\n"
9115 9182
9116#: src/util/strings.c:1657 9183#: src/util/strings.c:1395
9117#, c-format 9184#, c-format
9118msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)." 9185msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)."
9119msgstr "Ký hiệu mạng sai (« /%d » không hợp lệ trong CIDR IPv4)." 9186msgstr "Ký hiệu mạng sai (« /%d » không hợp lệ trong CIDR IPv4)."
9120 9187
9121#: src/util/strings.c:1708 9188#: src/util/strings.c:1446
9122#, fuzzy, c-format 9189#, fuzzy, c-format
9123msgid "Invalid format: `%s'\n" 9190msgid "Invalid format: `%s'\n"
9124msgstr "Äịa chỉ IP định dạng sai: %s\n" 9191msgstr "Äịa chỉ IP định dạng sai: %s\n"
9125 9192
9126#: src/util/strings.c:1761 9193#: src/util/strings.c:1488
9127#, c-format 9194#, c-format
9128msgid "Invalid network notation (does not end with ';': `%s')\n" 9195msgid "Invalid network notation (does not end with ';': `%s')\n"
9129msgstr "Ký hiệu mạng sai (không kết thúc với « ; »: « %s »)\n" 9196msgstr "Ký hiệu mạng sai (không kết thúc với « ; »: « %s »)\n"
9130 9197
9131#: src/util/strings.c:1811 9198#: src/util/strings.c:1538
9132#, fuzzy, c-format 9199#, fuzzy, c-format
9133msgid "Wrong format `%s' for netmask\n" 9200msgid "Wrong format `%s' for netmask\n"
9134msgstr "Mặt nạ mạng có định dạng sai « %s »: %s\n" 9201msgstr "Mặt nạ mạng có định dạng sai « %s »: %s\n"
9135 9202
9136#: src/util/strings.c:1842 9203#: src/util/strings.c:1569
9137#, fuzzy, c-format 9204#, fuzzy, c-format
9138msgid "Wrong format `%s' for network\n" 9205msgid "Wrong format `%s' for network\n"
9139msgstr "Mạng có định dạng sai « %s »: %s\n" 9206msgstr "Mạng có định dạng sai « %s »: %s\n"
9140 9207
9141#: src/util/time.c:878 src/util/time.c:906 9208#: src/util/time.c:699 src/util/time.c:727
9142#, c-format 9209#, c-format
9143msgid "Failed to map `%s', cannot assure monotonic time!\n" 9210msgid "Failed to map `%s', cannot assure monotonic time!\n"
9144msgstr "" 9211msgstr ""
9145 9212
9146#: src/util/time.c:914 9213#: src/util/time.c:735
9147#, c-format 9214#, c-format
9148msgid "" 9215msgid ""
9149"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n" 9216"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
@@ -9327,12 +9394,36 @@ msgstr "# các byte đã nhận qua UDP"
9327msgid "Setup tunnels via VPN." 9394msgid "Setup tunnels via VPN."
9328msgstr "" 9395msgstr ""
9329 9396
9330#: src/zonemaster/gnunet-service-zonemaster.c:847
9331#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418 9397#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418
9398#: src/zonemaster/gnunet-service-zonemaster.c:847
9332#, fuzzy 9399#, fuzzy
9333msgid "Failed to connect to the namestore!\n" 9400msgid "Failed to connect to the namestore!\n"
9334msgstr "Không kết nối được đến trình ná»n gnunetd." 9401msgstr "Không kết nối được đến trình ná»n gnunetd."
9335 9402
9403#, fuzzy
9404#~ msgid "Stop logging\n"
9405#~ msgstr "Theo dõi"
9406
9407#, fuzzy, c-format
9408#~ msgid "Start logging `%s'\n"
9409#~ msgstr "Äang bắt đầu tài vỠ« %s »\n"
9410
9411#, fuzzy, c-format
9412#~ msgid "Failed to connect master peer [%u] with slave [%u]\n"
9413#~ msgstr "Lỗi kết nối đến gnunetd.\n"
9414
9415#, fuzzy, c-format
9416#~ msgid "Unsupported form value `%s'\n"
9417#~ msgstr "Lệnh không được há»— trợ « %s ». Äang hủy bá».\n"
9418
9419#, fuzzy, c-format
9420#~ msgid "Failed to create page for `%s'\n"
9421#~ msgstr "Không thể tạo miá»n tên.\n"
9422
9423#, fuzzy, c-format
9424#~ msgid "Failed to setup post processor for `%s'\n"
9425#~ msgstr "Lỗi cập nhật dữ liệu cho mô-đun « %s »\n"
9426
9336#, fuzzy, c-format 9427#, fuzzy, c-format
9337#~ msgid "Unable to parse PKEY record `%s'\n" 9428#~ msgid "Unable to parse PKEY record `%s'\n"
9338#~ msgstr "Lá»—i Ä‘á»c danh sách bạn bè từ « %s »\n" 9429#~ msgstr "Lá»—i Ä‘á»c danh sách bạn bè từ « %s »\n"
@@ -9753,10 +9844,6 @@ msgstr "Không kết nối được đến trình ná»n gnunetd."
9753#~ msgstr "Lá»—i Ä‘á»c danh sách bạn bè từ « %s »\n" 9844#~ msgstr "Lá»—i Ä‘á»c danh sách bạn bè từ « %s »\n"
9754 9845
9755#, fuzzy 9846#, fuzzy
9756#~ msgid "unknown error"
9757#~ msgstr "Lỗi không rõ"
9758
9759#, fuzzy
9760#~ msgid "Invalid response from `fs' service." 9847#~ msgid "Invalid response from `fs' service."
9761#~ msgstr "Äối số không hợp lệ cho « %s ».\n" 9848#~ msgstr "Äối số không hợp lệ cho « %s ».\n"
9762 9849
@@ -10955,10 +11042,6 @@ msgstr "Không kết nối được đến trình ná»n gnunetd."
10955#~ msgstr "« %s » được kết nối tới « %s ».\n" 11042#~ msgstr "« %s » được kết nối tới « %s ».\n"
10956 11043
10957#, fuzzy 11044#, fuzzy
10958#~ msgid "Configuration fails to specify `%s', assuming default value."
10959#~ msgstr "Tập tin cấu hình « %s » đã được ghi.\n"
10960
10961#, fuzzy
10962#~ msgid "Key file `%s' for private zone does not exist!\n" 11045#~ msgid "Key file `%s' for private zone does not exist!\n"
10963#~ msgstr "đặt số trình ná»n cần khởi chạy" 11046#~ msgstr "đặt số trình ná»n cần khởi chạy"
10964 11047
@@ -11536,9 +11619,6 @@ msgstr "Không kết nối được đến trình ná»n gnunetd."
11536#~ "mở máy tính. Không thì bạn cần phải tự khởi chạy GNUnet mỗi lần để sử " 11619#~ "mở máy tính. Không thì bạn cần phải tự khởi chạy GNUnet mỗi lần để sử "
11537#~ "dụng nó." 11620#~ "dụng nó."
11538 11621
11539#~ msgid "Unable to create user account for daemon."
11540#~ msgstr "Không thể tạo tài khoản ngÆ°á»i dùng cho trình ná»n."
11541
11542#~ msgid "Save configuration?" 11622#~ msgid "Save configuration?"
11543#~ msgstr "Lưu cấu hình không?" 11623#~ msgstr "Lưu cấu hình không?"
11544 11624
@@ -12371,9 +12451,6 @@ msgstr "Không kết nối được đến trình ná»n gnunetd."
12371#~ msgstr "" 12451#~ msgstr ""
12372#~ "Những thư mục đưa ra đã được thêm vào danh sách các thư mục dùng chung.\n" 12452#~ "Những thư mục đưa ra đã được thêm vào danh sách các thư mục dùng chung.\n"
12373 12453
12374#~ msgid "Created entry `%s' in namespace `%s'\n"
12375#~ msgstr "Äã tạo mục nhập « %s » trong không gian tên « %s »\n"
12376
12377#~ msgid "mimetype" 12454#~ msgid "mimetype"
12378#~ msgstr "kiểu MIME" 12455#~ msgstr "kiểu MIME"
12379 12456
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 3346968de..c68a3c645 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -7,7 +7,7 @@ msgid ""
7msgstr "" 7msgstr ""
8"Project-Id-Version: gnunet-0.8.1\n" 8"Project-Id-Version: gnunet-0.8.1\n"
9"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" 9"Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
10"POT-Creation-Date: 2021-04-04 19:19+0200\n" 10"POT-Creation-Date: 2021-08-28 16:52+0200\n"
11"PO-Revision-Date: 2011-07-09 12:12+0800\n" 11"PO-Revision-Date: 2011-07-09 12:12+0800\n"
12"Last-Translator: Wylmer Wang <wantinghard@gmail.com>\n" 12"Last-Translator: Wylmer Wang <wantinghard@gmail.com>\n"
13"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n" 13"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
@@ -27,8 +27,8 @@ msgid "Issuer public key `%s' is not well-formed\n"
27msgstr "“%sâ€çš„å‚数无效。\n" 27msgstr "“%sâ€çš„å‚数无效。\n"
28 28
29#: src/abd/gnunet-abd.c:560 src/abd/gnunet-service-abd.c:1747 29#: src/abd/gnunet-abd.c:560 src/abd/gnunet-service-abd.c:1747
30#: src/namestore/gnunet-namestore-fcfsd.c:1067
30#: src/namestore/gnunet-namestore.c:1001 31#: src/namestore/gnunet-namestore.c:1001
31#: src/namestore/gnunet-namestore-fcfsd.c:1164
32#, fuzzy, c-format 32#, fuzzy, c-format
33msgid "Failed to connect to namestore\n" 33msgid "Failed to connect to namestore\n"
34msgstr "åˆå§‹åŒ–“%sâ€æœåŠ¡å¤±è´¥ã€‚\n" 34msgstr "åˆå§‹åŒ–“%sâ€æœåŠ¡å¤±è´¥ã€‚\n"
@@ -494,109 +494,6 @@ msgstr ""
494msgid "Initiating shutdown as requested by client.\n" 494msgid "Initiating shutdown as requested by client.\n"
495msgstr "" 495msgstr ""
496 496
497#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044
498#, c-format
499msgid ""
500"Could not load quota for network `%s': `%s', assigning default bandwidth "
501"%llu\n"
502msgstr ""
503
504#: src/ats/gnunet-ats-solver-eval.c:3011
505#, c-format
506msgid ""
507"No outbound quota configured for network `%s', assigning default bandwidth "
508"%llu\n"
509msgstr ""
510
511#: src/ats/gnunet-ats-solver-eval.c:3063
512#, c-format
513msgid ""
514"No outbound quota configure for network `%s', assigning default bandwidth "
515"%llu\n"
516msgstr ""
517
518#: src/ats/gnunet-ats-solver-eval.c:3552 src/ats-tests/gnunet-solver-eval.c:997
519msgid "solver to use"
520msgstr ""
521
522#: src/ats/gnunet-ats-solver-eval.c:3557
523#: src/ats-tests/gnunet-solver-eval.c:1003
524#: src/ats-tests/gnunet-solver-eval.c:1008
525msgid "experiment to use"
526msgstr ""
527
528#: src/ats/gnunet-ats-solver-eval.c:3564
529#, fuzzy
530msgid "print logging"
531msgstr "未知的命令“%sâ€ã€‚\n"
532
533#: src/ats/gnunet-ats-solver-eval.c:3569
534msgid "save logging to disk"
535msgstr ""
536
537#: src/ats/gnunet-ats-solver-eval.c:3574
538msgid "disable normalization"
539msgstr ""
540
541#: src/ats/gnunet-service-ats_plugins.c:326
542#, c-format
543msgid ""
544"Could not load %s quota for network `%s': `%s', assigning default bandwidth "
545"%llu\n"
546msgstr ""
547
548#: src/ats/gnunet-service-ats_plugins.c:336
549#, c-format
550msgid "%s quota configured for network `%s' is %llu\n"
551msgstr ""
552
553#: src/ats/gnunet-service-ats_plugins.c:382
554#, c-format
555msgid ""
556"No %s-quota configured for network `%s', assigning default bandwidth %llu\n"
557msgstr ""
558
559#: src/ats/gnunet-service-ats_plugins.c:474
560#, fuzzy, c-format
561msgid "Failed to initialize solver `%s'!\n"
562msgstr "无法åˆå§‹åŒ– SQLite:%s。\n"
563
564#: src/ats/plugin_ats_proportional.c:1142
565#, fuzzy, c-format
566msgid "Invalid %s configuration %f \n"
567msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
568
569#: src/ats/plugin_ats_proportional.c:1165
570#, fuzzy, c-format
571msgid "Invalid %s configuration %f\n"
572msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
573
574#: src/ats-tests/ats-testing.c:420
575#, c-format
576msgid "Connected master [%u] with slave [%u]\n"
577msgstr ""
578
579#: src/ats-tests/ats-testing.c:427
580#, fuzzy, c-format
581msgid "Failed to connect master peer [%u] with slave [%u]\n"
582msgstr "åˆå§‹åŒ–“%sâ€æœåŠ¡å¤±è´¥ã€‚\n"
583
584#: src/ats-tests/ats-testing-log.c:899
585msgid "Stop logging\n"
586msgstr ""
587
588#: src/ats-tests/ats-testing-log.c:955
589#, fuzzy, c-format
590msgid "Start logging `%s'\n"
591msgstr "未知的命令“%sâ€ã€‚\n"
592
593#: src/ats-tests/gnunet-ats-sim.c:92
594#, c-format
595msgid ""
596"Master [%u]: sent: %u KiB in %u sec. = %u KiB/s, received: %u KiB in %u sec. "
597"= %u KiB/s\n"
598msgstr ""
599
600#: src/ats-tool/gnunet-ats.c:299 497#: src/ats-tool/gnunet-ats.c:299
601#, c-format 498#, c-format
602msgid "%u address resolutions had a timeout\n" 499msgid "%u address resolutions had a timeout\n"
@@ -718,6 +615,81 @@ msgstr ""
718msgid "Print information about ATS state" 615msgid "Print information about ATS state"
719msgstr "无法获å–有关用户“%sâ€çš„ä¿¡æ¯ï¼š%s\n" 616msgstr "无法获å–有关用户“%sâ€çš„ä¿¡æ¯ï¼š%s\n"
720 617
618#: src/ats/gnunet-ats-solver-eval.c:2992 src/ats/gnunet-ats-solver-eval.c:3044
619#, c-format
620msgid ""
621"Could not load quota for network `%s': `%s', assigning default bandwidth "
622"%llu\n"
623msgstr ""
624
625#: src/ats/gnunet-ats-solver-eval.c:3011
626#, c-format
627msgid ""
628"No outbound quota configured for network `%s', assigning default bandwidth "
629"%llu\n"
630msgstr ""
631
632#: src/ats/gnunet-ats-solver-eval.c:3063
633#, c-format
634msgid ""
635"No outbound quota configure for network `%s', assigning default bandwidth "
636"%llu\n"
637msgstr ""
638
639#: src/ats/gnunet-ats-solver-eval.c:3552
640msgid "solver to use"
641msgstr ""
642
643#: src/ats/gnunet-ats-solver-eval.c:3557
644msgid "experiment to use"
645msgstr ""
646
647#: src/ats/gnunet-ats-solver-eval.c:3564
648#, fuzzy
649msgid "print logging"
650msgstr "未知的命令“%sâ€ã€‚\n"
651
652#: src/ats/gnunet-ats-solver-eval.c:3569
653msgid "save logging to disk"
654msgstr ""
655
656#: src/ats/gnunet-ats-solver-eval.c:3574
657msgid "disable normalization"
658msgstr ""
659
660#: src/ats/gnunet-service-ats_plugins.c:326
661#, c-format
662msgid ""
663"Could not load %s quota for network `%s': `%s', assigning default bandwidth "
664"%llu\n"
665msgstr ""
666
667#: src/ats/gnunet-service-ats_plugins.c:336
668#, c-format
669msgid "%s quota configured for network `%s' is %llu\n"
670msgstr ""
671
672#: src/ats/gnunet-service-ats_plugins.c:382
673#, c-format
674msgid ""
675"No %s-quota configured for network `%s', assigning default bandwidth %llu\n"
676msgstr ""
677
678#: src/ats/gnunet-service-ats_plugins.c:474
679#, fuzzy, c-format
680msgid "Failed to initialize solver `%s'!\n"
681msgstr "无法åˆå§‹åŒ– SQLite:%s。\n"
682
683#: src/ats/plugin_ats_proportional.c:1142
684#, fuzzy, c-format
685msgid "Invalid %s configuration %f \n"
686msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
687
688#: src/ats/plugin_ats_proportional.c:1165
689#, fuzzy, c-format
690msgid "Invalid %s configuration %f\n"
691msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
692
721#: src/auction/gnunet-auction-create.c:163 693#: src/auction/gnunet-auction-create.c:163
722msgid "description of the item to be sold" 694msgid "description of the item to be sold"
723msgstr "" 695msgstr ""
@@ -755,7 +727,7 @@ msgstr ""
755 727
756#: src/auction/gnunet-auction-info.c:77 src/auction/gnunet-auction-join.c:77 728#: src/auction/gnunet-auction-info.c:77 src/auction/gnunet-auction-join.c:77
757#: src/conversation/gnunet-conversation-test.c:256 729#: src/conversation/gnunet-conversation-test.c:256
758#: src/revocation/gnunet-revocation.c:564 src/template/gnunet-template.c:75 730#: src/revocation/gnunet-revocation.c:570 src/template/gnunet-template.c:75
759msgid "help text" 731msgid "help text"
760msgstr "" 732msgstr ""
761 733
@@ -854,6 +826,28 @@ msgstr ""
854msgid "Connection to conversation service lost, trying to reconnect\n" 826msgid "Connection to conversation service lost, trying to reconnect\n"
855msgstr "" 827msgstr ""
856 828
829#: src/conversation/gnunet-conversation-test.c:120
830#, c-format
831msgid ""
832"\n"
833"End of transmission. Have a GNU day.\n"
834msgstr ""
835
836#: src/conversation/gnunet-conversation-test.c:146
837#, c-format
838msgid ""
839"\n"
840"ew are now playing your recording back. If you can hear it, your audio "
841"settings are working..."
842msgstr ""
843
844#: src/conversation/gnunet-conversation-test.c:218
845#, c-format
846msgid ""
847"We will now be recording you for %s. After that time, the recording will be "
848"played back to you..."
849msgstr ""
850
857#: src/conversation/gnunet-conversation.c:264 851#: src/conversation/gnunet-conversation.c:264
858#, c-format 852#, c-format
859msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n" 853msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n"
@@ -1112,30 +1106,8 @@ msgstr ""
1112msgid "Enables having a conversation with other GNUnet users." 1106msgid "Enables having a conversation with other GNUnet users."
1113msgstr "" 1107msgstr ""
1114 1108
1115#: src/conversation/gnunet-conversation-test.c:120
1116#, c-format
1117msgid ""
1118"\n"
1119"End of transmission. Have a GNU day.\n"
1120msgstr ""
1121
1122#: src/conversation/gnunet-conversation-test.c:146
1123#, c-format
1124msgid ""
1125"\n"
1126"We are now playing your recording back. If you can hear it, your audio "
1127"settings are working..."
1128msgstr ""
1129
1130#: src/conversation/gnunet-conversation-test.c:218
1131#, c-format
1132msgid ""
1133"We will now be recording you for %s. After that time, the recording will be "
1134"played back to you..."
1135msgstr ""
1136
1137#: src/conversation/gnunet_gst.c:664
1138#: src/conversation/gnunet-helper-audio-playback-gst.c:363 1109#: src/conversation/gnunet-helper-audio-playback-gst.c:363
1110#: src/conversation/gnunet_gst.c:664
1139#, c-format 1111#, c-format
1140msgid "Read error from STDIN: %d %s\n" 1112msgid "Read error from STDIN: %d %s\n"
1141msgstr "" 1113msgstr ""
@@ -1548,38 +1520,38 @@ msgstr ""
1548msgid "# updates to my type map" 1520msgid "# updates to my type map"
1549msgstr "" 1521msgstr ""
1550 1522
1551#: src/datacache/datacache.c:115 src/datacache/datacache.c:287 1523#: src/datacache/datacache.c:115 src/datacache/datacache.c:299
1552#: src/datastore/gnunet-service-datastore.c:742 1524#: src/datastore/gnunet-service-datastore.c:742
1553msgid "# bytes stored" 1525msgid "# bytes stored"
1554msgstr "" 1526msgstr ""
1555 1527
1556#: src/datacache/datacache.c:119 src/datacache/datacache.c:291 1528#: src/datacache/datacache.c:119 src/datacache/datacache.c:303
1557msgid "# items stored" 1529msgid "# items stored"
1558msgstr "" 1530msgstr ""
1559 1531
1560#: src/datacache/datacache.c:189 1532#: src/datacache/datacache.c:190
1561#, c-format 1533#, c-format
1562msgid "Loading `%s' datacache plugin\n" 1534msgid "Loading `%s' datacache plugin\n"
1563msgstr "" 1535msgstr ""
1564 1536
1565#: src/datacache/datacache.c:197 1537#: src/datacache/datacache.c:208
1566#, c-format 1538#, c-format
1567msgid "Failed to load datacache plugin for `%s'\n" 1539msgid "Failed to load datacache plugin for `%s'\n"
1568msgstr "" 1540msgstr ""
1569 1541
1570#: src/datacache/datacache.c:320 1542#: src/datacache/datacache.c:332
1571msgid "# requests received" 1543msgid "# requests received"
1572msgstr "" 1544msgstr ""
1573 1545
1574#: src/datacache/datacache.c:331 1546#: src/datacache/datacache.c:343
1575msgid "# requests filtered by bloom filter" 1547msgid "# requests filtered by bloom filter"
1576msgstr "" 1548msgstr ""
1577 1549
1578#: src/datacache/datacache.c:358 1550#: src/datacache/datacache.c:370
1579msgid "# requests for random value received" 1551msgid "# requests for random value received"
1580msgstr "" 1552msgstr ""
1581 1553
1582#: src/datacache/datacache.c:388 1554#: src/datacache/datacache.c:400
1583msgid "# proximity search requests received" 1555msgid "# proximity search requests received"
1584msgstr "" 1556msgstr ""
1585 1557
@@ -1919,7 +1891,7 @@ msgstr ""
1919 1891
1920#: src/datastore/plugin_datastore_postgres.c:284 1892#: src/datastore/plugin_datastore_postgres.c:284
1921#: src/datastore/plugin_datastore_postgres.c:897 1893#: src/datastore/plugin_datastore_postgres.c:897
1922msgid "Postgress exec failure" 1894msgid "Postgresql exec failure"
1923msgstr "" 1895msgstr ""
1924 1896
1925#: src/datastore/plugin_datastore_postgres.c:858 1897#: src/datastore/plugin_datastore_postgres.c:858
@@ -1955,14 +1927,25 @@ msgstr ""
1955msgid "sqlite version to old to determine size, assuming zero\n" 1927msgid "sqlite version to old to determine size, assuming zero\n"
1956msgstr "" 1928msgstr ""
1957 1929
1958#: src/datastore/plugin_datastore_sqlite.c:1274 1930#: src/datastore/plugin_datastore_sqlite.c:1266
1931#: src/datastore/plugin_datastore_sqlite.c:1279
1932#, fuzzy
1933msgid "error preparing statement\n"
1934msgstr "创建用户出错"
1935
1936#: src/datastore/plugin_datastore_sqlite.c:1287
1937#, fuzzy
1938msgid "error stepping\n"
1939msgstr "创建用户出错"
1940
1941#: src/datastore/plugin_datastore_sqlite.c:1295
1959#, c-format 1942#, c-format
1960msgid "" 1943msgid ""
1961"Using sqlite page utilization to estimate payload (%llu pages of size %llu " 1944"Using sqlite page utilization to estimate payload (%llu pages of size %llu "
1962"bytes)\n" 1945"bytes)\n"
1963msgstr "" 1946msgstr ""
1964 1947
1965#: src/datastore/plugin_datastore_sqlite.c:1316 1948#: src/datastore/plugin_datastore_sqlite.c:1337
1966#: src/namecache/plugin_namecache_sqlite.c:564 1949#: src/namecache/plugin_namecache_sqlite.c:564
1967#: src/namestore/plugin_namestore_sqlite.c:765 1950#: src/namestore/plugin_namestore_sqlite.c:765
1968#, fuzzy 1951#, fuzzy
@@ -2036,54 +2019,6 @@ msgstr ""
2036msgid "Prints all packets that go through the DHT." 2019msgid "Prints all packets that go through the DHT."
2037msgstr "" 2020msgstr ""
2038 2021
2039#: src/dht/gnunet_dht_profiler.c:922 src/testbed/gnunet-testbed-profiler.c:255
2040#, fuzzy, c-format
2041msgid "Exiting as the number of peers is %u\n"
2042msgstr "增加 TCP/IP 的最大连接数"
2043
2044#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3136
2045#, fuzzy
2046msgid "number of peers to start"
2047msgstr "迭代次数"
2048
2049#: src/dht/gnunet_dht_profiler.c:961
2050msgid "number of PUTs to perform per peer"
2051msgstr ""
2052
2053#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872
2054#: src/testbed/gnunet-testbed-profiler.c:305
2055msgid "name of the file with the login information for the testbed"
2056msgstr ""
2057
2058#: src/dht/gnunet_dht_profiler.c:973
2059msgid "delay between rounds for collecting statistics (default: 30 sec)"
2060msgstr ""
2061
2062#: src/dht/gnunet_dht_profiler.c:979
2063msgid "delay to start doing PUTs (default: 1 sec)"
2064msgstr ""
2065
2066#: src/dht/gnunet_dht_profiler.c:985
2067msgid "delay to start doing GETs (default: 5 min)"
2068msgstr ""
2069
2070#: src/dht/gnunet_dht_profiler.c:990
2071msgid "replication degree for DHT PUTs"
2072msgstr ""
2073
2074#: src/dht/gnunet_dht_profiler.c:996
2075msgid "chance that a peer is selected at random for PUTs"
2076msgstr ""
2077
2078#: src/dht/gnunet_dht_profiler.c:1002
2079msgid "timeout for DHT PUT and GET requests (default: 1 min)"
2080msgstr ""
2081
2082#: src/dht/gnunet_dht_profiler.c:1023
2083#, fuzzy
2084msgid "Measure quality and performance of the DHT service."
2085msgstr "无法访问该æœåŠ¡"
2086
2087#: src/dht/gnunet-dht-put.c:133 2022#: src/dht/gnunet-dht-put.c:133
2088msgid "Must provide KEY and DATA for DHT put!\n" 2023msgid "Must provide KEY and DATA for DHT put!\n"
2089msgstr "" 2024msgstr ""
@@ -2209,87 +2144,87 @@ msgstr ""
2209msgid "# requests TTL-dropped" 2144msgid "# requests TTL-dropped"
2210msgstr "" 2145msgstr ""
2211 2146
2212#: src/dht/gnunet-service-dht_neighbours.c:1052 2147#: src/dht/gnunet-service-dht_neighbours.c:1035
2213#: src/dht/gnunet-service-dht_neighbours.c:1096 2148#: src/dht/gnunet-service-dht_neighbours.c:1072
2214msgid "# Peers excluded from routing due to Bloomfilter" 2149msgid "# Peers excluded from routing due to Bloomfilter"
2215msgstr "" 2150msgstr ""
2216 2151
2217#: src/dht/gnunet-service-dht_neighbours.c:1069 2152#: src/dht/gnunet-service-dht_neighbours.c:1045
2218#: src/dht/gnunet-service-dht_neighbours.c:1112 2153#: src/dht/gnunet-service-dht_neighbours.c:1088
2219msgid "# Peer selection failed" 2154msgid "# Peer selection failed"
2220msgstr "" 2155msgstr ""
2221 2156
2222#: src/dht/gnunet-service-dht_neighbours.c:1270 2157#: src/dht/gnunet-service-dht_neighbours.c:1246
2223msgid "# PUT requests routed" 2158msgid "# PUT requests routed"
2224msgstr "" 2159msgstr ""
2225 2160
2226#: src/dht/gnunet-service-dht_neighbours.c:1304 2161#: src/dht/gnunet-service-dht_neighbours.c:1280
2227msgid "# PUT messages queued for transmission" 2162msgid "# PUT messages queued for transmission"
2228msgstr "" 2163msgstr ""
2229 2164
2230#: src/dht/gnunet-service-dht_neighbours.c:1316 2165#: src/dht/gnunet-service-dht_neighbours.c:1292
2231#: src/dht/gnunet-service-dht_neighbours.c:1458 2166#: src/dht/gnunet-service-dht_neighbours.c:1434
2232#: src/dht/gnunet-service-dht_neighbours.c:1562 2167#: src/dht/gnunet-service-dht_neighbours.c:1538
2233msgid "# P2P messages dropped due to full queue" 2168msgid "# P2P messages dropped due to full queue"
2234msgstr "" 2169msgstr ""
2235 2170
2236#: src/dht/gnunet-service-dht_neighbours.c:1401 2171#: src/dht/gnunet-service-dht_neighbours.c:1377
2237msgid "# GET requests routed" 2172msgid "# GET requests routed"
2238msgstr "" 2173msgstr ""
2239 2174
2240#: src/dht/gnunet-service-dht_neighbours.c:1445 2175#: src/dht/gnunet-service-dht_neighbours.c:1421
2241msgid "# GET messages queued for transmission" 2176msgid "# GET messages queued for transmission"
2242msgstr "" 2177msgstr ""
2243 2178
2244#: src/dht/gnunet-service-dht_neighbours.c:1577 2179#: src/dht/gnunet-service-dht_neighbours.c:1553
2245msgid "# RESULT messages queued for transmission" 2180msgid "# RESULT messages queued for transmission"
2246msgstr "" 2181msgstr ""
2247 2182
2248#: src/dht/gnunet-service-dht_neighbours.c:1680 2183#: src/dht/gnunet-service-dht_neighbours.c:1656
2249msgid "# Expired PUTs discarded" 2184msgid "# Expired PUTs discarded"
2250msgstr "" 2185msgstr ""
2251 2186
2252#: src/dht/gnunet-service-dht_neighbours.c:1688 2187#: src/dht/gnunet-service-dht_neighbours.c:1664
2253msgid "# P2P PUT requests received" 2188msgid "# P2P PUT requests received"
2254msgstr "" 2189msgstr ""
2255 2190
2256#: src/dht/gnunet-service-dht_neighbours.c:1692 2191#: src/dht/gnunet-service-dht_neighbours.c:1668
2257msgid "# P2P PUT bytes received" 2192msgid "# P2P PUT bytes received"
2258msgstr "" 2193msgstr ""
2259 2194
2260#: src/dht/gnunet-service-dht_neighbours.c:1924 2195#: src/dht/gnunet-service-dht_neighbours.c:1900
2261msgid "# FIND PEER requests ignored due to Bloomfilter" 2196msgid "# FIND PEER requests ignored due to Bloomfilter"
2262msgstr "" 2197msgstr ""
2263 2198
2264#: src/dht/gnunet-service-dht_neighbours.c:1933 2199#: src/dht/gnunet-service-dht_neighbours.c:1909
2265msgid "# FIND PEER requests ignored due to lack of HELLO" 2200msgid "# FIND PEER requests ignored due to lack of HELLO"
2266msgstr "" 2201msgstr ""
2267 2202
2268#: src/dht/gnunet-service-dht_neighbours.c:2096 2203#: src/dht/gnunet-service-dht_neighbours.c:2072
2269msgid "# P2P GET requests received" 2204msgid "# P2P GET requests received"
2270msgstr "" 2205msgstr ""
2271 2206
2272#: src/dht/gnunet-service-dht_neighbours.c:2100 2207#: src/dht/gnunet-service-dht_neighbours.c:2076
2273msgid "# P2P GET bytes received" 2208msgid "# P2P GET bytes received"
2274msgstr "" 2209msgstr ""
2275 2210
2276#: src/dht/gnunet-service-dht_neighbours.c:2166 2211#: src/dht/gnunet-service-dht_neighbours.c:2142
2277msgid "# P2P FIND PEER requests processed" 2212msgid "# P2P FIND PEER requests processed"
2278msgstr "" 2213msgstr ""
2279 2214
2280#: src/dht/gnunet-service-dht_neighbours.c:2187 2215#: src/dht/gnunet-service-dht_neighbours.c:2163
2281msgid "# P2P GET requests ONLY routed" 2216msgid "# P2P GET requests ONLY routed"
2282msgstr "" 2217msgstr ""
2283 2218
2284#: src/dht/gnunet-service-dht_neighbours.c:2365 2219#: src/dht/gnunet-service-dht_neighbours.c:2341
2285msgid "# Expired results discarded" 2220msgid "# Expired results discarded"
2286msgstr "" 2221msgstr ""
2287 2222
2288#: src/dht/gnunet-service-dht_neighbours.c:2382 2223#: src/dht/gnunet-service-dht_neighbours.c:2358
2289msgid "# P2P RESULTS received" 2224msgid "# P2P RESULTS received"
2290msgstr "" 2225msgstr ""
2291 2226
2292#: src/dht/gnunet-service-dht_neighbours.c:2386 2227#: src/dht/gnunet-service-dht_neighbours.c:2362
2293msgid "# P2P RESULT bytes received" 2228msgid "# P2P RESULT bytes received"
2294msgstr "" 2229msgstr ""
2295 2230
@@ -2329,6 +2264,54 @@ msgstr ""
2329msgid "# DHT requests combined" 2264msgid "# DHT requests combined"
2330msgstr "" 2265msgstr ""
2331 2266
2267#: src/dht/gnunet_dht_profiler.c:922 src/testbed/gnunet-testbed-profiler.c:255
2268#, fuzzy, c-format
2269msgid "Exiting as the number of peers is %u\n"
2270msgstr "增加 TCP/IP 的最大连接数"
2271
2272#: src/dht/gnunet_dht_profiler.c:955 src/rps/gnunet-rps-profiler.c:3136
2273#, fuzzy
2274msgid "number of peers to start"
2275msgstr "迭代次数"
2276
2277#: src/dht/gnunet_dht_profiler.c:961
2278msgid "number of PUTs to perform per peer"
2279msgstr ""
2280
2281#: src/dht/gnunet_dht_profiler.c:967 src/nse/gnunet-nse-profiler.c:872
2282#: src/testbed/gnunet-testbed-profiler.c:305
2283msgid "name of the file with the login information for the testbed"
2284msgstr ""
2285
2286#: src/dht/gnunet_dht_profiler.c:973
2287msgid "delay between rounds for collecting statistics (default: 30 sec)"
2288msgstr ""
2289
2290#: src/dht/gnunet_dht_profiler.c:979
2291msgid "delay to start doing PUTs (default: 1 sec)"
2292msgstr ""
2293
2294#: src/dht/gnunet_dht_profiler.c:985
2295msgid "delay to start doing GETs (default: 5 min)"
2296msgstr ""
2297
2298#: src/dht/gnunet_dht_profiler.c:990
2299msgid "replication degree for DHT PUTs"
2300msgstr ""
2301
2302#: src/dht/gnunet_dht_profiler.c:996
2303msgid "chance that a peer is selected at random for PUTs"
2304msgstr ""
2305
2306#: src/dht/gnunet_dht_profiler.c:1002
2307msgid "timeout for DHT PUT and GET requests (default: 1 min)"
2308msgstr ""
2309
2310#: src/dht/gnunet_dht_profiler.c:1023
2311#, fuzzy
2312msgid "Measure quality and performance of the DHT service."
2313msgstr "无法访问该æœåŠ¡"
2314
2332#: src/dht/plugin_block_dht.c:189 2315#: src/dht/plugin_block_dht.c:189
2333#, c-format 2316#, c-format
2334msgid "Block not of type %u\n" 2317msgid "Block not of type %u\n"
@@ -2749,10 +2732,10 @@ msgid "Directory too large for system address space\n"
2749msgstr "" 2732msgstr ""
2750 2733
2751#: src/fs/fs_download.c:346 2734#: src/fs/fs_download.c:346
2752#, c-format 2735#, fuzzy, c-format
2753msgid "" 2736msgid ""
2754"Failed to access full directroy contents of `%s' for recursive download\n" 2737"Failed to access full directory contents of `%s' for recursive download\n"
2755msgstr "" 2738msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
2756 2739
2757#: src/fs/fs_download.c:528 src/fs/fs_download.c:541 2740#: src/fs/fs_download.c:528 src/fs/fs_download.c:541
2758#, fuzzy, c-format 2741#, fuzzy, c-format
@@ -3249,14 +3232,6 @@ msgid ""
3249"chk/...)" 3232"chk/...)"
3250msgstr "" 3233msgstr ""
3251 3234
3252#: src/fs/gnunet-fs.c:128
3253msgid "print a list of all indexed files"
3254msgstr ""
3255
3256#: src/fs/gnunet-fs.c:141
3257msgid "Special file-sharing operations"
3258msgstr ""
3259
3260#: src/fs/gnunet-fs-profiler.c:211 3235#: src/fs/gnunet-fs-profiler.c:211
3261msgid "run the experiment with COUNT peers" 3236msgid "run the experiment with COUNT peers"
3262msgstr "" 3237msgstr ""
@@ -3273,6 +3248,14 @@ msgstr ""
3273msgid "run a testbed to measure file-sharing performance" 3248msgid "run a testbed to measure file-sharing performance"
3274msgstr "" 3249msgstr ""
3275 3250
3251#: src/fs/gnunet-fs.c:128
3252msgid "print a list of all indexed files"
3253msgstr ""
3254
3255#: src/fs/gnunet-fs.c:141
3256msgid "Special file-sharing operations"
3257msgstr ""
3258
3276#: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:234 3259#: src/fs/gnunet-publish.c:219 src/fs/gnunet-publish.c:234
3277#, c-format 3260#, c-format
3278msgid "Publishing `%s' at %llu/%llu (%s remaining)\n" 3261msgid "Publishing `%s' at %llu/%llu (%s remaining)\n"
@@ -3932,51 +3915,7 @@ msgstr ""
3932msgid "look for GNS2DNS records instead of ANY" 3915msgid "look for GNS2DNS records instead of ANY"
3933msgstr "" 3916msgstr ""
3934 3917
3935#: src/gns/gnunet-gns.c:257 3918#: src/gns/gnunet-gns-import.c:490
3936#, fuzzy, c-format
3937msgid "`%s' is not a valid DNS domain name\n"
3938msgstr "“%sâ€ä¸å¯ç”¨ã€‚\n"
3939
3940#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254
3941#, fuzzy, c-format
3942msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n"
3943msgstr "打开日志文件“%sâ€å¤±è´¥ï¼š%s\n"
3944
3945#: src/gns/gnunet-gns.c:281
3946msgid "Cannot resolve using GNS: GNUnet peer not running\n"
3947msgstr ""
3948
3949#: src/gns/gnunet-gns.c:305
3950#, c-format
3951msgid "Invalid typename specified, assuming `ANY'\n"
3952msgstr ""
3953
3954#: src/gns/gnunet-gns.c:340
3955msgid "Lookup a record for the given name"
3956msgstr ""
3957
3958#: src/gns/gnunet-gns.c:346
3959msgid "Specify the type of the record to lookup"
3960msgstr ""
3961
3962#: src/gns/gnunet-gns.c:352
3963msgid "Specify a timeout for the lookup"
3964msgstr ""
3965
3966#: src/gns/gnunet-gns.c:356
3967msgid "No unneeded output"
3968msgstr ""
3969
3970#: src/gns/gnunet-gns.c:361
3971msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8"
3972msgstr ""
3973
3974#: src/gns/gnunet-gns.c:375
3975#, fuzzy
3976msgid "GNUnet GNS resolver tool"
3977msgstr "GNUnet 错误日志"
3978
3979#: src/gns/gnunet-gns-import.c:491
3980msgid "This program will import some GNS authorities into your GNS namestore." 3919msgid "This program will import some GNS authorities into your GNS namestore."
3981msgstr "" 3920msgstr ""
3982 3921
@@ -4096,6 +4035,50 @@ msgstr ""
4096msgid "GNUnet GNS proxy" 4035msgid "GNUnet GNS proxy"
4097msgstr "" 4036msgstr ""
4098 4037
4038#: src/gns/gnunet-gns.c:257
4039#, fuzzy, c-format
4040msgid "`%s' is not a valid DNS domain name\n"
4041msgstr "“%sâ€ä¸å¯ç”¨ã€‚\n"
4042
4043#: src/gns/gnunet-gns.c:267 src/util/dnsparser.c:254
4044#, fuzzy, c-format
4045msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n"
4046msgstr "打开日志文件“%sâ€å¤±è´¥ï¼š%s\n"
4047
4048#: src/gns/gnunet-gns.c:281
4049msgid "Cannot resolve using GNS: GNUnet peer not running\n"
4050msgstr ""
4051
4052#: src/gns/gnunet-gns.c:305
4053#, c-format
4054msgid "Invalid typename specified, assuming `ANY'\n"
4055msgstr ""
4056
4057#: src/gns/gnunet-gns.c:340
4058msgid "Lookup a record for the given name"
4059msgstr ""
4060
4061#: src/gns/gnunet-gns.c:346
4062msgid "Specify the type of the record to lookup"
4063msgstr ""
4064
4065#: src/gns/gnunet-gns.c:352
4066msgid "Specify a timeout for the lookup"
4067msgstr ""
4068
4069#: src/gns/gnunet-gns.c:356
4070msgid "No unneeded output"
4071msgstr ""
4072
4073#: src/gns/gnunet-gns.c:361
4074msgid "DNS Compatibility: Name is passed in IDNA instead of UTF-8"
4075msgstr ""
4076
4077#: src/gns/gnunet-gns.c:375
4078#, fuzzy
4079msgid "GNUnet GNS resolver tool"
4080msgstr "GNUnet 错误日志"
4081
4099#: src/gns/gnunet-service-gns.c:505 4082#: src/gns/gnunet-service-gns.c:505
4100#, fuzzy 4083#, fuzzy
4101msgid "Properly base32-encoded public key required" 4084msgid "Properly base32-encoded public key required"
@@ -4107,8 +4090,8 @@ msgid "Failed to connect to the namecache!\n"
4107msgstr "åˆå§‹åŒ–“%sâ€æœåŠ¡å¤±è´¥ã€‚\n" 4090msgstr "åˆå§‹åŒ–“%sâ€æœåŠ¡å¤±è´¥ã€‚\n"
4108 4091
4109#: src/gns/gnunet-service-gns.c:560 4092#: src/gns/gnunet-service-gns.c:560
4110#: src/zonemaster/gnunet-service-zonemaster.c:885
4111#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442 4093#: src/zonemaster/gnunet-service-zonemaster-monitor.c:442
4094#: src/zonemaster/gnunet-service-zonemaster.c:885
4112#, fuzzy 4095#, fuzzy
4113msgid "Could not connect to DHT!\n" 4096msgid "Could not connect to DHT!\n"
4114msgstr "无法连接到 %s:%u:%s\n" 4097msgstr "无法连接到 %s:%u:%s\n"
@@ -4658,52 +4641,52 @@ msgstr "å‘é€æ¶ˆæ¯å¤±è´¥ã€‚\n"
4658msgid "Failed to set default ego: %s\n" 4641msgid "Failed to set default ego: %s\n"
4659msgstr "å‘é€æ¶ˆæ¯å¤±è´¥ã€‚\n" 4642msgstr "å‘é€æ¶ˆæ¯å¤±è´¥ã€‚\n"
4660 4643
4661#: src/identity/gnunet-identity.c:462 4644#: src/identity/gnunet-identity.c:461
4662msgid "create ego NAME" 4645msgid "create ego NAME"
4663msgstr "" 4646msgstr ""
4664 4647
4665#: src/identity/gnunet-identity.c:467 4648#: src/identity/gnunet-identity.c:466
4666msgid "delete ego NAME " 4649msgid "delete ego NAME "
4667msgstr "" 4650msgstr ""
4668 4651
4669#: src/identity/gnunet-identity.c:473 4652#: src/identity/gnunet-identity.c:472
4670msgid "" 4653msgid ""
4671"set the private key for the identity to PRIVATE_KEY (use together with -C)" 4654"set the private key for the identity to PRIVATE_KEY (use together with -C)"
4672msgstr "" 4655msgstr ""
4673 4656
4674#: src/identity/gnunet-identity.c:478 4657#: src/identity/gnunet-identity.c:477
4675msgid "generate an EdDSA identity. (use together with -C) EXPERIMENTAL" 4658msgid "generate an EdDSA identity. (use together with -C) EXPERIMENTAL"
4676msgstr "" 4659msgstr ""
4677 4660
4678#: src/identity/gnunet-identity.c:482 4661#: src/identity/gnunet-identity.c:481
4679msgid "display all egos" 4662msgid "display all egos"
4680msgstr "" 4663msgstr ""
4681 4664
4682#: src/identity/gnunet-identity.c:486 4665#: src/identity/gnunet-identity.c:485
4683msgid "reduce output" 4666msgid "reduce output"
4684msgstr "" 4667msgstr ""
4685 4668
4686#: src/identity/gnunet-identity.c:493 4669#: src/identity/gnunet-identity.c:492
4687msgid "" 4670msgid ""
4688"set default identity to NAME for a subsystem SUBSYSTEM (use together with -" 4671"set default identity to NAME for a subsystem SUBSYSTEM (use together with -"
4689"s) or restrict results to NAME (use together with -d)" 4672"s) or restrict results to NAME (use together with -d)"
4690msgstr "" 4673msgstr ""
4691 4674
4692#: src/identity/gnunet-identity.c:497 4675#: src/identity/gnunet-identity.c:496
4693msgid "run in monitor mode egos" 4676msgid "run in monitor mode egos"
4694msgstr "" 4677msgstr ""
4695 4678
4696#: src/identity/gnunet-identity.c:501 4679#: src/identity/gnunet-identity.c:500
4697#, fuzzy 4680#, fuzzy
4698msgid "display private keys as well" 4681msgid "display private keys as well"
4699msgstr "显示一个文件的散列值" 4682msgstr "显示一个文件的散列值"
4700 4683
4701#: src/identity/gnunet-identity.c:508 4684#: src/identity/gnunet-identity.c:507
4702msgid "" 4685msgid ""
4703"set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)" 4686"set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)"
4704msgstr "" 4687msgstr ""
4705 4688
4706#: src/identity/gnunet-identity.c:523 4689#: src/identity/gnunet-identity.c:522
4707msgid "Maintain egos" 4690msgid "Maintain egos"
4708msgstr "" 4691msgstr ""
4709 4692
@@ -4754,11 +4737,11 @@ msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
4754msgid "Failed to create directory `%s' for storing egos\n" 4737msgid "Failed to create directory `%s' for storing egos\n"
4755msgstr "解æžé…置文件“%sâ€å¤±è´¥\n" 4738msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
4756 4739
4757#: src/identity/plugin_rest_identity.c:1385 4740#: src/identity/plugin_rest_identity.c:1401
4758msgid "Identity REST API initialized\n" 4741msgid "Identity REST API initialized\n"
4759msgstr "" 4742msgstr ""
4760 4743
4761#: src/json/json.c:139 4744#: src/json/json.c:120
4762#, fuzzy, c-format 4745#, fuzzy, c-format
4763msgid "Failed to parse JSON in option `%s': %s (%s)\n" 4746msgid "Failed to parse JSON in option `%s': %s (%s)\n"
4764msgstr "解æžé…置文件“%sâ€å¤±è´¥\n" 4747msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
@@ -4816,11 +4799,11 @@ msgstr ""
4816msgid "GNUnet zone manipulation tool" 4799msgid "GNUnet zone manipulation tool"
4817msgstr "GNUnet é…ç½®" 4800msgstr "GNUnet é…ç½®"
4818 4801
4819#: src/namecache/namecache_api.c:285 4802#: src/namecache/namecache_api.c:286
4820msgid "Namecache failed to cache block" 4803msgid "Namecache failed to cache block"
4821msgstr "" 4804msgstr ""
4822 4805
4823#: src/namecache/namecache_api.c:373 4806#: src/namecache/namecache_api.c:374
4824#, fuzzy 4807#, fuzzy
4825msgid "Error communicating with namecache service" 4808msgid "Error communicating with namecache service"
4826msgstr "连接 %s:%u 出错。守护程åºåœ¨è¿è¡Œå—?\n" 4809msgstr "连接 %s:%u 出错。守护程åºåœ¨è¿è¡Œå—?\n"
@@ -4861,6 +4844,115 @@ msgstr "sqlite æ•°æ®ä»“库"
4861msgid "Failed to setup database at `%s'\n" 4844msgid "Failed to setup database at `%s'\n"
4862msgstr "è¿è¡Œ %s失败:%s %d\n" 4845msgstr "è¿è¡Œ %s失败:%s %d\n"
4863 4846
4847#: src/namestore/gnunet-namestore-fcfsd.c:359
4848#, fuzzy
4849msgid "can not search the namestore"
4850msgstr "åˆå§‹åŒ–“%sâ€æœåŠ¡å¤±è´¥ã€‚\n"
4851
4852#: src/namestore/gnunet-namestore-fcfsd.c:413
4853#: src/namestore/gnunet-namestore-fcfsd.c:554
4854#, fuzzy
4855msgid "unable to scan namestore"
4856msgstr "åˆå§‹åŒ–“%sâ€æœåŠ¡å¤±è´¥ã€‚\n"
4857
4858#: src/namestore/gnunet-namestore-fcfsd.c:441
4859#, fuzzy, c-format
4860msgid "Failed to create record for `%s': %s\n"
4861msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
4862
4863#: src/namestore/gnunet-namestore-fcfsd.c:453
4864#, fuzzy
4865msgid "no errors"
4866msgstr "未知错误"
4867
4868#: src/namestore/gnunet-namestore-fcfsd.c:489
4869#, c-format
4870msgid "The requested key `%s' exists as `%s'\n"
4871msgstr ""
4872
4873#: src/namestore/gnunet-namestore-fcfsd.c:496
4874msgid "key exists"
4875msgstr ""
4876
4877#: src/namestore/gnunet-namestore-fcfsd.c:513
4878#, fuzzy
4879msgid "Error creating record data\n"
4880msgstr "未知错误。\n"
4881
4882#: src/namestore/gnunet-namestore-fcfsd.c:517
4883#, fuzzy
4884msgid "unable to store record"
4885msgstr "è¿è¡Œ %s失败:%s %d\n"
4886
4887#: src/namestore/gnunet-namestore-fcfsd.c:588
4888#, c-format
4889msgid "Requested name `%s' exists with `%u' records\n"
4890msgstr ""
4891
4892#: src/namestore/gnunet-namestore-fcfsd.c:594
4893msgid "name exists\n"
4894msgstr ""
4895
4896#: src/namestore/gnunet-namestore-fcfsd.c:780
4897msgid "unable to process submitted data"
4898msgstr ""
4899
4900#: src/namestore/gnunet-namestore-fcfsd.c:787
4901msgid "the submitted data is invalid"
4902msgstr ""
4903
4904#: src/namestore/gnunet-namestore-fcfsd.c:806
4905#, fuzzy
4906msgid "invalid parameters"
4907msgstr "“%sâ€çš„å‚数无效。\n"
4908
4909#: src/namestore/gnunet-namestore-fcfsd.c:823
4910#, fuzzy
4911msgid "invalid name"
4912msgstr "“%sâ€çš„å‚数无效。\n"
4913
4914#: src/namestore/gnunet-namestore-fcfsd.c:834
4915#, fuzzy, c-format
4916msgid "Unable to parse key %s\n"
4917msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
4918
4919#: src/namestore/gnunet-namestore-fcfsd.c:838
4920#, fuzzy
4921msgid "unable to parse key"
4922msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
4923
4924#: src/namestore/gnunet-namestore-fcfsd.c:949
4925msgid "No ego configured for `fcfsd` subsystem\n"
4926msgstr ""
4927
4928#: src/namestore/gnunet-namestore-fcfsd.c:974
4929#, fuzzy
4930msgid "Failed to start HTTP server\n"
4931msgstr "åˆå§‹åŒ–“%sâ€æœåŠ¡å¤±è´¥ã€‚\n"
4932
4933#: src/namestore/gnunet-namestore-fcfsd.c:1058
4934#, fuzzy
4935msgid "No port specified, using default value\n"
4936msgstr "é…置文件“%sâ€å·²å†™å…¥ã€‚\n"
4937
4938#: src/namestore/gnunet-namestore-fcfsd.c:1076
4939#, fuzzy
4940msgid "Failed to connect to identity\n"
4941msgstr "åˆå§‹åŒ–“%sâ€æœåŠ¡å¤±è´¥ã€‚\n"
4942
4943#: src/namestore/gnunet-namestore-fcfsd.c:1100
4944#, fuzzy
4945msgid "Unable to set up the daemon\n"
4946msgstr "å‘é€æ¶ˆæ¯å¤±è´¥ã€‚\n"
4947
4948#: src/namestore/gnunet-namestore-fcfsd.c:1123
4949msgid "name of the zone managed by FCFSD"
4950msgstr ""
4951
4952#: src/namestore/gnunet-namestore-fcfsd.c:1132
4953msgid "GNU Name System First-Come-First-Served name registration service"
4954msgstr ""
4955
4864#: src/namestore/gnunet-namestore.c:334 4956#: src/namestore/gnunet-namestore.c:334
4865#, c-format 4957#, c-format
4866msgid "Adding record failed: %s\n" 4958msgid "Adding record failed: %s\n"
@@ -5101,85 +5193,16 @@ msgstr ""
5101msgid "name of the ego controlling the zone" 5193msgid "name of the ego controlling the zone"
5102msgstr "" 5194msgstr ""
5103 5195
5104#: src/namestore/gnunet-namestore-fcfsd.c:552
5105#, fuzzy, c-format
5106msgid "Unsupported form value `%s'\n"
5107msgstr "未知的命令“%sâ€ã€‚\n"
5108
5109#: src/namestore/gnunet-namestore-fcfsd.c:579
5110#, fuzzy, c-format
5111msgid "Failed to create record for domain `%s': %s\n"
5112msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
5113
5114#: src/namestore/gnunet-namestore-fcfsd.c:600
5115msgid "Error when mapping zone to name\n"
5116msgstr ""
5117
5118#: src/namestore/gnunet-namestore-fcfsd.c:633
5119#, c-format
5120msgid "Found existing name `%s' for the given key\n"
5121msgstr ""
5122
5123#: src/namestore/gnunet-namestore-fcfsd.c:646
5124#, fuzzy
5125msgid "Error creating record data.\n"
5126msgstr "未知错误。\n"
5127
5128#: src/namestore/gnunet-namestore-fcfsd.c:707
5129#, c-format
5130msgid "Found %u existing records for domain `%s'\n"
5131msgstr ""
5132
5133#: src/namestore/gnunet-namestore-fcfsd.c:796
5134#, fuzzy, c-format
5135msgid "Failed to create page for `%s'\n"
5136msgstr "å‘é€æ¶ˆæ¯å¤±è´¥ã€‚\n"
5137
5138#: src/namestore/gnunet-namestore-fcfsd.c:815
5139#, fuzzy, c-format
5140msgid "Failed to setup post processor for `%s'\n"
5141msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
5142
5143#: src/namestore/gnunet-namestore-fcfsd.c:850
5144msgid "Domain name must not contain `.'\n"
5145msgstr ""
5146
5147#: src/namestore/gnunet-namestore-fcfsd.c:859
5148msgid "Domain name must not contain `+'\n"
5149msgstr ""
5150
5151#: src/namestore/gnunet-namestore-fcfsd.c:1094
5152msgid "No ego configured for `fcfsd` subsystem\n"
5153msgstr ""
5154
5155#: src/namestore/gnunet-namestore-fcfsd.c:1125
5156#, fuzzy
5157msgid "Failed to start HTTP server\n"
5158msgstr "åˆå§‹åŒ–“%sâ€æœåŠ¡å¤±è´¥ã€‚\n"
5159
5160#: src/namestore/gnunet-namestore-fcfsd.c:1173
5161#, fuzzy
5162msgid "Failed to connect to identity\n"
5163msgstr "åˆå§‹åŒ–“%sâ€æœåŠ¡å¤±è´¥ã€‚\n"
5164
5165#: src/namestore/gnunet-namestore-fcfsd.c:1200
5166msgid "name of the zone that is to be managed by FCFSD"
5167msgstr ""
5168
5169#: src/namestore/gnunet-namestore-fcfsd.c:1220
5170msgid "GNU Name System First Come First Serve name registration service"
5171msgstr ""
5172
5173#: src/namestore/gnunet-service-namestore.c:871 5196#: src/namestore/gnunet-service-namestore.c:871
5174#, fuzzy, c-format 5197#, fuzzy, c-format
5175msgid "Failed to replicate block in namecache: %s\n" 5198msgid "Failed to replicate block in namecache: %s\n"
5176msgstr "å‘é€æ¶ˆæ¯å¤±è´¥ã€‚\n" 5199msgstr "å‘é€æ¶ˆæ¯å¤±è´¥ã€‚\n"
5177 5200
5178#: src/namestore/gnunet-zoneimport.c:1848 5201#: src/namestore/gnunet-zoneimport.c:1847
5179msgid "size to use for the main hash map" 5202msgid "size to use for the main hash map"
5180msgstr "" 5203msgstr ""
5181 5204
5182#: src/namestore/gnunet-zoneimport.c:1854 5205#: src/namestore/gnunet-zoneimport.c:1853
5183msgid "minimum expiration time we assume for imported records" 5206msgid "minimum expiration time we assume for imported records"
5184msgstr "" 5207msgstr ""
5185 5208
@@ -5202,7 +5225,7 @@ msgstr ""
5202msgid "Flat file database running\n" 5225msgid "Flat file database running\n"
5203msgstr "sqlite æ•°æ®ä»“库" 5226msgstr "sqlite æ•°æ®ä»“库"
5204 5227
5205#: src/namestore/plugin_rest_namestore.c:1105 5228#: src/namestore/plugin_rest_namestore.c:1111
5206msgid "Namestore REST API initialized\n" 5229msgid "Namestore REST API initialized\n"
5207msgstr "" 5230msgstr ""
5208 5231
@@ -5485,10 +5508,6 @@ msgstr ""
5485msgid "`upnpc' command not found\n" 5508msgid "`upnpc' command not found\n"
5486msgstr "" 5509msgstr ""
5487 5510
5488#: src/nse/gnunet-nse.c:124
5489msgid "Show network size estimates from NSE service."
5490msgstr ""
5491
5492#: src/nse/gnunet-nse-profiler.c:857 5511#: src/nse/gnunet-nse-profiler.c:857
5493msgid "limit to the number of connections to NSE services, 0 for none" 5512msgid "limit to the number of connections to NSE services, 0 for none"
5494msgstr "" 5513msgstr ""
@@ -5514,66 +5533,16 @@ msgstr ""
5514msgid "Measure quality and performance of the NSE service." 5533msgid "Measure quality and performance of the NSE service."
5515msgstr "无法访问该æœåŠ¡" 5534msgstr "无法访问该æœåŠ¡"
5516 5535
5536#: src/nse/gnunet-nse.c:124
5537msgid "Show network size estimates from NSE service."
5538msgstr ""
5539
5517#: src/nse/gnunet-service-nse.c:1450 5540#: src/nse/gnunet-service-nse.c:1450
5518#: src/revocation/gnunet-service-revocation.c:883 src/util/gnunet-scrypt.c:260 5541#: src/revocation/gnunet-service-revocation.c:883 src/util/gnunet-scrypt.c:260
5519#, fuzzy 5542#, fuzzy
5520msgid "Value is too large.\n" 5543msgid "Value is too large.\n"
5521msgstr "值ä¸åœ¨åˆæ³•èŒƒå›´å†…。" 5544msgstr "值ä¸åœ¨åˆæ³•èŒƒå›´å†…。"
5522 5545
5523#: src/peerinfo/gnunet-service-peerinfo.c:175
5524#, c-format
5525msgid "Removing expired address of transport `%s'\n"
5526msgstr ""
5527
5528#: src/peerinfo/gnunet-service-peerinfo.c:306
5529#, fuzzy, c-format
5530msgid "Failed to parse HELLO in file `%s': %s\n"
5531msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
5532
5533#: src/peerinfo/gnunet-service-peerinfo.c:323
5534#: src/peerinfo/gnunet-service-peerinfo.c:348
5535#, fuzzy, c-format
5536msgid "Failed to parse HELLO in file `%s'\n"
5537msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
5538
5539#: src/peerinfo/gnunet-service-peerinfo.c:426
5540msgid "# peers known"
5541msgstr ""
5542
5543#: src/peerinfo/gnunet-service-peerinfo.c:468
5544#, c-format
5545msgid ""
5546"File `%s' in directory `%s' does not match naming convention. Removed.\n"
5547msgstr ""
5548
5549#: src/peerinfo/gnunet-service-peerinfo.c:624
5550#, fuzzy, c-format
5551msgid "Scanning directory `%s'\n"
5552msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
5553
5554#: src/peerinfo/gnunet-service-peerinfo.c:631
5555#, c-format
5556msgid "Still no peers found in `%s'!\n"
5557msgstr ""
5558
5559#: src/peerinfo/gnunet-service-peerinfo.c:1027
5560#, fuzzy, c-format
5561msgid "Cleaning up directory `%s'\n"
5562msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
5563
5564#: src/peerinfo/gnunet-service-peerinfo.c:1322
5565#, c-format
5566msgid "Importing HELLOs from `%s'\n"
5567msgstr ""
5568
5569#: src/peerinfo/gnunet-service-peerinfo.c:1335
5570msgid "Skipping import of included HELLOs\n"
5571msgstr ""
5572
5573#: src/peerinfo/peerinfo_api.c:217
5574msgid "Failed to receive response from `PEERINFO' service."
5575msgstr ""
5576
5577#: src/peerinfo-tool/gnunet-peerinfo.c:237 5546#: src/peerinfo-tool/gnunet-peerinfo.c:237
5578#, fuzzy, c-format 5547#, fuzzy, c-format
5579msgid "%sPeer `%s'\n" 5548msgid "%sPeer `%s'\n"
@@ -5670,6 +5639,60 @@ msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
5670msgid "Peerinfo REST API initialized\n" 5639msgid "Peerinfo REST API initialized\n"
5671msgstr "" 5640msgstr ""
5672 5641
5642#: src/peerinfo/gnunet-service-peerinfo.c:175
5643#, c-format
5644msgid "Removing expired address of transport `%s'\n"
5645msgstr ""
5646
5647#: src/peerinfo/gnunet-service-peerinfo.c:306
5648#, fuzzy, c-format
5649msgid "Failed to parse HELLO in file `%s': %s\n"
5650msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
5651
5652#: src/peerinfo/gnunet-service-peerinfo.c:323
5653#: src/peerinfo/gnunet-service-peerinfo.c:348
5654#, fuzzy, c-format
5655msgid "Failed to parse HELLO in file `%s'\n"
5656msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
5657
5658#: src/peerinfo/gnunet-service-peerinfo.c:426
5659msgid "# peers known"
5660msgstr ""
5661
5662#: src/peerinfo/gnunet-service-peerinfo.c:468
5663#, c-format
5664msgid ""
5665"File `%s' in directory `%s' does not match naming convention. Removed.\n"
5666msgstr ""
5667
5668#: src/peerinfo/gnunet-service-peerinfo.c:624
5669#, fuzzy, c-format
5670msgid "Scanning directory `%s'\n"
5671msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
5672
5673#: src/peerinfo/gnunet-service-peerinfo.c:631
5674#, c-format
5675msgid "Still no peers found in `%s'!\n"
5676msgstr ""
5677
5678#: src/peerinfo/gnunet-service-peerinfo.c:1027
5679#, fuzzy, c-format
5680msgid "Cleaning up directory `%s'\n"
5681msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
5682
5683#: src/peerinfo/gnunet-service-peerinfo.c:1322
5684#, c-format
5685msgid "Importing HELLOs from `%s'\n"
5686msgstr ""
5687
5688#: src/peerinfo/gnunet-service-peerinfo.c:1335
5689msgid "Skipping import of included HELLOs\n"
5690msgstr ""
5691
5692#: src/peerinfo/peerinfo_api.c:217
5693msgid "Failed to receive response from `PEERINFO' service."
5694msgstr ""
5695
5673#: src/peerstore/gnunet-peerstore.c:92 5696#: src/peerstore/gnunet-peerstore.c:92
5674msgid "peerstore" 5697msgid "peerstore"
5675msgstr "" 5698msgstr ""
@@ -5856,11 +5879,11 @@ msgstr ""
5856msgid "re:claimID command line tool" 5879msgid "re:claimID command line tool"
5857msgstr "" 5880msgstr ""
5858 5881
5859#: src/reclaim/plugin_rest_openid_connect.c:2788 5882#: src/reclaim/plugin_rest_openid_connect.c:2793
5860msgid "OpenID Connect REST API initialized\n" 5883msgid "OpenID Connect REST API initialized\n"
5861msgstr "" 5884msgstr ""
5862 5885
5863#: src/reclaim/plugin_rest_reclaim.c:1521 5886#: src/reclaim/plugin_rest_pabc.c:637 src/reclaim/plugin_rest_reclaim.c:1520
5864msgid "Identity Provider REST API initialized\n" 5887msgid "Identity Provider REST API initialized\n"
5865msgstr "" 5888msgstr ""
5866 5889
@@ -5878,60 +5901,60 @@ msgstr "ç«‹å³ä¿å­˜é…置?"
5878msgid "Daemon to announce regular expressions for the peer using cadet." 5901msgid "Daemon to announce regular expressions for the peer using cadet."
5879msgstr "" 5902msgstr ""
5880 5903
5881#: src/regex/gnunet-regex-profiler.c:1390 5904#: src/regex/gnunet-regex-profiler.c:1392
5882msgid "No configuration file given. Exiting\n" 5905msgid "No configuration file given. Exiting\n"
5883msgstr "" 5906msgstr ""
5884 5907
5885#: src/regex/gnunet-regex-profiler.c:1432 5908#: src/regex/gnunet-regex-profiler.c:1434
5886#: src/regex/gnunet-regex-simulation-profiler.c:631 5909#: src/regex/gnunet-regex-simulation-profiler.c:631
5887#, c-format 5910#, c-format
5888msgid "No policy directory specified on command line. Exiting.\n" 5911msgid "No policy directory specified on command line. Exiting.\n"
5889msgstr "" 5912msgstr ""
5890 5913
5891#: src/regex/gnunet-regex-profiler.c:1438 5914#: src/regex/gnunet-regex-profiler.c:1440
5892#: src/regex/gnunet-regex-simulation-profiler.c:639 5915#: src/regex/gnunet-regex-simulation-profiler.c:639
5893#, c-format 5916#, c-format
5894msgid "Specified policies directory does not exist. Exiting.\n" 5917msgid "Specified policies directory does not exist. Exiting.\n"
5895msgstr "" 5918msgstr ""
5896 5919
5897#: src/regex/gnunet-regex-profiler.c:1446 5920#: src/regex/gnunet-regex-profiler.c:1448
5898#, fuzzy, c-format 5921#, fuzzy, c-format
5899msgid "No files found in `%s'\n" 5922msgid "No files found in `%s'\n"
5900msgstr "è¿è¡Œ %s失败:%s %d\n" 5923msgstr "è¿è¡Œ %s失败:%s %d\n"
5901 5924
5902#: src/regex/gnunet-regex-profiler.c:1455 5925#: src/regex/gnunet-regex-profiler.c:1457
5903msgid "No search strings file given. Exiting.\n" 5926msgid "No search strings file given. Exiting.\n"
5904msgstr "" 5927msgstr ""
5905 5928
5906#: src/regex/gnunet-regex-profiler.c:1475 5929#: src/regex/gnunet-regex-profiler.c:1477
5907#, fuzzy 5930#, fuzzy
5908msgid "Error loading search strings. Exiting.\n" 5931msgid "Error loading search strings. Exiting.\n"
5909msgstr "创建用户出错" 5932msgstr "创建用户出错"
5910 5933
5911#: src/regex/gnunet-regex-profiler.c:1563 5934#: src/regex/gnunet-regex-profiler.c:1565
5912#, fuzzy 5935#, fuzzy
5913msgid "name of the file for writing statistics" 5936msgid "name of the file for writing statistics"
5914msgstr "åˆå§‹åŒ–“%sâ€æœåŠ¡å¤±è´¥ã€‚\n" 5937msgstr "åˆå§‹åŒ–“%sâ€æœåŠ¡å¤±è´¥ã€‚\n"
5915 5938
5916#: src/regex/gnunet-regex-profiler.c:1570 5939#: src/regex/gnunet-regex-profiler.c:1572
5917msgid "wait TIMEOUT before ending the experiment" 5940msgid "wait TIMEOUT before ending the experiment"
5918msgstr "" 5941msgstr ""
5919 5942
5920#: src/regex/gnunet-regex-profiler.c:1576 5943#: src/regex/gnunet-regex-profiler.c:1578
5921msgid "directory with policy files" 5944msgid "directory with policy files"
5922msgstr "" 5945msgstr ""
5923 5946
5924#: src/regex/gnunet-regex-profiler.c:1584 5947#: src/regex/gnunet-regex-profiler.c:1586
5925#, fuzzy 5948#, fuzzy
5926msgid "name of file with input strings" 5949msgid "name of file with input strings"
5927msgstr "åˆå§‹åŒ–“%sâ€æœåŠ¡å¤±è´¥ã€‚\n" 5950msgstr "åˆå§‹åŒ–“%sâ€æœåŠ¡å¤±è´¥ã€‚\n"
5928 5951
5929#: src/regex/gnunet-regex-profiler.c:1591 5952#: src/regex/gnunet-regex-profiler.c:1593
5930#, fuzzy 5953#, fuzzy
5931msgid "name of file with hosts' names" 5954msgid "name of file with hosts' names"
5932msgstr "åˆå§‹åŒ–“%sâ€æœåŠ¡å¤±è´¥ã€‚\n" 5955msgstr "åˆå§‹åŒ–“%sâ€æœåŠ¡å¤±è´¥ã€‚\n"
5933 5956
5934#: src/regex/gnunet-regex-profiler.c:1604 5957#: src/regex/gnunet-regex-profiler.c:1606
5935msgid "Profiler for regex" 5958msgid "Profiler for regex"
5936msgstr "" 5959msgstr ""
5937 5960
@@ -5957,12 +5980,12 @@ msgstr "æœåŠ¡å·²åˆ é™¤ã€‚\n"
5957msgid "Search string `%s' is too long!\n" 5980msgid "Search string `%s' is too long!\n"
5958msgstr "æœåŠ¡å·²åˆ é™¤ã€‚\n" 5981msgstr "æœåŠ¡å·²åˆ é™¤ã€‚\n"
5959 5982
5960#: src/rest/gnunet-rest-server.c:1266 5983#: src/rest/gnunet-rest-server.c:1267
5961#, fuzzy 5984#, fuzzy
5962msgid "GNUnet REST server" 5985msgid "GNUnet REST server"
5963msgstr "GNUnet 错误日志" 5986msgstr "GNUnet 错误日志"
5964 5987
5965#: src/rest/plugin_rest_config.c:427 5988#: src/rest/plugin_rest_config.c:429
5966msgid "CONFIG REST API initialized\n" 5989msgid "CONFIG REST API initialized\n"
5967msgstr "" 5990msgstr ""
5968 5991
@@ -6026,72 +6049,77 @@ msgstr ""
6026msgid "Ego `%s' not found.\n" 6049msgid "Ego `%s' not found.\n"
6027msgstr "" 6050msgstr ""
6028 6051
6029#: src/revocation/gnunet-revocation.c:351 6052#: src/revocation/gnunet-revocation.c:350
6053#, c-format
6054msgid "Error: Key is invalid\n"
6055msgstr ""
6056
6057#: src/revocation/gnunet-revocation.c:357
6030#, c-format 6058#, c-format
6031msgid "Error: revocation certificate in `%s' is not for `%s'\n" 6059msgid "Error: revocation certificate in `%s' is not for `%s'\n"
6032msgstr "" 6060msgstr ""
6033 6061
6034#: src/revocation/gnunet-revocation.c:361 6062#: src/revocation/gnunet-revocation.c:367
6035msgid "Revocation certificate ready\n" 6063msgid "Revocation certificate ready\n"
6036msgstr "" 6064msgstr ""
6037 6065
6038#: src/revocation/gnunet-revocation.c:373 6066#: src/revocation/gnunet-revocation.c:379
6039msgid "Continuing calculation where left off...\n" 6067msgid "Continuing calculation where left off...\n"
6040msgstr "" 6068msgstr ""
6041 6069
6042#: src/revocation/gnunet-revocation.c:380 6070#: src/revocation/gnunet-revocation.c:386
6043msgid "Revocation certificate not ready, calculating proof of work\n" 6071msgid "Revocation certificate not ready, calculating proof of work\n"
6044msgstr "" 6072msgstr ""
6045 6073
6046#: src/revocation/gnunet-revocation.c:418 6074#: src/revocation/gnunet-revocation.c:424
6047#, fuzzy, c-format 6075#, fuzzy, c-format
6048msgid "Public key `%s' malformed\n" 6076msgid "Public key `%s' malformed\n"
6049msgstr "“%sâ€çš„å‚数无效。\n" 6077msgstr "“%sâ€çš„å‚数无效。\n"
6050 6078
6051#: src/revocation/gnunet-revocation.c:428 6079#: src/revocation/gnunet-revocation.c:434
6052msgid "" 6080msgid ""
6053"Testing and revoking at the same time is not allowed, only executing test.\n" 6081"Testing and revoking at the same time is not allowed, only executing test.\n"
6054msgstr "" 6082msgstr ""
6055 6083
6056#: src/revocation/gnunet-revocation.c:458 6084#: src/revocation/gnunet-revocation.c:464
6057#, fuzzy 6085#, fuzzy
6058msgid "No filename to store revocation certificate given.\n" 6086msgid "No filename to store revocation certificate given.\n"
6059msgstr "解æžé…置文件“%sâ€å¤±è´¥\n" 6087msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
6060 6088
6061#: src/revocation/gnunet-revocation.c:475 6089#: src/revocation/gnunet-revocation.c:481
6062#, fuzzy, c-format 6090#, fuzzy, c-format
6063msgid "Failed to read revocation certificate from `%s'\n" 6091msgid "Failed to read revocation certificate from `%s'\n"
6064msgstr "解æžé…置文件“%sâ€å¤±è´¥\n" 6092msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
6065 6093
6066#: src/revocation/gnunet-revocation.c:483 6094#: src/revocation/gnunet-revocation.c:489
6067#, fuzzy, c-format 6095#, fuzzy, c-format
6068msgid "Revocation certificate corrupted in `%s'\n" 6096msgid "Revocation certificate corrupted in `%s'\n"
6069msgstr "解æžé…置文件“%sâ€å¤±è´¥\n" 6097msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
6070 6098
6071#: src/revocation/gnunet-revocation.c:505 6099#: src/revocation/gnunet-revocation.c:511
6072#, fuzzy 6100#, fuzzy
6073msgid "No action specified. Nothing to do.\n" 6101msgid "No action specified. Nothing to do.\n"
6074msgstr "没有指定接å£ï¼Œå°†ä½¿ç”¨é»˜è®¤ã€‚\n" 6102msgstr "没有指定接å£ï¼Œå°†ä½¿ç”¨é»˜è®¤ã€‚\n"
6075 6103
6076#: src/revocation/gnunet-revocation.c:524 6104#: src/revocation/gnunet-revocation.c:530
6077msgid "use NAME for the name of the revocation file" 6105msgid "use NAME for the name of the revocation file"
6078msgstr "" 6106msgstr ""
6079 6107
6080#: src/revocation/gnunet-revocation.c:532 6108#: src/revocation/gnunet-revocation.c:538
6081msgid "" 6109msgid ""
6082"revoke the private key associated for the the private key associated with " 6110"revoke the private key associated for the the private key associated with "
6083"the ego NAME " 6111"the ego NAME "
6084msgstr "" 6112msgstr ""
6085 6113
6086#: src/revocation/gnunet-revocation.c:539 6114#: src/revocation/gnunet-revocation.c:545
6087msgid "actually perform revocation, otherwise we just do the precomputation" 6115msgid "actually perform revocation, otherwise we just do the precomputation"
6088msgstr "" 6116msgstr ""
6089 6117
6090#: src/revocation/gnunet-revocation.c:546 6118#: src/revocation/gnunet-revocation.c:552
6091msgid "test if the public key KEY has been revoked" 6119msgid "test if the public key KEY has been revoked"
6092msgstr "" 6120msgstr ""
6093 6121
6094#: src/revocation/gnunet-revocation.c:552 6122#: src/revocation/gnunet-revocation.c:558
6095#, fuzzy 6123#, fuzzy
6096msgid "number of epochs to calculate for" 6124msgid "number of epochs to calculate for"
6097msgstr "迭代次数" 6125msgstr "迭代次数"
@@ -6129,18 +6157,6 @@ msgstr ""
6129msgid "Could not open revocation database file!" 6157msgid "Could not open revocation database file!"
6130msgstr "无法连接到 %s:%u:%s\n" 6158msgstr "无法连接到 %s:%u:%s\n"
6131 6159
6132#: src/rps/gnunet-rps.c:270
6133msgid "Seed a PeerID"
6134msgstr ""
6135
6136#: src/rps/gnunet-rps.c:275
6137msgid "Get updates of view (0 for infinite updates)"
6138msgstr ""
6139
6140#: src/rps/gnunet-rps.c:279
6141msgid "Get peers from biased stream"
6142msgstr ""
6143
6144#: src/rps/gnunet-rps-profiler.c:3142 6160#: src/rps/gnunet-rps-profiler.c:3142
6145msgid "duration of the profiling" 6161msgid "duration of the profiling"
6146msgstr "" 6162msgstr ""
@@ -6159,6 +6175,18 @@ msgstr "迭代次数"
6159msgid "Measure quality and performance of the RPS service." 6175msgid "Measure quality and performance of the RPS service."
6160msgstr "无法访问该æœåŠ¡" 6176msgstr "无法访问该æœåŠ¡"
6161 6177
6178#: src/rps/gnunet-rps.c:270
6179msgid "Seed a PeerID"
6180msgstr ""
6181
6182#: src/rps/gnunet-rps.c:275
6183msgid "Get updates of view (0 for infinite updates)"
6184msgstr ""
6185
6186#: src/rps/gnunet-rps.c:279
6187msgid "Get peers from biased stream"
6188msgstr ""
6189
6162#: src/scalarproduct/gnunet-scalarproduct.c:229 6190#: src/scalarproduct/gnunet-scalarproduct.c:229
6163#, fuzzy 6191#, fuzzy
6164msgid "You must specify at least one message ID to check!\n" 6192msgid "You must specify at least one message ID to check!\n"
@@ -6214,15 +6242,15 @@ msgstr ""
6214msgid "Calculate the Vectorproduct with a GNUnet peer." 6242msgid "Calculate the Vectorproduct with a GNUnet peer."
6215msgstr "" 6243msgstr ""
6216 6244
6245#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118
6246#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1034
6217#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1358 6247#: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1358
6218#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1355 6248#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1355
6219#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1118
6220#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1063
6221#, fuzzy 6249#, fuzzy
6222msgid "Connect to CADET failed\n" 6250msgid "Connect to CADET failed\n"
6223msgstr "“%sâ€å·²è¿žæŽ¥åˆ°â€œ%sâ€ã€‚\n" 6251msgstr "“%sâ€å·²è¿žæŽ¥åˆ°â€œ%sâ€ã€‚\n"
6224 6252
6225#: src/scalarproduct/scalarproduct_api.c:189 6253#: src/scalarproduct/scalarproduct_api.c:184
6226msgid "Keys given to SCALARPRODUCT not unique!\n" 6254msgid "Keys given to SCALARPRODUCT not unique!\n"
6227msgstr "" 6255msgstr ""
6228 6256
@@ -6243,7 +6271,7 @@ msgid "also profile decryption"
6243msgstr "" 6271msgstr ""
6244 6272
6245#: src/set/gnunet-service-set.c:1916 src/seti/gnunet-service-seti.c:2467 6273#: src/set/gnunet-service-set.c:1916 src/seti/gnunet-service-seti.c:2467
6246#: src/setu/gnunet-service-setu.c:3832 6274#: src/setu/gnunet-service-setu.c:5389
6247#, fuzzy 6275#, fuzzy
6248msgid "Could not connect to CADET service\n" 6276msgid "Could not connect to CADET service\n"
6249msgstr "无法连接到 %s:%u:%s\n" 6277msgstr "无法连接到 %s:%u:%s\n"
@@ -6487,7 +6515,7 @@ msgid ""
6487"\t cap: the maximum number of links a node can have\n" 6515"\t cap: the maximum number of links a node can have\n"
6488"\t m: the number of links a node should have while joining the network\n" 6516"\t m: the number of links a node should have while joining the network\n"
6489"\t filename: the path of the file which contains topology information\n" 6517"\t filename: the path of the file which contains topology information\n"
6490"NOTE: the format of the above file is descibed here: https://www.gnunet.org/" 6518"NOTE: the format of the above file is described here: https://www.gnunet.org/"
6491"content/topology-file-format\n" 6519"content/topology-file-format\n"
6492msgstr "" 6520msgstr ""
6493 6521
@@ -6572,17 +6600,8 @@ msgstr ""
6572msgid "%.s Unknown result code." 6600msgid "%.s Unknown result code."
6573msgstr "" 6601msgstr ""
6574 6602
6575#: src/testbed/gnunet_testbed_mpi_spawn.c:119
6576msgid "Waiting for child to exit.\n"
6577msgstr ""
6578
6579#: src/testbed/gnunet_testbed_mpi_spawn.c:242
6580#, fuzzy, c-format
6581msgid "Spawning process `%s'\n"
6582msgstr "å¸è½½ GNUnet æœåŠ¡"
6583
6584#: src/testbed/gnunet-testbed-profiler.c:290 6603#: src/testbed/gnunet-testbed-profiler.c:290
6585msgid "tolerate COUNT number of continious timeout failures" 6604msgid "tolerate COUNT number of continuous timeout failures"
6586msgstr "" 6605msgstr ""
6587 6606
6588#: src/testbed/gnunet-testbed-profiler.c:295 6607#: src/testbed/gnunet-testbed-profiler.c:295
@@ -6592,6 +6611,15 @@ msgid ""
6592"signal is received" 6611"signal is received"
6593msgstr "" 6612msgstr ""
6594 6613
6614#: src/testbed/gnunet_testbed_mpi_spawn.c:119
6615msgid "Waiting for child to exit.\n"
6616msgstr ""
6617
6618#: src/testbed/gnunet_testbed_mpi_spawn.c:242
6619#, fuzzy, c-format
6620msgid "Spawning process `%s'\n"
6621msgstr "å¸è½½ GNUnet æœåŠ¡"
6622
6595#: src/testbed/testbed_api.c:399 6623#: src/testbed/testbed_api.c:399
6596#, fuzzy, c-format 6624#, fuzzy, c-format
6597msgid "Adding host %u failed with error: %s\n" 6625msgid "Adding host %u failed with error: %s\n"
@@ -6888,15 +6916,15 @@ msgstr ""
6888msgid "GNUnet topology control" 6916msgid "GNUnet topology control"
6889msgstr "" 6917msgstr ""
6890 6918
6891#: src/transport/gnunet-communicator-tcp.c:3331 6919#: src/transport/gnunet-communicator-tcp.c:3317
6892#: src/transport/gnunet-communicator-udp.c:3790 6920#: src/transport/gnunet-communicator-udp.c:3790
6893#: src/transport/gnunet-service-tng.c:10220 6921#: src/transport/gnunet-service-tng.c:10223
6894#: src/transport/gnunet-service-transport.c:2627 6922#: src/transport/gnunet-service-transport.c:2627
6895#, fuzzy 6923#, fuzzy
6896msgid "Transport service is lacking key configuration settings. Exiting.\n" 6924msgid "Transport service is lacking key configuration settings. Exiting.\n"
6897msgstr "ç«‹å³ä¿å­˜é…置?" 6925msgstr "ç«‹å³ä¿å­˜é…置?"
6898 6926
6899#: src/transport/gnunet-communicator-tcp.c:3668 6927#: src/transport/gnunet-communicator-tcp.c:3655
6900msgid "GNUnet TCP communicator" 6928msgid "GNUnet TCP communicator"
6901msgstr "" 6929msgstr ""
6902 6930
@@ -6925,10 +6953,6 @@ msgstr "å‘é€æ¶ˆæ¯å¤±è´¥ã€‚\n"
6925msgid "GNUnet UNIX domain socket communicator" 6953msgid "GNUnet UNIX domain socket communicator"
6926msgstr "" 6954msgstr ""
6927 6955
6928#: src/transport/gnunet-service-transport_ats.c:137
6929msgid "# Addresses given to ATS"
6930msgstr ""
6931
6932#: src/transport/gnunet-service-transport.c:445 6956#: src/transport/gnunet-service-transport.c:445
6933msgid "# messages dropped due to slow client" 6957msgid "# messages dropped due to slow client"
6934msgstr "" 6958msgstr ""
@@ -6969,6 +6993,10 @@ msgstr "å¸è½½ GNUnet æœåŠ¡"
6969msgid "Adding blacklisting entry for peer `%s':`%s'\n" 6993msgid "Adding blacklisting entry for peer `%s':`%s'\n"
6970msgstr "" 6994msgstr ""
6971 6995
6996#: src/transport/gnunet-service-transport_ats.c:137
6997msgid "# Addresses given to ATS"
6998msgstr ""
6999
6972#: src/transport/gnunet-service-transport_hello.c:195 7000#: src/transport/gnunet-service-transport_hello.c:195
6973msgid "# refreshed my HELLO" 7001msgid "# refreshed my HELLO"
6974msgstr "" 7002msgstr ""
@@ -7277,6 +7305,44 @@ msgstr ""
7277msgid "# HELLOs given to peerinfo" 7305msgid "# HELLOs given to peerinfo"
7278msgstr "" 7306msgstr ""
7279 7307
7308#: src/transport/gnunet-transport-profiler.c:220
7309#, c-format
7310msgid "%llu B in %llu ms == %.2f KB/s!\n"
7311msgstr ""
7312
7313#: src/transport/gnunet-transport-profiler.c:577
7314msgid "send data to peer"
7315msgstr ""
7316
7317#: src/transport/gnunet-transport-profiler.c:581
7318msgid "receive data from peer"
7319msgstr ""
7320
7321#: src/transport/gnunet-transport-profiler.c:586
7322msgid "iterations"
7323msgstr ""
7324
7325#: src/transport/gnunet-transport-profiler.c:591
7326#, fuzzy
7327msgid "number of messages to send"
7328msgstr "æ¯æ¬¡è¿­ä»£æ‰€ä½¿ç”¨çš„消æ¯æ•°é‡"
7329
7330#: src/transport/gnunet-transport-profiler.c:596
7331#, fuzzy
7332msgid "message size to use"
7333msgstr "消æ¯å°ºå¯¸"
7334
7335#: src/transport/gnunet-transport-profiler.c:601
7336#: src/transport/gnunet-transport.c:1404
7337msgid "peer identity"
7338msgstr ""
7339
7340#: src/transport/gnunet-transport-profiler.c:614
7341#: src/transport/gnunet-transport.c:1426
7342#, fuzzy
7343msgid "Direct access to transport service."
7344msgstr "åˆå§‹åŒ–“%sâ€æœåŠ¡å¤±è´¥ã€‚\n"
7345
7280#: src/transport/gnunet-transport.c:406 7346#: src/transport/gnunet-transport.c:406
7281#, c-format 7347#, c-format
7282msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n" 7348msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n"
@@ -7413,11 +7479,6 @@ msgstr ""
7413msgid "do not resolve hostnames" 7479msgid "do not resolve hostnames"
7414msgstr "" 7480msgstr ""
7415 7481
7416#: src/transport/gnunet-transport.c:1404
7417#: src/transport/gnunet-transport-profiler.c:601
7418msgid "peer identity"
7419msgstr ""
7420
7421#: src/transport/gnunet-transport.c:1408 7482#: src/transport/gnunet-transport.c:1408
7422msgid "monitor plugin sessions" 7483msgid "monitor plugin sessions"
7423msgstr "" 7484msgstr ""
@@ -7426,39 +7487,6 @@ msgstr ""
7426msgid "send data for benchmarking to the other peer (until CTRL-C)" 7487msgid "send data for benchmarking to the other peer (until CTRL-C)"
7427msgstr "" 7488msgstr ""
7428 7489
7429#: src/transport/gnunet-transport.c:1426
7430#: src/transport/gnunet-transport-profiler.c:614
7431#, fuzzy
7432msgid "Direct access to transport service."
7433msgstr "åˆå§‹åŒ–“%sâ€æœåŠ¡å¤±è´¥ã€‚\n"
7434
7435#: src/transport/gnunet-transport-profiler.c:220
7436#, c-format
7437msgid "%llu B in %llu ms == %.2f KB/s!\n"
7438msgstr ""
7439
7440#: src/transport/gnunet-transport-profiler.c:577
7441msgid "send data to peer"
7442msgstr ""
7443
7444#: src/transport/gnunet-transport-profiler.c:581
7445msgid "receive data from peer"
7446msgstr ""
7447
7448#: src/transport/gnunet-transport-profiler.c:586
7449msgid "iterations"
7450msgstr ""
7451
7452#: src/transport/gnunet-transport-profiler.c:591
7453#, fuzzy
7454msgid "number of messages to send"
7455msgstr "æ¯æ¬¡è¿­ä»£æ‰€ä½¿ç”¨çš„消æ¯æ•°é‡"
7456
7457#: src/transport/gnunet-transport-profiler.c:596
7458#, fuzzy
7459msgid "message size to use"
7460msgstr "消æ¯å°ºå¯¸"
7461
7462#: src/transport/plugin_transport_http_client.c:1488 7490#: src/transport/plugin_transport_http_client.c:1488
7463#: src/transport/plugin_transport_http_server.c:2331 7491#: src/transport/plugin_transport_http_server.c:2331
7464#: src/transport/plugin_transport_http_server.c:3562 7492#: src/transport/plugin_transport_http_server.c:3562
@@ -7735,20 +7763,6 @@ msgstr ""
7735msgid "TCP transport advertises itself as being on port %llu\n" 7763msgid "TCP transport advertises itself as being on port %llu\n"
7736msgstr "" 7764msgstr ""
7737 7765
7738#: src/transport/plugin_transport_udp_broadcasting.c:169
7739msgid "# Multicast HELLO beacons received via UDP"
7740msgstr ""
7741
7742#: src/transport/plugin_transport_udp_broadcasting.c:553
7743msgid ""
7744"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n"
7745msgstr ""
7746
7747#: src/transport/plugin_transport_udp_broadcasting.c:571
7748#, c-format
7749msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n"
7750msgstr ""
7751
7752#: src/transport/plugin_transport_udp.c:3170 7766#: src/transport/plugin_transport_udp.c:3170
7753#, c-format 7767#, c-format
7754msgid "" 7768msgid ""
@@ -7797,6 +7811,20 @@ msgstr "“%sâ€ä¸å¯ç”¨ã€‚\n"
7797msgid "Failed to create UDP network sockets\n" 7811msgid "Failed to create UDP network sockets\n"
7798msgstr "å‘é€æ¶ˆæ¯å¤±è´¥ã€‚\n" 7812msgstr "å‘é€æ¶ˆæ¯å¤±è´¥ã€‚\n"
7799 7813
7814#: src/transport/plugin_transport_udp_broadcasting.c:169
7815msgid "# Multicast HELLO beacons received via UDP"
7816msgstr ""
7817
7818#: src/transport/plugin_transport_udp_broadcasting.c:553
7819msgid ""
7820"Disabling HELLO broadcasting due to friend-to-friend only configuration!\n"
7821msgstr ""
7822
7823#: src/transport/plugin_transport_udp_broadcasting.c:571
7824#, c-format
7825msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n"
7826msgstr ""
7827
7800#: src/transport/plugin_transport_unix.c:1396 7828#: src/transport/plugin_transport_unix.c:1396
7801#, fuzzy, c-format 7829#, fuzzy, c-format
7802msgid "Cannot bind to `%s'\n" 7830msgid "Cannot bind to `%s'\n"
@@ -7949,7 +7977,7 @@ msgstr ""
7949msgid "Service process failed to report status\n" 7977msgid "Service process failed to report status\n"
7950msgstr "" 7978msgstr ""
7951 7979
7952#: src/transport/tcp_service_legacy.c:1253 src/util/disk.c:1040 7980#: src/transport/tcp_service_legacy.c:1253 src/util/disk.c:1220
7953#: src/util/service.c:1637 7981#: src/util/service.c:1637
7954#, c-format 7982#, c-format
7955msgid "Cannot obtain information about user `%s': %s\n" 7983msgid "Cannot obtain information about user `%s': %s\n"
@@ -8068,39 +8096,15 @@ msgstr "IP æ ¼å¼æ— æ•ˆï¼šâ€œ%sâ€\n"
8068msgid "Failed to serialize metadata `%s'" 8096msgid "Failed to serialize metadata `%s'"
8069msgstr "å‘é€æ¶ˆæ¯å¤±è´¥ã€‚\n" 8097msgstr "å‘é€æ¶ˆæ¯å¤±è´¥ã€‚\n"
8070 8098
8071#: src/util/client.c:747 src/util/client.c:937 8099#: src/util/client.c:747 src/util/client.c:938
8072msgid "not a valid filename" 8100msgid "not a valid filename"
8073msgstr "" 8101msgstr ""
8074 8102
8075#: src/util/client.c:1103 8103#: src/util/client.c:1104
8076#, c-format 8104#, c-format
8077msgid "Need a non-empty hostname for service `%s'.\n" 8105msgid "Need a non-empty hostname for service `%s'.\n"
8078msgstr "" 8106msgstr ""
8079 8107
8080#: src/util/common_logging.c:259 src/util/common_logging.c:1114
8081msgid "DEBUG"
8082msgstr "调试"
8083
8084#: src/util/common_logging.c:261 src/util/common_logging.c:1112
8085msgid "INFO"
8086msgstr "ä¿¡æ¯"
8087
8088#: src/util/common_logging.c:263 src/util/common_logging.c:1110
8089msgid "MESSAGE"
8090msgstr ""
8091
8092#: src/util/common_logging.c:265 src/util/common_logging.c:1108
8093msgid "WARNING"
8094msgstr "警告"
8095
8096#: src/util/common_logging.c:267 src/util/common_logging.c:1106
8097msgid "ERROR"
8098msgstr "错误"
8099
8100#: src/util/common_logging.c:269 src/util/common_logging.c:1116
8101msgid "NONE"
8102msgstr ""
8103
8104#: src/util/common_logging.c:626 src/util/common_logging.c:665 8108#: src/util/common_logging.c:626 src/util/common_logging.c:665
8105#, c-format 8109#, c-format
8106msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n" 8110msgid "ERROR: Unable to parse log definition: Syntax error at `%s'.\n"
@@ -8111,6 +8115,30 @@ msgstr ""
8111msgid "Message `%.*s' repeated %u times in the last %s\n" 8115msgid "Message `%.*s' repeated %u times in the last %s\n"
8112msgstr "消æ¯â€œ%.*sâ€é‡å¤äº† %u 次,在最近 %llu 秒内\n" 8116msgstr "消æ¯â€œ%.*sâ€é‡å¤äº† %u 次,在最近 %llu 秒内\n"
8113 8117
8118#: src/util/common_logging.c:1106
8119msgid "ERROR"
8120msgstr "错误"
8121
8122#: src/util/common_logging.c:1108
8123msgid "WARNING"
8124msgstr "警告"
8125
8126#: src/util/common_logging.c:1110
8127msgid "MESSAGE"
8128msgstr ""
8129
8130#: src/util/common_logging.c:1112
8131msgid "INFO"
8132msgstr "ä¿¡æ¯"
8133
8134#: src/util/common_logging.c:1114
8135msgid "DEBUG"
8136msgstr "调试"
8137
8138#: src/util/common_logging.c:1116
8139msgid "NONE"
8140msgstr ""
8141
8114#: src/util/common_logging.c:1117 8142#: src/util/common_logging.c:1117
8115msgid "INVALID" 8143msgid "INVALID"
8116msgstr "" 8144msgstr ""
@@ -8134,39 +8162,69 @@ msgid ""
8134"Configuration specifies invalid value for option `%s' in section `%s': %s\n" 8162"Configuration specifies invalid value for option `%s' in section `%s': %s\n"
8135msgstr "é…ç½®ä¸æ»¡è¶³é…置规范文件“%sâ€çš„约æŸï¼\n" 8163msgstr "é…ç½®ä¸æ»¡è¶³é…置规范文件“%sâ€çš„约æŸï¼\n"
8136 8164
8137#: src/util/configuration.c:370 8165#: src/util/configuration.c:790
8166#, c-format
8167msgid "Illegal directive in line %u (parsing restricted section %s)\n"
8168msgstr ""
8169
8170#: src/util/configuration.c:800
8171#, c-format
8172msgid "Bad directive in line %u\n"
8173msgstr ""
8174
8175#: src/util/configuration.c:853
8176#, c-format
8177msgid "Bad inline-secret directive in line %u\n"
8178msgstr ""
8179
8180#: src/util/configuration.c:875
8181#, c-format
8182msgid "Unknown or malformed directive '%s' in line %u\n"
8183msgstr ""
8184
8185#: src/util/configuration.c:905
8186#, fuzzy, c-format
8187msgid "Syntax error while deserializing in line %u (option without section)\n"
8188msgstr "é…置文件“%sâ€ç¬¬ %d 行有语法错误。\n"
8189
8190#: src/util/configuration.c:949
8138#, fuzzy, c-format 8191#, fuzzy, c-format
8139msgid "Syntax error while deserializing in line %u\n" 8192msgid "Syntax error while deserializing in line %u\n"
8140msgstr "é…置文件“%sâ€ç¬¬ %d 行有语法错误。\n" 8193msgstr "é…置文件“%sâ€ç¬¬ %d 行有语法错误。\n"
8141 8194
8142#: src/util/configuration.c:420 8195#: src/util/configuration.c:1049
8143#, fuzzy, c-format 8196#, fuzzy, c-format
8144msgid "Error while reading file `%s'\n" 8197msgid "Error while reading file `%s'\n"
8145msgstr "è§£æž dscl 输出时出错。\n" 8198msgstr "è§£æž dscl 输出时出错。\n"
8146 8199
8147#: src/util/configuration.c:980 8200#: src/util/configuration.c:1062
8201#, fuzzy, c-format
8202msgid "Failed to parse configuration file `%s'\n"
8203msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
8204
8205#: src/util/configuration.c:1695
8148#, fuzzy 8206#, fuzzy
8149msgid "Not a valid relative time specification" 8207msgid "Not a valid relative time specification"
8150msgstr "é…置文件“%sâ€å·²å†™å…¥ã€‚\n" 8208msgstr "é…置文件“%sâ€å·²å†™å…¥ã€‚\n"
8151 8209
8152#: src/util/configuration.c:1050 8210#: src/util/configuration.c:1765
8153#, c-format 8211#, c-format
8154msgid "" 8212msgid ""
8155"Configuration value '%s' for '%s' in section '%s' is not in set of legal " 8213"Configuration value '%s' for '%s' in section '%s' is not in set of legal "
8156"choices\n" 8214"choices\n"
8157msgstr "" 8215msgstr ""
8158 8216
8159#: src/util/configuration.c:1145 8217#: src/util/configuration.c:1860
8160#, c-format 8218#, c-format
8161msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n" 8219msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n"
8162msgstr "" 8220msgstr ""
8163 8221
8164#: src/util/configuration.c:1177 8222#: src/util/configuration.c:1892
8165#, fuzzy, c-format 8223#, fuzzy, c-format
8166msgid "Missing closing `%s' in option `%s'\n" 8224msgid "Missing closing `%s' in option `%s'\n"
8167msgstr "é…置文件“%sâ€å·²å†™å…¥ã€‚\n" 8225msgstr "é…置文件“%sâ€å·²å†™å…¥ã€‚\n"
8168 8226
8169#: src/util/configuration.c:1243 8227#: src/util/configuration.c:1958
8170#, c-format 8228#, c-format
8171msgid "" 8229msgid ""
8172"Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined " 8230"Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined "
@@ -8210,7 +8268,7 @@ msgstr "对驱动器“%2$sâ€çš„“%1$sâ€æ“作失败:%3$u\n"
8210msgid "RSA signature verification failed at %s:%d: %s\n" 8268msgid "RSA signature verification failed at %s:%d: %s\n"
8211msgstr "对驱动器“%2$sâ€çš„“%1$sâ€æ“作失败:%3$u\n" 8269msgstr "对驱动器“%2$sâ€çš„“%1$sâ€æ“作失败:%3$u\n"
8212 8270
8213#: src/util/disk.c:823 8271#: src/util/disk.c:843
8214#, c-format 8272#, c-format
8215msgid "Expected `%s' to be a directory!\n" 8273msgid "Expected `%s' to be a directory!\n"
8216msgstr "“%sâ€åº”为目录ï¼\n" 8274msgstr "“%sâ€åº”为目录ï¼\n"
@@ -8391,60 +8449,69 @@ msgstr "您必须å‘“%sâ€é€‰é¡¹ä¼ é€’一个数字。\n"
8391msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n" 8449msgid "Argument `%s' malformed. Expected base32 (Crockford) encoded value.\n"
8392msgstr "" 8450msgstr ""
8393 8451
8394#: src/util/gnunet-base32.c:45 8452#: src/util/gnunet-base32.c:46
8395msgid "run decoder modus, otherwise runs as encoder" 8453msgid "run decoder modus, otherwise runs as encoder"
8396msgstr "" 8454msgstr ""
8397 8455
8398#: src/util/gnunet-config.c:167 8456#: src/util/gnunet-config.c:187
8399#, fuzzy, c-format
8400msgid "failed to load configuration defaults"
8401msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
8402
8403#: src/util/gnunet-config.c:179
8404#, fuzzy, c-format
8405msgid "%s or %s argument is required\n"
8406msgstr "设置è¦ä½¿ç”¨çš„昵称(å¿…é¡»)"
8407
8408#: src/util/gnunet-config.c:186
8409#, c-format 8457#, c-format
8410msgid "The following sections are available:\n" 8458msgid "The following sections are available:\n"
8411msgstr "" 8459msgstr ""
8412 8460
8413#: src/util/gnunet-config.c:234 8461#: src/util/gnunet-config.c:201
8462#, fuzzy, c-format
8463msgid "%s, %s or %s argument is required\n"
8464msgstr "设置è¦ä½¿ç”¨çš„昵称(å¿…é¡»)"
8465
8466#: src/util/gnunet-config.c:266
8414#, c-format 8467#, c-format
8415msgid "--option argument required to set value\n" 8468msgid "--option argument required to set value\n"
8416msgstr "" 8469msgstr ""
8417 8470
8418#: src/util/gnunet-config.c:284 8471#: src/util/gnunet-config.c:309
8419msgid "interpret option value as a filename (with $-expansion)" 8472#, fuzzy, c-format
8420msgstr "" 8473msgid "failed to load configuration defaults"
8474msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
8421 8475
8422#: src/util/gnunet-config.c:291 8476#: src/util/gnunet-config.c:354
8423msgid "test if the current installation supports the specified BACKEND" 8477msgid "test if the current installation supports the specified BACKEND"
8424msgstr "" 8478msgstr ""
8425 8479
8426#: src/util/gnunet-config.c:297 8480#: src/util/gnunet-config.c:360
8427msgid "name of the section to access" 8481#, fuzzy
8482msgid "write the full configuration file, including default values"
8483msgstr "é…置文件“%sâ€å·²å†™å…¥ã€‚\n"
8484
8485#: src/util/gnunet-config.c:365
8486msgid "interpret option value as a filename (with $-expansion)"
8428msgstr "" 8487msgstr ""
8429 8488
8430#: src/util/gnunet-config.c:302 8489#: src/util/gnunet-config.c:370
8431msgid "name of the option to access" 8490msgid "name of the option to access"
8432msgstr "" 8491msgstr ""
8433 8492
8434#: src/util/gnunet-config.c:307 8493#: src/util/gnunet-config.c:376
8435msgid "value to set" 8494msgid "rewrite the configuration file, even if nothing changed"
8495msgstr ""
8496
8497#: src/util/gnunet-config.c:382
8498msgid "output extra diagnostics"
8436msgstr "" 8499msgstr ""
8437 8500
8438#: src/util/gnunet-config.c:312 8501#: src/util/gnunet-config.c:387
8439#, fuzzy 8502#, fuzzy
8440msgid "print available configuration sections" 8503msgid "print available configuration sections"
8441msgstr "ç«‹å³ä¿å­˜é…置?" 8504msgstr "ç«‹å³ä¿å­˜é…置?"
8442 8505
8443#: src/util/gnunet-config.c:318 8506#: src/util/gnunet-config.c:393
8444msgid "write configuration file that only contains delta to defaults" 8507msgid "name of the section to access"
8508msgstr ""
8509
8510#: src/util/gnunet-config.c:398
8511msgid "value to set"
8445msgstr "" 8512msgstr ""
8446 8513
8447#: src/util/gnunet-config.c:330 8514#: src/util/gnunet-config.c:413
8448#, fuzzy 8515#, fuzzy
8449msgid "Manipulate GNUnet configuration files" 8516msgid "Manipulate GNUnet configuration files"
8450msgstr "更改é…置文件中的一个值" 8517msgstr "更改é…置文件中的一个值"
@@ -8635,7 +8702,7 @@ msgstr "创建用户出错"
8635msgid "Unable to shorten unix path `%s' while keeping name unique\n" 8702msgid "Unable to shorten unix path `%s' while keeping name unique\n"
8636msgstr "" 8703msgstr ""
8637 8704
8638#: src/util/network.c:1361 8705#: src/util/network.c:1359
8639#, c-format 8706#, c-format
8640msgid "" 8707msgid ""
8641"Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n" 8708"Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n"
@@ -8673,22 +8740,22 @@ msgstr ""
8673msgid "`%s' failed for library `%s' with error: %s\n" 8740msgid "`%s' failed for library `%s' with error: %s\n"
8674msgstr "" 8741msgstr ""
8675 8742
8676#: src/util/plugin.c:409 8743#: src/util/plugin.c:414
8677#, fuzzy 8744#, fuzzy
8678msgid "Could not determine plugin installation path.\n" 8745msgid "Could not determine plugin installation path.\n"
8679msgstr "无法确定用户界é¢å®šä¹‰æ–‡ä»¶ã€‚" 8746msgstr "无法确定用户界é¢å®šä¹‰æ–‡ä»¶ã€‚"
8680 8747
8681#: src/util/program.c:259 8748#: src/util/program.c:252
8682#, fuzzy, c-format 8749#, fuzzy, c-format
8683msgid "Unreadable or malformed configuration file `%s', exit ...\n" 8750msgid "Unreadable or malformed configuration file `%s', exit ...\n"
8684msgstr "解æžé…置文件“%sâ€å¤±è´¥\n" 8751msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
8685 8752
8686#: src/util/program.c:276 8753#: src/util/program.c:272
8687#, fuzzy, c-format 8754#, fuzzy, c-format
8688msgid "Unreadable or malformed default configuration file `%s', exit ...\n" 8755msgid "Unreadable or malformed default configuration file `%s', exit ...\n"
8689msgstr "解æžé…置文件“%sâ€å¤±è´¥\n" 8756msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
8690 8757
8691#: src/util/program.c:291 8758#: src/util/program.c:288
8692#, fuzzy 8759#, fuzzy
8693msgid "Unreadable or malformed configuration, exit ...\n" 8760msgid "Unreadable or malformed configuration, exit ...\n"
8694msgstr "解æžé…置文件“%sâ€å¤±è´¥\n" 8761msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
@@ -8753,82 +8820,82 @@ msgstr ""
8753msgid "Attempting to proxy service `%s' to invalid port %d or hostname.\n" 8820msgid "Attempting to proxy service `%s' to invalid port %d or hostname.\n"
8754msgstr "" 8821msgstr ""
8755 8822
8756#: src/util/strings.c:503 8823#: src/util/strings.c:409
8757#, c-format 8824#, c-format
8758msgid "Character sets requested were `%s'->`%s'\n" 8825msgid "Character sets requested were `%s'->`%s'\n"
8759msgstr "" 8826msgstr ""
8760 8827
8761#: src/util/strings.c:637 8828#: src/util/strings.c:501
8762msgid "Failed to expand `$HOME': environment variable `HOME' not set" 8829msgid "Failed to expand `$HOME': environment variable `HOME' not set"
8763msgstr "扩展“$HOMEâ€å¤±è´¥ï¼šæ²¡æœ‰è®¾ç½®çŽ¯å¢ƒå˜é‡â€œHOMEâ€" 8830msgstr "扩展“$HOMEâ€å¤±è´¥ï¼šæ²¡æœ‰è®¾ç½®çŽ¯å¢ƒå˜é‡â€œHOMEâ€"
8764 8831
8765#: src/util/strings.c:1241 8832#: src/util/strings.c:1036
8766msgid "IPv6 address did not start with `['\n" 8833msgid "IPv6 address did not start with `['\n"
8767msgstr "" 8834msgstr ""
8768 8835
8769#: src/util/strings.c:1249 8836#: src/util/strings.c:1044
8770msgid "IPv6 address did contain ':' to separate port number\n" 8837msgid "IPv6 address did contain ':' to separate port number\n"
8771msgstr "" 8838msgstr ""
8772 8839
8773#: src/util/strings.c:1256 8840#: src/util/strings.c:1051
8774msgid "IPv6 address did contain ']' before ':' to separate port number\n" 8841msgid "IPv6 address did contain ']' before ':' to separate port number\n"
8775msgstr "" 8842msgstr ""
8776 8843
8777#: src/util/strings.c:1264 8844#: src/util/strings.c:1059
8778msgid "IPv6 address did contain a valid port number after the last ':'\n" 8845msgid "IPv6 address did contain a valid port number after the last ':'\n"
8779msgstr "" 8846msgstr ""
8780 8847
8781#: src/util/strings.c:1273 8848#: src/util/strings.c:1068
8782#, fuzzy, c-format 8849#, fuzzy, c-format
8783msgid "Invalid IPv6 address `%s': %s\n" 8850msgid "Invalid IPv6 address `%s': %s\n"
8784msgstr "无效的进程优先级“%sâ€\n" 8851msgstr "无效的进程优先级“%sâ€\n"
8785 8852
8786#: src/util/strings.c:1500 src/util/strings.c:1511 8853#: src/util/strings.c:1250 src/util/strings.c:1261
8787msgid "Port not in range\n" 8854msgid "Port not in range\n"
8788msgstr "" 8855msgstr ""
8789 8856
8790#: src/util/strings.c:1520 8857#: src/util/strings.c:1270
8791#, fuzzy, c-format 8858#, fuzzy, c-format
8792msgid "Malformed port policy `%s'\n" 8859msgid "Malformed port policy `%s'\n"
8793msgstr "解æžé…置文件“%sâ€å¤±è´¥\n" 8860msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
8794 8861
8795#: src/util/strings.c:1603 src/util/strings.c:1632 src/util/strings.c:1679 8862#: src/util/strings.c:1341 src/util/strings.c:1370 src/util/strings.c:1417
8796#: src/util/strings.c:1699 8863#: src/util/strings.c:1437
8797#, c-format 8864#, c-format
8798msgid "Invalid format for IP: `%s'\n" 8865msgid "Invalid format for IP: `%s'\n"
8799msgstr "IP æ ¼å¼æ— æ•ˆï¼šâ€œ%sâ€\n" 8866msgstr "IP æ ¼å¼æ— æ•ˆï¼šâ€œ%sâ€\n"
8800 8867
8801#: src/util/strings.c:1657 8868#: src/util/strings.c:1395
8802#, c-format 8869#, c-format
8803msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)." 8870msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)."
8804msgstr "网络表示法无效(“/%d†在 IPv4 CIDR 中是éžæ³•çš„)。" 8871msgstr "网络表示法无效(“/%d†在 IPv4 CIDR 中是éžæ³•çš„)。"
8805 8872
8806#: src/util/strings.c:1708 8873#: src/util/strings.c:1446
8807#, fuzzy, c-format 8874#, fuzzy, c-format
8808msgid "Invalid format: `%s'\n" 8875msgid "Invalid format: `%s'\n"
8809msgstr "IP æ ¼å¼æ— æ•ˆï¼šâ€œ%sâ€\n" 8876msgstr "IP æ ¼å¼æ— æ•ˆï¼šâ€œ%sâ€\n"
8810 8877
8811#: src/util/strings.c:1761 8878#: src/util/strings.c:1488
8812#, c-format 8879#, c-format
8813msgid "Invalid network notation (does not end with ';': `%s')\n" 8880msgid "Invalid network notation (does not end with ';': `%s')\n"
8814msgstr "无效的网络表示法(没有以“;â€ç»“尾:“%sâ€)\n" 8881msgstr "无效的网络表示法(没有以“;â€ç»“尾:“%sâ€)\n"
8815 8882
8816#: src/util/strings.c:1811 8883#: src/util/strings.c:1538
8817#, c-format 8884#, c-format
8818msgid "Wrong format `%s' for netmask\n" 8885msgid "Wrong format `%s' for netmask\n"
8819msgstr "网络掩ç çš„æ ¼å¼â€œ%sâ€é”™è¯¯\n" 8886msgstr "网络掩ç çš„æ ¼å¼â€œ%sâ€é”™è¯¯\n"
8820 8887
8821#: src/util/strings.c:1842 8888#: src/util/strings.c:1569
8822#, c-format 8889#, c-format
8823msgid "Wrong format `%s' for network\n" 8890msgid "Wrong format `%s' for network\n"
8824msgstr "网络的格å¼â€œ%sâ€é”™è¯¯\n" 8891msgstr "网络的格å¼â€œ%sâ€é”™è¯¯\n"
8825 8892
8826#: src/util/time.c:878 src/util/time.c:906 8893#: src/util/time.c:699 src/util/time.c:727
8827#, c-format 8894#, c-format
8828msgid "Failed to map `%s', cannot assure monotonic time!\n" 8895msgid "Failed to map `%s', cannot assure monotonic time!\n"
8829msgstr "" 8896msgstr ""
8830 8897
8831#: src/util/time.c:914 8898#: src/util/time.c:735
8832#, c-format 8899#, c-format
8833msgid "" 8900msgid ""
8834"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n" 8901"Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"
@@ -9004,13 +9071,33 @@ msgstr ""
9004msgid "Setup tunnels via VPN." 9071msgid "Setup tunnels via VPN."
9005msgstr "" 9072msgstr ""
9006 9073
9007#: src/zonemaster/gnunet-service-zonemaster.c:847
9008#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418 9074#: src/zonemaster/gnunet-service-zonemaster-monitor.c:418
9075#: src/zonemaster/gnunet-service-zonemaster.c:847
9009#, fuzzy 9076#, fuzzy
9010msgid "Failed to connect to the namestore!\n" 9077msgid "Failed to connect to the namestore!\n"
9011msgstr "åˆå§‹åŒ–“%sâ€æœåŠ¡å¤±è´¥ã€‚\n" 9078msgstr "åˆå§‹åŒ–“%sâ€æœåŠ¡å¤±è´¥ã€‚\n"
9012 9079
9013#, fuzzy, c-format 9080#, fuzzy, c-format
9081#~ msgid "Start logging `%s'\n"
9082#~ msgstr "未知的命令“%sâ€ã€‚\n"
9083
9084#, fuzzy, c-format
9085#~ msgid "Failed to connect master peer [%u] with slave [%u]\n"
9086#~ msgstr "åˆå§‹åŒ–“%sâ€æœåŠ¡å¤±è´¥ã€‚\n"
9087
9088#, fuzzy, c-format
9089#~ msgid "Unsupported form value `%s'\n"
9090#~ msgstr "未知的命令“%sâ€ã€‚\n"
9091
9092#, fuzzy, c-format
9093#~ msgid "Failed to create page for `%s'\n"
9094#~ msgstr "å‘é€æ¶ˆæ¯å¤±è´¥ã€‚\n"
9095
9096#, fuzzy, c-format
9097#~ msgid "Failed to setup post processor for `%s'\n"
9098#~ msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
9099
9100#, fuzzy, c-format
9014#~ msgid "Unable to parse PKEY record `%s'\n" 9101#~ msgid "Unable to parse PKEY record `%s'\n"
9015#~ msgstr "解æžé…置文件“%sâ€å¤±è´¥\n" 9102#~ msgstr "解æžé…置文件“%sâ€å¤±è´¥\n"
9016 9103
@@ -9306,10 +9393,6 @@ msgstr "åˆå§‹åŒ–“%sâ€æœåŠ¡å¤±è´¥ã€‚\n"
9306#~ msgstr "åˆå§‹åŒ–“%sâ€æœåŠ¡å¤±è´¥ã€‚\n" 9393#~ msgstr "åˆå§‹åŒ–“%sâ€æœåŠ¡å¤±è´¥ã€‚\n"
9307 9394
9308#, fuzzy 9395#, fuzzy
9309#~ msgid "unknown error"
9310#~ msgstr "未知错误"
9311
9312#, fuzzy
9313#~ msgid "Invalid response from `fs' service." 9396#~ msgid "Invalid response from `fs' service."
9314#~ msgstr "“%sâ€çš„å‚数无效。\n" 9397#~ msgstr "“%sâ€çš„å‚数无效。\n"
9315 9398
@@ -10003,10 +10086,6 @@ msgstr "åˆå§‹åŒ–“%sâ€æœåŠ¡å¤±è´¥ã€‚\n"
10003#~ msgstr "ä¿å­˜é…置失败。" 10086#~ msgstr "ä¿å­˜é…置失败。"
10004 10087
10005#, fuzzy 10088#, fuzzy
10006#~ msgid "Configuration fails to specify `%s', assuming default value."
10007#~ msgstr "é…置文件“%sâ€å·²å†™å…¥ã€‚\n"
10008
10009#, fuzzy
10010#~ msgid "Option `%s' not specified in configuration section `%s'\n" 10089#~ msgid "Option `%s' not specified in configuration section `%s'\n"
10011#~ msgstr "é…置文件“%sâ€å·²å†™å…¥ã€‚\n" 10090#~ msgstr "é…置文件“%sâ€å·²å†™å…¥ã€‚\n"
10012 10091
diff --git a/src/Makefile.am b/src/Makefile.am
index 5df85f9db..ef8c5b110 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -3,7 +3,6 @@
3if HAVE_TESTING 3if HAVE_TESTING
4 TESTING = testing 4 TESTING = testing
5 TESTBED = testbed-logger testbed 5 TESTBED = testbed-logger testbed
6 ATS_TESTS = ats-tests
7endif 6endif
8 7
9if HAVE_EXPERIMENTAL 8if HAVE_EXPERIMENTAL
@@ -72,7 +71,6 @@ SUBDIRS = \
72 ats-tool \ 71 ats-tool \
73 core \ 72 core \
74 $(TESTBED) \ 73 $(TESTBED) \
75 $(ATS_TESTS) \
76 nse \ 74 nse \
77 dhtu \ 75 dhtu \
78 dht \ 76 dht \
diff --git a/src/arm/arm_api.c b/src/arm/arm_api.c
index afc32fc3a..5fcbfb0a9 100644
--- a/src/arm/arm_api.c
+++ b/src/arm/arm_api.c
@@ -977,9 +977,12 @@ GNUNET_ARM_request_service_start (struct GNUNET_ARM_Handle *h,
977 { 977 {
978 GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, 978 GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING,
979 "pipe"); 979 "pipe");
980 } else { 980 ret = GNUNET_ARM_RESULT_START_FAILED;
981 }
982 else
983 {
981 wsig = GNUNET_DISK_pipe_detach_end (sig, 984 wsig = GNUNET_DISK_pipe_detach_end (sig,
982 GNUNET_DISK_PIPE_END_WRITE); 985 GNUNET_DISK_PIPE_END_WRITE);
983 ret = start_arm_service (h, 986 ret = start_arm_service (h,
984 std_inheritance, 987 std_inheritance,
985 wsig); 988 wsig);
diff --git a/src/ats-tests/.gitignore b/src/ats-tests/.gitignore
deleted file mode 100644
index 5e15db496..000000000
--- a/src/ats-tests/.gitignore
+++ /dev/null
@@ -1,14 +0,0 @@
1gnunet-solver-eval
2gnunet-ats-sim
3perf_ats_proportional_core_bandwidth
4perf_ats_proportional_core_latency
5perf_ats_proportional_core_none
6perf_ats_proportional_transport_bandwidth
7perf_ats_proportional_transport_latency
8perf_ats_proportional_transport_none
9perf_ats_mlp_core_bandwidth
10perf_ats_mlp_core_latency
11perf_ats_mlp_core_none
12perf_ats_mlp_transport_bandwidth
13perf_ats_mlp_transport_latency
14perf_ats_mlp_transport_none
diff --git a/src/ats-tests/Makefile.am b/src/ats-tests/Makefile.am
deleted file mode 100644
index 543fed287..000000000
--- a/src/ats-tests/Makefile.am
+++ /dev/null
@@ -1,169 +0,0 @@
1#t This Makefile.am is in the public domain
2AM_CPPFLAGS = -I$(top_srcdir)/src/include
3
4pkgcfgdir= $(pkgdatadir)/config.d/
5
6libexecdir= $(pkglibdir)/libexec/
7
8if USE_COVERAGE
9 AM_CFLAGS = -fprofile-arcs -ftest-coverage
10endif
11
12if HAVE_TESTING
13TESTING_TESTS = \
14 perf_ats_proportional_transport_none \
15 perf_ats_proportional_transport_bandwidth \
16 perf_ats_proportional_transport_latency \
17 perf_ats_proportional_core_none \
18 perf_ats_proportional_core_bandwidth \
19 perf_ats_proportional_core_latency \
20 $(PERF_MLP)
21
22endif
23
24lib_LTLIBRARIES = \
25 libgnunetatstesting.la
26
27check_PROGRAMS = \
28 $(TESTING_TESTS)
29
30if ENABLE_TEST_RUN
31AM_TESTS_ENVIRONMENT=export GNUNET_PREFIX=$${GNUNET_PREFIX:-@libdir@};export PATH=$${GNUNET_PREFIX:-@prefix@}/bin:$$PATH;unset XDG_DATA_HOME;unset XDG_CONFIG_HOME;
32TESTS = $(check_PROGRAMS)
33endif
34
35noinst_PROGRAMS = \
36 gnunet-ats-sim gnunet-solver-eval
37
38libgnunetatstesting_la_SOURCES = \
39 ats-testing.c ats-testing.h \
40 ats-testing-log.c ats-testing-traffic.c \
41 ats-testing-experiment.c ats-testing-preferences.c
42libgnunetatstesting_la_LIBADD = \
43 $(top_builddir)/src/testbed/libgnunettestbed.la \
44 $(top_builddir)/src/testing/libgnunettesting.la \
45 $(top_builddir)/src/statistics/libgnunetstatistics.la \
46 $(top_builddir)/src/core/libgnunetcore.la \
47 $(top_builddir)/src/transport/libgnunettransport.la \
48 $(top_builddir)/src/hello/libgnunethello.la \
49 $(top_builddir)/src/ats/libgnunetats.la \
50 $(top_builddir)/src/arm/libgnunetarm.la \
51 $(top_builddir)/src/util/libgnunetutil.la \
52 $(GN_LIBINTL)
53libgnunetatstesting_la_DEPENDENCIES = \
54 $(top_builddir)/src/testbed/libgnunettestbed.la \
55 $(top_builddir)/src/ats/libgnunetats.la
56libgnunetatstesting_la_LDFLAGS = \
57 $(GN_LIB_LDFLAGS)
58
59gnunet_ats_sim_SOURCES = \
60 gnunet-ats-sim.c
61gnunet_ats_sim_LDADD = \
62 $(top_builddir)/src/util/libgnunetutil.la \
63 $(top_builddir)/src/ats-tests/libgnunetatstesting.la \
64 $(top_builddir)/src/testbed/libgnunettestbed.la \
65 $(top_builddir)/src/ats/libgnunetats.la \
66 $(top_builddir)/src/core/libgnunetcore.la \
67 $(top_builddir)/src/transport/libgnunettransport.la
68gnunet_ats_sim_DEPENDENCIES = \
69 libgnunetatstesting.la \
70 $(top_builddir)/src/util/libgnunetutil.la
71gnunet_ats_sim_LDFLAGS = \
72 $(GN_LIBINTL)
73
74
75gnunet_solver_eval_SOURCES = \
76 gnunet-solver-eval.c
77gnunet_solver_eval_LDADD = \
78 $(top_builddir)/src/util/libgnunetutil.la \
79 $(top_builddir)/src/ats/libgnunetats.la \
80 $(top_builddir)/src/core/libgnunetcore.la \
81 $(top_builddir)/src/transport/libgnunettransport.la
82gnunet_solver_eval_DEPENDENCIES = \
83 $(top_builddir)/src/util/libgnunetutil.la
84gnunet_solver_eval_LDFLAGS = \
85 $(GN_LIBINTL)
86
87perf_ats_proportional_core_none_SOURCES = \
88 perf_ats.c
89perf_ats_proportional_core_none_LDADD = \
90 $(top_builddir)/src/util/libgnunetutil.la \
91 $(top_builddir)/src/ats-tests/libgnunetatstesting.la \
92 $(top_builddir)/src/testbed/libgnunettestbed.la \
93 $(top_builddir)/src/ats/libgnunetats.la \
94 $(top_builddir)/src/core/libgnunetcore.la \
95 $(top_builddir)/src/transport/libgnunettransport.la
96perf_ats_proportional_core_none_DEPENDENCIES = \
97 libgnunetatstesting.la \
98 $(top_builddir)/src/util/libgnunetutil.la
99
100perf_ats_proportional_transport_none_SOURCES = \
101 perf_ats.c
102perf_ats_proportional_transport_none_LDADD = \
103 $(top_builddir)/src/util/libgnunetutil.la \
104 $(top_builddir)/src/ats-tests/libgnunetatstesting.la \
105 $(top_builddir)/src/testbed/libgnunettestbed.la \
106 $(top_builddir)/src/ats/libgnunetats.la \
107 $(top_builddir)/src/core/libgnunetcore.la \
108 $(top_builddir)/src/transport/libgnunettransport.la
109perf_ats_proportional_transport_none_DEPENDENCIES = \
110 libgnunetatstesting.la \
111 $(top_builddir)/src/util/libgnunetutil.la
112
113perf_ats_proportional_core_bandwidth_SOURCES = \
114 perf_ats.c
115perf_ats_proportional_core_bandwidth_LDADD = \
116 $(top_builddir)/src/util/libgnunetutil.la \
117 $(top_builddir)/src/ats-tests/libgnunetatstesting.la \
118 $(top_builddir)/src/testbed/libgnunettestbed.la \
119 $(top_builddir)/src/ats/libgnunetats.la \
120 $(top_builddir)/src/core/libgnunetcore.la \
121 $(top_builddir)/src/transport/libgnunettransport.la
122perf_ats_proportional_core_bandwidth_DEPENDENCIES = \
123 libgnunetatstesting.la \
124 $(top_builddir)/src/util/libgnunetutil.la
125
126perf_ats_proportional_transport_bandwidth_SOURCES = \
127 perf_ats.c
128perf_ats_proportional_transport_bandwidth_LDADD = \
129 $(top_builddir)/src/util/libgnunetutil.la \
130 $(top_builddir)/src/ats-tests/libgnunetatstesting.la \
131 $(top_builddir)/src/testbed/libgnunettestbed.la \
132 $(top_builddir)/src/ats/libgnunetats.la \
133 $(top_builddir)/src/core/libgnunetcore.la \
134 $(top_builddir)/src/transport/libgnunettransport.la
135perf_ats_proportional_transport_bandwidth_DEPENDENCIES = \
136 libgnunetatstesting.la \
137 $(top_builddir)/src/util/libgnunetutil.la
138
139perf_ats_proportional_core_latency_SOURCES = \
140 perf_ats.c
141perf_ats_proportional_core_latency_LDADD = \
142 $(top_builddir)/src/util/libgnunetutil.la \
143 $(top_builddir)/src/ats-tests/libgnunetatstesting.la \
144 $(top_builddir)/src/testbed/libgnunettestbed.la \
145 $(top_builddir)/src/ats/libgnunetats.la \
146 $(top_builddir)/src/core/libgnunetcore.la \
147 $(top_builddir)/src/transport/libgnunettransport.la
148perf_ats_proportional_core_latency_DEPENDENCIES = \
149 libgnunetatstesting.la \
150 $(top_builddir)/src/util/libgnunetutil.la
151
152perf_ats_proportional_transport_latency_SOURCES = \
153 perf_ats.c
154perf_ats_proportional_transport_latency_LDADD = \
155 $(top_builddir)/src/util/libgnunetutil.la \
156 $(top_builddir)/src/ats-tests/libgnunetatstesting.la \
157 $(top_builddir)/src/testbed/libgnunettestbed.la \
158 $(top_builddir)/src/ats/libgnunetats.la \
159 $(top_builddir)/src/core/libgnunetcore.la \
160 $(top_builddir)/src/transport/libgnunettransport.la
161perf_ats_proportional_transport_latency_DEPENDENCIES = \
162 libgnunetatstesting.la \
163 $(top_builddir)/src/util/libgnunetutil.la
164
165EXTRA_DIST = \
166 gnunet_ats_sim_default.conf \
167 perf_ats_proportional_none.conf \
168 perf_ats_proportional_bandwidth.conf \
169 perf_ats_proportional_latency.conf
diff --git a/src/ats-tests/ats-testing-experiment.c b/src/ats-tests/ats-testing-experiment.c
deleted file mode 100644
index 9f8db1be4..000000000
--- a/src/ats-tests/ats-testing-experiment.c
+++ /dev/null
@@ -1,820 +0,0 @@
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2010-2013 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20/**
21 * @file ats-tests/ats-testing-experiment.c
22 * @brief ats benchmark: controlled experiment execution
23 * @author Christian Grothoff
24 * @author Matthias Wachs
25 */
26#include "platform.h"
27#include "gnunet_util_lib.h"
28#include "ats-testing.h"
29
30const char *
31print_op (enum OperationType op)
32{
33 switch (op)
34 {
35 case START_SEND:
36 return "START_SEND";
37
38 case STOP_SEND:
39 return "STOP_SEND";
40
41 case START_PREFERENCE:
42 return "START_PREFERENCE";
43
44 case STOP_PREFERENCE:
45 return "STOP_PREFERENCE";
46
47 default:
48 break;
49 }
50 return "";
51}
52
53
54static struct Experiment *
55create_experiment ()
56{
57 struct Experiment *e;
58
59 e = GNUNET_new (struct Experiment);
60 e->name = NULL;
61 e->num_masters = 0;
62 e->num_slaves = 0;
63 e->start = NULL;
64 e->total_duration = GNUNET_TIME_UNIT_ZERO;
65 return e;
66}
67
68
69static void
70free_experiment (struct Experiment *e)
71{
72 struct Episode *cur;
73 struct Episode *next;
74 struct GNUNET_ATS_TEST_Operation *cur_o;
75 struct GNUNET_ATS_TEST_Operation *next_o;
76
77 next = e->start;
78 for (cur = next; NULL != cur; cur = next)
79 {
80 next = cur->next;
81
82 next_o = cur->head;
83 for (cur_o = next_o; NULL != cur_o; cur_o = next_o)
84 {
85 next_o = cur_o->next;
86 GNUNET_free (cur_o);
87 }
88 GNUNET_free (cur);
89 }
90
91 GNUNET_free (e->name);
92 GNUNET_free (e->cfg_file);
93 GNUNET_free (e);
94}
95
96
97static int
98load_episode (struct Experiment *e,
99 struct Episode *cur,
100 struct GNUNET_CONFIGURATION_Handle *cfg)
101{
102 struct GNUNET_ATS_TEST_Operation *o;
103 char *sec_name;
104 char *op_name;
105 char *op;
106 char *type;
107 char *pref;
108 int op_counter = 0;
109
110 fprintf (stderr, "Parsing episode %u\n", cur->id);
111 GNUNET_asprintf (&sec_name, "episode-%u", cur->id);
112
113 while (1)
114 {
115 /* Load operation */
116 GNUNET_asprintf (&op_name, "op-%u-operation", op_counter);
117 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_string (cfg,
118 sec_name,
119 op_name, &op))
120 {
121 GNUNET_free (op_name);
122 break;
123 }
124 o = GNUNET_new (struct GNUNET_ATS_TEST_Operation);
125 /* operations = set_rate, start_send, stop_send, set_preference */
126 if (0 == strcmp (op, "start_send"))
127 {
128 o->type = START_SEND;
129 }
130 else if (0 == strcmp (op, "stop_send"))
131 {
132 o->type = STOP_SEND;
133 }
134 else if (0 == strcmp (op, "start_preference"))
135 {
136 o->type = START_PREFERENCE;
137 }
138 else if (0 == strcmp (op, "stop_preference"))
139 {
140 o->type = STOP_PREFERENCE;
141 }
142 else
143 {
144 fprintf (stderr, "Invalid operation %u `%s' in episode %u\n",
145 op_counter, op, cur->id);
146 GNUNET_free (op);
147 GNUNET_free (op_name);
148 GNUNET_free (o);
149 GNUNET_free (sec_name);
150 return GNUNET_SYSERR;
151 }
152 GNUNET_free (op_name);
153
154 /* Get source */
155 GNUNET_asprintf (&op_name, "op-%u-src", op_counter);
156 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_number (cfg,
157 sec_name,
158 op_name,
159 &o->src_id))
160 {
161 fprintf (stderr, "Missing src in operation %u `%s' in episode %u\n",
162 op_counter, op, cur->id);
163 GNUNET_free (op);
164 GNUNET_free (op_name);
165 GNUNET_free (o);
166 GNUNET_free (sec_name);
167 return GNUNET_SYSERR;
168 }
169 if (o->src_id > (e->num_masters - 1))
170 {
171 fprintf (stderr, "Invalid src %llu in operation %u `%s' in episode %u\n",
172 o->src_id, op_counter, op, cur->id);
173 GNUNET_free (op);
174 GNUNET_free (op_name);
175 GNUNET_free (o);
176 GNUNET_free (sec_name);
177 return GNUNET_SYSERR;
178 }
179 GNUNET_free (op_name);
180
181 /* Get destination */
182 GNUNET_asprintf (&op_name, "op-%u-dest", op_counter);
183 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_number (cfg,
184 sec_name,
185 op_name,
186 &o->dest_id))
187 {
188 fprintf (stderr, "Missing src in operation %u `%s' in episode %u\n",
189 op_counter, op, cur->id);
190 GNUNET_free (op);
191 GNUNET_free (op_name);
192 GNUNET_free (o);
193 GNUNET_free (sec_name);
194 return GNUNET_SYSERR;
195 }
196 if (o->dest_id > (e->num_slaves - 1))
197 {
198 fprintf (stderr,
199 "Invalid destination %llu in operation %u `%s' in episode %u\n",
200 o->dest_id, op_counter, op, cur->id);
201 GNUNET_free (op);
202 GNUNET_free (op_name);
203 GNUNET_free (o);
204 GNUNET_free (sec_name);
205 return GNUNET_SYSERR;
206 }
207 GNUNET_free (op_name);
208
209 GNUNET_asprintf (&op_name, "op-%u-type", op_counter);
210 if ((GNUNET_SYSERR != GNUNET_CONFIGURATION_get_value_string (cfg,
211 sec_name,
212 op_name,
213 &type)) &&
214 (STOP_SEND != o->type) &&
215 (STOP_PREFERENCE != o->type))
216 {
217 /* Load arguments for set_rate, start_send, set_preference */
218 if (0 == strcmp (type, "constant"))
219 {
220 o->gen_type = GNUNET_ATS_TEST_TG_CONSTANT;
221 }
222 else if (0 == strcmp (type, "linear"))
223 {
224 o->gen_type = GNUNET_ATS_TEST_TG_LINEAR;
225 }
226 else if (0 == strcmp (type, "sinus"))
227 {
228 o->gen_type = GNUNET_ATS_TEST_TG_SINUS;
229 }
230 else if (0 == strcmp (type, "random"))
231 {
232 o->gen_type = GNUNET_ATS_TEST_TG_RANDOM;
233 }
234 else
235 {
236 fprintf (stderr, "Invalid type %u `%s' in episode %u\n",
237 op_counter, op, cur->id);
238 GNUNET_free (type);
239 GNUNET_free (op);
240 GNUNET_free (op_name);
241 GNUNET_free (sec_name);
242 GNUNET_free (o);
243 return GNUNET_SYSERR;
244 }
245 GNUNET_free (op_name);
246
247 /* Get base rate */
248 GNUNET_asprintf (&op_name, "op-%u-base-rate", op_counter);
249 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_number (cfg,
250 sec_name,
251 op_name,
252 &o->base_rate))
253 {
254 fprintf (stderr,
255 "Missing base rate in operation %u `%s' in episode %u\n",
256 op_counter, op, cur->id);
257 GNUNET_free (type);
258 GNUNET_free (op);
259 GNUNET_free (op_name);
260 GNUNET_free (sec_name);
261 GNUNET_free (o);
262 return GNUNET_SYSERR;
263 }
264 GNUNET_free (op_name);
265
266 /* Get max rate */
267 GNUNET_asprintf (&op_name, "op-%u-max-rate", op_counter);
268 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_number (cfg,
269 sec_name,
270 op_name,
271 &o->max_rate))
272 {
273 if ((GNUNET_ATS_TEST_TG_LINEAR == o->gen_type) ||
274 (GNUNET_ATS_TEST_TG_RANDOM == o->gen_type) ||
275 (GNUNET_ATS_TEST_TG_SINUS == o->gen_type))
276 {
277 fprintf (stderr,
278 "Missing max rate in operation %u `%s' in episode %u\n",
279 op_counter, op, cur->id);
280 GNUNET_free (type);
281 GNUNET_free (op_name);
282 GNUNET_free (op);
283 GNUNET_free (o);
284 GNUNET_free (sec_name);
285 return GNUNET_SYSERR;
286 }
287 }
288 GNUNET_free (op_name);
289
290 /* Get period */
291 GNUNET_asprintf (&op_name, "op-%u-period", op_counter);
292 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_time (cfg,
293 sec_name,
294 op_name,
295 &o->period))
296 {
297 o->period = cur->duration;
298 }
299 GNUNET_free (op_name);
300
301 if (START_PREFERENCE == o->type)
302 {
303 /* Get frequency */
304 GNUNET_asprintf (&op_name, "op-%u-frequency", op_counter);
305 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_time (cfg,
306 sec_name,
307 op_name,
308 &o->frequency))
309 {
310 fprintf (stderr,
311 "Missing frequency in operation %u `%s' in episode %u\n",
312 op_counter, op, cur->id);
313 GNUNET_free (type);
314 GNUNET_free (op_name);
315 GNUNET_free (op);
316 GNUNET_free (o);
317 GNUNET_free (sec_name);
318 return GNUNET_SYSERR;
319 }
320 GNUNET_free (op_name);
321
322 /* Get preference */
323 GNUNET_asprintf (&op_name, "op-%u-pref", op_counter);
324 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_string (cfg,
325 sec_name,
326 op_name,
327 &pref))
328 {
329 fprintf (stderr,
330 "Missing preference in operation %u `%s' in episode %u\n",
331 op_counter, op, cur->id);
332 GNUNET_free (type);
333 GNUNET_free (op_name);
334 GNUNET_free (op);
335 GNUNET_free (pref);
336 GNUNET_free (o);
337 GNUNET_free (sec_name);
338 return GNUNET_SYSERR;
339 }
340
341 if (0 == strcmp (pref, "bandwidth"))
342 o->pref_type = GNUNET_ATS_PREFERENCE_BANDWIDTH;
343 else if (0 == strcmp (pref, "latency"))
344 o->pref_type = GNUNET_ATS_PREFERENCE_LATENCY;
345 else
346 {
347 fprintf (stderr,
348 "Invalid preference in operation %u `%s' in episode %u\n",
349 op_counter, op, cur->id);
350 GNUNET_free (type);
351 GNUNET_free (op_name);
352 GNUNET_free (op);
353 GNUNET_free (pref);
354 GNUNET_free (o);
355 GNUNET_free (sec_name);
356 return GNUNET_SYSERR;
357 }
358 GNUNET_free (pref);
359 GNUNET_free (op_name);
360 }
361 }
362
363 /* Safety checks */
364 if ((GNUNET_ATS_TEST_TG_LINEAR == o->gen_type) ||
365 (GNUNET_ATS_TEST_TG_SINUS == o->gen_type))
366 {
367 if ((o->max_rate - o->base_rate) > o->base_rate)
368 {
369 /* This will cause an underflow */
370 GNUNET_break (0);
371 }
372 fprintf (stderr,
373 "Selected max rate and base rate cannot be used for desired traffic form!\n");
374 }
375
376 if ((START_SEND == o->type) || (START_PREFERENCE == o->type))
377 fprintf (stderr,
378 "Found operation %u in episode %u: %s [%llu]->[%llu] == %s, %llu -> %llu in %s\n",
379 op_counter, cur->id, print_op (o->type), o->src_id,
380 o->dest_id, (NULL != type) ? type : "",
381 o->base_rate, o->max_rate,
382 GNUNET_STRINGS_relative_time_to_string (o->period, GNUNET_YES));
383 else
384 fprintf (stderr, "Found operation %u in episode %u: %s [%llu]->[%llu]\n",
385 op_counter, cur->id, print_op (o->type), o->src_id, o->dest_id);
386
387 GNUNET_free (type);
388 GNUNET_free (op);
389
390 GNUNET_CONTAINER_DLL_insert (cur->head, cur->tail, o);
391 op_counter++;
392 }
393 GNUNET_free (sec_name);
394
395 return GNUNET_OK;
396}
397
398
399static int
400load_episodes (struct Experiment *e, struct GNUNET_CONFIGURATION_Handle *cfg)
401{
402 int e_counter = 0;
403 char *sec_name;
404 struct GNUNET_TIME_Relative e_duration;
405 struct Episode *cur;
406 struct Episode *last;
407
408 e_counter = 0;
409 last = NULL;
410 while (1)
411 {
412 GNUNET_asprintf (&sec_name, "episode-%u", e_counter);
413 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_time (cfg,
414 sec_name,
415 "duration",
416 &e_duration))
417 {
418 GNUNET_free (sec_name);
419 break;
420 }
421
422 cur = GNUNET_new (struct Episode);
423 cur->duration = e_duration;
424 cur->id = e_counter;
425
426 if (GNUNET_OK != load_episode (e, cur, cfg))
427 {
428 GNUNET_free (sec_name);
429 GNUNET_free (cur);
430 return GNUNET_SYSERR;
431 }
432
433 fprintf (stderr, "Found episode %u with duration %s \n",
434 e_counter,
435 GNUNET_STRINGS_relative_time_to_string (cur->duration,
436 GNUNET_YES));
437
438 /* Update experiment */
439 e->num_episodes++;
440 e->total_duration = GNUNET_TIME_relative_add (e->total_duration,
441 cur->duration);
442 /* Put in linked list */
443 if (NULL == last)
444 e->start = cur;
445 else
446 last->next = cur;
447
448 GNUNET_free (sec_name);
449 e_counter++;
450 last = cur;
451 }
452 return e_counter;
453}
454
455
456static void
457timeout_experiment (void *cls)
458{
459 struct Experiment *e = cls;
460
461 e->experiment_timeout_task = NULL;
462 fprintf (stderr, "Experiment timeout!\n");
463
464 if (NULL != e->episode_timeout_task)
465 {
466 GNUNET_SCHEDULER_cancel (e->episode_timeout_task);
467 e->episode_timeout_task = NULL;
468 }
469
470 e->e_done_cb (e, GNUNET_TIME_absolute_get_duration (e->start_time),
471 GNUNET_SYSERR);
472}
473
474
475static void
476enforce_start_send (struct GNUNET_ATS_TEST_Operation *op)
477{
478 struct BenchmarkPeer *peer;
479 struct BenchmarkPartner *partner;
480
481 peer = GNUNET_ATS_TEST_get_peer (op->src_id);
482 if (NULL == peer)
483 {
484 GNUNET_break (0);
485 return;
486 }
487
488 partner = GNUNET_ATS_TEST_get_partner (op->src_id, op->dest_id);
489 if (NULL == partner)
490 {
491 GNUNET_break (0);
492 return;
493 }
494
495 fprintf (stderr, "Found master %llu slave %llu\n", op->src_id, op->dest_id);
496
497 if (NULL != partner->tg)
498 {
499 fprintf (stderr, "Stopping traffic between master %llu slave %llu\n",
500 op->src_id, op->dest_id);
501 GNUNET_ATS_TEST_generate_traffic_stop (partner->tg);
502 partner->tg = NULL;
503 }
504
505 partner->tg = GNUNET_ATS_TEST_generate_traffic_start (peer, partner,
506 op->gen_type,
507 op->base_rate,
508 op->max_rate,
509 op->period,
510 GNUNET_TIME_UNIT_FOREVER_REL);
511}
512
513
514static void
515enforce_stop_send (struct GNUNET_ATS_TEST_Operation *op)
516{
517 struct BenchmarkPartner *p;
518
519 p = GNUNET_ATS_TEST_get_partner (op->src_id, op->dest_id);
520 if (NULL == p)
521 {
522 GNUNET_break (0);
523 return;
524 }
525
526 fprintf (stderr, "Found master %llu slave %llu\n", op->src_id, op->dest_id);
527
528 if (NULL != p->tg)
529 {
530 fprintf (stderr, "Stopping traffic between master %llu slave %llu\n",
531 op->src_id, op->dest_id);
532 GNUNET_ATS_TEST_generate_traffic_stop (p->tg);
533 p->tg = NULL;
534 }
535}
536
537
538static void
539enforce_start_preference (struct GNUNET_ATS_TEST_Operation *op)
540{
541 struct BenchmarkPeer *peer;
542 struct BenchmarkPartner *partner;
543
544 peer = GNUNET_ATS_TEST_get_peer (op->src_id);
545 if (NULL == peer)
546 {
547 GNUNET_break (0);
548 return;
549 }
550
551 partner = GNUNET_ATS_TEST_get_partner (op->src_id, op->dest_id);
552 if (NULL == partner)
553 {
554 GNUNET_break (0);
555 return;
556 }
557
558 fprintf (stderr, "Found master %llu slave %llu\n", op->src_id, op->dest_id);
559
560 if (NULL != partner->pg)
561 {
562 fprintf (stderr, "Stopping traffic between master %llu slave %llu\n",
563 op->src_id, op->dest_id);
564 GNUNET_ATS_TEST_generate_preferences_stop (partner->pg);
565 partner->pg = NULL;
566 }
567
568 partner->pg = GNUNET_ATS_TEST_generate_preferences_start (peer, partner,
569 op->gen_type,
570 op->base_rate,
571 op->max_rate,
572 op->period,
573 op->frequency,
574 op->pref_type);
575}
576
577
578static void
579enforce_stop_preference (struct GNUNET_ATS_TEST_Operation *op)
580{
581 struct BenchmarkPartner *p;
582
583 p = GNUNET_ATS_TEST_get_partner (op->src_id, op->dest_id);
584 if (NULL == p)
585 {
586 GNUNET_break (0);
587 return;
588 }
589
590 fprintf (stderr, "Found master %llu slave %llu\n", op->src_id, op->dest_id);
591
592 if (NULL != p->pg)
593 {
594 fprintf (stderr, "Stopping preference between master %llu slave %llu\n",
595 op->src_id, op->dest_id);
596 GNUNET_ATS_TEST_generate_preferences_stop (p->pg);
597 p->pg = NULL;
598 }
599}
600
601
602static void
603enforce_episode (struct Episode *ep)
604{
605 struct GNUNET_ATS_TEST_Operation *cur;
606
607 for (cur = ep->head; NULL != cur; cur = cur->next)
608 {
609 fprintf (stderr, "Enforcing operation: %s [%llu]->[%llu] == %llu\n",
610 print_op (cur->type), cur->src_id, cur->dest_id, cur->base_rate);
611 switch (cur->type)
612 {
613 case START_SEND:
614 enforce_start_send (cur);
615 break;
616
617 case STOP_SEND:
618 enforce_stop_send (cur);
619 break;
620
621 case START_PREFERENCE:
622 enforce_start_preference (cur);
623 break;
624
625 case STOP_PREFERENCE:
626 enforce_stop_preference (cur);
627 break;
628
629 default:
630 break;
631 }
632 }
633}
634
635
636static void
637timeout_episode (void *cls)
638{
639 struct Experiment *e = cls;
640
641 e->episode_timeout_task = NULL;
642 if (NULL != e->ep_done_cb)
643 e->ep_done_cb (e->cur);
644
645 /* Scheduling next */
646 e->cur = e->cur->next;
647 if (NULL == e->cur)
648 {
649 /* done */
650 fprintf (stderr, "Last episode done!\n");
651 if (NULL != e->experiment_timeout_task)
652 {
653 GNUNET_SCHEDULER_cancel (e->experiment_timeout_task);
654 e->experiment_timeout_task = NULL;
655 }
656 e->e_done_cb (e, GNUNET_TIME_absolute_get_duration (e->start_time),
657 GNUNET_OK);
658 return;
659 }
660
661 fprintf (stderr, "Running episode %u with timeout %s\n",
662 e->cur->id,
663 GNUNET_STRINGS_relative_time_to_string (e->cur->duration,
664 GNUNET_YES));
665 enforce_episode (e->cur);
666
667 e->episode_timeout_task = GNUNET_SCHEDULER_add_delayed (e->cur->duration,
668 &timeout_episode, e);
669}
670
671
672void
673GNUNET_ATS_TEST_experimentation_run (struct Experiment *e,
674 GNUNET_ATS_TESTING_EpisodeDoneCallback
675 ep_done_cb,
676 GNUNET_ATS_TESTING_ExperimentDoneCallback
677 e_done_cb)
678{
679 fprintf (stderr, "Running experiment `%s' with timeout %s\n", e->name,
680 GNUNET_STRINGS_relative_time_to_string (e->max_duration,
681 GNUNET_YES));
682 e->e_done_cb = e_done_cb;
683 e->ep_done_cb = ep_done_cb;
684 e->start_time = GNUNET_TIME_absolute_get ();
685
686 /* Start total time out */
687 e->experiment_timeout_task = GNUNET_SCHEDULER_add_delayed (e->max_duration,
688 &timeout_experiment,
689 e);
690
691 /* Start */
692 e->cur = e->start;
693 fprintf (stderr, "Running episode %u with timeout %s\n",
694 e->cur->id,
695 GNUNET_STRINGS_relative_time_to_string (e->cur->duration,
696 GNUNET_YES));
697 enforce_episode (e->cur);
698 e->episode_timeout_task = GNUNET_SCHEDULER_add_delayed (e->cur->duration,
699 &timeout_episode, e);
700}
701
702
703struct Experiment *
704GNUNET_ATS_TEST_experimentation_load (const char *filename)
705{
706 struct Experiment *e;
707 struct GNUNET_CONFIGURATION_Handle *cfg;
708
709 e = NULL;
710
711 cfg = GNUNET_CONFIGURATION_create ();
712 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_load (cfg, filename))
713 {
714 fprintf (stderr, "Failed to load `%s'\n", filename);
715 GNUNET_CONFIGURATION_destroy (cfg);
716 return NULL;
717 }
718
719 e = create_experiment ();
720
721 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_string (cfg, "experiment",
722 "name", &e->name))
723 {
724 fprintf (stderr, "Invalid %s", "name");
725 free_experiment (e);
726 return NULL;
727 }
728 else
729 fprintf (stderr, "Experiment name: `%s'\n", e->name);
730
731 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_filename (cfg,
732 "experiment",
733 "cfg_file",
734 &e->cfg_file))
735 {
736 fprintf (stderr, "Invalid %s", "cfg_file");
737 free_experiment (e);
738 return NULL;
739 }
740 else
741 fprintf (stderr, "Experiment name: `%s'\n", e->cfg_file);
742
743 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_number (cfg, "experiment",
744 "masters",
745 &e->num_masters))
746 {
747 fprintf (stderr, "Invalid %s", "masters");
748 free_experiment (e);
749 return NULL;
750 }
751 else
752 fprintf (stderr, "Experiment masters: `%llu'\n",
753 e->num_masters);
754
755 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_number (cfg, "experiment",
756 "slaves",
757 &e->num_slaves))
758 {
759 fprintf (stderr, "Invalid %s", "slaves");
760 free_experiment (e);
761 return NULL;
762 }
763 else
764 fprintf (stderr, "Experiment slaves: `%llu'\n",
765 e->num_slaves);
766
767 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_time (cfg, "experiment",
768 "log_freq",
769 &e->log_freq))
770 {
771 fprintf (stderr, "Invalid %s", "log_freq");
772 free_experiment (e);
773 return NULL;
774 }
775 else
776 fprintf (stderr, "Experiment logging frequency: `%s'\n",
777 GNUNET_STRINGS_relative_time_to_string (e->log_freq, GNUNET_YES));
778
779 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_time (cfg, "experiment",
780 "max_duration",
781 &e->max_duration))
782 {
783 fprintf (stderr, "Invalid %s", "max_duration");
784 free_experiment (e);
785 return NULL;
786 }
787 else
788 fprintf (stderr, "Experiment duration: `%s'\n",
789 GNUNET_STRINGS_relative_time_to_string (e->max_duration,
790 GNUNET_YES));
791
792 load_episodes (e, cfg);
793 fprintf (stderr, "Loaded %u episodes with total duration %s\n",
794 e->num_episodes,
795 GNUNET_STRINGS_relative_time_to_string (e->total_duration,
796 GNUNET_YES));
797
798 GNUNET_CONFIGURATION_destroy (cfg);
799 return e;
800}
801
802
803void
804GNUNET_ATS_TEST_experimentation_stop (struct Experiment *e)
805{
806 if (NULL != e->experiment_timeout_task)
807 {
808 GNUNET_SCHEDULER_cancel (e->experiment_timeout_task);
809 e->experiment_timeout_task = NULL;
810 }
811 if (NULL != e->episode_timeout_task)
812 {
813 GNUNET_SCHEDULER_cancel (e->episode_timeout_task);
814 e->episode_timeout_task = NULL;
815 }
816 free_experiment (e);
817}
818
819
820/* end of file ats-testing-experiment.c*/
diff --git a/src/ats-tests/ats-testing-log.c b/src/ats-tests/ats-testing-log.c
deleted file mode 100644
index dfdfa8a80..000000000
--- a/src/ats-tests/ats-testing-log.c
+++ /dev/null
@@ -1,979 +0,0 @@
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2010-2013 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20/**
21 * @file ats-tests/ats-testing-log.c
22 * @brief ats benchmark: logging for performance tests
23 * @author Christian Grothoff
24 * @author Matthias Wachs
25 */
26#include "platform.h"
27#include "gnunet_util_lib.h"
28#include "ats-testing.h"
29
30#define THROUGHPUT_TEMPLATE "#!/usr/bin/gnuplot \n" \
31 "set datafile separator ';' \n" \
32 "set title \"Throughput between Master and Slaves\" \n" \
33 "set xlabel \"Time in ms\" \n" \
34 "set ylabel \"Bytes/s\" \n" \
35 "set grid \n"
36
37#define RTT_TEMPLATE "#!/usr/bin/gnuplot \n" \
38 "set datafile separator ';' \n" \
39 "set title \"Application level roundtrip time between Master and Slaves\" \n" \
40 "set xlabel \"Time in ms\" \n" \
41 "set ylabel \"ms\" \n" \
42 "set grid \n"
43
44#define BW_TEMPLATE "#!/usr/bin/gnuplot \n" \
45 "set datafile separator ';' \n" \
46 "set title \"Bandwidth inbound and outbound between Master and Slaves\" \n" \
47 "set xlabel \"Time in ms\" \n" \
48 "set ylabel \"Bytes / s \" \n" \
49 "set grid \n"
50
51#define LOG_ITEMS_TIME 2
52#define LOG_ITEMS_PER_PEER 17
53
54#define LOG_ITEM_BYTES_SENT 1
55#define LOG_ITEM_MSGS_SENT 2
56#define LOG_ITEM_THROUGHPUT_SENT 3
57#define LOG_ITEM_BYTES_RECV 4
58#define LOG_ITEM_MSGS_RECV 5
59#define LOG_ITEM_THROUGHPUT_RECV 6
60#define LOG_ITEM_APP_RTT 7
61#define LOG_ITEM_ATS_BW_IN 8
62#define LOG_ITEM_ATS_BW_OUT 9
63#define LOG_ITEM_ATS_COSTS_LAN 10
64#define LOG_ITEM_ATS_WAN 11
65#define LOG_ITEM_ATS_WLAN 12
66#define LOG_ITEM_ATS_DELAY 13
67#define LOG_ITEM_ATS_DISTANCE 14
68#define LOG_ITEM_ATS_NETWORKTYPE 15
69#define LOG_ITEM_ATS_UTIL_UP 16
70#define LOG_ITEM_ATS_UTIL_DOWN 17
71
72/**
73 * A single logging time step for a partner
74 */
75struct PartnerLoggingTimestep
76{
77 /**
78 * Peer
79 */
80 struct BenchmarkPeer *slave;
81
82 /**
83 * Total number of messages this peer has sent
84 */
85 unsigned int total_messages_sent;
86
87 /**
88 * Total number of bytes this peer has sent
89 */
90 unsigned int total_bytes_sent;
91
92 /**
93 * Total number of messages this peer has received
94 */
95 unsigned int total_messages_received;
96
97 /**
98 * Total number of bytes this peer has received
99 */
100 unsigned int total_bytes_received;
101
102 /**
103 * Total outbound throughput for master in Bytes / s
104 */
105 unsigned int throughput_sent;
106
107 /**
108 * Total inbound throughput for master in Bytes / s
109 */
110 unsigned int throughput_recv;
111
112 /**
113 * Accumulated RTT for all messages
114 */
115 unsigned int total_app_rtt;
116
117 /**
118 * Current application level delay
119 */
120 unsigned int app_rtt;
121
122 /* Current ATS properties */
123
124 unsigned int ats_distance;
125
126 struct GNUNET_TIME_Relative ats_delay;
127
128 uint32_t bandwidth_in;
129
130 uint32_t bandwidth_out;
131
132 uint32_t ats_utilization_out;
133
134 uint32_t ats_utilization_in;
135
136 enum GNUNET_NetworkType ats_network_type;
137
138 double pref_bandwidth;
139 double pref_delay;
140};
141
142
143/**
144 * A single logging time step for a peer
145 */
146struct PeerLoggingTimestep
147{
148 /**
149 * Next in DLL
150 */
151 struct PeerLoggingTimestep *next;
152
153 /**
154 * Prev in DLL
155 */
156 struct PeerLoggingTimestep *prev;
157
158 /**
159 * Logging timestamp
160 */
161 struct GNUNET_TIME_Absolute timestamp;
162
163 /**
164 * Total number of messages this peer has sent
165 */
166 unsigned int total_messages_sent;
167
168 /**
169 * Total number of bytes this peer has sent
170 */
171 unsigned int total_bytes_sent;
172
173 /**
174 * Total number of messages this peer has received
175 */
176 unsigned int total_messages_received;
177
178 /**
179 * Total number of bytes this peer has received
180 */
181 unsigned int total_bytes_received;
182
183 /**
184 * Total outbound throughput for master in Bytes / s
185 */
186 unsigned int total_throughput_send;
187
188 /**
189 * Total inbound throughput for master in Bytes / s
190 */
191 unsigned int total_throughput_recv;
192
193 /**
194 * Logs for slaves
195 */
196 struct PartnerLoggingTimestep *slaves_log;
197};
198
199/**
200 * Entry for a benchmark peer
201 */
202struct LoggingPeer
203{
204 /**
205 * Peer
206 */
207 struct BenchmarkPeer *peer;
208
209 /**
210 * Start time
211 */
212 struct GNUNET_TIME_Absolute start;
213
214 /**
215 * DLL for logging entries: head
216 */
217 struct PeerLoggingTimestep *head;
218
219 /**
220 * DLL for logging entries: tail
221 */
222 struct PeerLoggingTimestep *tail;
223};
224
225struct LoggingHandle
226{
227 /**
228 * Logging task
229 */
230 struct GNUNET_SCHEDULER_Task *log_task;
231
232 /**
233 * Reference to perf_ats' masters
234 */
235 int num_masters;
236 int num_slaves;
237 int running;
238 int verbose;
239 const char *name;
240 struct GNUNET_TIME_Relative frequency;
241
242 /**
243 * Log structure of length num_peers
244 */
245 struct LoggingPeer *lp;
246};
247
248
249static void
250write_throughput_gnuplot_script (char *fn, struct LoggingPeer *lp, char **fs,
251 int slaves)
252{
253 struct GNUNET_DISK_FileHandle *f;
254 char *gfn;
255 char *data;
256 int c_s;
257
258 GNUNET_asprintf (&gfn, "gnuplot_throughput_%s", fn);
259 fprintf (stderr,
260 "Writing throughput plot for master %u and %u slaves to `%s'\n",
261 lp->peer->no, slaves, gfn);
262
263 f = GNUNET_DISK_file_open (gfn,
264 GNUNET_DISK_OPEN_WRITE | GNUNET_DISK_OPEN_CREATE,
265 GNUNET_DISK_PERM_USER_EXEC
266 | GNUNET_DISK_PERM_USER_READ
267 | GNUNET_DISK_PERM_USER_WRITE);
268 if (NULL == f)
269 {
270 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Cannot open gnuplot file `%s'\n",
271 gfn);
272 GNUNET_free (gfn);
273 return;
274 }
275
276 /* Write header */
277 if (GNUNET_SYSERR == GNUNET_DISK_file_write (f, THROUGHPUT_TEMPLATE,
278 strlen (THROUGHPUT_TEMPLATE)))
279 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
280 "Cannot write data to plot file `%s'\n", gfn);
281
282 /* Write master data */
283 GNUNET_asprintf (&data,
284 "plot '%s' using 2:%u with lines title 'Master %u send total', \\\n" \
285 "'%s' using 2:%u with lines title 'Master %u receive total', \\\n",
286 fn, LOG_ITEMS_TIME + LOG_ITEM_THROUGHPUT_SENT, lp->peer->no,
287 fn, LOG_ITEMS_TIME + LOG_ITEM_THROUGHPUT_RECV, lp->peer->no);
288 if (GNUNET_SYSERR == GNUNET_DISK_file_write (f, data, strlen (data)))
289 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
290 "Cannot write data to plot file `%s'\n", gfn);
291 GNUNET_free (data);
292
293 for (c_s = 0; c_s < slaves; c_s++)
294 {
295 GNUNET_asprintf (&data,
296 "'%s' using 2:%u with lines title 'Master %u - Slave %u send', \\\n" \
297 "'%s' using 2:%u with lines title 'Master %u - Slave %u receive'%s\n",
298 fs[c_s],
299 LOG_ITEMS_TIME + LOG_ITEM_THROUGHPUT_SENT,
300 lp->peer->no,
301 lp->peer->partners[c_s].dest->no,
302 fs[c_s],
303 LOG_ITEMS_TIME + LOG_ITEM_THROUGHPUT_RECV,
304 lp->peer->no,
305 lp->peer->partners[c_s].dest->no,
306 (c_s < lp->peer->num_partners - 1) ? ", \\" :
307 "\n pause -1");
308 if (GNUNET_SYSERR == GNUNET_DISK_file_write (f, data, strlen (data)))
309 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
310 "Cannot write data to plot file `%s'\n", gfn);
311 GNUNET_free (data);
312 }
313
314 if (GNUNET_SYSERR == GNUNET_DISK_file_close (f))
315 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
316 "Cannot close gnuplot file `%s'\n", gfn);
317 else
318 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
319 "Data successfully written to plot file `%s'\n", gfn);
320 GNUNET_free (gfn);
321}
322
323
324static void
325write_rtt_gnuplot_script (char *fn, struct LoggingPeer *lp, char **fs, int
326 slaves)
327{
328 struct GNUNET_DISK_FileHandle *f;
329 char *gfn;
330 char *data;
331 int c_s;
332
333 GNUNET_asprintf (&gfn, "gnuplot_rtt_%s", fn);
334 fprintf (stderr, "Writing rtt plot for master %u to `%s'\n",
335 lp->peer->no, gfn);
336
337 f = GNUNET_DISK_file_open (gfn,
338 GNUNET_DISK_OPEN_WRITE | GNUNET_DISK_OPEN_CREATE,
339 GNUNET_DISK_PERM_USER_EXEC
340 | GNUNET_DISK_PERM_USER_READ
341 | GNUNET_DISK_PERM_USER_WRITE);
342 if (NULL == f)
343 {
344 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Cannot open gnuplot file `%s'\n",
345 gfn);
346 GNUNET_free (gfn);
347 return;
348 }
349
350 /* Write header */
351 if (GNUNET_SYSERR == GNUNET_DISK_file_write (f, RTT_TEMPLATE, strlen (
352 RTT_TEMPLATE)))
353 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
354 "Cannot write data to plot file `%s'\n", gfn);
355
356 for (c_s = 0; c_s < slaves; c_s++)
357 {
358 GNUNET_asprintf (&data,
359 "%s'%s' using 2:%u with lines title 'Master %u - Slave %u '%s\n",
360 (0 == c_s) ? "plot " : "",
361 fs[c_s],
362 LOG_ITEMS_TIME + LOG_ITEM_APP_RTT,
363 lp->peer->no,
364 lp->peer->partners[c_s].dest->no,
365 (c_s < lp->peer->num_partners - 1) ? ", \\" :
366 "\n pause -1");
367 if (GNUNET_SYSERR == GNUNET_DISK_file_write (f, data, strlen (data)))
368 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
369 "Cannot write data to plot file `%s'\n", gfn);
370 GNUNET_free (data);
371 }
372
373 if (GNUNET_SYSERR == GNUNET_DISK_file_close (f))
374 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Cannot close gnuplot file `%s'\n",
375 gfn);
376 else
377 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
378 "Data successfully written to plot file `%s'\n", gfn);
379 GNUNET_free (gfn);
380}
381
382
383static void
384write_bw_gnuplot_script (char *fn, struct LoggingPeer *lp, char **fs, int
385 slaves)
386{
387 struct GNUNET_DISK_FileHandle *f;
388 char *gfn;
389 char *data;
390 int c_s;
391
392 GNUNET_asprintf (&gfn, "gnuplot_bw_%s", fn);
393 fprintf (stderr, "Writing bandwidth plot for master %u to `%s'\n",
394 lp->peer->no, gfn);
395
396 f = GNUNET_DISK_file_open (gfn,
397 GNUNET_DISK_OPEN_WRITE | GNUNET_DISK_OPEN_CREATE,
398 GNUNET_DISK_PERM_USER_EXEC
399 | GNUNET_DISK_PERM_USER_READ
400 | GNUNET_DISK_PERM_USER_WRITE);
401 if (NULL == f)
402 {
403 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Cannot open gnuplot file `%s'\n",
404 gfn);
405 GNUNET_free (gfn);
406 return;
407 }
408
409 /* Write header */
410 if (GNUNET_SYSERR == GNUNET_DISK_file_write (f, BW_TEMPLATE, strlen (
411 BW_TEMPLATE)))
412 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
413 "Cannot write data to plot file `%s'\n", gfn);
414
415 for (c_s = 0; c_s < slaves; c_s++)
416 {
417 GNUNET_asprintf (&data, "%s" \
418 "'%s' using 2:%u with lines title 'BW out master %u - Slave %u ', \\\n" \
419 "'%s' using 2:%u with lines title 'BW in master %u - Slave %u '" \
420 "%s\n",
421 (0 == c_s) ? "plot " : "",
422 fs[c_s],
423 LOG_ITEMS_TIME + LOG_ITEM_ATS_BW_OUT,
424 lp->peer->no, c_s,
425 fs[c_s],
426 LOG_ITEMS_TIME + LOG_ITEM_ATS_BW_IN,
427 lp->peer->no, c_s,
428 (c_s < lp->peer->num_partners - 1) ? ", \\" :
429 "\n pause -1");
430 if (GNUNET_SYSERR == GNUNET_DISK_file_write (f, data, strlen (data)))
431 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
432 "Cannot write data to plot file `%s'\n", gfn);
433 GNUNET_free (data);
434 }
435
436 if (GNUNET_SYSERR == GNUNET_DISK_file_close (f))
437 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Cannot close gnuplot file `%s'\n",
438 gfn);
439 else
440 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
441 "Data successfully written to plot file `%s'\n", gfn);
442 GNUNET_free (gfn);
443}
444
445
446void
447GNUNET_ATS_TEST_logging_write_to_file (struct LoggingHandle *l,
448 const char *experiment_name,
449 int plots)
450{
451 struct GNUNET_DISK_FileHandle *f[l->num_slaves];
452 struct GNUNET_DISK_FileHandle *f_m;
453 const char *tmp_exp_name;
454 char *filename_master;
455 char *filename_slaves[l->num_slaves];
456 char *data;
457 struct PeerLoggingTimestep *cur_lt;
458 struct PartnerLoggingTimestep *plt;
459 struct GNUNET_TIME_Absolute timestamp;
460 int c_m;
461 int c_s;
462
463
464 timestamp = GNUNET_TIME_absolute_get ();
465
466 tmp_exp_name = experiment_name;
467 for (c_m = 0; c_m < l->num_masters; c_m++)
468 {
469 GNUNET_asprintf (&filename_master, "%s_%llu_master%u_%s",
470 experiment_name,
471 (unsigned long long) timestamp.abs_value_us, c_m, l->name);
472 fprintf (stderr, "Writing data for master %u to file `%s'\n",
473 c_m, filename_master);
474
475 f_m = GNUNET_DISK_file_open (filename_master,
476 GNUNET_DISK_OPEN_WRITE
477 | GNUNET_DISK_OPEN_CREATE,
478 GNUNET_DISK_PERM_USER_READ
479 | GNUNET_DISK_PERM_USER_WRITE);
480 if (NULL == f_m)
481 {
482 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Cannot open log file `%s'\n",
483 filename_master);
484 GNUNET_free (filename_master);
485 return;
486 }
487
488 GNUNET_asprintf (&data, "# master %u; experiment : %s\n"
489 "timestamp; timestamp delta; #messages sent; #bytes sent; #throughput sent; #messages received; #bytes received; #throughput received; \n",
490 c_m, experiment_name);
491 if (GNUNET_SYSERR == GNUNET_DISK_file_write (f_m, data, strlen (data)))
492 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
493 "Cannot write data to log file `%s'\n", filename_master);
494 GNUNET_free (data);
495
496 for (c_s = 0; c_s < l->lp[c_m].peer->num_partners; c_s++)
497 {
498 GNUNET_asprintf (&filename_slaves[c_s], "%s_%llu_master%u_slave_%u_%s",
499 tmp_exp_name,
500 (unsigned long long) timestamp.abs_value_us,
501 c_m, c_s, l->name);
502
503 fprintf (stderr, "Writing data for master %u slave %u to file `%s'\n",
504 c_m, c_s, filename_slaves[c_s]);
505
506 f[c_s] = GNUNET_DISK_file_open (filename_slaves[c_s],
507 GNUNET_DISK_OPEN_WRITE
508 | GNUNET_DISK_OPEN_CREATE,
509 GNUNET_DISK_PERM_USER_READ
510 | GNUNET_DISK_PERM_USER_WRITE);
511 if (NULL == f[c_s])
512 {
513 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Cannot open log file `%s'\n",
514 filename_slaves[c_s]);
515 GNUNET_free (filename_slaves[c_s]);
516 GNUNET_break (GNUNET_OK == GNUNET_DISK_file_close (f_m));
517 GNUNET_free (filename_master);
518 return;
519 }
520
521 /* Header */
522 GNUNET_asprintf (&data, "# master %u; slave %u ; experiment : %s\n"
523 "timestamp; timestamp delta; #messages sent; #bytes sent; #throughput sent; #messages received; #bytes received; #throughput received; " \
524 "rtt; bw in; bw out; ats_cost_lan; ats_cost_wlan; ats_delay; ats_distance; ats_network_type; ats_utilization_up ;ats_utilization_down;" \
525 "pref bandwidth; pref delay\n",
526 c_m, c_s, experiment_name);
527 if (GNUNET_SYSERR == GNUNET_DISK_file_write (f[c_s], data, strlen (data)))
528 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
529 "Cannot write data to log file `%s'\n",
530 filename_slaves[c_s]);
531 GNUNET_free (data);
532 }
533
534 for (cur_lt = l->lp[c_m].head; NULL != cur_lt; cur_lt = cur_lt->next)
535 {
536 if (l->verbose)
537 fprintf (stderr,
538 "Master [%u]: timestamp %llu %llu ; %u %u %u ; %u %u %u\n",
539 l->lp[c_m].peer->no,
540 (long long unsigned int) cur_lt->timestamp.abs_value_us,
541 (long long unsigned int) GNUNET_TIME_absolute_get_difference (
542 l->lp[c_m].start,
543 cur_lt
544 ->timestamp).rel_value_us / 1000,
545 cur_lt->total_messages_sent,
546 cur_lt->total_bytes_sent,
547 cur_lt->total_throughput_send,
548 cur_lt->total_messages_received,
549 cur_lt->total_bytes_received,
550 cur_lt->total_throughput_recv);
551
552 /* Assembling master string */
553 GNUNET_asprintf (&data, "%llu;%llu;%u;%u;%u;%u;%u;%u;\n",
554 (long long unsigned int) cur_lt->timestamp.abs_value_us,
555 (long long unsigned
556 int) GNUNET_TIME_absolute_get_difference (
557 l->lp[c_m].start,
558 cur_lt
559 ->timestamp).
560 rel_value_us / 1000,
561 cur_lt->total_messages_sent,
562 cur_lt->total_bytes_sent,
563 cur_lt->total_throughput_send,
564 cur_lt->total_messages_received,
565 cur_lt->total_bytes_received,
566 cur_lt->total_throughput_recv);
567
568 if (GNUNET_SYSERR == GNUNET_DISK_file_write (f_m, data, strlen (data)))
569 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
570 "Cannot write data to master file %u\n", c_m);
571 GNUNET_free (data);
572
573
574 for (c_s = 0; c_s < l->lp[c_m].peer->num_partners; c_s++)
575 {
576 plt = &cur_lt->slaves_log[c_s];
577 /* Log partners */
578
579 /* Assembling slave string */
580 GNUNET_asprintf (&data,
581 "%llu;%llu;%u;%u;%u;%u;%u;%u;%.3f;%u;%u;%llu;%u;%u;%u;%u;%.3f;%.3f\n",
582 (long long unsigned
583 int) cur_lt->timestamp.abs_value_us,
584 (long long unsigned
585 int) GNUNET_TIME_absolute_get_difference (
586 l->lp[c_m].start,
587 cur_lt
588 ->timestamp)
589 .rel_value_us / 1000,
590 plt->total_messages_sent,
591 plt->total_bytes_sent,
592 plt->throughput_sent,
593 plt->total_messages_received,
594 plt->total_bytes_received,
595 plt->throughput_recv,
596 (double) plt->app_rtt / 1000,
597 plt->bandwidth_in,
598 plt->bandwidth_out,
599 (unsigned long long) plt->ats_delay.rel_value_us,
600 plt->ats_distance,
601 plt->ats_network_type,
602 plt->ats_utilization_out,
603 plt->ats_utilization_in,
604 plt->pref_bandwidth,
605 plt->pref_delay);
606
607 if (l->verbose)
608 fprintf (stderr,
609 "\t Slave [%u]: %u %u %u ; %u %u %u rtt %u delay %llu bw_in %u bw_out %u \n",
610 plt->slave->no,
611 plt->total_messages_sent,
612 plt->total_bytes_sent,
613 plt->throughput_sent,
614 plt->total_messages_received,
615 plt->total_bytes_received,
616 plt->throughput_recv,
617 plt->app_rtt,
618 (long long unsigned int) plt->ats_delay.rel_value_us,
619 plt->bandwidth_in,
620 plt->bandwidth_out);
621
622 if (GNUNET_SYSERR == GNUNET_DISK_file_write (f[c_s], data, strlen (
623 data)))
624 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
625 "Cannot write data to log file `%s'\n",
626 filename_slaves[c_s]);
627 GNUNET_free (data);
628 }
629 }
630
631 for (c_s = 0; c_s < l->lp[c_m].peer->num_partners; c_s++)
632 {
633 if (GNUNET_SYSERR == GNUNET_DISK_file_close (f[c_s]))
634 {
635 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
636 "Cannot close log file for master[%u] slave[%u]\n", c_m,
637 c_s);
638 continue;
639 }
640 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
641 "Data file successfully written to log file for `%s'\n",
642 filename_slaves[c_s]);
643 }
644
645 if (GNUNET_SYSERR == GNUNET_DISK_file_close (f_m))
646 {
647 GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR,
648 "close",
649 filename_master);
650 GNUNET_free (filename_master);
651 return;
652 }
653 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
654 "Data file successfully written to log file for master `%s'\n",
655 filename_master);
656
657 if (GNUNET_YES == plots)
658 {
659 write_throughput_gnuplot_script (filename_master, &l->lp[c_m],
660 filename_slaves, l->num_slaves);
661 write_rtt_gnuplot_script (filename_master, &l->lp[c_m], filename_slaves,
662 l->num_slaves);
663 write_bw_gnuplot_script (filename_master, &l->lp[c_m], filename_slaves,
664 l->num_slaves);
665 }
666 }
667 GNUNET_free (filename_master);
668}
669
670
671/**
672 * Log all data now
673 *
674 * @param l logging handle to use
675 */
676void
677GNUNET_ATS_TEST_logging_now (struct LoggingHandle *l)
678{
679 struct LoggingPeer *bp;
680 struct PeerLoggingTimestep *mlt;
681 struct PeerLoggingTimestep *prev_log_mlt;
682 struct PartnerLoggingTimestep *slt;
683 struct PartnerLoggingTimestep *prev_log_slt;
684 struct BenchmarkPartner *p;
685 struct GNUNET_TIME_Relative delta;
686 int c_s;
687 int c_m;
688 unsigned int app_rtt;
689 double mult;
690
691 if (GNUNET_YES != l->running)
692 return;
693
694 for (c_m = 0; c_m < l->num_masters; c_m++)
695 {
696 bp = &l->lp[c_m];
697 mlt = GNUNET_new (struct PeerLoggingTimestep);
698 GNUNET_CONTAINER_DLL_insert_tail (l->lp[c_m].head, l->lp[c_m].tail, mlt);
699 prev_log_mlt = mlt->prev;
700
701 /* Collect data */
702 /* Current master state */
703 mlt->timestamp = GNUNET_TIME_absolute_get ();
704 mlt->total_bytes_sent = bp->peer->total_bytes_sent;
705 mlt->total_messages_sent = bp->peer->total_messages_sent;
706 mlt->total_bytes_received = bp->peer->total_bytes_received;
707 mlt->total_messages_received = bp->peer->total_messages_received;
708
709 /* Throughput */
710 if (NULL == prev_log_mlt)
711 {
712 /* Get difference to start */
713 delta = GNUNET_TIME_absolute_get_difference (l->lp[c_m].start,
714 mlt->timestamp);
715 }
716 else
717 {
718 /* Get difference to last timestep */
719 delta = GNUNET_TIME_absolute_get_difference (mlt->prev->timestamp,
720 mlt->timestamp);
721 }
722
723 /* Multiplication factor for throughput calculation */
724 mult = (double) GNUNET_TIME_UNIT_SECONDS.rel_value_us
725 / (delta.rel_value_us);
726
727 /* Total throughput */
728 if (NULL != prev_log_mlt)
729 {
730 if (mlt->total_bytes_sent - mlt->prev->total_bytes_sent > 0)
731 {
732 mlt->total_throughput_send = mult * (mlt->total_bytes_sent
733 - mlt->prev->total_bytes_sent);
734 }
735 else
736 {
737 mlt->total_throughput_send = 0;
738 // mlt->total_throughput_send = prev_log_mlt->total_throughput_send; /* no msgs send */
739 }
740
741 if (mlt->total_bytes_received - mlt->prev->total_bytes_received > 0)
742 {
743 mlt->total_throughput_recv = mult * (mlt->total_bytes_received
744 - mlt->prev->total_bytes_received);
745 }
746 else
747 {
748 mlt->total_throughput_recv = 0;
749 // mlt->total_throughput_recv = prev_log_mlt->total_throughput_recv; /* no msgs received */
750 }
751 }
752 else
753 {
754 mlt->total_throughput_send = mult * mlt->total_bytes_sent;
755 mlt->total_throughput_recv = mult * mlt->total_bytes_received;
756 }
757
758 if (GNUNET_YES == l->verbose)
759 {
760 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
761 "Master[%u] delta: %llu us, bytes (sent/received): %u / %u; throughput send/recv: %u / %u\n",
762 c_m,
763 (unsigned long long) delta.rel_value_us,
764 mlt->total_bytes_sent,
765 mlt->total_bytes_received,
766 mlt->total_throughput_send,
767 mlt->total_throughput_recv);
768 }
769
770 mlt->slaves_log = GNUNET_malloc (bp->peer->num_partners
771 * sizeof(struct PartnerLoggingTimestep));
772
773 for (c_s = 0; c_s < bp->peer->num_partners; c_s++)
774 {
775 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
776 "Collect logging data master[%u] slave [%u]\n", c_m, c_s);
777
778 p = &bp->peer->partners[c_s];
779 slt = &mlt->slaves_log[c_s];
780
781 slt->slave = p->dest;
782 /* Bytes sent from master to this slave */
783 slt->total_bytes_sent = p->bytes_sent;
784 /* Messages sent from master to this slave */
785 slt->total_messages_sent = p->messages_sent;
786 /* Bytes master received from this slave */
787 slt->total_bytes_received = p->bytes_received;
788 /* Messages master received from this slave */
789 slt->total_messages_received = p->messages_received;
790 slt->total_app_rtt = p->total_app_rtt;
791 /* ats performance information */
792 slt->ats_delay = p->props.delay;
793 slt->ats_distance = p->props.distance;
794 slt->ats_network_type = p->props.scope;
795 slt->ats_utilization_in = p->props.utilization_out;
796 slt->ats_utilization_out = p->props.utilization_out;
797 slt->bandwidth_in = p->bandwidth_in;
798 slt->bandwidth_out = p->bandwidth_out;
799 slt->pref_bandwidth = p->pref_bandwidth;
800 slt->pref_delay = p->pref_delay;
801
802 /* Total application level rtt */
803 if (NULL == prev_log_mlt)
804 {
805 if (0 != slt->total_messages_sent)
806 app_rtt = slt->total_app_rtt / slt->total_messages_sent;
807 else
808 app_rtt = 0;
809 }
810 else
811 {
812 prev_log_slt = &prev_log_mlt->slaves_log[c_s];
813 if ((slt->total_messages_sent - prev_log_slt->total_messages_sent) > 0)
814 app_rtt = (slt->total_app_rtt - prev_log_slt->total_app_rtt)
815 / (slt->total_messages_sent
816 - prev_log_slt->total_messages_sent);
817 else
818 {
819 app_rtt = prev_log_slt->app_rtt; /* No messages were */
820 }
821 }
822 slt->app_rtt = app_rtt;
823
824 /* Partner throughput */
825 if (NULL != prev_log_mlt)
826 {
827 prev_log_slt = &prev_log_mlt->slaves_log[c_s];
828 if (slt->total_bytes_sent > prev_log_slt->total_bytes_sent)
829 slt->throughput_sent = mult * (slt->total_bytes_sent
830 - prev_log_slt->total_bytes_sent);
831 else
832 slt->throughput_sent = 0;
833
834 if (slt->total_bytes_received > prev_log_slt->total_bytes_received)
835 slt->throughput_recv = mult
836 * (slt->total_bytes_received
837 - prev_log_slt->total_bytes_received);
838 else
839 slt->throughput_recv = 0;
840 }
841 else
842 {
843 slt->throughput_sent = mult * slt->total_bytes_sent;
844 slt->throughput_recv = mult * slt->total_bytes_received;
845 }
846
847 if (GNUNET_YES == l->verbose)
848 {
849 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
850 "Master [%u] -> Slave [%u]: delta: %llu us, bytes (sent/received): %u / %u; throughput send/recv: %u / %u\n",
851 c_m, c_s,
852 (unsigned long long) delta.rel_value_us,
853 mlt->total_bytes_sent,
854 mlt->total_bytes_received,
855 slt->throughput_sent,
856 slt->throughput_recv);
857 }
858 else
859 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
860 "Master [%u]: slave [%u]\n",
861 bp->peer->no, p->dest->no);
862 }
863 }
864}
865
866
867static void
868collect_log_task (void *cls)
869{
870 struct LoggingHandle *l = cls;
871
872 l->log_task = NULL;
873 GNUNET_ATS_TEST_logging_now (l);
874 l->log_task = GNUNET_SCHEDULER_add_delayed (l->frequency,
875 &collect_log_task,
876 l);
877}
878
879
880/**
881 * Stop logging
882 *
883 * @param l the logging handle
884 */
885void
886GNUNET_ATS_TEST_logging_stop (struct LoggingHandle *l)
887{
888 if (GNUNET_YES != l->running)
889 return;
890
891 if (NULL != l->log_task)
892 {
893 GNUNET_SCHEDULER_cancel (l->log_task);
894 l->log_task = NULL;
895 }
896 l->running = GNUNET_NO;
897
898 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
899 _ ("Stop logging\n"));
900}
901
902
903/**
904 * Clean up logging data
905 *
906 * @param l the logging handle
907 */
908void
909GNUNET_ATS_TEST_logging_clean_up (struct LoggingHandle *l)
910{
911 int c_m;
912 struct PeerLoggingTimestep *cur;
913
914 if (GNUNET_YES == l->running)
915 GNUNET_ATS_TEST_logging_stop (l);
916
917 for (c_m = 0; c_m < l->num_masters; c_m++)
918 {
919 while (NULL != (cur = l->lp[c_m].head))
920 {
921 GNUNET_CONTAINER_DLL_remove (l->lp[c_m].head, l->lp[c_m].tail, cur);
922 GNUNET_free (cur->slaves_log);
923 GNUNET_free (cur);
924 }
925 }
926
927 GNUNET_free (l->lp);
928 GNUNET_free (l);
929}
930
931
932/**
933 * Start logging
934 *
935 * @param log_frequency the logging frequency
936 * @param testname the testname
937 * @param masters the master peers used for benchmarking
938 * @param num_masters the number of master peers
939 * @param num_slaves the number of slave peers
940 * @param verbose verbose logging
941 * @return the logging handle or NULL on error
942 */
943struct LoggingHandle *
944GNUNET_ATS_TEST_logging_start (struct GNUNET_TIME_Relative log_frequency,
945 const char *testname,
946 struct BenchmarkPeer *masters,
947 int num_masters,
948 int num_slaves,
949 int verbose)
950{
951 struct LoggingHandle *l;
952 int c_m;
953
954 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
955 _ ("Start logging `%s'\n"), testname);
956
957 l = GNUNET_new (struct LoggingHandle);
958 l->num_masters = num_masters;
959 l->num_slaves = num_slaves;
960 l->name = testname;
961 l->frequency = log_frequency;
962 l->verbose = verbose;
963 l->lp = GNUNET_malloc (num_masters * sizeof(struct LoggingPeer));
964
965 for (c_m = 0; c_m < num_masters; c_m++)
966 {
967 l->lp[c_m].peer = &masters[c_m];
968 l->lp[c_m].start = GNUNET_TIME_absolute_get ();
969 }
970
971 /* Schedule logging task */
972 l->log_task = GNUNET_SCHEDULER_add_now (&collect_log_task, l);
973 l->running = GNUNET_YES;
974
975 return l;
976}
977
978
979/* end of file ats-testing-log.c */
diff --git a/src/ats-tests/ats-testing-preferences.c b/src/ats-tests/ats-testing-preferences.c
deleted file mode 100644
index f30fde960..000000000
--- a/src/ats-tests/ats-testing-preferences.c
+++ /dev/null
@@ -1,265 +0,0 @@
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2010-2013 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20/**
21 * @file ats-tests/ats-testing-preferences.c
22 * @brief ats benchmark: preference generator
23 * @author Christian Grothoff
24 * @author Matthias Wachs
25 */
26#include "platform.h"
27#include "gnunet_util_lib.h"
28#include "ats-testing.h"
29
30static struct PreferenceGenerator *pg_head;
31static struct PreferenceGenerator *pg_tail;
32
33extern struct GNUNET_ATS_TEST_Topology *top;
34
35static double
36get_preference (struct PreferenceGenerator *pg)
37{
38 struct GNUNET_TIME_Relative time_delta;
39 double delta_value;
40 double pref_value;
41
42 /* Calculate the current preference value */
43 switch (pg->type)
44 {
45 case GNUNET_ATS_TEST_TG_CONSTANT:
46 pref_value = pg->base_value;
47 break;
48
49 case GNUNET_ATS_TEST_TG_LINEAR:
50 time_delta = GNUNET_TIME_absolute_get_duration (pg->time_start);
51 /* Calculate point of time in the current period */
52 time_delta.rel_value_us = time_delta.rel_value_us
53 % pg->duration_period.rel_value_us;
54 delta_value = ((double) time_delta.rel_value_us
55 / pg->duration_period.rel_value_us) * (pg->max_value
56 - pg->base_value);
57 if ((pg->max_value < pg->base_value) &&
58 ((pg->max_value - pg->base_value) > pg->base_value))
59 {
60 /* This will cause an underflow */
61 GNUNET_break (0);
62 }
63 pref_value = pg->base_value + delta_value;
64 break;
65
66 case GNUNET_ATS_TEST_TG_RANDOM:
67 delta_value = (double) GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK,
68 10000 * (pg->max_value
69 - pg->base_value))
70 / 10000;
71 pref_value = pg->base_value + delta_value;
72 break;
73
74 case GNUNET_ATS_TEST_TG_SINUS:
75 time_delta = GNUNET_TIME_absolute_get_duration (pg->time_start);
76 /* Calculate point of time in the current period */
77 time_delta.rel_value_us = time_delta.rel_value_us
78 % pg->duration_period.rel_value_us;
79 if ((pg->max_value - pg->base_value) > pg->base_value)
80 {
81 /* This will cause an underflow for second half of sinus period,
82 * will be detected in general when experiments are loaded */
83 GNUNET_break (0);
84 }
85 delta_value = (pg->max_value - pg->base_value)
86 * sin ((2 * M_PI)
87 / ((double) pg->duration_period.rel_value_us)
88 * time_delta.rel_value_us);
89 pref_value = pg->base_value + delta_value;
90 break;
91
92 default:
93 pref_value = 0.0;
94 break;
95 }
96 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Current preference value is %f\n",
97 pref_value);
98 return pref_value;
99}
100
101
102static void
103set_pref_task (void *cls)
104{
105 struct BenchmarkPartner *p = cls;
106 double pref_value;
107
108 p->pg->set_task = NULL;
109
110 pref_value = get_preference (p->pg);
111
112 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
113 "Setting preference for master [%u] and slave [%u] for %s to %f\n",
114 p->me->no, p->dest->no,
115 GNUNET_ATS_print_preference_type (p->pg->kind), pref_value);
116
117 GNUNET_ATS_performance_change_preference (p->me->ats_perf_handle,
118 &p->dest->id,
119 p->pg->kind,
120 pref_value,
121 GNUNET_ATS_PREFERENCE_END);
122
123 switch (p->pg->kind)
124 {
125 case GNUNET_ATS_PREFERENCE_BANDWIDTH:
126 p->pref_bandwidth = pref_value;
127 break;
128
129 case GNUNET_ATS_PREFERENCE_LATENCY:
130 p->pref_delay = pref_value;
131 break;
132
133 default:
134 break;
135 }
136
137 p->pg->set_task = GNUNET_SCHEDULER_add_delayed (p->pg->frequency,
138 set_pref_task, p);
139}
140
141
142/**
143 * Generate between the source master and the partner and set preferences with a
144 * value depending on the generator.
145 *
146 * @param src source
147 * @param dest partner
148 * @param type type of preferences to generate
149 * @param base_value traffic base rate to send data with
150 * @param value_rate traffic maximum rate to send data with
151 * @param period duration of a period of preferences generation (~ 1/frequency)
152 * @param frequency how long to generate preferences
153 * @param kind ATS preference to generate
154 * @return the preference generator
155 */
156struct PreferenceGenerator *
157GNUNET_ATS_TEST_generate_preferences_start (struct BenchmarkPeer *src,
158 struct BenchmarkPartner *dest,
159 enum GeneratorType type,
160 unsigned int base_value,
161 unsigned int value_rate,
162 struct GNUNET_TIME_Relative period,
163 struct GNUNET_TIME_Relative
164 frequency,
165 enum GNUNET_ATS_PreferenceKind kind)
166{
167 struct PreferenceGenerator *pg;
168
169 if (NULL != dest->pg)
170 {
171 GNUNET_break (0);
172 return NULL;
173 }
174
175 pg = GNUNET_new (struct PreferenceGenerator);
176 GNUNET_CONTAINER_DLL_insert (pg_head, pg_tail, pg);
177 pg->type = type;
178 pg->src = src;
179 pg->dest = dest;
180 pg->kind = kind;
181 pg->base_value = base_value;
182 pg->max_value = value_rate;
183 pg->duration_period = period;
184 pg->frequency = frequency;
185 pg->time_start = GNUNET_TIME_absolute_get ();
186
187 switch (type)
188 {
189 case GNUNET_ATS_TEST_TG_CONSTANT:
190 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
191 "Setting up constant preference generator master[%u] `%s' and slave [%u] `%s' max %u Bips\n",
192 dest->me->no, GNUNET_i2s (&dest->me->id),
193 dest->dest->no, GNUNET_i2s (&dest->dest->id),
194 base_value);
195 break;
196
197 case GNUNET_ATS_TEST_TG_LINEAR:
198 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
199 "Setting up linear preference generator master[%u] `%s' and slave [%u] `%s' min %u Bips max %u Bips\n",
200 dest->me->no, GNUNET_i2s (&dest->me->id),
201 dest->dest->no, GNUNET_i2s (&dest->dest->id),
202 base_value, value_rate);
203 break;
204
205 case GNUNET_ATS_TEST_TG_SINUS:
206 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
207 "Setting up sinus preference generator master[%u] `%s' and slave [%u] `%s' baserate %u Bips, amplitude %u Bps\n",
208 dest->me->no, GNUNET_i2s (&dest->me->id),
209 dest->dest->no, GNUNET_i2s (&dest->dest->id),
210 base_value, value_rate);
211 break;
212
213 case GNUNET_ATS_TEST_TG_RANDOM:
214 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
215 "Setting up random preference generator master[%u] `%s' and slave [%u] `%s' min %u Bips max %u Bps\n",
216 dest->me->no, GNUNET_i2s (&dest->me->id),
217 dest->dest->no, GNUNET_i2s (&dest->dest->id),
218 base_value, value_rate);
219 break;
220
221 default:
222 break;
223 }
224
225 dest->pg = pg;
226 pg->set_task = GNUNET_SCHEDULER_add_now (&set_pref_task, dest);
227 return pg;
228}
229
230
231void
232GNUNET_ATS_TEST_generate_preferences_stop (struct PreferenceGenerator *pg)
233{
234 GNUNET_CONTAINER_DLL_remove (pg_head, pg_tail, pg);
235 pg->dest->pg = NULL;
236
237 if (NULL != pg->set_task)
238 {
239 GNUNET_SCHEDULER_cancel (pg->set_task);
240 pg->set_task = NULL;
241 }
242
243 GNUNET_free (pg);
244}
245
246
247/**
248 * Stop all preferences generators
249 */
250void
251GNUNET_ATS_TEST_generate_preferences_stop_all ()
252{
253 struct PreferenceGenerator *cur;
254 struct PreferenceGenerator *next;
255
256 next = pg_head;
257 for (cur = next; NULL != cur; cur = next)
258 {
259 next = cur->next;
260 GNUNET_ATS_TEST_generate_preferences_stop (cur);
261 }
262}
263
264
265/* end of file ats-testing-preferences.c */
diff --git a/src/ats-tests/ats-testing-traffic.c b/src/ats-tests/ats-testing-traffic.c
deleted file mode 100644
index f19eac871..000000000
--- a/src/ats-tests/ats-testing-traffic.c
+++ /dev/null
@@ -1,393 +0,0 @@
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2010-2013, 2016 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20/**
21 * @file ats-tests/ats-testing-traffic.c
22 * @brief ats benchmark: traffic generator
23 * @author Christian Grothoff
24 * @author Matthias Wachs
25 */
26#include "platform.h"
27#include "gnunet_util_lib.h"
28#include "ats-testing.h"
29
30static struct TrafficGenerator *tg_head;
31static struct TrafficGenerator *tg_tail;
32
33extern struct GNUNET_ATS_TEST_Topology *top;
34
35static struct GNUNET_TIME_Relative
36get_delay (struct TrafficGenerator *tg)
37{
38 struct GNUNET_TIME_Relative delay;
39 struct GNUNET_TIME_Relative time_delta;
40 long long int cur_rate;
41 long long int delta_rate;
42
43 delay.rel_value_us = 0;
44
45 /* Calculate the current transmission rate based on the type of traffic */
46 switch (tg->type)
47 {
48 case GNUNET_ATS_TEST_TG_CONSTANT:
49 if (UINT32_MAX == tg->base_rate)
50 return GNUNET_TIME_UNIT_ZERO;
51 cur_rate = tg->base_rate;
52 break;
53
54 case GNUNET_ATS_TEST_TG_LINEAR:
55 time_delta = GNUNET_TIME_absolute_get_duration (tg->time_start);
56 /* Calculate point of time in the current period */
57 time_delta.rel_value_us = time_delta.rel_value_us
58 % tg->duration_period.rel_value_us;
59 delta_rate = ((double) time_delta.rel_value_us
60 / tg->duration_period.rel_value_us)
61 * (tg->max_rate - tg->base_rate);
62 if ((tg->max_rate < tg->base_rate) && ((tg->max_rate - tg->base_rate) >
63 tg->base_rate))
64 {
65 /* This will cause an underflow */
66 GNUNET_break (0);
67 }
68 cur_rate = tg->base_rate + delta_rate;
69 break;
70
71 case GNUNET_ATS_TEST_TG_RANDOM:
72 cur_rate = tg->base_rate + GNUNET_CRYPTO_random_u32 (
73 GNUNET_CRYPTO_QUALITY_WEAK,
74 tg->max_rate
75 - tg->base_rate);
76 break;
77
78 case GNUNET_ATS_TEST_TG_SINUS:
79 time_delta = GNUNET_TIME_absolute_get_duration (tg->time_start);
80 /* Calculate point of time in the current period */
81 time_delta.rel_value_us = time_delta.rel_value_us
82 % tg->duration_period.rel_value_us;
83 if ((tg->max_rate - tg->base_rate) > tg->base_rate)
84 {
85 /* This will cause an underflow for second half of sinus period,
86 * will be detected in general when experiments are loaded */
87 GNUNET_break (0);
88 }
89 delta_rate = (tg->max_rate - tg->base_rate)
90 * sin ((2 * M_PI)
91 / ((double) tg->duration_period.rel_value_us)
92 * time_delta.rel_value_us);
93 cur_rate = tg->base_rate + delta_rate;
94 break;
95
96 default:
97 return delay;
98 break;
99 }
100
101 if (cur_rate < 0)
102 {
103 cur_rate = 1;
104 }
105 /* Calculate the delay for the next message based on the current delay */
106 delay.rel_value_us = GNUNET_TIME_UNIT_SECONDS.rel_value_us
107 * TEST_MESSAGE_SIZE / cur_rate;
108
109 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
110 "Current rate is %lld, calculated delay is %llu\n",
111 cur_rate,
112 (unsigned long long) delay.rel_value_us);
113 return delay;
114}
115
116
117static void
118update_ping_data (void *cls)
119{
120 struct BenchmarkPartner *p = cls;
121 struct GNUNET_TIME_Relative delay;
122
123 p->messages_sent++;
124 p->bytes_sent += TEST_MESSAGE_SIZE;
125 p->me->total_messages_sent++;
126 p->me->total_bytes_sent += TEST_MESSAGE_SIZE;
127
128 if (NULL == p->tg)
129 {
130 GNUNET_break (0);
131 return;
132 }
133 delay = get_delay (p->tg);
134 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
135 "Delay for next transmission %s\n",
136 GNUNET_STRINGS_relative_time_to_string (delay,
137 GNUNET_YES));
138 p->tg->next_ping_transmission
139 = GNUNET_TIME_absolute_add (GNUNET_TIME_absolute_get (),
140 delay);
141}
142
143
144static void
145comm_schedule_send (void *cls)
146{
147 struct BenchmarkPartner *p = cls;
148 struct TestMessage *msg;
149 struct GNUNET_MQ_Envelope *env;
150
151 p->tg->send_task = NULL;
152 p->last_message_sent = GNUNET_TIME_absolute_get ();
153 env = GNUNET_MQ_msg (msg,
154 TEST_MESSAGE_TYPE_PING);
155 memset (msg->padding,
156 'a',
157 sizeof(msg->padding));
158 GNUNET_MQ_notify_sent (env,
159 &update_ping_data,
160 p);
161 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
162 "Master [%u]: Sending PING to [%u]\n",
163 p->me->no,
164 p->dest->no);
165 GNUNET_MQ_send (p->mq,
166 env);
167}
168
169
170static void
171update_pong_data (void *cls)
172{
173 struct BenchmarkPartner *p = cls;
174
175 p->messages_sent++;
176 p->bytes_sent += TEST_MESSAGE_SIZE;
177 p->me->total_messages_sent++;
178 p->me->total_bytes_sent += TEST_MESSAGE_SIZE;
179}
180
181
182void
183GNUNET_ATS_TEST_traffic_handle_ping (struct BenchmarkPartner *p)
184{
185 struct TestMessage *msg;
186 struct GNUNET_MQ_Envelope *env;
187
188 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
189 "Slave [%u]: Received PING from [%u], sending PONG\n",
190 p->me->no,
191 p->dest->no);
192 p->messages_received++;
193 p->bytes_received += TEST_MESSAGE_SIZE;
194 p->me->total_messages_received++;
195 p->me->total_bytes_received += TEST_MESSAGE_SIZE;
196
197
198 env = GNUNET_MQ_msg (msg,
199 TEST_MESSAGE_TYPE_PING);
200 memset (msg->padding,
201 'a',
202 sizeof(msg->padding));
203 GNUNET_MQ_notify_sent (env,
204 &update_pong_data,
205 p);
206 GNUNET_MQ_send (p->mq,
207 env);
208}
209
210
211void
212GNUNET_ATS_TEST_traffic_handle_pong (struct BenchmarkPartner *p)
213{
214 struct GNUNET_TIME_Relative left;
215
216 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
217 "Master [%u]: Received PONG from [%u], next message\n",
218 p->me->no,
219 p->dest->no);
220
221 p->messages_received++;
222 p->bytes_received += TEST_MESSAGE_SIZE;
223 p->me->total_messages_received++;
224 p->me->total_bytes_received += TEST_MESSAGE_SIZE;
225 p->total_app_rtt += GNUNET_TIME_absolute_get_difference (p->last_message_sent,
226 GNUNET_TIME_absolute_get ())
227 .rel_value_us;
228
229 /* Schedule next send event */
230 if (NULL == p->tg)
231 return;
232
233 left = GNUNET_TIME_absolute_get_remaining (p->tg->next_ping_transmission);
234 if (UINT32_MAX == p->tg->base_rate)
235 {
236 p->tg->send_task = GNUNET_SCHEDULER_add_now (&comm_schedule_send, p);
237 }
238 else if (0 == left.rel_value_us)
239 {
240 p->tg->send_task = GNUNET_SCHEDULER_add_now (&comm_schedule_send, p);
241 }
242 else
243 {
244 /* Enforce minimum transmission rate 1 msg / sec */
245 if (GNUNET_TIME_UNIT_SECONDS.rel_value_us == (left =
246 GNUNET_TIME_relative_min (
247 left,
248 GNUNET_TIME_UNIT_SECONDS))
249 .rel_value_us)
250 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
251 "Enforcing minimum send rate between master [%u] and slave [%u]\n",
252 p->me->no, p->dest->no);
253 p->tg->send_task = GNUNET_SCHEDULER_add_delayed (left,
254 &comm_schedule_send, p);
255 }
256}
257
258
259/**
260 * Generate between the source master and the partner and send traffic with a
261 * maximum rate.
262 *
263 * @param src traffic source
264 * @param dest traffic partner
265 * @param type type of traffic to generate
266 * @param base_rate traffic base rate to send data with
267 * @param max_rate traffic maximum rate to send data with
268 * @param period duration of a period of traffic generation (~ 1/frequency)
269 * @param duration how long to generate traffic
270 * @return the traffic generator
271 */
272struct TrafficGenerator *
273GNUNET_ATS_TEST_generate_traffic_start (struct BenchmarkPeer *src,
274 struct BenchmarkPartner *dest,
275 enum GeneratorType type,
276 unsigned int base_rate,
277 unsigned int max_rate,
278 struct GNUNET_TIME_Relative period,
279 struct GNUNET_TIME_Relative duration)
280{
281 struct TrafficGenerator *tg;
282
283 if (NULL != dest->tg)
284 {
285 GNUNET_break (0);
286 return NULL;
287 }
288
289 tg = GNUNET_new (struct TrafficGenerator);
290 GNUNET_CONTAINER_DLL_insert (tg_head,
291 tg_tail,
292 tg);
293 tg->type = type;
294 tg->src = src;
295 tg->dest = dest;
296 tg->base_rate = base_rate;
297 tg->max_rate = max_rate;
298 tg->duration_period = period;
299 tg->time_start = GNUNET_TIME_absolute_get ();
300 tg->next_ping_transmission = GNUNET_TIME_UNIT_FOREVER_ABS;
301
302 switch (type)
303 {
304 case GNUNET_ATS_TEST_TG_CONSTANT:
305 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
306 "Setting up constant traffic generator master[%u] `%s' and slave [%u] `%s' max %u Bips\n",
307 dest->me->no,
308 GNUNET_i2s (&dest->me->id),
309 dest->dest->no,
310 GNUNET_i2s (&dest->dest->id),
311 base_rate);
312 break;
313
314 case GNUNET_ATS_TEST_TG_LINEAR:
315 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
316 "Setting up linear traffic generator master[%u] `%s' and slave [%u] `%s' min %u Bips max %u Bips\n",
317 dest->me->no,
318 GNUNET_i2s (&dest->me->id),
319 dest->dest->no,
320 GNUNET_i2s (&dest->dest->id),
321 base_rate,
322 max_rate);
323 break;
324
325 case GNUNET_ATS_TEST_TG_SINUS:
326 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
327 "Setting up sinus traffic generator master[%u] `%s' and slave [%u] `%s' baserate %u Bips, amplitude %u Bps\n",
328 dest->me->no,
329 GNUNET_i2s (&dest->me->id),
330 dest->dest->no,
331 GNUNET_i2s (&dest->dest->id),
332 base_rate,
333 max_rate);
334 break;
335
336 case GNUNET_ATS_TEST_TG_RANDOM:
337 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
338 "Setting up random traffic generator master[%u] `%s' and slave [%u] `%s' min %u Bips max %u Bps\n",
339 dest->me->no,
340 GNUNET_i2s (&dest->me->id),
341 dest->dest->no,
342 GNUNET_i2s (&dest->dest->id),
343 base_rate,
344 max_rate);
345 break;
346
347 default:
348 break;
349 }
350
351 dest->tg = tg;
352 tg->send_task
353 = GNUNET_SCHEDULER_add_now (&comm_schedule_send,
354 dest);
355 return tg;
356}
357
358
359void
360GNUNET_ATS_TEST_generate_traffic_stop (struct TrafficGenerator *tg)
361{
362 GNUNET_CONTAINER_DLL_remove (tg_head,
363 tg_tail,
364 tg);
365 tg->dest->tg = NULL;
366 if (NULL != tg->send_task)
367 {
368 GNUNET_SCHEDULER_cancel (tg->send_task);
369 tg->send_task = NULL;
370 }
371 GNUNET_free (tg);
372}
373
374
375/**
376 * Stop all traffic generators
377 */
378void
379GNUNET_ATS_TEST_generate_traffic_stop_all ()
380{
381 struct TrafficGenerator *cur;
382 struct TrafficGenerator *next;
383
384 next = tg_head;
385 for (cur = next; NULL != cur; cur = next)
386 {
387 next = cur->next;
388 GNUNET_ATS_TEST_generate_traffic_stop (cur);
389 }
390}
391
392
393/* end of file ats-testing-traffic.c */
diff --git a/src/ats-tests/ats-testing.c b/src/ats-tests/ats-testing.c
deleted file mode 100644
index c6ba8533d..000000000
--- a/src/ats-tests/ats-testing.c
+++ /dev/null
@@ -1,975 +0,0 @@
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2010-2013, 2016, 2017 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20/**
21 * @file ats-tests/ats-testing.c
22 * @brief ats testing library: setup topology
23 * solvers
24 * @author Christian Grothoff
25 * @author Matthias Wachs
26 */
27#include "ats-testing.h"
28
29
30/**
31 * Connect peers with testbed
32 */
33struct TestbedConnectOperation
34{
35 /**
36 * The benchmarking master initiating this connection
37 */
38 struct BenchmarkPeer *master;
39
40 /**
41 * The benchmarking slave to connect to
42 */
43 struct BenchmarkPeer *slave;
44
45 /**
46 * Testbed operation to connect peers
47 */
48 struct GNUNET_TESTBED_Operation *connect_op;
49};
50
51struct GNUNET_CONFIGURATION_Handle *cfg;
52
53struct GNUNET_ATS_TEST_Topology *top;
54
55
56/**
57 * Shutdown nicely
58 *
59 * @param cls NULL
60 */
61static void
62do_shutdown (void *cls)
63{
64 int c_m;
65 int c_s;
66 int c_op;
67 struct BenchmarkPeer *p;
68
69 top->state.benchmarking = GNUNET_NO;
70
71 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
72 "Benchmarking done\n");
73
74 GNUNET_ATS_TEST_generate_traffic_stop_all ();
75
76 for (c_m = 0; c_m < top->num_masters; c_m++)
77 {
78 p = &top->mps[c_m];
79 if (NULL != top->mps[c_m].peer_id_op)
80 {
81 GNUNET_TESTBED_operation_done (p->peer_id_op);
82 p->peer_id_op = NULL;
83 }
84
85 if (NULL != p->ats_task)
86 GNUNET_SCHEDULER_cancel (p->ats_task);
87 p->ats_task = NULL;
88
89 for (c_op = 0; c_op < p->num_partners; c_op++)
90 {
91 if ((NULL != p->core_connect_ops) &&
92 (NULL != p->core_connect_ops[c_op].connect_op))
93 {
94 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
95 "Failed to connect peer 0 and %u\n",
96 c_op);
97 GNUNET_TESTBED_operation_done (p->core_connect_ops[c_op].connect_op);
98 p->core_connect_ops[c_op].connect_op = NULL;
99 }
100 }
101
102 if (NULL != p->ats_perf_op)
103 {
104 GNUNET_TESTBED_operation_done (p->ats_perf_op);
105 p->ats_perf_op = NULL;
106 }
107
108 if (NULL != p->comm_op)
109 {
110 GNUNET_TESTBED_operation_done (p->comm_op);
111 p->comm_op = NULL;
112 }
113 GNUNET_free (p->core_connect_ops);
114 GNUNET_free (p->partners);
115 p->partners = NULL;
116 }
117
118 for (c_s = 0; c_s < top->num_slaves; c_s++)
119 {
120 p = &top->sps[c_s];
121 if (NULL != p->peer_id_op)
122 {
123 GNUNET_TESTBED_operation_done (p->peer_id_op);
124 p->peer_id_op = NULL;
125 }
126 if (NULL != p->ats_perf_op)
127 {
128 GNUNET_TESTBED_operation_done (p->ats_perf_op);
129 p->ats_perf_op = NULL;
130 }
131 if (NULL != p->comm_op)
132 {
133 GNUNET_TESTBED_operation_done (p->comm_op);
134 p->comm_op = NULL;
135 }
136 GNUNET_free (p->partners);
137 p->partners = NULL;
138 }
139 GNUNET_SCHEDULER_shutdown ();
140 GNUNET_free (top);
141 top = NULL;
142}
143
144
145static struct BenchmarkPartner *
146find_partner (struct BenchmarkPeer *me,
147 const struct GNUNET_PeerIdentity *peer)
148{
149 int c_m;
150
151 for (c_m = 0; c_m < me->num_partners; c_m++)
152 {
153 /* Find a partner with other as destination */
154 if (0 == GNUNET_memcmp (peer,
155 &me->partners[c_m].dest->id))
156 {
157 return &me->partners[c_m];
158 }
159 }
160
161 return NULL;
162}
163
164
165static struct BenchmarkPeer *
166find_peer (const struct GNUNET_PeerIdentity *peer)
167{
168 int c_p;
169
170 for (c_p = 0; c_p < top->num_masters; c_p++)
171 {
172 if (0 == GNUNET_memcmp (&top->mps[c_p].id,
173 peer))
174 return &top->mps[c_p];
175 }
176
177 for (c_p = 0; c_p < top->num_slaves; c_p++)
178 {
179 if (0 == GNUNET_memcmp (&top->sps[c_p].id,
180 peer))
181 return &top->sps[c_p];
182 }
183 return NULL;
184}
185
186
187/**
188 * Method called whenever a given peer connects.
189 *
190 * @param cls closure
191 * @param peer peer identity this notification is about
192 * @param mq queue to use to send messages to @a peer
193 * @return the `struct BenchmarkPartner` of @a peer
194 */
195static void *
196comm_connect_cb (void *cls,
197 const struct GNUNET_PeerIdentity *peer,
198 struct GNUNET_MQ_Handle *mq)
199{
200 struct BenchmarkPeer *me = cls;
201 struct BenchmarkPeer *remote;
202 struct BenchmarkPartner *p;
203 char *id;
204 int c;
205 int completed;
206
207 remote = find_peer (peer);
208 if (NULL == remote)
209 {
210 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
211 "Unknown peer connected: `%s'\n",
212 GNUNET_i2s (peer));
213 GNUNET_break (0);
214 return NULL;
215 }
216
217 id = GNUNET_strdup (GNUNET_i2s (&me->id));
218 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
219 "%s [%u] `%s' connected to %s [%u] %s\n",
220 (me->master == GNUNET_YES) ? "Master" : "Slave",
221 me->no,
222 id,
223 (remote->master == GNUNET_YES) ? "Master" : "Slave",
224 remote->no,
225 GNUNET_i2s (peer));
226
227 me->core_connections++;
228 if ((GNUNET_YES == me->master) &&
229 (GNUNET_NO == remote->master) &&
230 (GNUNET_NO == top->state.connected_CORE))
231 {
232 me->core_slave_connections++;
233
234 if (me->core_slave_connections == top->num_slaves)
235 {
236 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
237 "Master [%u] connected all slaves\n",
238 me->no);
239 }
240 completed = GNUNET_YES;
241 for (c = 0; c < top->num_masters; c++)
242 {
243 if (top->mps[c].core_slave_connections != top->num_slaves)
244 completed = GNUNET_NO;
245 }
246 if (GNUNET_YES == completed)
247 {
248 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
249 "All master peers connected all slave peers\n");
250 top->state.connected_CORE = GNUNET_YES;
251 /* Notify about setup done */
252 if (NULL != top->done_cb)
253 top->done_cb (top->done_cb_cls,
254 top->mps,
255 top->sps);
256 }
257 }
258 GNUNET_free (id);
259 p = find_partner (me,
260 peer);
261 if (NULL != p)
262 p->mq = mq;
263 return p;
264}
265
266
267/**
268 * @param cls this peer
269 * @param peer id of disconnecting peer
270 * @param internal_cls the `struct BenchmarkPartner` of @a peer
271 */
272static void
273comm_disconnect_cb (void *cls,
274 const struct GNUNET_PeerIdentity *peer,
275 void *internal_cls)
276{
277 struct BenchmarkPeer *me = cls;
278 struct BenchmarkPartner *p = internal_cls;
279 char *id;
280
281 if (NULL == p)
282 return;
283
284 id = GNUNET_strdup (GNUNET_i2s (&me->id));
285 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
286 "%s disconnected from %s\n",
287 id,
288 GNUNET_i2s (peer));
289 GNUNET_assert (me->core_connections > 0);
290 me->core_connections--;
291
292 if ((GNUNET_YES == top->state.benchmarking) &&
293 ((GNUNET_YES == me->master) ||
294 (GNUNET_YES == p->dest->master)))
295 {
296 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
297 "%s disconnected from %s while benchmarking\n",
298 id,
299 GNUNET_i2s (peer));
300 }
301 GNUNET_free (id);
302}
303
304
305static void
306handle_pong (void *cls,
307 const struct TestMessage *message)
308{
309 struct BenchmarkPartner *p = cls;
310
311 GNUNET_ATS_TEST_traffic_handle_pong (p);
312}
313
314
315static void
316handle_ping (void *cls,
317 const struct TestMessage *message)
318{
319 struct BenchmarkPartner *p = cls;
320
321 GNUNET_ATS_TEST_traffic_handle_ping (p);
322}
323
324
325static void *
326transport_connect_adapter (void *cls,
327 const struct GNUNET_CONFIGURATION_Handle *cfg)
328{
329 struct BenchmarkPeer *me = cls;
330 struct GNUNET_MQ_MessageHandler handlers[] = {
331 GNUNET_MQ_hd_fixed_size (ping,
332 TEST_MESSAGE_TYPE_PING,
333 struct TestMessage,
334 me),
335 GNUNET_MQ_hd_fixed_size (pong,
336 TEST_MESSAGE_TYPE_PONG,
337 struct TestMessage,
338 me),
339 GNUNET_MQ_handler_end ()
340 };
341
342 me->th = GNUNET_TRANSPORT_core_connect (cfg,
343 &me->id,
344 handlers,
345 me,
346 &comm_connect_cb,
347 &comm_disconnect_cb,
348 NULL);
349 if (NULL == me->th)
350 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
351 "Failed to create transport connection \n");
352 return me->th;
353}
354
355
356static void
357transport_disconnect_adapter (void *cls,
358 void *op_result)
359{
360 struct BenchmarkPeer *me = cls;
361
362 GNUNET_TRANSPORT_core_disconnect (me->th);
363 me->th = NULL;
364}
365
366
367static void *
368core_connect_adapter (void *cls,
369 const struct GNUNET_CONFIGURATION_Handle *cfg)
370{
371 struct BenchmarkPeer *me = cls;
372 struct GNUNET_MQ_MessageHandler handlers[] = {
373 GNUNET_MQ_hd_fixed_size (ping,
374 TEST_MESSAGE_TYPE_PING,
375 struct TestMessage,
376 me),
377 GNUNET_MQ_hd_fixed_size (pong,
378 TEST_MESSAGE_TYPE_PONG,
379 struct TestMessage,
380 me),
381 GNUNET_MQ_handler_end ()
382 };
383
384 me->ch = GNUNET_CORE_connect (cfg,
385 me,
386 NULL,
387 &comm_connect_cb,
388 &comm_disconnect_cb,
389 handlers);
390 if (NULL == me->ch)
391 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
392 "Failed to create core connection \n");
393 return me->ch;
394}
395
396
397static void
398core_disconnect_adapter (void *cls,
399 void *op_result)
400{
401 struct BenchmarkPeer *me = cls;
402
403 GNUNET_CORE_disconnect (me->ch);
404 me->ch = NULL;
405}
406
407
408static void
409connect_completion_callback (void *cls,
410 struct GNUNET_TESTBED_Operation *op,
411 const char *emsg)
412{
413 struct TestbedConnectOperation *cop = cls;
414 static int ops = 0;
415 int c;
416
417 if (NULL == emsg)
418 {
419 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
420 _ ("Connected master [%u] with slave [%u]\n"),
421 cop->master->no,
422 cop->slave->no);
423 }
424 else
425 {
426 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
427 _ ("Failed to connect master peer [%u] with slave [%u]\n"),
428 cop->master->no, cop->slave->no);
429 GNUNET_break (0);
430 GNUNET_SCHEDULER_shutdown ();
431 }
432 GNUNET_TESTBED_operation_done (op);
433 ops++;
434 for (c = 0; c < top->num_slaves; c++)
435 {
436 if (cop == &cop->master->core_connect_ops[c])
437 cop->master->core_connect_ops[c].connect_op = NULL;
438 }
439 if (ops == top->num_masters * top->num_slaves)
440 {
441 top->state.connected_PEERS = GNUNET_YES;
442 }
443}
444
445
446static void
447do_connect_peers (void *cls)
448{
449 int c_m;
450 int c_s;
451 struct BenchmarkPeer *p;
452
453 if ((top->state.connected_ATS_service == GNUNET_NO) ||
454 (top->state.connected_COMM_service == GNUNET_NO))
455 return;
456
457 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
458 "Connecting peers on CORE level\n");
459 for (c_m = 0; c_m < top->num_masters; c_m++)
460 {
461 p = &top->mps[c_m];
462 p->core_connect_ops = GNUNET_malloc (top->num_slaves
463 * sizeof(struct
464 TestbedConnectOperation));
465
466 for (c_s = 0; c_s < top->num_slaves; c_s++)
467 {
468 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
469 "Connecting master [%u] with slave [%u]\n",
470 p->no,
471 top->sps[c_s].no);
472 p->core_connect_ops[c_s].master = p;
473 p->core_connect_ops[c_s].slave = &top->sps[c_s];
474 p->core_connect_ops[c_s].connect_op
475 = GNUNET_TESTBED_overlay_connect (NULL,
476 &connect_completion_callback,
477 &p->core_connect_ops[c_s],
478 top->sps[c_s].peer,
479 p->peer);
480 if (NULL == p->core_connect_ops[c_s].connect_op)
481 {
482 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
483 "Could not connect master [%u] and slave [%u]\n",
484 p->no,
485 top->sps[c_s].no);
486 GNUNET_break (0);
487 GNUNET_SCHEDULER_shutdown ();
488 return;
489 }
490 }
491 }
492}
493
494
495static void
496comm_connect_completion_cb (void *cls,
497 struct GNUNET_TESTBED_Operation *op,
498 void *ca_result,
499 const char *emsg)
500{
501 static int comm_done = 0;
502
503 if ((NULL != emsg) || (NULL == ca_result))
504 {
505 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
506 "Initialization failed, shutdown\n");
507 GNUNET_break (0);
508 GNUNET_SCHEDULER_shutdown ();
509 return;
510 }
511 comm_done++;
512
513 if (comm_done == top->num_slaves + top->num_masters)
514 {
515 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
516 "Connected to all %s services\n",
517 (GNUNET_YES == top->test_core) ? "CORE" : "TRANSPORT");
518 top->state.connected_COMM_service = GNUNET_YES;
519 GNUNET_SCHEDULER_add_now (&do_connect_peers,
520 NULL);
521 }
522}
523
524
525static void
526do_comm_connect (void *cls)
527{
528 int c_s;
529 int c_m;
530
531 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
532 "Connecting to all %s services\n",
533 (GNUNET_YES == top->test_core) ? "CORE" : "TRANSPORT");
534 for (c_m = 0; c_m < top->num_masters; c_m++)
535 {
536 if (GNUNET_YES == top->test_core)
537 top->mps[c_m].comm_op
538 = GNUNET_TESTBED_service_connect (NULL,
539 top->mps[c_m].peer,
540 "core",
541 &comm_connect_completion_cb,
542 NULL,
543 &core_connect_adapter,
544 &core_disconnect_adapter,
545 &top->mps[c_m]);
546 else
547 {
548 top->mps[c_m].comm_op
549 = GNUNET_TESTBED_service_connect (NULL,
550 top->mps[c_m].peer,
551 "transport",
552 &comm_connect_completion_cb,
553 NULL,
554 &transport_connect_adapter,
555 &transport_disconnect_adapter,
556 &top->mps[c_m]);
557 }
558 }
559
560 for (c_s = 0; c_s < top->num_slaves; c_s++)
561 {
562 if (GNUNET_YES == top->test_core)
563 top->sps[c_s].comm_op
564 = GNUNET_TESTBED_service_connect (NULL,
565 top->sps[c_s].peer,
566 "core",
567 &comm_connect_completion_cb,
568 NULL,
569 &core_connect_adapter,
570 &core_disconnect_adapter,
571 &top->sps[c_s]);
572 else
573 {
574 top->sps[c_s].comm_op
575 = GNUNET_TESTBED_service_connect (NULL,
576 top->sps[c_s].peer,
577 "transport",
578 &comm_connect_completion_cb,
579 NULL,
580 &transport_connect_adapter,
581 &transport_disconnect_adapter,
582 &top->sps[c_s]);
583 }
584 }
585}
586
587
588static void
589ats_performance_info_cb (void *cls,
590 const struct GNUNET_HELLO_Address *address,
591 int address_active,
592 struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out,
593 struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in,
594 const struct GNUNET_ATS_Properties *ats_prop)
595{
596 struct BenchmarkPeer *me = cls;
597 struct BenchmarkPartner *p;
598 int log;
599 char *peer_id;
600
601 if (NULL == address)
602 {
603 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
604 "Peer %u: ATS Service disconnected!\n",
605 me->no);
606 return;
607 }
608
609 p = find_partner (me,
610 &address->peer);
611 if (NULL == p)
612 {
613 /* This is not one of my partners
614 * Will happen since the peers will connect to each other due to gossiping
615 */
616 return;
617 }
618 peer_id = GNUNET_strdup (GNUNET_i2s (&me->id));
619
620 log = GNUNET_NO;
621 if ((p->bandwidth_in != ntohl (bandwidth_in.value__)) ||
622 (p->bandwidth_out != ntohl (bandwidth_out.value__)))
623 log = GNUNET_YES;
624 p->bandwidth_in = ntohl (bandwidth_in.value__);
625 p->bandwidth_out = ntohl (bandwidth_out.value__);
626
627 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
628 "%s [%u] received ATS information: %s\n",
629 (GNUNET_YES == p->me->master) ? "Master" : "Slave",
630 p->me->no,
631 GNUNET_i2s (&p->dest->id));
632
633 p->props.utilization_out = ats_prop->utilization_out;
634 p->props.utilization_in = ats_prop->utilization_in;
635 p->props.scope = ats_prop->scope;
636 p->props.delay = ats_prop->delay;
637 p->props.distance = ats_prop->distance;
638
639 if (GNUNET_YES == log)
640 top->ats_perf_cb (cls, address,
641 address_active,
642 bandwidth_out,
643 bandwidth_in,
644 ats_prop);
645 GNUNET_free (peer_id);
646}
647
648
649static void *
650ats_perf_connect_adapter (void *cls,
651 const struct GNUNET_CONFIGURATION_Handle *cfg)
652{
653 struct BenchmarkPeer *me = cls;
654
655 me->ats_perf_handle
656 = GNUNET_ATS_performance_init (cfg,
657 &ats_performance_info_cb,
658 me);
659 if (NULL == me->ats_perf_handle)
660 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
661 "Failed to create ATS performance handle \n");
662 return me->ats_perf_handle;
663}
664
665
666static void
667ats_perf_disconnect_adapter (void *cls,
668 void *op_result)
669{
670 struct BenchmarkPeer *me = cls;
671
672 GNUNET_ATS_performance_done (me->ats_perf_handle);
673 me->ats_perf_handle = NULL;
674}
675
676
677static void
678ats_connect_completion_cb (void *cls,
679 struct GNUNET_TESTBED_Operation *op,
680 void *ca_result,
681 const char *emsg)
682{
683 static int op_done = 0;
684
685 if ((NULL != emsg) || (NULL == ca_result))
686 {
687 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
688 "Initialization failed, shutdown\n");
689 GNUNET_break (0);
690 GNUNET_SCHEDULER_shutdown ();
691 return;
692 }
693 op_done++;
694 if (op_done == (top->num_masters + top->num_slaves))
695 {
696 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
697 "Connected to all ATS services\n");
698 top->state.connected_ATS_service = GNUNET_YES;
699 GNUNET_SCHEDULER_add_now (&do_comm_connect,
700 NULL);
701 }
702}
703
704
705static void
706do_connect_ats (void *cls)
707{
708 int c_m;
709 int c_s;
710
711 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
712 "Connecting to all ATS services\n");
713 for (c_m = 0; c_m < top->num_masters; c_m++)
714 {
715 top->mps[c_m].ats_perf_op
716 = GNUNET_TESTBED_service_connect (NULL,
717 top->mps[c_m].peer,
718 "ats",
719 &ats_connect_completion_cb,
720 NULL,
721 &ats_perf_connect_adapter,
722 &ats_perf_disconnect_adapter,
723 &top->mps[c_m]);
724 }
725
726 for (c_s = 0; c_s < top->num_slaves; c_s++)
727 {
728 top->sps[c_s].ats_perf_op
729 = GNUNET_TESTBED_service_connect (NULL,
730 top->sps[c_s].peer,
731 "ats",
732 &ats_connect_completion_cb,
733 NULL,
734 &ats_perf_connect_adapter,
735 &ats_perf_disconnect_adapter,
736 &top->sps[c_s]);
737 }
738}
739
740
741static void
742peerinformation_cb (void *cb_cls,
743 struct GNUNET_TESTBED_Operation *op,
744 const struct GNUNET_TESTBED_PeerInformation *pinfo,
745 const char *emsg)
746{
747 struct BenchmarkPeer *p = cb_cls;
748 static int done = 0;
749
750 GNUNET_assert (pinfo->pit == GNUNET_TESTBED_PIT_IDENTITY);
751
752 p->id = *pinfo->result.id;
753 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
754 "%s [%u] has peer id `%s'\n",
755 (p->master == GNUNET_YES) ? "Master" : "Slave",
756 p->no,
757 GNUNET_i2s (&p->id));
758
759 GNUNET_TESTBED_operation_done (op);
760 p->peer_id_op = NULL;
761 done++;
762
763 if (done == top->num_slaves + top->num_masters)
764 {
765 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
766 "Retrieved all peer ID, connect to ATS\n");
767 GNUNET_SCHEDULER_add_now (&do_connect_ats,
768 NULL);
769 }
770}
771
772
773/**
774 * Signature of a main function for a testcase.
775 *
776 * @param cls closure
777 * @param h testbed handle
778 * @param num_peers number of peers in 'peers'
779 * @param peers_ handle to peers run in the testbed
780 * @param links_succeeded the number of overlay link connection attempts that
781 * succeeded
782 * @param links_failed the number of overlay link connection attempts that
783 * failed
784 */
785static void
786main_run (void *cls,
787 struct GNUNET_TESTBED_RunHandle *h,
788 unsigned int num_peers,
789 struct GNUNET_TESTBED_Peer **peers_,
790 unsigned int links_succeeded,
791 unsigned int links_failed)
792{
793 int c_m;
794 int c_s;
795
796 GNUNET_assert (NULL == cls);
797 GNUNET_assert (top->num_masters + top->num_slaves == num_peers);
798 GNUNET_assert (NULL != peers_);
799
800 GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
801 top);
802
803 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
804 "Setting up %u masters and %u slaves\n",
805 top->num_masters,
806 top->num_slaves);
807
808 /* Setup master peers */
809 for (c_m = 0; c_m < top->num_masters; c_m++)
810 {
811 GNUNET_assert (NULL != peers_[c_m]);
812 top->mps[c_m].peer = peers_[c_m];
813 top->mps[c_m].no = c_m;
814 top->mps[c_m].master = GNUNET_YES;
815 top->mps[c_m].pref_partner = &top->sps[c_m];
816 top->mps[c_m].pref_value = TEST_ATS_PREFERENCE_DEFAULT;
817 top->mps[c_m].partners =
818 GNUNET_malloc (top->num_slaves * sizeof(struct BenchmarkPartner));
819 top->mps[c_m].num_partners = top->num_slaves;
820 /* Initialize partners */
821 for (c_s = 0; c_s < top->num_slaves; c_s++)
822 {
823 top->mps[c_m].partners[c_s].me = &top->mps[c_m];
824 top->mps[c_m].partners[c_s].dest = &top->sps[c_s];
825 }
826 /* Get configuration */
827 top->mps[c_m].peer_id_op
828 = GNUNET_TESTBED_peer_get_information (top->mps[c_m].peer,
829 GNUNET_TESTBED_PIT_IDENTITY,
830 &peerinformation_cb,
831 &top->mps[c_m]);
832 }
833
834 /* Setup slave peers */
835 for (c_s = 0; c_s < top->num_slaves; c_s++)
836 {
837 GNUNET_assert (NULL != peers_[c_s + top->num_masters]);
838 top->sps[c_s].peer = peers_[c_s + top->num_masters];
839 top->sps[c_s].no = c_s + top->num_masters;
840 top->sps[c_s].master = GNUNET_NO;
841 top->sps[c_s].partners =
842 GNUNET_new_array (top->num_masters,
843 struct BenchmarkPartner);
844 top->sps[c_s].num_partners = top->num_masters;
845 /* Initialize partners */
846 for (c_m = 0; c_m < top->num_masters; c_m++)
847 {
848 top->sps[c_s].partners[c_m].me = &top->sps[c_s];
849 top->sps[c_s].partners[c_m].dest = &top->mps[c_m];
850
851 /* Initialize properties */
852 top->sps[c_s].partners[c_m].props.delay = GNUNET_TIME_UNIT_ZERO;
853 top->sps[c_s].partners[c_m].props.distance = 0;
854 top->sps[c_s].partners[c_m].props.scope = GNUNET_NT_UNSPECIFIED;
855 top->sps[c_s].partners[c_m].props.utilization_in = 0;
856 top->sps[c_s].partners[c_m].props.utilization_out = 0;
857 }
858 /* Get configuration */
859 top->sps[c_s].peer_id_op
860 = GNUNET_TESTBED_peer_get_information (top->sps[c_s].peer,
861 GNUNET_TESTBED_PIT_IDENTITY,
862 &peerinformation_cb,
863 &top->sps[c_s]);
864 }
865}
866
867
868/**
869 * Controller event callback
870 *
871 * @param cls NULL
872 * @param event the controller event
873 */
874static void
875controller_event_cb (void *cls,
876 const struct GNUNET_TESTBED_EventInformation *event)
877{
878 switch (event->type)
879 {
880 case GNUNET_TESTBED_ET_CONNECT:
881 break;
882
883 case GNUNET_TESTBED_ET_OPERATION_FINISHED:
884 break;
885
886 default:
887 GNUNET_break (0);
888 GNUNET_SCHEDULER_shutdown ();
889 }
890}
891
892
893struct BenchmarkPeer *
894GNUNET_ATS_TEST_get_peer (int src)
895{
896 if (src > top->num_masters)
897 return NULL;
898 return &top->mps[src];
899}
900
901
902struct BenchmarkPartner *
903GNUNET_ATS_TEST_get_partner (int src,
904 int dest)
905{
906 if (src > top->num_masters)
907 return NULL;
908 if (dest > top->num_slaves)
909 return NULL;
910 return &top->mps[src].partners[dest];
911}
912
913
914/**
915 * Create a topology for ats testing
916 *
917 * @param name test name
918 * @param cfg_file configuration file to use for the peers
919 * @param num_slaves number of slaves
920 * @param num_masters number of masters
921 * @param test_core connect to CORE service (GNUNET_YES) or transport (GNUNET_NO)
922 * @param done_cb function to call when topology is setup
923 * @param done_cb_cls cls for callback
924 * @param log_request_cb callback to call when logging is required
925 */
926void
927GNUNET_ATS_TEST_create_topology (char *name, char *cfg_file,
928 unsigned int num_slaves,
929 unsigned int num_masters,
930 int test_core,
931 GNUNET_ATS_TEST_TopologySetupDoneCallback
932 done_cb,
933 void *done_cb_cls,
934 GNUNET_ATS_AddressInformationCallback
935 log_request_cb)
936{
937 top = GNUNET_new (struct GNUNET_ATS_TEST_Topology);
938 top->num_masters = num_masters;
939 top->num_slaves = num_slaves;
940 top->done_cb = done_cb;
941 top->done_cb_cls = done_cb_cls;
942 top->test_core = test_core;
943 top->ats_perf_cb = log_request_cb;
944 top->mps = GNUNET_new_array (num_masters,
945 struct BenchmarkPeer);
946 top->sps = GNUNET_new_array (num_slaves,
947 struct BenchmarkPeer);
948
949 /* Start topology */
950 uint64_t event_mask;
951 event_mask = 0;
952 event_mask |= (1LL << GNUNET_TESTBED_ET_CONNECT);
953 event_mask |= (1LL << GNUNET_TESTBED_ET_OPERATION_FINISHED);
954 (void) GNUNET_TESTBED_test_run (name,
955 cfg_file,
956 num_slaves + num_masters,
957 event_mask,
958 &controller_event_cb, NULL,
959 &main_run, NULL);
960}
961
962
963/**
964 * Shutdown topology
965 */
966void
967GNUNET_ATS_TEST_shutdown_topology (void)
968{
969 if (NULL == top)
970 return;
971 GNUNET_SCHEDULER_shutdown ();
972}
973
974
975/* end of file ats-testing.c */
diff --git a/src/ats-tests/ats-testing.h b/src/ats-tests/ats-testing.h
deleted file mode 100644
index 017ffef4f..000000000
--- a/src/ats-tests/ats-testing.h
+++ /dev/null
@@ -1,757 +0,0 @@
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2010-2013 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20/**
21 * @file ats-tests/ats-testing.h
22 * @brief ats testing library: setup topology and provide logging to test ats
23 * @author Christian Grothoff
24 * @author Matthias Wachs
25 */
26#include "platform.h"
27#include "gnunet_util_lib.h"
28#include "gnunet_testbed_service.h"
29#include "gnunet_ats_service.h"
30#include "gnunet_core_service.h"
31#include "gnunet_transport_service.h"
32
33#define TEST_ATS_PREFERENCE_DEFAULT 1.0
34
35/**
36 * Message type sent for traffic generation
37 */
38#define TEST_MESSAGE_TYPE_PING 12345
39
40/**
41 * Message type sent as response during traffic generation
42 */
43#define TEST_MESSAGE_TYPE_PONG 12346
44
45/**
46 * Size of test messages
47 */
48#define TEST_MESSAGE_SIZE 100
49
50
51struct TestMessage
52{
53 struct GNUNET_MessageHeader header;
54
55 uint8_t padding[TEST_MESSAGE_SIZE - sizeof(struct GNUNET_MessageHeader)];
56};
57
58
59struct BenchmarkPartner;
60
61struct BenchmarkPeer;
62
63struct GNUNET_ATS_TEST_Topology;
64
65struct TrafficGenerator;
66
67struct LoggingHandle;
68
69enum GeneratorType
70{
71 GNUNET_ATS_TEST_TG_LINEAR,
72 GNUNET_ATS_TEST_TG_CONSTANT,
73 GNUNET_ATS_TEST_TG_RANDOM,
74 GNUNET_ATS_TEST_TG_SINUS
75};
76
77
78/**
79 * Callback to call when topology setup is completed
80 *
81 * @param cls the closure
82 * @param masters array of master peers
83 * @param slaves array of master peers
84 */
85typedef void (*GNUNET_ATS_TEST_TopologySetupDoneCallback) (
86 void *cls,
87 struct BenchmarkPeer *masters,
88 struct BenchmarkPeer *slaves);
89
90/**
91 * Callback called when logging is required for the data contained
92 *
93 * @param cls the closure
94 * @param address an address
95 * @param address_active is address active
96 * @param bandwidth_out bandwidth outbound
97 * @param bandwidth_in bandwidth inbound
98 * @param prop performance information
99 */
100typedef void (*GNUNET_ATS_TEST_LogRequest) (
101 void *cls,
102 const struct GNUNET_HELLO_Address *address,
103 int address_active,
104 struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out,
105 struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in,
106 const struct GNUNET_ATS_Properties *prop);
107
108/**
109 * Information we track for a peer in the testbed.
110 */
111struct BenchmarkPeer
112{
113 /**
114 * Handle with testbed.
115 */
116 struct GNUNET_TESTBED_Peer *peer;
117
118 /**
119 * Unique identifier
120 */
121 int no;
122
123 /**
124 * Is this peer a measter: GNUNET_YES/GNUNET_NO
125 */
126 int master;
127
128 /**
129 * Peer ID
130 */
131 struct GNUNET_PeerIdentity id;
132
133 /**
134 * Testbed operation to get peer information
135 */
136 struct GNUNET_TESTBED_Operation *peer_id_op;
137
138 /**
139 * Testbed operation to connect to ATS performance service
140 */
141 struct GNUNET_TESTBED_Operation *ats_perf_op;
142
143 /**
144 * Testbed operation to connect to core
145 */
146 struct GNUNET_TESTBED_Operation *comm_op;
147
148 /**
149 * ATS performance handle
150 */
151 struct GNUNET_ATS_PerformanceHandle *ats_perf_handle;
152
153 /**
154 * Masters only:
155 * Testbed connect operations to connect masters to slaves
156 */
157 struct TestbedConnectOperation *core_connect_ops;
158
159 /**
160 * Core handle
161 */
162 struct GNUNET_CORE_Handle *ch;
163
164 /**
165 * Transport handle
166 */
167 struct GNUNET_TRANSPORT_CoreHandle *th;
168
169 /**
170 * Masters only:
171 * Peer to set ATS preferences for
172 */
173 struct BenchmarkPeer *pref_partner;
174
175 /**
176 * Masters only
177 * Progress task
178 */
179 struct GNUNET_SCHEDULER_Task *ats_task;
180
181 /**
182 * Masters only
183 * Progress task
184 */
185 double pref_value;
186
187 /**
188 * Array of partners with num_slaves entries (if master) or
189 * num_master entries (if slave)
190 */
191 struct BenchmarkPartner *partners;
192
193 /**
194 * Number of partners
195 */
196 int num_partners;
197
198 /**
199 * Number of core connections
200 */
201 int core_connections;
202
203 /**
204 * Masters only:
205 * Number of connections to slave peers
206 */
207 int core_slave_connections;
208
209 /**
210 * Total number of messages this peer has sent
211 */
212 unsigned int total_messages_sent;
213
214 /**
215 * Total number of bytes this peer has sent
216 */
217 unsigned int total_bytes_sent;
218
219 /**
220 * Total number of messages this peer has received
221 */
222 unsigned int total_messages_received;
223
224 /**
225 * Total number of bytes this peer has received
226 */
227 unsigned int total_bytes_received;
228};
229
230struct TrafficGenerator
231{
232 struct TrafficGenerator *prev;
233 struct TrafficGenerator *next;
234
235 enum GeneratorType type;
236
237 struct BenchmarkPeer *src;
238 struct BenchmarkPartner *dest;
239
240 long int base_rate;
241 long int max_rate;
242 struct GNUNET_TIME_Relative duration_period;
243
244 struct GNUNET_SCHEDULER_Task *send_task;
245 struct GNUNET_TIME_Absolute next_ping_transmission;
246 struct GNUNET_TIME_Absolute time_start;
247};
248
249
250struct PreferenceGenerator
251{
252 struct PreferenceGenerator *prev;
253 struct PreferenceGenerator *next;
254
255 enum GeneratorType type;
256
257 struct BenchmarkPeer *src;
258 struct BenchmarkPartner *dest;
259
260 enum GNUNET_ATS_PreferenceKind kind;
261
262 long int base_value;
263 long int max_value;
264 struct GNUNET_TIME_Relative duration_period;
265 struct GNUNET_TIME_Relative frequency;
266
267 struct GNUNET_SCHEDULER_Task *set_task;
268 struct GNUNET_TIME_Absolute next_ping_transmission;
269 struct GNUNET_TIME_Absolute time_start;
270};
271
272/**
273 * Information about a benchmarking partner
274 */
275struct BenchmarkPartner
276{
277 /**
278 * The peer itself this partner belongs to
279 */
280 struct BenchmarkPeer *me;
281
282 /**
283 * The partner peer
284 */
285 struct BenchmarkPeer *dest;
286
287 /**
288 * Message queue handle.
289 */
290 struct GNUNET_MQ_Handle *mq;
291
292 /**
293 * Handle for traffic generator
294 */
295 struct TrafficGenerator *tg;
296
297 /**
298 * Handle for preference generator
299 */
300 struct PreferenceGenerator *pg;
301
302 /**
303 * Timestamp to calculate communication layer delay
304 */
305 struct GNUNET_TIME_Absolute last_message_sent;
306
307 /**
308 * Accumulated RTT for all messages
309 */
310 unsigned int total_app_rtt;
311
312 /**
313 * Number of messages sent to this partner
314 */
315 unsigned int messages_sent;
316
317 /**
318 * Number of bytes sent to this partner
319 */
320 unsigned int bytes_sent;
321
322 /**
323 * Number of messages received from this partner
324 */
325 unsigned int messages_received;
326
327 /**
328 * Number of bytes received from this partner
329 */
330 unsigned int bytes_received;
331
332 /**
333 * Current ATS properties
334 */
335 struct GNUNET_ATS_Properties props;
336
337 /**
338 * Bandwidth assigned inbound
339 */
340 uint32_t bandwidth_in;
341
342 /**
343 * Bandwidth assigned outbound
344 */
345 uint32_t bandwidth_out;
346
347 /**
348 * Current preference values for bandwidth
349 */
350 double pref_bandwidth;
351
352 /**
353 * Current preference values for delay
354 */
355 double pref_delay;
356};
357
358
359/**
360 * Overall state of the performance benchmark
361 */
362struct BenchmarkState
363{
364 /**
365 * Are we connected to ATS service of all peers: GNUNET_YES/NO
366 */
367 int connected_ATS_service;
368
369 /**
370 * Are we connected to CORE service of all peers: GNUNET_YES/NO
371 */
372 int connected_COMM_service;
373
374 /**
375 * Are we connected to all peers: GNUNET_YES/NO
376 */
377 int connected_PEERS;
378
379 /**
380 * Are we connected to all slave peers on CORE level: GNUNET_YES/NO
381 */
382 int connected_CORE;
383
384 /**
385 * Are we connected to CORE service of all peers: GNUNET_YES/NO
386 */
387 int benchmarking;
388};
389
390
391struct GNUNET_ATS_TEST_Topology
392{
393 /**
394 * Progress task
395 */
396 struct GNUNET_SCHEDULER_Task *progress_task;
397
398 /**
399 * Test result
400 */
401 int result;
402
403 /**
404 * Test core (#GNUNET_YES) or transport (#GNUNET_NO)
405 */
406 int test_core;
407
408 /**
409 * Solver string
410 */
411 char *solver;
412
413 /**
414 * Preference string
415 */
416 char *testname;
417
418 /**
419 * Preference string
420 */
421 char *pref_str;
422
423 /**
424 * ATS preference value
425 */
426 int pref_val;
427
428 /**
429 * Number master peers
430 */
431 unsigned int num_masters;
432
433 /**
434 * Array of master peers
435 */
436 struct BenchmarkPeer *mps;
437
438 /**
439 * Number slave peers
440 */
441 unsigned int num_slaves;
442
443 /**
444 * Array of slave peers
445 */
446 struct BenchmarkPeer *sps;
447
448 /**
449 * Benchmark duration
450 */
451 struct GNUNET_TIME_Relative perf_duration;
452
453 /**
454 * Logging frequency
455 */
456 struct GNUNET_TIME_Relative log_frequency;
457
458 /**
459 * Benchmark state
460 */
461 struct BenchmarkState state;
462
463 GNUNET_ATS_TEST_TopologySetupDoneCallback done_cb;
464
465 GNUNET_ATS_AddressInformationCallback ats_perf_cb;
466
467 void *done_cb_cls;
468};
469
470enum OperationType
471{
472 START_SEND,
473 STOP_SEND,
474 START_PREFERENCE,
475 STOP_PREFERENCE
476};
477
478struct Episode;
479
480struct Experiment;
481
482typedef void (*GNUNET_ATS_TESTING_EpisodeDoneCallback) (struct Episode *e);
483
484typedef void (*GNUNET_ATS_TESTING_ExperimentDoneCallback) (
485 struct Experiment *e,
486 struct GNUNET_TIME_Relative duration,
487 int success);
488
489/**
490 * An operation in an experiment
491 */
492struct GNUNET_ATS_TEST_Operation
493{
494 struct GNUNET_ATS_TEST_Operation *next;
495 struct GNUNET_ATS_TEST_Operation *prev;
496
497 long long unsigned int src_id;
498 long long unsigned int dest_id;
499
500 long long unsigned int base_rate;
501 long long unsigned int max_rate;
502 struct GNUNET_TIME_Relative period;
503 struct GNUNET_TIME_Relative frequency;
504
505 enum OperationType type;
506 enum GeneratorType gen_type;
507 enum GNUNET_ATS_PreferenceKind pref_type;
508};
509
510struct Episode
511{
512 int id;
513 struct Episode *next;
514 struct GNUNET_TIME_Relative duration;
515
516 struct GNUNET_ATS_TEST_Operation *head;
517 struct GNUNET_ATS_TEST_Operation *tail;
518};
519
520
521struct Experiment
522{
523 char *name;
524 char *cfg_file;
525 unsigned long long int num_masters;
526 unsigned long long int num_slaves;
527 struct GNUNET_TIME_Relative log_freq;
528 struct GNUNET_TIME_Relative max_duration;
529 struct GNUNET_TIME_Relative total_duration;
530 struct GNUNET_TIME_Absolute start_time;
531 unsigned int num_episodes;
532 struct Episode *start;
533
534 struct GNUNET_SCHEDULER_Task *experiment_timeout_task;
535 struct GNUNET_SCHEDULER_Task *episode_timeout_task;
536 struct Episode *cur;
537
538 GNUNET_ATS_TESTING_EpisodeDoneCallback ep_done_cb;
539 GNUNET_ATS_TESTING_ExperimentDoneCallback e_done_cb;
540};
541
542
543extern struct GNUNET_CONFIGURATION_Handle *cfg;
544
545/**
546 * Execute the specified experiment
547 *
548 * @param e the Experiment
549 * @param ep_done_cb a episode is completed
550 * @param e_done_cb the experiment is completed
551 */
552void
553GNUNET_ATS_TEST_experimentation_run (
554 struct Experiment *e,
555 GNUNET_ATS_TESTING_EpisodeDoneCallback ep_done_cb,
556 GNUNET_ATS_TESTING_ExperimentDoneCallback e_done_cb);
557
558
559/**
560 * Load an experiment from a file
561 *
562 * @param filename the file
563 * @return the Experiment or NULL on failure
564 */
565struct Experiment *
566GNUNET_ATS_TEST_experimentation_load (const char *filename);
567
568
569/**
570 * Stop an experiment
571 *
572 * @param e the experiment
573 */
574void
575GNUNET_ATS_TEST_experimentation_stop (struct Experiment *e);
576
577
578void
579GNUNET_ATS_TEST_traffic_handle_ping (struct BenchmarkPartner *p);
580
581
582void
583GNUNET_ATS_TEST_traffic_handle_pong (struct BenchmarkPartner *p);
584
585
586/**
587 * Generate between the source master and the partner and send traffic with a
588 * maximum rate.
589 *
590 * @param src traffic source
591 * @param dest traffic partner
592 * @param type type of traffic to generate
593 * @param base_rate traffic base rate to send data with
594 * @param max_rate traffic maximum rate to send data with
595 * @param period duration of a period of traffic generation (~ 1/frequency)
596 * @param duration how long to generate traffic
597 * @return the traffic generator
598 */
599struct TrafficGenerator *
600GNUNET_ATS_TEST_generate_traffic_start (struct BenchmarkPeer *src,
601 struct BenchmarkPartner *dest,
602 enum GeneratorType type,
603 unsigned int base_rate,
604 unsigned int max_rate,
605 struct GNUNET_TIME_Relative period,
606 struct GNUNET_TIME_Relative duration);
607
608
609void
610GNUNET_ATS_TEST_generate_traffic_stop (struct TrafficGenerator *tg);
611
612
613/**
614 * Stop all traffic generators
615 */
616void
617GNUNET_ATS_TEST_generate_traffic_stop_all (void);
618
619
620/**
621 * Generate between the source master and the partner and set preferences with a
622 * value depending on the generator.
623 *
624 * @param src source
625 * @param dest partner
626 * @param type type of preferences to generate
627 * @param base_value traffic base rate to send data with
628 * @param value_rate traffic maximum rate to send data with
629 * @param period duration of a period of preferences generation (~ 1/frequency)
630 * @param frequency how long to generate preferences
631 * @param kind ATS preference to generate
632 * @return the traffic generator
633 */
634struct PreferenceGenerator *
635GNUNET_ATS_TEST_generate_preferences_start (
636 struct BenchmarkPeer *src,
637 struct BenchmarkPartner *dest,
638 enum GeneratorType type,
639 unsigned int base_value,
640 unsigned int value_rate,
641 struct GNUNET_TIME_Relative period,
642 struct GNUNET_TIME_Relative frequency,
643 enum GNUNET_ATS_PreferenceKind kind);
644
645
646void
647GNUNET_ATS_TEST_generate_preferences_stop (struct PreferenceGenerator *pg);
648
649
650void
651GNUNET_ATS_TEST_generate_preferences_stop_all (void);
652
653
654/**
655 * Start logging
656 *
657 * @param log_frequency the logging frequency
658 * @param testname the testname
659 * @param masters the master peers used for benchmarking
660 * @param num_masters the number of master peers
661 * @param num_slaves the number of slave peers
662 * @param verbose verbose logging
663 * @return the logging handle or NULL on error
664 */
665struct LoggingHandle *
666GNUNET_ATS_TEST_logging_start (struct GNUNET_TIME_Relative log_frequency,
667 const char *testname,
668 struct BenchmarkPeer *masters,
669 int num_masters,
670 int num_slaves,
671 int verbose);
672
673
674/**
675 * Stop logging
676 *
677 * @param l the logging handle
678 */
679void
680GNUNET_ATS_TEST_logging_clean_up (struct LoggingHandle *l);
681
682
683/**
684 * Stop logging
685 *
686 * @param l the logging handle
687 */
688void
689GNUNET_ATS_TEST_logging_stop (struct LoggingHandle *l);
690
691
692/**
693 * Log all data now
694 *
695 * @param l logging handle to use
696 */
697void
698GNUNET_ATS_TEST_logging_now (struct LoggingHandle *l);
699
700
701/**
702 * Write logging data to file
703 *
704 * @param l logging handle to use
705 * @param test_name name of the current test
706 * @param plots create gnuplots: #GNUNET_YES or #GNUNET_NO
707 */
708void
709GNUNET_ATS_TEST_logging_write_to_file (struct LoggingHandle *l,
710 const char *test_name,
711 int plots);
712
713
714/**
715 * Topology related functions
716 */
717struct BenchmarkPeer *
718GNUNET_ATS_TEST_get_peer (int src);
719
720
721struct BenchmarkPartner *
722GNUNET_ATS_TEST_get_partner (int src, int dest);
723
724
725/**
726 * Create a topology for ats testing
727 *
728 * @param name test name
729 * @param cfg_file configuration file to use for the peers
730 * @param num_slaves number of slaves
731 * @param num_masters number of masters
732 * @param test_core connect to CORE service (#GNUNET_YES) or transport
733 * (#GNUNET_NO)
734 * @param done_cb function to call when topology is setup
735 * @param done_cb_cls cls for callback
736 * @param log_request_cb callback to call when logging is required
737 */
738void
739GNUNET_ATS_TEST_create_topology (
740 char *name,
741 char *cfg_file,
742 unsigned int num_slaves,
743 unsigned int num_masters,
744 int test_core,
745 GNUNET_ATS_TEST_TopologySetupDoneCallback done_cb,
746 void *done_cb_cls,
747 GNUNET_ATS_TEST_LogRequest ats_perf_cb);
748
749
750/**
751 * Shutdown topology
752 */
753void
754GNUNET_ATS_TEST_shutdown_topology (void);
755
756
757/* end of file ats-testing.h */
diff --git a/src/ats-tests/experiments/evaluation1_dru_3_peers_1addr_1scope_prop.conf b/src/ats-tests/experiments/evaluation1_dru_3_peers_1addr_1scope_prop.conf
deleted file mode 100644
index 4b66e5aea..000000000
--- a/src/ats-tests/experiments/evaluation1_dru_3_peers_1addr_1scope_prop.conf
+++ /dev/null
@@ -1,24 +0,0 @@
1@INLINE@ template_perf_ats.conf
2
3[transport]
4plugins = unix
5
6[ats]
7MODE = MLP
8UNSPECIFIED_QUOTA_IN = 128 KiB
9UNSPECIFIED_QUOTA_OUT = 128 KiB
10# LOOPBACK
11LOOPBACK_QUOTA_IN = 128 KiB
12LOOPBACK_QUOTA_OUT = 128 KiB
13# LAN
14LAN_QUOTA_IN = 128 KiB
15LAN_QUOTA_OUT = 128 KiB
16# WAN
17WAN_QUOTA_IN = 128 KiB
18WAN_QUOTA_OUT = 128 KiB
19# WLAN
20WLAN_QUOTA_IN = 128 KiB
21WLAN_QUOTA_OUT = 128 KiB
22# BLUETOOTH
23BLUETOOTH_QUOTA_IN = 128 KiB
24BLUETOOTH_QUOTA_OUT = 128 KiB \ No newline at end of file
diff --git a/src/ats-tests/experiments/evaluation1_dru_3_peers_1addr_1scope_prop.exp b/src/ats-tests/experiments/evaluation1_dru_3_peers_1addr_1scope_prop.exp
deleted file mode 100644
index 6a04e7491..000000000
--- a/src/ats-tests/experiments/evaluation1_dru_3_peers_1addr_1scope_prop.exp
+++ /dev/null
@@ -1,46 +0,0 @@
1[experiment]
2name = sc1_eval_dru_prop
3masters = 1
4slaves = 3
5max_duration = 20 s
6log_freq = 100 ms
7cfg_file = experiments/evaluation1_dru_3_peers_1addr_1scope_prop.conf
8
9[episode-0]
10# operations = start_send, stop_send, start_preference, stop_preference
11duration = 10 s
12op-0-operation = start_send
13op-0-src = 0
14op-0-dest = 0
15op-0-type = constant
16#op-0-period = 10 s
17op-0-base-rate= 10000
18#op-0-max-rate = 10000
19
20op-1-operation = start_send
21op-1-src = 0
22op-1-dest = 1
23op-1-type = constant
24#op-1-period = 10 s
25op-1-base-rate= 10000
26#op-1-max-rate = 10000
27
28op-2-operation = start_send
29op-2-src = 0
30op-2-dest = 2
31op-2-type = constant
32#op-1-period = 10 s
33op-2-base-rate= 10000
34#op-1-max-rate = 10000
35
36[episode-1]
37duration = 10 s
38op-0-operation = start_preference
39op-0-src = 0
40op-0-dest = 2
41op-0-type = constant
42#op-0-period = 10 s
43op-0-pref = bandwidth
44op-0-frequency = 1 s
45op-0-base-rate= 50
46#op-0-max-rate = 10000 \ No newline at end of file
diff --git a/src/ats-tests/experiments/send_linear_10_sec.exp b/src/ats-tests/experiments/send_linear_10_sec.exp
deleted file mode 100644
index efd2c7b08..000000000
--- a/src/ats-tests/experiments/send_linear_10_sec.exp
+++ /dev/null
@@ -1,30 +0,0 @@
1[experiment]
2 name = test
3 masters = 1
4 slaves = 3
5 max_duration = 2 s
6 cfg_file = gnunet_ats_sim_default.conf
7
8[episode-0]
9# operations = set_rate, start_send, stop_send, set_preference
10duration = 2 s
11op-0-operation = set_rate
12op-0-src = 0
13op-0-dest = 0
14op-0-type = constant
15op-0-base-rate= 10000
16op-0-max-rate = 10000
17
18op-1-operation = set_rate
19op-1-src = 0
20op-1-dest = 1
21op-1-type = constant
22op-1-base-rate= 10000
23op-1-max-rate = 10000
24
25op-2-operation = set_rate
26op-2-src = 0
27op-2-dest = 2
28op-2-type = constant
29op-2-base-rate= 10000
30op-2-max-rate = 10000 \ No newline at end of file
diff --git a/src/ats-tests/experiments/test.exp b/src/ats-tests/experiments/test.exp
deleted file mode 100644
index 636139f89..000000000
--- a/src/ats-tests/experiments/test.exp
+++ /dev/null
@@ -1,55 +0,0 @@
1[experiment]
2 name = test
3 masters = 1
4 slaves = 2
5 max_duration = 15 s
6 log_freq = 100 ms
7 cfg_file = gnunet_ats_sim_default.conf
8
9[episode-0]
10# operations = start_send, stop_send, start_preference, stop_preference
11duration = 10 s
12op-0-operation = start_send
13op-0-src = 0
14op-0-dest = 0
15op-0-type = constant
16op-0-base-rate= 10000
17op-0-max-rate = 10000
18
19op-1-operation = start_send
20op-1-src = 0
21op-1-dest = 1
22op-1-type = sinus
23op-1-period = 5 s
24op-1-base-rate= 10000
25op-1-max-rate = 15000
26
27op-2-operation = start_preference
28op-2-src = 0
29op-2-dest = 0
30op-2-type = constant
31op-2-period = 5 s
32op-2-base-rate= 10
33op-2-max-rate = 5
34op-2-pref = latency
35op-2-frequency = 2 s
36
37op-3-operation = start_preference
38op-3-src = 0
39op-3-dest = 1
40op-3-type = linear
41op-3-period = 5 s
42op-3-base-rate= 40
43op-3-max-rate = 50
44op-3-pref = bandwidth
45op-3-frequency = 750 ms
46
47[episode-1]
48duration = 5 s
49op-0-operation = stop_preference
50op-0-src = 0
51op-0-dest = 0
52
53op-1-operation = stop_preference
54op-1-src = 0
55op-1-dest = 1
diff --git a/src/ats-tests/gnunet-ats-sim.c b/src/ats-tests/gnunet-ats-sim.c
deleted file mode 100644
index 15cd52e2f..000000000
--- a/src/ats-tests/gnunet-ats-sim.c
+++ /dev/null
@@ -1,399 +0,0 @@
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2010-2013 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20/**
21 * @file ats-tests/gnunet-ats-sim.c
22 * @brief ats traffic simulator: this tool uses the ats-test library to setup a
23 * topology and generate traffic between these peers. The traffic description
24 * is loaded from a experiment description file
25 * @author Christian Grothoff
26 * @author Matthias Wachs
27 */
28#include "platform.h"
29#include "gnunet_util_lib.h"
30#include "gnunet_testbed_service.h"
31#include "gnunet_ats_service.h"
32#include "gnunet_core_service.h"
33#include "ats-testing.h"
34
35#define TEST_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, \
36 10)
37
38static struct BenchmarkPeer *masters_p;
39static struct BenchmarkPeer *slaves_p;
40
41/**
42 * cmd option -e: experiment file
43 */
44static char *opt_exp_file;
45
46/**
47 * cmd option -l: enable logging
48 */
49static int opt_log;
50
51/**
52 * cmd option -p: enable plots
53 */
54static int opt_plot;
55
56/**
57 * cmd option -v: verbose logs
58 */
59static int opt_verbose;
60
61static struct GNUNET_SCHEDULER_Task *timeout_task;
62
63static struct Experiment *e;
64
65static struct LoggingHandle *l;
66
67
68static void
69evaluate (struct GNUNET_TIME_Relative duration_total)
70{
71 int c_m;
72 int c_s;
73 unsigned int duration;
74 struct BenchmarkPeer *mp;
75 struct BenchmarkPartner *p;
76
77 unsigned int b_sent_sec;
78 double kb_sent_percent;
79 unsigned int b_recv_sec;
80 double kb_recv_percent;
81 unsigned int rtt;
82
83
84 duration = (duration_total.rel_value_us / (1000 * 1000));
85 if (0 == duration)
86 duration = 1;
87 for (c_m = 0; c_m < e->num_masters; c_m++)
88 {
89 mp = &masters_p[c_m];
90 fprintf (stderr,
91 _ (
92 "Master [%u]: sent: %u KiB in %u sec. = %u KiB/s, received: %u KiB in %u sec. = %u KiB/s\n"),
93 mp->no, mp->total_bytes_sent / 1024,
94 duration,
95 (mp->total_bytes_sent / 1024) / duration,
96 mp->total_bytes_received / 1024,
97 duration,
98 (mp->total_bytes_received / 1024) / duration);
99
100 for (c_s = 0; c_s < e->num_slaves; c_s++)
101 {
102 p = &mp->partners[c_s];
103
104 b_sent_sec = 0;
105 b_recv_sec = 0;
106 kb_sent_percent = 0.0;
107 kb_recv_percent = 0.0;
108 rtt = 0;
109
110 if (duration > 0)
111 {
112 b_sent_sec = p->bytes_sent / duration;
113 b_recv_sec = p->bytes_received / duration;
114 }
115
116 if (mp->total_bytes_sent > 0)
117 kb_sent_percent = ((double) p->bytes_sent * 100) / mp->total_bytes_sent;
118 if (mp->total_bytes_received > 0)
119 kb_recv_percent = ((double) p->bytes_received * 100)
120 / mp->total_bytes_received;
121 if (1000 * p->messages_sent > 0)
122 rtt = p->total_app_rtt / (1000 * p->messages_sent);
123 fprintf (stderr,
124 "%c Master [%u] -> Slave [%u]: sent %u Bips (%.2f %%), received %u Bips (%.2f %%)\n",
125 (mp->pref_partner == p->dest) ? '*' : ' ',
126 mp->no, p->dest->no,
127 b_sent_sec, kb_sent_percent,
128 b_recv_sec, kb_recv_percent);
129 fprintf (stderr,
130 "%c Master [%u] -> Slave [%u]: Average application layer RTT: %u ms\n",
131 (mp->pref_partner == p->dest) ? '*' : ' ',
132 mp->no, p->dest->no, rtt);
133 }
134 }
135}
136
137
138static void
139do_shutdown (void *cls)
140{
141 fprintf (stderr, "Shutdown\n");
142 if (NULL != timeout_task)
143 {
144 GNUNET_SCHEDULER_cancel (timeout_task);
145 timeout_task = NULL;
146 }
147 if (NULL != l)
148 {
149 GNUNET_ATS_TEST_logging_stop (l);
150 GNUNET_ATS_TEST_logging_clean_up (l);
151 l = NULL;
152 }
153
154 /* Stop traffic generation */
155 GNUNET_ATS_TEST_generate_traffic_stop_all ();
156
157 /* Stop all preference generations */
158 GNUNET_ATS_TEST_generate_preferences_stop_all ();
159
160 if (NULL != e)
161 {
162 GNUNET_ATS_TEST_experimentation_stop (e);
163 e = NULL;
164 }
165 GNUNET_ATS_TEST_shutdown_topology ();
166}
167
168
169static void
170do_timeout (void *cls)
171{
172 timeout_task = NULL;
173 GNUNET_SCHEDULER_shutdown ();
174}
175
176
177static void
178log_request__cb (void *cls,
179 const struct GNUNET_HELLO_Address *address,
180 int address_active,
181 struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out,
182 struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in,
183 const struct GNUNET_ATS_Properties *ats)
184{
185 if (NULL != l)
186 {
187 // GNUNET_break (0);
188 // GNUNET_ATS_TEST_logging_now (l);
189 }
190}
191
192
193static void
194experiment_done_cb (struct Experiment *e,
195 struct GNUNET_TIME_Relative duration,
196 int success)
197{
198 if (GNUNET_OK == success)
199 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
200 "Experiment done successful in %s\n",
201 GNUNET_STRINGS_relative_time_to_string (duration,
202 GNUNET_YES));
203 else
204 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Experiment failed \n");
205
206 /* Stop logging */
207 GNUNET_ATS_TEST_logging_stop (l);
208
209 /* Stop traffic generation */
210 GNUNET_ATS_TEST_generate_traffic_stop_all ();
211
212 /* Stop all preference generations */
213 GNUNET_ATS_TEST_generate_preferences_stop_all ();
214
215 evaluate (duration);
216 if (opt_log)
217 GNUNET_ATS_TEST_logging_write_to_file (l, opt_exp_file, opt_plot);
218 GNUNET_SCHEDULER_shutdown ();
219}
220
221
222static void
223episode_done_cb (struct Episode *ep)
224{
225 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
226 "Episode %u done\n",
227 ep->id);
228}
229
230
231static void
232topology_setup_done (void *cls,
233 struct BenchmarkPeer *masters,
234 struct BenchmarkPeer *slaves)
235{
236 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
237 "Topology setup complete!\n");
238
239 masters_p = masters;
240 slaves_p = slaves;
241
242 l = GNUNET_ATS_TEST_logging_start (e->log_freq,
243 e->name,
244 masters_p,
245 e->num_masters, e->num_slaves,
246 opt_verbose);
247 GNUNET_ATS_TEST_experimentation_run (e,
248 &episode_done_cb,
249 &experiment_done_cb);
250/*
251 GNUNET_ATS_TEST_generate_preferences_start(&masters[0],&masters[0].partners[0],
252 GNUNET_ATS_TEST_TG_CONSTANT, 1, 1, GNUNET_TIME_UNIT_SECONDS,
253 GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_MILLISECONDS, 250),
254 GNUNET_ATS_PREFERENCE_BANDWIDTH);
255 *//*
256 GNUNET_ATS_TEST_generate_preferences_start(&masters[0],&masters[0].partners[0],
257 GNUNET_ATS_TEST_TG_LINEAR, 1, 50,
258 GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 2),
259 GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_MILLISECONDS, 250),
260 GNUNET_ATS_PREFERENCE_BANDWIDTH);
261 *//*
262 GNUNET_ATS_TEST_generate_preferences_start(&masters[0],&masters[0].partners[0],
263 GNUNET_ATS_TEST_TG_RANDOM, 1, 50,
264 GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 2),
265 GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_MILLISECONDS, 250),
266 GNUNET_ATS_PREFERENCE_BANDWIDTH);
267 *//*
268 GNUNET_ATS_TEST_generate_preferences_start(&masters[0],&masters[0].partners[0],
269 GNUNET_ATS_TEST_TG_SINUS, 10, 5,
270 GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 5),
271 GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_MILLISECONDS, 250),
272 GNUNET_ATS_PREFERENCE_BANDWIDTH);
273 */
274#if 0
275 int c_m;
276 int c_s;
277 for (c_m = 0; c_m < e->num_masters; c_m++)
278 {
279 for (c_s = 0; c_s < e->num_slaves; c_s++)
280 {
281 /* Generate maximum traffic to all peers */
282 /* Example: Generate traffic with constant 10,000 Bytes/s */
283 GNUNET_ATS_TEST_generate_traffic_start (&masters[c_m],
284 &masters[c_m].partners[c_s],
285 GNUNET_ATS_TEST_TG_CONSTANT,
286 10000,
287 GNUNET_TIME_UNIT_FOREVER_REL);
288 /* Example: Generate traffic with an increasing rate from 1000 to 2000
289 * Bytes/s with in a minute */
290 GNUNET_ATS_TEST_generate_traffic_start (&masters[c_m],
291 &masters[c_m].partners[c_s],
292 GNUNET_ATS_TEST_TG_LINEAR,
293 1000,
294 2000,
295 GNUNET_TIME_UNIT_MINUTES,
296 GNUNET_TIME_UNIT_FOREVER_REL);
297 /* Example: Generate traffic with a random rate between 1000 to 2000
298 * Bytes/s */
299 GNUNET_ATS_TEST_generate_traffic_start (&masters[c_m],
300 &masters[c_m].partners[c_s],
301 GNUNET_ATS_TEST_TG_RANDOM,
302 1000,
303 2000,
304 GNUNET_TIME_UNIT_FOREVER_REL,
305 GNUNET_TIME_UNIT_FOREVER_REL);
306 /* Example: Generate traffic with a sinus form, a base rate of
307 * 1000 Bytes/s, an amplitude of (max-base), and a period of 1 minute */
308 GNUNET_ATS_TEST_generate_traffic_start (&masters[c_m],
309 &masters[c_m].partners[c_s],
310 GNUNET_ATS_TEST_TG_SINUS,
311 1000,
312 2000,
313 GNUNET_TIME_UNIT_MINUTES,
314 GNUNET_TIME_UNIT_FOREVER_REL);
315 }
316 }
317#endif
318
319 timeout_task
320 = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_add (
321 GNUNET_TIME_UNIT_MINUTES,
322 e->max_duration),
323 &do_timeout,
324 NULL);
325 GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL);
326}
327
328
329static void
330parse_args (int argc, char *argv[])
331{
332 int c;
333
334 opt_exp_file = NULL;
335 opt_log = GNUNET_NO;
336 opt_plot = GNUNET_NO;
337
338 for (c = 0; c < argc; c++)
339 {
340 if ((c < (argc - 1)) && (0 == strcmp (argv[c], "-e")))
341 {
342 GNUNET_free (opt_exp_file);
343 opt_exp_file = GNUNET_strdup (argv[c + 1]);
344 }
345 if (0 == strcmp (argv[c], "-l"))
346 {
347 opt_log = GNUNET_YES;
348 }
349 if (0 == strcmp (argv[c], "-p"))
350 {
351 opt_plot = GNUNET_YES;
352 }
353 if (0 == strcmp (argv[c], "-v"))
354 {
355 opt_verbose = GNUNET_YES;
356 }
357 }
358}
359
360
361int
362main (int argc, char *argv[])
363{
364 GNUNET_log_setup ("gnunet-ats-sim", "INFO", NULL);
365
366 parse_args (argc, argv);
367 if (NULL == opt_exp_file)
368 {
369 fprintf (stderr, "No experiment given...\n");
370 return 1;
371 }
372
373 fprintf (stderr, "Loading experiment `%s' \n", opt_exp_file);
374 e = GNUNET_ATS_TEST_experimentation_load (opt_exp_file);
375 if (NULL == e)
376 {
377 fprintf (stderr, "Invalid experiment\n");
378 return 1;
379 }
380 if (0 == e->num_episodes)
381 {
382 fprintf (stderr, "No episodes included\n");
383 return 1;
384 }
385
386 /* Setup a topology with */
387 GNUNET_ATS_TEST_create_topology ("gnunet-ats-sim", e->cfg_file,
388 e->num_slaves,
389 e->num_masters,
390 GNUNET_NO,
391 &topology_setup_done,
392 NULL,
393 &log_request__cb);
394 GNUNET_free (opt_exp_file);
395 return 0;
396}
397
398
399/* end of file gnunet-ats-sim.c */
diff --git a/src/ats-tests/gnunet-solver-eval.c b/src/ats-tests/gnunet-solver-eval.c
deleted file mode 100644
index 7a3461bf7..000000000
--- a/src/ats-tests/gnunet-solver-eval.c
+++ /dev/null
@@ -1,1025 +0,0 @@
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2010-2013 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20/**
21 * @file ats-tests/ats-testing-experiment.c
22 * @brief ats benchmark: controlled experiment execution
23 * @author Christian Grothoff
24 * @author Matthias Wachs
25 */
26#include "platform.h"
27#include "gnunet_util_lib.h"
28#include "gnunet_ats_plugin.h"
29#include "gnunet_ats_service.h"
30#include "ats-testing.h"
31
32
33/**
34 * Experiments
35 */
36const char *
37print_op (enum OperationType op)
38{
39 switch (op)
40 {
41 case START_SEND:
42 return "START_SEND";
43
44 case STOP_SEND:
45 return "STOP_SEND";
46
47 case START_PREFERENCE:
48 return "START_PREFERENCE";
49
50 case STOP_PREFERENCE:
51 return "STOP_PREFERENCE";
52
53 default:
54 break;
55 }
56 return "";
57}
58
59
60static struct Experiment *
61create_experiment ()
62{
63 struct Experiment *e;
64
65 e = GNUNET_new (struct Experiment);
66 e->name = NULL;
67 e->num_masters = 0;
68 e->num_slaves = 0;
69 e->start = NULL;
70 e->total_duration = GNUNET_TIME_UNIT_ZERO;
71 return e;
72}
73
74
75static void
76free_experiment (struct Experiment *e)
77{
78 struct Episode *cur;
79 struct Episode *next;
80 struct GNUNET_ATS_TEST_Operation *cur_o;
81 struct GNUNET_ATS_TEST_Operation *next_o;
82
83 next = e->start;
84 for (cur = next; NULL != cur; cur = next)
85 {
86 next = cur->next;
87
88 next_o = cur->head;
89 for (cur_o = next_o; NULL != cur_o; cur_o = next_o)
90 {
91 next_o = cur_o->next;
92 GNUNET_free (cur_o);
93 }
94 GNUNET_free (cur);
95 }
96
97 GNUNET_free (e->name);
98 GNUNET_free (e->cfg_file);
99 GNUNET_free (e);
100}
101
102
103static int
104load_episode (struct Experiment *e,
105 struct Episode *cur,
106 struct GNUNET_CONFIGURATION_Handle *cfg)
107{
108 struct GNUNET_ATS_TEST_Operation *o;
109 char *sec_name;
110 char *op_name;
111 char *op;
112 char *type;
113 char *pref;
114 int op_counter = 0;
115
116 fprintf (stderr, "Parsing episode %u\n", cur->id);
117 GNUNET_asprintf (&sec_name, "episode-%u", cur->id);
118
119 while (1)
120 {
121 /* Load operation */
122 GNUNET_asprintf (&op_name, "op-%u-operation", op_counter);
123 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_string (cfg,
124 sec_name,
125 op_name, &op))
126 {
127 GNUNET_free (op_name);
128 break;
129 }
130 o = GNUNET_new (struct GNUNET_ATS_TEST_Operation);
131 /* operations = set_rate, start_send, stop_send, set_preference */
132 if (0 == strcmp (op, "start_send"))
133 {
134 o->type = START_SEND;
135 }
136 else if (0 == strcmp (op, "stop_send"))
137 {
138 o->type = STOP_SEND;
139 }
140 else if (0 == strcmp (op, "start_preference"))
141 {
142 o->type = START_PREFERENCE;
143 }
144 else if (0 == strcmp (op, "stop_preference"))
145 {
146 o->type = STOP_PREFERENCE;
147 }
148 else
149 {
150 fprintf (stderr, "Invalid operation %u `%s' in episode %u\n",
151 op_counter, op, cur->id);
152 GNUNET_free (op);
153 GNUNET_free (op_name);
154 GNUNET_free (sec_name);
155 GNUNET_free (o);
156 return GNUNET_SYSERR;
157 }
158 GNUNET_free (op_name);
159
160 /* Get source */
161 GNUNET_asprintf (&op_name, "op-%u-src", op_counter);
162 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_number (cfg,
163 sec_name,
164 op_name,
165 &o->src_id))
166 {
167 fprintf (stderr, "Missing src in operation %u `%s' in episode %u\n",
168 op_counter, op, cur->id);
169 GNUNET_free (op);
170 GNUNET_free (op_name);
171 GNUNET_free (sec_name);
172 GNUNET_free (o);
173 return GNUNET_SYSERR;
174 }
175 if (o->src_id > (e->num_masters - 1))
176 {
177 fprintf (stderr, "Invalid src %llu in operation %u `%s' in episode %u\n",
178 o->src_id, op_counter, op, cur->id);
179 GNUNET_free (op);
180 GNUNET_free (op_name);
181 GNUNET_free (sec_name);
182 GNUNET_free (o);
183 return GNUNET_SYSERR;
184 }
185 GNUNET_free (op_name);
186
187 /* Get destination */
188 GNUNET_asprintf (&op_name, "op-%u-dest", op_counter);
189 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_number (cfg,
190 sec_name,
191 op_name,
192 &o->dest_id))
193 {
194 fprintf (stderr, "Missing src in operation %u `%s' in episode %u\n",
195 op_counter, op, cur->id);
196 GNUNET_free (op);
197 GNUNET_free (op_name);
198 GNUNET_free (sec_name);
199 GNUNET_free (o);
200 return GNUNET_SYSERR;
201 }
202 if (o->dest_id > (e->num_slaves - 1))
203 {
204 fprintf (stderr,
205 "Invalid destination %llu in operation %u `%s' in episode %u\n",
206 o->dest_id,
207 op_counter,
208 op,
209 cur->id);
210 GNUNET_free (op);
211 GNUNET_free (op_name);
212 GNUNET_free (sec_name);
213 GNUNET_free (o);
214 return GNUNET_SYSERR;
215 }
216 GNUNET_free (op_name);
217
218 GNUNET_asprintf (&op_name, "op-%u-type", op_counter);
219 if ((GNUNET_SYSERR !=
220 GNUNET_CONFIGURATION_get_value_string (cfg,
221 sec_name,
222 op_name,
223 &type)) &&
224 (STOP_SEND != o->type) &&
225 (STOP_PREFERENCE != o->type))
226 {
227 /* Load arguments for set_rate, start_send, set_preference */
228 if (0 == strcmp (type, "constant"))
229 {
230 o->gen_type = GNUNET_ATS_TEST_TG_CONSTANT;
231 }
232 else if (0 == strcmp (type, "linear"))
233 {
234 o->gen_type = GNUNET_ATS_TEST_TG_LINEAR;
235 }
236 else if (0 == strcmp (type, "sinus"))
237 {
238 o->gen_type = GNUNET_ATS_TEST_TG_SINUS;
239 }
240 else if (0 == strcmp (type, "random"))
241 {
242 o->gen_type = GNUNET_ATS_TEST_TG_RANDOM;
243 }
244 else
245 {
246 fprintf (stderr, "Invalid type %u `%s' in episode %u\n",
247 op_counter, op, cur->id);
248 GNUNET_free (type);
249 GNUNET_free (op);
250 GNUNET_free (op_name);
251 GNUNET_free (sec_name);
252 GNUNET_free (o);
253 return GNUNET_SYSERR;
254 }
255 GNUNET_free (op_name);
256
257 /* Get base rate */
258 GNUNET_asprintf (&op_name, "op-%u-base-rate", op_counter);
259 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_number (cfg,
260 sec_name,
261 op_name,
262 &o->base_rate))
263 {
264 fprintf (stderr,
265 "Missing base rate in operation %u `%s' in episode %u\n",
266 op_counter, op, cur->id);
267 GNUNET_free (type);
268 GNUNET_free (op);
269 GNUNET_free (op_name);
270 GNUNET_free (sec_name);
271 GNUNET_free (o);
272 return GNUNET_SYSERR;
273 }
274 GNUNET_free (op_name);
275
276 /* Get max rate */
277 GNUNET_asprintf (&op_name, "op-%u-max-rate", op_counter);
278 if (GNUNET_SYSERR ==
279 GNUNET_CONFIGURATION_get_value_number (cfg,
280 sec_name,
281 op_name,
282 &o->max_rate))
283 {
284 if ((GNUNET_ATS_TEST_TG_LINEAR == o->gen_type) ||
285 (GNUNET_ATS_TEST_TG_RANDOM == o->gen_type) ||
286 (GNUNET_ATS_TEST_TG_SINUS == o->gen_type))
287 {
288 fprintf (stderr,
289 "Missing max rate in operation %u `%s' in episode %u\n",
290 op_counter, op, cur->id);
291 GNUNET_free (type);
292 GNUNET_free (op_name);
293 GNUNET_free (op);
294 GNUNET_free (sec_name);
295 GNUNET_free (o);
296 return GNUNET_SYSERR;
297 }
298 }
299 GNUNET_free (op_name);
300
301 /* Get period */
302 GNUNET_asprintf (&op_name, "op-%u-period", op_counter);
303 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_time (cfg,
304 sec_name,
305 op_name,
306 &o->period))
307 {
308 o->period = cur->duration;
309 }
310 GNUNET_free (op_name);
311
312 if (START_PREFERENCE == o->type)
313 {
314 /* Get frequency */
315 GNUNET_asprintf (&op_name, "op-%u-frequency", op_counter);
316 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_time (cfg,
317 sec_name,
318 op_name,
319 &o->frequency))
320 {
321 fprintf (stderr,
322 "Missing frequency in operation %u `%s' in episode %u\n",
323 op_counter, op, cur->id);
324 GNUNET_free (type);
325 GNUNET_free (op_name);
326 GNUNET_free (op);
327 GNUNET_free (sec_name);
328 GNUNET_free (o);
329 return GNUNET_SYSERR;
330 }
331 GNUNET_free (op_name);
332
333 /* Get preference */
334 GNUNET_asprintf (&op_name, "op-%u-pref", op_counter);
335 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_string (cfg,
336 sec_name,
337 op_name,
338 &pref))
339 {
340 fprintf (stderr,
341 "Missing preference in operation %u `%s' in episode %u\n",
342 op_counter, op, cur->id);
343 GNUNET_free (type);
344 GNUNET_free (op_name);
345 GNUNET_free (op);
346 GNUNET_free (sec_name);
347 GNUNET_free (pref);
348 GNUNET_free (o);
349 return GNUNET_SYSERR;
350 }
351
352 if (0 == strcmp (pref, "bandwidth"))
353 o->pref_type = GNUNET_ATS_PREFERENCE_BANDWIDTH;
354 else if (0 == strcmp (pref, "latency"))
355 o->pref_type = GNUNET_ATS_PREFERENCE_LATENCY;
356 else
357 {
358 fprintf (stderr,
359 "Invalid preference in operation %u `%s' in episode %u\n",
360 op_counter,
361 op,
362 cur->id);
363 GNUNET_free (type);
364 GNUNET_free (op_name);
365 GNUNET_free (op);
366 GNUNET_free (sec_name);
367 GNUNET_free (pref);
368 GNUNET_free (o);
369 return GNUNET_SYSERR;
370 }
371 GNUNET_free (pref);
372 GNUNET_free (op_name);
373 }
374 }
375
376 /* Safety checks */
377 if ((GNUNET_ATS_TEST_TG_LINEAR == o->gen_type) ||
378 (GNUNET_ATS_TEST_TG_SINUS == o->gen_type))
379 {
380 if ((o->max_rate - o->base_rate) > o->base_rate)
381 {
382 /* This will cause an underflow */
383 GNUNET_break (0);
384 }
385 fprintf (stderr,
386 "Selected max rate and base rate cannot be used for desired traffic form!\n");
387 }
388
389 if ((START_SEND == o->type) || (START_PREFERENCE == o->type))
390 fprintf (stderr,
391 "Found operation %u in episode %u: %s [%llu]->[%llu] == %s, %llu -> %llu in %s\n",
392 op_counter, cur->id, print_op (o->type), o->src_id,
393 o->dest_id, (NULL != type) ? type : "",
394 o->base_rate, o->max_rate,
395 GNUNET_STRINGS_relative_time_to_string (o->period, GNUNET_YES));
396 else
397 fprintf (stderr, "Found operation %u in episode %u: %s [%llu]->[%llu]\n",
398 op_counter, cur->id, print_op (o->type), o->src_id, o->dest_id);
399
400 GNUNET_free (type);
401 GNUNET_free (op);
402
403 GNUNET_CONTAINER_DLL_insert (cur->head, cur->tail, o);
404 op_counter++;
405 }
406 GNUNET_free (sec_name);
407
408 return GNUNET_OK;
409}
410
411
412static int
413load_episodes (struct Experiment *e, struct GNUNET_CONFIGURATION_Handle *cfg)
414{
415 int e_counter = 0;
416 char *sec_name;
417 struct GNUNET_TIME_Relative e_duration;
418 struct Episode *cur;
419 struct Episode *last;
420
421 e_counter = 0;
422 last = NULL;
423 while (1)
424 {
425 GNUNET_asprintf (&sec_name, "episode-%u", e_counter);
426 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_time (cfg,
427 sec_name,
428 "duration",
429 &e_duration))
430 {
431 GNUNET_free (sec_name);
432 break;
433 }
434
435 cur = GNUNET_new (struct Episode);
436 cur->duration = e_duration;
437 cur->id = e_counter;
438
439 if (GNUNET_OK != load_episode (e, cur, cfg))
440 {
441 GNUNET_free (sec_name);
442 GNUNET_free (cur);
443 return GNUNET_SYSERR;
444 }
445
446 fprintf (stderr, "Found episode %u with duration %s \n",
447 e_counter,
448 GNUNET_STRINGS_relative_time_to_string (cur->duration,
449 GNUNET_YES));
450
451 /* Update experiment */
452 e->num_episodes++;
453 e->total_duration = GNUNET_TIME_relative_add (e->total_duration,
454 cur->duration);
455 /* Put in linked list */
456 if (NULL == last)
457 e->start = cur;
458 else
459 last->next = cur;
460
461 GNUNET_free (sec_name);
462 e_counter++;
463 last = cur;
464 }
465 return e_counter;
466}
467
468
469static void
470timeout_experiment (void *cls)
471{
472 struct Experiment *e = cls;
473
474 e->experiment_timeout_task = NULL;
475 fprintf (stderr, "Experiment timeout!\n");
476
477 if (NULL != e->episode_timeout_task)
478 {
479 GNUNET_SCHEDULER_cancel (e->episode_timeout_task);
480 e->episode_timeout_task = NULL;
481 }
482
483 e->e_done_cb (e, GNUNET_TIME_absolute_get_duration (e->start_time),
484 GNUNET_SYSERR);
485}
486
487
488static void
489enforce_start_send (struct GNUNET_ATS_TEST_Operation *op)
490{
491 /*
492 struct BenchmarkPeer *peer;
493 struct BenchmarkPartner *partner;
494
495 peer = GNUNET_ATS_TEST_get_peer (op->src_id);
496 if (NULL == peer)
497 {
498 GNUNET_break (0);
499 return;
500 }
501
502 partner = GNUNET_ATS_TEST_get_partner (op->src_id, op->dest_id);
503 if (NULL == partner)
504 {
505 GNUNET_break (0);
506 return;
507 }
508
509 fprintf (stderr, "Found master %llu slave %llu\n",op->src_id, op->dest_id);
510
511 if (NULL != partner->tg)
512 {
513 fprintf (stderr, "Stopping traffic between master %llu slave %llu\n",op->src_id, op->dest_id);
514 GNUNET_ATS_TEST_generate_traffic_stop(partner->tg);
515 partner->tg = NULL;
516 }
517
518 partner->tg = GNUNET_ATS_TEST_generate_traffic_start(peer, partner,
519 op->tg_type, op->base_rate, op->max_rate, op->period,
520 GNUNET_TIME_UNIT_FOREVER_REL);
521 */}
522
523
524static void
525enforce_stop_send (struct GNUNET_ATS_TEST_Operation *op)
526{
527 /*
528 struct BenchmarkPartner *p;
529 p = GNUNET_ATS_TEST_get_partner (op->src_id, op->dest_id);
530 if (NULL == p)
531 {
532 GNUNET_break (0);
533 return;
534 }
535
536 fprintf (stderr, "Found master %llu slave %llu\n",op->src_id, op->dest_id);
537
538 if (NULL != p->tg)
539 {
540 fprintf (stderr, "Stopping traffic between master %llu slave %llu\n",
541 op->src_id, op->dest_id);
542 GNUNET_ATS_TEST_generate_traffic_stop(p->tg);
543 p->tg = NULL;
544 }
545 */}
546
547
548static void
549enforce_start_preference (struct GNUNET_ATS_TEST_Operation *op)
550{
551 /*
552 struct BenchmarkPeer *peer;
553 struct BenchmarkPartner *partner;
554
555 peer = GNUNET_ATS_TEST_get_peer (op->src_id);
556 if (NULL == peer)
557 {
558 GNUNET_break (0);
559 return;
560 }
561
562 partner = GNUNET_ATS_TEST_get_partner (op->src_id, op->dest_id);
563 if (NULL == partner)
564 {
565 GNUNET_break (0);
566 return;
567 }
568
569 fprintf (stderr, "Found master %llu slave %llu\n",op->src_id, op->dest_id);
570
571 if (NULL != partner->pg)
572 {
573 fprintf (stderr, "Stopping traffic between master %llu slave %llu\n",
574 op->src_id, op->dest_id);
575 GNUNET_ATS_TEST_generate_preferences_stop(partner->pg);
576 partner->pg = NULL;
577 }
578
579 partner->pg = GNUNET_ATS_TEST_generate_preferences_start(peer, partner,
580 op->tg_type, op->base_rate, op->max_rate, op->period, op->frequency,
581 op->pref_type);
582 */}
583
584
585static void
586enforce_stop_preference (struct GNUNET_ATS_TEST_Operation *op)
587{
588 /*
589 struct BenchmarkPartner *p;
590 p = GNUNET_ATS_TEST_get_partner (op->src_id, op->dest_id);
591 if (NULL == p)
592 {
593 GNUNET_break (0);
594 return;
595 }
596
597 fprintf (stderr, "Found master %llu slave %llu\n",op->src_id, op->dest_id);
598
599 if (NULL != p->pg)
600 {
601 fprintf (stderr, "Stopping preference between master %llu slave %llu\n",
602 op->src_id, op->dest_id);
603 GNUNET_ATS_TEST_generate_preferences_stop (p->pg);
604 p->pg = NULL;
605 }
606 */}
607
608
609static void
610enforce_episode (struct Episode *ep)
611{
612 struct GNUNET_ATS_TEST_Operation *cur;
613
614 for (cur = ep->head; NULL != cur; cur = cur->next)
615 {
616 fprintf (stderr, "Enforcing operation: %s [%llu]->[%llu] == %llu\n",
617 print_op (cur->type), cur->src_id, cur->dest_id, cur->base_rate);
618 switch (cur->type)
619 {
620 case START_SEND:
621 enforce_start_send (cur);
622 break;
623
624 case STOP_SEND:
625 enforce_stop_send (cur);
626 break;
627
628 case START_PREFERENCE:
629 enforce_start_preference (cur);
630 break;
631
632 case STOP_PREFERENCE:
633 enforce_stop_preference (cur);
634 break;
635
636 default:
637 break;
638 }
639 }
640}
641
642
643static void
644timeout_episode (void *cls)
645{
646 struct Experiment *e = cls;
647
648 e->episode_timeout_task = NULL;
649 if (NULL != e->ep_done_cb)
650 e->ep_done_cb (e->cur);
651
652 /* Scheduling next */
653 e->cur = e->cur->next;
654 if (NULL == e->cur)
655 {
656 /* done */
657 fprintf (stderr, "Last episode done!\n");
658 if (NULL != e->experiment_timeout_task)
659 {
660 GNUNET_SCHEDULER_cancel (e->experiment_timeout_task);
661 e->experiment_timeout_task = NULL;
662 }
663 e->e_done_cb (e, GNUNET_TIME_absolute_get_duration (e->start_time),
664 GNUNET_OK);
665 return;
666 }
667
668 fprintf (stderr, "Running episode %u with timeout %s\n",
669 e->cur->id,
670 GNUNET_STRINGS_relative_time_to_string (e->cur->duration,
671 GNUNET_YES));
672 enforce_episode (e->cur);
673
674 e->episode_timeout_task = GNUNET_SCHEDULER_add_delayed (e->cur->duration,
675 &timeout_episode, e);
676}
677
678
679void
680GNUNET_ATS_solvers_experimentation_run (struct Experiment *e,
681 GNUNET_ATS_TESTING_EpisodeDoneCallback
682 ep_done_cb,
683 GNUNET_ATS_TESTING_ExperimentDoneCallback
684 e_done_cb)
685{
686 fprintf (stderr, "Running experiment `%s' with timeout %s\n", e->name,
687 GNUNET_STRINGS_relative_time_to_string (e->max_duration,
688 GNUNET_YES));
689 e->e_done_cb = e_done_cb;
690 e->ep_done_cb = ep_done_cb;
691 e->start_time = GNUNET_TIME_absolute_get ();
692
693 /* Start total time out */
694 e->experiment_timeout_task = GNUNET_SCHEDULER_add_delayed (e->max_duration,
695 &timeout_experiment,
696 e);
697
698 /* Start */
699 e->cur = e->start;
700 fprintf (stderr, "Running episode %u with timeout %s\n",
701 e->cur->id,
702 GNUNET_STRINGS_relative_time_to_string (e->cur->duration,
703 GNUNET_YES));
704 enforce_episode (e->cur);
705 e->episode_timeout_task = GNUNET_SCHEDULER_add_delayed (e->cur->duration,
706 &timeout_episode, e);
707}
708
709
710struct Experiment *
711GNUNET_ATS_solvers_experimentation_load (char *filename)
712{
713 struct Experiment *e;
714 struct GNUNET_CONFIGURATION_Handle *cfg;
715
716 e = NULL;
717
718 cfg = GNUNET_CONFIGURATION_create ();
719 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_load (cfg, filename))
720 {
721 fprintf (stderr, "Failed to load `%s'\n", filename);
722 GNUNET_CONFIGURATION_destroy (cfg);
723 return NULL;
724 }
725
726 e = create_experiment ();
727
728 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_string (cfg, "experiment",
729 "name", &e->name))
730 {
731 fprintf (stderr, "Invalid %s", "name");
732 free_experiment (e);
733 return NULL;
734 }
735 else
736 fprintf (stderr, "Experiment name: `%s'\n", e->name);
737
738 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_filename (cfg,
739 "experiment",
740 "cfg_file",
741 &e->cfg_file))
742 {
743 fprintf (stderr, "Invalid %s", "cfg_file");
744 free_experiment (e);
745 return NULL;
746 }
747 else
748 fprintf (stderr, "Experiment name: `%s'\n", e->cfg_file);
749
750 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_number (cfg, "experiment",
751 "masters",
752 &e->num_masters))
753 {
754 fprintf (stderr, "Invalid %s", "masters");
755 free_experiment (e);
756 return NULL;
757 }
758 else
759 fprintf (stderr, "Experiment masters: `%llu'\n",
760 e->num_masters);
761
762 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_number (cfg, "experiment",
763 "slaves",
764 &e->num_slaves))
765 {
766 fprintf (stderr, "Invalid %s", "slaves");
767 free_experiment (e);
768 return NULL;
769 }
770 else
771 fprintf (stderr, "Experiment slaves: `%llu'\n",
772 e->num_slaves);
773
774 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_time (cfg, "experiment",
775 "log_freq",
776 &e->log_freq))
777 {
778 fprintf (stderr, "Invalid %s", "log_freq");
779 free_experiment (e);
780 return NULL;
781 }
782 else
783 fprintf (stderr, "Experiment logging frequency: `%s'\n",
784 GNUNET_STRINGS_relative_time_to_string (e->log_freq, GNUNET_YES));
785
786 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_time (cfg, "experiment",
787 "max_duration",
788 &e->max_duration))
789 {
790 fprintf (stderr, "Invalid %s", "max_duration");
791 free_experiment (e);
792 return NULL;
793 }
794 else
795 fprintf (stderr, "Experiment duration: `%s'\n",
796 GNUNET_STRINGS_relative_time_to_string (e->max_duration,
797 GNUNET_YES));
798
799 load_episodes (e, cfg);
800 fprintf (stderr, "Loaded %u episodes with total duration %s\n",
801 e->num_episodes,
802 GNUNET_STRINGS_relative_time_to_string (e->total_duration,
803 GNUNET_YES));
804
805 GNUNET_CONFIGURATION_destroy (cfg);
806 return e;
807}
808
809
810void
811GNUNET_ATS_solvers_experimentation_stop (struct Experiment *e)
812{
813 if (NULL != e->experiment_timeout_task)
814 {
815 GNUNET_SCHEDULER_cancel (e->experiment_timeout_task);
816 e->experiment_timeout_task = NULL;
817 }
818 if (NULL != e->episode_timeout_task)
819 {
820 GNUNET_SCHEDULER_cancel (e->episode_timeout_task);
821 e->episode_timeout_task = NULL;
822 }
823 free_experiment (e);
824}
825
826
827/**
828 * Solver
829 */
830
831struct GNUNET_ATS_TESTING_SolverHandle
832{
833 char *plugin;
834 struct GNUNET_ATS_PluginEnvironment env;
835 void *solver;
836};
837
838enum GNUNET_ATS_Solvers
839{
840 GNUNET_ATS_SOLVER_PROPORTIONAL,
841 GNUNET_ATS_SOLVER_MLP,
842 GNUNET_ATS_SOLVER_RIL,
843};
844
845void
846GNUNET_ATS_solvers_solver_stop (struct GNUNET_ATS_TESTING_SolverHandle *sh)
847{
848 GNUNET_PLUGIN_unload (sh->plugin, sh->solver);
849 GNUNET_free (sh->plugin);
850 GNUNET_free (sh);
851}
852
853
854struct GNUNET_ATS_TESTING_SolverHandle *
855GNUNET_ATS_solvers_solver_start (enum GNUNET_ATS_Solvers type)
856{
857 struct GNUNET_ATS_TESTING_SolverHandle *sh;
858 char *solver_str;
859
860 switch (type)
861 {
862 case GNUNET_ATS_SOLVER_PROPORTIONAL:
863 solver_str = "proportional";
864 break;
865
866 case GNUNET_ATS_SOLVER_MLP:
867 solver_str = "mlp";
868 break;
869
870 case GNUNET_ATS_SOLVER_RIL:
871 solver_str = "ril";
872 break;
873
874 default:
875 GNUNET_break (0);
876 return NULL;
877 break;
878 }
879
880 sh = GNUNET_new (struct GNUNET_ATS_TESTING_SolverHandle);
881 GNUNET_asprintf (&sh->plugin, "libgnunet_plugin_ats_%s", solver_str);
882 // sh->solver = GNUNET_PLUGIN_load (sh->plugin, &sh->env);
883 if (NULL == sh->solver)
884 {
885 fprintf (stderr, "Failed to load solver `%s'\n", sh->plugin);
886 exit (1);
887 }
888
889 return sh;
890}
891
892
893static struct Experiment *e;
894
895static struct GNUNET_ATS_TESTING_SolverHandle *sh;
896
897/**
898 * cmd option -e: experiment file
899 */
900static char *opt_exp_file;
901
902static char *opt_solver;
903
904/**
905 * cmd option -l: enable logging
906 */
907static int opt_log;
908
909/**
910 * cmd option -p: enable plots
911 */
912static int opt_plot;
913
914/**
915 * cmd option -v: verbose logs
916 */
917static int opt_verbose;
918
919static void
920run (void *cls, char *const *args, const char *cfgfile,
921 const struct GNUNET_CONFIGURATION_Handle *cfg)
922{
923 enum GNUNET_ATS_Solvers solver;
924
925 if (NULL == opt_exp_file)
926 {
927 fprintf (stderr, "No experiment given ...\n");
928 exit (1);
929 }
930
931 if (NULL == opt_solver)
932 {
933 fprintf (stderr, "No solver given ...\n");
934 exit (1);
935 }
936
937 if (0 == strcmp (opt_solver, "mlp"))
938 {
939 solver = GNUNET_ATS_SOLVER_MLP;
940 }
941 else if (0 == strcmp (opt_solver, "proportional"))
942 {
943 solver = GNUNET_ATS_SOLVER_PROPORTIONAL;
944 }
945 else if (0 == strcmp (opt_solver, "ril"))
946 {
947 solver = GNUNET_ATS_SOLVER_RIL;
948 }
949 else
950 {
951 fprintf (stderr, "No solver given ...");
952 return;
953 }
954
955 /* load experiment */
956 e = GNUNET_ATS_solvers_experimentation_load (opt_exp_file);
957 if (NULL == e)
958 {
959 fprintf (stderr, "Failed to load experiment ...\n");
960 return;
961 }
962
963 /* load solver */
964 sh = GNUNET_ATS_solvers_solver_start (solver);
965 if (NULL == sh)
966 {
967 fprintf (stderr, "Failed to start solver ...\n");
968 return;
969 }
970
971 /* start logging */
972
973 /* run experiment */
974
975 /* WAIT */
976}
977
978
979/**
980 * Main function of the benchmark
981 *
982 * @param argc argument count
983 * @param argv argument values
984 */
985int
986main (int argc, char *argv[])
987{
988 opt_exp_file = NULL;
989 opt_solver = NULL;
990 opt_log = GNUNET_NO;
991 opt_plot = GNUNET_NO;
992
993 struct GNUNET_GETOPT_CommandLineOption options[] = {
994 GNUNET_GETOPT_option_string ('s',
995 "solver",
996 NULL,
997 gettext_noop ("solver to use"),
998 &opt_solver),
999
1000 GNUNET_GETOPT_option_string ('e',
1001 "experiment",
1002 NULL,
1003 gettext_noop ("experiment to use"),
1004 &opt_exp_file),
1005
1006 GNUNET_GETOPT_option_flag ('e',
1007 "experiment",
1008 gettext_noop ("experiment to use"),
1009 &opt_verbose),
1010 GNUNET_GETOPT_OPTION_END
1011 };
1012
1013 if (GNUNET_OK !=
1014 GNUNET_PROGRAM_run (argc,
1015 argv, argv[0],
1016 NULL,
1017 options,
1018 &run, argv[0]))
1019 return 1;
1020
1021 return 0;
1022}
1023
1024
1025/* end of file gnunet-solver-eval.c*/
diff --git a/src/ats-tests/gnunet_ats_sim_default.conf b/src/ats-tests/gnunet_ats_sim_default.conf
deleted file mode 100644
index a838306c3..000000000
--- a/src/ats-tests/gnunet_ats_sim_default.conf
+++ /dev/null
@@ -1,6 +0,0 @@
1@INLINE@ template_perf_ats.conf
2[transport]
3plugins = unix
4
5[ats]
6MODE = proportional
diff --git a/src/ats-tests/perf_ats.c b/src/ats-tests/perf_ats.c
deleted file mode 100644
index 64756b8aa..000000000
--- a/src/ats-tests/perf_ats.c
+++ /dev/null
@@ -1,601 +0,0 @@
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2010-2013, 2016 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20/**
21 * @file ats/perf_ats.c
22 * @brief ats benchmark: start peers and modify preferences, monitor change over time
23 * @author Christian Grothoff
24 * @author Matthias Wachs
25 */
26#include "platform.h"
27#include "gnunet_util_lib.h"
28#include "gnunet_testbed_service.h"
29#include "gnunet_ats_service.h"
30#include "gnunet_core_service.h"
31#include "ats-testing.h"
32
33
34#define TEST_ATS_PREFRENCE_FREQUENCY GNUNET_TIME_relative_multiply ( \
35 GNUNET_TIME_UNIT_SECONDS, 1)
36#define TEST_ATS_PREFRENCE_START 1.0
37#define TEST_ATS_PREFRENCE_DELTA 1.0
38
39#define TEST_MESSAGE_FREQUENCY GNUNET_TIME_relative_multiply ( \
40 GNUNET_TIME_UNIT_SECONDS, 1)
41
42#define TEST_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, \
43 120)
44#define BENCHMARK_DURATION GNUNET_TIME_relative_multiply ( \
45 GNUNET_TIME_UNIT_SECONDS, 10)
46#define LOGGING_FREQUENCY GNUNET_TIME_relative_multiply ( \
47 GNUNET_TIME_UNIT_MILLISECONDS, 500)
48#define TESTNAME_PREFIX "perf_ats_"
49#define DEFAULT_SLAVES_NUM 2
50#define DEFAULT_MASTERS_NUM 1
51
52/**
53 * timeout task
54 */
55static struct GNUNET_SCHEDULER_Task *timeout_task;
56
57/**
58 * Progress task
59 */
60static struct GNUNET_SCHEDULER_Task *progress_task;
61
62/**
63 * Test result
64 */
65static int result;
66
67/**
68 * Test result logging
69 */
70static int logging;
71
72/**
73 * Test core (#GNUNET_YES) or transport (#GNUNET_NO)
74 */
75static int test_core;
76
77/**
78 * Solver string
79 */
80static char *solver;
81
82/**
83 * Preference string
84 */
85static char *testname;
86
87/**
88 * Preference string
89 */
90static char *pref_str;
91
92/**
93 * ATS preference value
94 */
95static int pref_val;
96
97/**
98 * Benchmark duration
99 */
100static struct GNUNET_TIME_Relative perf_duration;
101
102/**
103 * Logging frequency
104 */
105static struct GNUNET_TIME_Relative log_frequency;
106
107/**
108 * Number master peers
109 */
110static unsigned int num_masters;
111
112/**
113 * Array of master peers
114 */
115static struct BenchmarkPeer *mps;
116
117/**
118 * Number slave peers
119 */
120static unsigned int num_slaves;
121
122/**
123 * Array of master peers
124 */
125static struct BenchmarkPeer *sps;
126
127static struct LoggingHandle *l;
128
129
130static void
131evaluate ()
132{
133 int c_m;
134 int c_s;
135 unsigned int duration;
136 struct BenchmarkPeer *mp;
137 struct BenchmarkPartner *p;
138
139 unsigned int kb_sent_sec;
140 double kb_sent_percent;
141 unsigned int kb_recv_sec;
142 double kb_recv_percent;
143 unsigned int rtt;
144
145 duration = 1 + (perf_duration.rel_value_us / (1000 * 1000));
146 for (c_m = 0; c_m < num_masters; c_m++)
147 {
148 mp = &mps[c_m];
149 fprintf (stderr,
150 "Master [%u]: sent: %u KiB in %u sec. = %u KiB/s, received: %u KiB in %u sec. = %u KiB/s\n",
151 mp->no, mp->total_bytes_sent / 1024, duration,
152 (mp->total_bytes_sent / 1024) / duration,
153 mp->total_bytes_received / 1024, duration,
154 (mp->total_bytes_received / 1024) / duration);
155
156 for (c_s = 0; c_s < num_slaves; c_s++)
157 {
158 p = &mp->partners[c_s];
159 kb_sent_sec = 0;
160 kb_recv_sec = 0;
161 kb_sent_percent = 0.0;
162 kb_recv_percent = 0.0;
163 rtt = 0;
164
165 if (duration > 0)
166 {
167 kb_sent_sec = (p->bytes_sent / 1024) / duration;
168 kb_recv_sec = (p->bytes_received / 1024) / duration;
169 }
170
171 if (mp->total_bytes_sent > 0)
172 kb_sent_percent = ((double) p->bytes_sent * 100) / mp->total_bytes_sent;
173 if (mp->total_bytes_received > 0)
174 kb_recv_percent = ((double) p->bytes_received * 100)
175 / mp->total_bytes_received;
176 if (1000 * p->messages_sent > 0)
177 rtt = p->total_app_rtt / (1000 * p->messages_sent);
178 fprintf (stderr,
179 "%c Master [%u] -> Slave [%u]: sent %u KiB/s (%.2f %%), received %u KiB/s (%.2f %%)\n",
180 (mp->pref_partner == p->dest) ? '*' : ' ',
181 mp->no, p->dest->no,
182 kb_sent_sec, kb_sent_percent,
183 kb_recv_sec, kb_recv_percent);
184 fprintf (stderr,
185 "%c Master [%u] -> Slave [%u]: Average application layer RTT: %u ms\n",
186 (mp->pref_partner == p->dest) ? '*' : ' ',
187 mp->no, p->dest->no, rtt);
188 }
189 }
190}
191
192
193/**
194 * Shutdown nicely
195 *
196 * @param cls NULL
197 */
198static void
199do_shutdown (void *cls)
200{
201 if (GNUNET_YES == logging)
202 GNUNET_ATS_TEST_logging_clean_up (l);
203 if (NULL != timeout_task)
204 {
205 GNUNET_SCHEDULER_cancel (timeout_task);
206 timeout_task = NULL;
207 }
208 if (NULL != progress_task)
209 {
210 fprintf (stderr, "0\n");
211 GNUNET_SCHEDULER_cancel (progress_task);
212 progress_task = NULL;
213 }
214 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
215 "Benchmarking done\n");
216 GNUNET_ATS_TEST_shutdown_topology ();
217}
218
219
220/**
221 * Shutdown nicely
222 *
223 * @param cls NULL
224 */
225static void
226do_timeout (void *cls)
227{
228 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
229 "Terminating with timeout\n");
230 timeout_task = NULL;
231 evaluate ();
232 GNUNET_SCHEDULER_shutdown ();
233}
234
235
236static void
237print_progress (void *cls)
238{
239 static int calls;
240
241 progress_task = NULL;
242 fprintf (stderr,
243 "%llu..",
244 (long long unsigned) perf_duration.rel_value_us / (1000 * 1000)
245 - calls);
246 calls++;
247
248 progress_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
249 &print_progress,
250 NULL);
251}
252
253
254static void
255ats_pref_task (void *cls)
256{
257 struct BenchmarkPeer *me = cls;
258
259 me->ats_task = NULL;
260
261 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
262 " Master [%u] set preference for slave [%u] to %f\n",
263 me->no, me->pref_partner->no, me->pref_value);
264 GNUNET_ATS_performance_change_preference (me->ats_perf_handle,
265 &me->pref_partner->id,
266 pref_val, me->pref_value,
267 GNUNET_ATS_PREFERENCE_END);
268 me->pref_value += TEST_ATS_PREFRENCE_DELTA;
269 me->ats_task = GNUNET_SCHEDULER_add_delayed (TEST_ATS_PREFRENCE_FREQUENCY,
270 &ats_pref_task, cls);
271}
272
273
274static void
275start_benchmark (void *cls)
276{
277 int c_m;
278 int c_s;
279
280 progress_task = GNUNET_SCHEDULER_add_now (&print_progress,
281 NULL);
282
283 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
284 "Topology connected, start benchmarking...\n");
285
286 /* Start sending test messages */
287 for (c_m = 0; c_m < num_masters; c_m++)
288 {
289 for (c_s = 0; c_s < num_slaves; c_s++)
290 {
291 GNUNET_ATS_TEST_generate_traffic_start (&mps[c_m],
292 &mps[c_m].partners[c_s],
293 GNUNET_ATS_TEST_TG_LINEAR,
294 UINT32_MAX,
295 UINT32_MAX,
296 GNUNET_TIME_UNIT_MINUTES,
297 GNUNET_TIME_UNIT_FOREVER_REL);
298 }
299 if (pref_val != GNUNET_ATS_PREFERENCE_END)
300 mps[c_m].ats_task = GNUNET_SCHEDULER_add_now (&ats_pref_task,
301 &mps[c_m]);
302 }
303
304 if (GNUNET_YES == logging)
305 l = GNUNET_ATS_TEST_logging_start (log_frequency,
306 testname, mps,
307 num_masters, num_slaves,
308 GNUNET_NO);
309}
310
311
312static void
313do_benchmark (void *cls,
314 struct BenchmarkPeer *masters,
315 struct BenchmarkPeer *slaves)
316{
317 mps = masters;
318 sps = slaves;
319 GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
320 NULL);
321 timeout_task = GNUNET_SCHEDULER_add_delayed (perf_duration,
322 &do_timeout,
323 NULL);
324 progress_task = GNUNET_SCHEDULER_add_now (&start_benchmark,
325 NULL);
326}
327
328
329static struct BenchmarkPartner *
330find_partner (struct BenchmarkPeer *me,
331 const struct GNUNET_PeerIdentity *peer)
332{
333 int c_m;
334
335 GNUNET_assert (NULL != me);
336 GNUNET_assert (NULL != peer);
337
338 for (c_m = 0; c_m < me->num_partners; c_m++)
339 {
340 /* Find a partner with other as destination */
341 if (0 == GNUNET_memcmp (peer, &me->partners[c_m].dest->id))
342 {
343 return &me->partners[c_m];
344 }
345 }
346 return NULL;
347}
348
349
350static void
351log_request_cb (void *cls,
352 const struct GNUNET_HELLO_Address *address,
353 int address_active,
354 struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out,
355 struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in,
356 const struct GNUNET_ATS_Properties *ats)
357{
358 struct BenchmarkPeer *me = cls;
359 struct BenchmarkPartner *p;
360 char *peer_id;
361
362 p = find_partner (me, &address->peer);
363 if (NULL == p)
364 {
365 /* This is not one of my partners
366 * Will happen since the peers will connect to each other due to gossiping
367 */
368 return;
369 }
370 peer_id = GNUNET_strdup (GNUNET_i2s (&me->id));
371
372 if ((p->bandwidth_in != ntohl (bandwidth_in.value__)) ||
373 (p->bandwidth_out != ntohl (bandwidth_out.value__)))
374 p->bandwidth_in = ntohl (bandwidth_in.value__);
375 p->bandwidth_out = ntohl (bandwidth_out.value__);
376
377 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
378 "%s [%u] received ATS information for peers `%s'\n",
379 (GNUNET_YES == p->me->master) ? "Master" : "Slave",
380 p->me->no,
381 GNUNET_i2s (&p->dest->id));
382
383 GNUNET_free (peer_id);
384 if (NULL != l)
385 GNUNET_ATS_TEST_logging_now (l);
386}
387
388
389/*
390 * Start the performance test case
391 */
392int
393main (int argc, char *argv[])
394{
395 char *tmp;
396 char *tmp_sep;
397 char *test_name;
398 char *conf_name;
399 char *comm_name;
400 char *dotexe;
401 char *prefs[] = GNUNET_ATS_PreferenceTypeString;
402 int c;
403
404 result = 0;
405
406 /* Determine testname
407 * perf_ats_<solver>_<transport>_<preference>[.exe]*/
408
409 /* Find test prefix, store in temp */
410 tmp = strstr (argv[0], TESTNAME_PREFIX);
411 if (NULL == tmp)
412 {
413 fprintf (stderr, "Unable to parse test name `%s'\n", argv[0]);
414 return GNUNET_SYSERR;
415 }
416
417 /* Set tmp to end of test name prefix */
418 tmp += strlen (TESTNAME_PREFIX);
419
420 /* Determine solver name */
421 solver = GNUNET_strdup (tmp);
422 /* Remove .exe prefix */
423 if ((NULL != (dotexe = strstr (solver, ".exe"))) && (dotexe[4] == '\0'))
424 dotexe[0] = '\0';
425
426 /* Determine first '_' after solver */
427 tmp_sep = strchr (solver, '_');
428 if (NULL == tmp_sep)
429 {
430 fprintf (stderr, "Unable to parse test name `%s'\n", argv[0]);
431 GNUNET_free (solver);
432 return GNUNET_SYSERR;
433 }
434 tmp_sep[0] = '\0';
435 comm_name = GNUNET_strdup (&tmp_sep[1]);
436 tmp_sep = strchr (comm_name, '_');
437 if (NULL == tmp_sep)
438 {
439 fprintf (stderr, "Unable to parse test name `%s'\n", argv[0]);
440 GNUNET_free (solver);
441 return GNUNET_SYSERR;
442 }
443 tmp_sep[0] = '\0';
444 for (c = 0; c <= strlen (comm_name); c++)
445 comm_name[c] = toupper (comm_name[c]);
446 if (0 == strcmp (comm_name, "CORE"))
447 test_core = GNUNET_YES;
448 else if (0 == strcmp (comm_name, "TRANSPORT"))
449 test_core = GNUNET_NO;
450 else
451 {
452 GNUNET_free (comm_name);
453 GNUNET_free (solver);
454 return GNUNET_SYSERR;
455 }
456
457 pref_str = GNUNET_strdup (tmp_sep + 1);
458
459 GNUNET_asprintf (&conf_name, "%s%s_%s.conf", TESTNAME_PREFIX, solver,
460 pref_str);
461 GNUNET_asprintf (&test_name, "%s%s_%s", TESTNAME_PREFIX, solver, pref_str);
462
463 for (c = 0; c <= strlen (pref_str); c++)
464 pref_str[c] = toupper (pref_str[c]);
465 pref_val = -1;
466
467 if (0 != strcmp (pref_str, "NONE"))
468 {
469 for (c = 0; c < GNUNET_ATS_PREFERENCE_END; c++)
470 {
471 if (0 == strcmp (pref_str, prefs[c]))
472 {
473 pref_val = c;
474 break;
475 }
476 }
477 }
478 else
479 {
480 /* abuse terminator to indicate no pref */
481 pref_val = GNUNET_ATS_PREFERENCE_END;
482 }
483 if (-1 == pref_val)
484 {
485 fprintf (stderr, "Unknown preference: `%s'\n", pref_str);
486 GNUNET_free (solver);
487 GNUNET_free (pref_str);
488 GNUNET_free (comm_name);
489 return -1;
490 }
491
492 for (c = 0; c < (argc - 1); c++)
493 {
494 if (0 == strcmp (argv[c], "-d"))
495 break;
496 }
497 if (c < argc - 1)
498 {
499 if (GNUNET_OK != GNUNET_STRINGS_fancy_time_to_relative (argv[c + 1],
500 &perf_duration))
501 fprintf (stderr, "Failed to parse duration `%s'\n", argv[c + 1]);
502 }
503 else
504 {
505 perf_duration = BENCHMARK_DURATION;
506 }
507 fprintf (stderr, "Running benchmark for %llu secs\n", (unsigned long
508 long) (perf_duration.
509 rel_value_us)
510 / (1000 * 1000));
511
512 for (c = 0; c < (argc - 1); c++)
513 {
514 if (0 == strcmp (argv[c], "-s"))
515 break;
516 }
517 if (c < argc - 1)
518 {
519 if ((0L != (num_slaves = strtol (argv[c + 1], NULL, 10)))
520 && (num_slaves >= 1))
521 fprintf (stderr, "Starting %u slave peers\n", num_slaves);
522 else
523 num_slaves = DEFAULT_SLAVES_NUM;
524 }
525 else
526 num_slaves = DEFAULT_SLAVES_NUM;
527
528 for (c = 0; c < (argc - 1); c++)
529 {
530 if (0 == strcmp (argv[c], "-m"))
531 break;
532 }
533 if (c < argc - 1)
534 {
535 if ((0L != (num_masters = strtol (argv[c + 1], NULL, 10)))
536 && (num_masters >= 2))
537 fprintf (stderr, "Starting %u master peers\n", num_masters);
538 else
539 num_masters = DEFAULT_MASTERS_NUM;
540 }
541 else
542 num_masters = DEFAULT_MASTERS_NUM;
543
544 logging = GNUNET_NO;
545 for (c = 0; c < argc; c++)
546 {
547 if (0 == strcmp (argv[c], "-l"))
548 logging = GNUNET_YES;
549 }
550
551 if (GNUNET_YES == logging)
552 {
553 for (c = 0; c < (argc - 1); c++)
554 {
555 if (0 == strcmp (argv[c], "-f"))
556 break;
557 }
558 if (c < argc - 1)
559 {
560 if (GNUNET_OK != GNUNET_STRINGS_fancy_time_to_relative (argv[c + 1],
561 &log_frequency))
562 fprintf (stderr, "Failed to parse duration `%s'\n", argv[c + 1]);
563 }
564 else
565 {
566 log_frequency = LOGGING_FREQUENCY;
567 }
568 fprintf (stderr, "Using log frequency %llu ms\n",
569 (unsigned long long) (log_frequency.rel_value_us) / (1000));
570 }
571
572 GNUNET_asprintf (&testname, "%s_%s_%s", solver, comm_name, pref_str);
573
574 if (num_slaves < num_masters)
575 {
576 fprintf (stderr,
577 "Number of master peers is lower than slaves! exit...\n");
578 GNUNET_free (test_name);
579 GNUNET_free (solver);
580 GNUNET_free (pref_str);
581 GNUNET_free (comm_name);
582 return GNUNET_SYSERR;
583 }
584
585 /**
586 * Setup the topology
587 */
588 GNUNET_ATS_TEST_create_topology ("perf-ats",
589 conf_name,
590 num_slaves,
591 num_masters,
592 test_core,
593 &do_benchmark,
594 NULL,
595 &log_request_cb);
596
597 return result;
598}
599
600
601/* end of file perf_ats.c */
diff --git a/src/ats-tests/perf_ats.h b/src/ats-tests/perf_ats.h
deleted file mode 100644
index 6460aa098..000000000
--- a/src/ats-tests/perf_ats.h
+++ /dev/null
@@ -1,256 +0,0 @@
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2010-2013 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20/**
21 * @file ats/perf_ats.c
22 * @brief ats benchmark: start peers and modify preferences, monitor change over time
23 * @author Christian Grothoff
24 * @author Matthias Wachs
25 */
26#include "platform.h"
27#include "gnunet_util_lib.h"
28#include "gnunet_testbed_service.h"
29#include "gnunet_ats_service.h"
30#include "gnunet_core_service.h"
31#include "ats-testing.h"
32
33#define TEST_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, \
34 120)
35#define BENCHMARK_DURATION GNUNET_TIME_relative_multiply ( \
36 GNUNET_TIME_UNIT_SECONDS, 10)
37#define LOGGING_FREQUENCY GNUNET_TIME_relative_multiply ( \
38 GNUNET_TIME_UNIT_MILLISECONDS, 500)
39#define TESTNAME_PREFIX "perf_ats_"
40#define DEFAULT_SLAVES_NUM 2
41#define DEFAULT_MASTERS_NUM 1
42
43#define TEST_ATS_PREFRENCE_FREQUENCY GNUNET_TIME_relative_multiply ( \
44 GNUNET_TIME_UNIT_SECONDS, 1)
45#define TEST_ATS_PREFRENCE_START 1.0
46#define TEST_ATS_PREFRENCE_DELTA 1.0
47
48#define TEST_MESSAGE_TYPE_PING 12345
49#define TEST_MESSAGE_TYPE_PONG 12346
50#define TEST_MESSAGE_SIZE 1000
51#define TEST_MESSAGE_FREQUENCY GNUNET_TIME_relative_multiply ( \
52 GNUNET_TIME_UNIT_SECONDS, 1)
53
54/**
55 * Information about a benchmarking partner
56 */
57struct BenchmarkPartner
58{
59 /**
60 * The peer itself this partner belongs to
61 */
62 struct BenchmarkPeer *me;
63
64 /**
65 * The partner peer
66 */
67 struct BenchmarkPeer *dest;
68
69 /**
70 * Core transmit handles
71 */
72 struct GNUNET_CORE_TransmitHandle *cth;
73
74 /**
75 * Transport transmit handles
76 */
77 struct GNUNET_TRANSPORT_TransmitHandle *tth;
78
79 /**
80 * Timestamp to calculate communication layer delay
81 */
82 struct GNUNET_TIME_Absolute last_message_sent;
83
84 /**
85 * Accumulated RTT for all messages
86 */
87 unsigned int total_app_rtt;
88
89 /**
90 * Number of messages sent to this partner
91 */
92 unsigned int messages_sent;
93
94 /**
95 * Number of bytes sent to this partner
96 */
97 unsigned int bytes_sent;
98
99 /**
100 * Number of messages received from this partner
101 */
102 unsigned int messages_received;
103
104 /**
105 * Number of bytes received from this partner
106 */
107 unsigned int bytes_received;
108
109 /* Current ATS properties */
110
111 uint32_t ats_distance;
112
113 uint32_t ats_delay;
114
115 uint32_t bandwidth_in;
116
117 uint32_t bandwidth_out;
118
119 uint32_t ats_utilization_up;
120
121 uint32_t ats_utilization_down;
122
123 uint32_t ats_network_type;
124
125 uint32_t ats_cost_wan;
126
127 uint32_t ats_cost_lan;
128
129 uint32_t ats_cost_wlan;
130};
131
132
133/**
134 * Information we track for a peer in the testbed.
135 */
136struct BenchmarkPeer
137{
138 /**
139 * Handle with testbed.
140 */
141 struct GNUNET_TESTBED_Peer *peer;
142
143 /**
144 * Unique identifier
145 */
146 int no;
147
148 /**
149 * Is this peer a measter: GNUNET_YES/GNUNET_NO
150 */
151 int master;
152
153 /**
154 * Peer ID
155 */
156 struct GNUNET_PeerIdentity id;
157
158 /**
159 * Testbed operation to get peer information
160 */
161 struct GNUNET_TESTBED_Operation *peer_id_op;
162
163 /**
164 * Testbed operation to connect to ATS performance service
165 */
166 struct GNUNET_TESTBED_Operation *ats_perf_op;
167
168 /**
169 * Testbed operation to connect to core
170 */
171 struct GNUNET_TESTBED_Operation *comm_op;
172
173 /**
174 * ATS performance handle
175 */
176 struct GNUNET_ATS_PerformanceHandle *ats_perf_handle;
177
178 /**
179 * Masters only:
180 * Testbed connect operations to connect masters to slaves
181 */
182 struct TestbedConnectOperation *core_connect_ops;
183
184 /**
185 * Core handle
186 */
187 struct GNUNET_CORE_Handle *ch;
188
189 /**
190 * Core handle
191 */
192 struct GNUNET_TRANSPORT_Handle *th;
193
194 /**
195 * Masters only:
196 * Peer to set ATS preferences for
197 */
198 struct BenchmarkPeer *pref_partner;
199
200 /**
201 * Masters only
202 * Progress task
203 */
204 struct GNUNET_SCHEDULER_Task *ats_task;
205
206 /**
207 * Masters only
208 * Progress task
209 */
210 double pref_value;
211
212 /**
213 * Array of partners with num_slaves entries (if master) or
214 * num_master entries (if slave)
215 */
216 struct BenchmarkPartner *partners;
217
218 /**
219 * Number of partners
220 */
221 int num_partners;
222
223 /**
224 * Number of core connections
225 */
226 int core_connections;
227
228 /**
229 * Masters only:
230 * Number of connections to slave peers
231 */
232 int core_slave_connections;
233
234 /**
235 * Total number of messages this peer has sent
236 */
237 unsigned int total_messages_sent;
238
239 /**
240 * Total number of bytes this peer has sent
241 */
242 unsigned int total_bytes_sent;
243
244 /**
245 * Total number of messages this peer has received
246 */
247 unsigned int total_messages_received;
248
249 /**
250 * Total number of bytes this peer has received
251 */
252 unsigned int total_bytes_received;
253};
254
255
256/* end of file perf_ats.h */
diff --git a/src/ats-tests/perf_ats_logging.c b/src/ats-tests/perf_ats_logging.c
deleted file mode 100644
index ac8fa8950..000000000
--- a/src/ats-tests/perf_ats_logging.c
+++ /dev/null
@@ -1,780 +0,0 @@
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2010-2013 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20/**
21 * @file ats/perf_ats_logging.c
22 * @brief ats benchmark: logging for performance tests
23 * @author Christian Grothoff
24 * @author Matthias Wachs
25 */
26#include "platform.h"
27#include "gnunet_util_lib.h"
28#include "perf_ats.h"
29
30#define THROUGHPUT_TEMPLATE "#!/usr/bin/gnuplot \n" \
31 "set datafile separator ';' \n" \
32 "set title \"Throughput between Master and Slaves\" \n" \
33 "set xlabel \"Time in ms\" \n" \
34 "set ylabel \"Bytes/s\" \n" \
35 "set grid \n"
36
37#define RTT_TEMPLATE "#!/usr/bin/gnuplot \n" \
38 "set datafile separator ';' \n" \
39 "set title \"Application level roundtrip time between Master and Slaves\" \n" \
40 "set xlabel \"Time in ms\" \n" \
41 "set ylabel \"ms\" \n" \
42 "set grid \n"
43
44#define BW_TEMPLATE "#!/usr/bin/gnuplot \n" \
45 "set datafile separator ';' \n" \
46 "set title \"Bandwidth inbound and outbound between Master and Slaves\" \n" \
47 "set xlabel \"Time in ms\" \n" \
48 "set ylabel \"Bytes / s \" \n" \
49 "set grid \n"
50
51#define LOG_ITEMS_TIME 2
52#define LOG_ITEMS_PER_PEER 17
53
54#define LOG_ITEM_BYTES_SENT 1
55#define LOG_ITEM_MSGS_SENT 2
56#define LOG_ITEM_THROUGHPUT_SENT 3
57#define LOG_ITEM_BYTES_RECV 4
58#define LOG_ITEM_MSGS_RECV 5
59#define LOG_ITEM_THROUGHPUT_RECV 6
60#define LOG_ITEM_APP_RTT 7
61#define LOG_ITEM_ATS_BW_IN 8
62#define LOG_ITEM_ATS_BW_OUT 9
63#define LOG_ITEM_ATS_COSTS_LAN 10
64#define LOG_ITEM_ATS_WAN 11
65#define LOG_ITEM_ATS_WLAN 12
66#define LOG_ITEM_ATS_DELAY 13
67#define LOG_ITEM_ATS_DISTANCE 14
68#define LOG_ITEM_ATS_NETWORKTYPE 15
69#define LOG_ITEM_ATS_UTIL_UP 16
70#define LOG_ITEM_ATS_UTIL_DOWN 17
71
72/**
73 * Logging task
74 */
75static struct GNUNET_SCHEDULER_Task *log_task;
76
77/**
78 * Reference to perf_ats' masters
79 */
80static int num_peers;
81static int running;
82static char *name;
83static struct GNUNET_TIME_Relative frequency;
84
85/**
86 * A single logging time step for a partner
87 */
88struct PartnerLoggingTimestep
89{
90 /**
91 * Peer
92 */
93 struct BenchmarkPeer *slave;
94
95 /**
96 * Total number of messages this peer has sent
97 */
98 unsigned int total_messages_sent;
99
100 /**
101 * Total number of bytes this peer has sent
102 */
103 unsigned int total_bytes_sent;
104
105 /**
106 * Total number of messages this peer has received
107 */
108 unsigned int total_messages_received;
109
110 /**
111 * Total number of bytes this peer has received
112 */
113 unsigned int total_bytes_received;
114
115 /**
116 * Total outbound throughput for master in Bytes / s
117 */
118 unsigned int throughput_sent;
119
120 /**
121 * Total inbound throughput for master in Bytes / s
122 */
123 unsigned int throughput_recv;
124
125 /**
126 * Accumulated RTT for all messages
127 */
128 unsigned int total_app_rtt;
129
130 /**
131 * Current application level delay
132 */
133 unsigned int app_rtt;
134
135 /* Current ATS properties */
136
137 uint32_t ats_distance;
138
139 uint32_t ats_delay;
140
141 uint32_t bandwidth_in;
142
143 uint32_t bandwidth_out;
144
145 uint32_t ats_utilization_up;
146
147 uint32_t ats_utilization_down;
148
149 uint32_t ats_network_type;
150
151 uint32_t ats_cost_wan;
152
153 uint32_t ats_cost_lan;
154
155 uint32_t ats_cost_wlan;
156};
157
158
159/**
160 * A single logging time step for a peer
161 */
162struct PeerLoggingTimestep
163{
164 /**
165 * Next in DLL
166 */
167 struct PeerLoggingTimestep *next;
168
169 /**
170 * Prev in DLL
171 */
172 struct PeerLoggingTimestep *prev;
173
174 /**
175 * Logging timestamp
176 */
177 struct GNUNET_TIME_Absolute timestamp;
178
179 /**
180 * Total number of messages this peer has sent
181 */
182 unsigned int total_messages_sent;
183
184 /**
185 * Total number of bytes this peer has sent
186 */
187 unsigned int total_bytes_sent;
188
189 /**
190 * Total number of messages this peer has received
191 */
192 unsigned int total_messages_received;
193
194 /**
195 * Total number of bytes this peer has received
196 */
197 unsigned int total_bytes_received;
198
199 /**
200 * Total outbound throughput for master in Bytes / s
201 */
202 unsigned int total_throughput_send;
203
204 /**
205 * Total inbound throughput for master in Bytes / s
206 */
207 unsigned int total_throughput_recv;
208
209 /**
210 * Logs for slaves
211 */
212 struct PartnerLoggingTimestep *slaves_log;
213};
214
215/**
216 * Entry for a benchmark peer
217 */
218struct LoggingPeer
219{
220 /**
221 * Peer
222 */
223 struct BenchmarkPeer *peer;
224
225 /**
226 * Start time
227 */
228 struct GNUNET_TIME_Absolute start;
229
230 /**
231 * DLL for logging entries: head
232 */
233 struct PeerLoggingTimestep *head;
234
235 /**
236 * DLL for logging entries: tail
237 */
238 struct PeerLoggingTimestep *tail;
239};
240
241/**
242 * Log structure of length num_peers
243 */
244static struct LoggingPeer *lp;
245
246
247static void
248write_throughput_gnuplot_script (char *fn, struct LoggingPeer *lp)
249{
250 struct GNUNET_DISK_FileHandle *f;
251 char *gfn;
252 char *data;
253 int c_s;
254 int peer_index;
255
256 GNUNET_asprintf (&gfn, "gnuplot_throughput_%s", fn);
257 f = GNUNET_DISK_file_open (gfn,
258 GNUNET_DISK_OPEN_WRITE | GNUNET_DISK_OPEN_CREATE,
259 GNUNET_DISK_PERM_USER_EXEC
260 | GNUNET_DISK_PERM_USER_READ
261 | GNUNET_DISK_PERM_USER_WRITE);
262 if (NULL == f)
263 {
264 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Cannot open gnuplot file `%s'\n",
265 gfn);
266 GNUNET_free (gfn);
267 return;
268 }
269
270 /* Write header */
271
272 if (GNUNET_SYSERR == GNUNET_DISK_file_write (f, THROUGHPUT_TEMPLATE, strlen (
273 THROUGHPUT_TEMPLATE)))
274 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
275 "Cannot write data to plot file `%s'\n", gfn);
276
277 /* Write master data */
278 peer_index = LOG_ITEMS_TIME;
279 GNUNET_asprintf (&data,
280 "plot '%s' using 2:%u with lines title 'Master %u send total', \\\n" \
281 "'%s' using 2:%u with lines title 'Master %u receive total', \\\n",
282 fn, peer_index + LOG_ITEM_THROUGHPUT_SENT, lp->peer->no,
283 fn, peer_index + LOG_ITEM_THROUGHPUT_RECV, lp->peer->no);
284 if (GNUNET_SYSERR == GNUNET_DISK_file_write (f, data, strlen (data)))
285 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
286 "Cannot write data to plot file `%s'\n", gfn);
287 GNUNET_free (data);
288
289 peer_index = LOG_ITEMS_TIME + LOG_ITEMS_PER_PEER;
290 for (c_s = 0; c_s < lp->peer->num_partners; c_s++)
291 {
292 GNUNET_asprintf (&data,
293 "'%s' using 2:%u with lines title 'Master %u - Slave %u send', \\\n" \
294 "'%s' using 2:%u with lines title 'Master %u - Slave %u receive'%s\n",
295 fn, peer_index + LOG_ITEM_THROUGHPUT_SENT, lp->peer->no,
296 lp->peer->partners[c_s].dest->no,
297 fn, peer_index + LOG_ITEM_THROUGHPUT_RECV, lp->peer->no,
298 lp->peer->partners[c_s].dest->no,
299 (c_s < lp->peer->num_partners - 1) ? ", \\" :
300 "\n pause -1");
301 if (GNUNET_SYSERR == GNUNET_DISK_file_write (f, data, strlen (data)))
302 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
303 "Cannot write data to plot file `%s'\n", gfn);
304 GNUNET_free (data);
305 peer_index += LOG_ITEMS_PER_PEER;
306 }
307
308 if (GNUNET_SYSERR == GNUNET_DISK_file_close (f))
309 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Cannot close gnuplot file `%s'\n",
310 gfn);
311 else
312 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
313 "Data successfully written to plot file `%s'\n", gfn);
314
315 GNUNET_free (gfn);
316}
317
318
319static void
320write_rtt_gnuplot_script (char *fn, struct LoggingPeer *lp)
321{
322 struct GNUNET_DISK_FileHandle *f;
323 char *gfn;
324 char *data;
325 int c_s;
326 int index;
327
328 GNUNET_asprintf (&gfn, "gnuplot_rtt_%s", fn);
329 f = GNUNET_DISK_file_open (gfn,
330 GNUNET_DISK_OPEN_WRITE | GNUNET_DISK_OPEN_CREATE,
331 GNUNET_DISK_PERM_USER_EXEC
332 | GNUNET_DISK_PERM_USER_READ
333 | GNUNET_DISK_PERM_USER_WRITE);
334 if (NULL == f)
335 {
336 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Cannot open gnuplot file `%s'\n",
337 gfn);
338 GNUNET_free (gfn);
339 return;
340 }
341
342 /* Write header */
343
344 if (GNUNET_SYSERR == GNUNET_DISK_file_write (f, RTT_TEMPLATE, strlen (
345 RTT_TEMPLATE)))
346 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
347 "Cannot write data to plot file `%s'\n", gfn);
348
349 index = LOG_ITEMS_TIME + LOG_ITEMS_PER_PEER;
350 for (c_s = 0; c_s < lp->peer->num_partners; c_s++)
351 {
352 GNUNET_asprintf (&data,
353 "%s'%s' using 2:%u with lines title 'Master %u - Slave %u '%s\n",
354 (0 == c_s) ? "plot " : "",
355 fn, index + LOG_ITEM_APP_RTT, lp->peer->no,
356 lp->peer->partners[c_s].dest->no,
357 (c_s < lp->peer->num_partners - 1) ? ", \\" :
358 "\n pause -1");
359 if (GNUNET_SYSERR == GNUNET_DISK_file_write (f, data, strlen (data)))
360 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
361 "Cannot write data to plot file `%s'\n", gfn);
362 GNUNET_free (data);
363 index += LOG_ITEMS_PER_PEER;
364 }
365
366 if (GNUNET_SYSERR == GNUNET_DISK_file_close (f))
367 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Cannot close gnuplot file `%s'\n",
368 gfn);
369 else
370 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
371 "Data successfully written to plot file `%s'\n", gfn);
372 GNUNET_free (gfn);
373}
374
375
376static void
377write_bw_gnuplot_script (char *fn, struct LoggingPeer *lp)
378{
379 struct GNUNET_DISK_FileHandle *f;
380 char *gfn;
381 char *data;
382 int c_s;
383 int index;
384
385 GNUNET_asprintf (&gfn, "gnuplot_bw_%s", fn);
386 f = GNUNET_DISK_file_open (gfn,
387 GNUNET_DISK_OPEN_WRITE | GNUNET_DISK_OPEN_CREATE,
388 GNUNET_DISK_PERM_USER_EXEC
389 | GNUNET_DISK_PERM_USER_READ
390 | GNUNET_DISK_PERM_USER_WRITE);
391 if (NULL == f)
392 {
393 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Cannot open gnuplot file `%s'\n",
394 gfn);
395 GNUNET_free (gfn);
396 return;
397 }
398
399 /* Write header */
400
401 if (GNUNET_SYSERR == GNUNET_DISK_file_write (f, BW_TEMPLATE, strlen (
402 BW_TEMPLATE)))
403 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
404 "Cannot write data to plot file `%s'\n", gfn);
405
406 index = LOG_ITEMS_TIME + LOG_ITEMS_PER_PEER;
407 for (c_s = 0; c_s < lp->peer->num_partners; c_s++)
408 {
409 GNUNET_asprintf (&data, "%s" \
410 "'%s' using 2:%u with lines title 'BW out master %u - Slave %u ', \\\n" \
411 "'%s' using 2:%u with lines title 'BW in master %u - Slave %u '" \
412 "%s\n",
413 (0 == c_s) ? "plot " : "",
414 fn, index + LOG_ITEM_ATS_BW_OUT, lp->peer->no,
415 lp->peer->partners[c_s].dest->no,
416 fn, index + LOG_ITEM_ATS_BW_IN, lp->peer->no,
417 lp->peer->partners[c_s].dest->no,
418 (c_s < lp->peer->num_partners - 1) ? ", \\" :
419 "\n pause -1");
420 if (GNUNET_SYSERR == GNUNET_DISK_file_write (f, data, strlen (data)))
421 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
422 "Cannot write data to plot file `%s'\n", gfn);
423 GNUNET_free (data);
424 index += LOG_ITEMS_PER_PEER;
425 }
426
427 if (GNUNET_SYSERR == GNUNET_DISK_file_close (f))
428 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Cannot close gnuplot file `%s'\n",
429 gfn);
430 else
431 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
432 "Data successfully written to plot file `%s'\n", gfn);
433 GNUNET_free (gfn);
434}
435
436
437static void
438write_to_file ()
439{
440 struct GNUNET_DISK_FileHandle *f;
441
442 char *filename;
443 char *data;
444 char *slave_string;
445 char *slave_string_tmp;
446 struct PeerLoggingTimestep *cur_lt;
447 struct PartnerLoggingTimestep *plt;
448 int c_m;
449 int c_s;
450
451 for (c_m = 0; c_m < num_peers; c_m++)
452 {
453 GNUNET_asprintf (&filename, "%llu_master_%u_%s_%s.data",
454 GNUNET_TIME_absolute_get ().abs_value_us,
455 lp[c_m].peer->no, GNUNET_i2s (&lp[c_m].peer->id), name);
456
457 f = GNUNET_DISK_file_open (filename,
458 GNUNET_DISK_OPEN_WRITE | GNUNET_DISK_OPEN_CREATE,
459 GNUNET_DISK_PERM_USER_READ
460 | GNUNET_DISK_PERM_USER_WRITE);
461 if (NULL == f)
462 {
463 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Cannot open log file `%s'\n",
464 filename);
465 GNUNET_free (filename);
466 return;
467 }
468
469 for (cur_lt = lp[c_m].head; NULL != cur_lt; cur_lt = cur_lt->next)
470 {
471 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
472 "Master [%u]: timestamp %llu %llu ; %u %u %u ; %u %u %u\n",
473 lp[c_m].peer->no,
474 cur_lt->timestamp, GNUNET_TIME_absolute_get_difference (
475 lp[c_m].start, cur_lt->timestamp).rel_value_us / 1000,
476 cur_lt->total_messages_sent, cur_lt->total_bytes_sent,
477 cur_lt->total_throughput_send,
478 cur_lt->total_messages_received, cur_lt->total_bytes_received,
479 cur_lt->total_throughput_recv);
480
481 slave_string = GNUNET_strdup (";");
482 for (c_s = 0; c_s < lp[c_m].peer->num_partners; c_s++)
483 {
484 plt = &cur_lt->slaves_log[c_s];
485 /* Log partners */
486
487 /* Assembling slave string */
488 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
489 "\t Slave [%u]: %u %u %u ; %u %u %u rtt %u delay %u bw_in %u bw_out %u \n",
490 plt->slave->no,
491 plt->total_messages_sent, plt->total_bytes_sent,
492 plt->throughput_sent,
493 plt->total_messages_received, plt->total_bytes_received,
494 plt->throughput_recv,
495 plt->app_rtt, plt->ats_delay,
496 plt->bandwidth_in, plt->bandwidth_out);
497
498 GNUNET_asprintf (&slave_string_tmp,
499 "%s%u;%u;%u;%u;%u;%u;%.3f;%u;%u;%u;%u;%u;%u;%u;%u;%u;%u;",
500 slave_string,
501 plt->total_messages_sent, plt->total_bytes_sent,
502 plt->throughput_sent,
503 plt->total_messages_received,
504 plt->total_bytes_received, plt->throughput_sent,
505 (double) plt->app_rtt / 1000,
506 plt->bandwidth_in, plt->bandwidth_out,
507 plt->ats_cost_lan, plt->ats_cost_wan,
508 plt->ats_cost_wlan,
509 plt->ats_delay, plt->ats_distance,
510 plt->ats_network_type,
511 plt->ats_utilization_up, plt->ats_utilization_down);
512 GNUNET_free (slave_string);
513 slave_string = slave_string_tmp;
514 }
515 /* Assembling master string */
516
517
518 GNUNET_asprintf (&data, "%llu;%llu;%u;%u;%u;%u;%u;%u;;;;;;;;;;;%s\n",
519 cur_lt->timestamp,
520 GNUNET_TIME_absolute_get_difference (lp[c_m].start,
521 cur_lt->timestamp).
522 rel_value_us / 1000,
523 cur_lt->total_messages_sent, cur_lt->total_bytes_sent,
524 cur_lt->total_throughput_send,
525 cur_lt->total_messages_received,
526 cur_lt->total_bytes_received,
527 cur_lt->total_throughput_recv,
528 slave_string);
529 GNUNET_free (slave_string);
530
531 if (GNUNET_SYSERR == GNUNET_DISK_file_write (f, data, strlen (data)))
532 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
533 "Cannot write data to log file `%s'\n", filename);
534 GNUNET_free (data);
535 }
536 if (GNUNET_SYSERR == GNUNET_DISK_file_close (f))
537 {
538 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Cannot close log file `%s'\n",
539 filename);
540 GNUNET_free (filename);
541 return;
542 }
543
544 write_throughput_gnuplot_script (filename, lp);
545 write_rtt_gnuplot_script (filename, lp);
546 write_bw_gnuplot_script (filename, lp);
547
548 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
549 "Data file successfully written to log file `%s'\n", filename);
550 GNUNET_free (filename);
551 }
552}
553
554
555void
556collect_log_now (void)
557{
558 struct LoggingPeer *bp;
559 struct PeerLoggingTimestep *mlt;
560 struct PeerLoggingTimestep *prev_log_mlt;
561 struct PartnerLoggingTimestep *slt;
562 struct PartnerLoggingTimestep *prev_log_slt;
563 struct BenchmarkPartner *p;
564 struct GNUNET_TIME_Relative delta;
565 int c_s;
566 int c_m;
567 unsigned int app_rtt;
568 double mult;
569
570 if (GNUNET_YES != running)
571 return;
572
573 for (c_m = 0; c_m < num_peers; c_m++)
574 {
575 bp = &lp[c_m];
576 mlt = GNUNET_new (struct PeerLoggingTimestep);
577 GNUNET_CONTAINER_DLL_insert_tail (bp->head, bp->tail, mlt);
578 prev_log_mlt = mlt->prev;
579
580 /* Collect data */
581
582 /* Current master state */
583 mlt->timestamp = GNUNET_TIME_absolute_get ();
584 mlt->total_bytes_sent = bp->peer->total_bytes_sent;
585 mlt->total_messages_sent = bp->peer->total_messages_sent;
586 mlt->total_bytes_received = bp->peer->total_bytes_received;
587 mlt->total_messages_received = bp->peer->total_messages_received;
588
589 /* Throughput */
590 if (NULL == prev_log_mlt)
591 {
592 /* Get difference to start */
593 delta = GNUNET_TIME_absolute_get_difference (lp[c_m].start,
594 mlt->timestamp);
595 }
596 else
597 {
598 /* Get difference to last timestep */
599 delta = GNUNET_TIME_absolute_get_difference (mlt->prev->timestamp,
600 mlt->timestamp);
601 }
602
603 /* Multiplication factor for throughput calculation */
604 mult = (1.0 * 1000 * 1000) / (delta.rel_value_us);
605
606 /* Total throughput */
607 if (NULL != prev_log_mlt)
608 {
609 if (mlt->total_bytes_sent - mlt->prev->total_bytes_sent > 0)
610 mlt->total_throughput_send = mult * (mlt->total_bytes_sent
611 - mlt->prev->total_bytes_sent);
612 else
613 mlt->total_throughput_send = prev_log_mlt->total_throughput_send; /* no msgs send */
614
615 if (mlt->total_bytes_received - mlt->prev->total_bytes_received > 0)
616 mlt->total_throughput_recv = mult * (mlt->total_bytes_received
617 - mlt->prev->total_bytes_received);
618 else
619 mlt->total_throughput_recv = prev_log_mlt->total_throughput_recv; /* no msgs received */
620 }
621 else
622 {
623 mlt->total_throughput_send = mult * mlt->total_bytes_sent;
624 mlt->total_throughput_send = mult * mlt->total_bytes_received;
625 }
626
627 mlt->slaves_log = GNUNET_malloc (bp->peer->num_partners
628 * sizeof(struct PartnerLoggingTimestep));
629
630 for (c_s = 0; c_s < bp->peer->num_partners; c_s++)
631 {
632 p = &bp->peer->partners[c_s];
633 slt = &mlt->slaves_log[c_s];
634
635 slt->slave = p->dest;
636 /* Bytes sent from master to this slave */
637 slt->total_bytes_sent = p->bytes_sent;
638 /* Messages sent from master to this slave */
639 slt->total_messages_sent = p->messages_sent;
640 /* Bytes master received from this slave */
641 slt->total_bytes_received = p->bytes_received;
642 /* Messages master received from this slave */
643 slt->total_messages_received = p->messages_received;
644 slt->total_app_rtt = p->total_app_rtt;
645 /* ats performance information */
646 slt->ats_cost_lan = p->ats_cost_lan;
647 slt->ats_cost_wan = p->ats_cost_wan;
648 slt->ats_cost_wlan = p->ats_cost_wlan;
649 slt->ats_delay = p->ats_delay;
650 slt->ats_distance = p->ats_distance;
651 slt->ats_network_type = p->ats_network_type;
652 slt->ats_utilization_down = p->ats_utilization_down;
653 slt->ats_utilization_up = p->ats_utilization_up;
654 slt->bandwidth_in = p->bandwidth_in;
655 slt->bandwidth_out = p->bandwidth_out;
656
657 /* Total application level rtt */
658 if (NULL == prev_log_mlt)
659 {
660 if (0 != slt->total_messages_sent)
661 app_rtt = slt->total_app_rtt / slt->total_messages_sent;
662 else
663 app_rtt = 0;
664 }
665 else
666 {
667 prev_log_slt = &prev_log_mlt->slaves_log[c_s];
668 if ((slt->total_messages_sent - prev_log_slt->total_messages_sent) > 0)
669 app_rtt = (slt->total_app_rtt - prev_log_slt->total_app_rtt)
670 / (slt->total_messages_sent
671 - prev_log_slt->total_messages_sent);
672 else
673 app_rtt = prev_log_slt->app_rtt; /* No messages were */
674 }
675 slt->app_rtt = app_rtt;
676
677 /* Partner throughput */
678 if (NULL != prev_log_mlt)
679 {
680 prev_log_slt = &prev_log_mlt->slaves_log[c_s];
681 if (slt->total_bytes_sent - prev_log_slt->total_bytes_sent > 0)
682 slt->throughput_sent = mult * (slt->total_bytes_sent
683 - prev_log_slt->total_bytes_sent);
684 else
685 slt->throughput_sent = prev_log_slt->throughput_sent; /* no msgs send */
686
687 if (slt->total_bytes_received - prev_log_slt->total_bytes_received > 0)
688 slt->throughput_recv = mult * (slt->total_bytes_received
689 - prev_log_slt->total_bytes_received);
690 else
691 slt->throughput_recv = prev_log_slt->throughput_recv; /* no msgs received */
692 }
693 else
694 {
695 slt->throughput_sent = mult * slt->total_bytes_sent;
696 slt->throughput_sent = mult * slt->total_bytes_received;
697 }
698
699 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
700 "Master [%u]: slave [%u]\n",
701 bp->peer->no, p->dest->no);
702 }
703 }
704}
705
706
707static void
708collect_log_task (void *cls)
709{
710 log_task = NULL;
711 collect_log_now ();
712 log_task = GNUNET_SCHEDULER_add_delayed (frequency,
713 &collect_log_task, NULL);
714}
715
716
717void
718perf_logging_stop ()
719{
720 int c_m;
721 struct PeerLoggingTimestep *cur;
722
723 if (GNUNET_YES != running)
724 return;
725
726 if (NULL != log_task)
727 {
728 GNUNET_SCHEDULER_cancel (log_task);
729 log_task = NULL;
730 }
731 collect_log_task (NULL);
732
733 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
734 _ ("Stop logging\n"));
735
736 write_to_file ();
737
738 for (c_m = 0; c_m < num_peers; c_m++)
739 {
740 while (NULL != (cur = lp[c_m].head))
741 {
742 GNUNET_CONTAINER_DLL_remove (lp[c_m].head, lp[c_m].tail, cur);
743 GNUNET_free (cur->slaves_log);
744 GNUNET_free (cur);
745 }
746 }
747
748 GNUNET_free (lp);
749}
750
751
752void
753perf_logging_start (struct GNUNET_TIME_Relative log_frequency,
754 char *testname, struct BenchmarkPeer *masters, int
755 num_masters)
756{
757 int c_m;
758
759 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
760 _ ("Start logging `%s'\n"), testname);
761
762 num_peers = num_masters;
763 name = testname;
764 frequency = log_frequency;
765
766 lp = GNUNET_malloc (num_masters * sizeof(struct LoggingPeer));
767
768 for (c_m = 0; c_m < num_masters; c_m++)
769 {
770 lp[c_m].peer = &masters[c_m];
771 lp[c_m].start = GNUNET_TIME_absolute_get ();
772 }
773
774 /* Schedule logging task */
775 log_task = GNUNET_SCHEDULER_add_now (&collect_log_task, NULL);
776 running = GNUNET_YES;
777}
778
779
780/* end of file perf_ats_logging.c */
diff --git a/src/ats-tests/perf_ats_proportional_bandwidth.conf b/src/ats-tests/perf_ats_proportional_bandwidth.conf
deleted file mode 100644
index dba96c0fe..000000000
--- a/src/ats-tests/perf_ats_proportional_bandwidth.conf
+++ /dev/null
@@ -1,4 +0,0 @@
1@INLINE@ template_perf_ats.conf
2
3[ats]
4MODE = proportional
diff --git a/src/ats-tests/perf_ats_proportional_latency.conf b/src/ats-tests/perf_ats_proportional_latency.conf
deleted file mode 100644
index dba96c0fe..000000000
--- a/src/ats-tests/perf_ats_proportional_latency.conf
+++ /dev/null
@@ -1,4 +0,0 @@
1@INLINE@ template_perf_ats.conf
2
3[ats]
4MODE = proportional
diff --git a/src/ats-tests/perf_ats_proportional_none.conf b/src/ats-tests/perf_ats_proportional_none.conf
deleted file mode 100644
index dba96c0fe..000000000
--- a/src/ats-tests/perf_ats_proportional_none.conf
+++ /dev/null
@@ -1,4 +0,0 @@
1@INLINE@ template_perf_ats.conf
2
3[ats]
4MODE = proportional
diff --git a/src/ats-tests/template_perf_ats.conf b/src/ats-tests/template_perf_ats.conf
deleted file mode 100644
index 74f608bfb..000000000
--- a/src/ats-tests/template_perf_ats.conf
+++ /dev/null
@@ -1,52 +0,0 @@
1@INLINE@ ../../contrib/conf/gnunet/no_forcestart.conf
2
3[testbed]
4# How long should operations wait?
5OPERATION_TIMEOUT = 60 s
6
7[transport-udp]
8BROADCAST = NO
9
10[peerinfo]
11USE_INCLUDED_HELLOS = NO
12
13[transport]
14#PREFIX = valgrind --leak-check=yes
15
16[ats]
17# PREFIX = valgrind
18
19# Network specific inbound/outbound quotas
20UNSPECIFIED_QUOTA_IN = 128 KiB
21UNSPECIFIED_QUOTA_OUT = 128 KiB
22# LOOPBACK
23LOOPBACK_QUOTA_IN = 128 KiB
24LOOPBACK_QUOTA_OUT = 128 KiB
25# LAN
26LAN_QUOTA_IN = 128 KiB
27LAN_QUOTA_OUT = 128 KiB
28# WAN
29WAN_QUOTA_IN = 128 KiB
30WAN_QUOTA_OUT = 128 KiB
31# WLAN
32WLAN_QUOTA_IN = 128 KiB
33WLAN_QUOTA_OUT = 128 KiB
34# BLUETOOTH
35BLUETOOTH_QUOTA_IN = 128 KiB
36BLUETOOTH_QUOTA_OUT = 128 KiB
37
38[transport-blacklist-M1RGJB4FQSM17JJ3M9BF7Q0I8MCO8C462NMOHI26RLT7C7A2KE6HCOPRA4ARM5HPL1J9IDDK5G8SFU5GUSHCTBH90ECETK1BFQD76R0]
39HIJN5O404QNUR37OSJUTNJ6H2KJS198DHI2J3I8SE3DMKVRG1RNQPODN1IJBF14KEMPPPRM0B9F9ILFKHOFCA655CH6M5OCNCMR0FE0 =
40CDTU8QQ8UPLGHR3B91V0CLTDOHONLB8QGHGUEM2JM1GANTEV0O6T20SD2N2HDN2QSHDG6IDTBR48KRDCS601FI6VHG59E7DQA98JD2O =
41
42[transport-blacklist-93ARIS6Q347RPU9EFPS9LA00VPHQLG3RBLKEKTHV4D6UVGEAC75KIIBFB5U9KK9P9P1RU1CBPV4BSSDUTB2AL2N2LG9KSO9APQNLS0O]
43HIJN5O404QNUR37OSJUTNJ6H2KJS198DHI2J3I8SE3DMKVRG1RNQPODN1IJBF14KEMPPPRM0B9F9ILFKHOFCA655CH6M5OCNCMR0FE0 =
44CDTU8QQ8UPLGHR3B91V0CLTDOHONLB8QGHGUEM2JM1GANTEV0O6T20SD2N2HDN2QSHDG6IDTBR48KRDCS601FI6VHG59E7DQA98JD2O =
45
46[transport-blacklist-OF84RAOAU2B1SOSEHJH6350MA0F7C98U55RI76LGIQOM7O33TFHPNUFB47CDBSCOLIINMVJ2U82445ABOBQRIVREG20L31KVDV5HG60]
47HIJN5O404QNUR37OSJUTNJ6H2KJS198DHI2J3I8SE3DMKVRG1RNQPODN1IJBF14KEMPPPRM0B9F9ILFKHOFCA655CH6M5OCNCMR0FE0 =
48CDTU8QQ8UPLGHR3B91V0CLTDOHONLB8QGHGUEM2JM1GANTEV0O6T20SD2N2HDN2QSHDG6IDTBR48KRDCS601FI6VHG59E7DQA98JD2O =
49
50[transport-blacklist-548J7M14O4I0F8I84U0UFARVJ97DB6QOT3MCA8O8SNAIT5JJ8TR95LUVAP3N5L7DN33IB49SNMF3Q3C0VPLTGP9ASCULA9S2OIMHHH8]
51HIJN5O404QNUR37OSJUTNJ6H2KJS198DHI2J3I8SE3DMKVRG1RNQPODN1IJBF14KEMPPPRM0B9F9ILFKHOFCA655CH6M5OCNCMR0FE0 =
52CDTU8QQ8UPLGHR3B91V0CLTDOHONLB8QGHGUEM2JM1GANTEV0O6T20SD2N2HDN2QSHDG6IDTBR48KRDCS601FI6VHG59E7DQA98JD2O =
diff --git a/src/block/Makefile.am b/src/block/Makefile.am
index ceeff4c66..ea796bf8f 100644
--- a/src/block/Makefile.am
+++ b/src/block/Makefile.am
@@ -26,10 +26,6 @@ libgnunet_plugin_block_template_la_LIBADD = \
26 libgnunetblock.la \ 26 libgnunetblock.la \
27 $(top_builddir)/src/util/libgnunetutil.la \ 27 $(top_builddir)/src/util/libgnunetutil.la \
28 $(LTLIBINTL) 28 $(LTLIBINTL)
29libgnunet_plugin_block_template_la_DEPENDENCIES = \
30 libgnunetblockgroup.la \
31 libgnunetblock.la \
32 $(top_builddir)/src/util/libgnunetutil.la
33libgnunet_plugin_block_template_la_LDFLAGS = \ 29libgnunet_plugin_block_template_la_LDFLAGS = \
34 $(GN_PLUGIN_LDFLAGS) 30 $(GN_PLUGIN_LDFLAGS)
35 31
@@ -40,10 +36,6 @@ libgnunet_plugin_block_test_la_LIBADD = \
40 libgnunetblock.la \ 36 libgnunetblock.la \
41 $(top_builddir)/src/util/libgnunetutil.la \ 37 $(top_builddir)/src/util/libgnunetutil.la \
42 $(LTLIBINTL) 38 $(LTLIBINTL)
43libgnunet_plugin_block_test_la_DEPENDENCIES = \
44 libgnunetblockgroup.la \
45 libgnunetblock.la \
46 $(top_builddir)/src/util/libgnunetutil.la
47libgnunet_plugin_block_test_la_LDFLAGS = \ 39libgnunet_plugin_block_test_la_LDFLAGS = \
48 $(GN_PLUGIN_LDFLAGS) 40 $(GN_PLUGIN_LDFLAGS)
49 41
@@ -51,8 +43,6 @@ libgnunetblock_la_SOURCES = \
51 block.c 43 block.c
52libgnunetblock_la_LIBADD = \ 44libgnunetblock_la_LIBADD = \
53 $(top_builddir)/src/util/libgnunetutil.la 45 $(top_builddir)/src/util/libgnunetutil.la
54libgnunetblock_la_DEPENDENCIES = \
55 $(top_builddir)/src/util/libgnunetutil.la
56libgnunetblock_la_LDFLAGS = \ 46libgnunetblock_la_LDFLAGS = \
57 $(GN_LIB_LDFLAGS) \ 47 $(GN_LIB_LDFLAGS) \
58 $(GN_LIBINTL) \ 48 $(GN_LIBINTL) \
@@ -63,9 +53,6 @@ libgnunetblockgroup_la_SOURCES = \
63libgnunetblockgroup_la_LIBADD = \ 53libgnunetblockgroup_la_LIBADD = \
64 libgnunetblock.la \ 54 libgnunetblock.la \
65 $(top_builddir)/src/util/libgnunetutil.la 55 $(top_builddir)/src/util/libgnunetutil.la
66libgnunetblockgroup_la_DEPENDENCIES = \
67 libgnunetblock.la \
68 $(top_builddir)/src/util/libgnunetutil.la
69libgnunetblockgroup_la_LDFLAGS = \ 56libgnunetblockgroup_la_LDFLAGS = \
70 $(GN_LIB_LDFLAGS) \ 57 $(GN_LIB_LDFLAGS) \
71 $(GN_LIBINTL) \ 58 $(GN_LIBINTL) \
diff --git a/src/consensus/Makefile.am b/src/consensus/Makefile.am
index 24e685fb9..cf1d32e74 100644
--- a/src/consensus/Makefile.am
+++ b/src/consensus/Makefile.am
@@ -40,6 +40,7 @@ gnunet_consensus_profiler_SOURCES = \
40gnunet_consensus_profiler_LDADD = \ 40gnunet_consensus_profiler_LDADD = \
41 $(top_builddir)/src/util/libgnunetutil.la \ 41 $(top_builddir)/src/util/libgnunetutil.la \
42 libgnunetconsensus.la \ 42 libgnunetconsensus.la \
43 $(top_builddir)/src/testing/libgnunettesting.la \
43 $(top_builddir)/src/testbed/libgnunettestbed.la \ 44 $(top_builddir)/src/testbed/libgnunettestbed.la \
44 $(GN_LIBINTL) 45 $(GN_LIBINTL)
45 46
diff --git a/src/conversation/conversation_api.c b/src/conversation/conversation_api.c
index 88fe8f11c..1984abdd6 100644
--- a/src/conversation/conversation_api.c
+++ b/src/conversation/conversation_api.c
@@ -645,6 +645,7 @@ GNUNET_CONVERSATION_phone_create (const struct GNUNET_CONFIGURATION_Handle *cfg,
645 GNUNET_CRYPTO_hash (line, 645 GNUNET_CRYPTO_hash (line,
646 strlen (line), 646 strlen (line),
647 &line_port); 647 &line_port);
648 GNUNET_free (line);
648 phone = GNUNET_new (struct GNUNET_CONVERSATION_Phone); 649 phone = GNUNET_new (struct GNUNET_CONVERSATION_Phone);
649 if (GNUNET_OK != 650 if (GNUNET_OK !=
650 GNUNET_CRYPTO_get_peer_identity (cfg, 651 GNUNET_CRYPTO_get_peer_identity (cfg,
diff --git a/src/curl/curl.c b/src/curl/curl.c
index b6aef4f61..71672c780 100644
--- a/src/curl/curl.c
+++ b/src/curl/curl.c
@@ -759,6 +759,15 @@ GNUNET_CURL_download_get_result_ (struct GNUNET_CURL_DownloadBuffer *db,
759 "Downloaded body: %.*s\n", 759 "Downloaded body: %.*s\n",
760 (int) db->buf_size, 760 (int) db->buf_size,
761 (char *) db->buf); 761 (char *) db->buf);
762 if (CURLE_OK !=
763 curl_easy_getinfo (eh,
764 CURLINFO_RESPONSE_CODE,
765 response_code))
766 {
767 /* unexpected error... */
768 GNUNET_break (0);
769 *response_code = 0;
770 }
762 if ((CURLE_OK != 771 if ((CURLE_OK !=
763 curl_easy_getinfo (eh, 772 curl_easy_getinfo (eh,
764 CURLINFO_CONTENT_TYPE, 773 CURLINFO_CONTENT_TYPE,
@@ -768,15 +777,6 @@ GNUNET_CURL_download_get_result_ (struct GNUNET_CURL_DownloadBuffer *db,
768 { 777 {
769 /* No content type or explicitly not JSON, refuse to parse 778 /* No content type or explicitly not JSON, refuse to parse
770 (but keep response code) */ 779 (but keep response code) */
771 if (CURLE_OK !=
772 curl_easy_getinfo (eh,
773 CURLINFO_RESPONSE_CODE,
774 response_code))
775 {
776 /* unexpected error... */
777 GNUNET_break (0);
778 *response_code = 0;
779 }
780 if (0 != db->buf_size) 780 if (0 != db->buf_size)
781 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, 781 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
782 "Did NOT detect response `%.*s' as JSON\n", 782 "Did NOT detect response `%.*s' as JSON\n",
@@ -786,6 +786,20 @@ GNUNET_CURL_download_get_result_ (struct GNUNET_CURL_DownloadBuffer *db,
786 } 786 }
787 if (MHD_HTTP_NO_CONTENT == *response_code) 787 if (MHD_HTTP_NO_CONTENT == *response_code)
788 return NULL; 788 return NULL;
789 if (0 == *response_code)
790 {
791 char *url;
792
793 if (CURLE_OK !=
794 curl_easy_getinfo (eh,
795 CURLINFO_EFFECTIVE_URL,
796 &url))
797 url = "<unknown URL>";
798 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
799 "Failed to download response from `%s': \n",
800 url);
801 return NULL;
802 }
789 json = NULL; 803 json = NULL;
790 if (0 == db->eno) 804 if (0 == db->eno)
791 { 805 {
@@ -802,18 +816,6 @@ GNUNET_CURL_download_get_result_ (struct GNUNET_CURL_DownloadBuffer *db,
802 GNUNET_free (db->buf); 816 GNUNET_free (db->buf);
803 db->buf = NULL; 817 db->buf = NULL;
804 db->buf_size = 0; 818 db->buf_size = 0;
805 if (NULL != json)
806 {
807 if (CURLE_OK !=
808 curl_easy_getinfo (eh,
809 CURLINFO_RESPONSE_CODE,
810 response_code))
811 {
812 /* unexpected error... */
813 GNUNET_break (0);
814 *response_code = 0;
815 }
816 }
817 return json; 819 return json;
818} 820}
819 821
@@ -825,8 +827,9 @@ GNUNET_CURL_download_get_result_ (struct GNUNET_CURL_DownloadBuffer *db,
825 * @param header header string; will be given to the context AS IS. 827 * @param header header string; will be given to the context AS IS.
826 * @return #GNUNET_OK if no errors occurred, #GNUNET_SYSERR otherwise. 828 * @return #GNUNET_OK if no errors occurred, #GNUNET_SYSERR otherwise.
827 */ 829 */
828int 830enum GNUNET_GenericReturnValue
829GNUNET_CURL_append_header (struct GNUNET_CURL_Context *ctx, const char *header) 831GNUNET_CURL_append_header (struct GNUNET_CURL_Context *ctx,
832 const char *header)
830{ 833{
831 ctx->common_headers = curl_slist_append (ctx->common_headers, header); 834 ctx->common_headers = curl_slist_append (ctx->common_headers, header);
832 if (NULL == ctx->common_headers) 835 if (NULL == ctx->common_headers)
@@ -892,7 +895,7 @@ do_benchmark (CURLMsg *cmsg)
892 curl -w "foo%{size_request} -XPOST --data "ABC" $URL 895 curl -w "foo%{size_request} -XPOST --data "ABC" $URL
893 the CURLINFO_REQUEST_SIZE should be the whole size of the request 896 the CURLINFO_REQUEST_SIZE should be the whole size of the request
894 including headers and body. 897 including headers and body.
895 */// 898 */
896 GNUNET_break (size_curl <= size_long); 899 GNUNET_break (size_curl <= size_long);
897 900
898 urd = get_url_benchmark_data (url, (unsigned int) response_code); 901 urd = get_url_benchmark_data (url, (unsigned int) response_code);
diff --git a/src/datacache/plugin_datacache_postgres.c b/src/datacache/plugin_datacache_postgres.c
index 724324ca4..6613ae928 100644
--- a/src/datacache/plugin_datacache_postgres.c
+++ b/src/datacache/plugin_datacache_postgres.c
@@ -306,7 +306,7 @@ postgres_plugin_get (void *cls,
306{ 306{
307 struct Plugin *plugin = cls; 307 struct Plugin *plugin = cls;
308 uint32_t type32 = (uint32_t) type; 308 uint32_t type32 = (uint32_t) type;
309 struct GNUNET_TIME_Absolute now; 309 struct GNUNET_TIME_Absolute now = { 0 };
310 struct GNUNET_PQ_QueryParam paramk[] = { 310 struct GNUNET_PQ_QueryParam paramk[] = {
311 GNUNET_PQ_query_param_auto_from_type (key), 311 GNUNET_PQ_query_param_auto_from_type (key),
312 GNUNET_PQ_query_param_absolute_time (&now), 312 GNUNET_PQ_query_param_absolute_time (&now),
@@ -424,7 +424,7 @@ postgres_plugin_get_random (void *cls,
424{ 424{
425 struct Plugin *plugin = cls; 425 struct Plugin *plugin = cls;
426 uint32_t off; 426 uint32_t off;
427 struct GNUNET_TIME_Absolute now; 427 struct GNUNET_TIME_Absolute now = { 0 };
428 struct GNUNET_TIME_Absolute expiration_time; 428 struct GNUNET_TIME_Absolute expiration_time;
429 size_t data_size; 429 size_t data_size;
430 void *data; 430 void *data;
diff --git a/src/datacache/plugin_datacache_sqlite.c b/src/datacache/plugin_datacache_sqlite.c
index a7da6b068..66ff9e82c 100644
--- a/src/datacache/plugin_datacache_sqlite.c
+++ b/src/datacache/plugin_datacache_sqlite.c
@@ -468,7 +468,7 @@ sqlite_plugin_get_random (void *cls,
468 struct GNUNET_TIME_Absolute exp; 468 struct GNUNET_TIME_Absolute exp;
469 size_t size; 469 size_t size;
470 void *dat; 470 void *dat;
471 uint32_t off; 471 uint32_t off = 0;
472 size_t psize; 472 size_t psize;
473 uint32_t type; 473 uint32_t type;
474 struct GNUNET_PeerIdentity *path; 474 struct GNUNET_PeerIdentity *path;
diff --git a/src/datastore/datastore_api.c b/src/datastore/datastore_api.c
index d658b9c85..a49bc8586 100644
--- a/src/datastore/datastore_api.c
+++ b/src/datastore/datastore_api.c
@@ -1400,7 +1400,7 @@ GNUNET_DATASTORE_get_key (struct GNUNET_DATASTORE_Handle *h,
1400 LOG (GNUNET_ERROR_TYPE_DEBUG, 1400 LOG (GNUNET_ERROR_TYPE_DEBUG,
1401 "Asked to look for data of type %u under key `%s'\n", 1401 "Asked to look for data of type %u under key `%s'\n",
1402 (unsigned int) type, 1402 (unsigned int) type,
1403 GNUNET_h2s (key)); 1403 (NULL != key) ? GNUNET_h2s (key) : "NULL");
1404 if (NULL == key) 1404 if (NULL == key)
1405 { 1405 {
1406 env = GNUNET_MQ_msg (gm, 1406 env = GNUNET_MQ_msg (gm,
@@ -1430,7 +1430,7 @@ GNUNET_DATASTORE_get_key (struct GNUNET_DATASTORE_Handle *h,
1430 { 1430 {
1431 LOG (GNUNET_ERROR_TYPE_DEBUG, 1431 LOG (GNUNET_ERROR_TYPE_DEBUG,
1432 "Could not queue request for `%s'\n", 1432 "Could not queue request for `%s'\n",
1433 GNUNET_h2s (key)); 1433 (NULL != key) ? GNUNET_h2s (key): "NULL");
1434 return NULL; 1434 return NULL;
1435 } 1435 }
1436#if INSANE_STATISTICS 1436#if INSANE_STATISTICS
diff --git a/src/datastore/plugin_datastore_mysql.c b/src/datastore/plugin_datastore_mysql.c
index 4f0e0838e..216a6faa4 100644
--- a/src/datastore/plugin_datastore_mysql.c
+++ b/src/datastore/plugin_datastore_mysql.c
@@ -994,7 +994,7 @@ mysql_plugin_get_expiration (void *cls,
994 void *proc_cls) 994 void *proc_cls)
995{ 995{
996 struct Plugin *plugin = cls; 996 struct Plugin *plugin = cls;
997 struct GNUNET_TIME_Absolute now; 997 struct GNUNET_TIME_Absolute now = { 0 };
998 struct GNUNET_MY_QueryParam params_select[] = { 998 struct GNUNET_MY_QueryParam params_select[] = {
999 GNUNET_MY_query_param_absolute_time (&now), 999 GNUNET_MY_query_param_absolute_time (&now),
1000 GNUNET_MY_query_param_end 1000 GNUNET_MY_query_param_end
diff --git a/src/datastore/plugin_datastore_postgres.c b/src/datastore/plugin_datastore_postgres.c
index 66929f91a..8fb0bf6ee 100644
--- a/src/datastore/plugin_datastore_postgres.c
+++ b/src/datastore/plugin_datastore_postgres.c
@@ -729,7 +729,7 @@ postgres_plugin_get_expiration (void *cls,
729 void *proc_cls) 729 void *proc_cls)
730{ 730{
731 struct Plugin *plugin = cls; 731 struct Plugin *plugin = cls;
732 struct GNUNET_TIME_Absolute now; 732 struct GNUNET_TIME_Absolute now = { 0 };
733 struct GNUNET_PQ_QueryParam params[] = { 733 struct GNUNET_PQ_QueryParam params[] = {
734 GNUNET_PQ_query_param_absolute_time (&now), 734 GNUNET_PQ_query_param_absolute_time (&now),
735 GNUNET_PQ_query_param_end 735 GNUNET_PQ_query_param_end
diff --git a/src/datastore/plugin_datastore_sqlite.c b/src/datastore/plugin_datastore_sqlite.c
index f58955b7b..3c2d7f2d4 100644
--- a/src/datastore/plugin_datastore_sqlite.c
+++ b/src/datastore/plugin_datastore_sqlite.c
@@ -1029,7 +1029,7 @@ sqlite_plugin_get_replication (void *cls,
1029{ 1029{
1030 struct Plugin *plugin = cls; 1030 struct Plugin *plugin = cls;
1031 struct ReplCtx rc; 1031 struct ReplCtx rc;
1032 uint64_t rvalue; 1032 uint64_t rvalue = 0;
1033 uint32_t repl; 1033 uint32_t repl;
1034 struct GNUNET_SQ_QueryParam params_sel_repl[] = 1034 struct GNUNET_SQ_QueryParam params_sel_repl[] =
1035 { GNUNET_SQ_query_param_uint64 (&rvalue), 1035 { GNUNET_SQ_query_param_uint64 (&rvalue),
@@ -1096,7 +1096,7 @@ sqlite_plugin_get_expiration (void *cls,
1096{ 1096{
1097 struct Plugin *plugin = cls; 1097 struct Plugin *plugin = cls;
1098 sqlite3_stmt *stmt; 1098 sqlite3_stmt *stmt;
1099 struct GNUNET_TIME_Absolute now; 1099 struct GNUNET_TIME_Absolute now = { 0 };
1100 struct GNUNET_SQ_QueryParam params[] = { GNUNET_SQ_query_param_absolute_time ( 1100 struct GNUNET_SQ_QueryParam params[] = { GNUNET_SQ_query_param_absolute_time (
1101 &now), 1101 &now),
1102 GNUNET_SQ_query_param_end }; 1102 GNUNET_SQ_query_param_end };
diff --git a/src/dht/Makefile.am b/src/dht/Makefile.am
index 2182d1c7f..919eca438 100644
--- a/src/dht/Makefile.am
+++ b/src/dht/Makefile.am
@@ -112,6 +112,7 @@ gnunet_dht_profiler_LDADD = \
112 libgnunetdht.la \ 112 libgnunetdht.la \
113 $(top_builddir)/src/core/libgnunetcore.la \ 113 $(top_builddir)/src/core/libgnunetcore.la \
114 $(top_builddir)/src/util/libgnunetutil.la \ 114 $(top_builddir)/src/util/libgnunetutil.la \
115 $(top_builddir)/src/testing/libgnunettesting.la \
115 $(top_builddir)/src/testbed/libgnunettestbed.la 116 $(top_builddir)/src/testbed/libgnunettestbed.la
116gnunet_dht_profiler_LDFLAGS = \ 117gnunet_dht_profiler_LDFLAGS = \
117 $(GN_LIBINTL) 118 $(GN_LIBINTL)
diff --git a/src/dht/gnunet-service-dht_neighbours.c b/src/dht/gnunet-service-dht_neighbours.c
index 2c30f0b68..ca255310c 100644
--- a/src/dht/gnunet-service-dht_neighbours.c
+++ b/src/dht/gnunet-service-dht_neighbours.c
@@ -894,7 +894,7 @@ get_distance (const struct GNUNET_HashCode *target,
894 unsigned int bucket) 894 unsigned int bucket)
895{ 895{
896 uint64_t lsb = 0; 896 uint64_t lsb = 0;
897 897
898 for (unsigned int i = bucket + 1; 898 for (unsigned int i = bucket + 1;
899 (i < sizeof(struct GNUNET_HashCode) * 8) && 899 (i < sizeof(struct GNUNET_HashCode) * 8) &&
900 (i < bucket + 1 + 64); 900 (i < bucket + 1 + 64);
@@ -997,14 +997,15 @@ select_peer (const struct GNUNET_HashCode *key,
997 chosen = NULL; 997 chosen = NULL;
998 for (bc = 0; bc <= closest_bucket; bc++) 998 for (bc = 0; bc <= closest_bucket; bc++)
999 { 999 {
1000 pos = k_buckets[bc].head;
1001 count = 0; 1000 count = 0;
1002 while ( (pos != NULL) && 1001 for (pos = k_buckets[bc].head;
1003 (count < bucket_size) ) 1002 (pos != NULL) &&
1003 (count < bucket_size);
1004 pos = pos->next)
1004 { 1005 {
1005 unsigned int bucket; 1006 unsigned int bucket;
1006 uint64_t dist; 1007 uint64_t dist;
1007 1008
1008 bucket = GNUNET_CRYPTO_hash_matching_bits (key, 1009 bucket = GNUNET_CRYPTO_hash_matching_bits (key,
1009 &pos->phash); 1010 &pos->phash);
1010 dist = get_distance (key, 1011 dist = get_distance (key,
@@ -1037,7 +1038,6 @@ select_peer (const struct GNUNET_HashCode *key,
1037 chosen = NULL; 1038 chosen = NULL;
1038 } 1039 }
1039 count++; 1040 count++;
1040 pos = pos->next;
1041 } 1041 }
1042 } 1042 }
1043 if (NULL == chosen) 1043 if (NULL == chosen)
diff --git a/src/dhtu/plugin_dhtu_ip.c b/src/dhtu/plugin_dhtu_ip.c
index f80325cbc..8593a69ef 100644
--- a/src/dhtu/plugin_dhtu_ip.c
+++ b/src/dhtu/plugin_dhtu_ip.c
@@ -64,12 +64,12 @@ struct GNUNET_DHTU_Source
64 * Address in URL form ("ip+udp://$IP:$PORT") 64 * Address in URL form ("ip+udp://$IP:$PORT")
65 */ 65 */
66 char *address; 66 char *address;
67 67
68 /** 68 /**
69 * Hash of the IP address. 69 * Hash of the IP address.
70 */ 70 */
71 struct GNUNET_DHTU_Hash id; 71 struct GNUNET_DHTU_Hash id;
72 72
73 /** 73 /**
74 * My actual address. 74 * My actual address.
75 */ 75 */
@@ -79,12 +79,12 @@ struct GNUNET_DHTU_Source
79 * Number of bytes in @a addr. 79 * Number of bytes in @a addr.
80 */ 80 */
81 socklen_t addrlen; 81 socklen_t addrlen;
82 82
83 /** 83 /**
84 * Last generation this address was observed. 84 * Last generation this address was observed.
85 */ 85 */
86 unsigned int scan_generation; 86 unsigned int scan_generation;
87 87
88}; 88};
89 89
90 90
@@ -104,12 +104,12 @@ struct GNUNET_DHTU_Target
104 * Kept in a DLL. 104 * Kept in a DLL.
105 */ 105 */
106 struct GNUNET_DHTU_Target *prev; 106 struct GNUNET_DHTU_Target *prev;
107 107
108 /** 108 /**
109 * Application context for this target. 109 * Application context for this target.
110 */ 110 */
111 void *app_ctx; 111 void *app_ctx;
112 112
113 /** 113 /**
114 * Hash of the IP address. 114 * Hash of the IP address.
115 */ 115 */
@@ -124,7 +124,7 @@ struct GNUNET_DHTU_Target
124 * Tail of preferences expressed for this target. 124 * Tail of preferences expressed for this target.
125 */ 125 */
126 struct GNUNET_DHTU_PreferenceHandle *ph_tail; 126 struct GNUNET_DHTU_PreferenceHandle *ph_tail;
127 127
128 /** 128 /**
129 * Target IP address. 129 * Target IP address.
130 */ 130 */
@@ -134,7 +134,7 @@ struct GNUNET_DHTU_Target
134 * Number of bytes in @a addr. 134 * Number of bytes in @a addr.
135 */ 135 */
136 socklen_t addrlen; 136 socklen_t addrlen;
137 137
138 /** 138 /**
139 * Preference counter, length of the @a ph_head DLL. 139 * Preference counter, length of the @a ph_head DLL.
140 */ 140 */
@@ -170,7 +170,7 @@ struct GNUNET_DHTU_PreferenceHandle
170 */ 170 */
171struct Plugin 171struct Plugin
172{ 172{
173 /** 173 /**
174 * Callbacks into the DHT. 174 * Callbacks into the DHT.
175 */ 175 */
176 struct GNUNET_DHTU_PluginEnvironment *env; 176 struct GNUNET_DHTU_PluginEnvironment *env;
@@ -200,7 +200,7 @@ struct Plugin
200 * Map from hashes of sockaddrs to targets. 200 * Map from hashes of sockaddrs to targets.
201 */ 201 */
202 struct GNUNET_CONTAINER_MultiHashMap *dsts; 202 struct GNUNET_CONTAINER_MultiHashMap *dsts;
203 203
204 /** 204 /**
205 * Task that scans for IP address changes. 205 * Task that scans for IP address changes.
206 */ 206 */
@@ -212,7 +212,7 @@ struct Plugin
212 struct GNUNET_SCHEDULER_Task *read_task; 212 struct GNUNET_SCHEDULER_Task *read_task;
213 213
214 /** 214 /**
215 * Port we bind to. 215 * Port we bind to.
216 */ 216 */
217 char *port; 217 char *port;
218 218
@@ -290,7 +290,7 @@ create_target (struct Plugin *plugin,
290 GNUNET_CONTAINER_multihashmap_size (plugin->dsts)) 290 GNUNET_CONTAINER_multihashmap_size (plugin->dsts))
291 { 291 {
292 struct GNUNET_HashCode key; 292 struct GNUNET_HashCode key;
293 293
294 dst = NULL; 294 dst = NULL;
295 for (struct GNUNET_DHTU_Target *pos = plugin->dst_head; 295 for (struct GNUNET_DHTU_Target *pos = plugin->dst_head;
296 NULL != pos; 296 NULL != pos;
@@ -316,7 +316,7 @@ create_target (struct Plugin *plugin,
316 GNUNET_assert (NULL == dst->ph_head); 316 GNUNET_assert (NULL == dst->ph_head);
317 GNUNET_free (dst); 317 GNUNET_free (dst);
318 } 318 }
319 pk.size = htons (sizeof (pk)); 319 pk.size = htons (sizeof (pk));
320 dst = GNUNET_new (struct GNUNET_DHTU_Target); 320 dst = GNUNET_new (struct GNUNET_DHTU_Target);
321 dst->addrlen = addrlen; 321 dst->addrlen = addrlen;
322 memcpy (&dst->addr, 322 memcpy (&dst->addr,
@@ -391,10 +391,10 @@ find_target (struct Plugin *plugin,
391 addrlen); 391 addrlen);
392 GNUNET_assert (GNUNET_YES == 392 GNUNET_assert (GNUNET_YES ==
393 GNUNET_CONTAINER_multihashmap_put ( 393 GNUNET_CONTAINER_multihashmap_put (
394 plugin->dsts, 394 plugin->dsts,
395 &key, 395 &key,
396 dst, 396 dst,
397 GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY)); 397 GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
398 } 398 }
399 else 399 else
400 { 400 {
@@ -429,7 +429,7 @@ ip_try_connect (void *cls,
429 .ai_flags = AI_NUMERICHOST | AI_NUMERICSERV 429 .ai_flags = AI_NUMERICHOST | AI_NUMERICSERV
430 }; 430 };
431 struct addrinfo *result = NULL; 431 struct addrinfo *result = NULL;
432 432
433 if (0 != 433 if (0 !=
434 strncmp (address, 434 strncmp (address,
435 "ip+", 435 "ip+",
@@ -481,7 +481,7 @@ ip_try_connect (void *cls,
481 * Request underlay to keep the connection to @a target alive if possible. 481 * Request underlay to keep the connection to @a target alive if possible.
482 * Hold may be called multiple times to express a strong preference to 482 * Hold may be called multiple times to express a strong preference to
483 * keep a connection, say because a @a target is in multiple tables. 483 * keep a connection, say because a @a target is in multiple tables.
484 * 484 *
485 * @param cls closure 485 * @param cls closure
486 * @param target connection to keep alive 486 * @param target connection to keep alive
487 */ 487 */
@@ -503,7 +503,7 @@ ip_hold (void *cls,
503 503
504/** 504/**
505 * Do no long request underlay to keep the connection alive. 505 * Do no long request underlay to keep the connection alive.
506 * 506 *
507 * @param cls closure 507 * @param cls closure
508 * @param target connection to keep alive 508 * @param target connection to keep alive
509 */ 509 */
@@ -511,7 +511,7 @@ static void
511ip_drop (struct GNUNET_DHTU_PreferenceHandle *ph) 511ip_drop (struct GNUNET_DHTU_PreferenceHandle *ph)
512{ 512{
513 struct GNUNET_DHTU_Target *target = ph->target; 513 struct GNUNET_DHTU_Target *target = ph->target;
514 514
515 GNUNET_CONTAINER_DLL_remove (target->ph_head, 515 GNUNET_CONTAINER_DLL_remove (target->ph_head,
516 target->ph_tail, 516 target->ph_tail,
517 ph); 517 ph);
@@ -532,7 +532,7 @@ ip_drop (struct GNUNET_DHTU_PreferenceHandle *ph)
532 * @param msg_size number of bytes in @a msg 532 * @param msg_size number of bytes in @a msg
533 * @param finished_cb function called once transmission is done 533 * @param finished_cb function called once transmission is done
534 * (not called if @a target disconnects, then only the 534 * (not called if @a target disconnects, then only the
535 * disconnect_cb is called). 535 * disconnect_cb is called).
536 * @param finished_cb_cls closure for @a finished_cb 536 * @param finished_cb_cls closure for @a finished_cb
537 */ 537 */
538static void 538static void
@@ -568,7 +568,7 @@ create_source (struct Plugin *plugin,
568 socklen_t addrlen) 568 socklen_t addrlen)
569{ 569{
570 struct GNUNET_DHTU_Source *src; 570 struct GNUNET_DHTU_Source *src;
571 571
572 src = GNUNET_new (struct GNUNET_DHTU_Source); 572 src = GNUNET_new (struct GNUNET_DHTU_Source);
573 src->addrlen = addrlen; 573 src->addrlen = addrlen;
574 memcpy (&src->addr, 574 memcpy (&src->addr,
@@ -731,7 +731,7 @@ find_source (struct Plugin *plugin,
731 (0 == memcmp (addr, 731 (0 == memcmp (addr,
732 &src->addr, 732 &src->addr,
733 addrlen)) ) 733 addrlen)) )
734 return src; 734 return src;
735 } 735 }
736 736
737 return create_source (plugin, 737 return create_source (plugin,
@@ -788,7 +788,7 @@ read_cb (void *cls)
788 cmsg->cmsg_len) 788 cmsg->cmsg_len)
789 { 789 {
790 struct in_pktinfo pi; 790 struct in_pktinfo pi;
791 791
792 memcpy (&pi, 792 memcpy (&pi,
793 CMSG_DATA (cmsg), 793 CMSG_DATA (cmsg),
794 sizeof (pi)); 794 sizeof (pi));
@@ -797,7 +797,7 @@ read_cb (void *cls)
797 .sin_family = AF_INET, 797 .sin_family = AF_INET,
798 .sin_addr = pi.ipi_addr 798 .sin_addr = pi.ipi_addr
799 }; 799 };
800 800
801 src = find_source (plugin, 801 src = find_source (plugin,
802 &sa, 802 &sa,
803 sizeof (sa)); 803 sizeof (sa));
@@ -814,7 +814,7 @@ read_cb (void *cls)
814 cmsg->cmsg_len) 814 cmsg->cmsg_len)
815 { 815 {
816 struct in6_pktinfo pi; 816 struct in6_pktinfo pi;
817 817
818 memcpy (&pi, 818 memcpy (&pi,
819 CMSG_DATA (cmsg), 819 CMSG_DATA (cmsg),
820 sizeof (pi)); 820 sizeof (pi));
@@ -824,7 +824,7 @@ read_cb (void *cls)
824 .sin6_addr = pi.ipi6_addr, 824 .sin6_addr = pi.ipi6_addr,
825 .sin6_scope_id = pi.ipi6_ifindex 825 .sin6_scope_id = pi.ipi6_ifindex
826 }; 826 };
827 827
828 src = find_source (plugin, 828 src = find_source (plugin,
829 &sa, 829 &sa,
830 sizeof (sa)); 830 sizeof (sa));
@@ -833,7 +833,7 @@ read_cb (void *cls)
833 } 833 }
834 else 834 else
835 GNUNET_break (0); 835 GNUNET_break (0);
836 } 836 }
837 } 837 }
838 dst = find_target (plugin, 838 dst = find_target (plugin,
839 &sa, 839 &sa,
@@ -932,7 +932,8 @@ libgnunet_plugin_dhtu_ip_init (void *cls)
932 GNUNET_free (plugin); 932 GNUNET_free (plugin);
933 return NULL; 933 return NULL;
934 } 934 }
935 switch (af) { 935 switch (af)
936 {
936 case AF_INET: 937 case AF_INET:
937 { 938 {
938 int on = 1; 939 int on = 1;
@@ -956,7 +957,7 @@ libgnunet_plugin_dhtu_ip_init (void *cls)
956 957
957 if (0 != 958 if (0 !=
958 bind (sock, 959 bind (sock,
959 &sa, 960 (const struct sockaddr *) &sa,
960 sizeof (sa))) 961 sizeof (sa)))
961 { 962 {
962 GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, 963 GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR,
@@ -989,10 +990,10 @@ libgnunet_plugin_dhtu_ip_init (void *cls)
989 .sin6_family = AF_INET6, 990 .sin6_family = AF_INET6,
990 .sin6_port = htons ((uint16_t) nport) 991 .sin6_port = htons ((uint16_t) nport)
991 }; 992 };
992 993
993 if (0 != 994 if (0 !=
994 bind (sock, 995 bind (sock,
995 &sa, 996 (const struct sockaddr *) &sa,
996 sizeof (sa))) 997 sizeof (sa)))
997 { 998 {
998 GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, 999 GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR,
diff --git a/src/dns/Makefile.am b/src/dns/Makefile.am
index 45107304b..f8672d55e 100644
--- a/src/dns/Makefile.am
+++ b/src/dns/Makefile.am
@@ -83,10 +83,6 @@ libgnunet_plugin_block_dns_la_LIBADD = \
83 $(top_builddir)/src/block/libgnunetblockgroup.la \ 83 $(top_builddir)/src/block/libgnunetblockgroup.la \
84 $(top_builddir)/src/block/libgnunetblock.la \ 84 $(top_builddir)/src/block/libgnunetblock.la \
85 $(top_builddir)/src/util/libgnunetutil.la 85 $(top_builddir)/src/util/libgnunetutil.la
86libgnunet_plugin_block_dns_la_DEPENDENCIES = \
87 $(top_builddir)/src/block/libgnunetblockgroup.la \
88 $(top_builddir)/src/block/libgnunetblock.la \
89 $(top_builddir)/src/util/libgnunetutil.la
90libgnunet_plugin_block_dns_la_LDFLAGS = \ 86libgnunet_plugin_block_dns_la_LDFLAGS = \
91 $(GN_LIBINTL) \ 87 $(GN_LIBINTL) \
92 $(top_builddir)/src/block/$(GN_PLUGIN_LDFLAGS) 88 $(top_builddir)/src/block/$(GN_PLUGIN_LDFLAGS)
@@ -99,5 +95,3 @@ endif
99 95
100EXTRA_DIST = \ 96EXTRA_DIST = \
101 $(check_SCRIPTS) 97 $(check_SCRIPTS)
102
103
diff --git a/src/fs/Makefile.am b/src/fs/Makefile.am
index 25590c6f7..5b6ba2376 100644
--- a/src/fs/Makefile.am
+++ b/src/fs/Makefile.am
@@ -49,10 +49,6 @@ libgnunetfs_la_LIBADD = \
49 $(top_builddir)/src/statistics/libgnunetstatistics.la \ 49 $(top_builddir)/src/statistics/libgnunetstatistics.la \
50 $(top_builddir)/src/util/libgnunetutil.la \ 50 $(top_builddir)/src/util/libgnunetutil.la \
51 $(GN_LIBINTL) $(XLIB) $(LIBGCRYPT_LIBS) -lunistring 51 $(GN_LIBINTL) $(XLIB) $(LIBGCRYPT_LIBS) -lunistring
52libgnunetfs_la_DEPENDENCIES = \
53 $(top_builddir)/src/datastore/libgnunetdatastore.la \
54 $(top_builddir)/src/statistics/libgnunetstatistics.la \
55 $(top_builddir)/src/util/libgnunetutil.la
56 52
57if HAVE_LIBEXTRACTOR 53if HAVE_LIBEXTRACTOR
58libgnunetfs_la_LIBADD += \ 54libgnunetfs_la_LIBADD += \
@@ -105,6 +101,7 @@ endif
105gnunet_fs_profiler_SOURCES = \ 101gnunet_fs_profiler_SOURCES = \
106 gnunet-fs-profiler.c 102 gnunet-fs-profiler.c
107gnunet_fs_profiler_LDADD = \ 103gnunet_fs_profiler_LDADD = \
104 $(top_builddir)/src/testing/libgnunettesting.la \
108 $(top_builddir)/src/testbed/libgnunettestbed.la \ 105 $(top_builddir)/src/testbed/libgnunettestbed.la \
109 $(top_builddir)/src/util/libgnunetutil.la \ 106 $(top_builddir)/src/util/libgnunetutil.la \
110 $(GN_LIBINTL) 107 $(GN_LIBINTL)
diff --git a/src/gns/gnunet-gns-proxy.c b/src/gns/gnunet-gns-proxy.c
index 5e3f9d6df..ec9fb12ae 100644
--- a/src/gns/gnunet-gns-proxy.c
+++ b/src/gns/gnunet-gns-proxy.c
@@ -1264,7 +1264,7 @@ curl_check_hdr (void *buffer,
1264 } 1264 }
1265 GNUNET_free (leho_host); 1265 GNUNET_free (leho_host);
1266 } 1266 }
1267 if (0 == strcasecmp (MHD_HTTP_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN, 1267 else if (0 == strcasecmp (MHD_HTTP_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN,
1268 hdr_type)) 1268 hdr_type))
1269 { 1269 {
1270 char *leho_host; 1270 char *leho_host;
diff --git a/src/gnsrecord/Makefile.am b/src/gnsrecord/Makefile.am
index 27f5446a1..42ac4ede4 100644
--- a/src/gnsrecord/Makefile.am
+++ b/src/gnsrecord/Makefile.am
@@ -53,8 +53,6 @@ libgnunetgnsrecord_la_LIBADD = \
53 $(LIBGCRYPT_LIBS) \ 53 $(LIBGCRYPT_LIBS) \
54 -lsodium \ 54 -lsodium \
55 $(GN_LIBINTL) 55 $(GN_LIBINTL)
56libgnunetgnsrecord_la_DEPENDENCIES = \
57 $(top_builddir)/src/identity/libgnunetidentity.la
58libgnunetgnsrecord_la_LDFLAGS = \ 56libgnunetgnsrecord_la_LDFLAGS = \
59 $(GN_LIB_LDFLAGS) \ 57 $(GN_LIB_LDFLAGS) \
60 -version-info 0:0:0 58 -version-info 0:0:0
diff --git a/src/hostlist/hostlist.conf b/src/hostlist/hostlist.conf
index 0a31a23ad..d994ce9fb 100644
--- a/src/hostlist/hostlist.conf
+++ b/src/hostlist/hostlist.conf
@@ -20,7 +20,7 @@ HOSTLISTFILE = $GNUNET_CONFIG_HOME/hostlist/learned.txt
20OPTIONS = -b 20OPTIONS = -b
21 21
22# Default list of hostlist servers for bootstrapping 22# Default list of hostlist servers for bootstrapping
23SERVERS = http://v14.gnunet.org/hostlist https://gnunet.io/hostlist 23SERVERS = http://v15.gnunet.org/hostlist https://gnunet.io/hostlist
24# http://silent.0xdeadc0de.eu:8080/ 24# http://silent.0xdeadc0de.eu:8080/
25 25
26# bind hostlist http server to a specific IPv4 26# bind hostlist http server to a specific IPv4
diff --git a/src/identity/identity_api.c b/src/identity/identity_api.c
index 3bbe0b957..22371f91a 100644
--- a/src/identity/identity_api.c
+++ b/src/identity/identity_api.c
@@ -1236,14 +1236,12 @@ GNUNET_IDENTITY_public_key_from_string (const char *str,
1236 struct GNUNET_IDENTITY_PublicKey *key) 1236 struct GNUNET_IDENTITY_PublicKey *key)
1237{ 1237{
1238 enum GNUNET_GenericReturnValue ret; 1238 enum GNUNET_GenericReturnValue ret;
1239 enum GNUNET_IDENTITY_KeyType ktype;
1240 ret = GNUNET_STRINGS_string_to_data (str, 1239 ret = GNUNET_STRINGS_string_to_data (str,
1241 strlen (str), 1240 strlen (str),
1242 key, 1241 key,
1243 sizeof (*key)); 1242 sizeof (*key));
1244 if (GNUNET_OK != ret) 1243 if (GNUNET_OK != ret)
1245 return GNUNET_SYSERR; 1244 return GNUNET_SYSERR;
1246 ktype = ntohl (key->type);
1247 return GNUNET_OK; 1245 return GNUNET_OK;
1248 1246
1249} 1247}
@@ -1254,14 +1252,12 @@ GNUNET_IDENTITY_private_key_from_string (const char *str,
1254 struct GNUNET_IDENTITY_PrivateKey *key) 1252 struct GNUNET_IDENTITY_PrivateKey *key)
1255{ 1253{
1256 enum GNUNET_GenericReturnValue ret; 1254 enum GNUNET_GenericReturnValue ret;
1257 enum GNUNET_IDENTITY_KeyType ktype;
1258 ret = GNUNET_STRINGS_string_to_data (str, 1255 ret = GNUNET_STRINGS_string_to_data (str,
1259 strlen (str), 1256 strlen (str),
1260 key, 1257 key,
1261 sizeof (*key)); 1258 sizeof (*key));
1262 if (GNUNET_OK != ret) 1259 if (GNUNET_OK != ret)
1263 return GNUNET_SYSERR; 1260 return GNUNET_SYSERR;
1264 ktype = ntohl (key->type);
1265 return GNUNET_OK; 1261 return GNUNET_OK;
1266} 1262}
1267 1263
diff --git a/src/identity/plugin_rest_identity.c b/src/identity/plugin_rest_identity.c
index dba1d478d..d7cd0e826 100644
--- a/src/identity/plugin_rest_identity.c
+++ b/src/identity/plugin_rest_identity.c
@@ -322,7 +322,9 @@ do_error (void *cls)
322 handle->response_code = MHD_HTTP_OK; 322 handle->response_code = MHD_HTTP_OK;
323 response = json_dumps (json_error, 0); 323 response = json_dumps (json_error, 0);
324 resp = GNUNET_REST_create_response (response); 324 resp = GNUNET_REST_create_response (response);
325 MHD_add_response_header (resp, "Content-Type", "application/json"); 325 GNUNET_assert (MHD_NO != MHD_add_response_header (resp,
326 "Content-Type",
327 "application/json"));
326 handle->proc (handle->proc_cls, resp, handle->response_code); 328 handle->proc (handle->proc_cls, resp, handle->response_code);
327 json_decref (json_error); 329 json_decref (json_error);
328 GNUNET_free (response); 330 GNUNET_free (response);
@@ -412,7 +414,9 @@ ego_get_for_subsystem (void *cls,
412 result_str = json_dumps (json_root, 0); 414 result_str = json_dumps (json_root, 0);
413 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Result %s\n", result_str); 415 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Result %s\n", result_str);
414 resp = GNUNET_REST_create_response (result_str); 416 resp = GNUNET_REST_create_response (result_str);
415 MHD_add_response_header (resp, "Content-Type", "application/json"); 417 GNUNET_assert (MHD_NO != MHD_add_response_header (resp,
418 "Content-Type",
419 "application/json"));
416 json_decref (json_root); 420 json_decref (json_root);
417 handle->proc (handle->proc_cls, resp, MHD_HTTP_OK); 421 handle->proc (handle->proc_cls, resp, MHD_HTTP_OK);
418 GNUNET_free (result_str); 422 GNUNET_free (result_str);
@@ -514,7 +518,9 @@ ego_get_all (struct GNUNET_REST_RequestHandle *con_handle,
514 result_str = json_dumps (json_root, 0); 518 result_str = json_dumps (json_root, 0);
515 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Result %s\n", result_str); 519 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Result %s\n", result_str);
516 resp = GNUNET_REST_create_response (result_str); 520 resp = GNUNET_REST_create_response (result_str);
517 MHD_add_response_header (resp, "Content-Type", "application/json"); 521 GNUNET_assert (MHD_NO != MHD_add_response_header (resp,
522 "Content-Type",
523 "application/json"));
518 json_decref (json_root); 524 json_decref (json_root);
519 handle->proc (handle->proc_cls, resp, MHD_HTTP_OK); 525 handle->proc (handle->proc_cls, resp, MHD_HTTP_OK);
520 GNUNET_free (result_str); 526 GNUNET_free (result_str);
@@ -561,7 +567,9 @@ ego_get_response (struct RequestHandle *handle, struct EgoEntry *ego_entry)
561 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Result %s\n", result_str); 567 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Result %s\n", result_str);
562 resp = GNUNET_REST_create_response (result_str); 568 resp = GNUNET_REST_create_response (result_str);
563 handle->proc (handle->proc_cls, resp, MHD_HTTP_OK); 569 handle->proc (handle->proc_cls, resp, MHD_HTTP_OK);
564 MHD_add_response_header (resp, "Content-Type", "application/json"); 570 GNUNET_assert (MHD_NO != MHD_add_response_header (resp,
571 "Content-Type",
572 "application/json"));
565 json_decref (json_ego); 573 json_decref (json_ego);
566 GNUNET_free (result_str); 574 GNUNET_free (result_str);
567 GNUNET_SCHEDULER_add_now (&cleanup_handle, handle); 575 GNUNET_SCHEDULER_add_now (&cleanup_handle, handle);
@@ -1195,7 +1203,9 @@ options_cont (struct GNUNET_REST_RequestHandle *con_handle,
1195 1203
1196 // For now, independent of path return all options 1204 // For now, independent of path return all options
1197 resp = GNUNET_REST_create_response (NULL); 1205 resp = GNUNET_REST_create_response (NULL);
1198 MHD_add_response_header (resp, "Access-Control-Allow-Methods", allow_methods); 1206 GNUNET_assert (MHD_NO != MHD_add_response_header (resp,
1207 "Access-Control-Allow-Methods",
1208 allow_methods));
1199 handle->proc (handle->proc_cls, resp, MHD_HTTP_OK); 1209 handle->proc (handle->proc_cls, resp, MHD_HTTP_OK);
1200 GNUNET_SCHEDULER_add_now (&cleanup_handle, handle); 1210 GNUNET_SCHEDULER_add_now (&cleanup_handle, handle);
1201 return; 1211 return;
@@ -1216,6 +1226,12 @@ list_ego (void *cls,
1216 state = ID_REST_STATE_POST_INIT; 1226 state = ID_REST_STATE_POST_INIT;
1217 return; 1227 return;
1218 } 1228 }
1229 if (NULL == ego)
1230 {
1231 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
1232 "Called with NULL ego\n");
1233 return;
1234 }
1219 if (ID_REST_STATE_INIT == state) 1235 if (ID_REST_STATE_INIT == state)
1220 { 1236 {
1221 ego_entry = GNUNET_new (struct EgoEntry); 1237 ego_entry = GNUNET_new (struct EgoEntry);
diff --git a/src/include/Makefile.am b/src/include/Makefile.am
index d15186342..9c22b5977 100644
--- a/src/include/Makefile.am
+++ b/src/include/Makefile.am
@@ -115,8 +115,8 @@ gnunetinclude_HEADERS = \
115 gnunet_strings_lib.h \ 115 gnunet_strings_lib.h \
116 gnunet_testbed_service.h \ 116 gnunet_testbed_service.h \
117 gnunet_testbed_logger_service.h \ 117 gnunet_testbed_logger_service.h \
118 gnunet_testbed_ng_service.h \
119 gnunet_testing_lib.h \ 118 gnunet_testing_lib.h \
119 gnunet_testing_plugin.h \
120 gnunet_testing_ng_lib.h \ 120 gnunet_testing_ng_lib.h \
121 gnunet_time_lib.h \ 121 gnunet_time_lib.h \
122 gnunet_transport_service.h \ 122 gnunet_transport_service.h \
diff --git a/src/include/gnunet_common.h b/src/include/gnunet_common.h
index df1ccff26..3ee2a070a 100644
--- a/src/include/gnunet_common.h
+++ b/src/include/gnunet_common.h
@@ -1,6 +1,6 @@
1/* 1/*
2 This file is part of GNUnet. 2 This file is part of GNUnet.
3 Copyright (C) 2006-2020 GNUnet e.V. 3 Copyright (C) 2006-2021 GNUnet e.V.
4 4
5 GNUnet is free software: you can redistribute it and/or modify it 5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published 6 under the terms of the GNU Affero General Public License as published
@@ -135,7 +135,7 @@ enum GNUNET_GenericReturnValue
135 * tree where gnunet_config.h is unavailable 135 * tree where gnunet_config.h is unavailable
136 */ 136 */
137#ifndef GNUNET_EXTRA_LOGGING 137#ifndef GNUNET_EXTRA_LOGGING
138#define GNUNET_EXTRA_LOGGING 0 138#define GNUNET_EXTRA_LOGGING 1
139#endif 139#endif
140 140
141/** 141/**
@@ -875,19 +875,37 @@ GNUNET_error_type_to_string (enum GNUNET_ErrorType kind);
875 * @ingroup logging 875 * @ingroup logging
876 * Use this for fatal errors that cannot be handled 876 * Use this for fatal errors that cannot be handled
877 */ 877 */
878#if __GNUC__ >= 6 || __clang_major__ >= 6
878#define GNUNET_assert(cond) \ 879#define GNUNET_assert(cond) \
879 do \ 880 do \
880 { \ 881 { \
882 _Pragma("GCC diagnostic push") \
883 _Pragma("GCC diagnostic ignored \"-Wtautological-compare\"") \
881 if (! (cond)) \ 884 if (! (cond)) \
882 { \ 885 { \
883 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, \ 886 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, \
884 _ ("Assertion failed at %s:%d. Aborting.\n"), \ 887 dgettext ("gnunet", "Assertion failed at %s:%d. Aborting.\n"), \
885 __FILE__, \ 888 __FILE__, \
886 __LINE__); \ 889 __LINE__); \
887 GNUNET_abort_ (); \ 890 GNUNET_abort_ (); \
888 } \ 891 } \
892 _Pragma("GCC diagnostic pop") \
889 } while (0) 893 } while (0)
890 894#else
895/* older GCC/clangs do not support -Wtautological-compare */
896#define GNUNET_assert(cond) \
897 do \
898 { \
899 if (! (cond)) \
900 { \
901 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, \
902 dgettext ("gnunet", "Assertion failed at %s:%d. Aborting.\n"), \
903 __FILE__, \
904 __LINE__); \
905 GNUNET_abort_ (); \
906 } \
907 } while (0)
908#endif
891 909
892/** 910/**
893 * @ingroup logging 911 * @ingroup logging
@@ -899,7 +917,7 @@ GNUNET_error_type_to_string (enum GNUNET_ErrorType kind);
899 if (! (cond)) \ 917 if (! (cond)) \
900 { \ 918 { \
901 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, \ 919 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, \
902 _ ("Assertion failed at %s:%d. Aborting.\n"), \ 920 dgettext ("gnunet", "Assertion failed at %s:%d. Aborting.\n"), \
903 f, \ 921 f, \
904 l); \ 922 l); \
905 GNUNET_abort_ (); \ 923 GNUNET_abort_ (); \
@@ -921,7 +939,7 @@ GNUNET_error_type_to_string (enum GNUNET_ErrorType kind);
921 { \ 939 { \
922 GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, \ 940 GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, \
923 comp, \ 941 comp, \
924 _ ("Assertion failed at %s:%d. Aborting.\n"), \ 942 dgettext ("gnunet", "Assertion failed at %s:%d. Aborting.\n"), \
925 __FILE__, \ 943 __FILE__, \
926 __LINE__); \ 944 __LINE__); \
927 GNUNET_abort_ (); \ 945 GNUNET_abort_ (); \
@@ -962,7 +980,7 @@ GNUNET_error_type_to_string (enum GNUNET_ErrorType kind);
962 if (! (cond)) \ 980 if (! (cond)) \
963 { \ 981 { \
964 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, \ 982 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, \
965 _ ("Assertion failed at %s:%d.\n"), \ 983 dgettext ("gnunet", "Assertion failed at %s:%d.\n"), \
966 __FILE__, \ 984 __FILE__, \
967 __LINE__); \ 985 __LINE__); \
968 } \ 986 } \
@@ -984,7 +1002,7 @@ GNUNET_error_type_to_string (enum GNUNET_ErrorType kind);
984 if (! (cond)) \ 1002 if (! (cond)) \
985 { \ 1003 { \
986 GNUNET_log (GNUNET_ERROR_TYPE_WARNING | GNUNET_ERROR_TYPE_BULK, \ 1004 GNUNET_log (GNUNET_ERROR_TYPE_WARNING | GNUNET_ERROR_TYPE_BULK, \
987 _ ("External protocol violation detected at %s:%d.\n"), \ 1005 dgettext ("gnunet", "External protocol violation detected at %s:%d.\n"), \
988 __FILE__, \ 1006 __FILE__, \
989 __LINE__); \ 1007 __LINE__); \
990 } \ 1008 } \
@@ -1001,7 +1019,7 @@ GNUNET_error_type_to_string (enum GNUNET_ErrorType kind);
1001 do \ 1019 do \
1002 { \ 1020 { \
1003 GNUNET_log (level, \ 1021 GNUNET_log (level, \
1004 _ ("`%s' failed at %s:%d with error: %s\n"), \ 1022 dgettext ("gnunet", "`%s' failed at %s:%d with error: %s\n"), \
1005 cmd, \ 1023 cmd, \
1006 __FILE__, \ 1024 __FILE__, \
1007 __LINE__, \ 1025 __LINE__, \
@@ -1020,7 +1038,7 @@ GNUNET_error_type_to_string (enum GNUNET_ErrorType kind);
1020 { \ 1038 { \
1021 GNUNET_log_from (level, \ 1039 GNUNET_log_from (level, \
1022 component, \ 1040 component, \
1023 _ ("`%s' failed at %s:%d with error: %s\n"), \ 1041 dgettext ("gnunet", "`%s' failed at %s:%d with error: %s\n"), \
1024 cmd, \ 1042 cmd, \
1025 __FILE__, \ 1043 __FILE__, \
1026 __LINE__, \ 1044 __LINE__, \
@@ -1038,7 +1056,7 @@ GNUNET_error_type_to_string (enum GNUNET_ErrorType kind);
1038 do \ 1056 do \
1039 { \ 1057 { \
1040 GNUNET_log (level, \ 1058 GNUNET_log (level, \
1041 _ ("`%s' failed on file `%s' at %s:%d with error: %s\n"), \ 1059 dgettext ("gnunet", "`%s' failed on file `%s' at %s:%d with error: %s\n"), \
1042 cmd, \ 1060 cmd, \
1043 filename, \ 1061 filename, \
1044 __FILE__, \ 1062 __FILE__, \
@@ -1058,7 +1076,7 @@ GNUNET_error_type_to_string (enum GNUNET_ErrorType kind);
1058 { \ 1076 { \
1059 GNUNET_log_from (level, \ 1077 GNUNET_log_from (level, \
1060 component, \ 1078 component, \
1061 _ ("`%s' failed on file `%s' at %s:%d with error: %s\n"), \ 1079 dgettext ("gnunet", "`%s' failed on file `%s' at %s:%d with error: %s\n"), \
1062 cmd, \ 1080 cmd, \
1063 filename, \ 1081 filename, \
1064 __FILE__, \ 1082 __FILE__, \
diff --git a/src/include/gnunet_configuration_lib.h b/src/include/gnunet_configuration_lib.h
index 21a5ab810..570546b68 100644
--- a/src/include/gnunet_configuration_lib.h
+++ b/src/include/gnunet_configuration_lib.h
@@ -113,6 +113,18 @@ GNUNET_CONFIGURATION_default (void);
113 113
114 114
115/** 115/**
116 * Return the filename of the default configuration filename
117 * that is used when no explicit configuration entry point
118 * has been specified.
119 *
120 * @returns NULL if no default configuration file can be located,
121 * a newly allocated string otherwise
122 */
123char *
124GNUNET_CONFIGURATION_default_filename (void);
125
126
127/**
116 * Parse a configuration file, add all of the options in the 128 * Parse a configuration file, add all of the options in the
117 * file to the configuration environment. 129 * file to the configuration environment.
118 * 130 *
@@ -139,21 +151,33 @@ GNUNET_CONFIGURATION_serialize (const struct GNUNET_CONFIGURATION_Handle *cfg,
139 151
140 152
141/** 153/**
154 * Serializes the given configuration with diagnostics information.
155 * Diagnostics information will only be available if diagnostics
156 * have been enabled before parsing.
157 *
158 * @param cfg configuration to serialize
159 * @return the memory block where the serialized configuration is
160 * present. This memory should be freed by the caller
161 */
162char *
163GNUNET_CONFIGURATION_serialize_diagnostics (const struct
164 GNUNET_CONFIGURATION_Handle *cfg);
165
166/**
142 * De-serializes configuration 167 * De-serializes configuration
143 * 168 *
144 * @param cfg configuration to update 169 * @param cfg configuration to update
145 * @param mem the memory block of serialized configuration 170 * @param mem the memory block of serialized configuration
146 * @param size the size of the memory block 171 * @param size the size of the memory block
147 * @param allow_inline set to the base directory if we recursively load configuration 172 * @param source_filename source filename, will be used
148 * from inlined configurations; NULL if not and raise warnings 173 * to resolve relative @INLINE@ statements
149 * when we come across them
150 * @return #GNUNET_OK on success, #GNUNET_SYSERR on error 174 * @return #GNUNET_OK on success, #GNUNET_SYSERR on error
151 */ 175 */
152enum GNUNET_GenericReturnValue 176enum GNUNET_GenericReturnValue
153GNUNET_CONFIGURATION_deserialize (struct GNUNET_CONFIGURATION_Handle *cfg, 177GNUNET_CONFIGURATION_deserialize (struct GNUNET_CONFIGURATION_Handle *cfg,
154 const char *mem, 178 const char *mem,
155 size_t size, 179 size_t size,
156 const char *basedir); 180 const char *source_filename);
157 181
158 182
159/** 183/**
@@ -235,6 +259,16 @@ GNUNET_CONFIGURATION_parse_and_run (const char *filename,
235 GNUNET_CONFIGURATION_Callback cb, 259 GNUNET_CONFIGURATION_Callback cb,
236 void *cb_cls); 260 void *cb_cls);
237 261
262/**
263 * Enable extra diagnostics. Will produce more log output
264 * and allocate more memory.
265 *
266 * @param cfg configuration handle
267 */
268void
269GNUNET_CONFIGURATION_enable_diagnostics (struct
270 GNUNET_CONFIGURATION_Handle *cfg);
271
238 272
239/** 273/**
240 * Function to iterate over options. 274 * Function to iterate over options.
@@ -598,6 +632,157 @@ GNUNET_CONFIGURATION_append_value_filename (struct
598 const char *option, 632 const char *option,
599 const char *value); 633 const char *value);
600 634
635
636/**
637 * Closure for #GNUNET_CONFIGURATION_config_tool_run()
638 * with settings for what should be done with the
639 * configuration.
640 */
641struct GNUNET_CONFIGURATION_ConfigSettings
642{
643
644 /**
645 * Must be set to the API version, i.e.
646 * #GNUNET_UTIL_VERSION. Used to detect
647 * which version of the struct the client
648 * is using.
649 */
650 unsigned int api_version;
651
652 /**
653 * Name of the section
654 */
655 char *section;
656
657 /**
658 * Name of the option
659 */
660 char *option;
661
662 /**
663 * Value to set
664 */
665 char *value;
666
667 /**
668 * Treat option as a filename.
669 */
670 int is_filename;
671
672 /**
673 * Whether to show the sections.
674 */
675 int list_sections;
676
677 /**
678 * Should we write out the configuration file, even if no value was changed?
679 */
680 int rewrite;
681
682 /**
683 * Should we give extra diagnostics?
684 */
685 int diagnostics;
686
687 /**
688 * Should the generated configuration file contain the whole configuration?
689 */
690 int full;
691
692
693 /**
694 * Return value from the operation, to be returned
695 * from 'main'.
696 */
697 int global_ret;
698
699};
700
701
702/**
703 * Macro that expands to a set of GNUNET-getopt directives
704 * to initialize a `struct GNUNET_CONFIGURATION_ConfigSettings`
705 * from the command line.
706 *
707 * @param cs configuration settings to initialize
708 */
709#define GNUNET_CONFIGURATION_CONFIG_OPTIONS(cs) \
710 GNUNET_GETOPT_option_flag ( \
711 'F', \
712 "full", \
713 gettext_noop ( \
714 "write the full configuration file, including default values"), \
715 &(cs)->full), \
716 GNUNET_GETOPT_option_flag ( \
717 'f', \
718 "filename", \
719 gettext_noop ("interpret option value as a filename (with $-expansion)"), \
720 &(cs)->is_filename), \
721 GNUNET_GETOPT_option_string ('o', \
722 "option", \
723 "OPTION", \
724 gettext_noop ("name of the option to access"), \
725 &(cs)->option), \
726 GNUNET_GETOPT_option_flag ( \
727 'r', \
728 "rewrite", \
729 gettext_noop ( \
730 "rewrite the configuration file, even if nothing changed"), \
731 &(cs)->rewrite), \
732 GNUNET_GETOPT_option_flag ( \
733 'd', \
734 "diagnostics", \
735 gettext_noop ( \
736 "output extra diagnostics"), \
737 &(cs)->diagnostics), \
738 GNUNET_GETOPT_option_flag ('S', \
739 "list-sections", \
740 gettext_noop ( \
741 "print available configuration sections"), \
742 &(cs)->list_sections), \
743 GNUNET_GETOPT_option_string ('s', \
744 "section", \
745 "SECTION", \
746 gettext_noop ( \
747 "name of the section to access"), \
748 &(cs)->section), \
749 GNUNET_GETOPT_option_string ('V', \
750 "value", \
751 "VALUE", \
752 gettext_noop ("value to set"), \
753 &(cs)->value)
754
755
756/**
757 * Free resources associated with @a cs.
758 *
759 * @param[in] cs settings to free (actual memory
760 * of @a cs itself is not released)
761 */
762void
763GNUNET_CONFIGURATION_config_settings_free (
764 struct GNUNET_CONFIGURATION_ConfigSettings *cs);
765
766
767/**
768 * Main task to run to perform operations typical for
769 * gnunet-config as per the configuration settings
770 * given in @a cls.
771 *
772 * @param cls closure with the `struct GNUNET_CONFIGURATION_ConfigSettings`
773 * @param args remaining command-line arguments
774 * @param cfgfile name of the configuration file used (for saving,
775 * can be NULL!)
776 * @param cfg configuration
777 */
778void
779GNUNET_CONFIGURATION_config_tool_run (
780 void *cls,
781 char *const *args,
782 const char *cfgfile,
783 const struct GNUNET_CONFIGURATION_Handle *cfg);
784
785
601#if 0 /* keep Emacsens' auto-indent happy */ 786#if 0 /* keep Emacsens' auto-indent happy */
602{ 787{
603#endif 788#endif
diff --git a/src/include/gnunet_container_lib.h b/src/include/gnunet_container_lib.h
index c8930746d..3eb80595c 100644
--- a/src/include/gnunet_container_lib.h
+++ b/src/include/gnunet_container_lib.h
@@ -2608,7 +2608,8 @@ GNUNET_CONTAINER_heap_node_get_cost (
2608 * @return #GNUNET_YES if we should continue to iterate, 2608 * @return #GNUNET_YES if we should continue to iterate,
2609 * #GNUNET_NO if not. 2609 * #GNUNET_NO if not.
2610 */ 2610 */
2611typedef int (*GNUNET_CONTAINER_HeapIterator) ( 2611typedef int
2612(*GNUNET_CONTAINER_HeapIterator) (
2612 void *cls, 2613 void *cls,
2613 struct GNUNET_CONTAINER_HeapNode *node, 2614 struct GNUNET_CONTAINER_HeapNode *node,
2614 void *element, 2615 void *element,
diff --git a/src/include/gnunet_curl_lib.h b/src/include/gnunet_curl_lib.h
index f51e4b503..38acecc48 100644
--- a/src/include/gnunet_curl_lib.h
+++ b/src/include/gnunet_curl_lib.h
@@ -150,7 +150,7 @@ GNUNET_CURL_get_select_info (struct GNUNET_CURL_Context *ctx,
150 * @param header header string; will be given to the context AS IS. 150 * @param header header string; will be given to the context AS IS.
151 * @return #GNUNET_OK if no errors occurred, #GNUNET_SYSERR otherwise. 151 * @return #GNUNET_OK if no errors occurred, #GNUNET_SYSERR otherwise.
152 */ 152 */
153int 153enum GNUNET_GenericReturnValue
154GNUNET_CURL_append_header (struct GNUNET_CURL_Context *ctx, 154GNUNET_CURL_append_header (struct GNUNET_CURL_Context *ctx,
155 const char *header); 155 const char *header);
156 156
diff --git a/src/include/gnunet_db_lib.h b/src/include/gnunet_db_lib.h
index 85ad13e31..e88e836f6 100644
--- a/src/include/gnunet_db_lib.h
+++ b/src/include/gnunet_db_lib.h
@@ -25,6 +25,7 @@
25#ifndef GNUNET_DB_LIB_H 25#ifndef GNUNET_DB_LIB_H
26#define GNUNET_DB_LIB_H 26#define GNUNET_DB_LIB_H
27 27
28#include "gnunet_common.h"
28 29
29/** 30/**
30 * Status code returned from functions running database commands. 31 * Status code returned from functions running database commands.
@@ -61,4 +62,47 @@ enum GNUNET_DB_QueryStatus
61 that returned more than one result. */ 62 that returned more than one result. */
62}; 63};
63 64
65
66/**
67 * Handle for an active LISTENer to a database.
68 */
69struct GNUNET_DB_EventHandler;
70
71/**
72 * Function called on events received from Postgres.
73 *
74 * @param cls closure
75 * @param extra additional event data provided
76 * @param extra_size number of bytes in @a extra
77 */
78typedef void
79(*GNUNET_DB_EventCallback)(void *cls,
80 const void *extra,
81 size_t extra_size);
82
83GNUNET_NETWORK_STRUCT_BEGIN
84
85
86/**
87 * Header of a structure that describes an
88 * event channel we may subscribe to or notify on.
89 */
90struct GNUNET_DB_EventHeaderP
91{
92 /**
93 * The length of the struct (in bytes, including the length field itself),
94 * in big-endian format.
95 */
96 uint16_t size GNUNET_PACKED;
97
98 /**
99 * The type of the message (GNUNET_DB_EVENT_TYPE_XXXX), in big-endian format.
100 */
101 uint16_t type GNUNET_PACKED;
102
103};
104
105GNUNET_NETWORK_STRUCT_END
106
107
64#endif 108#endif
diff --git a/src/include/gnunet_disk_lib.h b/src/include/gnunet_disk_lib.h
index 3805039fc..7dfd9ccf1 100644
--- a/src/include/gnunet_disk_lib.h
+++ b/src/include/gnunet_disk_lib.h
@@ -266,6 +266,16 @@ GNUNET_DISK_handle_invalid (const struct GNUNET_DISK_FileHandle *h);
266enum GNUNET_GenericReturnValue 266enum GNUNET_GenericReturnValue
267GNUNET_DISK_file_test (const char *fil); 267GNUNET_DISK_file_test (const char *fil);
268 268
269/**
270 * Check that fil corresponds to a filename and the file has read permissions.
271 *
272 * @param fil filename to check
273 * @return #GNUNET_YES if yes, #GNUNET_NO if file doesn't exist or
274 * has no read permissions, #GNUNET_SYSERR if something else
275 * (will print an error message in that case, too).
276 */
277enum GNUNET_GenericReturnValue
278GNUNET_DISK_file_test_read (const char *fil);
269 279
270/** 280/**
271 * Move a file out of the way (create a backup) by renaming it to "orig.NUM~" 281 * Move a file out of the way (create a backup) by renaming it to "orig.NUM~"
@@ -654,6 +664,22 @@ GNUNET_DISK_directory_scan (const char *dir_name,
654 GNUNET_FileNameCallback callback, 664 GNUNET_FileNameCallback callback,
655 void *callback_cls); 665 void *callback_cls);
656 666
667/**
668 * Find all files matching a glob pattern.
669 *
670 * Currently, the glob_pattern only supports asterisks in the last
671 * path component.
672 *
673 * @param glob_patterb the glob pattern to search for
674 * @param callback the method to call for each file
675 * @param callback_cls closure for @a callback
676 * @return the number of files found, -1 on error
677 */
678int
679GNUNET_DISK_glob (const char *glob_pattern,
680 GNUNET_FileNameCallback callback,
681 void *callback_cls);
682
657 683
658/** 684/**
659 * Create the directory structure for storing 685 * Create the directory structure for storing
diff --git a/src/include/gnunet_json_lib.h b/src/include/gnunet_json_lib.h
index 3dc79105e..92f696e08 100644
--- a/src/include/gnunet_json_lib.h
+++ b/src/include/gnunet_json_lib.h
@@ -521,6 +521,310 @@ GNUNET_JSON_getopt (char shortName,
521 const char *description, 521 const char *description,
522 json_t **json); 522 json_t **json);
523 523
524
525/* ****************** JSON PACK helper ******************* */
526
527
528/**
529 * Element in the array to give to the packer.
530 */
531struct GNUNET_JSON_PackSpec;
532
533
534/**
535 * Function called to pack an element into the JSON
536 * object as part of #GNUNET_JSON_pack_().
537 *
538 * @param se pack specification to execute
539 * @return json object to pack, NULL to pack nothing
540 */
541typedef json_t *
542(*GNUNET_JSON_PackCallback)(const struct GNUNET_JSON_PackSpec *se);
543
544
545/**
546 * Element in the array to give to the packer.
547 */
548struct GNUNET_JSON_PackSpec
549{
550 /**
551 * Name of the field to pack.
552 */
553 const char *field_name;
554
555 /**
556 * Object to pack.
557 */
558 json_t *object;
559
560 /**
561 * True if a NULL (or 0) argument is allowed. In this
562 * case, if the argument is NULL the @e packer should
563 * return NULL and the field should be skipped (omitted from
564 * the generated object) and not be serialized at all.
565 */
566 bool allow_null;
567};
568
569
570/**
571 * Pack a JSON object from a @a spec. Aborts if
572 * packing fails.
573 *
574 * @param spec specification object
575 * @return JSON object
576 */
577json_t *
578GNUNET_JSON_pack_ (struct GNUNET_JSON_PackSpec spec[]);
579
580
581/**
582 * Pack a JSON object from a @a spec. Aborts if
583 * packing fails.
584 *
585 * @param ... list of specification objects
586 * @return JSON object
587 */
588#define GNUNET_JSON_PACK(...) \
589 GNUNET_JSON_pack_ ((struct GNUNET_JSON_PackSpec[]) {__VA_ARGS__, \
590 GNUNET_JSON_pack_end_ ()})
591
592
593/**
594 * Do not use directly. Use #GNUNET_JSON_PACK.
595 *
596 * @return array terminator
597 */
598struct GNUNET_JSON_PackSpec
599GNUNET_JSON_pack_end_ (void);
600
601
602/**
603 * Modify packer instruction to allow NULL as a value.
604 *
605 * @param in json pack specification to modify
606 * @return json pack specification
607 */
608struct GNUNET_JSON_PackSpec
609GNUNET_JSON_pack_allow_null (struct GNUNET_JSON_PackSpec in);
610
611
612/**
613 * Generate packer instruction for a JSON field of type
614 * bool.
615 *
616 * @param name name of the field to add to the object
617 * @param b boolean value
618 * @return json pack specification
619 */
620struct GNUNET_JSON_PackSpec
621GNUNET_JSON_pack_bool (const char *name,
622 bool b);
623
624
625/**
626 * Generate packer instruction for a JSON field of type
627 * string.
628 *
629 * @param name name of the field to add to the object
630 * @param s string value
631 * @return json pack specification
632 */
633struct GNUNET_JSON_PackSpec
634GNUNET_JSON_pack_string (const char *name,
635 const char *s);
636
637
638/**
639 * Generate packer instruction for a JSON field of type
640 * unsigned integer. Note that the maximum allowed
641 * value is still limited by JSON and not UINT64_MAX.
642 *
643 * @param name name of the field to add to the object
644 * @param num numeric value
645 * @return json pack specification
646 */
647struct GNUNET_JSON_PackSpec
648GNUNET_JSON_pack_uint64 (const char *name,
649 uint64_t num);
650
651
652/**
653 * Generate packer instruction for a JSON field of type
654 * signed integer.
655 *
656 * @param name name of the field to add to the object
657 * @param num numeric value
658 * @return json pack specification
659 */
660struct GNUNET_JSON_PackSpec
661GNUNET_JSON_pack_int64 (const char *name,
662 int64_t num);
663
664
665/**
666 * Generate packer instruction for a JSON field of type
667 * JSON object where the reference is taken over by
668 * the packer.
669 *
670 * @param name name of the field to add to the object
671 * @param o object to steal
672 * @return json pack specification
673 */
674struct GNUNET_JSON_PackSpec
675GNUNET_JSON_pack_object_steal (const char *name,
676 json_t *o);
677
678
679/**
680 * Generate packer instruction for a JSON field of type JSON object where the
681 * reference counter is incremented by the packer. Note that a deep copy is
682 * not performed.
683 *
684 * @param name name of the field to add to the object
685 * @param o object to increment reference counter of
686 * @return json pack specification
687 */
688struct GNUNET_JSON_PackSpec
689GNUNET_JSON_pack_object_incref (const char *name,
690 json_t *o);
691
692
693/**
694 * Generate packer instruction for a JSON field of type
695 * JSON array where the reference is taken over by
696 * the packer.
697 *
698 * @param name name of the field to add to the object
699 * @param a array to steal
700 * @return json pack specification
701 */
702struct GNUNET_JSON_PackSpec
703GNUNET_JSON_pack_array_steal (const char *name,
704 json_t *a);
705
706
707/**
708 * Generate packer instruction for a JSON field of type JSON array where the
709 * reference counter is incremented by the packer. Note that a deep copy is
710 * not performed.
711 *
712 * @param name name of the field to add to the object
713 * @param a array to increment reference counter of
714 * @return json pack specification
715 */
716struct GNUNET_JSON_PackSpec
717GNUNET_JSON_pack_array_incref (const char *name,
718 json_t *a);
719
720
721/**
722 * Generate packer instruction for a JSON field of type
723 * variable size binary blob.
724 *
725 * @param name name of the field to add to the object
726 * @param blob binary data to pack
727 * @param blob_size number of bytes in @a blob
728 * @return json pack specification
729 */
730struct GNUNET_JSON_PackSpec
731GNUNET_JSON_pack_data_varsize (const char *name,
732 const void *blob,
733 size_t blob_size);
734
735
736/**
737 * Generate packer instruction for a JSON field where the
738 * size is automatically determined from the argument.
739 *
740 * @param name name of the field to add to the object
741 * @param blob data to pack, must not be an array
742 * @return json pack specification
743 */
744#define GNUNET_JSON_pack_data_auto(name,blob) \
745 GNUNET_JSON_pack_data_varsize (name, blob, sizeof (*blob))
746
747
748/**
749 * Generate packer instruction for a JSON field of type
750 * absolute time.
751 *
752 * @param name name of the field to add to the object
753 * @param at absolute time to pack, a value of 0 is only
754 * allowed with #GNUNET_JSON_pack_allow_null()!
755 * @return json pack specification
756 */
757struct GNUNET_JSON_PackSpec
758GNUNET_JSON_pack_time_abs (const char *name,
759 struct GNUNET_TIME_Absolute at);
760
761
762/**
763 * Generate packer instruction for a JSON field of type
764 * absolute time in network byte order.
765 *
766 * @param name name of the field to add to the object
767 * @param at absolute time to pack, a value of 0 is only
768 * allowed with #GNUNET_JSON_pack_allow_null()!
769 * @return json pack specification
770 */
771struct GNUNET_JSON_PackSpec
772GNUNET_JSON_pack_time_abs_nbo (const char *name,
773 struct GNUNET_TIME_AbsoluteNBO at);
774
775
776/**
777 * Generate packer instruction for a JSON field of type
778 * relative time.
779 *
780 * @param name name of the field to add to the object
781 * @param rt relative time to pack
782 * @return json pack specification
783 */
784struct GNUNET_JSON_PackSpec
785GNUNET_JSON_pack_time_rel (const char *name,
786 struct GNUNET_TIME_Relative rt);
787
788
789/**
790 * Generate packer instruction for a JSON field of type
791 * relative time in network byte order.
792 *
793 * @param name name of the field to add to the object
794 * @param rt relative time to pack
795 * @return json pack specification
796 */
797struct GNUNET_JSON_PackSpec
798GNUNET_JSON_pack_time_rel_nbo (const char *name,
799 struct GNUNET_TIME_RelativeNBO rt);
800
801
802/**
803 * Generate packer instruction for a JSON field of type
804 * RSA public key.
805 *
806 * @param name name of the field to add to the object
807 * @param pk RSA public key
808 * @return json pack specification
809 */
810struct GNUNET_JSON_PackSpec
811GNUNET_JSON_pack_rsa_public_key (const char *name,
812 const struct GNUNET_CRYPTO_RsaPublicKey *pk);
813
814
815/**
816 * Generate packer instruction for a JSON field of type
817 * RSA signature.
818 *
819 * @param name name of the field to add to the object
820 * @param sig RSA signature
821 * @return json pack specification
822 */
823struct GNUNET_JSON_PackSpec
824GNUNET_JSON_pack_rsa_signature (const char *name,
825 const struct GNUNET_CRYPTO_RsaSignature *sig);
826
827
524#endif 828#endif
525 829
526/* end of gnunet_json_lib.h */ 830/* end of gnunet_json_lib.h */
diff --git a/src/include/gnunet_messenger_service.h b/src/include/gnunet_messenger_service.h
index ecd856eb9..5d7155a3d 100644
--- a/src/include/gnunet_messenger_service.h
+++ b/src/include/gnunet_messenger_service.h
@@ -499,6 +499,7 @@ struct GNUNET_MESSENGER_Message
499 499
500/** 500/**
501 * Enum for the different supported flags used by message handling 501 * Enum for the different supported flags used by message handling
502 * Compatible flags can be OR'ed together.
502 */ 503 */
503enum GNUNET_MESSENGER_MessageFlags 504enum GNUNET_MESSENGER_MessageFlags
504{ 505{
@@ -508,9 +509,14 @@ enum GNUNET_MESSENGER_MessageFlags
508 GNUNET_MESSENGER_FLAG_NONE = 0, 509 GNUNET_MESSENGER_FLAG_NONE = 0,
509 510
510 /** 511 /**
512 * The sent flag. The flag indicates that the message was sent by the client.
513 */
514 GNUNET_MESSENGER_FLAG_SENT = 1,
515
516 /**
511 * The private flag. The flag indicates that the message was privately encrypted. 517 * The private flag. The flag indicates that the message was privately encrypted.
512 */ 518 */
513 GNUNET_MESSENGER_FLAG_PRIVATE = 1, 519 GNUNET_MESSENGER_FLAG_PRIVATE = 2,
514}; 520};
515 521
516/** 522/**
@@ -526,8 +532,8 @@ typedef void
526/** 532/**
527 * Method called whenever a message is sent or received from a <i>room</i>. 533 * Method called whenever a message is sent or received from a <i>room</i>.
528 * 534 *
529 * The flag <i>private_message</i> will be #GNUNET_YES if a message was 535 * The <i>flags</i> will indicate with a bitmask if a message was
530 * received privately, otherwise #GNUNET_NO. 536 * received privately or if the message was sent by the client.
531 * 537 *
532 * @param[in/out] cls Closure from #GNUNET_MESSENGER_connect 538 * @param[in/out] cls Closure from #GNUNET_MESSENGER_connect
533 * @param[in] room Room handle 539 * @param[in] room Room handle
diff --git a/src/include/gnunet_pq_lib.h b/src/include/gnunet_pq_lib.h
index 1f2915165..fe3fabbea 100644
--- a/src/include/gnunet_pq_lib.h
+++ b/src/include/gnunet_pq_lib.h
@@ -853,113 +853,8 @@ GNUNET_PQ_reconnect (struct GNUNET_PQ_Context *db);
853 853
854 854
855/** 855/**
856 * Function called whenever the socket needed for
857 * notifications from postgres changes.
858 *
859 * @param cls closure
860 * @param fd socket to listen on, -1 for none
861 */
862typedef void
863(*GNUNET_PQ_SocketCallback)(void *cls,
864 int fd);
865
866
867/**
868 * Obtain the file descriptor to poll on for notifications.
869 * Useful if the GNUnet scheduler is NOT to be used for
870 * such notifications.
871 *
872 * @param db database handle
873 * @param sc function to call with the socket
874 * @param sc_cls closure for @a sc
875 */
876void
877GNUNET_PQ_event_set_socket_callback (struct GNUNET_PQ_Context *db,
878 GNUNET_PQ_SocketCallback sc,
879 void *sc_cls);
880
881
882/**
883 * Poll for database events now. Used if the event FD
884 * is ready and the application wants to trigger applicable
885 * events.
886 * Useful if the GNUnet scheduler is NOT to be used for
887 * such notifications.
888 *
889 * @param db database handle
890 */
891void
892GNUNET_PQ_event_do_poll (struct GNUNET_PQ_Context *db);
893
894
895/**
896 * Run poll event loop using the GNUnet scheduler.
897 *
898 * @param db database handle
899 */
900void
901GNUNET_PQ_event_scheduler_start (struct GNUNET_PQ_Context *db);
902
903
904/**
905 * Stop running poll event loop using the GNUnet scheduler.
906 *
907 * @param db database handle
908 */
909void
910GNUNET_PQ_event_scheduler_stop (struct GNUNET_PQ_Context *db);
911
912
913/**
914 * Handle for an active LISTENer to the database.
915 */
916struct GNUNET_PQ_EventHandler;
917
918/**
919 * Function called on events received from Postgres.
920 *
921 * @param cls closure
922 * @param extra additional event data provided
923 * @param extra_size number of bytes in @a extra
924 */
925typedef void
926(*GNUNET_PQ_EventCallback)(void *cls,
927 const void *extra,
928 size_t extra_size);
929
930GNUNET_NETWORK_STRUCT_BEGIN
931
932
933/**
934 * Header of a structure that describes an
935 * event channel we may subscribe to or notify on.
936 */
937struct GNUNET_PQ_EventHeaderP
938{
939 /**
940 * The length of the struct (in bytes, including the length field itself),
941 * in big-endian format.
942 */
943 uint16_t size GNUNET_PACKED;
944
945 /**
946 * The type of the message (GNUNET_PQ_EVENT_TYPE_XXXX), in big-endian format.
947 */
948 uint16_t type GNUNET_PACKED;
949
950};
951
952GNUNET_NETWORK_STRUCT_END
953
954
955/**
956 * Handle for an active LISTENer to the database.
957 */
958struct GNUNET_PQ_EventHandler;
959
960/**
961 * Register callback to be invoked on events of type @a es. 856 * Register callback to be invoked on events of type @a es.
962 * 857 *
963 * Unlike many other calls, this function is thread-safe 858 * Unlike many other calls, this function is thread-safe
964 * and may be called from threads that are different 859 * and may be called from threads that are different
965 * from the one that setup @a db. However, the @a cb 860 * from the one that setup @a db. However, the @a cb
@@ -968,21 +863,23 @@ struct GNUNET_PQ_EventHandler;
968 * 863 *
969 * @param db database context to use 864 * @param db database context to use
970 * @param es specification of the event to listen for 865 * @param es specification of the event to listen for
866 * @param timeout when to trigger @a cb based on timeout
971 * @param cb function to call when the event happens, possibly 867 * @param cb function to call when the event happens, possibly
972 * multiple times (until #GNUNET_PQ_event_listen_cancel() is invoked) 868 * multiple times (until #GNUNET_PQ_event_listen_cancel() is invoked), including on timeout
973 * @param cb_cls closure for @a cb 869 * @param cb_cls closure for @a cb
974 * @return handle useful to cancel the listener 870 * @return handle useful to cancel the listener
975 */ 871 */
976struct GNUNET_PQ_EventHandler * 872struct GNUNET_DB_EventHandler *
977GNUNET_PQ_event_listen (struct GNUNET_PQ_Context *db, 873GNUNET_PQ_event_listen (struct GNUNET_PQ_Context *db,
978 const struct GNUNET_PQ_EventHeaderP *es, 874 const struct GNUNET_DB_EventHeaderP *es,
979 GNUNET_PQ_EventCallback cb, 875 struct GNUNET_TIME_Relative timeout,
876 GNUNET_DB_EventCallback cb,
980 void *cb_cls); 877 void *cb_cls);
981 878
982 879
983/** 880/**
984 * Stop notifications. 881 * Stop notifications.
985 * 882 *
986 * Unlike many other calls, this function is thread-safe 883 * Unlike many other calls, this function is thread-safe
987 * and may be called from threads that are different 884 * and may be called from threads that are different
988 * from the one that setup @a db. However, the @a cb 885 * from the one that setup @a db. However, the @a cb
@@ -992,12 +889,12 @@ GNUNET_PQ_event_listen (struct GNUNET_PQ_Context *db,
992 * @param eh handle to unregister. 889 * @param eh handle to unregister.
993 */ 890 */
994void 891void
995GNUNET_PQ_event_listen_cancel (struct GNUNET_PQ_EventHandler *eh); 892GNUNET_PQ_event_listen_cancel (struct GNUNET_DB_EventHandler *eh);
996 893
997 894
998/** 895/**
999 * Notify all that listen on @a es of an event. 896 * Notify all that listen on @a es of an event.
1000 * 897 *
1001 * Unlike many other calls, this function is thread-safe 898 * Unlike many other calls, this function is thread-safe
1002 * and may be called from threads that are different 899 * and may be called from threads that are different
1003 * from the one that setup @a db. However, the @a cb 900 * from the one that setup @a db. However, the @a cb
@@ -1011,7 +908,7 @@ GNUNET_PQ_event_listen_cancel (struct GNUNET_PQ_EventHandler *eh);
1011 */ 908 */
1012void 909void
1013GNUNET_PQ_event_notify (struct GNUNET_PQ_Context *db, 910GNUNET_PQ_event_notify (struct GNUNET_PQ_Context *db,
1014 const struct GNUNET_PQ_EventHeaderP *es, 911 const struct GNUNET_DB_EventHeaderP *es,
1015 const void *extra, 912 const void *extra,
1016 size_t extra_size); 913 size_t extra_size);
1017 914
diff --git a/src/include/gnunet_protocols.h b/src/include/gnunet_protocols.h
index 715e94c6a..6b61dfc72 100644
--- a/src/include/gnunet_protocols.h
+++ b/src/include/gnunet_protocols.h
@@ -1784,6 +1784,13 @@ extern "C" {
1784 */ 1784 */
1785#define GNUNET_MESSAGE_TYPE_SETU_P2P_OVER 572 1785#define GNUNET_MESSAGE_TYPE_SETU_P2P_OVER 572
1786 1786
1787/**
1788 * Signals other peer that all elements are sent.
1789 */
1790
1791#define GNUNET_MESSAGE_TYPE_SETU_P2P_SEND_FULL 710
1792
1793
1787 1794
1788/******************************************************************************* 1795/*******************************************************************************
1789 * SETI message types 1796 * SETI message types
diff --git a/src/include/gnunet_setu_service.h b/src/include/gnunet_setu_service.h
index bacec9408..1d7e48402 100644
--- a/src/include/gnunet_setu_service.h
+++ b/src/include/gnunet_setu_service.h
@@ -163,7 +163,31 @@ enum GNUNET_SETU_OptionType
163 /** 163 /**
164 * Notify client also if we are sending a value to the other peer. 164 * Notify client also if we are sending a value to the other peer.
165 */ 165 */
166 GNUNET_SETU_OPTION_SYMMETRIC = 8 166 GNUNET_SETU_OPTION_SYMMETRIC = 8,
167
168 /**
169 * Byzantine upper bound. Is the maximal plausible number of elements
170 * a peer can have default max uint64
171 */
172 GNUNET_SETU_OPTION_CUSTOM_BYZANTINE_UPPER_BOUND = 16,
173
174 /**
175 * Bandwidth latency tradeoff determines how much bytes a single RTT is
176 * worth, which is a performance setting
177 */
178 GNUNET_SETU_OPTION_CUSTOM_BANDWIDTH_LATENCY_TRADEOFF= 32,
179
180 /**
181 * The factor determines the number of buckets an IBF has which is
182 * multiplied by the estimated setsize default: 2
183 */
184 GNUNET_SETU_OPTION_CUSTOM_IBF_BUCKET_NUMBER_FACTOR= 64,
185
186 /**
187 * This setting determines to how many IBF buckets an single elements
188 * is mapped to.
189 */
190 GNUNET_SETU_OPTION_CUSTOM_IBF_BUCKETS_PER_ELEMENT= 128
167}; 191};
168 192
169 193
diff --git a/src/include/gnunet_testbed_ng_service.h b/src/include/gnunet_testbed_ng_service.h
deleted file mode 100644
index 49e9f56bc..000000000
--- a/src/include/gnunet_testbed_ng_service.h
+++ /dev/null
@@ -1,284 +0,0 @@
1/*
2 This file is part of GNUnet
3 Copyright (C) 2021 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20
21/**
22 * @author t3sserakt
23 *
24 * @file
25 * API for writing tests and creating large-scale emulation testbeds for GNUnet with command pattern.
26 *
27 * @defgroup testbed Testbed service
28 * Writing tests and creating large-scale emulation testbeds for GNUnet with command pattern.
29 *
30 * @see [Documentation](https://docs.gnunet.org/handbook/gnunet.html#TESTBED-NG-Subsystem)
31 *
32 * @{
33 */
34
35#ifndef GNUNET_TESTBED_NG_SERVICE_H
36#define GNUNET_TESTBED_NG_SERVICE_H
37
38#include "gnunet_util_lib.h"
39#include "gnunet_testing_ng_lib.h"
40
41struct TngState;
42
43struct PeerCmdState
44{
45 /**
46 * The label of a controller command.
47 */
48 const char *controller_label;
49
50 /**
51 * Handle to operation
52 */
53 struct GNUNET_TESTBED_Operation *operation;
54
55 /**
56 * Name of the host, use "NULL" for localhost.
57 */
58 const char *hostname;
59
60 /**
61 * Username to use for the login; may be NULL.
62 */
63 const char *username;
64
65 /**
66 * Port number to use for ssh; use 0 to let ssh decide.
67 */
68 uint16_t port;
69
70 /**
71 * The configuration to use as a template while starting a controller
72 * on this host. Operation queue sizes specific to a host are also
73 * read from this configuration handle.
74 */
75 struct GNUNET_CONFIGURATION_Handle *cfg;
76
77 /**
78 * The host to run peers and controllers on
79 */
80 struct GNUNET_TESTBED_Host *host;
81
82 /**
83 * Abort task identifier
84 */
85 struct GNUNET_SCHEDULER_Task *abort_task;
86
87 /**
88 * Flag indicating if peer is ready.
89 */
90 int peer_ready;
91
92 /**
93 * Flag indicating controller is going down.
94 */
95 int peer_going_down;
96
97 /**
98 * Interpreter state.
99 */
100 struct GNUNET_TESTING_Interpreter *is;
101
102 /**
103 * Peer to start
104 */
105 struct GNUNET_TESTBED_Peer *peer;
106};
107
108struct ControllerState
109{
110 /**
111 * The ip address of the controller which will be set as TRUSTED
112 * HOST(all connections form this ip are permitted by the testbed) when
113 * starting testbed controller at host. This can either be a single ip
114 * address or a network address in CIDR notation.
115 */
116 const char *trusted_ip;
117
118 /**
119 * Name of the host, use "NULL" for localhost.
120 */
121 const char *hostname;
122
123 /**
124 * Username to use for the login; may be NULL.
125 */
126 const char *username;
127
128 /**
129 * Port number to use for ssh; use 0 to let ssh decide.
130 */
131 uint16_t port;
132
133 /**
134 * The configuration to use as a template while starting a controller
135 * on this host. Operation queue sizes specific to a host are also
136 * read from this configuration handle.
137 */
138 struct GNUNET_CONFIGURATION_Handle *cfg;
139
140 /**
141 * The host to run peers and controllers on
142 */
143 struct GNUNET_TESTBED_Host *host;
144
145 /**
146 * The controller process
147 */
148 struct GNUNET_TESTBED_ControllerProc *cp;
149
150 /**
151 * The controller handle
152 */
153 struct GNUNET_TESTBED_Controller *controller;
154
155 /**
156 * A bit mask with set of events to call the controller for.
157 */
158 uint64_t event_mask;
159
160 /**
161 * Abort task identifier
162 */
163 struct GNUNET_SCHEDULER_Task *abort_task;
164
165 /**
166 * Handle for host registration
167 */
168 struct GNUNET_TESTBED_HostRegistrationHandle *reg_handle;
169
170 /**
171 * Flag indicating if host create with controller is ready.
172 */
173 int host_ready;
174
175 /**
176 * Flag indicating controller is going down.
177 */
178 int controller_going_down;
179
180 /**
181 * Interpreter state.
182 */
183 struct GNUNET_TESTING_Interpreter *is;
184};
185
186/**
187 * Offer data from trait
188 *
189 * @param cmd command to extract the controller from.
190 * @param pt pointer to controller.
191 * @return #GNUNET_OK on success.
192 */
193int
194GNUNET_TESTBED_get_trait_controller (const struct GNUNET_TESTING_Command *cmd,
195 struct GNUNET_TESTBED_Controller **
196 controller);
197
198struct GNUNET_TESTING_Command
199GNUNET_TESTBED_cmd_controller (const char *label,
200 const char *host,
201 uint64_t event_mask);
202
203void
204GNUNET_TESTBED_shutdown_controller (struct ControllerState *cs);
205
206void
207GNUNET_TESTBED_shutdown_peer (struct PeerCmdState *ps);
208
209void
210GNUNET_TESTBED_shutdown_service (struct TngState *ss);
211
212/**
213 * Create command.
214 *
215 * @param label name for command.
216 * @param binaryname to start.
217 * @return command.
218 */
219struct GNUNET_TESTING_Command
220GNUNET_TESTBED_cmd_netjail_start (const char *label,
221 char *local_m,
222 char *global_n);
223
224
225/**
226 * Create command.
227 *
228 * @param label name for command.
229 * @param binaryname to exec.
230 * @return command.
231 */
232struct GNUNET_TESTING_Command
233GNUNET_TESTBED_cmd_netjail_start_testbed (const char *label,
234 char *local_m,
235 char *global_n,
236 char *plugin_name);
237
238
239/**
240 * Create command.
241 *
242 * @param label name for command.
243 * @param binaryname to stop.
244 * @return command.
245 */
246struct GNUNET_TESTING_Command
247GNUNET_TESTBED_cmd_netjail_stop (const char *label,
248 char *local_m,
249 char *global_n);
250
251
252struct GNUNET_TESTING_Command
253GNUNET_TESTBED_cmd_stop_testbed (const char *label,
254 const char *helper_start_label,
255 char *local_m,
256 char *global_n);
257
258
259int
260GNUNET_TESTBED_get_trait_helper_handles (const struct
261 GNUNET_TESTING_Command *cmd,
262 struct GNUNET_HELPER_Handle ***helper);
263
264
265int
266GNUNET_TESTBED_get_trait_hosts (const struct
267 GNUNET_TESTING_Command *cmd,
268 struct GNUNET_TESTBED_Host ***hosts);
269
270struct GNUNET_TESTING_Command
271GNUNET_TESTING_cmd_block_until_all_peers_started (const char *label,
272 unsigned int *
273 all_peers_started);
274
275struct GNUNET_TESTING_Command
276GNUNET_TESTING_cmd_send_peer_ready (const char *label,
277 TESTBED_CMD_HELPER_write_cb write_message);
278
279struct GNUNET_TESTING_Command
280GNUNET_TESTING_cmd_local_test_finished (const char *label,
281 TESTBED_CMD_HELPER_write_cb
282 write_message);
283
284#endif
diff --git a/src/include/gnunet_testing_ng_lib.h b/src/include/gnunet_testing_ng_lib.h
index aad7ddec2..939863d67 100644
--- a/src/include/gnunet_testing_ng_lib.h
+++ b/src/include/gnunet_testing_ng_lib.h
@@ -838,8 +838,82 @@ GNUNET_TESTING_get_trait_test_system (const struct
838 GNUNET_TESTING_Command *cmd, 838 GNUNET_TESTING_Command *cmd,
839 struct GNUNET_TESTING_System **test_system); 839 struct GNUNET_TESTING_System **test_system);
840 840
841
841struct GNUNET_TESTING_Command 842struct GNUNET_TESTING_Command
842GNUNET_TESTING_cmd_system_create (const char *label, 843GNUNET_TESTING_cmd_system_create (const char *label,
843 const char *testdir); 844 const char *testdir);
844 845
846
847struct GNUNET_TESTING_Command
848GNUNET_TESTING_cmd_system_destroy (const char *label,
849 const char *create_label);
850
851
852/**
853 * Create command.
854 *
855 * @param label name for command.
856 * @param binaryname to start.
857 * @return command.
858 */
859struct GNUNET_TESTING_Command
860GNUNET_TESTING_cmd_netjail_start (const char *label,
861 char *local_m,
862 char *global_n);
863
864
865/**
866 * Create command.
867 *
868 * @param label name for command.
869 * @param binaryname to exec.
870 * @return command.
871 */
872struct GNUNET_TESTING_Command
873GNUNET_TESTING_cmd_netjail_start_testing_system (const char *label,
874 char *local_m,
875 char *global_n,
876 char *plugin_name,
877 unsigned int *rv);
878
879
880/**
881 * Create command.
882 *
883 * @param label name for command.
884 * @param binaryname to stop.
885 * @return command.
886 */
887struct GNUNET_TESTING_Command
888GNUNET_TESTING_cmd_netjail_stop (const char *label,
889 char *local_m,
890 char *global_n);
891
892
893struct GNUNET_TESTING_Command
894GNUNET_TESTING_cmd_stop_testing_system (const char *label,
895 const char *helper_start_label,
896 char *local_m,
897 char *global_n);
898
899
900int
901GNUNET_TESTING_get_trait_helper_handles (const struct
902 GNUNET_TESTING_Command *cmd,
903 struct GNUNET_HELPER_Handle ***helper);
904
905
906struct GNUNET_TESTING_Command
907GNUNET_TESTING_cmd_block_until_all_peers_started (const char *label,
908 unsigned int *
909 all_peers_started);
910
911struct GNUNET_TESTING_Command
912GNUNET_TESTING_cmd_send_peer_ready (const char *label,
913 TESTING_CMD_HELPER_write_cb write_message);
914
915struct GNUNET_TESTING_Command
916GNUNET_TESTING_cmd_local_test_finished (const char *label,
917 TESTING_CMD_HELPER_write_cb
918 write_message);
845#endif 919#endif
diff --git a/src/include/gnunet_testing_plugin.h b/src/include/gnunet_testing_plugin.h
index 8395e2a49..151827d4b 100644
--- a/src/include/gnunet_testing_plugin.h
+++ b/src/include/gnunet_testing_plugin.h
@@ -37,15 +37,16 @@ extern "C"
37#endif 37#endif
38 38
39typedef void 39typedef void
40(*TESTBED_CMD_HELPER_write_cb) (struct GNUNET_MessageHeader *message, size_t 40(*TESTING_CMD_HELPER_write_cb) (struct GNUNET_MessageHeader *message, size_t
41 msg_length); 41 msg_length);
42 42
43typedef void 43typedef void
44(*GNUNET_TESTING_PLUGIN_StartTestCase) (TESTBED_CMD_HELPER_write_cb 44(*GNUNET_TESTING_PLUGIN_StartTestCase) (TESTING_CMD_HELPER_write_cb
45 write_message, char *router_ip, 45 write_message, char *router_ip,
46 char *node_ip, 46 char *node_ip,
47 char *n, 47 char *n,
48 char *m); 48 char *m,
49 char *local_m);
49 50
50typedef void 51typedef void
51(*GNUNET_TESTING_PLUGIN_ALL_PEERS_STARTED) (); 52(*GNUNET_TESTING_PLUGIN_ALL_PEERS_STARTED) ();
diff --git a/src/include/gnunet_util_lib.h b/src/include/gnunet_util_lib.h
index 3acd4cb9b..cc4f3a01e 100644
--- a/src/include/gnunet_util_lib.h
+++ b/src/include/gnunet_util_lib.h
@@ -58,7 +58,8 @@ extern "C"
58 * THIS release. Otherwise, you are violating the Affero GPL if you make 58 * THIS release. Otherwise, you are violating the Affero GPL if you make
59 * this service available to anyone but yourself. 59 * this service available to anyone but yourself.
60 */ 60 */
61#define GNUNET_AGPL_URL "https://gnunet.org/git/gnunet.git#" PACKAGE_VERSION 61#define GNUNET_AGPL_URL "https://git.gnunet.org/gnunet.git/tag/?h=v" \
62 PACKAGE_VERSION
62 63
63 64
64#include "gnunet_crypto_lib.h" 65#include "gnunet_crypto_lib.h"
diff --git a/src/include/platform.h b/src/include/platform.h
index e641b38eb..e44f9f51a 100644
--- a/src/include/platform.h
+++ b/src/include/platform.h
@@ -22,7 +22,7 @@
22 * @author Nils Durner 22 * @author Nils Durner
23 * @author Christian Grothoff 23 * @author Christian Grothoff
24 * 24 *
25 * @file 25 * @file gnunet/src/include/platform.h
26 * Platform specific includes and defines. 26 * Platform specific includes and defines.
27 * 27 *
28 * This file should never be included by installed 28 * This file should never be included by installed
@@ -170,18 +170,12 @@
170#include "compat.h" 170#include "compat.h"
171 171
172#include <locale.h> 172#include <locale.h>
173#ifndef FRAMEWORK_BUILD
174#include "gettext.h" 173#include "gettext.h"
175/** 174/**
176 * GNU gettext support macro. 175 * GNU gettext support macro.
177 */ 176 */
178#define _(String) dgettext (PACKAGE, String) 177#define _(String) dgettext (PACKAGE, String)
179#define LIBEXTRACTOR_GETTEXT_DOMAIN "libextractor" 178#define LIBEXTRACTOR_GETTEXT_DOMAIN "libextractor"
180#else
181#include "libintlemu.h"
182#define _(String) dgettext ("org.gnunet.gnunet", String)
183#define LIBEXTRACTOR_GETTEXT_DOMAIN "org.gnunet.libextractor"
184#endif
185 179
186#include <sys/mman.h> 180#include <sys/mman.h>
187 181
@@ -252,6 +246,32 @@ atoll (const char *nptr);
252#define GNUNET_THREAD_LOCAL 246#define GNUNET_THREAD_LOCAL
253#endif 247#endif
254 248
249
250/* LSB-style exit status codes */
251#ifndef EXIT_INVALIDARGUMENT
252#define EXIT_INVALIDARGUMENT 2
253#endif
254
255#ifndef EXIT_NOTIMPLEMENTED
256#define EXIT_NOTIMPLEMENTED 3
257#endif
258
259#ifndef EXIT_NOPERMISSION
260#define EXIT_NOPERMISSION 4
261#endif
262
263#ifndef EXIT_NOTINSTALLED
264#define EXIT_NOTINSTALLED 5
265#endif
266
267#ifndef EXIT_NOTCONFIGURED
268#define EXIT_NOTCONFIGURED 6
269#endif
270
271#ifndef EXIT_NOTRUNNING
272#define EXIT_NOTRUNNING 7
273#endif
274
255/** 275/**
256 * clang et al do not have such an attribute 276 * clang et al do not have such an attribute
257 */ 277 */
diff --git a/src/json/Makefile.am b/src/json/Makefile.am
index d4ea38adf..2e97cecb9 100644
--- a/src/json/Makefile.am
+++ b/src/json/Makefile.am
@@ -13,21 +13,21 @@ libgnunetjson_la_LDFLAGS = \
13 $(GN_LIBINTL) \ 13 $(GN_LIBINTL) \
14 -version-info 0:0:0 \ 14 -version-info 0:0:0 \
15 -no-undefined 15 -no-undefined
16libgnunetjson_la_CFLAGS = $(MHD_CFLAGS) $(AM_CFLAGS) 16libgnunetjson_la_CFLAGS = \
17 $(MHD_CFLAGS) \
18 $(AM_CFLAGS)
17libgnunetjson_la_SOURCES = \ 19libgnunetjson_la_SOURCES = \
18 json.c \ 20 json.c \
19 json_mhd.c \
20 json_generator.c \ 21 json_generator.c \
21 json_helper.c 22 json_helper.c \
23 json_mhd.c \
24 json_pack.c
22libgnunetjson_la_LIBADD = \ 25libgnunetjson_la_LIBADD = \
23 $(top_builddir)/src/util/libgnunetutil.la \ 26 $(top_builddir)/src/util/libgnunetutil.la \
24 -ljansson \ 27 -ljansson \
25 $(MHD_LIBS) \ 28 $(MHD_LIBS) \
26 $(XLIB) \ 29 $(XLIB) \
27 $(Z_LIBS) 30 $(Z_LIBS)
28libgnunetjson_la_DEPENDENCIES = \
29 $(top_builddir)/src/util/libgnunetutil.la
30
31 31
32check_PROGRAMS = \ 32check_PROGRAMS = \
33 test_json \ 33 test_json \
diff --git a/src/json/json.c b/src/json/json.c
index d55189804..51d5c0c72 100644
--- a/src/json/json.c
+++ b/src/json/json.c
@@ -28,19 +28,6 @@
28#include "gnunet_json_lib.h" 28#include "gnunet_json_lib.h"
29 29
30 30
31/**
32 * Navigate and parse data in a JSON tree. Tries to parse the @a root
33 * to find all of the values given in the @a spec. If one of the
34 * entries in @a spec cannot be found or parsed, the name of the JSON
35 * field is returned in @a error_json_name, and the offset of the
36 * entry in @a spec is returned in @a error_line.
37 *
38 * @param root the JSON node to start the navigation at.
39 * @param spec parse specification array
40 * @param[out] error_json_name which JSON field was problematic
41 * @param[out] which index into @a spec did we encounter an error
42 * @return #GNUNET_OK on success, #GNUNET_SYSERR on error
43 */
44enum GNUNET_GenericReturnValue 31enum GNUNET_GenericReturnValue
45GNUNET_JSON_parse (const json_t *root, 32GNUNET_JSON_parse (const json_t *root,
46 struct GNUNET_JSON_Specification *spec, 33 struct GNUNET_JSON_Specification *spec,
@@ -85,12 +72,6 @@ GNUNET_JSON_parse (const json_t *root,
85} 72}
86 73
87 74
88/**
89 * Set the "optional" flag for a parser specification entry.
90 *
91 * @param spec specification to modify
92 * @return spec copy of @a spec with optional bit set
93 */
94struct GNUNET_JSON_Specification 75struct GNUNET_JSON_Specification
95GNUNET_JSON_spec_mark_optional (struct GNUNET_JSON_Specification spec) 76GNUNET_JSON_spec_mark_optional (struct GNUNET_JSON_Specification spec)
96{ 77{
@@ -101,18 +82,13 @@ GNUNET_JSON_spec_mark_optional (struct GNUNET_JSON_Specification spec)
101} 82}
102 83
103 84
104/**
105 * Frees all elements allocated during a #GNUNET_JSON_parse()
106 * operation.
107 *
108 * @param spec specification of the parse operation
109 */
110void 85void
111GNUNET_JSON_parse_free (struct GNUNET_JSON_Specification *spec) 86GNUNET_JSON_parse_free (struct GNUNET_JSON_Specification *spec)
112{ 87{
113 for (unsigned int i = 0; NULL != spec[i].parser; i++) 88 for (unsigned int i = 0; NULL != spec[i].parser; i++)
114 if (NULL != spec[i].cleaner) 89 if (NULL != spec[i].cleaner)
115 spec[i].cleaner (spec[i].cls, &spec[i]); 90 spec[i].cleaner (spec[i].cls,
91 &spec[i]);
116} 92}
117 93
118 94
@@ -151,15 +127,6 @@ set_json (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx,
151} 127}
152 128
153 129
154/**
155 * Allow user to specify a JSON input value.
156 *
157 * @param shortName short name of the option
158 * @param name long name of the option
159 * @param argumentHelp help text for the option argument
160 * @param description long help text for the option
161 * @param[out] val set to the JSON specified at the command line
162 */
163struct GNUNET_GETOPT_CommandLineOption 130struct GNUNET_GETOPT_CommandLineOption
164GNUNET_JSON_getopt (char shortName, 131GNUNET_JSON_getopt (char shortName,
165 const char *name, 132 const char *name,
diff --git a/src/json/json_pack.c b/src/json/json_pack.c
new file mode 100644
index 000000000..92f8b4535
--- /dev/null
+++ b/src/json/json_pack.c
@@ -0,0 +1,325 @@
1/*
2 This file is part of GNUnet
3 Copyright (C) 2021 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20/**
21 * @file json/json_pack.c
22 * @brief functions to pack JSON objects
23 * @author Christian Grothoff
24 */
25#include "platform.h"
26#include "gnunet_json_lib.h"
27
28
29json_t *
30GNUNET_JSON_pack_ (struct GNUNET_JSON_PackSpec spec[])
31{
32 json_t *ret;
33
34 ret = json_object ();
35 GNUNET_assert (NULL != ret);
36 for (unsigned int i = 0;
37 NULL != spec[i].field_name;
38 i++)
39 {
40 if (NULL == spec[i].object)
41 {
42 GNUNET_assert (spec[i].allow_null);
43 }
44 else
45 {
46 GNUNET_assert (0 ==
47 json_object_set_new (ret,
48 spec[i].field_name,
49 spec[i].object));
50 spec[i].object = NULL;
51 }
52 }
53 return ret;
54}
55
56
57struct GNUNET_JSON_PackSpec
58GNUNET_JSON_pack_end_ (void)
59{
60 struct GNUNET_JSON_PackSpec ps = {
61 .field_name = NULL
62 };
63
64 return ps;
65}
66
67
68struct GNUNET_JSON_PackSpec
69GNUNET_JSON_pack_allow_null (struct GNUNET_JSON_PackSpec in)
70{
71 in.allow_null = true;
72 return in;
73}
74
75
76struct GNUNET_JSON_PackSpec
77GNUNET_JSON_pack_bool (const char *name,
78 bool b)
79{
80 struct GNUNET_JSON_PackSpec ps = {
81 .field_name = name,
82 .object = json_boolean (b)
83 };
84
85 return ps;
86}
87
88
89struct GNUNET_JSON_PackSpec
90GNUNET_JSON_pack_string (const char *name,
91 const char *s)
92{
93 struct GNUNET_JSON_PackSpec ps = {
94 .field_name = name,
95 .object = json_string (s)
96 };
97
98 return ps;
99}
100
101
102struct GNUNET_JSON_PackSpec
103GNUNET_JSON_pack_uint64 (const char *name,
104 uint64_t num)
105{
106 struct GNUNET_JSON_PackSpec ps = {
107 .field_name = name,
108 .object = json_integer ((json_int_t) num)
109 };
110
111#if JSON_INTEGER_IS_LONG_LONG
112 GNUNET_assert (num <= LLONG_MAX);
113#else
114 GNUNET_assert (num <= LONG_MAX);
115#endif
116 return ps;
117}
118
119
120struct GNUNET_JSON_PackSpec
121GNUNET_JSON_pack_int64 (const char *name,
122 int64_t num)
123{
124 struct GNUNET_JSON_PackSpec ps = {
125 .field_name = name,
126 .object = json_integer ((json_int_t) num)
127 };
128
129#if JSON_INTEGER_IS_LONG_LONG
130 GNUNET_assert (num <= LLONG_MAX);
131 GNUNET_assert (num >= LLONG_MIN);
132#else
133 GNUNET_assert (num <= LONG_MAX);
134 GNUNET_assert (num >= LONG_MIN);
135#endif
136 return ps;
137}
138
139
140struct GNUNET_JSON_PackSpec
141GNUNET_JSON_pack_object_steal (const char *name,
142 json_t *o)
143{
144 struct GNUNET_JSON_PackSpec ps = {
145 .field_name = name,
146 .object = o
147 };
148
149 if (NULL == o)
150 return ps;
151 if (! json_is_object (o))
152 {
153 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
154 "Expected JSON object for field `%s'\n",
155 name);
156 GNUNET_assert (0);
157 }
158 return ps;
159}
160
161
162struct GNUNET_JSON_PackSpec
163GNUNET_JSON_pack_object_incref (const char *name,
164 json_t *o)
165{
166 struct GNUNET_JSON_PackSpec ps = {
167 .field_name = name,
168 .object = o
169 };
170
171 if (NULL == o)
172 return ps;
173 (void) json_incref (o);
174 if (! json_is_object (o))
175 {
176 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
177 "Expected JSON object for field `%s'\n",
178 name);
179 GNUNET_assert (0);
180 }
181 return ps;
182}
183
184
185struct GNUNET_JSON_PackSpec
186GNUNET_JSON_pack_array_steal (const char *name,
187 json_t *a)
188{
189 struct GNUNET_JSON_PackSpec ps = {
190 .field_name = name,
191 .object = a
192 };
193
194 if (NULL == a)
195 return ps;
196 if (! json_is_array (a))
197 {
198 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
199 "Expected JSON array for field `%s'\n",
200 name);
201 GNUNET_assert (0);
202 }
203 return ps;
204}
205
206
207struct GNUNET_JSON_PackSpec
208GNUNET_JSON_pack_array_incref (const char *name,
209 json_t *a)
210{
211 struct GNUNET_JSON_PackSpec ps = {
212 .field_name = name,
213 .object = a
214 };
215
216 if (NULL == a)
217 return ps;
218 (void) json_incref (a);
219 if (! json_is_array (a))
220 {
221 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
222 "Expected JSON array for field `%s'\n",
223 name);
224 GNUNET_assert (0);
225 }
226 return ps;
227}
228
229
230struct GNUNET_JSON_PackSpec
231GNUNET_JSON_pack_data_varsize (const char *name,
232 const void *blob,
233 size_t blob_size)
234{
235 struct GNUNET_JSON_PackSpec ps = {
236 .field_name = name,
237 .object = (NULL != blob)
238 ? GNUNET_JSON_from_data (blob,
239 blob_size)
240 : NULL
241 };
242
243 return ps;
244}
245
246
247struct GNUNET_JSON_PackSpec
248GNUNET_JSON_pack_time_abs (const char *name,
249 struct GNUNET_TIME_Absolute at)
250{
251 struct GNUNET_JSON_PackSpec ps = {
252 .field_name = name
253 };
254
255 if (0 != at.abs_value_us)
256 {
257 ps.object = GNUNET_JSON_from_time_abs (at);
258 GNUNET_assert (NULL != ps.object);
259 }
260 else
261 {
262 ps.object = NULL;
263 }
264 return ps;
265}
266
267
268struct GNUNET_JSON_PackSpec
269GNUNET_JSON_pack_time_abs_nbo (const char *name,
270 struct GNUNET_TIME_AbsoluteNBO at)
271{
272 return GNUNET_JSON_pack_time_abs (name,
273 GNUNET_TIME_absolute_ntoh (at));
274}
275
276
277struct GNUNET_JSON_PackSpec
278GNUNET_JSON_pack_time_rel (const char *name,
279 struct GNUNET_TIME_Relative rt)
280{
281 json_t *json;
282
283 json = GNUNET_JSON_from_time_rel (rt);
284 GNUNET_assert (NULL != json);
285 return GNUNET_JSON_pack_object_steal (name,
286 json);
287}
288
289
290struct GNUNET_JSON_PackSpec
291GNUNET_JSON_pack_time_rel_nbo (const char *name,
292 struct GNUNET_TIME_RelativeNBO rt)
293{
294 return GNUNET_JSON_pack_time_rel (name,
295 GNUNET_TIME_relative_ntoh (rt));
296}
297
298
299struct GNUNET_JSON_PackSpec
300GNUNET_JSON_pack_rsa_public_key (const char *name,
301 const struct GNUNET_CRYPTO_RsaPublicKey *pk)
302{
303 struct GNUNET_JSON_PackSpec ps = {
304 .field_name = name,
305 .object = GNUNET_JSON_from_rsa_public_key (pk)
306 };
307
308 return ps;
309}
310
311
312struct GNUNET_JSON_PackSpec
313GNUNET_JSON_pack_rsa_signature (const char *name,
314 const struct GNUNET_CRYPTO_RsaSignature *sig)
315{
316 struct GNUNET_JSON_PackSpec ps = {
317 .field_name = name,
318 .object = GNUNET_JSON_from_rsa_signature (sig)
319 };
320
321 return ps;
322}
323
324
325/* end of json_pack.c */
diff --git a/src/messenger/gnunet-messenger.c b/src/messenger/gnunet-messenger.c
index 094ae398d..28fa4b147 100644
--- a/src/messenger/gnunet-messenger.c
+++ b/src/messenger/gnunet-messenger.c
@@ -80,7 +80,12 @@ on_message (void *cls, struct GNUNET_MESSENGER_Room *room, const struct GNUNET_M
80 } 80 }
81 case GNUNET_MESSENGER_KIND_TEXT: 81 case GNUNET_MESSENGER_KIND_TEXT:
82 { 82 {
83 printf ("* '%s' says: \"%s\"\n", sender_name, message->body.text.text); 83 if (flags & GNUNET_MESSENGER_FLAG_SENT)
84 printf (">");
85 else
86 printf ("<");
87
88 printf (" '%s' says: \"%s\"\n", sender_name, message->body.text.text);
84 break; 89 break;
85 } 90 }
86 default: 91 default:
diff --git a/src/messenger/gnunet-service-messenger_handle.c b/src/messenger/gnunet-service-messenger_handle.c
index 4d2318d62..d7007dbf6 100644
--- a/src/messenger/gnunet-service-messenger_handle.c
+++ b/src/messenger/gnunet-service-messenger_handle.c
@@ -474,6 +474,28 @@ get_next_member_session_contect(const struct GNUNET_MESSENGER_MemberSession *ses
474 return get_member_session_context(session); 474 return get_member_session_context(session);
475} 475}
476 476
477static const struct GNUNET_MESSENGER_MemberSession*
478get_handle_member_session (struct GNUNET_MESSENGER_SrvHandle *handle, const struct GNUNET_HashCode *key)
479{
480 GNUNET_assert((handle) && (key) && (handle->service));
481
482 const struct GNUNET_ShortHashCode *id = get_handle_member_id(handle, key);
483 struct GNUNET_MESSENGER_SrvRoom *room = get_service_room(handle->service, key);
484
485 if ((!id) || (!room))
486 return NULL;
487
488 struct GNUNET_MESSENGER_MemberStore *store = get_room_member_store(room);
489 struct GNUNET_MESSENGER_Member *member = get_store_member(store, id);
490
491 const struct GNUNET_MESSENGER_Ego *ego = get_handle_ego(handle);
492
493 if (!ego)
494 return NULL;
495
496 return get_member_session(member, &(ego->pub));
497}
498
477void 499void
478notify_handle_message (struct GNUNET_MESSENGER_SrvHandle *handle, const struct GNUNET_HashCode *key, 500notify_handle_message (struct GNUNET_MESSENGER_SrvHandle *handle, const struct GNUNET_HashCode *key,
479 const struct GNUNET_MESSENGER_MemberSession *session, 501 const struct GNUNET_MESSENGER_MemberSession *session,
@@ -523,9 +545,13 @@ notify_handle_message (struct GNUNET_MESSENGER_SrvHandle *handle, const struct G
523 GNUNET_memcpy(&(msg->context), context, sizeof(msg->context)); 545 GNUNET_memcpy(&(msg->context), context, sizeof(msg->context));
524 GNUNET_memcpy(&(msg->hash), hash, sizeof(msg->hash)); 546 GNUNET_memcpy(&(msg->hash), hash, sizeof(msg->hash));
525 547
526 msg->flags = (uint32_t) ( 548 msg->flags = (uint32_t) GNUNET_MESSENGER_FLAG_NONE;
527 private_message? GNUNET_MESSENGER_FLAG_PRIVATE : GNUNET_MESSENGER_FLAG_NONE 549
528 ); 550 if (get_handle_member_session(handle, key) == session)
551 msg->flags |= (uint32_t) GNUNET_MESSENGER_FLAG_SENT;
552
553 if (private_message)
554 msg->flags |= (uint32_t) GNUNET_MESSENGER_FLAG_PRIVATE;
529 555
530 char *buffer = ((char*) msg) + sizeof(*msg); 556 char *buffer = ((char*) msg) + sizeof(*msg);
531 encode_message (message, length, buffer, GNUNET_YES); 557 encode_message (message, length, buffer, GNUNET_YES);
diff --git a/src/messenger/gnunet-service-messenger_member.c b/src/messenger/gnunet-service-messenger_member.c
index 7f00e8438..b0a735dbe 100644
--- a/src/messenger/gnunet-service-messenger_member.c
+++ b/src/messenger/gnunet-service-messenger_member.c
@@ -88,6 +88,7 @@ callback_scan_for_sessions (void *cls, const char *filename)
88 GNUNET_asprintf (&directory, "%s%c", filename, DIR_SEPARATOR); 88 GNUNET_asprintf (&directory, "%s%c", filename, DIR_SEPARATOR);
89 89
90 load_member_session(member, directory); 90 load_member_session(member, directory);
91 GNUNET_free (directory);
91 } 92 }
92 93
93 return GNUNET_OK; 94 return GNUNET_OK;
diff --git a/src/messenger/gnunet-service-messenger_room.c b/src/messenger/gnunet-service-messenger_room.c
index c3a5e3a4b..73e94908f 100644
--- a/src/messenger/gnunet-service-messenger_room.c
+++ b/src/messenger/gnunet-service-messenger_room.c
@@ -1144,6 +1144,7 @@ load_room (struct GNUNET_MESSENGER_SrvRoom *room)
1144 GNUNET_asprintf (&last_messages_file, "%s%s", room_dir, "last_messages.list"); 1144 GNUNET_asprintf (&last_messages_file, "%s%s", room_dir, "last_messages.list");
1145 1145
1146 load_message_state(&(room->state), room_dir); 1146 load_message_state(&(room->state), room_dir);
1147 GNUNET_free (last_messages_file);
1147 } 1148 }
1148 1149
1149 GNUNET_free(room_dir); 1150 GNUNET_free(room_dir);
diff --git a/src/namecache/namecache_api.c b/src/namecache/namecache_api.c
index fdbf142a7..70c848037 100644
--- a/src/namecache/namecache_api.c
+++ b/src/namecache/namecache_api.c
@@ -228,6 +228,7 @@ handle_lookup_block_response (void *cls,
228 char buf[size] GNUNET_ALIGN; 228 char buf[size] GNUNET_ALIGN;
229 struct GNUNET_GNSRECORD_Block *block; 229 struct GNUNET_GNSRECORD_Block *block;
230 230
231 memset (buf, 0, size);
231 block = (struct GNUNET_GNSRECORD_Block *) buf; 232 block = (struct GNUNET_GNSRECORD_Block *) buf;
232 GNUNET_memcpy (block, 233 GNUNET_memcpy (block,
233 &msg[1], 234 &msg[1],
diff --git a/src/namestore/Makefile.am b/src/namestore/Makefile.am
index 61bcfbaf8..18e6a196b 100644
--- a/src/namestore/Makefile.am
+++ b/src/namestore/Makefile.am
@@ -752,8 +752,4 @@ EXTRA_DIST = \
752 test_plugin_namestore_postgres.conf \ 752 test_plugin_namestore_postgres.conf \
753 test_plugin_namestore_flat.conf \ 753 test_plugin_namestore_flat.conf \
754 test_hostkey \ 754 test_hostkey \
755 zonefiles/BW7PTMDSN5KS42GMK2VKVE96BAYDS3QVMAS7SC5208FD6HFTAXE0.zkey \
756 zonefiles/KHW2Y5A7X59Z8BC2GHSEQ9WGZ5HWVEF25TBFR3Q5QHCERMVM76DG.zkey \
757 zonefiles/CNFGWF0JH0C65M6PQW6VSRR6D3NEZVHAQF6NC037J01TETS6CJ30.zkey \
758 zonefiles/TWY43VS959JJ41KN2FG8782EJ2N0XDF4J6BWASR1BK5BPPRWQJAG.zkey \
759 $(check_SCRIPTS) 755 $(check_SCRIPTS)
diff --git a/src/namestore/gnunet-namestore-fcfsd.c b/src/namestore/gnunet-namestore-fcfsd.c
index 847f7cb64..95d4c5878 100644
--- a/src/namestore/gnunet-namestore-fcfsd.c
+++ b/src/namestore/gnunet-namestore-fcfsd.c
@@ -185,15 +185,15 @@ do_shutdown (void *cls)
185 } 185 }
186 if (NULL != notfound_page) 186 if (NULL != notfound_page)
187 { 187 {
188 MHD_destroy_response (main_page->response); 188 MHD_destroy_response (notfound_page->response);
189 GNUNET_free (main_page->handle); 189 GNUNET_free (notfound_page->handle);
190 GNUNET_free (main_page); 190 GNUNET_free (notfound_page);
191 } 191 }
192 if (NULL != forbidden_page) 192 if (NULL != forbidden_page)
193 { 193 {
194 MHD_destroy_response (main_page->response); 194 MHD_destroy_response (forbidden_page->response);
195 GNUNET_free (main_page->handle); 195 GNUNET_free (forbidden_page->handle);
196 GNUNET_free (main_page); 196 GNUNET_free (forbidden_page);
197 } 197 }
198 198
199 if (NULL != namestore) 199 if (NULL != namestore)
diff --git a/src/namestore/plugin_rest_namestore.c b/src/namestore/plugin_rest_namestore.c
index ae93e5eff..ff5494dc7 100644
--- a/src/namestore/plugin_rest_namestore.c
+++ b/src/namestore/plugin_rest_namestore.c
@@ -955,6 +955,12 @@ list_ego (void *cls,
955 state = ID_REST_STATE_POST_INIT; 955 state = ID_REST_STATE_POST_INIT;
956 return; 956 return;
957 } 957 }
958 if (NULL == ego)
959 {
960 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
961 "Called with NULL ego\n");
962 return;
963 }
958 if (ID_REST_STATE_INIT == state) 964 if (ID_REST_STATE_INIT == state)
959 { 965 {
960 ego_entry = GNUNET_new (struct EgoEntry); 966 ego_entry = GNUNET_new (struct EgoEntry);
diff --git a/src/namestore/zonefiles/BW7PTMDSN5KS42GMK2VKVE96BAYDS3QVMAS7SC5208FD6HFTAXE0.zkey b/src/namestore/zonefiles/BW7PTMDSN5KS42GMK2VKVE96BAYDS3QVMAS7SC5208FD6HFTAXE0.zkey
deleted file mode 100644
index 0d37aefef..000000000
--- a/src/namestore/zonefiles/BW7PTMDSN5KS42GMK2VKVE96BAYDS3QVMAS7SC5208FD6HFTAXE0.zkey
+++ /dev/null
@@ -1 +0,0 @@
1ˆ‘’“ÂÚ Qž”0ÿ·Ò†d Õ/Ô#‰`«ÇËÂ$Éf \ No newline at end of file
diff --git a/src/namestore/zonefiles/CNFGWF0JH0C65M6PQW6VSRR6D3NEZVHAQF6NC037J01TETS6CJ30.zkey b/src/namestore/zonefiles/CNFGWF0JH0C65M6PQW6VSRR6D3NEZVHAQF6NC037J01TETS6CJ30.zkey
deleted file mode 100644
index b5b465ea1..000000000
--- a/src/namestore/zonefiles/CNFGWF0JH0C65M6PQW6VSRR6D3NEZVHAQF6NC037J01TETS6CJ30.zkey
+++ /dev/null
Binary files differ
diff --git a/src/namestore/zonefiles/KHW2Y5A7X59Z8BC2GHSEQ9WGZ5HWVEF25TBFR3Q5QHCERMVM76DG.zkey b/src/namestore/zonefiles/KHW2Y5A7X59Z8BC2GHSEQ9WGZ5HWVEF25TBFR3Q5QHCERMVM76DG.zkey
deleted file mode 100644
index 7535efb5e..000000000
--- a/src/namestore/zonefiles/KHW2Y5A7X59Z8BC2GHSEQ9WGZ5HWVEF25TBFR3Q5QHCERMVM76DG.zkey
+++ /dev/null
@@ -1 +0,0 @@
1p‘Ñç¨Â¡8&û„D6£ Vív+XÃì{ A \ No newline at end of file
diff --git a/src/namestore/zonefiles/TWY43VS959JJ41KN2FG8782EJ2N0XDF4J6BWASR1BK5BPPRWQJAG.zkey b/src/namestore/zonefiles/TWY43VS959JJ41KN2FG8782EJ2N0XDF4J6BWASR1BK5BPPRWQJAG.zkey
deleted file mode 100644
index ac3ed96a3..000000000
--- a/src/namestore/zonefiles/TWY43VS959JJ41KN2FG8782EJ2N0XDF4J6BWASR1BK5BPPRWQJAG.zkey
+++ /dev/null
@@ -1,2 +0,0 @@
1XJèµMíŠÀ …¬½
2dú胦ÓŒòB×=ÏB \ No newline at end of file
diff --git a/src/nse/Makefile.am b/src/nse/Makefile.am
index 85ae4d3be..824aa10d4 100644
--- a/src/nse/Makefile.am
+++ b/src/nse/Makefile.am
@@ -47,6 +47,7 @@ gnunet_nse_profiler_LDADD = -lm \
47 libgnunetnse.la \ 47 libgnunetnse.la \
48 $(top_builddir)/src/util/libgnunetutil.la \ 48 $(top_builddir)/src/util/libgnunetutil.la \
49 $(top_builddir)/src/statistics/libgnunetstatistics.la \ 49 $(top_builddir)/src/statistics/libgnunetstatistics.la \
50 $(top_builddir)/src/testing/libgnunettesting.la \
50 $(top_builddir)/src/testbed/libgnunettestbed.la \ 51 $(top_builddir)/src/testbed/libgnunettestbed.la \
51 $(GN_LIBINTL) 52 $(GN_LIBINTL)
52 53
diff --git a/src/peerinfo-tool/Makefile.am b/src/peerinfo-tool/Makefile.am
index 74af5890b..825ad5452 100644
--- a/src/peerinfo-tool/Makefile.am
+++ b/src/peerinfo-tool/Makefile.am
@@ -26,14 +26,6 @@ libgnunet_plugin_rest_peerinfo_la_LIBADD = \
26 $(top_builddir)/src/json/libgnunetjson.la \ 26 $(top_builddir)/src/json/libgnunetjson.la \
27 $(top_builddir)/src/util/libgnunetutil.la $(XLIBS) \ 27 $(top_builddir)/src/util/libgnunetutil.la $(XLIBS) \
28 $(LTLIBINTL) -ljansson $(MHD_LIBS) 28 $(LTLIBINTL) -ljansson $(MHD_LIBS)
29libgnunet_plugin_rest_peerinfo_la_DEPENDENCIES = \
30 $(top_builddir)/src/hello/libgnunethello.la \
31 $(top_builddir)/src/peerinfo/libgnunetpeerinfo.la \
32 $(top_builddir)/src/transport/libgnunettransport.la \
33 $(top_builddir)/src/ats/libgnunetats.la \
34 $(top_builddir)/src/rest/libgnunetrest.la \
35 $(top_builddir)/src/json/libgnunetjson.la \
36 $(top_builddir)/src/util/libgnunetutil.la
37libgnunet_plugin_rest_peerinfo_la_LDFLAGS = \ 29libgnunet_plugin_rest_peerinfo_la_LDFLAGS = \
38 $(GN_PLUGIN_LDFLAGS) 30 $(GN_PLUGIN_LDFLAGS)
39libgnunet_plugin_rest_peerinfo_la_CFLAGS = $(MHD_CFLAGS) $(AM_CFLAGS) 31libgnunet_plugin_rest_peerinfo_la_CFLAGS = $(MHD_CFLAGS) $(AM_CFLAGS)
diff --git a/src/pq/Makefile.am b/src/pq/Makefile.am
index 0febac4ac..cbb123cbb 100644
--- a/src/pq/Makefile.am
+++ b/src/pq/Makefile.am
@@ -24,7 +24,6 @@ libgnunetpq_la_LIBADD = -lpq \
24libgnunetpq_la_LDFLAGS = \ 24libgnunetpq_la_LDFLAGS = \
25 $(POSTGRESQL_LDFLAGS) \ 25 $(POSTGRESQL_LDFLAGS) \
26 $(GN_LIB_LDFLAGS) \ 26 $(GN_LIB_LDFLAGS) \
27 -lpthread \
28 -version-info 1:0:0 27 -version-info 1:0:0
29 28
30if ENABLE_TEST_RUN 29if ENABLE_TEST_RUN
diff --git a/src/pq/pq.h b/src/pq/pq.h
index 3c89626a9..d10931d99 100644
--- a/src/pq/pq.h
+++ b/src/pq/pq.h
@@ -28,6 +28,7 @@
28#include "gnunet_util_lib.h" 28#include "gnunet_util_lib.h"
29#include "gnunet_pq_lib.h" 29#include "gnunet_pq_lib.h"
30 30
31
31/** 32/**
32 * Handle to Postgres database. 33 * Handle to Postgres database.
33 */ 34 */
@@ -59,24 +60,32 @@ struct GNUNET_PQ_Context
59 char *load_path; 60 char *load_path;
60 61
61 /** 62 /**
62 * Function to call on Postgres FDs. 63 * Map managing event subscriptions.
63 */ 64 */
64 GNUNET_PQ_SocketCallback sc; 65 struct GNUNET_CONTAINER_MultiShortmap *channel_map;
65 66
66 /** 67 /**
67 * Closure for @e sc. 68 * Task responsible for processing events.
68 */ 69 */
69 void *sc_cls; 70 struct GNUNET_SCHEDULER_Task *event_task;
70 71
71 /** 72 /**
72 * Map managing event subscriptions. 73 * File descriptor wrapper for @e event_task.
73 */ 74 */
74 struct GNUNET_CONTAINER_MultiShortmap *channel_map; 75 struct GNUNET_NETWORK_Handle *rfd;
75
76 /**
77 * Lock to access @e channel_map.
78 */
79 pthread_mutex_t notify_lock;
80}; 76};
81 77
78
79/**
80 * Internal API. Reconnect should re-register notifications
81 * after a disconnect.
82 *
83 * @param db the DB handle
84 * @param fd socket to listen on
85 */
86void
87GNUNET_PQ_event_reconnect_ (struct GNUNET_PQ_Context *db,
88 int fd);
89
90
82#endif 91#endif
diff --git a/src/pq/pq_connect.c b/src/pq/pq_connect.c
index 00664dcd0..a2dce3fb0 100644
--- a/src/pq/pq_connect.c
+++ b/src/pq/pq_connect.c
@@ -24,6 +24,7 @@
24 */ 24 */
25#include "platform.h" 25#include "platform.h"
26#include "pq.h" 26#include "pq.h"
27#include <pthread.h>
27 28
28 29
29/** 30/**
@@ -63,28 +64,6 @@ pq_notice_processor_cb (void *arg,
63} 64}
64 65
65 66
66/**
67 * Create a connection to the Postgres database using @a config_str for the
68 * configuration. Initialize logging via GNUnet's log routines and disable
69 * Postgres's logger. Also ensures that the statements in @a load_path and @a
70 * es are executed whenever we (re)connect to the database, and that the
71 * prepared statements in @a ps are "ready". If statements in @es fail that
72 * were created with #GNUNET_PQ_make_execute(), then the entire operation
73 * fails.
74 *
75 * In @a load_path, a list of "$XXXX.sql" files is expected where $XXXX
76 * must be a sequence of contiguous integer values starting at 0000.
77 * These files are then loaded in sequence using "psql $config_str" before
78 * running statements from @e es. The directory is inspected again on
79 * reconnect.
80 *
81 * @param config_str configuration to use
82 * @param load_path path to directory with SQL transactions to run, can be NULL
83 * @param es #GNUNET_PQ_PREPARED_STATEMENT_END-terminated
84 * array of statements to execute upon EACH connection, can be NULL
85 * @param ps array of prepared statements to prepare, can be NULL
86 * @return NULL on error
87 */
88struct GNUNET_PQ_Context * 67struct GNUNET_PQ_Context *
89GNUNET_PQ_connect (const char *config_str, 68GNUNET_PQ_connect (const char *config_str,
90 const char *load_path, 69 const char *load_path,
@@ -122,6 +101,8 @@ GNUNET_PQ_connect (const char *config_str,
122 ps, 101 ps,
123 plen * sizeof (struct GNUNET_PQ_PreparedStatement)); 102 plen * sizeof (struct GNUNET_PQ_PreparedStatement));
124 } 103 }
104 db->channel_map = GNUNET_CONTAINER_multishortmap_create (16,
105 GNUNET_YES);
125 GNUNET_PQ_reconnect (db); 106 GNUNET_PQ_reconnect (db);
126 if (NULL == db->conn) 107 if (NULL == db->conn)
127 { 108 {
@@ -142,7 +123,7 @@ GNUNET_PQ_connect (const char *config_str,
142 * @param i patch number to append to the @a load_path 123 * @param i patch number to append to the @a load_path
143 * @return #GNUNET_OK on success, #GNUNET_NO if patch @a i does not exist, #GNUNET_SYSERR on error 124 * @return #GNUNET_OK on success, #GNUNET_NO if patch @a i does not exist, #GNUNET_SYSERR on error
144 */ 125 */
145static int 126static enum GNUNET_GenericReturnValue
146apply_patch (struct GNUNET_PQ_Context *db, 127apply_patch (struct GNUNET_PQ_Context *db,
147 const char *load_path, 128 const char *load_path,
148 unsigned int i) 129 unsigned int i)
@@ -162,7 +143,7 @@ apply_patch (struct GNUNET_PQ_Context *db,
162 "Applying SQL file `%s' on database %s\n", 143 "Applying SQL file `%s' on database %s\n",
163 buf, 144 buf,
164 db->config_str); 145 db->config_str);
165 psql = GNUNET_OS_start_process (GNUNET_OS_INHERIT_STD_NONE, 146 psql = GNUNET_OS_start_process (GNUNET_OS_INHERIT_STD_ERR,
166 NULL, 147 NULL,
167 NULL, 148 NULL,
168 NULL, 149 NULL,
@@ -191,7 +172,7 @@ apply_patch (struct GNUNET_PQ_Context *db,
191 (0 != code) ) 172 (0 != code) )
192 { 173 {
193 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, 174 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
194 "Could not run PSQL on file %s: %d\n", 175 "Could not run PSQL on file %s: psql exit code was %d\n",
195 buf, 176 buf,
196 (int) code); 177 (int) code);
197 return GNUNET_SYSERR; 178 return GNUNET_SYSERR;
@@ -200,15 +181,6 @@ apply_patch (struct GNUNET_PQ_Context *db,
200} 181}
201 182
202 183
203/**
204 * Within the @a db context, run all the SQL files
205 * from the @a load_path from 0000-9999.sql (as long
206 * as the files exist contiguously).
207 *
208 * @param db database context to use
209 * @param load_path where to find the XXXX.sql files
210 * @return #GNUNET_OK on success
211 */
212enum GNUNET_GenericReturnValue 184enum GNUNET_GenericReturnValue
213GNUNET_PQ_run_sql (struct GNUNET_PQ_Context *db, 185GNUNET_PQ_run_sql (struct GNUNET_PQ_Context *db,
214 const char *load_path) 186 const char *load_path)
@@ -304,11 +276,6 @@ GNUNET_PQ_run_sql (struct GNUNET_PQ_Context *db,
304} 276}
305 277
306 278
307/**
308 * Reinitialize the database @a db if the connection is down.
309 *
310 * @param db database connection to reinitialize
311 */
312void 279void
313GNUNET_PQ_reconnect_if_down (struct GNUNET_PQ_Context *db) 280GNUNET_PQ_reconnect_if_down (struct GNUNET_PQ_Context *db)
314{ 281{
@@ -321,14 +288,11 @@ GNUNET_PQ_reconnect_if_down (struct GNUNET_PQ_Context *db)
321} 288}
322 289
323 290
324/**
325 * Reinitialize the database @a db.
326 *
327 * @param db database connection to reinitialize
328 */
329void 291void
330GNUNET_PQ_reconnect (struct GNUNET_PQ_Context *db) 292GNUNET_PQ_reconnect (struct GNUNET_PQ_Context *db)
331{ 293{
294 GNUNET_PQ_event_reconnect_ (db,
295 -1);
332 if (NULL != db->conn) 296 if (NULL != db->conn)
333 PQfinish (db->conn); 297 PQfinish (db->conn);
334 db->conn = PQconnectdb (db->config_str); 298 db->conn = PQconnectdb (db->config_str);
@@ -380,7 +344,7 @@ GNUNET_PQ_reconnect (struct GNUNET_PQ_Context *db)
380 0); 344 0);
381 if (GNUNET_NO == ret) 345 if (GNUNET_NO == ret)
382 { 346 {
383 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 347 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
384 "Failed to find SQL file to load database versioning logic\n"); 348 "Failed to find SQL file to load database versioning logic\n");
385 PQfinish (db->conn); 349 PQfinish (db->conn);
386 db->conn = NULL; 350 db->conn = NULL;
@@ -448,26 +412,11 @@ GNUNET_PQ_reconnect (struct GNUNET_PQ_Context *db)
448 db->conn = NULL; 412 db->conn = NULL;
449 return; 413 return;
450 } 414 }
415 GNUNET_PQ_event_reconnect_ (db,
416 PQsocket (db->conn));
451} 417}
452 418
453 419
454/**
455 * Connect to a postgres database using the configuration
456 * option "CONFIG" in @a section. Also ensures that the
457 * statements in @a es are executed whenever we (re)connect to the
458 * database, and that the prepared statements in @a ps are "ready".
459 *
460 * The caller does not have to ensure that @a es and @a ps remain allocated
461 * and initialized in memory until #GNUNET_PQ_disconnect() is called, as a copy will be made.
462 *
463 * @param cfg configuration
464 * @param section configuration section to use to get Postgres configuration options
465 * @param load_path_suffix suffix to append to the SQL_DIR in the configuration
466 * @param es #GNUNET_PQ_PREPARED_STATEMENT_END-terminated
467 * array of statements to execute upon EACH connection, can be NULL
468 * @param ps array of prepared statements to prepare, can be NULL
469 * @return the postgres handle, NULL on error
470 */
471struct GNUNET_PQ_Context * 420struct GNUNET_PQ_Context *
472GNUNET_PQ_connect_with_cfg (const struct GNUNET_CONFIGURATION_Handle *cfg, 421GNUNET_PQ_connect_with_cfg (const struct GNUNET_CONFIGURATION_Handle *cfg,
473 const char *section, 422 const char *section,
@@ -509,15 +458,14 @@ GNUNET_PQ_connect_with_cfg (const struct GNUNET_CONFIGURATION_Handle *cfg,
509} 458}
510 459
511 460
512/**
513 * Disconnect from the database, destroying the prepared statements
514 * and releasing other associated resources.
515 *
516 * @param db database handle to disconnect (will be free'd)
517 */
518void 461void
519GNUNET_PQ_disconnect (struct GNUNET_PQ_Context *db) 462GNUNET_PQ_disconnect (struct GNUNET_PQ_Context *db)
520{ 463{
464 if (NULL == db)
465 return;
466 GNUNET_assert (0 ==
467 GNUNET_CONTAINER_multishortmap_size (db->channel_map));
468 GNUNET_CONTAINER_multishortmap_destroy (db->channel_map);
521 GNUNET_free (db->es); 469 GNUNET_free (db->es);
522 GNUNET_free (db->ps); 470 GNUNET_free (db->ps);
523 GNUNET_free (db->load_path); 471 GNUNET_free (db->load_path);
diff --git a/src/pq/pq_event.c b/src/pq/pq_event.c
index ecb942230..79a2e80c6 100644
--- a/src/pq/pq_event.c
+++ b/src/pq/pq_event.c
@@ -29,8 +29,8 @@
29 29
30/** 30/**
31 * Handle for an active LISTENer to the database. 31 * Handle for an active LISTENer to the database.
32 */ 32 */
33struct GNUNET_PQ_EventHandler 33struct GNUNET_DB_EventHandler
34{ 34{
35 /** 35 /**
36 * Channel name. 36 * Channel name.
@@ -40,7 +40,7 @@ struct GNUNET_PQ_EventHandler
40 /** 40 /**
41 * Function to call on events. 41 * Function to call on events.
42 */ 42 */
43 GNUNET_PQ_EventCallback cb; 43 GNUNET_DB_EventCallback cb;
44 44
45 /** 45 /**
46 * Closure for @e cb. 46 * Closure for @e cb.
@@ -51,9 +51,12 @@ struct GNUNET_PQ_EventHandler
51 * Database context this event handler is with. 51 * Database context this event handler is with.
52 */ 52 */
53 struct GNUNET_PQ_Context *db; 53 struct GNUNET_PQ_Context *db;
54};
55
56 54
55 /**
56 * Task to run on timeout.
57 */
58 struct GNUNET_SCHEDULER_Task *timeout_task;
59};
57 60
58 61
59/** 62/**
@@ -63,7 +66,7 @@ struct GNUNET_PQ_EventHandler
63 * @param[out] sh short hash to set 66 * @param[out] sh short hash to set
64 */ 67 */
65static void 68static void
66es_to_sh (const struct GNUNET_PQ_EventHeaderP *es, 69es_to_sh (const struct GNUNET_DB_EventHeaderP *es,
67 struct GNUNET_ShortHashCode *sh) 70 struct GNUNET_ShortHashCode *sh)
68{ 71{
69 struct GNUNET_HashCode h_channel; 72 struct GNUNET_HashCode h_channel;
@@ -103,6 +106,24 @@ sh_to_channel (struct GNUNET_ShortHashCode *sh,
103 106
104 107
105/** 108/**
109 * Convert @a sh to a Postgres identifier.
110 *
111 * @param identifier to convert
112 * @param[out] sh set to short hash
113 * @return #GNUNET_OK on success
114 */
115static enum GNUNET_GenericReturnValue
116channel_to_sh (const char *identifier,
117 struct GNUNET_ShortHashCode *sh)
118{
119 return GNUNET_STRINGS_string_to_data (identifier,
120 strlen (identifier),
121 sh,
122 sizeof (*sh));
123}
124
125
126/**
106 * Convert @a es to a Postgres identifier. 127 * Convert @a es to a Postgres identifier.
107 * 128 *
108 * @param es spec to hash to an identifier 129 * @param es spec to hash to an identifier
@@ -111,7 +132,7 @@ sh_to_channel (struct GNUNET_ShortHashCode *sh,
111 * @return end position of the identifier 132 * @return end position of the identifier
112 */ 133 */
113static char * 134static char *
114es_to_channel (const struct GNUNET_PQ_EventHeaderP *es, 135es_to_channel (const struct GNUNET_DB_EventHeaderP *es,
115 char identifier[64]) 136 char identifier[64])
116{ 137{
117 struct GNUNET_ShortHashCode sh; 138 struct GNUNET_ShortHashCode sh;
@@ -141,12 +162,12 @@ struct NotifyContext
141 162
142 163
143/** 164/**
144 * Function called on every event handler that 165 * Function called on every event handler that
145 * needs to be triggered. 166 * needs to be triggered.
146 * 167 *
147 * @param cls a `struct NotifyContext` 168 * @param cls a `struct NotifyContext`
148 * @param sh channel name 169 * @param sh channel name
149 * @param value a `struct GNUNET_PQ_EventHandler` 170 * @param value a `struct GNUNET_DB_EventHandler`
150 * @return #GNUNET_OK continue to iterate 171 * @return #GNUNET_OK continue to iterate
151 */ 172 */
152static int 173static int
@@ -155,45 +176,27 @@ do_notify (void *cls,
155 void *value) 176 void *value)
156{ 177{
157 struct NotifyContext *ctx = cls; 178 struct NotifyContext *ctx = cls;
158 struct GNUNET_PQ_EventHandler *eh = value; 179 struct GNUNET_DB_EventHandler *eh = value;
159 180
160 eh->cb (eh->cb_cls, 181 eh->cb (eh->cb_cls,
161 ctx->extra, 182 ctx->extra,
162 ctx->extra_size); 183 ctx->extra_size);
163 return GNUNET_OK; 184 return GNUNET_OK;
164}
165
166
167void
168GNUNET_PQ_event_set_socket_callback (struct GNUNET_PQ_Context *db,
169 GNUNET_PQ_SocketCallback sc,
170 void *sc_cls)
171{
172 int fd;
173
174 db->sc = sc;
175 db->sc_cls = sc_cls;
176 if (NULL == sc)
177 return;
178 GNUNET_assert (0 ==
179 pthread_mutex_lock (&db->notify_lock));
180 fd = PQsocket (db->conn);
181 if ( (-1 != fd) &&
182 (0 != GNUNET_CONTAINER_multishortmap_size (db->channel_map)) )
183 sc (sc_cls,
184 fd);
185 GNUNET_assert (0 ==
186 pthread_mutex_unlock (&db->notify_lock));
187} 185}
188 186
189 187
190void 188static void
191GNUNET_PQ_event_do_poll (struct GNUNET_PQ_Context *db) 189event_do_poll (struct GNUNET_PQ_Context *db)
192{ 190{
193 PGnotify *n; 191 PGnotify *n;
194 192
195 GNUNET_assert (0 == 193 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
196 pthread_mutex_lock (&db->notify_lock)); 194 "PG poll job active\n");
195 if (1 !=
196 PQconsumeInput (db->conn))
197 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
198 "Failed to read from Postgres: %s\n",
199 PQerrorMessage (db->conn));
197 while (NULL != (n = PQnotifies (db->conn))) 200 while (NULL != (n = PQnotifies (db->conn)))
198 { 201 {
199 struct GNUNET_ShortHashCode sh; 202 struct GNUNET_ShortHashCode sh;
@@ -201,15 +204,22 @@ GNUNET_PQ_event_do_poll (struct GNUNET_PQ_Context *db)
201 .extra = NULL 204 .extra = NULL
202 }; 205 };
203 206
207 if ('X' != toupper ((int) n->relname[0]))
208 {
209 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
210 "Ignoring notification for unsupported channel identifier `%s'\n",
211 n->relname);
212 PQfreemem (n);
213 continue;
214 }
204 if (GNUNET_OK != 215 if (GNUNET_OK !=
205 GNUNET_STRINGS_string_to_data (n->relname, 216 channel_to_sh (&n->relname[1],
206 strlen (n->relname), 217 &sh))
207 &sh,
208 sizeof (sh)))
209 { 218 {
210 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, 219 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
211 "Ignoring notification for unsupported channel identifier `%s'\n", 220 "Ignoring notification for unsupported channel identifier `%s'\n",
212 n->relname); 221 n->relname);
222 PQfreemem (n);
213 continue; 223 continue;
214 } 224 }
215 if ( (NULL != n->extra) && 225 if ( (NULL != n->extra) &&
@@ -223,36 +233,97 @@ GNUNET_PQ_event_do_poll (struct GNUNET_PQ_Context *db)
223 "Ignoring notification for unsupported extra data `%s' on channel `%s'\n", 233 "Ignoring notification for unsupported extra data `%s' on channel `%s'\n",
224 n->extra, 234 n->extra,
225 n->relname); 235 n->relname);
236 PQfreemem (n);
226 continue; 237 continue;
227 } 238 }
228 GNUNET_CONTAINER_multishortmap_iterate (db->channel_map, 239 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
229 &do_notify, 240 "Received notification %s with extra data `%.*s'\n",
230 &ctx); 241 n->relname,
242 (int) ctx.extra_size,
243 (const char *) ctx.extra);
244 GNUNET_CONTAINER_multishortmap_get_multiple (db->channel_map,
245 &sh,
246 &do_notify,
247 &ctx);
231 GNUNET_free (ctx.extra); 248 GNUNET_free (ctx.extra);
249 PQfreemem (n);
232 } 250 }
233 GNUNET_assert (0 ==
234 pthread_mutex_unlock (&db->notify_lock));
235} 251}
236 252
237 253
238void 254/**
239GNUNET_PQ_event_scheduler_start (struct GNUNET_PQ_Context *db) 255 * The GNUnet scheduler notifies us that we need to
256 * trigger the DB event poller.
257 *
258 * @param cls a `struct GNUNET_PQ_Context *`
259 */
260static void
261do_scheduler_notify (void *cls)
240{ 262{
241 GNUNET_break (0); // FIXME: not implemented 263 struct GNUNET_PQ_Context *db = cls;
264
265 db->event_task = NULL;
266 GNUNET_assert (NULL != db->rfd);
267 event_do_poll (db);
268 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
269 "Resubscribing\n");
270 db->event_task
271 = GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL,
272 db->rfd,
273 &do_scheduler_notify,
274 db);
242} 275}
243 276
244 277
245void 278/**
246GNUNET_PQ_event_scheduler_stop (struct GNUNET_PQ_Context *db) 279 * Function called when the Postgres FD changes and we need
280 * to update the scheduler event loop task.
281 *
282 * @param cls a `struct GNUNET_PQ_Context *`
283 * @param fd the file descriptor, possibly -1
284 */
285static void
286scheduler_fd_cb (void *cls,
287 int fd)
247{ 288{
248 GNUNET_break (0); // FIXME: not implemented 289 struct GNUNET_PQ_Context *db = cls;
290
291 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
292 "New poll FD is %d\n",
293 fd);
294 if (NULL != db->event_task)
295 {
296 GNUNET_SCHEDULER_cancel (db->event_task);
297 db->event_task = NULL;
298 }
299 GNUNET_free (db->rfd);
300 if (-1 == fd)
301 return;
302 if (0 == GNUNET_CONTAINER_multishortmap_size (db->channel_map))
303 return;
304 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
305 "Activating poll job on %d\n",
306 fd);
307 db->rfd = GNUNET_NETWORK_socket_box_native (fd);
308 db->event_task
309 = GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_ZERO,
310 db->rfd,
311 &do_scheduler_notify,
312 db);
249} 313}
250 314
251 315
316/**
317 * Helper function to trigger an SQL @a cmd on @a db
318 *
319 * @param db database to send command to
320 * @param cmd prefix of the command to send
321 * @param eh details about the event
322 */
252static void 323static void
253manage_subscribe (struct GNUNET_PQ_Context *db, 324manage_subscribe (struct GNUNET_PQ_Context *db,
254 const char *cmd, 325 const char *cmd,
255 struct GNUNET_PQ_EventHandler *eh) 326 struct GNUNET_DB_EventHandler *eh)
256{ 327{
257 char sql[16 + 64]; 328 char sql[16 + 64];
258 char *end; 329 char *end;
@@ -262,6 +333,9 @@ manage_subscribe (struct GNUNET_PQ_Context *db,
262 cmd); 333 cmd);
263 end = sh_to_channel (&eh->sh, 334 end = sh_to_channel (&eh->sh,
264 end); 335 end);
336 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
337 "Executing PQ command `%s'\n",
338 sql);
265 result = PQexec (db->conn, 339 result = PQexec (db->conn,
266 sql); 340 sql);
267 if (PGRES_COMMAND_OK != PQresultStatus (result)) 341 if (PGRES_COMMAND_OK != PQresultStatus (result))
@@ -282,76 +356,134 @@ manage_subscribe (struct GNUNET_PQ_Context *db,
282} 356}
283 357
284 358
285struct GNUNET_PQ_EventHandler * 359/**
360 * Re-subscribe to notifications after disconnect.
361 *
362 * @param cls the DB context
363 * @param sh the short hash of the channel
364 * @param eh the event handler
365 * @return #GNUNET_OK to continue to iterate
366 */
367static int
368register_notify (void *cls,
369 const struct GNUNET_ShortHashCode *sh,
370 void *value)
371{
372 struct GNUNET_PQ_Context *db = cls;
373 struct GNUNET_DB_EventHandler *eh = value;
374
375 manage_subscribe (db,
376 "LISTEN X",
377 eh);
378 return GNUNET_OK;
379}
380
381
382void
383GNUNET_PQ_event_reconnect_ (struct GNUNET_PQ_Context *db,
384 int fd)
385{
386 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
387 "Change in PQ event FD to %d\n",
388 fd);
389 scheduler_fd_cb (db,
390 fd);
391 GNUNET_CONTAINER_multishortmap_iterate (db->channel_map,
392 &register_notify,
393 db);
394}
395
396
397/**
398 * Function run on timeout for an event. Triggers
399 * the notification, but does NOT clear the handler.
400 *
401 * @param cls a `struct GNUNET_DB_EventHandler *`
402 */
403static void
404event_timeout (void *cls)
405{
406 struct GNUNET_DB_EventHandler *eh = cls;
407
408 eh->timeout_task = NULL;
409 eh->cb (eh->cb_cls,
410 NULL,
411 0);
412}
413
414
415struct GNUNET_DB_EventHandler *
286GNUNET_PQ_event_listen (struct GNUNET_PQ_Context *db, 416GNUNET_PQ_event_listen (struct GNUNET_PQ_Context *db,
287 const struct GNUNET_PQ_EventHeaderP *es, 417 const struct GNUNET_DB_EventHeaderP *es,
288 GNUNET_PQ_EventCallback cb, 418 struct GNUNET_TIME_Relative timeout,
419 GNUNET_DB_EventCallback cb,
289 void *cb_cls) 420 void *cb_cls)
290{ 421{
291 struct GNUNET_PQ_EventHandler *eh; 422 struct GNUNET_DB_EventHandler *eh;
292 bool was_zero;
293 423
294 eh = GNUNET_new (struct GNUNET_PQ_EventHandler); 424 eh = GNUNET_new (struct GNUNET_DB_EventHandler);
295 eh->db = db; 425 eh->db = db;
296 es_to_sh (es, 426 es_to_sh (es,
297 &eh->sh); 427 &eh->sh);
298 eh->cb = cb; 428 eh->cb = cb;
299 eh->cb_cls = cb_cls; 429 eh->cb_cls = cb_cls;
300 GNUNET_assert (0 ==
301 pthread_mutex_lock (&db->notify_lock));
302 was_zero = (0 == GNUNET_CONTAINER_multishortmap_size (db->channel_map));
303 GNUNET_assert (GNUNET_OK == 430 GNUNET_assert (GNUNET_OK ==
304 GNUNET_CONTAINER_multishortmap_put (db->channel_map, 431 GNUNET_CONTAINER_multishortmap_put (db->channel_map,
305 &eh->sh, 432 &eh->sh,
306 eh, 433 eh,
307 GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE)); 434 GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE));
308 if ( (NULL != db->sc) && 435 if (NULL == db->event_task)
309 was_zero)
310 { 436 {
311 int fd = PQsocket (db->conn); 437 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
312 438 "Starting event scheduler\n");
313 if (-1 != fd) 439 scheduler_fd_cb (db,
314 db->sc (db->sc_cls, 440 PQsocket (db->conn));
315 fd);
316 } 441 }
317 manage_subscribe (db, 442 manage_subscribe (db,
318 "LISTEN ", 443 "LISTEN X",
319 eh); 444 eh);
320 GNUNET_assert (0 == 445 eh->timeout_task = GNUNET_SCHEDULER_add_delayed (timeout,
321 pthread_mutex_unlock (&db->notify_lock)); 446 &event_timeout,
447 eh);
322 return eh; 448 return eh;
323} 449}
324 450
325 451
326void 452void
327GNUNET_PQ_event_listen_cancel (struct GNUNET_PQ_EventHandler *eh) 453GNUNET_PQ_event_listen_cancel (struct GNUNET_DB_EventHandler *eh)
328{ 454{
329 struct GNUNET_PQ_Context *db = eh->db; 455 struct GNUNET_PQ_Context *db = eh->db;
330 456
331 GNUNET_assert (0 ==
332 pthread_mutex_lock (&db->notify_lock));
333 GNUNET_assert (GNUNET_OK == 457 GNUNET_assert (GNUNET_OK ==
334 GNUNET_CONTAINER_multishortmap_remove (db->channel_map, 458 GNUNET_CONTAINER_multishortmap_remove (db->channel_map,
335 &eh->sh, 459 &eh->sh,
336 eh)); 460 eh));
337
338 manage_subscribe (db, 461 manage_subscribe (db,
339 "UNLISTEN ", 462 "UNLISTEN X",
340 eh); 463 eh);
341 if ( (NULL != db->sc) && 464 if (0 == GNUNET_CONTAINER_multishortmap_size (db->channel_map))
342 (0 == GNUNET_CONTAINER_multishortmap_size (db->channel_map)) ) 465 {
466 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
467 "Stopping PQ event scheduler job\n");
468 GNUNET_free (db->rfd);
469 if (NULL != db->event_task)
470 {
471 GNUNET_SCHEDULER_cancel (db->event_task);
472 db->event_task = NULL;
473 }
474 }
475 if (NULL != eh->timeout_task)
343 { 476 {
344 db->sc (db->sc_cls, 477 GNUNET_SCHEDULER_cancel (eh->timeout_task);
345 -1); 478 eh->timeout_task = NULL;
346 } 479 }
347 GNUNET_assert (0 == 480 GNUNET_free (eh);
348 pthread_mutex_unlock (&db->notify_lock));
349} 481}
350 482
351 483
352void 484void
353GNUNET_PQ_event_notify (struct GNUNET_PQ_Context *db, 485GNUNET_PQ_event_notify (struct GNUNET_PQ_Context *db,
354 const struct GNUNET_PQ_EventHeaderP *es, 486 const struct GNUNET_DB_EventHeaderP *es,
355 const void *extra, 487 const void *extra,
356 size_t extra_size) 488 size_t extra_size)
357{ 489{
@@ -360,11 +492,11 @@ GNUNET_PQ_event_notify (struct GNUNET_PQ_Context *db,
360 PGresult *result; 492 PGresult *result;
361 493
362 end = stpcpy (sql, 494 end = stpcpy (sql,
363 "NOTIFY "); 495 "NOTIFY X");
364 end = es_to_channel (es, 496 end = es_to_channel (es,
365 end); 497 end);
366 end = stpcpy (end, 498 end = stpcpy (end,
367 "'"); 499 ", '");
368 end = GNUNET_STRINGS_data_to_string (extra, 500 end = GNUNET_STRINGS_data_to_string (extra,
369 extra_size, 501 extra_size,
370 end, 502 end,
@@ -373,6 +505,9 @@ GNUNET_PQ_event_notify (struct GNUNET_PQ_Context *db,
373 *end = '\0'; 505 *end = '\0';
374 end = stpcpy (end, 506 end = stpcpy (end,
375 "'"); 507 "'");
508 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
509 "Executing command `%s'\n",
510 sql);
376 result = PQexec (db->conn, 511 result = PQexec (db->conn,
377 sql); 512 sql);
378 if (PGRES_COMMAND_OK != PQresultStatus (result)) 513 if (PGRES_COMMAND_OK != PQresultStatus (result))
@@ -390,7 +525,8 @@ GNUNET_PQ_event_notify (struct GNUNET_PQ_Context *db,
390 PQerrorMessage (db->conn)); 525 PQerrorMessage (db->conn));
391 } 526 }
392 PQclear (result); 527 PQclear (result);
528 event_do_poll (db);
393} 529}
394 530
395/* end of pq_event.c */
396 531
532/* end of pq_event.c */
diff --git a/src/pq/test_pq.c b/src/pq/test_pq.c
index e588da45d..90b5c6489 100644
--- a/src/pq/test_pq.c
+++ b/src/pq/test_pq.c
@@ -25,6 +25,26 @@
25#include "platform.h" 25#include "platform.h"
26#include "pq.h" 26#include "pq.h"
27 27
28/**
29 * Database handle.
30 */
31static struct GNUNET_PQ_Context *db;
32
33/**
34 * Global return value, 0 on success.
35 */
36static int ret;
37
38/**
39 * An event handler.
40 */
41static struct GNUNET_DB_EventHandler *eh;
42
43/**
44 * Timeout task.
45 */
46static struct GNUNET_SCHEDULER_Task *tt;
47
28 48
29/** 49/**
30 * Setup prepared statements. 50 * Setup prepared statements.
@@ -109,7 +129,7 @@ run_queries (struct GNUNET_PQ_Context *db)
109 uint64_t u64; 129 uint64_t u64;
110 uint64_t u642; 130 uint64_t u642;
111 uint64_t uzzz = 42; 131 uint64_t uzzz = 42;
112 132
113 priv = GNUNET_CRYPTO_rsa_private_key_create (1024); 133 priv = GNUNET_CRYPTO_rsa_private_key_create (1024);
114 pub = GNUNET_CRYPTO_rsa_private_key_get_public (priv); 134 pub = GNUNET_CRYPTO_rsa_private_key_get_public (priv);
115 memset (&hmsg, 42, sizeof(hmsg)); 135 memset (&hmsg, 42, sizeof(hmsg));
@@ -220,6 +240,91 @@ run_queries (struct GNUNET_PQ_Context *db)
220} 240}
221 241
222 242
243/**
244 * Task called on shutdown.
245 *
246 * @param cls NULL
247 */
248static void
249event_end (void *cls)
250{
251 GNUNET_PQ_event_listen_cancel (eh);
252 eh = NULL;
253 if (NULL != tt)
254 {
255 GNUNET_SCHEDULER_cancel (tt);
256 tt = NULL;
257 }
258}
259
260
261/**
262 * Task called on timeout. Should not happen, means
263 * we did not get the expected event.
264 *
265 * @param cls NULL
266 */
267static void
268timeout_cb (void *cls)
269{
270 ret = 2;
271 GNUNET_break (0);
272 tt = NULL;
273 GNUNET_SCHEDULER_shutdown ();
274}
275
276
277/**
278 * Task called on expected event
279 *
280 * @param cls NULL
281 */
282static void
283event_sched_cb (void *cls,
284 const void *extra,
285 size_t extra_size)
286{
287 GNUNET_assert (5 == extra_size);
288 GNUNET_assert (0 ==
289 memcmp ("hello",
290 extra,
291 5));
292 GNUNET_SCHEDULER_shutdown ();
293}
294
295
296/**
297 * Run tests that need a scheduler.
298 *
299 * @param cls NULL
300 */
301static void
302sched_tests (void *cls)
303{
304 struct GNUNET_DB_EventHeaderP es = {
305 .size = htons (sizeof (es)),
306 .type = htons (42)
307 };
308
309
310 tt = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
311 &timeout_cb,
312 NULL);
313 eh = GNUNET_PQ_event_listen (db,
314 &es,
315 GNUNET_TIME_UNIT_FOREVER_REL,
316 &event_sched_cb,
317 NULL);
318 GNUNET_PQ_reconnect (db);
319 GNUNET_SCHEDULER_add_shutdown (&event_end,
320 NULL);
321 GNUNET_PQ_event_notify (db,
322 &es,
323 "hello",
324 5);
325}
326
327
223int 328int
224main (int argc, 329main (int argc,
225 const char *const argv[]) 330 const char *const argv[])
@@ -239,11 +344,9 @@ main (int argc,
239 ")"), 344 ")"),
240 GNUNET_PQ_EXECUTE_STATEMENT_END 345 GNUNET_PQ_EXECUTE_STATEMENT_END
241 }; 346 };
242 struct GNUNET_PQ_Context *db;
243 int ret;
244 347
245 GNUNET_log_setup ("test-pq", 348 GNUNET_log_setup ("test-pq",
246 "WARNING", 349 "INFO",
247 NULL); 350 NULL);
248 db = GNUNET_PQ_connect ("postgres:///gnunetcheck", 351 db = GNUNET_PQ_connect ("postgres:///gnunetcheck",
249 NULL, 352 NULL,
@@ -272,12 +375,26 @@ main (int argc,
272 return 1; 375 return 1;
273 } 376 }
274 ret = run_queries (db); 377 ret = run_queries (db);
378 if (0 != ret)
379 {
380 GNUNET_break (0);
381 GNUNET_PQ_disconnect (db);
382 return ret;
383 }
384 GNUNET_SCHEDULER_run (&sched_tests,
385 NULL);
386 if (0 != ret)
387 {
388 GNUNET_break (0);
389 GNUNET_PQ_disconnect (db);
390 return ret;
391 }
275#if TEST_RESTART 392#if TEST_RESTART
276 fprintf (stderr, "Please restart Postgres database now!\n"); 393 fprintf (stderr, "Please restart Postgres database now!\n");
277 sleep (60); 394 sleep (60);
278 ret = run_queries (db); 395 ret |= run_queries (db);
279 fprintf (stderr, "Result: %d (expect: 1 -- if you restarted the DB)\n", ret); 396 fprintf (stderr, "Result: %d (expect: 1 -- if you restarted the DB)\n", ret);
280 ret = run_queries (db); 397 ret |= run_queries (db);
281 fprintf (stderr, "Result: %d (expect: 0)\n", ret); 398 fprintf (stderr, "Result: %d (expect: 0)\n", ret);
282#endif 399#endif
283 { 400 {
diff --git a/src/reclaim/Makefile.am b/src/reclaim/Makefile.am
index 1a0b7fae4..350d77d4b 100644
--- a/src/reclaim/Makefile.am
+++ b/src/reclaim/Makefile.am
@@ -61,14 +61,6 @@ libgnunet_plugin_rest_reclaim_la_LIBADD = \
61 $(top_builddir)/src/namestore/libgnunetnamestore.la \ 61 $(top_builddir)/src/namestore/libgnunetnamestore.la \
62 $(top_builddir)/src/util/libgnunetutil.la $(XLIBS) \ 62 $(top_builddir)/src/util/libgnunetutil.la $(XLIBS) \
63 $(LTLIBINTL) -ljansson $(MHD_LIBS) 63 $(LTLIBINTL) -ljansson $(MHD_LIBS)
64libgnunet_plugin_rest_reclaim_la_DEPENDENCIES = \
65 $(top_builddir)/src/identity/libgnunetidentity.la \
66 libgnunetreclaim.la \
67 $(top_builddir)/src/json/libgnunetjson.la \
68 $(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
69 $(top_builddir)/src/rest/libgnunetrest.la \
70 $(top_builddir)/src/namestore/libgnunetnamestore.la \
71 $(top_builddir)/src/util/libgnunetutil.la
72libgnunet_plugin_rest_reclaim_la_LDFLAGS = \ 64libgnunet_plugin_rest_reclaim_la_LDFLAGS = \
73 $(GN_PLUGIN_LDFLAGS) 65 $(GN_PLUGIN_LDFLAGS)
74libgnunet_plugin_rest_reclaim_la_CFLAGS = $(MHD_CFLAGS) $(AM_CFLAGS) 66libgnunet_plugin_rest_reclaim_la_CFLAGS = $(MHD_CFLAGS) $(AM_CFLAGS)
@@ -102,11 +94,6 @@ libgnunet_plugin_rest_pabc_la_LIBADD = \
102 $(top_builddir)/src/rest/libgnunetrest.la \ 94 $(top_builddir)/src/rest/libgnunetrest.la \
103 $(top_builddir)/src/util/libgnunetutil.la $(XLIBS) \ 95 $(top_builddir)/src/util/libgnunetutil.la $(XLIBS) \
104 $(LTLIBINTL) -ljansson -lpabc $(MHD_LIBS) 96 $(LTLIBINTL) -ljansson -lpabc $(MHD_LIBS)
105libgnunet_plugin_rest_pabc_la_DEPENDENCIES = \
106 libgnunetreclaim.la \
107 $(top_builddir)/src/json/libgnunetjson.la \
108 $(top_builddir)/src/rest/libgnunetrest.la \
109 $(top_builddir)/src/util/libgnunetutil.la
110libgnunet_plugin_rest_pabc_la_LDFLAGS = \ 97libgnunet_plugin_rest_pabc_la_LDFLAGS = \
111 $(GN_PLUGIN_LDFLAGS) 98 $(GN_PLUGIN_LDFLAGS)
112libgnunet_plugin_rest_pabc_la_CFLAGS = $(MHD_CFLAGS) $(AM_CFLAGS) 99libgnunet_plugin_rest_pabc_la_CFLAGS = $(MHD_CFLAGS) $(AM_CFLAGS)
diff --git a/src/regex/Makefile.am b/src/regex/Makefile.am
index 13413f242..9a7466cb2 100644
--- a/src/regex/Makefile.am
+++ b/src/regex/Makefile.am
@@ -53,9 +53,6 @@ libgnunetregex_internal_a_SOURCES = \
53 regex_internal_lib.h \ 53 regex_internal_lib.h \
54 regex_internal.h regex_internal.c \ 54 regex_internal.h regex_internal.c \
55 regex_internal_dht.c 55 regex_internal_dht.c
56libgnunetregex_internal_a_DEPENDENCIES = \
57 libgnunetregexblock.la
58
59 56
60libgnunetregex_la_SOURCES = \ 57libgnunetregex_la_SOURCES = \
61 regex_api_announce.c \ 58 regex_api_announce.c \
@@ -126,6 +123,7 @@ gnunet_regex_profiler_SOURCES = \
126 gnunet-regex-profiler.c 123 gnunet-regex-profiler.c
127gnunet_regex_profiler_LDADD = -lm \ 124gnunet_regex_profiler_LDADD = -lm \
128 $(top_builddir)/src/arm/libgnunetarm.la \ 125 $(top_builddir)/src/arm/libgnunetarm.la \
126 $(top_builddir)/src/testing/libgnunettesting.la \
129 $(top_builddir)/src/testbed/libgnunettestbed.la \ 127 $(top_builddir)/src/testbed/libgnunettestbed.la \
130 libgnunetregex_internal.a \ 128 libgnunetregex_internal.a \
131 $(top_builddir)/src/dht/libgnunetdht.la \ 129 $(top_builddir)/src/dht/libgnunetdht.la \
diff --git a/src/rest/plugin_rest_config.c b/src/rest/plugin_rest_config.c
index af833efff..b0f18754c 100644
--- a/src/rest/plugin_rest_config.c
+++ b/src/rest/plugin_rest_config.c
@@ -91,7 +91,6 @@ static struct RequestHandle *requests_head;
91static struct RequestHandle *requests_tail; 91static struct RequestHandle *requests_tail;
92 92
93 93
94
95/** 94/**
96 * Cleanup request handle. 95 * Cleanup request handle.
97 * 96 *
@@ -199,7 +198,9 @@ get_cont (struct GNUNET_REST_RequestHandle *con_handle,
199 } 198 }
200 response = json_dumps (result, 0); 199 response = json_dumps (result, 0);
201 resp = GNUNET_REST_create_response (response); 200 resp = GNUNET_REST_create_response (response);
202 MHD_add_response_header (resp, "Content-Type", "application/json"); 201 GNUNET_assert (MHD_NO != MHD_add_response_header (resp,
202 "Content-Type",
203 "application/json"));
203 handle->proc (handle->proc_cls, resp, MHD_HTTP_OK); 204 handle->proc (handle->proc_cls, resp, MHD_HTTP_OK);
204 cleanup_handle (handle); 205 cleanup_handle (handle);
205 GNUNET_free (response); 206 GNUNET_free (response);
@@ -334,6 +335,7 @@ set_cont (struct GNUNET_REST_RequestHandle *con_handle,
334 handle->proc (handle->proc_cls, 335 handle->proc (handle->proc_cls,
335 GNUNET_REST_create_response (NULL), 336 GNUNET_REST_create_response (NULL),
336 MHD_HTTP_OK); 337 MHD_HTTP_OK);
338 GNUNET_free (cfg_fn);
337 cleanup_handle (handle); 339 cleanup_handle (handle);
338} 340}
339 341
@@ -352,9 +354,9 @@ options_cont (struct GNUNET_REST_RequestHandle *con_handle,
352 struct RequestHandle *handle = cls; 354 struct RequestHandle *handle = cls;
353 355
354 resp = GNUNET_REST_create_response (NULL); 356 resp = GNUNET_REST_create_response (NULL);
355 MHD_add_response_header (resp, 357 GNUNET_assert (MHD_NO != MHD_add_response_header (resp,
356 "Access-Control-Allow-Methods", 358 "Access-Control-Allow-Methods",
357 MHD_HTTP_METHOD_GET); 359 MHD_HTTP_METHOD_GET));
358 handle->proc (handle->proc_cls, resp, MHD_HTTP_OK); 360 handle->proc (handle->proc_cls, resp, MHD_HTTP_OK);
359 cleanup_handle (handle); 361 cleanup_handle (handle);
360} 362}
@@ -424,7 +426,7 @@ libgnunet_plugin_rest_config_init (void *cls)
424 api->cls = &plugin; 426 api->cls = &plugin;
425 api->name = GNUNET_REST_API_NS_CONFIG; 427 api->name = GNUNET_REST_API_NS_CONFIG;
426 api->process_request = &rest_config_process_request; 428 api->process_request = &rest_config_process_request;
427 GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("CONFIG REST API initialized\n")); 429 GNUNET_log (GNUNET_ERROR_TYPE_INFO, _ ("CONFIG REST API initialized\n"));
428 return api; 430 return api;
429} 431}
430 432
diff --git a/src/revocation/Makefile.am b/src/revocation/Makefile.am
index b1a079a0d..d0c58584e 100644
--- a/src/revocation/Makefile.am
+++ b/src/revocation/Makefile.am
@@ -32,11 +32,6 @@ libgnunet_plugin_block_revocation_la_LIBADD = \
32 $(top_builddir)/src/util/libgnunetutil.la \ 32 $(top_builddir)/src/util/libgnunetutil.la \
33 $(top_builddir)/src/identity/libgnunetidentity.la \ 33 $(top_builddir)/src/identity/libgnunetidentity.la \
34 $(LTLIBINTL) 34 $(LTLIBINTL)
35libgnunet_plugin_block_revocation_la_DEPENDENCIES = \
36 libgnunetrevocation.la \
37 $(top_builddir)/src/block/libgnunetblockgroup.la \
38 $(top_builddir)/src/block/libgnunetblock.la \
39 $(top_builddir)/src/util/libgnunetutil.la
40libgnunet_plugin_block_revocation_la_LDFLAGS = \ 35libgnunet_plugin_block_revocation_la_LDFLAGS = \
41 $(GN_PLUGIN_LDFLAGS) 36 $(GN_PLUGIN_LDFLAGS)
42 37
diff --git a/src/revocation/gnunet-service-revocation.c b/src/revocation/gnunet-service-revocation.c
index 2d8111adb..5fe0ade98 100644
--- a/src/revocation/gnunet-service-revocation.c
+++ b/src/revocation/gnunet-service-revocation.c
@@ -949,6 +949,7 @@ run (void *cls,
949 if (0 > ksize) 949 if (0 > ksize)
950 { 950 {
951 GNUNET_break_op (0); 951 GNUNET_break_op (0);
952 GNUNET_free (rm);
952 GNUNET_free (fn); 953 GNUNET_free (fn);
953 return; 954 return;
954 } 955 }
diff --git a/src/secretsharing/Makefile.am b/src/secretsharing/Makefile.am
index 787cfa0c1..9ae6e7892 100644
--- a/src/secretsharing/Makefile.am
+++ b/src/secretsharing/Makefile.am
@@ -24,6 +24,7 @@ gnunet_secretsharing_profiler_SOURCES = \
24 gnunet-secretsharing-profiler.c 24 gnunet-secretsharing-profiler.c
25gnunet_secretsharing_profiler_LDADD = \ 25gnunet_secretsharing_profiler_LDADD = \
26 libgnunetsecretsharing.la \ 26 libgnunetsecretsharing.la \
27 $(top_builddir)/src/testing/libgnunettesting.la \
27 $(top_builddir)/src/testbed/libgnunettestbed.la \ 28 $(top_builddir)/src/testbed/libgnunettestbed.la \
28 $(top_builddir)/src/util/libgnunetutil.la \ 29 $(top_builddir)/src/util/libgnunetutil.la \
29 $(GN_LIBINTL) 30 $(GN_LIBINTL)
diff --git a/src/set/ibf.c b/src/set/ibf.c
index 1532afceb..0f7eb6a9f 100644
--- a/src/set/ibf.c
+++ b/src/set/ibf.c
@@ -294,7 +294,7 @@ ibf_write_slice (const struct InvertibleBloomFilter *ibf, uint32_t start,
294 struct IBF_KeyHash *key_hash_dst; 294 struct IBF_KeyHash *key_hash_dst;
295 struct IBF_Count *count_dst; 295 struct IBF_Count *count_dst;
296 296
297 GNUNET_assert (start + count <= ibf->size); 297 GNUNET_assert (start + count <= ibf->size);
298 298
299 /* copy keys */ 299 /* copy keys */
300 key_dst = (struct IBF_Key *) buf; 300 key_dst = (struct IBF_Key *) buf;
diff --git a/src/set/ibf.h b/src/set/ibf.h
index 7c2ab33b1..334a797ef 100644
--- a/src/set/ibf.h
+++ b/src/set/ibf.h
@@ -245,6 +245,7 @@ void
245ibf_destroy (struct InvertibleBloomFilter *ibf); 245ibf_destroy (struct InvertibleBloomFilter *ibf);
246 246
247 247
248
248#if 0 /* keep Emacsens' auto-indent happy */ 249#if 0 /* keep Emacsens' auto-indent happy */
249{ 250{
250#endif 251#endif
diff --git a/src/setu/gnunet-service-setu.c b/src/setu/gnunet-service-setu.c
index bd1113f15..339d347f8 100644
--- a/src/setu/gnunet-service-setu.c
+++ b/src/setu/gnunet-service-setu.c
@@ -22,6 +22,7 @@
22 * @brief set union operation 22 * @brief set union operation
23 * @author Florian Dold 23 * @author Florian Dold
24 * @author Christian Grothoff 24 * @author Christian Grothoff
25 * @author Elias Summermatter
25 */ 26 */
26#include "platform.h" 27#include "platform.h"
27#include "gnunet_util_lib.h" 28#include "gnunet_util_lib.h"
@@ -50,33 +51,61 @@
50 */ 51 */
51#define SE_STRATA_COUNT 32 52#define SE_STRATA_COUNT 32
52 53
54
53/** 55/**
54 * Size of the IBFs in the strata estimator. 56 * Primes for all 4 different strata estimators 61,67,71,73,79,83,89,97 348
57 * Based on the bsc thesis of Elias Summermatter (2021)
55 */ 58 */
56#define SE_IBF_SIZE 80 59#define SE_IBFS_TOTAL_SIZE 632
57 60
58/** 61/**
59 * The hash num parameter for the difference digests and strata estimators. 62 * The hash num parameter for the difference digests and strata estimators.
60 */ 63 */
61#define SE_IBF_HASH_NUM 4 64#define SE_IBF_HASH_NUM 3
62 65
63/** 66/**
64 * Number of buckets that can be transmitted in one message. 67 * Number of buckets that can be transmitted in one message.
65 */ 68 */
66#define MAX_BUCKETS_PER_MESSAGE ((1 << 15) / IBF_BUCKET_SIZE) 69#define MAX_BUCKETS_PER_MESSAGE ((1 << 16) / IBF_BUCKET_SIZE)
67 70
68/** 71/**
69 * The maximum size of an ibf we use is 2^(MAX_IBF_ORDER). 72 * The maximum size of an ibf we use is MAX_IBF_SIZE=2^20.
70 * Choose this value so that computing the IBF is still cheaper 73 * Choose this value so that computing the IBF is still cheaper
71 * than transmitting all values. 74 * than transmitting all values.
72 */ 75 */
73#define MAX_IBF_ORDER (20) 76#define MAX_IBF_SIZE 1048576
77
78
79/**
80 * Minimal size of an ibf
81 * Based on the bsc thesis of Elias Summermatter (2021)
82 */
83#define IBF_MIN_SIZE 37
84
85/**
86 * AVG RTT for differential sync when k=2 and Factor = 2
87 * Based on the bsc thesis of Elias Summermatter (2021)
88 */
89#define DIFFERENTIAL_RTT_MEAN 3.65145
90
91/**
92 * Security level used for byzantine checks (2^80)
93 */
94
95#define SECURITY_LEVEL 80
96
97/**
98 * Is the estimated probability for a new round this values
99 * is based on the bsc thesis of Elias Summermatter (2021)
100 */
101
102#define PROBABILITY_FOR_NEW_ROUND 0.15
74 103
75/** 104/**
76 * Number of buckets used in the ibf per estimated 105 * Measure the performance in a csv
77 * difference.
78 */ 106 */
79#define IBF_ALPHA 4 107
108#define MEASURE_PERFORMANCE 0
80 109
81 110
82/** 111/**
@@ -146,6 +175,28 @@ enum UnionOperationPhase
146 PHASE_FULL_RECEIVING 175 PHASE_FULL_RECEIVING
147}; 176};
148 177
178/**
179 * Different modes of operations
180 */
181
182enum MODE_OF_OPERATION
183{
184 /**
185 * Mode just synchronizes the difference between sets
186 */
187 DIFFERENTIAL_SYNC,
188
189 /**
190 * Mode send full set sending local set first
191 */
192 FULL_SYNC_LOCAL_SENDING_FIRST,
193
194 /**
195 * Mode request full set from remote peer
196 */
197 FULL_SYNC_REMOTE_SENDING_FIRST
198};
199
149 200
150/** 201/**
151 * Information about an element element in the set. All elements are 202 * Information about an element element in the set. All elements are
@@ -277,7 +328,7 @@ struct Operation
277 * Copy of the set's strata estimator at the time of 328 * Copy of the set's strata estimator at the time of
278 * creation of this operation. 329 * creation of this operation.
279 */ 330 */
280 struct StrataEstimator *se; 331 struct MultiStrataEstimator *se;
281 332
282 /** 333 /**
283 * The IBF we currently receive. 334 * The IBF we currently receive.
@@ -320,7 +371,7 @@ struct Operation
320 /** 371 /**
321 * Number of ibf buckets already received into the @a remote_ibf. 372 * Number of ibf buckets already received into the @a remote_ibf.
322 */ 373 */
323 unsigned int ibf_buckets_received; 374 uint64_t ibf_buckets_received;
324 375
325 /** 376 /**
326 * Salt that we're using for sending IBFs 377 * Salt that we're using for sending IBFs
@@ -386,7 +437,7 @@ struct Operation
386 * Lower bound for the set size, used only when 437 * Lower bound for the set size, used only when
387 * byzantine mode is enabled. 438 * byzantine mode is enabled.
388 */ 439 */
389 int byzantine_lower_bound; 440 uint64_t byzantine_lower_bound;
390 441
391 /** 442 /**
392 * Unique request id for the request from a remote peer, sent to the 443 * Unique request id for the request from a remote peer, sent to the
@@ -401,21 +452,83 @@ struct Operation
401 */ 452 */
402 unsigned int generation_created; 453 unsigned int generation_created;
403 454
455
456 /**
457 * User defined Bandwidth Round Trips Tradeoff
458 */
459 uint64_t rtt_bandwidth_tradeoff;
460
461
462 /**
463 * Number of Element per bucket in IBF
464 */
465 uint8_t ibf_number_buckets_per_element;
466
467
468 /**
469 * Set difference is multiplied with this factor
470 * to gennerate large enough IBF
471 */
472 uint8_t ibf_bucket_number_factor;
473
474 /**
475 * Defines which site a client is
476 * 0 = Initiating peer
477 * 1 = Receiving peer
478 */
479 uint8_t peer_site;
480
481
404 /** 482 /**
405 * User defined Bandwidth Round Trips Tradeoff 483 * Local peer element count
406 */ 484 */
407 double rtt_bandwidth_tradeoff; 485 uint64_t local_element_count;
408 486
409 /** 487 /**
410 * Number of Element per bucket in IBF 488 * Mode of operation that was chosen by the algorithm
411 */ 489 */
412 unsigned int ibf_number_buckets_per_element; 490 uint8_t mode_of_operation;
413 491
414 /** 492 /**
415 * Number of buckets in IBF 493 * Hashmap to keep track of the send/received messages
416 */ 494 */
417 unsigned ibf_bucket_number; 495 struct GNUNET_CONTAINER_MultiHashMap *message_control_flow;
418 496
497 /**
498 * Hashmap to keep track of the send/received inquiries (ibf keys)
499 */
500 struct GNUNET_CONTAINER_MultiHashMap *inquiries_sent;
501
502
503 /**
504 * Total size of local set
505 */
506 uint64_t total_elements_size_local;
507
508 /**
509 * Limit of number of elements in set
510 */
511 uint64_t byzantine_upper_bound;
512
513 /**
514 * is the count of already passed differential sync iterations
515 */
516 uint8_t differential_sync_iterations;
517
518 /**
519 * Estimated or committed set difference at the start
520 */
521 uint64_t remote_set_diff;
522
523 /**
524 * Estimated or committed set difference at the start
525 */
526 uint64_t local_set_diff;
527
528 /**
529 * Boolean to enforce an active passive switch
530 */
531 bool active_passive_switch_required;
419}; 532};
420 533
421 534
@@ -431,6 +544,16 @@ struct SetContent
431 struct GNUNET_CONTAINER_MultiHashMap *elements; 544 struct GNUNET_CONTAINER_MultiHashMap *elements;
432 545
433 /** 546 /**
547 * Maps `struct GNUNET_HashCode *` to `struct ElementEntry *` randomized.
548 */
549 struct GNUNET_CONTAINER_MultiHashMap *elements_randomized;
550
551 /**
552 * Salt to construct the randomized element map
553 */
554 uint64_t elements_randomized_salt;
555
556 /**
434 * Number of references to the content. 557 * Number of references to the content.
435 */ 558 */
436 unsigned int refcount; 559 unsigned int refcount;
@@ -478,7 +601,7 @@ struct Set
478 * The strata estimator is only generated once for each set. The IBF keys 601 * The strata estimator is only generated once for each set. The IBF keys
479 * are derived from the element hashes with salt=0. 602 * are derived from the element hashes with salt=0.
480 */ 603 */
481 struct StrataEstimator *se; 604 struct MultiStrataEstimator *se;
482 605
483 /** 606 /**
484 * Evaluate operations are held in a linked list. 607 * Evaluate operations are held in a linked list.
@@ -635,96 +758,687 @@ static int in_shutdown;
635 */ 758 */
636static uint32_t suggest_id; 759static uint32_t suggest_id;
637 760
761#if MEASURE_PERFORMANCE
762/**
763 * Handles configuration file for setu performance test
764 *
765 */
766static const struct GNUNET_CONFIGURATION_Handle *setu_cfg;
767
768
769/**
770 * Stores the performance data for induvidual message
771 */
772
773
774struct perf_num_send_received_msg
775{
776 uint64_t sent;
777 uint64_t sent_var_bytes;
778 uint64_t received;
779 uint64_t received_var_bytes;
780};
781
782/**
783 * Main struct to measure performance (data/rtts)
784 */
785struct per_store_struct
786{
787 struct perf_num_send_received_msg operation_request;
788 struct perf_num_send_received_msg se;
789 struct perf_num_send_received_msg request_full;
790 struct perf_num_send_received_msg element_full;
791 struct perf_num_send_received_msg full_done;
792 struct perf_num_send_received_msg ibf;
793 struct perf_num_send_received_msg inquery;
794 struct perf_num_send_received_msg element;
795 struct perf_num_send_received_msg demand;
796 struct perf_num_send_received_msg offer;
797 struct perf_num_send_received_msg done;
798 struct perf_num_send_received_msg over;
799 uint64_t se_diff;
800 uint64_t se_diff_remote;
801 uint64_t se_diff_local;
802 uint64_t active_passive_switches;
803 uint8_t mode_of_operation;
804};
805
806struct per_store_struct perf_store;
807#endif
808
809/**
810 * Different states to control the messages flow in differential mode
811 */
812
813enum MESSAGE_CONTROL_FLOW_STATE
814{
815 /**
816 * Initial message state
817 */
818 MSG_CFS_UNINITIALIZED,
819
820 /**
821 * Track that a message has been sent
822 */
823 MSG_CFS_SENT,
824
825 /**
826 * Track that receiving this message is expected
827 */
828 MSG_CFS_EXPECTED,
829
830 /**
831 * Track that message has been received
832 */
833 MSG_CFS_RECEIVED,
834};
638 835
639/** 836/**
640 * Added Roundtripscounter 837 * Message types to track in message control flow
641 */ 838 */
642 839
840enum MESSAGE_TYPE
841{
842 /**
843 * Offer message type
844 */
845 OFFER_MESSAGE,
643 846
644struct perf_num_send_resived_msg { 847 /**
645 int sent; 848 * Demand message type
646 int sent_var_bytes; 849 */
647 int received; 850 DEMAND_MESSAGE,
648 int received_var_bytes; 851
852 /**
853 * Element message type
854 */
855 ELEMENT_MESSAGE,
649}; 856};
650 857
651 858
652struct perf_rtt_struct 859/**
653{ 860 * Struct to tracked messages in message control flow
654 struct perf_num_send_resived_msg operation_request; 861 */
655 struct perf_num_send_resived_msg se; 862struct messageControlFlowElement
656 struct perf_num_send_resived_msg request_full; 863{
657 struct perf_num_send_resived_msg element_full; 864 /**
658 struct perf_num_send_resived_msg full_done; 865 * Track the message control state of the offer message
659 struct perf_num_send_resived_msg ibf; 866 */
660 struct perf_num_send_resived_msg inquery; 867 enum MESSAGE_CONTROL_FLOW_STATE offer;
661 struct perf_num_send_resived_msg element; 868 /**
662 struct perf_num_send_resived_msg demand; 869 * Track the message control state of the demand message
663 struct perf_num_send_resived_msg offer; 870 */
664 struct perf_num_send_resived_msg done; 871 enum MESSAGE_CONTROL_FLOW_STATE demand;
665 struct perf_num_send_resived_msg over; 872 /**
873 * Track the message control state of the element message
874 */
875 enum MESSAGE_CONTROL_FLOW_STATE element;
666}; 876};
667 877
668struct perf_rtt_struct perf_rtt;
669 878
879#if MEASURE_PERFORMANCE
670 880
881/**
882 * Loads different configuration to perform performance tests
883 *
884 * @param op operation handle
885 */
886static void
887load_config (struct Operation *op)
888{
889 long long number;
890 float fl;
891
892 setu_cfg = GNUNET_CONFIGURATION_create ();
893 GNUNET_CONFIGURATION_load (setu_cfg,
894 "perf_setu.conf");
895 GNUNET_CONFIGURATION_get_value_float (setu_cfg,
896 "IBF",
897 "BUCKET_NUMBER_FACTOR",
898 &fl);
899 op->ibf_bucket_number_factor = fl;
900 GNUNET_CONFIGURATION_get_value_number (setu_cfg,
901 "IBF",
902 "NUMBER_PER_BUCKET",
903 &number);
904 op->ibf_number_buckets_per_element = number;
905 GNUNET_CONFIGURATION_get_value_number (setu_cfg,
906 "PERFORMANCE",
907 "TRADEOFF",
908 &number);
909 op->rtt_bandwidth_tradeoff = number;
910 GNUNET_CONFIGURATION_get_value_number (setu_cfg,
911 "BOUNDARIES",
912 "UPPER_ELEMENT",
913 &number);
914 op->byzantine_upper_bound = number;
915 op->peer_site = 0;
916}
917
918
919/**
920 * Function to calculate total bytes used for performance measurement
921 * @param size
922 * @param perf_num_send_received_msg
923 * @return bytes used
924 */
671static int 925static int
672sum_sent_received_bytes(int size, struct perf_num_send_resived_msg perf_rtt_struct) { 926sum_sent_received_bytes (uint64_t size,
673 return (size * perf_rtt_struct.sent) + 927 struct perf_num_send_received_msg
674 (size * perf_rtt_struct.received) + 928 perf_num_send_received_msg)
675 perf_rtt_struct.sent_var_bytes + 929{
676 perf_rtt_struct.received_var_bytes; 930 return (size * perf_num_send_received_msg.sent)
931 + (size * perf_num_send_received_msg.received)
932 + perf_num_send_received_msg.sent_var_bytes
933 + perf_num_send_received_msg.received_var_bytes;
677} 934}
678 935
679static float
680calculate_perf_rtt() {
681 /**
682 * Calculate RTT of init phase normally always 1
683 */
684 float rtt = 1;
685 int bytes_transmitted = 0;
686 936
687 /** 937/**
688 * Calculate RGNUNET_SETU_AcceptMessageRT of Fullsync normally 1 or 1.5 depending 938 * Function that calculates the perfmance values and writes them down
689 */ 939 */
690 if (( perf_rtt.element_full.received != 0 ) || 940static void
691 ( perf_rtt.element_full.sent != 0) 941calculate_perf_store ()
692 ) rtt += 1; 942{
693 943
694 if (( perf_rtt.request_full.received != 0 ) || 944 /**
695 ( perf_rtt.request_full.sent != 0) 945 * Calculate RTT of init phase normally always 1
696 ) rtt += 0.5; 946 */
947 float rtt = 1;
948 int bytes_transmitted = 0;
697 949
698 /** 950 /**
699 * In case of a differential sync 3 rtt's are needed. 951 * Calculate RGNUNET_SETU_AcceptMessageRT of Fullsync normally 1 or 1.5 depending
700 * for every active/passive switch additional 3.5 rtt's are used 952 */
701 */ 953 if ((perf_store.element_full.received != 0) ||
954 (perf_store.element_full.sent != 0)
955 )
956 rtt += 1;
957
958 if ((perf_store.request_full.received != 0) ||
959 (perf_store.request_full.sent != 0)
960 )
961 rtt += 0.5;
702 962
703 int iterations = perf_rtt.ibf.received; 963 /**
704 if(iterations > 1) 964 * In case of a differential sync 3 rtt's are needed.
705 rtt += (iterations - 1 ) * 0.5; 965 * for every active/passive switch additional 3.5 rtt's are used
706 rtt += 3 * iterations; 966 */
967 if ((perf_store.element.received != 0) ||
968 (perf_store.element.sent != 0))
969 {
970 int iterations = perf_store.active_passive_switches;
971
972 if (iterations > 0)
973 rtt += iterations * 0.5;
974 rtt += 2.5;
975 }
976
977
978 /**
979 * Calculate data sended size
980 */
981 bytes_transmitted += sum_sent_received_bytes (sizeof(struct
982 GNUNET_SETU_ResultMessage),
983 perf_store.request_full);
984
985 bytes_transmitted += sum_sent_received_bytes (sizeof(struct
986 GNUNET_SETU_ElementMessage),
987 perf_store.element_full);
988 bytes_transmitted += sum_sent_received_bytes (sizeof(struct
989 GNUNET_SETU_ElementMessage),
990 perf_store.element);
991 // bytes_transmitted += sum_sent_received_bytes(sizeof(GNUNET_MESSAGE_TYPE_SETU_P2P_OPERATION_REQUEST), perf_store.operation_request);
992 bytes_transmitted += sum_sent_received_bytes (sizeof(struct
993 StrataEstimatorMessage),
994 perf_store.se);
995 bytes_transmitted += sum_sent_received_bytes (4, perf_store.full_done);
996 bytes_transmitted += sum_sent_received_bytes (sizeof(struct IBFMessage),
997 perf_store.ibf);
998 bytes_transmitted += sum_sent_received_bytes (sizeof(struct InquiryMessage),
999 perf_store.inquery);
1000 bytes_transmitted += sum_sent_received_bytes (sizeof(struct
1001 GNUNET_MessageHeader),
1002 perf_store.demand);
1003 bytes_transmitted += sum_sent_received_bytes (sizeof(struct
1004 GNUNET_MessageHeader),
1005 perf_store.offer);
1006 bytes_transmitted += sum_sent_received_bytes (4, perf_store.done);
1007
1008 /**
1009 * Write IBF failure rate for different BUCKET_NUMBER_FACTOR
1010 */
1011 float factor;
1012 GNUNET_CONFIGURATION_get_value_float (setu_cfg,"IBF", "BUCKET_NUMBER_FACTOR",
1013 &factor);
1014 long long num_per_bucket;
1015 GNUNET_CONFIGURATION_get_value_number (setu_cfg,"IBF", "NUMBER_PER_BUCKET",
1016 &num_per_bucket);
1017
1018
1019 int decoded = 0;
1020 if (perf_store.active_passive_switches == 0)
1021 decoded = 1;
1022 int ibf_bytes_transmitted = sum_sent_received_bytes (sizeof(struct
1023 IBFMessage),
1024 perf_store.ibf);
1025
1026 FILE *out1 = fopen ("perf_data.csv", "a");
1027 fprintf (out1, "%d,%f,%d,%d,%f,%d,%d,%d,%d,%d\n",num_per_bucket,factor,
1028 decoded,ibf_bytes_transmitted,rtt,perf_store.se_diff,
1029 bytes_transmitted,
1030 perf_store.se_diff_local,perf_store.se_diff_remote,
1031 perf_store.mode_of_operation);
1032 fclose (out1);
1033
1034}
1035
1036
1037#endif
1038/**
1039 * Function that chooses the optimal mode of operation depending on
1040 * operation parameters.
1041 * @param avg_element_size
1042 * @param local_set_size
1043 * @param remote_set_size
1044 * @param est_set_diff_remote
1045 * @param est_set_diff_local
1046 * @param bandwith_latency_tradeoff
1047 * @param ibf_bucket_number_factor
1048 * @return calcuated mode of operation
1049 */
1050static uint8_t
1051estimate_best_mode_of_operation (uint64_t avg_element_size,
1052 uint64_t local_set_size,
1053 uint64_t remote_set_size,
1054 uint64_t est_set_diff_remote,
1055 uint64_t est_set_diff_local,
1056 uint64_t bandwith_latency_tradeoff,
1057 uint64_t ibf_bucket_number_factor)
1058{
1059
1060 /*
1061 * In case of initial sync fall to predefined states
1062 */
1063
1064 if (0 == local_set_size)
1065 return FULL_SYNC_REMOTE_SENDING_FIRST;
1066 if (0 == remote_set_size)
1067 return FULL_SYNC_LOCAL_SENDING_FIRST;
1068
1069 /*
1070 * Calculate bytes for full Sync
1071 */
1072
1073 uint8_t sizeof_full_done_header = 4;
1074 uint8_t sizeof_done_header = 4;
1075 uint8_t rtt_min_full = 2;
1076 uint8_t sizeof_request_full = 4;
1077 uint64_t estimated_total_diff = (est_set_diff_remote + est_set_diff_local);
1078
1079 /* Estimate byte required if we send first */
1080 uint64_t total_elements_to_send_local_send_first = est_set_diff_remote
1081 + local_set_size;
1082
1083 uint64_t total_bytes_full_local_send_first = (avg_element_size
1084 *
1085 total_elements_to_send_local_send_first) \
1086 + (
1087 total_elements_to_send_local_send_first * sizeof(struct
1088 GNUNET_SETU_ElementMessage)) \
1089 + (sizeof_full_done_header * 2) \
1090 + rtt_min_full
1091 * bandwith_latency_tradeoff;
1092
1093 /* Estimate bytes required if we request from remote peer */
1094 uint64_t total_elements_to_send_remote_send_first = est_set_diff_local
1095 + remote_set_size;
1096
1097 uint64_t total_bytes_full_remote_send_first = (avg_element_size
1098 *
1099 total_elements_to_send_remote_send_first) \
1100 + (
1101 total_elements_to_send_remote_send_first * sizeof(struct
1102 GNUNET_SETU_ElementMessage)) \
1103 + (sizeof_full_done_header * 2) \
1104 + (rtt_min_full + 0.5)
1105 * bandwith_latency_tradeoff \
1106 + sizeof_request_full;
1107
1108 /*
1109 * Calculate bytes for differential Sync
1110 */
1111
1112 /* Estimate bytes required by IBF transmission*/
1113
1114 long double ibf_bucket_count = estimated_total_diff
1115 * ibf_bucket_number_factor;
1116
1117 if (ibf_bucket_count <= IBF_MIN_SIZE)
1118 {
1119 ibf_bucket_count = IBF_MIN_SIZE;
1120 }
1121 uint64_t ibf_message_count = ceil ( ((float) ibf_bucket_count)
1122 / ((float) MAX_BUCKETS_PER_MESSAGE));
1123
1124 uint64_t estimated_counter_size = ceil (
1125 MIN (2 * log2l (((float) local_set_size)
1126 / ((float) ibf_bucket_count)),
1127 log2l (local_set_size)));
1128
1129 long double counter_bytes = (float) estimated_counter_size / 8;
1130
1131 uint64_t ibf_bytes = ceil ((sizeof (struct IBFMessage) * ibf_message_count)
1132 * 1.2 \
1133 + (ibf_bucket_count * sizeof(struct IBF_Key)) * 1.2 \
1134 + (ibf_bucket_count * sizeof(struct IBF_KeyHash))
1135 * 1.2 \
1136 + (ibf_bucket_count * counter_bytes) * 1.2);
1137
1138 /* Estimate full byte count for differential sync */
1139 uint64_t element_size = (avg_element_size
1140 + sizeof (struct GNUNET_SETU_ElementMessage)) \
1141 * estimated_total_diff;
1142 uint64_t done_size = sizeof_done_header;
1143 uint64_t inquery_size = (sizeof (struct IBF_Key)
1144 + sizeof (struct InquiryMessage))
1145 * estimated_total_diff;
1146 uint64_t demand_size =
1147 (sizeof(struct GNUNET_HashCode) + sizeof(struct GNUNET_MessageHeader))
1148 * estimated_total_diff;
1149 uint64_t offer_size = (sizeof (struct GNUNET_HashCode)
1150 + sizeof (struct GNUNET_MessageHeader))
1151 * estimated_total_diff;
1152
1153 uint64_t total_bytes_diff = (element_size + done_size + inquery_size
1154 + demand_size + offer_size + ibf_bytes) \
1155 + (DIFFERENTIAL_RTT_MEAN
1156 * bandwith_latency_tradeoff);
1157
1158 uint64_t full_min = MIN (total_bytes_full_local_send_first,
1159 total_bytes_full_remote_send_first);
1160
1161 /* Decide between full and differential sync */
1162
1163 if (full_min < total_bytes_diff)
1164 {
1165 /* Decide between sending all element first or receiving all elements */
1166 if (total_bytes_full_remote_send_first > total_bytes_full_local_send_first)
1167 {
1168 return FULL_SYNC_LOCAL_SENDING_FIRST;
1169 }
1170 else
1171 {
1172 return FULL_SYNC_REMOTE_SENDING_FIRST;
1173 }
1174 }
1175 else
1176 {
1177 return DIFFERENTIAL_SYNC;
1178 }
1179}
1180
1181
1182/**
1183 * Validates the if a message is received in a correct phase
1184 * @param allowed_phases
1185 * @param size_phases
1186 * @param op
1187 * @return #GNUNET_YES if message permitted in phase and #GNUNET_NO if not permitted in given
1188 * phase
1189 */
1190static enum GNUNET_GenericReturnValue
1191check_valid_phase (const uint8_t allowed_phases[],
1192 size_t size_phases,
1193 struct Operation *op)
1194{
1195 /**
1196 * Iterate over allowed phases
1197 */
1198 for (uint32_t phase_ctr = 0; phase_ctr < size_phases; phase_ctr++)
1199 {
1200 uint8_t phase = allowed_phases[phase_ctr];
1201 if (phase == op->phase)
1202 {
1203 LOG (GNUNET_ERROR_TYPE_DEBUG,
1204 "Message received in valid phase\n");
1205 return GNUNET_YES;
1206 }
1207 }
1208 LOG (GNUNET_ERROR_TYPE_ERROR,
1209 "Received message in invalid phase: %u\n", op->phase);
1210 return GNUNET_NO;
1211}
1212
1213
1214/**
1215 * Function to update, track and validate message received in differential
1216 * sync. This function tracks states of messages and check it against different
1217 * constraints as described in Summermatter's BSc Thesis (2021)
1218 * @param hash_map: Hashmap to store message control flow
1219 * @param new_mcfs: The new message control flow state an given message type should be set to
1220 * @param hash_code: Hash code of the element
1221 * @param mt: The message type for which the message control flow state should be set
1222 * @return GNUNET_YES message is valid in message control flow GNUNET_NO when message is not valid
1223 * at this point in message flow
1224 */
1225static int
1226update_message_control_flow (struct GNUNET_CONTAINER_MultiHashMap *hash_map,
1227 enum MESSAGE_CONTROL_FLOW_STATE new_mcfs,
1228 const struct GNUNET_HashCode *hash_code,
1229 enum MESSAGE_TYPE mt)
1230{
1231 struct messageControlFlowElement *cfe = NULL;
1232 enum MESSAGE_CONTROL_FLOW_STATE *mcfs;
1233
1234 /**
1235 * Check logic for forbidden messages
1236 */
1237
1238 cfe = GNUNET_CONTAINER_multihashmap_get (hash_map, hash_code);
1239 if ((ELEMENT_MESSAGE == mt) && (cfe != NULL))
1240 {
1241 if ((new_mcfs != MSG_CFS_SENT) && (MSG_CFS_RECEIVED != cfe->offer))
1242 {
1243 LOG (GNUNET_ERROR_TYPE_ERROR,
1244 "Received an element without sent offer!\n");
1245 return GNUNET_NO;
1246 }
1247 /* Check that only requested elements are received! */
1248 if ((ELEMENT_MESSAGE == mt) && (new_mcfs != MSG_CFS_SENT) && (cfe->demand !=
1249 MSG_CFS_SENT))
1250 {
1251 LOG (GNUNET_ERROR_TYPE_ERROR,
1252 "Received an element that was not demanded\n");
1253 return GNUNET_NO;
1254 }
1255 }
1256
1257 /**
1258 * In case the element hash is not in the hashmap create a new entry
1259 */
1260
1261 if (NULL == cfe)
1262 {
1263 cfe = GNUNET_new (struct messageControlFlowElement);
1264 if (GNUNET_SYSERR == GNUNET_CONTAINER_multihashmap_put (hash_map, hash_code,
1265 cfe,
1266 GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY))
1267 {
1268 GNUNET_free (cfe);
1269 return GNUNET_SYSERR;
1270 }
1271 }
1272
1273 /**
1274 * Set state of message
1275 */
1276
1277 if (OFFER_MESSAGE == mt)
1278 {
1279 mcfs = &cfe->offer;
1280 }
1281 else if (DEMAND_MESSAGE == mt)
1282 {
1283 mcfs = &cfe->demand;
1284 }
1285 else if (ELEMENT_MESSAGE == mt)
1286 {
1287 mcfs = &cfe->element;
1288 }
1289 else
1290 {
1291 return GNUNET_SYSERR;
1292 }
1293
1294 /**
1295 * Check if state is allowed
1296 */
1297
1298 if (new_mcfs <= *mcfs)
1299 {
1300 return GNUNET_NO;
1301 }
1302
1303 *mcfs = new_mcfs;
1304 return GNUNET_YES;
1305}
1306
1307
1308/**
1309 * Validate if a message in differential sync si already received before.
1310 * @param hash_map
1311 * @param hash_code
1312 * @param mt
1313 * @return GNUNET_YES when message is already in store if message is not in store return GNUNET_NO
1314 */
1315static int
1316is_message_in_message_control_flow (struct
1317 GNUNET_CONTAINER_MultiHashMap *hash_map,
1318 struct GNUNET_HashCode *hash_code,
1319 enum MESSAGE_TYPE mt)
1320{
1321 struct messageControlFlowElement *cfe = NULL;
1322 enum MESSAGE_CONTROL_FLOW_STATE *mcfs;
1323
1324 cfe = GNUNET_CONTAINER_multihashmap_get (hash_map, hash_code);
1325
1326 /**
1327 * Set state of message
1328 */
1329
1330 if (cfe != NULL)
1331 {
1332 if (OFFER_MESSAGE == mt)
1333 {
1334 mcfs = &cfe->offer;
1335 }
1336 else if (DEMAND_MESSAGE == mt)
1337 {
1338 mcfs = &cfe->demand;
1339 }
1340 else if (ELEMENT_MESSAGE == mt)
1341 {
1342 mcfs = &cfe->element;
1343 }
1344 else
1345 {
1346 return GNUNET_SYSERR;
1347 }
707 1348
708 /** 1349 /**
709 * Calculate data sended size 1350 * Evaluate if set is in message
710 */ 1351 */
711 bytes_transmitted += sum_sent_received_bytes(sizeof(GNUNET_MESSAGE_TYPE_SETU_P2P_REQUEST_FULL), perf_rtt.request_full); 1352 if (*mcfs != MSG_CFS_UNINITIALIZED)
712 bytes_transmitted += sum_sent_received_bytes(sizeof(GNUNET_MESSAGE_TYPE_SETU_P2P_FULL_ELEMENT), perf_rtt.element_full); 1353 {
713 bytes_transmitted += sum_sent_received_bytes(sizeof(GNUNET_MESSAGE_TYPE_SETU_P2P_ELEMENTS), perf_rtt.element); 1354 return GNUNET_YES;
714 bytes_transmitted += sum_sent_received_bytes(sizeof(GNUNET_MESSAGE_TYPE_SETU_P2P_OPERATION_REQUEST), perf_rtt.operation_request); 1355 }
715 bytes_transmitted += sum_sent_received_bytes(sizeof(GNUNET_MESSAGE_TYPE_SETU_P2P_SE), perf_rtt.se); 1356 }
716 bytes_transmitted += sum_sent_received_bytes(sizeof(GNUNET_MESSAGE_TYPE_SETU_P2P_FULL_DONE), perf_rtt.full_done); 1357 return GNUNET_NO;
717 bytes_transmitted += sum_sent_received_bytes(sizeof(GNUNET_MESSAGE_TYPE_SETU_P2P_IBF), perf_rtt.ibf); 1358}
718 bytes_transmitted += sum_sent_received_bytes(sizeof(GNUNET_MESSAGE_TYPE_SETU_P2P_INQUIRY), perf_rtt.inquery);
719 bytes_transmitted += sum_sent_received_bytes(sizeof(GNUNET_MESSAGE_TYPE_SETU_P2P_DEMAND), perf_rtt.demand);
720 bytes_transmitted += sum_sent_received_bytes(sizeof(GNUNET_MESSAGE_TYPE_SETU_P2P_OFFER), perf_rtt.offer);
721 bytes_transmitted += sum_sent_received_bytes(sizeof(GNUNET_MESSAGE_TYPE_SETU_P2P_DONE), perf_rtt.done);
722 1359
723 LOG(GNUNET_ERROR_TYPE_ERROR,"Bytes Transmitted: %d\n", bytes_transmitted);
724 1360
725 LOG(GNUNET_ERROR_TYPE_ERROR,"Reached tradeoff bandwidth/rtt: %f\n", (bytes_transmitted / rtt )); 1361/**
1362 * Iterator for determining if all demands have been
1363 * satisfied
1364 *
1365 * @param cls the union operation `struct Operation *`
1366 * @param key unused
1367 * @param value the `struct ElementEntry *` to insert
1368 * into the key-to-element mapping
1369 * @return #GNUNET_YES (to continue iterating)
1370 */
1371static int
1372determinate_done_message_iterator (void *cls,
1373 const struct GNUNET_HashCode *key,
1374 void *value)
1375{
1376 struct messageControlFlowElement *mcfe = value;
726 1377
727 return rtt; 1378 if (((mcfe->element == MSG_CFS_SENT) || (mcfe->element == MSG_CFS_RECEIVED) ))
1379 {
1380 return GNUNET_YES;
1381 }
1382 return GNUNET_NO;
1383}
1384
1385
1386/**
1387 * Iterator for determining average size
1388 *
1389 * @param cls the union operation `struct Operation *`
1390 * @param key unused
1391 * @param value the `struct ElementEntry *` to insert
1392 * into the key-to-element mapping
1393 * @return #GNUNET_YES (to continue iterating)
1394 */
1395static int
1396determinate_avg_element_size_iterator (void *cls,
1397 const struct GNUNET_HashCode *key,
1398 void *value)
1399{
1400 struct Operation *op = cls;
1401 struct GNUNET_SETU_Element *element = value;
1402 op->total_elements_size_local += element->size;
1403 return GNUNET_YES;
1404}
1405
1406
1407/**
1408 * Create randomized element hashmap for full sending
1409 *
1410 * @param cls the union operation `struct Operation *`
1411 * @param key unused
1412 * @param value the `struct ElementEntry *` to insert
1413 * into the key-to-element mapping
1414 * @return #GNUNET_YES (to continue iterating)
1415 */
1416static int
1417create_randomized_element_iterator (void *cls,
1418 const struct GNUNET_HashCode *key,
1419 void *value)
1420{
1421 struct Operation *op = cls;
1422
1423 struct GNUNET_HashContext *hashed_key_context =
1424 GNUNET_CRYPTO_hash_context_start ();
1425 struct GNUNET_HashCode new_key;
1426
1427 /**
1428 * Hash element with new salt to randomize hashmap
1429 */
1430 GNUNET_CRYPTO_hash_context_read (hashed_key_context,
1431 &key,
1432 sizeof(struct IBF_Key));
1433 GNUNET_CRYPTO_hash_context_read (hashed_key_context,
1434 &op->set->content->elements_randomized_salt,
1435 sizeof(uint32_t));
1436 GNUNET_CRYPTO_hash_context_finish (hashed_key_context,
1437 &new_key);
1438 GNUNET_CONTAINER_multihashmap_put (op->set->content->elements_randomized,
1439 &new_key,value,
1440 GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE);
1441 return GNUNET_YES;
728} 1442}
729 1443
730 1444
@@ -808,6 +1522,36 @@ send_client_done (void *cls)
808} 1522}
809 1523
810 1524
1525/**
1526 * Check if all given byzantine parameters are in given boundaries
1527 * @param op
1528 * @return indicator if all given byzantine parameters are in given boundaries
1529 */
1530
1531static int
1532check_byzantine_bounds (struct Operation *op)
1533{
1534 if (op->byzantine != GNUNET_YES)
1535 return GNUNET_OK;
1536
1537 /**
1538 * Check upper byzantine bounds
1539 */
1540 if (op->remote_element_count + op->remote_set_diff >
1541 op->byzantine_upper_bound)
1542 return GNUNET_SYSERR;
1543 if (op->local_element_count + op->local_set_diff > op->byzantine_upper_bound)
1544 return GNUNET_SYSERR;
1545
1546 /**
1547 * Check lower byzantine bounds
1548 */
1549 if (op->remote_element_count < op->byzantine_lower_bound)
1550 return GNUNET_SYSERR;
1551 return GNUNET_OK;
1552}
1553
1554
811/* FIXME: the destroy logic is a mess and should be cleaned up! */ 1555/* FIXME: the destroy logic is a mess and should be cleaned up! */
812 1556
813/** 1557/**
@@ -977,6 +1721,101 @@ fail_union_operation (struct Operation *op)
977 1721
978 1722
979/** 1723/**
1724 * Function that checks if full sync is plausible
1725 * @param initial_local_elements_in_set
1726 * @param estimated_set_difference
1727 * @param repeated_elements
1728 * @param fresh_elements
1729 * @param op
1730 * @return GNUNET_OK if
1731 */
1732
1733static void
1734full_sync_plausibility_check (struct Operation *op)
1735{
1736 if (GNUNET_YES != op->byzantine)
1737 return;
1738
1739 int security_level_lb = -1 * SECURITY_LEVEL;
1740 uint64_t duplicates = op->received_fresh - op->received_total;
1741
1742 /*
1743 * Protect full sync from receiving double element when in FULL SENDING
1744 */
1745 if (PHASE_FULL_SENDING == op->phase)
1746 {
1747 if (duplicates > 0)
1748 {
1749 LOG (GNUNET_ERROR_TYPE_ERROR,
1750 "PROTOCOL VIOLATION: Received duplicate element in full receiving "
1751 "mode of operation this is not allowed! Duplicates: %llu\n",
1752 (unsigned long long) duplicates);
1753 GNUNET_break_op (0);
1754 fail_union_operation (op);
1755 return;
1756 }
1757
1758 }
1759
1760 /*
1761 * Protect full sync with probabilistic algorithm
1762 */
1763 if (PHASE_FULL_RECEIVING == op->phase)
1764 {
1765 if (0 == op->remote_set_diff)
1766 op->remote_set_diff = 1;
1767
1768 long double base = (1 - (long double) (op->remote_set_diff
1769 / (long double) (op->initial_size
1770 + op->
1771 remote_set_diff)));
1772 long double exponent = (op->received_total - (op->received_fresh * ((long
1773 double)
1774 op->
1775 initial_size
1776 / (long
1777 double)
1778 op->
1779 remote_set_diff)));
1780 long double value = exponent * (log2l (base) / log2l (2));
1781 if ((value < security_level_lb) || (value > SECURITY_LEVEL) )
1782 {
1783 LOG (GNUNET_ERROR_TYPE_ERROR,
1784 "PROTOCOL VIOLATION: Other peer violated probabilistic rule for receiving "
1785 "to many duplicated full element : %LF\n",
1786 value);
1787 GNUNET_break_op (0);
1788 fail_union_operation (op);
1789 return;
1790 }
1791 }
1792}
1793
1794
1795/**
1796 * Limit active passive switches in differential sync to configured security level
1797 * @param op
1798 */
1799static void
1800check_max_differential_rounds (struct Operation *op)
1801{
1802 double probability = op->differential_sync_iterations * (log2l (
1803 PROBABILITY_FOR_NEW_ROUND)
1804 / log2l (2));
1805 if ((-1 * SECURITY_LEVEL) > probability)
1806 {
1807 LOG (GNUNET_ERROR_TYPE_ERROR,
1808 "PROTOCOL VIOLATION: Other peer violated probabilistic rule for to many active passive "
1809 "switches in differential sync: %u\n",
1810 op->differential_sync_iterations);
1811 GNUNET_break_op (0);
1812 fail_union_operation (op);
1813 return;
1814 }
1815}
1816
1817
1818/**
980 * Derive the IBF key from a hash code and 1819 * Derive the IBF key from a hash code and
981 * a salt. 1820 * a salt.
982 * 1821 *
@@ -1004,12 +1843,12 @@ get_ibf_key (const struct GNUNET_HashCode *src)
1004struct GetElementContext 1843struct GetElementContext
1005{ 1844{
1006 /** 1845 /**
1007 * FIXME. 1846 * Gnunet hash code in context
1008 */ 1847 */
1009 struct GNUNET_HashCode hash; 1848 struct GNUNET_HashCode hash;
1010 1849
1011 /** 1850 /**
1012 * FIXME. 1851 * Pointer to the key entry
1013 */ 1852 */
1014 struct KeyEntry *k; 1853 struct KeyEntry *k;
1015}; 1854};
@@ -1122,7 +1961,7 @@ salt_key (const struct IBF_Key *k_in,
1122 uint32_t salt, 1961 uint32_t salt,
1123 struct IBF_Key *k_out) 1962 struct IBF_Key *k_out)
1124{ 1963{
1125 int s = salt % 64; 1964 int s = (salt * 7) % 64;
1126 uint64_t x = k_in->key_val; 1965 uint64_t x = k_in->key_val;
1127 1966
1128 /* rotate ibf key */ 1967 /* rotate ibf key */
@@ -1132,14 +1971,14 @@ salt_key (const struct IBF_Key *k_in,
1132 1971
1133 1972
1134/** 1973/**
1135 * FIXME. 1974 * Reverse modification done in the salt_key function
1136 */ 1975 */
1137static void 1976static void
1138unsalt_key (const struct IBF_Key *k_in, 1977unsalt_key (const struct IBF_Key *k_in,
1139 uint32_t salt, 1978 uint32_t salt,
1140 struct IBF_Key *k_out) 1979 struct IBF_Key *k_out)
1141{ 1980{
1142 int s = salt % 64; 1981 int s = (salt * 7) % 64;
1143 uint64_t x = k_in->key_val; 1982 uint64_t x = k_in->key_val;
1144 1983
1145 x = (x << s) | (x >> (64 - s)); 1984 x = (x << s) | (x >> (64 - s));
@@ -1258,7 +2097,9 @@ prepare_ibf (struct Operation *op,
1258 2097
1259 if (NULL != op->local_ibf) 2098 if (NULL != op->local_ibf)
1260 ibf_destroy (op->local_ibf); 2099 ibf_destroy (op->local_ibf);
1261 op->local_ibf = ibf_create (size, SE_IBF_HASH_NUM); 2100 // op->local_ibf = ibf_create (size, SE_IBF_HASH_NUM);
2101 op->local_ibf = ibf_create (size,
2102 ((uint8_t) op->ibf_number_buckets_per_element));
1262 if (NULL == op->local_ibf) 2103 if (NULL == op->local_ibf)
1263 { 2104 {
1264 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 2105 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -1283,13 +2124,23 @@ prepare_ibf (struct Operation *op,
1283 */ 2124 */
1284static int 2125static int
1285send_ibf (struct Operation *op, 2126send_ibf (struct Operation *op,
1286 uint16_t ibf_order) 2127 uint32_t ibf_size)
1287{ 2128{
1288 unsigned int buckets_sent = 0; 2129 uint64_t buckets_sent = 0;
1289 struct InvertibleBloomFilter *ibf; 2130 struct InvertibleBloomFilter *ibf;
2131 op->differential_sync_iterations++;
1290 2132
2133 /**
2134 * Enforce min size of IBF
2135 */
2136 uint32_t ibf_min_size = IBF_MIN_SIZE;
2137
2138 if (ibf_size < ibf_min_size)
2139 {
2140 ibf_size = ibf_min_size;
2141 }
1291 if (GNUNET_OK != 2142 if (GNUNET_OK !=
1292 prepare_ibf (op, 1 << ibf_order)) 2143 prepare_ibf (op, ibf_size))
1293 { 2144 {
1294 /* allocation failed */ 2145 /* allocation failed */
1295 return GNUNET_SYSERR; 2146 return GNUNET_SYSERR;
@@ -1297,45 +2148,52 @@ send_ibf (struct Operation *op,
1297 2148
1298 LOG (GNUNET_ERROR_TYPE_DEBUG, 2149 LOG (GNUNET_ERROR_TYPE_DEBUG,
1299 "sending ibf of size %u\n", 2150 "sending ibf of size %u\n",
1300 1 << ibf_order); 2151 (unsigned int) ibf_size);
1301 2152
1302 { 2153 {
1303 char name[64]; 2154 char name[64];
1304 GNUNET_snprintf (name, sizeof(name), "# sent IBF (order %u)", ibf_order); 2155
2156 GNUNET_snprintf (name,
2157 sizeof(name),
2158 "# sent IBF (order %u)",
2159 ibf_size);
1305 GNUNET_STATISTICS_update (_GSS_statistics, name, 1, GNUNET_NO); 2160 GNUNET_STATISTICS_update (_GSS_statistics, name, 1, GNUNET_NO);
1306 } 2161 }
1307 2162
1308 ibf = op->local_ibf; 2163 ibf = op->local_ibf;
1309 2164
1310 while (buckets_sent < (1 << ibf_order)) 2165 while (buckets_sent < ibf_size)
1311 { 2166 {
1312 unsigned int buckets_in_message; 2167 unsigned int buckets_in_message;
1313 struct GNUNET_MQ_Envelope *ev; 2168 struct GNUNET_MQ_Envelope *ev;
1314 struct IBFMessage *msg; 2169 struct IBFMessage *msg;
1315 2170
1316 buckets_in_message = (1 << ibf_order) - buckets_sent; 2171 buckets_in_message = ibf_size - buckets_sent;
1317 /* limit to maximum */ 2172 /* limit to maximum */
1318 if (buckets_in_message > MAX_BUCKETS_PER_MESSAGE) 2173 if (buckets_in_message > MAX_BUCKETS_PER_MESSAGE)
1319 buckets_in_message = MAX_BUCKETS_PER_MESSAGE; 2174 buckets_in_message = MAX_BUCKETS_PER_MESSAGE;
1320 2175
1321 perf_rtt.ibf.sent += 1; 2176#if MEASURE_PERFORMANCE
1322 perf_rtt.ibf.sent_var_bytes += ( buckets_in_message * IBF_BUCKET_SIZE ); 2177 perf_store.ibf.sent += 1;
2178 perf_store.ibf.sent_var_bytes += (buckets_in_message * IBF_BUCKET_SIZE);
2179#endif
1323 ev = GNUNET_MQ_msg_extra (msg, 2180 ev = GNUNET_MQ_msg_extra (msg,
1324 buckets_in_message * IBF_BUCKET_SIZE, 2181 buckets_in_message * IBF_BUCKET_SIZE,
1325 GNUNET_MESSAGE_TYPE_SETU_P2P_IBF); 2182 GNUNET_MESSAGE_TYPE_SETU_P2P_IBF);
1326 msg->reserved1 = 0; 2183 msg->ibf_size = ibf_size;
1327 msg->reserved2 = 0;
1328 msg->order = ibf_order;
1329 msg->offset = htonl (buckets_sent); 2184 msg->offset = htonl (buckets_sent);
1330 msg->salt = htonl (op->salt_send); 2185 msg->salt = htonl (op->salt_send);
2186 msg->ibf_counter_bit_length = ibf_get_max_counter (ibf);
2187
2188
1331 ibf_write_slice (ibf, buckets_sent, 2189 ibf_write_slice (ibf, buckets_sent,
1332 buckets_in_message, &msg[1]); 2190 buckets_in_message, &msg[1], msg->ibf_counter_bit_length);
1333 buckets_sent += buckets_in_message; 2191 buckets_sent += buckets_in_message;
1334 LOG (GNUNET_ERROR_TYPE_DEBUG, 2192 LOG (GNUNET_ERROR_TYPE_DEBUG,
1335 "ibf chunk size %u, %u/%u sent\n", 2193 "ibf chunk size %u, %llu/%u sent\n",
1336 buckets_in_message, 2194 (unsigned int) buckets_in_message,
1337 buckets_sent, 2195 (unsigned long long) buckets_sent,
1338 1 << ibf_order); 2196 (unsigned int) ibf_size);
1339 GNUNET_MQ_send (op->mq, ev); 2197 GNUNET_MQ_send (op->mq, ev);
1340 } 2198 }
1341 2199
@@ -1354,17 +2212,26 @@ send_ibf (struct Operation *op,
1354 * @return the required size of the ibf 2212 * @return the required size of the ibf
1355 */ 2213 */
1356static unsigned int 2214static unsigned int
1357get_order_from_difference (unsigned int diff) 2215get_size_from_difference (unsigned int diff, int number_buckets_per_element,
2216 float ibf_bucket_number_factor)
1358{ 2217{
1359 unsigned int ibf_order; 2218 /** Make ibf estimation size odd reasoning can be found in BSc Thesis of
2219 * Elias Summermatter (2021) in section 3.11 **/
2220 return (((int) (diff * ibf_bucket_number_factor)) | 1);
2221
2222}
1360 2223
1361 ibf_order = 2; 2224
1362 while (((1 << ibf_order) < (IBF_ALPHA * diff) || 2225static unsigned int
1363 ((1 << ibf_order) < SE_IBF_HASH_NUM)) && 2226get_next_ibf_size (float ibf_bucket_number_factor, unsigned int
1364 (ibf_order < MAX_IBF_ORDER)) 2227 decoded_elements, unsigned int last_ibf_size)
1365 ibf_order++; 2228{
1366 // add one for correction 2229 unsigned int next_size = (unsigned int) ((last_ibf_size * 2)
1367 return ibf_order + 1; 2230 - (ibf_bucket_number_factor
2231 * decoded_elements));
2232 /** Make ibf estimation size odd reasoning can be found in BSc Thesis of
2233 * Elias Summermatter (2021) in section 3.11 **/
2234 return next_size | 1;
1368} 2235}
1369 2236
1370 2237
@@ -1391,8 +2258,10 @@ send_full_element_iterator (void *cls,
1391 LOG (GNUNET_ERROR_TYPE_DEBUG, 2258 LOG (GNUNET_ERROR_TYPE_DEBUG,
1392 "Sending element %s\n", 2259 "Sending element %s\n",
1393 GNUNET_h2s (key)); 2260 GNUNET_h2s (key));
1394 perf_rtt.element_full.received += 1; 2261#if MEASURE_PERFORMANCE
1395 perf_rtt.element_full.received_var_bytes += el->size; 2262 perf_store.element_full.received += 1;
2263 perf_store.element_full.received_var_bytes += el->size;
2264#endif
1396 ev = GNUNET_MQ_msg_extra (emsg, 2265 ev = GNUNET_MQ_msg_extra (emsg,
1397 el->size, 2266 el->size,
1398 GNUNET_MESSAGE_TYPE_SETU_P2P_FULL_ELEMENT); 2267 GNUNET_MESSAGE_TYPE_SETU_P2P_FULL_ELEMENT);
@@ -1421,10 +2290,25 @@ send_full_set (struct Operation *op)
1421 "Dedicing to transmit the full set\n"); 2290 "Dedicing to transmit the full set\n");
1422 /* FIXME: use a more memory-friendly way of doing this with an 2291 /* FIXME: use a more memory-friendly way of doing this with an
1423 iterator, just as we do in the non-full case! */ 2292 iterator, just as we do in the non-full case! */
2293
2294 // Randomize Elements to send
2295 op->set->content->elements_randomized = GNUNET_CONTAINER_multihashmap_create (
2296 32,GNUNET_NO);
2297 op->set->content->elements_randomized_salt = GNUNET_CRYPTO_random_u64 (
2298 GNUNET_CRYPTO_QUALITY_NONCE,
2299 UINT64_MAX);
1424 (void) GNUNET_CONTAINER_multihashmap_iterate (op->set->content->elements, 2300 (void) GNUNET_CONTAINER_multihashmap_iterate (op->set->content->elements,
1425 &send_full_element_iterator, 2301 &
2302 create_randomized_element_iterator,
1426 op); 2303 op);
1427 perf_rtt.full_done.sent += 1; 2304
2305 (void) GNUNET_CONTAINER_multihashmap_iterate (
2306 op->set->content->elements_randomized,
2307 &send_full_element_iterator,
2308 op);
2309#if MEASURE_PERFORMANCE
2310 perf_store.full_done.sent += 1;
2311#endif
1428 ev = GNUNET_MQ_msg_header (GNUNET_MESSAGE_TYPE_SETU_P2P_FULL_DONE); 2312 ev = GNUNET_MQ_msg_header (GNUNET_MESSAGE_TYPE_SETU_P2P_FULL_DONE);
1429 GNUNET_MQ_send (op->mq, 2313 GNUNET_MQ_send (op->mq,
1430 ev); 2314 ev);
@@ -1454,7 +2338,7 @@ check_union_p2p_strata_estimator (void *cls,
1454 msg->header.type)); 2338 msg->header.type));
1455 len = ntohs (msg->header.size) - sizeof(struct StrataEstimatorMessage); 2339 len = ntohs (msg->header.size) - sizeof(struct StrataEstimatorMessage);
1456 if ((GNUNET_NO == is_compressed) && 2340 if ((GNUNET_NO == is_compressed) &&
1457 (len != SE_STRATA_COUNT * SE_IBF_SIZE * IBF_BUCKET_SIZE)) 2341 (len != SE_STRATA_COUNT * SE_IBFS_TOTAL_SIZE * IBF_BUCKET_SIZE))
1458 { 2342 {
1459 GNUNET_break (0); 2343 GNUNET_break (0);
1460 return GNUNET_SYSERR; 2344 return GNUNET_SYSERR;
@@ -1473,14 +2357,44 @@ static void
1473handle_union_p2p_strata_estimator (void *cls, 2357handle_union_p2p_strata_estimator (void *cls,
1474 const struct StrataEstimatorMessage *msg) 2358 const struct StrataEstimatorMessage *msg)
1475{ 2359{
1476 perf_rtt.se.received += 1; 2360#if MEASURE_PERFORMANCE
1477 perf_rtt.se.received_var_bytes += ntohs (msg->header.size) - sizeof(struct StrataEstimatorMessage); 2361 perf_store.se.received += 1;
2362 perf_store.se.received_var_bytes += ntohs (msg->header.size) - sizeof(struct
2363 StrataEstimatorMessage);
2364#endif
1478 struct Operation *op = cls; 2365 struct Operation *op = cls;
1479 struct StrataEstimator *remote_se; 2366 struct MultiStrataEstimator *remote_se;
1480 unsigned int diff; 2367 unsigned int diff;
1481 uint64_t other_size; 2368 uint64_t other_size;
1482 size_t len; 2369 size_t len;
1483 int is_compressed; 2370 int is_compressed;
2371 op->local_element_count = GNUNET_CONTAINER_multihashmap_size (
2372 op->set->content->elements);
2373 // Setting peer site to receiving peer
2374 op->peer_site = 1;
2375
2376 /**
2377 * Check that the message is received only in supported phase
2378 */
2379 uint8_t allowed_phases[] = {PHASE_EXPECT_SE};
2380 if (GNUNET_OK !=
2381 check_valid_phase (allowed_phases,sizeof(allowed_phases),op))
2382 {
2383 GNUNET_break (0);
2384 fail_union_operation (op);
2385 return;
2386 }
2387
2388 /** Only allow 1,2,4,8 SEs **/
2389 if ((msg->se_count > 8) || (__builtin_popcount ((int) msg->se_count) != 1))
2390 {
2391 LOG (GNUNET_ERROR_TYPE_ERROR,
2392 "PROTOCOL VIOLATION: Invalid number of se transmitted by other peer %u\n",
2393 msg->se_count);
2394 GNUNET_break_op (0);
2395 fail_union_operation (op);
2396 return;
2397 }
1484 2398
1485 is_compressed = (GNUNET_MESSAGE_TYPE_SETU_P2P_SEC == htons ( 2399 is_compressed = (GNUNET_MESSAGE_TYPE_SETU_P2P_SEC == htons (
1486 msg->header.type)); 2400 msg->header.type));
@@ -1490,8 +2404,20 @@ handle_union_p2p_strata_estimator (void *cls,
1490 GNUNET_NO); 2404 GNUNET_NO);
1491 len = ntohs (msg->header.size) - sizeof(struct StrataEstimatorMessage); 2405 len = ntohs (msg->header.size) - sizeof(struct StrataEstimatorMessage);
1492 other_size = GNUNET_ntohll (msg->set_size); 2406 other_size = GNUNET_ntohll (msg->set_size);
2407 op->remote_element_count = other_size;
2408
2409 if (op->byzantine_upper_bound < op->remote_element_count)
2410 {
2411 LOG (GNUNET_ERROR_TYPE_ERROR,
2412 "Exceeded configured upper bound <%lu> of element: %u\n",
2413 op->byzantine_upper_bound,
2414 op->remote_element_count);
2415 fail_union_operation (op);
2416 return;
2417 }
2418
1493 remote_se = strata_estimator_create (SE_STRATA_COUNT, 2419 remote_se = strata_estimator_create (SE_STRATA_COUNT,
1494 SE_IBF_SIZE, 2420 SE_IBFS_TOTAL_SIZE,
1495 SE_IBF_HASH_NUM); 2421 SE_IBF_HASH_NUM);
1496 if (NULL == remote_se) 2422 if (NULL == remote_se)
1497 { 2423 {
@@ -1503,6 +2429,8 @@ handle_union_p2p_strata_estimator (void *cls,
1503 strata_estimator_read (&msg[1], 2429 strata_estimator_read (&msg[1],
1504 len, 2430 len,
1505 is_compressed, 2431 is_compressed,
2432 msg->se_count,
2433 SE_IBFS_TOTAL_SIZE,
1506 remote_se)) 2434 remote_se))
1507 { 2435 {
1508 /* decompression failed */ 2436 /* decompression failed */
@@ -1511,11 +2439,76 @@ handle_union_p2p_strata_estimator (void *cls,
1511 return; 2439 return;
1512 } 2440 }
1513 GNUNET_assert (NULL != op->se); 2441 GNUNET_assert (NULL != op->se);
1514 diff = strata_estimator_difference (remote_se, 2442 strata_estimator_difference (remote_se,
1515 op->se); 2443 op->se);
2444
2445 /* Calculate remote local diff */
2446 long diff_remote = remote_se->stratas[0]->strata[0]->remote_decoded_count;
2447 long diff_local = remote_se->stratas[0]->strata[0]->local_decoded_count;
2448
2449 /* Prevent estimations from overshooting max element */
2450 if (diff_remote + op->remote_element_count > op->byzantine_upper_bound)
2451 diff_remote = op->byzantine_upper_bound - op->remote_element_count;
2452 if (diff_local + op->local_element_count > op->byzantine_upper_bound)
2453 diff_local = op->byzantine_upper_bound - op->local_element_count;
2454 if ((diff_remote < 0) || (diff_local < 0))
2455 {
2456 strata_estimator_destroy (remote_se);
2457 LOG (GNUNET_ERROR_TYPE_ERROR,
2458 "PROTOCOL VIOLATION: More element is set as upper boundary or other peer is "
2459 "malicious: remote diff %ld, local diff: %ld\n",
2460 diff_remote, diff_local);
2461 GNUNET_break_op (0);
2462 fail_union_operation (op);
2463 return;
2464 }
1516 2465
1517 if (diff > 200) 2466 /* Make estimation more precise in initial sync cases */
1518 diff = diff * 3 / 2; 2467 if (0 == op->remote_element_count)
2468 {
2469 diff_remote = 0;
2470 diff_local = op->local_element_count;
2471 }
2472 if (0 == op->local_element_count)
2473 {
2474 diff_local = 0;
2475 diff_remote = op->remote_element_count;
2476 }
2477
2478 diff = diff_remote + diff_local;
2479 op->remote_set_diff = diff_remote;
2480
2481 /** Calculate avg element size if not initial sync **/
2482 uint64_t avg_element_size = 0;
2483 if (0 < op->local_element_count)
2484 {
2485 op->total_elements_size_local = 0;
2486 GNUNET_CONTAINER_multihashmap_iterate (op->set->content->elements,
2487 &
2488 determinate_avg_element_size_iterator,
2489 op);
2490 avg_element_size = op->total_elements_size_local / op->local_element_count;
2491 }
2492
2493 op->mode_of_operation = estimate_best_mode_of_operation (avg_element_size,
2494 GNUNET_CONTAINER_multihashmap_size (
2495 op->set->content->
2496 elements),
2497 op->
2498 remote_element_count,
2499 diff_remote,
2500 diff_local,
2501 op->
2502 rtt_bandwidth_tradeoff,
2503 op->
2504 ibf_bucket_number_factor);
2505
2506#if MEASURE_PERFORMANCE
2507 perf_store.se_diff_local = diff_local;
2508 perf_store.se_diff_remote = diff_remote;
2509 perf_store.se_diff = diff;
2510 perf_store.mode_of_operation = op->mode_of_operation;
2511#endif
1519 2512
1520 strata_estimator_destroy (remote_se); 2513 strata_estimator_destroy (remote_se);
1521 strata_estimator_destroy (op->se); 2514 strata_estimator_destroy (op->se);
@@ -1523,7 +2516,8 @@ handle_union_p2p_strata_estimator (void *cls,
1523 LOG (GNUNET_ERROR_TYPE_DEBUG, 2516 LOG (GNUNET_ERROR_TYPE_DEBUG,
1524 "got se diff=%d, using ibf size %d\n", 2517 "got se diff=%d, using ibf size %d\n",
1525 diff, 2518 diff,
1526 1U << get_order_from_difference (diff)); 2519 1U << get_size_from_difference (diff, op->ibf_number_buckets_per_element,
2520 op->ibf_bucket_number_factor));
1527 2521
1528 { 2522 {
1529 char *set_debug; 2523 char *set_debug;
@@ -1546,16 +2540,8 @@ handle_union_p2p_strata_estimator (void *cls,
1546 return; 2540 return;
1547 } 2541 }
1548 2542
1549 LOG (GNUNET_ERROR_TYPE_ERROR,
1550 "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx: %f\n", op->rtt_bandwidth_tradeoff);
1551
1552
1553 /**
1554 * Added rtt_bandwidth_tradeoff directly need future improvements
1555 */
1556 if ((GNUNET_YES == op->force_full) || 2543 if ((GNUNET_YES == op->force_full) ||
1557 (diff > op->initial_size / 4) || 2544 (op->mode_of_operation != DIFFERENTIAL_SYNC))
1558 (0 == other_size))
1559 { 2545 {
1560 LOG (GNUNET_ERROR_TYPE_DEBUG, 2546 LOG (GNUNET_ERROR_TYPE_DEBUG,
1561 "Deciding to go for full set transmission (diff=%d, own set=%llu)\n", 2547 "Deciding to go for full set transmission (diff=%d, own set=%llu)\n",
@@ -1565,9 +2551,17 @@ handle_union_p2p_strata_estimator (void *cls,
1565 "# of full sends", 2551 "# of full sends",
1566 1, 2552 1,
1567 GNUNET_NO); 2553 GNUNET_NO);
1568 if ((op->initial_size <= other_size) || 2554 if (FULL_SYNC_LOCAL_SENDING_FIRST == op->mode_of_operation)
1569 (0 == other_size))
1570 { 2555 {
2556 struct TransmitFullMessage *signal_msg;
2557 struct GNUNET_MQ_Envelope *ev;
2558 ev = GNUNET_MQ_msg_extra (signal_msg,sizeof(struct TransmitFullMessage),
2559 GNUNET_MESSAGE_TYPE_SETU_P2P_SEND_FULL);
2560 signal_msg->remote_set_difference = htonl (diff_local);
2561 signal_msg->remote_set_size = htonl (op->local_element_count);
2562 signal_msg->local_set_difference = htonl (diff_remote);
2563 GNUNET_MQ_send (op->mq,
2564 ev);
1571 send_full_set (op); 2565 send_full_set (op);
1572 } 2566 }
1573 else 2567 else
@@ -1577,9 +2571,15 @@ handle_union_p2p_strata_estimator (void *cls,
1577 LOG (GNUNET_ERROR_TYPE_DEBUG, 2571 LOG (GNUNET_ERROR_TYPE_DEBUG,
1578 "Telling other peer that we expect its full set\n"); 2572 "Telling other peer that we expect its full set\n");
1579 op->phase = PHASE_FULL_RECEIVING; 2573 op->phase = PHASE_FULL_RECEIVING;
1580 perf_rtt.request_full.sent += 1; 2574#if MEASURE_PERFORMANCE
1581 ev = GNUNET_MQ_msg_header ( 2575 perf_store.request_full.sent += 1;
1582 GNUNET_MESSAGE_TYPE_SETU_P2P_REQUEST_FULL); 2576#endif
2577 struct TransmitFullMessage *signal_msg;
2578 ev = GNUNET_MQ_msg_extra (signal_msg,sizeof(struct TransmitFullMessage),
2579 GNUNET_MESSAGE_TYPE_SETU_P2P_REQUEST_FULL);
2580 signal_msg->remote_set_difference = htonl (diff_local);
2581 signal_msg->remote_set_size = htonl (op->local_element_count);
2582 signal_msg->local_set_difference = htonl (diff_remote);
1583 GNUNET_MQ_send (op->mq, 2583 GNUNET_MQ_send (op->mq,
1584 ev); 2584 ev);
1585 } 2585 }
@@ -1592,7 +2592,9 @@ handle_union_p2p_strata_estimator (void *cls,
1592 GNUNET_NO); 2592 GNUNET_NO);
1593 if (GNUNET_OK != 2593 if (GNUNET_OK !=
1594 send_ibf (op, 2594 send_ibf (op,
1595 get_order_from_difference (diff))) 2595 get_size_from_difference (diff,
2596 op->ibf_number_buckets_per_element,
2597 op->ibf_bucket_number_factor)))
1596 { 2598 {
1597 /* Internal error, best we can do is shut the connection */ 2599 /* Internal error, best we can do is shut the connection */
1598 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 2600 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -1625,15 +2627,64 @@ send_offers_iterator (void *cls,
1625 2627
1626 /* Detect 32-bit key collision for the 64-bit IBF keys. */ 2628 /* Detect 32-bit key collision for the 64-bit IBF keys. */
1627 if (ke->ibf_key.key_val != sec->ibf_key.key_val) 2629 if (ke->ibf_key.key_val != sec->ibf_key.key_val)
2630 {
2631 op->active_passive_switch_required = true;
1628 return GNUNET_YES; 2632 return GNUNET_YES;
2633 }
1629 2634
1630 perf_rtt.offer.sent += 1; 2635 /* Prevent implementation from sending a offer multiple times in case of roll switch */
1631 perf_rtt.offer.sent_var_bytes += sizeof(struct GNUNET_HashCode); 2636 if (GNUNET_YES ==
2637 is_message_in_message_control_flow (
2638 op->message_control_flow,
2639 &ke->element->element_hash,
2640 OFFER_MESSAGE)
2641 )
2642 {
2643 LOG (GNUNET_ERROR_TYPE_DEBUG,
2644 "Skipping already sent processed element offer!\n");
2645 return GNUNET_YES;
2646 }
1632 2647
2648 /* Save send offer message for message control */
2649 if (GNUNET_YES !=
2650 update_message_control_flow (
2651 op->message_control_flow,
2652 MSG_CFS_SENT,
2653 &ke->element->element_hash,
2654 OFFER_MESSAGE)
2655 )
2656 {
2657 LOG (GNUNET_ERROR_TYPE_ERROR,
2658 "Double offer message sent found!\n");
2659 GNUNET_break (0);
2660 fail_union_operation (op);
2661 return GNUNET_NO;
2662 }
2663 ;
2664
2665 /* Mark element to be expected to received */
2666 if (GNUNET_YES !=
2667 update_message_control_flow (
2668 op->message_control_flow,
2669 MSG_CFS_EXPECTED,
2670 &ke->element->element_hash,
2671 DEMAND_MESSAGE)
2672 )
2673 {
2674 LOG (GNUNET_ERROR_TYPE_ERROR,
2675 "Double demand received found!\n");
2676 GNUNET_break (0);
2677 fail_union_operation (op);
2678 return GNUNET_NO;
2679 }
2680 ;
2681#if MEASURE_PERFORMANCE
2682 perf_store.offer.sent += 1;
2683 perf_store.offer.sent_var_bytes += sizeof(struct GNUNET_HashCode);
2684#endif
1633 ev = GNUNET_MQ_msg_header_extra (mh, 2685 ev = GNUNET_MQ_msg_header_extra (mh,
1634 sizeof(struct GNUNET_HashCode), 2686 sizeof(struct GNUNET_HashCode),
1635 GNUNET_MESSAGE_TYPE_SETU_P2P_OFFER); 2687 GNUNET_MESSAGE_TYPE_SETU_P2P_OFFER);
1636
1637 GNUNET_assert (NULL != ev); 2688 GNUNET_assert (NULL != ev);
1638 *(struct GNUNET_HashCode *) &mh[1] = ke->element->element_hash; 2689 *(struct GNUNET_HashCode *) &mh[1] = ke->element->element_hash;
1639 LOG (GNUNET_ERROR_TYPE_DEBUG, 2690 LOG (GNUNET_ERROR_TYPE_DEBUG,
@@ -1651,7 +2702,7 @@ send_offers_iterator (void *cls,
1651 * @param op union operation 2702 * @param op union operation
1652 * @param ibf_key IBF key of interest 2703 * @param ibf_key IBF key of interest
1653 */ 2704 */
1654static void 2705void
1655send_offers_for_key (struct Operation *op, 2706send_offers_for_key (struct Operation *op,
1656 struct IBF_Key ibf_key) 2707 struct IBF_Key ibf_key)
1657{ 2708{
@@ -1694,6 +2745,7 @@ decode_and_send (struct Operation *op)
1694 /* allocation failed */ 2745 /* allocation failed */
1695 return GNUNET_SYSERR; 2746 return GNUNET_SYSERR;
1696 } 2747 }
2748
1697 diff_ibf = ibf_dup (op->local_ibf); 2749 diff_ibf = ibf_dup (op->local_ibf);
1698 ibf_subtract (diff_ibf, 2750 ibf_subtract (diff_ibf,
1699 op->remote_ibf); 2751 op->remote_ibf);
@@ -1706,7 +2758,7 @@ decode_and_send (struct Operation *op)
1706 diff_ibf->size); 2758 diff_ibf->size);
1707 2759
1708 num_decoded = 0; 2760 num_decoded = 0;
1709 key.key_val = 0; /* just to avoid compiler thinking we use undef'ed variable */ 2761 key.key_val = 0; /* just to avoid compiler thinking we use undef'ed variable */
1710 2762
1711 while (1) 2763 while (1)
1712 { 2764 {
@@ -1738,23 +2790,36 @@ decode_and_send (struct Operation *op)
1738 if ((GNUNET_SYSERR == res) || 2790 if ((GNUNET_SYSERR == res) ||
1739 (GNUNET_YES == cycle_detected)) 2791 (GNUNET_YES == cycle_detected))
1740 { 2792 {
1741 int next_order; 2793 uint32_t next_size;
1742 next_order = 0; 2794 /** Enforce odd ibf size **/
1743 while (1 << next_order < diff_ibf->size) 2795
1744 next_order++; 2796 next_size = get_next_ibf_size (op->ibf_bucket_number_factor, num_decoded,
1745 next_order++; 2797 diff_ibf->size);
1746 if (next_order <= MAX_IBF_ORDER) 2798 /** Make ibf estimation size odd reasoning can be found in BSc Thesis of
2799 * Elias Summermatter (2021) in section 3.11 **/
2800 uint32_t ibf_min_size = IBF_MIN_SIZE | 1;
2801
2802 if (next_size<ibf_min_size)
2803 next_size = ibf_min_size;
2804
2805
2806 if (next_size <= MAX_IBF_SIZE)
1747 { 2807 {
1748 LOG (GNUNET_ERROR_TYPE_DEBUG, 2808 LOG (GNUNET_ERROR_TYPE_DEBUG,
1749 "decoding failed, sending larger ibf (size %u)\n", 2809 "decoding failed, sending larger ibf (size %u)\n",
1750 1 << next_order); 2810 next_size);
1751 GNUNET_STATISTICS_update (_GSS_statistics, 2811 GNUNET_STATISTICS_update (_GSS_statistics,
1752 "# of IBF retries", 2812 "# of IBF retries",
1753 1, 2813 1,
1754 GNUNET_NO); 2814 GNUNET_NO);
1755 op->salt_send++; 2815#if MEASURE_PERFORMANCE
2816 perf_store.active_passive_switches += 1;
2817#endif
2818
2819 op->salt_send = op->salt_receive++;
2820
1756 if (GNUNET_OK != 2821 if (GNUNET_OK !=
1757 send_ibf (op, next_order)) 2822 send_ibf (op, next_size))
1758 { 2823 {
1759 /* Internal error, best we can do is shut the connection */ 2824 /* Internal error, best we can do is shut the connection */
1760 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 2825 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -1786,7 +2851,9 @@ decode_and_send (struct Operation *op)
1786 LOG (GNUNET_ERROR_TYPE_DEBUG, 2851 LOG (GNUNET_ERROR_TYPE_DEBUG,
1787 "transmitted all values, sending DONE\n"); 2852 "transmitted all values, sending DONE\n");
1788 2853
1789 perf_rtt.done.sent += 1; 2854#if MEASURE_PERFORMANCE
2855 perf_store.done.sent += 1;
2856#endif
1790 ev = GNUNET_MQ_msg_header (GNUNET_MESSAGE_TYPE_SETU_P2P_DONE); 2857 ev = GNUNET_MQ_msg_header (GNUNET_MESSAGE_TYPE_SETU_P2P_DONE);
1791 GNUNET_MQ_send (op->mq, ev); 2858 GNUNET_MQ_send (op->mq, ev);
1792 /* We now wait until we get a DONE message back 2859 /* We now wait until we get a DONE message back
@@ -1797,7 +2864,6 @@ decode_and_send (struct Operation *op)
1797 if (1 == side) 2864 if (1 == side)
1798 { 2865 {
1799 struct IBF_Key unsalted_key; 2866 struct IBF_Key unsalted_key;
1800
1801 unsalt_key (&key, 2867 unsalt_key (&key,
1802 op->salt_receive, 2868 op->salt_receive,
1803 &unsalted_key); 2869 &unsalted_key);
@@ -1809,8 +2875,29 @@ decode_and_send (struct Operation *op)
1809 struct GNUNET_MQ_Envelope *ev; 2875 struct GNUNET_MQ_Envelope *ev;
1810 struct InquiryMessage *msg; 2876 struct InquiryMessage *msg;
1811 2877
1812 perf_rtt.inquery.sent += 1; 2878#if MEASURE_PERFORMANCE
1813 perf_rtt.inquery.sent_var_bytes += sizeof(struct IBF_Key); 2879 perf_store.inquery.sent += 1;
2880 perf_store.inquery.sent_var_bytes += sizeof(struct IBF_Key);
2881#endif
2882
2883 /** Add sent inquiries to hashmap for flow control **/
2884 struct GNUNET_HashContext *hashed_key_context =
2885 GNUNET_CRYPTO_hash_context_start ();
2886 struct GNUNET_HashCode *hashed_key = (struct
2887 GNUNET_HashCode*) GNUNET_malloc (
2888 sizeof(struct GNUNET_HashCode));
2889 enum MESSAGE_CONTROL_FLOW_STATE mcfs = MSG_CFS_SENT;
2890 GNUNET_CRYPTO_hash_context_read (hashed_key_context,
2891 &key,
2892 sizeof(struct IBF_Key));
2893 GNUNET_CRYPTO_hash_context_finish (hashed_key_context,
2894 hashed_key);
2895 GNUNET_CONTAINER_multihashmap_put (op->inquiries_sent,
2896 hashed_key,
2897 &mcfs,
2898 GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE
2899 );
2900
1814 /* It may be nice to merge multiple requests, but with CADET's corking it is not worth 2901 /* It may be nice to merge multiple requests, but with CADET's corking it is not worth
1815 * the effort additional complexity. */ 2902 * the effort additional complexity. */
1816 ev = GNUNET_MQ_msg_extra (msg, 2903 ev = GNUNET_MQ_msg_extra (msg,
@@ -1836,6 +2923,100 @@ decode_and_send (struct Operation *op)
1836 2923
1837 2924
1838/** 2925/**
2926 * Check send full message received from other peer
2927 * @param cls
2928 * @param msg
2929 * @return
2930 */
2931
2932static int
2933check_union_p2p_send_full (void *cls,
2934 const struct TransmitFullMessage *msg)
2935{
2936 return GNUNET_OK;
2937}
2938
2939
2940/**
2941 * Handle send full message received from other peer
2942 *
2943 * @param cls
2944 * @param msg
2945 */
2946static void
2947handle_union_p2p_send_full (void *cls,
2948 const struct TransmitFullMessage *msg)
2949{
2950 struct Operation *op = cls;
2951
2952 /**
2953 * Check that the message is received only in supported phase
2954 */
2955 uint8_t allowed_phases[] = {PHASE_EXPECT_IBF};
2956 if (GNUNET_OK !=
2957 check_valid_phase (allowed_phases,sizeof(allowed_phases),op))
2958 {
2959 GNUNET_break (0);
2960 fail_union_operation (op);
2961 return;
2962 }
2963
2964 /** write received values to operator**/
2965 op->remote_element_count = ntohl (msg->remote_set_size);
2966 op->remote_set_diff = ntohl (msg->remote_set_difference);
2967 op->local_set_diff = ntohl (msg->local_set_difference);
2968
2969 /** Check byzantine limits **/
2970 if (check_byzantine_bounds (op) != GNUNET_OK)
2971 {
2972 LOG (GNUNET_ERROR_TYPE_ERROR,
2973 "PROTOCOL VIOLATION: Parameters transmitted from other peer do not satisfie byzantine "
2974 "criteria\n");
2975 GNUNET_break_op (0);
2976 fail_union_operation (op);
2977 return;
2978 }
2979
2980 /** Calculate avg element size if not initial sync **/
2981 op->local_element_count = GNUNET_CONTAINER_multihashmap_size (
2982 op->set->content->elements);
2983 uint64_t avg_element_size = 0;
2984 if (0 < op->local_element_count)
2985 {
2986 op->total_elements_size_local = 0;
2987 GNUNET_CONTAINER_multihashmap_iterate (op->set->content->elements,
2988 &
2989 determinate_avg_element_size_iterator,
2990 op);
2991 avg_element_size = op->total_elements_size_local / op->local_element_count;
2992 }
2993
2994 /** Validate mode of operation **/
2995 int mode_of_operation = estimate_best_mode_of_operation (avg_element_size,
2996 op->
2997 remote_element_count,
2998 op->
2999 local_element_count,
3000 op->local_set_diff,
3001 op->remote_set_diff,
3002 op->
3003 rtt_bandwidth_tradeoff,
3004 op->
3005 ibf_bucket_number_factor);
3006 if (FULL_SYNC_LOCAL_SENDING_FIRST != mode_of_operation)
3007 {
3008 LOG (GNUNET_ERROR_TYPE_ERROR,
3009 "PROTOCOL VIOLATION: Remote peer choose to send his full set first but correct mode would have been"
3010 " : %d\n", mode_of_operation);
3011 GNUNET_break_op (0);
3012 fail_union_operation (op);
3013 return;
3014 }
3015 op->phase = PHASE_FULL_RECEIVING;
3016}
3017
3018
3019/**
1839 * Check an IBF message from a remote peer. 3020 * Check an IBF message from a remote peer.
1840 * 3021 *
1841 * Reassemble the IBF from multiple pieces, and 3022 * Reassemble the IBF from multiple pieces, and
@@ -1872,7 +3053,8 @@ check_union_p2p_ibf (void *cls,
1872 GNUNET_break_op (0); 3053 GNUNET_break_op (0);
1873 return GNUNET_SYSERR; 3054 return GNUNET_SYSERR;
1874 } 3055 }
1875 if (1 << msg->order != op->remote_ibf->size) 3056
3057 if (msg->ibf_size != op->remote_ibf->size)
1876 { 3058 {
1877 GNUNET_break_op (0); 3059 GNUNET_break_op (0);
1878 return GNUNET_SYSERR; 3060 return GNUNET_SYSERR;
@@ -1909,9 +3091,26 @@ handle_union_p2p_ibf (void *cls,
1909{ 3091{
1910 struct Operation *op = cls; 3092 struct Operation *op = cls;
1911 unsigned int buckets_in_message; 3093 unsigned int buckets_in_message;
3094 /**
3095 * Check that the message is received only in supported phase
3096 */
3097 uint8_t allowed_phases[] = {PHASE_EXPECT_IBF, PHASE_EXPECT_IBF_LAST,
3098 PHASE_PASSIVE_DECODING};
3099 if (GNUNET_OK !=
3100 check_valid_phase (allowed_phases,sizeof(allowed_phases),op))
3101 {
3102 GNUNET_break (0);
3103 fail_union_operation (op);
3104 return;
3105 }
3106 op->differential_sync_iterations++;
3107 check_max_differential_rounds (op);
3108 op->active_passive_switch_required = false;
1912 3109
1913 perf_rtt.ibf.received += 1; 3110#if MEASURE_PERFORMANCE
1914 perf_rtt.ibf.received_var_bytes += (ntohs (msg->header.size) - sizeof *msg); 3111 perf_store.ibf.received += 1;
3112 perf_store.ibf.received_var_bytes += (ntohs (msg->header.size) - sizeof *msg);
3113#endif
1915 3114
1916 buckets_in_message = (ntohs (msg->header.size) - sizeof *msg) 3115 buckets_in_message = (ntohs (msg->header.size) - sizeof *msg)
1917 / IBF_BUCKET_SIZE; 3116 / IBF_BUCKET_SIZE;
@@ -1922,8 +3121,10 @@ handle_union_p2p_ibf (void *cls,
1922 GNUNET_assert (NULL == op->remote_ibf); 3121 GNUNET_assert (NULL == op->remote_ibf);
1923 LOG (GNUNET_ERROR_TYPE_DEBUG, 3122 LOG (GNUNET_ERROR_TYPE_DEBUG,
1924 "Creating new ibf of size %u\n", 3123 "Creating new ibf of size %u\n",
1925 1 << msg->order); 3124 ntohl (msg->ibf_size));
1926 op->remote_ibf = ibf_create (1 << msg->order, SE_IBF_HASH_NUM); 3125 // op->remote_ibf = ibf_create (1 << msg->order, SE_IBF_HASH_NUM);
3126 op->remote_ibf = ibf_create (msg->ibf_size,
3127 ((uint8_t) op->ibf_number_buckets_per_element));
1927 op->salt_receive = ntohl (msg->salt); 3128 op->salt_receive = ntohl (msg->salt);
1928 LOG (GNUNET_ERROR_TYPE_DEBUG, 3129 LOG (GNUNET_ERROR_TYPE_DEBUG,
1929 "Receiving new IBF with salt %u\n", 3130 "Receiving new IBF with salt %u\n",
@@ -1954,7 +3155,7 @@ handle_union_p2p_ibf (void *cls,
1954 ibf_read_slice (&msg[1], 3155 ibf_read_slice (&msg[1],
1955 op->ibf_buckets_received, 3156 op->ibf_buckets_received,
1956 buckets_in_message, 3157 buckets_in_message,
1957 op->remote_ibf); 3158 op->remote_ibf, msg->ibf_counter_bit_length);
1958 op->ibf_buckets_received += buckets_in_message; 3159 op->ibf_buckets_received += buckets_in_message;
1959 3160
1960 if (op->ibf_buckets_received == op->remote_ibf->size) 3161 if (op->ibf_buckets_received == op->remote_ibf->size)
@@ -2030,18 +3231,24 @@ maybe_finish (struct Operation *op)
2030 3231
2031 num_demanded = GNUNET_CONTAINER_multihashmap_size ( 3232 num_demanded = GNUNET_CONTAINER_multihashmap_size (
2032 op->demanded_hashes); 3233 op->demanded_hashes);
2033 3234 int send_done = GNUNET_CONTAINER_multihashmap_iterate (
3235 op->message_control_flow,
3236 &
3237 determinate_done_message_iterator,
3238 op);
2034 if (PHASE_FINISH_WAITING == op->phase) 3239 if (PHASE_FINISH_WAITING == op->phase)
2035 { 3240 {
2036 LOG (GNUNET_ERROR_TYPE_DEBUG, 3241 LOG (GNUNET_ERROR_TYPE_DEBUG,
2037 "In PHASE_FINISH_WAITING, pending %u demands\n", 3242 "In PHASE_FINISH_WAITING, pending %u demands -> %d\n",
2038 num_demanded); 3243 num_demanded, op->peer_site);
2039 if (0 == num_demanded) 3244 if (-1 != send_done)
2040 { 3245 {
2041 struct GNUNET_MQ_Envelope *ev; 3246 struct GNUNET_MQ_Envelope *ev;
2042 3247
2043 op->phase = PHASE_FINISHED; 3248 op->phase = PHASE_FINISHED;
2044 perf_rtt.done.sent += 1; 3249#if MEASURE_PERFORMANCE
3250 perf_store.done.sent += 1;
3251#endif
2045 ev = GNUNET_MQ_msg_header (GNUNET_MESSAGE_TYPE_SETU_P2P_DONE); 3252 ev = GNUNET_MQ_msg_header (GNUNET_MESSAGE_TYPE_SETU_P2P_DONE);
2046 GNUNET_MQ_send (op->mq, 3253 GNUNET_MQ_send (op->mq,
2047 ev); 3254 ev);
@@ -2052,9 +3259,9 @@ maybe_finish (struct Operation *op)
2052 if (PHASE_FINISH_CLOSING == op->phase) 3259 if (PHASE_FINISH_CLOSING == op->phase)
2053 { 3260 {
2054 LOG (GNUNET_ERROR_TYPE_DEBUG, 3261 LOG (GNUNET_ERROR_TYPE_DEBUG,
2055 "In PHASE_FINISH_CLOSING, pending %u demands\n", 3262 "In PHASE_FINISH_CLOSING, pending %u demands %d\n",
2056 num_demanded); 3263 num_demanded, op->peer_site);
2057 if (0 == num_demanded) 3264 if (-1 != send_done)
2058 { 3265 {
2059 op->phase = PHASE_FINISHED; 3266 op->phase = PHASE_FINISHED;
2060 send_client_done (op); 3267 send_client_done (op);
@@ -2102,11 +3309,25 @@ handle_union_p2p_elements (void *cls,
2102 struct KeyEntry *ke; 3309 struct KeyEntry *ke;
2103 uint16_t element_size; 3310 uint16_t element_size;
2104 3311
3312 /**
3313 * Check that the message is received only in supported phase
3314 */
3315 uint8_t allowed_phases[] = {PHASE_ACTIVE_DECODING, PHASE_PASSIVE_DECODING,
3316 PHASE_FINISH_WAITING, PHASE_FINISH_CLOSING};
3317 if (GNUNET_OK !=
3318 check_valid_phase (allowed_phases,sizeof(allowed_phases),op))
3319 {
3320 GNUNET_break (0);
3321 fail_union_operation (op);
3322 return;
3323 }
2105 3324
2106 element_size = ntohs (emsg->header.size) - sizeof(struct 3325 element_size = ntohs (emsg->header.size) - sizeof(struct
2107 GNUNET_SETU_ElementMessage); 3326 GNUNET_SETU_ElementMessage);
2108 perf_rtt.element.received += 1; 3327#if MEASURE_PERFORMANCE
2109 perf_rtt.element.received_var_bytes += element_size; 3328 perf_store.element.received += 1;
3329 perf_store.element.received_var_bytes += element_size;
3330#endif
2110 3331
2111 ee = GNUNET_malloc (sizeof(struct ElementEntry) + element_size); 3332 ee = GNUNET_malloc (sizeof(struct ElementEntry) + element_size);
2112 GNUNET_memcpy (&ee[1], 3333 GNUNET_memcpy (&ee[1],
@@ -2129,6 +3350,21 @@ handle_union_p2p_elements (void *cls,
2129 return; 3350 return;
2130 } 3351 }
2131 3352
3353 if (GNUNET_OK !=
3354 update_message_control_flow (
3355 op->message_control_flow,
3356 MSG_CFS_RECEIVED,
3357 &ee->element_hash,
3358 ELEMENT_MESSAGE)
3359 )
3360 {
3361 LOG (GNUNET_ERROR_TYPE_ERROR,
3362 "An element has been received more than once!\n");
3363 GNUNET_break (0);
3364 fail_union_operation (op);
3365 return;
3366 }
3367
2132 LOG (GNUNET_ERROR_TYPE_DEBUG, 3368 LOG (GNUNET_ERROR_TYPE_DEBUG,
2133 "Got element (size %u, hash %s) from peer\n", 3369 "Got element (size %u, hash %s) from peer\n",
2134 (unsigned int) element_size, 3370 (unsigned int) element_size,
@@ -2217,33 +3453,25 @@ handle_union_p2p_full_element (void *cls,
2217 struct KeyEntry *ke; 3453 struct KeyEntry *ke;
2218 uint16_t element_size; 3454 uint16_t element_size;
2219 3455
2220 3456 /**
2221 3457 * Check that the message is received only in supported phase
2222 if(PHASE_EXPECT_IBF == op->phase) { 3458 */
2223 op->phase = PHASE_FULL_RECEIVING; 3459 uint8_t allowed_phases[] = {PHASE_FULL_RECEIVING, PHASE_FULL_SENDING};
2224 } 3460 if (GNUNET_OK !=
2225 3461 check_valid_phase (allowed_phases,sizeof(allowed_phases),op))
2226
2227
2228 /* Allow only receiving of full element message if in expect IBF or in PHASE_FULL_RECEIVING state */
2229 if ((PHASE_FULL_RECEIVING != op->phase) &&
2230 (PHASE_FULL_SENDING != op->phase))
2231 { 3462 {
2232 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 3463 GNUNET_break (0);
2233 "Handle full element phase is %u\n", 3464 fail_union_operation (op);
2234 (unsigned) op->phase); 3465 return;
2235 GNUNET_break_op (0);
2236 fail_union_operation (op);
2237 return;
2238 } 3466 }
2239 3467
2240
2241
2242 element_size = ntohs (emsg->header.size) 3468 element_size = ntohs (emsg->header.size)
2243 - sizeof(struct GNUNET_SETU_ElementMessage); 3469 - sizeof(struct GNUNET_SETU_ElementMessage);
2244 3470
2245 perf_rtt.element_full.received += 1; 3471#if MEASURE_PERFORMANCE
2246 perf_rtt.element_full.received_var_bytes += element_size; 3472 perf_store.element_full.received += 1;
3473 perf_store.element_full.received_var_bytes += element_size;
3474#endif
2247 3475
2248 ee = GNUNET_malloc (sizeof(struct ElementEntry) + element_size); 3476 ee = GNUNET_malloc (sizeof(struct ElementEntry) + element_size);
2249 GNUNET_memcpy (&ee[1], &emsg[1], element_size); 3477 GNUNET_memcpy (&ee[1], &emsg[1], element_size);
@@ -2268,17 +3496,15 @@ handle_union_p2p_full_element (void *cls,
2268 GNUNET_NO); 3496 GNUNET_NO);
2269 3497
2270 op->received_total++; 3498 op->received_total++;
2271
2272 ke = op_get_element (op, 3499 ke = op_get_element (op,
2273 &ee->element_hash); 3500 &ee->element_hash);
2274 if (NULL != ke) 3501 if (NULL != ke)
2275 { 3502 {
2276 /* Got repeated element. Should not happen since
2277 * we track demands. */
2278 GNUNET_STATISTICS_update (_GSS_statistics, 3503 GNUNET_STATISTICS_update (_GSS_statistics,
2279 "# repeated elements", 3504 "# repeated elements",
2280 1, 3505 1,
2281 GNUNET_NO); 3506 GNUNET_NO);
3507 full_sync_plausibility_check (op);
2282 ke->received = GNUNET_YES; 3508 ke->received = GNUNET_YES;
2283 GNUNET_free (ee); 3509 GNUNET_free (ee);
2284 } 3510 }
@@ -2294,15 +3520,15 @@ handle_union_p2p_full_element (void *cls,
2294 GNUNET_SETU_STATUS_ADD_LOCAL); 3520 GNUNET_SETU_STATUS_ADD_LOCAL);
2295 } 3521 }
2296 3522
3523
2297 if ((GNUNET_YES == op->byzantine) && 3524 if ((GNUNET_YES == op->byzantine) &&
2298 (op->received_total > 384 + op->received_fresh * 4) && 3525 (op->received_total > op->remote_element_count) )
2299 (op->received_fresh < op->received_total / 6))
2300 { 3526 {
2301 /* The other peer gave us lots of old elements, there's something wrong. */ 3527 /* The other peer gave us lots of old elements, there's something wrong. */
2302 LOG (GNUNET_ERROR_TYPE_ERROR, 3528 LOG (GNUNET_ERROR_TYPE_ERROR,
2303 "Other peer sent only %llu/%llu fresh elements, failing operation\n", 3529 "Other peer sent %llu elements while pretending to have %llu elements, failing operation\n",
2304 (unsigned long long) op->received_fresh, 3530 (unsigned long long) op->received_total,
2305 (unsigned long long) op->received_total); 3531 (unsigned long long) op->remote_element_count);
2306 GNUNET_break_op (0); 3532 GNUNET_break_op (0);
2307 fail_union_operation (op); 3533 fail_union_operation (op);
2308 return; 3534 return;
@@ -2356,18 +3582,50 @@ handle_union_p2p_inquiry (void *cls,
2356 const struct IBF_Key *ibf_key; 3582 const struct IBF_Key *ibf_key;
2357 unsigned int num_keys; 3583 unsigned int num_keys;
2358 3584
2359 perf_rtt.inquery.received += 1; 3585 /**
2360 perf_rtt.inquery.received_var_bytes += (ntohs (msg->header.size) - sizeof(struct InquiryMessage)); 3586 * Check that the message is received only in supported phase
3587 */
3588 uint8_t allowed_phases[] = {PHASE_ACTIVE_DECODING, PHASE_PASSIVE_DECODING};
3589 if (GNUNET_OK !=
3590 check_valid_phase (allowed_phases,sizeof(allowed_phases),op))
3591 {
3592 GNUNET_break (0);
3593 fail_union_operation (op);
3594 return;
3595 }
3596
3597#if MEASURE_PERFORMANCE
3598 perf_store.inquery.received += 1;
3599 perf_store.inquery.received_var_bytes += (ntohs (msg->header.size)
3600 - sizeof(struct InquiryMessage));
3601#endif
2361 3602
2362 LOG (GNUNET_ERROR_TYPE_DEBUG, 3603 LOG (GNUNET_ERROR_TYPE_DEBUG,
2363 "Received union inquiry\n"); 3604 "Received union inquiry\n");
2364 num_keys = (ntohs (msg->header.size) - sizeof(struct InquiryMessage)) 3605 num_keys = (ntohs (msg->header.size) - sizeof(struct InquiryMessage))
2365 / sizeof(struct IBF_Key); 3606 / sizeof(struct IBF_Key);
2366 ibf_key = (const struct IBF_Key *) &msg[1]; 3607 ibf_key = (const struct IBF_Key *) &msg[1];
3608
3609 /** Add received inquiries to hashmap for flow control **/
3610 struct GNUNET_HashContext *hashed_key_context =
3611 GNUNET_CRYPTO_hash_context_start ();
3612 struct GNUNET_HashCode *hashed_key = (struct GNUNET_HashCode*) GNUNET_malloc (
3613 sizeof(struct GNUNET_HashCode));;
3614 enum MESSAGE_CONTROL_FLOW_STATE mcfs = MSG_CFS_RECEIVED;
3615 GNUNET_CRYPTO_hash_context_read (hashed_key_context,
3616 &ibf_key,
3617 sizeof(struct IBF_Key));
3618 GNUNET_CRYPTO_hash_context_finish (hashed_key_context,
3619 hashed_key);
3620 GNUNET_CONTAINER_multihashmap_put (op->inquiries_sent,
3621 hashed_key,
3622 &mcfs,
3623 GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE
3624 );
3625
2367 while (0 != num_keys--) 3626 while (0 != num_keys--)
2368 { 3627 {
2369 struct IBF_Key unsalted_key; 3628 struct IBF_Key unsalted_key;
2370
2371 unsalt_key (ibf_key, 3629 unsalt_key (ibf_key,
2372 ntohl (msg->salt), 3630 ntohl (msg->salt),
2373 &unsalted_key); 3631 &unsalted_key);
@@ -2402,7 +3660,9 @@ send_missing_full_elements_iter (void *cls,
2402 3660
2403 if (GNUNET_YES == ke->received) 3661 if (GNUNET_YES == ke->received)
2404 return GNUNET_YES; 3662 return GNUNET_YES;
2405 perf_rtt.element_full.received += 1; 3663#if MEASURE_PERFORMANCE
3664 perf_store.element_full.received += 1;
3665#endif
2406 ev = GNUNET_MQ_msg_extra (emsg, 3666 ev = GNUNET_MQ_msg_extra (emsg,
2407 ee->element.size, 3667 ee->element.size,
2408 GNUNET_MESSAGE_TYPE_SETU_P2P_FULL_ELEMENT); 3668 GNUNET_MESSAGE_TYPE_SETU_P2P_FULL_ELEMENT);
@@ -2422,18 +3682,84 @@ send_missing_full_elements_iter (void *cls,
2422 * @param cls closure, a set union operation 3682 * @param cls closure, a set union operation
2423 * @param mh the demand message 3683 * @param mh the demand message
2424 */ 3684 */
3685static int
3686check_union_p2p_request_full (void *cls,
3687 const struct TransmitFullMessage *mh)
3688{
3689 return GNUNET_OK;
3690}
3691
3692
2425static void 3693static void
2426handle_union_p2p_request_full (void *cls, 3694handle_union_p2p_request_full (void *cls,
2427 const struct GNUNET_MessageHeader *mh) 3695 const struct TransmitFullMessage *msg)
2428{ 3696{
2429 struct Operation *op = cls; 3697 struct Operation *op = cls;
2430 3698
2431 perf_rtt.request_full.received += 1; 3699 /**
3700 * Check that the message is received only in supported phase
3701 */
3702 uint8_t allowed_phases[] = {PHASE_EXPECT_IBF};
3703 if (GNUNET_OK !=
3704 check_valid_phase (allowed_phases,sizeof(allowed_phases),op))
3705 {
3706 GNUNET_break (0);
3707 fail_union_operation (op);
3708 return;
3709 }
2432 3710
2433 LOG (GNUNET_ERROR_TYPE_DEBUG, 3711 op->remote_element_count = ntohl (msg->remote_set_size);
3712 op->remote_set_diff = ntohl (msg->remote_set_difference);
3713 op->local_set_diff = ntohl (msg->local_set_difference);
3714
3715
3716 if (check_byzantine_bounds (op) != GNUNET_OK)
3717 {
3718 LOG (GNUNET_ERROR_TYPE_ERROR,
3719 "PROTOCOL VIOLATION: Parameters transmitted from other peer do not satisfie byzantine "
3720 "criteria\n");
3721 GNUNET_break_op (0);
3722 fail_union_operation (op);
3723 return;
3724 }
3725
3726#if MEASURE_PERFORMANCE
3727 perf_store.request_full.received += 1;
3728#endif
3729
3730 LOG (GNUNET_ERROR_TYPE_DEBUG,
2434 "Received request for full set transmission\n"); 3731 "Received request for full set transmission\n");
2435 if (PHASE_EXPECT_IBF != op->phase) 3732
3733 /** Calculate avg element size if not initial sync **/
3734 op->local_element_count = GNUNET_CONTAINER_multihashmap_size (
3735 op->set->content->elements);
3736 uint64_t avg_element_size = 0;
3737 if (0 < op->local_element_count)
3738 {
3739 op->total_elements_size_local = 0;
3740 GNUNET_CONTAINER_multihashmap_iterate (op->set->content->elements,
3741 &
3742 determinate_avg_element_size_iterator,
3743 op);
3744 avg_element_size = op->total_elements_size_local / op->local_element_count;
3745 }
3746
3747 int mode_of_operation = estimate_best_mode_of_operation (avg_element_size,
3748 op->
3749 remote_element_count,
3750 op->
3751 local_element_count,
3752 op->local_set_diff,
3753 op->remote_set_diff,
3754 op->
3755 rtt_bandwidth_tradeoff,
3756 op->
3757 ibf_bucket_number_factor);
3758 if (FULL_SYNC_REMOTE_SENDING_FIRST != mode_of_operation)
2436 { 3759 {
3760 LOG (GNUNET_ERROR_TYPE_ERROR,
3761 "PROTOCOL VIOLATION: Remote peer choose to request the full set first but correct mode would have been"
3762 " : %d\n", mode_of_operation);
2437 GNUNET_break_op (0); 3763 GNUNET_break_op (0);
2438 fail_union_operation (op); 3764 fail_union_operation (op);
2439 return; 3765 return;
@@ -2458,7 +3784,21 @@ handle_union_p2p_full_done (void *cls,
2458{ 3784{
2459 struct Operation *op = cls; 3785 struct Operation *op = cls;
2460 3786
2461 perf_rtt.full_done.received += 1; 3787 /**
3788 * Check that the message is received only in supported phase
3789 */
3790 uint8_t allowed_phases[] = {PHASE_FULL_SENDING, PHASE_FULL_RECEIVING};
3791 if (GNUNET_OK !=
3792 check_valid_phase (allowed_phases,sizeof(allowed_phases),op))
3793 {
3794 GNUNET_break (0);
3795 fail_union_operation (op);
3796 return;
3797 }
3798
3799#if MEASURE_PERFORMANCE
3800 perf_store.full_done.received += 1;
3801#endif
2462 3802
2463 switch (op->phase) 3803 switch (op->phase)
2464 { 3804 {
@@ -2466,6 +3806,19 @@ handle_union_p2p_full_done (void *cls,
2466 { 3806 {
2467 struct GNUNET_MQ_Envelope *ev; 3807 struct GNUNET_MQ_Envelope *ev;
2468 3808
3809 if ((GNUNET_YES == op->byzantine) &&
3810 (op->received_total != op->remote_element_count) )
3811 {
3812 /* The other peer gave not enough elements before sending full done, there's something wrong. */
3813 LOG (GNUNET_ERROR_TYPE_ERROR,
3814 "Other peer sent only %llu/%llu fresh elements, failing operation\n",
3815 (unsigned long long) op->received_total,
3816 (unsigned long long) op->remote_element_count);
3817 GNUNET_break_op (0);
3818 fail_union_operation (op);
3819 return;
3820 }
3821
2469 LOG (GNUNET_ERROR_TYPE_DEBUG, 3822 LOG (GNUNET_ERROR_TYPE_DEBUG,
2470 "got FULL DONE, sending elements that other peer is missing\n"); 3823 "got FULL DONE, sending elements that other peer is missing\n");
2471 3824
@@ -2473,7 +3826,9 @@ handle_union_p2p_full_done (void *cls,
2473 GNUNET_CONTAINER_multihashmap32_iterate (op->key_to_element, 3826 GNUNET_CONTAINER_multihashmap32_iterate (op->key_to_element,
2474 &send_missing_full_elements_iter, 3827 &send_missing_full_elements_iter,
2475 op); 3828 op);
2476 perf_rtt.full_done.sent += 1; 3829#if MEASURE_PERFORMANCE
3830 perf_store.full_done.sent += 1;
3831#endif
2477 ev = GNUNET_MQ_msg_header (GNUNET_MESSAGE_TYPE_SETU_P2P_FULL_DONE); 3832 ev = GNUNET_MQ_msg_header (GNUNET_MESSAGE_TYPE_SETU_P2P_FULL_DONE);
2478 GNUNET_MQ_send (op->mq, 3833 GNUNET_MQ_send (op->mq,
2479 ev); 3834 ev);
@@ -2552,8 +3907,23 @@ handle_union_p2p_demand (void *cls,
2552 unsigned int num_hashes; 3907 unsigned int num_hashes;
2553 struct GNUNET_MQ_Envelope *ev; 3908 struct GNUNET_MQ_Envelope *ev;
2554 3909
2555 perf_rtt.demand.received += 1; 3910 /**
2556 perf_rtt.demand.received_var_bytes += (ntohs (mh->size) - sizeof(struct GNUNET_MessageHeader)); 3911 * Check that the message is received only in supported phase
3912 */
3913 uint8_t allowed_phases[] = {PHASE_ACTIVE_DECODING, PHASE_PASSIVE_DECODING,
3914 PHASE_FINISH_WAITING};
3915 if (GNUNET_OK !=
3916 check_valid_phase (allowed_phases,sizeof(allowed_phases),op))
3917 {
3918 GNUNET_break (0);
3919 fail_union_operation (op);
3920 return;
3921 }
3922#if MEASURE_PERFORMANCE
3923 perf_store.demand.received += 1;
3924 perf_store.demand.received_var_bytes += (ntohs (mh->size) - sizeof(struct
3925 GNUNET_MessageHeader));
3926#endif
2557 3927
2558 num_hashes = (ntohs (mh->size) - sizeof(struct GNUNET_MessageHeader)) 3928 num_hashes = (ntohs (mh->size) - sizeof(struct GNUNET_MessageHeader))
2559 / sizeof(struct GNUNET_HashCode); 3929 / sizeof(struct GNUNET_HashCode);
@@ -2570,6 +3940,39 @@ handle_union_p2p_demand (void *cls,
2570 fail_union_operation (op); 3940 fail_union_operation (op);
2571 return; 3941 return;
2572 } 3942 }
3943
3944 /* Save send demand message for message control */
3945 if (GNUNET_YES !=
3946 update_message_control_flow (
3947 op->message_control_flow,
3948 MSG_CFS_RECEIVED,
3949 &ee->element_hash,
3950 DEMAND_MESSAGE)
3951 )
3952 {
3953 LOG (GNUNET_ERROR_TYPE_ERROR,
3954 "Double demand message received found!\n");
3955 GNUNET_break (0);
3956 fail_union_operation (op);
3957 return;
3958 }
3959 ;
3960
3961 /* Mark element to be expected to received */
3962 if (GNUNET_YES !=
3963 update_message_control_flow (
3964 op->message_control_flow,
3965 MSG_CFS_SENT,
3966 &ee->element_hash,
3967 ELEMENT_MESSAGE)
3968 )
3969 {
3970 LOG (GNUNET_ERROR_TYPE_ERROR,
3971 "Double element message sent found!\n");
3972 GNUNET_break (0);
3973 fail_union_operation (op);
3974 return;
3975 }
2573 if (GNUNET_NO == _GSS_is_element_of_operation (ee, op)) 3976 if (GNUNET_NO == _GSS_is_element_of_operation (ee, op))
2574 { 3977 {
2575 /* Probably confused lazily copied sets. */ 3978 /* Probably confused lazily copied sets. */
@@ -2577,8 +3980,10 @@ handle_union_p2p_demand (void *cls,
2577 fail_union_operation (op); 3980 fail_union_operation (op);
2578 return; 3981 return;
2579 } 3982 }
2580 perf_rtt.element.sent += 1; 3983#if MEASURE_PERFORMANCE
2581 perf_rtt.element.sent_var_bytes += ee->element.size; 3984 perf_store.element.sent += 1;
3985 perf_store.element.sent_var_bytes += ee->element.size;
3986#endif
2582 ev = GNUNET_MQ_msg_extra (emsg, 3987 ev = GNUNET_MQ_msg_extra (emsg,
2583 ee->element.size, 3988 ee->element.size,
2584 GNUNET_MESSAGE_TYPE_SETU_P2P_ELEMENTS); 3989 GNUNET_MESSAGE_TYPE_SETU_P2P_ELEMENTS);
@@ -2600,9 +4005,10 @@ handle_union_p2p_demand (void *cls,
2600 if (op->symmetric) 4005 if (op->symmetric)
2601 send_client_element (op, 4006 send_client_element (op,
2602 &ee->element, 4007 &ee->element,
2603 GNUNET_SET_STATUS_ADD_REMOTE); 4008 GNUNET_SETU_STATUS_ADD_REMOTE);
2604 } 4009 }
2605 GNUNET_CADET_receive_done (op->channel); 4010 GNUNET_CADET_receive_done (op->channel);
4011 maybe_finish (op);
2606} 4012}
2607 4013
2608 4014
@@ -2653,9 +4059,23 @@ handle_union_p2p_offer (void *cls,
2653 struct Operation *op = cls; 4059 struct Operation *op = cls;
2654 const struct GNUNET_HashCode *hash; 4060 const struct GNUNET_HashCode *hash;
2655 unsigned int num_hashes; 4061 unsigned int num_hashes;
4062 /**
4063 * Check that the message is received only in supported phase
4064 */
4065 uint8_t allowed_phases[] = {PHASE_ACTIVE_DECODING, PHASE_PASSIVE_DECODING};
4066 if (GNUNET_OK !=
4067 check_valid_phase (allowed_phases,sizeof(allowed_phases),op))
4068 {
4069 GNUNET_break (0);
4070 fail_union_operation (op);
4071 return;
4072 }
2656 4073
2657 perf_rtt.offer.received += 1; 4074#if MEASURE_PERFORMANCE
2658 perf_rtt.offer.received_var_bytes += (ntohs (mh->size) - sizeof(struct GNUNET_MessageHeader)); 4075 perf_store.offer.received += 1;
4076 perf_store.offer.received_var_bytes += (ntohs (mh->size) - sizeof(struct
4077 GNUNET_MessageHeader));
4078#endif
2659 4079
2660 num_hashes = (ntohs (mh->size) - sizeof(struct GNUNET_MessageHeader)) 4080 num_hashes = (ntohs (mh->size) - sizeof(struct GNUNET_MessageHeader))
2661 / sizeof(struct GNUNET_HashCode); 4081 / sizeof(struct GNUNET_HashCode);
@@ -2693,8 +4113,53 @@ handle_union_p2p_offer (void *cls,
2693 "[OP %p] Requesting element (hash %s)\n", 4113 "[OP %p] Requesting element (hash %s)\n",
2694 op, GNUNET_h2s (hash)); 4114 op, GNUNET_h2s (hash));
2695 4115
2696 perf_rtt.demand.sent += 1; 4116#if MEASURE_PERFORMANCE
2697 perf_rtt.demand.sent_var_bytes += sizeof(struct GNUNET_HashCode); 4117 perf_store.demand.sent += 1;
4118 perf_store.demand.sent_var_bytes += sizeof(struct GNUNET_HashCode);
4119#endif
4120 /* Save send demand message for message control */
4121 if (GNUNET_YES !=
4122 update_message_control_flow (
4123 op->message_control_flow,
4124 MSG_CFS_SENT,
4125 hash,
4126 DEMAND_MESSAGE))
4127 {
4128 LOG (GNUNET_ERROR_TYPE_ERROR,
4129 "Double demand message sent found!\n");
4130 GNUNET_break (0);
4131 fail_union_operation (op);
4132 return;
4133 }
4134
4135 /* Mark offer as received received */
4136 if (GNUNET_YES !=
4137 update_message_control_flow (
4138 op->message_control_flow,
4139 MSG_CFS_RECEIVED,
4140 hash,
4141 OFFER_MESSAGE))
4142 {
4143 LOG (GNUNET_ERROR_TYPE_ERROR,
4144 "Double offer message received found!\n");
4145 GNUNET_break (0);
4146 fail_union_operation (op);
4147 return;
4148 }
4149 /* Mark element to be expected to received */
4150 if (GNUNET_YES !=
4151 update_message_control_flow (
4152 op->message_control_flow,
4153 MSG_CFS_EXPECTED,
4154 hash,
4155 ELEMENT_MESSAGE))
4156 {
4157 LOG (GNUNET_ERROR_TYPE_ERROR,
4158 "Element already expected!\n");
4159 GNUNET_break (0);
4160 fail_union_operation (op);
4161 return;
4162 }
2698 ev = GNUNET_MQ_msg_header_extra (demands, 4163 ev = GNUNET_MQ_msg_header_extra (demands,
2699 sizeof(struct GNUNET_HashCode), 4164 sizeof(struct GNUNET_HashCode),
2700 GNUNET_MESSAGE_TYPE_SETU_P2P_DEMAND); 4165 GNUNET_MESSAGE_TYPE_SETU_P2P_DEMAND);
@@ -2719,7 +4184,30 @@ handle_union_p2p_done (void *cls,
2719{ 4184{
2720 struct Operation *op = cls; 4185 struct Operation *op = cls;
2721 4186
2722 perf_rtt.done.received += 1; 4187 /**
4188 * Check that the message is received only in supported phase
4189 */
4190 uint8_t allowed_phases[] = {PHASE_ACTIVE_DECODING, PHASE_PASSIVE_DECODING};
4191 if (GNUNET_OK !=
4192 check_valid_phase (allowed_phases,sizeof(allowed_phases),op))
4193 {
4194 GNUNET_break (0);
4195 fail_union_operation (op);
4196 return;
4197 }
4198
4199 if (op->active_passive_switch_required)
4200 {
4201 LOG (GNUNET_ERROR_TYPE_ERROR,
4202 "PROTOCOL VIOLATION: Received done but role change is necessary\n");
4203 GNUNET_break (0);
4204 fail_union_operation (op);
4205 return;
4206 }
4207
4208#if MEASURE_PERFORMANCE
4209 perf_store.done.received += 1;
4210#endif
2723 switch (op->phase) 4211 switch (op->phase)
2724 { 4212 {
2725 case PHASE_PASSIVE_DECODING: 4213 case PHASE_PASSIVE_DECODING:
@@ -2728,26 +4216,26 @@ handle_union_p2p_done (void *cls,
2728 LOG (GNUNET_ERROR_TYPE_DEBUG, 4216 LOG (GNUNET_ERROR_TYPE_DEBUG,
2729 "got DONE (as passive partner), waiting for our demands to be satisfied\n"); 4217 "got DONE (as passive partner), waiting for our demands to be satisfied\n");
2730 /* The active peer is done sending offers 4218 /* The active peer is done sending offers
2731 * and inquiries. This means that all 4219 * and inquiries. This means that all
2732 * our responses to that (demands and offers) 4220 * our responses to that (demands and offers)
2733 * must be in flight (queued or in mesh). 4221 * must be in flight (queued or in mesh).
2734 * 4222 *
2735 * We should notify the active peer once 4223 * We should notify the active peer once
2736 * all our demands are satisfied, so that the active 4224 * all our demands are satisfied, so that the active
2737 * peer can quit if we gave it everything. 4225 * peer can quit if we gave it everything.
2738 */GNUNET_CADET_receive_done (op->channel); 4226 */GNUNET_CADET_receive_done (op->channel);
2739 maybe_finish (op); 4227 maybe_finish (op);
2740 return; 4228 return;
2741 case PHASE_ACTIVE_DECODING: 4229 case PHASE_ACTIVE_DECODING:
2742 LOG (GNUNET_ERROR_TYPE_DEBUG, 4230 LOG (GNUNET_ERROR_TYPE_DEBUG,
2743 "got DONE (as active partner), waiting to finish\n"); 4231 "got DONE (as active partner), waiting to finish\n");
2744 /* All demands of the other peer are satisfied, 4232 /* All demands of the other peer are satisfied,
2745 * and we processed all offers, thus we know 4233 * and we processed all offers, thus we know
2746 * exactly what our demands must be. 4234 * exactly what our demands must be.
2747 * 4235 *
2748 * We'll close the channel 4236 * We'll close the channel
2749 * to the other peer once our demands are met. 4237 * to the other peer once our demands are met.
2750 */op->phase = PHASE_FINISH_CLOSING; 4238 */op->phase = PHASE_FINISH_CLOSING;
2751 GNUNET_CADET_receive_done (op->channel); 4239 GNUNET_CADET_receive_done (op->channel);
2752 maybe_finish (op); 4240 maybe_finish (op);
2753 return; 4241 return;
@@ -2769,7 +4257,9 @@ static void
2769handle_union_p2p_over (void *cls, 4257handle_union_p2p_over (void *cls,
2770 const struct GNUNET_MessageHeader *mh) 4258 const struct GNUNET_MessageHeader *mh)
2771{ 4259{
2772 perf_rtt.over.received += 1; 4260#if MEASURE_PERFORMANCE
4261 perf_store.over.received += 1;
4262#endif
2773 send_client_done (cls); 4263 send_client_done (cls);
2774} 4264}
2775 4265
@@ -2943,7 +4433,7 @@ check_incoming_msg (void *cls,
2943 struct Listener *listener = op->listener; 4433 struct Listener *listener = op->listener;
2944 const struct GNUNET_MessageHeader *nested_context; 4434 const struct GNUNET_MessageHeader *nested_context;
2945 4435
2946 /* double operation request */ 4436 /* double operation request */
2947 if (0 != op->suggest_id) 4437 if (0 != op->suggest_id)
2948 { 4438 {
2949 GNUNET_break_op (0); 4439 GNUNET_break_op (0);
@@ -3053,10 +4543,10 @@ handle_client_create_set (void *cls,
3053 } 4543 }
3054 set = GNUNET_new (struct Set); 4544 set = GNUNET_new (struct Set);
3055 { 4545 {
3056 struct StrataEstimator *se; 4546 struct MultiStrataEstimator *se;
3057 4547
3058 se = strata_estimator_create (SE_STRATA_COUNT, 4548 se = strata_estimator_create (SE_STRATA_COUNT,
3059 SE_IBF_SIZE, 4549 SE_IBFS_TOTAL_SIZE,
3060 SE_IBF_HASH_NUM); 4550 SE_IBF_HASH_NUM);
3061 if (NULL == se) 4551 if (NULL == se)
3062 { 4552 {
@@ -3198,6 +4688,7 @@ channel_window_cb (void *cls,
3198 * @param cls client that sent the message 4688 * @param cls client that sent the message
3199 * @param msg message sent by the client 4689 * @param msg message sent by the client
3200 */ 4690 */
4691
3201static void 4692static void
3202handle_client_listen (void *cls, 4693handle_client_listen (void *cls,
3203 const struct GNUNET_SETU_ListenMessage *msg) 4694 const struct GNUNET_SETU_ListenMessage *msg)
@@ -3240,10 +4731,10 @@ handle_client_listen (void *cls,
3240 GNUNET_MESSAGE_TYPE_SETU_P2P_FULL_DONE, 4731 GNUNET_MESSAGE_TYPE_SETU_P2P_FULL_DONE,
3241 struct GNUNET_MessageHeader, 4732 struct GNUNET_MessageHeader,
3242 NULL), 4733 NULL),
3243 GNUNET_MQ_hd_fixed_size (union_p2p_request_full, 4734 GNUNET_MQ_hd_var_size (union_p2p_request_full,
3244 GNUNET_MESSAGE_TYPE_SETU_P2P_REQUEST_FULL, 4735 GNUNET_MESSAGE_TYPE_SETU_P2P_REQUEST_FULL,
3245 struct GNUNET_MessageHeader, 4736 struct TransmitFullMessage,
3246 NULL), 4737 NULL),
3247 GNUNET_MQ_hd_var_size (union_p2p_strata_estimator, 4738 GNUNET_MQ_hd_var_size (union_p2p_strata_estimator,
3248 GNUNET_MESSAGE_TYPE_SETU_P2P_SE, 4739 GNUNET_MESSAGE_TYPE_SETU_P2P_SE,
3249 struct StrataEstimatorMessage, 4740 struct StrataEstimatorMessage,
@@ -3256,6 +4747,10 @@ handle_client_listen (void *cls,
3256 GNUNET_MESSAGE_TYPE_SETU_P2P_FULL_ELEMENT, 4747 GNUNET_MESSAGE_TYPE_SETU_P2P_FULL_ELEMENT,
3257 struct GNUNET_SETU_ElementMessage, 4748 struct GNUNET_SETU_ElementMessage,
3258 NULL), 4749 NULL),
4750 GNUNET_MQ_hd_var_size (union_p2p_send_full,
4751 GNUNET_MESSAGE_TYPE_SETU_P2P_SEND_FULL,
4752 struct TransmitFullMessage,
4753 NULL),
3259 GNUNET_MQ_handler_end () 4754 GNUNET_MQ_handler_end ()
3260 }; 4755 };
3261 struct Listener *listener; 4756 struct Listener *listener;
@@ -3451,6 +4946,7 @@ handle_client_evaluate (void *cls,
3451{ 4946{
3452 struct ClientState *cs = cls; 4947 struct ClientState *cs = cls;
3453 struct Operation *op = GNUNET_new (struct Operation); 4948 struct Operation *op = GNUNET_new (struct Operation);
4949
3454 const struct GNUNET_MQ_MessageHandler cadet_handlers[] = { 4950 const struct GNUNET_MQ_MessageHandler cadet_handlers[] = {
3455 GNUNET_MQ_hd_var_size (incoming_msg, 4951 GNUNET_MQ_hd_var_size (incoming_msg,
3456 GNUNET_MESSAGE_TYPE_SETU_P2P_OPERATION_REQUEST, 4952 GNUNET_MESSAGE_TYPE_SETU_P2P_OPERATION_REQUEST,
@@ -3488,10 +4984,10 @@ handle_client_evaluate (void *cls,
3488 GNUNET_MESSAGE_TYPE_SETU_P2P_FULL_DONE, 4984 GNUNET_MESSAGE_TYPE_SETU_P2P_FULL_DONE,
3489 struct GNUNET_MessageHeader, 4985 struct GNUNET_MessageHeader,
3490 op), 4986 op),
3491 GNUNET_MQ_hd_fixed_size (union_p2p_request_full, 4987 GNUNET_MQ_hd_var_size (union_p2p_request_full,
3492 GNUNET_MESSAGE_TYPE_SETU_P2P_REQUEST_FULL, 4988 GNUNET_MESSAGE_TYPE_SETU_P2P_REQUEST_FULL,
3493 struct GNUNET_MessageHeader, 4989 struct TransmitFullMessage,
3494 op), 4990 op),
3495 GNUNET_MQ_hd_var_size (union_p2p_strata_estimator, 4991 GNUNET_MQ_hd_var_size (union_p2p_strata_estimator,
3496 GNUNET_MESSAGE_TYPE_SETU_P2P_SE, 4992 GNUNET_MESSAGE_TYPE_SETU_P2P_SE,
3497 struct StrataEstimatorMessage, 4993 struct StrataEstimatorMessage,
@@ -3504,6 +5000,10 @@ handle_client_evaluate (void *cls,
3504 GNUNET_MESSAGE_TYPE_SETU_P2P_FULL_ELEMENT, 5000 GNUNET_MESSAGE_TYPE_SETU_P2P_FULL_ELEMENT,
3505 struct GNUNET_SETU_ElementMessage, 5001 struct GNUNET_SETU_ElementMessage,
3506 op), 5002 op),
5003 GNUNET_MQ_hd_var_size (union_p2p_send_full,
5004 GNUNET_MESSAGE_TYPE_SETU_P2P_SEND_FULL,
5005 struct TransmitFullMessage,
5006 NULL),
3507 GNUNET_MQ_handler_end () 5007 GNUNET_MQ_handler_end ()
3508 }; 5008 };
3509 struct Set *set; 5009 struct Set *set;
@@ -3525,8 +5025,23 @@ handle_client_evaluate (void *cls,
3525 op->force_full = msg->force_full; 5025 op->force_full = msg->force_full;
3526 op->force_delta = msg->force_delta; 5026 op->force_delta = msg->force_delta;
3527 op->symmetric = msg->symmetric; 5027 op->symmetric = msg->symmetric;
5028 op->rtt_bandwidth_tradeoff = msg->bandwidth_latency_tradeoff;
5029 op->ibf_bucket_number_factor = msg->ibf_bucket_number_factor;
5030 op->ibf_number_buckets_per_element = msg->ibf_number_of_buckets_per_element;
5031 op->byzantine_upper_bound = msg->byzantine_upper_bond;
5032 op->active_passive_switch_required = false;
3528 context = GNUNET_MQ_extract_nested_mh (msg); 5033 context = GNUNET_MQ_extract_nested_mh (msg);
3529 5034
5035 /* create hashmap for message control */
5036 op->message_control_flow = GNUNET_CONTAINER_multihashmap_create (32,
5037 GNUNET_NO);
5038 op->inquiries_sent = GNUNET_CONTAINER_multihashmap_create (32,GNUNET_NO);
5039
5040#if MEASURE_PERFORMANCE
5041 /* load config */
5042 load_config (op);
5043#endif
5044
3530 /* Advance generation values, so that 5045 /* Advance generation values, so that
3531 mutations won't interfer with the running operation. */ 5046 mutations won't interfer with the running operation. */
3532 op->set = set; 5047 op->set = set;
@@ -3550,7 +5065,9 @@ handle_client_evaluate (void *cls,
3550 struct GNUNET_MQ_Envelope *ev; 5065 struct GNUNET_MQ_Envelope *ev;
3551 struct OperationRequestMessage *msg; 5066 struct OperationRequestMessage *msg;
3552 5067
3553 perf_rtt.operation_request.sent += 1; 5068#if MEASURE_PERFORMANCE
5069 perf_store.operation_request.sent += 1;
5070#endif
3554 ev = GNUNET_MQ_msg_nested_mh (msg, 5071 ev = GNUNET_MQ_msg_nested_mh (msg,
3555 GNUNET_MESSAGE_TYPE_SETU_P2P_OPERATION_REQUEST, 5072 GNUNET_MESSAGE_TYPE_SETU_P2P_OPERATION_REQUEST,
3556 context); 5073 context);
@@ -3567,7 +5084,11 @@ handle_client_evaluate (void *cls,
3567 op->se = strata_estimator_dup (op->set->se); 5084 op->se = strata_estimator_dup (op->set->se);
3568 /* we started the operation, thus we have to send the operation request */ 5085 /* we started the operation, thus we have to send the operation request */
3569 op->phase = PHASE_EXPECT_SE; 5086 op->phase = PHASE_EXPECT_SE;
3570 op->salt_receive = op->salt_send = 42; // FIXME????? 5087
5088 op->salt_receive = (op->peer_site + 1) % 2;
5089 op->salt_send = op->peer_site; // FIXME?????
5090
5091
3571 LOG (GNUNET_ERROR_TYPE_DEBUG, 5092 LOG (GNUNET_ERROR_TYPE_DEBUG,
3572 "Initiating union operation evaluation\n"); 5093 "Initiating union operation evaluation\n");
3573 GNUNET_STATISTICS_update (_GSS_statistics, 5094 GNUNET_STATISTICS_update (_GSS_statistics,
@@ -3711,6 +5232,20 @@ handle_client_accept (void *cls,
3711 op->force_full = msg->force_full; 5232 op->force_full = msg->force_full;
3712 op->force_delta = msg->force_delta; 5233 op->force_delta = msg->force_delta;
3713 op->symmetric = msg->symmetric; 5234 op->symmetric = msg->symmetric;
5235 op->rtt_bandwidth_tradeoff = msg->bandwidth_latency_tradeoff;
5236 op->ibf_bucket_number_factor = msg->ibf_bucket_number_factor;
5237 op->ibf_number_buckets_per_element = msg->ibf_number_of_buckets_per_element;
5238 op->byzantine_upper_bound = msg->byzantine_upper_bond;
5239 op->active_passive_switch_required = false;
5240 /* create hashmap for message control */
5241 op->message_control_flow = GNUNET_CONTAINER_multihashmap_create (32,
5242 GNUNET_NO);
5243 op->inquiries_sent = GNUNET_CONTAINER_multihashmap_create (32,GNUNET_NO);
5244
5245#if MEASURE_PERFORMANCE
5246 /* load config */
5247 load_config (op);
5248#endif
3714 5249
3715 /* Advance generation values, so that future mutations do not 5250 /* Advance generation values, so that future mutations do not
3716 interfer with the running operation. */ 5251 interfer with the running operation. */
@@ -3729,7 +5264,7 @@ handle_client_accept (void *cls,
3729 1, 5264 1,
3730 GNUNET_NO); 5265 GNUNET_NO);
3731 { 5266 {
3732 const struct StrataEstimator *se; 5267 struct MultiStrataEstimator *se;
3733 struct GNUNET_MQ_Envelope *ev; 5268 struct GNUNET_MQ_Envelope *ev;
3734 struct StrataEstimatorMessage *strata_msg; 5269 struct StrataEstimatorMessage *strata_msg;
3735 char *buf; 5270 char *buf;
@@ -3739,20 +5274,40 @@ handle_client_accept (void *cls,
3739 op->se = strata_estimator_dup (op->set->se); 5274 op->se = strata_estimator_dup (op->set->se);
3740 op->demanded_hashes = GNUNET_CONTAINER_multihashmap_create (32, 5275 op->demanded_hashes = GNUNET_CONTAINER_multihashmap_create (32,
3741 GNUNET_NO); 5276 GNUNET_NO);
3742 op->salt_receive = op->salt_send = 42; // FIXME????? 5277 op->salt_receive = (op->peer_site + 1) % 2;
5278 op->salt_send = op->peer_site; // FIXME?????
3743 initialize_key_to_element (op); 5279 initialize_key_to_element (op);
3744 op->initial_size = GNUNET_CONTAINER_multihashmap32_size ( 5280 op->initial_size = GNUNET_CONTAINER_multihashmap32_size (
3745 op->key_to_element); 5281 op->key_to_element);
3746 5282
3747 /* kick off the operation */ 5283 /* kick off the operation */
3748 se = op->se; 5284 se = op->se;
3749 buf = GNUNET_malloc (se->strata_count * IBF_BUCKET_SIZE * se->ibf_size); 5285
5286 uint8_t se_count = 1;
5287 if (op->initial_size > 0)
5288 {
5289 op->total_elements_size_local = 0;
5290 GNUNET_CONTAINER_multihashmap_iterate (op->set->content->elements,
5291 &
5292 determinate_avg_element_size_iterator,
5293 op);
5294 se_count = determine_strata_count (
5295 op->total_elements_size_local / op->initial_size,
5296 op->initial_size);
5297 }
5298 buf = GNUNET_malloc (se->stratas[0]->strata_count * IBF_BUCKET_SIZE
5299 * ((SE_IBFS_TOTAL_SIZE / 8) * se_count));
3750 len = strata_estimator_write (se, 5300 len = strata_estimator_write (se,
5301 SE_IBFS_TOTAL_SIZE,
5302 se_count,
3751 buf); 5303 buf);
3752 perf_rtt.se.sent += 1; 5304#if MEASURE_PERFORMANCE
3753 perf_rtt.se.sent_var_bytes += len; 5305 perf_store.se.sent += 1;
5306 perf_store.se.sent_var_bytes += len;
5307#endif
3754 5308
3755 if (len < se->strata_count * IBF_BUCKET_SIZE * se->ibf_size) 5309 if (len < se->stratas[0]->strata_count * IBF_BUCKET_SIZE
5310 * SE_IBFS_TOTAL_SIZE)
3756 type = GNUNET_MESSAGE_TYPE_SETU_P2P_SEC; 5311 type = GNUNET_MESSAGE_TYPE_SETU_P2P_SEC;
3757 else 5312 else
3758 type = GNUNET_MESSAGE_TYPE_SETU_P2P_SE; 5313 type = GNUNET_MESSAGE_TYPE_SETU_P2P_SE;
@@ -3766,6 +5321,7 @@ handle_client_accept (void *cls,
3766 strata_msg->set_size 5321 strata_msg->set_size
3767 = GNUNET_htonll (GNUNET_CONTAINER_multihashmap_size ( 5322 = GNUNET_htonll (GNUNET_CONTAINER_multihashmap_size (
3768 op->set->content->elements)); 5323 op->set->content->elements));
5324 strata_msg->se_count = se_count;
3769 GNUNET_MQ_send (op->mq, 5325 GNUNET_MQ_send (op->mq,
3770 ev); 5326 ev);
3771 op->phase = PHASE_EXPECT_IBF; 5327 op->phase = PHASE_EXPECT_IBF;
@@ -3800,8 +5356,9 @@ shutdown_task (void *cls)
3800 GNUNET_YES); 5356 GNUNET_YES);
3801 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 5357 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
3802 "handled shutdown request\n"); 5358 "handled shutdown request\n");
3803 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 5359#if MEASURE_PERFORMANCE
3804 "RTT:%f\n", calculate_perf_rtt()); 5360 calculate_perf_store ();
5361#endif
3805} 5362}
3806 5363
3807 5364
diff --git a/src/setu/gnunet-service-setu_protocol.h b/src/setu/gnunet-service-setu_protocol.h
index a2803ee47..c2a166e60 100644
--- a/src/setu/gnunet-service-setu_protocol.h
+++ b/src/setu/gnunet-service-setu_protocol.h
@@ -40,11 +40,6 @@ struct OperationRequestMessage
40 struct GNUNET_MessageHeader header; 40 struct GNUNET_MessageHeader header;
41 41
42 /** 42 /**
43 * Operation to request, values from `enum GNUNET_SET_OperationType`
44 */
45 uint32_t operation GNUNET_PACKED;
46
47 /**
48 * For Intersection: my element count 43 * For Intersection: my element count
49 */ 44 */
50 uint32_t element_count GNUNET_PACKED; 45 uint32_t element_count GNUNET_PACKED;
@@ -72,20 +67,9 @@ struct IBFMessage
72 struct GNUNET_MessageHeader header; 67 struct GNUNET_MessageHeader header;
73 68
74 /** 69 /**
75 * Order of the whole ibf, where 70 * Size of the whole ibf (number of buckets)
76 * num_buckets = 2^order
77 */
78 uint8_t order;
79
80 /**
81 * Padding, must be 0.
82 */ 71 */
83 uint8_t reserved1; 72 uint32_t ibf_size;
84
85 /**
86 * Padding, must be 0.
87 */
88 uint16_t reserved2 GNUNET_PACKED;
89 73
90 /** 74 /**
91 * Offset of the strata in the rest of the message 75 * Offset of the strata in the rest of the message
@@ -95,12 +79,25 @@ struct IBFMessage
95 /** 79 /**
96 * Salt used when hashing elements for this IBF. 80 * Salt used when hashing elements for this IBF.
97 */ 81 */
98 uint32_t salt GNUNET_PACKED; 82 uint16_t salt GNUNET_PACKED;
99 83
84 /**
85 * The bit length of the counter
86 */
87 uint16_t ibf_counter_bit_length;
100 /* rest: buckets */ 88 /* rest: buckets */
101}; 89};
102 90
103 91
92/**
93estimate_best_mode_of_operation (uint64_t avg_element_size,
94uint64_t local_set_size,
95 uint64_t remote_set_size,
96uint64_t est_set_diff_remote,
97 uint64_t est_set_diff_local,)
98 **/
99
100
104struct InquiryMessage 101struct InquiryMessage
105{ 102{
106 /** 103 /**
@@ -113,11 +110,6 @@ struct InquiryMessage
113 */ 110 */
114 uint32_t salt GNUNET_PACKED; 111 uint32_t salt GNUNET_PACKED;
115 112
116 /**
117 * Reserved, set to 0.
118 */
119 uint32_t reserved GNUNET_PACKED;
120
121 /* rest: inquiry IBF keys */ 113 /* rest: inquiry IBF keys */
122}; 114};
123 115
@@ -218,9 +210,47 @@ struct StrataEstimatorMessage
218 */ 210 */
219 struct GNUNET_MessageHeader header; 211 struct GNUNET_MessageHeader header;
220 212
213 /**
214 * The number of ses transmitted
215 */
216 uint8_t se_count;
217
218 /**
219 * Size of the local set
220 */
221 uint64_t set_size; 221 uint64_t set_size;
222}; 222};
223 223
224
225/**
226 * Message which signals to other peer that we are sending full set
227 *
228 */
229struct TransmitFullMessage
230{
231 /**
232 * Type: #GNUNET_MESSAGE_TYPE_SETU_P2P_SEND_FULL
233 */
234 struct GNUNET_MessageHeader header;
235
236 /**
237 * Remote set difference calculated with strata estimator
238 */
239 uint32_t remote_set_difference;
240
241 /**
242 * Total remote set size
243 */
244 uint32_t remote_set_size;
245
246 /**
247 * Local set difference calculated with strata estimator
248 */
249 uint32_t local_set_difference;
250
251};
252
253
224GNUNET_NETWORK_STRUCT_END 254GNUNET_NETWORK_STRUCT_END
225 255
226#endif 256#endif
diff --git a/src/setu/gnunet-service-setu_strata_estimator.c b/src/setu/gnunet-service-setu_strata_estimator.c
index 7c9a4deb6..7981cc847 100644
--- a/src/setu/gnunet-service-setu_strata_estimator.c
+++ b/src/setu/gnunet-service-setu_strata_estimator.c
@@ -22,6 +22,7 @@
22 * @brief invertible bloom filter 22 * @brief invertible bloom filter
23 * @author Florian Dold 23 * @author Florian Dold
24 * @author Christian Grothoff 24 * @author Christian Grothoff
25 * @author Elias Summermatter
25 */ 26 */
26#include "platform.h" 27#include "platform.h"
27#include "gnunet_util_lib.h" 28#include "gnunet_util_lib.h"
@@ -30,6 +31,82 @@
30 31
31 32
32/** 33/**
34 * Should we try compressing the strata estimator? This will
35 * break compatibility with the 0.10.1-network.
36 */
37#define FAIL_10_1_COMPATIBILTIY 1
38
39/**
40 * Number of strata estimators in memory NOT transmitted
41 */
42
43#define MULTI_SE_BASE_COUNT 8
44
45/**
46 * The avg size of 1 se
47 * Based on the bsc thesis of Elias Summermatter (2021)
48 */
49
50#define AVG_BYTE_SIZE_SE 4221
51
52/**
53 * Calculates the optimal number of strata Estimators to send
54 * @param avg_element_size
55 * @param element_count
56 * @return
57 */
58uint8_t
59determine_strata_count (uint64_t avg_element_size, uint64_t element_count)
60{
61 uint64_t base_size = avg_element_size * element_count;
62 /* >67kb total size of elements in set */
63 if (base_size < AVG_BYTE_SIZE_SE * 16)
64 return 1;
65 /* >270kb total size of elements in set */
66 if (base_size < AVG_BYTE_SIZE_SE * 64)
67 return 2;
68 /* >1mb total size of elements in set */
69 if (base_size < AVG_BYTE_SIZE_SE * 256)
70 return 4;
71 return 8;
72}
73
74
75/**
76 * Modify an IBF key @a k_in based on the @a salt, returning a
77 * salted key in @a k_out.
78 */
79static void
80salt_key (const struct IBF_Key *k_in,
81 uint32_t salt,
82 struct IBF_Key *k_out)
83{
84 int s = (salt * 7) % 64;
85 uint64_t x = k_in->key_val;
86
87 /* rotate ibf key */
88 x = (x >> s) | (x << (64 - s));
89 k_out->key_val = x;
90}
91
92
93/**
94 * Reverse modification done in the salt_key function
95 */
96static void
97unsalt_key (const struct IBF_Key *k_in,
98 uint32_t salt,
99 struct IBF_Key *k_out)
100{
101 int s = (salt * 7) % 64;
102 uint64_t x = k_in->key_val;
103
104 x = (x << s) | (x >> (64 - s));
105 k_out->key_val = x;
106}
107
108
109/**
33 * Write the given strata estimator to the buffer. 110 * Write the given strata estimator to the buffer.
34 * 111 *
35 * @param se strata estimator to serialize 112 * @param se strata estimator to serialize
@@ -37,21 +114,33 @@
37 * @return number of bytes written to @a buf 114 * @return number of bytes written to @a buf
38 */ 115 */
39size_t 116size_t
40strata_estimator_write (const struct StrataEstimator *se, 117strata_estimator_write (struct MultiStrataEstimator *se,
118 uint16_t se_ibf_total_size,
119 uint8_t number_se_send,
41 void *buf) 120 void *buf)
42{ 121{
43 char *sbuf = buf; 122 char *sbuf = buf;
123 unsigned int i;
44 size_t osize; 124 size_t osize;
125 uint64_t sbuf_offset = 0;
126 se->size = number_se_send;
45 127
46 GNUNET_assert (NULL != se); 128 GNUNET_assert (NULL != se);
47 for (unsigned int i = 0; i < se->strata_count; i++) 129 for (uint8_t strata_ctr = 0; strata_ctr < number_se_send; strata_ctr++)
48 { 130 {
49 ibf_write_slice (se->strata[i], 131 for (i = 0; i < se->stratas[strata_ctr]->strata_count; i++)
50 0, 132 {
51 se->ibf_size, 133 ibf_write_slice (se->stratas[strata_ctr]->strata[i],
52 &sbuf[se->ibf_size * IBF_BUCKET_SIZE * i]); 134 0,
135 se->stratas[strata_ctr]->ibf_size,
136 &sbuf[sbuf_offset],
137 8);
138 sbuf_offset += se->stratas[strata_ctr]->ibf_size * IBF_BUCKET_SIZE;
139 }
53 } 140 }
54 osize = se->ibf_size * IBF_BUCKET_SIZE * se->strata_count; 141 osize = ((se_ibf_total_size / 8) * number_se_send) * IBF_BUCKET_SIZE
142 * se->stratas[0]->strata_count;
143#if FAIL_10_1_COMPATIBILTIY
55 { 144 {
56 char *cbuf; 145 char *cbuf;
57 size_t nsize; 146 size_t nsize;
@@ -62,13 +151,12 @@ strata_estimator_write (const struct StrataEstimator *se,
62 &cbuf, 151 &cbuf,
63 &nsize)) 152 &nsize))
64 { 153 {
65 GNUNET_memcpy (buf, 154 GNUNET_memcpy (buf, cbuf, nsize);
66 cbuf,
67 nsize);
68 osize = nsize; 155 osize = nsize;
69 GNUNET_free (cbuf); 156 GNUNET_free (cbuf);
70 } 157 }
71 } 158 }
159#endif
72 return osize; 160 return osize;
73} 161}
74 162
@@ -87,15 +175,19 @@ int
87strata_estimator_read (const void *buf, 175strata_estimator_read (const void *buf,
88 size_t buf_len, 176 size_t buf_len,
89 int is_compressed, 177 int is_compressed,
90 struct StrataEstimator *se) 178 uint8_t number_se_received,
179 uint16_t se_ibf_total_size,
180 struct MultiStrataEstimator *se)
91{ 181{
182 unsigned int i;
92 size_t osize; 183 size_t osize;
93 char *dbuf; 184 char *dbuf;
94 185
95 dbuf = NULL; 186 dbuf = NULL;
96 if (GNUNET_YES == is_compressed) 187 if (GNUNET_YES == is_compressed)
97 { 188 {
98 osize = se->ibf_size * IBF_BUCKET_SIZE * se->strata_count; 189 osize = ((se_ibf_total_size / 8) * number_se_received) * IBF_BUCKET_SIZE
190 * se->stratas[0]->strata_count;
99 dbuf = GNUNET_decompress (buf, 191 dbuf = GNUNET_decompress (buf,
100 buf_len, 192 buf_len,
101 osize); 193 osize);
@@ -108,18 +200,25 @@ strata_estimator_read (const void *buf,
108 buf_len = osize; 200 buf_len = osize;
109 } 201 }
110 202
111 if (buf_len != se->strata_count * se->ibf_size * IBF_BUCKET_SIZE) 203 if (buf_len != se->stratas[0]->strata_count * ((se_ibf_total_size / 8)
204 * number_se_received)
205 * IBF_BUCKET_SIZE)
112 { 206 {
113 GNUNET_break (0); /* very odd error */ 207 GNUNET_break (0); /* very odd error */
114 GNUNET_free (dbuf); 208 GNUNET_free (dbuf);
115 return GNUNET_SYSERR; 209 return GNUNET_SYSERR;
116 } 210 }
117 211
118 for (unsigned int i = 0; i < se->strata_count; i++) 212 for (uint8_t strata_ctr = 0; strata_ctr < number_se_received; strata_ctr++)
119 { 213 {
120 ibf_read_slice (buf, 0, se->ibf_size, se->strata[i]); 214 for (i = 0; i < se->stratas[strata_ctr]->strata_count; i++)
121 buf += se->ibf_size * IBF_BUCKET_SIZE; 215 {
216 ibf_read_slice (buf, 0, se->stratas[strata_ctr]->ibf_size,
217 se->stratas[strata_ctr]->strata[i], 8);
218 buf += se->stratas[strata_ctr]->ibf_size * IBF_BUCKET_SIZE;
219 }
122 } 220 }
221 se->size = number_se_received;
123 GNUNET_free (dbuf); 222 GNUNET_free (dbuf);
124 return GNUNET_OK; 223 return GNUNET_OK;
125} 224}
@@ -132,38 +231,61 @@ strata_estimator_read (const void *buf,
132 * @param key key to add 231 * @param key key to add
133 */ 232 */
134void 233void
135strata_estimator_insert (struct StrataEstimator *se, 234strata_estimator_insert (struct MultiStrataEstimator *se,
136 struct IBF_Key key) 235 struct IBF_Key key)
137{ 236{
138 uint64_t v;
139 unsigned int i;
140 237
141 v = key.key_val; 238
142 /* count trailing '1'-bits of v */ 239 /* count trailing '1'-bits of v */
143 for (i = 0; v & 1; v >>= 1, i++) 240 for (int strata_ctr = 0; strata_ctr < MULTI_SE_BASE_COUNT; strata_ctr++)
144 /* empty */; 241 {
145 ibf_insert (se->strata[i], key); 242 unsigned int i;
243 uint64_t v;
244
245 struct IBF_Key salted_key;
246 salt_key (&key,
247 strata_ctr * (64 / MULTI_SE_BASE_COUNT),
248 &salted_key);
249 v = salted_key.key_val;
250 for (i = 0; v & 1; v >>= 1, i++)
251 {
252 ibf_insert (se->stratas[strata_ctr]->strata[i], salted_key);
253 }
254 }
255 /* empty */;
256
146} 257}
147 258
148 259
149/** 260/**
150 * Remove a key from the strata estimator. 261 * Remove a key from the strata estimator. (NOT USED)
151 * 262 *
152 * @param se strata estimator to remove the key from 263 * @param se strata estimator to remove the key from
153 * @param key key to remove 264 * @param key key to remove
154 */ 265 */
155void 266void
156strata_estimator_remove (struct StrataEstimator *se, 267strata_estimator_remove (struct MultiStrataEstimator *se,
157 struct IBF_Key key) 268 struct IBF_Key key)
158{ 269{
159 uint64_t v;
160 unsigned int i;
161 270
162 v = key.key_val;
163 /* count trailing '1'-bits of v */ 271 /* count trailing '1'-bits of v */
164 for (i = 0; v & 1; v >>= 1, i++) 272 for (int strata_ctr = 0; strata_ctr < se->size; strata_ctr++)
165 /* empty */; 273 {
166 ibf_remove (se->strata[i], key); 274 uint64_t v;
275 unsigned int i;
276
277 struct IBF_Key unsalted_key;
278 unsalt_key (&key,
279 strata_ctr * (64 / MULTI_SE_BASE_COUNT),
280 &unsalted_key);
281
282 v = unsalted_key.key_val;
283 for (i = 0; v & 1; v >>= 1, i++)
284 {
285 /* empty */;
286 ibf_remove (se->stratas[strata_ctr]->strata[i], unsalted_key);
287 }
288 }
167} 289}
168 290
169 291
@@ -175,29 +297,42 @@ strata_estimator_remove (struct StrataEstimator *se,
175 * @param ibf_hashnum hashnum parameter of each ibf 297 * @param ibf_hashnum hashnum parameter of each ibf
176 * @return a freshly allocated, empty strata estimator, NULL on error 298 * @return a freshly allocated, empty strata estimator, NULL on error
177 */ 299 */
178struct StrataEstimator * 300struct MultiStrataEstimator *
179strata_estimator_create (unsigned int strata_count, 301strata_estimator_create (unsigned int strata_count,
180 uint32_t ibf_size, 302 uint32_t ibf_size,
181 uint8_t ibf_hashnum) 303 uint8_t ibf_hashnum)
182{ 304{
183 struct StrataEstimator *se; 305 struct MultiStrataEstimator *se;
184 306 unsigned int i;
185 se = GNUNET_new (struct StrataEstimator); 307 unsigned int j;
186 se->strata_count = strata_count; 308 se = GNUNET_new (struct MultiStrataEstimator);
187 se->ibf_size = ibf_size; 309
188 se->strata = GNUNET_new_array (strata_count, 310 se->size = MULTI_SE_BASE_COUNT;
189 struct InvertibleBloomFilter *); 311 se->stratas = GNUNET_new_array (MULTI_SE_BASE_COUNT,struct StrataEstimator *);
190 for (unsigned int i = 0; i < strata_count; i++) 312
313 uint8_t ibf_prime_sizes[] = {79,79,79,79,79,79,79,79};
314
315 for (uint8_t strata_ctr = 0; strata_ctr < MULTI_SE_BASE_COUNT; strata_ctr++)
191 { 316 {
192 se->strata[i] = ibf_create (ibf_size, ibf_hashnum); 317 se->stratas[strata_ctr] = GNUNET_new (struct StrataEstimator);
193 if (NULL == se->strata[i]) 318 se->stratas[strata_ctr]->strata_count = strata_count;
319 se->stratas[strata_ctr]->ibf_size = ibf_prime_sizes[strata_ctr];
320 se->stratas[strata_ctr]->strata = GNUNET_new_array (strata_count * 4,
321 struct
322 InvertibleBloomFilter *);
323 for (i = 0; i < strata_count; i++)
194 { 324 {
195 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 325 se->stratas[strata_ctr]->strata[i] = ibf_create (
196 "Failed to allocate memory for strata estimator\n"); 326 ibf_prime_sizes[strata_ctr], ibf_hashnum);
197 for (unsigned int j = 0; j < i; j++) 327 if (NULL == se->stratas[strata_ctr]->strata[i])
198 ibf_destroy (se->strata[i]); 328 {
199 GNUNET_free (se); 329 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
200 return NULL; 330 "Failed to allocate memory for strata estimator\n");
331 for (j = 0; j < i; j++)
332 ibf_destroy (se->stratas[strata_ctr]->strata[i]);
333 GNUNET_free (se);
334 return NULL;
335 }
201 } 336 }
202 } 337 }
203 return se; 338 return se;
@@ -213,46 +348,71 @@ strata_estimator_create (unsigned int strata_count,
213 * @param se2 second strata estimator 348 * @param se2 second strata estimator
214 * @return the estimated difference 349 * @return the estimated difference
215 */ 350 */
216unsigned int 351void
217strata_estimator_difference (const struct StrataEstimator *se1, 352strata_estimator_difference (const struct MultiStrataEstimator *se1,
218 const struct StrataEstimator *se2) 353 const struct MultiStrataEstimator *se2)
219{ 354{
220 unsigned int count; 355 int avg_local_diff = 0;
356 int avg_remote_diff = 0;
357 uint8_t number_of_estimators = se1->size;
221 358
222 GNUNET_assert (se1->strata_count == se2->strata_count); 359 for (uint8_t strata_ctr = 0; strata_ctr < number_of_estimators; strata_ctr++)
223 count = 0;
224 for (int i = se1->strata_count - 1; i >= 0; i--)
225 { 360 {
226 struct InvertibleBloomFilter *diff; 361 GNUNET_assert (se1->stratas[strata_ctr]->strata_count ==
227 /* number of keys decoded from the ibf */ 362 se2->stratas[strata_ctr]->strata_count);
228 363
229 /* FIXME: implement this without always allocating new IBFs */ 364
230 diff = ibf_dup (se1->strata[i]); 365 for (int i = se1->stratas[strata_ctr]->strata_count - 1; i >= 0; i--)
231 ibf_subtract (diff,
232 se2->strata[i]);
233 for (int ibf_count = 0; GNUNET_YES; ibf_count++)
234 { 366 {
235 int more; 367 struct InvertibleBloomFilter *diff;
368 /* number of keys decoded from the ibf */
236 369
237 more = ibf_decode (diff, 370 /* FIXME: implement this without always allocating new IBFs */
238 NULL, 371 diff = ibf_dup (se1->stratas[strata_ctr]->strata[i]);
239 NULL); 372 diff->local_decoded_count = 0;
240 if (GNUNET_NO == more) 373 diff->remote_decoded_count = 0;
241 { 374
242 count += ibf_count; 375 ibf_subtract (diff, se2->stratas[strata_ctr]->strata[i]);
243 break; 376
244 } 377 for (int ibf_count = 0; GNUNET_YES; ibf_count++)
245 /* Estimate if decoding fails or would not terminate */
246 if ( (GNUNET_SYSERR == more) ||
247 (ibf_count > diff->size) )
248 { 378 {
249 ibf_destroy (diff); 379 int more;
250 return count * (1 << (i + 1)); 380
381 more = ibf_decode (diff, NULL, NULL);
382 if (GNUNET_NO == more)
383 {
384 se1->stratas[strata_ctr]->strata[0]->local_decoded_count +=
385 diff->local_decoded_count;
386 se1->stratas[strata_ctr]->strata[0]->remote_decoded_count +=
387 diff->remote_decoded_count;
388 break;
389 }
390 /* Estimate if decoding fails or would not terminate */
391 if ((GNUNET_SYSERR == more) || (ibf_count > diff->size))
392 {
393 se1->stratas[strata_ctr]->strata[0]->local_decoded_count =
394 se1->stratas[strata_ctr]->strata[0]->local_decoded_count * (1 << (i
395 +
396 1));
397 se1->stratas[strata_ctr]->strata[0]->remote_decoded_count =
398 se1->stratas[strata_ctr]->strata[0]->remote_decoded_count * (1 << (i
399 +
400 1));
401 ibf_destroy (diff);
402 goto break_all_counting_loops;
403 }
251 } 404 }
405 ibf_destroy (diff);
252 } 406 }
253 ibf_destroy (diff); 407break_all_counting_loops:;
408 avg_local_diff += se1->stratas[strata_ctr]->strata[0]->local_decoded_count;
409 avg_remote_diff +=
410 se1->stratas[strata_ctr]->strata[0]->remote_decoded_count;
254 } 411 }
255 return count; 412 se1->stratas[0]->strata[0]->local_decoded_count = avg_local_diff
413 / number_of_estimators;
414 se1->stratas[0]->strata[0]->remote_decoded_count = avg_remote_diff
415 / number_of_estimators;
256} 416}
257 417
258 418
@@ -262,18 +422,28 @@ strata_estimator_difference (const struct StrataEstimator *se1,
262 * @param se the strata estimator to copy 422 * @param se the strata estimator to copy
263 * @return the copy 423 * @return the copy
264 */ 424 */
265struct StrataEstimator * 425struct MultiStrataEstimator *
266strata_estimator_dup (struct StrataEstimator *se) 426strata_estimator_dup (struct MultiStrataEstimator *se)
267{ 427{
268 struct StrataEstimator *c; 428 struct MultiStrataEstimator *c;
269 429 unsigned int i;
270 c = GNUNET_new (struct StrataEstimator); 430
271 c->strata_count = se->strata_count; 431 c = GNUNET_new (struct MultiStrataEstimator);
272 c->ibf_size = se->ibf_size; 432 c->stratas = GNUNET_new_array (MULTI_SE_BASE_COUNT,struct StrataEstimator *);
273 c->strata = GNUNET_new_array (se->strata_count, 433 for (uint8_t strata_ctr = 0; strata_ctr < MULTI_SE_BASE_COUNT; strata_ctr++)
274 struct InvertibleBloomFilter *); 434 {
275 for (unsigned int i = 0; i < se->strata_count; i++) 435 c->stratas[strata_ctr] = GNUNET_new (struct StrataEstimator);
276 c->strata[i] = ibf_dup (se->strata[i]); 436 c->stratas[strata_ctr]->strata_count =
437 se->stratas[strata_ctr]->strata_count;
438 c->stratas[strata_ctr]->ibf_size = se->stratas[strata_ctr]->ibf_size;
439 c->stratas[strata_ctr]->strata = GNUNET_new_array (
440 se->stratas[strata_ctr]->strata_count,
441 struct
442 InvertibleBloomFilter *);
443 for (i = 0; i < se->stratas[strata_ctr]->strata_count; i++)
444 c->stratas[strata_ctr]->strata[i] = ibf_dup (
445 se->stratas[strata_ctr]->strata[i]);
446 }
277 return c; 447 return c;
278} 448}
279 449
@@ -284,10 +454,14 @@ strata_estimator_dup (struct StrataEstimator *se)
284 * @param se strata estimator to destroy. 454 * @param se strata estimator to destroy.
285 */ 455 */
286void 456void
287strata_estimator_destroy (struct StrataEstimator *se) 457strata_estimator_destroy (struct MultiStrataEstimator *se)
288{ 458{
289 for (unsigned int i = 0; i < se->strata_count; i++) 459 unsigned int i;
290 ibf_destroy (se->strata[i]); 460 for (uint8_t strata_ctr = 0; strata_ctr < MULTI_SE_BASE_COUNT; strata_ctr++)
291 GNUNET_free (se->strata); 461 {
462 for (i = 0; i < se->stratas[strata_ctr]->strata_count; i++)
463 ibf_destroy (se->stratas[strata_ctr]->strata[i]);
464 GNUNET_free (se->stratas[strata_ctr]->strata);
465 }
292 GNUNET_free (se); 466 GNUNET_free (se);
293} 467}
diff --git a/src/setu/gnunet-service-setu_strata_estimator.h b/src/setu/gnunet-service-setu_strata_estimator.h
index afdbcdbbf..4871a7fcd 100644
--- a/src/setu/gnunet-service-setu_strata_estimator.h
+++ b/src/setu/gnunet-service-setu_strata_estimator.h
@@ -22,6 +22,7 @@
22 * @file set/gnunet-service-setu_strata_estimator.h 22 * @file set/gnunet-service-setu_strata_estimator.h
23 * @brief estimator of set difference 23 * @brief estimator of set difference
24 * @author Florian Dold 24 * @author Florian Dold
25 * @author Elias Summermatter
25 */ 26 */
26 27
27#ifndef GNUNET_SERVICE_SETU_STRATA_ESTIMATOR_H 28#ifndef GNUNET_SERVICE_SETU_STRATA_ESTIMATOR_H
@@ -61,6 +62,31 @@ struct StrataEstimator
61 unsigned int ibf_size; 62 unsigned int ibf_size;
62}; 63};
63 64
65struct MultiStrataEstimator
66{
67 /**
68 * Array of strata estimators
69 */
70 struct StrataEstimator **stratas;
71
72 /**
73 * Number of strata estimators in struct
74 */
75 uint8_t size;
76
77};
78
79/**
80 * Deteminate how many strata estimators in the message are necessary
81 * @param avg_element_size
82 * @param element_count
83 * @return number of strata's
84 */
85
86uint8_t
87determine_strata_count (uint64_t avg_element_size,
88 uint64_t element_count);
89
64 90
65/** 91/**
66 * Write the given strata estimator to the buffer. 92 * Write the given strata estimator to the buffer.
@@ -70,7 +96,9 @@ struct StrataEstimator
70 * @return number of bytes written to @a buf 96 * @return number of bytes written to @a buf
71 */ 97 */
72size_t 98size_t
73strata_estimator_write (const struct StrataEstimator *se, 99strata_estimator_write (struct MultiStrataEstimator *se,
100 uint16_t se_ibf_total_size,
101 uint8_t number_se_send,
74 void *buf); 102 void *buf);
75 103
76 104
@@ -88,7 +116,9 @@ int
88strata_estimator_read (const void *buf, 116strata_estimator_read (const void *buf,
89 size_t buf_len, 117 size_t buf_len,
90 int is_compressed, 118 int is_compressed,
91 struct StrataEstimator *se); 119 uint8_t number_se_received,
120 uint16_t se_ibf_total_size,
121 struct MultiStrataEstimator *se);
92 122
93 123
94/** 124/**
@@ -99,7 +129,7 @@ strata_estimator_read (const void *buf,
99 * @param ibf_hashnum hashnum parameter of each ibf 129 * @param ibf_hashnum hashnum parameter of each ibf
100 * @return a freshly allocated, empty strata estimator, NULL on error 130 * @return a freshly allocated, empty strata estimator, NULL on error
101 */ 131 */
102struct StrataEstimator * 132struct MultiStrataEstimator *
103strata_estimator_create (unsigned int strata_count, 133strata_estimator_create (unsigned int strata_count,
104 uint32_t ibf_size, 134 uint32_t ibf_size,
105 uint8_t ibf_hashnum); 135 uint8_t ibf_hashnum);
@@ -111,11 +141,11 @@ strata_estimator_create (unsigned int strata_count,
111 * 141 *
112 * @param se1 first strata estimator 142 * @param se1 first strata estimator
113 * @param se2 second strata estimator 143 * @param se2 second strata estimator
114 * @return abs(|se1| - |se2|) 144 * @return nothing
115 */ 145 */
116unsigned int 146void
117strata_estimator_difference (const struct StrataEstimator *se1, 147strata_estimator_difference (const struct MultiStrataEstimator *se1,
118 const struct StrataEstimator *se2); 148 const struct MultiStrataEstimator *se2);
119 149
120 150
121/** 151/**
@@ -125,7 +155,7 @@ strata_estimator_difference (const struct StrataEstimator *se1,
125 * @param key key to add 155 * @param key key to add
126 */ 156 */
127void 157void
128strata_estimator_insert (struct StrataEstimator *se, 158strata_estimator_insert (struct MultiStrataEstimator *se,
129 struct IBF_Key key); 159 struct IBF_Key key);
130 160
131 161
@@ -136,7 +166,7 @@ strata_estimator_insert (struct StrataEstimator *se,
136 * @param key key to remove 166 * @param key key to remove
137 */ 167 */
138void 168void
139strata_estimator_remove (struct StrataEstimator *se, 169strata_estimator_remove (struct MultiStrataEstimator *se,
140 struct IBF_Key key); 170 struct IBF_Key key);
141 171
142 172
@@ -146,7 +176,7 @@ strata_estimator_remove (struct StrataEstimator *se,
146 * @param se strata estimator to destroy. 176 * @param se strata estimator to destroy.
147 */ 177 */
148void 178void
149strata_estimator_destroy (struct StrataEstimator *se); 179strata_estimator_destroy (struct MultiStrataEstimator *se);
150 180
151 181
152/** 182/**
@@ -155,8 +185,8 @@ strata_estimator_destroy (struct StrataEstimator *se);
155 * @param se the strata estimator to copy 185 * @param se the strata estimator to copy
156 * @return the copy 186 * @return the copy
157 */ 187 */
158struct StrataEstimator * 188struct MultiStrataEstimator *
159strata_estimator_dup (struct StrataEstimator *se); 189strata_estimator_dup (struct MultiStrataEstimator *se);
160 190
161 191
162#if 0 /* keep Emacsens' auto-indent happy */ 192#if 0 /* keep Emacsens' auto-indent happy */
diff --git a/src/setu/ibf.c b/src/setu/ibf.c
index 1beba9065..dbd23c320 100644
--- a/src/setu/ibf.c
+++ b/src/setu/ibf.c
@@ -20,11 +20,15 @@
20 20
21/** 21/**
22 * @file set/ibf.c 22 * @file set/ibf.c
23 * @brief implementation of the invertible Bloom filter 23 * @brief implementation of the invertible bloom filter
24 * @author Florian Dold 24 * @author Florian Dold
25 * @author Elias Summermatter
25 */ 26 */
26 27
27#include "ibf.h" 28#include "ibf.h"
29#include "gnunet_util_lib.h"
30#define LOG(kind, ...) GNUNET_log_from (kind, "setu", __VA_ARGS__)
31
28 32
29/** 33/**
30 * Compute the key's hash from the key. 34 * Compute the key's hash from the key.
@@ -58,11 +62,12 @@ ibf_hashcode_from_key (struct IBF_Key key,
58 struct GNUNET_HashCode *dst) 62 struct GNUNET_HashCode *dst)
59{ 63{
60 struct IBF_Key *p; 64 struct IBF_Key *p;
65 unsigned int i;
61 const unsigned int keys_per_hashcode = sizeof(struct GNUNET_HashCode) 66 const unsigned int keys_per_hashcode = sizeof(struct GNUNET_HashCode)
62 / sizeof(struct IBF_Key); 67 / sizeof(struct IBF_Key);
63 68
64 p = (struct IBF_Key *) dst; 69 p = (struct IBF_Key *) dst;
65 for (unsigned int i = 0; i < keys_per_hashcode; i++) 70 for (i = 0; i < keys_per_hashcode; i++)
66 *p++ = key; 71 *p++ = key;
67} 72}
68 73
@@ -75,14 +80,14 @@ ibf_hashcode_from_key (struct IBF_Key key,
75 * @return the newly created invertible bloom filter, NULL on error 80 * @return the newly created invertible bloom filter, NULL on error
76 */ 81 */
77struct InvertibleBloomFilter * 82struct InvertibleBloomFilter *
78ibf_create (uint32_t size, 83ibf_create (uint32_t size, uint8_t hash_num)
79 uint8_t hash_num)
80{ 84{
81 struct InvertibleBloomFilter *ibf; 85 struct InvertibleBloomFilter *ibf;
82 86
83 GNUNET_assert (0 != size); 87 GNUNET_assert (0 != size);
88
84 ibf = GNUNET_new (struct InvertibleBloomFilter); 89 ibf = GNUNET_new (struct InvertibleBloomFilter);
85 ibf->count = GNUNET_malloc_large (size * sizeof(uint8_t)); 90 ibf->count = GNUNET_malloc_large (size * sizeof(uint64_t));
86 if (NULL == ibf->count) 91 if (NULL == ibf->count)
87 { 92 {
88 GNUNET_free (ibf); 93 GNUNET_free (ibf);
@@ -105,6 +110,7 @@ ibf_create (uint32_t size,
105 } 110 }
106 ibf->size = size; 111 ibf->size = size;
107 ibf->hash_num = hash_num; 112 ibf->hash_num = hash_num;
113
108 return ibf; 114 return ibf;
109} 115}
110 116
@@ -121,8 +127,7 @@ ibf_get_indices (const struct InvertibleBloomFilter *ibf,
121 uint32_t i; 127 uint32_t i;
122 uint32_t bucket; 128 uint32_t bucket;
123 129
124 bucket = GNUNET_CRYPTO_crc32_n (&key, 130 bucket = GNUNET_CRYPTO_crc32_n (&key, sizeof key);
125 sizeof (key));
126 for (i = 0, filled = 0; filled < ibf->hash_num; i++) 131 for (i = 0, filled = 0; filled < ibf->hash_num; i++)
127 { 132 {
128 uint64_t x; 133 uint64_t x;
@@ -133,8 +138,7 @@ ibf_get_indices (const struct InvertibleBloomFilter *ibf,
133 dst[filled++] = bucket % ibf->size; 138 dst[filled++] = bucket % ibf->size;
134try_next: 139try_next:
135 x = ((uint64_t) bucket << 32) | i; 140 x = ((uint64_t) bucket << 32) | i;
136 bucket = GNUNET_CRYPTO_crc32_n (&x, 141 bucket = GNUNET_CRYPTO_crc32_n (&x, sizeof x);
137 sizeof (x));
138 } 142 }
139} 143}
140 144
@@ -170,13 +174,8 @@ ibf_insert (struct InvertibleBloomFilter *ibf,
170 int buckets[ibf->hash_num]; 174 int buckets[ibf->hash_num];
171 175
172 GNUNET_assert (ibf->hash_num <= ibf->size); 176 GNUNET_assert (ibf->hash_num <= ibf->size);
173 ibf_get_indices (ibf, 177 ibf_get_indices (ibf, key, buckets);
174 key, 178 ibf_insert_into (ibf, key, buckets, 1);
175 buckets);
176 ibf_insert_into (ibf,
177 key,
178 buckets,
179 1);
180} 179}
181 180
182 181
@@ -193,13 +192,8 @@ ibf_remove (struct InvertibleBloomFilter *ibf,
193 int buckets[ibf->hash_num]; 192 int buckets[ibf->hash_num];
194 193
195 GNUNET_assert (ibf->hash_num <= ibf->size); 194 GNUNET_assert (ibf->hash_num <= ibf->size);
196 ibf_get_indices (ibf, 195 ibf_get_indices (ibf, key, buckets);
197 key, 196 ibf_insert_into (ibf, key, buckets, -1);
198 buckets);
199 ibf_insert_into (ibf,
200 key,
201 buckets,
202 -1);
203} 197}
204 198
205 199
@@ -244,6 +238,8 @@ ibf_decode (struct InvertibleBloomFilter *ibf,
244 238
245 for (uint32_t i = 0; i < ibf->size; i++) 239 for (uint32_t i = 0; i < ibf->size; i++)
246 { 240 {
241 int hit;
242
247 /* we can only decode from pure buckets */ 243 /* we can only decode from pure buckets */
248 if ( (1 != ibf->count[i].count_val) && 244 if ( (1 != ibf->count[i].count_val) &&
249 (-1 != ibf->count[i].count_val) ) 245 (-1 != ibf->count[i].count_val) )
@@ -257,30 +253,33 @@ ibf_decode (struct InvertibleBloomFilter *ibf,
257 253
258 /* test if key in bucket hits its own location, 254 /* test if key in bucket hits its own location,
259 * if not, the key hash was subject to collision */ 255 * if not, the key hash was subject to collision */
260 { 256 hit = GNUNET_NO;
261 bool hit = false; 257 ibf_get_indices (ibf, ibf->key_sum[i], buckets);
258 for (int j = 0; j < ibf->hash_num; j++)
259 if (buckets[j] == i)
260 hit = GNUNET_YES;
262 261
263 ibf_get_indices (ibf, 262 if (GNUNET_NO == hit)
264 ibf->key_sum[i], 263 continue;
265 buckets); 264
266 for (int j = 0; j < ibf->hash_num; j++) 265 if (1 == ibf->count[i].count_val)
267 if (buckets[j] == i) 266 {
268 { 267 ibf->remote_decoded_count++;
269 hit = true;
270 break;
271 }
272 if (! hit)
273 continue;
274 } 268 }
269 else
270 {
271 ibf->local_decoded_count++;
272 }
273
274
275 if (NULL != ret_side) 275 if (NULL != ret_side)
276 *ret_side = ibf->count[i].count_val; 276 *ret_side = ibf->count[i].count_val;
277 if (NULL != ret_id) 277 if (NULL != ret_id)
278 *ret_id = ibf->key_sum[i]; 278 *ret_id = ibf->key_sum[i];
279 279
280 /* insert on the opposite side, effectively removing the element */ 280 /* insert on the opposite side, effectively removing the element */
281 ibf_insert_into (ibf, 281 ibf_insert_into (ibf, ibf->key_sum[i], buckets, -ibf->count[i].count_val);
282 ibf->key_sum[i], buckets, 282
283 -ibf->count[i].count_val);
284 return GNUNET_YES; 283 return GNUNET_YES;
285 } 284 }
286 285
@@ -291,6 +290,26 @@ ibf_decode (struct InvertibleBloomFilter *ibf,
291 290
292 291
293/** 292/**
293 * Returns the minimal bytes needed to store the counter of the IBF
294 *
295 * @param ibf the IBF
296 */
297uint8_t
298ibf_get_max_counter (struct InvertibleBloomFilter *ibf)
299{
300 long long max_counter = 0;
301 for (uint64_t i = 0; i < ibf->size; i++)
302 {
303 if (ibf->count[i].count_val > max_counter)
304 {
305 max_counter = ibf->count[i].count_val;
306 }
307 }
308 return 64 - __builtin_clzll (max_counter);
309}
310
311
312/**
294 * Write buckets from an ibf to a buffer. 313 * Write buckets from an ibf to a buffer.
295 * Exactly (IBF_BUCKET_SIZE*ibf->size) bytes are written to buf. 314 * Exactly (IBF_BUCKET_SIZE*ibf->size) bytes are written to buf.
296 * 315 *
@@ -298,16 +317,17 @@ ibf_decode (struct InvertibleBloomFilter *ibf,
298 * @param start with which bucket to start 317 * @param start with which bucket to start
299 * @param count how many buckets to write 318 * @param count how many buckets to write
300 * @param buf buffer to write the data to 319 * @param buf buffer to write the data to
320 * @param max bit length of a counter for unpacking
301 */ 321 */
302void 322void
303ibf_write_slice (const struct InvertibleBloomFilter *ibf, 323ibf_write_slice (const struct InvertibleBloomFilter *ibf,
304 uint32_t start, 324 uint32_t start,
305 uint32_t count, 325 uint64_t count,
306 void *buf) 326 void *buf,
327 uint8_t counter_max_length)
307{ 328{
308 struct IBF_Key *key_dst; 329 struct IBF_Key *key_dst;
309 struct IBF_KeyHash *key_hash_dst; 330 struct IBF_KeyHash *key_hash_dst;
310 struct IBF_Count *count_dst;
311 331
312 GNUNET_assert (start + count <= ibf->size); 332 GNUNET_assert (start + count <= ibf->size);
313 333
@@ -315,19 +335,178 @@ ibf_write_slice (const struct InvertibleBloomFilter *ibf,
315 key_dst = (struct IBF_Key *) buf; 335 key_dst = (struct IBF_Key *) buf;
316 GNUNET_memcpy (key_dst, 336 GNUNET_memcpy (key_dst,
317 ibf->key_sum + start, 337 ibf->key_sum + start,
318 count * sizeof *key_dst); 338 count * sizeof(*key_dst));
319 key_dst += count; 339 key_dst += count;
320 /* copy key hashes */ 340 /* copy key hashes */
321 key_hash_dst = (struct IBF_KeyHash *) key_dst; 341 key_hash_dst = (struct IBF_KeyHash *) key_dst;
322 GNUNET_memcpy (key_hash_dst, 342 GNUNET_memcpy (key_hash_dst,
323 ibf->key_hash_sum + start, 343 ibf->key_hash_sum + start,
324 count * sizeof *key_hash_dst); 344 count * sizeof(*key_hash_dst));
325 key_hash_dst += count; 345 key_hash_dst += count;
326 /* copy counts */ 346
327 count_dst = (struct IBF_Count *) key_hash_dst; 347 /* pack and copy counter */
328 GNUNET_memcpy (count_dst, 348 pack_counter (ibf,
329 ibf->count + start, 349 start,
330 count * sizeof *count_dst); 350 count,
351 (uint8_t *) key_hash_dst,
352 counter_max_length);
353
354
355}
356
357
358/**
359 * Packs the counter to transmit only the smallest possible amount of bytes and
360 * preventing overflow of the counter
361 * @param ibf the ibf to write
362 * @param start with which bucket to start
363 * @param count how many buckets to write
364 * @param buf buffer to write the data to
365 * @param max bit length of a counter for unpacking
366 */
367
368void
369pack_counter (const struct InvertibleBloomFilter *ibf,
370 uint32_t start,
371 uint64_t count,
372 uint8_t *buf,
373 uint8_t counter_max_length)
374{
375 uint8_t store_size = 0;
376 uint8_t store = 0;
377 uint16_t byte_ctr = 0;
378
379 /**
380 * Iterate over IBF bucket
381 */
382 for (uint64_t i = start; i< (count + start);)
383 {
384 uint64_t count_val_to_write = ibf->count[i].count_val;
385 uint8_t count_len_to_write = counter_max_length;
386
387 /**
388 * Pack and compose counters to byte values
389 */
390 while ((count_len_to_write + store_size) >= 8)
391 {
392 uint8_t bit_shift = 0;
393
394 /**
395 * Shift bits if more than a byte has to be written
396 * or the store size is not empty
397 */
398 if ((store_size > 0) || (count_len_to_write > 8))
399 {
400 uint8_t bit_unused = 8 - store_size;
401 bit_shift = count_len_to_write - bit_unused;
402 store = store << bit_unused;
403 }
404
405 buf[byte_ctr] = ((count_val_to_write >> bit_shift) | store) & 0xFF;
406 byte_ctr++;
407 count_len_to_write -= (8 - store_size);
408 count_val_to_write = count_val_to_write & ((1ULL <<
409 count_len_to_write) - 1);
410 store = 0;
411 store_size = 0;
412 }
413 store = (store << count_len_to_write) | count_val_to_write;
414 store_size = store_size + count_len_to_write;
415 count_len_to_write = 0;
416 i++;
417 }
418
419 /**
420 * Pack data left in story before finishing
421 */
422 if (store_size > 0)
423 {
424 buf[byte_ctr] = store << (8 - store_size);
425 byte_ctr++;
426 }
427
428}
429
430
431/**
432 * Unpacks the counter to transmit only the smallest possible amount of bytes and
433 * preventing overflow of the counter
434 * @param ibf the ibf to write
435 * @param start with which bucket to start
436 * @param count how many buckets to write
437 * @param buf buffer to write the data to
438 * @param max bit length of a counter for unpacking
439 */
440
441void
442unpack_counter (const struct InvertibleBloomFilter *ibf,
443 uint32_t start,
444 uint64_t count,
445 uint8_t *buf,
446 uint8_t counter_max_length)
447{
448 uint64_t ibf_counter_ctr = 0;
449 uint64_t store = 0;
450 uint64_t store_bit_ctr = 0;
451 uint64_t byte_ctr = 0;
452
453 /**
454 * Iterate over received bytes
455 */
456 while (true)
457 {
458 uint8_t byte_read = buf[byte_ctr];
459 uint8_t bit_to_read_left = 8;
460 byte_ctr++;
461
462 /**
463 * Pack data left in story before finishing
464 */
465 while (true)
466 {
467 /**
468 * Stop decoding when end is reached
469 */
470 if (ibf_counter_ctr > (count - 1))
471 return;
472
473 /*
474 * Unpack the counter
475 */
476 if ((store_bit_ctr + bit_to_read_left) >= counter_max_length)
477 {
478 uint8_t bytes_used = counter_max_length - store_bit_ctr;
479 if (store_bit_ctr > 0)
480 {
481 store = store << bytes_used;
482 }
483
484 uint8_t bytes_to_shift = bit_to_read_left - bytes_used;
485 uint64_t counter_part = byte_read >> bytes_to_shift;
486 store = store | counter_part;
487 ibf->count[ibf_counter_ctr + start].count_val = store;
488 byte_read = byte_read & ((1 << bytes_to_shift) - 1);
489 bit_to_read_left -= bytes_used;
490 ibf_counter_ctr++;
491 store = 0;
492 store_bit_ctr = 0;
493 }
494 else
495 {
496 store_bit_ctr += bit_to_read_left;
497 if (0 == store)
498 {
499 store = byte_read;
500 }
501 else
502 {
503 store = store << bit_to_read_left;
504 store = store | byte_read;
505 }
506 break;
507 }
508 }
509 }
331} 510}
332 511
333 512
@@ -338,12 +517,14 @@ ibf_write_slice (const struct InvertibleBloomFilter *ibf,
338 * @param start which bucket to start at 517 * @param start which bucket to start at
339 * @param count how many buckets to read 518 * @param count how many buckets to read
340 * @param ibf the ibf to read from 519 * @param ibf the ibf to read from
520 * @param max bit length of a counter for unpacking
341 */ 521 */
342void 522void
343ibf_read_slice (const void *buf, 523ibf_read_slice (const void *buf,
344 uint32_t start, 524 uint32_t start,
345 uint32_t count, 525 uint64_t count,
346 struct InvertibleBloomFilter *ibf) 526 struct InvertibleBloomFilter *ibf,
527 uint8_t counter_max_length)
347{ 528{
348 struct IBF_Key *key_src; 529 struct IBF_Key *key_src;
349 struct IBF_KeyHash *key_hash_src; 530 struct IBF_KeyHash *key_hash_src;
@@ -364,11 +545,10 @@ ibf_read_slice (const void *buf,
364 key_hash_src, 545 key_hash_src,
365 count * sizeof *key_hash_src); 546 count * sizeof *key_hash_src);
366 key_hash_src += count; 547 key_hash_src += count;
367 /* copy counts */ 548
549 /* copy and unpack counts */
368 count_src = (struct IBF_Count *) key_hash_src; 550 count_src = (struct IBF_Count *) key_hash_src;
369 GNUNET_memcpy (ibf->count + start, 551 unpack_counter (ibf,start,count,(uint8_t *) count_src,counter_max_length);
370 count_src,
371 count * sizeof *count_src);
372} 552}
373 553
374 554
diff --git a/src/setu/ibf.h b/src/setu/ibf.h
index 7c2ab33b1..5628405dc 100644
--- a/src/setu/ibf.h
+++ b/src/setu/ibf.h
@@ -22,6 +22,7 @@
22 * @file set/ibf.h 22 * @file set/ibf.h
23 * @brief invertible bloom filter 23 * @brief invertible bloom filter
24 * @author Florian Dold 24 * @author Florian Dold
25 * @author Elias Summermatter
25 */ 26 */
26 27
27#ifndef GNUNET_CONSENSUS_IBF_H 28#ifndef GNUNET_CONSENSUS_IBF_H
@@ -62,7 +63,7 @@ struct IBF_KeyHash
62 */ 63 */
63struct IBF_Count 64struct IBF_Count
64{ 65{
65 int8_t count_val; 66 int64_t count_val;
66}; 67};
67 68
68 69
@@ -93,6 +94,20 @@ struct InvertibleBloomFilter
93 uint8_t hash_num; 94 uint8_t hash_num;
94 95
95 /** 96 /**
97 * If an IBF is decoded this count stores how many
98 * elements are on the local site. This is used
99 * to estimate the set difference on a site
100 */
101 int local_decoded_count;
102
103 /**
104 * If an IBF is decoded this count stores how many
105 * elements are on the remote site. This is used
106 * to estimate the set difference on a site
107 */
108 int remote_decoded_count;
109
110 /**
96 * Xor sums of the elements' keys, used to identify the elements. 111 * Xor sums of the elements' keys, used to identify the elements.
97 * Array of 'size' elements. 112 * Array of 'size' elements.
98 */ 113 */
@@ -125,8 +140,9 @@ struct InvertibleBloomFilter
125void 140void
126ibf_write_slice (const struct InvertibleBloomFilter *ibf, 141ibf_write_slice (const struct InvertibleBloomFilter *ibf,
127 uint32_t start, 142 uint32_t start,
128 uint32_t count, 143 uint64_t count,
129 void *buf); 144 void *buf,
145 uint8_t counter_max_length);
130 146
131 147
132/** 148/**
@@ -140,8 +156,9 @@ ibf_write_slice (const struct InvertibleBloomFilter *ibf,
140void 156void
141ibf_read_slice (const void *buf, 157ibf_read_slice (const void *buf,
142 uint32_t start, 158 uint32_t start,
143 uint32_t count, 159 uint64_t count,
144 struct InvertibleBloomFilter *ibf); 160 struct InvertibleBloomFilter *ibf,
161 uint8_t counter_max_length);
145 162
146 163
147/** 164/**
@@ -244,6 +261,44 @@ ibf_dup (const struct InvertibleBloomFilter *ibf);
244void 261void
245ibf_destroy (struct InvertibleBloomFilter *ibf); 262ibf_destroy (struct InvertibleBloomFilter *ibf);
246 263
264uint8_t
265ibf_get_max_counter (struct InvertibleBloomFilter *ibf);
266
267
268/**
269 * Packs the counter to transmit only the smallest possible amount of bytes and
270 * preventing overflow of the counter
271 * @param ibf the ibf to write
272 * @param start with which bucket to start
273 * @param count how many buckets to write
274 * @param buf buffer to write the data to
275 * @param max bit length of a counter for unpacking
276 */
277
278void
279pack_counter (const struct InvertibleBloomFilter *ibf,
280 uint32_t start,
281 uint64_t count,
282 uint8_t *buf,
283 uint8_t counter_max_length);
284
285/**
286 * Unpacks the counter to transmit only the smallest possible amount of bytes and
287 * preventing overflow of the counter
288 * @param ibf the ibf to write
289 * @param start with which bucket to start
290 * @param count how many buckets to write
291 * @param buf buffer to write the data to
292 * @param max bit length of a counter for unpacking
293 */
294
295void
296unpack_counter (const struct InvertibleBloomFilter *ibf,
297 uint32_t start,
298 uint64_t count,
299 uint8_t *buf,
300 uint8_t counter_max_length);
301
247 302
248#if 0 /* keep Emacsens' auto-indent happy */ 303#if 0 /* keep Emacsens' auto-indent happy */
249{ 304{
diff --git a/src/setu/perf_setu_api.c b/src/setu/perf_setu_api.c
index b273f9c71..7f4d64f74 100644
--- a/src/setu/perf_setu_api.c
+++ b/src/setu/perf_setu_api.c
@@ -22,11 +22,14 @@
22 * @file set/test_setu_api.c 22 * @file set/test_setu_api.c
23 * @brief testcase for setu_api.c 23 * @brief testcase for setu_api.c
24 * @author Florian Dold 24 * @author Florian Dold
25 * @author Elias Summermatter
25 */ 26 */
26#include "platform.h" 27#include "platform.h"
27#include "gnunet_util_lib.h" 28#include "gnunet_util_lib.h"
28#include "gnunet_testing_lib.h" 29#include "gnunet_testing_lib.h"
29#include "gnunet_setu_service.h" 30#include "gnunet_setu_service.h"
31#include <sys/sysinfo.h>
32#include <pthread.h>
30 33
31 34
32static struct GNUNET_PeerIdentity local_id; 35static struct GNUNET_PeerIdentity local_id;
@@ -50,6 +53,12 @@ static int ret;
50static struct GNUNET_SCHEDULER_Task *tt; 53static struct GNUNET_SCHEDULER_Task *tt;
51 54
52 55
56/**
57 * Handles configuration file for setu performance test
58 *
59 */
60static struct GNUNET_CONFIGURATION_Handle *setu_cfg;
61
53 62
54static void 63static void
55result_cb_set1 (void *cls, 64result_cb_set1 (void *cls,
@@ -57,44 +66,44 @@ result_cb_set1 (void *cls,
57 uint64_t size, 66 uint64_t size,
58 enum GNUNET_SETU_Status status) 67 enum GNUNET_SETU_Status status)
59{ 68{
60 switch (status) 69 switch (status)
70 {
71 case GNUNET_SETU_STATUS_ADD_LOCAL:
72 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "set 1: got element\n");
73 break;
74
75 case GNUNET_SETU_STATUS_FAILURE:
76 GNUNET_break (0);
77 oh1 = NULL;
78 fprintf (stderr, "set 1: received failure status!\n");
79 ret = 1;
80 if (NULL != tt)
81 {
82 GNUNET_SCHEDULER_cancel (tt);
83 tt = NULL;
84 }
85 GNUNET_SCHEDULER_shutdown ();
86 break;
87
88 case GNUNET_SETU_STATUS_DONE:
89 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "set 1: done\n");
90 oh1 = NULL;
91 if (NULL != set1)
61 { 92 {
62 case GNUNET_SETU_STATUS_ADD_LOCAL: 93 GNUNET_SETU_destroy (set1);
63 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "set 1: got element\n"); 94 set1 = NULL;
64 break;
65
66 case GNUNET_SETU_STATUS_FAILURE:
67 GNUNET_break (0);
68 oh1 = NULL;
69 fprintf (stderr, "set 1: received failure status!\n");
70 ret = 1;
71 if (NULL != tt)
72 {
73 GNUNET_SCHEDULER_cancel (tt);
74 tt = NULL;
75 }
76 GNUNET_SCHEDULER_shutdown ();
77 break;
78
79 case GNUNET_SETU_STATUS_DONE:
80 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "set 1: done\n");
81 oh1 = NULL;
82 if (NULL != set1)
83 {
84 GNUNET_SETU_destroy (set1);
85 set1 = NULL;
86 }
87 if (NULL == set2)
88 {
89 GNUNET_SCHEDULER_cancel (tt);
90 tt = NULL;
91 GNUNET_SCHEDULER_shutdown ();
92 }
93 break;
94
95 default:
96 GNUNET_assert (0);
97 } 95 }
96 if (NULL == set2)
97 {
98 GNUNET_SCHEDULER_cancel (tt);
99 tt = NULL;
100 GNUNET_SCHEDULER_shutdown ();
101 }
102 break;
103
104 default:
105 GNUNET_assert (0);
106 }
98} 107}
99 108
100 109
@@ -104,36 +113,36 @@ result_cb_set2 (void *cls,
104 uint64_t size, 113 uint64_t size,
105 enum GNUNET_SETU_Status status) 114 enum GNUNET_SETU_Status status)
106{ 115{
107 switch (status) 116 switch (status)
117 {
118 case GNUNET_SETU_STATUS_ADD_LOCAL:
119 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "set 2: got element\n");
120 break;
121
122 case GNUNET_SETU_STATUS_FAILURE:
123 GNUNET_break (0);
124 oh2 = NULL;
125 fprintf (stderr, "set 2: received failure status\n");
126 GNUNET_SCHEDULER_shutdown ();
127 ret = 1;
128 break;
129
130 case GNUNET_SETU_STATUS_DONE:
131 oh2 = NULL;
132 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "set 2: done\n");
133 GNUNET_SETU_destroy (set2);
134 set2 = NULL;
135 if (NULL == set1)
108 { 136 {
109 case GNUNET_SETU_STATUS_ADD_LOCAL: 137 GNUNET_SCHEDULER_cancel (tt);
110 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "set 2: got element\n"); 138 tt = NULL;
111 break; 139 GNUNET_SCHEDULER_shutdown ();
112
113 case GNUNET_SETU_STATUS_FAILURE:
114 GNUNET_break (0);
115 oh2 = NULL;
116 fprintf (stderr, "set 2: received failure status\n");
117 GNUNET_SCHEDULER_shutdown ();
118 ret = 1;
119 break;
120
121 case GNUNET_SETU_STATUS_DONE:
122 oh2 = NULL;
123 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "set 2: done\n");
124 GNUNET_SETU_destroy (set2);
125 set2 = NULL;
126 if (NULL == set1)
127 {
128 GNUNET_SCHEDULER_cancel (tt);
129 tt = NULL;
130 GNUNET_SCHEDULER_shutdown ();
131 }
132 break;
133
134 default:
135 GNUNET_assert (0);
136 } 140 }
141 break;
142
143 default:
144 GNUNET_assert (0);
145 }
137} 146}
138 147
139 148
@@ -143,14 +152,14 @@ listen_cb (void *cls,
143 const struct GNUNET_MessageHeader *context_msg, 152 const struct GNUNET_MessageHeader *context_msg,
144 struct GNUNET_SETU_Request *request) 153 struct GNUNET_SETU_Request *request)
145{ 154{
146 GNUNET_assert (NULL != context_msg); 155 GNUNET_assert (NULL != context_msg);
147 GNUNET_assert (ntohs (context_msg->type) == GNUNET_MESSAGE_TYPE_DUMMY); 156 GNUNET_assert (ntohs (context_msg->type) == GNUNET_MESSAGE_TYPE_DUMMY);
148 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "listen cb called\n"); 157 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "listen cb called\n");
149 oh2 = GNUNET_SETU_accept (request, 158 oh2 = GNUNET_SETU_accept (request,
150 (struct GNUNET_SETU_Option[]){ 0 }, 159 (struct GNUNET_SETU_Option[]){ 0 },
151 &result_cb_set2, 160 &result_cb_set2,
152 NULL); 161 NULL);
153 GNUNET_SETU_commit (oh2, set2); 162 GNUNET_SETU_commit (oh2, set2);
154} 163}
155 164
156 165
@@ -162,122 +171,89 @@ listen_cb (void *cls,
162static void 171static void
163start (void *cls) 172start (void *cls)
164{ 173{
165 struct GNUNET_MessageHeader context_msg; 174 struct GNUNET_MessageHeader context_msg;
166 175
167 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Starting reconciliation\n"); 176 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Starting reconciliation\n");
168 context_msg.size = htons (sizeof context_msg); 177 context_msg.size = htons (sizeof context_msg);
169 context_msg.type = htons (GNUNET_MESSAGE_TYPE_DUMMY); 178 context_msg.type = htons (GNUNET_MESSAGE_TYPE_DUMMY);
170 listen_handle = GNUNET_SETU_listen (config, 179 listen_handle = GNUNET_SETU_listen (config,
171 &app_id, 180 &app_id,
172 &listen_cb, 181 &listen_cb,
173 NULL); 182 NULL);
174 oh1 = GNUNET_SETU_prepare (&local_id, 183 oh1 = GNUNET_SETU_prepare (&local_id,
175 &app_id, 184 &app_id,
176 &context_msg, 185 &context_msg,
177 (struct GNUNET_SETU_Option[]){ 0 }, 186 (struct GNUNET_SETU_Option[]){ 0 },
178 &result_cb_set1, 187 &result_cb_set1,
179 NULL); 188 NULL);
180 GNUNET_SETU_commit (oh1, set1); 189 GNUNET_SETU_commit (oh1, set1);
181} 190}
182 191
183 192
184/** 193/**
185 * Initialize the second set, continue
186 *
187 * @param cls closure, unused
188 */
189static void
190init_set2 (void *cls)
191{
192 struct GNUNET_SETU_Element element;
193
194 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "initializing set 2\n");
195
196 element.element_type = 0;
197 element.data = "hello1";
198 element.size = strlen (element.data);
199 GNUNET_SETU_add_element (set2, &element, NULL, NULL);
200 element.data = "quux";
201 element.size = strlen (element.data);
202 GNUNET_SETU_add_element (set2, &element, NULL, NULL);
203 element.data = "baz";
204 element.size = strlen (element.data);
205 GNUNET_SETU_add_element (set2, &element, &start, NULL);
206}
207
208/**
209 * Generate random byte stream 194 * Generate random byte stream
210 */ 195 */
211 196
212unsigned char *gen_rdm_bytestream (size_t num_bytes) 197unsigned char *
198gen_rdm_bytestream (size_t num_bytes)
213{ 199{
214 unsigned char *stream = GNUNET_malloc (num_bytes); 200 unsigned char *stream = GNUNET_malloc (num_bytes);
215 GNUNET_CRYPTO_random_block(GNUNET_CRYPTO_QUALITY_WEAK, stream, num_bytes); 201 GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, stream, num_bytes);
216 return stream; 202 return stream;
217} 203}
218 204
205
219/** 206/**
220 * Generate random sets 207 * Generate random sets
221 */ 208 */
222 209
223static void 210static void
224initRandomSets(int overlap, int set1_size, int set2_size, int element_size_in_bytes) 211initRandomSets (int overlap, int set1_size, int set2_size, int
212 element_size_in_bytes)
225{ 213{
226 struct GNUNET_SETU_Element element; 214 struct GNUNET_SETU_Element element;
227 element.element_type = 0; 215 element.element_type = 0;
228 216
229 // Add elements to both sets 217 // Add elements to both sets
230 for (int i = 0; i < overlap; i++) { 218 for (int i = 0; i < overlap; i++)
231 element.data = gen_rdm_bytestream(element_size_in_bytes); 219 {
232 element.size = element_size_in_bytes; 220 element.data = gen_rdm_bytestream (element_size_in_bytes);
233 GNUNET_SETU_add_element (set1, &element, NULL, NULL); 221 element.size = element_size_in_bytes;
234 GNUNET_SETU_add_element (set2, &element, NULL, NULL); 222 GNUNET_SETU_add_element (set1, &element, NULL, NULL);
235 set1_size--; 223 GNUNET_SETU_add_element (set2, &element, NULL, NULL);
236 set2_size--; 224 set1_size--;
237 } 225 set2_size--;
238 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "initialized elements in both sets\n"); 226 }
239 227 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "initialized elements in both sets\n");
240 // Add other elements to set 1 228
241 while(set1_size>0) { 229 // Add other elements to set 1
242 element.data = gen_rdm_bytestream(element_size_in_bytes); 230 while (set1_size>0)
243 element.size = element_size_in_bytes; 231 {
244 GNUNET_SETU_add_element (set1, &element, NULL, NULL); 232 element.data = gen_rdm_bytestream (element_size_in_bytes);
245 set1_size--; 233 element.size = element_size_in_bytes;
246 } 234 GNUNET_SETU_add_element (set1, &element, NULL, NULL);
247 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "initialized elements in set1\n"); 235 set1_size--;
248 236 }
249 // Add other elements to set 2 237 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "initialized elements in set1\n");
250 while(set2_size > 0) {
251 element.data = gen_rdm_bytestream(element_size_in_bytes);
252 element.size = element_size_in_bytes;
253 238
254 if(set2_size != 1) { 239 // Add other elements to set 2
255 GNUNET_SETU_add_element (set2, &element,NULL, NULL); 240 while (set2_size > 0)
256 } else { 241 {
257 GNUNET_SETU_add_element (set2, &element,&start, NULL); 242 element.data = gen_rdm_bytestream (element_size_in_bytes);
258 } 243 element.size = element_size_in_bytes;
259 244
260 set2_size--; 245 if (set2_size != 1)
246 {
247 GNUNET_SETU_add_element (set2, &element,NULL, NULL);
248 }
249 else
250 {
251 GNUNET_SETU_add_element (set2, &element,&start, NULL);
261 } 252 }
262 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "initialized elements in set2\n");
263}
264
265/**
266 * Initialize the first set, continue.
267 */
268static void
269init_set1 (void)
270{
271 struct GNUNET_SETU_Element element;
272 253
273 element.element_type = 0; 254 set2_size--;
274 element.data = "hello"; 255 }
275 element.size = strlen (element.data); 256 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "initialized elements in set2\n");
276 GNUNET_SETU_add_element (set1, &element, NULL, NULL);
277 element.data = "bar";
278 element.size = strlen (element.data);
279 GNUNET_SETU_add_element (set1, &element, &init_set2, NULL);
280 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "initialized set 1\n");
281} 257}
282 258
283 259
@@ -289,10 +265,10 @@ init_set1 (void)
289static void 265static void
290timeout_fail (void *cls) 266timeout_fail (void *cls)
291{ 267{
292 tt = NULL; 268 tt = NULL;
293 GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE, "Testcase failed with timeout\n"); 269 GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE, "Testcase failed with timeout\n");
294 GNUNET_SCHEDULER_shutdown (); 270 GNUNET_SCHEDULER_shutdown ();
295 ret = 1; 271 ret = 1;
296} 272}
297 273
298 274
@@ -304,36 +280,36 @@ timeout_fail (void *cls)
304static void 280static void
305do_shutdown (void *cls) 281do_shutdown (void *cls)
306{ 282{
307 if (NULL != tt) 283 if (NULL != tt)
308 { 284 {
309 GNUNET_SCHEDULER_cancel (tt); 285 GNUNET_SCHEDULER_cancel (tt);
310 tt = NULL; 286 tt = NULL;
311 } 287 }
312 if (NULL != oh1) 288 if (NULL != oh1)
313 { 289 {
314 GNUNET_SETU_operation_cancel (oh1); 290 GNUNET_SETU_operation_cancel (oh1);
315 oh1 = NULL; 291 oh1 = NULL;
316 } 292 }
317 if (NULL != oh2) 293 if (NULL != oh2)
318 { 294 {
319 GNUNET_SETU_operation_cancel (oh2); 295 GNUNET_SETU_operation_cancel (oh2);
320 oh2 = NULL; 296 oh2 = NULL;
321 } 297 }
322 if (NULL != set1) 298 if (NULL != set1)
323 { 299 {
324 GNUNET_SETU_destroy (set1); 300 GNUNET_SETU_destroy (set1);
325 set1 = NULL; 301 set1 = NULL;
326 } 302 }
327 if (NULL != set2) 303 if (NULL != set2)
328 { 304 {
329 GNUNET_SETU_destroy (set2); 305 GNUNET_SETU_destroy (set2);
330 set2 = NULL; 306 set2 = NULL;
331 } 307 }
332 if (NULL != listen_handle) 308 if (NULL != listen_handle)
333 { 309 {
334 GNUNET_SETU_listen_cancel (listen_handle); 310 GNUNET_SETU_listen_cancel (listen_handle);
335 listen_handle = NULL; 311 listen_handle = NULL;
336 } 312 }
337} 313}
338 314
339 315
@@ -350,79 +326,148 @@ run (void *cls,
350 const struct GNUNET_CONFIGURATION_Handle *cfg, 326 const struct GNUNET_CONFIGURATION_Handle *cfg,
351 struct GNUNET_TESTING_Peer *peer) 327 struct GNUNET_TESTING_Peer *peer)
352{ 328{
353 struct GNUNET_SETU_OperationHandle *my_oh; 329 struct GNUNET_SETU_OperationHandle *my_oh;
354 330
355 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 331 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
356 "Running preparatory tests\n"); 332 "Running preparatory tests\n");
357 tt = GNUNET_SCHEDULER_add_delayed ( 333 tt = GNUNET_SCHEDULER_add_delayed (
358 GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 5), 334 GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 5),
359 &timeout_fail, 335 &timeout_fail,
360 NULL); 336 NULL);
361 GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL); 337 GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL);
362 338
363 config = cfg; 339 config = cfg;
364 GNUNET_assert (GNUNET_OK == GNUNET_CRYPTO_get_peer_identity (cfg, 340 GNUNET_assert (GNUNET_OK == GNUNET_CRYPTO_get_peer_identity (cfg,
365 &local_id)); 341 &local_id));
366 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 342 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
367 "my id (from CRYPTO): %s\n", 343 "my id (from CRYPTO): %s\n",
368 GNUNET_i2s (&local_id)); 344 GNUNET_i2s (&local_id));
369 GNUNET_TESTING_peer_get_identity (peer, 345 GNUNET_TESTING_peer_get_identity (peer,
370 &local_id); 346 &local_id);
371 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 347 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
372 "my id (from TESTING): %s\n", 348 "my id (from TESTING): %s\n",
373 GNUNET_i2s (&local_id)); 349 GNUNET_i2s (&local_id));
374 set1 = GNUNET_SETU_create (cfg); 350 set1 = GNUNET_SETU_create (cfg);
375 set2 = GNUNET_SETU_create (cfg); 351 set2 = GNUNET_SETU_create (cfg);
376 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 352 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
377 "Created sets %p and %p for union operation\n", 353 "Created sets %p and %p for union operation\n",
378 set1, 354 set1,
379 set2); 355 set2);
380 GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_WEAK, &app_id); 356 GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_WEAK, &app_id);
381 357
382 /* test if canceling an uncommitted request works! */ 358 /* test if canceling an uncommitted request works! */
383 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 359 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
384 "Launching and instantly stopping set operation\n"); 360 "Launching and instantly stopping set operation\n");
385 my_oh = GNUNET_SETU_prepare (&local_id, 361 my_oh = GNUNET_SETU_prepare (&local_id,
386 &app_id, 362 &app_id,
387 NULL, 363 NULL,
388 (struct GNUNET_SETU_Option[]){ 0 }, 364 (struct GNUNET_SETU_Option[]){ 0 },
389 NULL, 365 NULL,
390 NULL); 366 NULL);
391 GNUNET_SETU_operation_cancel (my_oh); 367 GNUNET_SETU_operation_cancel (my_oh);
392 368
393 /* test the real set reconciliation */ 369 /* test the real set reconciliation */
394 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 370 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
395 "Running real set-reconciliation\n"); 371 "Running real set-reconciliation\n");
396 //init_set1 (); 372 // init_set1 ();
397 // limit ~23800 element total 373 // limit ~23800 element total
398 initRandomSets(50,100,100,128); 374 initRandomSets (490, 500,500,32);
399} 375}
400 376
401static void execute_perf() 377
378void
379perf_thread ()
402{ 380{
403 for( int repeat_ctr = 0; repeat_ctr<1; repeat_ctr++ ) { 381 GNUNET_TESTING_service_run ("perf_setu_api",
382 "arm",
383 "test_setu.conf",
384 &run,
385 NULL);
386
387}
404 388
405 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
406 "Executing perf round %d\n", repeat_ctr);
407 389
408 GNUNET_TESTING_service_run ("perf_setu_api", 390static void
409 "arm", 391run_petf_thread (int total_runs)
410 "test_setu.conf", 392{
411 &run, 393 int core_count = get_nprocs_conf ();
412 NULL); 394 pid_t child_pid, wpid;
395 int status = 0;
396
397// Father code (before child processes start)
398 for (int processed = 0; processed < total_runs;)
399 {
400 for (int id = 0; id < core_count; id++)
401 {
402 if (processed >= total_runs)
403 break;
404
405 if ((child_pid = fork ()) == 0)
406 {
407 perf_thread ();
408 exit (0);
409 }
410 processed += 1;
413 } 411 }
414 return 0; 412 while ((wpid = wait (&status)) > 0)
413 ;
414
415 }
415} 416}
416 417
417 418
419static void
420execute_perf ()
421{
422
423 /**
424 * Erase statfile
425 */
426 remove ("perf_stats.csv");
427 remove ("perf_failure_bucket_number_factor.csv");
428 for (int out_out_ctr = 3; out_out_ctr <= 3; out_out_ctr++)
429 {
430
431 for (int out_ctr = 20; out_ctr <= 20; out_ctr++)
432 {
433 float base = 0.1;
434 float x = out_ctr * base;
435 char factor[10];
436 char *buffer = gcvt (x, 4, factor);
437 setu_cfg = GNUNET_CONFIGURATION_create ();
438 GNUNET_CONFIGURATION_set_value_string (setu_cfg, "IBF",
439 "BUCKET_NUMBER_FACTOR",
440 buffer); // Factor default=4
441 GNUNET_CONFIGURATION_set_value_number (setu_cfg, "IBF",
442 "NUMBER_PER_BUCKET", 3); // K default=4
443 GNUNET_CONFIGURATION_set_value_string (setu_cfg, "PERFORMANCE",
444 "TRADEOFF", "2"); // default=0.25
445 GNUNET_CONFIGURATION_set_value_string (setu_cfg, "PERFORMANCE",
446 "MAX_SET_DIFF_FACTOR_DIFFERENTIAL",
447 "20000"); // default=0.25
448 GNUNET_CONFIGURATION_set_value_number (setu_cfg, "BOUNDARIES",
449 "UPPER_ELEMENT", 5000);
450
451
452 if (GNUNET_OK != GNUNET_CONFIGURATION_write (setu_cfg, "perf_setu.conf"))
453 GNUNET_log (
454 GNUNET_ERROR_TYPE_ERROR,
455 _ ("Failed to write subsystem default identifier map'.\n"));
456 run_petf_thread (100);
457 }
458
459 }
460 return;
461}
462
418 463
419int 464int
420main (int argc, char **argv) 465main (int argc, char **argv)
421{ 466{
422 GNUNET_log_setup ("perf_setu_api",
423 "WARNING",
424 NULL);
425 467
426 execute_perf(); 468 GNUNET_log_setup ("perf_setu_api",
427 return 0; 469 "WARNING",
470 NULL);
471 execute_perf ();
472 return 0;
428} 473}
diff --git a/src/setu/setu.h b/src/setu/setu.h
index 7c2a98a02..7b606f12c 100644
--- a/src/setu/setu.h
+++ b/src/setu/setu.h
@@ -122,6 +122,31 @@ struct GNUNET_SETU_AcceptMessage
122 */ 122 */
123 uint32_t byzantine_lower_bound; 123 uint32_t byzantine_lower_bound;
124 124
125
126 /**
127 * Upper bound for the set size, used only when
128 * byzantine mode is enabled.
129 */
130 uint64_t byzantine_upper_bond;
131
132 /**
133 * Bandwidth latency tradeoff determines how much bytes a single RTT is
134 * worth, which is a performance setting
135 */
136 uint64_t bandwidth_latency_tradeoff;
137
138 /**
139 * The factor determines the number of buckets an IBF has which is
140 * multiplied by the estimated setsize default: 2
141 */
142 uint64_t ibf_bucket_number_factor;
143
144 /**
145 * This setting determines to how many IBF buckets an single elements
146 * is mapped to.
147 */
148 uint64_t ibf_number_of_buckets_per_element;
149
125}; 150};
126 151
127 152
@@ -226,6 +251,30 @@ struct GNUNET_SETU_EvaluateMessage
226 */ 251 */
227 uint32_t byzantine_lower_bound; 252 uint32_t byzantine_lower_bound;
228 253
254 /**
255 * Upper bound for the set size, used only when
256 * byzantine mode is enabled.
257 */
258 uint64_t byzantine_upper_bond;
259
260 /**
261 * Bandwidth latency tradeoff determines how much bytes a single RTT is
262 * worth, which is a performance setting
263 */
264 uint64_t bandwidth_latency_tradeoff;
265
266 /**
267 * The factor determines the number of buckets an IBF has which is
268 * multiplied by the estimated setsize default: 2
269 */
270 uint64_t ibf_bucket_number_factor;
271
272 /**
273 * This setting determines to how many IBF buckets an single elements
274 * is mapped to.
275 */
276 uint64_t ibf_number_of_buckets_per_element;
277
229 /* rest: context message, that is, application-specific 278 /* rest: context message, that is, application-specific
230 message to convince listener to pick up */ 279 message to convince listener to pick up */
231}; 280};
diff --git a/src/setu/setu_api.c b/src/setu/setu_api.c
index 0a09b18b2..faa57aaba 100644
--- a/src/setu/setu_api.c
+++ b/src/setu/setu_api.c
@@ -22,6 +22,7 @@
22 * @brief api for the set union service 22 * @brief api for the set union service
23 * @author Florian Dold 23 * @author Florian Dold
24 * @author Christian Grothoff 24 * @author Christian Grothoff
25 * @author Elias Summermatter
25 */ 26 */
26#include "platform.h" 27#include "platform.h"
27#include "gnunet_util_lib.h" 28#include "gnunet_util_lib.h"
@@ -526,6 +527,14 @@ GNUNET_SETU_prepare (const struct GNUNET_PeerIdentity *other_peer,
526 context_msg); 527 context_msg);
527 msg->app_id = *app_id; 528 msg->app_id = *app_id;
528 msg->target_peer = *other_peer; 529 msg->target_peer = *other_peer;
530
531 /* Set default values */
532 msg->byzantine_upper_bond = UINT64_MAX;
533 msg->bandwidth_latency_tradeoff = 0;
534 msg->ibf_bucket_number_factor = 2;
535 msg->ibf_number_of_buckets_per_element = 3;
536
537
529 for (const struct GNUNET_SETU_Option *opt = options; opt->type != 0; opt++) 538 for (const struct GNUNET_SETU_Option *opt = options; opt->type != 0; opt++)
530 { 539 {
531 switch (opt->type) 540 switch (opt->type)
@@ -534,6 +543,18 @@ GNUNET_SETU_prepare (const struct GNUNET_PeerIdentity *other_peer,
534 msg->byzantine = GNUNET_YES; 543 msg->byzantine = GNUNET_YES;
535 msg->byzantine_lower_bound = htonl (opt->v.num); 544 msg->byzantine_lower_bound = htonl (opt->v.num);
536 break; 545 break;
546 case GNUNET_SETU_OPTION_CUSTOM_BYZANTINE_UPPER_BOUND:
547 msg->byzantine_upper_bond = htonl (opt->v.num);
548 break;
549 case GNUNET_SETU_OPTION_CUSTOM_BANDWIDTH_LATENCY_TRADEOFF:
550 msg->bandwidth_latency_tradeoff = htonl (opt->v.num);
551 break;
552 case GNUNET_SETU_OPTION_CUSTOM_IBF_BUCKET_NUMBER_FACTOR:
553 msg->ibf_bucket_number_factor = htonl (opt->v.num);
554 break;
555 case GNUNET_SETU_OPTION_CUSTOM_IBF_BUCKETS_PER_ELEMENT:
556 msg->ibf_number_of_buckets_per_element = htonl (opt->v.num);
557 break;
537 case GNUNET_SETU_OPTION_FORCE_FULL: 558 case GNUNET_SETU_OPTION_FORCE_FULL:
538 msg->force_full = GNUNET_YES; 559 msg->force_full = GNUNET_YES;
539 break; 560 break;
@@ -788,6 +809,13 @@ GNUNET_SETU_accept (struct GNUNET_SETU_Request *request,
788 mqm = GNUNET_MQ_msg (msg, 809 mqm = GNUNET_MQ_msg (msg,
789 GNUNET_MESSAGE_TYPE_SETU_ACCEPT); 810 GNUNET_MESSAGE_TYPE_SETU_ACCEPT);
790 msg->accept_reject_id = htonl (request->accept_id); 811 msg->accept_reject_id = htonl (request->accept_id);
812
813 /* Set default values */
814 msg->byzantine_upper_bond = UINT64_MAX;
815 msg->bandwidth_latency_tradeoff = 0;
816 msg->ibf_bucket_number_factor = 2;
817 msg->ibf_number_of_buckets_per_element = 3;
818
791 for (const struct GNUNET_SETU_Option *opt = options; opt->type != 0; opt++) 819 for (const struct GNUNET_SETU_Option *opt = options; opt->type != 0; opt++)
792 { 820 {
793 switch (opt->type) 821 switch (opt->type)
@@ -796,6 +824,18 @@ GNUNET_SETU_accept (struct GNUNET_SETU_Request *request,
796 msg->byzantine = GNUNET_YES; 824 msg->byzantine = GNUNET_YES;
797 msg->byzantine_lower_bound = htonl (opt->v.num); 825 msg->byzantine_lower_bound = htonl (opt->v.num);
798 break; 826 break;
827 case GNUNET_SETU_OPTION_CUSTOM_BYZANTINE_UPPER_BOUND:
828 msg->byzantine_upper_bond = htonl (opt->v.num);
829 break;
830 case GNUNET_SETU_OPTION_CUSTOM_BANDWIDTH_LATENCY_TRADEOFF:
831 msg->bandwidth_latency_tradeoff = htonl (opt->v.num);
832 break;
833 case GNUNET_SETU_OPTION_CUSTOM_IBF_BUCKET_NUMBER_FACTOR:
834 msg->ibf_bucket_number_factor = htonl (opt->v.num);
835 break;
836 case GNUNET_SETU_OPTION_CUSTOM_IBF_BUCKETS_PER_ELEMENT:
837 msg->ibf_number_of_buckets_per_element = htonl (opt->v.num);
838 break;
799 case GNUNET_SETU_OPTION_FORCE_FULL: 839 case GNUNET_SETU_OPTION_FORCE_FULL:
800 msg->force_full = GNUNET_YES; 840 msg->force_full = GNUNET_YES;
801 break; 841 break;
diff --git a/src/setu/test_setu_api.c b/src/setu/test_setu_api.c
index 2fb7d015e..5a0c9d70d 100644
--- a/src/setu/test_setu_api.c
+++ b/src/setu/test_setu_api.c
@@ -204,62 +204,6 @@ init_set2 (void *cls)
204 GNUNET_SETU_add_element (set2, &element, &start, NULL); 204 GNUNET_SETU_add_element (set2, &element, &start, NULL);
205} 205}
206 206
207/**
208 * Generate random byte stream
209 */
210
211unsigned char *gen_rdm_bytestream (size_t num_bytes)
212{
213 unsigned char *stream = GNUNET_malloc (num_bytes);
214 GNUNET_CRYPTO_random_block(GNUNET_CRYPTO_QUALITY_WEAK, stream, num_bytes);
215 return stream;
216}
217
218/**
219 * Generate random sets
220 */
221
222static void
223initRandomSets(int overlap, int set1_size, int set2_size, int element_size_in_bytes)
224{
225 struct GNUNET_SETU_Element element;
226 element.element_type = 0;
227
228 // Add elements to both sets
229 for (int i = 0; i < overlap; i++) {
230 element.data = gen_rdm_bytestream(element_size_in_bytes);
231 element.size = element_size_in_bytes;
232 GNUNET_SETU_add_element (set1, &element, NULL, NULL);
233 GNUNET_SETU_add_element (set2, &element, NULL, NULL);
234 set1_size--;
235 set2_size--;
236 }
237 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "initialized elements in both sets\n");
238
239 // Add other elements to set 1
240 while(set1_size>0) {
241 element.data = gen_rdm_bytestream(element_size_in_bytes);
242 element.size = element_size_in_bytes;
243 GNUNET_SETU_add_element (set1, &element, NULL, NULL);
244 set1_size--;
245 }
246 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "initialized elements in set1\n");
247
248 // Add other elements to set 2
249 while(set2_size > 0) {
250 element.data = gen_rdm_bytestream(element_size_in_bytes);
251 element.size = element_size_in_bytes;
252
253 if(set2_size != 1) {
254 GNUNET_SETU_add_element (set2, &element,NULL, NULL);
255 } else {
256 GNUNET_SETU_add_element (set2, &element,&start, NULL);
257 }
258
259 set2_size--;
260 }
261 GNUNET_log (GNUNET_ERROR_TYPE_INFO, "initialized elements in set2\n");
262}
263 207
264/** 208/**
265 * Initialize the first set, continue. 209 * Initialize the first set, continue.
@@ -392,9 +336,7 @@ run (void *cls,
392 /* test the real set reconciliation */ 336 /* test the real set reconciliation */
393 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 337 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
394 "Running real set-reconciliation\n"); 338 "Running real set-reconciliation\n");
395 //init_set1 (); 339 init_set1 ();
396 initRandomSets(19500,20000,20000,4096);
397 //initRandomSets(19500,20000,20000,32);
398} 340}
399 341
400 342
diff --git a/src/testbed/Makefile.am b/src/testbed/Makefile.am
index a9837daf5..11399e77c 100644
--- a/src/testbed/Makefile.am
+++ b/src/testbed/Makefile.am
@@ -23,8 +23,6 @@ if HAVE_SQLITE
23endif 23endif
24 24
25libexec_PROGRAMS = \ 25libexec_PROGRAMS = \
26 gnunet-cmd \
27 gnunet-cmds-helper \
28 gnunet-service-testbed \ 26 gnunet-service-testbed \
29 gnunet-helper-testbed \ 27 gnunet-helper-testbed \
30 gnunet-daemon-testbed-blacklist \ 28 gnunet-daemon-testbed-blacklist \
@@ -37,20 +35,6 @@ bin_PROGRAMS = \
37noinst_PROGRAMS = \ 35noinst_PROGRAMS = \
38 $(generate_underlay) 36 $(generate_underlay)
39 37
40plugin_LTLIBRARIES = \
41 libgnunet_plugin_testcmd.la
42
43libgnunet_plugin_testcmd_la_SOURCES = \
44 plugin_testcmd.c
45libgnunet_plugin_testcmd_la_LIBADD = \
46 $(top_builddir)/src/util/libgnunetutil.la \
47 $(top_builddir)/src/testing/libgnunettesting.la \
48 $(top_builddir)/src/statistics/libgnunetstatistics.la \
49 libgnunettestbed.la \
50 $(LTLIBINTL)
51libgnunet_plugin_testcmd_la_LDFLAGS = \
52 $(GN_PLUGIN_LDFLAGS)
53
54gnunet_service_testbed_SOURCES = \ 38gnunet_service_testbed_SOURCES = \
55 gnunet-service-testbed.c gnunet-service-testbed.h \ 39 gnunet-service-testbed.c gnunet-service-testbed.h \
56 gnunet-service-testbed_links.c gnunet-service-testbed_links.h \ 40 gnunet-service-testbed_links.c gnunet-service-testbed_links.h \
@@ -75,6 +59,7 @@ gnunet_service_testbed_LDADD = $(XLIB) \
75gnunet_testbed_profiler_SOURCES = \ 59gnunet_testbed_profiler_SOURCES = \
76 gnunet-testbed-profiler.c 60 gnunet-testbed-profiler.c
77gnunet_testbed_profiler_LDADD = $(XLIB) \ 61gnunet_testbed_profiler_LDADD = $(XLIB) \
62 $(top_builddir)/src/testing/libgnunettesting.la \
78 $(top_builddir)/src/util/libgnunetutil.la \ 63 $(top_builddir)/src/util/libgnunetutil.la \
79 libgnunettestbed.la 64 libgnunettestbed.la
80gnunet_testbed_profiler_LDFLAGS = \ 65gnunet_testbed_profiler_LDFLAGS = \
@@ -88,23 +73,6 @@ gnunet_helper_testbed_LDADD = $(XLIB) \
88 libgnunettestbed.la \ 73 libgnunettestbed.la \
89 $(LTLIBINTL) $(Z_LIBS) 74 $(LTLIBINTL) $(Z_LIBS)
90 75
91gnunet_cmd_SOURCES = \
92 gnunet-cmd.c
93gnunet_cmd_LDADD = $(XLIB) \
94 $(top_builddir)/src/util/libgnunetutil.la \
95 $(top_builddir)/src/testing/libgnunettesting.la \
96 libgnunettestbed.la \
97 $(LTLIBINTL) $(Z_LIBS)
98
99gnunet_cmds_helper_SOURCES = \
100 gnunet-cmds-helper.c
101gnunet_cmds_helper_LDADD = $(XLIB) \
102 $(top_builddir)/src/util/libgnunetutil.la \
103 $(top_builddir)/src/testing/libgnunettesting.la \
104 $(top_builddir)/src/transport/libgnunettransport.la \
105 libgnunettestbed.la \
106 $(LTLIBINTL) $(Z_LIBS)
107
108gnunet_daemon_testbed_blacklist_SOURCES = gnunet-daemon-testbed-blacklist.c 76gnunet_daemon_testbed_blacklist_SOURCES = gnunet-daemon-testbed-blacklist.c
109gnunet_daemon_testbed_blacklist_LDADD = $(XLIB) \ 77gnunet_daemon_testbed_blacklist_LDADD = $(XLIB) \
110 $(top_builddir)/src/transport/libgnunettransport.la \ 78 $(top_builddir)/src/transport/libgnunettransport.la \
@@ -127,17 +95,8 @@ lib_LTLIBRARIES = \
127 libgnunettestbed.la 95 libgnunettestbed.la
128 96
129libgnunettestbed_la_SOURCES = \ 97libgnunettestbed_la_SOURCES = \
130 testbed_api_cmd_local_test_finished.c \
131 testbed_api_cmd_send_peer_ready.c \
132 testbed_api_cmd_block_until_all_peers_started.c \
133 testbed_api_cmd_netjail_start.c \
134 testbed_api_cmd_netjail_start_testbed.c \
135 testbed_api_cmd_netjail_stop_testbed.c \
136 testbed_api_cmd_netjail_stop.c \
137 testbed_api.c testbed_api.h testbed.h \ 98 testbed_api.c testbed_api.h testbed.h \
138 testbed_api_hosts.c testbed_api_hosts.h testbed_helper.h \ 99 testbed_api_hosts.c testbed_api_hosts.h testbed_helper.h \
139 testbed_api_cmd_controller.c \
140 testbed_api_cmd_peer.c \
141 testbed_api_operations.c testbed_api_operations.h \ 100 testbed_api_operations.c testbed_api_operations.h \
142 testbed_api_peers.c testbed_api_peers.h \ 101 testbed_api_peers.c testbed_api_peers.h \
143 testbed_api_services.c \ 102 testbed_api_services.c \
@@ -156,24 +115,18 @@ libgnunettestbed_la_LIBADD = $(XLIB) \
156 $(top_builddir)/src/arm/libgnunetarm.la \ 115 $(top_builddir)/src/arm/libgnunetarm.la \
157 $(top_builddir)/src/util/libgnunetutil.la \ 116 $(top_builddir)/src/util/libgnunetutil.la \
158 $(LTLIBINTL) 117 $(LTLIBINTL)
159libgnunettestbed_la_DEPENDENCIES = \
160 $(top_builddir)/src/statistics/libgnunetstatistics.la \
161 $(top_builddir)/src/transport/libgnunettransport.la \
162 $(top_builddir)/src/hello/libgnunethello.la \
163 $(top_builddir)/src/testing/libgnunettesting.la \
164 $(top_builddir)/src/util/libgnunetutil.la
165libgnunettestbed_la_LDFLAGS = \ 118libgnunettestbed_la_LDFLAGS = \
166 $(GN_LIB_LDFLAGS) \ 119 $(GN_LIB_LDFLAGS) \
167 -version-info 0:0:0 120 -version-info 0:0:0
168 121
169generate_underlay_topology_SOURCES = generate-underlay-topology.c 122generate_underlay_topology_SOURCES = generate-underlay-topology.c
170generate_underlay_topology_LDADD = $(XLIB) \ 123generate_underlay_topology_LDADD = $(XLIB) \
124 $(top_builddir)/src/testing/libgnunettesting.la \
171 $(top_builddir)/src/util/libgnunetutil.la \ 125 $(top_builddir)/src/util/libgnunetutil.la \
172 libgnunettestbed.la \ 126 libgnunettestbed.la \
173 $(LTLIBINTL) -lsqlite3 127 $(LTLIBINTL) -lsqlite3
174 128
175check_PROGRAMS = \ 129check_PROGRAMS = \
176 test_testbed_api_cmd_netjail \
177 test_testbed_api_hosts \ 130 test_testbed_api_hosts \
178 test_gnunet_helper_testbed \ 131 test_gnunet_helper_testbed \
179 test_testbed_api_controllerlink \ 132 test_testbed_api_controllerlink \
@@ -208,7 +161,6 @@ check_PROGRAMS = \
208if ENABLE_TEST_RUN 161if ENABLE_TEST_RUN
209 AM_TESTS_ENVIRONMENT=export GNUNET_PREFIX=$${GNUNET_PREFIX:-@libdir@};export PATH=$${GNUNET_PREFIX:-@prefix@}/bin:$$PATH;unset XDG_DATA_HOME;unset XDG_CONFIG_HOME; 162 AM_TESTS_ENVIRONMENT=export GNUNET_PREFIX=$${GNUNET_PREFIX:-@libdir@};export PATH=$${GNUNET_PREFIX:-@prefix@}/bin:$$PATH;unset XDG_DATA_HOME;unset XDG_CONFIG_HOME;
210 TESTS = \ 163 TESTS = \
211 test_testbed_api_cmd_netjail \
212 test_testbed_api \ 164 test_testbed_api \
213 test_testbed_api_sd \ 165 test_testbed_api_sd \
214 test_testbed_api_operations \ 166 test_testbed_api_operations \
@@ -239,13 +191,6 @@ if ENABLE_TEST_RUN
239 $(underlay_testcases) 191 $(underlay_testcases)
240endif 192endif
241 193
242test_testbed_api_cmd_netjail_SOURCES = \
243 test_testbed_api_cmd_netjail.c
244test_testbed_api_cmd_netjail_LDADD = \
245 $(top_builddir)/src/testing/libgnunettesting.la \
246 $(top_builddir)/src/util/libgnunetutil.la \
247 libgnunettestbed.la
248
249test_testbed_api_SOURCES = \ 194test_testbed_api_SOURCES = \
250 test_testbed_api.c 195 test_testbed_api.c
251test_testbed_api_LDADD = \ 196test_testbed_api_LDADD = \
diff --git a/src/testbed/gnunet-cmd.c b/src/testbed/gnunet-cmd.c
deleted file mode 100644
index f232bd805..000000000
--- a/src/testbed/gnunet-cmd.c
+++ /dev/null
@@ -1,123 +0,0 @@
1/*
2 This file is part of GNUnet
3 Copyright (C) 2008--2013, 2016 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20
21/**
22 * @file testbed/gnunet-cmd.c
23 *
24 * @brief Binary to start testcase plugins
25 *
26 * @author t3sserakt
27 */
28
29#include "platform.h"
30#include "gnunet_util_lib.h"
31#include "gnunet_testing_lib.h"
32#include "gnunet_testing_plugin.h"
33
34/**
35 * Generic logging shortcut
36 */
37#define LOG(kind, ...) GNUNET_log (kind, __VA_ARGS__)
38
39#define NODE_BASE_IP "192.168.15."
40
41#define ROUTER_BASE_IP "92.68.150."
42
43/**
44 * Handle for a plugin.
45 */
46struct Plugin
47{
48 /**
49 * Name of the shared library.
50 */
51 char *library_name;
52
53 /**
54 * Plugin API.
55 */
56 struct GNUNET_TESTING_PluginFunctions *api;
57
58 char *node_ip;
59
60 char *plugin_name;
61
62 char *global_n;
63
64 char *local_m;
65
66 char *n;
67
68 char *m;
69};
70
71
72/**
73 * Main function to run the test cases.
74 *
75 * @param cls plugin to use.
76 *
77 */
78static void
79run (void *cls)
80{
81 struct Plugin *plugin = cls;
82 char *router_ip;
83 char *node_ip;
84
85 router_ip = GNUNET_malloc (strlen (ROUTER_BASE_IP) + strlen (plugin->m) + 1);
86 strcpy (router_ip, ROUTER_BASE_IP);
87 strcat (router_ip, plugin->m);
88
89 node_ip = GNUNET_malloc (strlen (NODE_BASE_IP) + strlen (plugin->n) + 1);
90 strcat (node_ip, NODE_BASE_IP);
91 strcat (node_ip, plugin->n);
92
93 plugin->api->start_testcase (NULL, router_ip, node_ip, NULL, NULL);
94
95}
96
97
98int
99main (int argc, char *const *argv)
100{
101 int rv = 0;
102 struct Plugin *plugin;
103
104 GNUNET_log_setup ("gnunet-cmd",
105 "DEBUG",
106 NULL);
107
108 plugin = GNUNET_new (struct Plugin);
109 plugin->api = GNUNET_PLUGIN_load (argv[0],
110 NULL);
111 plugin->library_name = GNUNET_strdup (argv[0]);
112
113 plugin->global_n = argv[1];
114 plugin->local_m = argv[2];
115 plugin->n = argv[3];
116 plugin->m = argv[4];
117
118 GNUNET_SCHEDULER_run (&run,
119 plugin);
120
121 GNUNET_free (plugin);
122 return rv;
123}
diff --git a/src/testbed/testbed_api.h b/src/testbed/testbed_api.h
index 9a54ca36c..d4ef832ad 100644
--- a/src/testbed/testbed_api.h
+++ b/src/testbed/testbed_api.h
@@ -37,11 +37,6 @@
37 */ 37 */
38#define HELPER_TESTBED_BINARY "gnunet-helper-testbed" 38#define HELPER_TESTBED_BINARY "gnunet-helper-testbed"
39 39
40/**
41 * Cmds Helper binary name
42 */
43#define HELPER_CMDS_BINARY "gnunet-cmds-helper"
44
45 40
46/** 41/**
47 * Enumeration of operations 42 * Enumeration of operations
@@ -185,6 +180,7 @@ struct OperationContext
185typedef void 180typedef void
186(*TESTBED_opcq_empty_cb) (void *cls); 181(*TESTBED_opcq_empty_cb) (void *cls);
187 182
183
188/** 184/**
189 * Handle to interact with a GNUnet testbed controller. Each 185 * Handle to interact with a GNUnet testbed controller. Each
190 * controller has at least one master handle which is created when the 186 * controller has at least one master handle which is created when the
diff --git a/src/testbed/testbed_api_cmd_controller.c b/src/testbed/testbed_api_cmd_controller.c
deleted file mode 100644
index 794b1ccf3..000000000
--- a/src/testbed/testbed_api_cmd_controller.c
+++ /dev/null
@@ -1,203 +0,0 @@
1/*
2 This file is part of GNUnet
3 Copyright (C) 2021 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20
21/**
22 * @file testbed/testbed_api_cmd_controller.c
23 * @brief Command to create a controller.
24 * @author t3sserakt
25 */
26#include "platform.h"
27#include "gnunet_util_lib.h"
28#include "gnunet_testing_ng_lib.h"
29#include "gnunet-service-testbed.h"
30#include "testbed_api_hosts.h"
31#include "gnunet_testbed_ng_service.h"
32
33
34/**
35 * Generic logging shortcut
36 */
37#define LOG(kind, ...) \
38 GNUNET_log (kind, __VA_ARGS__)
39
40
41/**
42*
43*
44* @param cls closure
45* @param cmd current CMD being cleaned up.
46*/
47static void
48controller_cleanup (void *cls,
49 const struct GNUNET_TESTING_Command *cmd)
50{
51 (void) cls;
52}
53
54
55/**
56 * Signature of the event handler function called by the
57 * respective event controller.
58 *
59 * @param cls closure
60 * @param event information about the event
61 */
62static void
63controller_cb (void *cls,
64 const struct GNUNET_TESTBED_EventInformation *event)
65{
66 struct ControllerState *cs = cls;
67
68 if (NULL != event->details.operation_finished.emsg)
69 {
70 LOG (GNUNET_ERROR_TYPE_ERROR, "There was an operation error: %s\n",
71 event->details.operation_finished.emsg);
72 GNUNET_TESTBED_shutdown_controller (cs);
73 }
74 else if (NULL == event->details.operation_finished.generic)
75 {
76 GNUNET_TESTBED_operation_done (event->op);
77 }
78}
79
80
81static void
82controller_run (void *cls,
83 const struct GNUNET_TESTING_Command *cmd,
84 struct GNUNET_TESTING_Interpreter *is)
85{
86 struct ControllerState *cs = cls;
87
88 cs->is = is;
89
90 cs->controller =
91 GNUNET_TESTBED_controller_connect (cs->host, cs->event_mask, &controller_cb,
92 cs);
93
94
95}
96
97/**
98*
99*
100* @param cls closure.
101* @param[out] ret result
102* @param trait name of the trait.
103* @param index index number of the object to offer.
104* @return #GNUNET_OK on success.
105*/
106static int
107controller_traits (void *cls,
108 const void **ret,
109 const char *trait,
110 unsigned int index)
111{
112 (void) cls;
113
114 struct ControllerState *cs = cls;
115
116
117 struct GNUNET_TESTING_Trait traits[] = {
118 {
119 .index = 0,
120 .trait_name = "controller",
121 .ptr = (const void *) cs->controller,
122 },
123 GNUNET_TESTING_trait_end ()
124 };
125
126 return GNUNET_TESTING_get_trait (traits,
127 ret,
128 trait,
129 index);
130 return GNUNET_OK;
131}
132
133
134/**
135 * Offer data from trait
136 *
137 * @param cmd command to extract the controller from.
138 * @param pt pointer to controller.
139 * @return #GNUNET_OK on success.
140 */
141int
142GNUNET_TESTBED_get_trait_controller (const struct GNUNET_TESTING_Command *cmd,
143 struct GNUNET_TESTBED_Controller **
144 controller)
145{
146 return cmd->traits (cmd->cls,
147 (const void **) controller,
148 "controller",
149 (unsigned int) 0);
150}
151
152
153/**
154 * Shutdown nicely
155 *
156 * @param cs controller state.
157 */
158void
159GNUNET_TESTBED_shutdown_controller (struct ControllerState *cs)
160{
161 LOG (GNUNET_ERROR_TYPE_DEBUG,
162 "Shutting down...\n");
163
164 cs->controller_going_down = GNUNET_YES;
165
166 if (NULL != cs->abort_task)
167 GNUNET_SCHEDULER_cancel (cs->abort_task);
168 if (NULL != cs->reg_handle)
169 GNUNET_TESTBED_cancel_registration (cs->reg_handle);
170 if (NULL != cs->controller)
171 GNUNET_TESTBED_controller_disconnect (cs->controller);
172 if (NULL != cs->cfg)
173 GNUNET_CONFIGURATION_destroy (cs->cfg);
174 if (NULL != cs->cp)
175 GNUNET_TESTBED_controller_stop (cs->cp);
176 if (NULL != cs->host)
177 GNUNET_TESTBED_host_destroy (cs->host);
178}
179
180
181
182struct GNUNET_TESTING_Command
183GNUNET_TESTBED_cmd_controller (const char *label,
184 const char *host,
185 uint64_t event_mask)
186{
187 struct ControllerState *cs;
188
189 cs = GNUNET_new (struct ControllerState);
190 cs->event_mask = event_mask;
191 cs->hostname = host;
192
193
194 struct GNUNET_TESTING_Command cmd = {
195 .cls = cs,
196 .label = label,
197 .run = &controller_run,
198 .cleanup = &controller_cleanup,
199 .traits = &controller_traits
200 };
201
202 return cmd;
203}
diff --git a/src/testbed/testbed_api_cmd_peer.c b/src/testbed/testbed_api_cmd_peer.c
deleted file mode 100644
index 2e253e408..000000000
--- a/src/testbed/testbed_api_cmd_peer.c
+++ /dev/null
@@ -1,281 +0,0 @@
1/*
2 This file is part of GNUnet
3 Copyright (C) 2021 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20
21
22/**
23 * @file testbed/testbed_api_cmd_peer.c
24 * @brief Command to create a peer.
25 * @author t3sserakt
26 */
27#include "platform.h"
28#include "gnunet_util_lib.h"
29#include "gnunet_testing_ng_lib.h"
30#include "gnunet_testbed_ng_service.h"
31#include "gnunet-service-testbed.h"
32#include "testbed_api_peers.h"
33
34
35/**
36 * Generic logging shortcut
37 */
38#define LOG(kind, ...) \
39 GNUNET_log (kind, __VA_ARGS__)
40
41
42/**
43*
44*
45* @param cls closure.
46* @param[out] ret result
47* @param trait name of the trait.
48* @param index index number of the object to offer.
49* @return #GNUNET_OK on success.
50*/
51static int
52peer_traits (void *cls,
53 const void **ret,
54 const char *trait,
55 unsigned int index)
56{
57 struct PeerCmdState *ps = cls;
58
59 struct GNUNET_TESTING_Trait traits[] = {
60 {
61 .index = 0,
62 .trait_name = "peer",
63 .ptr = (const void *) ps->peer,
64 },
65 GNUNET_TESTING_trait_end ()
66 };
67
68 return GNUNET_TESTING_get_trait (traits,
69 ret,
70 trait,
71 index);
72
73 return GNUNET_OK;
74}
75
76/**
77 * Offer data from trait
78 *
79 * @param cmd command to extract the controller from.
80 * @param peer pointer GNUNET_TESTBED_PEER
81 * @return #GNUNET_OK on success.
82 */
83int
84GNUNET_TESTBED_get_trait_peer (const struct GNUNET_TESTING_Command *cmd,
85 struct GNUNET_TESTBED_Peer **
86 peer)
87{
88 return cmd->traits (cmd->cls,
89 (const void **) peer,
90 "peer",
91 (unsigned int) 0);
92}
93
94
95/**
96*
97*
98* @param cls closure
99* @param cmd current CMD being cleaned up.
100*/
101static void
102peer_cleanup (void *cls,
103 const struct GNUNET_TESTING_Command *cmd)
104{
105 (void) cls;
106}
107
108
109/**
110 * abort task to run on test timed out
111 *
112 * @param cls NULL
113 * @param tc the task context
114 */
115static void
116do_abort (void *cls)
117{
118 struct PeerCmdState *ps = cls;
119
120 if (GNUNET_NO == ps->peer_ready)
121 {
122 LOG (GNUNET_ERROR_TYPE_WARNING, "Test timedout -- Aborting\n");
123 ps->abort_task = NULL;
124 GNUNET_TESTBED_shutdown_peer (ps);
125 }
126}
127
128
129/**
130 * Functions of this signature are called when a peer has been successfully
131 * created
132 *
133 * @param cls the closure from GNUNET_TESTBED_peer_create()
134 * @param emsg MAY contain an error description, if starting peer failed.
135 */
136static void
137peer_started_cb (void *cls,
138 const char *emsg)
139{
140 struct PeerCmdState *ps = cls;
141
142 GNUNET_TESTBED_operation_done (ps->operation);
143 if (NULL == emsg)
144 {
145 ps->peer_ready = GNUNET_YES;
146 }
147 else
148 {
149 LOG (GNUNET_ERROR_TYPE_ERROR, "There was an error starting a peer: %s\n",
150 emsg);
151 }
152
153}
154
155
156/**
157 * Functions of this signature are called when a peer has been successfully
158 * created
159 *
160 * @param cls the closure from GNUNET_TESTBED_peer_create()
161 * @param peer the handle for the created peer; NULL on any error during
162 * creation
163 * @param emsg NULL if peer is not NULL; else MAY contain the error description
164 */
165static void
166peer_create_cb (void *cls,
167 struct GNUNET_TESTBED_Peer *peer,
168 const char *emsg)
169{
170 struct PeerCmdState *ps = cls;
171
172 ps->peer = peer;
173 GNUNET_TESTBED_operation_done (ps->operation);
174 ps->operation = GNUNET_TESTBED_peer_start (NULL,
175 peer,
176 &peer_started_cb,
177 ps);
178}
179
180
181static void
182peer_run (void *cls,
183 const struct GNUNET_TESTING_Command *cmd,
184 struct GNUNET_TESTING_Interpreter *is)
185{
186 struct PeerCmdState *ps = cls;
187 const struct GNUNET_TESTING_Command *controller_cmd;
188 struct GNUNET_TESTBED_Controller *controller;
189
190 ps->is = is;
191 controller_cmd = GNUNET_TESTING_interpreter_lookup_command (
192 ps->controller_label);
193 GNUNET_TESTBED_get_trait_controller (controller_cmd,
194 &controller);
195 ps->host = GNUNET_TESTBED_host_create (ps->hostname, ps->username, ps->cfg,
196 ps->port);
197 ps->operation =
198 GNUNET_TESTBED_peer_create (controller,
199 ps->host,
200 ps->cfg,
201 &peer_create_cb,
202 ps);
203
204 ps->abort_task =
205 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
206 (GNUNET_TIME_UNIT_MINUTES, 5),
207 &do_abort,
208 ps);
209}
210
211
212void
213peer_stopped_cb (void *cls,
214 const char *emsg)
215{
216 struct PeerCmdState *ps = cls;
217
218 if (NULL != emsg)
219 {
220 LOG (GNUNET_ERROR_TYPE_ERROR, "There was an error stopping a peer: %s\n",
221 emsg);
222 }
223 GNUNET_TESTBED_operation_done (ps->operation);
224 GNUNET_TESTBED_peer_destroy (ps->peer);
225}
226
227
228/**
229 * Shutdown nicely
230 *
231 * @param cs controller state.
232 */
233void
234GNUNET_TESTBED_shutdown_peer (struct PeerCmdState *ps)
235{
236 LOG (GNUNET_ERROR_TYPE_DEBUG,
237 "Shutting down...\n");
238
239 ps->peer_going_down = GNUNET_YES;
240
241 if (NULL != ps->abort_task)
242 GNUNET_SCHEDULER_cancel (ps->abort_task);
243 if (NULL != ps->cfg)
244 GNUNET_CONFIGURATION_destroy (ps->cfg);
245 if (NULL != ps->host)
246 GNUNET_TESTBED_host_destroy (ps->host);
247
248 GNUNET_TESTBED_operation_done (ps->operation);
249 ps->operation = GNUNET_TESTBED_peer_stop (NULL, ps->peer, peer_stopped_cb,
250 ps);
251
252}
253
254
255struct GNUNET_TESTING_Command
256GNUNET_TESTBED_cmd_peer (const char *label,
257 const char *controller_label,
258 const char *hostname,
259 const char *username,
260 uint16_t port,
261 struct GNUNET_CONFIGURATION_Handle *cfg)
262{
263 struct PeerCmdState *ps;
264
265 ps = GNUNET_new (struct PeerCmdState);
266 ps->hostname = hostname;
267 ps->username = username;
268 ps->port = port;
269 ps->cfg = cfg;
270 ps->controller_label = controller_label;
271
272 struct GNUNET_TESTING_Command cmd = {
273 .cls = ps,
274 .label = label,
275 .run = &peer_run,
276 .cleanup = &peer_cleanup,
277 .traits = &peer_traits
278 };
279
280 return cmd;
281}
diff --git a/src/testbed/testbed_api_cmd_peer_store.c b/src/testbed/testbed_api_cmd_peer_store.c
deleted file mode 100644
index fc96f589c..000000000
--- a/src/testbed/testbed_api_cmd_peer_store.c
+++ /dev/null
@@ -1,60 +0,0 @@
1/*
2 This file is part of GNUnet
3 Copyright (C) 2021 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20
21/**
22 * @file testbed/testbed_api_cmd_peer_store.c
23 * @brief Command to start the peer store service of a peer.
24 * @author t3sserakt
25 */
26
27
28static void
29service_run (void *cls,
30 const struct GNUNET_TESTING_Command *cmd,
31 struct GNUNET_TESTING_Interpreter *is)
32{
33 struct PeerStoreState *pss = cls;
34
35 pss->psh = GNUNET_PEERSTORE_connect (pss->cfg);
36 GNUNET_TESTING_interpreter_next (ps->is);
37}
38
39
40struct GNUNET_TESTING_Command
41GNUNET_TESTBED_cmd_peer_store (const char *label,
42 struct GNUNET_CONFIGURATION_Handle *cfg)
43{
44
45 struct PeerStoreState *pss;
46
47 pss = GNUNET_new (struct PeerStoreState);
48 pss->cfg = cfg;
49
50 struct GNUNET_TESTING_Command cmd = {
51 .cls = pss,
52 .label = label,
53 .run = &peer_store_run,
54 .cleanup = &peer_store_cleanup,
55 .traits = &peer_store_traits
56 };
57
58 return cmd;
59
60}
diff --git a/src/testbed/testbed_api_cmd_send_peer_ready.c b/src/testbed/testbed_api_cmd_send_peer_ready.c
deleted file mode 100644
index f175a3e18..000000000
--- a/src/testbed/testbed_api_cmd_send_peer_ready.c
+++ /dev/null
@@ -1,103 +0,0 @@
1/*
2 This file is part of GNUnet
3 Copyright (C) 2021 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20
21/**
22 * @file testing_api_cmd_send_peer_ready.c
23 * @brief cmd to send a helper message if peer is ready.
24 * @author t3sserakt
25 */
26#include "platform.h"
27#include "gnunet_util_lib.h"
28#include "gnunet_testing_ng_lib.h"
29#include "testbed_helper.h"
30
31
32struct SendPeerReadyState
33{
34 TESTBED_CMD_HELPER_write_cb write_message;
35
36 struct GNUNET_CMDS_PEER_STARTED *reply;
37};
38
39
40static int
41send_peer_ready_traits (void *cls,
42 const void **ret,
43 const char *trait,
44 unsigned int index)
45{
46 return GNUNET_OK;
47}
48
49
50static void
51send_peer_ready_cleanup (void *cls,
52 const struct GNUNET_TESTING_Command *cmd)
53{
54 struct SendPeerReadyState *sprs = cls;
55
56 GNUNET_free (sprs->reply);
57 GNUNET_free (sprs);
58}
59
60
61static void
62send_peer_ready_run (void *cls,
63 const struct GNUNET_TESTING_Command *cmd,
64 struct GNUNET_TESTING_Interpreter *is)
65{
66 struct SendPeerReadyState *sprs = cls;
67 struct GNUNET_CMDS_PEER_STARTED *reply;
68 size_t msg_length;
69
70 msg_length = sizeof(struct GNUNET_CMDS_PEER_STARTED);
71 reply = GNUNET_new (struct GNUNET_CMDS_PEER_STARTED);
72 reply->header.type = htons (GNUNET_MESSAGE_TYPE_CMDS_HELPER_PEER_STARTED);
73 reply->header.size = htons ((uint16_t) msg_length);
74 sprs->reply = reply;
75 sprs->write_message ((struct GNUNET_MessageHeader *) reply, msg_length);
76}
77
78
79/**
80 * Create command.
81 *
82 * @param label name for command.
83 * @return command.
84 */
85struct GNUNET_TESTING_Command
86GNUNET_TESTING_cmd_send_peer_ready (const char *label,
87 TESTBED_CMD_HELPER_write_cb write_message)
88{
89 struct SendPeerReadyState *sprs;
90
91 sprs = GNUNET_new (struct SendPeerReadyState);
92 sprs->write_message = write_message;
93
94 struct GNUNET_TESTING_Command cmd = {
95 .cls = sprs,
96 .label = label,
97 .run = &send_peer_ready_run,
98 .cleanup = &send_peer_ready_cleanup,
99 .traits = &send_peer_ready_traits
100 };
101
102 return cmd;
103}
diff --git a/src/testbed/testbed_api_cmd_tng_connect.c b/src/testbed/testbed_api_cmd_tng_connect.c
deleted file mode 100644
index e52cd3c76..000000000
--- a/src/testbed/testbed_api_cmd_tng_connect.c
+++ /dev/null
@@ -1,55 +0,0 @@
1/*
2 This file is part of GNUnet
3 Copyright (C) 2021 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20
21
22/**
23 * @file testbed/testbed_api_cmd_peer.c
24 * @brief Command to create a peer.
25 * @author t3sserakt
26 */
27
28
29static void
30tng_connect_run (void *cls,
31 const struct GNUNET_TESTING_Command *cmd,
32 struct GNUNET_TESTING_Interpreter *is)
33{
34 struct TngConnectState *tcs = cls;
35
36 tcs->ah = GNUNET_TRANSPORT_application_init (tcs->cfg);
37}
38
39struct GNUNET_TESTING_Command
40GNUNET_TESTBED_cmd_tng_connect (const char *label)
41{
42 struct TngConnectState *tcs;
43
44 ts = GNUNET_new (struct TngConnectState);
45
46 struct GNUNET_TESTING_Command cmd = {
47 .cls = tcs,
48 .label = label,
49 .run = &tng_connect_run,
50 .cleanup = &tmg_connect_cleanup,
51 .traits = &tng_connect_traits
52 };
53
54 return cmd;
55}
diff --git a/src/testbed/testbed_api_cmd_tng_service.c b/src/testbed/testbed_api_cmd_tng_service.c
deleted file mode 100644
index cce2e14e3..000000000
--- a/src/testbed/testbed_api_cmd_tng_service.c
+++ /dev/null
@@ -1,276 +0,0 @@
1/*
2 This file is part of GNUnet
3 Copyright (C) 2021 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20
21/**
22 * @file testbed/testbed_api_cmd_tng.c
23 * @brief Command to start the transport service of a peer.
24 * @author t3sserakt
25 */
26#include "platform.h"
27#include "gnunet_util_lib.h"
28#include "gnunet_testing_ng_lib.h"
29#include "gnunet-service-testbed.h"
30#include "testbed_api_hosts.h"
31#include "gnunet_testbed_ng_service.h"
32
33/**
34 * Generic logging shortcut
35 */
36#define LOG(kind, ...) \
37 GNUNET_log (kind, __VA_ARGS__)
38
39
40/**
41 * abort task to run on test timed out
42 *
43 * @param cls NULL
44 * @param tc the task context
45 */
46static void
47do_abort (void *cls)
48{
49 struct TngState *ts = cls;
50
51 if (GNUNET_NO == ts->service_ready)
52 {
53 LOG (GNUNET_ERROR_TYPE_WARNING, "Test timedout -- Aborting\n");
54 ts->abort_task = NULL;
55 GNUNET_TESTBED_shutdown_service (ts);
56 }
57}
58
59/**
60*
61*
62* @param cls closure
63* @param cmd current CMD being cleaned up.
64*/
65static void
66tng_service_cleanup (void *cls,
67 const struct GNUNET_TESTING_Command *cmd)
68{
69 (void) cls;
70}
71
72/**
73*
74*
75* @param cls closure.
76* @param[out] ret result
77* @param trait name of the trait.
78* @param index index number of the object to offer.
79* @return #GNUNET_OK on success.
80*/
81static int
82tng_service_traits (void *cls,
83 const void **ret,
84 const char *trait,
85 unsigned int index)
86{
87 (void) cls;
88 return GNUNET_OK;
89}
90
91
92static void *
93notify_connect (void *cls,
94 const struct GNUNET_PeerIdentity *peer,
95 struct GNUNET_MQ_Handle *mq)
96{
97 struct TngState *ts = cls;
98
99 if (NULL != emsg)
100 {
101 LOG (GNUNET_ERROR_TYPE_ERROR,
102 "There was an error starting the transport subsystem: %s\n",
103 emsg);
104 }
105 GNUNET_TESTING_interpreter_next (ps->is);
106 return ts->nc (ts->cb_cls);
107
108}
109
110
111static void
112notify_disconnect (void *cls,
113 const struct GNUNET_PeerIdentity *peer,
114 void *handler_cls)
115{
116}
117
118
119
120
121/**
122 * Adapter function called to establish a connection to
123 * a service.
124 *
125 * @param cls closure
126 * @param cfg configuration of the peer to connect to; will be available until
127 * GNUNET_TESTBED_operation_done() is called on the operation returned
128 * from GNUNET_TESTBED_service_connect()
129 * @return service handle to return in 'op_result', NULL on error
130 */
131static void *
132connect_adapter (void *cls,
133 const struct GNUNET_CONFIGURATION_Handle *cfg)
134{
135 struct TngState *ts = cls;
136
137 service_handle = GNUNET_TRANSPORT_core_connect (cfg,
138 ts->peer_identity,
139 ts->handlers,
140 ts,
141 &notify_connect,
142 &notify_disconnect);
143 return service_handle;
144}
145
146
147/**
148 * Adapter function called to destroy a connection to
149 * a service.
150 *
151 * @param cls closure
152 * @param op_result service handle returned from the connect adapter
153 */
154static void
155disconnect_adapter (void *cls,
156 void *op_result)
157{
158}
159
160/**
161 * Callback to be called when a service connect operation is completed
162 *
163 * @param cls the callback closure from functions generating an operation
164 * @param op the operation that has been finished
165 * @param ca_result the service handle returned from GNUNET_TESTBED_ConnectAdapter()
166 * @param emsg error message in case the operation has failed; will be NULL if
167 * operation has executed successfully.
168 */
169static void
170service_connect_comp_cb (void *cls,
171 struct GNUNET_TESTBED_Operation *op,
172 void *ca_result,
173 const char *emsg)
174{
175 struct TngState *ts = cls;
176
177 if (NULL != emsg)
178 {
179 LOG (GNUNET_ERROR_TYPE_DEBUG,
180 "An error occurred connecting to service %s\n",
181 emsg);
182 GNUNET_TESTBED_operation_done (ts->operation);
183 }
184}
185
186
187/**
188 * Callback to be called when the requested peer information is available
189 *
190 * @param cls the closure from GNUNET_TESTBED_peer_getinformation()
191 * @param op the operation this callback corresponds to
192 * @param pinfo the result; will be NULL if the operation has failed
193 * @param emsg error message if the operation has failed;
194 * NULL if the operation is successful
195 */
196static void
197pi_cb (void *cls,
198 struct GNUNET_TESTBED_Operation *op,
199 const struct GNUNET_TESTBED_PeerInformation *pinfo,
200 const char *emsg)
201{
202 struct TngState *ts = cls;
203
204 ts->peer_identity = pinfo->id;
205 ts->operation =
206 GNUNET_TESTBED_service_connect (NULL, peer, NULL,
207 &service_connect_comp_cb, ts,
208 &connect_adapter,
209 &disconnect_adapter,
210 ts);
211}
212
213
214static void
215tng_service_run (void *cls,
216 const struct GNUNET_TESTING_Command *cmd,
217 struct GNUNET_TESTING_Interpreter *is)
218{
219 struct TngState *ts = cls;
220 struct GNUNET_TESTBED_Peer *peer;
221 const struct GNUNET_TESTING_Command *peer_cmd;
222
223 ts->is = is;
224 peer_cmd = GNUNET_TESTING_interpreter_lookup_command (
225 ts->peer_label);
226 GNUNET_TESTBED_get_trait_peer (peer_cmd,
227 &peer);
228
229 ts->operation = GNUNET_TESTBED_peer_get_information (peer,
230 GNUNET_TESTBED_PIT_IDENTITY,
231 &pi_cb,
232 ts);
233}
234
235/**
236 * Shutdown nicely
237 *
238 * @param cs service state.
239 */
240void
241GNUNET_TESTBED_shutdown_service (struct TngState *cs)
242{
243 LOG (GNUNET_ERROR_TYPE_DEBUG,
244 "Shutting down...\n");
245}
246
247
248struct GNUNET_TESTING_Command
249GNUNET_TESTBED_cmd_tng_service (const char *label,
250 const char *peer_label,
251 const struct GNUNET_MQ_MessageHandler *handlers,
252 GNUNET_TRANSPORT_NotifyConnect nc,
253 void *cb_cls)
254
255{
256 struct TngState *ts;
257
258 ts = GNUNET_new (struct TngState);
259 ts->servicename = servicename;
260 ts->peer_label = peer_label;
261 ts->handlers = handlers;
262 ts->nc = nc;
263 ts->nd = nd;
264 ts->cb_cls;
265
266
267 struct GNUNET_TESTING_Command cmd = {
268 .cls = ts,
269 .label = label,
270 .run = &tng_service_run,
271 .cleanup = &tmg_service_cleanup,
272 .traits = &tng_service_traits
273 };
274
275 return cmd;
276}
diff --git a/src/testbed/testbed_api_hosts.c b/src/testbed/testbed_api_hosts.c
index d0a460fe6..1a8d9976d 100644
--- a/src/testbed/testbed_api_hosts.c
+++ b/src/testbed/testbed_api_hosts.c
@@ -964,10 +964,22 @@ gen_rsh_suffix_args (const char *const *append_args)
964} 964}
965 965
966 966
967void 967/**
968GNUNET_TESTBED_extract_cfg (struct GNUNET_TESTBED_Host *host, const struct 968 * Functions with this signature are called whenever a
969 GNUNET_MessageHeader *message) 969 * complete message is received by the tokenizer.
970 *
971 * Do not call GNUNET_SERVER_mst_destroy in callback
972 *
973 * @param cls closure
974 * @param client identification of the client
975 * @param message the actual message
976 *
977 * @return #GNUNET_OK on success, #GNUNET_SYSERR to stop further processing
978 */
979static int
980helper_mst (void *cls, const struct GNUNET_MessageHeader *message)
970{ 981{
982 struct GNUNET_TESTBED_ControllerProc *cp = cls;
971 const struct GNUNET_TESTBED_HelperReply *msg; 983 const struct GNUNET_TESTBED_HelperReply *msg;
972 const char *hostname; 984 const char *hostname;
973 char *config; 985 char *config;
@@ -989,43 +1001,22 @@ GNUNET_TESTBED_extract_cfg (struct GNUNET_TESTBED_Host *host, const struct
989 xconfig_size)); 1001 xconfig_size));
990 /* Replace the configuration template present in the host with the 1002 /* Replace the configuration template present in the host with the
991 controller's running configuration */ 1003 controller's running configuration */
992 GNUNET_CONFIGURATION_destroy (host->cfg); 1004 GNUNET_CONFIGURATION_destroy (cp->host->cfg);
993 host->cfg = GNUNET_CONFIGURATION_create (); 1005 cp->host->cfg = GNUNET_CONFIGURATION_create ();
994 GNUNET_assert (GNUNET_CONFIGURATION_deserialize (host->cfg, 1006 GNUNET_assert (GNUNET_CONFIGURATION_deserialize (cp->host->cfg,
995 config, 1007 config,
996 config_size, 1008 config_size,
997 NULL)); 1009 NULL));
998 GNUNET_free (config); 1010 GNUNET_free (config);
999 if (NULL == (hostname = GNUNET_TESTBED_host_get_hostname (host))) 1011 if (NULL == (hostname = GNUNET_TESTBED_host_get_hostname (cp->host)))
1000 hostname = "localhost"; 1012 hostname = "localhost";
1001 /* Change the hostname so that we can connect to it */ 1013 /* Change the hostname so that we can connect to it */
1002 GNUNET_CONFIGURATION_set_value_string (host->cfg, 1014 GNUNET_CONFIGURATION_set_value_string (cp->host->cfg,
1003 "testbed", 1015 "testbed",
1004 "hostname", 1016 "hostname",
1005 hostname); 1017 hostname);
1006 host->locked = GNUNET_NO; 1018 cp->host->locked = GNUNET_NO;
1007} 1019 cp->host->controller_started = GNUNET_YES;
1008
1009/**
1010 * Functions with this signature are called whenever a
1011 * complete message is received by the tokenizer.
1012 *
1013 * Do not call GNUNET_SERVER_mst_destroy in callback
1014 *
1015 * @param cls closure
1016 * @param client identification of the client
1017 * @param message the actual message
1018 *
1019 * @return #GNUNET_OK on success, #GNUNET_SYSERR to stop further processing
1020 */
1021static int
1022helper_mst (void *cls, const struct GNUNET_MessageHeader *message)
1023{
1024 struct GNUNET_TESTBED_ControllerProc *cp = cls;
1025 struct GNUNET_TESTBED_Host *host = cp->host;
1026
1027 GNUNET_TESTBED_extract_cfg (host, message);
1028
1029 cp->cb (cp->cls, cp->host->cfg, GNUNET_OK); 1020 cp->cb (cp->cls, cp->host->cfg, GNUNET_OK);
1030 return GNUNET_OK; 1021 return GNUNET_OK;
1031} 1022}
diff --git a/src/testbed/testbed_helper.h b/src/testbed/testbed_helper.h
index af90ce85d..817ad559d 100644
--- a/src/testbed/testbed_helper.h
+++ b/src/testbed/testbed_helper.h
@@ -84,60 +84,6 @@ struct GNUNET_TESTBED_HelperReply
84 * un-compressed */ 84 * un-compressed */
85}; 85};
86 86
87/**
88 * Initialization message for gnunet-cmds-testbed to start cmd binary.
89 */
90struct GNUNET_CMDS_HelperInit
91{
92 /**
93 * Type is GNUNET_MESSAGE_TYPE_CMDS_HELPER_INIT
94 */
95 struct GNUNET_MessageHeader header;
96
97 /**
98 *
99 */
100 uint16_t plugin_name_size GNUNET_PACKED;
101
102 /* Followed by plugin name of the plugin running the test case. This is not NULL
103 * terminated */
104};
105
106/**
107 * Reply message from cmds helper process
108 */
109struct GNUNET_CMDS_HelperReply
110{
111 /**
112 * Type is GNUNET_MESSAGE_TYPE_CMDS_HELPER_REPLY
113 */
114 struct GNUNET_MessageHeader header;
115};
116
117struct GNUNET_CMDS_PEER_STARTED
118{
119 /**
120 * Type is GNUNET_MESSAGE_TYPE_CMDS_HELPER_PEER_STARTED
121 */
122 struct GNUNET_MessageHeader header;
123};
124
125struct GNUNET_CMDS_ALL_PEERS_STARTED
126{
127 /**
128 * Type is GNUNET_MESSAGE_TYPE_CMDS_HELPER_ALL_PEERS_STARTED
129 */
130 struct GNUNET_MessageHeader header;
131};
132
133struct GNUNET_CMDS_LOCAL_FINISHED
134{
135 /**
136 * Type is GNUNET_MESSAGE_TYPE_CMDS_HELPER_LOCAL_FINISHED
137 */
138 struct GNUNET_MessageHeader header;
139};
140
141GNUNET_NETWORK_STRUCT_END 87GNUNET_NETWORK_STRUCT_END
142#endif 88#endif
143/* end of testbed_helper.h */ 89/* end of testbed_helper.h */
diff --git a/src/testing/Makefile.am b/src/testing/Makefile.am
index 868e3fcec..038f0cb08 100644
--- a/src/testing/Makefile.am
+++ b/src/testing/Makefile.am
@@ -11,12 +11,46 @@ pkgcfgdir= $(pkgdatadir)/config.d/
11dist_pkgcfg_DATA = \ 11dist_pkgcfg_DATA = \
12 testing.conf 12 testing.conf
13 13
14libexec_PROGRAMS = \
15 gnunet-cmds-helper
16
17plugindir = $(libdir)/gnunet
18
19plugin_LTLIBRARIES = \
20 libgnunet_test_testing_plugin_testcmd.la
21
14lib_LTLIBRARIES = \ 22lib_LTLIBRARIES = \
15 libgnunettesting.la 23 libgnunettesting.la
16 24
25gnunet_cmds_helper_SOURCES = \
26 gnunet-cmds-helper.c
27gnunet_cmds_helper_LDADD = $(XLIB) \
28 $(top_builddir)/src/util/libgnunetutil.la \
29 libgnunettesting.la \
30 $(LTLIBINTL) $(Z_LIBS)
31
32libgnunet_test_testing_plugin_testcmd_la_SOURCES = \
33 test_testing_plugin_testcmd.c
34libgnunet_test_testing_plugin_testcmd_la_LIBADD = \
35 $(top_builddir)/src/util/libgnunetutil.la \
36 $(top_builddir)/src/arm/libgnunetarm.la \
37 libgnunettesting.la \
38 $(top_builddir)/src/statistics/libgnunetstatistics.la \
39 $(LTLIBINTL)
40libgnunet_test_testing_plugin_testcmd_la_LDFLAGS = \
41 $(GN_PLUGIN_LDFLAGS)
42
17libgnunettesting_la_SOURCES = \ 43libgnunettesting_la_SOURCES = \
18 testing.c \ 44 testing_api_cmd_local_test_finished.c \
45 testing_api_cmd_send_peer_ready.c \
46 testing_api_cmd_block_until_all_peers_started.c \
47 testing_api_cmd_netjail_start.c \
48 testing_api_cmd_netjail_start_testsystem.c \
49 testing_api_cmd_netjail_stop_testsystem.c \
50 testing_api_cmd_netjail_stop.c \
51 testing.c testing.h \
19 testing_api_cmd_system_create.c \ 52 testing_api_cmd_system_create.c \
53 testing_api_cmd_system_destroy.c \
20 testing_api_cmd_batch.c \ 54 testing_api_cmd_batch.c \
21 testing_api_cmd_hello_world.c \ 55 testing_api_cmd_hello_world.c \
22 testing_api_cmd_hello_world_birth.c \ 56 testing_api_cmd_hello_world_birth.c \
@@ -28,9 +62,6 @@ libgnunettesting_la_LIBADD = \
28 $(top_builddir)/src/arm/libgnunetarm.la \ 62 $(top_builddir)/src/arm/libgnunetarm.la \
29 $(top_builddir)/src/util/libgnunetutil.la \ 63 $(top_builddir)/src/util/libgnunetutil.la \
30 $(LTLIBINTL) 64 $(LTLIBINTL)
31libgnunettesting_la_DEPENDENCIES = \
32 $(top_builddir)/src/arm/libgnunetarm.la \
33 $(top_builddir)/src/util/libgnunetutil.la
34libgnunettesting_la_LDFLAGS = \ 65libgnunettesting_la_LDFLAGS = \
35 $(GN_LIB_LDFLAGS) \ 66 $(GN_LIB_LDFLAGS) \
36 -version-info 2:0:1 67 -version-info 2:0:1
@@ -56,6 +87,7 @@ list_keys_LDADD = \
56 87
57 88
58check_PROGRAMS = \ 89check_PROGRAMS = \
90 test_testing_api_cmd_netjail \
59 test_testing_hello_world \ 91 test_testing_hello_world \
60 test_testing_portreservation \ 92 test_testing_portreservation \
61 test_testing_servicestartup \ 93 test_testing_servicestartup \
@@ -66,6 +98,7 @@ check_PROGRAMS = \
66if ENABLE_TEST_RUN 98if ENABLE_TEST_RUN
67AM_TESTS_ENVIRONMENT=export GNUNET_PREFIX=$${GNUNET_PREFIX:-@libdir@};export PATH=$${GNUNET_PREFIX:-@prefix@}/bin:$$PATH;unset XDG_DATA_HOME;unset XDG_CONFIG_HOME; 99AM_TESTS_ENVIRONMENT=export GNUNET_PREFIX=$${GNUNET_PREFIX:-@libdir@};export PATH=$${GNUNET_PREFIX:-@prefix@}/bin:$$PATH;unset XDG_DATA_HOME;unset XDG_CONFIG_HOME;
68TESTS = \ 100TESTS = \
101 test_testing_api_cmd_netjail \
69 test_testing_hello_world \ 102 test_testing_hello_world \
70 test_testing_portreservation \ 103 test_testing_portreservation \
71 test_testing_peerstartup \ 104 test_testing_peerstartup \
@@ -73,6 +106,12 @@ TESTS = \
73 test_testing_servicestartup 106 test_testing_servicestartup
74endif 107endif
75 108
109test_testing_api_cmd_netjail_SOURCES = \
110 test_testing_api_cmd_netjail.c
111test_testing_api_cmd_netjail_LDADD = \
112 libgnunettesting.la \
113 $(top_builddir)/src/util/libgnunetutil.la
114
76test_testing_hello_world_SOURCES = \ 115test_testing_hello_world_SOURCES = \
77 test_testing_hello_world.c 116 test_testing_hello_world.c
78test_testing_hello_world_LDADD = \ 117test_testing_hello_world_LDADD = \
@@ -111,4 +150,5 @@ test_testing_sharedservices_LDADD = \
111 150
112EXTRA_DIST = \ 151EXTRA_DIST = \
113 test_testing_defaults.conf \ 152 test_testing_defaults.conf \
114 test_testing_sharedservices.conf 153 test_testing_sharedservices.conf \
154 testing_cmds.h
diff --git a/src/testbed/gnunet-cmds-helper.c b/src/testing/gnunet-cmds-helper.c
index 113e3c386..21ea33888 100644
--- a/src/testbed/gnunet-cmds-helper.c
+++ b/src/testing/gnunet-cmds-helper.c
@@ -1,6 +1,6 @@
1/* 1/*
2 This file is part of GNUnet 2 This file is part of GNUnet
3 Copyright (C) 2008--2013, 2016 GNUnet e.V. 3 Copyright (C) 2021 GNUnet e.V.
4 4
5 GNUnet is free software: you can redistribute it and/or modify it 5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published 6 under the terms of the GNU Affero General Public License as published
@@ -39,16 +39,15 @@
39#include "platform.h" 39#include "platform.h"
40#include "gnunet_util_lib.h" 40#include "gnunet_util_lib.h"
41#include "gnunet_testing_lib.h" 41#include "gnunet_testing_lib.h"
42#include "gnunet_testbed_service.h" 42#include "gnunet_testing_ng_lib.h"
43#include "testbed_helper.h" 43#include "testing_cmds.h"
44#include "testbed_api.h"
45#include "gnunet_testing_plugin.h" 44#include "gnunet_testing_plugin.h"
46#include <zlib.h> 45#include <zlib.h>
47 46
48 47
49/** 48/**
50 * Generic logging shortcut 49 * Generic logging shortcut
51 */ 50testing_api_cmd_block_until_all_peers_started.c */
52#define LOG(kind, ...) GNUNET_log (kind, __VA_ARGS__) 51#define LOG(kind, ...) GNUNET_log (kind, __VA_ARGS__)
53 52
54/** 53/**
@@ -75,27 +74,71 @@ struct Plugin
75 */ 74 */
76 struct GNUNET_TESTING_PluginFunctions *api; 75 struct GNUNET_TESTING_PluginFunctions *api;
77 76
77 /**
78 * IP address of the specific node the helper is running for.
79 *
80 */
78 char *node_ip; 81 char *node_ip;
79 82
83 /**
84 * Name of the test case plugin.
85 *
86 */
80 char *plugin_name; 87 char *plugin_name;
81 88
89 /**
90 * The number of namespaces
91 *
92 */
82 char *global_n; 93 char *global_n;
83 94
95 /**
96 * The number of local nodes per namespace.
97 *
98 */
84 char *local_m; 99 char *local_m;
85 100
101 /**
102 * The number of the namespace this node is in.
103 *
104 */
86 char *n; 105 char *n;
87 106
107 /**
108 * The number of the node in the namespace.
109 *
110 */
88 char *m; 111 char *m;
89}; 112};
90 113
114/**
115 * Struct with information about a specific node and the whole network namespace setup.
116 *
117 */
91struct NodeIdentifier 118struct NodeIdentifier
92{ 119{
120 /**
121 * The number of the namespace this node is in.
122 *
123 */
93 char *n; 124 char *n;
94 125
126 /**
127 * The number of the node in the namespace.
128 *
129 */
95 char *m; 130 char *m;
96 131
132 /**
133 * The number of namespaces
134 *
135 */
97 char *global_n; 136 char *global_n;
98 137
138 /**
139 * The number of local nodes per namespace.
140 *
141 */
99 char *local_m; 142 char *local_m;
100}; 143};
101 144
@@ -124,8 +167,8 @@ struct Plugin *plugin;
124 167
125/** 168/**
126 * The process handle to the testbed service 169 * The process handle to the testbed service
127 */ 170
128static struct GNUNET_OS_Process *cmd_binary_process; 171static struct GNUNET_OS_Process *cmd_binary_process;*/
129 172
130/** 173/**
131 * Handle to the testing system 174 * Handle to the testing system
@@ -163,11 +206,6 @@ static struct GNUNET_SCHEDULER_Task *read_task_id;
163static struct GNUNET_SCHEDULER_Task *write_task_id; 206static struct GNUNET_SCHEDULER_Task *write_task_id;
164 207
165/** 208/**
166 * Task to kill the child
167 */
168static struct GNUNET_SCHEDULER_Task *child_death_task_id;
169
170/**
171 * Are we done reading messages from stdin? 209 * Are we done reading messages from stdin?
172 */ 210 */
173static int done_reading; 211static int done_reading;
@@ -188,8 +226,6 @@ shutdown_task (void *cls)
188{ 226{
189 227
190 LOG_DEBUG ("Shutting down.\n"); 228 LOG_DEBUG ("Shutting down.\n");
191 LOG (GNUNET_ERROR_TYPE_ERROR,
192 "Shutting down tokenizer!\n");
193 229
194 if (NULL != read_task_id) 230 if (NULL != read_task_id)
195 { 231 {
@@ -205,11 +241,6 @@ shutdown_task (void *cls)
205 GNUNET_free (wc->data); 241 GNUNET_free (wc->data);
206 GNUNET_free (wc); 242 GNUNET_free (wc);
207 } 243 }
208 if (NULL != child_death_task_id)
209 {
210 GNUNET_SCHEDULER_cancel (child_death_task_id);
211 child_death_task_id = NULL;
212 }
213 if (NULL != stdin_fd) 244 if (NULL != stdin_fd)
214 (void) GNUNET_DISK_file_close (stdin_fd); 245 (void) GNUNET_DISK_file_close (stdin_fd);
215 if (NULL != stdout_fd) 246 if (NULL != stdout_fd)
@@ -236,9 +267,6 @@ write_task (void *cls)
236 struct WriteContext *wc = cls; 267 struct WriteContext *wc = cls;
237 ssize_t bytes_wrote; 268 ssize_t bytes_wrote;
238 269
239 LOG (GNUNET_ERROR_TYPE_ERROR,
240 "Writing data!\n");
241
242 GNUNET_assert (NULL != wc); 270 GNUNET_assert (NULL != wc);
243 write_task_id = NULL; 271 write_task_id = NULL;
244 bytes_wrote = GNUNET_DISK_file_write (stdout_fd, 272 bytes_wrote = GNUNET_DISK_file_write (stdout_fd,
@@ -257,12 +285,8 @@ write_task (void *cls)
257 { 285 {
258 GNUNET_free (wc->data); 286 GNUNET_free (wc->data);
259 GNUNET_free (wc); 287 GNUNET_free (wc);
260 LOG (GNUNET_ERROR_TYPE_ERROR,
261 "Written successfully!\n");
262 return; 288 return;
263 } 289 }
264 LOG (GNUNET_ERROR_TYPE_ERROR,
265 "Written data!\n");
266 write_task_id = GNUNET_SCHEDULER_add_write_file (GNUNET_TIME_UNIT_FOREVER_REL, 290 write_task_id = GNUNET_SCHEDULER_add_write_file (GNUNET_TIME_UNIT_FOREVER_REL,
267 stdout_fd, 291 stdout_fd,
268 &write_task, 292 &write_task,
@@ -271,39 +295,14 @@ write_task (void *cls)
271 295
272 296
273/** 297/**
274 * Task triggered whenever we receive a SIGCHLD (child 298 * Callback to write a message to the master loop.
275 * process died).
276 * 299 *
277 * @param cls closure, NULL if we need to self-restart
278 */ 300 */
279static void 301static void
280child_death_task (void *cls)
281{
282 const struct GNUNET_DISK_FileHandle *pr;
283 char c[16];
284
285 pr = GNUNET_DISK_pipe_handle (sigpipe, GNUNET_DISK_PIPE_END_READ);
286 child_death_task_id = NULL;
287 /* consume the signal */
288 GNUNET_break (0 < GNUNET_DISK_file_read (pr, &c, sizeof(c)));
289 LOG_DEBUG ("Got SIGCHLD\n");
290
291 LOG_DEBUG ("Child hasn't died. Resuming to monitor its status\n");
292 child_death_task_id =
293 GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL,
294 pr,
295 &child_death_task,
296 NULL);
297}
298
299
300static void
301write_message (struct GNUNET_MessageHeader *message, size_t msg_length) 302write_message (struct GNUNET_MessageHeader *message, size_t msg_length)
302{ 303{
303 struct WriteContext *wc; 304 struct WriteContext *wc;
304 305
305 LOG (GNUNET_ERROR_TYPE_ERROR,
306 "enter write_message!\n");
307 wc = GNUNET_new (struct WriteContext); 306 wc = GNUNET_new (struct WriteContext);
308 wc->length = msg_length; 307 wc->length = msg_length;
309 wc->data = message; 308 wc->data = message;
@@ -312,38 +311,10 @@ write_message (struct GNUNET_MessageHeader *message, size_t msg_length)
312 stdout_fd, 311 stdout_fd,
313 &write_task, 312 &write_task,
314 wc); 313 wc);
315 LOG (GNUNET_ERROR_TYPE_ERROR,
316 "leave write_message!\n");
317} 314}
318 315
319 316
320/** 317/**
321 * Function to run the test cases.
322 *
323 * @param cls plugin to use.
324 *
325 */
326/*static void
327run_plugin (void *cls)
328{
329 struct Plugin *plugin = cls;
330 char *router_ip;
331 char *node_ip;
332
333 router_ip = GNUNET_malloc (strlen (ROUTER_BASE_IP) + strlen (plugin->m) + 1);
334 strcpy (router_ip, ROUTER_BASE_IP);
335 strcat (router_ip, plugin->m);
336
337 node_ip = GNUNET_malloc (strlen (NODE_BASE_IP) + strlen (plugin->n) + 1);
338 strcat (node_ip, NODE_BASE_IP);
339 strcat (node_ip, plugin->n);
340
341 plugin->api->start_testcase (&write_message, router_ip, node_ip);
342
343}*/
344
345
346/**
347 * Functions with this signature are called whenever a 318 * Functions with this signature are called whenever a
348 * complete message is received by the tokenizer. 319 * complete message is received by the tokenizer.
349 * 320 *
@@ -369,9 +340,6 @@ tokenizer_cb (void *cls, const struct GNUNET_MessageHeader *message)
369 char *router_ip; 340 char *router_ip;
370 char *node_ip; 341 char *node_ip;
371 342
372 LOG (GNUNET_ERROR_TYPE_ERROR,
373 "tokenizer \n");
374
375 msize = ntohs (message->size); 343 msize = ntohs (message->size);
376 if (GNUNET_MESSAGE_TYPE_CMDS_HELPER_INIT == ntohs (message->type)) 344 if (GNUNET_MESSAGE_TYPE_CMDS_HELPER_INIT == ntohs (message->type))
377 { 345 {
@@ -391,27 +359,10 @@ tokenizer_cb (void *cls, const struct GNUNET_MessageHeader *message)
391 359
392 binary = GNUNET_OS_get_libexec_binary_path ("gnunet-cmd"); 360 binary = GNUNET_OS_get_libexec_binary_path ("gnunet-cmd");
393 361
394 LOG (GNUNET_ERROR_TYPE_ERROR,
395 "plugin_name: %s \n",
396 plugin_name);
397
398 // cmd_binary_process = GNUNET_OS_start_process (
399 /*GNUNET_OS_INHERIT_STD_ERR verbose? ,
400 NULL,
401 NULL,
402 NULL,
403 binary,
404 plugin_name,
405 ni->global_n,
406 ni->local_m,
407 ni->n,
408 ni->m,
409 NULL);*/
410
411 plugin = GNUNET_new (struct Plugin); 362 plugin = GNUNET_new (struct Plugin);
412 plugin->api = GNUNET_PLUGIN_load (plugin_name, 363 plugin->api = GNUNET_PLUGIN_load (plugin_name,
413 NULL); 364 NULL);
414 plugin->library_name = GNUNET_strdup (plugin_name); 365 plugin->library_name = GNUNET_strdup (basename (plugin_name));
415 366
416 plugin->global_n = ni->global_n; 367 plugin->global_n = ni->global_n;
417 plugin->local_m = ni->local_m; 368 plugin->local_m = ni->local_m;
@@ -428,53 +379,17 @@ tokenizer_cb (void *cls, const struct GNUNET_MessageHeader *message)
428 strcat (node_ip, plugin->n); 379 strcat (node_ip, plugin->n);
429 380
430 plugin->api->start_testcase (&write_message, router_ip, node_ip, plugin->m, 381 plugin->api->start_testcase (&write_message, router_ip, node_ip, plugin->m,
431 plugin->n); 382 plugin->n, plugin->local_m);
432
433 LOG (GNUNET_ERROR_TYPE_ERROR,
434 "We got here!\n");
435
436 /*if (NULL == cmd_binary_process)
437 {
438 LOG (GNUNET_ERROR_TYPE_ERROR,
439 "Starting plugin failed!\n");
440 return GNUNET_SYSERR;
441 }*/
442
443 LOG (GNUNET_ERROR_TYPE_ERROR,
444 "We got here 2!\n");
445
446 LOG (GNUNET_ERROR_TYPE_ERROR,
447 "global_n: %s local_n: %s n: %s m: %s.\n",
448 ni->global_n,
449 ni->local_m,
450 ni->n,
451 ni->m);
452
453 LOG (GNUNET_ERROR_TYPE_ERROR,
454 "We got here 3!\n");
455 383
456 GNUNET_free (binary); 384 GNUNET_free (binary);
457 385
458 // done_reading = GNUNET_YES;
459
460 msg_length = sizeof(struct GNUNET_CMDS_HelperReply); 386 msg_length = sizeof(struct GNUNET_CMDS_HelperReply);
461 reply = GNUNET_new (struct GNUNET_CMDS_HelperReply); 387 reply = GNUNET_new (struct GNUNET_CMDS_HelperReply);
462 reply->header.type = htons (GNUNET_MESSAGE_TYPE_CMDS_HELPER_REPLY); 388 reply->header.type = htons (GNUNET_MESSAGE_TYPE_CMDS_HELPER_REPLY);
463 reply->header.size = htons ((uint16_t) msg_length); 389 reply->header.size = htons ((uint16_t) msg_length);
464 390
465 LOG (GNUNET_ERROR_TYPE_ERROR,
466 "We got here 4!\n");
467
468 write_message ((struct GNUNET_MessageHeader *) reply, msg_length); 391 write_message ((struct GNUNET_MessageHeader *) reply, msg_length);
469 392
470 LOG (GNUNET_ERROR_TYPE_ERROR,
471 "We got here 5!\n");
472
473 /*child_death_task_id = GNUNET_SCHEDULER_add_read_file (
474 GNUNET_TIME_UNIT_FOREVER_REL,
475 GNUNET_DISK_pipe_handle (sigpipe, GNUNET_DISK_PIPE_END_READ),
476 &child_death_task,
477 NULL);*/
478 return GNUNET_OK; 393 return GNUNET_OK;
479 } 394 }
480 else if (GNUNET_MESSAGE_TYPE_CMDS_HELPER_ALL_PEERS_STARTED == ntohs ( 395 else if (GNUNET_MESSAGE_TYPE_CMDS_HELPER_ALL_PEERS_STARTED == ntohs (
@@ -515,8 +430,6 @@ read_task (void *cls)
515 if ((GNUNET_SYSERR == sread) || (0 == sread)) 430 if ((GNUNET_SYSERR == sread) || (0 == sread))
516 { 431 {
517 LOG_DEBUG ("STDIN closed\n"); 432 LOG_DEBUG ("STDIN closed\n");
518 LOG (GNUNET_ERROR_TYPE_ERROR,
519 "tokenizer shutting down during reading!\n");
520 GNUNET_SCHEDULER_shutdown (); 433 GNUNET_SCHEDULER_shutdown ();
521 return; 434 return;
522 } 435 }
@@ -530,8 +443,6 @@ read_task (void *cls)
530 return; 443 return;
531 } 444 }
532 LOG_DEBUG ("Read %u bytes\n", (unsigned int) sread); 445 LOG_DEBUG ("Read %u bytes\n", (unsigned int) sread);
533 LOG (GNUNET_ERROR_TYPE_ERROR,
534 "Read %u bytes\n", (unsigned int) sread);
535 /* FIXME: could introduce a GNUNET_MST_read2 to read 446 /* FIXME: could introduce a GNUNET_MST_read2 to read
536 directly from 'stdin_fd' and save a memcpy() here */ 447 directly from 'stdin_fd' and save a memcpy() here */
537 if (GNUNET_OK != 448 if (GNUNET_OK !=
@@ -625,13 +536,6 @@ main (int argc, char **argv)
625 ni->n = argv[3]; 536 ni->n = argv[3];
626 ni->m = argv[4]; 537 ni->m = argv[4];
627 538
628 LOG (GNUNET_ERROR_TYPE_ERROR,
629 "global_n: %s local_n: %s n: %s m: %s.\n",
630 ni->global_n,
631 ni->local_m,
632 ni->n,
633 ni->m);
634
635 status = GNUNET_OK; 539 status = GNUNET_OK;
636 if (NULL == 540 if (NULL ==
637 (sigpipe = GNUNET_DISK_pipe (GNUNET_DISK_PF_NONE))) 541 (sigpipe = GNUNET_DISK_pipe (GNUNET_DISK_PF_NONE)))
@@ -648,8 +552,7 @@ main (int argc, char **argv)
648 options, 552 options,
649 &run, 553 &run,
650 ni); 554 ni);
651 LOG (GNUNET_ERROR_TYPE_ERROR, 555
652 "run finished\n");
653 GNUNET_SIGNAL_handler_uninstall (shc_chld); 556 GNUNET_SIGNAL_handler_uninstall (shc_chld);
654 shc_chld = NULL; 557 shc_chld = NULL;
655 GNUNET_DISK_pipe_close (sigpipe); 558 GNUNET_DISK_pipe_close (sigpipe);
diff --git a/src/testbed/netjail_core.sh b/src/testing/netjail_core.sh
index 792b1df24..cf350d3fa 100755
--- a/src/testbed/netjail_core.sh
+++ b/src/testing/netjail_core.sh
@@ -1,7 +1,7 @@
1#!/bin/sh 1#!/bin/sh
2# 2#
3 3
4JAILOR=${SUDO_USER:?must run in sudo} 4
5 5
6# running with `sudo` is required to be 6# running with `sudo` is required to be
7# able running the actual commands as the 7# able running the actual commands as the
@@ -90,18 +90,27 @@ netjail_node_add_default() {
90} 90}
91 91
92netjail_node_exec() { 92netjail_node_exec() {
93 JAILOR=${SUDO_USER:?must run in sudo}
93 NODE=$1 94 NODE=$1
94 FD_IN=$2 95 FD_IN=$2
95 FD_OUT=$3 96 FD_OUT=$3
96 shift 3 97 shift 3
97 98
98 unshare -fp --kill-child -- ip netns exec $NODE sudo -u $JAILOR -- $@ 1>& $FD_OUT 0<& $FD_IN 99 ip netns exec $NODE sudo -u $JAILOR -- $@ 1>& $FD_OUT 0<& $FD_IN
99} 100}
100 101
101netjail_node_exec_without_fds() { 102netjail_node_exec_without_fds() {
103 JAILOR=${SUDO_USER:?must run in sudo}
104 NODE=$1
105 shift 1
106
107 ip netns exec $NODE sudo -u $JAILOR -- $@
108}
109
110netjail_node_exec_without_fds_and_sudo() {
102 NODE=$1 111 NODE=$1
103 shift 1 112 shift 1
104 113
105 unshare -fp --kill-child -- ip netns exec $NODE sudo -u $JAILOR -- $@ 114 ip netns exec $NODE $@
106} 115}
107 116
diff --git a/src/testbed/netjail_exec.sh b/src/testing/netjail_exec.sh
index b76d2e444..17a7caaac 100755
--- a/src/testbed/netjail_exec.sh
+++ b/src/testing/netjail_exec.sh
@@ -1,5 +1,5 @@
1#!/bin/sh 1#!/bin/sh
2. "./../testbed/netjail_core.sh" 2. "./../testing/netjail_core.sh"
3 3
4set -eu 4set -eu
5set -x 5set -x
@@ -13,4 +13,4 @@ NODE=$(netjail_print_name "N" $N $M)
13 13
14 14
15 15
16netjail_node_exec_without_fds $NODE $3 $4 $5 $1 $2 16netjail_node_exec_without_fds_and_sudo $NODE $3 $4 $5 $1 $2
diff --git a/src/testbed/netjail_start.sh b/src/testing/netjail_start.sh
index 4c1c33c83..0984a3c42 100755
--- a/src/testbed/netjail_start.sh
+++ b/src/testing/netjail_start.sh
@@ -1,5 +1,5 @@
1#!/bin/sh 1#!/bin/sh
2. "./../testbed/netjail_core.sh" 2. "./../testing/netjail_core.sh"
3 3
4set -eu 4set -eu
5set -x 5set -x
diff --git a/src/testbed/netjail_stop.sh b/src/testing/netjail_stop.sh
index 689bf7ae9..08f68cf7f 100755
--- a/src/testbed/netjail_stop.sh
+++ b/src/testing/netjail_stop.sh
@@ -1,5 +1,5 @@
1#!/bin/sh 1#!/bin/sh
2. "./../testbed/netjail_core.sh" 2. "./../testing/netjail_core.sh"
3 3
4set -eu 4set -eu
5set -x 5set -x
diff --git a/src/testbed/test_testbed_api_cmd_netjail.c b/src/testing/test_testing_api_cmd_netjail.c
index 8bb9e40e8..543642109 100644
--- a/src/testbed/test_testbed_api_cmd_netjail.c
+++ b/src/testing/test_testing_api_cmd_netjail.c
@@ -25,7 +25,6 @@
25 */ 25 */
26#include "platform.h" 26#include "platform.h"
27#include "gnunet_testing_ng_lib.h" 27#include "gnunet_testing_ng_lib.h"
28#include "gnunet_testbed_ng_service.h"
29#include "gnunet_util_lib.h" 28#include "gnunet_util_lib.h"
30 29
31 30
@@ -39,18 +38,18 @@ static void
39run (void *cls) 38run (void *cls)
40{ 39{
41 struct GNUNET_TESTING_Command commands[] = { 40 struct GNUNET_TESTING_Command commands[] = {
42 GNUNET_TESTBED_cmd_netjail_start ("netjail-start-1", 41 GNUNET_TESTING_cmd_netjail_start ("netjail-start-1",
43 "2", 42 "2",
44 "2"), 43 "2"),
45 GNUNET_TESTBED_cmd_netjail_start_testbed ("netjail-start-testbed-1", 44 GNUNET_TESTING_cmd_netjail_start_testing_system ("netjail-start-testbed-1",
46 "2", 45 "2",
47 "2", 46 "2",
48 "libgnunet_plugin_testcmd"), 47 "libgnunet_plugin_testcmd"),
49 GNUNET_TESTBED_cmd_stop_testbed ("stop-testbed", 48 GNUNET_TESTING_cmd_stop_testing_system ("stop-testbed",
50 "netjail-start-testbed-1", 49 "netjail-start-testbed-1",
51 "2", 50 "2",
52 "2"), 51 "2"),
53 GNUNET_TESTBED_cmd_netjail_stop ("netjail-stop-1", 52 GNUNET_TESTING_cmd_netjail_stop ("netjail-stop-1",
54 "2", 53 "2",
55 "2"), 54 "2"),
56 GNUNET_TESTING_cmd_end () 55 GNUNET_TESTING_cmd_end ()
diff --git a/src/testbed/plugin_testcmd.c b/src/testing/test_testing_plugin_testcmd.c
index 797826781..444272fcd 100644
--- a/src/testbed/plugin_testcmd.c
+++ b/src/testing/test_testing_plugin_testcmd.c
@@ -1,6 +1,6 @@
1/* 1/*
2 This file is part of GNUnet 2 This file is part of GNUnet
3 Copyright (C) 2013, 2014 GNUnet e.V. 3 Copyright (C) 2021 GNUnet e.V.
4 4
5 GNUnet is free software: you can redistribute it and/or modify it 5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published 6 under the terms of the GNU Affero General Public License as published
@@ -26,7 +26,7 @@
26#include "platform.h" 26#include "platform.h"
27#include "gnunet_testing_ng_lib.h" 27#include "gnunet_testing_ng_lib.h"
28#include "gnunet_util_lib.h" 28#include "gnunet_util_lib.h"
29#include "gnunet_testbed_ng_service.h" 29#include "gnunet_testing_ng_lib.h"
30 30
31/** 31/**
32 * Generic logging shortcut 32 * Generic logging shortcut
@@ -45,10 +45,11 @@ all_peers_started ()
45} 45}
46 46
47static void 47static void
48start_testcase (TESTBED_CMD_HELPER_write_cb write_message, char *router_ip, 48start_testcase (TESTING_CMD_HELPER_write_cb write_message, char *router_ip,
49 char *node_ip, 49 char *node_ip,
50 char *n, 50 char *n,
51 char *m) 51 char *m,
52 char *local_m)
52{ 53{
53 struct GNUNET_TIME_Absolute now = GNUNET_TIME_absolute_get (); 54 struct GNUNET_TIME_Absolute now = GNUNET_TIME_absolute_get ();
54 55
diff --git a/src/testbed/testbed_api_cmd_block_until_all_peers_started.c b/src/testing/testing_api_cmd_block_until_all_peers_started.c
index 8659fbb46..e9d3f0ed3 100644
--- a/src/testbed/testbed_api_cmd_block_until_all_peers_started.c
+++ b/src/testing/testing_api_cmd_block_until_all_peers_started.c
@@ -32,12 +32,24 @@
32 */ 32 */
33#define LOG(kind, ...) GNUNET_log (kind, __VA_ARGS__) 33#define LOG(kind, ...) GNUNET_log (kind, __VA_ARGS__)
34 34
35/**
36 * Struct with information for callbacks.
37 *
38 */
35struct BlockState 39struct BlockState
36{ 40{
41 /**
42 * Flag to indicate if all peers have started.
43 *
44 */
37 unsigned int *all_peers_started; 45 unsigned int *all_peers_started;
38}; 46};
39 47
40 48
49/**
50 * Trait function of this cmd does nothing.
51 *
52 */
41static int 53static int
42block_until_all_peers_started_traits (void *cls, 54block_until_all_peers_started_traits (void *cls,
43 const void **ret, 55 const void **ret,
@@ -48,6 +60,10 @@ block_until_all_peers_started_traits (void *cls,
48} 60}
49 61
50 62
63/**
64 * The cleanup function of this cmd frees resources the cmd allocated.
65 *
66 */
51static void 67static void
52block_until_all_peers_started_cleanup (void *cls, 68block_until_all_peers_started_cleanup (void *cls,
53 const struct GNUNET_TESTING_Command *cmd) 69 const struct GNUNET_TESTING_Command *cmd)
@@ -58,16 +74,24 @@ block_until_all_peers_started_cleanup (void *cls,
58} 74}
59 75
60 76
77/**
78 * This function does nothing but to start the cmd.
79 *
80 */
61static void 81static void
62block_until_all_peers_started_run (void *cls, 82block_until_all_peers_started_run (void *cls,
63 const struct GNUNET_TESTING_Command *cmd, 83 const struct GNUNET_TESTING_Command *cmd,
64 struct GNUNET_TESTING_Interpreter *is) 84 struct GNUNET_TESTING_Interpreter *is)
65{ 85{
66 LOG (GNUNET_ERROR_TYPE_ERROR, 86 LOG (GNUNET_ERROR_TYPE_DEBUG,
67 "block_until_all_peers_started_run!\n"); 87 "block_until_all_peers_started_run!\n");
68} 88}
69 89
70 90
91/**
92 * Function to check if BlockState#all_peers_started is GNUNET_YES. In that case interpreter_next will be called.
93 *
94 */
71static int 95static int
72block_until_all_peers_started_finish (void *cls, 96block_until_all_peers_started_finish (void *cls,
73 GNUNET_SCHEDULER_TaskCallback cont, 97 GNUNET_SCHEDULER_TaskCallback cont,
@@ -76,20 +100,10 @@ block_until_all_peers_started_finish (void *cls,
76 struct BlockState *bs = cls; 100 struct BlockState *bs = cls;
77 unsigned int *ret = bs->all_peers_started; 101 unsigned int *ret = bs->all_peers_started;
78 102
79 LOG (GNUNET_ERROR_TYPE_ERROR,
80 "We got here 10\n");
81
82 if (GNUNET_YES == *ret) 103 if (GNUNET_YES == *ret)
83 { 104 {
84 LOG (GNUNET_ERROR_TYPE_ERROR,
85 "We do not need to block anymore!\n");
86 cont (cont_cls); 105 cont (cont_cls);
87 } 106 }
88 else
89 {
90 LOG (GNUNET_ERROR_TYPE_ERROR,
91 "You shall not pass!\n");
92 }
93 107
94 return *ret; 108 return *ret;
95} 109}
@@ -99,6 +113,7 @@ block_until_all_peers_started_finish (void *cls,
99 * Create command. 113 * Create command.
100 * 114 *
101 * @param label name for command. 115 * @param label name for command.
116 * @param all_peers_started Flag which will be set from outside.
102 * @return command. 117 * @return command.
103 */ 118 */
104struct GNUNET_TESTING_Command 119struct GNUNET_TESTING_Command
@@ -108,10 +123,6 @@ GNUNET_TESTING_cmd_block_until_all_peers_started (const char *label,
108{ 123{
109 struct BlockState *bs; 124 struct BlockState *bs;
110 125
111 LOG (GNUNET_ERROR_TYPE_ERROR,
112 "we have all_peers_started: %u\n",
113 *all_peers_started);
114
115 bs = GNUNET_new (struct BlockState); 126 bs = GNUNET_new (struct BlockState);
116 bs->all_peers_started = all_peers_started; 127 bs->all_peers_started = all_peers_started;
117 128
diff --git a/src/testbed/testbed_api_cmd_local_test_finished.c b/src/testing/testing_api_cmd_local_test_finished.c
index 8829f1b9a..383de4c10 100644
--- a/src/testbed/testbed_api_cmd_local_test_finished.c
+++ b/src/testing/testing_api_cmd_local_test_finished.c
@@ -26,21 +26,38 @@
26#include "platform.h" 26#include "platform.h"
27#include "gnunet_util_lib.h" 27#include "gnunet_util_lib.h"
28#include "gnunet_testing_ng_lib.h" 28#include "gnunet_testing_ng_lib.h"
29#include "testbed_helper.h" 29#include "testing_cmds.h"
30 30
31/** 31/**
32 * Generic logging shortcut 32 * Generic logging shortcut
33 */ 33 */
34#define LOG(kind, ...) GNUNET_log (kind, __VA_ARGS__) 34#define LOG(kind, ...) GNUNET_log (kind, __VA_ARGS__)
35 35
36
37/**
38 * Struct to hold information for callbacks.
39 *
40 */
36struct LocalFinishedState 41struct LocalFinishedState
37{ 42{
38 TESTBED_CMD_HELPER_write_cb write_message; 43 /**
39 44 * Callback to write messages to the master loop.
45 *
46 */
47 TESTING_CMD_HELPER_write_cb write_message;
48
49 /**
50 * The message send back to the master loop.
51 *
52 */
40 struct GNUNET_CMDS_LOCAL_FINISHED *reply; 53 struct GNUNET_CMDS_LOCAL_FINISHED *reply;
41}; 54};
42 55
43 56
57/**
58 * Trait function of this cmd does nothing.
59 *
60 */
44static int 61static int
45local_test_finished_traits (void *cls, 62local_test_finished_traits (void *cls,
46 const void **ret, 63 const void **ret,
@@ -51,6 +68,10 @@ local_test_finished_traits (void *cls,
51} 68}
52 69
53 70
71/**
72 * The cleanup function of this cmd frees resources the cmd allocated.
73 *
74 */
54static void 75static void
55local_test_finished_cleanup (void *cls, 76local_test_finished_cleanup (void *cls,
56 const struct GNUNET_TESTING_Command *cmd) 77 const struct GNUNET_TESTING_Command *cmd)
@@ -62,6 +83,10 @@ local_test_finished_cleanup (void *cls,
62} 83}
63 84
64 85
86/**
87 * This function sends a GNUNET_MESSAGE_TYPE_CMDS_HELPER_LOCAL_FINISHED message to the master loop.
88 *
89 */
65static void 90static void
66local_test_finished_run (void *cls, 91local_test_finished_run (void *cls,
67 const struct GNUNET_TESTING_Command *cmd, 92 const struct GNUNET_TESTING_Command *cmd,
@@ -72,27 +97,26 @@ local_test_finished_run (void *cls,
72 struct GNUNET_CMDS_LOCAL_FINISHED *reply; 97 struct GNUNET_CMDS_LOCAL_FINISHED *reply;
73 size_t msg_length; 98 size_t msg_length;
74 99
75 LOG (GNUNET_ERROR_TYPE_ERROR,
76 "We got here 12!\n");
77
78 msg_length = sizeof(struct GNUNET_CMDS_LOCAL_FINISHED); 100 msg_length = sizeof(struct GNUNET_CMDS_LOCAL_FINISHED);
79 reply = GNUNET_new (struct GNUNET_CMDS_LOCAL_FINISHED); 101 reply = GNUNET_new (struct GNUNET_CMDS_LOCAL_FINISHED);
80 reply->header.type = htons (GNUNET_MESSAGE_TYPE_CMDS_HELPER_LOCAL_FINISHED); 102 reply->header.type = htons (GNUNET_MESSAGE_TYPE_CMDS_HELPER_LOCAL_FINISHED);
81 reply->header.size = htons ((uint16_t) msg_length); 103 reply->header.size = htons ((uint16_t) msg_length);
82 lfs->reply = reply; 104 lfs->reply = reply;
83 lfs->write_message ((struct GNUNET_MessageHeader *) reply, msg_length); 105 lfs->write_message ((struct GNUNET_MessageHeader *) reply, msg_length);
84
85 LOG (GNUNET_ERROR_TYPE_ERROR,
86 "We got here 13!\n");
87} 106}
88 107
89 108
109/**
110 * This finish function will stop the local loop without shutting down the scheduler, because we do not call the continuation, which is the interpreter_next method.
111 *
112 */
90static int 113static int
91local_test_finished_finish (void *cls, 114local_test_finished_finish (void *cls,
92 GNUNET_SCHEDULER_TaskCallback cont, 115 GNUNET_SCHEDULER_TaskCallback cont,
93 void *cont_cls) 116 void *cont_cls)
94{ 117{
95 // This will stop the local loop without shutting down the scheduler, because we do not call the continuation, which is the interpreter_next method. 118 LOG (GNUNET_ERROR_TYPE_DEBUG,
119 "Stopping local loop\n");
96 return GNUNET_YES; 120 return GNUNET_YES;
97} 121}
98 122
@@ -101,18 +125,16 @@ local_test_finished_finish (void *cls,
101 * Create command. 125 * Create command.
102 * 126 *
103 * @param label name for command. 127 * @param label name for command.
128 * @param write_message Callback to write messages to the master loop.
104 * @return command. 129 * @return command.
105 */ 130 */
106struct GNUNET_TESTING_Command 131struct GNUNET_TESTING_Command
107GNUNET_TESTING_cmd_local_test_finished (const char *label, 132GNUNET_TESTING_cmd_local_test_finished (const char *label,
108 TESTBED_CMD_HELPER_write_cb 133 TESTING_CMD_HELPER_write_cb
109 write_message) 134 write_message)
110{ 135{
111 struct LocalFinishedState *lfs; 136 struct LocalFinishedState *lfs;
112 137
113 LOG (GNUNET_ERROR_TYPE_ERROR,
114 "We got here 11!\n");
115
116 lfs = GNUNET_new (struct LocalFinishedState); 138 lfs = GNUNET_new (struct LocalFinishedState);
117 lfs->write_message = write_message; 139 lfs->write_message = write_message;
118 140
diff --git a/src/testbed/testbed_api_cmd_netjail_start.c b/src/testing/testing_api_cmd_netjail_start.c
index bc035abe7..536b356a6 100644
--- a/src/testbed/testbed_api_cmd_netjail_start.c
+++ b/src/testing/testing_api_cmd_netjail_start.c
@@ -26,16 +26,22 @@
26#include "platform.h" 26#include "platform.h"
27#include "gnunet_util_lib.h" 27#include "gnunet_util_lib.h"
28#include "gnunet_testing_ng_lib.h" 28#include "gnunet_testing_ng_lib.h"
29#include "gnunet_testbed_ng_service.h"
30 29
31#define NETJAIL_START_SCRIPT "./../testbed/netjail_start.sh" 30#define NETJAIL_START_SCRIPT "./../testing/netjail_start.sh"
32 31
32/**
33 * Struct to hold information for callbacks.
34 *
35 */
33struct NetJailState 36struct NetJailState
34{ 37{
38 // Child Wait handle
35 struct GNUNET_ChildWaitHandle *cwh; 39 struct GNUNET_ChildWaitHandle *cwh;
36 40
41 // Number of local nodes in each namespace.
37 char *local_m; 42 char *local_m;
38 43
44 // The number of namespaces.
39 char *global_n; 45 char *global_n;
40 46
41 /** 47 /**
@@ -43,16 +49,15 @@ struct NetJailState
43 */ 49 */
44 struct GNUNET_OS_Process *start_proc; 50 struct GNUNET_OS_Process *start_proc;
45 51
52 // Flag indication if the script finished.
46 unsigned int finished; 53 unsigned int finished;
47}; 54};
48 55
49 56
50/** 57/**
51* 58 * The cleanup function of this cmd frees resources the cmd allocated.
52* 59 *
53* @param cls closure 60 */
54* @param cmd current CMD being cleaned up.
55*/
56static void 61static void
57netjail_start_cleanup (void *cls, 62netjail_start_cleanup (void *cls,
58 const struct GNUNET_TESTING_Command *cmd) 63 const struct GNUNET_TESTING_Command *cmd)
@@ -82,14 +87,9 @@ netjail_start_cleanup (void *cls,
82 87
83 88
84/** 89/**
85* 90 * Trait function of this cmd does nothing.
86* 91 *
87* @param cls closure. 92 */
88* @param[out] ret result
89* @param trait name of the trait.
90* @param index index number of the object to offer.
91* @return #GNUNET_OK on success.
92*/
93static int 93static int
94netjail_start_traits (void *cls, 94netjail_start_traits (void *cls,
95 const void **ret, 95 const void **ret,
@@ -99,6 +99,11 @@ netjail_start_traits (void *cls,
99 return GNUNET_OK; 99 return GNUNET_OK;
100} 100}
101 101
102
103/**
104 * Callback which will be called if the setup script finished.
105 *
106 */
102static void 107static void
103child_completed_callback (void *cls, 108child_completed_callback (void *cls,
104 enum GNUNET_OS_ProcessStatusType type, 109 enum GNUNET_OS_ProcessStatusType type,
@@ -123,7 +128,7 @@ child_completed_callback (void *cls,
123 128
124 129
125/** 130/**
126* Run the "hello world" CMD. 131* The run method starts the script which setup the network namespaces.
127* 132*
128* @param cls closure. 133* @param cls closure.
129* @param cmd CMD being run. 134* @param cmd CMD being run.
@@ -139,6 +144,25 @@ netjail_start_run (void *cls,
139 ns->local_m, 144 ns->local_m,
140 ns->global_n, 145 ns->global_n,
141 NULL}; 146 NULL};
147 unsigned int helper_check = GNUNET_OS_check_helper_binary (
148 NETJAIL_START_SCRIPT,
149 GNUNET_YES,
150 NULL);
151
152 if (GNUNET_NO == helper_check)
153 {
154 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
155 "No SUID for %s!\n",
156 NETJAIL_START_SCRIPT);
157 GNUNET_TESTING_interpreter_fail ();
158 }
159 else if (GNUNET_NO == helper_check)
160 {
161 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
162 "%s not found!\n",
163 NETJAIL_START_SCRIPT);
164 GNUNET_TESTING_interpreter_fail ();
165 }
142 166
143 ns->start_proc = GNUNET_OS_start_process_vap (GNUNET_OS_INHERIT_STD_ERR, 167 ns->start_proc = GNUNET_OS_start_process_vap (GNUNET_OS_INHERIT_STD_ERR,
144 NULL, 168 NULL,
@@ -153,6 +177,11 @@ netjail_start_run (void *cls,
153 GNUNET_break (NULL != ns->cwh); 177 GNUNET_break (NULL != ns->cwh);
154} 178}
155 179
180
181/**
182 * This function checks the flag NetJailState#finished, if this cmd finished.
183 *
184 */
156static int 185static int
157netjail_start_finish (void *cls, 186netjail_start_finish (void *cls,
158 GNUNET_SCHEDULER_TaskCallback cont, 187 GNUNET_SCHEDULER_TaskCallback cont,
@@ -171,11 +200,12 @@ netjail_start_finish (void *cls,
171 * Create command. 200 * Create command.
172 * 201 *
173 * @param label name for command. 202 * @param label name for command.
174 * @param binaryname to start. 203 * @param local_m Number of local nodes in each namespace.
204 * @param global_n The number of namespaces.
175 * @return command. 205 * @return command.
176 */ 206 */
177struct GNUNET_TESTING_Command 207struct GNUNET_TESTING_Command
178GNUNET_TESTBED_cmd_netjail_start (const char *label, 208GNUNET_TESTING_cmd_netjail_start (const char *label,
179 char *local_m, 209 char *local_m,
180 char *global_n) 210 char *global_n)
181{ 211{
diff --git a/src/testbed/testbed_api_cmd_netjail_start_testbed.c b/src/testing/testing_api_cmd_netjail_start_testsystem.c
index 67f0ef55c..0fe0541b0 100644
--- a/src/testbed/testbed_api_cmd_netjail_start_testbed.c
+++ b/src/testing/testing_api_cmd_netjail_start_testsystem.c
@@ -25,20 +25,25 @@
25 */ 25 */
26#include "platform.h" 26#include "platform.h"
27#include "gnunet_testing_ng_lib.h" 27#include "gnunet_testing_ng_lib.h"
28#include "gnunet_testbed_ng_service.h" 28#include "testing_cmds.h"
29#include "testbed_api.h"
30#include "testbed_api_hosts.h"
31#include "testbed_helper.h"
32 29
33#define NETJAIL_EXEC_SCRIPT "./../testbed/netjail_exec.sh" 30#define NETJAIL_EXEC_SCRIPT "./../testing/netjail_exec.sh"
34
35struct HelperMessage;
36 31
32/**
33 * Struct to store messages send/received by the helper into a DLL
34 *
35 */
37struct HelperMessage 36struct HelperMessage
38{ 37{
39 38
39 /**
40 * Kept in a DLL.
41 */
40 struct HelperMessage *next; 42 struct HelperMessage *next;
41 43
44 /**
45 * Kept in a DLL.
46 */
42 struct HelperMessage *prev; 47 struct HelperMessage *prev;
43 48
44 /** 49 /**
@@ -50,25 +55,51 @@ struct HelperMessage
50}; 55};
51 56
52 57
53 58/**
59 * Struct to store information handed over to callbacks.
60 *
61 */
54struct NetJailState 62struct NetJailState
55{ 63{
64 /**
65 * Pointer to the return value of the test.
66 *
67 */
68 unsigned int *rv;
56 69
70 /**
71 * Head of the DLL which stores messages received by the helper.
72 *
73 */
57 struct HelperMessage *hp_messages_head; 74 struct HelperMessage *hp_messages_head;
58 75
76 /**
77 * Tail of the DLL which stores messages received by the helper.
78 *
79 */
59 struct HelperMessage *hp_messages_tail; 80 struct HelperMessage *hp_messages_tail;
60 81
61 /** 82 /**
62 * The process handle 83 * Array with handles of helper processes.
63 */ 84 */
64 struct GNUNET_HELPER_Handle **helper; 85 struct GNUNET_HELPER_Handle **helper;
65 86
87 /**
88 * Size of the array NetJailState#helper.
89 *
90 */
66 unsigned int n_helper; 91 unsigned int n_helper;
67 92
68 char *binary_name; 93 /**
69 94 * Number of nodes in a network namespace. //TODO make this a unsigned int
95 *
96 */
70 char *local_m; 97 char *local_m;
71 98
99 /**
100 * Number of network namespaces. //TODO make this a unsigned int
101 *
102 */
72 char *global_n; 103 char *global_n;
73 104
74 /** 105 /**
@@ -76,40 +107,91 @@ struct NetJailState
76 */ 107 */
77 struct GNUNET_HELPER_SendHandle **shandle; 108 struct GNUNET_HELPER_SendHandle **shandle;
78 109
110 /**
111 * Size of the array NetJailState#shandle.
112 *
113 */
79 unsigned int n_shandle; 114 unsigned int n_shandle;
80 115
81 /** 116 /**
82 * The message corresponding to send handle 117 * The messages send to the helper.
83 */ 118 */
84 struct GNUNET_MessageHeader **msg; 119 struct GNUNET_MessageHeader **msg;
85 120
121 /**
122 * Size of the array NetJailState#msg.
123 *
124 */
86 unsigned int n_msg; 125 unsigned int n_msg;
87 126
88 unsigned int number_of_testbeds_started; 127 /**
128 * Number of test environments started.
129 *
130 */
131 unsigned int number_of_testsystems_started;
89 132
133 /**
134 * Number of peers started.
135 *
136 */
90 unsigned int number_of_peers_started; 137 unsigned int number_of_peers_started;
91 138
139 /**
140 * Number of local tests finished.
141 *
142 */
92 unsigned int number_of_local_test_finished; 143 unsigned int number_of_local_test_finished;
93 144
94 /** 145 /**
95 * The host where the controller is running 146 * Name of the test case plugin the helper will load.
147 *
96 */ 148 */
97 struct GNUNET_TESTBED_Host **host; 149 char *plugin_name;
98 150
99 unsigned int n_host; 151 /**
152 * HEAD of the DLL containing TestingSystemCount.
153 *
154 */
155 struct TestingSystemCount *tbcs_head;
100 156
101 char *plugin_name; 157 /**
158 * TAIL of the DLL containing TestingSystemCount.
159 *
160 */
161 struct TestingSystemCount *tbcs_tail;
102}; 162};
103 163
104struct TestbedCount 164/**
165 * Struct containing the number of the test environment and the NetJailState which
166 * will be handed to callbacks specific to a test environment.
167 */
168struct TestingSystemCount
105{ 169{
170 /**
171 * Kept in a DLL.
172 */
173 struct TestingSystemCount *next;
174
175 /**
176 * Kept in a DLL.
177 */
178 struct TestingSystemCount *prev;
179
180 /**
181 * The number of the test environment.
182 *
183 */
106 unsigned int count; 184 unsigned int count;
107 185
186 /**
187 * Struct to store information handed over to callbacks.
188 *
189 */
108 struct NetJailState *ns; 190 struct NetJailState *ns;
109}; 191};
110 192
111/** 193/**
112* 194* Code to clean up resource this cmd used.
113* 195*
114* @param cls closure 196* @param cls closure
115* @param cmd current CMD being cleaned up. 197* @param cmd current CMD being cleaned up.
@@ -119,20 +201,31 @@ netjail_exec_cleanup (void *cls,
119 const struct GNUNET_TESTING_Command *cmd) 201 const struct GNUNET_TESTING_Command *cmd)
120{ 202{
121 struct NetJailState *ns = cls; 203 struct NetJailState *ns = cls;
204 struct HelperMessage *message_pos;
205 struct TestingSystemCount *tbc_pos;
122 206
123 GNUNET_free (ns->binary_name); 207 while (NULL != (message_pos = ns->hp_messages_head))
208 {
209 GNUNET_CONTAINER_DLL_remove (ns->hp_messages_head,
210 ns->hp_messages_tail,
211 message_pos);
212 GNUNET_free (message_pos);
213 }
214 while (NULL != (tbc_pos = ns->tbcs_head))
215 {
216 GNUNET_CONTAINER_DLL_remove (ns->tbcs_head,
217 ns->tbcs_tail,
218 tbc_pos);
219 GNUNET_free (tbc_pos);
220 }
221 GNUNET_free (ns);
124} 222}
125 223
126 224
127/** 225/**
128* 226 * This function prepares an array with traits.
129* 227 *
130* @param cls closure. 228 */
131* @param[out] ret result
132* @param trait name of the trait.
133* @param index index number of the object to offer.
134* @return #GNUNET_OK on success.
135*/
136static int 229static int
137netjail_exec_traits (void *cls, 230netjail_exec_traits (void *cls,
138 const void **ret, 231 const void **ret,
@@ -166,14 +259,14 @@ netjail_exec_traits (void *cls,
166 259
167 260
168/** 261/**
169 * Offer handles to testbed helper from trait 262 * Offer handles to testing cmd helper from trait
170 * 263 *
171 * @param cmd command to extract the message from. 264 * @param cmd command to extract the message from.
172 * @param pt pointer to message. 265 * @param pt pointer to message.
173 * @return #GNUNET_OK on success. 266 * @return #GNUNET_OK on success.
174 */ 267 */
175int 268int
176GNUNET_TESTBED_get_trait_helper_handles (const struct 269GNUNET_TESTING_get_trait_helper_handles (const struct
177 GNUNET_TESTING_Command *cmd, 270 GNUNET_TESTING_Command *cmd,
178 struct GNUNET_HELPER_Handle ***helper) 271 struct GNUNET_HELPER_Handle ***helper)
179{ 272{
@@ -183,15 +276,16 @@ GNUNET_TESTBED_get_trait_helper_handles (const struct
183 (unsigned int) 0); 276 (unsigned int) 0);
184} 277}
185 278
279
186/** 280/**
187 * Offer handles to testbed helper from trait 281 * Offer messages received via testing cmd helper from trait
188 * 282 *
189 * @param cmd command to extract the message from. 283 * @param cmd command to extract the message from.
190 * @param pt pointer to message. 284 * @param pt pointer to message.
191 * @return #GNUNET_OK on success. 285 * @return #GNUNET_OK on success.
192 */ 286 */
193int 287int
194GNUNET_TESTBED_get_trait_helper_messages (const struct 288GNUNET_TESTING_get_trait_helper_messages (const struct
195 GNUNET_TESTING_Command *cmd, 289 GNUNET_TESTING_Command *cmd,
196 struct HelperMessage *** 290 struct HelperMessage ***
197 hp_messages_head) 291 hp_messages_head)
@@ -214,12 +308,9 @@ GNUNET_TESTBED_get_trait_helper_messages (const struct
214static void 308static void
215clear_msg (void *cls, int result) 309clear_msg (void *cls, int result)
216{ 310{
217 struct TestbedCount *tbc = cls; 311 struct TestingSystemCount *tbc = cls;
218 struct NetJailState *ns = tbc->ns; 312 struct NetJailState *ns = tbc->ns;
219 313
220 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
221 "clear_msg tbc->count: %d\n",
222 tbc->count);
223 GNUNET_assert (NULL != ns->shandle[tbc->count - 1]); 314 GNUNET_assert (NULL != ns->shandle[tbc->count - 1]);
224 ns->shandle[tbc->count - 1] = NULL; 315 ns->shandle[tbc->count - 1] = NULL;
225 GNUNET_free (ns->msg[tbc->count - 1]); 316 GNUNET_free (ns->msg[tbc->count - 1]);
@@ -242,27 +333,18 @@ clear_msg (void *cls, int result)
242static int 333static int
243helper_mst (void *cls, const struct GNUNET_MessageHeader *message) 334helper_mst (void *cls, const struct GNUNET_MessageHeader *message)
244{ 335{
245 struct TestbedCount *tbc = cls; 336 struct TestingSystemCount *tbc = cls;
246 struct NetJailState *ns = tbc->ns; 337 struct NetJailState *ns = tbc->ns;
247 struct HelperMessage *hp_msg; 338 struct HelperMessage *hp_msg;
248 339
249 if (GNUNET_MESSAGE_TYPE_CMDS_HELPER_REPLY == ntohs (message->type)) 340 if (GNUNET_MESSAGE_TYPE_CMDS_HELPER_REPLY == ntohs (message->type))
250 { 341 {
251 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 342 ns->number_of_testsystems_started++;
252 "helper_mst tbc->count: %d\n",
253 tbc->count);
254 // GNUNET_TESTBED_extract_cfg (host, message);
255 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
256 "Received message from helper.\n");
257 ns->number_of_testbeds_started++;
258 } 343 }
259 else if (GNUNET_MESSAGE_TYPE_CMDS_HELPER_PEER_STARTED == ntohs ( 344 else if (GNUNET_MESSAGE_TYPE_CMDS_HELPER_PEER_STARTED == ntohs (
260 message->type)) 345 message->type))
261 { 346 {
262 ns->number_of_peers_started++; 347 ns->number_of_peers_started++;
263 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
264 "number_of_peers_started: %d\n",
265 ns->number_of_peers_started);
266 } 348 }
267 else if (GNUNET_MESSAGE_TYPE_CMDS_HELPER_LOCAL_FINISHED == ntohs ( 349 else if (GNUNET_MESSAGE_TYPE_CMDS_HELPER_LOCAL_FINISHED == ntohs (
268 message->type)) 350 message->type))
@@ -282,14 +364,27 @@ helper_mst (void *cls, const struct GNUNET_MessageHeader *message)
282} 364}
283 365
284 366
367/**
368 * Callback called if there was an exception during execution of the helper.
369 *
370 */
285static void 371static void
286exp_cb (void *cls) 372exp_cb (void *cls)
287{ 373{
374 struct NetJailState *ns = cls;
288 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Called exp_cb.\n"); 375 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Called exp_cb.\n");
289 GNUNET_TESTING_interpreter_fail (); 376 *ns->rv = 1;
290} 377}
291 378
292 379
380/**
381 * Function to initialize a init message for the helper.
382 *
383 * @param m_char The actual node in a namespace. //TODO Change this to unsigned int
384 * @param n_char The actual namespace. //TODO Change this to unsigned int
385 * @param plugin_name Name of the test case plugin the helper will load.
386 *
387 */
293static struct GNUNET_CMDS_HelperInit * 388static struct GNUNET_CMDS_HelperInit *
294create_helper_init_msg_ (char *m_char, 389create_helper_init_msg_ (char *m_char,
295 char *n_char, 390 char *n_char,
@@ -302,9 +397,6 @@ create_helper_init_msg_ (char *m_char,
302 GNUNET_assert (NULL != plugin_name); 397 GNUNET_assert (NULL != plugin_name);
303 plugin_name_len = strlen (plugin_name); 398 plugin_name_len = strlen (plugin_name);
304 msg_size = sizeof(struct GNUNET_CMDS_HelperInit) + plugin_name_len; 399 msg_size = sizeof(struct GNUNET_CMDS_HelperInit) + plugin_name_len;
305 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
306 "msg_size: %d \n",
307 msg_size);
308 msg = GNUNET_malloc (msg_size); 400 msg = GNUNET_malloc (msg_size);
309 msg->header.size = htons (msg_size); 401 msg->header.size = htons (msg_size);
310 msg->header.type = htons (GNUNET_MESSAGE_TYPE_CMDS_HELPER_INIT); 402 msg->header.type = htons (GNUNET_MESSAGE_TYPE_CMDS_HELPER_INIT);
@@ -316,15 +408,19 @@ create_helper_init_msg_ (char *m_char,
316} 408}
317 409
318 410
411/**
412 * Function which start a single helper process.
413 *
414 */
319static void 415static void
320start_testbed (struct NetJailState *ns, struct 416start_helper (struct NetJailState *ns, struct
321 GNUNET_CONFIGURATION_Handle *config, 417 GNUNET_CONFIGURATION_Handle *config,
322 char *m_char, 418 char *m_char,
323 char *n_char) 419 char *n_char)
324{ 420{
325 // struct GNUNET_CONFIGURATION_Handle *cfg; 421 struct GNUNET_HELPER_Handle *helper;
326 struct GNUNET_CMDS_HelperInit *msg; 422 struct GNUNET_CMDS_HelperInit *msg;
327 struct TestbedCount *tbc; 423 struct TestingSystemCount *tbc;
328 char *const script_argv[] = {NETJAIL_EXEC_SCRIPT, 424 char *const script_argv[] = {NETJAIL_EXEC_SCRIPT,
329 m_char, 425 m_char,
330 n_char, 426 n_char,
@@ -335,35 +431,33 @@ start_testbed (struct NetJailState *ns, struct
335 NULL}; 431 NULL};
336 unsigned int m = atoi (m_char); 432 unsigned int m = atoi (m_char);
337 unsigned int n = atoi (n_char); 433 unsigned int n = atoi (n_char);
434 unsigned int helper_check = GNUNET_OS_check_helper_binary (
435 NETJAIL_EXEC_SCRIPT,
436 GNUNET_YES,
437 NULL);
338 438
339 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 439 tbc = GNUNET_new (struct TestingSystemCount);
340 "m: %d n: %d\n",
341 m,
342 n);
343
344 tbc = GNUNET_new (struct TestbedCount);
345 tbc->ns = ns; 440 tbc->ns = ns;
346 tbc->count = (n - 1) * atoi (ns->local_m) + m; 441 tbc->count = (n - 1) * atoi (ns->local_m) + m;
347 442
348 // cfg = GNUNET_CONFIGURATION_dup (config); 443 GNUNET_CONTAINER_DLL_insert (ns->tbcs_head, ns->tbcs_tail,
444 tbc);
349 445
350 // TODO We do not need this?
351 /*GNUNET_array_append (ns->host, ns->n_host,
352 GNUNET_TESTBED_host_create_with_id (tbc->count - 1,
353 NULL,
354 NULL,
355 cfg,
356 0));*/
357 446
358 /*if ((GNUNET_YES != GNUNET_DISK_file_test ("test_testbed_api.conf")) || 447 if (GNUNET_NO == helper_check)
359 (GNUNET_SYSERR == GNUNET_CONFIGURATION_load (config, 448 {
360 "test_testbed_api.conf"))) 449 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
450 "No SUID for %s!\n",
451 NETJAIL_EXEC_SCRIPT);
452 *ns->rv = 1;
453 }
454 else if (GNUNET_NO == helper_check)
361 { 455 {
362 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 456 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
363 _ ( 457 "%s not found!\n",
364 "Unreadable or malformed configuration file `%s', exit ...\n"), 458 NETJAIL_EXEC_SCRIPT);
365 "test_testbed_api.conf"); 459 *ns->rv = 1;
366 }*/ 460 }
367 461
368 GNUNET_array_append (ns->helper, ns->n_helper, GNUNET_HELPER_start ( 462 GNUNET_array_append (ns->helper, ns->n_helper, GNUNET_HELPER_start (
369 GNUNET_YES, 463 GNUNET_YES,
@@ -373,7 +467,7 @@ start_testbed (struct NetJailState *ns, struct
373 &exp_cb, 467 &exp_cb,
374 tbc)); 468 tbc));
375 469
376 struct GNUNET_HELPER_Handle *helper = ns->helper[tbc->count - 1]; 470 helper = ns->helper[tbc->count - 1];
377 471
378 msg = create_helper_init_msg_ (m_char, 472 msg = create_helper_init_msg_ (m_char,
379 n_char, 473 n_char,
@@ -387,22 +481,18 @@ start_testbed (struct NetJailState *ns, struct
387 &clear_msg, 481 &clear_msg,
388 tbc)); 482 tbc));
389 483
390 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
391 "Message %d send!\n",
392 tbc->count);
393
394 if (NULL == ns->shandle[tbc->count - 1]) 484 if (NULL == ns->shandle[tbc->count - 1])
395 { 485 {
396 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 486 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
397 "Send handle is NULL!\n"); 487 "Send handle is NULL!\n");
398 GNUNET_free (msg); 488 GNUNET_free (msg);
399 GNUNET_TESTING_interpreter_fail (); 489 *ns->rv = 1;
400 } 490 }
401} 491}
402 492
403 493
404/** 494/**
405* Run the "hello world" CMD. 495* This function starts a helper process for each node.
406* 496*
407* @param cls closure. 497* @param cls closure.
408* @param cmd CMD being run. 498* @param cmd CMD being run.
@@ -419,19 +509,29 @@ netjail_exec_run (void *cls,
419 struct GNUNET_CONFIGURATION_Handle *config = 509 struct GNUNET_CONFIGURATION_Handle *config =
420 GNUNET_CONFIGURATION_create (); 510 GNUNET_CONFIGURATION_create ();
421 511
422 for (int i = 1; i <= atoi (ns->global_n); i++) { 512 for (int i = 1; i <= atoi (ns->global_n); i++)
513 {
423 for (int j = 1; j <= atoi (ns->local_m); j++) 514 for (int j = 1; j <= atoi (ns->local_m); j++)
424 { 515 {
425 sprintf (str_n, "%d", i); 516 sprintf (str_n, "%d", i);
426 sprintf (str_m, "%d", j); 517 sprintf (str_m, "%d", j);
427 start_testbed (ns, config, 518 start_helper (ns, config,
428 str_m, 519 str_m,
429 str_n); 520 str_n);
430 } 521 }
431 } 522 }
432} 523}
433 524
434 525
526/**
527 * This function checks on three different information.
528 *
529 * 1. Did all helpers start. This is only logged.
530 * 2. Did all peer start.
531 * In this case a GNUNET_MESSAGE_TYPE_CMDS_HELPER_ALL_PEERS_STARTED is send to all peers.
532 * 3. Did all peers finished the test case. In this case interpreter_next will be called.
533 *
534 */
435static int 535static int
436netjail_start_finish (void *cls, 536netjail_start_finish (void *cls,
437 GNUNET_SCHEDULER_TaskCallback cont, 537 GNUNET_SCHEDULER_TaskCallback cont,
@@ -443,7 +543,7 @@ netjail_start_finish (void *cls,
443 struct GNUNET_CMDS_ALL_PEERS_STARTED *reply; 543 struct GNUNET_CMDS_ALL_PEERS_STARTED *reply;
444 size_t msg_length; 544 size_t msg_length;
445 struct GNUNET_HELPER_Handle *helper; 545 struct GNUNET_HELPER_Handle *helper;
446 struct TestbedCount *tbc; 546 struct TestingSystemCount *tbc;
447 547
448 if (ns->number_of_local_test_finished == total_number) 548 if (ns->number_of_local_test_finished == total_number)
449 { 549 {
@@ -451,25 +551,22 @@ netjail_start_finish (void *cls,
451 cont (cont_cls); 551 cont (cont_cls);
452 } 552 }
453 553
454 if (ns->number_of_testbeds_started == total_number) 554 if (ns->number_of_testsystems_started == total_number)
455 { 555 {
456 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 556 ns->number_of_testsystems_started = 0;
457 "All helpers started!\n");
458 ns->number_of_testbeds_started = 0;
459 } 557 }
460 558
461 if (ns->number_of_peers_started == total_number) 559 if (ns->number_of_peers_started == total_number)
462 { 560 {
463 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 561 for (int i = 1; i <= atoi (ns->global_n); i++)
464 "All peers started!\n"); 562 {
465
466 for (int i = 1; i <= atoi (ns->global_n); i++) {
467 for (int j = 1; j <= atoi (ns->local_m); j++) 563 for (int j = 1; j <= atoi (ns->local_m); j++)
468 { 564 {
469 tbc = GNUNET_new (struct TestbedCount); 565 tbc = GNUNET_new (struct TestingSystemCount);
470 tbc->ns = ns; 566 tbc->ns = ns;
471 // TODO This needs to be more generic. As we send more messages back and forth, we can not grow the arrays again and again, because this is to error prone. 567 // TODO This needs to be more generic. As we send more messages back and forth, we can not grow the arrays again and again, because this is to error prone.
472 tbc->count = (j - 1) * atoi (ns->local_m) + i + total_number; 568 tbc->count = (i - 1) * atoi (ns->local_m) + j + total_number;
569
473 helper = ns->helper[tbc->count - 1 - total_number]; 570 helper = ns->helper[tbc->count - 1 - total_number];
474 msg_length = sizeof(struct GNUNET_CMDS_ALL_PEERS_STARTED); 571 msg_length = sizeof(struct GNUNET_CMDS_ALL_PEERS_STARTED);
475 reply = GNUNET_new (struct GNUNET_CMDS_ALL_PEERS_STARTED); 572 reply = GNUNET_new (struct GNUNET_CMDS_ALL_PEERS_STARTED);
@@ -487,10 +584,6 @@ netjail_start_finish (void *cls,
487 tbc); 584 tbc);
488 585
489 GNUNET_array_append (ns->shandle, ns->n_shandle, sh); 586 GNUNET_array_append (ns->shandle, ns->n_shandle, sh);
490
491 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
492 "All peers started message %d send!\n",
493 tbc->count);
494 } 587 }
495 } 588 }
496 ns->number_of_peers_started = 0; 589 ns->number_of_peers_started = 0;
@@ -502,15 +595,19 @@ netjail_start_finish (void *cls,
502/** 595/**
503 * Create command. 596 * Create command.
504 * 597 *
505 * @param label name for command. 598 * @param label Name for the command.
506 * @param binaryname to exec. 599 * @param local_m Number of nodes in a network namespace. //TODO make this a unsigned int
600 * @param global_n Number of network namespaces. //TODO make this a unsigned int
601 * @param plugin_name Name of the test case plugin the helper will load.
602 * @param rv Pointer to the return value of the test.
507 * @return command. 603 * @return command.
508 */ 604 */
509struct GNUNET_TESTING_Command 605struct GNUNET_TESTING_Command
510GNUNET_TESTBED_cmd_netjail_start_testbed (const char *label, 606GNUNET_TESTING_cmd_netjail_start_testing_system (const char *label,
511 char *local_m, 607 char *local_m,
512 char *global_n, 608 char *global_n,
513 char *plugin_name) 609 char *plugin_name,
610 unsigned int *rv)
514{ 611{
515 struct NetJailState *ns; 612 struct NetJailState *ns;
516 613
@@ -518,6 +615,7 @@ GNUNET_TESTBED_cmd_netjail_start_testbed (const char *label,
518 ns->local_m = local_m; 615 ns->local_m = local_m;
519 ns->global_n = global_n; 616 ns->global_n = global_n;
520 ns->plugin_name = plugin_name; 617 ns->plugin_name = plugin_name;
618 ns->rv = rv;
521 619
522 struct GNUNET_TESTING_Command cmd = { 620 struct GNUNET_TESTING_Command cmd = {
523 .cls = ns, 621 .cls = ns,
diff --git a/src/testbed/testbed_api_cmd_netjail_stop.c b/src/testing/testing_api_cmd_netjail_stop.c
index c0fc33ff9..99084d9af 100644
--- a/src/testbed/testbed_api_cmd_netjail_stop.c
+++ b/src/testing/testing_api_cmd_netjail_stop.c
@@ -26,17 +26,23 @@
26#include "platform.h" 26#include "platform.h"
27#include "gnunet_util_lib.h" 27#include "gnunet_util_lib.h"
28#include "gnunet_testing_ng_lib.h" 28#include "gnunet_testing_ng_lib.h"
29#include "gnunet_testbed_ng_service.h"
30 29
31 30
32#define NETJAIL_STOP_SCRIPT "./../testbed/netjail_stop.sh" 31#define NETJAIL_STOP_SCRIPT "./../testing/netjail_stop.sh"
33 32
33// Child Wait handle
34struct GNUNET_ChildWaitHandle *cwh; 34struct GNUNET_ChildWaitHandle *cwh;
35 35
36/**
37 * Struct to hold information for callbacks.
38 *
39 */
36struct NetJailState 40struct NetJailState
37{ 41{
42 // Number of local nodes in each namespace.
38 char *local_m; 43 char *local_m;
39 44
45 // The number of namespaces.
40 char *global_n; 46 char *global_n;
41 47
42 /** 48 /**
@@ -44,16 +50,15 @@ struct NetJailState
44 */ 50 */
45 struct GNUNET_OS_Process *stop_proc; 51 struct GNUNET_OS_Process *stop_proc;
46 52
53 // Flag indication if the script finished.
47 unsigned int finished; 54 unsigned int finished;
48}; 55};
49 56
50 57
51/** 58/**
52* 59 * The cleanup function of this cmd frees resources the cmd allocated.
53* 60 *
54* @param cls closure 61 */
55* @param cmd current CMD being cleaned up.
56*/
57static void 62static void
58netjail_stop_cleanup (void *cls, 63netjail_stop_cleanup (void *cls,
59 const struct GNUNET_TESTING_Command *cmd) 64 const struct GNUNET_TESTING_Command *cmd)
@@ -79,14 +84,9 @@ netjail_stop_cleanup (void *cls,
79 84
80 85
81/** 86/**
82* 87 * Trait function of this cmd does nothing.
83* 88 *
84* @param cls closure. 89 */
85* @param[out] ret result
86* @param trait name of the trait.
87* @param index index number of the object to offer.
88* @return #GNUNET_OK on success.
89*/
90static int 90static int
91netjail_stop_traits (void *cls, 91netjail_stop_traits (void *cls,
92 const void **ret, 92 const void **ret,
@@ -97,6 +97,10 @@ netjail_stop_traits (void *cls,
97} 97}
98 98
99 99
100/**
101 * Callback which will be called if the setup script finished.
102 *
103 */
100static void 104static void
101child_completed_callback (void *cls, 105child_completed_callback (void *cls,
102 enum GNUNET_OS_ProcessStatusType type, 106 enum GNUNET_OS_ProcessStatusType type,
@@ -119,7 +123,7 @@ child_completed_callback (void *cls,
119 123
120 124
121/** 125/**
122* Run the "hello world" CMD. 126* The run method starts the script which deletes the network namespaces.
123* 127*
124* @param cls closure. 128* @param cls closure.
125* @param cmd CMD being run. 129* @param cmd CMD being run.
@@ -135,6 +139,25 @@ netjail_stop_run (void *cls,
135 ns->local_m, 139 ns->local_m,
136 ns->global_n, 140 ns->global_n,
137 NULL}; 141 NULL};
142 unsigned int helper_check = GNUNET_OS_check_helper_binary (
143 NETJAIL_STOP_SCRIPT,
144 GNUNET_YES,
145 NULL);
146
147 if (GNUNET_NO == helper_check)
148 {
149 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
150 "No SUID for %s!\n",
151 NETJAIL_STOP_SCRIPT);
152 GNUNET_TESTING_interpreter_fail ();
153 }
154 else if (GNUNET_NO == helper_check)
155 {
156 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
157 "%s not found!\n",
158 NETJAIL_STOP_SCRIPT);
159 GNUNET_TESTING_interpreter_fail ();
160 }
138 161
139 ns->stop_proc = GNUNET_OS_start_process_vap (GNUNET_OS_INHERIT_STD_ERR, 162 ns->stop_proc = GNUNET_OS_start_process_vap (GNUNET_OS_INHERIT_STD_ERR,
140 NULL, 163 NULL,
@@ -151,6 +174,10 @@ netjail_stop_run (void *cls,
151} 174}
152 175
153 176
177/**
178 * This function checks the flag NetJailState#finished, if this cmd finished.
179 *
180 */
154static int 181static int
155netjail_stop_finish (void *cls, 182netjail_stop_finish (void *cls,
156 GNUNET_SCHEDULER_TaskCallback cont, 183 GNUNET_SCHEDULER_TaskCallback cont,
@@ -170,11 +197,12 @@ netjail_stop_finish (void *cls,
170 * Create command. 197 * Create command.
171 * 198 *
172 * @param label name for command. 199 * @param label name for command.
173 * @param binaryname to stop. 200 * @param local_m Number of local nodes in each namespace.
201 * @param global_n The number of namespaces.
174 * @return command. 202 * @return command.
175 */ 203 */
176struct GNUNET_TESTING_Command 204struct GNUNET_TESTING_Command
177GNUNET_TESTBED_cmd_netjail_stop (const char *label, 205GNUNET_TESTING_cmd_netjail_stop (const char *label,
178 char *local_m, 206 char *local_m,
179 char *global_n) 207 char *global_n)
180{ 208{
diff --git a/src/testbed/testbed_api_cmd_netjail_stop_testbed.c b/src/testing/testing_api_cmd_netjail_stop_testsystem.c
index 9a9d489a7..0ae82a26a 100644
--- a/src/testbed/testbed_api_cmd_netjail_stop_testbed.c
+++ b/src/testing/testing_api_cmd_netjail_stop_testsystem.c
@@ -25,11 +25,13 @@
25 */ 25 */
26#include "platform.h" 26#include "platform.h"
27#include "gnunet_testing_ng_lib.h" 27#include "gnunet_testing_ng_lib.h"
28#include "gnunet_testbed_ng_service.h" 28#include "testing_cmds.h"
29#include "testbed_api.h"
30#include "testbed_api_hosts.h"
31 29
32 30
31/**
32 * Struct to store information handed over to callbacks.
33 *
34 */
33struct StopHelperState 35struct StopHelperState
34{ 36{
35 37
@@ -47,49 +49,44 @@ struct StopHelperState
47 49
48 50
49/** 51/**
50* 52* Code to clean up resource this cmd used.
51* 53*
52* @param cls closure 54* @param cls closure
53* @param cmd current CMD being cleaned up. 55* @param cmd current CMD being cleaned up.
54*/ 56*/
55static void 57static void
56stop_testbed_cleanup (void *cls, 58stop_testing_system_cleanup (void *cls,
57 const struct GNUNET_TESTING_Command *cmd) 59 const struct GNUNET_TESTING_Command *cmd)
58{ 60{
59 61
60} 62}
61 63
62 64
63/** 65/**
64* 66 * Trait function of this cmd does nothing.
65* 67 *
66* @param cls closure. 68 */
67* @param[out] ret result
68* @param trait name of the trait.
69* @param index index number of the object to offer.
70* @return #GNUNET_OK on success.
71*/
72static int 69static int
73stop_testbed_traits (void *cls, 70stop_testing_system_traits (void *cls,
74 const void **ret, 71 const void **ret,
75 const char *trait, 72 const char *trait,
76 unsigned int index) 73 unsigned int index)
77{ 74{
78 return GNUNET_OK; 75 return GNUNET_OK;
79} 76}
80 77
81 78
82/** 79/**
83* Run the "hello world" CMD. 80* This function stops the helper process for each node.
84* 81*
85* @param cls closure. 82* @param cls closure.
86* @param cmd CMD being run. 83* @param cmd CMD being run.
87* @param is interpreter state. 84* @param is interpreter state.
88*/ 85*/
89static void 86static void
90stop_testbed_run (void *cls, 87stop_testing_system_run (void *cls,
91 const struct GNUNET_TESTING_Command *cmd, 88 const struct GNUNET_TESTING_Command *cmd,
92 struct GNUNET_TESTING_Interpreter *is) 89 struct GNUNET_TESTING_Interpreter *is)
93{ 90{
94 struct StopHelperState *shs = cls; 91 struct StopHelperState *shs = cls;
95 struct GNUNET_HELPER_Handle **helper; 92 struct GNUNET_HELPER_Handle **helper;
@@ -97,10 +94,11 @@ stop_testbed_run (void *cls,
97 94
98 start_helper_cmd = GNUNET_TESTING_interpreter_lookup_command ( 95 start_helper_cmd = GNUNET_TESTING_interpreter_lookup_command (
99 shs->helper_start_label); 96 shs->helper_start_label);
100 GNUNET_TESTBED_get_trait_helper_handles (start_helper_cmd, 97 GNUNET_TESTING_get_trait_helper_handles (start_helper_cmd,
101 &helper); 98 &helper);
102 99
103 for (int i = 1; i <= atoi (shs->global_n); i++) { 100 for (int i = 1; i <= atoi (shs->global_n); i++)
101 {
104 for (int j = 1; j <= atoi (shs->local_m); j++) 102 for (int j = 1; j <= atoi (shs->local_m); j++)
105 { 103 {
106 GNUNET_HELPER_stop (helper[(i - 1) * atoi (shs->local_m) + j - 1], 104 GNUNET_HELPER_stop (helper[(i - 1) * atoi (shs->local_m) + j - 1],
@@ -112,17 +110,19 @@ stop_testbed_run (void *cls,
112 110
113/** 111/**
114 * Create command. 112 * Create command.
115 * 113 * @param helper_start_label label of the cmd to start the test system.
116 * @param label name for command. 114 * @param label name for command.
117 * @param binaryname to exec. 115 * @param .
116 * @param local_m Number of nodes in a network namespace. //TODO make this a unsigned int
117 * @param global_n Number of network namespaces. //TODO make this a unsigned int
118 * @return command. 118 * @return command.
119 */ 119 */
120struct GNUNET_TESTING_Command 120struct GNUNET_TESTING_Command
121GNUNET_TESTBED_cmd_stop_testbed (const char *label, 121GNUNET_TESTING_cmd_stop_testing_system (const char *label,
122 const char *helper_start_label, 122 const char *helper_start_label,
123 char *local_m, 123 char *local_m,
124 char *global_n 124 char *global_n
125 ) 125 )
126{ 126{
127 struct StopHelperState *shs; 127 struct StopHelperState *shs;
128 128
@@ -134,9 +134,9 @@ GNUNET_TESTBED_cmd_stop_testbed (const char *label,
134 struct GNUNET_TESTING_Command cmd = { 134 struct GNUNET_TESTING_Command cmd = {
135 .cls = shs, 135 .cls = shs,
136 .label = label, 136 .label = label,
137 .run = &stop_testbed_run, 137 .run = &stop_testing_system_run,
138 .cleanup = &stop_testbed_cleanup, 138 .cleanup = &stop_testing_system_cleanup,
139 .traits = &stop_testbed_traits 139 .traits = &stop_testing_system_traits
140 }; 140 };
141 141
142 return cmd; 142 return cmd;
diff --git a/src/testing/testing_api_cmd_send_peer_ready.c b/src/testing/testing_api_cmd_send_peer_ready.c
index 27761c4d5..016837214 100644
--- a/src/testing/testing_api_cmd_send_peer_ready.c
+++ b/src/testing/testing_api_cmd_send_peer_ready.c
@@ -26,18 +26,33 @@
26#include "platform.h" 26#include "platform.h"
27#include "gnunet_util_lib.h" 27#include "gnunet_util_lib.h"
28#include "gnunet_testing_ng_lib.h" 28#include "gnunet_testing_ng_lib.h"
29#include "testbed_api.h" 29#include "testing_cmds.h"
30#include "testbed_helper.h"
31 30
32 31
32/**
33 * Struct to hold information for callbacks.
34 *
35 */
33struct SendPeerReadyState 36struct SendPeerReadyState
34{ 37{
35 TESTBED_CMD_HELPER_write_cb write_message; 38 /**
36 39 * Callback to write messages to the master loop.
40 *
41 */
42 TESTING_CMD_HELPER_write_cb write_message;
43
44 /**
45 * The message send back to the master loop.
46 *
47 */
37 struct GNUNET_CMDS_PEER_STARTED *reply; 48 struct GNUNET_CMDS_PEER_STARTED *reply;
38}; 49};
39 50
40 51
52/**
53 * Trait function of this cmd does nothing.
54 *
55 */
41static int 56static int
42send_peer_ready_traits (void *cls, 57send_peer_ready_traits (void *cls,
43 const void **ret, 58 const void **ret,
@@ -48,6 +63,10 @@ send_peer_ready_traits (void *cls,
48} 63}
49 64
50 65
66/**
67 * The cleanup function of this cmd frees resources the cmd allocated.
68 *
69 */
51static void 70static void
52send_peer_ready_cleanup (void *cls, 71send_peer_ready_cleanup (void *cls,
53 const struct GNUNET_TESTING_Command *cmd) 72 const struct GNUNET_TESTING_Command *cmd)
@@ -59,6 +78,10 @@ send_peer_ready_cleanup (void *cls,
59} 78}
60 79
61 80
81/**
82 * This function sends a GNUNET_MESSAGE_TYPE_CMDS_HELPER_PEER_STARTED message to the master loop.
83 *
84 */
62static void 85static void
63send_peer_ready_run (void *cls, 86send_peer_ready_run (void *cls,
64 const struct GNUNET_TESTING_Command *cmd, 87 const struct GNUNET_TESTING_Command *cmd,
@@ -68,7 +91,7 @@ send_peer_ready_run (void *cls,
68 struct GNUNET_CMDS_PEER_STARTED *reply; 91 struct GNUNET_CMDS_PEER_STARTED *reply;
69 size_t msg_length; 92 size_t msg_length;
70 93
71 msg_length = sizeof(struct GNUNET_CMDS_HelperInit);// GNUNET_CMDS_PEER_STARTED); 94 msg_length = sizeof(struct GNUNET_CMDS_PEER_STARTED);
72 reply = GNUNET_new (struct GNUNET_CMDS_PEER_STARTED); 95 reply = GNUNET_new (struct GNUNET_CMDS_PEER_STARTED);
73 reply->header.type = htons (GNUNET_MESSAGE_TYPE_CMDS_HELPER_PEER_STARTED); 96 reply->header.type = htons (GNUNET_MESSAGE_TYPE_CMDS_HELPER_PEER_STARTED);
74 reply->header.size = htons ((uint16_t) msg_length); 97 reply->header.size = htons ((uint16_t) msg_length);
@@ -81,11 +104,12 @@ send_peer_ready_run (void *cls,
81 * Create command. 104 * Create command.
82 * 105 *
83 * @param label name for command. 106 * @param label name for command.
107 * @param write_message Callback to write messages to the master loop.
84 * @return command. 108 * @return command.
85 */ 109 */
86struct GNUNET_TESTING_Command 110struct GNUNET_TESTING_Command
87GNUNET_TESTING_cmd_send_peer_ready (const char *label, 111GNUNET_TESTING_cmd_send_peer_ready (const char *label,
88 TESTBED_CMD_HELPER_write_cb write_message) 112 TESTING_CMD_HELPER_write_cb write_message)
89{ 113{
90 struct SendPeerReadyState *sprs; 114 struct SendPeerReadyState *sprs;
91 115
diff --git a/src/testing/testing_api_cmd_system_create.c b/src/testing/testing_api_cmd_system_create.c
index 2007b4ef3..f3a0b1a4c 100644
--- a/src/testing/testing_api_cmd_system_create.c
+++ b/src/testing/testing_api_cmd_system_create.c
@@ -28,6 +28,10 @@
28#include "gnunet_testing_ng_lib.h" 28#include "gnunet_testing_ng_lib.h"
29#include "gnunet_testing_lib.h" 29#include "gnunet_testing_lib.h"
30 30
31/**
32 * Struct to hold information for callbacks.
33 *
34 */
31struct TestSystemState 35struct TestSystemState
32{ 36{
33 struct GNUNET_TESTING_System *test_system; 37 struct GNUNET_TESTING_System *test_system;
@@ -36,6 +40,10 @@ struct TestSystemState
36}; 40};
37 41
38 42
43/**
44 * The run method of this cmd will setup a test environment for a node.
45 *
46 */
39static void 47static void
40system_create_run (void *cls, 48system_create_run (void *cls,
41 const struct GNUNET_TESTING_Command *cmd, 49 const struct GNUNET_TESTING_Command *cmd,
@@ -54,6 +62,11 @@ system_create_run (void *cls,
54 "system created\n"); 62 "system created\n");
55} 63}
56 64
65
66/**
67 * This function prepares an array with traits.
68 *
69 */
57static int 70static int
58system_create_traits (void *cls, 71system_create_traits (void *cls,
59 const void **ret, 72 const void **ret,
@@ -79,6 +92,12 @@ system_create_traits (void *cls,
79} 92}
80 93
81 94
95/**
96 * Function to get the trait with struct GNUNET_TESTING_System
97 *
98 * @param[out] test_system The struct GNUNET_TESTING_System.
99 * @return #GNUNET_OK if no error occurred, #GNUNET_SYSERR otherwise.
100 */
82int 101int
83GNUNET_TESTING_get_trait_test_system (const struct 102GNUNET_TESTING_get_trait_test_system (const struct
84 GNUNET_TESTING_Command *cmd, 103 GNUNET_TESTING_Command *cmd,
@@ -91,13 +110,16 @@ GNUNET_TESTING_get_trait_test_system (const struct
91} 110}
92 111
93 112
113/**
114 * The cleanup function of this cmd frees resources the cmd allocated.
115 *
116 */
94static void 117static void
95system_create_cleanup (void *cls, 118system_create_cleanup (void *cls,
96 const struct GNUNET_TESTING_Command *cmd) 119 const struct GNUNET_TESTING_Command *cmd)
97{ 120{
98 struct TestSystemState *tss = cls; 121 struct TestSystemState *tss = cls;
99 122
100 GNUNET_free (tss->test_system);
101 GNUNET_free (tss); 123 GNUNET_free (tss);
102} 124}
103 125
@@ -106,6 +128,7 @@ system_create_cleanup (void *cls,
106 * Create command. 128 * Create command.
107 * 129 *
108 * @param label name for command. 130 * @param label name for command.
131 * @param label name for the test environment directory.
109 * @return command. 132 * @return command.
110 */ 133 */
111struct GNUNET_TESTING_Command 134struct GNUNET_TESTING_Command
diff --git a/src/testing/testing_api_cmd_system_destroy.c b/src/testing/testing_api_cmd_system_destroy.c
new file mode 100644
index 000000000..5ed0c2fd2
--- /dev/null
+++ b/src/testing/testing_api_cmd_system_destroy.c
@@ -0,0 +1,116 @@
1/*
2 This file is part of GNUnet
3 Copyright (C) 2021 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20
21/**
22 * @file testing_api_cmd_system_destroy.c
23 * @brief cmd to destroy a testing system handle.
24 * @author t3sserakt
25 */
26#include "platform.h"
27#include "gnunet_util_lib.h"
28#include "gnunet_testing_ng_lib.h"
29#include "gnunet_testing_lib.h"
30
31
32/**
33 * Struct to hold information for callbacks.
34 *
35 */
36struct TestSystemState
37{
38 // Label of the cmd which started the test system.
39 const char *create_label;
40};
41
42
43/**
44 * The run method of this cmd will remove the test environment for a node.
45 *
46 */
47static void
48system_destroy_run (void *cls,
49 const struct GNUNET_TESTING_Command *cmd,
50 struct GNUNET_TESTING_Interpreter *is)
51{
52 struct TestSystemState *tss = cls;
53 const struct GNUNET_TESTING_Command *system_cmd;
54 struct GNUNET_TESTING_System *tl_system;
55
56 system_cmd = GNUNET_TESTING_interpreter_lookup_command (tss->create_label);
57 GNUNET_TESTING_get_trait_test_system (system_cmd,
58 &tl_system);
59 GNUNET_TESTING_system_destroy (tl_system, GNUNET_YES);
60}
61
62
63/**
64 * The cleanup function of this cmd frees resources the cmd allocated.
65 *
66 */
67static void
68system_destroy_cleanup (void *cls,
69 const struct GNUNET_TESTING_Command *cmd)
70{
71 struct TestSystemState *tss = cls;
72
73 GNUNET_free (tss);
74}
75
76
77/**
78 * Trait function of this cmd does nothing.
79 *
80 */
81static int
82system_destroy_traits (void *cls,
83 const void **ret,
84 const char *trait,
85 unsigned int index)
86{
87 return GNUNET_OK;
88}
89
90
91/**
92 * Create command.
93 *
94 * @param label name for command.
95 * @param create_label Label of the cmd which started the test system.
96 * @return command.
97 */
98struct GNUNET_TESTING_Command
99GNUNET_TESTING_cmd_system_destroy (const char *label,
100 const char *create_label)
101{
102 struct TestSystemState *tss;
103
104 tss = GNUNET_new (struct TestSystemState);
105 tss->create_label = create_label;
106
107 struct GNUNET_TESTING_Command cmd = {
108 .cls = tss,
109 .label = label,
110 .run = &system_destroy_run,
111 .cleanup = &system_destroy_cleanup,
112 .traits = &system_destroy_traits
113 };
114
115 return cmd;
116}
diff --git a/src/testing/testing_api_loop.c b/src/testing/testing_api_loop.c
index f4fa4e17e..0c24c0e26 100644
--- a/src/testing/testing_api_loop.c
+++ b/src/testing/testing_api_loop.c
@@ -35,6 +35,7 @@
35 35
36struct GNUNET_TESTING_Interpreter *is; 36struct GNUNET_TESTING_Interpreter *is;
37 37
38
38/** 39/**
39 * Closure used to sync an asynchronous with an synchronous command. 40 * Closure used to sync an asynchronous with an synchronous command.
40 */ 41 */
@@ -57,6 +58,7 @@ struct SyncTaskClosure
57 struct GNUNET_TESTING_Interpreter *is; 58 struct GNUNET_TESTING_Interpreter *is;
58}; 59};
59 60
61
60/** 62/**
61* Closure used to run the finish task. 63* Closure used to run the finish task.
62*/ 64*/
@@ -74,6 +76,7 @@ struct FinishTaskClosure
74 struct GNUNET_TESTING_Interpreter *is; 76 struct GNUNET_TESTING_Interpreter *is;
75}; 77};
76 78
79
77/** 80/**
78 * Lookup command by label. 81 * Lookup command by label.
79 * 82 *
@@ -185,6 +188,10 @@ interpreter_next (void *cls)
185} 188}
186 189
187 190
191/**
192 * This function checks if the finish function of a command returns GNUNET_YES, when the command is finished. In this case the finish function might have called interpreter_next. IF GNUNET_NO was returned this function is added to the scheduler again. In case of an error interpreter_fail is called.
193 *
194 */
188static void 195static void
189run_finish_task_next (void *cls) 196run_finish_task_next (void *cls)
190{ 197{
@@ -212,6 +219,12 @@ run_finish_task_next (void *cls)
212} 219}
213 220
214 221
222/**
223 * This function checks if the finish function of an asynchronous command returns GNUNET_YES, when the command is finished. In this case the finish function might have called interpreter_next. IF GNUNET_NO was returned this function is added to the scheduler again. In case of an error interpreter_fail is called.
224 *
225 * //TODO run_finish_task_next and this function can be merged.
226 *
227 */
215static void 228static void
216run_finish_task_sync (void *cls) 229run_finish_task_sync (void *cls)
217{ 230{
@@ -248,13 +261,17 @@ run_finish_task_sync (void *cls)
248 } 261 }
249 else 262 else
250 { 263 {
251 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 264 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
252 "Sync task finished with an error.\n"); 265 "Sync task finished with an error.\n");
253 GNUNET_TESTING_interpreter_fail (); 266 GNUNET_TESTING_interpreter_fail ();
254 } 267 }
255} 268}
256 269
257 270
271/**
272 * run method of the command created by the interpreter to wait for another command to finish.
273 *
274 */
258static void 275static void
259start_finish_on_ref (void *cls, 276start_finish_on_ref (void *cls,
260 const struct GNUNET_TESTING_Command *cmd, 277 const struct GNUNET_TESTING_Command *cmd,
@@ -277,6 +294,17 @@ start_finish_on_ref (void *cls,
277} 294}
278 295
279 296
297/**
298 * Create (synchronous) command that waits for another command to finish.
299 * If @a cmd_ref did not finish after @a timeout, this command will fail
300 * the test case.
301 *
302 * @param finish_label label for this command
303 * @param cmd_ref reference to a previous command which we should
304 * wait for (call `finish()` on)
305 * @param timeout how long to wait at most for @a cmd_ref to finish
306 * @return a finish-command.
307 */
280const struct GNUNET_TESTING_Command 308const struct GNUNET_TESTING_Command
281GNUNET_TESTING_cmd_finish (const char *finish_label, 309GNUNET_TESTING_cmd_finish (const char *finish_label,
282 const char *cmd_ref, 310 const char *cmd_ref,
@@ -340,7 +368,7 @@ GNUNET_TESTING_interpreter_fail ()
340 while (GNUNET_TESTING_cmd_is_batch (cmd)) 368 while (GNUNET_TESTING_cmd_is_batch (cmd))
341 { 369 {
342 cmd = GNUNET_TESTING_cmd_batch_get_current (cmd); 370 cmd = GNUNET_TESTING_cmd_batch_get_current (cmd);
343 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 371 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
344 "Batch is at command `%s'\n", 372 "Batch is at command `%s'\n",
345 cmd->label); 373 cmd->label);
346 } 374 }
@@ -354,7 +382,7 @@ GNUNET_TESTING_interpreter_fail ()
354 382
355 if (NULL == cmd->label) 383 if (NULL == cmd->label)
356 { 384 {
357 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 385 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
358 "Failed at command `%s'\n", 386 "Failed at command `%s'\n",
359 cmd->label); 387 cmd->label);
360 388
@@ -415,7 +443,7 @@ interpreter_run (void *cls)
415 if (NULL == cmd->label) 443 if (NULL == cmd->label)
416 { 444 {
417 445
418 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 446 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
419 "Running command END %p\n", 447 "Running command END %p\n",
420 is); 448 is);
421 is->result = GNUNET_OK; 449 is->result = GNUNET_OK;
@@ -424,7 +452,7 @@ interpreter_run (void *cls)
424 } 452 }
425 else if (NULL != cmd) 453 else if (NULL != cmd)
426 { 454 {
427 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 455 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
428 "Running command `%s' %p\n", 456 "Running command `%s' %p\n",
429 cmd->label, 457 cmd->label,
430 is); 458 is);
@@ -478,8 +506,14 @@ do_shutdown (void *cls)
478 for (unsigned int j = 0; 506 for (unsigned int j = 0;
479 NULL != (cmd = &is->commands[j])->label; 507 NULL != (cmd = &is->commands[j])->label;
480 j++) { 508 j++) {
509 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
510 "Cleaning up cmd %s\n",
511 cmd->label);
481 cmd->cleanup (cmd->cls, 512 cmd->cleanup (cmd->cls,
482 cmd); 513 cmd);
514 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
515 "Cleaned up cmd %s\n",
516 cmd->label);
483 } 517 }
484 518
485 if (NULL != is->finish_task) 519 if (NULL != is->finish_task)
diff --git a/src/testing/testing_cmds.h b/src/testing/testing_cmds.h
new file mode 100644
index 000000000..7a5860aea
--- /dev/null
+++ b/src/testing/testing_cmds.h
@@ -0,0 +1,90 @@
1/*
2 This file is part of GNUnet
3 Copyright (C) 2021 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20
21/**
22 * @file testing/testing_cmds.h
23 * @brief Message formats for communication between testing cmds helper and testcase plugins.
24 * @author t3sserakt
25 */
26
27#ifndef TESTING_CMDS_H
28#define TESTING_CMDS_H
29
30#define HELPER_CMDS_BINARY "gnunet-cmds-helper"
31
32GNUNET_NETWORK_STRUCT_BEGIN
33
34/**
35 * Initialization message for gnunet-cmds-testbed to start cmd binary.
36 */
37struct GNUNET_CMDS_HelperInit
38{
39 /**
40 * Type is GNUNET_MESSAGE_TYPE_CMDS_HELPER_INIT
41 */
42 struct GNUNET_MessageHeader header;
43
44 /**
45 *
46 */
47 uint16_t plugin_name_size GNUNET_PACKED;
48
49 /* Followed by plugin name of the plugin running the test case. This is not NULL
50 * terminated */
51};
52
53/**
54 * Reply message from cmds helper process
55 */
56struct GNUNET_CMDS_HelperReply
57{
58 /**
59 * Type is GNUNET_MESSAGE_TYPE_CMDS_HELPER_REPLY
60 */
61 struct GNUNET_MessageHeader header;
62};
63
64struct GNUNET_CMDS_PEER_STARTED
65{
66 /**
67 * Type is GNUNET_MESSAGE_TYPE_CMDS_HELPER_PEER_STARTED
68 */
69 struct GNUNET_MessageHeader header;
70};
71
72struct GNUNET_CMDS_ALL_PEERS_STARTED
73{
74 /**
75 * Type is GNUNET_MESSAGE_TYPE_CMDS_HELPER_ALL_PEERS_STARTED
76 */
77 struct GNUNET_MessageHeader header;
78};
79
80struct GNUNET_CMDS_LOCAL_FINISHED
81{
82 /**
83 * Type is GNUNET_MESSAGE_TYPE_CMDS_HELPER_LOCAL_FINISHED
84 */
85 struct GNUNET_MessageHeader header;
86};
87
88GNUNET_NETWORK_STRUCT_END
89#endif
90/* end of testing_cmds.h */
diff --git a/src/transport/Makefile.am b/src/transport/Makefile.am
index 3d8fa7774..4ea3b58c4 100644
--- a/src/transport/Makefile.am
+++ b/src/transport/Makefile.am
@@ -156,21 +156,17 @@ libgnunettransporttesting_la_LIBADD = \
156 $(top_builddir)/src/testing/libgnunettesting.la \ 156 $(top_builddir)/src/testing/libgnunettesting.la \
157 $(top_builddir)/src/arm/libgnunetarm.la \ 157 $(top_builddir)/src/arm/libgnunetarm.la \
158 $(GN_LIBINTL) 158 $(GN_LIBINTL)
159libgnunettransporttesting_la_DEPENDENCIES = \
160 libgnunettransport.la \
161 $(top_builddir)/src/hello/libgnunethello.la \
162 $(top_builddir)/src/ats/libgnunetats.la \
163 $(top_builddir)/src/util/libgnunetutil.la \
164 $(top_builddir)/src/testing/libgnunettesting.la \
165 $(top_builddir)/src/arm/libgnunetarm.la
166libgnunettransporttesting_la_LDFLAGS = \ 159libgnunettransporttesting_la_LDFLAGS = \
167 $(GN_LIB_LDFLAGS) 160 $(GN_LIB_LDFLAGS)
168 161
169libgnunettransporttesting2_la_SOURCES = \ 162libgnunettransporttesting2_la_SOURCES = \
170 transport_api_cmd_connecting_peers.c \ 163 transport_api_cmd_connecting_peers.c \
171 transport_api_cmd_start_peer.c \ 164 transport_api_cmd_start_peer.c \
165 transport_api_cmd_stop_peer.c \
172 transport_api_cmd_send_simple.c \ 166 transport_api_cmd_send_simple.c \
173 transport-testing2.c transport-testing2.h \ 167 transport-testing2.c transport-testing2.h \
168 transport-testing-ng.h \
169 transport-testing-cmds.h \
174 transport-testing-filenames2.c \ 170 transport-testing-filenames2.c \
175 transport-testing-loggers2.c \ 171 transport-testing-loggers2.c \
176 transport-testing-main2.c \ 172 transport-testing-main2.c \
@@ -187,7 +183,8 @@ libgnunettransporttesting2_la_LIBADD = \
187 $(top_builddir)/src/util/libgnunetutil.la 183 $(top_builddir)/src/util/libgnunetutil.la
188libgnunettransporttesting2_la_LDFLAGS = \ 184libgnunettransporttesting2_la_LDFLAGS = \
189 $(GN_LIBINTL) \ 185 $(GN_LIBINTL) \
190 $(GN_LIB_LDFLAGS) 186 $(GN_LIB_LDFLAGS) \
187 -version-info 0:0:0
191 188
192libgnunettransport_la_SOURCES = \ 189libgnunettransport_la_SOURCES = \
193 transport.h \ 190 transport.h \
@@ -205,10 +202,6 @@ libgnunettransport_la_LIBADD = \
205 $(top_builddir)/src/ats/libgnunetats.la \ 202 $(top_builddir)/src/ats/libgnunetats.la \
206 $(top_builddir)/src/util/libgnunetutil.la \ 203 $(top_builddir)/src/util/libgnunetutil.la \
207 $(GN_LIBINTL) 204 $(GN_LIBINTL)
208libgnunettransport_la_DEPENDENCIES = \
209 $(top_builddir)/src/hello/libgnunethello.la \
210 $(top_builddir)/src/ats/libgnunetats.la \
211 $(top_builddir)/src/util/libgnunetutil.la
212libgnunettransport_la_LDFLAGS = \ 205libgnunettransport_la_LDFLAGS = \
213 $(GN_LIB_LDFLAGS) \ 206 $(GN_LIB_LDFLAGS) \
214 -version-info 4:0:2 207 -version-info 4:0:2
@@ -397,23 +390,29 @@ plugin_LTLIBRARIES = \
397 $(HTTP_SERVER_PLUGIN_LA) \ 390 $(HTTP_SERVER_PLUGIN_LA) \
398 $(HTTPS_SERVER_PLUGIN_LA) \ 391 $(HTTPS_SERVER_PLUGIN_LA) \
399 $(WLAN_PLUGIN_LA) \ 392 $(WLAN_PLUGIN_LA) \
400 $(BT_PLUGIN_LA) 393 $(BT_PLUGIN_LA) \
401# libgnunet_plugin_cmd_simple_send.la 394 libgnunet_test_transport_plugin_cmd_simple_send.la
402 395
403#libgnunet_plugin_cmd_simple_send_la_SOURCES = \ 396libgnunet_test_transport_plugin_cmd_simple_send_la_SOURCES = \
404# plugin_cmd_simple_send.c 397 test_transport_plugin_cmd_simple_send.c
405#libgnunet_plugin_cmd_simple_send_la_LIBADD = \ 398libgnunet_test_transport_plugin_cmd_simple_send_la_LIBADD = \
406# $(top_builddir)/src/util/libgnunetutil.la \ 399 libgnunettransporttesting2.la \
407# $(top_builddir)/src/testing/libgnunettesting.la \ 400 libgnunettransportapplication.la \
408# $(top_builddir)/src/statistics/libgnunetstatistics.la \ 401 libgnunettransport.la \
409# $(top_builddir)/src/testbed/libgnunettestbed.la \ 402 $(top_builddir)/src/testing/libgnunettesting.la \
410# libgnunettransporttesting2.la \ 403 $(top_builddir)/src/peerstore/libgnunetpeerstore.la \
411# $(LTLIBINTL) 404 $(top_builddir)/src/statistics/libgnunetstatistics.la \
412#libgnunet_plugin_cmd_simple_send_la_LDFLAGS = \ 405 $(top_builddir)/src/hello/libgnunethello.la \
413# $(GN_PLUGIN_LDFLAGS) 406 $(top_builddir)/src/ats/libgnunetats.la \
407 $(top_builddir)/src/arm/libgnunetarm.la \
408 $(top_builddir)/src/util/libgnunetutil.la \
409 $(LTLIBINTL)
410libgnunet_test_transport_plugin_cmd_simple_send_la_LDFLAGS = \
411 $(GN_PLUGIN_LDFLAGS)
414 412
415if HAVE_EXPERIMENTAL 413if HAVE_EXPERIMENTAL
416plugin_LTLIBRARIES += libgnunet_plugin_transport_udp.la 414plugin_LTLIBRARIES += \
415 libgnunet_plugin_transport_udp.la
417endif 416endif
418 417
419# Note: real plugins of course need to be added 418# Note: real plugins of course need to be added
@@ -557,7 +556,7 @@ libgnunet_plugin_transport_https_server_la_CFLAGS = \
557 556
558if HAVE_TESTING 557if HAVE_TESTING
559check_PROGRAMS = \ 558check_PROGRAMS = \
560 test_transport_api_cmd_simple_send \ 559 test_transport_simple_send \
561 test_transport_address_switch_tcp \ 560 test_transport_address_switch_tcp \
562 test_transport_testing_startstop \ 561 test_transport_testing_startstop \
563 test_transport_testing_restart \ 562 test_transport_testing_restart \
@@ -646,7 +645,6 @@ endif
646if ENABLE_TEST_RUN 645if ENABLE_TEST_RUN
647AM_TESTS_ENVIRONMENT=export GNUNET_PREFIX=$${GNUNET_PREFIX:-@libdir@};export PATH=$${GNUNET_PREFIX:-@prefix@}/bin:$$PATH;unset XDG_DATA_HOME;unset XDG_CONFIG_HOME; 646AM_TESTS_ENVIRONMENT=export GNUNET_PREFIX=$${GNUNET_PREFIX:-@libdir@};export PATH=$${GNUNET_PREFIX:-@prefix@}/bin:$$PATH;unset XDG_DATA_HOME;unset XDG_CONFIG_HOME;
648TESTS = \ 647TESTS = \
649 test_transport_api_cmd_simple_send \
650 test_transport_address_switch_tcp \ 648 test_transport_address_switch_tcp \
651 $(HTTP_SWITCH) \ 649 $(HTTP_SWITCH) \
652 $(HTTPS_SWITCH) \ 650 $(HTTPS_SWITCH) \
@@ -699,13 +697,15 @@ TESTS = \
699 $(HTTP_API_TIMEOUT_TEST) \ 697 $(HTTP_API_TIMEOUT_TEST) \
700 $(HTTPS_API_TIMEOUT_TEST) \ 698 $(HTTPS_API_TIMEOUT_TEST) \
701 $(WLAN_TIMEOUT_TEST) \ 699 $(WLAN_TIMEOUT_TEST) \
702 $(BT_TIMEOUT_TEST) 700 $(BT_TIMEOUT_TEST) \
701 $(check_SCRIPTS)
703if HAVE_GETOPT_BINARY 702if HAVE_GETOPT_BINARY
704TESTS += \ 703TESTS += \
705test_transport_api_slow_ats 704test_transport_api_slow_ats
706endif 705endif
707if HAVE_EXPERIMENTAL 706if HAVE_EXPERIMENTAL
708TESTS += \ 707TESTS += \
708 test_transport_simple_send \
709 test_transport_address_switch_udp \ 709 test_transport_address_switch_udp \
710 test_plugin_udp \ 710 test_plugin_udp \
711 test_transport_api_udp \ 711 test_transport_api_udp \
@@ -723,14 +723,17 @@ TESTS += \
723endif 723endif
724endif 724endif
725 725
726test_transport_api_cmd_simple_send_SOURCES = \ 726check_SCRIPTS= \
727 test_transport_api_cmd_simple_send.c 727 test_transport_simple_send.sh
728test_transport_api_cmd_simple_send_LDADD = \ 728
729test_transport_simple_send_SOURCES = \
730 test_transport_simple_send.c
731test_transport_simple_send_LDADD = \
729 $(top_builddir)/src/testing/libgnunettesting.la \ 732 $(top_builddir)/src/testing/libgnunettesting.la \
730 $(top_builddir)/src/util/libgnunetutil.la \ 733 $(top_builddir)/src/util/libgnunetutil.la \
731 $(top_builddir)/src/testbed/libgnunettestbed.la \ 734 $(top_builddir)/src/testbed/libgnunettestbed.la \
732 libgnunettransport.la \
733 $(top_builddir)/src/hello/libgnunethello.la \ 735 $(top_builddir)/src/hello/libgnunethello.la \
736 libgnunettransport.la \
734 libgnunettransporttesting.la 737 libgnunettransporttesting.la
735 738
736test_transport_testing_startstop_SOURCES = \ 739test_transport_testing_startstop_SOURCES = \
diff --git a/src/transport/gnunet-communicator-tcp.c b/src/transport/gnunet-communicator-tcp.c
index 1b838bf9c..d8bf7c1a8 100644
--- a/src/transport/gnunet-communicator-tcp.c
+++ b/src/transport/gnunet-communicator-tcp.c
@@ -879,12 +879,15 @@ queue_destroy (struct Queue *queue)
879 struct GNUNET_HashCode h_sock; 879 struct GNUNET_HashCode h_sock;
880 int sockfd; 880 int sockfd;
881 881
882 sockfd = GNUNET_NETWORK_get_fd (queue->listen_sock); 882 if (NULL != queue->listen_sock)
883 GNUNET_CRYPTO_hash (&sockfd, 883 {
884 sizeof(int), 884 sockfd = GNUNET_NETWORK_get_fd (queue->listen_sock);
885 &h_sock); 885 GNUNET_CRYPTO_hash (&sockfd,
886 sizeof(int),
887 &h_sock);
886 888
887 lt = GNUNET_CONTAINER_multihashmap_get (lt_map, &h_sock); 889 lt = GNUNET_CONTAINER_multihashmap_get (lt_map, &h_sock);
890 }
888 891
889 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 892 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
890 "Disconnecting queue for peer `%s'\n", 893 "Disconnecting queue for peer `%s'\n",
@@ -1900,6 +1903,9 @@ queue_read (void *cls)
1900 BUF_SIZE - queue->cread_off); 1903 BUF_SIZE - queue->cread_off);
1901 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 1904 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
1902 "Received %lu bytes from TCP queue\n", rcvd); 1905 "Received %lu bytes from TCP queue\n", rcvd);
1906 GNUNET_log_from_nocheck (GNUNET_ERROR_TYPE_DEBUG,
1907 "transport",
1908 "Received %lu bytes from TCP queue\n", rcvd);
1903 if (-1 == rcvd) 1909 if (-1 == rcvd)
1904 { 1910 {
1905 if ((EAGAIN != errno) && (EINTR != errno)) 1911 if ((EAGAIN != errno) && (EINTR != errno))
@@ -2675,6 +2681,9 @@ proto_read_kx (void *cls)
2675 sizeof(pq->ibuf) - pq->ibuf_off); 2681 sizeof(pq->ibuf) - pq->ibuf_off);
2676 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 2682 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
2677 "Received %lu bytes for KX\n", rcvd); 2683 "Received %lu bytes for KX\n", rcvd);
2684 GNUNET_log_from_nocheck (GNUNET_ERROR_TYPE_DEBUG,
2685 "transport",
2686 "Received %lu bytes for KX\n", rcvd);
2678 if (-1 == rcvd) 2687 if (-1 == rcvd)
2679 { 2688 {
2680 if ((EAGAIN != errno) && (EINTR != errno)) 2689 if ((EAGAIN != errno) && (EINTR != errno))
@@ -2704,7 +2713,7 @@ proto_read_kx (void *cls)
2704 { 2713 {
2705 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 2714 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
2706 "Invalid TCP KX received from %s\n", 2715 "Invalid TCP KX received from %s\n",
2707 GNUNET_a2s (queue->address, queue->address_len)); 2716 GNUNET_a2s (pq->address, pq->address_len));
2708 gcry_cipher_close (queue->in_cipher); 2717 gcry_cipher_close (queue->in_cipher);
2709 GNUNET_free (queue); 2718 GNUNET_free (queue);
2710 free_proto_queue (pq); 2719 free_proto_queue (pq);
@@ -2824,6 +2833,10 @@ queue_read_kx (void *cls)
2824 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 2833 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
2825 "Received %lu bytes for KX\n", 2834 "Received %lu bytes for KX\n",
2826 rcvd); 2835 rcvd);
2836 GNUNET_log_from_nocheck (GNUNET_ERROR_TYPE_DEBUG,
2837 "transport",
2838 "Received %lu bytes for KX\n",
2839 rcvd);
2827 if (-1 == rcvd) 2840 if (-1 == rcvd)
2828 { 2841 {
2829 if ((EAGAIN != errno) && (EINTR != errno)) 2842 if ((EAGAIN != errno) && (EINTR != errno))
@@ -2918,6 +2931,9 @@ mq_init (void *cls, const struct GNUNET_PeerIdentity *peer, const char *address)
2918 2931
2919 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 2932 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
2920 "Connecting to %s\n", address); 2933 "Connecting to %s\n", address);
2934 GNUNET_log_from_nocheck (GNUNET_ERROR_TYPE_DEBUG,
2935 "transport",
2936 "Connecting to %s\n", address);
2921 if (0 != strncmp (address, 2937 if (0 != strncmp (address,
2922 COMMUNICATOR_ADDRESS_PREFIX "-", 2938 COMMUNICATOR_ADDRESS_PREFIX "-",
2923 strlen (COMMUNICATOR_ADDRESS_PREFIX "-"))) 2939 strlen (COMMUNICATOR_ADDRESS_PREFIX "-")))
@@ -3069,9 +3085,9 @@ do_shutdown (void *cls)
3069 GNUNET_CONTAINER_multihashmap_iterate (lt_map, &get_lt_delete_it, NULL); 3085 GNUNET_CONTAINER_multihashmap_iterate (lt_map, &get_lt_delete_it, NULL);
3070 GNUNET_CONTAINER_multipeermap_iterate (queue_map, &get_queue_delete_it, NULL); 3086 GNUNET_CONTAINER_multipeermap_iterate (queue_map, &get_queue_delete_it, NULL);
3071 GNUNET_CONTAINER_multipeermap_destroy (queue_map); 3087 GNUNET_CONTAINER_multipeermap_destroy (queue_map);
3072 GNUNET_TRANSPORT_communicator_address_remove_all (ch);
3073 if (NULL != ch) 3088 if (NULL != ch)
3074 { 3089 {
3090 GNUNET_TRANSPORT_communicator_address_remove_all (ch);
3075 GNUNET_TRANSPORT_communicator_disconnect (ch); 3091 GNUNET_TRANSPORT_communicator_disconnect (ch);
3076 ch = NULL; 3092 ch = NULL;
3077 } 3093 }
@@ -3238,7 +3254,7 @@ init_socket (struct sockaddr *addr,
3238 return GNUNET_SYSERR; 3254 return GNUNET_SYSERR;
3239 } 3255 }
3240 3256
3241 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 3257 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
3242 "address %s\n", 3258 "address %s\n",
3243 GNUNET_a2s (addr, in_len)); 3259 GNUNET_a2s (addr, in_len));
3244 3260
diff --git a/src/transport/plugin_cmd_simple_send.c b/src/transport/plugin_cmd_simple_send.c
deleted file mode 100644
index 62bb7544b..000000000
--- a/src/transport/plugin_cmd_simple_send.c
+++ /dev/null
@@ -1,188 +0,0 @@
1/*
2 This file is part of GNUnet
3 Copyright (C) 2013, 2014 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20
21/**
22 * @file testbed/plugin_cmd_simple_send.c
23 * @brief a plugin to provide the API for running test cases.
24 * @author t3sserakt
25 */
26#include "platform.h"
27#include "gnunet_testing_ng_lib.h"
28#include "gnunet_util_lib.h"
29#include "gnunet_transport_application_service.h"
30// #include "gnunet_transport_service.h"
31#include "gnunet_testbed_ng_service.h"
32#include "transport-testing2.h"
33
34/**
35 * Generic logging shortcut
36 */
37#define LOG(kind, ...) GNUNET_log (kind, __VA_ARGS__)
38
39#define BASE_DIR "testdir"
40
41struct GNUNET_MQ_MessageHandler *handlers;
42
43unsigned int are_all_peers_started;
44
45static int
46check_test (void *cls,
47 const struct GNUNET_TRANSPORT_TESTING_TestMessage *message)
48{
49 return GNUNET_OK;
50}
51
52static void
53handle_test (void *cls,
54 const struct GNUNET_TRANSPORT_TESTING_TestMessage *message)
55{
56 LOG (GNUNET_ERROR_TYPE_ERROR,
57 "message received\n");
58}
59
60static int
61check_test2 (void *cls,
62 const struct GNUNET_TRANSPORT_TESTING_TestMessage *message)
63{
64 return GNUNET_OK;
65}
66
67static void
68handle_test2 (void *cls,
69 const struct GNUNET_TRANSPORT_TESTING_TestMessage *message)
70{
71 LOG (GNUNET_ERROR_TYPE_ERROR,
72 "message received\n");
73}
74
75static void
76all_peers_started ()
77{
78 are_all_peers_started = GNUNET_YES;
79 LOG (GNUNET_ERROR_TYPE_ERROR,
80 "setting are_all_peers_started: %d\n",
81 are_all_peers_started);
82}
83
84static void
85start_testcase (TESTBED_CMD_HELPER_write_cb write_message, char *router_ip,
86 char *node_ip,
87 char *m,
88 char *n)
89{
90 char *testdir;
91 char *cfgname;
92
93 GNUNET_asprintf (&cfgname,
94 "%s%s.conf",
95 "test_transport_api2_tcp_peer",
96 n);
97
98 LOG (GNUNET_ERROR_TYPE_ERROR,
99 "cfgname: %s\n",
100 cfgname);
101
102 testdir = GNUNET_malloc (strlen (BASE_DIR) + strlen (m) + strlen (n)
103 + 1);
104
105 strcpy (testdir, BASE_DIR);
106 strcat (testdir, m);
107 strcat (testdir, n);
108
109 struct GNUNET_MQ_MessageHandler handlers[] = {
110 GNUNET_MQ_hd_var_size (test,
111 GNUNET_TRANSPORT_TESTING_SIMPLE_MTYPE,
112 struct GNUNET_TRANSPORT_TESTING_TestMessage,
113 NULL),
114 GNUNET_MQ_hd_var_size (test2,
115 GNUNET_TRANSPORT_TESTING_SIMPLE_MTYPE2,
116 struct GNUNET_TRANSPORT_TESTING_TestMessage,
117 NULL),
118 GNUNET_MQ_handler_end ()
119 };
120
121 struct GNUNET_TESTING_Command commands[] = {
122 GNUNET_TESTING_cmd_system_create ("system-create-1",
123 testdir),
124 GNUNET_TRANSPORT_cmd_start_peer ("start-peer-1",
125 "system-create-1",
126 m,
127 n,
128 handlers,
129 cfgname),
130 GNUNET_TESTING_cmd_send_peer_ready ("send-peer-ready-1",
131 write_message),
132 GNUNET_TESTING_cmd_block_until_all_peers_started ("block-1",
133 &are_all_peers_started),
134 GNUNET_TRANSPORT_cmd_connect_peers ("connect-peers-1",
135 "start-peer-1",
136 "this is useless"),
137 /*GNUNET_TESTING_cmd_send_simple ("send-simple-1",
138 char *m,
139 char *n,
140 uint32_t num,
141 const char *peer1_label,
142 const char *peer2_label),*/
143 GNUNET_TESTING_cmd_local_test_finished ("local-test-finished-1",
144 write_message)
145 };
146
147 GNUNET_TESTING_run (NULL,
148 commands,
149 GNUNET_TIME_UNIT_FOREVER_REL);
150
151}
152
153
154/**
155 * Entry point for the plugin.
156 *
157 * @param cls NULL
158 * @return the exported block API
159 */
160void *
161libgnunet_plugin_cmd_simple_send_init (void *cls)
162{
163 struct GNUNET_TESTING_PluginFunctions *api;
164
165 api = GNUNET_new (struct GNUNET_TESTING_PluginFunctions);
166 api->start_testcase = &start_testcase;
167 api->all_peers_started = &all_peers_started;
168 return api;
169}
170
171
172/**
173 * Exit point from the plugin.
174 *
175 * @param cls the return value from #libgnunet_plugin_block_test_init
176 * @return NULL
177 */
178void *
179libgnunet_plugin_cmd_simple_send_done (void *cls)
180{
181 struct GNUNET_TESTING_PluginFunctions *api = cls;
182
183 GNUNET_free (api);
184 return NULL;
185}
186
187
188/* end of plugin_cmd_simple_send.c */
diff --git a/src/transport/test_transport_api2_tcp_node1.conf b/src/transport/test_transport_api2_tcp_node1.conf
new file mode 100644
index 000000000..a867ea81a
--- /dev/null
+++ b/src/transport/test_transport_api2_tcp_node1.conf
@@ -0,0 +1,23 @@
1@INLINE@ template_cfg_peer1.conf
2[PATHS]
3GNUNET_TEST_HOME = $GNUNET_TMP/test-transport/api-tcp-p1/
4
5[transport]
6BINARY = gnunet-service-tng
7PLUGINS = tcp
8#PREFIX = valgrind --log-file=/tmp/vg_peer1-%p
9UNIXPATH = $GNUNET_RUNTIME_DIR/tng-p1.sock
10
11[communicator-tcp]
12BINARY = gnunet-communicator-tcp
13BINDTO = 192.168.15.1:60002
14DISABLE_V6 = YES
15IMMEDIATE_START = YES
16UNIXPATH = $GNUNET_RUNTIME_DIR/tcp-comm-p1.sock
17#PREFIX = valgrind --log-file=/tmp/vg_cpeer1-%p
18
19[peerstore]
20IMMEDIATE_START = YES
21
22#[transport]
23#PREFIX = valgrind
diff --git a/src/transport/test_transport_api2_tcp_node2.conf b/src/transport/test_transport_api2_tcp_node2.conf
new file mode 100644
index 000000000..f94368b3f
--- /dev/null
+++ b/src/transport/test_transport_api2_tcp_node2.conf
@@ -0,0 +1,22 @@
1@INLINE@ template_cfg_peer2.conf
2[PATHS]
3GNUNET_TEST_HOME = $GNUNET_TMP/test-transport/api-tcp-p2/
4
5[transport]
6BINARY = gnunet-service-tng
7#PREFIX = valgrind --log-file=/tmp/vg_peer2-%p
8UNIXPATH = $GNUNET_RUNTIME_DIR/tng-p2.sock
9
10[communicator-tcp]
11BINARY = gnunet-communicator-tcp
12BINDTO = 192.168.15.2:60003
13DISABLE_V6 = YES
14IMMEDIATE_START = YES
15#PREFIX = valgrind --log-file=/tmp/vg_comm2-%p
16UNIXPATH = $GNUNET_RUNTIME_DIR/tcp-comm-p2.sock
17
18[peerstore]
19IMMEDIATE_START = YES
20
21#[transport]
22#PREFIX = valgrind
diff --git a/src/transport/test_transport_api_cmd_simple_send.c b/src/transport/test_transport_api_cmd_simple_send.c
deleted file mode 100644
index 9ae8fcc2b..000000000
--- a/src/transport/test_transport_api_cmd_simple_send.c
+++ /dev/null
@@ -1,80 +0,0 @@
1/*
2 This file is part of GNUnet
3 Copyright (C) 2021 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20
21/**
22 * @file transport/test_transport_api_cmd_simple_send.c
23 * @brief Test case executing a script which sends a test message between two peers.
24 * @author t3sserakt
25 */
26#include "platform.h"
27#include "gnunet_testing_ng_lib.h"
28#include "gnunet_testbed_ng_service.h"
29#include "gnunet_util_lib.h"
30
31
32/**
33 * Main function to run the test cases.
34 *
35 * @param cls not used.
36 *
37 */
38static void
39run (void *cls)
40{
41 struct GNUNET_TESTING_Command commands[] = {
42 GNUNET_TESTBED_cmd_netjail_start ("netjail-start-1",
43 "2",
44 "1"),
45 GNUNET_TESTBED_cmd_netjail_start_testbed ("netjail-start-testbed-1",
46 "2",
47 "1",
48 "libgnunet_plugin_cmd_simple_send"),
49 GNUNET_TESTBED_cmd_stop_testbed ("stop-testbed",
50 "netjail-start-testbed-1",
51 "2",
52 "1"),
53 GNUNET_TESTBED_cmd_netjail_stop ("netjail-stop-1",
54 "2",
55 "1"),
56 GNUNET_TESTING_cmd_end ()
57 };
58
59 GNUNET_TESTING_run (NULL,
60 commands,
61 GNUNET_TIME_UNIT_FOREVER_REL);
62}
63
64
65int
66main (int argc,
67 char *const *argv)
68{
69 int rv = 0;
70
71 GNUNET_log_setup ("test-netjail",
72 "DEBUG",
73 NULL);
74 GNUNET_SCHEDULER_run (&run,
75 NULL);
76
77 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
78 "Test finished!\n");
79 return rv;
80}
diff --git a/src/transport/test_transport_plugin_cmd_simple_send.c b/src/transport/test_transport_plugin_cmd_simple_send.c
new file mode 100644
index 000000000..4b5018b60
--- /dev/null
+++ b/src/transport/test_transport_plugin_cmd_simple_send.c
@@ -0,0 +1,248 @@
1/*
2 This file is part of GNUnet
3 Copyright (C) 2021 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20
21/**
22 * @file testbed/plugin_cmd_simple_send.c
23 * @brief a plugin to provide the API for running test cases.
24 * @author t3sserakt
25 */
26#include "platform.h"
27#include "gnunet_testing_ng_lib.h"
28#include "gnunet_util_lib.h"
29#include "gnunet_transport_application_service.h"
30#include "transport-testing2.h"
31#include "transport-testing-cmds.h"
32
33/**
34 * Generic logging shortcut
35 */
36#define LOG(kind, ...) GNUNET_log (kind, __VA_ARGS__)
37
38#define BASE_DIR "testdir"
39
40/**
41 * The name for a specific test environment directory.
42 *
43 */
44char *testdir;
45
46/**
47 * The name for the configuration file of the specific node.
48 *
49 */
50char *cfgname;
51
52/**
53 * Flag indicating if all peers have been started.
54 *
55 */
56unsigned int are_all_peers_started;
57
58
59/**
60 * Function called to check a message of type GNUNET_TRANSPORT_TESTING_SIMPLE_MTYPE being
61 * received.
62 *
63 */
64static int
65check_test (void *cls,
66 const struct GNUNET_TRANSPORT_TESTING_TestMessage *message)
67{
68 return GNUNET_OK;
69}
70
71
72/**
73 * Function called to handle a message of type GNUNET_TRANSPORT_TESTING_SIMPLE_MTYPE
74 * being received.
75 *
76 */
77static void
78handle_test (void *cls,
79 const struct GNUNET_TRANSPORT_TESTING_TestMessage *message)
80{
81 LOG (GNUNET_ERROR_TYPE_ERROR,
82 "message received\n");
83}
84
85
86/**
87 * Function called to check a message of type GNUNET_TRANSPORT_TESTING_SIMPLE_MTYPE2
88 * being received.
89 *
90 */
91static int
92check_test2 (void *cls,
93 const struct GNUNET_TRANSPORT_TESTING_TestMessage *message)
94{
95 return GNUNET_OK;
96}
97
98
99/**
100 * Function called to handle a message of type GNUNET_TRANSPORT_TESTING_SIMPLE_MTYPE2
101 * being received.
102 *
103 */
104static void
105handle_test2 (void *cls,
106 const struct GNUNET_TRANSPORT_TESTING_TestMessage *message)
107{
108 LOG (GNUNET_ERROR_TYPE_ERROR,
109 "message received\n");
110}
111
112
113/**
114 * Callback to set the flag indicating all peers started. Will be called via the plugin api.
115 *
116 */
117static void
118all_peers_started ()
119{
120 are_all_peers_started = GNUNET_YES;
121 LOG (GNUNET_ERROR_TYPE_ERROR,
122 "setting are_all_peers_started: %d\n",
123 are_all_peers_started);
124}
125
126
127/**
128 * Function to start a local test case.
129 *
130 * @param write_message Callback to send a message to the master loop.
131 * @param router_ip Global address of the network namespace.
132 * @param node_ip Local address of a node i a network namespace.
133 * @param m The number of the node in a network namespace.
134 * @param n The number of the network namespace.
135 * @param local_m The number of nodes in a network namespace.
136 */
137static void
138start_testcase (TESTING_CMD_HELPER_write_cb write_message, char *router_ip,
139 char *node_ip,
140 char *m,
141 char *n,
142 char *local_m)
143{
144
145 GNUNET_asprintf (&cfgname,
146 "test_transport_api2_tcp_node%s.conf",
147 n);
148
149 LOG (GNUNET_ERROR_TYPE_ERROR,
150 "plugin cfgname: %s\n",
151 cfgname);
152
153 LOG (GNUNET_ERROR_TYPE_ERROR,
154 "node ip: %s\n",
155 node_ip);
156
157 GNUNET_asprintf (&testdir,
158 "%s%s%s",
159 BASE_DIR,
160 m,
161 n);
162
163 struct GNUNET_MQ_MessageHandler handlers[] = {
164 GNUNET_MQ_hd_var_size (test,
165 GNUNET_TRANSPORT_TESTING_SIMPLE_MTYPE,
166 struct GNUNET_TRANSPORT_TESTING_TestMessage,
167 NULL),
168 GNUNET_MQ_hd_var_size (test2,
169 GNUNET_TRANSPORT_TESTING_SIMPLE_MTYPE2,
170 struct GNUNET_TRANSPORT_TESTING_TestMessage,
171 NULL),
172 GNUNET_MQ_handler_end ()
173 };
174
175 struct GNUNET_TESTING_Command commands[] = {
176 GNUNET_TESTING_cmd_system_create ("system-create",
177 testdir),
178 GNUNET_TRANSPORT_cmd_start_peer ("start-peer",
179 "system-create",
180 m,
181 n,
182 local_m,
183 handlers,
184 cfgname),
185 GNUNET_TESTING_cmd_send_peer_ready ("send-peer-ready",
186 write_message),
187 GNUNET_TESTING_cmd_block_until_all_peers_started ("block",
188 &are_all_peers_started),
189 GNUNET_TRANSPORT_cmd_connect_peers ("connect-peers",
190 "start-peer"),
191 GNUNET_TRANSPORT_cmd_send_simple ("send-simple",
192 m,
193 n,
194 (atoi (n) - 1) * atoi (local_m) + atoi (
195 m),
196 "start-peer"),
197 GNUNET_TRANSPORT_cmd_stop_peer ("stop-peer",
198 "start-peer"),
199 GNUNET_TESTING_cmd_system_destroy ("system-destroy",
200 "system-create"),
201 GNUNET_TESTING_cmd_local_test_finished ("local-test-finished",
202 write_message)
203 };
204
205 GNUNET_TESTING_run (NULL,
206 commands,
207 GNUNET_TIME_UNIT_FOREVER_REL);
208
209}
210
211
212/**
213 * Entry point for the plugin.
214 *
215 * @param cls NULL
216 * @return the exported block API
217 */
218void *
219libgnunet_test_transport_plugin_cmd_simple_send_init (void *cls)
220{
221 struct GNUNET_TESTING_PluginFunctions *api;
222
223 api = GNUNET_new (struct GNUNET_TESTING_PluginFunctions);
224 api->start_testcase = &start_testcase;
225 api->all_peers_started = &all_peers_started;
226 return api;
227}
228
229
230/**
231 * Exit point from the plugin.
232 *
233 * @param cls the return value from #libgnunet_test_transport_plugin_block_test_init
234 * @return NULL
235 */
236void *
237libgnunet_test_transport_plugin_cmd_simple_send_done (void *cls)
238{
239 struct GNUNET_TESTING_PluginFunctions *api = cls;
240
241 GNUNET_free (api);
242 GNUNET_free (testdir);
243 GNUNET_free (cfgname);
244 return NULL;
245}
246
247
248/* end of plugin_cmd_simple_send.c */
diff --git a/src/transport/test_transport_simple_send.sh b/src/transport/test_transport_simple_send.sh
new file mode 100755
index 000000000..25d5b6797
--- /dev/null
+++ b/src/transport/test_transport_simple_send.sh
@@ -0,0 +1,2 @@
1#!/bin/bash
2exec unshare -r -nmU bash -c "mount -t tmpfs --make-rshared tmpfs /run/netns; ./test_transport_simple_send"
diff --git a/src/transport/transport-testing-cmds.h b/src/transport/transport-testing-cmds.h
new file mode 100644
index 000000000..1461a3d4d
--- /dev/null
+++ b/src/transport/transport-testing-cmds.h
@@ -0,0 +1,81 @@
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2021 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20
21/**
22 * @file transport-testing.h
23 * @brief testing lib for transport service
24 * @author Matthias Wachs
25 * @author Christian Grothoff
26 */
27#ifndef TRANSPORT_TESTING_CMDS_H
28#define TRANSPORT_TESTING_CMDS_H
29#include "gnunet_testing_lib.h"
30
31struct GNUNET_TESTING_Command
32GNUNET_TRANSPORT_cmd_start_peer (const char *label,
33 const char *system_label,
34 char *m,
35 char *n,
36 char *local_m,
37 struct GNUNET_MQ_MessageHandler *handlers,
38 const char *cfgname);
39
40struct GNUNET_TESTING_Command
41GNUNET_TRANSPORT_cmd_stop_peer (const char *label,
42 const char *start_label);
43
44struct GNUNET_TESTING_Command
45GNUNET_TRANSPORT_cmd_connect_peers (const char *label,
46 const char *start_peer_label);
47
48struct GNUNET_TESTING_Command
49GNUNET_TRANSPORT_cmd_send_simple (const char *label,
50 char *m,
51 char *n,
52 uint32_t num,
53 const char *start_peer_label);
54
55int
56GNUNET_TRANSPORT_get_trait_peer_id (const struct
57 GNUNET_TESTING_Command *cmd,
58 struct GNUNET_PeerIdentity **id);
59
60int
61GNUNET_TRANSPORT_get_trait_connected_peers_map (const struct
62 GNUNET_TESTING_Command
63 *cmd,
64 struct
65 GNUNET_CONTAINER_MultiShortmap *
66 *
67 connected_peers_map);
68int
69GNUNET_TRANSPORT_get_trait_hello_size (const struct
70 GNUNET_TESTING_Command
71 *cmd,
72 size_t **hello_size);
73
74int
75GNUNET_TRANSPORT_get_trait_hello (const struct
76 GNUNET_TESTING_Command
77 *cmd,
78 char **hello);
79
80#endif
81/* end of transport_testing.h */
diff --git a/src/transport/transport-testing-ng.h b/src/transport/transport-testing-ng.h
index cd5ba65a9..cd4e1f3fe 100644
--- a/src/transport/transport-testing-ng.h
+++ b/src/transport/transport-testing-ng.h
@@ -22,50 +22,86 @@
22 * @author t3sserakt 22 * @author t3sserakt
23 */ 23 */
24 24
25struct TngState 25struct StartPeerState
26{ 26{
27 /** 27 /**
28 * Handle to operation 28 * Receive callback
29 */ 29 */
30 struct GNUNET_TESTBED_Operation *operation; 30 struct GNUNET_MQ_MessageHandler *handlers;
31
32 const char *cfgname;
33
34 /**
35 * Peer's configuration
36 */
37 struct GNUNET_CONFIGURATION_Handle *cfg;
38
39 struct GNUNET_TESTING_Peer *peer;
31 40
32 /** 41 /**
33 * Flag indicating if service is ready. 42 * Peer identity
34 */ 43 */
35 int service_ready; 44 struct GNUNET_PeerIdentity id;
36 45
37 /** 46 /**
38 * Abort task identifier 47 * Peer's transport service handle
39 */ 48 */
40 struct GNUNET_SCHEDULER_Task *abort_task; 49 struct GNUNET_TRANSPORT_CoreHandle *th;
41 50
42 /** 51 /**
43 * Label of peer command. 52 * Application handle
44 */ 53 */
45 const char *peer_label; 54 struct GNUNET_TRANSPORT_ApplicationHandle *ah;
46 55
47 /** 56 /**
48 * Name of service to start. 57 * Peer's PEERSTORE Handle
49 */ 58 */
50 const char *servicename; 59 struct GNUNET_PEERSTORE_Handle *ph;
51 60
52 /** 61 /**
53 * Peer identity of the system. 62 * Hello get task
54 */ 63 */
55 struct GNUNET_PeerIdentity *peer_identity; 64 struct GNUNET_SCHEDULER_Task *rh_task;
56 65
57 /** 66 /**
58 * Message handler for transport service. 67 * Peer's transport get hello handle to retrieve peer's HELLO message
59 */ 68 */
60 const struct GNUNET_MQ_MessageHandler *handlers; 69 struct GNUNET_PEERSTORE_IterateContext *pic;
61 70
62 /** 71 /**
63 * Notify connect callback 72 * Hello
64 */ 73 */
65 GNUNET_TRANSPORT_NotifyConnect nc; 74 char *hello;
75
76 /**
77 * Hello size
78 */
79 size_t hello_size;
80
81 char *m;
82
83 char *n;
84
85 char *local_m;
86
87 unsigned int finished;
88
89 const char *system_label;
66 90
67 /** 91 /**
68 * Closure for the @a nc callback 92 * An unique number to identify the peer
69 */ 93 */
70 void *cb_cls; 94 unsigned int no;
95
96 struct GNUNET_CONTAINER_MultiShortmap *connected_peers_map;
97
98 struct GNUNET_TESTING_System *tl_system;
99
71}; 100};
101
102
103int
104GNUNET_TRANSPORT_get_trait_state (const struct
105 GNUNET_TESTING_Command
106 *cmd,
107 struct StartPeerState **sps);
diff --git a/src/transport/transport-testing2.h b/src/transport/transport-testing2.h
index a6732e308..e2167ca7e 100644
--- a/src/transport/transport-testing2.h
+++ b/src/transport/transport-testing2.h
@@ -920,42 +920,5 @@ GNUNET_TRANSPORT_TESTING_get_test_plugin_name (const char *executable,
920char * 920char *
921GNUNET_TRANSPORT_TESTING_get_test_source_name (const char *file); 921GNUNET_TRANSPORT_TESTING_get_test_source_name (const char *file);
922 922
923struct GNUNET_TESTING_Command
924GNUNET_TRANSPORT_cmd_start_peer (const char *label,
925 const char *system_label,
926 char *m,
927 char *n,
928 struct GNUNET_MQ_MessageHandler *handlers,
929 const char *cfgname);
930
931struct GNUNET_TESTING_Command
932GNUNET_TRANSPORT_cmd_connect_peers (const char *label,
933 const char *peer1_label,
934 const char *peer2_label);
935
936int
937GNUNET_TRANSPORT_get_trait_peer_id (const struct
938 GNUNET_TESTING_Command *cmd,
939 struct GNUNET_PeerIdentity **id);
940
941int
942GNUNET_TRANSPORT_get_trait_connected_peers_map (const struct
943 GNUNET_TESTING_Command
944 *cmd,
945 struct
946 GNUNET_CONTAINER_MultiPeerMap **
947 connected_peers_map);
948int
949GNUNET_TRANSPORT_get_trait_hello_size (const struct
950 GNUNET_TESTING_Command
951 *cmd,
952 size_t **hello_size);
953
954int
955GNUNET_TRANSPORT_get_trait_hello (const struct
956 GNUNET_TESTING_Command
957 *cmd,
958 char **hello);
959
960#endif 923#endif
961/* end of transport_testing.h */ 924/* end of transport_testing.h */
diff --git a/src/transport/transport_api_cmd_connecting_peers.c b/src/transport/transport_api_cmd_connecting_peers.c
index 0f2154c46..34b3d5925 100644
--- a/src/transport/transport_api_cmd_connecting_peers.c
+++ b/src/transport/transport_api_cmd_connecting_peers.c
@@ -29,20 +29,37 @@
29#include "gnunet_transport_application_service.h" 29#include "gnunet_transport_application_service.h"
30#include "gnunet_hello_lib.h" 30#include "gnunet_hello_lib.h"
31#include "gnunet_transport_service.h" 31#include "gnunet_transport_service.h"
32#include "transport-testing-cmds.h"
32 33
33/** 34/**
34 * Generic logging shortcut 35 * Generic logging shortcut
35 */ 36 */
36#define LOG(kind, ...) GNUNET_log (kind, __VA_ARGS__) 37#define LOG(kind, ...) GNUNET_log (kind, __VA_ARGS__)
37 38
39/**
40 * Struct to store information needed in callbacks.
41 *
42 */
38struct ConnectPeersState 43struct ConnectPeersState
39{ 44{
40 const char *peer1_label; 45 /**
41 46 * Label of the cmd to start a peer.
42 const char *peer2_label; 47 *
48 */
49 const char *start_peer_label;
50
51 /**
52 * The peer identity of this peer.
53 *
54 */
55 struct GNUNET_PeerIdentity *id;
43}; 56};
44 57
45 58
59/**
60 * The run method of this cmd will connect to peers.
61 *
62 */
46static void 63static void
47connect_peers_run (void *cls, 64connect_peers_run (void *cls,
48 const struct GNUNET_TESTING_Command *cmd, 65 const struct GNUNET_TESTING_Command *cmd,
@@ -50,25 +67,43 @@ connect_peers_run (void *cls,
50{ 67{
51 struct ConnectPeersState *cps = cls; 68 struct ConnectPeersState *cps = cls;
52 const struct GNUNET_TESTING_Command *peer1_cmd; 69 const struct GNUNET_TESTING_Command *peer1_cmd;
53 const struct GNUNET_TESTING_Command *peer2_cmd; 70 // const struct GNUNET_TESTING_Command *peer2_cmd;
54 struct GNUNET_TRANSPORT_ApplicationHandle *ah; 71 struct GNUNET_TRANSPORT_ApplicationHandle *ah;
55 struct GNUNET_PeerIdentity *id; 72 struct GNUNET_PeerIdentity *peer = GNUNET_new (struct GNUNET_PeerIdentity);
56 char *addr; 73 char *addr;
57 struct GNUNET_TIME_Absolute t; 74 // struct GNUNET_TIME_Absolute t;
58 char *hello; 75 char *hello;
59 size_t *hello_size; 76 // size_t *hello_size;
60 enum GNUNET_NetworkType nt = 0; 77 enum GNUNET_NetworkType nt = 0;
78 char *peer_id;
79 struct GNUNET_PeerIdentity *id;
61 80
62 peer1_cmd = GNUNET_TESTING_interpreter_lookup_command (cps->peer1_label); 81 peer1_cmd = GNUNET_TESTING_interpreter_lookup_command (cps->start_peer_label);
63 GNUNET_TRANSPORT_get_trait_application_handle (peer1_cmd, 82 GNUNET_TRANSPORT_get_trait_application_handle (peer1_cmd,
64 &ah); 83 &ah);
65 84
66 GNUNET_TRANSPORT_get_trait_hello (peer1_cmd, 85 GNUNET_TRANSPORT_get_trait_hello (peer1_cmd,
67 &hello); 86 &hello);
68 87
69 LOG (GNUNET_ERROR_TYPE_ERROR, 88 GNUNET_TRANSPORT_get_trait_peer_id (peer1_cmd,
70 "hello: %s\n", 89 &id);
71 hello); 90
91 if (strstr (hello, "60002") != NULL)
92 {
93 addr = "tcp-192.168.15.2:60003";
94 peer_id = "F2F3X9G1YNCTXKK7A4J6M4ZM4BBSKC9DEXZVHCWQ475M0C7PNWCG";
95 }
96 else
97 {
98 addr = "tcp-192.168.15.1:60002";
99 peer_id = "4TTC9WBSVP9RJT6DVEZ7E0TDW7TQXC11NR1EMR2F8ARS87WZ2730";
100 }
101
102 GNUNET_CRYPTO_eddsa_public_key_from_string (peer_id,
103 strlen (peer_id),
104 &peer->public_key);
105
106 cps->id = peer;
72 107
73 // TODO This does not work, because the other peer is running in another local loop. We need to message between different local loops. For now we will create the hello manually with the known information about the other local peers. 108 // TODO This does not work, because the other peer is running in another local loop. We need to message between different local loops. For now we will create the hello manually with the known information about the other local peers.
74 // --------------------------------------------- 109 // ---------------------------------------------
@@ -84,50 +119,63 @@ connect_peers_run (void *cls,
84 *hello_size, 119 *hello_size,
85 id, 120 id,
86 &nt, 121 &nt,
87 &t); 122 &t);*/
123
124 // ----------------------------------------------
88 125
89 //----------------------------------------------
90 126
91 GNUNET_TRANSPORT_application_validate (ah, 127 GNUNET_TRANSPORT_application_validate (ah,
92 id, 128 peer,
93 nt, 129 nt,
94 addr);*/ 130 addr);
95} 131}
96 132
97 133
134/**
135 * The finish function of this cmd will check if the peer we are trying to connect to is in the connected peers map of the start peer cmd for this peer.
136 *
137 */
98static int 138static int
99connect_peers_finish (void *cls, 139connect_peers_finish (void *cls,
100 GNUNET_SCHEDULER_TaskCallback cont, 140 GNUNET_SCHEDULER_TaskCallback cont,
101 void *cont_cls) 141 void *cont_cls)
102{ 142{
103 /*struct ConnectPeersState *cps = cls; 143 struct ConnectPeersState *cps = cls;
104 const struct GNUNET_TESTING_Command *peer1_cmd; 144 const struct GNUNET_TESTING_Command *peer1_cmd;
105 const struct GNUNET_TESTING_Command *peer2_cmd; 145 struct GNUNET_CONTAINER_MultiShortmap *connected_peers_map;
106 struct GNUNET_CONTAINER_MultiPeerMap *connected_peers_map;
107 unsigned int ret; 146 unsigned int ret;
108 struct GNUNET_PeerIdentity *id; 147 struct GNUNET_ShortHashCode *key = GNUNET_new (struct GNUNET_ShortHashCode);
148 struct GNUNET_HashCode hc;
149 int node_number;
109 150
110 peer1_cmd = GNUNET_TESTING_interpreter_lookup_command (cps->peer1_label); 151 peer1_cmd = GNUNET_TESTING_interpreter_lookup_command (cps->start_peer_label);
111 GNUNET_TRANSPORT_get_trait_peer_id (peer1_cmd, 152 GNUNET_TRANSPORT_get_trait_connected_peers_map (peer1_cmd,
112 &id); 153 &connected_peers_map);
113 154
114 peer2_cmd = GNUNET_TESTING_interpreter_lookup_command (cps->peer2_label); 155 node_number = 1;
115 GNUNET_TRANSPORT_get_trait_connected_peers_map (peer2_cmd, 156 GNUNET_CRYPTO_hash (&node_number, sizeof(node_number), &hc);
116 &connected_peers_map);
117 157
118 ret = GNUNET_CONTAINER_multipeermap_contains (connected_peers_map, 158 // TODO we need to store with a key identifying the netns node in the future. For now we have only one connecting node.
119 id); 159 memcpy (key,
160 &hc,
161 sizeof (*key));
162 ret = GNUNET_CONTAINER_multishortmap_contains (connected_peers_map,
163 key);
120 164
121 if (GNUNET_YES == ret) 165 if (GNUNET_YES == ret)
122 { 166 {
123 cont (cont_cls); 167 cont (cont_cls);
124 } 168 }
125 169
126 return ret;*/ 170 GNUNET_free (key);
127 return GNUNET_OK; 171 return ret;
128} 172}
129 173
130 174
175/**
176 * Trait function of this cmd does nothing.
177 *
178 */
131static int 179static int
132connect_peers_traits (void *cls, 180connect_peers_traits (void *cls,
133 const void **ret, 181 const void **ret,
@@ -138,12 +186,17 @@ connect_peers_traits (void *cls,
138} 186}
139 187
140 188
189/**
190 * The cleanup function of this cmd frees resources the cmd allocated.
191 *
192 */
141static void 193static void
142connect_peers_cleanup (void *cls, 194connect_peers_cleanup (void *cls,
143 const struct GNUNET_TESTING_Command *cmd) 195 const struct GNUNET_TESTING_Command *cmd)
144{ 196{
145 struct ConnectPeersState *cps = cls; 197 struct ConnectPeersState *cps = cls;
146 198
199 GNUNET_free (cps->id);
147 GNUNET_free (cps); 200 GNUNET_free (cps);
148} 201}
149 202
@@ -152,18 +205,17 @@ connect_peers_cleanup (void *cls,
152 * Create command. 205 * Create command.
153 * 206 *
154 * @param label name for command. 207 * @param label name for command.
208 * @param start_peer_label Label of the cmd to start a peer.
155 * @return command. 209 * @return command.
156 */ 210 */
157struct GNUNET_TESTING_Command 211struct GNUNET_TESTING_Command
158GNUNET_TRANSPORT_cmd_connect_peers (const char *label, 212GNUNET_TRANSPORT_cmd_connect_peers (const char *label,
159 const char *peer1_label, 213 const char *start_peer_label)
160 const char *peer2_label)
161{ 214{
162 struct ConnectPeersState *cps; 215 struct ConnectPeersState *cps;
163 216
164 cps = GNUNET_new (struct ConnectPeersState); 217 cps = GNUNET_new (struct ConnectPeersState);
165 cps->peer1_label = peer1_label; 218 cps->start_peer_label = start_peer_label;
166 cps->peer2_label = peer2_label;
167 219
168 220
169 struct GNUNET_TESTING_Command cmd = { 221 struct GNUNET_TESTING_Command cmd = {
diff --git a/src/transport/transport_api_cmd_send_simple.c b/src/transport/transport_api_cmd_send_simple.c
index 4a60f1a12..f9e515c0f 100644
--- a/src/transport/transport_api_cmd_send_simple.c
+++ b/src/transport/transport_api_cmd_send_simple.c
@@ -26,21 +26,45 @@
26#include "platform.h" 26#include "platform.h"
27#include "gnunet_util_lib.h" 27#include "gnunet_util_lib.h"
28#include "gnunet_testing_ng_lib.h" 28#include "gnunet_testing_ng_lib.h"
29#include "transport-testing.h" 29#include "transport-testing2.h"
30#include "transport-testing-cmds.h"
30 31
32/**
33 * Struct to hold information for callbacks.
34 *
35 */
31struct SendSimpleState 36struct SendSimpleState
32{ 37{
38 /**
39 * The number of the local node of the actual network namespace.
40 *
41 */
33 char *m; 42 char *m;
34 43
44 /**
45 * The number of the actual namespace.
46 *
47 */
35 char *n; 48 char *n;
36 49
50 /**
51 * Number globally identifying the node.
52 *
53 */
37 uint32_t num; 54 uint32_t num;
38 55
39 const char *peer1_label; 56 /**
40 57 * Label of the cmd to start a peer.
41 const char *peer2_label; 58 *
59 */
60 const char *start_peer_label;
42}; 61};
43 62
63
64/**
65 * Trait function of this cmd does nothing.
66 *
67 */
44static int 68static int
45send_simple_traits (void *cls, 69send_simple_traits (void *cls,
46 const void **ret, 70 const void **ret,
@@ -51,6 +75,10 @@ send_simple_traits (void *cls,
51} 75}
52 76
53 77
78/**
79 * The cleanup function of this cmd frees resources the cmd allocated.
80 *
81 */
54static void 82static void
55send_simple_cleanup (void *cls, 83send_simple_cleanup (void *cls,
56 const struct GNUNET_TESTING_Command *cmd) 84 const struct GNUNET_TESTING_Command *cmd)
@@ -61,6 +89,10 @@ send_simple_cleanup (void *cls,
61} 89}
62 90
63 91
92/**
93 * The run method of this cmd will send a simple message to the connected peer.
94 *
95 */
64static void 96static void
65send_simple_run (void *cls, 97send_simple_run (void *cls,
66 const struct GNUNET_TESTING_Command *cmd, 98 const struct GNUNET_TESTING_Command *cmd,
@@ -70,21 +102,24 @@ send_simple_run (void *cls,
70 struct GNUNET_MQ_Envelope *env; 102 struct GNUNET_MQ_Envelope *env;
71 struct GNUNET_TRANSPORT_TESTING_TestMessage *test; 103 struct GNUNET_TRANSPORT_TESTING_TestMessage *test;
72 struct GNUNET_MQ_Handle *mq; 104 struct GNUNET_MQ_Handle *mq;
73 struct GNUNET_CONTAINER_MultiPeerMap *connected_peers_map; 105 struct GNUNET_CONTAINER_MultiShortmap *connected_peers_map;
74 struct GNUNET_PeerIdentity *id;
75 const struct GNUNET_TESTING_Command *peer1_cmd; 106 const struct GNUNET_TESTING_Command *peer1_cmd;
76 const struct GNUNET_TESTING_Command *peer2_cmd; 107 struct GNUNET_ShortHashCode *key = GNUNET_new (struct GNUNET_ShortHashCode);
108 struct GNUNET_HashCode hc;
109 int node_number;
77 110
78 peer1_cmd = GNUNET_TESTING_interpreter_lookup_command (sss->peer1_label); 111 peer1_cmd = GNUNET_TESTING_interpreter_lookup_command (sss->start_peer_label);
79 GNUNET_TRANSPORT_get_trait_connected_peers_map (peer1_cmd, 112 GNUNET_TRANSPORT_get_trait_connected_peers_map (peer1_cmd,
80 &connected_peers_map); 113 &connected_peers_map);
81 114
82 peer2_cmd = GNUNET_TESTING_interpreter_lookup_command (sss->peer2_label); 115 node_number = 1;
83 GNUNET_TRANSPORT_get_trait_peer_id (peer2_cmd, 116 GNUNET_CRYPTO_hash (&node_number, sizeof(node_number), &hc);
84 &id); 117 memcpy (key,
118 &hc,
119 sizeof (*key));
85 120
86 mq = GNUNET_CONTAINER_multipeermap_get (connected_peers_map, 121 mq = GNUNET_CONTAINER_multishortmap_get (connected_peers_map,
87 id); 122 key);
88 123
89 env = GNUNET_MQ_msg_extra (test, 124 env = GNUNET_MQ_msg_extra (test,
90 2600 - sizeof(*test), 125 2600 - sizeof(*test),
@@ -93,12 +128,9 @@ send_simple_run (void *cls,
93 memset (&test[1], 128 memset (&test[1],
94 sss->num, 129 sss->num,
95 2600 - sizeof(*test)); 130 2600 - sizeof(*test));
96 /*GNUNET_MQ_notify_sent (env,
97 cont,
98 cont_cls);*/
99 GNUNET_MQ_send (mq, 131 GNUNET_MQ_send (mq,
100 env); 132 env);
101 133 GNUNET_free (key);
102 134
103} 135}
104 136
@@ -107,15 +139,18 @@ send_simple_run (void *cls,
107 * Create command. 139 * Create command.
108 * 140 *
109 * @param label name for command. 141 * @param label name for command.
142 * @param m The number of the local node of the actual network namespace.
143 * @param n The number of the actual namespace.
144 * @param num Number globally identifying the node.
145 * @param start_peer_label Label of the cmd to start a peer.
110 * @return command. 146 * @return command.
111 */ 147 */
112struct GNUNET_TESTING_Command 148struct GNUNET_TESTING_Command
113GNUNET_TESTING_cmd_send_simple (const char *label, 149GNUNET_TRANSPORT_cmd_send_simple (const char *label,
114 char *m, 150 char *m,
115 char *n, 151 char *n,
116 uint32_t num, 152 uint32_t num,
117 const char *peer1_label, 153 const char *start_peer_label)
118 const char *peer2_label)
119{ 154{
120 struct SendSimpleState *sss; 155 struct SendSimpleState *sss;
121 156
@@ -123,6 +158,7 @@ GNUNET_TESTING_cmd_send_simple (const char *label,
123 sss->m = m; 158 sss->m = m;
124 sss->n = n; 159 sss->n = n;
125 sss->num = num; 160 sss->num = num;
161 sss->start_peer_label = start_peer_label;
126 162
127 struct GNUNET_TESTING_Command cmd = { 163 struct GNUNET_TESTING_Command cmd = {
128 .cls = sss, 164 .cls = sss,
diff --git a/src/transport/transport_api_cmd_start_peer.c b/src/transport/transport_api_cmd_start_peer.c
index c9af497ae..729d981c0 100644
--- a/src/transport/transport_api_cmd_start_peer.c
+++ b/src/transport/transport_api_cmd_start_peer.c
@@ -29,91 +29,22 @@
29#include "gnunet_peerstore_service.h" 29#include "gnunet_peerstore_service.h"
30#include "gnunet_transport_core_service.h" 30#include "gnunet_transport_core_service.h"
31#include "gnunet_transport_application_service.h" 31#include "gnunet_transport_application_service.h"
32#include "transport-testing-ng.h"
32 33
33/** 34/**
34 * Generic logging shortcut 35 * Generic logging shortcut
35 */ 36 */
36#define LOG(kind, ...) GNUNET_log (kind, __VA_ARGS__) 37#define LOG(kind, ...) GNUNET_log (kind, __VA_ARGS__)
37 38
38struct StartPeerState
39{
40 /**
41 * Receive callback
42 */
43 struct GNUNET_MQ_MessageHandler *handlers;
44
45 const char *cfgname;
46
47 /**
48 * Peer's configuration
49 */
50 struct GNUNET_CONFIGURATION_Handle *cfg;
51
52 struct GNUNET_TESTING_Peer *peer;
53
54 /**
55 * Peer identity
56 */
57 struct GNUNET_PeerIdentity *id;
58
59 /**
60 * Peer's transport service handle
61 */
62 struct GNUNET_TRANSPORT_CoreHandle *th;
63
64 /**
65 * Application handle
66 */
67 struct GNUNET_TRANSPORT_ApplicationHandle *ah;
68
69 /**
70 * Peer's PEERSTORE Handle
71 */
72 struct GNUNET_PEERSTORE_Handle *ph;
73
74 /**
75 * Hello get task
76 */
77 struct GNUNET_SCHEDULER_Task *rh_task;
78
79 /**
80 * Peer's transport get hello handle to retrieve peer's HELLO message
81 */
82 struct GNUNET_PEERSTORE_IterateContext *pic;
83
84 /**
85 * Hello
86 */
87 char *hello;
88
89 /**
90 * Hello size
91 */
92 size_t hello_size;
93
94 char *m;
95
96 char *n;
97
98 unsigned int finished;
99
100 const char *system_label;
101
102 /**
103 * An unique number to identify the peer
104 */
105 unsigned int no;
106
107 struct GNUNET_CONTAINER_MultiPeerMap *connected_peers_map;
108
109 struct GNUNET_TESTING_System *tl_system;
110
111};
112
113 39
114static void 40static void
115retrieve_hello (void *cls); 41retrieve_hello (void *cls);
116 42
43
44/**
45 * Callback delivering the hello of this peer from peerstore.
46 *
47 */
117static void 48static void
118hello_iter_cb (void *cb_cls, 49hello_iter_cb (void *cb_cls,
119 const struct GNUNET_PEERSTORE_Record *record, 50 const struct GNUNET_PEERSTORE_Record *record,
@@ -138,6 +69,11 @@ hello_iter_cb (void *cb_cls,
138} 69}
139 70
140 71
72/**
73 * Function to start the retrieval task to retrieve the hello of this peer
74 * from the peerstore.
75 *
76 */
141static void 77static void
142retrieve_hello (void *cls) 78retrieve_hello (void *cls)
143{ 79{
@@ -145,13 +81,18 @@ retrieve_hello (void *cls)
145 sps->rh_task = NULL; 81 sps->rh_task = NULL;
146 sps->pic = GNUNET_PEERSTORE_iterate (sps->ph, 82 sps->pic = GNUNET_PEERSTORE_iterate (sps->ph,
147 "transport", 83 "transport",
148 sps->id, 84 &sps->id,
149 GNUNET_PEERSTORE_TRANSPORT_HELLO_KEY, 85 GNUNET_PEERSTORE_TRANSPORT_HELLO_KEY,
150 hello_iter_cb, 86 hello_iter_cb,
151 sps); 87 sps);
152 88
153} 89}
154 90
91
92/**
93 * This function checks StartPeerState#finished, which is set when the hello was retrieved.
94 *
95 */
155static int 96static int
156start_peer_finish (void *cls, 97start_peer_finish (void *cls,
157 GNUNET_SCHEDULER_TaskCallback cont, 98 GNUNET_SCHEDULER_TaskCallback cont,
@@ -168,6 +109,10 @@ start_peer_finish (void *cls,
168} 109}
169 110
170 111
112/**
113 * Disconnect callback for the connection to the core service.
114 *
115 */
171static void 116static void
172notify_disconnect (void *cls, 117notify_disconnect (void *cls,
173 const struct GNUNET_PeerIdentity *peer, 118 const struct GNUNET_PeerIdentity *peer,
@@ -179,38 +124,57 @@ notify_disconnect (void *cls,
179 "Peer %s disconnected from peer %u (`%s')\n", 124 "Peer %s disconnected from peer %u (`%s')\n",
180 GNUNET_i2s (peer), 125 GNUNET_i2s (peer),
181 sps->no, 126 sps->no,
182 GNUNET_i2s (sps->id)); 127 GNUNET_i2s (&sps->id));
183 128
184} 129}
185 130
186 131
132/**
133 * Connect callback for the connection to the core service.
134 *
135 */
187static void * 136static void *
188notify_connect (void *cls, 137notify_connect (void *cls,
189 const struct GNUNET_PeerIdentity *peer, 138 const struct GNUNET_PeerIdentity *peer,
190 struct GNUNET_MQ_Handle *mq) 139 struct GNUNET_MQ_Handle *mq)
191{ 140{
192 struct StartPeerState *sps = cls; 141 struct StartPeerState *sps = cls;
142 struct GNUNET_ShortHashCode *key = GNUNET_new (struct GNUNET_ShortHashCode);
143 struct GNUNET_HashCode hc;
144 int node_number;
193 145
194 146 void *ret = NULL;
195 void *ret;
196 147
197 148
198 LOG (GNUNET_ERROR_TYPE_DEBUG, 149 LOG (GNUNET_ERROR_TYPE_DEBUG,
199 "Peer %s connected to peer %u (`%s')\n", 150 "Peer %s connected to peer %u (`%s')\n",
200 GNUNET_i2s (peer), 151 GNUNET_i2s (peer),
201 sps->no, 152 sps->no,
202 GNUNET_i2s (sps->id)); 153 GNUNET_i2s (&sps->id));
154
155 // TODO we need to store with a key identifying the netns node in the future. For now we have only one connecting node.
156 node_number = 1;
157 GNUNET_CRYPTO_hash (&node_number, sizeof(node_number), &hc);
158
203 159
204 GNUNET_CONTAINER_multipeermap_put (sps->connected_peers_map, 160 memcpy (key,
205 peer, 161 &hc,
206 mq, 162 sizeof (*key));
207 GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); 163 GNUNET_CONTAINER_multishortmap_put (sps->connected_peers_map,
164 key,
165 mq,
166 GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
208 167
168 GNUNET_free (key);
209 // TODO what does the handler function need? 169 // TODO what does the handler function need?
210 return ret; 170 return ret;
211} 171}
212 172
213 173
174/**
175 * The run method of this cmd will start all services of a peer to test the transport service.
176 *
177 */
214static void 178static void
215start_peer_run (void *cls, 179start_peer_run (void *cls,
216 const struct GNUNET_TESTING_Command *cmd, 180 const struct GNUNET_TESTING_Command *cmd,
@@ -251,6 +215,7 @@ start_peer_run (void *cls,
251 sps->cfgname); 215 sps->cfgname);
252 GNUNET_CONFIGURATION_destroy (sps->cfg); 216 GNUNET_CONFIGURATION_destroy (sps->cfg);
253 GNUNET_TESTING_interpreter_fail (); 217 GNUNET_TESTING_interpreter_fail ();
218 return;
254 } 219 }
255 220
256 sps->peer = GNUNET_TESTING_peer_configure (sps->tl_system, 221 sps->peer = GNUNET_TESTING_peer_configure (sps->tl_system,
@@ -266,6 +231,7 @@ start_peer_run (void *cls,
266 emsg); 231 emsg);
267 GNUNET_free (emsg); 232 GNUNET_free (emsg);
268 GNUNET_TESTING_interpreter_fail (); 233 GNUNET_TESTING_interpreter_fail ();
234 return;
269 } 235 }
270 236
271 if (GNUNET_OK != GNUNET_TESTING_peer_start (sps->peer)) 237 if (GNUNET_OK != GNUNET_TESTING_peer_start (sps->peer))
@@ -275,13 +241,16 @@ start_peer_run (void *cls,
275 sps->cfgname); 241 sps->cfgname);
276 GNUNET_free (emsg); 242 GNUNET_free (emsg);
277 GNUNET_TESTING_interpreter_fail (); 243 GNUNET_TESTING_interpreter_fail ();
244 return;
278 } 245 }
279 246
280 memset (&dummy, 247 memset (&dummy,
281 '\0', 248 '\0',
282 sizeof(dummy)); 249 sizeof(dummy));
250
283 GNUNET_TESTING_peer_get_identity (sps->peer, 251 GNUNET_TESTING_peer_get_identity (sps->peer,
284 sps->id); 252 &sps->id);
253
285 if (0 == memcmp (&dummy, 254 if (0 == memcmp (&dummy,
286 &sps->id, 255 &sps->id,
287 sizeof(struct GNUNET_PeerIdentity))) 256 sizeof(struct GNUNET_PeerIdentity)))
@@ -291,11 +260,13 @@ start_peer_run (void *cls,
291 sps->no); 260 sps->no);
292 GNUNET_free (emsg); 261 GNUNET_free (emsg);
293 GNUNET_TESTING_interpreter_fail (); 262 GNUNET_TESTING_interpreter_fail ();
263 return;
294 } 264 }
295 LOG (GNUNET_ERROR_TYPE_DEBUG, 265 LOG (GNUNET_ERROR_TYPE_DEBUG,
296 "Peer %u configured with identity `%s'\n", 266 "Peer %u configured with identity `%s'\n",
297 sps->no, 267 sps->no,
298 GNUNET_i2s_full (sps->id)); 268 GNUNET_i2s_full (&sps->id));
269
299 sps->th = GNUNET_TRANSPORT_core_connect (sps->cfg, 270 sps->th = GNUNET_TRANSPORT_core_connect (sps->cfg,
300 NULL, 271 NULL,
301 sps->handlers, 272 sps->handlers,
@@ -310,7 +281,9 @@ start_peer_run (void *cls,
310 emsg); 281 emsg);
311 GNUNET_free (emsg); 282 GNUNET_free (emsg);
312 GNUNET_TESTING_interpreter_fail (); 283 GNUNET_TESTING_interpreter_fail ();
284 return;
313 } 285 }
286
314 sps->ph = GNUNET_PEERSTORE_connect (sps->cfg); 287 sps->ph = GNUNET_PEERSTORE_connect (sps->cfg);
315 if (NULL == sps->th) 288 if (NULL == sps->th)
316 { 289 {
@@ -320,7 +293,9 @@ start_peer_run (void *cls,
320 emsg); 293 emsg);
321 GNUNET_free (emsg); 294 GNUNET_free (emsg);
322 GNUNET_TESTING_interpreter_fail (); 295 GNUNET_TESTING_interpreter_fail ();
296 return;
323 } 297 }
298
324 sps->ah = GNUNET_TRANSPORT_application_init (sps->cfg); 299 sps->ah = GNUNET_TRANSPORT_application_init (sps->cfg);
325 if (NULL == sps->ah) 300 if (NULL == sps->ah)
326 { 301 {
@@ -330,32 +305,22 @@ start_peer_run (void *cls,
330 emsg); 305 emsg);
331 GNUNET_free (emsg); 306 GNUNET_free (emsg);
332 GNUNET_TESTING_interpreter_fail (); 307 GNUNET_TESTING_interpreter_fail ();
308 return;
333 } 309 }
334 sps->rh_task = GNUNET_SCHEDULER_add_now (retrieve_hello, sps); 310 sps->rh_task = GNUNET_SCHEDULER_add_now (retrieve_hello, sps);
335} 311}
336 312
337 313
314/**
315 * The cleanup function of this cmd frees resources the cmd allocated.
316 *
317 */
338static void 318static void
339start_peer_cleanup (void *cls, 319start_peer_cleanup (void *cls,
340 const struct GNUNET_TESTING_Command *cmd) 320 const struct GNUNET_TESTING_Command *cmd)
341{ 321{
342 struct StartPeerState *sps = cls; 322 struct StartPeerState *sps = cls;
343 323
344 if (NULL != sps->rh_task)
345 GNUNET_SCHEDULER_cancel (sps->rh_task);
346 sps->rh_task = NULL;
347 if (NULL != sps->ah)
348 {
349 GNUNET_TRANSPORT_application_done (sps->ah);
350 sps->ah = NULL;
351 }
352 if (NULL != sps->ph)
353 {
354 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
355 "Disconnecting from PEERSTORE service\n");
356 GNUNET_PEERSTORE_disconnect (sps->ph, GNUNET_NO);
357 sps->ph = NULL;
358 }
359 if (NULL != sps->handlers) 324 if (NULL != sps->handlers)
360 { 325 {
361 GNUNET_free (sps->handlers); 326 GNUNET_free (sps->handlers);
@@ -366,34 +331,16 @@ start_peer_cleanup (void *cls,
366 GNUNET_CONFIGURATION_destroy (sps->cfg); 331 GNUNET_CONFIGURATION_destroy (sps->cfg);
367 sps->cfg = NULL; 332 sps->cfg = NULL;
368 } 333 }
369 if (NULL != sps->peer)
370 {
371 if (GNUNET_OK !=
372 GNUNET_TESTING_peer_stop (sps->peer))
373 {
374 LOG (GNUNET_ERROR_TYPE_DEBUG,
375 "Testing lib failed to stop peer %u (`%s')\n",
376 sps->no,
377 GNUNET_i2s (sps->id));
378 }
379 GNUNET_TESTING_peer_destroy (sps->peer);
380 sps->peer = NULL;
381 }
382 if (NULL != sps->th)
383 {
384 GNUNET_TRANSPORT_core_disconnect (sps->th);
385 sps->th = NULL;
386 }
387 if (NULL != sps->tl_system)
388 {
389 GNUNET_free (sps->tl_system);
390 }
391 GNUNET_free (sps->hello); 334 GNUNET_free (sps->hello);
392 GNUNET_free (sps->connected_peers_map); 335 GNUNET_free (sps->connected_peers_map);
393 GNUNET_free (sps); 336 GNUNET_free (sps);
394} 337}
395 338
396 339
340/**
341 * This function prepares an array with traits.
342 *
343 */
397static int 344static int
398start_peer_traits (void *cls, 345start_peer_traits (void *cls,
399 const void **ret, 346 const void **ret,
@@ -402,8 +349,8 @@ start_peer_traits (void *cls,
402{ 349{
403 struct StartPeerState *sps = cls; 350 struct StartPeerState *sps = cls;
404 struct GNUNET_TRANSPORT_ApplicationHandle *ah = sps->ah; 351 struct GNUNET_TRANSPORT_ApplicationHandle *ah = sps->ah;
405 struct GNUNET_PeerIdentity *id = sps->id; 352 struct GNUNET_PeerIdentity *id = &sps->id;
406 struct GNUNET_CONTAINER_MultiPeerMap *connected_peers_map = 353 struct GNUNET_CONTAINER_MultiShortmap *connected_peers_map =
407 sps->connected_peers_map; 354 sps->connected_peers_map;
408 char *hello = sps->hello; 355 char *hello = sps->hello;
409 size_t hello_size = sps->hello_size; 356 size_t hello_size = sps->hello_size;
@@ -435,6 +382,11 @@ start_peer_traits (void *cls,
435 .trait_name = "hello_size", 382 .trait_name = "hello_size",
436 .ptr = (const void *) hello_size, 383 .ptr = (const void *) hello_size,
437 }, 384 },
385 {
386 .index = 5,
387 .trait_name = "state",
388 .ptr = (const void *) sps,
389 },
438 GNUNET_TESTING_trait_end () 390 GNUNET_TESTING_trait_end ()
439 }; 391 };
440 392
@@ -444,6 +396,34 @@ start_peer_traits (void *cls,
444 index); 396 index);
445} 397}
446 398
399
400/**
401 * Function to get the trait with the struct StartPeerState.
402 *
403 * @param[out] sps struct StartPeerState.
404 * @return #GNUNET_OK if no error occurred, #GNUNET_SYSERR otherwise.
405 *
406 */
407int
408GNUNET_TRANSPORT_get_trait_state (const struct
409 GNUNET_TESTING_Command
410 *cmd,
411 struct StartPeerState **sps)
412{
413 return cmd->traits (cmd->cls,
414 (const void **) sps,
415 "state",
416 (unsigned int) 5);
417}
418
419
420/**
421 * Function to get the trait with the size of the hello.
422 *
423 * @param[out] hello_size size of hello.
424 * @return #GNUNET_OK if no error occurred, #GNUNET_SYSERR otherwise.
425 *
426 */
447int 427int
448GNUNET_TRANSPORT_get_trait_hello_size (const struct 428GNUNET_TRANSPORT_get_trait_hello_size (const struct
449 GNUNET_TESTING_Command 429 GNUNET_TESTING_Command
@@ -456,6 +436,14 @@ GNUNET_TRANSPORT_get_trait_hello_size (const struct
456 (unsigned int) 4); 436 (unsigned int) 4);
457} 437}
458 438
439
440/**
441 * Function to get the trait with the hello.
442 *
443 * @param[out] hello The hello for the peer.
444 * @return #GNUNET_OK if no error occurred, #GNUNET_SYSERR otherwise.
445 *
446 */
459int 447int
460GNUNET_TRANSPORT_get_trait_hello (const struct 448GNUNET_TRANSPORT_get_trait_hello (const struct
461 GNUNET_TESTING_Command 449 GNUNET_TESTING_Command
@@ -468,12 +456,21 @@ GNUNET_TRANSPORT_get_trait_hello (const struct
468 (unsigned int) 3); 456 (unsigned int) 3);
469} 457}
470 458
459
460/**
461 * Function to get the trait with the map of connected peers.
462 *
463 * @param[out] connected_peers_map The map with connected peers.
464 * @return #GNUNET_OK if no error occurred, #GNUNET_SYSERR otherwise.
465 *
466 */
471int 467int
472GNUNET_TRANSPORT_get_trait_connected_peers_map (const struct 468GNUNET_TRANSPORT_get_trait_connected_peers_map (const struct
473 GNUNET_TESTING_Command 469 GNUNET_TESTING_Command
474 *cmd, 470 *cmd,
475 struct 471 struct
476 GNUNET_CONTAINER_MultiPeerMap ** 472 GNUNET_CONTAINER_MultiShortmap *
473 *
477 connected_peers_map) 474 connected_peers_map)
478{ 475{
479 return cmd->traits (cmd->cls, 476 return cmd->traits (cmd->cls,
@@ -483,6 +480,12 @@ GNUNET_TRANSPORT_get_trait_connected_peers_map (const struct
483} 480}
484 481
485 482
483/**
484 * Function to get the trait with the transport application handle.
485 *
486 * @param[out] ah The application handle.
487 * @return #GNUNET_OK if no error occurred, #GNUNET_SYSERR otherwise.
488 */
486int 489int
487GNUNET_TRANSPORT_get_trait_application_handle (const struct 490GNUNET_TRANSPORT_get_trait_application_handle (const struct
488 GNUNET_TESTING_Command *cmd, 491 GNUNET_TESTING_Command *cmd,
@@ -497,6 +500,12 @@ GNUNET_TRANSPORT_get_trait_application_handle (const struct
497} 500}
498 501
499 502
503/**
504 * Function to get the trait with the peer id.
505 *
506 * @param[out] id The peer id.
507 * @return #GNUNET_OK if no error occurred, #GNUNET_SYSERR otherwise.
508 */
500int 509int
501GNUNET_TRANSPORT_get_trait_peer_id (const struct 510GNUNET_TRANSPORT_get_trait_peer_id (const struct
502 GNUNET_TESTING_Command *cmd, 511 GNUNET_TESTING_Command *cmd,
@@ -513,6 +522,12 @@ GNUNET_TRANSPORT_get_trait_peer_id (const struct
513 * Create command. 522 * Create command.
514 * 523 *
515 * @param label name for command. 524 * @param label name for command.
525 * @param system_label Label of the cmd to setup a test environment.
526 * @param m The number of the local node of the actual network namespace.
527 * @param n The number of the actual namespace.
528 * @param local_m Number of local nodes in each namespace.
529 * @param handlers Handler for messages received by this peer.
530 * @param cfgname Configuration file name for this peer.
516 * @return command. 531 * @return command.
517 */ 532 */
518struct GNUNET_TESTING_Command 533struct GNUNET_TESTING_Command
@@ -520,17 +535,20 @@ GNUNET_TRANSPORT_cmd_start_peer (const char *label,
520 const char *system_label, 535 const char *system_label,
521 char *m, 536 char *m,
522 char *n, 537 char *n,
538 char *local_m,
523 struct GNUNET_MQ_MessageHandler *handlers, 539 struct GNUNET_MQ_MessageHandler *handlers,
524 const char *cfgname) 540 const char *cfgname)
525{ 541{
526 struct StartPeerState *sps; 542 struct StartPeerState *sps;
527 struct GNUNET_CONTAINER_MultiPeerMap *connected_peers_map = 543 struct GNUNET_CONTAINER_MultiShortmap *connected_peers_map =
528 GNUNET_CONTAINER_multipeermap_create (1,GNUNET_NO); 544 GNUNET_CONTAINER_multishortmap_create (1,GNUNET_NO);
529 unsigned int i; 545 unsigned int i;
530 546
531 sps = GNUNET_new (struct StartPeerState); 547 sps = GNUNET_new (struct StartPeerState);
532 sps->m = m; 548 sps->m = m;
533 sps->n = n; 549 sps->n = n;
550 sps->local_m = local_m;
551 sps->no = (atoi (n) - 1) * atoi (sps->local_m) + atoi (m);
534 sps->system_label = system_label; 552 sps->system_label = system_label;
535 sps->connected_peers_map = connected_peers_map; 553 sps->connected_peers_map = connected_peers_map;
536 sps->cfgname = cfgname; 554 sps->cfgname = cfgname;
diff --git a/src/transport/transport_api_cmd_stop_peer.c b/src/transport/transport_api_cmd_stop_peer.c
new file mode 100644
index 000000000..7a0050a63
--- /dev/null
+++ b/src/transport/transport_api_cmd_stop_peer.c
@@ -0,0 +1,163 @@
1/*
2 This file is part of GNUnet
3 Copyright (C) 2021 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20
21/**
22 * @file testing_api_cmd_stop_peer.c
23 * @brief cmd to stop a peer.
24 * @author t3sserakt
25 */
26#include "platform.h"
27#include "gnunet_util_lib.h"
28#include "gnunet_testing_ng_lib.h"
29#include "gnunet_peerstore_service.h"
30#include "gnunet_transport_core_service.h"
31#include "gnunet_transport_application_service.h"
32#include "transport-testing-ng.h"
33
34/**
35 * Generic logging shortcut
36 */
37#define LOG(kind, ...) GNUNET_log (kind, __VA_ARGS__)
38
39
40/**
41 * Struct to hold information for callbacks.
42 *
43 */
44struct StopPeerState
45{
46 // Label of the cmd to start the peer.
47 const char *start_label;
48};
49
50
51/**
52 * The run method of this cmd will stop all services of a peer which were used to test the transport service.
53 *
54 */
55static void
56stop_peer_run (void *cls,
57 const struct GNUNET_TESTING_Command *cmd,
58 struct GNUNET_TESTING_Interpreter *is)
59{
60 struct StopPeerState *stop_ps = cls;
61 struct StartPeerState *sps;
62 const struct GNUNET_TESTING_Command *start_cmd;
63
64 start_cmd = GNUNET_TESTING_interpreter_lookup_command (stop_ps->start_label);
65 GNUNET_TRANSPORT_get_trait_state (start_cmd,
66 &sps);
67
68 if (NULL != sps->pic)
69 {
70 GNUNET_PEERSTORE_iterate_cancel (sps->pic);
71 sps->pic = NULL;
72 }
73 if (NULL != sps->th)
74 {
75 GNUNET_TRANSPORT_core_disconnect (sps->th);
76 sps->th = NULL;
77 }
78 if (NULL != sps->ah)
79 {
80 GNUNET_TRANSPORT_application_done (sps->ah);
81 sps->ah = NULL;
82 }
83 if (NULL != sps->ph)
84 {
85 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
86 "Disconnecting from PEERSTORE service\n");
87 GNUNET_PEERSTORE_disconnect (sps->ph, GNUNET_NO);
88 sps->ph = NULL;
89 }
90 if (NULL != sps->peer)
91 {
92 if (GNUNET_OK !=
93 GNUNET_TESTING_peer_stop (sps->peer))
94 {
95 LOG (GNUNET_ERROR_TYPE_ERROR,
96 "Testing lib failed to stop peer %u (`%s')\n",
97 sps->no,
98 GNUNET_i2s (&sps->id));
99 }
100 GNUNET_TESTING_peer_destroy (sps->peer);
101 sps->peer = NULL;
102 }
103 if (NULL != sps->rh_task)
104 GNUNET_SCHEDULER_cancel (sps->rh_task);
105 sps->rh_task = NULL;
106
107}
108
109
110/**
111 * The cleanup function of this cmd frees resources the cmd allocated.
112 *
113 */
114static void
115stop_peer_cleanup (void *cls,
116 const struct GNUNET_TESTING_Command *cmd)
117{
118 struct StopPeerState *sps = cls;
119
120 GNUNET_free (sps);
121}
122
123
124/**
125 * Trait function of this cmd does nothing.
126 *
127 */
128static int
129stop_peer_traits (void *cls,
130 const void **ret,
131 const char *trait,
132 unsigned int index)
133{
134 return GNUNET_OK;
135}
136
137
138/**
139 * Create command.
140 *
141 * @param label name for command.
142 * @param start_label Label of the cmd to start the peer.
143 * @return command.
144 */
145struct GNUNET_TESTING_Command
146GNUNET_TRANSPORT_cmd_stop_peer (const char *label,
147 const char *start_label)
148{
149 struct StopPeerState *sps;
150
151 sps = GNUNET_new (struct StopPeerState);
152 sps->start_label = start_label;
153
154 struct GNUNET_TESTING_Command cmd = {
155 .cls = sps,
156 .label = label,
157 .run = &stop_peer_run,
158 .cleanup = &stop_peer_cleanup,
159 .traits = &stop_peer_traits
160 };
161
162 return cmd;
163}
diff --git a/src/util/Makefile.am b/src/util/Makefile.am
index e720112be..a3a77073e 100644
--- a/src/util/Makefile.am
+++ b/src/util/Makefile.am
@@ -49,7 +49,7 @@ libgnunetutil_la_SOURCES = \
49 common_endian.c \ 49 common_endian.c \
50 common_logging.c \ 50 common_logging.c \
51 configuration.c \ 51 configuration.c \
52 configuration_loader.c \ 52 configuration_helper.c \
53 consttime_memcmp.c \ 53 consttime_memcmp.c \
54 container_bloomfilter.c \ 54 container_bloomfilter.c \
55 container_heap.c \ 55 container_heap.c \
@@ -243,11 +243,11 @@ gnunet_qr_LDADD = \
243gnunet_qr_LDFLAGS= -lzbar 243gnunet_qr_LDFLAGS= -lzbar
244 244
245plugin_LTLIBRARIES = \ 245plugin_LTLIBRARIES = \
246 libgnunet_plugin_test.la 246 libgnunet_plugin_utiltest.la
247 247
248libgnunet_plugin_test_la_SOURCES = \ 248libgnunet_plugin_utiltest_la_SOURCES = \
249 test_plugin_plug.c 249 test_plugin_plug.c
250libgnunet_plugin_test_la_LDFLAGS = \ 250libgnunet_plugin_utiltest_la_LDFLAGS = \
251 $(GN_PLUGIN_LDFLAGS) 251 $(GN_PLUGIN_LDFLAGS)
252 252
253if HAVE_BENCHMARKS 253if HAVE_BENCHMARKS
@@ -362,8 +362,6 @@ test_os_start_process_SOURCES = \
362 test_os_start_process.c 362 test_os_start_process.c
363test_os_start_process_LDADD = \ 363test_os_start_process_LDADD = \
364 libgnunetutil.la 364 libgnunetutil.la
365test_os_start_process_DEPENDENCIES = \
366 libgnunetutil.la
367 365
368test_client_nc_SOURCES = \ 366test_client_nc_SOURCES = \
369 test_client.c 367 test_client.c
diff --git a/src/util/client.c b/src/util/client.c
index afd2fe900..4e5eca32a 100644
--- a/src/util/client.c
+++ b/src/util/client.c
@@ -745,6 +745,7 @@ test_service_configuration (const char *service_name,
745 service_name, 745 service_name,
746 "UNIXPATH", 746 "UNIXPATH",
747 _ ("not a valid filename")); 747 _ ("not a valid filename"));
748 GNUNET_free (unixpath);
748 return GNUNET_SYSERR; /* UNIXPATH specified but invalid! */ 749 return GNUNET_SYSERR; /* UNIXPATH specified but invalid! */
749 } 750 }
750 GNUNET_free (unixpath); 751 GNUNET_free (unixpath);
diff --git a/src/util/common_logging.c b/src/util/common_logging.c
index 48cc6fe3b..cba37cd2f 100644
--- a/src/util/common_logging.c
+++ b/src/util/common_logging.c
@@ -1014,8 +1014,10 @@ mylog (enum GNUNET_ErrorType kind,
1014 } 1014 }
1015 else 1015 else
1016 { 1016 {
1017 if (0 == strftime (date2, DATE_STR_SIZE, "%b %d %H:%M:%S-%%06u", tmptr)) 1017 /* RFC 3339 timestamp, with snprintf placeholder for microseconds */
1018 if (0 == strftime (date2, DATE_STR_SIZE, "%Y-%m-%dT%H:%M:%S.%%06u%z", tmptr))
1018 abort (); 1019 abort ();
1020 /* Fill in microseconds */
1019 if (0 > snprintf (date, sizeof(date), date2, timeofday.tv_usec)) 1021 if (0 > snprintf (date, sizeof(date), date2, timeofday.tv_usec))
1020 abort (); 1022 abort ();
1021 } 1023 }
diff --git a/src/util/configuration.c b/src/util/configuration.c
index d0090ae53..09a3a7d93 100644
--- a/src/util/configuration.c
+++ b/src/util/configuration.c
@@ -28,6 +28,8 @@
28#include "gnunet_os_lib.h" 28#include "gnunet_os_lib.h"
29#include "gnunet_configuration_lib.h" 29#include "gnunet_configuration_lib.h"
30#include "gnunet_disk_lib.h" 30#include "gnunet_disk_lib.h"
31#include "gnunet_buffer_lib.h"
32#include "gnunet_container_lib.h"
31 33
32#define LOG(kind, ...) GNUNET_log_from (kind, "util", __VA_ARGS__) 34#define LOG(kind, ...) GNUNET_log_from (kind, "util", __VA_ARGS__)
33 35
@@ -53,6 +55,16 @@ struct ConfigEntry
53 * current, committed value 55 * current, committed value
54 */ 56 */
55 char *val; 57 char *val;
58
59 /**
60 * Diagnostics information for the filename.
61 */
62 char *hint_filename;
63
64 /**
65 * Diagnostics information for the line number.
66 */
67 unsigned int hint_lineno;
56}; 68};
57 69
58 70
@@ -75,6 +87,62 @@ struct ConfigSection
75 * name of the section 87 * name of the section
76 */ 88 */
77 char *name; 89 char *name;
90
91 /**
92 * Is the configuration section marked as inaccessible?
93 *
94 * This can happen if the section name is used in an @inline-secret@
95 * directive, but the referenced file can't be found or accessed.
96 */
97 bool inaccessible;
98
99 /**
100 * Diagnostics hint for the secret file.
101 */
102 char *hint_secret_filename;
103
104 /**
105 * Extra information regarding permissions of the secret file.
106 */
107 char *hint_secret_stat;
108
109 /**
110 * For secret sections: Where was this inlined from?
111 */
112 char *hint_inlined_from_filename;
113
114 /**
115 * For secret sections: Where was this inlined from?
116 */
117 unsigned int hint_inlined_from_line;
118};
119
120struct ConfigFile
121{
122 /**
123 * Source filename.
124 */
125 char *source_filename;
126
127 /**
128 * Level in the tree of loaded config files.
129 */
130 unsigned int level;
131
132 struct ConfigFile *prev;
133
134 struct ConfigFile *next;
135
136 /**
137 * Was this configuration file parsed via
138 * @inline-secret@?
139 */
140 char *hint_restrict_section;
141
142 /**
143 * Was this configuration file inaccessible?
144 */
145 bool hint_inaccessible;
78}; 146};
79 147
80 148
@@ -89,11 +157,48 @@ struct GNUNET_CONFIGURATION_Handle
89 struct ConfigSection *sections; 157 struct ConfigSection *sections;
90 158
91 /** 159 /**
160 * Linked list of loaded files.
161 */
162 struct ConfigFile *loaded_files_head;
163
164 /**
165 * Linked list of loaded files.
166 */
167 struct ConfigFile *loaded_files_tail;
168
169 /**
170 * Current nesting level of file loading.
171 */
172 unsigned int current_nest_level;
173
174 /**
175 * Enable diagnostics.
176 */
177 bool diagnostics;
178
179 /**
92 * Modification indication since last save 180 * Modification indication since last save
93 * #GNUNET_NO if clean, #GNUNET_YES if dirty, 181 * #GNUNET_NO if clean, #GNUNET_YES if dirty,
94 * #GNUNET_SYSERR on error (i.e. last save failed) 182 * #GNUNET_SYSERR on error (i.e. last save failed)
95 */ 183 */
96 enum GNUNET_GenericReturnValue dirty; 184 enum GNUNET_GenericReturnValue dirty;
185
186 /**
187 * Was the configuration ever loaded via GNUNET_CONFIGURATION_load?
188 */
189 bool load_called;
190
191 /**
192 * Name of the entry point configuration file.
193 */
194 char *main_filename;
195
196 /**
197 * When parsing into this configuration, and this value
198 * is non-NULL, only parse sections of the same name,
199 * and ban import statements.
200 */
201 const char *restrict_section;
97}; 202};
98 203
99 204
@@ -109,6 +214,14 @@ struct DiffHandle
109}; 214};
110 215
111 216
217void
218GNUNET_CONFIGURATION_enable_diagnostics (struct
219 GNUNET_CONFIGURATION_Handle *cfg)
220{
221 cfg->diagnostics = true;
222}
223
224
112struct GNUNET_CONFIGURATION_Handle * 225struct GNUNET_CONFIGURATION_Handle *
113GNUNET_CONFIGURATION_create () 226GNUNET_CONFIGURATION_create ()
114{ 227{
@@ -198,9 +311,20 @@ void
198GNUNET_CONFIGURATION_destroy (struct GNUNET_CONFIGURATION_Handle *cfg) 311GNUNET_CONFIGURATION_destroy (struct GNUNET_CONFIGURATION_Handle *cfg)
199{ 312{
200 struct ConfigSection *sec; 313 struct ConfigSection *sec;
314 struct ConfigFile *cf;
201 315
202 while (NULL != (sec = cfg->sections)) 316 while (NULL != (sec = cfg->sections))
203 GNUNET_CONFIGURATION_remove_section (cfg, sec->name); 317 GNUNET_CONFIGURATION_remove_section (cfg, sec->name);
318 while (NULL != (cf = cfg->loaded_files_head))
319 {
320 GNUNET_free (cf->hint_restrict_section);
321 GNUNET_free (cf->source_filename);
322 GNUNET_CONTAINER_DLL_remove (cfg->loaded_files_head,
323 cfg->loaded_files_tail,
324 cf);
325 GNUNET_free (cf);
326 }
327 GNUNET_free (cfg->main_filename);
204 GNUNET_free (cfg); 328 GNUNET_free (cfg);
205} 329}
206 330
@@ -214,7 +338,9 @@ GNUNET_CONFIGURATION_parse_and_run (const char *filename,
214 enum GNUNET_GenericReturnValue ret; 338 enum GNUNET_GenericReturnValue ret;
215 339
216 cfg = GNUNET_CONFIGURATION_create (); 340 cfg = GNUNET_CONFIGURATION_create ();
217 if (GNUNET_OK != GNUNET_CONFIGURATION_load (cfg, filename)) 341 if (GNUNET_OK !=
342 GNUNET_CONFIGURATION_load (cfg,
343 filename))
218 { 344 {
219 GNUNET_break (0); 345 GNUNET_break (0);
220 GNUNET_CONFIGURATION_destroy (cfg); 346 GNUNET_CONFIGURATION_destroy (cfg);
@@ -226,34 +352,381 @@ GNUNET_CONFIGURATION_parse_and_run (const char *filename,
226} 352}
227 353
228 354
355/**
356 * Closure to collect_files_cb.
357 */
358struct CollectFilesContext
359{
360 /**
361 * Collected files from globbing.
362 */
363 char **files;
364
365 /**
366 * Size of the files array.
367 */
368 unsigned int files_length;
369};
370
371
372/**
373 * Function called with a filename.
374 *
375 * @param cls closure
376 * @param filename complete filename (absolute path)
377 * @return #GNUNET_OK to continue to iterate,
378 * #GNUNET_NO to stop iteration with no error,
379 * #GNUNET_SYSERR to abort iteration with error!
380 */
381static int
382collect_files_cb (void *cls,
383 const char *filename)
384{
385 struct CollectFilesContext *igc = cls;
386
387 GNUNET_array_append (igc->files,
388 igc->files_length,
389 GNUNET_strdup (filename));
390 return GNUNET_OK;
391}
392
393
394/**
395 * Find a section entry from a configuration.
396 *
397 * @param cfg configuration to search in
398 * @param section name of the section to look for
399 * @return matching entry, NULL if not found
400 */
401static struct ConfigSection *
402find_section (const struct GNUNET_CONFIGURATION_Handle *cfg,
403 const char *section)
404{
405 struct ConfigSection *pos;
406
407 pos = cfg->sections;
408 while ((pos != NULL) && (0 != strcasecmp (section, pos->name)))
409 pos = pos->next;
410 return pos;
411}
412
413
414static int
415pstrcmp (const void *a, const void *b)
416{
417 return strcmp (*((const char **) a), *((const char **) b));
418}
419
420
421/**
422 * Handle an inline directive.
423 *
424 * @returns #GNUNET_SYSERR on error, #GNUNET_OK otherwise
425 */
426enum GNUNET_GenericReturnValue
427handle_inline (struct GNUNET_CONFIGURATION_Handle *cfg,
428 const char *path_or_glob,
429 bool path_is_glob,
430 const char *restrict_section,
431 const char *source_filename,
432 unsigned int source_lineno)
433{
434 char *inline_path = NULL;
435 struct GNUNET_CONFIGURATION_Handle *other_cfg = NULL;
436 struct CollectFilesContext igc = {
437 .files = NULL,
438 .files_length = 0,
439 };
440 enum GNUNET_GenericReturnValue fun_ret;
441 unsigned int old_nest_level = cfg->current_nest_level++;
442
443 /* We support the section restriction only for non-globs */
444 GNUNET_assert (! (path_is_glob && (NULL != restrict_section)));
445
446 if (NULL == source_filename)
447 {
448 LOG (GNUNET_ERROR_TYPE_DEBUG,
449 "Refusing to parse inline configurations, "
450 "not allowed without source filename!\n");
451 fun_ret = GNUNET_SYSERR;
452 goto cleanup;
453 }
454
455 if ('/' == *path_or_glob)
456 inline_path = GNUNET_strdup (path_or_glob);
457 else
458 {
459 /* We compute the canonical, absolute path first,
460 so that relative imports resolve properly with symlinked
461 config files. */
462 char *source_realpath;
463 char *endsep;
464
465 source_realpath = realpath (source_filename,
466 NULL);
467 if (NULL == source_realpath)
468 {
469 /* Couldn't even resolve path of base dir. */
470 GNUNET_break (0);
471 /* failed to parse included config */
472 fun_ret = GNUNET_SYSERR;
473 goto cleanup;
474 }
475 endsep = strrchr (source_realpath, '/');
476 GNUNET_assert (NULL != endsep);
477 *endsep = '\0';
478 GNUNET_asprintf (&inline_path,
479 "%s/%s",
480 source_realpath,
481 path_or_glob);
482 free (source_realpath);
483 }
484
485 if (path_is_glob)
486 {
487 int nret;
488
489 LOG (GNUNET_ERROR_TYPE_DEBUG,
490 "processing config glob '%s'\n",
491 inline_path);
492
493 nret = GNUNET_DISK_glob (inline_path, collect_files_cb, &igc);
494 if (-1 == nret)
495 {
496 fun_ret = GNUNET_SYSERR;
497 goto cleanup;
498 }
499 GNUNET_assert (nret == igc.files_length);
500 qsort (igc.files, igc.files_length, sizeof (char *), pstrcmp);
501 for (int i = 0; i < nret; i++)
502 {
503 if (GNUNET_OK !=
504 GNUNET_CONFIGURATION_parse (cfg,
505 igc.files[i]))
506 {
507 fun_ret = GNUNET_SYSERR;
508 goto cleanup;
509 }
510 }
511 fun_ret = GNUNET_OK;
512 }
513 else if (NULL != restrict_section)
514 {
515 enum GNUNET_GenericReturnValue inner_ret;
516 struct ConfigSection *cs;
517 struct ConfigFile *cf = GNUNET_new (struct ConfigFile);
518
519 inner_ret = GNUNET_DISK_file_test_read (inline_path);
520
521 cs = find_section (cfg, restrict_section);
522
523 if (NULL == cs)
524 {
525 cs = GNUNET_new (struct ConfigSection);
526 cs->name = GNUNET_strdup (restrict_section);
527 cs->next = cfg->sections;
528 cfg->sections = cs;
529 cs->entries = NULL;
530 }
531 if (cfg->diagnostics)
532 {
533 char *sfn = GNUNET_STRINGS_filename_expand (inline_path);
534 struct stat istat;
535
536 cs->hint_secret_filename = sfn;
537 if (0 == stat (sfn, &istat))
538 {
539 struct passwd *pw = getpwuid (istat.st_uid);
540 struct group *gr = getgrgid (istat.st_gid);
541 char *pwname = (NULL == pw) ? "<unknown>" : pw->pw_name;
542 char *grname = (NULL == gr) ? "<unknown>" : gr->gr_name;
543
544 GNUNET_asprintf (&cs->hint_secret_stat,
545 "%s:%s %o",
546 pwname,
547 grname,
548 istat.st_mode);
549 }
550 else
551 {
552 cs->hint_secret_stat = GNUNET_strdup ("<can't stat file>");
553 }
554 if (source_filename)
555 {
556 /* Possible that this secret section has been inlined before */
557 GNUNET_free (cs->hint_inlined_from_filename);
558 cs->hint_inlined_from_filename = GNUNET_strdup (source_filename);
559 cs->hint_inlined_from_line = source_lineno;
560 }
561 }
562
563 /* Put file in the load list for diagnostics, even if we can't access it. */
564 {
565 cf->level = cfg->current_nest_level;
566 cf->source_filename = GNUNET_strdup (inline_path);
567 cf->hint_restrict_section = GNUNET_strdup (restrict_section);
568 GNUNET_CONTAINER_DLL_insert_tail (cfg->loaded_files_head,
569 cfg->loaded_files_tail,
570 cf);
571 }
572
573 if (GNUNET_OK != inner_ret)
574 {
575 cs->inaccessible = true;
576 cf->hint_inaccessible = true;
577 /* File can't be accessed, but that's okay. */
578 fun_ret = GNUNET_OK;
579 goto cleanup;
580 }
581
582 other_cfg = GNUNET_CONFIGURATION_create ();
583 other_cfg->restrict_section = restrict_section;
584 inner_ret = GNUNET_CONFIGURATION_parse (other_cfg,
585 inline_path);
586 if (GNUNET_OK != inner_ret)
587 {
588 cf->hint_inaccessible = true;
589 fun_ret = inner_ret;
590 goto cleanup;
591 }
592
593 cs = find_section (other_cfg, restrict_section);
594 if (NULL == cs)
595 {
596 LOG (GNUNET_ERROR_TYPE_INFO,
597 "Configuration file '%s' loaded with @inline-secret@ "
598 "does not contain section '%s'.\n",
599 inline_path,
600 restrict_section);
601 /* Inlined onfiguration is accessible but doesn't contain any values.
602 We treat this as if the inlined section was empty, and do not
603 consider it an error. */
604 fun_ret = GNUNET_OK;
605 goto cleanup;
606 }
607 for (struct ConfigEntry *ce = cs->entries;
608 NULL != ce;
609 ce = ce->next)
610 GNUNET_CONFIGURATION_set_value_string (cfg,
611 restrict_section,
612 ce->key,
613 ce->val);
614 fun_ret = GNUNET_OK;
615 }
616 else if (GNUNET_OK !=
617 GNUNET_CONFIGURATION_parse (cfg,
618 inline_path))
619 {
620 fun_ret = GNUNET_SYSERR;
621 goto cleanup;
622 }
623 else
624 {
625 fun_ret = GNUNET_OK;
626 }
627cleanup:
628 cfg->current_nest_level = old_nest_level;
629 if (NULL != other_cfg)
630 GNUNET_CONFIGURATION_destroy (other_cfg);
631 GNUNET_free (inline_path);
632 if (igc.files_length > 0)
633 {
634 for (size_t i = 0; i < igc.files_length; i++)
635 GNUNET_free (igc.files[i]);
636 GNUNET_array_grow (igc.files, igc.files_length, 0);
637 }
638 return fun_ret;
639}
640
641
642/**
643 * Find an entry from a configuration.
644 *
645 * @param cfg handle to the configuration
646 * @param section section the option is in
647 * @param key the option
648 * @return matching entry, NULL if not found
649 */
650static struct ConfigEntry *
651find_entry (const struct GNUNET_CONFIGURATION_Handle *cfg,
652 const char *section,
653 const char *key)
654{
655 struct ConfigSection *sec;
656 struct ConfigEntry *pos;
657
658 if (NULL == (sec = find_section (cfg, section)))
659 return NULL;
660 if (sec->inaccessible)
661 {
662 LOG (GNUNET_ERROR_TYPE_WARNING,
663 "Section '%s' is marked as inaccessible, because the configuration "
664 " file that contains the section can't be read. Attempts to use "
665 "option '%s' will fail.\n",
666 section,
667 key);
668 return NULL;
669 }
670 pos = sec->entries;
671 while ((pos != NULL) && (0 != strcasecmp (key, pos->key)))
672 pos = pos->next;
673 return pos;
674}
675
676
677/**
678 * Set a configuration hint.
679 *
680 * @param cfg configuration handle
681 * @param section section
682 * @param option config option
683 * @param hint_filename
684 * @param hint_line
685 */
686static void
687set_entry_hint (struct GNUNET_CONFIGURATION_Handle *cfg,
688 const char *section,
689 const char *option,
690 const char *hint_filename,
691 unsigned int hint_line)
692{
693 struct ConfigEntry *e = find_entry (cfg, section, option);
694 if (! cfg->diagnostics)
695 return;
696 if (! e)
697 return;
698 e->hint_filename = GNUNET_strdup (hint_filename);
699 e->hint_lineno = hint_line;
700}
701
702
229enum GNUNET_GenericReturnValue 703enum GNUNET_GenericReturnValue
230GNUNET_CONFIGURATION_deserialize (struct GNUNET_CONFIGURATION_Handle *cfg, 704GNUNET_CONFIGURATION_deserialize (struct GNUNET_CONFIGURATION_Handle *cfg,
231 const char *mem, 705 const char *mem,
232 size_t size, 706 size_t size,
233 const char *basedir) 707 const char *source_filename)
234{ 708{
235 char *line;
236 char *line_orig;
237 size_t line_size; 709 size_t line_size;
238 char *pos;
239 unsigned int nr; 710 unsigned int nr;
240 size_t r_bytes; 711 size_t r_bytes;
241 size_t to_read; 712 size_t to_read;
242 size_t i;
243 int emptyline;
244 enum GNUNET_GenericReturnValue ret; 713 enum GNUNET_GenericReturnValue ret;
245 char *section; 714 char *section;
246 char *eq; 715 char *eq;
247 char *tag; 716 char *tag;
248 char *value; 717 char *value;
718 char *line_orig = NULL;
249 719
250 ret = GNUNET_OK; 720 ret = GNUNET_OK;
251 section = GNUNET_strdup (""); 721 section = NULL;
252 nr = 0; 722 nr = 0;
253 r_bytes = 0; 723 r_bytes = 0;
254 line_orig = NULL;
255 while (r_bytes < size) 724 while (r_bytes < size)
256 { 725 {
726 char *pos;
727 char *line;
728 bool emptyline;
729
257 GNUNET_free (line_orig); 730 GNUNET_free (line_orig);
258 /* fgets-like behaviour on buffer */ 731 /* fgets-like behaviour on buffer */
259 to_read = size - r_bytes; 732 to_read = size - r_bytes;
@@ -275,7 +748,7 @@ GNUNET_CONFIGURATION_deserialize (struct GNUNET_CONFIGURATION_Handle *cfg,
275 nr++; 748 nr++;
276 /* tabs and '\r' are whitespace */ 749 /* tabs and '\r' are whitespace */
277 emptyline = GNUNET_YES; 750 emptyline = GNUNET_YES;
278 for (i = 0; i < line_size; i++) 751 for (size_t i = 0; i < line_size; i++)
279 { 752 {
280 if (line[i] == '\t') 753 if (line[i] == '\t')
281 line[i] = ' '; 754 line[i] = ' ';
@@ -289,7 +762,7 @@ GNUNET_CONFIGURATION_deserialize (struct GNUNET_CONFIGURATION_Handle *cfg,
289 continue; 762 continue;
290 763
291 /* remove tailing whitespace */ 764 /* remove tailing whitespace */
292 for (i = line_size - 1; 765 for (size_t i = line_size - 1;
293 (i >= 1) && (isspace ((unsigned char) line[i])); 766 (i >= 1) && (isspace ((unsigned char) line[i]));
294 i--) 767 i--)
295 line[i] = '\0'; 768 line[i] = '\0';
@@ -303,50 +776,113 @@ GNUNET_CONFIGURATION_deserialize (struct GNUNET_CONFIGURATION_Handle *cfg,
303 ('%' == line[0]) ) 776 ('%' == line[0]) )
304 continue; 777 continue;
305 778
306 /* handle special "@INLINE@" directive */ 779 /* Handle special directives. */
307 if (0 == strncasecmp (line, 780 if ('@' == line[0])
308 "@INLINE@ ",
309 strlen ("@INLINE@ ")))
310 { 781 {
311 /* @INLINE@ value */ 782 char *end = strchr (line + 1, '@');
312 value = &line[strlen ("@INLINE@ ")]; 783 char *directive;
313 if (NULL != basedir) 784 enum GNUNET_GenericReturnValue directive_ret;
785
786 if (NULL != cfg->restrict_section)
314 { 787 {
315 if ('/' == *value) 788 LOG (GNUNET_ERROR_TYPE_WARNING,
316 { 789 _ (
317 if (GNUNET_OK != 790 "Illegal directive in line %u (parsing restricted section %s)\n"),
318 GNUNET_CONFIGURATION_parse (cfg, 791 nr,
319 value)) 792 cfg->restrict_section);
320 { 793 ret = GNUNET_SYSERR;
321 ret = GNUNET_SYSERR; /* failed to parse included config */ 794 break;
322 break; 795 }
323 } 796
324 } 797 if (NULL == end)
325 else 798 {
799 LOG (GNUNET_ERROR_TYPE_WARNING,
800 _ ("Bad directive in line %u\n"),
801 nr);
802 ret = GNUNET_SYSERR;
803 break;
804 }
805 *end = '\0';
806 directive = line + 1;
807
808 if (0 == strcasecmp (directive, "INLINE"))
809 {
810 const char *path = end + 1;
811
812 /* Skip space before path */
813 for (; isspace (*path); path++)
814 ;
815
816 directive_ret = handle_inline (cfg,
817 path,
818 false,
819 NULL,
820 source_filename,
821 nr);
822 }
823 else if (0 == strcasecmp (directive, "INLINE-MATCHING"))
824 {
825 const char *path = end + 1;
826
827 /* Skip space before path */
828 for (; isspace (*path); path++)
829 ;
830
831 directive_ret = handle_inline (cfg,
832 path,
833 true,
834 NULL,
835 source_filename,
836 nr);
837 }
838 else if (0 == strcasecmp (directive, "INLINE-SECRET"))
839 {
840 char *secname = end + 1;
841 char *secname_end;
842 const char *path;
843
844 /* Skip space before secname */
845 for (; isspace (*secname); secname++)
846 ;
847
848 secname_end = strchr (secname, ' ');
849
850 if (NULL == secname_end)
326 { 851 {
327 char *fn; 852 LOG (GNUNET_ERROR_TYPE_WARNING,
328 853 _ ("Bad inline-secret directive in line %u\n"),
329 GNUNET_asprintf (&fn, "%s/%s", 854 nr);
330 basedir, 855 ret = GNUNET_SYSERR;
331 value); 856 break;
332 if (GNUNET_OK !=
333 GNUNET_CONFIGURATION_parse (cfg,
334 fn))
335 {
336 GNUNET_free (fn);
337 ret = GNUNET_SYSERR; /* failed to parse included config */
338 break;
339 }
340 GNUNET_free (fn);
341 } 857 }
858 *secname_end = '\0';
859 path = secname_end + 1;
860
861 /* Skip space before path */
862 for (; isspace (*path); path++)
863 ;
864
865 directive_ret = handle_inline (cfg,
866 path,
867 false,
868 secname,
869 source_filename,
870 nr);
342 } 871 }
343 else 872 else
344 { 873 {
345 LOG (GNUNET_ERROR_TYPE_DEBUG, 874 LOG (GNUNET_ERROR_TYPE_WARNING,
346 "Ignoring parsing @INLINE@ configurations, not allowed!\n"); 875 _ ("Unknown or malformed directive '%s' in line %u\n"),
876 directive,
877 nr);
347 ret = GNUNET_SYSERR; 878 ret = GNUNET_SYSERR;
348 break; 879 break;
349 } 880 }
881 if (GNUNET_OK != directive_ret)
882 {
883 ret = directive_ret;
884 break;
885 }
350 continue; 886 continue;
351 } 887 }
352 if (('[' == line[0]) && (']' == line[line_size - 1])) 888 if (('[' == line[0]) && (']' == line[line_size - 1]))
@@ -360,10 +896,23 @@ GNUNET_CONFIGURATION_deserialize (struct GNUNET_CONFIGURATION_Handle *cfg,
360 } 896 }
361 if (NULL != (eq = strchr (line, '='))) 897 if (NULL != (eq = strchr (line, '=')))
362 { 898 {
899 size_t i;
900
901 if (NULL == section)
902 {
903 LOG (GNUNET_ERROR_TYPE_WARNING,
904 _ (
905 "Syntax error while deserializing in line %u (option without section)\n"),
906 nr);
907 ret = GNUNET_SYSERR;
908 break;
909 }
910
363 /* tag = value */ 911 /* tag = value */
364 tag = GNUNET_strndup (line, eq - line); 912 tag = GNUNET_strndup (line, eq - line);
365 /* remove tailing whitespace */ 913 /* remove tailing whitespace */
366 for (i = strlen (tag) - 1; (i >= 1) && (isspace ((unsigned char) tag[i])); 914 for (i = strlen (tag) - 1;
915 (i >= 1) && (isspace ((unsigned char) tag[i]));
367 i--) 916 i--)
368 tag[i] = '\0'; 917 tag[i] = '\0';
369 918
@@ -384,6 +933,14 @@ GNUNET_CONFIGURATION_deserialize (struct GNUNET_CONFIGURATION_Handle *cfg,
384 value++; 933 value++;
385 } 934 }
386 GNUNET_CONFIGURATION_set_value_string (cfg, section, tag, &value[i]); 935 GNUNET_CONFIGURATION_set_value_string (cfg, section, tag, &value[i]);
936 if (cfg->diagnostics)
937 {
938 set_entry_hint (cfg,
939 section,
940 tag,
941 source_filename ? source_filename : "<input>",
942 nr);
943 }
387 GNUNET_free (tag); 944 GNUNET_free (tag);
388 continue; 945 continue;
389 } 946 }
@@ -410,7 +967,6 @@ GNUNET_CONFIGURATION_parse (struct GNUNET_CONFIGURATION_Handle *cfg,
410 size_t fs; 967 size_t fs;
411 char *fn; 968 char *fn;
412 char *mem; 969 char *mem;
413 char *endsep;
414 int dirty; 970 int dirty;
415 enum GNUNET_GenericReturnValue ret; 971 enum GNUNET_GenericReturnValue ret;
416 ssize_t sret; 972 ssize_t sret;
@@ -419,6 +975,56 @@ GNUNET_CONFIGURATION_parse (struct GNUNET_CONFIGURATION_Handle *cfg,
419 LOG (GNUNET_ERROR_TYPE_DEBUG, "Asked to parse config file `%s'\n", fn); 975 LOG (GNUNET_ERROR_TYPE_DEBUG, "Asked to parse config file `%s'\n", fn);
420 if (NULL == fn) 976 if (NULL == fn)
421 return GNUNET_SYSERR; 977 return GNUNET_SYSERR;
978
979
980 /* Check for cycles */
981 {
982 unsigned int lvl = cfg->current_nest_level;
983 struct ConfigFile *cf = cfg->loaded_files_tail;
984 struct ConfigFile *parent = NULL;
985
986
987 for (; NULL != cf; parent = cf, cf = cf->prev)
988 {
989 /* Check parents based on level, skipping children of siblings. */
990 if (cf->level >= lvl)
991 continue;
992 lvl = cf->level;
993 if ( (NULL == cf->source_filename) || (NULL == filename))
994 continue;
995 if (0 == strcmp (cf->source_filename, filename))
996 {
997 if (NULL == parent)
998 {
999 LOG (GNUNET_ERROR_TYPE_ERROR,
1000 "Forbidden direct cyclic configuration import (%s -> %s)\n",
1001 cf->source_filename,
1002 filename);
1003 }
1004 else
1005 LOG (GNUNET_ERROR_TYPE_ERROR,
1006 "Forbidden indirect cyclic configuration import (%s -> ... -> %s -> %s)\n",
1007 cf->source_filename,
1008 parent->source_filename,
1009 filename);
1010 GNUNET_free (fn);
1011 return GNUNET_SYSERR;
1012 }
1013 }
1014
1015 }
1016
1017 /* Keep track of loaded files.*/
1018 {
1019 struct ConfigFile *cf = GNUNET_new (struct ConfigFile);
1020
1021 cf->level = cfg->current_nest_level;
1022 cf->source_filename = GNUNET_strdup (filename ? filename : "<input>");
1023 GNUNET_CONTAINER_DLL_insert_tail (cfg->loaded_files_head,
1024 cfg->loaded_files_tail,
1025 cf);
1026 }
1027
422 dirty = cfg->dirty; /* back up value! */ 1028 dirty = cfg->dirty; /* back up value! */
423 if (GNUNET_SYSERR == 1029 if (GNUNET_SYSERR ==
424 GNUNET_DISK_file_size (fn, &fs64, GNUNET_YES, GNUNET_YES)) 1030 GNUNET_DISK_file_size (fn, &fs64, GNUNET_YES, GNUNET_YES))
@@ -446,14 +1052,11 @@ GNUNET_CONFIGURATION_parse (struct GNUNET_CONFIGURATION_Handle *cfg,
446 return GNUNET_SYSERR; 1052 return GNUNET_SYSERR;
447 } 1053 }
448 LOG (GNUNET_ERROR_TYPE_DEBUG, "Deserializing contents of file `%s'\n", fn); 1054 LOG (GNUNET_ERROR_TYPE_DEBUG, "Deserializing contents of file `%s'\n", fn);
449 endsep = strrchr (fn, (int) '/');
450 if (NULL != endsep)
451 *endsep = '\0';
452 ret = GNUNET_CONFIGURATION_deserialize (cfg, 1055 ret = GNUNET_CONFIGURATION_deserialize (cfg,
453 mem, 1056 mem,
454 fs, 1057 fs,
455 fn); 1058 fn);
456 if (GNUNET_OK != ret) 1059 if (GNUNET_SYSERR == ret)
457 { 1060 {
458 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 1061 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
459 _ ("Failed to parse configuration file `%s'\n"), 1062 _ ("Failed to parse configuration file `%s'\n"),
@@ -527,6 +1130,8 @@ GNUNET_CONFIGURATION_serialize (const struct GNUNET_CONFIGURATION_Handle *cfg,
527 NULL != sec; 1130 NULL != sec;
528 sec = sec->next) 1131 sec = sec->next)
529 { 1132 {
1133 if (sec->inaccessible)
1134 continue;
530 /* For each section we need to add 3 characters: {'[',']','\n'} */ 1135 /* For each section we need to add 3 characters: {'[',']','\n'} */
531 m_size += strlen (sec->name) + 3; 1136 m_size += strlen (sec->name) + 3;
532 for (struct ConfigEntry *ent = sec->entries; 1137 for (struct ConfigEntry *ent = sec->entries;
@@ -606,6 +1211,117 @@ GNUNET_CONFIGURATION_serialize (const struct GNUNET_CONFIGURATION_Handle *cfg,
606} 1211}
607 1212
608 1213
1214char *
1215GNUNET_CONFIGURATION_serialize_diagnostics (const struct
1216 GNUNET_CONFIGURATION_Handle *cfg)
1217{
1218 struct GNUNET_Buffer buf = { 0 };
1219
1220 GNUNET_buffer_write_fstr (&buf,
1221 "#\n# Configuration file diagnostics\n#\n");
1222 GNUNET_buffer_write_fstr (&buf,
1223 "# Entry point: %s\n",
1224 cfg->main_filename ? cfg->main_filename :
1225 "<none>");
1226 GNUNET_buffer_write_fstr (&buf,
1227 "#\n# Files Loaded:\n");
1228
1229 for (struct ConfigFile *cfil = cfg->loaded_files_head;
1230 NULL != cfil;
1231 cfil = cfil->next)
1232 {
1233 GNUNET_buffer_write_fstr (&buf,
1234 "# ");
1235 for (unsigned int i = 0; i < cfil->level; i++)
1236 GNUNET_buffer_write_fstr (&buf,
1237 "+");
1238 if (0 != cfil->level)
1239 GNUNET_buffer_write_fstr (&buf,
1240 " ");
1241
1242 GNUNET_buffer_write_fstr (&buf,
1243 "%s",
1244 cfil->source_filename);
1245
1246 if (NULL != cfil->hint_restrict_section)
1247 GNUNET_buffer_write_fstr (&buf,
1248 " (%s secret section %s)",
1249 cfil->hint_inaccessible
1250 ? "inaccessible"
1251 : "loaded",
1252 cfil->hint_restrict_section);
1253
1254 GNUNET_buffer_write_str (&buf,
1255 "\n");
1256 }
1257
1258 GNUNET_buffer_write_fstr (&buf,
1259 "#\n\n");
1260
1261 for (struct ConfigSection *sec = cfg->sections;
1262 NULL != sec;
1263 sec = sec->next)
1264 {
1265 if (sec->hint_secret_filename)
1266 GNUNET_buffer_write_fstr (&buf,
1267 "# secret section from %s\n# secret file stat %s\n",
1268 sec->hint_secret_filename,
1269 sec->hint_secret_stat);
1270 if (sec->hint_inlined_from_filename)
1271 {
1272 GNUNET_buffer_write_fstr (&buf,
1273 "# inlined from %s:%u\n",
1274 sec->hint_inlined_from_filename,
1275 sec->hint_inlined_from_line);
1276 }
1277 GNUNET_buffer_write_fstr (&buf,
1278 "[%s]\n\n",
1279 sec->name);
1280 if (sec->inaccessible)
1281 {
1282 GNUNET_buffer_write_fstr (&buf,
1283 "# <section contents inaccessible>\n\n\n");
1284 continue;
1285 }
1286 for (struct ConfigEntry *ent = sec->entries;
1287 NULL != ent;
1288 ent = ent->next)
1289 {
1290 if (do_skip (sec->name,
1291 ent->key))
1292 continue;
1293 if (NULL != ent->val)
1294 {
1295 char *pos;
1296 char *val = GNUNET_malloc (strlen (ent->val) * 2 + 1);
1297 strcpy (val, ent->val);
1298 while (NULL != (pos = strstr (val, "\n")))
1299 {
1300 memmove (&pos[2], &pos[1], strlen (&pos[1]));
1301 pos[0] = '\\';
1302 pos[1] = 'n';
1303 }
1304 if (NULL != ent->hint_filename)
1305 {
1306 GNUNET_buffer_write_fstr (&buf,
1307 "# %s:%u\n",
1308 ent->hint_filename,
1309 ent->hint_lineno);
1310 }
1311 GNUNET_buffer_write_fstr (&buf,
1312 "%s = %s\n",
1313 ent->key,
1314 val);
1315 GNUNET_free (val);
1316 }
1317 GNUNET_buffer_write_str (&buf, "\n");
1318 }
1319 GNUNET_buffer_write_str (&buf, "\n");
1320 }
1321 return GNUNET_buffer_reap_str (&buf);
1322}
1323
1324
609enum GNUNET_GenericReturnValue 1325enum GNUNET_GenericReturnValue
610GNUNET_CONFIGURATION_write (struct GNUNET_CONFIGURATION_Handle *cfg, 1326GNUNET_CONFIGURATION_write (struct GNUNET_CONFIGURATION_Handle *cfg,
611 const char *filename) 1327 const char *filename)
@@ -700,6 +1416,14 @@ GNUNET_CONFIGURATION_iterate_section_values (
700 spos = spos->next; 1416 spos = spos->next;
701 if (NULL == spos) 1417 if (NULL == spos)
702 return; 1418 return;
1419 if (spos->inaccessible)
1420 {
1421 LOG (GNUNET_ERROR_TYPE_WARNING,
1422 "Section '%s' is marked as inaccessible, because the configuration "
1423 " file that contains the section can't be read.\n",
1424 section);
1425 return;
1426 }
703 for (epos = spos->entries; NULL != epos; epos = epos->next) 1427 for (epos = spos->entries; NULL != epos; epos = epos->next)
704 if (NULL != epos->val) 1428 if (NULL != epos->val)
705 iter (iter_cls, spos->name, epos->key, epos->val); 1429 iter (iter_cls, spos->name, epos->key, epos->val);
@@ -748,10 +1472,14 @@ GNUNET_CONFIGURATION_remove_section (struct GNUNET_CONFIGURATION_Handle *cfg,
748 spos->entries = ent->next; 1472 spos->entries = ent->next;
749 GNUNET_free (ent->key); 1473 GNUNET_free (ent->key);
750 GNUNET_free (ent->val); 1474 GNUNET_free (ent->val);
1475 GNUNET_free (ent->hint_filename);
751 GNUNET_free (ent); 1476 GNUNET_free (ent);
752 cfg->dirty = GNUNET_YES; 1477 cfg->dirty = GNUNET_YES;
753 } 1478 }
754 GNUNET_free (spos->name); 1479 GNUNET_free (spos->name);
1480 GNUNET_free (spos->hint_secret_filename);
1481 GNUNET_free (spos->hint_secret_stat);
1482 GNUNET_free (spos->hint_inlined_from_filename);
755 GNUNET_free (spos); 1483 GNUNET_free (spos);
756 return; 1484 return;
757 } 1485 }
@@ -794,51 +1522,6 @@ GNUNET_CONFIGURATION_dup (const struct GNUNET_CONFIGURATION_Handle *cfg)
794 1522
795 1523
796/** 1524/**
797 * Find a section entry from a configuration.
798 *
799 * @param cfg configuration to search in
800 * @param section name of the section to look for
801 * @return matching entry, NULL if not found
802 */
803static struct ConfigSection *
804find_section (const struct GNUNET_CONFIGURATION_Handle *cfg,
805 const char *section)
806{
807 struct ConfigSection *pos;
808
809 pos = cfg->sections;
810 while ((pos != NULL) && (0 != strcasecmp (section, pos->name)))
811 pos = pos->next;
812 return pos;
813}
814
815
816/**
817 * Find an entry from a configuration.
818 *
819 * @param cfg handle to the configuration
820 * @param section section the option is in
821 * @param key the option
822 * @return matching entry, NULL if not found
823 */
824static struct ConfigEntry *
825find_entry (const struct GNUNET_CONFIGURATION_Handle *cfg,
826 const char *section,
827 const char *key)
828{
829 struct ConfigSection *sec;
830 struct ConfigEntry *pos;
831
832 if (NULL == (sec = find_section (cfg, section)))
833 return NULL;
834 pos = sec->entries;
835 while ((pos != NULL) && (0 != strcasecmp (key, pos->key)))
836 pos = pos->next;
837 return pos;
838}
839
840
841/**
842 * A callback function, compares entries from two configurations 1525 * A callback function, compares entries from two configurations
843 * (default against a new configuration) and write the diffs in a 1526 * (default against a new configuration) and write the diffs in a
844 * diff-configuration object (the callback object). 1527 * diff-configuration object (the callback object).
@@ -1601,41 +2284,93 @@ GNUNET_CONFIGURATION_remove_value_filename (
1601} 2284}
1602 2285
1603 2286
1604/** 2287enum GNUNET_GenericReturnValue
1605 * Wrapper around #GNUNET_CONFIGURATION_parse. Called on each 2288GNUNET_CONFIGURATION_load_from (struct GNUNET_CONFIGURATION_Handle *cfg,
1606 * file in a directory, we trigger parsing on those files that 2289 const char *defaults_d)
1607 * end with ".conf".
1608 *
1609 * @param cls the cfg
1610 * @param filename file to parse
1611 * @return #GNUNET_OK on success
1612 */
1613static enum GNUNET_GenericReturnValue
1614parse_configuration_file (void *cls, const char *filename)
1615{ 2290{
1616 struct GNUNET_CONFIGURATION_Handle *cfg = cls; 2291 struct CollectFilesContext files_context = {
1617 char *ext; 2292 .files = NULL,
2293 .files_length = 0,
2294 };
2295 enum GNUNET_GenericReturnValue fun_ret;
1618 2296
1619 /* Examine file extension */ 2297 if (GNUNET_SYSERR ==
1620 ext = strrchr (filename, '.'); 2298 GNUNET_DISK_directory_scan (defaults_d, &collect_files_cb,
1621 if ((NULL == ext) || (0 != strcmp (ext, ".conf"))) 2299 &files_context))
2300 return GNUNET_SYSERR; /* no configuration at all found */
2301 qsort (files_context.files,
2302 files_context.files_length,
2303 sizeof (char *),
2304 pstrcmp);
2305 for (unsigned int i = 0; i < files_context.files_length; i++)
1622 { 2306 {
1623 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Skipping file `%s'\n", filename); 2307 char *ext;
1624 return GNUNET_OK; 2308 const char *filename = files_context.files[i];
1625 }
1626 2309
1627 return GNUNET_CONFIGURATION_parse (cfg, filename); 2310 /* Examine file extension */
2311 ext = strrchr (filename, '.');
2312 if ((NULL == ext) || (0 != strcmp (ext, ".conf")))
2313 {
2314 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Skipping file `%s'\n", filename);
2315 fun_ret = GNUNET_OK;
2316 goto cleanup;
2317 }
2318 fun_ret = GNUNET_CONFIGURATION_parse (cfg, filename);
2319 if (fun_ret != GNUNET_OK)
2320 break;
2321 }
2322cleanup:
2323 if (files_context.files_length > 0)
2324 {
2325 for (size_t i = 0; i < files_context.files_length; i++)
2326 GNUNET_free (files_context.files[i]);
2327 GNUNET_array_grow (files_context.files,
2328 files_context.files_length,
2329 0);
2330 }
2331 return fun_ret;
1628} 2332}
1629 2333
1630 2334
1631enum GNUNET_GenericReturnValue 2335char *
1632GNUNET_CONFIGURATION_load_from (struct GNUNET_CONFIGURATION_Handle *cfg, 2336GNUNET_CONFIGURATION_default_filename (void)
1633 const char *defaults_d)
1634{ 2337{
1635 if (GNUNET_SYSERR == 2338 char *cfg_fn;
1636 GNUNET_DISK_directory_scan (defaults_d, &parse_configuration_file, cfg)) 2339 const struct GNUNET_OS_ProjectData *pd = GNUNET_OS_project_data_get ();
1637 return GNUNET_SYSERR; /* no configuration at all found */ 2340 const char *xdg = getenv ("XDG_CONFIG_HOME");
1638 return GNUNET_OK; 2341
2342 if (NULL != xdg)
2343 GNUNET_asprintf (&cfg_fn,
2344 "%s%s%s",
2345 xdg,
2346 DIR_SEPARATOR_STR,
2347 pd->config_file);
2348 else
2349 cfg_fn = GNUNET_strdup (pd->user_config_file);
2350
2351 if (GNUNET_OK == GNUNET_DISK_file_test_read (cfg_fn))
2352 return cfg_fn;
2353 GNUNET_free (cfg_fn);
2354
2355 /* Fall back to /etc/ for the default configuration.
2356 Should be okay to use forward slashes here. */
2357
2358 GNUNET_asprintf (&cfg_fn,
2359 "/etc/%s",
2360 pd->config_file);
2361 if (GNUNET_OK == GNUNET_DISK_file_test_read (cfg_fn))
2362 return cfg_fn;
2363 GNUNET_free (cfg_fn);
2364
2365 GNUNET_asprintf (&cfg_fn,
2366 "/etc/%s/%s",
2367 pd->project_dirname,
2368 pd->config_file);
2369 if (GNUNET_OK == GNUNET_DISK_file_test_read (cfg_fn))
2370 return cfg_fn;
2371
2372 GNUNET_free (cfg_fn);
2373 return NULL;
1639} 2374}
1640 2375
1641 2376
@@ -1648,12 +2383,47 @@ GNUNET_CONFIGURATION_default (void)
1648 char *cfgname = NULL; 2383 char *cfgname = NULL;
1649 struct GNUNET_CONFIGURATION_Handle *cfg; 2384 struct GNUNET_CONFIGURATION_Handle *cfg;
1650 2385
2386 /* FIXME: Why are we doing this? Needs some commentary! */
1651 GNUNET_OS_init (dpd); 2387 GNUNET_OS_init (dpd);
2388
1652 cfg = GNUNET_CONFIGURATION_create (); 2389 cfg = GNUNET_CONFIGURATION_create ();
2390
2391 /* First, try user configuration. */
1653 if (NULL != xdg) 2392 if (NULL != xdg)
1654 GNUNET_asprintf (&cfgname, "%s/%s", xdg, pd->config_file); 2393 GNUNET_asprintf (&cfgname, "%s/%s", xdg, pd->config_file);
1655 else 2394 else
1656 cfgname = GNUNET_strdup (pd->user_config_file); 2395 cfgname = GNUNET_strdup (pd->user_config_file);
2396
2397 /* If user config doesn't exist, try in
2398 /etc/<projdir>/<cfgfile> and /etc/<cfgfile> */
2399 if (GNUNET_OK != GNUNET_DISK_file_test (cfgname))
2400 {
2401 GNUNET_free (cfgname);
2402 GNUNET_asprintf (&cfgname, "/etc/%s", pd->config_file);
2403 }
2404 if (GNUNET_OK != GNUNET_DISK_file_test (cfgname))
2405 {
2406 GNUNET_free (cfgname);
2407 GNUNET_asprintf (&cfgname,
2408 "/etc/%s/%s",
2409 pd->project_dirname,
2410 pd->config_file);
2411 }
2412 if (GNUNET_OK != GNUNET_DISK_file_test (cfgname))
2413 {
2414 LOG (GNUNET_ERROR_TYPE_ERROR,
2415 "Unable to top-level configuration file.\n");
2416 GNUNET_OS_init (pd);
2417 GNUNET_CONFIGURATION_destroy (cfg);
2418 GNUNET_free (cfgname);
2419 return NULL;
2420 }
2421
2422 /* We found a configuration file that looks good, try to load it. */
2423
2424 LOG (GNUNET_ERROR_TYPE_DEBUG,
2425 "Loading top-level configuration from '%s'\n",
2426 cfgname);
1657 if (GNUNET_OK != 2427 if (GNUNET_OK !=
1658 GNUNET_CONFIGURATION_load (cfg, cfgname)) 2428 GNUNET_CONFIGURATION_load (cfg, cfgname))
1659 { 2429 {
@@ -1668,4 +2438,84 @@ GNUNET_CONFIGURATION_default (void)
1668} 2438}
1669 2439
1670 2440
2441/**
2442 * Load configuration (starts with defaults, then loads
2443 * system-specific configuration).
2444 *
2445 * @param cfg configuration to update
2446 * @param filename name of the configuration file, NULL to load defaults
2447 * @return #GNUNET_OK on success, #GNUNET_SYSERR on error
2448 */
2449int
2450GNUNET_CONFIGURATION_load (struct GNUNET_CONFIGURATION_Handle *cfg,
2451 const char *filename)
2452{
2453 char *baseconfig;
2454 const char *base_config_varname;
2455
2456 if (cfg->load_called)
2457 {
2458 /* FIXME: Make this a GNUNET_assert later */
2459 GNUNET_break (0);
2460 GNUNET_free (cfg->main_filename);
2461 }
2462 cfg->load_called = true;
2463 if (NULL != filename)
2464 {
2465 GNUNET_free (cfg->main_filename);
2466 cfg->main_filename = GNUNET_strdup (filename);
2467 }
2468
2469 base_config_varname = GNUNET_OS_project_data_get ()->base_config_varname;
2470
2471 if ((NULL != base_config_varname)
2472 && (NULL != (baseconfig = getenv (base_config_varname))))
2473 {
2474 baseconfig = GNUNET_strdup (baseconfig);
2475 }
2476 else
2477 {
2478 char *ipath;
2479
2480 ipath = GNUNET_OS_installation_get_path (GNUNET_OS_IPK_DATADIR);
2481 if (NULL == ipath)
2482 {
2483 GNUNET_break (0);
2484 return GNUNET_SYSERR;
2485 }
2486 GNUNET_asprintf (&baseconfig, "%s%s", ipath, "config.d");
2487 GNUNET_free (ipath);
2488 }
2489
2490 char *dname = GNUNET_STRINGS_filename_expand (baseconfig);
2491 GNUNET_free (baseconfig);
2492
2493 if ((GNUNET_YES == GNUNET_DISK_directory_test (dname, GNUNET_YES)) &&
2494 (GNUNET_SYSERR == GNUNET_CONFIGURATION_load_from (cfg, dname)))
2495 {
2496 LOG (GNUNET_ERROR_TYPE_WARNING,
2497 "Failed to load base configuration from '%s'\n",
2498 filename);
2499 GNUNET_free (dname);
2500 return GNUNET_SYSERR; /* no configuration at all found */
2501 }
2502 GNUNET_free (dname);
2503 if ((NULL != filename) &&
2504 (GNUNET_OK != GNUNET_CONFIGURATION_parse (cfg, filename)))
2505 {
2506 /* specified configuration not found */
2507 LOG (GNUNET_ERROR_TYPE_WARNING,
2508 "Failed to load configuration from file '%s'\n",
2509 filename);
2510 return GNUNET_SYSERR;
2511 }
2512 if (((GNUNET_YES !=
2513 GNUNET_CONFIGURATION_have_value (cfg, "PATHS", "DEFAULTCONFIG"))) &&
2514 (filename != NULL))
2515 GNUNET_CONFIGURATION_set_value_string (cfg, "PATHS", "DEFAULTCONFIG",
2516 filename);
2517 return GNUNET_OK;
2518}
2519
2520
1671/* end of configuration.c */ 2521/* end of configuration.c */
diff --git a/src/util/configuration_helper.c b/src/util/configuration_helper.c
new file mode 100644
index 000000000..8f995ec03
--- /dev/null
+++ b/src/util/configuration_helper.c
@@ -0,0 +1,302 @@
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2006, 2007, 2008, 2009, 2013, 2020, 2021 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20/**
21 * @file src/util/configuration_helper.c
22 * @brief helper logic for gnunet-config
23 * @author Christian Grothoff
24 */
25#include "platform.h"
26#include "gnunet_util_lib.h"
27
28/**
29 * Print each option in a given section as a filename.
30 *
31 * @param cls closure
32 * @param section name of the section
33 * @param option name of the option
34 * @param value value of the option
35 */
36static void
37print_filename_option (void *cls,
38 const char *section,
39 const char *option,
40 const char *value)
41{
42 const struct GNUNET_CONFIGURATION_Handle *cfg = cls;
43
44 char *value_fn;
45 char *fn;
46
47 GNUNET_assert (GNUNET_OK ==
48 GNUNET_CONFIGURATION_get_value_filename (cfg,
49 section,
50 option,
51 &value_fn));
52 fn = GNUNET_STRINGS_filename_expand (value_fn);
53 if (NULL == fn)
54 fn = value_fn;
55 else
56 GNUNET_free (value_fn);
57 fprintf (stdout,
58 "%s = %s\n",
59 option,
60 fn);
61 GNUNET_free (fn);
62}
63
64
65/**
66 * Print each option in a given section.
67 *
68 * @param cls closure
69 * @param section name of the section
70 * @param option name of the option
71 * @param value value of the option
72 */
73static void
74print_option (void *cls,
75 const char *section,
76 const char *option,
77 const char *value)
78{
79 (void) cls;
80 (void) section;
81
82 fprintf (stdout,
83 "%s = %s\n",
84 option,
85 value);
86}
87
88
89/**
90 * Print out given section name.
91 *
92 * @param cls unused
93 * @param section a section in the configuration file
94 */
95static void
96print_section_name (void *cls,
97 const char *section)
98{
99 (void) cls;
100 fprintf (stdout,
101 "%s\n",
102 section);
103}
104
105
106void
107GNUNET_CONFIGURATION_config_tool_run (
108 void *cls,
109 char *const *args,
110 const char *cfgfile,
111 const struct GNUNET_CONFIGURATION_Handle *cfg)
112{
113 struct GNUNET_CONFIGURATION_ConfigSettings *cs = cls;
114 struct GNUNET_CONFIGURATION_Handle *out = NULL;
115 struct GNUNET_CONFIGURATION_Handle *ncfg = NULL;
116
117 (void) args;
118 if (cs->diagnostics)
119 {
120 /* Re-parse the configuration with diagnostics enabled. */
121 ncfg = GNUNET_CONFIGURATION_create ();
122 GNUNET_CONFIGURATION_enable_diagnostics (ncfg);
123 GNUNET_CONFIGURATION_load (ncfg,
124 cfgfile);
125 cfg = ncfg;
126 }
127
128 if (cs->full)
129 cs->rewrite = GNUNET_YES;
130 if (cs->list_sections)
131 {
132 fprintf (stderr,
133 _ ("The following sections are available:\n"));
134 GNUNET_CONFIGURATION_iterate_sections (cfg,
135 &print_section_name,
136 NULL);
137 return;
138 }
139 if ( (! cs->rewrite) &&
140 (NULL == cs->section) )
141 {
142 char *serialization;
143
144 if (! cs->diagnostics)
145 {
146 fprintf (stderr,
147 _ ("%s, %s or %s argument is required\n"),
148 "--section",
149 "--list-sections",
150 "--diagnostics");
151 cs->global_ret = EXIT_INVALIDARGUMENT;
152 return;
153 }
154 serialization = GNUNET_CONFIGURATION_serialize_diagnostics (cfg);
155 fprintf (stdout,
156 "%s",
157 serialization);
158 GNUNET_free (serialization);
159 }
160 else if ( (NULL != cs->section) &&
161 (NULL == cs->value) )
162 {
163 if (NULL == cs->option)
164 {
165 GNUNET_CONFIGURATION_iterate_section_values (
166 cfg,
167 cs->section,
168 cs->is_filename
169 ? &print_filename_option
170 : &print_option,
171 (void *) cfg);
172 }
173 else
174 {
175 char *value;
176
177 if (cs->is_filename)
178 {
179 if (GNUNET_OK !=
180 GNUNET_CONFIGURATION_get_value_filename (cfg,
181 cs->section,
182 cs->option,
183 &value))
184 {
185 GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
186 cs->section,
187 cs->option);
188 cs->global_ret = EXIT_NOTCONFIGURED;
189 return;
190 }
191 }
192 else
193 {
194 if (GNUNET_OK !=
195 GNUNET_CONFIGURATION_get_value_string (cfg,
196 cs->section,
197 cs->option,
198 &value))
199 {
200 GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
201 cs->section,
202 cs->option);
203 cs->global_ret = EXIT_NOTCONFIGURED;
204 return;
205 }
206 }
207 fprintf (stdout,
208 "%s\n",
209 value);
210 GNUNET_free (value);
211 }
212 }
213 else if (NULL != cs->section)
214 {
215 if (NULL == cs->option)
216 {
217 fprintf (stderr,
218 _ ("--option argument required to set value\n"));
219 cs->global_ret = EXIT_INVALIDARGUMENT;
220 return;
221 }
222 out = GNUNET_CONFIGURATION_dup (cfg);
223 GNUNET_CONFIGURATION_set_value_string (out,
224 cs->section,
225 cs->option,
226 cs->value);
227 cs->rewrite = GNUNET_YES;
228 }
229 if (cs->rewrite)
230 {
231 char *cfg_fn = NULL;
232
233 if (NULL == out)
234 out = GNUNET_CONFIGURATION_dup (cfg);
235
236 if (NULL == cfgfile)
237 {
238 const char *xdg = getenv ("XDG_CONFIG_HOME");
239
240 if (NULL != xdg)
241 GNUNET_asprintf (&cfg_fn,
242 "%s%s%s",
243 xdg,
244 DIR_SEPARATOR_STR,
245 GNUNET_OS_project_data_get ()->config_file);
246 else
247 cfg_fn = GNUNET_strdup (
248 GNUNET_OS_project_data_get ()->user_config_file);
249 cfgfile = cfg_fn;
250 }
251
252 if (! cs->full)
253 {
254 struct GNUNET_CONFIGURATION_Handle *def;
255
256 def = GNUNET_CONFIGURATION_create ();
257 if (GNUNET_OK !=
258 GNUNET_CONFIGURATION_load (def,
259 NULL))
260 {
261 fprintf (stderr,
262 _ ("failed to load configuration defaults"));
263 cs->global_ret = 1;
264 GNUNET_CONFIGURATION_destroy (def);
265 GNUNET_CONFIGURATION_destroy (out);
266 GNUNET_free (cfg_fn);
267 return;
268 }
269 if (GNUNET_OK !=
270 GNUNET_CONFIGURATION_write_diffs (def,
271 out,
272 cfgfile))
273 cs->global_ret = 2;
274 GNUNET_CONFIGURATION_destroy (def);
275 }
276 else
277 {
278 if (GNUNET_OK !=
279 GNUNET_CONFIGURATION_write (out,
280 cfgfile))
281 cs->global_ret = 2;
282 }
283 GNUNET_free (cfg_fn);
284 }
285 if (NULL != out)
286 GNUNET_CONFIGURATION_destroy (out);
287 if (NULL != ncfg)
288 GNUNET_CONFIGURATION_destroy (ncfg);
289}
290
291
292void
293GNUNET_CONFIGURATION_config_settings_free (
294 struct GNUNET_CONFIGURATION_ConfigSettings *cs)
295{
296 GNUNET_free (cs->option);
297 GNUNET_free (cs->section);
298 GNUNET_free (cs->value);
299}
300
301
302/* end of configuration_helper.c */
diff --git a/src/util/configuration_loader.c b/src/util/configuration_loader.c
deleted file mode 100644
index a59477b25..000000000
--- a/src/util/configuration_loader.c
+++ /dev/null
@@ -1,91 +0,0 @@
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2006, 2007, 2008, 2009, 2013 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20
21/**
22 * @file src/util/configuration_loader.c
23 * @brief configuration loading
24 * @author Christian Grothoff
25 */
26
27#include "platform.h"
28#include "gnunet_util_lib.h"
29
30#define LOG(kind, ...) GNUNET_log_from (kind, "util-configuration", __VA_ARGS__)
31
32
33/**
34 * Load configuration (starts with defaults, then loads
35 * system-specific configuration).
36 *
37 * @param cfg configuration to update
38 * @param filename name of the configuration file, NULL to load defaults
39 * @return #GNUNET_OK on success, #GNUNET_SYSERR on error
40 */
41int
42GNUNET_CONFIGURATION_load (struct GNUNET_CONFIGURATION_Handle *cfg,
43 const char *filename)
44{
45 char *baseconfig;
46 const char *base_config_varname;
47
48 base_config_varname = GNUNET_OS_project_data_get ()->base_config_varname;
49
50 if (NULL != base_config_varname
51 && NULL != (baseconfig = getenv (base_config_varname)))
52 {
53 baseconfig = GNUNET_strdup (baseconfig);
54 }
55 else
56 {
57 char *ipath;
58
59 ipath = GNUNET_OS_installation_get_path (GNUNET_OS_IPK_DATADIR);
60 if (NULL == ipath)
61 return GNUNET_SYSERR;
62 GNUNET_asprintf (&baseconfig, "%s%s", ipath, "config.d");
63 GNUNET_free (ipath);
64 }
65
66 char *dname = GNUNET_STRINGS_filename_expand (baseconfig);
67 GNUNET_free (baseconfig);
68
69 if (GNUNET_YES == GNUNET_DISK_directory_test (dname, GNUNET_YES) &&
70 GNUNET_SYSERR == GNUNET_CONFIGURATION_load_from (cfg, dname))
71 {
72 GNUNET_free (dname);
73 return GNUNET_SYSERR; /* no configuration at all found */
74 }
75 GNUNET_free (dname);
76 if ((NULL != filename) &&
77 (GNUNET_OK != GNUNET_CONFIGURATION_parse (cfg, filename)))
78 {
79 /* specified configuration not found */
80 return GNUNET_SYSERR;
81 }
82 if (((GNUNET_YES !=
83 GNUNET_CONFIGURATION_have_value (cfg, "PATHS", "DEFAULTCONFIG"))) &&
84 (filename != NULL))
85 GNUNET_CONFIGURATION_set_value_string (cfg, "PATHS", "DEFAULTCONFIG",
86 filename);
87 return GNUNET_OK;
88}
89
90
91/* end of configuration_loader.c */
diff --git a/src/util/crypto_hkdf.c b/src/util/crypto_hkdf.c
index 86a814b12..7270b87b6 100644
--- a/src/util/crypto_hkdf.c
+++ b/src/util/crypto_hkdf.c
@@ -77,7 +77,11 @@ static const void *
77doHMAC (gcry_md_hd_t mac, const void *key, size_t key_len, const void *buf, 77doHMAC (gcry_md_hd_t mac, const void *key, size_t key_len, const void *buf,
78 size_t buf_len) 78 size_t buf_len)
79{ 79{
80 gcry_md_setkey (mac, key, key_len); 80 if (GPG_ERR_NO_ERROR != gcry_md_setkey (mac, key, key_len))
81 {
82 GNUNET_break (0);
83 return NULL;
84 }
81 gcry_md_write (mac, buf, buf_len); 85 gcry_md_write (mac, buf, buf_len);
82 86
83 return (const void *) gcry_md_read (mac, 0); 87 return (const void *) gcry_md_read (mac, 0);
diff --git a/src/util/disk.c b/src/util/disk.c
index 3bafe311d..2efb52d46 100644
--- a/src/util/disk.c
+++ b/src/util/disk.c
@@ -432,9 +432,15 @@ GNUNET_DISK_directory_test (const char *fil, int is_readable)
432 return GNUNET_YES; 432 return GNUNET_YES;
433} 433}
434 434
435 435/**
436enum GNUNET_GenericReturnValue 436 * Check if fil can be accessed using amode.
437GNUNET_DISK_file_test (const char *fil) 437 *
438 * @param fil file to check for
439 * @param amode access mode
440 * @returns GNUnet error code
441 */
442static enum GNUNET_GenericReturnValue
443file_test_internal (const char *fil, int amode)
438{ 444{
439 struct stat filestat; 445 struct stat filestat;
440 int ret; 446 int ret;
@@ -449,7 +455,7 @@ GNUNET_DISK_file_test (const char *fil)
449 { 455 {
450 if (errno != ENOENT) 456 if (errno != ENOENT)
451 { 457 {
452 LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "stat", rdir); 458 LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_DEBUG, "stat", rdir);
453 GNUNET_free (rdir); 459 GNUNET_free (rdir);
454 return GNUNET_SYSERR; 460 return GNUNET_SYSERR;
455 } 461 }
@@ -461,9 +467,9 @@ GNUNET_DISK_file_test (const char *fil)
461 GNUNET_free (rdir); 467 GNUNET_free (rdir);
462 return GNUNET_NO; 468 return GNUNET_NO;
463 } 469 }
464 if (access (rdir, F_OK) < 0) 470 if (access (rdir, amode) < 0)
465 { 471 {
466 LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "access", rdir); 472 LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_DEBUG, "access", rdir);
467 GNUNET_free (rdir); 473 GNUNET_free (rdir);
468 return GNUNET_SYSERR; 474 return GNUNET_SYSERR;
469 } 475 }
@@ -473,6 +479,20 @@ GNUNET_DISK_file_test (const char *fil)
473 479
474 480
475enum GNUNET_GenericReturnValue 481enum GNUNET_GenericReturnValue
482GNUNET_DISK_file_test (const char *fil)
483{
484 return file_test_internal (fil, F_OK);
485}
486
487
488enum GNUNET_GenericReturnValue
489GNUNET_DISK_file_test_read (const char *fil)
490{
491 return file_test_internal (fil, R_OK);
492}
493
494
495enum GNUNET_GenericReturnValue
476GNUNET_DISK_directory_create (const char *dir) 496GNUNET_DISK_directory_create (const char *dir)
477{ 497{
478 char *rdir; 498 char *rdir;
@@ -882,6 +902,166 @@ GNUNET_DISK_directory_scan (const char *dir_name,
882 return count; 902 return count;
883} 903}
884 904
905/**
906 * Check for a simple wildcard match.
907 * Only asterisks are allowed.
908 * Asterisks match everything, including slashes.
909 *
910 * @param pattern pattern with wildcards
911 * @param str string to match against
912 * @returns true on match, false otherwise
913 */
914static bool
915glob_match (const char *pattern, const char *str)
916{
917 /* Position in the input string */
918 const char *str_pos = str;
919 /* Position in the pattern */
920 const char *pat_pos = pattern;
921 /* Backtrack position in string */
922 const char *str_bt = NULL;
923 /* Backtrack position in pattern */
924 const char *pat_bt = NULL;
925
926 for (;;)
927 {
928 if (*pat_pos == '*')
929 {
930 str_bt = str_pos;
931 pat_bt = pat_pos++;
932 }
933 else if (*pat_pos == *str_pos)
934 {
935 if ('\0' == *pat_pos)
936 return true;
937 str_pos++;
938 pat_pos++;
939 }
940 else
941 {
942 if (NULL == str_bt)
943 return false;
944 /* Backtrack to match one more
945 character as part of the asterisk. */
946 str_pos = str_bt + 1;
947 if ('\0' == *str_pos)
948 return false;
949 pat_pos = pat_bt;
950 }
951 }
952}
953
954struct GlobClosure
955{
956 const char *glob;
957 GNUNET_FileNameCallback cb;
958 void *cls;
959
960 /**
961 * Number of files that actually matched the glob pattern.
962 */
963 int nres;
964};
965
966/**
967 * Function called with a filename.
968 *
969 * @param cls closure
970 * @param filename complete filename (absolute path)
971 * @return #GNUNET_OK to continue to iterate,
972 * #GNUNET_NO to stop iteration with no error,
973 * #GNUNET_SYSERR to abort iteration with error!
974 */
975static enum GNUNET_GenericReturnValue
976glob_cb (void *cls,
977 const char *filename)
978{
979 struct GlobClosure *gc = cls;
980 const char *fn;
981
982 fn = strrchr (filename, DIR_SEPARATOR);
983 fn = (NULL == fn) ? filename : (fn + 1);
984
985 LOG (GNUNET_ERROR_TYPE_DEBUG,
986 "checking glob '%s' against '%s'\n",
987 gc->glob,
988 fn);
989
990 if (glob_match (gc->glob, fn))
991 {
992 enum GNUNET_GenericReturnValue cbret;
993
994 LOG (GNUNET_ERROR_TYPE_DEBUG,
995 "found glob match '%s'\n",
996 filename);
997 gc->nres++;
998 cbret = gc->cb (gc->cls, filename);
999 if (GNUNET_OK != cbret)
1000 return cbret;
1001 }
1002 return GNUNET_OK;
1003}
1004
1005
1006int
1007GNUNET_DISK_glob (const char *glob_pattern,
1008 GNUNET_FileNameCallback callback,
1009 void *callback_cls)
1010{
1011 char *mypat = GNUNET_strdup (glob_pattern);
1012 char *sep;
1013 int ret;
1014
1015 if ( (NULL != strrchr (glob_pattern, '+')) ||
1016 (NULL != strrchr (glob_pattern, '[')) ||
1017 (NULL != strrchr (glob_pattern, '+')) ||
1018 (NULL != strrchr (glob_pattern, '~')) )
1019 {
1020 LOG (GNUNET_ERROR_TYPE_ERROR,
1021 "unsupported glob pattern: '%s'\n",
1022 glob_pattern);
1023 GNUNET_free (mypat);
1024 return -1;
1025 }
1026
1027 sep = strrchr (mypat, DIR_SEPARATOR);
1028 if (NULL == sep)
1029 {
1030 GNUNET_free (mypat);
1031 return -1;
1032 }
1033
1034 *sep = '\0';
1035
1036 if (NULL != strchr (mypat, '*'))
1037 {
1038 GNUNET_free (mypat);
1039 GNUNET_break (0);
1040 LOG (GNUNET_ERROR_TYPE_ERROR,
1041 "glob pattern may only contain '*' in the final path component\n");
1042 return -1;
1043 }
1044
1045 {
1046 struct GlobClosure gc = {
1047 .glob = sep + 1,
1048 .cb = callback,
1049 .cls = callback_cls,
1050 .nres = 0,
1051 };
1052 LOG (GNUNET_ERROR_TYPE_DEBUG,
1053 "scanning directory '%s' for glob matches on '%s'\n",
1054 mypat,
1055 gc.glob);
1056 ret = GNUNET_DISK_directory_scan (mypat,
1057 glob_cb,
1058 &gc
1059 );
1060 GNUNET_free (mypat);
1061 return (ret < 0) ? ret : gc.nres;
1062 }
1063}
1064
885 1065
886/** 1066/**
887 * Function that removes the given directory by calling 1067 * Function that removes the given directory by calling
@@ -997,7 +1177,7 @@ GNUNET_DISK_file_copy (const char *src,
997 GNUNET_DISK_file_close (in); 1177 GNUNET_DISK_file_close (in);
998 GNUNET_DISK_file_close (out); 1178 GNUNET_DISK_file_close (out);
999 return GNUNET_OK; 1179 return GNUNET_OK;
1000FAIL: 1180 FAIL:
1001 GNUNET_free (buf); 1181 GNUNET_free (buf);
1002 GNUNET_DISK_file_close (in); 1182 GNUNET_DISK_file_close (in);
1003 GNUNET_DISK_file_close (out); 1183 GNUNET_DISK_file_close (out);
diff --git a/src/util/gnunet-config.c b/src/util/gnunet-config.c
index 11682daea..a195d6014 100644
--- a/src/util/gnunet-config.c
+++ b/src/util/gnunet-config.c
@@ -1,6 +1,6 @@
1/* 1/*
2 This file is part of GNUnet. 2 This file is part of GNUnet.
3 Copyright (C) 2012 GNUnet e.V. 3 Copyright (C) 2012-2021 GNUnet e.V.
4 4
5 GNUnet is free software: you can redistribute it and/or modify it 5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published 6 under the terms of the GNU Affero General Public License as published
@@ -28,51 +28,12 @@
28 28
29 29
30/** 30/**
31 * Name of the section
32 */
33static char *section;
34
35/**
36 * Name of the option
37 */
38static char *option;
39
40/**
41 * Value to set
42 */
43static char *value;
44
45/**
46 * Backend to check if the respective plugin is 31 * Backend to check if the respective plugin is
47 * loadable. NULL if no check is to be performed. 32 * loadable. NULL if no check is to be performed.
48 * The value is the "basename" of the plugin to load. 33 * The value is the "basename" of the plugin to load.
49 */ 34 */
50static char *backend_check; 35static char *backend_check;
51 36
52/**
53 * Treat option as a filename.
54 */
55static int is_filename;
56
57/**
58 * Whether to show the sections.
59 */
60static int list_sections;
61
62/**
63 * Return value from 'main'.
64 */
65static int global_ret;
66
67/**
68 * Should we write out the configuration file, even if no value was changed?
69 */
70static int rewrite;
71
72/**
73 * Should the generated configuration file contain the whole configuration?
74 */
75static int full;
76 37
77/** 38/**
78 * If printing the value of CFLAGS has been requested. 39 * If printing the value of CFLAGS has been requested.
@@ -92,64 +53,11 @@ static int prefix;
92 53
93/** 54/**
94 * Print each option in a given section. 55 * Print each option in a given section.
56 * Main task to run to perform operations typical for
57 * gnunet-config as per the configuration settings
58 * given in @a cls.
95 * 59 *
96 * @param cls closure 60 * @param cls closure with the `struct GNUNET_CONFIGURATION_ConfigSettings`
97 * @param section name of the section
98 * @param option name of the option
99 * @param value value of the option
100 */
101static void
102print_option (void *cls,
103 const char *section,
104 const char *option,
105 const char *value)
106{
107 const struct GNUNET_CONFIGURATION_Handle *cfg = cls;
108
109 (void) section;
110 if (is_filename)
111 {
112 char *value_fn;
113 char *fn;
114
115 GNUNET_assert (GNUNET_OK ==
116 GNUNET_CONFIGURATION_get_value_filename (cfg,
117 section,
118 option,
119 &value_fn));
120 fn = GNUNET_STRINGS_filename_expand (value_fn);
121 if (NULL == fn)
122 fn = value_fn;
123 else
124 GNUNET_free (value_fn);
125 fprintf (stdout, "%s = %s\n", option, fn);
126 GNUNET_free (fn);
127 }
128 else
129 {
130 fprintf (stdout, "%s = %s\n", option, value);
131 }
132}
133
134
135/**
136 * Print out given section name.
137 *
138 * @param cls unused
139 * @param section a section in the configuration file
140 */
141static void
142print_section_name (void *cls, const char *section)
143{
144 (void) cls;
145 fprintf (stdout, "%s\n", section);
146}
147
148
149/**
150 * Main function that will be run by the scheduler.
151 *
152 * @param cls closure
153 * @param args remaining command-line arguments 61 * @param args remaining command-line arguments
154 * @param cfgfile name of the configuration file used (for saving, 62 * @param cfgfile name of the configuration file used (for saving,
155 * can be NULL!) 63 * can be NULL!)
@@ -161,10 +69,8 @@ run (void *cls,
161 const char *cfgfile, 69 const char *cfgfile,
162 const struct GNUNET_CONFIGURATION_Handle *cfg) 70 const struct GNUNET_CONFIGURATION_Handle *cfg)
163{ 71{
164 struct GNUNET_CONFIGURATION_Handle *out = NULL; 72 struct GNUNET_CONFIGURATION_ConfigSettings *cs = cls;
165 73
166 (void) cls;
167 (void) args;
168 if (1 == cflags || 1 == libs || 1 == prefix) 74 if (1 == cflags || 1 == libs || 1 == prefix)
169 { 75 {
170 char *prefixdir = GNUNET_OS_installation_get_path (GNUNET_OS_IPK_PREFIX); 76 char *prefixdir = GNUNET_OS_installation_get_path (GNUNET_OS_IPK_PREFIX);
@@ -192,153 +98,15 @@ run (void *cls,
192 GNUNET_asprintf (&name, 98 GNUNET_asprintf (&name,
193 "libgnunet_plugin_%s", 99 "libgnunet_plugin_%s",
194 backend_check); 100 backend_check);
195 global_ret = (GNUNET_OK == 101 cs->global_ret = (GNUNET_OK ==
196 GNUNET_PLUGIN_test (name)) ? 0 : 77; 102 GNUNET_PLUGIN_test (name)) ? 0 : 77;
197 GNUNET_free (name); 103 GNUNET_free (name);
198 return; 104 return;
199 } 105 }
200 if (full) 106 GNUNET_CONFIGURATION_config_tool_run (cs,
201 rewrite = GNUNET_YES; 107 args,
202 if (list_sections) 108 cfgfile,
203 { 109 cfg);
204 fprintf (stderr,
205 _ ("The following sections are available:\n"));
206 GNUNET_CONFIGURATION_iterate_sections (cfg,
207 &print_section_name,
208 NULL);
209 return;
210 }
211 if ( (! rewrite) &&
212 (NULL == section) )
213 {
214 fprintf (stderr,
215 _ ("%s or %s argument is required\n"),
216 "--section",
217 "--list-sections");
218 global_ret = 1;
219 return;
220 }
221
222 if ( (NULL != section) &&
223 (NULL == value) )
224 {
225 if (NULL == option)
226 {
227 GNUNET_CONFIGURATION_iterate_section_values (cfg,
228 section,
229 &print_option,
230 (void *) cfg);
231 }
232 else
233 {
234 if (is_filename)
235 {
236 if (GNUNET_OK !=
237 GNUNET_CONFIGURATION_get_value_filename (cfg,
238 section,
239 option,
240 &value))
241 {
242 GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
243 section,
244 option);
245 global_ret = 3;
246 return;
247 }
248 }
249 else
250 {
251 if (GNUNET_OK !=
252 GNUNET_CONFIGURATION_get_value_string (cfg,
253 section,
254 option,
255 &value))
256 {
257 GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
258 section,
259 option);
260 global_ret = 3;
261 return;
262 }
263 }
264 fprintf (stdout,
265 "%s\n",
266 value);
267 }
268 }
269 else if (NULL != section)
270 {
271 if (NULL == option)
272 {
273 fprintf (stderr,
274 _ ("--option argument required to set value\n"));
275 global_ret = 1;
276 return;
277 }
278 out = GNUNET_CONFIGURATION_dup (cfg);
279 GNUNET_CONFIGURATION_set_value_string (out,
280 section,
281 option,
282 value);
283 rewrite = GNUNET_YES;
284 }
285 if (rewrite)
286 {
287 char *cfg_fn = NULL;
288
289 if (NULL == out)
290 out = GNUNET_CONFIGURATION_dup (cfg);
291
292 if (NULL == cfgfile)
293 {
294 const char *xdg = getenv ("XDG_CONFIG_HOME");
295 if (NULL != xdg)
296 GNUNET_asprintf (&cfg_fn,
297 "%s%s%s",
298 xdg,
299 DIR_SEPARATOR_STR,
300 GNUNET_OS_project_data_get ()->config_file);
301 else
302 cfg_fn = GNUNET_strdup (
303 GNUNET_OS_project_data_get ()->user_config_file);
304 cfgfile = cfg_fn;
305 }
306
307 if (! full)
308 {
309 struct GNUNET_CONFIGURATION_Handle *def;
310
311 def = GNUNET_CONFIGURATION_create ();
312 if (GNUNET_OK !=
313 GNUNET_CONFIGURATION_load (def,
314 NULL))
315 {
316 fprintf (stderr,
317 _ ("failed to load configuration defaults"));
318 global_ret = 1;
319 GNUNET_CONFIGURATION_destroy (def);
320 GNUNET_CONFIGURATION_destroy (out);
321 GNUNET_free (cfg_fn);
322 return;
323 }
324 if (GNUNET_OK !=
325 GNUNET_CONFIGURATION_write_diffs (def,
326 out,
327 cfgfile))
328 global_ret = 2;
329 GNUNET_CONFIGURATION_destroy (def);
330 }
331 else
332 {
333 if (GNUNET_OK !=
334 GNUNET_CONFIGURATION_write (out,
335 cfgfile))
336 global_ret = 2;
337 }
338 GNUNET_free (cfg_fn);
339 }
340 if (NULL != out)
341 GNUNET_CONFIGURATION_destroy (out);
342} 110}
343 111
344 112
@@ -350,8 +118,13 @@ run (void *cls,
350 * @return 0 ok, 1 on error 118 * @return 0 ok, 1 on error
351 */ 119 */
352int 120int
353main (int argc, char *const *argv) 121main (int argc,
122 char *const *argv)
354{ 123{
124 struct GNUNET_CONFIGURATION_ConfigSettings cs = {
125 .api_version = GNUNET_UTIL_VERSION,
126 .global_ret = EXIT_SUCCESS
127 };
355 struct GNUNET_GETOPT_CommandLineOption options[] = { 128 struct GNUNET_GETOPT_CommandLineOption options[] = {
356 GNUNET_GETOPT_option_exclusive ( 129 GNUNET_GETOPT_option_exclusive (
357 GNUNET_GETOPT_option_string ( 130 GNUNET_GETOPT_option_string (
@@ -361,44 +134,6 @@ main (int argc, char *const *argv)
361 gettext_noop ( 134 gettext_noop (
362 "test if the current installation supports the specified BACKEND"), 135 "test if the current installation supports the specified BACKEND"),
363 &backend_check)), 136 &backend_check)),
364 GNUNET_GETOPT_option_flag (
365 'F',
366 "full",
367 gettext_noop (
368 "write the full configuration file, including default values"),
369 &full),
370 GNUNET_GETOPT_option_flag (
371 'f',
372 "filename",
373 gettext_noop ("interpret option value as a filename (with $-expansion)"),
374 &is_filename),
375 GNUNET_GETOPT_option_string ('o',
376 "option",
377 "OPTION",
378 gettext_noop ("name of the option to access"),
379 &option),
380 GNUNET_GETOPT_option_flag (
381 'r',
382 "rewrite",
383 gettext_noop (
384 "rewrite the configuration file, even if nothing changed"),
385 &rewrite),
386 GNUNET_GETOPT_option_flag ('S',
387 "list-sections",
388 gettext_noop (
389 "print available configuration sections"),
390 &list_sections),
391 GNUNET_GETOPT_option_string ('s',
392 "section",
393 "SECTION",
394 gettext_noop (
395 "name of the section to access"),
396 &section),
397 GNUNET_GETOPT_option_string ('V',
398 "value",
399 "VALUE",
400 gettext_noop ("value to set"),
401 &value),
402 GNUNET_GETOPT_option_flag ('C', 137 GNUNET_GETOPT_option_flag ('C',
403 "cflags", 138 "cflags",
404 gettext_noop ( 139 gettext_noop (
@@ -414,15 +149,15 @@ main (int argc, char *const *argv)
414 gettext_noop ( 149 gettext_noop (
415 "Provide the path under which GNUnet was installed"), 150 "Provide the path under which GNUnet was installed"),
416 &prefix), 151 &prefix),
152 GNUNET_CONFIGURATION_CONFIG_OPTIONS (&cs),
417 GNUNET_GETOPT_OPTION_END 153 GNUNET_GETOPT_OPTION_END
418 }; 154 };
419 int ret; 155 enum GNUNET_GenericReturnValue ret;
420 156
421 if (GNUNET_OK != 157 if (GNUNET_OK !=
422 GNUNET_STRINGS_get_utf8_args (argc, argv, 158 GNUNET_STRINGS_get_utf8_args (argc, argv,
423 &argc, &argv)) 159 &argc, &argv))
424 return 2; 160 return EXIT_FAILURE;
425
426 ret = 161 ret =
427 GNUNET_PROGRAM_run (argc, 162 GNUNET_PROGRAM_run (argc,
428 argv, 163 argv,
@@ -430,11 +165,14 @@ main (int argc, char *const *argv)
430 gettext_noop ("Manipulate GNUnet configuration files"), 165 gettext_noop ("Manipulate GNUnet configuration files"),
431 options, 166 options,
432 &run, 167 &run,
433 NULL); 168 &cs);
434 GNUNET_free_nz ((void *) argv); 169 GNUNET_free_nz ((void *) argv);
435 if (GNUNET_OK == ret) 170 GNUNET_CONFIGURATION_config_settings_free (&cs);
436 return global_ret; 171 if (GNUNET_NO == ret)
437 return ret; 172 return 0;
173 if (GNUNET_SYSERR == ret)
174 return EXIT_INVALIDARGUMENT;
175 return cs.global_ret;
438} 176}
439 177
440 178
diff --git a/src/util/network.c b/src/util/network.c
index e771a9834..014701e02 100644
--- a/src/util/network.c
+++ b/src/util/network.c
@@ -122,7 +122,7 @@ GNUNET_NETWORK_test_pf (int pf)
122 } 122 }
123 else 123 else
124 { 124 {
125 close (s); 125 GNUNET_break (0 == close (s));
126 ret = GNUNET_OK; 126 ret = GNUNET_OK;
127 } 127 }
128 switch (pf) 128 switch (pf)
@@ -506,15 +506,15 @@ GNUNET_NETWORK_socket_bind (struct GNUNET_NETWORK_Handle *desc,
506#endif 506#endif
507 if (AF_UNIX == address->sa_family) 507 if (AF_UNIX == address->sa_family)
508 GNUNET_NETWORK_unix_precheck ((const struct sockaddr_un *) address); 508 GNUNET_NETWORK_unix_precheck ((const struct sockaddr_un *) address);
509
509 { 510 {
510 const int on = 1; 511 const int on = 1;
511 512
512 /* This is required here for TCP sockets, but only on UNIX */ 513 if ( (SOCK_STREAM == desc->type) &&
513 if ((SOCK_STREAM == desc->type) && 514 (0 != setsockopt (desc->fd,
514 (0 != setsockopt (desc->fd, 515 SOL_SOCKET,
515 SOL_SOCKET, 516 SO_REUSEADDR,
516 SO_REUSEADDR, 517 &on, sizeof(on))) )
517 &on, sizeof(on))))
518 LOG_STRERROR (GNUNET_ERROR_TYPE_DEBUG, 518 LOG_STRERROR (GNUNET_ERROR_TYPE_DEBUG,
519 "setsockopt"); 519 "setsockopt");
520 } 520 }
@@ -883,15 +883,13 @@ GNUNET_NETWORK_socket_setsockopt (struct GNUNET_NETWORK_Handle *fd,
883 const void *option_value, 883 const void *option_value,
884 socklen_t option_len) 884 socklen_t option_len)
885{ 885{
886 int ret; 886 return (0 == setsockopt (fd->fd,
887 887 level,
888 ret = setsockopt (fd->fd, 888 option_name,
889 level, 889 option_value,
890 option_name, 890 option_len))
891 option_value, 891 ? GNUNET_OK
892 option_len); 892 : GNUNET_SYSERR;
893
894 return ret == 0 ? GNUNET_OK : GNUNET_SYSERR;
895} 893}
896 894
897 895
diff --git a/src/util/os_installation.c b/src/util/os_installation.c
index 02d4d439d..f15e1871a 100644
--- a/src/util/os_installation.c
+++ b/src/util/os_installation.c
@@ -68,7 +68,7 @@ static const struct GNUNET_OS_ProjectData default_pd = {
68 .config_file = "gnunet.conf", 68 .config_file = "gnunet.conf",
69 .user_config_file = "~/.config/gnunet.conf", 69 .user_config_file = "~/.config/gnunet.conf",
70 .is_gnu = 1, 70 .is_gnu = 1,
71 .gettext_domain = PACKAGE, 71 .gettext_domain = "gnunet",
72 .gettext_path = NULL, 72 .gettext_path = NULL,
73 .agpl_url = GNUNET_AGPL_URL, 73 .agpl_url = GNUNET_AGPL_URL,
74}; 74};
diff --git a/src/util/os_priority.c b/src/util/os_priority.c
index 1ed9bcbf7..08320b291 100644
--- a/src/util/os_priority.c
+++ b/src/util/os_priority.c
@@ -47,7 +47,6 @@ struct GNUNET_OS_Process
47 */ 47 */
48 pid_t pid; 48 pid_t pid;
49 49
50
51 /** 50 /**
52 * Pipe we use to signal the process. 51 * Pipe we use to signal the process.
53 * NULL if unused, or if process was deemed uncontrollable. 52 * NULL if unused, or if process was deemed uncontrollable.
@@ -301,7 +300,8 @@ GNUNET_OS_process_destroy (struct GNUNET_OS_Process *proc)
301 * @param flags open flags (O_RDONLY, O_WRONLY) 300 * @param flags open flags (O_RDONLY, O_WRONLY)
302 */ 301 */
303static void 302static void
304open_dev_null (int target_fd, int flags) 303open_dev_null (int target_fd,
304 int flags)
305{ 305{
306 int fd; 306 int fd;
307 307
@@ -316,7 +316,7 @@ open_dev_null (int target_fd, int flags)
316 if (-1 == dup2 (fd, target_fd)) 316 if (-1 == dup2 (fd, target_fd))
317 { 317 {
318 GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "dup2"); 318 GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "dup2");
319 (void) close (fd); 319 GNUNET_break (0 == close (fd));
320 return; 320 return;
321 } 321 }
322 GNUNET_break (0 == close (fd)); 322 GNUNET_break (0 == close (fd));
@@ -395,7 +395,7 @@ start_process (enum GNUNET_OS_InheritStdioFlags std_inheritance,
395 if (NULL != childpipe_write) 395 if (NULL != childpipe_write)
396 GNUNET_DISK_file_close (childpipe_write); 396 GNUNET_DISK_file_close (childpipe_write);
397 if (0 <= dup_childpipe_read_fd) 397 if (0 <= dup_childpipe_read_fd)
398 close (dup_childpipe_read_fd); 398 GNUNET_break (0 == close (dup_childpipe_read_fd));
399 return NULL; 399 return NULL;
400 } 400 }
401 childpipe_read_fd = dup_childpipe_read_fd; 401 childpipe_read_fd = dup_childpipe_read_fd;
@@ -474,7 +474,7 @@ start_process (enum GNUNET_OS_InheritStdioFlags std_inheritance,
474 if (NULL != childpipe_write) 474 if (NULL != childpipe_write)
475 GNUNET_DISK_file_close (childpipe_write); 475 GNUNET_DISK_file_close (childpipe_write);
476 if (0 <= childpipe_read_fd) 476 if (0 <= childpipe_read_fd)
477 close (childpipe_read_fd); 477 GNUNET_break (0 == close (childpipe_read_fd));
478 errno = eno; 478 errno = eno;
479 return NULL; 479 return NULL;
480 } 480 }
@@ -486,7 +486,7 @@ start_process (enum GNUNET_OS_InheritStdioFlags std_inheritance,
486 gnunet_proc->control_pipe = childpipe_write; 486 gnunet_proc->control_pipe = childpipe_write;
487 if (0 != (std_inheritance & GNUNET_OS_USE_PIPE_CONTROL)) 487 if (0 != (std_inheritance & GNUNET_OS_USE_PIPE_CONTROL))
488 { 488 {
489 close (childpipe_read_fd); 489 GNUNET_break (0 == close (childpipe_read_fd));
490 } 490 }
491 GNUNET_array_grow (lscp, ls, 0); 491 GNUNET_array_grow (lscp, ls, 0);
492 return gnunet_proc; 492 return gnunet_proc;
@@ -564,7 +564,7 @@ start_process (enum GNUNET_OS_InheritStdioFlags std_inheritance,
564 { 564 {
565 /* Bury any existing FD, no matter what; they should all be closed 565 /* Bury any existing FD, no matter what; they should all be closed
566 * on exec anyway and the important ones have been dup'ed away */ 566 * on exec anyway and the important ones have been dup'ed away */
567 (void) close (tgt); 567 GNUNET_break (0 == close (tgt));
568 GNUNET_assert (-1 != dup2 (lscp[i], tgt)); 568 GNUNET_assert (-1 != dup2 (lscp[i], tgt));
569 } 569 }
570 /* unset close-on-exec flag */ 570 /* unset close-on-exec flag */
diff --git a/src/util/plugin.c b/src/util/plugin.c
index feb661f24..39874a588 100644
--- a/src/util/plugin.c
+++ b/src/util/plugin.c
@@ -447,8 +447,12 @@ GNUNET_PLUGIN_load_all_in_context (const struct GNUNET_OS_ProjectData *ctx,
447 void *cb_cls) 447 void *cb_cls)
448{ 448{
449 const struct GNUNET_OS_ProjectData *cpd = GNUNET_OS_project_data_get (); 449 const struct GNUNET_OS_ProjectData *cpd = GNUNET_OS_project_data_get ();
450
450 GNUNET_OS_init (ctx); 451 GNUNET_OS_init (ctx);
451 GNUNET_PLUGIN_load_all (basename, arg, cb, cb_cls); 452 GNUNET_PLUGIN_load_all (basename,
453 arg,
454 cb,
455 cb_cls);
452 GNUNET_OS_init (cpd); 456 GNUNET_OS_init (cpd);
453} 457}
454 458
diff --git a/src/util/program.c b/src/util/program.c
index e34b37370..b9da14572 100644
--- a/src/util/program.c
+++ b/src/util/program.c
@@ -140,7 +140,6 @@ GNUNET_PROGRAM_run2 (int argc,
140 char *loglev; 140 char *loglev;
141 char *logfile; 141 char *logfile;
142 char *cfg_fn; 142 char *cfg_fn;
143 const char *xdg;
144 enum GNUNET_GenericReturnValue ret; 143 enum GNUNET_GenericReturnValue ret;
145 int iret; 144 int iret;
146 unsigned int cnt; 145 unsigned int cnt;
@@ -149,12 +148,13 @@ GNUNET_PROGRAM_run2 (int argc,
149 long long clock_offset; 148 long long clock_offset;
150 struct GNUNET_CONFIGURATION_Handle *cfg; 149 struct GNUNET_CONFIGURATION_Handle *cfg;
151 const struct GNUNET_OS_ProjectData *pd = GNUNET_OS_project_data_get (); 150 const struct GNUNET_OS_ProjectData *pd = GNUNET_OS_project_data_get ();
152 struct GNUNET_GETOPT_CommandLineOption defoptions[] = 151 struct GNUNET_GETOPT_CommandLineOption defoptions[] = {
153 { GNUNET_GETOPT_option_cfgfile (&cc.cfgfile), 152 GNUNET_GETOPT_option_cfgfile (&cc.cfgfile),
154 GNUNET_GETOPT_option_help (binaryHelp), 153 GNUNET_GETOPT_option_help (binaryHelp),
155 GNUNET_GETOPT_option_loglevel (&loglev), 154 GNUNET_GETOPT_option_loglevel (&loglev),
156 GNUNET_GETOPT_option_logfile (&logfile), 155 GNUNET_GETOPT_option_logfile (&logfile),
157 GNUNET_GETOPT_option_version (pd->version) }; 156 GNUNET_GETOPT_option_version (pd->version)
157 };
158 struct GNUNET_GETOPT_CommandLineOption *allopts; 158 struct GNUNET_GETOPT_CommandLineOption *allopts;
159 const char *gargs; 159 const char *gargs;
160 char *lpfx; 160 char *lpfx;
@@ -219,17 +219,7 @@ GNUNET_PROGRAM_run2 (int argc,
219 &cmd_sorter); 219 &cmd_sorter);
220 loglev = NULL; 220 loglev = NULL;
221 if ((NULL != pd->config_file) && (NULL != pd->user_config_file)) 221 if ((NULL != pd->config_file) && (NULL != pd->user_config_file))
222 { 222 cfg_fn = GNUNET_CONFIGURATION_default_filename ();
223 xdg = getenv ("XDG_CONFIG_HOME");
224 if (NULL != xdg)
225 GNUNET_asprintf (&cfg_fn,
226 "%s%s%s",
227 xdg,
228 DIR_SEPARATOR_STR,
229 pd->config_file);
230 else
231 cfg_fn = GNUNET_strdup (pd->user_config_file);
232 }
233 else 223 else
234 cfg_fn = NULL; 224 cfg_fn = NULL;
235 lpfx = GNUNET_strdup (binaryName); 225 lpfx = GNUNET_strdup (binaryName);
@@ -251,12 +241,26 @@ GNUNET_PROGRAM_run2 (int argc,
251 } 241 }
252 if (NULL != cc.cfgfile) 242 if (NULL != cc.cfgfile)
253 { 243 {
254 if ((GNUNET_YES != GNUNET_DISK_file_test (cc.cfgfile)) || 244 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
255 (GNUNET_SYSERR == GNUNET_CONFIGURATION_load (cfg, cc.cfgfile))) 245 "Loading configuration from entry point specified as option (%s)\n",
246 cc.cfgfile);
247 if (GNUNET_YES !=
248 GNUNET_DISK_file_test (cc.cfgfile))
256 { 249 {
257 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 250 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
258 _ ( 251 _ ("Unreadable configuration file `%s', exiting ...\n"),
259 "Unreadable or malformed configuration file `%s', exit ...\n"), 252 cc.cfgfile);
253 ret = GNUNET_SYSERR;
254 GNUNET_free (allopts);
255 GNUNET_free (lpfx);
256 goto cleanup;
257 }
258 if (GNUNET_SYSERR ==
259 GNUNET_CONFIGURATION_load (cfg,
260 cc.cfgfile))
261 {
262 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
263 _ ("Malformed configuration file `%s', exiting ...\n"),
260 cc.cfgfile); 264 cc.cfgfile);
261 ret = GNUNET_SYSERR; 265 ret = GNUNET_SYSERR;
262 GNUNET_free (allopts); 266 GNUNET_free (allopts);
@@ -266,34 +270,31 @@ GNUNET_PROGRAM_run2 (int argc,
266 } 270 }
267 else 271 else
268 { 272 {
269 if ((NULL != cfg_fn) && (GNUNET_YES == GNUNET_DISK_file_test (cfg_fn))) 273 if ( (NULL != cfg_fn) &&
274 (GNUNET_YES !=
275 GNUNET_DISK_file_test (cfg_fn)) )
270 { 276 {
271 if (GNUNET_SYSERR == GNUNET_CONFIGURATION_load (cfg, cfg_fn)) 277 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
272 { 278 _ ("Unreadable configuration file `%s'. Exiting ...\n"),
273 GNUNET_log ( 279 cfg_fn);
274 GNUNET_ERROR_TYPE_ERROR, 280 ret = GNUNET_SYSERR;
275 _ ( 281 GNUNET_free (allopts);
276 "Unreadable or malformed default configuration file `%s', exit ...\n"), 282 GNUNET_free (lpfx);
277 cfg_fn); 283 goto cleanup;
278 ret = GNUNET_SYSERR;
279 GNUNET_free (allopts);
280 GNUNET_free (lpfx);
281 goto cleanup;
282 }
283 } 284 }
284 else if (NULL != cfg_fn) 285 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
286 "Loading configuration from entry point `%s'\n",
287 cc.cfgfile);
288 if (GNUNET_SYSERR ==
289 GNUNET_CONFIGURATION_load (cfg,
290 cfg_fn))
285 { 291 {
286 GNUNET_free (cfg_fn); 292 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
287 cfg_fn = NULL; 293 _ ("Malformed configuration. Exiting ...\n"));
288 if (GNUNET_OK != GNUNET_CONFIGURATION_load (cfg, NULL)) 294 ret = GNUNET_SYSERR;
289 { 295 GNUNET_free (allopts);
290 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 296 GNUNET_free (lpfx);
291 _ ("Unreadable or malformed configuration, exit ...\n")); 297 goto cleanup;
292 ret = GNUNET_SYSERR;
293 GNUNET_free (allopts);
294 GNUNET_free (lpfx);
295 goto cleanup;
296 }
297 } 298 }
298 } 299 }
299 GNUNET_free (allopts); 300 GNUNET_free (allopts);
diff --git a/src/util/strings.c b/src/util/strings.c
index 24335e444..673915888 100644
--- a/src/util/strings.c
+++ b/src/util/strings.c
@@ -1600,7 +1600,7 @@ GNUNET_STRINGS_base64_encode (const void *in,
1600 char *opt; 1600 char *opt;
1601 1601
1602 ret = 0; 1602 ret = 0;
1603 GNUNET_assert (len / 4 < SIZE_MAX); 1603 GNUNET_assert (len < SIZE_MAX / 4 * 3 );
1604 opt = GNUNET_malloc (2 + (len * 4 / 3) + 8); 1604 opt = GNUNET_malloc (2 + (len * 4 / 3) + 8);
1605 for (size_t i = 0; i < len; ++i) 1605 for (size_t i = 0; i < len; ++i)
1606 { 1606 {
diff --git a/src/util/test_plugin.c b/src/util/test_plugin.c
index c0eb717d6..e739d17c9 100644
--- a/src/util/test_plugin.c
+++ b/src/util/test_plugin.c
@@ -26,15 +26,22 @@
26 26
27 27
28static void 28static void
29test_cb (void *cls, const char *libname, void *lib_ret) 29test_cb (void *cls,
30 const char *libname,
31 void *lib_ret)
30{ 32{
31 void *ret; 33 const char *test_cls = cls;
34 char *ret;
32 35
33 GNUNET_assert (0 == strcmp (cls, "test")); 36 GNUNET_assert (0 == strcmp (test_cls,
34 GNUNET_assert (0 == strcmp (lib_ret, "Hello")); 37 "test-closure"));
35 ret = GNUNET_PLUGIN_unload (libname, "out"); 38 GNUNET_assert (0 == strcmp (lib_ret,
39 "Hello"));
40 ret = GNUNET_PLUGIN_unload (libname,
41 "out");
36 GNUNET_assert (NULL != ret); 42 GNUNET_assert (NULL != ret);
37 GNUNET_assert (0 == strcmp (ret, "World")); 43 GNUNET_assert (0 == strcmp (ret,
44 "World"));
38 free (ret); 45 free (ret);
39} 46}
40 47
@@ -44,24 +51,35 @@ main (int argc, char *argv[])
44{ 51{
45 void *ret; 52 void *ret;
46 53
47 GNUNET_log_setup ("test-plugin", "WARNING", NULL); 54 GNUNET_log_setup ("test-plugin",
48 GNUNET_log_skip (1, GNUNET_NO); 55 "WARNING",
49 ret = GNUNET_PLUGIN_load ("libgnunet_plugin_missing", NULL); 56 NULL);
57 GNUNET_log_skip (1,
58 GNUNET_NO);
59 ret = GNUNET_PLUGIN_load ("libgnunet_plugin_missing",
60 NULL);
50 GNUNET_log_skip (0, GNUNET_NO); 61 GNUNET_log_skip (0, GNUNET_NO);
51 if (ret != NULL) 62 if (NULL != ret)
52 return 1; 63 return 1;
53 ret = GNUNET_PLUGIN_load ("libgnunet_plugin_test", "in"); 64 ret = GNUNET_PLUGIN_load ("libgnunet_plugin_utiltest",
54 if (ret == NULL) 65 "in");
66 if (NULL == ret)
55 return 1; 67 return 1;
56 if (0 != strcmp (ret, "Hello")) 68 if (0 != strcmp (ret,
69 "Hello"))
57 return 2; 70 return 2;
58 ret = GNUNET_PLUGIN_unload ("libgnunet_plugin_test", "out"); 71 ret = GNUNET_PLUGIN_unload ("libgnunet_plugin_utiltest",
59 if (ret == NULL) 72 "out");
73 if (NULL == ret)
60 return 3; 74 return 3;
61 if (0 != strcmp (ret, "World")) 75 if (0 != strcmp (ret,
76 "World"))
62 return 4; 77 return 4;
63 free (ret); 78 free (ret);
64 GNUNET_PLUGIN_load_all ("libgnunet_plugin_tes", "in", &test_cb, "test"); 79 GNUNET_PLUGIN_load_all ("libgnunet_plugin_utiltes",
80 "in",
81 &test_cb,
82 "test-closure");
65 return 0; 83 return 0;
66} 84}
67 85
diff --git a/src/util/test_plugin_plug.c b/src/util/test_plugin_plug.c
index 39c8774b1..bfaad52e8 100644
--- a/src/util/test_plugin_plug.c
+++ b/src/util/test_plugin_plug.c
@@ -23,8 +23,9 @@
23 */ 23 */
24#include "platform.h" 24#include "platform.h"
25 25
26
26void * 27void *
27libgnunet_plugin_test_init (void *arg) 28libgnunet_plugin_utiltest_init (void *arg)
28{ 29{
29 if (0 == strcmp (arg, "in")) 30 if (0 == strcmp (arg, "in"))
30 return "Hello"; 31 return "Hello";
@@ -33,7 +34,7 @@ libgnunet_plugin_test_init (void *arg)
33 34
34 35
35void * 36void *
36libgnunet_plugin_test_done (void *arg) 37libgnunet_plugin_utiltest_done (void *arg)
37{ 38{
38 if (0 == strcmp (arg, "out")) 39 if (0 == strcmp (arg, "out"))
39 return strdup ("World"); 40 return strdup ("World");
diff --git a/src/vpn/Makefile.am b/src/vpn/Makefile.am
index d1ecd9f98..a5bbb6e22 100644
--- a/src/vpn/Makefile.am
+++ b/src/vpn/Makefile.am
@@ -31,7 +31,10 @@ bin_PROGRAMS = \
31 gnunet-vpn 31 gnunet-vpn
32 32
33gnunet_helper_vpn_SOURCES = \ 33gnunet_helper_vpn_SOURCES = \
34gnunet-helper-vpn.c 34 gnunet-helper-vpn.c
35gnunet_helper_vpn_LDADD = \
36 $(top_builddir)/src/util/libgnunetutil.la \
37 $(GN_LIBINTL)
35 38
36gnunet_service_vpn_SOURCES = \ 39gnunet_service_vpn_SOURCES = \
37 gnunet-service-vpn.c 40 gnunet-service-vpn.c
diff --git a/src/vpn/gnunet-helper-vpn.c b/src/vpn/gnunet-helper-vpn.c
index 7eeb07379..7686d51d5 100644
--- a/src/vpn/gnunet-helper-vpn.c
+++ b/src/vpn/gnunet-helper-vpn.c
@@ -246,7 +246,8 @@ set_address6 (const char *dev,
246 if (0 != close (fd)) 246 if (0 != close (fd))
247 { 247 {
248 fprintf (stderr, 248 fprintf (stderr,
249 "close failed: %s\n", 249 "close failed at line %d: %s\n",
250 __LINE__,
250 strerror (errno)); 251 strerror (errno));
251 exit (1); 252 exit (1);
252 } 253 }
@@ -367,9 +368,9 @@ set_address4 (const char *dev,
367 if (0 != close (fd)) 368 if (0 != close (fd))
368 { 369 {
369 fprintf (stderr, 370 fprintf (stderr,
370 "close failed: %s\n", 371 "close failed at line %d: %s\n",
372 __LINE__,
371 strerror (errno)); 373 strerror (errno));
372 (void) close (fd);
373 exit (1); 374 exit (1);
374 } 375 }
375} 376}
@@ -653,7 +654,7 @@ main (int argc, char **argv)
653 { 654 {
654 fprintf (stderr, 655 fprintf (stderr,
655 "Fatal: prefix_len out of range\n"); 656 "Fatal: prefix_len out of range\n");
656 close (fd_tun); 657 (void) close (fd_tun);
657 return 1; 658 return 1;
658 } 659 }
659 660
@@ -701,6 +702,6 @@ main (int argc, char **argv)
701 run (fd_tun); 702 run (fd_tun);
702 global_ret = 0; 703 global_ret = 0;
703cleanup: 704cleanup:
704 close (fd_tun); 705 (void) close (fd_tun);
705 return global_ret; 706 return global_ret;
706} 707}