aboutsummaryrefslogtreecommitdiff
path: root/src/ats/gnunet-service-ats_addresses.c
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2014-01-13 16:56:41 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2014-01-13 16:56:41 +0000
commit35d79cb1941c9f9607195b8760d8a14d836e6397 (patch)
treec4346492cbd6daa665e74720b41ab727da5ed7a1 /src/ats/gnunet-service-ats_addresses.c
parent10cb35698e245a9f02e577d60541d7e09d7f05ca (diff)
downloadgnunet-35d79cb1941c9f9607195b8760d8a14d836e6397.tar.gz
gnunet-35d79cb1941c9f9607195b8760d8a14d836e6397.zip
implementing 0003268
Diffstat (limited to 'src/ats/gnunet-service-ats_addresses.c')
-rw-r--r--src/ats/gnunet-service-ats_addresses.c69
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 */
478static struct ATS_Address * 478static struct ATS_Address *
479create_address (const struct GNUNET_PeerIdentity *peer, const char *plugin_name, 479create_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
643static struct ATS_Address * 648static struct ATS_Address *
644find_exact_address (struct GAS_Addresses_Handle *handle, 649find_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 */
728void 737void
729GAS_addresses_add (struct GAS_Addresses_Handle *handle, 738GAS_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 */
892void 906void
893GAS_addresses_update (struct GAS_Addresses_Handle *handle, 907GAS_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 */
1081void 1100void
1082GAS_addresses_destroy (struct GAS_Addresses_Handle *handle, 1101GAS_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,
1138int 1161int
1139GAS_addresses_in_use (struct GAS_Addresses_Handle *handle, 1162GAS_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