diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2011-08-29 14:20:36 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2011-08-29 14:20:36 +0000 |
commit | 98e9dc065ff9f863d1e53264bb770d0a9c3954a9 (patch) | |
tree | a1763a75e000890c5cfbf4a268081c9a32a08673 /src/transport/gnunet-service-transport_validation.c | |
parent | fe4798e8542441278c364c469384caa7635f36c5 (diff) | |
download | gnunet-98e9dc065ff9f863d1e53264bb770d0a9c3954a9.tar.gz gnunet-98e9dc065ff9f863d1e53264bb770d0a9c3954a9.zip |
- handle_pong used wrong address size
- TODO: GNUNET_ATS_address_update crashes transport service
Diffstat (limited to 'src/transport/gnunet-service-transport_validation.c')
-rw-r--r-- | src/transport/gnunet-service-transport_validation.c | 34 |
1 files changed, 23 insertions, 11 deletions
diff --git a/src/transport/gnunet-service-transport_validation.c b/src/transport/gnunet-service-transport_validation.c index 8b652ceaa..db6cfabe8 100644 --- a/src/transport/gnunet-service-transport_validation.c +++ b/src/transport/gnunet-service-transport_validation.c | |||
@@ -889,10 +889,11 @@ GST_validation_handle_pong (const struct GNUNET_PeerIdentity *sender, | |||
889 | { | 889 | { |
890 | const struct TransportPongMessage *pong; | 890 | const struct TransportPongMessage *pong; |
891 | struct ValidationEntry *ve; | 891 | struct ValidationEntry *ve; |
892 | const char *tname; | ||
892 | const char *addr; | 893 | const char *addr; |
893 | const char *addrend; | 894 | size_t addrlen; |
894 | size_t alen; | ||
895 | size_t slen; | 895 | size_t slen; |
896 | size_t size; | ||
896 | uint32_t rdelay; | 897 | uint32_t rdelay; |
897 | struct GNUNET_TIME_Relative delay; | 898 | struct GNUNET_TIME_Relative delay; |
898 | struct GNUNET_HELLO_Message *hello; | 899 | struct GNUNET_HELLO_Message *hello; |
@@ -905,19 +906,22 @@ GST_validation_handle_pong (const struct GNUNET_PeerIdentity *sender, | |||
905 | GNUNET_STATISTICS_update (GST_stats, | 906 | GNUNET_STATISTICS_update (GST_stats, |
906 | gettext_noop ("# PONG messages received"), 1, | 907 | gettext_noop ("# PONG messages received"), 1, |
907 | GNUNET_NO); | 908 | GNUNET_NO); |
909 | |||
908 | pong = (const struct TransportPongMessage *) hdr; | 910 | pong = (const struct TransportPongMessage *) hdr; |
909 | addr = (const char *) &pong[1]; | 911 | tname = (const char *) &pong[1]; |
910 | alen = ntohs (hdr->size) - sizeof (struct TransportPongMessage); | 912 | size = ntohs (hdr->size) - sizeof (struct TransportPongMessage); |
911 | addrend = memchr (addr, '\0', alen); | 913 | addr = memchr (tname, '\0', size); |
912 | if (NULL == addrend) | 914 | if (NULL == addr) |
913 | { | 915 | { |
914 | GNUNET_break_op (0); | 916 | GNUNET_break_op (0); |
915 | return; | 917 | return; |
916 | } | 918 | } |
917 | addrend++; | 919 | addr++; |
918 | slen = strlen (addr); | 920 | slen = strlen (tname) + 1; |
919 | alen -= slen; | 921 | addrlen = size - slen; |
920 | ve = find_validation_entry (NULL, sender, addr, addrend, alen); | 922 | |
923 | ve = find_validation_entry (NULL, sender, tname, addr, addrlen); | ||
924 | |||
921 | if (NULL == ve) | 925 | if (NULL == ve) |
922 | { | 926 | { |
923 | GNUNET_STATISTICS_update (GST_stats, | 927 | GNUNET_STATISTICS_update (GST_stats, |
@@ -951,9 +955,17 @@ GST_validation_handle_pong (const struct GNUNET_PeerIdentity *sender, | |||
951 | return; | 955 | return; |
952 | } | 956 | } |
953 | 957 | ||
958 | #if VERBOSE_VALIDATION | ||
959 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
960 | "Address validated for peer `%s' with plugin `%s': `%s'\n", | ||
961 | GNUNET_i2s (sender), tname, GST_plugins_a2s (tname, addr, | ||
962 | addrlen)); | ||
963 | #endif | ||
964 | |||
954 | /* validity achieved, remember it! */ | 965 | /* validity achieved, remember it! */ |
955 | ve->valid_until = GNUNET_TIME_relative_to_absolute (HELLO_ADDRESS_EXPIRATION); | 966 | ve->valid_until = GNUNET_TIME_relative_to_absolute (HELLO_ADDRESS_EXPIRATION); |
956 | GNUNET_ATS_address_update (GST_ats, &ve->pid, ve->valid_until, ve->transport_name, NULL, ve->addr, ve->addrlen, NULL, 0); /* FIXME: compute and add latency here... */ | 967 | // FIXME: This crashes transport service |
968 | // GNUNET_ATS_address_update (GST_ats, &ve->pid, ve->valid_until, ve->transport_name, NULL, ve->addr, ve->addrlen, NULL, 0); /* FIXME: compute and add latency here... */ | ||
957 | 969 | ||
958 | /* build HELLO to store in PEERINFO */ | 970 | /* build HELLO to store in PEERINFO */ |
959 | hello = GNUNET_HELLO_create (&ve->public_key, &add_valid_peer_address, ve); | 971 | hello = GNUNET_HELLO_create (&ve->public_key, &add_valid_peer_address, ve); |