diff options
Diffstat (limited to 'src/ats/gnunet-service-ats_addresses.c')
-rw-r--r-- | src/ats/gnunet-service-ats_addresses.c | 69 |
1 files changed, 48 insertions, 21 deletions
diff --git a/src/ats/gnunet-service-ats_addresses.c b/src/ats/gnunet-service-ats_addresses.c index a82b21355..13bd656d4 100644 --- a/src/ats/gnunet-service-ats_addresses.c +++ b/src/ats/gnunet-service-ats_addresses.c | |||
@@ -476,8 +476,12 @@ free_address (struct ATS_Address *addr) | |||
476 | * @return the ATS_Address | 476 | * @return the ATS_Address |
477 | */ | 477 | */ |
478 | static struct ATS_Address * | 478 | static struct ATS_Address * |
479 | create_address (const struct GNUNET_PeerIdentity *peer, const char *plugin_name, | 479 | create_address (const struct GNUNET_PeerIdentity *peer, |
480 | const void *plugin_addr, size_t plugin_addr_len, uint32_t session_id) | 480 | const char *plugin_name, |
481 | const void *plugin_addr, | ||
482 | size_t plugin_addr_len, | ||
483 | uint32_t local_address_info, | ||
484 | uint32_t session_id) | ||
481 | { | 485 | { |
482 | struct ATS_Address *aa = NULL; | 486 | struct ATS_Address *aa = NULL; |
483 | int c1; | 487 | int c1; |
@@ -490,6 +494,7 @@ create_address (const struct GNUNET_PeerIdentity *peer, const char *plugin_name, | |||
490 | memcpy (&aa[1], plugin_addr, plugin_addr_len); | 494 | memcpy (&aa[1], plugin_addr, plugin_addr_len); |
491 | aa->plugin = GNUNET_strdup (plugin_name); | 495 | aa->plugin = GNUNET_strdup (plugin_name); |
492 | aa->session_id = session_id; | 496 | aa->session_id = session_id; |
497 | aa->local_address_info = local_address_info; | ||
493 | aa->active = GNUNET_NO; | 498 | aa->active = GNUNET_NO; |
494 | aa->used = GNUNET_NO; | 499 | aa->used = GNUNET_NO; |
495 | aa->solver_information = NULL; | 500 | aa->solver_information = NULL; |
@@ -642,14 +647,18 @@ find_equivalent_address (struct GAS_Addresses_Handle *handle, | |||
642 | 647 | ||
643 | static struct ATS_Address * | 648 | static struct ATS_Address * |
644 | find_exact_address (struct GAS_Addresses_Handle *handle, | 649 | find_exact_address (struct GAS_Addresses_Handle *handle, |
645 | const struct GNUNET_PeerIdentity *peer, const char *plugin_name, | 650 | const struct GNUNET_PeerIdentity *peer, |
646 | const void *plugin_addr, size_t plugin_addr_len, uint32_t session_id) | 651 | const char *plugin_name, |
652 | const void *plugin_addr, | ||
653 | size_t plugin_addr_len, | ||
654 | uint32_t local_address_info, | ||
655 | uint32_t session_id) | ||
647 | { | 656 | { |
648 | struct ATS_Address *aa; | 657 | struct ATS_Address *aa; |
649 | struct ATS_Address *ea; | 658 | struct ATS_Address *ea; |
650 | 659 | ||
651 | aa = create_address (peer, plugin_name, plugin_addr, plugin_addr_len, | 660 | aa = create_address (peer, plugin_name, plugin_addr, plugin_addr_len, |
652 | session_id); | 661 | local_address_info, session_id); |
653 | 662 | ||
654 | /* Get existing address or address with session == 0 */ | 663 | /* Get existing address or address with session == 0 */ |
655 | ea = find_equivalent_address (handle, peer, aa); | 664 | ea = find_equivalent_address (handle, peer, aa); |
@@ -727,9 +736,14 @@ get_performance_info (struct ATS_Address *address, uint32_t type) | |||
727 | */ | 736 | */ |
728 | void | 737 | void |
729 | GAS_addresses_add (struct GAS_Addresses_Handle *handle, | 738 | GAS_addresses_add (struct GAS_Addresses_Handle *handle, |
730 | const struct GNUNET_PeerIdentity *peer, const char *plugin_name, | 739 | const struct GNUNET_PeerIdentity *peer, |
731 | const void *plugin_addr, size_t plugin_addr_len, uint32_t session_id, | 740 | const char *plugin_name, |
732 | const struct GNUNET_ATS_Information *atsi, uint32_t atsi_count) | 741 | const void *plugin_addr, |
742 | size_t plugin_addr_len, | ||
743 | uint32_t local_address_info, | ||
744 | uint32_t session_id, | ||
745 | const struct GNUNET_ATS_Information *atsi, | ||
746 | uint32_t atsi_count) | ||
733 | { | 747 | { |
734 | struct ATS_Address *new_address; | 748 | struct ATS_Address *new_address; |
735 | struct ATS_Address *existing_address; | 749 | struct ATS_Address *existing_address; |
@@ -748,7 +762,7 @@ GAS_addresses_add (struct GAS_Addresses_Handle *handle, | |||
748 | GNUNET_assert(NULL != handle->addresses); | 762 | GNUNET_assert(NULL != handle->addresses); |
749 | 763 | ||
750 | new_address = create_address (peer, plugin_name, plugin_addr, plugin_addr_len, | 764 | new_address = create_address (peer, plugin_name, plugin_addr, plugin_addr_len, |
751 | session_id); | 765 | local_address_info, session_id); |
752 | atsi_delta = NULL; | 766 | atsi_delta = NULL; |
753 | disassemble_ats_information (new_address, atsi, atsi_count, &atsi_delta, | 767 | disassemble_ats_information (new_address, atsi, atsi_count, &atsi_delta, |
754 | &atsi_delta_count); | 768 | &atsi_delta_count); |
@@ -891,9 +905,14 @@ GAS_addresses_add (struct GAS_Addresses_Handle *handle, | |||
891 | */ | 905 | */ |
892 | void | 906 | void |
893 | GAS_addresses_update (struct GAS_Addresses_Handle *handle, | 907 | GAS_addresses_update (struct GAS_Addresses_Handle *handle, |
894 | const struct GNUNET_PeerIdentity *peer, const char *plugin_name, | 908 | const struct GNUNET_PeerIdentity *peer, |
895 | const void *plugin_addr, size_t plugin_addr_len, uint32_t session_id, | 909 | const char *plugin_name, |
896 | const struct GNUNET_ATS_Information *atsi, uint32_t atsi_count) | 910 | const void *plugin_addr, |
911 | size_t plugin_addr_len, | ||
912 | uint32_t local_address_info, | ||
913 | uint32_t session_id, | ||
914 | const struct GNUNET_ATS_Information *atsi, | ||
915 | uint32_t atsi_count) | ||
897 | { | 916 | { |
898 | struct ATS_Address *aa; | 917 | struct ATS_Address *aa; |
899 | struct GNUNET_ATS_Information *atsi_delta; | 918 | struct GNUNET_ATS_Information *atsi_delta; |
@@ -908,7 +927,7 @@ GAS_addresses_update (struct GAS_Addresses_Handle *handle, | |||
908 | 927 | ||
909 | /* Get existing address */ | 928 | /* Get existing address */ |
910 | aa = find_exact_address (handle, peer, plugin_name, plugin_addr, | 929 | aa = find_exact_address (handle, peer, plugin_name, plugin_addr, |
911 | plugin_addr_len, session_id); | 930 | plugin_addr_len, local_address_info, session_id); |
912 | if (aa == NULL ) | 931 | if (aa == NULL ) |
913 | return; | 932 | return; |
914 | if (NULL == aa->solver_information) | 933 | if (NULL == aa->solver_information) |
@@ -1080,8 +1099,12 @@ destroy_by_session_id (void *cls, | |||
1080 | */ | 1099 | */ |
1081 | void | 1100 | void |
1082 | GAS_addresses_destroy (struct GAS_Addresses_Handle *handle, | 1101 | GAS_addresses_destroy (struct GAS_Addresses_Handle *handle, |
1083 | const struct GNUNET_PeerIdentity *peer, const char *plugin_name, | 1102 | const struct GNUNET_PeerIdentity *peer, |
1084 | const void *plugin_addr, size_t plugin_addr_len, uint32_t session_id) | 1103 | const char *plugin_name, |
1104 | const void *plugin_addr, | ||
1105 | size_t plugin_addr_len, | ||
1106 | uint32_t local_address_info, | ||
1107 | uint32_t session_id) | ||
1085 | { | 1108 | { |
1086 | struct ATS_Address *ea; | 1109 | struct ATS_Address *ea; |
1087 | struct DestroyContext dc; | 1110 | struct DestroyContext dc; |
@@ -1090,7 +1113,7 @@ GAS_addresses_destroy (struct GAS_Addresses_Handle *handle, | |||
1090 | 1113 | ||
1091 | /* Get existing address */ | 1114 | /* Get existing address */ |
1092 | ea = find_exact_address (handle, peer, plugin_name, plugin_addr, | 1115 | ea = find_exact_address (handle, peer, plugin_name, plugin_addr, |
1093 | plugin_addr_len, session_id); | 1116 | plugin_addr_len, local_address_info, session_id); |
1094 | if (ea == NULL ) | 1117 | if (ea == NULL ) |
1095 | { | 1118 | { |
1096 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, | 1119 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, |
@@ -1106,7 +1129,7 @@ GAS_addresses_destroy (struct GAS_Addresses_Handle *handle, | |||
1106 | GNUNET_break(0 < strlen (plugin_name)); | 1129 | GNUNET_break(0 < strlen (plugin_name)); |
1107 | dc.handle = handle; | 1130 | dc.handle = handle; |
1108 | dc.aa = create_address (peer, plugin_name, plugin_addr, plugin_addr_len, | 1131 | dc.aa = create_address (peer, plugin_name, plugin_addr, plugin_addr_len, |
1109 | session_id); | 1132 | local_address_info, session_id); |
1110 | 1133 | ||
1111 | GNUNET_CONTAINER_multipeermap_get_multiple (handle->addresses, | 1134 | GNUNET_CONTAINER_multipeermap_get_multiple (handle->addresses, |
1112 | peer, | 1135 | peer, |
@@ -1138,7 +1161,9 @@ GAS_addresses_destroy (struct GAS_Addresses_Handle *handle, | |||
1138 | int | 1161 | int |
1139 | GAS_addresses_in_use (struct GAS_Addresses_Handle *handle, | 1162 | GAS_addresses_in_use (struct GAS_Addresses_Handle *handle, |
1140 | const struct GNUNET_PeerIdentity *peer, const char *plugin_name, | 1163 | const struct GNUNET_PeerIdentity *peer, const char *plugin_name, |
1141 | const void *plugin_addr, size_t plugin_addr_len, uint32_t session_id, | 1164 | const void *plugin_addr, size_t plugin_addr_len, |
1165 | uint32_t local_address_info, | ||
1166 | uint32_t session_id, | ||
1142 | int in_use) | 1167 | int in_use) |
1143 | { | 1168 | { |
1144 | struct ATS_Address *ea; | 1169 | struct ATS_Address *ea; |
@@ -1149,7 +1174,7 @@ GAS_addresses_in_use (struct GAS_Addresses_Handle *handle, | |||
1149 | return GNUNET_SYSERR; | 1174 | return GNUNET_SYSERR; |
1150 | 1175 | ||
1151 | ea = find_exact_address (handle, peer, plugin_name, plugin_addr, | 1176 | ea = find_exact_address (handle, peer, plugin_name, plugin_addr, |
1152 | plugin_addr_len, session_id); | 1177 | plugin_addr_len, local_address_info, session_id); |
1153 | if (NULL == ea) | 1178 | if (NULL == ea) |
1154 | { | 1179 | { |
1155 | GNUNET_log(GNUNET_ERROR_TYPE_WARNING, | 1180 | GNUNET_log(GNUNET_ERROR_TYPE_WARNING, |
@@ -1261,7 +1286,8 @@ GAS_addresses_request_address (struct GAS_Addresses_Handle *handle, | |||
1261 | aa, GNUNET_i2s (peer)); | 1286 | aa, GNUNET_i2s (peer)); |
1262 | 1287 | ||
1263 | GAS_scheduling_transmit_address_suggestion (peer, aa->plugin, aa->addr, | 1288 | GAS_scheduling_transmit_address_suggestion (peer, aa->plugin, aa->addr, |
1264 | aa->addr_len, aa->session_id, aa->atsi, aa->atsi_count, | 1289 | aa->addr_len, aa->local_address_info, aa->session_id, |
1290 | aa->atsi, aa->atsi_count, | ||
1265 | aa->assigned_bw_out, aa->assigned_bw_in); | 1291 | aa->assigned_bw_out, aa->assigned_bw_in); |
1266 | 1292 | ||
1267 | aa->block_interval = GNUNET_TIME_relative_add (aa->block_interval, | 1293 | aa->block_interval = GNUNET_TIME_relative_add (aa->block_interval, |
@@ -2073,7 +2099,8 @@ bandwidth_changed_cb (void *cls, struct ATS_Address *address) | |||
2073 | 2099 | ||
2074 | /* *Notify scheduling clients about suggestion */ | 2100 | /* *Notify scheduling clients about suggestion */ |
2075 | GAS_scheduling_transmit_address_suggestion (&address->peer, address->plugin, | 2101 | GAS_scheduling_transmit_address_suggestion (&address->peer, address->plugin, |
2076 | address->addr, address->addr_len, address->session_id, address->atsi, | 2102 | address->addr, address->addr_len, address->local_address_info, |
2103 | address->session_id, address->atsi, | ||
2077 | address->atsi_count, address->assigned_bw_out, address->assigned_bw_in); | 2104 | address->atsi_count, address->assigned_bw_out, address->assigned_bw_in); |
2078 | } | 2105 | } |
2079 | 2106 | ||