gnunet-svn
[Top][All Lists]
Advanced

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

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


From: gnunet
Subject: [GNUnet-SVN] r16411 - gnunet/src/transport
Date: Sat, 6 Aug 2011 21:09:40 +0200

Author: grothoff
Date: 2011-08-06 21:09:40 +0200 (Sat, 06 Aug 2011)
New Revision: 16411

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

Modified: gnunet/src/transport/gnunet-service-transport_validation.c
===================================================================
--- gnunet/src/transport/gnunet-service-transport_validation.c  2011-08-06 
18:47:22 UTC (rev 16410)
+++ gnunet/src/transport/gnunet-service-transport_validation.c  2011-08-06 
19:09:40 UTC (rev 16411)
@@ -538,7 +538,9 @@
   struct TransportPingMessage ping;
   struct GNUNET_TRANSPORT_PluginFunctions *papi;
   ssize_t ret;
-   
+  size_t tsize;
+  size_t slen;
+
   if (GNUNET_TIME_absolute_get_remaining (expiration).rel_value == 0)
     return GNUNET_OK; /* expired */
   ve = find_validation_entry (pid, tname, addr, addrlen);
@@ -547,32 +549,48 @@
   if (GNUNET_TIME_absolute_get_remaining (ve->valid_until).rel_value > 0)
     return GNUNET_OK; /* valid */
   ve->validation_block = GNUNET_TIME_relative_to_absolute 
(MAX_REVALIDATION_FREQUENCY);
-  
+
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+             "Transmitting plain PING to `%s'\n",
+             GNUNET_i2s (pid));  
   ping.header.size = htons(sizeof(struct TransportPingMessage));
   ping.header.type = htons(GNUNET_MESSAGE_TYPE_TRANSPORT_PING);
   ping.challenge = htonl(ve->challenge);
   ping.target = *pid;
-  GNUNET_STATISTICS_update (GST_stats,
-                           gettext_noop ("# PING without HELLO messages sent"),
-                           1,
-                           GNUNET_NO);
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "Transmitting plain PING to `%s'\n",
-             GNUNET_i2s (pid));
-  papi = GST_plugins_find (ve->transport_name);
-  ret = papi->send (papi->cls,
-                   pid,
-                   (const char*) &ping,
-                   sizeof (struct TransportPingMessage),
-                   PING_PRIORITY,
-                   HELLO_VERIFICATION_TIMEOUT,
-                   NULL /* no session */,
-                   ve->addr,
-                   ve->addrlen,
-                   GNUNET_YES,
-                   NULL, NULL);
+  
+  slen = strlen(ve->transport_name) + 1;
+  tsize = sizeof(struct TransportPingMessage) + ve->addrlen + slen;
+  {
+    char message_buf[tsize];
+
+    memcpy(message_buf, &ping, sizeof (struct TransportPingMessage));
+    memcpy(&message_buf[sizeof (struct TransportPingMessage)],
+          ve->transport_name,
+          slen);
+    memcpy(&message_buf[sizeof (struct TransportPingMessage) + slen],
+          ve->addr,
+          ve->addrlen);
+    papi = GST_plugins_find (ve->transport_name);
+    ret = papi->send (papi->cls,
+                     pid,
+                     message_buf,
+                     tsize,
+                     PING_PRIORITY,
+                     HELLO_VERIFICATION_TIMEOUT,
+                     NULL /* no session */,
+                     ve->addr,
+                     ve->addrlen,
+                     GNUNET_YES,
+                     NULL, NULL);
+  }
   if (-1 != ret)
-    ve->send_time = GNUNET_TIME_absolute_get ();
+    {
+      ve->send_time = GNUNET_TIME_absolute_get ();
+      GNUNET_STATISTICS_update (GST_stats,
+                               gettext_noop ("# PING without HELLO messages 
sent"),
+                               1,
+                               GNUNET_NO);
+    }
   return GNUNET_OK;
 }
 




reply via email to

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