2 #include "gnunet_client_lib.h"
3 #include "gnunet_arm_service.h"
4 #include "gnunet_hello_lib.h"
5 #include "gnunet_protocols.h"
6 #include "gnunet_server_lib.h"
7 #include "gnunet_time_lib.h"
8 #include "gnunet_transport_service.h"
12 struct AddressLookUpCB
14 GNUNET_TRANSPORT_AddressLookUpCallback cb;
16 struct GNUNET_TIME_Absolute timeout;
17 struct GNUNET_CLIENT_Connection *client;
23 address_response_processor (void *cls, const struct GNUNET_MessageHeader *msg)
25 struct AddressLookUpCB *alucb = cls;
32 alucb->cb (alucb->cls, NULL);
33 GNUNET_CLIENT_disconnect (alucb->client);
37 size = ntohs (msg->size);
38 if (size == sizeof (struct GNUNET_MessageHeader))
45 address = (const char *) &msg[1];
46 if (address[size - sizeof (struct GNUNET_MessageHeader) - 1] != '\0')
50 alucb->cb (alucb->cls, NULL);
51 GNUNET_CLIENT_disconnect (alucb->client);
57 /* expect more replies */
58 GNUNET_CLIENT_receive (alucb->client, &address_response_processor,
60 GNUNET_TIME_absolute_get_remaining
64 alucb->cb (alucb->cls, address);
68 GNUNET_CLIENT_disconnect (alucb->client);
74 GNUNET_TRANSPORT_address_lookup (struct GNUNET_SCHEDULER_Handle *sched,
75 const struct GNUNET_CONFIGURATION_Handle
76 *cfg, const char *address, size_t addressLen,
77 const char *nameTrans,
78 struct GNUNET_TIME_Relative timeout,
79 GNUNET_TRANSPORT_AddressLookUpCallback aluc,
83 sizeof (struct AddressLookupMessage) + addressLen + strlen (nameTrans) +
85 struct AddressLookupMessage *msg;
86 struct GNUNET_TIME_Absolute abs_timeout;
87 struct AddressLookUpCB *aluCB;
88 struct GNUNET_CLIENT_Connection *client;
90 if (len >= GNUNET_SERVER_MAX_MESSAGE_SIZE)
93 aluc (aluc_cls, NULL);
96 client = GNUNET_CLIENT_connect (sched, "transport", cfg);
99 aluc (aluc_cls, NULL);
102 abs_timeout = GNUNET_TIME_relative_to_absolute (timeout);
103 msg = GNUNET_malloc (len);
104 msg->header->size = htons (len);
105 msg->header->type = htons (GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_LOOKUP);
106 msg->timeout = GNUNET_TIME_absolute_hton (abs_timeout);
107 msg->addrlen = htonl (addressLen);
108 char *addrbuf = (char *) &msg[1];
109 memcpy (addrbuf, address, addressLen);
110 char *tbuf = &addrbuf[addressLen];
111 memcpy (tbuf, nameTrans, strlen (nameTrans) + 1);
112 aluCB = GNUNET_malloc (sizeof (struct AddressLookUpCB));
114 aluCB->cb_cls = aluc_cls;
115 aluCB->timeout = abs_timeout;
116 aluCB->client = client;
117 GNUNET_CLIENT_transmit_and_get_response (client, msg->header, timeout,
119 &address_response_processor,