cim.header.type = htons (GNUNET_MESSAGE_TYPE_TRANSPORT_CONNECT);
cim.distance = htonl (distance);
cim.latency = GNUNET_TIME_relative_hton (latency);
+ cim.ats_count = htonl(0);
+ cim.ats.type = htonl(0);
+ cim.ats.value = htonl(0);
memcpy (&cim.id, peer, sizeof (struct GNUNET_PeerIdentity));
cpos = clients;
while (cpos != NULL)
im = GNUNET_malloc (sizeof (struct InboundMessage) + ats_count * sizeof(struct GNUNET_TRANSPORT_ATS_Information) + msize);
im->header.size = htons (sizeof (struct InboundMessage) + ats_count * sizeof(struct GNUNET_TRANSPORT_ATS_Information) + msize);
im->header.type = htons (GNUNET_MESSAGE_TYPE_TRANSPORT_RECV);
- im->latency = GNUNET_TIME_relative_hton (n->latency);
im->peer = n->id;
- im->distance = ntohl(n->distance);
im->ats_count = htonl(ats_count);
/* insert ATS elements */
memcpy (&(im->ats), ats, ats_count * sizeof(struct GNUNET_TRANSPORT_ATS_Information));
if (NULL != (prem = n->pre_connect_message_buffer))
{
n->pre_connect_message_buffer = NULL;
- /* FIXME: */
- handle_payload_message (prem, n, NULL, 0);
+ struct GNUNET_TRANSPORT_ATS_Information * ats = GNUNET_malloc(2 * sizeof(struct GNUNET_TRANSPORT_ATS_Information));
+ ats[0].type = htonl(GNUNET_TRANSPORT_ATS_QUALITY_NET_DELAY);
+ if (n->latency.rel_value <= UINT32_MAX)
+ ats[0].value = htonl((uint32_t) n->latency.rel_value);
+ else
+ ats[0].value = htonl(UINT32_MAX);
+ ats[1].type = htonl(GNUNET_TRANSPORT_ATS_QUALITY_NET_DISTANCE);
+ ats[1].value = htonl(n->distance);
+ //handle_payload_message (prem, n, NULL, 0);
+ handle_payload_message (prem, n, ats, 2);
+ GNUNET_free (ats);
GNUNET_free (prem);
}
}
struct ForeignAddressList *peer_address;
uint16_t msize;
struct NeighbourList *n;
+ struct GNUNET_TRANSPORT_ATS_Information * ats;
struct GNUNET_TIME_Relative ret;
if (is_blacklisted (peer, plugin))
return GNUNET_TIME_UNIT_FOREVER_REL;
handle_pong (plugin, message, peer, sender_address, sender_address_len);
break;
default:
- handle_payload_message (message, n, NULL, 0);
+ ats = GNUNET_malloc(2 * sizeof(struct GNUNET_TRANSPORT_ATS_Information));
+ ats[0].type = htonl(GNUNET_TRANSPORT_ATS_QUALITY_NET_DELAY);
+ if (n->latency.rel_value <= UINT32_MAX)
+ ats[0].value = htonl((uint32_t) n->latency.rel_value);
+ else
+ ats[0].value = htonl(UINT32_MAX);
+ ats[1].type = htonl(GNUNET_TRANSPORT_ATS_QUALITY_NET_DISTANCE);
+ ats[1].value = htonl(n->distance);
+ //handle_payload_message (message, n, NULL, 0);
+ handle_payload_message (message, n, ats, 2);
+ GNUNET_free(ats);
break;
}
}
/* tell new client about all existing connections */
cim.header.size = htons (sizeof (struct ConnectInfoMessage));
cim.header.type = htons (GNUNET_MESSAGE_TYPE_TRANSPORT_CONNECT);
+ cim.ats_count = htonl(0);
+ cim.ats.type = htonl(0);
+ cim.ats.value = htonl(0);
n = neighbours;
while (n != NULL)
{