diff options
-rw-r--r-- | po/POTFILES.in | 95 | ||||
-rw-r--r-- | po/de.po | 402 | ||||
-rw-r--r-- | po/es.po | 405 | ||||
-rw-r--r-- | po/fr.po | 4796 | ||||
-rw-r--r-- | po/sv.po | 401 | ||||
-rw-r--r-- | po/vi.po | 401 | ||||
-rw-r--r-- | po/zh_CN.po | 394 | ||||
-rw-r--r-- | src/dht/Makefile.am | 24 | ||||
-rw-r--r-- | src/dht/gnunet-service-wdht.c | 220 | ||||
-rw-r--r-- | src/dht/gnunet-service-wdht.h | 60 | ||||
-rw-r--r-- | src/dht/gnunet-service-wdht_clients.c | 1449 | ||||
-rw-r--r-- | src/dht/gnunet-service-wdht_clients.h | 149 | ||||
-rw-r--r-- | src/dht/gnunet-service-wdht_datacache.c | 381 | ||||
-rw-r--r-- | src/dht/gnunet-service-wdht_datacache.h | 90 | ||||
-rw-r--r-- | src/dht/gnunet-service-wdht_hello.c | 137 | ||||
-rw-r--r-- | src/dht/gnunet-service-wdht_hello.h | 55 | ||||
-rw-r--r-- | src/dht/gnunet-service-wdht_neighbours.c | 6290 | ||||
-rw-r--r-- | src/dht/gnunet-service-wdht_neighbours.h | 146 | ||||
-rw-r--r-- | src/dht/gnunet-service-wdht_nse.c | 116 | ||||
-rw-r--r-- | src/dht/gnunet-service-wdht_nse.h | 52 | ||||
-rw-r--r-- | src/dht/gnunet-service-wdht_routing.c | 363 | ||||
-rw-r--r-- | src/dht/gnunet-service-wdht_routing.h | 138 |
22 files changed, 13634 insertions, 2930 deletions
diff --git a/po/POTFILES.in b/po/POTFILES.in index a5d340942..a36c57f33 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in | |||
@@ -3,21 +3,13 @@ src/arm/arm_monitor_api.c | |||
3 | src/arm/gnunet-arm.c | 3 | src/arm/gnunet-arm.c |
4 | src/arm/gnunet-service-arm.c | 4 | src/arm/gnunet-service-arm.c |
5 | src/arm/mockup-service.c | 5 | src/arm/mockup-service.c |
6 | src/ats-tests/ats-testing-experiment.c | ||
7 | src/ats-tests/ats-testing-log.c | ||
8 | src/ats-tests/ats-testing-preferences.c | ||
9 | src/ats-tests/ats-testing-traffic.c | ||
10 | src/ats-tests/ats-testing.c | ||
11 | src/ats-tests/gnunet-ats-sim.c | ||
12 | src/ats-tests/gnunet-solver-eval.c | ||
13 | src/ats-tool/gnunet-ats.c | ||
14 | src/ats/ats_api_connectivity.c | 6 | src/ats/ats_api_connectivity.c |
15 | src/ats/ats_api_performance.c | 7 | src/ats/ats_api_performance.c |
16 | src/ats/ats_api_scanner.c | 8 | src/ats/ats_api_scanner.c |
17 | src/ats/ats_api_scheduling.c | 9 | src/ats/ats_api_scheduling.c |
18 | src/ats/gnunet-ats-solver-eval.c | 10 | src/ats/gnunet-ats-solver-eval.c |
19 | src/ats/gnunet-service-ats.c | ||
20 | src/ats/gnunet-service-ats_addresses.c | 11 | src/ats/gnunet-service-ats_addresses.c |
12 | src/ats/gnunet-service-ats.c | ||
21 | src/ats/gnunet-service-ats_connectivity.c | 13 | src/ats/gnunet-service-ats_connectivity.c |
22 | src/ats/gnunet-service-ats_feedback.c | 14 | src/ats/gnunet-service-ats_feedback.c |
23 | src/ats/gnunet-service-ats_normalization.c | 15 | src/ats/gnunet-service-ats_normalization.c |
@@ -29,6 +21,14 @@ src/ats/gnunet-service-ats_scheduling.c | |||
29 | src/ats/plugin_ats_mlp.c | 21 | src/ats/plugin_ats_mlp.c |
30 | src/ats/plugin_ats_proportional.c | 22 | src/ats/plugin_ats_proportional.c |
31 | src/ats/plugin_ats_ril.c | 23 | src/ats/plugin_ats_ril.c |
24 | src/ats-tests/ats-testing.c | ||
25 | src/ats-tests/ats-testing-experiment.c | ||
26 | src/ats-tests/ats-testing-log.c | ||
27 | src/ats-tests/ats-testing-preferences.c | ||
28 | src/ats-tests/ats-testing-traffic.c | ||
29 | src/ats-tests/gnunet-ats-sim.c | ||
30 | src/ats-tests/gnunet-solver-eval.c | ||
31 | src/ats-tool/gnunet-ats.c | ||
32 | src/block/block.c | 32 | src/block/block.c |
33 | src/block/plugin_block_template.c | 33 | src/block/plugin_block_template.c |
34 | src/block/plugin_block_test.c | 34 | src/block/plugin_block_test.c |
@@ -37,8 +37,8 @@ src/cadet/cadet_common.c | |||
37 | src/cadet/cadet_path.c | 37 | src/cadet/cadet_path.c |
38 | src/cadet/cadet_test_lib.c | 38 | src/cadet/cadet_test_lib.c |
39 | src/cadet/cadet_tunnel_tree.c | 39 | src/cadet/cadet_tunnel_tree.c |
40 | src/cadet/gnunet-cadet-profiler.c | ||
41 | src/cadet/gnunet-cadet.c | 40 | src/cadet/gnunet-cadet.c |
41 | src/cadet/gnunet-cadet-profiler.c | ||
42 | src/cadet/gnunet-service-cadet.c | 42 | src/cadet/gnunet-service-cadet.c |
43 | src/cadet/gnunet-service-cadet_channel.c | 43 | src/cadet/gnunet-service-cadet_channel.c |
44 | src/cadet/gnunet-service-cadet_connection.c | 44 | src/cadet/gnunet-service-cadet_connection.c |
@@ -52,12 +52,12 @@ src/consensus/gnunet-consensus-profiler.c | |||
52 | src/consensus/gnunet-service-consensus.c | 52 | src/consensus/gnunet-service-consensus.c |
53 | src/conversation/conversation_api.c | 53 | src/conversation/conversation_api.c |
54 | src/conversation/conversation_api_call.c | 54 | src/conversation/conversation_api_call.c |
55 | src/conversation/gnunet-conversation-test.c | ||
56 | src/conversation/gnunet-conversation.c | 55 | src/conversation/gnunet-conversation.c |
57 | src/conversation/gnunet-helper-audio-playback-gst.c | 56 | src/conversation/gnunet-conversation-test.c |
58 | src/conversation/gnunet-helper-audio-playback.c | 57 | src/conversation/gnunet-helper-audio-playback.c |
59 | src/conversation/gnunet-helper-audio-record-gst.c | 58 | src/conversation/gnunet-helper-audio-playback-gst.c |
60 | src/conversation/gnunet-helper-audio-record.c | 59 | src/conversation/gnunet-helper-audio-record.c |
60 | src/conversation/gnunet-helper-audio-record-gst.c | ||
61 | src/conversation/gnunet-service-conversation.c | 61 | src/conversation/gnunet-service-conversation.c |
62 | src/conversation/microphone.c | 62 | src/conversation/microphone.c |
63 | src/conversation/plugin_gnsrecord_conversation.c | 63 | src/conversation/plugin_gnsrecord_conversation.c |
@@ -89,6 +89,7 @@ src/dht/dht_api.c | |||
89 | src/dht/dht_test_lib.c | 89 | src/dht/dht_test_lib.c |
90 | src/dht/gnunet-dht-get.c | 90 | src/dht/gnunet-dht-get.c |
91 | src/dht/gnunet-dht-monitor.c | 91 | src/dht/gnunet-dht-monitor.c |
92 | src/dht/gnunet_dht_profiler.c | ||
92 | src/dht/gnunet-dht-put.c | 93 | src/dht/gnunet-dht-put.c |
93 | src/dht/gnunet-service-dht.c | 94 | src/dht/gnunet-service-dht.c |
94 | src/dht/gnunet-service-dht_clients.c | 95 | src/dht/gnunet-service-dht_clients.c |
@@ -104,7 +105,6 @@ src/dht/gnunet-service-xdht_hello.c | |||
104 | src/dht/gnunet-service-xdht_neighbours.c | 105 | src/dht/gnunet-service-xdht_neighbours.c |
105 | src/dht/gnunet-service-xdht_nse.c | 106 | src/dht/gnunet-service-xdht_nse.c |
106 | src/dht/gnunet-service-xdht_routing.c | 107 | src/dht/gnunet-service-xdht_routing.c |
107 | src/dht/gnunet_dht_profiler.c | ||
108 | src/dht/plugin_block_dht.c | 108 | src/dht/plugin_block_dht.c |
109 | src/dns/dns_api.c | 109 | src/dns/dns_api.c |
110 | src/dns/dnsparser.c | 110 | src/dns/dnsparser.c |
@@ -120,8 +120,8 @@ src/dv/gnunet-service-dv.c | |||
120 | src/dv/plugin_transport_dv.c | 120 | src/dv/plugin_transport_dv.c |
121 | src/env/env.c | 121 | src/env/env.c |
122 | src/exit/gnunet-daemon-exit.c | 122 | src/exit/gnunet-daemon-exit.c |
123 | src/exit/gnunet-helper-exit-windows.c | ||
124 | src/exit/gnunet-helper-exit.c | 123 | src/exit/gnunet-helper-exit.c |
124 | src/exit/gnunet-helper-exit-windows.c | ||
125 | src/fragmentation/defragmentation.c | 125 | src/fragmentation/defragmentation.c |
126 | src/fragmentation/fragmentation.c | 126 | src/fragmentation/fragmentation.c |
127 | src/fs/fs_api.c | 127 | src/fs/fs_api.c |
@@ -146,8 +146,8 @@ src/fs/gnunet-auto-share.c | |||
146 | src/fs/gnunet-daemon-fsprofiler.c | 146 | src/fs/gnunet-daemon-fsprofiler.c |
147 | src/fs/gnunet-directory.c | 147 | src/fs/gnunet-directory.c |
148 | src/fs/gnunet-download.c | 148 | src/fs/gnunet-download.c |
149 | src/fs/gnunet-fs-profiler.c | ||
150 | src/fs/gnunet-fs.c | 149 | src/fs/gnunet-fs.c |
150 | src/fs/gnunet-fs-profiler.c | ||
151 | src/fs/gnunet-helper-fs-publish.c | 151 | src/fs/gnunet-helper-fs-publish.c |
152 | src/fs/gnunet-publish.c | 152 | src/fs/gnunet-publish.c |
153 | src/fs/gnunet-search.c | 153 | src/fs/gnunet-search.c |
@@ -166,10 +166,10 @@ src/fs/plugin_block_fs.c | |||
166 | src/gns/gns_api.c | 166 | src/gns/gns_api.c |
167 | src/gns/gnunet-bcd.c | 167 | src/gns/gnunet-bcd.c |
168 | src/gns/gnunet-dns2gns.c | 168 | src/gns/gnunet-dns2gns.c |
169 | src/gns/gnunet-gns.c | ||
169 | src/gns/gnunet-gns-helper-service-w32.c | 170 | src/gns/gnunet-gns-helper-service-w32.c |
170 | src/gns/gnunet-gns-import.c | 171 | src/gns/gnunet-gns-import.c |
171 | src/gns/gnunet-gns-proxy.c | 172 | src/gns/gnunet-gns-proxy.c |
172 | src/gns/gnunet-gns.c | ||
173 | src/gns/gnunet-service-gns.c | 173 | src/gns/gnunet-service-gns.c |
174 | src/gns/gnunet-service-gns_interceptor.c | 174 | src/gns/gnunet-service-gns_interceptor.c |
175 | src/gns/gnunet-service-gns_resolver.c | 175 | src/gns/gnunet-service-gns_resolver.c |
@@ -179,15 +179,15 @@ src/gns/nss/nss_gns_query.c | |||
179 | src/gns/plugin_block_gns.c | 179 | src/gns/plugin_block_gns.c |
180 | src/gns/plugin_gnsrecord_gns.c | 180 | src/gns/plugin_gnsrecord_gns.c |
181 | src/gns/plugin_rest_gns.c | 181 | src/gns/plugin_rest_gns.c |
182 | src/gns/w32nsp-install.c | ||
183 | src/gns/w32nsp-resolve.c | ||
184 | src/gns/w32nsp-uninstall.c | ||
185 | src/gns/w32nsp.c | ||
186 | src/gnsrecord/gnsrecord.c | 182 | src/gnsrecord/gnsrecord.c |
187 | src/gnsrecord/gnsrecord_crypto.c | 183 | src/gnsrecord/gnsrecord_crypto.c |
188 | src/gnsrecord/gnsrecord_misc.c | 184 | src/gnsrecord/gnsrecord_misc.c |
189 | src/gnsrecord/gnsrecord_serialization.c | 185 | src/gnsrecord/gnsrecord_serialization.c |
190 | src/gnsrecord/plugin_gnsrecord_dns.c | 186 | src/gnsrecord/plugin_gnsrecord_dns.c |
187 | src/gns/w32nsp.c | ||
188 | src/gns/w32nsp-install.c | ||
189 | src/gns/w32nsp-resolve.c | ||
190 | src/gns/w32nsp-uninstall.c | ||
191 | src/hello/address.c | 191 | src/hello/address.c |
192 | src/hello/gnunet-hello.c | 192 | src/hello/gnunet-hello.c |
193 | src/hello/hello.c | 193 | src/hello/hello.c |
@@ -208,31 +208,32 @@ src/namecache/gnunet-service-namecache.c | |||
208 | src/namecache/namecache_api.c | 208 | src/namecache/namecache_api.c |
209 | src/namecache/plugin_namecache_postgres.c | 209 | src/namecache/plugin_namecache_postgres.c |
210 | src/namecache/plugin_namecache_sqlite.c | 210 | src/namecache/plugin_namecache_sqlite.c |
211 | src/namestore/gnunet-namestore-fcfsd.c | ||
212 | src/namestore/gnunet-namestore.c | 211 | src/namestore/gnunet-namestore.c |
212 | src/namestore/gnunet-namestore-fcfsd.c | ||
213 | src/namestore/gnunet-service-namestore.c | 213 | src/namestore/gnunet-service-namestore.c |
214 | src/namestore/namestore_api.c | 214 | src/namestore/namestore_api.c |
215 | src/namestore/namestore_api_monitor.c | 215 | src/namestore/namestore_api_monitor.c |
216 | src/namestore/plugin_namestore_postgres.c | 216 | src/namestore/plugin_namestore_postgres.c |
217 | src/namestore/plugin_namestore_sqlite.c | 217 | src/namestore/plugin_namestore_sqlite.c |
218 | src/nat/gnunet-helper-nat-client-windows.c | 218 | src/namestore/plugin_rest_namestore.c |
219 | src/nat/gnunet-helper-nat-client.c | 219 | src/nat/gnunet-helper-nat-client.c |
220 | src/nat/gnunet-helper-nat-server-windows.c | 220 | src/nat/gnunet-helper-nat-client-windows.c |
221 | src/nat/gnunet-helper-nat-server.c | 221 | src/nat/gnunet-helper-nat-server.c |
222 | src/nat/gnunet-helper-nat-server-windows.c | ||
222 | src/nat/gnunet-nat-server.c | 223 | src/nat/gnunet-nat-server.c |
223 | src/nat/nat.c | ||
224 | src/nat/nat_auto.c | 224 | src/nat/nat_auto.c |
225 | src/nat/nat.c | ||
225 | src/nat/nat_mini.c | 226 | src/nat/nat_mini.c |
226 | src/nat/nat_test.c | 227 | src/nat/nat_test.c |
227 | src/nse/gnunet-nse-profiler.c | ||
228 | src/nse/gnunet-nse.c | 228 | src/nse/gnunet-nse.c |
229 | src/nse/gnunet-nse-profiler.c | ||
229 | src/nse/gnunet-service-nse.c | 230 | src/nse/gnunet-service-nse.c |
230 | src/nse/nse_api.c | 231 | src/nse/nse_api.c |
231 | src/peerinfo-tool/gnunet-peerinfo.c | ||
232 | src/peerinfo-tool/gnunet-peerinfo_plugins.c | ||
233 | src/peerinfo/gnunet-service-peerinfo.c | 232 | src/peerinfo/gnunet-service-peerinfo.c |
234 | src/peerinfo/peerinfo_api.c | 233 | src/peerinfo/peerinfo_api.c |
235 | src/peerinfo/peerinfo_api_notify.c | 234 | src/peerinfo/peerinfo_api_notify.c |
235 | src/peerinfo-tool/gnunet-peerinfo.c | ||
236 | src/peerinfo-tool/gnunet-peerinfo_plugins.c | ||
236 | src/peerstore/gnunet-peerstore.c | 237 | src/peerstore/gnunet-peerstore.c |
237 | src/peerstore/gnunet-service-peerstore.c | 238 | src/peerstore/gnunet-service-peerstore.c |
238 | src/peerstore/peerstore_api.c | 239 | src/peerstore/peerstore_api.c |
@@ -276,10 +277,12 @@ src/secretsharing/gnunet-secretsharing-profiler.c | |||
276 | src/secretsharing/gnunet-service-secretsharing.c | 277 | src/secretsharing/gnunet-service-secretsharing.c |
277 | src/secretsharing/secretsharing_api.c | 278 | src/secretsharing/secretsharing_api.c |
278 | src/secretsharing/secretsharing_common.c | 279 | src/secretsharing/secretsharing_common.c |
279 | src/sensor/gnunet-sensor-profiler.c | 280 | src/sensordashboard/gnunet-sensordashboard.c |
281 | src/sensordashboard/gnunet-service-sensordashboard.c | ||
280 | src/sensor/gnunet-sensor.c | 282 | src/sensor/gnunet-sensor.c |
281 | src/sensor/gnunet-service-sensor.c | 283 | src/sensor/gnunet-sensor-profiler.c |
282 | src/sensor/gnunet-service-sensor_analysis.c | 284 | src/sensor/gnunet-service-sensor_analysis.c |
285 | src/sensor/gnunet-service-sensor.c | ||
283 | src/sensor/gnunet-service-sensor_monitoring.c | 286 | src/sensor/gnunet-service-sensor_monitoring.c |
284 | src/sensor/gnunet-service-sensor_reporting.c | 287 | src/sensor/gnunet-service-sensor_reporting.c |
285 | src/sensor/gnunet-service-sensor_update.c | 288 | src/sensor/gnunet-service-sensor_update.c |
@@ -287,8 +290,6 @@ src/sensor/plugin_sensor_model_gaussian.c | |||
287 | src/sensor/sensor_api.c | 290 | src/sensor/sensor_api.c |
288 | src/sensor/sensor_util_lib.c | 291 | src/sensor/sensor_util_lib.c |
289 | src/sensor/sensor_util_lib_crypto.c | 292 | src/sensor/sensor_util_lib_crypto.c |
290 | src/sensordashboard/gnunet-sensordashboard.c | ||
291 | src/sensordashboard/gnunet-service-sensordashboard.c | ||
292 | src/set/gnunet-service-set.c | 293 | src/set/gnunet-service-set.c |
293 | src/set/gnunet-service-set_intersection.c | 294 | src/set/gnunet-service-set_intersection.c |
294 | src/set/gnunet-service-set_union.c | 295 | src/set/gnunet-service-set_union.c |
@@ -309,30 +310,30 @@ src/testbed/gnunet-daemon-latency-logger.c | |||
309 | src/testbed/gnunet-daemon-testbed-blacklist.c | 310 | src/testbed/gnunet-daemon-testbed-blacklist.c |
310 | src/testbed/gnunet-daemon-testbed-underlay.c | 311 | src/testbed/gnunet-daemon-testbed-underlay.c |
311 | src/testbed/gnunet-helper-testbed.c | 312 | src/testbed/gnunet-helper-testbed.c |
313 | src/testbed/gnunet_mpi_test.c | ||
312 | src/testbed/gnunet-service-test-barriers.c | 314 | src/testbed/gnunet-service-test-barriers.c |
313 | src/testbed/gnunet-service-testbed-logger.c | ||
314 | src/testbed/gnunet-service-testbed.c | ||
315 | src/testbed/gnunet-service-testbed_barriers.c | 315 | src/testbed/gnunet-service-testbed_barriers.c |
316 | src/testbed/gnunet-service-testbed.c | ||
316 | src/testbed/gnunet-service-testbed_cache.c | 317 | src/testbed/gnunet-service-testbed_cache.c |
317 | src/testbed/gnunet-service-testbed_connectionpool.c | 318 | src/testbed/gnunet-service-testbed_connectionpool.c |
318 | src/testbed/gnunet-service-testbed_cpustatus.c | 319 | src/testbed/gnunet-service-testbed_cpustatus.c |
319 | src/testbed/gnunet-service-testbed_links.c | 320 | src/testbed/gnunet-service-testbed_links.c |
321 | src/testbed/gnunet-service-testbed-logger.c | ||
320 | src/testbed/gnunet-service-testbed_meminfo.c | 322 | src/testbed/gnunet-service-testbed_meminfo.c |
321 | src/testbed/gnunet-service-testbed_oc.c | 323 | src/testbed/gnunet-service-testbed_oc.c |
322 | src/testbed/gnunet-service-testbed_peers.c | 324 | src/testbed/gnunet-service-testbed_peers.c |
323 | src/testbed/gnunet-testbed-profiler.c | ||
324 | src/testbed/gnunet_mpi_test.c | ||
325 | src/testbed/gnunet_testbed_mpi_spawn.c | 325 | src/testbed/gnunet_testbed_mpi_spawn.c |
326 | src/testbed/testbed_api.c | 326 | src/testbed/gnunet-testbed-profiler.c |
327 | src/testbed/testbed_api_barriers.c | 327 | src/testbed/testbed_api_barriers.c |
328 | src/testbed/testbed_api.c | ||
328 | src/testbed/testbed_api_hosts.c | 329 | src/testbed/testbed_api_hosts.c |
329 | src/testbed/testbed_api_operations.c | 330 | src/testbed/testbed_api_operations.c |
330 | src/testbed/testbed_api_peers.c | 331 | src/testbed/testbed_api_peers.c |
331 | src/testbed/testbed_api_sd.c | 332 | src/testbed/testbed_api_sd.c |
332 | src/testbed/testbed_api_services.c | 333 | src/testbed/testbed_api_services.c |
333 | src/testbed/testbed_api_statistics.c | 334 | src/testbed/testbed_api_statistics.c |
334 | src/testbed/testbed_api_test.c | ||
335 | src/testbed/testbed_api_testbed.c | 335 | src/testbed/testbed_api_testbed.c |
336 | src/testbed/testbed_api_test.c | ||
336 | src/testbed/testbed_api_topology.c | 337 | src/testbed/testbed_api_topology.c |
337 | src/testbed/testbed_api_underlay.c | 338 | src/testbed/testbed_api_underlay.c |
338 | src/testbed/testbed_logger_api.c | 339 | src/testbed/testbed_logger_api.c |
@@ -342,39 +343,39 @@ src/testing/testing.c | |||
342 | src/topology/friends.c | 343 | src/topology/friends.c |
343 | src/topology/gnunet-daemon-topology.c | 344 | src/topology/gnunet-daemon-topology.c |
344 | src/transport/gnunet-helper-transport-bluetooth.c | 345 | src/transport/gnunet-helper-transport-bluetooth.c |
345 | src/transport/gnunet-helper-transport-wlan-dummy.c | ||
346 | src/transport/gnunet-helper-transport-wlan.c | 346 | src/transport/gnunet-helper-transport-wlan.c |
347 | src/transport/gnunet-service-transport.c | 347 | src/transport/gnunet-helper-transport-wlan-dummy.c |
348 | src/transport/gnunet-service-transport_ats.c | 348 | src/transport/gnunet-service-transport_ats.c |
349 | src/transport/gnunet-service-transport_blacklist.c | 349 | src/transport/gnunet-service-transport_blacklist.c |
350 | src/transport/gnunet-service-transport.c | ||
350 | src/transport/gnunet-service-transport_clients.c | 351 | src/transport/gnunet-service-transport_clients.c |
351 | src/transport/gnunet-service-transport_hello.c | 352 | src/transport/gnunet-service-transport_hello.c |
352 | src/transport/gnunet-service-transport_manipulation.c | 353 | src/transport/gnunet-service-transport_manipulation.c |
353 | src/transport/gnunet-service-transport_neighbours.c | 354 | src/transport/gnunet-service-transport_neighbours.c |
354 | src/transport/gnunet-service-transport_plugins.c | 355 | src/transport/gnunet-service-transport_plugins.c |
355 | src/transport/gnunet-service-transport_validation.c | 356 | src/transport/gnunet-service-transport_validation.c |
357 | src/transport/gnunet-transport.c | ||
356 | src/transport/gnunet-transport-certificate-creation.c | 358 | src/transport/gnunet-transport-certificate-creation.c |
357 | src/transport/gnunet-transport-profiler.c | 359 | src/transport/gnunet-transport-profiler.c |
358 | src/transport/gnunet-transport-wlan-receiver.c | 360 | src/transport/gnunet-transport-wlan-receiver.c |
359 | src/transport/gnunet-transport-wlan-sender.c | 361 | src/transport/gnunet-transport-wlan-sender.c |
360 | src/transport/gnunet-transport.c | ||
361 | src/transport/plugin_transport_http_client.c | 362 | src/transport/plugin_transport_http_client.c |
362 | src/transport/plugin_transport_http_common.c | 363 | src/transport/plugin_transport_http_common.c |
363 | src/transport/plugin_transport_http_server.c | 364 | src/transport/plugin_transport_http_server.c |
364 | src/transport/plugin_transport_smtp.c | 365 | src/transport/plugin_transport_smtp.c |
365 | src/transport/plugin_transport_tcp.c | 366 | src/transport/plugin_transport_tcp.c |
366 | src/transport/plugin_transport_template.c | 367 | src/transport/plugin_transport_template.c |
367 | src/transport/plugin_transport_udp.c | ||
368 | src/transport/plugin_transport_udp_broadcasting.c | 368 | src/transport/plugin_transport_udp_broadcasting.c |
369 | src/transport/plugin_transport_udp.c | ||
369 | src/transport/plugin_transport_unix.c | 370 | src/transport/plugin_transport_unix.c |
370 | src/transport/plugin_transport_wlan.c | 371 | src/transport/plugin_transport_wlan.c |
371 | src/transport/transport-testing.c | ||
372 | src/transport/transport_api.c | ||
373 | src/transport/transport_api_address_to_string.c | 372 | src/transport/transport_api_address_to_string.c |
374 | src/transport/transport_api_blacklist.c | 373 | src/transport/transport_api_blacklist.c |
374 | src/transport/transport_api.c | ||
375 | src/transport/transport_api_monitor_peers.c | 375 | src/transport/transport_api_monitor_peers.c |
376 | src/transport/transport_api_monitor_plugins.c | 376 | src/transport/transport_api_monitor_plugins.c |
377 | src/transport/transport_api_monitor_validation.c | 377 | src/transport/transport_api_monitor_validation.c |
378 | src/transport/transport-testing.c | ||
378 | src/tun/regex.c | 379 | src/tun/regex.c |
379 | src/tun/tun.c | 380 | src/tun/tun.c |
380 | src/util/bandwidth.c | 381 | src/util/bandwidth.c |
@@ -389,8 +390,8 @@ src/util/connection.c | |||
389 | src/util/container_bloomfilter.c | 390 | src/util/container_bloomfilter.c |
390 | src/util/container_heap.c | 391 | src/util/container_heap.c |
391 | src/util/container_meta_data.c | 392 | src/util/container_meta_data.c |
392 | src/util/container_multihashmap.c | ||
393 | src/util/container_multihashmap32.c | 393 | src/util/container_multihashmap32.c |
394 | src/util/container_multihashmap.c | ||
394 | src/util/container_multipeermap.c | 395 | src/util/container_multipeermap.c |
395 | src/util/crypto_crc.c | 396 | src/util/crypto_crc.c |
396 | src/util/crypto_ecc.c | 397 | src/util/crypto_ecc.c |
@@ -405,8 +406,8 @@ src/util/crypto_symmetric.c | |||
405 | src/util/disk.c | 406 | src/util/disk.c |
406 | src/util/getopt.c | 407 | src/util/getopt.c |
407 | src/util/getopt_helpers.c | 408 | src/util/getopt_helpers.c |
408 | src/util/gnunet-config-diff.c | ||
409 | src/util/gnunet-config.c | 409 | src/util/gnunet-config.c |
410 | src/util/gnunet-config-diff.c | ||
410 | src/util/gnunet-ecc.c | 411 | src/util/gnunet-ecc.c |
411 | src/util/gnunet-helper-w32-console.c | 412 | src/util/gnunet-helper-w32-console.c |
412 | src/util/gnunet-resolver.c | 413 | src/util/gnunet-resolver.c |
@@ -437,8 +438,8 @@ src/util/time.c | |||
437 | src/util/w32cat.c | 438 | src/util/w32cat.c |
438 | src/util/win.c | 439 | src/util/win.c |
439 | src/util/winproc.c | 440 | src/util/winproc.c |
440 | src/vpn/gnunet-helper-vpn-windows.c | ||
441 | src/vpn/gnunet-helper-vpn.c | 441 | src/vpn/gnunet-helper-vpn.c |
442 | src/vpn/gnunet-helper-vpn-windows.c | ||
442 | src/vpn/gnunet-service-vpn.c | 443 | src/vpn/gnunet-service-vpn.c |
443 | src/vpn/gnunet-vpn.c | 444 | src/vpn/gnunet-vpn.c |
444 | src/vpn/vpn_api.c | 445 | src/vpn/vpn_api.c |
@@ -10,7 +10,7 @@ msgid "" | |||
10 | msgstr "" | 10 | msgstr "" |
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: 2015-03-14 18:00+0100\n" | 13 | "POT-Creation-Date: 2015-04-27 13:05+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" |
@@ -496,16 +496,16 @@ msgstr "" | |||
496 | msgid "Could not connect master [%u] and slave [%u]\n" | 496 | msgid "Could not connect master [%u] and slave [%u]\n" |
497 | msgstr "Verbindung zu gnunetd konnte nicht hergestellt werden.\n" | 497 | msgstr "Verbindung zu gnunetd konnte nicht hergestellt werden.\n" |
498 | 498 | ||
499 | #: src/ats-tests/ats-testing.c:490 src/ats-tests/ats-testing.c:662 | 499 | #: src/ats-tests/ats-testing.c:490 src/ats-tests/ats-testing.c:634 |
500 | #, fuzzy | 500 | #, fuzzy |
501 | msgid "Initialization failed, shutdown\n" | 501 | msgid "Initialization failed, shutdown\n" |
502 | msgstr " Verbindung fehlgeschlagen\n" | 502 | msgstr " Verbindung fehlgeschlagen\n" |
503 | 503 | ||
504 | #: src/ats-tests/ats-testing-log.c:846 | 504 | #: src/ats-tests/ats-testing-log.c:834 |
505 | msgid "Stop logging\n" | 505 | msgid "Stop logging\n" |
506 | msgstr "Protokollierung stoppen\n" | 506 | msgstr "Protokollierung stoppen\n" |
507 | 507 | ||
508 | #: src/ats-tests/ats-testing-log.c:897 | 508 | #: src/ats-tests/ats-testing-log.c:885 |
509 | #, fuzzy, c-format | 509 | #, fuzzy, c-format |
510 | msgid "Start logging `%s'\n" | 510 | msgid "Start logging `%s'\n" |
511 | msgstr "Collection `%s' begonnen.\n" | 511 | msgstr "Collection `%s' begonnen.\n" |
@@ -553,6 +553,7 @@ msgid "Quota for network `%11s' (in/out): %10s / %10s\n" | |||
553 | msgstr "" | 553 | msgstr "" |
554 | 554 | ||
555 | #: src/ats-tool/gnunet-ats.c:708 src/namestore/gnunet-namestore.c:700 | 555 | #: src/ats-tool/gnunet-ats.c:708 src/namestore/gnunet-namestore.c:700 |
556 | #: src/namestore/plugin_rest_namestore.c:812 | ||
556 | #: src/transport/gnunet-transport.c:1890 | 557 | #: src/transport/gnunet-transport.c:1890 |
557 | #: src/transport/gnunet-transport-profiler.c:531 | 558 | #: src/transport/gnunet-transport-profiler.c:531 |
558 | #, c-format | 559 | #, c-format |
@@ -1409,29 +1410,29 @@ msgstr "# Bytes entschlüsselt" | |||
1409 | msgid "# PAYLOAD dropped (out of order)" | 1410 | msgid "# PAYLOAD dropped (out of order)" |
1410 | msgstr "" | 1411 | msgstr "" |
1411 | 1412 | ||
1412 | #: src/core/gnunet-service-core_neighbours.c:168 | 1413 | #: src/core/gnunet-service-core_neighbours.c:177 |
1413 | msgid "# sessions terminated by transport disconnect" | 1414 | msgid "# sessions terminated by transport disconnect" |
1414 | msgstr "" | 1415 | msgstr "" |
1415 | 1416 | ||
1416 | #: src/core/gnunet-service-core_neighbours.c:184 | 1417 | #: src/core/gnunet-service-core_neighbours.c:193 |
1417 | #: src/core/gnunet-service-core_neighbours.c:342 | 1418 | #: src/core/gnunet-service-core_neighbours.c:355 |
1418 | msgid "# neighbour entries allocated" | 1419 | msgid "# neighbour entries allocated" |
1419 | msgstr "" | 1420 | msgstr "" |
1420 | 1421 | ||
1421 | #: src/core/gnunet-service-core_neighbours.c:252 | 1422 | #: src/core/gnunet-service-core_neighbours.c:264 |
1422 | msgid "# encrypted bytes given to transport" | 1423 | msgid "# encrypted bytes given to transport" |
1423 | msgstr "" | 1424 | msgstr "" |
1424 | 1425 | ||
1425 | #: src/core/gnunet-service-core_neighbours.c:425 | 1426 | #: src/core/gnunet-service-core_neighbours.c:438 |
1426 | #, fuzzy, c-format | 1427 | #, fuzzy, c-format |
1427 | msgid "Unsupported message of type %u (%u bytes) received from peer `%s'\n" | 1428 | msgid "Unsupported message of type %u (%u bytes) received from peer `%s'\n" |
1428 | msgstr "Ungültige `%s' Nachricht von Knoten `%s' empfangen.\n" | 1429 | msgstr "Ungültige `%s' Nachricht von Knoten `%s' empfangen.\n" |
1429 | 1430 | ||
1430 | #: src/core/gnunet-service-core_sessions.c:245 | 1431 | #: src/core/gnunet-service-core_sessions.c:252 |
1431 | #: src/core/gnunet-service-core_sessions.c:331 | 1432 | #: src/core/gnunet-service-core_sessions.c:338 |
1432 | #: src/dht/gnunet-service-dht_neighbours.c:661 | 1433 | #: src/dht/gnunet-service-dht_neighbours.c:661 |
1433 | #: src/dht/gnunet-service-dht_neighbours.c:726 | 1434 | #: src/dht/gnunet-service-dht_neighbours.c:726 |
1434 | #: src/fs/gnunet-service-fs_cp.c:645 src/fs/gnunet-service-fs_cp.c:1627 | 1435 | #: src/fs/gnunet-service-fs_cp.c:654 src/fs/gnunet-service-fs_cp.c:1647 |
1435 | #: src/topology/gnunet-daemon-topology.c:734 | 1436 | #: src/topology/gnunet-daemon-topology.c:734 |
1436 | #: src/topology/gnunet-daemon-topology.c:835 | 1437 | #: src/topology/gnunet-daemon-topology.c:835 |
1437 | #: src/transport/gnunet-service-transport_neighbours.c:755 | 1438 | #: src/transport/gnunet-service-transport_neighbours.c:755 |
@@ -1439,22 +1440,22 @@ msgstr "Ungültige `%s' Nachricht von Knoten `%s' empfangen.\n" | |||
1439 | msgid "# peers connected" | 1440 | msgid "# peers connected" |
1440 | msgstr "# verbundener Knoten" | 1441 | msgstr "# verbundener Knoten" |
1441 | 1442 | ||
1442 | #: src/core/gnunet-service-core_sessions.c:278 | 1443 | #: src/core/gnunet-service-core_sessions.c:285 |
1443 | #, fuzzy | 1444 | #, fuzzy |
1444 | msgid "# type map refreshes sent" | 1445 | msgid "# type map refreshes sent" |
1445 | msgstr "# p2p Trace-Antworten gesendet" | 1446 | msgstr "# p2p Trace-Antworten gesendet" |
1446 | 1447 | ||
1447 | #: src/core/gnunet-service-core_sessions.c:397 | 1448 | #: src/core/gnunet-service-core_sessions.c:404 |
1448 | #, fuzzy | 1449 | #, fuzzy |
1449 | msgid "# outdated typemap confirmations received" | 1450 | msgid "# outdated typemap confirmations received" |
1450 | msgstr "# Bytes empfangen über TCP" | 1451 | msgstr "# Bytes empfangen über TCP" |
1451 | 1452 | ||
1452 | #: src/core/gnunet-service-core_sessions.c:408 | 1453 | #: src/core/gnunet-service-core_sessions.c:415 |
1453 | #, fuzzy | 1454 | #, fuzzy |
1454 | msgid "# valid typemap confirmations received" | 1455 | msgid "# valid typemap confirmations received" |
1455 | msgstr "# Bytes empfangen über TCP" | 1456 | msgstr "# Bytes empfangen über TCP" |
1456 | 1457 | ||
1457 | #: src/core/gnunet-service-core_sessions.c:546 | 1458 | #: src/core/gnunet-service-core_sessions.c:554 |
1458 | msgid "# messages discarded (expired prior to transmission)" | 1459 | msgid "# messages discarded (expired prior to transmission)" |
1459 | msgstr "" | 1460 | msgstr "" |
1460 | 1461 | ||
@@ -1469,7 +1470,7 @@ msgid "# updates to my type map" | |||
1469 | msgstr "" | 1470 | msgstr "" |
1470 | 1471 | ||
1471 | #: src/datacache/datacache.c:115 src/datacache/datacache.c:266 | 1472 | #: src/datacache/datacache.c:115 src/datacache/datacache.c:266 |
1472 | #: src/datastore/gnunet-service-datastore.c:855 | 1473 | #: src/datastore/gnunet-service-datastore.c:841 |
1473 | msgid "# bytes stored" | 1474 | msgid "# bytes stored" |
1474 | msgstr "# gespeicherte Bytes" | 1475 | msgstr "# gespeicherte Bytes" |
1475 | 1476 | ||
@@ -1478,8 +1479,8 @@ msgid "# items stored" | |||
1478 | msgstr "# gespeicherte Objekte" | 1479 | msgstr "# gespeicherte Objekte" |
1479 | 1480 | ||
1480 | #: src/datacache/datacache.c:143 src/datacache/datacache.c:150 | 1481 | #: src/datacache/datacache.c:143 src/datacache/datacache.c:150 |
1481 | #: src/datastore/gnunet-service-datastore.c:1557 | 1482 | #: src/datastore/gnunet-service-datastore.c:1598 |
1482 | #: src/datastore/gnunet-service-datastore.c:1568 | 1483 | #: src/datastore/gnunet-service-datastore.c:1609 |
1483 | #, fuzzy, c-format | 1484 | #, fuzzy, c-format |
1484 | msgid "No `%s' specified for `%s' in configuration!\n" | 1485 | msgid "No `%s' specified for `%s' in configuration!\n" |
1485 | msgstr "In der Konfigurationsdatei wurden keine Anwendungen definiert!\n" | 1486 | msgstr "In der Konfigurationsdatei wurden keine Anwendungen definiert!\n" |
@@ -1512,8 +1513,8 @@ msgstr "" | |||
1512 | 1513 | ||
1513 | #: src/datacache/plugin_datacache_sqlite.c:69 | 1514 | #: src/datacache/plugin_datacache_sqlite.c:69 |
1514 | #: src/datacache/plugin_datacache_sqlite.c:72 | 1515 | #: src/datacache/plugin_datacache_sqlite.c:72 |
1515 | #: src/datastore/plugin_datastore_mysql.c:809 | 1516 | #: src/datastore/plugin_datastore_mysql.c:818 |
1516 | #: src/datastore/plugin_datastore_mysql.c:823 | 1517 | #: src/datastore/plugin_datastore_mysql.c:834 |
1517 | #: src/datastore/plugin_datastore_sqlite.c:57 src/mysql/mysql.c:41 | 1518 | #: src/datastore/plugin_datastore_sqlite.c:57 src/mysql/mysql.c:41 |
1518 | #: src/mysql/mysql.c:48 src/mysql/mysql.c:522 src/mysql/mysql.c:531 | 1519 | #: src/mysql/mysql.c:48 src/mysql/mysql.c:522 src/mysql/mysql.c:531 |
1519 | #: src/mysql/mysql.c:591 src/mysql/mysql.c:607 | 1520 | #: src/mysql/mysql.c:591 src/mysql/mysql.c:607 |
@@ -1716,8 +1717,8 @@ msgstr "" | |||
1716 | 1717 | ||
1717 | #: src/datastore/gnunet-service-datastore.c:712 | 1718 | #: src/datastore/gnunet-service-datastore.c:712 |
1718 | #: src/datastore/gnunet-service-datastore.c:767 | 1719 | #: src/datastore/gnunet-service-datastore.c:767 |
1719 | #: src/datastore/gnunet-service-datastore.c:982 | 1720 | #: src/datastore/gnunet-service-datastore.c:999 |
1720 | #: src/datastore/gnunet-service-datastore.c:1529 | 1721 | #: src/datastore/gnunet-service-datastore.c:1570 |
1721 | msgid "# reserved" | 1722 | msgid "# reserved" |
1722 | msgstr "" | 1723 | msgstr "" |
1723 | 1724 | ||
@@ -1725,133 +1726,148 @@ msgstr "" | |||
1725 | msgid "Could not find matching reservation" | 1726 | msgid "Could not find matching reservation" |
1726 | msgstr "" | 1727 | msgstr "" |
1727 | 1728 | ||
1728 | #: src/datastore/gnunet-service-datastore.c:867 | 1729 | #: src/datastore/gnunet-service-datastore.c:853 |
1729 | #, c-format | 1730 | #, c-format |
1730 | msgid "Need %llu bytes more space (%llu allowed, using %llu)\n" | 1731 | msgid "Need %llu bytes more space (%llu allowed, using %llu)\n" |
1731 | msgstr "" | 1732 | msgstr "" |
1732 | 1733 | ||
1733 | #: src/datastore/gnunet-service-datastore.c:1029 | 1734 | #: src/datastore/gnunet-service-datastore.c:1046 |
1734 | #, fuzzy | 1735 | #, fuzzy |
1735 | msgid "# GET requests received" | 1736 | msgid "# GET requests received" |
1736 | msgstr "# Client Trace-Anfragen empfangen" | 1737 | msgstr "# Client Trace-Anfragen empfangen" |
1737 | 1738 | ||
1738 | #: src/datastore/gnunet-service-datastore.c:1041 | 1739 | #: src/datastore/gnunet-service-datastore.c:1058 |
1739 | msgid "# requests filtered by bloomfilter" | 1740 | msgid "# requests filtered by bloomfilter" |
1740 | msgstr "" | 1741 | msgstr "" |
1741 | 1742 | ||
1742 | #: src/datastore/gnunet-service-datastore.c:1069 | 1743 | #: src/datastore/gnunet-service-datastore.c:1094 |
1743 | #, fuzzy | 1744 | #, fuzzy |
1744 | msgid "# UPDATE requests received" | 1745 | msgid "# UPDATE requests received" |
1745 | msgstr "# Client Trace-Anfragen empfangen" | 1746 | msgstr "# Client Trace-Anfragen empfangen" |
1746 | 1747 | ||
1747 | #: src/datastore/gnunet-service-datastore.c:1099 | 1748 | #: src/datastore/gnunet-service-datastore.c:1122 |
1748 | #, fuzzy | 1749 | #, fuzzy |
1749 | msgid "# GET REPLICATION requests received" | 1750 | msgid "# GET REPLICATION requests received" |
1750 | msgstr "# Client Trace-Anfragen empfangen" | 1751 | msgstr "# Client Trace-Anfragen empfangen" |
1751 | 1752 | ||
1752 | #: src/datastore/gnunet-service-datastore.c:1132 | 1753 | #: src/datastore/gnunet-service-datastore.c:1155 |
1753 | #, fuzzy | 1754 | #, fuzzy |
1754 | msgid "# GET ZERO ANONYMITY requests received" | 1755 | msgid "# GET ZERO ANONYMITY requests received" |
1755 | msgstr "# Client Trace-Anfragen empfangen" | 1756 | msgstr "# Client Trace-Anfragen empfangen" |
1756 | 1757 | ||
1757 | #: src/datastore/gnunet-service-datastore.c:1157 | 1758 | #: src/datastore/gnunet-service-datastore.c:1180 |
1758 | msgid "Content not found" | 1759 | msgid "Content not found" |
1759 | msgstr "Kein Inhalt gefunden" | 1760 | msgstr "Kein Inhalt gefunden" |
1760 | 1761 | ||
1761 | #: src/datastore/gnunet-service-datastore.c:1165 | 1762 | #: src/datastore/gnunet-service-datastore.c:1188 |
1762 | msgid "# bytes removed (explicit request)" | 1763 | msgid "# bytes removed (explicit request)" |
1763 | msgstr "" | 1764 | msgstr "" |
1764 | 1765 | ||
1765 | #: src/datastore/gnunet-service-datastore.c:1197 | 1766 | #: src/datastore/gnunet-service-datastore.c:1220 |
1766 | #, fuzzy | 1767 | #, fuzzy |
1767 | msgid "# REMOVE requests received" | 1768 | msgid "# REMOVE requests received" |
1768 | msgstr "# Client Trace-Anfragen empfangen" | 1769 | msgstr "# Client Trace-Anfragen empfangen" |
1769 | 1770 | ||
1770 | #: src/datastore/gnunet-service-datastore.c:1241 | 1771 | #: src/datastore/gnunet-service-datastore.c:1264 |
1771 | #, c-format | 1772 | #, c-format |
1772 | msgid "" | 1773 | msgid "" |
1773 | "Datastore payload must have been inaccurate (%lld < %lld). Recomputing it.\n" | 1774 | "Datastore payload must have been inaccurate (%lld < %lld). Recomputing it.\n" |
1774 | msgstr "" | 1775 | msgstr "" |
1775 | 1776 | ||
1776 | #: src/datastore/gnunet-service-datastore.c:1246 | 1777 | #: src/datastore/gnunet-service-datastore.c:1269 |
1777 | #, c-format | 1778 | #, c-format |
1778 | msgid "New payload: %lld\n" | 1779 | msgid "New payload: %lld\n" |
1779 | msgstr "" | 1780 | msgstr "" |
1780 | 1781 | ||
1781 | #: src/datastore/gnunet-service-datastore.c:1299 | 1782 | #: src/datastore/gnunet-service-datastore.c:1322 |
1782 | #, c-format | 1783 | #, c-format |
1783 | msgid "Loading `%s' datastore plugin\n" | 1784 | msgid "Loading `%s' datastore plugin\n" |
1784 | msgstr "" | 1785 | msgstr "" |
1785 | 1786 | ||
1786 | #: src/datastore/gnunet-service-datastore.c:1310 | 1787 | #: src/datastore/gnunet-service-datastore.c:1333 |
1787 | #, fuzzy, c-format | 1788 | #, fuzzy, c-format |
1788 | msgid "Failed to load datastore plugin for `%s'\n" | 1789 | msgid "Failed to load datastore plugin for `%s'\n" |
1789 | msgstr "Anwendung `%s' konnte nicht initialisiert werden.\n" | 1790 | msgstr "Anwendung `%s' konnte nicht initialisiert werden.\n" |
1790 | 1791 | ||
1791 | #: src/datastore/gnunet-service-datastore.c:1412 | 1792 | #: src/datastore/gnunet-service-datastore.c:1402 |
1792 | msgid "Rebuilding bloomfilter. Please be patient.\n" | 1793 | #: src/datastore/gnunet-service-datastore.c:1463 |
1794 | msgid "Bloomfilter construction complete.\n" | ||
1793 | msgstr "" | 1795 | msgstr "" |
1794 | 1796 | ||
1795 | #: src/datastore/gnunet-service-datastore.c:1419 | 1797 | #: src/datastore/gnunet-service-datastore.c:1450 |
1796 | msgid "Plugin does not support get_keys function. Please fix!\n" | 1798 | msgid "Rebuilding bloomfilter. Please be patient.\n" |
1797 | msgstr "" | 1799 | msgstr "" |
1798 | 1800 | ||
1799 | #: src/datastore/gnunet-service-datastore.c:1422 | 1801 | #: src/datastore/gnunet-service-datastore.c:1460 |
1800 | msgid "Bloomfilter construction complete.\n" | 1802 | msgid "Plugin does not support get_keys function. Please fix!\n" |
1801 | msgstr "" | 1803 | msgstr "" |
1802 | 1804 | ||
1803 | #: src/datastore/gnunet-service-datastore.c:1562 | 1805 | #: src/datastore/gnunet-service-datastore.c:1603 |
1804 | #, fuzzy, c-format | 1806 | #, fuzzy, c-format |
1805 | msgid "# bytes used in file-sharing datastore `%s'" | 1807 | msgid "# bytes used in file-sharing datastore `%s'" |
1806 | msgstr "# bytes erlaubt in der Datenbank" | 1808 | msgstr "# bytes erlaubt in der Datenbank" |
1807 | 1809 | ||
1808 | #: src/datastore/gnunet-service-datastore.c:1573 | 1810 | #: src/datastore/gnunet-service-datastore.c:1614 |
1809 | msgid "# quota" | 1811 | msgid "# quota" |
1810 | msgstr "# Kontingent" | 1812 | msgstr "# Kontingent" |
1811 | 1813 | ||
1812 | #: src/datastore/gnunet-service-datastore.c:1575 | 1814 | #: src/datastore/gnunet-service-datastore.c:1616 |
1813 | msgid "# cache size" | 1815 | msgid "# cache size" |
1814 | msgstr "# Zwischenspeichergröße" | 1816 | msgstr "# Zwischenspeichergröße" |
1815 | 1817 | ||
1816 | #: src/datastore/gnunet-service-datastore.c:1588 | 1818 | #: src/datastore/gnunet-service-datastore.c:1629 |
1817 | #, c-format | 1819 | #, c-format |
1818 | msgid "Could not use specified filename `%s' for bloomfilter.\n" | 1820 | msgid "Could not use specified filename `%s' for bloomfilter.\n" |
1819 | msgstr "" | 1821 | msgstr "" |
1820 | 1822 | ||
1821 | #: src/datastore/gnunet-service-datastore.c:1606 | 1823 | #: src/datastore/gnunet-service-datastore.c:1647 |
1822 | #: src/datastore/gnunet-service-datastore.c:1622 | 1824 | #: src/datastore/gnunet-service-datastore.c:1663 |
1823 | #, fuzzy, c-format | 1825 | #, fuzzy, c-format |
1824 | msgid "Failed to remove bogus bloomfilter file `%s'\n" | 1826 | msgid "Failed to remove bogus bloomfilter file `%s'\n" |
1825 | msgstr "Datei wurde als `%s' gespeichert.\n" | 1827 | msgstr "Datei wurde als `%s' gespeichert.\n" |
1826 | 1828 | ||
1827 | #: src/datastore/gnunet-service-datastore.c:1652 | 1829 | #: src/datastore/gnunet-service-datastore.c:1693 |
1828 | msgid "Failed to initialize bloomfilter.\n" | 1830 | msgid "Failed to initialize bloomfilter.\n" |
1829 | msgstr "Bloomfilter konnte nicht initialisiert werden.\n" | 1831 | msgstr "Bloomfilter konnte nicht initialisiert werden.\n" |
1830 | 1832 | ||
1831 | #: src/datastore/plugin_datastore_heap.c:821 | 1833 | #: src/datastore/plugin_datastore_heap.c:826 |
1832 | msgid "Heap database running\n" | 1834 | msgid "Heap database running\n" |
1833 | msgstr "Heap-Datenbank läuft\n" | 1835 | msgstr "Heap-Datenbank läuft\n" |
1834 | 1836 | ||
1835 | #: src/datastore/plugin_datastore_mysql.c:786 | 1837 | #: src/datastore/plugin_datastore_mysql.c:309 |
1838 | #: src/datastore/plugin_datastore_sqlite.c:499 | ||
1839 | #, fuzzy | ||
1840 | msgid "Data too large" | ||
1841 | msgstr "Anzahl der Werte" | ||
1842 | |||
1843 | #: src/datastore/plugin_datastore_mysql.c:328 | ||
1844 | msgid "MySQL statement run failure" | ||
1845 | msgstr "" | ||
1846 | |||
1847 | #: src/datastore/plugin_datastore_mysql.c:793 | ||
1836 | #, fuzzy, c-format | 1848 | #, fuzzy, c-format |
1837 | msgid "Failed to prepare statement `%s'\n" | 1849 | msgid "Failed to prepare statement `%s'\n" |
1838 | msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n" | 1850 | msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n" |
1839 | 1851 | ||
1840 | #: src/datastore/plugin_datastore_mysql.c:794 | 1852 | #: src/datastore/plugin_datastore_mysql.c:802 |
1841 | #, fuzzy, c-format | 1853 | #, fuzzy, c-format |
1842 | msgid "`%s' for `%s' failed at %s:%d with error: %s\n" | 1854 | msgid "`%s' for `%s' failed at %s:%d with error: %s\n" |
1843 | msgstr "`%s' an `%s' schlug fehl bei %s:%d mit dem Fehler: %s\n" | 1855 | msgstr "`%s' an `%s' schlug fehl bei %s:%d mit dem Fehler: %s\n" |
1844 | 1856 | ||
1845 | #: src/datastore/plugin_datastore_mysql.c:1025 | 1857 | #: src/datastore/plugin_datastore_mysql.c:1036 |
1846 | msgid "Mysql database running\n" | 1858 | msgid "Mysql database running\n" |
1847 | msgstr "MySQL-Datenbank läuft\n" | 1859 | msgstr "MySQL-Datenbank läuft\n" |
1848 | 1860 | ||
1849 | #: src/datastore/plugin_datastore_postgres.c:837 | 1861 | #: src/datastore/plugin_datastore_postgres.c:331 |
1862 | msgid "Postgress exec failure" | ||
1863 | msgstr "" | ||
1864 | |||
1865 | #: src/datastore/plugin_datastore_postgres.c:846 | ||
1850 | #, fuzzy | 1866 | #, fuzzy |
1851 | msgid "Failed to drop table from database.\n" | 1867 | msgid "Failed to drop table from database.\n" |
1852 | msgstr "Fehler beim Binden an UDP Port %d.\n" | 1868 | msgstr "Fehler beim Binden an UDP Port %d.\n" |
1853 | 1869 | ||
1854 | #: src/datastore/plugin_datastore_postgres.c:873 | 1870 | #: src/datastore/plugin_datastore_postgres.c:882 |
1855 | #: src/namecache/plugin_namecache_postgres.c:414 | 1871 | #: src/namecache/plugin_namecache_postgres.c:414 |
1856 | #: src/namestore/plugin_namestore_postgres.c:569 | 1872 | #: src/namestore/plugin_namestore_postgres.c:569 |
1857 | msgid "Postgres database running\n" | 1873 | msgid "Postgres database running\n" |
@@ -1874,29 +1890,29 @@ msgstr "`%s' schlug bei %s:%d mit dem Fehler %s fehl\n" | |||
1874 | msgid "Unable to initialize SQLite: %s.\n" | 1890 | msgid "Unable to initialize SQLite: %s.\n" |
1875 | msgstr "SQLite-Datenbank konnte nicht initialisiert werden: %s.\n" | 1891 | msgstr "SQLite-Datenbank konnte nicht initialisiert werden: %s.\n" |
1876 | 1892 | ||
1877 | #: src/datastore/plugin_datastore_sqlite.c:661 | 1893 | #: src/datastore/plugin_datastore_sqlite.c:680 |
1878 | #, fuzzy | 1894 | #, fuzzy |
1879 | msgid "Invalid data in database. Trying to fix (by deletion).\n" | 1895 | msgid "Invalid data in database. Trying to fix (by deletion).\n" |
1880 | msgstr "Ungültige Daten in %s. Korrektur wird versucht (durch Löschung).\n" | 1896 | msgstr "Ungültige Daten in %s. Korrektur wird versucht (durch Löschung).\n" |
1881 | 1897 | ||
1882 | #: src/datastore/plugin_datastore_sqlite.c:1156 | 1898 | #: src/datastore/plugin_datastore_sqlite.c:1177 |
1883 | msgid "sqlite version to old to determine size, assuming zero\n" | 1899 | msgid "sqlite version to old to determine size, assuming zero\n" |
1884 | msgstr "" | 1900 | msgstr "" |
1885 | 1901 | ||
1886 | #: src/datastore/plugin_datastore_sqlite.c:1176 | 1902 | #: src/datastore/plugin_datastore_sqlite.c:1197 |
1887 | #, c-format | 1903 | #, c-format |
1888 | msgid "" | 1904 | msgid "" |
1889 | "Using sqlite page utilization to estimate payload (%llu pages of size %llu " | 1905 | "Using sqlite page utilization to estimate payload (%llu pages of size %llu " |
1890 | "bytes)\n" | 1906 | "bytes)\n" |
1891 | msgstr "" | 1907 | msgstr "" |
1892 | 1908 | ||
1893 | #: src/datastore/plugin_datastore_sqlite.c:1216 | 1909 | #: src/datastore/plugin_datastore_sqlite.c:1237 |
1894 | #: src/namecache/plugin_namecache_sqlite.c:580 | 1910 | #: src/namecache/plugin_namecache_sqlite.c:580 |
1895 | #: src/namestore/plugin_namestore_sqlite.c:716 | 1911 | #: src/namestore/plugin_namestore_sqlite.c:716 |
1896 | msgid "Sqlite database running\n" | 1912 | msgid "Sqlite database running\n" |
1897 | msgstr "Sqlite-Datenbank läuft\n" | 1913 | msgstr "Sqlite-Datenbank läuft\n" |
1898 | 1914 | ||
1899 | #: src/datastore/plugin_datastore_template.c:259 | 1915 | #: src/datastore/plugin_datastore_template.c:260 |
1900 | msgid "Template database running\n" | 1916 | msgid "Template database running\n" |
1901 | msgstr "" | 1917 | msgstr "" |
1902 | 1918 | ||
@@ -2514,50 +2530,50 @@ msgstr "" | |||
2514 | msgid "Change DNS replies to point elsewhere." | 2530 | msgid "Change DNS replies to point elsewhere." |
2515 | msgstr "" | 2531 | msgstr "" |
2516 | 2532 | ||
2517 | #: src/dns/gnunet-service-dns.c:456 | 2533 | #: src/dns/gnunet-service-dns.c:459 |
2518 | msgid "# DNS requests answered via TUN interface" | 2534 | msgid "# DNS requests answered via TUN interface" |
2519 | msgstr "" | 2535 | msgstr "" |
2520 | 2536 | ||
2521 | #: src/dns/gnunet-service-dns.c:603 | 2537 | #: src/dns/gnunet-service-dns.c:606 |
2522 | msgid "# DNS exit failed (failed to open socket)" | 2538 | msgid "# DNS exit failed (failed to open socket)" |
2523 | msgstr "" | 2539 | msgstr "" |
2524 | 2540 | ||
2525 | #: src/dns/gnunet-service-dns.c:714 | 2541 | #: src/dns/gnunet-service-dns.c:717 |
2526 | msgid "# External DNS response discarded (no matching request)" | 2542 | msgid "# External DNS response discarded (no matching request)" |
2527 | msgstr "" | 2543 | msgstr "" |
2528 | 2544 | ||
2529 | #: src/dns/gnunet-service-dns.c:792 | 2545 | #: src/dns/gnunet-service-dns.c:795 |
2530 | msgid "# Client response discarded (no matching request)" | 2546 | msgid "# Client response discarded (no matching request)" |
2531 | msgstr "" | 2547 | msgstr "" |
2532 | 2548 | ||
2533 | #: src/dns/gnunet-service-dns.c:907 | 2549 | #: src/dns/gnunet-service-dns.c:910 |
2534 | msgid "Received malformed IPv4-UDP packet on TUN interface.\n" | 2550 | msgid "Received malformed IPv4-UDP packet on TUN interface.\n" |
2535 | msgstr "" | 2551 | msgstr "" |
2536 | 2552 | ||
2537 | #: src/dns/gnunet-service-dns.c:923 | 2553 | #: src/dns/gnunet-service-dns.c:926 |
2538 | msgid "Received malformed IPv6-UDP packet on TUN interface.\n" | 2554 | msgid "Received malformed IPv6-UDP packet on TUN interface.\n" |
2539 | msgstr "" | 2555 | msgstr "" |
2540 | 2556 | ||
2541 | #: src/dns/gnunet-service-dns.c:932 | 2557 | #: src/dns/gnunet-service-dns.c:935 |
2542 | #, c-format | 2558 | #, c-format |
2543 | msgid "Got non-IP packet with %u bytes and protocol %u from TUN\n" | 2559 | msgid "Got non-IP packet with %u bytes and protocol %u from TUN\n" |
2544 | msgstr "" | 2560 | msgstr "" |
2545 | 2561 | ||
2546 | #: src/dns/gnunet-service-dns.c:942 | 2562 | #: src/dns/gnunet-service-dns.c:945 |
2547 | msgid "# Non-DNS UDP packet received via TUN interface" | 2563 | msgid "# Non-DNS UDP packet received via TUN interface" |
2548 | msgstr "" | 2564 | msgstr "" |
2549 | 2565 | ||
2550 | #: src/dns/gnunet-service-dns.c:1009 | 2566 | #: src/dns/gnunet-service-dns.c:1012 |
2551 | msgid "# DNS requests received via TUN interface" | 2567 | msgid "# DNS requests received via TUN interface" |
2552 | msgstr "" | 2568 | msgstr "" |
2553 | 2569 | ||
2554 | #: src/dns/gnunet-service-dns.c:1049 | 2570 | #: src/dns/gnunet-service-dns.c:1064 src/exit/gnunet-daemon-exit.c:3594 |
2555 | #, c-format | 2571 | msgid "need a valid IPv4 or IPv6 address\n" |
2556 | msgid "`%s' must be installed SUID, refusing to run\n" | ||
2557 | msgstr "" | 2572 | msgstr "" |
2558 | 2573 | ||
2559 | #: src/dns/gnunet-service-dns.c:1069 src/exit/gnunet-daemon-exit.c:3594 | 2574 | #: src/dns/gnunet-service-dns.c:1082 |
2560 | msgid "need a valid IPv4 or IPv6 address\n" | 2575 | #, c-format |
2576 | msgid "`%s' must be installed SUID, will not run DNS interceptor\n" | ||
2561 | msgstr "" | 2577 | msgstr "" |
2562 | 2578 | ||
2563 | #: src/dv/gnunet-dv.c:169 | 2579 | #: src/dv/gnunet-dv.c:169 |
@@ -2796,58 +2812,58 @@ msgstr "Muss eine Zahl sein" | |||
2796 | msgid "Daemon to run to provide an IP exit node for the VPN" | 2812 | msgid "Daemon to run to provide an IP exit node for the VPN" |
2797 | msgstr "" | 2813 | msgstr "" |
2798 | 2814 | ||
2799 | #: src/fragmentation/defragmentation.c:271 | 2815 | #: src/fragmentation/defragmentation.c:277 |
2800 | msgid "# acknowledgements sent for fragment" | 2816 | msgid "# acknowledgements sent for fragment" |
2801 | msgstr "" | 2817 | msgstr "" |
2802 | 2818 | ||
2803 | #: src/fragmentation/defragmentation.c:463 | 2819 | #: src/fragmentation/defragmentation.c:470 |
2804 | #: src/transport/plugin_transport_wlan.c:1515 | 2820 | #: src/transport/plugin_transport_wlan.c:1515 |
2805 | #, fuzzy | 2821 | #, fuzzy |
2806 | msgid "# fragments received" | 2822 | msgid "# fragments received" |
2807 | msgstr "# verworfener Nachrichten" | 2823 | msgstr "# verworfener Nachrichten" |
2808 | 2824 | ||
2809 | #: src/fragmentation/defragmentation.c:533 | 2825 | #: src/fragmentation/defragmentation.c:540 |
2810 | #, fuzzy | 2826 | #, fuzzy |
2811 | msgid "# duplicate fragments received" | 2827 | msgid "# duplicate fragments received" |
2812 | msgstr "# Bytes empfangen über TCP" | 2828 | msgstr "# Bytes empfangen über TCP" |
2813 | 2829 | ||
2814 | #: src/fragmentation/defragmentation.c:549 | 2830 | #: src/fragmentation/defragmentation.c:558 |
2815 | msgid "# messages defragmented" | 2831 | msgid "# messages defragmented" |
2816 | msgstr "# defragmentierter Nachrichten" | 2832 | msgstr "# defragmentierter Nachrichten" |
2817 | 2833 | ||
2818 | #: src/fragmentation/fragmentation.c:234 | 2834 | #: src/fragmentation/fragmentation.c:235 |
2819 | #, fuzzy | 2835 | #, fuzzy |
2820 | msgid "# fragments transmitted" | 2836 | msgid "# fragments transmitted" |
2821 | msgstr "# Selbstbekanntmachungen übertragen" | 2837 | msgstr "# Selbstbekanntmachungen übertragen" |
2822 | 2838 | ||
2823 | #: src/fragmentation/fragmentation.c:237 | 2839 | #: src/fragmentation/fragmentation.c:240 |
2824 | #, fuzzy | 2840 | #, fuzzy |
2825 | msgid "# fragments retransmitted" | 2841 | msgid "# fragments retransmitted" |
2826 | msgstr "# Selbstbekanntmachungen übertragen" | 2842 | msgstr "# Selbstbekanntmachungen übertragen" |
2827 | 2843 | ||
2828 | #: src/fragmentation/fragmentation.c:263 | 2844 | #: src/fragmentation/fragmentation.c:269 |
2829 | #, fuzzy | 2845 | #, fuzzy |
2830 | msgid "# fragments wrap arounds" | 2846 | msgid "# fragments wrap arounds" |
2831 | msgstr "# verworfener Nachrichten" | 2847 | msgstr "# verworfener Nachrichten" |
2832 | 2848 | ||
2833 | #: src/fragmentation/fragmentation.c:307 | 2849 | #: src/fragmentation/fragmentation.c:315 |
2834 | msgid "# messages fragmented" | 2850 | msgid "# messages fragmented" |
2835 | msgstr "# fragmentierter Nachrichten" | 2851 | msgstr "# fragmentierter Nachrichten" |
2836 | 2852 | ||
2837 | #: src/fragmentation/fragmentation.c:310 | 2853 | #: src/fragmentation/fragmentation.c:321 |
2838 | msgid "# total size of fragmented messages" | 2854 | msgid "# total size of fragmented messages" |
2839 | msgstr "" | 2855 | msgstr "" |
2840 | 2856 | ||
2841 | #: src/fragmentation/fragmentation.c:431 | 2857 | #: src/fragmentation/fragmentation.c:444 |
2842 | #, fuzzy | 2858 | #, fuzzy |
2843 | msgid "# fragment acknowledgements received" | 2859 | msgid "# fragment acknowledgements received" |
2844 | msgstr "# Knotenankündigungen empfangen" | 2860 | msgstr "# Knotenankündigungen empfangen" |
2845 | 2861 | ||
2846 | #: src/fragmentation/fragmentation.c:437 | 2862 | #: src/fragmentation/fragmentation.c:451 |
2847 | msgid "# bits removed from fragmentation ACKs" | 2863 | msgid "# bits removed from fragmentation ACKs" |
2848 | msgstr "" | 2864 | msgstr "" |
2849 | 2865 | ||
2850 | #: src/fragmentation/fragmentation.c:461 | 2866 | #: src/fragmentation/fragmentation.c:475 |
2851 | #, fuzzy | 2867 | #, fuzzy |
2852 | msgid "# fragmentation transmissions completed" | 2868 | msgid "# fragmentation transmissions completed" |
2853 | msgstr "# Klartext PONG Nachrichten empfangen" | 2869 | msgstr "# Klartext PONG Nachrichten empfangen" |
@@ -3120,59 +3136,59 @@ msgstr "Datei wurde als `%s' gespeichert.\n" | |||
3120 | msgid "Got result with unknown block type `%d', ignoring" | 3136 | msgid "Got result with unknown block type `%d', ignoring" |
3121 | msgstr "" | 3137 | msgstr "" |
3122 | 3138 | ||
3123 | #: src/fs/fs_unindex.c:59 | 3139 | #: src/fs/fs_unindex.c:63 |
3124 | msgid "Failed to find given position in file" | 3140 | msgid "Failed to find given position in file" |
3125 | msgstr "" | 3141 | msgstr "" |
3126 | 3142 | ||
3127 | #: src/fs/fs_unindex.c:64 | 3143 | #: src/fs/fs_unindex.c:68 |
3128 | #, fuzzy | 3144 | #, fuzzy |
3129 | msgid "Failed to read file" | 3145 | msgid "Failed to read file" |
3130 | msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n" | 3146 | msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n" |
3131 | 3147 | ||
3132 | #: src/fs/fs_unindex.c:234 | 3148 | #: src/fs/fs_unindex.c:245 |
3133 | msgid "Unexpected time for a response from `fs' service." | 3149 | msgid "Unexpected time for a response from `fs' service." |
3134 | msgstr "" | 3150 | msgstr "" |
3135 | 3151 | ||
3136 | #: src/fs/fs_unindex.c:242 | 3152 | #: src/fs/fs_unindex.c:253 |
3137 | msgid "Timeout waiting for `fs' service." | 3153 | msgid "Timeout waiting for `fs' service." |
3138 | msgstr "" | 3154 | msgstr "" |
3139 | 3155 | ||
3140 | #: src/fs/fs_unindex.c:250 | 3156 | #: src/fs/fs_unindex.c:261 |
3141 | #, fuzzy | 3157 | #, fuzzy |
3142 | msgid "Invalid response from `fs' service." | 3158 | msgid "Invalid response from `fs' service." |
3143 | msgstr "Ungültige Antwort auf `%s'.\n" | 3159 | msgstr "Ungültige Antwort auf `%s'.\n" |
3144 | 3160 | ||
3145 | #: src/fs/fs_unindex.c:291 | 3161 | #: src/fs/fs_unindex.c:304 |
3146 | #, fuzzy | 3162 | #, fuzzy |
3147 | msgid "Failed to connect to FS service for unindexing." | 3163 | msgid "Failed to connect to FS service for unindexing." |
3148 | msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden." | 3164 | msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden." |
3149 | 3165 | ||
3150 | #: src/fs/fs_unindex.c:347 src/fs/fs_unindex.c:359 | 3166 | #: src/fs/fs_unindex.c:360 src/fs/fs_unindex.c:372 |
3151 | #, fuzzy | 3167 | #, fuzzy |
3152 | msgid "Failed to get KSKs from directory scan." | 3168 | msgid "Failed to get KSKs from directory scan." |
3153 | msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n" | 3169 | msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n" |
3154 | 3170 | ||
3155 | #: src/fs/fs_unindex.c:355 | 3171 | #: src/fs/fs_unindex.c:368 |
3156 | #, fuzzy, c-format | 3172 | #, fuzzy, c-format |
3157 | msgid "Internal error scanning `%s'.\n" | 3173 | msgid "Internal error scanning `%s'.\n" |
3158 | msgstr "Absicherung fehlgeschlagen bei %s:%d.\n" | 3174 | msgstr "Absicherung fehlgeschlagen bei %s:%d.\n" |
3159 | 3175 | ||
3160 | #: src/fs/fs_unindex.c:414 | 3176 | #: src/fs/fs_unindex.c:427 |
3161 | #, fuzzy, c-format | 3177 | #, fuzzy, c-format |
3162 | msgid "Failed to remove UBlock: %s\n" | 3178 | msgid "Failed to remove UBlock: %s\n" |
3163 | msgstr "Datei wurde als `%s' gespeichert.\n" | 3179 | msgstr "Datei wurde als `%s' gespeichert.\n" |
3164 | 3180 | ||
3165 | #: src/fs/fs_unindex.c:562 src/fs/fs_unindex.c:626 | 3181 | #: src/fs/fs_unindex.c:590 src/fs/fs_unindex.c:656 |
3166 | #, fuzzy | 3182 | #, fuzzy |
3167 | msgid "Failed to connect to `datastore' service." | 3183 | msgid "Failed to connect to `datastore' service." |
3168 | msgstr "`%s' Dienst konnte nicht initialisiert werden.\n" | 3184 | msgstr "`%s' Dienst konnte nicht initialisiert werden.\n" |
3169 | 3185 | ||
3170 | #: src/fs/fs_unindex.c:639 | 3186 | #: src/fs/fs_unindex.c:669 |
3171 | #, fuzzy | 3187 | #, fuzzy |
3172 | msgid "Failed to open file for unindexing." | 3188 | msgid "Failed to open file for unindexing." |
3173 | msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden." | 3189 | msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden." |
3174 | 3190 | ||
3175 | #: src/fs/fs_unindex.c:673 | 3191 | #: src/fs/fs_unindex.c:708 |
3176 | #, fuzzy | 3192 | #, fuzzy |
3177 | msgid "Failed to compute hash of file." | 3193 | msgid "Failed to compute hash of file." |
3178 | msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden." | 3194 | msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden." |
@@ -3767,96 +3783,96 @@ msgstr "# Sitzungsschlüssel abgelehnt" | |||
3767 | msgid "# cadet connections active" | 3783 | msgid "# cadet connections active" |
3768 | msgstr " Verbindung fehlgeschlagen\n" | 3784 | msgstr " Verbindung fehlgeschlagen\n" |
3769 | 3785 | ||
3770 | #: src/fs/gnunet-service-fs_cp.c:726 | 3786 | #: src/fs/gnunet-service-fs_cp.c:735 |
3771 | #, fuzzy | 3787 | #, fuzzy |
3772 | msgid "# migration stop messages received" | 3788 | msgid "# migration stop messages received" |
3773 | msgstr "# verschlüsselter PING Nachrichten empfangen" | 3789 | msgstr "# verschlüsselter PING Nachrichten empfangen" |
3774 | 3790 | ||
3775 | #: src/fs/gnunet-service-fs_cp.c:730 | 3791 | #: src/fs/gnunet-service-fs_cp.c:739 |
3776 | #, c-format | 3792 | #, c-format |
3777 | msgid "Migration of content to peer `%s' blocked for %s\n" | 3793 | msgid "Migration of content to peer `%s' blocked for %s\n" |
3778 | msgstr "" | 3794 | msgstr "" |
3779 | 3795 | ||
3780 | #: src/fs/gnunet-service-fs_cp.c:768 | 3796 | #: src/fs/gnunet-service-fs_cp.c:776 |
3781 | #, fuzzy | 3797 | #, fuzzy |
3782 | msgid "# replies transmitted to other peers" | 3798 | msgid "# replies transmitted to other peers" |
3783 | msgstr "# Bytes des Typs %d übertragen" | 3799 | msgstr "# Bytes des Typs %d übertragen" |
3784 | 3800 | ||
3785 | #: src/fs/gnunet-service-fs_cp.c:774 | 3801 | #: src/fs/gnunet-service-fs_cp.c:784 |
3786 | #, fuzzy | 3802 | #, fuzzy |
3787 | msgid "# replies dropped" | 3803 | msgid "# replies dropped" |
3788 | msgstr "# gap falsche Antworten" | 3804 | msgstr "# gap falsche Antworten" |
3789 | 3805 | ||
3790 | #: src/fs/gnunet-service-fs_cp.c:799 src/fs/gnunet-service-fs_cp.c:1384 | 3806 | #: src/fs/gnunet-service-fs_cp.c:810 src/fs/gnunet-service-fs_cp.c:1404 |
3791 | msgid "# P2P searches active" | 3807 | msgid "# P2P searches active" |
3792 | msgstr "" | 3808 | msgstr "" |
3793 | 3809 | ||
3794 | #: src/fs/gnunet-service-fs_cp.c:904 | 3810 | #: src/fs/gnunet-service-fs_cp.c:915 |
3795 | msgid "# artificial delays introduced (ms)" | 3811 | msgid "# artificial delays introduced (ms)" |
3796 | msgstr "" | 3812 | msgstr "" |
3797 | 3813 | ||
3798 | #: src/fs/gnunet-service-fs_cp.c:960 | 3814 | #: src/fs/gnunet-service-fs_cp.c:971 |
3799 | msgid "# replies dropped due to type mismatch" | 3815 | msgid "# replies dropped due to type mismatch" |
3800 | msgstr "" | 3816 | msgstr "" |
3801 | 3817 | ||
3802 | #: src/fs/gnunet-service-fs_cp.c:968 | 3818 | #: src/fs/gnunet-service-fs_cp.c:979 |
3803 | #, fuzzy | 3819 | #, fuzzy |
3804 | msgid "# replies received for other peers" | 3820 | msgid "# replies received for other peers" |
3805 | msgstr "# Bytes des Typs %d empfangen" | 3821 | msgstr "# Bytes des Typs %d empfangen" |
3806 | 3822 | ||
3807 | #: src/fs/gnunet-service-fs_cp.c:982 | 3823 | #: src/fs/gnunet-service-fs_cp.c:993 |
3808 | msgid "# replies dropped due to insufficient cover traffic" | 3824 | msgid "# replies dropped due to insufficient cover traffic" |
3809 | msgstr "" | 3825 | msgstr "" |
3810 | 3826 | ||
3811 | #: src/fs/gnunet-service-fs_cp.c:1030 | 3827 | #: src/fs/gnunet-service-fs_cp.c:1041 |
3812 | msgid "# P2P searches destroyed due to ultimate reply" | 3828 | msgid "# P2P searches destroyed due to ultimate reply" |
3813 | msgstr "" | 3829 | msgstr "" |
3814 | 3830 | ||
3815 | #: src/fs/gnunet-service-fs_cp.c:1098 | 3831 | #: src/fs/gnunet-service-fs_cp.c:1109 |
3816 | msgid "# requests done for free (low load)" | 3832 | msgid "# requests done for free (low load)" |
3817 | msgstr "" | 3833 | msgstr "" |
3818 | 3834 | ||
3819 | #: src/fs/gnunet-service-fs_cp.c:1123 | 3835 | #: src/fs/gnunet-service-fs_cp.c:1134 |
3820 | #, fuzzy | 3836 | #, fuzzy |
3821 | msgid "# request dropped, priority insufficient" | 3837 | msgid "# request dropped, priority insufficient" |
3822 | msgstr "# gap Anfragen verworfen: Kollision in RT" | 3838 | msgstr "# gap Anfragen verworfen: Kollision in RT" |
3823 | 3839 | ||
3824 | #: src/fs/gnunet-service-fs_cp.c:1133 | 3840 | #: src/fs/gnunet-service-fs_cp.c:1144 |
3825 | msgid "# requests done for a price (normal load)" | 3841 | msgid "# requests done for a price (normal load)" |
3826 | msgstr "" | 3842 | msgstr "" |
3827 | 3843 | ||
3828 | #: src/fs/gnunet-service-fs_cp.c:1210 | 3844 | #: src/fs/gnunet-service-fs_cp.c:1221 |
3829 | msgid "# GET requests received (from other peers)" | 3845 | msgid "# GET requests received (from other peers)" |
3830 | msgstr "" | 3846 | msgstr "" |
3831 | 3847 | ||
3832 | #: src/fs/gnunet-service-fs_cp.c:1245 | 3848 | #: src/fs/gnunet-service-fs_cp.c:1256 |
3833 | msgid "# requests dropped due to initiator not being connected" | 3849 | msgid "# requests dropped due to initiator not being connected" |
3834 | msgstr "" | 3850 | msgstr "" |
3835 | 3851 | ||
3836 | #: src/fs/gnunet-service-fs_cp.c:1266 | 3852 | #: src/fs/gnunet-service-fs_cp.c:1277 |
3837 | #, fuzzy | 3853 | #, fuzzy |
3838 | msgid "# requests dropped due to missing reverse route" | 3854 | msgid "# requests dropped due to missing reverse route" |
3839 | msgstr "# gap Anfragen verworfen: Kollision in RT" | 3855 | msgstr "# gap Anfragen verworfen: Kollision in RT" |
3840 | 3856 | ||
3841 | #: src/fs/gnunet-service-fs_cp.c:1277 | 3857 | #: src/fs/gnunet-service-fs_cp.c:1288 |
3842 | #, fuzzy | 3858 | #, fuzzy |
3843 | msgid "# requests dropped due to full reply queue" | 3859 | msgid "# requests dropped due to full reply queue" |
3844 | msgstr "# gap Anfragen verworfen: Kollision in RT" | 3860 | msgstr "# gap Anfragen verworfen: Kollision in RT" |
3845 | 3861 | ||
3846 | #: src/fs/gnunet-service-fs_cp.c:1329 | 3862 | #: src/fs/gnunet-service-fs_cp.c:1340 |
3847 | msgid "# requests dropped due TTL underflow" | 3863 | msgid "# requests dropped due TTL underflow" |
3848 | msgstr "" | 3864 | msgstr "" |
3849 | 3865 | ||
3850 | #: src/fs/gnunet-service-fs_cp.c:1353 | 3866 | #: src/fs/gnunet-service-fs_cp.c:1365 |
3851 | msgid "# requests dropped due to higher-TTL request" | 3867 | msgid "# requests dropped due to higher-TTL request" |
3852 | msgstr "" | 3868 | msgstr "" |
3853 | 3869 | ||
3854 | #: src/fs/gnunet-service-fs_cp.c:1382 | 3870 | #: src/fs/gnunet-service-fs_cp.c:1402 |
3855 | #, fuzzy | 3871 | #, fuzzy |
3856 | msgid "# P2P query messages received and processed" | 3872 | msgid "# P2P query messages received and processed" |
3857 | msgstr "# verschlüsselter PING Nachrichten empfangen" | 3873 | msgstr "# verschlüsselter PING Nachrichten empfangen" |
3858 | 3874 | ||
3859 | #: src/fs/gnunet-service-fs_cp.c:1821 | 3875 | #: src/fs/gnunet-service-fs_cp.c:1841 |
3860 | #, fuzzy | 3876 | #, fuzzy |
3861 | msgid "# migration stop messages sent" | 3877 | msgid "# migration stop messages sent" |
3862 | msgstr "# verschlüsselter PING Nachrichten empfangen" | 3878 | msgstr "# verschlüsselter PING Nachrichten empfangen" |
@@ -4200,7 +4216,7 @@ msgstr "" | |||
4200 | msgid "GNUnet DNS-to-GNS proxy (a DNS server)" | 4216 | msgid "GNUnet DNS-to-GNS proxy (a DNS server)" |
4201 | msgstr "" | 4217 | msgstr "" |
4202 | 4218 | ||
4203 | #: src/gns/gnunet-gns.c:215 | 4219 | #: src/gns/gnunet-gns.c:215 src/gns/plugin_rest_gns.c:334 |
4204 | #, c-format | 4220 | #, c-format |
4205 | msgid "Invalid typename specified, assuming `ANY'\n" | 4221 | msgid "Invalid typename specified, assuming `ANY'\n" |
4206 | msgstr "" | 4222 | msgstr "" |
@@ -4216,6 +4232,7 @@ msgid "Ego for `%s' not found, cannot perform lookup.\n" | |||
4216 | msgstr "" | 4232 | msgstr "" |
4217 | 4233 | ||
4218 | #: src/gns/gnunet-gns.c:353 src/gns/gnunet-gns-helper-service-w32.c:798 | 4234 | #: src/gns/gnunet-gns.c:353 src/gns/gnunet-gns-helper-service-w32.c:798 |
4235 | #: src/gns/plugin_rest_gns.c:459 | ||
4219 | #, c-format | 4236 | #, c-format |
4220 | msgid "" | 4237 | msgid "" |
4221 | "Ego for `gns-master' not found, cannot perform lookup. Did you run gnunet-" | 4238 | "Ego for `gns-master' not found, cannot perform lookup. Did you run gnunet-" |
@@ -4354,7 +4371,7 @@ msgstr "SQLite Datenbank konnte nicht initialisiert werden: %s.\n" | |||
4354 | msgid "Failed to start HTTPS server for `%s'\n" | 4371 | msgid "Failed to start HTTPS server for `%s'\n" |
4355 | msgstr "Der Transportdienst auf Port %d konnte nicht gestartet werden.\n" | 4372 | msgstr "Der Transportdienst auf Port %d konnte nicht gestartet werden.\n" |
4356 | 4373 | ||
4357 | #: src/gns/gnunet-gns-proxy.c:2225 | 4374 | #: src/gns/gnunet-gns-proxy.c:2225 src/rest/gnunet-rest-server.c:529 |
4358 | #, fuzzy | 4375 | #, fuzzy |
4359 | msgid "Failed to pass client to MHD\n" | 4376 | msgid "Failed to pass client to MHD\n" |
4360 | msgstr "Fehler beim Starten der Collection.\n" | 4377 | msgstr "Fehler beim Starten der Collection.\n" |
@@ -4459,21 +4476,21 @@ msgstr "" | |||
4459 | msgid "GNS lookup resulted in DNS name that is too long (`%s')\n" | 4476 | msgid "GNS lookup resulted in DNS name that is too long (`%s')\n" |
4460 | msgstr "" | 4477 | msgstr "" |
4461 | 4478 | ||
4462 | #: src/gns/gnunet-service-gns_resolver.c:1886 | 4479 | #: src/gns/gnunet-service-gns_resolver.c:1891 |
4463 | msgid "GNS lookup recursion failed (no delegation record found)\n" | 4480 | msgid "GNS lookup recursion failed (no delegation record found)\n" |
4464 | msgstr "" | 4481 | msgstr "" |
4465 | 4482 | ||
4466 | #: src/gns/gnunet-service-gns_resolver.c:1910 | 4483 | #: src/gns/gnunet-service-gns_resolver.c:1915 |
4467 | #, fuzzy, c-format | 4484 | #, fuzzy, c-format |
4468 | msgid "Failed to cache GNS resolution: %s\n" | 4485 | msgid "Failed to cache GNS resolution: %s\n" |
4469 | msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" | 4486 | msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" |
4470 | 4487 | ||
4471 | #: src/gns/gnunet-service-gns_resolver.c:2192 | 4488 | #: src/gns/gnunet-service-gns_resolver.c:2197 |
4472 | #, c-format | 4489 | #, c-format |
4473 | msgid "Zone %s was revoked, resolution fails\n" | 4490 | msgid "Zone %s was revoked, resolution fails\n" |
4474 | msgstr "" | 4491 | msgstr "" |
4475 | 4492 | ||
4476 | #: src/gns/gnunet-service-gns_resolver.c:2341 | 4493 | #: src/gns/gnunet-service-gns_resolver.c:2346 |
4477 | #, c-format | 4494 | #, c-format |
4478 | msgid "Hostname `%s' is not well-formed, resolution fails\n" | 4495 | msgid "Hostname `%s' is not well-formed, resolution fails\n" |
4479 | msgstr "" | 4496 | msgstr "" |
@@ -4503,6 +4520,15 @@ msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':" | |||
4503 | msgid "Unable to parse BOX record string `%s'\n" | 4520 | msgid "Unable to parse BOX record string `%s'\n" |
4504 | msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':" | 4521 | msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':" |
4505 | 4522 | ||
4523 | #: src/gns/plugin_rest_gns.c:422 | ||
4524 | msgid "Ego for not found, cannot perform lookup.\n" | ||
4525 | msgstr "" | ||
4526 | |||
4527 | #: src/gns/plugin_rest_gns.c:652 | ||
4528 | #, fuzzy | ||
4529 | msgid "GNS REST API initialized\n" | ||
4530 | msgstr " Verbindung fehlgeschlagen\n" | ||
4531 | |||
4506 | #: src/gnsrecord/plugin_gnsrecord_dns.c:291 | 4532 | #: src/gnsrecord/plugin_gnsrecord_dns.c:291 |
4507 | #, c-format | 4533 | #, c-format |
4508 | msgid "Unable to parse IPv4 address `%s'\n" | 4534 | msgid "Unable to parse IPv4 address `%s'\n" |
@@ -5026,6 +5052,10 @@ msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':" | |||
5026 | msgid "Failed to create directory `%s' for storing egos\n" | 5052 | msgid "Failed to create directory `%s' for storing egos\n" |
5027 | msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n" | 5053 | msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n" |
5028 | 5054 | ||
5055 | #: src/identity/plugin_rest_identity.c:803 | ||
5056 | msgid "Identity REST API initialized\n" | ||
5057 | msgstr "" | ||
5058 | |||
5029 | #: src/mysql/mysql.c:174 | 5059 | #: src/mysql/mysql.c:174 |
5030 | #, c-format | 5060 | #, c-format |
5031 | msgid "Trying to use file `%s' for MySQL configuration.\n" | 5061 | msgid "Trying to use file `%s' for MySQL configuration.\n" |
@@ -5051,10 +5081,10 @@ msgstr "" | |||
5051 | msgid "You must specify which zone should be accessed\n" | 5081 | msgid "You must specify which zone should be accessed\n" |
5052 | msgstr "Gibt an, welcher TRANSPORT getestet werden soll" | 5082 | msgstr "Gibt an, welcher TRANSPORT getestet werden soll" |
5053 | 5083 | ||
5054 | #: src/namecache/gnunet-namecache.c:195 src/namestore/gnunet-namestore.c:844 | 5084 | #: src/namecache/gnunet-namecache.c:195 |
5055 | #, c-format | 5085 | #, fuzzy, c-format |
5056 | msgid "Invalid public key for reverse lookup `%s'\n" | 5086 | msgid "Invalid public key for zone `%s'\n" |
5057 | msgstr "" | 5087 | msgstr "Ungültiger Parameter: `%s'\n" |
5058 | 5088 | ||
5059 | #: src/namecache/gnunet-namecache.c:203 | 5089 | #: src/namecache/gnunet-namecache.c:203 |
5060 | #, fuzzy, c-format | 5090 | #, fuzzy, c-format |
@@ -5091,11 +5121,13 @@ msgid "Adding record failed: %s\n" | |||
5091 | msgstr "" | 5121 | msgstr "" |
5092 | 5122 | ||
5093 | #: src/namestore/gnunet-namestore.c:332 | 5123 | #: src/namestore/gnunet-namestore.c:332 |
5124 | #: src/namestore/plugin_rest_namestore.c:505 | ||
5094 | #, c-format | 5125 | #, c-format |
5095 | msgid "Deleting record failed, record does not exist%s%s\n" | 5126 | msgid "Deleting record failed, record does not exist%s%s\n" |
5096 | msgstr "" | 5127 | msgstr "" |
5097 | 5128 | ||
5098 | #: src/namestore/gnunet-namestore.c:339 | 5129 | #: src/namestore/gnunet-namestore.c:339 |
5130 | #: src/namestore/plugin_rest_namestore.c:514 | ||
5099 | #, c-format | 5131 | #, c-format |
5100 | msgid "Deleting record failed%s%s\n" | 5132 | msgid "Deleting record failed%s%s\n" |
5101 | msgstr "" | 5133 | msgstr "" |
@@ -5113,6 +5145,7 @@ msgid "Records already exist under `%s', cannot add `%s' record.\n" | |||
5113 | msgstr "" | 5145 | msgstr "" |
5114 | 5146 | ||
5115 | #: src/namestore/gnunet-namestore.c:628 | 5147 | #: src/namestore/gnunet-namestore.c:628 |
5148 | #: src/namestore/plugin_rest_namestore.c:538 | ||
5116 | #, c-format | 5149 | #, c-format |
5117 | msgid "There are no records under label `%s' that could be deleted.\n" | 5150 | msgid "There are no records under label `%s' that could be deleted.\n" |
5118 | msgstr "" | 5151 | msgstr "" |
@@ -5130,6 +5163,7 @@ msgstr "" | |||
5130 | 5163 | ||
5131 | #: src/namestore/gnunet-namestore.c:719 | 5164 | #: src/namestore/gnunet-namestore.c:719 |
5132 | #: src/namestore/gnunet-namestore-fcfsd.c:984 | 5165 | #: src/namestore/gnunet-namestore-fcfsd.c:984 |
5166 | #: src/namestore/plugin_rest_namestore.c:821 | ||
5133 | #, fuzzy | 5167 | #, fuzzy |
5134 | msgid "Failed to connect to namestore\n" | 5168 | msgid "Failed to connect to namestore\n" |
5135 | msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" | 5169 | msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" |
@@ -5147,11 +5181,14 @@ msgid "add" | |||
5147 | msgstr "" | 5181 | msgstr "" |
5148 | 5182 | ||
5149 | #: src/namestore/gnunet-namestore.c:745 | 5183 | #: src/namestore/gnunet-namestore.c:745 |
5184 | #: src/namestore/plugin_rest_namestore.c:608 | ||
5150 | #, fuzzy, c-format | 5185 | #, fuzzy, c-format |
5151 | msgid "Unsupported type `%s'\n" | 5186 | msgid "Unsupported type `%s'\n" |
5152 | msgstr "Kommando `%s' wird nicht unterstützt. Vorgang wird abgebrochen.\n" | 5187 | msgstr "Kommando `%s' wird nicht unterstützt. Vorgang wird abgebrochen.\n" |
5153 | 5188 | ||
5154 | #: src/namestore/gnunet-namestore.c:765 | 5189 | #: src/namestore/gnunet-namestore.c:765 |
5190 | #: src/namestore/plugin_rest_namestore.c:626 | ||
5191 | #: src/namestore/plugin_rest_namestore.c:666 | ||
5155 | #, fuzzy, c-format | 5192 | #, fuzzy, c-format |
5156 | msgid "Value `%s' invalid for record type `%s'\n" | 5193 | msgid "Value `%s' invalid for record type `%s'\n" |
5157 | msgstr "%s: Symbolwert `%s' ist ungültig für %s\n" | 5194 | msgstr "%s: Symbolwert `%s' ist ungültig für %s\n" |
@@ -5165,6 +5202,11 @@ msgstr "Ungültiger Parameter: `%s'\n" | |||
5165 | msgid "del" | 5202 | msgid "del" |
5166 | msgstr "" | 5203 | msgstr "" |
5167 | 5204 | ||
5205 | #: src/namestore/gnunet-namestore.c:844 | ||
5206 | #, c-format | ||
5207 | msgid "Invalid public key for reverse lookup `%s'\n" | ||
5208 | msgstr "" | ||
5209 | |||
5168 | #: src/namestore/gnunet-namestore.c:868 | 5210 | #: src/namestore/gnunet-namestore.c:868 |
5169 | #: src/peerinfo-tool/gnunet-peerinfo.c:817 | 5211 | #: src/peerinfo-tool/gnunet-peerinfo.c:817 |
5170 | #, fuzzy, c-format | 5212 | #, fuzzy, c-format |
@@ -5177,21 +5219,25 @@ msgid "Invalid nick `%s'\n" | |||
5177 | msgstr "Ungültiger Parameter: `%s'\n" | 5219 | msgstr "Ungültiger Parameter: `%s'\n" |
5178 | 5220 | ||
5179 | #: src/namestore/gnunet-namestore.c:943 | 5221 | #: src/namestore/gnunet-namestore.c:943 |
5222 | #: src/namestore/plugin_rest_namestore.c:851 | ||
5180 | #, fuzzy, c-format | 5223 | #, fuzzy, c-format |
5181 | msgid "Ego `%s' not known to identity service\n" | 5224 | msgid "Ego `%s' not known to identity service\n" |
5182 | msgstr "`%s': unbekannter Dienst: %s\n" | 5225 | msgstr "`%s': unbekannter Dienst: %s\n" |
5183 | 5226 | ||
5184 | #: src/namestore/gnunet-namestore.c:970 | 5227 | #: src/namestore/gnunet-namestore.c:970 |
5228 | #: src/namestore/plugin_rest_namestore.c:878 | ||
5185 | #, c-format | 5229 | #, c-format |
5186 | msgid "No default ego configured in identity service\n" | 5230 | msgid "No default ego configured in identity service\n" |
5187 | msgstr "" | 5231 | msgstr "" |
5188 | 5232 | ||
5189 | #: src/namestore/gnunet-namestore.c:1006 | 5233 | #: src/namestore/gnunet-namestore.c:1006 |
5234 | #: src/namestore/plugin_rest_namestore.c:917 | ||
5190 | #, c-format | 5235 | #, c-format |
5191 | msgid "Identity service is not running\n" | 5236 | msgid "Identity service is not running\n" |
5192 | msgstr "" | 5237 | msgstr "" |
5193 | 5238 | ||
5194 | #: src/namestore/gnunet-namestore.c:1018 | 5239 | #: src/namestore/gnunet-namestore.c:1018 |
5240 | #: src/namestore/plugin_rest_namestore.c:946 | ||
5195 | #, fuzzy, c-format | 5241 | #, fuzzy, c-format |
5196 | msgid "Cannot connect to identity service\n" | 5242 | msgid "Cannot connect to identity service\n" |
5197 | msgstr "Verbindung zu %u.%u.%u.%u:%u fehlgeschlagen: %s\n" | 5243 | msgstr "Verbindung zu %u.%u.%u.%u:%u fehlgeschlagen: %s\n" |
@@ -5320,6 +5366,11 @@ msgstr "" | |||
5320 | msgid "Namestore failed to store record\n" | 5366 | msgid "Namestore failed to store record\n" |
5321 | msgstr "" | 5367 | msgstr "" |
5322 | 5368 | ||
5369 | #: src/namestore/plugin_rest_namestore.c:1023 | ||
5370 | #, fuzzy | ||
5371 | msgid "Namestore REST API initialized\n" | ||
5372 | msgstr " Verbindung fehlgeschlagen\n" | ||
5373 | |||
5323 | #: src/nat/gnunet-nat-server.c:279 | 5374 | #: src/nat/gnunet-nat-server.c:279 |
5324 | #, c-format | 5375 | #, c-format |
5325 | msgid "Please pass valid port number as the first argument! (got `%s')\n" | 5376 | msgid "Please pass valid port number as the first argument! (got `%s')\n" |
@@ -5568,7 +5619,7 @@ msgid "Measure quality and performance of the NSE service." | |||
5568 | msgstr "" | 5619 | msgstr "" |
5569 | 5620 | ||
5570 | #: src/nse/gnunet-service-nse.c:1537 | 5621 | #: src/nse/gnunet-service-nse.c:1537 |
5571 | #: src/revocation/gnunet-service-revocation.c:815 src/util/gnunet-scrypt.c:260 | 5622 | #: src/revocation/gnunet-service-revocation.c:827 src/util/gnunet-scrypt.c:260 |
5572 | msgid "Value is too large.\n" | 5623 | msgid "Value is too large.\n" |
5573 | msgstr "" | 5624 | msgstr "" |
5574 | 5625 | ||
@@ -6101,6 +6152,15 @@ msgstr "" | |||
6101 | msgid "Regex `%s' is too long!\n" | 6152 | msgid "Regex `%s' is too long!\n" |
6102 | msgstr "" | 6153 | msgstr "" |
6103 | 6154 | ||
6155 | #: src/rest/gnunet-rest-server.c:766 | ||
6156 | msgid "listen on specified port (default: 7776)" | ||
6157 | msgstr "" | ||
6158 | |||
6159 | #: src/rest/gnunet-rest-server.c:783 | ||
6160 | #, fuzzy | ||
6161 | msgid "GNUnet REST server" | ||
6162 | msgstr "GNUnet Netzwerk Topologie tracen." | ||
6163 | |||
6104 | #: src/revocation/gnunet-revocation.c:126 | 6164 | #: src/revocation/gnunet-revocation.c:126 |
6105 | #, c-format | 6165 | #, c-format |
6106 | msgid "Key `%s' is valid\n" | 6166 | msgid "Key `%s' is valid\n" |
@@ -6227,11 +6287,11 @@ msgid "# revocation set unions completed" | |||
6227 | msgstr "# Klartext PONG Nachrichten empfangen" | 6287 | msgstr "# Klartext PONG Nachrichten empfangen" |
6228 | 6288 | ||
6229 | #: src/revocation/gnunet-service-revocation.c:493 | 6289 | #: src/revocation/gnunet-service-revocation.c:493 |
6230 | #: src/revocation/gnunet-service-revocation.c:747 | 6290 | #: src/revocation/gnunet-service-revocation.c:759 |
6231 | msgid "SET service crashed, terminating revocation service\n" | 6291 | msgid "SET service crashed, terminating revocation service\n" |
6232 | msgstr "" | 6292 | msgstr "" |
6233 | 6293 | ||
6234 | #: src/revocation/gnunet-service-revocation.c:839 | 6294 | #: src/revocation/gnunet-service-revocation.c:851 |
6235 | #, fuzzy | 6295 | #, fuzzy |
6236 | msgid "Could not open revocation database file!" | 6296 | msgid "Could not open revocation database file!" |
6237 | msgstr "Knoten `%s' konnte nicht in der Routing Tabelle gefunden werden!\n" | 6297 | msgstr "Knoten `%s' konnte nicht in der Routing Tabelle gefunden werden!\n" |
@@ -7928,7 +7988,7 @@ msgid "Found %u addresses to report to NAT service\n" | |||
7928 | msgstr "" | 7988 | msgstr "" |
7929 | 7989 | ||
7930 | #: src/transport/plugin_transport_http_server.c:2825 | 7990 | #: src/transport/plugin_transport_http_server.c:2825 |
7931 | #: src/transport/plugin_transport_udp.c:3336 | 7991 | #: src/transport/plugin_transport_udp.c:3335 |
7932 | msgid "Disabling IPv6 since it is not supported on this system!\n" | 7992 | msgid "Disabling IPv6 since it is not supported on this system!\n" |
7933 | msgstr "" | 7993 | msgstr "" |
7934 | 7994 | ||
@@ -8157,49 +8217,49 @@ msgstr "" | |||
8157 | msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" | 8217 | msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" |
8158 | msgstr "Der Transportdienst auf Port %d konnte nicht gestartet werden.\n" | 8218 | msgstr "Der Transportdienst auf Port %d konnte nicht gestartet werden.\n" |
8159 | 8219 | ||
8160 | #: src/transport/plugin_transport_udp.c:3082 | 8220 | #: src/transport/plugin_transport_udp.c:3081 |
8161 | #, c-format | 8221 | #, c-format |
8162 | msgid "" | 8222 | msgid "" |
8163 | "UDP could not transmit message to `%s': Network seems down, please check " | 8223 | "UDP could not transmit message to `%s': Network seems down, please check " |
8164 | "your network configuration\n" | 8224 | "your network configuration\n" |
8165 | msgstr "" | 8225 | msgstr "" |
8166 | 8226 | ||
8167 | #: src/transport/plugin_transport_udp.c:3096 | 8227 | #: src/transport/plugin_transport_udp.c:3095 |
8168 | msgid "" | 8228 | msgid "" |
8169 | "UDP could not transmit IPv6 message! Please check your network configuration " | 8229 | "UDP could not transmit IPv6 message! Please check your network configuration " |
8170 | "and disable IPv6 if your connection does not have a global IPv6 address\n" | 8230 | "and disable IPv6 if your connection does not have a global IPv6 address\n" |
8171 | msgstr "" | 8231 | msgstr "" |
8172 | 8232 | ||
8173 | #: src/transport/plugin_transport_udp.c:3412 | 8233 | #: src/transport/plugin_transport_udp.c:3411 |
8174 | #: src/transport/plugin_transport_udp.c:3511 | 8234 | #: src/transport/plugin_transport_udp.c:3510 |
8175 | #, fuzzy, c-format | 8235 | #, fuzzy, c-format |
8176 | msgid "Failed to bind UDP socket to %s: %s\n" | 8236 | msgid "Failed to bind UDP socket to %s: %s\n" |
8177 | msgstr "UDP-Sockets können nicht geöffnet werden\n" | 8237 | msgstr "UDP-Sockets können nicht geöffnet werden\n" |
8178 | 8238 | ||
8179 | #: src/transport/plugin_transport_udp.c:3430 | 8239 | #: src/transport/plugin_transport_udp.c:3429 |
8180 | msgid "Disabling IPv4 since it is not supported on this system!\n" | 8240 | msgid "Disabling IPv4 since it is not supported on this system!\n" |
8181 | msgstr "" | 8241 | msgstr "" |
8182 | 8242 | ||
8183 | #: src/transport/plugin_transport_udp.c:3521 | 8243 | #: src/transport/plugin_transport_udp.c:3520 |
8184 | msgid "Failed to open UDP sockets\n" | 8244 | msgid "Failed to open UDP sockets\n" |
8185 | msgstr "UDP-Sockets können nicht geöffnet werden\n" | 8245 | msgstr "UDP-Sockets können nicht geöffnet werden\n" |
8186 | 8246 | ||
8187 | #: src/transport/plugin_transport_udp.c:3592 | 8247 | #: src/transport/plugin_transport_udp.c:3591 |
8188 | #: src/transport/plugin_transport_udp.c:3606 | 8248 | #: src/transport/plugin_transport_udp.c:3605 |
8189 | msgid "must be in [0,65535]" | 8249 | msgid "must be in [0,65535]" |
8190 | msgstr "" | 8250 | msgstr "" |
8191 | 8251 | ||
8192 | #: src/transport/plugin_transport_udp.c:3638 | 8252 | #: src/transport/plugin_transport_udp.c:3637 |
8193 | #, fuzzy | 8253 | #, fuzzy |
8194 | msgid "must be valid IPv4 address" | 8254 | msgid "must be valid IPv4 address" |
8195 | msgstr "»%s« ist keine gültige IP-Adresse.\n" | 8255 | msgstr "»%s« ist keine gültige IP-Adresse.\n" |
8196 | 8256 | ||
8197 | #: src/transport/plugin_transport_udp.c:3665 | 8257 | #: src/transport/plugin_transport_udp.c:3664 |
8198 | #, fuzzy | 8258 | #, fuzzy |
8199 | msgid "must be valid IPv6 address" | 8259 | msgid "must be valid IPv6 address" |
8200 | msgstr "»%s« ist keine gültige IP-Adresse.\n" | 8260 | msgstr "»%s« ist keine gültige IP-Adresse.\n" |
8201 | 8261 | ||
8202 | #: src/transport/plugin_transport_udp.c:3731 | 8262 | #: src/transport/plugin_transport_udp.c:3730 |
8203 | #, fuzzy | 8263 | #, fuzzy |
8204 | msgid "Failed to create UDP network sockets\n" | 8264 | msgid "Failed to create UDP network sockets\n" |
8205 | msgstr "UDP-Sockets können nicht geöffnet werden\n" | 8265 | msgstr "UDP-Sockets können nicht geöffnet werden\n" |
@@ -8425,24 +8485,24 @@ msgstr "" | |||
8425 | msgid "Syntax error while deserializing in line %u\n" | 8485 | msgid "Syntax error while deserializing in line %u\n" |
8426 | msgstr "Syntaxfehler in Konfigurationsdatei `%s' in Zeile %d.\n" | 8486 | msgstr "Syntaxfehler in Konfigurationsdatei `%s' in Zeile %d.\n" |
8427 | 8487 | ||
8428 | #: src/util/configuration.c:1026 | 8488 | #: src/util/configuration.c:1025 |
8429 | #, c-format | 8489 | #, c-format |
8430 | msgid "" | 8490 | msgid "" |
8431 | "Configuration value '%s' for '%s' in section '%s' is not in set of legal " | 8491 | "Configuration value '%s' for '%s' in section '%s' is not in set of legal " |
8432 | "choices\n" | 8492 | "choices\n" |
8433 | msgstr "" | 8493 | msgstr "" |
8434 | 8494 | ||
8435 | #: src/util/configuration.c:1145 | 8495 | #: src/util/configuration.c:1144 |
8436 | #, c-format | 8496 | #, c-format |
8437 | msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n" | 8497 | msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n" |
8438 | msgstr "" | 8498 | msgstr "" |
8439 | 8499 | ||
8440 | #: src/util/configuration.c:1177 | 8500 | #: src/util/configuration.c:1176 |
8441 | #, c-format | 8501 | #, c-format |
8442 | msgid "Missing closing `%s' in option `%s'\n" | 8502 | msgid "Missing closing `%s' in option `%s'\n" |
8443 | msgstr "" | 8503 | msgstr "" |
8444 | 8504 | ||
8445 | #: src/util/configuration.c:1251 | 8505 | #: src/util/configuration.c:1250 |
8446 | #, c-format | 8506 | #, c-format |
8447 | msgid "" | 8507 | msgid "" |
8448 | "Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined " | 8508 | "Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined " |
@@ -8466,52 +8526,52 @@ msgid "" | |||
8466 | "%llu)\n" | 8526 | "%llu)\n" |
8467 | msgstr "" | 8527 | msgstr "" |
8468 | 8528 | ||
8469 | #: src/util/crypto_ecc.c:731 src/util/crypto_ecc.c:769 | 8529 | #: src/util/crypto_ecc.c:733 src/util/crypto_ecc.c:771 |
8470 | #: src/util/crypto_ecc.c:887 src/util/crypto_ecc.c:925 | 8530 | #: src/util/crypto_ecc.c:889 src/util/crypto_ecc.c:927 |
8471 | #, fuzzy, c-format | 8531 | #, fuzzy, c-format |
8472 | msgid "Could not acquire lock on file `%s': %s...\n" | 8532 | msgid "Could not acquire lock on file `%s': %s...\n" |
8473 | msgstr "PID konnte nicht in Datei `%s' geschrieben werden: %s.\n" | 8533 | msgstr "PID konnte nicht in Datei `%s' geschrieben werden: %s.\n" |
8474 | 8534 | ||
8475 | #: src/util/crypto_ecc.c:736 src/util/crypto_ecc.c:892 | 8535 | #: src/util/crypto_ecc.c:738 src/util/crypto_ecc.c:894 |
8476 | #, fuzzy | 8536 | #, fuzzy |
8477 | msgid "Creating a new private key. This may take a while.\n" | 8537 | msgid "Creating a new private key. This may take a while.\n" |
8478 | msgstr "Ein neuer Hostkey wird erzeugt (dies kann eine Weile dauern).\n" | 8538 | msgstr "Ein neuer Hostkey wird erzeugt (dies kann eine Weile dauern).\n" |
8479 | 8539 | ||
8480 | #: src/util/crypto_ecc.c:773 src/util/crypto_ecc.c:929 | 8540 | #: src/util/crypto_ecc.c:775 src/util/crypto_ecc.c:931 |
8481 | msgid "This may be ok if someone is currently generating a private key.\n" | 8541 | msgid "This may be ok if someone is currently generating a private key.\n" |
8482 | msgstr "" | 8542 | msgstr "" |
8483 | 8543 | ||
8484 | #: src/util/crypto_ecc.c:803 src/util/crypto_ecc.c:959 | 8544 | #: src/util/crypto_ecc.c:805 src/util/crypto_ecc.c:961 |
8485 | #, c-format | 8545 | #, c-format |
8486 | msgid "" | 8546 | msgid "" |
8487 | "When trying to read key file `%s' I found %u bytes but I need at least %u.\n" | 8547 | "When trying to read key file `%s' I found %u bytes but I need at least %u.\n" |
8488 | msgstr "" | 8548 | msgstr "" |
8489 | 8549 | ||
8490 | #: src/util/crypto_ecc.c:807 src/util/crypto_ecc.c:963 | 8550 | #: src/util/crypto_ecc.c:809 src/util/crypto_ecc.c:965 |
8491 | msgid "This may be ok if someone is currently generating a key.\n" | 8551 | msgid "This may be ok if someone is currently generating a key.\n" |
8492 | msgstr "" | 8552 | msgstr "" |
8493 | 8553 | ||
8494 | #: src/util/crypto_ecc.c:1045 | 8554 | #: src/util/crypto_ecc.c:1047 |
8495 | #, fuzzy | 8555 | #, fuzzy |
8496 | msgid "Could not load peer's private key\n" | 8556 | msgid "Could not load peer's private key\n" |
8497 | msgstr "Anwendung `%s' konnte nicht initialisiert werden.\n" | 8557 | msgstr "Anwendung `%s' konnte nicht initialisiert werden.\n" |
8498 | 8558 | ||
8499 | #: src/util/crypto_ecc.c:1149 | 8559 | #: src/util/crypto_ecc.c:1151 |
8500 | #, fuzzy, c-format | 8560 | #, fuzzy, c-format |
8501 | msgid "ECC signing failed at %s:%d: %s\n" | 8561 | msgid "ECC signing failed at %s:%d: %s\n" |
8502 | msgstr "`%s' schlug fehl bei %s:%d mit dem Fehler: `%s'.\n" | 8562 | msgstr "`%s' schlug fehl bei %s:%d mit dem Fehler: `%s'.\n" |
8503 | 8563 | ||
8504 | #: src/util/crypto_ecc.c:1199 | 8564 | #: src/util/crypto_ecc.c:1201 |
8505 | #, fuzzy, c-format | 8565 | #, fuzzy, c-format |
8506 | msgid "EdDSA signing failed at %s:%d: %s\n" | 8566 | msgid "EdDSA signing failed at %s:%d: %s\n" |
8507 | msgstr "`%s' schlug fehl bei %s:%d mit dem Fehler: `%s'.\n" | 8567 | msgstr "`%s' schlug fehl bei %s:%d mit dem Fehler: `%s'.\n" |
8508 | 8568 | ||
8509 | #: src/util/crypto_ecc.c:1273 | 8569 | #: src/util/crypto_ecc.c:1275 |
8510 | #, fuzzy, c-format | 8570 | #, fuzzy, c-format |
8511 | msgid "ECDSA signature verification failed at %s:%d: %s\n" | 8571 | msgid "ECDSA signature verification failed at %s:%d: %s\n" |
8512 | msgstr "RSA Signaturüberprüfung fehlgeschlagen bei %s:%d: %s\n" | 8572 | msgstr "RSA Signaturüberprüfung fehlgeschlagen bei %s:%d: %s\n" |
8513 | 8573 | ||
8514 | #: src/util/crypto_ecc.c:1330 | 8574 | #: src/util/crypto_ecc.c:1332 |
8515 | #, fuzzy, c-format | 8575 | #, fuzzy, c-format |
8516 | msgid "EdDSA signature verification failed at %s:%d: %s\n" | 8576 | msgid "EdDSA signature verification failed at %s:%d: %s\n" |
8517 | msgstr "RSA Signaturüberprüfung fehlgeschlagen bei %s:%d: %s\n" | 8577 | msgstr "RSA Signaturüberprüfung fehlgeschlagen bei %s:%d: %s\n" |
@@ -8522,17 +8582,17 @@ msgid "libgcrypt has not the expected version (version %s is required).\n" | |||
8522 | msgstr "" | 8582 | msgstr "" |
8523 | "libgcrypt hat nicht die erwartete Version (Version %s wird vorausgesetzt).\n" | 8583 | "libgcrypt hat nicht die erwartete Version (Version %s wird vorausgesetzt).\n" |
8524 | 8584 | ||
8525 | #: src/util/crypto_rsa.c:809 | 8585 | #: src/util/crypto_rsa.c:825 |
8526 | #, fuzzy, c-format | 8586 | #, fuzzy, c-format |
8527 | msgid "RSA signature verification failed at %s:%d: %s\n" | 8587 | msgid "RSA signature verification failed at %s:%d: %s\n" |
8528 | msgstr "RSA Signaturüberprüfung fehlgeschlagen bei %s:%d: %s\n" | 8588 | msgstr "RSA Signaturüberprüfung fehlgeschlagen bei %s:%d: %s\n" |
8529 | 8589 | ||
8530 | #: src/util/disk.c:1218 | 8590 | #: src/util/disk.c:1222 |
8531 | #, fuzzy, c-format | 8591 | #, fuzzy, c-format |
8532 | msgid "Expected `%s' to be a directory!\n" | 8592 | msgid "Expected `%s' to be a directory!\n" |
8533 | msgstr "`%s' erwartet, dass `%s' ein Verzeichnis ist!\n" | 8593 | msgstr "`%s' erwartet, dass `%s' ein Verzeichnis ist!\n" |
8534 | 8594 | ||
8535 | #: src/util/disk.c:1580 src/util/service.c:1328 | 8595 | #: src/util/disk.c:1584 src/util/service.c:1328 |
8536 | #, fuzzy, c-format | 8596 | #, fuzzy, c-format |
8537 | msgid "Cannot obtain information about user `%s': %s\n" | 8597 | msgid "Cannot obtain information about user `%s': %s\n" |
8538 | msgstr "Fehler beim Speichern der Konfigurationsdatei: `%s': %s.\n" | 8598 | msgstr "Fehler beim Speichern der Konfigurationsdatei: `%s': %s.\n" |
@@ -8597,7 +8657,7 @@ msgstr "%s: Option »-W %s« erlaubt kein Argument\n" | |||
8597 | msgid "Use %s to get a list of options.\n" | 8657 | msgid "Use %s to get a list of options.\n" |
8598 | msgstr "Verwenden Sie --help, um eine Liste der Optionen zu erhalten.\n" | 8658 | msgstr "Verwenden Sie --help, um eine Liste der Optionen zu erhalten.\n" |
8599 | 8659 | ||
8600 | #: src/util/getopt_helpers.c:84 | 8660 | #: src/util/getopt_helpers.c:90 |
8601 | #, c-format | 8661 | #, c-format |
8602 | msgid "" | 8662 | msgid "" |
8603 | "Arguments mandatory for long options are also mandatory for short options.\n" | 8663 | "Arguments mandatory for long options are also mandatory for short options.\n" |
@@ -8605,12 +8665,12 @@ msgstr "" | |||
8605 | "Argumente, die für lange Optionen zwingend sind, sind auch für kurze " | 8665 | "Argumente, die für lange Optionen zwingend sind, sind auch für kurze " |
8606 | "Optionen zwingend.\n" | 8666 | "Optionen zwingend.\n" |
8607 | 8667 | ||
8608 | #: src/util/getopt_helpers.c:268 src/util/getopt_helpers.c:326 | 8668 | #: src/util/getopt_helpers.c:274 src/util/getopt_helpers.c:332 |
8609 | #, c-format | 8669 | #, c-format |
8610 | msgid "You must pass a number to the `%s' option.\n" | 8670 | msgid "You must pass a number to the `%s' option.\n" |
8611 | msgstr "Sie müssen für die Option »%s« zusätzlich eine Zahl angeben.\n" | 8671 | msgstr "Sie müssen für die Option »%s« zusätzlich eine Zahl angeben.\n" |
8612 | 8672 | ||
8613 | #: src/util/getopt_helpers.c:298 | 8673 | #: src/util/getopt_helpers.c:304 |
8614 | #, c-format | 8674 | #, c-format |
8615 | msgid "You must pass relative time to the `%s' option.\n" | 8675 | msgid "You must pass relative time to the `%s' option.\n" |
8616 | msgstr "Sie müssen eine relative Zeit zu der Option »%s« übergeben.\n" | 8676 | msgstr "Sie müssen eine relative Zeit zu der Option »%s« übergeben.\n" |
@@ -8854,23 +8914,23 @@ msgstr "" | |||
8854 | msgid "GetExitCodeProcess failed for binary %s (%d).\n" | 8914 | msgid "GetExitCodeProcess failed for binary %s (%d).\n" |
8855 | msgstr "" | 8915 | msgstr "" |
8856 | 8916 | ||
8857 | #: src/util/plugin.c:87 | 8917 | #: src/util/plugin.c:86 |
8858 | #, c-format | 8918 | #, c-format |
8859 | msgid "Initialization of plugin mechanism failed: %s!\n" | 8919 | msgid "Initialization of plugin mechanism failed: %s!\n" |
8860 | msgstr "Initialisierung des Plugin-Mechanismus fehlgeschlagen: %s!\n" | 8920 | msgstr "Initialisierung des Plugin-Mechanismus fehlgeschlagen: %s!\n" |
8861 | 8921 | ||
8862 | #: src/util/plugin.c:148 | 8922 | #: src/util/plugin.c:151 |
8863 | #, fuzzy, c-format | 8923 | #, fuzzy, c-format |
8864 | msgid "`%s' failed to resolve method '%s' with error: %s\n" | 8924 | msgid "`%s' failed to resolve method '%s' with error: %s\n" |
8865 | msgstr "" | 8925 | msgstr "" |
8866 | "`%s' konnte die Methode '%s%s' nicht auflösen. Ort: %s:%d. Fehler: %s\n" | 8926 | "`%s' konnte die Methode '%s%s' nicht auflösen. Ort: %s:%d. Fehler: %s\n" |
8867 | 8927 | ||
8868 | #: src/util/plugin.c:223 | 8928 | #: src/util/plugin.c:226 |
8869 | #, fuzzy, c-format | 8929 | #, fuzzy, c-format |
8870 | msgid "`%s' failed for library `%s' with error: %s\n" | 8930 | msgid "`%s' failed for library `%s' with error: %s\n" |
8871 | msgstr "`%s' fehlgeschlagen für die Bibliothek `%s'. Ort: %s:%d. Fehler: %s\n" | 8931 | msgstr "`%s' fehlgeschlagen für die Bibliothek `%s'. Ort: %s:%d. Fehler: %s\n" |
8872 | 8932 | ||
8873 | #: src/util/plugin.c:382 | 8933 | #: src/util/plugin.c:385 |
8874 | #, fuzzy | 8934 | #, fuzzy |
8875 | msgid "Could not determine plugin installation path.\n" | 8935 | msgid "Could not determine plugin installation path.\n" |
8876 | msgstr "Öffentliche IP-Adresse konnte nicht ermittelt werden.\n" | 8936 | msgstr "Öffentliche IP-Adresse konnte nicht ermittelt werden.\n" |
@@ -9452,10 +9512,6 @@ msgstr "`%s' schlug bei Datei `%s' fehl. Ort: %s:%d. Fehler: %s\n" | |||
9452 | #~ msgstr "Empfangene Client-Nachricht ist ungültig.\n" | 9512 | #~ msgstr "Empfangene Client-Nachricht ist ungültig.\n" |
9453 | 9513 | ||
9454 | #, fuzzy | 9514 | #, fuzzy |
9455 | #~ msgid "Mesh initialized\n" | ||
9456 | #~ msgstr " Verbindung fehlgeschlagen\n" | ||
9457 | |||
9458 | #, fuzzy | ||
9459 | #~ msgid "# SUC responder result messages received" | 9515 | #~ msgid "# SUC responder result messages received" |
9460 | #~ msgstr "# verschlüsselter PING Nachrichten empfangen" | 9516 | #~ msgstr "# verschlüsselter PING Nachrichten empfangen" |
9461 | 9517 | ||
@@ -7,7 +7,7 @@ msgid "" | |||
7 | msgstr "" | 7 | msgstr "" |
8 | "Project-Id-Version: gnunet 0.9.5a\n" | 8 | "Project-Id-Version: gnunet 0.9.5a\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: 2015-03-14 18:00+0100\n" | 10 | "POT-Creation-Date: 2015-04-27 13:05+0200\n" |
11 | "PO-Revision-Date: 2013-02-23 17:50+0100\n" | 11 | "PO-Revision-Date: 2013-02-23 17:50+0100\n" |
12 | "Last-Translator: Miguel Ángel Arruga Vivas <rosen644835@gmail.com>\n" | 12 | "Last-Translator: Miguel Ángel Arruga Vivas <rosen644835@gmail.com>\n" |
13 | "Language-Team: Spanish <es@li.org>\n" | 13 | "Language-Team: Spanish <es@li.org>\n" |
@@ -535,16 +535,16 @@ msgstr "" | |||
535 | msgid "Could not connect master [%u] and slave [%u]\n" | 535 | msgid "Could not connect master [%u] and slave [%u]\n" |
536 | msgstr "¡No se pudo conectar al servicio %s!\n" | 536 | msgstr "¡No se pudo conectar al servicio %s!\n" |
537 | 537 | ||
538 | #: src/ats-tests/ats-testing.c:490 src/ats-tests/ats-testing.c:662 | 538 | #: src/ats-tests/ats-testing.c:490 src/ats-tests/ats-testing.c:634 |
539 | #, fuzzy | 539 | #, fuzzy |
540 | msgid "Initialization failed, shutdown\n" | 540 | msgid "Initialization failed, shutdown\n" |
541 | msgstr "¡La inicialización del mecanismo de módulos falló: %s!\n" | 541 | msgstr "¡La inicialización del mecanismo de módulos falló: %s!\n" |
542 | 542 | ||
543 | #: src/ats-tests/ats-testing-log.c:846 | 543 | #: src/ats-tests/ats-testing-log.c:834 |
544 | msgid "Stop logging\n" | 544 | msgid "Stop logging\n" |
545 | msgstr "" | 545 | msgstr "" |
546 | 546 | ||
547 | #: src/ats-tests/ats-testing-log.c:897 | 547 | #: src/ats-tests/ats-testing-log.c:885 |
548 | #, fuzzy, c-format | 548 | #, fuzzy, c-format |
549 | msgid "Start logging `%s'\n" | 549 | msgid "Start logging `%s'\n" |
550 | msgstr "Iniciando descarga «%s».\n" | 550 | msgstr "Iniciando descarga «%s».\n" |
@@ -600,6 +600,7 @@ msgid "Quota for network `%11s' (in/out): %10s / %10s\n" | |||
600 | msgstr "Cuota para la red «%11s» (entrada/salida): %10s / %10s\n" | 600 | msgstr "Cuota para la red «%11s» (entrada/salida): %10s / %10s\n" |
601 | 601 | ||
602 | #: src/ats-tool/gnunet-ats.c:708 src/namestore/gnunet-namestore.c:700 | 602 | #: src/ats-tool/gnunet-ats.c:708 src/namestore/gnunet-namestore.c:700 |
603 | #: src/namestore/plugin_rest_namestore.c:812 | ||
603 | #: src/transport/gnunet-transport.c:1890 | 604 | #: src/transport/gnunet-transport.c:1890 |
604 | #: src/transport/gnunet-transport-profiler.c:531 | 605 | #: src/transport/gnunet-transport-profiler.c:531 |
605 | #, c-format | 606 | #, c-format |
@@ -1480,29 +1481,29 @@ msgstr "# bytes de «payload» descifrados" | |||
1480 | msgid "# PAYLOAD dropped (out of order)" | 1481 | msgid "# PAYLOAD dropped (out of order)" |
1481 | msgstr "# bytes omitidos (fuera de secuencia)" | 1482 | msgstr "# bytes omitidos (fuera de secuencia)" |
1482 | 1483 | ||
1483 | #: src/core/gnunet-service-core_neighbours.c:168 | 1484 | #: src/core/gnunet-service-core_neighbours.c:177 |
1484 | msgid "# sessions terminated by transport disconnect" | 1485 | msgid "# sessions terminated by transport disconnect" |
1485 | msgstr "# sesiones terminadas por desconexión de transporte" | 1486 | msgstr "# sesiones terminadas por desconexión de transporte" |
1486 | 1487 | ||
1487 | #: src/core/gnunet-service-core_neighbours.c:184 | 1488 | #: src/core/gnunet-service-core_neighbours.c:193 |
1488 | #: src/core/gnunet-service-core_neighbours.c:342 | 1489 | #: src/core/gnunet-service-core_neighbours.c:355 |
1489 | msgid "# neighbour entries allocated" | 1490 | msgid "# neighbour entries allocated" |
1490 | msgstr "# entradas de vecinos alojadas" | 1491 | msgstr "# entradas de vecinos alojadas" |
1491 | 1492 | ||
1492 | #: src/core/gnunet-service-core_neighbours.c:252 | 1493 | #: src/core/gnunet-service-core_neighbours.c:264 |
1493 | msgid "# encrypted bytes given to transport" | 1494 | msgid "# encrypted bytes given to transport" |
1494 | msgstr "# bytes cifrados dados al transporte" | 1495 | msgstr "# bytes cifrados dados al transporte" |
1495 | 1496 | ||
1496 | #: src/core/gnunet-service-core_neighbours.c:425 | 1497 | #: src/core/gnunet-service-core_neighbours.c:438 |
1497 | #, c-format | 1498 | #, c-format |
1498 | msgid "Unsupported message of type %u (%u bytes) received from peer `%s'\n" | 1499 | msgid "Unsupported message of type %u (%u bytes) received from peer `%s'\n" |
1499 | msgstr "Mensaje no soportado del tipo %u (%u bytes) recibido del par «%s»\n" | 1500 | msgstr "Mensaje no soportado del tipo %u (%u bytes) recibido del par «%s»\n" |
1500 | 1501 | ||
1501 | #: src/core/gnunet-service-core_sessions.c:245 | 1502 | #: src/core/gnunet-service-core_sessions.c:252 |
1502 | #: src/core/gnunet-service-core_sessions.c:331 | 1503 | #: src/core/gnunet-service-core_sessions.c:338 |
1503 | #: src/dht/gnunet-service-dht_neighbours.c:661 | 1504 | #: src/dht/gnunet-service-dht_neighbours.c:661 |
1504 | #: src/dht/gnunet-service-dht_neighbours.c:726 | 1505 | #: src/dht/gnunet-service-dht_neighbours.c:726 |
1505 | #: src/fs/gnunet-service-fs_cp.c:645 src/fs/gnunet-service-fs_cp.c:1627 | 1506 | #: src/fs/gnunet-service-fs_cp.c:654 src/fs/gnunet-service-fs_cp.c:1647 |
1506 | #: src/topology/gnunet-daemon-topology.c:734 | 1507 | #: src/topology/gnunet-daemon-topology.c:734 |
1507 | #: src/topology/gnunet-daemon-topology.c:835 | 1508 | #: src/topology/gnunet-daemon-topology.c:835 |
1508 | #: src/transport/gnunet-service-transport_neighbours.c:755 | 1509 | #: src/transport/gnunet-service-transport_neighbours.c:755 |
@@ -1510,21 +1511,21 @@ msgstr "Mensaje no soportado del tipo %u (%u bytes) recibido del par «%s»\n" | |||
1510 | msgid "# peers connected" | 1511 | msgid "# peers connected" |
1511 | msgstr "# pares conectados" | 1512 | msgstr "# pares conectados" |
1512 | 1513 | ||
1513 | #: src/core/gnunet-service-core_sessions.c:278 | 1514 | #: src/core/gnunet-service-core_sessions.c:285 |
1514 | msgid "# type map refreshes sent" | 1515 | msgid "# type map refreshes sent" |
1515 | msgstr "# envíos de refrescos del mapa de tipos" | 1516 | msgstr "# envíos de refrescos del mapa de tipos" |
1516 | 1517 | ||
1517 | #: src/core/gnunet-service-core_sessions.c:397 | 1518 | #: src/core/gnunet-service-core_sessions.c:404 |
1518 | #, fuzzy | 1519 | #, fuzzy |
1519 | msgid "# outdated typemap confirmations received" | 1520 | msgid "# outdated typemap confirmations received" |
1520 | msgstr "Se produjo un fallo al encolar una confirmación de recepción\n" | 1521 | msgstr "Se produjo un fallo al encolar una confirmación de recepción\n" |
1521 | 1522 | ||
1522 | #: src/core/gnunet-service-core_sessions.c:408 | 1523 | #: src/core/gnunet-service-core_sessions.c:415 |
1523 | #, fuzzy | 1524 | #, fuzzy |
1524 | msgid "# valid typemap confirmations received" | 1525 | msgid "# valid typemap confirmations received" |
1525 | msgstr "Se produjo un fallo al encolar una confirmación de recepción\n" | 1526 | msgstr "Se produjo un fallo al encolar una confirmación de recepción\n" |
1526 | 1527 | ||
1527 | #: src/core/gnunet-service-core_sessions.c:546 | 1528 | #: src/core/gnunet-service-core_sessions.c:554 |
1528 | msgid "# messages discarded (expired prior to transmission)" | 1529 | msgid "# messages discarded (expired prior to transmission)" |
1529 | msgstr "# mensajes descartados (expirados antes de su transmisión)" | 1530 | msgstr "# mensajes descartados (expirados antes de su transmisión)" |
1530 | 1531 | ||
@@ -1538,7 +1539,7 @@ msgid "# updates to my type map" | |||
1538 | msgstr "# actualizaciones de mi mapa de tipos" | 1539 | msgstr "# actualizaciones de mi mapa de tipos" |
1539 | 1540 | ||
1540 | #: src/datacache/datacache.c:115 src/datacache/datacache.c:266 | 1541 | #: src/datacache/datacache.c:115 src/datacache/datacache.c:266 |
1541 | #: src/datastore/gnunet-service-datastore.c:855 | 1542 | #: src/datastore/gnunet-service-datastore.c:841 |
1542 | msgid "# bytes stored" | 1543 | msgid "# bytes stored" |
1543 | msgstr "# bytes almacenados" | 1544 | msgstr "# bytes almacenados" |
1544 | 1545 | ||
@@ -1547,8 +1548,8 @@ msgid "# items stored" | |||
1547 | msgstr "# elementos almacenados" | 1548 | msgstr "# elementos almacenados" |
1548 | 1549 | ||
1549 | #: src/datacache/datacache.c:143 src/datacache/datacache.c:150 | 1550 | #: src/datacache/datacache.c:143 src/datacache/datacache.c:150 |
1550 | #: src/datastore/gnunet-service-datastore.c:1557 | 1551 | #: src/datastore/gnunet-service-datastore.c:1598 |
1551 | #: src/datastore/gnunet-service-datastore.c:1568 | 1552 | #: src/datastore/gnunet-service-datastore.c:1609 |
1552 | #, c-format | 1553 | #, c-format |
1553 | msgid "No `%s' specified for `%s' in configuration!\n" | 1554 | msgid "No `%s' specified for `%s' in configuration!\n" |
1554 | msgstr "¡No se ha especificado ningún «%s» para «%s» en la configuración!\n" | 1555 | msgstr "¡No se ha especificado ningún «%s» para «%s» en la configuración!\n" |
@@ -1582,8 +1583,8 @@ msgstr "Caché de datos Postgres ejecutándose\n" | |||
1582 | 1583 | ||
1583 | #: src/datacache/plugin_datacache_sqlite.c:69 | 1584 | #: src/datacache/plugin_datacache_sqlite.c:69 |
1584 | #: src/datacache/plugin_datacache_sqlite.c:72 | 1585 | #: src/datacache/plugin_datacache_sqlite.c:72 |
1585 | #: src/datastore/plugin_datastore_mysql.c:809 | 1586 | #: src/datastore/plugin_datastore_mysql.c:818 |
1586 | #: src/datastore/plugin_datastore_mysql.c:823 | 1587 | #: src/datastore/plugin_datastore_mysql.c:834 |
1587 | #: src/datastore/plugin_datastore_sqlite.c:57 src/mysql/mysql.c:41 | 1588 | #: src/datastore/plugin_datastore_sqlite.c:57 src/mysql/mysql.c:41 |
1588 | #: src/mysql/mysql.c:48 src/mysql/mysql.c:522 src/mysql/mysql.c:531 | 1589 | #: src/mysql/mysql.c:48 src/mysql/mysql.c:522 src/mysql/mysql.c:531 |
1589 | #: src/mysql/mysql.c:591 src/mysql/mysql.c:607 | 1590 | #: src/mysql/mysql.c:591 src/mysql/mysql.c:607 |
@@ -1788,8 +1789,8 @@ msgstr "Espacio insuficiente para satisfacer la petición" | |||
1788 | 1789 | ||
1789 | #: src/datastore/gnunet-service-datastore.c:712 | 1790 | #: src/datastore/gnunet-service-datastore.c:712 |
1790 | #: src/datastore/gnunet-service-datastore.c:767 | 1791 | #: src/datastore/gnunet-service-datastore.c:767 |
1791 | #: src/datastore/gnunet-service-datastore.c:982 | 1792 | #: src/datastore/gnunet-service-datastore.c:999 |
1792 | #: src/datastore/gnunet-service-datastore.c:1529 | 1793 | #: src/datastore/gnunet-service-datastore.c:1570 |
1793 | msgid "# reserved" | 1794 | msgid "# reserved" |
1794 | msgstr "# reservado" | 1795 | msgstr "# reservado" |
1795 | 1796 | ||
@@ -1797,46 +1798,46 @@ msgstr "# reservado" | |||
1797 | msgid "Could not find matching reservation" | 1798 | msgid "Could not find matching reservation" |
1798 | msgstr "No se pudo encontrar una reserva coincidente" | 1799 | msgstr "No se pudo encontrar una reserva coincidente" |
1799 | 1800 | ||
1800 | #: src/datastore/gnunet-service-datastore.c:867 | 1801 | #: src/datastore/gnunet-service-datastore.c:853 |
1801 | #, c-format | 1802 | #, c-format |
1802 | msgid "Need %llu bytes more space (%llu allowed, using %llu)\n" | 1803 | msgid "Need %llu bytes more space (%llu allowed, using %llu)\n" |
1803 | msgstr "" | 1804 | msgstr "" |
1804 | "Se necesitan %llu bytes más de espacio (%llu permitidos, usando %llu)\n" | 1805 | "Se necesitan %llu bytes más de espacio (%llu permitidos, usando %llu)\n" |
1805 | 1806 | ||
1806 | #: src/datastore/gnunet-service-datastore.c:1029 | 1807 | #: src/datastore/gnunet-service-datastore.c:1046 |
1807 | msgid "# GET requests received" | 1808 | msgid "# GET requests received" |
1808 | msgstr "# peticiones «GET» recibidas" | 1809 | msgstr "# peticiones «GET» recibidas" |
1809 | 1810 | ||
1810 | #: src/datastore/gnunet-service-datastore.c:1041 | 1811 | #: src/datastore/gnunet-service-datastore.c:1058 |
1811 | msgid "# requests filtered by bloomfilter" | 1812 | msgid "# requests filtered by bloomfilter" |
1812 | msgstr "# peticiones filtradas por el «bloomfilter»" | 1813 | msgstr "# peticiones filtradas por el «bloomfilter»" |
1813 | 1814 | ||
1814 | #: src/datastore/gnunet-service-datastore.c:1069 | 1815 | #: src/datastore/gnunet-service-datastore.c:1094 |
1815 | msgid "# UPDATE requests received" | 1816 | msgid "# UPDATE requests received" |
1816 | msgstr "# peticiones «UPDATE» recibidas" | 1817 | msgstr "# peticiones «UPDATE» recibidas" |
1817 | 1818 | ||
1818 | #: src/datastore/gnunet-service-datastore.c:1099 | 1819 | #: src/datastore/gnunet-service-datastore.c:1122 |
1819 | msgid "# GET REPLICATION requests received" | 1820 | msgid "# GET REPLICATION requests received" |
1820 | msgstr "# peticiones «GET REPLICATION» recibidas" | 1821 | msgstr "# peticiones «GET REPLICATION» recibidas" |
1821 | 1822 | ||
1822 | #: src/datastore/gnunet-service-datastore.c:1132 | 1823 | #: src/datastore/gnunet-service-datastore.c:1155 |
1823 | msgid "# GET ZERO ANONYMITY requests received" | 1824 | msgid "# GET ZERO ANONYMITY requests received" |
1824 | msgstr "# peticiones «GET ZERO ANONYMITY» recibidas" | 1825 | msgstr "# peticiones «GET ZERO ANONYMITY» recibidas" |
1825 | 1826 | ||
1826 | #: src/datastore/gnunet-service-datastore.c:1157 | 1827 | #: src/datastore/gnunet-service-datastore.c:1180 |
1827 | msgid "Content not found" | 1828 | msgid "Content not found" |
1828 | msgstr "Contenido no encontrado" | 1829 | msgstr "Contenido no encontrado" |
1829 | 1830 | ||
1830 | #: src/datastore/gnunet-service-datastore.c:1165 | 1831 | #: src/datastore/gnunet-service-datastore.c:1188 |
1831 | msgid "# bytes removed (explicit request)" | 1832 | msgid "# bytes removed (explicit request)" |
1832 | msgstr "# bytes eliminados (petición explícita)" | 1833 | msgstr "# bytes eliminados (petición explícita)" |
1833 | 1834 | ||
1834 | #: src/datastore/gnunet-service-datastore.c:1197 | 1835 | #: src/datastore/gnunet-service-datastore.c:1220 |
1835 | msgid "# REMOVE requests received" | 1836 | msgid "# REMOVE requests received" |
1836 | msgstr "# peticiones «REMOVE» recibidas" | 1837 | msgstr "# peticiones «REMOVE» recibidas" |
1837 | 1838 | ||
1838 | # Miguel: ¿Cómo traducir «payload»? ¿Código cargado? | 1839 | # Miguel: ¿Cómo traducir «payload»? ¿Código cargado? |
1839 | #: src/datastore/gnunet-service-datastore.c:1241 | 1840 | #: src/datastore/gnunet-service-datastore.c:1264 |
1840 | #, fuzzy, c-format | 1841 | #, fuzzy, c-format |
1841 | msgid "" | 1842 | msgid "" |
1842 | "Datastore payload must have been inaccurate (%lld < %lld). Recomputing it.\n" | 1843 | "Datastore payload must have been inaccurate (%lld < %lld). Recomputing it.\n" |
@@ -1844,88 +1845,103 @@ msgstr "" | |||
1844 | "El «payload» del almacén de datos es impreciso (%lld < %lld). Intentando " | 1845 | "El «payload» del almacén de datos es impreciso (%lld < %lld). Intentando " |
1845 | "repararlo.\n" | 1846 | "repararlo.\n" |
1846 | 1847 | ||
1847 | #: src/datastore/gnunet-service-datastore.c:1246 | 1848 | #: src/datastore/gnunet-service-datastore.c:1269 |
1848 | #, c-format | 1849 | #, c-format |
1849 | msgid "New payload: %lld\n" | 1850 | msgid "New payload: %lld\n" |
1850 | msgstr "" | 1851 | msgstr "" |
1851 | 1852 | ||
1852 | #: src/datastore/gnunet-service-datastore.c:1299 | 1853 | #: src/datastore/gnunet-service-datastore.c:1322 |
1853 | #, c-format | 1854 | #, c-format |
1854 | msgid "Loading `%s' datastore plugin\n" | 1855 | msgid "Loading `%s' datastore plugin\n" |
1855 | msgstr "Cargando el módulo del almacén de datos «%s»\n" | 1856 | msgstr "Cargando el módulo del almacén de datos «%s»\n" |
1856 | 1857 | ||
1857 | #: src/datastore/gnunet-service-datastore.c:1310 | 1858 | #: src/datastore/gnunet-service-datastore.c:1333 |
1858 | #, c-format | 1859 | #, c-format |
1859 | msgid "Failed to load datastore plugin for `%s'\n" | 1860 | msgid "Failed to load datastore plugin for `%s'\n" |
1860 | msgstr "" | 1861 | msgstr "" |
1861 | "Se produjo un fallo al inicializar el módulo del almacén de datos para «%s»\n" | 1862 | "Se produjo un fallo al inicializar el módulo del almacén de datos para «%s»\n" |
1862 | 1863 | ||
1863 | #: src/datastore/gnunet-service-datastore.c:1412 | 1864 | #: src/datastore/gnunet-service-datastore.c:1402 |
1865 | #: src/datastore/gnunet-service-datastore.c:1463 | ||
1866 | msgid "Bloomfilter construction complete.\n" | ||
1867 | msgstr "Construcción de «bloomfilter» completa.\n" | ||
1868 | |||
1869 | #: src/datastore/gnunet-service-datastore.c:1450 | ||
1864 | msgid "Rebuilding bloomfilter. Please be patient.\n" | 1870 | msgid "Rebuilding bloomfilter. Please be patient.\n" |
1865 | msgstr "Reconstruyendo «bloomfilter». Por favor, tenga paciencia.\n" | 1871 | msgstr "Reconstruyendo «bloomfilter». Por favor, tenga paciencia.\n" |
1866 | 1872 | ||
1867 | #: src/datastore/gnunet-service-datastore.c:1419 | 1873 | #: src/datastore/gnunet-service-datastore.c:1460 |
1868 | msgid "Plugin does not support get_keys function. Please fix!\n" | 1874 | msgid "Plugin does not support get_keys function. Please fix!\n" |
1869 | msgstr "El módulo no soporta la función «get_keys». Por favor, corríjalo.\n" | 1875 | msgstr "El módulo no soporta la función «get_keys». Por favor, corríjalo.\n" |
1870 | 1876 | ||
1871 | #: src/datastore/gnunet-service-datastore.c:1422 | 1877 | #: src/datastore/gnunet-service-datastore.c:1603 |
1872 | msgid "Bloomfilter construction complete.\n" | ||
1873 | msgstr "Construcción de «bloomfilter» completa.\n" | ||
1874 | |||
1875 | #: src/datastore/gnunet-service-datastore.c:1562 | ||
1876 | #, c-format | 1878 | #, c-format |
1877 | msgid "# bytes used in file-sharing datastore `%s'" | 1879 | msgid "# bytes used in file-sharing datastore `%s'" |
1878 | msgstr "# bytes usados en el almacén de ficheros compartidos «%s»" | 1880 | msgstr "# bytes usados en el almacén de ficheros compartidos «%s»" |
1879 | 1881 | ||
1880 | #: src/datastore/gnunet-service-datastore.c:1573 | 1882 | #: src/datastore/gnunet-service-datastore.c:1614 |
1881 | msgid "# quota" | 1883 | msgid "# quota" |
1882 | msgstr "# cuota" | 1884 | msgstr "# cuota" |
1883 | 1885 | ||
1884 | #: src/datastore/gnunet-service-datastore.c:1575 | 1886 | #: src/datastore/gnunet-service-datastore.c:1616 |
1885 | msgid "# cache size" | 1887 | msgid "# cache size" |
1886 | msgstr "# tamaño de la caché" | 1888 | msgstr "# tamaño de la caché" |
1887 | 1889 | ||
1888 | #: src/datastore/gnunet-service-datastore.c:1588 | 1890 | #: src/datastore/gnunet-service-datastore.c:1629 |
1889 | #, c-format | 1891 | #, c-format |
1890 | msgid "Could not use specified filename `%s' for bloomfilter.\n" | 1892 | msgid "Could not use specified filename `%s' for bloomfilter.\n" |
1891 | msgstr "" | 1893 | msgstr "" |
1892 | "No se pudo usar el nombre de fichero especificado «%s» para «bloomfilter».\n" | 1894 | "No se pudo usar el nombre de fichero especificado «%s» para «bloomfilter».\n" |
1893 | 1895 | ||
1894 | #: src/datastore/gnunet-service-datastore.c:1606 | 1896 | #: src/datastore/gnunet-service-datastore.c:1647 |
1895 | #: src/datastore/gnunet-service-datastore.c:1622 | 1897 | #: src/datastore/gnunet-service-datastore.c:1663 |
1896 | #, c-format | 1898 | #, c-format |
1897 | msgid "Failed to remove bogus bloomfilter file `%s'\n" | 1899 | msgid "Failed to remove bogus bloomfilter file `%s'\n" |
1898 | msgstr "" | 1900 | msgstr "" |
1899 | "Se produjo un fallo al borrar el fichero de configuración defectuoso de " | 1901 | "Se produjo un fallo al borrar el fichero de configuración defectuoso de " |
1900 | "«bloomfilter» «%s»:\n" | 1902 | "«bloomfilter» «%s»:\n" |
1901 | 1903 | ||
1902 | #: src/datastore/gnunet-service-datastore.c:1652 | 1904 | #: src/datastore/gnunet-service-datastore.c:1693 |
1903 | msgid "Failed to initialize bloomfilter.\n" | 1905 | msgid "Failed to initialize bloomfilter.\n" |
1904 | msgstr "Se produjo un fallo al inicializar «bloomfilter».\n" | 1906 | msgstr "Se produjo un fallo al inicializar «bloomfilter».\n" |
1905 | 1907 | ||
1906 | #: src/datastore/plugin_datastore_heap.c:821 | 1908 | #: src/datastore/plugin_datastore_heap.c:826 |
1907 | msgid "Heap database running\n" | 1909 | msgid "Heap database running\n" |
1908 | msgstr "Base de datos de montículo ejecutándose\n" | 1910 | msgstr "Base de datos de montículo ejecutándose\n" |
1909 | 1911 | ||
1910 | #: src/datastore/plugin_datastore_mysql.c:786 | 1912 | #: src/datastore/plugin_datastore_mysql.c:309 |
1913 | #: src/datastore/plugin_datastore_sqlite.c:499 | ||
1914 | #, fuzzy | ||
1915 | msgid "Data too large" | ||
1916 | msgstr "número de valores" | ||
1917 | |||
1918 | #: src/datastore/plugin_datastore_mysql.c:328 | ||
1919 | msgid "MySQL statement run failure" | ||
1920 | msgstr "" | ||
1921 | |||
1922 | #: src/datastore/plugin_datastore_mysql.c:793 | ||
1911 | #, c-format | 1923 | #, c-format |
1912 | msgid "Failed to prepare statement `%s'\n" | 1924 | msgid "Failed to prepare statement `%s'\n" |
1913 | msgstr "Se produjo un fallo al preparar la sentencia «%s»\n" | 1925 | msgstr "Se produjo un fallo al preparar la sentencia «%s»\n" |
1914 | 1926 | ||
1915 | #: src/datastore/plugin_datastore_mysql.c:794 | 1927 | #: src/datastore/plugin_datastore_mysql.c:802 |
1916 | #, c-format | 1928 | #, c-format |
1917 | msgid "`%s' for `%s' failed at %s:%d with error: %s\n" | 1929 | msgid "`%s' for `%s' failed at %s:%d with error: %s\n" |
1918 | msgstr "«%s» para «%s» falló en %s: %d con error: %s\n" | 1930 | msgstr "«%s» para «%s» falló en %s: %d con error: %s\n" |
1919 | 1931 | ||
1920 | #: src/datastore/plugin_datastore_mysql.c:1025 | 1932 | #: src/datastore/plugin_datastore_mysql.c:1036 |
1921 | msgid "Mysql database running\n" | 1933 | msgid "Mysql database running\n" |
1922 | msgstr "Base de datos Mysql ejecutándose\n" | 1934 | msgstr "Base de datos Mysql ejecutándose\n" |
1923 | 1935 | ||
1924 | #: src/datastore/plugin_datastore_postgres.c:837 | 1936 | #: src/datastore/plugin_datastore_postgres.c:331 |
1937 | msgid "Postgress exec failure" | ||
1938 | msgstr "" | ||
1939 | |||
1940 | #: src/datastore/plugin_datastore_postgres.c:846 | ||
1925 | msgid "Failed to drop table from database.\n" | 1941 | msgid "Failed to drop table from database.\n" |
1926 | msgstr "Se produjo un fallo al borrar una tabla de la base de datos.\n" | 1942 | msgstr "Se produjo un fallo al borrar una tabla de la base de datos.\n" |
1927 | 1943 | ||
1928 | #: src/datastore/plugin_datastore_postgres.c:873 | 1944 | #: src/datastore/plugin_datastore_postgres.c:882 |
1929 | #: src/namecache/plugin_namecache_postgres.c:414 | 1945 | #: src/namecache/plugin_namecache_postgres.c:414 |
1930 | #: src/namestore/plugin_namestore_postgres.c:569 | 1946 | #: src/namestore/plugin_namestore_postgres.c:569 |
1931 | msgid "Postgres database running\n" | 1947 | msgid "Postgres database running\n" |
@@ -1948,19 +1964,19 @@ msgstr "«%s» falló en %s:%u con el error: %s" | |||
1948 | msgid "Unable to initialize SQLite: %s.\n" | 1964 | msgid "Unable to initialize SQLite: %s.\n" |
1949 | msgstr "Imposible inicializar SQLite: %s.\n" | 1965 | msgstr "Imposible inicializar SQLite: %s.\n" |
1950 | 1966 | ||
1951 | #: src/datastore/plugin_datastore_sqlite.c:661 | 1967 | #: src/datastore/plugin_datastore_sqlite.c:680 |
1952 | msgid "Invalid data in database. Trying to fix (by deletion).\n" | 1968 | msgid "Invalid data in database. Trying to fix (by deletion).\n" |
1953 | msgstr "" | 1969 | msgstr "" |
1954 | "Datos no válidos en la base de datos. Intentando arreglar (por borrado).\n" | 1970 | "Datos no válidos en la base de datos. Intentando arreglar (por borrado).\n" |
1955 | 1971 | ||
1956 | # to should be too, i think | 1972 | # to should be too, i think |
1957 | #: src/datastore/plugin_datastore_sqlite.c:1156 | 1973 | #: src/datastore/plugin_datastore_sqlite.c:1177 |
1958 | msgid "sqlite version to old to determine size, assuming zero\n" | 1974 | msgid "sqlite version to old to determine size, assuming zero\n" |
1959 | msgstr "" | 1975 | msgstr "" |
1960 | "la versión de sqlite es muy antigua para determinar el tamaño, se asume " | 1976 | "la versión de sqlite es muy antigua para determinar el tamaño, se asume " |
1961 | "cero\n" | 1977 | "cero\n" |
1962 | 1978 | ||
1963 | #: src/datastore/plugin_datastore_sqlite.c:1176 | 1979 | #: src/datastore/plugin_datastore_sqlite.c:1197 |
1964 | #, c-format | 1980 | #, c-format |
1965 | msgid "" | 1981 | msgid "" |
1966 | "Using sqlite page utilization to estimate payload (%llu pages of size %llu " | 1982 | "Using sqlite page utilization to estimate payload (%llu pages of size %llu " |
@@ -1969,13 +1985,13 @@ msgstr "" | |||
1969 | "Usando la utilización de páginas de sqlite para estimar el «payload» (%llu " | 1985 | "Usando la utilización de páginas de sqlite para estimar el «payload» (%llu " |
1970 | "páginas de %llu bytes de tamaño)\n" | 1986 | "páginas de %llu bytes de tamaño)\n" |
1971 | 1987 | ||
1972 | #: src/datastore/plugin_datastore_sqlite.c:1216 | 1988 | #: src/datastore/plugin_datastore_sqlite.c:1237 |
1973 | #: src/namecache/plugin_namecache_sqlite.c:580 | 1989 | #: src/namecache/plugin_namecache_sqlite.c:580 |
1974 | #: src/namestore/plugin_namestore_sqlite.c:716 | 1990 | #: src/namestore/plugin_namestore_sqlite.c:716 |
1975 | msgid "Sqlite database running\n" | 1991 | msgid "Sqlite database running\n" |
1976 | msgstr "Base de datos sqlite ejecutándose\n" | 1992 | msgstr "Base de datos sqlite ejecutándose\n" |
1977 | 1993 | ||
1978 | #: src/datastore/plugin_datastore_template.c:259 | 1994 | #: src/datastore/plugin_datastore_template.c:260 |
1979 | msgid "Template database running\n" | 1995 | msgid "Template database running\n" |
1980 | msgstr "Base de datos de plantilla ejecutándose\n" | 1996 | msgstr "Base de datos de plantilla ejecutándose\n" |
1981 | 1997 | ||
@@ -2600,52 +2616,52 @@ msgstr "establece registros de clase AAAA" | |||
2600 | msgid "Change DNS replies to point elsewhere." | 2616 | msgid "Change DNS replies to point elsewhere." |
2601 | msgstr "Cambiar las respuestas DNS apuntando a cualquier otro lado." | 2617 | msgstr "Cambiar las respuestas DNS apuntando a cualquier otro lado." |
2602 | 2618 | ||
2603 | #: src/dns/gnunet-service-dns.c:456 | 2619 | #: src/dns/gnunet-service-dns.c:459 |
2604 | msgid "# DNS requests answered via TUN interface" | 2620 | msgid "# DNS requests answered via TUN interface" |
2605 | msgstr "# Peticiones DNS contestadas vía interfaz TUN" | 2621 | msgstr "# Peticiones DNS contestadas vía interfaz TUN" |
2606 | 2622 | ||
2607 | #: src/dns/gnunet-service-dns.c:603 | 2623 | #: src/dns/gnunet-service-dns.c:606 |
2608 | msgid "# DNS exit failed (failed to open socket)" | 2624 | msgid "# DNS exit failed (failed to open socket)" |
2609 | msgstr "# Salidas DNS fallidas (se produjo un fallo al abrir el «socket»)" | 2625 | msgstr "# Salidas DNS fallidas (se produjo un fallo al abrir el «socket»)" |
2610 | 2626 | ||
2611 | #: src/dns/gnunet-service-dns.c:714 | 2627 | #: src/dns/gnunet-service-dns.c:717 |
2612 | msgid "# External DNS response discarded (no matching request)" | 2628 | msgid "# External DNS response discarded (no matching request)" |
2613 | msgstr "# Respuestas DNS externas descartadas (ninguna petición coincidente)" | 2629 | msgstr "# Respuestas DNS externas descartadas (ninguna petición coincidente)" |
2614 | 2630 | ||
2615 | #: src/dns/gnunet-service-dns.c:792 | 2631 | #: src/dns/gnunet-service-dns.c:795 |
2616 | msgid "# Client response discarded (no matching request)" | 2632 | msgid "# Client response discarded (no matching request)" |
2617 | msgstr "# Respuestas de cliente descartadas (ninguna petición coincidente)" | 2633 | msgstr "# Respuestas de cliente descartadas (ninguna petición coincidente)" |
2618 | 2634 | ||
2619 | #: src/dns/gnunet-service-dns.c:907 | 2635 | #: src/dns/gnunet-service-dns.c:910 |
2620 | msgid "Received malformed IPv4-UDP packet on TUN interface.\n" | 2636 | msgid "Received malformed IPv4-UDP packet on TUN interface.\n" |
2621 | msgstr "Recibido paquete UDP IPv4 mal formado en interfaz TUN.\n" | 2637 | msgstr "Recibido paquete UDP IPv4 mal formado en interfaz TUN.\n" |
2622 | 2638 | ||
2623 | #: src/dns/gnunet-service-dns.c:923 | 2639 | #: src/dns/gnunet-service-dns.c:926 |
2624 | msgid "Received malformed IPv6-UDP packet on TUN interface.\n" | 2640 | msgid "Received malformed IPv6-UDP packet on TUN interface.\n" |
2625 | msgstr "Recibido paquete UDP IPv6 mal formado en interfaz TUN.\n" | 2641 | msgstr "Recibido paquete UDP IPv6 mal formado en interfaz TUN.\n" |
2626 | 2642 | ||
2627 | #: src/dns/gnunet-service-dns.c:932 | 2643 | #: src/dns/gnunet-service-dns.c:935 |
2628 | #, c-format | 2644 | #, c-format |
2629 | msgid "Got non-IP packet with %u bytes and protocol %u from TUN\n" | 2645 | msgid "Got non-IP packet with %u bytes and protocol %u from TUN\n" |
2630 | msgstr "Se obtuvo un paquete no-IP con %u bytes y protocolo %u de TUN\n" | 2646 | msgstr "Se obtuvo un paquete no-IP con %u bytes y protocolo %u de TUN\n" |
2631 | 2647 | ||
2632 | #: src/dns/gnunet-service-dns.c:942 | 2648 | #: src/dns/gnunet-service-dns.c:945 |
2633 | msgid "# Non-DNS UDP packet received via TUN interface" | 2649 | msgid "# Non-DNS UDP packet received via TUN interface" |
2634 | msgstr "# Paquetes UDP no-DNS recibidos vía interfaz TUN" | 2650 | msgstr "# Paquetes UDP no-DNS recibidos vía interfaz TUN" |
2635 | 2651 | ||
2636 | #: src/dns/gnunet-service-dns.c:1009 | 2652 | #: src/dns/gnunet-service-dns.c:1012 |
2637 | msgid "# DNS requests received via TUN interface" | 2653 | msgid "# DNS requests received via TUN interface" |
2638 | msgstr "# Peticiones DNS recibidas vía interfaz TUN" | 2654 | msgstr "# Peticiones DNS recibidas vía interfaz TUN" |
2639 | 2655 | ||
2640 | #: src/dns/gnunet-service-dns.c:1049 | 2656 | #: src/dns/gnunet-service-dns.c:1064 src/exit/gnunet-daemon-exit.c:3594 |
2641 | #, c-format | ||
2642 | msgid "`%s' must be installed SUID, refusing to run\n" | ||
2643 | msgstr "«%s» debe ser instalado con SUID, se niega a arrancar\n" | ||
2644 | |||
2645 | #: src/dns/gnunet-service-dns.c:1069 src/exit/gnunet-daemon-exit.c:3594 | ||
2646 | msgid "need a valid IPv4 or IPv6 address\n" | 2657 | msgid "need a valid IPv4 or IPv6 address\n" |
2647 | msgstr "se necesita una dirección IPv4 o IPv6 válida\n" | 2658 | msgstr "se necesita una dirección IPv4 o IPv6 válida\n" |
2648 | 2659 | ||
2660 | #: src/dns/gnunet-service-dns.c:1082 | ||
2661 | #, fuzzy, c-format | ||
2662 | msgid "`%s' must be installed SUID, will not run DNS interceptor\n" | ||
2663 | msgstr "«%s» debe ser instalado con SUID, se niega a arrancar\n" | ||
2664 | |||
2649 | #: src/dv/gnunet-dv.c:169 | 2665 | #: src/dv/gnunet-dv.c:169 |
2650 | msgid "verbose output" | 2666 | msgid "verbose output" |
2651 | msgstr "" | 2667 | msgstr "" |
@@ -2888,52 +2904,52 @@ msgstr "" | |||
2888 | msgid "Daemon to run to provide an IP exit node for the VPN" | 2904 | msgid "Daemon to run to provide an IP exit node for the VPN" |
2889 | msgstr "Demonio a ejecutar para obtener un nodo de salida IP para la VPN" | 2905 | msgstr "Demonio a ejecutar para obtener un nodo de salida IP para la VPN" |
2890 | 2906 | ||
2891 | #: src/fragmentation/defragmentation.c:271 | 2907 | #: src/fragmentation/defragmentation.c:277 |
2892 | msgid "# acknowledgements sent for fragment" | 2908 | msgid "# acknowledgements sent for fragment" |
2893 | msgstr "# reconocimientos enviados por framentos" | 2909 | msgstr "# reconocimientos enviados por framentos" |
2894 | 2910 | ||
2895 | #: src/fragmentation/defragmentation.c:463 | 2911 | #: src/fragmentation/defragmentation.c:470 |
2896 | #: src/transport/plugin_transport_wlan.c:1515 | 2912 | #: src/transport/plugin_transport_wlan.c:1515 |
2897 | msgid "# fragments received" | 2913 | msgid "# fragments received" |
2898 | msgstr "# fragmentos recibidos" | 2914 | msgstr "# fragmentos recibidos" |
2899 | 2915 | ||
2900 | #: src/fragmentation/defragmentation.c:533 | 2916 | #: src/fragmentation/defragmentation.c:540 |
2901 | msgid "# duplicate fragments received" | 2917 | msgid "# duplicate fragments received" |
2902 | msgstr "# fragmentos duplicados recibidos" | 2918 | msgstr "# fragmentos duplicados recibidos" |
2903 | 2919 | ||
2904 | #: src/fragmentation/defragmentation.c:549 | 2920 | #: src/fragmentation/defragmentation.c:558 |
2905 | msgid "# messages defragmented" | 2921 | msgid "# messages defragmented" |
2906 | msgstr "# mensajes defragmentados" | 2922 | msgstr "# mensajes defragmentados" |
2907 | 2923 | ||
2908 | #: src/fragmentation/fragmentation.c:234 | 2924 | #: src/fragmentation/fragmentation.c:235 |
2909 | msgid "# fragments transmitted" | 2925 | msgid "# fragments transmitted" |
2910 | msgstr "# fragmentos transmitidos" | 2926 | msgstr "# fragmentos transmitidos" |
2911 | 2927 | ||
2912 | #: src/fragmentation/fragmentation.c:237 | 2928 | #: src/fragmentation/fragmentation.c:240 |
2913 | msgid "# fragments retransmitted" | 2929 | msgid "# fragments retransmitted" |
2914 | msgstr "# fragmentos retransmitidos" | 2930 | msgstr "# fragmentos retransmitidos" |
2915 | 2931 | ||
2916 | #: src/fragmentation/fragmentation.c:263 | 2932 | #: src/fragmentation/fragmentation.c:269 |
2917 | msgid "# fragments wrap arounds" | 2933 | msgid "# fragments wrap arounds" |
2918 | msgstr "# encajes de fragmentos" | 2934 | msgstr "# encajes de fragmentos" |
2919 | 2935 | ||
2920 | #: src/fragmentation/fragmentation.c:307 | 2936 | #: src/fragmentation/fragmentation.c:315 |
2921 | msgid "# messages fragmented" | 2937 | msgid "# messages fragmented" |
2922 | msgstr "# mensajes fragmentados" | 2938 | msgstr "# mensajes fragmentados" |
2923 | 2939 | ||
2924 | #: src/fragmentation/fragmentation.c:310 | 2940 | #: src/fragmentation/fragmentation.c:321 |
2925 | msgid "# total size of fragmented messages" | 2941 | msgid "# total size of fragmented messages" |
2926 | msgstr "# tamaño total de los mensajes fragmentados" | 2942 | msgstr "# tamaño total de los mensajes fragmentados" |
2927 | 2943 | ||
2928 | #: src/fragmentation/fragmentation.c:431 | 2944 | #: src/fragmentation/fragmentation.c:444 |
2929 | msgid "# fragment acknowledgements received" | 2945 | msgid "# fragment acknowledgements received" |
2930 | msgstr "# reconocimientos de fragmentos recibidos" | 2946 | msgstr "# reconocimientos de fragmentos recibidos" |
2931 | 2947 | ||
2932 | #: src/fragmentation/fragmentation.c:437 | 2948 | #: src/fragmentation/fragmentation.c:451 |
2933 | msgid "# bits removed from fragmentation ACKs" | 2949 | msgid "# bits removed from fragmentation ACKs" |
2934 | msgstr "# bits eliminados de reconocimientos de fragmentos" | 2950 | msgstr "# bits eliminados de reconocimientos de fragmentos" |
2935 | 2951 | ||
2936 | #: src/fragmentation/fragmentation.c:461 | 2952 | #: src/fragmentation/fragmentation.c:475 |
2937 | msgid "# fragmentation transmissions completed" | 2953 | msgid "# fragmentation transmissions completed" |
2938 | msgstr "# transmisiones de fragmentos completadas" | 2954 | msgstr "# transmisiones de fragmentos completadas" |
2939 | 2955 | ||
@@ -3225,56 +3241,56 @@ msgid "Got result with unknown block type `%d', ignoring" | |||
3225 | msgstr "" | 3241 | msgstr "" |
3226 | "Se obtuvo un resultado con un tipo desconocido de bloque «%d», ignorándolo" | 3242 | "Se obtuvo un resultado con un tipo desconocido de bloque «%d», ignorándolo" |
3227 | 3243 | ||
3228 | #: src/fs/fs_unindex.c:59 | 3244 | #: src/fs/fs_unindex.c:63 |
3229 | msgid "Failed to find given position in file" | 3245 | msgid "Failed to find given position in file" |
3230 | msgstr "Se produjo un fallo al buscar la posición dada en el fichero" | 3246 | msgstr "Se produjo un fallo al buscar la posición dada en el fichero" |
3231 | 3247 | ||
3232 | #: src/fs/fs_unindex.c:64 | 3248 | #: src/fs/fs_unindex.c:68 |
3233 | msgid "Failed to read file" | 3249 | msgid "Failed to read file" |
3234 | msgstr "No se pudo leer el fichero" | 3250 | msgstr "No se pudo leer el fichero" |
3235 | 3251 | ||
3236 | #: src/fs/fs_unindex.c:234 | 3252 | #: src/fs/fs_unindex.c:245 |
3237 | msgid "Unexpected time for a response from `fs' service." | 3253 | msgid "Unexpected time for a response from `fs' service." |
3238 | msgstr "Tiempo inesperado para una respuesta del servicio «fs»." | 3254 | msgstr "Tiempo inesperado para una respuesta del servicio «fs»." |
3239 | 3255 | ||
3240 | #: src/fs/fs_unindex.c:242 | 3256 | #: src/fs/fs_unindex.c:253 |
3241 | msgid "Timeout waiting for `fs' service." | 3257 | msgid "Timeout waiting for `fs' service." |
3242 | msgstr "Esperando al servicio «fs»." | 3258 | msgstr "Esperando al servicio «fs»." |
3243 | 3259 | ||
3244 | #: src/fs/fs_unindex.c:250 | 3260 | #: src/fs/fs_unindex.c:261 |
3245 | msgid "Invalid response from `fs' service." | 3261 | msgid "Invalid response from `fs' service." |
3246 | msgstr "Respuesta no válida del servicio «fs»." | 3262 | msgstr "Respuesta no válida del servicio «fs»." |
3247 | 3263 | ||
3248 | #: src/fs/fs_unindex.c:291 | 3264 | #: src/fs/fs_unindex.c:304 |
3249 | msgid "Failed to connect to FS service for unindexing." | 3265 | msgid "Failed to connect to FS service for unindexing." |
3250 | msgstr "" | 3266 | msgstr "" |
3251 | "Se produjo un fallo al conectar con el servicio «FS» para el desindexado." | 3267 | "Se produjo un fallo al conectar con el servicio «FS» para el desindexado." |
3252 | 3268 | ||
3253 | #: src/fs/fs_unindex.c:347 src/fs/fs_unindex.c:359 | 3269 | #: src/fs/fs_unindex.c:360 src/fs/fs_unindex.c:372 |
3254 | msgid "Failed to get KSKs from directory scan." | 3270 | msgid "Failed to get KSKs from directory scan." |
3255 | msgstr "Se produjo un fallo al obtener KSKs de la búsqueda de directorios." | 3271 | msgstr "Se produjo un fallo al obtener KSKs de la búsqueda de directorios." |
3256 | 3272 | ||
3257 | #: src/fs/fs_unindex.c:355 | 3273 | #: src/fs/fs_unindex.c:368 |
3258 | #, c-format | 3274 | #, c-format |
3259 | msgid "Internal error scanning `%s'.\n" | 3275 | msgid "Internal error scanning `%s'.\n" |
3260 | msgstr "Error interno escaneando «%s».\n" | 3276 | msgstr "Error interno escaneando «%s».\n" |
3261 | 3277 | ||
3262 | #: src/fs/fs_unindex.c:414 | 3278 | #: src/fs/fs_unindex.c:427 |
3263 | #, fuzzy, c-format | 3279 | #, fuzzy, c-format |
3264 | msgid "Failed to remove UBlock: %s\n" | 3280 | msgid "Failed to remove UBlock: %s\n" |
3265 | msgstr "Se produjo un fallo al eliminar el KBlock: %s\n" | 3281 | msgstr "Se produjo un fallo al eliminar el KBlock: %s\n" |
3266 | 3282 | ||
3267 | #: src/fs/fs_unindex.c:562 src/fs/fs_unindex.c:626 | 3283 | #: src/fs/fs_unindex.c:590 src/fs/fs_unindex.c:656 |
3268 | msgid "Failed to connect to `datastore' service." | 3284 | msgid "Failed to connect to `datastore' service." |
3269 | msgstr "" | 3285 | msgstr "" |
3270 | "Se produjo un fallo al conectar con el servicio de almacenamiento de datos " | 3286 | "Se produjo un fallo al conectar con el servicio de almacenamiento de datos " |
3271 | "(datastore)." | 3287 | "(datastore)." |
3272 | 3288 | ||
3273 | #: src/fs/fs_unindex.c:639 | 3289 | #: src/fs/fs_unindex.c:669 |
3274 | msgid "Failed to open file for unindexing." | 3290 | msgid "Failed to open file for unindexing." |
3275 | msgstr "Se produjo un fallo al abrir el fichero para desindexado." | 3291 | msgstr "Se produjo un fallo al abrir el fichero para desindexado." |
3276 | 3292 | ||
3277 | #: src/fs/fs_unindex.c:673 | 3293 | #: src/fs/fs_unindex.c:708 |
3278 | msgid "Failed to compute hash of file." | 3294 | msgid "Failed to compute hash of file." |
3279 | msgstr "Se produjo un fallo al calcular el hash del fichero." | 3295 | msgstr "Se produjo un fallo al calcular el hash del fichero." |
3280 | 3296 | ||
@@ -3890,89 +3906,89 @@ msgstr "# conexiones de clientes «stream» rechazadas" | |||
3890 | msgid "# cadet connections active" | 3906 | msgid "# cadet connections active" |
3891 | msgstr "# conexiones «stream» activas" | 3907 | msgstr "# conexiones «stream» activas" |
3892 | 3908 | ||
3893 | #: src/fs/gnunet-service-fs_cp.c:726 | 3909 | #: src/fs/gnunet-service-fs_cp.c:735 |
3894 | msgid "# migration stop messages received" | 3910 | msgid "# migration stop messages received" |
3895 | msgstr "# mensajes de detención de migración recibidos" | 3911 | msgstr "# mensajes de detención de migración recibidos" |
3896 | 3912 | ||
3897 | #: src/fs/gnunet-service-fs_cp.c:730 | 3913 | #: src/fs/gnunet-service-fs_cp.c:739 |
3898 | #, c-format | 3914 | #, c-format |
3899 | msgid "Migration of content to peer `%s' blocked for %s\n" | 3915 | msgid "Migration of content to peer `%s' blocked for %s\n" |
3900 | msgstr "Migración de contenido al par «%s» bloqueada durante %s\n" | 3916 | msgstr "Migración de contenido al par «%s» bloqueada durante %s\n" |
3901 | 3917 | ||
3902 | #: src/fs/gnunet-service-fs_cp.c:768 | 3918 | #: src/fs/gnunet-service-fs_cp.c:776 |
3903 | msgid "# replies transmitted to other peers" | 3919 | msgid "# replies transmitted to other peers" |
3904 | msgstr "# respuestas transmitidas a otros pares" | 3920 | msgstr "# respuestas transmitidas a otros pares" |
3905 | 3921 | ||
3906 | #: src/fs/gnunet-service-fs_cp.c:774 | 3922 | #: src/fs/gnunet-service-fs_cp.c:784 |
3907 | msgid "# replies dropped" | 3923 | msgid "# replies dropped" |
3908 | msgstr "# respuestas omitidas" | 3924 | msgstr "# respuestas omitidas" |
3909 | 3925 | ||
3910 | #: src/fs/gnunet-service-fs_cp.c:799 src/fs/gnunet-service-fs_cp.c:1384 | 3926 | #: src/fs/gnunet-service-fs_cp.c:810 src/fs/gnunet-service-fs_cp.c:1404 |
3911 | msgid "# P2P searches active" | 3927 | msgid "# P2P searches active" |
3912 | msgstr "# busquedas P2P activas" | 3928 | msgstr "# busquedas P2P activas" |
3913 | 3929 | ||
3914 | #: src/fs/gnunet-service-fs_cp.c:904 | 3930 | #: src/fs/gnunet-service-fs_cp.c:915 |
3915 | msgid "# artificial delays introduced (ms)" | 3931 | msgid "# artificial delays introduced (ms)" |
3916 | msgstr "# retardos artificiales introducidos (ms)" | 3932 | msgstr "# retardos artificiales introducidos (ms)" |
3917 | 3933 | ||
3918 | #: src/fs/gnunet-service-fs_cp.c:960 | 3934 | #: src/fs/gnunet-service-fs_cp.c:971 |
3919 | msgid "# replies dropped due to type mismatch" | 3935 | msgid "# replies dropped due to type mismatch" |
3920 | msgstr "# respuestas omitidas debido a incompatibilidad de tipos" | 3936 | msgstr "# respuestas omitidas debido a incompatibilidad de tipos" |
3921 | 3937 | ||
3922 | #: src/fs/gnunet-service-fs_cp.c:968 | 3938 | #: src/fs/gnunet-service-fs_cp.c:979 |
3923 | msgid "# replies received for other peers" | 3939 | msgid "# replies received for other peers" |
3924 | msgstr "# respuestas recibidas de otros pares" | 3940 | msgstr "# respuestas recibidas de otros pares" |
3925 | 3941 | ||
3926 | #: src/fs/gnunet-service-fs_cp.c:982 | 3942 | #: src/fs/gnunet-service-fs_cp.c:993 |
3927 | msgid "# replies dropped due to insufficient cover traffic" | 3943 | msgid "# replies dropped due to insufficient cover traffic" |
3928 | msgstr "# respuestas omitidas debido a insuficiente tráfico de cobertura" | 3944 | msgstr "# respuestas omitidas debido a insuficiente tráfico de cobertura" |
3929 | 3945 | ||
3930 | #: src/fs/gnunet-service-fs_cp.c:1030 | 3946 | #: src/fs/gnunet-service-fs_cp.c:1041 |
3931 | msgid "# P2P searches destroyed due to ultimate reply" | 3947 | msgid "# P2P searches destroyed due to ultimate reply" |
3932 | msgstr "# búsquedas P2P destruidas debido a respuesta definitiva" | 3948 | msgstr "# búsquedas P2P destruidas debido a respuesta definitiva" |
3933 | 3949 | ||
3934 | #: src/fs/gnunet-service-fs_cp.c:1098 | 3950 | #: src/fs/gnunet-service-fs_cp.c:1109 |
3935 | msgid "# requests done for free (low load)" | 3951 | msgid "# requests done for free (low load)" |
3936 | msgstr "# peticiones realizadas gratuitamente (baja carga)" | 3952 | msgstr "# peticiones realizadas gratuitamente (baja carga)" |
3937 | 3953 | ||
3938 | #: src/fs/gnunet-service-fs_cp.c:1123 | 3954 | #: src/fs/gnunet-service-fs_cp.c:1134 |
3939 | msgid "# request dropped, priority insufficient" | 3955 | msgid "# request dropped, priority insufficient" |
3940 | msgstr "# peticiones omitidas, prioridad insuficiente" | 3956 | msgstr "# peticiones omitidas, prioridad insuficiente" |
3941 | 3957 | ||
3942 | #: src/fs/gnunet-service-fs_cp.c:1133 | 3958 | #: src/fs/gnunet-service-fs_cp.c:1144 |
3943 | msgid "# requests done for a price (normal load)" | 3959 | msgid "# requests done for a price (normal load)" |
3944 | msgstr "# peticiones realizadas por un precio (carga normal)" | 3960 | msgstr "# peticiones realizadas por un precio (carga normal)" |
3945 | 3961 | ||
3946 | #: src/fs/gnunet-service-fs_cp.c:1210 | 3962 | #: src/fs/gnunet-service-fs_cp.c:1221 |
3947 | msgid "# GET requests received (from other peers)" | 3963 | msgid "# GET requests received (from other peers)" |
3948 | msgstr "# peticiones «GET» recibidas (de otros pares)" | 3964 | msgstr "# peticiones «GET» recibidas (de otros pares)" |
3949 | 3965 | ||
3950 | #: src/fs/gnunet-service-fs_cp.c:1245 | 3966 | #: src/fs/gnunet-service-fs_cp.c:1256 |
3951 | msgid "# requests dropped due to initiator not being connected" | 3967 | msgid "# requests dropped due to initiator not being connected" |
3952 | msgstr "# peticiones omitidas debido a que el iniciador no está conectado" | 3968 | msgstr "# peticiones omitidas debido a que el iniciador no está conectado" |
3953 | 3969 | ||
3954 | #: src/fs/gnunet-service-fs_cp.c:1266 | 3970 | #: src/fs/gnunet-service-fs_cp.c:1277 |
3955 | msgid "# requests dropped due to missing reverse route" | 3971 | msgid "# requests dropped due to missing reverse route" |
3956 | msgstr "# peticiones omitidas debido a falta de ruta inversa" | 3972 | msgstr "# peticiones omitidas debido a falta de ruta inversa" |
3957 | 3973 | ||
3958 | #: src/fs/gnunet-service-fs_cp.c:1277 | 3974 | #: src/fs/gnunet-service-fs_cp.c:1288 |
3959 | #, fuzzy | 3975 | #, fuzzy |
3960 | msgid "# requests dropped due to full reply queue" | 3976 | msgid "# requests dropped due to full reply queue" |
3961 | msgstr "# Mensajes P2P omitidos debido a saturación de la cola" | 3977 | msgstr "# Mensajes P2P omitidos debido a saturación de la cola" |
3962 | 3978 | ||
3963 | #: src/fs/gnunet-service-fs_cp.c:1329 | 3979 | #: src/fs/gnunet-service-fs_cp.c:1340 |
3964 | msgid "# requests dropped due TTL underflow" | 3980 | msgid "# requests dropped due TTL underflow" |
3965 | msgstr "# peticiones omitidas debido a expiración del TTL" | 3981 | msgstr "# peticiones omitidas debido a expiración del TTL" |
3966 | 3982 | ||
3967 | #: src/fs/gnunet-service-fs_cp.c:1353 | 3983 | #: src/fs/gnunet-service-fs_cp.c:1365 |
3968 | msgid "# requests dropped due to higher-TTL request" | 3984 | msgid "# requests dropped due to higher-TTL request" |
3969 | msgstr "# peticiones omitidas debido a una petición de mayor TTL" | 3985 | msgstr "# peticiones omitidas debido a una petición de mayor TTL" |
3970 | 3986 | ||
3971 | #: src/fs/gnunet-service-fs_cp.c:1382 | 3987 | #: src/fs/gnunet-service-fs_cp.c:1402 |
3972 | msgid "# P2P query messages received and processed" | 3988 | msgid "# P2P query messages received and processed" |
3973 | msgstr "# mensajes de búsqueda P2P recibidos y procesados" | 3989 | msgstr "# mensajes de búsqueda P2P recibidos y procesados" |
3974 | 3990 | ||
3975 | #: src/fs/gnunet-service-fs_cp.c:1821 | 3991 | #: src/fs/gnunet-service-fs_cp.c:1841 |
3976 | msgid "# migration stop messages sent" | 3992 | msgid "# migration stop messages sent" |
3977 | msgstr "# mensajes de detención de migración enviados" | 3993 | msgstr "# mensajes de detención de migración enviados" |
3978 | 3994 | ||
@@ -4313,7 +4329,7 @@ msgstr "" | |||
4313 | msgid "GNUnet DNS-to-GNS proxy (a DNS server)" | 4329 | msgid "GNUnet DNS-to-GNS proxy (a DNS server)" |
4314 | msgstr "Pasarela GNUnet DNS-a-GNS (un servidor DNS)" | 4330 | msgstr "Pasarela GNUnet DNS-a-GNS (un servidor DNS)" |
4315 | 4331 | ||
4316 | #: src/gns/gnunet-gns.c:215 | 4332 | #: src/gns/gnunet-gns.c:215 src/gns/plugin_rest_gns.c:334 |
4317 | #, c-format | 4333 | #, c-format |
4318 | msgid "Invalid typename specified, assuming `ANY'\n" | 4334 | msgid "Invalid typename specified, assuming `ANY'\n" |
4319 | msgstr "" | 4335 | msgstr "" |
@@ -4329,6 +4345,7 @@ msgid "Ego for `%s' not found, cannot perform lookup.\n" | |||
4329 | msgstr "" | 4345 | msgstr "" |
4330 | 4346 | ||
4331 | #: src/gns/gnunet-gns.c:353 src/gns/gnunet-gns-helper-service-w32.c:798 | 4347 | #: src/gns/gnunet-gns.c:353 src/gns/gnunet-gns-helper-service-w32.c:798 |
4348 | #: src/gns/plugin_rest_gns.c:459 | ||
4332 | #, c-format | 4349 | #, c-format |
4333 | msgid "" | 4350 | msgid "" |
4334 | "Ego for `gns-master' not found, cannot perform lookup. Did you run gnunet-" | 4351 | "Ego for `gns-master' not found, cannot perform lookup. Did you run gnunet-" |
@@ -4469,7 +4486,7 @@ msgstr "No se pudo importar el certificado %s\n" | |||
4469 | msgid "Failed to start HTTPS server for `%s'\n" | 4486 | msgid "Failed to start HTTPS server for `%s'\n" |
4470 | msgstr "Se produjo un fallo al iniciar el servidor HTTP\n" | 4487 | msgstr "Se produjo un fallo al iniciar el servidor HTTP\n" |
4471 | 4488 | ||
4472 | #: src/gns/gnunet-gns-proxy.c:2225 | 4489 | #: src/gns/gnunet-gns-proxy.c:2225 src/rest/gnunet-rest-server.c:529 |
4473 | #, fuzzy | 4490 | #, fuzzy |
4474 | msgid "Failed to pass client to MHD\n" | 4491 | msgid "Failed to pass client to MHD\n" |
4475 | msgstr "Se produjo un fallo al conectar con GNS\n" | 4492 | msgstr "Se produjo un fallo al conectar con GNS\n" |
@@ -4573,21 +4590,21 @@ msgstr "" | |||
4573 | msgid "GNS lookup resulted in DNS name that is too long (`%s')\n" | 4590 | msgid "GNS lookup resulted in DNS name that is too long (`%s')\n" |
4574 | msgstr "" | 4591 | msgstr "" |
4575 | 4592 | ||
4576 | #: src/gns/gnunet-service-gns_resolver.c:1886 | 4593 | #: src/gns/gnunet-service-gns_resolver.c:1891 |
4577 | msgid "GNS lookup recursion failed (no delegation record found)\n" | 4594 | msgid "GNS lookup recursion failed (no delegation record found)\n" |
4578 | msgstr "" | 4595 | msgstr "" |
4579 | 4596 | ||
4580 | #: src/gns/gnunet-service-gns_resolver.c:1910 | 4597 | #: src/gns/gnunet-service-gns_resolver.c:1915 |
4581 | #, fuzzy, c-format | 4598 | #, fuzzy, c-format |
4582 | msgid "Failed to cache GNS resolution: %s\n" | 4599 | msgid "Failed to cache GNS resolution: %s\n" |
4583 | msgstr "Se produjo un fallo al mandar la petición DNS a %s\n" | 4600 | msgstr "Se produjo un fallo al mandar la petición DNS a %s\n" |
4584 | 4601 | ||
4585 | #: src/gns/gnunet-service-gns_resolver.c:2192 | 4602 | #: src/gns/gnunet-service-gns_resolver.c:2197 |
4586 | #, c-format | 4603 | #, c-format |
4587 | msgid "Zone %s was revoked, resolution fails\n" | 4604 | msgid "Zone %s was revoked, resolution fails\n" |
4588 | msgstr "" | 4605 | msgstr "" |
4589 | 4606 | ||
4590 | #: src/gns/gnunet-service-gns_resolver.c:2341 | 4607 | #: src/gns/gnunet-service-gns_resolver.c:2346 |
4591 | #, c-format | 4608 | #, c-format |
4592 | msgid "Hostname `%s' is not well-formed, resolution fails\n" | 4609 | msgid "Hostname `%s' is not well-formed, resolution fails\n" |
4593 | msgstr "" | 4610 | msgstr "" |
@@ -4619,6 +4636,15 @@ msgstr "No se pudo procesar la cadena de registro VPN «%s»\n" | |||
4619 | msgid "Unable to parse BOX record string `%s'\n" | 4636 | msgid "Unable to parse BOX record string `%s'\n" |
4620 | msgstr "No se pudo procesar la cadena de registro VPN «%s»\n" | 4637 | msgstr "No se pudo procesar la cadena de registro VPN «%s»\n" |
4621 | 4638 | ||
4639 | #: src/gns/plugin_rest_gns.c:422 | ||
4640 | msgid "Ego for not found, cannot perform lookup.\n" | ||
4641 | msgstr "" | ||
4642 | |||
4643 | #: src/gns/plugin_rest_gns.c:652 | ||
4644 | #, fuzzy | ||
4645 | msgid "GNS REST API initialized\n" | ||
4646 | msgstr "Conexión fallida\n" | ||
4647 | |||
4622 | #: src/gnsrecord/plugin_gnsrecord_dns.c:291 | 4648 | #: src/gnsrecord/plugin_gnsrecord_dns.c:291 |
4623 | #, c-format | 4649 | #, c-format |
4624 | msgid "Unable to parse IPv4 address `%s'\n" | 4650 | msgid "Unable to parse IPv4 address `%s'\n" |
@@ -5181,6 +5207,11 @@ msgstr "Se produjo un fallo al borrar el fichero de configuración %s\n" | |||
5181 | msgid "Failed to create directory `%s' for storing egos\n" | 5207 | msgid "Failed to create directory `%s' for storing egos\n" |
5182 | msgstr "Se produjo un fallo al leer el directorio «%s»\n" | 5208 | msgstr "Se produjo un fallo al leer el directorio «%s»\n" |
5183 | 5209 | ||
5210 | #: src/identity/plugin_rest_identity.c:803 | ||
5211 | #, fuzzy | ||
5212 | msgid "Identity REST API initialized\n" | ||
5213 | msgstr "Conexión fallida\n" | ||
5214 | |||
5184 | #: src/mysql/mysql.c:174 | 5215 | #: src/mysql/mysql.c:174 |
5185 | #, c-format | 5216 | #, c-format |
5186 | msgid "Trying to use file `%s' for MySQL configuration.\n" | 5217 | msgid "Trying to use file `%s' for MySQL configuration.\n" |
@@ -5206,9 +5237,9 @@ msgstr "\tRegistro corrupto o no soportado del tipo %u\n" | |||
5206 | msgid "You must specify which zone should be accessed\n" | 5237 | msgid "You must specify which zone should be accessed\n" |
5207 | msgstr "Se debe especificar un apodo\n" | 5238 | msgstr "Se debe especificar un apodo\n" |
5208 | 5239 | ||
5209 | #: src/namecache/gnunet-namecache.c:195 src/namestore/gnunet-namestore.c:844 | 5240 | #: src/namecache/gnunet-namecache.c:195 |
5210 | #, fuzzy, c-format | 5241 | #, fuzzy, c-format |
5211 | msgid "Invalid public key for reverse lookup `%s'\n" | 5242 | msgid "Invalid public key for zone `%s'\n" |
5212 | msgstr "Parámetro no válido «%s»\n" | 5243 | msgstr "Parámetro no válido «%s»\n" |
5213 | 5244 | ||
5214 | #: src/namecache/gnunet-namecache.c:203 | 5245 | #: src/namecache/gnunet-namecache.c:203 |
@@ -5245,11 +5276,13 @@ msgid "Adding record failed: %s\n" | |||
5245 | msgstr "No se pudo añadir el registro: %s\n" | 5276 | msgstr "No se pudo añadir el registro: %s\n" |
5246 | 5277 | ||
5247 | #: src/namestore/gnunet-namestore.c:332 | 5278 | #: src/namestore/gnunet-namestore.c:332 |
5279 | #: src/namestore/plugin_rest_namestore.c:505 | ||
5248 | #, fuzzy, c-format | 5280 | #, fuzzy, c-format |
5249 | msgid "Deleting record failed, record does not exist%s%s\n" | 5281 | msgid "Deleting record failed, record does not exist%s%s\n" |
5250 | msgstr "No se pudo borrar el registro: %s\n" | 5282 | msgstr "No se pudo borrar el registro: %s\n" |
5251 | 5283 | ||
5252 | #: src/namestore/gnunet-namestore.c:339 | 5284 | #: src/namestore/gnunet-namestore.c:339 |
5285 | #: src/namestore/plugin_rest_namestore.c:514 | ||
5253 | #, fuzzy, c-format | 5286 | #, fuzzy, c-format |
5254 | msgid "Deleting record failed%s%s\n" | 5287 | msgid "Deleting record failed%s%s\n" |
5255 | msgstr "No se pudo borrar el registro: %s\n" | 5288 | msgstr "No se pudo borrar el registro: %s\n" |
@@ -5267,6 +5300,7 @@ msgid "Records already exist under `%s', cannot add `%s' record.\n" | |||
5267 | msgstr "" | 5300 | msgstr "" |
5268 | 5301 | ||
5269 | #: src/namestore/gnunet-namestore.c:628 | 5302 | #: src/namestore/gnunet-namestore.c:628 |
5303 | #: src/namestore/plugin_rest_namestore.c:538 | ||
5270 | #, c-format | 5304 | #, c-format |
5271 | msgid "There are no records under label `%s' that could be deleted.\n" | 5305 | msgid "There are no records under label `%s' that could be deleted.\n" |
5272 | msgstr "" | 5306 | msgstr "" |
@@ -5284,6 +5318,7 @@ msgstr "No se han proporcionado opciones\n" | |||
5284 | 5318 | ||
5285 | #: src/namestore/gnunet-namestore.c:719 | 5319 | #: src/namestore/gnunet-namestore.c:719 |
5286 | #: src/namestore/gnunet-namestore-fcfsd.c:984 | 5320 | #: src/namestore/gnunet-namestore-fcfsd.c:984 |
5321 | #: src/namestore/plugin_rest_namestore.c:821 | ||
5287 | msgid "Failed to connect to namestore\n" | 5322 | msgid "Failed to connect to namestore\n" |
5288 | msgstr "Se produjo un fallo al conectar con el almacén de nombres\n" | 5323 | msgstr "Se produjo un fallo al conectar con el almacén de nombres\n" |
5289 | 5324 | ||
@@ -5300,11 +5335,14 @@ msgid "add" | |||
5300 | msgstr "añadir" | 5335 | msgstr "añadir" |
5301 | 5336 | ||
5302 | #: src/namestore/gnunet-namestore.c:745 | 5337 | #: src/namestore/gnunet-namestore.c:745 |
5338 | #: src/namestore/plugin_rest_namestore.c:608 | ||
5303 | #, c-format | 5339 | #, c-format |
5304 | msgid "Unsupported type `%s'\n" | 5340 | msgid "Unsupported type `%s'\n" |
5305 | msgstr "Tipo no soportado «%s»\n" | 5341 | msgstr "Tipo no soportado «%s»\n" |
5306 | 5342 | ||
5307 | #: src/namestore/gnunet-namestore.c:765 | 5343 | #: src/namestore/gnunet-namestore.c:765 |
5344 | #: src/namestore/plugin_rest_namestore.c:626 | ||
5345 | #: src/namestore/plugin_rest_namestore.c:666 | ||
5308 | #, c-format | 5346 | #, c-format |
5309 | msgid "Value `%s' invalid for record type `%s'\n" | 5347 | msgid "Value `%s' invalid for record type `%s'\n" |
5310 | msgstr "Valor «%s» no válido para el tipo de registro «%s»\n" | 5348 | msgstr "Valor «%s» no válido para el tipo de registro «%s»\n" |
@@ -5318,6 +5356,11 @@ msgstr "Formato de tiempo no válido «%s»\n" | |||
5318 | msgid "del" | 5356 | msgid "del" |
5319 | msgstr "borrar" | 5357 | msgstr "borrar" |
5320 | 5358 | ||
5359 | #: src/namestore/gnunet-namestore.c:844 | ||
5360 | #, fuzzy, c-format | ||
5361 | msgid "Invalid public key for reverse lookup `%s'\n" | ||
5362 | msgstr "Parámetro no válido «%s»\n" | ||
5363 | |||
5321 | #: src/namestore/gnunet-namestore.c:868 | 5364 | #: src/namestore/gnunet-namestore.c:868 |
5322 | #: src/peerinfo-tool/gnunet-peerinfo.c:817 | 5365 | #: src/peerinfo-tool/gnunet-peerinfo.c:817 |
5323 | #, c-format | 5366 | #, c-format |
@@ -5330,21 +5373,25 @@ msgid "Invalid nick `%s'\n" | |||
5330 | msgstr "URI no válida: «%s»\n" | 5373 | msgstr "URI no válida: «%s»\n" |
5331 | 5374 | ||
5332 | #: src/namestore/gnunet-namestore.c:943 | 5375 | #: src/namestore/gnunet-namestore.c:943 |
5376 | #: src/namestore/plugin_rest_namestore.c:851 | ||
5333 | #, fuzzy, c-format | 5377 | #, fuzzy, c-format |
5334 | msgid "Ego `%s' not known to identity service\n" | 5378 | msgid "Ego `%s' not known to identity service\n" |
5335 | msgstr "'%s': servicio desconocido: %s\n" | 5379 | msgstr "'%s': servicio desconocido: %s\n" |
5336 | 5380 | ||
5337 | #: src/namestore/gnunet-namestore.c:970 | 5381 | #: src/namestore/gnunet-namestore.c:970 |
5382 | #: src/namestore/plugin_rest_namestore.c:878 | ||
5338 | #, fuzzy, c-format | 5383 | #, fuzzy, c-format |
5339 | msgid "No default ego configured in identity service\n" | 5384 | msgid "No default ego configured in identity service\n" |
5340 | msgstr "'%s': servicio desconocido: %s\n" | 5385 | msgstr "'%s': servicio desconocido: %s\n" |
5341 | 5386 | ||
5342 | #: src/namestore/gnunet-namestore.c:1006 | 5387 | #: src/namestore/gnunet-namestore.c:1006 |
5388 | #: src/namestore/plugin_rest_namestore.c:917 | ||
5343 | #, fuzzy, c-format | 5389 | #, fuzzy, c-format |
5344 | msgid "Identity service is not running\n" | 5390 | msgid "Identity service is not running\n" |
5345 | msgstr "El servicio «%s» no está ejecutandose\n" | 5391 | msgstr "El servicio «%s» no está ejecutandose\n" |
5346 | 5392 | ||
5347 | #: src/namestore/gnunet-namestore.c:1018 | 5393 | #: src/namestore/gnunet-namestore.c:1018 |
5394 | #: src/namestore/plugin_rest_namestore.c:946 | ||
5348 | #, fuzzy, c-format | 5395 | #, fuzzy, c-format |
5349 | msgid "Cannot connect to identity service\n" | 5396 | msgid "Cannot connect to identity service\n" |
5350 | msgstr "¡No se pudo conectar al servicio %s!\n" | 5397 | msgstr "¡No se pudo conectar al servicio %s!\n" |
@@ -5481,6 +5528,11 @@ msgstr "Se produjo un fallo al crear el espacio de nombres «%s»\n" | |||
5481 | msgid "Namestore failed to store record\n" | 5528 | msgid "Namestore failed to store record\n" |
5482 | msgstr "El almacén de nombres no pudo añadir el registro\n" | 5529 | msgstr "El almacén de nombres no pudo añadir el registro\n" |
5483 | 5530 | ||
5531 | #: src/namestore/plugin_rest_namestore.c:1023 | ||
5532 | #, fuzzy | ||
5533 | msgid "Namestore REST API initialized\n" | ||
5534 | msgstr "Conexión fallida\n" | ||
5535 | |||
5484 | #: src/nat/gnunet-nat-server.c:279 | 5536 | #: src/nat/gnunet-nat-server.c:279 |
5485 | #, c-format | 5537 | #, c-format |
5486 | msgid "Please pass valid port number as the first argument! (got `%s')\n" | 5538 | msgid "Please pass valid port number as the first argument! (got `%s')\n" |
@@ -5742,7 +5794,7 @@ msgid "Measure quality and performance of the NSE service." | |||
5742 | msgstr "Medir la calidad y rendimiento del servicio NSE." | 5794 | msgstr "Medir la calidad y rendimiento del servicio NSE." |
5743 | 5795 | ||
5744 | #: src/nse/gnunet-service-nse.c:1537 | 5796 | #: src/nse/gnunet-service-nse.c:1537 |
5745 | #: src/revocation/gnunet-service-revocation.c:815 src/util/gnunet-scrypt.c:260 | 5797 | #: src/revocation/gnunet-service-revocation.c:827 src/util/gnunet-scrypt.c:260 |
5746 | msgid "Value is too large.\n" | 5798 | msgid "Value is too large.\n" |
5747 | msgstr "" | 5799 | msgstr "" |
5748 | 5800 | ||
@@ -6294,6 +6346,16 @@ msgstr "Analizador de rendimiento para la biblioteca de expresiones regulares" | |||
6294 | msgid "Regex `%s' is too long!\n" | 6346 | msgid "Regex `%s' is too long!\n" |
6295 | msgstr "El servicio «%s» no está ejecutandose\n" | 6347 | msgstr "El servicio «%s» no está ejecutandose\n" |
6296 | 6348 | ||
6349 | #: src/rest/gnunet-rest-server.c:766 | ||
6350 | #, fuzzy | ||
6351 | msgid "listen on specified port (default: 7776)" | ||
6352 | msgstr "escuchar en el puerto especificado (predeterminado: 7777)" | ||
6353 | |||
6354 | #: src/rest/gnunet-rest-server.c:783 | ||
6355 | #, fuzzy | ||
6356 | msgid "GNUnet REST server" | ||
6357 | msgstr "Herramienta de acceso GNUnet GNS" | ||
6358 | |||
6297 | #: src/revocation/gnunet-revocation.c:126 | 6359 | #: src/revocation/gnunet-revocation.c:126 |
6298 | #, fuzzy, c-format | 6360 | #, fuzzy, c-format |
6299 | msgid "Key `%s' is valid\n" | 6361 | msgid "Key `%s' is valid\n" |
@@ -6426,11 +6488,11 @@ msgid "# revocation set unions completed" | |||
6426 | msgstr "# transmisiones de fragmentos completadas" | 6488 | msgstr "# transmisiones de fragmentos completadas" |
6427 | 6489 | ||
6428 | #: src/revocation/gnunet-service-revocation.c:493 | 6490 | #: src/revocation/gnunet-service-revocation.c:493 |
6429 | #: src/revocation/gnunet-service-revocation.c:747 | 6491 | #: src/revocation/gnunet-service-revocation.c:759 |
6430 | msgid "SET service crashed, terminating revocation service\n" | 6492 | msgid "SET service crashed, terminating revocation service\n" |
6431 | msgstr "" | 6493 | msgstr "" |
6432 | 6494 | ||
6433 | #: src/revocation/gnunet-service-revocation.c:839 | 6495 | #: src/revocation/gnunet-service-revocation.c:851 |
6434 | #, fuzzy | 6496 | #, fuzzy |
6435 | msgid "Could not open revocation database file!" | 6497 | msgid "Could not open revocation database file!" |
6436 | msgstr "No se pudo conectar con el almacén de datos." | 6498 | msgstr "No se pudo conectar con el almacén de datos." |
@@ -8231,7 +8293,7 @@ msgid "Found %u addresses to report to NAT service\n" | |||
8231 | msgstr "Encontradas %u direcciones para comunicar al servicio NAT\n" | 8293 | msgstr "Encontradas %u direcciones para comunicar al servicio NAT\n" |
8232 | 8294 | ||
8233 | #: src/transport/plugin_transport_http_server.c:2825 | 8295 | #: src/transport/plugin_transport_http_server.c:2825 |
8234 | #: src/transport/plugin_transport_udp.c:3336 | 8296 | #: src/transport/plugin_transport_udp.c:3335 |
8235 | msgid "Disabling IPv6 since it is not supported on this system!\n" | 8297 | msgid "Disabling IPv6 since it is not supported on this system!\n" |
8236 | msgstr "¡Deshabilitando IPv6 ya que no está soportado en este sistema!\n" | 8298 | msgstr "¡Deshabilitando IPv6 ya que no está soportado en este sistema!\n" |
8237 | 8299 | ||
@@ -8466,7 +8528,7 @@ msgstr "" | |||
8466 | "Se produjo un fallo al establecer la opción de «broadcast» IPv4 para el " | 8528 | "Se produjo un fallo al establecer la opción de «broadcast» IPv4 para el " |
8467 | "«socket» en el puerto %d\n" | 8529 | "«socket» en el puerto %d\n" |
8468 | 8530 | ||
8469 | #: src/transport/plugin_transport_udp.c:3082 | 8531 | #: src/transport/plugin_transport_udp.c:3081 |
8470 | #, c-format | 8532 | #, c-format |
8471 | msgid "" | 8533 | msgid "" |
8472 | "UDP could not transmit message to `%s': Network seems down, please check " | 8534 | "UDP could not transmit message to `%s': Network seems down, please check " |
@@ -8475,7 +8537,7 @@ msgstr "" | |||
8475 | "UDP no pudo transmitir el mensaje a «%s»: La red parece caída, por favor, " | 8537 | "UDP no pudo transmitir el mensaje a «%s»: La red parece caída, por favor, " |
8476 | "compruebe su configuración de red\n" | 8538 | "compruebe su configuración de red\n" |
8477 | 8539 | ||
8478 | #: src/transport/plugin_transport_udp.c:3096 | 8540 | #: src/transport/plugin_transport_udp.c:3095 |
8479 | #, fuzzy | 8541 | #, fuzzy |
8480 | msgid "" | 8542 | msgid "" |
8481 | "UDP could not transmit IPv6 message! Please check your network configuration " | 8543 | "UDP could not transmit IPv6 message! Please check your network configuration " |
@@ -8485,37 +8547,37 @@ msgstr "" | |||
8485 | "configuración de red y deshabilite IPv6 si su conexión carece de una " | 8547 | "configuración de red y deshabilite IPv6 si su conexión carece de una " |
8486 | "dirección IPv6 global\n" | 8548 | "dirección IPv6 global\n" |
8487 | 8549 | ||
8488 | #: src/transport/plugin_transport_udp.c:3412 | 8550 | #: src/transport/plugin_transport_udp.c:3411 |
8489 | #: src/transport/plugin_transport_udp.c:3511 | 8551 | #: src/transport/plugin_transport_udp.c:3510 |
8490 | #, fuzzy, c-format | 8552 | #, fuzzy, c-format |
8491 | msgid "Failed to bind UDP socket to %s: %s\n" | 8553 | msgid "Failed to bind UDP socket to %s: %s\n" |
8492 | msgstr "Se produjo un fallo al abrir los «sockets» UDP\n" | 8554 | msgstr "Se produjo un fallo al abrir los «sockets» UDP\n" |
8493 | 8555 | ||
8494 | #: src/transport/plugin_transport_udp.c:3430 | 8556 | #: src/transport/plugin_transport_udp.c:3429 |
8495 | #, fuzzy | 8557 | #, fuzzy |
8496 | msgid "Disabling IPv4 since it is not supported on this system!\n" | 8558 | msgid "Disabling IPv4 since it is not supported on this system!\n" |
8497 | msgstr "¡Deshabilitando IPv6 ya que no está soportado en este sistema!\n" | 8559 | msgstr "¡Deshabilitando IPv6 ya que no está soportado en este sistema!\n" |
8498 | 8560 | ||
8499 | #: src/transport/plugin_transport_udp.c:3521 | 8561 | #: src/transport/plugin_transport_udp.c:3520 |
8500 | msgid "Failed to open UDP sockets\n" | 8562 | msgid "Failed to open UDP sockets\n" |
8501 | msgstr "Se produjo un fallo al abrir los «sockets» UDP\n" | 8563 | msgstr "Se produjo un fallo al abrir los «sockets» UDP\n" |
8502 | 8564 | ||
8503 | #: src/transport/plugin_transport_udp.c:3592 | 8565 | #: src/transport/plugin_transport_udp.c:3591 |
8504 | #: src/transport/plugin_transport_udp.c:3606 | 8566 | #: src/transport/plugin_transport_udp.c:3605 |
8505 | msgid "must be in [0,65535]" | 8567 | msgid "must be in [0,65535]" |
8506 | msgstr "" | 8568 | msgstr "" |
8507 | 8569 | ||
8508 | #: src/transport/plugin_transport_udp.c:3638 | 8570 | #: src/transport/plugin_transport_udp.c:3637 |
8509 | #, fuzzy | 8571 | #, fuzzy |
8510 | msgid "must be valid IPv4 address" | 8572 | msgid "must be valid IPv4 address" |
8511 | msgstr "«%s» no es una dirección IP válida.\n" | 8573 | msgstr "«%s» no es una dirección IP válida.\n" |
8512 | 8574 | ||
8513 | #: src/transport/plugin_transport_udp.c:3665 | 8575 | #: src/transport/plugin_transport_udp.c:3664 |
8514 | #, fuzzy | 8576 | #, fuzzy |
8515 | msgid "must be valid IPv6 address" | 8577 | msgid "must be valid IPv6 address" |
8516 | msgstr "«%s» no es una dirección IP válida.\n" | 8578 | msgstr "«%s» no es una dirección IP válida.\n" |
8517 | 8579 | ||
8518 | #: src/transport/plugin_transport_udp.c:3731 | 8580 | #: src/transport/plugin_transport_udp.c:3730 |
8519 | #, fuzzy | 8581 | #, fuzzy |
8520 | msgid "Failed to create UDP network sockets\n" | 8582 | msgid "Failed to create UDP network sockets\n" |
8521 | msgstr "Se produjo un fallo al crear una nueva firma" | 8583 | msgstr "Se produjo un fallo al crear una nueva firma" |
@@ -8745,7 +8807,7 @@ msgstr "" | |||
8745 | msgid "Syntax error while deserializing in line %u\n" | 8807 | msgid "Syntax error while deserializing in line %u\n" |
8746 | msgstr "Error de sintaxis en la línea %u mientras se deserializaba\n" | 8808 | msgstr "Error de sintaxis en la línea %u mientras se deserializaba\n" |
8747 | 8809 | ||
8748 | #: src/util/configuration.c:1026 | 8810 | #: src/util/configuration.c:1025 |
8749 | #, c-format | 8811 | #, c-format |
8750 | msgid "" | 8812 | msgid "" |
8751 | "Configuration value '%s' for '%s' in section '%s' is not in set of legal " | 8813 | "Configuration value '%s' for '%s' in section '%s' is not in set of legal " |
@@ -8754,17 +8816,17 @@ msgstr "" | |||
8754 | "El valor de configuración «%s» para «%s» de la sección «%s» no está dentro " | 8816 | "El valor de configuración «%s» para «%s» de la sección «%s» no está dentro " |
8755 | "de las opciones legales\n" | 8817 | "de las opciones legales\n" |
8756 | 8818 | ||
8757 | #: src/util/configuration.c:1145 | 8819 | #: src/util/configuration.c:1144 |
8758 | #, c-format | 8820 | #, c-format |
8759 | msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n" | 8821 | msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n" |
8760 | msgstr "" | 8822 | msgstr "" |
8761 | 8823 | ||
8762 | #: src/util/configuration.c:1177 | 8824 | #: src/util/configuration.c:1176 |
8763 | #, fuzzy, c-format | 8825 | #, fuzzy, c-format |
8764 | msgid "Missing closing `%s' in option `%s'\n" | 8826 | msgid "Missing closing `%s' in option `%s'\n" |
8765 | msgstr "Falta la opción «%s» para la operación «%s»\n" | 8827 | msgstr "Falta la opción «%s» para la operación «%s»\n" |
8766 | 8828 | ||
8767 | #: src/util/configuration.c:1251 | 8829 | #: src/util/configuration.c:1250 |
8768 | #, c-format | 8830 | #, c-format |
8769 | msgid "" | 8831 | msgid "" |
8770 | "Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined " | 8832 | "Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined " |
@@ -8790,23 +8852,23 @@ msgstr "" | |||
8790 | "El tamaño del fichero en disco es incorrecto para este «Bloom " | 8852 | "El tamaño del fichero en disco es incorrecto para este «Bloom " |
8791 | "filter» (esperado %llu, tiene %llu)\n" | 8853 | "filter» (esperado %llu, tiene %llu)\n" |
8792 | 8854 | ||
8793 | #: src/util/crypto_ecc.c:731 src/util/crypto_ecc.c:769 | 8855 | #: src/util/crypto_ecc.c:733 src/util/crypto_ecc.c:771 |
8794 | #: src/util/crypto_ecc.c:887 src/util/crypto_ecc.c:925 | 8856 | #: src/util/crypto_ecc.c:889 src/util/crypto_ecc.c:927 |
8795 | #, c-format | 8857 | #, c-format |
8796 | msgid "Could not acquire lock on file `%s': %s...\n" | 8858 | msgid "Could not acquire lock on file `%s': %s...\n" |
8797 | msgstr "No se pudo bloquear el fichero «%s»: %s...\n" | 8859 | msgstr "No se pudo bloquear el fichero «%s»: %s...\n" |
8798 | 8860 | ||
8799 | #: src/util/crypto_ecc.c:736 src/util/crypto_ecc.c:892 | 8861 | #: src/util/crypto_ecc.c:738 src/util/crypto_ecc.c:894 |
8800 | msgid "Creating a new private key. This may take a while.\n" | 8862 | msgid "Creating a new private key. This may take a while.\n" |
8801 | msgstr "Generando una clave privada nueva. Esto puede tomar un tiempo.\n" | 8863 | msgstr "Generando una clave privada nueva. Esto puede tomar un tiempo.\n" |
8802 | 8864 | ||
8803 | #: src/util/crypto_ecc.c:773 src/util/crypto_ecc.c:929 | 8865 | #: src/util/crypto_ecc.c:775 src/util/crypto_ecc.c:931 |
8804 | msgid "This may be ok if someone is currently generating a private key.\n" | 8866 | msgid "This may be ok if someone is currently generating a private key.\n" |
8805 | msgstr "" | 8867 | msgstr "" |
8806 | "Esto puede estar bien si alguien está actualmente generando una clave " | 8868 | "Esto puede estar bien si alguien está actualmente generando una clave " |
8807 | "privada.\n" | 8869 | "privada.\n" |
8808 | 8870 | ||
8809 | #: src/util/crypto_ecc.c:803 src/util/crypto_ecc.c:959 | 8871 | #: src/util/crypto_ecc.c:805 src/util/crypto_ecc.c:961 |
8810 | #, c-format | 8872 | #, c-format |
8811 | msgid "" | 8873 | msgid "" |
8812 | "When trying to read key file `%s' I found %u bytes but I need at least %u.\n" | 8874 | "When trying to read key file `%s' I found %u bytes but I need at least %u.\n" |
@@ -8814,33 +8876,33 @@ msgstr "" | |||
8814 | "Cuando se intentaba leer el fichero de claves «%s» se encontraron %u bytes " | 8876 | "Cuando se intentaba leer el fichero de claves «%s» se encontraron %u bytes " |
8815 | "pero al menos %u son necesarios.\n" | 8877 | "pero al menos %u son necesarios.\n" |
8816 | 8878 | ||
8817 | #: src/util/crypto_ecc.c:807 src/util/crypto_ecc.c:963 | 8879 | #: src/util/crypto_ecc.c:809 src/util/crypto_ecc.c:965 |
8818 | msgid "This may be ok if someone is currently generating a key.\n" | 8880 | msgid "This may be ok if someone is currently generating a key.\n" |
8819 | msgstr "" | 8881 | msgstr "" |
8820 | "Esto puede ser correcto si alguien está actualmente generando una clave de " | 8882 | "Esto puede ser correcto si alguien está actualmente generando una clave de " |
8821 | "máquina.\n" | 8883 | "máquina.\n" |
8822 | 8884 | ||
8823 | #: src/util/crypto_ecc.c:1045 | 8885 | #: src/util/crypto_ecc.c:1047 |
8824 | #, fuzzy | 8886 | #, fuzzy |
8825 | msgid "Could not load peer's private key\n" | 8887 | msgid "Could not load peer's private key\n" |
8826 | msgstr "No se pudo acceder a la clave de máquina.\n" | 8888 | msgstr "No se pudo acceder a la clave de máquina.\n" |
8827 | 8889 | ||
8828 | #: src/util/crypto_ecc.c:1149 | 8890 | #: src/util/crypto_ecc.c:1151 |
8829 | #, c-format | 8891 | #, c-format |
8830 | msgid "ECC signing failed at %s:%d: %s\n" | 8892 | msgid "ECC signing failed at %s:%d: %s\n" |
8831 | msgstr "El firmado ECC falló en %s:%d: %s\n" | 8893 | msgstr "El firmado ECC falló en %s:%d: %s\n" |
8832 | 8894 | ||
8833 | #: src/util/crypto_ecc.c:1199 | 8895 | #: src/util/crypto_ecc.c:1201 |
8834 | #, fuzzy, c-format | 8896 | #, fuzzy, c-format |
8835 | msgid "EdDSA signing failed at %s:%d: %s\n" | 8897 | msgid "EdDSA signing failed at %s:%d: %s\n" |
8836 | msgstr "El firmado ECC falló en %s:%d: %s\n" | 8898 | msgstr "El firmado ECC falló en %s:%d: %s\n" |
8837 | 8899 | ||
8838 | #: src/util/crypto_ecc.c:1273 | 8900 | #: src/util/crypto_ecc.c:1275 |
8839 | #, fuzzy, c-format | 8901 | #, fuzzy, c-format |
8840 | msgid "ECDSA signature verification failed at %s:%d: %s\n" | 8902 | msgid "ECDSA signature verification failed at %s:%d: %s\n" |
8841 | msgstr "La verificación de la firma RSA fallo en %s:%d: %s\n" | 8903 | msgstr "La verificación de la firma RSA fallo en %s:%d: %s\n" |
8842 | 8904 | ||
8843 | #: src/util/crypto_ecc.c:1330 | 8905 | #: src/util/crypto_ecc.c:1332 |
8844 | #, fuzzy, c-format | 8906 | #, fuzzy, c-format |
8845 | msgid "EdDSA signature verification failed at %s:%d: %s\n" | 8907 | msgid "EdDSA signature verification failed at %s:%d: %s\n" |
8846 | msgstr "La verificación de la firma RSA fallo en %s:%d: %s\n" | 8908 | msgstr "La verificación de la firma RSA fallo en %s:%d: %s\n" |
@@ -8850,17 +8912,17 @@ msgstr "La verificación de la firma RSA fallo en %s:%d: %s\n" | |||
8850 | msgid "libgcrypt has not the expected version (version %s is required).\n" | 8912 | msgid "libgcrypt has not the expected version (version %s is required).\n" |
8851 | msgstr "libgcrypt no tiene la versión esperada (se necesita la versión %s).\n" | 8913 | msgstr "libgcrypt no tiene la versión esperada (se necesita la versión %s).\n" |
8852 | 8914 | ||
8853 | #: src/util/crypto_rsa.c:809 | 8915 | #: src/util/crypto_rsa.c:825 |
8854 | #, c-format | 8916 | #, c-format |
8855 | msgid "RSA signature verification failed at %s:%d: %s\n" | 8917 | msgid "RSA signature verification failed at %s:%d: %s\n" |
8856 | msgstr "La verificación de la firma RSA fallo en %s:%d: %s\n" | 8918 | msgstr "La verificación de la firma RSA fallo en %s:%d: %s\n" |
8857 | 8919 | ||
8858 | #: src/util/disk.c:1218 | 8920 | #: src/util/disk.c:1222 |
8859 | #, c-format | 8921 | #, c-format |
8860 | msgid "Expected `%s' to be a directory!\n" | 8922 | msgid "Expected `%s' to be a directory!\n" |
8861 | msgstr "¡Se esperaba que «%s» fuera un directorio!\n" | 8923 | msgstr "¡Se esperaba que «%s» fuera un directorio!\n" |
8862 | 8924 | ||
8863 | #: src/util/disk.c:1580 src/util/service.c:1328 | 8925 | #: src/util/disk.c:1584 src/util/service.c:1328 |
8864 | #, c-format | 8926 | #, c-format |
8865 | msgid "Cannot obtain information about user `%s': %s\n" | 8927 | msgid "Cannot obtain information about user `%s': %s\n" |
8866 | msgstr "No se pudo obtener información acerca del usuario «%s»: %s\n" | 8928 | msgstr "No se pudo obtener información acerca del usuario «%s»: %s\n" |
@@ -8925,7 +8987,7 @@ msgstr "%s: la opción «-W %s» no permite un parámetro\n" | |||
8925 | msgid "Use %s to get a list of options.\n" | 8987 | msgid "Use %s to get a list of options.\n" |
8926 | msgstr "Use %s para obtener una lista de opciones.\n" | 8988 | msgstr "Use %s para obtener una lista de opciones.\n" |
8927 | 8989 | ||
8928 | #: src/util/getopt_helpers.c:84 | 8990 | #: src/util/getopt_helpers.c:90 |
8929 | #, c-format | 8991 | #, c-format |
8930 | msgid "" | 8992 | msgid "" |
8931 | "Arguments mandatory for long options are also mandatory for short options.\n" | 8993 | "Arguments mandatory for long options are also mandatory for short options.\n" |
@@ -8933,12 +8995,12 @@ msgstr "" | |||
8933 | "Los parámetros obligatorios para las opciones largas también lo son para sus " | 8995 | "Los parámetros obligatorios para las opciones largas también lo son para sus " |
8934 | "versiones cortas.\n" | 8996 | "versiones cortas.\n" |
8935 | 8997 | ||
8936 | #: src/util/getopt_helpers.c:268 src/util/getopt_helpers.c:326 | 8998 | #: src/util/getopt_helpers.c:274 src/util/getopt_helpers.c:332 |
8937 | #, c-format | 8999 | #, c-format |
8938 | msgid "You must pass a number to the `%s' option.\n" | 9000 | msgid "You must pass a number to the `%s' option.\n" |
8939 | msgstr "Tienes que introducir un número en la opción «%s».\n" | 9001 | msgstr "Tienes que introducir un número en la opción «%s».\n" |
8940 | 9002 | ||
8941 | #: src/util/getopt_helpers.c:298 | 9003 | #: src/util/getopt_helpers.c:304 |
8942 | #, c-format | 9004 | #, c-format |
8943 | msgid "You must pass relative time to the `%s' option.\n" | 9005 | msgid "You must pass relative time to the `%s' option.\n" |
8944 | msgstr "Debes introducir un tiempo relativo en la opción «%s».\n" | 9006 | msgstr "Debes introducir un tiempo relativo en la opción «%s».\n" |
@@ -9188,22 +9250,22 @@ msgstr "«%s» falló para el puerto %d (%s).\n" | |||
9188 | msgid "GetExitCodeProcess failed for binary %s (%d).\n" | 9250 | msgid "GetExitCodeProcess failed for binary %s (%d).\n" |
9189 | msgstr "" | 9251 | msgstr "" |
9190 | 9252 | ||
9191 | #: src/util/plugin.c:87 | 9253 | #: src/util/plugin.c:86 |
9192 | #, c-format | 9254 | #, c-format |
9193 | msgid "Initialization of plugin mechanism failed: %s!\n" | 9255 | msgid "Initialization of plugin mechanism failed: %s!\n" |
9194 | msgstr "¡La inicialización del mecanismo de módulos falló: %s!\n" | 9256 | msgstr "¡La inicialización del mecanismo de módulos falló: %s!\n" |
9195 | 9257 | ||
9196 | #: src/util/plugin.c:148 | 9258 | #: src/util/plugin.c:151 |
9197 | #, c-format | 9259 | #, c-format |
9198 | msgid "`%s' failed to resolve method '%s' with error: %s\n" | 9260 | msgid "`%s' failed to resolve method '%s' with error: %s\n" |
9199 | msgstr "«%s» falló al resolver el método «%s» con error: %s\n" | 9261 | msgstr "«%s» falló al resolver el método «%s» con error: %s\n" |
9200 | 9262 | ||
9201 | #: src/util/plugin.c:223 | 9263 | #: src/util/plugin.c:226 |
9202 | #, c-format | 9264 | #, c-format |
9203 | msgid "`%s' failed for library `%s' with error: %s\n" | 9265 | msgid "`%s' failed for library `%s' with error: %s\n" |
9204 | msgstr "Falló «%s» para la biblioteca «%s» con error: %s\n" | 9266 | msgstr "Falló «%s» para la biblioteca «%s» con error: %s\n" |
9205 | 9267 | ||
9206 | #: src/util/plugin.c:382 | 9268 | #: src/util/plugin.c:385 |
9207 | msgid "Could not determine plugin installation path.\n" | 9269 | msgid "Could not determine plugin installation path.\n" |
9208 | msgstr "No se pudo determinar la ruta de instalación de los módulos.\n" | 9270 | msgstr "No se pudo determinar la ruta de instalación de los módulos.\n" |
9209 | 9271 | ||
@@ -9695,6 +9757,9 @@ msgstr "Violación externa del protocolo detectada en %s:%d.\n" | |||
9695 | msgid "`%s' failed on file `%s' at %s:%d with error: %s\n" | 9757 | msgid "`%s' failed on file `%s' at %s:%d with error: %s\n" |
9696 | msgstr "«%s» falló en el fichero «%s» en %s:%d con el error: %s\n" | 9758 | msgstr "«%s» falló en el fichero «%s» en %s:%d con el error: %s\n" |
9697 | 9759 | ||
9760 | #~ msgid "`%s' must be installed SUID, refusing to run\n" | ||
9761 | #~ msgstr "«%s» debe ser instalado con SUID, se niega a arrancar\n" | ||
9762 | |||
9698 | # Miguel: "Outbound" lo he traducido como salida en todo el texto. | 9763 | # Miguel: "Outbound" lo he traducido como salida en todo el texto. |
9699 | #~ msgid "Outbound quota configure for network `%s' is %llu\n" | 9764 | #~ msgid "Outbound quota configure for network `%s' is %llu\n" |
9700 | #~ msgstr "La cuota de salida configurada para la red «%s» es %llu\n" | 9765 | #~ msgstr "La cuota de salida configurada para la red «%s» es %llu\n" |
@@ -9935,10 +10000,6 @@ msgstr "«%s» falló en el fichero «%s» en %s:%d con el error: %s\n" | |||
9935 | #~ msgstr "Desconectado de %s\n" | 10000 | #~ msgstr "Desconectado de %s\n" |
9936 | 10001 | ||
9937 | #, fuzzy | 10002 | #, fuzzy |
9938 | #~ msgid "CADET initialized\n" | ||
9939 | #~ msgstr "Conexión fallida\n" | ||
9940 | |||
9941 | #, fuzzy | ||
9942 | #~ msgid "Reloading sensor definitions from directory `%s'\n" | 10003 | #~ msgid "Reloading sensor definitions from directory `%s'\n" |
9943 | #~ msgstr "Descarga los ficheros de GNUnet" | 10004 | #~ msgstr "Descarga los ficheros de GNUnet" |
9944 | 10005 | ||
@@ -7,7 +7,7 @@ msgid "" | |||
7 | msgstr "" | 7 | msgstr "" |
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: 2014-04-08 11:11+0200\n" | 10 | "POT-Creation-Date: 2015-04-27 13:05+0200\n" |
11 | "PO-Revision-Date: 2015-03-24 01:41+0100\n" | 11 | "PO-Revision-Date: 2015-03-24 01:41+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" |
@@ -21,7 +21,8 @@ msgid "Client was disconnected from arm service, trying to reconnect.\n" | |||
21 | msgstr "" | 21 | msgstr "" |
22 | 22 | ||
23 | #: src/arm/arm_monitor_api.c:321 | 23 | #: src/arm/arm_monitor_api.c:321 |
24 | msgid "Monitoring client was disconnected from arm service, trying to reconnect.\n" | 24 | msgid "" |
25 | "Monitoring client was disconnected from arm service, trying to reconnect.\n" | ||
25 | msgstr "" | 26 | msgstr "" |
26 | 27 | ||
27 | #: src/arm/gnunet-arm.c:164 | 28 | #: src/arm/gnunet-arm.c:164 |
@@ -279,173 +280,177 @@ msgstr "" | |||
279 | msgid "ARM now monitors connections to service `%s' at `%s'\n" | 280 | msgid "ARM now monitors connections to service `%s' at `%s'\n" |
280 | msgstr "" | 281 | msgstr "" |
281 | 282 | ||
282 | #: src/arm/gnunet-service-arm.c:831 | 283 | #: src/arm/gnunet-service-arm.c:835 |
283 | #, c-format | 284 | #, c-format |
284 | msgid "Preparing to stop `%s'\n" | 285 | msgid "Preparing to stop `%s'\n" |
285 | msgstr "" | 286 | msgstr "" |
286 | 287 | ||
287 | #: src/arm/gnunet-service-arm.c:1100 | 288 | #: src/arm/gnunet-service-arm.c:1105 |
288 | #, c-format | 289 | #, c-format |
289 | msgid "Restarting service `%s'.\n" | 290 | msgid "Restarting service `%s'.\n" |
290 | msgstr "" | 291 | msgstr "" |
291 | 292 | ||
292 | #: src/arm/gnunet-service-arm.c:1193 | 293 | #: src/arm/gnunet-service-arm.c:1199 |
293 | msgid "exit" | 294 | msgid "exit" |
294 | msgstr "exit" | 295 | msgstr "exit" |
295 | 296 | ||
296 | #: src/arm/gnunet-service-arm.c:1198 | 297 | #: src/arm/gnunet-service-arm.c:1204 |
297 | msgid "signal" | 298 | msgid "signal" |
298 | msgstr "signal" | 299 | msgstr "signal" |
299 | 300 | ||
300 | #: src/arm/gnunet-service-arm.c:1203 | 301 | #: src/arm/gnunet-service-arm.c:1209 |
301 | msgid "unknown" | 302 | msgid "unknown" |
302 | msgstr "inconnu" | 303 | msgstr "inconnu" |
303 | 304 | ||
304 | #: src/arm/gnunet-service-arm.c:1209 | 305 | #: src/arm/gnunet-service-arm.c:1215 |
305 | #, c-format | 306 | #, c-format |
306 | msgid "Service `%s' took %s to terminate\n" | 307 | msgid "Service `%s' took %s to terminate\n" |
307 | msgstr "" | 308 | msgstr "" |
308 | 309 | ||
309 | #: src/arm/gnunet-service-arm.c:1231 | 310 | #: src/arm/gnunet-service-arm.c:1237 |
310 | #, c-format | 311 | #, c-format |
311 | msgid "Service `%s' terminated normally, will restart at any time\n" | 312 | msgid "Service `%s' terminated normally, will restart at any time\n" |
312 | msgstr "" | 313 | msgstr "" |
313 | 314 | ||
314 | #: src/arm/gnunet-service-arm.c:1246 | 315 | #: src/arm/gnunet-service-arm.c:1252 |
315 | #, c-format | 316 | #, c-format |
316 | msgid "Service `%s' terminated with status %s/%d, will restart in %s\n" | 317 | msgid "Service `%s' terminated with status %s/%d, will restart in %s\n" |
317 | msgstr "" | 318 | msgstr "" |
318 | 319 | ||
319 | #: src/arm/gnunet-service-arm.c:1500 | ||
320 | #, c-format | ||
321 | msgid "Starting default services `%s'\n" | ||
322 | msgstr "" | ||
323 | |||
324 | #: src/arm/gnunet-service-arm.c:1511 | ||
325 | #, c-format | ||
326 | msgid "Default service `%s' not configured correctly!\n" | ||
327 | msgstr "" | ||
328 | |||
329 | #: src/arm/gnunet-service-arm.c:1524 | ||
330 | msgid "No default services configured, GNUnet will not really start right now.\n" | ||
331 | msgstr "" | ||
332 | |||
333 | #: src/arm/mockup-service.c:41 | 320 | #: src/arm/mockup-service.c:41 |
334 | msgid "Initiating shutdown as requested by client.\n" | 321 | msgid "Initiating shutdown as requested by client.\n" |
335 | msgstr "" | 322 | msgstr "" |
336 | 323 | ||
337 | #: src/ats/ats_api_performance.c:468 | 324 | #: src/ats/gnunet-ats-solver-eval.c:2778 src/ats/gnunet-ats-solver-eval.c:2819 |
338 | #, c-format | 325 | #, c-format |
339 | msgid "Received %s message\n" | 326 | msgid "" |
327 | "Could not load quota for network `%s': `%s', assigning default bandwidth " | ||
328 | "%llu\n" | ||
340 | msgstr "" | 329 | msgstr "" |
341 | 330 | ||
342 | #: src/ats/ats_api_performance.c:511 | 331 | #: src/ats/gnunet-ats-solver-eval.c:2796 |
343 | #, c-format | 332 | #, c-format |
344 | msgid "Received last message for %s \n" | 333 | msgid "" |
334 | "No outbound quota configured for network `%s', assigning default bandwidth " | ||
335 | "%llu\n" | ||
345 | msgstr "" | 336 | msgstr "" |
346 | 337 | ||
347 | #: src/ats/gnunet-ats-solver-eval.c:2199 src/ats/gnunet-ats-solver-eval.c:2233 | 338 | #: src/ats/gnunet-ats-solver-eval.c:2837 |
348 | #: src/ats/gnunet-service-ats_addresses.c:1980 | ||
349 | #: src/ats/gnunet-service-ats_addresses.c:2024 | ||
350 | #, c-format | 339 | #, c-format |
351 | msgid "Could not load quota for network `%s': `%s', assigning default bandwidth %llu\n" | 340 | msgid "" |
341 | "No outbound quota configure for network `%s', assigning default bandwidth " | ||
342 | "%llu\n" | ||
352 | msgstr "" | 343 | msgstr "" |
353 | 344 | ||
354 | #: src/ats/gnunet-ats-solver-eval.c:2205 | 345 | #: src/ats/gnunet-ats-solver-eval.c:3290 |
355 | #: src/ats/gnunet-service-ats_addresses.c:1987 | 346 | #: src/ats-tests/gnunet-solver-eval.c:918 |
356 | #, c-format | 347 | msgid "solver to use" |
357 | msgid "Outbound quota configure for network `%s' is %llu\n" | 348 | msgstr "solveur utilisé" |
358 | msgstr "" | ||
359 | 349 | ||
360 | #: src/ats/gnunet-ats-solver-eval.c:2212 | 350 | #: src/ats/gnunet-ats-solver-eval.c:3293 |
361 | #: src/ats/gnunet-service-ats_addresses.c:1995 | 351 | #: src/ats-tests/gnunet-solver-eval.c:921 |
362 | #, c-format | 352 | #: src/ats-tests/gnunet-solver-eval.c:924 |
363 | msgid "No outbound quota configured for network `%s', assigning default bandwidth %llu\n" | 353 | msgid "experiment to use" |
364 | msgstr "" | 354 | msgstr "" |
365 | 355 | ||
366 | #: src/ats/gnunet-ats-solver-eval.c:2239 | 356 | #: src/ats/gnunet-ats-solver-eval.c:3296 |
367 | #: src/ats/gnunet-service-ats_addresses.c:2031 | 357 | msgid "be verbose" |
368 | #, c-format | ||
369 | msgid "Inbound quota configured for network `%s' is %llu\n" | ||
370 | msgstr "" | 358 | msgstr "" |
371 | 359 | ||
372 | #: src/ats/gnunet-ats-solver-eval.c:2246 | 360 | #: src/ats/gnunet-ats-solver-eval.c:3299 |
373 | #: src/ats/gnunet-service-ats_addresses.c:2039 | 361 | msgid "print logging" |
374 | #, c-format | 362 | msgstr "afficher le journal" |
375 | msgid "No outbound quota configure for network `%s', assigning default bandwidth %llu\n" | ||
376 | msgstr "" | ||
377 | 363 | ||
378 | #: src/ats/gnunet-ats-solver-eval.c:2671 | 364 | #: src/ats/gnunet-ats-solver-eval.c:3302 |
379 | #: src/ats-tests/gnunet-solver-eval.c:919 | 365 | msgid "save logging to disk" |
380 | msgid "solver to use" | 366 | msgstr "" |
381 | msgstr "solveur utilisé" | ||
382 | 367 | ||
383 | #: src/ats/gnunet-ats-solver-eval.c:2674 src/ats/gnunet-ats-solver-eval.c:2677 | 368 | #: src/ats/gnunet-ats-solver-eval.c:3305 |
384 | #: src/ats-tests/gnunet-solver-eval.c:922 | 369 | msgid "disable normalization" |
385 | #: src/ats-tests/gnunet-solver-eval.c:925 | ||
386 | msgid "experiment to use" | ||
387 | msgstr "" | 370 | msgstr "" |
388 | 371 | ||
389 | #: src/ats/gnunet-ats-solver-eval.c:2680 | 372 | #: src/ats/gnunet-service-ats_plugins.c:304 |
390 | msgid "print logging" | 373 | #, c-format |
391 | msgstr "afficher le journal" | 374 | msgid "" |
375 | "Could not load %s quota for network `%s': `%s', assigning default bandwidth " | ||
376 | "%llu\n" | ||
377 | msgstr "" | ||
392 | 378 | ||
393 | #: src/ats/gnunet-service-ats_addresses.c:2217 | 379 | #: src/ats/gnunet-service-ats_plugins.c:314 |
394 | #, c-format | 380 | #, c-format |
395 | msgid "Initializing solver `%s '`%s'\n" | 381 | msgid "%s quota configured for network `%s' is %llu\n" |
396 | msgstr "" | 382 | msgstr "" |
397 | 383 | ||
398 | #: src/ats/gnunet-service-ats_addresses.c:2220 | 384 | #: src/ats/gnunet-service-ats_plugins.c:359 |
399 | #, c-format | 385 | #, c-format |
400 | msgid "Failed to initialize solver `%s'!\n" | 386 | msgid "" |
387 | "No %s-quota configured for network `%s', assigning default bandwidth %llu\n" | ||
401 | msgstr "" | 388 | msgstr "" |
402 | 389 | ||
403 | #: src/ats/gnunet-service-ats_addresses.c:2243 | 390 | #: src/ats/gnunet-service-ats_plugins.c:451 |
404 | msgid "Failed to initialize solver!\n" | 391 | #, c-format |
392 | msgid "Failed to initialize solver `%s'!\n" | ||
405 | msgstr "" | 393 | msgstr "" |
406 | 394 | ||
407 | #: src/ats/plugin_ats_mlp.c:892 | 395 | #: src/ats/plugin_ats_mlp.c:1274 |
408 | msgid "Problem size too large, cannot allocate memory!\n" | 396 | msgid "Problem size too large, cannot allocate memory!\n" |
409 | msgstr "" | 397 | msgstr "" |
410 | 398 | ||
411 | #: src/ats/plugin_ats_mlp.c:1329 | 399 | #: src/ats/plugin_ats_mlp.c:1869 |
412 | #, c-format | 400 | #, c-format |
413 | msgid "Adding address for peer `%s' multiple times\n" | 401 | msgid "Adding address for peer `%s' multiple times\n" |
414 | msgstr "" | 402 | msgstr "" |
415 | 403 | ||
416 | #: src/ats/plugin_ats_mlp.c:1376 | 404 | #: src/ats/plugin_ats_mlp.c:1913 |
417 | #, c-format | 405 | #, c-format |
418 | msgid "Updating address property `%s' for peer `%s' %p not added before\n" | 406 | msgid "Updating address property for peer `%s' %p not added before\n" |
419 | msgstr "" | 407 | msgstr "" |
420 | 408 | ||
421 | #: src/ats/plugin_ats_mlp.c:2122 | 409 | #: src/ats/plugin_ats_mlp.c:2475 |
410 | msgid "" | ||
411 | "MLP solver is not optimizing for anything, changing to feasibility check\n" | ||
412 | msgstr "" | ||
413 | |||
414 | #: src/ats/plugin_ats_mlp.c:2515 src/ats/plugin_ats_mlp.c:2532 | ||
415 | #: src/ats/plugin_ats_mlp.c:2564 src/ats/plugin_ats_mlp.c:2582 | ||
416 | #: src/ats/plugin_ats_mlp.c:2601 src/ats/plugin_ats_proportional.c:1140 | ||
417 | #: src/ats/plugin_ats_ril.c:2613 src/ats/plugin_ats_ril.c:2630 | ||
418 | #: src/ats/plugin_ats_ril.c:2647 src/ats/plugin_ats_ril.c:2664 | ||
419 | #: src/ats/plugin_ats_ril.c:2681 src/ats/plugin_ats_ril.c:2698 | ||
420 | #: src/ats/plugin_ats_ril.c:2715 src/ats/plugin_ats_ril.c:2732 | ||
422 | #, c-format | 421 | #, c-format |
423 | msgid "Adjusting inconsistent outbound quota configuration for network `%s', is %llu must be at least %llu\n" | 422 | msgid "Invalid %s configuration %f \n" |
424 | msgstr "" | 423 | msgstr "" |
425 | 424 | ||
426 | #: src/ats/plugin_ats_mlp.c:2131 | 425 | #: src/ats/plugin_ats_mlp.c:2670 |
427 | #, c-format | 426 | #, c-format |
428 | msgid "Adjusting inconsistent inbound quota configuration for network `%s', is %llu must be at least %llu\n" | 427 | msgid "" |
428 | "Adjusting inconsistent outbound quota configuration for network `%s', is " | ||
429 | "%llu must be at least %llu\n" | ||
429 | msgstr "" | 430 | msgstr "" |
430 | 431 | ||
431 | #: src/ats/plugin_ats_mlp.c:2142 | 432 | #: src/ats/plugin_ats_mlp.c:2679 |
432 | #, c-format | 433 | #, c-format |
433 | msgid "Adjusting outbound quota configuration for network `%s'from %llu to %.0f\n" | 434 | msgid "" |
435 | "Adjusting inconsistent inbound quota configuration for network `%s', is %llu " | ||
436 | "must be at least %llu\n" | ||
434 | msgstr "" | 437 | msgstr "" |
435 | 438 | ||
436 | #: src/ats/plugin_ats_mlp.c:2150 | 439 | #: src/ats/plugin_ats_mlp.c:2689 |
437 | #, c-format | 440 | #, c-format |
438 | msgid "Adjusting inbound quota configuration for network `%s' from %llu to %.0f\n" | 441 | msgid "" |
442 | "Adjusting outbound quota configuration for network `%s'from %llu to %.0f\n" | ||
439 | msgstr "" | 443 | msgstr "" |
440 | 444 | ||
441 | #: src/ats/plugin_ats_mlp.c:2161 | 445 | #: src/ats/plugin_ats_mlp.c:2698 |
442 | #, c-format | 446 | #, c-format |
443 | msgid "Using default quota configuration for network `%s' (in/out) %llu/%llu\n" | 447 | msgid "" |
448 | "Adjusting inbound quota configuration for network `%s' from %llu to %.0f\n" | ||
444 | msgstr "" | 449 | msgstr "" |
445 | 450 | ||
446 | #: src/ats/plugin_ats_proportional.c:1511 | 451 | #: src/ats/plugin_ats_proportional.c:1163 |
447 | #, c-format | 452 | #, c-format |
448 | msgid "Invalid network type `%u' `%s': Disconnect!\n" | 453 | msgid "Invalid %s configuration %f\n" |
449 | msgstr "" | 454 | msgstr "" |
450 | 455 | ||
451 | #: src/ats-tests/ats-testing.c:72 | 456 | #: src/ats-tests/ats-testing.c:72 |
@@ -481,131 +486,202 @@ msgstr "" | |||
481 | msgid "Could not connect master [%u] and slave [%u]\n" | 486 | msgid "Could not connect master [%u] and slave [%u]\n" |
482 | msgstr "" | 487 | msgstr "" |
483 | 488 | ||
484 | #: src/ats-tests/ats-testing.c:490 src/ats-tests/ats-testing.c:671 | 489 | #: src/ats-tests/ats-testing.c:490 src/ats-tests/ats-testing.c:634 |
485 | msgid "Initialization failed, shutdown\n" | 490 | msgid "Initialization failed, shutdown\n" |
486 | msgstr "" | 491 | msgstr "" |
487 | 492 | ||
488 | #: src/ats-tests/ats-testing-log.c:842 | 493 | #: src/ats-tests/ats-testing-log.c:834 |
489 | msgid "Stop logging\n" | 494 | msgid "Stop logging\n" |
490 | msgstr "Arrêter la journalisation\n" | 495 | msgstr "Arrêter la journalisation\n" |
491 | 496 | ||
492 | #: src/ats-tests/ats-testing-log.c:893 | 497 | #: src/ats-tests/ats-testing-log.c:885 |
493 | #, c-format | 498 | #, c-format |
494 | msgid "Start logging `%s'\n" | 499 | msgid "Start logging `%s'\n" |
495 | msgstr "Démarrer la journalisation « %s »\n" | 500 | msgstr "Démarrer la journalisation « %s »\n" |
496 | 501 | ||
497 | #: src/ats-tests/gnunet-ats-sim.c:86 | 502 | #: src/ats-tests/gnunet-ats-sim.c:86 |
498 | #, c-format | 503 | #, c-format |
499 | msgid "Master [%u]: sent: %u KiB in %u sec. = %u KiB/s, received: %u KiB in %u sec. = %u KiB/s\n" | 504 | msgid "" |
505 | "Master [%u]: sent: %u KiB in %u sec. = %u KiB/s, received: %u KiB in %u sec. " | ||
506 | "= %u KiB/s\n" | ||
500 | msgstr "" | 507 | msgstr "" |
501 | 508 | ||
502 | #: src/ats-tool/gnunet-ats.c:169 | 509 | #: src/ats-tool/gnunet-ats.c:289 |
503 | #, c-format | 510 | #, c-format |
504 | msgid "%u address resolutions had a timeout\n" | 511 | msgid "%u address resolutions had a timeout\n" |
505 | msgstr "" | 512 | msgstr "" |
506 | 513 | ||
507 | #: src/ats-tool/gnunet-ats.c:171 | 514 | #: src/ats-tool/gnunet-ats.c:293 |
508 | #, c-format | 515 | #, c-format |
509 | msgid "ATS returned results for %u addresses\n" | 516 | msgid "ATS returned stat_results for %u addresses\n" |
510 | msgstr "" | 517 | msgstr "" |
511 | 518 | ||
512 | #: src/ats-tool/gnunet-ats.c:232 | 519 | #: src/ats-tool/gnunet-ats.c:366 |
513 | #, c-format | 520 | #, c-format |
514 | msgid "Peer `%s' plugin `%s', address `%s', `%s' bw out: %u Bytes/s, bw in %u Bytes/s, %s\n" | 521 | msgid "" |
522 | "Peer `%s' plugin `%s', address `%s', `%s' bw out: %u Bytes/s, bw in %u Bytes/" | ||
523 | "s, %s\n" | ||
524 | msgstr "" | ||
525 | |||
526 | #: src/ats-tool/gnunet-ats.c:373 | ||
527 | msgid "active " | ||
528 | msgstr "" | ||
529 | |||
530 | #: src/ats-tool/gnunet-ats.c:373 | ||
531 | msgid "inactive " | ||
532 | msgstr "" | ||
533 | |||
534 | #: src/ats-tool/gnunet-ats.c:483 | ||
535 | #, c-format | ||
536 | msgid "Removed address of peer `%s' with plugin `%s'\n" | ||
515 | msgstr "" | 537 | msgstr "" |
516 | 538 | ||
517 | #: src/ats-tool/gnunet-ats.c:413 | 539 | #: src/ats-tool/gnunet-ats.c:676 |
518 | #, c-format | 540 | #, c-format |
519 | msgid "Quota for network `%11s' (in/out): %10s / %10s\n" | 541 | msgid "Quota for network `%11s' (in/out): %10s / %10s\n" |
520 | msgstr "" | 542 | msgstr "" |
521 | 543 | ||
522 | #: src/ats-tool/gnunet-ats.c:433 src/core/gnunet-core.c:163 | 544 | #: src/ats-tool/gnunet-ats.c:708 src/namestore/gnunet-namestore.c:700 |
523 | #: src/namestore/gnunet-namestore.c:550 src/transport/gnunet-transport.c:1246 | 545 | #: src/namestore/plugin_rest_namestore.c:812 |
546 | #: src/transport/gnunet-transport.c:1890 | ||
547 | #: src/transport/gnunet-transport-profiler.c:531 | ||
524 | #, c-format | 548 | #, c-format |
525 | msgid "Service `%s' is not running\n" | 549 | msgid "Service `%s' is not running\n" |
526 | msgstr "" | 550 | msgstr "" |
527 | 551 | ||
528 | #: src/ats-tool/gnunet-ats.c:445 src/transport/gnunet-transport.c:1255 | 552 | #: src/ats-tool/gnunet-ats.c:722 src/transport/gnunet-transport.c:1899 |
553 | #: src/transport/gnunet-transport-profiler.c:549 | ||
529 | #, c-format | 554 | #, c-format |
530 | msgid "Failed to parse peer identity `%s'\n" | 555 | msgid "Failed to parse peer identity `%s'\n" |
531 | msgstr "" | 556 | msgstr "" |
532 | 557 | ||
533 | #: src/ats-tool/gnunet-ats.c:454 | 558 | #: src/ats-tool/gnunet-ats.c:732 |
534 | #, c-format | 559 | #, c-format |
535 | msgid "Please select one operation : %s or %s or %s or %s or %s\n" | 560 | msgid "Please select one operation : %s or %s or %s or %s or %s\n" |
536 | msgstr "" | 561 | msgstr "" |
537 | 562 | ||
538 | #: src/ats-tool/gnunet-ats.c:470 src/ats-tool/gnunet-ats.c:489 | 563 | #: src/ats-tool/gnunet-ats.c:754 src/ats-tool/gnunet-ats.c:780 |
539 | #: src/ats-tool/gnunet-ats.c:506 src/ats-tool/gnunet-ats.c:543 | 564 | #: src/ats-tool/gnunet-ats.c:808 src/ats-tool/gnunet-ats.c:854 |
540 | #, c-format | ||
541 | msgid "Cannot connect to ATS service, exiting...\n" | 565 | msgid "Cannot connect to ATS service, exiting...\n" |
542 | msgstr "" | 566 | msgstr "" |
543 | 567 | ||
544 | #: src/ats-tool/gnunet-ats.c:478 src/ats-tool/gnunet-ats.c:495 | 568 | #: src/ats-tool/gnunet-ats.c:766 src/ats-tool/gnunet-ats.c:792 |
545 | #, c-format | ||
546 | msgid "Cannot issue request to ATS service, exiting...\n" | 569 | msgid "Cannot issue request to ATS service, exiting...\n" |
547 | msgstr "" | 570 | msgstr "" |
548 | 571 | ||
549 | #: src/ats-tool/gnunet-ats.c:515 | 572 | #: src/ats-tool/gnunet-ats.c:820 |
550 | #, c-format | ||
551 | msgid "No preference type given!\n" | 573 | msgid "No preference type given!\n" |
552 | msgstr "" | 574 | msgstr "" |
553 | 575 | ||
554 | #: src/ats-tool/gnunet-ats.c:520 | 576 | #: src/ats-tool/gnunet-ats.c:827 |
555 | #, c-format | ||
556 | msgid "No peer given!\n" | 577 | msgid "No peer given!\n" |
557 | msgstr "" | 578 | msgstr "" |
558 | 579 | ||
559 | #: src/ats-tool/gnunet-ats.c:536 | 580 | #: src/ats-tool/gnunet-ats.c:845 |
560 | msgid "Valid type required\n" | 581 | msgid "Valid type required\n" |
561 | msgstr "" | 582 | msgstr "" |
562 | 583 | ||
563 | #: src/ats-tool/gnunet-ats.c:594 | 584 | #: src/ats-tool/gnunet-ats.c:916 |
564 | msgid "get list of active addresses currently used" | 585 | msgid "get list of active addresses currently used" |
565 | msgstr "" | 586 | msgstr "" |
566 | 587 | ||
567 | #: src/ats-tool/gnunet-ats.c:596 | 588 | #: src/ats-tool/gnunet-ats.c:918 |
568 | msgid "get list of all active addresses" | 589 | msgid "get list of all active addresses" |
569 | msgstr "" | 590 | msgstr "" |
570 | 591 | ||
571 | #: src/ats-tool/gnunet-ats.c:599 | 592 | #: src/ats-tool/gnunet-ats.c:921 |
572 | msgid "do not resolve IP addresses to hostnames" | 593 | msgid "do not resolve IP addresses to hostnames" |
573 | msgstr "" | 594 | msgstr "" |
574 | 595 | ||
575 | #: src/ats-tool/gnunet-ats.c:601 | 596 | #: src/ats-tool/gnunet-ats.c:923 |
576 | msgid "monitor mode" | 597 | msgid "monitor mode" |
577 | msgstr "" | 598 | msgstr "" |
578 | 599 | ||
579 | #: src/ats-tool/gnunet-ats.c:603 | 600 | #: src/ats-tool/gnunet-ats.c:925 |
580 | msgid "set preference for the given peer" | 601 | msgid "set preference for the given peer" |
581 | msgstr "" | 602 | msgstr "" |
582 | 603 | ||
583 | #: src/ats-tool/gnunet-ats.c:605 | 604 | #: src/ats-tool/gnunet-ats.c:927 |
584 | msgid "print all configured quotas" | 605 | msgid "print all configured quotas" |
585 | msgstr "" | 606 | msgstr "" |
586 | 607 | ||
587 | #: src/ats-tool/gnunet-ats.c:607 | 608 | #: src/ats-tool/gnunet-ats.c:929 |
588 | msgid "peer id" | 609 | msgid "peer id" |
589 | msgstr "" | 610 | msgstr "" |
590 | 611 | ||
591 | #: src/ats-tool/gnunet-ats.c:610 | 612 | #: src/ats-tool/gnunet-ats.c:932 |
592 | msgid "preference type to set: latency | bandwidth" | 613 | msgid "preference type to set: latency | bandwidth" |
593 | msgstr "" | 614 | msgstr "" |
594 | 615 | ||
595 | #: src/ats-tool/gnunet-ats.c:612 | 616 | #: src/ats-tool/gnunet-ats.c:934 |
596 | msgid "preference value" | 617 | msgid "preference value" |
597 | msgstr "" | 618 | msgstr "" |
598 | 619 | ||
599 | #: src/ats-tool/gnunet-ats.c:615 | 620 | #: src/ats-tool/gnunet-ats.c:937 |
600 | msgid "verbose output (include ATS address properties)" | 621 | msgid "verbose output (include ATS address properties)" |
601 | msgstr "" | 622 | msgstr "" |
602 | 623 | ||
603 | #: src/ats-tool/gnunet-ats.c:622 | 624 | #: src/ats-tool/gnunet-ats.c:944 |
604 | msgid "Print information about ATS state" | 625 | msgid "Print information about ATS state" |
605 | msgstr "" | 626 | msgstr "" |
606 | 627 | ||
628 | #: src/cadet/gnunet-cadet.c:376 | ||
629 | #, c-format | ||
630 | msgid "Invalid target `%s'\n" | ||
631 | msgstr "" | ||
632 | |||
633 | #: src/cadet/gnunet-cadet.c:626 | ||
634 | #, c-format | ||
635 | msgid "Invalid peer ID `%s'\n" | ||
636 | msgstr "" | ||
637 | |||
638 | #: src/cadet/gnunet-cadet.c:669 | ||
639 | #, c-format | ||
640 | msgid "Invalid tunnel owner `%s'\n" | ||
641 | msgstr "" | ||
642 | |||
643 | #: src/cadet/gnunet-cadet.c:735 | ||
644 | msgid "You must NOT give a TARGETwhen using 'request all' options\n" | ||
645 | msgstr "" | ||
646 | |||
647 | #: src/cadet/gnunet-cadet.c:832 | ||
648 | msgid "provide information about a particular connection" | ||
649 | msgstr "" | ||
650 | |||
651 | #: src/cadet/gnunet-cadet.c:835 | ||
652 | msgid "activate echo mode" | ||
653 | msgstr "" | ||
654 | |||
655 | #: src/cadet/gnunet-cadet.c:838 | ||
656 | msgid "dump debug information to STDERR" | ||
657 | msgstr "" | ||
658 | |||
659 | #: src/cadet/gnunet-cadet.c:844 | ||
660 | msgid "port to listen to (default; 0)" | ||
661 | msgstr "" | ||
662 | |||
663 | #: src/cadet/gnunet-cadet.c:847 | ||
664 | msgid "provide information about a patricular peer" | ||
665 | msgstr "" | ||
666 | |||
667 | #: src/cadet/gnunet-cadet.c:850 | ||
668 | msgid "provide information about all peers" | ||
669 | msgstr "" | ||
670 | |||
671 | #: src/cadet/gnunet-cadet.c:853 | ||
672 | msgid "provide information about a particular tunnel" | ||
673 | msgstr "" | ||
674 | |||
675 | #: src/cadet/gnunet-cadet.c:856 | ||
676 | msgid "provide information about all tunnels" | ||
677 | msgstr "" | ||
678 | |||
679 | #: src/cadet/gnunet-service-cadet_peer.c:507 | ||
680 | msgid "Wrong CORE service\n" | ||
681 | msgstr "" | ||
682 | |||
607 | #: src/consensus/gnunet-consensus-profiler.c:437 | 683 | #: src/consensus/gnunet-consensus-profiler.c:437 |
608 | #: src/secretsharing/gnunet-secretsharing-profiler.c:535 | 684 | #: src/secretsharing/gnunet-secretsharing-profiler.c:610 |
609 | msgid "number of peers in consensus" | 685 | msgid "number of peers in consensus" |
610 | msgstr "" | 686 | msgstr "" |
611 | 687 | ||
@@ -614,8 +690,8 @@ msgid "how many peers receive one value?" | |||
614 | msgstr "" | 690 | msgstr "" |
615 | 691 | ||
616 | #: src/consensus/gnunet-consensus-profiler.c:443 | 692 | #: src/consensus/gnunet-consensus-profiler.c:443 |
617 | #: src/set/gnunet-set-profiler.c:286 src/set/gnunet-set-profiler.c:289 | 693 | #: src/set/gnunet-set-profiler.c:289 src/set/gnunet-set-profiler.c:292 |
618 | #: src/set/gnunet-set-profiler.c:292 | 694 | #: src/set/gnunet-set-profiler.c:295 |
619 | msgid "number of values" | 695 | msgid "number of values" |
620 | msgstr "nombre de valeurs" | 696 | msgstr "nombre de valeurs" |
621 | 697 | ||
@@ -628,260 +704,271 @@ msgid "delay until consensus starts" | |||
628 | msgstr "" | 704 | msgstr "" |
629 | 705 | ||
630 | #: src/consensus/gnunet-consensus-profiler.c:452 | 706 | #: src/consensus/gnunet-consensus-profiler.c:452 |
631 | #: src/secretsharing/gnunet-secretsharing-profiler.c:550 | 707 | #: src/secretsharing/gnunet-secretsharing-profiler.c:625 |
632 | msgid "be more verbose (print received values)" | 708 | msgid "be more verbose (print received values)" |
633 | msgstr "" | 709 | msgstr "" |
634 | 710 | ||
635 | #: src/conversation/conversation_api.c:557 | 711 | #: src/conversation/conversation_api.c:493 |
636 | #: src/conversation/conversation_api_call.c:470 | 712 | #: src/conversation/conversation_api_call.c:475 |
637 | msgid "Connection to conversation service lost, trying to reconnect\n" | 713 | msgid "Connection to conversation service lost, trying to reconnect\n" |
638 | msgstr "" | 714 | msgstr "" |
639 | 715 | ||
640 | #: src/conversation/gnunet-conversation.c:264 | 716 | #: src/conversation/conversation_api.c:617 |
717 | #, fuzzy | ||
718 | msgid "number too large" | ||
719 | msgstr "nombre de valeurs" | ||
720 | |||
721 | #: src/conversation/gnunet-conversation.c:269 | ||
641 | #, c-format | 722 | #, c-format |
642 | msgid "Incoming call from `%s'. Please /accept #%u or /cancel %u the call.\n" | 723 | msgid "Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n" |
643 | msgstr "" | 724 | msgstr "" |
644 | 725 | ||
645 | #: src/conversation/gnunet-conversation.c:286 | 726 | #: src/conversation/gnunet-conversation.c:294 |
646 | #, c-format | 727 | #, c-format |
647 | msgid "Call from `%s' terminated\n" | 728 | msgid "Call from `%s' terminated\n" |
648 | msgstr "" | 729 | msgstr "" |
649 | 730 | ||
650 | #: src/conversation/gnunet-conversation.c:319 | 731 | #: src/conversation/gnunet-conversation.c:329 |
651 | #, c-format | 732 | #, c-format |
652 | msgid "Call from `%s' suspended by other user\n" | 733 | msgid "Call from `%s' suspended by other user\n" |
653 | msgstr "" | 734 | msgstr "" |
654 | 735 | ||
655 | #: src/conversation/gnunet-conversation.c:324 | 736 | #: src/conversation/gnunet-conversation.c:334 |
656 | #, c-format | 737 | #, c-format |
657 | msgid "Call from `%s' resumed by other user\n" | 738 | msgid "Call from `%s' resumed by other user\n" |
658 | msgstr "" | 739 | msgstr "" |
659 | 740 | ||
660 | #: src/conversation/gnunet-conversation.c:342 | 741 | #: src/conversation/gnunet-conversation.c:352 |
661 | #, c-format | 742 | #, c-format |
662 | msgid "Ego `%s' no longer available, phone is now down.\n" | 743 | msgid "Ego `%s' no longer available, phone is now down.\n" |
663 | msgstr "" | 744 | msgstr "" |
664 | 745 | ||
665 | #: src/conversation/gnunet-conversation.c:356 | 746 | #: src/conversation/gnunet-conversation.c:366 |
666 | msgid "Failed to setup phone (internal error)\n" | 747 | msgid "Failed to setup phone (internal error)\n" |
667 | msgstr "" | 748 | msgstr "" |
668 | 749 | ||
669 | #: src/conversation/gnunet-conversation.c:368 | 750 | #: src/conversation/gnunet-conversation.c:378 |
670 | #, c-format | 751 | #, c-format |
671 | msgid "Phone active on line %u. Type `/help' for a list of available commands\n" | 752 | msgid "" |
753 | "Phone active on line %u. Type `/help' for a list of available commands\n" | ||
672 | msgstr "" | 754 | msgstr "" |
673 | 755 | ||
674 | #: src/conversation/gnunet-conversation.c:390 | 756 | #: src/conversation/gnunet-conversation.c:400 |
675 | #, c-format | 757 | #, c-format |
676 | msgid "Resolved address of `%s'. Now ringing other party.\n" | 758 | msgid "Resolved address of `%s'. Now ringing other party.\n" |
677 | msgstr "" | 759 | msgstr "" |
678 | 760 | ||
679 | #: src/conversation/gnunet-conversation.c:397 | 761 | #: src/conversation/gnunet-conversation.c:407 |
680 | #, c-format | 762 | #, c-format |
681 | msgid "Connection established to `%s'\n" | 763 | msgid "Connection established to `%s'\n" |
682 | msgstr "" | 764 | msgstr "" |
683 | 765 | ||
684 | #: src/conversation/gnunet-conversation.c:404 | 766 | #: src/conversation/gnunet-conversation.c:414 |
685 | #, c-format | 767 | #, c-format |
686 | msgid "Failed to resolve `%s'\n" | 768 | msgid "Failed to resolve `%s'\n" |
687 | msgstr "" | 769 | msgstr "" |
688 | 770 | ||
689 | #: src/conversation/gnunet-conversation.c:411 | 771 | #: src/conversation/gnunet-conversation.c:422 |
690 | msgid "Call terminated\n" | 772 | #, c-format |
773 | msgid "Call to `%s' terminated\n" | ||
691 | msgstr "" | 774 | msgstr "" |
692 | 775 | ||
693 | #: src/conversation/gnunet-conversation.c:417 | 776 | #: src/conversation/gnunet-conversation.c:431 |
694 | #, c-format | 777 | #, c-format |
695 | msgid "Connection to `%s' suspended (by other user)\n" | 778 | msgid "Connection to `%s' suspended (by other user)\n" |
696 | msgstr "" | 779 | msgstr "" |
697 | 780 | ||
698 | #: src/conversation/gnunet-conversation.c:423 | 781 | #: src/conversation/gnunet-conversation.c:437 |
699 | #, c-format | 782 | #, c-format |
700 | msgid "Connection to `%s' resumed (by other user)\n" | 783 | msgid "Connection to `%s' resumed (by other user)\n" |
701 | msgstr "" | 784 | msgstr "" |
702 | 785 | ||
703 | #: src/conversation/gnunet-conversation.c:428 | 786 | #: src/conversation/gnunet-conversation.c:442 |
704 | msgid "Error with the call, restarting it\n" | 787 | msgid "Error with the call, restarting it\n" |
705 | msgstr "" | 788 | msgstr "" |
706 | 789 | ||
707 | #: src/conversation/gnunet-conversation.c:495 | 790 | #: src/conversation/gnunet-conversation.c:511 |
708 | #, c-format | 791 | #, c-format |
709 | msgid "Unknown command `%s'\n" | 792 | msgid "Unknown command `%s'\n" |
710 | msgstr "" | 793 | msgstr "" |
711 | 794 | ||
712 | #: src/conversation/gnunet-conversation.c:511 | 795 | #: src/conversation/gnunet-conversation.c:527 |
713 | #: src/conversation/gnunet-conversation.c:525 | 796 | #: src/conversation/gnunet-conversation.c:541 |
714 | #, c-format | 797 | #, c-format |
715 | msgid "Ego `%s' not available\n" | 798 | msgid "Ego `%s' not available\n" |
716 | msgstr "" | 799 | msgstr "" |
717 | 800 | ||
718 | #: src/conversation/gnunet-conversation.c:518 | 801 | #: src/conversation/gnunet-conversation.c:534 |
719 | #: src/conversation/gnunet-conversation.c:575 | 802 | #: src/conversation/gnunet-conversation.c:591 |
720 | msgid "You are calling someone else already, hang up first!\n" | 803 | msgid "You are calling someone else already, hang up first!\n" |
721 | msgstr "" | 804 | msgstr "" |
722 | 805 | ||
723 | #: src/conversation/gnunet-conversation.c:533 | 806 | #: src/conversation/gnunet-conversation.c:549 |
724 | #: src/conversation/gnunet-conversation.c:588 | 807 | #: src/conversation/gnunet-conversation.c:604 |
725 | #, c-format | 808 | #, c-format |
726 | msgid "You are answering call from `%s', hang up or suspend that call first!\n" | 809 | msgid "You are answering call from `%s', hang up or suspend that call first!\n" |
727 | msgstr "" | 810 | msgstr "" |
728 | 811 | ||
729 | #: src/conversation/gnunet-conversation.c:544 | 812 | #: src/conversation/gnunet-conversation.c:559 |
730 | msgid "Call recipient missing.\n" | 813 | msgid "Call recipient missing.\n" |
731 | msgstr "" | 814 | msgstr "" |
732 | 815 | ||
733 | #: src/conversation/gnunet-conversation.c:599 | 816 | #: src/conversation/gnunet-conversation.c:615 |
734 | msgid "There is no incoming call to accept here!\n" | 817 | msgid "There is no incoming call to accept here!\n" |
735 | msgstr "" | 818 | msgstr "" |
736 | 819 | ||
737 | #: src/conversation/gnunet-conversation.c:616 | 820 | #: src/conversation/gnunet-conversation.c:632 |
738 | #, c-format | 821 | #, c-format |
739 | msgid "There is no incoming call `%s' to accept right now!\n" | 822 | msgid "There is no incoming call `%s' to accept right now!\n" |
740 | msgstr "" | 823 | msgstr "" |
741 | 824 | ||
742 | #: src/conversation/gnunet-conversation.c:647 | 825 | #: src/conversation/gnunet-conversation.c:662 |
743 | msgid "We currently do not have an address.\n" | 826 | msgid "We currently do not have an address.\n" |
744 | msgstr "" | 827 | msgstr "" |
745 | 828 | ||
746 | #: src/conversation/gnunet-conversation.c:670 | 829 | #: src/conversation/gnunet-conversation.c:685 |
747 | #, c-format | 830 | #, c-format |
748 | msgid "We are currently trying to locate the private key for the ego `%s'.\n" | 831 | msgid "We are currently trying to locate the private key for the ego `%s'.\n" |
749 | msgstr "" | 832 | msgstr "" |
750 | 833 | ||
751 | #: src/conversation/gnunet-conversation.c:675 | 834 | #: src/conversation/gnunet-conversation.c:690 |
752 | #, c-format | 835 | #, c-format |
753 | msgid "We are listening for incoming calls for ego `%s' on line %u.\n" | 836 | msgid "We are listening for incoming calls for ego `%s' on line %u.\n" |
754 | msgstr "" | 837 | msgstr "" |
755 | 838 | ||
756 | #: src/conversation/gnunet-conversation.c:681 | 839 | #: src/conversation/gnunet-conversation.c:696 |
757 | #: src/conversation/gnunet-conversation.c:705 | 840 | #: src/conversation/gnunet-conversation.c:720 |
758 | #, c-format | 841 | #, c-format |
759 | msgid "You are having a conversation with `%s'.\n" | 842 | msgid "You are having a conversation with `%s'.\n" |
760 | msgstr "" | 843 | msgstr "" |
761 | 844 | ||
762 | #: src/conversation/gnunet-conversation.c:686 | 845 | #: src/conversation/gnunet-conversation.c:701 |
763 | msgid "We had an internal error setting up our phone line. You can still make calls.\n" | 846 | msgid "" |
847 | "We had an internal error setting up our phone line. You can still make " | ||
848 | "calls.\n" | ||
764 | msgstr "" | 849 | msgstr "" |
765 | 850 | ||
766 | #: src/conversation/gnunet-conversation.c:695 | 851 | #: src/conversation/gnunet-conversation.c:710 |
767 | #, c-format | 852 | #, c-format |
768 | msgid "We are trying to find the network address to call `%s'.\n" | 853 | msgid "We are trying to find the network address to call `%s'.\n" |
769 | msgstr "" | 854 | msgstr "" |
770 | 855 | ||
771 | #: src/conversation/gnunet-conversation.c:700 | 856 | #: src/conversation/gnunet-conversation.c:715 |
772 | #, c-format | 857 | #, c-format |
773 | msgid "We are calling `%s', his phone should be ringing.\n" | 858 | msgid "We are calling `%s', his phone should be ringing.\n" |
774 | msgstr "" | 859 | msgstr "" |
775 | 860 | ||
776 | #: src/conversation/gnunet-conversation.c:719 | 861 | #: src/conversation/gnunet-conversation.c:734 |
777 | msgid "Calls waiting:\n" | 862 | msgid "Calls waiting:\n" |
778 | msgstr "" | 863 | msgstr "" |
779 | 864 | ||
780 | #: src/conversation/gnunet-conversation.c:725 | 865 | #: src/conversation/gnunet-conversation.c:740 |
781 | #, c-format | 866 | #, c-format |
782 | msgid "#%u: `%s'\n" | 867 | msgid "#%u: `%s'\n" |
783 | msgstr "#%u : « %s »\n" | 868 | msgstr "#%u : « %s »\n" |
784 | 869 | ||
785 | #: src/conversation/gnunet-conversation.c:753 | ||
786 | #: src/conversation/gnunet-conversation.c:768 | 870 | #: src/conversation/gnunet-conversation.c:768 |
871 | #: src/conversation/gnunet-conversation.c:783 | ||
787 | msgid "There is no call that could be suspended right now.\n" | 872 | msgid "There is no call that could be suspended right now.\n" |
788 | msgstr "" | 873 | msgstr "" |
789 | 874 | ||
790 | #: src/conversation/gnunet-conversation.c:801 | 875 | #: src/conversation/gnunet-conversation.c:816 |
791 | #: src/conversation/gnunet-conversation.c:817 | 876 | #: src/conversation/gnunet-conversation.c:832 |
792 | msgid "There is no call that could be resumed right now.\n" | 877 | msgid "There is no call that could be resumed right now.\n" |
793 | msgstr "" | 878 | msgstr "" |
794 | 879 | ||
795 | #: src/conversation/gnunet-conversation.c:824 | 880 | #: src/conversation/gnunet-conversation.c:839 |
796 | #, c-format | 881 | #, c-format |
797 | msgid "Already talking with `%s', cannot resume a call right now.\n" | 882 | msgid "Already talking with `%s', cannot resume a call right now.\n" |
798 | msgstr "" | 883 | msgstr "" |
799 | 884 | ||
800 | #: src/conversation/gnunet-conversation.c:833 | 885 | #: src/conversation/gnunet-conversation.c:848 |
801 | msgid "There is no incoming call to resume here!\n" | 886 | msgid "There is no incoming call to resume here!\n" |
802 | msgstr "" | 887 | msgstr "" |
803 | 888 | ||
804 | #: src/conversation/gnunet-conversation.c:850 | 889 | #: src/conversation/gnunet-conversation.c:865 |
805 | #, c-format | 890 | #, c-format |
806 | msgid "There is no incoming call `%s' to resume right now!\n" | 891 | msgid "There is no incoming call `%s' to resume right now!\n" |
807 | msgstr "" | 892 | msgstr "" |
808 | 893 | ||
809 | #: src/conversation/gnunet-conversation.c:885 | 894 | #: src/conversation/gnunet-conversation.c:900 |
810 | msgid "There is no call that could be cancelled right now.\n" | 895 | msgid "There is no call that could be cancelled right now.\n" |
811 | msgstr "" | 896 | msgstr "" |
812 | 897 | ||
813 | #: src/conversation/gnunet-conversation.c:893 | 898 | #: src/conversation/gnunet-conversation.c:908 |
814 | msgid "There is no incoming call to refuse here!\n" | 899 | msgid "There is no incoming call to refuse here!\n" |
815 | msgstr "" | 900 | msgstr "" |
816 | 901 | ||
817 | #: src/conversation/gnunet-conversation.c:910 | 902 | #: src/conversation/gnunet-conversation.c:925 |
818 | #, c-format | 903 | #, c-format |
819 | msgid "There is no incoming call `%s' to refuse right now!\n" | 904 | msgid "There is no incoming call `%s' to refuse right now!\n" |
820 | msgstr "" | 905 | msgstr "" |
821 | 906 | ||
822 | #: src/conversation/gnunet-conversation.c:937 | 907 | #: src/conversation/gnunet-conversation.c:951 |
823 | msgid "Use `/address' to find out which address this phone should have in GNS" | 908 | msgid "Use `/address' to find out which address this phone should have in GNS" |
824 | msgstr "" | 909 | msgstr "" |
825 | 910 | ||
826 | #: src/conversation/gnunet-conversation.c:939 | 911 | #: src/conversation/gnunet-conversation.c:953 |
827 | msgid "Use `/call USER.gnu' to call USER" | 912 | msgid "Use `/call USER.gnu' to call USER" |
828 | msgstr "" | 913 | msgstr "" |
829 | 914 | ||
830 | #: src/conversation/gnunet-conversation.c:941 | 915 | #: src/conversation/gnunet-conversation.c:955 |
831 | msgid "Use `/accept #NUM' to accept incoming call #NUM" | 916 | msgid "Use `/accept #NUM' to accept incoming call #NUM" |
832 | msgstr "" | 917 | msgstr "" |
833 | 918 | ||
834 | #: src/conversation/gnunet-conversation.c:943 | 919 | #: src/conversation/gnunet-conversation.c:957 |
835 | msgid "Use `/suspend' to suspend the active call" | 920 | msgid "Use `/suspend' to suspend the active call" |
836 | msgstr "" | 921 | msgstr "" |
837 | 922 | ||
838 | #: src/conversation/gnunet-conversation.c:945 | 923 | #: src/conversation/gnunet-conversation.c:959 |
839 | msgid "Use `/resume [#NUM]' to resume a call, #NUM is needed to resume incoming calls, no argument is needed to resume the current outgoing call." | 924 | msgid "" |
925 | "Use `/resume [#NUM]' to resume a call, #NUM is needed to resume incoming " | ||
926 | "calls, no argument is needed to resume the current outgoing call." | ||
840 | msgstr "" | 927 | msgstr "" |
841 | 928 | ||
842 | #: src/conversation/gnunet-conversation.c:947 | 929 | #: src/conversation/gnunet-conversation.c:961 |
843 | msgid "Use `/cancel' to reject or terminate a call" | 930 | msgid "Use `/cancel' to reject or terminate a call" |
844 | msgstr "" | 931 | msgstr "" |
845 | 932 | ||
846 | #: src/conversation/gnunet-conversation.c:949 | 933 | #: src/conversation/gnunet-conversation.c:963 |
847 | msgid "Use `/status' to print status information" | 934 | msgid "Use `/status' to print status information" |
848 | msgstr "" | 935 | msgstr "" |
849 | 936 | ||
850 | #: src/conversation/gnunet-conversation.c:951 | 937 | #: src/conversation/gnunet-conversation.c:965 |
851 | msgid "Use `/quit' to terminate gnunet-conversation" | 938 | msgid "Use `/quit' to terminate gnunet-conversation" |
852 | msgstr "" | 939 | msgstr "" |
853 | 940 | ||
854 | #: src/conversation/gnunet-conversation.c:953 | 941 | #: src/conversation/gnunet-conversation.c:967 |
855 | msgid "Use `/help command' to get help for a specific command" | 942 | msgid "Use `/help command' to get help for a specific command" |
856 | msgstr "" | 943 | msgstr "" |
857 | 944 | ||
858 | #: src/conversation/gnunet-conversation.c:1151 | 945 | #: src/conversation/gnunet-conversation.c:1175 |
859 | #, c-format | 946 | #, c-format |
860 | msgid "Name of our ego changed to `%s'\n" | 947 | msgid "Name of our ego changed to `%s'\n" |
861 | msgstr "" | 948 | msgstr "" |
862 | 949 | ||
863 | #: src/conversation/gnunet-conversation.c:1164 | 950 | #: src/conversation/gnunet-conversation.c:1188 |
864 | #, c-format | 951 | #, c-format |
865 | msgid "Our ego `%s' was deleted!\n" | 952 | msgid "Our ego `%s' was deleted!\n" |
866 | msgstr "" | 953 | msgstr "" |
867 | 954 | ||
868 | #: src/conversation/gnunet-conversation.c:1199 | 955 | #: src/conversation/gnunet-conversation.c:1223 |
869 | msgid "You must specify the NAME of an ego to use\n" | 956 | msgid "You must specify the NAME of an ego to use\n" |
870 | msgstr "" | 957 | msgstr "" |
871 | 958 | ||
872 | #: src/conversation/gnunet-conversation.c:1223 | 959 | #: src/conversation/gnunet-conversation.c:1247 |
873 | msgid "Failed to start gnunet-helper-w32-console\n" | 960 | msgid "Failed to start gnunet-helper-w32-console\n" |
874 | msgstr "" | 961 | msgstr "" |
875 | 962 | ||
876 | #: src/conversation/gnunet-conversation.c:1249 | 963 | #: src/conversation/gnunet-conversation.c:1273 |
877 | msgid "sets the NAME of the ego to use for the phone (and name resolution)" | 964 | msgid "sets the NAME of the ego to use for the phone (and name resolution)" |
878 | msgstr "" | 965 | msgstr "" |
879 | 966 | ||
880 | #: src/conversation/gnunet-conversation.c:1252 | 967 | #: src/conversation/gnunet-conversation.c:1276 |
881 | msgid "sets the LINE to use for the phone" | 968 | msgid "sets the LINE to use for the phone" |
882 | msgstr "" | 969 | msgstr "" |
883 | 970 | ||
884 | #: src/conversation/gnunet-conversation.c:1276 | 971 | #: src/conversation/gnunet-conversation.c:1302 |
885 | msgid "Enables having a conversation with other GNUnet users." | 972 | msgid "Enables having a conversation with other GNUnet users." |
886 | msgstr "" | 973 | msgstr "" |
887 | 974 | ||
@@ -896,16 +983,20 @@ msgstr "" | |||
896 | #, c-format | 983 | #, c-format |
897 | msgid "" | 984 | msgid "" |
898 | "\n" | 985 | "\n" |
899 | "We are now playing your recording back. If you can hear it, your audio settings are working..." | 986 | "We are now playing your recording back. If you can hear it, your audio " |
987 | "settings are working..." | ||
900 | msgstr "" | 988 | msgstr "" |
901 | 989 | ||
902 | #: src/conversation/gnunet-conversation-test.c:215 | 990 | #: src/conversation/gnunet-conversation-test.c:215 |
903 | #, c-format | 991 | #, c-format |
904 | msgid "We will now be recording you for %s. After that time, the recording will be played back to you..." | 992 | msgid "" |
993 | "We will now be recording you for %s. After that time, the recording will be " | ||
994 | "played back to you..." | ||
905 | msgstr "" | 995 | msgstr "" |
906 | 996 | ||
907 | #: src/conversation/gnunet-conversation-test.c:248 | 997 | #: src/conversation/gnunet-conversation-test.c:248 |
908 | #: src/multicast/gnunet-multicast.c:70 src/revocation/gnunet-revocation.c:522 | 998 | #: src/multicast/gnunet-multicast.c:70 src/revocation/gnunet-revocation.c:522 |
999 | #: src/sensordashboard/gnunet-sensordashboard.c:70 | ||
909 | #: src/template/gnunet-template.c:70 | 1000 | #: src/template/gnunet-template.c:70 |
910 | msgid "help text" | 1001 | msgid "help text" |
911 | msgstr "" | 1002 | msgstr "" |
@@ -915,59 +1006,59 @@ msgstr "" | |||
915 | msgid "pa_stream_write() failed: %s\n" | 1006 | msgid "pa_stream_write() failed: %s\n" |
916 | msgstr "pa_stream_write() échoué : %s\n" | 1007 | msgstr "pa_stream_write() échoué : %s\n" |
917 | 1008 | ||
918 | #: src/conversation/gnunet-helper-audio-playback.c:587 | 1009 | #: src/conversation/gnunet-helper-audio-playback.c:589 |
919 | msgid "gnunet-helper-audio-playback - Got signal, exiting\n" | 1010 | msgid "gnunet-helper-audio-playback - Got signal, exiting\n" |
920 | msgstr "" | 1011 | msgstr "" |
921 | 1012 | ||
922 | #: src/conversation/gnunet-helper-audio-playback.c:612 | 1013 | #: src/conversation/gnunet-helper-audio-playback.c:614 |
923 | #: src/conversation/gnunet-helper-audio-record.c:545 | 1014 | #: src/conversation/gnunet-helper-audio-record.c:545 |
924 | msgid "Connection established.\n" | 1015 | msgid "Connection established.\n" |
925 | msgstr "" | 1016 | msgstr "" |
926 | 1017 | ||
927 | #: src/conversation/gnunet-helper-audio-playback.c:617 | 1018 | #: src/conversation/gnunet-helper-audio-playback.c:619 |
928 | #: src/conversation/gnunet-helper-audio-record.c:550 | 1019 | #: src/conversation/gnunet-helper-audio-record.c:550 |
929 | #, c-format | 1020 | #, c-format |
930 | msgid "pa_stream_new() failed: %s\n" | 1021 | msgid "pa_stream_new() failed: %s\n" |
931 | msgstr "pa_stream_new() échoué : %s\n" | 1022 | msgstr "pa_stream_new() échoué : %s\n" |
932 | 1023 | ||
933 | #: src/conversation/gnunet-helper-audio-playback.c:631 | 1024 | #: src/conversation/gnunet-helper-audio-playback.c:633 |
934 | #, c-format | 1025 | #, c-format |
935 | msgid "pa_stream_connect_playback() failed: %s\n" | 1026 | msgid "pa_stream_connect_playback() failed: %s\n" |
936 | msgstr "pa_stream_connect_playback() échoué : %s\n" | 1027 | msgstr "pa_stream_connect_playback() échoué : %s\n" |
937 | 1028 | ||
938 | #: src/conversation/gnunet-helper-audio-playback.c:644 | 1029 | #: src/conversation/gnunet-helper-audio-playback.c:646 |
939 | #: src/conversation/gnunet-helper-audio-record.c:576 | 1030 | #: src/conversation/gnunet-helper-audio-record.c:576 |
940 | #, c-format | 1031 | #, c-format |
941 | msgid "Connection failure: %s\n" | 1032 | msgid "Connection failure: %s\n" |
942 | msgstr "" | 1033 | msgstr "" |
943 | 1034 | ||
944 | #: src/conversation/gnunet-helper-audio-playback.c:665 | 1035 | #: src/conversation/gnunet-helper-audio-playback.c:667 |
945 | #: src/conversation/gnunet-helper-audio-record.c:599 | 1036 | #: src/conversation/gnunet-helper-audio-record.c:599 |
946 | msgid "Wrong Spec\n" | 1037 | msgid "Wrong Spec\n" |
947 | msgstr "Spécification incorrecte\n" | 1038 | msgstr "Spécification incorrecte\n" |
948 | 1039 | ||
949 | #: src/conversation/gnunet-helper-audio-playback.c:671 | 1040 | #: src/conversation/gnunet-helper-audio-playback.c:673 |
950 | #: src/conversation/gnunet-helper-audio-record.c:605 | 1041 | #: src/conversation/gnunet-helper-audio-record.c:605 |
951 | msgid "pa_mainloop_new() failed.\n" | 1042 | msgid "pa_mainloop_new() failed.\n" |
952 | msgstr "pa_mainloop_new() échoué.\n" | 1043 | msgstr "pa_mainloop_new() échoué.\n" |
953 | 1044 | ||
954 | #: src/conversation/gnunet-helper-audio-playback.c:685 | 1045 | #: src/conversation/gnunet-helper-audio-playback.c:687 |
955 | #: src/conversation/gnunet-helper-audio-record.c:620 | 1046 | #: src/conversation/gnunet-helper-audio-record.c:620 |
956 | msgid "pa_context_new() failed.\n" | 1047 | msgid "pa_context_new() failed.\n" |
957 | msgstr "pa_context_new() échoué.\n" | 1048 | msgstr "pa_context_new() échoué.\n" |
958 | 1049 | ||
959 | #: src/conversation/gnunet-helper-audio-playback.c:692 | 1050 | #: src/conversation/gnunet-helper-audio-playback.c:694 |
960 | #: src/conversation/gnunet-helper-audio-record.c:626 | 1051 | #: src/conversation/gnunet-helper-audio-record.c:626 |
961 | #, c-format | 1052 | #, c-format |
962 | msgid "pa_context_connect() failed: %s\n" | 1053 | msgid "pa_context_connect() failed: %s\n" |
963 | msgstr "pa_context_connect() échoué : %s\n" | 1054 | msgstr "pa_context_connect() échoué : %s\n" |
964 | 1055 | ||
965 | #: src/conversation/gnunet-helper-audio-playback.c:698 | 1056 | #: src/conversation/gnunet-helper-audio-playback.c:700 |
966 | #: src/conversation/gnunet-helper-audio-record.c:632 | 1057 | #: src/conversation/gnunet-helper-audio-record.c:632 |
967 | msgid "pa_mainloop_run() failed.\n" | 1058 | msgid "pa_mainloop_run() failed.\n" |
968 | msgstr "pa_mainloop_run() échoué.\n" | 1059 | msgstr "pa_mainloop_run() échoué.\n" |
969 | 1060 | ||
970 | #: src/conversation/gnunet-helper-audio-playback.c:768 | 1061 | #: src/conversation/gnunet-helper-audio-playback.c:770 |
971 | #, c-format | 1062 | #, c-format |
972 | msgid "Read error from STDIN: %s\n" | 1063 | msgid "Read error from STDIN: %s\n" |
973 | msgstr "" | 1064 | msgstr "" |
@@ -1034,18 +1125,19 @@ msgstr "ogg_stream_init() échoué.\n" | |||
1034 | msgid "Failed to allocate %d bytes for second packet\n" | 1125 | msgid "Failed to allocate %d bytes for second packet\n" |
1035 | msgstr "" | 1126 | msgstr "" |
1036 | 1127 | ||
1037 | #: src/conversation/gnunet-service-conversation.c:841 | 1128 | #: src/conversation/gnunet-service-conversation.c:853 |
1038 | msgid "Mesh audio channel not ready; audio data dropped\n" | 1129 | msgid "Cadet audio channel not ready; audio data dropped\n" |
1039 | msgstr "" | 1130 | msgstr "" |
1040 | 1131 | ||
1041 | #: src/conversation/gnunet-service-conversation.c:932 | 1132 | #: src/conversation/gnunet-service-conversation.c:944 |
1042 | #, c-format | 1133 | #, c-format |
1043 | msgid "No available phone for incoming call on line %u, sending HANG_UP signal\n" | 1134 | msgid "" |
1135 | "No available phone for incoming call on line %u, sending HANG_UP signal\n" | ||
1044 | msgstr "" | 1136 | msgstr "" |
1045 | 1137 | ||
1046 | #: src/conversation/gnunet-service-conversation.c:1338 | 1138 | #: src/conversation/gnunet-service-conversation.c:1351 |
1047 | #, c-format | 1139 | #, c-format |
1048 | msgid "Received incoming channel on port %u\n" | 1140 | msgid "Received incoming Cadet channel on port %u\n" |
1049 | msgstr "" | 1141 | msgstr "" |
1050 | 1142 | ||
1051 | #: src/conversation/microphone.c:121 | 1143 | #: src/conversation/microphone.c:121 |
@@ -1061,238 +1153,275 @@ msgstr "" | |||
1061 | msgid "Could not start playback audio helper.\n" | 1153 | msgid "Could not start playback audio helper.\n" |
1062 | msgstr "" | 1154 | msgstr "" |
1063 | 1155 | ||
1064 | #: src/core/core_api.c:767 | 1156 | #: src/core/core_api.c:787 |
1065 | msgid "Client was disconnected from core service, trying to reconnect.\n" | 1157 | msgid "Client was disconnected from core service, trying to reconnect.\n" |
1066 | msgstr "" | 1158 | msgstr "" |
1067 | 1159 | ||
1068 | #: src/core/gnunet-core.c:80 | 1160 | #: src/core/gnunet-core.c:92 |
1069 | #, c-format | 1161 | msgid "fresh connection" |
1070 | msgid "Peer `%s'\n" | ||
1071 | msgstr "" | 1162 | msgstr "" |
1072 | 1163 | ||
1073 | #: src/core/gnunet-core.c:110 src/core/gnunet-core.c:138 | 1164 | #: src/core/gnunet-core.c:95 |
1074 | #: src/transport/gnunet-transport.c:910 src/transport/gnunet-transport.c:930 | 1165 | msgid "key sent" |
1075 | #, c-format | ||
1076 | msgid "%24s: %-17s %4s (%u connections in total)\n" | ||
1077 | msgstr "" | 1166 | msgstr "" |
1078 | 1167 | ||
1079 | #: src/core/gnunet-core.c:112 src/transport/gnunet-transport.c:911 | 1168 | #: src/core/gnunet-core.c:98 |
1080 | msgid "Connected to" | 1169 | msgid "key received" |
1081 | msgstr "" | 1170 | msgstr "" |
1082 | 1171 | ||
1083 | #: src/core/gnunet-core.c:140 src/transport/gnunet-transport.c:931 | 1172 | #: src/core/gnunet-core.c:101 |
1084 | msgid "Disconnected from" | 1173 | msgid "connection established" |
1085 | msgstr "" | 1174 | msgstr "" |
1086 | 1175 | ||
1087 | #: src/core/gnunet-core.c:211 src/peerinfo-tool/gnunet-peerinfo.c:694 | 1176 | #: src/core/gnunet-core.c:104 |
1177 | msgid "rekeying" | ||
1178 | msgstr "" | ||
1179 | |||
1180 | #: src/core/gnunet-core.c:107 | ||
1181 | msgid "disconnected" | ||
1182 | msgstr "" | ||
1183 | |||
1184 | #: src/core/gnunet-core.c:114 | ||
1185 | msgid "Connection to CORE service lost (reconnecting)" | ||
1186 | msgstr "" | ||
1187 | |||
1188 | #: src/core/gnunet-core.c:117 | ||
1189 | #, fuzzy | ||
1190 | msgid "unknown state" | ||
1191 | msgstr "inconnu" | ||
1192 | |||
1193 | #: src/core/gnunet-core.c:122 | ||
1194 | #, c-format | ||
1195 | msgid "%24s: %-30s %4s (timeout in %6s)\n" | ||
1196 | msgstr "" | ||
1197 | |||
1198 | #: src/core/gnunet-core.c:146 src/peerinfo-tool/gnunet-peerinfo.c:786 | ||
1088 | #, c-format | 1199 | #, c-format |
1089 | msgid "Invalid command line argument `%s'\n" | 1200 | msgid "Invalid command line argument `%s'\n" |
1090 | msgstr "" | 1201 | msgstr "" |
1091 | 1202 | ||
1092 | #: src/core/gnunet-core.c:233 src/transport/gnunet-transport.c:1486 | 1203 | #: src/core/gnunet-core.c:157 |
1204 | msgid "Failed to connect to CORE service!\n" | ||
1205 | msgstr "" | ||
1206 | |||
1207 | #: src/core/gnunet-core.c:179 src/transport/gnunet-transport.c:2154 | ||
1093 | msgid "provide information about all current connections (continuously)" | 1208 | msgid "provide information about all current connections (continuously)" |
1094 | msgstr "" | 1209 | msgstr "" |
1095 | 1210 | ||
1096 | #: src/core/gnunet-core.c:244 | 1211 | #: src/core/gnunet-core.c:188 |
1097 | msgid "Print information about connected peers." | 1212 | msgid "Print information about connected peers." |
1098 | msgstr "" | 1213 | msgstr "" |
1099 | 1214 | ||
1100 | #: src/core/gnunet-service-core.c:105 | 1215 | #: src/core/gnunet-service-core.c:104 |
1101 | msgid "Core service is lacking HOSTKEY configuration setting. Exiting.\n" | 1216 | msgid "Core service is lacking HOSTKEY configuration setting. Exiting.\n" |
1102 | msgstr "" | 1217 | msgstr "" |
1103 | 1218 | ||
1104 | #: src/core/gnunet-service-core.c:126 | 1219 | #: src/core/gnunet-service-core.c:128 |
1105 | #, c-format | 1220 | #, c-format |
1106 | msgid "Core service of `%4s' ready.\n" | 1221 | msgid "Core service of `%4s' ready.\n" |
1107 | msgstr "" | 1222 | msgstr "" |
1108 | 1223 | ||
1109 | #: src/core/gnunet-service-core_clients.c:370 | 1224 | #: src/core/gnunet-service-core_clients.c:375 |
1110 | msgid "# send requests dropped (disconnected)" | 1225 | msgid "# send requests dropped (disconnected)" |
1111 | msgstr "" | 1226 | msgstr "" |
1112 | 1227 | ||
1113 | #: src/core/gnunet-service-core_clients.c:480 | 1228 | #: src/core/gnunet-service-core_clients.c:490 |
1114 | msgid "# messages discarded (session disconnected)" | 1229 | msgid "# messages discarded (session disconnected)" |
1115 | msgstr "" | 1230 | msgstr "" |
1116 | 1231 | ||
1117 | #: src/core/gnunet-service-core_clients.c:526 | 1232 | #: src/core/gnunet-service-core_clients.c:536 |
1118 | #, c-format | 1233 | #, c-format |
1119 | msgid "# bytes of messages of type %u received" | 1234 | msgid "# bytes of messages of type %u received" |
1120 | msgstr "" | 1235 | msgstr "" |
1121 | 1236 | ||
1122 | #: src/core/gnunet-service-core_kx.c:535 | 1237 | #: src/core/gnunet-service-core_kx.c:571 |
1123 | msgid "# bytes encrypted" | 1238 | msgid "# bytes encrypted" |
1124 | msgstr "" | 1239 | msgstr "" |
1125 | 1240 | ||
1126 | #: src/core/gnunet-service-core_kx.c:586 | 1241 | #: src/core/gnunet-service-core_kx.c:630 |
1127 | msgid "# bytes decrypted" | 1242 | msgid "# bytes decrypted" |
1128 | msgstr "" | 1243 | msgstr "" |
1129 | 1244 | ||
1130 | #: src/core/gnunet-service-core_kx.c:673 | 1245 | #: src/core/gnunet-service-core_kx.c:719 |
1131 | msgid "# key exchanges initiated" | 1246 | msgid "# key exchanges initiated" |
1132 | msgstr "" | 1247 | msgstr "" |
1133 | 1248 | ||
1134 | #: src/core/gnunet-service-core_kx.c:713 | 1249 | #: src/core/gnunet-service-core_kx.c:765 |
1135 | msgid "# key exchanges stopped" | 1250 | msgid "# key exchanges stopped" |
1136 | msgstr "" | 1251 | msgstr "" |
1137 | 1252 | ||
1138 | #: src/core/gnunet-service-core_kx.c:810 | 1253 | #: src/core/gnunet-service-core_kx.c:795 |
1254 | msgid "# PING messages transmitted" | ||
1255 | msgstr "" | ||
1256 | |||
1257 | #: src/core/gnunet-service-core_kx.c:870 | ||
1139 | msgid "# old ephemeral keys ignored" | 1258 | msgid "# old ephemeral keys ignored" |
1140 | msgstr "" | 1259 | msgstr "" |
1141 | 1260 | ||
1142 | #: src/core/gnunet-service-core_kx.c:816 | 1261 | #: src/core/gnunet-service-core_kx.c:877 |
1143 | msgid "# ephemeral keys received" | 1262 | msgid "# ephemeral keys received" |
1144 | msgstr "" | 1263 | msgstr "" |
1145 | 1264 | ||
1146 | #: src/core/gnunet-service-core_kx.c:850 | 1265 | #: src/core/gnunet-service-core_kx.c:916 |
1147 | #, c-format | 1266 | #, c-format |
1148 | msgid "Ephemeral key message from peer `%s' rejected as its validity range does not match our system time (%llu not in [%llu,%llu]).\n" | 1267 | msgid "" |
1268 | "Ephemeral key message from peer `%s' rejected as its validity range does not " | ||
1269 | "match our system time (%llu not in [%llu,%llu]).\n" | ||
1149 | msgstr "" | 1270 | msgstr "" |
1150 | 1271 | ||
1151 | #: src/core/gnunet-service-core_kx.c:861 | 1272 | #: src/core/gnunet-service-core_kx.c:927 |
1152 | msgid "# EPHEMERAL_KEY messages received" | 1273 | msgid "# EPHEMERAL_KEY messages received" |
1153 | msgstr "" | 1274 | msgstr "" |
1154 | 1275 | ||
1155 | #: src/core/gnunet-service-core_kx.c:951 | 1276 | #: src/core/gnunet-service-core_kx.c:1029 |
1156 | #: src/transport/gnunet-service-transport_validation.c:1016 | 1277 | #: src/transport/gnunet-service-transport_validation.c:1053 |
1157 | msgid "# PING messages received" | 1278 | msgid "# PING messages received" |
1158 | msgstr "" | 1279 | msgstr "" |
1159 | 1280 | ||
1160 | #: src/core/gnunet-service-core_kx.c:959 | 1281 | #: src/core/gnunet-service-core_kx.c:1038 |
1161 | msgid "# PING messages dropped (out of order)" | 1282 | msgid "# PING messages dropped (out of order)" |
1162 | msgstr "" | 1283 | msgstr "" |
1163 | 1284 | ||
1164 | #: src/core/gnunet-service-core_kx.c:986 | 1285 | #: src/core/gnunet-service-core_kx.c:1067 |
1165 | #, c-format | 1286 | #, c-format |
1166 | msgid "Received PING from `%s' for different identity: I am `%s', PONG identity: `%s'\n" | 1287 | msgid "" |
1288 | "Received PING from `%s' for different identity: I am `%s', PONG identity: `" | ||
1289 | "%s'\n" | ||
1167 | msgstr "" | 1290 | msgstr "" |
1168 | 1291 | ||
1169 | #: src/core/gnunet-service-core_kx.c:1003 | 1292 | #: src/core/gnunet-service-core_kx.c:1093 |
1170 | msgid "# PONG messages created" | 1293 | msgid "# PONG messages created" |
1171 | msgstr "" | 1294 | msgstr "" |
1172 | 1295 | ||
1173 | #: src/core/gnunet-service-core_kx.c:1029 | 1296 | #: src/core/gnunet-service-core_kx.c:1122 |
1174 | msgid "# sessions terminated by timeout" | 1297 | msgid "# sessions terminated by timeout" |
1175 | msgstr "" | 1298 | msgstr "" |
1176 | 1299 | ||
1177 | #: src/core/gnunet-service-core_kx.c:1039 | 1300 | #: src/core/gnunet-service-core_kx.c:1135 |
1178 | msgid "# keepalive messages sent" | 1301 | msgid "# keepalive messages sent" |
1179 | msgstr "" | 1302 | msgstr "" |
1180 | 1303 | ||
1181 | #: src/core/gnunet-service-core_kx.c:1096 | 1304 | #: src/core/gnunet-service-core_kx.c:1206 |
1182 | #: src/transport/gnunet-service-transport_validation.c:1328 | 1305 | #: src/transport/gnunet-service-transport_validation.c:1370 |
1183 | msgid "# PONG messages received" | 1306 | msgid "# PONG messages received" |
1184 | msgstr "" | 1307 | msgstr "" |
1185 | 1308 | ||
1186 | #: src/core/gnunet-service-core_kx.c:1102 | 1309 | #: src/core/gnunet-service-core_kx.c:1213 |
1187 | msgid "# PONG messages dropped (connection down)" | 1310 | msgid "# PONG messages dropped (connection down)" |
1188 | msgstr "" | 1311 | msgstr "" |
1189 | 1312 | ||
1190 | #: src/core/gnunet-service-core_kx.c:1107 | 1313 | #: src/core/gnunet-service-core_kx.c:1218 |
1191 | msgid "# PONG messages dropped (out of order)" | 1314 | msgid "# PONG messages dropped (out of order)" |
1192 | msgstr "" | 1315 | msgstr "" |
1193 | 1316 | ||
1194 | #: src/core/gnunet-service-core_kx.c:1137 | 1317 | #: src/core/gnunet-service-core_kx.c:1254 |
1195 | msgid "# PONG messages decrypted" | 1318 | msgid "# PONG messages decrypted" |
1196 | msgstr "" | 1319 | msgstr "" |
1197 | 1320 | ||
1198 | #: src/core/gnunet-service-core_kx.c:1171 | 1321 | #: src/core/gnunet-service-core_kx.c:1292 |
1199 | msgid "# session keys confirmed via PONG" | 1322 | msgid "# session keys confirmed via PONG" |
1200 | msgstr "" | 1323 | msgstr "" |
1201 | 1324 | ||
1202 | #: src/core/gnunet-service-core_kx.c:1181 | 1325 | #: src/core/gnunet-service-core_kx.c:1303 |
1203 | msgid "# timeouts prevented via PONG" | 1326 | msgid "# timeouts prevented via PONG" |
1204 | msgstr "" | 1327 | msgstr "" |
1205 | 1328 | ||
1206 | #: src/core/gnunet-service-core_kx.c:1188 | 1329 | #: src/core/gnunet-service-core_kx.c:1310 |
1207 | msgid "# rekey operations confirmed via PONG" | 1330 | msgid "# rekey operations confirmed via PONG" |
1208 | msgstr "" | 1331 | msgstr "" |
1209 | 1332 | ||
1210 | #: src/core/gnunet-service-core_kx.c:1328 | 1333 | #: src/core/gnunet-service-core_kx.c:1466 |
1211 | msgid "# DATA message dropped (out of order)" | 1334 | msgid "# DATA message dropped (out of order)" |
1212 | msgstr "" | 1335 | msgstr "" |
1213 | 1336 | ||
1214 | #: src/core/gnunet-service-core_kx.c:1335 | 1337 | #: src/core/gnunet-service-core_kx.c:1474 |
1215 | #, c-format | 1338 | #, c-format |
1216 | msgid "Session to peer `%s' went down due to key expiration (should not happen)\n" | 1339 | msgid "" |
1340 | "Session to peer `%s' went down due to key expiration (should not happen)\n" | ||
1217 | msgstr "" | 1341 | msgstr "" |
1218 | 1342 | ||
1219 | #: src/core/gnunet-service-core_kx.c:1338 | 1343 | #: src/core/gnunet-service-core_kx.c:1477 |
1220 | msgid "# sessions terminated by key expiration" | 1344 | msgid "# sessions terminated by key expiration" |
1221 | msgstr "" | 1345 | msgstr "" |
1222 | 1346 | ||
1223 | #: src/core/gnunet-service-core_kx.c:1383 | 1347 | #: src/core/gnunet-service-core_kx.c:1535 |
1224 | #: src/core/gnunet-service-core_kx.c:1408 | 1348 | #: src/core/gnunet-service-core_kx.c:1561 |
1225 | msgid "# bytes dropped (duplicates)" | 1349 | msgid "# bytes dropped (duplicates)" |
1226 | msgstr "" | 1350 | msgstr "" |
1227 | 1351 | ||
1228 | #: src/core/gnunet-service-core_kx.c:1395 | 1352 | #: src/core/gnunet-service-core_kx.c:1548 |
1229 | msgid "# bytes dropped (out of sequence)" | 1353 | msgid "# bytes dropped (out of sequence)" |
1230 | msgstr "" | 1354 | msgstr "" |
1231 | 1355 | ||
1232 | #: src/core/gnunet-service-core_kx.c:1437 | 1356 | #: src/core/gnunet-service-core_kx.c:1590 |
1233 | msgid "# bytes dropped (ancient message)" | 1357 | msgid "# bytes dropped (ancient message)" |
1234 | msgstr "" | 1358 | msgstr "" |
1235 | 1359 | ||
1236 | #: src/core/gnunet-service-core_kx.c:1445 | 1360 | #: src/core/gnunet-service-core_kx.c:1598 |
1237 | msgid "# bytes of payload decrypted" | 1361 | msgid "# bytes of payload decrypted" |
1238 | msgstr "" | 1362 | msgstr "" |
1239 | 1363 | ||
1240 | #: src/core/gnunet-service-core_kx.c:1480 | 1364 | #: src/core/gnunet-service-core_kx.c:1632 |
1241 | msgid "# PAYLOAD dropped (out of order)" | 1365 | msgid "# PAYLOAD dropped (out of order)" |
1242 | msgstr "" | 1366 | msgstr "" |
1243 | 1367 | ||
1244 | #: src/core/gnunet-service-core_neighbours.c:168 | 1368 | #: src/core/gnunet-service-core_neighbours.c:177 |
1245 | msgid "# sessions terminated by transport disconnect" | 1369 | msgid "# sessions terminated by transport disconnect" |
1246 | msgstr "" | 1370 | msgstr "" |
1247 | 1371 | ||
1248 | #: src/core/gnunet-service-core_neighbours.c:184 | 1372 | #: src/core/gnunet-service-core_neighbours.c:193 |
1249 | #: src/core/gnunet-service-core_neighbours.c:335 | 1373 | #: src/core/gnunet-service-core_neighbours.c:355 |
1250 | msgid "# neighbour entries allocated" | 1374 | msgid "# neighbour entries allocated" |
1251 | msgstr "" | 1375 | msgstr "" |
1252 | 1376 | ||
1253 | #: src/core/gnunet-service-core_neighbours.c:252 | 1377 | #: src/core/gnunet-service-core_neighbours.c:264 |
1254 | msgid "# encrypted bytes given to transport" | 1378 | msgid "# encrypted bytes given to transport" |
1255 | msgstr "" | 1379 | msgstr "" |
1256 | 1380 | ||
1257 | #: src/core/gnunet-service-core_neighbours.c:418 | 1381 | #: src/core/gnunet-service-core_neighbours.c:438 |
1258 | #, c-format | 1382 | #, c-format |
1259 | msgid "Unsupported message of type %u (%u bytes) received from peer `%s'\n" | 1383 | msgid "Unsupported message of type %u (%u bytes) received from peer `%s'\n" |
1260 | msgstr "" | 1384 | msgstr "" |
1261 | 1385 | ||
1262 | #: src/core/gnunet-service-core_sessions.c:216 | 1386 | #: src/core/gnunet-service-core_sessions.c:252 |
1263 | #: src/core/gnunet-service-core_sessions.c:288 | 1387 | #: src/core/gnunet-service-core_sessions.c:338 |
1264 | #: src/dht/gnunet-service-dht_neighbours.c:662 | 1388 | #: src/dht/gnunet-service-dht_neighbours.c:661 |
1265 | #: src/dht/gnunet-service-dht_neighbours.c:727 | 1389 | #: src/dht/gnunet-service-dht_neighbours.c:726 |
1266 | #: src/dht/gnunet-service-xdht_neighbours.c:1304 | 1390 | #: src/fs/gnunet-service-fs_cp.c:654 src/fs/gnunet-service-fs_cp.c:1647 |
1267 | #: src/fs/gnunet-service-fs_cp.c:606 src/fs/gnunet-service-fs_cp.c:1501 | 1391 | #: src/topology/gnunet-daemon-topology.c:734 |
1268 | #: src/topology/gnunet-daemon-topology.c:707 | 1392 | #: src/topology/gnunet-daemon-topology.c:835 |
1269 | #: src/topology/gnunet-daemon-topology.c:808 | 1393 | #: src/transport/gnunet-service-transport_neighbours.c:755 |
1270 | #: src/transport/gnunet-service-transport_neighbours.c:917 | 1394 | #: src/transport/gnunet-service-transport_neighbours.c:763 |
1271 | #: src/transport/gnunet-service-transport_neighbours.c:1141 | ||
1272 | #: src/transport/gnunet-service-transport_neighbours.c:3142 | ||
1273 | #: src/transport/gnunet-service-transport_neighbours.c:3438 | ||
1274 | msgid "# peers connected" | 1395 | msgid "# peers connected" |
1275 | msgstr "" | 1396 | msgstr "" |
1276 | 1397 | ||
1277 | #: src/core/gnunet-service-core_sessions.c:255 | 1398 | #: src/core/gnunet-service-core_sessions.c:285 |
1278 | msgid "# type map refreshes sent" | 1399 | msgid "# type map refreshes sent" |
1279 | msgstr "" | 1400 | msgstr "" |
1280 | 1401 | ||
1281 | #: src/core/gnunet-service-core_sessions.c:426 | 1402 | #: src/core/gnunet-service-core_sessions.c:404 |
1403 | msgid "# outdated typemap confirmations received" | ||
1404 | msgstr "" | ||
1405 | |||
1406 | #: src/core/gnunet-service-core_sessions.c:415 | ||
1407 | msgid "# valid typemap confirmations received" | ||
1408 | msgstr "" | ||
1409 | |||
1410 | #: src/core/gnunet-service-core_sessions.c:554 | ||
1282 | msgid "# messages discarded (expired prior to transmission)" | 1411 | msgid "# messages discarded (expired prior to transmission)" |
1283 | msgstr "" | 1412 | msgstr "" |
1284 | 1413 | ||
1285 | #: src/core/gnunet-service-core_typemap.c:110 | 1414 | #: src/core/gnunet-service-core_typemap.c:169 |
1286 | #: src/core/gnunet-service-core_typemap.c:121 | 1415 | #: src/core/gnunet-service-core_typemap.c:180 |
1287 | msgid "# type maps received" | 1416 | msgid "# type maps received" |
1288 | msgstr "" | 1417 | msgstr "" |
1289 | 1418 | ||
1290 | #: src/core/gnunet-service-core_typemap.c:151 | 1419 | #: src/core/gnunet-service-core_typemap.c:210 |
1291 | msgid "# updates to my type map" | 1420 | msgid "# updates to my type map" |
1292 | msgstr "" | 1421 | msgstr "" |
1293 | 1422 | ||
1294 | #: src/datacache/datacache.c:115 src/datacache/datacache.c:266 | 1423 | #: src/datacache/datacache.c:115 src/datacache/datacache.c:266 |
1295 | #: src/datastore/gnunet-service-datastore.c:838 | 1424 | #: src/datastore/gnunet-service-datastore.c:841 |
1296 | msgid "# bytes stored" | 1425 | msgid "# bytes stored" |
1297 | msgstr "" | 1426 | msgstr "" |
1298 | 1427 | ||
@@ -1301,8 +1430,8 @@ msgid "# items stored" | |||
1301 | msgstr "" | 1430 | msgstr "" |
1302 | 1431 | ||
1303 | #: src/datacache/datacache.c:143 src/datacache/datacache.c:150 | 1432 | #: src/datacache/datacache.c:143 src/datacache/datacache.c:150 |
1304 | #: src/datastore/gnunet-service-datastore.c:1487 | 1433 | #: src/datastore/gnunet-service-datastore.c:1598 |
1305 | #: src/datastore/gnunet-service-datastore.c:1498 | 1434 | #: src/datastore/gnunet-service-datastore.c:1609 |
1306 | #, c-format | 1435 | #, c-format |
1307 | msgid "No `%s' specified for `%s' in configuration!\n" | 1436 | msgid "No `%s' specified for `%s' in configuration!\n" |
1308 | msgstr "" | 1437 | msgstr "" |
@@ -1329,14 +1458,14 @@ msgstr "" | |||
1329 | msgid "Heap datacache running\n" | 1458 | msgid "Heap datacache running\n" |
1330 | msgstr "" | 1459 | msgstr "" |
1331 | 1460 | ||
1332 | #: src/datacache/plugin_datacache_postgres.c:392 | 1461 | #: src/datacache/plugin_datacache_postgres.c:391 |
1333 | msgid "Postgres datacache running\n" | 1462 | msgid "Postgres datacache running\n" |
1334 | msgstr "" | 1463 | msgstr "" |
1335 | 1464 | ||
1336 | #: src/datacache/plugin_datacache_sqlite.c:69 | 1465 | #: src/datacache/plugin_datacache_sqlite.c:69 |
1337 | #: src/datacache/plugin_datacache_sqlite.c:72 | 1466 | #: src/datacache/plugin_datacache_sqlite.c:72 |
1338 | #: src/datastore/plugin_datastore_mysql.c:806 | 1467 | #: src/datastore/plugin_datastore_mysql.c:818 |
1339 | #: src/datastore/plugin_datastore_mysql.c:820 | 1468 | #: src/datastore/plugin_datastore_mysql.c:834 |
1340 | #: src/datastore/plugin_datastore_sqlite.c:57 src/mysql/mysql.c:41 | 1469 | #: src/datastore/plugin_datastore_sqlite.c:57 src/mysql/mysql.c:41 |
1341 | #: src/mysql/mysql.c:48 src/mysql/mysql.c:522 src/mysql/mysql.c:531 | 1470 | #: src/mysql/mysql.c:48 src/mysql/mysql.c:522 src/mysql/mysql.c:531 |
1342 | #: src/mysql/mysql.c:591 src/mysql/mysql.c:607 | 1471 | #: src/mysql/mysql.c:591 src/mysql/mysql.c:607 |
@@ -1344,28 +1473,29 @@ msgstr "" | |||
1344 | #: src/namecache/plugin_namecache_sqlite.c:52 | 1473 | #: src/namecache/plugin_namecache_sqlite.c:52 |
1345 | #: src/namestore/plugin_namestore_postgres.c:52 | 1474 | #: src/namestore/plugin_namestore_postgres.c:52 |
1346 | #: src/namestore/plugin_namestore_sqlite.c:52 | 1475 | #: src/namestore/plugin_namestore_sqlite.c:52 |
1476 | #: src/peerstore/plugin_peerstore_sqlite.c:50 | ||
1347 | #: src/testbed/generate-underlay-topology.c:47 | 1477 | #: src/testbed/generate-underlay-topology.c:47 |
1348 | #: src/testbed/gnunet-daemon-latency-logger.c:52 | 1478 | #: src/testbed/gnunet-daemon-latency-logger.c:52 |
1349 | #: src/testbed/gnunet-daemon-testbed-underlay.c:55 | 1479 | #: src/testbed/gnunet-daemon-testbed-underlay.c:55 |
1350 | #: src/testbed/testbed_api_hosts.c:69 src/util/crypto_ecc.c:51 | 1480 | #: src/testbed/testbed_api_hosts.c:69 src/util/crypto_ecc.c:51 |
1351 | #: src/util/crypto_mpi.c:39 src/include/gnunet_common.h:602 | 1481 | #: src/util/crypto_mpi.c:39 src/include/gnunet_common.h:626 |
1352 | #: src/include/gnunet_common.h:611 src/scalarproduct/scalarproduct.h:50 | 1482 | #: src/include/gnunet_common.h:635 src/scalarproduct/scalarproduct.h:35 |
1353 | #, c-format | 1483 | #, c-format |
1354 | msgid "`%s' failed at %s:%d with error: %s\n" | 1484 | msgid "`%s' failed at %s:%d with error: %s\n" |
1355 | msgstr "" | 1485 | msgstr "" |
1356 | 1486 | ||
1357 | #: src/datacache/plugin_datacache_sqlite.c:450 | 1487 | #: src/datacache/plugin_datacache_sqlite.c:449 |
1358 | msgid "Sqlite datacache running\n" | 1488 | msgid "Sqlite datacache running\n" |
1359 | msgstr "" | 1489 | msgstr "" |
1360 | 1490 | ||
1361 | #: src/datacache/plugin_datacache_sqlite.c:484 | 1491 | #: src/datacache/plugin_datacache_sqlite.c:483 |
1362 | #: src/datastore/plugin_datastore_sqlite.c:404 | 1492 | #: src/datastore/plugin_datastore_sqlite.c:401 |
1363 | #: src/namecache/plugin_namecache_sqlite.c:295 | 1493 | #: src/namecache/plugin_namecache_sqlite.c:292 |
1364 | #: src/namestore/plugin_namestore_sqlite.c:327 | 1494 | #: src/namestore/plugin_namestore_sqlite.c:324 |
1365 | msgid "Tried to close sqlite without finalizing all prepared statements.\n" | 1495 | msgid "Tried to close sqlite without finalizing all prepared statements.\n" |
1366 | msgstr "" | 1496 | msgstr "" |
1367 | 1497 | ||
1368 | #: src/datacache/plugin_datacache_sqlite.c:491 | 1498 | #: src/datacache/plugin_datacache_sqlite.c:490 |
1369 | #, c-format | 1499 | #, c-format |
1370 | msgid "Failed to close statement %p: %d\n" | 1500 | msgid "Failed to close statement %p: %d\n" |
1371 | msgstr "" | 1501 | msgstr "" |
@@ -1398,67 +1528,63 @@ msgstr "" | |||
1398 | msgid "# datastore connections (re)created" | 1528 | msgid "# datastore connections (re)created" |
1399 | msgstr "" | 1529 | msgstr "" |
1400 | 1530 | ||
1401 | #: src/datastore/datastore_api.c:616 src/scalarproduct/scalarproduct_api.c:279 | 1531 | #: src/datastore/datastore_api.c:621 |
1402 | msgid "# transmission request failures" | 1532 | msgid "# transmission request failures" |
1403 | msgstr "" | 1533 | msgstr "" |
1404 | 1534 | ||
1405 | #: src/datastore/datastore_api.c:638 | 1535 | #: src/datastore/datastore_api.c:645 |
1406 | msgid "# bytes sent to datastore" | 1536 | msgid "# bytes sent to datastore" |
1407 | msgstr "" | 1537 | msgstr "" |
1408 | 1538 | ||
1409 | #: src/datastore/datastore_api.c:770 | 1539 | #: src/datastore/datastore_api.c:787 |
1410 | msgid "Failed to receive status response from database." | 1540 | msgid "Failed to receive status response from database." |
1411 | msgstr "" | 1541 | msgstr "" |
1412 | 1542 | ||
1413 | #: src/datastore/datastore_api.c:784 | 1543 | #: src/datastore/datastore_api.c:801 |
1414 | msgid "Error reading response from datastore service" | 1544 | msgid "Error reading response from datastore service" |
1415 | msgstr "" | 1545 | msgstr "" |
1416 | 1546 | ||
1417 | #: src/datastore/datastore_api.c:796 src/datastore/datastore_api.c:802 | 1547 | #: src/datastore/datastore_api.c:813 src/datastore/datastore_api.c:819 |
1418 | msgid "Invalid error message received from datastore service" | 1548 | msgid "Invalid error message received from datastore service" |
1419 | msgstr "" | 1549 | msgstr "" |
1420 | 1550 | ||
1421 | #: src/datastore/datastore_api.c:806 | 1551 | #: src/datastore/datastore_api.c:823 |
1422 | msgid "# status messages received" | 1552 | msgid "# status messages received" |
1423 | msgstr "" | 1553 | msgstr "" |
1424 | 1554 | ||
1425 | #: src/datastore/datastore_api.c:876 | 1555 | #: src/datastore/datastore_api.c:893 |
1426 | msgid "# PUT requests executed" | 1556 | msgid "# PUT requests executed" |
1427 | msgstr "" | 1557 | msgstr "" |
1428 | 1558 | ||
1429 | #: src/datastore/datastore_api.c:944 | 1559 | #: src/datastore/datastore_api.c:959 |
1430 | msgid "# RESERVE requests executed" | 1560 | msgid "# RESERVE requests executed" |
1431 | msgstr "" | 1561 | msgstr "" |
1432 | 1562 | ||
1433 | #: src/datastore/datastore_api.c:1005 | 1563 | #: src/datastore/datastore_api.c:1020 |
1434 | msgid "# RELEASE RESERVE requests executed" | 1564 | msgid "# RELEASE RESERVE requests executed" |
1435 | msgstr "" | 1565 | msgstr "" |
1436 | 1566 | ||
1437 | #: src/datastore/datastore_api.c:1065 | 1567 | #: src/datastore/datastore_api.c:1080 |
1438 | msgid "# UPDATE requests executed" | 1568 | msgid "# UPDATE requests executed" |
1439 | msgstr "" | 1569 | msgstr "" |
1440 | 1570 | ||
1441 | #: src/datastore/datastore_api.c:1129 | 1571 | #: src/datastore/datastore_api.c:1144 |
1442 | msgid "# REMOVE requests executed" | 1572 | msgid "# REMOVE requests executed" |
1443 | msgstr "" | 1573 | msgstr "" |
1444 | 1574 | ||
1445 | #: src/datastore/datastore_api.c:1174 | 1575 | #: src/datastore/datastore_api.c:1248 |
1446 | msgid "Failed to receive response from database.\n" | ||
1447 | msgstr "" | ||
1448 | |||
1449 | #: src/datastore/datastore_api.c:1233 | ||
1450 | msgid "# Results received" | 1576 | msgid "# Results received" |
1451 | msgstr "" | 1577 | msgstr "" |
1452 | 1578 | ||
1453 | #: src/datastore/datastore_api.c:1300 | 1579 | #: src/datastore/datastore_api.c:1315 |
1454 | msgid "# GET REPLICATION requests executed" | 1580 | msgid "# GET REPLICATION requests executed" |
1455 | msgstr "" | 1581 | msgstr "" |
1456 | 1582 | ||
1457 | #: src/datastore/datastore_api.c:1363 | 1583 | #: src/datastore/datastore_api.c:1378 |
1458 | msgid "# GET ZERO ANONYMITY requests executed" | 1584 | msgid "# GET ZERO ANONYMITY requests executed" |
1459 | msgstr "" | 1585 | msgstr "" |
1460 | 1586 | ||
1461 | #: src/datastore/datastore_api.c:1424 | 1587 | #: src/datastore/datastore_api.c:1447 |
1462 | msgid "# GET requests executed" | 1588 | msgid "# GET requests executed" |
1463 | msgstr "" | 1589 | msgstr "" |
1464 | 1590 | ||
@@ -1473,179 +1599,207 @@ msgid "Cannot use the same configuration for source and destination\n" | |||
1473 | msgstr "" | 1599 | msgstr "" |
1474 | 1600 | ||
1475 | #: src/datastore/gnunet-datastore.c:246 | 1601 | #: src/datastore/gnunet-datastore.c:246 |
1476 | msgid "specifies the configuration to use to access an alternative datastore; will merge that datastore into our current datastore" | 1602 | msgid "" |
1603 | "specifies the configuration to use to access an alternative datastore; will " | ||
1604 | "merge that datastore into our current datastore" | ||
1477 | msgstr "" | 1605 | msgstr "" |
1478 | 1606 | ||
1479 | #: src/datastore/gnunet-datastore.c:255 | 1607 | #: src/datastore/gnunet-datastore.c:255 |
1480 | msgid "Manipulate GNUnet datastore" | 1608 | msgid "Manipulate GNUnet datastore" |
1481 | msgstr "" | 1609 | msgstr "" |
1482 | 1610 | ||
1483 | #: src/datastore/gnunet-service-datastore.c:351 | 1611 | #: src/datastore/gnunet-service-datastore.c:365 |
1484 | msgid "# bytes expired" | 1612 | msgid "# bytes expired" |
1485 | msgstr "" | 1613 | msgstr "" |
1486 | 1614 | ||
1487 | #: src/datastore/gnunet-service-datastore.c:425 | 1615 | #: src/datastore/gnunet-service-datastore.c:439 |
1488 | msgid "# bytes purged (low-priority)" | 1616 | msgid "# bytes purged (low-priority)" |
1489 | msgstr "" | 1617 | msgstr "" |
1490 | 1618 | ||
1491 | #: src/datastore/gnunet-service-datastore.c:483 | 1619 | #: src/datastore/gnunet-service-datastore.c:497 |
1492 | #: src/gns/gnunet-gns-helper-service-w32.c:223 | 1620 | #: src/gns/gnunet-gns-helper-service-w32.c:223 |
1493 | msgid "Transmission to client failed!\n" | 1621 | msgid "Transmission to client failed!\n" |
1494 | msgstr "" | 1622 | msgstr "" |
1495 | 1623 | ||
1496 | #: src/datastore/gnunet-service-datastore.c:514 | 1624 | #: src/datastore/gnunet-service-datastore.c:528 |
1497 | #: src/gns/gnunet-gns-helper-service-w32.c:262 | 1625 | #: src/gns/gnunet-gns-helper-service-w32.c:262 |
1498 | msgid "Shutdown in progress, aborting transmission.\n" | 1626 | msgid "Shutdown in progress, aborting transmission.\n" |
1499 | msgstr "" | 1627 | msgstr "" |
1500 | 1628 | ||
1501 | #: src/datastore/gnunet-service-datastore.c:630 | 1629 | #: src/datastore/gnunet-service-datastore.c:643 |
1502 | msgid "# results found" | 1630 | msgid "# results found" |
1503 | msgstr "" | 1631 | msgstr "" |
1504 | 1632 | ||
1505 | #: src/datastore/gnunet-service-datastore.c:673 | 1633 | #: src/datastore/gnunet-service-datastore.c:686 |
1506 | #, c-format | 1634 | #, c-format |
1507 | msgid "Insufficient space (%llu bytes are available) to satisfy `%s' request for %llu bytes\n" | 1635 | msgid "" |
1636 | "Insufficient space (%llu bytes are available) to satisfy `%s' request for " | ||
1637 | "%llu bytes\n" | ||
1508 | msgstr "" | 1638 | msgstr "" |
1509 | 1639 | ||
1510 | #: src/datastore/gnunet-service-datastore.c:684 | 1640 | #: src/datastore/gnunet-service-datastore.c:697 |
1511 | #, c-format | 1641 | #, c-format |
1512 | msgid "The requested amount (%llu bytes) is larger than the cache size (%llu bytes)\n" | 1642 | msgid "" |
1643 | "The requested amount (%llu bytes) is larger than the cache size (%llu " | ||
1644 | "bytes)\n" | ||
1513 | msgstr "" | 1645 | msgstr "" |
1514 | 1646 | ||
1515 | #: src/datastore/gnunet-service-datastore.c:688 | 1647 | #: src/datastore/gnunet-service-datastore.c:701 |
1516 | msgid "Insufficient space to satisfy request and requested amount is larger than cache size" | 1648 | msgid "" |
1649 | "Insufficient space to satisfy request and requested amount is larger than " | ||
1650 | "cache size" | ||
1517 | msgstr "" | 1651 | msgstr "" |
1518 | 1652 | ||
1519 | #: src/datastore/gnunet-service-datastore.c:694 | 1653 | #: src/datastore/gnunet-service-datastore.c:707 |
1520 | msgid "Insufficient space to satisfy request" | 1654 | msgid "Insufficient space to satisfy request" |
1521 | msgstr "" | 1655 | msgstr "" |
1522 | 1656 | ||
1523 | #: src/datastore/gnunet-service-datastore.c:699 | 1657 | #: src/datastore/gnunet-service-datastore.c:712 |
1524 | #: src/datastore/gnunet-service-datastore.c:751 | 1658 | #: src/datastore/gnunet-service-datastore.c:767 |
1525 | #: src/datastore/gnunet-service-datastore.c:964 | 1659 | #: src/datastore/gnunet-service-datastore.c:999 |
1526 | #: src/datastore/gnunet-service-datastore.c:1421 | 1660 | #: src/datastore/gnunet-service-datastore.c:1570 |
1527 | msgid "# reserved" | 1661 | msgid "# reserved" |
1528 | msgstr "" | 1662 | msgstr "" |
1529 | 1663 | ||
1530 | #: src/datastore/gnunet-service-datastore.c:764 | 1664 | #: src/datastore/gnunet-service-datastore.c:780 |
1531 | msgid "Could not find matching reservation" | 1665 | msgid "Could not find matching reservation" |
1532 | msgstr "" | 1666 | msgstr "" |
1533 | 1667 | ||
1534 | #: src/datastore/gnunet-service-datastore.c:850 | 1668 | #: src/datastore/gnunet-service-datastore.c:853 |
1535 | #, c-format | 1669 | #, c-format |
1536 | msgid "Need %llu bytes more space (%llu allowed, using %llu)\n" | 1670 | msgid "Need %llu bytes more space (%llu allowed, using %llu)\n" |
1537 | msgstr "" | 1671 | msgstr "" |
1538 | 1672 | ||
1539 | #: src/datastore/gnunet-service-datastore.c:1010 | 1673 | #: src/datastore/gnunet-service-datastore.c:1046 |
1540 | msgid "# GET requests received" | 1674 | msgid "# GET requests received" |
1541 | msgstr "" | 1675 | msgstr "" |
1542 | 1676 | ||
1543 | #: src/datastore/gnunet-service-datastore.c:1022 | 1677 | #: src/datastore/gnunet-service-datastore.c:1058 |
1544 | msgid "# requests filtered by bloomfilter" | 1678 | msgid "# requests filtered by bloomfilter" |
1545 | msgstr "" | 1679 | msgstr "" |
1546 | 1680 | ||
1547 | #: src/datastore/gnunet-service-datastore.c:1050 | 1681 | #: src/datastore/gnunet-service-datastore.c:1094 |
1548 | msgid "# UPDATE requests received" | 1682 | msgid "# UPDATE requests received" |
1549 | msgstr "" | 1683 | msgstr "" |
1550 | 1684 | ||
1551 | #: src/datastore/gnunet-service-datastore.c:1080 | 1685 | #: src/datastore/gnunet-service-datastore.c:1122 |
1552 | msgid "# GET REPLICATION requests received" | 1686 | msgid "# GET REPLICATION requests received" |
1553 | msgstr "" | 1687 | msgstr "" |
1554 | 1688 | ||
1555 | #: src/datastore/gnunet-service-datastore.c:1113 | 1689 | #: src/datastore/gnunet-service-datastore.c:1155 |
1556 | msgid "# GET ZERO ANONYMITY requests received" | 1690 | msgid "# GET ZERO ANONYMITY requests received" |
1557 | msgstr "" | 1691 | msgstr "" |
1558 | 1692 | ||
1559 | #: src/datastore/gnunet-service-datastore.c:1138 | 1693 | #: src/datastore/gnunet-service-datastore.c:1180 |
1560 | msgid "Content not found" | 1694 | msgid "Content not found" |
1561 | msgstr "" | 1695 | msgstr "" |
1562 | 1696 | ||
1563 | #: src/datastore/gnunet-service-datastore.c:1146 | 1697 | #: src/datastore/gnunet-service-datastore.c:1188 |
1564 | msgid "# bytes removed (explicit request)" | 1698 | msgid "# bytes removed (explicit request)" |
1565 | msgstr "" | 1699 | msgstr "" |
1566 | 1700 | ||
1567 | #: src/datastore/gnunet-service-datastore.c:1178 | 1701 | #: src/datastore/gnunet-service-datastore.c:1220 |
1568 | msgid "# REMOVE requests received" | 1702 | msgid "# REMOVE requests received" |
1569 | msgstr "" | 1703 | msgstr "" |
1570 | 1704 | ||
1571 | #: src/datastore/gnunet-service-datastore.c:1220 | 1705 | #: src/datastore/gnunet-service-datastore.c:1264 |
1706 | #, c-format | ||
1707 | msgid "" | ||
1708 | "Datastore payload must have been inaccurate (%lld < %lld). Recomputing it.\n" | ||
1709 | msgstr "" | ||
1710 | |||
1711 | #: src/datastore/gnunet-service-datastore.c:1269 | ||
1572 | #, c-format | 1712 | #, c-format |
1573 | msgid "Datastore payload inaccurate (%lld < %lld). Trying to fix.\n" | 1713 | msgid "New payload: %lld\n" |
1574 | msgstr "" | 1714 | msgstr "" |
1575 | 1715 | ||
1576 | #: src/datastore/gnunet-service-datastore.c:1281 | 1716 | #: src/datastore/gnunet-service-datastore.c:1322 |
1577 | #, c-format | 1717 | #, c-format |
1578 | msgid "Loading `%s' datastore plugin\n" | 1718 | msgid "Loading `%s' datastore plugin\n" |
1579 | msgstr "" | 1719 | msgstr "" |
1580 | 1720 | ||
1581 | #: src/datastore/gnunet-service-datastore.c:1290 | 1721 | #: src/datastore/gnunet-service-datastore.c:1333 |
1582 | #, c-format | 1722 | #, c-format |
1583 | msgid "Failed to load datastore plugin for `%s'\n" | 1723 | msgid "Failed to load datastore plugin for `%s'\n" |
1584 | msgstr "" | 1724 | msgstr "" |
1585 | 1725 | ||
1586 | #: src/datastore/gnunet-service-datastore.c:1492 | 1726 | #: src/datastore/gnunet-service-datastore.c:1402 |
1727 | #: src/datastore/gnunet-service-datastore.c:1463 | ||
1728 | msgid "Bloomfilter construction complete.\n" | ||
1729 | msgstr "" | ||
1730 | |||
1731 | #: src/datastore/gnunet-service-datastore.c:1450 | ||
1732 | msgid "Rebuilding bloomfilter. Please be patient.\n" | ||
1733 | msgstr "" | ||
1734 | |||
1735 | #: src/datastore/gnunet-service-datastore.c:1460 | ||
1736 | msgid "Plugin does not support get_keys function. Please fix!\n" | ||
1737 | msgstr "" | ||
1738 | |||
1739 | #: src/datastore/gnunet-service-datastore.c:1603 | ||
1587 | #, c-format | 1740 | #, c-format |
1588 | msgid "# bytes used in file-sharing datastore `%s'" | 1741 | msgid "# bytes used in file-sharing datastore `%s'" |
1589 | msgstr "" | 1742 | msgstr "" |
1590 | 1743 | ||
1591 | #: src/datastore/gnunet-service-datastore.c:1503 | 1744 | #: src/datastore/gnunet-service-datastore.c:1614 |
1592 | msgid "# quota" | 1745 | msgid "# quota" |
1593 | msgstr "" | 1746 | msgstr "" |
1594 | 1747 | ||
1595 | #: src/datastore/gnunet-service-datastore.c:1505 | 1748 | #: src/datastore/gnunet-service-datastore.c:1616 |
1596 | msgid "# cache size" | 1749 | msgid "# cache size" |
1597 | msgstr "" | 1750 | msgstr "" |
1598 | 1751 | ||
1599 | #: src/datastore/gnunet-service-datastore.c:1518 | 1752 | #: src/datastore/gnunet-service-datastore.c:1629 |
1600 | #, c-format | 1753 | #, c-format |
1601 | msgid "Could not use specified filename `%s' for bloomfilter.\n" | 1754 | msgid "Could not use specified filename `%s' for bloomfilter.\n" |
1602 | msgstr "" | 1755 | msgstr "" |
1603 | 1756 | ||
1604 | #: src/datastore/gnunet-service-datastore.c:1536 | 1757 | #: src/datastore/gnunet-service-datastore.c:1647 |
1605 | #: src/datastore/gnunet-service-datastore.c:1552 | 1758 | #: src/datastore/gnunet-service-datastore.c:1663 |
1606 | #, c-format | 1759 | #, c-format |
1607 | msgid "Failed to remove bogus bloomfilter file `%s'\n" | 1760 | msgid "Failed to remove bogus bloomfilter file `%s'\n" |
1608 | msgstr "" | 1761 | msgstr "" |
1609 | 1762 | ||
1610 | #: src/datastore/gnunet-service-datastore.c:1582 | 1763 | #: src/datastore/gnunet-service-datastore.c:1693 |
1611 | msgid "Failed to initialize bloomfilter.\n" | 1764 | msgid "Failed to initialize bloomfilter.\n" |
1612 | msgstr "" | 1765 | msgstr "" |
1613 | 1766 | ||
1614 | #: src/datastore/gnunet-service-datastore.c:1611 | 1767 | #: src/datastore/plugin_datastore_heap.c:826 |
1615 | msgid "Rebuilding bloomfilter. Please be patient.\n" | 1768 | msgid "Heap database running\n" |
1616 | msgstr "" | 1769 | msgstr "" |
1617 | 1770 | ||
1618 | #: src/datastore/gnunet-service-datastore.c:1616 | 1771 | #: src/datastore/plugin_datastore_mysql.c:309 |
1619 | msgid "Plugin does not support get_keys function. Please fix!\n" | 1772 | #: src/datastore/plugin_datastore_sqlite.c:499 |
1773 | msgid "Data too large" | ||
1620 | msgstr "" | 1774 | msgstr "" |
1621 | 1775 | ||
1622 | #: src/datastore/gnunet-service-datastore.c:1619 | 1776 | #: src/datastore/plugin_datastore_mysql.c:328 |
1623 | msgid "Bloomfilter construction complete.\n" | 1777 | msgid "MySQL statement run failure" |
1624 | msgstr "" | 1778 | msgstr "" |
1625 | 1779 | ||
1626 | #: src/datastore/plugin_datastore_heap.c:820 | 1780 | #: src/datastore/plugin_datastore_mysql.c:793 |
1627 | msgid "Heap database running\n" | ||
1628 | msgstr "" | ||
1629 | |||
1630 | #: src/datastore/plugin_datastore_mysql.c:783 | ||
1631 | #, c-format | 1781 | #, c-format |
1632 | msgid "Failed to prepare statement `%s'\n" | 1782 | msgid "Failed to prepare statement `%s'\n" |
1633 | msgstr "" | 1783 | msgstr "" |
1634 | 1784 | ||
1635 | #: src/datastore/plugin_datastore_mysql.c:791 | 1785 | #: src/datastore/plugin_datastore_mysql.c:802 |
1636 | #, c-format | 1786 | #, c-format |
1637 | msgid "`%s' for `%s' failed at %s:%d with error: %s\n" | 1787 | msgid "`%s' for `%s' failed at %s:%d with error: %s\n" |
1638 | msgstr "" | 1788 | msgstr "" |
1639 | 1789 | ||
1640 | #: src/datastore/plugin_datastore_mysql.c:1022 | 1790 | #: src/datastore/plugin_datastore_mysql.c:1036 |
1641 | msgid "Mysql database running\n" | 1791 | msgid "Mysql database running\n" |
1642 | msgstr "" | 1792 | msgstr "" |
1643 | 1793 | ||
1644 | #: src/datastore/plugin_datastore_postgres.c:824 | 1794 | #: src/datastore/plugin_datastore_postgres.c:331 |
1795 | msgid "Postgress exec failure" | ||
1796 | msgstr "" | ||
1797 | |||
1798 | #: src/datastore/plugin_datastore_postgres.c:846 | ||
1645 | msgid "Failed to drop table from database.\n" | 1799 | msgid "Failed to drop table from database.\n" |
1646 | msgstr "" | 1800 | msgstr "" |
1647 | 1801 | ||
1648 | #: src/datastore/plugin_datastore_postgres.c:860 | 1802 | #: src/datastore/plugin_datastore_postgres.c:882 |
1649 | #: src/namecache/plugin_namecache_postgres.c:414 | 1803 | #: src/namecache/plugin_namecache_postgres.c:414 |
1650 | #: src/namestore/plugin_namestore_postgres.c:569 | 1804 | #: src/namestore/plugin_namestore_postgres.c:569 |
1651 | msgid "Postgres database running\n" | 1805 | msgid "Postgres database running\n" |
@@ -1662,35 +1816,38 @@ msgstr "" | |||
1662 | #: src/datastore/plugin_datastore_sqlite.c:255 | 1816 | #: src/datastore/plugin_datastore_sqlite.c:255 |
1663 | #: src/namecache/plugin_namecache_sqlite.c:193 | 1817 | #: src/namecache/plugin_namecache_sqlite.c:193 |
1664 | #: src/namestore/plugin_namestore_sqlite.c:204 | 1818 | #: src/namestore/plugin_namestore_sqlite.c:204 |
1665 | #: src/psycstore/plugin_psycstore_sqlite.c:319 | 1819 | #: src/peerstore/plugin_peerstore_sqlite.c:479 |
1820 | #: src/psycstore/plugin_psycstore_sqlite.c:329 | ||
1666 | #, c-format | 1821 | #, c-format |
1667 | msgid "Unable to initialize SQLite: %s.\n" | 1822 | msgid "Unable to initialize SQLite: %s.\n" |
1668 | msgstr "" | 1823 | msgstr "" |
1669 | 1824 | ||
1670 | #: src/datastore/plugin_datastore_sqlite.c:663 | 1825 | #: src/datastore/plugin_datastore_sqlite.c:680 |
1671 | msgid "Invalid data in database. Trying to fix (by deletion).\n" | 1826 | msgid "Invalid data in database. Trying to fix (by deletion).\n" |
1672 | msgstr "" | 1827 | msgstr "" |
1673 | 1828 | ||
1674 | #: src/datastore/plugin_datastore_sqlite.c:1156 | 1829 | #: src/datastore/plugin_datastore_sqlite.c:1177 |
1675 | msgid "sqlite version to old to determine size, assuming zero\n" | 1830 | msgid "sqlite version to old to determine size, assuming zero\n" |
1676 | msgstr "" | 1831 | msgstr "" |
1677 | 1832 | ||
1678 | #: src/datastore/plugin_datastore_sqlite.c:1175 | 1833 | #: src/datastore/plugin_datastore_sqlite.c:1197 |
1679 | #, c-format | 1834 | #, c-format |
1680 | msgid "Using sqlite page utilization to estimate payload (%llu pages of size %llu bytes)\n" | 1835 | msgid "" |
1836 | "Using sqlite page utilization to estimate payload (%llu pages of size %llu " | ||
1837 | "bytes)\n" | ||
1681 | msgstr "" | 1838 | msgstr "" |
1682 | 1839 | ||
1683 | #: src/datastore/plugin_datastore_sqlite.c:1215 | 1840 | #: src/datastore/plugin_datastore_sqlite.c:1237 |
1684 | #: src/namecache/plugin_namecache_sqlite.c:583 | 1841 | #: src/namecache/plugin_namecache_sqlite.c:580 |
1685 | #: src/namestore/plugin_namestore_sqlite.c:719 | 1842 | #: src/namestore/plugin_namestore_sqlite.c:716 |
1686 | msgid "Sqlite database running\n" | 1843 | msgid "Sqlite database running\n" |
1687 | msgstr "" | 1844 | msgstr "" |
1688 | 1845 | ||
1689 | #: src/datastore/plugin_datastore_template.c:257 | 1846 | #: src/datastore/plugin_datastore_template.c:260 |
1690 | msgid "Template database running\n" | 1847 | msgid "Template database running\n" |
1691 | msgstr "" | 1848 | msgstr "" |
1692 | 1849 | ||
1693 | #: src/dht/dht_api.c:376 | 1850 | #: src/dht/dht_api.c:403 |
1694 | msgid "Failed to connect to the DHT service!\n" | 1851 | msgid "Failed to connect to the DHT service!\n" |
1695 | msgstr "" | 1852 | msgstr "" |
1696 | 1853 | ||
@@ -1735,8 +1892,8 @@ msgid "use DHT's demultiplex everywhere option" | |||
1735 | msgstr "" | 1892 | msgstr "" |
1736 | 1893 | ||
1737 | #: src/dht/gnunet-dht-get.c:204 src/dht/gnunet-dht-monitor.c:271 | 1894 | #: src/dht/gnunet-dht-get.c:204 src/dht/gnunet-dht-monitor.c:271 |
1738 | #: src/dht/gnunet-dht-put.c:213 src/fs/gnunet-auto-share.c:753 | 1895 | #: src/dht/gnunet-dht-put.c:213 src/fs/gnunet-auto-share.c:755 |
1739 | #: src/fs/gnunet-download.c:328 src/fs/gnunet-publish.c:877 | 1896 | #: src/fs/gnunet-download.c:328 src/fs/gnunet-publish.c:941 |
1740 | #: src/fs/gnunet-search.c:301 src/fs/gnunet-unindex.c:168 | 1897 | #: src/fs/gnunet-search.c:301 src/fs/gnunet-unindex.c:168 |
1741 | #: src/nse/gnunet-nse-profiler.c:873 | 1898 | #: src/nse/gnunet-nse-profiler.c:873 |
1742 | msgid "be verbose (print progress information)" | 1899 | msgid "be verbose (print progress information)" |
@@ -1754,6 +1911,52 @@ msgstr "" | |||
1754 | msgid "Prints all packets that go through the DHT." | 1911 | msgid "Prints all packets that go through the DHT." |
1755 | msgstr "" | 1912 | msgstr "" |
1756 | 1913 | ||
1914 | #: src/dht/gnunet_dht_profiler.c:1393 | ||
1915 | #: src/testbed/gnunet-testbed-profiler.c:267 | ||
1916 | #, c-format | ||
1917 | msgid "Exiting as the number of peers is %u\n" | ||
1918 | msgstr "" | ||
1919 | |||
1920 | #: src/dht/gnunet_dht_profiler.c:1418 | ||
1921 | #, fuzzy | ||
1922 | msgid "number of peers to start" | ||
1923 | msgstr "nombre de valeurs" | ||
1924 | |||
1925 | #: src/dht/gnunet_dht_profiler.c:1421 | ||
1926 | msgid "" | ||
1927 | "maximum number of times we try to search for successor circle formation (0 " | ||
1928 | "for R5N)" | ||
1929 | msgstr "" | ||
1930 | |||
1931 | #: src/dht/gnunet_dht_profiler.c:1424 src/nse/gnunet-nse-profiler.c:864 | ||
1932 | #: src/testbed/gnunet-testbed-profiler.c:306 | ||
1933 | msgid "name of the file with the login information for the testbed" | ||
1934 | msgstr "" | ||
1935 | |||
1936 | #: src/dht/gnunet_dht_profiler.c:1427 | ||
1937 | msgid "delay between rounds for collecting statistics (default: 30 sec)" | ||
1938 | msgstr "" | ||
1939 | |||
1940 | #: src/dht/gnunet_dht_profiler.c:1430 | ||
1941 | msgid "delay to start doing PUTs (default: 1 sec)" | ||
1942 | msgstr "" | ||
1943 | |||
1944 | #: src/dht/gnunet_dht_profiler.c:1433 | ||
1945 | msgid "delay to start doing GETs (default: 5 min)" | ||
1946 | msgstr "" | ||
1947 | |||
1948 | #: src/dht/gnunet_dht_profiler.c:1436 | ||
1949 | msgid "replication degree for DHT PUTs" | ||
1950 | msgstr "" | ||
1951 | |||
1952 | #: src/dht/gnunet_dht_profiler.c:1439 | ||
1953 | msgid "timeout for DHT PUT and GET requests (default: 1 min)" | ||
1954 | msgstr "" | ||
1955 | |||
1956 | #: src/dht/gnunet_dht_profiler.c:1457 | ||
1957 | msgid "Measure quality and performance of the DHT service." | ||
1958 | msgstr "" | ||
1959 | |||
1757 | #: src/dht/gnunet-dht-put.c:118 | 1960 | #: src/dht/gnunet-dht-put.c:118 |
1758 | msgid "PUT request sent with key" | 1961 | msgid "PUT request sent with key" |
1759 | msgstr "" | 1962 | msgstr "" |
@@ -1800,107 +2003,107 @@ msgstr "" | |||
1800 | msgid "Issue a PUT request to the GNUnet DHT insert DATA under KEY." | 2003 | msgid "Issue a PUT request to the GNUnet DHT insert DATA under KEY." |
1801 | msgstr "" | 2004 | msgstr "" |
1802 | 2005 | ||
1803 | #: src/dht/gnunet-service-dht.c:172 src/dht/gnunet-service-xdht.c:176 | 2006 | #: src/dht/gnunet-service-dht.c:172 src/dht/gnunet-service-xdht.c:193 |
1804 | msgid "Failed to connect to transport service!\n" | 2007 | msgid "Failed to connect to transport service!\n" |
1805 | msgstr "" | 2008 | msgstr "" |
1806 | 2009 | ||
1807 | #: src/dht/gnunet-service-dht_clients.c:417 | 2010 | #: src/dht/gnunet-service-dht_clients.c:417 |
1808 | #: src/dht/gnunet-service-xdht_clients.c:838 | 2011 | #: src/dht/gnunet-service-xdht_clients.c:849 |
1809 | msgid "# GET requests from clients injected" | 2012 | msgid "# GET requests from clients injected" |
1810 | msgstr "" | 2013 | msgstr "" |
1811 | 2014 | ||
1812 | #: src/dht/gnunet-service-dht_clients.c:513 | 2015 | #: src/dht/gnunet-service-dht_clients.c:513 |
1813 | #: src/dht/gnunet-service-xdht_clients.c:927 | 2016 | #: src/dht/gnunet-service-xdht_clients.c:933 |
1814 | msgid "# PUT requests received from clients" | 2017 | msgid "# PUT requests received from clients" |
1815 | msgstr "" | 2018 | msgstr "" |
1816 | 2019 | ||
1817 | #: src/dht/gnunet-service-dht_clients.c:597 | 2020 | #: src/dht/gnunet-service-dht_clients.c:597 |
1818 | #: src/dht/gnunet-service-xdht_clients.c:1013 | 2021 | #: src/dht/gnunet-service-xdht_clients.c:998 |
1819 | msgid "# GET requests received from clients" | 2022 | msgid "# GET requests received from clients" |
1820 | msgstr "" | 2023 | msgstr "" |
1821 | 2024 | ||
1822 | #: src/dht/gnunet-service-dht_clients.c:798 | 2025 | #: src/dht/gnunet-service-dht_clients.c:798 |
1823 | #: src/dht/gnunet-service-xdht_clients.c:1214 | 2026 | #: src/dht/gnunet-service-xdht_clients.c:1200 |
1824 | msgid "# GET STOP requests received from clients" | 2027 | msgid "# GET STOP requests received from clients" |
1825 | msgstr "" | 2028 | msgstr "" |
1826 | 2029 | ||
1827 | #: src/dht/gnunet-service-dht_clients.c:1039 | 2030 | #: src/dht/gnunet-service-dht_clients.c:1040 |
1828 | #: src/dht/gnunet-service-xdht_clients.c:498 | 2031 | #: src/dht/gnunet-service-xdht_clients.c:503 |
1829 | msgid "# Key match, type mismatches in REPLY to CLIENT" | 2032 | msgid "# Key match, type mismatches in REPLY to CLIENT" |
1830 | msgstr "" | 2033 | msgstr "" |
1831 | 2034 | ||
1832 | #: src/dht/gnunet-service-dht_clients.c:1052 | 2035 | #: src/dht/gnunet-service-dht_clients.c:1053 |
1833 | #: src/dht/gnunet-service-xdht_clients.c:511 | 2036 | #: src/dht/gnunet-service-xdht_clients.c:517 |
1834 | msgid "# Duplicate REPLIES to CLIENT request dropped" | 2037 | msgid "# Duplicate REPLIES to CLIENT request dropped" |
1835 | msgstr "" | 2038 | msgstr "" |
1836 | 2039 | ||
1837 | #: src/dht/gnunet-service-dht_clients.c:1089 | 2040 | #: src/dht/gnunet-service-dht_clients.c:1098 |
1838 | #: src/dht/gnunet-service-xdht_clients.c:548 | 2041 | #: src/dht/gnunet-service-xdht_clients.c:559 |
1839 | #, c-format | 2042 | #, c-format |
1840 | msgid "Unsupported block type (%u) in request!\n" | 2043 | msgid "Unsupported block type (%u) in request!\n" |
1841 | msgstr "" | 2044 | msgstr "" |
1842 | 2045 | ||
1843 | #: src/dht/gnunet-service-dht_clients.c:1112 | 2046 | #: src/dht/gnunet-service-dht_clients.c:1121 |
1844 | #: src/dht/gnunet-service-xdht_clients.c:571 | 2047 | #: src/dht/gnunet-service-xdht_clients.c:582 |
1845 | msgid "# RESULTS queued for clients" | 2048 | msgid "# RESULTS queued for clients" |
1846 | msgstr "" | 2049 | msgstr "" |
1847 | 2050 | ||
1848 | #: src/dht/gnunet-service-dht_clients.c:1166 | 2051 | #: src/dht/gnunet-service-dht_clients.c:1175 |
1849 | #: src/dht/gnunet-service-dht_clients.c:1209 | 2052 | #: src/dht/gnunet-service-dht_clients.c:1218 |
1850 | #: src/dht/gnunet-service-xdht_clients.c:625 | 2053 | #: src/dht/gnunet-service-xdht_clients.c:636 |
1851 | #: src/dht/gnunet-service-xdht_clients.c:668 | 2054 | #: src/dht/gnunet-service-xdht_clients.c:679 |
1852 | msgid "# REPLIES ignored for CLIENTS (no match)" | 2055 | msgid "# REPLIES ignored for CLIENTS (no match)" |
1853 | msgstr "" | 2056 | msgstr "" |
1854 | 2057 | ||
1855 | #: src/dht/gnunet-service-dht_clients.c:1176 | 2058 | #: src/dht/gnunet-service-dht_clients.c:1185 |
1856 | #: src/dht/gnunet-service-xdht_clients.c:635 | 2059 | #: src/dht/gnunet-service-xdht_clients.c:646 |
1857 | msgid "Could not pass reply to client, message too big!\n" | 2060 | msgid "Could not pass reply to client, message too big!\n" |
1858 | msgstr "" | 2061 | msgstr "" |
1859 | 2062 | ||
1860 | #: src/dht/gnunet-service-dht_datacache.c:68 | 2063 | #: src/dht/gnunet-service-dht_datacache.c:69 |
1861 | #: src/dht/gnunet-service-xdht_datacache.c:68 | 2064 | #: src/dht/gnunet-service-xdht_datacache.c:71 |
1862 | #, c-format | 2065 | #, c-format |
1863 | msgid "%s request received, but have no datacache!\n" | 2066 | msgid "%s request received, but have no datacache!\n" |
1864 | msgstr "" | 2067 | msgstr "" |
1865 | 2068 | ||
1866 | #: src/dht/gnunet-service-dht_datacache.c:78 | 2069 | #: src/dht/gnunet-service-dht_datacache.c:79 |
1867 | #: src/dht/gnunet-service-xdht_datacache.c:78 | 2070 | #: src/dht/gnunet-service-xdht_datacache.c:82 |
1868 | msgid "# ITEMS stored in datacache" | 2071 | msgid "# ITEMS stored in datacache" |
1869 | msgstr "" | 2072 | msgstr "" |
1870 | 2073 | ||
1871 | #: src/dht/gnunet-service-dht_datacache.c:165 | 2074 | #: src/dht/gnunet-service-dht_datacache.c:176 |
1872 | #: src/dht/gnunet-service-xdht_datacache.c:165 | 2075 | #: src/dht/gnunet-service-xdht_datacache.c:230 |
1873 | msgid "# Good RESULTS found in datacache" | 2076 | msgid "# Good RESULTS found in datacache" |
1874 | msgstr "" | 2077 | msgstr "" |
1875 | 2078 | ||
1876 | #: src/dht/gnunet-service-dht_datacache.c:176 | 2079 | #: src/dht/gnunet-service-dht_datacache.c:193 |
1877 | #: src/dht/gnunet-service-xdht_datacache.c:176 | 2080 | #: src/dht/gnunet-service-xdht_datacache.c:253 |
1878 | msgid "# Duplicate RESULTS found in datacache" | 2081 | msgid "# Duplicate RESULTS found in datacache" |
1879 | msgstr "" | 2082 | msgstr "" |
1880 | 2083 | ||
1881 | #: src/dht/gnunet-service-dht_datacache.c:182 | 2084 | #: src/dht/gnunet-service-dht_datacache.c:199 |
1882 | #: src/dht/gnunet-service-xdht_datacache.c:182 | 2085 | #: src/dht/gnunet-service-xdht_datacache.c:259 |
1883 | msgid "# Invalid RESULTS found in datacache" | 2086 | msgid "# Invalid RESULTS found in datacache" |
1884 | msgstr "" | 2087 | msgstr "" |
1885 | 2088 | ||
1886 | #: src/dht/gnunet-service-dht_datacache.c:188 | 2089 | #: src/dht/gnunet-service-dht_datacache.c:205 |
1887 | #: src/dht/gnunet-service-xdht_datacache.c:188 | 2090 | #: src/dht/gnunet-service-xdht_datacache.c:265 |
1888 | msgid "# Irrelevant RESULTS found in datacache" | 2091 | msgid "# Irrelevant RESULTS found in datacache" |
1889 | msgstr "" | 2092 | msgstr "" |
1890 | 2093 | ||
1891 | #: src/dht/gnunet-service-dht_datacache.c:200 | 2094 | #: src/dht/gnunet-service-dht_datacache.c:217 |
1892 | #: src/dht/gnunet-service-xdht_datacache.c:200 | 2095 | #: src/dht/gnunet-service-xdht_datacache.c:277 |
1893 | msgid "# Unsupported RESULTS found in datacache" | 2096 | msgid "# Unsupported RESULTS found in datacache" |
1894 | msgstr "" | 2097 | msgstr "" |
1895 | 2098 | ||
1896 | #: src/dht/gnunet-service-dht_datacache.c:203 | 2099 | #: src/dht/gnunet-service-dht_datacache.c:221 |
1897 | #: src/dht/gnunet-service-xdht_datacache.c:203 | 2100 | #: src/dht/gnunet-service-xdht_datacache.c:280 |
1898 | #, c-format | 2101 | #, c-format |
1899 | msgid "Unsupported block type (%u) in local response!\n" | 2102 | msgid "Unsupported block type (%u) in local response!\n" |
1900 | msgstr "" | 2103 | msgstr "" |
1901 | 2104 | ||
1902 | #: src/dht/gnunet-service-dht_datacache.c:234 | 2105 | #: src/dht/gnunet-service-dht_datacache.c:254 |
1903 | #: src/dht/gnunet-service-xdht_datacache.c:234 | 2106 | #: src/dht/gnunet-service-xdht_datacache.c:318 |
1904 | msgid "# GET requests given to datacache" | 2107 | msgid "# GET requests given to datacache" |
1905 | msgstr "" | 2108 | msgstr "" |
1906 | 2109 | ||
@@ -1909,110 +2112,119 @@ msgstr "" | |||
1909 | msgid "# HELLOs obtained from peerinfo" | 2112 | msgid "# HELLOs obtained from peerinfo" |
1910 | msgstr "" | 2113 | msgstr "" |
1911 | 2114 | ||
1912 | #: src/dht/gnunet-service-dht_neighbours.c:516 | 2115 | #: src/dht/gnunet-service-dht_neighbours.c:515 |
1913 | msgid "# Preference updates given to core" | 2116 | msgid "# Preference updates given to core" |
1914 | msgstr "" | 2117 | msgstr "" |
1915 | 2118 | ||
1916 | #: src/dht/gnunet-service-dht_neighbours.c:610 | 2119 | #: src/dht/gnunet-service-dht_neighbours.c:609 |
1917 | msgid "# FIND PEER messages initiated" | 2120 | msgid "# FIND PEER messages initiated" |
1918 | msgstr "" | 2121 | msgstr "" |
1919 | 2122 | ||
1920 | #: src/dht/gnunet-service-dht_neighbours.c:764 | 2123 | #: src/dht/gnunet-service-dht_neighbours.c:763 |
2124 | #: src/dht/gnunet-service-xdht_neighbours.c:6060 | ||
1921 | msgid "# Queued messages discarded (peer disconnected)" | 2125 | msgid "# Queued messages discarded (peer disconnected)" |
1922 | msgstr "" | 2126 | msgstr "" |
1923 | 2127 | ||
1924 | #: src/dht/gnunet-service-dht_neighbours.c:819 | 2128 | #: src/dht/gnunet-service-dht_neighbours.c:793 |
1925 | #: src/dht/gnunet-service-xdht_neighbours.c:703 | 2129 | #: src/dht/gnunet-service-xdht_neighbours.c:987 |
2130 | msgid "# Messages dropped (CORE timeout)" | ||
2131 | msgstr "" | ||
2132 | |||
2133 | #: src/dht/gnunet-service-dht_neighbours.c:823 | ||
2134 | #: src/dht/gnunet-service-xdht_neighbours.c:1019 | ||
1926 | msgid "# Bytes transmitted to other peers" | 2135 | msgid "# Bytes transmitted to other peers" |
1927 | msgstr "" | 2136 | msgstr "" |
1928 | 2137 | ||
1929 | #: src/dht/gnunet-service-dht_neighbours.c:857 | 2138 | #: src/dht/gnunet-service-dht_neighbours.c:861 |
1930 | #: src/dht/gnunet-service-xdht_neighbours.c:742 | ||
1931 | msgid "# Bytes of bandwidth requested from core" | 2139 | msgid "# Bytes of bandwidth requested from core" |
1932 | msgstr "" | 2140 | msgstr "" |
1933 | 2141 | ||
1934 | #: src/dht/gnunet-service-dht_neighbours.c:889 | 2142 | #: src/dht/gnunet-service-dht_neighbours.c:893 |
1935 | msgid "# requests TTL-dropped" | 2143 | msgid "# requests TTL-dropped" |
1936 | msgstr "" | 2144 | msgstr "" |
1937 | 2145 | ||
1938 | #: src/dht/gnunet-service-dht_neighbours.c:1093 | 2146 | #: src/dht/gnunet-service-dht_neighbours.c:1097 |
1939 | #: src/dht/gnunet-service-dht_neighbours.c:1130 | 2147 | #: src/dht/gnunet-service-dht_neighbours.c:1134 |
1940 | msgid "# Peers excluded from routing due to Bloomfilter" | 2148 | msgid "# Peers excluded from routing due to Bloomfilter" |
1941 | msgstr "" | 2149 | msgstr "" |
1942 | 2150 | ||
1943 | #: src/dht/gnunet-service-dht_neighbours.c:1108 | 2151 | #: src/dht/gnunet-service-dht_neighbours.c:1112 |
1944 | #: src/dht/gnunet-service-dht_neighbours.c:1145 | 2152 | #: src/dht/gnunet-service-dht_neighbours.c:1149 |
1945 | msgid "# Peer selection failed" | 2153 | msgid "# Peer selection failed" |
1946 | msgstr "" | 2154 | msgstr "" |
1947 | 2155 | ||
1948 | #: src/dht/gnunet-service-dht_neighbours.c:1287 | 2156 | #: src/dht/gnunet-service-dht_neighbours.c:1293 |
1949 | msgid "# PUT requests routed" | 2157 | msgid "# PUT requests routed" |
1950 | msgstr "" | 2158 | msgstr "" |
1951 | 2159 | ||
1952 | #: src/dht/gnunet-service-dht_neighbours.c:1316 | 2160 | #: src/dht/gnunet-service-dht_neighbours.c:1322 |
1953 | msgid "# PUT messages queued for transmission" | 2161 | msgid "# PUT messages queued for transmission" |
1954 | msgstr "" | 2162 | msgstr "" |
1955 | 2163 | ||
1956 | #: src/dht/gnunet-service-dht_neighbours.c:1323 | 2164 | #: src/dht/gnunet-service-dht_neighbours.c:1332 |
1957 | #: src/dht/gnunet-service-dht_neighbours.c:1440 | 2165 | #: src/dht/gnunet-service-dht_neighbours.c:1456 |
1958 | #: src/dht/gnunet-service-dht_neighbours.c:1543 | 2166 | #: src/dht/gnunet-service-dht_neighbours.c:1561 |
1959 | #: src/dht/gnunet-service-xdht_neighbours.c:794 | 2167 | #: src/dht/gnunet-service-xdht_neighbours.c:1129 |
1960 | #: src/dht/gnunet-service-xdht_neighbours.c:860 | 2168 | #: src/dht/gnunet-service-xdht_neighbours.c:1198 |
1961 | #: src/dht/gnunet-service-xdht_neighbours.c:919 | 2169 | #: src/dht/gnunet-service-xdht_neighbours.c:1248 |
1962 | #: src/dht/gnunet-service-xdht_neighbours.c:981 | 2170 | #: src/dht/gnunet-service-xdht_neighbours.c:1312 |
1963 | #: src/dht/gnunet-service-xdht_neighbours.c:1041 | 2171 | #: src/dht/gnunet-service-xdht_neighbours.c:1379 |
2172 | #: src/dht/gnunet-service-xdht_neighbours.c:1441 | ||
2173 | #: src/dht/gnunet-service-xdht_neighbours.c:1503 | ||
2174 | #: src/dht/gnunet-service-xdht_neighbours.c:1565 | ||
2175 | #: src/dht/gnunet-service-xdht_neighbours.c:1625 | ||
1964 | msgid "# P2P messages dropped due to full queue" | 2176 | msgid "# P2P messages dropped due to full queue" |
1965 | msgstr "" | 2177 | msgstr "" |
1966 | 2178 | ||
1967 | #: src/dht/gnunet-service-dht_neighbours.c:1405 | 2179 | #: src/dht/gnunet-service-dht_neighbours.c:1418 |
1968 | msgid "# GET requests routed" | 2180 | msgid "# GET requests routed" |
1969 | msgstr "" | 2181 | msgstr "" |
1970 | 2182 | ||
1971 | #: src/dht/gnunet-service-dht_neighbours.c:1432 | 2183 | #: src/dht/gnunet-service-dht_neighbours.c:1445 |
1972 | msgid "# GET messages queued for transmission" | 2184 | msgid "# GET messages queued for transmission" |
1973 | msgstr "" | 2185 | msgstr "" |
1974 | 2186 | ||
1975 | #: src/dht/gnunet-service-dht_neighbours.c:1550 | 2187 | #: src/dht/gnunet-service-dht_neighbours.c:1568 |
1976 | msgid "# RESULT messages queued for transmission" | 2188 | msgid "# RESULT messages queued for transmission" |
1977 | msgstr "" | 2189 | msgstr "" |
1978 | 2190 | ||
1979 | #: src/dht/gnunet-service-dht_neighbours.c:1636 | 2191 | #: src/dht/gnunet-service-dht_neighbours.c:1655 |
1980 | msgid "# P2P PUT requests received" | 2192 | msgid "# P2P PUT requests received" |
1981 | msgstr "" | 2193 | msgstr "" |
1982 | 2194 | ||
1983 | #: src/dht/gnunet-service-dht_neighbours.c:1639 | 2195 | #: src/dht/gnunet-service-dht_neighbours.c:1658 |
1984 | msgid "# P2P PUT bytes received" | 2196 | msgid "# P2P PUT bytes received" |
1985 | msgstr "" | 2197 | msgstr "" |
1986 | 2198 | ||
1987 | #: src/dht/gnunet-service-dht_neighbours.c:1803 | 2199 | #: src/dht/gnunet-service-dht_neighbours.c:1826 |
1988 | msgid "# FIND PEER requests ignored due to Bloomfilter" | 2200 | msgid "# FIND PEER requests ignored due to Bloomfilter" |
1989 | msgstr "" | 2201 | msgstr "" |
1990 | 2202 | ||
1991 | #: src/dht/gnunet-service-dht_neighbours.c:1811 | 2203 | #: src/dht/gnunet-service-dht_neighbours.c:1834 |
1992 | msgid "# FIND PEER requests ignored due to lack of HELLO" | 2204 | msgid "# FIND PEER requests ignored due to lack of HELLO" |
1993 | msgstr "" | 2205 | msgstr "" |
1994 | 2206 | ||
1995 | #: src/dht/gnunet-service-dht_neighbours.c:1904 | 2207 | #: src/dht/gnunet-service-dht_neighbours.c:1929 |
1996 | msgid "# P2P GET requests received" | 2208 | msgid "# P2P GET requests received" |
1997 | msgstr "" | 2209 | msgstr "" |
1998 | 2210 | ||
1999 | #: src/dht/gnunet-service-dht_neighbours.c:1907 | 2211 | #: src/dht/gnunet-service-dht_neighbours.c:1932 |
2000 | msgid "# P2P GET bytes received" | 2212 | msgid "# P2P GET bytes received" |
2001 | msgstr "" | 2213 | msgstr "" |
2002 | 2214 | ||
2003 | #: src/dht/gnunet-service-dht_neighbours.c:1961 | 2215 | #: src/dht/gnunet-service-dht_neighbours.c:1997 |
2004 | msgid "# P2P FIND PEER requests processed" | 2216 | msgid "# P2P FIND PEER requests processed" |
2005 | msgstr "" | 2217 | msgstr "" |
2006 | 2218 | ||
2007 | #: src/dht/gnunet-service-dht_neighbours.c:1975 | 2219 | #: src/dht/gnunet-service-dht_neighbours.c:2011 |
2008 | msgid "# P2P GET requests ONLY routed" | 2220 | msgid "# P2P GET requests ONLY routed" |
2009 | msgstr "" | 2221 | msgstr "" |
2010 | 2222 | ||
2011 | #: src/dht/gnunet-service-dht_neighbours.c:2052 | 2223 | #: src/dht/gnunet-service-dht_neighbours.c:2096 |
2012 | msgid "# P2P RESULTS received" | 2224 | msgid "# P2P RESULTS received" |
2013 | msgstr "" | 2225 | msgstr "" |
2014 | 2226 | ||
2015 | #: src/dht/gnunet-service-dht_neighbours.c:2055 | 2227 | #: src/dht/gnunet-service-dht_neighbours.c:2099 |
2016 | msgid "# P2P RESULT bytes received" | 2228 | msgid "# P2P RESULT bytes received" |
2017 | msgstr "" | 2229 | msgstr "" |
2018 | 2230 | ||
@@ -2020,76 +2232,161 @@ msgstr "" | |||
2020 | msgid "# Network size estimates received" | 2232 | msgid "# Network size estimates received" |
2021 | msgstr "" | 2233 | msgstr "" |
2022 | 2234 | ||
2023 | #: src/dht/gnunet-service-dht_routing.c:211 | 2235 | #: src/dht/gnunet-service-dht_routing.c:218 |
2024 | msgid "# Good REPLIES matched against routing table" | 2236 | msgid "# Good REPLIES matched against routing table" |
2025 | msgstr "" | 2237 | msgstr "" |
2026 | 2238 | ||
2027 | #: src/dht/gnunet-service-dht_routing.c:220 | 2239 | #: src/dht/gnunet-service-dht_routing.c:227 |
2028 | msgid "# Duplicate REPLIES matched against routing table" | 2240 | msgid "# Duplicate REPLIES matched against routing table" |
2029 | msgstr "" | 2241 | msgstr "" |
2030 | 2242 | ||
2031 | #: src/dht/gnunet-service-dht_routing.c:226 | 2243 | #: src/dht/gnunet-service-dht_routing.c:233 |
2032 | msgid "# Invalid REPLIES matched against routing table" | 2244 | msgid "# Invalid REPLIES matched against routing table" |
2033 | msgstr "" | 2245 | msgstr "" |
2034 | 2246 | ||
2035 | #: src/dht/gnunet-service-dht_routing.c:232 | 2247 | #: src/dht/gnunet-service-dht_routing.c:239 |
2036 | msgid "# Irrelevant REPLIES matched against routing table" | 2248 | msgid "# Irrelevant REPLIES matched against routing table" |
2037 | msgstr "" | 2249 | msgstr "" |
2038 | 2250 | ||
2039 | #: src/dht/gnunet-service-dht_routing.c:244 | 2251 | #: src/dht/gnunet-service-dht_routing.c:251 |
2040 | msgid "# Unsupported REPLIES matched against routing table" | 2252 | msgid "# Unsupported REPLIES matched against routing table" |
2041 | msgstr "" | 2253 | msgstr "" |
2042 | 2254 | ||
2043 | #: src/dht/gnunet-service-dht_routing.c:317 | 2255 | #: src/dht/gnunet-service-dht_routing.c:324 |
2044 | msgid "# Entries removed from routing table" | 2256 | msgid "# Entries removed from routing table" |
2045 | msgstr "" | 2257 | msgstr "" |
2046 | 2258 | ||
2047 | #: src/dht/gnunet-service-dht_routing.c:399 | 2259 | #: src/dht/gnunet-service-dht_routing.c:406 |
2048 | msgid "# Entries added to routing table" | 2260 | msgid "# Entries added to routing table" |
2049 | msgstr "" | 2261 | msgstr "" |
2050 | 2262 | ||
2051 | #: src/dht/gnunet-service-dht_routing.c:417 | 2263 | #: src/dht/gnunet-service-dht_routing.c:424 |
2052 | msgid "# DHT requests combined" | 2264 | msgid "# DHT requests combined" |
2053 | msgstr "" | 2265 | msgstr "" |
2054 | 2266 | ||
2055 | #: src/dht/gnunet-service-xdht_neighbours.c:1398 | 2267 | #: src/dht/gnunet-service-xdht_neighbours.c:1832 |
2268 | #, c-format | ||
2269 | msgid "" | ||
2270 | "\n" | ||
2271 | "SUPU %s, %s, %d,trail_length = %d" | ||
2272 | msgstr "" | ||
2273 | |||
2274 | #: src/dht/gnunet-service-xdht_neighbours.c:1837 | ||
2056 | #, c-format | 2275 | #, c-format |
2057 | msgid "" | 2276 | msgid "" |
2058 | "\n" | 2277 | "\n" |
2059 | "SUPU %s, %s, %d,my_identity = %s" | 2278 | "SUPU %s, %s, %d,trail[%d]=%s" |
2060 | msgstr "" | 2279 | msgstr "" |
2061 | 2280 | ||
2062 | #: src/dht/gnunet-service-xdht_neighbours.c:1514 | 2281 | #: src/dht/gnunet-service-xdht_neighbours.c:1857 |
2063 | #: src/dht/gnunet-service-xdht_neighbours.c:1524 | ||
2064 | #: src/dht/gnunet-service-xdht_neighbours.c:1530 | ||
2065 | #: src/dht/gnunet-service-xdht_neighbours.c:1536 | ||
2066 | #: src/dht/gnunet-service-xdht_neighbours.c:1545 | ||
2067 | #, c-format | 2282 | #, c-format |
2068 | msgid "" | 2283 | msgid "" |
2069 | "\n" | 2284 | "\n" |
2070 | "SUPU %s, %s, %d" | 2285 | "SUPU************ FRIEND_PEERMAP of %s" |
2071 | msgstr "" | 2286 | msgstr "" |
2072 | 2287 | ||
2073 | #: src/dht/plugin_block_dht.c:138 | 2288 | #: src/dht/gnunet-service-xdht_neighbours.c:1867 |
2289 | #, c-format | ||
2290 | msgid "" | ||
2291 | "\n" | ||
2292 | "SUPU %s, %s, %d, friend = %s, friend->trails_count = %d" | ||
2293 | msgstr "" | ||
2294 | |||
2295 | #: src/dht/gnunet-service-xdht_neighbours.c:1888 | ||
2296 | #, c-format | ||
2297 | msgid "" | ||
2298 | "\n" | ||
2299 | "SUPU************ FINGER_TABLE of %s" | ||
2300 | msgstr "" | ||
2301 | |||
2302 | #: src/dht/gnunet-service-xdht_neighbours.c:1897 | ||
2303 | #, c-format | ||
2304 | msgid "" | ||
2305 | "\n" | ||
2306 | "SUPU %s, %s, %d, finger_table[%d] = %s, trails_count = %d" | ||
2307 | msgstr "" | ||
2308 | |||
2309 | #: src/dht/gnunet-service-xdht_neighbours.c:1904 | ||
2310 | #, c-format | ||
2311 | msgid "" | ||
2312 | "\n" | ||
2313 | "SUPU %s, %s, %d, trail_id[%d]=%s" | ||
2314 | msgstr "" | ||
2315 | |||
2316 | #: src/dht/gnunet-service-xdht_neighbours.c:1910 | ||
2317 | #, c-format | ||
2318 | msgid "" | ||
2319 | "\n" | ||
2320 | "SUPU %s, %s, %d,trail[%d] = %s " | ||
2321 | msgstr "" | ||
2322 | |||
2323 | #: src/dht/gnunet-service-xdht_neighbours.c:3559 | ||
2324 | msgid "# FINGERS_COUNT" | ||
2325 | msgstr "" | ||
2326 | |||
2327 | #: src/dht/gnunet-service-xdht_neighbours.c:3700 | ||
2328 | #: src/dht/gnunet-service-xdht_neighbours.c:3938 | ||
2329 | #: src/dht/gnunet-service-xdht_neighbours.c:4090 | ||
2330 | #: src/dht/gnunet-service-xdht_neighbours.c:4240 | ||
2331 | #: src/dht/gnunet-service-xdht_neighbours.c:4421 | ||
2332 | #: src/dht/gnunet-service-xdht_neighbours.c:4934 | ||
2333 | #: src/dht/gnunet-service-xdht_neighbours.c:5327 | ||
2334 | #: src/dht/gnunet-service-xdht_neighbours.c:5420 | ||
2335 | #: src/dht/gnunet-service-xdht_neighbours.c:5510 | ||
2336 | #: src/dht/gnunet-service-xdht_neighbours.c:5614 | ||
2337 | #: src/dht/gnunet-service-xdht_neighbours.c:5758 | ||
2338 | #: src/dht/gnunet-service-xdht_neighbours.c:5847 | ||
2339 | msgid "# Bytes received from other peers" | ||
2340 | msgstr "" | ||
2341 | |||
2342 | #: src/dht/gnunet-service-xdht_routing.c:256 | ||
2343 | #, c-format | ||
2344 | msgid "" | ||
2345 | "\n" | ||
2346 | "SUPU ***PRINTING ROUTING TABLE ***** of =%s" | ||
2347 | msgstr "" | ||
2348 | |||
2349 | #: src/dht/gnunet-service-xdht_routing.c:264 | ||
2350 | #, c-format | ||
2351 | msgid "" | ||
2352 | "\n" | ||
2353 | "SUPU %s, %s, %d, trail->trail_id = %s" | ||
2354 | msgstr "" | ||
2355 | |||
2356 | #: src/dht/gnunet-service-xdht_routing.c:267 | ||
2357 | #, c-format | ||
2358 | msgid "" | ||
2359 | "\n" | ||
2360 | "SUPU %s, %s, %d, trail->next_hop = %s" | ||
2361 | msgstr "" | ||
2362 | |||
2363 | #: src/dht/gnunet-service-xdht_routing.c:270 | ||
2364 | #, c-format | ||
2365 | msgid "" | ||
2366 | "\n" | ||
2367 | "SUPU %s, %s, %d, trail->prev_hop = %s" | ||
2368 | msgstr "" | ||
2369 | |||
2370 | #: src/dht/plugin_block_dht.c:142 | ||
2074 | #, c-format | 2371 | #, c-format |
2075 | msgid "Block not of type %u\n" | 2372 | msgid "Block not of type %u\n" |
2076 | msgstr "" | 2373 | msgstr "" |
2077 | 2374 | ||
2078 | #: src/dht/plugin_block_dht.c:145 | 2375 | #: src/dht/plugin_block_dht.c:149 |
2079 | msgid "Size mismatch for block\n" | 2376 | msgid "Size mismatch for block\n" |
2080 | msgstr "" | 2377 | msgstr "" |
2081 | 2378 | ||
2082 | #: src/dht/plugin_block_dht.c:155 | 2379 | #: src/dht/plugin_block_dht.c:159 |
2083 | #, c-format | 2380 | #, c-format |
2084 | msgid "Block of type %u is malformed\n" | 2381 | msgid "Block of type %u is malformed\n" |
2085 | msgstr "" | 2382 | msgstr "" |
2086 | 2383 | ||
2087 | #: src/dns/dnsparser.c:257 | 2384 | #: src/dns/dnsparser.c:254 |
2088 | #, c-format | 2385 | #, c-format |
2089 | msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n" | 2386 | msgid "Failed to convert DNS IDNA name `%s' to UTF-8: %s\n" |
2090 | msgstr "" | 2387 | msgstr "" |
2091 | 2388 | ||
2092 | #: src/dns/dnsparser.c:856 | 2389 | #: src/dns/dnsparser.c:818 |
2093 | #, c-format | 2390 | #, c-format |
2094 | msgid "Failed to convert UTF-8 name `%s' to DNS IDNA format: %s\n" | 2391 | msgid "Failed to convert UTF-8 name `%s' to DNS IDNA format: %s\n" |
2095 | msgstr "" | 2392 | msgstr "" |
@@ -2119,15 +2416,15 @@ msgstr "" | |||
2119 | msgid "Received DNS response that is too small (%u bytes)" | 2416 | msgid "Received DNS response that is too small (%u bytes)" |
2120 | msgstr "" | 2417 | msgstr "" |
2121 | 2418 | ||
2122 | #: src/dns/gnunet-dns-monitor.c:355 | 2419 | #: src/dns/gnunet-dns-monitor.c:352 |
2123 | msgid "only monitor DNS queries" | 2420 | msgid "only monitor DNS queries" |
2124 | msgstr "" | 2421 | msgstr "" |
2125 | 2422 | ||
2126 | #: src/dns/gnunet-dns-monitor.c:358 | 2423 | #: src/dns/gnunet-dns-monitor.c:355 |
2127 | msgid "only monitor DNS replies" | 2424 | msgid "only monitor DNS replies" |
2128 | msgstr "" | 2425 | msgstr "" |
2129 | 2426 | ||
2130 | #: src/dns/gnunet-dns-monitor.c:369 | 2427 | #: src/dns/gnunet-dns-monitor.c:366 |
2131 | msgid "Monitor DNS queries." | 2428 | msgid "Monitor DNS queries." |
2132 | msgstr "" | 2429 | msgstr "" |
2133 | 2430 | ||
@@ -2143,50 +2440,50 @@ msgstr "" | |||
2143 | msgid "Change DNS replies to point elsewhere." | 2440 | msgid "Change DNS replies to point elsewhere." |
2144 | msgstr "" | 2441 | msgstr "" |
2145 | 2442 | ||
2146 | #: src/dns/gnunet-service-dns.c:456 | 2443 | #: src/dns/gnunet-service-dns.c:459 |
2147 | msgid "# DNS requests answered via TUN interface" | 2444 | msgid "# DNS requests answered via TUN interface" |
2148 | msgstr "" | 2445 | msgstr "" |
2149 | 2446 | ||
2150 | #: src/dns/gnunet-service-dns.c:603 | 2447 | #: src/dns/gnunet-service-dns.c:606 |
2151 | msgid "# DNS exit failed (failed to open socket)" | 2448 | msgid "# DNS exit failed (failed to open socket)" |
2152 | msgstr "" | 2449 | msgstr "" |
2153 | 2450 | ||
2154 | #: src/dns/gnunet-service-dns.c:714 | 2451 | #: src/dns/gnunet-service-dns.c:717 |
2155 | msgid "# External DNS response discarded (no matching request)" | 2452 | msgid "# External DNS response discarded (no matching request)" |
2156 | msgstr "" | 2453 | msgstr "" |
2157 | 2454 | ||
2158 | #: src/dns/gnunet-service-dns.c:792 | 2455 | #: src/dns/gnunet-service-dns.c:795 |
2159 | msgid "# Client response discarded (no matching request)" | 2456 | msgid "# Client response discarded (no matching request)" |
2160 | msgstr "" | 2457 | msgstr "" |
2161 | 2458 | ||
2162 | #: src/dns/gnunet-service-dns.c:907 | 2459 | #: src/dns/gnunet-service-dns.c:910 |
2163 | msgid "Received malformed IPv4-UDP packet on TUN interface.\n" | 2460 | msgid "Received malformed IPv4-UDP packet on TUN interface.\n" |
2164 | msgstr "" | 2461 | msgstr "" |
2165 | 2462 | ||
2166 | #: src/dns/gnunet-service-dns.c:923 | 2463 | #: src/dns/gnunet-service-dns.c:926 |
2167 | msgid "Received malformed IPv6-UDP packet on TUN interface.\n" | 2464 | msgid "Received malformed IPv6-UDP packet on TUN interface.\n" |
2168 | msgstr "" | 2465 | msgstr "" |
2169 | 2466 | ||
2170 | #: src/dns/gnunet-service-dns.c:932 | 2467 | #: src/dns/gnunet-service-dns.c:935 |
2171 | #, c-format | 2468 | #, c-format |
2172 | msgid "Got non-IP packet with %u bytes and protocol %u from TUN\n" | 2469 | msgid "Got non-IP packet with %u bytes and protocol %u from TUN\n" |
2173 | msgstr "" | 2470 | msgstr "" |
2174 | 2471 | ||
2175 | #: src/dns/gnunet-service-dns.c:942 | 2472 | #: src/dns/gnunet-service-dns.c:945 |
2176 | msgid "# Non-DNS UDP packet received via TUN interface" | 2473 | msgid "# Non-DNS UDP packet received via TUN interface" |
2177 | msgstr "" | 2474 | msgstr "" |
2178 | 2475 | ||
2179 | #: src/dns/gnunet-service-dns.c:1009 | 2476 | #: src/dns/gnunet-service-dns.c:1012 |
2180 | msgid "# DNS requests received via TUN interface" | 2477 | msgid "# DNS requests received via TUN interface" |
2181 | msgstr "" | 2478 | msgstr "" |
2182 | 2479 | ||
2183 | #: src/dns/gnunet-service-dns.c:1049 src/exit/gnunet-daemon-exit.c:3514 | 2480 | #: src/dns/gnunet-service-dns.c:1064 src/exit/gnunet-daemon-exit.c:3594 |
2184 | #, c-format | 2481 | msgid "need a valid IPv4 or IPv6 address\n" |
2185 | msgid "`%s' must be installed SUID, refusing to run\n" | ||
2186 | msgstr "" | 2482 | msgstr "" |
2187 | 2483 | ||
2188 | #: src/dns/gnunet-service-dns.c:1069 src/exit/gnunet-daemon-exit.c:3571 | 2484 | #: src/dns/gnunet-service-dns.c:1082 |
2189 | msgid "need a valid IPv4 or IPv6 address\n" | 2485 | #, c-format |
2486 | msgid "`%s' must be installed SUID, will not run DNS interceptor\n" | ||
2190 | msgstr "" | 2487 | msgstr "" |
2191 | 2488 | ||
2192 | #: src/dv/gnunet-dv.c:169 | 2489 | #: src/dv/gnunet-dv.c:169 |
@@ -2203,7 +2500,7 @@ msgid "Got duplicate service records for `%s:%u'\n" | |||
2203 | msgstr "" | 2500 | msgstr "" |
2204 | 2501 | ||
2205 | #: src/exit/gnunet-daemon-exit.c:853 | 2502 | #: src/exit/gnunet-daemon-exit.c:853 |
2206 | msgid "# Bytes transmitted via mesh channels" | 2503 | msgid "# Bytes transmitted via cadet channels" |
2207 | msgstr "" | 2504 | msgstr "" |
2208 | 2505 | ||
2209 | #: src/exit/gnunet-daemon-exit.c:970 src/exit/gnunet-daemon-exit.c:2397 | 2506 | #: src/exit/gnunet-daemon-exit.c:970 src/exit/gnunet-daemon-exit.c:2397 |
@@ -2266,14 +2563,14 @@ msgid "# TCP packets sent via TUN" | |||
2266 | msgstr "" | 2563 | msgstr "" |
2267 | 2564 | ||
2268 | #: src/exit/gnunet-daemon-exit.c:1872 | 2565 | #: src/exit/gnunet-daemon-exit.c:1872 |
2269 | msgid "# TCP service creation requests received via mesh" | 2566 | msgid "# TCP service creation requests received via cadet" |
2270 | msgstr "" | 2567 | msgstr "" |
2271 | 2568 | ||
2272 | #: src/exit/gnunet-daemon-exit.c:1875 src/exit/gnunet-daemon-exit.c:1968 | 2569 | #: src/exit/gnunet-daemon-exit.c:1875 src/exit/gnunet-daemon-exit.c:1968 |
2273 | #: src/exit/gnunet-daemon-exit.c:2073 src/exit/gnunet-daemon-exit.c:2321 | 2570 | #: src/exit/gnunet-daemon-exit.c:2073 src/exit/gnunet-daemon-exit.c:2321 |
2274 | #: src/exit/gnunet-daemon-exit.c:2570 src/exit/gnunet-daemon-exit.c:2859 | 2571 | #: src/exit/gnunet-daemon-exit.c:2570 src/exit/gnunet-daemon-exit.c:2859 |
2275 | #: src/exit/gnunet-daemon-exit.c:2966 | 2572 | #: src/exit/gnunet-daemon-exit.c:2966 |
2276 | msgid "# Bytes received from MESH" | 2573 | msgid "# Bytes received from CADET" |
2277 | msgstr "" | 2574 | msgstr "" |
2278 | 2575 | ||
2279 | #: src/exit/gnunet-daemon-exit.c:1909 src/exit/gnunet-daemon-exit.c:2990 | 2576 | #: src/exit/gnunet-daemon-exit.c:1909 src/exit/gnunet-daemon-exit.c:2990 |
@@ -2286,11 +2583,11 @@ msgid "# TCP requests dropped (no such service)" | |||
2286 | msgstr "" | 2583 | msgstr "" |
2287 | 2584 | ||
2288 | #: src/exit/gnunet-daemon-exit.c:1971 | 2585 | #: src/exit/gnunet-daemon-exit.c:1971 |
2289 | msgid "# TCP IP-exit creation requests received via mesh" | 2586 | msgid "# TCP IP-exit creation requests received via cadet" |
2290 | msgstr "" | 2587 | msgstr "" |
2291 | 2588 | ||
2292 | #: src/exit/gnunet-daemon-exit.c:2076 | 2589 | #: src/exit/gnunet-daemon-exit.c:2076 |
2293 | msgid "# TCP data requests received via mesh" | 2590 | msgid "# TCP data requests received via cadet" |
2294 | msgstr "" | 2591 | msgstr "" |
2295 | 2592 | ||
2296 | #: src/exit/gnunet-daemon-exit.c:2090 | 2593 | #: src/exit/gnunet-daemon-exit.c:2090 |
@@ -2302,11 +2599,11 @@ msgid "# ICMP packets sent via TUN" | |||
2302 | msgstr "" | 2599 | msgstr "" |
2303 | 2600 | ||
2304 | #: src/exit/gnunet-daemon-exit.c:2324 | 2601 | #: src/exit/gnunet-daemon-exit.c:2324 |
2305 | msgid "# ICMP IP-exit requests received via mesh" | 2602 | msgid "# ICMP IP-exit requests received via cadet" |
2306 | msgstr "" | 2603 | msgstr "" |
2307 | 2604 | ||
2308 | #: src/exit/gnunet-daemon-exit.c:2573 | 2605 | #: src/exit/gnunet-daemon-exit.c:2573 |
2309 | msgid "# ICMP service requests received via mesh" | 2606 | msgid "# ICMP service requests received via cadet" |
2310 | msgstr "" | 2607 | msgstr "" |
2311 | 2608 | ||
2312 | #: src/exit/gnunet-daemon-exit.c:2639 src/vpn/gnunet-service-vpn.c:1397 | 2609 | #: src/exit/gnunet-daemon-exit.c:2639 src/vpn/gnunet-service-vpn.c:1397 |
@@ -2324,11 +2621,11 @@ msgid "# UDP packets sent via TUN" | |||
2324 | msgstr "" | 2621 | msgstr "" |
2325 | 2622 | ||
2326 | #: src/exit/gnunet-daemon-exit.c:2862 | 2623 | #: src/exit/gnunet-daemon-exit.c:2862 |
2327 | msgid "# UDP IP-exit requests received via mesh" | 2624 | msgid "# UDP IP-exit requests received via cadet" |
2328 | msgstr "" | 2625 | msgstr "" |
2329 | 2626 | ||
2330 | #: src/exit/gnunet-daemon-exit.c:2969 | 2627 | #: src/exit/gnunet-daemon-exit.c:2969 |
2331 | msgid "# UDP service requests received via mesh" | 2628 | msgid "# UDP service requests received via cadet" |
2332 | msgstr "" | 2629 | msgstr "" |
2333 | 2630 | ||
2334 | #: src/exit/gnunet-daemon-exit.c:2995 | 2631 | #: src/exit/gnunet-daemon-exit.c:2995 |
@@ -2336,300 +2633,190 @@ msgid "# UDP requests dropped (no such service)" | |||
2336 | msgstr "" | 2633 | msgstr "" |
2337 | 2634 | ||
2338 | #: src/exit/gnunet-daemon-exit.c:3031 | 2635 | #: src/exit/gnunet-daemon-exit.c:3031 |
2339 | msgid "# Inbound MESH channels created" | 2636 | msgid "# Inbound CADET channels created" |
2340 | msgstr "" | 2637 | msgstr "" |
2341 | 2638 | ||
2342 | #: src/exit/gnunet-daemon-exit.c:3235 src/exit/gnunet-daemon-exit.c:3245 | 2639 | #: src/exit/gnunet-daemon-exit.c:3255 src/exit/gnunet-daemon-exit.c:3265 |
2343 | #, c-format | 2640 | #, c-format |
2344 | msgid "Option `%s' for domain `%s' is not formatted correctly!\n" | 2641 | msgid "Option `%s' for domain `%s' is not formatted correctly!\n" |
2345 | msgstr "" | 2642 | msgstr "" |
2346 | 2643 | ||
2347 | #: src/exit/gnunet-daemon-exit.c:3259 src/exit/gnunet-daemon-exit.c:3267 | 2644 | #: src/exit/gnunet-daemon-exit.c:3279 src/exit/gnunet-daemon-exit.c:3287 |
2348 | #, c-format | 2645 | #, c-format |
2349 | msgid "`%s' is not a valid port number (for domain `%s')!" | 2646 | msgid "`%s' is not a valid port number (for domain `%s')!" |
2350 | msgstr "" | 2647 | msgstr "" |
2351 | 2648 | ||
2352 | #: src/exit/gnunet-daemon-exit.c:3300 | 2649 | #: src/exit/gnunet-daemon-exit.c:3320 |
2353 | #, c-format | 2650 | #, c-format |
2354 | msgid "No addresses found for hostname `%s' of service `%s'!\n" | 2651 | msgid "No addresses found for hostname `%s' of service `%s'!\n" |
2355 | msgstr "" | 2652 | msgstr "" |
2356 | 2653 | ||
2357 | #: src/exit/gnunet-daemon-exit.c:3314 src/exit/gnunet-daemon-exit.c:3326 | 2654 | #: src/exit/gnunet-daemon-exit.c:3334 src/exit/gnunet-daemon-exit.c:3346 |
2358 | #, c-format | 2655 | #, c-format |
2359 | msgid "Service `%s' configured for IPv4, but IPv4 is disabled!\n" | 2656 | msgid "Service `%s' configured for IPv4, but IPv4 is disabled!\n" |
2360 | msgstr "" | 2657 | msgstr "" |
2361 | 2658 | ||
2362 | #: src/exit/gnunet-daemon-exit.c:3337 | 2659 | #: src/exit/gnunet-daemon-exit.c:3357 |
2363 | #, c-format | 2660 | #, c-format |
2364 | msgid "No IP addresses found for hostname `%s' of service `%s'!\n" | 2661 | msgid "No IP addresses found for hostname `%s' of service `%s'!\n" |
2365 | msgstr "" | 2662 | msgstr "" |
2366 | 2663 | ||
2367 | #: src/exit/gnunet-daemon-exit.c:3527 | 2664 | #: src/exit/gnunet-daemon-exit.c:3534 |
2368 | msgid "This system does not support IPv4, will disable IPv4 functions despite them being enabled in the configuration\n" | 2665 | #, c-format |
2666 | msgid "`%s' must be installed SUID, EXIT will not work\n" | ||
2369 | msgstr "" | 2667 | msgstr "" |
2370 | 2668 | ||
2371 | #: src/exit/gnunet-daemon-exit.c:3535 | 2669 | #: src/exit/gnunet-daemon-exit.c:3550 |
2372 | msgid "This system does not support IPv6, will disable IPv6 functions despite them being enabled in the configuration\n" | 2670 | msgid "" |
2671 | "This system does not support IPv4, will disable IPv4 functions despite them " | ||
2672 | "being enabled in the configuration\n" | ||
2373 | msgstr "" | 2673 | msgstr "" |
2374 | 2674 | ||
2375 | #: src/exit/gnunet-daemon-exit.c:3542 | 2675 | #: src/exit/gnunet-daemon-exit.c:3558 |
2376 | msgid "Cannot enable IPv4 exit but disable IPv4 on TUN interface, will use ENABLE_IPv4=YES\n" | 2676 | msgid "" |
2677 | "This system does not support IPv6, will disable IPv6 functions despite them " | ||
2678 | "being enabled in the configuration\n" | ||
2377 | msgstr "" | 2679 | msgstr "" |
2378 | 2680 | ||
2379 | #: src/exit/gnunet-daemon-exit.c:3548 | 2681 | #: src/exit/gnunet-daemon-exit.c:3565 |
2380 | msgid "Cannot enable IPv6 exit but disable IPv6 on TUN interface, will use ENABLE_IPv6=YES\n" | 2682 | msgid "" |
2683 | "Cannot enable IPv4 exit but disable IPv4 on TUN interface, will use " | ||
2684 | "ENABLE_IPv4=YES\n" | ||
2381 | msgstr "" | 2685 | msgstr "" |
2382 | 2686 | ||
2383 | #: src/exit/gnunet-daemon-exit.c:3554 src/exit/gnunet-daemon-exit.c:3717 | 2687 | #: src/exit/gnunet-daemon-exit.c:3571 |
2688 | msgid "" | ||
2689 | "Cannot enable IPv6 exit but disable IPv6 on TUN interface, will use " | ||
2690 | "ENABLE_IPv6=YES\n" | ||
2691 | msgstr "" | ||
2692 | |||
2693 | #: src/exit/gnunet-daemon-exit.c:3577 src/exit/gnunet-daemon-exit.c:3742 | ||
2384 | #: src/pt/gnunet-daemon-pt.c:1247 | 2694 | #: src/pt/gnunet-daemon-pt.c:1247 |
2385 | msgid "No useful service enabled. Exiting.\n" | 2695 | msgid "No useful service enabled. Exiting.\n" |
2386 | msgstr "" | 2696 | msgstr "" |
2387 | 2697 | ||
2388 | #: src/exit/gnunet-daemon-exit.c:3664 | 2698 | #: src/exit/gnunet-daemon-exit.c:3689 |
2389 | msgid "Must be a number" | 2699 | msgid "Must be a number" |
2390 | msgstr "" | 2700 | msgstr "" |
2391 | 2701 | ||
2392 | #: src/exit/gnunet-daemon-exit.c:3813 | 2702 | #: src/exit/gnunet-daemon-exit.c:3838 |
2393 | msgid "Daemon to run to provide an IP exit node for the VPN" | 2703 | msgid "Daemon to run to provide an IP exit node for the VPN" |
2394 | msgstr "" | 2704 | msgstr "" |
2395 | 2705 | ||
2396 | #: src/experimentation/gnunet-daemon-experimentation.c:55 | 2706 | #: src/fragmentation/defragmentation.c:277 |
2397 | msgid "Experimentation daemon shutting down ...\n" | ||
2398 | msgstr "" | ||
2399 | |||
2400 | #: src/experimentation/gnunet-daemon-experimentation.c:77 | ||
2401 | msgid "Experimentation daemon starting ...\n" | ||
2402 | msgstr "" | ||
2403 | |||
2404 | #: src/experimentation/gnunet-daemon-experimentation.c:83 | ||
2405 | msgid "Failed to create statistics!\n" | ||
2406 | msgstr "" | ||
2407 | |||
2408 | #: src/experimentation/gnunet-daemon-experimentation.c:120 | ||
2409 | msgid "GNUnet experimentation daemon" | ||
2410 | msgstr "" | ||
2411 | |||
2412 | #: src/experimentation/gnunet-daemon-experimentation_experiments.c:241 | ||
2413 | #, c-format | ||
2414 | msgid "Experiment `%s': Experiment signature is invalid\n" | ||
2415 | msgstr "" | ||
2416 | |||
2417 | #: src/experimentation/gnunet-daemon-experimentation_experiments.c:250 | ||
2418 | #, c-format | ||
2419 | msgid "Adding experiment `%s' running from `%s' to `%s' every %llu sec. for %llu sec. \n" | ||
2420 | msgstr "" | ||
2421 | |||
2422 | #: src/experimentation/gnunet-daemon-experimentation_experiments.c:303 | ||
2423 | #, c-format | ||
2424 | msgid "Experiment `%s': Issuer missing\n" | ||
2425 | msgstr "" | ||
2426 | |||
2427 | #: src/experimentation/gnunet-daemon-experimentation_experiments.c:312 | ||
2428 | #, c-format | ||
2429 | msgid "Experiment `%s': Issuer invalid\n" | ||
2430 | msgstr "" | ||
2431 | |||
2432 | #: src/experimentation/gnunet-daemon-experimentation_experiments.c:320 | ||
2433 | #, c-format | ||
2434 | msgid "Experiment `%s': Issuer not accepted!\n" | ||
2435 | msgstr "" | ||
2436 | |||
2437 | #: src/experimentation/gnunet-daemon-experimentation_experiments.c:330 | ||
2438 | #, c-format | ||
2439 | msgid "Experiment `%s': Version missing or invalid \n" | ||
2440 | msgstr "" | ||
2441 | |||
2442 | #: src/experimentation/gnunet-daemon-experimentation_experiments.c:339 | ||
2443 | #, c-format | ||
2444 | msgid "Experiment `%s': Required capabilities missing \n" | ||
2445 | msgstr "" | ||
2446 | |||
2447 | #: src/experimentation/gnunet-daemon-experimentation_experiments.c:345 | ||
2448 | #, c-format | ||
2449 | msgid "Experiment `%s': Required capabilities invalid \n" | ||
2450 | msgstr "" | ||
2451 | |||
2452 | #: src/experimentation/gnunet-daemon-experimentation_experiments.c:390 | ||
2453 | #, c-format | ||
2454 | msgid "Failed to parse file `%s'\n" | ||
2455 | msgstr "" | ||
2456 | |||
2457 | #: src/experimentation/gnunet-daemon-experimentation_experiments.c:420 | ||
2458 | #: src/experimentation/gnunet-daemon-experimentation_experiments.c:452 | ||
2459 | msgid "No valid experiment issuers configured! Set value to public keys of issuers! Exiting.\n" | ||
2460 | msgstr "" | ||
2461 | |||
2462 | #: src/experimentation/gnunet-daemon-experimentation_experiments.c:435 | ||
2463 | msgid "Invalid value for public key\n" | ||
2464 | msgstr "" | ||
2465 | |||
2466 | #: src/experimentation/gnunet-daemon-experimentation_experiments.c:473 | ||
2467 | #, c-format | ||
2468 | msgid "Cannot read experiments file `%s'\n" | ||
2469 | msgstr "" | ||
2470 | |||
2471 | #: src/experimentation/gnunet-daemon-experimentation_nodes.c:221 | ||
2472 | #, c-format | ||
2473 | msgid "Cannot send message to peer `%s' for experiment `%s'\n" | ||
2474 | msgstr "" | ||
2475 | |||
2476 | #: src/experimentation/gnunet-daemon-experimentation_nodes.c:309 | ||
2477 | #, c-format | ||
2478 | msgid "Sending experimentation request to peer %s\n" | ||
2479 | msgstr "" | ||
2480 | |||
2481 | #: src/experimentation/gnunet-daemon-experimentation_nodes.c:453 | ||
2482 | #, c-format | ||
2483 | msgid "Added peer `%s' as active node\n" | ||
2484 | msgstr "" | ||
2485 | |||
2486 | #: src/experimentation/gnunet-daemon-experimentation_nodes.c:891 | ||
2487 | #, c-format | ||
2488 | msgid "Connected to peer %s\n" | ||
2489 | msgstr "" | ||
2490 | |||
2491 | #: src/experimentation/gnunet-daemon-experimentation_nodes.c:921 | ||
2492 | #, c-format | ||
2493 | msgid "Disconnected from peer %s\n" | ||
2494 | msgstr "" | ||
2495 | |||
2496 | #: src/experimentation/gnunet-daemon-experimentation_nodes.c:1104 | ||
2497 | msgid "Failed to connect to CORE service!\n" | ||
2498 | msgstr "" | ||
2499 | |||
2500 | #: src/experimentation/gnunet-daemon-experimentation_scheduler.c:108 | ||
2501 | #, c-format | ||
2502 | msgid "Peer `%s' did not respond to request for experiment `%s'\n" | ||
2503 | msgstr "" | ||
2504 | |||
2505 | #: src/experimentation/gnunet-daemon-experimentation_scheduler.c:143 | ||
2506 | #, c-format | ||
2507 | msgid "Starting inbound experiment `%s' with peer `%s'\n" | ||
2508 | msgstr "" | ||
2509 | |||
2510 | #: src/experimentation/gnunet-daemon-experimentation_scheduler.c:276 | ||
2511 | #, c-format | ||
2512 | msgid "Starting outbound experiment `%s' with peer `%s'\n" | ||
2513 | msgstr "" | ||
2514 | |||
2515 | #: src/experimentation/gnunet-daemon-experimentation_scheduler.c:294 | ||
2516 | #, c-format | ||
2517 | msgid "Received %s message from peer %s for experiment `%s'\n" | ||
2518 | msgstr "" | ||
2519 | |||
2520 | #: src/fragmentation/defragmentation.c:270 | ||
2521 | msgid "# acknowledgements sent for fragment" | 2707 | msgid "# acknowledgements sent for fragment" |
2522 | msgstr "" | 2708 | msgstr "" |
2523 | 2709 | ||
2524 | #: src/fragmentation/defragmentation.c:456 | 2710 | #: src/fragmentation/defragmentation.c:470 |
2711 | #: src/transport/plugin_transport_wlan.c:1515 | ||
2525 | msgid "# fragments received" | 2712 | msgid "# fragments received" |
2526 | msgstr "" | 2713 | msgstr "" |
2527 | 2714 | ||
2528 | #: src/fragmentation/defragmentation.c:521 | 2715 | #: src/fragmentation/defragmentation.c:540 |
2529 | msgid "# duplicate fragments received" | 2716 | msgid "# duplicate fragments received" |
2530 | msgstr "" | 2717 | msgstr "" |
2531 | 2718 | ||
2532 | #: src/fragmentation/defragmentation.c:534 | 2719 | #: src/fragmentation/defragmentation.c:558 |
2533 | msgid "# messages defragmented" | 2720 | msgid "# messages defragmented" |
2534 | msgstr "" | 2721 | msgstr "" |
2535 | 2722 | ||
2536 | #: src/fragmentation/fragmentation.c:208 | 2723 | #: src/fragmentation/fragmentation.c:235 |
2537 | msgid "# fragments transmitted" | 2724 | msgid "# fragments transmitted" |
2538 | msgstr "" | 2725 | msgstr "" |
2539 | 2726 | ||
2540 | #: src/fragmentation/fragmentation.c:211 | 2727 | #: src/fragmentation/fragmentation.c:240 |
2541 | msgid "# fragments retransmitted" | 2728 | msgid "# fragments retransmitted" |
2542 | msgstr "" | 2729 | msgstr "" |
2543 | 2730 | ||
2544 | #: src/fragmentation/fragmentation.c:237 | 2731 | #: src/fragmentation/fragmentation.c:269 |
2545 | msgid "# fragments wrap arounds" | 2732 | msgid "# fragments wrap arounds" |
2546 | msgstr "" | 2733 | msgstr "" |
2547 | 2734 | ||
2548 | #: src/fragmentation/fragmentation.c:281 | 2735 | #: src/fragmentation/fragmentation.c:315 |
2549 | msgid "# messages fragmented" | 2736 | msgid "# messages fragmented" |
2550 | msgstr "" | 2737 | msgstr "" |
2551 | 2738 | ||
2552 | #: src/fragmentation/fragmentation.c:284 | 2739 | #: src/fragmentation/fragmentation.c:321 |
2553 | msgid "# total size of fragmented messages" | 2740 | msgid "# total size of fragmented messages" |
2554 | msgstr "" | 2741 | msgstr "" |
2555 | 2742 | ||
2556 | #: src/fragmentation/fragmentation.c:405 | 2743 | #: src/fragmentation/fragmentation.c:444 |
2557 | msgid "# fragment acknowledgements received" | 2744 | msgid "# fragment acknowledgements received" |
2558 | msgstr "" | 2745 | msgstr "" |
2559 | 2746 | ||
2560 | #: src/fragmentation/fragmentation.c:411 | 2747 | #: src/fragmentation/fragmentation.c:451 |
2561 | msgid "# bits removed from fragmentation ACKs" | 2748 | msgid "# bits removed from fragmentation ACKs" |
2562 | msgstr "" | 2749 | msgstr "" |
2563 | 2750 | ||
2564 | #: src/fragmentation/fragmentation.c:435 | 2751 | #: src/fragmentation/fragmentation.c:475 |
2565 | msgid "# fragmentation transmissions completed" | 2752 | msgid "# fragmentation transmissions completed" |
2566 | msgstr "" | 2753 | msgstr "" |
2567 | 2754 | ||
2568 | #: src/fs/fs_api.c:465 | 2755 | #: src/fs/fs_api.c:491 |
2569 | #, c-format | 2756 | #, c-format |
2570 | msgid "Could not open file `%s': %s" | 2757 | msgid "Could not open file `%s': %s" |
2571 | msgstr "" | 2758 | msgstr "" |
2572 | 2759 | ||
2573 | #: src/fs/fs_api.c:474 | 2760 | #: src/fs/fs_api.c:502 |
2574 | #, c-format | 2761 | #, c-format |
2575 | msgid "Could not read file `%s': %s" | 2762 | msgid "Could not read file `%s': %s" |
2576 | msgstr "" | 2763 | msgstr "" |
2577 | 2764 | ||
2578 | #: src/fs/fs_api.c:480 | 2765 | #: src/fs/fs_api.c:510 |
2579 | #, c-format | 2766 | #, c-format |
2580 | msgid "Short read reading from file `%s'!" | 2767 | msgid "Short read reading from file `%s'!" |
2581 | msgstr "" | 2768 | msgstr "" |
2582 | 2769 | ||
2583 | #: src/fs/fs_api.c:1066 | 2770 | #: src/fs/fs_api.c:1118 |
2584 | #, c-format | 2771 | #, c-format |
2585 | msgid "Failed to resume publishing information `%s': %s\n" | 2772 | msgid "Failed to resume publishing information `%s': %s\n" |
2586 | msgstr "" | 2773 | msgstr "" |
2587 | 2774 | ||
2588 | #: src/fs/fs_api.c:1571 | 2775 | #: src/fs/fs_api.c:1638 |
2589 | #, c-format | 2776 | #, c-format |
2590 | msgid "Failure while resuming publishing operation `%s': %s\n" | 2777 | msgid "Failure while resuming publishing operation `%s': %s\n" |
2591 | msgstr "" | 2778 | msgstr "" |
2592 | 2779 | ||
2593 | #: src/fs/fs_api.c:1585 | 2780 | #: src/fs/fs_api.c:1652 |
2594 | #, c-format | 2781 | #, c-format |
2595 | msgid "Failed to resume publishing operation `%s': %s\n" | 2782 | msgid "Failed to resume publishing operation `%s': %s\n" |
2596 | msgstr "" | 2783 | msgstr "" |
2597 | 2784 | ||
2598 | #: src/fs/fs_api.c:2242 | 2785 | #: src/fs/fs_api.c:2310 |
2599 | #, c-format | 2786 | #, c-format |
2600 | msgid "Failure while resuming unindexing operation `%s': %s\n" | 2787 | msgid "Failure while resuming unindexing operation `%s': %s\n" |
2601 | msgstr "" | 2788 | msgstr "" |
2602 | 2789 | ||
2603 | #: src/fs/fs_api.c:2252 | 2790 | #: src/fs/fs_api.c:2320 |
2604 | #, c-format | 2791 | #, c-format |
2605 | msgid "Failed to resume unindexing operation `%s': %s\n" | 2792 | msgid "Failed to resume unindexing operation `%s': %s\n" |
2606 | msgstr "" | 2793 | msgstr "" |
2607 | 2794 | ||
2608 | #: src/fs/fs_api.c:2378 src/fs/fs_api.c:2619 | 2795 | #: src/fs/fs_api.c:2448 src/fs/fs_api.c:2696 |
2609 | #, c-format | 2796 | #, c-format |
2610 | msgid "Failed to resume sub-download `%s': %s\n" | 2797 | msgid "Failed to resume sub-download `%s': %s\n" |
2611 | msgstr "" | 2798 | msgstr "" |
2612 | 2799 | ||
2613 | #: src/fs/fs_api.c:2395 | 2800 | #: src/fs/fs_api.c:2466 |
2614 | #, c-format | 2801 | #, c-format |
2615 | msgid "Failed to resume sub-search `%s': %s\n" | 2802 | msgid "Failed to resume sub-search `%s': %s\n" |
2616 | msgstr "" | 2803 | msgstr "" |
2617 | 2804 | ||
2618 | #: src/fs/fs_api.c:2409 src/fs/fs_api.c:2428 src/fs/fs_api.c:2911 | 2805 | #: src/fs/fs_api.c:2481 src/fs/fs_api.c:2500 src/fs/fs_api.c:2992 |
2619 | #, c-format | 2806 | #, c-format |
2620 | msgid "Failure while resuming search operation `%s': %s\n" | 2807 | msgid "Failure while resuming search operation `%s': %s\n" |
2621 | msgstr "" | 2808 | msgstr "" |
2622 | 2809 | ||
2623 | #: src/fs/fs_api.c:2610 | 2810 | #: src/fs/fs_api.c:2686 |
2624 | #, c-format | 2811 | #, c-format |
2625 | msgid "Failed to resume sub-download `%s': could not open file `%s'\n" | 2812 | msgid "Failed to resume sub-download `%s': could not open file `%s'\n" |
2626 | msgstr "" | 2813 | msgstr "" |
2627 | 2814 | ||
2628 | #: src/fs/fs_api.c:2855 | 2815 | #: src/fs/fs_api.c:2935 |
2629 | msgid "Could not resume running search, will resume as paused search\n" | 2816 | msgid "Could not resume running search, will resume as paused search\n" |
2630 | msgstr "" | 2817 | msgstr "" |
2631 | 2818 | ||
2632 | #: src/fs/fs_api.c:2949 | 2819 | #: src/fs/fs_api.c:3030 |
2633 | #, c-format | 2820 | #, c-format |
2634 | msgid "Failure while resuming download operation `%s': %s\n" | 2821 | msgid "Failure while resuming download operation `%s': %s\n" |
2635 | msgstr "" | 2822 | msgstr "" |
@@ -2639,7 +2826,9 @@ msgid "MAGIC mismatch. This is not a GNUnet directory.\n" | |||
2639 | msgstr "" | 2826 | msgstr "" |
2640 | 2827 | ||
2641 | #: src/fs/fs_download.c:322 | 2828 | #: src/fs/fs_download.c:322 |
2642 | msgid "Recursive downloads of directories larger than 4 GB are not supported on 32-bit systems\n" | 2829 | msgid "" |
2830 | "Recursive downloads of directories larger than 4 GB are not supported on 32-" | ||
2831 | "bit systems\n" | ||
2643 | msgstr "" | 2832 | msgstr "" |
2644 | 2833 | ||
2645 | #: src/fs/fs_download.c:342 | 2834 | #: src/fs/fs_download.c:342 |
@@ -2658,7 +2847,9 @@ msgstr "" | |||
2658 | 2847 | ||
2659 | #: src/fs/fs_download.c:987 | 2848 | #: src/fs/fs_download.c:987 |
2660 | #, c-format | 2849 | #, c-format |
2661 | msgid "Internal error or bogus download URI (expected %u bytes at depth %u and offset %llu/%llu, got %u bytes)" | 2850 | msgid "" |
2851 | "Internal error or bogus download URI (expected %u bytes at depth %u and " | ||
2852 | "offset %llu/%llu, got %u bytes)" | ||
2662 | msgstr "" | 2853 | msgstr "" |
2663 | 2854 | ||
2664 | #: src/fs/fs_download.c:1013 | 2855 | #: src/fs/fs_download.c:1013 |
@@ -2690,7 +2881,9 @@ msgstr "" | |||
2690 | 2881 | ||
2691 | #: src/fs/fs_getopt.c:192 | 2882 | #: src/fs/fs_getopt.c:192 |
2692 | #, c-format | 2883 | #, c-format |
2693 | msgid "Unknown metadata type in metadata option `%s'. Using metadata type `unknown' instead.\n" | 2884 | msgid "" |
2885 | "Unknown metadata type in metadata option `%s'. Using metadata type " | ||
2886 | "`unknown' instead.\n" | ||
2694 | msgstr "" | 2887 | msgstr "" |
2695 | 2888 | ||
2696 | #: src/fs/fs_list_indexed.c:90 | 2889 | #: src/fs/fs_list_indexed.c:90 |
@@ -2732,62 +2925,66 @@ msgstr "" | |||
2732 | msgid "Failed to connect to datastore." | 2925 | msgid "Failed to connect to datastore." |
2733 | msgstr "" | 2926 | msgstr "" |
2734 | 2927 | ||
2735 | #: src/fs/fs_publish.c:125 src/fs/fs_publish.c:415 | 2928 | #: src/fs/fs_publish.c:126 src/fs/fs_publish.c:431 |
2736 | #, c-format | 2929 | #, c-format |
2737 | msgid "Publishing failed: %s" | 2930 | msgid "Publishing failed: %s" |
2738 | msgstr "" | 2931 | msgstr "" |
2739 | 2932 | ||
2740 | #: src/fs/fs_publish.c:667 src/fs/fs_publish.c:684 src/fs/fs_publish.c:723 | 2933 | #: src/fs/fs_publish.c:683 src/fs/fs_publish.c:700 src/fs/fs_publish.c:739 |
2741 | #: src/fs/fs_publish.c:744 src/fs/fs_publish.c:768 src/fs/fs_publish.c:914 | 2934 | #: src/fs/fs_publish.c:760 src/fs/fs_publish.c:784 src/fs/fs_publish.c:1034 |
2742 | #, c-format | 2935 | #, c-format |
2743 | msgid "Can not index file `%s': %s. Will try to insert instead.\n" | 2936 | msgid "Can not index file `%s': %s. Will try to insert instead.\n" |
2744 | msgstr "" | 2937 | msgstr "" |
2745 | 2938 | ||
2746 | #: src/fs/fs_publish.c:669 | 2939 | #: src/fs/fs_publish.c:685 |
2747 | msgid "timeout on index-start request to `fs' service" | 2940 | msgid "timeout on index-start request to `fs' service" |
2748 | msgstr "" | 2941 | msgstr "" |
2749 | 2942 | ||
2750 | #: src/fs/fs_publish.c:681 | 2943 | #: src/fs/fs_publish.c:697 |
2751 | msgid "unknown error" | 2944 | msgid "unknown error" |
2752 | msgstr "" | 2945 | msgstr "" |
2753 | 2946 | ||
2754 | #: src/fs/fs_publish.c:725 | 2947 | #: src/fs/fs_publish.c:741 |
2755 | msgid "failed to compute hash" | 2948 | msgid "failed to compute hash" |
2756 | msgstr "" | 2949 | msgstr "" |
2757 | 2950 | ||
2758 | #: src/fs/fs_publish.c:745 | 2951 | #: src/fs/fs_publish.c:761 |
2759 | msgid "filename too long" | 2952 | msgid "filename too long" |
2760 | msgstr "" | 2953 | msgstr "" |
2761 | 2954 | ||
2762 | #: src/fs/fs_publish.c:770 | 2955 | #: src/fs/fs_publish.c:786 |
2763 | msgid "could not connect to `fs' service" | 2956 | msgid "could not connect to `fs' service" |
2764 | msgstr "" | 2957 | msgstr "" |
2765 | 2958 | ||
2766 | #: src/fs/fs_publish.c:793 | 2959 | #: src/fs/fs_publish.c:809 |
2767 | #, c-format | 2960 | #, c-format |
2768 | msgid "Failed to get file identifiers for `%s'\n" | 2961 | msgid "Failed to get file identifiers for `%s'\n" |
2769 | msgstr "" | 2962 | msgstr "" |
2770 | 2963 | ||
2771 | #: src/fs/fs_publish.c:862 | 2964 | #: src/fs/fs_publish.c:873 src/fs/fs_publish.c:914 |
2965 | msgid "Can not create LOC URI. Will continue with CHK instead.\n" | ||
2966 | msgstr "" | ||
2967 | |||
2968 | #: src/fs/fs_publish.c:988 | ||
2772 | #, c-format | 2969 | #, c-format |
2773 | msgid "Recursive upload failed at `%s': %s" | 2970 | msgid "Recursive upload failed at `%s': %s" |
2774 | msgstr "" | 2971 | msgstr "" |
2775 | 2972 | ||
2776 | #: src/fs/fs_publish.c:868 | 2973 | #: src/fs/fs_publish.c:996 |
2777 | #, c-format | 2974 | #, c-format |
2778 | msgid "Recursive upload failed: %s" | 2975 | msgid "Recursive upload failed: %s" |
2779 | msgstr "" | 2976 | msgstr "" |
2780 | 2977 | ||
2781 | #: src/fs/fs_publish.c:915 | 2978 | #: src/fs/fs_publish.c:1036 |
2782 | msgid "needs to be an actual file" | 2979 | msgid "needs to be an actual file" |
2783 | msgstr "" | 2980 | msgstr "" |
2784 | 2981 | ||
2785 | #: src/fs/fs_publish.c:1151 | 2982 | #: src/fs/fs_publish.c:1272 |
2786 | #, c-format | 2983 | #, c-format |
2787 | msgid "Insufficient space for publishing: %s" | 2984 | msgid "Insufficient space for publishing: %s" |
2788 | msgstr "" | 2985 | msgstr "" |
2789 | 2986 | ||
2790 | #: src/fs/fs_publish.c:1243 | 2987 | #: src/fs/fs_publish.c:1363 |
2791 | #, c-format | 2988 | #, c-format |
2792 | msgid "Reserving space for %u entries and %llu bytes for publication\n" | 2989 | msgid "Reserving space for %u entries and %llu bytes for publication\n" |
2793 | msgstr "" | 2990 | msgstr "" |
@@ -2796,196 +2993,212 @@ msgstr "" | |||
2796 | msgid "Could not connect to datastore." | 2993 | msgid "Could not connect to datastore." |
2797 | msgstr "" | 2994 | msgstr "" |
2798 | 2995 | ||
2799 | #: src/fs/fs_publish_ublock.c:219 | 2996 | #: src/fs/fs_publish_ublock.c:243 |
2800 | msgid "Internal error." | 2997 | msgid "Internal error." |
2801 | msgstr "" | 2998 | msgstr "" |
2802 | 2999 | ||
2803 | #: src/fs/fs_search.c:813 | 3000 | #: src/fs/fs_search.c:812 src/fs/fs_search.c:882 |
2804 | #, c-format | 3001 | #, c-format |
2805 | msgid "Failed to parse URI `%s': %s\n" | 3002 | msgid "Failed to parse URI `%s': %s\n" |
2806 | msgstr "" | 3003 | msgstr "" |
2807 | 3004 | ||
2808 | #: src/fs/fs_search.c:872 | 3005 | #: src/fs/fs_search.c:941 |
2809 | #, c-format | 3006 | #, c-format |
2810 | msgid "Got result with unknown block type `%d', ignoring" | 3007 | msgid "Got result with unknown block type `%d', ignoring" |
2811 | msgstr "" | 3008 | msgstr "" |
2812 | 3009 | ||
2813 | #: src/fs/fs_unindex.c:59 | 3010 | #: src/fs/fs_unindex.c:63 |
2814 | msgid "Failed to find given position in file" | 3011 | msgid "Failed to find given position in file" |
2815 | msgstr "" | 3012 | msgstr "" |
2816 | 3013 | ||
2817 | #: src/fs/fs_unindex.c:64 | 3014 | #: src/fs/fs_unindex.c:68 |
2818 | msgid "Failed to read file" | 3015 | msgid "Failed to read file" |
2819 | msgstr "" | 3016 | msgstr "" |
2820 | 3017 | ||
2821 | #: src/fs/fs_unindex.c:234 | 3018 | #: src/fs/fs_unindex.c:245 |
2822 | msgid "Unexpected time for a response from `fs' service." | 3019 | msgid "Unexpected time for a response from `fs' service." |
2823 | msgstr "" | 3020 | msgstr "" |
2824 | 3021 | ||
2825 | #: src/fs/fs_unindex.c:242 | 3022 | #: src/fs/fs_unindex.c:253 |
2826 | msgid "Timeout waiting for `fs' service." | 3023 | msgid "Timeout waiting for `fs' service." |
2827 | msgstr "" | 3024 | msgstr "" |
2828 | 3025 | ||
2829 | #: src/fs/fs_unindex.c:250 | 3026 | #: src/fs/fs_unindex.c:261 |
2830 | msgid "Invalid response from `fs' service." | 3027 | msgid "Invalid response from `fs' service." |
2831 | msgstr "" | 3028 | msgstr "" |
2832 | 3029 | ||
2833 | #: src/fs/fs_unindex.c:291 | 3030 | #: src/fs/fs_unindex.c:304 |
2834 | msgid "Failed to connect to FS service for unindexing." | 3031 | msgid "Failed to connect to FS service for unindexing." |
2835 | msgstr "" | 3032 | msgstr "" |
2836 | 3033 | ||
2837 | #: src/fs/fs_unindex.c:347 src/fs/fs_unindex.c:359 | 3034 | #: src/fs/fs_unindex.c:360 src/fs/fs_unindex.c:372 |
2838 | msgid "Failed to get KSKs from directory scan." | 3035 | msgid "Failed to get KSKs from directory scan." |
2839 | msgstr "" | 3036 | msgstr "" |
2840 | 3037 | ||
2841 | #: src/fs/fs_unindex.c:355 | 3038 | #: src/fs/fs_unindex.c:368 |
2842 | #, c-format | 3039 | #, c-format |
2843 | msgid "Internal error scanning `%s'.\n" | 3040 | msgid "Internal error scanning `%s'.\n" |
2844 | msgstr "" | 3041 | msgstr "" |
2845 | 3042 | ||
2846 | #: src/fs/fs_unindex.c:414 | 3043 | #: src/fs/fs_unindex.c:427 |
2847 | #, c-format | 3044 | #, c-format |
2848 | msgid "Failed to remove UBlock: %s\n" | 3045 | msgid "Failed to remove UBlock: %s\n" |
2849 | msgstr "" | 3046 | msgstr "" |
2850 | 3047 | ||
2851 | #: src/fs/fs_unindex.c:562 src/fs/fs_unindex.c:626 | 3048 | #: src/fs/fs_unindex.c:590 src/fs/fs_unindex.c:656 |
2852 | msgid "Failed to connect to `datastore' service." | 3049 | msgid "Failed to connect to `datastore' service." |
2853 | msgstr "" | 3050 | msgstr "" |
2854 | 3051 | ||
2855 | #: src/fs/fs_unindex.c:639 | 3052 | #: src/fs/fs_unindex.c:669 |
2856 | msgid "Failed to open file for unindexing." | 3053 | msgid "Failed to open file for unindexing." |
2857 | msgstr "" | 3054 | msgstr "" |
2858 | 3055 | ||
2859 | #: src/fs/fs_unindex.c:673 | 3056 | #: src/fs/fs_unindex.c:708 |
2860 | msgid "Failed to compute hash of file." | 3057 | msgid "Failed to compute hash of file." |
2861 | msgstr "" | 3058 | msgstr "" |
2862 | 3059 | ||
2863 | #: src/fs/fs_uri.c:222 | 3060 | #: src/fs/fs_uri.c:223 |
2864 | #, no-c-format | 3061 | #, no-c-format |
2865 | msgid "`%' must be followed by HEX number" | 3062 | msgid "Malformed KSK URI (`%' must be followed by HEX number)" |
2866 | msgstr "" | 3063 | msgstr "" |
2867 | 3064 | ||
2868 | #: src/fs/fs_uri.c:281 | 3065 | #: src/fs/fs_uri.c:282 |
2869 | msgid "Malformed KSK URI (must not begin or end with `+')" | 3066 | msgid "Malformed KSK URI (must not begin or end with `+')" |
2870 | msgstr "" | 3067 | msgstr "" |
2871 | 3068 | ||
2872 | #: src/fs/fs_uri.c:299 | 3069 | #: src/fs/fs_uri.c:300 |
2873 | msgid "`++' not allowed in KSK URI" | 3070 | msgid "Malformed KSK URI (`++' not allowed)" |
2874 | msgstr "" | 3071 | msgstr "" |
2875 | 3072 | ||
2876 | #: src/fs/fs_uri.c:306 | 3073 | #: src/fs/fs_uri.c:307 |
2877 | msgid "Quotes not balanced in KSK URI" | 3074 | msgid "Malformed KSK URI (quotes not balanced)" |
2878 | msgstr "" | 3075 | msgstr "" |
2879 | 3076 | ||
2880 | #: src/fs/fs_uri.c:376 | 3077 | #: src/fs/fs_uri.c:376 |
2881 | msgid "Malformed SKS URI" | 3078 | msgid "Malformed SKS URI (wrong syntax)" |
3079 | msgstr "" | ||
3080 | |||
3081 | #: src/fs/fs_uri.c:417 | ||
3082 | msgid "Malformed CHK URI (wrong syntax)" | ||
3083 | msgstr "" | ||
3084 | |||
3085 | #: src/fs/fs_uri.c:432 | ||
3086 | msgid "Malformed CHK URI (failed to decode CHK)" | ||
3087 | msgstr "" | ||
3088 | |||
3089 | #: src/fs/fs_uri.c:511 | ||
3090 | msgid "LOC URI malformed (wrong syntax)" | ||
2882 | msgstr "" | 3091 | msgstr "" |
2883 | 3092 | ||
2884 | #: src/fs/fs_uri.c:419 src/fs/fs_uri.c:434 | 3093 | #: src/fs/fs_uri.c:526 |
2885 | msgid "Malformed CHK URI" | 3094 | msgid "LOC URI malformed (no CHK)" |
2886 | msgstr "" | 3095 | msgstr "" |
2887 | 3096 | ||
2888 | #: src/fs/fs_uri.c:512 src/fs/fs_uri.c:580 | 3097 | #: src/fs/fs_uri.c:536 |
2889 | msgid "SKS URI malformed" | 3098 | msgid "LOC URI malformed (missing LOC)" |
2890 | msgstr "" | 3099 | msgstr "" |
2891 | 3100 | ||
2892 | #: src/fs/fs_uri.c:527 src/fs/fs_uri.c:537 | 3101 | #: src/fs/fs_uri.c:544 |
2893 | msgid "LOC URI malformed" | 3102 | msgid "LOC URI malformed (wrong syntax for public key)" |
2894 | msgstr "" | 3103 | msgstr "" |
2895 | 3104 | ||
2896 | #: src/fs/fs_uri.c:545 src/fs/fs_uri.c:553 | 3105 | #: src/fs/fs_uri.c:552 |
2897 | msgid "LOC URI malformed (could not decode public key)" | 3106 | msgid "LOC URI malformed (could not decode public key)" |
2898 | msgstr "" | 3107 | msgstr "" |
2899 | 3108 | ||
2900 | #: src/fs/fs_uri.c:559 | 3109 | #: src/fs/fs_uri.c:558 |
2901 | msgid "SKS URI malformed (could not find signature)" | 3110 | msgid "LOC URI malformed (could not find signature)" |
2902 | msgstr "" | 3111 | msgstr "" |
2903 | 3112 | ||
2904 | #: src/fs/fs_uri.c:565 src/fs/fs_uri.c:574 | 3113 | #: src/fs/fs_uri.c:564 |
2905 | msgid "SKS URI malformed (could not decode signature)" | 3114 | msgid "LOC URI malformed (wrong syntax for signature)" |
2906 | msgstr "" | 3115 | msgstr "" |
2907 | 3116 | ||
2908 | #: src/fs/fs_uri.c:586 | 3117 | #: src/fs/fs_uri.c:573 |
2909 | msgid "SKS URI malformed (could not parse expiration time)" | 3118 | msgid "LOC URI malformed (could not decode signature)" |
2910 | msgstr "" | 3119 | msgstr "" |
2911 | 3120 | ||
2912 | #: src/fs/fs_uri.c:598 | 3121 | #: src/fs/fs_uri.c:579 |
2913 | msgid "SKS URI malformed (signature failed validation)" | 3122 | msgid "LOC URI malformed (wrong syntax for expiration time)" |
2914 | msgstr "" | 3123 | msgstr "" |
2915 | 3124 | ||
2916 | #: src/fs/fs_uri.c:636 | 3125 | #: src/fs/fs_uri.c:585 |
2917 | msgid "Unrecognized URI type" | 3126 | msgid "LOC URI malformed (could not parse expiration time)" |
2918 | msgstr "" | 3127 | msgstr "" |
2919 | 3128 | ||
2920 | #: src/fs/fs_uri.c:860 | 3129 | #: src/fs/fs_uri.c:597 |
2921 | msgid "Lacking key configuration settings.\n" | 3130 | msgid "LOC URI malformed (signature failed validation)" |
2922 | msgstr "" | 3131 | msgstr "" |
2923 | 3132 | ||
2924 | #: src/fs/fs_uri.c:866 | 3133 | #: src/fs/fs_uri.c:631 |
2925 | #, c-format | 3134 | msgid "invalid argument" |
2926 | msgid "Could not access hostkey file `%s'.\n" | ||
2927 | msgstr "" | 3135 | msgstr "" |
2928 | 3136 | ||
2929 | #: src/fs/fs_uri.c:1050 src/fs/fs_uri.c:1077 | 3137 | #: src/fs/fs_uri.c:643 |
3138 | msgid "Unrecognized URI type" | ||
3139 | msgstr "" | ||
3140 | |||
3141 | #: src/fs/fs_uri.c:1045 src/fs/fs_uri.c:1072 | ||
2930 | msgid "No keywords specified!\n" | 3142 | msgid "No keywords specified!\n" |
2931 | msgstr "" | 3143 | msgstr "" |
2932 | 3144 | ||
2933 | #: src/fs/fs_uri.c:1083 | 3145 | #: src/fs/fs_uri.c:1078 |
2934 | msgid "Number of double-quotes not balanced!\n" | 3146 | msgid "Number of double-quotes not balanced!\n" |
2935 | msgstr "" | 3147 | msgstr "" |
2936 | 3148 | ||
2937 | #: src/fs/gnunet-auto-share.c:236 | 3149 | #: src/fs/gnunet-auto-share.c:237 |
2938 | #, c-format | 3150 | #, c-format |
2939 | msgid "Failed to load state: %s\n" | 3151 | msgid "Failed to load state: %s\n" |
2940 | msgstr "" | 3152 | msgstr "" |
2941 | 3153 | ||
2942 | #: src/fs/gnunet-auto-share.c:289 src/fs/gnunet-auto-share.c:299 | 3154 | #: src/fs/gnunet-auto-share.c:290 src/fs/gnunet-auto-share.c:300 |
2943 | #: src/fs/gnunet-auto-share.c:309 | 3155 | #: src/fs/gnunet-auto-share.c:310 |
2944 | #, c-format | 3156 | #, c-format |
2945 | msgid "Failed to save state to file %s\n" | 3157 | msgid "Failed to save state to file %s\n" |
2946 | msgstr "" | 3158 | msgstr "" |
2947 | 3159 | ||
2948 | #: src/fs/gnunet-auto-share.c:401 | 3160 | #: src/fs/gnunet-auto-share.c:402 |
2949 | #, c-format | 3161 | #, c-format |
2950 | msgid "Publication of `%s' done\n" | 3162 | msgid "Publication of `%s' done\n" |
2951 | msgstr "" | 3163 | msgstr "" |
2952 | 3164 | ||
2953 | #: src/fs/gnunet-auto-share.c:488 | 3165 | #: src/fs/gnunet-auto-share.c:490 |
2954 | #, c-format | 3166 | #, c-format |
2955 | msgid "Publishing `%s'\n" | 3167 | msgid "Publishing `%s'\n" |
2956 | msgstr "" | 3168 | msgstr "" |
2957 | 3169 | ||
2958 | #: src/fs/gnunet-auto-share.c:497 | 3170 | #: src/fs/gnunet-auto-share.c:499 |
2959 | #, c-format | 3171 | #, c-format |
2960 | msgid "Failed to run `%s'\n" | 3172 | msgid "Failed to run `%s'\n" |
2961 | msgstr "" | 3173 | msgstr "" |
2962 | 3174 | ||
2963 | #: src/fs/gnunet-auto-share.c:686 | 3175 | #: src/fs/gnunet-auto-share.c:688 |
2964 | #, c-format | 3176 | #, c-format |
2965 | msgid "You must specify one and only one directory name for automatic publication.\n" | 3177 | msgid "" |
3178 | "You must specify one and only one directory name for automatic publication.\n" | ||
2966 | msgstr "" | 3179 | msgstr "" |
2967 | 3180 | ||
2968 | #: src/fs/gnunet-auto-share.c:737 src/fs/gnunet-publish.c:824 | 3181 | #: src/fs/gnunet-auto-share.c:739 src/fs/gnunet-publish.c:888 |
2969 | msgid "set the desired LEVEL of sender-anonymity" | 3182 | msgid "set the desired LEVEL of sender-anonymity" |
2970 | msgstr "" | 3183 | msgstr "" |
2971 | 3184 | ||
2972 | #: src/fs/gnunet-auto-share.c:741 src/fs/gnunet-publish.c:828 | 3185 | #: src/fs/gnunet-auto-share.c:743 src/fs/gnunet-publish.c:892 |
2973 | msgid "disable adding the creation time to the metadata of the uploaded file" | 3186 | msgid "disable adding the creation time to the metadata of the uploaded file" |
2974 | msgstr "" | 3187 | msgstr "" |
2975 | 3188 | ||
2976 | #: src/fs/gnunet-auto-share.c:744 src/fs/gnunet-publish.c:831 | 3189 | #: src/fs/gnunet-auto-share.c:746 src/fs/gnunet-publish.c:895 |
2977 | msgid "do not use libextractor to add keywords or metadata" | 3190 | msgid "do not use libextractor to add keywords or metadata" |
2978 | msgstr "" | 3191 | msgstr "" |
2979 | 3192 | ||
2980 | #: src/fs/gnunet-auto-share.c:747 src/fs/gnunet-publish.c:855 | 3193 | #: src/fs/gnunet-auto-share.c:749 src/fs/gnunet-publish.c:919 |
2981 | msgid "specify the priority of the content" | 3194 | msgid "specify the priority of the content" |
2982 | msgstr "" | 3195 | msgstr "" |
2983 | 3196 | ||
2984 | #: src/fs/gnunet-auto-share.c:750 src/fs/gnunet-publish.c:862 | 3197 | #: src/fs/gnunet-auto-share.c:752 src/fs/gnunet-publish.c:926 |
2985 | msgid "set the desired replication LEVEL" | 3198 | msgid "set the desired replication LEVEL" |
2986 | msgstr "" | 3199 | msgstr "" |
2987 | 3200 | ||
2988 | #: src/fs/gnunet-auto-share.c:770 | 3201 | #: src/fs/gnunet-auto-share.c:772 |
2989 | msgid "Automatically publish files from a directory on GNUnet" | 3202 | msgid "Automatically publish files from a directory on GNUnet" |
2990 | msgstr "" | 3203 | msgstr "" |
2991 | 3204 | ||
@@ -3037,7 +3250,9 @@ msgstr "" | |||
3037 | 3250 | ||
3038 | #: src/fs/gnunet-download.c:157 | 3251 | #: src/fs/gnunet-download.c:157 |
3039 | #, c-format | 3252 | #, c-format |
3040 | msgid "Downloading `%s' at %llu/%llu (%s remaining, %s/s). Block took %s to download\n" | 3253 | msgid "" |
3254 | "Downloading `%s' at %llu/%llu (%s remaining, %s/s). Block took %s to " | ||
3255 | "download\n" | ||
3041 | msgstr "" | 3256 | msgstr "" |
3042 | 3257 | ||
3043 | #: src/fs/gnunet-download.c:179 | 3258 | #: src/fs/gnunet-download.c:179 |
@@ -3050,7 +3265,7 @@ msgstr "" | |||
3050 | msgid "Downloading `%s' done (%s/s).\n" | 3265 | msgid "Downloading `%s' done (%s/s).\n" |
3051 | msgstr "" | 3266 | msgstr "" |
3052 | 3267 | ||
3053 | #: src/fs/gnunet-download.c:209 src/fs/gnunet-publish.c:286 | 3268 | #: src/fs/gnunet-download.c:209 src/fs/gnunet-publish.c:304 |
3054 | #: src/fs/gnunet-search.c:200 src/fs/gnunet-unindex.c:108 | 3269 | #: src/fs/gnunet-search.c:200 src/fs/gnunet-unindex.c:108 |
3055 | #, c-format | 3270 | #, c-format |
3056 | msgid "Unexpected status: %d\n" | 3271 | msgid "Unexpected status: %d\n" |
@@ -3060,7 +3275,7 @@ msgstr "" | |||
3060 | msgid "You need to specify a URI argument.\n" | 3275 | msgid "You need to specify a URI argument.\n" |
3061 | msgstr "" | 3276 | msgstr "" |
3062 | 3277 | ||
3063 | #: src/fs/gnunet-download.c:240 src/fs/gnunet-publish.c:665 | 3278 | #: src/fs/gnunet-download.c:240 src/fs/gnunet-publish.c:714 |
3064 | #, c-format | 3279 | #, c-format |
3065 | msgid "Failed to parse URI: %s\n" | 3280 | msgid "Failed to parse URI: %s\n" |
3066 | msgstr "" | 3281 | msgstr "" |
@@ -3073,7 +3288,7 @@ msgstr "" | |||
3073 | msgid "Target filename must be specified.\n" | 3288 | msgid "Target filename must be specified.\n" |
3074 | msgstr "" | 3289 | msgstr "" |
3075 | 3290 | ||
3076 | #: src/fs/gnunet-download.c:268 src/fs/gnunet-publish.c:797 | 3291 | #: src/fs/gnunet-download.c:268 src/fs/gnunet-publish.c:858 |
3077 | #: src/fs/gnunet-search.c:250 src/fs/gnunet-unindex.c:140 | 3292 | #: src/fs/gnunet-search.c:250 src/fs/gnunet-unindex.c:140 |
3078 | #, c-format | 3293 | #, c-format |
3079 | msgid "Could not initialize `%s' subsystem.\n" | 3294 | msgid "Could not initialize `%s' subsystem.\n" |
@@ -3108,7 +3323,9 @@ msgid "download a GNUnet directory recursively" | |||
3108 | msgstr "" | 3323 | msgstr "" |
3109 | 3324 | ||
3110 | #: src/fs/gnunet-download.c:339 | 3325 | #: src/fs/gnunet-download.c:339 |
3111 | msgid "Download files from GNUnet using a GNUnet CHK or LOC URI (gnunet://fs/chk/...)" | 3326 | msgid "" |
3327 | "Download files from GNUnet using a GNUnet CHK or LOC URI (gnunet://fs/" | ||
3328 | "chk/...)" | ||
3112 | msgstr "" | 3329 | msgstr "" |
3113 | 3330 | ||
3114 | #: src/fs/gnunet-fs.c:117 | 3331 | #: src/fs/gnunet-fs.c:117 |
@@ -3135,158 +3352,178 @@ msgstr "" | |||
3135 | msgid "run a testbed to measure file-sharing performance" | 3352 | msgid "run a testbed to measure file-sharing performance" |
3136 | msgstr "" | 3353 | msgstr "" |
3137 | 3354 | ||
3138 | #: src/fs/gnunet-publish.c:231 src/fs/gnunet-publish.c:243 | 3355 | #: src/fs/gnunet-publish.c:238 src/fs/gnunet-publish.c:250 |
3139 | #, c-format | 3356 | #, c-format |
3140 | msgid "Publishing `%s' at %llu/%llu (%s remaining)\n" | 3357 | msgid "Publishing `%s' at %llu/%llu (%s remaining)\n" |
3141 | msgstr "" | 3358 | msgstr "" |
3142 | 3359 | ||
3143 | #: src/fs/gnunet-publish.c:250 | 3360 | #: src/fs/gnunet-publish.c:257 |
3144 | #, c-format | 3361 | #, c-format |
3145 | msgid "Error publishing: %s.\n" | 3362 | msgid "Error publishing: %s.\n" |
3146 | msgstr "" | 3363 | msgstr "" |
3147 | 3364 | ||
3148 | #: src/fs/gnunet-publish.c:260 | 3365 | #: src/fs/gnunet-publish.c:268 |
3149 | #, c-format | 3366 | #, c-format |
3150 | msgid "Publishing `%s' done.\n" | 3367 | msgid "Publishing `%s' done.\n" |
3151 | msgstr "" | 3368 | msgstr "" |
3152 | 3369 | ||
3153 | #: src/fs/gnunet-publish.c:264 | 3370 | #: src/fs/gnunet-publish.c:273 |
3154 | #, c-format | 3371 | #, c-format |
3155 | msgid "URI is `%s'.\n" | 3372 | msgid "URI is `%s'.\n" |
3156 | msgstr "" | 3373 | msgstr "" |
3157 | 3374 | ||
3158 | #: src/fs/gnunet-publish.c:283 | 3375 | #: src/fs/gnunet-publish.c:281 |
3376 | #, c-format | ||
3377 | msgid "Namespace URI is `%s'.\n" | ||
3378 | msgstr "" | ||
3379 | |||
3380 | #: src/fs/gnunet-publish.c:301 | ||
3159 | msgid "Cleanup after abort complete.\n" | 3381 | msgid "Cleanup after abort complete.\n" |
3160 | msgstr "" | 3382 | msgstr "" |
3161 | 3383 | ||
3162 | #: src/fs/gnunet-publish.c:401 | 3384 | #: src/fs/gnunet-publish.c:427 |
3163 | #, c-format | 3385 | #, c-format |
3164 | msgid "Meta data for file `%s' (%s)\n" | 3386 | msgid "Meta data for file `%s' (%s)\n" |
3165 | msgstr "" | 3387 | msgstr "" |
3166 | 3388 | ||
3167 | #: src/fs/gnunet-publish.c:403 | 3389 | #: src/fs/gnunet-publish.c:429 |
3168 | #, c-format | 3390 | #, c-format |
3169 | msgid "Keywords for file `%s' (%s)\n" | 3391 | msgid "Keywords for file `%s' (%s)\n" |
3170 | msgstr "" | 3392 | msgstr "" |
3171 | 3393 | ||
3172 | #: src/fs/gnunet-publish.c:542 | 3394 | #: src/fs/gnunet-publish.c:574 |
3173 | msgid "Could not publish\n" | 3395 | msgid "Could not publish\n" |
3174 | msgstr "" | 3396 | msgstr "" |
3175 | 3397 | ||
3176 | #: src/fs/gnunet-publish.c:565 | 3398 | #: src/fs/gnunet-publish.c:599 |
3177 | msgid "Could not start publishing.\n" | 3399 | msgid "Could not start publishing.\n" |
3178 | msgstr "" | 3400 | msgstr "" |
3179 | 3401 | ||
3180 | #: src/fs/gnunet-publish.c:598 | 3402 | #: src/fs/gnunet-publish.c:633 |
3181 | #, c-format | 3403 | #, c-format |
3182 | msgid "Scanning directory `%s'.\n" | 3404 | msgid "Scanning directory `%s'.\n" |
3183 | msgstr "" | 3405 | msgstr "" |
3184 | 3406 | ||
3185 | #: src/fs/gnunet-publish.c:600 | 3407 | #: src/fs/gnunet-publish.c:637 |
3186 | #, c-format | 3408 | #, c-format |
3187 | msgid "Scanning file `%s'.\n" | 3409 | msgid "Scanning file `%s'.\n" |
3188 | msgstr "" | 3410 | msgstr "" |
3189 | 3411 | ||
3190 | #: src/fs/gnunet-publish.c:605 | 3412 | #: src/fs/gnunet-publish.c:643 |
3191 | #, c-format | 3413 | #, c-format |
3192 | msgid "There was trouble processing file `%s', skipping it.\n" | 3414 | msgid "There was trouble processing file `%s', skipping it.\n" |
3193 | msgstr "" | 3415 | msgstr "" |
3194 | 3416 | ||
3195 | #: src/fs/gnunet-publish.c:610 | 3417 | #: src/fs/gnunet-publish.c:650 |
3196 | msgid "Preprocessing complete.\n" | 3418 | msgid "Preprocessing complete.\n" |
3197 | msgstr "" | 3419 | msgstr "" |
3198 | 3420 | ||
3199 | #: src/fs/gnunet-publish.c:614 | 3421 | #: src/fs/gnunet-publish.c:655 |
3200 | #, c-format | 3422 | #, c-format |
3201 | msgid "Extracting meta data from file `%s' complete.\n" | 3423 | msgid "Extracting meta data from file `%s' complete.\n" |
3202 | msgstr "" | 3424 | msgstr "" |
3203 | 3425 | ||
3204 | #: src/fs/gnunet-publish.c:618 | 3426 | #: src/fs/gnunet-publish.c:662 |
3205 | msgid "Meta data extraction has finished.\n" | 3427 | msgid "Meta data extraction has finished.\n" |
3206 | msgstr "" | 3428 | msgstr "" |
3207 | 3429 | ||
3208 | #: src/fs/gnunet-publish.c:625 | 3430 | #: src/fs/gnunet-publish.c:671 |
3209 | msgid "Internal error scanning directory.\n" | 3431 | msgid "Internal error scanning directory.\n" |
3210 | msgstr "" | 3432 | msgstr "" |
3211 | 3433 | ||
3212 | #: src/fs/gnunet-publish.c:656 | 3434 | #: src/fs/gnunet-publish.c:703 |
3213 | #, c-format | 3435 | #, c-format |
3214 | msgid "Selected pseudonym `%s' unknown\n" | 3436 | msgid "Selected pseudonym `%s' unknown\n" |
3215 | msgstr "" | 3437 | msgstr "" |
3216 | 3438 | ||
3217 | #: src/fs/gnunet-publish.c:682 | 3439 | #: src/fs/gnunet-publish.c:735 |
3218 | #, c-format | 3440 | #, c-format |
3219 | msgid "Failed to access `%s': %s\n" | 3441 | msgid "Failed to access `%s': %s\n" |
3220 | msgstr "" | 3442 | msgstr "" |
3221 | 3443 | ||
3222 | #: src/fs/gnunet-publish.c:695 | 3444 | #: src/fs/gnunet-publish.c:749 |
3223 | msgid "Failed to start meta directory scanner. Is gnunet-helper-publish-fs installed?\n" | 3445 | msgid "" |
3446 | "Failed to start meta directory scanner. Is gnunet-helper-publish-fs " | ||
3447 | "installed?\n" | ||
3224 | msgstr "" | 3448 | msgstr "" |
3225 | 3449 | ||
3226 | #: src/fs/gnunet-publish.c:747 | 3450 | #: src/fs/gnunet-publish.c:805 |
3227 | #, c-format | 3451 | #, c-format |
3228 | msgid "Cannot extract metadata from a URI!\n" | 3452 | msgid "Cannot extract metadata from a URI!\n" |
3229 | msgstr "" | 3453 | msgstr "" |
3230 | 3454 | ||
3231 | #: src/fs/gnunet-publish.c:754 | 3455 | #: src/fs/gnunet-publish.c:812 |
3232 | #, c-format | 3456 | #, c-format |
3233 | msgid "You must specify one and only one filename for insertion.\n" | 3457 | msgid "You must specify one and only one filename for insertion.\n" |
3234 | msgstr "" | 3458 | msgstr "" |
3235 | 3459 | ||
3236 | #: src/fs/gnunet-publish.c:760 | 3460 | #: src/fs/gnunet-publish.c:818 |
3237 | #, c-format | 3461 | #, c-format |
3238 | msgid "You must NOT specify an URI and a filename.\n" | 3462 | msgid "You must NOT specify an URI and a filename.\n" |
3239 | msgstr "" | 3463 | msgstr "" |
3240 | 3464 | ||
3241 | #: src/fs/gnunet-publish.c:768 src/vpn/gnunet-vpn.c:209 | 3465 | #: src/fs/gnunet-publish.c:826 src/vpn/gnunet-vpn.c:209 |
3242 | #, c-format | 3466 | #, c-format |
3243 | msgid "Option `%s' is required when using option `%s'.\n" | 3467 | msgid "Option `%s' is required when using option `%s'.\n" |
3244 | msgstr "" | 3468 | msgstr "" |
3245 | 3469 | ||
3246 | #: src/fs/gnunet-publish.c:778 src/fs/gnunet-publish.c:785 | 3470 | #: src/fs/gnunet-publish.c:837 src/fs/gnunet-publish.c:845 |
3247 | #: src/transport/gnunet-transport.c:1284 src/transport/gnunet-transport.c:1314 | 3471 | #: src/transport/gnunet-transport.c:1928 src/transport/gnunet-transport.c:1958 |
3248 | #: src/transport/gnunet-transport.c:1344 | 3472 | #: src/transport/gnunet-transport.c:1989 |
3249 | #, c-format | 3473 | #, c-format |
3250 | msgid "Option `%s' makes no sense without option `%s'.\n" | 3474 | msgid "Option `%s' makes no sense without option `%s'.\n" |
3251 | msgstr "" | 3475 | msgstr "" |
3252 | 3476 | ||
3253 | #: src/fs/gnunet-publish.c:835 | 3477 | #: src/fs/gnunet-publish.c:899 |
3254 | msgid "print list of extracted keywords that would be used, but do not perform upload" | 3478 | msgid "" |
3479 | "print list of extracted keywords that would be used, but do not perform " | ||
3480 | "upload" | ||
3255 | msgstr "" | 3481 | msgstr "" |
3256 | 3482 | ||
3257 | #: src/fs/gnunet-publish.c:839 | 3483 | #: src/fs/gnunet-publish.c:903 |
3258 | msgid "add an additional keyword for the top-level file or directory (this option can be specified multiple times)" | 3484 | msgid "" |
3485 | "add an additional keyword for the top-level file or directory (this option " | ||
3486 | "can be specified multiple times)" | ||
3259 | msgstr "" | 3487 | msgstr "" |
3260 | 3488 | ||
3261 | #: src/fs/gnunet-publish.c:843 | 3489 | #: src/fs/gnunet-publish.c:907 |
3262 | msgid "set the meta-data for the given TYPE to the given VALUE" | 3490 | msgid "set the meta-data for the given TYPE to the given VALUE" |
3263 | msgstr "" | 3491 | msgstr "" |
3264 | 3492 | ||
3265 | #: src/fs/gnunet-publish.c:846 | 3493 | #: src/fs/gnunet-publish.c:910 |
3266 | msgid "do not index, perform full insertion (stores entire file in encrypted form in GNUnet database)" | 3494 | msgid "" |
3495 | "do not index, perform full insertion (stores entire file in encrypted form " | ||
3496 | "in GNUnet database)" | ||
3267 | msgstr "" | 3497 | msgstr "" |
3268 | 3498 | ||
3269 | #: src/fs/gnunet-publish.c:851 | 3499 | #: src/fs/gnunet-publish.c:915 |
3270 | msgid "specify ID of an updated version to be published in the future (for namespace insertions only)" | 3500 | msgid "" |
3501 | "specify ID of an updated version to be published in the future (for " | ||
3502 | "namespace insertions only)" | ||
3271 | msgstr "" | 3503 | msgstr "" |
3272 | 3504 | ||
3273 | #: src/fs/gnunet-publish.c:859 | 3505 | #: src/fs/gnunet-publish.c:923 |
3274 | msgid "publish the files under the pseudonym NAME (place file into namespace)" | 3506 | msgid "publish the files under the pseudonym NAME (place file into namespace)" |
3275 | msgstr "" | 3507 | msgstr "" |
3276 | 3508 | ||
3277 | #: src/fs/gnunet-publish.c:865 | 3509 | #: src/fs/gnunet-publish.c:929 |
3278 | msgid "only simulate the process but do not do any actual publishing (useful to compute URIs)" | 3510 | msgid "" |
3511 | "only simulate the process but do not do any actual publishing (useful to " | ||
3512 | "compute URIs)" | ||
3279 | msgstr "" | 3513 | msgstr "" |
3280 | 3514 | ||
3281 | #: src/fs/gnunet-publish.c:869 | 3515 | #: src/fs/gnunet-publish.c:933 |
3282 | msgid "set the ID of this version of the publication (for namespace insertions only)" | 3516 | msgid "" |
3517 | "set the ID of this version of the publication (for namespace insertions only)" | ||
3283 | msgstr "" | 3518 | msgstr "" |
3284 | 3519 | ||
3285 | #: src/fs/gnunet-publish.c:873 | 3520 | #: src/fs/gnunet-publish.c:937 |
3286 | msgid "URI to be published (can be used instead of passing a file to add keywords to the file with the respective URI)" | 3521 | msgid "" |
3522 | "URI to be published (can be used instead of passing a file to add keywords " | ||
3523 | "to the file with the respective URI)" | ||
3287 | msgstr "" | 3524 | msgstr "" |
3288 | 3525 | ||
3289 | #: src/fs/gnunet-publish.c:889 | 3526 | #: src/fs/gnunet-publish.c:953 |
3290 | msgid "Publish a file or directory on GNUnet" | 3527 | msgid "Publish a file or directory on GNUnet" |
3291 | msgstr "" | 3528 | msgstr "" |
3292 | 3529 | ||
@@ -3324,99 +3561,138 @@ msgstr "" | |||
3324 | msgid "Search GNUnet for files that were published on GNUnet" | 3561 | msgid "Search GNUnet for files that were published on GNUnet" |
3325 | msgstr "" | 3562 | msgstr "" |
3326 | 3563 | ||
3327 | #: src/fs/gnunet-service-fs.c:271 | 3564 | #: src/fs/gnunet-service-fs.c:274 |
3328 | msgid "# running average P2P latency (ms)" | 3565 | msgid "# running average P2P latency (ms)" |
3329 | msgstr "" | 3566 | msgstr "" |
3330 | 3567 | ||
3331 | #: src/fs/gnunet-service-fs.c:326 src/fs/gnunet-service-fs.c:539 | 3568 | #: src/fs/gnunet-service-fs.c:332 src/fs/gnunet-service-fs.c:595 |
3332 | msgid "# Loopback routes suppressed" | 3569 | msgid "# Loopback routes suppressed" |
3333 | msgstr "" | 3570 | msgstr "" |
3334 | 3571 | ||
3335 | #: src/fs/gnunet-service-fs.c:639 src/hostlist/gnunet-daemon-hostlist.c:288 | 3572 | #: src/fs/gnunet-service-fs.c:719 |
3336 | #: src/topology/gnunet-daemon-topology.c:1254 | 3573 | msgid "FS service is lacking HOSTKEY configuration setting. Exiting.\n" |
3337 | #: src/topology/gnunet-daemon-topology.c:1261 | 3574 | msgstr "" |
3575 | |||
3576 | #: src/fs/gnunet-service-fs.c:745 src/hostlist/gnunet-daemon-hostlist.c:311 | ||
3577 | #: src/sensordashboard/gnunet-service-sensordashboard.c:864 | ||
3578 | #: src/sensordashboard/gnunet-service-sensordashboard.c:872 | ||
3579 | #: src/topology/gnunet-daemon-topology.c:1287 | ||
3580 | #: src/topology/gnunet-daemon-topology.c:1294 | ||
3338 | #, c-format | 3581 | #, c-format |
3339 | msgid "Failed to connect to `%s' service.\n" | 3582 | msgid "Failed to connect to `%s' service.\n" |
3340 | msgstr "" | 3583 | msgstr "" |
3341 | 3584 | ||
3342 | #: src/fs/gnunet-service-fs_cp.c:682 | 3585 | #: src/fs/gnunet-service-fs_cadet_client.c:494 |
3586 | msgid "# replies received via cadet" | ||
3587 | msgstr "" | ||
3588 | |||
3589 | #: src/fs/gnunet-service-fs_cadet_client.c:508 | ||
3590 | msgid "# replies received via cadet dropped" | ||
3591 | msgstr "" | ||
3592 | |||
3593 | #: src/fs/gnunet-service-fs_cadet_server.c:260 | ||
3594 | msgid "# Blocks transferred via cadet" | ||
3595 | msgstr "" | ||
3596 | |||
3597 | #: src/fs/gnunet-service-fs_cadet_server.c:361 | ||
3598 | msgid "# queries received via CADET not answered" | ||
3599 | msgstr "" | ||
3600 | |||
3601 | #: src/fs/gnunet-service-fs_cadet_server.c:441 | ||
3602 | msgid "# queries received via cadet" | ||
3603 | msgstr "" | ||
3604 | |||
3605 | #: src/fs/gnunet-service-fs_cadet_server.c:485 | ||
3606 | msgid "# cadet client connections rejected" | ||
3607 | msgstr "" | ||
3608 | |||
3609 | #: src/fs/gnunet-service-fs_cadet_server.c:491 | ||
3610 | #: src/fs/gnunet-service-fs_cadet_server.c:531 | ||
3611 | msgid "# cadet connections active" | ||
3612 | msgstr "" | ||
3613 | |||
3614 | #: src/fs/gnunet-service-fs_cp.c:735 | ||
3343 | msgid "# migration stop messages received" | 3615 | msgid "# migration stop messages received" |
3344 | msgstr "" | 3616 | msgstr "" |
3345 | 3617 | ||
3346 | #: src/fs/gnunet-service-fs_cp.c:686 | 3618 | #: src/fs/gnunet-service-fs_cp.c:739 |
3347 | #, c-format | 3619 | #, c-format |
3348 | msgid "Migration of content to peer `%s' blocked for %s\n" | 3620 | msgid "Migration of content to peer `%s' blocked for %s\n" |
3349 | msgstr "" | 3621 | msgstr "" |
3350 | 3622 | ||
3351 | #: src/fs/gnunet-service-fs_cp.c:721 | 3623 | #: src/fs/gnunet-service-fs_cp.c:776 |
3352 | msgid "# replies transmitted to other peers" | 3624 | msgid "# replies transmitted to other peers" |
3353 | msgstr "" | 3625 | msgstr "" |
3354 | 3626 | ||
3355 | #: src/fs/gnunet-service-fs_cp.c:727 | 3627 | #: src/fs/gnunet-service-fs_cp.c:784 |
3356 | msgid "# replies dropped" | 3628 | msgid "# replies dropped" |
3357 | msgstr "" | 3629 | msgstr "" |
3358 | 3630 | ||
3359 | #: src/fs/gnunet-service-fs_cp.c:752 src/fs/gnunet-service-fs_cp.c:1301 | 3631 | #: src/fs/gnunet-service-fs_cp.c:810 src/fs/gnunet-service-fs_cp.c:1404 |
3360 | msgid "# P2P searches active" | 3632 | msgid "# P2P searches active" |
3361 | msgstr "" | 3633 | msgstr "" |
3362 | 3634 | ||
3363 | #: src/fs/gnunet-service-fs_cp.c:845 | 3635 | #: src/fs/gnunet-service-fs_cp.c:915 |
3364 | msgid "# artificial delays introduced (ms)" | 3636 | msgid "# artificial delays introduced (ms)" |
3365 | msgstr "" | 3637 | msgstr "" |
3366 | 3638 | ||
3367 | #: src/fs/gnunet-service-fs_cp.c:898 | 3639 | #: src/fs/gnunet-service-fs_cp.c:971 |
3368 | msgid "# replies dropped due to type mismatch" | 3640 | msgid "# replies dropped due to type mismatch" |
3369 | msgstr "" | 3641 | msgstr "" |
3370 | 3642 | ||
3371 | #: src/fs/gnunet-service-fs_cp.c:906 | 3643 | #: src/fs/gnunet-service-fs_cp.c:979 |
3372 | msgid "# replies received for other peers" | 3644 | msgid "# replies received for other peers" |
3373 | msgstr "" | 3645 | msgstr "" |
3374 | 3646 | ||
3375 | #: src/fs/gnunet-service-fs_cp.c:920 | 3647 | #: src/fs/gnunet-service-fs_cp.c:993 |
3376 | msgid "# replies dropped due to insufficient cover traffic" | 3648 | msgid "# replies dropped due to insufficient cover traffic" |
3377 | msgstr "" | 3649 | msgstr "" |
3378 | 3650 | ||
3379 | #: src/fs/gnunet-service-fs_cp.c:958 | 3651 | #: src/fs/gnunet-service-fs_cp.c:1041 |
3380 | msgid "# P2P searches destroyed due to ultimate reply" | 3652 | msgid "# P2P searches destroyed due to ultimate reply" |
3381 | msgstr "" | 3653 | msgstr "" |
3382 | 3654 | ||
3383 | #: src/fs/gnunet-service-fs_cp.c:1026 | 3655 | #: src/fs/gnunet-service-fs_cp.c:1109 |
3384 | msgid "# requests done for free (low load)" | 3656 | msgid "# requests done for free (low load)" |
3385 | msgstr "" | 3657 | msgstr "" |
3386 | 3658 | ||
3387 | #: src/fs/gnunet-service-fs_cp.c:1051 | 3659 | #: src/fs/gnunet-service-fs_cp.c:1134 |
3388 | msgid "# request dropped, priority insufficient" | 3660 | msgid "# request dropped, priority insufficient" |
3389 | msgstr "" | 3661 | msgstr "" |
3390 | 3662 | ||
3391 | #: src/fs/gnunet-service-fs_cp.c:1061 | 3663 | #: src/fs/gnunet-service-fs_cp.c:1144 |
3392 | msgid "# requests done for a price (normal load)" | 3664 | msgid "# requests done for a price (normal load)" |
3393 | msgstr "" | 3665 | msgstr "" |
3394 | 3666 | ||
3395 | #: src/fs/gnunet-service-fs_cp.c:1139 | 3667 | #: src/fs/gnunet-service-fs_cp.c:1221 |
3396 | msgid "# GET requests received (from other peers)" | 3668 | msgid "# GET requests received (from other peers)" |
3397 | msgstr "" | 3669 | msgstr "" |
3398 | 3670 | ||
3399 | #: src/fs/gnunet-service-fs_cp.c:1173 | 3671 | #: src/fs/gnunet-service-fs_cp.c:1256 |
3400 | msgid "# requests dropped due to initiator not being connected" | 3672 | msgid "# requests dropped due to initiator not being connected" |
3401 | msgstr "" | 3673 | msgstr "" |
3402 | 3674 | ||
3403 | #: src/fs/gnunet-service-fs_cp.c:1195 | 3675 | #: src/fs/gnunet-service-fs_cp.c:1277 |
3404 | msgid "# requests dropped due to missing reverse route" | 3676 | msgid "# requests dropped due to missing reverse route" |
3405 | msgstr "" | 3677 | msgstr "" |
3406 | 3678 | ||
3407 | #: src/fs/gnunet-service-fs_cp.c:1246 | 3679 | #: src/fs/gnunet-service-fs_cp.c:1288 |
3680 | msgid "# requests dropped due to full reply queue" | ||
3681 | msgstr "" | ||
3682 | |||
3683 | #: src/fs/gnunet-service-fs_cp.c:1340 | ||
3408 | msgid "# requests dropped due TTL underflow" | 3684 | msgid "# requests dropped due TTL underflow" |
3409 | msgstr "" | 3685 | msgstr "" |
3410 | 3686 | ||
3411 | #: src/fs/gnunet-service-fs_cp.c:1270 | 3687 | #: src/fs/gnunet-service-fs_cp.c:1365 |
3412 | msgid "# requests dropped due to higher-TTL request" | 3688 | msgid "# requests dropped due to higher-TTL request" |
3413 | msgstr "" | 3689 | msgstr "" |
3414 | 3690 | ||
3415 | #: src/fs/gnunet-service-fs_cp.c:1299 | 3691 | #: src/fs/gnunet-service-fs_cp.c:1402 |
3416 | msgid "# P2P query messages received and processed" | 3692 | msgid "# P2P query messages received and processed" |
3417 | msgstr "" | 3693 | msgstr "" |
3418 | 3694 | ||
3419 | #: src/fs/gnunet-service-fs_cp.c:1670 | 3695 | #: src/fs/gnunet-service-fs_cp.c:1841 |
3420 | msgid "# migration stop messages sent" | 3696 | msgid "# migration stop messages sent" |
3421 | msgstr "" | 3697 | msgstr "" |
3422 | 3698 | ||
@@ -3433,7 +3709,9 @@ msgstr "" | |||
3433 | 3709 | ||
3434 | #: src/fs/gnunet-service-fs_indexing.c:237 | 3710 | #: src/fs/gnunet-service-fs_indexing.c:237 |
3435 | #, c-format | 3711 | #, c-format |
3436 | msgid "Index request received for file `%s' is already indexed as `%s'. Permitting anyway.\n" | 3712 | msgid "" |
3713 | "Index request received for file `%s' is already indexed as `%s'. Permitting " | ||
3714 | "anyway.\n" | ||
3437 | msgstr "" | 3715 | msgstr "" |
3438 | 3716 | ||
3439 | #: src/fs/gnunet-service-fs_indexing.c:275 | 3717 | #: src/fs/gnunet-service-fs_indexing.c:275 |
@@ -3464,51 +3742,22 @@ msgstr "" | |||
3464 | msgid "Indexed file `%s' changed at offset %llu\n" | 3742 | msgid "Indexed file `%s' changed at offset %llu\n" |
3465 | msgstr "" | 3743 | msgstr "" |
3466 | 3744 | ||
3467 | #: src/fs/gnunet-service-fs_lc.c:202 src/fs/gnunet-service-fs_lc.c:368 | 3745 | #: src/fs/gnunet-service-fs_lc.c:201 src/fs/gnunet-service-fs_lc.c:376 |
3468 | msgid "# client searches active" | 3746 | msgid "# client searches active" |
3469 | msgstr "" | 3747 | msgstr "" |
3470 | 3748 | ||
3471 | #: src/fs/gnunet-service-fs_lc.c:256 | 3749 | #: src/fs/gnunet-service-fs_lc.c:259 |
3472 | msgid "# replies received for local clients" | 3750 | msgid "# replies received for local clients" |
3473 | msgstr "" | 3751 | msgstr "" |
3474 | 3752 | ||
3475 | #: src/fs/gnunet-service-fs_lc.c:327 | 3753 | #: src/fs/gnunet-service-fs_lc.c:330 |
3476 | msgid "# client searches received" | 3754 | msgid "# client searches received" |
3477 | msgstr "" | 3755 | msgstr "" |
3478 | 3756 | ||
3479 | #: src/fs/gnunet-service-fs_lc.c:362 | 3757 | #: src/fs/gnunet-service-fs_lc.c:370 |
3480 | msgid "# client searches updated (merged content seen list)" | 3758 | msgid "# client searches updated (merged content seen list)" |
3481 | msgstr "" | 3759 | msgstr "" |
3482 | 3760 | ||
3483 | #: src/fs/gnunet-service-fs_mesh_client.c:484 | ||
3484 | msgid "# replies received via mesh" | ||
3485 | msgstr "" | ||
3486 | |||
3487 | #: src/fs/gnunet-service-fs_mesh_client.c:498 | ||
3488 | msgid "# replies received via mesh dropped" | ||
3489 | msgstr "" | ||
3490 | |||
3491 | #: src/fs/gnunet-service-fs_mesh_server.c:260 | ||
3492 | msgid "# Blocks transferred via mesh" | ||
3493 | msgstr "" | ||
3494 | |||
3495 | #: src/fs/gnunet-service-fs_mesh_server.c:352 | ||
3496 | msgid "# queries received via mesh not answered" | ||
3497 | msgstr "" | ||
3498 | |||
3499 | #: src/fs/gnunet-service-fs_mesh_server.c:432 | ||
3500 | msgid "# queries received via mesh" | ||
3501 | msgstr "" | ||
3502 | |||
3503 | #: src/fs/gnunet-service-fs_mesh_server.c:476 | ||
3504 | msgid "# mesh client connections rejected" | ||
3505 | msgstr "" | ||
3506 | |||
3507 | #: src/fs/gnunet-service-fs_mesh_server.c:482 | ||
3508 | #: src/fs/gnunet-service-fs_mesh_server.c:522 | ||
3509 | msgid "# mesh connections active" | ||
3510 | msgstr "" | ||
3511 | |||
3512 | #: src/fs/gnunet-service-fs_pe.c:269 | 3761 | #: src/fs/gnunet-service-fs_pe.c:269 |
3513 | msgid "# average retransmission delay (ms)" | 3762 | msgid "# average retransmission delay (ms)" |
3514 | msgstr "" | 3763 | msgstr "" |
@@ -3550,103 +3799,103 @@ msgstr "" | |||
3550 | msgid "# Pending requests active" | 3799 | msgid "# Pending requests active" |
3551 | msgstr "" | 3800 | msgstr "" |
3552 | 3801 | ||
3553 | #: src/fs/gnunet-service-fs_pr.c:814 | 3802 | #: src/fs/gnunet-service-fs_pr.c:820 |
3554 | msgid "# replies received and matched" | 3803 | msgid "# replies received and matched" |
3555 | msgstr "" | 3804 | msgstr "" |
3556 | 3805 | ||
3557 | #: src/fs/gnunet-service-fs_pr.c:844 | 3806 | #: src/fs/gnunet-service-fs_pr.c:857 |
3558 | msgid "# duplicate replies discarded (bloomfilter)" | 3807 | msgid "# duplicate replies discarded (bloomfilter)" |
3559 | msgstr "" | 3808 | msgstr "" |
3560 | 3809 | ||
3561 | #: src/fs/gnunet-service-fs_pr.c:853 | 3810 | #: src/fs/gnunet-service-fs_pr.c:866 |
3562 | msgid "# irrelevant replies discarded" | 3811 | msgid "# irrelevant replies discarded" |
3563 | msgstr "" | 3812 | msgstr "" |
3564 | 3813 | ||
3565 | #: src/fs/gnunet-service-fs_pr.c:867 | 3814 | #: src/fs/gnunet-service-fs_pr.c:881 |
3566 | #, c-format | 3815 | #, c-format |
3567 | msgid "Unsupported block type %u\n" | 3816 | msgid "Unsupported block type %u\n" |
3568 | msgstr "" | 3817 | msgstr "" |
3569 | 3818 | ||
3570 | #: src/fs/gnunet-service-fs_pr.c:880 | 3819 | #: src/fs/gnunet-service-fs_pr.c:898 |
3571 | msgid "# results found locally" | 3820 | msgid "# results found locally" |
3572 | msgstr "" | 3821 | msgstr "" |
3573 | 3822 | ||
3574 | #: src/fs/gnunet-service-fs_pr.c:1001 | 3823 | #: src/fs/gnunet-service-fs_pr.c:1028 |
3575 | msgid "# Datastore `PUT' failures" | 3824 | msgid "# Datastore `PUT' failures" |
3576 | msgstr "" | 3825 | msgstr "" |
3577 | 3826 | ||
3578 | #: src/fs/gnunet-service-fs_pr.c:1029 | 3827 | #: src/fs/gnunet-service-fs_pr.c:1056 |
3579 | msgid "# storage requests dropped due to high load" | 3828 | msgid "# storage requests dropped due to high load" |
3580 | msgstr "" | 3829 | msgstr "" |
3581 | 3830 | ||
3582 | #: src/fs/gnunet-service-fs_pr.c:1064 | 3831 | #: src/fs/gnunet-service-fs_pr.c:1094 |
3583 | msgid "# Replies received from DHT" | 3832 | msgid "# Replies received from DHT" |
3584 | msgstr "" | 3833 | msgstr "" |
3585 | 3834 | ||
3586 | #: src/fs/gnunet-service-fs_pr.c:1192 | 3835 | #: src/fs/gnunet-service-fs_pr.c:1226 |
3587 | msgid "# Replies received from MESH" | 3836 | msgid "# Replies received from CADET" |
3588 | msgstr "" | 3837 | msgstr "" |
3589 | 3838 | ||
3590 | #: src/fs/gnunet-service-fs_pr.c:1244 | 3839 | #: src/fs/gnunet-service-fs_pr.c:1279 |
3591 | #, c-format | 3840 | #, c-format |
3592 | msgid "Datastore lookup already took %s!\n" | 3841 | msgid "Datastore lookup already took %s!\n" |
3593 | msgstr "" | 3842 | msgstr "" |
3594 | 3843 | ||
3595 | #: src/fs/gnunet-service-fs_pr.c:1264 | 3844 | #: src/fs/gnunet-service-fs_pr.c:1301 |
3596 | #, c-format | 3845 | #, c-format |
3597 | msgid "On-demand lookup already took %s!\n" | 3846 | msgid "On-demand lookup already took %s!\n" |
3598 | msgstr "" | 3847 | msgstr "" |
3599 | 3848 | ||
3600 | #: src/fs/gnunet-service-fs_pr.c:1311 | 3849 | #: src/fs/gnunet-service-fs_pr.c:1353 |
3601 | msgid "# Datastore lookups concluded (no results)" | 3850 | msgid "# Datastore lookups concluded (no results)" |
3602 | msgstr "" | 3851 | msgstr "" |
3603 | 3852 | ||
3604 | #: src/fs/gnunet-service-fs_pr.c:1326 | 3853 | #: src/fs/gnunet-service-fs_pr.c:1368 |
3605 | msgid "# Datastore lookups concluded (seen all)" | 3854 | msgid "# Datastore lookups concluded (seen all)" |
3606 | msgstr "" | 3855 | msgstr "" |
3607 | 3856 | ||
3608 | #: src/fs/gnunet-service-fs_pr.c:1335 | 3857 | #: src/fs/gnunet-service-fs_pr.c:1377 |
3609 | msgid "# Datastore lookups aborted (more than MAX_RESULTS)" | 3858 | msgid "# Datastore lookups aborted (more than MAX_RESULTS)" |
3610 | msgstr "" | 3859 | msgstr "" |
3611 | 3860 | ||
3612 | #: src/fs/gnunet-service-fs_pr.c:1350 | 3861 | #: src/fs/gnunet-service-fs_pr.c:1392 |
3613 | msgid "# requested DBLOCK or IBLOCK not found" | 3862 | msgid "# requested DBLOCK or IBLOCK not found" |
3614 | msgstr "" | 3863 | msgstr "" |
3615 | 3864 | ||
3616 | #: src/fs/gnunet-service-fs_pr.c:1364 | 3865 | #: src/fs/gnunet-service-fs_pr.c:1406 |
3617 | msgid "# on-demand blocks matched requests" | 3866 | msgid "# on-demand blocks matched requests" |
3618 | msgstr "" | 3867 | msgstr "" |
3619 | 3868 | ||
3620 | #: src/fs/gnunet-service-fs_pr.c:1377 | 3869 | #: src/fs/gnunet-service-fs_pr.c:1419 |
3621 | msgid "# on-demand lookups performed successfully" | 3870 | msgid "# on-demand lookups performed successfully" |
3622 | msgstr "" | 3871 | msgstr "" |
3623 | 3872 | ||
3624 | #: src/fs/gnunet-service-fs_pr.c:1382 | 3873 | #: src/fs/gnunet-service-fs_pr.c:1424 |
3625 | msgid "# on-demand lookups failed" | 3874 | msgid "# on-demand lookups failed" |
3626 | msgstr "" | 3875 | msgstr "" |
3627 | 3876 | ||
3628 | #: src/fs/gnunet-service-fs_pr.c:1409 src/fs/gnunet-service-fs_pr.c:1449 | 3877 | #: src/fs/gnunet-service-fs_pr.c:1451 src/fs/gnunet-service-fs_pr.c:1491 |
3629 | #: src/fs/gnunet-service-fs_pr.c:1590 | 3878 | #: src/fs/gnunet-service-fs_pr.c:1660 |
3630 | msgid "# Datastore lookups concluded (error queueing)" | 3879 | msgid "# Datastore lookups concluded (error queueing)" |
3631 | msgstr "" | 3880 | msgstr "" |
3632 | 3881 | ||
3633 | #: src/fs/gnunet-service-fs_pr.c:1467 | 3882 | #: src/fs/gnunet-service-fs_pr.c:1510 |
3634 | msgid "# Datastore lookups concluded (found last result)" | 3883 | msgid "# Datastore lookups concluded (found last result)" |
3635 | msgstr "" | 3884 | msgstr "" |
3636 | 3885 | ||
3637 | #: src/fs/gnunet-service-fs_pr.c:1478 | 3886 | #: src/fs/gnunet-service-fs_pr.c:1522 |
3638 | msgid "# Datastore lookups concluded (load too high)" | 3887 | msgid "# Datastore lookups concluded (load too high)" |
3639 | msgstr "" | 3888 | msgstr "" |
3640 | 3889 | ||
3641 | #: src/fs/gnunet-service-fs_pr.c:1566 | 3890 | #: src/fs/gnunet-service-fs_pr.c:1636 |
3642 | msgid "# Datastore lookups initiated" | 3891 | msgid "# Datastore lookups initiated" |
3643 | msgstr "" | 3892 | msgstr "" |
3644 | 3893 | ||
3645 | #: src/fs/gnunet-service-fs_pr.c:1651 | 3894 | #: src/fs/gnunet-service-fs_pr.c:1725 |
3646 | msgid "# GAP PUT messages received" | 3895 | msgid "# GAP PUT messages received" |
3647 | msgstr "" | 3896 | msgstr "" |
3648 | 3897 | ||
3649 | #: src/fs/gnunet-service-fs_push.c:631 | 3898 | #: src/fs/gnunet-service-fs_push.c:672 |
3650 | msgid "time required, content pushing disabled" | 3899 | msgid "time required, content pushing disabled" |
3651 | msgstr "" | 3900 | msgstr "" |
3652 | 3901 | ||
@@ -3686,7 +3935,7 @@ msgstr "" | |||
3686 | msgid "Refusing `%s' request to HTTP server\n" | 3935 | msgid "Refusing `%s' request to HTTP server\n" |
3687 | msgstr "" | 3936 | msgstr "" |
3688 | 3937 | ||
3689 | #: src/gns/gnunet-bcd.c:355 src/hostlist/hostlist-server.c:567 | 3938 | #: src/gns/gnunet-bcd.c:355 src/hostlist/gnunet-daemon-hostlist_server.c:759 |
3690 | #, c-format | 3939 | #, c-format |
3691 | msgid "Invalid port number %llu. Exiting.\n" | 3940 | msgid "Invalid port number %llu. Exiting.\n" |
3692 | msgstr "" | 3941 | msgstr "" |
@@ -3709,117 +3958,128 @@ msgstr "" | |||
3709 | msgid "GNUnet HTTP server to create business cards" | 3958 | msgid "GNUnet HTTP server to create business cards" |
3710 | msgstr "" | 3959 | msgstr "" |
3711 | 3960 | ||
3712 | #: src/gns/gnunet-dns2gns.c:228 | 3961 | #: src/gns/gnunet-dns2gns.c:234 |
3713 | msgid "Failed to pack DNS response into UDP packet!\n" | 3962 | msgid "Failed to pack DNS response into UDP packet!\n" |
3714 | msgstr "" | 3963 | msgstr "" |
3715 | 3964 | ||
3716 | #: src/gns/gnunet-dns2gns.c:400 | 3965 | #: src/gns/gnunet-dns2gns.c:406 |
3717 | #, c-format | 3966 | #, c-format |
3718 | msgid "Cannot parse DNS request from %s\n" | 3967 | msgid "Cannot parse DNS request from %s\n" |
3719 | msgstr "" | 3968 | msgstr "" |
3720 | 3969 | ||
3721 | #: src/gns/gnunet-dns2gns.c:416 | 3970 | #: src/gns/gnunet-dns2gns.c:422 |
3722 | #, c-format | 3971 | #, c-format |
3723 | msgid "Received malformed DNS request from %s\n" | 3972 | msgid "Received malformed DNS request from %s\n" |
3724 | msgstr "" | 3973 | msgstr "" |
3725 | 3974 | ||
3726 | #: src/gns/gnunet-dns2gns.c:424 | 3975 | #: src/gns/gnunet-dns2gns.c:430 |
3727 | #, c-format | 3976 | #, c-format |
3728 | msgid "Received unsupported DNS request from %s\n" | 3977 | msgid "Received unsupported DNS request from %s\n" |
3729 | msgstr "" | 3978 | msgstr "" |
3730 | 3979 | ||
3731 | #: src/gns/gnunet-dns2gns.c:701 | 3980 | #: src/gns/gnunet-dns2gns.c:708 |
3732 | msgid "No ego configured for `dns2gns` subsystem\n" | 3981 | msgid "No ego configured for `dns2gns` subsystem\n" |
3733 | msgstr "" | 3982 | msgstr "" |
3734 | 3983 | ||
3735 | #: src/gns/gnunet-dns2gns.c:727 | 3984 | #: src/gns/gnunet-dns2gns.c:734 |
3736 | msgid "No DNS server specified!\n" | 3985 | msgid "No DNS server specified!\n" |
3737 | msgstr "" | 3986 | msgstr "" |
3738 | 3987 | ||
3739 | #: src/gns/gnunet-dns2gns.c:749 | 3988 | #: src/gns/gnunet-dns2gns.c:756 |
3740 | msgid "No valid GNS zone specified!\n" | 3989 | msgid "No valid GNS zone specified!\n" |
3741 | msgstr "" | 3990 | msgstr "" |
3742 | 3991 | ||
3743 | #: src/gns/gnunet-dns2gns.c:770 | 3992 | #: src/gns/gnunet-dns2gns.c:777 |
3744 | msgid "IP of recursive DNS resolver to use (required)" | 3993 | msgid "IP of recursive DNS resolver to use (required)" |
3745 | msgstr "" | 3994 | msgstr "" |
3746 | 3995 | ||
3747 | #: src/gns/gnunet-dns2gns.c:773 | 3996 | #: src/gns/gnunet-dns2gns.c:780 |
3748 | msgid "Authoritative FCFS suffix to use (optional); default: fcfs.zkey.eu" | 3997 | msgid "Authoritative FCFS suffix to use (optional); default: fcfs.zkey.eu" |
3749 | msgstr "" | 3998 | msgstr "" |
3750 | 3999 | ||
3751 | #: src/gns/gnunet-dns2gns.c:776 | 4000 | #: src/gns/gnunet-dns2gns.c:783 |
3752 | msgid "Authoritative DNS suffix to use (optional); default: zkey.eu" | 4001 | msgid "Authoritative DNS suffix to use (optional); default: zkey.eu" |
3753 | msgstr "" | 4002 | msgstr "" |
3754 | 4003 | ||
3755 | #: src/gns/gnunet-dns2gns.c:779 | 4004 | #: src/gns/gnunet-dns2gns.c:786 |
3756 | msgid "UDP port to listen on for inbound DNS requests; default: 53" | 4005 | msgid "UDP port to listen on for inbound DNS requests; default: 53" |
3757 | msgstr "" | 4006 | msgstr "" |
3758 | 4007 | ||
3759 | #: src/gns/gnunet-dns2gns.c:782 | 4008 | #: src/gns/gnunet-dns2gns.c:789 |
3760 | msgid "Public key of the GNS zone to use (overrides default)" | 4009 | msgid "Public key of the GNS zone to use (overrides default)" |
3761 | msgstr "" | 4010 | msgstr "" |
3762 | 4011 | ||
3763 | #: src/gns/gnunet-dns2gns.c:795 | 4012 | #: src/gns/gnunet-dns2gns.c:802 |
3764 | msgid "GNUnet DNS-to-GNS proxy (a DNS server)" | 4013 | msgid "GNUnet DNS-to-GNS proxy (a DNS server)" |
3765 | msgstr "" | 4014 | msgstr "" |
3766 | 4015 | ||
3767 | #: src/gns/gnunet-gns.c:227 | 4016 | #: src/gns/gnunet-gns.c:215 src/gns/plugin_rest_gns.c:334 |
4017 | #, c-format | ||
4018 | msgid "Invalid typename specified, assuming `ANY'\n" | ||
4019 | msgstr "" | ||
4020 | |||
4021 | #: src/gns/gnunet-gns.c:233 | ||
3768 | #, c-format | 4022 | #, c-format |
3769 | msgid "Please specify name to lookup!\n" | 4023 | msgid "Please specify name to lookup!\n" |
3770 | msgstr "" | 4024 | msgstr "" |
3771 | 4025 | ||
3772 | #: src/gns/gnunet-gns.c:308 | 4026 | #: src/gns/gnunet-gns.c:314 |
3773 | #, c-format | 4027 | #, c-format |
3774 | msgid "Ego for `%s' not found, cannot perform lookup.\n" | 4028 | msgid "Ego for `%s' not found, cannot perform lookup.\n" |
3775 | msgstr "" | 4029 | msgstr "" |
3776 | 4030 | ||
3777 | #: src/gns/gnunet-gns.c:347 src/gns/gnunet-gns-helper-service-w32.c:798 | 4031 | #: src/gns/gnunet-gns.c:353 src/gns/gnunet-gns-helper-service-w32.c:798 |
4032 | #: src/gns/plugin_rest_gns.c:459 | ||
3778 | #, c-format | 4033 | #, c-format |
3779 | msgid "Ego for `gns-master' not found, cannot perform lookup. Did you run gnunet-gns-import.sh?\n" | 4034 | msgid "" |
4035 | "Ego for `gns-master' not found, cannot perform lookup. Did you run gnunet-" | ||
4036 | "gns-import.sh?\n" | ||
3780 | msgstr "" | 4037 | msgstr "" |
3781 | 4038 | ||
3782 | #: src/gns/gnunet-gns.c:386 src/gns/gnunet-gns-helper-service-w32.c:828 | 4039 | #: src/gns/gnunet-gns.c:392 src/gns/gnunet-gns-helper-service-w32.c:828 |
3783 | #, c-format | 4040 | #, c-format |
3784 | msgid "Failed to connect to GNS\n" | 4041 | msgid "Failed to connect to GNS\n" |
3785 | msgstr "" | 4042 | msgstr "" |
3786 | 4043 | ||
3787 | #: src/gns/gnunet-gns.c:399 | 4044 | #: src/gns/gnunet-gns.c:405 |
3788 | #, c-format | 4045 | #, c-format |
3789 | msgid "Public key `%s' is not well-formed\n" | 4046 | msgid "Public key `%s' is not well-formed\n" |
3790 | msgstr "" | 4047 | msgstr "" |
3791 | 4048 | ||
3792 | #: src/gns/gnunet-gns.c:449 | 4049 | #: src/gns/gnunet-gns.c:455 |
3793 | msgid "Lookup a record for the given name" | 4050 | msgid "Lookup a record for the given name" |
3794 | msgstr "" | 4051 | msgstr "" |
3795 | 4052 | ||
3796 | #: src/gns/gnunet-gns.c:452 | 4053 | #: src/gns/gnunet-gns.c:458 |
3797 | msgid "Specify the type of the record to lookup" | 4054 | msgid "Specify the type of the record to lookup" |
3798 | msgstr "" | 4055 | msgstr "" |
3799 | 4056 | ||
3800 | #: src/gns/gnunet-gns.c:455 | 4057 | #: src/gns/gnunet-gns.c:461 |
3801 | msgid "Specify timeout for the lookup" | 4058 | msgid "Specify timeout for the lookup" |
3802 | msgstr "" | 4059 | msgstr "" |
3803 | 4060 | ||
3804 | #: src/gns/gnunet-gns.c:458 | 4061 | #: src/gns/gnunet-gns.c:464 |
3805 | msgid "No unneeded output" | 4062 | msgid "No unneeded output" |
3806 | msgstr "" | 4063 | msgstr "" |
3807 | 4064 | ||
3808 | #: src/gns/gnunet-gns.c:461 | 4065 | #: src/gns/gnunet-gns.c:467 |
3809 | msgid "Specify the public key of the zone to lookup the record in" | 4066 | msgid "Specify the public key of the zone to lookup the record in" |
3810 | msgstr "" | 4067 | msgstr "" |
3811 | 4068 | ||
3812 | #: src/gns/gnunet-gns.c:464 | 4069 | #: src/gns/gnunet-gns.c:470 |
3813 | msgid "Specify the name of the ego of the zone to lookup the record in" | 4070 | msgid "Specify the name of the ego of the zone to lookup the record in" |
3814 | msgstr "" | 4071 | msgstr "" |
3815 | 4072 | ||
3816 | #: src/gns/gnunet-gns.c:478 | 4073 | #: src/gns/gnunet-gns.c:484 |
3817 | msgid "GNUnet GNS resolver tool" | 4074 | msgid "GNUnet GNS resolver tool" |
3818 | msgstr "" | 4075 | msgstr "" |
3819 | 4076 | ||
3820 | #: src/gns/gnunet-gns-helper-service-w32.c:768 | 4077 | #: src/gns/gnunet-gns-helper-service-w32.c:768 |
3821 | #, c-format | 4078 | #, c-format |
3822 | msgid "Ego for `gns-short' not found. This is not really fatal, but i'll pretend that it is and refuse to perform a lookup. Did you run gnunet-gns-import.sh?\n" | 4079 | msgid "" |
4080 | "Ego for `gns-short' not found. This is not really fatal, but i'll pretend " | ||
4081 | "that it is and refuse to perform a lookup. Did you run gnunet-gns-import." | ||
4082 | "sh?\n" | ||
3823 | msgstr "" | 4083 | msgstr "" |
3824 | 4084 | ||
3825 | #: src/gns/gnunet-gns-helper-service-w32.c:838 | 4085 | #: src/gns/gnunet-gns-helper-service-w32.c:838 |
@@ -3831,139 +4091,143 @@ msgstr "" | |||
3831 | msgid "This program will import some GNS authorities into your GNS namestore." | 4091 | msgid "This program will import some GNS authorities into your GNS namestore." |
3832 | msgstr "" | 4092 | msgstr "" |
3833 | 4093 | ||
3834 | #: src/gns/gnunet-gns-proxy.c:105 src/hostlist/hostlist-client.c:469 | 4094 | #: src/gns/gnunet-gns-proxy.c:105 |
3835 | #: src/hostlist/hostlist-client.c:683 src/hostlist/hostlist-client.c:689 | 4095 | #: src/hostlist/gnunet-daemon-hostlist_client.c:524 |
3836 | #: src/hostlist/hostlist-client.c:741 src/hostlist/hostlist-client.c:750 | 4096 | #: src/hostlist/gnunet-daemon-hostlist_client.c:741 |
3837 | #: src/hostlist/hostlist-client.c:871 src/hostlist/hostlist-client.c:963 | 4097 | #: src/hostlist/gnunet-daemon-hostlist_client.c:747 |
3838 | #: src/hostlist/hostlist-client.c:968 | 4098 | #: src/hostlist/gnunet-daemon-hostlist_client.c:800 |
3839 | #: src/transport/plugin_transport_http_client.c:1062 | 4099 | #: src/hostlist/gnunet-daemon-hostlist_client.c:809 |
3840 | #: src/transport/plugin_transport_http_client.c:1077 | 4100 | #: src/hostlist/gnunet-daemon-hostlist_client.c:931 |
4101 | #: src/hostlist/gnunet-daemon-hostlist_client.c:1026 | ||
4102 | #: src/hostlist/gnunet-daemon-hostlist_client.c:1031 | ||
4103 | #: src/transport/plugin_transport_http_client.c:595 | ||
4104 | #: src/transport/plugin_transport_http_client.c:613 | ||
3841 | #, c-format | 4105 | #, c-format |
3842 | msgid "%s failed at %s:%d: `%s'\n" | 4106 | msgid "%s failed at %s:%d: `%s'\n" |
3843 | msgstr "" | 4107 | msgstr "" |
3844 | 4108 | ||
3845 | #: src/gns/gnunet-gns-proxy.c:833 | 4109 | #: src/gns/gnunet-gns-proxy.c:842 |
3846 | #, c-format | 4110 | #, c-format |
3847 | msgid "Unsupported CURL SSL backend %d\n" | 4111 | msgid "Unsupported CURL SSL backend %d\n" |
3848 | msgstr "" | 4112 | msgstr "" |
3849 | 4113 | ||
3850 | #: src/gns/gnunet-gns-proxy.c:856 | 4114 | #: src/gns/gnunet-gns-proxy.c:865 |
3851 | #, c-format | 4115 | #, c-format |
3852 | msgid "Failed to fetch CN from cert: %s\n" | 4116 | msgid "Failed to fetch CN from cert: %s\n" |
3853 | msgstr "" | 4117 | msgstr "" |
3854 | 4118 | ||
3855 | #: src/gns/gnunet-gns-proxy.c:879 | 4119 | #: src/gns/gnunet-gns-proxy.c:888 |
3856 | #, c-format | 4120 | #, c-format |
3857 | msgid "Failed to initialize DANE: %s\n" | 4121 | msgid "Failed to initialize DANE: %s\n" |
3858 | msgstr "" | 4122 | msgstr "" |
3859 | 4123 | ||
3860 | #: src/gns/gnunet-gns-proxy.c:892 | 4124 | #: src/gns/gnunet-gns-proxy.c:901 |
3861 | #, c-format | 4125 | #, c-format |
3862 | msgid "Failed to parse DANE record: %s\n" | 4126 | msgid "Failed to parse DANE record: %s\n" |
3863 | msgstr "" | 4127 | msgstr "" |
3864 | 4128 | ||
3865 | #: src/gns/gnunet-gns-proxy.c:907 | 4129 | #: src/gns/gnunet-gns-proxy.c:916 |
3866 | #, c-format | 4130 | #, c-format |
3867 | msgid "Failed to verify TLS connection using DANE: %s\n" | 4131 | msgid "Failed to verify TLS connection using DANE: %s\n" |
3868 | msgstr "" | 4132 | msgstr "" |
3869 | 4133 | ||
3870 | #: src/gns/gnunet-gns-proxy.c:917 | 4134 | #: src/gns/gnunet-gns-proxy.c:926 |
3871 | #, c-format | 4135 | #, c-format |
3872 | msgid "Failed DANE verification failed with GnuTLS verify status code: %u\n" | 4136 | msgid "Failed DANE verification failed with GnuTLS verify status code: %u\n" |
3873 | msgstr "" | 4137 | msgstr "" |
3874 | 4138 | ||
3875 | #: src/gns/gnunet-gns-proxy.c:941 | 4139 | #: src/gns/gnunet-gns-proxy.c:950 |
3876 | #, c-format | 4140 | #, c-format |
3877 | msgid "SSL certificate subject name (%s) does not match `%s'\n" | 4141 | msgid "SSL certificate subject name (%s) does not match `%s'\n" |
3878 | msgstr "" | 4142 | msgstr "" |
3879 | 4143 | ||
3880 | #: src/gns/gnunet-gns-proxy.c:1086 | 4144 | #: src/gns/gnunet-gns-proxy.c:1095 |
3881 | #, c-format | 4145 | #, c-format |
3882 | msgid "Cookie domain `%s' supplied by server is invalid\n" | 4146 | msgid "Cookie domain `%s' supplied by server is invalid\n" |
3883 | msgstr "" | 4147 | msgstr "" |
3884 | 4148 | ||
3885 | #: src/gns/gnunet-gns-proxy.c:1602 | 4149 | #: src/gns/gnunet-gns-proxy.c:1630 |
3886 | #, c-format | 4150 | #, c-format |
3887 | msgid "Unsupported HTTP method `%s'\n" | 4151 | msgid "Unsupported HTTP method `%s'\n" |
3888 | msgstr "" | 4152 | msgstr "" |
3889 | 4153 | ||
3890 | #: src/gns/gnunet-gns-proxy.c:1973 | 4154 | #: src/gns/gnunet-gns-proxy.c:2002 |
3891 | #, c-format | 4155 | #, c-format |
3892 | msgid "Unable to import private key from file `%s'\n" | 4156 | msgid "Unable to import private key from file `%s'\n" |
3893 | msgstr "" | 4157 | msgstr "" |
3894 | 4158 | ||
3895 | #: src/gns/gnunet-gns-proxy.c:2003 | 4159 | #: src/gns/gnunet-gns-proxy.c:2032 |
3896 | #, c-format | 4160 | #, c-format |
3897 | msgid "Unable to import certificate %s\n" | 4161 | msgid "Unable to import certificate %s\n" |
3898 | msgstr "" | 4162 | msgstr "" |
3899 | 4163 | ||
3900 | #: src/gns/gnunet-gns-proxy.c:2177 | 4164 | #: src/gns/gnunet-gns-proxy.c:2206 |
3901 | #, c-format | 4165 | #, c-format |
3902 | msgid "Failed to start HTTPS server for `%s'\n" | 4166 | msgid "Failed to start HTTPS server for `%s'\n" |
3903 | msgstr "" | 4167 | msgstr "" |
3904 | 4168 | ||
3905 | #: src/gns/gnunet-gns-proxy.c:2196 | 4169 | #: src/gns/gnunet-gns-proxy.c:2225 src/rest/gnunet-rest-server.c:529 |
3906 | msgid "Failed to pass client to MHD\n" | 4170 | msgid "Failed to pass client to MHD\n" |
3907 | msgstr "" | 4171 | msgstr "" |
3908 | 4172 | ||
3909 | #: src/gns/gnunet-gns-proxy.c:2504 | 4173 | #: src/gns/gnunet-gns-proxy.c:2547 |
3910 | #, c-format | 4174 | #, c-format |
3911 | msgid "Unsupported socks version %d\n" | 4175 | msgid "Unsupported socks version %d\n" |
3912 | msgstr "" | 4176 | msgstr "" |
3913 | 4177 | ||
3914 | #: src/gns/gnunet-gns-proxy.c:2533 | 4178 | #: src/gns/gnunet-gns-proxy.c:2576 |
3915 | #, c-format | 4179 | #, c-format |
3916 | msgid "Unsupported socks command %d\n" | 4180 | msgid "Unsupported socks command %d\n" |
3917 | msgstr "" | 4181 | msgstr "" |
3918 | 4182 | ||
3919 | #: src/gns/gnunet-gns-proxy.c:2551 src/gns/gnunet-gns-proxy.c:2580 | 4183 | #: src/gns/gnunet-gns-proxy.c:2594 src/gns/gnunet-gns-proxy.c:2623 |
3920 | msgid "SSL connection to plain IPv4 address requested\n" | 4184 | msgid "SSL connection to plain IPv4 address requested\n" |
3921 | msgstr "" | 4185 | msgstr "" |
3922 | 4186 | ||
3923 | #: src/gns/gnunet-gns-proxy.c:2631 | 4187 | #: src/gns/gnunet-gns-proxy.c:2674 |
3924 | #, c-format | 4188 | #, c-format |
3925 | msgid "Unsupported socks address type %d\n" | 4189 | msgid "Unsupported socks address type %d\n" |
3926 | msgstr "" | 4190 | msgstr "" |
3927 | 4191 | ||
3928 | #: src/gns/gnunet-gns-proxy.c:2970 | 4192 | #: src/gns/gnunet-gns-proxy.c:3013 |
3929 | msgid "No ego configured for `shorten-zone`\n" | 4193 | msgid "No ego configured for `shorten-zone`\n" |
3930 | msgstr "" | 4194 | msgstr "" |
3931 | 4195 | ||
3932 | #: src/gns/gnunet-gns-proxy.c:3010 | 4196 | #: src/gns/gnunet-gns-proxy.c:3053 |
3933 | #, c-format | 4197 | #, c-format |
3934 | msgid "No ego configured for `%s`\n" | 4198 | msgid "No ego configured for `%s`\n" |
3935 | msgstr "" | 4199 | msgstr "" |
3936 | 4200 | ||
3937 | #: src/gns/gnunet-gns-proxy.c:3072 | 4201 | #: src/gns/gnunet-gns-proxy.c:3115 |
3938 | #, c-format | 4202 | #, c-format |
3939 | msgid "Failed to load SSL/TLS key and certificate from `%s'\n" | 4203 | msgid "Failed to load SSL/TLS key and certificate from `%s'\n" |
3940 | msgstr "" | 4204 | msgstr "" |
3941 | 4205 | ||
3942 | #: src/gns/gnunet-gns-proxy.c:3113 | 4206 | #: src/gns/gnunet-gns-proxy.c:3156 |
3943 | msgid "listen on specified port (default: 7777)" | 4207 | msgid "listen on specified port (default: 7777)" |
3944 | msgstr "" | 4208 | msgstr "" |
3945 | 4209 | ||
3946 | #: src/gns/gnunet-gns-proxy.c:3116 | 4210 | #: src/gns/gnunet-gns-proxy.c:3159 |
3947 | msgid "pem file to use as CA" | 4211 | msgid "pem file to use as CA" |
3948 | msgstr "" | 4212 | msgstr "" |
3949 | 4213 | ||
3950 | #: src/gns/gnunet-gns-proxy.c:3135 | 4214 | #: src/gns/gnunet-gns-proxy.c:3178 |
3951 | msgid "GNUnet GNS proxy" | 4215 | msgid "GNUnet GNS proxy" |
3952 | msgstr "" | 4216 | msgstr "" |
3953 | 4217 | ||
3954 | #: src/gns/gnunet-service-gns.c:862 | 4218 | #: src/gns/gnunet-service-gns.c:864 |
3955 | msgid "Failed to connect to the namestore!\n" | 4219 | msgid "Failed to connect to the namestore!\n" |
3956 | msgstr "" | 4220 | msgstr "" |
3957 | 4221 | ||
3958 | #: src/gns/gnunet-service-gns.c:870 | 4222 | #: src/gns/gnunet-service-gns.c:872 |
3959 | msgid "Failed to connect to the namecache!\n" | 4223 | msgid "Failed to connect to the namecache!\n" |
3960 | msgstr "" | 4224 | msgstr "" |
3961 | 4225 | ||
3962 | #: src/gns/gnunet-service-gns.c:903 | 4226 | #: src/gns/gnunet-service-gns.c:905 |
3963 | msgid "Could not connect to DHT!\n" | 4227 | msgid "Could not connect to DHT!\n" |
3964 | msgstr "" | 4228 | msgstr "" |
3965 | 4229 | ||
3966 | #: src/gns/gnunet-service-gns.c:919 | 4230 | #: src/gns/gnunet-service-gns.c:921 |
3967 | msgid "valid public key required" | 4231 | msgid "valid public key required" |
3968 | msgstr "" | 4232 | msgstr "" |
3969 | 4233 | ||
@@ -3975,435 +4239,502 @@ msgstr "" | |||
3975 | msgid "Failed to connect to the DNS service!\n" | 4239 | msgid "Failed to connect to the DNS service!\n" |
3976 | msgstr "" | 4240 | msgstr "" |
3977 | 4241 | ||
3978 | #: src/gns/gnunet-service-gns_resolver.c:816 | 4242 | #: src/gns/gnunet-service-gns_resolver.c:650 |
4243 | #, c-format | ||
4244 | msgid "Protocol `%s' unknown, skipping labels.\n" | ||
4245 | msgstr "" | ||
4246 | |||
4247 | #: src/gns/gnunet-service-gns_resolver.c:661 | ||
4248 | #, c-format | ||
4249 | msgid "Service `%s' unknown for protocol `%s', skipping labels.\n" | ||
4250 | msgstr "" | ||
4251 | |||
4252 | #: src/gns/gnunet-service-gns_resolver.c:854 | ||
3979 | msgid "Failed to parse DNS response\n" | 4253 | msgid "Failed to parse DNS response\n" |
3980 | msgstr "" | 4254 | msgstr "" |
3981 | 4255 | ||
3982 | #: src/gns/gnunet-service-gns_resolver.c:958 | 4256 | #: src/gns/gnunet-service-gns_resolver.c:996 |
3983 | #, c-format | 4257 | #, c-format |
3984 | msgid "Skipping record of unsupported type %d\n" | 4258 | msgid "Skipping record of unsupported type %d\n" |
3985 | msgstr "" | 4259 | msgstr "" |
3986 | 4260 | ||
3987 | #: src/gns/gnunet-service-gns_resolver.c:1317 | 4261 | #: src/gns/gnunet-service-gns_resolver.c:1356 |
3988 | #, c-format | 4262 | #, c-format |
3989 | msgid "GNS lookup resulted in DNS name that is too long (`%s')\n" | 4263 | msgid "GNS lookup resulted in DNS name that is too long (`%s')\n" |
3990 | msgstr "" | 4264 | msgstr "" |
3991 | 4265 | ||
3992 | #: src/gns/gnunet-service-gns_resolver.c:1817 | 4266 | #: src/gns/gnunet-service-gns_resolver.c:1891 |
3993 | msgid "GNS lookup recursion failed (no delegation record found)\n" | 4267 | msgid "GNS lookup recursion failed (no delegation record found)\n" |
3994 | msgstr "" | 4268 | msgstr "" |
3995 | 4269 | ||
3996 | #: src/gns/gnunet-service-gns_resolver.c:1841 | 4270 | #: src/gns/gnunet-service-gns_resolver.c:1915 |
3997 | #, c-format | 4271 | #, c-format |
3998 | msgid "Failed to cache GNS resolution: %s\n" | 4272 | msgid "Failed to cache GNS resolution: %s\n" |
3999 | msgstr "" | 4273 | msgstr "" |
4000 | 4274 | ||
4001 | #: src/gns/gnunet-service-gns_resolver.c:2123 | 4275 | #: src/gns/gnunet-service-gns_resolver.c:2197 |
4002 | #, c-format | 4276 | #, c-format |
4003 | msgid "Zone %s was revoked, resolution fails\n" | 4277 | msgid "Zone %s was revoked, resolution fails\n" |
4004 | msgstr "" | 4278 | msgstr "" |
4005 | 4279 | ||
4006 | #: src/gns/gnunet-service-gns_resolver.c:2272 | 4280 | #: src/gns/gnunet-service-gns_resolver.c:2346 |
4007 | #, c-format | 4281 | #, c-format |
4008 | msgid "Hostname `%s' is not well-formed, resolution fails\n" | 4282 | msgid "Hostname `%s' is not well-formed, resolution fails\n" |
4009 | msgstr "" | 4283 | msgstr "" |
4010 | 4284 | ||
4011 | #: src/gns/plugin_gnsrecord_gns.c:151 | 4285 | #: src/gns/plugin_gnsrecord_gns.c:172 |
4012 | #, c-format | 4286 | #, c-format |
4013 | msgid "Unable to parse PKEY record `%s'\n" | 4287 | msgid "Unable to parse PKEY record `%s'\n" |
4014 | msgstr "" | 4288 | msgstr "" |
4015 | 4289 | ||
4016 | #: src/gns/plugin_gnsrecord_gns.c:180 | 4290 | #: src/gns/plugin_gnsrecord_gns.c:201 |
4017 | #, c-format | 4291 | #, c-format |
4018 | msgid "Unable to parse GNS2DNS record `%s'\n" | 4292 | msgid "Unable to parse GNS2DNS record `%s'\n" |
4019 | msgstr "" | 4293 | msgstr "" |
4020 | 4294 | ||
4021 | #: src/gns/plugin_gnsrecord_gns.c:201 | 4295 | #: src/gns/plugin_gnsrecord_gns.c:222 |
4022 | #, c-format | 4296 | #, c-format |
4023 | msgid "Failed to serialize GNS2DNS record with value `%s'\n" | 4297 | msgid "Failed to serialize GNS2DNS record with value `%s'\n" |
4024 | msgstr "" | 4298 | msgstr "" |
4025 | 4299 | ||
4026 | #: src/gns/plugin_gnsrecord_gns.c:217 | 4300 | #: src/gns/plugin_gnsrecord_gns.c:245 |
4027 | #, c-format | 4301 | #, c-format |
4028 | msgid "Unable to parse VPN record string `%s'\n" | 4302 | msgid "Unable to parse VPN record string `%s'\n" |
4029 | msgstr "" | 4303 | msgstr "" |
4030 | 4304 | ||
4031 | #: src/gnsrecord/plugin_gnsrecord_dns.c:293 | 4305 | #: src/gns/plugin_gnsrecord_gns.c:280 |
4306 | #, c-format | ||
4307 | msgid "Unable to parse BOX record string `%s'\n" | ||
4308 | msgstr "" | ||
4309 | |||
4310 | #: src/gns/plugin_rest_gns.c:422 | ||
4311 | msgid "Ego for not found, cannot perform lookup.\n" | ||
4312 | msgstr "" | ||
4313 | |||
4314 | #: src/gns/plugin_rest_gns.c:652 | ||
4315 | msgid "GNS REST API initialized\n" | ||
4316 | msgstr "" | ||
4317 | |||
4318 | #: src/gnsrecord/plugin_gnsrecord_dns.c:291 | ||
4032 | #, c-format | 4319 | #, c-format |
4033 | msgid "Unable to parse IPv4 address `%s'\n" | 4320 | msgid "Unable to parse IPv4 address `%s'\n" |
4034 | msgstr "" | 4321 | msgstr "" |
4035 | 4322 | ||
4036 | #: src/gnsrecord/plugin_gnsrecord_dns.c:314 | 4323 | #: src/gnsrecord/plugin_gnsrecord_dns.c:312 |
4037 | #, c-format | 4324 | #, c-format |
4038 | msgid "Failed to serialize NS record with value `%s'\n" | 4325 | msgid "Failed to serialize NS record with value `%s'\n" |
4039 | msgstr "" | 4326 | msgstr "" |
4040 | 4327 | ||
4041 | #: src/gnsrecord/plugin_gnsrecord_dns.c:336 | 4328 | #: src/gnsrecord/plugin_gnsrecord_dns.c:334 |
4042 | #, c-format | 4329 | #, c-format |
4043 | msgid "Failed to serialize CNAME record with value `%s'\n" | 4330 | msgid "Failed to serialize CNAME record with value `%s'\n" |
4044 | msgstr "" | 4331 | msgstr "" |
4045 | 4332 | ||
4046 | #: src/gnsrecord/plugin_gnsrecord_dns.c:420 | 4333 | #: src/gnsrecord/plugin_gnsrecord_dns.c:418 |
4047 | #, c-format | 4334 | #, c-format |
4048 | msgid "Failed to serialize CERT record with %u bytes\n" | 4335 | msgid "Failed to serialize CERT record with %u bytes\n" |
4049 | msgstr "" | 4336 | msgstr "" |
4050 | 4337 | ||
4051 | #: src/gnsrecord/plugin_gnsrecord_dns.c:452 | 4338 | #: src/gnsrecord/plugin_gnsrecord_dns.c:455 |
4052 | #, c-format | 4339 | #, c-format |
4053 | msgid "Unable to parse SOA record `%s'\n" | 4340 | msgid "Unable to parse SOA record `%s'\n" |
4054 | msgstr "" | 4341 | msgstr "" |
4055 | 4342 | ||
4056 | #: src/gnsrecord/plugin_gnsrecord_dns.c:471 | 4343 | #: src/gnsrecord/plugin_gnsrecord_dns.c:474 |
4057 | #, c-format | 4344 | #, c-format |
4058 | msgid "Failed to serialize SOA record with mname `%s' and rname `%s'\n" | 4345 | msgid "Failed to serialize SOA record with mname `%s' and rname `%s'\n" |
4059 | msgstr "" | 4346 | msgstr "" |
4060 | 4347 | ||
4061 | #: src/gnsrecord/plugin_gnsrecord_dns.c:494 | 4348 | #: src/gnsrecord/plugin_gnsrecord_dns.c:497 |
4062 | #, c-format | 4349 | #, c-format |
4063 | msgid "Failed to serialize PTR record with value `%s'\n" | 4350 | msgid "Failed to serialize PTR record with value `%s'\n" |
4064 | msgstr "" | 4351 | msgstr "" |
4065 | 4352 | ||
4066 | #: src/gnsrecord/plugin_gnsrecord_dns.c:514 | 4353 | #: src/gnsrecord/plugin_gnsrecord_dns.c:520 |
4067 | #, c-format | 4354 | #, c-format |
4068 | msgid "Unable to parse MX record `%s'\n" | 4355 | msgid "Unable to parse MX record `%s'\n" |
4069 | msgstr "" | 4356 | msgstr "" |
4070 | 4357 | ||
4071 | #: src/gnsrecord/plugin_gnsrecord_dns.c:529 | 4358 | #: src/gnsrecord/plugin_gnsrecord_dns.c:535 |
4072 | #, c-format | 4359 | #, c-format |
4073 | msgid "Failed to serialize MX record with hostname `%s'\n" | 4360 | msgid "Failed to serialize MX record with hostname `%s'\n" |
4074 | msgstr "" | 4361 | msgstr "" |
4075 | 4362 | ||
4076 | #: src/gnsrecord/plugin_gnsrecord_dns.c:549 | 4363 | #: src/gnsrecord/plugin_gnsrecord_dns.c:562 |
4364 | #, c-format | ||
4365 | msgid "Unable to parse SRV record `%s'\n" | ||
4366 | msgstr "" | ||
4367 | |||
4368 | #: src/gnsrecord/plugin_gnsrecord_dns.c:578 | ||
4369 | #, c-format | ||
4370 | msgid "Failed to serialize SRV record with target `%s'\n" | ||
4371 | msgstr "" | ||
4372 | |||
4373 | #: src/gnsrecord/plugin_gnsrecord_dns.c:595 | ||
4077 | #, c-format | 4374 | #, c-format |
4078 | msgid "Unable to parse IPv6 address `%s'\n" | 4375 | msgid "Unable to parse IPv6 address `%s'\n" |
4079 | msgstr "" | 4376 | msgstr "" |
4080 | 4377 | ||
4081 | #: src/gnsrecord/plugin_gnsrecord_dns.c:567 | 4378 | #: src/gnsrecord/plugin_gnsrecord_dns.c:619 |
4379 | #: src/gnsrecord/plugin_gnsrecord_dns.c:635 | ||
4082 | #, c-format | 4380 | #, c-format |
4083 | msgid "Unable to parse TLSA record string `%s'\n" | 4381 | msgid "Unable to parse TLSA record string `%s'\n" |
4084 | msgstr "" | 4382 | msgstr "" |
4085 | 4383 | ||
4086 | #: src/hello/gnunet-hello.c:123 | 4384 | #: src/hello/gnunet-hello.c:126 |
4087 | msgid "Call with name of HELLO file to modify.\n" | 4385 | msgid "Call with name of HELLO file to modify.\n" |
4088 | msgstr "" | 4386 | msgstr "" |
4089 | 4387 | ||
4090 | #: src/hello/gnunet-hello.c:129 | 4388 | #: src/hello/gnunet-hello.c:132 |
4091 | #, c-format | 4389 | #, c-format |
4092 | msgid "Error accessing file `%s': %s\n" | 4390 | msgid "Error accessing file `%s': %s\n" |
4093 | msgstr "" | 4391 | msgstr "" |
4094 | 4392 | ||
4095 | #: src/hello/gnunet-hello.c:137 | 4393 | #: src/hello/gnunet-hello.c:140 |
4096 | #, c-format | 4394 | #, c-format |
4097 | msgid "File `%s' is too big to be a HELLO\n" | 4395 | msgid "File `%s' is too big to be a HELLO\n" |
4098 | msgstr "" | 4396 | msgstr "" |
4099 | 4397 | ||
4100 | #: src/hello/gnunet-hello.c:144 | 4398 | #: src/hello/gnunet-hello.c:147 |
4101 | #, c-format | 4399 | #, c-format |
4102 | msgid "File `%s' is too small to be a HELLO\n" | 4400 | msgid "File `%s' is too small to be a HELLO\n" |
4103 | msgstr "" | 4401 | msgstr "" |
4104 | 4402 | ||
4105 | #: src/hello/gnunet-hello.c:154 src/hello/gnunet-hello.c:183 | 4403 | #: src/hello/gnunet-hello.c:157 src/hello/gnunet-hello.c:196 |
4106 | #, c-format | 4404 | #, c-format |
4107 | msgid "Error opening file `%s': %s\n" | 4405 | msgid "Error opening file `%s': %s\n" |
4108 | msgstr "" | 4406 | msgstr "" |
4109 | 4407 | ||
4110 | #: src/hello/gnunet-hello.c:170 | 4408 | #: src/hello/gnunet-hello.c:173 |
4111 | #, c-format | 4409 | #, c-format |
4112 | msgid "Did not find well-formed HELLO in file `%s'\n" | 4410 | msgid "Did not find well-formed HELLO in file `%s'\n" |
4113 | msgstr "" | 4411 | msgstr "" |
4114 | 4412 | ||
4115 | #: src/hello/gnunet-hello.c:195 | 4413 | #: src/hello/gnunet-hello.c:208 |
4116 | #, c-format | 4414 | #, c-format |
4117 | msgid "Error writing HELLO to file `%s': %s\n" | 4415 | msgid "Error writing HELLO to file `%s': %s\n" |
4118 | msgstr "" | 4416 | msgstr "" |
4119 | 4417 | ||
4120 | #: src/hello/gnunet-hello.c:203 | 4418 | #: src/hello/gnunet-hello.c:216 |
4121 | #, c-format | 4419 | #, c-format |
4122 | msgid "Modified %u addresses \n" | 4420 | msgid "Modified %u addresses \n" |
4123 | msgstr "" | 4421 | msgstr "" |
4124 | 4422 | ||
4125 | #: src/hello/hello.c:944 | 4423 | #: src/hello/hello.c:955 |
4126 | msgid "Failed to parse HELLO message: missing expiration time\n" | 4424 | msgid "Failed to parse HELLO message: missing expiration time\n" |
4127 | msgstr "" | 4425 | msgstr "" |
4128 | 4426 | ||
4129 | #: src/hello/hello.c:953 | 4427 | #: src/hello/hello.c:964 |
4130 | msgid "Failed to parse HELLO message: invalid expiration time\n" | 4428 | msgid "Failed to parse HELLO message: invalid expiration time\n" |
4131 | msgstr "" | 4429 | msgstr "" |
4132 | 4430 | ||
4133 | #: src/hello/hello.c:963 | 4431 | #: src/hello/hello.c:974 |
4134 | msgid "Failed to parse HELLO message: malformed\n" | 4432 | msgid "Failed to parse HELLO message: malformed\n" |
4135 | msgstr "" | 4433 | msgstr "" |
4136 | 4434 | ||
4137 | #: src/hello/hello.c:973 | 4435 | #: src/hello/hello.c:984 |
4138 | msgid "Failed to parse HELLO message: missing transport plugin\n" | 4436 | msgid "Failed to parse HELLO message: missing transport plugin\n" |
4139 | msgstr "" | 4437 | msgstr "" |
4140 | 4438 | ||
4141 | #: src/hello/hello.c:990 | 4439 | #: src/hello/hello.c:1002 |
4142 | #, c-format | 4440 | #, c-format |
4143 | msgid "Plugin `%s' not found\n" | 4441 | msgid "Plugin `%s' not found, skipping address\n" |
4144 | msgstr "" | 4442 | msgstr "" |
4145 | 4443 | ||
4146 | #: src/hello/hello.c:999 | 4444 | #: src/hello/hello.c:1010 |
4147 | #, c-format | 4445 | #, c-format |
4148 | msgid "Plugin `%s' does not support URIs yet\n" | 4446 | msgid "Plugin `%s' does not support URIs yet\n" |
4149 | msgstr "" | 4447 | msgstr "" |
4150 | 4448 | ||
4151 | #: src/hello/hello.c:1018 | 4449 | #: src/hello/hello.c:1025 |
4152 | #, c-format | 4450 | #, c-format |
4153 | msgid "Failed to parse `%s' as an address for plugin `%s'\n" | 4451 | msgid "Failed to parse `%s' as an address for plugin `%s'\n" |
4154 | msgstr "" | 4452 | msgstr "" |
4155 | 4453 | ||
4156 | #: src/hostlist/gnunet-daemon-hostlist.c:259 | 4454 | #: src/hello/hello.c:1098 |
4157 | msgid "None of the functions for the hostlist daemon were enabled. I have no reason to run!\n" | 4455 | #, c-format |
4456 | msgid "HELLO URI contained %u addresses, added %u addresses\n" | ||
4158 | msgstr "" | 4457 | msgstr "" |
4159 | 4458 | ||
4160 | #: src/hostlist/gnunet-daemon-hostlist.c:308 | 4459 | #: src/hostlist/gnunet-daemon-hostlist.c:274 |
4460 | msgid "" | ||
4461 | "None of the functions for the hostlist daemon were enabled. I have no " | ||
4462 | "reason to run!\n" | ||
4463 | msgstr "" | ||
4464 | |||
4465 | #: src/hostlist/gnunet-daemon-hostlist.c:331 | ||
4161 | msgid "advertise our hostlist to other peers" | 4466 | msgid "advertise our hostlist to other peers" |
4162 | msgstr "" | 4467 | msgstr "" |
4163 | 4468 | ||
4164 | #: src/hostlist/gnunet-daemon-hostlist.c:313 | 4469 | #: src/hostlist/gnunet-daemon-hostlist.c:336 |
4165 | msgid "bootstrap using hostlists (it is highly recommended that you always use this option)" | 4470 | msgid "" |
4471 | "bootstrap using hostlists (it is highly recommended that you always use this " | ||
4472 | "option)" | ||
4166 | msgstr "" | 4473 | msgstr "" |
4167 | 4474 | ||
4168 | #: src/hostlist/gnunet-daemon-hostlist.c:316 | 4475 | #: src/hostlist/gnunet-daemon-hostlist.c:339 |
4169 | msgid "enable learning about hostlist servers from other peers" | 4476 | msgid "enable learning about hostlist servers from other peers" |
4170 | msgstr "" | 4477 | msgstr "" |
4171 | 4478 | ||
4172 | #: src/hostlist/gnunet-daemon-hostlist.c:320 | 4479 | #: src/hostlist/gnunet-daemon-hostlist.c:343 |
4173 | msgid "provide a hostlist server" | 4480 | msgid "provide a hostlist server" |
4174 | msgstr "" | 4481 | msgstr "" |
4175 | 4482 | ||
4176 | #: src/hostlist/gnunet-daemon-hostlist.c:335 | 4483 | #: src/hostlist/gnunet-daemon-hostlist.c:359 |
4177 | msgid "GNUnet hostlist server and client" | 4484 | msgid "GNUnet hostlist server and client" |
4178 | msgstr "" | 4485 | msgstr "" |
4179 | 4486 | ||
4180 | #: src/hostlist/hostlist-client.c:288 | 4487 | #: src/hostlist/gnunet-daemon-hostlist_client.c:343 |
4181 | msgid "# bytes downloaded from hostlist servers" | 4488 | msgid "# bytes downloaded from hostlist servers" |
4182 | msgstr "" | 4489 | msgstr "" |
4183 | 4490 | ||
4184 | #: src/hostlist/hostlist-client.c:309 src/hostlist/hostlist-client.c:339 | 4491 | #: src/hostlist/gnunet-daemon-hostlist_client.c:364 |
4492 | #: src/hostlist/gnunet-daemon-hostlist_client.c:394 | ||
4185 | msgid "# invalid HELLOs downloaded from hostlist servers" | 4493 | msgid "# invalid HELLOs downloaded from hostlist servers" |
4186 | msgstr "" | 4494 | msgstr "" |
4187 | 4495 | ||
4188 | #: src/hostlist/hostlist-client.c:312 src/hostlist/hostlist-client.c:342 | 4496 | #: src/hostlist/gnunet-daemon-hostlist_client.c:367 |
4497 | #: src/hostlist/gnunet-daemon-hostlist_client.c:397 | ||
4189 | #, c-format | 4498 | #, c-format |
4190 | msgid "Invalid `%s' message received from hostlist at `%s'\n" | 4499 | msgid "Invalid `%s' message received from hostlist at `%s'\n" |
4191 | msgstr "" | 4500 | msgstr "" |
4192 | 4501 | ||
4193 | #: src/hostlist/hostlist-client.c:330 | 4502 | #: src/hostlist/gnunet-daemon-hostlist_client.c:385 |
4194 | msgid "# valid HELLOs downloaded from hostlist servers" | 4503 | msgid "# valid HELLOs downloaded from hostlist servers" |
4195 | msgstr "" | 4504 | msgstr "" |
4196 | 4505 | ||
4197 | #: src/hostlist/hostlist-client.c:592 src/hostlist/hostlist-client.c:1333 | 4506 | #: src/hostlist/gnunet-daemon-hostlist_client.c:650 |
4507 | #: src/hostlist/gnunet-daemon-hostlist_client.c:1402 | ||
4198 | msgid "# advertised hostlist URIs" | 4508 | msgid "# advertised hostlist URIs" |
4199 | msgstr "" | 4509 | msgstr "" |
4200 | 4510 | ||
4201 | #: src/hostlist/hostlist-client.c:622 | 4511 | #: src/hostlist/gnunet-daemon-hostlist_client.c:680 |
4202 | #, c-format | 4512 | #, c-format |
4203 | msgid "# advertised URI `%s' downloaded" | 4513 | msgid "# advertised URI `%s' downloaded" |
4204 | msgstr "" | 4514 | msgstr "" |
4205 | 4515 | ||
4206 | #: src/hostlist/hostlist-client.c:664 | 4516 | #: src/hostlist/gnunet-daemon-hostlist_client.c:722 |
4207 | #, c-format | 4517 | #, c-format |
4208 | msgid "Advertised hostlist with URI `%s' could not be downloaded. Advertised URI gets dismissed.\n" | 4518 | msgid "" |
4519 | "Advertised hostlist with URI `%s' could not be downloaded. Advertised URI " | ||
4520 | "gets dismissed.\n" | ||
4209 | msgstr "" | 4521 | msgstr "" |
4210 | 4522 | ||
4211 | #: src/hostlist/hostlist-client.c:802 | 4523 | #: src/hostlist/gnunet-daemon-hostlist_client.c:862 |
4212 | #, c-format | 4524 | #, c-format |
4213 | msgid "Timeout trying to download hostlist from `%s'\n" | 4525 | msgid "Timeout trying to download hostlist from `%s'\n" |
4214 | msgstr "" | 4526 | msgstr "" |
4215 | 4527 | ||
4216 | #: src/hostlist/hostlist-client.c:816 | 4528 | #: src/hostlist/gnunet-daemon-hostlist_client.c:876 |
4217 | #, c-format | 4529 | #, c-format |
4218 | msgid "Download limit of %u bytes exceeded, stopping download\n" | 4530 | msgid "Download limit of %u bytes exceeded, stopping download\n" |
4219 | msgstr "" | 4531 | msgstr "" |
4220 | 4532 | ||
4221 | #: src/hostlist/hostlist-client.c:836 | 4533 | #: src/hostlist/gnunet-daemon-hostlist_client.c:896 |
4222 | #, c-format | 4534 | #, c-format |
4223 | msgid "Download of hostlist from `%s' failed: `%s'\n" | 4535 | msgid "Download of hostlist from `%s' failed: `%s'\n" |
4224 | msgstr "" | 4536 | msgstr "" |
4225 | 4537 | ||
4226 | #: src/hostlist/hostlist-client.c:842 | 4538 | #: src/hostlist/gnunet-daemon-hostlist_client.c:902 |
4227 | #, c-format | 4539 | #, c-format |
4228 | msgid "Download of hostlist `%s' completed.\n" | 4540 | msgid "Download of hostlist `%s' completed.\n" |
4229 | msgstr "" | 4541 | msgstr "" |
4230 | 4542 | ||
4231 | #: src/hostlist/hostlist-client.c:850 | 4543 | #: src/hostlist/gnunet-daemon-hostlist_client.c:910 |
4232 | #, c-format | 4544 | #, c-format |
4233 | msgid "Adding successfully tested hostlist `%s' datastore.\n" | 4545 | msgid "Adding successfully tested hostlist `%s' datastore.\n" |
4234 | msgstr "" | 4546 | msgstr "" |
4235 | 4547 | ||
4236 | #: src/hostlist/hostlist-client.c:903 | 4548 | #: src/hostlist/gnunet-daemon-hostlist_client.c:963 |
4237 | #, c-format | 4549 | #, c-format |
4238 | msgid "Bootstrapping using hostlist at `%s'.\n" | 4550 | msgid "Bootstrapping using hostlist at `%s'.\n" |
4239 | msgstr "" | 4551 | msgstr "" |
4240 | 4552 | ||
4241 | #: src/hostlist/hostlist-client.c:911 | 4553 | #: src/hostlist/gnunet-daemon-hostlist_client.c:971 |
4242 | msgid "# hostlist downloads initiated" | 4554 | msgid "# hostlist downloads initiated" |
4243 | msgstr "" | 4555 | msgstr "" |
4244 | 4556 | ||
4245 | #: src/hostlist/hostlist-client.c:1040 src/hostlist/hostlist-client.c:1506 | 4557 | #: src/hostlist/gnunet-daemon-hostlist_client.c:1103 |
4558 | #: src/hostlist/gnunet-daemon-hostlist_client.c:1655 | ||
4246 | msgid "# milliseconds between hostlist downloads" | 4559 | msgid "# milliseconds between hostlist downloads" |
4247 | msgstr "" | 4560 | msgstr "" |
4248 | 4561 | ||
4249 | #: src/hostlist/hostlist-client.c:1049 | 4562 | #: src/hostlist/gnunet-daemon-hostlist_client.c:1112 |
4250 | #, c-format | 4563 | #, c-format |
4251 | msgid "Have %u/%u connections. Will consider downloading hostlist in %s\n" | 4564 | msgid "Have %u/%u connections. Will consider downloading hostlist in %s\n" |
4252 | msgstr "" | 4565 | msgstr "" |
4253 | 4566 | ||
4254 | #: src/hostlist/hostlist-client.c:1109 src/hostlist/hostlist-client.c:1125 | 4567 | #: src/hostlist/gnunet-daemon-hostlist_client.c:1172 |
4568 | #: src/hostlist/gnunet-daemon-hostlist_client.c:1188 | ||
4255 | msgid "# active connections" | 4569 | msgid "# active connections" |
4256 | msgstr "" | 4570 | msgstr "" |
4257 | 4571 | ||
4258 | #: src/hostlist/hostlist-client.c:1280 | 4572 | #: src/hostlist/gnunet-daemon-hostlist_client.c:1348 |
4259 | #, c-format | 4573 | #, c-format |
4260 | msgid "Loading saved hostlist entries from file `%s' \n" | 4574 | msgid "Loading saved hostlist entries from file `%s' \n" |
4261 | msgstr "" | 4575 | msgstr "" |
4262 | 4576 | ||
4263 | #: src/hostlist/hostlist-client.c:1285 | 4577 | #: src/hostlist/gnunet-daemon-hostlist_client.c:1353 |
4264 | #, c-format | 4578 | #, c-format |
4265 | msgid "Hostlist file `%s' does not exist\n" | 4579 | msgid "Hostlist file `%s' does not exist\n" |
4266 | msgstr "" | 4580 | msgstr "" |
4267 | 4581 | ||
4268 | #: src/hostlist/hostlist-client.c:1296 | 4582 | #: src/hostlist/gnunet-daemon-hostlist_client.c:1362 |
4269 | #, c-format | 4583 | #, c-format |
4270 | msgid "Could not open file `%s' for reading to load hostlists: %s\n" | 4584 | msgid "Could not open file `%s' for reading to load hostlists: %s\n" |
4271 | msgstr "" | 4585 | msgstr "" |
4272 | 4586 | ||
4273 | #: src/hostlist/hostlist-client.c:1329 | 4587 | #: src/hostlist/gnunet-daemon-hostlist_client.c:1396 |
4274 | #, c-format | 4588 | #, c-format |
4275 | msgid "%u hostlist URIs loaded from file\n" | 4589 | msgid "%u hostlist URIs loaded from file\n" |
4276 | msgstr "" | 4590 | msgstr "" |
4277 | 4591 | ||
4278 | #: src/hostlist/hostlist-client.c:1331 | 4592 | #: src/hostlist/gnunet-daemon-hostlist_client.c:1399 |
4279 | msgid "# hostlist URIs read from file" | 4593 | msgid "# hostlist URIs read from file" |
4280 | msgstr "" | 4594 | msgstr "" |
4281 | 4595 | ||
4282 | #: src/hostlist/hostlist-client.c:1376 | 4596 | #: src/hostlist/gnunet-daemon-hostlist_client.c:1445 |
4283 | #, c-format | 4597 | #, c-format |
4284 | msgid "Could not open file `%s' for writing to save hostlists: %s\n" | 4598 | msgid "Could not open file `%s' for writing to save hostlists: %s\n" |
4285 | msgstr "" | 4599 | msgstr "" |
4286 | 4600 | ||
4287 | #: src/hostlist/hostlist-client.c:1381 | 4601 | #: src/hostlist/gnunet-daemon-hostlist_client.c:1452 |
4288 | #, c-format | 4602 | #, c-format |
4289 | msgid "Writing %u hostlist URIs to `%s'\n" | 4603 | msgid "Writing %u hostlist URIs to `%s'\n" |
4290 | msgstr "" | 4604 | msgstr "" |
4291 | 4605 | ||
4292 | #: src/hostlist/hostlist-client.c:1405 src/hostlist/hostlist-client.c:1422 | 4606 | #: src/hostlist/gnunet-daemon-hostlist_client.c:1476 |
4607 | #: src/hostlist/gnunet-daemon-hostlist_client.c:1493 | ||
4293 | #, c-format | 4608 | #, c-format |
4294 | msgid "Error writing hostlist URIs to file `%s'\n" | 4609 | msgid "Error writing hostlist URIs to file `%s'\n" |
4295 | msgstr "" | 4610 | msgstr "" |
4296 | 4611 | ||
4297 | #: src/hostlist/hostlist-client.c:1417 | 4612 | #: src/hostlist/gnunet-daemon-hostlist_client.c:1488 |
4298 | msgid "# hostlist URIs written to file" | 4613 | msgid "# hostlist URIs written to file" |
4299 | msgstr "" | 4614 | msgstr "" |
4300 | 4615 | ||
4301 | #: src/hostlist/hostlist-client.c:1471 | 4616 | #: src/hostlist/gnunet-daemon-hostlist_client.c:1588 |
4302 | msgid "Learning is enabled on this peer\n" | 4617 | #: src/transport/plugin_transport_http_client.c:2265 |
4618 | #, c-format | ||
4619 | msgid "Invalid proxy type: `%s', disabling proxy! Check configuration!\n" | ||
4303 | msgstr "" | 4620 | msgstr "" |
4304 | 4621 | ||
4305 | #: src/hostlist/hostlist-client.c:1483 | 4622 | #: src/hostlist/gnunet-daemon-hostlist_client.c:1617 |
4306 | msgid "Learning is not enabled on this peer\n" | 4623 | msgid "Learning is enabled on this peer\n" |
4307 | msgstr "" | 4624 | msgstr "" |
4308 | 4625 | ||
4309 | #: src/hostlist/hostlist-client.c:1495 | 4626 | #: src/hostlist/gnunet-daemon-hostlist_client.c:1630 |
4310 | #, c-format | 4627 | msgid "Learning is not enabled on this peer\n" |
4311 | msgid "Since learning is not enabled on this peer, hostlist file `%s' was removed\n" | ||
4312 | msgstr "" | 4628 | msgstr "" |
4313 | 4629 | ||
4314 | #: src/hostlist/hostlist-client.c:1499 | 4630 | #: src/hostlist/gnunet-daemon-hostlist_client.c:1641 |
4315 | #, c-format | 4631 | #, c-format |
4316 | msgid "Hostlist file `%s' could not be removed\n" | 4632 | msgid "" |
4633 | "Since learning is not enabled on this peer, hostlist file `%s' was removed\n" | ||
4317 | msgstr "" | 4634 | msgstr "" |
4318 | 4635 | ||
4319 | #: src/hostlist/hostlist-server.c:137 | 4636 | #: src/hostlist/gnunet-daemon-hostlist_server.c:181 |
4320 | msgid "bytes in hostlist" | 4637 | msgid "bytes in hostlist" |
4321 | msgstr "" | 4638 | msgstr "" |
4322 | 4639 | ||
4323 | #: src/hostlist/hostlist-server.c:161 | 4640 | #: src/hostlist/gnunet-daemon-hostlist_server.c:206 |
4324 | msgid "expired addresses encountered" | 4641 | msgid "expired addresses encountered" |
4325 | msgstr "" | 4642 | msgstr "" |
4326 | 4643 | ||
4327 | #: src/hostlist/hostlist-server.c:189 src/hostlist/hostlist-server.c:425 | 4644 | #: src/hostlist/gnunet-daemon-hostlist_server.c:241 |
4328 | #: src/peerinfo-tool/gnunet-peerinfo.c:350 | 4645 | #: src/hostlist/gnunet-daemon-hostlist_server.c:590 |
4329 | #: src/peerinfo-tool/gnunet-peerinfo.c:419 | 4646 | #: src/peerinfo-tool/gnunet-peerinfo.c:382 |
4330 | #: src/peerinfo-tool/gnunet-peerinfo.c:490 | 4647 | #: src/peerinfo-tool/gnunet-peerinfo.c:531 |
4331 | #: src/topology/gnunet-daemon-topology.c:925 | 4648 | #: src/topology/gnunet-daemon-topology.c:952 |
4332 | #, c-format | 4649 | #, c-format |
4333 | msgid "Error in communication with PEERINFO service: %s\n" | 4650 | msgid "Error in communication with PEERINFO service: %s\n" |
4334 | msgstr "" | 4651 | msgstr "" |
4335 | 4652 | ||
4336 | #: src/hostlist/hostlist-server.c:210 | 4653 | #: src/hostlist/gnunet-daemon-hostlist_server.c:265 |
4337 | msgid "HELLOs without addresses encountered (ignored)" | 4654 | msgid "HELLOs without addresses encountered (ignored)" |
4338 | msgstr "" | 4655 | msgstr "" |
4339 | 4656 | ||
4340 | #: src/hostlist/hostlist-server.c:224 | 4657 | #: src/hostlist/gnunet-daemon-hostlist_server.c:282 |
4341 | msgid "bytes not included in hostlist (size limit)" | 4658 | msgid "bytes not included in hostlist (size limit)" |
4342 | msgstr "" | 4659 | msgstr "" |
4343 | 4660 | ||
4344 | #: src/hostlist/hostlist-server.c:268 | 4661 | #: src/hostlist/gnunet-daemon-hostlist_server.c:386 |
4345 | #, c-format | 4662 | #, c-format |
4346 | msgid "Refusing `%s' request to hostlist server\n" | 4663 | msgid "Refusing `%s' request to hostlist server\n" |
4347 | msgstr "" | 4664 | msgstr "" |
4348 | 4665 | ||
4349 | #: src/hostlist/hostlist-server.c:271 | 4666 | #: src/hostlist/gnunet-daemon-hostlist_server.c:389 |
4350 | msgid "hostlist requests refused (not HTTP GET)" | 4667 | msgid "hostlist requests refused (not HTTP GET)" |
4351 | msgstr "" | 4668 | msgstr "" |
4352 | 4669 | ||
4353 | #: src/hostlist/hostlist-server.c:284 | 4670 | #: src/hostlist/gnunet-daemon-hostlist_server.c:403 |
4354 | #, c-format | 4671 | #, c-format |
4355 | msgid "Refusing `%s' request with %llu bytes of upload data\n" | 4672 | msgid "Refusing `%s' request with %llu bytes of upload data\n" |
4356 | msgstr "" | 4673 | msgstr "" |
4357 | 4674 | ||
4358 | #: src/hostlist/hostlist-server.c:288 | 4675 | #: src/hostlist/gnunet-daemon-hostlist_server.c:407 |
4359 | msgid "hostlist requests refused (upload data)" | 4676 | msgid "hostlist requests refused (upload data)" |
4360 | msgstr "" | 4677 | msgstr "" |
4361 | 4678 | ||
4362 | #: src/hostlist/hostlist-server.c:296 | 4679 | #: src/hostlist/gnunet-daemon-hostlist_server.c:414 |
4363 | msgid "Could not handle hostlist request since I do not have a response yet\n" | 4680 | msgid "Could not handle hostlist request since I do not have a response yet\n" |
4364 | msgstr "" | 4681 | msgstr "" |
4365 | 4682 | ||
4366 | #: src/hostlist/hostlist-server.c:299 | 4683 | #: src/hostlist/gnunet-daemon-hostlist_server.c:417 |
4367 | msgid "hostlist requests refused (not ready)" | 4684 | msgid "hostlist requests refused (not ready)" |
4368 | msgstr "" | 4685 | msgstr "" |
4369 | 4686 | ||
4370 | #: src/hostlist/hostlist-server.c:303 | 4687 | #: src/hostlist/gnunet-daemon-hostlist_server.c:422 |
4371 | msgid "Received request for our hostlist\n" | 4688 | msgid "Received request for our hostlist\n" |
4372 | msgstr "" | 4689 | msgstr "" |
4373 | 4690 | ||
4374 | #: src/hostlist/hostlist-server.c:304 | 4691 | #: src/hostlist/gnunet-daemon-hostlist_server.c:424 |
4375 | msgid "hostlist requests processed" | 4692 | msgid "hostlist requests processed" |
4376 | msgstr "" | 4693 | msgstr "" |
4377 | 4694 | ||
4378 | #: src/hostlist/hostlist-server.c:346 | 4695 | #: src/hostlist/gnunet-daemon-hostlist_server.c:485 |
4379 | msgid "# hostlist advertisements send" | 4696 | msgid "# hostlist advertisements send" |
4380 | msgstr "" | 4697 | msgstr "" |
4381 | 4698 | ||
4382 | #: src/hostlist/hostlist-server.c:390 | 4699 | #: src/hostlist/gnunet-daemon-hostlist_server.c:535 |
4383 | msgid "Advertisement message could not be queued by core\n" | 4700 | msgid "Advertisement message could not be queued by core\n" |
4384 | msgstr "" | 4701 | msgstr "" |
4385 | 4702 | ||
4386 | #: src/hostlist/hostlist-server.c:557 src/peerinfo-tool/gnunet-peerinfo.c:639 | 4703 | #: src/hostlist/gnunet-daemon-hostlist_server.c:747 |
4387 | #: src/transport/gnunet-service-transport.c:1114 | 4704 | #: src/peerinfo-tool/gnunet-peerinfo.c:736 |
4705 | #: src/transport/gnunet-service-transport.c:852 | ||
4388 | msgid "Could not access PEERINFO service. Exiting.\n" | 4706 | msgid "Could not access PEERINFO service. Exiting.\n" |
4389 | msgstr "" | 4707 | msgstr "" |
4390 | 4708 | ||
4391 | #: src/hostlist/hostlist-server.c:576 | 4709 | #: src/hostlist/gnunet-daemon-hostlist_server.c:771 |
4392 | #, c-format | 4710 | #, c-format |
4393 | msgid "Hostlist service starts on %s:%llu\n" | 4711 | msgid "Hostlist service starts on %s:%llu\n" |
4394 | msgstr "" | 4712 | msgstr "" |
4395 | 4713 | ||
4396 | #: src/hostlist/hostlist-server.c:590 | 4714 | #: src/hostlist/gnunet-daemon-hostlist_server.c:786 |
4397 | #, c-format | 4715 | #, c-format |
4398 | msgid "Address to obtain hostlist: `%s'\n" | 4716 | msgid "Address to obtain hostlist: `%s'\n" |
4399 | msgstr "" | 4717 | msgstr "" |
4400 | 4718 | ||
4401 | #: src/hostlist/hostlist-server.c:630 | 4719 | #: src/hostlist/gnunet-daemon-hostlist_server.c:799 |
4720 | msgid "BINDTOIP does not a valid IPv4 address! Ignoring BINDTOIPV4.\n" | ||
4721 | msgstr "" | ||
4722 | |||
4723 | #: src/hostlist/gnunet-daemon-hostlist_server.c:812 | ||
4724 | msgid "BINDTOIP does not a valid IPv4 address! Ignoring BINDTOIPV6.\n" | ||
4725 | msgstr "" | ||
4726 | |||
4727 | #: src/hostlist/gnunet-daemon-hostlist_server.c:833 | ||
4402 | #, c-format | 4728 | #, c-format |
4403 | msgid "`%s' is not a valid IP address! Ignoring BINDTOIP.\n" | 4729 | msgid "`%s' is not a valid IPv4 address! Ignoring BINDTOIPV4.\n" |
4404 | msgstr "" | 4730 | msgstr "" |
4405 | 4731 | ||
4406 | #: src/hostlist/hostlist-server.c:673 | 4732 | #: src/hostlist/gnunet-daemon-hostlist_server.c:853 |
4733 | #, c-format | ||
4734 | msgid "`%s' is not a valid IPv6 address! Ignoring BINDTOIPV6.\n" | ||
4735 | msgstr "" | ||
4736 | |||
4737 | #: src/hostlist/gnunet-daemon-hostlist_server.c:893 | ||
4407 | #, c-format | 4738 | #, c-format |
4408 | msgid "Could not start hostlist HTTP server on port %u\n" | 4739 | msgid "Could not start hostlist HTTP server on port %u\n" |
4409 | msgstr "" | 4740 | msgstr "" |
@@ -4431,7 +4762,8 @@ msgid "display all egos" | |||
4431 | msgstr "" | 4762 | msgstr "" |
4432 | 4763 | ||
4433 | #: src/identity/gnunet-identity.c:336 | 4764 | #: src/identity/gnunet-identity.c:336 |
4434 | msgid "set default identity to EGO for a subsystem SUBSYSTEM (use together with -s)" | 4765 | msgid "" |
4766 | "set default identity to EGO for a subsystem SUBSYSTEM (use together with -s)" | ||
4435 | msgstr "" | 4767 | msgstr "" |
4436 | 4768 | ||
4437 | #: src/identity/gnunet-identity.c:339 | 4769 | #: src/identity/gnunet-identity.c:339 |
@@ -4439,7 +4771,8 @@ msgid "run in monitor mode egos" | |||
4439 | msgstr "" | 4771 | msgstr "" |
4440 | 4772 | ||
4441 | #: src/identity/gnunet-identity.c:342 | 4773 | #: src/identity/gnunet-identity.c:342 |
4442 | msgid "set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)" | 4774 | msgid "" |
4775 | "set default identity to EGO for a subsystem SUBSYSTEM (use together with -e)" | ||
4443 | msgstr "" | 4776 | msgstr "" |
4444 | 4777 | ||
4445 | #: src/identity/gnunet-identity.c:351 | 4778 | #: src/identity/gnunet-identity.c:351 |
@@ -4493,51 +4826,8 @@ msgstr "" | |||
4493 | msgid "Failed to create directory `%s' for storing egos\n" | 4826 | msgid "Failed to create directory `%s' for storing egos\n" |
4494 | msgstr "" | 4827 | msgstr "" |
4495 | 4828 | ||
4496 | #: src/mesh/gnunet-mesh.c:357 | 4829 | #: src/identity/plugin_rest_identity.c:803 |
4497 | #, c-format | 4830 | msgid "Identity REST API initialized\n" |
4498 | msgid "Invalid target `%s'\n" | ||
4499 | msgstr "" | ||
4500 | |||
4501 | #: src/mesh/gnunet-mesh.c:607 | ||
4502 | #, c-format | ||
4503 | msgid "Invalid peer ID `%s'\n" | ||
4504 | msgstr "" | ||
4505 | |||
4506 | #: src/mesh/gnunet-mesh.c:650 | ||
4507 | #, c-format | ||
4508 | msgid "Invalid tunnel owner `%s'\n" | ||
4509 | msgstr "" | ||
4510 | |||
4511 | #: src/mesh/gnunet-mesh.c:716 | ||
4512 | msgid "You must NOT give a TARGETwhen using 'request all' options\n" | ||
4513 | msgstr "" | ||
4514 | |||
4515 | #: src/mesh/gnunet-mesh.c:807 | ||
4516 | msgid "provide information about a particular connection" | ||
4517 | msgstr "" | ||
4518 | |||
4519 | #: src/mesh/gnunet-mesh.c:810 | ||
4520 | msgid "activate echo mode" | ||
4521 | msgstr "" | ||
4522 | |||
4523 | #: src/mesh/gnunet-mesh.c:816 | ||
4524 | msgid "port to listen to (default; 0)" | ||
4525 | msgstr "" | ||
4526 | |||
4527 | #: src/mesh/gnunet-mesh.c:819 src/mesh/gnunet-mesh.c:822 | ||
4528 | msgid "provide information about all peers" | ||
4529 | msgstr "" | ||
4530 | |||
4531 | #: src/mesh/gnunet-mesh.c:825 | ||
4532 | msgid "provide information about a particular tunnel" | ||
4533 | msgstr "" | ||
4534 | |||
4535 | #: src/mesh/gnunet-mesh.c:828 | ||
4536 | msgid "provide information about all tunnels" | ||
4537 | msgstr "" | ||
4538 | |||
4539 | #: src/mesh/gnunet-service-mesh_peer.c:390 | ||
4540 | msgid "Wrong CORE service\n" | ||
4541 | msgstr "" | 4831 | msgstr "" |
4542 | 4832 | ||
4543 | #: src/mysql/mysql.c:174 | 4833 | #: src/mysql/mysql.c:174 |
@@ -4565,9 +4855,9 @@ msgstr "" | |||
4565 | msgid "You must specify which zone should be accessed\n" | 4855 | msgid "You must specify which zone should be accessed\n" |
4566 | msgstr "" | 4856 | msgstr "" |
4567 | 4857 | ||
4568 | #: src/namecache/gnunet-namecache.c:195 src/namestore/gnunet-namestore.c:695 | 4858 | #: src/namecache/gnunet-namecache.c:195 |
4569 | #, c-format | 4859 | #, c-format |
4570 | msgid "Invalid public key for reverse lookup `%s'\n" | 4860 | msgid "Invalid public key for zone `%s'\n" |
4571 | msgstr "" | 4861 | msgstr "" |
4572 | 4862 | ||
4573 | #: src/namecache/gnunet-namecache.c:203 | 4863 | #: src/namecache/gnunet-namecache.c:203 |
@@ -4575,7 +4865,7 @@ msgstr "" | |||
4575 | msgid "You must specify a name\n" | 4865 | msgid "You must specify a name\n" |
4576 | msgstr "" | 4866 | msgstr "" |
4577 | 4867 | ||
4578 | #: src/namecache/gnunet-namecache.c:234 src/namestore/gnunet-namestore.c:931 | 4868 | #: src/namecache/gnunet-namecache.c:234 src/namestore/gnunet-namestore.c:1084 |
4579 | msgid "name of the record to add/delete/display" | 4869 | msgid "name of the record to add/delete/display" |
4580 | msgstr "" | 4870 | msgstr "" |
4581 | 4871 | ||
@@ -4583,7 +4873,7 @@ msgstr "" | |||
4583 | msgid "spezifies the public key of the zone to look in" | 4873 | msgid "spezifies the public key of the zone to look in" |
4584 | msgstr "" | 4874 | msgstr "" |
4585 | 4875 | ||
4586 | #: src/namecache/gnunet-namecache.c:248 src/namestore/gnunet-namestore.c:963 | 4876 | #: src/namecache/gnunet-namecache.c:248 src/namestore/gnunet-namestore.c:1116 |
4587 | msgid "GNUnet zone manipulation tool" | 4877 | msgid "GNUnet zone manipulation tool" |
4588 | msgstr "" | 4878 | msgstr "" |
4589 | 4879 | ||
@@ -4602,194 +4892,236 @@ msgid "Adding record failed: %s\n" | |||
4602 | msgstr "" | 4892 | msgstr "" |
4603 | 4893 | ||
4604 | #: src/namestore/gnunet-namestore.c:332 | 4894 | #: src/namestore/gnunet-namestore.c:332 |
4895 | #: src/namestore/plugin_rest_namestore.c:505 | ||
4605 | #, c-format | 4896 | #, c-format |
4606 | msgid "Deleting record failed, record does not exist%s%s\n" | 4897 | msgid "Deleting record failed, record does not exist%s%s\n" |
4607 | msgstr "" | 4898 | msgstr "" |
4608 | 4899 | ||
4609 | #: src/namestore/gnunet-namestore.c:339 | 4900 | #: src/namestore/gnunet-namestore.c:339 |
4901 | #: src/namestore/plugin_rest_namestore.c:514 | ||
4610 | #, c-format | 4902 | #, c-format |
4611 | msgid "Deleting record failed%s%s\n" | 4903 | msgid "Deleting record failed%s%s\n" |
4612 | msgstr "" | 4904 | msgstr "" |
4613 | 4905 | ||
4614 | #: src/namestore/gnunet-namestore.c:558 | 4906 | #: src/namestore/gnunet-namestore.c:477 src/namestore/gnunet-namestore.c:485 |
4907 | #: src/namestore/gnunet-namestore.c:493 | ||
4908 | #, c-format | ||
4909 | msgid "A %s record exists already under `%s', no other records can be added.\n" | ||
4910 | msgstr "" | ||
4911 | |||
4912 | #: src/namestore/gnunet-namestore.c:507 src/namestore/gnunet-namestore.c:519 | ||
4913 | #: src/namestore/gnunet-namestore.c:531 | ||
4914 | #, c-format | ||
4915 | msgid "Records already exist under `%s', cannot add `%s' record.\n" | ||
4916 | msgstr "" | ||
4917 | |||
4918 | #: src/namestore/gnunet-namestore.c:628 | ||
4919 | #: src/namestore/plugin_rest_namestore.c:538 | ||
4920 | #, c-format | ||
4921 | msgid "There are no records under label `%s' that could be deleted.\n" | ||
4922 | msgstr "" | ||
4923 | |||
4924 | #: src/namestore/gnunet-namestore.c:667 | ||
4925 | #, c-format | ||
4926 | msgid "" | ||
4927 | "There are no records under label `%s' that match the request for deletion.\n" | ||
4928 | msgstr "" | ||
4929 | |||
4930 | #: src/namestore/gnunet-namestore.c:708 | ||
4615 | #, c-format | 4931 | #, c-format |
4616 | msgid "No options given\n" | 4932 | msgid "No options given\n" |
4617 | msgstr "" | 4933 | msgstr "" |
4618 | 4934 | ||
4619 | #: src/namestore/gnunet-namestore.c:569 | 4935 | #: src/namestore/gnunet-namestore.c:719 |
4620 | #: src/namestore/gnunet-namestore-fcfsd.c:970 | 4936 | #: src/namestore/gnunet-namestore-fcfsd.c:984 |
4937 | #: src/namestore/plugin_rest_namestore.c:821 | ||
4621 | msgid "Failed to connect to namestore\n" | 4938 | msgid "Failed to connect to namestore\n" |
4622 | msgstr "" | 4939 | msgstr "" |
4623 | 4940 | ||
4624 | #: src/namestore/gnunet-namestore.c:577 src/namestore/gnunet-namestore.c:586 | 4941 | #: src/namestore/gnunet-namestore.c:727 src/namestore/gnunet-namestore.c:736 |
4625 | #: src/namestore/gnunet-namestore.c:603 src/namestore/gnunet-namestore.c:625 | 4942 | #: src/namestore/gnunet-namestore.c:753 src/namestore/gnunet-namestore.c:775 |
4626 | #: src/namestore/gnunet-namestore.c:665 | 4943 | #: src/namestore/gnunet-namestore.c:815 |
4627 | #, c-format | 4944 | #, c-format |
4628 | msgid "Missing option `%s' for operation `%s'\n" | 4945 | msgid "Missing option `%s' for operation `%s'\n" |
4629 | msgstr "" | 4946 | msgstr "" |
4630 | 4947 | ||
4631 | #: src/namestore/gnunet-namestore.c:578 src/namestore/gnunet-namestore.c:587 | 4948 | #: src/namestore/gnunet-namestore.c:728 src/namestore/gnunet-namestore.c:737 |
4632 | #: src/namestore/gnunet-namestore.c:604 src/namestore/gnunet-namestore.c:626 | 4949 | #: src/namestore/gnunet-namestore.c:754 src/namestore/gnunet-namestore.c:776 |
4633 | msgid "add" | 4950 | msgid "add" |
4634 | msgstr "" | 4951 | msgstr "" |
4635 | 4952 | ||
4636 | #: src/namestore/gnunet-namestore.c:595 | 4953 | #: src/namestore/gnunet-namestore.c:745 |
4954 | #: src/namestore/plugin_rest_namestore.c:608 | ||
4637 | #, c-format | 4955 | #, c-format |
4638 | msgid "Unsupported type `%s'\n" | 4956 | msgid "Unsupported type `%s'\n" |
4639 | msgstr "" | 4957 | msgstr "" |
4640 | 4958 | ||
4641 | #: src/namestore/gnunet-namestore.c:615 | 4959 | #: src/namestore/gnunet-namestore.c:765 |
4960 | #: src/namestore/plugin_rest_namestore.c:626 | ||
4961 | #: src/namestore/plugin_rest_namestore.c:666 | ||
4642 | #, c-format | 4962 | #, c-format |
4643 | msgid "Value `%s' invalid for record type `%s'\n" | 4963 | msgid "Value `%s' invalid for record type `%s'\n" |
4644 | msgstr "" | 4964 | msgstr "" |
4645 | 4965 | ||
4646 | #: src/namestore/gnunet-namestore.c:651 | 4966 | #: src/namestore/gnunet-namestore.c:801 |
4647 | #, c-format | 4967 | #, c-format |
4648 | msgid "Invalid time format `%s'\n" | 4968 | msgid "Invalid time format `%s'\n" |
4649 | msgstr "" | 4969 | msgstr "" |
4650 | 4970 | ||
4651 | #: src/namestore/gnunet-namestore.c:666 | 4971 | #: src/namestore/gnunet-namestore.c:816 |
4652 | msgid "del" | 4972 | msgid "del" |
4653 | msgstr "" | 4973 | msgstr "" |
4654 | 4974 | ||
4655 | #: src/namestore/gnunet-namestore.c:715 | 4975 | #: src/namestore/gnunet-namestore.c:844 |
4656 | #: src/peerinfo-tool/gnunet-peerinfo.c:723 | 4976 | #, c-format |
4977 | msgid "Invalid public key for reverse lookup `%s'\n" | ||
4978 | msgstr "" | ||
4979 | |||
4980 | #: src/namestore/gnunet-namestore.c:868 | ||
4981 | #: src/peerinfo-tool/gnunet-peerinfo.c:817 | ||
4657 | #, c-format | 4982 | #, c-format |
4658 | msgid "Invalid URI `%s'\n" | 4983 | msgid "Invalid URI `%s'\n" |
4659 | msgstr "" | 4984 | msgstr "" |
4660 | 4985 | ||
4661 | #: src/namestore/gnunet-namestore.c:750 | 4986 | #: src/namestore/gnunet-namestore.c:903 |
4662 | #, c-format | 4987 | #, c-format |
4663 | msgid "Invalid nick `%s'\n" | 4988 | msgid "Invalid nick `%s'\n" |
4664 | msgstr "" | 4989 | msgstr "" |
4665 | 4990 | ||
4666 | #: src/namestore/gnunet-namestore.c:790 | 4991 | #: src/namestore/gnunet-namestore.c:943 |
4992 | #: src/namestore/plugin_rest_namestore.c:851 | ||
4667 | #, c-format | 4993 | #, c-format |
4668 | msgid "Ego `%s' not known to identity service\n" | 4994 | msgid "Ego `%s' not known to identity service\n" |
4669 | msgstr "" | 4995 | msgstr "" |
4670 | 4996 | ||
4671 | #: src/namestore/gnunet-namestore.c:817 | 4997 | #: src/namestore/gnunet-namestore.c:970 |
4998 | #: src/namestore/plugin_rest_namestore.c:878 | ||
4672 | #, c-format | 4999 | #, c-format |
4673 | msgid "No default ego configured in identity service\n" | 5000 | msgid "No default ego configured in identity service\n" |
4674 | msgstr "" | 5001 | msgstr "" |
4675 | 5002 | ||
4676 | #: src/namestore/gnunet-namestore.c:853 | 5003 | #: src/namestore/gnunet-namestore.c:1006 |
5004 | #: src/namestore/plugin_rest_namestore.c:917 | ||
4677 | #, c-format | 5005 | #, c-format |
4678 | msgid "Identity service is not running\n" | 5006 | msgid "Identity service is not running\n" |
4679 | msgstr "" | 5007 | msgstr "" |
4680 | 5008 | ||
4681 | #: src/namestore/gnunet-namestore.c:865 | 5009 | #: src/namestore/gnunet-namestore.c:1018 |
5010 | #: src/namestore/plugin_rest_namestore.c:946 | ||
4682 | #, c-format | 5011 | #, c-format |
4683 | msgid "Cannot connect to identity service\n" | 5012 | msgid "Cannot connect to identity service\n" |
4684 | msgstr "" | 5013 | msgstr "" |
4685 | 5014 | ||
4686 | #: src/namestore/gnunet-namestore.c:913 | 5015 | #: src/namestore/gnunet-namestore.c:1066 |
4687 | msgid "add record" | 5016 | msgid "add record" |
4688 | msgstr "" | 5017 | msgstr "" |
4689 | 5018 | ||
4690 | #: src/namestore/gnunet-namestore.c:916 | 5019 | #: src/namestore/gnunet-namestore.c:1069 |
4691 | msgid "delete record" | 5020 | msgid "delete record" |
4692 | msgstr "" | 5021 | msgstr "" |
4693 | 5022 | ||
4694 | #: src/namestore/gnunet-namestore.c:919 | 5023 | #: src/namestore/gnunet-namestore.c:1072 |
4695 | msgid "display records" | 5024 | msgid "display records" |
4696 | msgstr "" | 5025 | msgstr "" |
4697 | 5026 | ||
4698 | #: src/namestore/gnunet-namestore.c:922 | 5027 | #: src/namestore/gnunet-namestore.c:1075 |
4699 | msgid "expiration time for record to use (for adding only), \"never\" is possible" | 5028 | msgid "" |
5029 | "expiration time for record to use (for adding only), \"never\" is possible" | ||
4700 | msgstr "" | 5030 | msgstr "" |
4701 | 5031 | ||
4702 | #: src/namestore/gnunet-namestore.c:925 | 5032 | #: src/namestore/gnunet-namestore.c:1078 |
4703 | msgid "set the desired nick name for the zone" | 5033 | msgid "set the desired nick name for the zone" |
4704 | msgstr "" | 5034 | msgstr "" |
4705 | 5035 | ||
4706 | #: src/namestore/gnunet-namestore.c:928 | 5036 | #: src/namestore/gnunet-namestore.c:1081 |
4707 | msgid "monitor changes in the namestore" | 5037 | msgid "monitor changes in the namestore" |
4708 | msgstr "" | 5038 | msgstr "" |
4709 | 5039 | ||
4710 | #: src/namestore/gnunet-namestore.c:934 | 5040 | #: src/namestore/gnunet-namestore.c:1087 |
4711 | msgid "determine our name for the given PKEY" | 5041 | msgid "determine our name for the given PKEY" |
4712 | msgstr "" | 5042 | msgstr "" |
4713 | 5043 | ||
4714 | #: src/namestore/gnunet-namestore.c:937 | 5044 | #: src/namestore/gnunet-namestore.c:1090 |
4715 | msgid "type of the record to add/delete/display" | 5045 | msgid "type of the record to add/delete/display" |
4716 | msgstr "" | 5046 | msgstr "" |
4717 | 5047 | ||
4718 | #: src/namestore/gnunet-namestore.c:940 | 5048 | #: src/namestore/gnunet-namestore.c:1093 |
4719 | msgid "URI to import into our zone" | 5049 | msgid "URI to import into our zone" |
4720 | msgstr "" | 5050 | msgstr "" |
4721 | 5051 | ||
4722 | #: src/namestore/gnunet-namestore.c:943 | 5052 | #: src/namestore/gnunet-namestore.c:1096 |
4723 | msgid "value of the record to add/delete" | 5053 | msgid "value of the record to add/delete" |
4724 | msgstr "" | 5054 | msgstr "" |
4725 | 5055 | ||
4726 | #: src/namestore/gnunet-namestore.c:946 | 5056 | #: src/namestore/gnunet-namestore.c:1099 |
4727 | msgid "create or list public record" | 5057 | msgid "create or list public record" |
4728 | msgstr "" | 5058 | msgstr "" |
4729 | 5059 | ||
4730 | #: src/namestore/gnunet-namestore.c:949 | 5060 | #: src/namestore/gnunet-namestore.c:1102 |
4731 | msgid "create shadow record (only valid if all other records of the same type have expired" | 5061 | msgid "" |
5062 | "create shadow record (only valid if all other records of the same type have " | ||
5063 | "expired" | ||
4732 | msgstr "" | 5064 | msgstr "" |
4733 | 5065 | ||
4734 | #: src/namestore/gnunet-namestore.c:952 | 5066 | #: src/namestore/gnunet-namestore.c:1105 |
4735 | msgid "name of the ego controlling the zone" | 5067 | msgid "name of the ego controlling the zone" |
4736 | msgstr "" | 5068 | msgstr "" |
4737 | 5069 | ||
4738 | #: src/namestore/gnunet-namestore-fcfsd.c:464 | 5070 | #: src/namestore/gnunet-namestore-fcfsd.c:478 |
4739 | #, c-format | 5071 | #, c-format |
4740 | msgid "Unsupported form value `%s'\n" | 5072 | msgid "Unsupported form value `%s'\n" |
4741 | msgstr "" | 5073 | msgstr "" |
4742 | 5074 | ||
4743 | #: src/namestore/gnunet-namestore-fcfsd.c:491 | 5075 | #: src/namestore/gnunet-namestore-fcfsd.c:505 |
4744 | #, c-format | 5076 | #, c-format |
4745 | msgid "Failed to create record for domain `%s': %s\n" | 5077 | msgid "Failed to create record for domain `%s': %s\n" |
4746 | msgstr "" | 5078 | msgstr "" |
4747 | 5079 | ||
4748 | #: src/namestore/gnunet-namestore-fcfsd.c:525 | 5080 | #: src/namestore/gnunet-namestore-fcfsd.c:539 |
4749 | #, c-format | 5081 | #, c-format |
4750 | msgid "Found existing name `%s' for the given key\n" | 5082 | msgid "Found existing name `%s' for the given key\n" |
4751 | msgstr "" | 5083 | msgstr "" |
4752 | 5084 | ||
4753 | #: src/namestore/gnunet-namestore-fcfsd.c:534 | 5085 | #: src/namestore/gnunet-namestore-fcfsd.c:548 |
4754 | msgid "Error when mapping zone to name\n" | 5086 | msgid "Error when mapping zone to name\n" |
4755 | msgstr "" | 5087 | msgstr "" |
4756 | 5088 | ||
4757 | #: src/namestore/gnunet-namestore-fcfsd.c:596 | 5089 | #: src/namestore/gnunet-namestore-fcfsd.c:610 |
4758 | #, c-format | 5090 | #, c-format |
4759 | msgid "Found %u existing records for domain `%s'\n" | 5091 | msgid "Found %u existing records for domain `%s'\n" |
4760 | msgstr "" | 5092 | msgstr "" |
4761 | 5093 | ||
4762 | #: src/namestore/gnunet-namestore-fcfsd.c:652 | 5094 | #: src/namestore/gnunet-namestore-fcfsd.c:666 |
4763 | #, c-format | 5095 | #, c-format |
4764 | msgid "Failed to create page for `%s'\n" | 5096 | msgid "Failed to create page for `%s'\n" |
4765 | msgstr "" | 5097 | msgstr "" |
4766 | 5098 | ||
4767 | #: src/namestore/gnunet-namestore-fcfsd.c:668 | 5099 | #: src/namestore/gnunet-namestore-fcfsd.c:682 |
4768 | #, c-format | 5100 | #, c-format |
4769 | msgid "Failed to setup post processor for `%s'\n" | 5101 | msgid "Failed to setup post processor for `%s'\n" |
4770 | msgstr "" | 5102 | msgstr "" |
4771 | 5103 | ||
4772 | #: src/namestore/gnunet-namestore-fcfsd.c:704 | 5104 | #: src/namestore/gnunet-namestore-fcfsd.c:718 |
4773 | msgid "Domain name must not contain `.'\n" | 5105 | msgid "Domain name must not contain `.'\n" |
4774 | msgstr "" | 5106 | msgstr "" |
4775 | 5107 | ||
4776 | #: src/namestore/gnunet-namestore-fcfsd.c:712 | 5108 | #: src/namestore/gnunet-namestore-fcfsd.c:726 |
4777 | msgid "Domain name must not contain `+'\n" | 5109 | msgid "Domain name must not contain `+'\n" |
4778 | msgstr "" | 5110 | msgstr "" |
4779 | 5111 | ||
4780 | #: src/namestore/gnunet-namestore-fcfsd.c:910 | 5112 | #: src/namestore/gnunet-namestore-fcfsd.c:924 |
4781 | msgid "No ego configured for `fcfsd` subsystem\n" | 5113 | msgid "No ego configured for `fcfsd` subsystem\n" |
4782 | msgstr "" | 5114 | msgstr "" |
4783 | 5115 | ||
4784 | #: src/namestore/gnunet-namestore-fcfsd.c:936 | 5116 | #: src/namestore/gnunet-namestore-fcfsd.c:950 |
4785 | msgid "Failed to start HTTP server\n" | 5117 | msgid "Failed to start HTTP server\n" |
4786 | msgstr "" | 5118 | msgstr "" |
4787 | 5119 | ||
4788 | #: src/namestore/gnunet-namestore-fcfsd.c:978 | 5120 | #: src/namestore/gnunet-namestore-fcfsd.c:992 |
4789 | msgid "Failed to connect to identity\n" | 5121 | msgid "Failed to connect to identity\n" |
4790 | msgstr "" | 5122 | msgstr "" |
4791 | 5123 | ||
4792 | #: src/namestore/gnunet-namestore-fcfsd.c:1011 | 5124 | #: src/namestore/gnunet-namestore-fcfsd.c:1025 |
4793 | msgid "GNU Name System First Come First Serve name registration service" | 5125 | msgid "GNU Name System First Come First Serve name registration service" |
4794 | msgstr "" | 5126 | msgstr "" |
4795 | 5127 | ||
@@ -4802,6 +5134,10 @@ msgstr "" | |||
4802 | msgid "Namestore failed to store record\n" | 5134 | msgid "Namestore failed to store record\n" |
4803 | msgstr "" | 5135 | msgstr "" |
4804 | 5136 | ||
5137 | #: src/namestore/plugin_rest_namestore.c:1023 | ||
5138 | msgid "Namestore REST API initialized\n" | ||
5139 | msgstr "" | ||
5140 | |||
4805 | #: src/nat/gnunet-nat-server.c:279 | 5141 | #: src/nat/gnunet-nat-server.c:279 |
4806 | #, c-format | 5142 | #, c-format |
4807 | msgid "Please pass valid port number as the first argument! (got `%s')\n" | 5143 | msgid "Please pass valid port number as the first argument! (got `%s')\n" |
@@ -4811,129 +5147,198 @@ msgstr "" | |||
4811 | msgid "GNUnet NAT traversal test helper daemon" | 5147 | msgid "GNUnet NAT traversal test helper daemon" |
4812 | msgstr "" | 5148 | msgstr "" |
4813 | 5149 | ||
4814 | #: src/nat/nat_auto.c:170 | 5150 | #: src/nat/nat_auto.c:179 |
4815 | msgid "NAT traversal with ICMP Server timed out.\n" | ||
4816 | msgstr "" | ||
4817 | |||
4818 | #: src/nat/nat_auto.c:203 | ||
4819 | msgid "NAT traversal with ICMP Server succeeded.\n" | 5151 | msgid "NAT traversal with ICMP Server succeeded.\n" |
4820 | msgstr "" | 5152 | msgstr "" |
4821 | 5153 | ||
4822 | #: src/nat/nat_auto.c:204 | 5154 | #: src/nat/nat_auto.c:180 |
4823 | msgid "NAT traversal with ICMP Server failed.\n" | 5155 | msgid "NAT traversal with ICMP Server failed.\n" |
4824 | msgstr "" | 5156 | msgstr "" |
4825 | 5157 | ||
4826 | #: src/nat/nat_auto.c:225 | 5158 | #: src/nat/nat_auto.c:201 |
4827 | msgid "Testing connection reversal with ICMP server.\n" | 5159 | msgid "Testing connection reversal with ICMP server.\n" |
4828 | msgstr "" | 5160 | msgstr "" |
4829 | 5161 | ||
4830 | #: src/nat/nat_auto.c:274 | 5162 | #: src/nat/nat_auto.c:249 |
4831 | #, c-format | 5163 | #, c-format |
4832 | msgid "Detected external IP `%s'\n" | 5164 | msgid "Detected external IP `%s'\n" |
4833 | msgstr "" | 5165 | msgstr "" |
4834 | 5166 | ||
4835 | #: src/nat/nat_auto.c:344 | 5167 | #: src/nat/nat_auto.c:327 |
4836 | msgid "This system has a global IPv6 address, setting IPv6 to supported.\n" | 5168 | msgid "This system has a global IPv6 address, setting IPv6 to supported.\n" |
4837 | msgstr "" | 5169 | msgstr "" |
4838 | 5170 | ||
4839 | #: src/nat/nat_auto.c:360 | 5171 | #: src/nat/nat_auto.c:343 |
4840 | #, c-format | 5172 | #, c-format |
4841 | msgid "Detected internal network address `%s'.\n" | 5173 | msgid "Detected internal network address `%s'.\n" |
4842 | msgstr "" | 5174 | msgstr "" |
4843 | 5175 | ||
4844 | #: src/nat/nat_auto.c:413 | 5176 | #: src/nat/nat_auto.c:406 |
4845 | msgid "upnpc found, enabling its use\n" | 5177 | msgid "upnpc found, enabling its use\n" |
4846 | msgstr "" | 5178 | msgstr "" |
4847 | 5179 | ||
4848 | #: src/nat/nat_auto.c:414 | 5180 | #: src/nat/nat_auto.c:407 |
4849 | msgid "upnpc not found\n" | 5181 | msgid "upnpc not found\n" |
4850 | msgstr "" | 5182 | msgstr "" |
4851 | 5183 | ||
4852 | #: src/nat/nat_auto.c:447 | 5184 | #: src/nat/nat_auto.c:437 |
4853 | msgid "gnunet-helper-nat-server found, testing it\n" | 5185 | msgid "test_icmp_server not possible, as we have no public IPv4 address\n" |
4854 | msgstr "" | 5186 | msgstr "" |
4855 | 5187 | ||
4856 | #: src/nat/nat_auto.c:448 | 5188 | #: src/nat/nat_auto.c:445 src/nat/nat_auto.c:490 |
4857 | msgid "No working gnunet-helper-nat-server found\n" | 5189 | msgid "test_icmp_server not possible, as we are not behind NAT\n" |
4858 | msgstr "" | 5190 | msgstr "" |
4859 | 5191 | ||
4860 | #: src/nat/nat_auto.c:482 | 5192 | #: src/nat/nat_auto.c:453 src/nat/nat_auto.c:498 |
4861 | msgid "gnunet-helper-nat-client found, enabling it\n" | 5193 | msgid "No working gnunet-helper-nat-server found\n" |
4862 | msgstr "" | 5194 | msgstr "" |
4863 | 5195 | ||
4864 | #: src/nat/nat_auto.c:483 | 5196 | #: src/nat/nat_auto.c:483 |
4865 | msgid "gnunet-helper-nat-client not found or behind NAT, disabling it\n" | 5197 | msgid "test_icmp_client not possible, as we have no internal IPv4 address\n" |
4866 | msgstr "" | 5198 | msgstr "" |
4867 | 5199 | ||
4868 | #: src/nat/nat.c:867 | 5200 | #: src/nat/nat.c:862 |
4869 | #, c-format | 5201 | #, c-format |
4870 | msgid "gnunet-helper-nat-server generated malformed address `%s'\n" | 5202 | msgid "gnunet-helper-nat-server generated malformed address `%s'\n" |
4871 | msgstr "" | 5203 | msgstr "" |
4872 | 5204 | ||
4873 | #: src/nat/nat.c:917 | 5205 | #: src/nat/nat.c:912 |
4874 | #, c-format | 5206 | #, c-format |
4875 | msgid "Failed to start %s\n" | 5207 | msgid "Failed to start %s\n" |
4876 | msgstr "" | 5208 | msgstr "" |
4877 | 5209 | ||
4878 | #: src/nat/nat.c:1205 | 5210 | #: src/nat/nat.c:1027 |
5211 | msgid "Error while running upnp client:\n" | ||
5212 | msgstr "" | ||
5213 | |||
5214 | #: src/nat/nat.c:1097 | ||
5215 | #, c-format | ||
5216 | msgid "Failed to run upnp client for port %u\n" | ||
5217 | msgstr "" | ||
5218 | |||
5219 | #: src/nat/nat.c:1237 | ||
4879 | msgid "malformed" | 5220 | msgid "malformed" |
4880 | msgstr "" | 5221 | msgstr "" |
4881 | 5222 | ||
4882 | #: src/nat/nat.c:1276 src/nat/nat.c:1288 | 5223 | #: src/nat/nat.c:1291 |
5224 | msgid "" | ||
5225 | "UPnP enabled in configuration, but UPnP client `upnpc` command not found, " | ||
5226 | "disabling UPnP \n" | ||
5227 | msgstr "" | ||
5228 | |||
5229 | #: src/nat/nat.c:1318 src/nat/nat.c:1330 | ||
4883 | #, c-format | 5230 | #, c-format |
4884 | msgid "Configuration requires `%s', but binary is not installed properly (SUID bit not set). Option disabled.\n" | 5231 | msgid "" |
5232 | "Configuration requires `%s', but binary is not installed properly (SUID bit " | ||
5233 | "not set). Option disabled.\n" | ||
4885 | msgstr "" | 5234 | msgstr "" |
4886 | 5235 | ||
4887 | #: src/nat/nat.c:1426 | 5236 | #: src/nat/nat.c:1468 |
4888 | msgid "Internal IP address not known, cannot use ICMP NAT traversal method\n" | 5237 | msgid "Internal IP address not known, cannot use ICMP NAT traversal method\n" |
4889 | msgstr "" | 5238 | msgstr "" |
4890 | 5239 | ||
4891 | #: src/nat/nat.c:1442 | 5240 | #: src/nat/nat.c:1484 |
4892 | #, c-format | 5241 | #, c-format |
4893 | msgid "Running gnunet-helper-nat-client %s %s %u\n" | 5242 | msgid "Running gnunet-helper-nat-client %s %s %u\n" |
4894 | msgstr "" | 5243 | msgstr "" |
4895 | 5244 | ||
4896 | #: src/nat/nat_mini.c:155 | 5245 | #: src/nat/nat.c:1569 |
4897 | msgid "no valid address was returned by `external-ip'" | 5246 | msgid "Operation Successful" |
4898 | msgstr "" | 5247 | msgstr "" |
4899 | 5248 | ||
4900 | #: src/nat/nat_mini.c:175 | 5249 | #: src/nat/nat.c:1571 |
4901 | msgid "`external-ip' command not found" | 5250 | msgid "Internal Failure (IPC, ...)" |
4902 | msgstr "" | 5251 | msgstr "" |
4903 | 5252 | ||
4904 | #: src/nat/nat_mini.c:201 | 5253 | #: src/nat/nat.c:1573 |
4905 | msgid "`external-ip' command not found\n" | 5254 | msgid "Failure in network subsystem, check permissions." |
5255 | msgstr "" | ||
5256 | |||
5257 | #: src/nat/nat.c:1575 | ||
5258 | msgid "Encountered timeout while performing operation" | ||
5259 | msgstr "" | ||
5260 | |||
5261 | #: src/nat/nat.c:1577 | ||
5262 | msgid "detected that we are offline" | ||
5263 | msgstr "" | ||
5264 | |||
5265 | #: src/nat/nat.c:1579 | ||
5266 | msgid "`upnpc` command not found" | ||
4906 | msgstr "" | 5267 | msgstr "" |
4907 | 5268 | ||
4908 | #: src/nat/nat_mini.c:366 | 5269 | #: src/nat/nat.c:1581 |
4909 | msgid "Failed to run `upnpc` command" | 5270 | msgid "Failed to run `upnpc` command" |
4910 | msgstr "" | 5271 | msgstr "" |
4911 | 5272 | ||
4912 | #: src/nat/nat_mini.c:512 | 5273 | #: src/nat/nat.c:1583 |
4913 | msgid "`upnpc' command took too long, process killed" | 5274 | msgid "`upnpc' command took too long, process killed" |
4914 | msgstr "" | 5275 | msgstr "" |
4915 | 5276 | ||
4916 | #: src/nat/nat_mini.c:540 | 5277 | #: src/nat/nat.c:1585 |
4917 | msgid "`upnpc' command failed to establish port mapping" | 5278 | msgid "`upnpc' command failed to establish port mapping" |
4918 | msgstr "" | 5279 | msgstr "" |
4919 | 5280 | ||
4920 | #: src/nat/nat_mini.c:604 | 5281 | #: src/nat/nat.c:1587 |
4921 | msgid "`upnpc' command not found\n" | 5282 | msgid "`external-ip' command not found" |
4922 | msgstr "" | 5283 | msgstr "" |
4923 | 5284 | ||
4924 | #: src/nat/nat_mini.c:608 | 5285 | #: src/nat/nat.c:1589 |
4925 | msgid "`upnpc` command not found" | 5286 | msgid "Failed to run `external-ip` command" |
5287 | msgstr "" | ||
5288 | |||
5289 | #: src/nat/nat.c:1591 | ||
5290 | msgid "`external-ip' command output invalid" | ||
5291 | msgstr "" | ||
5292 | |||
5293 | #: src/nat/nat.c:1593 | ||
5294 | msgid "no valid address was returned by `external-ip'" | ||
5295 | msgstr "" | ||
5296 | |||
5297 | #: src/nat/nat.c:1595 | ||
5298 | msgid "Could not determine interface with internal/local network address" | ||
5299 | msgstr "" | ||
5300 | |||
5301 | #: src/nat/nat.c:1597 | ||
5302 | msgid "No functioning gnunet-helper-nat-server installation found" | ||
5303 | msgstr "" | ||
5304 | |||
5305 | #: src/nat/nat.c:1599 | ||
5306 | msgid "NAT test could not be initialized" | ||
4926 | msgstr "" | 5307 | msgstr "" |
4927 | 5308 | ||
4928 | #: src/nat/nat_test.c:351 | 5309 | #: src/nat/nat.c:1601 |
5310 | msgid "NAT test timeout reached" | ||
5311 | msgstr "" | ||
5312 | |||
5313 | #: src/nat/nat.c:1603 | ||
5314 | msgid "could not register NAT" | ||
5315 | msgstr "" | ||
5316 | |||
5317 | #: src/nat/nat.c:1605 | ||
5318 | msgid "No working gnunet-helper-nat-client installation found" | ||
5319 | msgstr "" | ||
5320 | |||
5321 | #: src/nat/nat_mini.c:203 | ||
5322 | msgid "`external-ip' command not found\n" | ||
5323 | msgstr "" | ||
5324 | |||
5325 | #: src/nat/nat_mini.c:609 | ||
5326 | msgid "`upnpc' command not found\n" | ||
5327 | msgstr "" | ||
5328 | |||
5329 | #: src/nat/nat_test.c:360 | ||
4929 | msgid "Failed to connect to `gnunet-nat-server'\n" | 5330 | msgid "Failed to connect to `gnunet-nat-server'\n" |
4930 | msgstr "" | 5331 | msgstr "" |
4931 | 5332 | ||
4932 | #: src/nat/nat_test.c:423 | 5333 | #: src/nat/nat_test.c:462 |
4933 | #, c-format | 5334 | #, c-format |
4934 | msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n" | 5335 | msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n" |
4935 | msgstr "" | 5336 | msgstr "" |
4936 | 5337 | ||
5338 | #: src/nat/nat_test.c:497 | ||
5339 | msgid "NAT test failed to start NAT library\n" | ||
5340 | msgstr "" | ||
5341 | |||
4937 | #: src/nse/gnunet-nse.c:117 | 5342 | #: src/nse/gnunet-nse.c:117 |
4938 | msgid "NSE service is not running\n" | 5343 | msgid "NSE service is not running\n" |
4939 | msgstr "" | 5344 | msgstr "" |
@@ -4954,10 +5359,6 @@ msgstr "" | |||
4954 | msgid "name of the file for writing connection information and statistics" | 5359 | msgid "name of the file for writing connection information and statistics" |
4955 | msgstr "" | 5360 | msgstr "" |
4956 | 5361 | ||
4957 | #: src/nse/gnunet-nse-profiler.c:864 src/testbed/gnunet-testbed-profiler.c:306 | ||
4958 | msgid "name of the file with the login information for the testbed" | ||
4959 | msgstr "" | ||
4960 | |||
4961 | #: src/nse/gnunet-nse-profiler.c:867 | 5362 | #: src/nse/gnunet-nse-profiler.c:867 |
4962 | msgid "name of the file for writing the main results" | 5363 | msgid "name of the file for writing the main results" |
4963 | msgstr "" | 5364 | msgstr "" |
@@ -4974,8 +5375,8 @@ msgstr "" | |||
4974 | msgid "Measure quality and performance of the NSE service." | 5375 | msgid "Measure quality and performance of the NSE service." |
4975 | msgstr "" | 5376 | msgstr "" |
4976 | 5377 | ||
4977 | #: src/nse/gnunet-service-nse.c:1517 | 5378 | #: src/nse/gnunet-service-nse.c:1537 |
4978 | #: src/revocation/gnunet-service-revocation.c:789 src/util/gnunet-scrypt.c:248 | 5379 | #: src/revocation/gnunet-service-revocation.c:827 src/util/gnunet-scrypt.c:260 |
4979 | msgid "Value is too large.\n" | 5380 | msgid "Value is too large.\n" |
4980 | msgstr "" | 5381 | msgstr "" |
4981 | 5382 | ||
@@ -4995,58 +5396,59 @@ msgstr "" | |||
4995 | msgid "Failed to parse HELLO in file `%s'\n" | 5396 | msgid "Failed to parse HELLO in file `%s'\n" |
4996 | msgstr "" | 5397 | msgstr "" |
4997 | 5398 | ||
4998 | #: src/peerinfo/gnunet-service-peerinfo.c:466 | 5399 | #: src/peerinfo/gnunet-service-peerinfo.c:468 |
4999 | msgid "# peers known" | 5400 | msgid "# peers known" |
5000 | msgstr "" | 5401 | msgstr "" |
5001 | 5402 | ||
5002 | #: src/peerinfo/gnunet-service-peerinfo.c:503 | 5403 | #: src/peerinfo/gnunet-service-peerinfo.c:506 |
5003 | #, c-format | 5404 | #, c-format |
5004 | msgid "File `%s' in directory `%s' does not match naming convention. Removed.\n" | 5405 | msgid "" |
5406 | "File `%s' in directory `%s' does not match naming convention. Removed.\n" | ||
5005 | msgstr "" | 5407 | msgstr "" |
5006 | 5408 | ||
5007 | #: src/peerinfo/gnunet-service-peerinfo.c:653 | 5409 | #: src/peerinfo/gnunet-service-peerinfo.c:662 |
5008 | #, c-format | 5410 | #, c-format |
5009 | msgid "Scanning directory `%s'\n" | 5411 | msgid "Scanning directory `%s'\n" |
5010 | msgstr "" | 5412 | msgstr "" |
5011 | 5413 | ||
5012 | #: src/peerinfo/gnunet-service-peerinfo.c:658 | 5414 | #: src/peerinfo/gnunet-service-peerinfo.c:668 |
5013 | #, c-format | 5415 | #, c-format |
5014 | msgid "Still no peers found in `%s'!\n" | 5416 | msgid "Still no peers found in `%s'!\n" |
5015 | msgstr "" | 5417 | msgstr "" |
5016 | 5418 | ||
5017 | #: src/peerinfo/gnunet-service-peerinfo.c:994 | 5419 | #: src/peerinfo/gnunet-service-peerinfo.c:1037 |
5018 | #, c-format | 5420 | #, c-format |
5019 | msgid "Cleaning up directory `%s'\n" | 5421 | msgid "Cleaning up directory `%s'\n" |
5020 | msgstr "" | 5422 | msgstr "" |
5021 | 5423 | ||
5022 | #: src/peerinfo/gnunet-service-peerinfo.c:1287 | 5424 | #: src/peerinfo/gnunet-service-peerinfo.c:1358 |
5023 | #, c-format | 5425 | #, c-format |
5024 | msgid "Importing HELLOs from `%s'\n" | 5426 | msgid "Importing HELLOs from `%s'\n" |
5025 | msgstr "" | 5427 | msgstr "" |
5026 | 5428 | ||
5027 | #: src/peerinfo/gnunet-service-peerinfo.c:1298 | 5429 | #: src/peerinfo/gnunet-service-peerinfo.c:1371 |
5028 | msgid "Skipping import of included HELLOs\n" | 5430 | msgid "Skipping import of included HELLOs\n" |
5029 | msgstr "" | 5431 | msgstr "" |
5030 | 5432 | ||
5031 | #: src/peerinfo/peerinfo_api.c:236 | 5433 | #: src/peerinfo/peerinfo_api.c:237 |
5032 | msgid "aborted due to explicit disconnect request" | 5434 | msgid "aborted due to explicit disconnect request" |
5033 | msgstr "" | 5435 | msgstr "" |
5034 | 5436 | ||
5035 | #: src/peerinfo/peerinfo_api.c:356 | 5437 | #: src/peerinfo/peerinfo_api.c:363 |
5036 | msgid "failed to transmit request (service down?)" | 5438 | msgid "failed to transmit request (service down?)" |
5037 | msgstr "" | 5439 | msgstr "" |
5038 | 5440 | ||
5039 | #: src/peerinfo/peerinfo_api.c:506 | 5441 | #: src/peerinfo/peerinfo_api.c:518 |
5040 | msgid "Failed to receive response from `PEERINFO' service." | 5442 | msgid "Failed to receive response from `PEERINFO' service." |
5041 | msgstr "" | 5443 | msgstr "" |
5042 | 5444 | ||
5043 | #: src/peerinfo/peerinfo_api.c:547 src/peerinfo/peerinfo_api.c:566 | 5445 | #: src/peerinfo/peerinfo_api.c:562 src/peerinfo/peerinfo_api.c:585 |
5044 | #: src/peerinfo/peerinfo_api.c:581 src/peerinfo/peerinfo_api.c:592 | 5446 | #: src/peerinfo/peerinfo_api.c:602 src/peerinfo/peerinfo_api.c:615 |
5045 | #: src/peerinfo/peerinfo_api.c:603 | 5447 | #: src/peerinfo/peerinfo_api.c:630 |
5046 | msgid "Received invalid message from `PEERINFO' service." | 5448 | msgid "Received invalid message from `PEERINFO' service." |
5047 | msgstr "" | 5449 | msgstr "" |
5048 | 5450 | ||
5049 | #: src/peerinfo/peerinfo_api.c:678 | 5451 | #: src/peerinfo/peerinfo_api.c:719 |
5050 | msgid "Timeout transmitting iteration request to `PEERINFO' service." | 5452 | msgid "Timeout transmitting iteration request to `PEERINFO' service." |
5051 | msgstr "" | 5453 | msgstr "" |
5052 | 5454 | ||
@@ -5055,110 +5457,198 @@ msgstr "" | |||
5055 | msgid "Could not connect to `%s' service.\n" | 5457 | msgid "Could not connect to `%s' service.\n" |
5056 | msgstr "" | 5458 | msgstr "" |
5057 | 5459 | ||
5058 | #: src/peerinfo-tool/gnunet-peerinfo.c:232 | 5460 | #: src/peerinfo-tool/gnunet-peerinfo.c:245 |
5059 | #, c-format | 5461 | #, c-format |
5060 | msgid "%sPeer `%s'\n" | 5462 | msgid "%sPeer `%s'\n" |
5061 | msgstr "" | 5463 | msgstr "" |
5062 | 5464 | ||
5063 | #: src/peerinfo-tool/gnunet-peerinfo.c:239 | 5465 | #: src/peerinfo-tool/gnunet-peerinfo.c:252 |
5064 | #, c-format | 5466 | #, c-format |
5065 | msgid "\tExpires: %s \t %s\n" | 5467 | msgid "\tExpires: %s \t %s\n" |
5066 | msgstr "" | 5468 | msgstr "" |
5067 | 5469 | ||
5068 | #: src/peerinfo-tool/gnunet-peerinfo.c:428 | 5470 | #: src/peerinfo-tool/gnunet-peerinfo.c:301 |
5069 | #, c-format | 5471 | #, c-format |
5070 | msgid "Failure: Did not receive %s\n" | 5472 | msgid "Failure: Cannot convert address to string for peer `%s'\n" |
5071 | msgstr "" | 5473 | msgstr "" |
5072 | 5474 | ||
5073 | #: src/peerinfo-tool/gnunet-peerinfo.c:436 | 5475 | #: src/peerinfo-tool/gnunet-peerinfo.c:463 |
5074 | #, c-format | 5476 | #, c-format |
5075 | msgid "Failure: Received invalid %s\n" | 5477 | msgid "Failure: Received invalid %s\n" |
5076 | msgstr "" | 5478 | msgstr "" |
5077 | 5479 | ||
5078 | #: src/peerinfo-tool/gnunet-peerinfo.c:445 | 5480 | #: src/peerinfo-tool/gnunet-peerinfo.c:477 |
5079 | #, c-format | 5481 | #, c-format |
5080 | msgid "Failed to write HELLO with %u bytes to file `%s'\n" | 5482 | msgid "Failed to write HELLO with %u bytes to file `%s'\n" |
5081 | msgstr "" | 5483 | msgstr "" |
5082 | 5484 | ||
5083 | #: src/peerinfo-tool/gnunet-peerinfo.c:458 | 5485 | #: src/peerinfo-tool/gnunet-peerinfo.c:496 |
5084 | #, c-format | 5486 | #, c-format |
5085 | msgid "Wrote %s HELLO containing %u addresses with %u bytes to file `%s'\n" | 5487 | msgid "Wrote %s HELLO containing %u addresses with %u bytes to file `%s'\n" |
5086 | msgstr "" | 5488 | msgstr "" |
5087 | 5489 | ||
5088 | #: src/peerinfo-tool/gnunet-peerinfo.c:522 | 5490 | #: src/peerinfo-tool/gnunet-peerinfo.c:566 |
5089 | #, c-format | 5491 | #, c-format |
5090 | msgid "Failure adding HELLO: %s\n" | 5492 | msgid "Failure adding HELLO: %s\n" |
5091 | msgstr "" | 5493 | msgstr "" |
5092 | 5494 | ||
5093 | #: src/peerinfo-tool/gnunet-peerinfo.c:633 | 5495 | #: src/peerinfo-tool/gnunet-peerinfo.c:695 |
5094 | #, c-format | 5496 | #, c-format |
5095 | msgid "Service `%s' is not running, please start GNUnet\n" | 5497 | msgid "Failed to get my own HELLO from this peer!\n" |
5096 | msgstr "" | 5498 | msgstr "" |
5097 | 5499 | ||
5098 | #: src/peerinfo-tool/gnunet-peerinfo.c:654 src/util/gnunet-scrypt.c:224 | 5500 | #: src/peerinfo-tool/gnunet-peerinfo.c:727 |
5099 | #, c-format | 5501 | #, c-format |
5100 | msgid "Loading hostkey from `%s' failed.\n" | 5502 | msgid "Service `%s' is not running, please start GNUnet\n" |
5101 | msgstr "" | 5503 | msgstr "" |
5102 | 5504 | ||
5103 | #: src/peerinfo-tool/gnunet-peerinfo.c:745 | 5505 | #: src/peerinfo-tool/gnunet-peerinfo.c:841 |
5104 | #, c-format | 5506 | #, c-format |
5105 | msgid "I am peer `%s'.\n" | 5507 | msgid "I am peer `%s'.\n" |
5106 | msgstr "" | 5508 | msgstr "" |
5107 | 5509 | ||
5108 | #: src/peerinfo-tool/gnunet-peerinfo.c:789 | 5510 | #: src/peerinfo-tool/gnunet-peerinfo.c:882 |
5109 | msgid "don't resolve host names" | 5511 | msgid "don't resolve host names" |
5110 | msgstr "" | 5512 | msgstr "" |
5111 | 5513 | ||
5112 | #: src/peerinfo-tool/gnunet-peerinfo.c:792 | 5514 | #: src/peerinfo-tool/gnunet-peerinfo.c:885 |
5113 | msgid "output only the identity strings" | 5515 | msgid "output only the identity strings" |
5114 | msgstr "" | 5516 | msgstr "" |
5115 | 5517 | ||
5116 | #: src/peerinfo-tool/gnunet-peerinfo.c:795 | 5518 | #: src/peerinfo-tool/gnunet-peerinfo.c:888 |
5117 | msgid "include friend-only information" | 5519 | msgid "include friend-only information" |
5118 | msgstr "" | 5520 | msgstr "" |
5119 | 5521 | ||
5120 | #: src/peerinfo-tool/gnunet-peerinfo.c:798 | 5522 | #: src/peerinfo-tool/gnunet-peerinfo.c:891 |
5121 | msgid "output our own identity only" | 5523 | msgid "output our own identity only" |
5122 | msgstr "" | 5524 | msgstr "" |
5123 | 5525 | ||
5124 | #: src/peerinfo-tool/gnunet-peerinfo.c:801 | 5526 | #: src/peerinfo-tool/gnunet-peerinfo.c:894 |
5125 | msgid "list all known peers" | 5527 | msgid "list all known peers" |
5126 | msgstr "" | 5528 | msgstr "" |
5127 | 5529 | ||
5128 | #: src/peerinfo-tool/gnunet-peerinfo.c:804 | 5530 | #: src/peerinfo-tool/gnunet-peerinfo.c:897 |
5129 | msgid "dump hello to file" | 5531 | msgid "dump hello to file" |
5130 | msgstr "" | 5532 | msgstr "" |
5131 | 5533 | ||
5132 | #: src/peerinfo-tool/gnunet-peerinfo.c:807 | 5534 | #: src/peerinfo-tool/gnunet-peerinfo.c:900 |
5133 | msgid "also output HELLO uri(s)" | 5535 | msgid "also output HELLO uri(s)" |
5134 | msgstr "" | 5536 | msgstr "" |
5135 | 5537 | ||
5136 | #: src/peerinfo-tool/gnunet-peerinfo.c:810 | 5538 | #: src/peerinfo-tool/gnunet-peerinfo.c:903 |
5137 | msgid "add given HELLO uri to the database" | 5539 | msgid "add given HELLO uri to the database" |
5138 | msgstr "" | 5540 | msgstr "" |
5139 | 5541 | ||
5140 | #: src/peerinfo-tool/gnunet-peerinfo.c:821 | 5542 | #: src/peerinfo-tool/gnunet-peerinfo.c:917 |
5141 | msgid "Print information about peers." | 5543 | msgid "Print information about peers." |
5142 | msgstr "" | 5544 | msgstr "" |
5143 | 5545 | ||
5144 | #: src/peerinfo-tool/gnunet-peerinfo_plugins.c:105 | 5546 | #: src/peerinfo-tool/gnunet-peerinfo_plugins.c:105 |
5145 | #: src/transport/gnunet-service-transport_plugins.c:128 | 5547 | #: src/transport/gnunet-service-transport_plugins.c:168 |
5146 | #, c-format | 5548 | #, c-format |
5147 | msgid "Starting transport plugins `%s'\n" | 5549 | msgid "Starting transport plugins `%s'\n" |
5148 | msgstr "" | 5550 | msgstr "" |
5149 | 5551 | ||
5150 | #: src/peerinfo-tool/gnunet-peerinfo_plugins.c:109 | 5552 | #: src/peerinfo-tool/gnunet-peerinfo_plugins.c:109 |
5151 | #: src/transport/gnunet-service-transport_plugins.c:133 | 5553 | #: src/transport/gnunet-service-transport_plugins.c:173 |
5152 | #, c-format | 5554 | #, c-format |
5153 | msgid "Loading `%s' transport plugin\n" | 5555 | msgid "Loading `%s' transport plugin\n" |
5154 | msgstr "" | 5556 | msgstr "" |
5155 | 5557 | ||
5156 | #: src/peerinfo-tool/gnunet-peerinfo_plugins.c:129 | 5558 | #: src/peerinfo-tool/gnunet-peerinfo_plugins.c:129 |
5157 | #: src/transport/gnunet-service-transport_plugins.c:165 | 5559 | #: src/transport/gnunet-service-transport_plugins.c:208 |
5158 | #, c-format | 5560 | #, c-format |
5159 | msgid "Failed to load transport plugin for `%s'\n" | 5561 | msgid "Failed to load transport plugin for `%s'\n" |
5160 | msgstr "" | 5562 | msgstr "" |
5161 | 5563 | ||
5564 | #: src/peerstore/gnunet-peerstore.c:92 | ||
5565 | msgid "peerstore" | ||
5566 | msgstr "" | ||
5567 | |||
5568 | #: src/peerstore/gnunet-service-peerstore.c:384 | ||
5569 | msgid "Malformed iterate request.\n" | ||
5570 | msgstr "" | ||
5571 | |||
5572 | #: src/peerstore/gnunet-service-peerstore.c:391 | ||
5573 | msgid "Sub system not supplied in client iterate request.\n" | ||
5574 | msgstr "" | ||
5575 | |||
5576 | #: src/peerstore/gnunet-service-peerstore.c:451 | ||
5577 | msgid "Malformed store request from client\n" | ||
5578 | msgstr "" | ||
5579 | |||
5580 | #: src/peerstore/gnunet-service-peerstore.c:459 | ||
5581 | msgid "Full key not supplied in client store request\n" | ||
5582 | msgstr "" | ||
5583 | |||
5584 | #: src/peerstore/gnunet-service-peerstore.c:478 | ||
5585 | msgid "Failed to store requested value, database error." | ||
5586 | msgstr "" | ||
5587 | |||
5588 | #: src/peerstore/gnunet-service-peerstore.c:557 | ||
5589 | msgid "No database backend configured\n" | ||
5590 | msgstr "" | ||
5591 | |||
5592 | #: src/peerstore/gnunet-service-peerstore.c:568 | ||
5593 | #, c-format | ||
5594 | msgid "Could not load database backend `%s'\n" | ||
5595 | msgstr "" | ||
5596 | |||
5597 | #: src/peerstore/peerstore_api.c:329 src/sensor/sensor_api.c:179 | ||
5598 | #, c-format | ||
5599 | msgid "Received an error notification from MQ of type: %d\n" | ||
5600 | msgstr "" | ||
5601 | |||
5602 | #: src/peerstore/peerstore_api.c:375 | ||
5603 | msgid "timeout" | ||
5604 | msgstr "" | ||
5605 | |||
5606 | #: src/peerstore/peerstore_api.c:402 | ||
5607 | msgid "Iteration canceled due to reconnection." | ||
5608 | msgstr "" | ||
5609 | |||
5610 | #: src/peerstore/peerstore_api.c:681 | ||
5611 | msgid "Unexpected iteration response, this should not happen.\n" | ||
5612 | msgstr "" | ||
5613 | |||
5614 | #: src/peerstore/peerstore_api.c:692 | ||
5615 | msgid "Error communicating with `PEERSTORE' service." | ||
5616 | msgstr "" | ||
5617 | |||
5618 | #: src/peerstore/peerstore_api.c:711 | ||
5619 | msgid "Received a malformed response from service." | ||
5620 | msgstr "" | ||
5621 | |||
5622 | #: src/peerstore/peerstore_api.c:821 | ||
5623 | msgid "" | ||
5624 | "Problem receiving a watch response, no way to determine which request.\n" | ||
5625 | msgstr "" | ||
5626 | |||
5627 | #: src/peerstore/peerstore_api.c:833 | ||
5628 | msgid "Received a watch result for a non existing watch.\n" | ||
5629 | msgstr "" | ||
5630 | |||
5631 | #: src/peerstore/plugin_peerstore_sqlite.c:398 | ||
5632 | #: src/psycstore/plugin_psycstore_sqlite.c:286 | ||
5633 | #, c-format | ||
5634 | msgid "" | ||
5635 | "Error executing SQL query: %s\n" | ||
5636 | " %s\n" | ||
5637 | msgstr "" | ||
5638 | |||
5639 | #: src/peerstore/plugin_peerstore_sqlite.c:422 | ||
5640 | #: src/psycstore/plugin_psycstore_sqlite.c:263 | ||
5641 | #, c-format | ||
5642 | msgid "" | ||
5643 | "Error preparing SQL query: %s\n" | ||
5644 | " %s\n" | ||
5645 | msgstr "" | ||
5646 | |||
5647 | #: src/peerstore/plugin_peerstore_sqlite.c:504 | ||
5648 | #, c-format | ||
5649 | msgid "Unable to create indices: %s.\n" | ||
5650 | msgstr "" | ||
5651 | |||
5162 | #: src/postgres/postgres.c:59 | 5652 | #: src/postgres/postgres.c:59 |
5163 | #, c-format | 5653 | #, c-format |
5164 | msgid "`%s:%s' failed at %s:%d with error: %s" | 5654 | msgid "`%s:%s' failed at %s:%d with error: %s" |
@@ -5169,72 +5659,72 @@ msgstr "" | |||
5169 | msgid "Unable to initialize Postgres: %s" | 5659 | msgid "Unable to initialize Postgres: %s" |
5170 | msgstr "" | 5660 | msgstr "" |
5171 | 5661 | ||
5172 | #: src/psycstore/gnunet-service-psycstore.c:200 | 5662 | #: src/psycstore/gnunet-service-psycstore.c:260 |
5173 | msgid "Failed to store membership information!\n" | 5663 | msgid "Failed to store membership information!\n" |
5174 | msgstr "" | 5664 | msgstr "" |
5175 | 5665 | ||
5176 | #: src/psycstore/gnunet-service-psycstore.c:224 | 5666 | #: src/psycstore/gnunet-service-psycstore.c:284 |
5177 | msgid "Failed to test membership!\n" | 5667 | msgid "Failed to test membership!\n" |
5178 | msgstr "" | 5668 | msgstr "" |
5179 | 5669 | ||
5180 | #: src/psycstore/gnunet-service-psycstore.c:246 | 5670 | #: src/psycstore/gnunet-service-psycstore.c:306 |
5181 | msgid "Failed to store fragment!\n" | 5671 | msgid "Failed to store fragment!\n" |
5182 | msgstr "" | 5672 | msgstr "" |
5183 | 5673 | ||
5184 | #: src/psycstore/gnunet-service-psycstore.c:272 | 5674 | #: src/psycstore/gnunet-service-psycstore.c:362 |
5185 | msgid "Failed to get fragment!\n" | 5675 | msgid "Failed to get fragment!\n" |
5186 | msgstr "" | 5676 | msgstr "" |
5187 | 5677 | ||
5188 | #: src/psycstore/gnunet-service-psycstore.c:299 | 5678 | #: src/psycstore/gnunet-service-psycstore.c:402 |
5189 | msgid "Failed to get message!\n" | 5679 | msgid "Failed to get message!\n" |
5190 | msgstr "" | 5680 | msgstr "" |
5191 | 5681 | ||
5192 | #: src/psycstore/gnunet-service-psycstore.c:328 | 5682 | #: src/psycstore/gnunet-service-psycstore.c:433 |
5193 | msgid "Failed to get message fragment!\n" | 5683 | msgid "Failed to get message fragment!\n" |
5194 | msgstr "" | 5684 | msgstr "" |
5195 | 5685 | ||
5196 | #: src/psycstore/gnunet-service-psycstore.c:356 | 5686 | #: src/psycstore/gnunet-service-psycstore.c:461 |
5197 | msgid "Failed to get master counters!\n" | 5687 | msgid "Failed to get master counters!\n" |
5198 | msgstr "" | 5688 | msgstr "" |
5199 | 5689 | ||
5200 | #: src/psycstore/gnunet-service-psycstore.c:392 | 5690 | #: src/psycstore/gnunet-service-psycstore.c:497 |
5201 | #: src/psycstore/gnunet-service-psycstore.c:465 | 5691 | #: src/psycstore/gnunet-service-psycstore.c:570 |
5202 | msgid "Tried to set invalid state variable name!\n" | 5692 | msgid "Tried to set invalid state variable name!\n" |
5203 | msgstr "" | 5693 | msgstr "" |
5204 | 5694 | ||
5205 | #: src/psycstore/gnunet-service-psycstore.c:408 | 5695 | #: src/psycstore/gnunet-service-psycstore.c:513 |
5206 | msgid "Failed to begin modifying state!\n" | 5696 | msgid "Failed to begin modifying state!\n" |
5207 | msgstr "" | 5697 | msgstr "" |
5208 | 5698 | ||
5209 | #: src/psycstore/gnunet-service-psycstore.c:431 | 5699 | #: src/psycstore/gnunet-service-psycstore.c:536 |
5210 | #, c-format | 5700 | #, c-format |
5211 | msgid "Unknown operator: %c\n" | 5701 | msgid "Unknown operator: %c\n" |
5212 | msgstr "" | 5702 | msgstr "" |
5213 | 5703 | ||
5214 | #: src/psycstore/gnunet-service-psycstore.c:441 | 5704 | #: src/psycstore/gnunet-service-psycstore.c:546 |
5215 | msgid "Failed to end modifying state!\n" | 5705 | msgid "Failed to end modifying state!\n" |
5216 | msgstr "" | 5706 | msgstr "" |
5217 | 5707 | ||
5218 | #: src/psycstore/gnunet-service-psycstore.c:479 | 5708 | #: src/psycstore/gnunet-service-psycstore.c:584 |
5219 | msgid "Failed to begin synchronizing state!\n" | 5709 | msgid "Failed to begin synchronizing state!\n" |
5220 | msgstr "" | 5710 | msgstr "" |
5221 | 5711 | ||
5222 | #: src/psycstore/gnunet-service-psycstore.c:495 | 5712 | #: src/psycstore/gnunet-service-psycstore.c:600 |
5223 | msgid "Failed to end synchronizing state!\n" | 5713 | msgid "Failed to end synchronizing state!\n" |
5224 | msgstr "" | 5714 | msgstr "" |
5225 | 5715 | ||
5226 | #: src/psycstore/gnunet-service-psycstore.c:515 | 5716 | #: src/psycstore/gnunet-service-psycstore.c:620 |
5227 | #: src/psycstore/gnunet-service-psycstore.c:534 | 5717 | #: src/psycstore/gnunet-service-psycstore.c:639 |
5228 | msgid "Failed to reset state!\n" | 5718 | msgid "Failed to reset state!\n" |
5229 | msgstr "" | 5719 | msgstr "" |
5230 | 5720 | ||
5231 | #: src/psycstore/gnunet-service-psycstore.c:557 | 5721 | #: src/psycstore/gnunet-service-psycstore.c:662 |
5232 | #: src/psycstore/gnunet-service-psycstore.c:608 | 5722 | #: src/psycstore/gnunet-service-psycstore.c:713 |
5233 | msgid "Tried to get invalid state variable name!\n" | 5723 | msgid "Tried to get invalid state variable name!\n" |
5234 | msgstr "" | 5724 | msgstr "" |
5235 | 5725 | ||
5236 | #: src/psycstore/gnunet-service-psycstore.c:584 | 5726 | #: src/psycstore/gnunet-service-psycstore.c:689 |
5237 | #: src/psycstore/gnunet-service-psycstore.c:623 | 5727 | #: src/psycstore/gnunet-service-psycstore.c:728 |
5238 | msgid "Failed to get state variable!\n" | 5728 | msgid "Failed to get state variable!\n" |
5239 | msgstr "" | 5729 | msgstr "" |
5240 | 5730 | ||
@@ -5243,21 +5733,7 @@ msgstr "" | |||
5243 | msgid "`%s' failed at %s:%d with error: %s (%d)\n" | 5733 | msgid "`%s' failed at %s:%d with error: %s (%d)\n" |
5244 | msgstr "" | 5734 | msgstr "" |
5245 | 5735 | ||
5246 | #: src/psycstore/plugin_psycstore_sqlite.c:253 | 5736 | #: src/psycstore/plugin_psycstore_sqlite.c:1932 |
5247 | #, c-format | ||
5248 | msgid "" | ||
5249 | "Error preparing SQL query: %s\n" | ||
5250 | " %s\n" | ||
5251 | msgstr "" | ||
5252 | |||
5253 | #: src/psycstore/plugin_psycstore_sqlite.c:276 | ||
5254 | #, c-format | ||
5255 | msgid "" | ||
5256 | "Error executing SQL query: %s\n" | ||
5257 | " %s\n" | ||
5258 | msgstr "" | ||
5259 | |||
5260 | #: src/psycstore/plugin_psycstore_sqlite.c:1796 | ||
5261 | msgid "SQLite database running\n" | 5737 | msgid "SQLite database running\n" |
5262 | msgstr "" | 5738 | msgstr "" |
5263 | 5739 | ||
@@ -5290,7 +5766,7 @@ msgid "# DNS requests intercepted" | |||
5290 | msgstr "" | 5766 | msgstr "" |
5291 | 5767 | ||
5292 | #: src/pt/gnunet-daemon-pt.c:888 | 5768 | #: src/pt/gnunet-daemon-pt.c:888 |
5293 | msgid "# DNS requests dropped (DNS mesh channel down)" | 5769 | msgid "# DNS requests dropped (DNS cadet channel down)" |
5294 | msgstr "" | 5770 | msgstr "" |
5295 | 5771 | ||
5296 | #: src/pt/gnunet-daemon-pt.c:896 | 5772 | #: src/pt/gnunet-daemon-pt.c:896 |
@@ -5323,7 +5799,7 @@ msgid "%s service is lacking key configuration settings (%s). Exiting.\n" | |||
5323 | msgstr "" | 5799 | msgstr "" |
5324 | 5800 | ||
5325 | #: src/regex/gnunet-daemon-regexprofiler.c:380 | 5801 | #: src/regex/gnunet-daemon-regexprofiler.c:380 |
5326 | msgid "Daemon to announce regular expressions for the peer using mesh." | 5802 | msgid "Daemon to announce regular expressions for the peer using cadet." |
5327 | msgstr "" | 5803 | msgstr "" |
5328 | 5804 | ||
5329 | #: src/regex/gnunet-regex-profiler.c:1288 | 5805 | #: src/regex/gnunet-regex-profiler.c:1288 |
@@ -5400,6 +5876,14 @@ msgstr "" | |||
5400 | msgid "Regex `%s' is too long!\n" | 5876 | msgid "Regex `%s' is too long!\n" |
5401 | msgstr "" | 5877 | msgstr "" |
5402 | 5878 | ||
5879 | #: src/rest/gnunet-rest-server.c:766 | ||
5880 | msgid "listen on specified port (default: 7776)" | ||
5881 | msgstr "" | ||
5882 | |||
5883 | #: src/rest/gnunet-rest-server.c:783 | ||
5884 | msgid "GNUnet REST server" | ||
5885 | msgstr "" | ||
5886 | |||
5403 | #: src/revocation/gnunet-revocation.c:126 | 5887 | #: src/revocation/gnunet-revocation.c:126 |
5404 | #, c-format | 5888 | #, c-format |
5405 | msgid "Key `%s' is valid\n" | 5889 | msgid "Key `%s' is valid\n" |
@@ -5465,7 +5949,8 @@ msgid "Public key `%s' malformed\n" | |||
5465 | msgstr "" | 5949 | msgstr "" |
5466 | 5950 | ||
5467 | #: src/revocation/gnunet-revocation.c:421 | 5951 | #: src/revocation/gnunet-revocation.c:421 |
5468 | msgid "Testing and revoking at the same time is not allowed, only executing test.\n" | 5952 | msgid "" |
5953 | "Testing and revoking at the same time is not allowed, only executing test.\n" | ||
5469 | msgstr "" | 5954 | msgstr "" |
5470 | 5955 | ||
5471 | #: src/revocation/gnunet-revocation.c:441 | 5956 | #: src/revocation/gnunet-revocation.c:441 |
@@ -5486,7 +5971,9 @@ msgid "use NAME for the name of the revocation file" | |||
5486 | msgstr "" | 5971 | msgstr "" |
5487 | 5972 | ||
5488 | #: src/revocation/gnunet-revocation.c:507 | 5973 | #: src/revocation/gnunet-revocation.c:507 |
5489 | msgid "revoke the private key associated for the the private key associated with the ego NAME " | 5974 | msgid "" |
5975 | "revoke the private key associated for the the private key associated with " | ||
5976 | "the ego NAME " | ||
5490 | msgstr "" | 5977 | msgstr "" |
5491 | 5978 | ||
5492 | #: src/revocation/gnunet-revocation.c:510 | 5979 | #: src/revocation/gnunet-revocation.c:510 |
@@ -5497,349 +5984,453 @@ msgstr "" | |||
5497 | msgid "test if the public key KEY has been revoked" | 5984 | msgid "test if the public key KEY has been revoked" |
5498 | msgstr "" | 5985 | msgstr "" |
5499 | 5986 | ||
5500 | #: src/revocation/gnunet-service-revocation.c:272 | 5987 | #: src/revocation/gnunet-service-revocation.c:427 |
5501 | msgid "Duplicate revocation received from peer. Ignored.\n" | 5988 | msgid "# unsupported revocations received via set union" |
5502 | msgstr "" | 5989 | msgstr "" |
5503 | 5990 | ||
5504 | #: src/revocation/gnunet-service-revocation.c:434 | 5991 | #: src/revocation/gnunet-service-revocation.c:436 |
5992 | msgid "# revocation messages received via set union" | ||
5993 | msgstr "" | ||
5994 | |||
5995 | #: src/revocation/gnunet-service-revocation.c:441 | ||
5505 | #, c-format | 5996 | #, c-format |
5506 | msgid "Error computing revocation set union with %s\n" | 5997 | msgid "Error computing revocation set union with %s\n" |
5507 | msgstr "" | 5998 | msgstr "" |
5508 | 5999 | ||
5509 | #: src/revocation/gnunet-service-revocation.c:486 | 6000 | #: src/revocation/gnunet-service-revocation.c:445 |
6001 | msgid "# revocation set unions failed" | ||
6002 | msgstr "" | ||
6003 | |||
6004 | #: src/revocation/gnunet-service-revocation.c:454 | ||
6005 | msgid "# revocation set unions completed" | ||
6006 | msgstr "" | ||
6007 | |||
6008 | #: src/revocation/gnunet-service-revocation.c:493 | ||
6009 | #: src/revocation/gnunet-service-revocation.c:759 | ||
5510 | msgid "SET service crashed, terminating revocation service\n" | 6010 | msgid "SET service crashed, terminating revocation service\n" |
5511 | msgstr "" | 6011 | msgstr "" |
5512 | 6012 | ||
5513 | #: src/revocation/gnunet-service-revocation.c:812 | 6013 | #: src/revocation/gnunet-service-revocation.c:851 |
5514 | msgid "Could not open revocation database file!" | 6014 | msgid "Could not open revocation database file!" |
5515 | msgstr "" | 6015 | msgstr "" |
5516 | 6016 | ||
5517 | #: src/scalarproduct/gnunet-scalarproduct.c:225 | 6017 | #: src/rps/gnunet-rps.c:67 |
5518 | msgid "You must specify at least one message ID to check!\n" | 6018 | msgid "rps" |
5519 | msgstr "" | 6019 | msgstr "" |
5520 | 6020 | ||
5521 | #: src/scalarproduct/gnunet-scalarproduct.c:232 | 6021 | #: src/scalarproduct/gnunet-scalarproduct.c:221 |
5522 | msgid "This program needs a session identifier for comparing vectors.\n" | 6022 | msgid "You must specify at least one message ID to check!\n" |
5523 | msgstr "" | 6023 | msgstr "" |
5524 | 6024 | ||
5525 | #: src/scalarproduct/gnunet-scalarproduct.c:239 | 6025 | #: src/scalarproduct/gnunet-scalarproduct.c:228 |
5526 | msgid "Please give a session key for --input_key!\n" | 6026 | msgid "This program needs a session identifier for comparing vectors.\n" |
5527 | msgstr "" | 6027 | msgstr "" |
5528 | 6028 | ||
5529 | #: src/scalarproduct/gnunet-scalarproduct.c:251 | 6029 | #: src/scalarproduct/gnunet-scalarproduct.c:241 |
5530 | #, c-format | 6030 | #, c-format |
5531 | msgid "Tried to set initiator mode, as peer ID was given. However, `%s' is not a valid peer identifier.\n" | 6031 | msgid "" |
6032 | "Tried to set initiator mode, as peer ID was given. However, `%s' is not a " | ||
6033 | "valid peer identifier.\n" | ||
5532 | msgstr "" | 6034 | msgstr "" |
5533 | 6035 | ||
5534 | #: src/scalarproduct/gnunet-scalarproduct.c:278 | 6036 | #: src/scalarproduct/gnunet-scalarproduct.c:259 |
5535 | #: src/scalarproduct/gnunet-scalarproduct.c:314 | 6037 | msgid "Need elements to compute the scalarproduct, got none.\n" |
5536 | #, c-format | ||
5537 | msgid "Could not convert `%s' to int32_t.\n" | ||
5538 | msgstr "" | 6038 | msgstr "" |
5539 | 6039 | ||
5540 | #: src/scalarproduct/gnunet-scalarproduct.c:286 | 6040 | #: src/scalarproduct/gnunet-scalarproduct.c:281 |
5541 | msgid "Need elements to compute the vectorproduct, got none.\n" | 6041 | #, c-format |
6042 | msgid "Malformed input, could not parse `%s'\n" | ||
5542 | msgstr "" | 6043 | msgstr "" |
5543 | 6044 | ||
5544 | #: src/scalarproduct/gnunet-scalarproduct.c:346 | 6045 | #: src/scalarproduct/gnunet-scalarproduct.c:299 |
5545 | #, c-format | 6046 | #, c-format |
5546 | msgid "Could not convert `%s' to integer.\n" | 6047 | msgid "Could not convert `%s' to int64_t.\n" |
5547 | msgstr "" | 6048 | msgstr "" |
5548 | 6049 | ||
5549 | #: src/scalarproduct/gnunet-scalarproduct.c:407 | 6050 | #: src/scalarproduct/gnunet-scalarproduct.c:326 |
5550 | msgid "A comma separated list of elements to compare as vector with our remote peer." | 6051 | #, c-format |
6052 | msgid "Failed to initiate computation, were all keys unique?\n" | ||
5551 | msgstr "" | 6053 | msgstr "" |
5552 | 6054 | ||
5553 | #: src/scalarproduct/gnunet-scalarproduct.c:410 | 6055 | #: src/scalarproduct/gnunet-scalarproduct.c:350 |
5554 | msgid "A comma separated mask to select which elements should actually be compared." | 6056 | msgid "" |
6057 | "A comma separated list of elements to compare as vector with our remote peer." | ||
5555 | msgstr "" | 6058 | msgstr "" |
5556 | 6059 | ||
5557 | #: src/scalarproduct/gnunet-scalarproduct.c:413 | 6060 | #: src/scalarproduct/gnunet-scalarproduct.c:353 |
5558 | msgid "[Optional] peer to calculate our scalarproduct with. If this parameter is not given, the service will wait for a remote peer to compute the request." | 6061 | msgid "" |
6062 | "[Optional] peer to calculate our scalarproduct with. If this parameter is " | ||
6063 | "not given, the service will wait for a remote peer to compute the request." | ||
5559 | msgstr "" | 6064 | msgstr "" |
5560 | 6065 | ||
5561 | #: src/scalarproduct/gnunet-scalarproduct.c:416 | 6066 | #: src/scalarproduct/gnunet-scalarproduct.c:356 |
5562 | msgid "Transaction ID shared with peer." | 6067 | msgid "Transaction ID shared with peer." |
5563 | msgstr "" | 6068 | msgstr "" |
5564 | 6069 | ||
5565 | #: src/scalarproduct/gnunet-scalarproduct.c:425 | 6070 | #: src/scalarproduct/gnunet-scalarproduct.c:365 |
5566 | msgid "Calculate the Vectorproduct with a GNUnet peer." | 6071 | msgid "Calculate the Vectorproduct with a GNUnet peer." |
5567 | msgstr "" | 6072 | msgstr "" |
5568 | 6073 | ||
5569 | #: src/scalarproduct/gnunet-service-scalarproduct.c:541 | 6074 | #: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1419 |
5570 | #, c-format | 6075 | #: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1564 |
5571 | msgid "Client (%p) disconnected from us.\n" | 6076 | msgid "Connect to CADET failed\n" |
5572 | msgstr "" | 6077 | msgstr "" |
5573 | 6078 | ||
5574 | #: src/scalarproduct/gnunet-service-scalarproduct.c:613 | 6079 | #: src/scalarproduct/scalarproduct_api.c:296 |
5575 | #: src/scalarproduct/gnunet-service-scalarproduct.c:702 | 6080 | msgid "Keys given to SCALARPRODUCT not unique!\n" |
5576 | #, c-format | ||
5577 | msgid "Could not send message to client (%p)!\n" | ||
5578 | msgstr "" | 6081 | msgstr "" |
5579 | 6082 | ||
5580 | #: src/scalarproduct/gnunet-service-scalarproduct.c:619 | 6083 | #: src/secretsharing/gnunet-secretsharing-profiler.c:613 |
5581 | #, c-format | 6084 | msgid "dkg start delay" |
5582 | msgid "Sending session-end notification to client (%p) for session %s\n" | ||
5583 | msgstr "" | 6085 | msgstr "" |
5584 | 6086 | ||
5585 | #: src/scalarproduct/gnunet-service-scalarproduct.c:712 | 6087 | #: src/secretsharing/gnunet-secretsharing-profiler.c:616 |
5586 | #, c-format | 6088 | msgid "dkg timeout" |
5587 | msgid "Sent result to client (%p), this session (%s) has ended!\n" | 6089 | msgstr "" |
6090 | |||
6091 | #: src/secretsharing/gnunet-secretsharing-profiler.c:619 | ||
6092 | msgid "threshold" | ||
5588 | msgstr "" | 6093 | msgstr "" |
5589 | 6094 | ||
5590 | #: src/scalarproduct/gnunet-service-scalarproduct.c:766 | 6095 | #: src/secretsharing/gnunet-secretsharing-profiler.c:622 |
5591 | #: src/scalarproduct/gnunet-service-scalarproduct.c:855 | 6096 | msgid "also profile decryption" |
5592 | msgid "Could not send service-response message via mesh!)\n" | ||
5593 | msgstr "" | 6097 | msgstr "" |
5594 | 6098 | ||
5595 | #: src/scalarproduct/gnunet-service-scalarproduct.c:1028 | 6099 | #: src/sensordashboard/gnunet-service-sensordashboard.c:353 |
5596 | #, c-format | 6100 | #, c-format |
5597 | msgid "Failed to communicate with `%s', scalar product calculation aborted.\n" | 6101 | msgid "Error trying to send a message to peer `%s'.\n" |
5598 | msgstr "" | 6102 | msgstr "" |
5599 | 6103 | ||
5600 | #: src/scalarproduct/gnunet-service-scalarproduct.c:1099 | 6104 | #: src/sensor/gnunet-sensor.c:162 |
5601 | #: src/scalarproduct/gnunet-service-scalarproduct.c:1208 | 6105 | msgid "Retrieve information about all defined sensors" |
5602 | msgid "Transmitting service request.\n" | ||
5603 | msgstr "" | 6106 | msgstr "" |
5604 | 6107 | ||
5605 | #: src/scalarproduct/gnunet-service-scalarproduct.c:1108 | 6108 | #: src/sensor/gnunet-sensor.c:165 |
5606 | msgid "Could not send service-request multipart message to channel!\n" | 6109 | msgid "Retrieve information about a single sensor" |
5607 | msgstr "" | 6110 | msgstr "" |
5608 | 6111 | ||
5609 | #: src/scalarproduct/gnunet-service-scalarproduct.c:1147 | 6112 | #: src/sensor/gnunet-sensor.c:168 |
5610 | #, c-format | 6113 | msgid "Force an anomaly on a sensor, use only for testing" |
5611 | msgid "Successfully created new channel to peer (%s)!\n" | ||
5612 | msgstr "" | 6114 | msgstr "" |
5613 | 6115 | ||
5614 | #: src/scalarproduct/gnunet-service-scalarproduct.c:1217 | 6116 | #: src/sensor/gnunet-sensor.c:175 |
5615 | msgid "Could not send message to channel!\n" | 6117 | msgid "sensor" |
5616 | msgstr "" | 6118 | msgstr "" |
5617 | 6119 | ||
5618 | #: src/scalarproduct/gnunet-service-scalarproduct.c:1274 | 6120 | #: src/sensor/gnunet-sensor-profiler.c:729 |
5619 | msgid "Too short message received from client!\n" | 6121 | msgid "Invalid or missing number of peers. Set at least 2 peers.\n" |
5620 | msgstr "" | 6122 | msgstr "" |
5621 | 6123 | ||
5622 | #: src/scalarproduct/gnunet-service-scalarproduct.c:1287 | 6124 | #: src/sensor/gnunet-sensor-profiler.c:736 |
5623 | msgid "Invalid message received from client, session information incorrect!\n" | 6125 | msgid "Missing or invalid topology file.\n" |
5624 | msgstr "" | 6126 | msgstr "" |
5625 | 6127 | ||
5626 | #: src/scalarproduct/gnunet-service-scalarproduct.c:1298 | 6128 | #: src/sensor/gnunet-sensor-profiler.c:782 |
5627 | #, c-format | 6129 | msgid "Number of peers to run" |
5628 | msgid "Duplicate session information received, cannot create new session with key `%s'\n" | ||
5629 | msgstr "" | 6130 | msgstr "" |
5630 | 6131 | ||
5631 | #: src/scalarproduct/gnunet-service-scalarproduct.c:1318 | 6132 | #: src/sensor/gnunet-sensor-profiler.c:784 |
5632 | #, c-format | 6133 | msgid "Path to topology file" |
5633 | msgid "Got client-request-session with key %s, preparing channel to remote service.\n" | 6134 | msgstr "" |
6135 | |||
6136 | #: src/sensor/gnunet-sensor-profiler.c:787 | ||
6137 | msgid "Change the interval of running sensors to given value" | ||
5634 | msgstr "" | 6138 | msgstr "" |
5635 | 6139 | ||
5636 | #: src/scalarproduct/gnunet-service-scalarproduct.c:1354 | 6140 | #: src/sensor/gnunet-sensor-profiler.c:790 |
6141 | msgid "Number of peers to simulate anomalies on" | ||
6142 | msgstr "" | ||
6143 | |||
6144 | #: src/sensor/gnunet-sensor-profiler.c:797 | ||
6145 | msgid "Profiler for sensor service" | ||
6146 | msgstr "" | ||
6147 | |||
6148 | #: src/sensor/gnunet-service-sensor_analysis.c:204 | ||
6149 | msgid "Received an invalid sensor value." | ||
6150 | msgstr "" | ||
6151 | |||
6152 | #: src/sensor/gnunet-service-sensor_analysis.c:295 | ||
6153 | msgid "Analysis model not defined in configuration.\n" | ||
6154 | msgstr "" | ||
6155 | |||
6156 | #: src/sensor/gnunet-service-sensor_analysis.c:304 | ||
5637 | #, c-format | 6157 | #, c-format |
5638 | msgid "Creating new channel for session with key %s.\n" | 6158 | msgid "Could not load analysis model `%s'.\n" |
5639 | msgstr "" | 6159 | msgstr "" |
5640 | 6160 | ||
5641 | #: src/scalarproduct/gnunet-service-scalarproduct.c:1399 | 6161 | #: src/sensor/gnunet-service-sensor_analysis.c:312 |
6162 | msgid "Could not connect to peerstore service.\n" | ||
6163 | msgstr "" | ||
6164 | |||
6165 | #: src/sensor/gnunet-service-sensor_monitoring.c:233 | ||
6166 | msgid "Unknown value type expected by sensor, this should not happen.\n" | ||
6167 | msgstr "" | ||
6168 | |||
6169 | #: src/sensor/gnunet-service-sensor_monitoring.c:268 | ||
5642 | #, c-format | 6170 | #, c-format |
5643 | msgid "Got client-responder-session with key %s and a matching service-request-session set, processing.\n" | 6171 | msgid "Received an invalid value for sensor `%s': %s\n" |
5644 | msgstr "" | 6172 | msgstr "" |
5645 | 6173 | ||
5646 | #: src/scalarproduct/gnunet-service-scalarproduct.c:1409 | 6174 | #: src/sensor/gnunet-service-sensor_monitoring.c:347 |
5647 | #, c-format | 6175 | #, c-format |
5648 | msgid "Got client-responder-session with key %s but NO matching service-request-session set, queuing element for later use.\n" | 6176 | msgid "Sensor `%s': External process should not be a path, disabling sensor.\n" |
5649 | msgstr "" | 6177 | msgstr "" |
5650 | 6178 | ||
5651 | #: src/scalarproduct/gnunet-service-scalarproduct.c:1439 | 6179 | #: src/sensor/gnunet-service-sensor_monitoring.c:370 |
5652 | #, c-format | 6180 | #, c-format |
5653 | msgid "New incoming channel from peer %s.\n" | 6181 | msgid "" |
6182 | "Sensor `%s' process `%s' problem: binary doesn't exist or not executable\n" | ||
5654 | msgstr "" | 6183 | msgstr "" |
5655 | 6184 | ||
5656 | #: src/scalarproduct/gnunet-service-scalarproduct.c:1471 | 6185 | #: src/sensor/gnunet-service-sensor_monitoring.c:418 |
5657 | #, c-format | 6186 | #, c-format |
5658 | msgid "Peer disconnected, terminating session %s with peer (%s)\n" | 6187 | msgid "Sensor `%s' execution task already set, this should not happen\n" |
6188 | msgstr "" | ||
6189 | |||
6190 | #: src/sensor/gnunet-service-sensor_reporting.c:828 | ||
6191 | msgid "Double creation of proof-of-work, this should not happen.\n" | ||
5659 | msgstr "" | 6192 | msgstr "" |
5660 | 6193 | ||
5661 | #: src/scalarproduct/gnunet-service-scalarproduct.c:1672 | 6194 | #: src/sensor/gnunet-service-sensor_reporting.c:834 |
5662 | #: src/scalarproduct/gnunet-service-scalarproduct.c:1814 | 6195 | msgid "Failed to create pow and signature block.\n" |
6196 | msgstr "" | ||
6197 | |||
6198 | #: src/sensor/gnunet-service-sensor_reporting.c:1046 | ||
5663 | #, c-format | 6199 | #, c-format |
5664 | msgid "Got session with key %s and a matching element set, processing.\n" | 6200 | msgid "PEERSTORE error: %s.\n" |
6201 | msgstr "" | ||
6202 | |||
6203 | #: src/sensor/gnunet-service-sensor_reporting.c:1151 | ||
6204 | #: src/sensor/gnunet-service-sensor_reporting.c:1409 | ||
6205 | msgid "Failed to connect to CORE service.\n" | ||
6206 | msgstr "" | ||
6207 | |||
6208 | #: src/sensor/gnunet-service-sensor_reporting.c:1158 | ||
6209 | msgid "Peer identity received from CORE init doesn't match ours.\n" | ||
6210 | msgstr "" | ||
6211 | |||
6212 | #: src/sensor/gnunet-service-sensor_reporting.c:1398 | ||
6213 | msgid "Failed to connect to peerstore service.\n" | ||
5665 | msgstr "" | 6214 | msgstr "" |
5666 | 6215 | ||
5667 | #: src/scalarproduct/gnunet-service-scalarproduct.c:1681 | 6216 | #: src/sensor/gnunet-service-sensor_reporting.c:1419 |
5668 | #: src/scalarproduct/gnunet-service-scalarproduct.c:1821 | 6217 | #: src/sensor/gnunet-service-sensor_update.c:781 |
6218 | msgid "Failed to connect to CADET service.\n" | ||
6219 | msgstr "" | ||
6220 | |||
6221 | #: src/sensor/gnunet-service-sensor_reporting.c:1426 | ||
6222 | msgid "Failed to load my private key.\n" | ||
6223 | msgstr "" | ||
6224 | |||
6225 | #: src/sensor/gnunet-service-sensor_update.c:327 | ||
5669 | #, c-format | 6226 | #, c-format |
5670 | msgid "Got session with key %s without a matching element set, queueing.\n" | 6227 | msgid "Error trying to send a message to update point `%s'.\n" |
5671 | msgstr "" | 6228 | msgstr "" |
5672 | 6229 | ||
5673 | #: src/scalarproduct/gnunet-service-scalarproduct.c:1771 | 6230 | #: src/sensor/gnunet-service-sensor_update.c:418 |
5674 | #, c-format | 6231 | #, c-format |
5675 | msgid "Got message with duplicate session key (`%s'), ignoring service request.\n" | 6232 | msgid "Failed to connect to update point `%s'.\n" |
5676 | msgstr "" | 6233 | msgstr "" |
5677 | 6234 | ||
5678 | #: src/scalarproduct/gnunet-service-scalarproduct.c:2014 | 6235 | #: src/sensor/plugin_sensor_model_gaussian.c:203 |
5679 | msgid "Shutting down, initiating cleanup.\n" | 6236 | msgid "Missing `TRAINING_WINDOW' value in configuration.\n" |
5680 | msgstr "" | 6237 | msgstr "" |
5681 | 6238 | ||
5682 | #: src/scalarproduct/gnunet-service-scalarproduct.c:2100 | 6239 | #: src/sensor/plugin_sensor_model_gaussian.c:221 |
5683 | msgid "Connect to MESH failed\n" | 6240 | msgid "Missing `CONFIDENCE_INTERVAL' value in configuration.\n" |
5684 | msgstr "" | 6241 | msgstr "" |
5685 | 6242 | ||
5686 | #: src/scalarproduct/gnunet-service-scalarproduct.c:2104 | 6243 | #: src/sensor/plugin_sensor_model_gaussian.c:229 |
5687 | msgid "Mesh initialized\n" | 6244 | msgid "Missing `WEIGHT_INC' value in configuration.\n" |
5688 | msgstr "" | 6245 | msgstr "" |
5689 | 6246 | ||
5690 | #: src/scalarproduct/scalarproduct_api.c:246 | 6247 | #: src/sensor/sensor_api.c:296 |
5691 | msgid "# SUC responder result messages received" | 6248 | msgid "Iterate request canceled due to disconnection.\n" |
5692 | msgstr "" | 6249 | msgstr "" |
5693 | 6250 | ||
5694 | #: src/scalarproduct/scalarproduct_api.c:300 | 6251 | #: src/sensor/sensor_api.c:307 |
5695 | msgid "# bytes sent to scalarproduct" | 6252 | msgid "Force anomaly request canceled due to disconnection.\n" |
5696 | msgstr "" | 6253 | msgstr "" |
5697 | 6254 | ||
5698 | #: src/scalarproduct/scalarproduct_api.c:345 | 6255 | #: src/sensor/sensor_api.c:374 |
5699 | #: src/scalarproduct/scalarproduct_api.c:440 | 6256 | msgid "Timeout transmitting iteration request to `SENSOR' service." |
5700 | msgid "Failed to connect to the scalarproduct service\n" | ||
5701 | msgstr "" | 6257 | msgstr "" |
5702 | 6258 | ||
5703 | #: src/scalarproduct/scalarproduct_api.c:353 | 6259 | #: src/sensor/sensor_util_lib.c:107 |
5704 | #: src/scalarproduct/scalarproduct_api.c:448 | 6260 | msgid "Error reading sensor version\n" |
5705 | msgid "Failed to send a message to the statistics service\n" | ||
5706 | msgstr "" | 6261 | msgstr "" |
5707 | 6262 | ||
5708 | #: src/scalarproduct/scalarproduct_api.c:387 | 6263 | #: src/sensor/sensor_util_lib.c:116 |
5709 | #: src/scalarproduct/scalarproduct_api.c:485 | 6264 | msgid "Invalid sensor version number, format should be major.minor\n" |
5710 | msgid "Failed to send a message to the scalarproduct service\n" | ||
5711 | msgstr "" | 6265 | msgstr "" |
5712 | 6266 | ||
5713 | #: src/secretsharing/gnunet-secretsharing-profiler.c:538 | 6267 | #: src/sensor/sensor_util_lib.c:131 |
5714 | msgid "dkg start delay" | 6268 | msgid "Error reading sensor category\n" |
5715 | msgstr "" | 6269 | msgstr "" |
5716 | 6270 | ||
5717 | #: src/secretsharing/gnunet-secretsharing-profiler.c:541 | 6271 | #: src/sensor/sensor_util_lib.c:164 |
5718 | msgid "dkg timeout" | 6272 | msgid "Error reading sensor run interval\n" |
5719 | msgstr "" | 6273 | msgstr "" |
5720 | 6274 | ||
5721 | #: src/secretsharing/gnunet-secretsharing-profiler.c:544 | 6275 | #: src/sensor/sensor_util_lib.c:191 |
5722 | msgid "threshold" | 6276 | msgid "Error reading sensor source\n" |
5723 | msgstr "" | 6277 | msgstr "" |
5724 | 6278 | ||
5725 | #: src/secretsharing/gnunet-secretsharing-profiler.c:547 | 6279 | #: src/sensor/sensor_util_lib.c:206 |
5726 | msgid "also profile decryption" | 6280 | msgid "Error reading sensor gnunet-statistics source information\n" |
6281 | msgstr "" | ||
6282 | |||
6283 | #: src/sensor/sensor_util_lib.c:218 | ||
6284 | msgid "Error reading sensor process name\n" | ||
6285 | msgstr "" | ||
6286 | |||
6287 | #: src/sensor/sensor_util_lib.c:233 | ||
6288 | msgid "Error reading sensor expected datatype\n" | ||
6289 | msgstr "" | ||
6290 | |||
6291 | #: src/sensor/sensor_util_lib.c:241 | ||
6292 | msgid "Invalid expected datatype, gnunet-statistics returns uint64 values\n" | ||
5727 | msgstr "" | 6293 | msgstr "" |
5728 | 6294 | ||
5729 | #: src/set/gnunet-service-set.c:1431 | 6295 | #: src/sensor/sensor_util_lib.c:299 |
5730 | msgid "Could not connect to mesh service\n" | 6296 | #, c-format |
6297 | msgid "Failed to access sensor file: %s\n" | ||
5731 | msgstr "" | 6298 | msgstr "" |
5732 | 6299 | ||
5733 | #: src/set/gnunet-set-ibf-profiler.c:221 | 6300 | #: src/sensor/sensor_util_lib.c:308 |
6301 | #, c-format | ||
6302 | msgid "Failed to load sensor definition: %s\n" | ||
6303 | msgstr "" | ||
6304 | |||
6305 | #: src/sensor/sensor_util_lib.c:370 | ||
6306 | #, c-format | ||
6307 | msgid "Sensor `%s' already exists with same or newer version\n" | ||
6308 | msgstr "" | ||
6309 | |||
6310 | #: src/sensor/sensor_util_lib.c:387 | ||
6311 | #, c-format | ||
6312 | msgid "Error adding new sensor `%s' to global hashmap.\n" | ||
6313 | msgstr "" | ||
6314 | |||
6315 | #: src/sensor/sensor_util_lib.c:412 | ||
6316 | #, c-format | ||
6317 | msgid "Error loading sensor from file: %s\n" | ||
6318 | msgstr "" | ||
6319 | |||
6320 | #: src/set/gnunet-service-set.c:1531 | ||
6321 | msgid "Could not connect to cadet service\n" | ||
6322 | msgstr "" | ||
6323 | |||
6324 | #: src/set/gnunet-set-ibf-profiler.c:237 | ||
5734 | msgid "number of element in set A-B" | 6325 | msgid "number of element in set A-B" |
5735 | msgstr "" | 6326 | msgstr "" |
5736 | 6327 | ||
5737 | #: src/set/gnunet-set-ibf-profiler.c:224 | 6328 | #: src/set/gnunet-set-ibf-profiler.c:240 |
5738 | msgid "number of element in set B-A" | 6329 | msgid "number of element in set B-A" |
5739 | msgstr "" | 6330 | msgstr "" |
5740 | 6331 | ||
5741 | #: src/set/gnunet-set-ibf-profiler.c:227 | 6332 | #: src/set/gnunet-set-ibf-profiler.c:243 |
5742 | msgid "number of common elements in A and B" | 6333 | msgid "number of common elements in A and B" |
5743 | msgstr "" | 6334 | msgstr "" |
5744 | 6335 | ||
5745 | #: src/set/gnunet-set-ibf-profiler.c:230 | 6336 | #: src/set/gnunet-set-ibf-profiler.c:246 |
5746 | msgid "hash num" | 6337 | msgid "hash num" |
5747 | msgstr "" | 6338 | msgstr "" |
5748 | 6339 | ||
5749 | #: src/set/gnunet-set-ibf-profiler.c:233 | 6340 | #: src/set/gnunet-set-ibf-profiler.c:249 |
5750 | msgid "ibf size" | 6341 | msgid "ibf size" |
5751 | msgstr "" | 6342 | msgstr "" |
5752 | 6343 | ||
5753 | #: src/set/gnunet-set-profiler.c:295 | 6344 | #: src/set/gnunet-set-profiler.c:298 |
5754 | msgid "oeration to execute" | 6345 | msgid "oeration to execute" |
5755 | msgstr "" | 6346 | msgstr "" |
5756 | 6347 | ||
5757 | #: src/statistics/gnunet-service-statistics.c:280 | 6348 | #: src/statistics/gnunet-service-statistics.c:323 |
5758 | #, c-format | 6349 | #, c-format |
5759 | msgid "Loading %llu bytes of statistics from `%s'\n" | 6350 | msgid "Loading %llu bytes of statistics from `%s'\n" |
5760 | msgstr "" | 6351 | msgstr "" |
5761 | 6352 | ||
5762 | #: src/statistics/gnunet-service-statistics.c:346 | 6353 | #: src/statistics/gnunet-service-statistics.c:434 |
5763 | #, c-format | 6354 | #, c-format |
5764 | msgid "Wrote %llu bytes of statistics to `%s'\n" | 6355 | msgid "Wrote %llu bytes of statistics to `%s'\n" |
5765 | msgstr "" | 6356 | msgstr "" |
5766 | 6357 | ||
5767 | #: src/statistics/gnunet-statistics.c:140 | 6358 | #: src/statistics/gnunet-statistics.c:145 |
5768 | msgid "Failed to obtain statistics.\n" | 6359 | msgid "Failed to obtain statistics.\n" |
5769 | msgstr "" | 6360 | msgstr "" |
5770 | 6361 | ||
5771 | #: src/statistics/gnunet-statistics.c:142 | 6362 | #: src/statistics/gnunet-statistics.c:148 |
5772 | #, c-format | 6363 | #, c-format |
5773 | msgid "Failed to obtain statistics from host `%s:%llu'\n" | 6364 | msgid "Failed to obtain statistics from host `%s:%llu'\n" |
5774 | msgstr "" | 6365 | msgstr "" |
5775 | 6366 | ||
5776 | #: src/statistics/gnunet-statistics.c:189 | 6367 | #: src/statistics/gnunet-statistics.c:198 |
5777 | msgid "Missing argument: subsystem \n" | 6368 | msgid "Missing argument: subsystem \n" |
5778 | msgstr "" | 6369 | msgstr "" |
5779 | 6370 | ||
5780 | #: src/statistics/gnunet-statistics.c:195 | 6371 | #: src/statistics/gnunet-statistics.c:204 |
5781 | msgid "Missing argument: name\n" | 6372 | msgid "Missing argument: name\n" |
5782 | msgstr "" | 6373 | msgstr "" |
5783 | 6374 | ||
5784 | #: src/statistics/gnunet-statistics.c:226 | 6375 | #: src/statistics/gnunet-statistics.c:235 |
5785 | #, c-format | 6376 | #, c-format |
5786 | msgid "No subsystem or name given\n" | 6377 | msgid "No subsystem or name given\n" |
5787 | msgstr "" | 6378 | msgstr "" |
5788 | 6379 | ||
5789 | #: src/statistics/gnunet-statistics.c:234 | 6380 | #: src/statistics/gnunet-statistics.c:243 |
5790 | #, c-format | 6381 | #, c-format |
5791 | msgid "Failed to initialize watch routine\n" | 6382 | msgid "Failed to initialize watch routine\n" |
5792 | msgstr "" | 6383 | msgstr "" |
5793 | 6384 | ||
5794 | #: src/statistics/gnunet-statistics.c:261 | 6385 | #: src/statistics/gnunet-statistics.c:269 |
5795 | #, c-format | 6386 | #, c-format |
5796 | msgid "Trying to connect to remote host, but service `%s' is not running\n" | 6387 | msgid "Trying to connect to remote host, but service `%s' is not running\n" |
5797 | msgstr "" | 6388 | msgstr "" |
5798 | 6389 | ||
5799 | #: src/statistics/gnunet-statistics.c:269 | 6390 | #: src/statistics/gnunet-statistics.c:282 |
5800 | #, c-format | 6391 | #, c-format |
5801 | msgid "A port is required to connect to host `%s'\n" | 6392 | msgid "A port is required to connect to host `%s'\n" |
5802 | msgstr "" | 6393 | msgstr "" |
5803 | 6394 | ||
5804 | #: src/statistics/gnunet-statistics.c:276 | 6395 | #: src/statistics/gnunet-statistics.c:290 |
5805 | #, c-format | 6396 | #, c-format |
5806 | msgid "A port has to be between 1 and 65535 to connect to host `%s'\n" | 6397 | msgid "A port has to be between 1 and 65535 to connect to host `%s'\n" |
5807 | msgstr "" | 6398 | msgstr "" |
5808 | 6399 | ||
5809 | #: src/statistics/gnunet-statistics.c:308 | 6400 | #: src/statistics/gnunet-statistics.c:323 |
5810 | #, c-format | 6401 | #, c-format |
5811 | msgid "Invalid argument `%s'\n" | 6402 | msgid "Invalid argument `%s'\n" |
5812 | msgstr "" | 6403 | msgstr "" |
5813 | 6404 | ||
5814 | #: src/statistics/gnunet-statistics.c:334 | 6405 | #: src/statistics/gnunet-statistics.c:349 |
5815 | msgid "limit output to statistics for the given NAME" | 6406 | msgid "limit output to statistics for the given NAME" |
5816 | msgstr "" | 6407 | msgstr "" |
5817 | 6408 | ||
5818 | #: src/statistics/gnunet-statistics.c:337 | 6409 | #: src/statistics/gnunet-statistics.c:352 |
5819 | msgid "make the value being set persistent" | 6410 | msgid "make the value being set persistent" |
5820 | msgstr "" | 6411 | msgstr "" |
5821 | 6412 | ||
5822 | #: src/statistics/gnunet-statistics.c:340 | 6413 | #: src/statistics/gnunet-statistics.c:355 |
5823 | msgid "limit output to the given SUBSYSTEM" | 6414 | msgid "limit output to the given SUBSYSTEM" |
5824 | msgstr "" | 6415 | msgstr "" |
5825 | 6416 | ||
5826 | #: src/statistics/gnunet-statistics.c:343 | 6417 | #: src/statistics/gnunet-statistics.c:358 |
5827 | msgid "just print the statistics value" | 6418 | msgid "just print the statistics value" |
5828 | msgstr "" | 6419 | msgstr "" |
5829 | 6420 | ||
5830 | #: src/statistics/gnunet-statistics.c:346 | 6421 | #: src/statistics/gnunet-statistics.c:361 |
5831 | msgid "watch value continuously" | 6422 | msgid "watch value continuously" |
5832 | msgstr "" | 6423 | msgstr "" |
5833 | 6424 | ||
5834 | #: src/statistics/gnunet-statistics.c:349 | 6425 | #: src/statistics/gnunet-statistics.c:364 |
5835 | msgid "connect to remote host" | 6426 | msgid "connect to remote host" |
5836 | msgstr "" | 6427 | msgstr "" |
5837 | 6428 | ||
5838 | #: src/statistics/gnunet-statistics.c:352 | 6429 | #: src/statistics/gnunet-statistics.c:367 |
5839 | msgid "port for remote host" | 6430 | msgid "port for remote host" |
5840 | msgstr "" | 6431 | msgstr "" |
5841 | 6432 | ||
5842 | #: src/statistics/gnunet-statistics.c:364 | 6433 | #: src/statistics/gnunet-statistics.c:379 |
5843 | msgid "Print statistics about GNUnet operations." | 6434 | msgid "Print statistics about GNUnet operations." |
5844 | msgstr "" | 6435 | msgstr "" |
5845 | 6436 | ||
@@ -5848,61 +6439,64 @@ msgid "Could not save some persistent statistics\n" | |||
5848 | msgstr "" | 6439 | msgstr "" |
5849 | 6440 | ||
5850 | #: src/statistics/statistics_api.c:1090 | 6441 | #: src/statistics/statistics_api.c:1090 |
5851 | msgid "Failed to receive acknowledgement from statistics service, some statistics might have been lost!\n" | 6442 | msgid "" |
6443 | "Failed to receive acknowledgement from statistics service, some statistics " | ||
6444 | "might have been lost!\n" | ||
5852 | msgstr "" | 6445 | msgstr "" |
5853 | 6446 | ||
5854 | #: src/testbed/generate-underlay-topology.c:223 | 6447 | #: src/testbed/generate-underlay-topology.c:225 |
5855 | msgid "Need atleast 2 arguments\n" | 6448 | msgid "Need at least 2 arguments\n" |
5856 | msgstr "" | 6449 | msgstr "" |
5857 | 6450 | ||
5858 | #: src/testbed/generate-underlay-topology.c:228 | 6451 | #: src/testbed/generate-underlay-topology.c:230 |
5859 | msgid "Database filename missing\n" | 6452 | msgid "Database filename missing\n" |
5860 | msgstr "" | 6453 | msgstr "" |
5861 | 6454 | ||
5862 | #: src/testbed/generate-underlay-topology.c:235 | 6455 | #: src/testbed/generate-underlay-topology.c:237 |
5863 | msgid "Topology string missing\n" | 6456 | msgid "Topology string missing\n" |
5864 | msgstr "" | 6457 | msgstr "" |
5865 | 6458 | ||
5866 | #: src/testbed/generate-underlay-topology.c:240 | 6459 | #: src/testbed/generate-underlay-topology.c:242 |
5867 | #, c-format | 6460 | #, c-format |
5868 | msgid "Invalid topology: %s\n" | 6461 | msgid "Invalid topology: %s\n" |
5869 | msgstr "" | 6462 | msgstr "" |
5870 | 6463 | ||
5871 | #: src/testbed/generate-underlay-topology.c:252 | 6464 | #: src/testbed/generate-underlay-topology.c:255 |
5872 | #, c-format | 6465 | #, c-format |
5873 | msgid "An argument is missing for given topology `%s'\n" | 6466 | msgid "An argument is missing for given topology `%s'\n" |
5874 | msgstr "" | 6467 | msgstr "" |
5875 | 6468 | ||
5876 | #: src/testbed/generate-underlay-topology.c:258 | 6469 | #: src/testbed/generate-underlay-topology.c:261 |
5877 | #, c-format | 6470 | #, c-format |
5878 | msgid "Invalid argument `%s' given as topology argument\n" | 6471 | msgid "Invalid argument `%s' given as topology argument\n" |
5879 | msgstr "" | 6472 | msgstr "" |
5880 | 6473 | ||
5881 | #: src/testbed/generate-underlay-topology.c:266 | 6474 | #: src/testbed/generate-underlay-topology.c:269 |
5882 | #, c-format | 6475 | #, c-format |
5883 | msgid "Filename argument missing for topology `%s'\n" | 6476 | msgid "Filename argument missing for topology `%s'\n" |
5884 | msgstr "" | 6477 | msgstr "" |
5885 | 6478 | ||
5886 | #: src/testbed/generate-underlay-topology.c:280 | 6479 | #: src/testbed/generate-underlay-topology.c:283 |
5887 | #, c-format | 6480 | #, c-format |
5888 | msgid "Second argument for topology `%s' is missing\n" | 6481 | msgid "Second argument for topology `%s' is missing\n" |
5889 | msgstr "" | 6482 | msgstr "" |
5890 | 6483 | ||
5891 | #: src/testbed/generate-underlay-topology.c:286 | 6484 | #: src/testbed/generate-underlay-topology.c:289 |
5892 | #, c-format | 6485 | #, c-format |
5893 | msgid "Invalid argument `%s'; expecting unsigned int\n" | 6486 | msgid "Invalid argument `%s'; expecting unsigned int\n" |
5894 | msgstr "" | 6487 | msgstr "" |
5895 | 6488 | ||
5896 | #: src/testbed/generate-underlay-topology.c:335 | 6489 | #: src/testbed/generate-underlay-topology.c:338 |
5897 | #: src/testbed/gnunet-testbed-profiler.c:293 | 6490 | #: src/testbed/gnunet-testbed-profiler.c:293 |
5898 | msgid "create COUNT number of peers" | 6491 | msgid "create COUNT number of peers" |
5899 | msgstr "" | 6492 | msgstr "" |
5900 | 6493 | ||
5901 | #: src/testbed/generate-underlay-topology.c:344 | 6494 | #: src/testbed/generate-underlay-topology.c:347 |
5902 | msgid "" | 6495 | msgid "" |
5903 | "Generates SQLite3 database representing a given underlay topology.\n" | 6496 | "Generates SQLite3 database representing a given underlay topology.\n" |
5904 | "Usage: gnunet-underlay-topology [OPTIONS] db-filename TOPO [TOPOOPTS]\n" | 6497 | "Usage: gnunet-underlay-topology [OPTIONS] db-filename TOPO [TOPOOPTS]\n" |
5905 | "The following options are available for TOPO followed by TOPOOPTS if applicable:\n" | 6498 | "The following options are available for TOPO followed by TOPOOPTS if " |
6499 | "applicable:\n" | ||
5906 | "\t LINE\n" | 6500 | "\t LINE\n" |
5907 | "\t RING\n" | 6501 | "\t RING\n" |
5908 | "\t RANDOM <num_rnd_links>\n" | 6502 | "\t RANDOM <num_rnd_links>\n" |
@@ -5917,30 +6511,34 @@ msgid "" | |||
5917 | "\t cap: the maximum number of links a node can have\n" | 6511 | "\t cap: the maximum number of links a node can have\n" |
5918 | "\t m: the number of links a node should have while joining the network\n" | 6512 | "\t m: the number of links a node should have while joining the network\n" |
5919 | "\t filename: the path of the file which contains topology information\n" | 6513 | "\t filename: the path of the file which contains topology information\n" |
5920 | "NOTE: the format of the above file is descibed here: https://www.gnunet.org/content/topology-file-format\n" | 6514 | "NOTE: the format of the above file is descibed here: https://www.gnunet.org/" |
6515 | "content/topology-file-format\n" | ||
5921 | msgstr "" | 6516 | msgstr "" |
5922 | 6517 | ||
5923 | #: src/testbed/gnunet-daemon-latency-logger.c:325 | 6518 | #: src/testbed/gnunet-daemon-latency-logger.c:323 |
5924 | msgid "Daemon to log latency values of connections to neighbours" | 6519 | msgid "Daemon to log latency values of connections to neighbours" |
5925 | msgstr "" | 6520 | msgstr "" |
5926 | 6521 | ||
5927 | #: src/testbed/gnunet-daemon-testbed-blacklist.c:264 | 6522 | #: src/testbed/gnunet-daemon-testbed-blacklist.c:264 |
5928 | msgid "Daemon to restrict incoming transport layer connections during testbed deployments" | 6523 | msgid "" |
6524 | "Daemon to restrict incoming transport layer connections during testbed " | ||
6525 | "deployments" | ||
5929 | msgstr "" | 6526 | msgstr "" |
5930 | 6527 | ||
5931 | #: src/testbed/gnunet-daemon-testbed-underlay.c:235 src/testing/list-keys.c:50 | 6528 | #: src/testbed/gnunet-daemon-testbed-underlay.c:235 src/testing/list-keys.c:50 |
5932 | #: src/testing/testing.c:293 src/util/gnunet-ecc.c:217 | 6529 | #: src/testing/testing.c:293 src/util/gnunet-ecc.c:295 |
5933 | #, c-format | 6530 | #, c-format |
5934 | msgid "Incorrect hostkey file format: %s\n" | 6531 | msgid "Incorrect hostkey file format: %s\n" |
5935 | msgstr "" | 6532 | msgstr "" |
5936 | 6533 | ||
5937 | #: src/testbed/gnunet-daemon-testbed-underlay.c:474 | 6534 | #: src/testbed/gnunet-daemon-testbed-underlay.c:476 |
5938 | msgid "Daemon to restrict underlay network in testbed deployments" | 6535 | msgid "Daemon to restrict underlay network in testbed deployments" |
5939 | msgstr "" | 6536 | msgstr "" |
5940 | 6537 | ||
5941 | #: src/testbed/gnunet-service-testbed_cpustatus.c:730 | 6538 | #: src/testbed/gnunet-service-testbed_cpustatus.c:730 |
5942 | #, c-format | 6539 | #, c-format |
5943 | msgid "Cannot open %s for writing load statistics. Not logging load statistics\n" | 6540 | msgid "" |
6541 | "Cannot open %s for writing load statistics. Not logging load statistics\n" | ||
5944 | msgstr "" | 6542 | msgstr "" |
5945 | 6543 | ||
5946 | #: src/testbed/gnunet-service-testbed_peers.c:1015 | 6544 | #: src/testbed/gnunet-service-testbed_peers.c:1015 |
@@ -5965,17 +6563,15 @@ msgstr "" | |||
5965 | msgid "Spawning process `%s'\n" | 6563 | msgid "Spawning process `%s'\n" |
5966 | msgstr "" | 6564 | msgstr "" |
5967 | 6565 | ||
5968 | #: src/testbed/gnunet-testbed-profiler.c:267 | ||
5969 | #, c-format | ||
5970 | msgid "Exiting as the number of peers is %u\n" | ||
5971 | msgstr "" | ||
5972 | |||
5973 | #: src/testbed/gnunet-testbed-profiler.c:296 | 6566 | #: src/testbed/gnunet-testbed-profiler.c:296 |
5974 | msgid "tolerate COUNT number of continious timeout failures" | 6567 | msgid "tolerate COUNT number of continious timeout failures" |
5975 | msgstr "" | 6568 | msgstr "" |
5976 | 6569 | ||
5977 | #: src/testbed/gnunet-testbed-profiler.c:299 | 6570 | #: src/testbed/gnunet-testbed-profiler.c:299 |
5978 | msgid "run profiler in non-interactive mode where upon testbed setup the profiler does not wait for a keystroke but continues to run until a termination signal is received" | 6571 | msgid "" |
6572 | "run profiler in non-interactive mode where upon testbed setup the profiler " | ||
6573 | "does not wait for a keystroke but continues to run until a termination " | ||
6574 | "signal is received" | ||
5979 | msgstr "" | 6575 | msgstr "" |
5980 | 6576 | ||
5981 | #: src/testbed/testbed_api_hosts.c:415 | 6577 | #: src/testbed/testbed_api_hosts.c:415 |
@@ -6047,12 +6643,16 @@ msgstr "" | |||
6047 | 6643 | ||
6048 | #: src/testbed/testbed_api_testbed.c:1349 | 6644 | #: src/testbed/testbed_api_testbed.c:1349 |
6049 | #, c-format | 6645 | #, c-format |
6050 | msgid "Maximum number of edges a peer can have in a scale free topology cannot be more than %u. Given `%s = %llu'" | 6646 | msgid "" |
6647 | "Maximum number of edges a peer can have in a scale free topology cannot be " | ||
6648 | "more than %u. Given `%s = %llu'" | ||
6051 | msgstr "" | 6649 | msgstr "" |
6052 | 6650 | ||
6053 | #: src/testbed/testbed_api_testbed.c:1365 | 6651 | #: src/testbed/testbed_api_testbed.c:1365 |
6054 | #, c-format | 6652 | #, c-format |
6055 | msgid "The number of edges that can established when adding a new node to scale free topology cannot be more than %u. Given `%s = %llu'" | 6653 | msgid "" |
6654 | "The number of edges that can established when adding a new node to scale " | ||
6655 | "free topology cannot be more than %u. Given `%s = %llu'" | ||
6056 | msgstr "" | 6656 | msgstr "" |
6057 | 6657 | ||
6058 | #: src/testbed/testbed_api_topology.c:960 | 6658 | #: src/testbed/testbed_api_topology.c:960 |
@@ -6116,7 +6716,9 @@ msgid "extract hostkey file from pre-computed hostkey list" | |||
6116 | msgstr "" | 6716 | msgstr "" |
6117 | 6717 | ||
6118 | #: src/testing/gnunet-testing.c:359 | 6718 | #: src/testing/gnunet-testing.c:359 |
6119 | msgid "number of unique configuration files to create, or number of the hostkey to extract" | 6719 | msgid "" |
6720 | "number of unique configuration files to create, or number of the hostkey to " | ||
6721 | "extract" | ||
6120 | msgstr "" | 6722 | msgstr "" |
6121 | 6723 | ||
6122 | #: src/testing/gnunet-testing.c:361 | 6724 | #: src/testing/gnunet-testing.c:361 |
@@ -6151,7 +6753,9 @@ msgstr "" | |||
6151 | 6753 | ||
6152 | #: src/testing/testing.c:1157 | 6754 | #: src/testing/testing.c:1157 |
6153 | #, c-format | 6755 | #, c-format |
6154 | msgid "You attempted to create a testbed with more than %u hosts. Please precompute more hostkeys first.\n" | 6756 | msgid "" |
6757 | "You attempted to create a testbed with more than %u hosts. Please " | ||
6758 | "precompute more hostkeys first.\n" | ||
6155 | msgstr "" | 6759 | msgstr "" |
6156 | 6760 | ||
6157 | #: src/testing/testing.c:1166 | 6761 | #: src/testing/testing.c:1166 |
@@ -6202,457 +6806,481 @@ msgstr "" | |||
6202 | msgid "Directory for file `%s' does not seem to be writable.\n" | 6806 | msgid "Directory for file `%s' does not seem to be writable.\n" |
6203 | msgstr "" | 6807 | msgstr "" |
6204 | 6808 | ||
6205 | #: src/topology/gnunet-daemon-topology.c:255 | 6809 | #: src/topology/gnunet-daemon-topology.c:265 |
6206 | msgid "# peers blacklisted" | 6810 | msgid "# peers blacklisted" |
6207 | msgstr "" | 6811 | msgstr "" |
6208 | 6812 | ||
6209 | #: src/topology/gnunet-daemon-topology.c:388 | 6813 | #: src/topology/gnunet-daemon-topology.c:406 |
6210 | msgid "# connect requests issued to transport" | 6814 | msgid "# connect requests issued to transport" |
6211 | msgstr "" | 6815 | msgstr "" |
6212 | 6816 | ||
6213 | #: src/topology/gnunet-daemon-topology.c:728 | 6817 | #: src/topology/gnunet-daemon-topology.c:756 |
6214 | #: src/topology/gnunet-daemon-topology.c:813 | 6818 | #: src/topology/gnunet-daemon-topology.c:840 |
6215 | msgid "# friends connected" | 6819 | msgid "# friends connected" |
6216 | msgstr "" | 6820 | msgstr "" |
6217 | 6821 | ||
6218 | #: src/topology/gnunet-daemon-topology.c:993 | 6822 | #: src/topology/gnunet-daemon-topology.c:1020 |
6219 | msgid "Failed to connect to core service, can not manage topology!\n" | 6823 | msgid "Failed to connect to core service, can not manage topology!\n" |
6220 | msgstr "" | 6824 | msgstr "" |
6221 | 6825 | ||
6222 | #: src/topology/gnunet-daemon-topology.c:1022 | 6826 | #: src/topology/gnunet-daemon-topology.c:1049 |
6223 | #, c-format | 6827 | #, c-format |
6224 | msgid "Found myself `%s' in friend list (useless, ignored)\n" | 6828 | msgid "Found myself `%s' in friend list (useless, ignored)\n" |
6225 | msgstr "" | 6829 | msgstr "" |
6226 | 6830 | ||
6227 | #: src/topology/gnunet-daemon-topology.c:1029 | 6831 | #: src/topology/gnunet-daemon-topology.c:1056 |
6228 | #, c-format | 6832 | #, c-format |
6229 | msgid "Found friend `%s' in configuration\n" | 6833 | msgid "Found friend `%s' in configuration\n" |
6230 | msgstr "" | 6834 | msgstr "" |
6231 | 6835 | ||
6232 | #: src/topology/gnunet-daemon-topology.c:1050 | 6836 | #: src/topology/gnunet-daemon-topology.c:1077 |
6233 | msgid "Encountered errors parsing friends list!\n" | 6837 | msgid "Encountered errors parsing friends list!\n" |
6234 | msgstr "" | 6838 | msgstr "" |
6235 | 6839 | ||
6236 | #: src/topology/gnunet-daemon-topology.c:1052 | 6840 | #: src/topology/gnunet-daemon-topology.c:1079 |
6237 | msgid "# friends in configuration" | 6841 | msgid "# friends in configuration" |
6238 | msgstr "" | 6842 | msgstr "" |
6239 | 6843 | ||
6240 | #: src/topology/gnunet-daemon-topology.c:1057 | 6844 | #: src/topology/gnunet-daemon-topology.c:1084 |
6241 | msgid "Fewer friends specified than required by minimum friend count. Will only connect to friends.\n" | 6845 | msgid "" |
6846 | "Fewer friends specified than required by minimum friend count. Will only " | ||
6847 | "connect to friends.\n" | ||
6242 | msgstr "" | 6848 | msgstr "" |
6243 | 6849 | ||
6244 | #: src/topology/gnunet-daemon-topology.c:1063 | 6850 | #: src/topology/gnunet-daemon-topology.c:1090 |
6245 | msgid "More friendly connections required than target total number of connections.\n" | 6851 | msgid "" |
6852 | "More friendly connections required than target total number of connections.\n" | ||
6246 | msgstr "" | 6853 | msgstr "" |
6247 | 6854 | ||
6248 | #: src/topology/gnunet-daemon-topology.c:1094 | 6855 | #: src/topology/gnunet-daemon-topology.c:1121 |
6856 | #: src/transport/plugin_transport_wlan.c:1478 | ||
6249 | msgid "# HELLO messages received" | 6857 | msgid "# HELLO messages received" |
6250 | msgstr "" | 6858 | msgstr "" |
6251 | 6859 | ||
6252 | #: src/topology/gnunet-daemon-topology.c:1151 | 6860 | #: src/topology/gnunet-daemon-topology.c:1178 |
6253 | msgid "# HELLO messages gossipped" | 6861 | msgid "# HELLO messages gossipped" |
6254 | msgstr "" | 6862 | msgstr "" |
6255 | 6863 | ||
6256 | #: src/topology/gnunet-daemon-topology.c:1290 | 6864 | #: src/topology/gnunet-daemon-topology.c:1323 |
6257 | msgid "GNUnet topology control (maintaining P2P mesh and F2F constraints)" | 6865 | msgid "GNUnet topology control (maintaining P2P cadet and F2F constraints)" |
6258 | msgstr "" | 6866 | msgstr "" |
6259 | 6867 | ||
6260 | #: src/transport/gnunet-service-transport_blacklist.c:271 | 6868 | #: src/transport/gnunet-service-transport_ats.c:136 |
6869 | msgid "# Addresses given to ATS" | ||
6870 | msgstr "" | ||
6871 | |||
6872 | #: src/transport/gnunet-service-transport_blacklist.c:286 | ||
6261 | #, c-format | 6873 | #, c-format |
6262 | msgid "Adding blacklisting entry for peer `%s'\n" | 6874 | msgid "Adding blacklisting entry for peer `%s'\n" |
6263 | msgstr "" | 6875 | msgstr "" |
6264 | 6876 | ||
6265 | #: src/transport/gnunet-service-transport_blacklist.c:279 | 6877 | #: src/transport/gnunet-service-transport_blacklist.c:295 |
6266 | #, c-format | 6878 | #, c-format |
6267 | msgid "Adding blacklisting entry for peer `%s':`%s'\n" | 6879 | msgid "Adding blacklisting entry for peer `%s':`%s'\n" |
6268 | msgstr "" | 6880 | msgstr "" |
6269 | 6881 | ||
6270 | #: src/transport/gnunet-service-transport_blacklist.c:464 | 6882 | #: src/transport/gnunet-service-transport_blacklist.c:504 |
6271 | #: src/transport/gnunet-service-transport_blacklist.c:745 | 6883 | #: src/transport/gnunet-service-transport_blacklist.c:855 |
6272 | msgid "# disconnects due to blacklist" | 6884 | msgid "# disconnects due to blacklist" |
6273 | msgstr "" | 6885 | msgstr "" |
6274 | 6886 | ||
6275 | #: src/transport/gnunet-service-transport.c:220 | 6887 | #: src/transport/gnunet-service-transport_blacklist.c:859 |
6888 | #, c-format | ||
6889 | msgid "Disallowing connection to peer `%s' on transport %s\n" | ||
6890 | msgstr "" | ||
6891 | |||
6892 | #: src/transport/gnunet-service-transport.c:231 | ||
6276 | msgid "# bytes payload discarded due to not connected peer" | 6893 | msgid "# bytes payload discarded due to not connected peer" |
6277 | msgstr "" | 6894 | msgstr "" |
6278 | 6895 | ||
6279 | #: src/transport/gnunet-service-transport.c:424 | 6896 | #: src/transport/gnunet-service-transport.c:385 |
6280 | msgid "# bytes total received" | 6897 | msgid "# bytes total received" |
6281 | msgstr "" | 6898 | msgstr "" |
6282 | 6899 | ||
6283 | #: src/transport/gnunet-service-transport.c:515 | 6900 | #: src/transport/gnunet-service-transport.c:480 |
6284 | msgid "# bytes payload received" | 6901 | msgid "# bytes payload received" |
6285 | msgstr "" | 6902 | msgstr "" |
6286 | 6903 | ||
6287 | #: src/transport/gnunet-service-transport.c:686 | 6904 | #: src/transport/gnunet-service-transport.c:818 |
6288 | #, c-format | ||
6289 | msgid "Could not obtain a valid network for `%s' %s (%s)\n" | ||
6290 | msgstr "" | ||
6291 | |||
6292 | #: src/transport/gnunet-service-transport.c:733 | ||
6293 | #, c-format | ||
6294 | msgid "Address or session unknown: failed to update properties for peer `%s' plugin `%s' address `%s' session %p\n" | ||
6295 | msgstr "" | ||
6296 | |||
6297 | #: src/transport/gnunet-service-transport.c:1084 | ||
6298 | msgid "Transport service is lacking key configuration settings. Exiting.\n" | 6905 | msgid "Transport service is lacking key configuration settings. Exiting.\n" |
6299 | msgstr "" | 6906 | msgstr "" |
6300 | 6907 | ||
6301 | #: src/transport/gnunet-service-transport_clients.c:432 | 6908 | #: src/transport/gnunet-service-transport_clients.c:481 |
6302 | #, c-format | ||
6303 | msgid "Dropping message of type %u and size %u, have %u/%u messages pending\n" | ||
6304 | msgstr "" | ||
6305 | |||
6306 | #: src/transport/gnunet-service-transport_clients.c:439 | ||
6307 | msgid "# messages dropped due to slow client" | 6909 | msgid "# messages dropped due to slow client" |
6308 | msgstr "" | 6910 | msgstr "" |
6309 | 6911 | ||
6310 | #: src/transport/gnunet-service-transport_clients.c:596 | 6912 | #: src/transport/gnunet-service-transport_clients.c:783 |
6311 | #, c-format | ||
6312 | msgid "Rejecting control connection from peer `%s', which is not me!\n" | ||
6313 | msgstr "" | ||
6314 | |||
6315 | #: src/transport/gnunet-service-transport_clients.c:737 | ||
6316 | msgid "# bytes payload dropped (other peer was not connected)" | 6913 | msgid "# bytes payload dropped (other peer was not connected)" |
6317 | msgstr "" | 6914 | msgstr "" |
6318 | 6915 | ||
6319 | #: src/transport/gnunet-service-transport_clients.c:770 | 6916 | #: src/transport/gnunet-service-transport_clients.c:827 |
6320 | #, c-format | ||
6321 | msgid "Blacklist refuses connection attempt to peer `%s'\n" | ||
6322 | msgstr "" | ||
6323 | |||
6324 | #: src/transport/gnunet-service-transport_clients.c:776 | ||
6325 | #, c-format | ||
6326 | msgid "Blacklist allows connection attempt to peer `%s'\n" | ||
6327 | msgstr "" | ||
6328 | |||
6329 | #: src/transport/gnunet-service-transport_clients.c:801 | ||
6330 | msgid "# REQUEST CONNECT messages received" | 6917 | msgid "# REQUEST CONNECT messages received" |
6331 | msgstr "" | 6918 | msgstr "" |
6332 | 6919 | ||
6333 | #: src/transport/gnunet-service-transport_clients.c:815 | 6920 | #: src/transport/gnunet-service-transport_clients.c:864 |
6334 | #, c-format | ||
6335 | msgid "Received a request connect message for peer `%s'\n" | ||
6336 | msgstr "" | ||
6337 | |||
6338 | #: src/transport/gnunet-service-transport_clients.c:826 | ||
6339 | msgid "# REQUEST DISCONNECT messages received" | 6921 | msgid "# REQUEST DISCONNECT messages received" |
6340 | msgstr "" | 6922 | msgstr "" |
6341 | 6923 | ||
6342 | #: src/transport/gnunet-service-transport_clients.c:840 | 6924 | #: src/transport/gnunet-service-transport_hello.c:188 |
6343 | #, c-format | 6925 | msgid "# refreshed my HELLO" |
6344 | msgid "Received a request disconnect message for peer `%s'\n" | ||
6345 | msgstr "" | 6926 | msgstr "" |
6346 | 6927 | ||
6347 | #: src/transport/gnunet-service-transport_hello.c:181 | 6928 | #: src/transport/gnunet-service-transport_neighbours.c:840 |
6348 | msgid "# refreshed my HELLO" | 6929 | msgid "# session creation failed" |
6349 | msgstr "" | 6930 | msgstr "" |
6350 | 6931 | ||
6351 | #: src/transport/gnunet-service-transport_neighbours.c:1095 | 6932 | #: src/transport/gnunet-service-transport_neighbours.c:1168 |
6352 | msgid "# DISCONNECT messages sent" | 6933 | msgid "# DISCONNECT messages sent" |
6353 | msgstr "" | 6934 | msgstr "" |
6354 | 6935 | ||
6355 | #: src/transport/gnunet-service-transport_neighbours.c:1220 | 6936 | #: src/transport/gnunet-service-transport_neighbours.c:1304 |
6356 | #: src/transport/gnunet-service-transport_neighbours.c:1629 | 6937 | #: src/transport/gnunet-service-transport_neighbours.c:1761 |
6357 | msgid "# bytes in message queue for other peers" | 6938 | msgid "# bytes in message queue for other peers" |
6358 | msgstr "" | 6939 | msgstr "" |
6359 | 6940 | ||
6360 | #: src/transport/gnunet-service-transport_neighbours.c:1225 | 6941 | #: src/transport/gnunet-service-transport_neighbours.c:1309 |
6361 | msgid "# messages transmitted to other peers" | 6942 | msgid "# messages transmitted to other peers" |
6362 | msgstr "" | 6943 | msgstr "" |
6363 | 6944 | ||
6364 | #: src/transport/gnunet-service-transport_neighbours.c:1230 | 6945 | #: src/transport/gnunet-service-transport_neighbours.c:1315 |
6365 | msgid "# transmission failures for messages to other peers" | 6946 | msgid "# transmission failures for messages to other peers" |
6366 | msgstr "" | 6947 | msgstr "" |
6367 | 6948 | ||
6368 | #: src/transport/gnunet-service-transport_neighbours.c:1287 | 6949 | #: src/transport/gnunet-service-transport_neighbours.c:1375 |
6369 | msgid "# messages timed out while in transport queue" | 6950 | msgid "# messages timed out while in transport queue" |
6370 | msgstr "" | 6951 | msgstr "" |
6371 | 6952 | ||
6372 | #: src/transport/gnunet-service-transport_neighbours.c:1343 | 6953 | #: src/transport/gnunet-service-transport_neighbours.c:1451 |
6373 | msgid "# keepalives sent" | 6954 | msgid "# KEEPALIVES sent" |
6374 | msgstr "" | 6955 | msgstr "" |
6375 | 6956 | ||
6376 | #: src/transport/gnunet-service-transport_neighbours.c:1376 | 6957 | #: src/transport/gnunet-service-transport_neighbours.c:1487 |
6377 | msgid "# KEEPALIVE messages discarded (peer unknown)" | 6958 | msgid "# KEEPALIVE messages discarded (peer unknown)" |
6378 | msgstr "" | 6959 | msgstr "" |
6379 | 6960 | ||
6380 | #: src/transport/gnunet-service-transport_neighbours.c:1384 | 6961 | #: src/transport/gnunet-service-transport_neighbours.c:1495 |
6381 | msgid "# KEEPALIVE messages discarded (no session)" | 6962 | msgid "# KEEPALIVE messages discarded (no session)" |
6382 | msgstr "" | 6963 | msgstr "" |
6383 | 6964 | ||
6384 | #: src/transport/gnunet-service-transport_neighbours.c:1431 | 6965 | #: src/transport/gnunet-service-transport_neighbours.c:1505 |
6385 | msgid "# KEEPALIVE_RESPONSE messages discarded (not connected)" | 6966 | msgid "# KEEPALIVES received in good order" |
6967 | msgstr "" | ||
6968 | |||
6969 | #: src/transport/gnunet-service-transport_neighbours.c:1550 | ||
6970 | msgid "# KEEPALIVE_RESPONSEs discarded (not connected)" | ||
6971 | msgstr "" | ||
6972 | |||
6973 | #: src/transport/gnunet-service-transport_neighbours.c:1559 | ||
6974 | msgid "# KEEPALIVE_RESPONSEs discarded (not expected)" | ||
6975 | msgstr "" | ||
6976 | |||
6977 | #: src/transport/gnunet-service-transport_neighbours.c:1567 | ||
6978 | msgid "# KEEPALIVE_RESPONSEs discarded (address changed)" | ||
6386 | msgstr "" | 6979 | msgstr "" |
6387 | 6980 | ||
6388 | #: src/transport/gnunet-service-transport_neighbours.c:1440 | 6981 | #: src/transport/gnunet-service-transport_neighbours.c:1576 |
6389 | msgid "# KEEPALIVE_RESPONSE messages discarded (not expected)" | 6982 | msgid "# KEEPALIVE_RESPONSEs discarded (no nonce)" |
6390 | msgstr "" | 6983 | msgstr "" |
6391 | 6984 | ||
6392 | #: src/transport/gnunet-service-transport_neighbours.c:1448 | 6985 | #: src/transport/gnunet-service-transport_neighbours.c:1581 |
6393 | msgid "# KEEPALIVE_RESPONSE messages discarded (address changed)" | 6986 | msgid "# KEEPALIVE_RESPONSEs discarded (bad nonce)" |
6394 | msgstr "" | 6987 | msgstr "" |
6395 | 6988 | ||
6396 | #: src/transport/gnunet-service-transport_neighbours.c:1456 | 6989 | #: src/transport/gnunet-service-transport_neighbours.c:1587 |
6397 | msgid "# KEEPALIVE_RESPONSE messages discarded (wrong nonce)" | 6990 | msgid "# KEEPALIVE_RESPONSEs received (OK)" |
6398 | msgstr "" | 6991 | msgstr "" |
6399 | 6992 | ||
6400 | #: src/transport/gnunet-service-transport_neighbours.c:1534 | 6993 | #: src/transport/gnunet-service-transport_neighbours.c:1658 |
6401 | msgid "# messages discarded due to lack of neighbour record" | 6994 | msgid "# messages discarded due to lack of neighbour record" |
6402 | msgstr "" | 6995 | msgstr "" |
6403 | 6996 | ||
6404 | #: src/transport/gnunet-service-transport_neighbours.c:1568 | 6997 | #: src/transport/gnunet-service-transport_neighbours.c:1692 |
6405 | msgid "# bandwidth quota violations by other peers" | 6998 | msgid "# bandwidth quota violations by other peers" |
6406 | msgstr "" | 6999 | msgstr "" |
6407 | 7000 | ||
6408 | #: src/transport/gnunet-service-transport_neighbours.c:1584 | 7001 | #: src/transport/gnunet-service-transport_neighbours.c:1707 |
6409 | msgid "# ms throttling suggested" | 7002 | msgid "# ms throttling suggested" |
6410 | msgstr "" | 7003 | msgstr "" |
6411 | 7004 | ||
6412 | #: src/transport/gnunet-service-transport_neighbours.c:1678 | 7005 | #: src/transport/gnunet-service-transport_neighbours.c:1827 |
6413 | #, c-format | 7006 | #, c-format |
6414 | msgid "Failed to send CONNECT message to peer `%s' using address `%s' session %p\n" | 7007 | msgid "Failed to send SYN message to peer `%s'\n" |
6415 | msgstr "" | 7008 | msgstr "" |
6416 | 7009 | ||
6417 | #: src/transport/gnunet-service-transport_neighbours.c:1705 | 7010 | #: src/transport/gnunet-service-transport_neighbours.c:1847 |
6418 | msgid "# Failed attempts to switch addresses (failed to send CONNECT CONT)" | 7011 | msgid "# Failed attempts to switch addresses (failed to send SYN CONT)" |
6419 | msgstr "" | 7012 | msgstr "" |
6420 | 7013 | ||
6421 | #: src/transport/gnunet-service-transport_neighbours.c:1751 | 7014 | #: src/transport/gnunet-service-transport_neighbours.c:1886 |
6422 | msgid "# SESSION_CONNECT messages sent" | 7015 | msgid "# SYN messages sent" |
6423 | msgstr "" | 7016 | msgstr "" |
6424 | 7017 | ||
6425 | #: src/transport/gnunet-service-transport_neighbours.c:1767 | 7018 | #: src/transport/gnunet-service-transport_neighbours.c:1903 |
6426 | #, c-format | 7019 | #, c-format |
6427 | msgid "Failed to transmit CONNECT message via plugin to %s\n" | 7020 | msgid "Failed to transmit SYN message to %s\n" |
6428 | msgstr "" | 7021 | msgstr "" |
6429 | 7022 | ||
6430 | #: src/transport/gnunet-service-transport_neighbours.c:1794 | 7023 | #: src/transport/gnunet-service-transport_neighbours.c:1933 |
6431 | msgid "# Failed attempts to switch addresses (failed to send CONNECT)" | 7024 | msgid "# Failed attempts to switch addresses (failed to send SYN)" |
6432 | msgstr "" | 7025 | msgstr "" |
6433 | 7026 | ||
6434 | #: src/transport/gnunet-service-transport_neighbours.c:1844 | 7027 | #: src/transport/gnunet-service-transport_neighbours.c:1998 |
6435 | #, c-format | 7028 | #, c-format |
6436 | msgid "Failed to send CONNECT_ACK message to peer `%s' using address `%s' session %p\n" | 7029 | msgid "Failed to send SYN_ACK message to peer `%s' using address `%s'\n" |
6437 | msgstr "" | 7030 | msgstr "" |
6438 | 7031 | ||
6439 | #: src/transport/gnunet-service-transport_neighbours.c:1899 | 7032 | #: src/transport/gnunet-service-transport_neighbours.c:2052 |
6440 | msgid "# CONNECT_ACK messages sent" | 7033 | msgid "# SYN_ACK messages sent" |
6441 | msgstr "" | 7034 | msgstr "" |
6442 | 7035 | ||
6443 | #: src/transport/gnunet-service-transport_neighbours.c:1914 | 7036 | #: src/transport/gnunet-service-transport_neighbours.c:2069 |
6444 | #, c-format | 7037 | #, c-format |
6445 | msgid "Failed to transmit CONNECT_ACK message via plugin to %s\n" | 7038 | msgid "Failed to transmit SYN_ACK message to %s\n" |
6446 | msgstr "" | 7039 | msgstr "" |
6447 | 7040 | ||
6448 | #: src/transport/gnunet-service-transport_neighbours.c:2192 | 7041 | #: src/transport/gnunet-service-transport_neighbours.c:2225 |
6449 | #, c-format | 7042 | #, c-format |
6450 | msgid "Blacklisting disapproved to connect to peer `%s'\n" | 7043 | msgid "Blacklisting disapproved to connect to peer `%s'\n" |
6451 | msgstr "" | 7044 | msgstr "" |
6452 | 7045 | ||
6453 | #: src/transport/gnunet-service-transport_neighbours.c:2312 | 7046 | #: src/transport/gnunet-service-transport_neighbours.c:2352 |
6454 | msgid "# CONNECT messages received" | 7047 | msgid "# SYN messages received" |
6455 | msgstr "" | 7048 | msgstr "" |
6456 | 7049 | ||
6457 | #: src/transport/gnunet-service-transport_neighbours.c:2317 | 7050 | #: src/transport/gnunet-service-transport_neighbours.c:2357 |
6458 | #, c-format | 7051 | #, c-format |
6459 | msgid "CONNECT request from peer `%s' ignored due impending shutdown\n" | 7052 | msgid "SYN request from peer `%s' ignored due impending shutdown\n" |
6460 | msgstr "" | 7053 | msgstr "" |
6461 | 7054 | ||
6462 | #: src/transport/gnunet-service-transport_neighbours.c:2590 | 7055 | #: src/transport/gnunet-service-transport_neighbours.c:2726 |
6463 | msgid "# Attempts to switch addresses" | 7056 | msgid "# Attempts to switch addresses" |
6464 | msgstr "" | 7057 | msgstr "" |
6465 | 7058 | ||
6466 | #: src/transport/gnunet-service-transport_neighbours.c:3012 | 7059 | #: src/transport/gnunet-service-transport_neighbours.c:3212 |
6467 | msgid "# Failed attempts to switch addresses (no response)" | 7060 | msgid "# SYN_ACK messages received" |
6468 | msgstr "" | ||
6469 | |||
6470 | #: src/transport/gnunet-service-transport_neighbours.c:3107 | ||
6471 | msgid "# CONNECT_ACK messages received" | ||
6472 | msgstr "" | 7061 | msgstr "" |
6473 | 7062 | ||
6474 | #: src/transport/gnunet-service-transport_neighbours.c:3115 | 7063 | #: src/transport/gnunet-service-transport_neighbours.c:3220 |
6475 | msgid "# unexpected CONNECT_ACK messages (no peer)" | 7064 | msgid "# unexpected SYN_ACK messages (no peer)" |
6476 | msgstr "" | 7065 | msgstr "" |
6477 | 7066 | ||
6478 | #: src/transport/gnunet-service-transport_neighbours.c:3129 | 7067 | #: src/transport/gnunet-service-transport_neighbours.c:3238 |
6479 | #: src/transport/gnunet-service-transport_neighbours.c:3164 | 7068 | #: src/transport/gnunet-service-transport_neighbours.c:3262 |
6480 | msgid "# unexpected CONNECT_ACK messages (not ready)" | 7069 | msgid "# unexpected SYN_ACK messages (not ready)" |
6481 | msgstr "" | 7070 | msgstr "" |
6482 | 7071 | ||
6483 | #: src/transport/gnunet-service-transport_neighbours.c:3176 | 7072 | #: src/transport/gnunet-service-transport_neighbours.c:3274 |
6484 | msgid "# unexpected CONNECT_ACK messages (waiting on ATS)" | 7073 | msgid "# unexpected SYN_ACK messages (waiting on ATS)" |
6485 | msgstr "" | 7074 | msgstr "" |
6486 | 7075 | ||
6487 | #: src/transport/gnunet-service-transport_neighbours.c:3200 | 7076 | #: src/transport/gnunet-service-transport_neighbours.c:3299 |
6488 | msgid "# Successful attempts to switch addresses" | 7077 | msgid "# Successful attempts to switch addresses" |
6489 | msgstr "" | 7078 | msgstr "" |
6490 | 7079 | ||
6491 | #: src/transport/gnunet-service-transport_neighbours.c:3208 | 7080 | #: src/transport/gnunet-service-transport_neighbours.c:3312 |
6492 | msgid "# unexpected CONNECT_ACK messages (disconnecting)" | 7081 | msgid "# unexpected SYN_ACK messages (disconnecting)" |
6493 | msgstr "" | 7082 | msgstr "" |
6494 | 7083 | ||
6495 | #: src/transport/gnunet-service-transport_neighbours.c:3396 | 7084 | #: src/transport/gnunet-service-transport_neighbours.c:3506 |
6496 | msgid "# SESSION_ACK messages received" | 7085 | msgid "# ACK messages received" |
6497 | msgstr "" | 7086 | msgstr "" |
6498 | 7087 | ||
6499 | #: src/transport/gnunet-service-transport_neighbours.c:3424 | 7088 | #: src/transport/gnunet-service-transport_neighbours.c:3541 |
6500 | msgid "# unexpected SESSION_ACK messages" | 7089 | msgid "# unexpected ACK messages" |
6501 | msgstr "" | 7090 | msgstr "" |
6502 | 7091 | ||
6503 | #: src/transport/gnunet-service-transport_neighbours.c:3490 | 7092 | #: src/transport/gnunet-service-transport_neighbours.c:3595 |
6504 | msgid "# SET QUOTA messages ignored (no such peer)" | 7093 | msgid "# SET QUOTA messages ignored (no such peer)" |
6505 | msgstr "" | 7094 | msgstr "" |
6506 | 7095 | ||
6507 | #: src/transport/gnunet-service-transport_neighbours.c:3505 | 7096 | #: src/transport/gnunet-service-transport_neighbours.c:3624 |
6508 | msgid "# disconnects due to quota of 0" | 7097 | msgid "# disconnects due to quota of 0" |
6509 | msgstr "" | 7098 | msgstr "" |
6510 | 7099 | ||
6511 | #: src/transport/gnunet-service-transport_neighbours.c:3545 | 7100 | #: src/transport/gnunet-service-transport_neighbours.c:3672 |
7101 | msgid "# quota messages ignored (malformed)" | ||
7102 | msgstr "" | ||
7103 | |||
7104 | #: src/transport/gnunet-service-transport_neighbours.c:3679 | ||
7105 | msgid "# QUOTA messages received" | ||
7106 | msgstr "" | ||
7107 | |||
7108 | #: src/transport/gnunet-service-transport_neighbours.c:3720 | ||
6512 | msgid "# disconnect messages ignored (malformed)" | 7109 | msgid "# disconnect messages ignored (malformed)" |
6513 | msgstr "" | 7110 | msgstr "" |
6514 | 7111 | ||
6515 | #: src/transport/gnunet-service-transport_neighbours.c:3551 | 7112 | #: src/transport/gnunet-service-transport_neighbours.c:3727 |
6516 | msgid "# DISCONNECT messages received" | 7113 | msgid "# DISCONNECT messages received" |
6517 | msgstr "" | 7114 | msgstr "" |
6518 | 7115 | ||
6519 | #: src/transport/gnunet-service-transport_neighbours.c:3560 | 7116 | #: src/transport/gnunet-service-transport_neighbours.c:3738 |
6520 | msgid "# disconnect messages ignored (timestamp)" | 7117 | msgid "# disconnect messages ignored (timestamp)" |
6521 | msgstr "" | 7118 | msgstr "" |
6522 | 7119 | ||
6523 | #: src/transport/gnunet-service-transport_neighbours.c:3687 | 7120 | #: src/transport/gnunet-service-transport_neighbours.c:3867 |
6524 | msgid "# disconnected from peer upon explicit request" | 7121 | msgid "# disconnected from peer upon explicit request" |
6525 | msgstr "" | 7122 | msgstr "" |
6526 | 7123 | ||
6527 | #: src/transport/gnunet-service-transport_plugins.c:120 | 7124 | #: src/transport/gnunet-service-transport_plugins.c:158 |
6528 | msgid "Transport service is lacking NEIGHBOUR_LIMIT option.\n" | 7125 | msgid "Transport service is lacking NEIGHBOUR_LIMIT option.\n" |
6529 | msgstr "" | 7126 | msgstr "" |
6530 | 7127 | ||
6531 | #: src/transport/gnunet-service-transport_plugins.c:178 | 7128 | #: src/transport/gnunet-service-transport_plugins.c:223 |
6532 | #: src/transport/gnunet-service-transport_plugins.c:186 | 7129 | #: src/transport/gnunet-service-transport_plugins.c:231 |
6533 | #: src/transport/gnunet-service-transport_plugins.c:194 | 7130 | #: src/transport/gnunet-service-transport_plugins.c:239 |
6534 | #: src/transport/gnunet-service-transport_plugins.c:202 | 7131 | #: src/transport/gnunet-service-transport_plugins.c:247 |
6535 | #: src/transport/gnunet-service-transport_plugins.c:210 | 7132 | #: src/transport/gnunet-service-transport_plugins.c:255 |
6536 | #: src/transport/gnunet-service-transport_plugins.c:218 | 7133 | #: src/transport/gnunet-service-transport_plugins.c:263 |
6537 | #: src/transport/gnunet-service-transport_plugins.c:226 | 7134 | #: src/transport/gnunet-service-transport_plugins.c:271 |
6538 | #: src/transport/gnunet-service-transport_plugins.c:234 | 7135 | #: src/transport/gnunet-service-transport_plugins.c:279 |
6539 | #: src/transport/gnunet-service-transport_plugins.c:242 | 7136 | #: src/transport/gnunet-service-transport_plugins.c:287 |
6540 | #: src/transport/gnunet-service-transport_plugins.c:250 | 7137 | #: src/transport/gnunet-service-transport_plugins.c:295 |
6541 | #: src/transport/gnunet-service-transport_plugins.c:258 | 7138 | #: src/transport/gnunet-service-transport_plugins.c:303 |
6542 | #, c-format | 7139 | #, c-format |
6543 | msgid "Missing function `%s' in transport plugin for `%s'\n" | 7140 | msgid "Missing function `%s' in transport plugin for `%s'\n" |
6544 | msgstr "" | 7141 | msgstr "" |
6545 | 7142 | ||
6546 | #: src/transport/gnunet-service-transport_plugins.c:265 | 7143 | #: src/transport/gnunet-service-transport_plugins.c:310 |
6547 | #, c-format | 7144 | #, c-format |
6548 | msgid "Did not load plugin `%s' due to missing functions\n" | 7145 | msgid "Did not load plugin `%s' due to missing functions\n" |
6549 | msgstr "" | 7146 | msgstr "" |
6550 | 7147 | ||
6551 | #: src/transport/gnunet-service-transport_validation.c:488 | 7148 | #: src/transport/gnunet-service-transport_validation.c:343 |
6552 | msgid "# address records discarded" | 7149 | msgid "# Addresses in validation map" |
6553 | msgstr "" | 7150 | msgstr "" |
6554 | 7151 | ||
6555 | #: src/transport/gnunet-service-transport_validation.c:558 | 7152 | #: src/transport/gnunet-service-transport_validation.c:450 |
6556 | #, c-format | 7153 | #: src/transport/gnunet-service-transport_validation.c:638 |
6557 | msgid "Not transmitting `%s' with `%s', message too big (%u bytes!). This should not happen.\n" | 7154 | #: src/transport/gnunet-service-transport_validation.c:927 |
7155 | #: src/transport/gnunet-service-transport_validation.c:1508 | ||
7156 | msgid "# validations running" | ||
7157 | msgstr "" | ||
7158 | |||
7159 | #: src/transport/gnunet-service-transport_validation.c:493 | ||
7160 | msgid "# address records discarded (timeout)" | ||
7161 | msgstr "" | ||
7162 | |||
7163 | #: src/transport/gnunet-service-transport_validation.c:541 | ||
7164 | msgid "# address records discarded (blacklist)" | ||
6558 | msgstr "" | 7165 | msgstr "" |
6559 | 7166 | ||
6560 | #: src/transport/gnunet-service-transport_validation.c:616 | 7167 | #: src/transport/gnunet-service-transport_validation.c:629 |
6561 | msgid "# PING without HELLO messages sent" | 7168 | msgid "# PINGs for address validation sent" |
6562 | msgstr "" | 7169 | msgstr "" |
6563 | 7170 | ||
6564 | #: src/transport/gnunet-service-transport_validation.c:722 | 7171 | #: src/transport/gnunet-service-transport_validation.c:711 |
7172 | msgid "# validations delayed by global throttle" | ||
7173 | msgstr "" | ||
7174 | |||
7175 | #: src/transport/gnunet-service-transport_validation.c:748 | ||
6565 | msgid "# address revalidations started" | 7176 | msgid "# address revalidations started" |
6566 | msgstr "" | 7177 | msgstr "" |
6567 | 7178 | ||
6568 | #: src/transport/gnunet-service-transport_validation.c:1011 | 7179 | #: src/transport/gnunet-service-transport_validation.c:1048 |
6569 | msgid "# PING message for different peer received" | 7180 | msgid "# PING message for different peer received" |
6570 | msgstr "" | 7181 | msgstr "" |
6571 | 7182 | ||
6572 | #: src/transport/gnunet-service-transport_validation.c:1062 | 7183 | #: src/transport/gnunet-service-transport_validation.c:1099 |
6573 | #, c-format | 7184 | #, c-format |
6574 | msgid "Plugin `%s' not available, cannot confirm having this address\n" | 7185 | msgid "Plugin `%s' not available, cannot confirm having this address\n" |
6575 | msgstr "" | 7186 | msgstr "" |
6576 | 7187 | ||
6577 | #: src/transport/gnunet-service-transport_validation.c:1072 | 7188 | #: src/transport/gnunet-service-transport_validation.c:1112 |
6578 | msgid "# failed address checks during validation" | 7189 | msgid "# failed address checks during validation" |
6579 | msgstr "" | 7190 | msgstr "" |
6580 | 7191 | ||
6581 | #: src/transport/gnunet-service-transport_validation.c:1075 | 7192 | #: src/transport/gnunet-service-transport_validation.c:1115 |
6582 | #, c-format | 7193 | #, c-format |
6583 | msgid "Address `%s' is not one of my addresses, not confirming PING\n" | 7194 | msgid "Address `%s' is not one of my addresses, not confirming PING\n" |
6584 | msgstr "" | 7195 | msgstr "" |
6585 | 7196 | ||
6586 | #: src/transport/gnunet-service-transport_validation.c:1083 | 7197 | #: src/transport/gnunet-service-transport_validation.c:1123 |
6587 | msgid "# successful address checks during validation" | 7198 | msgid "# successful address checks during validation" |
6588 | msgstr "" | 7199 | msgstr "" |
6589 | 7200 | ||
6590 | #: src/transport/gnunet-service-transport_validation.c:1095 | 7201 | #: src/transport/gnunet-service-transport_validation.c:1136 |
6591 | #, c-format | ||
6592 | msgid "Not confirming PING from peer `%s' with address `%s' since I cannot confirm having this address.\n" | ||
6593 | msgstr "" | ||
6594 | |||
6595 | #: src/transport/gnunet-service-transport_validation.c:1103 | ||
6596 | #, c-format | 7202 | #, c-format |
6597 | msgid "Received a PING message with validation bug from `%s'\n" | 7203 | msgid "" |
7204 | "Not confirming PING from peer `%s' with address `%s' since I cannot confirm " | ||
7205 | "having this address.\n" | ||
6598 | msgstr "" | 7206 | msgstr "" |
6599 | 7207 | ||
6600 | #: src/transport/gnunet-service-transport_validation.c:1157 | 7208 | #: src/transport/gnunet-service-transport_validation.c:1191 |
6601 | #, c-format | 7209 | #, c-format |
6602 | msgid "Failed to create PONG signature for peer `%s'\n" | 7210 | msgid "Failed to create PONG signature for peer `%s'\n" |
6603 | msgstr "" | 7211 | msgstr "" |
6604 | 7212 | ||
6605 | #: src/transport/gnunet-service-transport_validation.c:1206 | 7213 | #: src/transport/gnunet-service-transport_validation.c:1242 |
6606 | msgid "# PONGs unicast via reliable transport" | 7214 | msgid "# PONGs unicast via reliable transport" |
6607 | msgstr "" | 7215 | msgstr "" |
6608 | 7216 | ||
6609 | #: src/transport/gnunet-service-transport_validation.c:1215 | 7217 | #: src/transport/gnunet-service-transport_validation.c:1251 |
6610 | msgid "# PONGs multicast to all available addresses" | 7218 | msgid "# PONGs multicast to all available addresses" |
6611 | msgstr "" | 7219 | msgstr "" |
6612 | 7220 | ||
6613 | #: src/transport/gnunet-service-transport_validation.c:1356 | 7221 | #: src/transport/gnunet-service-transport_validation.c:1408 |
6614 | msgid "# PONGs dropped, no matching pending validation" | 7222 | msgid "# PONGs dropped, no matching pending validation" |
6615 | msgstr "" | 7223 | msgstr "" |
6616 | 7224 | ||
6617 | #: src/transport/gnunet-service-transport_validation.c:1371 | 7225 | #: src/transport/gnunet-service-transport_validation.c:1426 |
6618 | msgid "# PONGs dropped, signature expired" | 7226 | msgid "# PONGs dropped, signature expired" |
6619 | msgstr "" | 7227 | msgstr "" |
6620 | 7228 | ||
6621 | #: src/transport/gnunet-service-transport_validation.c:1493 | 7229 | #: src/transport/gnunet-service-transport_validation.c:1478 |
6622 | #, c-format | 7230 | msgid "# validations succeeded" |
6623 | msgid "Validation received new %s message for peer `%s' with size %u\n" | ||
6624 | msgstr "" | 7231 | msgstr "" |
6625 | 7232 | ||
6626 | #: src/transport/gnunet-service-transport_validation.c:1500 | 7233 | #: src/transport/gnunet-transport.c:580 |
6627 | #, c-format | ||
6628 | msgid "Adding `%s' without addresses for peer `%s'\n" | ||
6629 | msgstr "" | ||
6630 | |||
6631 | #: src/transport/gnunet-transport.c:367 | ||
6632 | #, c-format | 7234 | #, c-format |
6633 | msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n" | 7235 | msgid "Transmitted %llu bytes/s (%llu bytes in %s)\n" |
6634 | msgstr "" | 7236 | msgstr "" |
6635 | 7237 | ||
6636 | #: src/transport/gnunet-transport.c:375 | 7238 | #: src/transport/gnunet-transport.c:589 |
7239 | #: src/transport/gnunet-transport-profiler.c:274 | ||
6637 | #, c-format | 7240 | #, c-format |
6638 | msgid "Received %llu bytes/s (%llu bytes in %s)\n" | 7241 | msgid "Received %llu bytes/s (%llu bytes in %s)\n" |
6639 | msgstr "" | 7242 | msgstr "" |
6640 | 7243 | ||
6641 | #: src/transport/gnunet-transport.c:415 | 7244 | #: src/transport/gnunet-transport.c:621 |
6642 | #, c-format | 7245 | #, c-format |
6643 | msgid "Failed to connect to `%s'\n" | 7246 | msgid "Failed to connect to `%s'\n" |
6644 | msgstr "" | 7247 | msgstr "" |
6645 | 7248 | ||
6646 | #: src/transport/gnunet-transport.c:428 | 7249 | #: src/transport/gnunet-transport.c:636 |
6647 | #, c-format | 7250 | #, c-format |
6648 | msgid "Failed to resolve address for peer `%s'\n" | 7251 | msgid "Failed to resolve address for peer `%s'\n" |
6649 | msgstr "" | 7252 | msgstr "" |
6650 | 7253 | ||
6651 | #: src/transport/gnunet-transport.c:438 | 7254 | #: src/transport/gnunet-transport.c:648 |
6652 | msgid "Failed to list connections, timeout occured\n" | 7255 | msgid "Failed to list connections, timeout occured\n" |
6653 | msgstr "" | 7256 | msgstr "" |
6654 | 7257 | ||
6655 | #: src/transport/gnunet-transport.c:559 | 7258 | #: src/transport/gnunet-transport.c:675 src/transport/gnunet-transport.c:700 |
7259 | #, c-format | ||
7260 | msgid "Configuration for plugin `%s' did not work!\n" | ||
7261 | msgstr "" | ||
7262 | |||
7263 | #: src/transport/gnunet-transport.c:680 | ||
7264 | #, c-format | ||
7265 | msgid "Configuration for plugin `%s' did work!\n" | ||
7266 | msgstr "" | ||
7267 | |||
7268 | #: src/transport/gnunet-transport.c:685 | ||
7269 | #, c-format | ||
7270 | msgid "Internal NAT error while running test for plugin `%s'\n" | ||
7271 | msgstr "" | ||
7272 | |||
7273 | #: src/transport/gnunet-transport.c:690 | ||
7274 | #, c-format | ||
7275 | msgid "Failed to start NAT test for plugin `%s'\n" | ||
7276 | msgstr "" | ||
7277 | |||
7278 | #: src/transport/gnunet-transport.c:695 | ||
7279 | #, c-format | ||
7280 | msgid "Timeout while waiting for result of NAT test for plugin `%s'\n" | ||
7281 | msgstr "" | ||
7282 | |||
7283 | #: src/transport/gnunet-transport.c:820 | ||
6656 | #, c-format | 7284 | #, c-format |
6657 | msgid "" | 7285 | msgid "" |
6658 | "Peer `%s' %s %s\n" | 7286 | "Peer `%s' %s %s\n" |
@@ -6661,329 +7289,420 @@ msgid "" | |||
6661 | "\t%s%s\n" | 7289 | "\t%s%s\n" |
6662 | msgstr "" | 7290 | msgstr "" |
6663 | 7291 | ||
6664 | #: src/transport/gnunet-transport.c:586 | 7292 | #: src/transport/gnunet-transport.c:855 |
6665 | #, c-format | 7293 | #, c-format |
6666 | msgid "Peer `%s' %s `%s' \n" | 7294 | msgid "Peer `%s' %s `%s' \n" |
6667 | msgstr "" | 7295 | msgstr "" |
6668 | 7296 | ||
6669 | #: src/transport/gnunet-transport.c:712 | 7297 | #: src/transport/gnunet-transport.c:949 src/transport/gnunet-transport.c:1744 |
7298 | msgid "Monitor disconnected from transport service. Reconnecting.\n" | ||
7299 | msgstr "" | ||
7300 | |||
7301 | #: src/transport/gnunet-transport.c:1006 | ||
6670 | msgid "No transport plugins configured, peer will never communicate\n" | 7302 | msgid "No transport plugins configured, peer will never communicate\n" |
6671 | msgstr "" | 7303 | msgstr "" |
6672 | 7304 | ||
6673 | #: src/transport/gnunet-transport.c:726 | 7305 | #: src/transport/gnunet-transport.c:1020 |
6674 | #, c-format | 7306 | #, c-format |
6675 | msgid "No port configured for plugin `%s', cannot test it\n" | 7307 | msgid "No port configured for plugin `%s', cannot test it\n" |
6676 | msgstr "" | 7308 | msgstr "" |
6677 | 7309 | ||
6678 | #: src/transport/gnunet-transport.c:789 | 7310 | #: src/transport/gnunet-transport.c:1045 |
7311 | msgid "Failed to start resolver!\n" | ||
7312 | msgstr "" | ||
7313 | |||
7314 | #: src/transport/gnunet-transport.c:1091 | ||
6679 | #, c-format | 7315 | #, c-format |
6680 | msgid "Transmitting %u bytes to %s\n" | 7316 | msgid "Transmitting %u bytes to %s\n" |
6681 | msgstr "" | 7317 | msgstr "" |
6682 | 7318 | ||
6683 | #: src/transport/gnunet-transport.c:810 | 7319 | #: src/transport/gnunet-transport.c:1114 |
7320 | #: src/transport/gnunet-transport-profiler.c:406 | ||
6684 | #, c-format | 7321 | #, c-format |
6685 | msgid "Successfully connected to `%s'\n" | 7322 | msgid "Successfully connected to `%s'\n" |
6686 | msgstr "" | 7323 | msgstr "" |
6687 | 7324 | ||
6688 | #: src/transport/gnunet-transport.c:834 | 7325 | #: src/transport/gnunet-transport.c:1138 |
6689 | #, c-format | 7326 | #, c-format |
6690 | msgid "Successfully connected to `%s', starting to send benchmark data in %u Kb blocks\n" | 7327 | msgid "" |
7328 | "Successfully connected to `%s', starting to send benchmark data in %u Kb " | ||
7329 | "blocks\n" | ||
6691 | msgstr "" | 7330 | msgstr "" |
6692 | 7331 | ||
6693 | #: src/transport/gnunet-transport.c:865 | 7332 | #: src/transport/gnunet-transport.c:1171 |
6694 | #, c-format | 7333 | #, c-format |
6695 | msgid "Successfully disconnected from `%s'\n" | 7334 | msgid "Successfully disconnected from `%s'\n" |
6696 | msgstr "" | 7335 | msgstr "" |
6697 | 7336 | ||
6698 | #: src/transport/gnunet-transport.c:888 | 7337 | #: src/transport/gnunet-transport.c:1194 |
7338 | #: src/transport/gnunet-transport-profiler.c:434 | ||
6699 | #, c-format | 7339 | #, c-format |
6700 | msgid "Disconnected from peer `%s' while benchmarking\n" | 7340 | msgid "Disconnected from peer `%s' while benchmarking\n" |
6701 | msgstr "" | 7341 | msgstr "" |
6702 | 7342 | ||
6703 | #: src/transport/gnunet-transport.c:950 | 7343 | #: src/transport/gnunet-transport.c:1219 src/transport/gnunet-transport.c:1245 |
7344 | #, c-format | ||
7345 | msgid "%24s: %-17s %4s (%u connections in total)\n" | ||
7346 | msgstr "" | ||
7347 | |||
7348 | #: src/transport/gnunet-transport.c:1221 | ||
7349 | msgid "Connected to" | ||
7350 | msgstr "" | ||
7351 | |||
7352 | #: src/transport/gnunet-transport.c:1247 | ||
7353 | msgid "Disconnected from" | ||
7354 | msgstr "" | ||
7355 | |||
7356 | #: src/transport/gnunet-transport.c:1271 | ||
7357 | #: src/transport/gnunet-transport-profiler.c:458 | ||
6704 | #, c-format | 7358 | #, c-format |
6705 | msgid "Received %u bytes from %s\n" | 7359 | msgid "Received %u bytes from %s\n" |
6706 | msgstr "" | 7360 | msgstr "" |
6707 | 7361 | ||
6708 | #: src/transport/gnunet-transport.c:975 | 7362 | #: src/transport/gnunet-transport.c:1311 |
6709 | #, c-format | 7363 | #, c-format |
6710 | msgid "Peer `%s': %s %s in state `%s' until %s\n" | 7364 | msgid "Peer `%s': %s %s in state `%s' until %s\n" |
6711 | msgstr "" | 7365 | msgstr "" |
6712 | 7366 | ||
6713 | #: src/transport/gnunet-transport.c:986 | 7367 | #: src/transport/gnunet-transport.c:1323 |
6714 | #, c-format | 7368 | #, c-format |
6715 | msgid "Peer `%s': %s %s\n" | 7369 | msgid "Peer `%s': %s %s\n" |
6716 | msgstr "" | 7370 | msgstr "" |
6717 | 7371 | ||
6718 | #: src/transport/gnunet-transport.c:1197 src/transport/gnunet-transport.c:1222 | 7372 | #: src/transport/gnunet-transport.c:1831 |
7373 | #: src/transport/gnunet-transport-profiler.c:492 | ||
6719 | msgid "Failed to send connect request to transport service\n" | 7374 | msgid "Failed to send connect request to transport service\n" |
6720 | msgstr "" | 7375 | msgstr "" |
6721 | 7376 | ||
6722 | #: src/transport/gnunet-transport.c:1266 | 7377 | #: src/transport/gnunet-transport.c:1866 |
7378 | msgid "Failed to send disconnect request to transport service\n" | ||
7379 | msgstr "" | ||
7380 | |||
7381 | #: src/transport/gnunet-transport.c:1910 | ||
6723 | #, c-format | 7382 | #, c-format |
6724 | msgid "Multiple operations given. Please choose only one operation: %s, %s, %s, %s, %s, %s\n" | 7383 | msgid "" |
7384 | "Multiple operations given. Please choose only one operation: %s, %s, %s, %s, " | ||
7385 | "%s, %s %s\n" | ||
6725 | msgstr "" | 7386 | msgstr "" |
6726 | 7387 | ||
6727 | #: src/transport/gnunet-transport.c:1274 | 7388 | #: src/transport/gnunet-transport.c:1918 |
6728 | #, c-format | 7389 | #, c-format |
6729 | msgid "No operation given. Please choose one operation: %s, %s, %s, %s, %s, %s\n" | 7390 | msgid "" |
7391 | "No operation given. Please choose one operation: %s, %s, %s, %s, %s, %s, %s\n" | ||
6730 | msgstr "" | 7392 | msgstr "" |
6731 | 7393 | ||
6732 | #: src/transport/gnunet-transport.c:1293 src/transport/gnunet-transport.c:1323 | 7394 | #: src/transport/gnunet-transport.c:1937 src/transport/gnunet-transport.c:1967 |
6733 | #: src/transport/gnunet-transport.c:1353 src/transport/gnunet-transport.c:1376 | 7395 | #: src/transport/gnunet-transport.c:2000 src/transport/gnunet-transport.c:2026 |
6734 | #: src/transport/gnunet-transport.c:1419 | 7396 | #: src/transport/gnunet-transport.c:2085 |
7397 | #: src/transport/gnunet-transport-profiler.c:578 | ||
6735 | msgid "Failed to connect to transport service\n" | 7398 | msgid "Failed to connect to transport service\n" |
6736 | msgstr "" | 7399 | msgstr "" |
6737 | 7400 | ||
6738 | #: src/transport/gnunet-transport.c:1302 src/transport/gnunet-transport.c:1332 | 7401 | #: src/transport/gnunet-transport.c:1946 src/transport/gnunet-transport.c:1977 |
6739 | #: src/transport/gnunet-transport.c:1362 | 7402 | #: src/transport/gnunet-transport.c:2011 |
6740 | msgid "Failed to send request to transport service\n" | 7403 | msgid "Failed to send request to transport service\n" |
6741 | msgstr "" | 7404 | msgstr "" |
6742 | 7405 | ||
6743 | #: src/transport/gnunet-transport.c:1381 | 7406 | #: src/transport/gnunet-transport.c:2031 |
6744 | msgid "Starting to receive benchmark data\n" | 7407 | msgid "Starting to receive benchmark data\n" |
6745 | msgstr "" | 7408 | msgstr "" |
6746 | 7409 | ||
6747 | #: src/transport/gnunet-transport.c:1465 | 7410 | #: src/transport/gnunet-transport.c:2133 |
6748 | msgid "print information for all peers (instead of only connected peers )" | 7411 | msgid "print information for all peers (instead of only connected peers)" |
6749 | msgstr "" | 7412 | msgstr "" |
6750 | 7413 | ||
6751 | #: src/transport/gnunet-transport.c:1468 | 7414 | #: src/transport/gnunet-transport.c:2136 |
6752 | msgid "measure how fast we are receiving data from all peers (until CTRL-C)" | 7415 | msgid "measure how fast we are receiving data from all peers (until CTRL-C)" |
6753 | msgstr "" | 7416 | msgstr "" |
6754 | 7417 | ||
6755 | #: src/transport/gnunet-transport.c:1471 | 7418 | #: src/transport/gnunet-transport.c:2139 |
6756 | msgid "connect to a peer" | 7419 | msgid "connect to a peer" |
6757 | msgstr "" | 7420 | msgstr "" |
6758 | 7421 | ||
6759 | #: src/transport/gnunet-transport.c:1474 | 7422 | #: src/transport/gnunet-transport.c:2142 |
6760 | msgid "disconnect to a peer" | 7423 | msgid "disconnect to a peer" |
6761 | msgstr "" | 7424 | msgstr "" |
6762 | 7425 | ||
6763 | #: src/transport/gnunet-transport.c:1477 | 7426 | #: src/transport/gnunet-transport.c:2145 |
6764 | msgid "print information for all pending validations " | 7427 | msgid "print information for all pending validations " |
6765 | msgstr "" | 7428 | msgstr "" |
6766 | 7429 | ||
6767 | #: src/transport/gnunet-transport.c:1480 | 7430 | #: src/transport/gnunet-transport.c:2148 |
6768 | msgid "print information for all pending validations continously" | 7431 | msgid "print information for all pending validations continuously" |
6769 | msgstr "" | 7432 | msgstr "" |
6770 | 7433 | ||
6771 | #: src/transport/gnunet-transport.c:1483 | 7434 | #: src/transport/gnunet-transport.c:2151 |
6772 | msgid "provide information about all current connections (once)" | 7435 | msgid "provide information about all current connections (once)" |
6773 | msgstr "" | 7436 | msgstr "" |
6774 | 7437 | ||
6775 | #: src/transport/gnunet-transport.c:1489 | 7438 | #: src/transport/gnunet-transport.c:2157 |
6776 | msgid "provide information about all connects and disconnect events (continuously)" | 7439 | msgid "" |
7440 | "provide information about all connects and disconnect events (continuously)" | ||
6777 | msgstr "" | 7441 | msgstr "" |
6778 | 7442 | ||
6779 | #: src/transport/gnunet-transport.c:1491 | 7443 | #: src/transport/gnunet-transport.c:2160 |
6780 | msgid "do not resolve hostnames" | 7444 | msgid "do not resolve hostnames" |
6781 | msgstr "" | 7445 | msgstr "" |
6782 | 7446 | ||
6783 | #: src/transport/gnunet-transport.c:1493 | 7447 | #: src/transport/gnunet-transport.c:2163 |
7448 | #: src/transport/gnunet-transport-profiler.c:638 | ||
6784 | msgid "peer identity" | 7449 | msgid "peer identity" |
6785 | msgstr "" | 7450 | msgstr "" |
6786 | 7451 | ||
6787 | #: src/transport/gnunet-transport.c:1495 | 7452 | #: src/transport/gnunet-transport.c:2166 |
7453 | msgid "monitor plugin sessions" | ||
7454 | msgstr "" | ||
7455 | |||
7456 | #: src/transport/gnunet-transport.c:2169 | ||
6788 | msgid "send data for benchmarking to the other peer (until CTRL-C)" | 7457 | msgid "send data for benchmarking to the other peer (until CTRL-C)" |
6789 | msgstr "" | 7458 | msgstr "" |
6790 | 7459 | ||
6791 | #: src/transport/gnunet-transport.c:1498 | 7460 | #: src/transport/gnunet-transport.c:2172 |
6792 | msgid "test transport configuration (involves external server)" | 7461 | msgid "test transport configuration (involves external server)" |
6793 | msgstr "" | 7462 | msgstr "" |
6794 | 7463 | ||
6795 | #: src/transport/gnunet-transport.c:1507 | 7464 | #: src/transport/gnunet-transport.c:2183 |
7465 | #: src/transport/gnunet-transport-profiler.c:649 | ||
6796 | msgid "Direct access to transport service." | 7466 | msgid "Direct access to transport service." |
6797 | msgstr "" | 7467 | msgstr "" |
6798 | 7468 | ||
6799 | #: src/transport/plugin_transport_bluetooth.c:621 | 7469 | #: src/transport/gnunet-transport-profiler.c:218 |
6800 | msgid "# Bluetooth ACKs sent" | 7470 | #, c-format |
7471 | msgid "%llu B in %llu ms == %.2f KB/s!\n" | ||
7472 | msgstr "" | ||
7473 | |||
7474 | #: src/transport/gnunet-transport-profiler.c:254 | ||
7475 | #, c-format | ||
7476 | msgid "%u;%u;%llu;%llu;%.2f;%.2f" | ||
6801 | msgstr "" | 7477 | msgstr "" |
6802 | 7478 | ||
6803 | #: src/transport/plugin_transport_bluetooth.c:640 | 7479 | #: src/transport/gnunet-transport-profiler.c:263 |
6804 | msgid "# Bluetooth messages defragmented" | 7480 | #, c-format |
7481 | msgid ";%llu;%.2f" | ||
6805 | msgstr "" | 7482 | msgstr "" |
6806 | 7483 | ||
6807 | #: src/transport/plugin_transport_bluetooth.c:686 | 7484 | #: src/transport/gnunet-transport-profiler.c:280 |
6808 | #: src/transport/plugin_transport_bluetooth.c:737 | 7485 | msgid "\n" |
6809 | #: src/transport/plugin_transport_bluetooth.c:1942 | ||
6810 | msgid "# Bluetooth sessions allocated" | ||
6811 | msgstr "" | 7486 | msgstr "" |
6812 | 7487 | ||
6813 | #: src/transport/plugin_transport_bluetooth.c:837 | 7488 | #: src/transport/gnunet-transport-profiler.c:332 |
6814 | msgid "# Bluetooth message fragments sent" | 7489 | msgid "." |
6815 | msgstr "" | 7490 | msgstr "" |
6816 | 7491 | ||
6817 | #: src/transport/plugin_transport_bluetooth.c:861 | 7492 | #: src/transport/gnunet-transport-profiler.c:352 |
6818 | msgid "# Bluetooth messages pending (with fragmentation)" | 7493 | #, c-format |
7494 | msgid "" | ||
7495 | "\n" | ||
7496 | "Starting benchmark to `%s', starting to send %u messages in %u byte blocks\n" | ||
6819 | msgstr "" | 7497 | msgstr "" |
6820 | 7498 | ||
6821 | #: src/transport/plugin_transport_bluetooth.c:969 | 7499 | #: src/transport/gnunet-transport-profiler.c:400 |
6822 | #: src/transport/plugin_transport_bluetooth.c:1054 | 7500 | #, c-format |
6823 | #: src/transport/plugin_transport_bluetooth.c:1944 | 7501 | msgid "Connected to different peer `%s'\n" |
6824 | msgid "# Bluetooth MAC endpoints allocated" | ||
6825 | msgstr "" | 7502 | msgstr "" |
6826 | 7503 | ||
6827 | #: src/transport/plugin_transport_bluetooth.c:1307 | 7504 | #: src/transport/gnunet-transport-profiler.c:483 |
6828 | msgid "# HELLO messages received via Bluetooth" | 7505 | #, c-format |
7506 | msgid "Retrying to connect to `%s'\n" | ||
6829 | msgstr "" | 7507 | msgstr "" |
6830 | 7508 | ||
6831 | #: src/transport/plugin_transport_bluetooth.c:1331 | 7509 | #: src/transport/gnunet-transport-profiler.c:508 |
6832 | msgid "# fragments received via Bluetooth" | 7510 | #, c-format |
7511 | msgid "Denying connection to `%s'\n" | ||
6833 | msgstr "" | 7512 | msgstr "" |
6834 | 7513 | ||
6835 | #: src/transport/plugin_transport_bluetooth.c:1341 | 7514 | #: src/transport/gnunet-transport-profiler.c:537 |
6836 | msgid "# ACKs received via Bluetooth" | 7515 | msgid "Message size too big!\n" |
6837 | msgstr "" | 7516 | msgstr "" |
6838 | 7517 | ||
6839 | #: src/transport/plugin_transport_bluetooth.c:1401 | 7518 | #: src/transport/gnunet-transport-profiler.c:543 |
6840 | msgid "# Bluetooth DATA messages discarded due to CRC32 error" | 7519 | msgid "No peer identity given\n" |
6841 | msgstr "" | 7520 | msgstr "" |
6842 | 7521 | ||
6843 | #: src/transport/plugin_transport_bluetooth.c:1512 | 7522 | #: src/transport/gnunet-transport-profiler.c:558 |
6844 | msgid "# DATA messages received via Bluetooth" | 7523 | #, c-format |
7524 | msgid "Trying to send %u messages with size %u to peer `%s'\n" | ||
6845 | msgstr "" | 7525 | msgstr "" |
6846 | 7526 | ||
6847 | #: src/transport/plugin_transport_bluetooth.c:1547 | 7527 | #: src/transport/gnunet-transport-profiler.c:564 |
6848 | msgid "# Bluetooth DATA messages processed" | 7528 | #, c-format |
7529 | msgid "Trying to receive messages from peer `%s'\n" | ||
6849 | msgstr "" | 7530 | msgstr "" |
6850 | 7531 | ||
6851 | #: src/transport/plugin_transport_bluetooth.c:1610 | 7532 | #: src/transport/gnunet-transport-profiler.c:569 |
6852 | msgid "# HELLO beacons sent via Bluetooth" | 7533 | msgid "No operation given\n" |
6853 | msgstr "" | 7534 | msgstr "" |
6854 | 7535 | ||
6855 | #: src/transport/plugin_transport_bluetooth.c:1723 | 7536 | #: src/transport/gnunet-transport-profiler.c:623 |
6856 | msgid "Bluetooth address with invalid size encountered\n" | 7537 | msgid "send data to peer" |
6857 | msgstr "" | 7538 | msgstr "" |
6858 | 7539 | ||
6859 | #: src/transport/plugin_transport_bluetooth.c:1923 | 7540 | #: src/transport/gnunet-transport-profiler.c:626 |
6860 | #, c-format | 7541 | msgid "receive data from peer" |
6861 | msgid "Helper binary `%s' not SUID, cannot run bluetooth transport\n" | ||
6862 | msgstr "" | 7542 | msgstr "" |
6863 | 7543 | ||
6864 | #: src/transport/plugin_transport_http_client.c:1622 | 7544 | #: src/transport/gnunet-transport-profiler.c:629 |
7545 | msgid "iterations" | ||
7546 | msgstr "" | ||
7547 | |||
7548 | #: src/transport/gnunet-transport-profiler.c:632 | ||
7549 | #, fuzzy | ||
7550 | msgid "number of messages to send" | ||
7551 | msgstr "nombre de valeurs" | ||
7552 | |||
7553 | #: src/transport/gnunet-transport-profiler.c:635 | ||
7554 | msgid "message size to use" | ||
7555 | msgstr "" | ||
7556 | |||
7557 | #: src/transport/plugin_transport_http_client.c:1481 | ||
7558 | #: src/transport/plugin_transport_http_server.c:2247 | ||
7559 | #: src/transport/plugin_transport_http_server.c:3414 | ||
7560 | #: src/transport/plugin_transport_tcp.c:2923 | ||
7561 | #: src/transport/plugin_transport_tcp.c:2930 | ||
7562 | msgid "TCP_STEALTH not supported on this platform.\n" | ||
7563 | msgstr "" | ||
7564 | |||
7565 | #: src/transport/plugin_transport_http_client.c:2106 | ||
6865 | #, c-format | 7566 | #, c-format |
6866 | msgid "Could not initialize curl multi handle, failed to start %s plugin!\n" | 7567 | msgid "Could not initialize curl multi handle, failed to start %s plugin!\n" |
6867 | msgstr "" | 7568 | msgstr "" |
6868 | 7569 | ||
6869 | #: src/transport/plugin_transport_http_client.c:1697 | 7570 | #: src/transport/plugin_transport_http_client.c:2155 |
6870 | #: src/transport/plugin_transport_http_server.c:3007 | 7571 | #: src/transport/plugin_transport_http_server.c:3148 |
6871 | #, c-format | 7572 | #, c-format |
6872 | msgid "Shutting down plugin `%s'\n" | 7573 | msgid "Shutting down plugin `%s'\n" |
6873 | msgstr "" | 7574 | msgstr "" |
6874 | 7575 | ||
6875 | #: src/transport/plugin_transport_http_client.c:1722 | 7576 | #: src/transport/plugin_transport_http_client.c:2172 |
6876 | #: src/transport/plugin_transport_http_server.c:3063 | 7577 | #: src/transport/plugin_transport_http_server.c:3218 |
6877 | #, c-format | 7578 | #, c-format |
6878 | msgid "Shutdown for plugin `%s' complete\n" | 7579 | msgid "Shutdown for plugin `%s' complete\n" |
6879 | msgstr "" | 7580 | msgstr "" |
6880 | 7581 | ||
6881 | #: src/transport/plugin_transport_http_client.c:1750 | 7582 | #: src/transport/plugin_transport_http_client.c:2206 |
6882 | #: src/transport/plugin_transport_http_server.c:2907 | ||
6883 | #, c-format | 7583 | #, c-format |
6884 | msgid "Maximum number of connections is %u\n" | 7584 | msgid "Maximum number of requests is %u\n" |
6885 | msgstr "" | 7585 | msgstr "" |
6886 | 7586 | ||
6887 | #: src/transport/plugin_transport_http_server.c:1402 | 7587 | #: src/transport/plugin_transport_http_server.c:1734 |
6888 | #, c-format | 7588 | #, c-format |
6889 | msgid "Access from connection %p (%u of %u) for `%s' `%s' url `%s' with upload data size %u\n" | 7589 | msgid "" |
7590 | "Access from connection %p (%u of %u) for `%s' `%s' url `%s' with upload data " | ||
7591 | "size %u\n" | ||
6890 | msgstr "" | 7592 | msgstr "" |
6891 | 7593 | ||
6892 | #: src/transport/plugin_transport_http_server.c:1663 | 7594 | #: src/transport/plugin_transport_http_server.c:1965 |
6893 | #, c-format | 7595 | #, c-format |
6894 | msgid "Accepting connection (%u of %u) from `%s'\n" | 7596 | msgid "Accepting connection (%u of %u) from `%s'\n" |
6895 | msgstr "" | 7597 | msgstr "" |
6896 | 7598 | ||
6897 | #: src/transport/plugin_transport_http_server.c:1671 | 7599 | #: src/transport/plugin_transport_http_server.c:1973 |
6898 | #, c-format | 7600 | #, c-format |
6899 | msgid "Server reached maximum number connections (%u), rejecting new connection\n" | 7601 | msgid "" |
7602 | "Server reached maximum number connections (%u), rejecting new connection\n" | ||
6900 | msgstr "" | 7603 | msgstr "" |
6901 | 7604 | ||
6902 | #: src/transport/plugin_transport_http_server.c:1958 | 7605 | #: src/transport/plugin_transport_http_server.c:2123 |
6903 | msgid "Could not create a new TLS certificate, program `gnunet-transport-certificate-creation' could not be started!\n" | 7606 | msgid "" |
7607 | "Could not create a new TLS certificate, program `gnunet-transport-" | ||
7608 | "certificate-creation' could not be started!\n" | ||
6904 | msgstr "" | 7609 | msgstr "" |
6905 | 7610 | ||
6906 | #: src/transport/plugin_transport_http_server.c:1982 | 7611 | #: src/transport/plugin_transport_http_server.c:2146 |
6907 | #, c-format | 7612 | #, c-format |
6908 | msgid "No usable TLS certificate found and creating one at `%s/%s' failed!\n" | 7613 | msgid "No usable TLS certificate found and creating one at `%s/%s' failed!\n" |
6909 | msgstr "" | 7614 | msgstr "" |
6910 | 7615 | ||
6911 | #: src/transport/plugin_transport_http_server.c:2405 | 7616 | #: src/transport/plugin_transport_http_server.c:2273 |
7617 | msgid "Could not load or create server certificate! Loading plugin failed!\n" | ||
7618 | msgstr "" | ||
7619 | |||
7620 | #: src/transport/plugin_transport_http_server.c:2582 | ||
6912 | msgid "Require valid port number for service in configuration!\n" | 7621 | msgid "Require valid port number for service in configuration!\n" |
6913 | msgstr "" | 7622 | msgstr "" |
6914 | 7623 | ||
6915 | #: src/transport/plugin_transport_http_server.c:2437 src/util/service.c:698 | 7624 | #: src/transport/plugin_transport_http_server.c:2616 src/util/service.c:704 |
6916 | #, c-format | 7625 | #, c-format |
6917 | msgid "Failed to resolve `%s': %s\n" | 7626 | msgid "Failed to resolve `%s': %s\n" |
6918 | msgstr "" | 7627 | msgstr "" |
6919 | 7628 | ||
6920 | #: src/transport/plugin_transport_http_server.c:2454 src/util/service.c:715 | 7629 | #: src/transport/plugin_transport_http_server.c:2634 src/util/service.c:723 |
6921 | #, c-format | 7630 | #, c-format |
6922 | msgid "Failed to find %saddress for `%s'.\n" | 7631 | msgid "Failed to find %saddress for `%s'.\n" |
6923 | msgstr "" | 7632 | msgstr "" |
6924 | 7633 | ||
6925 | #: src/transport/plugin_transport_http_server.c:2565 | 7634 | #: src/transport/plugin_transport_http_server.c:2747 |
6926 | #, c-format | 7635 | #, c-format |
6927 | msgid "Found %u addresses to report to NAT service\n" | 7636 | msgid "Found %u addresses to report to NAT service\n" |
6928 | msgstr "" | 7637 | msgstr "" |
6929 | 7638 | ||
6930 | #: src/transport/plugin_transport_http_server.c:2637 | 7639 | #: src/transport/plugin_transport_http_server.c:2825 |
7640 | #: src/transport/plugin_transport_udp.c:3335 | ||
6931 | msgid "Disabling IPv6 since it is not supported on this system!\n" | 7641 | msgid "Disabling IPv6 since it is not supported on this system!\n" |
6932 | msgstr "" | 7642 | msgstr "" |
6933 | 7643 | ||
6934 | #: src/transport/plugin_transport_http_server.c:2730 | 7644 | #: src/transport/plugin_transport_http_server.c:2924 |
6935 | #, c-format | 7645 | #, c-format |
6936 | msgid "IPv4 support is %s\n" | 7646 | msgid "IPv4 support is %s\n" |
6937 | msgstr "" | 7647 | msgstr "" |
6938 | 7648 | ||
6939 | #: src/transport/plugin_transport_http_server.c:2744 | 7649 | #: src/transport/plugin_transport_http_server.c:2939 |
6940 | #, c-format | 7650 | #, c-format |
6941 | msgid "IPv6 support is %s\n" | 7651 | msgid "IPv6 support is %s\n" |
6942 | msgstr "" | 7652 | msgstr "" |
6943 | 7653 | ||
6944 | #: src/transport/plugin_transport_http_server.c:2751 | 7654 | #: src/transport/plugin_transport_http_server.c:2945 |
6945 | msgid "Neither IPv4 nor IPv6 are enabled! Fix in configuration\n" | 7655 | msgid "Neither IPv4 nor IPv6 are enabled! Fix in configuration\n" |
6946 | msgstr "" | 7656 | msgstr "" |
6947 | 7657 | ||
6948 | #: src/transport/plugin_transport_http_server.c:2762 | 7658 | #: src/transport/plugin_transport_http_server.c:2956 |
6949 | msgid "Port is required! Fix in configuration\n" | 7659 | msgid "Port is required! Fix in configuration\n" |
6950 | msgstr "" | 7660 | msgstr "" |
6951 | 7661 | ||
6952 | #: src/transport/plugin_transport_http_server.c:2769 | 7662 | #: src/transport/plugin_transport_http_server.c:2962 |
6953 | #, c-format | 7663 | #, c-format |
6954 | msgid "Using port %u\n" | 7664 | msgid "Using port %u\n" |
6955 | msgstr "" | 7665 | msgstr "" |
6956 | 7666 | ||
6957 | #: src/transport/plugin_transport_http_server.c:2784 | 7667 | #: src/transport/plugin_transport_http_server.c:2976 |
6958 | #, c-format | 7668 | #, c-format |
6959 | msgid "Specific IPv4 address `%s' in configuration file is invalid!\n" | 7669 | msgid "Specific IPv4 address `%s' in configuration file is invalid!\n" |
6960 | msgstr "" | 7670 | msgstr "" |
6961 | 7671 | ||
6962 | #: src/transport/plugin_transport_http_server.c:2794 | 7672 | #: src/transport/plugin_transport_http_server.c:2986 |
6963 | #, c-format | 7673 | #, c-format |
6964 | msgid "Binding to IPv4 address %s\n" | 7674 | msgid "Binding to IPv4 address %s\n" |
6965 | msgstr "" | 7675 | msgstr "" |
6966 | 7676 | ||
6967 | #: src/transport/plugin_transport_http_server.c:2815 | 7677 | #: src/transport/plugin_transport_http_server.c:3008 |
6968 | #, c-format | 7678 | #, c-format |
6969 | msgid "Specific IPv6 address `%s' in configuration file is invalid!\n" | 7679 | msgid "Specific IPv6 address `%s' in configuration file is invalid!\n" |
6970 | msgstr "" | 7680 | msgstr "" |
6971 | 7681 | ||
6972 | #: src/transport/plugin_transport_http_server.c:2825 | 7682 | #: src/transport/plugin_transport_http_server.c:3018 |
6973 | #, c-format | 7683 | #, c-format |
6974 | msgid "Binding to IPv6 address %s\n" | 7684 | msgid "Binding to IPv6 address %s\n" |
6975 | msgstr "" | 7685 | msgstr "" |
6976 | 7686 | ||
6977 | #: src/transport/plugin_transport_http_server.c:2877 | 7687 | #: src/transport/plugin_transport_http_server.c:3081 |
6978 | #, c-format | 7688 | #, c-format |
6979 | msgid "Using external hostname `%s'\n" | 7689 | msgid "Using external hostname `%s'\n" |
6980 | msgstr "" | 7690 | msgstr "" |
6981 | 7691 | ||
6982 | #: src/transport/plugin_transport_http_server.c:2893 | 7692 | #: src/transport/plugin_transport_http_server.c:3102 |
6983 | #, c-format | 7693 | #, c-format |
6984 | msgid "Notifying transport only about hostname `%s'\n" | 7694 | msgid "Notifying transport only about hostname `%s'\n" |
6985 | msgstr "" | 7695 | msgstr "" |
6986 | 7696 | ||
7697 | #: src/transport/plugin_transport_http_server.c:3119 | ||
7698 | #, c-format | ||
7699 | msgid "Maximum number of connections is %u\n" | ||
7700 | msgstr "" | ||
7701 | |||
7702 | #: src/transport/plugin_transport_http_server.c:3426 | ||
7703 | msgid "Unable to compile URL regex\n" | ||
7704 | msgstr "" | ||
7705 | |||
6987 | #: src/transport/plugin_transport_smtp.c:223 | 7706 | #: src/transport/plugin_transport_smtp.c:223 |
6988 | #, c-format | 7707 | #, c-format |
6989 | msgid "Received malformed message via %s. Ignored.\n" | 7708 | msgid "Received malformed message via %s. Ignored.\n" |
@@ -7026,221 +7745,238 @@ msgstr "" | |||
7026 | msgid "# bytes dropped by SMTP (outgoing)" | 7745 | msgid "# bytes dropped by SMTP (outgoing)" |
7027 | msgstr "" | 7746 | msgstr "" |
7028 | 7747 | ||
7029 | #: src/transport/plugin_transport_tcp.c:555 | 7748 | #: src/transport/plugin_transport_tcp.c:672 |
7030 | #, c-format | 7749 | #, c-format |
7031 | msgid "Unexpected address length: %u bytes\n" | 7750 | msgid "Unexpected address length: %u bytes\n" |
7032 | msgstr "" | 7751 | msgstr "" |
7033 | 7752 | ||
7034 | #: src/transport/plugin_transport_tcp.c:762 | 7753 | #: src/transport/plugin_transport_tcp.c:855 |
7035 | #: src/transport/plugin_transport_tcp.c:928 | 7754 | #: src/transport/plugin_transport_tcp.c:1081 |
7036 | #: src/transport/plugin_transport_tcp.c:2005 | 7755 | #: src/transport/plugin_transport_tcp.c:2251 |
7037 | #: src/transport/plugin_transport_tcp.c:2558 | 7756 | #: src/transport/plugin_transport_tcp.c:3042 |
7038 | msgid "# TCP sessions active" | 7757 | msgid "# TCP sessions active" |
7039 | msgstr "" | 7758 | msgstr "" |
7040 | 7759 | ||
7041 | #: src/transport/plugin_transport_tcp.c:795 | 7760 | #: src/transport/plugin_transport_tcp.c:897 |
7042 | #: src/transport/plugin_transport_tcp.c:921 | 7761 | #: src/transport/plugin_transport_tcp.c:1063 |
7043 | #: src/transport/plugin_transport_tcp.c:1009 | 7762 | #: src/transport/plugin_transport_tcp.c:1187 |
7044 | #: src/transport/plugin_transport_tcp.c:1056 | 7763 | #: src/transport/plugin_transport_tcp.c:1260 |
7045 | #: src/transport/plugin_transport_tcp.c:1219 | 7764 | #: src/transport/plugin_transport_tcp.c:1360 |
7046 | #: src/transport/plugin_transport_tcp.c:1237 | 7765 | #: src/transport/plugin_transport_tcp.c:1385 |
7047 | msgid "# bytes currently in TCP buffers" | 7766 | msgid "# bytes currently in TCP buffers" |
7048 | msgstr "" | 7767 | msgstr "" |
7049 | 7768 | ||
7050 | #: src/transport/plugin_transport_tcp.c:798 | 7769 | #: src/transport/plugin_transport_tcp.c:900 |
7051 | msgid "# bytes discarded by TCP (disconnect)" | 7770 | msgid "# bytes discarded by TCP (disconnect)" |
7052 | msgstr "" | 7771 | msgstr "" |
7053 | 7772 | ||
7054 | #: src/transport/plugin_transport_tcp.c:1012 | 7773 | #: src/transport/plugin_transport_tcp.c:1190 |
7055 | msgid "# bytes discarded by TCP (timeout)" | 7774 | msgid "# bytes discarded by TCP (timeout)" |
7056 | msgstr "" | 7775 | msgstr "" |
7057 | 7776 | ||
7058 | #: src/transport/plugin_transport_tcp.c:1059 | 7777 | #: src/transport/plugin_transport_tcp.c:1264 |
7059 | msgid "# bytes transmitted via TCP" | 7778 | msgid "# bytes transmitted via TCP" |
7060 | msgstr "" | 7779 | msgstr "" |
7061 | 7780 | ||
7062 | #: src/transport/plugin_transport_tcp.c:1193 | 7781 | #: src/transport/plugin_transport_tcp.c:1659 |
7063 | #, c-format | ||
7064 | msgid "Trying to send with invalid session %p\n" | ||
7065 | msgstr "" | ||
7066 | |||
7067 | #: src/transport/plugin_transport_tcp.c:1462 | ||
7068 | msgid "# requests to create session with invalid address" | 7782 | msgid "# requests to create session with invalid address" |
7069 | msgstr "" | 7783 | msgstr "" |
7070 | 7784 | ||
7071 | #: src/transport/plugin_transport_tcp.c:1567 | 7785 | #: src/transport/plugin_transport_tcp.c:1827 |
7072 | msgid "# transport-service disconnect requests for TCP" | 7786 | msgid "# transport-service disconnect requests for TCP" |
7073 | msgstr "" | 7787 | msgstr "" |
7074 | 7788 | ||
7075 | #: src/transport/plugin_transport_tcp.c:2055 | 7789 | #: src/transport/plugin_transport_tcp.c:2310 |
7076 | msgid "# TCP WELCOME messages received" | 7790 | msgid "# TCP WELCOME messages received" |
7077 | msgstr "" | 7791 | msgstr "" |
7078 | 7792 | ||
7079 | #: src/transport/plugin_transport_tcp.c:2215 | 7793 | #: src/transport/plugin_transport_tcp.c:2501 |
7080 | msgid "# bytes received via TCP" | 7794 | msgid "# bytes received via TCP" |
7081 | msgstr "" | 7795 | msgstr "" |
7082 | 7796 | ||
7083 | #: src/transport/plugin_transport_tcp.c:2279 | 7797 | #: src/transport/plugin_transport_tcp.c:2552 |
7798 | #: src/transport/plugin_transport_tcp.c:2610 | ||
7799 | msgid "# TCP server connections active" | ||
7800 | msgstr "" | ||
7801 | |||
7802 | #: src/transport/plugin_transport_tcp.c:2556 | ||
7803 | msgid "# TCP server connect events" | ||
7804 | msgstr "" | ||
7805 | |||
7806 | #: src/transport/plugin_transport_tcp.c:2562 | ||
7807 | msgid "TCP connection limit reached, suspending server\n" | ||
7808 | msgstr "" | ||
7809 | |||
7810 | #: src/transport/plugin_transport_tcp.c:2564 | ||
7811 | msgid "# TCP service suspended" | ||
7812 | msgstr "" | ||
7813 | |||
7814 | #: src/transport/plugin_transport_tcp.c:2604 | ||
7815 | msgid "# TCP service resumed" | ||
7816 | msgstr "" | ||
7817 | |||
7818 | #: src/transport/plugin_transport_tcp.c:2614 | ||
7084 | msgid "# network-level TCP disconnect events" | 7819 | msgid "# network-level TCP disconnect events" |
7085 | msgstr "" | 7820 | msgstr "" |
7086 | 7821 | ||
7087 | #: src/transport/plugin_transport_tcp.c:2437 src/util/service.c:582 | 7822 | #: src/transport/plugin_transport_tcp.c:2857 src/util/service.c:584 |
7088 | #: src/util/service.c:588 | 7823 | #: src/util/service.c:590 |
7089 | #, c-format | 7824 | #, c-format |
7090 | msgid "Require valid port number for service `%s' in configuration!\n" | 7825 | msgid "Require valid port number for service `%s' in configuration!\n" |
7091 | msgstr "" | 7826 | msgstr "" |
7092 | 7827 | ||
7093 | #: src/transport/plugin_transport_tcp.c:2451 | 7828 | #: src/transport/plugin_transport_tcp.c:2873 |
7094 | msgid "Failed to start service.\n" | 7829 | msgid "Failed to start service.\n" |
7095 | msgstr "" | 7830 | msgstr "" |
7096 | 7831 | ||
7097 | #: src/transport/plugin_transport_tcp.c:2547 | 7832 | #: src/transport/plugin_transport_tcp.c:3030 |
7098 | #, c-format | 7833 | #, c-format |
7099 | msgid "TCP transport listening on port %llu\n" | 7834 | msgid "TCP transport listening on port %llu\n" |
7100 | msgstr "" | 7835 | msgstr "" |
7101 | 7836 | ||
7102 | #: src/transport/plugin_transport_tcp.c:2551 | 7837 | #: src/transport/plugin_transport_tcp.c:3034 |
7103 | msgid "TCP transport not listening on any port (client only)\n" | 7838 | msgid "TCP transport not listening on any port (client only)\n" |
7104 | msgstr "" | 7839 | msgstr "" |
7105 | 7840 | ||
7106 | #: src/transport/plugin_transport_tcp.c:2554 | 7841 | #: src/transport/plugin_transport_tcp.c:3038 |
7107 | #, c-format | 7842 | #, c-format |
7108 | msgid "TCP transport advertises itself as being on port %llu\n" | 7843 | msgid "TCP transport advertises itself as being on port %llu\n" |
7109 | msgstr "" | 7844 | msgstr "" |
7110 | 7845 | ||
7111 | #: src/transport/plugin_transport_udp_broadcasting.c:167 | 7846 | #: src/transport/plugin_transport_udp_broadcasting.c:170 |
7112 | msgid "# IPv6 multicast HELLO beacons received via udp" | 7847 | msgid "# Multicast HELLO beacons received via UDP" |
7113 | msgstr "" | ||
7114 | |||
7115 | #: src/transport/plugin_transport_udp_broadcasting.c:210 | ||
7116 | msgid "# IPv4 broadcast HELLO beacons received via udp" | ||
7117 | msgstr "" | 7848 | msgstr "" |
7118 | 7849 | ||
7119 | #: src/transport/plugin_transport_udp_broadcasting.c:603 | 7850 | #: src/transport/plugin_transport_udp_broadcasting.c:548 |
7120 | msgid "Disabling HELLO broadcasting due to friend-to-friend only configuration!\n" | 7851 | msgid "" |
7852 | "Disabling HELLO broadcasting due to friend-to-friend only configuration!\n" | ||
7121 | msgstr "" | 7853 | msgstr "" |
7122 | 7854 | ||
7123 | #: src/transport/plugin_transport_udp_broadcasting.c:626 | 7855 | #: src/transport/plugin_transport_udp_broadcasting.c:569 |
7124 | #, c-format | 7856 | #, c-format |
7125 | msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" | 7857 | msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" |
7126 | msgstr "" | 7858 | msgstr "" |
7127 | 7859 | ||
7128 | #: src/transport/plugin_transport_udp.c:1513 | 7860 | #: src/transport/plugin_transport_udp.c:3081 |
7129 | #, c-format | 7861 | #, c-format |
7130 | msgid "Trying to create session for address of unexpected length %u (should be %u or %u)\n" | 7862 | msgid "" |
7863 | "UDP could not transmit message to `%s': Network seems down, please check " | ||
7864 | "your network configuration\n" | ||
7865 | msgstr "" | ||
7866 | |||
7867 | #: src/transport/plugin_transport_udp.c:3095 | ||
7868 | msgid "" | ||
7869 | "UDP could not transmit IPv6 message! Please check your network configuration " | ||
7870 | "and disable IPv6 if your connection does not have a global IPv6 address\n" | ||
7131 | msgstr "" | 7871 | msgstr "" |
7132 | 7872 | ||
7133 | #: src/transport/plugin_transport_udp.c:2602 | 7873 | #: src/transport/plugin_transport_udp.c:3411 |
7874 | #: src/transport/plugin_transport_udp.c:3510 | ||
7134 | #, c-format | 7875 | #, c-format |
7135 | msgid "UDP could not transmit message to `%s': Network seems down, please check your network configuration\n" | 7876 | msgid "Failed to bind UDP socket to %s: %s\n" |
7136 | msgstr "" | 7877 | msgstr "" |
7137 | 7878 | ||
7138 | #: src/transport/plugin_transport_udp.c:2616 | 7879 | #: src/transport/plugin_transport_udp.c:3429 |
7139 | msgid "UDP could not transmit IPv6 message! Please check your network configuration and disable IPv6 if your connection does not have a global IPv6 address\n" | 7880 | msgid "Disabling IPv4 since it is not supported on this system!\n" |
7140 | msgstr "" | 7881 | msgstr "" |
7141 | 7882 | ||
7142 | #: src/transport/plugin_transport_udp.c:2961 | 7883 | #: src/transport/plugin_transport_udp.c:3520 |
7143 | msgid "Failed to open UDP sockets\n" | 7884 | msgid "Failed to open UDP sockets\n" |
7144 | msgstr "" | 7885 | msgstr "" |
7145 | 7886 | ||
7146 | #: src/transport/plugin_transport_udp.c:3056 | 7887 | #: src/transport/plugin_transport_udp.c:3591 |
7147 | #, c-format | 7888 | #: src/transport/plugin_transport_udp.c:3605 |
7148 | msgid "Given `%s' option is out of range: %llu > %u\n" | 7889 | msgid "must be in [0,65535]" |
7149 | msgstr "" | 7890 | msgstr "" |
7150 | 7891 | ||
7151 | #: src/transport/plugin_transport_udp.c:3097 | 7892 | #: src/transport/plugin_transport_udp.c:3637 |
7152 | #, c-format | 7893 | msgid "must be valid IPv4 address" |
7153 | msgid "Invalid IPv6 address: `%s'\n" | ||
7154 | msgstr "" | 7894 | msgstr "" |
7155 | 7895 | ||
7156 | #: src/transport/plugin_transport_udp.c:3168 | 7896 | #: src/transport/plugin_transport_udp.c:3664 |
7157 | msgid "Failed to create network sockets, plugin failed\n" | 7897 | msgid "must be valid IPv6 address" |
7158 | msgstr "" | 7898 | msgstr "" |
7159 | 7899 | ||
7160 | #: src/transport/plugin_transport_unix.c:1321 | 7900 | #: src/transport/plugin_transport_udp.c:3730 |
7901 | msgid "Failed to create UDP network sockets\n" | ||
7902 | msgstr "" | ||
7903 | |||
7904 | #: src/transport/plugin_transport_unix.c:1393 | ||
7161 | #, c-format | 7905 | #, c-format |
7162 | msgid "Cannot create path to `%s'\n" | 7906 | msgid "Cannot create path to `%s'\n" |
7163 | msgstr "" | 7907 | msgstr "" |
7164 | 7908 | ||
7165 | #: src/transport/plugin_transport_unix.c:1652 | 7909 | #: src/transport/plugin_transport_unix.c:1406 |
7166 | msgid "No UNIXPATH given in configuration!\n" | 7910 | #, c-format |
7911 | msgid "Cannot bind to `%s'\n" | ||
7167 | msgstr "" | 7912 | msgstr "" |
7168 | 7913 | ||
7169 | #: src/transport/plugin_transport_unix.c:1688 | 7914 | #: src/transport/plugin_transport_unix.c:1807 |
7170 | msgid "Failed to open UNIX listen socket\n" | 7915 | msgid "Failed to open UNIX listen socket\n" |
7171 | msgstr "" | 7916 | msgstr "" |
7172 | 7917 | ||
7173 | #: src/transport/plugin_transport_wlan.c:620 | 7918 | #: src/transport/plugin_transport_wlan.c:742 |
7174 | msgid "# WLAN ACKs sent" | 7919 | msgid "# ACKs sent" |
7175 | msgstr "" | ||
7176 | |||
7177 | #: src/transport/plugin_transport_wlan.c:639 | ||
7178 | msgid "# WLAN messages defragmented" | ||
7179 | msgstr "" | ||
7180 | |||
7181 | #: src/transport/plugin_transport_wlan.c:688 | ||
7182 | #: src/transport/plugin_transport_wlan.c:772 | ||
7183 | #: src/transport/plugin_transport_wlan.c:1948 | ||
7184 | msgid "# WLAN sessions allocated" | ||
7185 | msgstr "" | ||
7186 | |||
7187 | #: src/transport/plugin_transport_wlan.c:876 | ||
7188 | msgid "# WLAN message fragments sent" | ||
7189 | msgstr "" | 7920 | msgstr "" |
7190 | 7921 | ||
7191 | #: src/transport/plugin_transport_wlan.c:900 | 7922 | #: src/transport/plugin_transport_wlan.c:762 |
7192 | msgid "# WLAN messages pending (with fragmentation)" | 7923 | msgid "# Messages defragmented" |
7193 | msgstr "" | 7924 | msgstr "" |
7194 | 7925 | ||
7195 | #: src/transport/plugin_transport_wlan.c:1008 | 7926 | #: src/transport/plugin_transport_wlan.c:803 |
7196 | #: src/transport/plugin_transport_wlan.c:1098 | 7927 | #: src/transport/plugin_transport_wlan.c:890 |
7197 | #: src/transport/plugin_transport_wlan.c:1950 | 7928 | msgid "# Sessions allocated" |
7198 | msgid "# WLAN MAC endpoints allocated" | ||
7199 | msgstr "" | 7929 | msgstr "" |
7200 | 7930 | ||
7201 | #: src/transport/plugin_transport_wlan.c:1302 | 7931 | #: src/transport/plugin_transport_wlan.c:1011 |
7202 | msgid "# HELLO messages received via WLAN" | 7932 | msgid "# message fragments sent" |
7203 | msgstr "" | 7933 | msgstr "" |
7204 | 7934 | ||
7205 | #: src/transport/plugin_transport_wlan.c:1326 | 7935 | #: src/transport/plugin_transport_wlan.c:1040 |
7206 | msgid "# fragments received via WLAN" | 7936 | msgid "# messages pending (with fragmentation)" |
7207 | msgstr "" | 7937 | msgstr "" |
7208 | 7938 | ||
7209 | #: src/transport/plugin_transport_wlan.c:1336 | 7939 | #: src/transport/plugin_transport_wlan.c:1171 |
7210 | msgid "# ACKs received via WLAN" | 7940 | #: src/transport/plugin_transport_wlan.c:1264 |
7941 | #: src/transport/plugin_transport_wlan.c:2268 | ||
7942 | msgid "# MAC endpoints allocated" | ||
7211 | msgstr "" | 7943 | msgstr "" |
7212 | 7944 | ||
7213 | #: src/transport/plugin_transport_wlan.c:1396 | 7945 | #: src/transport/plugin_transport_wlan.c:1528 |
7214 | msgid "# WLAN DATA messages discarded due to CRC32 error" | 7946 | msgid "# ACKs received" |
7215 | msgstr "" | 7947 | msgstr "" |
7216 | 7948 | ||
7217 | #: src/transport/plugin_transport_wlan.c:1518 | 7949 | #: src/transport/plugin_transport_wlan.c:1597 |
7218 | msgid "# DATA messages received via WLAN" | 7950 | msgid "# DATA messages discarded due to CRC32 error" |
7219 | msgstr "" | 7951 | msgstr "" |
7220 | 7952 | ||
7221 | #: src/transport/plugin_transport_wlan.c:1553 | 7953 | #: src/transport/plugin_transport_wlan.c:1703 |
7222 | msgid "# WLAN DATA messages processed" | 7954 | msgid "# HELLO beacons sent" |
7223 | msgstr "" | 7955 | msgstr "" |
7224 | 7956 | ||
7225 | #: src/transport/plugin_transport_wlan.c:1616 | 7957 | #: src/transport/plugin_transport_wlan.c:1820 |
7226 | msgid "# HELLO beacons sent via WLAN" | 7958 | msgid "# DATA messages received" |
7227 | msgstr "" | 7959 | msgstr "" |
7228 | 7960 | ||
7229 | #: src/transport/plugin_transport_wlan.c:1729 | 7961 | #: src/transport/plugin_transport_wlan.c:1854 |
7230 | msgid "WLAN address with invalid size encountered\n" | 7962 | msgid "# DATA messages processed" |
7231 | msgstr "" | 7963 | msgstr "" |
7232 | 7964 | ||
7233 | #: src/transport/plugin_transport_wlan.c:1929 | 7965 | #: src/transport/plugin_transport_wlan.c:2243 |
7234 | #, c-format | 7966 | #, c-format |
7235 | msgid "Helper binary `%s' not SUID, cannot run WLAN transport\n" | 7967 | msgid "Helper binary `%s' not SUID, cannot run WLAN transport\n" |
7236 | msgstr "" | 7968 | msgstr "" |
7237 | 7969 | ||
7238 | #: src/transport/transport_api.c:739 | 7970 | #: src/transport/plugin_transport_wlan.c:2265 |
7971 | msgid "# sessions allocated" | ||
7972 | msgstr "" | ||
7973 | |||
7974 | #: src/transport/transport_api.c:812 | ||
7239 | #, c-format | 7975 | #, c-format |
7240 | msgid "Received unexpected message of type %u in %s:%u\n" | 7976 | msgid "Received unexpected message of type %u in %s:%u\n" |
7241 | msgstr "" | 7977 | msgstr "" |
7242 | 7978 | ||
7243 | #: src/transport/transport-testing.c:584 | 7979 | #: src/transport/transport-testing.c:603 |
7244 | msgid "Failed to initialize testing library!\n" | 7980 | msgid "Failed to initialize testing library!\n" |
7245 | msgstr "" | 7981 | msgstr "" |
7246 | 7982 | ||
@@ -7278,40 +8014,38 @@ msgstr "" | |||
7278 | msgid "Metadata `%s' failed to deserialize" | 8014 | msgid "Metadata `%s' failed to deserialize" |
7279 | msgstr "" | 8015 | msgstr "" |
7280 | 8016 | ||
7281 | #: src/util/client.c:261 src/util/client.c:858 src/util/service.c:619 | 8017 | #: src/util/client.c:263 src/util/client.c:889 src/util/service.c:621 |
7282 | #, c-format | 8018 | #, c-format |
7283 | msgid "UNIXPATH `%s' too long, maximum length is %llu\n" | 8019 | msgid "UNIXPATH `%s' too long, maximum length is %llu\n" |
7284 | msgstr "" | 8020 | msgstr "" |
7285 | 8021 | ||
7286 | #: src/util/client.c:265 src/util/client.c:863 src/util/service.c:623 | 8022 | #: src/util/client.c:267 src/util/client.c:894 src/util/service.c:625 |
7287 | #, c-format | 8023 | #, c-format |
7288 | msgid "Using `%s' instead\n" | 8024 | msgid "Using `%s' instead\n" |
7289 | msgstr "" | 8025 | msgstr "" |
7290 | 8026 | ||
7291 | #: src/util/client.c:360 | 8027 | #: src/util/client.c:362 |
7292 | #, c-format | 8028 | #, c-format |
7293 | msgid "Could not determine valid hostname and port for service `%s' from configuration.\n" | 8029 | msgid "" |
8030 | "Could not determine valid hostname and port for service `%s' from " | ||
8031 | "configuration.\n" | ||
7294 | msgstr "" | 8032 | msgstr "" |
7295 | 8033 | ||
7296 | #: src/util/client.c:368 | 8034 | #: src/util/client.c:370 |
7297 | #, c-format | 8035 | #, c-format |
7298 | msgid "Need a non-empty hostname for service `%s'.\n" | 8036 | msgid "Need a non-empty hostname for service `%s'.\n" |
7299 | msgstr "" | 8037 | msgstr "" |
7300 | 8038 | ||
7301 | #: src/util/client.c:1008 | 8039 | #: src/util/client.c:1039 |
7302 | #, c-format | 8040 | #, c-format |
7303 | msgid "Could not connect to service `%s', configuration broken.\n" | 8041 | msgid "Could not connect to service `%s', configuration broken.\n" |
7304 | msgstr "" | 8042 | msgstr "" |
7305 | 8043 | ||
7306 | #: src/util/client.c:1020 | 8044 | #: src/util/client.c:1051 |
7307 | #, c-format | 8045 | #, c-format |
7308 | msgid "Failure to transmit request to service `%s'\n" | 8046 | msgid "Failure to transmit request to service `%s'\n" |
7309 | msgstr "" | 8047 | msgstr "" |
7310 | 8048 | ||
7311 | #: src/util/client.c:1303 | ||
7312 | msgid "Could not submit request, not expecting to receive a response.\n" | ||
7313 | msgstr "" | ||
7314 | |||
7315 | #: src/util/common_logging.c:254 src/util/common_logging.c:1039 | 8049 | #: src/util/common_logging.c:254 src/util/common_logging.c:1039 |
7316 | msgid "DEBUG" | 8050 | msgid "DEBUG" |
7317 | msgstr "" | 8051 | msgstr "" |
@@ -7346,22 +8080,23 @@ msgstr "" | |||
7346 | msgid "INVALID" | 8080 | msgid "INVALID" |
7347 | msgstr "" | 8081 | msgstr "" |
7348 | 8082 | ||
7349 | #: src/util/common_logging.c:1157 | 8083 | #: src/util/common_logging.c:1158 |
7350 | msgid "unknown address" | 8084 | msgid "unknown address" |
7351 | msgstr "" | 8085 | msgstr "" |
7352 | 8086 | ||
7353 | #: src/util/common_logging.c:1196 | 8087 | #: src/util/common_logging.c:1200 |
7354 | msgid "invalid address" | 8088 | msgid "invalid address" |
7355 | msgstr "" | 8089 | msgstr "" |
7356 | 8090 | ||
7357 | #: src/util/common_logging.c:1214 | 8091 | #: src/util/common_logging.c:1218 |
7358 | #, c-format | 8092 | #, c-format |
7359 | msgid "Configuration fails to specify option `%s' in section `%s'!\n" | 8093 | msgid "Configuration fails to specify option `%s' in section `%s'!\n" |
7360 | msgstr "" | 8094 | msgstr "" |
7361 | 8095 | ||
7362 | #: src/util/common_logging.c:1235 | 8096 | #: src/util/common_logging.c:1239 |
7363 | #, c-format | 8097 | #, c-format |
7364 | msgid "Configuration specifies invalid value for option `%s' in section `%s': %s\n" | 8098 | msgid "" |
8099 | "Configuration specifies invalid value for option `%s' in section `%s': %s\n" | ||
7365 | msgstr "" | 8100 | msgstr "" |
7366 | 8101 | ||
7367 | #: src/util/configuration.c:288 | 8102 | #: src/util/configuration.c:288 |
@@ -7369,99 +8104,91 @@ msgstr "" | |||
7369 | msgid "Syntax error while deserializing in line %u\n" | 8104 | msgid "Syntax error while deserializing in line %u\n" |
7370 | msgstr "" | 8105 | msgstr "" |
7371 | 8106 | ||
7372 | #: src/util/configuration.c:996 | 8107 | #: src/util/configuration.c:1025 |
7373 | #, c-format | 8108 | #, c-format |
7374 | msgid "Configuration value '%s' for '%s' in section '%s' is not in set of legal choices\n" | 8109 | msgid "" |
8110 | "Configuration value '%s' for '%s' in section '%s' is not in set of legal " | ||
8111 | "choices\n" | ||
7375 | msgstr "" | 8112 | msgstr "" |
7376 | 8113 | ||
7377 | #: src/util/configuration.c:1066 | 8114 | #: src/util/configuration.c:1144 |
7378 | #, c-format | 8115 | #, c-format |
7379 | msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n" | 8116 | msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n" |
7380 | msgstr "" | 8117 | msgstr "" |
7381 | 8118 | ||
7382 | #: src/util/configuration.c:1098 | 8119 | #: src/util/configuration.c:1176 |
7383 | #, c-format | 8120 | #, c-format |
7384 | msgid "Missing closing `%s' in option `%s'\n" | 8121 | msgid "Missing closing `%s' in option `%s'\n" |
7385 | msgstr "" | 8122 | msgstr "" |
7386 | 8123 | ||
7387 | #: src/util/configuration.c:1172 | 8124 | #: src/util/configuration.c:1250 |
7388 | #, c-format | 8125 | #, c-format |
7389 | msgid "Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined as an environmental variable\n" | 8126 | msgid "" |
8127 | "Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined " | ||
8128 | "as an environmental variable\n" | ||
7390 | msgstr "" | 8129 | msgstr "" |
7391 | 8130 | ||
7392 | #: src/util/connection.c:423 | 8131 | #: src/util/connection.c:424 |
7393 | #, c-format | 8132 | #, c-format |
7394 | msgid "Access denied to `%s'\n" | 8133 | msgid "Access denied to `%s'\n" |
7395 | msgstr "" | 8134 | msgstr "" |
7396 | 8135 | ||
7397 | #: src/util/connection.c:438 | 8136 | #: src/util/connection.c:441 |
7398 | #, c-format | 8137 | #, c-format |
7399 | msgid "Accepting connection from `%s': %p\n" | 8138 | msgid "Accepting connection from `%s': %p\n" |
7400 | msgstr "" | 8139 | msgstr "" |
7401 | 8140 | ||
7402 | #: src/util/connection.c:553 | ||
7403 | #, c-format | ||
7404 | msgid "Failed to establish TCP connection to `%s:%u', no further addresses to try.\n" | ||
7405 | msgstr "" | ||
7406 | |||
7407 | #: src/util/connection.c:751 src/util/connection.c:919 | ||
7408 | #, c-format | ||
7409 | msgid "Trying to connect to `%s' (%p)\n" | ||
7410 | msgstr "" | ||
7411 | |||
7412 | #: src/util/connection.c:910 | ||
7413 | #, c-format | ||
7414 | msgid "Attempt to connect to `%s' failed\n" | ||
7415 | msgstr "" | ||
7416 | |||
7417 | #: src/util/container_bloomfilter.c:531 | 8141 | #: src/util/container_bloomfilter.c:531 |
7418 | #, c-format | 8142 | #, c-format |
7419 | msgid "Size of file on disk is incorrect for this Bloom filter (want %llu, have %llu)\n" | 8143 | msgid "" |
8144 | "Size of file on disk is incorrect for this Bloom filter (want %llu, have " | ||
8145 | "%llu)\n" | ||
7420 | msgstr "" | 8146 | msgstr "" |
7421 | 8147 | ||
7422 | #: src/util/crypto_ecc.c:702 src/util/crypto_ecc.c:740 | 8148 | #: src/util/crypto_ecc.c:733 src/util/crypto_ecc.c:771 |
7423 | #: src/util/crypto_ecc.c:858 src/util/crypto_ecc.c:896 | 8149 | #: src/util/crypto_ecc.c:889 src/util/crypto_ecc.c:927 |
7424 | #, c-format | 8150 | #, c-format |
7425 | msgid "Could not acquire lock on file `%s': %s...\n" | 8151 | msgid "Could not acquire lock on file `%s': %s...\n" |
7426 | msgstr "" | 8152 | msgstr "" |
7427 | 8153 | ||
7428 | #: src/util/crypto_ecc.c:707 src/util/crypto_ecc.c:863 | 8154 | #: src/util/crypto_ecc.c:738 src/util/crypto_ecc.c:894 |
7429 | msgid "Creating a new private key. This may take a while.\n" | 8155 | msgid "Creating a new private key. This may take a while.\n" |
7430 | msgstr "" | 8156 | msgstr "" |
7431 | 8157 | ||
7432 | #: src/util/crypto_ecc.c:744 src/util/crypto_ecc.c:900 | 8158 | #: src/util/crypto_ecc.c:775 src/util/crypto_ecc.c:931 |
7433 | msgid "This may be ok if someone is currently generating a private key.\n" | 8159 | msgid "This may be ok if someone is currently generating a private key.\n" |
7434 | msgstr "" | 8160 | msgstr "" |
7435 | 8161 | ||
7436 | #: src/util/crypto_ecc.c:774 src/util/crypto_ecc.c:930 | 8162 | #: src/util/crypto_ecc.c:805 src/util/crypto_ecc.c:961 |
7437 | #, c-format | 8163 | #, c-format |
7438 | msgid "When trying to read key file `%s' I found %u bytes but I need at least %u.\n" | 8164 | msgid "" |
8165 | "When trying to read key file `%s' I found %u bytes but I need at least %u.\n" | ||
7439 | msgstr "" | 8166 | msgstr "" |
7440 | 8167 | ||
7441 | #: src/util/crypto_ecc.c:778 src/util/crypto_ecc.c:934 | 8168 | #: src/util/crypto_ecc.c:809 src/util/crypto_ecc.c:965 |
7442 | msgid "This may be ok if someone is currently generating a key.\n" | 8169 | msgid "This may be ok if someone is currently generating a key.\n" |
7443 | msgstr "" | 8170 | msgstr "" |
7444 | 8171 | ||
7445 | #: src/util/crypto_ecc.c:1016 | 8172 | #: src/util/crypto_ecc.c:1047 |
7446 | msgid "Could not load peer's private key\n" | 8173 | msgid "Could not load peer's private key\n" |
7447 | msgstr "" | 8174 | msgstr "" |
7448 | 8175 | ||
7449 | #: src/util/crypto_ecc.c:1120 | 8176 | #: src/util/crypto_ecc.c:1151 |
7450 | #, c-format | 8177 | #, c-format |
7451 | msgid "ECC signing failed at %s:%d: %s\n" | 8178 | msgid "ECC signing failed at %s:%d: %s\n" |
7452 | msgstr "" | 8179 | msgstr "" |
7453 | 8180 | ||
7454 | #: src/util/crypto_ecc.c:1170 | 8181 | #: src/util/crypto_ecc.c:1201 |
7455 | #, c-format | 8182 | #, c-format |
7456 | msgid "EdDSA signing failed at %s:%d: %s\n" | 8183 | msgid "EdDSA signing failed at %s:%d: %s\n" |
7457 | msgstr "" | 8184 | msgstr "" |
7458 | 8185 | ||
7459 | #: src/util/crypto_ecc.c:1244 | 8186 | #: src/util/crypto_ecc.c:1275 |
7460 | #, c-format | 8187 | #, c-format |
7461 | msgid "ECDSA signature verification failed at %s:%d: %s\n" | 8188 | msgid "ECDSA signature verification failed at %s:%d: %s\n" |
7462 | msgstr "" | 8189 | msgstr "" |
7463 | 8190 | ||
7464 | #: src/util/crypto_ecc.c:1301 | 8191 | #: src/util/crypto_ecc.c:1332 |
7465 | #, c-format | 8192 | #, c-format |
7466 | msgid "EdDSA signature verification failed at %s:%d: %s\n" | 8193 | msgid "EdDSA signature verification failed at %s:%d: %s\n" |
7467 | msgstr "" | 8194 | msgstr "" |
@@ -7471,12 +8198,17 @@ msgstr "" | |||
7471 | msgid "libgcrypt has not the expected version (version %s is required).\n" | 8198 | msgid "libgcrypt has not the expected version (version %s is required).\n" |
7472 | msgstr "" | 8199 | msgstr "" |
7473 | 8200 | ||
7474 | #: src/util/disk.c:1184 | 8201 | #: src/util/crypto_rsa.c:825 |
8202 | #, c-format | ||
8203 | msgid "RSA signature verification failed at %s:%d: %s\n" | ||
8204 | msgstr "" | ||
8205 | |||
8206 | #: src/util/disk.c:1222 | ||
7475 | #, c-format | 8207 | #, c-format |
7476 | msgid "Expected `%s' to be a directory!\n" | 8208 | msgid "Expected `%s' to be a directory!\n" |
7477 | msgstr "" | 8209 | msgstr "" |
7478 | 8210 | ||
7479 | #: src/util/disk.c:1546 src/util/service.c:1318 | 8211 | #: src/util/disk.c:1584 src/util/service.c:1328 |
7480 | #, c-format | 8212 | #, c-format |
7481 | msgid "Cannot obtain information about user `%s': %s\n" | 8213 | msgid "Cannot obtain information about user `%s': %s\n" |
7482 | msgstr "" | 8214 | msgstr "" |
@@ -7541,126 +8273,137 @@ msgstr "" | |||
7541 | msgid "Use %s to get a list of options.\n" | 8273 | msgid "Use %s to get a list of options.\n" |
7542 | msgstr "" | 8274 | msgstr "" |
7543 | 8275 | ||
7544 | #: src/util/getopt_helpers.c:84 | 8276 | #: src/util/getopt_helpers.c:90 |
7545 | #, c-format | 8277 | #, c-format |
7546 | msgid "Arguments mandatory for long options are also mandatory for short options.\n" | 8278 | msgid "" |
8279 | "Arguments mandatory for long options are also mandatory for short options.\n" | ||
7547 | msgstr "" | 8280 | msgstr "" |
7548 | 8281 | ||
7549 | #: src/util/getopt_helpers.c:268 src/util/getopt_helpers.c:326 | 8282 | #: src/util/getopt_helpers.c:274 src/util/getopt_helpers.c:332 |
7550 | #, c-format | 8283 | #, c-format |
7551 | msgid "You must pass a number to the `%s' option.\n" | 8284 | msgid "You must pass a number to the `%s' option.\n" |
7552 | msgstr "" | 8285 | msgstr "" |
7553 | 8286 | ||
7554 | #: src/util/getopt_helpers.c:298 | 8287 | #: src/util/getopt_helpers.c:304 |
7555 | #, c-format | 8288 | #, c-format |
7556 | msgid "You must pass relative time to the `%s' option.\n" | 8289 | msgid "You must pass relative time to the `%s' option.\n" |
7557 | msgstr "" | 8290 | msgstr "" |
7558 | 8291 | ||
7559 | #: src/util/gnunet-config.c:90 | 8292 | #: src/util/gnunet-config.c:111 |
7560 | #, c-format | 8293 | #, c-format |
7561 | msgid "--section argument is required\n" | 8294 | msgid "--section argument is required\n" |
7562 | msgstr "" | 8295 | msgstr "" |
7563 | 8296 | ||
7564 | #: src/util/gnunet-config.c:133 | 8297 | #: src/util/gnunet-config.c:113 |
8298 | #, c-format | ||
8299 | msgid "The following sections are available:\n" | ||
8300 | msgstr "" | ||
8301 | |||
8302 | #: src/util/gnunet-config.c:157 | ||
7565 | #, c-format | 8303 | #, c-format |
7566 | msgid "--option argument required to set value\n" | 8304 | msgid "--option argument required to set value\n" |
7567 | msgstr "" | 8305 | msgstr "" |
7568 | 8306 | ||
7569 | #: src/util/gnunet-config.c:160 | 8307 | #: src/util/gnunet-config.c:184 |
7570 | msgid "obtain option of value as a filename (with $-expansion)" | 8308 | msgid "obtain option of value as a filename (with $-expansion)" |
7571 | msgstr "" | 8309 | msgstr "" |
7572 | 8310 | ||
7573 | #: src/util/gnunet-config.c:163 | 8311 | #: src/util/gnunet-config.c:187 |
7574 | msgid "name of the section to access" | 8312 | msgid "name of the section to access" |
7575 | msgstr "" | 8313 | msgstr "" |
7576 | 8314 | ||
7577 | #: src/util/gnunet-config.c:166 | 8315 | #: src/util/gnunet-config.c:190 |
7578 | msgid "name of the option to access" | 8316 | msgid "name of the option to access" |
7579 | msgstr "" | 8317 | msgstr "" |
7580 | 8318 | ||
7581 | #: src/util/gnunet-config.c:169 | 8319 | #: src/util/gnunet-config.c:193 |
7582 | msgid "value to set" | 8320 | msgid "value to set" |
7583 | msgstr "" | 8321 | msgstr "" |
7584 | 8322 | ||
7585 | #: src/util/gnunet-config.c:178 | 8323 | #: src/util/gnunet-config.c:196 |
8324 | msgid "print available configuration sections" | ||
8325 | msgstr "" | ||
8326 | |||
8327 | #: src/util/gnunet-config.c:205 | ||
7586 | msgid "Manipulate GNUnet configuration files" | 8328 | msgid "Manipulate GNUnet configuration files" |
7587 | msgstr "" | 8329 | msgstr "" |
7588 | 8330 | ||
7589 | #: src/util/gnunet-ecc.c:75 | 8331 | #: src/util/gnunet-ecc.c:81 |
7590 | #, c-format | 8332 | #, c-format |
7591 | msgid "Failed to open `%s': %s\n" | 8333 | msgid "Failed to open `%s': %s\n" |
7592 | msgstr "" | 8334 | msgstr "" |
7593 | 8335 | ||
7594 | #: src/util/gnunet-ecc.c:81 | 8336 | #: src/util/gnunet-ecc.c:117 |
8337 | #, c-format | ||
8338 | msgid "Generating %u keys like %s, please wait" | ||
8339 | msgstr "" | ||
8340 | |||
8341 | #: src/util/gnunet-ecc.c:130 | ||
7595 | #, c-format | 8342 | #, c-format |
7596 | msgid "Generating %u keys, please wait" | 8343 | msgid "Generating %u keys, please wait" |
7597 | msgstr "" | 8344 | msgstr "" |
7598 | 8345 | ||
7599 | #: src/util/gnunet-ecc.c:97 | 8346 | #: src/util/gnunet-ecc.c:171 |
7600 | #, c-format | 8347 | #, c-format |
7601 | msgid "" | 8348 | msgid "" |
7602 | "\n" | 8349 | "\n" |
7603 | "Failed to write to `%s': %s\n" | 8350 | "Failed to write to `%s': %s\n" |
7604 | msgstr "" | 8351 | msgstr "" |
7605 | 8352 | ||
7606 | #: src/util/gnunet-ecc.c:107 | 8353 | #: src/util/gnunet-ecc.c:181 |
7607 | #, c-format | 8354 | #, c-format |
7608 | msgid "" | 8355 | msgid "" |
7609 | "\n" | 8356 | "\n" |
7610 | "Finished!\n" | 8357 | "Finished!\n" |
7611 | msgstr "" | 8358 | msgstr "" |
7612 | 8359 | ||
7613 | #: src/util/gnunet-ecc.c:110 | 8360 | #: src/util/gnunet-ecc.c:184 |
7614 | #, c-format | 8361 | #, c-format |
7615 | msgid "" | 8362 | msgid "" |
7616 | "\n" | 8363 | "\n" |
7617 | "Error, %u keys not generated\n" | 8364 | "Error, %u keys not generated\n" |
7618 | msgstr "" | 8365 | msgstr "" |
7619 | 8366 | ||
7620 | #: src/util/gnunet-ecc.c:199 | 8367 | #: src/util/gnunet-ecc.c:277 |
7621 | #, c-format | 8368 | #, c-format |
7622 | msgid "Hostkeys file `%s' not found\n" | 8369 | msgid "Hostkeys file `%s' not found\n" |
7623 | msgstr "" | 8370 | msgstr "" |
7624 | 8371 | ||
7625 | #: src/util/gnunet-ecc.c:210 | 8372 | #: src/util/gnunet-ecc.c:288 |
7626 | #, c-format | 8373 | #, c-format |
7627 | msgid "Hostkeys file `%s' is empty\n" | 8374 | msgid "Hostkeys file `%s' is empty\n" |
7628 | msgstr "" | 8375 | msgstr "" |
7629 | 8376 | ||
7630 | #: src/util/gnunet-ecc.c:232 | 8377 | #: src/util/gnunet-ecc.c:310 |
7631 | #, c-format | 8378 | #, c-format |
7632 | msgid "Could not read hostkey file: %s\n" | 8379 | msgid "Could not read hostkey file: %s\n" |
7633 | msgstr "" | 8380 | msgstr "" |
7634 | 8381 | ||
7635 | #: src/util/gnunet-ecc.c:283 | 8382 | #: src/util/gnunet-ecc.c:361 |
7636 | msgid "No hostkey file specified on command line\n" | 8383 | msgid "No hostkey file specified on command line\n" |
7637 | msgstr "" | 8384 | msgstr "" |
7638 | 8385 | ||
7639 | #: src/util/gnunet-ecc.c:349 | 8386 | #: src/util/gnunet-ecc.c:411 |
7640 | msgid "list keys included in a file (for testing)" | 8387 | msgid "list keys included in a file (for testing)" |
7641 | msgstr "" | 8388 | msgstr "" |
7642 | 8389 | ||
7643 | #: src/util/gnunet-ecc.c:352 | 8390 | #: src/util/gnunet-ecc.c:414 |
7644 | msgid "number of keys to list included in a file (for testing)" | 8391 | msgid "number of keys to list included in a file (for testing)" |
7645 | msgstr "" | 8392 | msgstr "" |
7646 | 8393 | ||
7647 | #: src/util/gnunet-ecc.c:355 | 8394 | #: src/util/gnunet-ecc.c:417 |
7648 | msgid "create COUNT public-private key pairs (for testing)" | 8395 | msgid "create COUNT public-private key pairs (for testing)" |
7649 | msgstr "" | 8396 | msgstr "" |
7650 | 8397 | ||
7651 | #: src/util/gnunet-ecc.c:358 | 8398 | #: src/util/gnunet-ecc.c:420 |
7652 | msgid "print the public key in ASCII format" | 8399 | msgid "print the public key in ASCII format" |
7653 | msgstr "" | 8400 | msgstr "" |
7654 | 8401 | ||
7655 | #: src/util/gnunet-ecc.c:361 | 8402 | #: src/util/gnunet-ecc.c:423 |
7656 | msgid "print the hash of the public key in ASCII format" | ||
7657 | msgstr "" | ||
7658 | |||
7659 | #: src/util/gnunet-ecc.c:364 | ||
7660 | msgid "print examples of ECC operations (used for compatibility testing)" | 8403 | msgid "print examples of ECC operations (used for compatibility testing)" |
7661 | msgstr "" | 8404 | msgstr "" |
7662 | 8405 | ||
7663 | #: src/util/gnunet-ecc.c:375 | 8406 | #: src/util/gnunet-ecc.c:434 |
7664 | msgid "Manipulate GNUnet private ECC key files" | 8407 | msgid "Manipulate GNUnet private ECC key files" |
7665 | msgstr "" | 8408 | msgstr "" |
7666 | 8409 | ||
@@ -7672,33 +8415,38 @@ msgstr "" | |||
7672 | msgid "Use build-in GNUnet stub resolver" | 8415 | msgid "Use build-in GNUnet stub resolver" |
7673 | msgstr "" | 8416 | msgstr "" |
7674 | 8417 | ||
7675 | #: src/util/gnunet-scrypt.c:279 | 8418 | #: src/util/gnunet-scrypt.c:233 |
8419 | #, c-format | ||
8420 | msgid "Loading hostkey from `%s' failed.\n" | ||
8421 | msgstr "" | ||
8422 | |||
8423 | #: src/util/gnunet-scrypt.c:294 | ||
7676 | msgid "number of bits to require for the proof of work" | 8424 | msgid "number of bits to require for the proof of work" |
7677 | msgstr "" | 8425 | msgstr "" |
7678 | 8426 | ||
7679 | #: src/util/gnunet-scrypt.c:282 | 8427 | #: src/util/gnunet-scrypt.c:297 |
7680 | msgid "file with private key, otherwise default is used" | 8428 | msgid "file with private key, otherwise default is used" |
7681 | msgstr "" | 8429 | msgstr "" |
7682 | 8430 | ||
7683 | #: src/util/gnunet-scrypt.c:285 | 8431 | #: src/util/gnunet-scrypt.c:300 |
7684 | msgid "file with proof of work, otherwise default is used" | 8432 | msgid "file with proof of work, otherwise default is used" |
7685 | msgstr "" | 8433 | msgstr "" |
7686 | 8434 | ||
7687 | #: src/util/gnunet-scrypt.c:288 | 8435 | #: src/util/gnunet-scrypt.c:303 |
7688 | msgid "time to wait between calculations" | 8436 | msgid "time to wait between calculations" |
7689 | msgstr "" | 8437 | msgstr "" |
7690 | 8438 | ||
7691 | #: src/util/gnunet-scrypt.c:299 | 8439 | #: src/util/gnunet-scrypt.c:315 |
7692 | msgid "Manipulate GNUnet proof of work files" | 8440 | msgid "Manipulate GNUnet proof of work files" |
7693 | msgstr "" | 8441 | msgstr "" |
7694 | 8442 | ||
7695 | #: src/util/gnunet-service-resolver.c:299 | 8443 | #: src/util/gnunet-service-resolver.c:310 |
7696 | #, c-format | 8444 | #, c-format |
7697 | msgid "Could not resolve `%s' (%s): %s\n" | 8445 | msgid "Could not resolve `%s' (%s): %s\n" |
7698 | msgstr "" | 8446 | msgstr "" |
7699 | 8447 | ||
7700 | #: src/util/gnunet-service-resolver.c:371 | 8448 | #: src/util/gnunet-service-resolver.c:382 |
7701 | #: src/util/gnunet-service-resolver.c:412 | 8449 | #: src/util/gnunet-service-resolver.c:423 |
7702 | #, c-format | 8450 | #, c-format |
7703 | msgid "Could not find IP of host `%s': %s\n" | 8451 | msgid "Could not find IP of host `%s': %s\n" |
7704 | msgstr "" | 8452 | msgstr "" |
@@ -7727,34 +8475,37 @@ msgstr "" | |||
7727 | msgid "Perform default-actions for GNUnet URIs" | 8475 | msgid "Perform default-actions for GNUnet URIs" |
7728 | msgstr "" | 8476 | msgstr "" |
7729 | 8477 | ||
7730 | #: src/util/helper.c:338 | 8478 | #: src/util/helper.c:342 |
7731 | #, c-format | 8479 | #, c-format |
7732 | msgid "Error reading from `%s': %s\n" | 8480 | msgid "Error reading from `%s': %s\n" |
7733 | msgstr "" | 8481 | msgstr "" |
7734 | 8482 | ||
7735 | #: src/util/helper.c:383 | 8483 | #: src/util/helper.c:388 |
7736 | #, c-format | 8484 | #, c-format |
7737 | msgid "Failed to parse inbound message from helper `%s'\n" | 8485 | msgid "Failed to parse inbound message from helper `%s'\n" |
7738 | msgstr "" | 8486 | msgstr "" |
7739 | 8487 | ||
7740 | #: src/util/helper.c:609 | 8488 | #: src/util/helper.c:620 |
7741 | #, c-format | 8489 | #, c-format |
7742 | msgid "Error writing to `%s': %s\n" | 8490 | msgid "Error writing to `%s': %s\n" |
7743 | msgstr "" | 8491 | msgstr "" |
7744 | 8492 | ||
7745 | #: src/util/network.c:134 | 8493 | #: src/util/network.c:137 |
7746 | #, c-format | 8494 | #, c-format |
7747 | msgid "Unable to shorten unix path `%s' while keeping name unique\n" | 8495 | msgid "Unable to shorten unix path `%s' while keeping name unique\n" |
7748 | msgstr "" | 8496 | msgstr "" |
7749 | 8497 | ||
7750 | #: src/util/network.c:1355 src/util/network.c:1480 | 8498 | #: src/util/network.c:1681 src/util/network.c:1857 |
7751 | #, c-format | 8499 | #, c-format |
7752 | msgid "Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n" | 8500 | msgid "" |
8501 | "Fatal internal logic error, process hangs in `%s' (abort with CTRL-C)!\n" | ||
7753 | msgstr "" | 8502 | msgstr "" |
7754 | 8503 | ||
7755 | #: src/util/os_installation.c:421 | 8504 | #: src/util/os_installation.c:421 |
7756 | #, c-format | 8505 | #, c-format |
7757 | msgid "Could not determine installation path for %s. Set `%s' environment variable.\n" | 8506 | msgid "" |
8507 | "Could not determine installation path for %s. Set `%s' environment " | ||
8508 | "variable.\n" | ||
7758 | msgstr "" | 8509 | msgstr "" |
7759 | 8510 | ||
7760 | #: src/util/os_installation.c:766 | 8511 | #: src/util/os_installation.c:766 |
@@ -7772,74 +8523,66 @@ msgstr "" | |||
7772 | msgid "GetExitCodeProcess failed for binary %s (%d).\n" | 8523 | msgid "GetExitCodeProcess failed for binary %s (%d).\n" |
7773 | msgstr "" | 8524 | msgstr "" |
7774 | 8525 | ||
7775 | #: src/util/plugin.c:87 | 8526 | #: src/util/plugin.c:86 |
7776 | #, c-format | 8527 | #, c-format |
7777 | msgid "Initialization of plugin mechanism failed: %s!\n" | 8528 | msgid "Initialization of plugin mechanism failed: %s!\n" |
7778 | msgstr "" | 8529 | msgstr "" |
7779 | 8530 | ||
7780 | #: src/util/plugin.c:148 | 8531 | #: src/util/plugin.c:151 |
7781 | #, c-format | 8532 | #, c-format |
7782 | msgid "`%s' failed to resolve method '%s' with error: %s\n" | 8533 | msgid "`%s' failed to resolve method '%s' with error: %s\n" |
7783 | msgstr "" | 8534 | msgstr "" |
7784 | 8535 | ||
7785 | #: src/util/plugin.c:223 | 8536 | #: src/util/plugin.c:226 |
7786 | #, c-format | 8537 | #, c-format |
7787 | msgid "`%s' failed for library `%s' with error: %s\n" | 8538 | msgid "`%s' failed for library `%s' with error: %s\n" |
7788 | msgstr "" | 8539 | msgstr "" |
7789 | 8540 | ||
7790 | #: src/util/plugin.c:382 | 8541 | #: src/util/plugin.c:385 |
7791 | msgid "Could not determine plugin installation path.\n" | 8542 | msgid "Could not determine plugin installation path.\n" |
7792 | msgstr "" | 8543 | msgstr "" |
7793 | 8544 | ||
7794 | #: src/util/program.c:246 src/util/service.c:1452 | 8545 | #: src/util/program.c:246 src/util/service.c:1462 |
7795 | #, c-format | 8546 | #, c-format |
7796 | msgid "Malformed configuration file `%s', exit ...\n" | 8547 | msgid "Malformed configuration file `%s', exit ...\n" |
7797 | msgstr "" | 8548 | msgstr "" |
7798 | 8549 | ||
7799 | #: src/util/program.c:258 src/util/service.c:1467 | 8550 | #: src/util/program.c:258 src/util/service.c:1477 |
7800 | #, c-format | 8551 | #, c-format |
7801 | msgid "Could not access configuration file `%s'\n" | 8552 | msgid "Could not access configuration file `%s'\n" |
7802 | msgstr "" | 8553 | msgstr "" |
7803 | 8554 | ||
7804 | #: src/util/program.c:263 src/util/service.c:1462 | 8555 | #: src/util/program.c:263 src/util/service.c:1472 |
7805 | msgid "Malformed configuration, exit ...\n" | 8556 | msgid "Malformed configuration, exit ...\n" |
7806 | msgstr "" | 8557 | msgstr "" |
7807 | 8558 | ||
7808 | #: src/util/resolver_api.c:198 | 8559 | #: src/util/resolver_api.c:201 |
7809 | #, c-format | 8560 | #, c-format |
7810 | msgid "Must specify `%s' for `%s' in configuration!\n" | 8561 | msgid "Must specify `%s' for `%s' in configuration!\n" |
7811 | msgstr "" | 8562 | msgstr "" |
7812 | 8563 | ||
7813 | #: src/util/resolver_api.c:216 | 8564 | #: src/util/resolver_api.c:220 |
7814 | #, c-format | 8565 | #, c-format |
7815 | msgid "Must specify `%s' or numeric IP address for `%s' of `%s' in configuration!\n" | 8566 | msgid "" |
8567 | "Must specify `%s' or numeric IP address for `%s' of `%s' in configuration!\n" | ||
7816 | msgstr "" | 8568 | msgstr "" |
7817 | 8569 | ||
7818 | #: src/util/resolver_api.c:348 | 8570 | #: src/util/resolver_api.c:354 |
7819 | #, c-format | 8571 | #, c-format |
7820 | msgid "Timeout trying to resolve IP address `%s'.\n" | 8572 | msgid "Timeout trying to resolve IP address `%s'.\n" |
7821 | msgstr "" | 8573 | msgstr "" |
7822 | 8574 | ||
7823 | #: src/util/resolver_api.c:352 | 8575 | #: src/util/resolver_api.c:361 |
7824 | #, c-format | 8576 | #, c-format |
7825 | msgid "Timeout trying to resolve hostname `%s'.\n" | 8577 | msgid "Timeout trying to resolve hostname `%s'.\n" |
7826 | msgstr "" | 8578 | msgstr "" |
7827 | 8579 | ||
7828 | #: src/util/resolver_api.c:908 | 8580 | #: src/util/resolver_api.c:1004 |
7829 | #, c-format | 8581 | #, c-format |
7830 | msgid "Could not resolve our FQDN : %s\n" | 8582 | msgid "Could not resolve our FQDN : %s\n" |
7831 | msgstr "" | 8583 | msgstr "" |
7832 | 8584 | ||
7833 | #: src/util/scheduler.c:813 | 8585 | #: src/util/server.c:483 |
7834 | msgid "Looks like we're busy waiting...\n" | ||
7835 | msgstr "" | ||
7836 | |||
7837 | #: src/util/scheduler.c:948 | ||
7838 | #, c-format | ||
7839 | msgid "Attempt to cancel dead task %llu!\n" | ||
7840 | msgstr "" | ||
7841 | |||
7842 | #: src/util/server.c:484 | ||
7843 | #, c-format | 8586 | #, c-format |
7844 | msgid "`%s' failed for port %d (%s).\n" | 8587 | msgid "`%s' failed for port %d (%s).\n" |
7845 | msgstr "" | 8588 | msgstr "" |
@@ -7854,9 +8597,11 @@ msgstr "" | |||
7854 | msgid "`%s' failed for `%s': address already in use\n" | 8597 | msgid "`%s' failed for `%s': address already in use\n" |
7855 | msgstr "" | 8598 | msgstr "" |
7856 | 8599 | ||
7857 | #: src/util/server.c:892 | 8600 | #: src/util/server.c:904 |
7858 | #, c-format | 8601 | #, c-format |
7859 | msgid "Processing code for message of type %u did not call `GNUNET_SERVER_receive_done' after %s\n" | 8602 | msgid "" |
8603 | "Processing code for message of type %u did not call " | ||
8604 | "`GNUNET_SERVER_receive_done' after %s\n" | ||
7860 | msgstr "" | 8605 | msgstr "" |
7861 | 8606 | ||
7862 | #: src/util/service.c:347 | 8607 | #: src/util/service.c:347 |
@@ -7869,77 +8614,80 @@ msgstr "" | |||
7869 | msgid "Access from `%s' denied to service `%s'\n" | 8614 | msgid "Access from `%s' denied to service `%s'\n" |
7870 | msgstr "" | 8615 | msgstr "" |
7871 | 8616 | ||
7872 | #: src/util/service.c:409 | 8617 | #: src/util/service.c:410 |
7873 | #, c-format | 8618 | #, c-format |
7874 | msgid "Could not parse IPv4 network specification `%s' for `%s:%s'\n" | 8619 | msgid "Could not parse IPv4 network specification `%s' for `%s:%s'\n" |
7875 | msgstr "" | 8620 | msgstr "" |
7876 | 8621 | ||
7877 | #: src/util/service.c:446 | 8622 | #: src/util/service.c:448 |
7878 | #, c-format | 8623 | #, c-format |
7879 | msgid "Could not parse IPv6 network specification `%s' for `%s:%s'\n" | 8624 | msgid "Could not parse IPv6 network specification `%s' for `%s:%s'\n" |
7880 | msgstr "" | 8625 | msgstr "" |
7881 | 8626 | ||
7882 | #: src/util/service.c:563 | 8627 | #: src/util/service.c:565 |
7883 | #, c-format | 8628 | #, c-format |
7884 | msgid "Disabling IPv6 support for service `%s', failed to create IPv6 socket: %s\n" | 8629 | msgid "" |
8630 | "Disabling IPv6 support for service `%s', failed to create IPv6 socket: %s\n" | ||
7885 | msgstr "" | 8631 | msgstr "" |
7886 | 8632 | ||
7887 | #: src/util/service.c:653 | 8633 | #: src/util/service.c:656 |
7888 | #, c-format | 8634 | #, c-format |
7889 | msgid "Disabling UNIX domain socket support for service `%s', failed to create UNIX domain socket: %s\n" | 8635 | msgid "" |
8636 | "Disabling UNIX domain socket support for service `%s', failed to create UNIX " | ||
8637 | "domain socket: %s\n" | ||
7890 | msgstr "" | 8638 | msgstr "" |
7891 | 8639 | ||
7892 | #: src/util/service.c:669 | 8640 | #: src/util/service.c:673 |
7893 | #, c-format | 8641 | #, c-format |
7894 | msgid "Have neither PORT nor UNIXPATH for service `%s', but one is required\n" | 8642 | msgid "Have neither PORT nor UNIXPATH for service `%s', but one is required\n" |
7895 | msgstr "" | 8643 | msgstr "" |
7896 | 8644 | ||
7897 | #: src/util/service.c:903 | 8645 | #: src/util/service.c:912 |
7898 | msgid "Could not access a pre-bound socket, will try to bind myself\n" | 8646 | msgid "Could not access a pre-bound socket, will try to bind myself\n" |
7899 | msgstr "" | 8647 | msgstr "" |
7900 | 8648 | ||
7901 | #: src/util/service.c:952 src/util/service.c:970 | 8649 | #: src/util/service.c:961 src/util/service.c:979 |
7902 | #, c-format | 8650 | #, c-format |
7903 | msgid "Specified value for `%s' of service `%s' is invalid\n" | 8651 | msgid "Specified value for `%s' of service `%s' is invalid\n" |
7904 | msgstr "" | 8652 | msgstr "" |
7905 | 8653 | ||
7906 | #: src/util/service.c:995 | 8654 | #: src/util/service.c:1004 |
7907 | #, c-format | 8655 | #, c-format |
7908 | msgid "Could not access pre-bound socket %u, will try to bind myself\n" | 8656 | msgid "Could not access pre-bound socket %u, will try to bind myself\n" |
7909 | msgstr "" | 8657 | msgstr "" |
7910 | 8658 | ||
7911 | #: src/util/service.c:1165 | 8659 | #: src/util/service.c:1175 |
7912 | #, c-format | 8660 | #, c-format |
7913 | msgid "Failed to start `%s' at `%s'\n" | 8661 | msgid "Failed to start `%s' at `%s'\n" |
7914 | msgstr "" | 8662 | msgstr "" |
7915 | 8663 | ||
7916 | #: src/util/service.c:1207 | 8664 | #: src/util/service.c:1217 |
7917 | #, c-format | 8665 | #, c-format |
7918 | msgid "Service `%s' runs at %s\n" | 8666 | msgid "Service `%s' runs at %s\n" |
7919 | msgstr "" | 8667 | msgstr "" |
7920 | 8668 | ||
7921 | #: src/util/service.c:1256 | 8669 | #: src/util/service.c:1266 |
7922 | msgid "Service process failed to initialize\n" | 8670 | msgid "Service process failed to initialize\n" |
7923 | msgstr "" | 8671 | msgstr "" |
7924 | 8672 | ||
7925 | #: src/util/service.c:1260 | 8673 | #: src/util/service.c:1270 |
7926 | msgid "Service process could not initialize server function\n" | 8674 | msgid "Service process could not initialize server function\n" |
7927 | msgstr "" | 8675 | msgstr "" |
7928 | 8676 | ||
7929 | #: src/util/service.c:1264 | 8677 | #: src/util/service.c:1274 |
7930 | msgid "Service process failed to report status\n" | 8678 | msgid "Service process failed to report status\n" |
7931 | msgstr "" | 8679 | msgstr "" |
7932 | 8680 | ||
7933 | #: src/util/service.c:1319 | 8681 | #: src/util/service.c:1329 |
7934 | msgid "No such user" | 8682 | msgid "No such user" |
7935 | msgstr "" | 8683 | msgstr "" |
7936 | 8684 | ||
7937 | #: src/util/service.c:1332 | 8685 | #: src/util/service.c:1342 |
7938 | #, c-format | 8686 | #, c-format |
7939 | msgid "Cannot change user/group to `%s': %s\n" | 8687 | msgid "Cannot change user/group to `%s': %s\n" |
7940 | msgstr "" | 8688 | msgstr "" |
7941 | 8689 | ||
7942 | #: src/util/service.c:1402 | 8690 | #: src/util/service.c:1412 |
7943 | msgid "do daemonize (detach from terminal)" | 8691 | msgid "do daemonize (detach from terminal)" |
7944 | msgstr "" | 8692 | msgstr "" |
7945 | 8693 | ||
@@ -7952,112 +8700,112 @@ msgstr "" | |||
7952 | msgid "b" | 8700 | msgid "b" |
7953 | msgstr "" | 8701 | msgstr "" |
7954 | 8702 | ||
7955 | #: src/util/strings.c:433 | 8703 | #: src/util/strings.c:434 |
7956 | #, c-format | 8704 | #, c-format |
7957 | msgid "Character sets requested were `%s'->`%s'\n" | 8705 | msgid "Character sets requested were `%s'->`%s'\n" |
7958 | msgstr "" | 8706 | msgstr "" |
7959 | 8707 | ||
7960 | #: src/util/strings.c:561 | 8708 | #: src/util/strings.c:562 |
7961 | msgid "Failed to expand `$HOME': environment variable `HOME' not set" | 8709 | msgid "Failed to expand `$HOME': environment variable `HOME' not set" |
7962 | msgstr "" | 8710 | msgstr "" |
7963 | 8711 | ||
7964 | #: src/util/strings.c:658 | 8712 | #: src/util/strings.c:659 |
7965 | msgid "µs" | 8713 | msgid "µs" |
7966 | msgstr "" | 8714 | msgstr "" |
7967 | 8715 | ||
7968 | #: src/util/strings.c:662 | 8716 | #: src/util/strings.c:663 |
7969 | msgid "forever" | 8717 | msgid "forever" |
7970 | msgstr "" | 8718 | msgstr "" |
7971 | 8719 | ||
7972 | #: src/util/strings.c:664 | 8720 | #: src/util/strings.c:665 |
7973 | msgid "0 ms" | 8721 | msgid "0 ms" |
7974 | msgstr "" | 8722 | msgstr "" |
7975 | 8723 | ||
7976 | #: src/util/strings.c:670 | 8724 | #: src/util/strings.c:671 |
7977 | msgid "ms" | 8725 | msgid "ms" |
7978 | msgstr "" | 8726 | msgstr "" |
7979 | 8727 | ||
7980 | #: src/util/strings.c:676 | 8728 | #: src/util/strings.c:677 |
7981 | msgid "s" | 8729 | msgid "s" |
7982 | msgstr "" | 8730 | msgstr "" |
7983 | 8731 | ||
7984 | #: src/util/strings.c:682 | 8732 | #: src/util/strings.c:683 |
7985 | msgid "m" | 8733 | msgid "m" |
7986 | msgstr "" | 8734 | msgstr "" |
7987 | 8735 | ||
7988 | #: src/util/strings.c:688 | 8736 | #: src/util/strings.c:689 |
7989 | msgid "h" | 8737 | msgid "h" |
7990 | msgstr "" | 8738 | msgstr "" |
7991 | 8739 | ||
7992 | #: src/util/strings.c:695 | 8740 | #: src/util/strings.c:696 |
7993 | msgid "day" | 8741 | msgid "day" |
7994 | msgstr "" | 8742 | msgstr "" |
7995 | 8743 | ||
7996 | #: src/util/strings.c:697 | 8744 | #: src/util/strings.c:698 |
7997 | msgid "days" | 8745 | msgid "days" |
7998 | msgstr "" | 8746 | msgstr "" |
7999 | 8747 | ||
8000 | #: src/util/strings.c:726 | 8748 | #: src/util/strings.c:727 |
8001 | msgid "end of time" | 8749 | msgid "end of time" |
8002 | msgstr "" | 8750 | msgstr "" |
8003 | 8751 | ||
8004 | #: src/util/strings.c:1159 | 8752 | #: src/util/strings.c:1226 |
8005 | msgid "IPv6 address did not start with `['\n" | 8753 | msgid "IPv6 address did not start with `['\n" |
8006 | msgstr "" | 8754 | msgstr "" |
8007 | 8755 | ||
8008 | #: src/util/strings.c:1167 | 8756 | #: src/util/strings.c:1234 |
8009 | msgid "IPv6 address did contain ':' to separate port number\n" | 8757 | msgid "IPv6 address did contain ':' to separate port number\n" |
8010 | msgstr "" | 8758 | msgstr "" |
8011 | 8759 | ||
8012 | #: src/util/strings.c:1173 | 8760 | #: src/util/strings.c:1240 |
8013 | msgid "IPv6 address did contain ']' before ':' to separate port number\n" | 8761 | msgid "IPv6 address did contain ']' before ':' to separate port number\n" |
8014 | msgstr "" | 8762 | msgstr "" |
8015 | 8763 | ||
8016 | #: src/util/strings.c:1180 | 8764 | #: src/util/strings.c:1247 |
8017 | msgid "IPv6 address did contain a valid port number after the last ':'\n" | 8765 | msgid "IPv6 address did contain a valid port number after the last ':'\n" |
8018 | msgstr "" | 8766 | msgstr "" |
8019 | 8767 | ||
8020 | #: src/util/strings.c:1189 | 8768 | #: src/util/strings.c:1256 |
8021 | #, c-format | 8769 | #, c-format |
8022 | msgid "Invalid IPv6 address `%s': %s\n" | 8770 | msgid "Invalid IPv6 address `%s': %s\n" |
8023 | msgstr "" | 8771 | msgstr "" |
8024 | 8772 | ||
8025 | #: src/util/strings.c:1395 src/util/strings.c:1411 | 8773 | #: src/util/strings.c:1462 src/util/strings.c:1478 |
8026 | msgid "Port not in range\n" | 8774 | msgid "Port not in range\n" |
8027 | msgstr "" | 8775 | msgstr "" |
8028 | 8776 | ||
8029 | #: src/util/strings.c:1420 | 8777 | #: src/util/strings.c:1487 |
8030 | #, c-format | 8778 | #, c-format |
8031 | msgid "Malformed port policy `%s'\n" | 8779 | msgid "Malformed port policy `%s'\n" |
8032 | msgstr "" | 8780 | msgstr "" |
8033 | 8781 | ||
8034 | #: src/util/strings.c:1503 src/util/strings.c:1534 src/util/strings.c:1582 | 8782 | #: src/util/strings.c:1570 src/util/strings.c:1601 src/util/strings.c:1649 |
8035 | #: src/util/strings.c:1603 | 8783 | #: src/util/strings.c:1670 |
8036 | #, c-format | 8784 | #, c-format |
8037 | msgid "Invalid format for IP: `%s'\n" | 8785 | msgid "Invalid format for IP: `%s'\n" |
8038 | msgstr "" | 8786 | msgstr "" |
8039 | 8787 | ||
8040 | #: src/util/strings.c:1560 | 8788 | #: src/util/strings.c:1627 |
8041 | #, c-format | 8789 | #, c-format |
8042 | msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)." | 8790 | msgid "Invalid network notation ('/%d' is not legal in IPv4 CIDR)." |
8043 | msgstr "" | 8791 | msgstr "" |
8044 | 8792 | ||
8045 | #: src/util/strings.c:1612 | 8793 | #: src/util/strings.c:1679 |
8046 | #, c-format | 8794 | #, c-format |
8047 | msgid "Invalid format: `%s'\n" | 8795 | msgid "Invalid format: `%s'\n" |
8048 | msgstr "" | 8796 | msgstr "" |
8049 | 8797 | ||
8050 | #: src/util/strings.c:1664 | 8798 | #: src/util/strings.c:1731 |
8051 | #, c-format | 8799 | #, c-format |
8052 | msgid "Invalid network notation (does not end with ';': `%s')\n" | 8800 | msgid "Invalid network notation (does not end with ';': `%s')\n" |
8053 | msgstr "" | 8801 | msgstr "" |
8054 | 8802 | ||
8055 | #: src/util/strings.c:1714 | 8803 | #: src/util/strings.c:1781 |
8056 | #, c-format | 8804 | #, c-format |
8057 | msgid "Wrong format `%s' for netmask\n" | 8805 | msgid "Wrong format `%s' for netmask\n" |
8058 | msgstr "" | 8806 | msgstr "" |
8059 | 8807 | ||
8060 | #: src/util/strings.c:1745 | 8808 | #: src/util/strings.c:1812 |
8061 | #, c-format | 8809 | #, c-format |
8062 | msgid "Wrong format `%s' for network\n" | 8810 | msgid "Wrong format `%s' for network\n" |
8063 | msgstr "" | 8811 | msgstr "" |
@@ -8067,19 +8815,19 @@ msgid "# Active channels" | |||
8067 | msgstr "" | 8815 | msgstr "" |
8068 | 8816 | ||
8069 | #: src/vpn/gnunet-service-vpn.c:642 | 8817 | #: src/vpn/gnunet-service-vpn.c:642 |
8070 | msgid "# Bytes given to mesh for transmission" | 8818 | msgid "# Bytes given to cadet for transmission" |
8071 | msgstr "" | 8819 | msgstr "" |
8072 | 8820 | ||
8073 | #: src/vpn/gnunet-service-vpn.c:680 | 8821 | #: src/vpn/gnunet-service-vpn.c:680 |
8074 | msgid "# Bytes dropped in mesh queue (overflow)" | 8822 | msgid "# Bytes dropped in cadet queue (overflow)" |
8075 | msgstr "" | 8823 | msgstr "" |
8076 | 8824 | ||
8077 | #: src/vpn/gnunet-service-vpn.c:753 | 8825 | #: src/vpn/gnunet-service-vpn.c:753 |
8078 | msgid "# Mesh channels created" | 8826 | msgid "# Cadet channels created" |
8079 | msgstr "" | 8827 | msgstr "" |
8080 | 8828 | ||
8081 | #: src/vpn/gnunet-service-vpn.c:784 | 8829 | #: src/vpn/gnunet-service-vpn.c:784 |
8082 | msgid "Failed to setup mesh channel!\n" | 8830 | msgid "Failed to setup cadet channel!\n" |
8083 | msgstr "" | 8831 | msgstr "" |
8084 | 8832 | ||
8085 | #: src/vpn/gnunet-service-vpn.c:978 | 8833 | #: src/vpn/gnunet-service-vpn.c:978 |
@@ -8114,15 +8862,15 @@ msgid "Received packet of unknown protocol %d from TUN (dropping it)\n" | |||
8114 | msgstr "" | 8862 | msgstr "" |
8115 | 8863 | ||
8116 | #: src/vpn/gnunet-service-vpn.c:1706 | 8864 | #: src/vpn/gnunet-service-vpn.c:1706 |
8117 | msgid "# ICMP packets received from mesh" | 8865 | msgid "# ICMP packets received from cadet" |
8118 | msgstr "" | 8866 | msgstr "" |
8119 | 8867 | ||
8120 | #: src/vpn/gnunet-service-vpn.c:2045 | 8868 | #: src/vpn/gnunet-service-vpn.c:2045 |
8121 | msgid "# UDP packets received from mesh" | 8869 | msgid "# UDP packets received from cadet" |
8122 | msgstr "" | 8870 | msgstr "" |
8123 | 8871 | ||
8124 | #: src/vpn/gnunet-service-vpn.c:2200 | 8872 | #: src/vpn/gnunet-service-vpn.c:2200 |
8125 | msgid "# TCP packets received from mesh" | 8873 | msgid "# TCP packets received from cadet" |
8126 | msgstr "" | 8874 | msgstr "" |
8127 | 8875 | ||
8128 | #: src/vpn/gnunet-service-vpn.c:2351 | 8876 | #: src/vpn/gnunet-service-vpn.c:2351 |
@@ -8141,27 +8889,27 @@ msgstr "" | |||
8141 | msgid "Failed to allocate IP address for new destination\n" | 8889 | msgid "Failed to allocate IP address for new destination\n" |
8142 | msgstr "" | 8890 | msgstr "" |
8143 | 8891 | ||
8144 | #: src/vpn/gnunet-service-vpn.c:2982 | 8892 | #: src/vpn/gnunet-service-vpn.c:2987 |
8145 | msgid "Must specify valid IPv6 address" | 8893 | msgid "Must specify valid IPv6 address" |
8146 | msgstr "" | 8894 | msgstr "" |
8147 | 8895 | ||
8148 | #: src/vpn/gnunet-service-vpn.c:3006 | 8896 | #: src/vpn/gnunet-service-vpn.c:3011 |
8149 | msgid "Must specify valid IPv6 mask" | 8897 | msgid "Must specify valid IPv6 mask" |
8150 | msgstr "" | 8898 | msgstr "" |
8151 | 8899 | ||
8152 | #: src/vpn/gnunet-service-vpn.c:3014 | 8900 | #: src/vpn/gnunet-service-vpn.c:3019 |
8153 | msgid "IPv6 support disabled as this system does not support IPv6\n" | 8901 | msgid "IPv6 support disabled as this system does not support IPv6\n" |
8154 | msgstr "" | 8902 | msgstr "" |
8155 | 8903 | ||
8156 | #: src/vpn/gnunet-service-vpn.c:3027 | 8904 | #: src/vpn/gnunet-service-vpn.c:3032 |
8157 | msgid "Must specify valid IPv4 address" | 8905 | msgid "Must specify valid IPv4 address" |
8158 | msgstr "" | 8906 | msgstr "" |
8159 | 8907 | ||
8160 | #: src/vpn/gnunet-service-vpn.c:3040 | 8908 | #: src/vpn/gnunet-service-vpn.c:3045 |
8161 | msgid "Must specify valid IPv4 mask" | 8909 | msgid "Must specify valid IPv4 mask" |
8162 | msgstr "" | 8910 | msgstr "" |
8163 | 8911 | ||
8164 | #: src/vpn/gnunet-service-vpn.c:3050 | 8912 | #: src/vpn/gnunet-service-vpn.c:3055 |
8165 | msgid "IPv4 support disabled as this system does not support IPv4\n" | 8913 | msgid "IPv4 support disabled as this system does not support IPv4\n" |
8166 | msgstr "" | 8914 | msgstr "" |
8167 | 8915 | ||
@@ -8230,18 +8978,18 @@ msgstr "" | |||
8230 | msgid "Setup tunnels via VPN." | 8978 | msgid "Setup tunnels via VPN." |
8231 | msgstr "" | 8979 | msgstr "" |
8232 | 8980 | ||
8233 | #: src/include/gnunet_common.h:566 src/include/gnunet_common.h:573 | 8981 | #: src/include/gnunet_common.h:590 src/include/gnunet_common.h:597 |
8234 | #: src/include/gnunet_common.h:581 | 8982 | #: src/include/gnunet_common.h:605 |
8235 | #, c-format | 8983 | #, c-format |
8236 | msgid "Assertion failed at %s:%d.\n" | 8984 | msgid "Assertion failed at %s:%d.\n" |
8237 | msgstr "" | 8985 | msgstr "" |
8238 | 8986 | ||
8239 | #: src/include/gnunet_common.h:593 | 8987 | #: src/include/gnunet_common.h:617 |
8240 | #, c-format | 8988 | #, c-format |
8241 | msgid "External protocol violation detected at %s:%d.\n" | 8989 | msgid "External protocol violation detected at %s:%d.\n" |
8242 | msgstr "" | 8990 | msgstr "" |
8243 | 8991 | ||
8244 | #: src/include/gnunet_common.h:620 src/include/gnunet_common.h:629 | 8992 | #: src/include/gnunet_common.h:644 src/include/gnunet_common.h:653 |
8245 | #, c-format | 8993 | #, c-format |
8246 | msgid "`%s' failed on file `%s' at %s:%d with error: %s\n" | 8994 | msgid "`%s' failed on file `%s' at %s:%d with error: %s\n" |
8247 | msgstr "" | 8995 | msgstr "" |
@@ -7,7 +7,7 @@ msgid "" | |||
7 | msgstr "" | 7 | msgstr "" |
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: 2015-03-14 18:00+0100\n" | 10 | "POT-Creation-Date: 2015-04-27 13:05+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" |
@@ -497,16 +497,16 @@ msgstr "" | |||
497 | msgid "Could not connect master [%u] and slave [%u]\n" | 497 | msgid "Could not connect master [%u] and slave [%u]\n" |
498 | msgstr "Kunde inte ansluta till gnunetd.\n" | 498 | msgstr "Kunde inte ansluta till gnunetd.\n" |
499 | 499 | ||
500 | #: src/ats-tests/ats-testing.c:490 src/ats-tests/ats-testing.c:662 | 500 | #: src/ats-tests/ats-testing.c:490 src/ats-tests/ats-testing.c:634 |
501 | #, fuzzy | 501 | #, fuzzy |
502 | msgid "Initialization failed, shutdown\n" | 502 | msgid "Initialization failed, shutdown\n" |
503 | msgstr "Initiering av insticksmekanism misslyckades: %s!\n" | 503 | msgstr "Initiering av insticksmekanism misslyckades: %s!\n" |
504 | 504 | ||
505 | #: src/ats-tests/ats-testing-log.c:846 | 505 | #: src/ats-tests/ats-testing-log.c:834 |
506 | msgid "Stop logging\n" | 506 | msgid "Stop logging\n" |
507 | msgstr "" | 507 | msgstr "" |
508 | 508 | ||
509 | #: src/ats-tests/ats-testing-log.c:897 | 509 | #: src/ats-tests/ats-testing-log.c:885 |
510 | #, fuzzy, c-format | 510 | #, fuzzy, c-format |
511 | msgid "Start logging `%s'\n" | 511 | msgid "Start logging `%s'\n" |
512 | msgstr "Startade samling \"%s\".\n" | 512 | msgstr "Startade samling \"%s\".\n" |
@@ -554,6 +554,7 @@ msgid "Quota for network `%11s' (in/out): %10s / %10s\n" | |||
554 | msgstr "" | 554 | msgstr "" |
555 | 555 | ||
556 | #: src/ats-tool/gnunet-ats.c:708 src/namestore/gnunet-namestore.c:700 | 556 | #: src/ats-tool/gnunet-ats.c:708 src/namestore/gnunet-namestore.c:700 |
557 | #: src/namestore/plugin_rest_namestore.c:812 | ||
557 | #: src/transport/gnunet-transport.c:1890 | 558 | #: src/transport/gnunet-transport.c:1890 |
558 | #: src/transport/gnunet-transport-profiler.c:531 | 559 | #: src/transport/gnunet-transport-profiler.c:531 |
559 | #, fuzzy, c-format | 560 | #, fuzzy, c-format |
@@ -1436,30 +1437,30 @@ msgstr "# byte dekrypterade" | |||
1436 | msgid "# PAYLOAD dropped (out of order)" | 1437 | msgid "# PAYLOAD dropped (out of order)" |
1437 | msgstr "# byte kastade via UDP (utgående)" | 1438 | msgstr "# byte kastade via UDP (utgående)" |
1438 | 1439 | ||
1439 | #: src/core/gnunet-service-core_neighbours.c:168 | 1440 | #: src/core/gnunet-service-core_neighbours.c:177 |
1440 | #, fuzzy | 1441 | #, fuzzy |
1441 | msgid "# sessions terminated by transport disconnect" | 1442 | msgid "# sessions terminated by transport disconnect" |
1442 | msgstr "Nätverksannonsering avstängd i konfigurationen!\n" | 1443 | msgstr "Nätverksannonsering avstängd i konfigurationen!\n" |
1443 | 1444 | ||
1444 | #: src/core/gnunet-service-core_neighbours.c:184 | 1445 | #: src/core/gnunet-service-core_neighbours.c:193 |
1445 | #: src/core/gnunet-service-core_neighbours.c:342 | 1446 | #: src/core/gnunet-service-core_neighbours.c:355 |
1446 | msgid "# neighbour entries allocated" | 1447 | msgid "# neighbour entries allocated" |
1447 | msgstr "" | 1448 | msgstr "" |
1448 | 1449 | ||
1449 | #: src/core/gnunet-service-core_neighbours.c:252 | 1450 | #: src/core/gnunet-service-core_neighbours.c:264 |
1450 | msgid "# encrypted bytes given to transport" | 1451 | msgid "# encrypted bytes given to transport" |
1451 | msgstr "" | 1452 | msgstr "" |
1452 | 1453 | ||
1453 | #: src/core/gnunet-service-core_neighbours.c:425 | 1454 | #: src/core/gnunet-service-core_neighbours.c:438 |
1454 | #, c-format | 1455 | #, c-format |
1455 | msgid "Unsupported message of type %u (%u bytes) received from peer `%s'\n" | 1456 | msgid "Unsupported message of type %u (%u bytes) received from peer `%s'\n" |
1456 | msgstr "" | 1457 | msgstr "" |
1457 | 1458 | ||
1458 | #: src/core/gnunet-service-core_sessions.c:245 | 1459 | #: src/core/gnunet-service-core_sessions.c:252 |
1459 | #: src/core/gnunet-service-core_sessions.c:331 | 1460 | #: src/core/gnunet-service-core_sessions.c:338 |
1460 | #: src/dht/gnunet-service-dht_neighbours.c:661 | 1461 | #: src/dht/gnunet-service-dht_neighbours.c:661 |
1461 | #: src/dht/gnunet-service-dht_neighbours.c:726 | 1462 | #: src/dht/gnunet-service-dht_neighbours.c:726 |
1462 | #: src/fs/gnunet-service-fs_cp.c:645 src/fs/gnunet-service-fs_cp.c:1627 | 1463 | #: src/fs/gnunet-service-fs_cp.c:654 src/fs/gnunet-service-fs_cp.c:1647 |
1463 | #: src/topology/gnunet-daemon-topology.c:734 | 1464 | #: src/topology/gnunet-daemon-topology.c:734 |
1464 | #: src/topology/gnunet-daemon-topology.c:835 | 1465 | #: src/topology/gnunet-daemon-topology.c:835 |
1465 | #: src/transport/gnunet-service-transport_neighbours.c:755 | 1466 | #: src/transport/gnunet-service-transport_neighbours.c:755 |
@@ -1468,21 +1469,21 @@ msgstr "" | |||
1468 | msgid "# peers connected" | 1469 | msgid "# peers connected" |
1469 | msgstr "# av anslutna parter" | 1470 | msgstr "# av anslutna parter" |
1470 | 1471 | ||
1471 | #: src/core/gnunet-service-core_sessions.c:278 | 1472 | #: src/core/gnunet-service-core_sessions.c:285 |
1472 | msgid "# type map refreshes sent" | 1473 | msgid "# type map refreshes sent" |
1473 | msgstr "" | 1474 | msgstr "" |
1474 | 1475 | ||
1475 | #: src/core/gnunet-service-core_sessions.c:397 | 1476 | #: src/core/gnunet-service-core_sessions.c:404 |
1476 | #, fuzzy | 1477 | #, fuzzy |
1477 | msgid "# outdated typemap confirmations received" | 1478 | msgid "# outdated typemap confirmations received" |
1478 | msgstr "Kunde inte spara konfiguration!" | 1479 | msgstr "Kunde inte spara konfiguration!" |
1479 | 1480 | ||
1480 | #: src/core/gnunet-service-core_sessions.c:408 | 1481 | #: src/core/gnunet-service-core_sessions.c:415 |
1481 | #, fuzzy | 1482 | #, fuzzy |
1482 | msgid "# valid typemap confirmations received" | 1483 | msgid "# valid typemap confirmations received" |
1483 | msgstr "Kunde inte spara konfiguration!" | 1484 | msgstr "Kunde inte spara konfiguration!" |
1484 | 1485 | ||
1485 | #: src/core/gnunet-service-core_sessions.c:546 | 1486 | #: src/core/gnunet-service-core_sessions.c:554 |
1486 | msgid "# messages discarded (expired prior to transmission)" | 1487 | msgid "# messages discarded (expired prior to transmission)" |
1487 | msgstr "" | 1488 | msgstr "" |
1488 | 1489 | ||
@@ -1497,7 +1498,7 @@ msgid "# updates to my type map" | |||
1497 | msgstr "" | 1498 | msgstr "" |
1498 | 1499 | ||
1499 | #: src/datacache/datacache.c:115 src/datacache/datacache.c:266 | 1500 | #: src/datacache/datacache.c:115 src/datacache/datacache.c:266 |
1500 | #: src/datastore/gnunet-service-datastore.c:855 | 1501 | #: src/datastore/gnunet-service-datastore.c:841 |
1501 | #, fuzzy | 1502 | #, fuzzy |
1502 | msgid "# bytes stored" | 1503 | msgid "# bytes stored" |
1503 | msgstr "# byte krypterade" | 1504 | msgstr "# byte krypterade" |
@@ -1508,8 +1509,8 @@ msgid "# items stored" | |||
1508 | msgstr "# byte krypterade" | 1509 | msgstr "# byte krypterade" |
1509 | 1510 | ||
1510 | #: src/datacache/datacache.c:143 src/datacache/datacache.c:150 | 1511 | #: src/datacache/datacache.c:143 src/datacache/datacache.c:150 |
1511 | #: src/datastore/gnunet-service-datastore.c:1557 | 1512 | #: src/datastore/gnunet-service-datastore.c:1598 |
1512 | #: src/datastore/gnunet-service-datastore.c:1568 | 1513 | #: src/datastore/gnunet-service-datastore.c:1609 |
1513 | #, fuzzy, c-format | 1514 | #, fuzzy, c-format |
1514 | msgid "No `%s' specified for `%s' in configuration!\n" | 1515 | msgid "No `%s' specified for `%s' in configuration!\n" |
1515 | msgstr "Inga applikationer definierade i konfiguration!\n" | 1516 | msgstr "Inga applikationer definierade i konfiguration!\n" |
@@ -1543,8 +1544,8 @@ msgstr "" | |||
1543 | 1544 | ||
1544 | #: src/datacache/plugin_datacache_sqlite.c:69 | 1545 | #: src/datacache/plugin_datacache_sqlite.c:69 |
1545 | #: src/datacache/plugin_datacache_sqlite.c:72 | 1546 | #: src/datacache/plugin_datacache_sqlite.c:72 |
1546 | #: src/datastore/plugin_datastore_mysql.c:809 | 1547 | #: src/datastore/plugin_datastore_mysql.c:818 |
1547 | #: src/datastore/plugin_datastore_mysql.c:823 | 1548 | #: src/datastore/plugin_datastore_mysql.c:834 |
1548 | #: src/datastore/plugin_datastore_sqlite.c:57 src/mysql/mysql.c:41 | 1549 | #: src/datastore/plugin_datastore_sqlite.c:57 src/mysql/mysql.c:41 |
1549 | #: src/mysql/mysql.c:48 src/mysql/mysql.c:522 src/mysql/mysql.c:531 | 1550 | #: src/mysql/mysql.c:48 src/mysql/mysql.c:522 src/mysql/mysql.c:531 |
1550 | #: src/mysql/mysql.c:591 src/mysql/mysql.c:607 | 1551 | #: src/mysql/mysql.c:591 src/mysql/mysql.c:607 |
@@ -1746,8 +1747,8 @@ msgstr "" | |||
1746 | 1747 | ||
1747 | #: src/datastore/gnunet-service-datastore.c:712 | 1748 | #: src/datastore/gnunet-service-datastore.c:712 |
1748 | #: src/datastore/gnunet-service-datastore.c:767 | 1749 | #: src/datastore/gnunet-service-datastore.c:767 |
1749 | #: src/datastore/gnunet-service-datastore.c:982 | 1750 | #: src/datastore/gnunet-service-datastore.c:999 |
1750 | #: src/datastore/gnunet-service-datastore.c:1529 | 1751 | #: src/datastore/gnunet-service-datastore.c:1570 |
1751 | msgid "# reserved" | 1752 | msgid "# reserved" |
1752 | msgstr "" | 1753 | msgstr "" |
1753 | 1754 | ||
@@ -1755,133 +1756,148 @@ msgstr "" | |||
1755 | msgid "Could not find matching reservation" | 1756 | msgid "Could not find matching reservation" |
1756 | msgstr "" | 1757 | msgstr "" |
1757 | 1758 | ||
1758 | #: src/datastore/gnunet-service-datastore.c:867 | 1759 | #: src/datastore/gnunet-service-datastore.c:853 |
1759 | #, c-format | 1760 | #, c-format |
1760 | msgid "Need %llu bytes more space (%llu allowed, using %llu)\n" | 1761 | msgid "Need %llu bytes more space (%llu allowed, using %llu)\n" |
1761 | msgstr "" | 1762 | msgstr "" |
1762 | 1763 | ||
1763 | #: src/datastore/gnunet-service-datastore.c:1029 | 1764 | #: src/datastore/gnunet-service-datastore.c:1046 |
1764 | #, fuzzy | 1765 | #, fuzzy |
1765 | msgid "# GET requests received" | 1766 | msgid "# GET requests received" |
1766 | msgstr "# byte mottogs via TCP" | 1767 | msgstr "# byte mottogs via TCP" |
1767 | 1768 | ||
1768 | #: src/datastore/gnunet-service-datastore.c:1041 | 1769 | #: src/datastore/gnunet-service-datastore.c:1058 |
1769 | msgid "# requests filtered by bloomfilter" | 1770 | msgid "# requests filtered by bloomfilter" |
1770 | msgstr "" | 1771 | msgstr "" |
1771 | 1772 | ||
1772 | #: src/datastore/gnunet-service-datastore.c:1069 | 1773 | #: src/datastore/gnunet-service-datastore.c:1094 |
1773 | #, fuzzy | 1774 | #, fuzzy |
1774 | msgid "# UPDATE requests received" | 1775 | msgid "# UPDATE requests received" |
1775 | msgstr "# byte mottogs via TCP" | 1776 | msgstr "# byte mottogs via TCP" |
1776 | 1777 | ||
1777 | #: src/datastore/gnunet-service-datastore.c:1099 | 1778 | #: src/datastore/gnunet-service-datastore.c:1122 |
1778 | msgid "# GET REPLICATION requests received" | 1779 | msgid "# GET REPLICATION requests received" |
1779 | msgstr "" | 1780 | msgstr "" |
1780 | 1781 | ||
1781 | #: src/datastore/gnunet-service-datastore.c:1132 | 1782 | #: src/datastore/gnunet-service-datastore.c:1155 |
1782 | msgid "# GET ZERO ANONYMITY requests received" | 1783 | msgid "# GET ZERO ANONYMITY requests received" |
1783 | msgstr "" | 1784 | msgstr "" |
1784 | 1785 | ||
1785 | #: src/datastore/gnunet-service-datastore.c:1157 | 1786 | #: src/datastore/gnunet-service-datastore.c:1180 |
1786 | #, fuzzy | 1787 | #, fuzzy |
1787 | msgid "Content not found" | 1788 | msgid "Content not found" |
1788 | msgstr "Kommando \"%s\" hittades inte!\n" | 1789 | msgstr "Kommando \"%s\" hittades inte!\n" |
1789 | 1790 | ||
1790 | #: src/datastore/gnunet-service-datastore.c:1165 | 1791 | #: src/datastore/gnunet-service-datastore.c:1188 |
1791 | msgid "# bytes removed (explicit request)" | 1792 | msgid "# bytes removed (explicit request)" |
1792 | msgstr "" | 1793 | msgstr "" |
1793 | 1794 | ||
1794 | #: src/datastore/gnunet-service-datastore.c:1197 | 1795 | #: src/datastore/gnunet-service-datastore.c:1220 |
1795 | #, fuzzy | 1796 | #, fuzzy |
1796 | msgid "# REMOVE requests received" | 1797 | msgid "# REMOVE requests received" |
1797 | msgstr "# byte mottogs via TCP" | 1798 | msgstr "# byte mottogs via TCP" |
1798 | 1799 | ||
1799 | #: src/datastore/gnunet-service-datastore.c:1241 | 1800 | #: src/datastore/gnunet-service-datastore.c:1264 |
1800 | #, c-format | 1801 | #, c-format |
1801 | msgid "" | 1802 | msgid "" |
1802 | "Datastore payload must have been inaccurate (%lld < %lld). Recomputing it.\n" | 1803 | "Datastore payload must have been inaccurate (%lld < %lld). Recomputing it.\n" |
1803 | msgstr "" | 1804 | msgstr "" |
1804 | 1805 | ||
1805 | #: src/datastore/gnunet-service-datastore.c:1246 | 1806 | #: src/datastore/gnunet-service-datastore.c:1269 |
1806 | #, c-format | 1807 | #, c-format |
1807 | msgid "New payload: %lld\n" | 1808 | msgid "New payload: %lld\n" |
1808 | msgstr "" | 1809 | msgstr "" |
1809 | 1810 | ||
1810 | #: src/datastore/gnunet-service-datastore.c:1299 | 1811 | #: src/datastore/gnunet-service-datastore.c:1322 |
1811 | #, c-format | 1812 | #, c-format |
1812 | msgid "Loading `%s' datastore plugin\n" | 1813 | msgid "Loading `%s' datastore plugin\n" |
1813 | msgstr "" | 1814 | msgstr "" |
1814 | 1815 | ||
1815 | #: src/datastore/gnunet-service-datastore.c:1310 | 1816 | #: src/datastore/gnunet-service-datastore.c:1333 |
1816 | #, fuzzy, c-format | 1817 | #, fuzzy, c-format |
1817 | msgid "Failed to load datastore plugin for `%s'\n" | 1818 | msgid "Failed to load datastore plugin for `%s'\n" |
1818 | msgstr "Kunde inte slå upp \"%s\": %s\n" | 1819 | msgstr "Kunde inte slå upp \"%s\": %s\n" |
1819 | 1820 | ||
1820 | #: src/datastore/gnunet-service-datastore.c:1412 | 1821 | #: src/datastore/gnunet-service-datastore.c:1402 |
1821 | msgid "Rebuilding bloomfilter. Please be patient.\n" | 1822 | #: src/datastore/gnunet-service-datastore.c:1463 |
1823 | msgid "Bloomfilter construction complete.\n" | ||
1822 | msgstr "" | 1824 | msgstr "" |
1823 | 1825 | ||
1824 | #: src/datastore/gnunet-service-datastore.c:1419 | 1826 | #: src/datastore/gnunet-service-datastore.c:1450 |
1825 | msgid "Plugin does not support get_keys function. Please fix!\n" | 1827 | msgid "Rebuilding bloomfilter. Please be patient.\n" |
1826 | msgstr "" | 1828 | msgstr "" |
1827 | 1829 | ||
1828 | #: src/datastore/gnunet-service-datastore.c:1422 | 1830 | #: src/datastore/gnunet-service-datastore.c:1460 |
1829 | msgid "Bloomfilter construction complete.\n" | 1831 | msgid "Plugin does not support get_keys function. Please fix!\n" |
1830 | msgstr "" | 1832 | msgstr "" |
1831 | 1833 | ||
1832 | #: src/datastore/gnunet-service-datastore.c:1562 | 1834 | #: src/datastore/gnunet-service-datastore.c:1603 |
1833 | #, fuzzy, c-format | 1835 | #, fuzzy, c-format |
1834 | msgid "# bytes used in file-sharing datastore `%s'" | 1836 | msgid "# bytes used in file-sharing datastore `%s'" |
1835 | msgstr "# byte krypterade" | 1837 | msgstr "# byte krypterade" |
1836 | 1838 | ||
1837 | #: src/datastore/gnunet-service-datastore.c:1573 | 1839 | #: src/datastore/gnunet-service-datastore.c:1614 |
1838 | msgid "# quota" | 1840 | msgid "# quota" |
1839 | msgstr "" | 1841 | msgstr "" |
1840 | 1842 | ||
1841 | #: src/datastore/gnunet-service-datastore.c:1575 | 1843 | #: src/datastore/gnunet-service-datastore.c:1616 |
1842 | msgid "# cache size" | 1844 | msgid "# cache size" |
1843 | msgstr "" | 1845 | msgstr "" |
1844 | 1846 | ||
1845 | #: src/datastore/gnunet-service-datastore.c:1588 | 1847 | #: src/datastore/gnunet-service-datastore.c:1629 |
1846 | #, c-format | 1848 | #, c-format |
1847 | msgid "Could not use specified filename `%s' for bloomfilter.\n" | 1849 | msgid "Could not use specified filename `%s' for bloomfilter.\n" |
1848 | msgstr "" | 1850 | msgstr "" |
1849 | 1851 | ||
1850 | #: src/datastore/gnunet-service-datastore.c:1606 | 1852 | #: src/datastore/gnunet-service-datastore.c:1647 |
1851 | #: src/datastore/gnunet-service-datastore.c:1622 | 1853 | #: src/datastore/gnunet-service-datastore.c:1663 |
1852 | #, fuzzy, c-format | 1854 | #, fuzzy, c-format |
1853 | msgid "Failed to remove bogus bloomfilter file `%s'\n" | 1855 | msgid "Failed to remove bogus bloomfilter file `%s'\n" |
1854 | msgstr "Kunde inte spara konfigurationsfil \"%s\":" | 1856 | msgstr "Kunde inte spara konfigurationsfil \"%s\":" |
1855 | 1857 | ||
1856 | #: src/datastore/gnunet-service-datastore.c:1652 | 1858 | #: src/datastore/gnunet-service-datastore.c:1693 |
1857 | #, fuzzy | 1859 | #, fuzzy |
1858 | msgid "Failed to initialize bloomfilter.\n" | 1860 | msgid "Failed to initialize bloomfilter.\n" |
1859 | msgstr "Misslyckades att initiera tjänsten \"%s\".\n" | 1861 | msgstr "Misslyckades att initiera tjänsten \"%s\".\n" |
1860 | 1862 | ||
1861 | #: src/datastore/plugin_datastore_heap.c:821 | 1863 | #: src/datastore/plugin_datastore_heap.c:826 |
1862 | msgid "Heap database running\n" | 1864 | msgid "Heap database running\n" |
1863 | msgstr "" | 1865 | msgstr "" |
1864 | 1866 | ||
1865 | #: src/datastore/plugin_datastore_mysql.c:786 | 1867 | #: src/datastore/plugin_datastore_mysql.c:309 |
1868 | #: src/datastore/plugin_datastore_sqlite.c:499 | ||
1869 | #, fuzzy | ||
1870 | msgid "Data too large" | ||
1871 | msgstr "antal iterationer" | ||
1872 | |||
1873 | #: src/datastore/plugin_datastore_mysql.c:328 | ||
1874 | msgid "MySQL statement run failure" | ||
1875 | msgstr "" | ||
1876 | |||
1877 | #: src/datastore/plugin_datastore_mysql.c:793 | ||
1866 | #, fuzzy, c-format | 1878 | #, fuzzy, c-format |
1867 | msgid "Failed to prepare statement `%s'\n" | 1879 | msgid "Failed to prepare statement `%s'\n" |
1868 | msgstr "Misslyckades att läsa kompislista från \"%s\"\n" | 1880 | msgstr "Misslyckades att läsa kompislista från \"%s\"\n" |
1869 | 1881 | ||
1870 | #: src/datastore/plugin_datastore_mysql.c:794 | 1882 | #: src/datastore/plugin_datastore_mysql.c:802 |
1871 | #, fuzzy, c-format | 1883 | #, fuzzy, c-format |
1872 | msgid "`%s' for `%s' failed at %s:%d with error: %s\n" | 1884 | msgid "`%s' for `%s' failed at %s:%d with error: %s\n" |
1873 | msgstr "\"%s\" till \"%s\" misslyckades vid %s:%d med fel: %s\n" | 1885 | msgstr "\"%s\" till \"%s\" misslyckades vid %s:%d med fel: %s\n" |
1874 | 1886 | ||
1875 | #: src/datastore/plugin_datastore_mysql.c:1025 | 1887 | #: src/datastore/plugin_datastore_mysql.c:1036 |
1876 | msgid "Mysql database running\n" | 1888 | msgid "Mysql database running\n" |
1877 | msgstr "" | 1889 | msgstr "" |
1878 | 1890 | ||
1879 | #: src/datastore/plugin_datastore_postgres.c:837 | 1891 | #: src/datastore/plugin_datastore_postgres.c:331 |
1892 | msgid "Postgress exec failure" | ||
1893 | msgstr "" | ||
1894 | |||
1895 | #: src/datastore/plugin_datastore_postgres.c:846 | ||
1880 | #, fuzzy | 1896 | #, fuzzy |
1881 | msgid "Failed to drop table from database.\n" | 1897 | msgid "Failed to drop table from database.\n" |
1882 | msgstr "Misslyckades att ta emot svar till \"%s\" meddelande från gnunetd\n" | 1898 | msgstr "Misslyckades att ta emot svar till \"%s\" meddelande från gnunetd\n" |
1883 | 1899 | ||
1884 | #: src/datastore/plugin_datastore_postgres.c:873 | 1900 | #: src/datastore/plugin_datastore_postgres.c:882 |
1885 | #: src/namecache/plugin_namecache_postgres.c:414 | 1901 | #: src/namecache/plugin_namecache_postgres.c:414 |
1886 | #: src/namestore/plugin_namestore_postgres.c:569 | 1902 | #: src/namestore/plugin_namestore_postgres.c:569 |
1887 | msgid "Postgres database running\n" | 1903 | msgid "Postgres database running\n" |
@@ -1904,28 +1920,28 @@ msgstr "\"%s\" misslyckades vid %s:%d med fel: %s\n" | |||
1904 | msgid "Unable to initialize SQLite: %s.\n" | 1920 | msgid "Unable to initialize SQLite: %s.\n" |
1905 | msgstr "Kunde inte initiera SQLite.\n" | 1921 | msgstr "Kunde inte initiera SQLite.\n" |
1906 | 1922 | ||
1907 | #: src/datastore/plugin_datastore_sqlite.c:661 | 1923 | #: src/datastore/plugin_datastore_sqlite.c:680 |
1908 | msgid "Invalid data in database. Trying to fix (by deletion).\n" | 1924 | msgid "Invalid data in database. Trying to fix (by deletion).\n" |
1909 | msgstr "" | 1925 | msgstr "" |
1910 | 1926 | ||
1911 | #: src/datastore/plugin_datastore_sqlite.c:1156 | 1927 | #: src/datastore/plugin_datastore_sqlite.c:1177 |
1912 | msgid "sqlite version to old to determine size, assuming zero\n" | 1928 | msgid "sqlite version to old to determine size, assuming zero\n" |
1913 | msgstr "" | 1929 | msgstr "" |
1914 | 1930 | ||
1915 | #: src/datastore/plugin_datastore_sqlite.c:1176 | 1931 | #: src/datastore/plugin_datastore_sqlite.c:1197 |
1916 | #, c-format | 1932 | #, c-format |
1917 | msgid "" | 1933 | msgid "" |
1918 | "Using sqlite page utilization to estimate payload (%llu pages of size %llu " | 1934 | "Using sqlite page utilization to estimate payload (%llu pages of size %llu " |
1919 | "bytes)\n" | 1935 | "bytes)\n" |
1920 | msgstr "" | 1936 | msgstr "" |
1921 | 1937 | ||
1922 | #: src/datastore/plugin_datastore_sqlite.c:1216 | 1938 | #: src/datastore/plugin_datastore_sqlite.c:1237 |
1923 | #: src/namecache/plugin_namecache_sqlite.c:580 | 1939 | #: src/namecache/plugin_namecache_sqlite.c:580 |
1924 | #: src/namestore/plugin_namestore_sqlite.c:716 | 1940 | #: src/namestore/plugin_namestore_sqlite.c:716 |
1925 | msgid "Sqlite database running\n" | 1941 | msgid "Sqlite database running\n" |
1926 | msgstr "" | 1942 | msgstr "" |
1927 | 1943 | ||
1928 | #: src/datastore/plugin_datastore_template.c:259 | 1944 | #: src/datastore/plugin_datastore_template.c:260 |
1929 | msgid "Template database running\n" | 1945 | msgid "Template database running\n" |
1930 | msgstr "" | 1946 | msgstr "" |
1931 | 1947 | ||
@@ -2558,54 +2574,54 @@ msgstr "" | |||
2558 | msgid "Change DNS replies to point elsewhere." | 2574 | msgid "Change DNS replies to point elsewhere." |
2559 | msgstr "" | 2575 | msgstr "" |
2560 | 2576 | ||
2561 | #: src/dns/gnunet-service-dns.c:456 | 2577 | #: src/dns/gnunet-service-dns.c:459 |
2562 | msgid "# DNS requests answered via TUN interface" | 2578 | msgid "# DNS requests answered via TUN interface" |
2563 | msgstr "" | 2579 | msgstr "" |
2564 | 2580 | ||
2565 | #: src/dns/gnunet-service-dns.c:603 | 2581 | #: src/dns/gnunet-service-dns.c:606 |
2566 | msgid "# DNS exit failed (failed to open socket)" | 2582 | msgid "# DNS exit failed (failed to open socket)" |
2567 | msgstr "" | 2583 | msgstr "" |
2568 | 2584 | ||
2569 | #: src/dns/gnunet-service-dns.c:714 | 2585 | #: src/dns/gnunet-service-dns.c:717 |
2570 | msgid "# External DNS response discarded (no matching request)" | 2586 | msgid "# External DNS response discarded (no matching request)" |
2571 | msgstr "" | 2587 | msgstr "" |
2572 | 2588 | ||
2573 | #: src/dns/gnunet-service-dns.c:792 | 2589 | #: src/dns/gnunet-service-dns.c:795 |
2574 | msgid "# Client response discarded (no matching request)" | 2590 | msgid "# Client response discarded (no matching request)" |
2575 | msgstr "" | 2591 | msgstr "" |
2576 | 2592 | ||
2577 | #: src/dns/gnunet-service-dns.c:907 | 2593 | #: src/dns/gnunet-service-dns.c:910 |
2578 | msgid "Received malformed IPv4-UDP packet on TUN interface.\n" | 2594 | msgid "Received malformed IPv4-UDP packet on TUN interface.\n" |
2579 | msgstr "" | 2595 | msgstr "" |
2580 | 2596 | ||
2581 | #: src/dns/gnunet-service-dns.c:923 | 2597 | #: src/dns/gnunet-service-dns.c:926 |
2582 | msgid "Received malformed IPv6-UDP packet on TUN interface.\n" | 2598 | msgid "Received malformed IPv6-UDP packet on TUN interface.\n" |
2583 | msgstr "" | 2599 | msgstr "" |
2584 | 2600 | ||
2585 | #: src/dns/gnunet-service-dns.c:932 | 2601 | #: src/dns/gnunet-service-dns.c:935 |
2586 | #, c-format | 2602 | #, c-format |
2587 | msgid "Got non-IP packet with %u bytes and protocol %u from TUN\n" | 2603 | msgid "Got non-IP packet with %u bytes and protocol %u from TUN\n" |
2588 | msgstr "" | 2604 | msgstr "" |
2589 | 2605 | ||
2590 | #: src/dns/gnunet-service-dns.c:942 | 2606 | #: src/dns/gnunet-service-dns.c:945 |
2591 | msgid "# Non-DNS UDP packet received via TUN interface" | 2607 | msgid "# Non-DNS UDP packet received via TUN interface" |
2592 | msgstr "" | 2608 | msgstr "" |
2593 | 2609 | ||
2594 | #: src/dns/gnunet-service-dns.c:1009 | 2610 | #: src/dns/gnunet-service-dns.c:1012 |
2595 | #, fuzzy | 2611 | #, fuzzy |
2596 | msgid "# DNS requests received via TUN interface" | 2612 | msgid "# DNS requests received via TUN interface" |
2597 | msgstr "Meddelande mottaget från klient är ogiltig.\n" | 2613 | msgstr "Meddelande mottaget från klient är ogiltig.\n" |
2598 | 2614 | ||
2599 | #: src/dns/gnunet-service-dns.c:1049 | 2615 | #: src/dns/gnunet-service-dns.c:1064 src/exit/gnunet-daemon-exit.c:3594 |
2600 | #, c-format | ||
2601 | msgid "`%s' must be installed SUID, refusing to run\n" | ||
2602 | msgstr "" | ||
2603 | |||
2604 | #: src/dns/gnunet-service-dns.c:1069 src/exit/gnunet-daemon-exit.c:3594 | ||
2605 | #, fuzzy | 2616 | #, fuzzy |
2606 | msgid "need a valid IPv4 or IPv6 address\n" | 2617 | msgid "need a valid IPv4 or IPv6 address\n" |
2607 | msgstr "Ogiltigt svar på \"%s\".\n" | 2618 | msgstr "Ogiltigt svar på \"%s\".\n" |
2608 | 2619 | ||
2620 | #: src/dns/gnunet-service-dns.c:1082 | ||
2621 | #, c-format | ||
2622 | msgid "`%s' must be installed SUID, will not run DNS interceptor\n" | ||
2623 | msgstr "" | ||
2624 | |||
2609 | #: src/dv/gnunet-dv.c:169 | 2625 | #: src/dv/gnunet-dv.c:169 |
2610 | msgid "verbose output" | 2626 | msgid "verbose output" |
2611 | msgstr "" | 2627 | msgstr "" |
@@ -2842,57 +2858,57 @@ msgstr "" | |||
2842 | msgid "Daemon to run to provide an IP exit node for the VPN" | 2858 | msgid "Daemon to run to provide an IP exit node for the VPN" |
2843 | msgstr "" | 2859 | msgstr "" |
2844 | 2860 | ||
2845 | #: src/fragmentation/defragmentation.c:271 | 2861 | #: src/fragmentation/defragmentation.c:277 |
2846 | msgid "# acknowledgements sent for fragment" | 2862 | msgid "# acknowledgements sent for fragment" |
2847 | msgstr "" | 2863 | msgstr "" |
2848 | 2864 | ||
2849 | #: src/fragmentation/defragmentation.c:463 | 2865 | #: src/fragmentation/defragmentation.c:470 |
2850 | #: src/transport/plugin_transport_wlan.c:1515 | 2866 | #: src/transport/plugin_transport_wlan.c:1515 |
2851 | #, fuzzy | 2867 | #, fuzzy |
2852 | msgid "# fragments received" | 2868 | msgid "# fragments received" |
2853 | msgstr "# byte mottogs via TCP" | 2869 | msgstr "# byte mottogs via TCP" |
2854 | 2870 | ||
2855 | #: src/fragmentation/defragmentation.c:533 | 2871 | #: src/fragmentation/defragmentation.c:540 |
2856 | #, fuzzy | 2872 | #, fuzzy |
2857 | msgid "# duplicate fragments received" | 2873 | msgid "# duplicate fragments received" |
2858 | msgstr "# byte mottogs via TCP" | 2874 | msgstr "# byte mottogs via TCP" |
2859 | 2875 | ||
2860 | #: src/fragmentation/defragmentation.c:549 | 2876 | #: src/fragmentation/defragmentation.c:558 |
2861 | msgid "# messages defragmented" | 2877 | msgid "# messages defragmented" |
2862 | msgstr "" | 2878 | msgstr "" |
2863 | 2879 | ||
2864 | #: src/fragmentation/fragmentation.c:234 | 2880 | #: src/fragmentation/fragmentation.c:235 |
2865 | #, fuzzy | 2881 | #, fuzzy |
2866 | msgid "# fragments transmitted" | 2882 | msgid "# fragments transmitted" |
2867 | msgstr "# byte skickade av typen %d" | 2883 | msgstr "# byte skickade av typen %d" |
2868 | 2884 | ||
2869 | #: src/fragmentation/fragmentation.c:237 | 2885 | #: src/fragmentation/fragmentation.c:240 |
2870 | #, fuzzy | 2886 | #, fuzzy |
2871 | msgid "# fragments retransmitted" | 2887 | msgid "# fragments retransmitted" |
2872 | msgstr "# byte skickade av typen %d" | 2888 | msgstr "# byte skickade av typen %d" |
2873 | 2889 | ||
2874 | #: src/fragmentation/fragmentation.c:263 | 2890 | #: src/fragmentation/fragmentation.c:269 |
2875 | #, fuzzy | 2891 | #, fuzzy |
2876 | msgid "# fragments wrap arounds" | 2892 | msgid "# fragments wrap arounds" |
2877 | msgstr "# byte skickade av typen %d" | 2893 | msgstr "# byte skickade av typen %d" |
2878 | 2894 | ||
2879 | #: src/fragmentation/fragmentation.c:307 | 2895 | #: src/fragmentation/fragmentation.c:315 |
2880 | msgid "# messages fragmented" | 2896 | msgid "# messages fragmented" |
2881 | msgstr "" | 2897 | msgstr "" |
2882 | 2898 | ||
2883 | #: src/fragmentation/fragmentation.c:310 | 2899 | #: src/fragmentation/fragmentation.c:321 |
2884 | msgid "# total size of fragmented messages" | 2900 | msgid "# total size of fragmented messages" |
2885 | msgstr "" | 2901 | msgstr "" |
2886 | 2902 | ||
2887 | #: src/fragmentation/fragmentation.c:431 | 2903 | #: src/fragmentation/fragmentation.c:444 |
2888 | msgid "# fragment acknowledgements received" | 2904 | msgid "# fragment acknowledgements received" |
2889 | msgstr "" | 2905 | msgstr "" |
2890 | 2906 | ||
2891 | #: src/fragmentation/fragmentation.c:437 | 2907 | #: src/fragmentation/fragmentation.c:451 |
2892 | msgid "# bits removed from fragmentation ACKs" | 2908 | msgid "# bits removed from fragmentation ACKs" |
2893 | msgstr "" | 2909 | msgstr "" |
2894 | 2910 | ||
2895 | #: src/fragmentation/fragmentation.c:461 | 2911 | #: src/fragmentation/fragmentation.c:475 |
2896 | #, fuzzy | 2912 | #, fuzzy |
2897 | msgid "# fragmentation transmissions completed" | 2913 | msgid "# fragmentation transmissions completed" |
2898 | msgstr "# klartext PONG-meddelanden mottagna" | 2914 | msgstr "# klartext PONG-meddelanden mottagna" |
@@ -3164,59 +3180,59 @@ msgstr "Fil \"%s\" har URI: %s\n" | |||
3164 | msgid "Got result with unknown block type `%d', ignoring" | 3180 | msgid "Got result with unknown block type `%d', ignoring" |
3165 | msgstr "" | 3181 | msgstr "" |
3166 | 3182 | ||
3167 | #: src/fs/fs_unindex.c:59 | 3183 | #: src/fs/fs_unindex.c:63 |
3168 | msgid "Failed to find given position in file" | 3184 | msgid "Failed to find given position in file" |
3169 | msgstr "" | 3185 | msgstr "" |
3170 | 3186 | ||
3171 | #: src/fs/fs_unindex.c:64 | 3187 | #: src/fs/fs_unindex.c:68 |
3172 | #, fuzzy | 3188 | #, fuzzy |
3173 | msgid "Failed to read file" | 3189 | msgid "Failed to read file" |
3174 | msgstr "Misslyckades att leverera \"%s\" meddelande.\n" | 3190 | msgstr "Misslyckades att leverera \"%s\" meddelande.\n" |
3175 | 3191 | ||
3176 | #: src/fs/fs_unindex.c:234 | 3192 | #: src/fs/fs_unindex.c:245 |
3177 | msgid "Unexpected time for a response from `fs' service." | 3193 | msgid "Unexpected time for a response from `fs' service." |
3178 | msgstr "" | 3194 | msgstr "" |
3179 | 3195 | ||
3180 | #: src/fs/fs_unindex.c:242 | 3196 | #: src/fs/fs_unindex.c:253 |
3181 | msgid "Timeout waiting for `fs' service." | 3197 | msgid "Timeout waiting for `fs' service." |
3182 | msgstr "" | 3198 | msgstr "" |
3183 | 3199 | ||
3184 | #: src/fs/fs_unindex.c:250 | 3200 | #: src/fs/fs_unindex.c:261 |
3185 | #, fuzzy | 3201 | #, fuzzy |
3186 | msgid "Invalid response from `fs' service." | 3202 | msgid "Invalid response from `fs' service." |
3187 | msgstr "Ogiltigt svar till \"%s\" från \"%s\"\n" | 3203 | msgstr "Ogiltigt svar till \"%s\" från \"%s\"\n" |
3188 | 3204 | ||
3189 | #: src/fs/fs_unindex.c:291 | 3205 | #: src/fs/fs_unindex.c:304 |
3190 | #, fuzzy | 3206 | #, fuzzy |
3191 | msgid "Failed to connect to FS service for unindexing." | 3207 | msgid "Failed to connect to FS service for unindexing." |
3192 | msgstr "Misslyckades att ansluta till gnunetd.\n" | 3208 | msgstr "Misslyckades att ansluta till gnunetd.\n" |
3193 | 3209 | ||
3194 | #: src/fs/fs_unindex.c:347 src/fs/fs_unindex.c:359 | 3210 | #: src/fs/fs_unindex.c:360 src/fs/fs_unindex.c:372 |
3195 | #, fuzzy | 3211 | #, fuzzy |
3196 | msgid "Failed to get KSKs from directory scan." | 3212 | msgid "Failed to get KSKs from directory scan." |
3197 | msgstr "Filformatsfel (inte en GNUnet-katalog?)\n" | 3213 | msgstr "Filformatsfel (inte en GNUnet-katalog?)\n" |
3198 | 3214 | ||
3199 | #: src/fs/fs_unindex.c:355 | 3215 | #: src/fs/fs_unindex.c:368 |
3200 | #, fuzzy, c-format | 3216 | #, fuzzy, c-format |
3201 | msgid "Internal error scanning `%s'.\n" | 3217 | msgid "Internal error scanning `%s'.\n" |
3202 | msgstr "=\tFel vid läsning av katalog.\n" | 3218 | msgstr "=\tFel vid läsning av katalog.\n" |
3203 | 3219 | ||
3204 | #: src/fs/fs_unindex.c:414 | 3220 | #: src/fs/fs_unindex.c:427 |
3205 | #, fuzzy, c-format | 3221 | #, fuzzy, c-format |
3206 | msgid "Failed to remove UBlock: %s\n" | 3222 | msgid "Failed to remove UBlock: %s\n" |
3207 | msgstr "Misslyckades att leverera \"%s\" meddelande.\n" | 3223 | msgstr "Misslyckades att leverera \"%s\" meddelande.\n" |
3208 | 3224 | ||
3209 | #: src/fs/fs_unindex.c:562 src/fs/fs_unindex.c:626 | 3225 | #: src/fs/fs_unindex.c:590 src/fs/fs_unindex.c:656 |
3210 | #, fuzzy | 3226 | #, fuzzy |
3211 | msgid "Failed to connect to `datastore' service." | 3227 | msgid "Failed to connect to `datastore' service." |
3212 | msgstr "Misslyckades att initiera tjänsten \"%s\".\n" | 3228 | msgstr "Misslyckades att initiera tjänsten \"%s\".\n" |
3213 | 3229 | ||
3214 | #: src/fs/fs_unindex.c:639 | 3230 | #: src/fs/fs_unindex.c:669 |
3215 | #, fuzzy | 3231 | #, fuzzy |
3216 | msgid "Failed to open file for unindexing." | 3232 | msgid "Failed to open file for unindexing." |
3217 | msgstr "Misslyckades att ansluta till gnunetd.\n" | 3233 | msgstr "Misslyckades att ansluta till gnunetd.\n" |
3218 | 3234 | ||
3219 | #: src/fs/fs_unindex.c:673 | 3235 | #: src/fs/fs_unindex.c:708 |
3220 | #, fuzzy | 3236 | #, fuzzy |
3221 | msgid "Failed to compute hash of file." | 3237 | msgid "Failed to compute hash of file." |
3222 | msgstr "Misslyckades att ansluta till gnunetd.\n" | 3238 | msgstr "Misslyckades att ansluta till gnunetd.\n" |
@@ -3801,94 +3817,94 @@ msgstr "Nätverksanslutning" | |||
3801 | msgid "# cadet connections active" | 3817 | msgid "# cadet connections active" |
3802 | msgstr "Nätverksanslutning" | 3818 | msgstr "Nätverksanslutning" |
3803 | 3819 | ||
3804 | #: src/fs/gnunet-service-fs_cp.c:726 | 3820 | #: src/fs/gnunet-service-fs_cp.c:735 |
3805 | #, fuzzy | 3821 | #, fuzzy |
3806 | msgid "# migration stop messages received" | 3822 | msgid "# migration stop messages received" |
3807 | msgstr "# krypterade PONG-meddelanden mottagna" | 3823 | msgstr "# krypterade PONG-meddelanden mottagna" |
3808 | 3824 | ||
3809 | #: src/fs/gnunet-service-fs_cp.c:730 | 3825 | #: src/fs/gnunet-service-fs_cp.c:739 |
3810 | #, c-format | 3826 | #, c-format |
3811 | msgid "Migration of content to peer `%s' blocked for %s\n" | 3827 | msgid "Migration of content to peer `%s' blocked for %s\n" |
3812 | msgstr "" | 3828 | msgstr "" |
3813 | 3829 | ||
3814 | #: src/fs/gnunet-service-fs_cp.c:768 | 3830 | #: src/fs/gnunet-service-fs_cp.c:776 |
3815 | #, fuzzy | 3831 | #, fuzzy |
3816 | msgid "# replies transmitted to other peers" | 3832 | msgid "# replies transmitted to other peers" |
3817 | msgstr "# byte skickade av typen %d" | 3833 | msgstr "# byte skickade av typen %d" |
3818 | 3834 | ||
3819 | #: src/fs/gnunet-service-fs_cp.c:774 | 3835 | #: src/fs/gnunet-service-fs_cp.c:784 |
3820 | msgid "# replies dropped" | 3836 | msgid "# replies dropped" |
3821 | msgstr "" | 3837 | msgstr "" |
3822 | 3838 | ||
3823 | #: src/fs/gnunet-service-fs_cp.c:799 src/fs/gnunet-service-fs_cp.c:1384 | 3839 | #: src/fs/gnunet-service-fs_cp.c:810 src/fs/gnunet-service-fs_cp.c:1404 |
3824 | msgid "# P2P searches active" | 3840 | msgid "# P2P searches active" |
3825 | msgstr "" | 3841 | msgstr "" |
3826 | 3842 | ||
3827 | #: src/fs/gnunet-service-fs_cp.c:904 | 3843 | #: src/fs/gnunet-service-fs_cp.c:915 |
3828 | msgid "# artificial delays introduced (ms)" | 3844 | msgid "# artificial delays introduced (ms)" |
3829 | msgstr "" | 3845 | msgstr "" |
3830 | 3846 | ||
3831 | #: src/fs/gnunet-service-fs_cp.c:960 | 3847 | #: src/fs/gnunet-service-fs_cp.c:971 |
3832 | #, fuzzy | 3848 | #, fuzzy |
3833 | msgid "# replies dropped due to type mismatch" | 3849 | msgid "# replies dropped due to type mismatch" |
3834 | msgstr "# byte mottagna av typen %d" | 3850 | msgstr "# byte mottagna av typen %d" |
3835 | 3851 | ||
3836 | #: src/fs/gnunet-service-fs_cp.c:968 | 3852 | #: src/fs/gnunet-service-fs_cp.c:979 |
3837 | #, fuzzy | 3853 | #, fuzzy |
3838 | msgid "# replies received for other peers" | 3854 | msgid "# replies received for other peers" |
3839 | msgstr "# byte mottagna av typen %d" | 3855 | msgstr "# byte mottagna av typen %d" |
3840 | 3856 | ||
3841 | #: src/fs/gnunet-service-fs_cp.c:982 | 3857 | #: src/fs/gnunet-service-fs_cp.c:993 |
3842 | msgid "# replies dropped due to insufficient cover traffic" | 3858 | msgid "# replies dropped due to insufficient cover traffic" |
3843 | msgstr "" | 3859 | msgstr "" |
3844 | 3860 | ||
3845 | #: src/fs/gnunet-service-fs_cp.c:1030 | 3861 | #: src/fs/gnunet-service-fs_cp.c:1041 |
3846 | msgid "# P2P searches destroyed due to ultimate reply" | 3862 | msgid "# P2P searches destroyed due to ultimate reply" |
3847 | msgstr "" | 3863 | msgstr "" |
3848 | 3864 | ||
3849 | #: src/fs/gnunet-service-fs_cp.c:1098 | 3865 | #: src/fs/gnunet-service-fs_cp.c:1109 |
3850 | msgid "# requests done for free (low load)" | 3866 | msgid "# requests done for free (low load)" |
3851 | msgstr "" | 3867 | msgstr "" |
3852 | 3868 | ||
3853 | #: src/fs/gnunet-service-fs_cp.c:1123 | 3869 | #: src/fs/gnunet-service-fs_cp.c:1134 |
3854 | msgid "# request dropped, priority insufficient" | 3870 | msgid "# request dropped, priority insufficient" |
3855 | msgstr "" | 3871 | msgstr "" |
3856 | 3872 | ||
3857 | #: src/fs/gnunet-service-fs_cp.c:1133 | 3873 | #: src/fs/gnunet-service-fs_cp.c:1144 |
3858 | msgid "# requests done for a price (normal load)" | 3874 | msgid "# requests done for a price (normal load)" |
3859 | msgstr "" | 3875 | msgstr "" |
3860 | 3876 | ||
3861 | #: src/fs/gnunet-service-fs_cp.c:1210 | 3877 | #: src/fs/gnunet-service-fs_cp.c:1221 |
3862 | msgid "# GET requests received (from other peers)" | 3878 | msgid "# GET requests received (from other peers)" |
3863 | msgstr "" | 3879 | msgstr "" |
3864 | 3880 | ||
3865 | #: src/fs/gnunet-service-fs_cp.c:1245 | 3881 | #: src/fs/gnunet-service-fs_cp.c:1256 |
3866 | msgid "# requests dropped due to initiator not being connected" | 3882 | msgid "# requests dropped due to initiator not being connected" |
3867 | msgstr "" | 3883 | msgstr "" |
3868 | 3884 | ||
3869 | #: src/fs/gnunet-service-fs_cp.c:1266 | 3885 | #: src/fs/gnunet-service-fs_cp.c:1277 |
3870 | msgid "# requests dropped due to missing reverse route" | 3886 | msgid "# requests dropped due to missing reverse route" |
3871 | msgstr "" | 3887 | msgstr "" |
3872 | 3888 | ||
3873 | #: src/fs/gnunet-service-fs_cp.c:1277 | 3889 | #: src/fs/gnunet-service-fs_cp.c:1288 |
3874 | #, fuzzy | 3890 | #, fuzzy |
3875 | msgid "# requests dropped due to full reply queue" | 3891 | msgid "# requests dropped due to full reply queue" |
3876 | msgstr "Nätverksannonsering avstängd i konfigurationen!\n" | 3892 | msgstr "Nätverksannonsering avstängd i konfigurationen!\n" |
3877 | 3893 | ||
3878 | #: src/fs/gnunet-service-fs_cp.c:1329 | 3894 | #: src/fs/gnunet-service-fs_cp.c:1340 |
3879 | msgid "# requests dropped due TTL underflow" | 3895 | msgid "# requests dropped due TTL underflow" |
3880 | msgstr "" | 3896 | msgstr "" |
3881 | 3897 | ||
3882 | #: src/fs/gnunet-service-fs_cp.c:1353 | 3898 | #: src/fs/gnunet-service-fs_cp.c:1365 |
3883 | msgid "# requests dropped due to higher-TTL request" | 3899 | msgid "# requests dropped due to higher-TTL request" |
3884 | msgstr "" | 3900 | msgstr "" |
3885 | 3901 | ||
3886 | #: src/fs/gnunet-service-fs_cp.c:1382 | 3902 | #: src/fs/gnunet-service-fs_cp.c:1402 |
3887 | #, fuzzy | 3903 | #, fuzzy |
3888 | msgid "# P2P query messages received and processed" | 3904 | msgid "# P2P query messages received and processed" |
3889 | msgstr "# krypterade PONG-meddelanden mottagna" | 3905 | msgstr "# krypterade PONG-meddelanden mottagna" |
3890 | 3906 | ||
3891 | #: src/fs/gnunet-service-fs_cp.c:1821 | 3907 | #: src/fs/gnunet-service-fs_cp.c:1841 |
3892 | #, fuzzy | 3908 | #, fuzzy |
3893 | msgid "# migration stop messages sent" | 3909 | msgid "# migration stop messages sent" |
3894 | msgstr "# krypterade PONG-meddelanden mottagna" | 3910 | msgstr "# krypterade PONG-meddelanden mottagna" |
@@ -4232,7 +4248,7 @@ msgstr "" | |||
4232 | msgid "GNUnet DNS-to-GNS proxy (a DNS server)" | 4248 | msgid "GNUnet DNS-to-GNS proxy (a DNS server)" |
4233 | msgstr "" | 4249 | msgstr "" |
4234 | 4250 | ||
4235 | #: src/gns/gnunet-gns.c:215 | 4251 | #: src/gns/gnunet-gns.c:215 src/gns/plugin_rest_gns.c:334 |
4236 | #, c-format | 4252 | #, c-format |
4237 | msgid "Invalid typename specified, assuming `ANY'\n" | 4253 | msgid "Invalid typename specified, assuming `ANY'\n" |
4238 | msgstr "" | 4254 | msgstr "" |
@@ -4248,6 +4264,7 @@ msgid "Ego for `%s' not found, cannot perform lookup.\n" | |||
4248 | msgstr "" | 4264 | msgstr "" |
4249 | 4265 | ||
4250 | #: src/gns/gnunet-gns.c:353 src/gns/gnunet-gns-helper-service-w32.c:798 | 4266 | #: src/gns/gnunet-gns.c:353 src/gns/gnunet-gns-helper-service-w32.c:798 |
4267 | #: src/gns/plugin_rest_gns.c:459 | ||
4251 | #, c-format | 4268 | #, c-format |
4252 | msgid "" | 4269 | msgid "" |
4253 | "Ego for `gns-master' not found, cannot perform lookup. Did you run gnunet-" | 4270 | "Ego for `gns-master' not found, cannot perform lookup. Did you run gnunet-" |
@@ -4389,7 +4406,7 @@ msgstr "Kunde inte spara konfigurationsfil \"%s\":" | |||
4389 | msgid "Failed to start HTTPS server for `%s'\n" | 4406 | msgid "Failed to start HTTPS server for `%s'\n" |
4390 | msgstr "Misslyckades att starta samling.\n" | 4407 | msgstr "Misslyckades att starta samling.\n" |
4391 | 4408 | ||
4392 | #: src/gns/gnunet-gns-proxy.c:2225 | 4409 | #: src/gns/gnunet-gns-proxy.c:2225 src/rest/gnunet-rest-server.c:529 |
4393 | #, fuzzy | 4410 | #, fuzzy |
4394 | msgid "Failed to pass client to MHD\n" | 4411 | msgid "Failed to pass client to MHD\n" |
4395 | msgstr "Misslyckades att ansluta till gnunetd.\n" | 4412 | msgstr "Misslyckades att ansluta till gnunetd.\n" |
@@ -4493,21 +4510,21 @@ msgstr "" | |||
4493 | msgid "GNS lookup resulted in DNS name that is too long (`%s')\n" | 4510 | msgid "GNS lookup resulted in DNS name that is too long (`%s')\n" |
4494 | msgstr "" | 4511 | msgstr "" |
4495 | 4512 | ||
4496 | #: src/gns/gnunet-service-gns_resolver.c:1886 | 4513 | #: src/gns/gnunet-service-gns_resolver.c:1891 |
4497 | msgid "GNS lookup recursion failed (no delegation record found)\n" | 4514 | msgid "GNS lookup recursion failed (no delegation record found)\n" |
4498 | msgstr "" | 4515 | msgstr "" |
4499 | 4516 | ||
4500 | #: src/gns/gnunet-service-gns_resolver.c:1910 | 4517 | #: src/gns/gnunet-service-gns_resolver.c:1915 |
4501 | #, fuzzy, c-format | 4518 | #, fuzzy, c-format |
4502 | msgid "Failed to cache GNS resolution: %s\n" | 4519 | msgid "Failed to cache GNS resolution: %s\n" |
4503 | msgstr "Misslyckades att skicka HTTP-begäran till värd \"%s\": %s\n" | 4520 | msgstr "Misslyckades att skicka HTTP-begäran till värd \"%s\": %s\n" |
4504 | 4521 | ||
4505 | #: src/gns/gnunet-service-gns_resolver.c:2192 | 4522 | #: src/gns/gnunet-service-gns_resolver.c:2197 |
4506 | #, c-format | 4523 | #, c-format |
4507 | msgid "Zone %s was revoked, resolution fails\n" | 4524 | msgid "Zone %s was revoked, resolution fails\n" |
4508 | msgstr "" | 4525 | msgstr "" |
4509 | 4526 | ||
4510 | #: src/gns/gnunet-service-gns_resolver.c:2341 | 4527 | #: src/gns/gnunet-service-gns_resolver.c:2346 |
4511 | #, c-format | 4528 | #, c-format |
4512 | msgid "Hostname `%s' is not well-formed, resolution fails\n" | 4529 | msgid "Hostname `%s' is not well-formed, resolution fails\n" |
4513 | msgstr "" | 4530 | msgstr "" |
@@ -4537,6 +4554,15 @@ msgstr "Misslyckades att läsa kompislista från \"%s\"\n" | |||
4537 | msgid "Unable to parse BOX record string `%s'\n" | 4554 | msgid "Unable to parse BOX record string `%s'\n" |
4538 | msgstr "Misslyckades att läsa kompislista från \"%s\"\n" | 4555 | msgstr "Misslyckades att läsa kompislista från \"%s\"\n" |
4539 | 4556 | ||
4557 | #: src/gns/plugin_rest_gns.c:422 | ||
4558 | msgid "Ego for not found, cannot perform lookup.\n" | ||
4559 | msgstr "" | ||
4560 | |||
4561 | #: src/gns/plugin_rest_gns.c:652 | ||
4562 | #, fuzzy | ||
4563 | msgid "GNS REST API initialized\n" | ||
4564 | msgstr " Anslutning misslyckades\n" | ||
4565 | |||
4540 | #: src/gnsrecord/plugin_gnsrecord_dns.c:291 | 4566 | #: src/gnsrecord/plugin_gnsrecord_dns.c:291 |
4541 | #, fuzzy, c-format | 4567 | #, fuzzy, c-format |
4542 | msgid "Unable to parse IPv4 address `%s'\n" | 4568 | msgid "Unable to parse IPv4 address `%s'\n" |
@@ -5059,6 +5085,11 @@ msgstr "Kunde inte spara konfigurationsfil \"%s\":" | |||
5059 | msgid "Failed to create directory `%s' for storing egos\n" | 5085 | msgid "Failed to create directory `%s' for storing egos\n" |
5060 | msgstr "Misslyckades att läsa kompislista från \"%s\"\n" | 5086 | msgstr "Misslyckades att läsa kompislista från \"%s\"\n" |
5061 | 5087 | ||
5088 | #: src/identity/plugin_rest_identity.c:803 | ||
5089 | #, fuzzy | ||
5090 | msgid "Identity REST API initialized\n" | ||
5091 | msgstr " Anslutning misslyckades\n" | ||
5092 | |||
5062 | #: src/mysql/mysql.c:174 | 5093 | #: src/mysql/mysql.c:174 |
5063 | #, c-format | 5094 | #, c-format |
5064 | msgid "Trying to use file `%s' for MySQL configuration.\n" | 5095 | msgid "Trying to use file `%s' for MySQL configuration.\n" |
@@ -5084,9 +5115,9 @@ msgstr "" | |||
5084 | msgid "You must specify which zone should be accessed\n" | 5115 | msgid "You must specify which zone should be accessed\n" |
5085 | msgstr "anger vilken TRANSPORT som ska testas" | 5116 | msgstr "anger vilken TRANSPORT som ska testas" |
5086 | 5117 | ||
5087 | #: src/namecache/gnunet-namecache.c:195 src/namestore/gnunet-namestore.c:844 | 5118 | #: src/namecache/gnunet-namecache.c:195 |
5088 | #, fuzzy, c-format | 5119 | #, fuzzy, c-format |
5089 | msgid "Invalid public key for reverse lookup `%s'\n" | 5120 | msgid "Invalid public key for zone `%s'\n" |
5090 | msgstr "Ogiltigt argument: \"%s\"\n" | 5121 | msgstr "Ogiltigt argument: \"%s\"\n" |
5091 | 5122 | ||
5092 | #: src/namecache/gnunet-namecache.c:203 | 5123 | #: src/namecache/gnunet-namecache.c:203 |
@@ -5126,6 +5157,7 @@ msgstr "" | |||
5126 | "Fel vid uppladdning av fil: %s\n" | 5157 | "Fel vid uppladdning av fil: %s\n" |
5127 | 5158 | ||
5128 | #: src/namestore/gnunet-namestore.c:332 | 5159 | #: src/namestore/gnunet-namestore.c:332 |
5160 | #: src/namestore/plugin_rest_namestore.c:505 | ||
5129 | #, fuzzy, c-format | 5161 | #, fuzzy, c-format |
5130 | msgid "Deleting record failed, record does not exist%s%s\n" | 5162 | msgid "Deleting record failed, record does not exist%s%s\n" |
5131 | msgstr "" | 5163 | msgstr "" |
@@ -5133,6 +5165,7 @@ msgstr "" | |||
5133 | "Fel vid uppladdning av fil: %s\n" | 5165 | "Fel vid uppladdning av fil: %s\n" |
5134 | 5166 | ||
5135 | #: src/namestore/gnunet-namestore.c:339 | 5167 | #: src/namestore/gnunet-namestore.c:339 |
5168 | #: src/namestore/plugin_rest_namestore.c:514 | ||
5136 | #, fuzzy, c-format | 5169 | #, fuzzy, c-format |
5137 | msgid "Deleting record failed%s%s\n" | 5170 | msgid "Deleting record failed%s%s\n" |
5138 | msgstr "" | 5171 | msgstr "" |
@@ -5152,6 +5185,7 @@ msgid "Records already exist under `%s', cannot add `%s' record.\n" | |||
5152 | msgstr "" | 5185 | msgstr "" |
5153 | 5186 | ||
5154 | #: src/namestore/gnunet-namestore.c:628 | 5187 | #: src/namestore/gnunet-namestore.c:628 |
5188 | #: src/namestore/plugin_rest_namestore.c:538 | ||
5155 | #, c-format | 5189 | #, c-format |
5156 | msgid "There are no records under label `%s' that could be deleted.\n" | 5190 | msgid "There are no records under label `%s' that could be deleted.\n" |
5157 | msgstr "" | 5191 | msgstr "" |
@@ -5169,6 +5203,7 @@ msgstr "" | |||
5169 | 5203 | ||
5170 | #: src/namestore/gnunet-namestore.c:719 | 5204 | #: src/namestore/gnunet-namestore.c:719 |
5171 | #: src/namestore/gnunet-namestore-fcfsd.c:984 | 5205 | #: src/namestore/gnunet-namestore-fcfsd.c:984 |
5206 | #: src/namestore/plugin_rest_namestore.c:821 | ||
5172 | #, fuzzy | 5207 | #, fuzzy |
5173 | msgid "Failed to connect to namestore\n" | 5208 | msgid "Failed to connect to namestore\n" |
5174 | msgstr "Misslyckades att ansluta till gnunetd.\n" | 5209 | msgstr "Misslyckades att ansluta till gnunetd.\n" |
@@ -5186,11 +5221,14 @@ msgid "add" | |||
5186 | msgstr "" | 5221 | msgstr "" |
5187 | 5222 | ||
5188 | #: src/namestore/gnunet-namestore.c:745 | 5223 | #: src/namestore/gnunet-namestore.c:745 |
5224 | #: src/namestore/plugin_rest_namestore.c:608 | ||
5189 | #, fuzzy, c-format | 5225 | #, fuzzy, c-format |
5190 | msgid "Unsupported type `%s'\n" | 5226 | msgid "Unsupported type `%s'\n" |
5191 | msgstr "Kommando \"%s\" stöds ej. Avbryter.\n" | 5227 | msgstr "Kommando \"%s\" stöds ej. Avbryter.\n" |
5192 | 5228 | ||
5193 | #: src/namestore/gnunet-namestore.c:765 | 5229 | #: src/namestore/gnunet-namestore.c:765 |
5230 | #: src/namestore/plugin_rest_namestore.c:626 | ||
5231 | #: src/namestore/plugin_rest_namestore.c:666 | ||
5194 | #, fuzzy, c-format | 5232 | #, fuzzy, c-format |
5195 | msgid "Value `%s' invalid for record type `%s'\n" | 5233 | msgid "Value `%s' invalid for record type `%s'\n" |
5196 | msgstr "%s: symbolvärde \"%s\" ogiltigt för %s\n" | 5234 | msgstr "%s: symbolvärde \"%s\" ogiltigt för %s\n" |
@@ -5204,6 +5242,11 @@ msgstr "Ogiltigt format för IP: \"%s\"\n" | |||
5204 | msgid "del" | 5242 | msgid "del" |
5205 | msgstr "" | 5243 | msgstr "" |
5206 | 5244 | ||
5245 | #: src/namestore/gnunet-namestore.c:844 | ||
5246 | #, fuzzy, c-format | ||
5247 | msgid "Invalid public key for reverse lookup `%s'\n" | ||
5248 | msgstr "Ogiltigt argument: \"%s\"\n" | ||
5249 | |||
5207 | #: src/namestore/gnunet-namestore.c:868 | 5250 | #: src/namestore/gnunet-namestore.c:868 |
5208 | #: src/peerinfo-tool/gnunet-peerinfo.c:817 | 5251 | #: src/peerinfo-tool/gnunet-peerinfo.c:817 |
5209 | #, fuzzy, c-format | 5252 | #, fuzzy, c-format |
@@ -5216,21 +5259,25 @@ msgid "Invalid nick `%s'\n" | |||
5216 | msgstr "Ogiltiga argument: " | 5259 | msgstr "Ogiltiga argument: " |
5217 | 5260 | ||
5218 | #: src/namestore/gnunet-namestore.c:943 | 5261 | #: src/namestore/gnunet-namestore.c:943 |
5262 | #: src/namestore/plugin_rest_namestore.c:851 | ||
5219 | #, fuzzy, c-format | 5263 | #, fuzzy, c-format |
5220 | msgid "Ego `%s' not known to identity service\n" | 5264 | msgid "Ego `%s' not known to identity service\n" |
5221 | msgstr "\"%s\": okänd tjänst: %s\n" | 5265 | msgstr "\"%s\": okänd tjänst: %s\n" |
5222 | 5266 | ||
5223 | #: src/namestore/gnunet-namestore.c:970 | 5267 | #: src/namestore/gnunet-namestore.c:970 |
5268 | #: src/namestore/plugin_rest_namestore.c:878 | ||
5224 | #, fuzzy, c-format | 5269 | #, fuzzy, c-format |
5225 | msgid "No default ego configured in identity service\n" | 5270 | msgid "No default ego configured in identity service\n" |
5226 | msgstr "\"%s\": okänd tjänst: %s\n" | 5271 | msgstr "\"%s\": okänd tjänst: %s\n" |
5227 | 5272 | ||
5228 | #: src/namestore/gnunet-namestore.c:1006 | 5273 | #: src/namestore/gnunet-namestore.c:1006 |
5274 | #: src/namestore/plugin_rest_namestore.c:917 | ||
5229 | #, fuzzy, c-format | 5275 | #, fuzzy, c-format |
5230 | msgid "Identity service is not running\n" | 5276 | msgid "Identity service is not running\n" |
5231 | msgstr "\"%s\" är inte en fil.\n" | 5277 | msgstr "\"%s\" är inte en fil.\n" |
5232 | 5278 | ||
5233 | #: src/namestore/gnunet-namestore.c:1018 | 5279 | #: src/namestore/gnunet-namestore.c:1018 |
5280 | #: src/namestore/plugin_rest_namestore.c:946 | ||
5234 | #, fuzzy, c-format | 5281 | #, fuzzy, c-format |
5235 | msgid "Cannot connect to identity service\n" | 5282 | msgid "Cannot connect to identity service\n" |
5236 | msgstr "Kunde inte ansluta till gnunetd.\n" | 5283 | msgstr "Kunde inte ansluta till gnunetd.\n" |
@@ -5363,6 +5410,11 @@ msgstr "Misslyckades att läsa kompislista från \"%s\"\n" | |||
5363 | msgid "Namestore failed to store record\n" | 5410 | msgid "Namestore failed to store record\n" |
5364 | msgstr "" | 5411 | msgstr "" |
5365 | 5412 | ||
5413 | #: src/namestore/plugin_rest_namestore.c:1023 | ||
5414 | #, fuzzy | ||
5415 | msgid "Namestore REST API initialized\n" | ||
5416 | msgstr " Anslutning misslyckades\n" | ||
5417 | |||
5366 | #: src/nat/gnunet-nat-server.c:279 | 5418 | #: src/nat/gnunet-nat-server.c:279 |
5367 | #, c-format | 5419 | #, c-format |
5368 | msgid "Please pass valid port number as the first argument! (got `%s')\n" | 5420 | msgid "Please pass valid port number as the first argument! (got `%s')\n" |
@@ -5615,7 +5667,7 @@ msgid "Measure quality and performance of the NSE service." | |||
5615 | msgstr "Kan inte tillgå tjänsten" | 5667 | msgstr "Kan inte tillgå tjänsten" |
5616 | 5668 | ||
5617 | #: src/nse/gnunet-service-nse.c:1537 | 5669 | #: src/nse/gnunet-service-nse.c:1537 |
5618 | #: src/revocation/gnunet-service-revocation.c:815 src/util/gnunet-scrypt.c:260 | 5670 | #: src/revocation/gnunet-service-revocation.c:827 src/util/gnunet-scrypt.c:260 |
5619 | msgid "Value is too large.\n" | 5671 | msgid "Value is too large.\n" |
5620 | msgstr "" | 5672 | msgstr "" |
5621 | 5673 | ||
@@ -6155,6 +6207,15 @@ msgstr "" | |||
6155 | msgid "Regex `%s' is too long!\n" | 6207 | msgid "Regex `%s' is too long!\n" |
6156 | msgstr "\"%s\" är inte en fil.\n" | 6208 | msgstr "\"%s\" är inte en fil.\n" |
6157 | 6209 | ||
6210 | #: src/rest/gnunet-rest-server.c:766 | ||
6211 | msgid "listen on specified port (default: 7776)" | ||
6212 | msgstr "" | ||
6213 | |||
6214 | #: src/rest/gnunet-rest-server.c:783 | ||
6215 | #, fuzzy | ||
6216 | msgid "GNUnet REST server" | ||
6217 | msgstr "Spåra GNUnets nätverkstopologi." | ||
6218 | |||
6158 | #: src/revocation/gnunet-revocation.c:126 | 6219 | #: src/revocation/gnunet-revocation.c:126 |
6159 | #, fuzzy, c-format | 6220 | #, fuzzy, c-format |
6160 | msgid "Key `%s' is valid\n" | 6221 | msgid "Key `%s' is valid\n" |
@@ -6285,11 +6346,11 @@ msgid "# revocation set unions completed" | |||
6285 | msgstr "# klartext PONG-meddelanden mottagna" | 6346 | msgstr "# klartext PONG-meddelanden mottagna" |
6286 | 6347 | ||
6287 | #: src/revocation/gnunet-service-revocation.c:493 | 6348 | #: src/revocation/gnunet-service-revocation.c:493 |
6288 | #: src/revocation/gnunet-service-revocation.c:747 | 6349 | #: src/revocation/gnunet-service-revocation.c:759 |
6289 | msgid "SET service crashed, terminating revocation service\n" | 6350 | msgid "SET service crashed, terminating revocation service\n" |
6290 | msgstr "" | 6351 | msgstr "" |
6291 | 6352 | ||
6292 | #: src/revocation/gnunet-service-revocation.c:839 | 6353 | #: src/revocation/gnunet-service-revocation.c:851 |
6293 | #, fuzzy | 6354 | #, fuzzy |
6294 | msgid "Could not open revocation database file!" | 6355 | msgid "Could not open revocation database file!" |
6295 | msgstr "Kunde inte ansluta till gnunetd.\n" | 6356 | msgstr "Kunde inte ansluta till gnunetd.\n" |
@@ -8026,7 +8087,7 @@ msgid "Found %u addresses to report to NAT service\n" | |||
8026 | msgstr "" | 8087 | msgstr "" |
8027 | 8088 | ||
8028 | #: src/transport/plugin_transport_http_server.c:2825 | 8089 | #: src/transport/plugin_transport_http_server.c:2825 |
8029 | #: src/transport/plugin_transport_udp.c:3336 | 8090 | #: src/transport/plugin_transport_udp.c:3335 |
8030 | msgid "Disabling IPv6 since it is not supported on this system!\n" | 8091 | msgid "Disabling IPv6 since it is not supported on this system!\n" |
8031 | msgstr "" | 8092 | msgstr "" |
8032 | 8093 | ||
@@ -8268,50 +8329,50 @@ msgstr "" | |||
8268 | msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" | 8329 | msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" |
8269 | msgstr "" | 8330 | msgstr "" |
8270 | 8331 | ||
8271 | #: src/transport/plugin_transport_udp.c:3082 | 8332 | #: src/transport/plugin_transport_udp.c:3081 |
8272 | #, c-format | 8333 | #, c-format |
8273 | msgid "" | 8334 | msgid "" |
8274 | "UDP could not transmit message to `%s': Network seems down, please check " | 8335 | "UDP could not transmit message to `%s': Network seems down, please check " |
8275 | "your network configuration\n" | 8336 | "your network configuration\n" |
8276 | msgstr "" | 8337 | msgstr "" |
8277 | 8338 | ||
8278 | #: src/transport/plugin_transport_udp.c:3096 | 8339 | #: src/transport/plugin_transport_udp.c:3095 |
8279 | msgid "" | 8340 | msgid "" |
8280 | "UDP could not transmit IPv6 message! Please check your network configuration " | 8341 | "UDP could not transmit IPv6 message! Please check your network configuration " |
8281 | "and disable IPv6 if your connection does not have a global IPv6 address\n" | 8342 | "and disable IPv6 if your connection does not have a global IPv6 address\n" |
8282 | msgstr "" | 8343 | msgstr "" |
8283 | 8344 | ||
8284 | #: src/transport/plugin_transport_udp.c:3412 | 8345 | #: src/transport/plugin_transport_udp.c:3411 |
8285 | #: src/transport/plugin_transport_udp.c:3511 | 8346 | #: src/transport/plugin_transport_udp.c:3510 |
8286 | #, fuzzy, c-format | 8347 | #, fuzzy, c-format |
8287 | msgid "Failed to bind UDP socket to %s: %s\n" | 8348 | msgid "Failed to bind UDP socket to %s: %s\n" |
8288 | msgstr "Misslyckades att binda till UDP6-port %d.\n" | 8349 | msgstr "Misslyckades att binda till UDP6-port %d.\n" |
8289 | 8350 | ||
8290 | #: src/transport/plugin_transport_udp.c:3430 | 8351 | #: src/transport/plugin_transport_udp.c:3429 |
8291 | msgid "Disabling IPv4 since it is not supported on this system!\n" | 8352 | msgid "Disabling IPv4 since it is not supported on this system!\n" |
8292 | msgstr "" | 8353 | msgstr "" |
8293 | 8354 | ||
8294 | #: src/transport/plugin_transport_udp.c:3521 | 8355 | #: src/transport/plugin_transport_udp.c:3520 |
8295 | #, fuzzy | 8356 | #, fuzzy |
8296 | msgid "Failed to open UDP sockets\n" | 8357 | msgid "Failed to open UDP sockets\n" |
8297 | msgstr "Misslyckades att binda till UDP6-port %d.\n" | 8358 | msgstr "Misslyckades att binda till UDP6-port %d.\n" |
8298 | 8359 | ||
8299 | #: src/transport/plugin_transport_udp.c:3592 | 8360 | #: src/transport/plugin_transport_udp.c:3591 |
8300 | #: src/transport/plugin_transport_udp.c:3606 | 8361 | #: src/transport/plugin_transport_udp.c:3605 |
8301 | msgid "must be in [0,65535]" | 8362 | msgid "must be in [0,65535]" |
8302 | msgstr "" | 8363 | msgstr "" |
8303 | 8364 | ||
8304 | #: src/transport/plugin_transport_udp.c:3638 | 8365 | #: src/transport/plugin_transport_udp.c:3637 |
8305 | #, fuzzy | 8366 | #, fuzzy |
8306 | msgid "must be valid IPv4 address" | 8367 | msgid "must be valid IPv4 address" |
8307 | msgstr "\"%s\" är inte tillgänglig." | 8368 | msgstr "\"%s\" är inte tillgänglig." |
8308 | 8369 | ||
8309 | #: src/transport/plugin_transport_udp.c:3665 | 8370 | #: src/transport/plugin_transport_udp.c:3664 |
8310 | #, fuzzy | 8371 | #, fuzzy |
8311 | msgid "must be valid IPv6 address" | 8372 | msgid "must be valid IPv6 address" |
8312 | msgstr "\"%s\" är inte tillgänglig." | 8373 | msgstr "\"%s\" är inte tillgänglig." |
8313 | 8374 | ||
8314 | #: src/transport/plugin_transport_udp.c:3731 | 8375 | #: src/transport/plugin_transport_udp.c:3730 |
8315 | #, fuzzy | 8376 | #, fuzzy |
8316 | msgid "Failed to create UDP network sockets\n" | 8377 | msgid "Failed to create UDP network sockets\n" |
8317 | msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n" | 8378 | msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n" |
@@ -8533,24 +8594,24 @@ msgstr "Konfigurationsfil \"%s\" hittades inte. Kör \"gnunet-setup -d\"!\n" | |||
8533 | msgid "Syntax error while deserializing in line %u\n" | 8594 | msgid "Syntax error while deserializing in line %u\n" |
8534 | msgstr "Syntaxfel i konfigurationsfil \"%s\" på rad %d.\n" | 8595 | msgstr "Syntaxfel i konfigurationsfil \"%s\" på rad %d.\n" |
8535 | 8596 | ||
8536 | #: src/util/configuration.c:1026 | 8597 | #: src/util/configuration.c:1025 |
8537 | #, c-format | 8598 | #, c-format |
8538 | msgid "" | 8599 | msgid "" |
8539 | "Configuration value '%s' for '%s' in section '%s' is not in set of legal " | 8600 | "Configuration value '%s' for '%s' in section '%s' is not in set of legal " |
8540 | "choices\n" | 8601 | "choices\n" |
8541 | msgstr "" | 8602 | msgstr "" |
8542 | 8603 | ||
8543 | #: src/util/configuration.c:1145 | 8604 | #: src/util/configuration.c:1144 |
8544 | #, c-format | 8605 | #, c-format |
8545 | msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n" | 8606 | msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n" |
8546 | msgstr "" | 8607 | msgstr "" |
8547 | 8608 | ||
8548 | #: src/util/configuration.c:1177 | 8609 | #: src/util/configuration.c:1176 |
8549 | #, fuzzy, c-format | 8610 | #, fuzzy, c-format |
8550 | msgid "Missing closing `%s' in option `%s'\n" | 8611 | msgid "Missing closing `%s' in option `%s'\n" |
8551 | msgstr "Konfigurationsfil \"%s\" skapad.\n" | 8612 | msgstr "Konfigurationsfil \"%s\" skapad.\n" |
8552 | 8613 | ||
8553 | #: src/util/configuration.c:1251 | 8614 | #: src/util/configuration.c:1250 |
8554 | #, c-format | 8615 | #, c-format |
8555 | msgid "" | 8616 | msgid "" |
8556 | "Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined " | 8617 | "Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined " |
@@ -8574,52 +8635,52 @@ msgid "" | |||
8574 | "%llu)\n" | 8635 | "%llu)\n" |
8575 | msgstr "" | 8636 | msgstr "" |
8576 | 8637 | ||
8577 | #: src/util/crypto_ecc.c:731 src/util/crypto_ecc.c:769 | 8638 | #: src/util/crypto_ecc.c:733 src/util/crypto_ecc.c:771 |
8578 | #: src/util/crypto_ecc.c:887 src/util/crypto_ecc.c:925 | 8639 | #: src/util/crypto_ecc.c:889 src/util/crypto_ecc.c:927 |
8579 | #, fuzzy, c-format | 8640 | #, fuzzy, c-format |
8580 | msgid "Could not acquire lock on file `%s': %s...\n" | 8641 | msgid "Could not acquire lock on file `%s': %s...\n" |
8581 | msgstr "Kunde inte slå upp \"%s\": %s\n" | 8642 | msgstr "Kunde inte slå upp \"%s\": %s\n" |
8582 | 8643 | ||
8583 | #: src/util/crypto_ecc.c:736 src/util/crypto_ecc.c:892 | 8644 | #: src/util/crypto_ecc.c:738 src/util/crypto_ecc.c:894 |
8584 | #, fuzzy | 8645 | #, fuzzy |
8585 | msgid "Creating a new private key. This may take a while.\n" | 8646 | msgid "Creating a new private key. This may take a while.\n" |
8586 | msgstr "Skapar ny värdnyckel (det här kan ta en stund).\n" | 8647 | msgstr "Skapar ny värdnyckel (det här kan ta en stund).\n" |
8587 | 8648 | ||
8588 | #: src/util/crypto_ecc.c:773 src/util/crypto_ecc.c:929 | 8649 | #: src/util/crypto_ecc.c:775 src/util/crypto_ecc.c:931 |
8589 | msgid "This may be ok if someone is currently generating a private key.\n" | 8650 | msgid "This may be ok if someone is currently generating a private key.\n" |
8590 | msgstr "" | 8651 | msgstr "" |
8591 | 8652 | ||
8592 | #: src/util/crypto_ecc.c:803 src/util/crypto_ecc.c:959 | 8653 | #: src/util/crypto_ecc.c:805 src/util/crypto_ecc.c:961 |
8593 | #, c-format | 8654 | #, c-format |
8594 | msgid "" | 8655 | msgid "" |
8595 | "When trying to read key file `%s' I found %u bytes but I need at least %u.\n" | 8656 | "When trying to read key file `%s' I found %u bytes but I need at least %u.\n" |
8596 | msgstr "" | 8657 | msgstr "" |
8597 | 8658 | ||
8598 | #: src/util/crypto_ecc.c:807 src/util/crypto_ecc.c:963 | 8659 | #: src/util/crypto_ecc.c:809 src/util/crypto_ecc.c:965 |
8599 | msgid "This may be ok if someone is currently generating a key.\n" | 8660 | msgid "This may be ok if someone is currently generating a key.\n" |
8600 | msgstr "" | 8661 | msgstr "" |
8601 | 8662 | ||
8602 | #: src/util/crypto_ecc.c:1045 | 8663 | #: src/util/crypto_ecc.c:1047 |
8603 | #, fuzzy | 8664 | #, fuzzy |
8604 | msgid "Could not load peer's private key\n" | 8665 | msgid "Could not load peer's private key\n" |
8605 | msgstr "Kunde inte tolka konfigurationsfil \"%s\".\n" | 8666 | msgstr "Kunde inte tolka konfigurationsfil \"%s\".\n" |
8606 | 8667 | ||
8607 | #: src/util/crypto_ecc.c:1149 | 8668 | #: src/util/crypto_ecc.c:1151 |
8608 | #, fuzzy, c-format | 8669 | #, fuzzy, c-format |
8609 | msgid "ECC signing failed at %s:%d: %s\n" | 8670 | msgid "ECC signing failed at %s:%d: %s\n" |
8610 | msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n" | 8671 | msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n" |
8611 | 8672 | ||
8612 | #: src/util/crypto_ecc.c:1199 | 8673 | #: src/util/crypto_ecc.c:1201 |
8613 | #, fuzzy, c-format | 8674 | #, fuzzy, c-format |
8614 | msgid "EdDSA signing failed at %s:%d: %s\n" | 8675 | msgid "EdDSA signing failed at %s:%d: %s\n" |
8615 | msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n" | 8676 | msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n" |
8616 | 8677 | ||
8617 | #: src/util/crypto_ecc.c:1273 | 8678 | #: src/util/crypto_ecc.c:1275 |
8618 | #, fuzzy, c-format | 8679 | #, fuzzy, c-format |
8619 | msgid "ECDSA signature verification failed at %s:%d: %s\n" | 8680 | msgid "ECDSA signature verification failed at %s:%d: %s\n" |
8620 | msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n" | 8681 | msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n" |
8621 | 8682 | ||
8622 | #: src/util/crypto_ecc.c:1330 | 8683 | #: src/util/crypto_ecc.c:1332 |
8623 | #, fuzzy, c-format | 8684 | #, fuzzy, c-format |
8624 | msgid "EdDSA signature verification failed at %s:%d: %s\n" | 8685 | msgid "EdDSA signature verification failed at %s:%d: %s\n" |
8625 | msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n" | 8686 | msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n" |
@@ -8629,17 +8690,17 @@ msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n" | |||
8629 | msgid "libgcrypt has not the expected version (version %s is required).\n" | 8690 | msgid "libgcrypt has not the expected version (version %s is required).\n" |
8630 | msgstr "libgcrypt har inte den förväntande versionen (version %s krävs).\n" | 8691 | msgstr "libgcrypt har inte den förväntande versionen (version %s krävs).\n" |
8631 | 8692 | ||
8632 | #: src/util/crypto_rsa.c:809 | 8693 | #: src/util/crypto_rsa.c:825 |
8633 | #, fuzzy, c-format | 8694 | #, fuzzy, c-format |
8634 | msgid "RSA signature verification failed at %s:%d: %s\n" | 8695 | msgid "RSA signature verification failed at %s:%d: %s\n" |
8635 | msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n" | 8696 | msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n" |
8636 | 8697 | ||
8637 | #: src/util/disk.c:1218 | 8698 | #: src/util/disk.c:1222 |
8638 | #, fuzzy, c-format | 8699 | #, fuzzy, c-format |
8639 | msgid "Expected `%s' to be a directory!\n" | 8700 | msgid "Expected `%s' to be a directory!\n" |
8640 | msgstr "\"%s\" förväntade att \"%s\" skulle vara en katalog!\n" | 8701 | msgstr "\"%s\" förväntade att \"%s\" skulle vara en katalog!\n" |
8641 | 8702 | ||
8642 | #: src/util/disk.c:1580 src/util/service.c:1328 | 8703 | #: src/util/disk.c:1584 src/util/service.c:1328 |
8643 | #, fuzzy, c-format | 8704 | #, fuzzy, c-format |
8644 | msgid "Cannot obtain information about user `%s': %s\n" | 8705 | msgid "Cannot obtain information about user `%s': %s\n" |
8645 | msgstr "Kan inte öppna konfigurationsfil \"%s\".\n" | 8706 | msgstr "Kan inte öppna konfigurationsfil \"%s\".\n" |
@@ -8704,7 +8765,7 @@ msgstr "%s: flagga \"-W %s\" tillåter inte ett argument\n" | |||
8704 | msgid "Use %s to get a list of options.\n" | 8765 | msgid "Use %s to get a list of options.\n" |
8705 | msgstr "Använd --help för att få en lista på flaggor.\n" | 8766 | msgstr "Använd --help för att få en lista på flaggor.\n" |
8706 | 8767 | ||
8707 | #: src/util/getopt_helpers.c:84 | 8768 | #: src/util/getopt_helpers.c:90 |
8708 | #, c-format | 8769 | #, c-format |
8709 | msgid "" | 8770 | msgid "" |
8710 | "Arguments mandatory for long options are also mandatory for short options.\n" | 8771 | "Arguments mandatory for long options are also mandatory for short options.\n" |
@@ -8712,12 +8773,12 @@ msgstr "" | |||
8712 | "Argument som är obligatoriska för långa flaggor är också obligatoriska för " | 8773 | "Argument som är obligatoriska för långa flaggor är också obligatoriska för " |
8713 | "korta flaggor.\n" | 8774 | "korta flaggor.\n" |
8714 | 8775 | ||
8715 | #: src/util/getopt_helpers.c:268 src/util/getopt_helpers.c:326 | 8776 | #: src/util/getopt_helpers.c:274 src/util/getopt_helpers.c:332 |
8716 | #, c-format | 8777 | #, c-format |
8717 | msgid "You must pass a number to the `%s' option.\n" | 8778 | msgid "You must pass a number to the `%s' option.\n" |
8718 | msgstr "Du måste skicka med ett nummer till flaggan \"%s\".\n" | 8779 | msgstr "Du måste skicka med ett nummer till flaggan \"%s\".\n" |
8719 | 8780 | ||
8720 | #: src/util/getopt_helpers.c:298 | 8781 | #: src/util/getopt_helpers.c:304 |
8721 | #, fuzzy, c-format | 8782 | #, fuzzy, c-format |
8722 | msgid "You must pass relative time to the `%s' option.\n" | 8783 | msgid "You must pass relative time to the `%s' option.\n" |
8723 | msgstr "Du måste skicka med ett nummer till flaggan \"%s\".\n" | 8784 | msgstr "Du måste skicka med ett nummer till flaggan \"%s\".\n" |
@@ -8962,22 +9023,22 @@ msgstr "\"%s\" misslyckades för enhet %s: %u\n" | |||
8962 | msgid "GetExitCodeProcess failed for binary %s (%d).\n" | 9023 | msgid "GetExitCodeProcess failed for binary %s (%d).\n" |
8963 | msgstr "" | 9024 | msgstr "" |
8964 | 9025 | ||
8965 | #: src/util/plugin.c:87 | 9026 | #: src/util/plugin.c:86 |
8966 | #, c-format | 9027 | #, c-format |
8967 | msgid "Initialization of plugin mechanism failed: %s!\n" | 9028 | msgid "Initialization of plugin mechanism failed: %s!\n" |
8968 | msgstr "Initiering av insticksmekanism misslyckades: %s!\n" | 9029 | msgstr "Initiering av insticksmekanism misslyckades: %s!\n" |
8969 | 9030 | ||
8970 | #: src/util/plugin.c:148 | 9031 | #: src/util/plugin.c:151 |
8971 | #, fuzzy, c-format | 9032 | #, fuzzy, c-format |
8972 | msgid "`%s' failed to resolve method '%s' with error: %s\n" | 9033 | msgid "`%s' failed to resolve method '%s' with error: %s\n" |
8973 | msgstr "\"%s\" misslyckades för fil \"%s\" vid %s:%d med fel: %s\n" | 9034 | msgstr "\"%s\" misslyckades för fil \"%s\" vid %s:%d med fel: %s\n" |
8974 | 9035 | ||
8975 | #: src/util/plugin.c:223 | 9036 | #: src/util/plugin.c:226 |
8976 | #, fuzzy, c-format | 9037 | #, fuzzy, c-format |
8977 | msgid "`%s' failed for library `%s' with error: %s\n" | 9038 | msgid "`%s' failed for library `%s' with error: %s\n" |
8978 | msgstr "\"%s\" misslyckades vid %s:%d med fel: %s\n" | 9039 | msgstr "\"%s\" misslyckades vid %s:%d med fel: %s\n" |
8979 | 9040 | ||
8980 | #: src/util/plugin.c:382 | 9041 | #: src/util/plugin.c:385 |
8981 | #, fuzzy | 9042 | #, fuzzy |
8982 | msgid "Could not determine plugin installation path.\n" | 9043 | msgid "Could not determine plugin installation path.\n" |
8983 | msgstr "Kunde inte fastställa min publika IPv6-adress.\n" | 9044 | msgstr "Kunde inte fastställa min publika IPv6-adress.\n" |
@@ -9627,10 +9688,6 @@ msgstr "\"%s\" misslyckades för fil \"%s\" vid %s:%d med fel: %s\n" | |||
9627 | #~ msgstr "\"%s\" ansluten till \"%s\".\n" | 9688 | #~ msgstr "\"%s\" ansluten till \"%s\".\n" |
9628 | 9689 | ||
9629 | #, fuzzy | 9690 | #, fuzzy |
9630 | #~ msgid "CADET initialized\n" | ||
9631 | #~ msgstr " Anslutning misslyckades\n" | ||
9632 | |||
9633 | #, fuzzy | ||
9634 | #~ msgid "Reloading sensor definitions from directory `%s'\n" | 9691 | #~ msgid "Reloading sensor definitions from directory `%s'\n" |
9635 | #~ msgstr "Ladda ner filer från GNUnet." | 9692 | #~ msgstr "Ladda ner filer från GNUnet." |
9636 | 9693 | ||
@@ -8,7 +8,7 @@ msgid "" | |||
8 | msgstr "" | 8 | msgstr "" |
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: 2015-03-14 18:00+0100\n" | 11 | "POT-Creation-Date: 2015-04-27 13:05+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" |
@@ -503,17 +503,17 @@ msgstr "" | |||
503 | msgid "Could not connect master [%u] and slave [%u]\n" | 503 | msgid "Could not connect master [%u] and slave [%u]\n" |
504 | msgstr "Không thể kết nối tới %s:%u: %s\n" | 504 | msgstr "Không thể kết nối tới %s:%u: %s\n" |
505 | 505 | ||
506 | #: src/ats-tests/ats-testing.c:490 src/ats-tests/ats-testing.c:662 | 506 | #: src/ats-tests/ats-testing.c:490 src/ats-tests/ats-testing.c:634 |
507 | #, fuzzy | 507 | #, fuzzy |
508 | msgid "Initialization failed, shutdown\n" | 508 | msgid "Initialization failed, shutdown\n" |
509 | msgstr "Lỗi sơ khởi cơ chế phần bổ sung: %s\n" | 509 | msgstr "Lỗi sơ khởi cơ chế phần bổ sung: %s\n" |
510 | 510 | ||
511 | #: src/ats-tests/ats-testing-log.c:846 | 511 | #: src/ats-tests/ats-testing-log.c:834 |
512 | #, fuzzy | 512 | #, fuzzy |
513 | msgid "Stop logging\n" | 513 | msgid "Stop logging\n" |
514 | msgstr "Theo dõi" | 514 | msgstr "Theo dõi" |
515 | 515 | ||
516 | #: src/ats-tests/ats-testing-log.c:897 | 516 | #: src/ats-tests/ats-testing-log.c:885 |
517 | #, fuzzy, c-format | 517 | #, fuzzy, c-format |
518 | msgid "Start logging `%s'\n" | 518 | msgid "Start logging `%s'\n" |
519 | msgstr "Đang bắt đầu tài về « %s »\n" | 519 | msgstr "Đang bắt đầu tài về « %s »\n" |
@@ -561,6 +561,7 @@ msgid "Quota for network `%11s' (in/out): %10s / %10s\n" | |||
561 | msgstr "" | 561 | msgstr "" |
562 | 562 | ||
563 | #: src/ats-tool/gnunet-ats.c:708 src/namestore/gnunet-namestore.c:700 | 563 | #: src/ats-tool/gnunet-ats.c:708 src/namestore/gnunet-namestore.c:700 |
564 | #: src/namestore/plugin_rest_namestore.c:812 | ||
564 | #: src/transport/gnunet-transport.c:1890 | 565 | #: src/transport/gnunet-transport.c:1890 |
565 | #: src/transport/gnunet-transport-profiler.c:531 | 566 | #: src/transport/gnunet-transport-profiler.c:531 |
566 | #, fuzzy, c-format | 567 | #, fuzzy, c-format |
@@ -1442,30 +1443,30 @@ msgstr "# các byte đã giải mã" | |||
1442 | msgid "# PAYLOAD dropped (out of order)" | 1443 | msgid "# PAYLOAD dropped (out of order)" |
1443 | msgstr "# các byte loại bỏ bởi UDP (đi ra)" | 1444 | msgstr "# các byte loại bỏ bởi UDP (đi ra)" |
1444 | 1445 | ||
1445 | #: src/core/gnunet-service-core_neighbours.c:168 | 1446 | #: src/core/gnunet-service-core_neighbours.c:177 |
1446 | #, fuzzy | 1447 | #, fuzzy |
1447 | msgid "# sessions terminated by transport disconnect" | 1448 | msgid "# sessions terminated by transport disconnect" |
1448 | msgstr "# Các quảng cáo đồng đẳng bị hủy do trọng tải" | 1449 | msgstr "# Các quảng cáo đồng đẳng bị hủy do trọng tải" |
1449 | 1450 | ||
1450 | #: src/core/gnunet-service-core_neighbours.c:184 | 1451 | #: src/core/gnunet-service-core_neighbours.c:193 |
1451 | #: src/core/gnunet-service-core_neighbours.c:342 | 1452 | #: src/core/gnunet-service-core_neighbours.c:355 |
1452 | msgid "# neighbour entries allocated" | 1453 | msgid "# neighbour entries allocated" |
1453 | msgstr "" | 1454 | msgstr "" |
1454 | 1455 | ||
1455 | #: src/core/gnunet-service-core_neighbours.c:252 | 1456 | #: src/core/gnunet-service-core_neighbours.c:264 |
1456 | msgid "# encrypted bytes given to transport" | 1457 | msgid "# encrypted bytes given to transport" |
1457 | msgstr "" | 1458 | msgstr "" |
1458 | 1459 | ||
1459 | #: src/core/gnunet-service-core_neighbours.c:425 | 1460 | #: src/core/gnunet-service-core_neighbours.c:438 |
1460 | #, c-format | 1461 | #, c-format |
1461 | msgid "Unsupported message of type %u (%u bytes) received from peer `%s'\n" | 1462 | msgid "Unsupported message of type %u (%u bytes) received from peer `%s'\n" |
1462 | msgstr "" | 1463 | msgstr "" |
1463 | 1464 | ||
1464 | #: src/core/gnunet-service-core_sessions.c:245 | 1465 | #: src/core/gnunet-service-core_sessions.c:252 |
1465 | #: src/core/gnunet-service-core_sessions.c:331 | 1466 | #: src/core/gnunet-service-core_sessions.c:338 |
1466 | #: src/dht/gnunet-service-dht_neighbours.c:661 | 1467 | #: src/dht/gnunet-service-dht_neighbours.c:661 |
1467 | #: src/dht/gnunet-service-dht_neighbours.c:726 | 1468 | #: src/dht/gnunet-service-dht_neighbours.c:726 |
1468 | #: src/fs/gnunet-service-fs_cp.c:645 src/fs/gnunet-service-fs_cp.c:1627 | 1469 | #: src/fs/gnunet-service-fs_cp.c:654 src/fs/gnunet-service-fs_cp.c:1647 |
1469 | #: src/topology/gnunet-daemon-topology.c:734 | 1470 | #: src/topology/gnunet-daemon-topology.c:734 |
1470 | #: src/topology/gnunet-daemon-topology.c:835 | 1471 | #: src/topology/gnunet-daemon-topology.c:835 |
1471 | #: src/transport/gnunet-service-transport_neighbours.c:755 | 1472 | #: src/transport/gnunet-service-transport_neighbours.c:755 |
@@ -1474,22 +1475,22 @@ msgstr "" | |||
1474 | msgid "# peers connected" | 1475 | msgid "# peers connected" |
1475 | msgstr "# của các đồng đẳng đã kết nối" | 1476 | msgstr "# của các đồng đẳng đã kết nối" |
1476 | 1477 | ||
1477 | #: src/core/gnunet-service-core_sessions.c:278 | 1478 | #: src/core/gnunet-service-core_sessions.c:285 |
1478 | #, fuzzy | 1479 | #, fuzzy |
1479 | msgid "# type map refreshes sent" | 1480 | msgid "# type map refreshes sent" |
1480 | msgstr "# tổng số yêu cầu lỗ hổng được gửi" | 1481 | msgstr "# tổng số yêu cầu lỗ hổng được gửi" |
1481 | 1482 | ||
1482 | #: src/core/gnunet-service-core_sessions.c:397 | 1483 | #: src/core/gnunet-service-core_sessions.c:404 |
1483 | #, fuzzy | 1484 | #, fuzzy |
1484 | msgid "# outdated typemap confirmations received" | 1485 | msgid "# outdated typemap confirmations received" |
1485 | msgstr "Lỗi lưu cấu hình." | 1486 | msgstr "Lỗi lưu cấu hình." |
1486 | 1487 | ||
1487 | #: src/core/gnunet-service-core_sessions.c:408 | 1488 | #: src/core/gnunet-service-core_sessions.c:415 |
1488 | #, fuzzy | 1489 | #, fuzzy |
1489 | msgid "# valid typemap confirmations received" | 1490 | msgid "# valid typemap confirmations received" |
1490 | msgstr "Lỗi lưu cấu hình." | 1491 | msgstr "Lỗi lưu cấu hình." |
1491 | 1492 | ||
1492 | #: src/core/gnunet-service-core_sessions.c:546 | 1493 | #: src/core/gnunet-service-core_sessions.c:554 |
1493 | msgid "# messages discarded (expired prior to transmission)" | 1494 | msgid "# messages discarded (expired prior to transmission)" |
1494 | msgstr "" | 1495 | msgstr "" |
1495 | 1496 | ||
@@ -1504,7 +1505,7 @@ msgid "# updates to my type map" | |||
1504 | msgstr "" | 1505 | msgstr "" |
1505 | 1506 | ||
1506 | #: src/datacache/datacache.c:115 src/datacache/datacache.c:266 | 1507 | #: src/datacache/datacache.c:115 src/datacache/datacache.c:266 |
1507 | #: src/datastore/gnunet-service-datastore.c:855 | 1508 | #: src/datastore/gnunet-service-datastore.c:841 |
1508 | #, fuzzy | 1509 | #, fuzzy |
1509 | msgid "# bytes stored" | 1510 | msgid "# bytes stored" |
1510 | msgstr "# các byte trong kho dữ liệu" | 1511 | msgstr "# các byte trong kho dữ liệu" |
@@ -1515,8 +1516,8 @@ msgid "# items stored" | |||
1515 | msgstr "# các byte trong kho dữ liệu" | 1516 | msgstr "# các byte trong kho dữ liệu" |
1516 | 1517 | ||
1517 | #: src/datacache/datacache.c:143 src/datacache/datacache.c:150 | 1518 | #: src/datacache/datacache.c:143 src/datacache/datacache.c:150 |
1518 | #: src/datastore/gnunet-service-datastore.c:1557 | 1519 | #: src/datastore/gnunet-service-datastore.c:1598 |
1519 | #: src/datastore/gnunet-service-datastore.c:1568 | 1520 | #: src/datastore/gnunet-service-datastore.c:1609 |
1520 | #, c-format | 1521 | #, c-format |
1521 | msgid "No `%s' specified for `%s' in configuration!\n" | 1522 | msgid "No `%s' specified for `%s' in configuration!\n" |
1522 | msgstr "" | 1523 | msgstr "" |
@@ -1551,8 +1552,8 @@ msgstr "" | |||
1551 | 1552 | ||
1552 | #: src/datacache/plugin_datacache_sqlite.c:69 | 1553 | #: src/datacache/plugin_datacache_sqlite.c:69 |
1553 | #: src/datacache/plugin_datacache_sqlite.c:72 | 1554 | #: src/datacache/plugin_datacache_sqlite.c:72 |
1554 | #: src/datastore/plugin_datastore_mysql.c:809 | 1555 | #: src/datastore/plugin_datastore_mysql.c:818 |
1555 | #: src/datastore/plugin_datastore_mysql.c:823 | 1556 | #: src/datastore/plugin_datastore_mysql.c:834 |
1556 | #: src/datastore/plugin_datastore_sqlite.c:57 src/mysql/mysql.c:41 | 1557 | #: src/datastore/plugin_datastore_sqlite.c:57 src/mysql/mysql.c:41 |
1557 | #: src/mysql/mysql.c:48 src/mysql/mysql.c:522 src/mysql/mysql.c:531 | 1558 | #: src/mysql/mysql.c:48 src/mysql/mysql.c:522 src/mysql/mysql.c:531 |
1558 | #: src/mysql/mysql.c:591 src/mysql/mysql.c:607 | 1559 | #: src/mysql/mysql.c:591 src/mysql/mysql.c:607 |
@@ -1761,8 +1762,8 @@ msgstr "" | |||
1761 | 1762 | ||
1762 | #: src/datastore/gnunet-service-datastore.c:712 | 1763 | #: src/datastore/gnunet-service-datastore.c:712 |
1763 | #: src/datastore/gnunet-service-datastore.c:767 | 1764 | #: src/datastore/gnunet-service-datastore.c:767 |
1764 | #: src/datastore/gnunet-service-datastore.c:982 | 1765 | #: src/datastore/gnunet-service-datastore.c:999 |
1765 | #: src/datastore/gnunet-service-datastore.c:1529 | 1766 | #: src/datastore/gnunet-service-datastore.c:1570 |
1766 | msgid "# reserved" | 1767 | msgid "# reserved" |
1767 | msgstr "" | 1768 | msgstr "" |
1768 | 1769 | ||
@@ -1770,138 +1771,153 @@ msgstr "" | |||
1770 | msgid "Could not find matching reservation" | 1771 | msgid "Could not find matching reservation" |
1771 | msgstr "" | 1772 | msgstr "" |
1772 | 1773 | ||
1773 | #: src/datastore/gnunet-service-datastore.c:867 | 1774 | #: src/datastore/gnunet-service-datastore.c:853 |
1774 | #, c-format | 1775 | #, c-format |
1775 | msgid "Need %llu bytes more space (%llu allowed, using %llu)\n" | 1776 | msgid "Need %llu bytes more space (%llu allowed, using %llu)\n" |
1776 | msgstr "" | 1777 | msgstr "" |
1777 | 1778 | ||
1778 | #: src/datastore/gnunet-service-datastore.c:1029 | 1779 | #: src/datastore/gnunet-service-datastore.c:1046 |
1779 | #, fuzzy | 1780 | #, fuzzy |
1780 | msgid "# GET requests received" | 1781 | msgid "# GET requests received" |
1781 | msgstr "# các yêu cầu get (lấy) dht được nhận" | 1782 | msgstr "# các yêu cầu get (lấy) dht được nhận" |
1782 | 1783 | ||
1783 | #: src/datastore/gnunet-service-datastore.c:1041 | 1784 | #: src/datastore/gnunet-service-datastore.c:1058 |
1784 | #, fuzzy | 1785 | #, fuzzy |
1785 | msgid "# requests filtered by bloomfilter" | 1786 | msgid "# requests filtered by bloomfilter" |
1786 | msgstr "# các yêu cầu được lọc theo bộ lọc bloom" | 1787 | msgstr "# các yêu cầu được lọc theo bộ lọc bloom" |
1787 | 1788 | ||
1788 | #: src/datastore/gnunet-service-datastore.c:1069 | 1789 | #: src/datastore/gnunet-service-datastore.c:1094 |
1789 | #, fuzzy | 1790 | #, fuzzy |
1790 | msgid "# UPDATE requests received" | 1791 | msgid "# UPDATE requests received" |
1791 | msgstr "# các yêu cầu get (lấy) dht được nhận" | 1792 | msgstr "# các yêu cầu get (lấy) dht được nhận" |
1792 | 1793 | ||
1793 | #: src/datastore/gnunet-service-datastore.c:1099 | 1794 | #: src/datastore/gnunet-service-datastore.c:1122 |
1794 | #, fuzzy | 1795 | #, fuzzy |
1795 | msgid "# GET REPLICATION requests received" | 1796 | msgid "# GET REPLICATION requests received" |
1796 | msgstr "# các yêu cầu get (lấy) dht được nhận" | 1797 | msgstr "# các yêu cầu get (lấy) dht được nhận" |
1797 | 1798 | ||
1798 | #: src/datastore/gnunet-service-datastore.c:1132 | 1799 | #: src/datastore/gnunet-service-datastore.c:1155 |
1799 | #, fuzzy | 1800 | #, fuzzy |
1800 | msgid "# GET ZERO ANONYMITY requests received" | 1801 | msgid "# GET ZERO ANONYMITY requests received" |
1801 | msgstr "# các yêu cầu get (lấy) dht được nhận" | 1802 | msgstr "# các yêu cầu get (lấy) dht được nhận" |
1802 | 1803 | ||
1803 | #: src/datastore/gnunet-service-datastore.c:1157 | 1804 | #: src/datastore/gnunet-service-datastore.c:1180 |
1804 | msgid "Content not found" | 1805 | msgid "Content not found" |
1805 | msgstr "" | 1806 | msgstr "" |
1806 | 1807 | ||
1807 | #: src/datastore/gnunet-service-datastore.c:1165 | 1808 | #: src/datastore/gnunet-service-datastore.c:1188 |
1808 | msgid "# bytes removed (explicit request)" | 1809 | msgid "# bytes removed (explicit request)" |
1809 | msgstr "" | 1810 | msgstr "" |
1810 | 1811 | ||
1811 | #: src/datastore/gnunet-service-datastore.c:1197 | 1812 | #: src/datastore/gnunet-service-datastore.c:1220 |
1812 | #, fuzzy | 1813 | #, fuzzy |
1813 | msgid "# REMOVE requests received" | 1814 | msgid "# REMOVE requests received" |
1814 | msgstr "# các yêu cầu get (lấy) dht được nhận" | 1815 | msgstr "# các yêu cầu get (lấy) dht được nhận" |
1815 | 1816 | ||
1816 | #: src/datastore/gnunet-service-datastore.c:1241 | 1817 | #: src/datastore/gnunet-service-datastore.c:1264 |
1817 | #, c-format | 1818 | #, c-format |
1818 | msgid "" | 1819 | msgid "" |
1819 | "Datastore payload must have been inaccurate (%lld < %lld). Recomputing it.\n" | 1820 | "Datastore payload must have been inaccurate (%lld < %lld). Recomputing it.\n" |
1820 | msgstr "" | 1821 | msgstr "" |
1821 | 1822 | ||
1822 | #: src/datastore/gnunet-service-datastore.c:1246 | 1823 | #: src/datastore/gnunet-service-datastore.c:1269 |
1823 | #, c-format | 1824 | #, c-format |
1824 | msgid "New payload: %lld\n" | 1825 | msgid "New payload: %lld\n" |
1825 | msgstr "" | 1826 | msgstr "" |
1826 | 1827 | ||
1827 | #: src/datastore/gnunet-service-datastore.c:1299 | 1828 | #: src/datastore/gnunet-service-datastore.c:1322 |
1828 | #, c-format | 1829 | #, c-format |
1829 | msgid "Loading `%s' datastore plugin\n" | 1830 | msgid "Loading `%s' datastore plugin\n" |
1830 | msgstr "" | 1831 | msgstr "" |
1831 | 1832 | ||
1832 | #: src/datastore/gnunet-service-datastore.c:1310 | 1833 | #: src/datastore/gnunet-service-datastore.c:1333 |
1833 | #, fuzzy, c-format | 1834 | #, fuzzy, c-format |
1834 | msgid "Failed to load datastore plugin for `%s'\n" | 1835 | msgid "Failed to load datastore plugin for `%s'\n" |
1835 | msgstr "Không thể nạp phần bổ sung truyền tải « %s »\n" | 1836 | msgstr "Không thể nạp phần bổ sung truyền tải « %s »\n" |
1836 | 1837 | ||
1837 | #: src/datastore/gnunet-service-datastore.c:1412 | 1838 | #: src/datastore/gnunet-service-datastore.c:1402 |
1838 | msgid "Rebuilding bloomfilter. Please be patient.\n" | 1839 | #: src/datastore/gnunet-service-datastore.c:1463 |
1840 | msgid "Bloomfilter construction complete.\n" | ||
1839 | msgstr "" | 1841 | msgstr "" |
1840 | 1842 | ||
1841 | #: src/datastore/gnunet-service-datastore.c:1419 | 1843 | #: src/datastore/gnunet-service-datastore.c:1450 |
1842 | msgid "Plugin does not support get_keys function. Please fix!\n" | 1844 | msgid "Rebuilding bloomfilter. Please be patient.\n" |
1843 | msgstr "" | 1845 | msgstr "" |
1844 | 1846 | ||
1845 | #: src/datastore/gnunet-service-datastore.c:1422 | 1847 | #: src/datastore/gnunet-service-datastore.c:1460 |
1846 | msgid "Bloomfilter construction complete.\n" | 1848 | msgid "Plugin does not support get_keys function. Please fix!\n" |
1847 | msgstr "" | 1849 | msgstr "" |
1848 | 1850 | ||
1849 | #: src/datastore/gnunet-service-datastore.c:1562 | 1851 | #: src/datastore/gnunet-service-datastore.c:1603 |
1850 | #, fuzzy, c-format | 1852 | #, fuzzy, c-format |
1851 | msgid "# bytes used in file-sharing datastore `%s'" | 1853 | msgid "# bytes used in file-sharing datastore `%s'" |
1852 | msgstr "# các byte được phép trong kho dữ liệu" | 1854 | msgstr "# các byte được phép trong kho dữ liệu" |
1853 | 1855 | ||
1854 | #: src/datastore/gnunet-service-datastore.c:1573 | 1856 | #: src/datastore/gnunet-service-datastore.c:1614 |
1855 | msgid "# quota" | 1857 | msgid "# quota" |
1856 | msgstr "" | 1858 | msgstr "" |
1857 | 1859 | ||
1858 | #: src/datastore/gnunet-service-datastore.c:1575 | 1860 | #: src/datastore/gnunet-service-datastore.c:1616 |
1859 | msgid "# cache size" | 1861 | msgid "# cache size" |
1860 | msgstr "" | 1862 | msgstr "" |
1861 | 1863 | ||
1862 | #: src/datastore/gnunet-service-datastore.c:1588 | 1864 | #: src/datastore/gnunet-service-datastore.c:1629 |
1863 | #, c-format | 1865 | #, c-format |
1864 | msgid "Could not use specified filename `%s' for bloomfilter.\n" | 1866 | msgid "Could not use specified filename `%s' for bloomfilter.\n" |
1865 | msgstr "" | 1867 | msgstr "" |
1866 | 1868 | ||
1867 | #: src/datastore/gnunet-service-datastore.c:1606 | 1869 | #: src/datastore/gnunet-service-datastore.c:1647 |
1868 | #: src/datastore/gnunet-service-datastore.c:1622 | 1870 | #: src/datastore/gnunet-service-datastore.c:1663 |
1869 | #, fuzzy, c-format | 1871 | #, fuzzy, c-format |
1870 | msgid "Failed to remove bogus bloomfilter file `%s'\n" | 1872 | msgid "Failed to remove bogus bloomfilter file `%s'\n" |
1871 | msgstr "Không thể lưu tập tin cấu hình « %s »:" | 1873 | msgstr "Không thể lưu tập tin cấu hình « %s »:" |
1872 | 1874 | ||
1873 | #: src/datastore/gnunet-service-datastore.c:1652 | 1875 | #: src/datastore/gnunet-service-datastore.c:1693 |
1874 | #, fuzzy | 1876 | #, fuzzy |
1875 | msgid "Failed to initialize bloomfilter.\n" | 1877 | msgid "Failed to initialize bloomfilter.\n" |
1876 | msgstr "Lỗi sơ khởi dịch vụ « %s ».\n" | 1878 | msgstr "Lỗi sơ khởi dịch vụ « %s ».\n" |
1877 | 1879 | ||
1878 | #: src/datastore/plugin_datastore_heap.c:821 | 1880 | #: src/datastore/plugin_datastore_heap.c:826 |
1879 | #, fuzzy | 1881 | #, fuzzy |
1880 | msgid "Heap database running\n" | 1882 | msgid "Heap database running\n" |
1881 | msgstr "kho dữ liệu sqlite" | 1883 | msgstr "kho dữ liệu sqlite" |
1882 | 1884 | ||
1883 | #: src/datastore/plugin_datastore_mysql.c:786 | 1885 | #: src/datastore/plugin_datastore_mysql.c:309 |
1886 | #: src/datastore/plugin_datastore_sqlite.c:499 | ||
1887 | #, fuzzy | ||
1888 | msgid "Data too large" | ||
1889 | msgstr "số lần lặp lại" | ||
1890 | |||
1891 | #: src/datastore/plugin_datastore_mysql.c:328 | ||
1892 | msgid "MySQL statement run failure" | ||
1893 | msgstr "" | ||
1894 | |||
1895 | #: src/datastore/plugin_datastore_mysql.c:793 | ||
1884 | #, fuzzy, c-format | 1896 | #, fuzzy, c-format |
1885 | msgid "Failed to prepare statement `%s'\n" | 1897 | msgid "Failed to prepare statement `%s'\n" |
1886 | msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" | 1898 | msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" |
1887 | 1899 | ||
1888 | #: src/datastore/plugin_datastore_mysql.c:794 | 1900 | #: src/datastore/plugin_datastore_mysql.c:802 |
1889 | #, fuzzy, c-format | 1901 | #, fuzzy, c-format |
1890 | msgid "`%s' for `%s' failed at %s:%d with error: %s\n" | 1902 | msgid "`%s' for `%s' failed at %s:%d with error: %s\n" |
1891 | msgstr "« %s » bị lỗi tại %s:%d với lỗi: %s\n" | 1903 | msgstr "« %s » bị lỗi tại %s:%d với lỗi: %s\n" |
1892 | 1904 | ||
1893 | #: src/datastore/plugin_datastore_mysql.c:1025 | 1905 | #: src/datastore/plugin_datastore_mysql.c:1036 |
1894 | msgid "Mysql database running\n" | 1906 | msgid "Mysql database running\n" |
1895 | msgstr "" | 1907 | msgstr "" |
1896 | 1908 | ||
1897 | #: src/datastore/plugin_datastore_postgres.c:837 | 1909 | #: src/datastore/plugin_datastore_postgres.c:331 |
1910 | msgid "Postgress exec failure" | ||
1911 | msgstr "" | ||
1912 | |||
1913 | #: src/datastore/plugin_datastore_postgres.c:846 | ||
1898 | #, fuzzy | 1914 | #, fuzzy |
1899 | msgid "Failed to drop table from database.\n" | 1915 | msgid "Failed to drop table from database.\n" |
1900 | msgstr "" | 1916 | msgstr "" |
1901 | "\n" | 1917 | "\n" |
1902 | "Không nhận được đáp ứng từ gnunetd.\n" | 1918 | "Không nhận được đáp ứng từ gnunetd.\n" |
1903 | 1919 | ||
1904 | #: src/datastore/plugin_datastore_postgres.c:873 | 1920 | #: src/datastore/plugin_datastore_postgres.c:882 |
1905 | #: src/namecache/plugin_namecache_postgres.c:414 | 1921 | #: src/namecache/plugin_namecache_postgres.c:414 |
1906 | #: src/namestore/plugin_namestore_postgres.c:569 | 1922 | #: src/namestore/plugin_namestore_postgres.c:569 |
1907 | msgid "Postgres database running\n" | 1923 | msgid "Postgres database running\n" |
@@ -1924,30 +1940,30 @@ msgstr "« %s » bị lỗi tại %s:%d với lỗi: %s" | |||
1924 | msgid "Unable to initialize SQLite: %s.\n" | 1940 | msgid "Unable to initialize SQLite: %s.\n" |
1925 | msgstr "Không thể sơ khởi SQLite: %s.\n" | 1941 | msgstr "Không thể sơ khởi SQLite: %s.\n" |
1926 | 1942 | ||
1927 | #: src/datastore/plugin_datastore_sqlite.c:661 | 1943 | #: src/datastore/plugin_datastore_sqlite.c:680 |
1928 | #, fuzzy | 1944 | #, fuzzy |
1929 | msgid "Invalid data in database. Trying to fix (by deletion).\n" | 1945 | msgid "Invalid data in database. Trying to fix (by deletion).\n" |
1930 | msgstr "Dữ liệu sai trong %s. Đang thử sửa chữa (bằng cách xoá).\n" | 1946 | msgstr "Dữ liệu sai trong %s. Đang thử sửa chữa (bằng cách xoá).\n" |
1931 | 1947 | ||
1932 | #: src/datastore/plugin_datastore_sqlite.c:1156 | 1948 | #: src/datastore/plugin_datastore_sqlite.c:1177 |
1933 | msgid "sqlite version to old to determine size, assuming zero\n" | 1949 | msgid "sqlite version to old to determine size, assuming zero\n" |
1934 | msgstr "" | 1950 | msgstr "" |
1935 | 1951 | ||
1936 | #: src/datastore/plugin_datastore_sqlite.c:1176 | 1952 | #: src/datastore/plugin_datastore_sqlite.c:1197 |
1937 | #, c-format | 1953 | #, c-format |
1938 | msgid "" | 1954 | msgid "" |
1939 | "Using sqlite page utilization to estimate payload (%llu pages of size %llu " | 1955 | "Using sqlite page utilization to estimate payload (%llu pages of size %llu " |
1940 | "bytes)\n" | 1956 | "bytes)\n" |
1941 | msgstr "" | 1957 | msgstr "" |
1942 | 1958 | ||
1943 | #: src/datastore/plugin_datastore_sqlite.c:1216 | 1959 | #: src/datastore/plugin_datastore_sqlite.c:1237 |
1944 | #: src/namecache/plugin_namecache_sqlite.c:580 | 1960 | #: src/namecache/plugin_namecache_sqlite.c:580 |
1945 | #: src/namestore/plugin_namestore_sqlite.c:716 | 1961 | #: src/namestore/plugin_namestore_sqlite.c:716 |
1946 | #, fuzzy | 1962 | #, fuzzy |
1947 | msgid "Sqlite database running\n" | 1963 | msgid "Sqlite database running\n" |
1948 | msgstr "kho dữ liệu sqlite" | 1964 | msgstr "kho dữ liệu sqlite" |
1949 | 1965 | ||
1950 | #: src/datastore/plugin_datastore_template.c:259 | 1966 | #: src/datastore/plugin_datastore_template.c:260 |
1951 | msgid "Template database running\n" | 1967 | msgid "Template database running\n" |
1952 | msgstr "" | 1968 | msgstr "" |
1953 | 1969 | ||
@@ -2581,54 +2597,54 @@ msgstr "" | |||
2581 | msgid "Change DNS replies to point elsewhere." | 2597 | msgid "Change DNS replies to point elsewhere." |
2582 | msgstr "" | 2598 | msgstr "" |
2583 | 2599 | ||
2584 | #: src/dns/gnunet-service-dns.c:456 | 2600 | #: src/dns/gnunet-service-dns.c:459 |
2585 | msgid "# DNS requests answered via TUN interface" | 2601 | msgid "# DNS requests answered via TUN interface" |
2586 | msgstr "" | 2602 | msgstr "" |
2587 | 2603 | ||
2588 | #: src/dns/gnunet-service-dns.c:603 | 2604 | #: src/dns/gnunet-service-dns.c:606 |
2589 | msgid "# DNS exit failed (failed to open socket)" | 2605 | msgid "# DNS exit failed (failed to open socket)" |
2590 | msgstr "" | 2606 | msgstr "" |
2591 | 2607 | ||
2592 | #: src/dns/gnunet-service-dns.c:714 | 2608 | #: src/dns/gnunet-service-dns.c:717 |
2593 | msgid "# External DNS response discarded (no matching request)" | 2609 | msgid "# External DNS response discarded (no matching request)" |
2594 | msgstr "" | 2610 | msgstr "" |
2595 | 2611 | ||
2596 | #: src/dns/gnunet-service-dns.c:792 | 2612 | #: src/dns/gnunet-service-dns.c:795 |
2597 | msgid "# Client response discarded (no matching request)" | 2613 | msgid "# Client response discarded (no matching request)" |
2598 | msgstr "" | 2614 | msgstr "" |
2599 | 2615 | ||
2600 | #: src/dns/gnunet-service-dns.c:907 | 2616 | #: src/dns/gnunet-service-dns.c:910 |
2601 | msgid "Received malformed IPv4-UDP packet on TUN interface.\n" | 2617 | msgid "Received malformed IPv4-UDP packet on TUN interface.\n" |
2602 | msgstr "" | 2618 | msgstr "" |
2603 | 2619 | ||
2604 | #: src/dns/gnunet-service-dns.c:923 | 2620 | #: src/dns/gnunet-service-dns.c:926 |
2605 | msgid "Received malformed IPv6-UDP packet on TUN interface.\n" | 2621 | msgid "Received malformed IPv6-UDP packet on TUN interface.\n" |
2606 | msgstr "" | 2622 | msgstr "" |
2607 | 2623 | ||
2608 | #: src/dns/gnunet-service-dns.c:932 | 2624 | #: src/dns/gnunet-service-dns.c:935 |
2609 | #, c-format | 2625 | #, c-format |
2610 | msgid "Got non-IP packet with %u bytes and protocol %u from TUN\n" | 2626 | msgid "Got non-IP packet with %u bytes and protocol %u from TUN\n" |
2611 | msgstr "" | 2627 | msgstr "" |
2612 | 2628 | ||
2613 | #: src/dns/gnunet-service-dns.c:942 | 2629 | #: src/dns/gnunet-service-dns.c:945 |
2614 | msgid "# Non-DNS UDP packet received via TUN interface" | 2630 | msgid "# Non-DNS UDP packet received via TUN interface" |
2615 | msgstr "" | 2631 | msgstr "" |
2616 | 2632 | ||
2617 | #: src/dns/gnunet-service-dns.c:1009 | 2633 | #: src/dns/gnunet-service-dns.c:1012 |
2618 | #, fuzzy | 2634 | #, fuzzy |
2619 | msgid "# DNS requests received via TUN interface" | 2635 | msgid "# DNS requests received via TUN interface" |
2620 | msgstr "# các đáp ứng lỗ hổng được gửi cho trình/máy khách" | 2636 | msgstr "# các đáp ứng lỗ hổng được gửi cho trình/máy khách" |
2621 | 2637 | ||
2622 | #: src/dns/gnunet-service-dns.c:1049 | 2638 | #: src/dns/gnunet-service-dns.c:1064 src/exit/gnunet-daemon-exit.c:3594 |
2623 | #, c-format | ||
2624 | msgid "`%s' must be installed SUID, refusing to run\n" | ||
2625 | msgstr "" | ||
2626 | |||
2627 | #: src/dns/gnunet-service-dns.c:1069 src/exit/gnunet-daemon-exit.c:3594 | ||
2628 | #, fuzzy | 2639 | #, fuzzy |
2629 | msgid "need a valid IPv4 or IPv6 address\n" | 2640 | msgid "need a valid IPv4 or IPv6 address\n" |
2630 | msgstr "Mức ưu tiên tiến trình không hợp lê « %s ».\n" | 2641 | msgstr "Mức ưu tiên tiến trình không hợp lê « %s ».\n" |
2631 | 2642 | ||
2643 | #: src/dns/gnunet-service-dns.c:1082 | ||
2644 | #, c-format | ||
2645 | msgid "`%s' must be installed SUID, will not run DNS interceptor\n" | ||
2646 | msgstr "" | ||
2647 | |||
2632 | #: src/dv/gnunet-dv.c:169 | 2648 | #: src/dv/gnunet-dv.c:169 |
2633 | msgid "verbose output" | 2649 | msgid "verbose output" |
2634 | msgstr "" | 2650 | msgstr "" |
@@ -2865,58 +2881,58 @@ msgstr "" | |||
2865 | msgid "Daemon to run to provide an IP exit node for the VPN" | 2881 | msgid "Daemon to run to provide an IP exit node for the VPN" |
2866 | msgstr "" | 2882 | msgstr "" |
2867 | 2883 | ||
2868 | #: src/fragmentation/defragmentation.c:271 | 2884 | #: src/fragmentation/defragmentation.c:277 |
2869 | msgid "# acknowledgements sent for fragment" | 2885 | msgid "# acknowledgements sent for fragment" |
2870 | msgstr "" | 2886 | msgstr "" |
2871 | 2887 | ||
2872 | #: src/fragmentation/defragmentation.c:463 | 2888 | #: src/fragmentation/defragmentation.c:470 |
2873 | #: src/transport/plugin_transport_wlan.c:1515 | 2889 | #: src/transport/plugin_transport_wlan.c:1515 |
2874 | #, fuzzy | 2890 | #, fuzzy |
2875 | msgid "# fragments received" | 2891 | msgid "# fragments received" |
2876 | msgstr "# các mảnh bị loại bỏ" | 2892 | msgstr "# các mảnh bị loại bỏ" |
2877 | 2893 | ||
2878 | #: src/fragmentation/defragmentation.c:533 | 2894 | #: src/fragmentation/defragmentation.c:540 |
2879 | #, fuzzy | 2895 | #, fuzzy |
2880 | msgid "# duplicate fragments received" | 2896 | msgid "# duplicate fragments received" |
2881 | msgstr "# các kết quả dht được nhận" | 2897 | msgstr "# các kết quả dht được nhận" |
2882 | 2898 | ||
2883 | #: src/fragmentation/defragmentation.c:549 | 2899 | #: src/fragmentation/defragmentation.c:558 |
2884 | msgid "# messages defragmented" | 2900 | msgid "# messages defragmented" |
2885 | msgstr "# các thông báo được chắp liền" | 2901 | msgstr "# các thông báo được chắp liền" |
2886 | 2902 | ||
2887 | #: src/fragmentation/fragmentation.c:234 | 2903 | #: src/fragmentation/fragmentation.c:235 |
2888 | #, fuzzy | 2904 | #, fuzzy |
2889 | msgid "# fragments transmitted" | 2905 | msgid "# fragments transmitted" |
2890 | msgstr "# Các tự quảng cáo được truyền" | 2906 | msgstr "# Các tự quảng cáo được truyền" |
2891 | 2907 | ||
2892 | #: src/fragmentation/fragmentation.c:237 | 2908 | #: src/fragmentation/fragmentation.c:240 |
2893 | #, fuzzy | 2909 | #, fuzzy |
2894 | msgid "# fragments retransmitted" | 2910 | msgid "# fragments retransmitted" |
2895 | msgstr "# Các tự quảng cáo được truyền" | 2911 | msgstr "# Các tự quảng cáo được truyền" |
2896 | 2912 | ||
2897 | #: src/fragmentation/fragmentation.c:263 | 2913 | #: src/fragmentation/fragmentation.c:269 |
2898 | #, fuzzy | 2914 | #, fuzzy |
2899 | msgid "# fragments wrap arounds" | 2915 | msgid "# fragments wrap arounds" |
2900 | msgstr "# Các tự quảng cáo được truyền" | 2916 | msgstr "# Các tự quảng cáo được truyền" |
2901 | 2917 | ||
2902 | #: src/fragmentation/fragmentation.c:307 | 2918 | #: src/fragmentation/fragmentation.c:315 |
2903 | msgid "# messages fragmented" | 2919 | msgid "# messages fragmented" |
2904 | msgstr "# các thông báo bị tế phân" | 2920 | msgstr "# các thông báo bị tế phân" |
2905 | 2921 | ||
2906 | #: src/fragmentation/fragmentation.c:310 | 2922 | #: src/fragmentation/fragmentation.c:321 |
2907 | msgid "# total size of fragmented messages" | 2923 | msgid "# total size of fragmented messages" |
2908 | msgstr "" | 2924 | msgstr "" |
2909 | 2925 | ||
2910 | #: src/fragmentation/fragmentation.c:431 | 2926 | #: src/fragmentation/fragmentation.c:444 |
2911 | #, fuzzy | 2927 | #, fuzzy |
2912 | msgid "# fragment acknowledgements received" | 2928 | msgid "# fragment acknowledgements received" |
2913 | msgstr "# Các quảng cáo đồng đẳng được nhận" | 2929 | msgstr "# Các quảng cáo đồng đẳng được nhận" |
2914 | 2930 | ||
2915 | #: src/fragmentation/fragmentation.c:437 | 2931 | #: src/fragmentation/fragmentation.c:451 |
2916 | msgid "# bits removed from fragmentation ACKs" | 2932 | msgid "# bits removed from fragmentation ACKs" |
2917 | msgstr "" | 2933 | msgstr "" |
2918 | 2934 | ||
2919 | #: src/fragmentation/fragmentation.c:461 | 2935 | #: src/fragmentation/fragmentation.c:475 |
2920 | #, fuzzy | 2936 | #, fuzzy |
2921 | msgid "# fragmentation transmissions completed" | 2937 | msgid "# fragmentation transmissions completed" |
2922 | msgstr "# các sự truyền PONG bị lỗi" | 2938 | msgstr "# các sự truyền PONG bị lỗi" |
@@ -3186,59 +3202,59 @@ msgstr "Tập tin « %s » có URI: %s\n" | |||
3186 | msgid "Got result with unknown block type `%d', ignoring" | 3202 | msgid "Got result with unknown block type `%d', ignoring" |
3187 | msgstr "" | 3203 | msgstr "" |
3188 | 3204 | ||
3189 | #: src/fs/fs_unindex.c:59 | 3205 | #: src/fs/fs_unindex.c:63 |
3190 | msgid "Failed to find given position in file" | 3206 | msgid "Failed to find given position in file" |
3191 | msgstr "" | 3207 | msgstr "" |
3192 | 3208 | ||
3193 | #: src/fs/fs_unindex.c:64 | 3209 | #: src/fs/fs_unindex.c:68 |
3194 | #, fuzzy | 3210 | #, fuzzy |
3195 | msgid "Failed to read file" | 3211 | msgid "Failed to read file" |
3196 | msgstr "Lỗi gửi tin nhẳn.\n" | 3212 | msgstr "Lỗi gửi tin nhẳn.\n" |
3197 | 3213 | ||
3198 | #: src/fs/fs_unindex.c:234 | 3214 | #: src/fs/fs_unindex.c:245 |
3199 | msgid "Unexpected time for a response from `fs' service." | 3215 | msgid "Unexpected time for a response from `fs' service." |
3200 | msgstr "" | 3216 | msgstr "" |
3201 | 3217 | ||
3202 | #: src/fs/fs_unindex.c:242 | 3218 | #: src/fs/fs_unindex.c:253 |
3203 | msgid "Timeout waiting for `fs' service." | 3219 | msgid "Timeout waiting for `fs' service." |
3204 | msgstr "" | 3220 | msgstr "" |
3205 | 3221 | ||
3206 | #: src/fs/fs_unindex.c:250 | 3222 | #: src/fs/fs_unindex.c:261 |
3207 | #, fuzzy | 3223 | #, fuzzy |
3208 | msgid "Invalid response from `fs' service." | 3224 | msgid "Invalid response from `fs' service." |
3209 | msgstr "Đối số không hợp lệ cho « %s ».\n" | 3225 | msgstr "Đối số không hợp lệ cho « %s ».\n" |
3210 | 3226 | ||
3211 | #: src/fs/fs_unindex.c:291 | 3227 | #: src/fs/fs_unindex.c:304 |
3212 | #, fuzzy | 3228 | #, fuzzy |
3213 | msgid "Failed to connect to FS service for unindexing." | 3229 | msgid "Failed to connect to FS service for unindexing." |
3214 | msgstr "Không kết nối được đến trình nền gnunetd." | 3230 | msgstr "Không kết nối được đến trình nền gnunetd." |
3215 | 3231 | ||
3216 | #: src/fs/fs_unindex.c:347 src/fs/fs_unindex.c:359 | 3232 | #: src/fs/fs_unindex.c:360 src/fs/fs_unindex.c:372 |
3217 | #, fuzzy | 3233 | #, fuzzy |
3218 | msgid "Failed to get KSKs from directory scan." | 3234 | msgid "Failed to get KSKs from directory scan." |
3219 | msgstr "Lỗi truy cập đến thư mục nhà GNUnet « %s »\n" | 3235 | msgstr "Lỗi truy cập đến thư mục nhà GNUnet « %s »\n" |
3220 | 3236 | ||
3221 | #: src/fs/fs_unindex.c:355 | 3237 | #: src/fs/fs_unindex.c:368 |
3222 | #, fuzzy, c-format | 3238 | #, fuzzy, c-format |
3223 | msgid "Internal error scanning `%s'.\n" | 3239 | msgid "Internal error scanning `%s'.\n" |
3224 | msgstr "=\tLỗi đọc thư mục.\n" | 3240 | msgstr "=\tLỗi đọc thư mục.\n" |
3225 | 3241 | ||
3226 | #: src/fs/fs_unindex.c:414 | 3242 | #: src/fs/fs_unindex.c:427 |
3227 | #, fuzzy, c-format | 3243 | #, fuzzy, c-format |
3228 | msgid "Failed to remove UBlock: %s\n" | 3244 | msgid "Failed to remove UBlock: %s\n" |
3229 | msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n" | 3245 | msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n" |
3230 | 3246 | ||
3231 | #: src/fs/fs_unindex.c:562 src/fs/fs_unindex.c:626 | 3247 | #: src/fs/fs_unindex.c:590 src/fs/fs_unindex.c:656 |
3232 | #, fuzzy | 3248 | #, fuzzy |
3233 | msgid "Failed to connect to `datastore' service." | 3249 | msgid "Failed to connect to `datastore' service." |
3234 | msgstr "Lỗi sơ khởi dịch vụ « %s ».\n" | 3250 | msgstr "Lỗi sơ khởi dịch vụ « %s ».\n" |
3235 | 3251 | ||
3236 | #: src/fs/fs_unindex.c:639 | 3252 | #: src/fs/fs_unindex.c:669 |
3237 | #, fuzzy | 3253 | #, fuzzy |
3238 | msgid "Failed to open file for unindexing." | 3254 | msgid "Failed to open file for unindexing." |
3239 | msgstr "Không kết nối được đến trình nền gnunetd." | 3255 | msgstr "Không kết nối được đến trình nền gnunetd." |
3240 | 3256 | ||
3241 | #: src/fs/fs_unindex.c:673 | 3257 | #: src/fs/fs_unindex.c:708 |
3242 | #, fuzzy | 3258 | #, fuzzy |
3243 | msgid "Failed to compute hash of file." | 3259 | msgid "Failed to compute hash of file." |
3244 | msgstr "Không kết nối được đến trình nền gnunetd." | 3260 | msgstr "Không kết nối được đến trình nền gnunetd." |
@@ -3837,101 +3853,101 @@ msgstr "# các kết nối dht" | |||
3837 | msgid "# cadet connections active" | 3853 | msgid "# cadet connections active" |
3838 | msgstr "# các kết nối dht" | 3854 | msgstr "# các kết nối dht" |
3839 | 3855 | ||
3840 | #: src/fs/gnunet-service-fs_cp.c:726 | 3856 | #: src/fs/gnunet-service-fs_cp.c:735 |
3841 | #, fuzzy | 3857 | #, fuzzy |
3842 | msgid "# migration stop messages received" | 3858 | msgid "# migration stop messages received" |
3843 | msgstr "# các thông báo phát hiện dht được nhận" | 3859 | msgstr "# các thông báo phát hiện dht được nhận" |
3844 | 3860 | ||
3845 | #: src/fs/gnunet-service-fs_cp.c:730 | 3861 | #: src/fs/gnunet-service-fs_cp.c:739 |
3846 | #, c-format | 3862 | #, c-format |
3847 | msgid "Migration of content to peer `%s' blocked for %s\n" | 3863 | msgid "Migration of content to peer `%s' blocked for %s\n" |
3848 | msgstr "" | 3864 | msgstr "" |
3849 | 3865 | ||
3850 | #: src/fs/gnunet-service-fs_cp.c:768 | 3866 | #: src/fs/gnunet-service-fs_cp.c:776 |
3851 | #, fuzzy | 3867 | #, fuzzy |
3852 | msgid "# replies transmitted to other peers" | 3868 | msgid "# replies transmitted to other peers" |
3853 | msgstr "# các byte kiểu %d được gửi " | 3869 | msgstr "# các byte kiểu %d được gửi " |
3854 | 3870 | ||
3855 | #: src/fs/gnunet-service-fs_cp.c:774 | 3871 | #: src/fs/gnunet-service-fs_cp.c:784 |
3856 | #, fuzzy | 3872 | #, fuzzy |
3857 | msgid "# replies dropped" | 3873 | msgid "# replies dropped" |
3858 | msgstr "# các đáp ứng dht được định tuyến" | 3874 | msgstr "# các đáp ứng dht được định tuyến" |
3859 | 3875 | ||
3860 | #: src/fs/gnunet-service-fs_cp.c:799 src/fs/gnunet-service-fs_cp.c:1384 | 3876 | #: src/fs/gnunet-service-fs_cp.c:810 src/fs/gnunet-service-fs_cp.c:1404 |
3861 | msgid "# P2P searches active" | 3877 | msgid "# P2P searches active" |
3862 | msgstr "" | 3878 | msgstr "" |
3863 | 3879 | ||
3864 | #: src/fs/gnunet-service-fs_cp.c:904 | 3880 | #: src/fs/gnunet-service-fs_cp.c:915 |
3865 | msgid "# artificial delays introduced (ms)" | 3881 | msgid "# artificial delays introduced (ms)" |
3866 | msgstr "" | 3882 | msgstr "" |
3867 | 3883 | ||
3868 | #: src/fs/gnunet-service-fs_cp.c:960 | 3884 | #: src/fs/gnunet-service-fs_cp.c:971 |
3869 | #, fuzzy | 3885 | #, fuzzy |
3870 | msgid "# replies dropped due to type mismatch" | 3886 | msgid "# replies dropped due to type mismatch" |
3871 | msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải" | 3887 | msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải" |
3872 | 3888 | ||
3873 | #: src/fs/gnunet-service-fs_cp.c:968 | 3889 | #: src/fs/gnunet-service-fs_cp.c:979 |
3874 | #, fuzzy | 3890 | #, fuzzy |
3875 | msgid "# replies received for other peers" | 3891 | msgid "# replies received for other peers" |
3876 | msgstr "# các byte kiểu %d được nhận" | 3892 | msgstr "# các byte kiểu %d được nhận" |
3877 | 3893 | ||
3878 | #: src/fs/gnunet-service-fs_cp.c:982 | 3894 | #: src/fs/gnunet-service-fs_cp.c:993 |
3879 | msgid "# replies dropped due to insufficient cover traffic" | 3895 | msgid "# replies dropped due to insufficient cover traffic" |
3880 | msgstr "" | 3896 | msgstr "" |
3881 | 3897 | ||
3882 | #: src/fs/gnunet-service-fs_cp.c:1030 | 3898 | #: src/fs/gnunet-service-fs_cp.c:1041 |
3883 | msgid "# P2P searches destroyed due to ultimate reply" | 3899 | msgid "# P2P searches destroyed due to ultimate reply" |
3884 | msgstr "" | 3900 | msgstr "" |
3885 | 3901 | ||
3886 | #: src/fs/gnunet-service-fs_cp.c:1098 | 3902 | #: src/fs/gnunet-service-fs_cp.c:1109 |
3887 | #, fuzzy | 3903 | #, fuzzy |
3888 | msgid "# requests done for free (low load)" | 3904 | msgid "# requests done for free (low load)" |
3889 | msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải" | 3905 | msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải" |
3890 | 3906 | ||
3891 | #: src/fs/gnunet-service-fs_cp.c:1123 | 3907 | #: src/fs/gnunet-service-fs_cp.c:1134 |
3892 | msgid "# request dropped, priority insufficient" | 3908 | msgid "# request dropped, priority insufficient" |
3893 | msgstr "" | 3909 | msgstr "" |
3894 | 3910 | ||
3895 | #: src/fs/gnunet-service-fs_cp.c:1133 | 3911 | #: src/fs/gnunet-service-fs_cp.c:1144 |
3896 | #, fuzzy | 3912 | #, fuzzy |
3897 | msgid "# requests done for a price (normal load)" | 3913 | msgid "# requests done for a price (normal load)" |
3898 | msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải" | 3914 | msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải" |
3899 | 3915 | ||
3900 | #: src/fs/gnunet-service-fs_cp.c:1210 | 3916 | #: src/fs/gnunet-service-fs_cp.c:1221 |
3901 | msgid "# GET requests received (from other peers)" | 3917 | msgid "# GET requests received (from other peers)" |
3902 | msgstr "" | 3918 | msgstr "" |
3903 | 3919 | ||
3904 | #: src/fs/gnunet-service-fs_cp.c:1245 | 3920 | #: src/fs/gnunet-service-fs_cp.c:1256 |
3905 | #, fuzzy | 3921 | #, fuzzy |
3906 | msgid "# requests dropped due to initiator not being connected" | 3922 | msgid "# requests dropped due to initiator not being connected" |
3907 | msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải" | 3923 | msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải" |
3908 | 3924 | ||
3909 | #: src/fs/gnunet-service-fs_cp.c:1266 | 3925 | #: src/fs/gnunet-service-fs_cp.c:1277 |
3910 | #, fuzzy | 3926 | #, fuzzy |
3911 | msgid "# requests dropped due to missing reverse route" | 3927 | msgid "# requests dropped due to missing reverse route" |
3912 | msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải" | 3928 | msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải" |
3913 | 3929 | ||
3914 | #: src/fs/gnunet-service-fs_cp.c:1277 | 3930 | #: src/fs/gnunet-service-fs_cp.c:1288 |
3915 | #, fuzzy | 3931 | #, fuzzy |
3916 | msgid "# requests dropped due to full reply queue" | 3932 | msgid "# requests dropped due to full reply queue" |
3917 | msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải" | 3933 | msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải" |
3918 | 3934 | ||
3919 | #: src/fs/gnunet-service-fs_cp.c:1329 | 3935 | #: src/fs/gnunet-service-fs_cp.c:1340 |
3920 | #, fuzzy | 3936 | #, fuzzy |
3921 | msgid "# requests dropped due TTL underflow" | 3937 | msgid "# requests dropped due TTL underflow" |
3922 | msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải" | 3938 | msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải" |
3923 | 3939 | ||
3924 | #: src/fs/gnunet-service-fs_cp.c:1353 | 3940 | #: src/fs/gnunet-service-fs_cp.c:1365 |
3925 | #, fuzzy | 3941 | #, fuzzy |
3926 | msgid "# requests dropped due to higher-TTL request" | 3942 | msgid "# requests dropped due to higher-TTL request" |
3927 | msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải" | 3943 | msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải" |
3928 | 3944 | ||
3929 | #: src/fs/gnunet-service-fs_cp.c:1382 | 3945 | #: src/fs/gnunet-service-fs_cp.c:1402 |
3930 | #, fuzzy | 3946 | #, fuzzy |
3931 | msgid "# P2P query messages received and processed" | 3947 | msgid "# P2P query messages received and processed" |
3932 | msgstr "# các thông báo phát hiện dht được nhận" | 3948 | msgstr "# các thông báo phát hiện dht được nhận" |
3933 | 3949 | ||
3934 | #: src/fs/gnunet-service-fs_cp.c:1821 | 3950 | #: src/fs/gnunet-service-fs_cp.c:1841 |
3935 | #, fuzzy | 3951 | #, fuzzy |
3936 | msgid "# migration stop messages sent" | 3952 | msgid "# migration stop messages sent" |
3937 | msgstr "# các thông báo phát hiện dht được nhận" | 3953 | msgstr "# các thông báo phát hiện dht được nhận" |
@@ -4280,7 +4296,7 @@ msgstr "" | |||
4280 | msgid "GNUnet DNS-to-GNS proxy (a DNS server)" | 4296 | msgid "GNUnet DNS-to-GNS proxy (a DNS server)" |
4281 | msgstr "" | 4297 | msgstr "" |
4282 | 4298 | ||
4283 | #: src/gns/gnunet-gns.c:215 | 4299 | #: src/gns/gnunet-gns.c:215 src/gns/plugin_rest_gns.c:334 |
4284 | #, c-format | 4300 | #, c-format |
4285 | msgid "Invalid typename specified, assuming `ANY'\n" | 4301 | msgid "Invalid typename specified, assuming `ANY'\n" |
4286 | msgstr "" | 4302 | msgstr "" |
@@ -4296,6 +4312,7 @@ msgid "Ego for `%s' not found, cannot perform lookup.\n" | |||
4296 | msgstr "" | 4312 | msgstr "" |
4297 | 4313 | ||
4298 | #: src/gns/gnunet-gns.c:353 src/gns/gnunet-gns-helper-service-w32.c:798 | 4314 | #: src/gns/gnunet-gns.c:353 src/gns/gnunet-gns-helper-service-w32.c:798 |
4315 | #: src/gns/plugin_rest_gns.c:459 | ||
4299 | #, c-format | 4316 | #, c-format |
4300 | msgid "" | 4317 | msgid "" |
4301 | "Ego for `gns-master' not found, cannot perform lookup. Did you run gnunet-" | 4318 | "Ego for `gns-master' not found, cannot perform lookup. Did you run gnunet-" |
@@ -4437,7 +4454,7 @@ msgstr "Không thể lưu tập tin cấu hình « %s »:" | |||
4437 | msgid "Failed to start HTTPS server for `%s'\n" | 4454 | msgid "Failed to start HTTPS server for `%s'\n" |
4438 | msgstr "Lỗi bắt đầu thu thập.\n" | 4455 | msgstr "Lỗi bắt đầu thu thập.\n" |
4439 | 4456 | ||
4440 | #: src/gns/gnunet-gns-proxy.c:2225 | 4457 | #: src/gns/gnunet-gns-proxy.c:2225 src/rest/gnunet-rest-server.c:529 |
4441 | #, fuzzy | 4458 | #, fuzzy |
4442 | msgid "Failed to pass client to MHD\n" | 4459 | msgid "Failed to pass client to MHD\n" |
4443 | msgstr "Lỗi kết nối đến gnunetd.\n" | 4460 | msgstr "Lỗi kết nối đến gnunetd.\n" |
@@ -4542,21 +4559,21 @@ msgstr "" | |||
4542 | msgid "GNS lookup resulted in DNS name that is too long (`%s')\n" | 4559 | msgid "GNS lookup resulted in DNS name that is too long (`%s')\n" |
4543 | msgstr "" | 4560 | msgstr "" |
4544 | 4561 | ||
4545 | #: src/gns/gnunet-service-gns_resolver.c:1886 | 4562 | #: src/gns/gnunet-service-gns_resolver.c:1891 |
4546 | msgid "GNS lookup recursion failed (no delegation record found)\n" | 4563 | msgid "GNS lookup recursion failed (no delegation record found)\n" |
4547 | msgstr "" | 4564 | msgstr "" |
4548 | 4565 | ||
4549 | #: src/gns/gnunet-service-gns_resolver.c:1910 | 4566 | #: src/gns/gnunet-service-gns_resolver.c:1915 |
4550 | #, fuzzy, c-format | 4567 | #, fuzzy, c-format |
4551 | msgid "Failed to cache GNS resolution: %s\n" | 4568 | msgid "Failed to cache GNS resolution: %s\n" |
4552 | msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n" | 4569 | msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n" |
4553 | 4570 | ||
4554 | #: src/gns/gnunet-service-gns_resolver.c:2192 | 4571 | #: src/gns/gnunet-service-gns_resolver.c:2197 |
4555 | #, c-format | 4572 | #, c-format |
4556 | msgid "Zone %s was revoked, resolution fails\n" | 4573 | msgid "Zone %s was revoked, resolution fails\n" |
4557 | msgstr "" | 4574 | msgstr "" |
4558 | 4575 | ||
4559 | #: src/gns/gnunet-service-gns_resolver.c:2341 | 4576 | #: src/gns/gnunet-service-gns_resolver.c:2346 |
4560 | #, c-format | 4577 | #, c-format |
4561 | msgid "Hostname `%s' is not well-formed, resolution fails\n" | 4578 | msgid "Hostname `%s' is not well-formed, resolution fails\n" |
4562 | msgstr "" | 4579 | msgstr "" |
@@ -4586,6 +4603,15 @@ msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" | |||
4586 | msgid "Unable to parse BOX record string `%s'\n" | 4603 | msgid "Unable to parse BOX record string `%s'\n" |
4587 | msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" | 4604 | msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" |
4588 | 4605 | ||
4606 | #: src/gns/plugin_rest_gns.c:422 | ||
4607 | msgid "Ego for not found, cannot perform lookup.\n" | ||
4608 | msgstr "" | ||
4609 | |||
4610 | #: src/gns/plugin_rest_gns.c:652 | ||
4611 | #, fuzzy | ||
4612 | msgid "GNS REST API initialized\n" | ||
4613 | msgstr "Lỗi sơ khởi lõi.\n" | ||
4614 | |||
4589 | #: src/gnsrecord/plugin_gnsrecord_dns.c:291 | 4615 | #: src/gnsrecord/plugin_gnsrecord_dns.c:291 |
4590 | #, fuzzy, c-format | 4616 | #, fuzzy, c-format |
4591 | msgid "Unable to parse IPv4 address `%s'\n" | 4617 | msgid "Unable to parse IPv4 address `%s'\n" |
@@ -5120,6 +5146,11 @@ msgstr "Không thể lưu tập tin cấu hình « %s »:" | |||
5120 | msgid "Failed to create directory `%s' for storing egos\n" | 5146 | msgid "Failed to create directory `%s' for storing egos\n" |
5121 | msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" | 5147 | msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" |
5122 | 5148 | ||
5149 | #: src/identity/plugin_rest_identity.c:803 | ||
5150 | #, fuzzy | ||
5151 | msgid "Identity REST API initialized\n" | ||
5152 | msgstr "Lỗi sơ khởi lõi.\n" | ||
5153 | |||
5123 | #: src/mysql/mysql.c:174 | 5154 | #: src/mysql/mysql.c:174 |
5124 | #, c-format | 5155 | #, c-format |
5125 | msgid "Trying to use file `%s' for MySQL configuration.\n" | 5156 | msgid "Trying to use file `%s' for MySQL configuration.\n" |
@@ -5145,9 +5176,9 @@ msgstr "" | |||
5145 | msgid "You must specify which zone should be accessed\n" | 5176 | msgid "You must specify which zone should be accessed\n" |
5146 | msgstr "chỉ ra TRUYỀN_TẢI nào cần được thử nghiệm" | 5177 | msgstr "chỉ ra TRUYỀN_TẢI nào cần được thử nghiệm" |
5147 | 5178 | ||
5148 | #: src/namecache/gnunet-namecache.c:195 src/namestore/gnunet-namestore.c:844 | 5179 | #: src/namecache/gnunet-namecache.c:195 |
5149 | #, fuzzy, c-format | 5180 | #, fuzzy, c-format |
5150 | msgid "Invalid public key for reverse lookup `%s'\n" | 5181 | msgid "Invalid public key for zone `%s'\n" |
5151 | msgstr "Đối số không hợp lệ cho « %s ».\n" | 5182 | msgstr "Đối số không hợp lệ cho « %s ».\n" |
5152 | 5183 | ||
5153 | #: src/namecache/gnunet-namecache.c:203 | 5184 | #: src/namecache/gnunet-namecache.c:203 |
@@ -5185,11 +5216,13 @@ msgid "Adding record failed: %s\n" | |||
5185 | msgstr "Gặp lỗi khi tải lên tập tin: %s\n" | 5216 | msgstr "Gặp lỗi khi tải lên tập tin: %s\n" |
5186 | 5217 | ||
5187 | #: src/namestore/gnunet-namestore.c:332 | 5218 | #: src/namestore/gnunet-namestore.c:332 |
5219 | #: src/namestore/plugin_rest_namestore.c:505 | ||
5188 | #, fuzzy, c-format | 5220 | #, fuzzy, c-format |
5189 | msgid "Deleting record failed, record does not exist%s%s\n" | 5221 | msgid "Deleting record failed, record does not exist%s%s\n" |
5190 | msgstr "Gặp lỗi khi tải lên tập tin: %s\n" | 5222 | msgstr "Gặp lỗi khi tải lên tập tin: %s\n" |
5191 | 5223 | ||
5192 | #: src/namestore/gnunet-namestore.c:339 | 5224 | #: src/namestore/gnunet-namestore.c:339 |
5225 | #: src/namestore/plugin_rest_namestore.c:514 | ||
5193 | #, fuzzy, c-format | 5226 | #, fuzzy, c-format |
5194 | msgid "Deleting record failed%s%s\n" | 5227 | msgid "Deleting record failed%s%s\n" |
5195 | msgstr "Gặp lỗi khi tải lên tập tin: %s\n" | 5228 | msgstr "Gặp lỗi khi tải lên tập tin: %s\n" |
@@ -5207,6 +5240,7 @@ msgid "Records already exist under `%s', cannot add `%s' record.\n" | |||
5207 | msgstr "" | 5240 | msgstr "" |
5208 | 5241 | ||
5209 | #: src/namestore/gnunet-namestore.c:628 | 5242 | #: src/namestore/gnunet-namestore.c:628 |
5243 | #: src/namestore/plugin_rest_namestore.c:538 | ||
5210 | #, c-format | 5244 | #, c-format |
5211 | msgid "There are no records under label `%s' that could be deleted.\n" | 5245 | msgid "There are no records under label `%s' that could be deleted.\n" |
5212 | msgstr "" | 5246 | msgstr "" |
@@ -5224,6 +5258,7 @@ msgstr "chưa đưa ra tên" | |||
5224 | 5258 | ||
5225 | #: src/namestore/gnunet-namestore.c:719 | 5259 | #: src/namestore/gnunet-namestore.c:719 |
5226 | #: src/namestore/gnunet-namestore-fcfsd.c:984 | 5260 | #: src/namestore/gnunet-namestore-fcfsd.c:984 |
5261 | #: src/namestore/plugin_rest_namestore.c:821 | ||
5227 | #, fuzzy | 5262 | #, fuzzy |
5228 | msgid "Failed to connect to namestore\n" | 5263 | msgid "Failed to connect to namestore\n" |
5229 | msgstr "Không kết nối được đến trình nền gnunetd." | 5264 | msgstr "Không kết nối được đến trình nền gnunetd." |
@@ -5241,11 +5276,14 @@ msgid "add" | |||
5241 | msgstr "" | 5276 | msgstr "" |
5242 | 5277 | ||
5243 | #: src/namestore/gnunet-namestore.c:745 | 5278 | #: src/namestore/gnunet-namestore.c:745 |
5279 | #: src/namestore/plugin_rest_namestore.c:608 | ||
5244 | #, fuzzy, c-format | 5280 | #, fuzzy, c-format |
5245 | msgid "Unsupported type `%s'\n" | 5281 | msgid "Unsupported type `%s'\n" |
5246 | msgstr "Lệnh không được hỗ trợ « %s ». Đang hủy bỏ.\n" | 5282 | msgstr "Lệnh không được hỗ trợ « %s ». Đang hủy bỏ.\n" |
5247 | 5283 | ||
5248 | #: src/namestore/gnunet-namestore.c:765 | 5284 | #: src/namestore/gnunet-namestore.c:765 |
5285 | #: src/namestore/plugin_rest_namestore.c:626 | ||
5286 | #: src/namestore/plugin_rest_namestore.c:666 | ||
5249 | #, c-format | 5287 | #, c-format |
5250 | msgid "Value `%s' invalid for record type `%s'\n" | 5288 | msgid "Value `%s' invalid for record type `%s'\n" |
5251 | msgstr "" | 5289 | msgstr "" |
@@ -5259,6 +5297,11 @@ msgstr "Địa chỉ IP định dạng sai: %s\n" | |||
5259 | msgid "del" | 5297 | msgid "del" |
5260 | msgstr "" | 5298 | msgstr "" |
5261 | 5299 | ||
5300 | #: src/namestore/gnunet-namestore.c:844 | ||
5301 | #, fuzzy, c-format | ||
5302 | msgid "Invalid public key for reverse lookup `%s'\n" | ||
5303 | msgstr "Đối số không hợp lệ cho « %s ».\n" | ||
5304 | |||
5262 | #: src/namestore/gnunet-namestore.c:868 | 5305 | #: src/namestore/gnunet-namestore.c:868 |
5263 | #: src/peerinfo-tool/gnunet-peerinfo.c:817 | 5306 | #: src/peerinfo-tool/gnunet-peerinfo.c:817 |
5264 | #, fuzzy, c-format | 5307 | #, fuzzy, c-format |
@@ -5271,21 +5314,25 @@ msgid "Invalid nick `%s'\n" | |||
5271 | msgstr "Dữ liệu nhập không hợp lệ.\n" | 5314 | msgstr "Dữ liệu nhập không hợp lệ.\n" |
5272 | 5315 | ||
5273 | #: src/namestore/gnunet-namestore.c:943 | 5316 | #: src/namestore/gnunet-namestore.c:943 |
5317 | #: src/namestore/plugin_rest_namestore.c:851 | ||
5274 | #, c-format | 5318 | #, c-format |
5275 | msgid "Ego `%s' not known to identity service\n" | 5319 | msgid "Ego `%s' not known to identity service\n" |
5276 | msgstr "" | 5320 | msgstr "" |
5277 | 5321 | ||
5278 | #: src/namestore/gnunet-namestore.c:970 | 5322 | #: src/namestore/gnunet-namestore.c:970 |
5323 | #: src/namestore/plugin_rest_namestore.c:878 | ||
5279 | #, c-format | 5324 | #, c-format |
5280 | msgid "No default ego configured in identity service\n" | 5325 | msgid "No default ego configured in identity service\n" |
5281 | msgstr "" | 5326 | msgstr "" |
5282 | 5327 | ||
5283 | #: src/namestore/gnunet-namestore.c:1006 | 5328 | #: src/namestore/gnunet-namestore.c:1006 |
5329 | #: src/namestore/plugin_rest_namestore.c:917 | ||
5284 | #, fuzzy, c-format | 5330 | #, fuzzy, c-format |
5285 | msgid "Identity service is not running\n" | 5331 | msgid "Identity service is not running\n" |
5286 | msgstr "« %s » không phải là một tập tin.\n" | 5332 | msgstr "« %s » không phải là một tập tin.\n" |
5287 | 5333 | ||
5288 | #: src/namestore/gnunet-namestore.c:1018 | 5334 | #: src/namestore/gnunet-namestore.c:1018 |
5335 | #: src/namestore/plugin_rest_namestore.c:946 | ||
5289 | #, fuzzy, c-format | 5336 | #, fuzzy, c-format |
5290 | msgid "Cannot connect to identity service\n" | 5337 | msgid "Cannot connect to identity service\n" |
5291 | msgstr "Không thể kết nối tới %s:%u: %s\n" | 5338 | msgstr "Không thể kết nối tới %s:%u: %s\n" |
@@ -5417,6 +5464,11 @@ msgstr "Lỗi cập nhật dữ liệu cho mô-đun « %s »\n" | |||
5417 | msgid "Namestore failed to store record\n" | 5464 | msgid "Namestore failed to store record\n" |
5418 | msgstr "" | 5465 | msgstr "" |
5419 | 5466 | ||
5467 | #: src/namestore/plugin_rest_namestore.c:1023 | ||
5468 | #, fuzzy | ||
5469 | msgid "Namestore REST API initialized\n" | ||
5470 | msgstr "Lỗi sơ khởi lõi.\n" | ||
5471 | |||
5420 | #: src/nat/gnunet-nat-server.c:279 | 5472 | #: src/nat/gnunet-nat-server.c:279 |
5421 | #, c-format | 5473 | #, c-format |
5422 | msgid "Please pass valid port number as the first argument! (got `%s')\n" | 5474 | msgid "Please pass valid port number as the first argument! (got `%s')\n" |
@@ -5665,7 +5717,7 @@ msgid "Measure quality and performance of the NSE service." | |||
5665 | msgstr "Không thể truy cập đến dịch vụ" | 5717 | msgstr "Không thể truy cập đến dịch vụ" |
5666 | 5718 | ||
5667 | #: src/nse/gnunet-service-nse.c:1537 | 5719 | #: src/nse/gnunet-service-nse.c:1537 |
5668 | #: src/revocation/gnunet-service-revocation.c:815 src/util/gnunet-scrypt.c:260 | 5720 | #: src/revocation/gnunet-service-revocation.c:827 src/util/gnunet-scrypt.c:260 |
5669 | #, fuzzy | 5721 | #, fuzzy |
5670 | msgid "Value is too large.\n" | 5722 | msgid "Value is too large.\n" |
5671 | msgstr "Giá trị không nằm trong phạm vi được phép." | 5723 | msgstr "Giá trị không nằm trong phạm vi được phép." |
@@ -6214,6 +6266,15 @@ msgstr "" | |||
6214 | msgid "Regex `%s' is too long!\n" | 6266 | msgid "Regex `%s' is too long!\n" |
6215 | msgstr "« %s » không phải là một tập tin.\n" | 6267 | msgstr "« %s » không phải là một tập tin.\n" |
6216 | 6268 | ||
6269 | #: src/rest/gnunet-rest-server.c:766 | ||
6270 | msgid "listen on specified port (default: 7776)" | ||
6271 | msgstr "" | ||
6272 | |||
6273 | #: src/rest/gnunet-rest-server.c:783 | ||
6274 | #, fuzzy | ||
6275 | msgid "GNUnet REST server" | ||
6276 | msgstr "Bản ghi lỗi GNUnet" | ||
6277 | |||
6217 | #: src/revocation/gnunet-revocation.c:126 | 6278 | #: src/revocation/gnunet-revocation.c:126 |
6218 | #, fuzzy, c-format | 6279 | #, fuzzy, c-format |
6219 | msgid "Key `%s' is valid\n" | 6280 | msgid "Key `%s' is valid\n" |
@@ -6344,11 +6405,11 @@ msgid "# revocation set unions completed" | |||
6344 | msgstr "# các sự truyền PONG bị lỗi" | 6405 | msgstr "# các sự truyền PONG bị lỗi" |
6345 | 6406 | ||
6346 | #: src/revocation/gnunet-service-revocation.c:493 | 6407 | #: src/revocation/gnunet-service-revocation.c:493 |
6347 | #: src/revocation/gnunet-service-revocation.c:747 | 6408 | #: src/revocation/gnunet-service-revocation.c:759 |
6348 | msgid "SET service crashed, terminating revocation service\n" | 6409 | msgid "SET service crashed, terminating revocation service\n" |
6349 | msgstr "" | 6410 | msgstr "" |
6350 | 6411 | ||
6351 | #: src/revocation/gnunet-service-revocation.c:839 | 6412 | #: src/revocation/gnunet-service-revocation.c:851 |
6352 | #, fuzzy | 6413 | #, fuzzy |
6353 | msgid "Could not open revocation database file!" | 6414 | msgid "Could not open revocation database file!" |
6354 | msgstr "« %s »: Không thể kết nối.\n" | 6415 | msgstr "« %s »: Không thể kết nối.\n" |
@@ -8095,7 +8156,7 @@ msgid "Found %u addresses to report to NAT service\n" | |||
8095 | msgstr "" | 8156 | msgstr "" |
8096 | 8157 | ||
8097 | #: src/transport/plugin_transport_http_server.c:2825 | 8158 | #: src/transport/plugin_transport_http_server.c:2825 |
8098 | #: src/transport/plugin_transport_udp.c:3336 | 8159 | #: src/transport/plugin_transport_udp.c:3335 |
8099 | msgid "Disabling IPv6 since it is not supported on this system!\n" | 8160 | msgid "Disabling IPv6 since it is not supported on this system!\n" |
8100 | msgstr "" | 8161 | msgstr "" |
8101 | 8162 | ||
@@ -8329,50 +8390,50 @@ msgstr "" | |||
8329 | msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" | 8390 | msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" |
8330 | msgstr "" | 8391 | msgstr "" |
8331 | 8392 | ||
8332 | #: src/transport/plugin_transport_udp.c:3082 | 8393 | #: src/transport/plugin_transport_udp.c:3081 |
8333 | #, c-format | 8394 | #, c-format |
8334 | msgid "" | 8395 | msgid "" |
8335 | "UDP could not transmit message to `%s': Network seems down, please check " | 8396 | "UDP could not transmit message to `%s': Network seems down, please check " |
8336 | "your network configuration\n" | 8397 | "your network configuration\n" |
8337 | msgstr "" | 8398 | msgstr "" |
8338 | 8399 | ||
8339 | #: src/transport/plugin_transport_udp.c:3096 | 8400 | #: src/transport/plugin_transport_udp.c:3095 |
8340 | msgid "" | 8401 | msgid "" |
8341 | "UDP could not transmit IPv6 message! Please check your network configuration " | 8402 | "UDP could not transmit IPv6 message! Please check your network configuration " |
8342 | "and disable IPv6 if your connection does not have a global IPv6 address\n" | 8403 | "and disable IPv6 if your connection does not have a global IPv6 address\n" |
8343 | msgstr "" | 8404 | msgstr "" |
8344 | 8405 | ||
8345 | #: src/transport/plugin_transport_udp.c:3412 | 8406 | #: src/transport/plugin_transport_udp.c:3411 |
8346 | #: src/transport/plugin_transport_udp.c:3511 | 8407 | #: src/transport/plugin_transport_udp.c:3510 |
8347 | #, fuzzy, c-format | 8408 | #, fuzzy, c-format |
8348 | msgid "Failed to bind UDP socket to %s: %s\n" | 8409 | msgid "Failed to bind UDP socket to %s: %s\n" |
8349 | msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n" | 8410 | msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n" |
8350 | 8411 | ||
8351 | #: src/transport/plugin_transport_udp.c:3430 | 8412 | #: src/transport/plugin_transport_udp.c:3429 |
8352 | msgid "Disabling IPv4 since it is not supported on this system!\n" | 8413 | msgid "Disabling IPv4 since it is not supported on this system!\n" |
8353 | msgstr "" | 8414 | msgstr "" |
8354 | 8415 | ||
8355 | #: src/transport/plugin_transport_udp.c:3521 | 8416 | #: src/transport/plugin_transport_udp.c:3520 |
8356 | #, fuzzy | 8417 | #, fuzzy |
8357 | msgid "Failed to open UDP sockets\n" | 8418 | msgid "Failed to open UDP sockets\n" |
8358 | msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n" | 8419 | msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n" |
8359 | 8420 | ||
8360 | #: src/transport/plugin_transport_udp.c:3592 | 8421 | #: src/transport/plugin_transport_udp.c:3591 |
8361 | #: src/transport/plugin_transport_udp.c:3606 | 8422 | #: src/transport/plugin_transport_udp.c:3605 |
8362 | msgid "must be in [0,65535]" | 8423 | msgid "must be in [0,65535]" |
8363 | msgstr "" | 8424 | msgstr "" |
8364 | 8425 | ||
8365 | #: src/transport/plugin_transport_udp.c:3638 | 8426 | #: src/transport/plugin_transport_udp.c:3637 |
8366 | #, fuzzy | 8427 | #, fuzzy |
8367 | msgid "must be valid IPv4 address" | 8428 | msgid "must be valid IPv4 address" |
8368 | msgstr "« %s » không sẵn sàng.\n" | 8429 | msgstr "« %s » không sẵn sàng.\n" |
8369 | 8430 | ||
8370 | #: src/transport/plugin_transport_udp.c:3665 | 8431 | #: src/transport/plugin_transport_udp.c:3664 |
8371 | #, fuzzy | 8432 | #, fuzzy |
8372 | msgid "must be valid IPv6 address" | 8433 | msgid "must be valid IPv6 address" |
8373 | msgstr "« %s » không sẵn sàng.\n" | 8434 | msgstr "« %s » không sẵn sàng.\n" |
8374 | 8435 | ||
8375 | #: src/transport/plugin_transport_udp.c:3731 | 8436 | #: src/transport/plugin_transport_udp.c:3730 |
8376 | #, fuzzy | 8437 | #, fuzzy |
8377 | msgid "Failed to create UDP network sockets\n" | 8438 | msgid "Failed to create UDP network sockets\n" |
8378 | msgstr "Không thể tạo miền tên.\n" | 8439 | msgstr "Không thể tạo miền tên.\n" |
@@ -8595,7 +8656,7 @@ msgstr "" | |||
8595 | msgid "Syntax error while deserializing in line %u\n" | 8656 | msgid "Syntax error while deserializing in line %u\n" |
8596 | msgstr "Gặp lỗi cú pháp trong tập tin cấu hình « %s » tại dòng %d.\n" | 8657 | msgstr "Gặp lỗi cú pháp trong tập tin cấu hình « %s » tại dòng %d.\n" |
8597 | 8658 | ||
8598 | #: src/util/configuration.c:1026 | 8659 | #: src/util/configuration.c:1025 |
8599 | #, c-format | 8660 | #, c-format |
8600 | msgid "" | 8661 | msgid "" |
8601 | "Configuration value '%s' for '%s' in section '%s' is not in set of legal " | 8662 | "Configuration value '%s' for '%s' in section '%s' is not in set of legal " |
@@ -8604,17 +8665,17 @@ msgstr "" | |||
8604 | "Giá trị cấu hình « %s » cho « %s » trong phần « %s » không phải nằm trong " | 8665 | "Giá trị cấu hình « %s » cho « %s » trong phần « %s » không phải nằm trong " |
8605 | "tập hợp các sự chọn được phép\n" | 8666 | "tập hợp các sự chọn được phép\n" |
8606 | 8667 | ||
8607 | #: src/util/configuration.c:1145 | 8668 | #: src/util/configuration.c:1144 |
8608 | #, c-format | 8669 | #, c-format |
8609 | msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n" | 8670 | msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n" |
8610 | msgstr "" | 8671 | msgstr "" |
8611 | 8672 | ||
8612 | #: src/util/configuration.c:1177 | 8673 | #: src/util/configuration.c:1176 |
8613 | #, fuzzy, c-format | 8674 | #, fuzzy, c-format |
8614 | msgid "Missing closing `%s' in option `%s'\n" | 8675 | msgid "Missing closing `%s' in option `%s'\n" |
8615 | msgstr "Giá trị cấu hình « %s » cho « %s » trong phần « %s » nên là con số\n" | 8676 | msgstr "Giá trị cấu hình « %s » cho « %s » trong phần « %s » nên là con số\n" |
8616 | 8677 | ||
8617 | #: src/util/configuration.c:1251 | 8678 | #: src/util/configuration.c:1250 |
8618 | #, c-format | 8679 | #, c-format |
8619 | msgid "" | 8680 | msgid "" |
8620 | "Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined " | 8681 | "Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined " |
@@ -8638,52 +8699,52 @@ msgid "" | |||
8638 | "%llu)\n" | 8699 | "%llu)\n" |
8639 | msgstr "" | 8700 | msgstr "" |
8640 | 8701 | ||
8641 | #: src/util/crypto_ecc.c:731 src/util/crypto_ecc.c:769 | 8702 | #: src/util/crypto_ecc.c:733 src/util/crypto_ecc.c:771 |
8642 | #: src/util/crypto_ecc.c:887 src/util/crypto_ecc.c:925 | 8703 | #: src/util/crypto_ecc.c:889 src/util/crypto_ecc.c:927 |
8643 | #, fuzzy, c-format | 8704 | #, fuzzy, c-format |
8644 | msgid "Could not acquire lock on file `%s': %s...\n" | 8705 | msgid "Could not acquire lock on file `%s': %s...\n" |
8645 | msgstr "Lỗi mở tập tin theo dõi « %s »: %s\n" | 8706 | msgstr "Lỗi mở tập tin theo dõi « %s »: %s\n" |
8646 | 8707 | ||
8647 | #: src/util/crypto_ecc.c:736 src/util/crypto_ecc.c:892 | 8708 | #: src/util/crypto_ecc.c:738 src/util/crypto_ecc.c:894 |
8648 | #, fuzzy | 8709 | #, fuzzy |
8649 | msgid "Creating a new private key. This may take a while.\n" | 8710 | msgid "Creating a new private key. This may take a while.\n" |
8650 | msgstr "Đang tạo khoá máy mới (có thể hơi lâu).\n" | 8711 | msgstr "Đang tạo khoá máy mới (có thể hơi lâu).\n" |
8651 | 8712 | ||
8652 | #: src/util/crypto_ecc.c:773 src/util/crypto_ecc.c:929 | 8713 | #: src/util/crypto_ecc.c:775 src/util/crypto_ecc.c:931 |
8653 | msgid "This may be ok if someone is currently generating a private key.\n" | 8714 | msgid "This may be ok if someone is currently generating a private key.\n" |
8654 | msgstr "" | 8715 | msgstr "" |
8655 | 8716 | ||
8656 | #: src/util/crypto_ecc.c:803 src/util/crypto_ecc.c:959 | 8717 | #: src/util/crypto_ecc.c:805 src/util/crypto_ecc.c:961 |
8657 | #, c-format | 8718 | #, c-format |
8658 | msgid "" | 8719 | msgid "" |
8659 | "When trying to read key file `%s' I found %u bytes but I need at least %u.\n" | 8720 | "When trying to read key file `%s' I found %u bytes but I need at least %u.\n" |
8660 | msgstr "" | 8721 | msgstr "" |
8661 | 8722 | ||
8662 | #: src/util/crypto_ecc.c:807 src/util/crypto_ecc.c:963 | 8723 | #: src/util/crypto_ecc.c:809 src/util/crypto_ecc.c:965 |
8663 | msgid "This may be ok if someone is currently generating a key.\n" | 8724 | msgid "This may be ok if someone is currently generating a key.\n" |
8664 | msgstr "" | 8725 | msgstr "" |
8665 | 8726 | ||
8666 | #: src/util/crypto_ecc.c:1045 | 8727 | #: src/util/crypto_ecc.c:1047 |
8667 | #, fuzzy | 8728 | #, fuzzy |
8668 | msgid "Could not load peer's private key\n" | 8729 | msgid "Could not load peer's private key\n" |
8669 | msgstr "Không thể truy cập đến tập tin gnunet-directory « %s »\n" | 8730 | msgstr "Không thể truy cập đến tập tin gnunet-directory « %s »\n" |
8670 | 8731 | ||
8671 | #: src/util/crypto_ecc.c:1149 | 8732 | #: src/util/crypto_ecc.c:1151 |
8672 | #, fuzzy, c-format | 8733 | #, fuzzy, c-format |
8673 | msgid "ECC signing failed at %s:%d: %s\n" | 8734 | msgid "ECC signing failed at %s:%d: %s\n" |
8674 | msgstr "%s bị lỗi tại %s:%d: « %s »\n" | 8735 | msgstr "%s bị lỗi tại %s:%d: « %s »\n" |
8675 | 8736 | ||
8676 | #: src/util/crypto_ecc.c:1199 | 8737 | #: src/util/crypto_ecc.c:1201 |
8677 | #, fuzzy, c-format | 8738 | #, fuzzy, c-format |
8678 | msgid "EdDSA signing failed at %s:%d: %s\n" | 8739 | msgid "EdDSA signing failed at %s:%d: %s\n" |
8679 | msgstr "%s bị lỗi tại %s:%d: « %s »\n" | 8740 | msgstr "%s bị lỗi tại %s:%d: « %s »\n" |
8680 | 8741 | ||
8681 | #: src/util/crypto_ecc.c:1273 | 8742 | #: src/util/crypto_ecc.c:1275 |
8682 | #, fuzzy, c-format | 8743 | #, fuzzy, c-format |
8683 | msgid "ECDSA signature verification failed at %s:%d: %s\n" | 8744 | msgid "ECDSA signature verification failed at %s:%d: %s\n" |
8684 | msgstr "Lỗi thẩm tra chữ ký RSA tại %s:%d: %s\n" | 8745 | msgstr "Lỗi thẩm tra chữ ký RSA tại %s:%d: %s\n" |
8685 | 8746 | ||
8686 | #: src/util/crypto_ecc.c:1330 | 8747 | #: src/util/crypto_ecc.c:1332 |
8687 | #, fuzzy, c-format | 8748 | #, fuzzy, c-format |
8688 | msgid "EdDSA signature verification failed at %s:%d: %s\n" | 8749 | msgid "EdDSA signature verification failed at %s:%d: %s\n" |
8689 | msgstr "Lỗi thẩm tra chữ ký RSA tại %s:%d: %s\n" | 8750 | msgstr "Lỗi thẩm tra chữ ký RSA tại %s:%d: %s\n" |
@@ -8693,17 +8754,17 @@ msgstr "Lỗi thẩm tra chữ ký RSA tại %s:%d: %s\n" | |||
8693 | msgid "libgcrypt has not the expected version (version %s is required).\n" | 8754 | msgid "libgcrypt has not the expected version (version %s is required).\n" |
8694 | msgstr "libgcrypt không có phiên bản mong đợi (yêu cầu phiên bản %s).\n" | 8755 | msgstr "libgcrypt không có phiên bản mong đợi (yêu cầu phiên bản %s).\n" |
8695 | 8756 | ||
8696 | #: src/util/crypto_rsa.c:809 | 8757 | #: src/util/crypto_rsa.c:825 |
8697 | #, c-format | 8758 | #, c-format |
8698 | msgid "RSA signature verification failed at %s:%d: %s\n" | 8759 | msgid "RSA signature verification failed at %s:%d: %s\n" |
8699 | msgstr "Lỗi thẩm tra chữ ký RSA tại %s:%d: %s\n" | 8760 | msgstr "Lỗi thẩm tra chữ ký RSA tại %s:%d: %s\n" |
8700 | 8761 | ||
8701 | #: src/util/disk.c:1218 | 8762 | #: src/util/disk.c:1222 |
8702 | #, c-format | 8763 | #, c-format |
8703 | msgid "Expected `%s' to be a directory!\n" | 8764 | msgid "Expected `%s' to be a directory!\n" |
8704 | msgstr "Mong đợi « %s » là một thư mục.\n" | 8765 | msgstr "Mong đợi « %s » là một thư mục.\n" |
8705 | 8766 | ||
8706 | #: src/util/disk.c:1580 src/util/service.c:1328 | 8767 | #: src/util/disk.c:1584 src/util/service.c:1328 |
8707 | #, c-format | 8768 | #, c-format |
8708 | msgid "Cannot obtain information about user `%s': %s\n" | 8769 | msgid "Cannot obtain information about user `%s': %s\n" |
8709 | msgstr "Không thể lấy thông tin về người dùng « %s »: %s\n" | 8770 | msgstr "Không thể lấy thông tin về người dùng « %s »: %s\n" |
@@ -8769,7 +8830,7 @@ msgid "Use %s to get a list of options.\n" | |||
8769 | msgstr "" | 8830 | msgstr "" |
8770 | "Hãy sử dụng câu lệnh trợ giúp « --help » để xem danh sách các tùy chọn.\n" | 8831 | "Hãy sử dụng câu lệnh trợ giúp « --help » để xem danh sách các tùy chọn.\n" |
8771 | 8832 | ||
8772 | #: src/util/getopt_helpers.c:84 | 8833 | #: src/util/getopt_helpers.c:90 |
8773 | #, c-format | 8834 | #, c-format |
8774 | msgid "" | 8835 | msgid "" |
8775 | "Arguments mandatory for long options are also mandatory for short options.\n" | 8836 | "Arguments mandatory for long options are also mandatory for short options.\n" |
@@ -8777,12 +8838,12 @@ msgstr "" | |||
8777 | "Mọi đối số bắt buộc phải sử dụng với tùy chọn dài cũng bắt buộc với tùy chọn " | 8838 | "Mọi đối số bắt buộc phải sử dụng với tùy chọn dài cũng bắt buộc với tùy chọn " |
8778 | "ngắn.\n" | 8839 | "ngắn.\n" |
8779 | 8840 | ||
8780 | #: src/util/getopt_helpers.c:268 src/util/getopt_helpers.c:326 | 8841 | #: src/util/getopt_helpers.c:274 src/util/getopt_helpers.c:332 |
8781 | #, c-format | 8842 | #, c-format |
8782 | msgid "You must pass a number to the `%s' option.\n" | 8843 | msgid "You must pass a number to the `%s' option.\n" |
8783 | msgstr "Phải gửi một con số cho tùy chọn « %s ».\n" | 8844 | msgstr "Phải gửi một con số cho tùy chọn « %s ».\n" |
8784 | 8845 | ||
8785 | #: src/util/getopt_helpers.c:298 | 8846 | #: src/util/getopt_helpers.c:304 |
8786 | #, fuzzy, c-format | 8847 | #, fuzzy, c-format |
8787 | msgid "You must pass relative time to the `%s' option.\n" | 8848 | msgid "You must pass relative time to the `%s' option.\n" |
8788 | msgstr "Phải gửi một con số cho tùy chọn « %s ».\n" | 8849 | msgstr "Phải gửi một con số cho tùy chọn « %s ».\n" |
@@ -9025,22 +9086,22 @@ msgstr "« %s » thất bại cho ổ đĩa « %s »: %u\n" | |||
9025 | msgid "GetExitCodeProcess failed for binary %s (%d).\n" | 9086 | msgid "GetExitCodeProcess failed for binary %s (%d).\n" |
9026 | msgstr "" | 9087 | msgstr "" |
9027 | 9088 | ||
9028 | #: src/util/plugin.c:87 | 9089 | #: src/util/plugin.c:86 |
9029 | #, c-format | 9090 | #, c-format |
9030 | msgid "Initialization of plugin mechanism failed: %s!\n" | 9091 | msgid "Initialization of plugin mechanism failed: %s!\n" |
9031 | msgstr "Lỗi sơ khởi cơ chế phần bổ sung: %s\n" | 9092 | msgstr "Lỗi sơ khởi cơ chế phần bổ sung: %s\n" |
9032 | 9093 | ||
9033 | #: src/util/plugin.c:148 | 9094 | #: src/util/plugin.c:151 |
9034 | #, c-format | 9095 | #, c-format |
9035 | msgid "`%s' failed to resolve method '%s' with error: %s\n" | 9096 | msgid "`%s' failed to resolve method '%s' with error: %s\n" |
9036 | msgstr "« %s » không giải quyết được phương pháp « %s », với lỗi: %s\n" | 9097 | msgstr "« %s » không giải quyết được phương pháp « %s », với lỗi: %s\n" |
9037 | 9098 | ||
9038 | #: src/util/plugin.c:223 | 9099 | #: src/util/plugin.c:226 |
9039 | #, c-format | 9100 | #, c-format |
9040 | msgid "`%s' failed for library `%s' with error: %s\n" | 9101 | msgid "`%s' failed for library `%s' with error: %s\n" |
9041 | msgstr "« %s » thất bại cho thư viện « %s » với lỗi: %s\n" | 9102 | msgstr "« %s » thất bại cho thư viện « %s » với lỗi: %s\n" |
9042 | 9103 | ||
9043 | #: src/util/plugin.c:382 | 9104 | #: src/util/plugin.c:385 |
9044 | #, fuzzy | 9105 | #, fuzzy |
9045 | msgid "Could not determine plugin installation path.\n" | 9106 | msgid "Could not determine plugin installation path.\n" |
9046 | msgstr "Không thể truy cập đến thông tin về không gian tên.\n" | 9107 | msgstr "Không thể truy cập đến thông tin về không gian tên.\n" |
@@ -9694,10 +9755,6 @@ msgstr "« %s » thất bại ở tập tin « %s » tại %s:%d với lỗi: %s | |||
9694 | #~ msgstr "« %.*s » được kết nối tới « %.*s ».\n" | 9755 | #~ msgstr "« %.*s » được kết nối tới « %.*s ».\n" |
9695 | 9756 | ||
9696 | #, fuzzy | 9757 | #, fuzzy |
9697 | #~ msgid "CADET initialized\n" | ||
9698 | #~ msgstr "Lỗi sơ khởi lõi.\n" | ||
9699 | |||
9700 | #, fuzzy | ||
9701 | #~ msgid "Reloading sensor definitions from directory `%s'\n" | 9758 | #~ msgid "Reloading sensor definitions from directory `%s'\n" |
9702 | #~ msgstr "Đang tải %d tập tin xuống thư mục « %s ».\n" | 9759 | #~ msgstr "Đang tải %d tập tin xuống thư mục « %s ».\n" |
9703 | 9760 | ||
diff --git a/po/zh_CN.po b/po/zh_CN.po index a3871b09c..91203f264 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po | |||
@@ -7,7 +7,7 @@ msgid "" | |||
7 | msgstr "" | 7 | msgstr "" |
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: 2015-03-14 18:00+0100\n" | 10 | "POT-Creation-Date: 2015-04-27 13:05+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" |
@@ -496,16 +496,16 @@ msgstr "" | |||
496 | msgid "Could not connect master [%u] and slave [%u]\n" | 496 | msgid "Could not connect master [%u] and slave [%u]\n" |
497 | msgstr "无法连接到 %s:%u:%s\n" | 497 | msgstr "无法连接到 %s:%u:%s\n" |
498 | 498 | ||
499 | #: src/ats-tests/ats-testing.c:490 src/ats-tests/ats-testing.c:662 | 499 | #: src/ats-tests/ats-testing.c:490 src/ats-tests/ats-testing.c:634 |
500 | #, fuzzy | 500 | #, fuzzy |
501 | msgid "Initialization failed, shutdown\n" | 501 | msgid "Initialization failed, shutdown\n" |
502 | msgstr "插件机构初始化失败:%s!\n" | 502 | msgstr "插件机构初始化失败:%s!\n" |
503 | 503 | ||
504 | #: src/ats-tests/ats-testing-log.c:846 | 504 | #: src/ats-tests/ats-testing-log.c:834 |
505 | msgid "Stop logging\n" | 505 | msgid "Stop logging\n" |
506 | msgstr "" | 506 | msgstr "" |
507 | 507 | ||
508 | #: src/ats-tests/ats-testing-log.c:897 | 508 | #: src/ats-tests/ats-testing-log.c:885 |
509 | #, fuzzy, c-format | 509 | #, fuzzy, c-format |
510 | msgid "Start logging `%s'\n" | 510 | msgid "Start logging `%s'\n" |
511 | msgstr "未知的命令“%s”。\n" | 511 | msgstr "未知的命令“%s”。\n" |
@@ -553,6 +553,7 @@ msgid "Quota for network `%11s' (in/out): %10s / %10s\n" | |||
553 | msgstr "" | 553 | msgstr "" |
554 | 554 | ||
555 | #: src/ats-tool/gnunet-ats.c:708 src/namestore/gnunet-namestore.c:700 | 555 | #: src/ats-tool/gnunet-ats.c:708 src/namestore/gnunet-namestore.c:700 |
556 | #: src/namestore/plugin_rest_namestore.c:812 | ||
556 | #: src/transport/gnunet-transport.c:1890 | 557 | #: src/transport/gnunet-transport.c:1890 |
557 | #: src/transport/gnunet-transport-profiler.c:531 | 558 | #: src/transport/gnunet-transport-profiler.c:531 |
558 | #, fuzzy, c-format | 559 | #, fuzzy, c-format |
@@ -1402,29 +1403,29 @@ msgstr "" | |||
1402 | msgid "# PAYLOAD dropped (out of order)" | 1403 | msgid "# PAYLOAD dropped (out of order)" |
1403 | msgstr "" | 1404 | msgstr "" |
1404 | 1405 | ||
1405 | #: src/core/gnunet-service-core_neighbours.c:168 | 1406 | #: src/core/gnunet-service-core_neighbours.c:177 |
1406 | msgid "# sessions terminated by transport disconnect" | 1407 | msgid "# sessions terminated by transport disconnect" |
1407 | msgstr "" | 1408 | msgstr "" |
1408 | 1409 | ||
1409 | #: src/core/gnunet-service-core_neighbours.c:184 | 1410 | #: src/core/gnunet-service-core_neighbours.c:193 |
1410 | #: src/core/gnunet-service-core_neighbours.c:342 | 1411 | #: src/core/gnunet-service-core_neighbours.c:355 |
1411 | msgid "# neighbour entries allocated" | 1412 | msgid "# neighbour entries allocated" |
1412 | msgstr "" | 1413 | msgstr "" |
1413 | 1414 | ||
1414 | #: src/core/gnunet-service-core_neighbours.c:252 | 1415 | #: src/core/gnunet-service-core_neighbours.c:264 |
1415 | msgid "# encrypted bytes given to transport" | 1416 | msgid "# encrypted bytes given to transport" |
1416 | msgstr "" | 1417 | msgstr "" |
1417 | 1418 | ||
1418 | #: src/core/gnunet-service-core_neighbours.c:425 | 1419 | #: src/core/gnunet-service-core_neighbours.c:438 |
1419 | #, c-format | 1420 | #, c-format |
1420 | msgid "Unsupported message of type %u (%u bytes) received from peer `%s'\n" | 1421 | msgid "Unsupported message of type %u (%u bytes) received from peer `%s'\n" |
1421 | msgstr "" | 1422 | msgstr "" |
1422 | 1423 | ||
1423 | #: src/core/gnunet-service-core_sessions.c:245 | 1424 | #: src/core/gnunet-service-core_sessions.c:252 |
1424 | #: src/core/gnunet-service-core_sessions.c:331 | 1425 | #: src/core/gnunet-service-core_sessions.c:338 |
1425 | #: src/dht/gnunet-service-dht_neighbours.c:661 | 1426 | #: src/dht/gnunet-service-dht_neighbours.c:661 |
1426 | #: src/dht/gnunet-service-dht_neighbours.c:726 | 1427 | #: src/dht/gnunet-service-dht_neighbours.c:726 |
1427 | #: src/fs/gnunet-service-fs_cp.c:645 src/fs/gnunet-service-fs_cp.c:1627 | 1428 | #: src/fs/gnunet-service-fs_cp.c:654 src/fs/gnunet-service-fs_cp.c:1647 |
1428 | #: src/topology/gnunet-daemon-topology.c:734 | 1429 | #: src/topology/gnunet-daemon-topology.c:734 |
1429 | #: src/topology/gnunet-daemon-topology.c:835 | 1430 | #: src/topology/gnunet-daemon-topology.c:835 |
1430 | #: src/transport/gnunet-service-transport_neighbours.c:755 | 1431 | #: src/transport/gnunet-service-transport_neighbours.c:755 |
@@ -1432,21 +1433,21 @@ msgstr "" | |||
1432 | msgid "# peers connected" | 1433 | msgid "# peers connected" |
1433 | msgstr "" | 1434 | msgstr "" |
1434 | 1435 | ||
1435 | #: src/core/gnunet-service-core_sessions.c:278 | 1436 | #: src/core/gnunet-service-core_sessions.c:285 |
1436 | msgid "# type map refreshes sent" | 1437 | msgid "# type map refreshes sent" |
1437 | msgstr "" | 1438 | msgstr "" |
1438 | 1439 | ||
1439 | #: src/core/gnunet-service-core_sessions.c:397 | 1440 | #: src/core/gnunet-service-core_sessions.c:404 |
1440 | #, fuzzy | 1441 | #, fuzzy |
1441 | msgid "# outdated typemap confirmations received" | 1442 | msgid "# outdated typemap confirmations received" |
1442 | msgstr "保存配置失败。" | 1443 | msgstr "保存配置失败。" |
1443 | 1444 | ||
1444 | #: src/core/gnunet-service-core_sessions.c:408 | 1445 | #: src/core/gnunet-service-core_sessions.c:415 |
1445 | #, fuzzy | 1446 | #, fuzzy |
1446 | msgid "# valid typemap confirmations received" | 1447 | msgid "# valid typemap confirmations received" |
1447 | msgstr "保存配置失败。" | 1448 | msgstr "保存配置失败。" |
1448 | 1449 | ||
1449 | #: src/core/gnunet-service-core_sessions.c:546 | 1450 | #: src/core/gnunet-service-core_sessions.c:554 |
1450 | msgid "# messages discarded (expired prior to transmission)" | 1451 | msgid "# messages discarded (expired prior to transmission)" |
1451 | msgstr "" | 1452 | msgstr "" |
1452 | 1453 | ||
@@ -1460,7 +1461,7 @@ msgid "# updates to my type map" | |||
1460 | msgstr "" | 1461 | msgstr "" |
1461 | 1462 | ||
1462 | #: src/datacache/datacache.c:115 src/datacache/datacache.c:266 | 1463 | #: src/datacache/datacache.c:115 src/datacache/datacache.c:266 |
1463 | #: src/datastore/gnunet-service-datastore.c:855 | 1464 | #: src/datastore/gnunet-service-datastore.c:841 |
1464 | msgid "# bytes stored" | 1465 | msgid "# bytes stored" |
1465 | msgstr "" | 1466 | msgstr "" |
1466 | 1467 | ||
@@ -1469,8 +1470,8 @@ msgid "# items stored" | |||
1469 | msgstr "" | 1470 | msgstr "" |
1470 | 1471 | ||
1471 | #: src/datacache/datacache.c:143 src/datacache/datacache.c:150 | 1472 | #: src/datacache/datacache.c:143 src/datacache/datacache.c:150 |
1472 | #: src/datastore/gnunet-service-datastore.c:1557 | 1473 | #: src/datastore/gnunet-service-datastore.c:1598 |
1473 | #: src/datastore/gnunet-service-datastore.c:1568 | 1474 | #: src/datastore/gnunet-service-datastore.c:1609 |
1474 | #, c-format | 1475 | #, c-format |
1475 | msgid "No `%s' specified for `%s' in configuration!\n" | 1476 | msgid "No `%s' specified for `%s' in configuration!\n" |
1476 | msgstr "" | 1477 | msgstr "" |
@@ -1504,8 +1505,8 @@ msgstr "" | |||
1504 | 1505 | ||
1505 | #: src/datacache/plugin_datacache_sqlite.c:69 | 1506 | #: src/datacache/plugin_datacache_sqlite.c:69 |
1506 | #: src/datacache/plugin_datacache_sqlite.c:72 | 1507 | #: src/datacache/plugin_datacache_sqlite.c:72 |
1507 | #: src/datastore/plugin_datastore_mysql.c:809 | 1508 | #: src/datastore/plugin_datastore_mysql.c:818 |
1508 | #: src/datastore/plugin_datastore_mysql.c:823 | 1509 | #: src/datastore/plugin_datastore_mysql.c:834 |
1509 | #: src/datastore/plugin_datastore_sqlite.c:57 src/mysql/mysql.c:41 | 1510 | #: src/datastore/plugin_datastore_sqlite.c:57 src/mysql/mysql.c:41 |
1510 | #: src/mysql/mysql.c:48 src/mysql/mysql.c:522 src/mysql/mysql.c:531 | 1511 | #: src/mysql/mysql.c:48 src/mysql/mysql.c:522 src/mysql/mysql.c:531 |
1511 | #: src/mysql/mysql.c:591 src/mysql/mysql.c:607 | 1512 | #: src/mysql/mysql.c:591 src/mysql/mysql.c:607 |
@@ -1697,8 +1698,8 @@ msgstr "" | |||
1697 | 1698 | ||
1698 | #: src/datastore/gnunet-service-datastore.c:712 | 1699 | #: src/datastore/gnunet-service-datastore.c:712 |
1699 | #: src/datastore/gnunet-service-datastore.c:767 | 1700 | #: src/datastore/gnunet-service-datastore.c:767 |
1700 | #: src/datastore/gnunet-service-datastore.c:982 | 1701 | #: src/datastore/gnunet-service-datastore.c:999 |
1701 | #: src/datastore/gnunet-service-datastore.c:1529 | 1702 | #: src/datastore/gnunet-service-datastore.c:1570 |
1702 | msgid "# reserved" | 1703 | msgid "# reserved" |
1703 | msgstr "" | 1704 | msgstr "" |
1704 | 1705 | ||
@@ -1706,130 +1707,145 @@ msgstr "" | |||
1706 | msgid "Could not find matching reservation" | 1707 | msgid "Could not find matching reservation" |
1707 | msgstr "" | 1708 | msgstr "" |
1708 | 1709 | ||
1709 | #: src/datastore/gnunet-service-datastore.c:867 | 1710 | #: src/datastore/gnunet-service-datastore.c:853 |
1710 | #, c-format | 1711 | #, c-format |
1711 | msgid "Need %llu bytes more space (%llu allowed, using %llu)\n" | 1712 | msgid "Need %llu bytes more space (%llu allowed, using %llu)\n" |
1712 | msgstr "" | 1713 | msgstr "" |
1713 | 1714 | ||
1714 | #: src/datastore/gnunet-service-datastore.c:1029 | 1715 | #: src/datastore/gnunet-service-datastore.c:1046 |
1715 | msgid "# GET requests received" | 1716 | msgid "# GET requests received" |
1716 | msgstr "" | 1717 | msgstr "" |
1717 | 1718 | ||
1718 | #: src/datastore/gnunet-service-datastore.c:1041 | 1719 | #: src/datastore/gnunet-service-datastore.c:1058 |
1719 | msgid "# requests filtered by bloomfilter" | 1720 | msgid "# requests filtered by bloomfilter" |
1720 | msgstr "" | 1721 | msgstr "" |
1721 | 1722 | ||
1722 | #: src/datastore/gnunet-service-datastore.c:1069 | 1723 | #: src/datastore/gnunet-service-datastore.c:1094 |
1723 | msgid "# UPDATE requests received" | 1724 | msgid "# UPDATE requests received" |
1724 | msgstr "" | 1725 | msgstr "" |
1725 | 1726 | ||
1726 | #: src/datastore/gnunet-service-datastore.c:1099 | 1727 | #: src/datastore/gnunet-service-datastore.c:1122 |
1727 | msgid "# GET REPLICATION requests received" | 1728 | msgid "# GET REPLICATION requests received" |
1728 | msgstr "" | 1729 | msgstr "" |
1729 | 1730 | ||
1730 | #: src/datastore/gnunet-service-datastore.c:1132 | 1731 | #: src/datastore/gnunet-service-datastore.c:1155 |
1731 | msgid "# GET ZERO ANONYMITY requests received" | 1732 | msgid "# GET ZERO ANONYMITY requests received" |
1732 | msgstr "" | 1733 | msgstr "" |
1733 | 1734 | ||
1734 | #: src/datastore/gnunet-service-datastore.c:1157 | 1735 | #: src/datastore/gnunet-service-datastore.c:1180 |
1735 | msgid "Content not found" | 1736 | msgid "Content not found" |
1736 | msgstr "" | 1737 | msgstr "" |
1737 | 1738 | ||
1738 | #: src/datastore/gnunet-service-datastore.c:1165 | 1739 | #: src/datastore/gnunet-service-datastore.c:1188 |
1739 | msgid "# bytes removed (explicit request)" | 1740 | msgid "# bytes removed (explicit request)" |
1740 | msgstr "" | 1741 | msgstr "" |
1741 | 1742 | ||
1742 | #: src/datastore/gnunet-service-datastore.c:1197 | 1743 | #: src/datastore/gnunet-service-datastore.c:1220 |
1743 | msgid "# REMOVE requests received" | 1744 | msgid "# REMOVE requests received" |
1744 | msgstr "" | 1745 | msgstr "" |
1745 | 1746 | ||
1746 | #: src/datastore/gnunet-service-datastore.c:1241 | 1747 | #: src/datastore/gnunet-service-datastore.c:1264 |
1747 | #, c-format | 1748 | #, c-format |
1748 | msgid "" | 1749 | msgid "" |
1749 | "Datastore payload must have been inaccurate (%lld < %lld). Recomputing it.\n" | 1750 | "Datastore payload must have been inaccurate (%lld < %lld). Recomputing it.\n" |
1750 | msgstr "" | 1751 | msgstr "" |
1751 | 1752 | ||
1752 | #: src/datastore/gnunet-service-datastore.c:1246 | 1753 | #: src/datastore/gnunet-service-datastore.c:1269 |
1753 | #, c-format | 1754 | #, c-format |
1754 | msgid "New payload: %lld\n" | 1755 | msgid "New payload: %lld\n" |
1755 | msgstr "" | 1756 | msgstr "" |
1756 | 1757 | ||
1757 | #: src/datastore/gnunet-service-datastore.c:1299 | 1758 | #: src/datastore/gnunet-service-datastore.c:1322 |
1758 | #, c-format | 1759 | #, c-format |
1759 | msgid "Loading `%s' datastore plugin\n" | 1760 | msgid "Loading `%s' datastore plugin\n" |
1760 | msgstr "" | 1761 | msgstr "" |
1761 | 1762 | ||
1762 | #: src/datastore/gnunet-service-datastore.c:1310 | 1763 | #: src/datastore/gnunet-service-datastore.c:1333 |
1763 | #, fuzzy, c-format | 1764 | #, fuzzy, c-format |
1764 | msgid "Failed to load datastore plugin for `%s'\n" | 1765 | msgid "Failed to load datastore plugin for `%s'\n" |
1765 | msgstr "解析配置文件“%s”失败\n" | 1766 | msgstr "解析配置文件“%s”失败\n" |
1766 | 1767 | ||
1767 | #: src/datastore/gnunet-service-datastore.c:1412 | 1768 | #: src/datastore/gnunet-service-datastore.c:1402 |
1768 | msgid "Rebuilding bloomfilter. Please be patient.\n" | 1769 | #: src/datastore/gnunet-service-datastore.c:1463 |
1770 | msgid "Bloomfilter construction complete.\n" | ||
1769 | msgstr "" | 1771 | msgstr "" |
1770 | 1772 | ||
1771 | #: src/datastore/gnunet-service-datastore.c:1419 | 1773 | #: src/datastore/gnunet-service-datastore.c:1450 |
1772 | msgid "Plugin does not support get_keys function. Please fix!\n" | 1774 | msgid "Rebuilding bloomfilter. Please be patient.\n" |
1773 | msgstr "" | 1775 | msgstr "" |
1774 | 1776 | ||
1775 | #: src/datastore/gnunet-service-datastore.c:1422 | 1777 | #: src/datastore/gnunet-service-datastore.c:1460 |
1776 | msgid "Bloomfilter construction complete.\n" | 1778 | msgid "Plugin does not support get_keys function. Please fix!\n" |
1777 | msgstr "" | 1779 | msgstr "" |
1778 | 1780 | ||
1779 | #: src/datastore/gnunet-service-datastore.c:1562 | 1781 | #: src/datastore/gnunet-service-datastore.c:1603 |
1780 | #, c-format | 1782 | #, c-format |
1781 | msgid "# bytes used in file-sharing datastore `%s'" | 1783 | msgid "# bytes used in file-sharing datastore `%s'" |
1782 | msgstr "" | 1784 | msgstr "" |
1783 | 1785 | ||
1784 | #: src/datastore/gnunet-service-datastore.c:1573 | 1786 | #: src/datastore/gnunet-service-datastore.c:1614 |
1785 | msgid "# quota" | 1787 | msgid "# quota" |
1786 | msgstr "" | 1788 | msgstr "" |
1787 | 1789 | ||
1788 | #: src/datastore/gnunet-service-datastore.c:1575 | 1790 | #: src/datastore/gnunet-service-datastore.c:1616 |
1789 | msgid "# cache size" | 1791 | msgid "# cache size" |
1790 | msgstr "" | 1792 | msgstr "" |
1791 | 1793 | ||
1792 | #: src/datastore/gnunet-service-datastore.c:1588 | 1794 | #: src/datastore/gnunet-service-datastore.c:1629 |
1793 | #, c-format | 1795 | #, c-format |
1794 | msgid "Could not use specified filename `%s' for bloomfilter.\n" | 1796 | msgid "Could not use specified filename `%s' for bloomfilter.\n" |
1795 | msgstr "" | 1797 | msgstr "" |
1796 | 1798 | ||
1797 | #: src/datastore/gnunet-service-datastore.c:1606 | 1799 | #: src/datastore/gnunet-service-datastore.c:1647 |
1798 | #: src/datastore/gnunet-service-datastore.c:1622 | 1800 | #: src/datastore/gnunet-service-datastore.c:1663 |
1799 | #, fuzzy, c-format | 1801 | #, fuzzy, c-format |
1800 | msgid "Failed to remove bogus bloomfilter file `%s'\n" | 1802 | msgid "Failed to remove bogus bloomfilter file `%s'\n" |
1801 | msgstr "解析配置文件“%s”失败\n" | 1803 | msgstr "解析配置文件“%s”失败\n" |
1802 | 1804 | ||
1803 | #: src/datastore/gnunet-service-datastore.c:1652 | 1805 | #: src/datastore/gnunet-service-datastore.c:1693 |
1804 | #, fuzzy | 1806 | #, fuzzy |
1805 | msgid "Failed to initialize bloomfilter.\n" | 1807 | msgid "Failed to initialize bloomfilter.\n" |
1806 | msgstr "初始化“%s”服务失败。\n" | 1808 | msgstr "初始化“%s”服务失败。\n" |
1807 | 1809 | ||
1808 | #: src/datastore/plugin_datastore_heap.c:821 | 1810 | #: src/datastore/plugin_datastore_heap.c:826 |
1809 | #, fuzzy | 1811 | #, fuzzy |
1810 | msgid "Heap database running\n" | 1812 | msgid "Heap database running\n" |
1811 | msgstr "sqlite 数据仓库" | 1813 | msgstr "sqlite 数据仓库" |
1812 | 1814 | ||
1813 | #: src/datastore/plugin_datastore_mysql.c:786 | 1815 | #: src/datastore/plugin_datastore_mysql.c:309 |
1816 | #: src/datastore/plugin_datastore_sqlite.c:499 | ||
1817 | #, fuzzy | ||
1818 | msgid "Data too large" | ||
1819 | msgstr "迭代次数" | ||
1820 | |||
1821 | #: src/datastore/plugin_datastore_mysql.c:328 | ||
1822 | msgid "MySQL statement run failure" | ||
1823 | msgstr "" | ||
1824 | |||
1825 | #: src/datastore/plugin_datastore_mysql.c:793 | ||
1814 | #, fuzzy, c-format | 1826 | #, fuzzy, c-format |
1815 | msgid "Failed to prepare statement `%s'\n" | 1827 | msgid "Failed to prepare statement `%s'\n" |
1816 | msgstr "解析配置文件“%s”失败\n" | 1828 | msgstr "解析配置文件“%s”失败\n" |
1817 | 1829 | ||
1818 | #: src/datastore/plugin_datastore_mysql.c:794 | 1830 | #: src/datastore/plugin_datastore_mysql.c:802 |
1819 | #, fuzzy, c-format | 1831 | #, fuzzy, c-format |
1820 | msgid "`%s' for `%s' failed at %s:%d with error: %s\n" | 1832 | msgid "`%s' for `%s' failed at %s:%d with error: %s\n" |
1821 | msgstr "“%s”于 %s:%d 处失败,错误为:%s\n" | 1833 | msgstr "“%s”于 %s:%d 处失败,错误为:%s\n" |
1822 | 1834 | ||
1823 | #: src/datastore/plugin_datastore_mysql.c:1025 | 1835 | #: src/datastore/plugin_datastore_mysql.c:1036 |
1824 | msgid "Mysql database running\n" | 1836 | msgid "Mysql database running\n" |
1825 | msgstr "" | 1837 | msgstr "" |
1826 | 1838 | ||
1827 | #: src/datastore/plugin_datastore_postgres.c:837 | 1839 | #: src/datastore/plugin_datastore_postgres.c:331 |
1840 | msgid "Postgress exec failure" | ||
1841 | msgstr "" | ||
1842 | |||
1843 | #: src/datastore/plugin_datastore_postgres.c:846 | ||
1828 | #, fuzzy | 1844 | #, fuzzy |
1829 | msgid "Failed to drop table from database.\n" | 1845 | msgid "Failed to drop table from database.\n" |
1830 | msgstr "发送消息失败。\n" | 1846 | msgstr "发送消息失败。\n" |
1831 | 1847 | ||
1832 | #: src/datastore/plugin_datastore_postgres.c:873 | 1848 | #: src/datastore/plugin_datastore_postgres.c:882 |
1833 | #: src/namecache/plugin_namecache_postgres.c:414 | 1849 | #: src/namecache/plugin_namecache_postgres.c:414 |
1834 | #: src/namestore/plugin_namestore_postgres.c:569 | 1850 | #: src/namestore/plugin_namestore_postgres.c:569 |
1835 | msgid "Postgres database running\n" | 1851 | msgid "Postgres database running\n" |
@@ -1852,30 +1868,30 @@ msgstr "“%s”于 %s:%d 处失败,错误为:%s\n" | |||
1852 | msgid "Unable to initialize SQLite: %s.\n" | 1868 | msgid "Unable to initialize SQLite: %s.\n" |
1853 | msgstr "无法初始化 SQLite:%s。\n" | 1869 | msgstr "无法初始化 SQLite:%s。\n" |
1854 | 1870 | ||
1855 | #: src/datastore/plugin_datastore_sqlite.c:661 | 1871 | #: src/datastore/plugin_datastore_sqlite.c:680 |
1856 | #, fuzzy | 1872 | #, fuzzy |
1857 | msgid "Invalid data in database. Trying to fix (by deletion).\n" | 1873 | msgid "Invalid data in database. Trying to fix (by deletion).\n" |
1858 | msgstr "%s 中有无效数据。请尝试修复(删除之)。\n" | 1874 | msgstr "%s 中有无效数据。请尝试修复(删除之)。\n" |
1859 | 1875 | ||
1860 | #: src/datastore/plugin_datastore_sqlite.c:1156 | 1876 | #: src/datastore/plugin_datastore_sqlite.c:1177 |
1861 | msgid "sqlite version to old to determine size, assuming zero\n" | 1877 | msgid "sqlite version to old to determine size, assuming zero\n" |
1862 | msgstr "" | 1878 | msgstr "" |
1863 | 1879 | ||
1864 | #: src/datastore/plugin_datastore_sqlite.c:1176 | 1880 | #: src/datastore/plugin_datastore_sqlite.c:1197 |
1865 | #, c-format | 1881 | #, c-format |
1866 | msgid "" | 1882 | msgid "" |
1867 | "Using sqlite page utilization to estimate payload (%llu pages of size %llu " | 1883 | "Using sqlite page utilization to estimate payload (%llu pages of size %llu " |
1868 | "bytes)\n" | 1884 | "bytes)\n" |
1869 | msgstr "" | 1885 | msgstr "" |
1870 | 1886 | ||
1871 | #: src/datastore/plugin_datastore_sqlite.c:1216 | 1887 | #: src/datastore/plugin_datastore_sqlite.c:1237 |
1872 | #: src/namecache/plugin_namecache_sqlite.c:580 | 1888 | #: src/namecache/plugin_namecache_sqlite.c:580 |
1873 | #: src/namestore/plugin_namestore_sqlite.c:716 | 1889 | #: src/namestore/plugin_namestore_sqlite.c:716 |
1874 | #, fuzzy | 1890 | #, fuzzy |
1875 | msgid "Sqlite database running\n" | 1891 | msgid "Sqlite database running\n" |
1876 | msgstr "sqlite 数据仓库" | 1892 | msgstr "sqlite 数据仓库" |
1877 | 1893 | ||
1878 | #: src/datastore/plugin_datastore_template.c:259 | 1894 | #: src/datastore/plugin_datastore_template.c:260 |
1879 | msgid "Template database running\n" | 1895 | msgid "Template database running\n" |
1880 | msgstr "" | 1896 | msgstr "" |
1881 | 1897 | ||
@@ -2476,53 +2492,53 @@ msgstr "" | |||
2476 | msgid "Change DNS replies to point elsewhere." | 2492 | msgid "Change DNS replies to point elsewhere." |
2477 | msgstr "" | 2493 | msgstr "" |
2478 | 2494 | ||
2479 | #: src/dns/gnunet-service-dns.c:456 | 2495 | #: src/dns/gnunet-service-dns.c:459 |
2480 | msgid "# DNS requests answered via TUN interface" | 2496 | msgid "# DNS requests answered via TUN interface" |
2481 | msgstr "" | 2497 | msgstr "" |
2482 | 2498 | ||
2483 | #: src/dns/gnunet-service-dns.c:603 | 2499 | #: src/dns/gnunet-service-dns.c:606 |
2484 | msgid "# DNS exit failed (failed to open socket)" | 2500 | msgid "# DNS exit failed (failed to open socket)" |
2485 | msgstr "" | 2501 | msgstr "" |
2486 | 2502 | ||
2487 | #: src/dns/gnunet-service-dns.c:714 | 2503 | #: src/dns/gnunet-service-dns.c:717 |
2488 | msgid "# External DNS response discarded (no matching request)" | 2504 | msgid "# External DNS response discarded (no matching request)" |
2489 | msgstr "" | 2505 | msgstr "" |
2490 | 2506 | ||
2491 | #: src/dns/gnunet-service-dns.c:792 | 2507 | #: src/dns/gnunet-service-dns.c:795 |
2492 | msgid "# Client response discarded (no matching request)" | 2508 | msgid "# Client response discarded (no matching request)" |
2493 | msgstr "" | 2509 | msgstr "" |
2494 | 2510 | ||
2495 | #: src/dns/gnunet-service-dns.c:907 | 2511 | #: src/dns/gnunet-service-dns.c:910 |
2496 | msgid "Received malformed IPv4-UDP packet on TUN interface.\n" | 2512 | msgid "Received malformed IPv4-UDP packet on TUN interface.\n" |
2497 | msgstr "" | 2513 | msgstr "" |
2498 | 2514 | ||
2499 | #: src/dns/gnunet-service-dns.c:923 | 2515 | #: src/dns/gnunet-service-dns.c:926 |
2500 | msgid "Received malformed IPv6-UDP packet on TUN interface.\n" | 2516 | msgid "Received malformed IPv6-UDP packet on TUN interface.\n" |
2501 | msgstr "" | 2517 | msgstr "" |
2502 | 2518 | ||
2503 | #: src/dns/gnunet-service-dns.c:932 | 2519 | #: src/dns/gnunet-service-dns.c:935 |
2504 | #, c-format | 2520 | #, c-format |
2505 | msgid "Got non-IP packet with %u bytes and protocol %u from TUN\n" | 2521 | msgid "Got non-IP packet with %u bytes and protocol %u from TUN\n" |
2506 | msgstr "" | 2522 | msgstr "" |
2507 | 2523 | ||
2508 | #: src/dns/gnunet-service-dns.c:942 | 2524 | #: src/dns/gnunet-service-dns.c:945 |
2509 | msgid "# Non-DNS UDP packet received via TUN interface" | 2525 | msgid "# Non-DNS UDP packet received via TUN interface" |
2510 | msgstr "" | 2526 | msgstr "" |
2511 | 2527 | ||
2512 | #: src/dns/gnunet-service-dns.c:1009 | 2528 | #: src/dns/gnunet-service-dns.c:1012 |
2513 | msgid "# DNS requests received via TUN interface" | 2529 | msgid "# DNS requests received via TUN interface" |
2514 | msgstr "" | 2530 | msgstr "" |
2515 | 2531 | ||
2516 | #: src/dns/gnunet-service-dns.c:1049 | 2532 | #: src/dns/gnunet-service-dns.c:1064 src/exit/gnunet-daemon-exit.c:3594 |
2517 | #, c-format | ||
2518 | msgid "`%s' must be installed SUID, refusing to run\n" | ||
2519 | msgstr "" | ||
2520 | |||
2521 | #: src/dns/gnunet-service-dns.c:1069 src/exit/gnunet-daemon-exit.c:3594 | ||
2522 | #, fuzzy | 2533 | #, fuzzy |
2523 | msgid "need a valid IPv4 or IPv6 address\n" | 2534 | msgid "need a valid IPv4 or IPv6 address\n" |
2524 | msgstr "无效的进程优先级“%s”\n" | 2535 | msgstr "无效的进程优先级“%s”\n" |
2525 | 2536 | ||
2537 | #: src/dns/gnunet-service-dns.c:1082 | ||
2538 | #, c-format | ||
2539 | msgid "`%s' must be installed SUID, will not run DNS interceptor\n" | ||
2540 | msgstr "" | ||
2541 | |||
2526 | #: src/dv/gnunet-dv.c:169 | 2542 | #: src/dv/gnunet-dv.c:169 |
2527 | msgid "verbose output" | 2543 | msgid "verbose output" |
2528 | msgstr "" | 2544 | msgstr "" |
@@ -2747,52 +2763,52 @@ msgstr "" | |||
2747 | msgid "Daemon to run to provide an IP exit node for the VPN" | 2763 | msgid "Daemon to run to provide an IP exit node for the VPN" |
2748 | msgstr "" | 2764 | msgstr "" |
2749 | 2765 | ||
2750 | #: src/fragmentation/defragmentation.c:271 | 2766 | #: src/fragmentation/defragmentation.c:277 |
2751 | msgid "# acknowledgements sent for fragment" | 2767 | msgid "# acknowledgements sent for fragment" |
2752 | msgstr "" | 2768 | msgstr "" |
2753 | 2769 | ||
2754 | #: src/fragmentation/defragmentation.c:463 | 2770 | #: src/fragmentation/defragmentation.c:470 |
2755 | #: src/transport/plugin_transport_wlan.c:1515 | 2771 | #: src/transport/plugin_transport_wlan.c:1515 |
2756 | msgid "# fragments received" | 2772 | msgid "# fragments received" |
2757 | msgstr "" | 2773 | msgstr "" |
2758 | 2774 | ||
2759 | #: src/fragmentation/defragmentation.c:533 | 2775 | #: src/fragmentation/defragmentation.c:540 |
2760 | msgid "# duplicate fragments received" | 2776 | msgid "# duplicate fragments received" |
2761 | msgstr "" | 2777 | msgstr "" |
2762 | 2778 | ||
2763 | #: src/fragmentation/defragmentation.c:549 | 2779 | #: src/fragmentation/defragmentation.c:558 |
2764 | msgid "# messages defragmented" | 2780 | msgid "# messages defragmented" |
2765 | msgstr "" | 2781 | msgstr "" |
2766 | 2782 | ||
2767 | #: src/fragmentation/fragmentation.c:234 | 2783 | #: src/fragmentation/fragmentation.c:235 |
2768 | msgid "# fragments transmitted" | 2784 | msgid "# fragments transmitted" |
2769 | msgstr "" | 2785 | msgstr "" |
2770 | 2786 | ||
2771 | #: src/fragmentation/fragmentation.c:237 | 2787 | #: src/fragmentation/fragmentation.c:240 |
2772 | msgid "# fragments retransmitted" | 2788 | msgid "# fragments retransmitted" |
2773 | msgstr "" | 2789 | msgstr "" |
2774 | 2790 | ||
2775 | #: src/fragmentation/fragmentation.c:263 | 2791 | #: src/fragmentation/fragmentation.c:269 |
2776 | msgid "# fragments wrap arounds" | 2792 | msgid "# fragments wrap arounds" |
2777 | msgstr "" | 2793 | msgstr "" |
2778 | 2794 | ||
2779 | #: src/fragmentation/fragmentation.c:307 | 2795 | #: src/fragmentation/fragmentation.c:315 |
2780 | msgid "# messages fragmented" | 2796 | msgid "# messages fragmented" |
2781 | msgstr "" | 2797 | msgstr "" |
2782 | 2798 | ||
2783 | #: src/fragmentation/fragmentation.c:310 | 2799 | #: src/fragmentation/fragmentation.c:321 |
2784 | msgid "# total size of fragmented messages" | 2800 | msgid "# total size of fragmented messages" |
2785 | msgstr "" | 2801 | msgstr "" |
2786 | 2802 | ||
2787 | #: src/fragmentation/fragmentation.c:431 | 2803 | #: src/fragmentation/fragmentation.c:444 |
2788 | msgid "# fragment acknowledgements received" | 2804 | msgid "# fragment acknowledgements received" |
2789 | msgstr "" | 2805 | msgstr "" |
2790 | 2806 | ||
2791 | #: src/fragmentation/fragmentation.c:437 | 2807 | #: src/fragmentation/fragmentation.c:451 |
2792 | msgid "# bits removed from fragmentation ACKs" | 2808 | msgid "# bits removed from fragmentation ACKs" |
2793 | msgstr "" | 2809 | msgstr "" |
2794 | 2810 | ||
2795 | #: src/fragmentation/fragmentation.c:461 | 2811 | #: src/fragmentation/fragmentation.c:475 |
2796 | msgid "# fragmentation transmissions completed" | 2812 | msgid "# fragmentation transmissions completed" |
2797 | msgstr "" | 2813 | msgstr "" |
2798 | 2814 | ||
@@ -3055,58 +3071,58 @@ msgstr "运行 %s失败:%s %d\n" | |||
3055 | msgid "Got result with unknown block type `%d', ignoring" | 3071 | msgid "Got result with unknown block type `%d', ignoring" |
3056 | msgstr "" | 3072 | msgstr "" |
3057 | 3073 | ||
3058 | #: src/fs/fs_unindex.c:59 | 3074 | #: src/fs/fs_unindex.c:63 |
3059 | msgid "Failed to find given position in file" | 3075 | msgid "Failed to find given position in file" |
3060 | msgstr "" | 3076 | msgstr "" |
3061 | 3077 | ||
3062 | #: src/fs/fs_unindex.c:64 | 3078 | #: src/fs/fs_unindex.c:68 |
3063 | #, fuzzy | 3079 | #, fuzzy |
3064 | msgid "Failed to read file" | 3080 | msgid "Failed to read file" |
3065 | msgstr "发送消息失败。\n" | 3081 | msgstr "发送消息失败。\n" |
3066 | 3082 | ||
3067 | #: src/fs/fs_unindex.c:234 | 3083 | #: src/fs/fs_unindex.c:245 |
3068 | msgid "Unexpected time for a response from `fs' service." | 3084 | msgid "Unexpected time for a response from `fs' service." |
3069 | msgstr "" | 3085 | msgstr "" |
3070 | 3086 | ||
3071 | #: src/fs/fs_unindex.c:242 | 3087 | #: src/fs/fs_unindex.c:253 |
3072 | msgid "Timeout waiting for `fs' service." | 3088 | msgid "Timeout waiting for `fs' service." |
3073 | msgstr "" | 3089 | msgstr "" |
3074 | 3090 | ||
3075 | #: src/fs/fs_unindex.c:250 | 3091 | #: src/fs/fs_unindex.c:261 |
3076 | #, fuzzy | 3092 | #, fuzzy |
3077 | msgid "Invalid response from `fs' service." | 3093 | msgid "Invalid response from `fs' service." |
3078 | msgstr "“%s”的参数无效。\n" | 3094 | msgstr "“%s”的参数无效。\n" |
3079 | 3095 | ||
3080 | #: src/fs/fs_unindex.c:291 | 3096 | #: src/fs/fs_unindex.c:304 |
3081 | msgid "Failed to connect to FS service for unindexing." | 3097 | msgid "Failed to connect to FS service for unindexing." |
3082 | msgstr "" | 3098 | msgstr "" |
3083 | 3099 | ||
3084 | #: src/fs/fs_unindex.c:347 src/fs/fs_unindex.c:359 | 3100 | #: src/fs/fs_unindex.c:360 src/fs/fs_unindex.c:372 |
3085 | #, fuzzy | 3101 | #, fuzzy |
3086 | msgid "Failed to get KSKs from directory scan." | 3102 | msgid "Failed to get KSKs from directory scan." |
3087 | msgstr "解析配置文件“%s”失败\n" | 3103 | msgstr "解析配置文件“%s”失败\n" |
3088 | 3104 | ||
3089 | #: src/fs/fs_unindex.c:355 | 3105 | #: src/fs/fs_unindex.c:368 |
3090 | #, fuzzy, c-format | 3106 | #, fuzzy, c-format |
3091 | msgid "Internal error scanning `%s'.\n" | 3107 | msgid "Internal error scanning `%s'.\n" |
3092 | msgstr "未知错误。\n" | 3108 | msgstr "未知错误。\n" |
3093 | 3109 | ||
3094 | #: src/fs/fs_unindex.c:414 | 3110 | #: src/fs/fs_unindex.c:427 |
3095 | #, fuzzy, c-format | 3111 | #, fuzzy, c-format |
3096 | msgid "Failed to remove UBlock: %s\n" | 3112 | msgid "Failed to remove UBlock: %s\n" |
3097 | msgstr "打开日志文件“%s”失败:%s\n" | 3113 | msgstr "打开日志文件“%s”失败:%s\n" |
3098 | 3114 | ||
3099 | #: src/fs/fs_unindex.c:562 src/fs/fs_unindex.c:626 | 3115 | #: src/fs/fs_unindex.c:590 src/fs/fs_unindex.c:656 |
3100 | #, fuzzy | 3116 | #, fuzzy |
3101 | msgid "Failed to connect to `datastore' service." | 3117 | msgid "Failed to connect to `datastore' service." |
3102 | msgstr "初始化“%s”服务失败。\n" | 3118 | msgstr "初始化“%s”服务失败。\n" |
3103 | 3119 | ||
3104 | #: src/fs/fs_unindex.c:639 | 3120 | #: src/fs/fs_unindex.c:669 |
3105 | #, fuzzy | 3121 | #, fuzzy |
3106 | msgid "Failed to open file for unindexing." | 3122 | msgid "Failed to open file for unindexing." |
3107 | msgstr "打开日志文件“%s”失败:%s\n" | 3123 | msgstr "打开日志文件“%s”失败:%s\n" |
3108 | 3124 | ||
3109 | #: src/fs/fs_unindex.c:673 | 3125 | #: src/fs/fs_unindex.c:708 |
3110 | msgid "Failed to compute hash of file." | 3126 | msgid "Failed to compute hash of file." |
3111 | msgstr "" | 3127 | msgstr "" |
3112 | 3128 | ||
@@ -3678,88 +3694,88 @@ msgstr "" | |||
3678 | "\n" | 3694 | "\n" |
3679 | "按任意键继续\n" | 3695 | "按任意键继续\n" |
3680 | 3696 | ||
3681 | #: src/fs/gnunet-service-fs_cp.c:726 | 3697 | #: src/fs/gnunet-service-fs_cp.c:735 |
3682 | msgid "# migration stop messages received" | 3698 | msgid "# migration stop messages received" |
3683 | msgstr "" | 3699 | msgstr "" |
3684 | 3700 | ||
3685 | #: src/fs/gnunet-service-fs_cp.c:730 | 3701 | #: src/fs/gnunet-service-fs_cp.c:739 |
3686 | #, c-format | 3702 | #, c-format |
3687 | msgid "Migration of content to peer `%s' blocked for %s\n" | 3703 | msgid "Migration of content to peer `%s' blocked for %s\n" |
3688 | msgstr "" | 3704 | msgstr "" |
3689 | 3705 | ||
3690 | #: src/fs/gnunet-service-fs_cp.c:768 | 3706 | #: src/fs/gnunet-service-fs_cp.c:776 |
3691 | msgid "# replies transmitted to other peers" | 3707 | msgid "# replies transmitted to other peers" |
3692 | msgstr "" | 3708 | msgstr "" |
3693 | 3709 | ||
3694 | #: src/fs/gnunet-service-fs_cp.c:774 | 3710 | #: src/fs/gnunet-service-fs_cp.c:784 |
3695 | msgid "# replies dropped" | 3711 | msgid "# replies dropped" |
3696 | msgstr "" | 3712 | msgstr "" |
3697 | 3713 | ||
3698 | #: src/fs/gnunet-service-fs_cp.c:799 src/fs/gnunet-service-fs_cp.c:1384 | 3714 | #: src/fs/gnunet-service-fs_cp.c:810 src/fs/gnunet-service-fs_cp.c:1404 |
3699 | msgid "# P2P searches active" | 3715 | msgid "# P2P searches active" |
3700 | msgstr "" | 3716 | msgstr "" |
3701 | 3717 | ||
3702 | #: src/fs/gnunet-service-fs_cp.c:904 | 3718 | #: src/fs/gnunet-service-fs_cp.c:915 |
3703 | msgid "# artificial delays introduced (ms)" | 3719 | msgid "# artificial delays introduced (ms)" |
3704 | msgstr "" | 3720 | msgstr "" |
3705 | 3721 | ||
3706 | #: src/fs/gnunet-service-fs_cp.c:960 | 3722 | #: src/fs/gnunet-service-fs_cp.c:971 |
3707 | msgid "# replies dropped due to type mismatch" | 3723 | msgid "# replies dropped due to type mismatch" |
3708 | msgstr "" | 3724 | msgstr "" |
3709 | 3725 | ||
3710 | #: src/fs/gnunet-service-fs_cp.c:968 | 3726 | #: src/fs/gnunet-service-fs_cp.c:979 |
3711 | msgid "# replies received for other peers" | 3727 | msgid "# replies received for other peers" |
3712 | msgstr "" | 3728 | msgstr "" |
3713 | 3729 | ||
3714 | #: src/fs/gnunet-service-fs_cp.c:982 | 3730 | #: src/fs/gnunet-service-fs_cp.c:993 |
3715 | msgid "# replies dropped due to insufficient cover traffic" | 3731 | msgid "# replies dropped due to insufficient cover traffic" |
3716 | msgstr "" | 3732 | msgstr "" |
3717 | 3733 | ||
3718 | #: src/fs/gnunet-service-fs_cp.c:1030 | 3734 | #: src/fs/gnunet-service-fs_cp.c:1041 |
3719 | msgid "# P2P searches destroyed due to ultimate reply" | 3735 | msgid "# P2P searches destroyed due to ultimate reply" |
3720 | msgstr "" | 3736 | msgstr "" |
3721 | 3737 | ||
3722 | #: src/fs/gnunet-service-fs_cp.c:1098 | 3738 | #: src/fs/gnunet-service-fs_cp.c:1109 |
3723 | msgid "# requests done for free (low load)" | 3739 | msgid "# requests done for free (low load)" |
3724 | msgstr "" | 3740 | msgstr "" |
3725 | 3741 | ||
3726 | #: src/fs/gnunet-service-fs_cp.c:1123 | 3742 | #: src/fs/gnunet-service-fs_cp.c:1134 |
3727 | msgid "# request dropped, priority insufficient" | 3743 | msgid "# request dropped, priority insufficient" |
3728 | msgstr "" | 3744 | msgstr "" |
3729 | 3745 | ||
3730 | #: src/fs/gnunet-service-fs_cp.c:1133 | 3746 | #: src/fs/gnunet-service-fs_cp.c:1144 |
3731 | msgid "# requests done for a price (normal load)" | 3747 | msgid "# requests done for a price (normal load)" |
3732 | msgstr "" | 3748 | msgstr "" |
3733 | 3749 | ||
3734 | #: src/fs/gnunet-service-fs_cp.c:1210 | 3750 | #: src/fs/gnunet-service-fs_cp.c:1221 |
3735 | msgid "# GET requests received (from other peers)" | 3751 | msgid "# GET requests received (from other peers)" |
3736 | msgstr "" | 3752 | msgstr "" |
3737 | 3753 | ||
3738 | #: src/fs/gnunet-service-fs_cp.c:1245 | 3754 | #: src/fs/gnunet-service-fs_cp.c:1256 |
3739 | msgid "# requests dropped due to initiator not being connected" | 3755 | msgid "# requests dropped due to initiator not being connected" |
3740 | msgstr "" | 3756 | msgstr "" |
3741 | 3757 | ||
3742 | #: src/fs/gnunet-service-fs_cp.c:1266 | 3758 | #: src/fs/gnunet-service-fs_cp.c:1277 |
3743 | msgid "# requests dropped due to missing reverse route" | 3759 | msgid "# requests dropped due to missing reverse route" |
3744 | msgstr "" | 3760 | msgstr "" |
3745 | 3761 | ||
3746 | #: src/fs/gnunet-service-fs_cp.c:1277 | 3762 | #: src/fs/gnunet-service-fs_cp.c:1288 |
3747 | msgid "# requests dropped due to full reply queue" | 3763 | msgid "# requests dropped due to full reply queue" |
3748 | msgstr "" | 3764 | msgstr "" |
3749 | 3765 | ||
3750 | #: src/fs/gnunet-service-fs_cp.c:1329 | 3766 | #: src/fs/gnunet-service-fs_cp.c:1340 |
3751 | msgid "# requests dropped due TTL underflow" | 3767 | msgid "# requests dropped due TTL underflow" |
3752 | msgstr "" | 3768 | msgstr "" |
3753 | 3769 | ||
3754 | #: src/fs/gnunet-service-fs_cp.c:1353 | 3770 | #: src/fs/gnunet-service-fs_cp.c:1365 |
3755 | msgid "# requests dropped due to higher-TTL request" | 3771 | msgid "# requests dropped due to higher-TTL request" |
3756 | msgstr "" | 3772 | msgstr "" |
3757 | 3773 | ||
3758 | #: src/fs/gnunet-service-fs_cp.c:1382 | 3774 | #: src/fs/gnunet-service-fs_cp.c:1402 |
3759 | msgid "# P2P query messages received and processed" | 3775 | msgid "# P2P query messages received and processed" |
3760 | msgstr "" | 3776 | msgstr "" |
3761 | 3777 | ||
3762 | #: src/fs/gnunet-service-fs_cp.c:1821 | 3778 | #: src/fs/gnunet-service-fs_cp.c:1841 |
3763 | msgid "# migration stop messages sent" | 3779 | msgid "# migration stop messages sent" |
3764 | msgstr "" | 3780 | msgstr "" |
3765 | 3781 | ||
@@ -4082,7 +4098,7 @@ msgstr "" | |||
4082 | msgid "GNUnet DNS-to-GNS proxy (a DNS server)" | 4098 | msgid "GNUnet DNS-to-GNS proxy (a DNS server)" |
4083 | msgstr "" | 4099 | msgstr "" |
4084 | 4100 | ||
4085 | #: src/gns/gnunet-gns.c:215 | 4101 | #: src/gns/gnunet-gns.c:215 src/gns/plugin_rest_gns.c:334 |
4086 | #, c-format | 4102 | #, c-format |
4087 | msgid "Invalid typename specified, assuming `ANY'\n" | 4103 | msgid "Invalid typename specified, assuming `ANY'\n" |
4088 | msgstr "" | 4104 | msgstr "" |
@@ -4098,6 +4114,7 @@ msgid "Ego for `%s' not found, cannot perform lookup.\n" | |||
4098 | msgstr "" | 4114 | msgstr "" |
4099 | 4115 | ||
4100 | #: src/gns/gnunet-gns.c:353 src/gns/gnunet-gns-helper-service-w32.c:798 | 4116 | #: src/gns/gnunet-gns.c:353 src/gns/gnunet-gns-helper-service-w32.c:798 |
4117 | #: src/gns/plugin_rest_gns.c:459 | ||
4101 | #, c-format | 4118 | #, c-format |
4102 | msgid "" | 4119 | msgid "" |
4103 | "Ego for `gns-master' not found, cannot perform lookup. Did you run gnunet-" | 4120 | "Ego for `gns-master' not found, cannot perform lookup. Did you run gnunet-" |
@@ -4235,7 +4252,7 @@ msgstr "无法保存配置文件“%s”:" | |||
4235 | msgid "Failed to start HTTPS server for `%s'\n" | 4252 | msgid "Failed to start HTTPS server for `%s'\n" |
4236 | msgstr "初始化“%s”服务失败。\n" | 4253 | msgstr "初始化“%s”服务失败。\n" |
4237 | 4254 | ||
4238 | #: src/gns/gnunet-gns-proxy.c:2225 | 4255 | #: src/gns/gnunet-gns-proxy.c:2225 src/rest/gnunet-rest-server.c:529 |
4239 | #, fuzzy | 4256 | #, fuzzy |
4240 | msgid "Failed to pass client to MHD\n" | 4257 | msgid "Failed to pass client to MHD\n" |
4241 | msgstr "初始化“%s”服务失败。\n" | 4258 | msgstr "初始化“%s”服务失败。\n" |
@@ -4339,21 +4356,21 @@ msgstr "" | |||
4339 | msgid "GNS lookup resulted in DNS name that is too long (`%s')\n" | 4356 | msgid "GNS lookup resulted in DNS name that is too long (`%s')\n" |
4340 | msgstr "" | 4357 | msgstr "" |
4341 | 4358 | ||
4342 | #: src/gns/gnunet-service-gns_resolver.c:1886 | 4359 | #: src/gns/gnunet-service-gns_resolver.c:1891 |
4343 | msgid "GNS lookup recursion failed (no delegation record found)\n" | 4360 | msgid "GNS lookup recursion failed (no delegation record found)\n" |
4344 | msgstr "" | 4361 | msgstr "" |
4345 | 4362 | ||
4346 | #: src/gns/gnunet-service-gns_resolver.c:1910 | 4363 | #: src/gns/gnunet-service-gns_resolver.c:1915 |
4347 | #, fuzzy, c-format | 4364 | #, fuzzy, c-format |
4348 | msgid "Failed to cache GNS resolution: %s\n" | 4365 | msgid "Failed to cache GNS resolution: %s\n" |
4349 | msgstr "打开日志文件“%s”失败:%s\n" | 4366 | msgstr "打开日志文件“%s”失败:%s\n" |
4350 | 4367 | ||
4351 | #: src/gns/gnunet-service-gns_resolver.c:2192 | 4368 | #: src/gns/gnunet-service-gns_resolver.c:2197 |
4352 | #, c-format | 4369 | #, c-format |
4353 | msgid "Zone %s was revoked, resolution fails\n" | 4370 | msgid "Zone %s was revoked, resolution fails\n" |
4354 | msgstr "" | 4371 | msgstr "" |
4355 | 4372 | ||
4356 | #: src/gns/gnunet-service-gns_resolver.c:2341 | 4373 | #: src/gns/gnunet-service-gns_resolver.c:2346 |
4357 | #, c-format | 4374 | #, c-format |
4358 | msgid "Hostname `%s' is not well-formed, resolution fails\n" | 4375 | msgid "Hostname `%s' is not well-formed, resolution fails\n" |
4359 | msgstr "" | 4376 | msgstr "" |
@@ -4383,6 +4400,14 @@ msgstr "解析配置文件“%s”失败\n" | |||
4383 | msgid "Unable to parse BOX record string `%s'\n" | 4400 | msgid "Unable to parse BOX record string `%s'\n" |
4384 | msgstr "解析配置文件“%s”失败\n" | 4401 | msgstr "解析配置文件“%s”失败\n" |
4385 | 4402 | ||
4403 | #: src/gns/plugin_rest_gns.c:422 | ||
4404 | msgid "Ego for not found, cannot perform lookup.\n" | ||
4405 | msgstr "" | ||
4406 | |||
4407 | #: src/gns/plugin_rest_gns.c:652 | ||
4408 | msgid "GNS REST API initialized\n" | ||
4409 | msgstr "" | ||
4410 | |||
4386 | #: src/gnsrecord/plugin_gnsrecord_dns.c:291 | 4411 | #: src/gnsrecord/plugin_gnsrecord_dns.c:291 |
4387 | #, fuzzy, c-format | 4412 | #, fuzzy, c-format |
4388 | msgid "Unable to parse IPv4 address `%s'\n" | 4413 | msgid "Unable to parse IPv4 address `%s'\n" |
@@ -4899,6 +4924,10 @@ msgstr "解析配置文件“%s”失败\n" | |||
4899 | msgid "Failed to create directory `%s' for storing egos\n" | 4924 | msgid "Failed to create directory `%s' for storing egos\n" |
4900 | msgstr "解析配置文件“%s”失败\n" | 4925 | msgstr "解析配置文件“%s”失败\n" |
4901 | 4926 | ||
4927 | #: src/identity/plugin_rest_identity.c:803 | ||
4928 | msgid "Identity REST API initialized\n" | ||
4929 | msgstr "" | ||
4930 | |||
4902 | #: src/mysql/mysql.c:174 | 4931 | #: src/mysql/mysql.c:174 |
4903 | #, c-format | 4932 | #, c-format |
4904 | msgid "Trying to use file `%s' for MySQL configuration.\n" | 4933 | msgid "Trying to use file `%s' for MySQL configuration.\n" |
@@ -4924,9 +4953,9 @@ msgstr "" | |||
4924 | msgid "You must specify which zone should be accessed\n" | 4953 | msgid "You must specify which zone should be accessed\n" |
4925 | msgstr "您必须指定一个昵称\n" | 4954 | msgstr "您必须指定一个昵称\n" |
4926 | 4955 | ||
4927 | #: src/namecache/gnunet-namecache.c:195 src/namestore/gnunet-namestore.c:844 | 4956 | #: src/namecache/gnunet-namecache.c:195 |
4928 | #, fuzzy, c-format | 4957 | #, fuzzy, c-format |
4929 | msgid "Invalid public key for reverse lookup `%s'\n" | 4958 | msgid "Invalid public key for zone `%s'\n" |
4930 | msgstr "“%s”的参数无效。\n" | 4959 | msgstr "“%s”的参数无效。\n" |
4931 | 4960 | ||
4932 | #: src/namecache/gnunet-namecache.c:203 | 4961 | #: src/namecache/gnunet-namecache.c:203 |
@@ -4963,11 +4992,13 @@ msgid "Adding record failed: %s\n" | |||
4963 | msgstr "" | 4992 | msgstr "" |
4964 | 4993 | ||
4965 | #: src/namestore/gnunet-namestore.c:332 | 4994 | #: src/namestore/gnunet-namestore.c:332 |
4995 | #: src/namestore/plugin_rest_namestore.c:505 | ||
4966 | #, c-format | 4996 | #, c-format |
4967 | msgid "Deleting record failed, record does not exist%s%s\n" | 4997 | msgid "Deleting record failed, record does not exist%s%s\n" |
4968 | msgstr "" | 4998 | msgstr "" |
4969 | 4999 | ||
4970 | #: src/namestore/gnunet-namestore.c:339 | 5000 | #: src/namestore/gnunet-namestore.c:339 |
5001 | #: src/namestore/plugin_rest_namestore.c:514 | ||
4971 | #, c-format | 5002 | #, c-format |
4972 | msgid "Deleting record failed%s%s\n" | 5003 | msgid "Deleting record failed%s%s\n" |
4973 | msgstr "" | 5004 | msgstr "" |
@@ -4985,6 +5016,7 @@ msgid "Records already exist under `%s', cannot add `%s' record.\n" | |||
4985 | msgstr "" | 5016 | msgstr "" |
4986 | 5017 | ||
4987 | #: src/namestore/gnunet-namestore.c:628 | 5018 | #: src/namestore/gnunet-namestore.c:628 |
5019 | #: src/namestore/plugin_rest_namestore.c:538 | ||
4988 | #, c-format | 5020 | #, c-format |
4989 | msgid "There are no records under label `%s' that could be deleted.\n" | 5021 | msgid "There are no records under label `%s' that could be deleted.\n" |
4990 | msgstr "" | 5022 | msgstr "" |
@@ -5002,6 +5034,7 @@ msgstr "" | |||
5002 | 5034 | ||
5003 | #: src/namestore/gnunet-namestore.c:719 | 5035 | #: src/namestore/gnunet-namestore.c:719 |
5004 | #: src/namestore/gnunet-namestore-fcfsd.c:984 | 5036 | #: src/namestore/gnunet-namestore-fcfsd.c:984 |
5037 | #: src/namestore/plugin_rest_namestore.c:821 | ||
5005 | #, fuzzy | 5038 | #, fuzzy |
5006 | msgid "Failed to connect to namestore\n" | 5039 | msgid "Failed to connect to namestore\n" |
5007 | msgstr "初始化“%s”服务失败。\n" | 5040 | msgstr "初始化“%s”服务失败。\n" |
@@ -5019,11 +5052,14 @@ msgid "add" | |||
5019 | msgstr "" | 5052 | msgstr "" |
5020 | 5053 | ||
5021 | #: src/namestore/gnunet-namestore.c:745 | 5054 | #: src/namestore/gnunet-namestore.c:745 |
5055 | #: src/namestore/plugin_rest_namestore.c:608 | ||
5022 | #, fuzzy, c-format | 5056 | #, fuzzy, c-format |
5023 | msgid "Unsupported type `%s'\n" | 5057 | msgid "Unsupported type `%s'\n" |
5024 | msgstr "未知的命令“%s”。\n" | 5058 | msgstr "未知的命令“%s”。\n" |
5025 | 5059 | ||
5026 | #: src/namestore/gnunet-namestore.c:765 | 5060 | #: src/namestore/gnunet-namestore.c:765 |
5061 | #: src/namestore/plugin_rest_namestore.c:626 | ||
5062 | #: src/namestore/plugin_rest_namestore.c:666 | ||
5027 | #, c-format | 5063 | #, c-format |
5028 | msgid "Value `%s' invalid for record type `%s'\n" | 5064 | msgid "Value `%s' invalid for record type `%s'\n" |
5029 | msgstr "" | 5065 | msgstr "" |
@@ -5037,6 +5073,11 @@ msgstr "IP 格式无效:“%s”\n" | |||
5037 | msgid "del" | 5073 | msgid "del" |
5038 | msgstr "" | 5074 | msgstr "" |
5039 | 5075 | ||
5076 | #: src/namestore/gnunet-namestore.c:844 | ||
5077 | #, fuzzy, c-format | ||
5078 | msgid "Invalid public key for reverse lookup `%s'\n" | ||
5079 | msgstr "“%s”的参数无效。\n" | ||
5080 | |||
5040 | #: src/namestore/gnunet-namestore.c:868 | 5081 | #: src/namestore/gnunet-namestore.c:868 |
5041 | #: src/peerinfo-tool/gnunet-peerinfo.c:817 | 5082 | #: src/peerinfo-tool/gnunet-peerinfo.c:817 |
5042 | #, fuzzy, c-format | 5083 | #, fuzzy, c-format |
@@ -5049,21 +5090,25 @@ msgid "Invalid nick `%s'\n" | |||
5049 | msgstr "无效条目。\n" | 5090 | msgstr "无效条目。\n" |
5050 | 5091 | ||
5051 | #: src/namestore/gnunet-namestore.c:943 | 5092 | #: src/namestore/gnunet-namestore.c:943 |
5093 | #: src/namestore/plugin_rest_namestore.c:851 | ||
5052 | #, c-format | 5094 | #, c-format |
5053 | msgid "Ego `%s' not known to identity service\n" | 5095 | msgid "Ego `%s' not known to identity service\n" |
5054 | msgstr "" | 5096 | msgstr "" |
5055 | 5097 | ||
5056 | #: src/namestore/gnunet-namestore.c:970 | 5098 | #: src/namestore/gnunet-namestore.c:970 |
5099 | #: src/namestore/plugin_rest_namestore.c:878 | ||
5057 | #, c-format | 5100 | #, c-format |
5058 | msgid "No default ego configured in identity service\n" | 5101 | msgid "No default ego configured in identity service\n" |
5059 | msgstr "" | 5102 | msgstr "" |
5060 | 5103 | ||
5061 | #: src/namestore/gnunet-namestore.c:1006 | 5104 | #: src/namestore/gnunet-namestore.c:1006 |
5105 | #: src/namestore/plugin_rest_namestore.c:917 | ||
5062 | #, fuzzy, c-format | 5106 | #, fuzzy, c-format |
5063 | msgid "Identity service is not running\n" | 5107 | msgid "Identity service is not running\n" |
5064 | msgstr "服务已删除。\n" | 5108 | msgstr "服务已删除。\n" |
5065 | 5109 | ||
5066 | #: src/namestore/gnunet-namestore.c:1018 | 5110 | #: src/namestore/gnunet-namestore.c:1018 |
5111 | #: src/namestore/plugin_rest_namestore.c:946 | ||
5067 | #, fuzzy, c-format | 5112 | #, fuzzy, c-format |
5068 | msgid "Cannot connect to identity service\n" | 5113 | msgid "Cannot connect to identity service\n" |
5069 | msgstr "无法连接到 %s:%u:%s\n" | 5114 | msgstr "无法连接到 %s:%u:%s\n" |
@@ -5195,6 +5240,10 @@ msgstr "发送消息失败。\n" | |||
5195 | msgid "Namestore failed to store record\n" | 5240 | msgid "Namestore failed to store record\n" |
5196 | msgstr "" | 5241 | msgstr "" |
5197 | 5242 | ||
5243 | #: src/namestore/plugin_rest_namestore.c:1023 | ||
5244 | msgid "Namestore REST API initialized\n" | ||
5245 | msgstr "" | ||
5246 | |||
5198 | #: src/nat/gnunet-nat-server.c:279 | 5247 | #: src/nat/gnunet-nat-server.c:279 |
5199 | #, c-format | 5248 | #, c-format |
5200 | msgid "Please pass valid port number as the first argument! (got `%s')\n" | 5249 | msgid "Please pass valid port number as the first argument! (got `%s')\n" |
@@ -5439,7 +5488,7 @@ msgid "Measure quality and performance of the NSE service." | |||
5439 | msgstr "无法访问该服务" | 5488 | msgstr "无法访问该服务" |
5440 | 5489 | ||
5441 | #: src/nse/gnunet-service-nse.c:1537 | 5490 | #: src/nse/gnunet-service-nse.c:1537 |
5442 | #: src/revocation/gnunet-service-revocation.c:815 src/util/gnunet-scrypt.c:260 | 5491 | #: src/revocation/gnunet-service-revocation.c:827 src/util/gnunet-scrypt.c:260 |
5443 | #, fuzzy | 5492 | #, fuzzy |
5444 | msgid "Value is too large.\n" | 5493 | msgid "Value is too large.\n" |
5445 | msgstr "值不在合法范围内。" | 5494 | msgstr "值不在合法范围内。" |
@@ -5970,6 +6019,15 @@ msgstr "" | |||
5970 | msgid "Regex `%s' is too long!\n" | 6019 | msgid "Regex `%s' is too long!\n" |
5971 | msgstr "服务已删除。\n" | 6020 | msgstr "服务已删除。\n" |
5972 | 6021 | ||
6022 | #: src/rest/gnunet-rest-server.c:766 | ||
6023 | msgid "listen on specified port (default: 7776)" | ||
6024 | msgstr "" | ||
6025 | |||
6026 | #: src/rest/gnunet-rest-server.c:783 | ||
6027 | #, fuzzy | ||
6028 | msgid "GNUnet REST server" | ||
6029 | msgstr "GNUnet 错误日志" | ||
6030 | |||
5973 | #: src/revocation/gnunet-revocation.c:126 | 6031 | #: src/revocation/gnunet-revocation.c:126 |
5974 | #, c-format | 6032 | #, c-format |
5975 | msgid "Key `%s' is valid\n" | 6033 | msgid "Key `%s' is valid\n" |
@@ -6098,11 +6156,11 @@ msgid "# revocation set unions completed" | |||
6098 | msgstr "" | 6156 | msgstr "" |
6099 | 6157 | ||
6100 | #: src/revocation/gnunet-service-revocation.c:493 | 6158 | #: src/revocation/gnunet-service-revocation.c:493 |
6101 | #: src/revocation/gnunet-service-revocation.c:747 | 6159 | #: src/revocation/gnunet-service-revocation.c:759 |
6102 | msgid "SET service crashed, terminating revocation service\n" | 6160 | msgid "SET service crashed, terminating revocation service\n" |
6103 | msgstr "" | 6161 | msgstr "" |
6104 | 6162 | ||
6105 | #: src/revocation/gnunet-service-revocation.c:839 | 6163 | #: src/revocation/gnunet-service-revocation.c:851 |
6106 | #, fuzzy | 6164 | #, fuzzy |
6107 | msgid "Could not open revocation database file!" | 6165 | msgid "Could not open revocation database file!" |
6108 | msgstr "无法连接到 %s:%u:%s\n" | 6166 | msgstr "无法连接到 %s:%u:%s\n" |
@@ -7795,7 +7853,7 @@ msgid "Found %u addresses to report to NAT service\n" | |||
7795 | msgstr "" | 7853 | msgstr "" |
7796 | 7854 | ||
7797 | #: src/transport/plugin_transport_http_server.c:2825 | 7855 | #: src/transport/plugin_transport_http_server.c:2825 |
7798 | #: src/transport/plugin_transport_udp.c:3336 | 7856 | #: src/transport/plugin_transport_udp.c:3335 |
7799 | msgid "Disabling IPv6 since it is not supported on this system!\n" | 7857 | msgid "Disabling IPv6 since it is not supported on this system!\n" |
7800 | msgstr "" | 7858 | msgstr "" |
7801 | 7859 | ||
@@ -8026,50 +8084,50 @@ msgstr "" | |||
8026 | msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" | 8084 | msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" |
8027 | msgstr "" | 8085 | msgstr "" |
8028 | 8086 | ||
8029 | #: src/transport/plugin_transport_udp.c:3082 | 8087 | #: src/transport/plugin_transport_udp.c:3081 |
8030 | #, c-format | 8088 | #, c-format |
8031 | msgid "" | 8089 | msgid "" |
8032 | "UDP could not transmit message to `%s': Network seems down, please check " | 8090 | "UDP could not transmit message to `%s': Network seems down, please check " |
8033 | "your network configuration\n" | 8091 | "your network configuration\n" |
8034 | msgstr "" | 8092 | msgstr "" |
8035 | 8093 | ||
8036 | #: src/transport/plugin_transport_udp.c:3096 | 8094 | #: src/transport/plugin_transport_udp.c:3095 |
8037 | msgid "" | 8095 | msgid "" |
8038 | "UDP could not transmit IPv6 message! Please check your network configuration " | 8096 | "UDP could not transmit IPv6 message! Please check your network configuration " |
8039 | "and disable IPv6 if your connection does not have a global IPv6 address\n" | 8097 | "and disable IPv6 if your connection does not have a global IPv6 address\n" |
8040 | msgstr "" | 8098 | msgstr "" |
8041 | 8099 | ||
8042 | #: src/transport/plugin_transport_udp.c:3412 | 8100 | #: src/transport/plugin_transport_udp.c:3411 |
8043 | #: src/transport/plugin_transport_udp.c:3511 | 8101 | #: src/transport/plugin_transport_udp.c:3510 |
8044 | #, fuzzy, c-format | 8102 | #, fuzzy, c-format |
8045 | msgid "Failed to bind UDP socket to %s: %s\n" | 8103 | msgid "Failed to bind UDP socket to %s: %s\n" |
8046 | msgstr "打开日志文件“%s”失败:%s\n" | 8104 | msgstr "打开日志文件“%s”失败:%s\n" |
8047 | 8105 | ||
8048 | #: src/transport/plugin_transport_udp.c:3430 | 8106 | #: src/transport/plugin_transport_udp.c:3429 |
8049 | msgid "Disabling IPv4 since it is not supported on this system!\n" | 8107 | msgid "Disabling IPv4 since it is not supported on this system!\n" |
8050 | msgstr "" | 8108 | msgstr "" |
8051 | 8109 | ||
8052 | #: src/transport/plugin_transport_udp.c:3521 | 8110 | #: src/transport/plugin_transport_udp.c:3520 |
8053 | #, fuzzy | 8111 | #, fuzzy |
8054 | msgid "Failed to open UDP sockets\n" | 8112 | msgid "Failed to open UDP sockets\n" |
8055 | msgstr "打开日志文件“%s”失败:%s\n" | 8113 | msgstr "打开日志文件“%s”失败:%s\n" |
8056 | 8114 | ||
8057 | #: src/transport/plugin_transport_udp.c:3592 | 8115 | #: src/transport/plugin_transport_udp.c:3591 |
8058 | #: src/transport/plugin_transport_udp.c:3606 | 8116 | #: src/transport/plugin_transport_udp.c:3605 |
8059 | msgid "must be in [0,65535]" | 8117 | msgid "must be in [0,65535]" |
8060 | msgstr "" | 8118 | msgstr "" |
8061 | 8119 | ||
8062 | #: src/transport/plugin_transport_udp.c:3638 | 8120 | #: src/transport/plugin_transport_udp.c:3637 |
8063 | #, fuzzy | 8121 | #, fuzzy |
8064 | msgid "must be valid IPv4 address" | 8122 | msgid "must be valid IPv4 address" |
8065 | msgstr "“%s”不可用。\n" | 8123 | msgstr "“%s”不可用。\n" |
8066 | 8124 | ||
8067 | #: src/transport/plugin_transport_udp.c:3665 | 8125 | #: src/transport/plugin_transport_udp.c:3664 |
8068 | #, fuzzy | 8126 | #, fuzzy |
8069 | msgid "must be valid IPv6 address" | 8127 | msgid "must be valid IPv6 address" |
8070 | msgstr "“%s”不可用。\n" | 8128 | msgstr "“%s”不可用。\n" |
8071 | 8129 | ||
8072 | #: src/transport/plugin_transport_udp.c:3731 | 8130 | #: src/transport/plugin_transport_udp.c:3730 |
8073 | #, fuzzy | 8131 | #, fuzzy |
8074 | msgid "Failed to create UDP network sockets\n" | 8132 | msgid "Failed to create UDP network sockets\n" |
8075 | msgstr "发送消息失败。\n" | 8133 | msgstr "发送消息失败。\n" |
@@ -8280,24 +8338,24 @@ msgstr "配置不满足配置规范文件“%s”的约束!\n" | |||
8280 | msgid "Syntax error while deserializing in line %u\n" | 8338 | msgid "Syntax error while deserializing in line %u\n" |
8281 | msgstr "配置文件“%s”第 %d 行有语法错误。\n" | 8339 | msgstr "配置文件“%s”第 %d 行有语法错误。\n" |
8282 | 8340 | ||
8283 | #: src/util/configuration.c:1026 | 8341 | #: src/util/configuration.c:1025 |
8284 | #, c-format | 8342 | #, c-format |
8285 | msgid "" | 8343 | msgid "" |
8286 | "Configuration value '%s' for '%s' in section '%s' is not in set of legal " | 8344 | "Configuration value '%s' for '%s' in section '%s' is not in set of legal " |
8287 | "choices\n" | 8345 | "choices\n" |
8288 | msgstr "" | 8346 | msgstr "" |
8289 | 8347 | ||
8290 | #: src/util/configuration.c:1145 | 8348 | #: src/util/configuration.c:1144 |
8291 | #, c-format | 8349 | #, c-format |
8292 | msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n" | 8350 | msgid "Recursive expansion suspected, aborting $-expansion for term `%s'\n" |
8293 | msgstr "" | 8351 | msgstr "" |
8294 | 8352 | ||
8295 | #: src/util/configuration.c:1177 | 8353 | #: src/util/configuration.c:1176 |
8296 | #, fuzzy, c-format | 8354 | #, fuzzy, c-format |
8297 | msgid "Missing closing `%s' in option `%s'\n" | 8355 | msgid "Missing closing `%s' in option `%s'\n" |
8298 | msgstr "配置文件“%s”已写入。\n" | 8356 | msgstr "配置文件“%s”已写入。\n" |
8299 | 8357 | ||
8300 | #: src/util/configuration.c:1251 | 8358 | #: src/util/configuration.c:1250 |
8301 | #, c-format | 8359 | #, c-format |
8302 | msgid "" | 8360 | msgid "" |
8303 | "Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined " | 8361 | "Failed to expand `%s' in `%s' as it is neither found in [PATHS] nor defined " |
@@ -8321,52 +8379,52 @@ msgid "" | |||
8321 | "%llu)\n" | 8379 | "%llu)\n" |
8322 | msgstr "" | 8380 | msgstr "" |
8323 | 8381 | ||
8324 | #: src/util/crypto_ecc.c:731 src/util/crypto_ecc.c:769 | 8382 | #: src/util/crypto_ecc.c:733 src/util/crypto_ecc.c:771 |
8325 | #: src/util/crypto_ecc.c:887 src/util/crypto_ecc.c:925 | 8383 | #: src/util/crypto_ecc.c:889 src/util/crypto_ecc.c:927 |
8326 | #, fuzzy, c-format | 8384 | #, fuzzy, c-format |
8327 | msgid "Could not acquire lock on file `%s': %s...\n" | 8385 | msgid "Could not acquire lock on file `%s': %s...\n" |
8328 | msgstr "无法解析“%s”(%s):%s\n" | 8386 | msgstr "无法解析“%s”(%s):%s\n" |
8329 | 8387 | ||
8330 | #: src/util/crypto_ecc.c:736 src/util/crypto_ecc.c:892 | 8388 | #: src/util/crypto_ecc.c:738 src/util/crypto_ecc.c:894 |
8331 | #, fuzzy | 8389 | #, fuzzy |
8332 | msgid "Creating a new private key. This may take a while.\n" | 8390 | msgid "Creating a new private key. This may take a while.\n" |
8333 | msgstr "正在启动数据仓库转换(可能需要一段时间)。\n" | 8391 | msgstr "正在启动数据仓库转换(可能需要一段时间)。\n" |
8334 | 8392 | ||
8335 | #: src/util/crypto_ecc.c:773 src/util/crypto_ecc.c:929 | 8393 | #: src/util/crypto_ecc.c:775 src/util/crypto_ecc.c:931 |
8336 | msgid "This may be ok if someone is currently generating a private key.\n" | 8394 | msgid "This may be ok if someone is currently generating a private key.\n" |
8337 | msgstr "" | 8395 | msgstr "" |
8338 | 8396 | ||
8339 | #: src/util/crypto_ecc.c:803 src/util/crypto_ecc.c:959 | 8397 | #: src/util/crypto_ecc.c:805 src/util/crypto_ecc.c:961 |
8340 | #, c-format | 8398 | #, c-format |
8341 | msgid "" | 8399 | msgid "" |
8342 | "When trying to read key file `%s' I found %u bytes but I need at least %u.\n" | 8400 | "When trying to read key file `%s' I found %u bytes but I need at least %u.\n" |
8343 | msgstr "" | 8401 | msgstr "" |
8344 | 8402 | ||
8345 | #: src/util/crypto_ecc.c:807 src/util/crypto_ecc.c:963 | 8403 | #: src/util/crypto_ecc.c:809 src/util/crypto_ecc.c:965 |
8346 | msgid "This may be ok if someone is currently generating a key.\n" | 8404 | msgid "This may be ok if someone is currently generating a key.\n" |
8347 | msgstr "" | 8405 | msgstr "" |
8348 | 8406 | ||
8349 | #: src/util/crypto_ecc.c:1045 | 8407 | #: src/util/crypto_ecc.c:1047 |
8350 | #, fuzzy | 8408 | #, fuzzy |
8351 | msgid "Could not load peer's private key\n" | 8409 | msgid "Could not load peer's private key\n" |
8352 | msgstr "找不到接口“%s”的一个 IP 地址。\n" | 8410 | msgstr "找不到接口“%s”的一个 IP 地址。\n" |
8353 | 8411 | ||
8354 | #: src/util/crypto_ecc.c:1149 | 8412 | #: src/util/crypto_ecc.c:1151 |
8355 | #, fuzzy, c-format | 8413 | #, fuzzy, c-format |
8356 | msgid "ECC signing failed at %s:%d: %s\n" | 8414 | msgid "ECC signing failed at %s:%d: %s\n" |
8357 | msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n" | 8415 | msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n" |
8358 | 8416 | ||
8359 | #: src/util/crypto_ecc.c:1199 | 8417 | #: src/util/crypto_ecc.c:1201 |
8360 | #, fuzzy, c-format | 8418 | #, fuzzy, c-format |
8361 | msgid "EdDSA signing failed at %s:%d: %s\n" | 8419 | msgid "EdDSA signing failed at %s:%d: %s\n" |
8362 | msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n" | 8420 | msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n" |
8363 | 8421 | ||
8364 | #: src/util/crypto_ecc.c:1273 | 8422 | #: src/util/crypto_ecc.c:1275 |
8365 | #, fuzzy, c-format | 8423 | #, fuzzy, c-format |
8366 | msgid "ECDSA signature verification failed at %s:%d: %s\n" | 8424 | msgid "ECDSA signature verification failed at %s:%d: %s\n" |
8367 | msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n" | 8425 | msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n" |
8368 | 8426 | ||
8369 | #: src/util/crypto_ecc.c:1330 | 8427 | #: src/util/crypto_ecc.c:1332 |
8370 | #, fuzzy, c-format | 8428 | #, fuzzy, c-format |
8371 | msgid "EdDSA signature verification failed at %s:%d: %s\n" | 8429 | msgid "EdDSA signature verification failed at %s:%d: %s\n" |
8372 | msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n" | 8430 | msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n" |
@@ -8376,17 +8434,17 @@ msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n" | |||
8376 | msgid "libgcrypt has not the expected version (version %s is required).\n" | 8434 | msgid "libgcrypt has not the expected version (version %s is required).\n" |
8377 | msgstr "libgcrypt 的版本不符合预期(要求版本 %s)。\n" | 8435 | msgstr "libgcrypt 的版本不符合预期(要求版本 %s)。\n" |
8378 | 8436 | ||
8379 | #: src/util/crypto_rsa.c:809 | 8437 | #: src/util/crypto_rsa.c:825 |
8380 | #, fuzzy, c-format | 8438 | #, fuzzy, c-format |
8381 | msgid "RSA signature verification failed at %s:%d: %s\n" | 8439 | msgid "RSA signature verification failed at %s:%d: %s\n" |
8382 | msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n" | 8440 | msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n" |
8383 | 8441 | ||
8384 | #: src/util/disk.c:1218 | 8442 | #: src/util/disk.c:1222 |
8385 | #, c-format | 8443 | #, c-format |
8386 | msgid "Expected `%s' to be a directory!\n" | 8444 | msgid "Expected `%s' to be a directory!\n" |
8387 | msgstr "“%s”应为目录!\n" | 8445 | msgstr "“%s”应为目录!\n" |
8388 | 8446 | ||
8389 | #: src/util/disk.c:1580 src/util/service.c:1328 | 8447 | #: src/util/disk.c:1584 src/util/service.c:1328 |
8390 | #, c-format | 8448 | #, c-format |
8391 | msgid "Cannot obtain information about user `%s': %s\n" | 8449 | msgid "Cannot obtain information about user `%s': %s\n" |
8392 | msgstr "无法获取有关用户“%s”的信息:%s\n" | 8450 | msgstr "无法获取有关用户“%s”的信息:%s\n" |
@@ -8451,18 +8509,18 @@ msgstr "%s:选项“-W %s” 不允许有参数\n" | |||
8451 | msgid "Use %s to get a list of options.\n" | 8509 | msgid "Use %s to get a list of options.\n" |
8452 | msgstr "请使用 --help 获取选项列表。\n" | 8510 | msgstr "请使用 --help 获取选项列表。\n" |
8453 | 8511 | ||
8454 | #: src/util/getopt_helpers.c:84 | 8512 | #: src/util/getopt_helpers.c:90 |
8455 | #, c-format | 8513 | #, c-format |
8456 | msgid "" | 8514 | msgid "" |
8457 | "Arguments mandatory for long options are also mandatory for short options.\n" | 8515 | "Arguments mandatory for long options are also mandatory for short options.\n" |
8458 | msgstr "长选项的必选参数对短选项也是必选的。\n" | 8516 | msgstr "长选项的必选参数对短选项也是必选的。\n" |
8459 | 8517 | ||
8460 | #: src/util/getopt_helpers.c:268 src/util/getopt_helpers.c:326 | 8518 | #: src/util/getopt_helpers.c:274 src/util/getopt_helpers.c:332 |
8461 | #, c-format | 8519 | #, c-format |
8462 | msgid "You must pass a number to the `%s' option.\n" | 8520 | msgid "You must pass a number to the `%s' option.\n" |
8463 | msgstr "您必须向“%s”选项传递一个数字。\n" | 8521 | msgstr "您必须向“%s”选项传递一个数字。\n" |
8464 | 8522 | ||
8465 | #: src/util/getopt_helpers.c:298 | 8523 | #: src/util/getopt_helpers.c:304 |
8466 | #, fuzzy, c-format | 8524 | #, fuzzy, c-format |
8467 | msgid "You must pass relative time to the `%s' option.\n" | 8525 | msgid "You must pass relative time to the `%s' option.\n" |
8468 | msgstr "您必须向“%s”选项传递一个数字。\n" | 8526 | msgstr "您必须向“%s”选项传递一个数字。\n" |
@@ -8705,22 +8763,22 @@ msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n" | |||
8705 | msgid "GetExitCodeProcess failed for binary %s (%d).\n" | 8763 | msgid "GetExitCodeProcess failed for binary %s (%d).\n" |
8706 | msgstr "" | 8764 | msgstr "" |
8707 | 8765 | ||
8708 | #: src/util/plugin.c:87 | 8766 | #: src/util/plugin.c:86 |
8709 | #, c-format | 8767 | #, c-format |
8710 | msgid "Initialization of plugin mechanism failed: %s!\n" | 8768 | msgid "Initialization of plugin mechanism failed: %s!\n" |
8711 | msgstr "插件机构初始化失败:%s!\n" | 8769 | msgstr "插件机构初始化失败:%s!\n" |
8712 | 8770 | ||
8713 | #: src/util/plugin.c:148 | 8771 | #: src/util/plugin.c:151 |
8714 | #, c-format | 8772 | #, c-format |
8715 | msgid "`%s' failed to resolve method '%s' with error: %s\n" | 8773 | msgid "`%s' failed to resolve method '%s' with error: %s\n" |
8716 | msgstr "" | 8774 | msgstr "" |
8717 | 8775 | ||
8718 | #: src/util/plugin.c:223 | 8776 | #: src/util/plugin.c:226 |
8719 | #, c-format | 8777 | #, c-format |
8720 | msgid "`%s' failed for library `%s' with error: %s\n" | 8778 | msgid "`%s' failed for library `%s' with error: %s\n" |
8721 | msgstr "" | 8779 | msgstr "" |
8722 | 8780 | ||
8723 | #: src/util/plugin.c:382 | 8781 | #: src/util/plugin.c:385 |
8724 | #, fuzzy | 8782 | #, fuzzy |
8725 | msgid "Could not determine plugin installation path.\n" | 8783 | msgid "Could not determine plugin installation path.\n" |
8726 | msgstr "无法确定用户界面定义文件。" | 8784 | msgstr "无法确定用户界面定义文件。" |
diff --git a/src/dht/Makefile.am b/src/dht/Makefile.am index 835e1dc2a..0dca26901 100644 --- a/src/dht/Makefile.am +++ b/src/dht/Makefile.am | |||
@@ -48,7 +48,8 @@ libgnunet_plugin_block_dht_la_LDFLAGS = \ | |||
48 | 48 | ||
49 | libexec_PROGRAMS = \ | 49 | libexec_PROGRAMS = \ |
50 | gnunet-service-dht \ | 50 | gnunet-service-dht \ |
51 | gnunet-service-dht-xvine | 51 | gnunet-service-dht-xvine\ |
52 | gnunet-service-dht-whanau | ||
52 | 53 | ||
53 | noinst_PROGRAMS = \ | 54 | noinst_PROGRAMS = \ |
54 | gnunet-dht-monitor \ | 55 | gnunet-dht-monitor \ |
@@ -98,7 +99,26 @@ gnunet_service_dht_xvine_LDADD = \ | |||
98 | $(top_builddir)/src/util/libgnunetutil.la \ | 99 | $(top_builddir)/src/util/libgnunetutil.la \ |
99 | -lm | 100 | -lm |
100 | 101 | ||
101 | 102 | gnunet_service_dht_whanau_SOURCES = \ | |
103 | gnunet-service-wdht.c gnunet-service-wdht.h \ | ||
104 | gnunet-service-wdht_clients.c gnunet-service-wdht_clients.h \ | ||
105 | gnunet-service-wdht_datacache.c gnunet-service-wdht_datacache.h \ | ||
106 | gnunet-service-wdht_hello.c gnunet-service-wdht_hello.h \ | ||
107 | gnunet-service-wdht_nse.c gnunet-service-wdht_nse.h \ | ||
108 | gnunet-service-wdht_neighbours.c gnunet-service-wdht_neighbours.h \ | ||
109 | gnunet-service-wdht_routing.c gnunet-service-wdht_routing.h | ||
110 | gnunet_service_dht_whanau_LDADD = \ | ||
111 | $(top_builddir)/src/statistics/libgnunetstatistics.la \ | ||
112 | $(top_builddir)/src/core/libgnunetcore.la \ | ||
113 | $(top_builddir)/src/nse/libgnunetnse.la \ | ||
114 | $(top_builddir)/src/ats/libgnunetats.la \ | ||
115 | $(top_builddir)/src/transport/libgnunettransport.la \ | ||
116 | $(top_builddir)/src/peerinfo/libgnunetpeerinfo.la \ | ||
117 | $(top_builddir)/src/hello/libgnunethello.la \ | ||
118 | $(top_builddir)/src/block/libgnunetblock.la \ | ||
119 | $(top_builddir)/src/datacache/libgnunetdatacache.la \ | ||
120 | $(top_builddir)/src/util/libgnunetutil.la \ | ||
121 | -lm | ||
102 | 122 | ||
103 | gnunet_dht_get_SOURCES = \ | 123 | gnunet_dht_get_SOURCES = \ |
104 | gnunet-dht-get.c | 124 | gnunet-dht-get.c |
diff --git a/src/dht/gnunet-service-wdht.c b/src/dht/gnunet-service-wdht.c new file mode 100644 index 000000000..13e60acf4 --- /dev/null +++ b/src/dht/gnunet-service-wdht.c | |||
@@ -0,0 +1,220 @@ | |||
1 | /* | ||
2 | This file is part of GNUnet. | ||
3 | Copyright (C) 2009, 2010, 2011 Christian Grothoff (and other contributing authors) | ||
4 | |||
5 | GNUnet is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published | ||
7 | by the Free Software Foundation; either version 3, or (at your | ||
8 | 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 | General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with GNUnet; see the file COPYING. If not, write to the | ||
17 | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /** | ||
22 | * @file dht/gnunet-service-xdht.c | ||
23 | * @brief GNUnet DHT service | ||
24 | * @author Christian Grothoff | ||
25 | * @author Nathan Evans | ||
26 | */ | ||
27 | |||
28 | #include "platform.h" | ||
29 | #include "gnunet_block_lib.h" | ||
30 | #include "gnunet_util_lib.h" | ||
31 | #include "gnunet_transport_service.h" | ||
32 | #include "gnunet_hello_lib.h" | ||
33 | #include "gnunet_dht_service.h" | ||
34 | #include "gnunet_statistics_service.h" | ||
35 | #include "gnunet-service-wdht.h" | ||
36 | #include "gnunet-service-wdht_clients.h" | ||
37 | #include "gnunet-service-wdht_datacache.h" | ||
38 | #include "gnunet-service-wdht_hello.h" | ||
39 | #include "gnunet-service-wdht_neighbours.h" | ||
40 | #include "gnunet-service-wdht_nse.h" | ||
41 | #include "gnunet-service-wdht_routing.h" | ||
42 | |||
43 | |||
44 | |||
45 | /** | ||
46 | * Handle for the statistics service. | ||
47 | */ | ||
48 | struct GNUNET_STATISTICS_Handle *GDS_stats; | ||
49 | |||
50 | /** | ||
51 | * Our handle to the BLOCK library. | ||
52 | */ | ||
53 | struct GNUNET_BLOCK_Context *GDS_block_context; | ||
54 | |||
55 | /** | ||
56 | * The configuration the DHT service is running with | ||
57 | */ | ||
58 | const struct GNUNET_CONFIGURATION_Handle *GDS_cfg; | ||
59 | |||
60 | /** | ||
61 | * Our HELLO | ||
62 | */ | ||
63 | struct GNUNET_MessageHeader *GDS_my_hello; | ||
64 | |||
65 | /** | ||
66 | * Handle to the transport service, for getting our hello | ||
67 | */ | ||
68 | struct GNUNET_TRANSPORT_Handle *GDS_transport_handle; | ||
69 | |||
70 | /** | ||
71 | * Handle to get our current HELLO. | ||
72 | */ | ||
73 | static struct GNUNET_TRANSPORT_GetHelloHandle *ghh; | ||
74 | |||
75 | /** | ||
76 | * Hello address expiration | ||
77 | */ | ||
78 | struct GNUNET_TIME_Relative hello_expiration; | ||
79 | |||
80 | /** | ||
81 | * Should we store our topology predecessor and successor IDs into statistics? | ||
82 | */ | ||
83 | extern unsigned int track_topology; | ||
84 | |||
85 | #if ENABLE_MALICIOUS | ||
86 | /** | ||
87 | * Should this peer act malicious? | ||
88 | */ | ||
89 | unsigned int malicious; | ||
90 | #endif | ||
91 | |||
92 | |||
93 | /** | ||
94 | * Receive the HELLO from transport service, free current and replace | ||
95 | * if necessary. | ||
96 | * | ||
97 | * @param cls NULL | ||
98 | * @param message HELLO message of peer | ||
99 | */ | ||
100 | static void | ||
101 | process_hello (void *cls, const struct GNUNET_MessageHeader *message) | ||
102 | { | ||
103 | GNUNET_assert (message != NULL); | ||
104 | GNUNET_free_non_null (GDS_my_hello); | ||
105 | GDS_my_hello = GNUNET_malloc (ntohs (message->size)); | ||
106 | memcpy (GDS_my_hello, message, ntohs (message->size)); | ||
107 | } | ||
108 | |||
109 | |||
110 | /** | ||
111 | * Task run during shutdown. | ||
112 | * | ||
113 | * @param cls unused | ||
114 | * @param tc unused | ||
115 | */ | ||
116 | static void | ||
117 | shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | ||
118 | { | ||
119 | if (NULL != ghh) | ||
120 | { | ||
121 | GNUNET_TRANSPORT_get_hello_cancel (ghh); | ||
122 | ghh = NULL; | ||
123 | } | ||
124 | if (GDS_transport_handle != NULL) | ||
125 | { | ||
126 | GNUNET_TRANSPORT_disconnect (GDS_transport_handle); | ||
127 | GDS_transport_handle = NULL; | ||
128 | } | ||
129 | |||
130 | GDS_NEIGHBOURS_done (); | ||
131 | GDS_DATACACHE_done (); | ||
132 | GDS_ROUTING_done (); | ||
133 | GDS_HELLO_done (); | ||
134 | GDS_NSE_done (); | ||
135 | if (GDS_block_context != NULL) | ||
136 | { | ||
137 | GNUNET_BLOCK_context_destroy (GDS_block_context); | ||
138 | GDS_block_context = NULL; | ||
139 | } | ||
140 | if (GDS_stats != NULL) | ||
141 | { | ||
142 | GNUNET_STATISTICS_destroy (GDS_stats, GNUNET_YES); | ||
143 | GDS_stats = NULL; | ||
144 | } | ||
145 | GNUNET_free_non_null (GDS_my_hello); | ||
146 | GDS_my_hello = NULL; | ||
147 | } | ||
148 | |||
149 | |||
150 | /** | ||
151 | * Process dht requests. | ||
152 | * | ||
153 | * @param cls closure | ||
154 | * @param server the initialized server | ||
155 | * @param c configuration to use | ||
156 | */ | ||
157 | static void | ||
158 | run (void *cls, struct GNUNET_SERVER_Handle *server, | ||
159 | const struct GNUNET_CONFIGURATION_Handle *c) | ||
160 | { | ||
161 | unsigned long long _track_topology; | ||
162 | GDS_cfg = c; | ||
163 | if (GNUNET_OK != | ||
164 | GNUNET_CONFIGURATION_get_value_time (c, "transport", "HELLO_EXPIRATION", &hello_expiration)) | ||
165 | { | ||
166 | hello_expiration = GNUNET_CONSTANTS_HELLO_ADDRESS_EXPIRATION; | ||
167 | } | ||
168 | GDS_block_context = GNUNET_BLOCK_context_create (GDS_cfg); | ||
169 | GDS_stats = GNUNET_STATISTICS_create ("dht", GDS_cfg); | ||
170 | GDS_ROUTING_init (); | ||
171 | GDS_NSE_init (); | ||
172 | GDS_DATACACHE_init (); | ||
173 | GDS_HELLO_init (); | ||
174 | GDS_CLIENTS_init (server); | ||
175 | if (GNUNET_OK == | ||
176 | GNUNET_CONFIGURATION_get_value_number (c, "xdht", "track_toplogy", | ||
177 | &_track_topology)) | ||
178 | { | ||
179 | track_topology = (unsigned int) _track_topology; | ||
180 | } | ||
181 | if (GNUNET_OK != GDS_NEIGHBOURS_init ()) | ||
182 | { | ||
183 | shutdown_task (NULL, NULL); | ||
184 | return; | ||
185 | } | ||
186 | GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task, | ||
187 | NULL); | ||
188 | GDS_transport_handle = | ||
189 | GNUNET_TRANSPORT_connect (GDS_cfg, NULL, NULL, NULL, NULL, NULL); | ||
190 | if (GDS_transport_handle == NULL) | ||
191 | { | ||
192 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, | ||
193 | _("Failed to connect to transport service!\n")); | ||
194 | return; | ||
195 | } | ||
196 | ghh = GNUNET_TRANSPORT_get_hello (GDS_transport_handle, &process_hello, NULL); | ||
197 | } | ||
198 | |||
199 | |||
200 | /** | ||
201 | * The main function for the dht service. | ||
202 | * | ||
203 | * @param argc number of arguments from the command line | ||
204 | * @param argv command line arguments | ||
205 | * @return 0 ok, 1 on error | ||
206 | */ | ||
207 | int | ||
208 | main (int argc, char *const *argv) | ||
209 | { | ||
210 | int ret; | ||
211 | |||
212 | ret = | ||
213 | (GNUNET_OK == | ||
214 | GNUNET_SERVICE_run (argc, argv, "dht", GNUNET_SERVICE_OPTION_NONE, &run, | ||
215 | NULL)) ? 0 : 1; | ||
216 | GDS_CLIENTS_done (); | ||
217 | return ret; | ||
218 | } | ||
219 | |||
220 | /* end of gnunet-service-dht.c */ | ||
diff --git a/src/dht/gnunet-service-wdht.h b/src/dht/gnunet-service-wdht.h new file mode 100644 index 000000000..2eee3a429 --- /dev/null +++ b/src/dht/gnunet-service-wdht.h | |||
@@ -0,0 +1,60 @@ | |||
1 | /* | ||
2 | This file is part of GNUnet. | ||
3 | Copyright (C) 2011 Christian Grothoff (and other contributing authors) | ||
4 | |||
5 | GNUnet is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published | ||
7 | by the Free Software Foundation; either version 3, or (at your | ||
8 | 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 | General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with GNUnet; see the file COPYING. If not, write to the | ||
17 | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /** | ||
22 | * @file dht/gnunet-service-xdht.h | ||
23 | * @brief GNUnet DHT globals | ||
24 | * @author Christian Grothoff | ||
25 | */ | ||
26 | #ifndef GNUNET_SERVICE_XDHT_H | ||
27 | #define GNUNET_SERVICE_XDHT_H | ||
28 | |||
29 | #include "gnunet_util_lib.h" | ||
30 | #include "gnunet_statistics_service.h" | ||
31 | #include "gnunet_transport_service.h" | ||
32 | |||
33 | #define DEBUG_DHT GNUNET_EXTRA_LOGGING | ||
34 | |||
35 | /** | ||
36 | * Configuration we use. | ||
37 | */ | ||
38 | extern const struct GNUNET_CONFIGURATION_Handle *GDS_cfg; | ||
39 | |||
40 | /** | ||
41 | * Our handle to the BLOCK library. | ||
42 | */ | ||
43 | extern struct GNUNET_BLOCK_Context *GDS_block_context; | ||
44 | |||
45 | /** | ||
46 | * Handle for the statistics service. | ||
47 | */ | ||
48 | extern struct GNUNET_STATISTICS_Handle *GDS_stats; | ||
49 | |||
50 | /** | ||
51 | * Our HELLO | ||
52 | */ | ||
53 | extern struct GNUNET_MessageHeader *GDS_my_hello; | ||
54 | |||
55 | /** | ||
56 | * Handle to the transport service, for getting our hello | ||
57 | */ | ||
58 | extern struct GNUNET_TRANSPORT_Handle *GDS_transport_handle; | ||
59 | |||
60 | #endif | ||
diff --git a/src/dht/gnunet-service-wdht_clients.c b/src/dht/gnunet-service-wdht_clients.c new file mode 100644 index 000000000..2e4d4ef0a --- /dev/null +++ b/src/dht/gnunet-service-wdht_clients.c | |||
@@ -0,0 +1,1449 @@ | |||
1 | /* | ||
2 | This file is part of GNUnet. | ||
3 | Copyright (C) 2009, 2010, 2011 Christian Grothoff (and other contributing authors) | ||
4 | |||
5 | GNUnet is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published | ||
7 | by the Free Software Foundation; either version 3, or (at your | ||
8 | 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 | General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with GNUnet; see the file COPYING. If not, write to the | ||
17 | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /** | ||
22 | * @file dht/gnunet-service-dht_clients.c | ||
23 | * @brief GNUnet DHT service's client management code | ||
24 | * @author Christian Grothoff | ||
25 | * @author Nathan Evans | ||
26 | */ | ||
27 | |||
28 | #include "platform.h" | ||
29 | #include "gnunet_constants.h" | ||
30 | #include "gnunet_protocols.h" | ||
31 | #include "gnunet_statistics_service.h" | ||
32 | #include "gnunet-service-wdht.h" | ||
33 | #include "gnunet-service-wdht_clients.h" | ||
34 | #include "gnunet-service-wdht_datacache.h" | ||
35 | #include "gnunet-service-wdht_neighbours.h" | ||
36 | #include "dht.h" | ||
37 | |||
38 | |||
39 | /** | ||
40 | * Should routing details be logged to stderr (for debugging)? | ||
41 | */ | ||
42 | #define LOG_TRAFFIC(kind,...) GNUNET_log_from (kind, "dht-traffic",__VA_ARGS__) | ||
43 | |||
44 | #define LOG(kind,...) GNUNET_log_from (kind, "dht-clients",__VA_ARGS__) | ||
45 | |||
46 | #define DEBUG(...) \ | ||
47 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, __VA_ARGS__) | ||
48 | |||
49 | /** | ||
50 | * Linked list of messages to send to clients. | ||
51 | */ | ||
52 | struct PendingMessage | ||
53 | { | ||
54 | /** | ||
55 | * Pointer to next item in the list | ||
56 | */ | ||
57 | struct PendingMessage *next; | ||
58 | |||
59 | /** | ||
60 | * Pointer to previous item in the list | ||
61 | */ | ||
62 | struct PendingMessage *prev; | ||
63 | |||
64 | /** | ||
65 | * Actual message to be sent, allocated at the end of the struct: | ||
66 | * // msg = (cast) &pm[1]; | ||
67 | * // memcpy (&pm[1], data, len); | ||
68 | */ | ||
69 | const struct GNUNET_MessageHeader *msg; | ||
70 | |||
71 | }; | ||
72 | |||
73 | |||
74 | /** | ||
75 | * Struct containing information about a client, | ||
76 | * handle to connect to it, and any pending messages | ||
77 | * that need to be sent to it. | ||
78 | */ | ||
79 | struct ClientList | ||
80 | { | ||
81 | /** | ||
82 | * Linked list of active clients | ||
83 | */ | ||
84 | struct ClientList *next; | ||
85 | |||
86 | /** | ||
87 | * Linked list of active clients | ||
88 | */ | ||
89 | struct ClientList *prev; | ||
90 | |||
91 | /** | ||
92 | * The handle to this client | ||
93 | */ | ||
94 | struct GNUNET_SERVER_Client *client_handle; | ||
95 | |||
96 | /** | ||
97 | * Handle to the current transmission request, NULL | ||
98 | * if none pending. | ||
99 | */ | ||
100 | struct GNUNET_SERVER_TransmitHandle *transmit_handle; | ||
101 | |||
102 | /** | ||
103 | * Linked list of pending messages for this client | ||
104 | */ | ||
105 | struct PendingMessage *pending_head; | ||
106 | |||
107 | /** | ||
108 | * Tail of linked list of pending messages for this client | ||
109 | */ | ||
110 | struct PendingMessage *pending_tail; | ||
111 | |||
112 | }; | ||
113 | |||
114 | |||
115 | /** | ||
116 | * Entry in the local forwarding map for a client's GET request. | ||
117 | */ | ||
118 | struct ClientQueryRecord | ||
119 | { | ||
120 | |||
121 | /** | ||
122 | * The key this request was about | ||
123 | */ | ||
124 | struct GNUNET_HashCode key; | ||
125 | |||
126 | /** | ||
127 | * Client responsible for the request. | ||
128 | */ | ||
129 | struct ClientList *client; | ||
130 | |||
131 | /** | ||
132 | * Extended query (see gnunet_block_lib.h), allocated at the end of this struct. | ||
133 | */ | ||
134 | const void *xquery; | ||
135 | |||
136 | /** | ||
137 | * Replies we have already seen for this request. | ||
138 | */ | ||
139 | struct GNUNET_HashCode *seen_replies; | ||
140 | |||
141 | /** | ||
142 | * Pointer to this nodes heap location in the retry-heap (for fast removal) | ||
143 | */ | ||
144 | struct GNUNET_CONTAINER_HeapNode *hnode; | ||
145 | |||
146 | /** | ||
147 | * What's the delay between re-try operations that we currently use for this | ||
148 | * request? | ||
149 | */ | ||
150 | struct GNUNET_TIME_Relative retry_frequency; | ||
151 | |||
152 | /** | ||
153 | * What's the next time we should re-try this request? | ||
154 | */ | ||
155 | struct GNUNET_TIME_Absolute retry_time; | ||
156 | |||
157 | /** | ||
158 | * The unique identifier of this request | ||
159 | */ | ||
160 | uint64_t unique_id; | ||
161 | |||
162 | /** | ||
163 | * Number of bytes in xquery. | ||
164 | */ | ||
165 | size_t xquery_size; | ||
166 | |||
167 | /** | ||
168 | * Number of entries in 'seen_replies'. | ||
169 | */ | ||
170 | unsigned int seen_replies_count; | ||
171 | |||
172 | /** | ||
173 | * Desired replication level | ||
174 | */ | ||
175 | uint32_t replication; | ||
176 | |||
177 | /** | ||
178 | * Any message options for this request | ||
179 | */ | ||
180 | uint32_t msg_options; | ||
181 | |||
182 | /** | ||
183 | * The type for the data for the GET request. | ||
184 | */ | ||
185 | enum GNUNET_BLOCK_Type type; | ||
186 | |||
187 | }; | ||
188 | |||
189 | |||
190 | /** | ||
191 | * Struct containing paremeters of monitoring requests. | ||
192 | */ | ||
193 | struct ClientMonitorRecord | ||
194 | { | ||
195 | |||
196 | /** | ||
197 | * Next element in DLL. | ||
198 | */ | ||
199 | struct ClientMonitorRecord *next; | ||
200 | |||
201 | /** | ||
202 | * Previous element in DLL. | ||
203 | */ | ||
204 | struct ClientMonitorRecord *prev; | ||
205 | |||
206 | /** | ||
207 | * Type of blocks that are of interest | ||
208 | */ | ||
209 | enum GNUNET_BLOCK_Type type; | ||
210 | |||
211 | /** | ||
212 | * Key of data of interest, NULL for all. | ||
213 | */ | ||
214 | struct GNUNET_HashCode *key; | ||
215 | |||
216 | /** | ||
217 | * Flag whether to notify about GET messages. | ||
218 | */ | ||
219 | int16_t get; | ||
220 | |||
221 | /** | ||
222 | * Flag whether to notify about GET_REPONSE messages. | ||
223 | */ | ||
224 | int16_t get_resp; | ||
225 | |||
226 | /** | ||
227 | * Flag whether to notify about PUT messages. | ||
228 | */ | ||
229 | uint16_t put; | ||
230 | |||
231 | /** | ||
232 | * Client to notify of these requests. | ||
233 | */ | ||
234 | struct ClientList *client; | ||
235 | }; | ||
236 | |||
237 | |||
238 | /** | ||
239 | * List of active clients. | ||
240 | */ | ||
241 | static struct ClientList *client_head; | ||
242 | |||
243 | /** | ||
244 | * List of active clients. | ||
245 | */ | ||
246 | static struct ClientList *client_tail; | ||
247 | |||
248 | /** | ||
249 | * List of active monitoring requests. | ||
250 | */ | ||
251 | static struct ClientMonitorRecord *monitor_head; | ||
252 | |||
253 | /** | ||
254 | * List of active monitoring requests. | ||
255 | */ | ||
256 | static struct ClientMonitorRecord *monitor_tail; | ||
257 | |||
258 | /** | ||
259 | * Hashmap for fast key based lookup, maps keys to `struct ClientQueryRecord` entries. | ||
260 | */ | ||
261 | static struct GNUNET_CONTAINER_MultiHashMap *forward_map; | ||
262 | |||
263 | /** | ||
264 | * Heap with all of our client's request, sorted by retry time (earliest on top). | ||
265 | */ | ||
266 | static struct GNUNET_CONTAINER_Heap *retry_heap; | ||
267 | |||
268 | /** | ||
269 | * Task that re-transmits requests (using retry_heap). | ||
270 | */ | ||
271 | static struct GNUNET_SCHEDULER_Task * retry_task; | ||
272 | |||
273 | |||
274 | /** | ||
275 | * Task run to check for messages that need to be sent to a client. | ||
276 | * | ||
277 | * @param client a ClientList, containing the client and any messages to be sent to it | ||
278 | */ | ||
279 | static void | ||
280 | process_pending_messages (struct ClientList *client); | ||
281 | |||
282 | |||
283 | /** | ||
284 | * Callback called as a result of issuing a GNUNET_SERVER_notify_transmit_ready | ||
285 | * request. A ClientList is passed as closure, take the head of the list | ||
286 | * and copy it into buf, which has the result of sending the message to the | ||
287 | * client. | ||
288 | * | ||
289 | * @param cls closure to this call | ||
290 | * @param size maximum number of bytes available to send | ||
291 | * @param buf where to copy the actual message to | ||
292 | * | ||
293 | * @return the number of bytes actually copied, 0 indicates failure | ||
294 | */ | ||
295 | static size_t | ||
296 | send_reply_to_client (void *cls, size_t size, void *buf) | ||
297 | { | ||
298 | struct ClientList *client = cls; | ||
299 | char *cbuf = buf; | ||
300 | struct PendingMessage *reply; | ||
301 | size_t off; | ||
302 | size_t msize; | ||
303 | |||
304 | client->transmit_handle = NULL; | ||
305 | if (buf == NULL) | ||
306 | { | ||
307 | /* client disconnected */ | ||
308 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
309 | "Client %p disconnected, pending messages will be discarded\n", | ||
310 | client->client_handle); | ||
311 | return 0; | ||
312 | } | ||
313 | off = 0; | ||
314 | while ((NULL != (reply = client->pending_head)) && | ||
315 | (size >= off + (msize = ntohs (reply->msg->size)))) | ||
316 | { | ||
317 | GNUNET_CONTAINER_DLL_remove (client->pending_head, client->pending_tail, | ||
318 | reply); | ||
319 | memcpy (&cbuf[off], reply->msg, msize); | ||
320 | GNUNET_free (reply); | ||
321 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Transmitting %u bytes to client %p\n", | ||
322 | msize, client->client_handle); | ||
323 | off += msize; | ||
324 | } | ||
325 | process_pending_messages (client); | ||
326 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Transmitted %u/%u bytes to client %p\n", | ||
327 | (unsigned int) off, (unsigned int) size, client->client_handle); | ||
328 | return off; | ||
329 | } | ||
330 | |||
331 | |||
332 | /** | ||
333 | * Task run to check for messages that need to be sent to a client. | ||
334 | * | ||
335 | * @param client a ClientList, containing the client and any messages to be sent to it | ||
336 | */ | ||
337 | static void | ||
338 | process_pending_messages (struct ClientList *client) | ||
339 | { | ||
340 | if ((client->pending_head == NULL) || (client->transmit_handle != NULL)) | ||
341 | { | ||
342 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
343 | "Not asking for transmission to %p now: %s\n", | ||
344 | client->client_handle, | ||
345 | client->pending_head == | ||
346 | NULL ? "no more messages" : "request already pending"); | ||
347 | return; | ||
348 | } | ||
349 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
350 | "Asking for transmission of %u bytes to client %p\n", | ||
351 | ntohs (client->pending_head->msg->size), client->client_handle); | ||
352 | client->transmit_handle = | ||
353 | GNUNET_SERVER_notify_transmit_ready (client->client_handle, | ||
354 | ntohs (client->pending_head-> | ||
355 | msg->size), | ||
356 | GNUNET_TIME_UNIT_FOREVER_REL, | ||
357 | &send_reply_to_client, client); | ||
358 | } | ||
359 | |||
360 | |||
361 | /** | ||
362 | * Add a PendingMessage to the clients list of messages to be sent | ||
363 | * | ||
364 | * @param client the active client to send the message to | ||
365 | * @param pending_message the actual message to send | ||
366 | */ | ||
367 | static void | ||
368 | add_pending_message (struct ClientList *client, | ||
369 | struct PendingMessage *pending_message) | ||
370 | { | ||
371 | GNUNET_CONTAINER_DLL_insert_tail (client->pending_head, client->pending_tail, | ||
372 | pending_message); | ||
373 | process_pending_messages (client); | ||
374 | } | ||
375 | |||
376 | |||
377 | /** | ||
378 | * Closure for 'forward_reply' | ||
379 | */ | ||
380 | struct ForwardReplyContext | ||
381 | { | ||
382 | |||
383 | /** | ||
384 | * Actual message to send to matching clients. | ||
385 | */ | ||
386 | struct PendingMessage *pm; | ||
387 | |||
388 | /** | ||
389 | * Embedded payload. | ||
390 | */ | ||
391 | const void *data; | ||
392 | |||
393 | /** | ||
394 | * Type of the data. | ||
395 | */ | ||
396 | enum GNUNET_BLOCK_Type type; | ||
397 | |||
398 | /** | ||
399 | * Number of bytes in data. | ||
400 | */ | ||
401 | size_t data_size; | ||
402 | |||
403 | /** | ||
404 | * Do we need to copy 'pm' because it was already used? | ||
405 | */ | ||
406 | int do_copy; | ||
407 | |||
408 | }; | ||
409 | |||
410 | |||
411 | /** | ||
412 | * Find a client if it exists, add it otherwise. | ||
413 | * | ||
414 | * @param client the server handle to the client | ||
415 | * | ||
416 | * @return the client if found, a new client otherwise | ||
417 | */ | ||
418 | static struct ClientList * | ||
419 | find_active_client (struct GNUNET_SERVER_Client *client) | ||
420 | { | ||
421 | struct ClientList *pos = client_head; | ||
422 | struct ClientList *ret; | ||
423 | |||
424 | while (pos != NULL) | ||
425 | { | ||
426 | if (pos->client_handle == client) | ||
427 | return pos; | ||
428 | pos = pos->next; | ||
429 | } | ||
430 | ret = GNUNET_new (struct ClientList); | ||
431 | ret->client_handle = client; | ||
432 | GNUNET_CONTAINER_DLL_insert (client_head, client_tail, ret); | ||
433 | return ret; | ||
434 | } | ||
435 | |||
436 | |||
437 | /** | ||
438 | * Iterator over hash map entries that frees all entries | ||
439 | * associated with the given client. | ||
440 | * | ||
441 | * @param cls client to search for in source routes | ||
442 | * @param key current key code (ignored) | ||
443 | * @param value value in the hash map, a ClientQueryRecord | ||
444 | * @return #GNUNET_YES (we should continue to iterate) | ||
445 | */ | ||
446 | static int | ||
447 | remove_client_records (void *cls, const struct GNUNET_HashCode * key, void *value) | ||
448 | { | ||
449 | struct ClientList *client = cls; | ||
450 | struct ClientQueryRecord *record = value; | ||
451 | |||
452 | if (record->client != client) | ||
453 | return GNUNET_YES; | ||
454 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
455 | "Removing client %p's record for key %s\n", client, | ||
456 | GNUNET_h2s (key)); | ||
457 | GNUNET_assert (GNUNET_YES == | ||
458 | GNUNET_CONTAINER_multihashmap_remove (forward_map, key, | ||
459 | record)); | ||
460 | if (NULL != record->hnode) | ||
461 | GNUNET_CONTAINER_heap_remove_node (record->hnode); | ||
462 | GNUNET_array_grow (record->seen_replies, record->seen_replies_count, 0); | ||
463 | GNUNET_free (record); | ||
464 | return GNUNET_YES; | ||
465 | } | ||
466 | |||
467 | |||
468 | /** | ||
469 | * Iterator over hash map entries that send a given reply to | ||
470 | * each of the matching clients. With some tricky recycling | ||
471 | * of the buffer. | ||
472 | * | ||
473 | * @param cls the 'struct ForwardReplyContext' | ||
474 | * @param key current key | ||
475 | * @param value value in the hash map, a ClientQueryRecord | ||
476 | * @return GNUNET_YES (we should continue to iterate), | ||
477 | * if the result is mal-formed, GNUNET_NO | ||
478 | */ | ||
479 | static int | ||
480 | forward_reply (void *cls, const struct GNUNET_HashCode * key, void *value) | ||
481 | { | ||
482 | struct ForwardReplyContext *frc = cls; | ||
483 | struct ClientQueryRecord *record = value; | ||
484 | struct PendingMessage *pm; | ||
485 | struct GNUNET_DHT_ClientResultMessage *reply; | ||
486 | enum GNUNET_BLOCK_EvaluationResult eval; | ||
487 | int do_free; | ||
488 | struct GNUNET_HashCode ch; | ||
489 | unsigned int i; | ||
490 | |||
491 | LOG_TRAFFIC (GNUNET_ERROR_TYPE_DEBUG, | ||
492 | "XVINE CLIENT-RESULT %s\n", | ||
493 | GNUNET_h2s_full (key)); | ||
494 | #if 0 | ||
495 | if ((record->type != GNUNET_BLOCK_TYPE_ANY) && (record->type != frc->type)) | ||
496 | { | ||
497 | LOG (GNUNET_ERROR_TYPE_DEBUG, | ||
498 | "Record type missmatch, not passing request for key %s to local client\n", | ||
499 | GNUNET_h2s (key)); | ||
500 | |||
501 | GNUNET_STATISTICS_update (GDS_stats, | ||
502 | gettext_noop | ||
503 | ("# Key match, type mismatches in REPLY to CLIENT"), | ||
504 | 1, GNUNET_NO); | ||
505 | return GNUNET_YES; /* type mismatch */ | ||
506 | } | ||
507 | #endif | ||
508 | GNUNET_CRYPTO_hash (frc->data, frc->data_size, &ch); | ||
509 | for (i = 0; i < record->seen_replies_count; i++) | ||
510 | if (0 == memcmp (&record->seen_replies[i], &ch, sizeof (struct GNUNET_HashCode))) | ||
511 | { | ||
512 | LOG (GNUNET_ERROR_TYPE_DEBUG, | ||
513 | "Duplicate reply, not passing request for key %s to local client\n", | ||
514 | GNUNET_h2s (key)); | ||
515 | GNUNET_STATISTICS_update (GDS_stats, | ||
516 | gettext_noop | ||
517 | ("# Duplicate REPLIES to CLIENT request dropped"), | ||
518 | 1, GNUNET_NO); | ||
519 | return GNUNET_YES; /* duplicate */ | ||
520 | } | ||
521 | eval = | ||
522 | GNUNET_BLOCK_evaluate (GDS_block_context, | ||
523 | record->type, | ||
524 | GNUNET_BLOCK_EO_NONE, | ||
525 | key, NULL, 0, | ||
526 | record->xquery, | ||
527 | record->xquery_size, | ||
528 | frc->data, | ||
529 | frc->data_size); | ||
530 | LOG (GNUNET_ERROR_TYPE_DEBUG, | ||
531 | "Evaluation result is %d for key %s for local client's query\n", | ||
532 | (int) eval, GNUNET_h2s (key)); | ||
533 | switch (eval) | ||
534 | { | ||
535 | case GNUNET_BLOCK_EVALUATION_OK_LAST: | ||
536 | do_free = GNUNET_YES; | ||
537 | break; | ||
538 | case GNUNET_BLOCK_EVALUATION_OK_MORE: | ||
539 | GNUNET_array_append (record->seen_replies, record->seen_replies_count, ch); | ||
540 | do_free = GNUNET_NO; | ||
541 | break; | ||
542 | case GNUNET_BLOCK_EVALUATION_OK_DUPLICATE: | ||
543 | /* should be impossible to encounter here */ | ||
544 | GNUNET_break (0); | ||
545 | return GNUNET_YES; | ||
546 | case GNUNET_BLOCK_EVALUATION_RESULT_INVALID: | ||
547 | GNUNET_break_op (0); | ||
548 | return GNUNET_NO; | ||
549 | case GNUNET_BLOCK_EVALUATION_REQUEST_VALID: | ||
550 | GNUNET_break (0); | ||
551 | return GNUNET_NO; | ||
552 | case GNUNET_BLOCK_EVALUATION_REQUEST_INVALID: | ||
553 | GNUNET_break (0); | ||
554 | return GNUNET_NO; | ||
555 | case GNUNET_BLOCK_EVALUATION_RESULT_IRRELEVANT: | ||
556 | return GNUNET_YES; | ||
557 | case GNUNET_BLOCK_EVALUATION_TYPE_NOT_SUPPORTED: | ||
558 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, | ||
559 | _("Unsupported block type (%u) in request!\n"), record->type); | ||
560 | return GNUNET_NO; | ||
561 | default: | ||
562 | GNUNET_break (0); | ||
563 | return GNUNET_NO; | ||
564 | } | ||
565 | if (GNUNET_NO == frc->do_copy) | ||
566 | { | ||
567 | /* first time, we can use the original data */ | ||
568 | pm = frc->pm; | ||
569 | frc->do_copy = GNUNET_YES; | ||
570 | } | ||
571 | else | ||
572 | { | ||
573 | /* two clients waiting for same reply, must copy for queueing */ | ||
574 | pm = GNUNET_malloc (sizeof (struct PendingMessage) + | ||
575 | ntohs (frc->pm->msg->size)); | ||
576 | memcpy (pm, frc->pm, | ||
577 | sizeof (struct PendingMessage) + ntohs (frc->pm->msg->size)); | ||
578 | pm->next = pm->prev = NULL; | ||
579 | pm->msg = (struct GNUNET_MessageHeader *) &pm[1]; | ||
580 | } | ||
581 | GNUNET_STATISTICS_update (GDS_stats, | ||
582 | gettext_noop ("# RESULTS queued for clients"), 1, | ||
583 | GNUNET_NO); | ||
584 | reply = (struct GNUNET_DHT_ClientResultMessage *) &pm[1]; | ||
585 | reply->unique_id = record->unique_id; | ||
586 | LOG (GNUNET_ERROR_TYPE_DEBUG, | ||
587 | "Queueing reply to query %s for client %p\n", | ||
588 | GNUNET_h2s (key), | ||
589 | record->client->client_handle); | ||
590 | add_pending_message (record->client, pm); | ||
591 | if (GNUNET_YES == do_free) | ||
592 | remove_client_records (record->client, key, record); | ||
593 | return GNUNET_YES; | ||
594 | } | ||
595 | |||
596 | |||
597 | /** | ||
598 | * Handle a reply we've received from another peer. If the reply | ||
599 | * matches any of our pending queries, forward it to the respective | ||
600 | * client(s). | ||
601 | * | ||
602 | * @param expiration when will the reply expire | ||
603 | * @param key the query this reply is for | ||
604 | * @param get_path_length number of peers in @a get_path | ||
605 | * @param get_path path the reply took on get | ||
606 | * @param put_path_length number of peers in @a put_path | ||
607 | * @param put_path path the reply took on put | ||
608 | * @param type type of the reply | ||
609 | * @param data_size number of bytes in @a data | ||
610 | * @param data application payload data | ||
611 | */ | ||
612 | void | ||
613 | GDS_CLIENTS_handle_reply (struct GNUNET_TIME_Absolute expiration, | ||
614 | const struct GNUNET_HashCode *key, | ||
615 | unsigned int get_path_length, | ||
616 | const struct GNUNET_PeerIdentity *get_path, | ||
617 | unsigned int put_path_length, | ||
618 | const struct GNUNET_PeerIdentity *put_path, | ||
619 | enum GNUNET_BLOCK_Type type, size_t data_size, | ||
620 | const void *data) | ||
621 | { | ||
622 | struct ForwardReplyContext frc; | ||
623 | struct PendingMessage *pm; | ||
624 | struct GNUNET_DHT_ClientResultMessage *reply; | ||
625 | struct GNUNET_PeerIdentity *paths; | ||
626 | size_t msize; | ||
627 | |||
628 | LOG (GNUNET_ERROR_TYPE_DEBUG, | ||
629 | "reply for key %s\n", | ||
630 | GNUNET_h2s (key)); | ||
631 | |||
632 | if (NULL == GNUNET_CONTAINER_multihashmap_get (forward_map, key)) | ||
633 | { | ||
634 | GNUNET_STATISTICS_update (GDS_stats, | ||
635 | gettext_noop | ||
636 | ("# REPLIES ignored for CLIENTS (no match)"), 1, | ||
637 | GNUNET_NO); | ||
638 | return; /* no matching request, fast exit! */ | ||
639 | } | ||
640 | msize = | ||
641 | sizeof (struct GNUNET_DHT_ClientResultMessage) + data_size + | ||
642 | (get_path_length + put_path_length) * sizeof (struct GNUNET_PeerIdentity); | ||
643 | if (msize >= GNUNET_SERVER_MAX_MESSAGE_SIZE) | ||
644 | { | ||
645 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, | ||
646 | _("Could not pass reply to client, message too big!\n")); | ||
647 | return; | ||
648 | } | ||
649 | DEBUG("reply FOR DATA_SIZE = %lu\n",msize); | ||
650 | pm = GNUNET_malloc (msize + sizeof (struct PendingMessage)); | ||
651 | reply = (struct GNUNET_DHT_ClientResultMessage *) &pm[1]; | ||
652 | pm->msg = &reply->header; | ||
653 | reply->header.size = htons ((uint16_t) msize); | ||
654 | reply->header.type = htons (GNUNET_MESSAGE_TYPE_DHT_CLIENT_RESULT); | ||
655 | reply->type = htonl (type); | ||
656 | reply->get_path_length = htonl (get_path_length); | ||
657 | reply->put_path_length = htonl (put_path_length); | ||
658 | reply->unique_id = 0; /* filled in later */ | ||
659 | reply->expiration = GNUNET_TIME_absolute_hton (expiration); | ||
660 | reply->key = *key; | ||
661 | paths = (struct GNUNET_PeerIdentity *) &reply[1]; | ||
662 | memcpy (paths, put_path, | ||
663 | sizeof (struct GNUNET_PeerIdentity) * put_path_length); | ||
664 | memcpy (&paths[put_path_length], get_path, | ||
665 | sizeof (struct GNUNET_PeerIdentity) * get_path_length); | ||
666 | memcpy (&paths[get_path_length + put_path_length], data, data_size); | ||
667 | frc.do_copy = GNUNET_NO; | ||
668 | frc.pm = pm; | ||
669 | frc.data = data; | ||
670 | frc.data_size = data_size; | ||
671 | frc.type = type; | ||
672 | GNUNET_CONTAINER_multihashmap_get_multiple (forward_map, key, &forward_reply, | ||
673 | &frc); | ||
674 | if (GNUNET_NO == frc.do_copy) | ||
675 | { | ||
676 | /* did not match any of the requests, free! */ | ||
677 | GNUNET_STATISTICS_update (GDS_stats, | ||
678 | gettext_noop | ||
679 | ("# REPLIES ignored for CLIENTS (no match)"), 1, | ||
680 | GNUNET_NO); | ||
681 | GNUNET_free (pm); | ||
682 | } | ||
683 | } | ||
684 | |||
685 | /** | ||
686 | * Check if some client is monitoring GET messages and notify | ||
687 | * them in that case. | ||
688 | * | ||
689 | * @param options Options, for instance RecordRoute, DemultiplexEverywhere. | ||
690 | * @param type The type of data in the request. | ||
691 | * @param hop_count Hop count so far. | ||
692 | * @param path_length number of entries in path (or 0 if not recorded). | ||
693 | * @param path peers on the GET path (or NULL if not recorded). | ||
694 | * @param desired_replication_level Desired replication level. | ||
695 | * @param key Key of the requested data. | ||
696 | */ | ||
697 | void | ||
698 | GDS_CLIENTS_process_get (uint32_t options, | ||
699 | enum GNUNET_BLOCK_Type type, | ||
700 | uint32_t hop_count, | ||
701 | uint32_t desired_replication_level, | ||
702 | unsigned int path_length, | ||
703 | const struct GNUNET_PeerIdentity *path, | ||
704 | const struct GNUNET_HashCode * key) | ||
705 | { | ||
706 | struct ClientMonitorRecord *m; | ||
707 | struct ClientList **cl; | ||
708 | unsigned int cl_size; | ||
709 | |||
710 | cl = NULL; | ||
711 | cl_size = 0; | ||
712 | for (m = monitor_head; NULL != m; m = m->next) | ||
713 | { | ||
714 | if ((GNUNET_BLOCK_TYPE_ANY == m->type || m->type == type) && | ||
715 | (NULL == m->key || | ||
716 | memcmp (key, m->key, sizeof(struct GNUNET_HashCode)) == 0)) | ||
717 | { | ||
718 | struct PendingMessage *pm; | ||
719 | struct GNUNET_DHT_MonitorGetMessage *mmsg; | ||
720 | struct GNUNET_PeerIdentity *msg_path; | ||
721 | size_t msize; | ||
722 | unsigned int i; | ||
723 | |||
724 | /* Don't send duplicates */ | ||
725 | for (i = 0; i < cl_size; i++) | ||
726 | if (cl[i] == m->client) | ||
727 | break; | ||
728 | if (i < cl_size) | ||
729 | continue; | ||
730 | GNUNET_array_append (cl, cl_size, m->client); | ||
731 | |||
732 | msize = path_length * sizeof (struct GNUNET_PeerIdentity); | ||
733 | msize += sizeof (struct GNUNET_DHT_MonitorGetMessage); | ||
734 | msize += sizeof (struct PendingMessage); | ||
735 | pm = GNUNET_malloc (msize); | ||
736 | mmsg = (struct GNUNET_DHT_MonitorGetMessage *) &pm[1]; | ||
737 | pm->msg = &mmsg->header; | ||
738 | mmsg->header.size = htons (msize - sizeof (struct PendingMessage)); | ||
739 | mmsg->header.type = htons (GNUNET_MESSAGE_TYPE_DHT_MONITOR_GET); | ||
740 | mmsg->options = htonl(options); | ||
741 | mmsg->type = htonl(type); | ||
742 | mmsg->hop_count = htonl(hop_count); | ||
743 | mmsg->desired_replication_level = htonl(desired_replication_level); | ||
744 | mmsg->get_path_length = htonl(path_length); | ||
745 | memcpy (&mmsg->key, key, sizeof (struct GNUNET_HashCode)); | ||
746 | msg_path = (struct GNUNET_PeerIdentity *) &mmsg[1]; | ||
747 | if (path_length > 0) | ||
748 | memcpy (msg_path, path, | ||
749 | path_length * sizeof (struct GNUNET_PeerIdentity)); | ||
750 | add_pending_message (m->client, pm); | ||
751 | } | ||
752 | } | ||
753 | GNUNET_free_non_null (cl); | ||
754 | } | ||
755 | |||
756 | |||
757 | /** | ||
758 | * Check if some client is monitoring PUT messages and notify | ||
759 | * them in that case. | ||
760 | * | ||
761 | * @param options Options, for instance RecordRoute, DemultiplexEverywhere. | ||
762 | * @param type The type of data in the request. | ||
763 | * @param hop_count Hop count so far. | ||
764 | * @param path_length number of entries in path (or 0 if not recorded). | ||
765 | * @param path peers on the PUT path (or NULL if not recorded). | ||
766 | * @param desired_replication_level Desired replication level. | ||
767 | * @param exp Expiration time of the data. | ||
768 | * @param key Key under which data is to be stored. | ||
769 | * @param data Pointer to the data carried. | ||
770 | * @param size Number of bytes in data. | ||
771 | */ | ||
772 | void | ||
773 | GDS_CLIENTS_process_put (uint32_t options, | ||
774 | enum GNUNET_BLOCK_Type type, | ||
775 | uint32_t hop_count, | ||
776 | uint32_t desired_replication_level, | ||
777 | unsigned int path_length, | ||
778 | const struct GNUNET_PeerIdentity *path, | ||
779 | struct GNUNET_TIME_Absolute exp, | ||
780 | const struct GNUNET_HashCode * key, | ||
781 | const void *data, | ||
782 | size_t size) | ||
783 | { | ||
784 | struct ClientMonitorRecord *m; | ||
785 | struct ClientList **cl; | ||
786 | unsigned int cl_size; | ||
787 | |||
788 | cl = NULL; | ||
789 | cl_size = 0; | ||
790 | for (m = monitor_head; NULL != m; m = m->next) | ||
791 | { | ||
792 | if ((GNUNET_BLOCK_TYPE_ANY == m->type || m->type == type) && | ||
793 | (NULL == m->key || | ||
794 | memcmp (key, m->key, sizeof(struct GNUNET_HashCode)) == 0)) | ||
795 | { | ||
796 | struct PendingMessage *pm; | ||
797 | struct GNUNET_DHT_MonitorPutMessage *mmsg; | ||
798 | struct GNUNET_PeerIdentity *msg_path; | ||
799 | size_t msize; | ||
800 | unsigned int i; | ||
801 | |||
802 | /* Don't send duplicates */ | ||
803 | for (i = 0; i < cl_size; i++) | ||
804 | if (cl[i] == m->client) | ||
805 | break; | ||
806 | if (i < cl_size) | ||
807 | continue; | ||
808 | GNUNET_array_append (cl, cl_size, m->client); | ||
809 | |||
810 | msize = size; | ||
811 | msize += path_length * sizeof (struct GNUNET_PeerIdentity); | ||
812 | msize += sizeof (struct GNUNET_DHT_MonitorPutMessage); | ||
813 | msize += sizeof (struct PendingMessage); | ||
814 | pm = GNUNET_malloc (msize); | ||
815 | mmsg = (struct GNUNET_DHT_MonitorPutMessage *) &pm[1]; | ||
816 | pm->msg = (struct GNUNET_MessageHeader *) mmsg; | ||
817 | mmsg->header.size = htons (msize - sizeof (struct PendingMessage)); | ||
818 | mmsg->header.type = htons (GNUNET_MESSAGE_TYPE_DHT_MONITOR_PUT); | ||
819 | mmsg->options = htonl(options); | ||
820 | mmsg->type = htonl(type); | ||
821 | mmsg->hop_count = htonl(hop_count); | ||
822 | mmsg->desired_replication_level = htonl(desired_replication_level); | ||
823 | mmsg->put_path_length = htonl(path_length); | ||
824 | msg_path = (struct GNUNET_PeerIdentity *) &mmsg[1]; | ||
825 | if (path_length > 0) | ||
826 | { | ||
827 | memcpy (msg_path, path, | ||
828 | path_length * sizeof (struct GNUNET_PeerIdentity)); | ||
829 | } | ||
830 | mmsg->expiration_time = GNUNET_TIME_absolute_hton(exp); | ||
831 | memcpy (&mmsg->key, key, sizeof (struct GNUNET_HashCode)); | ||
832 | if (size > 0) | ||
833 | memcpy (&msg_path[path_length], data, size); | ||
834 | add_pending_message (m->client, pm); | ||
835 | } | ||
836 | } | ||
837 | GNUNET_free_non_null (cl); | ||
838 | } | ||
839 | |||
840 | |||
841 | /** | ||
842 | * Route the given request via the DHT. | ||
843 | */ | ||
844 | static void | ||
845 | transmit_request (struct ClientQueryRecord *cqr) | ||
846 | { | ||
847 | GNUNET_STATISTICS_update (GDS_stats, | ||
848 | gettext_noop | ||
849 | ("# GET requests from clients injected"), 1, | ||
850 | GNUNET_NO); | ||
851 | |||
852 | LOG (GNUNET_ERROR_TYPE_DEBUG, | ||
853 | "Initiating GET for %s, replication %u, already have %u replies\n", | ||
854 | GNUNET_h2s (&cqr->key), | ||
855 | cqr->replication, | ||
856 | cqr->seen_replies_count); | ||
857 | |||
858 | GDS_NEIGHBOURS_handle_get (&cqr->key, cqr->type, cqr->msg_options, | ||
859 | cqr->replication); | ||
860 | |||
861 | /* exponential back-off for retries. | ||
862 | * max GNUNET_TIME_STD_EXPONENTIAL_BACKOFF_THRESHOLD (15 min) */ | ||
863 | cqr->retry_frequency = GNUNET_TIME_STD_BACKOFF (cqr->retry_frequency); | ||
864 | cqr->retry_time = GNUNET_TIME_relative_to_absolute (cqr->retry_frequency); | ||
865 | } | ||
866 | |||
867 | |||
868 | /** | ||
869 | * Task that looks at the 'retry_heap' and transmits all of the requests | ||
870 | * on the heap that are ready for transmission. Then re-schedules | ||
871 | * itself (unless the heap is empty). | ||
872 | * | ||
873 | * @param cls unused | ||
874 | * @param tc scheduler context | ||
875 | */ | ||
876 | static void | ||
877 | transmit_next_request_task (void *cls, | ||
878 | const struct GNUNET_SCHEDULER_TaskContext *tc) | ||
879 | { | ||
880 | struct ClientQueryRecord *cqr; | ||
881 | struct GNUNET_TIME_Relative delay; | ||
882 | |||
883 | retry_task = NULL; | ||
884 | if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) | ||
885 | return; | ||
886 | while (NULL != (cqr = GNUNET_CONTAINER_heap_remove_root (retry_heap))) | ||
887 | { | ||
888 | cqr->hnode = NULL; | ||
889 | delay = GNUNET_TIME_absolute_get_remaining (cqr->retry_time); | ||
890 | if (delay.rel_value_us > 0) | ||
891 | { | ||
892 | cqr->hnode = | ||
893 | GNUNET_CONTAINER_heap_insert (retry_heap, cqr, | ||
894 | cqr->retry_time.abs_value_us); | ||
895 | retry_task = | ||
896 | GNUNET_SCHEDULER_add_delayed (delay, &transmit_next_request_task, | ||
897 | NULL); | ||
898 | return; | ||
899 | } | ||
900 | transmit_request (cqr); | ||
901 | cqr->hnode = | ||
902 | GNUNET_CONTAINER_heap_insert (retry_heap, cqr, | ||
903 | cqr->retry_time.abs_value_us); | ||
904 | } | ||
905 | } | ||
906 | |||
907 | |||
908 | /** | ||
909 | * Handler for PUT messages. | ||
910 | * | ||
911 | * @param cls closure for the service | ||
912 | * @param client the client we received this message from | ||
913 | * @param message the actual message received | ||
914 | */ | ||
915 | static void | ||
916 | handle_dht_local_put (void *cls, struct GNUNET_SERVER_Client *client, | ||
917 | const struct GNUNET_MessageHeader *message) | ||
918 | { | ||
919 | const struct GNUNET_DHT_ClientPutMessage *put_msg; | ||
920 | struct PendingMessage *pm; | ||
921 | struct GNUNET_DHT_ClientPutConfirmationMessage *conf; | ||
922 | uint16_t size; | ||
923 | |||
924 | size = ntohs (message->size); | ||
925 | if (size < sizeof (struct GNUNET_DHT_ClientPutMessage)) | ||
926 | { | ||
927 | GNUNET_break (0); | ||
928 | GNUNET_SERVER_receive_done (client, GNUNET_SYSERR); | ||
929 | return; | ||
930 | } | ||
931 | GNUNET_STATISTICS_update (GDS_stats, | ||
932 | gettext_noop | ||
933 | ("# PUT requests received from clients"), 1, | ||
934 | GNUNET_NO); | ||
935 | put_msg = (const struct GNUNET_DHT_ClientPutMessage *) message; | ||
936 | LOG_TRAFFIC (GNUNET_ERROR_TYPE_DEBUG, "X-VINE DHT CLIENT-PUT %s\n", | ||
937 | GNUNET_h2s_full (&put_msg->key)); | ||
938 | /* give to local clients */ | ||
939 | LOG (GNUNET_ERROR_TYPE_DEBUG, | ||
940 | "Handling local PUT of %u-bytes for query %s\n", | ||
941 | size - sizeof (struct GNUNET_DHT_ClientPutMessage), | ||
942 | GNUNET_h2s (&put_msg->key)); | ||
943 | DEBUG("PUT doing put i = %s\n",GNUNET_h2s(&(put_msg->key))); | ||
944 | GDS_CLIENTS_handle_reply (GNUNET_TIME_absolute_ntoh (put_msg->expiration), | ||
945 | &put_msg->key, 0, NULL, 0, NULL, | ||
946 | ntohl (put_msg->type), | ||
947 | size - sizeof (struct GNUNET_DHT_ClientPutMessage), | ||
948 | &put_msg[1]); | ||
949 | |||
950 | GDS_NEIGHBOURS_handle_put (&put_msg->key, | ||
951 | ntohl (put_msg->type), ntohl (put_msg->options), | ||
952 | ntohl (put_msg->desired_replication_level), | ||
953 | GNUNET_TIME_absolute_ntoh (put_msg->expiration), | ||
954 | &put_msg[1], | ||
955 | size - sizeof (struct GNUNET_DHT_ClientPutMessage)); | ||
956 | pm = GNUNET_malloc (sizeof (struct PendingMessage) + | ||
957 | sizeof (struct GNUNET_DHT_ClientPutConfirmationMessage)); | ||
958 | conf = (struct GNUNET_DHT_ClientPutConfirmationMessage *) &pm[1]; | ||
959 | conf->header.size = htons (sizeof (struct GNUNET_DHT_ClientPutConfirmationMessage)); | ||
960 | conf->header.type = htons (GNUNET_MESSAGE_TYPE_DHT_CLIENT_PUT_OK); | ||
961 | conf->reserved = htonl (0); | ||
962 | conf->unique_id = put_msg->unique_id; | ||
963 | pm->msg = &conf->header; | ||
964 | add_pending_message (find_active_client (client), pm); | ||
965 | GNUNET_SERVER_receive_done (client, GNUNET_OK); | ||
966 | } | ||
967 | |||
968 | |||
969 | /** | ||
970 | * Handler for DHT GET messages from the client. | ||
971 | * | ||
972 | * @param cls closure for the service | ||
973 | * @param client the client we received this message from | ||
974 | * @param message the actual message received | ||
975 | */ | ||
976 | static void | ||
977 | handle_dht_local_get (void *cls, struct GNUNET_SERVER_Client *client, | ||
978 | const struct GNUNET_MessageHeader *message) | ||
979 | { | ||
980 | const struct GNUNET_DHT_ClientGetMessage *get; | ||
981 | struct ClientQueryRecord *cqr; | ||
982 | size_t xquery_size; | ||
983 | const char *xquery; | ||
984 | uint16_t size; | ||
985 | |||
986 | size = ntohs (message->size); | ||
987 | if (size < sizeof (struct GNUNET_DHT_ClientGetMessage)) | ||
988 | { | ||
989 | GNUNET_break (0); | ||
990 | GNUNET_SERVER_receive_done (client, GNUNET_SYSERR); | ||
991 | return; | ||
992 | } | ||
993 | xquery_size = size - sizeof (struct GNUNET_DHT_ClientGetMessage); | ||
994 | get = (const struct GNUNET_DHT_ClientGetMessage *) message; | ||
995 | xquery = (const char *) &get[1]; | ||
996 | GNUNET_STATISTICS_update (GDS_stats, | ||
997 | gettext_noop | ||
998 | ("# GET requests received from clients"), 1, | ||
999 | GNUNET_NO); | ||
1000 | LOG (GNUNET_ERROR_TYPE_DEBUG, | ||
1001 | "Received GET request for %s from local client %p, xq: %.*s\n", | ||
1002 | GNUNET_h2s (&get->key), client, xquery_size, xquery); | ||
1003 | |||
1004 | LOG_TRAFFIC (GNUNET_ERROR_TYPE_DEBUG, "X-VINE CLIENT-GET %s\n", | ||
1005 | GNUNET_h2s_full (&get->key)); | ||
1006 | |||
1007 | |||
1008 | cqr = GNUNET_malloc (sizeof (struct ClientQueryRecord) + xquery_size); | ||
1009 | cqr->key = get->key; | ||
1010 | cqr->client = find_active_client (client); | ||
1011 | cqr->xquery = (void *) &cqr[1]; | ||
1012 | memcpy (&cqr[1], xquery, xquery_size); | ||
1013 | cqr->hnode = GNUNET_CONTAINER_heap_insert (retry_heap, cqr, 0); | ||
1014 | cqr->retry_frequency = GNUNET_TIME_UNIT_SECONDS; | ||
1015 | cqr->retry_time = GNUNET_TIME_absolute_get (); | ||
1016 | cqr->unique_id = get->unique_id; | ||
1017 | cqr->xquery_size = xquery_size; | ||
1018 | cqr->replication = ntohl (get->desired_replication_level); | ||
1019 | cqr->msg_options = ntohl (get->options); | ||
1020 | cqr->type = ntohl (get->type); | ||
1021 | |||
1022 | // FIXME use cqr->key, set multihashmap create to GNUNET_YES | ||
1023 | GNUNET_CONTAINER_multihashmap_put (forward_map, &get->key, cqr, | ||
1024 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); | ||
1025 | |||
1026 | struct GNUNET_PeerIdentity my_identity; | ||
1027 | my_identity = GDS_NEIGHBOURS_get_my_id(); | ||
1028 | GDS_CLIENTS_process_get (ntohl (get->options), | ||
1029 | ntohl (get->type), | ||
1030 | 0, | ||
1031 | ntohl (get->desired_replication_level), | ||
1032 | 1, | ||
1033 | &my_identity, | ||
1034 | &get->key); | ||
1035 | /* start remote requests */ | ||
1036 | if (NULL != retry_task) | ||
1037 | GNUNET_SCHEDULER_cancel (retry_task); | ||
1038 | retry_task = GNUNET_SCHEDULER_add_now (&transmit_next_request_task, NULL); | ||
1039 | GNUNET_SERVER_receive_done (client, GNUNET_OK); | ||
1040 | } | ||
1041 | |||
1042 | |||
1043 | /** | ||
1044 | * Closure for 'find_by_unique_id'. | ||
1045 | */ | ||
1046 | struct FindByUniqueIdContext | ||
1047 | { | ||
1048 | /** | ||
1049 | * Where to store the result, if found. | ||
1050 | */ | ||
1051 | struct ClientQueryRecord *cqr; | ||
1052 | |||
1053 | uint64_t unique_id; | ||
1054 | }; | ||
1055 | |||
1056 | |||
1057 | /** | ||
1058 | * Function called for each existing DHT record for the given | ||
1059 | * query. Checks if it matches the UID given in the closure | ||
1060 | * and if so returns the entry as a result. | ||
1061 | * | ||
1062 | * @param cls the search context | ||
1063 | * @param key query for the lookup (not used) | ||
1064 | * @param value the 'struct ClientQueryRecord' | ||
1065 | * @return GNUNET_YES to continue iteration (result not yet found) | ||
1066 | */ | ||
1067 | static int | ||
1068 | find_by_unique_id (void *cls, | ||
1069 | const struct GNUNET_HashCode *key, | ||
1070 | void *value) | ||
1071 | { | ||
1072 | struct FindByUniqueIdContext *fui_ctx = cls; | ||
1073 | struct ClientQueryRecord *cqr = value; | ||
1074 | |||
1075 | if (cqr->unique_id != fui_ctx->unique_id) | ||
1076 | return GNUNET_YES; | ||
1077 | fui_ctx->cqr = cqr; | ||
1078 | return GNUNET_NO; | ||
1079 | } | ||
1080 | |||
1081 | |||
1082 | /** | ||
1083 | * Handler for "GET result seen" messages from the client. | ||
1084 | * | ||
1085 | * @param cls closure for the service | ||
1086 | * @param client the client we received this message from | ||
1087 | * @param message the actual message received | ||
1088 | */ | ||
1089 | static void | ||
1090 | handle_dht_local_get_result_seen (void *cls, struct GNUNET_SERVER_Client *client, | ||
1091 | const struct GNUNET_MessageHeader *message) | ||
1092 | { | ||
1093 | const struct GNUNET_DHT_ClientGetResultSeenMessage *seen; | ||
1094 | uint16_t size; | ||
1095 | unsigned int hash_count; | ||
1096 | unsigned int old_count; | ||
1097 | const struct GNUNET_HashCode *hc; | ||
1098 | struct FindByUniqueIdContext fui_ctx; | ||
1099 | struct ClientQueryRecord *cqr; | ||
1100 | |||
1101 | size = ntohs (message->size); | ||
1102 | if (size < sizeof (struct GNUNET_DHT_ClientGetResultSeenMessage)) | ||
1103 | { | ||
1104 | GNUNET_break (0); | ||
1105 | GNUNET_SERVER_receive_done (client, GNUNET_SYSERR); | ||
1106 | return; | ||
1107 | } | ||
1108 | seen = (const struct GNUNET_DHT_ClientGetResultSeenMessage *) message; | ||
1109 | hash_count = (size - sizeof (struct GNUNET_DHT_ClientGetResultSeenMessage)) / sizeof (struct GNUNET_HashCode); | ||
1110 | if (size != sizeof (struct GNUNET_DHT_ClientGetResultSeenMessage) + hash_count * sizeof (struct GNUNET_HashCode)) | ||
1111 | { | ||
1112 | GNUNET_break (0); | ||
1113 | GNUNET_SERVER_receive_done (client, GNUNET_SYSERR); | ||
1114 | return; | ||
1115 | } | ||
1116 | hc = (const struct GNUNET_HashCode*) &seen[1]; | ||
1117 | fui_ctx.unique_id = seen->unique_id; | ||
1118 | fui_ctx.cqr = NULL; | ||
1119 | GNUNET_CONTAINER_multihashmap_get_multiple (forward_map, | ||
1120 | &seen->key, | ||
1121 | &find_by_unique_id, | ||
1122 | &fui_ctx); | ||
1123 | if (NULL == (cqr = fui_ctx.cqr)) | ||
1124 | { | ||
1125 | GNUNET_break (0); | ||
1126 | GNUNET_SERVER_receive_done (client, GNUNET_SYSERR); | ||
1127 | return; | ||
1128 | } | ||
1129 | /* finally, update 'seen' list */ | ||
1130 | old_count = cqr->seen_replies_count; | ||
1131 | GNUNET_array_grow (cqr->seen_replies, | ||
1132 | cqr->seen_replies_count, | ||
1133 | cqr->seen_replies_count + hash_count); | ||
1134 | memcpy (&cqr->seen_replies[old_count], | ||
1135 | hc, | ||
1136 | sizeof (struct GNUNET_HashCode) * hash_count); | ||
1137 | } | ||
1138 | |||
1139 | |||
1140 | /** | ||
1141 | * Closure for 'remove_by_unique_id'. | ||
1142 | */ | ||
1143 | struct RemoveByUniqueIdContext | ||
1144 | { | ||
1145 | /** | ||
1146 | * Client that issued the removal request. | ||
1147 | */ | ||
1148 | struct ClientList *client; | ||
1149 | |||
1150 | /** | ||
1151 | * Unique ID of the request. | ||
1152 | */ | ||
1153 | uint64_t unique_id; | ||
1154 | }; | ||
1155 | |||
1156 | |||
1157 | /** | ||
1158 | * Iterator over hash map entries that frees all entries | ||
1159 | * that match the given client and unique ID. | ||
1160 | * | ||
1161 | * @param cls unique ID and client to search for in source routes | ||
1162 | * @param key current key code | ||
1163 | * @param value value in the hash map, a ClientQueryRecord | ||
1164 | * @return GNUNET_YES (we should continue to iterate) | ||
1165 | */ | ||
1166 | static int | ||
1167 | remove_by_unique_id (void *cls, const struct GNUNET_HashCode * key, void *value) | ||
1168 | { | ||
1169 | const struct RemoveByUniqueIdContext *ctx = cls; | ||
1170 | struct ClientQueryRecord *record = value; | ||
1171 | |||
1172 | if (record->unique_id != ctx->unique_id) | ||
1173 | return GNUNET_YES; | ||
1174 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
1175 | "Removing client %p's record for key %s (by unique id)\n", | ||
1176 | ctx->client->client_handle, GNUNET_h2s (key)); | ||
1177 | return remove_client_records (ctx->client, key, record); | ||
1178 | } | ||
1179 | |||
1180 | |||
1181 | /** | ||
1182 | * Handler for any generic DHT stop messages, calls the appropriate handler | ||
1183 | * depending on message type (if processed locally) | ||
1184 | * | ||
1185 | * @param cls closure for the service | ||
1186 | * @param client the client we received this message from | ||
1187 | * @param message the actual message received | ||
1188 | * | ||
1189 | */ | ||
1190 | static void | ||
1191 | handle_dht_local_get_stop (void *cls, struct GNUNET_SERVER_Client *client, | ||
1192 | const struct GNUNET_MessageHeader *message) | ||
1193 | { | ||
1194 | const struct GNUNET_DHT_ClientGetStopMessage *dht_stop_msg = | ||
1195 | (const struct GNUNET_DHT_ClientGetStopMessage *) message; | ||
1196 | struct RemoveByUniqueIdContext ctx; | ||
1197 | |||
1198 | GNUNET_STATISTICS_update (GDS_stats, | ||
1199 | gettext_noop | ||
1200 | ("# GET STOP requests received from clients"), 1, | ||
1201 | GNUNET_NO); | ||
1202 | LOG (GNUNET_ERROR_TYPE_DEBUG, | ||
1203 | "Received GET STOP request for %s from local client %p\n", | ||
1204 | client, GNUNET_h2s (&dht_stop_msg->key)); | ||
1205 | ctx.client = find_active_client (client); | ||
1206 | ctx.unique_id = dht_stop_msg->unique_id; | ||
1207 | GNUNET_CONTAINER_multihashmap_get_multiple (forward_map, &dht_stop_msg->key, | ||
1208 | &remove_by_unique_id, &ctx); | ||
1209 | GNUNET_SERVER_receive_done (client, GNUNET_OK); | ||
1210 | } | ||
1211 | |||
1212 | |||
1213 | /** | ||
1214 | * Handler for monitor start messages | ||
1215 | * | ||
1216 | * @param cls closure for the service | ||
1217 | * @param client the client we received this message from | ||
1218 | * @param message the actual message received | ||
1219 | * | ||
1220 | */ | ||
1221 | static void | ||
1222 | handle_dht_local_monitor (void *cls, struct GNUNET_SERVER_Client *client, | ||
1223 | const struct GNUNET_MessageHeader *message) | ||
1224 | { | ||
1225 | struct ClientMonitorRecord *r; | ||
1226 | const struct GNUNET_DHT_MonitorStartStopMessage *msg; | ||
1227 | |||
1228 | msg = (struct GNUNET_DHT_MonitorStartStopMessage *) message; | ||
1229 | r = GNUNET_new (struct ClientMonitorRecord); | ||
1230 | |||
1231 | r->client = find_active_client(client); | ||
1232 | r->type = ntohl(msg->type); | ||
1233 | r->get = ntohs(msg->get); | ||
1234 | r->get_resp = ntohs(msg->get_resp); | ||
1235 | r->put = ntohs(msg->put); | ||
1236 | if (0 == ntohs(msg->filter_key)) | ||
1237 | r->key = NULL; | ||
1238 | else | ||
1239 | { | ||
1240 | r->key = GNUNET_new (struct GNUNET_HashCode); | ||
1241 | memcpy (r->key, &msg->key, sizeof (struct GNUNET_HashCode)); | ||
1242 | } | ||
1243 | GNUNET_CONTAINER_DLL_insert (monitor_head, monitor_tail, r); | ||
1244 | GNUNET_SERVER_receive_done (client, GNUNET_OK); | ||
1245 | } | ||
1246 | |||
1247 | |||
1248 | /** | ||
1249 | * Handler for monitor stop messages | ||
1250 | * | ||
1251 | * @param cls closure for the service | ||
1252 | * @param client the client we received this message from | ||
1253 | * @param message the actual message received | ||
1254 | * | ||
1255 | */ | ||
1256 | static void | ||
1257 | handle_dht_local_monitor_stop (void *cls, struct GNUNET_SERVER_Client *client, | ||
1258 | const struct GNUNET_MessageHeader *message) | ||
1259 | { | ||
1260 | struct ClientMonitorRecord *r; | ||
1261 | const struct GNUNET_DHT_MonitorStartStopMessage *msg; | ||
1262 | int keys_match; | ||
1263 | |||
1264 | msg = (struct GNUNET_DHT_MonitorStartStopMessage *) message; | ||
1265 | r = monitor_head; | ||
1266 | |||
1267 | while (NULL != r) | ||
1268 | { | ||
1269 | if (NULL == r->key) | ||
1270 | keys_match = (0 == ntohs(msg->filter_key)); | ||
1271 | else | ||
1272 | { | ||
1273 | keys_match = (0 != ntohs(msg->filter_key) | ||
1274 | && !memcmp(r->key, &msg->key, sizeof(struct GNUNET_HashCode))); | ||
1275 | } | ||
1276 | if (find_active_client(client) == r->client | ||
1277 | && ntohl(msg->type) == r->type | ||
1278 | && r->get == msg->get | ||
1279 | && r->get_resp == msg->get_resp | ||
1280 | && r->put == msg->put | ||
1281 | && keys_match | ||
1282 | ) | ||
1283 | { | ||
1284 | GNUNET_CONTAINER_DLL_remove (monitor_head, monitor_tail, r); | ||
1285 | GNUNET_free_non_null (r->key); | ||
1286 | GNUNET_free (r); | ||
1287 | GNUNET_SERVER_receive_done (client, GNUNET_OK); | ||
1288 | return; /* Delete only ONE entry */ | ||
1289 | } | ||
1290 | r = r->next; | ||
1291 | } | ||
1292 | |||
1293 | GNUNET_SERVER_receive_done (client, GNUNET_OK); | ||
1294 | } | ||
1295 | |||
1296 | |||
1297 | #if ENABLE_MALICIOUS | ||
1298 | /** | ||
1299 | * Handler for act malicious message. | ||
1300 | * | ||
1301 | * @param cls closure for the service | ||
1302 | * @param client the client we received this message from | ||
1303 | * @param message the actual message received | ||
1304 | * | ||
1305 | */ | ||
1306 | static void | ||
1307 | handle_dht_act_malicious (void *cls, struct GNUNET_SERVER_Client *client, | ||
1308 | const struct GNUNET_MessageHeader *message) | ||
1309 | { | ||
1310 | const struct GNUNET_DHT_ActMaliciousMessage *msg; | ||
1311 | struct PendingMessage *pm; | ||
1312 | struct GNUNET_DHT_ClientActMaliciousConfirmationMessage *conf; | ||
1313 | unsigned int malicious_action; | ||
1314 | |||
1315 | msg = (const struct GNUNET_DHT_ActMaliciousMessage *)message; | ||
1316 | malicious_action = msg->action; | ||
1317 | |||
1318 | if(GNUNET_OK == GDS_NEIGHBOURS_act_malicious (malicious_action)) | ||
1319 | { | ||
1320 | pm = GNUNET_malloc (sizeof (struct PendingMessage) + | ||
1321 | sizeof (struct GNUNET_DHT_ClientActMaliciousConfirmationMessage)); | ||
1322 | conf = (struct GNUNET_DHT_ClientActMaliciousConfirmationMessage *) &pm[1]; | ||
1323 | conf->header.size = htons (sizeof (struct GNUNET_DHT_ClientActMaliciousConfirmationMessage)); | ||
1324 | conf->header.type = htons (GNUNET_MESSAGE_TYPE_DHT_CLIENT_ACT_MALICIOUS_OK); | ||
1325 | pm->msg = &conf->header; | ||
1326 | add_pending_message (find_active_client (client), pm); | ||
1327 | GNUNET_SERVER_receive_done (client, GNUNET_OK); | ||
1328 | } | ||
1329 | } | ||
1330 | #endif | ||
1331 | |||
1332 | |||
1333 | /** | ||
1334 | * Functions with this signature are called whenever a client | ||
1335 | * is disconnected on the network level. | ||
1336 | * | ||
1337 | * @param cls closure (NULL for dht) | ||
1338 | * @param client identification of the client; NULL | ||
1339 | * for the last call when the server is destroyed | ||
1340 | */ | ||
1341 | static void | ||
1342 | handle_client_disconnect (void *cls, | ||
1343 | struct GNUNET_SERVER_Client *client) | ||
1344 | { | ||
1345 | struct ClientList *pos; | ||
1346 | struct PendingMessage *reply; | ||
1347 | struct ClientMonitorRecord *monitor; | ||
1348 | |||
1349 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
1350 | "Local client %p disconnects\n", | ||
1351 | client); | ||
1352 | pos = find_active_client (client); | ||
1353 | GNUNET_CONTAINER_DLL_remove (client_head, client_tail, pos); | ||
1354 | if (pos->transmit_handle != NULL) | ||
1355 | GNUNET_SERVER_notify_transmit_ready_cancel (pos->transmit_handle); | ||
1356 | while (NULL != (reply = pos->pending_head)) | ||
1357 | { | ||
1358 | GNUNET_CONTAINER_DLL_remove (pos->pending_head, pos->pending_tail, reply); | ||
1359 | GNUNET_free (reply); | ||
1360 | } | ||
1361 | monitor = monitor_head; | ||
1362 | while (NULL != monitor) | ||
1363 | { | ||
1364 | if (monitor->client == pos) | ||
1365 | { | ||
1366 | struct ClientMonitorRecord *next; | ||
1367 | |||
1368 | GNUNET_free_non_null (monitor->key); | ||
1369 | next = monitor->next; | ||
1370 | GNUNET_CONTAINER_DLL_remove (monitor_head, monitor_tail, monitor); | ||
1371 | GNUNET_free (monitor); | ||
1372 | monitor = next; | ||
1373 | } | ||
1374 | else | ||
1375 | monitor = monitor->next; | ||
1376 | } | ||
1377 | GNUNET_CONTAINER_multihashmap_iterate (forward_map, &remove_client_records, | ||
1378 | pos); | ||
1379 | GNUNET_free (pos); | ||
1380 | } | ||
1381 | |||
1382 | |||
1383 | |||
1384 | /** | ||
1385 | * Initialize client subsystem. | ||
1386 | * | ||
1387 | * @param server the initialized server | ||
1388 | */ | ||
1389 | void | ||
1390 | GDS_CLIENTS_init (struct GNUNET_SERVER_Handle *server) | ||
1391 | { | ||
1392 | static struct GNUNET_SERVER_MessageHandler plugin_handlers[] = { | ||
1393 | {&handle_dht_local_put, NULL, | ||
1394 | GNUNET_MESSAGE_TYPE_DHT_CLIENT_PUT, 0}, | ||
1395 | {&handle_dht_local_get, NULL, | ||
1396 | GNUNET_MESSAGE_TYPE_DHT_CLIENT_GET, 0}, | ||
1397 | {&handle_dht_local_get_stop, NULL, | ||
1398 | GNUNET_MESSAGE_TYPE_DHT_CLIENT_GET_STOP, | ||
1399 | sizeof (struct GNUNET_DHT_ClientGetStopMessage)}, | ||
1400 | {&handle_dht_local_monitor, NULL, | ||
1401 | GNUNET_MESSAGE_TYPE_DHT_MONITOR_START, | ||
1402 | sizeof (struct GNUNET_DHT_MonitorStartStopMessage)}, | ||
1403 | {&handle_dht_local_monitor_stop, NULL, | ||
1404 | GNUNET_MESSAGE_TYPE_DHT_MONITOR_STOP, | ||
1405 | sizeof (struct GNUNET_DHT_MonitorStartStopMessage)}, | ||
1406 | {&handle_dht_local_get_result_seen, NULL, | ||
1407 | GNUNET_MESSAGE_TYPE_DHT_CLIENT_GET_RESULTS_KNOWN, 0}, | ||
1408 | #if ENABLE_MALICIOUS | ||
1409 | {&handle_dht_act_malicious, NULL, | ||
1410 | GNUNET_MESSAGE_TYPE_DHT_ACT_MALICIOUS, | ||
1411 | sizeof (struct GNUNET_DHT_ActMaliciousMessage)}, | ||
1412 | #endif | ||
1413 | {NULL, NULL, 0, 0} | ||
1414 | }; | ||
1415 | forward_map = GNUNET_CONTAINER_multihashmap_create (1024, GNUNET_NO); | ||
1416 | retry_heap = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN); | ||
1417 | GNUNET_SERVER_add_handlers (server, plugin_handlers); | ||
1418 | GNUNET_SERVER_disconnect_notify (server, &handle_client_disconnect, NULL); | ||
1419 | } | ||
1420 | |||
1421 | |||
1422 | /** | ||
1423 | * Shutdown client subsystem. | ||
1424 | */ | ||
1425 | void | ||
1426 | GDS_CLIENTS_done () | ||
1427 | { | ||
1428 | GNUNET_assert (client_head == NULL); | ||
1429 | GNUNET_assert (client_tail == NULL); | ||
1430 | if (NULL != retry_task) | ||
1431 | { | ||
1432 | GNUNET_SCHEDULER_cancel (retry_task); | ||
1433 | retry_task = NULL; | ||
1434 | } | ||
1435 | if (NULL != retry_heap) | ||
1436 | { | ||
1437 | GNUNET_assert (0 == GNUNET_CONTAINER_heap_get_size (retry_heap)); | ||
1438 | GNUNET_CONTAINER_heap_destroy (retry_heap); | ||
1439 | retry_heap = NULL; | ||
1440 | } | ||
1441 | if (NULL != forward_map) | ||
1442 | { | ||
1443 | GNUNET_assert (0 == GNUNET_CONTAINER_multihashmap_size (forward_map)); | ||
1444 | GNUNET_CONTAINER_multihashmap_destroy (forward_map); | ||
1445 | forward_map = NULL; | ||
1446 | } | ||
1447 | } | ||
1448 | |||
1449 | /* end of gnunet-service-dht_clients.c */ | ||
diff --git a/src/dht/gnunet-service-wdht_clients.h b/src/dht/gnunet-service-wdht_clients.h new file mode 100644 index 000000000..f1781332c --- /dev/null +++ b/src/dht/gnunet-service-wdht_clients.h | |||
@@ -0,0 +1,149 @@ | |||
1 | /* | ||
2 | This file is part of GNUnet. | ||
3 | Copyright (C) 2009, 2010, 2011 Christian Grothoff (and other contributing authors) | ||
4 | |||
5 | GNUnet is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published | ||
7 | by the Free Software Foundation; either version 3, or (at your | ||
8 | 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 | General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with GNUnet; see the file COPYING. If not, write to the | ||
17 | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /** | ||
22 | * @file dht/gnunet-service-xdht_clients.h | ||
23 | * @brief GNUnet DHT service's client management code | ||
24 | * @author Christian Grothoff | ||
25 | * @author Nathan Evans | ||
26 | */ | ||
27 | #ifndef GNUNET_SERVICE_DHT_CLIENT_H | ||
28 | #define GNUNET_SERVICE_DHT_CLIENT_H | ||
29 | |||
30 | #include "gnunet_util_lib.h" | ||
31 | #include "gnunet_block_lib.h" | ||
32 | |||
33 | /** | ||
34 | * Handle a reply we've received from another peer. If the reply | ||
35 | * matches any of our pending queries, forward it to the respective | ||
36 | * client(s). | ||
37 | * | ||
38 | * @param expiration when will the reply expire | ||
39 | * @param key the query this reply is for | ||
40 | * @param get_path_length number of peers in @a get_path | ||
41 | * @param get_path path the reply took on get | ||
42 | * @param put_path_length number of peers in @a put_path | ||
43 | * @param put_path path the reply took on put | ||
44 | * @param type type of the reply | ||
45 | * @param data_size number of bytes in @a data | ||
46 | * @param data application payload data | ||
47 | */ | ||
48 | void | ||
49 | GDS_CLIENTS_handle_reply (struct GNUNET_TIME_Absolute expiration, | ||
50 | const struct GNUNET_HashCode *key, | ||
51 | unsigned int get_path_length, | ||
52 | const struct GNUNET_PeerIdentity *get_path, | ||
53 | unsigned int put_path_length, | ||
54 | const struct GNUNET_PeerIdentity *put_path, | ||
55 | enum GNUNET_BLOCK_Type type, size_t data_size, | ||
56 | const void *data); | ||
57 | |||
58 | |||
59 | /** | ||
60 | * Check if some client is monitoring GET messages and notify | ||
61 | * them in that case. | ||
62 | * | ||
63 | * @param options Options, for instance RecordRoute, DemultiplexEverywhere. | ||
64 | * @param type The type of data in the request. | ||
65 | * @param hop_count Hop count so far. | ||
66 | * @param path_length number of entries in path (or 0 if not recorded). | ||
67 | * @param path peers on the GET path (or NULL if not recorded). | ||
68 | * @param desired_replication_level Desired replication level. | ||
69 | * @param key Key of the requested data. | ||
70 | */ | ||
71 | void | ||
72 | GDS_CLIENTS_process_get (uint32_t options, | ||
73 | enum GNUNET_BLOCK_Type type, | ||
74 | uint32_t hop_count, | ||
75 | uint32_t desired_replication_level, | ||
76 | unsigned int path_length, | ||
77 | const struct GNUNET_PeerIdentity *path, | ||
78 | const struct GNUNET_HashCode *key); | ||
79 | |||
80 | |||
81 | /** | ||
82 | * Check if some client is monitoring GET RESP messages and notify | ||
83 | * them in that case. | ||
84 | * | ||
85 | * @param type The type of data in the result. | ||
86 | * @param get_path Peers on GET path (or NULL if not recorded). | ||
87 | * @param get_path_length number of entries in @a get_path. | ||
88 | * @param put_path peers on the PUT path (or NULL if not recorded). | ||
89 | * @param put_path_length number of entries in @a get_path. | ||
90 | * @param exp Expiration time of the data. | ||
91 | * @param key Key of the @a data. | ||
92 | * @param data Pointer to the result data. | ||
93 | * @param size Number of bytes in @a data. | ||
94 | */ | ||
95 | void | ||
96 | GDS_CLIENTS_process_get_resp (enum GNUNET_BLOCK_Type type, | ||
97 | const struct GNUNET_PeerIdentity *get_path, | ||
98 | unsigned int get_path_length, | ||
99 | const struct GNUNET_PeerIdentity *put_path, | ||
100 | unsigned int put_path_length, | ||
101 | struct GNUNET_TIME_Absolute exp, | ||
102 | const struct GNUNET_HashCode * key, | ||
103 | const void *data, | ||
104 | size_t size); | ||
105 | |||
106 | |||
107 | /** | ||
108 | * Check if some client is monitoring PUT messages and notify | ||
109 | * them in that case. | ||
110 | * | ||
111 | * @param options Options, for instance RecordRoute, DemultiplexEverywhere. | ||
112 | * @param type The type of data in the request. | ||
113 | * @param hop_count Hop count so far. | ||
114 | * @param path_length number of entries in path (or 0 if not recorded). | ||
115 | * @param path peers on the PUT path (or NULL if not recorded). | ||
116 | * @param desired_replication_level Desired replication level. | ||
117 | * @param exp Expiration time of the data. | ||
118 | * @param key Key under which data is to be stored. | ||
119 | * @param data Pointer to the data carried. | ||
120 | * @param size Number of bytes in data. | ||
121 | */ | ||
122 | void | ||
123 | GDS_CLIENTS_process_put (uint32_t options, | ||
124 | enum GNUNET_BLOCK_Type type, | ||
125 | uint32_t hop_count, | ||
126 | uint32_t desired_replication_level, | ||
127 | unsigned int path_length, | ||
128 | const struct GNUNET_PeerIdentity *path, | ||
129 | struct GNUNET_TIME_Absolute exp, | ||
130 | const struct GNUNET_HashCode * key, | ||
131 | const void *data, | ||
132 | size_t size); | ||
133 | |||
134 | /** | ||
135 | * Initialize client subsystem. | ||
136 | * | ||
137 | * @param server the initialized server | ||
138 | */ | ||
139 | void | ||
140 | GDS_CLIENTS_init (struct GNUNET_SERVER_Handle *server); | ||
141 | |||
142 | |||
143 | /** | ||
144 | * Shutdown client subsystem. | ||
145 | */ | ||
146 | void | ||
147 | GDS_CLIENTS_done (void); | ||
148 | |||
149 | #endif | ||
diff --git a/src/dht/gnunet-service-wdht_datacache.c b/src/dht/gnunet-service-wdht_datacache.c new file mode 100644 index 000000000..571342f36 --- /dev/null +++ b/src/dht/gnunet-service-wdht_datacache.c | |||
@@ -0,0 +1,381 @@ | |||
1 | /* | ||
2 | This file is part of GNUnet. | ||
3 | Copyright (C) 2009, 2010, 2011 Christian Grothoff (and other contributing authors) | ||
4 | |||
5 | GNUnet is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published | ||
7 | by the Free Software Foundation; either version 3, or (at your | ||
8 | 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 | General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with GNUnet; see the file COPYING. If not, write to the | ||
17 | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /** | ||
22 | * @file dht/gnunet-service-dht_datacache.c | ||
23 | * @brief GNUnet DHT service's datacache integration | ||
24 | * @author Christian Grothoff | ||
25 | * @author Nathan Evans | ||
26 | */ | ||
27 | #include "platform.h" | ||
28 | #include "gnunet_datacache_lib.h" | ||
29 | #include "gnunet-service-wdht_clients.h" | ||
30 | #include "gnunet-service-wdht_datacache.h" | ||
31 | #include "gnunet-service-wdht_routing.h" | ||
32 | #include "gnunet-service-wdht_neighbours.h" | ||
33 | #include "gnunet-service-dht.h" | ||
34 | |||
35 | #define LOG(kind,...) GNUNET_log_from (kind, "dht-dtcache",__VA_ARGS__) | ||
36 | |||
37 | #define DEBUG(...) \ | ||
38 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, __VA_ARGS__) | ||
39 | |||
40 | /** | ||
41 | * Handle to the datacache service (for inserting/retrieving data) | ||
42 | */ | ||
43 | static struct GNUNET_DATACACHE_Handle *datacache; | ||
44 | |||
45 | |||
46 | /** | ||
47 | * Handle a datum we've received from another peer. Cache if | ||
48 | * possible. | ||
49 | * | ||
50 | * @param expiration when will the reply expire | ||
51 | * @param key the query this reply is for | ||
52 | * @param put_path_length number of peers in 'put_path' | ||
53 | * @param put_path path the reply took on put | ||
54 | * @param type type of the reply | ||
55 | * @param data_size number of bytes in 'data' | ||
56 | * @param data application payload data | ||
57 | */ | ||
58 | void | ||
59 | GDS_DATACACHE_handle_put (struct GNUNET_TIME_Absolute expiration, | ||
60 | const struct GNUNET_HashCode * key, | ||
61 | unsigned int put_path_length, | ||
62 | const struct GNUNET_PeerIdentity *put_path, | ||
63 | enum GNUNET_BLOCK_Type type, size_t data_size, | ||
64 | const void *data) | ||
65 | { | ||
66 | int r; | ||
67 | |||
68 | if (NULL == datacache) | ||
69 | { | ||
70 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, | ||
71 | _("%s request received, but have no datacache!\n"), "PUT"); | ||
72 | return; | ||
73 | } | ||
74 | if (data_size >= GNUNET_SERVER_MAX_MESSAGE_SIZE) | ||
75 | { | ||
76 | GNUNET_break (0); | ||
77 | return; | ||
78 | } | ||
79 | |||
80 | /* Put size is actual data size plus struct overhead plus path length (if any) */ | ||
81 | GNUNET_STATISTICS_update (GDS_stats, | ||
82 | gettext_noop ("# ITEMS stored in datacache"), 1, | ||
83 | GNUNET_NO); | ||
84 | |||
85 | struct GNUNET_PeerIdentity peer = GDS_NEIGHBOURS_get_my_id(); | ||
86 | DEBUG("DATACACHE_PUT KEY = %s, peer = %s\n",GNUNET_h2s(key),GNUNET_i2s(&peer)); | ||
87 | r = GNUNET_DATACACHE_put (datacache, key, data_size, data, type, expiration, | ||
88 | put_path_length, put_path); | ||
89 | LOG (GNUNET_ERROR_TYPE_DEBUG, | ||
90 | "DATACACHE PUT for key %s [%u] completed (%d) after %u hops\n", | ||
91 | GNUNET_h2s (key), data_size, r, put_path_length); | ||
92 | } | ||
93 | |||
94 | /** | ||
95 | * List of peers in the get path. | ||
96 | */ | ||
97 | struct GetPath | ||
98 | { | ||
99 | /** | ||
100 | * Pointer to next item in the list | ||
101 | */ | ||
102 | struct GetPath *next; | ||
103 | |||
104 | /** | ||
105 | * Pointer to previous item in the list | ||
106 | */ | ||
107 | struct GetPath *prev; | ||
108 | |||
109 | /** | ||
110 | * An element in the get path. | ||
111 | */ | ||
112 | struct GNUNET_PeerIdentity peer; | ||
113 | }; | ||
114 | |||
115 | |||
116 | /** | ||
117 | * Context containing information about a GET request. | ||
118 | */ | ||
119 | struct GetRequestContext | ||
120 | { | ||
121 | /** | ||
122 | * extended query (see gnunet_block_lib.h). | ||
123 | */ | ||
124 | const void *xquery; | ||
125 | |||
126 | /** | ||
127 | * Bloomfilter to filter out duplicate replies (updated) | ||
128 | */ | ||
129 | struct GNUNET_CONTAINER_BloomFilter **reply_bf; | ||
130 | |||
131 | /** | ||
132 | * The key this request was about | ||
133 | */ | ||
134 | struct GNUNET_HashCode key; | ||
135 | |||
136 | /** | ||
137 | * Number of bytes in xquery. | ||
138 | */ | ||
139 | size_t xquery_size; | ||
140 | |||
141 | /** | ||
142 | * Mutator value for the reply_bf, see gnunet_block_lib.h | ||
143 | */ | ||
144 | uint32_t reply_bf_mutator; | ||
145 | |||
146 | /** | ||
147 | * Total number of peers in get path. | ||
148 | */ | ||
149 | unsigned int get_path_length; | ||
150 | |||
151 | /** | ||
152 | * Return value to give back. | ||
153 | */ | ||
154 | enum GNUNET_BLOCK_EvaluationResult eval; | ||
155 | |||
156 | /** | ||
157 | * Peeer which has the data for the key. | ||
158 | */ | ||
159 | struct GNUNET_PeerIdentity source_peer; | ||
160 | |||
161 | /** | ||
162 | * Next hop to forward the get result to. | ||
163 | */ | ||
164 | struct GNUNET_PeerIdentity next_hop; | ||
165 | |||
166 | /** | ||
167 | * Head of get path. | ||
168 | */ | ||
169 | struct GetPath *head; | ||
170 | |||
171 | /** | ||
172 | * Tail of get path. | ||
173 | */ | ||
174 | struct GetPath *tail; | ||
175 | |||
176 | /* get_path */ | ||
177 | }; | ||
178 | |||
179 | |||
180 | /** | ||
181 | * Iterator for local get request results, | ||
182 | * | ||
183 | * @param cls closure for iterator, a `struct GetRequestContext` | ||
184 | * @param key the key this data is stored under | ||
185 | * @param size the size of the data identified by key | ||
186 | * @param data the actual data | ||
187 | * @param type the type of the data | ||
188 | * @param exp when does this value expire? | ||
189 | * @param put_path_length number of peers in @a put_path | ||
190 | * @param put_path path the reply took on put | ||
191 | * @return #GNUNET_OK to continue iteration, anything else | ||
192 | * to stop iteration. | ||
193 | */ | ||
194 | static int | ||
195 | datacache_get_iterator (void *cls, | ||
196 | const struct GNUNET_HashCode *key, | ||
197 | size_t size, | ||
198 | const char *data, | ||
199 | enum GNUNET_BLOCK_Type type, | ||
200 | struct GNUNET_TIME_Absolute exp, | ||
201 | unsigned int put_path_length, | ||
202 | const struct GNUNET_PeerIdentity *put_path) | ||
203 | { | ||
204 | struct GetRequestContext *ctx = cls; | ||
205 | enum GNUNET_BLOCK_EvaluationResult eval; | ||
206 | |||
207 | eval = | ||
208 | GNUNET_BLOCK_evaluate (GDS_block_context, | ||
209 | type, | ||
210 | GNUNET_BLOCK_EO_NONE, | ||
211 | key, | ||
212 | ctx->reply_bf, | ||
213 | ctx->reply_bf_mutator, | ||
214 | ctx->xquery, | ||
215 | ctx->xquery_size, | ||
216 | data, | ||
217 | size); | ||
218 | LOG (GNUNET_ERROR_TYPE_DEBUG, | ||
219 | "Found reply for query %s in datacache, evaluation result is %d\n", | ||
220 | GNUNET_h2s (key), (int) eval); | ||
221 | ctx->eval = eval; | ||
222 | |||
223 | switch (eval) | ||
224 | { | ||
225 | case GNUNET_BLOCK_EVALUATION_OK_MORE: | ||
226 | case GNUNET_BLOCK_EVALUATION_OK_LAST: | ||
227 | /* forward to local clients */ | ||
228 | GNUNET_STATISTICS_update (GDS_stats, | ||
229 | gettext_noop | ||
230 | ("# Good RESULTS found in datacache"), 1, | ||
231 | GNUNET_NO); | ||
232 | struct GNUNET_PeerIdentity *get_path; | ||
233 | get_path = GNUNET_malloc (sizeof (struct GNUNET_PeerIdentity) * | ||
234 | ctx->get_path_length); | ||
235 | struct GetPath *iterator; | ||
236 | iterator = ctx->head; | ||
237 | int i = 0; | ||
238 | while (i < ctx->get_path_length) | ||
239 | { | ||
240 | get_path[i] = iterator->peer; | ||
241 | i++; | ||
242 | iterator = iterator->next; | ||
243 | } | ||
244 | GDS_NEIGHBOURS_send_get_result (key,type, &(ctx->next_hop),&(ctx->source_peer), | ||
245 | put_path_length, put_path, ctx->get_path_length, | ||
246 | get_path, exp, data, size ); | ||
247 | GNUNET_free_non_null (get_path); | ||
248 | |||
249 | break; | ||
250 | case GNUNET_BLOCK_EVALUATION_OK_DUPLICATE: | ||
251 | GNUNET_STATISTICS_update (GDS_stats, | ||
252 | gettext_noop | ||
253 | ("# Duplicate RESULTS found in datacache"), 1, | ||
254 | GNUNET_NO); | ||
255 | break; | ||
256 | case GNUNET_BLOCK_EVALUATION_RESULT_INVALID: | ||
257 | GNUNET_STATISTICS_update (GDS_stats, | ||
258 | gettext_noop | ||
259 | ("# Invalid RESULTS found in datacache"), 1, | ||
260 | GNUNET_NO); | ||
261 | break; | ||
262 | case GNUNET_BLOCK_EVALUATION_RESULT_IRRELEVANT: | ||
263 | GNUNET_STATISTICS_update (GDS_stats, | ||
264 | gettext_noop | ||
265 | ("# Irrelevant RESULTS found in datacache"), 1, | ||
266 | GNUNET_NO); | ||
267 | break; | ||
268 | case GNUNET_BLOCK_EVALUATION_REQUEST_VALID: | ||
269 | GNUNET_break (0); | ||
270 | break; | ||
271 | case GNUNET_BLOCK_EVALUATION_REQUEST_INVALID: | ||
272 | GNUNET_break_op (0); | ||
273 | return GNUNET_SYSERR; | ||
274 | case GNUNET_BLOCK_EVALUATION_TYPE_NOT_SUPPORTED: | ||
275 | GNUNET_STATISTICS_update (GDS_stats, | ||
276 | gettext_noop | ||
277 | ("# Unsupported RESULTS found in datacache"), 1, | ||
278 | GNUNET_NO); | ||
279 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, | ||
280 | _("Unsupported block type (%u) in local response!\n"), type); | ||
281 | break; | ||
282 | } | ||
283 | |||
284 | return (eval == GNUNET_BLOCK_EVALUATION_OK_LAST) ? GNUNET_NO : GNUNET_OK; | ||
285 | } | ||
286 | |||
287 | |||
288 | /** | ||
289 | * Handle a GET request we've received from another peer. | ||
290 | * | ||
291 | * @param key the query | ||
292 | * @param type requested data type | ||
293 | * @param xquery extended query | ||
294 | * @param xquery_size number of bytes in xquery | ||
295 | * @param reply_bf where the reply bf is (to be) stored, possibly updated, can be NULL | ||
296 | * @param reply_bf_mutator mutation value for reply_bf | ||
297 | * @return evaluation result for the local replies | ||
298 | * @get_path_length Total number of peers in get path | ||
299 | * @get_path Peers in get path. | ||
300 | */ | ||
301 | enum GNUNET_BLOCK_EvaluationResult | ||
302 | GDS_DATACACHE_handle_get (const struct GNUNET_HashCode * key, | ||
303 | enum GNUNET_BLOCK_Type type, const void *xquery, | ||
304 | size_t xquery_size, | ||
305 | struct GNUNET_CONTAINER_BloomFilter **reply_bf, | ||
306 | uint32_t reply_bf_mutator, | ||
307 | uint32_t get_path_length, | ||
308 | struct GNUNET_PeerIdentity *get_path, | ||
309 | struct GNUNET_PeerIdentity *next_hop, | ||
310 | struct GNUNET_PeerIdentity *source_peer) | ||
311 | { | ||
312 | struct GetRequestContext ctx; | ||
313 | unsigned int r; | ||
314 | |||
315 | if (datacache == NULL) | ||
316 | return GNUNET_BLOCK_EVALUATION_REQUEST_VALID; | ||
317 | GNUNET_STATISTICS_update (GDS_stats, | ||
318 | gettext_noop ("# GET requests given to datacache"), | ||
319 | 1, GNUNET_NO); | ||
320 | ctx.eval = GNUNET_BLOCK_EVALUATION_REQUEST_VALID; | ||
321 | ctx.key = *key; | ||
322 | ctx.xquery = xquery; | ||
323 | ctx.xquery_size = xquery_size; | ||
324 | ctx.reply_bf = reply_bf; | ||
325 | ctx.reply_bf_mutator = reply_bf_mutator; | ||
326 | ctx.get_path_length = get_path_length; | ||
327 | |||
328 | if (next_hop != NULL) | ||
329 | { | ||
330 | memcpy (&(ctx.next_hop), next_hop, sizeof (struct GNUNET_PeerIdentity)); | ||
331 | } | ||
332 | unsigned int i = 0; | ||
333 | |||
334 | ctx.head = NULL; | ||
335 | ctx.tail = NULL; | ||
336 | if (get_path != NULL) | ||
337 | { | ||
338 | while (i < get_path_length) | ||
339 | { | ||
340 | struct GetPath *element; | ||
341 | element = GNUNET_new (struct GetPath); | ||
342 | element->next = NULL; | ||
343 | element->prev = NULL; | ||
344 | element->peer = get_path[i]; | ||
345 | GNUNET_CONTAINER_DLL_insert_tail (ctx.head, ctx.tail, element); | ||
346 | i++; | ||
347 | } | ||
348 | } | ||
349 | |||
350 | r = GNUNET_DATACACHE_get (datacache, key, type, &datacache_get_iterator, | ||
351 | &ctx); | ||
352 | DEBUG ("DATACACHE_GET for key %s completed (%d). %u results found.\n",GNUNET_h2s (key), ctx.eval, r); | ||
353 | return ctx.eval; | ||
354 | } | ||
355 | |||
356 | |||
357 | /** | ||
358 | * Initialize datacache subsystem. | ||
359 | */ | ||
360 | void | ||
361 | GDS_DATACACHE_init () | ||
362 | { | ||
363 | datacache = GNUNET_DATACACHE_create (GDS_cfg, "dhtcache"); | ||
364 | } | ||
365 | |||
366 | |||
367 | /** | ||
368 | * Shutdown datacache subsystem. | ||
369 | */ | ||
370 | void | ||
371 | GDS_DATACACHE_done () | ||
372 | { | ||
373 | if (datacache != NULL) | ||
374 | { | ||
375 | GNUNET_DATACACHE_destroy (datacache); | ||
376 | datacache = NULL; | ||
377 | } | ||
378 | } | ||
379 | |||
380 | |||
381 | /* end of gnunet-service-dht_datacache.c */ | ||
diff --git a/src/dht/gnunet-service-wdht_datacache.h b/src/dht/gnunet-service-wdht_datacache.h new file mode 100644 index 000000000..a8f37fa63 --- /dev/null +++ b/src/dht/gnunet-service-wdht_datacache.h | |||
@@ -0,0 +1,90 @@ | |||
1 | /* | ||
2 | This file is part of GNUnet. | ||
3 | Copyright (C) 2009, 2010, 2011 Christian Grothoff (and other contributing authors) | ||
4 | |||
5 | GNUnet is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published | ||
7 | by the Free Software Foundation; either version 3, or (at your | ||
8 | 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 | General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with GNUnet; see the file COPYING. If not, write to the | ||
17 | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /** | ||
22 | * @file dht/gnunet-service-dht_datacache.h | ||
23 | * @brief GNUnet DHT service's datacache integration | ||
24 | * @author Christian Grothoff | ||
25 | * @author Nathan Evans | ||
26 | */ | ||
27 | #ifndef GNUNET_SERVICE_DHT_DATACACHE_H | ||
28 | #define GNUNET_SERVICE_DHT_DATACACHE_H | ||
29 | |||
30 | #include "gnunet_util_lib.h" | ||
31 | #include "gnunet_block_lib.h" | ||
32 | |||
33 | /** | ||
34 | * Handle a datum we've received from another peer. Cache if | ||
35 | * possible. | ||
36 | * | ||
37 | * @param expiration when will the reply expire | ||
38 | * @param key the query this reply is for | ||
39 | * @param put_path_length number of peers in 'put_path' | ||
40 | * @param put_path path the reply took on put | ||
41 | * @param type type of the reply | ||
42 | * @param data_size number of bytes in 'data' | ||
43 | * @param data application payload data | ||
44 | */ | ||
45 | void | ||
46 | GDS_DATACACHE_handle_put (struct GNUNET_TIME_Absolute expiration, | ||
47 | const struct GNUNET_HashCode * key, | ||
48 | unsigned int put_path_length, | ||
49 | const struct GNUNET_PeerIdentity *put_path, | ||
50 | enum GNUNET_BLOCK_Type type, size_t data_size, | ||
51 | const void *data); | ||
52 | |||
53 | |||
54 | /** | ||
55 | * Handle a GET request we've received from another peer. | ||
56 | * | ||
57 | * @param key the query | ||
58 | * @param type requested data type | ||
59 | * @param xquery extended query | ||
60 | * @param xquery_size number of bytes in xquery | ||
61 | * @param reply_bf where the reply bf is (to be) stored, possibly updated!, can be NULL | ||
62 | * @param reply_bf_mutator mutation value for reply_bf | ||
63 | * @return evaluation result for the local replies | ||
64 | */ | ||
65 | enum GNUNET_BLOCK_EvaluationResult | ||
66 | GDS_DATACACHE_handle_get (const struct GNUNET_HashCode * key, | ||
67 | enum GNUNET_BLOCK_Type type, const void *xquery, | ||
68 | size_t xquery_size, | ||
69 | struct GNUNET_CONTAINER_BloomFilter **reply_bf, | ||
70 | uint32_t reply_bf_mutator, | ||
71 | uint32_t get_path_length, | ||
72 | struct GNUNET_PeerIdentity *get_path, | ||
73 | struct GNUNET_PeerIdentity *next_hop, | ||
74 | struct GNUNET_PeerIdentity *source_peer); | ||
75 | |||
76 | |||
77 | /** | ||
78 | * Initialize datacache subsystem. | ||
79 | */ | ||
80 | void | ||
81 | GDS_DATACACHE_init (void); | ||
82 | |||
83 | |||
84 | /** | ||
85 | * Shutdown datacache subsystem. | ||
86 | */ | ||
87 | void | ||
88 | GDS_DATACACHE_done (void); | ||
89 | |||
90 | #endif | ||
diff --git a/src/dht/gnunet-service-wdht_hello.c b/src/dht/gnunet-service-wdht_hello.c new file mode 100644 index 000000000..c5e6c7999 --- /dev/null +++ b/src/dht/gnunet-service-wdht_hello.c | |||
@@ -0,0 +1,137 @@ | |||
1 | /* | ||
2 | This file is part of GNUnet. | ||
3 | Copyright (C) 2011 Christian Grothoff (and other contributing authors) | ||
4 | |||
5 | GNUnet is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published | ||
7 | by the Free Software Foundation; either version 3, or (at your | ||
8 | 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 | General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with GNUnet; see the file COPYING. If not, write to the | ||
17 | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /** | ||
22 | * @file dht/gnunet-service-xdht_hello.c | ||
23 | * @brief GNUnet DHT integration with peerinfo | ||
24 | * @author Christian Grothoff | ||
25 | * | ||
26 | * TODO: | ||
27 | * - consider adding mechanism to remove expired HELLOs | ||
28 | */ | ||
29 | #include "platform.h" | ||
30 | #include "gnunet-service-wdht.h" | ||
31 | #include "gnunet-service-wdht_hello.h" | ||
32 | #include "gnunet_peerinfo_service.h" | ||
33 | |||
34 | |||
35 | /** | ||
36 | * Handle for peerinfo notifications. | ||
37 | */ | ||
38 | static struct GNUNET_PEERINFO_NotifyContext *pnc; | ||
39 | |||
40 | /** | ||
41 | * Hash map of peers to HELLOs. | ||
42 | */ | ||
43 | static struct GNUNET_CONTAINER_MultiPeerMap *peer_to_hello; | ||
44 | |||
45 | |||
46 | /** | ||
47 | * Obtain a peer's HELLO if available | ||
48 | * | ||
49 | * @param peer peer to look for a HELLO from | ||
50 | * @return HELLO for the given peer | ||
51 | */ | ||
52 | const struct GNUNET_HELLO_Message * | ||
53 | GDS_HELLO_get (const struct GNUNET_PeerIdentity *peer) | ||
54 | { | ||
55 | if (NULL == peer_to_hello) | ||
56 | return NULL; | ||
57 | return GNUNET_CONTAINER_multipeermap_get (peer_to_hello, peer); | ||
58 | } | ||
59 | |||
60 | |||
61 | /** | ||
62 | * Function called for each HELLO known to PEERINFO. | ||
63 | * | ||
64 | * @param cls closure | ||
65 | * @param peer id of the peer, NULL for last call | ||
66 | * @param hello hello message for the peer (can be NULL) | ||
67 | * @param err_msg error message (not used) | ||
68 | */ | ||
69 | static void | ||
70 | process_hello (void *cls, const struct GNUNET_PeerIdentity *peer, | ||
71 | const struct GNUNET_HELLO_Message *hello, const char *err_msg) | ||
72 | { | ||
73 | struct GNUNET_TIME_Absolute ex; | ||
74 | struct GNUNET_HELLO_Message *hm; | ||
75 | |||
76 | if (hello == NULL) | ||
77 | return; | ||
78 | ex = GNUNET_HELLO_get_last_expiration (hello); | ||
79 | if (0 == GNUNET_TIME_absolute_get_remaining (ex).rel_value_us) | ||
80 | return; | ||
81 | GNUNET_STATISTICS_update (GDS_stats, | ||
82 | gettext_noop ("# HELLOs obtained from peerinfo"), 1, | ||
83 | GNUNET_NO); | ||
84 | hm = GNUNET_CONTAINER_multipeermap_get (peer_to_hello, peer); | ||
85 | GNUNET_free_non_null (hm); | ||
86 | hm = GNUNET_malloc (GNUNET_HELLO_size (hello)); | ||
87 | memcpy (hm, hello, GNUNET_HELLO_size (hello)); | ||
88 | GNUNET_assert (GNUNET_SYSERR != | ||
89 | GNUNET_CONTAINER_multipeermap_put (peer_to_hello, | ||
90 | peer, hm, | ||
91 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE)); | ||
92 | } | ||
93 | |||
94 | |||
95 | /** | ||
96 | * Initialize HELLO subsystem. | ||
97 | */ | ||
98 | void | ||
99 | GDS_HELLO_init () | ||
100 | { | ||
101 | pnc = GNUNET_PEERINFO_notify (GDS_cfg, GNUNET_NO, &process_hello, NULL); | ||
102 | peer_to_hello = GNUNET_CONTAINER_multipeermap_create (256, GNUNET_NO); | ||
103 | } | ||
104 | |||
105 | |||
106 | /** | ||
107 | * Free memory occopied by the HELLO. | ||
108 | */ | ||
109 | static int | ||
110 | free_hello (void *cls, | ||
111 | const struct GNUNET_PeerIdentity *key, | ||
112 | void *hello) | ||
113 | { | ||
114 | GNUNET_free (hello); | ||
115 | return GNUNET_OK; | ||
116 | } | ||
117 | |||
118 | |||
119 | /** | ||
120 | * Shutdown HELLO subsystem. | ||
121 | */ | ||
122 | void | ||
123 | GDS_HELLO_done () | ||
124 | { | ||
125 | if (NULL != pnc) | ||
126 | { | ||
127 | GNUNET_PEERINFO_notify_cancel (pnc); | ||
128 | pnc = NULL; | ||
129 | } | ||
130 | if (NULL != peer_to_hello) | ||
131 | { | ||
132 | GNUNET_CONTAINER_multipeermap_iterate (peer_to_hello, &free_hello, NULL); | ||
133 | GNUNET_CONTAINER_multipeermap_destroy (peer_to_hello); | ||
134 | } | ||
135 | } | ||
136 | |||
137 | /* end of gnunet-service-dht_hello.c */ | ||
diff --git a/src/dht/gnunet-service-wdht_hello.h b/src/dht/gnunet-service-wdht_hello.h new file mode 100644 index 000000000..e7376e7b0 --- /dev/null +++ b/src/dht/gnunet-service-wdht_hello.h | |||
@@ -0,0 +1,55 @@ | |||
1 | /* | ||
2 | This file is part of GNUnet. | ||
3 | Copyright (C) 2011 Christian Grothoff (and other contributing authors) | ||
4 | |||
5 | GNUnet is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published | ||
7 | by the Free Software Foundation; either version 3, or (at your | ||
8 | 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 | General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with GNUnet; see the file COPYING. If not, write to the | ||
17 | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /** | ||
22 | * @file dht/gnunet-service-xdht_hello.h | ||
23 | * @brief GNUnet DHT integration with peerinfo | ||
24 | * @author Christian Grothoff | ||
25 | */ | ||
26 | #ifndef GNUNET_SERVICE_XDHT_HELLO_H | ||
27 | #define GNUNET_SERVICE_XDHT_HELLO_H | ||
28 | |||
29 | #include "gnunet_util_lib.h" | ||
30 | #include "gnunet_hello_lib.h" | ||
31 | |||
32 | /** | ||
33 | * Obtain a peer's HELLO if available | ||
34 | * | ||
35 | * @param peer peer to look for a HELLO from | ||
36 | * @return HELLO for the given peer | ||
37 | */ | ||
38 | const struct GNUNET_HELLO_Message * | ||
39 | GDS_HELLO_get (const struct GNUNET_PeerIdentity *peer); | ||
40 | |||
41 | |||
42 | /** | ||
43 | * Initialize HELLO subsystem. | ||
44 | */ | ||
45 | void | ||
46 | GDS_HELLO_init (void); | ||
47 | |||
48 | |||
49 | /** | ||
50 | * Shutdown HELLO subsystem. | ||
51 | */ | ||
52 | void | ||
53 | GDS_HELLO_done (void); | ||
54 | |||
55 | #endif | ||
diff --git a/src/dht/gnunet-service-wdht_neighbours.c b/src/dht/gnunet-service-wdht_neighbours.c new file mode 100644 index 000000000..c91b78a69 --- /dev/null +++ b/src/dht/gnunet-service-wdht_neighbours.c | |||
@@ -0,0 +1,6290 @@ | |||
1 | /* | ||
2 | This file is part of GNUnet. | ||
3 | Copyright (C) 2009-2014 Christian Grothoff (and other contributing authors) | ||
4 | |||
5 | GNUnet is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published | ||
7 | by the Free Software Foundation; either version 3, or (at your | ||
8 | 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 | General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with GNUnet; see the file COPYING. If not, write to the | ||
17 | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /** | ||
22 | * @file dht/gnunet-service-xdht_neighbours.c | ||
23 | * @brief GNUnet DHT service's finger and friend table management code | ||
24 | * @author Supriti Singh | ||
25 | */ | ||
26 | |||
27 | #include "platform.h" | ||
28 | #include "gnunet_util_lib.h" | ||
29 | #include "gnunet_block_lib.h" | ||
30 | #include "gnunet_hello_lib.h" | ||
31 | #include "gnunet_constants.h" | ||
32 | #include "gnunet_protocols.h" | ||
33 | #include "gnunet_ats_service.h" | ||
34 | #include "gnunet_core_service.h" | ||
35 | #include "gnunet_datacache_lib.h" | ||
36 | #include "gnunet_transport_service.h" | ||
37 | #include "gnunet_dht_service.h" | ||
38 | #include "gnunet_statistics_service.h" | ||
39 | #include "gnunet-service-xdht.h" | ||
40 | #include "gnunet-service-wdht_clients.h" | ||
41 | #include "gnunet-service-wdht_datacache.h" | ||
42 | #include "gnunet-service-wdht_neighbours.h" | ||
43 | #include "gnunet-service-wdht_routing.h" | ||
44 | #include <fenv.h> | ||
45 | #include "dht.h" | ||
46 | |||
47 | /** | ||
48 | * TODO: | ||
49 | * 1. In X-Vine paper, there is no policy defined for replicating the data to | ||
50 | * recover in case of peer failure. We can do it in Chord way. In R5N, the key | ||
51 | * is hashed and then data is stored according to the key value generated after | ||
52 | * hashing. | ||
53 | */ | ||
54 | |||
55 | #define DEBUG(...) \ | ||
56 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, __VA_ARGS__) | ||
57 | |||
58 | /** | ||
59 | * Maximum possible fingers (including predecessor) of a peer | ||
60 | */ | ||
61 | #define MAX_FINGERS 65 | ||
62 | |||
63 | /** | ||
64 | * Maximum allowed number of pending messages per friend peer. | ||
65 | */ | ||
66 | #define MAXIMUM_PENDING_PER_FRIEND 64 | ||
67 | |||
68 | /** | ||
69 | * How long to wait before sending another find finger trail request | ||
70 | */ | ||
71 | #define DHT_FIND_FINGER_TRAIL_INTERVAL GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 2) | ||
72 | |||
73 | /** | ||
74 | * How long to wait before sending another verify successor message. | ||
75 | */ | ||
76 | #define DHT_SEND_VERIFY_SUCCESSOR_INTERVAL GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 2) | ||
77 | |||
78 | /** | ||
79 | * How long to wait before sending another verify successor message. | ||
80 | */ | ||
81 | #define DHT_SEND_VERIFY_SUCCESSOR_RETRY_INTERVAL GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 30) | ||
82 | |||
83 | /** | ||
84 | * How long to wait before retrying notify successor. | ||
85 | */ | ||
86 | #define DHT_SEND_NOTIFY_SUCCESSOR_RETRY_INTERVAL GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 30) | ||
87 | |||
88 | /** | ||
89 | * How long at most to wait for transmission of a request to a friend ? | ||
90 | */ | ||
91 | #define PENDING_MESSAGE_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MINUTES, 2) | ||
92 | |||
93 | /** | ||
94 | * Duration for which I may remain congested. | ||
95 | * Note: Its a static value. In future, a peer may do some analysis and calculate | ||
96 | * congestion_timeout based on 'some' parameters. | ||
97 | */ | ||
98 | #define CONGESTION_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MINUTES, 2) | ||
99 | |||
100 | /** | ||
101 | * In case we don't hear back from the current successor, then we can start | ||
102 | * verify successor. | ||
103 | */ | ||
104 | #define WAIT_NOTIFY_CONFIRMATION GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS, 200) | ||
105 | |||
106 | /** | ||
107 | * Maximum number of trails allowed to go through a friend. | ||
108 | */ | ||
109 | #define TRAILS_THROUGH_FRIEND_THRESHOLD 64 | ||
110 | |||
111 | /** | ||
112 | * Maximum number of trails stored per finger. | ||
113 | */ | ||
114 | #define MAXIMUM_TRAILS_PER_FINGER 4 | ||
115 | |||
116 | /** | ||
117 | * Finger map index for predecessor entry in finger table. | ||
118 | */ | ||
119 | #define PREDECESSOR_FINGER_ID 64 | ||
120 | |||
121 | /** | ||
122 | * FIXME: Its use only at 3 places check if you can remove it. | ||
123 | * To check if a finger is predecessor or not. | ||
124 | */ | ||
125 | enum GDS_NEIGHBOURS_finger_type | ||
126 | { | ||
127 | GDS_FINGER_TYPE_PREDECESSOR = 1, | ||
128 | GDS_FINGER_TYPE_NON_PREDECESSOR = 0 | ||
129 | }; | ||
130 | |||
131 | GNUNET_NETWORK_STRUCT_BEGIN | ||
132 | |||
133 | /** | ||
134 | * P2P PUT message | ||
135 | */ | ||
136 | struct PeerPutMessage | ||
137 | { | ||
138 | /** | ||
139 | * Type: #GNUNET_MESSAGE_TYPE_XDHT_P2P_PUT | ||
140 | */ | ||
141 | struct GNUNET_MessageHeader header; | ||
142 | |||
143 | /** | ||
144 | * Processing options | ||
145 | */ | ||
146 | uint32_t options GNUNET_PACKED; | ||
147 | |||
148 | /** | ||
149 | * Content type. | ||
150 | */ | ||
151 | uint32_t block_type GNUNET_PACKED; | ||
152 | |||
153 | /** | ||
154 | * Hop count | ||
155 | */ | ||
156 | uint32_t hop_count GNUNET_PACKED; | ||
157 | |||
158 | /** | ||
159 | * Replication level for this message | ||
160 | * In the current implementation, this value is not used. | ||
161 | */ | ||
162 | uint32_t desired_replication_level GNUNET_PACKED; | ||
163 | |||
164 | /** | ||
165 | * Length of the PUT path that follows (if tracked). | ||
166 | */ | ||
167 | uint32_t put_path_length GNUNET_PACKED; | ||
168 | |||
169 | /** | ||
170 | * Best known destination (could be my friend or finger) which should | ||
171 | * get this message next. | ||
172 | */ | ||
173 | struct GNUNET_PeerIdentity best_known_destination; | ||
174 | |||
175 | /** | ||
176 | * In case best_known_destination is a finger, then trail to reach | ||
177 | * to that finger. Else its default value is 0. | ||
178 | */ | ||
179 | struct GNUNET_HashCode intermediate_trail_id; | ||
180 | |||
181 | /** | ||
182 | * When does the content expire? | ||
183 | */ | ||
184 | struct GNUNET_TIME_AbsoluteNBO expiration_time; | ||
185 | |||
186 | /** | ||
187 | * The key to store the value under. | ||
188 | */ | ||
189 | struct GNUNET_HashCode key GNUNET_PACKED; | ||
190 | |||
191 | /* put path (if tracked) */ | ||
192 | |||
193 | /* Payload */ | ||
194 | |||
195 | }; | ||
196 | |||
197 | /** | ||
198 | * P2P GET message | ||
199 | */ | ||
200 | struct PeerGetMessage | ||
201 | { | ||
202 | /** | ||
203 | * Type: #GNUNET_MESSAGE_TYPE_XDHT_P2P_GET | ||
204 | */ | ||
205 | struct GNUNET_MessageHeader header; | ||
206 | |||
207 | /** | ||
208 | * Processing options | ||
209 | */ | ||
210 | uint32_t options GNUNET_PACKED; | ||
211 | |||
212 | /** | ||
213 | * Desired content type. | ||
214 | */ | ||
215 | uint32_t block_type GNUNET_PACKED; | ||
216 | |||
217 | /** | ||
218 | * Hop count | ||
219 | */ | ||
220 | uint32_t hop_count GNUNET_PACKED; | ||
221 | |||
222 | /** | ||
223 | * Desired replication level for this request. | ||
224 | * In the current implementation, this value is not used. | ||
225 | */ | ||
226 | uint32_t desired_replication_level GNUNET_PACKED; | ||
227 | |||
228 | /** | ||
229 | * Total number of peers in get path. | ||
230 | */ | ||
231 | unsigned int get_path_length; | ||
232 | |||
233 | /** | ||
234 | * Best known destination (could be my friend or finger) which should | ||
235 | * get this message next. | ||
236 | */ | ||
237 | struct GNUNET_PeerIdentity best_known_destination; | ||
238 | |||
239 | /** | ||
240 | * In case best_known_destination is a finger, then trail to reach | ||
241 | * to that finger. Else its default value is 0. | ||
242 | */ | ||
243 | struct GNUNET_HashCode intermediate_trail_id; | ||
244 | |||
245 | /** | ||
246 | * The key we are looking for. | ||
247 | */ | ||
248 | struct GNUNET_HashCode key; | ||
249 | |||
250 | /* Get path. */ | ||
251 | /* struct GNUNET_PeerIdentity[]*/ | ||
252 | }; | ||
253 | |||
254 | /** | ||
255 | * P2P Result message | ||
256 | */ | ||
257 | struct PeerGetResultMessage | ||
258 | { | ||
259 | /** | ||
260 | * Type: #GNUNET_MESSAGE_TYPE_XDHT_P2P_GET_RESULT | ||
261 | */ | ||
262 | struct GNUNET_MessageHeader header; | ||
263 | |||
264 | /** | ||
265 | * The type for the data. | ||
266 | */ | ||
267 | uint32_t type GNUNET_PACKED; | ||
268 | |||
269 | /** | ||
270 | * Number of peers recorded in the outgoing path from source to the | ||
271 | * stored location of this message. | ||
272 | */ | ||
273 | uint32_t put_path_length GNUNET_PACKED; | ||
274 | |||
275 | /** | ||
276 | * Length of the GET path that follows (if tracked). | ||
277 | */ | ||
278 | uint32_t get_path_length GNUNET_PACKED; | ||
279 | |||
280 | /** | ||
281 | * Peer which queried for get and should get the result. | ||
282 | */ | ||
283 | struct GNUNET_PeerIdentity querying_peer; | ||
284 | |||
285 | /** | ||
286 | * When does the content expire? | ||
287 | */ | ||
288 | struct GNUNET_TIME_Absolute expiration_time; | ||
289 | |||
290 | /** | ||
291 | * The key of the corresponding GET request. | ||
292 | */ | ||
293 | struct GNUNET_HashCode key; | ||
294 | |||
295 | /* put path (if tracked) */ | ||
296 | |||
297 | /* get path (if tracked) */ | ||
298 | |||
299 | /* Payload */ | ||
300 | |||
301 | }; | ||
302 | |||
303 | /** | ||
304 | * P2P Trail setup message | ||
305 | */ | ||
306 | struct PeerTrailSetupMessage | ||
307 | { | ||
308 | /** | ||
309 | * Type: #GNUNET_MESSAGE_TYPE_XDHT_P2P_TRAIL_SETUP | ||
310 | */ | ||
311 | struct GNUNET_MessageHeader header; | ||
312 | |||
313 | /** | ||
314 | * Is source_peer trying to setup the trail to a predecessor or any finger. | ||
315 | */ | ||
316 | uint32_t is_predecessor; | ||
317 | |||
318 | /** | ||
319 | * Peer closest to this value will be our finger. | ||
320 | */ | ||
321 | uint64_t final_destination_finger_value; | ||
322 | |||
323 | /** | ||
324 | * Source peer which wants to setup the trail to one of its finger. | ||
325 | */ | ||
326 | struct GNUNET_PeerIdentity source_peer; | ||
327 | |||
328 | /** | ||
329 | * Best known destination (could be my friend or finger) which should | ||
330 | * get this message next. | ||
331 | * | ||
332 | * FIXME: this could be removed if we include trail_source / trail_dest | ||
333 | * in the routing table. This way we save 32 bytes of bandwidth by using | ||
334 | * extra 8 bytes of memory (2 * sizeof (GNUNET_PEER_ID)) | ||
335 | */ | ||
336 | struct GNUNET_PeerIdentity best_known_destination; | ||
337 | |||
338 | /** | ||
339 | * In case best_known_destination is a finger, then trail id of trail to | ||
340 | * reach to this finger. | ||
341 | */ | ||
342 | struct GNUNET_HashCode intermediate_trail_id; | ||
343 | |||
344 | /** | ||
345 | * Trail id for trail which we are trying to setup. | ||
346 | */ | ||
347 | struct GNUNET_HashCode trail_id; | ||
348 | |||
349 | /* List of peers which are part of trail setup so far. | ||
350 | * Trail does NOT include source_peer and peer which will be closest to | ||
351 | * ultimate_destination_finger_value. | ||
352 | * struct GNUNET_PeerIdentity trail[] | ||
353 | */ | ||
354 | }; | ||
355 | |||
356 | /** | ||
357 | * P2P Trail Setup Result message | ||
358 | */ | ||
359 | struct PeerTrailSetupResultMessage | ||
360 | { | ||
361 | |||
362 | /** | ||
363 | * Type: #GNUNET_MESSAGE_TYPE_XDHT_P2P_TRAIL_SETUP_RESULT | ||
364 | */ | ||
365 | struct GNUNET_MessageHeader header; | ||
366 | |||
367 | /** | ||
368 | * Finger to which we have found the path. | ||
369 | */ | ||
370 | struct GNUNET_PeerIdentity finger_identity; | ||
371 | |||
372 | /** | ||
373 | * Peer which started trail_setup to find trail to finger_identity | ||
374 | */ | ||
375 | struct GNUNET_PeerIdentity querying_peer; | ||
376 | |||
377 | /** | ||
378 | * Is the trail setup to querying_peer's predecessor or finger? | ||
379 | */ | ||
380 | uint32_t is_predecessor; | ||
381 | |||
382 | /** | ||
383 | * Value to which finger_identity is the closest peer. | ||
384 | */ | ||
385 | uint64_t ulitmate_destination_finger_value; | ||
386 | |||
387 | /** | ||
388 | * Identifier of the trail from querying peer to finger_identity, NOT | ||
389 | * including both endpoints. | ||
390 | */ | ||
391 | struct GNUNET_HashCode trail_id; | ||
392 | |||
393 | /* List of peers which are part of the trail from querying peer to | ||
394 | * finger_identity, NOT including both endpoints. | ||
395 | * struct GNUNET_PeerIdentity trail[] | ||
396 | */ | ||
397 | }; | ||
398 | |||
399 | /** | ||
400 | * P2P Verify Successor Message. | ||
401 | */ | ||
402 | struct PeerVerifySuccessorMessage | ||
403 | { | ||
404 | /** | ||
405 | * Type: #GNUNET_MESSAGE_TYPE_XDHT_P2P_VERIFY_SUCCESSOR | ||
406 | */ | ||
407 | struct GNUNET_MessageHeader header; | ||
408 | |||
409 | /** | ||
410 | * Peer which wants to verify its successor. | ||
411 | */ | ||
412 | struct GNUNET_PeerIdentity source_peer; | ||
413 | |||
414 | /** | ||
415 | * Source Peer's current successor. | ||
416 | */ | ||
417 | struct GNUNET_PeerIdentity successor; | ||
418 | |||
419 | /** | ||
420 | * Identifier of trail to reach from source_peer to successor. | ||
421 | */ | ||
422 | struct GNUNET_HashCode trail_id; | ||
423 | |||
424 | /* List of the peers which are part of trail to reach from source_peer | ||
425 | * to successor, NOT including them | ||
426 | * struct GNUNET_PeerIdentity trail[] | ||
427 | */ | ||
428 | }; | ||
429 | |||
430 | /** | ||
431 | * P2P Verify Successor Result Message | ||
432 | */ | ||
433 | struct PeerVerifySuccessorResultMessage | ||
434 | { | ||
435 | /** | ||
436 | * Type: #GNUNET_MESSAGE_TYPE_XDHT_P2P_VERIFY_SUCCESSOR_RESULT | ||
437 | */ | ||
438 | struct GNUNET_MessageHeader header; | ||
439 | |||
440 | /** | ||
441 | * Peer which sent the request to verify its successor. | ||
442 | */ | ||
443 | struct GNUNET_PeerIdentity querying_peer; | ||
444 | |||
445 | /** | ||
446 | * Successor to which PeerVerifySuccessorMessage was sent. | ||
447 | */ | ||
448 | struct GNUNET_PeerIdentity current_successor; | ||
449 | |||
450 | /** | ||
451 | * Current Predecessor of source_successor. It can be same as querying peer | ||
452 | * or different. In case it is different then it can be querying_peer's | ||
453 | * probable successor. | ||
454 | */ | ||
455 | struct GNUNET_PeerIdentity probable_successor; | ||
456 | |||
457 | /** | ||
458 | * Trail identifier of trail from querying_peer to current_successor. | ||
459 | */ | ||
460 | struct GNUNET_HashCode trail_id; | ||
461 | |||
462 | /** | ||
463 | * Direction in which we are looking at the trail. | ||
464 | */ | ||
465 | uint32_t trail_direction; | ||
466 | |||
467 | /* In case probable_successor != querying_peer, then trail to reach from | ||
468 | * querying_peer to probable_successor, NOT including end points. | ||
469 | * struct GNUNET_PeerIdentity trail[] | ||
470 | */ | ||
471 | }; | ||
472 | |||
473 | /** | ||
474 | * P2P Notify New Successor Message. | ||
475 | */ | ||
476 | struct PeerNotifyNewSuccessorMessage | ||
477 | { | ||
478 | /** | ||
479 | * Type: #GNUNET_MESSAGE_TYPE_XDHT_P2P_NOTIFY_NEW_SUCCESSOR | ||
480 | */ | ||
481 | struct GNUNET_MessageHeader header; | ||
482 | |||
483 | /** | ||
484 | * Peer which wants to notify its new successor. | ||
485 | */ | ||
486 | struct GNUNET_PeerIdentity source_peer; | ||
487 | |||
488 | /** | ||
489 | * New successor of source_peer. | ||
490 | */ | ||
491 | struct GNUNET_PeerIdentity new_successor; | ||
492 | |||
493 | /** | ||
494 | * Unique identifier of the trail from source_peer to new_successor, | ||
495 | * NOT including the endpoints. | ||
496 | */ | ||
497 | struct GNUNET_HashCode trail_id; | ||
498 | |||
499 | /* List of peers in trail from source_peer to new_successor, | ||
500 | * NOT including the endpoints. | ||
501 | * struct GNUNET_PeerIdentity trail[] | ||
502 | */ | ||
503 | }; | ||
504 | |||
505 | /** | ||
506 | * P2P Notify Successor Confirmation message. | ||
507 | */ | ||
508 | struct PeerNotifyConfirmationMessage | ||
509 | { | ||
510 | /** | ||
511 | * Type: #GNUNET_MESSAGE_TYPE_XDHT_P2P_TRAIL_TEARDOWN | ||
512 | */ | ||
513 | struct GNUNET_MessageHeader header; | ||
514 | |||
515 | /** | ||
516 | * Unique identifier of the trail. | ||
517 | */ | ||
518 | struct GNUNET_HashCode trail_id; | ||
519 | |||
520 | /** | ||
521 | * Direction of trail. | ||
522 | */ | ||
523 | uint32_t trail_direction; | ||
524 | }; | ||
525 | |||
526 | |||
527 | /** | ||
528 | * P2P Trail Tear Down message. | ||
529 | */ | ||
530 | struct PeerTrailTearDownMessage | ||
531 | { | ||
532 | /** | ||
533 | * Type: #GNUNET_MESSAGE_TYPE_XDHT_P2P_TRAIL_TEARDOWN | ||
534 | */ | ||
535 | struct GNUNET_MessageHeader header; | ||
536 | |||
537 | /** | ||
538 | * Unique identifier of the trail. | ||
539 | */ | ||
540 | struct GNUNET_HashCode trail_id; | ||
541 | |||
542 | /** | ||
543 | * Direction of trail. | ||
544 | */ | ||
545 | uint32_t trail_direction; | ||
546 | }; | ||
547 | |||
548 | |||
549 | /** | ||
550 | * P2P Trail Rejection Message. | ||
551 | */ | ||
552 | struct PeerTrailRejectionMessage | ||
553 | { | ||
554 | /** | ||
555 | * Type: #GNUNET_MESSAGE_TYPE_XDHT_P2P_TRAIL_SETUP_REJECTION | ||
556 | */ | ||
557 | struct GNUNET_MessageHeader header; | ||
558 | |||
559 | /** | ||
560 | * Peer which wants to set up the trail. | ||
561 | */ | ||
562 | struct GNUNET_PeerIdentity source_peer; | ||
563 | |||
564 | /** | ||
565 | * Peer which sent trail rejection message as it it congested. | ||
566 | */ | ||
567 | struct GNUNET_PeerIdentity congested_peer; | ||
568 | |||
569 | /** | ||
570 | * Peer identity closest to this value will be finger of | ||
571 | * source_peer. | ||
572 | */ | ||
573 | uint64_t ultimate_destination_finger_value; | ||
574 | |||
575 | /** | ||
576 | * Is source_peer trying to setup the trail to its predecessor or finger. | ||
577 | */ | ||
578 | uint32_t is_predecessor; | ||
579 | |||
580 | /** | ||
581 | * Identifier for the trail that source peer is trying to setup. | ||
582 | */ | ||
583 | struct GNUNET_HashCode trail_id; | ||
584 | |||
585 | /** | ||
586 | * Relative time for which congested_peer will remain congested. | ||
587 | */ | ||
588 | struct GNUNET_TIME_Relative congestion_time; | ||
589 | |||
590 | /* Trail_list from source_peer to peer which sent the message for trail setup | ||
591 | * to congested peer. This trail does NOT include source_peer. | ||
592 | struct GNUNET_PeerIdnetity trail[]*/ | ||
593 | }; | ||
594 | |||
595 | /** | ||
596 | * P2P Add Trail Message. | ||
597 | */ | ||
598 | struct PeerAddTrailMessage | ||
599 | { | ||
600 | /** | ||
601 | * Type: #GNUNET_MESSAGE_TYPE_XDHT_P2P_ADD_TRAIL | ||
602 | */ | ||
603 | struct GNUNET_MessageHeader header; | ||
604 | |||
605 | /** | ||
606 | * Source of the routing trail. | ||
607 | */ | ||
608 | struct GNUNET_PeerIdentity source_peer; | ||
609 | |||
610 | /** | ||
611 | * Destination of the routing trail. | ||
612 | */ | ||
613 | struct GNUNET_PeerIdentity destination_peer; | ||
614 | |||
615 | /** | ||
616 | * Unique identifier of the trail from source_peer to destination_peer, | ||
617 | * NOT including the endpoints. | ||
618 | */ | ||
619 | struct GNUNET_HashCode trail_id; | ||
620 | |||
621 | /* Trail from source peer to destination peer, NOT including them. | ||
622 | * struct GNUNET_PeerIdentity trail[] | ||
623 | */ | ||
624 | }; | ||
625 | |||
626 | |||
627 | GNUNET_NETWORK_STRUCT_END | ||
628 | |||
629 | /** | ||
630 | * Linked list of messages to send to a particular other peer. | ||
631 | */ | ||
632 | struct P2PPendingMessage | ||
633 | { | ||
634 | /** | ||
635 | * Pointer to next item in the list | ||
636 | */ | ||
637 | struct P2PPendingMessage *next; | ||
638 | |||
639 | /** | ||
640 | * Pointer to previous item in the list | ||
641 | */ | ||
642 | struct P2PPendingMessage *prev; | ||
643 | |||
644 | /** | ||
645 | * Message importance level. FIXME: used? useful? | ||
646 | */ | ||
647 | unsigned int importance; | ||
648 | |||
649 | /** | ||
650 | * When does this message time out? | ||
651 | */ | ||
652 | struct GNUNET_TIME_Absolute timeout; | ||
653 | |||
654 | /** | ||
655 | * Actual message to be sent, allocated at the end of the struct: | ||
656 | * // msg = (cast) &pm[1]; | ||
657 | * // memcpy (&pm[1], data, len); | ||
658 | */ | ||
659 | const struct GNUNET_MessageHeader *msg; | ||
660 | |||
661 | }; | ||
662 | |||
663 | /** | ||
664 | * Entry in friend_peermap. | ||
665 | */ | ||
666 | struct FriendInfo | ||
667 | { | ||
668 | /** | ||
669 | * Friend Identity | ||
670 | */ | ||
671 | struct GNUNET_PeerIdentity id; | ||
672 | |||
673 | /** | ||
674 | * Number of trails for which this friend is the first hop or if the friend | ||
675 | * is finger. | ||
676 | */ | ||
677 | unsigned int trails_count; | ||
678 | |||
679 | /** | ||
680 | * Count of outstanding messages for this friend. | ||
681 | */ | ||
682 | unsigned int pending_count; | ||
683 | |||
684 | /** | ||
685 | * In case not 0, then amount of time for which this friend is congested. | ||
686 | */ | ||
687 | struct GNUNET_TIME_Absolute congestion_timestamp; | ||
688 | |||
689 | |||
690 | // TODO : Change name of head and tail to pending_messages_list_head and so. | ||
691 | /** | ||
692 | * Head of pending messages to be sent to this friend. | ||
693 | */ | ||
694 | struct P2PPendingMessage *head; | ||
695 | |||
696 | /** | ||
697 | * Tail of pending messages to be sent to this friend. | ||
698 | */ | ||
699 | struct P2PPendingMessage *tail; | ||
700 | |||
701 | /** | ||
702 | * Core handle for sending messages to this friend. | ||
703 | */ | ||
704 | struct GNUNET_CORE_TransmitHandle *th; | ||
705 | |||
706 | }; | ||
707 | |||
708 | /** | ||
709 | * An individual element of the trail to reach to a finger. | ||
710 | */ | ||
711 | struct Trail_Element | ||
712 | { | ||
713 | /** | ||
714 | * Pointer to next item in the list | ||
715 | */ | ||
716 | struct Trail_Element *next; | ||
717 | |||
718 | /** | ||
719 | * Pointer to prev item in the list | ||
720 | */ | ||
721 | struct Trail_Element *prev; | ||
722 | |||
723 | /** | ||
724 | * An element in this trail. | ||
725 | */ | ||
726 | struct GNUNET_PeerIdentity peer; | ||
727 | }; | ||
728 | |||
729 | /** | ||
730 | * Information about an individual trail. | ||
731 | */ | ||
732 | struct Trail | ||
733 | { | ||
734 | /** | ||
735 | * Head of trail. | ||
736 | */ | ||
737 | struct Trail_Element *trail_head; | ||
738 | |||
739 | /** | ||
740 | * Tail of trail. | ||
741 | */ | ||
742 | struct Trail_Element *trail_tail; | ||
743 | |||
744 | /** | ||
745 | * Unique identifier of this trail. | ||
746 | */ | ||
747 | struct GNUNET_HashCode trail_id; | ||
748 | |||
749 | /** | ||
750 | * Length of trail pointed | ||
751 | */ | ||
752 | unsigned int trail_length; | ||
753 | |||
754 | /** | ||
755 | * Is there a valid trail entry. | ||
756 | */ | ||
757 | unsigned int is_present; | ||
758 | }; | ||
759 | |||
760 | /** | ||
761 | * An entry in finger_table | ||
762 | */ | ||
763 | struct FingerInfo | ||
764 | { | ||
765 | /** | ||
766 | * Finger identity. | ||
767 | */ | ||
768 | struct GNUNET_PeerIdentity finger_identity; | ||
769 | |||
770 | /** | ||
771 | * In case not 0, this amount is time to wait for notify successor message. | ||
772 | * Used ONLY for successor. NOT for any other finger. | ||
773 | */ | ||
774 | struct GNUNET_TIME_Absolute wait_notify_confirmation; | ||
775 | |||
776 | /** | ||
777 | * Is any finger stored at this finger index. | ||
778 | */ | ||
779 | unsigned int is_present; | ||
780 | |||
781 | /** | ||
782 | * Index in finger peer map | ||
783 | */ | ||
784 | uint32_t finger_table_index; | ||
785 | |||
786 | /** | ||
787 | * Number of trails setup so far for this finger. | ||
788 | * Should not cross MAXIMUM_TRAILS_PER_FINGER. | ||
789 | */ | ||
790 | uint32_t trails_count; | ||
791 | |||
792 | /** | ||
793 | * Array of trails to reach to this finger. | ||
794 | */ | ||
795 | struct Trail trail_list[MAXIMUM_TRAILS_PER_FINGER]; | ||
796 | }; | ||
797 | |||
798 | |||
799 | /** | ||
800 | * Stores information about the peer which is closest to destination_finger_value. | ||
801 | * 'closest' can be either successor or predecessor depending on is_predecessor | ||
802 | * flag. | ||
803 | */ | ||
804 | struct Closest_Peer | ||
805 | { | ||
806 | /** | ||
807 | * Destination finger value. | ||
808 | */ | ||
809 | uint64_t destination_finger_value; | ||
810 | |||
811 | /** | ||
812 | * Is finger_value a predecessor or any other finger. | ||
813 | */ | ||
814 | unsigned int is_predecessor; | ||
815 | |||
816 | /** | ||
817 | * Trail id to reach to peer. | ||
818 | * In case peer is my identity or friend, it is set to 0. | ||
819 | */ | ||
820 | struct GNUNET_HashCode trail_id; | ||
821 | |||
822 | /** | ||
823 | * Next destination. In case of friend and my_identity , it is same as next_hop | ||
824 | * In case of finger it is finger identity. | ||
825 | */ | ||
826 | struct GNUNET_PeerIdentity best_known_destination; | ||
827 | |||
828 | /** | ||
829 | * In case best_known_destination is a finger, then first friend in the trail | ||
830 | * to reach to it. In other case, same as best_known_destination. | ||
831 | */ | ||
832 | struct GNUNET_PeerIdentity next_hop; | ||
833 | |||
834 | /** | ||
835 | * In case finger is the next hop, it contains a valid finger table index | ||
836 | * at which the finger is stored. Else, It contains 65, which is out of range | ||
837 | * of finger table index. | ||
838 | */ | ||
839 | unsigned int finger_table_index; | ||
840 | }; | ||
841 | |||
842 | /** | ||
843 | * Context for send_verify_successor_task. | ||
844 | */ | ||
845 | struct VerifySuccessorContext | ||
846 | { | ||
847 | /** | ||
848 | * Number of times this has been scheduled. | ||
849 | */ | ||
850 | unsigned int num_retries_scheduled; | ||
851 | }; | ||
852 | |||
853 | /** | ||
854 | * Task that sends FIND FINGER TRAIL requests. This task is started when we have | ||
855 | * get our first friend. | ||
856 | */ | ||
857 | static struct GNUNET_SCHEDULER_Task * find_finger_trail_task; | ||
858 | |||
859 | /** | ||
860 | * Task that sends verify successor message. This task is started when we get | ||
861 | * our successor for the first time. | ||
862 | */ | ||
863 | static struct GNUNET_SCHEDULER_Task * send_verify_successor_task; | ||
864 | |||
865 | /** | ||
866 | * Task that sends verify successor message. This task is started when we get | ||
867 | * our successor for the first time. | ||
868 | */ | ||
869 | static struct GNUNET_SCHEDULER_Task * send_verify_successor_retry_task; | ||
870 | |||
871 | /** | ||
872 | * Task that sends verify successor message. This task is started when we get | ||
873 | * our successor for the first time. | ||
874 | */ | ||
875 | static struct GNUNET_SCHEDULER_Task * send_notify_new_successor_retry_task; | ||
876 | |||
877 | /** | ||
878 | * Identity of this peer. | ||
879 | */ | ||
880 | static struct GNUNET_PeerIdentity my_identity; | ||
881 | |||
882 | /** | ||
883 | * Peer map of all the friends of a peer | ||
884 | */ | ||
885 | static struct GNUNET_CONTAINER_MultiPeerMap *friend_peermap; | ||
886 | |||
887 | /** | ||
888 | * Array of all the fingers. | ||
889 | */ | ||
890 | static struct FingerInfo finger_table [MAX_FINGERS]; | ||
891 | |||
892 | /** | ||
893 | * Handle to CORE. | ||
894 | */ | ||
895 | static struct GNUNET_CORE_Handle *core_api; | ||
896 | |||
897 | /** | ||
898 | * Handle for the statistics service. | ||
899 | */ | ||
900 | //extern struct GNUNET_STATISTICS_Handle *GDS_stats; | ||
901 | |||
902 | /** | ||
903 | * The current finger index that we have want to find trail to. We start the | ||
904 | * search with value = 0, i.e. successor and then go to PREDCESSOR_FINGER_ID | ||
905 | * and decrement it. For any index 63 <= index < 0, if finger is same as successor, | ||
906 | * we reset this index to 0. | ||
907 | */ | ||
908 | static unsigned int current_search_finger_index; | ||
909 | |||
910 | /** | ||
911 | * Time duration to schedule find finger trail task. | ||
912 | */ | ||
913 | static struct GNUNET_TIME_Relative find_finger_trail_task_next_send_time; | ||
914 | |||
915 | /** | ||
916 | * Time duration to schedule verify successor task. | ||
917 | */ | ||
918 | static struct GNUNET_TIME_Relative verify_successor_next_send_time; | ||
919 | |||
920 | /** | ||
921 | * Time duration to send verify successor again, if result was not received in time. | ||
922 | */ | ||
923 | static struct GNUNET_TIME_Relative verify_successor_retry_time; | ||
924 | |||
925 | /** | ||
926 | * Time duration to retry send_notify_successor. | ||
927 | */ | ||
928 | static struct GNUNET_TIME_Relative notify_successor_retry_time; | ||
929 | |||
930 | /** | ||
931 | * Are we waiting for confirmation from our new successor that it got the | ||
932 | * message | ||
933 | */ | ||
934 | //static unsigned int waiting_for_notify_confirmation; | ||
935 | |||
936 | /* Below variables are used only for testing, and statistics collection. */ | ||
937 | /** | ||
938 | * Should we store our topology predecessor and successor IDs into statistics? | ||
939 | */ | ||
940 | unsigned int track_topology; | ||
941 | |||
942 | /** | ||
943 | * Should I be a malicious peer and drop the PUT/GET packets? | ||
944 | * if 0 then NOT malicious. | ||
945 | */ | ||
946 | unsigned int act_malicious; | ||
947 | |||
948 | /** | ||
949 | * Count of fingers found. Ideally we should have O(logn) fingers for a | ||
950 | * stable network. | ||
951 | */ | ||
952 | static unsigned int total_fingers_found; | ||
953 | |||
954 | /** | ||
955 | * Number of times we found the same successor. | ||
956 | */ | ||
957 | static unsigned int successor_times; | ||
958 | |||
959 | /** | ||
960 | * Number of rounds for which we should search for finger. | ||
961 | */ | ||
962 | static unsigned int fingers_round_count; | ||
963 | /** | ||
964 | * Called when core is ready to send a message we asked for | ||
965 | * out to the destination. | ||
966 | * | ||
967 | * @param cls the 'struct FriendInfo' of the target friend | ||
968 | * @param size number of bytes available in buf | ||
969 | * @param buf where the callee should write the message | ||
970 | * @return number of bytes written to buf | ||
971 | */ | ||
972 | static size_t | ||
973 | core_transmit_notify (void *cls, size_t size, void *buf) | ||
974 | { | ||
975 | struct FriendInfo *peer = cls; | ||
976 | char *cbuf = buf; | ||
977 | struct P2PPendingMessage *pending; | ||
978 | size_t off; | ||
979 | size_t msize; | ||
980 | |||
981 | peer->th = NULL; | ||
982 | while ( (NULL != (pending = peer->head)) && | ||
983 | (0 == GNUNET_TIME_absolute_get_remaining (pending->timeout).rel_value_us) ) | ||
984 | { | ||
985 | GNUNET_STATISTICS_update (GDS_stats, | ||
986 | gettext_noop | ||
987 | ("# Messages dropped (CORE timeout)"), | ||
988 | 1, | ||
989 | GNUNET_NO); | ||
990 | peer->pending_count--; | ||
991 | GNUNET_CONTAINER_DLL_remove (peer->head, | ||
992 | peer->tail, | ||
993 | pending); | ||
994 | GNUNET_free (pending); | ||
995 | } | ||
996 | if (NULL == pending) | ||
997 | { | ||
998 | /* no messages pending */ | ||
999 | return 0; | ||
1000 | } | ||
1001 | if (NULL == buf) | ||
1002 | { | ||
1003 | peer->th = | ||
1004 | GNUNET_CORE_notify_transmit_ready (core_api, GNUNET_NO, | ||
1005 | GNUNET_CORE_PRIO_BEST_EFFORT, | ||
1006 | GNUNET_TIME_absolute_get_remaining | ||
1007 | (pending->timeout), &peer->id, | ||
1008 | ntohs (pending->msg->size), | ||
1009 | &core_transmit_notify, peer); | ||
1010 | GNUNET_break (NULL != peer->th); | ||
1011 | return 0; | ||
1012 | } | ||
1013 | off = 0; | ||
1014 | while ((NULL != (pending = peer->head)) && | ||
1015 | (size - off >= (msize = ntohs (pending->msg->size)))) | ||
1016 | { | ||
1017 | GNUNET_STATISTICS_update (GDS_stats, | ||
1018 | gettext_noop | ||
1019 | ("# Bytes transmitted to other peers"), | ||
1020 | msize, | ||
1021 | GNUNET_NO); | ||
1022 | memcpy (&cbuf[off], pending->msg, msize); | ||
1023 | off += msize; | ||
1024 | peer->pending_count--; | ||
1025 | GNUNET_CONTAINER_DLL_remove (peer->head, peer->tail, pending); | ||
1026 | GNUNET_free (pending); | ||
1027 | } | ||
1028 | if (peer->head != NULL) | ||
1029 | { | ||
1030 | peer->th = | ||
1031 | GNUNET_CORE_notify_transmit_ready (core_api, GNUNET_NO, | ||
1032 | GNUNET_CORE_PRIO_BEST_EFFORT, | ||
1033 | GNUNET_TIME_absolute_get_remaining | ||
1034 | (pending->timeout), &peer->id, msize, | ||
1035 | &core_transmit_notify, peer); | ||
1036 | GNUNET_break (NULL != peer->th); | ||
1037 | } | ||
1038 | return off; | ||
1039 | } | ||
1040 | |||
1041 | |||
1042 | /** | ||
1043 | * Transmit all messages in the friend's message queue. | ||
1044 | * | ||
1045 | * @param peer message queue to process | ||
1046 | */ | ||
1047 | static void | ||
1048 | process_friend_queue (struct FriendInfo *peer) | ||
1049 | { | ||
1050 | struct P2PPendingMessage *pending; | ||
1051 | |||
1052 | if (NULL == (pending = peer->head)) | ||
1053 | { | ||
1054 | return; | ||
1055 | } | ||
1056 | if (NULL != peer->th) | ||
1057 | { | ||
1058 | return; | ||
1059 | } | ||
1060 | |||
1061 | peer->th = | ||
1062 | GNUNET_CORE_notify_transmit_ready (core_api, GNUNET_NO, | ||
1063 | pending->importance, | ||
1064 | GNUNET_TIME_absolute_get_remaining | ||
1065 | (pending->timeout), &peer->id, | ||
1066 | ntohs (pending->msg->size), | ||
1067 | &core_transmit_notify, peer); | ||
1068 | GNUNET_break (NULL != peer->th); | ||
1069 | } | ||
1070 | |||
1071 | |||
1072 | #if ENABLE_MALICIOUS | ||
1073 | /** | ||
1074 | * Set the ENABLE_MALICIOUS value to malicious. | ||
1075 | * @param malicious | ||
1076 | */ | ||
1077 | int | ||
1078 | GDS_NEIGHBOURS_act_malicious (unsigned int malicious) | ||
1079 | { | ||
1080 | act_malicious = malicious; | ||
1081 | return GNUNET_OK; | ||
1082 | } | ||
1083 | #endif | ||
1084 | |||
1085 | /** | ||
1086 | * Construct a trail setup message and forward it to target_friend | ||
1087 | * @param source_peer Peer which wants to setup the trail | ||
1088 | * @param ultimate_destination_finger_value Peer identity closest to this value | ||
1089 | * will be finger to @a source_peer | ||
1090 | * @param best_known_destination Best known destination (could be finger or friend) | ||
1091 | * which should get this message. In case it is | ||
1092 | * friend, then it is same as target_friend | ||
1093 | * @param target_friend Friend to which message is forwarded now. | ||
1094 | * @param trail_length Total number of peers in trail setup so far. | ||
1095 | * @param trail_peer_list Trail setup so far | ||
1096 | * @param is_predecessor Is @a source_peer looking for trail to a predecessor or not. | ||
1097 | * @param trail_id Unique identifier for the trail we are trying to setup. | ||
1098 | * @param intermediate_trail_id Trail id of intermediate trail to reach to | ||
1099 | * best_known_destination when its a finger. If not | ||
1100 | * used then set to 0. | ||
1101 | */ | ||
1102 | void | ||
1103 | GDS_NEIGHBOURS_send_trail_setup (struct GNUNET_PeerIdentity source_peer, | ||
1104 | uint64_t ultimate_destination_finger_value, | ||
1105 | struct GNUNET_PeerIdentity best_known_destination, | ||
1106 | struct FriendInfo *target_friend, | ||
1107 | unsigned int trail_length, | ||
1108 | const struct GNUNET_PeerIdentity *trail_peer_list, | ||
1109 | unsigned int is_predecessor, | ||
1110 | struct GNUNET_HashCode trail_id, | ||
1111 | struct GNUNET_HashCode intermediate_trail_id) | ||
1112 | { | ||
1113 | struct P2PPendingMessage *pending; | ||
1114 | struct PeerTrailSetupMessage *tsm; | ||
1115 | struct GNUNET_PeerIdentity *peer_list; | ||
1116 | size_t msize; | ||
1117 | |||
1118 | msize = sizeof (struct PeerTrailSetupMessage) + | ||
1119 | (trail_length * sizeof (struct GNUNET_PeerIdentity)); | ||
1120 | |||
1121 | if (msize >= GNUNET_CONSTANTS_MAX_ENCRYPTED_MESSAGE_SIZE) | ||
1122 | { | ||
1123 | GNUNET_break (0); | ||
1124 | return; | ||
1125 | } | ||
1126 | |||
1127 | if (target_friend->pending_count >= MAXIMUM_PENDING_PER_FRIEND) | ||
1128 | { | ||
1129 | GNUNET_STATISTICS_update (GDS_stats, gettext_noop ("# P2P messages dropped due to full queue"), | ||
1130 | 1, GNUNET_NO); | ||
1131 | } | ||
1132 | pending = GNUNET_malloc (sizeof (struct P2PPendingMessage) + msize); | ||
1133 | pending->timeout = GNUNET_TIME_relative_to_absolute (PENDING_MESSAGE_TIMEOUT); | ||
1134 | tsm = (struct PeerTrailSetupMessage *) &pending[1]; | ||
1135 | pending->msg = &(tsm->header); | ||
1136 | tsm->header.size = htons (msize); | ||
1137 | tsm->header.type = htons (GNUNET_MESSAGE_TYPE_XDHT_P2P_TRAIL_SETUP); | ||
1138 | tsm->final_destination_finger_value = GNUNET_htonll (ultimate_destination_finger_value); | ||
1139 | tsm->source_peer = source_peer; | ||
1140 | tsm->best_known_destination = best_known_destination; | ||
1141 | tsm->is_predecessor = htonl (is_predecessor); | ||
1142 | tsm->trail_id = trail_id; | ||
1143 | tsm->intermediate_trail_id = intermediate_trail_id; | ||
1144 | |||
1145 | if (trail_length > 0) | ||
1146 | { | ||
1147 | peer_list = (struct GNUNET_PeerIdentity *) &tsm[1]; | ||
1148 | memcpy (peer_list, trail_peer_list, trail_length * sizeof(struct GNUNET_PeerIdentity)); | ||
1149 | } | ||
1150 | |||
1151 | GNUNET_CONTAINER_DLL_insert_tail (target_friend->head, target_friend->tail, pending); | ||
1152 | target_friend->pending_count++; | ||
1153 | process_friend_queue (target_friend); | ||
1154 | } | ||
1155 | |||
1156 | |||
1157 | /** | ||
1158 | * Construct a trail setup result message and forward it to target friend. | ||
1159 | * @param querying_peer Peer which sent the trail setup request and should get | ||
1160 | * the result back. | ||
1161 | * @param Finger Peer to which the trail has been setup to. | ||
1162 | * @param target_friend Friend to which this message should be forwarded. | ||
1163 | * @param trail_length Numbers of peers in the trail. | ||
1164 | * @param trail_peer_list Peers which are part of the trail from | ||
1165 | * querying_peer to Finger, NOT including them. | ||
1166 | * @param is_predecessor Is @a Finger predecessor to @a querying_peer ? | ||
1167 | * @param ultimate_destination_finger_value Value to which @a finger is the closest | ||
1168 | * peer. | ||
1169 | * @param trail_id Unique identifier of the trail. | ||
1170 | */ | ||
1171 | void | ||
1172 | GDS_NEIGHBOURS_send_trail_setup_result (struct GNUNET_PeerIdentity querying_peer, | ||
1173 | struct GNUNET_PeerIdentity finger, | ||
1174 | struct FriendInfo *target_friend, | ||
1175 | unsigned int trail_length, | ||
1176 | const struct GNUNET_PeerIdentity *trail_peer_list, | ||
1177 | unsigned int is_predecessor, | ||
1178 | uint64_t ultimate_destination_finger_value, | ||
1179 | struct GNUNET_HashCode trail_id) | ||
1180 | { | ||
1181 | struct P2PPendingMessage *pending; | ||
1182 | struct PeerTrailSetupResultMessage *tsrm; | ||
1183 | struct GNUNET_PeerIdentity *peer_list; | ||
1184 | size_t msize; | ||
1185 | |||
1186 | msize = sizeof (struct PeerTrailSetupResultMessage) + | ||
1187 | (trail_length * sizeof (struct GNUNET_PeerIdentity)); | ||
1188 | |||
1189 | if (msize >= GNUNET_CONSTANTS_MAX_ENCRYPTED_MESSAGE_SIZE) | ||
1190 | { | ||
1191 | GNUNET_break (0); | ||
1192 | return; | ||
1193 | } | ||
1194 | |||
1195 | if (target_friend->pending_count >= MAXIMUM_PENDING_PER_FRIEND) | ||
1196 | { | ||
1197 | GNUNET_STATISTICS_update (GDS_stats, | ||
1198 | gettext_noop ("# P2P messages dropped due to full queue"), | ||
1199 | 1, GNUNET_NO); | ||
1200 | } | ||
1201 | |||
1202 | pending = GNUNET_malloc (sizeof (struct P2PPendingMessage) + msize); | ||
1203 | pending->importance = 0; | ||
1204 | pending->timeout = GNUNET_TIME_relative_to_absolute (PENDING_MESSAGE_TIMEOUT); | ||
1205 | tsrm = (struct PeerTrailSetupResultMessage *) &pending[1]; | ||
1206 | pending->msg = &tsrm->header; | ||
1207 | tsrm->header.size = htons (msize); | ||
1208 | tsrm->header.type = htons (GNUNET_MESSAGE_TYPE_XDHT_P2P_TRAIL_SETUP_RESULT); | ||
1209 | tsrm->querying_peer = querying_peer; | ||
1210 | tsrm->finger_identity = finger; | ||
1211 | tsrm->is_predecessor = htonl (is_predecessor); | ||
1212 | tsrm->trail_id = trail_id; | ||
1213 | tsrm->ulitmate_destination_finger_value = | ||
1214 | GNUNET_htonll (ultimate_destination_finger_value); | ||
1215 | peer_list = (struct GNUNET_PeerIdentity *) &tsrm[1]; | ||
1216 | memcpy (peer_list, trail_peer_list, trail_length * sizeof (struct GNUNET_PeerIdentity)); | ||
1217 | |||
1218 | /* Send the message to chosen friend. */ | ||
1219 | GNUNET_CONTAINER_DLL_insert_tail (target_friend->head, target_friend->tail, pending); | ||
1220 | target_friend->pending_count++; | ||
1221 | process_friend_queue (target_friend); | ||
1222 | } | ||
1223 | |||
1224 | /** | ||
1225 | * Send notify successor confirmation message. | ||
1226 | * @param trail_id Unique Identifier of the trail. | ||
1227 | * @param trail_direction Destination to Source. | ||
1228 | * @param target_friend Friend to get this message next. | ||
1229 | */ | ||
1230 | void | ||
1231 | GDS_NEIGHBOURS_send_notify_succcessor_confirmation (struct GNUNET_HashCode trail_id, | ||
1232 | unsigned int trail_direction, | ||
1233 | struct FriendInfo *target_friend) | ||
1234 | { | ||
1235 | struct PeerNotifyConfirmationMessage *ncm; | ||
1236 | struct P2PPendingMessage *pending; | ||
1237 | size_t msize; | ||
1238 | |||
1239 | msize = sizeof (struct PeerNotifyConfirmationMessage); | ||
1240 | if (msize >= GNUNET_CONSTANTS_MAX_ENCRYPTED_MESSAGE_SIZE) | ||
1241 | { | ||
1242 | GNUNET_break (0); | ||
1243 | return; | ||
1244 | } | ||
1245 | |||
1246 | if (target_friend->pending_count >= MAXIMUM_PENDING_PER_FRIEND) | ||
1247 | { | ||
1248 | GNUNET_STATISTICS_update (GDS_stats, gettext_noop ("# P2P messages dropped due to full queue"), | ||
1249 | 1, GNUNET_NO); | ||
1250 | } | ||
1251 | |||
1252 | pending = GNUNET_malloc (sizeof (struct P2PPendingMessage) + msize); | ||
1253 | pending->importance = 0; /* FIXME */ | ||
1254 | pending->timeout = GNUNET_TIME_relative_to_absolute (PENDING_MESSAGE_TIMEOUT); | ||
1255 | ncm = (struct PeerNotifyConfirmationMessage *) &pending[1]; | ||
1256 | pending->msg = &ncm->header; | ||
1257 | ncm->header.size = htons (msize); | ||
1258 | ncm->header.type = htons (GNUNET_MESSAGE_TYPE_XDHT_P2P_NOTIFY_SUCCESSOR_CONFIRMATION); | ||
1259 | ncm->trail_id = trail_id; | ||
1260 | ncm->trail_direction = htonl (trail_direction); | ||
1261 | |||
1262 | /* Send the message to chosen friend. */ | ||
1263 | GNUNET_CONTAINER_DLL_insert_tail (target_friend->head, target_friend->tail, pending); | ||
1264 | target_friend->pending_count++; | ||
1265 | process_friend_queue (target_friend); | ||
1266 | } | ||
1267 | |||
1268 | |||
1269 | /** | ||
1270 | * Send trail rejection message to target friend | ||
1271 | * @param source_peer Peer which is trying to setup the trail. | ||
1272 | * @param ultimate_destination_finger_value Peer closest to this value will be | ||
1273 | * @a source_peer's finger | ||
1274 | * @param congested_peer Peer which sent this message as it is congested. | ||
1275 | * @param is_predecessor Is source_peer looking for trail to a predecessor or not. | ||
1276 | * @param trail_peer_list Trails seen so far in trail setup before getting rejected | ||
1277 | * by congested_peer. This does NOT include @a source_peer | ||
1278 | * and congested_peer. | ||
1279 | * @param trail_length Total number of peers in trail_peer_list, NOT including | ||
1280 | * @a source_peer and @a congested_peer | ||
1281 | * @param trail_id Unique identifier of this trail. | ||
1282 | * @param congestion_timeout Duration given by congested peer as an estimate of | ||
1283 | * how long it may remain congested. | ||
1284 | */ | ||
1285 | void | ||
1286 | GDS_NEIGHBOURS_send_trail_rejection (struct GNUNET_PeerIdentity source_peer, | ||
1287 | uint64_t ultimate_destination_finger_value, | ||
1288 | struct GNUNET_PeerIdentity congested_peer, | ||
1289 | unsigned int is_predecessor, | ||
1290 | const struct GNUNET_PeerIdentity *trail_peer_list, | ||
1291 | unsigned int trail_length, | ||
1292 | struct GNUNET_HashCode trail_id, | ||
1293 | struct FriendInfo *target_friend, | ||
1294 | const struct GNUNET_TIME_Relative congestion_timeout) | ||
1295 | { | ||
1296 | struct PeerTrailRejectionMessage *trm; | ||
1297 | struct P2PPendingMessage *pending; | ||
1298 | struct GNUNET_PeerIdentity *peer_list; | ||
1299 | size_t msize; | ||
1300 | |||
1301 | msize = sizeof (struct PeerTrailRejectionMessage) + | ||
1302 | (trail_length * sizeof (struct GNUNET_PeerIdentity)); | ||
1303 | |||
1304 | if (msize >= GNUNET_CONSTANTS_MAX_ENCRYPTED_MESSAGE_SIZE) | ||
1305 | { | ||
1306 | GNUNET_break (0); | ||
1307 | return; | ||
1308 | } | ||
1309 | |||
1310 | if (target_friend->pending_count >= MAXIMUM_PENDING_PER_FRIEND) | ||
1311 | { | ||
1312 | GNUNET_STATISTICS_update (GDS_stats, gettext_noop ("# P2P messages dropped due to full queue"), | ||
1313 | 1, GNUNET_NO); | ||
1314 | } | ||
1315 | |||
1316 | pending = GNUNET_malloc (sizeof (struct P2PPendingMessage) + msize); | ||
1317 | pending->importance = 0; | ||
1318 | pending->timeout = GNUNET_TIME_relative_to_absolute (PENDING_MESSAGE_TIMEOUT); | ||
1319 | trm = (struct PeerTrailRejectionMessage *)&pending[1]; | ||
1320 | pending->msg = &trm->header; | ||
1321 | trm->header.size = htons (msize); | ||
1322 | trm->header.type = htons (GNUNET_MESSAGE_TYPE_XDHT_P2P_TRAIL_SETUP_REJECTION); | ||
1323 | trm->source_peer = source_peer; | ||
1324 | trm->congested_peer = congested_peer; | ||
1325 | trm->congestion_time = congestion_timeout; | ||
1326 | trm->is_predecessor = htonl (is_predecessor); | ||
1327 | trm->trail_id = trail_id; | ||
1328 | trm->ultimate_destination_finger_value = | ||
1329 | GNUNET_htonll (ultimate_destination_finger_value); | ||
1330 | |||
1331 | peer_list = (struct GNUNET_PeerIdentity *) &trm[1]; | ||
1332 | if (trail_length > 0) | ||
1333 | { | ||
1334 | memcpy (peer_list, trail_peer_list, trail_length * sizeof (struct GNUNET_PeerIdentity)); | ||
1335 | } | ||
1336 | |||
1337 | /* Send the message to chosen friend. */ | ||
1338 | GNUNET_CONTAINER_DLL_insert_tail (target_friend->head, target_friend->tail, pending); | ||
1339 | target_friend->pending_count++; | ||
1340 | process_friend_queue (target_friend); | ||
1341 | } | ||
1342 | |||
1343 | |||
1344 | /** | ||
1345 | * Construct a verify successor message and forward it to target_friend. | ||
1346 | * @param source_peer Peer which wants to verify its successor. | ||
1347 | * @param successor Peer which is @a source_peer's current successor. | ||
1348 | * @param trail_id Unique Identifier of trail from @a source_peer to @a successor, | ||
1349 | * NOT including them. | ||
1350 | * @param trail List of peers which are part of trail to reach from @a source_peer | ||
1351 | * to @a successor, NOT including them. | ||
1352 | * @param trail_length Total number of peers in @a trail. | ||
1353 | * @param target_friend Next friend to get this message. | ||
1354 | */ | ||
1355 | void | ||
1356 | GDS_NEIGHBOURS_send_verify_successor_message (struct GNUNET_PeerIdentity source_peer, | ||
1357 | struct GNUNET_PeerIdentity successor, | ||
1358 | struct GNUNET_HashCode trail_id, | ||
1359 | struct GNUNET_PeerIdentity *trail, | ||
1360 | unsigned int trail_length, | ||
1361 | struct FriendInfo *target_friend) | ||
1362 | { | ||
1363 | struct PeerVerifySuccessorMessage *vsm; | ||
1364 | struct P2PPendingMessage *pending; | ||
1365 | struct GNUNET_PeerIdentity *peer_list; | ||
1366 | size_t msize; | ||
1367 | |||
1368 | msize = sizeof (struct PeerVerifySuccessorMessage) + | ||
1369 | (trail_length * sizeof (struct GNUNET_PeerIdentity)); | ||
1370 | |||
1371 | if (msize >= GNUNET_CONSTANTS_MAX_ENCRYPTED_MESSAGE_SIZE) | ||
1372 | { | ||
1373 | GNUNET_break (0); | ||
1374 | return; | ||
1375 | } | ||
1376 | |||
1377 | if (target_friend->pending_count >= MAXIMUM_PENDING_PER_FRIEND) | ||
1378 | { | ||
1379 | GNUNET_STATISTICS_update (GDS_stats, gettext_noop ("# P2P messages dropped due to full queue"), | ||
1380 | 1, GNUNET_NO); | ||
1381 | } | ||
1382 | |||
1383 | pending = GNUNET_malloc (sizeof (struct P2PPendingMessage) + msize); | ||
1384 | pending->importance = 0; /* FIXME */ | ||
1385 | pending->timeout = GNUNET_TIME_relative_to_absolute (PENDING_MESSAGE_TIMEOUT); | ||
1386 | vsm = (struct PeerVerifySuccessorMessage *) &pending[1]; | ||
1387 | pending->msg = &vsm->header; | ||
1388 | vsm->header.size = htons (msize); | ||
1389 | vsm->header.type = htons (GNUNET_MESSAGE_TYPE_XDHT_P2P_VERIFY_SUCCESSOR); | ||
1390 | vsm->source_peer = source_peer; | ||
1391 | vsm->successor = successor; | ||
1392 | vsm->trail_id = trail_id; | ||
1393 | peer_list = (struct GNUNET_PeerIdentity *) &vsm[1]; | ||
1394 | memcpy (peer_list, trail, trail_length * sizeof (struct GNUNET_PeerIdentity)); | ||
1395 | |||
1396 | /* Send the message to chosen friend. */ | ||
1397 | GNUNET_CONTAINER_DLL_insert_tail (target_friend->head, target_friend->tail, pending); | ||
1398 | target_friend->pending_count++; | ||
1399 | process_friend_queue (target_friend); | ||
1400 | } | ||
1401 | |||
1402 | |||
1403 | /** | ||
1404 | * FIXME: In every function we pass target friend except for this one. | ||
1405 | * so, either change everything or this one. also, should se just store | ||
1406 | * the pointer to friend in routing table rather than gnunet_peeridentity. | ||
1407 | * if yes then we should keep friend info in.h andmake lot of changes. | ||
1408 | * Construct a trail teardown message and forward it to target friend. | ||
1409 | * | ||
1410 | * @param trail_id Unique identifier of the trail. | ||
1411 | * @param trail_direction Direction of trail. | ||
1412 | * @param target_friend Friend to get this message. | ||
1413 | */ | ||
1414 | void | ||
1415 | GDS_NEIGHBOURS_send_trail_teardown (const struct GNUNET_HashCode *trail_id, | ||
1416 | unsigned int trail_direction, | ||
1417 | const struct GNUNET_PeerIdentity *peer) | ||
1418 | { | ||
1419 | struct PeerTrailTearDownMessage *ttdm; | ||
1420 | struct P2PPendingMessage *pending; | ||
1421 | struct FriendInfo *target_friend; | ||
1422 | size_t msize; | ||
1423 | |||
1424 | msize = sizeof (struct PeerTrailTearDownMessage); | ||
1425 | if (msize >= GNUNET_CONSTANTS_MAX_ENCRYPTED_MESSAGE_SIZE) | ||
1426 | { | ||
1427 | GNUNET_break (0); | ||
1428 | return; | ||
1429 | } | ||
1430 | |||
1431 | if (NULL == (target_friend = | ||
1432 | GNUNET_CONTAINER_multipeermap_get (friend_peermap, peer))) | ||
1433 | { | ||
1434 | /* FIXME: In what case friend can be null. ?*/ | ||
1435 | GNUNET_break (0); | ||
1436 | return; | ||
1437 | } | ||
1438 | |||
1439 | if (target_friend->pending_count >= MAXIMUM_PENDING_PER_FRIEND) | ||
1440 | { | ||
1441 | GNUNET_STATISTICS_update (GDS_stats, gettext_noop ("# P2P messages dropped due to full queue"), | ||
1442 | 1, GNUNET_NO); | ||
1443 | } | ||
1444 | |||
1445 | pending = GNUNET_malloc (sizeof (struct P2PPendingMessage) + msize); | ||
1446 | pending->importance = 0; /* FIXME */ | ||
1447 | pending->timeout = GNUNET_TIME_relative_to_absolute (PENDING_MESSAGE_TIMEOUT); | ||
1448 | ttdm = (struct PeerTrailTearDownMessage *) &pending[1]; | ||
1449 | pending->msg = &ttdm->header; | ||
1450 | ttdm->header.size = htons (msize); | ||
1451 | ttdm->header.type = htons (GNUNET_MESSAGE_TYPE_XDHT_P2P_TRAIL_TEARDOWN); | ||
1452 | ttdm->trail_id = *trail_id; | ||
1453 | ttdm->trail_direction = htonl (trail_direction); | ||
1454 | |||
1455 | /* Send the message to chosen friend. */ | ||
1456 | GNUNET_CONTAINER_DLL_insert_tail (target_friend->head, target_friend->tail, pending); | ||
1457 | target_friend->pending_count++; | ||
1458 | process_friend_queue (target_friend); | ||
1459 | } | ||
1460 | |||
1461 | |||
1462 | /** | ||
1463 | * Construct a verify successor result message and send it to target_friend | ||
1464 | * @param querying_peer Peer which sent the verify successor message. | ||
1465 | * @param source_successor Current_successor of @a querying_peer. | ||
1466 | * @param current_predecessor Current predecessor of @a successor. Could be same | ||
1467 | * or different from @a querying_peer. | ||
1468 | * @param trail_id Unique identifier of the trail from @a querying_peer to | ||
1469 | * @a successor, NOT including them. | ||
1470 | * @param trail List of peers which are part of trail from @a querying_peer to | ||
1471 | * @a successor, NOT including them. | ||
1472 | * @param trail_length Total number of peers in @a trail | ||
1473 | * @param trail_direction Direction in which we are sending the message. In this | ||
1474 | * case we are sending result from @a successor to @a querying_peer. | ||
1475 | * @param target_friend Next friend to get this message. | ||
1476 | */ | ||
1477 | void | ||
1478 | GDS_NEIGHBOURS_send_verify_successor_result (struct GNUNET_PeerIdentity querying_peer, | ||
1479 | struct GNUNET_PeerIdentity current_successor, | ||
1480 | struct GNUNET_PeerIdentity probable_successor, | ||
1481 | struct GNUNET_HashCode trail_id, | ||
1482 | const struct GNUNET_PeerIdentity *trail, | ||
1483 | unsigned int trail_length, | ||
1484 | enum GDS_ROUTING_trail_direction trail_direction, | ||
1485 | struct FriendInfo *target_friend) | ||
1486 | { | ||
1487 | struct PeerVerifySuccessorResultMessage *vsmr; | ||
1488 | struct P2PPendingMessage *pending; | ||
1489 | struct GNUNET_PeerIdentity *peer_list; | ||
1490 | size_t msize; | ||
1491 | |||
1492 | msize = sizeof (struct PeerVerifySuccessorResultMessage) + | ||
1493 | (trail_length * sizeof(struct GNUNET_PeerIdentity)); | ||
1494 | |||
1495 | if (msize >= GNUNET_CONSTANTS_MAX_ENCRYPTED_MESSAGE_SIZE) | ||
1496 | { | ||
1497 | GNUNET_break (0); | ||
1498 | return; | ||
1499 | } | ||
1500 | |||
1501 | if (target_friend->pending_count >= MAXIMUM_PENDING_PER_FRIEND) | ||
1502 | { | ||
1503 | GNUNET_STATISTICS_update (GDS_stats, gettext_noop ("# P2P messages dropped due to full queue"), | ||
1504 | 1, GNUNET_NO); | ||
1505 | } | ||
1506 | |||
1507 | pending = GNUNET_malloc (sizeof (struct P2PPendingMessage) + msize); | ||
1508 | pending->importance = 0; /* FIXME */ | ||
1509 | pending->timeout = GNUNET_TIME_relative_to_absolute (PENDING_MESSAGE_TIMEOUT); | ||
1510 | vsmr = (struct PeerVerifySuccessorResultMessage *) &pending[1]; | ||
1511 | pending->msg = &vsmr->header; | ||
1512 | vsmr->header.size = htons (msize); | ||
1513 | vsmr->header.type = htons (GNUNET_MESSAGE_TYPE_XDHT_P2P_VERIFY_SUCCESSOR_RESULT); | ||
1514 | vsmr->querying_peer = querying_peer; | ||
1515 | vsmr->current_successor = current_successor; | ||
1516 | vsmr->probable_successor = probable_successor; | ||
1517 | vsmr->trail_direction = htonl (trail_direction); | ||
1518 | vsmr->trail_id = trail_id; | ||
1519 | peer_list = (struct GNUNET_PeerIdentity *) &vsmr[1]; | ||
1520 | memcpy (peer_list, trail, trail_length * sizeof (struct GNUNET_PeerIdentity)); | ||
1521 | |||
1522 | /* Send the message to chosen friend. */ | ||
1523 | GNUNET_CONTAINER_DLL_insert_tail (target_friend->head, target_friend->tail, pending); | ||
1524 | target_friend->pending_count++; | ||
1525 | process_friend_queue (target_friend); | ||
1526 | } | ||
1527 | |||
1528 | |||
1529 | /** | ||
1530 | * Construct a notify new successor message and send it to target_friend | ||
1531 | * @param source_peer Peer which wants to notify to its new successor that it | ||
1532 | * could be its predecessor. | ||
1533 | * @param successor New successor of @a source_peer | ||
1534 | * @param successor_trail List of peers in Trail to reach from | ||
1535 | * @a source_peer to @a new_successor, NOT including | ||
1536 | * the endpoints. | ||
1537 | * @param successor_trail_length Total number of peers in @a new_successor_trail. | ||
1538 | * @param successor_trail_id Unique identifier of @a new_successor_trail. | ||
1539 | * @param target_friend Next friend to get this message. | ||
1540 | */ | ||
1541 | void | ||
1542 | GDS_NEIGHBOURS_send_notify_new_successor (struct GNUNET_PeerIdentity source_peer, | ||
1543 | struct GNUNET_PeerIdentity successor, | ||
1544 | const struct GNUNET_PeerIdentity *successor_trail, | ||
1545 | unsigned int successor_trail_length, | ||
1546 | struct GNUNET_HashCode succesor_trail_id, | ||
1547 | struct FriendInfo *target_friend) | ||
1548 | { | ||
1549 | struct PeerNotifyNewSuccessorMessage *nsm; | ||
1550 | struct P2PPendingMessage *pending; | ||
1551 | struct GNUNET_PeerIdentity *peer_list; | ||
1552 | size_t msize; | ||
1553 | |||
1554 | msize = sizeof (struct PeerNotifyNewSuccessorMessage) + | ||
1555 | (successor_trail_length * sizeof(struct GNUNET_PeerIdentity)); | ||
1556 | |||
1557 | if (msize >= GNUNET_CONSTANTS_MAX_ENCRYPTED_MESSAGE_SIZE) | ||
1558 | { | ||
1559 | GNUNET_break (0); | ||
1560 | return; | ||
1561 | } | ||
1562 | |||
1563 | if (target_friend->pending_count >= MAXIMUM_PENDING_PER_FRIEND) | ||
1564 | { | ||
1565 | GNUNET_STATISTICS_update (GDS_stats, gettext_noop ("# P2P messages dropped due to full queue"), | ||
1566 | 1, GNUNET_NO); | ||
1567 | } | ||
1568 | |||
1569 | pending = GNUNET_malloc (sizeof (struct P2PPendingMessage) + msize); | ||
1570 | pending->importance = 0; /* FIXME */ | ||
1571 | pending->timeout = GNUNET_TIME_relative_to_absolute (PENDING_MESSAGE_TIMEOUT); | ||
1572 | nsm = (struct PeerNotifyNewSuccessorMessage *) &pending[1]; | ||
1573 | pending->msg = &nsm->header; | ||
1574 | nsm->header.size = htons (msize); | ||
1575 | nsm->header.type = htons (GNUNET_MESSAGE_TYPE_XDHT_P2P_NOTIFY_NEW_SUCCESSOR); | ||
1576 | nsm->new_successor = successor; | ||
1577 | nsm->source_peer = source_peer; | ||
1578 | nsm->trail_id = succesor_trail_id; | ||
1579 | peer_list = (struct GNUNET_PeerIdentity *) &nsm[1]; | ||
1580 | memcpy (peer_list, successor_trail, | ||
1581 | successor_trail_length * sizeof (struct GNUNET_PeerIdentity)); | ||
1582 | |||
1583 | /* Send the message to chosen friend. */ | ||
1584 | GNUNET_CONTAINER_DLL_insert_tail (target_friend->head, target_friend->tail, pending); | ||
1585 | target_friend->pending_count++; | ||
1586 | process_friend_queue (target_friend); | ||
1587 | } | ||
1588 | |||
1589 | |||
1590 | /** | ||
1591 | * Construct an add_trail message and send it to target_friend | ||
1592 | * @param source_peer Source of the trail. | ||
1593 | * @param destination_peer Destination of the trail. | ||
1594 | * @param trail_id Unique identifier of the trail from | ||
1595 | * @a source_peer to @a destination_peer, NOT including the endpoints. | ||
1596 | * @param trail List of peers in Trail from @a source_peer to @a destination_peer, | ||
1597 | * NOT including the endpoints. | ||
1598 | * @param trail_length Total number of peers in @a trail. | ||
1599 | * @param target_friend Next friend to get this message. | ||
1600 | */ | ||
1601 | void | ||
1602 | GDS_NEIGHBOURS_send_add_trail (struct GNUNET_PeerIdentity source_peer, | ||
1603 | struct GNUNET_PeerIdentity destination_peer, | ||
1604 | struct GNUNET_HashCode trail_id, | ||
1605 | const struct GNUNET_PeerIdentity *trail, | ||
1606 | unsigned int trail_length, | ||
1607 | struct FriendInfo *target_friend) | ||
1608 | { | ||
1609 | struct PeerAddTrailMessage *adm; | ||
1610 | struct GNUNET_PeerIdentity *peer_list; | ||
1611 | struct P2PPendingMessage *pending; | ||
1612 | size_t msize; | ||
1613 | |||
1614 | msize = sizeof (struct PeerAddTrailMessage) + | ||
1615 | (trail_length * sizeof(struct GNUNET_PeerIdentity)); | ||
1616 | |||
1617 | if (msize >= GNUNET_CONSTANTS_MAX_ENCRYPTED_MESSAGE_SIZE) | ||
1618 | { | ||
1619 | GNUNET_break (0); | ||
1620 | return; | ||
1621 | } | ||
1622 | |||
1623 | if (target_friend->pending_count >= MAXIMUM_PENDING_PER_FRIEND) | ||
1624 | { | ||
1625 | GNUNET_STATISTICS_update (GDS_stats, gettext_noop ("# P2P messages dropped due to full queue"), | ||
1626 | 1, GNUNET_NO); | ||
1627 | } | ||
1628 | |||
1629 | pending = GNUNET_malloc (sizeof (struct P2PPendingMessage) + msize); | ||
1630 | pending->importance = 0; /* FIXME */ | ||
1631 | pending->timeout = GNUNET_TIME_relative_to_absolute (PENDING_MESSAGE_TIMEOUT); | ||
1632 | adm = (struct PeerAddTrailMessage *) &pending[1]; | ||
1633 | pending->msg = &adm->header; | ||
1634 | adm->header.size = htons (msize); | ||
1635 | adm->header.type = htons (GNUNET_MESSAGE_TYPE_XDHT_P2P_ADD_TRAIL); | ||
1636 | adm->source_peer = source_peer; | ||
1637 | adm->destination_peer = destination_peer; | ||
1638 | adm->trail_id = trail_id; | ||
1639 | peer_list = (struct GNUNET_PeerIdentity *)&adm[1]; | ||
1640 | memcpy (peer_list, trail, sizeof (struct GNUNET_PeerIdentity) * trail_length); | ||
1641 | |||
1642 | /* Send the message to chosen friend. */ | ||
1643 | GNUNET_CONTAINER_DLL_insert_tail (target_friend->head, target_friend->tail, pending); | ||
1644 | target_friend->pending_count++; | ||
1645 | process_friend_queue (target_friend); | ||
1646 | |||
1647 | } | ||
1648 | |||
1649 | |||
1650 | /** | ||
1651 | * Search my location in trail. In case I am present more than once in the | ||
1652 | * trail (can happen during trail setup), then return my lowest index. | ||
1653 | * @param trail List of peers | ||
1654 | * @return my_index if found | ||
1655 | * trail_length + 1 if an entry is present twice, It is an error. | ||
1656 | * -1 if no entry found. | ||
1657 | */ | ||
1658 | static int | ||
1659 | search_my_index (const struct GNUNET_PeerIdentity *trail, | ||
1660 | int trail_length) | ||
1661 | { | ||
1662 | int i; | ||
1663 | int index_seen = trail_length + 1; | ||
1664 | int flag = 0; | ||
1665 | |||
1666 | for (i = 0; i < trail_length; i++) | ||
1667 | { | ||
1668 | if (0 == GNUNET_CRYPTO_cmp_peer_identity (&my_identity, &trail[i])) | ||
1669 | { | ||
1670 | flag = 1; | ||
1671 | if(index_seen == (trail_length + 1)) | ||
1672 | index_seen = i; | ||
1673 | else | ||
1674 | { | ||
1675 | DEBUG("Entry is present twice in trail. Its not allowed\n"); | ||
1676 | } | ||
1677 | break; | ||
1678 | } | ||
1679 | } | ||
1680 | |||
1681 | if (1 == flag) | ||
1682 | return index_seen; | ||
1683 | else | ||
1684 | return -1; | ||
1685 | } | ||
1686 | |||
1687 | |||
1688 | /** | ||
1689 | * Check if the friend is congested or have reached maximum number of trails | ||
1690 | * it can be part of of. | ||
1691 | * @param friend Friend to be checked. | ||
1692 | * @return #GNUNET_NO if friend is not congested or have not crossed threshold. | ||
1693 | * #GNUNET_YES if friend is either congested or have crossed threshold | ||
1694 | */ | ||
1695 | static int | ||
1696 | is_friend_congested (struct FriendInfo *friend) | ||
1697 | { | ||
1698 | if (( friend->trails_count < TRAILS_THROUGH_FRIEND_THRESHOLD) && | ||
1699 | ((0 == GNUNET_TIME_absolute_get_remaining | ||
1700 | (friend->congestion_timestamp).rel_value_us))) | ||
1701 | return GNUNET_NO; | ||
1702 | else | ||
1703 | return GNUNET_YES; | ||
1704 | } | ||
1705 | |||
1706 | |||
1707 | /** | ||
1708 | * Select closest finger to value. | ||
1709 | * @param peer1 First peer | ||
1710 | * @param peer2 Second peer | ||
1711 | * @param value Value to be compare | ||
1712 | * @return Closest peer | ||
1713 | */ | ||
1714 | static struct GNUNET_PeerIdentity | ||
1715 | select_closest_finger (const struct GNUNET_PeerIdentity *peer1, | ||
1716 | const struct GNUNET_PeerIdentity *peer2, | ||
1717 | uint64_t value) | ||
1718 | { | ||
1719 | uint64_t peer1_value; | ||
1720 | uint64_t peer2_value; | ||
1721 | |||
1722 | memcpy (&peer1_value, peer1, sizeof (uint64_t)); | ||
1723 | memcpy (&peer2_value, peer2, sizeof (uint64_t)); | ||
1724 | peer1_value = GNUNET_ntohll (peer1_value); | ||
1725 | peer2_value = GNUNET_ntohll (peer2_value); | ||
1726 | |||
1727 | if (peer1_value == value) | ||
1728 | { | ||
1729 | return *peer1; | ||
1730 | } | ||
1731 | |||
1732 | if (peer2_value == value) | ||
1733 | { | ||
1734 | return *peer2; | ||
1735 | } | ||
1736 | |||
1737 | if (value < peer1_value && peer1_value < peer2_value) | ||
1738 | { | ||
1739 | return *peer1; | ||
1740 | } | ||
1741 | else if (value < peer2_value && peer2_value < peer1_value) | ||
1742 | { | ||
1743 | return *peer2; | ||
1744 | } | ||
1745 | else if (peer1_value < value && value < peer2_value) | ||
1746 | { | ||
1747 | return *peer2; | ||
1748 | } | ||
1749 | else if (peer2_value < value && value < peer1_value) | ||
1750 | { | ||
1751 | return *peer1; | ||
1752 | } | ||
1753 | else if (peer1_value < peer2_value && peer2_value < value) | ||
1754 | { | ||
1755 | return *peer1; | ||
1756 | } | ||
1757 | else // if (peer2_value < peer1_value && peer1_value < value) | ||
1758 | { | ||
1759 | return *peer2; | ||
1760 | } | ||
1761 | } | ||
1762 | |||
1763 | |||
1764 | /** | ||
1765 | * Select closest predecessor to value. | ||
1766 | * @param peer1 First peer | ||
1767 | * @param peer2 Second peer | ||
1768 | * @param value Value to be compare | ||
1769 | * @return Peer which precedes value in the network. | ||
1770 | */ | ||
1771 | static struct GNUNET_PeerIdentity | ||
1772 | select_closest_predecessor (const struct GNUNET_PeerIdentity *peer1, | ||
1773 | const struct GNUNET_PeerIdentity *peer2, | ||
1774 | uint64_t value) | ||
1775 | { | ||
1776 | uint64_t peer1_value; | ||
1777 | uint64_t peer2_value; | ||
1778 | |||
1779 | memcpy (&peer1_value, peer1, sizeof (uint64_t)); | ||
1780 | memcpy (&peer2_value, peer2, sizeof (uint64_t)); | ||
1781 | peer1_value = GNUNET_ntohll (peer1_value); | ||
1782 | peer2_value = GNUNET_ntohll (peer2_value); | ||
1783 | |||
1784 | if (peer1_value == value) | ||
1785 | { | ||
1786 | return *peer1; | ||
1787 | } | ||
1788 | |||
1789 | if (peer2_value == value) | ||
1790 | { | ||
1791 | return *peer2; | ||
1792 | } | ||
1793 | |||
1794 | if (value < peer1_value && peer1_value < peer2_value) | ||
1795 | { | ||
1796 | return *peer2; | ||
1797 | } | ||
1798 | else if (value < peer2_value && peer2_value < peer1_value) | ||
1799 | { | ||
1800 | return *peer1; | ||
1801 | } | ||
1802 | else if (peer1_value < value && value < peer2_value) | ||
1803 | { | ||
1804 | return *peer1; | ||
1805 | } | ||
1806 | else if (peer2_value < value && value < peer1_value) | ||
1807 | { | ||
1808 | return *peer2; | ||
1809 | } | ||
1810 | else if (peer1_value < peer2_value && peer2_value < value) | ||
1811 | { | ||
1812 | return *peer2; | ||
1813 | } | ||
1814 | else // if (peer2_value < peer1_value && peer1_value < value) | ||
1815 | { | ||
1816 | return *peer1; | ||
1817 | } | ||
1818 | } | ||
1819 | |||
1820 | #if 0 | ||
1821 | /** | ||
1822 | * | ||
1823 | * | ||
1824 | */ | ||
1825 | void | ||
1826 | test_print_trail (struct GNUNET_PeerIdentity *trail, | ||
1827 | unsigned int trail_length) | ||
1828 | { | ||
1829 | struct GNUNET_PeerIdentity print_peer; | ||
1830 | int i; | ||
1831 | |||
1832 | FPRINTF (stderr,_("\nSUPU %s, %s, %d,trail_length = %d"), | ||
1833 | __FILE__, __func__,__LINE__,trail_length); | ||
1834 | for (i =0 ; i< trail_length; i++) | ||
1835 | { | ||
1836 | print_peer = trail[i]; | ||
1837 | FPRINTF (stderr,_("\nSUPU %s, %s, %d,trail[%d]=%s"), | ||
1838 | __FILE__, __func__,__LINE__,i,GNUNET_i2s(&print_peer)); | ||
1839 | } | ||
1840 | } | ||
1841 | #endif | ||
1842 | |||
1843 | #if 0 | ||
1844 | /** | ||
1845 | * This is a test function to print all the entries of friend table. | ||
1846 | */ | ||
1847 | static void | ||
1848 | test_friend_peermap_print () | ||
1849 | { | ||
1850 | struct FriendInfo *friend; | ||
1851 | struct GNUNET_CONTAINER_MultiPeerMapIterator *friend_iter; | ||
1852 | struct GNUNET_PeerIdentity print_peer; | ||
1853 | struct GNUNET_PeerIdentity key_ret; | ||
1854 | int i; | ||
1855 | |||
1856 | print_peer = my_identity; | ||
1857 | FPRINTF (stderr,_("\nSUPU************ FRIEND_PEERMAP of %s"),GNUNET_i2s(&print_peer)); | ||
1858 | friend_iter = GNUNET_CONTAINER_multipeermap_iterator_create (friend_peermap); | ||
1859 | |||
1860 | for (i = 0; i < GNUNET_CONTAINER_multipeermap_size (friend_peermap); i++) | ||
1861 | { | ||
1862 | if(GNUNET_YES == GNUNET_CONTAINER_multipeermap_iterator_next (friend_iter, | ||
1863 | &key_ret, | ||
1864 | (const void **)&friend)) | ||
1865 | { | ||
1866 | memcpy (&print_peer, &key_ret, sizeof (struct GNUNET_PeerIdentity)); | ||
1867 | FPRINTF (stderr,_("\nSUPU %s, %s, %d, friend = %s, friend->trails_count = %d"), | ||
1868 | __FILE__, __func__,__LINE__, GNUNET_i2s(&print_peer), friend->trails_count); | ||
1869 | } | ||
1870 | } | ||
1871 | } | ||
1872 | #endif | ||
1873 | |||
1874 | #if 0 | ||
1875 | /** | ||
1876 | * This is a test function, to print all the entries of finger table. | ||
1877 | */ | ||
1878 | static void | ||
1879 | test_finger_table_print() | ||
1880 | { | ||
1881 | struct FingerInfo *finger; | ||
1882 | struct GNUNET_PeerIdentity print_peer; | ||
1883 | //struct Trail *trail; | ||
1884 | int i; | ||
1885 | //int j; | ||
1886 | //int k; | ||
1887 | print_peer = my_identity; | ||
1888 | FPRINTF (stderr,_("\nSUPU************ FINGER_TABLE of %s"),GNUNET_i2s(&print_peer)); | ||
1889 | for (i = 0; i < MAX_FINGERS; i++) | ||
1890 | { | ||
1891 | finger = &finger_table[i]; | ||
1892 | |||
1893 | if (GNUNET_NO == finger->is_present) | ||
1894 | continue; | ||
1895 | |||
1896 | print_peer = finger->finger_identity; | ||
1897 | FPRINTF (stderr,_("\nSUPU %s, %s, %d, finger_table[%d] = %s, trails_count = %d"), | ||
1898 | __FILE__, __func__,__LINE__,i,GNUNET_i2s (&print_peer), finger->trails_count); | ||
1899 | |||
1900 | #if 0 | ||
1901 | for (j = 0; j < finger->trails_count; j++) | ||
1902 | { | ||
1903 | trail = &finger->trail_list[j]; | ||
1904 | FPRINTF (stderr,_("\nSUPU %s, %s, %d, trail_id[%d]=%s"),__FILE__, __func__,__LINE__,j, GNUNET_h2s(&trail->trail_id)); | ||
1905 | struct Trail_Element *element; | ||
1906 | element = trail->trail_head; | ||
1907 | for (k = 0; k < trail->trail_length; k++) | ||
1908 | { | ||
1909 | print_peer = element->peer; | ||
1910 | FPRINTF (stderr,_("\nSUPU %s, %s, %d,trail[%d] = %s "),__FILE__, __func__,__LINE__,k, GNUNET_i2s(&print_peer)); | ||
1911 | element = element->next; | ||
1912 | } | ||
1913 | } | ||
1914 | #endif | ||
1915 | } | ||
1916 | } | ||
1917 | #endif | ||
1918 | |||
1919 | /** | ||
1920 | * Select the closest peer among two peers (which should not be same) | ||
1921 | * with respect to value and finger_table_index | ||
1922 | * NOTE: peer1 != peer2 | ||
1923 | * @param peer1 First peer | ||
1924 | * @param peer2 Second peer | ||
1925 | * @param value Value relative to which we find the closest | ||
1926 | * @param is_predecessor Is value a predecessor or any other finger. | ||
1927 | * @return Closest peer among two peers. | ||
1928 | */ | ||
1929 | static struct GNUNET_PeerIdentity | ||
1930 | select_closest_peer (const struct GNUNET_PeerIdentity *peer1, | ||
1931 | const struct GNUNET_PeerIdentity *peer2, | ||
1932 | uint64_t value, | ||
1933 | unsigned int is_predecessor) | ||
1934 | { | ||
1935 | /* This check is here to ensure that calling function never sends | ||
1936 | same peer value in peer1 and peer2. Remove it later. */ | ||
1937 | GNUNET_assert(0 != GNUNET_CRYPTO_cmp_peer_identity (peer1, peer2)); | ||
1938 | if (1 == is_predecessor) | ||
1939 | return select_closest_predecessor (peer1, peer2, value); | ||
1940 | |||
1941 | // TODO: Change name to something like select_closest_successor!! | ||
1942 | return select_closest_finger (peer1, peer2, value); | ||
1943 | } | ||
1944 | |||
1945 | |||
1946 | /** | ||
1947 | * Iterate over the list of all the trails of a finger. In case the first | ||
1948 | * friend to reach the finger has reached trail threshold or is congested, | ||
1949 | * then don't select it. In case there multiple available good trails to reach | ||
1950 | * to Finger, choose the one with shortest trail length. | ||
1951 | * Note: We use length as parameter. But we can use any other suitable parameter | ||
1952 | * also. | ||
1953 | * @param finger Finger Finger whose trail we have to select. | ||
1954 | * @return Trail Selected Trail. | ||
1955 | */ | ||
1956 | static struct Trail * | ||
1957 | select_finger_trail (struct FingerInfo *finger) | ||
1958 | { | ||
1959 | struct FriendInfo *friend; | ||
1960 | struct Trail *current_finger_trail; | ||
1961 | struct Trail *best_trail = NULL; | ||
1962 | unsigned int i; | ||
1963 | |||
1964 | GNUNET_assert (finger->trails_count > 0); | ||
1965 | for (i = 0; i < finger->trails_count; i++) | ||
1966 | { | ||
1967 | current_finger_trail = &finger->trail_list[i]; | ||
1968 | |||
1969 | /* No trail stored at this index. */ | ||
1970 | if (GNUNET_NO == current_finger_trail->is_present) | ||
1971 | continue; | ||
1972 | |||
1973 | GNUNET_assert (NULL != | ||
1974 | (friend = | ||
1975 | GNUNET_CONTAINER_multipeermap_get (friend_peermap, | ||
1976 | ¤t_finger_trail->trail_head->peer))); | ||
1977 | |||
1978 | /* First friend to reach trail is not free. */ | ||
1979 | if (GNUNET_YES == is_friend_congested (friend)) | ||
1980 | continue; | ||
1981 | |||
1982 | if (NULL == best_trail || | ||
1983 | best_trail->trail_length > current_finger_trail->trail_length) | ||
1984 | { | ||
1985 | best_trail = current_finger_trail; | ||
1986 | } | ||
1987 | } | ||
1988 | |||
1989 | return best_trail; | ||
1990 | } | ||
1991 | |||
1992 | |||
1993 | /** | ||
1994 | * Compare FINGER entry with current successor. If finger's first friend of all | ||
1995 | * its trail is not congested and has not crossed trail threshold, then check | ||
1996 | * if finger peer identity is closer to final_destination_finger_value than | ||
1997 | * current_successor. If yes then update current_successor. | ||
1998 | * @param current_successor[in/out] | ||
1999 | * @return | ||
2000 | */ | ||
2001 | static void | ||
2002 | compare_finger_and_current_closest_peer (struct Closest_Peer *current_closest_peer) | ||
2003 | { | ||
2004 | struct FingerInfo *finger; | ||
2005 | struct GNUNET_PeerIdentity closest_peer; | ||
2006 | struct Trail *finger_trail; | ||
2007 | int i; | ||
2008 | |||
2009 | /* Iterate over finger table. */ | ||
2010 | for (i = 0; i < MAX_FINGERS; i++) | ||
2011 | { | ||
2012 | finger = &finger_table[i]; | ||
2013 | |||
2014 | if (GNUNET_NO == finger->is_present) | ||
2015 | continue; | ||
2016 | |||
2017 | if (0 == GNUNET_CRYPTO_cmp_peer_identity (&finger->finger_identity, | ||
2018 | ¤t_closest_peer->best_known_destination)) | ||
2019 | continue; | ||
2020 | |||
2021 | /* If I am my own finger, then ignore this finger. */ | ||
2022 | if (0 == GNUNET_CRYPTO_cmp_peer_identity (&finger->finger_identity, | ||
2023 | &my_identity)) | ||
2024 | continue; | ||
2025 | |||
2026 | /* If finger is a friend, we have already checked it in previous function. */ | ||
2027 | if (NULL != (GNUNET_CONTAINER_multipeermap_get (friend_peermap, | ||
2028 | &finger->finger_identity))) | ||
2029 | { | ||
2030 | continue; | ||
2031 | } | ||
2032 | |||
2033 | closest_peer = select_closest_peer (&finger->finger_identity, | ||
2034 | ¤t_closest_peer->best_known_destination, | ||
2035 | current_closest_peer->destination_finger_value, | ||
2036 | current_closest_peer->is_predecessor); | ||
2037 | |||
2038 | if (0 == GNUNET_CRYPTO_cmp_peer_identity(&finger->finger_identity, &closest_peer)) | ||
2039 | { | ||
2040 | /* Choose one of the trail to reach to finger. */ | ||
2041 | finger_trail = select_finger_trail (finger); | ||
2042 | |||
2043 | /* In case no trail found, ignore this finger. */ | ||
2044 | if (NULL == finger_trail) | ||
2045 | continue; | ||
2046 | |||
2047 | current_closest_peer->best_known_destination = closest_peer; | ||
2048 | current_closest_peer->next_hop = finger_trail->trail_head->peer; | ||
2049 | current_closest_peer->trail_id = finger_trail->trail_id; | ||
2050 | current_closest_peer->finger_table_index = i; | ||
2051 | } | ||
2052 | continue; | ||
2053 | } | ||
2054 | } | ||
2055 | |||
2056 | |||
2057 | /** | ||
2058 | * Compare friend entry with current successor. | ||
2059 | * If friend identity and current_successor is same, then do nothing. | ||
2060 | * If friend is not congested and has not crossed trail threshold, then check | ||
2061 | * if friend peer identity is closer to final_destination_finger_value than | ||
2062 | * current_successor. If yes then update current_successor. | ||
2063 | * @param cls closure | ||
2064 | * @param key current public key | ||
2065 | * @param value struct Closest_Peer | ||
2066 | * @return #GNUNET_YES if we should continue to iterate, | ||
2067 | * #GNUNET_NO if not. | ||
2068 | */ | ||
2069 | static int | ||
2070 | compare_friend_and_current_closest_peer (void *cls, | ||
2071 | const struct GNUNET_PeerIdentity *key, | ||
2072 | void *value) | ||
2073 | { | ||
2074 | struct FriendInfo *friend = value; | ||
2075 | struct Closest_Peer *current_closest_peer = cls; | ||
2076 | struct GNUNET_PeerIdentity closest_peer; | ||
2077 | |||
2078 | /* Friend is either congested or has crossed threshold. */ | ||
2079 | if (GNUNET_YES == is_friend_congested (friend)) | ||
2080 | return GNUNET_YES; | ||
2081 | |||
2082 | /* If current_closest_peer and friend identity are same, then do nothing.*/ | ||
2083 | if (0 == GNUNET_CRYPTO_cmp_peer_identity (&friend->id, | ||
2084 | ¤t_closest_peer->best_known_destination)) | ||
2085 | { | ||
2086 | GNUNET_break (0); | ||
2087 | return GNUNET_YES; | ||
2088 | } | ||
2089 | |||
2090 | closest_peer = select_closest_peer (&friend->id, | ||
2091 | ¤t_closest_peer->best_known_destination, | ||
2092 | current_closest_peer->destination_finger_value, | ||
2093 | current_closest_peer->is_predecessor); | ||
2094 | |||
2095 | /* Is friend the closest successor? */ | ||
2096 | if (0 == GNUNET_CRYPTO_cmp_peer_identity(&friend->id, &closest_peer)) | ||
2097 | { | ||
2098 | current_closest_peer->best_known_destination = friend->id; | ||
2099 | current_closest_peer->next_hop = friend->id; | ||
2100 | } | ||
2101 | |||
2102 | return GNUNET_YES; | ||
2103 | } | ||
2104 | |||
2105 | |||
2106 | /** | ||
2107 | * Initialize current_successor to my_identity. | ||
2108 | * @param my_identity My peer identity | ||
2109 | * @return Updated closest_peer | ||
2110 | */ | ||
2111 | static struct Closest_Peer | ||
2112 | init_closest_peer (struct GNUNET_PeerIdentity my_identity, | ||
2113 | uint64_t destination_finger_value, | ||
2114 | unsigned int is_predecessor) | ||
2115 | { | ||
2116 | struct Closest_Peer current_closest_peer; | ||
2117 | |||
2118 | memset (¤t_closest_peer.trail_id, 0, sizeof(struct GNUNET_HashCode)); | ||
2119 | current_closest_peer.destination_finger_value = destination_finger_value; | ||
2120 | current_closest_peer.is_predecessor = is_predecessor; | ||
2121 | current_closest_peer.next_hop = my_identity; | ||
2122 | current_closest_peer.best_known_destination = my_identity; | ||
2123 | current_closest_peer.finger_table_index = 65; //65 is a for non valid finger table index. | ||
2124 | return current_closest_peer; | ||
2125 | } | ||
2126 | |||
2127 | |||
2128 | /** | ||
2129 | * Find locally best known peer, among your own identity, friend and finger list, | ||
2130 | * which is closest to given destination_finger_value. | ||
2131 | * | ||
2132 | * NOTE: In case a friend is also a finger, then it is always chosen as friend | ||
2133 | * not a finger. | ||
2134 | * @param destination_finger_value Peer closest to this value will be the next destination. | ||
2135 | * @param is_predecessor Are we looking for predecessor or finger? | ||
2136 | * @return Closest_Peer that contains all the relevant field to reach to | ||
2137 | * @a destination_finger_value | ||
2138 | */ | ||
2139 | static struct Closest_Peer | ||
2140 | find_local_best_known_next_hop (uint64_t destination_finger_value, | ||
2141 | unsigned int is_predecessor) | ||
2142 | { | ||
2143 | struct Closest_Peer current_closest_peer; | ||
2144 | |||
2145 | /* Initialize current_successor to my_identity. */ | ||
2146 | current_closest_peer = init_closest_peer (my_identity, | ||
2147 | destination_finger_value, | ||
2148 | is_predecessor); | ||
2149 | |||
2150 | /* Compare each friend entry with current_successor and update current_successor | ||
2151 | * with friend if its closest. */ | ||
2152 | GNUNET_assert | ||
2153 | (GNUNET_SYSERR != | ||
2154 | GNUNET_CONTAINER_multipeermap_iterate (friend_peermap, | ||
2155 | &compare_friend_and_current_closest_peer, | ||
2156 | ¤t_closest_peer)); | ||
2157 | |||
2158 | /* Compare each finger entry with current_successor and update current_successor | ||
2159 | * with finger if its closest. */ | ||
2160 | compare_finger_and_current_closest_peer (¤t_closest_peer); | ||
2161 | return current_closest_peer; | ||
2162 | } | ||
2163 | |||
2164 | |||
2165 | /** | ||
2166 | * Construct a Put message and send it to target_peer. | ||
2167 | * @param key Key for the content | ||
2168 | * @param block_type Type of the block | ||
2169 | * @param options Routing options | ||
2170 | * @param desired_replication_level Desired replication count | ||
2171 | * @param best_known_dest Peer to which this message should reach eventually, | ||
2172 | * as it is best known destination to me. | ||
2173 | * @param intermediate_trail_id Trail id in case | ||
2174 | * @param target_peer Peer to which this message will be forwarded. | ||
2175 | * @param hop_count Number of hops traversed so far. | ||
2176 | * @param put_path_length Total number of peers in @a put_path | ||
2177 | * @param put_path Number of peers traversed so far | ||
2178 | * @param expiration_time When does the content expire | ||
2179 | * @param data Content to store | ||
2180 | * @param data_size Size of content @a data in bytes | ||
2181 | */ | ||
2182 | void | ||
2183 | GDS_NEIGHBOURS_send_put (const struct GNUNET_HashCode *key, | ||
2184 | enum GNUNET_BLOCK_Type block_type, | ||
2185 | enum GNUNET_DHT_RouteOption options, | ||
2186 | uint32_t desired_replication_level, | ||
2187 | struct GNUNET_PeerIdentity best_known_dest, | ||
2188 | struct GNUNET_HashCode intermediate_trail_id, | ||
2189 | struct GNUNET_PeerIdentity *target_peer, | ||
2190 | uint32_t hop_count, | ||
2191 | uint32_t put_path_length, | ||
2192 | struct GNUNET_PeerIdentity *put_path, | ||
2193 | struct GNUNET_TIME_Absolute expiration_time, | ||
2194 | const void *data, size_t data_size) | ||
2195 | { | ||
2196 | struct PeerPutMessage *ppm; | ||
2197 | struct P2PPendingMessage *pending; | ||
2198 | struct FriendInfo *target_friend; | ||
2199 | struct GNUNET_PeerIdentity *pp; | ||
2200 | size_t msize; | ||
2201 | |||
2202 | msize = put_path_length * sizeof (struct GNUNET_PeerIdentity) + data_size + | ||
2203 | sizeof (struct PeerPutMessage); | ||
2204 | if (msize >= GNUNET_CONSTANTS_MAX_ENCRYPTED_MESSAGE_SIZE) | ||
2205 | { | ||
2206 | put_path_length = 0; | ||
2207 | msize = data_size + sizeof (struct PeerPutMessage); | ||
2208 | } | ||
2209 | |||
2210 | if (msize >= GNUNET_CONSTANTS_MAX_ENCRYPTED_MESSAGE_SIZE) | ||
2211 | { | ||
2212 | DEBUG("msize = %lu\n",msize); | ||
2213 | GNUNET_break (0); | ||
2214 | return; | ||
2215 | } | ||
2216 | |||
2217 | GNUNET_assert (NULL != | ||
2218 | (target_friend = | ||
2219 | GNUNET_CONTAINER_multipeermap_get (friend_peermap, target_peer))); | ||
2220 | pending = GNUNET_malloc (sizeof (struct P2PPendingMessage) + msize); | ||
2221 | pending->timeout = expiration_time; | ||
2222 | ppm = (struct PeerPutMessage *) &pending[1]; | ||
2223 | pending->msg = &ppm->header; | ||
2224 | ppm->header.size = htons (msize); | ||
2225 | ppm->header.type = htons (GNUNET_MESSAGE_TYPE_XDHT_P2P_PUT); | ||
2226 | ppm->options = htonl (options); | ||
2227 | ppm->block_type = htonl (block_type); | ||
2228 | ppm->hop_count = htonl (hop_count + 1); | ||
2229 | ppm->desired_replication_level = htonl (desired_replication_level); | ||
2230 | ppm->expiration_time = GNUNET_TIME_absolute_hton (expiration_time); | ||
2231 | ppm->best_known_destination = best_known_dest; | ||
2232 | ppm->intermediate_trail_id = intermediate_trail_id; | ||
2233 | ppm->key = *key; | ||
2234 | pp = (struct GNUNET_PeerIdentity *) &ppm[1]; | ||
2235 | ppm->put_path_length = htonl (put_path_length); | ||
2236 | if(put_path_length > 0) | ||
2237 | { | ||
2238 | memcpy (pp, put_path, | ||
2239 | sizeof (struct GNUNET_PeerIdentity) * put_path_length); | ||
2240 | } | ||
2241 | memcpy (&pp[put_path_length], data, data_size); | ||
2242 | GNUNET_assert (NULL != target_friend); | ||
2243 | GNUNET_CONTAINER_DLL_insert_tail (target_friend->head, target_friend->tail, pending); | ||
2244 | target_friend->pending_count++; | ||
2245 | process_friend_queue (target_friend); | ||
2246 | } | ||
2247 | |||
2248 | |||
2249 | /** | ||
2250 | * Handle the put request from the client. | ||
2251 | * @param key Key for the content | ||
2252 | * @param block_type Type of the block | ||
2253 | * @param options Routing options | ||
2254 | * @param desired_replication_level Desired replication count | ||
2255 | * @param expiration_time When does the content expire | ||
2256 | * @param data Content to store | ||
2257 | * @param data_size Size of content @a data in bytes | ||
2258 | */ | ||
2259 | void | ||
2260 | GDS_NEIGHBOURS_handle_put (const struct GNUNET_HashCode *key, | ||
2261 | enum GNUNET_BLOCK_Type block_type, | ||
2262 | enum GNUNET_DHT_RouteOption options, | ||
2263 | uint32_t desired_replication_level, | ||
2264 | struct GNUNET_TIME_Absolute expiration_time, | ||
2265 | const void *data, size_t data_size) | ||
2266 | { | ||
2267 | struct GNUNET_PeerIdentity best_known_dest; | ||
2268 | struct GNUNET_HashCode intermediate_trail_id; | ||
2269 | struct GNUNET_PeerIdentity next_hop; | ||
2270 | uint64_t key_value; | ||
2271 | struct Closest_Peer successor; | ||
2272 | |||
2273 | memcpy (&key_value, key, sizeof (uint64_t)); | ||
2274 | key_value = GNUNET_ntohll (key_value); | ||
2275 | successor = find_local_best_known_next_hop (key_value, | ||
2276 | GDS_FINGER_TYPE_NON_PREDECESSOR); | ||
2277 | best_known_dest = successor.best_known_destination; | ||
2278 | next_hop = successor.next_hop; | ||
2279 | intermediate_trail_id = successor.trail_id; | ||
2280 | |||
2281 | if (0 == GNUNET_CRYPTO_cmp_peer_identity (&best_known_dest, &my_identity)) | ||
2282 | { | ||
2283 | DEBUG("\n PUT_REQUEST_SUCCESSFUL for key = %s",GNUNET_h2s(key)); | ||
2284 | /* I am the destination. */ | ||
2285 | GDS_DATACACHE_handle_put (expiration_time, key, 0, NULL, | ||
2286 | block_type,data_size,data); | ||
2287 | GDS_CLIENTS_process_put (options, block_type, 0, | ||
2288 | ntohl (desired_replication_level), | ||
2289 | 1, &my_identity, expiration_time, //FIXME: GNUNETnthoh something on expiration time. | ||
2290 | key, data, data_size); | ||
2291 | return; | ||
2292 | } | ||
2293 | /* In case we are sending the request to a finger, then send across all of its | ||
2294 | trail.*/ | ||
2295 | #if ENABLE_MALICIOUS | ||
2296 | if (0 != GNUNET_CRYPTO_cmp_peer_identity (&successor.best_known_destination, | ||
2297 | &successor.next_hop)) | ||
2298 | { | ||
2299 | struct FingerInfo *next_hop_finger; | ||
2300 | unsigned int i; | ||
2301 | |||
2302 | next_hop_finger = &finger_table[successor.finger_table_index]; | ||
2303 | for (i = 0; i < next_hop_finger->trails_count; i++) | ||
2304 | { | ||
2305 | if (GNUNET_YES == next_hop_finger->trail_list[i].is_present) | ||
2306 | { | ||
2307 | if(0 == next_hop_finger->trail_list[i].trail_length) | ||
2308 | { | ||
2309 | GDS_NEIGHBOURS_send_put (key, block_type, options, desired_replication_level, | ||
2310 | best_known_dest, intermediate_trail_id, &next_hop, | ||
2311 | 0, 1, &my_identity, expiration_time, | ||
2312 | data, data_size); | ||
2313 | return; | ||
2314 | } | ||
2315 | next_hop = next_hop_finger->trail_list[i].trail_head->peer; | ||
2316 | GDS_NEIGHBOURS_send_put (key, block_type, options, desired_replication_level, | ||
2317 | best_known_dest, | ||
2318 | next_hop_finger->trail_list[i].trail_id, | ||
2319 | &next_hop, 0, 1, &my_identity, | ||
2320 | expiration_time, | ||
2321 | data, data_size); | ||
2322 | } | ||
2323 | } | ||
2324 | return; | ||
2325 | } | ||
2326 | #endif | ||
2327 | GDS_NEIGHBOURS_send_put (key, block_type, options, desired_replication_level, | ||
2328 | best_known_dest, intermediate_trail_id, &next_hop, | ||
2329 | 0, 1, &my_identity, expiration_time, | ||
2330 | data, data_size); | ||
2331 | } | ||
2332 | |||
2333 | /** | ||
2334 | * Construct a Get message and send it to target_peer. | ||
2335 | * @param key Key for the content | ||
2336 | * @param block_type Type of the block | ||
2337 | * @param options Routing options | ||
2338 | * @param desired_replication_level Desired replication count | ||
2339 | * @param best_known_dest Peer which should get this message. Same as target peer | ||
2340 | * if best_known_dest is a friend else its a finger. | ||
2341 | * @param intermediate_trail_id Trail id to reach to @a best_known_dest | ||
2342 | * in case it is a finger else set to 0. | ||
2343 | * @param target_peer Peer to which this message will be forwarded. | ||
2344 | * @param hop_count Number of hops traversed so far. | ||
2345 | * @param data Content to store | ||
2346 | * @param data_size Size of content @a data in bytes | ||
2347 | * @param get_path_length Total number of peers in @a get_path | ||
2348 | * @param get_path Number of peers traversed so far | ||
2349 | */ | ||
2350 | void | ||
2351 | GDS_NEIGHBOURS_send_get (const struct GNUNET_HashCode *key, | ||
2352 | enum GNUNET_BLOCK_Type block_type, | ||
2353 | enum GNUNET_DHT_RouteOption options, | ||
2354 | uint32_t desired_replication_level, | ||
2355 | struct GNUNET_PeerIdentity best_known_dest, | ||
2356 | struct GNUNET_HashCode intermediate_trail_id, | ||
2357 | struct GNUNET_PeerIdentity *target_peer, | ||
2358 | uint32_t hop_count, | ||
2359 | uint32_t get_path_length, | ||
2360 | struct GNUNET_PeerIdentity *get_path) | ||
2361 | { | ||
2362 | struct PeerGetMessage *pgm; | ||
2363 | struct P2PPendingMessage *pending; | ||
2364 | struct FriendInfo *target_friend; | ||
2365 | struct GNUNET_PeerIdentity *gp; | ||
2366 | size_t msize; | ||
2367 | |||
2368 | msize = sizeof (struct PeerGetMessage) + | ||
2369 | (get_path_length * sizeof (struct GNUNET_PeerIdentity)); | ||
2370 | |||
2371 | if (msize >= GNUNET_CONSTANTS_MAX_ENCRYPTED_MESSAGE_SIZE) | ||
2372 | { | ||
2373 | GNUNET_break (0); | ||
2374 | return; | ||
2375 | } | ||
2376 | GNUNET_assert (NULL != | ||
2377 | (target_friend = | ||
2378 | GNUNET_CONTAINER_multipeermap_get (friend_peermap, target_peer))); | ||
2379 | |||
2380 | pending = GNUNET_malloc (sizeof (struct P2PPendingMessage) + msize); | ||
2381 | pending->timeout = GNUNET_TIME_relative_to_absolute (PENDING_MESSAGE_TIMEOUT); | ||
2382 | pending->importance = 0; /* FIXME */ | ||
2383 | pgm = (struct PeerGetMessage *) &pending[1]; | ||
2384 | pending->msg = &pgm->header; | ||
2385 | pgm->header.size = htons (msize); | ||
2386 | pgm->header.type = htons (GNUNET_MESSAGE_TYPE_XDHT_P2P_GET); | ||
2387 | pgm->get_path_length = htonl (get_path_length); | ||
2388 | pgm->best_known_destination = best_known_dest; | ||
2389 | pgm->key = *key; | ||
2390 | pgm->intermediate_trail_id = intermediate_trail_id; | ||
2391 | pgm->hop_count = htonl (hop_count + 1); | ||
2392 | pgm->get_path_length = htonl (get_path_length); | ||
2393 | gp = (struct GNUNET_PeerIdentity *) &pgm[1]; | ||
2394 | memcpy (gp, get_path, | ||
2395 | sizeof (struct GNUNET_PeerIdentity) * get_path_length); | ||
2396 | GNUNET_CONTAINER_DLL_insert_tail (target_friend->head, target_friend->tail, pending); | ||
2397 | target_friend->pending_count++; | ||
2398 | process_friend_queue (target_friend); | ||
2399 | } | ||
2400 | |||
2401 | |||
2402 | /** | ||
2403 | * Handle the get request from the client file. If I am destination do | ||
2404 | * datacache put and return. Else find the target friend and forward message | ||
2405 | * to it. | ||
2406 | * @param key Key for the content | ||
2407 | * @param block_type Type of the block | ||
2408 | * @param options Routing options | ||
2409 | * @param desired_replication_level Desired replication count | ||
2410 | */ | ||
2411 | void | ||
2412 | GDS_NEIGHBOURS_handle_get(const struct GNUNET_HashCode *key, | ||
2413 | enum GNUNET_BLOCK_Type block_type, | ||
2414 | enum GNUNET_DHT_RouteOption options, | ||
2415 | uint32_t desired_replication_level) | ||
2416 | { | ||
2417 | struct Closest_Peer successor; | ||
2418 | struct GNUNET_PeerIdentity best_known_dest; | ||
2419 | struct GNUNET_HashCode intermediate_trail_id; | ||
2420 | uint64_t key_value; | ||
2421 | |||
2422 | memcpy (&key_value, key, sizeof (uint64_t)); | ||
2423 | key_value = GNUNET_ntohll (key_value); | ||
2424 | |||
2425 | successor = find_local_best_known_next_hop (key_value, | ||
2426 | GDS_FINGER_TYPE_NON_PREDECESSOR); | ||
2427 | |||
2428 | best_known_dest = successor.best_known_destination; | ||
2429 | intermediate_trail_id = successor.trail_id; | ||
2430 | |||
2431 | /* I am the destination. I have the data. */ | ||
2432 | if (0 == GNUNET_CRYPTO_cmp_peer_identity (&my_identity, | ||
2433 | &best_known_dest)) | ||
2434 | { | ||
2435 | GDS_DATACACHE_handle_get (key,block_type, NULL, 0, | ||
2436 | NULL, 0, 1, &my_identity, NULL,&my_identity); | ||
2437 | return; | ||
2438 | } | ||
2439 | |||
2440 | #if ENABLE_MALICIOUS | ||
2441 | struct GNUNET_PeerIdentity next_hop; | ||
2442 | if (0 != GNUNET_CRYPTO_cmp_peer_identity (&successor.best_known_destination, | ||
2443 | &successor.next_hop)) | ||
2444 | { | ||
2445 | struct FingerInfo *next_hop_finger; | ||
2446 | unsigned int i; | ||
2447 | |||
2448 | next_hop_finger = &finger_table[successor.finger_table_index]; | ||
2449 | for (i = 0; i < next_hop_finger->trails_count; i++) | ||
2450 | { | ||
2451 | if (GNUNET_YES == next_hop_finger->trail_list[i].is_present) | ||
2452 | { | ||
2453 | if(0 == next_hop_finger->trail_list[i].trail_length) | ||
2454 | { | ||
2455 | GDS_NEIGHBOURS_send_get (key, block_type, options, | ||
2456 | desired_replication_level, | ||
2457 | best_known_dest,intermediate_trail_id, | ||
2458 | &successor.next_hop, | ||
2459 | 0, 1, &my_identity); | ||
2460 | return; | ||
2461 | } | ||
2462 | next_hop = next_hop_finger->trail_list[i].trail_head->peer; | ||
2463 | GDS_NEIGHBOURS_send_get (key, block_type, options, desired_replication_level, | ||
2464 | best_known_dest, | ||
2465 | next_hop_finger->trail_list[i].trail_id, | ||
2466 | &next_hop, 0, 1, &my_identity); | ||
2467 | } | ||
2468 | } | ||
2469 | return; | ||
2470 | } | ||
2471 | #endif | ||
2472 | GDS_NEIGHBOURS_send_get (key, block_type, options, desired_replication_level, | ||
2473 | best_known_dest,intermediate_trail_id, &successor.next_hop, | ||
2474 | 0, 1, &my_identity); | ||
2475 | } | ||
2476 | |||
2477 | |||
2478 | /** | ||
2479 | * Send the get result to requesting client. | ||
2480 | * | ||
2481 | * @param key Key of the requested data. | ||
2482 | * @param type Block type | ||
2483 | * @param target_peer Next peer to forward the message to. | ||
2484 | * @param source_peer Peer which has the data for the key. | ||
2485 | * @param put_path_length Number of peers in @a put_path | ||
2486 | * @param put_path Path taken to put the data at its stored location. | ||
2487 | * @param get_path_length Number of peers in @a get_path | ||
2488 | * @param get_path Path taken to reach to the location of the key. | ||
2489 | * @param expiration When will this result expire? | ||
2490 | * @param data Payload to store | ||
2491 | * @param data_size Size of the @a data | ||
2492 | */ | ||
2493 | void | ||
2494 | GDS_NEIGHBOURS_send_get_result (const struct GNUNET_HashCode *key, | ||
2495 | enum GNUNET_BLOCK_Type type, | ||
2496 | const struct GNUNET_PeerIdentity *target_peer, | ||
2497 | const struct GNUNET_PeerIdentity *source_peer, | ||
2498 | unsigned int put_path_length, | ||
2499 | const struct GNUNET_PeerIdentity *put_path, | ||
2500 | unsigned int get_path_length, | ||
2501 | const struct GNUNET_PeerIdentity *get_path, | ||
2502 | struct GNUNET_TIME_Absolute expiration, | ||
2503 | const void *data, size_t data_size) | ||
2504 | { | ||
2505 | struct PeerGetResultMessage *get_result; | ||
2506 | struct GNUNET_PeerIdentity *paths; | ||
2507 | struct P2PPendingMessage *pending; | ||
2508 | struct FriendInfo *target_friend; | ||
2509 | int current_path_index; | ||
2510 | size_t msize; | ||
2511 | |||
2512 | msize = (put_path_length + get_path_length )* sizeof (struct GNUNET_PeerIdentity) + | ||
2513 | data_size + | ||
2514 | sizeof (struct PeerGetResultMessage); | ||
2515 | |||
2516 | if (msize >= GNUNET_CONSTANTS_MAX_ENCRYPTED_MESSAGE_SIZE) | ||
2517 | { | ||
2518 | put_path_length = 0; | ||
2519 | msize = msize - put_path_length * sizeof (struct GNUNET_PeerIdentity); | ||
2520 | } | ||
2521 | |||
2522 | if (msize >= GNUNET_CONSTANTS_MAX_ENCRYPTED_MESSAGE_SIZE) | ||
2523 | { | ||
2524 | GNUNET_break(0); | ||
2525 | return; | ||
2526 | } | ||
2527 | current_path_index = 0; | ||
2528 | if(get_path_length > 0) | ||
2529 | { | ||
2530 | current_path_index = search_my_index(get_path, get_path_length); | ||
2531 | if (-1 == current_path_index) | ||
2532 | { | ||
2533 | GNUNET_break (0); | ||
2534 | return; | ||
2535 | } | ||
2536 | if ((get_path_length + 1) == current_path_index) | ||
2537 | { | ||
2538 | DEBUG ("Peer found twice in get path. Not allowed \n"); | ||
2539 | GNUNET_break (0); | ||
2540 | return; | ||
2541 | } | ||
2542 | } | ||
2543 | if (0 == current_path_index) | ||
2544 | { | ||
2545 | DEBUG ("GET_RESULT TO CLIENT KEY = %s, Peer = %s",GNUNET_h2s(key),GNUNET_i2s(&my_identity)); | ||
2546 | GDS_CLIENTS_handle_reply (expiration, key, get_path_length, | ||
2547 | get_path, put_path_length, | ||
2548 | put_path, type, data_size, data); | ||
2549 | return; | ||
2550 | } | ||
2551 | |||
2552 | pending = GNUNET_malloc (sizeof (struct P2PPendingMessage) + msize); | ||
2553 | pending->timeout = GNUNET_TIME_relative_to_absolute (PENDING_MESSAGE_TIMEOUT); | ||
2554 | pending->importance = 0; | ||
2555 | get_result = (struct PeerGetResultMessage *)&pending[1]; | ||
2556 | pending->msg = &get_result->header; | ||
2557 | get_result->header.size = htons (msize); | ||
2558 | get_result->header.type = htons (GNUNET_MESSAGE_TYPE_XDHT_P2P_GET_RESULT); | ||
2559 | get_result->key = *key; | ||
2560 | get_result->querying_peer = *source_peer; | ||
2561 | get_result->expiration_time = expiration; | ||
2562 | get_result->get_path_length = htonl (get_path_length); | ||
2563 | get_result->put_path_length = htonl (put_path_length); | ||
2564 | paths = (struct GNUNET_PeerIdentity *)&get_result[1]; | ||
2565 | memcpy (paths, put_path, | ||
2566 | put_path_length * sizeof (struct GNUNET_PeerIdentity)); | ||
2567 | memcpy (&paths[put_path_length], get_path, | ||
2568 | get_path_length * sizeof (struct GNUNET_PeerIdentity)); | ||
2569 | memcpy (&paths[put_path_length + get_path_length], data, data_size); | ||
2570 | |||
2571 | GNUNET_assert (NULL != | ||
2572 | (target_friend = | ||
2573 | GNUNET_CONTAINER_multipeermap_get (friend_peermap, | ||
2574 | &get_path[current_path_index - 1]))); | ||
2575 | GNUNET_CONTAINER_DLL_insert_tail (target_friend->head, target_friend->tail, pending); | ||
2576 | target_friend->pending_count++; | ||
2577 | process_friend_queue (target_friend); | ||
2578 | } | ||
2579 | |||
2580 | |||
2581 | /** | ||
2582 | * Randomly choose one of your friends (which is not congested and have not crossed | ||
2583 | * trail threshold) from the friend_peermap | ||
2584 | * @return Friend Randomly chosen friend. | ||
2585 | * NULL in case friend peermap is empty, or all the friends are either | ||
2586 | * congested or have crossed trail threshold. | ||
2587 | */ | ||
2588 | static struct FriendInfo * | ||
2589 | select_random_friend () | ||
2590 | { | ||
2591 | unsigned int current_size; | ||
2592 | uint32_t index; | ||
2593 | unsigned int j = 0; | ||
2594 | struct GNUNET_CONTAINER_MultiPeerMapIterator *iter; | ||
2595 | struct GNUNET_PeerIdentity key_ret; | ||
2596 | struct FriendInfo *friend; | ||
2597 | |||
2598 | current_size = GNUNET_CONTAINER_multipeermap_size (friend_peermap); | ||
2599 | |||
2600 | /* No friends.*/ | ||
2601 | if (0 == current_size) | ||
2602 | return NULL; | ||
2603 | |||
2604 | index = GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK, current_size); | ||
2605 | iter = GNUNET_CONTAINER_multipeermap_iterator_create (friend_peermap); | ||
2606 | |||
2607 | /* Iterate till you don't reach to index. */ | ||
2608 | for (j = 0; j < index ; j++) | ||
2609 | GNUNET_assert (GNUNET_YES == | ||
2610 | GNUNET_CONTAINER_multipeermap_iterator_next (iter, NULL, NULL)); | ||
2611 | |||
2612 | do | ||
2613 | { | ||
2614 | /* Reset the index in friend peermap to 0 as we reached to the end. */ | ||
2615 | if (j == current_size) | ||
2616 | { | ||
2617 | j = 0; | ||
2618 | GNUNET_CONTAINER_multipeermap_iterator_destroy (iter); | ||
2619 | iter = GNUNET_CONTAINER_multipeermap_iterator_create (friend_peermap); | ||
2620 | |||
2621 | } | ||
2622 | |||
2623 | /* Get the friend stored at the index, j*/ | ||
2624 | GNUNET_assert (GNUNET_YES == | ||
2625 | GNUNET_CONTAINER_multipeermap_iterator_next (iter, | ||
2626 | &key_ret, | ||
2627 | (const void **)&friend)); | ||
2628 | |||
2629 | /* This friend is not congested and has not crossed trail threshold. */ | ||
2630 | if ((friend->trails_count < TRAILS_THROUGH_FRIEND_THRESHOLD) && | ||
2631 | (0 == GNUNET_TIME_absolute_get_remaining (friend->congestion_timestamp).rel_value_us)) | ||
2632 | { | ||
2633 | break; | ||
2634 | } | ||
2635 | friend = NULL; | ||
2636 | j++; | ||
2637 | } while (j != index); | ||
2638 | |||
2639 | GNUNET_CONTAINER_multipeermap_iterator_destroy (iter); | ||
2640 | return friend; | ||
2641 | } | ||
2642 | |||
2643 | |||
2644 | /** | ||
2645 | * Compute 64 bit value of finger_identity corresponding to a finger index using | ||
2646 | * chord formula. | ||
2647 | * For all fingers, n.finger[i] = n + pow (2,i), | ||
2648 | * For predecessor, n.finger[PREDECESSOR_FINGER_ID] = n - 1, where | ||
2649 | * n = my_identity, i = finger_index, n.finger[i] = 64 bit finger value | ||
2650 | * @param finger_index Index corresponding to which we calculate 64 bit value. | ||
2651 | * @return 64 bit value. | ||
2652 | */ | ||
2653 | static uint64_t | ||
2654 | compute_finger_identity_value (unsigned int finger_index) | ||
2655 | { | ||
2656 | uint64_t my_id64; | ||
2657 | |||
2658 | memcpy (&my_id64, &my_identity, sizeof (uint64_t)); | ||
2659 | my_id64 = GNUNET_ntohll (my_id64); | ||
2660 | |||
2661 | /* Are we looking for immediate predecessor? */ | ||
2662 | if (PREDECESSOR_FINGER_ID == finger_index) | ||
2663 | return (my_id64 - 1); | ||
2664 | else | ||
2665 | { | ||
2666 | uint64_t add = (uint64_t)1 << finger_index; | ||
2667 | return (my_id64 + add); | ||
2668 | } | ||
2669 | } | ||
2670 | |||
2671 | |||
2672 | /* | ||
2673 | * Choose a random friend. Calculate the next finger identity to search,from | ||
2674 | * current_search_finger_index. Start looking for the trail to reach to | ||
2675 | * finger identity through this random friend. | ||
2676 | * | ||
2677 | * @param cls closure for this task | ||
2678 | * @param tc the context under which the task is running | ||
2679 | */ | ||
2680 | static void | ||
2681 | send_find_finger_trail_message (void *cls, | ||
2682 | const struct GNUNET_SCHEDULER_TaskContext *tc) | ||
2683 | { | ||
2684 | struct FriendInfo *target_friend; | ||
2685 | struct GNUNET_HashCode trail_id; | ||
2686 | struct GNUNET_HashCode intermediate_trail_id; | ||
2687 | unsigned int is_predecessor = 0; | ||
2688 | uint64_t finger_id_value; | ||
2689 | |||
2690 | /* Schedule another send_find_finger_trail_message task. After one round of | ||
2691 | * finger search, this time is exponentially backoff. */ | ||
2692 | find_finger_trail_task_next_send_time.rel_value_us = | ||
2693 | find_finger_trail_task_next_send_time.rel_value_us + | ||
2694 | GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_WEAK, | ||
2695 | DHT_FIND_FINGER_TRAIL_INTERVAL.rel_value_us); | ||
2696 | find_finger_trail_task = | ||
2697 | GNUNET_SCHEDULER_add_delayed (find_finger_trail_task_next_send_time, | ||
2698 | &send_find_finger_trail_message, | ||
2699 | NULL); | ||
2700 | |||
2701 | /* No space in my routing table. (Source and destination peers also store entries | ||
2702 | * in their routing table). */ | ||
2703 | if (GNUNET_YES == GDS_ROUTING_threshold_reached()) | ||
2704 | return; | ||
2705 | |||
2706 | target_friend = select_random_friend (); | ||
2707 | if (NULL == target_friend) | ||
2708 | { | ||
2709 | return; | ||
2710 | } | ||
2711 | |||
2712 | finger_id_value = compute_finger_identity_value (current_search_finger_index); | ||
2713 | if (PREDECESSOR_FINGER_ID == current_search_finger_index) | ||
2714 | is_predecessor = 1; | ||
2715 | |||
2716 | /* Generate a unique trail id for trail we are trying to setup. */ | ||
2717 | GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_STRONG, | ||
2718 | &trail_id, sizeof (trail_id)); | ||
2719 | memset(&intermediate_trail_id, 0, sizeof (struct GNUNET_HashCode)); | ||
2720 | GDS_NEIGHBOURS_send_trail_setup (my_identity, finger_id_value, | ||
2721 | target_friend->id, target_friend, 0, NULL, | ||
2722 | is_predecessor, trail_id, | ||
2723 | intermediate_trail_id); | ||
2724 | } | ||
2725 | |||
2726 | |||
2727 | /** | ||
2728 | * In case there are already maximum number of possible trails to reach to a | ||
2729 | * finger, then check if the new trail's length is lesser than any of the | ||
2730 | * existing trails. | ||
2731 | * If yes then replace that old trail by new trail. | ||
2732 | * | ||
2733 | * Note: Here we are taking length as a parameter to choose the best possible | ||
2734 | * trail, but there could be other parameters also like: | ||
2735 | * 1. duration of existence of a trail - older the better. | ||
2736 | * 2. if the new trail is completely disjoint than the | ||
2737 | * other trails, then may be choosing it is better. | ||
2738 | * | ||
2739 | * @param finger Finger | ||
2740 | * @param new_finger_trail List of peers to reach from me to @a finger, NOT | ||
2741 | * including the endpoints. | ||
2742 | * @param new_finger_trail_length Total number of peers in @a new_finger_trail | ||
2743 | * @param new_finger_trail_id Unique identifier of @a new_finger_trail. | ||
2744 | */ | ||
2745 | static void | ||
2746 | select_and_replace_trail (struct FingerInfo *finger, | ||
2747 | const struct GNUNET_PeerIdentity *new_trail, | ||
2748 | unsigned int new_trail_length, | ||
2749 | struct GNUNET_HashCode new_trail_id) | ||
2750 | { | ||
2751 | struct Trail *current_trail; | ||
2752 | unsigned int largest_trail_length; | ||
2753 | unsigned int largest_trail_index; | ||
2754 | struct Trail_Element *trail_element; | ||
2755 | struct GNUNET_PeerIdentity *next_hop; | ||
2756 | unsigned int i; | ||
2757 | |||
2758 | largest_trail_length = new_trail_length; | ||
2759 | largest_trail_index = MAXIMUM_TRAILS_PER_FINGER + 1; | ||
2760 | |||
2761 | GNUNET_assert (MAXIMUM_TRAILS_PER_FINGER == finger->trails_count); | ||
2762 | |||
2763 | for (i = 0; i < finger->trails_count; i++) | ||
2764 | { | ||
2765 | current_trail = &finger->trail_list[i]; | ||
2766 | GNUNET_assert (GNUNET_YES == current_trail->is_present); | ||
2767 | if (current_trail->trail_length > largest_trail_length) | ||
2768 | { | ||
2769 | largest_trail_length = current_trail->trail_length; | ||
2770 | largest_trail_index = i; | ||
2771 | } | ||
2772 | } | ||
2773 | |||
2774 | /* New trail is not better than existing ones. Send trail teardown. */ | ||
2775 | if (largest_trail_index == (MAXIMUM_TRAILS_PER_FINGER + 1)) | ||
2776 | { | ||
2777 | next_hop = GDS_ROUTING_get_next_hop (new_trail_id, GDS_ROUTING_SRC_TO_DEST); | ||
2778 | GDS_ROUTING_remove_trail (new_trail_id); | ||
2779 | GDS_NEIGHBOURS_send_trail_teardown (&new_trail_id, | ||
2780 | GDS_ROUTING_SRC_TO_DEST, | ||
2781 | next_hop); | ||
2782 | return; | ||
2783 | } | ||
2784 | |||
2785 | /* Send trail teardown message across the replaced trail. */ | ||
2786 | struct Trail *replace_trail = &finger->trail_list[largest_trail_index]; | ||
2787 | next_hop = GDS_ROUTING_get_next_hop (replace_trail->trail_id, GDS_ROUTING_SRC_TO_DEST); | ||
2788 | GNUNET_assert (GNUNET_YES == GDS_ROUTING_remove_trail (replace_trail->trail_id)); | ||
2789 | GDS_NEIGHBOURS_send_trail_teardown (&replace_trail->trail_id, | ||
2790 | GDS_ROUTING_SRC_TO_DEST, | ||
2791 | next_hop); | ||
2792 | |||
2793 | /* Free the trail. */ | ||
2794 | while (NULL != (trail_element = replace_trail->trail_head)) | ||
2795 | { | ||
2796 | GNUNET_CONTAINER_DLL_remove (replace_trail->trail_head, | ||
2797 | replace_trail->trail_tail, trail_element); | ||
2798 | GNUNET_free_non_null (trail_element); | ||
2799 | } | ||
2800 | |||
2801 | /* Add new trial at that location. */ | ||
2802 | replace_trail->is_present = GNUNET_YES; | ||
2803 | replace_trail->trail_length = new_trail_length; | ||
2804 | replace_trail->trail_id = new_trail_id; | ||
2805 | |||
2806 | for (i = 0; i < new_trail_length; i++) | ||
2807 | { | ||
2808 | struct Trail_Element *element = GNUNET_new (struct Trail_Element); | ||
2809 | element->peer = new_trail[i]; | ||
2810 | |||
2811 | GNUNET_CONTAINER_DLL_insert_tail (replace_trail->trail_head, | ||
2812 | replace_trail->trail_tail, | ||
2813 | element); | ||
2814 | } | ||
2815 | /* FIXME: URGENT Are we adding the trail back to the list. */ | ||
2816 | } | ||
2817 | |||
2818 | |||
2819 | /** | ||
2820 | * Check if the new trail to reach to finger is unique or do we already have | ||
2821 | * such a trail present for finger. | ||
2822 | * @param existing_finger Finger identity | ||
2823 | * @param new_trail New trail to reach @a existing_finger | ||
2824 | * @param trail_length Total number of peers in new_trail. | ||
2825 | * @return #GNUNET_YES if the new trail is unique | ||
2826 | * #GNUNET_NO if same trail is already present. | ||
2827 | */ | ||
2828 | static int | ||
2829 | is_new_trail_unique (struct FingerInfo *existing_finger, | ||
2830 | const struct GNUNET_PeerIdentity *new_trail, | ||
2831 | unsigned int trail_length) | ||
2832 | { | ||
2833 | struct Trail *current_trail; | ||
2834 | struct Trail_Element *trail_element; | ||
2835 | int i; | ||
2836 | int j; | ||
2837 | |||
2838 | GNUNET_assert (existing_finger->trails_count > 0); | ||
2839 | |||
2840 | /* Iterate over list of trails. */ | ||
2841 | for (i = 0; i < existing_finger->trails_count; i++) | ||
2842 | { | ||
2843 | current_trail = &(existing_finger->trail_list[i]); | ||
2844 | if(GNUNET_NO == current_trail->is_present) | ||
2845 | continue; | ||
2846 | |||
2847 | /* New trail and existing trail length are not same. */ | ||
2848 | if (current_trail->trail_length != trail_length) | ||
2849 | { | ||
2850 | return GNUNET_YES; | ||
2851 | } | ||
2852 | |||
2853 | trail_element = current_trail->trail_head; | ||
2854 | for (j = 0; j < current_trail->trail_length; j++) | ||
2855 | { | ||
2856 | if (0 != GNUNET_CRYPTO_cmp_peer_identity (&new_trail[j], | ||
2857 | &trail_element->peer)) | ||
2858 | { | ||
2859 | return GNUNET_YES; | ||
2860 | } | ||
2861 | trail_element = trail_element->next; | ||
2862 | } | ||
2863 | } | ||
2864 | return GNUNET_NO; | ||
2865 | } | ||
2866 | |||
2867 | /** | ||
2868 | * FIXME; In case of multiple trails, we may have a case where a trail from in | ||
2869 | * between has been removed, then we should try to find a free slot , not simply | ||
2870 | * add a trail at then end of the list. | ||
2871 | * Add a new trail at a free slot in trail array of existing finger. | ||
2872 | * @param existing_finger Finger | ||
2873 | * @param new_finger_trail New trail from me to finger, NOT including endpoints | ||
2874 | * @param new_finger_trail_length Total number of peers in @a new_finger_trail | ||
2875 | * @param new_finger_trail_id Unique identifier of the trail. | ||
2876 | */ | ||
2877 | static void | ||
2878 | add_new_trail (struct FingerInfo *existing_finger, | ||
2879 | const struct GNUNET_PeerIdentity *new_trail, | ||
2880 | unsigned int new_trail_length, | ||
2881 | struct GNUNET_HashCode new_trail_id) | ||
2882 | { | ||
2883 | struct FriendInfo *friend; | ||
2884 | struct Trail *trail; | ||
2885 | unsigned int i; | ||
2886 | int free_slot = -1; | ||
2887 | |||
2888 | if (GNUNET_NO == is_new_trail_unique (existing_finger, new_trail, | ||
2889 | new_trail_length)) | ||
2890 | return; | ||
2891 | |||
2892 | for (i = 0; i < existing_finger->trails_count; i++) | ||
2893 | { | ||
2894 | if (GNUNET_NO == existing_finger->trail_list[i].is_present) | ||
2895 | { | ||
2896 | free_slot = i; | ||
2897 | break; | ||
2898 | } | ||
2899 | } | ||
2900 | |||
2901 | if (-1 == free_slot) | ||
2902 | free_slot = i; | ||
2903 | |||
2904 | trail = &existing_finger->trail_list[free_slot]; | ||
2905 | GNUNET_assert (GNUNET_NO == trail->is_present); | ||
2906 | trail->trail_id = new_trail_id; | ||
2907 | trail->trail_length = new_trail_length; | ||
2908 | existing_finger->trails_count++; | ||
2909 | trail->is_present = GNUNET_YES; | ||
2910 | if (0 == new_trail_length) | ||
2911 | { | ||
2912 | friend = GNUNET_CONTAINER_multipeermap_get (friend_peermap, | ||
2913 | &existing_finger->finger_identity); | ||
2914 | } | ||
2915 | else | ||
2916 | { | ||
2917 | friend = GNUNET_CONTAINER_multipeermap_get (friend_peermap, | ||
2918 | &new_trail[0]); | ||
2919 | } | ||
2920 | GNUNET_assert (NULL != friend); | ||
2921 | friend->trails_count++; | ||
2922 | for (i = 0; i < new_trail_length; i++) | ||
2923 | { | ||
2924 | struct Trail_Element *element; | ||
2925 | |||
2926 | element = GNUNET_new (struct Trail_Element); | ||
2927 | element->peer = new_trail[i]; | ||
2928 | GNUNET_CONTAINER_DLL_insert_tail (trail->trail_head, | ||
2929 | trail->trail_tail, | ||
2930 | element); | ||
2931 | } | ||
2932 | |||
2933 | existing_finger->trail_list[free_slot].trail_head = trail->trail_head; | ||
2934 | existing_finger->trail_list[free_slot].trail_tail = trail->trail_tail; | ||
2935 | existing_finger->trail_list[free_slot].trail_length = new_trail_length; | ||
2936 | existing_finger->trail_list[free_slot].trail_id = new_trail_id; | ||
2937 | existing_finger->trail_list[free_slot].is_present = GNUNET_YES; | ||
2938 | } | ||
2939 | |||
2940 | |||
2941 | #if 0 | ||
2942 | /** | ||
2943 | * FIXME; In case of multiple trails, we may have a case where a trail from in | ||
2944 | * between has been removed, then we should try to find a free slot , not simply | ||
2945 | * add a trail at then end of the list. | ||
2946 | * Add a new trail at a free slot in trail array of existing finger. | ||
2947 | * @param existing_finger Finger | ||
2948 | * @param new_finger_trail New trail from me to finger, NOT including endpoints | ||
2949 | * @param new_finger_trail_length Total number of peers in @a new_finger_trail | ||
2950 | * @param new_finger_trail_id Unique identifier of the trail. | ||
2951 | */ | ||
2952 | static void | ||
2953 | add_new_trail (struct FingerInfo *existing_finger, | ||
2954 | const struct GNUNET_PeerIdentity *new_trail, | ||
2955 | unsigned int new_trail_length, | ||
2956 | struct GNUNET_HashCode new_trail_id) | ||
2957 | { | ||
2958 | struct Trail *trail; | ||
2959 | struct FriendInfo *first_friend; | ||
2960 | int i; | ||
2961 | int index; | ||
2962 | |||
2963 | if (GNUNET_NO == is_new_trail_unique (existing_finger, new_trail, | ||
2964 | new_trail_length)) | ||
2965 | return; | ||
2966 | |||
2967 | index = existing_finger->trails_count; | ||
2968 | trail = &existing_finger->trail_list[index]; | ||
2969 | GNUNET_assert (GNUNET_NO == trail->is_present); | ||
2970 | trail->trail_id = new_trail_id; | ||
2971 | trail->trail_length = new_trail_length; | ||
2972 | existing_finger->trails_count++; | ||
2973 | trail->is_present = GNUNET_YES; | ||
2974 | |||
2975 | GNUNET_assert (NULL == (GNUNET_CONTAINER_multipeermap_get (friend_peermap, | ||
2976 | &existing_finger->finger_identity))); | ||
2977 | /* If finger is a friend then we never call this function. */ | ||
2978 | GNUNET_assert (new_trail_length > 0); | ||
2979 | |||
2980 | first_friend = GNUNET_CONTAINER_multipeermap_get (friend_peermap, | ||
2981 | &new_trail[0]); | ||
2982 | first_friend->trails_count++; | ||
2983 | |||
2984 | for (i = 0; i < new_trail_length; i++) | ||
2985 | { | ||
2986 | struct Trail_Element *element; | ||
2987 | |||
2988 | element = GNUNET_new (struct Trail_Element); | ||
2989 | element->peer = new_trail[i]; | ||
2990 | GNUNET_CONTAINER_DLL_insert_tail (trail->trail_head, | ||
2991 | trail->trail_tail, | ||
2992 | element); | ||
2993 | } | ||
2994 | /* Do we need to add trail head and trail tail in the trail list itearator.*/ | ||
2995 | existing_finger->trail_list[index].trail_head = trail->trail_head; | ||
2996 | existing_finger->trail_list[index].trail_tail = trail->trail_tail; | ||
2997 | existing_finger->trail_list[index].trail_length = new_trail_length; | ||
2998 | existing_finger->trail_list[index].trail_id = new_trail_id; | ||
2999 | existing_finger->trail_list[index].is_present = GNUNET_YES; | ||
3000 | } | ||
3001 | #endif | ||
3002 | |||
3003 | /** | ||
3004 | * Get the next hop to send trail teardown message from routing table and | ||
3005 | * then delete the entry from routing table. Send trail teardown message for a | ||
3006 | * specific trail of a finger. | ||
3007 | * @param finger Finger whose trail is to be removed. | ||
3008 | * @param trail List of peers in trail from me to a finger, NOT including | ||
3009 | * endpoints. | ||
3010 | */ | ||
3011 | static void | ||
3012 | send_trail_teardown (struct FingerInfo *finger, | ||
3013 | struct Trail *trail) | ||
3014 | { | ||
3015 | struct FriendInfo *friend; | ||
3016 | struct GNUNET_PeerIdentity *next_hop; | ||
3017 | |||
3018 | next_hop = GDS_ROUTING_get_next_hop (trail->trail_id, | ||
3019 | GDS_ROUTING_SRC_TO_DEST); | ||
3020 | if (NULL == next_hop) | ||
3021 | { | ||
3022 | // DEBUG(" NO ENTRY FOUND IN %s ROUTING TABLE for trail id %s, line=%d,traillength = %d", | ||
3023 | // GNUNET_i2s(&my_identity), GNUNET_h2s(&trail->trail_id), __LINE__,trail->trail_length); | ||
3024 | return; | ||
3025 | } | ||
3026 | GNUNET_assert (0 != GNUNET_CRYPTO_cmp_peer_identity (&finger->finger_identity, | ||
3027 | &my_identity)); | ||
3028 | |||
3029 | GNUNET_assert(GNUNET_YES == trail->is_present); | ||
3030 | if (trail->trail_length > 0) | ||
3031 | { | ||
3032 | friend = GNUNET_CONTAINER_multipeermap_get (friend_peermap, | ||
3033 | &trail->trail_head->peer); | ||
3034 | } | ||
3035 | else | ||
3036 | { | ||
3037 | friend = GNUNET_CONTAINER_multipeermap_get (friend_peermap, | ||
3038 | &finger->finger_identity); | ||
3039 | } | ||
3040 | |||
3041 | if(NULL == friend) | ||
3042 | { | ||
3043 | DEBUG ("\n LINE NO: = %d, Friend not found for trail id %s of peer %s trail length = %d", | ||
3044 | __LINE__,GNUNET_h2s(&trail->trail_id), GNUNET_i2s(&my_identity),trail->trail_length); | ||
3045 | return; | ||
3046 | } | ||
3047 | if (0 != GNUNET_CRYPTO_cmp_peer_identity (next_hop, &friend->id) | ||
3048 | && (0 == trail->trail_length)) | ||
3049 | { | ||
3050 | DEBUG ("\n LINE NO: = %d, Friend not found for trail id %s of peer %s trail length = %d", | ||
3051 | __LINE__,GNUNET_h2s(&trail->trail_id), GNUNET_i2s(&my_identity),trail->trail_length); | ||
3052 | return; | ||
3053 | } | ||
3054 | GNUNET_assert (GNUNET_YES == GDS_ROUTING_remove_trail (trail->trail_id)); | ||
3055 | friend->trails_count--; | ||
3056 | GDS_NEIGHBOURS_send_trail_teardown (&trail->trail_id, | ||
3057 | GDS_ROUTING_SRC_TO_DEST, | ||
3058 | &friend->id); | ||
3059 | } | ||
3060 | |||
3061 | |||
3062 | /** | ||
3063 | * Send trail teardown message across all the trails to reach to finger. | ||
3064 | * @param finger Finger whose all the trail should be freed. | ||
3065 | */ | ||
3066 | static void | ||
3067 | send_all_finger_trails_teardown (struct FingerInfo *finger) | ||
3068 | { | ||
3069 | unsigned int i; | ||
3070 | |||
3071 | for (i = 0; i < finger->trails_count; i++) | ||
3072 | { | ||
3073 | struct Trail *trail; | ||
3074 | |||
3075 | trail = &finger->trail_list[i]; | ||
3076 | if (GNUNET_YES == trail->is_present) | ||
3077 | { | ||
3078 | send_trail_teardown (finger, trail); | ||
3079 | trail->is_present = GNUNET_NO; | ||
3080 | } | ||
3081 | } | ||
3082 | } | ||
3083 | |||
3084 | |||
3085 | /** | ||
3086 | * Free a specific trail | ||
3087 | * @param trail List of peers to be freed. | ||
3088 | */ | ||
3089 | static void | ||
3090 | free_trail (struct Trail *trail) | ||
3091 | { | ||
3092 | struct Trail_Element *trail_element; | ||
3093 | |||
3094 | while (NULL != (trail_element = trail->trail_head)) | ||
3095 | { | ||
3096 | GNUNET_CONTAINER_DLL_remove (trail->trail_head, | ||
3097 | trail->trail_tail, | ||
3098 | trail_element); | ||
3099 | GNUNET_free_non_null (trail_element); | ||
3100 | } | ||
3101 | trail->trail_head = NULL; | ||
3102 | trail->trail_tail = NULL; | ||
3103 | } | ||
3104 | |||
3105 | |||
3106 | /** | ||
3107 | * Free finger and its trail. | ||
3108 | * @param finger Finger to be freed. | ||
3109 | * @param finger_table_index Index at which finger is stored. | ||
3110 | */ | ||
3111 | static void | ||
3112 | free_finger (struct FingerInfo *finger, unsigned int finger_table_index) | ||
3113 | { | ||
3114 | struct Trail *trail; | ||
3115 | unsigned int i; | ||
3116 | for (i = 0; i < finger->trails_count; i++) | ||
3117 | { | ||
3118 | trail = &finger->trail_list[i]; | ||
3119 | if (GNUNET_NO == trail->is_present) | ||
3120 | continue; | ||
3121 | |||
3122 | if (trail->trail_length > 0) | ||
3123 | free_trail (trail); | ||
3124 | trail->is_present = GNUNET_NO; | ||
3125 | } | ||
3126 | |||
3127 | finger->is_present = GNUNET_NO; | ||
3128 | memset ((void *)&finger_table[finger_table_index], 0, sizeof (finger_table[finger_table_index])); | ||
3129 | } | ||
3130 | |||
3131 | |||
3132 | /** | ||
3133 | * Add a new entry in finger table at finger_table_index. | ||
3134 | * In case I am my own finger, then we don't have a trail. In case of a friend, | ||
3135 | * we have a trail with unique id and '0' trail length. | ||
3136 | * In case a finger is a friend, then increment the trails count of the friend. | ||
3137 | * @param finger_identity Peer Identity of new finger | ||
3138 | * @param finger_trail Trail to reach from me to finger (excluding both end points). | ||
3139 | * @param finger_trail_length Total number of peers in @a finger_trail. | ||
3140 | * @param trail_id Unique identifier of the trail. | ||
3141 | * @param finger_table_index Index in finger table. | ||
3142 | */ | ||
3143 | static void | ||
3144 | add_new_finger (struct GNUNET_PeerIdentity finger_identity, | ||
3145 | const struct GNUNET_PeerIdentity *finger_trail, | ||
3146 | unsigned int finger_trail_length, | ||
3147 | struct GNUNET_HashCode trail_id, | ||
3148 | unsigned int finger_table_index) | ||
3149 | { | ||
3150 | struct FingerInfo *new_entry; | ||
3151 | struct FriendInfo *first_trail_hop; | ||
3152 | struct Trail *trail; | ||
3153 | unsigned int i; | ||
3154 | |||
3155 | new_entry = GNUNET_new (struct FingerInfo); | ||
3156 | new_entry->finger_identity = finger_identity; | ||
3157 | new_entry->finger_table_index = finger_table_index; | ||
3158 | new_entry->is_present = GNUNET_YES; | ||
3159 | |||
3160 | /* If the new entry is my own identity. */ | ||
3161 | if (0 == GNUNET_CRYPTO_cmp_peer_identity (&my_identity, | ||
3162 | &finger_identity)) | ||
3163 | { | ||
3164 | new_entry->trails_count = 0; | ||
3165 | finger_table[finger_table_index] = *new_entry; | ||
3166 | GNUNET_free (new_entry); | ||
3167 | return; | ||
3168 | } | ||
3169 | |||
3170 | /* Finger is a friend. */ | ||
3171 | if (0 == finger_trail_length) | ||
3172 | { | ||
3173 | new_entry->trail_list[0].trail_id = trail_id; | ||
3174 | new_entry->trails_count = 1; | ||
3175 | new_entry->trail_list[0].is_present = GNUNET_YES; | ||
3176 | new_entry->trail_list[0].trail_length = 0; | ||
3177 | new_entry->trail_list[0].trail_head = NULL; | ||
3178 | new_entry->trail_list[0].trail_tail = NULL; | ||
3179 | finger_table[finger_table_index] = *new_entry; | ||
3180 | GNUNET_assert (NULL != | ||
3181 | (first_trail_hop = | ||
3182 | GNUNET_CONTAINER_multipeermap_get (friend_peermap, | ||
3183 | &finger_identity))); | ||
3184 | |||
3185 | first_trail_hop->trails_count++; | ||
3186 | GNUNET_free (new_entry); | ||
3187 | return; | ||
3188 | } | ||
3189 | |||
3190 | GNUNET_assert (NULL != | ||
3191 | (first_trail_hop = | ||
3192 | GNUNET_CONTAINER_multipeermap_get (friend_peermap, | ||
3193 | &finger_trail[0]))); | ||
3194 | new_entry->trails_count = 1; | ||
3195 | first_trail_hop->trails_count++; | ||
3196 | /* Copy the finger trail into trail. */ | ||
3197 | trail = &new_entry->trail_list[0]; | ||
3198 | for(i = 0; i < finger_trail_length; i++) | ||
3199 | { | ||
3200 | struct Trail_Element *element = GNUNET_new (struct Trail_Element); | ||
3201 | |||
3202 | element->next = NULL; | ||
3203 | element->prev = NULL; | ||
3204 | element->peer = finger_trail[i]; | ||
3205 | GNUNET_CONTAINER_DLL_insert_tail (trail->trail_head, | ||
3206 | trail->trail_tail, | ||
3207 | element); | ||
3208 | } | ||
3209 | |||
3210 | /* Add trail to trail list. */ | ||
3211 | trail->trail_length = finger_trail_length; | ||
3212 | trail->trail_id = trail_id; | ||
3213 | trail->is_present = GNUNET_YES; | ||
3214 | finger_table[finger_table_index] = *new_entry; | ||
3215 | GNUNET_free (new_entry); | ||
3216 | } | ||
3217 | |||
3218 | |||
3219 | /** | ||
3220 | * Periodic task to verify current successor. There can be multiple trails to reach | ||
3221 | * to successor, choose the shortest one and send verify successor message | ||
3222 | * across that trail. | ||
3223 | * @param cls closure for this task | ||
3224 | * @param tc the context under which the task is running | ||
3225 | */ | ||
3226 | static void | ||
3227 | send_verify_successor_message (void *cls, | ||
3228 | const struct GNUNET_SCHEDULER_TaskContext *tc) | ||
3229 | { | ||
3230 | struct FriendInfo *target_friend; | ||
3231 | struct GNUNET_HashCode trail_id; | ||
3232 | struct Trail *trail; | ||
3233 | struct Trail_Element *element; | ||
3234 | unsigned int trail_length; | ||
3235 | unsigned int i = 0; | ||
3236 | struct FingerInfo *successor; | ||
3237 | |||
3238 | successor = &finger_table[0]; | ||
3239 | |||
3240 | /* This task will be scheduled when the result for Verify Successor is received. */ | ||
3241 | send_verify_successor_task = NULL; | ||
3242 | |||
3243 | /* When verify successor is being called for first time *for current context* | ||
3244 | * cls will be NULL. If send_verify_successor_retry_task is not NO_TASK, we | ||
3245 | * must cancel the retry task scheduled for verify_successor of previous | ||
3246 | * context. | ||
3247 | */ | ||
3248 | if (NULL == cls) | ||
3249 | { | ||
3250 | /* FIXME: Here we are scheduling a new verify successor task, as we | ||
3251 | got a new successor. But a send verify successor task may be in progress. | ||
3252 | 1. We need to be sure that this is indeed a new successor. As this function | ||
3253 | is called even if we add a new trail to reach t old successor. | ||
3254 | 2. Assuming the new successor is different, then verify successor message | ||
3255 | * to old successor may be following stages. | ||
3256 | * --> Waiting for verify successor result. Don't wait anymore. there is | ||
3257 | * no trail to reach from old successor to me, hence, routing | ||
3258 | * lookup will fail. | ||
3259 | * --> Waiting for notify confirmation. again don't wait for it. notify | ||
3260 | * confirmation will not succeded. | ||
3261 | */ | ||
3262 | if (send_verify_successor_retry_task != NULL) | ||
3263 | { | ||
3264 | /* FIXME: Are we scheduling retry task as soon as we send verify message. | ||
3265 | If yes then here before making this task, first check if the message | ||
3266 | is for the same peer again. */ | ||
3267 | struct VerifySuccessorContext *old_ctx = | ||
3268 | GNUNET_SCHEDULER_cancel(send_verify_successor_retry_task); | ||
3269 | /* old_ctx must not be NULL, as the retry task had been scheduled */ | ||
3270 | GNUNET_assert(NULL != old_ctx); | ||
3271 | GNUNET_free(old_ctx); | ||
3272 | /* FIXME: Why don't we reset the task to NO_TASK here? */ | ||
3273 | } | ||
3274 | |||
3275 | struct VerifySuccessorContext *ctx; | ||
3276 | ctx = GNUNET_new(struct VerifySuccessorContext); | ||
3277 | |||
3278 | ctx->num_retries_scheduled++; | ||
3279 | send_verify_successor_retry_task = | ||
3280 | GNUNET_SCHEDULER_add_delayed (verify_successor_retry_time, | ||
3281 | &send_verify_successor_message, | ||
3282 | ctx); | ||
3283 | } | ||
3284 | else | ||
3285 | { | ||
3286 | /* This is a retry attempt for verify_successor for a previous context */ | ||
3287 | struct VerifySuccessorContext *ctx; | ||
3288 | |||
3289 | ctx = cls; | ||
3290 | ctx->num_retries_scheduled++; | ||
3291 | send_verify_successor_retry_task = | ||
3292 | GNUNET_SCHEDULER_add_delayed (verify_successor_retry_time, | ||
3293 | &send_verify_successor_message, | ||
3294 | ctx); | ||
3295 | } | ||
3296 | |||
3297 | /* Among all the trails to reach to successor, select first one which is present.*/ | ||
3298 | for (i = 0; i < successor->trails_count; i++) | ||
3299 | { | ||
3300 | trail = &successor->trail_list[i]; | ||
3301 | if(GNUNET_YES == trail->is_present) | ||
3302 | break; | ||
3303 | } | ||
3304 | |||
3305 | /* No valid trail found to reach to successor. */ | ||
3306 | if (i == successor->trails_count) | ||
3307 | return; | ||
3308 | |||
3309 | GNUNET_assert(0 != GNUNET_CRYPTO_cmp_peer_identity (&my_identity, | ||
3310 | &successor->finger_identity)); | ||
3311 | /* Trail stored at this index. */ | ||
3312 | GNUNET_assert (GNUNET_YES == trail->is_present); | ||
3313 | trail_id = trail->trail_id; | ||
3314 | if (NULL == GDS_ROUTING_get_next_hop(trail_id,GDS_ROUTING_SRC_TO_DEST)) | ||
3315 | { | ||
3316 | DEBUG(" NO ENTRY FOUND IN %s ROUTING TABLE for trail id %s, line", | ||
3317 | GNUNET_i2s(&my_identity), GNUNET_h2s(&trail->trail_id), __LINE__); | ||
3318 | GNUNET_break(0); | ||
3319 | return; | ||
3320 | } | ||
3321 | trail_length = trail->trail_length; | ||
3322 | if (trail_length > 0) | ||
3323 | { | ||
3324 | /* Copy the trail into peer list. */ | ||
3325 | struct GNUNET_PeerIdentity peer_list[trail_length]; | ||
3326 | element = trail->trail_head; | ||
3327 | for(i = 0; i < trail_length; i++) | ||
3328 | { | ||
3329 | peer_list[i] = element->peer; | ||
3330 | element = element->next; | ||
3331 | } | ||
3332 | GNUNET_assert (NULL != (target_friend = | ||
3333 | GNUNET_CONTAINER_multipeermap_get (friend_peermap, | ||
3334 | &peer_list[0]))); | ||
3335 | GDS_NEIGHBOURS_send_verify_successor_message (my_identity, | ||
3336 | successor->finger_identity, | ||
3337 | trail_id, peer_list, trail_length, | ||
3338 | target_friend); | ||
3339 | } | ||
3340 | else | ||
3341 | { | ||
3342 | GNUNET_assert (NULL != (target_friend = | ||
3343 | GNUNET_CONTAINER_multipeermap_get (friend_peermap, | ||
3344 | &successor->finger_identity))); | ||
3345 | GDS_NEIGHBOURS_send_verify_successor_message (my_identity, | ||
3346 | successor->finger_identity, | ||
3347 | trail_id, NULL, 0, | ||
3348 | target_friend); | ||
3349 | } | ||
3350 | } | ||
3351 | |||
3352 | |||
3353 | /** | ||
3354 | * FIXME: should this be a periodic task, incrementing the search finger index? | ||
3355 | * Update the current search finger index. | ||
3356 | * @a finger_identity | ||
3357 | * @a finger_table_index | ||
3358 | */ | ||
3359 | static void | ||
3360 | update_current_search_finger_index (unsigned int finger_table_index) | ||
3361 | { | ||
3362 | struct FingerInfo *successor; | ||
3363 | |||
3364 | /* FIXME correct this: only move current index periodically */ | ||
3365 | if (finger_table_index != current_search_finger_index) | ||
3366 | return; | ||
3367 | |||
3368 | successor = &finger_table[0]; | ||
3369 | GNUNET_assert (GNUNET_YES == successor->is_present); | ||
3370 | |||
3371 | /* We were looking for immediate successor. */ | ||
3372 | if (0 == current_search_finger_index) | ||
3373 | { | ||
3374 | current_search_finger_index = PREDECESSOR_FINGER_ID; | ||
3375 | if (0 != GNUNET_CRYPTO_cmp_peer_identity (&my_identity, &successor->finger_identity)) | ||
3376 | { | ||
3377 | if (NULL == send_verify_successor_task) | ||
3378 | { | ||
3379 | send_verify_successor_task = | ||
3380 | GNUNET_SCHEDULER_add_now (&send_verify_successor_message, NULL); | ||
3381 | } | ||
3382 | } | ||
3383 | return; | ||
3384 | } | ||
3385 | |||
3386 | current_search_finger_index = current_search_finger_index - 1; | ||
3387 | return; | ||
3388 | } | ||
3389 | |||
3390 | |||
3391 | /** | ||
3392 | * Get the least significant bit set in val. | ||
3393 | * | ||
3394 | * @param val Value | ||
3395 | * @return Position of first bit set, 65 in case of error. | ||
3396 | */ | ||
3397 | static unsigned int | ||
3398 | find_set_bit (uint64_t val) | ||
3399 | { | ||
3400 | uint64_t i; | ||
3401 | unsigned int pos; | ||
3402 | |||
3403 | i = 1; | ||
3404 | pos = 0; | ||
3405 | |||
3406 | while (!(i & val)) | ||
3407 | { | ||
3408 | i = i << 1; | ||
3409 | pos++; | ||
3410 | if (pos > 63) | ||
3411 | { | ||
3412 | GNUNET_break (0); | ||
3413 | return 65; | ||
3414 | } | ||
3415 | } | ||
3416 | |||
3417 | if (val/i != 1) | ||
3418 | return 65; /* Some other bit was set to 1 as well. */ | ||
3419 | |||
3420 | return pos; | ||
3421 | } | ||
3422 | |||
3423 | |||
3424 | /** | ||
3425 | * Calculate finger_table_index from initial 64 bit finger identity value that | ||
3426 | * we send in trail setup message. | ||
3427 | * @param ultimate_destination_finger_value Value that we calculated from our | ||
3428 | * identity and finger_table_index. | ||
3429 | * @param is_predecessor Is the entry for predecessor or not? | ||
3430 | * @return finger_table_index Value between 0 <= finger_table_index <= 64 | ||
3431 | * finger_table_index > PREDECESSOR_FINGER_ID, if error occurs. | ||
3432 | */ | ||
3433 | static unsigned int | ||
3434 | get_finger_table_index (uint64_t ultimate_destination_finger_value, | ||
3435 | unsigned int is_predecessor) | ||
3436 | { | ||
3437 | uint64_t my_id64; | ||
3438 | uint64_t diff; | ||
3439 | unsigned int finger_table_index; | ||
3440 | |||
3441 | memcpy (&my_id64, &my_identity, sizeof (uint64_t)); | ||
3442 | my_id64 = GNUNET_ntohll (my_id64); | ||
3443 | |||
3444 | /* Is this a predecessor finger? */ | ||
3445 | if (1 == is_predecessor) | ||
3446 | { | ||
3447 | diff = my_id64 - ultimate_destination_finger_value; | ||
3448 | if (1 == diff) | ||
3449 | finger_table_index = PREDECESSOR_FINGER_ID; | ||
3450 | else | ||
3451 | finger_table_index = PREDECESSOR_FINGER_ID + 1; //error value | ||
3452 | |||
3453 | } | ||
3454 | else | ||
3455 | { | ||
3456 | diff = ultimate_destination_finger_value - my_id64; | ||
3457 | finger_table_index = find_set_bit (diff); | ||
3458 | } | ||
3459 | return finger_table_index; | ||
3460 | } | ||
3461 | |||
3462 | |||
3463 | /** | ||
3464 | * Remove finger and its associated data structures from finger table. | ||
3465 | * @param existing_finger Finger to be removed which is in finger table. | ||
3466 | * @param finger_table_index Index in finger table where @a existing_finger | ||
3467 | * is stored. | ||
3468 | */ | ||
3469 | static void | ||
3470 | remove_existing_finger (struct FingerInfo *existing_finger, | ||
3471 | unsigned int finger_table_index) | ||
3472 | { | ||
3473 | GNUNET_assert (GNUNET_YES == existing_finger->is_present); | ||
3474 | |||
3475 | /* If I am my own finger, then we have no trails. */ | ||
3476 | if (0 == GNUNET_CRYPTO_cmp_peer_identity (&existing_finger->finger_identity, | ||
3477 | &my_identity)) | ||
3478 | { | ||
3479 | existing_finger->is_present = GNUNET_NO; | ||
3480 | memset ((void *)&finger_table[finger_table_index], 0, | ||
3481 | sizeof (finger_table[finger_table_index])); | ||
3482 | return; | ||
3483 | } | ||
3484 | |||
3485 | /* For all other fingers, send trail teardown across all the trails to reach | ||
3486 | finger, and free the finger. */ | ||
3487 | send_all_finger_trails_teardown (existing_finger); | ||
3488 | free_finger (existing_finger, finger_table_index); | ||
3489 | } | ||
3490 | |||
3491 | |||
3492 | /** | ||
3493 | * Check if there is already an entry in finger_table at finger_table_index. | ||
3494 | * We get the finger_table_index from 64bit finger value we got from the network. | ||
3495 | * -- If yes, then select the closest finger. | ||
3496 | * -- If new and existing finger are same, then check if you can store more | ||
3497 | * trails. | ||
3498 | * -- If yes then add trail, else keep the best trails to reach to the | ||
3499 | * finger. | ||
3500 | * -- If the new finger is closest, remove the existing entry, send trail | ||
3501 | * teardown message across all the trails to reach the existing entry. | ||
3502 | * Add the new finger. | ||
3503 | * -- If new and existing finger are different, and existing finger is closest | ||
3504 | * then do nothing. | ||
3505 | * -- Update current_search_finger_index. | ||
3506 | * @param finger_identity Peer Identity of new finger | ||
3507 | * @param finger_trail Trail to reach the new finger | ||
3508 | * @param finger_trail_length Total number of peers in @a new_finger_trail. | ||
3509 | * @param is_predecessor Is this entry for predecessor in finger_table? | ||
3510 | * @param finger_value 64 bit value of finger identity that we got from network. | ||
3511 | * @param finger_trail_id Unique identifier of @finger_trail. | ||
3512 | */ | ||
3513 | static void | ||
3514 | finger_table_add (struct GNUNET_PeerIdentity finger_identity, | ||
3515 | const struct GNUNET_PeerIdentity *finger_trail, | ||
3516 | unsigned int finger_trail_length, | ||
3517 | unsigned int is_predecessor, | ||
3518 | uint64_t finger_value, | ||
3519 | struct GNUNET_HashCode finger_trail_id) | ||
3520 | { | ||
3521 | struct FingerInfo *existing_finger; | ||
3522 | struct GNUNET_PeerIdentity closest_peer; | ||
3523 | struct FingerInfo *successor; | ||
3524 | unsigned int finger_table_index; | ||
3525 | |||
3526 | /* Get the finger_table_index corresponding to finger_value we got from network.*/ | ||
3527 | finger_table_index = get_finger_table_index (finger_value, is_predecessor); | ||
3528 | |||
3529 | /* Invalid finger_table_index. */ | ||
3530 | if ((finger_table_index > PREDECESSOR_FINGER_ID)) | ||
3531 | { | ||
3532 | GNUNET_break_op (0); | ||
3533 | return; | ||
3534 | } | ||
3535 | |||
3536 | /* Check if new entry is same as successor. */ | ||
3537 | if ((0 != finger_table_index) && | ||
3538 | (PREDECESSOR_FINGER_ID != finger_table_index)) | ||
3539 | { | ||
3540 | successor = &finger_table[0]; | ||
3541 | if (GNUNET_NO == successor->is_present) | ||
3542 | { | ||
3543 | GNUNET_break (0); //ASSERTION FAILS HERE. FIXME | ||
3544 | return; | ||
3545 | } | ||
3546 | if (0 == GNUNET_CRYPTO_cmp_peer_identity (&finger_identity, | ||
3547 | &successor->finger_identity)) | ||
3548 | { | ||
3549 | if (0 == fingers_round_count) | ||
3550 | { | ||
3551 | find_finger_trail_task_next_send_time = | ||
3552 | GNUNET_TIME_STD_BACKOFF(find_finger_trail_task_next_send_time); | ||
3553 | } | ||
3554 | else | ||
3555 | fingers_round_count--; | ||
3556 | current_search_finger_index = 0; | ||
3557 | GNUNET_STATISTICS_update (GDS_stats, | ||
3558 | gettext_noop | ||
3559 | ("# FINGERS_COUNT"), (int64_t) total_fingers_found, | ||
3560 | GNUNET_NO); | ||
3561 | total_fingers_found = 0; | ||
3562 | return; | ||
3563 | } | ||
3564 | |||
3565 | struct FingerInfo prev_finger; | ||
3566 | prev_finger = finger_table[finger_table_index - 1]; | ||
3567 | if (0 == GNUNET_CRYPTO_cmp_peer_identity (&finger_identity, | ||
3568 | &prev_finger.finger_identity)) | ||
3569 | { | ||
3570 | current_search_finger_index--; | ||
3571 | return; | ||
3572 | } | ||
3573 | } | ||
3574 | |||
3575 | total_fingers_found++; | ||
3576 | existing_finger = &finger_table[finger_table_index]; | ||
3577 | |||
3578 | /* No entry present in finger_table for given finger map index. */ | ||
3579 | if (GNUNET_NO == existing_finger->is_present) | ||
3580 | { | ||
3581 | /* Shorten the trail if possible. */ | ||
3582 | add_new_finger (finger_identity, finger_trail, | ||
3583 | finger_trail_length, | ||
3584 | finger_trail_id, finger_table_index); | ||
3585 | update_current_search_finger_index (finger_table_index); | ||
3586 | return; | ||
3587 | } | ||
3588 | |||
3589 | /* If existing entry and finger identity are not same. */ | ||
3590 | if (0 != GNUNET_CRYPTO_cmp_peer_identity (&(existing_finger->finger_identity), | ||
3591 | &finger_identity)) | ||
3592 | { | ||
3593 | closest_peer = select_closest_peer (&existing_finger->finger_identity, | ||
3594 | &finger_identity, | ||
3595 | finger_value, | ||
3596 | is_predecessor); | ||
3597 | |||
3598 | /* If the new finger is the closest peer. */ | ||
3599 | if (0 == GNUNET_CRYPTO_cmp_peer_identity (&finger_identity, &closest_peer)) | ||
3600 | { | ||
3601 | remove_existing_finger (existing_finger, finger_table_index); | ||
3602 | add_new_finger (finger_identity, finger_trail, finger_trail_length, | ||
3603 | finger_trail_id, finger_table_index); | ||
3604 | } | ||
3605 | else | ||
3606 | { | ||
3607 | /* Existing finger is the closest one. We need to send trail teardown | ||
3608 | across the trail setup in routing table of all the peers. */ | ||
3609 | if (0 != GNUNET_CRYPTO_cmp_peer_identity (&finger_identity, &my_identity)) | ||
3610 | { | ||
3611 | if (finger_trail_length > 0) | ||
3612 | GDS_NEIGHBOURS_send_trail_teardown (&finger_trail_id, | ||
3613 | GDS_ROUTING_SRC_TO_DEST, | ||
3614 | &finger_trail[0]); | ||
3615 | else | ||
3616 | GDS_NEIGHBOURS_send_trail_teardown (&finger_trail_id, | ||
3617 | GDS_ROUTING_SRC_TO_DEST, | ||
3618 | &finger_identity); | ||
3619 | } | ||
3620 | } | ||
3621 | } | ||
3622 | else | ||
3623 | { | ||
3624 | /* If both new and existing entry are same as my_identity, then do nothing. */ | ||
3625 | if (0 == GNUNET_CRYPTO_cmp_peer_identity (&(existing_finger->finger_identity), | ||
3626 | &my_identity)) | ||
3627 | { | ||
3628 | return; | ||
3629 | } | ||
3630 | |||
3631 | /* If there is space to store more trails. */ | ||
3632 | if (existing_finger->trails_count < MAXIMUM_TRAILS_PER_FINGER) | ||
3633 | add_new_trail (existing_finger, finger_trail, | ||
3634 | finger_trail_length, finger_trail_id); | ||
3635 | else | ||
3636 | select_and_replace_trail (existing_finger, finger_trail, | ||
3637 | finger_trail_length, finger_trail_id); | ||
3638 | } | ||
3639 | update_current_search_finger_index (finger_table_index); | ||
3640 | return; | ||
3641 | } | ||
3642 | |||
3643 | |||
3644 | /** | ||
3645 | * Core handler for P2P put messages. | ||
3646 | * @param cls closure | ||
3647 | * @param peer sender of the request | ||
3648 | * @param message message | ||
3649 | * @return #GNUNET_OK to keep the connection open, | ||
3650 | * #GNUNET_SYSERR to close it (signal serious error) | ||
3651 | */ | ||
3652 | static int | ||
3653 | handle_dht_p2p_put (void *cls, const struct GNUNET_PeerIdentity *peer, | ||
3654 | const struct GNUNET_MessageHeader *message) | ||
3655 | { | ||
3656 | struct PeerPutMessage *put; | ||
3657 | struct GNUNET_PeerIdentity *put_path; | ||
3658 | struct GNUNET_PeerIdentity current_best_known_dest; | ||
3659 | struct GNUNET_PeerIdentity best_known_dest; | ||
3660 | struct GNUNET_HashCode received_intermediate_trail_id; | ||
3661 | struct GNUNET_HashCode intermediate_trail_id; | ||
3662 | struct GNUNET_PeerIdentity next_hop; | ||
3663 | struct GNUNET_PeerIdentity *next_routing_hop; | ||
3664 | enum GNUNET_DHT_RouteOption options; | ||
3665 | struct GNUNET_HashCode test_key; | ||
3666 | void *payload; | ||
3667 | size_t msize; | ||
3668 | uint32_t putlen; | ||
3669 | uint32_t hop_count; | ||
3670 | size_t payload_size; | ||
3671 | uint64_t key_value; | ||
3672 | |||
3673 | msize = ntohs (message->size); | ||
3674 | if (msize < sizeof (struct PeerPutMessage)) | ||
3675 | { | ||
3676 | GNUNET_break_op (0); | ||
3677 | return GNUNET_OK; | ||
3678 | } | ||
3679 | |||
3680 | put = (struct PeerPutMessage *) message; | ||
3681 | putlen = ntohl (put->put_path_length); | ||
3682 | if ((msize < | ||
3683 | sizeof (struct PeerPutMessage) + | ||
3684 | putlen * sizeof (struct GNUNET_PeerIdentity)) || | ||
3685 | (putlen > | ||
3686 | GNUNET_CONSTANTS_MAX_ENCRYPTED_MESSAGE_SIZE / sizeof (struct GNUNET_PeerIdentity))) | ||
3687 | { | ||
3688 | GNUNET_break_op (0); | ||
3689 | return GNUNET_OK; | ||
3690 | } | ||
3691 | #if ENABLE_MALICIOUS | ||
3692 | if(1 == act_malicious) | ||
3693 | { | ||
3694 | DEBUG("\n I AM MALICIOUS PUT_REQUEST_DROPPED for key = %ss",GNUNET_h2s(&put->key)); | ||
3695 | return GNUNET_OK; | ||
3696 | } | ||
3697 | #endif | ||
3698 | GNUNET_STATISTICS_update (GDS_stats, | ||
3699 | gettext_noop | ||
3700 | ("# Bytes received from other peers"), (int64_t) msize, | ||
3701 | GNUNET_NO); | ||
3702 | |||
3703 | current_best_known_dest = put->best_known_destination; | ||
3704 | put_path = (struct GNUNET_PeerIdentity *) &put[1]; | ||
3705 | payload = &put_path[putlen]; | ||
3706 | options = ntohl (put->options); | ||
3707 | received_intermediate_trail_id = put->intermediate_trail_id; | ||
3708 | hop_count = ntohl(put->hop_count); | ||
3709 | payload_size = msize - (sizeof (struct PeerPutMessage) + | ||
3710 | putlen * sizeof (struct GNUNET_PeerIdentity)); | ||
3711 | hop_count++; | ||
3712 | switch (GNUNET_BLOCK_get_key (GDS_block_context, ntohl (put->block_type), | ||
3713 | payload, payload_size, &test_key)) | ||
3714 | { | ||
3715 | case GNUNET_YES: | ||
3716 | if (0 != memcmp (&test_key, &put->key, sizeof (struct GNUNET_HashCode))) | ||
3717 | { | ||
3718 | char *put_s = GNUNET_strdup (GNUNET_h2s_full (&put->key)); | ||
3719 | GNUNET_break_op (0); | ||
3720 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, | ||
3721 | "PUT with key `%s' for block with key %s\n", | ||
3722 | put_s, GNUNET_h2s_full (&test_key)); | ||
3723 | GNUNET_free (put_s); | ||
3724 | return GNUNET_OK; | ||
3725 | } | ||
3726 | break; | ||
3727 | case GNUNET_NO: | ||
3728 | GNUNET_break_op (0); | ||
3729 | return GNUNET_OK; | ||
3730 | case GNUNET_SYSERR: | ||
3731 | /* cannot verify, good luck */ | ||
3732 | break; | ||
3733 | } | ||
3734 | |||
3735 | if (ntohl (put->block_type) == GNUNET_BLOCK_TYPE_REGEX) /* FIXME: do for all tpyes */ | ||
3736 | { | ||
3737 | switch (GNUNET_BLOCK_evaluate (GDS_block_context, | ||
3738 | ntohl (put->block_type), | ||
3739 | GNUNET_BLOCK_EO_NONE, | ||
3740 | NULL, /* query */ | ||
3741 | NULL, 0, /* bloom filer */ | ||
3742 | NULL, 0, /* xquery */ | ||
3743 | payload, payload_size)) | ||
3744 | { | ||
3745 | case GNUNET_BLOCK_EVALUATION_OK_MORE: | ||
3746 | case GNUNET_BLOCK_EVALUATION_OK_LAST: | ||
3747 | break; | ||
3748 | |||
3749 | case GNUNET_BLOCK_EVALUATION_OK_DUPLICATE: | ||
3750 | case GNUNET_BLOCK_EVALUATION_RESULT_INVALID: | ||
3751 | case GNUNET_BLOCK_EVALUATION_RESULT_IRRELEVANT: | ||
3752 | case GNUNET_BLOCK_EVALUATION_REQUEST_VALID: | ||
3753 | case GNUNET_BLOCK_EVALUATION_REQUEST_INVALID: | ||
3754 | case GNUNET_BLOCK_EVALUATION_TYPE_NOT_SUPPORTED: | ||
3755 | default: | ||
3756 | GNUNET_break_op (0); | ||
3757 | return GNUNET_OK; | ||
3758 | } | ||
3759 | } | ||
3760 | |||
3761 | /* Check if you are already a part of put path. */ | ||
3762 | unsigned int i; | ||
3763 | for (i = 0; i < putlen; i++) | ||
3764 | { | ||
3765 | if(0 == GNUNET_CRYPTO_cmp_peer_identity (&my_identity, &put_path[i])) | ||
3766 | { | ||
3767 | putlen = i; | ||
3768 | break; | ||
3769 | } | ||
3770 | } | ||
3771 | |||
3772 | /* Add yourself to the list. */ | ||
3773 | struct GNUNET_PeerIdentity pp[putlen + 1]; | ||
3774 | //if (0 != (options & GNUNET_DHT_RO_RECORD_ROUTE)) | ||
3775 | if (1) | ||
3776 | { | ||
3777 | memcpy (pp, put_path, putlen * sizeof (struct GNUNET_PeerIdentity)); | ||
3778 | pp[putlen] = my_identity; | ||
3779 | putlen++; | ||
3780 | } | ||
3781 | else | ||
3782 | putlen = 0; | ||
3783 | |||
3784 | memcpy (&key_value, &(put->key), sizeof (uint64_t)); | ||
3785 | struct Closest_Peer successor; | ||
3786 | key_value = GNUNET_ntohll (key_value); | ||
3787 | successor = find_local_best_known_next_hop (key_value, | ||
3788 | GDS_FINGER_TYPE_NON_PREDECESSOR); | ||
3789 | next_hop = successor.next_hop; | ||
3790 | intermediate_trail_id = successor.trail_id; | ||
3791 | best_known_dest = successor.best_known_destination; | ||
3792 | |||
3793 | if (0 != (GNUNET_CRYPTO_cmp_peer_identity (¤t_best_known_dest, &my_identity))) | ||
3794 | { | ||
3795 | next_routing_hop = GDS_ROUTING_get_next_hop (received_intermediate_trail_id, | ||
3796 | GDS_ROUTING_SRC_TO_DEST); | ||
3797 | if (NULL != next_routing_hop) | ||
3798 | { | ||
3799 | next_hop = *next_routing_hop; | ||
3800 | intermediate_trail_id = received_intermediate_trail_id; | ||
3801 | best_known_dest = current_best_known_dest; | ||
3802 | } | ||
3803 | } | ||
3804 | |||
3805 | GDS_CLIENTS_process_put (options, | ||
3806 | ntohl (put->block_type), | ||
3807 | hop_count, | ||
3808 | ntohl (put->desired_replication_level), | ||
3809 | putlen, pp, | ||
3810 | GNUNET_TIME_absolute_ntoh (put->expiration_time), | ||
3811 | &put->key, | ||
3812 | payload, | ||
3813 | payload_size); | ||
3814 | |||
3815 | /* I am the final destination */ | ||
3816 | if (0 == GNUNET_CRYPTO_cmp_peer_identity (&my_identity, &best_known_dest)) | ||
3817 | { | ||
3818 | DEBUG("\n PUT_REQUEST_SUCCESSFUL for key = %s",GNUNET_h2s(&put->key)); | ||
3819 | GDS_DATACACHE_handle_put (GNUNET_TIME_absolute_ntoh (put->expiration_time), | ||
3820 | &(put->key),putlen, pp, ntohl (put->block_type), | ||
3821 | payload_size, payload); | ||
3822 | } | ||
3823 | else | ||
3824 | { | ||
3825 | #if ENABLE_MALICIOUS | ||
3826 | if (0 != GNUNET_CRYPTO_cmp_peer_identity (&successor.best_known_destination, | ||
3827 | &successor.next_hop)) | ||
3828 | { | ||
3829 | struct FingerInfo *next_hop_finger; | ||
3830 | unsigned int i; | ||
3831 | |||
3832 | next_hop_finger = &finger_table[successor.finger_table_index]; | ||
3833 | for (i = 0; i < next_hop_finger->trails_count; i++) | ||
3834 | { | ||
3835 | if (GNUNET_YES == next_hop_finger->trail_list[i].is_present) | ||
3836 | { | ||
3837 | if(0 == next_hop_finger->trail_list[i].trail_length) | ||
3838 | { | ||
3839 | GDS_NEIGHBOURS_send_put (&put->key, | ||
3840 | ntohl (put->block_type),ntohl (put->options), | ||
3841 | ntohl (put->desired_replication_level), | ||
3842 | best_known_dest, intermediate_trail_id, &next_hop, | ||
3843 | hop_count, putlen, pp, | ||
3844 | GNUNET_TIME_absolute_ntoh (put->expiration_time), | ||
3845 | payload, payload_size); | ||
3846 | return GNUNET_OK; | ||
3847 | } | ||
3848 | next_hop = next_hop_finger->trail_list[i].trail_head->peer; | ||
3849 | GDS_NEIGHBOURS_send_put (&put->key, | ||
3850 | ntohl (put->block_type),ntohl (put->options), | ||
3851 | ntohl (put->desired_replication_level), | ||
3852 | best_known_dest, | ||
3853 | next_hop_finger->trail_list[i].trail_id, | ||
3854 | &next_hop, hop_count, putlen, pp, | ||
3855 | GNUNET_TIME_absolute_ntoh (put->expiration_time), | ||
3856 | payload, payload_size); | ||
3857 | } | ||
3858 | } | ||
3859 | return GNUNET_OK; | ||
3860 | } | ||
3861 | #endif | ||
3862 | GDS_NEIGHBOURS_send_put (&put->key, | ||
3863 | ntohl (put->block_type),ntohl (put->options), | ||
3864 | ntohl (put->desired_replication_level), | ||
3865 | best_known_dest, intermediate_trail_id, &next_hop, | ||
3866 | hop_count, putlen, pp, | ||
3867 | GNUNET_TIME_absolute_ntoh (put->expiration_time), | ||
3868 | payload, payload_size); | ||
3869 | } | ||
3870 | return GNUNET_OK; | ||
3871 | } | ||
3872 | |||
3873 | |||
3874 | /** | ||
3875 | * FIXME: Check for loop in the request. If you already are part of get path, | ||
3876 | * then you need to reset the get path length. | ||
3877 | * Core handler for p2p get requests. | ||
3878 | * | ||
3879 | * @param cls closure | ||
3880 | * @param peer sender of the request | ||
3881 | * @param message message | ||
3882 | * @return #GNUNET_OK to keep the connection open, | ||
3883 | * #GNUNET_SYSERR to close it (signal serious error) | ||
3884 | */ | ||
3885 | static int | ||
3886 | handle_dht_p2p_get (void *cls, const struct GNUNET_PeerIdentity *peer, | ||
3887 | const struct GNUNET_MessageHeader *message) | ||
3888 | { | ||
3889 | const struct PeerGetMessage *get; | ||
3890 | const struct GNUNET_PeerIdentity *get_path; | ||
3891 | struct GNUNET_PeerIdentity best_known_dest; | ||
3892 | struct GNUNET_PeerIdentity current_best_known_dest; | ||
3893 | struct GNUNET_HashCode intermediate_trail_id; | ||
3894 | struct GNUNET_HashCode received_intermediate_trail_id; | ||
3895 | struct Closest_Peer successor; | ||
3896 | struct GNUNET_PeerIdentity next_hop; | ||
3897 | struct GNUNET_PeerIdentity *next_routing_hop; | ||
3898 | uint32_t get_length; | ||
3899 | uint64_t key_value; | ||
3900 | uint32_t hop_count; | ||
3901 | size_t msize; | ||
3902 | |||
3903 | msize = ntohs (message->size); | ||
3904 | if (msize < sizeof (struct PeerGetMessage)) | ||
3905 | { | ||
3906 | GNUNET_break_op (0); | ||
3907 | return GNUNET_YES; | ||
3908 | } | ||
3909 | |||
3910 | get = (const struct PeerGetMessage *)message; | ||
3911 | get_length = ntohl (get->get_path_length); | ||
3912 | if ((msize < | ||
3913 | sizeof (struct PeerGetMessage) + | ||
3914 | get_length * sizeof (struct GNUNET_PeerIdentity)) || | ||
3915 | (get_length > | ||
3916 | GNUNET_CONSTANTS_MAX_ENCRYPTED_MESSAGE_SIZE / sizeof (struct GNUNET_PeerIdentity))) | ||
3917 | { | ||
3918 | GNUNET_break_op (0); | ||
3919 | return GNUNET_YES; | ||
3920 | } | ||
3921 | |||
3922 | #if ENABLE_MALICIOUS | ||
3923 | if(1 == act_malicious) | ||
3924 | { | ||
3925 | DEBUG("I am malicious,GET_REQUEST_DROPPED for key = %s. \n",GNUNET_h2s(&get->key)); | ||
3926 | return GNUNET_OK; | ||
3927 | } | ||
3928 | #endif | ||
3929 | current_best_known_dest = get->best_known_destination; | ||
3930 | received_intermediate_trail_id = get->intermediate_trail_id; | ||
3931 | get_path = (const struct GNUNET_PeerIdentity *)&get[1]; | ||
3932 | hop_count = get->hop_count; | ||
3933 | hop_count++; | ||
3934 | |||
3935 | |||
3936 | GNUNET_STATISTICS_update (GDS_stats, | ||
3937 | gettext_noop | ||
3938 | ("# Bytes received from other peers"), msize, | ||
3939 | GNUNET_NO); | ||
3940 | |||
3941 | memcpy (&key_value, &(get->key), sizeof (uint64_t)); | ||
3942 | key_value = GNUNET_ntohll (key_value); | ||
3943 | |||
3944 | /* Check if you are already a part of get path. */ | ||
3945 | unsigned int i; | ||
3946 | for (i = 0; i < get_length; i++) | ||
3947 | { | ||
3948 | if (0 == GNUNET_CRYPTO_cmp_peer_identity (&my_identity, &get_path[i])) | ||
3949 | { | ||
3950 | get_length = i; | ||
3951 | break; | ||
3952 | } | ||
3953 | } | ||
3954 | |||
3955 | /* Add yourself in the get path. */ | ||
3956 | struct GNUNET_PeerIdentity gp[get_length + 1]; | ||
3957 | memcpy (gp, get_path, get_length * sizeof (struct GNUNET_PeerIdentity)); | ||
3958 | gp[get_length] = my_identity; | ||
3959 | get_length = get_length + 1; | ||
3960 | GDS_CLIENTS_process_get (get->options, get->block_type, hop_count, | ||
3961 | get->desired_replication_level, get->get_path_length, | ||
3962 | gp, &get->key); | ||
3963 | |||
3964 | |||
3965 | successor = find_local_best_known_next_hop (key_value, | ||
3966 | GDS_FINGER_TYPE_NON_PREDECESSOR); | ||
3967 | next_hop = successor.next_hop; | ||
3968 | best_known_dest = successor.best_known_destination; | ||
3969 | intermediate_trail_id = successor.trail_id; | ||
3970 | /* I am not the final destination. I am part of trail to reach final dest. */ | ||
3971 | if (0 != (GNUNET_CRYPTO_cmp_peer_identity (¤t_best_known_dest, &my_identity))) | ||
3972 | { | ||
3973 | next_routing_hop = GDS_ROUTING_get_next_hop (received_intermediate_trail_id, | ||
3974 | GDS_ROUTING_SRC_TO_DEST); | ||
3975 | if (NULL != next_routing_hop) | ||
3976 | { | ||
3977 | next_hop = *next_routing_hop; | ||
3978 | best_known_dest = current_best_known_dest; | ||
3979 | intermediate_trail_id = received_intermediate_trail_id; | ||
3980 | } | ||
3981 | } | ||
3982 | |||
3983 | /* I am the final destination. */ | ||
3984 | if (0 == GNUNET_CRYPTO_cmp_peer_identity(&my_identity, &best_known_dest)) | ||
3985 | { | ||
3986 | if (1 == get_length) | ||
3987 | { | ||
3988 | DEBUG("\n GET_REQUEST DONE for key = %s",GNUNET_h2s(&get->key)); | ||
3989 | GDS_DATACACHE_handle_get (&(get->key),(get->block_type), NULL, 0, | ||
3990 | NULL, 0, 1, &my_identity, NULL,&my_identity); | ||
3991 | } | ||
3992 | else | ||
3993 | { | ||
3994 | GDS_DATACACHE_handle_get (&(get->key),(get->block_type), NULL, 0, NULL, 0, | ||
3995 | get_length, gp, &gp[get_length - 2], | ||
3996 | &my_identity); | ||
3997 | } | ||
3998 | } | ||
3999 | else | ||
4000 | { | ||
4001 | |||
4002 | #if ENABLE_MALICIOUS | ||
4003 | if (0 != GNUNET_CRYPTO_cmp_peer_identity (&successor.best_known_destination, | ||
4004 | &successor.next_hop)) | ||
4005 | { | ||
4006 | struct FingerInfo *next_hop_finger; | ||
4007 | unsigned int i; | ||
4008 | |||
4009 | next_hop_finger = &finger_table[successor.finger_table_index]; | ||
4010 | for (i = 0; i < next_hop_finger->trails_count; i++) | ||
4011 | { | ||
4012 | if(0 == next_hop_finger->trail_list[i].trail_length) | ||
4013 | { | ||
4014 | GDS_NEIGHBOURS_send_get (&(get->key), get->block_type, get->options, | ||
4015 | get->desired_replication_level, best_known_dest, | ||
4016 | intermediate_trail_id, &next_hop, hop_count, | ||
4017 | get_length, gp); | ||
4018 | return GNUNET_OK; | ||
4019 | } | ||
4020 | if (GNUNET_YES == next_hop_finger->trail_list[i].is_present) | ||
4021 | { | ||
4022 | next_hop = next_hop_finger->trail_list[i].trail_head->peer; | ||
4023 | GDS_NEIGHBOURS_send_get (&(get->key), get->block_type, get->options, | ||
4024 | get->desired_replication_level, best_known_dest, | ||
4025 | next_hop_finger->trail_list[i].trail_id, | ||
4026 | &next_hop, hop_count, | ||
4027 | get_length, gp); | ||
4028 | } | ||
4029 | } | ||
4030 | return GNUNET_OK; | ||
4031 | } | ||
4032 | #endif | ||
4033 | GDS_NEIGHBOURS_send_get (&(get->key), get->block_type, get->options, | ||
4034 | get->desired_replication_level, best_known_dest, | ||
4035 | intermediate_trail_id, &next_hop, hop_count, | ||
4036 | get_length, gp); | ||
4037 | } | ||
4038 | return GNUNET_YES; | ||
4039 | } | ||
4040 | |||
4041 | |||
4042 | /** | ||
4043 | * Core handler for get result | ||
4044 | * @param cls closure | ||
4045 | * @param peer sender of the request | ||
4046 | * @param message message | ||
4047 | * @return #GNUNET_OK to keep the connection open, | ||
4048 | * #GNUNET_SYSERR to close it (signal serious error) | ||
4049 | */ | ||
4050 | static int | ||
4051 | handle_dht_p2p_get_result (void *cls, const struct GNUNET_PeerIdentity *peer, | ||
4052 | const struct GNUNET_MessageHeader *message) | ||
4053 | { | ||
4054 | const struct PeerGetResultMessage *get_result; | ||
4055 | const struct GNUNET_PeerIdentity *get_path; | ||
4056 | const struct GNUNET_PeerIdentity *put_path; | ||
4057 | const void *payload; | ||
4058 | size_t payload_size; | ||
4059 | size_t msize; | ||
4060 | unsigned int getlen; | ||
4061 | unsigned int putlen; | ||
4062 | int current_path_index; | ||
4063 | |||
4064 | msize = ntohs (message->size); | ||
4065 | if (msize < sizeof (struct PeerGetResultMessage)) | ||
4066 | { | ||
4067 | GNUNET_break_op (0); | ||
4068 | return GNUNET_YES; | ||
4069 | } | ||
4070 | |||
4071 | get_result = (const struct PeerGetResultMessage *)message; | ||
4072 | getlen = ntohl (get_result->get_path_length); | ||
4073 | putlen = ntohl (get_result->put_path_length); | ||
4074 | |||
4075 | if ((msize < | ||
4076 | sizeof (struct PeerGetResultMessage) + | ||
4077 | getlen * sizeof (struct GNUNET_PeerIdentity) + | ||
4078 | putlen * sizeof (struct GNUNET_PeerIdentity)) || | ||
4079 | (getlen > | ||
4080 | GNUNET_CONSTANTS_MAX_ENCRYPTED_MESSAGE_SIZE / sizeof (struct GNUNET_PeerIdentity) || | ||
4081 | (putlen > | ||
4082 | GNUNET_CONSTANTS_MAX_ENCRYPTED_MESSAGE_SIZE / sizeof (struct GNUNET_PeerIdentity)))) | ||
4083 | { | ||
4084 | GNUNET_break_op (0); | ||
4085 | return GNUNET_YES; | ||
4086 | } | ||
4087 | DEBUG("GET_RESULT FOR DATA_SIZE = %lu\n",msize); | ||
4088 | GNUNET_STATISTICS_update (GDS_stats, | ||
4089 | gettext_noop | ||
4090 | ("# Bytes received from other peers"), msize, | ||
4091 | GNUNET_NO); | ||
4092 | |||
4093 | put_path = (const struct GNUNET_PeerIdentity *) &get_result[1]; | ||
4094 | get_path = &put_path[putlen]; | ||
4095 | payload = (const void *) &get_path[getlen]; | ||
4096 | payload_size = msize - (sizeof (struct PeerGetResultMessage) + | ||
4097 | (getlen + putlen) * sizeof (struct GNUNET_PeerIdentity)); | ||
4098 | |||
4099 | if (0 == (GNUNET_CRYPTO_cmp_peer_identity (&my_identity, &(get_path[0])))) | ||
4100 | { | ||
4101 | GDS_CLIENTS_handle_reply (get_result->expiration_time, &(get_result->key), | ||
4102 | getlen, get_path, putlen, | ||
4103 | put_path, get_result->type, payload_size, payload); | ||
4104 | return GNUNET_YES; | ||
4105 | } | ||
4106 | else | ||
4107 | { | ||
4108 | current_path_index = search_my_index (get_path, getlen); | ||
4109 | if (-1 == current_path_index ) | ||
4110 | { | ||
4111 | DEBUG ("No entry found in get path.\n"); | ||
4112 | GNUNET_break (0); | ||
4113 | return GNUNET_SYSERR; | ||
4114 | } | ||
4115 | if((getlen + 1) == current_path_index) | ||
4116 | { | ||
4117 | DEBUG("Present twice in get path. Not allowed. \n"); | ||
4118 | GNUNET_break (0); | ||
4119 | return GNUNET_SYSERR; | ||
4120 | } | ||
4121 | GDS_NEIGHBOURS_send_get_result (&(get_result->key), get_result->type, | ||
4122 | &get_path[current_path_index - 1], | ||
4123 | &(get_result->querying_peer), putlen, put_path, | ||
4124 | getlen, get_path, get_result->expiration_time, | ||
4125 | payload, payload_size); | ||
4126 | return GNUNET_YES; | ||
4127 | } | ||
4128 | return GNUNET_SYSERR; | ||
4129 | } | ||
4130 | |||
4131 | |||
4132 | /** | ||
4133 | * Find the next hop to pass trail setup message. First find the local best known | ||
4134 | * hop from your own identity, friends and finger. If you were part of trail, | ||
4135 | * then get the next hop from routing table. Compare next_hop from routing table | ||
4136 | * and local best known hop, and return the closest one to final_dest_finger_val | ||
4137 | * @param final_dest_finger_val 64 bit value of finger identity | ||
4138 | * @param intermediate_trail_id If you are part of trail to reach to some other | ||
4139 | * finger, then it is the trail id to reach to | ||
4140 | * that finger, else set to 0. | ||
4141 | * @param is_predecessor Are we looking for closest successor or predecessor. | ||
4142 | * @param source Source of trail setup message. | ||
4143 | * @param current_dest In case you are part of trail, then finger to which | ||
4144 | * we should forward the message. Else my own identity | ||
4145 | * @return Closest Peer for @a final_dest_finger_val | ||
4146 | */ | ||
4147 | static struct Closest_Peer | ||
4148 | get_local_best_known_next_hop (uint64_t final_dest_finger_val, | ||
4149 | struct GNUNET_HashCode intermediate_trail_id, | ||
4150 | unsigned int is_predecessor, | ||
4151 | struct GNUNET_PeerIdentity source, | ||
4152 | struct GNUNET_PeerIdentity *current_dest) | ||
4153 | { | ||
4154 | struct Closest_Peer peer; | ||
4155 | |||
4156 | peer = find_local_best_known_next_hop (final_dest_finger_val, is_predecessor); | ||
4157 | |||
4158 | /* Am I just a part of a trail towards a finger (current_destination)? */ | ||
4159 | if (0 != GNUNET_CRYPTO_cmp_peer_identity (&my_identity, current_dest) && | ||
4160 | 0 != GNUNET_CRYPTO_cmp_peer_identity (&peer.best_known_destination, | ||
4161 | current_dest)) | ||
4162 | { | ||
4163 | struct GNUNET_PeerIdentity closest_peer; | ||
4164 | |||
4165 | /* Select best successor among one found locally and current_destination | ||
4166 | * that we got from network.*/ | ||
4167 | closest_peer = select_closest_peer (&peer.best_known_destination, | ||
4168 | current_dest, | ||
4169 | final_dest_finger_val, | ||
4170 | is_predecessor); | ||
4171 | |||
4172 | /* Is current dest (end point of the trail of which I am a part) closest_peer? */ | ||
4173 | if (0 == GNUNET_CRYPTO_cmp_peer_identity (current_dest, &closest_peer)) | ||
4174 | { | ||
4175 | struct GNUNET_PeerIdentity *next_hop; | ||
4176 | |||
4177 | next_hop = GDS_ROUTING_get_next_hop (intermediate_trail_id, | ||
4178 | GDS_ROUTING_SRC_TO_DEST); | ||
4179 | /* next_hop NULL is a valid case. This intermediate trail id is set by | ||
4180 | some other finger, and while this trail setup is in progress, that other | ||
4181 | peer might have found a better trail ,and send trail teardown message | ||
4182 | across the network. In case we got the trail teardown message first, | ||
4183 | then next_hop will be NULL. A possible solution could be to keep track | ||
4184 | * of all removed trail id, and be sure that there is no other reason . */ | ||
4185 | if(NULL != next_hop) | ||
4186 | { | ||
4187 | peer.next_hop = *next_hop; | ||
4188 | peer.best_known_destination = *current_dest; | ||
4189 | peer.trail_id = intermediate_trail_id; | ||
4190 | } | ||
4191 | } | ||
4192 | } | ||
4193 | return peer; | ||
4194 | } | ||
4195 | |||
4196 | |||
4197 | /* | ||
4198 | * Core handle for PeerTrailSetupMessage. | ||
4199 | * @param cls closure | ||
4200 | * @param message message | ||
4201 | * @param peer peer identity this notification is about | ||
4202 | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | ||
4203 | */ | ||
4204 | static int | ||
4205 | handle_dht_p2p_trail_setup (void *cls, const struct GNUNET_PeerIdentity *peer, | ||
4206 | const struct GNUNET_MessageHeader *message) | ||
4207 | { | ||
4208 | const struct PeerTrailSetupMessage *trail_setup; | ||
4209 | const struct GNUNET_PeerIdentity *trail_peer_list; | ||
4210 | struct GNUNET_PeerIdentity current_dest; | ||
4211 | struct FriendInfo *target_friend; | ||
4212 | struct GNUNET_PeerIdentity source; | ||
4213 | struct GNUNET_HashCode intermediate_trail_id; | ||
4214 | struct GNUNET_HashCode trail_id; | ||
4215 | unsigned int is_predecessor; | ||
4216 | uint32_t trail_length; | ||
4217 | uint64_t final_dest_finger_val; | ||
4218 | int i; | ||
4219 | size_t msize; | ||
4220 | |||
4221 | msize = ntohs (message->size); | ||
4222 | if (msize < sizeof (struct PeerTrailSetupMessage)) | ||
4223 | { | ||
4224 | GNUNET_break_op (0); | ||
4225 | return GNUNET_SYSERR; | ||
4226 | } | ||
4227 | |||
4228 | trail_setup = (const struct PeerTrailSetupMessage *) message; | ||
4229 | if ((msize - sizeof (struct PeerTrailSetupMessage)) % | ||
4230 | sizeof (struct GNUNET_PeerIdentity) != 0) | ||
4231 | { | ||
4232 | GNUNET_break_op (0); | ||
4233 | return GNUNET_OK; | ||
4234 | } | ||
4235 | trail_length = (msize - sizeof (struct PeerTrailSetupMessage))/ | ||
4236 | sizeof (struct GNUNET_PeerIdentity); | ||
4237 | |||
4238 | GNUNET_STATISTICS_update (GDS_stats, | ||
4239 | gettext_noop | ||
4240 | ("# Bytes received from other peers"), msize, | ||
4241 | GNUNET_NO); | ||
4242 | |||
4243 | trail_peer_list = (const struct GNUNET_PeerIdentity *)&trail_setup[1]; | ||
4244 | current_dest = trail_setup->best_known_destination; | ||
4245 | trail_id = trail_setup->trail_id; | ||
4246 | final_dest_finger_val = | ||
4247 | GNUNET_ntohll (trail_setup->final_destination_finger_value); | ||
4248 | source = trail_setup->source_peer; | ||
4249 | is_predecessor = ntohl (trail_setup->is_predecessor); | ||
4250 | intermediate_trail_id = trail_setup->intermediate_trail_id; | ||
4251 | |||
4252 | /* Did the friend insert its ID in the trail list? */ | ||
4253 | if (trail_length > 0 && | ||
4254 | 0 != memcmp (&trail_peer_list[trail_length-1], peer, sizeof (struct GNUNET_PeerIdentity))) | ||
4255 | { | ||
4256 | GNUNET_break_op (0); | ||
4257 | return GNUNET_SYSERR; | ||
4258 | } | ||
4259 | |||
4260 | /* If I was the source and got the message back, then set trail length to 0.*/ | ||
4261 | if (0 == GNUNET_CRYPTO_cmp_peer_identity(&my_identity, &source)) | ||
4262 | { | ||
4263 | trail_length = 0; | ||
4264 | } | ||
4265 | |||
4266 | /* Check if you are present in the trail seen so far? */ | ||
4267 | for (i = 0; i < trail_length ; i++) | ||
4268 | { | ||
4269 | if(0 == GNUNET_CRYPTO_cmp_peer_identity(&trail_peer_list[i],&my_identity)) | ||
4270 | { | ||
4271 | /* We will add ourself later in code, if NOT destination. */ | ||
4272 | trail_length = i; | ||
4273 | break; | ||
4274 | } | ||
4275 | } | ||
4276 | |||
4277 | /* Is my routing table full? */ | ||
4278 | if (GNUNET_YES == GDS_ROUTING_threshold_reached()) | ||
4279 | { | ||
4280 | if (trail_length > 0) | ||
4281 | target_friend = | ||
4282 | GNUNET_CONTAINER_multipeermap_get (friend_peermap, | ||
4283 | &trail_peer_list[trail_length - 1]); | ||
4284 | else | ||
4285 | target_friend = | ||
4286 | GNUNET_CONTAINER_multipeermap_get (friend_peermap, | ||
4287 | &source); | ||
4288 | if(NULL == target_friend) | ||
4289 | { | ||
4290 | DEBUG ("\n friend not found"); | ||
4291 | GNUNET_break(0); | ||
4292 | return GNUNET_OK; | ||
4293 | } | ||
4294 | GDS_NEIGHBOURS_send_trail_rejection (source, final_dest_finger_val, | ||
4295 | my_identity, is_predecessor, | ||
4296 | trail_peer_list, trail_length, | ||
4297 | trail_id, target_friend, | ||
4298 | CONGESTION_TIMEOUT); | ||
4299 | return GNUNET_OK; | ||
4300 | } | ||
4301 | |||
4302 | /* Get the next hop to forward the trail setup request. */ | ||
4303 | struct Closest_Peer next_peer = | ||
4304 | get_local_best_known_next_hop (final_dest_finger_val, | ||
4305 | intermediate_trail_id, | ||
4306 | is_predecessor, | ||
4307 | source, | ||
4308 | ¤t_dest); | ||
4309 | |||
4310 | /* Am I the final destination? */ | ||
4311 | if (0 == (GNUNET_CRYPTO_cmp_peer_identity (&next_peer.best_known_destination, | ||
4312 | &my_identity))) | ||
4313 | { | ||
4314 | if(0 == GNUNET_CRYPTO_cmp_peer_identity (&source, &my_identity)) | ||
4315 | { | ||
4316 | finger_table_add (my_identity, NULL, 0, is_predecessor, | ||
4317 | final_dest_finger_val, trail_id); | ||
4318 | return GNUNET_OK; | ||
4319 | } | ||
4320 | |||
4321 | if (trail_length > 0) | ||
4322 | target_friend = | ||
4323 | GNUNET_CONTAINER_multipeermap_get (friend_peermap, | ||
4324 | &trail_peer_list[trail_length-1]); | ||
4325 | else | ||
4326 | target_friend = | ||
4327 | GNUNET_CONTAINER_multipeermap_get (friend_peermap, &source); | ||
4328 | if (NULL == target_friend) | ||
4329 | { | ||
4330 | GNUNET_break_op (0); | ||
4331 | return GNUNET_SYSERR; | ||
4332 | } | ||
4333 | GDS_ROUTING_add (trail_id, target_friend->id, my_identity); | ||
4334 | GDS_NEIGHBOURS_send_trail_setup_result (source, | ||
4335 | my_identity, | ||
4336 | target_friend, trail_length, | ||
4337 | trail_peer_list, | ||
4338 | is_predecessor, | ||
4339 | final_dest_finger_val,trail_id); | ||
4340 | } | ||
4341 | else /* I'm not the final destination. */ | ||
4342 | { | ||
4343 | target_friend = GNUNET_CONTAINER_multipeermap_get (friend_peermap, | ||
4344 | &next_peer.next_hop); | ||
4345 | if(NULL == target_friend) | ||
4346 | { | ||
4347 | DEBUG ("\n target friend not found for peer = %s", GNUNET_i2s(&next_peer.next_hop)); | ||
4348 | GNUNET_break (0); | ||
4349 | return GNUNET_OK; | ||
4350 | } | ||
4351 | if (0 != GNUNET_CRYPTO_cmp_peer_identity(&my_identity, &source)) | ||
4352 | { | ||
4353 | /* Add yourself to list of peers. */ | ||
4354 | struct GNUNET_PeerIdentity peer_list[trail_length + 1]; | ||
4355 | |||
4356 | memcpy (peer_list, trail_peer_list, | ||
4357 | trail_length * sizeof (struct GNUNET_PeerIdentity)); | ||
4358 | peer_list[trail_length] = my_identity; | ||
4359 | GDS_NEIGHBOURS_send_trail_setup (source, | ||
4360 | final_dest_finger_val, | ||
4361 | next_peer.best_known_destination, | ||
4362 | target_friend, trail_length + 1, peer_list, | ||
4363 | is_predecessor, trail_id, | ||
4364 | next_peer.trail_id); | ||
4365 | } | ||
4366 | else | ||
4367 | GDS_NEIGHBOURS_send_trail_setup (source, | ||
4368 | final_dest_finger_val, | ||
4369 | next_peer.best_known_destination, | ||
4370 | target_friend, 0, NULL, | ||
4371 | is_predecessor, trail_id, | ||
4372 | next_peer.trail_id); | ||
4373 | } | ||
4374 | return GNUNET_OK; | ||
4375 | } | ||
4376 | |||
4377 | |||
4378 | /** | ||
4379 | * Core handle for p2p trail setup result messages. | ||
4380 | * @param closure | ||
4381 | * @param message message | ||
4382 | * @param peer sender of this message. | ||
4383 | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | ||
4384 | */ | ||
4385 | static int | ||
4386 | handle_dht_p2p_trail_setup_result(void *cls, const struct GNUNET_PeerIdentity *peer, | ||
4387 | const struct GNUNET_MessageHeader *message) | ||
4388 | { | ||
4389 | const struct PeerTrailSetupResultMessage *trail_result; | ||
4390 | const struct GNUNET_PeerIdentity *trail_peer_list; | ||
4391 | struct GNUNET_PeerIdentity next_hop; | ||
4392 | struct FriendInfo *target_friend; | ||
4393 | struct GNUNET_PeerIdentity querying_peer; | ||
4394 | struct GNUNET_PeerIdentity finger_identity; | ||
4395 | uint32_t trail_length; | ||
4396 | uint64_t ulitmate_destination_finger_value; | ||
4397 | uint32_t is_predecessor; | ||
4398 | struct GNUNET_HashCode trail_id; | ||
4399 | int my_index; | ||
4400 | size_t msize; | ||
4401 | |||
4402 | msize = ntohs (message->size); | ||
4403 | if (msize < sizeof (struct PeerTrailSetupResultMessage)) | ||
4404 | { | ||
4405 | GNUNET_break_op (0); | ||
4406 | return GNUNET_YES; | ||
4407 | } | ||
4408 | |||
4409 | trail_result = (const struct PeerTrailSetupResultMessage *) message; | ||
4410 | if ((msize - sizeof (struct PeerTrailSetupResultMessage)) % | ||
4411 | sizeof (struct GNUNET_PeerIdentity) != 0) | ||
4412 | { | ||
4413 | GNUNET_break_op (0); | ||
4414 | return GNUNET_OK; | ||
4415 | } | ||
4416 | trail_length = (msize - sizeof (struct PeerTrailSetupResultMessage))/ | ||
4417 | sizeof (struct GNUNET_PeerIdentity); | ||
4418 | |||
4419 | GNUNET_STATISTICS_update (GDS_stats, | ||
4420 | gettext_noop | ||
4421 | ("# Bytes received from other peers"), msize, | ||
4422 | GNUNET_NO); | ||
4423 | |||
4424 | is_predecessor = ntohl (trail_result->is_predecessor); | ||
4425 | querying_peer = trail_result->querying_peer; | ||
4426 | finger_identity = trail_result->finger_identity; | ||
4427 | trail_id = trail_result->trail_id; | ||
4428 | trail_peer_list = (const struct GNUNET_PeerIdentity *) &trail_result[1]; | ||
4429 | ulitmate_destination_finger_value = | ||
4430 | GNUNET_ntohll (trail_result->ulitmate_destination_finger_value); | ||
4431 | |||
4432 | /* Am I the one who initiated the query? */ | ||
4433 | if (0 == (GNUNET_CRYPTO_cmp_peer_identity (&querying_peer, &my_identity))) | ||
4434 | { | ||
4435 | /* Check that you got the message from the correct peer. */ | ||
4436 | if (trail_length > 0) | ||
4437 | { | ||
4438 | GNUNET_assert(0 == GNUNET_CRYPTO_cmp_peer_identity (&trail_peer_list[0], | ||
4439 | peer)); | ||
4440 | } | ||
4441 | else | ||
4442 | { | ||
4443 | GNUNET_assert(0 == GNUNET_CRYPTO_cmp_peer_identity (&finger_identity, | ||
4444 | peer)); | ||
4445 | } | ||
4446 | GDS_ROUTING_add (trail_id, my_identity, *peer); | ||
4447 | finger_table_add (finger_identity, trail_peer_list, trail_length, | ||
4448 | is_predecessor, ulitmate_destination_finger_value, trail_id); | ||
4449 | return GNUNET_YES; | ||
4450 | } | ||
4451 | |||
4452 | /* Get my location in the trail. */ | ||
4453 | my_index = search_my_index (trail_peer_list, trail_length); | ||
4454 | if (-1 == my_index) | ||
4455 | { | ||
4456 | DEBUG ("Not found in trail\n"); | ||
4457 | GNUNET_break_op(0); | ||
4458 | return GNUNET_SYSERR; | ||
4459 | } | ||
4460 | //TODO; return -2. | ||
4461 | if ((trail_length + 1) == my_index) | ||
4462 | { | ||
4463 | DEBUG ("Found twice in trail.\n"); | ||
4464 | GNUNET_break_op(0); | ||
4465 | return GNUNET_SYSERR; | ||
4466 | } | ||
4467 | |||
4468 | //TODO; Refactor code here and above to check if sender peer is correct | ||
4469 | if (my_index == 0) | ||
4470 | { | ||
4471 | if(trail_length > 1) | ||
4472 | GNUNET_assert(0 == GNUNET_CRYPTO_cmp_peer_identity (&trail_peer_list[1], | ||
4473 | peer)); | ||
4474 | else | ||
4475 | GNUNET_assert(0 == GNUNET_CRYPTO_cmp_peer_identity (&finger_identity, | ||
4476 | peer)); | ||
4477 | next_hop = trail_result->querying_peer; | ||
4478 | } | ||
4479 | else | ||
4480 | { | ||
4481 | if(my_index == trail_length - 1) | ||
4482 | { | ||
4483 | GNUNET_assert(0 == | ||
4484 | GNUNET_CRYPTO_cmp_peer_identity (&finger_identity, | ||
4485 | peer)); | ||
4486 | } | ||
4487 | else | ||
4488 | GNUNET_assert(0 == | ||
4489 | GNUNET_CRYPTO_cmp_peer_identity (&trail_peer_list[my_index + 1], | ||
4490 | peer)); | ||
4491 | next_hop = trail_peer_list[my_index - 1]; | ||
4492 | } | ||
4493 | |||
4494 | target_friend = GNUNET_CONTAINER_multipeermap_get (friend_peermap, &next_hop); | ||
4495 | if (NULL == target_friend) | ||
4496 | { | ||
4497 | GNUNET_break_op (0); | ||
4498 | return GNUNET_SYSERR; | ||
4499 | } | ||
4500 | GDS_ROUTING_add (trail_id, next_hop, *peer); | ||
4501 | GDS_NEIGHBOURS_send_trail_setup_result (querying_peer, finger_identity, | ||
4502 | target_friend, trail_length, trail_peer_list, | ||
4503 | is_predecessor, | ||
4504 | ulitmate_destination_finger_value, | ||
4505 | trail_id); | ||
4506 | return GNUNET_OK; | ||
4507 | } | ||
4508 | |||
4509 | |||
4510 | /** | ||
4511 | * Invert the trail. | ||
4512 | * @param trail Trail to be inverted | ||
4513 | * @param trail_length Total number of peers in the trail. | ||
4514 | * @return Updated trail | ||
4515 | */ | ||
4516 | static struct GNUNET_PeerIdentity * | ||
4517 | invert_trail (const struct GNUNET_PeerIdentity *trail, | ||
4518 | unsigned int trail_length) | ||
4519 | { | ||
4520 | int i; | ||
4521 | int j; | ||
4522 | struct GNUNET_PeerIdentity *inverted_trail; | ||
4523 | |||
4524 | inverted_trail = GNUNET_malloc (sizeof(struct GNUNET_PeerIdentity) * | ||
4525 | trail_length); | ||
4526 | i = 0; | ||
4527 | j = trail_length - 1; | ||
4528 | while (i < trail_length) | ||
4529 | { | ||
4530 | inverted_trail[i] = trail[j]; | ||
4531 | i++; | ||
4532 | j--; | ||
4533 | } | ||
4534 | |||
4535 | GNUNET_assert(NULL != GNUNET_CONTAINER_multipeermap_get(friend_peermap, | ||
4536 | &inverted_trail[0])); | ||
4537 | return inverted_trail; | ||
4538 | } | ||
4539 | |||
4540 | |||
4541 | /** | ||
4542 | * Return the shortest trail among all the trails to reach to finger from me. | ||
4543 | * @param finger Finger | ||
4544 | * @param shortest_trail_length[out] Trail length of shortest trail from me | ||
4545 | * to @a finger | ||
4546 | * @return Shortest trail. | ||
4547 | */ | ||
4548 | static struct GNUNET_PeerIdentity * | ||
4549 | get_shortest_trail (struct FingerInfo *finger, | ||
4550 | unsigned int *trail_length) | ||
4551 | { | ||
4552 | struct Trail *trail; | ||
4553 | unsigned int flag = 0; | ||
4554 | unsigned int shortest_trail_index = 0; | ||
4555 | int shortest_trail_length = -1; | ||
4556 | struct Trail_Element *trail_element; | ||
4557 | struct GNUNET_PeerIdentity *trail_list; | ||
4558 | unsigned int i; | ||
4559 | |||
4560 | /* Get the shortest trail to reach to current successor. */ | ||
4561 | for (i = 0; i < finger->trails_count; i++) | ||
4562 | { | ||
4563 | trail = &finger->trail_list[i]; | ||
4564 | |||
4565 | if (0 == flag) | ||
4566 | { | ||
4567 | shortest_trail_index = i; | ||
4568 | shortest_trail_length = trail->trail_length; | ||
4569 | flag = 1; | ||
4570 | continue; | ||
4571 | } | ||
4572 | |||
4573 | if (shortest_trail_length > trail->trail_length) | ||
4574 | { | ||
4575 | shortest_trail_index = i; | ||
4576 | shortest_trail_length = trail->trail_length; | ||
4577 | } | ||
4578 | continue; | ||
4579 | } | ||
4580 | |||
4581 | /* Copy the shortest trail and return. */ | ||
4582 | trail = &finger->trail_list[shortest_trail_index]; | ||
4583 | trail_element = trail->trail_head; | ||
4584 | |||
4585 | trail_list = GNUNET_malloc (sizeof(struct GNUNET_PeerIdentity)* | ||
4586 | shortest_trail_length); | ||
4587 | |||
4588 | for(i = 0; i < shortest_trail_length; i++,trail_element = trail_element->next) | ||
4589 | { | ||
4590 | trail_list[i] = trail_element->peer; | ||
4591 | } | ||
4592 | |||
4593 | GNUNET_assert(shortest_trail_length != -1); | ||
4594 | |||
4595 | *trail_length = shortest_trail_length; | ||
4596 | return trail_list; | ||
4597 | } | ||
4598 | |||
4599 | |||
4600 | /** | ||
4601 | * Check if trail_1 and trail_2 have any common element. If yes then join | ||
4602 | * them at common element. trail_1 always preceeds trail_2 in joined trail. | ||
4603 | * @param trail_1 Trail from source to me, NOT including endpoints. | ||
4604 | * @param trail_1_len Total number of peers @a trail_1 | ||
4605 | * @param trail_2 Trail from me to current predecessor, NOT including endpoints. | ||
4606 | * @param trail_2_len Total number of peers @a trail_2 | ||
4607 | * @param joined_trail_len Total number of peers in combined trail of trail_1 | ||
4608 | * trail_2. | ||
4609 | * @return Joined trail. | ||
4610 | */ | ||
4611 | static struct GNUNET_PeerIdentity * | ||
4612 | check_for_duplicate_entries (const struct GNUNET_PeerIdentity *trail_1, | ||
4613 | unsigned int trail_1_len, | ||
4614 | struct GNUNET_PeerIdentity *trail_2, | ||
4615 | unsigned int trail_2_len, | ||
4616 | unsigned int *joined_trail_len) | ||
4617 | { | ||
4618 | struct GNUNET_PeerIdentity *joined_trail; | ||
4619 | unsigned int i; | ||
4620 | unsigned int j; | ||
4621 | unsigned int k; | ||
4622 | |||
4623 | for (i = 0; i < trail_1_len; i++) | ||
4624 | { | ||
4625 | for (j = 0; j < trail_2_len; j++) | ||
4626 | { | ||
4627 | if(0 != GNUNET_CRYPTO_cmp_peer_identity (&trail_1[i],&trail_2[j])) | ||
4628 | continue; | ||
4629 | |||
4630 | *joined_trail_len = i + (trail_2_len - j); | ||
4631 | joined_trail = GNUNET_malloc (*joined_trail_len * | ||
4632 | sizeof(struct GNUNET_PeerIdentity)); | ||
4633 | |||
4634 | |||
4635 | /* Copy all the elements from 0 to i into joined_trail. */ | ||
4636 | for(k = 0; k < ( i+1); k++) | ||
4637 | { | ||
4638 | joined_trail[k] = trail_1[k]; | ||
4639 | } | ||
4640 | |||
4641 | /* Increment j as entry stored is same as entry stored at i*/ | ||
4642 | j = j+1; | ||
4643 | |||
4644 | /* Copy all the elements from j to trail_2_len-1 to joined trail.*/ | ||
4645 | while(k <= (*joined_trail_len - 1)) | ||
4646 | { | ||
4647 | joined_trail[k] = trail_2[j]; | ||
4648 | j++; | ||
4649 | k++; | ||
4650 | } | ||
4651 | |||
4652 | return joined_trail; | ||
4653 | } | ||
4654 | } | ||
4655 | |||
4656 | /* Here you should join the trails. */ | ||
4657 | *joined_trail_len = trail_1_len + trail_2_len + 1; | ||
4658 | joined_trail = GNUNET_malloc (*joined_trail_len * | ||
4659 | sizeof(struct GNUNET_PeerIdentity)); | ||
4660 | |||
4661 | |||
4662 | for(i = 0; i < trail_1_len;i++) | ||
4663 | { | ||
4664 | joined_trail[i] = trail_1[i]; | ||
4665 | } | ||
4666 | |||
4667 | joined_trail[i] = my_identity; | ||
4668 | i++; | ||
4669 | |||
4670 | for (j = 0; i < *joined_trail_len; i++,j++) | ||
4671 | { | ||
4672 | joined_trail[i] = trail_2[j]; | ||
4673 | } | ||
4674 | |||
4675 | return joined_trail; | ||
4676 | } | ||
4677 | |||
4678 | |||
4679 | /** | ||
4680 | * Return the trail from source to my current predecessor. Check if source | ||
4681 | * is already part of the this trail, if yes then return the shorten trail. | ||
4682 | * @param current_trail Trail from source to me, NOT including the endpoints. | ||
4683 | * @param current_trail_length Number of peers in @a current_trail. | ||
4684 | * @param trail_src_to_curr_pred_length[out] Number of peers in trail from | ||
4685 | * source to my predecessor, NOT including | ||
4686 | * the endpoints. | ||
4687 | * @return Trail from source to my predecessor. | ||
4688 | */ | ||
4689 | static struct GNUNET_PeerIdentity * | ||
4690 | get_trail_src_to_curr_pred (struct GNUNET_PeerIdentity source_peer, | ||
4691 | const struct GNUNET_PeerIdentity *trail_src_to_me, | ||
4692 | unsigned int trail_src_to_me_len, | ||
4693 | unsigned int *trail_src_to_curr_pred_length) | ||
4694 | { | ||
4695 | struct GNUNET_PeerIdentity *trail_me_to_curr_pred; | ||
4696 | struct GNUNET_PeerIdentity *trail_src_to_curr_pred; | ||
4697 | unsigned int trail_me_to_curr_pred_length; | ||
4698 | struct FingerInfo *current_predecessor; | ||
4699 | int i; | ||
4700 | unsigned int j; | ||
4701 | unsigned int len; | ||
4702 | |||
4703 | current_predecessor = &finger_table[PREDECESSOR_FINGER_ID]; | ||
4704 | |||
4705 | /* Check if trail_src_to_me contains current_predecessor. */ | ||
4706 | for (i = 0; i < trail_src_to_me_len; i++) | ||
4707 | { | ||
4708 | if (0 != GNUNET_CRYPTO_cmp_peer_identity(&trail_src_to_me[i], | ||
4709 | ¤t_predecessor->finger_identity)) | ||
4710 | continue; | ||
4711 | |||
4712 | |||
4713 | *trail_src_to_curr_pred_length = i; | ||
4714 | |||
4715 | if(0 == i) | ||
4716 | return NULL; | ||
4717 | |||
4718 | trail_src_to_curr_pred = GNUNET_malloc (*trail_src_to_curr_pred_length * | ||
4719 | sizeof(struct GNUNET_PeerIdentity)); | ||
4720 | for (j = 0; j < i; j++) | ||
4721 | trail_src_to_curr_pred[j] = trail_src_to_me[j]; | ||
4722 | return trail_src_to_curr_pred; | ||
4723 | } | ||
4724 | |||
4725 | |||
4726 | trail_me_to_curr_pred = get_shortest_trail (current_predecessor, | ||
4727 | &trail_me_to_curr_pred_length); | ||
4728 | |||
4729 | /* Check if trail contains the source_peer. */ | ||
4730 | for (i = trail_me_to_curr_pred_length - 1; i >= 0; i--) | ||
4731 | { | ||
4732 | if (0 != GNUNET_CRYPTO_cmp_peer_identity (&source_peer, | ||
4733 | &trail_me_to_curr_pred[i])) | ||
4734 | continue; | ||
4735 | |||
4736 | /* Source is NOT part of trail. */ | ||
4737 | i++; | ||
4738 | |||
4739 | /* Source is the last element in the trail to reach to my pred. | ||
4740 | Source is direct friend of the pred. */ | ||
4741 | if (trail_me_to_curr_pred_length == i) | ||
4742 | { | ||
4743 | *trail_src_to_curr_pred_length = 0; | ||
4744 | GNUNET_free_non_null (trail_me_to_curr_pred); | ||
4745 | return NULL; | ||
4746 | } | ||
4747 | |||
4748 | *trail_src_to_curr_pred_length = trail_me_to_curr_pred_length - i; | ||
4749 | trail_src_to_curr_pred = GNUNET_malloc (sizeof (struct GNUNET_PeerIdentity)* | ||
4750 | *trail_src_to_curr_pred_length); | ||
4751 | |||
4752 | for (j = 0; j < *trail_src_to_curr_pred_length; i++,j++) | ||
4753 | trail_src_to_curr_pred[j] = trail_me_to_curr_pred[i]; | ||
4754 | GNUNET_free_non_null (trail_me_to_curr_pred); | ||
4755 | return trail_src_to_curr_pred; | ||
4756 | } | ||
4757 | |||
4758 | trail_src_to_curr_pred = check_for_duplicate_entries (trail_src_to_me, | ||
4759 | trail_src_to_me_len, | ||
4760 | trail_me_to_curr_pred, | ||
4761 | trail_me_to_curr_pred_length, | ||
4762 | &len); | ||
4763 | *trail_src_to_curr_pred_length = len; | ||
4764 | GNUNET_free_non_null(trail_me_to_curr_pred); | ||
4765 | return trail_src_to_curr_pred; | ||
4766 | } | ||
4767 | |||
4768 | |||
4769 | /** | ||
4770 | * Add finger as your predecessor. To add, first generate a new trail id, invert | ||
4771 | * the trail to get the trail from me to finger, add an entry in your routing | ||
4772 | * table, send add trail message to peers which are part of trail from me to | ||
4773 | * finger and add finger in finger table. | ||
4774 | * @param finger | ||
4775 | * @param trail | ||
4776 | * @param trail_length | ||
4777 | */ | ||
4778 | static void | ||
4779 | update_predecessor (struct GNUNET_PeerIdentity finger, | ||
4780 | struct GNUNET_PeerIdentity *trail, | ||
4781 | unsigned int trail_length) | ||
4782 | { | ||
4783 | struct GNUNET_HashCode trail_to_new_predecessor_id; | ||
4784 | struct GNUNET_PeerIdentity *trail_to_new_predecessor; | ||
4785 | struct FriendInfo *target_friend; | ||
4786 | |||
4787 | /* Generate trail id for trail from me to new predecessor = finger. */ | ||
4788 | GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_STRONG, | ||
4789 | &trail_to_new_predecessor_id, | ||
4790 | sizeof (trail_to_new_predecessor_id)); | ||
4791 | |||
4792 | if (0 == trail_length) | ||
4793 | { | ||
4794 | trail_to_new_predecessor = NULL; | ||
4795 | GDS_ROUTING_add (trail_to_new_predecessor_id, my_identity, finger); | ||
4796 | target_friend = GNUNET_CONTAINER_multipeermap_get (friend_peermap, &finger); | ||
4797 | if (NULL == target_friend) | ||
4798 | { | ||
4799 | GNUNET_break (0); | ||
4800 | return; | ||
4801 | } | ||
4802 | } | ||
4803 | else | ||
4804 | { | ||
4805 | /* Invert the trail to get the trail from me to finger, NOT including the | ||
4806 | endpoints.*/ | ||
4807 | GNUNET_assert(NULL != GNUNET_CONTAINER_multipeermap_get(friend_peermap, | ||
4808 | &trail[trail_length-1])); | ||
4809 | trail_to_new_predecessor = invert_trail (trail, trail_length); | ||
4810 | |||
4811 | /* Add an entry in your routing table. */ | ||
4812 | GDS_ROUTING_add (trail_to_new_predecessor_id, | ||
4813 | my_identity, | ||
4814 | trail_to_new_predecessor[0]); | ||
4815 | |||
4816 | GNUNET_assert (NULL != (target_friend = | ||
4817 | GNUNET_CONTAINER_multipeermap_get (friend_peermap, | ||
4818 | &trail_to_new_predecessor[0]))); | ||
4819 | } | ||
4820 | |||
4821 | /* Add entry in routing table of all peers that are part of trail from me | ||
4822 | to finger, including finger. */ | ||
4823 | GDS_NEIGHBOURS_send_add_trail (my_identity, | ||
4824 | finger, | ||
4825 | trail_to_new_predecessor_id, | ||
4826 | trail_to_new_predecessor, | ||
4827 | trail_length, | ||
4828 | target_friend); | ||
4829 | |||
4830 | add_new_finger (finger, trail_to_new_predecessor, trail_length, | ||
4831 | trail_to_new_predecessor_id, PREDECESSOR_FINGER_ID); | ||
4832 | GNUNET_free_non_null(trail_to_new_predecessor); | ||
4833 | } | ||
4834 | |||
4835 | |||
4836 | /* | ||
4837 | * Check if you already have a predecessor. If not then add finger as your | ||
4838 | * predecessor. If you have predecessor, then compare two peer identites. | ||
4839 | * If finger is correct predecessor, then remove the old entry, add finger in | ||
4840 | * finger table and send add_trail message to add the trail in the routing | ||
4841 | * table of all peers which are part of trail to reach from me to finger. | ||
4842 | * @param finger New peer which may be our predecessor. | ||
4843 | * @param trail List of peers to reach from @finger to me. | ||
4844 | * @param trail_length Total number of peer in @a trail. | ||
4845 | */ | ||
4846 | static void | ||
4847 | compare_and_update_predecessor (struct GNUNET_PeerIdentity finger, | ||
4848 | struct GNUNET_PeerIdentity *trail, | ||
4849 | unsigned int trail_length) | ||
4850 | { | ||
4851 | struct FingerInfo *current_predecessor; | ||
4852 | struct GNUNET_PeerIdentity closest_peer; | ||
4853 | uint64_t predecessor_value; | ||
4854 | unsigned int is_predecessor = 1; | ||
4855 | |||
4856 | current_predecessor = &finger_table[PREDECESSOR_FINGER_ID]; | ||
4857 | GNUNET_assert (0 != GNUNET_CRYPTO_cmp_peer_identity (&finger, &my_identity)); | ||
4858 | |||
4859 | /* No predecessor. Add finger as your predecessor. */ | ||
4860 | if (GNUNET_NO == current_predecessor->is_present) | ||
4861 | { | ||
4862 | update_predecessor (finger, trail, trail_length); | ||
4863 | return; | ||
4864 | } | ||
4865 | |||
4866 | if (0 == GNUNET_CRYPTO_cmp_peer_identity (¤t_predecessor->finger_identity, | ||
4867 | &finger)) | ||
4868 | { | ||
4869 | return; | ||
4870 | } | ||
4871 | |||
4872 | predecessor_value = compute_finger_identity_value (PREDECESSOR_FINGER_ID); | ||
4873 | closest_peer = select_closest_peer (&finger, | ||
4874 | ¤t_predecessor->finger_identity, | ||
4875 | predecessor_value, is_predecessor); | ||
4876 | |||
4877 | /* Finger is the closest predecessor. Remove the existing one and add the new | ||
4878 | one. */ | ||
4879 | if (0 == GNUNET_CRYPTO_cmp_peer_identity(&closest_peer, &finger)) | ||
4880 | { | ||
4881 | remove_existing_finger (current_predecessor, PREDECESSOR_FINGER_ID); | ||
4882 | update_predecessor (finger, trail, trail_length); | ||
4883 | return; | ||
4884 | } | ||
4885 | return; | ||
4886 | } | ||
4887 | |||
4888 | |||
4889 | /* | ||
4890 | * Core handle for p2p verify successor messages. | ||
4891 | * @param cls closure | ||
4892 | * @param message message | ||
4893 | * @param peer peer identity this notification is about | ||
4894 | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | ||
4895 | */ | ||
4896 | static int | ||
4897 | handle_dht_p2p_verify_successor(void *cls, | ||
4898 | const struct GNUNET_PeerIdentity *peer, | ||
4899 | const struct GNUNET_MessageHeader *message) | ||
4900 | { | ||
4901 | const struct PeerVerifySuccessorMessage *vsm; | ||
4902 | struct GNUNET_HashCode trail_id; | ||
4903 | struct GNUNET_PeerIdentity successor; | ||
4904 | struct GNUNET_PeerIdentity source_peer; | ||
4905 | struct GNUNET_PeerIdentity *trail; | ||
4906 | struct GNUNET_PeerIdentity *next_hop; | ||
4907 | struct FingerInfo current_predecessor; | ||
4908 | struct FriendInfo *target_friend; | ||
4909 | unsigned int trail_src_to_curr_pred_len = 0; | ||
4910 | struct GNUNET_PeerIdentity *trail_src_to_curr_pred; | ||
4911 | unsigned int trail_length; | ||
4912 | size_t msize; | ||
4913 | |||
4914 | msize = ntohs (message->size); | ||
4915 | |||
4916 | if (msize < sizeof (struct PeerVerifySuccessorMessage)) | ||
4917 | { | ||
4918 | GNUNET_break_op (0); | ||
4919 | return GNUNET_YES; | ||
4920 | } | ||
4921 | |||
4922 | vsm = (const struct PeerVerifySuccessorMessage *) message; | ||
4923 | trail_length = (msize - sizeof (struct PeerVerifySuccessorMessage))/ | ||
4924 | sizeof (struct GNUNET_PeerIdentity); | ||
4925 | if ((msize - sizeof (struct PeerVerifySuccessorMessage)) % | ||
4926 | sizeof (struct GNUNET_PeerIdentity) != 0) | ||
4927 | { | ||
4928 | GNUNET_break_op (0); | ||
4929 | return GNUNET_OK; | ||
4930 | } | ||
4931 | |||
4932 | GNUNET_STATISTICS_update (GDS_stats, | ||
4933 | gettext_noop | ||
4934 | ("# Bytes received from other peers"), msize, | ||
4935 | GNUNET_NO); | ||
4936 | |||
4937 | trail_id = vsm->trail_id; | ||
4938 | source_peer = vsm->source_peer; | ||
4939 | successor = vsm->successor; | ||
4940 | trail = (struct GNUNET_PeerIdentity *)&vsm[1]; | ||
4941 | |||
4942 | /* I am NOT the successor of source_peer. Pass the message to next_hop on | ||
4943 | * the trail. */ | ||
4944 | if(0 != (GNUNET_CRYPTO_cmp_peer_identity (&successor, &my_identity))) | ||
4945 | { | ||
4946 | next_hop = GDS_ROUTING_get_next_hop (trail_id, GDS_ROUTING_SRC_TO_DEST); | ||
4947 | if (NULL == next_hop) | ||
4948 | { | ||
4949 | return GNUNET_OK; | ||
4950 | } | ||
4951 | |||
4952 | target_friend = GNUNET_CONTAINER_multipeermap_get (friend_peermap, next_hop); | ||
4953 | |||
4954 | if(NULL == target_friend) | ||
4955 | { | ||
4956 | GNUNET_break_op(0); | ||
4957 | return GNUNET_OK; | ||
4958 | } | ||
4959 | GDS_NEIGHBOURS_send_verify_successor_message (source_peer, successor, | ||
4960 | trail_id, trail, trail_length, | ||
4961 | target_friend); | ||
4962 | return GNUNET_OK; | ||
4963 | } | ||
4964 | |||
4965 | /* I am the destination of this message. */ | ||
4966 | |||
4967 | /* Check if the source_peer could be our predecessor and if yes then update | ||
4968 | * it. */ | ||
4969 | compare_and_update_predecessor (source_peer, trail, trail_length); | ||
4970 | current_predecessor = finger_table[PREDECESSOR_FINGER_ID]; | ||
4971 | |||
4972 | /* Is source of this message NOT my predecessor. */ | ||
4973 | if (0 != (GNUNET_CRYPTO_cmp_peer_identity (¤t_predecessor.finger_identity, | ||
4974 | &source_peer))) | ||
4975 | { | ||
4976 | trail_src_to_curr_pred = | ||
4977 | get_trail_src_to_curr_pred (source_peer, | ||
4978 | trail, | ||
4979 | trail_length, | ||
4980 | &trail_src_to_curr_pred_len); | ||
4981 | } | ||
4982 | else | ||
4983 | { | ||
4984 | trail_src_to_curr_pred_len = trail_length; | ||
4985 | unsigned int i; | ||
4986 | |||
4987 | trail_src_to_curr_pred = | ||
4988 | GNUNET_malloc (sizeof(struct GNUNET_PeerIdentity) | ||
4989 | *trail_src_to_curr_pred_len); | ||
4990 | for(i = 0; i < trail_src_to_curr_pred_len; i++) | ||
4991 | { | ||
4992 | trail_src_to_curr_pred[i] = trail[i]; | ||
4993 | } | ||
4994 | } | ||
4995 | |||
4996 | GNUNET_assert (NULL != | ||
4997 | (target_friend = | ||
4998 | GNUNET_CONTAINER_multipeermap_get (friend_peermap, peer))); | ||
4999 | GDS_NEIGHBOURS_send_verify_successor_result (source_peer, my_identity, | ||
5000 | current_predecessor.finger_identity, | ||
5001 | trail_id, trail_src_to_curr_pred, | ||
5002 | trail_src_to_curr_pred_len, | ||
5003 | GDS_ROUTING_DEST_TO_SRC, | ||
5004 | target_friend); | ||
5005 | GNUNET_free_non_null(trail_src_to_curr_pred); | ||
5006 | return GNUNET_OK; | ||
5007 | } | ||
5008 | |||
5009 | |||
5010 | /** | ||
5011 | * If the trail from me to my probable successor contains a friend not | ||
5012 | * at index 0, then we can shorten the trail. | ||
5013 | * @param probable_successor Peer which is our probable successor | ||
5014 | * @param trail_me_to_probable_successor Peers in path from me to my probable | ||
5015 | * successor, NOT including the endpoints. | ||
5016 | * @param trail_me_to_probable_successor_len Total number of peers in | ||
5017 | * @a trail_me_to_probable_succesor. | ||
5018 | * @return Updated trail, if any friend found. | ||
5019 | * Else the trail_me_to_probable_successor. | ||
5020 | */ | ||
5021 | struct GNUNET_PeerIdentity * | ||
5022 | check_trail_me_to_probable_succ (struct GNUNET_PeerIdentity probable_successor, | ||
5023 | const struct GNUNET_PeerIdentity *trail_me_to_probable_successor, | ||
5024 | unsigned int trail_me_to_probable_successor_len, | ||
5025 | unsigned int *trail_to_new_successor_length) | ||
5026 | { | ||
5027 | unsigned int i; | ||
5028 | unsigned int j; | ||
5029 | struct GNUNET_PeerIdentity *trail_to_new_successor; | ||
5030 | |||
5031 | /* Probable successor is a friend */ | ||
5032 | if (NULL != GNUNET_CONTAINER_multipeermap_get (friend_peermap, | ||
5033 | &probable_successor)) | ||
5034 | { | ||
5035 | trail_to_new_successor = NULL; | ||
5036 | *trail_to_new_successor_length = 0; | ||
5037 | return trail_to_new_successor; | ||
5038 | } | ||
5039 | |||
5040 | /* Is there any friend of yours in this trail. */ | ||
5041 | if(trail_me_to_probable_successor_len > 1) | ||
5042 | { | ||
5043 | for (i = trail_me_to_probable_successor_len - 1; i > 0; i--) | ||
5044 | { | ||
5045 | if (NULL == GNUNET_CONTAINER_multipeermap_get (friend_peermap, | ||
5046 | &trail_me_to_probable_successor[i])) | ||
5047 | continue; | ||
5048 | |||
5049 | *trail_to_new_successor_length = (trail_me_to_probable_successor_len - i); | ||
5050 | trail_to_new_successor = GNUNET_malloc (sizeof(struct GNUNET_PeerIdentity)* | ||
5051 | *trail_to_new_successor_length); | ||
5052 | |||
5053 | |||
5054 | for(j = 0; j < *trail_to_new_successor_length; i++,j++) | ||
5055 | { | ||
5056 | trail_to_new_successor[j] = trail_me_to_probable_successor[i]; | ||
5057 | } | ||
5058 | |||
5059 | return trail_to_new_successor; | ||
5060 | } | ||
5061 | } | ||
5062 | |||
5063 | *trail_to_new_successor_length = trail_me_to_probable_successor_len; | ||
5064 | return (struct GNUNET_PeerIdentity*)trail_me_to_probable_successor; | ||
5065 | } | ||
5066 | |||
5067 | // TODO: Move up | ||
5068 | struct SendNotifyContext | ||
5069 | { | ||
5070 | struct GNUNET_PeerIdentity source_peer; | ||
5071 | struct GNUNET_PeerIdentity successor; | ||
5072 | struct GNUNET_PeerIdentity *successor_trail; | ||
5073 | unsigned int successor_trail_length; | ||
5074 | struct GNUNET_HashCode succesor_trail_id; | ||
5075 | struct FriendInfo *target_friend; | ||
5076 | unsigned int num_retries_scheduled; | ||
5077 | }; | ||
5078 | |||
5079 | void | ||
5080 | send_notify_new_successor (void *cls, | ||
5081 | const struct GNUNET_SCHEDULER_TaskContext | ||
5082 | * tc); | ||
5083 | |||
5084 | /** | ||
5085 | * Check if the peer which sent us verify successor result message is still ours | ||
5086 | * successor or not. If not, then compare existing successor and probable successor. | ||
5087 | * In case probable successor is the correct successor, remove the existing | ||
5088 | * successor. Add probable successor as new successor. Send notify new successor | ||
5089 | * message to new successor. | ||
5090 | * @param curr_succ Peer to which we sent the verify successor message. It may | ||
5091 | * or may not be our real current successor, as we may have few iterations of | ||
5092 | * find finger trail task. | ||
5093 | * @param probable_successor Peer which should be our successor accroding to @a | ||
5094 | * curr_succ | ||
5095 | * @param trail List of peers to reach from me to @a probable successor, NOT including | ||
5096 | * endpoints. | ||
5097 | * @param trail_length Total number of peers in @a trail. | ||
5098 | */ | ||
5099 | static void | ||
5100 | compare_and_update_successor (struct GNUNET_PeerIdentity curr_succ, | ||
5101 | struct GNUNET_PeerIdentity probable_successor, | ||
5102 | const struct GNUNET_PeerIdentity *trail, | ||
5103 | unsigned int trail_length) | ||
5104 | { | ||
5105 | struct FingerInfo *current_successor; | ||
5106 | struct GNUNET_PeerIdentity closest_peer; | ||
5107 | struct GNUNET_HashCode trail_id; | ||
5108 | struct GNUNET_PeerIdentity *trail_me_to_probable_succ; | ||
5109 | struct FriendInfo *target_friend; | ||
5110 | unsigned int trail_me_to_probable_succ_len; | ||
5111 | unsigned int is_predecessor = 0; | ||
5112 | uint64_t successor_value; | ||
5113 | |||
5114 | current_successor = &finger_table[0]; | ||
5115 | successor_value = compute_finger_identity_value(0); | ||
5116 | |||
5117 | /* If probable successor is same as current_successor, do nothing. */ | ||
5118 | if(0 == GNUNET_CRYPTO_cmp_peer_identity (&probable_successor, | ||
5119 | ¤t_successor->finger_identity)) | ||
5120 | { | ||
5121 | if ((NULL != GDS_stats)) | ||
5122 | { | ||
5123 | char *my_id_str; | ||
5124 | uint64_t succ; | ||
5125 | char *key; | ||
5126 | uint64_t my_id; | ||
5127 | memcpy (&my_id, &my_identity, sizeof(uint64_t)); | ||
5128 | my_id_str = GNUNET_strdup (GNUNET_i2s_full (&my_identity)); | ||
5129 | memcpy(&succ, ¤t_successor->finger_identity, sizeof(uint64_t)); | ||
5130 | succ = GNUNET_ntohll(succ); | ||
5131 | GNUNET_asprintf (&key, "XDHT:%s:", my_id_str); | ||
5132 | GNUNET_free (my_id_str); | ||
5133 | |||
5134 | GNUNET_STATISTICS_set (GDS_stats, key, succ, 0); | ||
5135 | GNUNET_free (key); | ||
5136 | } | ||
5137 | if (send_verify_successor_task == NULL) | ||
5138 | send_verify_successor_task = | ||
5139 | GNUNET_SCHEDULER_add_delayed(verify_successor_next_send_time, | ||
5140 | &send_verify_successor_message, | ||
5141 | NULL); | ||
5142 | return; | ||
5143 | } | ||
5144 | closest_peer = select_closest_peer (&probable_successor, | ||
5145 | ¤t_successor->finger_identity, | ||
5146 | successor_value, is_predecessor); | ||
5147 | |||
5148 | /* If the current_successor in the finger table is closest, then do nothing. */ | ||
5149 | if (0 == GNUNET_CRYPTO_cmp_peer_identity (&closest_peer , | ||
5150 | ¤t_successor->finger_identity)) | ||
5151 | { | ||
5152 | //FIXME: Is this a good place to return the stats. | ||
5153 | if ((NULL != GDS_stats)) | ||
5154 | { | ||
5155 | char *my_id_str; | ||
5156 | uint64_t succ; | ||
5157 | char *key; | ||
5158 | |||
5159 | my_id_str = GNUNET_strdup (GNUNET_i2s_full (&my_identity)); | ||
5160 | memcpy(&succ, ¤t_successor->finger_identity, sizeof(uint64_t)); | ||
5161 | GNUNET_asprintf (&key, "XDHT:%s:", my_id_str); | ||
5162 | GNUNET_free (my_id_str); | ||
5163 | GNUNET_STATISTICS_set (GDS_stats, key, succ, 0); | ||
5164 | GNUNET_free (key); | ||
5165 | } | ||
5166 | |||
5167 | if(0 == successor_times) | ||
5168 | { | ||
5169 | // successor_times = 3; | ||
5170 | verify_successor_next_send_time = | ||
5171 | GNUNET_TIME_STD_BACKOFF (verify_successor_next_send_time); | ||
5172 | } | ||
5173 | else | ||
5174 | successor_times--; | ||
5175 | |||
5176 | |||
5177 | if (send_verify_successor_task == NULL) | ||
5178 | send_verify_successor_task = | ||
5179 | GNUNET_SCHEDULER_add_delayed(verify_successor_next_send_time, | ||
5180 | &send_verify_successor_message, | ||
5181 | NULL); | ||
5182 | return; | ||
5183 | } | ||
5184 | |||
5185 | /* Probable successor is the closest peer.*/ | ||
5186 | if(trail_length > 0) | ||
5187 | { | ||
5188 | GNUNET_assert(NULL != GNUNET_CONTAINER_multipeermap_get(friend_peermap, | ||
5189 | &trail[0])); | ||
5190 | } | ||
5191 | else | ||
5192 | { | ||
5193 | GNUNET_assert(NULL != GNUNET_CONTAINER_multipeermap_get(friend_peermap, | ||
5194 | &probable_successor)); | ||
5195 | } | ||
5196 | |||
5197 | trail_me_to_probable_succ_len = 0; | ||
5198 | trail_me_to_probable_succ = | ||
5199 | check_trail_me_to_probable_succ (probable_successor, | ||
5200 | trail, trail_length, | ||
5201 | &trail_me_to_probable_succ_len); | ||
5202 | |||
5203 | /* Remove the existing successor. */ | ||
5204 | remove_existing_finger (current_successor, 0); | ||
5205 | /* Generate a new trail id to reach to your new successor. */ | ||
5206 | GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_STRONG, | ||
5207 | &trail_id, sizeof (trail_id)); | ||
5208 | |||
5209 | if (trail_me_to_probable_succ_len > 0) | ||
5210 | { | ||
5211 | GDS_ROUTING_add (trail_id, my_identity, trail_me_to_probable_succ[0]); | ||
5212 | GNUNET_assert (NULL != | ||
5213 | (target_friend = | ||
5214 | GNUNET_CONTAINER_multipeermap_get (friend_peermap, | ||
5215 | &trail_me_to_probable_succ[0]))); | ||
5216 | } | ||
5217 | else | ||
5218 | { | ||
5219 | GDS_ROUTING_add (trail_id, my_identity, probable_successor); | ||
5220 | GNUNET_assert (NULL != | ||
5221 | (target_friend = | ||
5222 | GNUNET_CONTAINER_multipeermap_get (friend_peermap, | ||
5223 | &probable_successor))); | ||
5224 | } | ||
5225 | |||
5226 | add_new_finger (probable_successor, trail_me_to_probable_succ, | ||
5227 | trail_me_to_probable_succ_len, trail_id, 0); | ||
5228 | |||
5229 | struct SendNotifyContext *notify_ctx; | ||
5230 | |||
5231 | notify_ctx = GNUNET_new(struct SendNotifyContext); | ||
5232 | |||
5233 | notify_ctx->source_peer = my_identity; | ||
5234 | notify_ctx->successor = probable_successor; | ||
5235 | notify_ctx->successor_trail = | ||
5236 | GNUNET_malloc(sizeof(struct GNUNET_PeerIdentity) * trail_me_to_probable_succ_len); | ||
5237 | memcpy(notify_ctx->successor_trail, trail_me_to_probable_succ, | ||
5238 | sizeof(struct GNUNET_PeerIdentity) * trail_me_to_probable_succ_len); | ||
5239 | notify_ctx->successor_trail_length = trail_me_to_probable_succ_len; | ||
5240 | notify_ctx->succesor_trail_id = trail_id; | ||
5241 | notify_ctx->target_friend = target_friend; | ||
5242 | notify_ctx->num_retries_scheduled = 0; | ||
5243 | GNUNET_free_non_null (trail_me_to_probable_succ); | ||
5244 | |||
5245 | // TODO: Check if we should verify before schedule if already scheduled. | ||
5246 | GNUNET_SCHEDULER_add_now(&send_notify_new_successor, (void*)notify_ctx); | ||
5247 | } | ||
5248 | |||
5249 | |||
5250 | |||
5251 | void | ||
5252 | send_notify_new_successor (void *cls, | ||
5253 | const struct GNUNET_SCHEDULER_TaskContext | ||
5254 | * tc) | ||
5255 | { | ||
5256 | struct SendNotifyContext *ctx = (struct SendNotifyContext *) cls; | ||
5257 | |||
5258 | GDS_NEIGHBOURS_send_notify_new_successor (ctx->source_peer, | ||
5259 | ctx->successor, | ||
5260 | ctx->successor_trail, | ||
5261 | ctx->successor_trail_length, | ||
5262 | ctx->succesor_trail_id, | ||
5263 | ctx->target_friend); | ||
5264 | |||
5265 | if (0 == ctx->num_retries_scheduled && | ||
5266 | send_notify_new_successor_retry_task != NULL) | ||
5267 | { | ||
5268 | // Result from previous notify successos hasn't arrived, so the retry task | ||
5269 | // hasn't been cancelled! Already a new notify successor must be called. | ||
5270 | // We will cancel the retry request. | ||
5271 | struct SendNotifyContext *old_notify_ctx; | ||
5272 | old_notify_ctx = GNUNET_SCHEDULER_cancel(send_notify_new_successor_retry_task); | ||
5273 | GNUNET_free (old_notify_ctx->successor_trail); | ||
5274 | GNUNET_free (old_notify_ctx); | ||
5275 | send_notify_new_successor_retry_task = NULL; | ||
5276 | } | ||
5277 | |||
5278 | ctx->num_retries_scheduled++; | ||
5279 | send_notify_new_successor_retry_task = GNUNET_SCHEDULER_add_delayed(notify_successor_retry_time, | ||
5280 | &send_notify_new_successor, | ||
5281 | cls); | ||
5282 | } | ||
5283 | |||
5284 | /* | ||
5285 | * Core handle for p2p verify successor result messages. | ||
5286 | * @param cls closure | ||
5287 | * @param message message | ||
5288 | * @param peer peer identity this notification is about | ||
5289 | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | ||
5290 | */ | ||
5291 | static int | ||
5292 | handle_dht_p2p_verify_successor_result(void *cls, | ||
5293 | const struct GNUNET_PeerIdentity *peer, | ||
5294 | const struct GNUNET_MessageHeader *message) | ||
5295 | { | ||
5296 | const struct PeerVerifySuccessorResultMessage *vsrm; | ||
5297 | enum GDS_ROUTING_trail_direction trail_direction; | ||
5298 | struct GNUNET_PeerIdentity querying_peer; | ||
5299 | struct GNUNET_HashCode trail_id; | ||
5300 | struct GNUNET_PeerIdentity *next_hop; | ||
5301 | struct FriendInfo *target_friend; | ||
5302 | struct GNUNET_PeerIdentity probable_successor; | ||
5303 | struct GNUNET_PeerIdentity current_successor; | ||
5304 | const struct GNUNET_PeerIdentity *trail; | ||
5305 | unsigned int trail_length; | ||
5306 | size_t msize; | ||
5307 | |||
5308 | msize = ntohs (message->size); | ||
5309 | if (msize < sizeof (struct PeerVerifySuccessorResultMessage)) | ||
5310 | { | ||
5311 | GNUNET_break_op (0); | ||
5312 | return GNUNET_YES; | ||
5313 | } | ||
5314 | |||
5315 | vsrm = (const struct PeerVerifySuccessorResultMessage *) message; | ||
5316 | if ((msize - sizeof (struct PeerVerifySuccessorResultMessage)) % | ||
5317 | sizeof (struct GNUNET_PeerIdentity) != 0) | ||
5318 | { | ||
5319 | GNUNET_break_op (0); | ||
5320 | return GNUNET_OK; | ||
5321 | } | ||
5322 | trail_length = (msize - sizeof (struct PeerVerifySuccessorResultMessage))/ | ||
5323 | sizeof (struct GNUNET_PeerIdentity); | ||
5324 | |||
5325 | GNUNET_STATISTICS_update (GDS_stats, | ||
5326 | gettext_noop | ||
5327 | ("# Bytes received from other peers"), msize, | ||
5328 | GNUNET_NO); | ||
5329 | |||
5330 | trail = (const struct GNUNET_PeerIdentity *) &vsrm[1]; | ||
5331 | querying_peer = vsrm->querying_peer; | ||
5332 | trail_direction = ntohl (vsrm->trail_direction); | ||
5333 | trail_id = vsrm->trail_id; | ||
5334 | probable_successor = vsrm->probable_successor; | ||
5335 | current_successor = vsrm->current_successor; | ||
5336 | |||
5337 | /* I am the querying_peer. */ | ||
5338 | if(0 == (GNUNET_CRYPTO_cmp_peer_identity (&querying_peer, &my_identity))) | ||
5339 | { | ||
5340 | /* Cancel Retry Task */ | ||
5341 | if (NULL != send_verify_successor_retry_task) | ||
5342 | { | ||
5343 | struct VerifySuccessorContext *ctx; | ||
5344 | ctx = GNUNET_SCHEDULER_cancel(send_verify_successor_retry_task); | ||
5345 | GNUNET_free(ctx); | ||
5346 | send_verify_successor_retry_task = NULL; | ||
5347 | } | ||
5348 | compare_and_update_successor (current_successor, | ||
5349 | probable_successor, trail, trail_length); | ||
5350 | return GNUNET_OK; | ||
5351 | } | ||
5352 | |||
5353 | /*If you are not the querying peer then pass on the message */ | ||
5354 | if(NULL == (next_hop = | ||
5355 | GDS_ROUTING_get_next_hop (trail_id, trail_direction))) | ||
5356 | { | ||
5357 | /* Here it may happen that source peer has found a new successor, and removed | ||
5358 | the trail, Hence no entry found in the routing table. Fail silently.*/ | ||
5359 | DEBUG(" NO ENTRY FOUND IN %s ROUTING TABLE for trail id %s, line", | ||
5360 | GNUNET_i2s(&my_identity), GNUNET_h2s(&trail_id), __LINE__); | ||
5361 | GNUNET_break_op(0); | ||
5362 | return GNUNET_OK; | ||
5363 | } | ||
5364 | if (NULL == (target_friend = | ||
5365 | GNUNET_CONTAINER_multipeermap_get (friend_peermap, next_hop))) | ||
5366 | { | ||
5367 | GNUNET_break_op(0); | ||
5368 | return GNUNET_OK; | ||
5369 | } | ||
5370 | GDS_NEIGHBOURS_send_verify_successor_result (querying_peer, | ||
5371 | vsrm->current_successor, | ||
5372 | probable_successor, trail_id, | ||
5373 | trail, | ||
5374 | trail_length, | ||
5375 | trail_direction, target_friend); | ||
5376 | return GNUNET_OK; | ||
5377 | } | ||
5378 | |||
5379 | |||
5380 | /* | ||
5381 | * Core handle for p2p notify new successor messages. | ||
5382 | * @param cls closure | ||
5383 | * @param message message | ||
5384 | * @param peer peer identity this notification is about | ||
5385 | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | ||
5386 | */ | ||
5387 | static int | ||
5388 | handle_dht_p2p_notify_new_successor(void *cls, | ||
5389 | const struct GNUNET_PeerIdentity *peer, | ||
5390 | const struct GNUNET_MessageHeader *message) | ||
5391 | { | ||
5392 | const struct PeerNotifyNewSuccessorMessage *nsm; | ||
5393 | struct GNUNET_PeerIdentity *trail; | ||
5394 | struct GNUNET_PeerIdentity source; | ||
5395 | struct GNUNET_PeerIdentity new_successor; | ||
5396 | struct GNUNET_HashCode trail_id; | ||
5397 | struct GNUNET_PeerIdentity next_hop; | ||
5398 | struct FriendInfo *target_friend; | ||
5399 | int my_index; | ||
5400 | size_t msize; | ||
5401 | uint32_t trail_length; | ||
5402 | |||
5403 | msize = ntohs (message->size); | ||
5404 | if (msize < sizeof (struct PeerNotifyNewSuccessorMessage)) | ||
5405 | { | ||
5406 | GNUNET_break_op (0); | ||
5407 | return GNUNET_YES; | ||
5408 | } | ||
5409 | nsm = (const struct PeerNotifyNewSuccessorMessage *) message; | ||
5410 | if ((msize - sizeof (struct PeerNotifyNewSuccessorMessage)) % | ||
5411 | sizeof (struct GNUNET_PeerIdentity) != 0) | ||
5412 | { | ||
5413 | GNUNET_break_op (0); | ||
5414 | return GNUNET_OK; | ||
5415 | } | ||
5416 | trail_length = (msize - sizeof (struct PeerNotifyNewSuccessorMessage))/ | ||
5417 | sizeof (struct GNUNET_PeerIdentity); | ||
5418 | GNUNET_STATISTICS_update (GDS_stats, | ||
5419 | gettext_noop | ||
5420 | ("# Bytes received from other peers"), msize, | ||
5421 | GNUNET_NO); | ||
5422 | |||
5423 | trail = (struct GNUNET_PeerIdentity *) &nsm[1]; | ||
5424 | source = nsm->source_peer; | ||
5425 | new_successor = nsm->new_successor; | ||
5426 | trail_id = nsm->trail_id; | ||
5427 | |||
5428 | /* I am the new_successor to source_peer. */ | ||
5429 | if ( 0 == GNUNET_CRYPTO_cmp_peer_identity (&my_identity, &new_successor)) | ||
5430 | { | ||
5431 | if(trail_length > 0) | ||
5432 | GNUNET_assert(0 == GNUNET_CRYPTO_cmp_peer_identity(&trail[trail_length - 1], | ||
5433 | peer)); | ||
5434 | else | ||
5435 | GNUNET_assert(0 == GNUNET_CRYPTO_cmp_peer_identity(&source, peer)); | ||
5436 | |||
5437 | compare_and_update_predecessor (source, trail, trail_length); | ||
5438 | target_friend = GNUNET_CONTAINER_multipeermap_get (friend_peermap, peer); | ||
5439 | GNUNET_assert (NULL != target_friend); | ||
5440 | GDS_NEIGHBOURS_send_notify_succcessor_confirmation (trail_id, | ||
5441 | GDS_ROUTING_DEST_TO_SRC, | ||
5442 | target_friend); | ||
5443 | return GNUNET_OK; | ||
5444 | } | ||
5445 | |||
5446 | GNUNET_assert(trail_length > 0); | ||
5447 | /* I am part of trail to reach to successor. */ | ||
5448 | my_index = search_my_index (trail, trail_length); | ||
5449 | if (-1 == my_index) | ||
5450 | { | ||
5451 | DEBUG ("No entry found in trail\n"); | ||
5452 | GNUNET_break_op (0); | ||
5453 | return GNUNET_SYSERR; | ||
5454 | } | ||
5455 | if((trail_length + 1) == my_index) | ||
5456 | { | ||
5457 | DEBUG ("Found twice in trail.\n"); | ||
5458 | GNUNET_break_op (0); | ||
5459 | return GNUNET_SYSERR; | ||
5460 | } | ||
5461 | if ((trail_length-1) == my_index) | ||
5462 | next_hop = new_successor; | ||
5463 | else | ||
5464 | next_hop = trail[my_index + 1]; | ||
5465 | |||
5466 | GDS_ROUTING_add(trail_id, *peer, next_hop); | ||
5467 | target_friend = | ||
5468 | GNUNET_CONTAINER_multipeermap_get (friend_peermap, &next_hop); | ||
5469 | if (NULL == target_friend) | ||
5470 | { | ||
5471 | GNUNET_break(0); | ||
5472 | return GNUNET_OK; | ||
5473 | } | ||
5474 | GDS_NEIGHBOURS_send_notify_new_successor (source, new_successor, trail, | ||
5475 | trail_length, | ||
5476 | trail_id, target_friend); | ||
5477 | return GNUNET_OK; | ||
5478 | |||
5479 | } | ||
5480 | |||
5481 | |||
5482 | /** | ||
5483 | * Core handler for P2P notify successor message | ||
5484 | * @param cls closure | ||
5485 | * @param message message | ||
5486 | * @param peer peer identity this notification is about | ||
5487 | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | ||
5488 | */ | ||
5489 | static int | ||
5490 | handle_dht_p2p_notify_succ_confirmation (void *cls, | ||
5491 | const struct GNUNET_PeerIdentity *peer, | ||
5492 | const struct GNUNET_MessageHeader *message) | ||
5493 | { | ||
5494 | const struct PeerNotifyConfirmationMessage *notify_confirmation; | ||
5495 | enum GDS_ROUTING_trail_direction trail_direction; | ||
5496 | struct GNUNET_HashCode trail_id; | ||
5497 | struct FriendInfo *target_friend; | ||
5498 | struct GNUNET_PeerIdentity *next_hop; | ||
5499 | size_t msize; | ||
5500 | |||
5501 | msize = ntohs (message->size); | ||
5502 | |||
5503 | if (msize != sizeof (struct PeerNotifyConfirmationMessage)) | ||
5504 | { | ||
5505 | GNUNET_break_op (0); | ||
5506 | return GNUNET_OK; | ||
5507 | } | ||
5508 | GNUNET_STATISTICS_update (GDS_stats, | ||
5509 | gettext_noop | ||
5510 | ("# Bytes received from other peers"), msize, | ||
5511 | GNUNET_NO); | ||
5512 | |||
5513 | notify_confirmation = (const struct PeerNotifyConfirmationMessage *) message; | ||
5514 | trail_direction = ntohl (notify_confirmation->trail_direction); | ||
5515 | trail_id = notify_confirmation->trail_id; | ||
5516 | |||
5517 | next_hop = GDS_ROUTING_get_next_hop (trail_id, trail_direction); | ||
5518 | if (NULL == next_hop) | ||
5519 | { | ||
5520 | /* The source of notify new successor, might have found even a better | ||
5521 | successor. In that case it send a trail teardown message, and hence, | ||
5522 | the next hop is NULL. */ | ||
5523 | //Fixme: Add some print to confirm the above theory. | ||
5524 | return GNUNET_OK; | ||
5525 | } | ||
5526 | |||
5527 | /* I peer which sent the notify successor message to the successor. */ | ||
5528 | if (0 == GNUNET_CRYPTO_cmp_peer_identity (next_hop, &my_identity)) | ||
5529 | { | ||
5530 | /* | ||
5531 | * Schedule another round of verify sucessor with your current successor | ||
5532 | * which may or may not be source of this message. This message is used | ||
5533 | * only to ensure that we have a path setup to reach to our successor. | ||
5534 | */ | ||
5535 | |||
5536 | // TODO: cancel schedule of notify_successor_retry_task | ||
5537 | if (send_notify_new_successor_retry_task != NULL) | ||
5538 | { | ||
5539 | struct SendNotifyContext *notify_ctx; | ||
5540 | notify_ctx = GNUNET_SCHEDULER_cancel(send_notify_new_successor_retry_task); | ||
5541 | GNUNET_free (notify_ctx->successor_trail); | ||
5542 | GNUNET_free (notify_ctx); | ||
5543 | send_notify_new_successor_retry_task = NULL; | ||
5544 | } | ||
5545 | if (send_verify_successor_task == NULL) | ||
5546 | { | ||
5547 | verify_successor_next_send_time.rel_value_us = | ||
5548 | DHT_SEND_VERIFY_SUCCESSOR_INTERVAL.rel_value_us + | ||
5549 | GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_WEAK, | ||
5550 | DHT_SEND_VERIFY_SUCCESSOR_INTERVAL.rel_value_us); | ||
5551 | send_verify_successor_task = | ||
5552 | GNUNET_SCHEDULER_add_delayed(verify_successor_next_send_time, | ||
5553 | &send_verify_successor_message, | ||
5554 | NULL); | ||
5555 | } | ||
5556 | } | ||
5557 | else | ||
5558 | { | ||
5559 | target_friend = GNUNET_CONTAINER_multipeermap_get (friend_peermap, next_hop); | ||
5560 | if (NULL == target_friend) | ||
5561 | { | ||
5562 | DEBUG ("\n friend not found, line number = %d",__LINE__); | ||
5563 | return GNUNET_SYSERR; | ||
5564 | } | ||
5565 | GDS_NEIGHBOURS_send_notify_succcessor_confirmation (trail_id, | ||
5566 | GDS_ROUTING_DEST_TO_SRC, | ||
5567 | target_friend); | ||
5568 | } | ||
5569 | return GNUNET_OK; | ||
5570 | } | ||
5571 | |||
5572 | |||
5573 | /** | ||
5574 | * Core handler for P2P trail rejection message | ||
5575 | * @param cls closure | ||
5576 | * @param message message | ||
5577 | * @param peer peer identity this notification is about | ||
5578 | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | ||
5579 | */ | ||
5580 | static int | ||
5581 | handle_dht_p2p_trail_setup_rejection (void *cls, | ||
5582 | const struct GNUNET_PeerIdentity *peer, | ||
5583 | const struct GNUNET_MessageHeader *message) | ||
5584 | { | ||
5585 | const struct PeerTrailRejectionMessage *trail_rejection; | ||
5586 | unsigned int trail_length; | ||
5587 | const struct GNUNET_PeerIdentity *trail_peer_list; | ||
5588 | struct FriendInfo *target_friend; | ||
5589 | struct GNUNET_TIME_Relative congestion_timeout; | ||
5590 | struct GNUNET_HashCode trail_id; | ||
5591 | struct GNUNET_PeerIdentity next_peer; | ||
5592 | struct GNUNET_PeerIdentity source; | ||
5593 | uint64_t ultimate_destination_finger_value; | ||
5594 | unsigned int is_predecessor; | ||
5595 | size_t msize; | ||
5596 | |||
5597 | msize = ntohs (message->size); | ||
5598 | if (msize < sizeof (struct PeerTrailRejectionMessage)) | ||
5599 | { | ||
5600 | GNUNET_break_op (0); | ||
5601 | return GNUNET_YES; | ||
5602 | } | ||
5603 | trail_rejection = (const struct PeerTrailRejectionMessage *) message; | ||
5604 | if ((msize - sizeof (struct PeerTrailRejectionMessage)) % | ||
5605 | sizeof (struct GNUNET_PeerIdentity) != 0) | ||
5606 | { | ||
5607 | GNUNET_break_op (0); | ||
5608 | return GNUNET_OK; | ||
5609 | } | ||
5610 | trail_length = (msize - sizeof (struct PeerTrailRejectionMessage))/ | ||
5611 | sizeof (struct GNUNET_PeerIdentity); | ||
5612 | GNUNET_STATISTICS_update (GDS_stats, | ||
5613 | gettext_noop | ||
5614 | ("# Bytes received from other peers"), msize, | ||
5615 | GNUNET_NO); | ||
5616 | |||
5617 | trail_peer_list = (const struct GNUNET_PeerIdentity *)&trail_rejection[1]; | ||
5618 | is_predecessor = ntohl (trail_rejection->is_predecessor); | ||
5619 | congestion_timeout = trail_rejection->congestion_time; | ||
5620 | source = trail_rejection->source_peer; | ||
5621 | trail_id = trail_rejection->trail_id; | ||
5622 | ultimate_destination_finger_value = | ||
5623 | GNUNET_ntohll (trail_rejection->ultimate_destination_finger_value); | ||
5624 | /* First set the congestion time of the friend that sent you this message. */ | ||
5625 | target_friend = GNUNET_CONTAINER_multipeermap_get (friend_peermap, peer); | ||
5626 | if (NULL == target_friend) | ||
5627 | { | ||
5628 | DEBUG ("\nLINE = %d ,No friend found.",__LINE__); | ||
5629 | GNUNET_break(0); | ||
5630 | return GNUNET_OK; | ||
5631 | } | ||
5632 | target_friend->congestion_timestamp = | ||
5633 | GNUNET_TIME_absolute_add (GNUNET_TIME_absolute_get(), | ||
5634 | congestion_timeout); | ||
5635 | |||
5636 | /* I am the source peer which wants to setup the trail. Do nothing. | ||
5637 | * send_find_finger_trail_task is scheduled periodically.*/ | ||
5638 | if(0 == (GNUNET_CRYPTO_cmp_peer_identity (&my_identity, &source))) | ||
5639 | return GNUNET_OK; | ||
5640 | |||
5641 | /* If I am congested then pass this message to peer before me in trail. */ | ||
5642 | if(GNUNET_YES == GDS_ROUTING_threshold_reached()) | ||
5643 | { | ||
5644 | /* First remove yourself from the trail. */ | ||
5645 | unsigned int new_trail_length = trail_length - 1; | ||
5646 | struct GNUNET_PeerIdentity trail[new_trail_length]; | ||
5647 | |||
5648 | memcpy (trail, trail_peer_list, new_trail_length * sizeof(struct GNUNET_PeerIdentity)); | ||
5649 | if (0 == trail_length) | ||
5650 | next_peer = source; | ||
5651 | else | ||
5652 | next_peer = trail[new_trail_length-1]; | ||
5653 | |||
5654 | target_friend = | ||
5655 | GNUNET_CONTAINER_multipeermap_get (friend_peermap, &next_peer); | ||
5656 | if (NULL == target_friend) | ||
5657 | { | ||
5658 | DEBUG ("\nLINE = %d ,No friend found.",__LINE__); | ||
5659 | GNUNET_break(0); | ||
5660 | return GNUNET_OK; | ||
5661 | } | ||
5662 | GDS_NEIGHBOURS_send_trail_rejection (source, | ||
5663 | ultimate_destination_finger_value, | ||
5664 | my_identity, is_predecessor, | ||
5665 | trail, new_trail_length, trail_id, | ||
5666 | target_friend, CONGESTION_TIMEOUT); | ||
5667 | return GNUNET_OK; | ||
5668 | } | ||
5669 | |||
5670 | struct Closest_Peer successor; | ||
5671 | successor = find_local_best_known_next_hop (ultimate_destination_finger_value, is_predecessor); | ||
5672 | |||
5673 | /* Am I the final destination? */ | ||
5674 | if (0 == (GNUNET_CRYPTO_cmp_peer_identity (&successor.best_known_destination, | ||
5675 | &my_identity))) | ||
5676 | { | ||
5677 | /*Here you are already part of trail. Copy the trail removing yourself. */ | ||
5678 | unsigned int new_trail_length = trail_length - 1; | ||
5679 | struct GNUNET_PeerIdentity trail[new_trail_length]; | ||
5680 | |||
5681 | memcpy (trail, trail_peer_list, new_trail_length * sizeof(struct GNUNET_PeerIdentity)); | ||
5682 | |||
5683 | if (0 == new_trail_length) | ||
5684 | next_peer = source; | ||
5685 | else | ||
5686 | { | ||
5687 | next_peer = trail[new_trail_length-1]; | ||
5688 | } | ||
5689 | target_friend = | ||
5690 | GNUNET_CONTAINER_multipeermap_get (friend_peermap, &next_peer); | ||
5691 | |||
5692 | if (NULL == target_friend) | ||
5693 | { | ||
5694 | DEBUG ("\nLINE = %d ,No friend found.",__LINE__); | ||
5695 | GNUNET_break(0); | ||
5696 | return GNUNET_OK; | ||
5697 | } | ||
5698 | GDS_NEIGHBOURS_send_trail_setup_result (source, | ||
5699 | my_identity, | ||
5700 | target_friend, new_trail_length, | ||
5701 | trail, | ||
5702 | is_predecessor, | ||
5703 | ultimate_destination_finger_value, | ||
5704 | trail_id); | ||
5705 | } | ||
5706 | else | ||
5707 | { | ||
5708 | /* Here I was already part of trail. So no need to add. */ | ||
5709 | target_friend = | ||
5710 | GNUNET_CONTAINER_multipeermap_get (friend_peermap, | ||
5711 | &successor.next_hop); | ||
5712 | if (NULL == target_friend) | ||
5713 | { | ||
5714 | DEBUG ("\nLINE = %d ,No friend found.",__LINE__); | ||
5715 | GNUNET_break(0); | ||
5716 | return GNUNET_OK; | ||
5717 | } | ||
5718 | |||
5719 | GDS_NEIGHBOURS_send_trail_setup (source, | ||
5720 | ultimate_destination_finger_value, | ||
5721 | successor.best_known_destination, | ||
5722 | target_friend, trail_length, trail_peer_list, | ||
5723 | is_predecessor, trail_id, | ||
5724 | successor.trail_id); | ||
5725 | } | ||
5726 | return GNUNET_OK; | ||
5727 | } | ||
5728 | |||
5729 | |||
5730 | /** | ||
5731 | * Core handler for trail teardown message. | ||
5732 | * @param cls closure | ||
5733 | * @param message message | ||
5734 | * @param peer sender of this messsage. | ||
5735 | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | ||
5736 | */ | ||
5737 | static int | ||
5738 | handle_dht_p2p_trail_teardown (void *cls, const struct GNUNET_PeerIdentity *peer, | ||
5739 | const struct GNUNET_MessageHeader *message) | ||
5740 | { | ||
5741 | const struct PeerTrailTearDownMessage *trail_teardown; | ||
5742 | enum GDS_ROUTING_trail_direction trail_direction; | ||
5743 | struct GNUNET_HashCode trail_id; | ||
5744 | struct GNUNET_PeerIdentity *next_hop; | ||
5745 | size_t msize; | ||
5746 | |||
5747 | msize = ntohs (message->size); | ||
5748 | |||
5749 | /* Here we pass only the trail id. */ | ||
5750 | if (msize != sizeof (struct PeerTrailTearDownMessage)) | ||
5751 | { | ||
5752 | GNUNET_break_op (0); | ||
5753 | return GNUNET_OK; | ||
5754 | } | ||
5755 | |||
5756 | GNUNET_STATISTICS_update (GDS_stats, | ||
5757 | gettext_noop | ||
5758 | ("# Bytes received from other peers"), msize, | ||
5759 | GNUNET_NO); | ||
5760 | |||
5761 | trail_teardown = (const struct PeerTrailTearDownMessage *) message; | ||
5762 | trail_direction = ntohl (trail_teardown->trail_direction); | ||
5763 | trail_id = trail_teardown->trail_id; | ||
5764 | |||
5765 | /* Check if peer is the real peer from which we should get this message.*/ | ||
5766 | /* Get the prev_hop for this trail by getting the next hop in opposite direction. */ | ||
5767 | #if 0 | ||
5768 | GNUNET_assert (NULL != (prev_hop = | ||
5769 | GDS_ROUTING_get_next_hop (trail_id, !trail_direction))); | ||
5770 | if (0 != GNUNET_CRYPTO_cmp_peer_identity (prev_hop, peer)) | ||
5771 | { | ||
5772 | GNUNET_break (0); | ||
5773 | return GNUNET_SYSERR; | ||
5774 | } | ||
5775 | #endif | ||
5776 | |||
5777 | next_hop = GDS_ROUTING_get_next_hop (trail_id, trail_direction); | ||
5778 | if (NULL == next_hop) | ||
5779 | { | ||
5780 | DEBUG(" NO ENTRY FOUND IN %s ROUTING TABLE for trail id %s, line", | ||
5781 | GNUNET_i2s(&my_identity), GNUNET_h2s(&trail_id), __LINE__); | ||
5782 | GNUNET_break (0); | ||
5783 | return GNUNET_SYSERR; | ||
5784 | } | ||
5785 | |||
5786 | /* I am the next hop, which means I am the final destination. */ | ||
5787 | if (0 == GNUNET_CRYPTO_cmp_peer_identity (next_hop, &my_identity)) | ||
5788 | { | ||
5789 | GNUNET_assert (GNUNET_YES == GDS_ROUTING_remove_trail (trail_id)); | ||
5790 | return GNUNET_OK; | ||
5791 | } | ||
5792 | else | ||
5793 | { | ||
5794 | /* If not final destination, then send a trail teardown message to next hop.*/ | ||
5795 | GNUNET_assert (NULL != GNUNET_CONTAINER_multipeermap_get (friend_peermap, next_hop)); | ||
5796 | GNUNET_assert (GNUNET_YES == GDS_ROUTING_remove_trail (trail_id)); | ||
5797 | GDS_NEIGHBOURS_send_trail_teardown (&trail_id, trail_direction, next_hop); | ||
5798 | } | ||
5799 | |||
5800 | return GNUNET_OK; | ||
5801 | } | ||
5802 | |||
5803 | |||
5804 | /** | ||
5805 | * Core handle for p2p add trail message. | ||
5806 | * @param cls closure | ||
5807 | * @param message message | ||
5808 | * @param peer peer identity this notification is about | ||
5809 | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | ||
5810 | */ | ||
5811 | static int | ||
5812 | handle_dht_p2p_add_trail (void *cls, const struct GNUNET_PeerIdentity *peer, | ||
5813 | const struct GNUNET_MessageHeader *message) | ||
5814 | { | ||
5815 | const struct PeerAddTrailMessage *add_trail; | ||
5816 | const struct GNUNET_PeerIdentity *trail; | ||
5817 | struct GNUNET_HashCode trail_id; | ||
5818 | struct GNUNET_PeerIdentity destination_peer; | ||
5819 | struct GNUNET_PeerIdentity source_peer; | ||
5820 | struct GNUNET_PeerIdentity next_hop; | ||
5821 | unsigned int trail_length; | ||
5822 | unsigned int my_index; | ||
5823 | size_t msize; | ||
5824 | |||
5825 | msize = ntohs (message->size); | ||
5826 | /* In this message we pass the whole trail from source to destination as we | ||
5827 | * are adding that trail.*/ | ||
5828 | //FIXME: failed when run with 1000 pears. check why. | ||
5829 | if (msize < sizeof (struct PeerAddTrailMessage)) | ||
5830 | { | ||
5831 | GNUNET_break_op (0); | ||
5832 | return GNUNET_OK; | ||
5833 | } | ||
5834 | |||
5835 | add_trail = (const struct PeerAddTrailMessage *) message; | ||
5836 | trail_length = (msize - sizeof (struct PeerAddTrailMessage))/ | ||
5837 | sizeof (struct GNUNET_PeerIdentity); | ||
5838 | if ((msize - sizeof (struct PeerAddTrailMessage)) % | ||
5839 | sizeof (struct GNUNET_PeerIdentity) != 0) | ||
5840 | { | ||
5841 | GNUNET_break_op (0); | ||
5842 | return GNUNET_OK; | ||
5843 | } | ||
5844 | |||
5845 | GNUNET_STATISTICS_update (GDS_stats, | ||
5846 | gettext_noop | ||
5847 | ("# Bytes received from other peers"), msize, | ||
5848 | GNUNET_NO); | ||
5849 | |||
5850 | trail = (const struct GNUNET_PeerIdentity *)&add_trail[1]; | ||
5851 | destination_peer = add_trail->destination_peer; | ||
5852 | source_peer = add_trail->source_peer; | ||
5853 | trail_id = add_trail->trail_id; | ||
5854 | |||
5855 | /* I am not the destination of the trail. */ | ||
5856 | if (0 != GNUNET_CRYPTO_cmp_peer_identity (&my_identity, &destination_peer)) | ||
5857 | { | ||
5858 | struct FriendInfo *target_friend; | ||
5859 | |||
5860 | /* Get my location in the trail. */ | ||
5861 | my_index = search_my_index (trail, trail_length); | ||
5862 | if (-1 == my_index) | ||
5863 | { | ||
5864 | GNUNET_break_op (0); | ||
5865 | return GNUNET_SYSERR; | ||
5866 | } | ||
5867 | if((trail_length + 1) == my_index) | ||
5868 | { | ||
5869 | DEBUG ("Found twice in trail.\n"); | ||
5870 | GNUNET_break_op (0); | ||
5871 | return GNUNET_SYSERR; | ||
5872 | } | ||
5873 | if ((trail_length - 1) == my_index) | ||
5874 | { | ||
5875 | next_hop = destination_peer; | ||
5876 | } | ||
5877 | else | ||
5878 | { | ||
5879 | next_hop = trail[my_index + 1]; | ||
5880 | } | ||
5881 | /* Add in your routing table. */ | ||
5882 | GNUNET_assert (GNUNET_OK == GDS_ROUTING_add (trail_id, *peer, next_hop)); | ||
5883 | //GNUNET_assert (GNUNET_OK == GDS_ROUTING_add (trail_id, next_hop, *peer)); | ||
5884 | GNUNET_assert (NULL != | ||
5885 | (target_friend = | ||
5886 | GNUNET_CONTAINER_multipeermap_get (friend_peermap, &next_hop))); | ||
5887 | GDS_NEIGHBOURS_send_add_trail (source_peer, destination_peer, trail_id, | ||
5888 | trail, trail_length, target_friend); | ||
5889 | return GNUNET_OK; | ||
5890 | } | ||
5891 | /* I am the destination. Add an entry in routing table. */ | ||
5892 | GNUNET_assert (GNUNET_OK == GDS_ROUTING_add (trail_id, *peer, my_identity)); | ||
5893 | return GNUNET_OK; | ||
5894 | } | ||
5895 | |||
5896 | |||
5897 | /** | ||
5898 | * Free the finger trail in which the first friend to reach to a finger is | ||
5899 | * disconnected_friend. Also remove entry from routing table for that particular | ||
5900 | * trail id. | ||
5901 | * @param disconnected_friend PeerIdentity of friend which got disconnected | ||
5902 | * @param remove_finger Finger whose trail we need to check if it has | ||
5903 | * disconnected_friend as the first hop. | ||
5904 | * @return Total number of trails in which disconnected_friend was the first | ||
5905 | * hop. | ||
5906 | */ | ||
5907 | static int | ||
5908 | remove_matching_trails (const struct GNUNET_PeerIdentity *disconnected_friend, | ||
5909 | struct FingerInfo *finger) | ||
5910 | { | ||
5911 | struct GNUNET_PeerIdentity *next_hop; | ||
5912 | struct FriendInfo *remove_friend; | ||
5913 | struct Trail *current_trail; | ||
5914 | unsigned int matching_trails_count = 0; | ||
5915 | int i; | ||
5916 | |||
5917 | /* Iterate over all the trails of finger. */ | ||
5918 | for (i = 0; i < finger->trails_count; i++) | ||
5919 | { | ||
5920 | current_trail = &finger->trail_list[i]; | ||
5921 | if (GNUNET_NO == current_trail->is_present) | ||
5922 | continue; | ||
5923 | |||
5924 | /* First friend to reach to finger is disconnected_peer. */ | ||
5925 | if (0 == GNUNET_CRYPTO_cmp_peer_identity (¤t_trail->trail_head->peer, | ||
5926 | disconnected_friend)) | ||
5927 | { | ||
5928 | remove_friend = | ||
5929 | GNUNET_CONTAINER_multipeermap_get (friend_peermap, | ||
5930 | disconnected_friend); | ||
5931 | GNUNET_assert (NULL != remove_friend); | ||
5932 | next_hop = GDS_ROUTING_get_next_hop (current_trail->trail_id, | ||
5933 | GDS_ROUTING_SRC_TO_DEST); | ||
5934 | |||
5935 | /* Here it may happen that as all the peers got disconnected, the entry in | ||
5936 | routing table for that particular trail has been removed, because the | ||
5937 | previously disconnected peer was either a next hop or prev hop of that | ||
5938 | peer. */ | ||
5939 | if (NULL != next_hop) | ||
5940 | { | ||
5941 | GNUNET_assert (0 == (GNUNET_CRYPTO_cmp_peer_identity (disconnected_friend, | ||
5942 | next_hop))); | ||
5943 | GNUNET_assert (GNUNET_YES == GDS_ROUTING_remove_trail (current_trail->trail_id)); | ||
5944 | } | ||
5945 | matching_trails_count++; | ||
5946 | free_trail (current_trail); | ||
5947 | current_trail->is_present = GNUNET_NO; | ||
5948 | } | ||
5949 | } | ||
5950 | return matching_trails_count; | ||
5951 | } | ||
5952 | |||
5953 | |||
5954 | /** | ||
5955 | * Iterate over finger_table entries. | ||
5956 | * 0. Ignore finger which is my_identity or if no valid entry present at | ||
5957 | * that finger index. | ||
5958 | * 1. If disconnected_friend is a finger, then remove the routing entry from | ||
5959 | your own table. Free the trail. | ||
5960 | * 2. Check if disconnected_friend is the first friend in the trail to reach to a finger. | ||
5961 | * 2.1 Remove all the trails and entry from routing table in which disconnected | ||
5962 | * friend is the first friend in the trail. If disconnected_friend is the | ||
5963 | * first friend in all the trails to reach finger, then remove the finger. | ||
5964 | * @param disconnected_friend Peer identity of friend which got disconnected. | ||
5965 | */ | ||
5966 | static void | ||
5967 | remove_matching_fingers (const struct GNUNET_PeerIdentity *disconnected_peer) | ||
5968 | { | ||
5969 | struct FingerInfo *current_finger; | ||
5970 | int removed_trails_count; | ||
5971 | int i; | ||
5972 | |||
5973 | /* Iterate over finger table entries. */ | ||
5974 | for (i = 0; i < MAX_FINGERS; i++) | ||
5975 | { | ||
5976 | current_finger = &finger_table[i]; | ||
5977 | |||
5978 | /* No finger stored at this trail index or I am the finger. */ | ||
5979 | if ((GNUNET_NO == current_finger->is_present) || | ||
5980 | (0 == GNUNET_CRYPTO_cmp_peer_identity (¤t_finger->finger_identity, | ||
5981 | &my_identity))) | ||
5982 | continue; | ||
5983 | |||
5984 | /* Is disconnected_peer a finger? */ | ||
5985 | if (0 == GNUNET_CRYPTO_cmp_peer_identity (disconnected_peer, | ||
5986 | ¤t_finger->finger_identity)) | ||
5987 | { | ||
5988 | remove_existing_finger (current_finger, i); | ||
5989 | } | ||
5990 | |||
5991 | /* If finger is a friend but not disconnected_friend, then continue. */ | ||
5992 | if (NULL != GNUNET_CONTAINER_multipeermap_get (friend_peermap, | ||
5993 | ¤t_finger->finger_identity)) | ||
5994 | continue; | ||
5995 | |||
5996 | /* Iterate over the list of trails to reach remove_finger. Check if | ||
5997 | * disconnected_friend is the first friend in any of the trail. */ | ||
5998 | removed_trails_count = remove_matching_trails (disconnected_peer, | ||
5999 | current_finger); | ||
6000 | current_finger->trails_count = | ||
6001 | current_finger->trails_count - removed_trails_count; | ||
6002 | if (0 == current_finger->trails_count) | ||
6003 | { | ||
6004 | current_finger->is_present = GNUNET_NO; | ||
6005 | memset ((void *)&finger_table[i], 0, sizeof (finger_table[i])); | ||
6006 | } | ||
6007 | } | ||
6008 | } | ||
6009 | |||
6010 | |||
6011 | /** | ||
6012 | * Method called whenever a peer disconnects. | ||
6013 | * | ||
6014 | * @param cls closure | ||
6015 | * @param peer peer identity this notification is about | ||
6016 | */ | ||
6017 | static void | ||
6018 | handle_core_disconnect (void *cls, | ||
6019 | const struct GNUNET_PeerIdentity *peer) | ||
6020 | { | ||
6021 | struct FriendInfo *remove_friend; | ||
6022 | struct P2PPendingMessage *pos; | ||
6023 | unsigned int discarded; | ||
6024 | |||
6025 | /* If disconnected to own identity, then return. */ | ||
6026 | if (0 == memcmp (&my_identity, peer, sizeof (struct GNUNET_PeerIdentity))) | ||
6027 | return; | ||
6028 | |||
6029 | if(NULL == (remove_friend = | ||
6030 | GNUNET_CONTAINER_multipeermap_get (friend_peermap, peer))) | ||
6031 | { | ||
6032 | DEBUG("\n friend already disconnected."); | ||
6033 | return; | ||
6034 | } | ||
6035 | |||
6036 | remove_matching_fingers (peer); | ||
6037 | GNUNET_assert (GNUNET_SYSERR != GDS_ROUTING_remove_trail_by_peer (peer)); | ||
6038 | GNUNET_assert (GNUNET_YES == | ||
6039 | GNUNET_CONTAINER_multipeermap_remove (friend_peermap, | ||
6040 | peer, | ||
6041 | remove_friend)); | ||
6042 | |||
6043 | /* Remove all the messages queued in pending list of this peer is discarded.*/ | ||
6044 | if (remove_friend->th != NULL) | ||
6045 | { | ||
6046 | GNUNET_CORE_notify_transmit_ready_cancel(remove_friend->th); | ||
6047 | remove_friend->th = NULL; | ||
6048 | } | ||
6049 | |||
6050 | discarded = 0; | ||
6051 | while (NULL != (pos = remove_friend->head)) | ||
6052 | { | ||
6053 | GNUNET_CONTAINER_DLL_remove (remove_friend->head, remove_friend->tail, pos); | ||
6054 | discarded++; | ||
6055 | GNUNET_free (pos); | ||
6056 | } | ||
6057 | |||
6058 | GNUNET_STATISTICS_update (GDS_stats, | ||
6059 | gettext_noop | ||
6060 | ("# Queued messages discarded (peer disconnected)"), | ||
6061 | discarded, GNUNET_NO); | ||
6062 | //GNUNET_free (remove_friend); | ||
6063 | |||
6064 | if (0 != GNUNET_CONTAINER_multipeermap_size (friend_peermap)) | ||
6065 | return; | ||
6066 | |||
6067 | if (NULL != find_finger_trail_task) | ||
6068 | { | ||
6069 | GNUNET_SCHEDULER_cancel (find_finger_trail_task); | ||
6070 | find_finger_trail_task = NULL; | ||
6071 | } | ||
6072 | else | ||
6073 | GNUNET_break (0); | ||
6074 | } | ||
6075 | |||
6076 | |||
6077 | /** | ||
6078 | * Method called whenever a peer connects. | ||
6079 | * | ||
6080 | * @param cls closure | ||
6081 | * @param peer_identity peer identity this notification is about | ||
6082 | */ | ||
6083 | static void | ||
6084 | handle_core_connect (void *cls, const struct GNUNET_PeerIdentity *peer_identity) | ||
6085 | { | ||
6086 | struct FriendInfo *friend; | ||
6087 | |||
6088 | /* Check for connect to self message */ | ||
6089 | if (0 == memcmp (&my_identity, peer_identity, sizeof (struct GNUNET_PeerIdentity))) | ||
6090 | return; | ||
6091 | |||
6092 | /* If peer already exists in our friend_peermap, then exit. */ | ||
6093 | if (GNUNET_YES == GNUNET_CONTAINER_multipeermap_contains (friend_peermap, | ||
6094 | peer_identity)) | ||
6095 | { | ||
6096 | GNUNET_break (0); | ||
6097 | return; | ||
6098 | } | ||
6099 | |||
6100 | friend = GNUNET_new (struct FriendInfo); | ||
6101 | friend->id = *peer_identity; | ||
6102 | |||
6103 | GNUNET_assert (GNUNET_OK == | ||
6104 | GNUNET_CONTAINER_multipeermap_put (friend_peermap, | ||
6105 | peer_identity, friend, | ||
6106 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY)); | ||
6107 | |||
6108 | /* FIXME: now we are not making a distinction between fingers which are friends | ||
6109 | * also.But later, we should add a congestion timestamp on the friend, so that it is | ||
6110 | * selected after some time out. This is to ensure that both peers have added | ||
6111 | * each other as their friend. */ | ||
6112 | /* Got a first connection, good time to start with FIND FINGER TRAIL requests...*/ | ||
6113 | if (NULL == find_finger_trail_task) | ||
6114 | { | ||
6115 | find_finger_trail_task = GNUNET_SCHEDULER_add_now (&send_find_finger_trail_message, NULL); | ||
6116 | } | ||
6117 | } | ||
6118 | |||
6119 | |||
6120 | /** | ||
6121 | * To be called on core init/fail. | ||
6122 | * | ||
6123 | * @param cls service closure | ||
6124 | * @param identity the public identity of this peer | ||
6125 | */ | ||
6126 | static void | ||
6127 | core_init (void *cls, | ||
6128 | const struct GNUNET_PeerIdentity *identity) | ||
6129 | { | ||
6130 | my_identity = *identity; | ||
6131 | } | ||
6132 | |||
6133 | |||
6134 | /** | ||
6135 | * Initialize finger table entries. | ||
6136 | */ | ||
6137 | static void | ||
6138 | finger_table_init () | ||
6139 | { | ||
6140 | memset (&finger_table, 0, sizeof (finger_table)); | ||
6141 | } | ||
6142 | |||
6143 | |||
6144 | /** | ||
6145 | * Initialize neighbours subsystem. | ||
6146 | * @return #GNUNET_OK on success, #GNUNET_SYSERR on error | ||
6147 | */ | ||
6148 | int | ||
6149 | GDS_NEIGHBOURS_init (void) | ||
6150 | { | ||
6151 | static struct GNUNET_CORE_MessageHandler core_handlers[] = { | ||
6152 | {&handle_dht_p2p_put, GNUNET_MESSAGE_TYPE_XDHT_P2P_PUT, 0}, | ||
6153 | {&handle_dht_p2p_get, GNUNET_MESSAGE_TYPE_XDHT_P2P_GET, 0}, | ||
6154 | {&handle_dht_p2p_get_result, GNUNET_MESSAGE_TYPE_XDHT_P2P_GET_RESULT, 0}, | ||
6155 | {&handle_dht_p2p_trail_setup, GNUNET_MESSAGE_TYPE_XDHT_P2P_TRAIL_SETUP, 0}, | ||
6156 | {&handle_dht_p2p_trail_setup_result, GNUNET_MESSAGE_TYPE_XDHT_P2P_TRAIL_SETUP_RESULT, 0}, | ||
6157 | {&handle_dht_p2p_verify_successor, GNUNET_MESSAGE_TYPE_XDHT_P2P_VERIFY_SUCCESSOR, 0}, | ||
6158 | {&handle_dht_p2p_verify_successor_result, GNUNET_MESSAGE_TYPE_XDHT_P2P_VERIFY_SUCCESSOR_RESULT, 0}, | ||
6159 | {&handle_dht_p2p_notify_new_successor, GNUNET_MESSAGE_TYPE_XDHT_P2P_NOTIFY_NEW_SUCCESSOR, 0}, | ||
6160 | {&handle_dht_p2p_trail_setup_rejection, GNUNET_MESSAGE_TYPE_XDHT_P2P_TRAIL_SETUP_REJECTION, 0}, | ||
6161 | {&handle_dht_p2p_trail_teardown, GNUNET_MESSAGE_TYPE_XDHT_P2P_TRAIL_TEARDOWN, | ||
6162 | sizeof (struct PeerTrailTearDownMessage)}, | ||
6163 | {&handle_dht_p2p_add_trail, GNUNET_MESSAGE_TYPE_XDHT_P2P_ADD_TRAIL, 0}, | ||
6164 | {&handle_dht_p2p_notify_succ_confirmation, GNUNET_MESSAGE_TYPE_XDHT_P2P_NOTIFY_SUCCESSOR_CONFIRMATION, | ||
6165 | sizeof (struct PeerNotifyConfirmationMessage)}, | ||
6166 | {NULL, 0, 0} | ||
6167 | }; | ||
6168 | |||
6169 | #if ENABLE_MALICIOUS | ||
6170 | act_malicious = 0; | ||
6171 | #endif | ||
6172 | |||
6173 | core_api = | ||
6174 | GNUNET_CORE_connect (GDS_cfg, NULL, &core_init, &handle_core_connect, | ||
6175 | &handle_core_disconnect, NULL, GNUNET_NO, NULL, | ||
6176 | GNUNET_NO, core_handlers); | ||
6177 | |||
6178 | if (NULL == core_api) | ||
6179 | return GNUNET_SYSERR; | ||
6180 | |||
6181 | //TODO: check size of this peer map? | ||
6182 | friend_peermap = GNUNET_CONTAINER_multipeermap_create (256, GNUNET_NO); | ||
6183 | finger_table_init (); | ||
6184 | successor_times = 10; | ||
6185 | fingers_round_count = 5; | ||
6186 | find_finger_trail_task_next_send_time.rel_value_us = | ||
6187 | DHT_FIND_FINGER_TRAIL_INTERVAL.rel_value_us + | ||
6188 | GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_WEAK, | ||
6189 | DHT_FIND_FINGER_TRAIL_INTERVAL.rel_value_us); | ||
6190 | |||
6191 | verify_successor_next_send_time.rel_value_us = | ||
6192 | DHT_SEND_VERIFY_SUCCESSOR_INTERVAL.rel_value_us + | ||
6193 | GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_WEAK, | ||
6194 | DHT_SEND_VERIFY_SUCCESSOR_INTERVAL.rel_value_us); | ||
6195 | |||
6196 | verify_successor_retry_time.rel_value_us = | ||
6197 | DHT_SEND_VERIFY_SUCCESSOR_RETRY_INTERVAL.rel_value_us + | ||
6198 | GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_WEAK, | ||
6199 | DHT_SEND_VERIFY_SUCCESSOR_RETRY_INTERVAL.rel_value_us); | ||
6200 | |||
6201 | notify_successor_retry_time.rel_value_us = | ||
6202 | DHT_SEND_NOTIFY_SUCCESSOR_RETRY_INTERVAL.rel_value_us + | ||
6203 | GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_WEAK, | ||
6204 | DHT_SEND_NOTIFY_SUCCESSOR_RETRY_INTERVAL.rel_value_us); | ||
6205 | |||
6206 | |||
6207 | return GNUNET_OK; | ||
6208 | } | ||
6209 | |||
6210 | |||
6211 | /** | ||
6212 | * Free the memory held up by trails of a finger. | ||
6213 | */ | ||
6214 | static void | ||
6215 | delete_finger_table_entries() | ||
6216 | { | ||
6217 | unsigned int i; | ||
6218 | unsigned int j; | ||
6219 | |||
6220 | for(i = 0; i < MAX_FINGERS; i++) | ||
6221 | { | ||
6222 | if(GNUNET_YES == finger_table[i].is_present) | ||
6223 | { | ||
6224 | for(j = 0; j < finger_table[i].trails_count; j++) | ||
6225 | free_trail(&finger_table[i].trail_list[j]); | ||
6226 | } | ||
6227 | } | ||
6228 | } | ||
6229 | |||
6230 | |||
6231 | /** | ||
6232 | * Shutdown neighbours subsystem. | ||
6233 | */ | ||
6234 | void | ||
6235 | GDS_NEIGHBOURS_done (void) | ||
6236 | { | ||
6237 | if (NULL == core_api) | ||
6238 | return; | ||
6239 | |||
6240 | GNUNET_CORE_disconnect (core_api); | ||
6241 | core_api = NULL; | ||
6242 | |||
6243 | delete_finger_table_entries(); | ||
6244 | GNUNET_assert (0 == GNUNET_CONTAINER_multipeermap_size (friend_peermap)); | ||
6245 | GNUNET_CONTAINER_multipeermap_destroy (friend_peermap); | ||
6246 | friend_peermap = NULL; | ||
6247 | |||
6248 | if (NULL != find_finger_trail_task) | ||
6249 | { | ||
6250 | GNUNET_SCHEDULER_cancel (find_finger_trail_task); | ||
6251 | find_finger_trail_task = NULL; | ||
6252 | } | ||
6253 | |||
6254 | if (NULL != send_verify_successor_task) | ||
6255 | { | ||
6256 | GNUNET_SCHEDULER_cancel (send_verify_successor_task); | ||
6257 | send_verify_successor_task = NULL; | ||
6258 | } | ||
6259 | |||
6260 | if (NULL != send_verify_successor_retry_task) | ||
6261 | { | ||
6262 | struct VerifySuccessorContext *ctx; | ||
6263 | ctx = GNUNET_SCHEDULER_cancel (send_verify_successor_retry_task); | ||
6264 | GNUNET_free(ctx); | ||
6265 | send_verify_successor_retry_task = NULL; | ||
6266 | } | ||
6267 | |||
6268 | if (send_notify_new_successor_retry_task != NULL) | ||
6269 | { | ||
6270 | struct SendNotifyContext *notify_ctx; | ||
6271 | notify_ctx = GNUNET_SCHEDULER_cancel(send_notify_new_successor_retry_task); | ||
6272 | GNUNET_free (notify_ctx->successor_trail); | ||
6273 | GNUNET_free (notify_ctx); | ||
6274 | send_notify_new_successor_retry_task = NULL; | ||
6275 | } | ||
6276 | } | ||
6277 | |||
6278 | |||
6279 | /** | ||
6280 | * Get my identity | ||
6281 | * | ||
6282 | * @return my identity | ||
6283 | */ | ||
6284 | struct GNUNET_PeerIdentity | ||
6285 | GDS_NEIGHBOURS_get_my_id (void) | ||
6286 | { | ||
6287 | return my_identity; | ||
6288 | } | ||
6289 | |||
6290 | /* end of gnunet-service-xdht_neighbours.c */ | ||
diff --git a/src/dht/gnunet-service-wdht_neighbours.h b/src/dht/gnunet-service-wdht_neighbours.h new file mode 100644 index 000000000..edb241a6c --- /dev/null +++ b/src/dht/gnunet-service-wdht_neighbours.h | |||
@@ -0,0 +1,146 @@ | |||
1 | /* | ||
2 | This file is part of GNUnet. | ||
3 | Copyright (C) 2009, 2010, 2011 Christian Grothoff (and other contributing authors) | ||
4 | |||
5 | GNUnet is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published | ||
7 | by the Free Software Foundation; either version 3, or (at your | ||
8 | 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 | General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with GNUnet; see the file COPYING. If not, write to the | ||
17 | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /** | ||
22 | * @file dht/gnunet-service-xdht_neighbours.h | ||
23 | * @brief GNUnet DHT routing code | ||
24 | * @author Supriti Singh | ||
25 | */ | ||
26 | |||
27 | #ifndef GNUNET_SERVICE_XDHT_NEIGHBOURS_H | ||
28 | #define GNUNET_SERVICE_XDHT_NEIGHBOURS_H | ||
29 | |||
30 | #include "gnunet_util_lib.h" | ||
31 | #include "gnunet_block_lib.h" | ||
32 | #include "gnunet_dht_service.h" | ||
33 | |||
34 | |||
35 | #if ENABLE_MALICIOUS | ||
36 | /** | ||
37 | * Set the ENABLE_MALICIOUS value to malicious. | ||
38 | * @param malicious | ||
39 | */ | ||
40 | int | ||
41 | GDS_NEIGHBOURS_act_malicious (unsigned int malicious); | ||
42 | #endif | ||
43 | |||
44 | /** | ||
45 | * Handle the put request from the client. | ||
46 | * @param key Key for the content | ||
47 | * @param block_type Type of the block | ||
48 | * @param options Routing options | ||
49 | * @param desired_replication_level Desired replication count | ||
50 | * @param expiration_time When does the content expire | ||
51 | * @param data Content to store | ||
52 | * @param data_size Size of content @a data in bytes | ||
53 | */ | ||
54 | void | ||
55 | GDS_NEIGHBOURS_handle_put (const struct GNUNET_HashCode *key, | ||
56 | enum GNUNET_BLOCK_Type block_type, | ||
57 | enum GNUNET_DHT_RouteOption options, | ||
58 | uint32_t desired_replication_level, | ||
59 | struct GNUNET_TIME_Absolute expiration_time, | ||
60 | const void *data, size_t data_size); | ||
61 | |||
62 | /** | ||
63 | * Handle the get request from the client file. If I am destination do | ||
64 | * datacache put and return. Else find the target friend and forward message | ||
65 | * to it. | ||
66 | * @param key Key for the content | ||
67 | * @param block_type Type of the block | ||
68 | * @param options Routing options | ||
69 | * @param desired_replication_level Desired replication count | ||
70 | */ | ||
71 | void | ||
72 | GDS_NEIGHBOURS_handle_get(const struct GNUNET_HashCode *key, | ||
73 | enum GNUNET_BLOCK_Type block_type, | ||
74 | enum GNUNET_DHT_RouteOption options, | ||
75 | uint32_t desired_replication_level); | ||
76 | |||
77 | /** | ||
78 | * Send the get result to requesting client. | ||
79 | * @param key Key of the requested data. | ||
80 | * @param type Block type | ||
81 | * @param target_peer Next peer to forward the message to. | ||
82 | * @param source_peer Peer which has the data for the key. | ||
83 | * @param put_path_length Number of peers in @a put_path | ||
84 | * @param put_path Path taken to put the data at its stored location. | ||
85 | * @param get_path_length Number of peers in @a get_path | ||
86 | * @param get_path Path taken to reach to the location of the key. | ||
87 | * @param expiration When will this result expire? | ||
88 | * @param data Payload to store | ||
89 | * @param data_size Size of the @a data | ||
90 | */ | ||
91 | void | ||
92 | GDS_NEIGHBOURS_send_get_result (const struct GNUNET_HashCode *key, | ||
93 | enum GNUNET_BLOCK_Type type, | ||
94 | const struct GNUNET_PeerIdentity *target_peer, | ||
95 | const struct GNUNET_PeerIdentity *source_peer, | ||
96 | unsigned int put_path_length, | ||
97 | const struct GNUNET_PeerIdentity *put_path, | ||
98 | unsigned int get_path_length, | ||
99 | const struct GNUNET_PeerIdentity *get_path, | ||
100 | struct GNUNET_TIME_Absolute expiration, | ||
101 | const void *data, size_t data_size); | ||
102 | |||
103 | /** | ||
104 | * Construct a trail teardown message and forward it to target friend. | ||
105 | * @param trail_id Unique identifier of the trail. | ||
106 | * @param trail_direction Direction of trail. | ||
107 | * @param target_friend Friend to get this message. | ||
108 | */ | ||
109 | void | ||
110 | GDS_NEIGHBOURS_send_trail_teardown (const struct GNUNET_HashCode *trail_id, | ||
111 | unsigned int trail_direction, | ||
112 | const struct GNUNET_PeerIdentity *peer); | ||
113 | |||
114 | /** | ||
115 | * Return friend corresponding to peer. | ||
116 | * @param peer | ||
117 | * @return Friend | ||
118 | */ | ||
119 | struct FriendInfo * | ||
120 | GDS_NEIGHBOURS_get_friend (struct GNUNET_PeerIdentity peer); | ||
121 | /** | ||
122 | * Initialize neighbours subsystem. | ||
123 | * | ||
124 | * @return #GNUNET_OK on success, | ||
125 | * #GNUNET_SYSERR on error | ||
126 | */ | ||
127 | int | ||
128 | GDS_NEIGHBOURS_init (void); | ||
129 | |||
130 | |||
131 | /** | ||
132 | * Shutdown neighbours subsystem. | ||
133 | */ | ||
134 | void | ||
135 | GDS_NEIGHBOURS_done (void); | ||
136 | |||
137 | |||
138 | /** | ||
139 | * Get my identity | ||
140 | * | ||
141 | * @return my identity | ||
142 | */ | ||
143 | struct GNUNET_PeerIdentity | ||
144 | GDS_NEIGHBOURS_get_my_id (void); | ||
145 | |||
146 | #endif | ||
diff --git a/src/dht/gnunet-service-wdht_nse.c b/src/dht/gnunet-service-wdht_nse.c new file mode 100644 index 000000000..4cce88f6e --- /dev/null +++ b/src/dht/gnunet-service-wdht_nse.c | |||
@@ -0,0 +1,116 @@ | |||
1 | /* | ||
2 | This file is part of GNUnet. | ||
3 | Copyright (C) 2009, 2010, 2011 Christian Grothoff (and other contributing authors) | ||
4 | |||
5 | GNUnet is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published | ||
7 | by the Free Software Foundation; either version 3, or (at your | ||
8 | 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 | General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with GNUnet; see the file COPYING. If not, write to the | ||
17 | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /** | ||
22 | * @file dht/gnunet-service-xdht_nse.c | ||
23 | * @brief GNUnet DHT integration with NSE | ||
24 | * @author Christian Grothoff | ||
25 | */ | ||
26 | #include "platform.h" | ||
27 | #include "gnunet_nse_service.h" | ||
28 | #include "gnunet-service-wdht.h" | ||
29 | #include "gnunet-service-wdht_nse.h" | ||
30 | |||
31 | /** | ||
32 | * log of the current network size estimate, used as the point where | ||
33 | * we switch between random and deterministic routing. Default | ||
34 | * value of 4.0 is used if NSE module is not available (i.e. not | ||
35 | * configured). | ||
36 | */ | ||
37 | static double log_of_network_size_estimate = 4.0; | ||
38 | |||
39 | /** | ||
40 | * Network size estimation handle. | ||
41 | */ | ||
42 | static struct GNUNET_NSE_Handle *nse; | ||
43 | |||
44 | |||
45 | /** | ||
46 | * Callback that is called when network size estimate is updated. | ||
47 | * | ||
48 | * @param cls closure | ||
49 | * @param timestamp time when the estimate was received from the server (or created by the server) | ||
50 | * @param logestimate the log(Base 2) value of the current network size estimate | ||
51 | * @param std_dev standard deviation for the estimate | ||
52 | * | ||
53 | */ | ||
54 | static void | ||
55 | update_network_size_estimate (void *cls, struct GNUNET_TIME_Absolute timestamp, | ||
56 | double logestimate, double std_dev) | ||
57 | { | ||
58 | GNUNET_STATISTICS_update (GDS_stats, | ||
59 | gettext_noop ("# Network size estimates received"), | ||
60 | 1, GNUNET_NO); | ||
61 | /* do not allow estimates < 0.5 */ | ||
62 | log_of_network_size_estimate = GNUNET_MAX (0.5, logestimate); | ||
63 | } | ||
64 | |||
65 | |||
66 | /** | ||
67 | * Return the log of the current network size estimate. | ||
68 | * | ||
69 | * @return log of NSE | ||
70 | */ | ||
71 | double | ||
72 | GDS_NSE_get () | ||
73 | { | ||
74 | return log_of_network_size_estimate; | ||
75 | } | ||
76 | |||
77 | |||
78 | /** | ||
79 | * Initialize NSE subsystem. | ||
80 | */ | ||
81 | void | ||
82 | GDS_NSE_init () | ||
83 | { | ||
84 | unsigned long long hops; | ||
85 | |||
86 | if ( (GNUNET_YES == | ||
87 | GNUNET_CONFIGURATION_have_value (GDS_cfg, | ||
88 | "dht", | ||
89 | "FORCE_NSE")) && | ||
90 | (GNUNET_OK == | ||
91 | GNUNET_CONFIGURATION_get_value_number (GDS_cfg, | ||
92 | "dht", | ||
93 | "FORCE_NSE", | ||
94 | &hops)) ) | ||
95 | { | ||
96 | log_of_network_size_estimate = (double) hops; | ||
97 | return; | ||
98 | } | ||
99 | nse = GNUNET_NSE_connect (GDS_cfg, &update_network_size_estimate, NULL); | ||
100 | } | ||
101 | |||
102 | |||
103 | /** | ||
104 | * Shutdown NSE subsystem. | ||
105 | */ | ||
106 | void | ||
107 | GDS_NSE_done () | ||
108 | { | ||
109 | if (NULL != nse) | ||
110 | { | ||
111 | GNUNET_NSE_disconnect (nse); | ||
112 | nse = NULL; | ||
113 | } | ||
114 | } | ||
115 | |||
116 | /* end of gnunet-service-dht_nse.c */ | ||
diff --git a/src/dht/gnunet-service-wdht_nse.h b/src/dht/gnunet-service-wdht_nse.h new file mode 100644 index 000000000..86ce9d68e --- /dev/null +++ b/src/dht/gnunet-service-wdht_nse.h | |||
@@ -0,0 +1,52 @@ | |||
1 | /* | ||
2 | This file is part of GNUnet. | ||
3 | Copyright (C) 2011 Christian Grothoff (and other contributing authors) | ||
4 | |||
5 | GNUnet is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published | ||
7 | by the Free Software Foundation; either version 3, or (at your | ||
8 | 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 | General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with GNUnet; see the file COPYING. If not, write to the | ||
17 | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /** | ||
22 | * @file dht/gnunet-service-xdht_nse.h | ||
23 | * @brief GNUnet DHT integration with NSE | ||
24 | * @author Christian Grothoff | ||
25 | */ | ||
26 | #ifndef GNUNET_SERVICE_XDHT_NSE_H | ||
27 | #define GNUNET_SERVICE_XDHT_NSE_H | ||
28 | |||
29 | |||
30 | /** | ||
31 | * Return the log of the current network size estimate. | ||
32 | * | ||
33 | * @return log of NSE | ||
34 | */ | ||
35 | double | ||
36 | GDS_NSE_get (void); | ||
37 | |||
38 | |||
39 | /** | ||
40 | * Initialize NSE subsystem. | ||
41 | */ | ||
42 | void | ||
43 | GDS_NSE_init (void); | ||
44 | |||
45 | |||
46 | /** | ||
47 | * Shutdown NSE subsystem. | ||
48 | */ | ||
49 | void | ||
50 | GDS_NSE_done (void); | ||
51 | |||
52 | #endif | ||
diff --git a/src/dht/gnunet-service-wdht_routing.c b/src/dht/gnunet-service-wdht_routing.c new file mode 100644 index 000000000..986eb11ac --- /dev/null +++ b/src/dht/gnunet-service-wdht_routing.c | |||
@@ -0,0 +1,363 @@ | |||
1 | /* | ||
2 | This file is part of GNUnet. | ||
3 | Copyright (C) 2011 - 2014 Christian Grothoff (and other contributing authors) | ||
4 | |||
5 | GNUnet is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published | ||
7 | by the Free Software Foundation; either version 3, or (at your | ||
8 | 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 | General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with GNUnet; see the file COPYING. If not, write to the | ||
17 | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /** | ||
22 | * @file dht/gnunet-service-xdht_routing.c | ||
23 | * @brief GNUnet DHT tracking of requests for routing replies | ||
24 | * @author Supriti Singh | ||
25 | */ | ||
26 | #include "platform.h" | ||
27 | #include "gnunet-service-wdht_neighbours.h" | ||
28 | #include "gnunet-service-wdht_routing.h" | ||
29 | #include "gnunet-service-wdht.h" | ||
30 | |||
31 | |||
32 | /** | ||
33 | * FIXME: Check if its better to store pointer to friend rather than storing | ||
34 | * peer identity next_hop or prev_hop. | ||
35 | * keep entries in destnation and source peer also. so when we send the trail | ||
36 | * teardown message then we don't know the source but if source gets the message | ||
37 | * then it shold remove that trail id from its finger table. But how does | ||
38 | * source know what is the desination finger ? It will whenevr contact a trail | ||
39 | * will do a lookup in routing table and if no trail id present the remove | ||
40 | * that trail of the finger and if only one trail then remove the finger. | ||
41 | * because of this use case of trail teardown I think trail compression | ||
42 | * and trail teardown should not be merged. | ||
43 | * 2. store a pointer to friendInfo in place o peer identity. | ||
44 | */ | ||
45 | /** | ||
46 | * Maximum number of entries in routing table. | ||
47 | */ | ||
48 | #define ROUTING_TABLE_THRESHOLD 80000 | ||
49 | |||
50 | /** | ||
51 | * FIXME: Store friend pointer instead of peer identifier. | ||
52 | * Routing table entry . | ||
53 | */ | ||
54 | struct RoutingTrail | ||
55 | { | ||
56 | /** | ||
57 | * Global Unique identifier of the trail. | ||
58 | */ | ||
59 | struct GNUNET_HashCode trail_id; | ||
60 | |||
61 | /** | ||
62 | * The peer to which this request should be passed to. | ||
63 | */ | ||
64 | struct GNUNET_PeerIdentity next_hop; | ||
65 | |||
66 | /** | ||
67 | * Peer just before next hop in the trail. | ||
68 | */ | ||
69 | struct GNUNET_PeerIdentity prev_hop; | ||
70 | }; | ||
71 | |||
72 | /** | ||
73 | * Routing table of the peer | ||
74 | */ | ||
75 | static struct GNUNET_CONTAINER_MultiHashMap *routing_table; | ||
76 | |||
77 | /** | ||
78 | * Update the prev. hop of the trail. Call made by trail compression where | ||
79 | * if you are the first friend now in the trail then you need to update | ||
80 | * your prev. hop. | ||
81 | * @param trail_id | ||
82 | * @return #GNUNET_OK success | ||
83 | * #GNUNET_SYSERR in case no matching entry found in routing table. | ||
84 | */ | ||
85 | int | ||
86 | GDS_ROUTING_update_trail_prev_hop (const struct GNUNET_HashCode trail_id, | ||
87 | struct GNUNET_PeerIdentity prev_hop) | ||
88 | { | ||
89 | struct RoutingTrail *trail; | ||
90 | |||
91 | trail = GNUNET_CONTAINER_multihashmap_get (routing_table, &trail_id); | ||
92 | |||
93 | if (NULL == trail) | ||
94 | return GNUNET_SYSERR; | ||
95 | |||
96 | trail->prev_hop = prev_hop; | ||
97 | return GNUNET_OK; | ||
98 | } | ||
99 | |||
100 | /** | ||
101 | * Update the next hop of the trail. Call made by trail compression where | ||
102 | * if you are source of the trail and now you have a new first friend, then | ||
103 | * you should update the trail. | ||
104 | * @param trail_id | ||
105 | * @return #GNUNET_OK success | ||
106 | * #GNUNET_SYSERR in case no matching entry found in routing table. | ||
107 | */ | ||
108 | int | ||
109 | GDS_ROUTING_update_trail_next_hop (const struct GNUNET_HashCode trail_id, | ||
110 | struct GNUNET_PeerIdentity next_hop) | ||
111 | { | ||
112 | struct RoutingTrail *trail; | ||
113 | |||
114 | trail = GNUNET_CONTAINER_multihashmap_get (routing_table, &trail_id); | ||
115 | |||
116 | if (NULL == trail) | ||
117 | |||
118 | return GNUNET_SYSERR; | ||
119 | |||
120 | trail->next_hop = next_hop; | ||
121 | return GNUNET_OK; | ||
122 | } | ||
123 | |||
124 | /** | ||
125 | * Get the next hop for trail corresponding to trail_id | ||
126 | * @param trail_id Trail id to be searched. | ||
127 | * @return Next_hop if found | ||
128 | * NULL If next hop not found. | ||
129 | */ | ||
130 | struct GNUNET_PeerIdentity * | ||
131 | GDS_ROUTING_get_next_hop (const struct GNUNET_HashCode trail_id, | ||
132 | enum GDS_ROUTING_trail_direction trail_direction) | ||
133 | { | ||
134 | struct RoutingTrail *trail; | ||
135 | |||
136 | trail = GNUNET_CONTAINER_multihashmap_get (routing_table, &trail_id); | ||
137 | if (NULL == trail) | ||
138 | { | ||
139 | /* If a friend got disconnected and we removed all the entry from the | ||
140 | routing table, then trail will be deleted and my identity will not know | ||
141 | and when it tries to reach to that finger it fails. thats why | ||
142 | assertion always fails in*/ | ||
143 | return NULL; | ||
144 | } | ||
145 | switch (trail_direction) | ||
146 | { | ||
147 | case GDS_ROUTING_SRC_TO_DEST: | ||
148 | return &(trail->next_hop); | ||
149 | case GDS_ROUTING_DEST_TO_SRC: | ||
150 | return &(trail->prev_hop); | ||
151 | } | ||
152 | return NULL; | ||
153 | } | ||
154 | |||
155 | |||
156 | /** | ||
157 | * Remove trail with trail_id | ||
158 | * @param trail_id Trail id to be removed | ||
159 | * @return #GNUNET_YES success | ||
160 | * #GNUNET_NO if entry not found. | ||
161 | */ | ||
162 | int | ||
163 | GDS_ROUTING_remove_trail (const struct GNUNET_HashCode remove_trail_id) | ||
164 | { | ||
165 | struct RoutingTrail *remove_entry; | ||
166 | |||
167 | remove_entry = GNUNET_CONTAINER_multihashmap_get (routing_table, &remove_trail_id); | ||
168 | if (NULL == remove_entry) | ||
169 | return GNUNET_NO; | ||
170 | |||
171 | if (GNUNET_YES == GNUNET_CONTAINER_multihashmap_remove (routing_table, | ||
172 | &remove_trail_id, | ||
173 | remove_entry)) | ||
174 | { | ||
175 | GNUNET_free (remove_entry); | ||
176 | return GNUNET_YES; | ||
177 | } | ||
178 | |||
179 | return GNUNET_NO; | ||
180 | } | ||
181 | |||
182 | |||
183 | /** | ||
184 | * Iterate over routing table and remove entries with value as part of any trail. | ||
185 | * | ||
186 | * @param cls closure | ||
187 | * @param key current public key | ||
188 | * @param value value in the hash map | ||
189 | * @return #GNUNET_YES if we should continue to iterate, | ||
190 | * #GNUNET_NO if not. | ||
191 | */ | ||
192 | static int remove_matching_trails (void *cls, | ||
193 | const struct GNUNET_HashCode *key, | ||
194 | void *value) | ||
195 | { | ||
196 | struct RoutingTrail *remove_trail = value; | ||
197 | struct GNUNET_PeerIdentity *disconnected_peer = cls; | ||
198 | struct GNUNET_HashCode trail_id = *key; | ||
199 | struct GNUNET_PeerIdentity my_identity; | ||
200 | |||
201 | /* If disconnected_peer is next_hop, then send a trail teardown message through | ||
202 | * prev_hop in direction from destination to source. */ | ||
203 | if (0 == GNUNET_CRYPTO_cmp_peer_identity (&remove_trail->next_hop, | ||
204 | disconnected_peer)) | ||
205 | { | ||
206 | my_identity = GDS_NEIGHBOURS_get_my_id (); | ||
207 | if (0 != GNUNET_CRYPTO_cmp_peer_identity (&my_identity, | ||
208 | &remove_trail->prev_hop)) | ||
209 | { | ||
210 | GDS_NEIGHBOURS_send_trail_teardown (&trail_id, | ||
211 | GDS_ROUTING_DEST_TO_SRC, | ||
212 | &remove_trail->prev_hop); | ||
213 | } | ||
214 | } | ||
215 | |||
216 | /* If disconnected_peer is prev_hop, then send a trail teardown through | ||
217 | * next_hop in direction from Source to Destination. */ | ||
218 | if (0 == GNUNET_CRYPTO_cmp_peer_identity (&remove_trail->prev_hop, | ||
219 | disconnected_peer)) | ||
220 | { | ||
221 | my_identity = GDS_NEIGHBOURS_get_my_id (); | ||
222 | |||
223 | if (0 != GNUNET_CRYPTO_cmp_peer_identity (&my_identity, | ||
224 | &remove_trail->next_hop)) | ||
225 | { | ||
226 | GDS_NEIGHBOURS_send_trail_teardown (&trail_id, | ||
227 | GDS_ROUTING_SRC_TO_DEST, | ||
228 | &remove_trail->next_hop); | ||
229 | } | ||
230 | } | ||
231 | |||
232 | GNUNET_assert (GNUNET_YES == | ||
233 | GNUNET_CONTAINER_multihashmap_remove (routing_table, | ||
234 | &trail_id, | ||
235 | remove_trail)); | ||
236 | GNUNET_free (remove_trail); | ||
237 | return GNUNET_YES; | ||
238 | } | ||
239 | |||
240 | #if 0 | ||
241 | /** | ||
242 | * TEST FUNCTION | ||
243 | * Remove after using. | ||
244 | */ | ||
245 | void | ||
246 | GDS_ROUTING_test_print (void) | ||
247 | { | ||
248 | struct GNUNET_CONTAINER_MultiHashMapIterator *iter; | ||
249 | struct RoutingTrail *trail; | ||
250 | struct GNUNET_PeerIdentity print_peer; | ||
251 | struct GNUNET_HashCode key_ret; | ||
252 | int i; | ||
253 | |||
254 | struct GNUNET_PeerIdentity my_identity = GDS_NEIGHBOURS_get_my_id(); | ||
255 | print_peer = my_identity; | ||
256 | FPRINTF (stderr,_("\nSUPU ***PRINTING ROUTING TABLE ***** of =%s"),GNUNET_i2s(&print_peer)); | ||
257 | iter =GNUNET_CONTAINER_multihashmap_iterator_create (routing_table); | ||
258 | for (i = 0; i < GNUNET_CONTAINER_multihashmap_size(routing_table); i++) | ||
259 | { | ||
260 | if(GNUNET_YES == GNUNET_CONTAINER_multihashmap_iterator_next (iter, | ||
261 | &key_ret, | ||
262 | (const void **)&trail)) | ||
263 | { | ||
264 | FPRINTF (stderr,_("\nSUPU %s, %s, %d, trail->trail_id = %s"), | ||
265 | __FILE__, __func__,__LINE__, GNUNET_h2s(&trail->trail_id)); | ||
266 | memcpy (&print_peer, &trail->next_hop, sizeof (struct GNUNET_PeerIdentity)); | ||
267 | FPRINTF (stderr,_("\nSUPU %s, %s, %d, trail->next_hop = %s"), | ||
268 | __FILE__, __func__,__LINE__, GNUNET_i2s(&print_peer)); | ||
269 | memcpy (&print_peer, &trail->prev_hop, sizeof (struct GNUNET_PeerIdentity)); | ||
270 | FPRINTF (stderr,_("\nSUPU %s, %s, %d, trail->prev_hop = %s"), | ||
271 | __FILE__, __func__,__LINE__, GNUNET_i2s(&print_peer)); | ||
272 | } | ||
273 | } | ||
274 | } | ||
275 | #endif | ||
276 | |||
277 | /** | ||
278 | * Remove every trail where peer is either next_hop or prev_hop. Also send a | ||
279 | * trail teardown message in direction of hop which is not disconnected. | ||
280 | * @param peer Peer identity. Trail containing this peer should be removed. | ||
281 | */ | ||
282 | int | ||
283 | GDS_ROUTING_remove_trail_by_peer (const struct GNUNET_PeerIdentity *peer) | ||
284 | { | ||
285 | int ret; | ||
286 | |||
287 | |||
288 | /* No entries in my routing table. */ | ||
289 | if (0 == GNUNET_CONTAINER_multihashmap_size(routing_table)) | ||
290 | return GNUNET_YES; | ||
291 | |||
292 | ret = GNUNET_CONTAINER_multihashmap_iterate (routing_table, | ||
293 | &remove_matching_trails, | ||
294 | (void *)peer); | ||
295 | return ret; | ||
296 | } | ||
297 | |||
298 | |||
299 | /** | ||
300 | * Add a new entry in routing table | ||
301 | * @param new_trail_id | ||
302 | * @param prev_hop | ||
303 | * @param next_hop | ||
304 | * @return #GNUNET_OK success | ||
305 | * #GNUNET_SYSERR in case new_trail_id already exists in the network | ||
306 | * but with different prev_hop/next_hop | ||
307 | */ | ||
308 | int | ||
309 | GDS_ROUTING_add (struct GNUNET_HashCode new_trail_id, | ||
310 | struct GNUNET_PeerIdentity prev_hop, | ||
311 | struct GNUNET_PeerIdentity next_hop) | ||
312 | { | ||
313 | struct RoutingTrail *new_entry; | ||
314 | |||
315 | new_entry = GNUNET_new (struct RoutingTrail); | ||
316 | new_entry->trail_id = new_trail_id; | ||
317 | new_entry->next_hop = next_hop; | ||
318 | new_entry->prev_hop = prev_hop; | ||
319 | |||
320 | |||
321 | return GNUNET_CONTAINER_multihashmap_put (routing_table, | ||
322 | &new_trail_id, new_entry, | ||
323 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY); | ||
324 | |||
325 | } | ||
326 | |||
327 | |||
328 | /** | ||
329 | * Check if the size of routing table has crossed ROUTING_TABLE_THRESHOLD. | ||
330 | * It means that I don't have any more space in my routing table and I can not | ||
331 | * be part of any more trails till there is free space in my routing table. | ||
332 | * @return #GNUNET_YES, if threshold crossed else #GNUNET_NO. | ||
333 | */ | ||
334 | int | ||
335 | GDS_ROUTING_threshold_reached (void) | ||
336 | { | ||
337 | return (GNUNET_CONTAINER_multihashmap_size(routing_table) > | ||
338 | ROUTING_TABLE_THRESHOLD) ? GNUNET_YES:GNUNET_NO; | ||
339 | } | ||
340 | |||
341 | |||
342 | /** | ||
343 | * Initialize routing subsystem. | ||
344 | */ | ||
345 | void | ||
346 | GDS_ROUTING_init (void) | ||
347 | { | ||
348 | routing_table = GNUNET_CONTAINER_multihashmap_create (ROUTING_TABLE_THRESHOLD * 4 / 3, | ||
349 | GNUNET_NO); | ||
350 | } | ||
351 | |||
352 | |||
353 | /** | ||
354 | * Shutdown routing subsystem. | ||
355 | */ | ||
356 | void | ||
357 | GDS_ROUTING_done (void) | ||
358 | { | ||
359 | GNUNET_assert (0 == GNUNET_CONTAINER_multihashmap_size (routing_table)); | ||
360 | GNUNET_CONTAINER_multihashmap_destroy (routing_table); | ||
361 | } | ||
362 | |||
363 | /* end of gnunet-service-xdht_routing.c */ | ||
diff --git a/src/dht/gnunet-service-wdht_routing.h b/src/dht/gnunet-service-wdht_routing.h new file mode 100644 index 000000000..5292ec2ce --- /dev/null +++ b/src/dht/gnunet-service-wdht_routing.h | |||
@@ -0,0 +1,138 @@ | |||
1 | /* | ||
2 | This file is part of GNUnet. | ||
3 | Copyright (C) 2011 - 2014 Christian Grothoff (and other contributing authors) | ||
4 | |||
5 | GNUnet is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published | ||
7 | by the Free Software Foundation; either version 3, or (at your | ||
8 | 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 | General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with GNUnet; see the file COPYING. If not, write to the | ||
17 | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /** | ||
22 | * @file dht/gnunet-service-xdht_routing.h | ||
23 | * @brief GNUnet DHT tracking of requests for routing replies | ||
24 | * @author Christian Grothoff | ||
25 | */ | ||
26 | #ifndef GNUNET_SERVICE_XDHT_ROUTING_H | ||
27 | #define GNUNET_SERVICE_XDHT_ROUTING_H | ||
28 | |||
29 | #include "gnunet_util_lib.h" | ||
30 | #include "gnunet_block_lib.h" | ||
31 | #include "gnunet_dht_service.h" | ||
32 | |||
33 | /** | ||
34 | * To understand the direction in which trial should be read. | ||
35 | */ | ||
36 | enum GDS_ROUTING_trail_direction | ||
37 | { | ||
38 | GDS_ROUTING_SRC_TO_DEST, | ||
39 | GDS_ROUTING_DEST_TO_SRC | ||
40 | }; | ||
41 | |||
42 | |||
43 | /** | ||
44 | * Update the prev. hop of the trail. Call made by trail teardown where | ||
45 | * if you are the first friend now in the trail then you need to update | ||
46 | * your prev. hop. | ||
47 | * @param trail_id | ||
48 | * @return #GNUNET_OK success | ||
49 | * #GNUNET_SYSERR in case no matching entry found in routing table. | ||
50 | */ | ||
51 | int | ||
52 | GDS_ROUTING_update_trail_prev_hop (struct GNUNET_HashCode trail_id, | ||
53 | struct GNUNET_PeerIdentity prev_hop); | ||
54 | |||
55 | |||
56 | /** | ||
57 | * Update the next hop of the trail. Call made by trail compression where | ||
58 | * if you are source of the trail and now you have a new first friend, then | ||
59 | * you should update the trail. | ||
60 | * @param trail_id | ||
61 | * @return #GNUNET_OK success | ||
62 | * #GNUNET_SYSERR in case no matching entry found in routing table. | ||
63 | */ | ||
64 | int | ||
65 | GDS_ROUTING_update_trail_next_hop (const struct GNUNET_HashCode trail_id, | ||
66 | struct GNUNET_PeerIdentity next_hop); | ||
67 | |||
68 | /** | ||
69 | * Get the next hop for trail corresponding to trail_id | ||
70 | * @param trail_id Trail id to be searched. | ||
71 | * @return Next_hop if found | ||
72 | * NULL If next hop not found. | ||
73 | */ | ||
74 | struct GNUNET_PeerIdentity * | ||
75 | GDS_ROUTING_get_next_hop (struct GNUNET_HashCode trail_id, | ||
76 | enum GDS_ROUTING_trail_direction trail_direction); | ||
77 | |||
78 | |||
79 | /** | ||
80 | * Remove every trail where peer is either next_hop or prev_hop | ||
81 | * @param peer Peer to be searched. | ||
82 | */ | ||
83 | int | ||
84 | GDS_ROUTING_remove_trail_by_peer (const struct GNUNET_PeerIdentity *peer); | ||
85 | /** | ||
86 | * Remove trail with trail_id | ||
87 | * @param trail_id Trail id to be removed | ||
88 | * @return #GNUNET_YES success | ||
89 | * #GNUNET_NO if entry not found. | ||
90 | */ | ||
91 | int | ||
92 | GDS_ROUTING_remove_trail (struct GNUNET_HashCode remove_trail_id); | ||
93 | |||
94 | |||
95 | /** | ||
96 | * Add a new entry in routing table | ||
97 | * @param new_trail_id | ||
98 | * @param prev_hop | ||
99 | * @param next_hop | ||
100 | * @return #GNUNET_OK success | ||
101 | * #GNUNET_SYSERR in case new_trail_id already exists in the network | ||
102 | * but with different prev_hop/next_hop | ||
103 | */ | ||
104 | int | ||
105 | GDS_ROUTING_add (struct GNUNET_HashCode new_trail_id, | ||
106 | struct GNUNET_PeerIdentity prev_hop, | ||
107 | struct GNUNET_PeerIdentity next_hop); | ||
108 | |||
109 | |||
110 | /** | ||
111 | * Check if the size of routing table has crossed threshold. | ||
112 | * @return #GNUNET_YES, if threshold crossed | ||
113 | * #GNUNET_NO, if size is within threshold | ||
114 | */ | ||
115 | int | ||
116 | GDS_ROUTING_threshold_reached (void); | ||
117 | |||
118 | #if 0 | ||
119 | /** | ||
120 | * Test function. Remove afterwards. | ||
121 | */ | ||
122 | void | ||
123 | GDS_ROUTING_test_print (void); | ||
124 | #endif | ||
125 | |||
126 | /** | ||
127 | * Initialize routing subsystem. | ||
128 | */ | ||
129 | void | ||
130 | GDS_ROUTING_init (void); | ||
131 | |||
132 | /** | ||
133 | * Shutdown routing subsystem. | ||
134 | */ | ||
135 | void | ||
136 | GDS_ROUTING_done (void); | ||
137 | |||
138 | #endif \ No newline at end of file | ||