/**
* Function to call with the human-readable address.
*/
- GNUNET_TRANSPORT_AddressLookUpCallback cb;
+ GNUNET_TRANSPORT_AddressLookUpBinaryCallback cb;
/**
* Closure for cb.
const struct GNUNET_MessageHeader *msg)
{
struct AddressLookupCtx *alucb = cls;
- const char *address;
+ struct AddressIterateResponseMessage *address;
uint16_t size;
+ char *transport;
+
+ //size_t transport_len;
+ //void * addr;
+ size_t addrlen;
if (msg == NULL)
{
- alucb->cb (alucb->cb_cls, NULL);
+ alucb->cb (alucb->cb_cls, NULL, NULL, NULL, 0);
GNUNET_CLIENT_disconnect (alucb->client, GNUNET_NO);
GNUNET_free (alucb);
return;
}
+
GNUNET_break (ntohs (msg->type) ==
GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_REPLY);
size = ntohs (msg->size);
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received message type %u size %u\n",
+ ntohs (msg->type), size);
if (size == sizeof (struct GNUNET_MessageHeader))
{
/* done! */
- alucb->cb (alucb->cb_cls, NULL);
+ alucb->cb (alucb->cb_cls, NULL, NULL, NULL, 0);
GNUNET_CLIENT_disconnect (alucb->client, GNUNET_NO);
GNUNET_free (alucb);
return;
}
- address = (const char *) &msg[1];
- if (address[size - sizeof (struct GNUNET_MessageHeader) - 1] != '\0')
+ if (size < sizeof (struct AddressIterateResponseMessage))
{
/* invalid reply */
GNUNET_break (0);
- alucb->cb (alucb->cb_cls, NULL);
+ alucb->cb (alucb->cb_cls, NULL, NULL, NULL, 0);
GNUNET_CLIENT_disconnect (alucb->client, GNUNET_NO);
GNUNET_free (alucb);
return;
}
+
+ address = (struct AddressIterateResponseMessage *) &msg[1];
+
+ transport = (char *) &address[0];
+ //transport_len = ntohs(address->pluginlen);
+ addrlen = ntohs (address->addrlen);
+
/* expect more replies */
- GNUNET_CLIENT_receive (alucb->client,
- &peer_address_response_processor, alucb,
+ GNUNET_CLIENT_receive (alucb->client, &peer_address_response_processor, alucb,
GNUNET_TIME_absolute_get_remaining (alucb->timeout));
- alucb->cb (alucb->cb_cls, address);
+ alucb->cb (alucb->cb_cls, &address->peer, transport, NULL, addrlen);
}
void
GNUNET_TRANSPORT_address_iterate (const struct GNUNET_CONFIGURATION_Handle *cfg,
struct GNUNET_TIME_Relative timeout,
- GNUNET_TRANSPORT_AddressLookUpCallback
+ GNUNET_TRANSPORT_AddressLookUpBinaryCallback
peer_address_callback,
void *peer_address_callback_cls)
{
client = GNUNET_CLIENT_connect ("transport", cfg);
if (client == NULL)
{
- peer_address_callback (peer_address_callback_cls, NULL);
+ peer_address_callback (peer_address_callback_cls, NULL, NULL, NULL, 0);
return;
}
abs_timeout = GNUNET_TIME_relative_to_absolute (timeout);
- msg.header.size = htons (sizeof (struct AddressLookupMessage));
+ msg.header.size = htons (sizeof (struct AddressIterateMessage));
msg.header.type = htons (GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_ITERATE);
msg.timeout = GNUNET_TIME_absolute_hton (abs_timeout);
peer_address_lookup_cb = GNUNET_malloc (sizeof (struct AddressLookupCtx));
peer_address_lookup_cb->timeout = abs_timeout;
peer_address_lookup_cb->client = client;
GNUNET_assert (GNUNET_OK ==
- GNUNET_CLIENT_transmit_and_get_response (client,
- &msg.header,
- timeout,
- GNUNET_YES,
+ GNUNET_CLIENT_transmit_and_get_response (client, &msg.header,
+ timeout, GNUNET_YES,
&peer_address_response_processor,
peer_address_lookup_cb));
}