gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r16462 - gnunet/src/transport


From: gnunet
Subject: [GNUnet-SVN] r16462 - gnunet/src/transport
Date: Fri, 12 Aug 2011 10:38:16 +0200

Author: grothoff
Date: 2011-08-12 10:38:15 +0200 (Fri, 12 Aug 2011)
New Revision: 16462

Modified:
   gnunet/src/transport/gnunet-service-transport_validation.c
Log:
send HELLO with PING

Modified: gnunet/src/transport/gnunet-service-transport_validation.c
===================================================================
--- gnunet/src/transport/gnunet-service-transport_validation.c  2011-08-12 
08:32:56 UTC (rev 16461)
+++ gnunet/src/transport/gnunet-service-transport_validation.c  2011-08-12 
08:38:15 UTC (rev 16462)
@@ -32,7 +32,6 @@
 #include "gnunet_peerinfo_service.h"
 #include "gnunet_signatures.h"
 
-// TODO: send our HELLO with the PING!
 
 /**
  * How long is a PONG signature valid?  We'll recycle a signature until
@@ -154,7 +153,7 @@
    * Size of address appended to this message (part of what is
    * being signed, hence not redundant).
    */
-  uint32_t addrlen;
+  uint32_t addrlen GNUNET_PACKED;
 
 };
 
@@ -796,9 +795,11 @@
   struct ValidationEntry *ve;
   struct TransportPingMessage ping;
   struct GNUNET_TRANSPORT_PluginFunctions *papi;
+  const struct GNUNET_MessageHeader *hello;
   ssize_t ret;
   size_t tsize;
   size_t slen;
+  uint16_t hsize;
 
   if (GNUNET_TIME_absolute_get_remaining (expiration).rel_value == 0)
     return GNUNET_OK; /* expired */
@@ -823,15 +824,29 @@
   ping.target = *pid;
   
   slen = strlen(ve->transport_name) + 1;
-  tsize = sizeof(struct TransportPingMessage) + ve->addrlen + slen;
+  hello = GST_hello_get ();
+  hsize = ntohs (hello->size);
+  tsize = sizeof(struct TransportPingMessage) + ve->addrlen + slen + hsize;
+  if (tsize >= GNUNET_SERVER_MAX_MESSAGE_SIZE)
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                 _("Not transmitting `%s' with `%s', message too big (%u 
bytes!). This should not happen.\n"),
+                 "HELLO",
+                 "PING",
+                 (unsigned int) tsize);
+      /* message too big (!?), get rid of HELLO */
+      hsize = 0;
+      tsize = sizeof(struct TransportPingMessage) + ve->addrlen + slen + hsize;
+    }
   {
     char message_buf[tsize];
 
-    memcpy(message_buf, &ping, sizeof (struct TransportPingMessage));
-    memcpy(&message_buf[sizeof (struct TransportPingMessage)],
+    memcpy(message_buf, hello, hsize);
+    memcpy(&message_buf[hsize], &ping, sizeof (struct TransportPingMessage));
+    memcpy(&message_buf[sizeof (struct TransportPingMessage) + hsize],
           ve->transport_name,
           slen);
-    memcpy(&message_buf[sizeof (struct TransportPingMessage) + slen],
+    memcpy(&message_buf[sizeof (struct TransportPingMessage) + slen + hsize],
           ve->addr,
           ve->addrlen);
     papi = GST_plugins_find (ve->transport_name);




reply via email to

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