From 7cefd6d64dfd666654141492495326d11265044b Mon Sep 17 00:00:00 2001 From: David Barksdale Date: Thu, 24 Sep 2009 04:59:14 +0000 Subject: [PATCH] FreeBSD has sockaddr_in.sin_len, and sockaddr_in6.sin6_len. --- configure.ac | 9 +++++++++ src/transport/plugin_transport_udp.c | 12 ++++++++++++ src/transport/test_plugin_transport.c | 3 +++ src/util/service.c | 8 +++++++- src/util/test_client.c | 3 +++ src/util/test_connection.c | 3 +++ src/util/test_connection_addressing.c | 9 +++++++++ src/util/test_connection_receive_cancel.c | 3 +++ src/util/test_connection_timeout.c | 3 +++ src/util/test_server.c | 3 +++ src/util/test_server_disconnect.c | 6 ++++++ src/util/test_server_with_client.c | 6 ++++++ 12 files changed, 67 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 28094e057..5cfcd0478 100644 --- a/configure.ac +++ b/configure.ac @@ -600,6 +600,15 @@ AC_HEADER_STAT AC_HEADER_STDBOOL AC_STRUCT_TM +AC_CHECK_MEMBER([struct sockaddr_in.sin_len], + [ AC_DEFINE(HAVE_SOCKADDR_IN_SIN_LEN, 1, [Do we have sockaddr_in.sin_len?]) + ], + [], + [ + #include + #include + #include + ]) diff --git a/src/transport/plugin_transport_udp.c b/src/transport/plugin_transport_udp.c index 840025997..0194a1667 100644 --- a/src/transport/plugin_transport_udp.c +++ b/src/transport/plugin_transport_udp.c @@ -362,6 +362,9 @@ udp_send (GNUNET_TSession * tsession, if ((available & VERSION_AVAILABLE_IPV4) > 0) { memset (&serverAddrv4, 0, sizeof (serverAddrv4)); +#if HAVE_SOCKADDR_IN_SIN_LEN + serverAddrv4.sin_len = sizeof (serverAddrv4); +#endif serverAddrv4.sin_family = AF_INET; serverAddrv4.sin_port = haddr->port; memcpy (&serverAddrv4.sin_addr, &haddr->ipv4, sizeof (struct in_addr)); @@ -371,6 +374,9 @@ udp_send (GNUNET_TSession * tsession, else { memset (&serverAddrv6, 0, sizeof (serverAddrv6)); +#if HAVE_SOCKADDR_IN_SIN_LEN + serverAddrv6.sin6_len = sizeof (serverAddrv6); +#endif serverAddrv6.sin6_family = AF_INET; serverAddrv6.sin6_port = haddr->port; memcpy (&serverAddrv6.sin6_addr, &haddr->ipv6, @@ -438,6 +444,9 @@ udp_transport_server_start () if (available_protocols == VERSION_AVAILABLE_IPV4) { memset (&serverAddrv4, 0, sizeof (serverAddrv4)); +#if HAVE_SOCKADDR_IN_SIN_LEN + serverAddrv4.sin_len = sizeof (serverAddrv4); +#endif serverAddrv4.sin_family = AF_INET; serverAddrv4.sin_addr.s_addr = INADDR_ANY; serverAddrv4.sin_port = htons (port); @@ -447,6 +456,9 @@ udp_transport_server_start () else { memset (&serverAddrv6, 0, sizeof (serverAddrv6)); +#if HAVE_SOCKADDR_IN_SIN_LEN + serverAddrv6.sin6_len = sizeof (serverAddrv6); +#endif serverAddrv6.sin6_family = AF_INET6; serverAddrv6.sin6_addr = in6addr_any; serverAddrv6.sin6_port = htons (port); diff --git a/src/transport/test_plugin_transport.c b/src/transport/test_plugin_transport.c index 550885007..7891c24d0 100644 --- a/src/transport/test_plugin_transport.c +++ b/src/transport/test_plugin_transport.c @@ -203,6 +203,9 @@ test_validation () struct sockaddr_in soaddr; memset (&soaddr, 0, sizeof(soaddr)); +#if HAVE_SOCKADDR_IN_SIN_LEN + soaddr.sin_len = sizeof (soaddr); +#endif soaddr.sin_family = AF_INET; /* Sailor: set this port to 2367 to see the testcase fail after 30s (because validation diff --git a/src/util/service.c b/src/util/service.c index 3e17336e8..4786e678c 100644 --- a/src/util/service.c +++ b/src/util/service.c @@ -942,8 +942,11 @@ setup_service (struct GNUNET_SERVICE_Context *sctx) if (disablev6) { /* V4-only */ - sctx->addrlen = sizeof (struct sockaddr_in6); + sctx->addrlen = sizeof (struct sockaddr_in); sctx->addr = GNUNET_malloc (sctx->addrlen); +#if HAVE_SOCKADDR_IN_SIN_LEN + ((struct sockaddr_in *) sctx->addr)->sin_len = sctx->addrlen; +#endif ((struct sockaddr_in *) sctx->addr)->sin_family = AF_INET; ((struct sockaddr_in *) sctx->addr)->sin_port = htons (port); GNUNET_log (GNUNET_ERROR_TYPE_INFO, @@ -956,6 +959,9 @@ setup_service (struct GNUNET_SERVICE_Context *sctx) /* dual stack */ sctx->addrlen = sizeof (struct sockaddr_in6); sctx->addr = GNUNET_malloc (sctx->addrlen); +#if HAVE_SOCKADDR_IN_SIN_LEN + ((struct sockaddr_in6 *) sctx->addr)->sin6_len = sctx->addrlen; +#endif ((struct sockaddr_in6 *) sctx->addr)->sin6_family = AF_INET6; ((struct sockaddr_in6 *) sctx->addr)->sin6_port = htons (port); } diff --git a/src/util/test_client.c b/src/util/test_client.c index a1a268b14..008e686a3 100644 --- a/src/util/test_client.c +++ b/src/util/test_client.c @@ -140,6 +140,9 @@ task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) struct sockaddr_in sa; memset (&sa, 0, sizeof (sa)); +#if HAVE_SOCKADDR_IN_SIN_LEN + sa.sin_len = sizeof (sa); +#endif sa.sin_family = AF_INET; sa.sin_port = htons (PORT); server = GNUNET_SERVER_create (tc->sched, diff --git a/src/util/test_connection.c b/src/util/test_connection.c index 6a04f1f4c..f3a907165 100644 --- a/src/util/test_connection.c +++ b/src/util/test_connection.c @@ -57,6 +57,9 @@ open_listen_socket () struct GNUNET_NETWORK_Handle *desc; memset (&sa, 0, sizeof (sa)); +#if HAVE_SOCKADDR_IN_SIN_LEN + sa.sin_len = sizeof (sa); +#endif sa.sin_port = htons (PORT); sa.sin_family = AF_INET; desc = GNUNET_NETWORK_socket_socket (AF_INET, SOCK_STREAM, 0); diff --git a/src/util/test_connection_addressing.c b/src/util/test_connection_addressing.c index 0d6462b17..ce44e6acf 100644 --- a/src/util/test_connection_addressing.c +++ b/src/util/test_connection_addressing.c @@ -57,6 +57,9 @@ open_listen_socket () struct GNUNET_NETWORK_Handle *desc; memset (&sa, 0, sizeof (sa)); +#if HAVE_SOCKADDR_IN_SIN_LEN + sa.sin_len = sizeof (sa); +#endif sa.sin_port = htons (PORT); desc = GNUNET_NETWORK_socket_socket (AF_INET, SOCK_STREAM, 0); GNUNET_assert (desc != 0); @@ -115,6 +118,9 @@ run_accept (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) GNUNET_assert (alen == sizeof (struct sockaddr_in)); v4 = addr; memset (&expect, 0, sizeof (expect)); +#if HAVE_SOCKADDR_IN_SIN_LEN + expect.sin_len = sizeof (expect); +#endif expect.sin_family = AF_INET; expect.sin_port = v4->sin_port; expect.sin_addr.s_addr = htonl (INADDR_LOOPBACK); @@ -143,6 +149,9 @@ task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) lsock = GNUNET_CONNECTION_create_from_existing (tc->sched, ls, 0); GNUNET_assert (lsock != NULL); +#if HAVE_SOCKADDR_IN_SIN_LEN + v4.sin_len = sizeof (v4); +#endif v4.sin_family = AF_INET; v4.sin_port = htons (PORT); v4.sin_addr.s_addr = htonl (INADDR_LOOPBACK); diff --git a/src/util/test_connection_receive_cancel.c b/src/util/test_connection_receive_cancel.c index a759cf546..49df185b7 100644 --- a/src/util/test_connection_receive_cancel.c +++ b/src/util/test_connection_receive_cancel.c @@ -58,6 +58,9 @@ open_listen_socket () struct GNUNET_NETWORK_Handle *desc; memset (&sa, 0, sizeof (sa)); +#if HAVE_SOCKADDR_IN_SIN_LEN + sa.sin_len = sizeof (sa); +#endif sa.sin_port = htons (PORT); desc = GNUNET_NETWORK_socket_socket (AF_INET, SOCK_STREAM, 0); GNUNET_assert (desc != NULL); diff --git a/src/util/test_connection_timeout.c b/src/util/test_connection_timeout.c index daadc0303..2a1ce58f3 100644 --- a/src/util/test_connection_timeout.c +++ b/src/util/test_connection_timeout.c @@ -51,6 +51,9 @@ open_listen_socket () struct GNUNET_NETWORK_Handle *desc; memset (&sa, 0, sizeof (sa)); +#if HAVE_SOCKADDR_IN_SIN_LEN + sa.sin_len = sizeof (sa); +#endif sa.sin_port = htons (PORT); desc = GNUNET_NETWORK_socket_socket (AF_INET, SOCK_STREAM, 0); GNUNET_assert (desc != NULL); diff --git a/src/util/test_server.c b/src/util/test_server.c index 20f0beffb..96b27558e 100644 --- a/src/util/test_server.c +++ b/src/util/test_server.c @@ -234,6 +234,9 @@ task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) sched = tc->sched; memset (&sa, 0, sizeof (sa)); +#if HAVE_SOCKADDR_IN_SIN_LEN + sa.sin_len = sizeof (sa); +#endif sa.sin_family = AF_INET; sa.sin_port = htons (PORT); server = GNUNET_SERVER_create (tc->sched, diff --git a/src/util/test_server_disconnect.c b/src/util/test_server_disconnect.c index d737e92ec..6c83961e0 100644 --- a/src/util/test_server_disconnect.c +++ b/src/util/test_server_disconnect.c @@ -82,6 +82,9 @@ recv_cb (void *cls, GNUNET_assert (addrlen == sizeof (struct sockaddr_in)); have = addr; memset (&sa, 0, sizeof (sa)); +#if HAVE_SOCKADDR_IN_SIN_LEN + sa.sin_len = sizeof (sa); +#endif sa.sin_family = AF_INET; sa.sin_port = have->sin_port; sa.sin_addr.s_addr = htonl (INADDR_LOOPBACK); @@ -177,6 +180,9 @@ task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) sched = tc->sched; memset (&sa, 0, sizeof (sa)); +#if HAVE_SOCKADDR_IN_SIN_LEN + sa.sin_len = sizeof (sa); +#endif sa.sin_family = AF_INET; sa.sin_port = htons (PORT); server = GNUNET_SERVER_create (tc->sched, diff --git a/src/util/test_server_with_client.c b/src/util/test_server_with_client.c index e5eb50d8e..9348f0d80 100644 --- a/src/util/test_server_with_client.c +++ b/src/util/test_server_with_client.c @@ -74,6 +74,9 @@ recv_cb (void *cls, GNUNET_assert (addrlen == sizeof (struct sockaddr_in)); have = addr; memset (&sa, 0, sizeof (sa)); +#if HAVE_SOCKADDR_IN_SIN_LEN + sa.sin_len = sizeof (sa); +#endif sa.sin_family = AF_INET; sa.sin_port = have->sin_port; sa.sin_addr.s_addr = htonl (INADDR_LOOPBACK); @@ -151,6 +154,9 @@ task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) sched = tc->sched; memset (&sa, 0, sizeof (sa)); +#if HAVE_SOCKADDR_IN_SIN_LEN + sa.sin_len = sizeof (sa); +#endif sa.sin_family = AF_INET; sa.sin_port = htons (PORT); server = GNUNET_SERVER_create (tc->sched, -- 2.25.1