diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2011-08-25 11:13:37 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2011-08-25 11:13:37 +0000 |
commit | 001efb2ba11fbbbeb5e340d091ccc5b1756e362b (patch) | |
tree | f963599b3c928a591e5383d7b513ec694b0676c3 /src/transport/gnunet-service-transport_validation.c | |
parent | e0d1527b589a41c03887754ae8e9abedf1716d45 (diff) | |
download | gnunet-001efb2ba11fbbbeb5e340d091ccc5b1756e362b.tar.gz gnunet-001efb2ba11fbbbeb5e340d091ccc5b1756e362b.zip |
fix:
- correct message size
- correct strlen
Diffstat (limited to 'src/transport/gnunet-service-transport_validation.c')
-rw-r--r-- | src/transport/gnunet-service-transport_validation.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/transport/gnunet-service-transport_validation.c b/src/transport/gnunet-service-transport_validation.c index 9a3914814..c6ee515fe 100644 --- a/src/transport/gnunet-service-transport_validation.c +++ b/src/transport/gnunet-service-transport_validation.c | |||
@@ -609,7 +609,7 @@ GST_validation_handle_ping (const struct GNUNET_PeerIdentity *sender, | |||
609 | return; | 609 | return; |
610 | } | 610 | } |
611 | addrend++; | 611 | addrend++; |
612 | slen = strlen (addr); | 612 | slen = strlen (addr) + 1; |
613 | alen -= slen; | 613 | alen -= slen; |
614 | 614 | ||
615 | if (GNUNET_YES != | 615 | if (GNUNET_YES != |
@@ -731,15 +731,17 @@ transmit_ping_if_allowed (void *cls, const struct GNUNET_PeerIdentity *pid, | |||
731 | ve->bc = NULL; | 731 | ve->bc = NULL; |
732 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Transmitting plain PING to `%s'\n", | 732 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Transmitting plain PING to `%s'\n", |
733 | GNUNET_i2s (pid)); | 733 | GNUNET_i2s (pid)); |
734 | ping.header.size = htons (sizeof (struct TransportPingMessage)); | ||
735 | ping.header.type = htons (GNUNET_MESSAGE_TYPE_TRANSPORT_PING); | ||
736 | ping.challenge = htonl (ve->challenge); | ||
737 | ping.target = *pid; | ||
738 | 734 | ||
739 | slen = strlen (ve->transport_name) + 1; | 735 | slen = strlen (ve->transport_name) + 1; |
740 | hello = GST_hello_get (); | 736 | hello = GST_hello_get (); |
741 | hsize = ntohs (hello->size); | 737 | hsize = ntohs (hello->size); |
742 | tsize = sizeof (struct TransportPingMessage) + ve->addrlen + slen + hsize; | 738 | tsize = sizeof (struct TransportPingMessage) + ve->addrlen + slen + hsize; |
739 | |||
740 | ping.header.size = htons (sizeof (struct TransportPingMessage) + ve->addrlen + slen); | ||
741 | ping.header.type = htons (GNUNET_MESSAGE_TYPE_TRANSPORT_PING); | ||
742 | ping.challenge = htonl (ve->challenge); | ||
743 | ping.target = *pid; | ||
744 | |||
743 | if (tsize >= GNUNET_SERVER_MAX_MESSAGE_SIZE) | 745 | if (tsize >= GNUNET_SERVER_MAX_MESSAGE_SIZE) |
744 | { | 746 | { |
745 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 747 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, |
@@ -753,6 +755,8 @@ transmit_ping_if_allowed (void *cls, const struct GNUNET_PeerIdentity *pid, | |||
753 | { | 755 | { |
754 | char message_buf[tsize]; | 756 | char message_buf[tsize]; |
755 | 757 | ||
758 | /* build message with structure: | ||
759 | * [HELLO][TransportPingMessage][Transport name][Address] */ | ||
756 | memcpy (message_buf, hello, hsize); | 760 | memcpy (message_buf, hello, hsize); |
757 | memcpy (&message_buf[hsize], &ping, sizeof (struct TransportPingMessage)); | 761 | memcpy (&message_buf[hsize], &ping, sizeof (struct TransportPingMessage)); |
758 | memcpy (&message_buf[sizeof (struct TransportPingMessage) + hsize], | 762 | memcpy (&message_buf[sizeof (struct TransportPingMessage) + hsize], |