From 31d3d15c36a696dea9d7589fb0a57f1225c109ba Mon Sep 17 00:00:00 2001 From: David Barksdale Date: Mon, 25 Oct 2010 20:25:48 +0000 Subject: [PATCH] Fixed udp_plugin_address_pretty_printer and gcrypt HMAC configure test. --- configure.ac | 3 +- src/transport/plugin_transport_udp.c | 52 +++++++++++++++++++--------- 2 files changed, 37 insertions(+), 18 deletions(-) diff --git a/configure.ac b/configure.ac index 5ce808848..0625a80da 100644 --- a/configure.ac +++ b/configure.ac @@ -191,7 +191,8 @@ fi AC_MSG_CHECKING([for working HMAC]) AC_LANG_PUSH(C) -LIBS="$LIBS -lgcrypt" +LIBS="$LIBS $LIBGCRYPT_LIBS" +CFLAGS="$CFLAGS $LIBGCRYPT_CFLAGS" AC_RUN_IFELSE( [AC_LANG_PROGRAM([#include ], [[ gcry_md_hd_t mac; diff --git a/src/transport/plugin_transport_udp.c b/src/transport/plugin_transport_udp.c index b5beb157f..1f7aca59a 100644 --- a/src/transport/plugin_transport_udp.c +++ b/src/transport/plugin_transport_udp.c @@ -1944,12 +1944,40 @@ udp_plugin_address_pretty_printer (void *cls, void *asc_cls) { struct Plugin *plugin = cls; - const struct sockaddr_in *v4; - const struct sockaddr_in6 *v6; struct PrettyPrinterContext *ppc; + const void *sb; + size_t sbs; + struct sockaddr_in a4; + struct sockaddr_in6 a6; + const struct IPv4UdpAddress *u4; + const struct IPv6UdpAddress *u6; + uint16_t port; - if ((addrlen != sizeof (struct sockaddr_in)) && - (addrlen != sizeof (struct sockaddr_in6))) + if (addrlen == sizeof (struct IPv6UdpAddress)) + { + u6 = addr; + memset (&a6, 0, sizeof (a6)); + a6.sin6_family = AF_INET6; + a6.sin6_port = u6->u6_port; + memcpy (&a6.sin6_addr, + &u6->ipv6_addr, + sizeof (struct in6_addr)); + port = ntohs (u6->u6_port); + sb = &a6; + sbs = sizeof (a6); + } + else if (addrlen == sizeof (struct IPv4UdpAddress)) + { + u4 = addr; + memset (&a4, 0, sizeof (a4)); + a4.sin_family = AF_INET; + a4.sin_port = u4->u_port; + a4.sin_addr.s_addr = u4->ipv4_addr; + port = ntohs (u4->u_port); + sb = &a4; + sbs = sizeof (a4); + } + else { /* invalid address */ GNUNET_break_op (0); @@ -1959,21 +1987,11 @@ udp_plugin_address_pretty_printer (void *cls, ppc = GNUNET_malloc (sizeof (struct PrettyPrinterContext)); ppc->asc = asc; ppc->asc_cls = asc_cls; - if (addrlen == sizeof (struct sockaddr_in)) - { - v4 = (const struct sockaddr_in *) addr; - ppc->port = ntohs (v4->sin_port); - } - else - { - v6 = (const struct sockaddr_in6 *) addr; - ppc->port = ntohs (v6->sin6_port); - - } + ppc->port = port; GNUNET_RESOLVER_hostname_get (plugin->env->sched, plugin->env->cfg, - addr, - addrlen, + sb, + sbs, !numeric, timeout, &append_port, ppc); } -- 2.25.1