(aa->session_id != cac->search->session_id))
return GNUNET_YES;
+ if (aa->addr_len != cac->search->addr_len)
+ {
+ return GNUNET_YES;
+ }
+
if (0 == strcmp(aa->plugin, cac->search->plugin))
{
- if (aa->addr_len != cac->search->addr_len)
- return GNUNET_YES;
- if (aa->addr_len == 0)
- return GNUNET_YES;
- if (0 == memcmp (aa->addr, cac->search->addr, aa->addr_len))
- cac->result = aa;
+ return GNUNET_YES;
+ }
+
+ if (0 == memcmp (aa->addr, cac->search->addr, aa->addr_len))
+ {
+ cac->result = aa;
return GNUNET_NO;
}
+
return GNUNET_YES;
}
aa->session_client = session_client;
aa->session_id = session_id;
- res = find_address (peer, aa);
- GNUNET_assert (res != 0);
-
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Deleting address for peer `%s'\n",
- GNUNET_i2s (peer));
+ "Deleting address for peer `%s': `%s'\n",
+ GNUNET_i2s (peer), plugin_name);
- GNUNET_assert (GNUNET_YES == GNUNET_CONTAINER_multihashmap_remove(addresses, &peer->hashPubKey, res));
- destroy_address (aa);
- destroy_address (res);
+ res = find_address (peer, aa);
+ if (res != NULL)
+ {
+ GNUNET_assert (GNUNET_YES == GNUNET_CONTAINER_multihashmap_remove(addresses, &peer->hashPubKey, res));
+ destroy_address (aa);
+ destroy_address (res);
+ }
}
struct ATS_Address * aa = NULL;
aa = GNUNET_CONTAINER_multihashmap_get (addresses, &peer->hashPubKey);
if (aa != NULL)
+ {
+ aa->bw_in.value__ = htonl (100000);
+ aa->bw_out.value__ = htonl (100000);
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);
+ }
+ else
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Cannot provide address for peer `%s'\n",
+ GNUNET_i2s (peer));
}
plugin_name_length = ntohs (m->plugin_name_length);
atsi = (const struct GNUNET_TRANSPORT_ATS_Information*) &m[1];
address = (const char*) &atsi[ats_count];
- plugin_name = &address[address_length];
+ if (plugin_name_length != 0)
+ plugin_name = &address[address_length];
+ else
+ plugin_name = "";
if ( (address_length +
plugin_name_length +
ats_count * sizeof (struct GNUNET_TRANSPORT_ATS_Information) +
uint16_t size;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Received `%s' message\n",
- "ADDRESS_DESTROYED");
+ "Received `%s' message of size %u %u\n",
+ "ADDRESS_DESTROYED", ntohs (message->size), sizeof (struct AddressDestroyedMessage));
size = ntohs (message->size);
- if (size <= sizeof (struct AddressDestroyedMessage))
+ if (size < sizeof (struct AddressDestroyedMessage))
{
GNUNET_break (0);
GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
address_length = ntohs (m->address_length);
plugin_name_length = ntohs (m->plugin_name_length);
address = (const char*) &m[1];
- plugin_name = &address[address_length];
+ if (plugin_name_length != 0)
+ plugin_name = &address[address_length];
+ else
+ plugin_name = "";
+
if ( (address_length +
plugin_name_length +
- sizeof (struct AddressDestroyedMessage) != ntohs (message->size)) ||
- (plugin_name[plugin_name_length - 1] != '\0') )
+ sizeof (struct AddressDestroyedMessage) != ntohs (message->size)))
{
GNUNET_break (0);
GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
return;
}
+
+ if (plugin_name_length != 0)
+ if (plugin_name[plugin_name_length - 1] != '\0')
+ {
+ GNUNET_break (0);
+ GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
+ return;
+ }
+
GAS_address_destroyed (&m->peer,
plugin_name,
address,