#
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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"
#: 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 "
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 ""
#: 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"
#: 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"
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"
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 ""
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"
"`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 ""
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 ""
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"
"%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"
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 ""
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"
#: 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 "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 "
"«%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 ""
#: 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"
#: 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"
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"
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."
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"
"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"
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 ""
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"
"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"
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 "
"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 ""
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"
#: 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 "
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 ""
#: 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"
#: 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 ""
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"
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 ""
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 ""
"`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 ""
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 ""
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 ""
"%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 ""
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 ""
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"
#: 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 "
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 ""
#: 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 ""
#: 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 ""
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 ""
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 ""
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 ""
"`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 ""
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 ""
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 ""
"%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 ""
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 ""
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"
#: 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 "
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 ""
#: 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"
#: 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"
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"
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"
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"
"`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"
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 ""
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\":"
"%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"
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 ""
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"
#: 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 "
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 ""
#: 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"
#: 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"
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"
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ụ"
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"
"`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"
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 ""
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 »:"
"%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"
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 ""
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"
#: 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 "
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 ""
#: 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"
#: 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"
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 "迭代次数"
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 "无法访问该服务"
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"
"`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 ""
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 ""
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"
"%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"
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 ""
$(LTLIBICONV) \
$(LTLIBINTL) \
$(ABE_LIBADD) \
+ $(top_builddir)/src/util/libgnunetutil.la \
+ -lgmp \
-lgabe \
-lpbc \
-lglib-2.0 \
*/
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);
/**
*/
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);
/**
*/
#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
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
*
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.
*
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.
#include "gnunet_constants.h"
#include "gnunet_util_lib.h"
+#include "gnunet_nt_lib.h"
/**
* Handle to the TRANSPORT subsystem for making suggestions about
/**
- * 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 */
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)
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 */
*/
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;
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 = \
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) \
/**
* 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
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;
}
}
+
+static void
+profiler_reply_handle_info (void *cls,
+ const struct GNUNET_PeerIdentity *recv_peer,
+ double probability,
+ uint32_t num_observed);
+
/**
* Request random peers.
*/
"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,
}
+/**
+ * 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)
{
{
//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;
* 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
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",
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);
}
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.
// */
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");
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);
// 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);
}
*/
struct RPS_SamplerRequestHandle;
+/**
+ * Closure to _get_rand_peer_info()
+ */
+struct RPS_SamplerRequestHandleSingleInfo;
+
/**
* Get the size of the 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 *
RPS_sampler_n_rand_peers_ready_cb cb,
void *cls);
+
/**
* Cancle a request issued through #RPS_sampler_n_rand_peers_ready_cb.
*
};
+/**
+ * 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
*
/**
* 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;
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,
}
+/**
+ * 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.
*
* @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 *
{
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];
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.
*
}
+/**
+ * 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.
*/
*
* @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);
/**
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
*
*/
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.
*/
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;
};
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.
*
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.
*/
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);
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, ...)
*/
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.
};
+/**
+ * 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.
}
+/**
+ * @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.
}
+/**
+ * @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 */
/**
*/
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);
}
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));
+ }
}
}
+/**
+ * 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.
*
}
+/**
+ * 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
*
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);
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 \
* 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)
/**
* #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)
/**
/**
* 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;
};
/**
* 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];
};
/**
* 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 */
/**
* 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;
};
* 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.
*/
/**
* Identity of the inititor of the UDP broadcast.
- */
+ */
struct GNUNET_PeerIdentity sender;
/**
* Hash of the sender's UDP address.
- */
+ */
struct GNUNET_HashCode h_address;
};
* 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!
*/
* 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];
-
+
};
* Kept in a DLL.
*/
struct KeyCacheEntry *next;
-
+
/**
* Kept in a DLL.
*/
/**
* 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!
*/
/**
* Sequence number used to derive this entry from master key.
- */
+ */
uint32_t sequence_number;
};
* 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.
*/
* 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;
/**
/**
* Number of active KCN entries.
- */
+ */
unsigned int active_kce_count;
};
/**
* To whom are we talking to.
*/
- struct GNUNET_PeerIdentity target;
+ struct GNUNET_PeerIdentity target;
/**
* Entry in sender expiration heap.
- */
+ */
struct GNUNET_CONTAINER_HeapNode *hn;
/**
* 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.
*/
/**
* Length of the DLL at @a ss_head.
- */
+ */
unsigned int num_secrets;
-
+
/**
* Which network type does this queue use?
*/
enum GNUNET_NetworkType nt;
-
+
};
/**
* 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.
*/
/**
* 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.
*/
/**
* Entry in sender expiration heap.
- */
+ */
struct GNUNET_CONTAINER_HeapNode *hn;
/**
* 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;
-
+
};
* 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.
*/
/**
* 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;
/**
*/
static struct GNUNET_NETWORK_Handle *udp_sock;
-/**
+/**
* #GNUNET_YES if #udp_sock supports IPv6.
- */
+ */
static int have_v6_socket;
/**
*/
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.
*/
/**
* Port number to which we are actually bound.
- */
+ */
static uint16_t my_port;
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));
* Free memory used by key cache entry.
*
* @param kce the key cache entry
- */
+ */
static void
kce_destroy (struct KeyCacheEntry *kce)
{
struct GNUNET_TIME_Relative delay;
struct ReceiverAddress *receiver;
struct SenderAddress *sender;
-
+
(void) cls;
timeout_task = NULL;
rt = GNUNET_TIME_UNIT_FOREVER_REL;
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.
/**
* 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,
/**
- * 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
* recalculated and a fresh queue is initialized.
*
* @param receiver receiver to setup MQ for
- */
+ */
static void
setup_receiver_mq (struct ReceiverAddress *receiver);
sizeof (struct GNUNET_HashCode)))
{
uint32_t allowed;
-
+
allowed = ntohl (ack->sequence_max);
-
+
if (allowed > ss->sequence_allowed)
{
receiver->acks_available += (allowed - ss->sequence_allowed);
* @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,
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);
}
}
* @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,
* 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
*/
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;
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
*/
(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;
}
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;
}
}
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))
char dummy[2];
char *colon;
char *cp;
-
+
if (1 == SSCANF (bindto,
"%u%1s",
&port,
"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);
else
{
struct sockaddr_in6 *i6;
-
+
i6 = GNUNET_malloc (sizeof (struct sockaddr_in6));
i6->sin6_family = AF_INET6;
i6->sin6_port = htons ((uint16_t) port);
.size = htons (sizeof (pad)),
.type = htons (GNUNET_MESSAGE_TYPE_COMMUNICATOR_UDP_PAD)
};
-
+
memcpy (pad,
&hdr,
sizeof (hdr));
return;
}
reschedule_receiver_timeout (receiver);
-
+
if (0 == receiver->acks_available)
{
/* use KX encryption method */
* 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);
/**
* 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)
const char *path;
struct sockaddr *in;
socklen_t in_len;
-
+
if (0 != strncmp (address,
COMMUNICATOR_ADDRESS_PREFIX "-",
strlen (COMMUNICATOR_ADDRESS_PREFIX "-")))
}
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;
}
GNUNET_TRANSPORT_communicator_disconnect (ch);
ch = NULL;
}
+ if (NULL != ah)
+ {
+ GNUNET_TRANSPORT_application_done (ah);
+ ah = NULL;
+ }
if (NULL != stats)
{
GNUNET_STATISTICS_destroy (stats,
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)) )
* @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
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,
= 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,
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);
inet_pton (AF_INET6,
"FF05::13B",
&bi->mcreq.ipv6mr_multiaddr));
-
+
/* http://tools.ietf.org/html/rfc2553#section-5.2:
*
* IPV6_JOIN_GROUP
do_broadcast (void *cls)
{
struct BroadcastInterface *bin;
-
+
(void) cls;
for (struct BroadcastInterface *bi = bi_head;
NULL != bi;
socklen_t in_len;
struct sockaddr_storage in_sto;
socklen_t sto_len;
-
+
(void) cls;
cfg = c;
if (GNUNET_OK !=
}
in = udp_address_to_sockaddr (bindto,
- &in_len);
+ &in_len);
if (NULL == in)
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
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,
if (GNUNET_OK !=
GNUNET_NETWORK_socket_bind (udp_sock,
in,
- in_len))
+ in_len))
{
GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR,
"bind",
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);
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:
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)
&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)
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 */);
}
* 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
enum GNUNET_NetworkType nt,
const struct MonitorEvent *me)
{
- static struct GNUNET_PeerIdentity zero;
-
for (struct TransportClient *tc = clients_head;
NULL != tc;
tc = tc->next)
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,
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);
continue;
}
ephemeral_task = GNUNET_SCHEDULER_add_at (ece->ephemeral_validity,
- &expire_ephemerals,
- NULL);
+ &expire_ephemerals,
+ NULL);
return;
}
}
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) )
{
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,
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);
}
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);
}
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);
}
}
tc->details.communicator.addr_tail,
ale);
ale->st = GNUNET_SCHEDULER_add_now (&store_pi,
- ale);
+ ale);
GNUNET_SERVICE_client_continue (tc->client);
}
*/
static void
demultiplex_with_cmc (struct CommunicatorMessageContext *cmc,
- const struct GNUNET_MessageHeader *msg);
+ const struct GNUNET_MessageHeader *msg);
/**
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);
*/
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);
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!
*/
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);
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;
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) +
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;
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++)
{
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)
{
/* 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?
*/
static int
check_reliability_box (void *cls,
- const struct TransportReliabilityBox *rb)
+ const struct TransportReliabilityBox *rb)
{
GNUNET_MQ_check_boxed_message (rb);
return GNUNET_YES;
*/
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];
/* 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));
{
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;
}
}
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;
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);
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;
cqm->request_id = htonl (idgen++);
cqm->receiver = *pid;
memcpy (&cqm[1],
- address,
- alen);
+ address,
+ alen);
GNUNET_MQ_send (tc->mq,
- env);
+ env);
}
pr->wc = GNUNET_PEERSTORE_watch (peerstore,
"transport",
&pr->pid,
- "hello",
+ GNUNET_HELLO_PEERSTORE_KEY,
&handle_hello,
pr);
GNUNET_SERVICE_client_continue (tc->client);
}
+/**
+ * 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.
*
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,
};
+/**
+ * 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
}
+
+/**
+ * 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 */
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:
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))