+ if (addresses != NULL)
+ GNUNET_CONTAINER_multihashmap_iterate(addresses,
+ &remove_address_by_client, client);
+}
+
+
+void
+GAS_address_destroyed (const struct GNUNET_PeerIdentity *peer,
+ const char *plugin_name,
+ const void *plugin_addr, size_t plugin_addr_len,
+ struct GNUNET_SERVER_Client *session_client,
+ uint32_t session_id)
+{
+
+ struct ATS_Address aa;
+ struct ATS_Address *res;
+
+ aa.peer = *peer;
+ aa.addr_len = plugin_addr_len;
+ aa.addr = plugin_addr;
+ aa.plugin = (char*) plugin_name;
+ aa.session_client = session_client;
+ aa.session_id = session_id;
+
+ res = find_address (peer, &aa);
+ if (res == NULL)
+ {
+ /* we don't even know this one, can this happen? */
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Asked to delete unknown address for peer `%s'\n",
+ GNUNET_i2s (peer));
+ return;
+ }
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Deleting address for peer `%s': `%s'\n",
+ GNUNET_i2s (peer), plugin_name);
+ destroy_address (res);
+}
+
+
+void
+GAS_addresses_request_address (const struct GNUNET_PeerIdentity *peer)
+{
+ struct ATS_Address * aa;
+
+ aa = GNUNET_CONTAINER_multihashmap_get (addresses, &peer->hashPubKey);
+ if (aa == NULL)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Cannot suggest address for peer `%s'\n",
+ GNUNET_i2s (peer));
+ return;
+ }
+ /* FIXME: ensure that we don't do this multiple times per peer! */
+ if (ntohl (aa->bw_in.value__) == 0)
+ {
+ active_addr_count++;
+ aa->bw_in.value__ = htonl (total_quota_in / active_addr_count);
+ aa->bw_out.value__ = htonl (total_quota_out / active_addr_count);
+ /* FIXME: update bw assignments for other addresses... */
+ }
+ GAS_reservations_set_bandwidth (peer,
+ aa->bw_in);
+ GAS_scheduling_transmit_address_suggestion (peer, aa->plugin,
+ aa->addr, aa->addr_len,
+ aa->session_client, aa->session_id,
+ aa->ats, aa->ats_count,
+ aa->bw_out, aa->bw_in);