diff options
Diffstat (limited to 'src/transport/gnunet-service-transport_validation.c')
-rw-r--r-- | src/transport/gnunet-service-transport_validation.c | 146 |
1 files changed, 68 insertions, 78 deletions
diff --git a/src/transport/gnunet-service-transport_validation.c b/src/transport/gnunet-service-transport_validation.c index 006a318f6..641214b39 100644 --- a/src/transport/gnunet-service-transport_validation.c +++ b/src/transport/gnunet-service-transport_validation.c | |||
@@ -333,9 +333,7 @@ validation_entry_match (void *cls, const GNUNET_HashCode * key, void *value) | |||
333 | struct ValidationEntryMatchContext *vemc = cls; | 333 | struct ValidationEntryMatchContext *vemc = cls; |
334 | struct ValidationEntry *ve = value; | 334 | struct ValidationEntry *ve = value; |
335 | 335 | ||
336 | if (0 == | 336 | if (0 == GNUNET_HELLO_address_cmp (ve->address, vemc->address)) |
337 | GNUNET_HELLO_address_cmp (ve->address, | ||
338 | vemc->address)) | ||
339 | { | 337 | { |
340 | vemc->ve = ve; | 338 | vemc->ve = ve; |
341 | return GNUNET_NO; | 339 | return GNUNET_NO; |
@@ -397,15 +395,13 @@ timeout_hello_validation (void *cls, | |||
397 | struct GNUNET_TIME_Relative left; | 395 | struct GNUNET_TIME_Relative left; |
398 | 396 | ||
399 | ve->timeout_task = GNUNET_SCHEDULER_NO_TASK; | 397 | ve->timeout_task = GNUNET_SCHEDULER_NO_TASK; |
400 | max = GNUNET_TIME_absolute_max (ve->valid_until, | 398 | max = GNUNET_TIME_absolute_max (ve->valid_until, ve->revalidation_block); |
401 | ve->revalidation_block); | ||
402 | left = GNUNET_TIME_absolute_get_remaining (max); | 399 | left = GNUNET_TIME_absolute_get_remaining (max); |
403 | if (left.rel_value > 0) | 400 | if (left.rel_value > 0) |
404 | { | 401 | { |
405 | /* should wait a bit longer */ | 402 | /* should wait a bit longer */ |
406 | ve->timeout_task = GNUNET_SCHEDULER_add_delayed (left, | 403 | ve->timeout_task = |
407 | &timeout_hello_validation, | 404 | GNUNET_SCHEDULER_add_delayed (left, &timeout_hello_validation, ve); |
408 | ve); | ||
409 | return; | 405 | return; |
410 | } | 406 | } |
411 | GNUNET_STATISTICS_update (GST_stats, | 407 | GNUNET_STATISTICS_update (GST_stats, |
@@ -443,10 +439,13 @@ transmit_ping_if_allowed (void *cls, const struct GNUNET_PeerIdentity *pid, | |||
443 | slen = strlen (ve->address->transport_name) + 1; | 439 | slen = strlen (ve->address->transport_name) + 1; |
444 | hello = GST_hello_get (); | 440 | hello = GST_hello_get (); |
445 | hsize = ntohs (hello->size); | 441 | hsize = ntohs (hello->size); |
446 | tsize = sizeof (struct TransportPingMessage) + ve->address->address_length + slen + hsize; | 442 | tsize = |
443 | sizeof (struct TransportPingMessage) + ve->address->address_length + | ||
444 | slen + hsize; | ||
447 | 445 | ||
448 | ping.header.size = | 446 | ping.header.size = |
449 | htons (sizeof (struct TransportPingMessage) + ve->address->address_length + slen); | 447 | htons (sizeof (struct TransportPingMessage) + |
448 | ve->address->address_length + slen); | ||
450 | ping.header.type = htons (GNUNET_MESSAGE_TYPE_TRANSPORT_PING); | 449 | ping.header.type = htons (GNUNET_MESSAGE_TYPE_TRANSPORT_PING); |
451 | ping.challenge = htonl (ve->challenge); | 450 | ping.challenge = htonl (ve->challenge); |
452 | ping.target = *pid; | 451 | ping.target = *pid; |
@@ -459,7 +458,9 @@ transmit_ping_if_allowed (void *cls, const struct GNUNET_PeerIdentity *pid, | |||
459 | "HELLO", "PING", (unsigned int) tsize); | 458 | "HELLO", "PING", (unsigned int) tsize); |
460 | /* message too big (!?), get rid of HELLO */ | 459 | /* message too big (!?), get rid of HELLO */ |
461 | hsize = 0; | 460 | hsize = 0; |
462 | tsize = sizeof (struct TransportPingMessage) + ve->address->address_length + slen + hsize; | 461 | tsize = |
462 | sizeof (struct TransportPingMessage) + ve->address->address_length + | ||
463 | slen + hsize; | ||
463 | } | 464 | } |
464 | { | 465 | { |
465 | char message_buf[tsize]; | 466 | char message_buf[tsize]; |
@@ -481,8 +482,8 @@ transmit_ping_if_allowed (void *cls, const struct GNUNET_PeerIdentity *pid, | |||
481 | ret = | 482 | ret = |
482 | papi->send (papi->cls, pid, message_buf, tsize, PING_PRIORITY, | 483 | papi->send (papi->cls, pid, message_buf, tsize, PING_PRIORITY, |
483 | ACCEPTABLE_PING_DELAY, NULL /* no session */ , | 484 | ACCEPTABLE_PING_DELAY, NULL /* no session */ , |
484 | ve->address->address, ve->address->address_length, | 485 | ve->address->address, ve->address->address_length, |
485 | GNUNET_YES, NULL, NULL); | 486 | GNUNET_YES, NULL, NULL); |
486 | } | 487 | } |
487 | } | 488 | } |
488 | if (-1 != ret) | 489 | if (-1 != ret) |
@@ -515,12 +516,11 @@ revalidate_address (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
515 | ve->revalidation_task = GNUNET_SCHEDULER_NO_TASK; | 516 | ve->revalidation_task = GNUNET_SCHEDULER_NO_TASK; |
516 | delay = GNUNET_TIME_absolute_get_remaining (ve->revalidation_block); | 517 | delay = GNUNET_TIME_absolute_get_remaining (ve->revalidation_block); |
517 | /* How long until we can possibly permit the next PING? */ | 518 | /* How long until we can possibly permit the next PING? */ |
518 | canonical_delay = | 519 | canonical_delay = |
519 | (ve->in_use == GNUNET_YES) | 520 | (ve->in_use == |
520 | ? CONNECTED_PING_FREQUENCY | 521 | GNUNET_YES) ? CONNECTED_PING_FREQUENCY |
521 | : ( (GNUNET_TIME_absolute_get_remaining (ve->valid_until).rel_value > 0) | 522 | : ((GNUNET_TIME_absolute_get_remaining (ve->valid_until).rel_value > |
522 | ? VALIDATED_PING_FREQUENCY | 523 | 0) ? VALIDATED_PING_FREQUENCY : UNVALIDATED_PING_KEEPALIVE); |
523 | : UNVALIDATED_PING_KEEPALIVE); | ||
524 | if (delay.rel_value > canonical_delay.rel_value * 2) | 524 | if (delay.rel_value > canonical_delay.rel_value * 2) |
525 | { | 525 | { |
526 | /* situation changed, recalculate delay */ | 526 | /* situation changed, recalculate delay */ |
@@ -534,28 +534,28 @@ revalidate_address (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
534 | GNUNET_SCHEDULER_add_delayed (delay, &revalidate_address, ve); | 534 | GNUNET_SCHEDULER_add_delayed (delay, &revalidate_address, ve); |
535 | return; | 535 | return; |
536 | } | 536 | } |
537 | ve->revalidation_block = | 537 | ve->revalidation_block = GNUNET_TIME_relative_to_absolute (canonical_delay); |
538 | GNUNET_TIME_relative_to_absolute (canonical_delay); | ||
539 | 538 | ||
540 | /* schedule next PINGing with some extra random delay to avoid synchronous re-validations */ | 539 | /* schedule next PINGing with some extra random delay to avoid synchronous re-validations */ |
541 | rdelay = GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK, | 540 | rdelay = |
542 | canonical_delay.rel_value); | 541 | GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK, |
542 | canonical_delay.rel_value); | ||
543 | delay = | 543 | delay = |
544 | GNUNET_TIME_relative_add (canonical_delay, | 544 | GNUNET_TIME_relative_add (canonical_delay, |
545 | GNUNET_TIME_relative_multiply | 545 | GNUNET_TIME_relative_multiply |
546 | (GNUNET_TIME_UNIT_MILLISECONDS, rdelay)); | 546 | (GNUNET_TIME_UNIT_MILLISECONDS, rdelay)); |
547 | ve->revalidation_task = | 547 | ve->revalidation_task = |
548 | GNUNET_SCHEDULER_add_delayed (delay, &revalidate_address, ve); | 548 | GNUNET_SCHEDULER_add_delayed (delay, &revalidate_address, ve); |
549 | 549 | ||
550 | /* start PINGing by checking blacklist */ | 550 | /* start PINGing by checking blacklist */ |
551 | GNUNET_STATISTICS_update (GST_stats, | 551 | GNUNET_STATISTICS_update (GST_stats, |
552 | gettext_noop ("# address revalidations started"), 1, | 552 | gettext_noop ("# address revalidations started"), 1, |
553 | GNUNET_NO); | 553 | GNUNET_NO); |
554 | bc = GST_blacklist_test_allowed (&ve->pid, ve->address->transport_name, | 554 | bc = GST_blacklist_test_allowed (&ve->pid, ve->address->transport_name, |
555 | &transmit_ping_if_allowed, ve); | 555 | &transmit_ping_if_allowed, ve); |
556 | if (NULL != bc) | 556 | if (NULL != bc) |
557 | ve->bc = bc; /* only set 'bc' if 'transmit_ping_if_allowed' was not already | 557 | ve->bc = bc; /* only set 'bc' if 'transmit_ping_if_allowed' was not already |
558 | called... */ | 558 | * called... */ |
559 | } | 559 | } |
560 | 560 | ||
561 | 561 | ||
@@ -592,9 +592,11 @@ find_validation_entry (const struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded | |||
592 | ve->latency = GNUNET_TIME_UNIT_FOREVER_REL; | 592 | ve->latency = GNUNET_TIME_UNIT_FOREVER_REL; |
593 | ve->challenge = | 593 | ve->challenge = |
594 | GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_NONCE, UINT32_MAX); | 594 | GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_NONCE, UINT32_MAX); |
595 | ve->timeout_task = GNUNET_SCHEDULER_add_delayed (UNVALIDATED_PING_KEEPALIVE, | 595 | ve->timeout_task = |
596 | &timeout_hello_validation, ve); | 596 | GNUNET_SCHEDULER_add_delayed (UNVALIDATED_PING_KEEPALIVE, |
597 | GNUNET_CONTAINER_multihashmap_put (validation_map, &address->peer.hashPubKey, ve, | 597 | &timeout_hello_validation, ve); |
598 | GNUNET_CONTAINER_multihashmap_put (validation_map, &address->peer.hashPubKey, | ||
599 | ve, | ||
598 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); | 600 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); |
599 | ve->expecting_pong = GNUNET_NO; | 601 | ve->expecting_pong = GNUNET_NO; |
600 | return ve; | 602 | return ve; |
@@ -611,8 +613,7 @@ find_validation_entry (const struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded | |||
611 | * @return GNUNET_OK (keep the address) | 613 | * @return GNUNET_OK (keep the address) |
612 | */ | 614 | */ |
613 | static int | 615 | static int |
614 | add_valid_address (void *cls, | 616 | add_valid_address (void *cls, const struct GNUNET_HELLO_Address *address, |
615 | const struct GNUNET_HELLO_Address *address, | ||
616 | struct GNUNET_TIME_Absolute expiration) | 617 | struct GNUNET_TIME_Absolute expiration) |
617 | { | 618 | { |
618 | const struct GNUNET_HELLO_Message *hello = cls; | 619 | const struct GNUNET_HELLO_Message *hello = cls; |
@@ -628,7 +629,7 @@ add_valid_address (void *cls, | |||
628 | GNUNET_break (0); | 629 | GNUNET_break (0); |
629 | return GNUNET_OK; /* invalid HELLO !? */ | 630 | return GNUNET_OK; /* invalid HELLO !? */ |
630 | } | 631 | } |
631 | if (0 == memcmp(&GST_my_identity, &pid, sizeof (struct GNUNET_PeerIdentity))) | 632 | if (0 == memcmp (&GST_my_identity, &pid, sizeof (struct GNUNET_PeerIdentity))) |
632 | { | 633 | { |
633 | /* Peerinfo returned own identity, skip validation */ | 634 | /* Peerinfo returned own identity, skip validation */ |
634 | return GNUNET_OK; | 635 | return GNUNET_OK; |
@@ -639,8 +640,7 @@ add_valid_address (void *cls, | |||
639 | 640 | ||
640 | if (GNUNET_SCHEDULER_NO_TASK == ve->revalidation_task) | 641 | if (GNUNET_SCHEDULER_NO_TASK == ve->revalidation_task) |
641 | ve->revalidation_task = GNUNET_SCHEDULER_add_now (&revalidate_address, ve); | 642 | ve->revalidation_task = GNUNET_SCHEDULER_add_now (&revalidate_address, ve); |
642 | GNUNET_ATS_address_update (GST_ats, address, NULL, NULL, | 643 | GNUNET_ATS_address_update (GST_ats, address, NULL, NULL, 0); |
643 | 0); | ||
644 | return GNUNET_OK; | 644 | return GNUNET_OK; |
645 | } | 645 | } |
646 | 646 | ||
@@ -716,8 +716,7 @@ GST_validation_stop () | |||
716 | static void | 716 | static void |
717 | multicast_pong (void *cls, | 717 | multicast_pong (void *cls, |
718 | const struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded | 718 | const struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded |
719 | *public_key, | 719 | *public_key, struct GNUNET_TIME_Absolute valid_until, |
720 | struct GNUNET_TIME_Absolute valid_until, | ||
721 | struct GNUNET_TIME_Absolute validation_block, | 720 | struct GNUNET_TIME_Absolute validation_block, |
722 | const struct GNUNET_HELLO_Address *address) | 721 | const struct GNUNET_HELLO_Address *address) |
723 | { | 722 | { |
@@ -729,8 +728,7 @@ multicast_pong (void *cls, | |||
729 | return; | 728 | return; |
730 | (void) papi->send (papi->cls, &address->peer, (const char *) pong, | 729 | (void) papi->send (papi->cls, &address->peer, (const char *) pong, |
731 | ntohs (pong->header.size), PONG_PRIORITY, | 730 | ntohs (pong->header.size), PONG_PRIORITY, |
732 | ACCEPTABLE_PING_DELAY, NULL, | 731 | ACCEPTABLE_PING_DELAY, NULL, address->address, |
733 | address->address, | ||
734 | address->address_length, GNUNET_YES, NULL, NULL); | 732 | address->address_length, GNUNET_YES, NULL, NULL); |
735 | } | 733 | } |
736 | 734 | ||
@@ -747,7 +745,7 @@ void | |||
747 | GST_validation_handle_ping (const struct GNUNET_PeerIdentity *sender, | 745 | GST_validation_handle_ping (const struct GNUNET_PeerIdentity *sender, |
748 | const struct GNUNET_MessageHeader *hdr, | 746 | const struct GNUNET_MessageHeader *hdr, |
749 | const struct GNUNET_HELLO_Address *sender_address, | 747 | const struct GNUNET_HELLO_Address *sender_address, |
750 | struct Session *session) | 748 | struct Session *session) |
751 | { | 749 | { |
752 | const struct TransportPingMessage *ping; | 750 | const struct TransportPingMessage *ping; |
753 | struct TransportPongMessage *pong; | 751 | struct TransportPongMessage *pong; |
@@ -804,8 +802,7 @@ GST_validation_handle_ping (const struct GNUNET_PeerIdentity *sender, | |||
804 | address.transport_name = addr; | 802 | address.transport_name = addr; |
805 | address.peer = *sender; | 803 | address.peer = *sender; |
806 | if (GNUNET_YES != | 804 | if (GNUNET_YES != |
807 | GST_hello_test_address (&address, &sig_cache, | 805 | GST_hello_test_address (&address, &sig_cache, &sig_cache_exp)) |
808 | &sig_cache_exp)) | ||
809 | { | 806 | { |
810 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | 807 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, |
811 | _ | 808 | _ |
@@ -867,10 +864,8 @@ GST_validation_handle_ping (const struct GNUNET_PeerIdentity *sender, | |||
867 | ret = | 864 | ret = |
868 | papi->send (papi->cls, sender, (const char *) pong, | 865 | papi->send (papi->cls, sender, (const char *) pong, |
869 | ntohs (pong->header.size), PONG_PRIORITY, | 866 | ntohs (pong->header.size), PONG_PRIORITY, |
870 | ACCEPTABLE_PING_DELAY, session, | 867 | ACCEPTABLE_PING_DELAY, session, sender_address->address, |
871 | sender_address->address, | 868 | sender_address->address_length, GNUNET_SYSERR, NULL, NULL); |
872 | sender_address->address_length, | ||
873 | GNUNET_SYSERR, NULL, NULL); | ||
874 | if (ret != -1) | 869 | if (ret != -1) |
875 | { | 870 | { |
876 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 871 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
@@ -922,9 +917,9 @@ struct ValidateAddressContext | |||
922 | * @return GNUNET_OK (keep the address) | 917 | * @return GNUNET_OK (keep the address) |
923 | */ | 918 | */ |
924 | static int | 919 | static int |
925 | validate_address_iterator (void *cls, | 920 | validate_address_iterator (void *cls, |
926 | const struct GNUNET_HELLO_Address *address, | 921 | const struct GNUNET_HELLO_Address *address, |
927 | struct GNUNET_TIME_Absolute expiration) | 922 | struct GNUNET_TIME_Absolute expiration) |
928 | { | 923 | { |
929 | const struct ValidateAddressContext *vac = cls; | 924 | const struct ValidateAddressContext *vac = cls; |
930 | struct ValidationEntry *ve; | 925 | struct ValidationEntry *ve; |
@@ -933,8 +928,7 @@ validate_address_iterator (void *cls, | |||
933 | return GNUNET_OK; /* expired */ | 928 | return GNUNET_OK; /* expired */ |
934 | ve = find_validation_entry (&vac->public_key, address); | 929 | ve = find_validation_entry (&vac->public_key, address); |
935 | if (GNUNET_SCHEDULER_NO_TASK == ve->revalidation_task) | 930 | if (GNUNET_SCHEDULER_NO_TASK == ve->revalidation_task) |
936 | ve->revalidation_task = GNUNET_SCHEDULER_add_now (&revalidate_address, | 931 | ve->revalidation_task = GNUNET_SCHEDULER_add_now (&revalidate_address, ve); |
937 | ve); | ||
938 | return GNUNET_OK; | 932 | return GNUNET_OK; |
939 | } | 933 | } |
940 | 934 | ||
@@ -956,8 +950,7 @@ add_valid_peer_address (void *cls, size_t max, void *buf) | |||
956 | if (GNUNET_YES == ve->copied) | 950 | if (GNUNET_YES == ve->copied) |
957 | return 0; /* terminate */ | 951 | return 0; /* terminate */ |
958 | ve->copied = GNUNET_YES; | 952 | ve->copied = GNUNET_YES; |
959 | return GNUNET_HELLO_add_address (ve->address, ve->valid_until, | 953 | return GNUNET_HELLO_add_address (ve->address, ve->valid_until, buf, max); |
960 | buf, max); | ||
961 | } | 954 | } |
962 | 955 | ||
963 | 956 | ||
@@ -1056,7 +1049,7 @@ GST_validation_handle_pong (const struct GNUNET_PeerIdentity *sender, | |||
1056 | struct GNUNET_ATS_Information ats; | 1049 | struct GNUNET_ATS_Information ats; |
1057 | 1050 | ||
1058 | ats.type = htonl (GNUNET_ATS_QUALITY_NET_DELAY); | 1051 | ats.type = htonl (GNUNET_ATS_QUALITY_NET_DELAY); |
1059 | ats.value = htonl ((uint32_t) ve->latency.rel_value); | 1052 | ats.value = htonl ((uint32_t) ve->latency.rel_value); |
1060 | GNUNET_ATS_address_update (GST_ats, ve->address, NULL, &ats, 1); | 1053 | GNUNET_ATS_address_update (GST_ats, ve->address, NULL, &ats, 1); |
1061 | } | 1054 | } |
1062 | /* build HELLO to store in PEERINFO */ | 1055 | /* build HELLO to store in PEERINFO */ |
@@ -1102,7 +1095,8 @@ GST_validation_handle_hello (const struct GNUNET_MessageHeader *hello) | |||
1102 | GNUNET_free (h); | 1095 | GNUNET_free (h); |
1103 | GNUNET_assert (NULL == | 1096 | GNUNET_assert (NULL == |
1104 | GNUNET_HELLO_iterate_addresses (hm, GNUNET_NO, | 1097 | GNUNET_HELLO_iterate_addresses (hm, GNUNET_NO, |
1105 | &validate_address_iterator, &vac)); | 1098 | &validate_address_iterator, |
1099 | &vac)); | ||
1106 | } | 1100 | } |
1107 | 1101 | ||
1108 | 1102 | ||
@@ -1138,8 +1132,8 @@ iterate_addresses (void *cls, const GNUNET_HashCode * key, void *value) | |||
1138 | struct IteratorContext *ic = cls; | 1132 | struct IteratorContext *ic = cls; |
1139 | struct ValidationEntry *ve = value; | 1133 | struct ValidationEntry *ve = value; |
1140 | 1134 | ||
1141 | ic->cb (ic->cb_cls, &ve->public_key, ve->valid_until, | 1135 | ic->cb (ic->cb_cls, &ve->public_key, ve->valid_until, ve->revalidation_block, |
1142 | ve->revalidation_block, ve->address); | 1136 | ve->address); |
1143 | return GNUNET_OK; | 1137 | return GNUNET_OK; |
1144 | } | 1138 | } |
1145 | 1139 | ||
@@ -1178,16 +1172,15 @@ GST_validation_get_addresses (const struct GNUNET_PeerIdentity *target, | |||
1178 | */ | 1172 | */ |
1179 | void | 1173 | void |
1180 | GST_validation_set_address_use (const struct GNUNET_PeerIdentity *sender, | 1174 | GST_validation_set_address_use (const struct GNUNET_PeerIdentity *sender, |
1181 | const struct GNUNET_HELLO_Address *address, | 1175 | const struct GNUNET_HELLO_Address *address, |
1182 | struct Session *session, | 1176 | struct Session *session, int in_use) |
1183 | int in_use) | ||
1184 | { | 1177 | { |
1185 | struct ValidationEntry *ve; | 1178 | struct ValidationEntry *ve; |
1186 | 1179 | ||
1187 | if (NULL != address) | 1180 | if (NULL != address) |
1188 | ve = find_validation_entry (NULL, address); | 1181 | ve = find_validation_entry (NULL, address); |
1189 | else | 1182 | else |
1190 | ve = NULL; /* FIXME: lookup based on session... */ | 1183 | ve = NULL; /* FIXME: lookup based on session... */ |
1191 | if (NULL == ve) | 1184 | if (NULL == ve) |
1192 | { | 1185 | { |
1193 | /* this can happen for inbound connections (sender_address_len == 0); */ | 1186 | /* this can happen for inbound connections (sender_address_len == 0); */ |
@@ -1195,19 +1188,16 @@ GST_validation_set_address_use (const struct GNUNET_PeerIdentity *sender, | |||
1195 | } | 1188 | } |
1196 | if (ve->in_use == in_use) | 1189 | if (ve->in_use == in_use) |
1197 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 1190 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, |
1198 | "GST_validation_set_address_use: %s %s: ve->in_use %i <-> in_use %i\n", | 1191 | "GST_validation_set_address_use: %s %s: ve->in_use %i <-> in_use %i\n", |
1199 | GNUNET_i2s(sender), | 1192 | GNUNET_i2s (sender), GST_plugins_a2s (address), ve->in_use, |
1200 | GST_plugins_a2s(address), | 1193 | in_use); |
1201 | ve->in_use, | 1194 | GNUNET_break (ve->in_use != in_use); /* should be different... */ |
1202 | in_use); | ||
1203 | GNUNET_break (ve->in_use != in_use); /* should be different... */ | ||
1204 | ve->in_use = in_use; | 1195 | ve->in_use = in_use; |
1205 | if (in_use == GNUNET_YES) | 1196 | if (in_use == GNUNET_YES) |
1206 | { | 1197 | { |
1207 | /* from now on, higher frequeny, so reschedule now */ | 1198 | /* from now on, higher frequeny, so reschedule now */ |
1208 | GNUNET_SCHEDULER_cancel (ve->revalidation_task); | 1199 | GNUNET_SCHEDULER_cancel (ve->revalidation_task); |
1209 | ve->revalidation_task = | 1200 | ve->revalidation_task = GNUNET_SCHEDULER_add_now (&revalidate_address, ve); |
1210 | GNUNET_SCHEDULER_add_now (&revalidate_address, ve); | ||
1211 | } | 1201 | } |
1212 | } | 1202 | } |
1213 | 1203 | ||
@@ -1218,20 +1208,20 @@ GST_validation_set_address_use (const struct GNUNET_PeerIdentity *sender, | |||
1218 | * | 1208 | * |
1219 | * @param sender peer | 1209 | * @param sender peer |
1220 | * @param address the address | 1210 | * @param address the address |
1221 | * @param session session | 1211 | * @param session session |
1222 | * @return observed latency of the address, FOREVER if the address was | 1212 | * @return observed latency of the address, FOREVER if the address was |
1223 | * never successfully validated | 1213 | * never successfully validated |
1224 | */ | 1214 | */ |
1225 | struct GNUNET_TIME_Relative | 1215 | struct GNUNET_TIME_Relative |
1226 | GST_validation_get_address_latency (const struct GNUNET_PeerIdentity *sender, | 1216 | GST_validation_get_address_latency (const struct GNUNET_PeerIdentity *sender, |
1227 | const struct GNUNET_HELLO_Address *address, | 1217 | const struct GNUNET_HELLO_Address *address, |
1228 | struct Session *session) | 1218 | struct Session *session) |
1229 | { | 1219 | { |
1230 | struct ValidationEntry *ve; | 1220 | struct ValidationEntry *ve; |
1231 | 1221 | ||
1232 | if (NULL == address) | 1222 | if (NULL == address) |
1233 | { | 1223 | { |
1234 | GNUNET_break (0); // FIXME: support having latency only with session... | 1224 | GNUNET_break (0); // FIXME: support having latency only with session... |
1235 | return GNUNET_TIME_UNIT_FOREVER_REL; | 1225 | return GNUNET_TIME_UNIT_FOREVER_REL; |
1236 | } | 1226 | } |
1237 | ve = find_validation_entry (NULL, address); | 1227 | ve = find_validation_entry (NULL, address); |