Merge branch 'master' of gnunet.org:gnunet
authorng0 <ng0@n0.is>
Tue, 9 Apr 2019 16:55:39 +0000 (16:55 +0000)
committerng0 <ng0@n0.is>
Tue, 9 Apr 2019 16:55:39 +0000 (16:55 +0000)
31 files changed:
configure.ac
po/POTFILES.in
po/de.po
po/es.po
po/fr.po
po/it.po
po/sv.po
po/vi.po
po/zh_CN.po
src/abe/Makefile.am
src/include/gnunet_hello_lib.h
src/include/gnunet_protocols.h
src/include/gnunet_rps_service.h
src/include/gnunet_transport_application_service.h
src/nt/nt.c
src/reclaim/Makefile.am
src/rps/gnunet-rps-profiler.c
src/rps/gnunet-service-rps.c
src/rps/gnunet-service-rps_sampler.c
src/rps/rps-sampler_client.c
src/rps/rps-sampler_client.h
src/rps/rps-sampler_common.c
src/rps/rps-sampler_common.h
src/rps/rps-test_util.h
src/rps/rps_api.c
src/transport/Makefile.am
src/transport/gnunet-communicator-udp.c
src/transport/gnunet-service-tng.c
src/transport/transport.h
src/transport/transport_api2_application.c
src/util/common_logging.c

index 8b44bbf86c2244cb054daa81918d6884f3d8b888..b30141564b2394f1dd188ed1ba2d1bfadc317cb6 100644 (file)
@@ -21,7 +21,7 @@
 #
 AC_PREREQ(2.61)
 # Checks for programs.
-AC_INIT([gnunet], [0.11.2], [bug-gnunet@gnu.org])
+AC_INIT([gnunet], [0.11.3], [bug-gnunet@gnu.org])
 AC_CONFIG_AUX_DIR([build-aux])
 
 # check for legacy option that is no longer supported (#5627) and fail hard
index f06457adcfc9260bc4ed5465a17514819a634daa..000d9939e4b71992d7ea960f5f1f3c67af50e095 100644 (file)
@@ -4,6 +4,14 @@ src/arm/arm_monitor_api.c
 src/arm/gnunet-arm.c
 src/arm/gnunet-service-arm.c
 src/arm/mockup-service.c
+src/ats-tests/ats-testing-experiment.c
+src/ats-tests/ats-testing-log.c
+src/ats-tests/ats-testing-preferences.c
+src/ats-tests/ats-testing-traffic.c
+src/ats-tests/ats-testing.c
+src/ats-tests/gnunet-ats-sim.c
+src/ats-tests/gnunet-solver-eval.c
+src/ats-tool/gnunet-ats.c
 src/ats/ats_api2_application.c
 src/ats/ats_api2_transport.c
 src/ats/ats_api_connectivity.c
@@ -11,10 +19,10 @@ src/ats/ats_api_performance.c
 src/ats/ats_api_scanner.c
 src/ats/ats_api_scheduling.c
 src/ats/gnunet-ats-solver-eval.c
-src/ats/gnunet-service-ats_addresses.c
+src/ats/gnunet-service-ats-new.c
 src/ats/gnunet-service-ats.c
+src/ats/gnunet-service-ats_addresses.c
 src/ats/gnunet-service-ats_connectivity.c
-src/ats/gnunet-service-ats-new.c
 src/ats/gnunet-service-ats_normalization.c
 src/ats/gnunet-service-ats_performance.c
 src/ats/gnunet-service-ats_plugins.c
@@ -26,14 +34,6 @@ src/ats/plugin_ats2_simple.c
 src/ats/plugin_ats_mlp.c
 src/ats/plugin_ats_proportional.c
 src/ats/plugin_ats_ril.c
-src/ats-tests/ats-testing.c
-src/ats-tests/ats-testing-experiment.c
-src/ats-tests/ats-testing-log.c
-src/ats-tests/ats-testing-preferences.c
-src/ats-tests/ats-testing-traffic.c
-src/ats-tests/gnunet-ats-sim.c
-src/ats-tests/gnunet-solver-eval.c
-src/ats-tool/gnunet-ats.c
 src/auction/gnunet-auction-create.c
 src/auction/gnunet-auction-info.c
 src/auction/gnunet-auction-join.c
@@ -50,8 +50,8 @@ src/cadet/cadet_api_list_peers.c
 src/cadet/cadet_api_list_tunnels.c
 src/cadet/cadet_test_lib.c
 src/cadet/desirability_table.c
-src/cadet/gnunet-cadet.c
 src/cadet/gnunet-cadet-profiler.c
+src/cadet/gnunet-cadet.c
 src/cadet/gnunet-service-cadet.c
 src/cadet/gnunet-service-cadet_channel.c
 src/cadet/gnunet-service-cadet_connection.c
@@ -67,15 +67,15 @@ src/consensus/gnunet-service-consensus.c
 src/consensus/plugin_block_consensus.c
 src/conversation/conversation_api.c
 src/conversation/conversation_api_call.c
-src/conversation/gnunet-conversation.c
 src/conversation/gnunet-conversation-test.c
-src/conversation/gnunet_gst.c
-src/conversation/gnunet_gst_test.c
-src/conversation/gnunet-helper-audio-playback.c
+src/conversation/gnunet-conversation.c
 src/conversation/gnunet-helper-audio-playback-gst.c
-src/conversation/gnunet-helper-audio-record.c
+src/conversation/gnunet-helper-audio-playback.c
 src/conversation/gnunet-helper-audio-record-gst.c
+src/conversation/gnunet-helper-audio-record.c
 src/conversation/gnunet-service-conversation.c
+src/conversation/gnunet_gst.c
+src/conversation/gnunet_gst_test.c
 src/conversation/microphone.c
 src/conversation/plugin_gnsrecord_conversation.c
 src/conversation/speaker.c
@@ -112,7 +112,6 @@ src/dht/dht_api.c
 src/dht/dht_test_lib.c
 src/dht/gnunet-dht-get.c
 src/dht/gnunet-dht-monitor.c
-src/dht/gnunet_dht_profiler.c
 src/dht/gnunet-dht-put.c
 src/dht/gnunet-service-dht.c
 src/dht/gnunet-service-dht_clients.c
@@ -121,6 +120,7 @@ src/dht/gnunet-service-dht_hello.c
 src/dht/gnunet-service-dht_neighbours.c
 src/dht/gnunet-service-dht_nse.c
 src/dht/gnunet-service-dht_routing.c
+src/dht/gnunet_dht_profiler.c
 src/dht/plugin_block_dht.c
 src/dns/dns_api.c
 src/dns/gnunet-dns-monitor.c
@@ -130,8 +130,8 @@ src/dns/gnunet-service-dns.c
 src/dns/gnunet-zonewalk.c
 src/dns/plugin_block_dns.c
 src/exit/gnunet-daemon-exit.c
-src/exit/gnunet-helper-exit.c
 src/exit/gnunet-helper-exit-windows.c
+src/exit/gnunet-helper-exit.c
 src/fragmentation/defragmentation.c
 src/fragmentation/fragmentation.c
 src/fs/fs_api.c
@@ -156,8 +156,8 @@ src/fs/gnunet-auto-share.c
 src/fs/gnunet-daemon-fsprofiler.c
 src/fs/gnunet-directory.c
 src/fs/gnunet-download.c
-src/fs/gnunet-fs.c
 src/fs/gnunet-fs-profiler.c
+src/fs/gnunet-fs.c
 src/fs/gnunet-helper-fs-publish.c
 src/fs/gnunet-publish.c
 src/fs/gnunet-search.c
@@ -177,10 +177,10 @@ src/gns/gns_tld_api.c
 src/gns/gnunet-bcd.c
 src/gns/gnunet-dns2gns.c
 src/gns/gnunet-gns-benchmark.c
-src/gns/gnunet-gns.c
 src/gns/gnunet-gns-helper-service-w32.c
 src/gns/gnunet-gns-import.c
 src/gns/gnunet-gns-proxy.c
+src/gns/gnunet-gns.c
 src/gns/gnunet-service-gns.c
 src/gns/gnunet-service-gns_interceptor.c
 src/gns/gnunet-service-gns_resolver.c
@@ -189,19 +189,19 @@ src/gns/nss/nss_gns_query.c
 src/gns/plugin_block_gns.c
 src/gns/plugin_gnsrecord_gns.c
 src/gns/plugin_rest_gns.c
+src/gns/w32nsp-install.c
+src/gns/w32nsp-resolve.c
+src/gns/w32nsp-uninstall.c
+src/gns/w32nsp.c
 src/gnsrecord/gnsrecord.c
 src/gnsrecord/gnsrecord_crypto.c
 src/gnsrecord/gnsrecord_misc.c
 src/gnsrecord/gnsrecord_serialization.c
 src/gnsrecord/plugin_gnsrecord_dns.c
-src/gns/w32nsp.c
-src/gns/w32nsp-install.c
-src/gns/w32nsp-resolve.c
-src/gns/w32nsp-uninstall.c
 src/hello/address.c
 src/hello/gnunet-hello.c
-src/hello/hello.c
 src/hello/hello-ng.c
+src/hello/hello.c
 src/hostlist/gnunet-daemon-hostlist.c
 src/hostlist/gnunet-daemon-hostlist_client.c
 src/hostlist/gnunet-daemon-hostlist_server.c
@@ -225,8 +225,8 @@ src/namecache/namecache_api.c
 src/namecache/plugin_namecache_flat.c
 src/namecache/plugin_namecache_postgres.c
 src/namecache/plugin_namecache_sqlite.c
-src/namestore/gnunet-namestore.c
 src/namestore/gnunet-namestore-fcfsd.c
+src/namestore/gnunet-namestore.c
 src/namestore/gnunet-service-namestore.c
 src/namestore/gnunet-zoneimport.c
 src/namestore/namestore_api.c
@@ -242,10 +242,10 @@ src/nat-auto/gnunet-service-nat-auto.c
 src/nat-auto/gnunet-service-nat-auto_legacy.c
 src/nat-auto/nat_auto_api.c
 src/nat-auto/nat_auto_api_test.c
-src/nat/gnunet-helper-nat-client.c
 src/nat/gnunet-helper-nat-client-windows.c
-src/nat/gnunet-helper-nat-server.c
+src/nat/gnunet-helper-nat-client.c
 src/nat/gnunet-helper-nat-server-windows.c
+src/nat/gnunet-helper-nat-server.c
 src/nat/gnunet-nat.c
 src/nat/gnunet-service-nat.c
 src/nat/gnunet-service-nat_externalip.c
@@ -254,17 +254,17 @@ src/nat/gnunet-service-nat_mini.c
 src/nat/gnunet-service-nat_stun.c
 src/nat/nat_api.c
 src/nat/nat_api_stun.c
-src/nse/gnunet-nse.c
 src/nse/gnunet-nse-profiler.c
+src/nse/gnunet-nse.c
 src/nse/gnunet-service-nse.c
 src/nse/nse_api.c
 src/nt/nt.c
-src/peerinfo/gnunet-service-peerinfo.c
-src/peerinfo/peerinfo_api.c
-src/peerinfo/peerinfo_api_notify.c
 src/peerinfo-tool/gnunet-peerinfo.c
 src/peerinfo-tool/gnunet-peerinfo_plugins.c
 src/peerinfo-tool/plugin_rest_peerinfo.c
+src/peerinfo/gnunet-service-peerinfo.c
+src/peerinfo/peerinfo_api.c
+src/peerinfo/peerinfo_api_notify.c
 src/peerstore/gnunet-peerstore.c
 src/peerstore/gnunet-service-peerstore.c
 src/peerstore/peerstore_api.c
@@ -311,22 +311,22 @@ src/revocation/gnunet-revocation.c
 src/revocation/gnunet-service-revocation.c
 src/revocation/plugin_block_revocation.c
 src/revocation/revocation_api.c
-src/rps/gnunet-rps.c
 src/rps/gnunet-rps-profiler.c
+src/rps/gnunet-rps.c
 src/rps/gnunet-service-rps.c
 src/rps/gnunet-service-rps_custommap.c
 src/rps/gnunet-service-rps_sampler.c
 src/rps/gnunet-service-rps_sampler_elem.c
 src/rps/gnunet-service-rps_view.c
-src/rps/rps_api.c
 src/rps/rps-sampler_client.c
 src/rps/rps-sampler_common.c
 src/rps/rps-test_util.c
+src/rps/rps_api.c
 src/scalarproduct/gnunet-scalarproduct.c
-src/scalarproduct/gnunet-service-scalarproduct_alice.c
-src/scalarproduct/gnunet-service-scalarproduct_bob.c
 src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c
 src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c
+src/scalarproduct/gnunet-service-scalarproduct_alice.c
+src/scalarproduct/gnunet-service-scalarproduct_bob.c
 src/scalarproduct/scalarproduct_api.c
 src/secretsharing/gnunet-secretsharing-profiler.c
 src/secretsharing/gnunet-service-secretsharing.c
@@ -352,15 +352,16 @@ src/statistics/gnunet-statistics.c
 src/statistics/statistics_api.c
 src/template/gnunet-service-template.c
 src/template/gnunet-template.c
+src/testbed-logger/gnunet-service-testbed-logger.c
+src/testbed-logger/testbed_logger_api.c
 src/testbed/generate-underlay-topology.c
 src/testbed/gnunet-daemon-latency-logger.c
 src/testbed/gnunet-daemon-testbed-blacklist.c
 src/testbed/gnunet-daemon-testbed-underlay.c
 src/testbed/gnunet-helper-testbed.c
-src/testbed/gnunet_mpi_test.c
 src/testbed/gnunet-service-test-barriers.c
-src/testbed/gnunet-service-testbed_barriers.c
 src/testbed/gnunet-service-testbed.c
+src/testbed/gnunet-service-testbed_barriers.c
 src/testbed/gnunet-service-testbed_cache.c
 src/testbed/gnunet-service-testbed_connectionpool.c
 src/testbed/gnunet-service-testbed_cpustatus.c
@@ -368,20 +369,19 @@ src/testbed/gnunet-service-testbed_links.c
 src/testbed/gnunet-service-testbed_meminfo.c
 src/testbed/gnunet-service-testbed_oc.c
 src/testbed/gnunet-service-testbed_peers.c
-src/testbed/gnunet_testbed_mpi_spawn.c
 src/testbed/gnunet-testbed-profiler.c
-src/testbed-logger/gnunet-service-testbed-logger.c
-src/testbed-logger/testbed_logger_api.c
-src/testbed/testbed_api_barriers.c
+src/testbed/gnunet_mpi_test.c
+src/testbed/gnunet_testbed_mpi_spawn.c
 src/testbed/testbed_api.c
+src/testbed/testbed_api_barriers.c
 src/testbed/testbed_api_hosts.c
 src/testbed/testbed_api_operations.c
 src/testbed/testbed_api_peers.c
 src/testbed/testbed_api_sd.c
 src/testbed/testbed_api_services.c
 src/testbed/testbed_api_statistics.c
-src/testbed/testbed_api_testbed.c
 src/testbed/testbed_api_test.c
+src/testbed/testbed_api_testbed.c
 src/testbed/testbed_api_topology.c
 src/testbed/testbed_api_underlay.c
 src/testing/gnunet-testing.c
@@ -393,35 +393,40 @@ src/transport/gnunet-communicator-tcp.c
 src/transport/gnunet-communicator-udp.c
 src/transport/gnunet-communicator-unix.c
 src/transport/gnunet-helper-transport-bluetooth.c
-src/transport/gnunet-helper-transport-wlan.c
 src/transport/gnunet-helper-transport-wlan-dummy.c
+src/transport/gnunet-helper-transport-wlan.c
 src/transport/gnunet-service-tng.c
-src/transport/gnunet-service-transport_ats.c
 src/transport/gnunet-service-transport.c
+src/transport/gnunet-service-transport_ats.c
 src/transport/gnunet-service-transport_hello.c
 src/transport/gnunet-service-transport_manipulation.c
 src/transport/gnunet-service-transport_neighbours.c
 src/transport/gnunet-service-transport_plugins.c
 src/transport/gnunet-service-transport_validation.c
-src/transport/gnunet-transport.c
 src/transport/gnunet-transport-certificate-creation.c
 src/transport/gnunet-transport-profiler.c
 src/transport/gnunet-transport-wlan-receiver.c
 src/transport/gnunet-transport-wlan-sender.c
+src/transport/gnunet-transport.c
 src/transport/plugin_transport_http_client.c
 src/transport/plugin_transport_http_common.c
 src/transport/plugin_transport_http_server.c
 src/transport/plugin_transport_smtp.c
 src/transport/plugin_transport_tcp.c
 src/transport/plugin_transport_template.c
-src/transport/plugin_transport_udp_broadcasting.c
 src/transport/plugin_transport_udp.c
+src/transport/plugin_transport_udp_broadcasting.c
 src/transport/plugin_transport_unix.c
 src/transport/plugin_transport_wlan.c
 src/transport/tcp_connection_legacy.c
 src/transport/tcp_server_legacy.c
 src/transport/tcp_server_mst_legacy.c
 src/transport/tcp_service_legacy.c
+src/transport/transport-testing-filenames.c
+src/transport/transport-testing-loggers.c
+src/transport/transport-testing-main.c
+src/transport/transport-testing-send.c
+src/transport/transport-testing.c
 src/transport/transport_api2_address.c
 src/transport/transport_api2_application.c
 src/transport/transport_api2_communication.c
@@ -435,11 +440,6 @@ src/transport/transport_api_manipulation.c
 src/transport/transport_api_monitor_peers.c
 src/transport/transport_api_monitor_plugins.c
 src/transport/transport_api_offer_hello.c
-src/transport/transport-testing.c
-src/transport/transport-testing-filenames.c
-src/transport/transport-testing-loggers.c
-src/transport/transport-testing-main.c
-src/transport/transport-testing-send.c
 src/util/bandwidth.c
 src/util/benchmark.c
 src/util/bio.c
@@ -452,8 +452,8 @@ src/util/configuration_loader.c
 src/util/container_bloomfilter.c
 src/util/container_heap.c
 src/util/container_meta_data.c
-src/util/container_multihashmap32.c
 src/util/container_multihashmap.c
+src/util/container_multihashmap32.c
 src/util/container_multipeermap.c
 src/util/container_multishortmap.c
 src/util/crypto_abe.c
@@ -475,16 +475,16 @@ src/util/dnsparser.c
 src/util/dnsstub.c
 src/util/getopt.c
 src/util/getopt_helpers.c
-src/util/gnunet-config.c
 src/util/gnunet-config-diff.c
+src/util/gnunet-config.c
 src/util/gnunet-ecc.c
 src/util/gnunet-helper-w32-console.c
 src/util/gnunet-qr.c
 src/util/gnunet-resolver.c
 src/util/gnunet-scrypt.c
 src/util/gnunet-service-resolver.c
-src/util/gnunet-timeout.c
 src/util/gnunet-timeout-w32.c
+src/util/gnunet-timeout.c
 src/util/gnunet-uri.c
 src/util/helper.c
 src/util/load.c
@@ -513,13 +513,13 @@ src/util/tun.c
 src/util/w32cat.c
 src/util/win.c
 src/util/winproc.c
-src/vpn/gnunet-helper-vpn.c
 src/vpn/gnunet-helper-vpn-windows.c
+src/vpn/gnunet-helper-vpn.c
 src/vpn/gnunet-service-vpn.c
 src/vpn/gnunet-vpn.c
 src/vpn/vpn_api.c
-src/zonemaster/gnunet-service-zonemaster.c
 src/zonemaster/gnunet-service-zonemaster-monitor.c
+src/zonemaster/gnunet-service-zonemaster.c
 src/fs/fs_api.h
 src/include/compat.h
 src/include/gnunet_common.h
index b25091255d2e22f8694c8e25344916246ce9e838..dd1f74f04b2bda9a75806419d7a2b25792a3e2fe 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnunet 0.10.1\n"
 "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2019-04-04 12:39+0200\n"
+"POT-Creation-Date: 2019-04-07 14:40+0200\n"
 "PO-Revision-Date: 2015-03-08 16:16+0100\n"
 "Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n"
 "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
@@ -237,28 +237,28 @@ msgstr ""
 #: src/transport/plugin_transport_tcp.c:1145
 #: src/transport/plugin_transport_tcp.c:3835
 #: src/transport/tcp_service_legacy.c:576
-#: src/transport/tcp_service_legacy.c:582 src/util/service.c:1156
-#: src/util/service.c:1162
+#: src/transport/tcp_service_legacy.c:582 src/util/service.c:1150
+#: src/util/service.c:1156
 #, c-format
 msgid "Require valid port number for service `%s' in configuration!\n"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:457 src/transport/plugin_transport_tcp.c:1176
 #: src/transport/tcp_service_legacy.c:613 src/util/client.c:521
-#: src/util/service.c:1201
+#: src/util/service.c:1195
 #, c-format
 msgid "UNIXPATH `%s' too long, maximum length is %llu\n"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:462 src/transport/plugin_transport_tcp.c:1180
 #: src/transport/tcp_service_legacy.c:617 src/util/client.c:526
-#: src/util/service.c:1206
+#: src/util/service.c:1200
 #, c-format
 msgid "Using `%s' instead\n"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:495 src/transport/plugin_transport_tcp.c:1211
-#: src/transport/tcp_service_legacy.c:648 src/util/service.c:1242
+#: src/transport/tcp_service_legacy.c:648 src/util/service.c:1236
 #, c-format
 msgid ""
 "Disabling UNIX domain socket support for service `%s', failed to create UNIX "
@@ -266,7 +266,7 @@ msgid ""
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:517 src/transport/plugin_transport_tcp.c:1228
-#: src/transport/tcp_service_legacy.c:665 src/util/service.c:1260
+#: src/transport/tcp_service_legacy.c:665 src/util/service.c:1254
 #, c-format
 msgid "Have neither PORT nor UNIXPATH for service `%s', but one is required\n"
 msgstr ""
@@ -274,7 +274,7 @@ msgstr ""
 #: src/arm/gnunet-service-arm.c:556
 #: src/transport/plugin_transport_http_server.c:2688
 #: src/transport/plugin_transport_tcp.c:1259
-#: src/transport/tcp_service_legacy.c:696 src/util/service.c:1301
+#: src/transport/tcp_service_legacy.c:696 src/util/service.c:1295
 #, c-format
 msgid "Failed to resolve `%s': %s\n"
 msgstr "»%s« konnte nicht aufgelöst werden: %s\n"
@@ -282,7 +282,7 @@ msgstr "»%s« konnte nicht aufgelöst werden: %s\n"
 #: src/arm/gnunet-service-arm.c:575
 #: src/transport/plugin_transport_http_server.c:2706
 #: src/transport/plugin_transport_tcp.c:1278
-#: src/transport/tcp_service_legacy.c:715 src/util/service.c:1321
+#: src/transport/tcp_service_legacy.c:715 src/util/service.c:1315
 #, fuzzy, c-format
 msgid "Failed to find %saddress for `%s'.\n"
 msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
@@ -2102,7 +2102,7 @@ msgstr ""
 msgid "Exiting as the number of peers is %u\n"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:949 src/rps/gnunet-rps-profiler.c:2981
+#: src/dht/gnunet_dht_profiler.c:949 src/rps/gnunet-rps-profiler.c:2962
 #, fuzzy
 msgid "number of peers to start"
 msgstr "Anzahl an Durchläufen"
@@ -6161,20 +6161,20 @@ msgstr ""
 msgid "Get peers from biased stream"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2986
+#: src/rps/gnunet-rps-profiler.c:2967
 msgid "duration of the profiling"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2991
+#: src/rps/gnunet-rps-profiler.c:2972
 msgid "timeout for the profiling"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2996
+#: src/rps/gnunet-rps-profiler.c:2977
 #, fuzzy
 msgid "number of PeerIDs to request"
 msgstr "Anzahl an Durchläufen"
 
-#: src/rps/gnunet-rps-profiler.c:3012
+#: src/rps/gnunet-rps-profiler.c:2993
 msgid "Measure quality and performance of the RPS service."
 msgstr ""
 
@@ -7892,17 +7892,17 @@ msgstr "Zugriff verweigert auf »%s«\n"
 msgid "Accepting connection from `%s': %p\n"
 msgstr ""
 
-#: src/transport/tcp_server_legacy.c:474 src/util/service.c:1630
+#: src/transport/tcp_server_legacy.c:474 src/util/service.c:1624
 #, fuzzy, c-format
 msgid "`%s' failed for port %d (%s).\n"
 msgstr "`%s' fehlgeschlagen für Laufwerk %s: %u\n"
 
-#: src/transport/tcp_server_legacy.c:484 src/util/service.c:1640
+#: src/transport/tcp_server_legacy.c:484 src/util/service.c:1634
 #, fuzzy, c-format
 msgid "`%s' failed for port %d (%s): address already in use\n"
 msgstr "`%s' schlug fehl für Port %d: %s. Läuft gnunetd bereits?\n"
 
-#: src/transport/tcp_server_legacy.c:490 src/util/service.c:1646
+#: src/transport/tcp_server_legacy.c:490 src/util/service.c:1640
 #, fuzzy, c-format
 msgid "`%s' failed for `%s': address already in use\n"
 msgstr "%s schlug fehl, Nachrichten Typ %d ist bereits in Verwendung.\n"
@@ -7914,7 +7914,7 @@ msgid ""
 "`GNUNET_SERVER_receive_done' after %s\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:339 src/util/service.c:870
+#: src/transport/tcp_service_legacy.c:339 src/util/service.c:864
 #, c-format
 msgid "Unknown address family %d\n"
 msgstr ""
@@ -7924,27 +7924,27 @@ msgstr ""
 msgid "Access from `%s' denied to service `%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:402 src/util/service.c:994
+#: src/transport/tcp_service_legacy.c:402 src/util/service.c:988
 #, c-format
 msgid "Could not parse IPv4 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:440 src/util/service.c:1037
+#: src/transport/tcp_service_legacy.c:440 src/util/service.c:1031
 #, c-format
 msgid "Could not parse IPv6 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:904 src/util/service.c:1561
+#: src/transport/tcp_service_legacy.c:904 src/util/service.c:1555
 msgid "Could not access a pre-bound socket, will try to bind myself\n"
 msgstr ""
 
 #: src/transport/tcp_service_legacy.c:953
-#: src/transport/tcp_service_legacy.c:971 src/util/service.c:1714
+#: src/transport/tcp_service_legacy.c:971 src/util/service.c:1708
 #, c-format
 msgid "Specified value for `%s' of service `%s' is invalid\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:996 src/util/service.c:1747
+#: src/transport/tcp_service_legacy.c:996 src/util/service.c:1741
 #, c-format
 msgid "Could not access pre-bound socket %u, will try to bind myself\n"
 msgstr ""
@@ -7959,44 +7959,44 @@ msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
 msgid "Service `%s' runs at %s\n"
 msgstr "Dienst »%s« läuft auf %s\n"
 
-#: src/transport/tcp_service_legacy.c:1251 src/util/service.c:2021
+#: src/transport/tcp_service_legacy.c:1251 src/util/service.c:2015
 msgid "Service process failed to initialize\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1255 src/util/service.c:2025
+#: src/transport/tcp_service_legacy.c:1255 src/util/service.c:2019
 msgid "Service process could not initialize server function\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1259 src/util/service.c:2029
+#: src/transport/tcp_service_legacy.c:1259 src/util/service.c:2023
 msgid "Service process failed to report status\n"
 msgstr ""
 
 #: src/transport/tcp_service_legacy.c:1313 src/util/disk.c:1535
-#: src/util/service.c:1899
+#: src/util/service.c:1893
 #, fuzzy, c-format
 msgid "Cannot obtain information about user `%s': %s\n"
 msgstr "Fehler beim Speichern der Konfigurationsdatei: `%s': %s.\n"
 
-#: src/transport/tcp_service_legacy.c:1314 src/util/service.c:1901
+#: src/transport/tcp_service_legacy.c:1314 src/util/service.c:1895
 msgid "No such user"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1327 src/util/service.c:1920
+#: src/transport/tcp_service_legacy.c:1327 src/util/service.c:1914
 #, c-format
 msgid "Cannot change user/group to `%s': %s\n"
 msgstr "Benutzer/Gruppe kann nicht zu »%s« geändert werden: %s\n"
 
-#: src/transport/tcp_service_legacy.c:1398 src/util/service.c:2282
+#: src/transport/tcp_service_legacy.c:1398 src/util/service.c:2276
 msgid "do daemonize (detach from terminal)"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1448 src/util/service.c:2346
-#: src/util/service.c:2361
+#: src/transport/tcp_service_legacy.c:1448 src/util/service.c:2340
+#: src/util/service.c:2355
 #, fuzzy, c-format
 msgid "Malformed configuration file `%s', exit ...\n"
 msgstr "Konfigurationsdatei `%s' wurde erzeugt.\n"
 
-#: src/transport/tcp_service_legacy.c:1458 src/util/service.c:2373
+#: src/transport/tcp_service_legacy.c:1458 src/util/service.c:2367
 #, fuzzy
 msgid "Malformed configuration, exit ...\n"
 msgstr "GNUnet Konfiguration"
@@ -8154,22 +8154,22 @@ msgid ""
 "%llu)\n"
 msgstr ""
 
-#: src/util/crypto_ecc.c:904
+#: src/util/crypto_ecc.c:887
 #, fuzzy, c-format
 msgid "ECC signing failed at %s:%d: %s\n"
 msgstr "`%s' schlug fehl bei %s:%d mit dem Fehler: `%s'.\n"
 
-#: src/util/crypto_ecc.c:963
+#: src/util/crypto_ecc.c:946
 #, fuzzy, c-format
 msgid "EdDSA signing failed at %s:%d: %s\n"
 msgstr "`%s' schlug fehl bei %s:%d mit dem Fehler: `%s'.\n"
 
-#: src/util/crypto_ecc.c:1042
+#: src/util/crypto_ecc.c:1025
 #, fuzzy, c-format
 msgid "ECDSA signature verification failed at %s:%d: %s\n"
 msgstr "RSA Signaturüberprüfung fehlgeschlagen bei %s:%d: %s\n"
 
-#: src/util/crypto_ecc.c:1103
+#: src/util/crypto_ecc.c:1086
 #, fuzzy, c-format
 msgid "EdDSA signature verification failed at %s:%d: %s\n"
 msgstr "RSA Signaturüberprüfung fehlgeschlagen bei %s:%d: %s\n"
@@ -8728,14 +8728,14 @@ msgstr "Standarddienst »%s« ist nicht korrekt eingerichtet!\n"
 msgid "Could not resolve our FQDN: %s\n"
 msgstr "`%s' konnte nicht aufgelöst werden: %s\n"
 
-#: src/util/service.c:674
+#: src/util/service.c:668
 #, c-format
 msgid ""
 "Processing code for message of type %u did not call "
 "`GNUNET_SERVICE_client_continue' after %s\n"
 msgstr ""
 
-#: src/util/service.c:1826
+#: src/util/service.c:1820
 msgid ""
 "Could not bind to any of the ports I was supposed to, refusing to run!\n"
 msgstr ""
index 037759e543ace0459a0a4e2123151293e60c9a20..90893a5e91c1d44ad1ce924f65d036b38e38f250 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnunet 0.9.5a\n"
 "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2019-04-04 12:39+0200\n"
+"POT-Creation-Date: 2019-04-07 14:40+0200\n"
 "PO-Revision-Date: 2013-02-23 17:50+0100\n"
 "Last-Translator: Miguel Ángel Arruga Vivas <rosen644835@gmail.com>\n"
 "Language-Team: Spanish <es@li.org>\n"
@@ -247,8 +247,8 @@ msgstr ""
 #: src/transport/plugin_transport_tcp.c:1145
 #: src/transport/plugin_transport_tcp.c:3835
 #: src/transport/tcp_service_legacy.c:576
-#: src/transport/tcp_service_legacy.c:582 src/util/service.c:1156
-#: src/util/service.c:1162
+#: src/transport/tcp_service_legacy.c:582 src/util/service.c:1150
+#: src/util/service.c:1156
 #, c-format
 msgid "Require valid port number for service `%s' in configuration!\n"
 msgstr ""
@@ -257,7 +257,7 @@ msgstr ""
 
 #: src/arm/gnunet-service-arm.c:457 src/transport/plugin_transport_tcp.c:1176
 #: src/transport/tcp_service_legacy.c:613 src/util/client.c:521
-#: src/util/service.c:1201
+#: src/util/service.c:1195
 #, c-format
 msgid "UNIXPATH `%s' too long, maximum length is %llu\n"
 msgstr ""
@@ -265,13 +265,13 @@ msgstr ""
 
 #: src/arm/gnunet-service-arm.c:462 src/transport/plugin_transport_tcp.c:1180
 #: src/transport/tcp_service_legacy.c:617 src/util/client.c:526
-#: src/util/service.c:1206
+#: src/util/service.c:1200
 #, c-format
 msgid "Using `%s' instead\n"
 msgstr "Usando «%s» en su defecto\n"
 
 #: src/arm/gnunet-service-arm.c:495 src/transport/plugin_transport_tcp.c:1211
-#: src/transport/tcp_service_legacy.c:648 src/util/service.c:1242
+#: src/transport/tcp_service_legacy.c:648 src/util/service.c:1236
 #, c-format
 msgid ""
 "Disabling UNIX domain socket support for service `%s', failed to create UNIX "
@@ -281,7 +281,7 @@ msgstr ""
 "«%s», no se pudo crear un «socket» UNIX: %s\n"
 
 #: src/arm/gnunet-service-arm.c:517 src/transport/plugin_transport_tcp.c:1228
-#: src/transport/tcp_service_legacy.c:665 src/util/service.c:1260
+#: src/transport/tcp_service_legacy.c:665 src/util/service.c:1254
 #, c-format
 msgid "Have neither PORT nor UNIXPATH for service `%s', but one is required\n"
 msgstr ""
@@ -291,7 +291,7 @@ msgstr ""
 #: src/arm/gnunet-service-arm.c:556
 #: src/transport/plugin_transport_http_server.c:2688
 #: src/transport/plugin_transport_tcp.c:1259
-#: src/transport/tcp_service_legacy.c:696 src/util/service.c:1301
+#: src/transport/tcp_service_legacy.c:696 src/util/service.c:1295
 #, c-format
 msgid "Failed to resolve `%s': %s\n"
 msgstr "Se produjo un fallo al resolver «%s»: %s\n"
@@ -299,7 +299,7 @@ msgstr "Se produjo un fallo al resolver «%s»: %s\n"
 #: src/arm/gnunet-service-arm.c:575
 #: src/transport/plugin_transport_http_server.c:2706
 #: src/transport/plugin_transport_tcp.c:1278
-#: src/transport/tcp_service_legacy.c:715 src/util/service.c:1321
+#: src/transport/tcp_service_legacy.c:715 src/util/service.c:1315
 #, c-format
 msgid "Failed to find %saddress for `%s'.\n"
 msgstr "No se encontró la dirección %s para «%s».\n"
@@ -2197,7 +2197,7 @@ msgstr "Imprime todos los paquetes que pasan por la DHT."
 msgid "Exiting as the number of peers is %u\n"
 msgstr "El número máximo de conexiones es %u\n"
 
-#: src/dht/gnunet_dht_profiler.c:949 src/rps/gnunet-rps-profiler.c:2981
+#: src/dht/gnunet_dht_profiler.c:949 src/rps/gnunet-rps-profiler.c:2962
 msgid "number of peers to start"
 msgstr "número de pares para empezar"
 
@@ -6369,23 +6369,23 @@ msgstr ""
 msgid "Get peers from biased stream"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2986
+#: src/rps/gnunet-rps-profiler.c:2967
 #, fuzzy
 msgid "duration of the profiling"
 msgstr ""
 "La configuración o la versión de GNUnet cambiaron.  ¡Debes ejecutar '%s'!\n"
 
-#: src/rps/gnunet-rps-profiler.c:2991
+#: src/rps/gnunet-rps-profiler.c:2972
 #, fuzzy
 msgid "timeout for the profiling"
 msgstr "Especificar el tipo del registro a buscar"
 
-#: src/rps/gnunet-rps-profiler.c:2996
+#: src/rps/gnunet-rps-profiler.c:2977
 #, fuzzy
 msgid "number of PeerIDs to request"
 msgstr "número de pares para empezar"
 
-#: src/rps/gnunet-rps-profiler.c:3012
+#: src/rps/gnunet-rps-profiler.c:2993
 #, fuzzy
 msgid "Measure quality and performance of the RPS service."
 msgstr "Medir la calidad y rendimiento del servicio NSE."
@@ -8197,17 +8197,17 @@ msgstr "Acceso denegado a «%s»\n"
 msgid "Accepting connection from `%s': %p\n"
 msgstr "Aceptando conexión desde «%s»: %p\n"
 
-#: src/transport/tcp_server_legacy.c:474 src/util/service.c:1630
+#: src/transport/tcp_server_legacy.c:474 src/util/service.c:1624
 #, c-format
 msgid "`%s' failed for port %d (%s).\n"
 msgstr "«%s» falló para el puerto %d (%s).\n"
 
-#: src/transport/tcp_server_legacy.c:484 src/util/service.c:1640
+#: src/transport/tcp_server_legacy.c:484 src/util/service.c:1634
 #, c-format
 msgid "`%s' failed for port %d (%s): address already in use\n"
 msgstr "«%s» falló para el puerto %d (%s): dirección en uso actualmente\n"
 
-#: src/transport/tcp_server_legacy.c:490 src/util/service.c:1646
+#: src/transport/tcp_server_legacy.c:490 src/util/service.c:1640
 #, fuzzy, c-format
 msgid "`%s' failed for `%s': address already in use\n"
 msgstr "«%s» falló para «%.*s»: dirección en uso actualmente\n"
@@ -8221,7 +8221,7 @@ msgstr ""
 "El código de procesado para el mensaje del tipo %u no llamó a "
 "«GNUNET_SERVER_receive_done» después de %s\n"
 
-#: src/transport/tcp_service_legacy.c:339 src/util/service.c:870
+#: src/transport/tcp_service_legacy.c:339 src/util/service.c:864
 #, c-format
 msgid "Unknown address family %d\n"
 msgstr "Familia de direcciones %d desconocida\n"
@@ -8231,29 +8231,29 @@ msgstr "Familia de direcciones %d desconocida\n"
 msgid "Access from `%s' denied to service `%s'\n"
 msgstr "Acceso denegado desde «%s» al servicio «%s»\n"
 
-#: src/transport/tcp_service_legacy.c:402 src/util/service.c:994
+#: src/transport/tcp_service_legacy.c:402 src/util/service.c:988
 #, c-format
 msgid "Could not parse IPv4 network specification `%s' for `%s:%s'\n"
 msgstr "No se pudo procesar la especificación de red IPv4 «%s» para «%s:%s»\n"
 
-#: src/transport/tcp_service_legacy.c:440 src/util/service.c:1037
+#: src/transport/tcp_service_legacy.c:440 src/util/service.c:1031
 #, c-format
 msgid "Could not parse IPv6 network specification `%s' for `%s:%s'\n"
 msgstr "No se pudo procesar la especificación de red IPv6 «%s» para «%s:%s»\n"
 
-#: src/transport/tcp_service_legacy.c:904 src/util/service.c:1561
+#: src/transport/tcp_service_legacy.c:904 src/util/service.c:1555
 msgid "Could not access a pre-bound socket, will try to bind myself\n"
 msgstr ""
 "No se pudo acceder a un «socket» pre-ascociado, lo intentaré asociar yo "
 "mismo\n"
 
 #: src/transport/tcp_service_legacy.c:953
-#: src/transport/tcp_service_legacy.c:971 src/util/service.c:1714
+#: src/transport/tcp_service_legacy.c:971 src/util/service.c:1708
 #, c-format
 msgid "Specified value for `%s' of service `%s' is invalid\n"
 msgstr "El valor especificado «%s» para el servicio «%s» no es válido\n"
 
-#: src/transport/tcp_service_legacy.c:996 src/util/service.c:1747
+#: src/transport/tcp_service_legacy.c:996 src/util/service.c:1741
 #, c-format
 msgid "Could not access pre-bound socket %u, will try to bind myself\n"
 msgstr ""
@@ -8270,45 +8270,45 @@ msgstr "Se produjo un fallo al inciar «%s» en «%s»\n"
 msgid "Service `%s' runs at %s\n"
 msgstr "El servicio «%s» se ejecuta en %s\n"
 
-#: src/transport/tcp_service_legacy.c:1251 src/util/service.c:2021
+#: src/transport/tcp_service_legacy.c:1251 src/util/service.c:2015
 msgid "Service process failed to initialize\n"
 msgstr "No se pudo inicializar el proceso del servicio\n"
 
-#: src/transport/tcp_service_legacy.c:1255 src/util/service.c:2025
+#: src/transport/tcp_service_legacy.c:1255 src/util/service.c:2019
 msgid "Service process could not initialize server function\n"
 msgstr ""
 "No se pudo inicializar la función del servidor en el proceso del servicio\n"
 
-#: src/transport/tcp_service_legacy.c:1259 src/util/service.c:2029
+#: src/transport/tcp_service_legacy.c:1259 src/util/service.c:2023
 msgid "Service process failed to report status\n"
 msgstr "El proceso del servicio no devolvió un estado\n"
 
 #: src/transport/tcp_service_legacy.c:1313 src/util/disk.c:1535
-#: src/util/service.c:1899
+#: src/util/service.c:1893
 #, c-format
 msgid "Cannot obtain information about user `%s': %s\n"
 msgstr "No se pudo obtener información acerca del usuario «%s»: %s\n"
 
-#: src/transport/tcp_service_legacy.c:1314 src/util/service.c:1901
+#: src/transport/tcp_service_legacy.c:1314 src/util/service.c:1895
 msgid "No such user"
 msgstr "No existe tal usuario"
 
-#: src/transport/tcp_service_legacy.c:1327 src/util/service.c:1920
+#: src/transport/tcp_service_legacy.c:1327 src/util/service.c:1914
 #, c-format
 msgid "Cannot change user/group to `%s': %s\n"
 msgstr "Imposible cambiar el usuario/grupo a «%s»: %s\n"
 
-#: src/transport/tcp_service_legacy.c:1398 src/util/service.c:2282
+#: src/transport/tcp_service_legacy.c:1398 src/util/service.c:2276
 msgid "do daemonize (detach from terminal)"
 msgstr "demonizar (desasociar del terminal)"
 
-#: src/transport/tcp_service_legacy.c:1448 src/util/service.c:2346
-#: src/util/service.c:2361
+#: src/transport/tcp_service_legacy.c:1448 src/util/service.c:2340
+#: src/util/service.c:2355
 #, fuzzy, c-format
 msgid "Malformed configuration file `%s', exit ...\n"
 msgstr "Se produjo un fallo al borrar el fichero de configuración %s\n"
 
-#: src/transport/tcp_service_legacy.c:1458 src/util/service.c:2373
+#: src/transport/tcp_service_legacy.c:1458 src/util/service.c:2367
 #, fuzzy
 msgid "Malformed configuration, exit ...\n"
 msgstr "Se produjo un fallo al borrar el fichero de configuración %s\n"
@@ -8469,22 +8469,22 @@ msgstr ""
 "El tamaño del fichero en disco es incorrecto para este «Bloom "
 "filter» (esperado %llu, tiene %llu)\n"
 
-#: src/util/crypto_ecc.c:904
+#: src/util/crypto_ecc.c:887
 #, c-format
 msgid "ECC signing failed at %s:%d: %s\n"
 msgstr "El firmado ECC falló en %s:%d: %s\n"
 
-#: src/util/crypto_ecc.c:963
+#: src/util/crypto_ecc.c:946
 #, fuzzy, c-format
 msgid "EdDSA signing failed at %s:%d: %s\n"
 msgstr "El firmado ECC falló en %s:%d: %s\n"
 
-#: src/util/crypto_ecc.c:1042
+#: src/util/crypto_ecc.c:1025
 #, fuzzy, c-format
 msgid "ECDSA signature verification failed at %s:%d: %s\n"
 msgstr "La verificación de la firma RSA fallo en %s:%d: %s\n"
 
-#: src/util/crypto_ecc.c:1103
+#: src/util/crypto_ecc.c:1086
 #, fuzzy, c-format
 msgid "EdDSA signature verification failed at %s:%d: %s\n"
 msgstr "La verificación de la firma RSA fallo en %s:%d: %s\n"
@@ -9061,7 +9061,7 @@ msgid "Could not resolve our FQDN: %s\n"
 msgstr ""
 "No se pudo resolver nuestro nombre de dominio cualificado (FQDN) : %s\n"
 
-#: src/util/service.c:674
+#: src/util/service.c:668
 #, fuzzy, c-format
 msgid ""
 "Processing code for message of type %u did not call "
@@ -9070,7 +9070,7 @@ msgstr ""
 "El código de procesado para el mensaje del tipo %u no llamó a "
 "«GNUNET_SERVER_receive_done» después de %s\n"
 
-#: src/util/service.c:1826
+#: src/util/service.c:1820
 msgid ""
 "Could not bind to any of the ports I was supposed to, refusing to run!\n"
 msgstr ""
index 474372b3ea2d5b30a0ebed0c371b221e935708c5..e9ed87c279b4745707417dd49df5f83fb50cc753 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnunet 0.10.1\n"
 "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2019-04-04 12:39+0200\n"
+"POT-Creation-Date: 2019-04-07 14:40+0200\n"
 "PO-Revision-Date: 2015-12-24 01:20+0100\n"
 "Last-Translator: Stéphane  Aulery <lkppo@free.fr>\n"
 "Language-Team: French <traduc@traduc.org>\n"
@@ -232,28 +232,28 @@ msgstr ""
 #: src/transport/plugin_transport_tcp.c:1145
 #: src/transport/plugin_transport_tcp.c:3835
 #: src/transport/tcp_service_legacy.c:576
-#: src/transport/tcp_service_legacy.c:582 src/util/service.c:1156
-#: src/util/service.c:1162
+#: src/transport/tcp_service_legacy.c:582 src/util/service.c:1150
+#: src/util/service.c:1156
 #, c-format
 msgid "Require valid port number for service `%s' in configuration!\n"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:457 src/transport/plugin_transport_tcp.c:1176
 #: src/transport/tcp_service_legacy.c:613 src/util/client.c:521
-#: src/util/service.c:1201
+#: src/util/service.c:1195
 #, c-format
 msgid "UNIXPATH `%s' too long, maximum length is %llu\n"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:462 src/transport/plugin_transport_tcp.c:1180
 #: src/transport/tcp_service_legacy.c:617 src/util/client.c:526
-#: src/util/service.c:1206
+#: src/util/service.c:1200
 #, c-format
 msgid "Using `%s' instead\n"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:495 src/transport/plugin_transport_tcp.c:1211
-#: src/transport/tcp_service_legacy.c:648 src/util/service.c:1242
+#: src/transport/tcp_service_legacy.c:648 src/util/service.c:1236
 #, c-format
 msgid ""
 "Disabling UNIX domain socket support for service `%s', failed to create UNIX "
@@ -261,7 +261,7 @@ msgid ""
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:517 src/transport/plugin_transport_tcp.c:1228
-#: src/transport/tcp_service_legacy.c:665 src/util/service.c:1260
+#: src/transport/tcp_service_legacy.c:665 src/util/service.c:1254
 #, c-format
 msgid "Have neither PORT nor UNIXPATH for service `%s', but one is required\n"
 msgstr ""
@@ -269,7 +269,7 @@ msgstr ""
 #: src/arm/gnunet-service-arm.c:556
 #: src/transport/plugin_transport_http_server.c:2688
 #: src/transport/plugin_transport_tcp.c:1259
-#: src/transport/tcp_service_legacy.c:696 src/util/service.c:1301
+#: src/transport/tcp_service_legacy.c:696 src/util/service.c:1295
 #, c-format
 msgid "Failed to resolve `%s': %s\n"
 msgstr "Résolution de « %s » échouée : %s\n"
@@ -277,7 +277,7 @@ msgstr "Résolution de « %s » échouée : %s\n"
 #: src/arm/gnunet-service-arm.c:575
 #: src/transport/plugin_transport_http_server.c:2706
 #: src/transport/plugin_transport_tcp.c:1278
-#: src/transport/tcp_service_legacy.c:715 src/util/service.c:1321
+#: src/transport/tcp_service_legacy.c:715 src/util/service.c:1315
 #, c-format
 msgid "Failed to find %saddress for `%s'.\n"
 msgstr ""
@@ -2039,7 +2039,7 @@ msgstr ""
 msgid "Exiting as the number of peers is %u\n"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:949 src/rps/gnunet-rps-profiler.c:2981
+#: src/dht/gnunet_dht_profiler.c:949 src/rps/gnunet-rps-profiler.c:2962
 #, fuzzy
 msgid "number of peers to start"
 msgstr "nombre de valeurs"
@@ -5909,20 +5909,20 @@ msgstr ""
 msgid "Get peers from biased stream"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2986
+#: src/rps/gnunet-rps-profiler.c:2967
 msgid "duration of the profiling"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2991
+#: src/rps/gnunet-rps-profiler.c:2972
 msgid "timeout for the profiling"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2996
+#: src/rps/gnunet-rps-profiler.c:2977
 #, fuzzy
 msgid "number of PeerIDs to request"
 msgstr "nombre de valeurs"
 
-#: src/rps/gnunet-rps-profiler.c:3012
+#: src/rps/gnunet-rps-profiler.c:2993
 msgid "Measure quality and performance of the RPS service."
 msgstr ""
 
@@ -7582,17 +7582,17 @@ msgstr ""
 msgid "Accepting connection from `%s': %p\n"
 msgstr ""
 
-#: src/transport/tcp_server_legacy.c:474 src/util/service.c:1630
+#: src/transport/tcp_server_legacy.c:474 src/util/service.c:1624
 #, c-format
 msgid "`%s' failed for port %d (%s).\n"
 msgstr ""
 
-#: src/transport/tcp_server_legacy.c:484 src/util/service.c:1640
+#: src/transport/tcp_server_legacy.c:484 src/util/service.c:1634
 #, c-format
 msgid "`%s' failed for port %d (%s): address already in use\n"
 msgstr ""
 
-#: src/transport/tcp_server_legacy.c:490 src/util/service.c:1646
+#: src/transport/tcp_server_legacy.c:490 src/util/service.c:1640
 #, c-format
 msgid "`%s' failed for `%s': address already in use\n"
 msgstr ""
@@ -7604,7 +7604,7 @@ msgid ""
 "`GNUNET_SERVER_receive_done' after %s\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:339 src/util/service.c:870
+#: src/transport/tcp_service_legacy.c:339 src/util/service.c:864
 #, c-format
 msgid "Unknown address family %d\n"
 msgstr ""
@@ -7614,27 +7614,27 @@ msgstr ""
 msgid "Access from `%s' denied to service `%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:402 src/util/service.c:994
+#: src/transport/tcp_service_legacy.c:402 src/util/service.c:988
 #, c-format
 msgid "Could not parse IPv4 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:440 src/util/service.c:1037
+#: src/transport/tcp_service_legacy.c:440 src/util/service.c:1031
 #, c-format
 msgid "Could not parse IPv6 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:904 src/util/service.c:1561
+#: src/transport/tcp_service_legacy.c:904 src/util/service.c:1555
 msgid "Could not access a pre-bound socket, will try to bind myself\n"
 msgstr ""
 
 #: src/transport/tcp_service_legacy.c:953
-#: src/transport/tcp_service_legacy.c:971 src/util/service.c:1714
+#: src/transport/tcp_service_legacy.c:971 src/util/service.c:1708
 #, c-format
 msgid "Specified value for `%s' of service `%s' is invalid\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:996 src/util/service.c:1747
+#: src/transport/tcp_service_legacy.c:996 src/util/service.c:1741
 #, c-format
 msgid "Could not access pre-bound socket %u, will try to bind myself\n"
 msgstr ""
@@ -7649,44 +7649,44 @@ msgstr ""
 msgid "Service `%s' runs at %s\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1251 src/util/service.c:2021
+#: src/transport/tcp_service_legacy.c:1251 src/util/service.c:2015
 msgid "Service process failed to initialize\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1255 src/util/service.c:2025
+#: src/transport/tcp_service_legacy.c:1255 src/util/service.c:2019
 msgid "Service process could not initialize server function\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1259 src/util/service.c:2029
+#: src/transport/tcp_service_legacy.c:1259 src/util/service.c:2023
 msgid "Service process failed to report status\n"
 msgstr ""
 
 #: src/transport/tcp_service_legacy.c:1313 src/util/disk.c:1535
-#: src/util/service.c:1899
+#: src/util/service.c:1893
 #, c-format
 msgid "Cannot obtain information about user `%s': %s\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1314 src/util/service.c:1901
+#: src/transport/tcp_service_legacy.c:1314 src/util/service.c:1895
 msgid "No such user"
 msgstr "Aucun utilisateur trouvé"
 
-#: src/transport/tcp_service_legacy.c:1327 src/util/service.c:1920
+#: src/transport/tcp_service_legacy.c:1327 src/util/service.c:1914
 #, c-format
 msgid "Cannot change user/group to `%s': %s\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1398 src/util/service.c:2282
+#: src/transport/tcp_service_legacy.c:1398 src/util/service.c:2276
 msgid "do daemonize (detach from terminal)"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1448 src/util/service.c:2346
-#: src/util/service.c:2361
+#: src/transport/tcp_service_legacy.c:1448 src/util/service.c:2340
+#: src/util/service.c:2355
 #, c-format
 msgid "Malformed configuration file `%s', exit ...\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1458 src/util/service.c:2373
+#: src/transport/tcp_service_legacy.c:1458 src/util/service.c:2367
 msgid "Malformed configuration, exit ...\n"
 msgstr ""
 
@@ -7839,22 +7839,22 @@ msgid ""
 "%llu)\n"
 msgstr ""
 
-#: src/util/crypto_ecc.c:904
+#: src/util/crypto_ecc.c:887
 #, c-format
 msgid "ECC signing failed at %s:%d: %s\n"
 msgstr ""
 
-#: src/util/crypto_ecc.c:963
+#: src/util/crypto_ecc.c:946
 #, c-format
 msgid "EdDSA signing failed at %s:%d: %s\n"
 msgstr ""
 
-#: src/util/crypto_ecc.c:1042
+#: src/util/crypto_ecc.c:1025
 #, c-format
 msgid "ECDSA signature verification failed at %s:%d: %s\n"
 msgstr ""
 
-#: src/util/crypto_ecc.c:1103
+#: src/util/crypto_ecc.c:1086
 #, c-format
 msgid "EdDSA signature verification failed at %s:%d: %s\n"
 msgstr ""
@@ -8399,14 +8399,14 @@ msgstr ""
 msgid "Could not resolve our FQDN: %s\n"
 msgstr "Résolution de « %s » échouée : %s\n"
 
-#: src/util/service.c:674
+#: src/util/service.c:668
 #, c-format
 msgid ""
 "Processing code for message of type %u did not call "
 "`GNUNET_SERVICE_client_continue' after %s\n"
 msgstr ""
 
-#: src/util/service.c:1826
+#: src/util/service.c:1820
 msgid ""
 "Could not bind to any of the ports I was supposed to, refusing to run!\n"
 msgstr ""
index e53b24d993c6add51499df487795ac3b08953cad..b755da8da8be5b09cf2bb0b02bc40cbaa3f2ae51 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnunet 0.10.1\n"
 "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2019-04-04 12:39+0200\n"
+"POT-Creation-Date: 2019-04-07 14:40+0200\n"
 "PO-Revision-Date: 2018-08-29 13:48+0200\n"
 "Last-Translator: Sebastiano Pistore <SebastianoPistore.info@protonmail.ch>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
@@ -228,28 +228,28 @@ msgstr ""
 #: src/transport/plugin_transport_tcp.c:1145
 #: src/transport/plugin_transport_tcp.c:3835
 #: src/transport/tcp_service_legacy.c:576
-#: src/transport/tcp_service_legacy.c:582 src/util/service.c:1156
-#: src/util/service.c:1162
+#: src/transport/tcp_service_legacy.c:582 src/util/service.c:1150
+#: src/util/service.c:1156
 #, c-format
 msgid "Require valid port number for service `%s' in configuration!\n"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:457 src/transport/plugin_transport_tcp.c:1176
 #: src/transport/tcp_service_legacy.c:613 src/util/client.c:521
-#: src/util/service.c:1201
+#: src/util/service.c:1195
 #, c-format
 msgid "UNIXPATH `%s' too long, maximum length is %llu\n"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:462 src/transport/plugin_transport_tcp.c:1180
 #: src/transport/tcp_service_legacy.c:617 src/util/client.c:526
-#: src/util/service.c:1206
+#: src/util/service.c:1200
 #, c-format
 msgid "Using `%s' instead\n"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:495 src/transport/plugin_transport_tcp.c:1211
-#: src/transport/tcp_service_legacy.c:648 src/util/service.c:1242
+#: src/transport/tcp_service_legacy.c:648 src/util/service.c:1236
 #, c-format
 msgid ""
 "Disabling UNIX domain socket support for service `%s', failed to create UNIX "
@@ -257,7 +257,7 @@ msgid ""
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:517 src/transport/plugin_transport_tcp.c:1228
-#: src/transport/tcp_service_legacy.c:665 src/util/service.c:1260
+#: src/transport/tcp_service_legacy.c:665 src/util/service.c:1254
 #, c-format
 msgid "Have neither PORT nor UNIXPATH for service `%s', but one is required\n"
 msgstr ""
@@ -265,7 +265,7 @@ msgstr ""
 #: src/arm/gnunet-service-arm.c:556
 #: src/transport/plugin_transport_http_server.c:2688
 #: src/transport/plugin_transport_tcp.c:1259
-#: src/transport/tcp_service_legacy.c:696 src/util/service.c:1301
+#: src/transport/tcp_service_legacy.c:696 src/util/service.c:1295
 #, c-format
 msgid "Failed to resolve `%s': %s\n"
 msgstr ""
@@ -273,7 +273,7 @@ msgstr ""
 #: src/arm/gnunet-service-arm.c:575
 #: src/transport/plugin_transport_http_server.c:2706
 #: src/transport/plugin_transport_tcp.c:1278
-#: src/transport/tcp_service_legacy.c:715 src/util/service.c:1321
+#: src/transport/tcp_service_legacy.c:715 src/util/service.c:1315
 #, c-format
 msgid "Failed to find %saddress for `%s'.\n"
 msgstr ""
@@ -2032,7 +2032,7 @@ msgstr ""
 msgid "Exiting as the number of peers is %u\n"
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:949 src/rps/gnunet-rps-profiler.c:2981
+#: src/dht/gnunet_dht_profiler.c:949 src/rps/gnunet-rps-profiler.c:2962
 msgid "number of peers to start"
 msgstr ""
 
@@ -5902,19 +5902,19 @@ msgstr ""
 msgid "Get peers from biased stream"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2986
+#: src/rps/gnunet-rps-profiler.c:2967
 msgid "duration of the profiling"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2991
+#: src/rps/gnunet-rps-profiler.c:2972
 msgid "timeout for the profiling"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2996
+#: src/rps/gnunet-rps-profiler.c:2977
 msgid "number of PeerIDs to request"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:3012
+#: src/rps/gnunet-rps-profiler.c:2993
 msgid "Measure quality and performance of the RPS service."
 msgstr ""
 
@@ -7579,17 +7579,17 @@ msgstr ""
 msgid "Accepting connection from `%s': %p\n"
 msgstr ""
 
-#: src/transport/tcp_server_legacy.c:474 src/util/service.c:1630
+#: src/transport/tcp_server_legacy.c:474 src/util/service.c:1624
 #, c-format
 msgid "`%s' failed for port %d (%s).\n"
 msgstr ""
 
-#: src/transport/tcp_server_legacy.c:484 src/util/service.c:1640
+#: src/transport/tcp_server_legacy.c:484 src/util/service.c:1634
 #, c-format
 msgid "`%s' failed for port %d (%s): address already in use\n"
 msgstr ""
 
-#: src/transport/tcp_server_legacy.c:490 src/util/service.c:1646
+#: src/transport/tcp_server_legacy.c:490 src/util/service.c:1640
 #, c-format
 msgid "`%s' failed for `%s': address already in use\n"
 msgstr ""
@@ -7601,7 +7601,7 @@ msgid ""
 "`GNUNET_SERVER_receive_done' after %s\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:339 src/util/service.c:870
+#: src/transport/tcp_service_legacy.c:339 src/util/service.c:864
 #, c-format
 msgid "Unknown address family %d\n"
 msgstr ""
@@ -7611,27 +7611,27 @@ msgstr ""
 msgid "Access from `%s' denied to service `%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:402 src/util/service.c:994
+#: src/transport/tcp_service_legacy.c:402 src/util/service.c:988
 #, c-format
 msgid "Could not parse IPv4 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:440 src/util/service.c:1037
+#: src/transport/tcp_service_legacy.c:440 src/util/service.c:1031
 #, c-format
 msgid "Could not parse IPv6 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:904 src/util/service.c:1561
+#: src/transport/tcp_service_legacy.c:904 src/util/service.c:1555
 msgid "Could not access a pre-bound socket, will try to bind myself\n"
 msgstr ""
 
 #: src/transport/tcp_service_legacy.c:953
-#: src/transport/tcp_service_legacy.c:971 src/util/service.c:1714
+#: src/transport/tcp_service_legacy.c:971 src/util/service.c:1708
 #, c-format
 msgid "Specified value for `%s' of service `%s' is invalid\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:996 src/util/service.c:1747
+#: src/transport/tcp_service_legacy.c:996 src/util/service.c:1741
 #, c-format
 msgid "Could not access pre-bound socket %u, will try to bind myself\n"
 msgstr ""
@@ -7646,44 +7646,44 @@ msgstr ""
 msgid "Service `%s' runs at %s\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1251 src/util/service.c:2021
+#: src/transport/tcp_service_legacy.c:1251 src/util/service.c:2015
 msgid "Service process failed to initialize\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1255 src/util/service.c:2025
+#: src/transport/tcp_service_legacy.c:1255 src/util/service.c:2019
 msgid "Service process could not initialize server function\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1259 src/util/service.c:2029
+#: src/transport/tcp_service_legacy.c:1259 src/util/service.c:2023
 msgid "Service process failed to report status\n"
 msgstr ""
 
 #: src/transport/tcp_service_legacy.c:1313 src/util/disk.c:1535
-#: src/util/service.c:1899
+#: src/util/service.c:1893
 #, c-format
 msgid "Cannot obtain information about user `%s': %s\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1314 src/util/service.c:1901
+#: src/transport/tcp_service_legacy.c:1314 src/util/service.c:1895
 msgid "No such user"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1327 src/util/service.c:1920
+#: src/transport/tcp_service_legacy.c:1327 src/util/service.c:1914
 #, c-format
 msgid "Cannot change user/group to `%s': %s\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1398 src/util/service.c:2282
+#: src/transport/tcp_service_legacy.c:1398 src/util/service.c:2276
 msgid "do daemonize (detach from terminal)"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1448 src/util/service.c:2346
-#: src/util/service.c:2361
+#: src/transport/tcp_service_legacy.c:1448 src/util/service.c:2340
+#: src/util/service.c:2355
 #, c-format
 msgid "Malformed configuration file `%s', exit ...\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1458 src/util/service.c:2373
+#: src/transport/tcp_service_legacy.c:1458 src/util/service.c:2367
 msgid "Malformed configuration, exit ...\n"
 msgstr ""
 
@@ -7836,22 +7836,22 @@ msgid ""
 "%llu)\n"
 msgstr ""
 
-#: src/util/crypto_ecc.c:904
+#: src/util/crypto_ecc.c:887
 #, c-format
 msgid "ECC signing failed at %s:%d: %s\n"
 msgstr ""
 
-#: src/util/crypto_ecc.c:963
+#: src/util/crypto_ecc.c:946
 #, c-format
 msgid "EdDSA signing failed at %s:%d: %s\n"
 msgstr ""
 
-#: src/util/crypto_ecc.c:1042
+#: src/util/crypto_ecc.c:1025
 #, c-format
 msgid "ECDSA signature verification failed at %s:%d: %s\n"
 msgstr ""
 
-#: src/util/crypto_ecc.c:1103
+#: src/util/crypto_ecc.c:1086
 #, c-format
 msgid "EdDSA signature verification failed at %s:%d: %s\n"
 msgstr ""
@@ -8394,14 +8394,14 @@ msgstr ""
 msgid "Could not resolve our FQDN: %s\n"
 msgstr ""
 
-#: src/util/service.c:674
+#: src/util/service.c:668
 #, c-format
 msgid ""
 "Processing code for message of type %u did not call "
 "`GNUNET_SERVICE_client_continue' after %s\n"
 msgstr ""
 
-#: src/util/service.c:1826
+#: src/util/service.c:1820
 msgid ""
 "Could not bind to any of the ports I was supposed to, refusing to run!\n"
 msgstr ""
index d70b89a56cad11675708fb2fcb820ce144dd9459..6f57f581e06c5b6a6d8bdf784b8243e871f8912e 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNUnet 0.7.0b\n"
 "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2019-04-04 12:39+0200\n"
+"POT-Creation-Date: 2019-04-07 14:40+0200\n"
 "PO-Revision-Date: 2006-01-21 17:16+0100\n"
 "Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
@@ -238,28 +238,28 @@ msgstr ""
 #: src/transport/plugin_transport_tcp.c:1145
 #: src/transport/plugin_transport_tcp.c:3835
 #: src/transport/tcp_service_legacy.c:576
-#: src/transport/tcp_service_legacy.c:582 src/util/service.c:1156
-#: src/util/service.c:1162
+#: src/transport/tcp_service_legacy.c:582 src/util/service.c:1150
+#: src/util/service.c:1156
 #, c-format
 msgid "Require valid port number for service `%s' in configuration!\n"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:457 src/transport/plugin_transport_tcp.c:1176
 #: src/transport/tcp_service_legacy.c:613 src/util/client.c:521
-#: src/util/service.c:1201
+#: src/util/service.c:1195
 #, c-format
 msgid "UNIXPATH `%s' too long, maximum length is %llu\n"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:462 src/transport/plugin_transport_tcp.c:1180
 #: src/transport/tcp_service_legacy.c:617 src/util/client.c:526
-#: src/util/service.c:1206
+#: src/util/service.c:1200
 #, fuzzy, c-format
 msgid "Using `%s' instead\n"
 msgstr "%s: flagga \"%s\" är tvetydig\n"
 
 #: src/arm/gnunet-service-arm.c:495 src/transport/plugin_transport_tcp.c:1211
-#: src/transport/tcp_service_legacy.c:648 src/util/service.c:1242
+#: src/transport/tcp_service_legacy.c:648 src/util/service.c:1236
 #, c-format
 msgid ""
 "Disabling UNIX domain socket support for service `%s', failed to create UNIX "
@@ -267,7 +267,7 @@ msgid ""
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:517 src/transport/plugin_transport_tcp.c:1228
-#: src/transport/tcp_service_legacy.c:665 src/util/service.c:1260
+#: src/transport/tcp_service_legacy.c:665 src/util/service.c:1254
 #, c-format
 msgid "Have neither PORT nor UNIXPATH for service `%s', but one is required\n"
 msgstr ""
@@ -275,7 +275,7 @@ msgstr ""
 #: src/arm/gnunet-service-arm.c:556
 #: src/transport/plugin_transport_http_server.c:2688
 #: src/transport/plugin_transport_tcp.c:1259
-#: src/transport/tcp_service_legacy.c:696 src/util/service.c:1301
+#: src/transport/tcp_service_legacy.c:696 src/util/service.c:1295
 #, fuzzy, c-format
 msgid "Failed to resolve `%s': %s\n"
 msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
@@ -283,7 +283,7 @@ msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
 #: src/arm/gnunet-service-arm.c:575
 #: src/transport/plugin_transport_http_server.c:2706
 #: src/transport/plugin_transport_tcp.c:1278
-#: src/transport/tcp_service_legacy.c:715 src/util/service.c:1321
+#: src/transport/tcp_service_legacy.c:715 src/util/service.c:1315
 #, fuzzy, c-format
 msgid "Failed to find %saddress for `%s'.\n"
 msgstr "Misslyckades att binda till UDP-port %d.\n"
@@ -2137,7 +2137,7 @@ msgstr ""
 msgid "Exiting as the number of peers is %u\n"
 msgstr "Maximalt antal chattklienter uppnått.\n"
 
-#: src/dht/gnunet_dht_profiler.c:949 src/rps/gnunet-rps-profiler.c:2981
+#: src/dht/gnunet_dht_profiler.c:949 src/rps/gnunet-rps-profiler.c:2962
 #, fuzzy
 msgid "number of peers to start"
 msgstr "antal iterationer"
@@ -6214,21 +6214,21 @@ msgstr ""
 msgid "Get peers from biased stream"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2986
+#: src/rps/gnunet-rps-profiler.c:2967
 msgid "duration of the profiling"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2991
+#: src/rps/gnunet-rps-profiler.c:2972
 #, fuzzy
 msgid "timeout for the profiling"
 msgstr "ange prioritet för innehållet"
 
-#: src/rps/gnunet-rps-profiler.c:2996
+#: src/rps/gnunet-rps-profiler.c:2977
 #, fuzzy
 msgid "number of PeerIDs to request"
 msgstr "antal iterationer"
 
-#: src/rps/gnunet-rps-profiler.c:3012
+#: src/rps/gnunet-rps-profiler.c:2993
 #, fuzzy
 msgid "Measure quality and performance of the RPS service."
 msgstr "Kan inte tillgå tjänsten"
@@ -7992,17 +7992,17 @@ msgid "Accepting connection from `%s': %p\n"
 msgstr ""
 
 # drive = hard drive ?
-#: src/transport/tcp_server_legacy.c:474 src/util/service.c:1630
+#: src/transport/tcp_server_legacy.c:474 src/util/service.c:1624
 #, fuzzy, c-format
 msgid "`%s' failed for port %d (%s).\n"
 msgstr "\"%s\" misslyckades för enhet %s: %u\n"
 
-#: src/transport/tcp_server_legacy.c:484 src/util/service.c:1640
+#: src/transport/tcp_server_legacy.c:484 src/util/service.c:1634
 #, fuzzy, c-format
 msgid "`%s' failed for port %d (%s): address already in use\n"
 msgstr "\"%s\" misslyckades för port %d: %s. Körs verkligen gnunetd?\n"
 
-#: src/transport/tcp_server_legacy.c:490 src/util/service.c:1646
+#: src/transport/tcp_server_legacy.c:490 src/util/service.c:1640
 #, fuzzy, c-format
 msgid "`%s' failed for `%s': address already in use\n"
 msgstr "\"%s\" misslyckades för port %d: %s. Körs verkligen gnunetd?\n"
@@ -8014,7 +8014,7 @@ msgid ""
 "`GNUNET_SERVER_receive_done' after %s\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:339 src/util/service.c:870
+#: src/transport/tcp_service_legacy.c:339 src/util/service.c:864
 #, fuzzy, c-format
 msgid "Unknown address family %d\n"
 msgstr "Okänd operation \"%s\"\n"
@@ -8024,27 +8024,27 @@ msgstr "Okänd operation \"%s\"\n"
 msgid "Access from `%s' denied to service `%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:402 src/util/service.c:994
+#: src/transport/tcp_service_legacy.c:402 src/util/service.c:988
 #, c-format
 msgid "Could not parse IPv4 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:440 src/util/service.c:1037
+#: src/transport/tcp_service_legacy.c:440 src/util/service.c:1031
 #, c-format
 msgid "Could not parse IPv6 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:904 src/util/service.c:1561
+#: src/transport/tcp_service_legacy.c:904 src/util/service.c:1555
 msgid "Could not access a pre-bound socket, will try to bind myself\n"
 msgstr ""
 
 #: src/transport/tcp_service_legacy.c:953
-#: src/transport/tcp_service_legacy.c:971 src/util/service.c:1714
+#: src/transport/tcp_service_legacy.c:971 src/util/service.c:1708
 #, c-format
 msgid "Specified value for `%s' of service `%s' is invalid\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:996 src/util/service.c:1747
+#: src/transport/tcp_service_legacy.c:996 src/util/service.c:1741
 #, c-format
 msgid "Could not access pre-bound socket %u, will try to bind myself\n"
 msgstr ""
@@ -8059,44 +8059,44 @@ msgstr "Fel vid %s:%d.\n"
 msgid "Service `%s' runs at %s\n"
 msgstr "Motpart \"%s\" med pålitlighet %8u och adress \"%s\"\n"
 
-#: src/transport/tcp_service_legacy.c:1251 src/util/service.c:2021
+#: src/transport/tcp_service_legacy.c:1251 src/util/service.c:2015
 msgid "Service process failed to initialize\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1255 src/util/service.c:2025
+#: src/transport/tcp_service_legacy.c:1255 src/util/service.c:2019
 msgid "Service process could not initialize server function\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1259 src/util/service.c:2029
+#: src/transport/tcp_service_legacy.c:1259 src/util/service.c:2023
 msgid "Service process failed to report status\n"
 msgstr ""
 
 #: src/transport/tcp_service_legacy.c:1313 src/util/disk.c:1535
-#: src/util/service.c:1899
+#: src/util/service.c:1893
 #, fuzzy, c-format
 msgid "Cannot obtain information about user `%s': %s\n"
 msgstr "Kan inte öppna konfigurationsfil \"%s\".\n"
 
-#: src/transport/tcp_service_legacy.c:1314 src/util/service.c:1901
+#: src/transport/tcp_service_legacy.c:1314 src/util/service.c:1895
 msgid "No such user"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1327 src/util/service.c:1920
+#: src/transport/tcp_service_legacy.c:1327 src/util/service.c:1914
 #, c-format
 msgid "Cannot change user/group to `%s': %s\n"
 msgstr "Kan inte ändra användare/grupp till \"%s\": %s\n"
 
-#: src/transport/tcp_service_legacy.c:1398 src/util/service.c:2282
+#: src/transport/tcp_service_legacy.c:1398 src/util/service.c:2276
 msgid "do daemonize (detach from terminal)"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1448 src/util/service.c:2346
-#: src/util/service.c:2361
+#: src/transport/tcp_service_legacy.c:1448 src/util/service.c:2340
+#: src/util/service.c:2355
 #, fuzzy, c-format
 msgid "Malformed configuration file `%s', exit ...\n"
 msgstr "Kunde inte spara konfigurationsfil \"%s\":"
 
-#: src/transport/tcp_service_legacy.c:1458 src/util/service.c:2373
+#: src/transport/tcp_service_legacy.c:1458 src/util/service.c:2367
 #, fuzzy
 msgid "Malformed configuration, exit ...\n"
 msgstr "Kunde inte spara konfigurationsfil \"%s\":"
@@ -8252,22 +8252,22 @@ msgid ""
 "%llu)\n"
 msgstr ""
 
-#: src/util/crypto_ecc.c:904
+#: src/util/crypto_ecc.c:887
 #, fuzzy, c-format
 msgid "ECC signing failed at %s:%d: %s\n"
 msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n"
 
-#: src/util/crypto_ecc.c:963
+#: src/util/crypto_ecc.c:946
 #, fuzzy, c-format
 msgid "EdDSA signing failed at %s:%d: %s\n"
 msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n"
 
-#: src/util/crypto_ecc.c:1042
+#: src/util/crypto_ecc.c:1025
 #, fuzzy, c-format
 msgid "ECDSA signature verification failed at %s:%d: %s\n"
 msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n"
 
-#: src/util/crypto_ecc.c:1103
+#: src/util/crypto_ecc.c:1086
 #, fuzzy, c-format
 msgid "EdDSA signature verification failed at %s:%d: %s\n"
 msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n"
@@ -8823,14 +8823,14 @@ msgstr ""
 msgid "Could not resolve our FQDN: %s\n"
 msgstr "Kunde inte slå upp \"%s\": %s\n"
 
-#: src/util/service.c:674
+#: src/util/service.c:668
 #, c-format
 msgid ""
 "Processing code for message of type %u did not call "
 "`GNUNET_SERVICE_client_continue' after %s\n"
 msgstr ""
 
-#: src/util/service.c:1826
+#: src/util/service.c:1820
 msgid ""
 "Could not bind to any of the ports I was supposed to, refusing to run!\n"
 msgstr ""
index d4e5063049a50ad1436bb45f1a1d0a367af3380a..a8af97149bd7450fc8a0d323c495ec32cdc26331 100644 (file)
--- a/po/vi.po
+++ b/po/vi.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnunet 0.8.0a\n"
 "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2019-04-04 12:39+0200\n"
+"POT-Creation-Date: 2019-04-07 14:40+0200\n"
 "PO-Revision-Date: 2008-09-10 22:05+0930\n"
 "Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
 "Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
@@ -245,28 +245,28 @@ msgstr ""
 #: src/transport/plugin_transport_tcp.c:1145
 #: src/transport/plugin_transport_tcp.c:3835
 #: src/transport/tcp_service_legacy.c:576
-#: src/transport/tcp_service_legacy.c:582 src/util/service.c:1156
-#: src/util/service.c:1162
+#: src/transport/tcp_service_legacy.c:582 src/util/service.c:1150
+#: src/util/service.c:1156
 #, c-format
 msgid "Require valid port number for service `%s' in configuration!\n"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:457 src/transport/plugin_transport_tcp.c:1176
 #: src/transport/tcp_service_legacy.c:613 src/util/client.c:521
-#: src/util/service.c:1201
+#: src/util/service.c:1195
 #, c-format
 msgid "UNIXPATH `%s' too long, maximum length is %llu\n"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:462 src/transport/plugin_transport_tcp.c:1180
 #: src/transport/tcp_service_legacy.c:617 src/util/client.c:526
-#: src/util/service.c:1206
+#: src/util/service.c:1200
 #, fuzzy, c-format
 msgid "Using `%s' instead\n"
 msgstr "%s: tùy chọn « %s » là mơ hồ\n"
 
 #: src/arm/gnunet-service-arm.c:495 src/transport/plugin_transport_tcp.c:1211
-#: src/transport/tcp_service_legacy.c:648 src/util/service.c:1242
+#: src/transport/tcp_service_legacy.c:648 src/util/service.c:1236
 #, c-format
 msgid ""
 "Disabling UNIX domain socket support for service `%s', failed to create UNIX "
@@ -274,7 +274,7 @@ msgid ""
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:517 src/transport/plugin_transport_tcp.c:1228
-#: src/transport/tcp_service_legacy.c:665 src/util/service.c:1260
+#: src/transport/tcp_service_legacy.c:665 src/util/service.c:1254
 #, c-format
 msgid "Have neither PORT nor UNIXPATH for service `%s', but one is required\n"
 msgstr ""
@@ -282,7 +282,7 @@ msgstr ""
 #: src/arm/gnunet-service-arm.c:556
 #: src/transport/plugin_transport_http_server.c:2688
 #: src/transport/plugin_transport_tcp.c:1259
-#: src/transport/tcp_service_legacy.c:696 src/util/service.c:1301
+#: src/transport/tcp_service_legacy.c:696 src/util/service.c:1295
 #, fuzzy, c-format
 msgid "Failed to resolve `%s': %s\n"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
@@ -290,7 +290,7 @@ msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 #: src/arm/gnunet-service-arm.c:575
 #: src/transport/plugin_transport_http_server.c:2706
 #: src/transport/plugin_transport_tcp.c:1278
-#: src/transport/tcp_service_legacy.c:715 src/util/service.c:1321
+#: src/transport/tcp_service_legacy.c:715 src/util/service.c:1315
 #, fuzzy, c-format
 msgid "Failed to find %saddress for `%s'.\n"
 msgstr "Lỗi đóng kết đến cổng %s %d.\n"
@@ -2159,7 +2159,7 @@ msgstr ""
 msgid "Exiting as the number of peers is %u\n"
 msgstr "tăng sổ tối đa các kết nối TCP/IP"
 
-#: src/dht/gnunet_dht_profiler.c:949 src/rps/gnunet-rps-profiler.c:2981
+#: src/dht/gnunet_dht_profiler.c:949 src/rps/gnunet-rps-profiler.c:2962
 #, fuzzy
 msgid "number of peers to start"
 msgstr "số lần lặp lại"
@@ -6269,21 +6269,21 @@ msgstr ""
 msgid "Get peers from biased stream"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2986
+#: src/rps/gnunet-rps-profiler.c:2967
 msgid "duration of the profiling"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2991
+#: src/rps/gnunet-rps-profiler.c:2972
 #, fuzzy
 msgid "timeout for the profiling"
 msgstr "xác định mức ưu tiên của nội dung"
 
-#: src/rps/gnunet-rps-profiler.c:2996
+#: src/rps/gnunet-rps-profiler.c:2977
 #, fuzzy
 msgid "number of PeerIDs to request"
 msgstr "số lần lặp lại"
 
-#: src/rps/gnunet-rps-profiler.c:3012
+#: src/rps/gnunet-rps-profiler.c:2993
 #, fuzzy
 msgid "Measure quality and performance of the RPS service."
 msgstr "Không thể truy cập đến dịch vụ"
@@ -8047,17 +8047,17 @@ msgstr "Không đủ quyền cho « %s ».\n"
 msgid "Accepting connection from `%s': %p\n"
 msgstr ""
 
-#: src/transport/tcp_server_legacy.c:474 src/util/service.c:1630
+#: src/transport/tcp_server_legacy.c:474 src/util/service.c:1624
 #, fuzzy, c-format
 msgid "`%s' failed for port %d (%s).\n"
 msgstr "« %s » thất bại cho ổ đĩa « %s »: %u\n"
 
-#: src/transport/tcp_server_legacy.c:484 src/util/service.c:1640
+#: src/transport/tcp_server_legacy.c:484 src/util/service.c:1634
 #, fuzzy, c-format
 msgid "`%s' failed for port %d (%s): address already in use\n"
 msgstr "« %s » bị lỗi cho cổng %d. Trình gnunetd có chạy chưa?\n"
 
-#: src/transport/tcp_server_legacy.c:490 src/util/service.c:1646
+#: src/transport/tcp_server_legacy.c:490 src/util/service.c:1640
 #, fuzzy, c-format
 msgid "`%s' failed for `%s': address already in use\n"
 msgstr "« %s » bị lỗi cho cổng %d. Trình gnunetd có chạy chưa?\n"
@@ -8069,7 +8069,7 @@ msgid ""
 "`GNUNET_SERVER_receive_done' after %s\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:339 src/util/service.c:870
+#: src/transport/tcp_service_legacy.c:339 src/util/service.c:864
 #, fuzzy, c-format
 msgid "Unknown address family %d\n"
 msgstr "\tKhông rõ miền tên « %s »\n"
@@ -8079,27 +8079,27 @@ msgstr "\tKhông rõ miền tên « %s »\n"
 msgid "Access from `%s' denied to service `%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:402 src/util/service.c:994
+#: src/transport/tcp_service_legacy.c:402 src/util/service.c:988
 #, c-format
 msgid "Could not parse IPv4 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:440 src/util/service.c:1037
+#: src/transport/tcp_service_legacy.c:440 src/util/service.c:1031
 #, c-format
 msgid "Could not parse IPv6 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:904 src/util/service.c:1561
+#: src/transport/tcp_service_legacy.c:904 src/util/service.c:1555
 msgid "Could not access a pre-bound socket, will try to bind myself\n"
 msgstr ""
 
 #: src/transport/tcp_service_legacy.c:953
-#: src/transport/tcp_service_legacy.c:971 src/util/service.c:1714
+#: src/transport/tcp_service_legacy.c:971 src/util/service.c:1708
 #, c-format
 msgid "Specified value for `%s' of service `%s' is invalid\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:996 src/util/service.c:1747
+#: src/transport/tcp_service_legacy.c:996 src/util/service.c:1741
 #, c-format
 msgid "Could not access pre-bound socket %u, will try to bind myself\n"
 msgstr ""
@@ -8114,44 +8114,44 @@ msgstr "Lỗi chạy %s: %s %d\n"
 msgid "Service `%s' runs at %s\n"
 msgstr "Đồng đẳng « %s » có mức tin cậy %8u\n"
 
-#: src/transport/tcp_service_legacy.c:1251 src/util/service.c:2021
+#: src/transport/tcp_service_legacy.c:1251 src/util/service.c:2015
 msgid "Service process failed to initialize\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1255 src/util/service.c:2025
+#: src/transport/tcp_service_legacy.c:1255 src/util/service.c:2019
 msgid "Service process could not initialize server function\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1259 src/util/service.c:2029
+#: src/transport/tcp_service_legacy.c:1259 src/util/service.c:2023
 msgid "Service process failed to report status\n"
 msgstr ""
 
 #: src/transport/tcp_service_legacy.c:1313 src/util/disk.c:1535
-#: src/util/service.c:1899
+#: src/util/service.c:1893
 #, c-format
 msgid "Cannot obtain information about user `%s': %s\n"
 msgstr "Không thể lấy thông tin về người dùng « %s »: %s\n"
 
-#: src/transport/tcp_service_legacy.c:1314 src/util/service.c:1901
+#: src/transport/tcp_service_legacy.c:1314 src/util/service.c:1895
 msgid "No such user"
 msgstr "Không có người dùng như vậy"
 
-#: src/transport/tcp_service_legacy.c:1327 src/util/service.c:1920
+#: src/transport/tcp_service_legacy.c:1327 src/util/service.c:1914
 #, c-format
 msgid "Cannot change user/group to `%s': %s\n"
 msgstr "Không thể thay đổi người dùng/nhóm thành « %s »: %s\n"
 
-#: src/transport/tcp_service_legacy.c:1398 src/util/service.c:2282
+#: src/transport/tcp_service_legacy.c:1398 src/util/service.c:2276
 msgid "do daemonize (detach from terminal)"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1448 src/util/service.c:2346
-#: src/util/service.c:2361
+#: src/transport/tcp_service_legacy.c:1448 src/util/service.c:2340
+#: src/util/service.c:2355
 #, fuzzy, c-format
 msgid "Malformed configuration file `%s', exit ...\n"
 msgstr "Không thể lưu tập tin cấu hình « %s »:"
 
-#: src/transport/tcp_service_legacy.c:1458 src/util/service.c:2373
+#: src/transport/tcp_service_legacy.c:1458 src/util/service.c:2367
 #, fuzzy
 msgid "Malformed configuration, exit ...\n"
 msgstr "Không thể lưu tập tin cấu hình « %s »:"
@@ -8310,22 +8310,22 @@ msgid ""
 "%llu)\n"
 msgstr ""
 
-#: src/util/crypto_ecc.c:904
+#: src/util/crypto_ecc.c:887
 #, fuzzy, c-format
 msgid "ECC signing failed at %s:%d: %s\n"
 msgstr "%s bị lỗi tại %s:%d: « %s »\n"
 
-#: src/util/crypto_ecc.c:963
+#: src/util/crypto_ecc.c:946
 #, fuzzy, c-format
 msgid "EdDSA signing failed at %s:%d: %s\n"
 msgstr "%s bị lỗi tại %s:%d: « %s »\n"
 
-#: src/util/crypto_ecc.c:1042
+#: src/util/crypto_ecc.c:1025
 #, fuzzy, c-format
 msgid "ECDSA signature verification failed at %s:%d: %s\n"
 msgstr "Lỗi thẩm tra chữ ký RSA tại %s:%d: %s\n"
 
-#: src/util/crypto_ecc.c:1103
+#: src/util/crypto_ecc.c:1086
 #, fuzzy, c-format
 msgid "EdDSA signature verification failed at %s:%d: %s\n"
 msgstr "Lỗi thẩm tra chữ ký RSA tại %s:%d: %s\n"
@@ -8879,14 +8879,14 @@ msgstr ""
 msgid "Could not resolve our FQDN: %s\n"
 msgstr "Không thể giải quyết « %s » (%s): %s\n"
 
-#: src/util/service.c:674
+#: src/util/service.c:668
 #, c-format
 msgid ""
 "Processing code for message of type %u did not call "
 "`GNUNET_SERVICE_client_continue' after %s\n"
 msgstr ""
 
-#: src/util/service.c:1826
+#: src/util/service.c:1820
 msgid ""
 "Could not bind to any of the ports I was supposed to, refusing to run!\n"
 msgstr ""
index c77a87581258dbac3a17f8ec076aa288471ad78e..67748253f549165369d186ba35f4807a4619e328 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnunet-0.8.1\n"
 "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2019-04-04 12:39+0200\n"
+"POT-Creation-Date: 2019-04-07 14:40+0200\n"
 "PO-Revision-Date: 2011-07-09 12:12+0800\n"
 "Last-Translator: Wylmer Wang <wantinghard@gmail.com>\n"
 "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
@@ -232,28 +232,28 @@ msgstr ""
 #: src/transport/plugin_transport_tcp.c:1145
 #: src/transport/plugin_transport_tcp.c:3835
 #: src/transport/tcp_service_legacy.c:576
-#: src/transport/tcp_service_legacy.c:582 src/util/service.c:1156
-#: src/util/service.c:1162
+#: src/transport/tcp_service_legacy.c:582 src/util/service.c:1150
+#: src/util/service.c:1156
 #, c-format
 msgid "Require valid port number for service `%s' in configuration!\n"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:457 src/transport/plugin_transport_tcp.c:1176
 #: src/transport/tcp_service_legacy.c:613 src/util/client.c:521
-#: src/util/service.c:1201
+#: src/util/service.c:1195
 #, c-format
 msgid "UNIXPATH `%s' too long, maximum length is %llu\n"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:462 src/transport/plugin_transport_tcp.c:1180
 #: src/transport/tcp_service_legacy.c:617 src/util/client.c:526
-#: src/util/service.c:1206
+#: src/util/service.c:1200
 #, fuzzy, c-format
 msgid "Using `%s' instead\n"
 msgstr "%s:选项“%s”有歧义\n"
 
 #: src/arm/gnunet-service-arm.c:495 src/transport/plugin_transport_tcp.c:1211
-#: src/transport/tcp_service_legacy.c:648 src/util/service.c:1242
+#: src/transport/tcp_service_legacy.c:648 src/util/service.c:1236
 #, c-format
 msgid ""
 "Disabling UNIX domain socket support for service `%s', failed to create UNIX "
@@ -261,7 +261,7 @@ msgid ""
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:517 src/transport/plugin_transport_tcp.c:1228
-#: src/transport/tcp_service_legacy.c:665 src/util/service.c:1260
+#: src/transport/tcp_service_legacy.c:665 src/util/service.c:1254
 #, c-format
 msgid "Have neither PORT nor UNIXPATH for service `%s', but one is required\n"
 msgstr ""
@@ -269,7 +269,7 @@ msgstr ""
 #: src/arm/gnunet-service-arm.c:556
 #: src/transport/plugin_transport_http_server.c:2688
 #: src/transport/plugin_transport_tcp.c:1259
-#: src/transport/tcp_service_legacy.c:696 src/util/service.c:1301
+#: src/transport/tcp_service_legacy.c:696 src/util/service.c:1295
 #, fuzzy, c-format
 msgid "Failed to resolve `%s': %s\n"
 msgstr "打开日志文件“%s”失败:%s\n"
@@ -277,7 +277,7 @@ msgstr "打开日志文件“%s”失败:%s\n"
 #: src/arm/gnunet-service-arm.c:575
 #: src/transport/plugin_transport_http_server.c:2706
 #: src/transport/plugin_transport_tcp.c:1278
-#: src/transport/tcp_service_legacy.c:715 src/util/service.c:1321
+#: src/transport/tcp_service_legacy.c:715 src/util/service.c:1315
 #, fuzzy, c-format
 msgid "Failed to find %saddress for `%s'.\n"
 msgstr "找不到接口“%s”的一个 IP 地址。\n"
@@ -2079,7 +2079,7 @@ msgstr ""
 msgid "Exiting as the number of peers is %u\n"
 msgstr "增加 TCP/IP 的最大连接数"
 
-#: src/dht/gnunet_dht_profiler.c:949 src/rps/gnunet-rps-profiler.c:2981
+#: src/dht/gnunet_dht_profiler.c:949 src/rps/gnunet-rps-profiler.c:2962
 #, fuzzy
 msgid "number of peers to start"
 msgstr "迭代次数"
@@ -6026,20 +6026,20 @@ msgstr ""
 msgid "Get peers from biased stream"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2986
+#: src/rps/gnunet-rps-profiler.c:2967
 msgid "duration of the profiling"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2991
+#: src/rps/gnunet-rps-profiler.c:2972
 msgid "timeout for the profiling"
 msgstr ""
 
-#: src/rps/gnunet-rps-profiler.c:2996
+#: src/rps/gnunet-rps-profiler.c:2977
 #, fuzzy
 msgid "number of PeerIDs to request"
 msgstr "迭代次数"
 
-#: src/rps/gnunet-rps-profiler.c:3012
+#: src/rps/gnunet-rps-profiler.c:2993
 #, fuzzy
 msgid "Measure quality and performance of the RPS service."
 msgstr "无法访问该服务"
@@ -7743,17 +7743,17 @@ msgstr "“%s”已连接到“%s”。\n"
 msgid "Accepting connection from `%s': %p\n"
 msgstr ""
 
-#: src/transport/tcp_server_legacy.c:474 src/util/service.c:1630
+#: src/transport/tcp_server_legacy.c:474 src/util/service.c:1624
 #, fuzzy, c-format
 msgid "`%s' failed for port %d (%s).\n"
 msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n"
 
-#: src/transport/tcp_server_legacy.c:484 src/util/service.c:1640
+#: src/transport/tcp_server_legacy.c:484 src/util/service.c:1634
 #, c-format
 msgid "`%s' failed for port %d (%s): address already in use\n"
 msgstr ""
 
-#: src/transport/tcp_server_legacy.c:490 src/util/service.c:1646
+#: src/transport/tcp_server_legacy.c:490 src/util/service.c:1640
 #, fuzzy, c-format
 msgid "`%s' failed for `%s': address already in use\n"
 msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n"
@@ -7765,7 +7765,7 @@ msgid ""
 "`GNUNET_SERVER_receive_done' after %s\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:339 src/util/service.c:870
+#: src/transport/tcp_service_legacy.c:339 src/util/service.c:864
 #, c-format
 msgid "Unknown address family %d\n"
 msgstr ""
@@ -7775,27 +7775,27 @@ msgstr ""
 msgid "Access from `%s' denied to service `%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:402 src/util/service.c:994
+#: src/transport/tcp_service_legacy.c:402 src/util/service.c:988
 #, c-format
 msgid "Could not parse IPv4 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:440 src/util/service.c:1037
+#: src/transport/tcp_service_legacy.c:440 src/util/service.c:1031
 #, c-format
 msgid "Could not parse IPv6 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:904 src/util/service.c:1561
+#: src/transport/tcp_service_legacy.c:904 src/util/service.c:1555
 msgid "Could not access a pre-bound socket, will try to bind myself\n"
 msgstr ""
 
 #: src/transport/tcp_service_legacy.c:953
-#: src/transport/tcp_service_legacy.c:971 src/util/service.c:1714
+#: src/transport/tcp_service_legacy.c:971 src/util/service.c:1708
 #, c-format
 msgid "Specified value for `%s' of service `%s' is invalid\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:996 src/util/service.c:1747
+#: src/transport/tcp_service_legacy.c:996 src/util/service.c:1741
 #, c-format
 msgid "Could not access pre-bound socket %u, will try to bind myself\n"
 msgstr ""
@@ -7810,44 +7810,44 @@ msgstr "运行 %s失败:%s %d\n"
 msgid "Service `%s' runs at %s\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1251 src/util/service.c:2021
+#: src/transport/tcp_service_legacy.c:1251 src/util/service.c:2015
 msgid "Service process failed to initialize\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1255 src/util/service.c:2025
+#: src/transport/tcp_service_legacy.c:1255 src/util/service.c:2019
 msgid "Service process could not initialize server function\n"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1259 src/util/service.c:2029
+#: src/transport/tcp_service_legacy.c:1259 src/util/service.c:2023
 msgid "Service process failed to report status\n"
 msgstr ""
 
 #: src/transport/tcp_service_legacy.c:1313 src/util/disk.c:1535
-#: src/util/service.c:1899
+#: src/util/service.c:1893
 #, c-format
 msgid "Cannot obtain information about user `%s': %s\n"
 msgstr "无法获取有关用户“%s”的信息:%s\n"
 
-#: src/transport/tcp_service_legacy.c:1314 src/util/service.c:1901
+#: src/transport/tcp_service_legacy.c:1314 src/util/service.c:1895
 msgid "No such user"
 msgstr "无此用户"
 
-#: src/transport/tcp_service_legacy.c:1327 src/util/service.c:1920
+#: src/transport/tcp_service_legacy.c:1327 src/util/service.c:1914
 #, c-format
 msgid "Cannot change user/group to `%s': %s\n"
 msgstr "无法更改用户/组为“%s”:%s\n"
 
-#: src/transport/tcp_service_legacy.c:1398 src/util/service.c:2282
+#: src/transport/tcp_service_legacy.c:1398 src/util/service.c:2276
 msgid "do daemonize (detach from terminal)"
 msgstr ""
 
-#: src/transport/tcp_service_legacy.c:1448 src/util/service.c:2346
-#: src/util/service.c:2361
+#: src/transport/tcp_service_legacy.c:1448 src/util/service.c:2340
+#: src/util/service.c:2355
 #, fuzzy, c-format
 msgid "Malformed configuration file `%s', exit ...\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/transport/tcp_service_legacy.c:1458 src/util/service.c:2373
+#: src/transport/tcp_service_legacy.c:1458 src/util/service.c:2367
 #, fuzzy
 msgid "Malformed configuration, exit ...\n"
 msgstr "解析配置文件“%s”失败\n"
@@ -8002,22 +8002,22 @@ msgid ""
 "%llu)\n"
 msgstr ""
 
-#: src/util/crypto_ecc.c:904
+#: src/util/crypto_ecc.c:887
 #, fuzzy, c-format
 msgid "ECC signing failed at %s:%d: %s\n"
 msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n"
 
-#: src/util/crypto_ecc.c:963
+#: src/util/crypto_ecc.c:946
 #, fuzzy, c-format
 msgid "EdDSA signing failed at %s:%d: %s\n"
 msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n"
 
-#: src/util/crypto_ecc.c:1042
+#: src/util/crypto_ecc.c:1025
 #, fuzzy, c-format
 msgid "ECDSA signature verification failed at %s:%d: %s\n"
 msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n"
 
-#: src/util/crypto_ecc.c:1103
+#: src/util/crypto_ecc.c:1086
 #, fuzzy, c-format
 msgid "EdDSA signature verification failed at %s:%d: %s\n"
 msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n"
@@ -8567,14 +8567,14 @@ msgstr ""
 msgid "Could not resolve our FQDN: %s\n"
 msgstr "无法解析“%s”(%s):%s\n"
 
-#: src/util/service.c:674
+#: src/util/service.c:668
 #, c-format
 msgid ""
 "Processing code for message of type %u did not call "
 "`GNUNET_SERVICE_client_continue' after %s\n"
 msgstr ""
 
-#: src/util/service.c:1826
+#: src/util/service.c:1820
 msgid ""
 "Could not bind to any of the ports I was supposed to, refusing to run!\n"
 msgstr ""
index 23a7ae68ea72e602ab429a2c5d308089f8ba91d2..cccd3ccb009ef8d8c0d9c579ad5ef0965e664800 100644 (file)
@@ -20,6 +20,8 @@ libgnunetabe_la_LIBADD = \
   $(LTLIBICONV) \
   $(LTLIBINTL) \
        $(ABE_LIBADD) \
+       $(top_builddir)/src/util/libgnunetutil.la \
+       -lgmp \
        -lgabe \
        -lpbc \
        -lglib-2.0 \
index fcd422701cd410dfb72b26514f260c710adae315..5e2190cc62054b81497a303c65c510eb0c4a23fa 100644 (file)
@@ -495,11 +495,11 @@ GNUNET_HELLO_parse_uri (const char *uri,
  */
 void
 GNUNET_HELLO_sign_address (const char *address,
-                          enum GNUNET_NetworkType nt,
-                          struct GNUNET_TIME_Absolute expiration,
-                          const struct GNUNET_CRYPTO_EddsaPrivateKey *private_key,
-                          void **result,
-                          size_t *result_size);
+                           enum GNUNET_NetworkType nt,
+                           struct GNUNET_TIME_Absolute expiration,
+                           const struct GNUNET_CRYPTO_EddsaPrivateKey *private_key,
+                           void **result,
+                           size_t *result_size);
 
 
 /**
@@ -514,10 +514,10 @@ GNUNET_HELLO_sign_address (const char *address,
  */
 char *
 GNUNET_HELLO_extract_address (const void *raw,
-                             size_t raw_size,
-                             const struct GNUNET_PeerIdentity *pid,
-                             enum GNUNET_NetworkType *nt,
-                             struct GNUNET_TIME_Absolute *expiration);
+                              size_t raw_size,
+                              const struct GNUNET_PeerIdentity *pid,
+                              enum GNUNET_NetworkType *nt,
+                              struct GNUNET_TIME_Absolute *expiration);
 
 
 /**
index 7f1667d5102e174b29d7befbcded9bca6dffddff..4f97d3078e5f067c28780da18b5ab8b81e3521cd 100644 (file)
@@ -3189,8 +3189,15 @@ extern "C"
  */
 #define GNUNET_MESSAGE_TYPE_TRANSPORT_SUGGEST_CANCEL 1301
 
+/**
+ * Type of the 'struct RequestHelloValidationMessage' send by clients to TRANSPORT
+ * to trigger validation of addresses.
+ */
+#define GNUNET_MESSAGE_TYPE_TRANSPORT_REQUEST_HELLO_VALIDATION 1302
+
 
 /* ************** NEW (NG) ATS Messages ************* */
+/* NOTE: it is not clear ATS will survive in TNG      */
 
 /**
  * Type of the 'struct ExpressPreferenceMessage' send by clients to ATS
index b1dd1b5af9646ec164554888d7a459fade0c9b98..c88e75cc760d7f7890e06090749378fdacad18cb 100644 (file)
@@ -66,6 +66,21 @@ typedef void (* GNUNET_RPS_NotifyReadyCB) (void *cls,
     const struct GNUNET_PeerIdentity *peers);
 
 
+/**
+ * Callback called when requested random peer with additional information is
+ * available.
+ *
+ * @param cls the closure given with the request
+ * @param peer The Peer ID
+ * @param probability The probability with which all elements have been observed
+ * @param num_observed Number of IDs this sampler has observed
+ */
+typedef void (* GNUNET_RPS_NotifyReadySingleInfoCB) (void *cls,
+    const struct GNUNET_PeerIdentity *peer,
+    double probability,
+    uint32_t num_observed);
+
+
 /**
  * Connect to the rps service
  *
@@ -117,6 +132,21 @@ GNUNET_RPS_request_peers (struct GNUNET_RPS_Handle *h, uint32_t n,
                           GNUNET_RPS_NotifyReadyCB ready_cb,
                           void *cls);
 
+
+/**
+ * Request one random peer, getting additional information.
+ *
+ * @param rps_handle handle to the rps service
+ * @param ready_cb the callback called when the peers are available
+ * @param cls closure given to the callback
+ * @return a handle to cancel this request
+ */
+struct GNUNET_RPS_Request_Handle_Single_Info *
+GNUNET_RPS_request_peer_info (struct GNUNET_RPS_Handle *rps_handle,
+                              GNUNET_RPS_NotifyReadySingleInfoCB ready_cb,
+                              void *cls);
+
+
 /**
  * Seed rps service with peerIDs.
  *
@@ -137,6 +167,16 @@ GNUNET_RPS_seed_ids (struct GNUNET_RPS_Handle *h, uint32_t n,
 GNUNET_RPS_request_cancel (struct GNUNET_RPS_Request_Handle *rh);
 
 
+/**
+ * Cancle an issued single info request.
+ *
+ * @param rhs request handle of request to cancle
+ */
+void
+GNUNET_RPS_request_single_info_cancel (
+    struct GNUNET_RPS_Request_Handle_Single_Info *rhs);
+
+
 #if ENABLE_MALICIOUS
 /**
  * Turn RPS service to act malicious.
index 31097b88eda67a1384fa23fa83a40d4019eef12c..bbd4e3ddffebf1b5dcc53f9e87e321a5587ac799 100644 (file)
@@ -34,6 +34,7 @@
 
 #include "gnunet_constants.h"
 #include "gnunet_util_lib.h"
+#include "gnunet_nt_lib.h"
 
 /**
  * Handle to the TRANSPORT subsystem for making suggestions about
@@ -62,37 +63,28 @@ GNUNET_TRANSPORT_application_done (struct GNUNET_TRANSPORT_ApplicationHandle *ch
 
 
 /**
- * Handle for suggestion requests.
- */
-struct GNUNET_TRANSPORT_ApplicationSuggestHandle;
-
-
-/**
- * An application would like to communicate with a peer.  TRANSPORT should
- * allocate bandwith using a suitable address for requiremetns @a pk
- * to transport.
+ * An application (or a communicator) has received a HELLO (or other address
+ * data of another peer) and wants TRANSPORT to validate that the address is
+ * correct.  The result is NOT returned, in fact TRANSPORT may do nothing
+ * (i.e. if it has too many active validations or recently tried this one
+ * already).  If the @a addr validates, TRANSPORT will persist the address
+ * with PEERSTORE.
  *
  * @param ch handle
- * @param peer identity of the peer we need an address for
- * @param pk what kind of application will the application require (can be
- *         #GNUNET_MQ_PREFERENCE_NONE, we will still try to connect)
- * @param bw desired bandwith, can be zero (we will still try to connect)
- * @return suggestion handle, NULL if request is already pending
- */
-struct GNUNET_TRANSPORT_ApplicationSuggestHandle *
-GNUNET_TRANSPORT_application_suggest (struct GNUNET_TRANSPORT_ApplicationHandle *ch,
-                                      const struct GNUNET_PeerIdentity *peer,
-                                      enum GNUNET_MQ_PreferenceKind pk,
-                                      struct GNUNET_BANDWIDTH_Value32NBO bw);
-
-
-/**
- * We no longer care about communicating with a peer.
- *
- * @param sh handle
+ * @param peer identity of the peer we have an address for
+ * @param expiration when does @a addr expire; used by TRANSPORT to know when
+ *        to definitively give up attempting to validate
+ * @param nt network type of @a addr (as claimed by the other peer);
+ *        used by TRANSPORT to avoid trying @a addr's that really cannot work
+ *        due to network type missmatches
+ * @param addr address to validate
  */
 void
-GNUNET_TRANSPORT_application_suggest_cancel (struct GNUNET_TRANSPORT_ApplicationSuggestHandle *sh);
+GNUNET_TRANSPORT_application_validate (struct GNUNET_TRANSPORT_ApplicationHandle *ch,
+                                       const struct GNUNET_PeerIdentity *peer,
+                                       struct GNUNET_TIME_Absolute expiration,
+                                       enum GNUNET_NetworkType nt,
+                                       const char *addr);
 
 /** @} */  /* end of group */
 
index 3b95738e81f46fffa1fa0f4d11ff948f0fbe4fcf..45d24520f9fe1defaaacdf5c4844d5a6ca81bc51 100644 (file)
@@ -200,15 +200,21 @@ interface_proc (void *cls,
     net->netmask = (struct sockaddr *) &tmp[1];
     net->length = addrlen;
 
-    memset (&network4, 0, sizeof (network4));
+    memset (&network4,
+            0,
+            sizeof (network4));
     network4.sin_family = AF_INET;
 #if HAVE_SOCKADDR_IN_SIN_LEN
     network4.sin_len = sizeof (network4);
 #endif
     network4.sin_addr.s_addr = (addr4->sin_addr.s_addr & netmask4->sin_addr.s_addr);
 
-    GNUNET_memcpy (net->netmask, netmask4, sizeof (struct sockaddr_in));
-    GNUNET_memcpy (net->network, &network4, sizeof (struct sockaddr_in));
+    GNUNET_memcpy (net->netmask,
+                   netmask4,
+                   sizeof (struct sockaddr_in));
+    GNUNET_memcpy (net->network,
+                   &network4,
+                   sizeof (struct sockaddr_in));
   }
 
   if (addr->sa_family == AF_INET6)
@@ -236,8 +242,12 @@ interface_proc (void *cls,
     for (c = 0; c < 4; c++)
       net_elem[c] = addr_elem[c] & mask_elem[c];
 
-    GNUNET_memcpy (net->netmask, netmask6, sizeof (struct sockaddr_in6));
-    GNUNET_memcpy (net->network, &network6, sizeof (struct sockaddr_in6));
+    GNUNET_memcpy (net->netmask,
+                   netmask6,
+                   sizeof (struct sockaddr_in6));
+    GNUNET_memcpy (net->network,
+                   &network6,
+                   sizeof (struct sockaddr_in6));
   }
   if (NULL == net)
     return GNUNET_OK; /* odd / unsupported address family */
@@ -291,8 +301,8 @@ get_addresses (void *cls)
  */
 enum GNUNET_NetworkType
 GNUNET_NT_scanner_get_type (struct GNUNET_NT_InterfaceScanner *is,
-                           const struct sockaddr *addr,
-                           socklen_t addrlen)
+                            const struct sockaddr *addr,
+                            socklen_t addrlen)
 {
   struct NT_Network *cur = is->net_head;
   enum GNUNET_NetworkType type = GNUNET_NT_UNSPECIFIED;
index 13918508e625f2a5d7bfe24bcf69316ba84d83f2..be50cce261444d6209e5e801a5ddbab6be61f244 100644 (file)
@@ -99,6 +99,7 @@ libgnunet_plugin_reclaim_sqlite_la_LIBADD = \
   libgnunetreclaim.la  \
   $(top_builddir)/src/sq/libgnunetsq.la \
   $(top_builddir)/src/statistics/libgnunetstatistics.la \
+       $(top_builddir)/src/reclaim-attribute/libgnunetreclaimattribute.la \
   $(top_builddir)/src/util/libgnunetutil.la $(XLIBS) -lsqlite3 \
   $(LTLIBINTL)
 libgnunet_plugin_reclaim_sqlite_la_LDFLAGS = \
@@ -126,6 +127,7 @@ libgnunetreclaim_la_SOURCES = \
  reclaim.h
 libgnunetreclaim_la_LIBADD = \
   $(top_builddir)/src/util/libgnunetutil.la \
+       $(top_builddir)/src/reclaim-attribute/libgnunetreclaimattribute.la \
        $(GN_LIBINTL) $(XLIB)
 libgnunetreclaim_la_LDFLAGS = \
        $(GN_LIB_LDFLAGS)  $(WINFLAGS) \
index a852d94b154e5a3f52b1940fbefdf1f312d713bd..a13ee40781e8d91e2b70d32c596f2fb7f1cdc376 100644 (file)
@@ -429,7 +429,7 @@ struct PendingReply
   /**
    * Handle to the request we are waiting for
    */
-  struct GNUNET_RPS_Request_Handle *req_handle;
+  struct GNUNET_RPS_Request_Handle_Single_Info *req_handle;
 
   /**
    * The peer that requested
@@ -1040,7 +1040,7 @@ cancel_request (struct PendingReply *pending_rep)
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Cancelling rps get reply\n");
   GNUNET_assert (NULL != pending_rep->req_handle);
-  GNUNET_RPS_request_cancel (pending_rep->req_handle);
+  GNUNET_RPS_request_single_info_cancel (pending_rep->req_handle);
   pending_rep->req_handle = NULL;
   GNUNET_free (pending_rep);
   pending_rep = NULL;
@@ -1489,6 +1489,13 @@ default_reply_handle (void *cls,
   }
 }
 
+
+static void
+profiler_reply_handle_info (void *cls,
+                            const struct GNUNET_PeerIdentity *recv_peer,
+                            double probability,
+                            uint32_t num_observed);
+
 /**
  * Request random peers.
  */
@@ -1510,9 +1517,12 @@ request_peers (void *cls)
               "Requesting one peer\n");
   pending_rep = GNUNET_new (struct PendingReply);
   pending_rep->rps_peer = rps_peer;
-  pending_rep->req_handle = GNUNET_RPS_request_peers (rps_peer->rps_handle,
-      1,
-      cur_test_run.reply_handle,
+  //pending_rep->req_handle = GNUNET_RPS_request_peers (rps_peer->rps_handle,
+  //    1,
+  //    cur_test_run.reply_handle,
+  //    pending_rep);
+  pending_rep->req_handle = GNUNET_RPS_request_peer_info (rps_peer->rps_handle,
+      profiler_reply_handle_info,
       pending_rep);
   GNUNET_CONTAINER_DLL_insert_tail (rps_peer->pending_rep_head,
                                     rps_peer->pending_rep_tail,
@@ -1979,6 +1989,77 @@ profiler_reply_handle (void *cls,
 }
 
 
+/**
+ * Callback to call on receipt of a reply
+ *
+ * @param cls closure
+ * @param n number of peers
+ * @param recv_peers the received peers
+ */
+static void
+profiler_reply_handle_info (void *cls,
+                            const struct GNUNET_PeerIdentity *recv_peer,
+                            double probability,
+                            uint32_t num_observed)
+{
+  struct RPSPeer *rps_peer;
+  struct RPSPeer *rcv_rps_peer;
+  char file_name_buf[128];
+  char file_name_dh_buf[128];
+  char file_name_dhr_buf[128];
+  char file_name_dhru_buf[128];
+  char *file_name = file_name_buf;
+  char *file_name_dh = file_name_dh_buf;
+  char *file_name_dhr = file_name_dhr_buf;
+  char *file_name_dhru = file_name_dhru_buf;
+  unsigned int i;
+  struct PendingReply *pending_rep = (struct PendingReply *) cls;
+
+  pending_rep->req_handle = NULL;
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "profiler_reply_handle()\n");
+  rps_peer = pending_rep->rps_peer;
+  (void) GNUNET_asprintf (&file_name,
+                                       "/tmp/rps/received_ids-%u",
+                                       rps_peer->index);
+
+  (void) GNUNET_asprintf (&file_name_dh,
+                                       "/tmp/rps/diehard_input-%u",
+                                       rps_peer->index);
+  (void) GNUNET_asprintf (&file_name_dhr,
+                                       "/tmp/rps/diehard_input_raw-%u",
+                                       rps_peer->index);
+  (void) GNUNET_asprintf (&file_name_dhru,
+                                       "/tmp/rps/diehard_input_raw_aligned-%u",
+                                       rps_peer->index);
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+              "[%s] got peer with info:\n",
+              GNUNET_i2s (rps_peer->peer_id));
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+              "  %s\n",
+              GNUNET_i2s (recv_peer));
+  tofile (file_name,
+           "%s %d %" PRIu32 " \n",
+           GNUNET_i2s_full (recv_peer),
+           probability,
+           num_observed);
+  rcv_rps_peer = GNUNET_CONTAINER_multipeermap_get (peer_map, recv_peer);
+  GNUNET_assert (NULL != rcv_rps_peer);
+  tofile (file_name_dh,
+           "%" PRIu32 "\n",
+           (uint32_t) rcv_rps_peer->index);
+#ifdef TO_FILE
+  to_file_raw (file_name_dhr,
+              (char *) &rcv_rps_peer->index,
+               sizeof (uint32_t));
+  to_file_raw_unaligned (file_name_dhru,
+                        (char *) &rcv_rps_peer->index,
+                         sizeof (uint32_t),
+                         bits_needed);
+#endif /* TO_FILE */
+  default_reply_handle (cls, 1, recv_peer);
+}
+
+
 static void
 profiler_cb (struct RPSPeer *rps_peer)
 {
@@ -2141,7 +2222,7 @@ static void compute_probabilities (uint32_t peer_idx)
 {
   //double probs[num_peers] = { 0 };
   double probs[num_peers];
-  size_t probs_as_str_size = (num_peers * 10 + 1) * sizeof (char);
+  size_t probs_as_str_size = (num_peers * 10 + 2) * sizeof (char);
   char *probs_as_str = GNUNET_malloc (probs_as_str_size);
   char *probs_as_str_cpy;
   uint32_t i;
index f6fe1758925e62677ac750f9a33fac150ffd7545..e929c89de6ab25b6d0bc264568af5fdd0ffd5204 100644 (file)
@@ -2602,6 +2602,13 @@ insert_in_sampler (void *cls,
      * messages to it */
     //indicate_sending_intention (peer);
   }
+  if (sub == msub)
+  {
+    GNUNET_STATISTICS_update (stats,
+                              "# observed peers in gossip",
+                              1,
+                              GNUNET_NO);
+  }
 #ifdef TO_FILE
   sub->num_observed_peers++;
   GNUNET_CONTAINER_multipeermap_put
@@ -2611,6 +2618,10 @@ insert_in_sampler (void *cls,
      GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY);
   uint32_t num_observed_unique_peers =
     GNUNET_CONTAINER_multipeermap_size (sub->observed_unique_peers);
+  GNUNET_STATISTICS_set (stats,
+                         "# unique peers in gossip",
+                         num_observed_unique_peers,
+                         GNUNET_NO);
 #ifdef TO_FILE_FULL
   to_file (sub->file_name_observed_log,
           "%" PRIu32 " %" PRIu32 " %f\n",
index a95ac82d42028d63c80067a1655cb770cade69d4..e17b154ca8ca76a200f904e4dab503f8bb52d4c9 100644 (file)
@@ -257,7 +257,7 @@ sampler_get_rand_peer (void *cls)
                                gpc->req_handle->gpc_tail,
                                gpc);
   *gpc->id = sampler->sampler_elements[r_index]->peer_id;
-  gpc->cont (gpc->cont_cls, gpc->id);
+  gpc->cont (gpc->cont_cls, gpc->id, 0, sampler->sampler_elements[r_index]->num_peers);
 
   GNUNET_free (gpc);
 }
index 0de25df071806b469e76e6a7d51cdbcc89d058b4..20cd9d0c41564e4feb97b8dbdbcbe6c7d8705aed 100644 (file)
@@ -158,6 +158,46 @@ struct RPS_SamplerRequestHandle
   void *cls;
 };
 
+
+/**
+ * Closure to _get_rand_peer_info()
+ */
+struct RPS_SamplerRequestHandleSingleInfo
+{
+  /**
+   * DLL
+   */
+  struct RPS_SamplerRequestHandleSingleInfo *next;
+  struct RPS_SamplerRequestHandleSingleInfo *prev;
+
+  /**
+   * Pointer to the id
+   */
+  struct GNUNET_PeerIdentity *id;
+
+  /**
+   * Head and tail for the DLL to store the tasks for single requests
+   */
+  struct GetPeerCls *gpc_head;
+  struct GetPeerCls *gpc_tail;
+
+  /**
+   * Sampler.
+   */
+  struct RPS_Sampler *sampler;
+
+  /**
+   * Callback to be called when all ids are available.
+   */
+  RPS_sampler_sinlge_info_ready_cb callback;
+
+  /**
+   * Closure given to the callback
+   */
+  void *cls;
+};
+
+
 ///**
 // * Global sampler variable.
 // */
@@ -266,10 +306,16 @@ sampler_mod_get_rand_peer (void *cls)
   struct GNUNET_TIME_Relative last_request_diff;
   struct RPS_Sampler *sampler;
   double prob_observed_n;
+  uint32_t num_observed;
 
   gpc->get_peer_task = NULL;
   gpc->notify_ctx = NULL;
-  sampler = gpc->req_handle->sampler;
+  GNUNET_assert ( (NULL != gpc->req_handle) ||
+                  (NULL != gpc->req_single_info_handle) );
+  if (NULL != gpc->req_handle)
+    sampler = gpc->req_handle->sampler;
+  else
+    sampler = gpc->req_single_info_handle->sampler;
 
   LOG (GNUNET_ERROR_TYPE_DEBUG, "Single peer was requested\n");
 
@@ -335,10 +381,10 @@ sampler_mod_get_rand_peer (void *cls)
                                            s_elem->num_peers,
                                            sampler->deficiency_factor);
   /* check if probability is above desired */
-  if (prob_observed_n >= sampler->desired_probability)
+  if (prob_observed_n < sampler->desired_probability)
   {
     LOG (GNUNET_ERROR_TYPE_DEBUG,
-        "Probability of having observed all peers (%d) too small ( < %d).\n",
+        "Probability of having observed all peers (%f) too small ( < %f).\n",
         prob_observed_n,
         sampler->desired_probability);
     GNUNET_assert (NULL == gpc->notify_ctx);
@@ -359,13 +405,23 @@ sampler_mod_get_rand_peer (void *cls)
 //                         s_elem->num_change,
 //                         GNUNET_NO);
 
+  num_observed = s_elem->num_peers;
   RPS_sampler_elem_reinit (s_elem);
   s_elem->last_client_request = GNUNET_TIME_absolute_get ();
 
-  GNUNET_CONTAINER_DLL_remove (gpc->req_handle->gpc_head,
-                               gpc->req_handle->gpc_tail,
-                               gpc);
-  gpc->cont (gpc->cont_cls, gpc->id);
+  if (NULL != gpc->req_handle)
+  {
+    GNUNET_CONTAINER_DLL_remove (gpc->req_handle->gpc_head,
+                                 gpc->req_handle->gpc_tail,
+                                 gpc);
+  }
+  else
+  {
+    GNUNET_CONTAINER_DLL_remove (gpc->req_single_info_handle->gpc_head,
+                                 gpc->req_single_info_handle->gpc_tail,
+                                 gpc);
+  }
+  gpc->cont (gpc->cont_cls, gpc->id, prob_observed_n, num_observed);
   GNUNET_free (gpc);
 }
 
index 1b425b7540da7e8102319f8c119529a118aae790..680fabfda8f6517ef9e52df07d3ab8f8d0201482 100644 (file)
@@ -40,6 +40,11 @@ struct RPS_Sampler;
  */
 struct RPS_SamplerRequestHandle;
 
+/**
+ * Closure to _get_rand_peer_info()
+ */
+struct RPS_SamplerRequestHandleSingleInfo;
+
 
 /**
  * Get the size of the sampler.
@@ -108,8 +113,6 @@ RPS_sampler_reinitialise_by_value (struct RPS_Sampler *sampler,
  * @param sampler the sampler to get peers from.
  * @param cb callback that will be called once the ids are ready.
  * @param cls closure given to @a cb
- * @param for_client #GNUNET_YES if result is used for client,
- *                   #GNUNET_NO if used internally
  * @param num_peers the number of peers requested
  */
 struct RPS_SamplerRequestHandle *
@@ -118,6 +121,7 @@ RPS_sampler_get_n_rand_peers (struct RPS_Sampler *sampler,
                               RPS_sampler_n_rand_peers_ready_cb cb,
                               void *cls);
 
+
 /**
  * Cancle a request issued through #RPS_sampler_n_rand_peers_ready_cb.
  *
index f54de90142ad6037c41c7091b1872a21078f4844..adb69e1b5f96bb0715e8825a30e34c4b00ac9ff4 100644 (file)
@@ -115,6 +115,45 @@ struct RPS_SamplerRequestHandle
 };
 
 
+/**
+ * Closure to _get_rand_peer_info()
+ */
+struct RPS_SamplerRequestHandleSingleInfo
+{
+  /**
+   * DLL
+   */
+  struct RPS_SamplerRequestHandleSingleInfo *next;
+  struct RPS_SamplerRequestHandleSingleInfo *prev;
+
+  /**
+   * Pointer to the id
+   */
+  struct GNUNET_PeerIdentity *id;
+
+  /**
+   * Head and tail for the DLL to store the tasks for single requests
+   */
+  struct GetPeerCls *gpc_head;
+  struct GetPeerCls *gpc_tail;
+
+  /**
+   * Sampler.
+   */
+  struct RPS_Sampler *sampler;
+
+  /**
+   * Callback to be called when all ids are available.
+   */
+  RPS_sampler_sinlge_info_ready_cb callback;
+
+  /**
+   * Closure given to the callback
+   */
+  void *cls;
+};
+
+
 /**
  * @brief Update the current estimate of the network size stored at the sampler
  *
@@ -415,12 +454,20 @@ sampler_empty (struct RPS_Sampler *sampler)
 /**
  * Callback to _get_rand_peer() used by _get_n_rand_peers().
  *
+ * Implements #RPS_sampler_rand_peer_ready_cont
+ *
  * Checks whether all n peers are available. If they are,
  * give those back.
+ * @param cls Closure
+ * @param id Peer ID
+ * @param probability The probability with which this sampler has seen all ids
+ * @param num_observed How many ids this sampler has observed
  */
 static void
 check_n_peers_ready (void *cls,
-                     const struct GNUNET_PeerIdentity *id)
+                     const struct GNUNET_PeerIdentity *id,
+                     double probability,
+                     uint32_t num_observed)
 {
   struct RPS_SamplerRequestHandle *req_handle = cls;
   (void) id;
@@ -428,6 +475,8 @@ check_n_peers_ready (void *cls,
   struct GNUNET_PeerIdentity *peers;
   uint32_t num_peers;
   void *cb_cls;
+  (void) probability;
+  (void) num_observed;
 
   req_handle->cur_num_peers++;
   LOG (GNUNET_ERROR_TYPE_DEBUG,
@@ -459,6 +508,53 @@ check_n_peers_ready (void *cls,
 }
 
 
+/**
+ * Callback to _get_rand_peer() used by _get_rand_peer_info().
+ *
+ * Implements #RPS_sampler_rand_peer_ready_cont
+ *
+ * @param cls Closure
+ * @param id Peer ID
+ * @param probability The probability with which this sampler has seen all ids
+ * @param num_observed How many ids this sampler has observed
+ */
+static void
+check_peer_info_ready (void *cls,
+                       const struct GNUNET_PeerIdentity *id,
+                       double probability,
+                       uint32_t num_observed)
+{
+  struct RPS_SamplerRequestHandleSingleInfo *req_handle = cls;
+  (void) id;
+  RPS_sampler_sinlge_info_ready_cb tmp_cb;
+  struct GNUNET_PeerIdentity *peer;
+  void *cb_cls;
+  (void) probability;
+  (void) num_observed;
+
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+      "Got single peer with additional info\n");
+
+  GNUNET_assert (NULL != req_handle->callback);
+
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+      "returning single peer with info to the client\n");
+
+  /* Copy pointers and peers temporarily as they
+   * might be deleted from within the callback */
+  tmp_cb = req_handle->callback;
+  peer = GNUNET_new (struct GNUNET_PeerIdentity);
+  GNUNET_memcpy (peer,
+                 req_handle->id,
+                 sizeof (struct GNUNET_PeerIdentity));
+  cb_cls = req_handle->cls;
+  RPS_sampler_request_single_info_cancel (req_handle);
+  req_handle = NULL;
+  tmp_cb (peer, cb_cls, probability, num_observed);
+  GNUNET_free (peer);
+}
+
+
 /**
  * Get n random peers out of the sampled peers.
  *
@@ -469,8 +565,6 @@ check_n_peers_ready (void *cls,
  * @param sampler the sampler to get peers from.
  * @param cb callback that will be called once the ids are ready.
  * @param cls closure given to @a cb
- * @param for_client #GNUNET_YES if result is used for client,
- *                   #GNUNET_NO if used internally
  * @param num_peers the number of peers requested
  */
 struct RPS_SamplerRequestHandle *
@@ -506,6 +600,7 @@ RPS_sampler_get_n_rand_peers (struct RPS_Sampler *sampler,
   {
     gpc = GNUNET_new (struct GetPeerCls);
     gpc->req_handle = req_handle;
+    gpc->req_single_info_handle = NULL;
     gpc->cont = check_n_peers_ready;
     gpc->cont_cls = req_handle;
     gpc->id = &req_handle->ids[i];
@@ -515,11 +610,56 @@ RPS_sampler_get_n_rand_peers (struct RPS_Sampler *sampler,
                                  gpc);
     // maybe add a little delay
     gpc->get_peer_task = GNUNET_SCHEDULER_add_now (sampler->get_peers,
-                                                  gpc);
+                                                   gpc);
   }
   return req_handle;
 }
 
+
+/**
+ * Get one random peer with additional information.
+ *
+ * @param sampler the sampler to get peers from.
+ * @param cb callback that will be called once the ids are ready.
+ * @param cls closure given to @a cb
+ */
+struct RPS_SamplerRequestHandleSingleInfo *
+RPS_sampler_get_rand_peer_info (struct RPS_Sampler *sampler,
+                                RPS_sampler_sinlge_info_ready_cb cb,
+                                void *cls)
+{
+  struct RPS_SamplerRequestHandleSingleInfo *req_handle;
+  struct GetPeerCls *gpc;
+
+  GNUNET_assert (0 != sampler->sampler_size);
+
+  // TODO check if we have too much (distinct) sampled peers
+  req_handle = GNUNET_new (struct RPS_SamplerRequestHandleSingleInfo);
+  req_handle->id = GNUNET_malloc (sizeof (struct GNUNET_PeerIdentity));
+  req_handle->sampler = sampler;
+  req_handle->callback = cb;
+  req_handle->cls = cls;
+  GNUNET_CONTAINER_DLL_insert (sampler->req_handle_single_head,
+                               sampler->req_handle_single_tail,
+                               req_handle);
+
+  gpc = GNUNET_new (struct GetPeerCls);
+  gpc->req_handle = NULL;
+  gpc->req_single_info_handle = req_handle;
+  gpc->cont = check_peer_info_ready;
+  gpc->cont_cls = req_handle;
+  gpc->id = req_handle->id;
+
+  GNUNET_CONTAINER_DLL_insert (req_handle->gpc_head,
+                               req_handle->gpc_tail,
+                               gpc);
+  // maybe add a little delay
+  gpc->get_peer_task = GNUNET_SCHEDULER_add_now (sampler->get_peers,
+                                                 gpc);
+  return req_handle;
+}
+
+
 /**
  * Cancle a request issued through #RPS_sampler_n_rand_peers_ready_cb.
  *
@@ -558,6 +698,45 @@ RPS_sampler_request_cancel (struct RPS_SamplerRequestHandle *req_handle)
 }
 
 
+/**
+ * Cancle a request issued through #RPS_sampler_sinlge_info_ready_cb.
+ *
+ * @param req_handle the handle to the request
+ */
+void
+RPS_sampler_request_single_info_cancel (
+    struct RPS_SamplerRequestHandleSingleInfo *req_single_info_handle)
+{
+  struct GetPeerCls *i;
+
+  while (NULL != (i = req_single_info_handle->gpc_head) )
+  {
+    GNUNET_CONTAINER_DLL_remove (req_single_info_handle->gpc_head,
+                                 req_single_info_handle->gpc_tail,
+                                 i);
+    if (NULL != i->get_peer_task)
+    {
+      GNUNET_SCHEDULER_cancel (i->get_peer_task);
+    }
+    if (NULL != i->notify_ctx)
+    {
+      GNUNET_CONTAINER_DLL_remove (req_single_info_handle->sampler->notify_ctx_head,
+                                   req_single_info_handle->sampler->notify_ctx_tail,
+                                   i->notify_ctx);
+      GNUNET_free (i->notify_ctx);
+      i->notify_ctx = NULL;
+    }
+    GNUNET_free (i);
+  }
+  GNUNET_free (req_single_info_handle->id);
+  req_single_info_handle->id = NULL;
+  GNUNET_CONTAINER_DLL_remove (req_single_info_handle->sampler->req_handle_single_head,
+                               req_single_info_handle->sampler->req_handle_single_tail,
+                               req_single_info_handle);
+  GNUNET_free (req_single_info_handle);
+}
+
+
 /**
  * Cleans the sampler.
  */
index 1abe43720841eaa56ccb3ad1307fbf365462def1..321efaf1e093510e6ee84f69f9e8786291c6d0bb 100644 (file)
  *
  * @param cls the closure given alongside this function.
  * @param id the PeerID that was returned
+ * @param probability The probability with which this sampler has seen all ids
+ * @param num_observed How many ids this sampler has observed
  */
 typedef void
 (*RPS_sampler_rand_peer_ready_cont) (void *cls,
-                                     const struct GNUNET_PeerIdentity *id);
+                                     const struct GNUNET_PeerIdentity *id,
+                                     double probability,
+                                     uint32_t num_observed);
 
 
 /**
@@ -71,6 +75,22 @@ typedef void
                                       void *cls);
 
 
+/**
+ * Callback that is called from _get_n_rand_peers() when the PeerIDs are ready.
+ *
+ * @param cls the closure given alongside this function.
+ * @param probability Probability with which all IDs have been observed
+ * @param num_observed Number of observed IDs
+ * @param ids the PeerIDs that were returned
+ *        to be freed
+ */
+  typedef void
+(*RPS_sampler_sinlge_info_ready_cb) (const struct GNUNET_PeerIdentity *ids,
+                                     void *cls,
+                                     double probability,
+                                     uint32_t num_observed);
+
+
 /**
  * @brief Callback called each time a new peer was put into the sampler
  *
@@ -96,6 +116,11 @@ struct GetPeerCls
    */
   struct RPS_SamplerRequestHandle *req_handle;
 
+  /**
+   * The #RPS_SamplerRequestHandleSingleInfo this single request belongs to.
+   */
+  struct RPS_SamplerRequestHandleSingleInfo *req_single_info_handle;
+
   /**
    * The task for this function.
    */
@@ -177,6 +202,12 @@ struct RPS_Sampler
   struct RPS_SamplerRequestHandle *req_handle_head;
   struct RPS_SamplerRequestHandle *req_handle_tail;
 
+  /**
+   * Head and tail for the DLL to store the #RPS_SamplerRequestHandleSingleInfo
+   */
+  struct RPS_SamplerRequestHandleSingleInfo *req_handle_single_head;
+  struct RPS_SamplerRequestHandleSingleInfo *req_handle_single_tail;
+
   struct SamplerNotifyUpdateCTX *notify_ctx_head;
   struct SamplerNotifyUpdateCTX *notify_ctx_tail;
 };
@@ -305,6 +336,19 @@ RPS_sampler_get_n_rand_peers (struct RPS_Sampler *sampler,
                               void *cls);
 
 
+/**
+ * Get one random peer with additional information.
+ *
+ * @param sampler the sampler to get peers from.
+ * @param cb callback that will be called once the ids are ready.
+ * @param cls closure given to @a cb
+ */
+struct RPS_SamplerRequestHandleSingleInfo *
+RPS_sampler_get_rand_peer_info (struct RPS_Sampler *sampler,
+                                RPS_sampler_sinlge_info_ready_cb cb,
+                                void *cls);
+
+
 /**
  * Counts how many Samplers currently hold a given PeerID.
  *
@@ -327,6 +371,16 @@ void
 RPS_sampler_request_cancel (struct RPS_SamplerRequestHandle *req_handle);
 
 
+/**
+ * Cancle a request issued through #RPS_sampler_n_rand_peers_ready_cb.
+ *
+ * @param req_handle the handle to the request
+ */
+void
+RPS_sampler_request_single_info_cancel (
+    struct RPS_SamplerRequestHandleSingleInfo *req_single_info_handle);
+
+
 /**
  * Cleans the sampler.
  */
index 6b5f568d7edc9f519c179f64f573551c1fa18a4b..d5a2db9dee5a1d4175c99114b341a6f09eabebce 100644 (file)
@@ -68,12 +68,15 @@ close_all_files ();
     if (NULL == file_name) break; \
     size = GNUNET_snprintf(tmp_buf,sizeof(tmp_buf),__VA_ARGS__);\
     if (0 > size)\
+    {\
       GNUNET_log (GNUNET_ERROR_TYPE_WARNING,\
            "Failed to create tmp_buf\n");\
-    else\
-      GNUNET_DISK_file_write (get_file_handle (file_name),\
-                              tmp_buf,\
-                              strnlen (tmp_buf, 512));\
+      break;\
+    }\
+    (void) strncat(tmp_buf,"\n",512);\
+    GNUNET_DISK_file_write (get_file_handle (file_name),\
+                            tmp_buf,\
+                            strnlen (tmp_buf, 512));\
   } while (0);
 
 
@@ -82,12 +85,15 @@ close_all_files ();
     memset (tmp_buf, 0, len);\
     size = GNUNET_snprintf(tmp_buf,sizeof(tmp_buf),__VA_ARGS__);\
     if (0 > size)\
+    {\
       GNUNET_log (GNUNET_ERROR_TYPE_WARNING,\
            "Failed to create tmp_buf\n");\
-    else\
-      GNUNET_DISK_file_write (get_file_handle (file_name),\
-                              tmp_buf,\
-                              strnlen (tmp_buf, 512));\
+      break;\
+    }\
+    (void) strncat(tmp_buf,"\n",len);\
+    GNUNET_DISK_file_write (get_file_handle (file_name),\
+                            tmp_buf,\
+                            strnlen (tmp_buf, len));\
   } while (0);
 #else /* TO_FILE */
 #  define to_file(file_name, ...)
index 7a3adfa944f8f3374e9bee219190f1365e133ac9..9e405fdefc69f90454ad19c32686bc6580def6e2 100644 (file)
@@ -127,6 +127,16 @@ struct GNUNET_RPS_Handle
    */
   struct GNUNET_RPS_Request_Handle *rh_tail;
 
+  /**
+   * @brief Pointer to the head element in DLL of single request handles
+   */
+  struct GNUNET_RPS_Request_Handle_Single_Info *rhs_head;
+
+  /**
+   * @brief Pointer to the tail element in DLL of single request handles
+   */
+  struct GNUNET_RPS_Request_Handle_Single_Info *rhs_tail;
+
   /**
    * @brief The desired probability with which we want to have observed all
    * peers.
@@ -196,6 +206,54 @@ struct GNUNET_RPS_Request_Handle
 };
 
 
+/**
+ * Handler for a single request from a client.
+ */
+struct GNUNET_RPS_Request_Handle_Single_Info
+{
+  /**
+   * The client issuing the request.
+   */
+  struct GNUNET_RPS_Handle *rps_handle;
+
+  /**
+   * @brief The Sampler for the client request
+   */
+  struct RPS_Sampler *sampler;
+
+  /**
+   * @brief Request handle of the request to the sampler - needed to cancel the request
+   */
+  struct RPS_SamplerRequestHandleSingleInfo *sampler_rh;
+
+  /**
+   * @brief Request handle of the request of the biased stream of peers -
+   * needed to cancel the request
+   */
+  struct GNUNET_RPS_StreamRequestHandle *srh;
+
+  /**
+   * The callback to be called when we receive an answer.
+   */
+  GNUNET_RPS_NotifyReadySingleInfoCB ready_cb;
+
+  /**
+   * The closure for the callback.
+   */
+  void *ready_cb_cls;
+
+  /**
+   * @brief Pointer to next element in DLL
+   */
+  struct GNUNET_RPS_Request_Handle_Single_Info *next;
+
+  /**
+   * @brief Pointer to previous element in DLL
+   */
+  struct GNUNET_RPS_Request_Handle_Single_Info *prev;
+};
+
+
 /**
  * Struct used to pack the callback, its closure (provided by the caller)
  * and the connection handler to the service to pass it to a callback function.
@@ -308,6 +366,34 @@ peers_ready_cb (const struct GNUNET_PeerIdentity *peers,
 }
 
 
+/**
+ * @brief Called once the sampler has collected the requested peer.
+ *
+ * Calls the callback provided by the client with the corresponding cls.
+ *
+ * @param peers The array of @a num_peers that has been returned.
+ * @param num_peers The number of peers that have been returned
+ * @param cls The #GNUNET_RPS_Request_Handle
+ * @param probability Probability with which all IDs have been observed
+ * @param num_observed Number of observed IDs
+ */
+static void
+peer_info_ready_cb (const struct GNUNET_PeerIdentity *peers,
+                    void *cls,
+                    double probability,
+                    uint32_t num_observed)
+{
+  struct GNUNET_RPS_Request_Handle_Single_Info *rh = cls;
+
+  rh->sampler_rh = NULL;
+  rh->ready_cb (rh->ready_cb_cls,
+                peers,
+                probability,
+                num_observed);
+  GNUNET_RPS_request_single_info_cancel (rh);
+}
+
+
 /**
  * @brief Callback to collect the peers from the biased stream and put those
  * into the sampler.
@@ -333,6 +419,33 @@ collect_peers_cb (void *cls,
 }
 
 
+/**
+ * @brief Callback to collect the peers from the biased stream and put those
+ * into the sampler.
+ *
+ * This version is for the modified #GNUNET_RPS_Request_Handle_Single_Info
+ *
+ * @param cls The #GNUNET_RPS_Request_Handle
+ * @param num_peers The number of peer that have been returned
+ * @param peers The array of @a num_peers that have been returned
+ */
+static void
+collect_peers_info_cb (void *cls,
+                       uint64_t num_peers,
+                       const struct GNUNET_PeerIdentity *peers)
+{
+  struct GNUNET_RPS_Request_Handle_Single_Info *rhs = cls;
+
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "Service sent %" PRIu64 " peers from stream\n",
+       num_peers);
+  for (uint64_t i = 0; i < num_peers; i++)
+  {
+    RPS_sampler_update (rhs->sampler, &peers[i]);
+  }
+}
+
+
 /* Get internals for debugging/profiling purposes */
 
 /**
@@ -632,15 +745,15 @@ mq_error_handler (void *cls,
  */
 static void
 hash_from_share_val (const char *share_val,
-                    struct GNUNET_HashCode *hash)
+                     struct GNUNET_HashCode *hash)
 {
   GNUNET_CRYPTO_kdf (hash,
-                    sizeof (struct GNUNET_HashCode),
-                    "rps",
-                    strlen ("rps"),
-                    share_val,
-                    strlen (share_val),
-                    NULL, 0);
+                     sizeof (struct GNUNET_HashCode),
+                     "rps",
+                     strlen ("rps"),
+                     share_val,
+                     strlen (share_val),
+                     NULL, 0);
 }
 
 
@@ -672,6 +785,13 @@ nse_cb (void *cls,
     RPS_sampler_update_with_nw_size (rh_iter->sampler,
                                      GNUNET_NSE_log_estimate_to_n (logestimate));
   }
+  for (struct GNUNET_RPS_Request_Handle_Single_Info *rhs_iter = h->rhs_head;
+       NULL != rhs_iter && NULL != rhs_iter->next;
+       rhs_iter = rhs_iter->next)
+  {
+    RPS_sampler_update_with_nw_size (rhs_iter->sampler,
+                                     GNUNET_NSE_log_estimate_to_n (logestimate));
+  }
 }
 
 
@@ -856,6 +976,48 @@ GNUNET_RPS_request_peers (struct GNUNET_RPS_Handle *rps_handle,
 }
 
 
+/**
+ * Request one random peer, getting additional information.
+ *
+ * @param rps_handle handle to the rps service
+ * @param ready_cb the callback called when the peers are available
+ * @param cls closure given to the callback
+ * @return a handle to cancel this request
+ */
+struct GNUNET_RPS_Request_Handle_Single_Info *
+GNUNET_RPS_request_peer_info (struct GNUNET_RPS_Handle *rps_handle,
+                              GNUNET_RPS_NotifyReadySingleInfoCB ready_cb,
+                              void *cls)
+{
+  struct GNUNET_RPS_Request_Handle_Single_Info *rhs;
+  uint32_t num_req_peers = 1;
+
+  LOG (GNUNET_ERROR_TYPE_INFO,
+       "Client requested peer with additional info\n");
+  rhs = GNUNET_new (struct GNUNET_RPS_Request_Handle_Single_Info);
+  rhs->rps_handle = rps_handle;
+  rhs->sampler = RPS_sampler_mod_init (num_req_peers,
+                                      GNUNET_TIME_UNIT_SECONDS); // TODO remove this time-stuff
+  RPS_sampler_set_desired_probability (rhs->sampler,
+                                       rps_handle->desired_probability);
+  RPS_sampler_set_deficiency_factor (rhs->sampler,
+                                     rps_handle->deficiency_factor);
+  rhs->sampler_rh = RPS_sampler_get_rand_peer_info (rhs->sampler,
+                                                   peer_info_ready_cb,
+                                                   rhs);
+  rhs->srh = GNUNET_RPS_stream_request (rps_handle,
+                                       collect_peers_info_cb,
+                                       rhs); /* cls */
+  rhs->ready_cb = ready_cb;
+  rhs->ready_cb_cls = cls;
+  GNUNET_CONTAINER_DLL_insert (rps_handle->rhs_head,
+                               rps_handle->rhs_tail,
+                               rhs);
+
+  return rhs;
+}
+
+
 /**
  * Seed rps service with peerIDs.
  *
@@ -1046,6 +1208,37 @@ GNUNET_RPS_request_cancel (struct GNUNET_RPS_Request_Handle *rh)
 }
 
 
+/**
+ * Cancle an issued single info request.
+ *
+ * @param rhs request handle of request to cancle
+ */
+void
+GNUNET_RPS_request_single_info_cancel (
+    struct GNUNET_RPS_Request_Handle_Single_Info *rhs)
+{
+  struct GNUNET_RPS_Handle *h;
+
+  h = rhs->rps_handle;
+  GNUNET_assert (NULL != rhs);
+  GNUNET_assert (NULL != rhs->srh);
+  GNUNET_assert (h == rhs->srh->rps_handle);
+  GNUNET_RPS_stream_cancel (rhs->srh);
+  rhs->srh = NULL;
+  if (NULL == h->stream_requests_head) cancel_stream(h);
+  if (NULL != rhs->sampler_rh)
+  {
+    RPS_sampler_request_single_info_cancel (rhs->sampler_rh);
+  }
+  RPS_sampler_destroy (rhs->sampler);
+  rhs->sampler = NULL;
+  GNUNET_CONTAINER_DLL_remove (h->rhs_head,
+                               h->rhs_tail,
+                               rhs);
+  GNUNET_free (rhs);
+}
+
+
 /**
  * Disconnect from the rps service
  *
@@ -1079,6 +1272,17 @@ GNUNET_RPS_disconnect (struct GNUNET_RPS_Handle *h)
       GNUNET_RPS_request_cancel (rh_iter);
     }
   }
+  if (NULL != h->rhs_head)
+  {
+    LOG (GNUNET_ERROR_TYPE_WARNING,
+         "Not all requests were cancelled!\n");
+    for (struct GNUNET_RPS_Request_Handle_Single_Info *rhs_iter = h->rhs_head;
+         h->rhs_head != NULL;
+         rhs_iter = h->rhs_head)
+    {
+      GNUNET_RPS_request_single_info_cancel (rhs_iter);
+    }
+  }
   if (NULL != srh_callback_peers)
   {
     GNUNET_free (srh_callback_peers);
index 2865460fde87e98875d2bdbcac5bb6b2c183c638..f83fa669c7ebb9e22aae940fd11ffbc77a82b1aa 100644 (file)
@@ -285,6 +285,7 @@ gnunet_communicator_tcp_LDADD = \
 gnunet_communicator_udp_SOURCES = \
  gnunet-communicator-udp.c
 gnunet_communicator_udp_LDADD = \
+  libgnunettransportapplication.la \
   libgnunettransportcommunicator.la \
   $(top_builddir)/src/nat/libgnunetnatnew.la \
   $(top_builddir)/src/nt/libgnunetnt.la \
index fa8eb6acb913e602e45cf58158795abfccc29ff6..f101d2d75e2ba40b064942810a6537ca65ec8196 100644 (file)
@@ -35,7 +35,7 @@
  *    where is the API for that!?!)
  * - support DNS names in BINDTO option (#5528)
  * - support NAT connection reversal method (#5529)
- * - support other UDP-specific NAT traversal methods (#) 
+ * - support other UDP-specific NAT traversal methods (#)
  */
 #include "platform.h"
 #include "gnunet_util_lib.h"
 #include "gnunet_nt_lib.h"
 #include "gnunet_nat_service.h"
 #include "gnunet_statistics_service.h"
+#include "gnunet_transport_application_service.h"
 #include "gnunet_transport_communication_service.h"
 
 /**
  * How often do we rekey based on time (at least)
- */ 
+ */
 #define REKEY_TIME_INTERVAL GNUNET_TIME_UNIT_DAYS
 
 /**
  * How long do we wait until we must have received the initial KX?
- */ 
+ */
 #define PROTO_QUEUE_TIMEOUT GNUNET_TIME_UNIT_MINUTES
 
 /**
  * How often do we broadcast our presence on the LAN?
- */ 
+ */
 #define BROADCAST_FREQUENCY GNUNET_TIME_UNIT_MINUTES
 
 /**
  * How often do we scan for changes to our network interfaces?
- */ 
+ */
 #define INTERFACE_SCAN_FREQUENCY GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MINUTES, 5)
 
 /**
@@ -88,7 +89,7 @@
  * #KCN_TARGET.
  * Should be large enough that we don't generate ACKs all
  * the time and still have enough time for the ACK to
- * arrive before the sender runs out. So really this 
+ * arrive before the sender runs out. So really this
  * should ideally be based on the RTT.
  */
 #define KCN_THRESHOLD 92
 #define MAX_SQN_DELTA 160
 
 /**
- * How many shared master secrets do we keep around 
- * at most per sender?  Should be large enough so 
+ * How many shared master secrets do we keep around
+ * at most per sender?  Should be large enough so
  * that we generally have a chance of sending an ACK
  * before the sender already rotated out the master
  * secret.  Generally values around #KCN_TARGET make
 /**
  * How often do we rekey based on number of bytes transmitted?
  * (additionally randomized).
- */ 
+ */
 #define REKEY_MAX_BYTES (1024LLU * 1024 * 1024 * 4LLU)
 
 /**
@@ -157,23 +158,23 @@ struct UdpHandshakeSignature
 
   /**
    * Identity of the inititor of the UDP connection (UDP client).
-   */ 
+   */
   struct GNUNET_PeerIdentity sender;
 
   /**
    * Presumed identity of the target of the UDP connection (UDP server)
-   */ 
+   */
   struct GNUNET_PeerIdentity receiver;
 
   /**
    * Ephemeral key used by the @e sender.
-   */ 
+   */
   struct GNUNET_CRYPTO_EcdhePublicKey ephemeral;
 
   /**
    * Monotonic time of @e sender, to possibly help detect replay attacks
    * (if receiver persists times by sender).
-   */ 
+   */
   struct GNUNET_TIME_AbsoluteNBO monotonic_time;
 };
 
@@ -187,13 +188,13 @@ struct InitialKX
 
   /**
    * Ephemeral key for KX.
-   */ 
+   */
   struct GNUNET_CRYPTO_EcdhePublicKey ephemeral;
 
   /**
    * HMAC for the following encrypted message, using GCM.  HMAC uses
    * key derived from the handshake with sequence number zero.
-   */ 
+   */
   char gcm_tag[GCM_TAG_SIZE];
 
 };
@@ -218,7 +219,7 @@ struct UDPConfirmation
   /**
    * Monotonic time of @e sender, to possibly help detect replay attacks
    * (if receiver persists times by sender).
-   */ 
+   */
   struct GNUNET_TIME_AbsoluteNBO monotonic_time;
 
   /* followed by messages */
@@ -230,24 +231,24 @@ struct UDPConfirmation
 /**
  * UDP key acknowledgement.  May be sent via backchannel. Allows the
  * sender to use `struct UDPBox` with the acknowledge key henceforth.
- */ 
+ */
 struct UDPAck
 {
 
   /**
    * Type is #GNUNET_MESSAGE_TYPE_COMMUNICATOR_UDP_ACK.
-   */ 
+   */
   struct GNUNET_MessageHeader header;
 
   /**
    * Sequence acknowledgement limit. Specifies current maximum sequence
    * number supported by receiver.
-   */ 
+   */
   uint32_t sequence_max GNUNET_PACKED;
-  
+
   /**
    * CMAC of the base key being acknowledged.
-   */ 
+   */
   struct GNUNET_HashCode cmac;
 
 };
@@ -257,7 +258,7 @@ struct UDPAck
  * Signature we use to verify that the broadcast was really made by
  * the peer that claims to have made it.  Basically, affirms that the
  * peer is really using this IP address (albeit possibly not in _our_
- * LAN).  Makes it difficult for peers in the LAN to claim to 
+ * LAN).  Makes it difficult for peers in the LAN to claim to
  * be just any global peer -- an attacker must have at least
  * shared a LAN with the peer they're pretending to be here.
  */
@@ -270,12 +271,12 @@ struct UdpBroadcastSignature
 
   /**
    * Identity of the inititor of the UDP broadcast.
-   */ 
+   */
   struct GNUNET_PeerIdentity sender;
 
   /**
    * Hash of the sender's UDP address.
-   */ 
+   */
   struct GNUNET_HashCode h_address;
 };
 
@@ -298,22 +299,22 @@ struct UDPBroadcast
    * Sender's signature of type
    * #GNUNET_SIGNATURE_COMMUNICATOR_UDP_BROADCAST
    */
-  struct GNUNET_CRYPTO_EddsaSignature sender_sig;  
-  
+  struct GNUNET_CRYPTO_EddsaSignature sender_sig;
+
 };
 
 
 /**
  * UDP message box.  Always sent encrypted, only allowed after
  * the receiver sent a `struct UDPAck` for the base key!
- */ 
+ */
 struct UDPBox
 {
 
   /**
    * Key and IV identification code. KDF applied to an acknowledged
    * base key and a sequence number.  Sequence numbers must be used
-   * monotonically increasing up to the maximum specified in 
+   * monotonically increasing up to the maximum specified in
    * `struct UDPAck`. Without further `struct UDPAck`s, the sender
    * must fall back to sending handshakes!
    */
@@ -325,9 +326,9 @@ struct UDPBox
    * extends until the end of the UDP payload.  If the @e hmac is
    * wrong, the receiver should check if the message might be a
    * `struct UdpHandshakeSignature`.
-   */ 
+   */
   char gcm_tag[GCM_TAG_SIZE];
-  
+
 };
 
 
@@ -350,7 +351,7 @@ struct KeyCacheEntry
    * Kept in a DLL.
    */
   struct KeyCacheEntry *next;
-  
+
   /**
    * Kept in a DLL.
    */
@@ -359,7 +360,7 @@ struct KeyCacheEntry
   /**
    * Key and IV identification code. KDF applied to an acknowledged
    * base key and a sequence number.  Sequence numbers must be used
-   * monotonically increasing up to the maximum specified in 
+   * monotonically increasing up to the maximum specified in
    * `struct UDPAck`. Without further `struct UDPAck`s, the sender
    * must fall back to sending handshakes!
    */
@@ -372,7 +373,7 @@ struct KeyCacheEntry
 
   /**
    * Sequence number used to derive this entry from master key.
-   */ 
+   */
   uint32_t sequence_number;
 };
 
@@ -408,7 +409,7 @@ struct SharedSecret
    * Kept in a DLL, sorted by sequence number. Only if we are decrypting.
    */
   struct KeyCacheEntry *kce_head;
-  
+
   /**
    * Kept in a DLL, sorted by sequence number. Only if we are decrypting.
    */
@@ -423,21 +424,21 @@ struct SharedSecret
    * Receiver we use this shared secret with, or NULL.
    */
   struct ReceiverAddress *receiver;
-  
+
   /**
    * Master shared secret.
-   */ 
+   */
   struct GNUNET_HashCode master;
 
   /**
    * CMAC is used to identify @e master in ACKs.
-   */ 
+   */
   struct GNUNET_HashCode cmac;
 
   /**
    * Up to which sequence number did we use this @e master already?
    * (for encrypting only)
-   */ 
+   */
   uint32_t sequence_used;
 
   /**
@@ -449,7 +450,7 @@ struct SharedSecret
 
   /**
    * Number of active KCN entries.
-   */ 
+   */
   unsigned int active_kce_count;
 };
 
@@ -464,11 +465,11 @@ struct SenderAddress
   /**
    * To whom are we talking to.
    */
-  struct GNUNET_PeerIdentity target;  
+  struct GNUNET_PeerIdentity target;
 
   /**
    * Entry in sender expiration heap.
-   */ 
+   */
   struct GNUNET_CONTAINER_HeapNode *hn;
 
   /**
@@ -480,12 +481,12 @@ struct SenderAddress
    * Shared secrets we used with @e target, last used is tail.
    */
   struct SharedSecret *ss_tail;
-  
+
   /**
    * Address of the other peer.
    */
   struct sockaddr *address;
-  
+
   /**
    * Length of the address.
    */
@@ -498,14 +499,14 @@ struct SenderAddress
 
   /**
    * Length of the DLL at @a ss_head.
-   */ 
+   */
   unsigned int num_secrets;
-  
+
   /**
    * Which network type does this queue use?
    */
   enum GNUNET_NetworkType nt;
-  
+
 };
 
 
@@ -519,8 +520,8 @@ struct ReceiverAddress
   /**
    * To whom are we talking to.
    */
-  struct GNUNET_PeerIdentity target;  
-  
+  struct GNUNET_PeerIdentity target;
+
   /**
    * Shared secrets we received from @e target, first used is head.
    */
@@ -534,14 +535,14 @@ struct ReceiverAddress
   /**
    * Address of the receiver in the human-readable format
    * with the #COMMUNICATOR_ADDRESS_PREFIX.
-   */ 
+   */
   char *foreign_addr;
 
   /**
    * Address of the other peer.
    */
   struct sockaddr *address;
-  
+
   /**
    * Length of the address.
    */
@@ -549,7 +550,7 @@ struct ReceiverAddress
 
   /**
    * Entry in sender expiration heap.
-   */ 
+   */
   struct GNUNET_CONTAINER_HeapNode *hn;
 
   /**
@@ -571,23 +572,23 @@ struct ReceiverAddress
    * MTU we allowed transport for this receiver right now.
    */
   size_t mtu;
-  
+
   /**
    * Length of the DLL at @a ss_head.
-   */ 
+   */
   unsigned int num_secrets;
 
   /**
-   * Number of BOX keys from ACKs we have currently 
+   * Number of BOX keys from ACKs we have currently
    * available for this receiver.
-   */ 
+   */
   unsigned int acks_available;
-  
+
   /**
    * Which network type does this queue use?
    */
   enum GNUNET_NetworkType nt;
-  
+
 };
 
 
@@ -611,12 +612,12 @@ struct BroadcastInterface
    * Task for this broadcast interface.
    */
   struct GNUNET_SCHEDULER_Task *broadcast_task;
-  
+
   /**
    * Sender's address of the interface.
    */
   struct sockaddr *sa;
-  
+
   /**
    * Broadcast address to use on the interface.
    */
@@ -624,18 +625,18 @@ struct BroadcastInterface
 
   /**
    * Message we broadcast on this interface.
-   */ 
+   */
   struct UDPBroadcast bcm;
-  
+
   /**
    * If this is an IPv6 interface, this is the request
    * we use to join/leave the group.
    */
   struct ipv6_mreq mcreq;
-  
+
   /**
    * Number of bytes in @e sa.
-   */ 
+   */
   socklen_t salen;
 
   /**
@@ -710,9 +711,9 @@ static struct BroadcastInterface *bi_tail;
  */
 static struct GNUNET_NETWORK_Handle *udp_sock;
 
-/** 
+/**
  * #GNUNET_YES if #udp_sock supports IPv6.
- */ 
+ */
 static int have_v6_socket;
 
 /**
@@ -730,6 +731,11 @@ static struct GNUNET_CRYPTO_EddsaPrivateKey *my_private_key;
  */
 static const struct GNUNET_CONFIGURATION_Handle *cfg;
 
+/**
+ * Our handle to report addresses for validation to TRANSPORT.
+ */
+static struct GNUNET_TRANSPORT_ApplicationHandle *ah;
+
 /**
  * Network scanner to determine network types.
  */
@@ -742,7 +748,7 @@ static struct GNUNET_NAT_Handle *nat;
 
 /**
  * Port number to which we are actually bound.
- */ 
+ */
 static uint16_t my_port;
 
 
@@ -788,7 +794,7 @@ static void
 receiver_destroy (struct ReceiverAddress *receiver)
 {
   struct GNUNET_MQ_Handle *mq;
-  
+
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
              "Disconnecting receiver for peer `%s'\n",
              GNUNET_i2s (&receiver->target));
@@ -822,7 +828,7 @@ receiver_destroy (struct ReceiverAddress *receiver)
  * Free memory used by key cache entry.
  *
  * @param kce the key cache entry
- */ 
+ */
 static void
 kce_destroy (struct KeyCacheEntry *kce)
 {
@@ -1048,7 +1054,7 @@ check_timeouts (void *cls)
   struct GNUNET_TIME_Relative delay;
   struct ReceiverAddress *receiver;
   struct SenderAddress *sender;
-  
+
   (void) cls;
   timeout_task = NULL;
   rt = GNUNET_TIME_UNIT_FOREVER_REL;
@@ -1072,9 +1078,9 @@ check_timeouts (void *cls)
   if (delay.rel_value_us < GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us)
     timeout_task = GNUNET_SCHEDULER_add_delayed (delay,
                                                 &check_timeouts,
-                                                NULL);  
+                                                NULL);
 }
-                         
+
 
 /**
  * Calcualte cmac from master in @a ss.
@@ -1100,12 +1106,12 @@ calculate_cmac (struct SharedSecret *ss)
 
 /**
  * We received @a plaintext_len bytes of @a plaintext from a @a sender.
- * Pass it on to CORE.  
+ * Pass it on to CORE.
  *
  * @param queue the queue that received the plaintext
  * @param plaintext the plaintext that was received
  * @param plaintext_len number of bytes of plaintext received
- */ 
+ */
 static void
 pass_plaintext_to_core (struct SenderAddress *sender,
                        const void *plaintext,
@@ -1171,7 +1177,7 @@ setup_cipher (const struct GNUNET_HashCode *msec,
 
 
 /**
- * Try to decrypt @a buf using shared secret @a ss and key/iv 
+ * Try to decrypt @a buf using shared secret @a ss and key/iv
  * derived using @a serial.
  *
  * @param ss shared secret
@@ -1274,7 +1280,7 @@ setup_shared_secret_enc (const struct GNUNET_CRYPTO_EcdhePrivateKey *ephemeral,
  * recalculated and a fresh queue is initialized.
  *
  * @param receiver receiver to setup MQ for
- */ 
+ */
 static void
 setup_receiver_mq (struct ReceiverAddress *receiver);
 
@@ -1307,9 +1313,9 @@ handle_ack (void *cls,
                     sizeof (struct GNUNET_HashCode)))
     {
       uint32_t allowed;
-      
+
       allowed = ntohl (ack->sequence_max);
-                           
+
       if (allowed > ss->sequence_allowed)
       {
        receiver->acks_available += (allowed - ss->sequence_allowed);
@@ -1342,7 +1348,7 @@ handle_ack (void *cls,
  * @param sender peer to process inbound plaintext for
  * @param buf buffer we received
  * @param buf_size number of bytes in @a buf
- */ 
+ */
 static void
 try_handle_plaintext (struct SenderAddress *sender,
                      const void *buf,
@@ -1413,9 +1419,9 @@ consider_ss_ack (struct SharedSecret *ss)
     ack.sequence_max = htonl (ss->sequence_allowed);
     ack.cmac = ss->cmac;
     GNUNET_TRANSPORT_communicator_notify (ch,
-                                         &ss->sender->target,
-                                         COMMUNICATOR_ADDRESS_PREFIX,
-                                         &ack.header);
+                                          &ss->sender->target,
+                                          COMMUNICATOR_ADDRESS_PREFIX,
+                                          &ack.header);
   }
 }
 
@@ -1426,7 +1432,7 @@ consider_ss_ack (struct SharedSecret *ss)
  * @param box the data we received
  * @param box_len number of bytes in @a box
  * @param kce key index to decrypt @a box
- */ 
+ */
 static void
 decrypt_box (const struct UDPBox *box,
             size_t box_len,
@@ -1519,7 +1525,7 @@ find_sender_by_address (void *cls,
  * if one does not yet exist for @a address.
  *
  * @param target peer to generate address for
- * @param address target address 
+ * @param address target address
  * @param address_len number of bytes in @a address
  * @return data structure to keep track of key material for
  *         decrypting data from @a target
@@ -1582,10 +1588,10 @@ setup_sender (const struct GNUNET_PeerIdentity *target,
  */
 static int
 verify_confirmation (const struct GNUNET_CRYPTO_EcdhePublicKey *ephemeral,
-                    const struct UDPConfirmation *uc)
+                     const struct UDPConfirmation *uc)
 {
   struct UdpHandshakeSignature uhs;
-                       
+
   uhs.purpose.purpose = htonl (GNUNET_SIGNATURE_COMMUNICATOR_UDP_HANDSHAKE);
   uhs.purpose.size = htonl (sizeof (uhs));
   uhs.sender = uc->sender;
@@ -1593,14 +1599,51 @@ verify_confirmation (const struct GNUNET_CRYPTO_EcdhePublicKey *ephemeral,
   uhs.ephemeral = *ephemeral;
   uhs.monotonic_time = uc->monotonic_time;
   return GNUNET_CRYPTO_eddsa_verify (GNUNET_SIGNATURE_COMMUNICATOR_UDP_HANDSHAKE,
-                                    &uhs.purpose,
-                                    &uc->sender_sig,
-                                    &uc->sender.public_key);
+                                     &uhs.purpose,
+                                     &uc->sender_sig,
+                                     &uc->sender.public_key);
+}
+
+
+/**
+ * Converts @a address to the address string format used by this
+ * communicator in HELLOs.
+ *
+ * @param address the address to convert, must be AF_INET or AF_INET6.
+ * @param address_len number of bytes in @a address
+ * @return string representation of @a address
+ */
+static char *
+sockaddr_to_udpaddr_string (const struct sockaddr *address,
+                            socklen_t address_len)
+{
+  char *ret;
+
+  switch (address->sa_family)
+  {
+  case AF_INET:
+    GNUNET_asprintf (&ret,
+                     "%s-%s",
+                     COMMUNICATOR_ADDRESS_PREFIX,
+                     GNUNET_a2s (address,
+                                 address_len));
+    break;
+  case AF_INET6:
+    GNUNET_asprintf (&ret,
+                     "%s-%s",
+                     COMMUNICATOR_ADDRESS_PREFIX,
+                     GNUNET_a2s (address,
+                                 address_len));
+    break;
+  default:
+    GNUNET_assert (0);
+  }
+  return ret;
 }
 
 
 /**
- * Socket read task. 
+ * Socket read task.
  *
  * @param cls NULL
  */
@@ -1615,18 +1658,18 @@ sock_read (void *cls)
   (void) cls;
   read_task
       = GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL,
-                                      udp_sock,
-                                      &sock_read,
-                                      NULL);
+                                       udp_sock,
+                                       &sock_read,
+                                       NULL);
   rcvd = GNUNET_NETWORK_socket_recvfrom (udp_sock,
-                                        buf,
-                                        sizeof (buf),
-                                        (struct sockaddr *) &sa,
-                                        &salen);
+                                         buf,
+                                         sizeof (buf),
+                                         (struct sockaddr *) &sa,
+                                         &salen);
   if (-1 == rcvd)
   {
     GNUNET_log_strerror (GNUNET_ERROR_TYPE_DEBUG,
-                        "recv");
+                         "recv");
     return;
   }
 
@@ -1638,12 +1681,12 @@ sock_read (void *cls)
 
     box = (const struct UDPBox *) buf;
     kce = GNUNET_CONTAINER_multishortmap_get (key_cache,
-                                             &box->kid);
+                                              &box->kid);
     if (NULL != kce)
     {
       decrypt_box (box,
-                  (size_t) rcvd,
-                  kce);
+                   (size_t) rcvd,
+                   kce);
       return;
     }
   }
@@ -1659,25 +1702,41 @@ sock_read (void *cls)
     uhs.purpose.size = htonl (sizeof (uhs));
     uhs.sender = ub->sender;
     GNUNET_CRYPTO_hash (&sa,
-                       salen,
-                       &uhs.h_address);
+                        salen,
+                        &uhs.h_address);
     if (GNUNET_OK ==
-       GNUNET_CRYPTO_eddsa_verify (GNUNET_SIGNATURE_COMMUNICATOR_UDP_BROADCAST,
-                                   &uhs.purpose,
-                                   &ub->sender_sig,
-                                   &ub->sender.public_key))
+        GNUNET_CRYPTO_eddsa_verify (GNUNET_SIGNATURE_COMMUNICATOR_UDP_BROADCAST,
+                                    &uhs.purpose,
+                                    &ub->sender_sig,
+                                    &ub->sender.public_key))
     {
+      char *addr_s;
+      struct GNUNET_TIME_Absolute expiration;
+      enum GNUNET_NetworkType nt;
+
+      addr_s = sockaddr_to_udpaddr_string ((const struct sockaddr *) &sa,
+                                           salen);
       GNUNET_STATISTICS_update (stats,
-                               "# broadcasts received",
-                               1,
-                               GNUNET_NO);
-      // FIXME #5551: we effectively just got a HELLO!
-      // trigger verification NOW!
+                                "# broadcasts received",
+                                1,
+                                GNUNET_NO);
+      /* expire at the broadcast frequency, as then we'll get the next one anyway */
+      expiration = GNUNET_TIME_relative_to_absolute (BROADCAST_FREQUENCY);
+      /* use our own mechanism to determine network type */
+      nt = GNUNET_NT_scanner_get_type (is,
+                                       (const struct sockaddr *) &sa,
+                                       salen);
+      GNUNET_TRANSPORT_application_validate (ah,
+                                             &ub->sender,
+                                             expiration,
+                                             nt,
+                                             addr_s);
+      GNUNET_free (addr_s);
       return;
     }
     /* continue with KX, mostly for statistics... */
   }
-  
+
 
   /* finally, test if it is a KX */
   if (rcvd < sizeof (struct UDPConfirmation) + sizeof (struct InitialKX))
@@ -1769,7 +1828,7 @@ udp_address_to_sockaddr (const char *bindto,
   char dummy[2];
   char *colon;
   char *cp;
-  
+
   if (1 == SSCANF (bindto,
                   "%u%1s",
                   &port,
@@ -1791,7 +1850,7 @@ udp_address_to_sockaddr (const char *bindto,
                                                "DISABLE_V6")) )
     {
       struct sockaddr_in *i4;
-      
+
       i4 = GNUNET_malloc (sizeof (struct sockaddr_in));
       i4->sin_family = AF_INET;
       i4->sin_port = htons ((uint16_t) port);
@@ -1801,7 +1860,7 @@ udp_address_to_sockaddr (const char *bindto,
     else
     {
       struct sockaddr_in6 *i6;
-      
+
       i6 = GNUNET_malloc (sizeof (struct sockaddr_in6));
       i6->sin6_family = AF_INET6;
       i6->sin6_port = htons ((uint16_t) port);
@@ -1915,7 +1974,7 @@ do_pad (gcry_cipher_hd_t out_cipher,
       .size = htons (sizeof (pad)),
       .type = htons (GNUNET_MESSAGE_TYPE_COMMUNICATOR_UDP_PAD)
     };
-    
+
     memcpy (pad,
            &hdr,
            sizeof (hdr));
@@ -1953,7 +2012,7 @@ mq_send (struct GNUNET_MQ_Handle *mq,
     return;
   }
   reschedule_receiver_timeout (receiver);
-  
+
   if (0 == receiver->acks_available)
   {
     /* use KX encryption method */
@@ -2159,12 +2218,12 @@ mq_error (void *cls,
  * recalculated and a fresh queue is initialized.
  *
  * @param receiver receiver to setup MQ for
- */ 
+ */
 static void
 setup_receiver_mq (struct ReceiverAddress *receiver)
 {
   size_t base_mtu;
-  
+
   if (NULL != receiver->qh)
   {
     GNUNET_TRANSPORT_communicator_mq_del (receiver->qh);
@@ -2226,58 +2285,40 @@ setup_receiver_mq (struct ReceiverAddress *receiver)
 
 /**
  * Setup a receiver for transmission.  Setup the MQ processing and
- * inform transport that the queue is ready. 
+ * inform transport that the queue is ready.
  *
- * @param 
- */ 
+ * @param
+ */
 static struct ReceiverAddress *
 receiver_setup (const struct GNUNET_PeerIdentity *target,
-               const struct sockaddr *address,
-               socklen_t address_len)
+                const struct sockaddr *address,
+                socklen_t address_len)
 {
   struct ReceiverAddress *receiver;
 
   receiver = GNUNET_new (struct ReceiverAddress);
   receiver->address = GNUNET_memdup (address,
-                                    address_len);
+                                     address_len);
   receiver->address_len = address_len;
   receiver->target = *target;
   receiver->nt = GNUNET_NT_scanner_get_type (is,
                                             address,
                                             address_len);
   (void) GNUNET_CONTAINER_multipeermap_put (receivers,
-                                           &receiver->target,
-                                           receiver,
-                                           GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
+                                            &receiver->target,
+                                            receiver,
+                                            GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
   receiver->timeout
     = GNUNET_TIME_relative_to_absolute (GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT);
   receiver->hn = GNUNET_CONTAINER_heap_insert (receivers_heap,
-                                              receiver,
-                                              receiver->timeout.abs_value_us);
+                                               receiver,
+                                               receiver->timeout.abs_value_us);
   GNUNET_STATISTICS_set (stats,
-                        "# receivers active",
-                        GNUNET_CONTAINER_multipeermap_size (receivers),
-                        GNUNET_NO);
-  switch (address->sa_family)
-  {
-  case AF_INET:
-    GNUNET_asprintf (&receiver->foreign_addr,
-                    "%s-%s",
-                    COMMUNICATOR_ADDRESS_PREFIX,
-                    GNUNET_a2s (receiver->address,
-                                receiver->address_len));
-    break;
-  case AF_INET6:
-    GNUNET_asprintf (&receiver->foreign_addr,
-                    "%s-%s",
-                    COMMUNICATOR_ADDRESS_PREFIX,
-                    GNUNET_a2s (receiver->address,
-                                receiver->address_len));
-    break;
-  default:
-    GNUNET_assert (0);
-  }
-
+                         "# receivers active",
+                         GNUNET_CONTAINER_multipeermap_size (receivers),
+                         GNUNET_NO);
+  receiver->foreign_addr = sockaddr_to_udpaddr_string (receiver->address,
+                                                       receiver->address_len);
   setup_receiver_mq (receiver);
 
   if (NULL == timeout_task)
@@ -2313,7 +2354,7 @@ mq_init (void *cls,
   const char *path;
   struct sockaddr *in;
   socklen_t in_len;
-  
+
   if (0 != strncmp (address,
                    COMMUNICATOR_ADDRESS_PREFIX "-",
                    strlen (COMMUNICATOR_ADDRESS_PREFIX "-")))
@@ -2323,12 +2364,12 @@ mq_init (void *cls,
   }
   path = &address[strlen (COMMUNICATOR_ADDRESS_PREFIX "-")];
   in = udp_address_to_sockaddr (path,
-                               &in_len);  
+                               &in_len);
   receiver = receiver_setup (peer,
                             in,
                             in_len);
   (void) receiver;
-  return GNUNET_OK;  
+  return GNUNET_OK;
 }
 
 
@@ -2423,6 +2464,11 @@ do_shutdown (void *cls)
     GNUNET_TRANSPORT_communicator_disconnect (ch);
     ch = NULL;
   }
+  if (NULL != ah)
+  {
+    GNUNET_TRANSPORT_application_done (ah);
+    ah = NULL;
+  }
   if (NULL != stats)
   {
     GNUNET_STATISTICS_destroy (stats,
@@ -2457,7 +2503,7 @@ enc_notify_cb (void *cls,
                const struct GNUNET_MessageHeader *msg)
 {
   const struct UDPAck *ack;
-  
+
   (void) cls;
   if ( (ntohs (msg->type) != GNUNET_MESSAGE_TYPE_COMMUNICATOR_UDP_ACK) ||
        (ntohs (msg->size) != sizeof (struct UDPAck)) )
@@ -2480,7 +2526,7 @@ enc_notify_cb (void *cls,
  * @param cls closure
  * @param app_ctx[in,out] location where the app can store stuff
  *                  on add and retrieve it on remove
- * @param add_remove #GNUNET_YES to add a new public IP address, 
+ * @param add_remove #GNUNET_YES to add a new public IP address,
  *                   #GNUNET_NO to remove a previous (now invalid) one
  * @param ac address class the address belongs to
  * @param addr either the previous or the new public IP address
@@ -2502,13 +2548,13 @@ nat_address_cb (void *cls,
     enum GNUNET_NetworkType nt;
 
     GNUNET_asprintf (&my_addr,
-                    "%s-%s",
-                    COMMUNICATOR_ADDRESS_PREFIX,
-                    GNUNET_a2s (addr,
-                                addrlen));
+                     "%s-%s",
+                     COMMUNICATOR_ADDRESS_PREFIX,
+                     GNUNET_a2s (addr,
+                                 addrlen));
     nt = GNUNET_NT_scanner_get_type (is,
-                                    addr,
-                                    addrlen); 
+                                     addr,
+                                     addrlen);
     ai = GNUNET_TRANSPORT_communicator_address_add (ch,
                                                    my_addr,
                                                    nt,
@@ -2543,14 +2589,14 @@ ifc_broadcast (void *cls)
     = GNUNET_SCHEDULER_add_delayed (INTERFACE_SCAN_FREQUENCY,
                                    &ifc_broadcast,
                                    bi);
-  
+
   switch (bi->sa->sa_family) {
   case AF_INET:
     {
       static int yes = 1;
       static int no = 0;
       ssize_t sent;
-    
+
       if (GNUNET_OK !=
          GNUNET_NETWORK_socket_setsockopt (udp_sock,
                                            SOL_SOCKET,
@@ -2660,7 +2706,7 @@ iface_proc (void *cls,
   if ( (AF_INET6 == addr->sa_family) &&
        (GNUNET_YES != have_v6_socket) )
     return GNUNET_OK; /* not using IPv6 */
-  
+
   bi = GNUNET_new (struct BroadcastInterface);
   bi->sa = GNUNET_memdup (addr,
                          addrlen);
@@ -2696,7 +2742,7 @@ iface_proc (void *cls,
                    inet_pton (AF_INET6,
                              "FF05::13B",
                               &bi->mcreq.ipv6mr_multiaddr));
-    
+
     /* http://tools.ietf.org/html/rfc2553#section-5.2:
      *
      * IPV6_JOIN_GROUP
@@ -2736,7 +2782,7 @@ static void
 do_broadcast (void *cls)
 {
   struct BroadcastInterface *bin;
-  
+
   (void) cls;
   for (struct BroadcastInterface *bi = bi_head;
        NULL != bi;
@@ -2778,7 +2824,7 @@ run (void *cls,
   socklen_t in_len;
   struct sockaddr_storage in_sto;
   socklen_t sto_len;
-  
+
   (void) cls;
   cfg = c;
   if (GNUNET_OK !=
@@ -2794,7 +2840,7 @@ run (void *cls,
   }
 
   in = udp_address_to_sockaddr (bindto,
-                               &in_len);
+                                &in_len);
   if (NULL == in)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -2804,8 +2850,8 @@ run (void *cls,
     return;
   }
   udp_sock = GNUNET_NETWORK_socket_create (in->sa_family,
-                                          SOCK_DGRAM,
-                                          IPPROTO_UDP);
+                                           SOCK_DGRAM,
+                                           IPPROTO_UDP);
   if (NULL == udp_sock)
   {
     GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR,
@@ -2819,7 +2865,7 @@ run (void *cls,
   if (GNUNET_OK !=
       GNUNET_NETWORK_socket_bind (udp_sock,
                                   in,
-                                 in_len))
+                                  in_len))
   {
     GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR,
                              "bind",
@@ -2834,12 +2880,12 @@ run (void *cls,
      thus, get the real IN-address from the socket */
   sto_len = sizeof (in_sto);
   if (0 != getsockname (GNUNET_NETWORK_get_fd (udp_sock),
-                       (struct sockaddr *) &in_sto,
-                       &sto_len))
+                        (struct sockaddr *) &in_sto,
+                        &sto_len))
   {
     memcpy (&in_sto,
-           in,
-           in_len);
+            in,
+            in_len);
     sto_len = in_len;
   }
   GNUNET_free (in);
@@ -2847,9 +2893,9 @@ run (void *cls,
   in = (struct sockaddr *) &in_sto;
   in_len = sto_len;
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "Bound to `%s'\n",
-             GNUNET_a2s ((const struct sockaddr *) &in_sto,
-                         sto_len));
+              "Bound to `%s'\n",
+              GNUNET_a2s ((const struct sockaddr *) &in_sto,
+                          sto_len));
   switch (in->sa_family)
   {
   case AF_INET:
@@ -2863,17 +2909,17 @@ run (void *cls,
     my_port = 0;
   }
   stats = GNUNET_STATISTICS_create ("C-UDP",
-                                   cfg);
+                                    cfg);
   senders = GNUNET_CONTAINER_multipeermap_create (32,
-                                                 GNUNET_YES);
+                                                  GNUNET_YES);
   receivers = GNUNET_CONTAINER_multipeermap_create (32,
-                                                   GNUNET_YES);
+                                                    GNUNET_YES);
   senders_heap = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN);
   receivers_heap = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN);
   key_cache = GNUNET_CONTAINER_multishortmap_create (1024,
-                                                    GNUNET_YES);
+                                                     GNUNET_YES);
   GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
-                                NULL);
+                                 NULL);
   is = GNUNET_NT_scanner_init ();
   my_private_key = GNUNET_CRYPTO_eddsa_key_create_from_configuration (cfg);
   if (NULL == my_private_key)
@@ -2887,15 +2933,15 @@ run (void *cls,
                                       &my_identity.public_key);
   /* start reading */
   read_task = GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL,
-                                            udp_sock,
-                                            &sock_read,
-                                            NULL);
+                                             udp_sock,
+                                             &sock_read,
+                                             NULL);
   ch = GNUNET_TRANSPORT_communicator_connect (cfg,
-                                             COMMUNICATOR_CONFIG_SECTION,
-                                             COMMUNICATOR_ADDRESS_PREFIX,
+                                              COMMUNICATOR_CONFIG_SECTION,
+                                              COMMUNICATOR_ADDRESS_PREFIX,
                                               GNUNET_TRANSPORT_CC_UNRELIABLE,
-                                             &mq_init,
-                                             NULL,
+                                              &mq_init,
+                                              NULL,
                                               &enc_notify_cb,
                                               NULL);
   if (NULL == ch)
@@ -2904,24 +2950,31 @@ run (void *cls,
     GNUNET_SCHEDULER_shutdown ();
     return;
   }
+  ah = GNUNET_TRANSPORT_application_init (cfg);
+  if (NULL == ah)
+  {
+    GNUNET_break (0);
+    GNUNET_SCHEDULER_shutdown ();
+    return;
+  }
   /* start broadcasting */
   if (GNUNET_YES !=
       GNUNET_CONFIGURATION_get_value_yesno (cfg,
-                                           COMMUNICATOR_CONFIG_SECTION,
-                                           "DISABLE_BROADCAST"))
+                                            COMMUNICATOR_CONFIG_SECTION,
+                                            "DISABLE_BROADCAST"))
   {
     broadcast_task = GNUNET_SCHEDULER_add_now (&do_broadcast,
-                                              NULL);
-  }  
+                                               NULL);
+  }
   nat = GNUNET_NAT_register (cfg,
-                            COMMUNICATOR_CONFIG_SECTION,
-                            IPPROTO_UDP,
-                            1 /* one address */,
-                            (const struct sockaddr **) &in,
-                            &in_len,
-                            &nat_address_cb,
-                            NULL /* FIXME: support reversal: #5529 */,
-                            NULL /* closure */);
+                             COMMUNICATOR_CONFIG_SECTION,
+                             IPPROTO_UDP,
+                             1 /* one address */,
+                             (const struct sockaddr **) &in,
+                             &in_len,
+                             &nat_address_cb,
+                             NULL /* FIXME: support reversal: #5529 */,
+                             NULL /* closure */);
 }
 
 
index 6494a5dfd491af270b0b57dea60f5bb0c240d6fe..4d4ac509a4fd93d8a973c3ee33336c5fd82c6f27 100644 (file)
  * Implement next:
  * - address validation: what is our plan here?
  *   #1 Peerstore only gets 'validated' addresses
- *   #2 transport needs another API to "trigger" validation!
- *      API may be used by core/application or communicators;
- *      => use yet another lib/MQ/connection?
- *   #3 transport should use validation to also establish
+ *   #2 transport should use validation to also establish
  *      effective flow control (for uni-directional transports!)
- *   #4 UDP broadcasting logic must be extended to use the new API
- *   #5 only validated addresses are selected for scheduling; that
+ *   #3 only validated addresses are selected for scheduling; that
  *      also ensures we know the RTT
- *   #6 to ensure flow control and RTT are OK, we always do the
+ *   #4 to ensure flow control and RTT are OK, we always do the
  *      'validation', even if address comes from PEERSTORE
- *   #7
  * - ACK handling / retransmission
- * - address verification
  * - track RTT, distance, loss, etc.
  * - DV data structures:
  *   + learning
  * - routing of messages (using DV data structures!)
  * - handling of DV-boxed messages that need to be forwarded
  * - backchannel message encryption & decryption
- * -
- *
- * Easy:
- * - figure out how to call XXX_suggestion_cb!
  *
  * Later:
  * - change transport-core API to provide proper flow control in both
@@ -1680,8 +1670,6 @@ notify_monitors (const struct GNUNET_PeerIdentity *peer,
                  enum GNUNET_NetworkType nt,
                  const struct MonitorEvent *me)
 {
-  static struct GNUNET_PeerIdentity zero;
-
   for (struct TransportClient *tc = clients_head;
        NULL != tc;
        tc = tc->next)
@@ -1690,12 +1678,9 @@ notify_monitors (const struct GNUNET_PeerIdentity *peer,
       continue;
     if (tc->details.monitor.one_shot)
       continue;
-    if ( (0 != memcmp (&tc->details.monitor.peer,
-                       &zero,
-                       sizeof (zero))) &&
-         (0 != memcmp (&tc->details.monitor.peer,
-                       peer,
-                       sizeof (*peer))) )
+    if ( (0 != GNUNET_is_zero (&tc->details.monitor.peer)) &&
+         (0 != GNUNET_memcmp (&tc->details.monitor.peer,
+                              peer)) )
       continue;
     notify_monitor (tc,
                     peer,
@@ -2220,9 +2205,8 @@ handle_client_start (void *cls,
   options = ntohl (start->options);
   if ( (0 != (1 & options)) &&
        (0 !=
-        memcmp (&start->self,
-                &GST_my_identity,
-                sizeof (struct GNUNET_PeerIdentity)) ) )
+        GNUNET_memcmp (&start->self,
+                       &GST_my_identity)) )
   {
     /* client thinks this is a different peer, reject */
     GNUNET_break (0);
@@ -2612,8 +2596,8 @@ expire_ephemerals (void *cls)
       continue;
     }
     ephemeral_task = GNUNET_SCHEDULER_add_at (ece->ephemeral_validity,
-                                             &expire_ephemerals,
-                                             NULL);
+                                              &expire_ephemerals,
+                                              NULL);
     return;
   }
 }
@@ -2640,7 +2624,7 @@ lookup_ephemeral (const struct GNUNET_PeerIdentity *pid,
   struct EphemeralConfirmation ec;
 
   ece = GNUNET_CONTAINER_multipeermap_get (ephemeral_map,
-                                          pid);
+                                           pid);
   if ( (NULL != ece) &&
        (0 == GNUNET_TIME_absolute_get_remaining (ece->ephemeral_validity).rel_value_us) )
   {
@@ -2652,27 +2636,27 @@ lookup_ephemeral (const struct GNUNET_PeerIdentity *pid,
     ece = GNUNET_new (struct EphemeralCacheEntry);
     ece->target = *pid;
     ece->ephemeral_validity = GNUNET_TIME_absolute_add (GNUNET_TIME_absolute_get_monotonic (GST_cfg),
-                                                       EPHEMERAL_VALIDITY);
+                                                        EPHEMERAL_VALIDITY);
     GNUNET_assert (GNUNET_OK ==
-                  GNUNET_CRYPTO_ecdhe_key_create2 (&ece->private_key));
+                   GNUNET_CRYPTO_ecdhe_key_create2 (&ece->private_key));
     GNUNET_CRYPTO_ecdhe_key_get_public (&ece->private_key,
-                                       &ece->ephemeral_key);
+                                        &ece->ephemeral_key);
     ec.purpose.purpose = htonl (GNUNET_SIGNATURE_PURPOSE_TRANSPORT_EPHEMERAL);
     ec.purpose.size = htonl (sizeof (ec));
     ec.target = *pid;
     ec.ephemeral_key = ece->ephemeral_key;
     GNUNET_assert (GNUNET_OK ==
-                  GNUNET_CRYPTO_eddsa_sign (GST_my_private_key,
-                                            &ec.purpose,
-                                            &ece->sender_sig));
+                   GNUNET_CRYPTO_eddsa_sign (GST_my_private_key,
+                                             &ec.purpose,
+                                             &ece->sender_sig));
     ece->hn = GNUNET_CONTAINER_heap_insert (ephemeral_heap,
                                            ece,
                                            ece->ephemeral_validity.abs_value_us);
     GNUNET_assert (GNUNET_OK ==
-                  GNUNET_CONTAINER_multipeermap_put (ephemeral_map,
-                                                     &ece->target,
-                                                     ece,
-                                                     GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
+                   GNUNET_CONTAINER_multipeermap_put (ephemeral_map,
+                                                      &ece->target,
+                                                      ece,
+                                                      GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
     if (NULL == ephemeral_task)
       ephemeral_task = GNUNET_SCHEDULER_add_at (ece->ephemeral_validity,
                                                &expire_ephemerals,
@@ -2726,34 +2710,34 @@ handle_communicator_backchannel (void *cls,
   enc->header.size = htons (sizeof (*enc) + msize);
   enc->target = cb->pid;
   lookup_ephemeral (&cb->pid,
-                   &private_key,
-                   &enc->ephemeral_key,
-                   &ppay.sender_sig,
-                   &ephemeral_validity);
+                    &private_key,
+                    &enc->ephemeral_key,
+                    &ppay.sender_sig,
+                    &ephemeral_validity);
   // FIXME: setup 'iv'
 #if FIXME
   dh_key_derive (&private_key,
-                &cb->pid,
-                &enc->iv,
-                &key);
+                 &cb->pid,
+                 &enc->iv,
+                 &key);
 #endif
   ppay.ephemeral_validity = GNUNET_TIME_absolute_hton (ephemeral_validity);
   ppay.monotonic_time = GNUNET_TIME_absolute_hton (GNUNET_TIME_absolute_get_monotonic (GST_cfg));
   mpos = (char *) &enc[1];
 #if FIXME
   encrypt (key,
-          &ppay,
-          &mpos,
-          sizeof (ppay));
+           &ppay,
+           &mpos,
+           sizeof (ppay));
   encrypt (key,
-          &cb[1],
-          &mpos,
-          ntohs (cb->header.size) - sizeof (*cb));
+           &cb[1],
+           &mpos,
+           ntohs (cb->header.size) - sizeof (*cb));
   hmac (key,
-       &enc->hmac);
+        &enc->hmac);
 #endif
   route_message (&cb->pid,
-                &enc->header);
+                 &enc->header);
   GNUNET_SERVICE_client_continue (tc->client);
 }
 
@@ -2802,14 +2786,14 @@ peerstore_store_cb (void *cls,
   ale->sc = NULL;
   if (GNUNET_YES != success)
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-               "Failed to store our own address `%s' in peerstore!\n",
-               ale->address);
+                "Failed to store our own address `%s' in peerstore!\n",
+                ale->address);
   /* refresh period is 1/4 of expiration time, that should be plenty
      without being excessive. */
   ale->st = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_divide (ale->expiration,
-                                                                      4ULL),
-                                         &store_pi,
-                                         ale);
+                                                                       4ULL),
+                                          &store_pi,
+                                          ale);
 }
 
 
@@ -2829,30 +2813,30 @@ store_pi (void *cls)
   ale->st = NULL;
   expiration = GNUNET_TIME_relative_to_absolute (ale->expiration);
   GNUNET_HELLO_sign_address (ale->address,
-                            ale->nt,
-                            expiration,
-                            GST_my_private_key,
-                            &addr,
-                            &addr_len);
+                             ale->nt,
+                             expiration,
+                             GST_my_private_key,
+                             &addr,
+                             &addr_len);
   ale->sc = GNUNET_PEERSTORE_store (peerstore,
-                                   "transport",
-                                   &GST_my_identity,
-                                   GNUNET_HELLO_PEERSTORE_KEY,
-                                   addr,
-                                   addr_len,
-                                   expiration,
-                                   GNUNET_PEERSTORE_STOREOPTION_MULTIPLE,
-                                   &peerstore_store_cb,
-                                   ale);
+                                    "transport",
+                                    &GST_my_identity,
+                                    GNUNET_HELLO_PEERSTORE_KEY,
+                                    addr,
+                                    addr_len,
+                                    expiration,
+                                    GNUNET_PEERSTORE_STOREOPTION_MULTIPLE,
+                                    &peerstore_store_cb,
+                                    ale);
   GNUNET_free (addr);
   if (NULL == ale->sc)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-               "Failed to store our address `%s' with peerstore\n",
-               ale->address);
+                "Failed to store our address `%s' with peerstore\n",
+                ale->address);
     ale->st = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
-                                           &store_pi,
-                                           ale);
+                                            &store_pi,
+                                            ale);
   }
 }
 
@@ -2885,7 +2869,7 @@ handle_add_address (void *cls,
                                tc->details.communicator.addr_tail,
                                ale);
   ale->st = GNUNET_SCHEDULER_add_now (&store_pi,
-                                     ale);
+                                      ale);
   GNUNET_SERVICE_client_continue (tc->client);
 }
 
@@ -2956,7 +2940,7 @@ struct CommunicatorMessageContext
  */
 static void
 demultiplex_with_cmc (struct CommunicatorMessageContext *cmc,
-                     const struct GNUNET_MessageHeader *msg);
+                      const struct GNUNET_MessageHeader *msg);
 
 
 /**
@@ -2974,12 +2958,12 @@ finish_cmc_handling (struct CommunicatorMessageContext *cmc)
     struct GNUNET_TRANSPORT_IncomingMessageAck *ack;
 
     env = GNUNET_MQ_msg (ack,
-                        GNUNET_MESSAGE_TYPE_TRANSPORT_INCOMING_MSG_ACK);
+                         GNUNET_MESSAGE_TYPE_TRANSPORT_INCOMING_MSG_ACK);
     ack->reserved = htonl (0);
     ack->fc_id = cmc->im.fc_id;
     ack->sender = cmc->im.sender;
     GNUNET_MQ_send (cmc->tc->mq,
-                   env);
+                    env);
   }
   GNUNET_SERVICE_client_continue (cmc->tc->client);
   GNUNET_free (cmc);
@@ -2995,7 +2979,7 @@ finish_cmc_handling (struct CommunicatorMessageContext *cmc)
  */
 static void
 handle_raw_message (void *cls,
-                   const struct GNUNET_MessageHeader *mh)
+                    const struct GNUNET_MessageHeader *mh)
 {
   struct CommunicatorMessageContext *cmc = cls;
   uint16_t size = ntohs (mh->size);
@@ -3021,14 +3005,14 @@ handle_raw_message (void *cls,
     if (CT_CORE != tc->type)
       continue;
     env = GNUNET_MQ_msg_extra (im,
-                              size,
-                              GNUNET_MESSAGE_TYPE_TRANSPORT_RECV);
+                               size,
+                               GNUNET_MESSAGE_TYPE_TRANSPORT_RECV);
     im->peer = cmc->im.sender;
     memcpy (&im[1],
-           mh,
-           size);
+            mh,
+            size);
     GNUNET_MQ_send (tc->mq,
-                   env);
+                    env);
   }
   /* FIXME: consider doing this _only_ once the message
      was drained from the CORE MQs to extend flow control to CORE!
@@ -3046,7 +3030,7 @@ handle_raw_message (void *cls,
  */
 static int
 check_fragment_box (void *cls,
-                   const struct TransportFragmentBox *fb)
+                    const struct TransportFragmentBox *fb)
 {
   uint16_t size = ntohs (fb->header.size);
   uint16_t bsize = size - sizeof (*fb);
@@ -3124,7 +3108,7 @@ handle_fragment_box (void *cls,
   int ack_now;
 
   n = GNUNET_CONTAINER_multipeermap_get (neighbours,
-                                        &cmc->im.sender);
+                                         &cmc->im.sender);
   if (NULL == n)
   {
     struct GNUNET_SERVICE_Client *client = cmc->tc->client;
@@ -3137,15 +3121,15 @@ handle_fragment_box (void *cls,
   if (NULL == n->reassembly_map)
   {
     n->reassembly_map = GNUNET_CONTAINER_multishortmap_create (8,
-                                                              GNUNET_YES);
+                                                               GNUNET_YES);
     n->reassembly_heap = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN);
     n->reassembly_timeout_task = GNUNET_SCHEDULER_add_delayed (REASSEMBLY_EXPIRATION,
-                                                              &reassembly_cleanup_task,
-                                                              n);
+                                                               &reassembly_cleanup_task,
+                                                               n);
   }
   msize = ntohs (fb->msg_size);
   rc = GNUNET_CONTAINER_multishortmap_get (n->reassembly_map,
-                                          &fb->msg_uuid);
+                                           &fb->msg_uuid);
   if (NULL == rc)
   {
     rc = GNUNET_malloc (sizeof (*rc) +
@@ -3157,13 +3141,13 @@ handle_fragment_box (void *cls,
     rc->reassembly_timeout = GNUNET_TIME_relative_to_absolute (REASSEMBLY_EXPIRATION);
     rc->last_frag = GNUNET_TIME_absolute_get ();
     rc->hn = GNUNET_CONTAINER_heap_insert (n->reassembly_heap,
-                                          rc,
-                                          rc->reassembly_timeout.abs_value_us);
+                                           rc,
+                                           rc->reassembly_timeout.abs_value_us);
     GNUNET_assert (GNUNET_OK ==
                   GNUNET_CONTAINER_multishortmap_put (n->reassembly_map,
-                                                      &rc->msg_uuid,
-                                                      rc,
-                                                      GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
+                                               &rc->msg_uuid,
+                                               rc,
+                                               GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
     target = (char *) &rc[1];
     rc->bitfield = (uint8_t *) (target + rc->msg_size);
     rc->msg_missing = rc->msg_size;
@@ -3183,8 +3167,8 @@ handle_fragment_box (void *cls,
   fsize = ntohs (fb->header.size) - sizeof (*fb);
   frag_off = ntohs (fb->frag_off);
   memcpy (&target[frag_off],
-         &fb[1],
-         fsize);
+          &fb[1],
+          fsize);
   /* update bitfield and msg_missing */
   for (unsigned int i=frag_off;i<frag_off+fsize;i++)
   {
@@ -3199,10 +3183,10 @@ handle_fragment_box (void *cls,
   frag_uuid = ntohl (fb->frag_uuid);
   cdelay = GNUNET_TIME_absolute_get_duration (rc->last_frag);
   cdelay = GNUNET_TIME_relative_multiply (cdelay,
-                                         rc->num_acks);
+                                          rc->num_acks);
   rc->last_frag = GNUNET_TIME_absolute_get ();
   rc->avg_ack_delay = GNUNET_TIME_relative_add (rc->avg_ack_delay,
-                                               cdelay);
+                                                cdelay);
   ack_now = GNUNET_NO;
   if (0 == rc->num_acks)
   {
@@ -3266,7 +3250,7 @@ handle_fragment_box (void *cls,
   /* successful reassembly */
   send_fragment_ack (rc);
   demultiplex_with_cmc (cmc,
-                       msg);
+                        msg);
   /* FIXME: really free here? Might be bad if fragments are still
      en-route and we forget that we finished this reassembly immediately!
      -> keep around until timeout?
@@ -3304,7 +3288,7 @@ handle_fragment_ack (void *cls,
  */
 static int
 check_reliability_box (void *cls,
-                      const struct TransportReliabilityBox *rb)
+                       const struct TransportReliabilityBox *rb)
 {
   GNUNET_MQ_check_boxed_message (rb);
   return GNUNET_YES;
@@ -3319,7 +3303,7 @@ check_reliability_box (void *cls,
  */
 static void
 handle_reliability_box (void *cls,
-                       const struct TransportReliabilityBox *rb)
+                        const struct TransportReliabilityBox *rb)
 {
   struct CommunicatorMessageContext *cmc = cls;
   const struct GNUNET_MessageHeader *inbox = (const struct GNUNET_MessageHeader *) &rb[1];
@@ -3331,10 +3315,10 @@ handle_reliability_box (void *cls,
     /* FIXME: implement cummulative ACKs and ack_countdown,
        then setting the avg_ack_delay field below: */
     ack = GNUNET_malloc (sizeof (*ack) +
-                        sizeof (struct GNUNET_ShortHashCode));
+                         sizeof (struct GNUNET_ShortHashCode));
     ack->header.type = htons (GNUNET_MESSAGE_TYPE_TRANSPORT_RELIABILITY_ACK);
     ack->header.size = htons (sizeof (*ack) +
-                             sizeof (struct GNUNET_ShortHashCode));
+                              sizeof (struct GNUNET_ShortHashCode));
     memcpy (&ack[1],
            &rb->msg_uuid,
            sizeof (struct GNUNET_ShortHashCode));
@@ -3399,13 +3383,12 @@ handle_backchannel_encapsulation (void *cls,
 {
   struct CommunicatorMessageContext *cmc = cls;
 
-  if (0 != memcmp (&be->target,
-                  &GST_my_identity,
-                  sizeof (struct GNUNET_PeerIdentity)))
+  if (0 != GNUNET_memcmp (&be->target,
+                          &GST_my_identity))
   {
     /* not for me, try to route to target */
     route_message (&be->target,
-                  GNUNET_copy_message (&be->header));
+                   GNUNET_copy_message (&be->header));
     finish_cmc_handling (cmc);
     return;
   }
@@ -3440,16 +3423,14 @@ check_dv_learn (void *cls,
   }
   for (unsigned int i=0;i<num_hops;i++)
   {
-    if (0 == memcmp (&dvl->initiator,
-                     &hops[i],
-                     sizeof (struct GNUNET_PeerIdentity)))
+    if (0 == GNUNET_memcmp (&dvl->initiator,
+                            &hops[i]))
     {
       GNUNET_break_op (0);
       return GNUNET_SYSERR;
     }
-    if (0 == memcmp (&GST_my_identity,
-                     &hops[i],
-                     sizeof (struct GNUNET_PeerIdentity)))
+    if (0 == GNUNET_memcmp (&GST_my_identity,
+                            &hops[i]))
     {
       GNUNET_break_op (0);
       return GNUNET_SYSERR;
@@ -4249,9 +4230,8 @@ handle_del_queue_message (void *cls,
     struct Neighbour *neighbour = queue->neighbour;
 
     if ( (dqm->qid != queue->qid) ||
-        (0 != memcmp (&dqm->receiver,
-                      &neighbour->pid,
-                      sizeof (struct GNUNET_PeerIdentity))) )
+         (0 != GNUNET_memcmp (&dqm->receiver,
+                              &neighbour->pid)) )
       continue;
     free_queue (queue);
     GNUNET_SERVICE_client_continue (tc->client);
@@ -4288,9 +4268,8 @@ handle_send_message_ack (void *cls,
        NULL != queue;
        queue = queue->next_client)
   {
-    if (0 != memcmp (&queue->neighbour->pid,
-                    &sma->receiver,
-                    sizeof (struct GNUNET_PeerIdentity)))
+    if (0 != GNUNET_memcmp (&queue->neighbour->pid,
+                            &sma->receiver))
       continue;
     for (struct QueueEntry *qep = queue->queue_head;
          NULL != qep;
@@ -4490,10 +4469,10 @@ suggest_to_connect (const struct GNUNET_PeerIdentity *pid,
   cqm->request_id = htonl (idgen++);
   cqm->receiver = *pid;
   memcpy (&cqm[1],
-         address,
-         alen);
+          address,
+          alen);
   GNUNET_MQ_send (tc->mq,
-                 env);
+                  env);
 }
 
 
@@ -4642,7 +4621,7 @@ handle_suggest (void *cls,
   pr->wc = GNUNET_PEERSTORE_watch (peerstore,
                                    "transport",
                                    &pr->pid,
-                                   "hello",
+                                   GNUNET_HELLO_PEERSTORE_KEY,
                                    &handle_hello,
                                    pr);
   GNUNET_SERVICE_client_continue (tc->client);
@@ -4737,6 +4716,38 @@ handle_address_consider_verify (void *cls,
 }
 
 
+/**
+ * Check #GNUNET_MESSAGE_TYPE_TRANSPORT_REQUEST_HELLO_VALIDATION
+ * messages.
+ *
+ * @param cls a `struct TransportClient *`
+ * @param m message to verify
+ * @return #GNUNET_OK on success
+ */
+static int
+check_request_hello_validation (void *cls,
+                                const struct RequestHelloValidationMessage *m)
+{
+  GNUNET_MQ_check_zero_termination (m);
+  return GNUNET_OK;
+}
+
+
+/**
+ * A client encountered an address of another peer. Consider validating it,
+ * and if validation succeeds, persist it to PEERSTORE.
+ *
+ * @param cls a `struct TransportClient *`
+ * @param m message to verify
+ */
+static void
+handle_request_hello_validation (void *cls,
+                                 const struct RequestHelloValidationMessage *m)
+{
+  // FIXME: implement validation!
+}
+
+
 /**
  * Free neighbour entry.
  *
@@ -4927,6 +4938,10 @@ GNUNET_SERVICE_MAIN
                           GNUNET_MESSAGE_TYPE_TRANSPORT_SUGGEST_CANCEL,
                           struct ExpressPreferenceMessage,
                           NULL),
+ GNUNET_MQ_hd_var_size (request_hello_validation,
+                        GNUNET_MESSAGE_TYPE_TRANSPORT_REQUEST_HELLO_VALIDATION,
+                        struct RequestHelloValidationMessage,
+                        NULL),
  /* communication with core */
  GNUNET_MQ_hd_fixed_size (client_start,
                           GNUNET_MESSAGE_TYPE_TRANSPORT_START,
index b231ea8ae326b4b15339d623e8336c5f92a8797b..fe10443837c89cfcd451c2ca4e9598c8ece1f710 100644 (file)
@@ -1139,6 +1139,37 @@ struct ExpressPreferenceMessage
 };
 
 
+/**
+ * We got an address of another peer, TRANSPORT service
+ * should validate it.  There is no response.
+ */
+struct RequestHelloValidationMessage
+{
+
+    /**
+   * Type is #GNUNET_MESSAGE_TYPE_TRANSPORT_REQUEST_HELLO_VALIDATION.
+   */
+  struct GNUNET_MessageHeader header;
+
+  /**
+   * What type of network does the other peer claim this is?
+   * A `enum GNUNET_NetworkType` in NBO.
+   */
+  uint32_t nt GNUNET_PACKED;
+
+  /**
+   * Peer to the address is presumably for.
+   */
+  struct GNUNET_PeerIdentity peer;
+
+  /**
+   * When does the address expire?
+   */
+  struct GNUNET_TIME_AbsoluteNBO expiration;
+
+  /* followed by 0-terminated address to validate */
+};
+
 #endif
 
 GNUNET_NETWORK_STRUCT_END
index 325438e11b0d55a6ce19541e8b84dbcf5f33a0cf..414a21fe44c677e4409a840888f0330f86fa1927 100644 (file)
@@ -363,4 +363,56 @@ GNUNET_TRANSPORT_application_suggest_cancel (struct GNUNET_TRANSPORT_Application
 }
 
 
+
+/**
+ * An application (or a communicator) has received a HELLO (or other address
+ * data of another peer) and wants TRANSPORT to validate that the address is
+ * correct.  The result is NOT returned, in fact TRANSPORT may do nothing
+ * (i.e. if it has too many active validations or recently tried this one
+ * already).  If the @a addr validates, TRANSPORT will persist the address
+ * with PEERSTORE.
+ *
+ * @param ch handle
+ * @param peer identity of the peer we have an address for
+ * @param expiration when does @a addr expire; used by TRANSPORT to know when
+ *        to definitively give up attempting to validate
+ * @param nt network type of @a addr (as claimed by the other peer);
+ *        used by TRANSPORT to avoid trying @a addr's that really cannot work
+ *        due to network type missmatches
+ * @param addr address to validate
+ */
+void
+GNUNET_TRANSPORT_application_validate (struct GNUNET_TRANSPORT_ApplicationHandle *ch,
+                                       const struct GNUNET_PeerIdentity *peer,
+                                       struct GNUNET_TIME_Absolute expiration,
+                                       enum GNUNET_NetworkType nt,
+                                       const char *addr)
+{
+  struct GNUNET_MQ_Envelope *ev;
+  struct RequestHelloValidationMessage *m;
+  size_t alen;
+
+  if (NULL == ch->mq)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                "Address validation for %s:%s skipped as transport is not connected\n",
+                GNUNET_i2s (peer),
+                addr);
+    return;
+  }
+  alen = strlen (addr) + 1;
+  ev = GNUNET_MQ_msg_extra (m,
+                            alen,
+                            GNUNET_MESSAGE_TYPE_TRANSPORT_REQUEST_HELLO_VALIDATION);
+  m->peer = *peer;
+  m->expiration = GNUNET_TIME_absolute_hton (expiration);
+  m->nt = htonl ((uint32_t) nt);
+  memcpy (&m[1],
+          addr,
+          alen);
+  GNUNET_MQ_send (ch->mq,
+                  ev);
+}
+
+
 /* end of transport_api2_application.c */
index 60f0b2e8bb63fb970eb5523b9adfca1281f0bbd3..de30cab3a185bad70895c05e16d78f1319d9c303 100644 (file)
@@ -1462,11 +1462,17 @@ GNUNET_a2s (const struct sockaddr *addr,
     if (addrlen != sizeof (struct sockaddr_in))
       return "<invalid v4 address>";
     v4 = (const struct sockaddr_in *) addr;
-    inet_ntop (AF_INET, &v4->sin_addr, buf, INET_ADDRSTRLEN);
+    inet_ntop (AF_INET,
+               &v4->sin_addr,
+               buf,
+               INET_ADDRSTRLEN);
     if (0 == ntohs (v4->sin_port))
       return buf;
     strcat (buf, ":");
-    GNUNET_snprintf (b2, sizeof (b2), "%u", ntohs (v4->sin_port));
+    GNUNET_snprintf (b2,
+                     sizeof (b2),
+                     "%u",
+                     ntohs (v4->sin_port));
     strcat (buf, b2);
     return buf;
   case AF_INET6:
@@ -1474,12 +1480,19 @@ GNUNET_a2s (const struct sockaddr *addr,
       return "<invalid v4 address>";
     v6 = (const struct sockaddr_in6 *) addr;
     buf[0] = '[';
-    inet_ntop (AF_INET6, &v6->sin6_addr, &buf[1], INET6_ADDRSTRLEN);
+    inet_ntop (AF_INET6,
+               &v6->sin6_addr,
+               &buf[1],
+               INET6_ADDRSTRLEN);
     if (0 == ntohs (v6->sin6_port))
       return &buf[1];
     strcat (buf, "]:");
-    GNUNET_snprintf (b2, sizeof (b2), "%u", ntohs (v6->sin6_port));
-    strcat (buf, b2);
+    GNUNET_snprintf (b2,
+                     sizeof (b2),
+                     "%u",
+                     ntohs (v6->sin6_port));
+    strcat (buf,
+            b2);
     return buf;
   case AF_UNIX:
     if (addrlen <= sizeof (sa_family_t))