[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r18369 - in gnunet/src: core include transport
From: |
gnunet |
Subject: |
[GNUnet-SVN] r18369 - in gnunet/src: core include transport |
Date: |
Tue, 29 Nov 2011 10:52:10 +0100 |
Author: wachs
Date: 2011-11-29 10:52:10 +0100 (Tue, 29 Nov 2011)
New Revision: 18369
Added:
gnunet/src/transport/transport_api_address_lookup.c
gnunet/src/transport/transport_api_address_to_string.c
Removed:
gnunet/src/transport/transport_api_address_iterate.c
gnunet/src/transport/transport_api_address_lookup.c
gnunet/src/transport/transport_api_peer_address_lookup.c
Modified:
gnunet/src/core/gnunet-core-list-connections.c
gnunet/src/include/gnunet_transport_service.h
gnunet/src/transport/Makefile.am
Log:
api clean up next steps
Modified: gnunet/src/core/gnunet-core-list-connections.c
===================================================================
--- gnunet/src/core/gnunet-core-list-connections.c 2011-11-29 09:37:54 UTC
(rev 18368)
+++ gnunet/src/core/gnunet-core-list-connections.c 2011-11-29 09:52:10 UTC
(rev 18369)
@@ -137,8 +137,12 @@
#endif
pc = GNUNET_malloc (sizeof (struct PrintContext));
pc->peer = *peer;
- GNUNET_TRANSPORT_peer_get_active_addresses (cfg, peer,
GNUNET_TIME_UNIT_MINUTES,
- &process_resolved_address, pc);
+ GNUNET_TRANSPORT_peer_get_active_addresses (cfg,
+ peer,
+ GNUNET_YES,
+ GNUNET_TIME_UNIT_MINUTES,
+ &process_resolved_address,
+ pc);
}
#if VERBOSE
else
Modified: gnunet/src/include/gnunet_transport_service.h
===================================================================
--- gnunet/src/include/gnunet_transport_service.h 2011-11-29 09:37:54 UTC
(rev 18368)
+++ gnunet/src/include/gnunet_transport_service.h 2011-11-29 09:52:10 UTC
(rev 18369)
@@ -310,8 +310,7 @@
/**
- * Return all the known addresses for a peer. FIXME: document better!
- * FIXME: use better name!
+ * Return all the known addresses for a peer.
* CHANGE: Returns the address(es) that we are currently using for this
* peer. Upon completion, the 'AddressLookUpCallback' is called one more
* time with 'NULL' for the address and the peer. After this, the operation
must no
@@ -329,7 +328,7 @@
struct GNUNET_TRANSPORT_PeerAddressLookupContext *
GNUNET_TRANSPORT_peer_get_active_addresses (const struct
GNUNET_CONFIGURATION_Handle *cfg,
const struct GNUNET_PeerIdentity *peer,
- // FIXME: add argument: one_shot
+ int one_shot,
struct GNUNET_TIME_Relative timeout,
GNUNET_TRANSPORT_AddressLookUpCallback
peer_address_callback,
void *peer_address_callback_cls);
Modified: gnunet/src/transport/Makefile.am
===================================================================
--- gnunet/src/transport/Makefile.am 2011-11-29 09:37:54 UTC (rev 18368)
+++ gnunet/src/transport/Makefile.am 2011-11-29 09:52:10 UTC (rev 18369)
@@ -83,9 +83,8 @@
libgnunettransport_la_SOURCES = \
transport_api.c transport.h \
transport_api_blacklist.c \
- transport_api_address_lookup.c \
- transport_api_peer_address_lookup.c \
- transport_api_address_iterate.c
+ transport_api_address_to_string.c \
+ transport_api_address_lookup.c
libgnunettransport_la_LIBADD = \
$(top_builddir)/src/hello/libgnunethello.la \
$(top_builddir)/src/util/libgnunetutil.la \
Deleted: gnunet/src/transport/transport_api_address_iterate.c
===================================================================
--- gnunet/src/transport/transport_api_address_iterate.c 2011-11-29
09:37:54 UTC (rev 18368)
+++ gnunet/src/transport/transport_api_address_iterate.c 2011-11-29
09:52:10 UTC (rev 18369)
@@ -1,169 +0,0 @@
-/*
- This file is part of GNUnet.
- (C) 2009, 2010 Christian Grothoff (and other contributing authors)
-
- GNUnet is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published
- by the Free Software Foundation; either version 3, or (at your
- option) any later version.
-
- GNUnet is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNUnet; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
-*/
-
-/**
- * @file transport/transport_api_address_iterate.c
- * @brief api for asking transport service to iterate over all
- * known addresses
- *
- * This api provides a single function call to ask the transport
- * service to list all peers and their known addresses, as pretty
- * printed by the appropriate plugin. Reports whether or not the
- * address is connected as well.
- */
-
-#include "platform.h"
-#include "gnunet_client_lib.h"
-#include "gnunet_arm_service.h"
-#include "gnunet_hello_lib.h"
-#include "gnunet_protocols.h"
-#include "gnunet_server_lib.h"
-#include "gnunet_time_lib.h"
-#include "gnunet_transport_service.h"
-#include "transport.h"
-
-/**
- * Context for the address lookup.
- */
-struct AddressLookupCtx
-{
- /**
- * Function to call with the human-readable address.
- */
- GNUNET_TRANSPORT_AddressLookUpCallback cb;
-
- /**
- * Closure for cb.
- */
- void *cb_cls;
-
- /**
- * Connection to the service.
- */
- struct GNUNET_CLIENT_Connection *client;
-
- /**
- * When should this operation time out?
- */
- struct GNUNET_TIME_Absolute timeout;
-};
-
-
-/**
- * Function called with responses from the service.
- *
- * @param cls our 'struct AddressLookupCtx*'
- * @param msg NULL on timeout or error, otherwise presumably a
- * message with the human-readable peer and address
- */
-static void
-peer_address_response_processor (void *cls,
- const struct GNUNET_MessageHeader *msg)
-{
- struct AddressLookupCtx *alucb = cls;
- struct AddressIterateResponseMessage *arm;
- struct GNUNET_HELLO_Address * address;
- uint16_t size;
-
- if (msg == NULL)
- {
- alucb->cb (alucb->cb_cls, NULL);
- 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);
- GNUNET_CLIENT_disconnect (alucb->client, GNUNET_NO);
- GNUNET_free (alucb);
- return;
- }
- if (size < sizeof (struct AddressIterateResponseMessage))
- {
- /* invalid reply */
- GNUNET_break (0);
- alucb->cb (alucb->cb_cls, NULL);
- GNUNET_CLIENT_disconnect (alucb->client, GNUNET_NO);
- GNUNET_free (alucb);
- return;
- }
-
- arm = (struct AddressIterateResponseMessage *) &msg[1];
- address = (struct GNUNET_HELLO_Address *) &arm[1];
-
- /* 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);
-}
-
-
-/**
- * Return all the known addresses for a peer.
- *
- * @param cfg configuration to use
- * @param timeout how long is the lookup allowed to take at most
- * @param peer_address_callback function to call with the results
- * @param peer_address_callback_cls closure for peer_address_callback
- */
-void
-GNUNET_TRANSPORT_address_iterate (const struct GNUNET_CONFIGURATION_Handle
*cfg,
- struct GNUNET_TIME_Relative timeout,
- GNUNET_TRANSPORT_AddressLookUpCallback
- peer_address_callback,
- void *peer_address_callback_cls)
-{
- struct AddressIterateMessage msg;
- struct GNUNET_TIME_Absolute abs_timeout;
- struct AddressLookupCtx *peer_address_lookup_cb;
- struct GNUNET_CLIENT_Connection *client;
-
- client = GNUNET_CLIENT_connect ("transport", cfg);
- if (client == NULL)
- {
- peer_address_callback (peer_address_callback_cls, NULL);
- return;
- }
- abs_timeout = GNUNET_TIME_relative_to_absolute (timeout);
-
- 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->cb = peer_address_callback;
- peer_address_lookup_cb->cb_cls = peer_address_callback_cls;
- 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,
-
&peer_address_response_processor,
-
peer_address_lookup_cb));
-}
-
-/* end of transport_api_address_iterate.c */
Deleted: gnunet/src/transport/transport_api_address_lookup.c
===================================================================
--- gnunet/src/transport/transport_api_address_lookup.c 2011-11-29 09:37:54 UTC
(rev 18368)
+++ gnunet/src/transport/transport_api_address_lookup.c 2011-11-29 09:52:10 UTC
(rev 18369)
@@ -1,184 +0,0 @@
-/*
- This file is part of GNUnet.
- (C) 2009, 2010 Christian Grothoff (and other contributing authors)
-
- GNUnet is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published
- by the Free Software Foundation; either version 3, or (at your
- option) any later version.
-
- GNUnet is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNUnet; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
-*/
-#include "platform.h"
-#include "gnunet_client_lib.h"
-#include "gnunet_arm_service.h"
-#include "gnunet_hello_lib.h"
-#include "gnunet_protocols.h"
-#include "gnunet_server_lib.h"
-#include "gnunet_time_lib.h"
-#include "gnunet_transport_service.h"
-#include "transport.h"
-
-/**
- * Context for the address lookup.
- */
-struct GNUNET_TRANSPORT_AddressToStringContext
-{
- /**
- * Function to call with the human-readable address.
- */
- GNUNET_TRANSPORT_AddressToStringCallback cb;
-
- /**
- * Closure for cb.
- */
- void *cb_cls;
-
- /**
- * Connection to the service.
- */
- struct GNUNET_CLIENT_Connection *client;
-
- /**
- * When should this operation time out?
- */
- struct GNUNET_TIME_Absolute timeout;
-};
-
-
-/**
- * Function called with responses from the service.
- *
- * @param cls our 'struct GNUNET_TRANSPORT_AddressLookupContext*'
- * @param msg NULL on timeout or error, otherwise presumably a
- * message with the human-readable address
- */
-static void
-address_response_processor (void *cls, const struct GNUNET_MessageHeader *msg)
-{
- struct GNUNET_TRANSPORT_AddressToStringContext *alucb = cls;
- const char *address;
- uint16_t size;
-
- if (msg == NULL)
- {
- alucb->cb (alucb->cb_cls, NULL);
- 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);
- if (size == sizeof (struct GNUNET_MessageHeader))
- {
- /* done! */
- alucb->cb (alucb->cb_cls, NULL);
- 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')
- {
- /* invalid reply */
- GNUNET_break (0);
- alucb->cb (alucb->cb_cls, NULL);
- GNUNET_CLIENT_disconnect (alucb->client, GNUNET_NO);
- GNUNET_free (alucb);
- return;
- }
- /* expect more replies */
- GNUNET_CLIENT_receive (alucb->client, &address_response_processor, alucb,
- GNUNET_TIME_absolute_get_remaining (alucb->timeout));
- alucb->cb (alucb->cb_cls, address);
-}
-
-
-/**
- * Convert a binary address into a human readable address.
- *
- * @param cfg configuration to use
- * @param address address to convert (binary format)
- * @param addressLen number of bytes in address
- * @param numeric should (IP) addresses be displayed in numeric form
- * (otherwise do reverse DNS lookup)
- * @param nameTrans name of the transport to which the address belongs
- * @param timeout how long is the lookup allowed to take at most
- * @param aluc function to call with the results
- * @param aluc_cls closure for aluc
- * @return handle to cancel the operation, NULL on error
- */
-struct GNUNET_TRANSPORT_AddressToStringContext *
-GNUNET_TRANSPORT_address_to_string (const struct GNUNET_CONFIGURATION_Handle
*cfg,
- const struct GNUNET_HELLO_Address *address,
- int numeric,
- struct GNUNET_TIME_Relative timeout,
- GNUNET_TRANSPORT_AddressToStringCallback aluc,
- void *aluc_cls)
-{
- size_t len;
- size_t alen;
- struct AddressLookupMessage *msg;
- struct GNUNET_TRANSPORT_AddressToStringContext *alc;
- struct GNUNET_CLIENT_Connection *client;
- char *addrbuf;
-
- alen = GNUNET_HELLO_address_get_size (address);
- len = sizeof (struct AddressLookupMessage) + alen;
- if (len >= GNUNET_SERVER_MAX_MESSAGE_SIZE)
- {
- GNUNET_break (0);
- return NULL;
- }
- client = GNUNET_CLIENT_connect ("transport", cfg);
- if (client == NULL)
- return NULL;
- msg = GNUNET_malloc (len);
- msg->header.size = htons (len);
- msg->header.type = htons (GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_LOOKUP);
- msg->numeric_only = htonl (numeric);
- msg->timeout = GNUNET_TIME_relative_hton (timeout);
- msg->addrlen = htonl (alen);
- addrbuf = (char *) &msg[1];
- memcpy (addrbuf, address, alen);
- alc = GNUNET_malloc (sizeof (struct
GNUNET_TRANSPORT_AddressToStringContext));
- alc->cb = aluc;
- alc->cb_cls = aluc_cls;
- alc->timeout = GNUNET_TIME_relative_to_absolute (timeout);
- alc->client = client;
- GNUNET_assert (GNUNET_OK ==
- GNUNET_CLIENT_transmit_and_get_response (client, &msg->header,
- timeout, GNUNET_YES,
-
&address_response_processor,
- alc));
- GNUNET_free (msg);
- return alc;
-}
-
-
-/**
- * Cancel request for address conversion.
- *
- * @param alc handle for the request to cancel
- */
-void
-GNUNET_TRANSPORT_address_to_string_cancel (struct
- GNUNET_TRANSPORT_AddressToStringContext
- *alc)
-{
- GNUNET_CLIENT_disconnect (alc->client, GNUNET_NO);
- GNUNET_free (alc);
-}
-
-
-
-/* end of transport_api_address_lookup.c */
Copied: gnunet/src/transport/transport_api_address_lookup.c (from rev 18368,
gnunet/src/transport/transport_api_peer_address_lookup.c)
===================================================================
--- gnunet/src/transport/transport_api_address_lookup.c
(rev 0)
+++ gnunet/src/transport/transport_api_address_lookup.c 2011-11-29 09:52:10 UTC
(rev 18369)
@@ -0,0 +1,281 @@
+/*
+ This file is part of GNUnet.
+ (C) 2009, 2010 Christian Grothoff (and other contributing authors)
+
+ GNUnet is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GNUnet is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GNUnet; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+/**
+ * @file transport/transport_api_peer_address_lookup.c
+ * @brief given a peer id, get all known addresses from transport service
+ *
+ * This api provides the ability to query the transport service about
+ * the status of connections to a specific peer. Calls back with a
+ * pretty printed string of the address, as formatted by the appropriate
+ * transport plugin, and whether or not the address given is currently
+ * in the 'connected' state (according to the transport service).
+ */
+
+#include "platform.h"
+#include "gnunet_client_lib.h"
+#include "gnunet_arm_service.h"
+#include "gnunet_hello_lib.h"
+#include "gnunet_protocols.h"
+#include "gnunet_server_lib.h"
+#include "gnunet_time_lib.h"
+#include "gnunet_transport_service.h"
+#include "transport.h"
+
+/**
+ * Context for the address lookup.
+ */
+struct GNUNET_TRANSPORT_PeerAddressLookupContext
+{
+ /**
+ * Function to call with the human-readable address.
+ */
+ GNUNET_TRANSPORT_AddressLookUpCallback cb;
+
+ /**
+ * Closure for cb.
+ */
+ void *cb_cls;
+
+ /**
+ * Connection to the service.
+ */
+ struct GNUNET_CLIENT_Connection *client;
+
+ /**
+ * When should this operation time out?
+ */
+ struct GNUNET_TIME_Absolute timeout;
+};
+
+
+/**
+ * Function called with responses from the service.
+ *
+ * @param cls our 'struct GNUNET_TRANSPORT_PeerAddressLookupContext*'
+ * @param msg NULL on timeout or error, otherwise presumably a
+ * message with the human-readable address
+ */
+static void
+peer_address_response_processor (void *cls,
+ const struct GNUNET_MessageHeader *msg)
+{
+ struct GNUNET_TRANSPORT_PeerAddressLookupContext *alucb = cls;
+ const struct GNUNET_HELLO_Address *address;
+ uint16_t size;
+
+ if (msg == NULL)
+ {
+ alucb->cb (alucb->cb_cls, NULL);
+ 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);
+ if (size == sizeof (struct GNUNET_MessageHeader))
+ {
+ /* done! */
+ alucb->cb (alucb->cb_cls, NULL );
+ GNUNET_CLIENT_disconnect (alucb->client, GNUNET_NO);
+ GNUNET_free (alucb);
+ return;
+ }
+ address = (const struct GNUNET_HELLO_Address *) &msg[1];
+#if 0
+ if (address[size - sizeof (struct GNUNET_MessageHeader) - 1] != '\0')
+ {
+ /* invalid reply */
+ GNUNET_break (0);
+ alucb->cb (alucb->cb_cls, NULL );
+ GNUNET_CLIENT_disconnect (alucb->client, GNUNET_NO);
+ GNUNET_free (alucb);
+ return;
+ }
+#endif
+ /* expect more replies */
+ GNUNET_CLIENT_receive (alucb->client, &peer_address_response_processor,
alucb,
+ GNUNET_TIME_absolute_get_remaining (alucb->timeout));
+
+ /* REFACTOR FIX THIS */
+ alucb->cb (alucb->cb_cls, address );
+}
+
+
+/**
+ * Return all the known addresses for a peer.
+ *
+ * @param cfg configuration to use
+ * @param peer peer identity to look up the addresses of
+ * @param timeout how long is the lookup allowed to take at most
+ * @param peer_address_callback function to call with the results
+ * @param peer_address_callback_cls closure for peer_address_callback
+ * @return handle to cancel the operation, NULL on error
+ */
+struct GNUNET_TRANSPORT_PeerAddressLookupContext *
+GNUNET_TRANSPORT_peer_get_active_addresses (const struct
GNUNET_CONFIGURATION_Handle *cfg,
+ const struct GNUNET_PeerIdentity *peer,
+ int one_shot,
+ struct GNUNET_TIME_Relative timeout,
+ GNUNET_TRANSPORT_AddressLookUpCallback
peer_address_callback,
+ void *peer_address_callback_cls)
+{
+ struct PeerAddressLookupMessage msg;
+ struct GNUNET_TRANSPORT_PeerAddressLookupContext *alc;
+ struct GNUNET_CLIENT_Connection *client;
+
+ client = GNUNET_CLIENT_connect ("transport", cfg);
+ if (client == NULL)
+ return NULL;
+ msg.header.size = htons (sizeof (struct PeerAddressLookupMessage));
+ msg.header.type = htons (GNUNET_MESSAGE_TYPE_TRANSPORT_PEER_ADDRESS_LOOKUP);
+ msg.reserved = htonl (0);
+ msg.timeout = GNUNET_TIME_relative_hton (timeout);
+ memcpy (&msg.peer, peer, sizeof (struct GNUNET_PeerIdentity));
+ alc = GNUNET_malloc (sizeof (struct
GNUNET_TRANSPORT_PeerAddressLookupContext));
+ alc->cb = peer_address_callback;
+ alc->cb_cls = peer_address_callback_cls;
+ alc->timeout = GNUNET_TIME_relative_to_absolute (timeout);
+ alc->client = client;
+ GNUNET_assert (GNUNET_OK ==
+ GNUNET_CLIENT_transmit_and_get_response (client, &msg.header,
+ timeout, GNUNET_YES,
+
&peer_address_response_processor,
+ alc));
+ return alc;
+}
+
+
+/**
+ * Cancel request for address conversion.
+ *
+ * @param alc handle for the request to cancel
+ */
+void
+GNUNET_TRANSPORT_peer_get_active_addresses_cancel (struct
+
GNUNET_TRANSPORT_PeerAddressLookupContext
+ *alc)
+{
+ GNUNET_CLIENT_disconnect (alc->client, GNUNET_NO);
+ GNUNET_free (alc);
+}
+
+/**
+ * Function called with responses from the service.
+ *
+ * @param cls our 'struct AddressLookupCtx*'
+ * @param msg NULL on timeout or error, otherwise presumably a
+ * message with the human-readable peer and address
+ */
+static void
+peer_address_iteration_response_processor (void *cls,
+ const struct GNUNET_MessageHeader *msg)
+{
+ struct GNUNET_TRANSPORT_PeerAddressLookupContext *alucb = cls;
+ struct AddressIterateResponseMessage *arm;
+ struct GNUNET_HELLO_Address * address;
+ uint16_t size;
+
+ if (msg == NULL)
+ {
+ alucb->cb (alucb->cb_cls, NULL);
+ 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);
+ GNUNET_CLIENT_disconnect (alucb->client, GNUNET_NO);
+ GNUNET_free (alucb);
+ return;
+ }
+ if (size < sizeof (struct AddressIterateResponseMessage))
+ {
+ /* invalid reply */
+ GNUNET_break (0);
+ alucb->cb (alucb->cb_cls, NULL);
+ GNUNET_CLIENT_disconnect (alucb->client, GNUNET_NO);
+ GNUNET_free (alucb);
+ return;
+ }
+
+ arm = (struct AddressIterateResponseMessage *) &msg[1];
+ address = (struct GNUNET_HELLO_Address *) &arm[1];
+
+ /* 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);
+}
+
+
+/**
+ * Return all the known addresses for a peer.
+ *
+ * @param cfg configuration to use
+ * @param timeout how long is the lookup allowed to take at most
+ * @param peer_address_callback function to call with the results
+ * @param peer_address_callback_cls closure for peer_address_callback
+ */
+void
+GNUNET_TRANSPORT_address_iterate (const struct GNUNET_CONFIGURATION_Handle
*cfg,
+ struct GNUNET_TIME_Relative timeout,
+ GNUNET_TRANSPORT_AddressLookUpCallback
+ peer_address_callback,
+ void *peer_address_callback_cls)
+{
+ struct AddressIterateMessage msg;
+ struct GNUNET_TIME_Absolute abs_timeout;
+ struct GNUNET_TRANSPORT_PeerAddressLookupContext *peer_address_lookup_cb;
+ struct GNUNET_CLIENT_Connection *client;
+
+ client = GNUNET_CLIENT_connect ("transport", cfg);
+ if (client == NULL)
+ {
+ peer_address_callback (peer_address_callback_cls, NULL);
+ return;
+ }
+ abs_timeout = GNUNET_TIME_relative_to_absolute (timeout);
+
+ 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
GNUNET_TRANSPORT_PeerAddressLookupContext));
+ peer_address_lookup_cb->cb = peer_address_callback;
+ peer_address_lookup_cb->cb_cls = peer_address_callback_cls;
+ 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,
+
&peer_address_iteration_response_processor,
+
peer_address_lookup_cb));
+}
+
+/* end of transport_api_peer_address_lookup.c */
Copied: gnunet/src/transport/transport_api_address_to_string.c (from rev 18368,
gnunet/src/transport/transport_api_address_lookup.c)
===================================================================
--- gnunet/src/transport/transport_api_address_to_string.c
(rev 0)
+++ gnunet/src/transport/transport_api_address_to_string.c 2011-11-29
09:52:10 UTC (rev 18369)
@@ -0,0 +1,184 @@
+/*
+ This file is part of GNUnet.
+ (C) 2009, 2010 Christian Grothoff (and other contributing authors)
+
+ GNUnet is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GNUnet is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GNUnet; see the file COPYING. If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+#include "platform.h"
+#include "gnunet_client_lib.h"
+#include "gnunet_arm_service.h"
+#include "gnunet_hello_lib.h"
+#include "gnunet_protocols.h"
+#include "gnunet_server_lib.h"
+#include "gnunet_time_lib.h"
+#include "gnunet_transport_service.h"
+#include "transport.h"
+
+/**
+ * Context for the address lookup.
+ */
+struct GNUNET_TRANSPORT_AddressToStringContext
+{
+ /**
+ * Function to call with the human-readable address.
+ */
+ GNUNET_TRANSPORT_AddressToStringCallback cb;
+
+ /**
+ * Closure for cb.
+ */
+ void *cb_cls;
+
+ /**
+ * Connection to the service.
+ */
+ struct GNUNET_CLIENT_Connection *client;
+
+ /**
+ * When should this operation time out?
+ */
+ struct GNUNET_TIME_Absolute timeout;
+};
+
+
+/**
+ * Function called with responses from the service.
+ *
+ * @param cls our 'struct GNUNET_TRANSPORT_AddressLookupContext*'
+ * @param msg NULL on timeout or error, otherwise presumably a
+ * message with the human-readable address
+ */
+static void
+address_response_processor (void *cls, const struct GNUNET_MessageHeader *msg)
+{
+ struct GNUNET_TRANSPORT_AddressToStringContext *alucb = cls;
+ const char *address;
+ uint16_t size;
+
+ if (msg == NULL)
+ {
+ alucb->cb (alucb->cb_cls, NULL);
+ 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);
+ if (size == sizeof (struct GNUNET_MessageHeader))
+ {
+ /* done! */
+ alucb->cb (alucb->cb_cls, NULL);
+ 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')
+ {
+ /* invalid reply */
+ GNUNET_break (0);
+ alucb->cb (alucb->cb_cls, NULL);
+ GNUNET_CLIENT_disconnect (alucb->client, GNUNET_NO);
+ GNUNET_free (alucb);
+ return;
+ }
+ /* expect more replies */
+ GNUNET_CLIENT_receive (alucb->client, &address_response_processor, alucb,
+ GNUNET_TIME_absolute_get_remaining (alucb->timeout));
+ alucb->cb (alucb->cb_cls, address);
+}
+
+
+/**
+ * Convert a binary address into a human readable address.
+ *
+ * @param cfg configuration to use
+ * @param address address to convert (binary format)
+ * @param addressLen number of bytes in address
+ * @param numeric should (IP) addresses be displayed in numeric form
+ * (otherwise do reverse DNS lookup)
+ * @param nameTrans name of the transport to which the address belongs
+ * @param timeout how long is the lookup allowed to take at most
+ * @param aluc function to call with the results
+ * @param aluc_cls closure for aluc
+ * @return handle to cancel the operation, NULL on error
+ */
+struct GNUNET_TRANSPORT_AddressToStringContext *
+GNUNET_TRANSPORT_address_to_string (const struct GNUNET_CONFIGURATION_Handle
*cfg,
+ const struct GNUNET_HELLO_Address *address,
+ int numeric,
+ struct GNUNET_TIME_Relative timeout,
+ GNUNET_TRANSPORT_AddressToStringCallback aluc,
+ void *aluc_cls)
+{
+ size_t len;
+ size_t alen;
+ struct AddressLookupMessage *msg;
+ struct GNUNET_TRANSPORT_AddressToStringContext *alc;
+ struct GNUNET_CLIENT_Connection *client;
+ char *addrbuf;
+
+ alen = GNUNET_HELLO_address_get_size (address);
+ len = sizeof (struct AddressLookupMessage) + alen;
+ if (len >= GNUNET_SERVER_MAX_MESSAGE_SIZE)
+ {
+ GNUNET_break (0);
+ return NULL;
+ }
+ client = GNUNET_CLIENT_connect ("transport", cfg);
+ if (client == NULL)
+ return NULL;
+ msg = GNUNET_malloc (len);
+ msg->header.size = htons (len);
+ msg->header.type = htons (GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_LOOKUP);
+ msg->numeric_only = htonl (numeric);
+ msg->timeout = GNUNET_TIME_relative_hton (timeout);
+ msg->addrlen = htonl (alen);
+ addrbuf = (char *) &msg[1];
+ memcpy (addrbuf, address, alen);
+ alc = GNUNET_malloc (sizeof (struct
GNUNET_TRANSPORT_AddressToStringContext));
+ alc->cb = aluc;
+ alc->cb_cls = aluc_cls;
+ alc->timeout = GNUNET_TIME_relative_to_absolute (timeout);
+ alc->client = client;
+ GNUNET_assert (GNUNET_OK ==
+ GNUNET_CLIENT_transmit_and_get_response (client, &msg->header,
+ timeout, GNUNET_YES,
+
&address_response_processor,
+ alc));
+ GNUNET_free (msg);
+ return alc;
+}
+
+
+/**
+ * Cancel request for address conversion.
+ *
+ * @param alc handle for the request to cancel
+ */
+void
+GNUNET_TRANSPORT_address_to_string_cancel (struct
+ GNUNET_TRANSPORT_AddressToStringContext
+ *alc)
+{
+ GNUNET_CLIENT_disconnect (alc->client, GNUNET_NO);
+ GNUNET_free (alc);
+}
+
+
+
+/* end of transport_api_address_lookup.c */
Deleted: gnunet/src/transport/transport_api_peer_address_lookup.c
===================================================================
--- gnunet/src/transport/transport_api_peer_address_lookup.c 2011-11-29
09:37:54 UTC (rev 18368)
+++ gnunet/src/transport/transport_api_peer_address_lookup.c 2011-11-29
09:52:10 UTC (rev 18369)
@@ -1,181 +0,0 @@
-/*
- This file is part of GNUnet.
- (C) 2009, 2010 Christian Grothoff (and other contributing authors)
-
- GNUnet is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published
- by the Free Software Foundation; either version 3, or (at your
- option) any later version.
-
- GNUnet is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNUnet; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
-*/
-
-/**
- * @file transport/transport_api_peer_address_lookup.c
- * @brief given a peer id, get all known addresses from transport service
- *
- * This api provides the ability to query the transport service about
- * the status of connections to a specific peer. Calls back with a
- * pretty printed string of the address, as formatted by the appropriate
- * transport plugin, and whether or not the address given is currently
- * in the 'connected' state (according to the transport service).
- */
-
-#include "platform.h"
-#include "gnunet_client_lib.h"
-#include "gnunet_arm_service.h"
-#include "gnunet_hello_lib.h"
-#include "gnunet_protocols.h"
-#include "gnunet_server_lib.h"
-#include "gnunet_time_lib.h"
-#include "gnunet_transport_service.h"
-#include "transport.h"
-
-/**
- * Context for the address lookup.
- */
-struct GNUNET_TRANSPORT_PeerAddressLookupContext
-{
- /**
- * Function to call with the human-readable address.
- */
- GNUNET_TRANSPORT_AddressLookUpCallback cb;
-
- /**
- * Closure for cb.
- */
- void *cb_cls;
-
- /**
- * Connection to the service.
- */
- struct GNUNET_CLIENT_Connection *client;
-
- /**
- * When should this operation time out?
- */
- struct GNUNET_TIME_Absolute timeout;
-};
-
-
-/**
- * Function called with responses from the service.
- *
- * @param cls our 'struct GNUNET_TRANSPORT_PeerAddressLookupContext*'
- * @param msg NULL on timeout or error, otherwise presumably a
- * message with the human-readable address
- */
-static void
-peer_address_response_processor (void *cls,
- const struct GNUNET_MessageHeader *msg)
-{
- struct GNUNET_TRANSPORT_PeerAddressLookupContext *alucb = cls;
- const struct GNUNET_HELLO_Address *address;
- uint16_t size;
-
- if (msg == NULL)
- {
- alucb->cb (alucb->cb_cls, NULL);
- 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);
- if (size == sizeof (struct GNUNET_MessageHeader))
- {
- /* done! */
- alucb->cb (alucb->cb_cls, NULL );
- GNUNET_CLIENT_disconnect (alucb->client, GNUNET_NO);
- GNUNET_free (alucb);
- return;
- }
- address = (const struct GNUNET_HELLO_Address *) &msg[1];
-#if 0
- if (address[size - sizeof (struct GNUNET_MessageHeader) - 1] != '\0')
- {
- /* invalid reply */
- GNUNET_break (0);
- alucb->cb (alucb->cb_cls, NULL );
- GNUNET_CLIENT_disconnect (alucb->client, GNUNET_NO);
- GNUNET_free (alucb);
- return;
- }
-#endif
- /* expect more replies */
- GNUNET_CLIENT_receive (alucb->client, &peer_address_response_processor,
alucb,
- GNUNET_TIME_absolute_get_remaining (alucb->timeout));
-
- /* REFACTOR FIX THIS */
- alucb->cb (alucb->cb_cls, address );
-}
-
-
-/**
- * Return all the known addresses for a peer.
- *
- * @param cfg configuration to use
- * @param peer peer identity to look up the addresses of
- * @param timeout how long is the lookup allowed to take at most
- * @param peer_address_callback function to call with the results
- * @param peer_address_callback_cls closure for peer_address_callback
- * @return handle to cancel the operation, NULL on error
- */
-struct GNUNET_TRANSPORT_PeerAddressLookupContext *
-GNUNET_TRANSPORT_peer_get_active_addresses (const struct
GNUNET_CONFIGURATION_Handle *cfg,
- const struct GNUNET_PeerIdentity *peer,
- struct GNUNET_TIME_Relative timeout,
- GNUNET_TRANSPORT_AddressLookUpCallback
peer_address_callback,
- void *peer_address_callback_cls)
-{
- struct PeerAddressLookupMessage msg;
- struct GNUNET_TRANSPORT_PeerAddressLookupContext *alc;
- struct GNUNET_CLIENT_Connection *client;
-
- client = GNUNET_CLIENT_connect ("transport", cfg);
- if (client == NULL)
- return NULL;
- msg.header.size = htons (sizeof (struct PeerAddressLookupMessage));
- msg.header.type = htons (GNUNET_MESSAGE_TYPE_TRANSPORT_PEER_ADDRESS_LOOKUP);
- msg.reserved = htonl (0);
- msg.timeout = GNUNET_TIME_relative_hton (timeout);
- memcpy (&msg.peer, peer, sizeof (struct GNUNET_PeerIdentity));
- alc = GNUNET_malloc (sizeof (struct
GNUNET_TRANSPORT_PeerAddressLookupContext));
- alc->cb = peer_address_callback;
- alc->cb_cls = peer_address_callback_cls;
- alc->timeout = GNUNET_TIME_relative_to_absolute (timeout);
- alc->client = client;
- GNUNET_assert (GNUNET_OK ==
- GNUNET_CLIENT_transmit_and_get_response (client, &msg.header,
- timeout, GNUNET_YES,
-
&peer_address_response_processor,
- alc));
- return alc;
-}
-
-
-/**
- * Cancel request for address conversion.
- *
- * @param alc handle for the request to cancel
- */
-void
-GNUNET_TRANSPORT_peer_get_active_addresses_cancel (struct
-
GNUNET_TRANSPORT_PeerAddressLookupContext
- *alc)
-{
- GNUNET_CLIENT_disconnect (alc->client, GNUNET_NO);
- GNUNET_free (alc);
-}
-
-
-/* end of transport_api_peer_address_lookup.c */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r18369 - in gnunet/src: core include transport,
gnunet <=