diff options
author | Christian Grothoff <christian@grothoff.org> | 2011-08-12 08:38:15 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2011-08-12 08:38:15 +0000 |
commit | 7aa67c67037822517403e04668a2c56513d79cc6 (patch) | |
tree | 24fc459abe5ee1711e293f466a7837dcc2c62d8a /src/transport | |
parent | d456626277beddbe1a5e7201a8c393fac10874cf (diff) | |
download | gnunet-7aa67c67037822517403e04668a2c56513d79cc6.tar.gz gnunet-7aa67c67037822517403e04668a2c56513d79cc6.zip |
send HELLO with PING
Diffstat (limited to 'src/transport')
-rw-r--r-- | src/transport/gnunet-service-transport_validation.c | 27 |
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); |