aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Schanzenbach <mschanzenbach@posteo.de>2021-02-23 22:30:15 +0100
committerMartin Schanzenbach <mschanzenbach@posteo.de>2021-02-23 22:30:15 +0100
commit64c18a74e38a1cb74042d14a4211622a3bde3bee (patch)
tree8cd226c21f2e40902e252139196998f00445d726
parentd528f6cfbe5e99a7e50e28d76b90654ecb955d9a (diff)
downloadgnunet-64c18a74e38a1cb74042d14a4211622a3bde3bee.tar.gz
gnunet-64c18a74e38a1cb74042d14a4211622a3bde3bee.zip
-flurry of bugfixes for tng service
-rw-r--r--po/POTFILES.in114
-rw-r--r--src/transport/Makefile.am2
-rw-r--r--src/transport/gnunet-service-tng.c97
-rw-r--r--src/transport/test_transport_api2_tcp_peer1.conf1
-rw-r--r--src/transport/test_transport_api2_tcp_peer2.conf1
-rw-r--r--src/transport/test_transport_api_tcp_peer1.conf2
-rw-r--r--src/transport/test_transport_api_tcp_peer2.conf2
-rw-r--r--src/transport/transport-testing2.c2
-rw-r--r--src/util/time.c4
9 files changed, 138 insertions, 87 deletions
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 51ada43b3..9dcfb81cf 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -10,21 +10,13 @@ src/arm/arm_monitor_api.c
10src/arm/gnunet-arm.c 10src/arm/gnunet-arm.c
11src/arm/gnunet-service-arm.c 11src/arm/gnunet-service-arm.c
12src/arm/mockup-service.c 12src/arm/mockup-service.c
13src/ats-tests/ats-testing-experiment.c
14src/ats-tests/ats-testing-log.c
15src/ats-tests/ats-testing-preferences.c
16src/ats-tests/ats-testing-traffic.c
17src/ats-tests/ats-testing.c
18src/ats-tests/gnunet-ats-sim.c
19src/ats-tests/gnunet-solver-eval.c
20src/ats-tool/gnunet-ats.c
21src/ats/ats_api_connectivity.c 13src/ats/ats_api_connectivity.c
22src/ats/ats_api_performance.c 14src/ats/ats_api_performance.c
23src/ats/ats_api_scanner.c 15src/ats/ats_api_scanner.c
24src/ats/ats_api_scheduling.c 16src/ats/ats_api_scheduling.c
25src/ats/gnunet-ats-solver-eval.c 17src/ats/gnunet-ats-solver-eval.c
26src/ats/gnunet-service-ats.c
27src/ats/gnunet-service-ats_addresses.c 18src/ats/gnunet-service-ats_addresses.c
19src/ats/gnunet-service-ats.c
28src/ats/gnunet-service-ats_connectivity.c 20src/ats/gnunet-service-ats_connectivity.c
29src/ats/gnunet-service-ats_normalization.c 21src/ats/gnunet-service-ats_normalization.c
30src/ats/gnunet-service-ats_performance.c 22src/ats/gnunet-service-ats_performance.c
@@ -33,6 +25,14 @@ src/ats/gnunet-service-ats_preferences.c
33src/ats/gnunet-service-ats_reservations.c 25src/ats/gnunet-service-ats_reservations.c
34src/ats/gnunet-service-ats_scheduling.c 26src/ats/gnunet-service-ats_scheduling.c
35src/ats/plugin_ats_proportional.c 27src/ats/plugin_ats_proportional.c
28src/ats-tests/ats-testing.c
29src/ats-tests/ats-testing-experiment.c
30src/ats-tests/ats-testing-log.c
31src/ats-tests/ats-testing-preferences.c
32src/ats-tests/ats-testing-traffic.c
33src/ats-tests/gnunet-ats-sim.c
34src/ats-tests/gnunet-solver-eval.c
35src/ats-tool/gnunet-ats.c
36src/auction/gnunet-auction-create.c 36src/auction/gnunet-auction-create.c
37src/auction/gnunet-auction-info.c 37src/auction/gnunet-auction-info.c
38src/auction/gnunet-auction-join.c 38src/auction/gnunet-auction-join.c
@@ -50,8 +50,8 @@ src/cadet/cadet_api_list_peers.c
50src/cadet/cadet_api_list_tunnels.c 50src/cadet/cadet_api_list_tunnels.c
51src/cadet/cadet_test_lib.c 51src/cadet/cadet_test_lib.c
52src/cadet/desirability_table.c 52src/cadet/desirability_table.c
53src/cadet/gnunet-cadet-profiler.c
54src/cadet/gnunet-cadet.c 53src/cadet/gnunet-cadet.c
54src/cadet/gnunet-cadet-profiler.c
55src/cadet/gnunet-service-cadet.c 55src/cadet/gnunet-service-cadet.c
56src/cadet/gnunet-service-cadet_channel.c 56src/cadet/gnunet-service-cadet_channel.c
57src/cadet/gnunet-service-cadet_connection.c 57src/cadet/gnunet-service-cadet_connection.c
@@ -67,15 +67,15 @@ src/consensus/gnunet-service-consensus.c
67src/consensus/plugin_block_consensus.c 67src/consensus/plugin_block_consensus.c
68src/conversation/conversation_api.c 68src/conversation/conversation_api.c
69src/conversation/conversation_api_call.c 69src/conversation/conversation_api_call.c
70src/conversation/gnunet-conversation-test.c
71src/conversation/gnunet-conversation.c 70src/conversation/gnunet-conversation.c
72src/conversation/gnunet-helper-audio-playback-gst.c 71src/conversation/gnunet-conversation-test.c
72src/conversation/gnunet_gst.c
73src/conversation/gnunet_gst_test.c
73src/conversation/gnunet-helper-audio-playback.c 74src/conversation/gnunet-helper-audio-playback.c
74src/conversation/gnunet-helper-audio-record-gst.c 75src/conversation/gnunet-helper-audio-playback-gst.c
75src/conversation/gnunet-helper-audio-record.c 76src/conversation/gnunet-helper-audio-record.c
77src/conversation/gnunet-helper-audio-record-gst.c
76src/conversation/gnunet-service-conversation.c 78src/conversation/gnunet-service-conversation.c
77src/conversation/gnunet_gst.c
78src/conversation/gnunet_gst_test.c
79src/conversation/microphone.c 79src/conversation/microphone.c
80src/conversation/plugin_gnsrecord_conversation.c 80src/conversation/plugin_gnsrecord_conversation.c
81src/conversation/speaker.c 81src/conversation/speaker.c
@@ -105,6 +105,7 @@ src/dht/dht_api.c
105src/dht/dht_test_lib.c 105src/dht/dht_test_lib.c
106src/dht/gnunet-dht-get.c 106src/dht/gnunet-dht-get.c
107src/dht/gnunet-dht-monitor.c 107src/dht/gnunet-dht-monitor.c
108src/dht/gnunet_dht_profiler.c
108src/dht/gnunet-dht-put.c 109src/dht/gnunet-dht-put.c
109src/dht/gnunet-service-dht.c 110src/dht/gnunet-service-dht.c
110src/dht/gnunet-service-dht_clients.c 111src/dht/gnunet-service-dht_clients.c
@@ -113,7 +114,6 @@ src/dht/gnunet-service-dht_hello.c
113src/dht/gnunet-service-dht_neighbours.c 114src/dht/gnunet-service-dht_neighbours.c
114src/dht/gnunet-service-dht_nse.c 115src/dht/gnunet-service-dht_nse.c
115src/dht/gnunet-service-dht_routing.c 116src/dht/gnunet-service-dht_routing.c
116src/dht/gnunet_dht_profiler.c
117src/dht/plugin_block_dht.c 117src/dht/plugin_block_dht.c
118src/dns/dns_api.c 118src/dns/dns_api.c
119src/dns/gnunet-dns-monitor.c 119src/dns/gnunet-dns-monitor.c
@@ -148,8 +148,8 @@ src/fs/gnunet-auto-share.c
148src/fs/gnunet-daemon-fsprofiler.c 148src/fs/gnunet-daemon-fsprofiler.c
149src/fs/gnunet-directory.c 149src/fs/gnunet-directory.c
150src/fs/gnunet-download.c 150src/fs/gnunet-download.c
151src/fs/gnunet-fs-profiler.c
152src/fs/gnunet-fs.c 151src/fs/gnunet-fs.c
152src/fs/gnunet-fs-profiler.c
153src/fs/gnunet-helper-fs-publish.c 153src/fs/gnunet-helper-fs-publish.c
154src/fs/gnunet-publish.c 154src/fs/gnunet-publish.c
155src/fs/gnunet-search.c 155src/fs/gnunet-search.c
@@ -169,9 +169,9 @@ src/gns/gns_tld_api.c
169src/gns/gnunet-bcd.c 169src/gns/gnunet-bcd.c
170src/gns/gnunet-dns2gns.c 170src/gns/gnunet-dns2gns.c
171src/gns/gnunet-gns-benchmark.c 171src/gns/gnunet-gns-benchmark.c
172src/gns/gnunet-gns.c
172src/gns/gnunet-gns-import.c 173src/gns/gnunet-gns-import.c
173src/gns/gnunet-gns-proxy.c 174src/gns/gnunet-gns-proxy.c
174src/gns/gnunet-gns.c
175src/gns/gnunet-service-gns.c 175src/gns/gnunet-service-gns.c
176src/gns/gnunet-service-gns_interceptor.c 176src/gns/gnunet-service-gns_interceptor.c
177src/gns/gnunet-service-gns_resolver.c 177src/gns/gnunet-service-gns_resolver.c
@@ -189,8 +189,8 @@ src/gnsrecord/json_gnsrecord.c
189src/gnsrecord/plugin_gnsrecord_dns.c 189src/gnsrecord/plugin_gnsrecord_dns.c
190src/hello/address.c 190src/hello/address.c
191src/hello/gnunet-hello.c 191src/hello/gnunet-hello.c
192src/hello/hello-ng.c
193src/hello/hello.c 192src/hello/hello.c
193src/hello/hello-ng.c
194src/hostlist/gnunet-daemon-hostlist.c 194src/hostlist/gnunet-daemon-hostlist.c
195src/hostlist/gnunet-daemon-hostlist_client.c 195src/hostlist/gnunet-daemon-hostlist_client.c
196src/hostlist/gnunet-daemon-hostlist_server.c 196src/hostlist/gnunet-daemon-hostlist_server.c
@@ -205,8 +205,8 @@ src/json/json_generator.c
205src/json/json_helper.c 205src/json/json_helper.c
206src/json/json_mhd.c 206src/json/json_mhd.c
207src/messenger/gnunet-messenger.c 207src/messenger/gnunet-messenger.c
208src/messenger/gnunet-service-messenger.c
209src/messenger/gnunet-service-messenger_basement.c 208src/messenger/gnunet-service-messenger_basement.c
209src/messenger/gnunet-service-messenger.c
210src/messenger/gnunet-service-messenger_contact.c 210src/messenger/gnunet-service-messenger_contact.c
211src/messenger/gnunet-service-messenger_handle.c 211src/messenger/gnunet-service-messenger_handle.c
212src/messenger/gnunet-service-messenger_list_handles.c 212src/messenger/gnunet-service-messenger_list_handles.c
@@ -236,8 +236,8 @@ src/namecache/namecache_api.c
236src/namecache/plugin_namecache_flat.c 236src/namecache/plugin_namecache_flat.c
237src/namecache/plugin_namecache_postgres.c 237src/namecache/plugin_namecache_postgres.c
238src/namecache/plugin_namecache_sqlite.c 238src/namecache/plugin_namecache_sqlite.c
239src/namestore/gnunet-namestore-fcfsd.c
240src/namestore/gnunet-namestore.c 239src/namestore/gnunet-namestore.c
240src/namestore/gnunet-namestore-fcfsd.c
241src/namestore/gnunet-service-namestore.c 241src/namestore/gnunet-service-namestore.c
242src/namestore/gnunet-zoneimport.c 242src/namestore/gnunet-zoneimport.c
243src/namestore/namestore_api.c 243src/namestore/namestore_api.c
@@ -263,17 +263,17 @@ src/nat/gnunet-service-nat_mini.c
263src/nat/gnunet-service-nat_stun.c 263src/nat/gnunet-service-nat_stun.c
264src/nat/nat_api.c 264src/nat/nat_api.c
265src/nat/nat_api_stun.c 265src/nat/nat_api_stun.c
266src/nse/gnunet-nse-profiler.c
267src/nse/gnunet-nse.c 266src/nse/gnunet-nse.c
267src/nse/gnunet-nse-profiler.c
268src/nse/gnunet-service-nse.c 268src/nse/gnunet-service-nse.c
269src/nse/nse_api.c 269src/nse/nse_api.c
270src/nt/nt.c 270src/nt/nt.c
271src/peerinfo-tool/gnunet-peerinfo.c
272src/peerinfo-tool/gnunet-peerinfo_plugins.c
273src/peerinfo-tool/plugin_rest_peerinfo.c
274src/peerinfo/gnunet-service-peerinfo.c 271src/peerinfo/gnunet-service-peerinfo.c
275src/peerinfo/peerinfo_api.c 272src/peerinfo/peerinfo_api.c
276src/peerinfo/peerinfo_api_notify.c 273src/peerinfo/peerinfo_api_notify.c
274src/peerinfo-tool/gnunet-peerinfo.c
275src/peerinfo-tool/gnunet-peerinfo_plugins.c
276src/peerinfo-tool/plugin_rest_peerinfo.c
277src/peerstore/gnunet-peerstore.c 277src/peerstore/gnunet-peerstore.c
278src/peerstore/gnunet-service-peerstore.c 278src/peerstore/gnunet-service-peerstore.c
279src/peerstore/peerstore_api.c 279src/peerstore/peerstore_api.c
@@ -319,27 +319,27 @@ src/rest/gnunet-rest-server.c
319src/rest/plugin_rest_config.c 319src/rest/plugin_rest_config.c
320src/rest/plugin_rest_copying.c 320src/rest/plugin_rest_copying.c
321src/rest/rest.c 321src/rest/rest.c
322src/revocation/gnunet-revocation-tvg.c
323src/revocation/gnunet-revocation.c 322src/revocation/gnunet-revocation.c
323src/revocation/gnunet-revocation-tvg.c
324src/revocation/gnunet-service-revocation.c 324src/revocation/gnunet-service-revocation.c
325src/revocation/plugin_block_revocation.c 325src/revocation/plugin_block_revocation.c
326src/revocation/revocation_api.c 326src/revocation/revocation_api.c
327src/rps/gnunet-rps-profiler.c
328src/rps/gnunet-rps.c 327src/rps/gnunet-rps.c
328src/rps/gnunet-rps-profiler.c
329src/rps/gnunet-service-rps.c 329src/rps/gnunet-service-rps.c
330src/rps/gnunet-service-rps_custommap.c 330src/rps/gnunet-service-rps_custommap.c
331src/rps/gnunet-service-rps_sampler.c 331src/rps/gnunet-service-rps_sampler.c
332src/rps/gnunet-service-rps_sampler_elem.c 332src/rps/gnunet-service-rps_sampler_elem.c
333src/rps/gnunet-service-rps_view.c 333src/rps/gnunet-service-rps_view.c
334src/rps/rps_api.c
334src/rps/rps-sampler_client.c 335src/rps/rps-sampler_client.c
335src/rps/rps-sampler_common.c 336src/rps/rps-sampler_common.c
336src/rps/rps-test_util.c 337src/rps/rps-test_util.c
337src/rps/rps_api.c
338src/scalarproduct/gnunet-scalarproduct.c 338src/scalarproduct/gnunet-scalarproduct.c
339src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c
340src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c
341src/scalarproduct/gnunet-service-scalarproduct_alice.c 339src/scalarproduct/gnunet-service-scalarproduct_alice.c
342src/scalarproduct/gnunet-service-scalarproduct_bob.c 340src/scalarproduct/gnunet-service-scalarproduct_bob.c
341src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c
342src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c
343src/scalarproduct/scalarproduct_api.c 343src/scalarproduct/scalarproduct_api.c
344src/secretsharing/gnunet-secretsharing-profiler.c 344src/secretsharing/gnunet-secretsharing-profiler.c
345src/secretsharing/gnunet-service-secretsharing.c 345src/secretsharing/gnunet-service-secretsharing.c
@@ -353,12 +353,12 @@ src/set/gnunet-set-ibf-profiler.c
353src/set/gnunet-set-profiler.c 353src/set/gnunet-set-profiler.c
354src/set/ibf.c 354src/set/ibf.c
355src/set/ibf_sim.c 355src/set/ibf_sim.c
356src/set/plugin_block_set_test.c
357src/set/set_api.c
358src/seti/gnunet-service-seti.c 356src/seti/gnunet-service-seti.c
359src/seti/gnunet-seti-profiler.c 357src/seti/gnunet-seti-profiler.c
360src/seti/plugin_block_seti_test.c 358src/seti/plugin_block_seti_test.c
361src/seti/seti_api.c 359src/seti/seti_api.c
360src/set/plugin_block_set_test.c
361src/set/set_api.c
362src/setu/gnunet-service-setu.c 362src/setu/gnunet-service-setu.c
363src/setu/gnunet-service-setu_strata_estimator.c 363src/setu/gnunet-service-setu_strata_estimator.c
364src/setu/gnunet-setu-ibf-profiler.c 364src/setu/gnunet-setu-ibf-profiler.c
@@ -377,16 +377,15 @@ src/statistics/gnunet-statistics.c
377src/statistics/statistics_api.c 377src/statistics/statistics_api.c
378src/template/gnunet-service-template.c 378src/template/gnunet-service-template.c
379src/template/gnunet-template.c 379src/template/gnunet-template.c
380src/testbed-logger/gnunet-service-testbed-logger.c
381src/testbed-logger/testbed_logger_api.c
382src/testbed/generate-underlay-topology.c 380src/testbed/generate-underlay-topology.c
383src/testbed/gnunet-daemon-latency-logger.c 381src/testbed/gnunet-daemon-latency-logger.c
384src/testbed/gnunet-daemon-testbed-blacklist.c 382src/testbed/gnunet-daemon-testbed-blacklist.c
385src/testbed/gnunet-daemon-testbed-underlay.c 383src/testbed/gnunet-daemon-testbed-underlay.c
386src/testbed/gnunet-helper-testbed.c 384src/testbed/gnunet-helper-testbed.c
385src/testbed/gnunet_mpi_test.c
387src/testbed/gnunet-service-test-barriers.c 386src/testbed/gnunet-service-test-barriers.c
388src/testbed/gnunet-service-testbed.c
389src/testbed/gnunet-service-testbed_barriers.c 387src/testbed/gnunet-service-testbed_barriers.c
388src/testbed/gnunet-service-testbed.c
390src/testbed/gnunet-service-testbed_cache.c 389src/testbed/gnunet-service-testbed_cache.c
391src/testbed/gnunet-service-testbed_connectionpool.c 390src/testbed/gnunet-service-testbed_connectionpool.c
392src/testbed/gnunet-service-testbed_cpustatus.c 391src/testbed/gnunet-service-testbed_cpustatus.c
@@ -394,19 +393,20 @@ src/testbed/gnunet-service-testbed_links.c
394src/testbed/gnunet-service-testbed_meminfo.c 393src/testbed/gnunet-service-testbed_meminfo.c
395src/testbed/gnunet-service-testbed_oc.c 394src/testbed/gnunet-service-testbed_oc.c
396src/testbed/gnunet-service-testbed_peers.c 395src/testbed/gnunet-service-testbed_peers.c
397src/testbed/gnunet-testbed-profiler.c
398src/testbed/gnunet_mpi_test.c
399src/testbed/gnunet_testbed_mpi_spawn.c 396src/testbed/gnunet_testbed_mpi_spawn.c
400src/testbed/testbed_api.c 397src/testbed/gnunet-testbed-profiler.c
398src/testbed-logger/gnunet-service-testbed-logger.c
399src/testbed-logger/testbed_logger_api.c
401src/testbed/testbed_api_barriers.c 400src/testbed/testbed_api_barriers.c
401src/testbed/testbed_api.c
402src/testbed/testbed_api_hosts.c 402src/testbed/testbed_api_hosts.c
403src/testbed/testbed_api_operations.c 403src/testbed/testbed_api_operations.c
404src/testbed/testbed_api_peers.c 404src/testbed/testbed_api_peers.c
405src/testbed/testbed_api_sd.c 405src/testbed/testbed_api_sd.c
406src/testbed/testbed_api_services.c 406src/testbed/testbed_api_services.c
407src/testbed/testbed_api_statistics.c 407src/testbed/testbed_api_statistics.c
408src/testbed/testbed_api_test.c
409src/testbed/testbed_api_testbed.c 408src/testbed/testbed_api_testbed.c
409src/testbed/testbed_api_test.c
410src/testbed/testbed_api_topology.c 410src/testbed/testbed_api_topology.c
411src/testbed/testbed_api_underlay.c 411src/testbed/testbed_api_underlay.c
412src/testing/gnunet-testing.c 412src/testing/gnunet-testing.c
@@ -418,45 +418,34 @@ src/transport/gnunet-communicator-tcp.c
418src/transport/gnunet-communicator-udp.c 418src/transport/gnunet-communicator-udp.c
419src/transport/gnunet-communicator-unix.c 419src/transport/gnunet-communicator-unix.c
420src/transport/gnunet-helper-transport-bluetooth.c 420src/transport/gnunet-helper-transport-bluetooth.c
421src/transport/gnunet-helper-transport-wlan-dummy.c
422src/transport/gnunet-helper-transport-wlan.c 421src/transport/gnunet-helper-transport-wlan.c
422src/transport/gnunet-helper-transport-wlan-dummy.c
423src/transport/gnunet-service-tng.c 423src/transport/gnunet-service-tng.c
424src/transport/gnunet-service-transport.c
425src/transport/gnunet-service-transport_ats.c 424src/transport/gnunet-service-transport_ats.c
425src/transport/gnunet-service-transport.c
426src/transport/gnunet-service-transport_hello.c 426src/transport/gnunet-service-transport_hello.c
427src/transport/gnunet-service-transport_manipulation.c 427src/transport/gnunet-service-transport_manipulation.c
428src/transport/gnunet-service-transport_neighbours.c 428src/transport/gnunet-service-transport_neighbours.c
429src/transport/gnunet-service-transport_plugins.c 429src/transport/gnunet-service-transport_plugins.c
430src/transport/gnunet-service-transport_validation.c 430src/transport/gnunet-service-transport_validation.c
431src/transport/gnunet-transport.c
431src/transport/gnunet-transport-profiler.c 432src/transport/gnunet-transport-profiler.c
432src/transport/gnunet-transport-wlan-receiver.c 433src/transport/gnunet-transport-wlan-receiver.c
433src/transport/gnunet-transport-wlan-sender.c 434src/transport/gnunet-transport-wlan-sender.c
434src/transport/gnunet-transport.c
435src/transport/plugin_transport_http_client.c 435src/transport/plugin_transport_http_client.c
436src/transport/plugin_transport_http_common.c 436src/transport/plugin_transport_http_common.c
437src/transport/plugin_transport_http_server.c 437src/transport/plugin_transport_http_server.c
438src/transport/plugin_transport_smtp.c 438src/transport/plugin_transport_smtp.c
439src/transport/plugin_transport_tcp.c 439src/transport/plugin_transport_tcp.c
440src/transport/plugin_transport_template.c 440src/transport/plugin_transport_template.c
441src/transport/plugin_transport_udp.c
442src/transport/plugin_transport_udp_broadcasting.c 441src/transport/plugin_transport_udp_broadcasting.c
442src/transport/plugin_transport_udp.c
443src/transport/plugin_transport_unix.c 443src/transport/plugin_transport_unix.c
444src/transport/plugin_transport_wlan.c 444src/transport/plugin_transport_wlan.c
445src/transport/tcp_connection_legacy.c 445src/transport/tcp_connection_legacy.c
446src/transport/tcp_server_legacy.c 446src/transport/tcp_server_legacy.c
447src/transport/tcp_server_mst_legacy.c 447src/transport/tcp_server_mst_legacy.c
448src/transport/tcp_service_legacy.c 448src/transport/tcp_service_legacy.c
449src/transport/transport-testing-communicator.c
450src/transport/transport-testing-filenames.c
451src/transport/transport-testing-filenames2.c
452src/transport/transport-testing-loggers.c
453src/transport/transport-testing-loggers2.c
454src/transport/transport-testing-main.c
455src/transport/transport-testing-main2.c
456src/transport/transport-testing-send.c
457src/transport/transport-testing-send2.c
458src/transport/transport-testing.c
459src/transport/transport-testing2.c
460src/transport/transport_api2_application.c 449src/transport/transport_api2_application.c
461src/transport/transport_api2_communication.c 450src/transport/transport_api2_communication.c
462src/transport/transport_api2_core.c 451src/transport/transport_api2_core.c
@@ -469,6 +458,17 @@ src/transport/transport_api_manipulation.c
469src/transport/transport_api_monitor_peers.c 458src/transport/transport_api_monitor_peers.c
470src/transport/transport_api_monitor_plugins.c 459src/transport/transport_api_monitor_plugins.c
471src/transport/transport_api_offer_hello.c 460src/transport/transport_api_offer_hello.c
461src/transport/transport-testing2.c
462src/transport/transport-testing.c
463src/transport/transport-testing-communicator.c
464src/transport/transport-testing-filenames2.c
465src/transport/transport-testing-filenames.c
466src/transport/transport-testing-loggers2.c
467src/transport/transport-testing-loggers.c
468src/transport/transport-testing-main2.c
469src/transport/transport-testing-main.c
470src/transport/transport-testing-send2.c
471src/transport/transport-testing-send.c
472src/util/bandwidth.c 472src/util/bandwidth.c
473src/util/benchmark.c 473src/util/benchmark.c
474src/util/bio.c 474src/util/bio.c
@@ -483,8 +483,8 @@ src/util/consttime_memcmp.c
483src/util/container_bloomfilter.c 483src/util/container_bloomfilter.c
484src/util/container_heap.c 484src/util/container_heap.c
485src/util/container_meta_data.c 485src/util/container_meta_data.c
486src/util/container_multihashmap.c
487src/util/container_multihashmap32.c 486src/util/container_multihashmap32.c
487src/util/container_multihashmap.c
488src/util/container_multipeermap.c 488src/util/container_multipeermap.c
489src/util/container_multishortmap.c 489src/util/container_multishortmap.c
490src/util/container_multiuuidmap.c 490src/util/container_multiuuidmap.c
@@ -508,8 +508,8 @@ src/util/dnsparser.c
508src/util/dnsstub.c 508src/util/dnsstub.c
509src/util/getopt.c 509src/util/getopt.c
510src/util/getopt_helpers.c 510src/util/getopt_helpers.c
511src/util/gnunet-config-diff.c
512src/util/gnunet-config.c 511src/util/gnunet-config.c
512src/util/gnunet-config-diff.c
513src/util/gnunet-crypto-tvg.c 513src/util/gnunet-crypto-tvg.c
514src/util/gnunet-ecc.c 514src/util/gnunet-ecc.c
515src/util/gnunet-qr.c 515src/util/gnunet-qr.c
@@ -547,8 +547,8 @@ src/vpn/gnunet-helper-vpn.c
547src/vpn/gnunet-service-vpn.c 547src/vpn/gnunet-service-vpn.c
548src/vpn/gnunet-vpn.c 548src/vpn/gnunet-vpn.c
549src/vpn/vpn_api.c 549src/vpn/vpn_api.c
550src/zonemaster/gnunet-service-zonemaster-monitor.c
551src/zonemaster/gnunet-service-zonemaster.c 550src/zonemaster/gnunet-service-zonemaster.c
551src/zonemaster/gnunet-service-zonemaster-monitor.c
552src/fs/fs_api.h 552src/fs/fs_api.h
553src/testbed/testbed_api.h 553src/testbed/testbed_api.h
554src/testbed/testbed_api_operations.h 554src/testbed/testbed_api_operations.h
diff --git a/src/transport/Makefile.am b/src/transport/Makefile.am
index 67b35365d..a1ffbdb5c 100644
--- a/src/transport/Makefile.am
+++ b/src/transport/Makefile.am
@@ -954,7 +954,7 @@ test_transport_api_tcp_LDADD = \
954 libgnunettransporttesting.la 954 libgnunettransporttesting.la
955 955
956test_transport_api2_tcp_SOURCES = \ 956test_transport_api2_tcp_SOURCES = \
957 test_transport_api.c 957 test_transport_api2.c
958test_transport_api2_tcp_LDADD = \ 958test_transport_api2_tcp_LDADD = \
959 libgnunettransport.la \ 959 libgnunettransport.la \
960 $(top_builddir)/src/hello/libgnunethello.la \ 960 $(top_builddir)/src/hello/libgnunethello.la \
diff --git a/src/transport/gnunet-service-tng.c b/src/transport/gnunet-service-tng.c
index 9c37f15e2..7e1953663 100644
--- a/src/transport/gnunet-service-tng.c
+++ b/src/transport/gnunet-service-tng.c
@@ -2693,12 +2693,12 @@ static struct GNUNET_CONTAINER_MultiShortmap *dvlearn_map;
2693/** 2693/**
2694 * Head of a DLL sorted by launch time. 2694 * Head of a DLL sorted by launch time.
2695 */ 2695 */
2696static struct LearnLaunchEntry *lle_head; 2696static struct LearnLaunchEntry *lle_head = NULL;
2697 2697
2698/** 2698/**
2699 * Tail of a DLL sorted by launch time. 2699 * Tail of a DLL sorted by launch time.
2700 */ 2700 */
2701static struct LearnLaunchEntry *lle_tail; 2701static struct LearnLaunchEntry *lle_tail = NULL;
2702 2702
2703/** 2703/**
2704 * MIN Heap sorted by "next_challenge" to `struct ValidationState` entries 2704 * MIN Heap sorted by "next_challenge" to `struct ValidationState` entries
@@ -3497,13 +3497,17 @@ check_link_down (void *cls)
3497 3497
3498 vl->visibility_task = NULL; 3498 vl->visibility_task = NULL;
3499 dvh_timeout = GNUNET_TIME_UNIT_ZERO_ABS; 3499 dvh_timeout = GNUNET_TIME_UNIT_ZERO_ABS;
3500 for (struct DistanceVectorHop *pos = dv->dv_head; NULL != pos; 3500 if (NULL != dv)
3501 pos = pos->next_dv)
3502 dvh_timeout = GNUNET_TIME_absolute_max (dvh_timeout, pos->path_valid_until);
3503 if (0 == GNUNET_TIME_absolute_get_remaining (dvh_timeout).rel_value_us)
3504 { 3501 {
3505 vl->dv->vl = NULL; 3502 for (struct DistanceVectorHop *pos = dv->dv_head; NULL != pos;
3506 vl->dv = NULL; 3503 pos = pos->next_dv)
3504 dvh_timeout = GNUNET_TIME_absolute_max (dvh_timeout,
3505 pos->path_valid_until);
3506 if (0 == GNUNET_TIME_absolute_get_remaining (dvh_timeout).rel_value_us)
3507 {
3508 vl->dv->vl = NULL;
3509 vl->dv = NULL;
3510 }
3507 } 3511 }
3508 q_timeout = GNUNET_TIME_UNIT_ZERO_ABS; 3512 q_timeout = GNUNET_TIME_UNIT_ZERO_ABS;
3509 for (struct Queue *q = n->queue_head; NULL != q; q = q->next_neighbour) 3513 for (struct Queue *q = n->queue_head; NULL != q; q = q->next_neighbour)
@@ -4702,6 +4706,24 @@ route_control_message_without_fc (const struct GNUNET_PeerIdentity *target,
4702} 4706}
4703 4707
4704 4708
4709static void
4710consider_sending_fc (void *cls);
4711
4712/**
4713 * Something changed on the virtual link with respect to flow
4714 * control. Consider retransmitting the FC window size.
4715 *
4716 * @param cls a `struct VirtualLink` to work with
4717 */
4718static void
4719task_consider_sending_fc (void *cls)
4720{
4721 struct VirtualLink *vl = cls;
4722 vl->fc_retransmit_task = NULL;
4723 consider_sending_fc (cls);
4724}
4725
4726
4705/** 4727/**
4706 * Something changed on the virtual link with respect to flow 4728 * Something changed on the virtual link with respect to flow
4707 * control. Consider retransmitting the FC window size. 4729 * control. Consider retransmitting the FC window size.
@@ -4759,7 +4781,7 @@ consider_sending_fc (void *cls)
4759 if (NULL != vl->fc_retransmit_task) 4781 if (NULL != vl->fc_retransmit_task)
4760 GNUNET_SCHEDULER_cancel (vl->fc_retransmit_task); 4782 GNUNET_SCHEDULER_cancel (vl->fc_retransmit_task);
4761 vl->fc_retransmit_task = 4783 vl->fc_retransmit_task =
4762 GNUNET_SCHEDULER_add_delayed (rtt, &consider_sending_fc, vl); 4784 GNUNET_SCHEDULER_add_delayed (rtt, &task_consider_sending_fc, vl);
4763} 4785}
4764 4786
4765 4787
@@ -7637,7 +7659,7 @@ start_address_validation (const struct GNUNET_PeerIdentity *pid,
7637 validation_map, 7659 validation_map,
7638 &vs->pid, 7660 &vs->pid,
7639 vs, 7661 vs,
7640 GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY)); 7662 GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE));
7641 update_next_challenge_time (vs, now); 7663 update_next_challenge_time (vs, now);
7642} 7664}
7643 7665
@@ -7674,6 +7696,8 @@ handle_hello_for_incoming (void *cls,
7674} 7696}
7675 7697
7676 7698
7699
7700
7677/** 7701/**
7678 * Communicator gave us a transport address validation challenge. Process the 7702 * Communicator gave us a transport address validation challenge. Process the
7679 * request. 7703 * request.
@@ -7730,13 +7754,23 @@ handle_validation_challenge (
7730 &tvp, 7754 &tvp,
7731 &tvr.signature); 7755 &tvr.signature);
7732 } 7756 }
7733 route_control_message_without_fc (&cmc->im.sender,
7734 &tvr.header,
7735 RMO_ANYTHING_GOES | RMO_REDUNDANT);
7736 sender = cmc->im.sender; 7757 sender = cmc->im.sender;
7737 finish_cmc_handling (cmc);
7738 vl = lookup_virtual_link (&sender); 7758 vl = lookup_virtual_link (&sender);
7739 if (NULL != vl) 7759 if (NULL != vl)
7760 {
7761 route_control_message_without_fc (&cmc->im.sender,
7762 &tvr.header,
7763 RMO_ANYTHING_GOES | RMO_REDUNDANT);
7764 } else {
7765 /* Use route via neighbour */
7766 n = lookup_neighbour (&sender);
7767 if (NULL != n)
7768 for (struct Queue *q = n->queue_head; NULL != q; q = q->next_neighbour)
7769 queue_send_msg (q, NULL, &tvr, sizeof(tvr));
7770 }
7771
7772 finish_cmc_handling (cmc);
7773 if (NULL != vl)
7740 return; 7774 return;
7741 7775
7742 /* For us, the link is still down, but we need bi-directional 7776 /* For us, the link is still down, but we need bi-directional
@@ -8149,41 +8183,41 @@ demultiplex_with_cmc (struct CommunicatorMessageContext *cmc,
8149 { GNUNET_MQ_hd_var_size (fragment_box, 8183 { GNUNET_MQ_hd_var_size (fragment_box,
8150 GNUNET_MESSAGE_TYPE_TRANSPORT_FRAGMENT, 8184 GNUNET_MESSAGE_TYPE_TRANSPORT_FRAGMENT,
8151 struct TransportFragmentBoxMessage, 8185 struct TransportFragmentBoxMessage,
8152 &cmc), 8186 cmc),
8153 GNUNET_MQ_hd_var_size (reliability_box, 8187 GNUNET_MQ_hd_var_size (reliability_box,
8154 GNUNET_MESSAGE_TYPE_TRANSPORT_RELIABILITY_BOX, 8188 GNUNET_MESSAGE_TYPE_TRANSPORT_RELIABILITY_BOX,
8155 struct TransportReliabilityBoxMessage, 8189 struct TransportReliabilityBoxMessage,
8156 &cmc), 8190 cmc),
8157 GNUNET_MQ_hd_var_size (reliability_ack, 8191 GNUNET_MQ_hd_var_size (reliability_ack,
8158 GNUNET_MESSAGE_TYPE_TRANSPORT_RELIABILITY_ACK, 8192 GNUNET_MESSAGE_TYPE_TRANSPORT_RELIABILITY_ACK,
8159 struct TransportReliabilityAckMessage, 8193 struct TransportReliabilityAckMessage,
8160 &cmc), 8194 cmc),
8161 GNUNET_MQ_hd_var_size (backchannel_encapsulation, 8195 GNUNET_MQ_hd_var_size (backchannel_encapsulation,
8162 GNUNET_MESSAGE_TYPE_TRANSPORT_BACKCHANNEL_ENCAPSULATION, 8196 GNUNET_MESSAGE_TYPE_TRANSPORT_BACKCHANNEL_ENCAPSULATION,
8163 struct TransportBackchannelEncapsulationMessage, 8197 struct TransportBackchannelEncapsulationMessage,
8164 &cmc), 8198 cmc),
8165 GNUNET_MQ_hd_var_size (dv_learn, 8199 GNUNET_MQ_hd_var_size (dv_learn,
8166 GNUNET_MESSAGE_TYPE_TRANSPORT_DV_LEARN, 8200 GNUNET_MESSAGE_TYPE_TRANSPORT_DV_LEARN,
8167 struct TransportDVLearnMessage, 8201 struct TransportDVLearnMessage,
8168 &cmc), 8202 cmc),
8169 GNUNET_MQ_hd_var_size (dv_box, 8203 GNUNET_MQ_hd_var_size (dv_box,
8170 GNUNET_MESSAGE_TYPE_TRANSPORT_DV_BOX, 8204 GNUNET_MESSAGE_TYPE_TRANSPORT_DV_BOX,
8171 struct TransportDVBoxMessage, 8205 struct TransportDVBoxMessage,
8172 &cmc), 8206 cmc),
8173 GNUNET_MQ_hd_fixed_size ( 8207 GNUNET_MQ_hd_fixed_size (
8174 validation_challenge, 8208 validation_challenge,
8175 GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_VALIDATION_CHALLENGE, 8209 GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_VALIDATION_CHALLENGE,
8176 struct TransportValidationChallengeMessage, 8210 struct TransportValidationChallengeMessage,
8177 &cmc), 8211 cmc),
8178 GNUNET_MQ_hd_fixed_size (flow_control, 8212 GNUNET_MQ_hd_fixed_size (flow_control,
8179 GNUNET_MESSAGE_TYPE_TRANSPORT_FLOW_CONTROL, 8213 GNUNET_MESSAGE_TYPE_TRANSPORT_FLOW_CONTROL,
8180 struct TransportFlowControlMessage, 8214 struct TransportFlowControlMessage,
8181 &cmc), 8215 cmc),
8182 GNUNET_MQ_hd_fixed_size ( 8216 GNUNET_MQ_hd_fixed_size (
8183 validation_response, 8217 validation_response,
8184 GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_VALIDATION_RESPONSE, 8218 GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_VALIDATION_RESPONSE,
8185 struct TransportValidationResponseMessage, 8219 struct TransportValidationResponseMessage,
8186 &cmc), 8220 cmc),
8187 GNUNET_MQ_handler_end () }; 8221 GNUNET_MQ_handler_end () };
8188 int ret; 8222 int ret;
8189 8223
@@ -8202,7 +8236,7 @@ demultiplex_with_cmc (struct CommunicatorMessageContext *cmc,
8202 if (GNUNET_NO == ret) 8236 if (GNUNET_NO == ret)
8203 { 8237 {
8204 /* unencapsulated 'raw' message */ 8238 /* unencapsulated 'raw' message */
8205 handle_raw_message (&cmc, msg); 8239 handle_raw_message (cmc, msg);
8206 } 8240 }
8207} 8241}
8208 8242
@@ -8949,20 +8983,30 @@ handle_send_message_ack (void *cls,
8949 8983
8950 /* find our queue entry matching the ACK */ 8984 /* find our queue entry matching the ACK */
8951 qe = NULL; 8985 qe = NULL;
8986 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
8987 "Looking for queue for PID %s\n",
8988 GNUNET_i2s (&sma->receiver));
8952 for (struct Queue *queue = tc->details.communicator.queue_head; NULL != queue; 8989 for (struct Queue *queue = tc->details.communicator.queue_head; NULL != queue;
8953 queue = queue->next_client) 8990 queue = queue->next_client)
8954 { 8991 {
8955 if (0 != GNUNET_memcmp (&queue->neighbour->pid, &sma->receiver)) 8992 if (0 != GNUNET_memcmp (&queue->neighbour->pid, &sma->receiver))
8956 continue; 8993 continue;
8994 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
8995 "Found PID %s\n",
8996 GNUNET_i2s (&queue->neighbour->pid));
8997
8998
8957 for (struct QueueEntry *qep = queue->queue_head; NULL != qep; 8999 for (struct QueueEntry *qep = queue->queue_head; NULL != qep;
8958 qep = qep->next) 9000 qep = qep->next)
8959 { 9001 {
9002 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
9003 "QueueEntry MID: %lu, Ack MID: %lu\n",
9004 qep->mid, sma->mid);
8960 if (qep->mid != sma->mid) 9005 if (qep->mid != sma->mid)
8961 continue; 9006 continue;
8962 qe = qep; 9007 qe = qep;
8963 break; 9008 break;
8964 } 9009 }
8965 break;
8966 } 9010 }
8967 if (NULL == qe) 9011 if (NULL == qe)
8968 { 9012 {
@@ -9333,6 +9377,7 @@ start_dv_learn (void *cls)
9333 return; /* lost all connectivity, cannot do learning */ 9377 return; /* lost all connectivity, cannot do learning */
9334 qqc.quality_count = 0; 9378 qqc.quality_count = 0;
9335 qqc.num_queues = 0; 9379 qqc.num_queues = 0;
9380 qqc.k = GNUNET_CONTAINER_multipeermap_size (neighbours);
9336 GNUNET_CONTAINER_multipeermap_iterate (neighbours, 9381 GNUNET_CONTAINER_multipeermap_iterate (neighbours,
9337 &check_connection_quality, 9382 &check_connection_quality,
9338 &qqc); 9383 &qqc);
@@ -9352,7 +9397,7 @@ start_dv_learn (void *cls)
9352 return; 9397 return;
9353 } 9398 }
9354 /* remove old entries in #dvlearn_map if it has grown too big */ 9399 /* remove old entries in #dvlearn_map if it has grown too big */
9355 while (MAX_DV_LEARN_PENDING >= 9400 while (MAX_DV_LEARN_PENDING <=
9356 GNUNET_CONTAINER_multishortmap_size (dvlearn_map)) 9401 GNUNET_CONTAINER_multishortmap_size (dvlearn_map))
9357 { 9402 {
9358 lle = lle_tail; 9403 lle = lle_tail;
diff --git a/src/transport/test_transport_api2_tcp_peer1.conf b/src/transport/test_transport_api2_tcp_peer1.conf
index 5b5fcb55b..36e00c00f 100644
--- a/src/transport/test_transport_api2_tcp_peer1.conf
+++ b/src/transport/test_transport_api2_tcp_peer1.conf
@@ -5,6 +5,7 @@ GNUNET_TEST_HOME = $GNUNET_TMP/test-transport/api-tcp-p1/
5[transport] 5[transport]
6BINARY = gnunet-service-tng 6BINARY = gnunet-service-tng
7PLUGINS = tcp 7PLUGINS = tcp
8PREFIX = valgrind --log-file=/tmp/vg_peer1-%p
8 9
9[communicator-tcp] 10[communicator-tcp]
10BINARY = gnunet-communicator-tcp 11BINARY = gnunet-communicator-tcp
diff --git a/src/transport/test_transport_api2_tcp_peer2.conf b/src/transport/test_transport_api2_tcp_peer2.conf
index 42d7c7b7e..f4de8df8b 100644
--- a/src/transport/test_transport_api2_tcp_peer2.conf
+++ b/src/transport/test_transport_api2_tcp_peer2.conf
@@ -4,6 +4,7 @@ GNUNET_TEST_HOME = $GNUNET_TMP/test-transport/api-tcp-p2/
4 4
5[transport] 5[transport]
6BINARY = gnunet-service-tng 6BINARY = gnunet-service-tng
7PREFIX = valgrind --log-file=/tmp/vg_peer2-%p
7 8
8[communicator-tcp] 9[communicator-tcp]
9BINARY = gnunet-communicator-tcp 10BINARY = gnunet-communicator-tcp
diff --git a/src/transport/test_transport_api_tcp_peer1.conf b/src/transport/test_transport_api_tcp_peer1.conf
index eabd6b701..1a46cf227 100644
--- a/src/transport/test_transport_api_tcp_peer1.conf
+++ b/src/transport/test_transport_api_tcp_peer1.conf
@@ -4,6 +4,8 @@ GNUNET_TEST_HOME = $GNUNET_TMP/test-transport/api-tcp-p1/
4 4
5[transport] 5[transport]
6PLUGINS = tcp 6PLUGINS = tcp
7PREFIX = valgrind --log-file=/tmp/vg_peer1
8START_ON_DEMAND = NO
7 9
8#[transport] 10#[transport]
9#PREFIX = valgrind 11#PREFIX = valgrind
diff --git a/src/transport/test_transport_api_tcp_peer2.conf b/src/transport/test_transport_api_tcp_peer2.conf
index 58ce0777f..934fe460f 100644
--- a/src/transport/test_transport_api_tcp_peer2.conf
+++ b/src/transport/test_transport_api_tcp_peer2.conf
@@ -4,6 +4,8 @@ GNUNET_TEST_HOME = $GNUNET_TMP/test-transport/api-tcp-p2/
4 4
5[transport] 5[transport]
6PLUGINS = tcp 6PLUGINS = tcp
7PREFIX = valgrind --log-file=/tmp/vg_peer2
8START_ON_DEMAND = NO
7 9
8#[transport] 10#[transport]
9#PREFIX = valgrind 11#PREFIX = valgrind
diff --git a/src/transport/transport-testing2.c b/src/transport/transport-testing2.c
index d9f1d5e56..23173e763 100644
--- a/src/transport/transport-testing2.c
+++ b/src/transport/transport-testing2.c
@@ -536,7 +536,7 @@ GNUNET_TRANSPORT_TESTING_start_peer (struct
536 p->ah = GNUNET_TRANSPORT_application_init (p->cfg); 536 p->ah = GNUNET_TRANSPORT_application_init (p->cfg);
537 GNUNET_assert (NULL != p->ah); 537 GNUNET_assert (NULL != p->ah);
538 // FIXME Error handleing 538 // FIXME Error handleing
539 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, 539 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 10),
540 retrieve_hello, 540 retrieve_hello,
541 p); 541 p);
542 //GNUNET_assert (NULL != p->pic); 542 //GNUNET_assert (NULL != p->pic);
diff --git a/src/util/time.c b/src/util/time.c
index 9e41305f1..c1ad5e618 100644
--- a/src/util/time.c
+++ b/src/util/time.c
@@ -779,7 +779,7 @@ GNUNET_TIME_year_to_time (unsigned int year)
779 779
780/** 780/**
781 * Randomized exponential back-off, starting at 1 ms 781 * Randomized exponential back-off, starting at 1 ms
782 * and going up by a factor of 2+r, where 0 <= r <= 0.5, up 782 * and going up by a factor of 2+r, where 0 <= r < 0.5, up
783 * to a maximum of the given threshold. 783 * to a maximum of the given threshold.
784 * 784 *
785 * @param r current backoff time, initially zero 785 * @param r current backoff time, initially zero
@@ -809,7 +809,7 @@ GNUNET_TIME_randomized_backoff (struct GNUNET_TIME_Relative rt,
809struct GNUNET_TIME_Relative 809struct GNUNET_TIME_Relative
810GNUNET_TIME_randomize (struct GNUNET_TIME_Relative r) 810GNUNET_TIME_randomize (struct GNUNET_TIME_Relative r)
811{ 811{
812 double d = ((rand () % 1001) - 500) / 1000.0; 812 double d = ((rand () % 1001) + 500) / 1000.0;
813 813
814 return relative_multiply_double (r, d); 814 return relative_multiply_double (r, d);
815} 815}