diff options
Diffstat (limited to 'src/transport/plugin_transport_tcp.c')
-rw-r--r-- | src/transport/plugin_transport_tcp.c | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/src/transport/plugin_transport_tcp.c b/src/transport/plugin_transport_tcp.c index 11b9f0709..3ed20d4fa 100644 --- a/src/transport/plugin_transport_tcp.c +++ b/src/transport/plugin_transport_tcp.c | |||
@@ -1600,6 +1600,9 @@ handle_tcp_pong (void *cls, | |||
1600 | struct GNUNET_PeerIdentity peer; | 1600 | struct GNUNET_PeerIdentity peer; |
1601 | char *sender_addr; | 1601 | char *sender_addr; |
1602 | size_t addrlen; | 1602 | size_t addrlen; |
1603 | const struct sockaddr *addr; | ||
1604 | struct sockaddr_in v4; | ||
1605 | struct sockaddr_in6 v6; | ||
1603 | 1606 | ||
1604 | #if DEBUG_TRANSPORT | 1607 | #if DEBUG_TRANSPORT |
1605 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG | GNUNET_ERROR_TYPE_BULK, | 1608 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG | GNUNET_ERROR_TYPE_BULK, |
@@ -1637,8 +1640,27 @@ handle_tcp_pong (void *cls, | |||
1637 | GNUNET_CRYPTO_hash (&vcr->signer, | 1640 | GNUNET_CRYPTO_hash (&vcr->signer, |
1638 | sizeof( struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded), | 1641 | sizeof( struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded), |
1639 | &peer.hashPubKey); | 1642 | &peer.hashPubKey); |
1640 | sender_addr = GNUNET_strdup (GNUNET_a2s((const struct sockaddr*) &vcr[1], | 1643 | addr = (const struct sockaddr*) &vcr[1]; |
1641 | addrlen)); | 1644 | if (addrlen == sizeof (struct sockaddr_in)) |
1645 | { | ||
1646 | memcpy (&v4, addr, sizeof (struct sockaddr_in)); | ||
1647 | v4.sin_port = htons(check_port (plugin, ntohs (v4.sin_port))); | ||
1648 | sender_addr = GNUNET_strdup (GNUNET_a2s((const struct sockaddr*) &v4, | ||
1649 | addrlen)); | ||
1650 | } | ||
1651 | else if (addrlen == sizeof (struct sockaddr_in6)) | ||
1652 | { | ||
1653 | memcpy (&v6, addr, sizeof (struct sockaddr_in6)); | ||
1654 | v6.sin6_port = htons(check_port (plugin, ntohs (v6.sin6_port))); | ||
1655 | sender_addr = GNUNET_strdup (GNUNET_a2s((const struct sockaddr*) &v6, | ||
1656 | addrlen)); | ||
1657 | } | ||
1658 | else | ||
1659 | { | ||
1660 | GNUNET_break_op (0); | ||
1661 | GNUNET_SERVER_receive_done (client, GNUNET_SYSERR); | ||
1662 | return; | ||
1663 | } | ||
1642 | plugin->env->notify_validation (plugin->env->cls, | 1664 | plugin->env->notify_validation (plugin->env->cls, |
1643 | "tcp", | 1665 | "tcp", |
1644 | &peer, | 1666 | &peer, |