diff options
author | Christian Grothoff <christian@grothoff.org> | 2014-06-16 10:10:59 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2014-06-16 10:10:59 +0000 |
commit | 1eef01cd60f92a3d77061d655c0217bd6f9ffce4 (patch) | |
tree | db83ba950eb0ece1efb9b682e379ccd1d0dd4b72 /src/ats/gnunet-service-ats_addresses.c | |
parent | c1d89ed3cf92fa2492a5639e725aadd74742f135 (diff) | |
download | gnunet-1eef01cd60f92a3d77061d655c0217bd6f9ffce4.tar.gz gnunet-1eef01cd60f92a3d77061d655c0217bd6f9ffce4.zip |
notify performance monitors about destroyed addresses (for #3406)
Diffstat (limited to 'src/ats/gnunet-service-ats_addresses.c')
-rw-r--r-- | src/ats/gnunet-service-ats_addresses.c | 203 |
1 files changed, 133 insertions, 70 deletions
diff --git a/src/ats/gnunet-service-ats_addresses.c b/src/ats/gnunet-service-ats_addresses.c index ca8afecd9..93b9514fb 100644 --- a/src/ats/gnunet-service-ats_addresses.c +++ b/src/ats/gnunet-service-ats_addresses.c | |||
@@ -336,6 +336,13 @@ struct GAS_Addresses_Handle | |||
336 | char *plugin; | 336 | char *plugin; |
337 | }; | 337 | }; |
338 | 338 | ||
339 | |||
340 | /** | ||
341 | * Value we pass for zero bandwidth. | ||
342 | */ | ||
343 | const static struct GNUNET_BANDWIDTH_Value32NBO zero_bw; | ||
344 | |||
345 | |||
339 | /** | 346 | /** |
340 | * Disassemble ATS information and update performance information in address | 347 | * Disassemble ATS information and update performance information in address |
341 | * | 348 | * |
@@ -343,23 +350,23 @@ struct GAS_Addresses_Handle | |||
343 | * | 350 | * |
344 | * @param dest destination address | 351 | * @param dest destination address |
345 | * @param update source ATS information | 352 | * @param update source ATS information |
346 | * @param update_count number of ATS information | 353 | * @param update_count number of ATS information in @a update |
347 | * @param delta_dest ats performance information which were updated | 354 | * @param delta_dest ats performance information which were updated |
348 | * including previous value | 355 | * including previous value |
349 | * @param delta_count number of ATS information in the delta | 356 | * @param delta_count number of ATS information in the @a delta_dest |
350 | * @return GNUNET_YES if address was address updated, GNUNET_NO otherwise | 357 | * @return #GNUNET_YES if address was address updated, GNUNET_NO otherwise |
351 | */ | 358 | */ |
352 | static unsigned int | 359 | static unsigned int |
353 | disassemble_ats_information (struct ATS_Address *dest, | 360 | disassemble_ats_information (struct ATS_Address *dest, |
354 | const struct GNUNET_ATS_Information *update, uint32_t update_count, | 361 | const struct GNUNET_ATS_Information *update, |
355 | struct GNUNET_ATS_Information **delta_dest, uint32_t *delta_count) | 362 | uint32_t update_count, |
363 | struct GNUNET_ATS_Information **delta_dest, | ||
364 | uint32_t *delta_count) | ||
356 | { | 365 | { |
357 | |||
358 | int c1; | 366 | int c1; |
359 | int c2; | 367 | int c2; |
360 | int found; | 368 | int found; |
361 | int change; | 369 | int change; |
362 | |||
363 | struct GNUNET_ATS_Information add_atsi[update_count]; | 370 | struct GNUNET_ATS_Information add_atsi[update_count]; |
364 | struct GNUNET_ATS_Information delta_atsi[update_count]; | 371 | struct GNUNET_ATS_Information delta_atsi[update_count]; |
365 | struct GNUNET_ATS_Information *tmp_atsi; | 372 | struct GNUNET_ATS_Information *tmp_atsi; |
@@ -452,6 +459,7 @@ disassemble_ats_information (struct ATS_Address *dest, | |||
452 | return change; | 459 | return change; |
453 | } | 460 | } |
454 | 461 | ||
462 | |||
455 | /** | 463 | /** |
456 | * Free the given address | 464 | * Free the given address |
457 | * | 465 | * |
@@ -504,10 +512,13 @@ create_address (const struct GNUNET_PeerIdentity *peer, | |||
504 | for (c2 = 0; c2 < GAS_normalization_queue_length; c2++) | 512 | for (c2 = 0; c2 < GAS_normalization_queue_length; c2++) |
505 | aa->atsin[c1].atsi_abs[c2] = GNUNET_ATS_VALUE_UNDEFINED; | 513 | aa->atsin[c1].atsi_abs[c2] = GNUNET_ATS_VALUE_UNDEFINED; |
506 | } | 514 | } |
507 | |||
508 | return aa; | 515 | return aa; |
509 | } | 516 | } |
510 | 517 | ||
518 | |||
519 | /** | ||
520 | * Closure for #compare_address_it() | ||
521 | */ | ||
511 | struct CompareAddressContext | 522 | struct CompareAddressContext |
512 | { | 523 | { |
513 | const struct ATS_Address *search; | 524 | const struct ATS_Address *search; |
@@ -599,6 +610,7 @@ compare_address_it (void *cls, | |||
599 | return GNUNET_NO; /* Stop iteration since we have an exact address */ | 610 | return GNUNET_NO; /* Stop iteration since we have an exact address */ |
600 | } | 611 | } |
601 | 612 | ||
613 | |||
602 | /** | 614 | /** |
603 | * Find an existing equivalent address record. | 615 | * Find an existing equivalent address record. |
604 | * Compares by peer identity and network address OR by session ID | 616 | * Compares by peer identity and network address OR by session ID |
@@ -611,7 +623,8 @@ compare_address_it (void *cls, | |||
611 | */ | 623 | */ |
612 | struct ATS_Address * | 624 | struct ATS_Address * |
613 | find_equivalent_address (struct GAS_Addresses_Handle *handle, | 625 | find_equivalent_address (struct GAS_Addresses_Handle *handle, |
614 | const struct GNUNET_PeerIdentity *peer, const struct ATS_Address *addr) | 626 | const struct GNUNET_PeerIdentity *peer, |
627 | const struct ATS_Address *addr) | ||
615 | { | 628 | { |
616 | struct CompareAddressContext cac; | 629 | struct CompareAddressContext cac; |
617 | 630 | ||
@@ -643,29 +656,34 @@ find_equivalent_address (struct GAS_Addresses_Handle *handle, | |||
643 | 656 | ||
644 | static struct ATS_Address * | 657 | static struct ATS_Address * |
645 | find_exact_address (struct GAS_Addresses_Handle *handle, | 658 | find_exact_address (struct GAS_Addresses_Handle *handle, |
646 | const struct GNUNET_PeerIdentity *peer, | 659 | const struct GNUNET_PeerIdentity *peer, |
647 | const char *plugin_name, | 660 | const char *plugin_name, |
648 | const void *plugin_addr, | 661 | const void *plugin_addr, |
649 | size_t plugin_addr_len, | 662 | size_t plugin_addr_len, |
650 | uint32_t local_address_info, | 663 | uint32_t local_address_info, |
651 | uint32_t session_id) | 664 | uint32_t session_id) |
652 | { | 665 | { |
653 | struct ATS_Address *aa; | 666 | struct ATS_Address *aa; |
654 | struct ATS_Address *ea; | 667 | struct ATS_Address *ea; |
655 | 668 | ||
656 | aa = create_address (peer, plugin_name, plugin_addr, plugin_addr_len, | 669 | aa = create_address (peer, |
657 | local_address_info, session_id); | 670 | plugin_name, |
671 | plugin_addr, | ||
672 | plugin_addr_len, | ||
673 | local_address_info, | ||
674 | session_id); | ||
658 | 675 | ||
659 | /* Get existing address or address with session == 0 */ | 676 | /* Get existing address or address with session == 0 */ |
660 | ea = find_equivalent_address (handle, peer, aa); | 677 | ea = find_equivalent_address (handle, peer, aa); |
661 | free_address (aa); | 678 | free_address (aa); |
662 | if (ea == NULL ) | 679 | if (ea == NULL) |
663 | return NULL ; | 680 | return NULL; |
664 | else if (ea->session_id != session_id) | 681 | else if (ea->session_id != session_id) |
665 | return NULL ; | 682 | return NULL; |
666 | return ea; | 683 | return ea; |
667 | } | 684 | } |
668 | 685 | ||
686 | |||
669 | /** | 687 | /** |
670 | * Function allowing the solver to obtain normalized preference | 688 | * Function allowing the solver to obtain normalized preference |
671 | * values from solver | 689 | * values from solver |
@@ -675,11 +693,13 @@ find_exact_address (struct GAS_Addresses_Handle *handle, | |||
675 | * @return array of double values with |GNUNET_ATS_PreferenceCount| elements | 693 | * @return array of double values with |GNUNET_ATS_PreferenceCount| elements |
676 | */ | 694 | */ |
677 | const double * | 695 | const double * |
678 | get_preferences_cb (void *cls, const struct GNUNET_PeerIdentity *id) | 696 | get_preferences_cb (void *cls, |
697 | const struct GNUNET_PeerIdentity *id) | ||
679 | { | 698 | { |
680 | return GAS_normalization_get_preferences_by_peer (id); | 699 | return GAS_normalization_get_preferences_by_peer (id); |
681 | } | 700 | } |
682 | 701 | ||
702 | |||
683 | /** | 703 | /** |
684 | * Function allowing the solver to obtain normalized property | 704 | * Function allowing the solver to obtain normalized property |
685 | * values for an address from solver | 705 | * values for an address from solver |
@@ -694,6 +714,7 @@ get_property_cb (void *cls, const struct ATS_Address *address) | |||
694 | return GAS_normalization_get_properties ((struct ATS_Address *) address); | 714 | return GAS_normalization_get_properties ((struct ATS_Address *) address); |
695 | } | 715 | } |
696 | 716 | ||
717 | |||
697 | /** | 718 | /** |
698 | * Extract an ATS performance info from an address | 719 | * Extract an ATS performance info from an address |
699 | * | 720 | * |
@@ -718,6 +739,7 @@ get_performance_info (struct ATS_Address *address, uint32_t type) | |||
718 | return GNUNET_ATS_VALUE_UNDEFINED; | 739 | return GNUNET_ATS_VALUE_UNDEFINED; |
719 | } | 740 | } |
720 | 741 | ||
742 | |||
721 | /** | 743 | /** |
722 | * Add a new address for a peer. | 744 | * Add a new address for a peer. |
723 | * | 745 | * |
@@ -725,22 +747,22 @@ get_performance_info (struct ATS_Address *address, uint32_t type) | |||
725 | * @param peer peer | 747 | * @param peer peer |
726 | * @param plugin_name transport plugin name | 748 | * @param plugin_name transport plugin name |
727 | * @param plugin_addr plugin address | 749 | * @param plugin_addr plugin address |
728 | * @param plugin_addr_len length of the plugin address | 750 | * @param plugin_addr_len length of the plugin address in @a plugin_addr |
729 | * @param local_address_info the local address for the address | 751 | * @param local_address_info the local address for the address |
730 | * @param session_id session id, can be 0 | 752 | * @param session_id session id, can be 0 |
731 | * @param atsi performance information for this address | 753 | * @param atsi performance information for this address |
732 | * @param atsi_count number of performance information contained | 754 | * @param atsi_count number of performance information contained in @a atsi |
733 | */ | 755 | */ |
734 | void | 756 | void |
735 | GAS_addresses_add (struct GAS_Addresses_Handle *handle, | 757 | GAS_addresses_add (struct GAS_Addresses_Handle *handle, |
736 | const struct GNUNET_PeerIdentity *peer, | 758 | const struct GNUNET_PeerIdentity *peer, |
737 | const char *plugin_name, | 759 | const char *plugin_name, |
738 | const void *plugin_addr, | 760 | const void *plugin_addr, |
739 | size_t plugin_addr_len, | 761 | size_t plugin_addr_len, |
740 | uint32_t local_address_info, | 762 | uint32_t local_address_info, |
741 | uint32_t session_id, | 763 | uint32_t session_id, |
742 | const struct GNUNET_ATS_Information *atsi, | 764 | const struct GNUNET_ATS_Information *atsi, |
743 | uint32_t atsi_count) | 765 | uint32_t atsi_count) |
744 | { | 766 | { |
745 | struct ATS_Address *new_address; | 767 | struct ATS_Address *new_address; |
746 | struct ATS_Address *existing_address; | 768 | struct ATS_Address *existing_address; |
@@ -750,16 +772,19 @@ GAS_addresses_add (struct GAS_Addresses_Handle *handle, | |||
750 | uint32_t previous_session; | 772 | uint32_t previous_session; |
751 | int c1; | 773 | int c1; |
752 | 774 | ||
753 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Received `%s' for peer `%s'\n", | 775 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, |
754 | "ADDRESS ADD", GNUNET_i2s (peer)); | 776 | "Received `%s' for peer `%s'\n", |
777 | "ADDRESS ADD", | ||
778 | GNUNET_i2s (peer)); | ||
755 | 779 | ||
756 | if (GNUNET_NO == handle->running) | 780 | if (GNUNET_NO == handle->running) |
757 | return; | 781 | return; |
758 | 782 | ||
759 | GNUNET_assert(NULL != handle->addresses); | 783 | GNUNET_assert(NULL != handle->addresses); |
760 | 784 | ||
761 | new_address = create_address (peer, plugin_name, plugin_addr, plugin_addr_len, | 785 | new_address = create_address (peer, plugin_name, |
762 | local_address_info, session_id); | 786 | plugin_addr, plugin_addr_len, |
787 | local_address_info, session_id); | ||
763 | atsi_delta = NULL; | 788 | atsi_delta = NULL; |
764 | disassemble_ats_information (new_address, atsi, atsi_count, &atsi_delta, | 789 | disassemble_ats_information (new_address, atsi, atsi_count, &atsi_delta, |
765 | &atsi_delta_count); | 790 | &atsi_delta_count); |
@@ -775,11 +800,11 @@ GAS_addresses_add (struct GAS_Addresses_Handle *handle, | |||
775 | /* Add a new address */ | 800 | /* Add a new address */ |
776 | new_address->t_added = GNUNET_TIME_absolute_get(); | 801 | new_address->t_added = GNUNET_TIME_absolute_get(); |
777 | new_address->t_last_activity = GNUNET_TIME_absolute_get(); | 802 | new_address->t_last_activity = GNUNET_TIME_absolute_get(); |
778 | GNUNET_assert( | 803 | GNUNET_assert(GNUNET_OK == |
779 | GNUNET_OK == GNUNET_CONTAINER_multipeermap_put (handle->addresses, | 804 | GNUNET_CONTAINER_multipeermap_put (handle->addresses, |
780 | peer, | 805 | peer, |
781 | new_address, | 806 | new_address, |
782 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE)); | 807 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE)); |
783 | 808 | ||
784 | GNUNET_STATISTICS_set (handle->stat, | 809 | GNUNET_STATISTICS_set (handle->stat, |
785 | "# addresses", | 810 | "# addresses", |
@@ -899,6 +924,7 @@ GAS_addresses_add (struct GAS_Addresses_Handle *handle, | |||
899 | session_id, GNUNET_ATS_print_network_type (addr_net)); | 924 | session_id, GNUNET_ATS_print_network_type (addr_net)); |
900 | } | 925 | } |
901 | 926 | ||
927 | |||
902 | /** | 928 | /** |
903 | * Update an address with a session or performance information for a peer. | 929 | * Update an address with a session or performance information for a peer. |
904 | * | 930 | * |
@@ -913,7 +939,7 @@ GAS_addresses_add (struct GAS_Addresses_Handle *handle, | |||
913 | * @param local_address_info the local address for the address | 939 | * @param local_address_info the local address for the address |
914 | * @param session_id session id, can be 0 | 940 | * @param session_id session id, can be 0 |
915 | * @param atsi performance information for this address | 941 | * @param atsi performance information for this address |
916 | * @param atsi_count number of performance information contained | 942 | * @param atsi_count number of performance information contained in @a atsi |
917 | */ | 943 | */ |
918 | void | 944 | void |
919 | GAS_addresses_update (struct GAS_Addresses_Handle *handle, | 945 | GAS_addresses_update (struct GAS_Addresses_Handle *handle, |
@@ -1049,10 +1075,11 @@ destroy_by_session_id (void *cls, | |||
1049 | const struct ATS_Address *des = dc->aa; | 1075 | const struct ATS_Address *des = dc->aa; |
1050 | struct ATS_Address *aa = value; | 1076 | struct ATS_Address *aa = value; |
1051 | 1077 | ||
1052 | GNUNET_assert( | 1078 | GNUNET_assert(0 == |
1053 | 0 == memcmp (&aa->peer, &des->peer, sizeof(struct GNUNET_PeerIdentity))); | 1079 | memcmp (&aa->peer, |
1054 | 1080 | &des->peer, | |
1055 | if (des->session_id == 0) | 1081 | sizeof (struct GNUNET_PeerIdentity))); |
1082 | if (0 == des->session_id) | ||
1056 | { | 1083 | { |
1057 | /* Session == 0, remove full address */ | 1084 | /* Session == 0, remove full address */ |
1058 | if ((0 == strcmp (des->plugin, aa->plugin)) | 1085 | if ((0 == strcmp (des->plugin, aa->plugin)) |
@@ -1065,13 +1092,20 @@ destroy_by_session_id (void *cls, | |||
1065 | GNUNET_i2s (&aa->peer), | 1092 | GNUNET_i2s (&aa->peer), |
1066 | aa->session_id, | 1093 | aa->session_id, |
1067 | aa); | 1094 | aa); |
1068 | |||
1069 | /* Notify solver about deletion */ | 1095 | /* Notify solver about deletion */ |
1070 | GNUNET_assert (GNUNET_YES == | 1096 | GNUNET_assert (GNUNET_YES == |
1071 | GNUNET_CONTAINER_multipeermap_remove (handle->addresses, | 1097 | GNUNET_CONTAINER_multipeermap_remove (handle->addresses, |
1072 | &aa->peer, | 1098 | &aa->peer, |
1073 | aa)); | 1099 | aa)); |
1074 | handle->env.sf.s_del (handle->solver, aa, GNUNET_NO); | 1100 | handle->env.sf.s_del (handle->solver, aa, GNUNET_NO); |
1101 | GAS_performance_notify_all_clients (&aa->peer, | ||
1102 | aa->plugin, | ||
1103 | aa->addr, | ||
1104 | aa->addr_len, | ||
1105 | GNUNET_SYSERR, | ||
1106 | NULL, 0, | ||
1107 | zero_bw, | ||
1108 | zero_bw); | ||
1075 | free_address (aa); | 1109 | free_address (aa); |
1076 | dc->result = GNUNET_NO; | 1110 | dc->result = GNUNET_NO; |
1077 | return GNUNET_OK; /* Continue iteration */ | 1111 | return GNUNET_OK; /* Continue iteration */ |
@@ -1107,6 +1141,14 @@ destroy_by_session_id (void *cls, | |||
1107 | GNUNET_CONTAINER_multipeermap_remove (handle->addresses, | 1141 | GNUNET_CONTAINER_multipeermap_remove (handle->addresses, |
1108 | &aa->peer, aa)); | 1142 | &aa->peer, aa)); |
1109 | handle->env.sf.s_del (handle->solver, aa, GNUNET_NO); | 1143 | handle->env.sf.s_del (handle->solver, aa, GNUNET_NO); |
1144 | GAS_performance_notify_all_clients (&aa->peer, | ||
1145 | aa->plugin, | ||
1146 | aa->addr, | ||
1147 | aa->addr_len, | ||
1148 | GNUNET_SYSERR, | ||
1149 | NULL, 0, | ||
1150 | zero_bw, | ||
1151 | zero_bw); | ||
1110 | free_address (aa); | 1152 | free_address (aa); |
1111 | dc->result = GNUNET_NO; | 1153 | dc->result = GNUNET_NO; |
1112 | return GNUNET_OK; /* Continue iteration */ | 1154 | return GNUNET_OK; /* Continue iteration */ |
@@ -1114,14 +1156,22 @@ destroy_by_session_id (void *cls, | |||
1114 | else | 1156 | else |
1115 | { | 1157 | { |
1116 | /* Session died */ | 1158 | /* Session died */ |
1117 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, | 1159 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, |
1118 | "Deleting session for peer `%s': `%s' %u\n", | 1160 | "Deleting session for peer `%s': `%s' %u\n", |
1119 | GNUNET_i2s (&aa->peer), | 1161 | GNUNET_i2s (&aa->peer), |
1120 | aa->plugin, aa->session_id); | 1162 | aa->plugin, aa->session_id); |
1121 | /* Notify solver to delete session */ | 1163 | /* Notify solver to delete session */ |
1122 | handle->env.sf.s_del (handle->solver, aa, GNUNET_YES); | 1164 | handle->env.sf.s_del (handle->solver, aa, GNUNET_YES); |
1123 | aa->session_id = 0; | 1165 | aa->session_id = 0; |
1124 | aa->active = GNUNET_NO; | 1166 | aa->active = GNUNET_NO; |
1167 | GAS_performance_notify_all_clients (&aa->peer, | ||
1168 | aa->plugin, | ||
1169 | aa->addr, | ||
1170 | aa->addr_len, | ||
1171 | GNUNET_NO, | ||
1172 | NULL, 0, | ||
1173 | zero_bw, | ||
1174 | zero_bw); | ||
1125 | return GNUNET_OK; | 1175 | return GNUNET_OK; |
1126 | } | 1176 | } |
1127 | } | 1177 | } |
@@ -1136,7 +1186,7 @@ destroy_by_session_id (void *cls, | |||
1136 | * @param peer peer | 1186 | * @param peer peer |
1137 | * @param plugin_name transport plugin name | 1187 | * @param plugin_name transport plugin name |
1138 | * @param plugin_addr plugin address | 1188 | * @param plugin_addr plugin address |
1139 | * @param plugin_addr_len length of the plugin address | 1189 | * @param plugin_addr_len length of the plugin address in @a plugin_addr |
1140 | * @param local_address_info the local address for the address | 1190 | * @param local_address_info the local address for the address |
1141 | * @param session_id session id, can be 0 | 1191 | * @param session_id session id, can be 0 |
1142 | */ | 1192 | */ |
@@ -1156,11 +1206,16 @@ GAS_addresses_destroy (struct GAS_Addresses_Handle *handle, | |||
1156 | return; | 1206 | return; |
1157 | 1207 | ||
1158 | /* Get existing address */ | 1208 | /* Get existing address */ |
1159 | ea = find_exact_address (handle, peer, plugin_name, plugin_addr, | 1209 | ea = find_exact_address (handle, |
1160 | plugin_addr_len, local_address_info, session_id); | 1210 | peer, |
1161 | if (ea == NULL ) | 1211 | plugin_name, |
1212 | plugin_addr, | ||
1213 | plugin_addr_len, | ||
1214 | local_address_info, | ||
1215 | session_id); | ||
1216 | if (NULL == ea) | ||
1162 | { | 1217 | { |
1163 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, | 1218 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, |
1164 | "Tried to destroy unknown address for peer `%s' `%s' session id %u\n", | 1219 | "Tried to destroy unknown address for peer `%s' `%s' session id %u\n", |
1165 | GNUNET_i2s (peer), | 1220 | GNUNET_i2s (peer), |
1166 | plugin_name, | 1221 | plugin_name, |
@@ -1168,13 +1223,12 @@ GAS_addresses_destroy (struct GAS_Addresses_Handle *handle, | |||
1168 | return; | 1223 | return; |
1169 | } | 1224 | } |
1170 | 1225 | ||
1171 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, | 1226 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
1172 | "Received `%s' for peer `%s' address %p session %u\n", "ADDRESS DESTROY", | 1227 | "Received `%s' for peer `%s' address %p session %u\n", "ADDRESS DESTROY", |
1173 | GNUNET_i2s (peer), | 1228 | GNUNET_i2s (peer), |
1174 | ea, | 1229 | ea, |
1175 | session_id); | 1230 | session_id); |
1176 | 1231 | GNUNET_break (0 < strlen (plugin_name)); | |
1177 | GNUNET_break(0 < strlen (plugin_name)); | ||
1178 | dc.handle = handle; | 1232 | dc.handle = handle; |
1179 | dc.aa = create_address (peer, | 1233 | dc.aa = create_address (peer, |
1180 | plugin_name, | 1234 | plugin_name, |
@@ -2037,8 +2091,15 @@ destroy_all_address_it (void *cls, | |||
2037 | /* Notify */ | 2091 | /* Notify */ |
2038 | handle->env.sf.s_del (handle->solver, aa, GNUNET_NO); | 2092 | handle->env.sf.s_del (handle->solver, aa, GNUNET_NO); |
2039 | /* Destroy */ | 2093 | /* Destroy */ |
2094 | GAS_performance_notify_all_clients (&aa->peer, | ||
2095 | aa->plugin, | ||
2096 | aa->addr, | ||
2097 | aa->addr_len, | ||
2098 | GNUNET_NO, | ||
2099 | NULL, 0, | ||
2100 | zero_bw, | ||
2101 | zero_bw); | ||
2040 | free_address (aa); | 2102 | free_address (aa); |
2041 | |||
2042 | return GNUNET_OK; | 2103 | return GNUNET_OK; |
2043 | } | 2104 | } |
2044 | 2105 | ||
@@ -2054,9 +2115,10 @@ GAS_addresses_destroy_all (struct GAS_Addresses_Handle *handle) | |||
2054 | if (GNUNET_NO == handle->running) | 2115 | if (GNUNET_NO == handle->running) |
2055 | return; | 2116 | return; |
2056 | 2117 | ||
2057 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Destroying all addresses\n"); | 2118 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, |
2119 | "Destroying all addresses\n"); | ||
2058 | handle->env.sf.s_bulk_start (handle->solver); | 2120 | handle->env.sf.s_bulk_start (handle->solver); |
2059 | if (handle->addresses != NULL ) | 2121 | if (NULL != handle->addresses) |
2060 | GNUNET_CONTAINER_multipeermap_iterate (handle->addresses, | 2122 | GNUNET_CONTAINER_multipeermap_iterate (handle->addresses, |
2061 | &destroy_all_address_it, | 2123 | &destroy_all_address_it, |
2062 | handle); | 2124 | handle); |
@@ -2219,24 +2281,25 @@ GAS_addresses_get_peer_info (struct GAS_Addresses_Handle *handle, | |||
2219 | void *pi_it_cls) | 2281 | void *pi_it_cls) |
2220 | { | 2282 | { |
2221 | struct PeerInfoIteratorContext pi_ctx; | 2283 | struct PeerInfoIteratorContext pi_ctx; |
2222 | struct GNUNET_BANDWIDTH_Value32NBO zero_bw; | ||
2223 | 2284 | ||
2224 | GNUNET_assert(NULL != peer); | 2285 | GNUNET_assert(NULL != peer); |
2225 | GNUNET_assert(NULL != handle->addresses); | 2286 | GNUNET_assert(NULL != handle->addresses); |
2226 | if (NULL == pi_it) | 2287 | if (NULL == pi_it) |
2227 | return; /* does not make sense without callback */ | 2288 | return; /* does not make sense without callback */ |
2228 | 2289 | ||
2229 | zero_bw = GNUNET_BANDWIDTH_value_init (0); | ||
2230 | pi_ctx.it = pi_it; | 2290 | pi_ctx.it = pi_it; |
2231 | pi_ctx.it_cls = pi_it_cls; | 2291 | pi_ctx.it_cls = pi_it_cls; |
2232 | |||
2233 | GNUNET_CONTAINER_multipeermap_get_multiple (handle->addresses, | 2292 | GNUNET_CONTAINER_multipeermap_get_multiple (handle->addresses, |
2234 | peer, | 2293 | peer, |
2235 | &peerinfo_it, &pi_ctx); | 2294 | &peerinfo_it, &pi_ctx); |
2236 | 2295 | ||
2237 | if (NULL != pi_it) | 2296 | if (NULL != pi_it) |
2238 | pi_it (pi_it_cls, NULL, NULL, NULL, 0, GNUNET_NO, NULL, 0, zero_bw, | 2297 | pi_it (pi_it_cls, |
2239 | zero_bw); | 2298 | NULL, NULL, NULL, 0, |
2299 | GNUNET_NO, | ||
2300 | NULL, 0, | ||
2301 | zero_bw, | ||
2302 | zero_bw); | ||
2240 | 2303 | ||
2241 | } | 2304 | } |
2242 | 2305 | ||