gnunet-svn
[Top][All Lists]
Advanced

[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 */




reply via email to

[Prev in Thread] Current Thread [Next in Thread]