gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r16725 - in gnunet/src: include transport


From: gnunet
Subject: [GNUnet-SVN] r16725 - in gnunet/src: include transport
Date: Wed, 7 Sep 2011 18:07:48 +0200

Author: wachs
Date: 2011-09-07 18:07:48 +0200 (Wed, 07 Sep 2011)
New Revision: 16725

Modified:
   gnunet/src/include/gnunet_transport_service.h
   gnunet/src/transport/gnunet-service-transport_clients.c
   gnunet/src/transport/gnunet-service-transport_neighbours.c
   gnunet/src/transport/gnunet-service-transport_validation.c
   gnunet/src/transport/gnunet-transport-list-connections.c
   gnunet/src/transport/transport_api_address_iterate.c
Log:
porting gnunet-transport-list-connections to binary address


Modified: gnunet/src/include/gnunet_transport_service.h
===================================================================
--- gnunet/src/include/gnunet_transport_service.h       2011-09-07 14:38:59 UTC 
(rev 16724)
+++ gnunet/src/include/gnunet_transport_service.h       2011-09-07 16:07:48 UTC 
(rev 16725)
@@ -446,7 +446,7 @@
 
 
 /**
- * Function to call with a human-readable format of an address
+ * Function to call with a binary format of an address
  *
  * @param cls closure
  * @param address NULL on error, otherwise 0-terminated printable UTF-8 string
@@ -456,6 +456,25 @@
 
 
 /**
+ * Function to call with a binary format of an address
+ *
+ * @param cls closure
+ * @param peer peer identity
+ * @param transport transport plugin
+ * @param addr address
+ * @param addrlen address length
+ */
+typedef void (*GNUNET_TRANSPORT_AddressLookUpBinaryCallback) (void *cls,
+                                                              const struct
+                                                              
GNUNET_PeerIdentity
+                                                              * peer,
+                                                              const char
+                                                              *transport,
+                                                              const void *addr,
+                                                              size_t addrlen);
+
+
+/**
  * Connect to the transport service.  Note that the connection may
  * complete (or fail) asynchronously.
  *
@@ -672,7 +691,7 @@
 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);
 

Modified: gnunet/src/transport/gnunet-service-transport_clients.c
===================================================================
--- gnunet/src/transport/gnunet-service-transport_clients.c     2011-09-07 
14:38:59 UTC (rev 16724)
+++ gnunet/src/transport/gnunet-service-transport_clients.c     2011-09-07 
16:07:48 UTC (rev 16725)
@@ -625,23 +625,47 @@
  * @param address the resolved name, NULL to indicate the last response
  */
 static void
-transmit_address_to_client (void *cls, const char *address)
+transmit_address_to_client (void *cls, const char *buf)
 {
   struct GNUNET_SERVER_TransmitContext *tc = cls;
 
-  if (NULL == address)
+  if (NULL == buf)
   {
     GNUNET_SERVER_transmit_context_append_data (tc, NULL, 0,
                                                 
GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_REPLY);
     GNUNET_SERVER_transmit_context_run (tc, GNUNET_TIME_UNIT_FOREVER_REL);
     return;
   }
-  GNUNET_SERVER_transmit_context_append_data (tc, address, strlen (address) + 
1,
+  GNUNET_SERVER_transmit_context_append_data (tc, buf, strlen (buf + 1),
                                               
GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_REPLY);
 }
 
 
 /**
+ * Take the given address and append it to the set of results sent back to
+ * the client.
+ *
+ * @param cls the transmission context used ('struct 
GNUNET_SERVER_TransmitContext*')
+ * @param address the resolved name, NULL to indicate the last response
+ */
+static void
+transmit_binary_to_client (void *cls, void *buf, size_t size)
+{
+  struct GNUNET_SERVER_TransmitContext *tc = cls;
+
+  if (NULL == buf)
+  {
+    GNUNET_SERVER_transmit_context_append_data (tc, NULL, 0,
+                                                
GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_REPLY);
+    GNUNET_SERVER_transmit_context_run (tc, GNUNET_TIME_UNIT_FOREVER_REL);
+    return;
+  }
+  GNUNET_SERVER_transmit_context_append_data (tc, buf, size,
+                                              
GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_REPLY);
+}
+
+
+/**
  * Client asked to resolve an address.  Process the request.
  *
  * @param cls unused
@@ -781,18 +805,22 @@
  * @param ats_count number of entries in ats (excluding 0-termination)
  */
 static void
-output_addresses (void *cls, const struct GNUNET_PeerIdentity *neighbour,
+output_addresses (void *cls, const struct GNUNET_PeerIdentity *peer,
                   const struct GNUNET_TRANSPORT_ATS_Information *ats,
                   uint32_t ats_count)
 {
   struct GNUNET_SERVER_TransmitContext *tc = cls;
-  char *addr_buf;
+  struct AddressIterateResponseMessage msg;
+  size_t size;
 
-  /* FIXME: move to a binary format!!! */
-  GNUNET_asprintf (&addr_buf, "%s: %s", GNUNET_i2s (neighbour),
-                   GST_plugins_a2s ("FIXME", NULL, 0));
-  transmit_address_to_client (tc, addr_buf);
-  GNUNET_free (addr_buf);
+  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);
 }
 
 

Modified: gnunet/src/transport/gnunet-service-transport_neighbours.c
===================================================================
--- gnunet/src/transport/gnunet-service-transport_neighbours.c  2011-09-07 
14:38:59 UTC (rev 16724)
+++ gnunet/src/transport/gnunet-service-transport_neighbours.c  2011-09-07 
16:07:48 UTC (rev 16725)
@@ -403,10 +403,8 @@
     GNUNET_assert (neighbours_connected > 0);
     neighbours_connected--;
 
-    GNUNET_STATISTICS_update (GST_stats,
-                              gettext_noop
-                              ("# peers connected"),
-                              -1, GNUNET_NO);
+    GNUNET_STATISTICS_update (GST_stats, gettext_noop ("# peers connected"), 
-1,
+                              GNUNET_NO);
     disconnect_notify_cb (callback_cls, &n->id);
   }
   GNUNET_assert (GNUNET_YES ==
@@ -597,10 +595,8 @@
     return;
 
   neighbours_connected++;
-  GNUNET_STATISTICS_update (GST_stats,
-                            gettext_noop
-                            ("# peers connected"),
-                            1, GNUNET_NO);
+  GNUNET_STATISTICS_update (GST_stats, gettext_noop ("# peers connected"), 1,
+                            GNUNET_NO);
   connect_notify_cb (callback_cls, target, n->ats, n->ats_count);
 }
 

Modified: gnunet/src/transport/gnunet-service-transport_validation.c
===================================================================
--- gnunet/src/transport/gnunet-service-transport_validation.c  2011-09-07 
14:38:59 UTC (rev 16724)
+++ gnunet/src/transport/gnunet-service-transport_validation.c  2011-09-07 
16:07:48 UTC (rev 16725)
@@ -409,6 +409,7 @@
   ve = find_validation_entry (&public_key, &pid, tname, addr, addrlen);
   ve->valid_until = GNUNET_TIME_absolute_max (ve->valid_until, expiration);
   struct GNUNET_TRANSPORT_ATS_Information ats;
+
   ats.type = htonl (GNUNET_TRANSPORT_ATS_ARRAY_TERMINATOR);
   ats.value = htonl (0);
 
@@ -918,7 +919,6 @@
 
   if (ntohs (hdr->size) < sizeof (struct TransportPongMessage))
   {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "SIZE!\n");
     GNUNET_break_op (0);
     return;
   }
@@ -983,6 +983,7 @@
   /* validity achieved, remember it! */
   ve->valid_until = GNUNET_TIME_relative_to_absolute 
(HELLO_ADDRESS_EXPIRATION);
   struct GNUNET_TRANSPORT_ATS_Information ats;
+
   ats.type = htonl (GNUNET_TRANSPORT_ATS_ARRAY_TERMINATOR);
   ats.value = htonl (0);
   GNUNET_ATS_address_update (GST_ats, &ve->pid, ve->valid_until, 
ve->transport_name, NULL, ve->addr, ve->addrlen, &ats, 1);     /* FIXME: 
compute and add latency here... */

Modified: gnunet/src/transport/gnunet-transport-list-connections.c
===================================================================
--- gnunet/src/transport/gnunet-transport-list-connections.c    2011-09-07 
14:38:59 UTC (rev 16724)
+++ gnunet/src/transport/gnunet-transport-list-connections.c    2011-09-07 
16:07:48 UTC (rev 16725)
@@ -53,13 +53,22 @@
  * @param address NULL on error, otherwise 0-terminated printable UTF-8 string
  */
 static void
-process_address (void *cls, const char *address)
+process_address (void *cls, const struct GNUNET_PeerIdentity *peer,
+                 const char *transport, const void *addr, size_t addrlen)
 {
 #if VERBOSE
   connection_count++;
 #endif
-  if (address != NULL)
-    fprintf (stdout, "%s\n", address);
+  if ((peer != NULL) || (transport != NULL) ||
+      ((addr != NULL) && (addrlen > 0)))
+    fprintf (stdout, "Peer `%s' plugin: `%s' address `%s'\n",
+             (peer != NULL) ? GNUNET_i2s (peer) : "<unknown>",
+             (transport != NULL) ? transport : "<unknown>", ((addr != NULL) &&
+                                                             (addrlen > 0) &&
+                                                             (transport !=
+                                                              NULL)) ?
+             "how do i resolve the name without transport service?" :
+             "<unknown>");
 }
 
 

Modified: gnunet/src/transport/transport_api_address_iterate.c
===================================================================
--- gnunet/src/transport/transport_api_address_iterate.c        2011-09-07 
14:38:59 UTC (rev 16724)
+++ gnunet/src/transport/transport_api_address_iterate.c        2011-09-07 
16:07:48 UTC (rev 16725)
@@ -47,7 +47,7 @@
   /**
    * Function to call with the human-readable address.
    */
-  GNUNET_TRANSPORT_AddressLookUpCallback cb;
+  GNUNET_TRANSPORT_AddressLookUpBinaryCallback cb;
 
   /**
    * Closure for cb.
@@ -78,41 +78,50 @@
                                  const struct GNUNET_MessageHeader *msg)
 {
   struct AddressLookupCtx *alucb = cls;
-  const char *address;
+  struct AddressIterateResponseMessage *address;
   uint16_t size;
 
+
   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;
+  GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "PEER: %s\n",
+              GNUNET_i2s (&address->peer));
+
+
   /* 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);
+  alucb->cb (alucb->cb_cls, &address->peer, NULL, NULL, 0);
 }
 
 
@@ -127,7 +136,7 @@
 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)
 {
@@ -139,12 +148,12 @@
   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));




reply via email to

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