aboutsummaryrefslogtreecommitdiff
path: root/src
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
parent10cb35698e245a9f02e577d60541d7e09d7f05ca (diff)
downloadgnunet-35d79cb1941c9f9607195b8760d8a14d836e6397.tar.gz
gnunet-35d79cb1941c9f9607195b8760d8a14d836e6397.zip
implementing 0003268
Diffstat (limited to 'src')
-rw-r--r--src/ats/ats.h9
-rw-r--r--src/ats/ats_api_scheduling.c13
-rw-r--r--src/ats/gnunet-service-ats_addresses.c69
-rw-r--r--src/ats/gnunet-service-ats_addresses.h23
-rw-r--r--src/ats/gnunet-service-ats_performance.c76
-rw-r--r--src/ats/gnunet-service-ats_scheduling.c26
-rw-r--r--src/ats/gnunet-service-ats_scheduling.h20
7 files changed, 140 insertions, 96 deletions
diff --git a/src/ats/ats.h b/src/ats/ats.h
index 4f8ab1b81..48c8a35d5 100644
--- a/src/ats/ats.h
+++ b/src/ats/ats.h
@@ -79,12 +79,15 @@ struct AddressUpdateMessage
79 79
80 struct GNUNET_PeerIdentity peer; 80 struct GNUNET_PeerIdentity peer;
81 81
82
82 uint16_t address_length GNUNET_PACKED; 83 uint16_t address_length GNUNET_PACKED;
83 84
84 uint16_t plugin_name_length GNUNET_PACKED; 85 uint16_t plugin_name_length GNUNET_PACKED;
85 86
86 uint32_t session_id GNUNET_PACKED; 87 uint32_t session_id GNUNET_PACKED;
87 88
89 uint32_t address_local_info GNUNET_PACKED;
90
88 /* followed by: 91 /* followed by:
89 * - struct GNUNET_ATS_Information [ats_count]; 92 * - struct GNUNET_ATS_Information [ats_count];
90 * - char address[address_length] 93 * - char address[address_length]
@@ -107,6 +110,8 @@ struct AddressUseMessage
107 110
108 uint32_t session_id GNUNET_PACKED; 111 uint32_t session_id GNUNET_PACKED;
109 112
113 uint32_t address_local_info GNUNET_PACKED;
114
110 /* followed by: 115 /* followed by:
111 * - char address[address_length] 116 * - char address[address_length]
112 * - char plugin_name[plugin_name_length] (including '\0'-termination). 117 * - char plugin_name[plugin_name_length] (including '\0'-termination).
@@ -129,6 +134,8 @@ struct AddressDestroyedMessage
129 134
130 uint32_t session_id GNUNET_PACKED; 135 uint32_t session_id GNUNET_PACKED;
131 136
137 uint32_t address_local_info GNUNET_PACKED;
138
132 /* followed by: 139 /* followed by:
133 * - char address[address_length] 140 * - char address[address_length]
134 * - char plugin_name[plugin_name_length] (including '\0'-termination). 141 * - char plugin_name[plugin_name_length] (including '\0'-termination).
@@ -151,6 +158,8 @@ struct AddressSuggestionMessage
151 158
152 uint32_t session_id GNUNET_PACKED; 159 uint32_t session_id GNUNET_PACKED;
153 160
161 uint32_t address_local_info GNUNET_PACKED;
162
154 struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out; 163 struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out;
155 164
156 struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in; 165 struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in;
diff --git a/src/ats/ats_api_scheduling.c b/src/ats/ats_api_scheduling.c
index d23de8940..b9574ff5c 100644
--- a/src/ats/ats_api_scheduling.c
+++ b/src/ats/ats_api_scheduling.c
@@ -643,6 +643,7 @@ process_ats_message (void *cls, const struct GNUNET_MessageHeader *msg)
643 address.address = plugin_address; 643 address.address = plugin_address;
644 address.address_length = plugin_address_length; 644 address.address_length = plugin_address_length;
645 address.transport_name = plugin_name; 645 address.transport_name = plugin_name;
646 address.local_info = ntohl(m->address_local_info);
646 647
647 if ((s == NULL) && (0 == address.address_length)) 648 if ((s == NULL) && (0 == address.address_length))
648 { 649 {
@@ -1200,11 +1201,9 @@ GNUNET_ATS_address_add (struct GNUNET_ATS_SchedulingHandle *sh,
1200 return GNUNET_SYSERR; 1201 return GNUNET_SYSERR;
1201 } 1202 }
1202 1203
1203 namelen = 1204 namelen = (address->transport_name == NULL) ? 0 : strlen (address->transport_name) + 1;
1204 (address->transport_name == 1205
1205 NULL) ? 0 : strlen (address->transport_name) + 1; 1206 msize = sizeof (struct AddressUpdateMessage) + address->address_length +
1206 msize =
1207 sizeof (struct AddressUpdateMessage) + address->address_length +
1208 ats_count * sizeof (struct GNUNET_ATS_Information) + namelen; 1207 ats_count * sizeof (struct GNUNET_ATS_Information) + namelen;
1209 if ((msize >= GNUNET_SERVER_MAX_MESSAGE_SIZE) || 1208 if ((msize >= GNUNET_SERVER_MAX_MESSAGE_SIZE) ||
1210 (address->address_length >= GNUNET_SERVER_MAX_MESSAGE_SIZE) || 1209 (address->address_length >= GNUNET_SERVER_MAX_MESSAGE_SIZE) ||
@@ -1236,6 +1235,7 @@ GNUNET_ATS_address_add (struct GNUNET_ATS_SchedulingHandle *sh,
1236 m->ats_count = htonl (ats_count); 1235 m->ats_count = htonl (ats_count);
1237 m->peer = address->peer; 1236 m->peer = address->peer;
1238 m->address_length = htons (address->address_length); 1237 m->address_length = htons (address->address_length);
1238 m->address_local_info = htonl ((uint32_t) address->local_info);
1239 m->plugin_name_length = htons (namelen); 1239 m->plugin_name_length = htons (namelen);
1240 m->session_id = htonl (s); 1240 m->session_id = htonl (s);
1241 1241
@@ -1330,6 +1330,7 @@ GNUNET_ATS_address_update (struct GNUNET_ATS_SchedulingHandle *sh,
1330 m->ats_count = htonl (ats_count); 1330 m->ats_count = htonl (ats_count);
1331 m->peer = address->peer; 1331 m->peer = address->peer;
1332 m->address_length = htons (address->address_length); 1332 m->address_length = htons (address->address_length);
1333 m->address_local_info = htonl ((uint32_t) address->local_info);
1333 m->plugin_name_length = htons (namelen); 1334 m->plugin_name_length = htons (namelen);
1334 1335
1335 m->session_id = htonl (s); 1336 m->session_id = htonl (s);
@@ -1413,6 +1414,7 @@ GNUNET_ATS_address_in_use (struct GNUNET_ATS_SchedulingHandle *sh,
1413 m->peer = address->peer; 1414 m->peer = address->peer;
1414 m->in_use = htons (in_use); 1415 m->in_use = htons (in_use);
1415 m->address_length = htons (address->address_length); 1416 m->address_length = htons (address->address_length);
1417 m->address_local_info = htonl ((uint32_t) address->local_info);
1416 m->plugin_name_length = htons (namelen); 1418 m->plugin_name_length = htons (namelen);
1417 1419
1418 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 1420 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -1488,6 +1490,7 @@ GNUNET_ATS_address_destroyed (struct GNUNET_ATS_SchedulingHandle *sh,
1488 m->reserved = htonl (0); 1490 m->reserved = htonl (0);
1489 m->peer = address->peer; 1491 m->peer = address->peer;
1490 m->address_length = htons (address->address_length); 1492 m->address_length = htons (address->address_length);
1493 m->address_local_info = htonl ((uint32_t) address->local_info);
1491 m->plugin_name_length = htons (namelen); 1494 m->plugin_name_length = htons (namelen);
1492 1495
1493 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 1496 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
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
diff --git a/src/ats/gnunet-service-ats_addresses.h b/src/ats/gnunet-service-ats_addresses.h
index 8b7a58d52..a793d35d8 100644
--- a/src/ats/gnunet-service-ats_addresses.h
+++ b/src/ats/gnunet-service-ats_addresses.h
@@ -312,6 +312,8 @@ struct ATS_Address
312 */ 312 */
313 uint32_t session_id; 313 uint32_t session_id;
314 314
315 uint32_t local_address_info;
316
315 /** 317 /**
316 * Address 318 * Address
317 */ 319 */
@@ -427,9 +429,14 @@ GAS_addresses_done (struct GAS_Addresses_Handle *handle);
427 */ 429 */
428void 430void
429GAS_addresses_add (struct GAS_Addresses_Handle *handle, 431GAS_addresses_add (struct GAS_Addresses_Handle *handle,
430 const struct GNUNET_PeerIdentity *peer, const char *plugin_name, 432 const struct GNUNET_PeerIdentity *peer,
431 const void *plugin_addr, size_t plugin_addr_len, uint32_t session_id, 433 const char *plugin_name,
432 const struct GNUNET_ATS_Information *atsi, uint32_t atsi_count); 434 const void *plugin_addr,
435 size_t plugin_addr_len,
436 uint32_t local_address_info,
437 uint32_t session_id,
438 const struct GNUNET_ATS_Information *atsi,
439 uint32_t atsi_count);
433 440
434/** 441/**
435 * Notification about active use of an address. 442 * Notification about active use of an address.
@@ -453,7 +460,9 @@ GAS_addresses_add (struct GAS_Addresses_Handle *handle,
453int 460int
454GAS_addresses_in_use (struct GAS_Addresses_Handle *handle, 461GAS_addresses_in_use (struct GAS_Addresses_Handle *handle,
455 const struct GNUNET_PeerIdentity *peer, const char *plugin_name, 462 const struct GNUNET_PeerIdentity *peer, const char *plugin_name,
456 const void *plugin_addr, size_t plugin_addr_len, uint32_t session_id, 463 const void *plugin_addr, size_t plugin_addr_len,
464 uint32_t local_address_info,
465 uint32_t session_id,
457 int in_use); 466 int in_use);
458 467
459/** 468/**
@@ -474,7 +483,8 @@ GAS_addresses_in_use (struct GAS_Addresses_Handle *handle,
474void 483void
475GAS_addresses_update (struct GAS_Addresses_Handle *handle, 484GAS_addresses_update (struct GAS_Addresses_Handle *handle,
476 const struct GNUNET_PeerIdentity *peer, const char *plugin_name, 485 const struct GNUNET_PeerIdentity *peer, const char *plugin_name,
477 const void *plugin_addr, size_t plugin_addr_len, uint32_t session_id, 486 const void *plugin_addr, size_t plugin_addr_len,
487 uint32_t local_address_info, uint32_t session_id,
478 const struct GNUNET_ATS_Information *atsi, uint32_t atsi_count); 488 const struct GNUNET_ATS_Information *atsi, uint32_t atsi_count);
479 489
480/** 490/**
@@ -490,7 +500,8 @@ GAS_addresses_update (struct GAS_Addresses_Handle *handle,
490void 500void
491GAS_addresses_destroy (struct GAS_Addresses_Handle *handle, 501GAS_addresses_destroy (struct GAS_Addresses_Handle *handle,
492 const struct GNUNET_PeerIdentity *peer, const char *plugin_name, 502 const struct GNUNET_PeerIdentity *peer, const char *plugin_name,
493 const void *plugin_addr, size_t plugin_addr_len, uint32_t session_id); 503 const void *plugin_addr, size_t plugin_addr_len,
504 uint32_t local_address_info, uint32_t session_id);
494 505
495/** 506/**
496 * Remove all addresses 507 * Remove all addresses
diff --git a/src/ats/gnunet-service-ats_performance.c b/src/ats/gnunet-service-ats_performance.c
index 7e9b4802e..5a1d8cc66 100644
--- a/src/ats/gnunet-service-ats_performance.c
+++ b/src/ats/gnunet-service-ats_performance.c
@@ -507,52 +507,42 @@ GAS_handle_request_address_list (void *cls, struct GNUNET_SERVER_Client *client,
507 507
508void 508void
509GAS_handle_performance_update (struct GNUNET_PeerIdentity *peer, 509GAS_handle_performance_update (struct GNUNET_PeerIdentity *peer,
510 const char *plugin_name, 510 const char *plugin_name, const void *plugin_addr, size_t plugin_addr_len,
511 const void *plugin_addr, 511 const int active, struct GNUNET_ATS_Information *ats, uint32_t ats_count,
512 size_t plugin_addr_len, 512 struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out,
513 const int active, 513 struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in)
514 struct GNUNET_ATS_Information *ats,
515 uint32_t ats_count,
516 struct GNUNET_BANDWIDTH_Value32NBO
517 bandwidth_out,
518 struct GNUNET_BANDWIDTH_Value32NBO
519 bandwidth_in)
520{ 514{
521/* Notify here */ 515 /* Notify here */
522 GAS_performance_notify_all_clients (peer, 516 GAS_performance_notify_all_clients (peer, plugin_name, plugin_addr,
523 plugin_name, 517 plugin_addr_len, active, ats, ats_count, bandwidth_out, bandwidth_in);
524 plugin_addr, plugin_addr_len,
525 active,
526 ats, ats_count,
527 bandwidth_out, bandwidth_in);
528 518
529#if 0 519#if 0
530 struct PerformanceClient *cur; 520 struct PerformanceClient *cur;
531 struct PerformanceMonitorClient *curm; 521 struct PerformanceMonitorClient *curm;
532 struct MonitorResponseMessage *mrm; 522 struct MonitorResponseMessage *mrm;
533 size_t msglen; 523 size_t msglen;
534 524
535 msglen = sizeof (struct MonitorResponseMessage) + 525 msglen = sizeof (struct MonitorResponseMessage) +
536 ats_count * sizeof (struct GNUNET_ATS_Information); 526 ats_count * sizeof (struct GNUNET_ATS_Information);
537 mrm = GNUNET_malloc (msglen); 527 mrm = GNUNET_malloc (msglen);
538 528
539 mrm->header.type = htons (GNUNET_MESSAGE_TYPE_ATS_MONITOR_RESPONSE); 529 mrm->header.type = htons (GNUNET_MESSAGE_TYPE_ATS_MONITOR_RESPONSE);
540 mrm->header.size = htons (msglen); 530 mrm->header.size = htons (msglen);
541 mrm->ats_count = htonl (ats_count); 531 mrm->ats_count = htonl (ats_count);
542 mrm->peer = *peer; 532 mrm->peer = *peer;
543 memcpy (&mrm[1], ats, ats_count * sizeof (struct GNUNET_ATS_Information)); 533 memcpy (&mrm[1], ats, ats_count * sizeof (struct GNUNET_ATS_Information));
544 534
545 for (cur = pc_head; NULL != cur; cur = cur->next) 535 for (cur = pc_head; NULL != cur; cur = cur->next)
546 for (curm = cur->pm_head; NULL != curm; curm = curm->next) 536 for (curm = cur->pm_head; NULL != curm; curm = curm->next)
547 { 537 {
548 /* Notify client about update */ 538 /* Notify client about update */
549 mrm->id = htonl (curm->id); 539 mrm->id = htonl (curm->id);
550 GNUNET_SERVER_notification_context_unicast (nc, 540 GNUNET_SERVER_notification_context_unicast (nc,
551 cur->client, 541 cur->client,
552 (struct GNUNET_MessageHeader *) mrm, 542 (struct GNUNET_MessageHeader *) mrm,
553 GNUNET_YES); 543 GNUNET_YES);
554 } 544 }
555 GNUNET_free (mrm); 545 GNUNET_free (mrm);
556#endif 546#endif
557} 547}
558 548
diff --git a/src/ats/gnunet-service-ats_scheduling.c b/src/ats/gnunet-service-ats_scheduling.c
index 48fe536c1..2b77e0e5d 100644
--- a/src/ats/gnunet-service-ats_scheduling.c
+++ b/src/ats/gnunet-service-ats_scheduling.c
@@ -100,16 +100,16 @@ GAS_scheduling_remove_client (struct GNUNET_SERVER_Client *client)
100 */ 100 */
101void 101void
102GAS_scheduling_transmit_address_suggestion (const struct GNUNET_PeerIdentity 102GAS_scheduling_transmit_address_suggestion (const struct GNUNET_PeerIdentity
103 *peer, const char *plugin_name, 103 *peer,
104 const void *plugin_addr, 104 const char *plugin_name,
105 size_t plugin_addr_len, 105 const void *plugin_addr,
106 uint32_t session_id, 106 size_t plugin_addr_len,
107 const struct GNUNET_ATS_Information 107 uint32_t local_address_info,
108 *atsi, uint32_t atsi_count, 108 uint32_t session_id,
109 struct GNUNET_BANDWIDTH_Value32NBO 109 const struct GNUNET_ATS_Information *atsi,
110 bandwidth_out, 110 uint32_t atsi_count,
111 struct GNUNET_BANDWIDTH_Value32NBO 111 struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out,
112 bandwidth_in) 112 struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in)
113{ 113{
114 struct AddressSuggestionMessage *msg; 114 struct AddressSuggestionMessage *msg;
115 size_t plugin_name_length = strlen (plugin_name) + 1; 115 size_t plugin_name_length = strlen (plugin_name) + 1;
@@ -136,6 +136,7 @@ GAS_scheduling_transmit_address_suggestion (const struct GNUNET_PeerIdentity
136 msg->peer = *peer; 136 msg->peer = *peer;
137 msg->address_length = htons (plugin_addr_len); 137 msg->address_length = htons (plugin_addr_len);
138 msg->plugin_name_length = htons (plugin_name_length); 138 msg->plugin_name_length = htons (plugin_name_length);
139 msg->address_local_info = htonl (local_address_info);
139 msg->session_id = htonl (session_id); 140 msg->session_id = htonl (session_id);
140 msg->bandwidth_out = bandwidth_out; 141 msg->bandwidth_out = bandwidth_out;
141 msg->bandwidth_in = bandwidth_in; 142 msg->bandwidth_in = bandwidth_in;
@@ -278,7 +279,7 @@ GAS_handle_address_add (void *cls, struct GNUNET_SERVER_Client *client,
278 GNUNET_STATISTICS_update (GSA_stats, "# address updates received", 1, 279 GNUNET_STATISTICS_update (GSA_stats, "# address updates received", 1,
279 GNUNET_NO); 280 GNUNET_NO);
280 GAS_addresses_add (address_handle, &m->peer, plugin_name, address, address_length, 281 GAS_addresses_add (address_handle, &m->peer, plugin_name, address, address_length,
281 ntohl (m->session_id), atsi, ats_count); 282 ntohl(m->address_local_info), ntohl (m->session_id), atsi, ats_count);
282 GNUNET_SERVER_receive_done (client, GNUNET_OK); 283 GNUNET_SERVER_receive_done (client, GNUNET_OK);
283} 284}
284 285
@@ -337,6 +338,7 @@ GAS_handle_address_update (void *cls, struct GNUNET_SERVER_Client *client,
337 GNUNET_STATISTICS_update (GSA_stats, "# address updates received", 1, 338 GNUNET_STATISTICS_update (GSA_stats, "# address updates received", 1,
338 GNUNET_NO); 339 GNUNET_NO);
339 GAS_addresses_update (address_handle, &m->peer, plugin_name, address, address_length, 340 GAS_addresses_update (address_handle, &m->peer, plugin_name, address, address_length,
341 ntohl (m->address_local_info),
340 ntohl (m->session_id), atsi, ats_count); 342 ntohl (m->session_id), atsi, ats_count);
341 GNUNET_SERVER_receive_done (client, GNUNET_OK); 343 GNUNET_SERVER_receive_done (client, GNUNET_OK);
342} 344}
@@ -397,6 +399,7 @@ GAS_handle_address_in_use (void *cls, struct GNUNET_SERVER_Client *client,
397 plugin_name, 399 plugin_name,
398 address, 400 address,
399 address_length, 401 address_length,
402 ntohl (m->address_local_info),
400 ntohl (m->session_id), 403 ntohl (m->session_id),
401 in_use); 404 in_use);
402 405
@@ -465,6 +468,7 @@ GAS_handle_address_destroyed (void *cls, struct GNUNET_SERVER_Client *client,
465 GNUNET_STATISTICS_update (GSA_stats, "# addresses destroyed", 1, GNUNET_NO); 468 GNUNET_STATISTICS_update (GSA_stats, "# addresses destroyed", 1, GNUNET_NO);
466 GAS_addresses_destroy (address_handle, &m->peer, plugin_name, 469 GAS_addresses_destroy (address_handle, &m->peer, plugin_name,
467 address, address_length, 470 address, address_length,
471 ntohl (m->address_local_info),
468 ntohl (m->session_id)); 472 ntohl (m->session_id));
469 if (0 != ntohl (m->session_id)) 473 if (0 != ntohl (m->session_id))
470 { 474 {
diff --git a/src/ats/gnunet-service-ats_scheduling.h b/src/ats/gnunet-service-ats_scheduling.h
index d7b5e9cde..7733cdf88 100644
--- a/src/ats/gnunet-service-ats_scheduling.h
+++ b/src/ats/gnunet-service-ats_scheduling.h
@@ -79,16 +79,16 @@ GAS_handle_reset_backoff (void *cls,
79 */ 79 */
80void 80void
81GAS_scheduling_transmit_address_suggestion (const struct GNUNET_PeerIdentity 81GAS_scheduling_transmit_address_suggestion (const struct GNUNET_PeerIdentity
82 *peer, const char *plugin_name, 82 *peer,
83 const void *plugin_addr, 83 const char *plugin_name,
84 size_t plugin_addr_len, 84 const void *plugin_addr,
85 uint32_t session_id, 85 size_t plugin_addr_len,
86 const struct GNUNET_ATS_Information 86 uint32_t local_address_info,
87 *atsi, uint32_t atsi_count, 87 uint32_t session_id,
88 struct GNUNET_BANDWIDTH_Value32NBO 88 const struct GNUNET_ATS_Information *atsi,
89 bandwidth_out, 89 uint32_t atsi_count,
90 struct GNUNET_BANDWIDTH_Value32NBO 90 struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out,
91 bandwidth_in); 91 struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in);
92 92
93 93
94/** 94/**