aboutsummaryrefslogtreecommitdiff
path: root/src/transport
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2011-08-12 08:38:15 +0000
committerChristian Grothoff <christian@grothoff.org>2011-08-12 08:38:15 +0000
commit7aa67c67037822517403e04668a2c56513d79cc6 (patch)
tree24fc459abe5ee1711e293f466a7837dcc2c62d8a /src/transport
parentd456626277beddbe1a5e7201a8c393fac10874cf (diff)
downloadgnunet-7aa67c67037822517403e04668a2c56513d79cc6.tar.gz
gnunet-7aa67c67037822517403e04668a2c56513d79cc6.zip
send HELLO with PING
Diffstat (limited to 'src/transport')
-rw-r--r--src/transport/gnunet-service-transport_validation.c27
1 files changed, 21 insertions, 6 deletions
diff --git a/src/transport/gnunet-service-transport_validation.c b/src/transport/gnunet-service-transport_validation.c
index 76edf1891..6a300abcb 100644
--- a/src/transport/gnunet-service-transport_validation.c
+++ b/src/transport/gnunet-service-transport_validation.c
@@ -32,7 +32,6 @@
32#include "gnunet_peerinfo_service.h" 32#include "gnunet_peerinfo_service.h"
33#include "gnunet_signatures.h" 33#include "gnunet_signatures.h"
34 34
35// TODO: send our HELLO with the PING!
36 35
37/** 36/**
38 * How long is a PONG signature valid? We'll recycle a signature until 37 * How long is a PONG signature valid? We'll recycle a signature until
@@ -154,7 +153,7 @@ struct TransportPongMessage
154 * Size of address appended to this message (part of what is 153 * Size of address appended to this message (part of what is
155 * being signed, hence not redundant). 154 * being signed, hence not redundant).
156 */ 155 */
157 uint32_t addrlen; 156 uint32_t addrlen GNUNET_PACKED;
158 157
159}; 158};
160 159
@@ -796,9 +795,11 @@ validate_address (void *cls,
796 struct ValidationEntry *ve; 795 struct ValidationEntry *ve;
797 struct TransportPingMessage ping; 796 struct TransportPingMessage ping;
798 struct GNUNET_TRANSPORT_PluginFunctions *papi; 797 struct GNUNET_TRANSPORT_PluginFunctions *papi;
798 const struct GNUNET_MessageHeader *hello;
799 ssize_t ret; 799 ssize_t ret;
800 size_t tsize; 800 size_t tsize;
801 size_t slen; 801 size_t slen;
802 uint16_t hsize;
802 803
803 if (GNUNET_TIME_absolute_get_remaining (expiration).rel_value == 0) 804 if (GNUNET_TIME_absolute_get_remaining (expiration).rel_value == 0)
804 return GNUNET_OK; /* expired */ 805 return GNUNET_OK; /* expired */
@@ -823,15 +824,29 @@ validate_address (void *cls,
823 ping.target = *pid; 824 ping.target = *pid;
824 825
825 slen = strlen(ve->transport_name) + 1; 826 slen = strlen(ve->transport_name) + 1;
826 tsize = sizeof(struct TransportPingMessage) + ve->addrlen + slen; 827 hello = GST_hello_get ();
828 hsize = ntohs (hello->size);
829 tsize = sizeof(struct TransportPingMessage) + ve->addrlen + slen + hsize;
830 if (tsize >= GNUNET_SERVER_MAX_MESSAGE_SIZE)
831 {
832 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
833 _("Not transmitting `%s' with `%s', message too big (%u bytes!). This should not happen.\n"),
834 "HELLO",
835 "PING",
836 (unsigned int) tsize);
837 /* message too big (!?), get rid of HELLO */
838 hsize = 0;
839 tsize = sizeof(struct TransportPingMessage) + ve->addrlen + slen + hsize;
840 }
827 { 841 {
828 char message_buf[tsize]; 842 char message_buf[tsize];
829 843
830 memcpy(message_buf, &ping, sizeof (struct TransportPingMessage)); 844 memcpy(message_buf, hello, hsize);
831 memcpy(&message_buf[sizeof (struct TransportPingMessage)], 845 memcpy(&message_buf[hsize], &ping, sizeof (struct TransportPingMessage));
846 memcpy(&message_buf[sizeof (struct TransportPingMessage) + hsize],
832 ve->transport_name, 847 ve->transport_name,
833 slen); 848 slen);
834 memcpy(&message_buf[sizeof (struct TransportPingMessage) + slen], 849 memcpy(&message_buf[sizeof (struct TransportPingMessage) + slen + hsize],
835 ve->addr, 850 ve->addr,
836 ve->addrlen); 851 ve->addrlen);
837 papi = GST_plugins_find (ve->transport_name); 852 papi = GST_plugins_find (ve->transport_name);