From: Matthias Wachs Date: Thu, 29 Sep 2011 14:44:24 +0000 (+0000) Subject: fixing list-connections to show correct peer id X-Git-Tag: initial-import-from-subversion-38251~16880 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=8377aa60c8714fcec4967e1652c4628032b55bf6;p=oweals%2Fgnunet.git fixing list-connections to show correct peer id extending neighbour-iterate to return plugin, addr and addresslen --- diff --git a/src/transport/gnunet-service-transport.c b/src/transport/gnunet-service-transport.c index 92f78fec5..3693bcf2e 100644 --- a/src/transport/gnunet-service-transport.c +++ b/src/transport/gnunet-service-transport.c @@ -83,11 +83,17 @@ struct GNUNET_ATS_Handle *GST_ats; * @param target a connected neighbour * @param ats performance information (unused) * @param ats_count number of records in ats (unused) + * @param transport plugin + * @param addr address + * @param addrlen address length */ static void transmit_our_hello (void *cls, const struct GNUNET_PeerIdentity *target, const struct GNUNET_TRANSPORT_ATS_Information *ats, - uint32_t ats_count) + uint32_t ats_count, + const char * transport, + const void * addr, + size_t addrlen) { const struct GNUNET_MessageHeader *hello = cls; diff --git a/src/transport/gnunet-service-transport_blacklist.c b/src/transport/gnunet-service-transport_blacklist.c index a73aa17c1..cb79787ce 100644 --- a/src/transport/gnunet-service-transport_blacklist.c +++ b/src/transport/gnunet-service-transport_blacklist.c @@ -550,11 +550,17 @@ struct TestConnectionContext * @param neighbour neighbour's identity * @param ats performance data * @param ats_count number of entries in ats (excluding 0-termination) + * @param transport plugin + * @param addr address + * @param addrlen address length */ static void test_connection_ok (void *cls, const struct GNUNET_PeerIdentity *neighbour, const struct GNUNET_TRANSPORT_ATS_Information *ats, - uint32_t ats_count) + uint32_t ats_count, + const char * transport, + const void * addr, + size_t addrlen) { struct TestConnectionContext *tcc = cls; struct GST_BlacklistCheck *bc; diff --git a/src/transport/gnunet-service-transport_clients.c b/src/transport/gnunet-service-transport_clients.c index 9936c1137..650efc8dd 100644 --- a/src/transport/gnunet-service-transport_clients.c +++ b/src/transport/gnunet-service-transport_clients.c @@ -317,12 +317,18 @@ client_disconnect_notification (void *cls, struct GNUNET_SERVER_Client *client) * @param peer identity of the neighbour * @param ats performance data * @param ats_count number of entries in ats (excluding 0-termination) + * @param transport plugin + * @param addr address + * @param addrlen address length */ static void notify_client_about_neighbour (void *cls, const struct GNUNET_PeerIdentity *peer, const struct GNUNET_TRANSPORT_ATS_Information - *ats, uint32_t ats_count) + *ats, uint32_t ats_count, + const char * transport, + const void * addr, + size_t addrlen) { struct TransportClient *tc = cls; struct ConnectInfoMessage *cim; @@ -803,24 +809,32 @@ clients_handle_peer_address_lookup (void *cls, * @param neighbour identity of the neighbour * @param ats performance data * @param ats_count number of entries in ats (excluding 0-termination) + * @param transport plugin + * @param addr address + * @param addrlen address length */ static void output_addresses (void *cls, const struct GNUNET_PeerIdentity *peer, const struct GNUNET_TRANSPORT_ATS_Information *ats, - uint32_t ats_count) + uint32_t ats_count, + const char * transport, + const void * addr, + size_t addrlen) { struct GNUNET_SERVER_TransmitContext *tc = cls; - struct AddressIterateResponseMessage msg; + struct AddressIterateResponseMessage * msg; size_t size; size = - sizeof (struct AddressIterateResponseMessage) - - sizeof (struct GNUNET_MessageHeader); - memcpy (&msg.peer, peer, sizeof (struct GNUNET_PeerIdentity)); - msg.addrlen = ntohs (0); - msg.pluginlen = ntohs (0); - - transmit_binary_to_client (tc, &msg, size); + (sizeof (struct AddressIterateResponseMessage) + strlen(transport) + 1); + msg = GNUNET_malloc (size); + memcpy (&msg->peer, peer, sizeof (struct GNUNET_PeerIdentity)); + memcpy (&msg[0], transport, strlen(transport)+1); + msg->addrlen = ntohs (addrlen); + msg->pluginlen = ntohs (strlen(transport)+1); + + transmit_binary_to_client (tc, msg, size); + GNUNET_free(msg); } diff --git a/src/transport/gnunet-service-transport_neighbours.c b/src/transport/gnunet-service-transport_neighbours.c index 09e24565b..26bf3771c 100644 --- a/src/transport/gnunet-service-transport_neighbours.c +++ b/src/transport/gnunet-service-transport_neighbours.c @@ -1064,7 +1064,7 @@ neighbours_iterate (void *cls, const GNUNET_HashCode * key, void *value) return GNUNET_OK; GNUNET_assert (n->ats_count > 0); - ic->cb (ic->cb_cls, &n->id, n->ats, n->ats_count); + ic->cb (ic->cb_cls, &n->id, n->ats, n->ats_count, n->plugin_name, n->addr, n->addrlen); return GNUNET_OK; } diff --git a/src/transport/gnunet-service-transport_neighbours.h b/src/transport/gnunet-service-transport_neighbours.h index 86939f91a..88e24b73a 100644 --- a/src/transport/gnunet-service-transport_neighbours.h +++ b/src/transport/gnunet-service-transport_neighbours.h @@ -152,13 +152,19 @@ GST_neighbours_force_disconnect (const struct GNUNET_PeerIdentity *target); * @param neighbour identity of the neighbour * @param ats performance data * @param ats_count number of entries in ats (including 0-termination) + * @param transport plugin + * @param addr address + * @param addrlen address length */ typedef void (*GST_NeighbourIterator) (void *cls, const struct GNUNET_PeerIdentity * neighbour, const struct GNUNET_TRANSPORT_ATS_Information * ats, - uint32_t ats_count); + uint32_t ats_count, + const char * transport, + const void * addr, + size_t addrlen); /** diff --git a/src/transport/transport_api_address_iterate.c b/src/transport/transport_api_address_iterate.c index da333798f..a5b4251c5 100644 --- a/src/transport/transport_api_address_iterate.c +++ b/src/transport/transport_api_address_iterate.c @@ -80,7 +80,10 @@ peer_address_response_processor (void *cls, struct AddressLookupCtx *alucb = cls; struct AddressIterateResponseMessage *address; uint16_t size; - + char * transport; + size_t transport_len; + //void * addr; + size_t addrlen; if (msg == NULL) { @@ -103,7 +106,7 @@ peer_address_response_processor (void *cls, GNUNET_free (alucb); return; } - if (size != sizeof (struct AddressIterateResponseMessage)) + if (size < sizeof (struct AddressIterateResponseMessage)) { /* invalid reply */ GNUNET_break (0); @@ -113,15 +116,16 @@ peer_address_response_processor (void *cls, return; } - address = (struct AddressIterateResponseMessage *) msg; - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "PEER: %s\n", - GNUNET_i2s (&address->peer)); + 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_TIME_absolute_get_remaining (alucb->timeout)); - alucb->cb (alucb->cb_cls, &address->peer, NULL, NULL, 0); + alucb->cb (alucb->cb_cls, &address->peer, transport, NULL, addrlen); }