From f32b0bc6605984cf1766bc106f6f6d054cf26e06 Mon Sep 17 00:00:00 2001 From: Christian Fuchs Date: Wed, 4 Jun 2014 17:31:39 +0000 Subject: [PATCH] - disentangled test_icmp_client and test_icmp_server's logics - integrated more error-reporting changes for nat_test.c --- src/nat/nat_auto.c | 52 +++++++++++++++++++++++++++------------- src/nat/nat_test.c | 60 +++++++++++++++++++++++----------------------- 2 files changed, 66 insertions(+), 46 deletions(-) diff --git a/src/nat/nat_auto.c b/src/nat/nat_auto.c index b53fd0d47..3ee520d9b 100644 --- a/src/nat/nat_auto.c +++ b/src/nat/nat_auto.c @@ -506,26 +506,46 @@ err: static void test_icmp_client (struct GNUNET_NAT_AutoHandle *ah) { - int hnc; + int ext_ip; + int nated; + int binary; char *tmp; - char *binary; + char *helper; + + ext_ip = GNUNET_NO; + nated = GNUNET_NO; + binary = GNUNET_NO; tmp = NULL; - binary = GNUNET_OS_get_libexec_binary_path ("gnunet-helper-nat-client"); - hnc = - ((GNUNET_OK == + helper = GNUNET_OS_get_libexec_binary_path ("gnunet-helper-nat-client"); + if ((GNUNET_OK == GNUNET_CONFIGURATION_get_value_string (ah->cfg, "nat", "INTERNAL_ADDRESS", - &tmp)) && (0 < strlen (tmp)) && - (GNUNET_YES != - GNUNET_CONFIGURATION_get_value_yesno (ah->cfg, "nat", "BEHIND_NAT")) && - (GNUNET_YES == - GNUNET_OS_check_helper_binary (binary, GNUNET_YES, "-d 127.0.0.1 127.0.0.2 42"))); // none of these parameters are actually used in privilege testing mode + &tmp)) && (0 < strlen (tmp))) + { + ext_ip = GNUNET_OK; + GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("test_icmp_client not possible, as we have no internal IPv4 address\n")); + } + else + goto err; + + if (GNUNET_YES != + GNUNET_CONFIGURATION_get_value_yesno (ah->cfg, "nat", "BEHIND_NAT")){ + nated = GNUNET_YES; + GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("test_icmp_server not possible, as we are not behind NAT\n")); + } + else + goto err; + + if (GNUNET_YES == + GNUNET_OS_check_helper_binary (helper, GNUNET_YES, "-d 127.0.0.1 127.0.0.2 42")){ + // none of these parameters are actually used in privilege testing mode + binary = GNUNET_OK; + GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("No working gnunet-helper-nat-server found\n")); + } +err: GNUNET_free_non_null (tmp); - GNUNET_free (binary); - GNUNET_log (GNUNET_ERROR_TYPE_INFO, - (hnc) - ? _("gnunet-helper-nat-client found, enabling it\n") - : _("gnunet-helper-nat-client not found or behind NAT, disabling it\n")); + GNUNET_free (helper); + next_phase (ah); } @@ -570,7 +590,7 @@ next_phase (struct GNUNET_NAT_AutoHandle *ah) ah->cfg); ah->fin_cb (ah->fin_cb_cls, diff, - GNUNET_NAT_ERROR_SUCCESS); + ah->ret); GNUNET_CONFIGURATION_destroy (diff); GNUNET_NAT_autoconfig_cancel (ah); return; diff --git a/src/nat/nat_test.c b/src/nat/nat_test.c index 7d9d1a49c..84cf3b01b 100644 --- a/src/nat/nat_test.c +++ b/src/nat/nat_test.c @@ -382,7 +382,7 @@ GNUNET_NAT_test_start (const struct GNUNET_CONFIGURATION_Handle *cfg, GNUNET_NAT_TestCallback report, void *report_cls) { - struct GNUNET_NAT_Test *ret; + struct GNUNET_NAT_Test *nh; struct sockaddr_in sa; const struct sockaddr *addrs[] = { (const struct sockaddr *) &sa }; const socklen_t addrlens[] = { sizeof (sa) }; @@ -394,72 +394,72 @@ GNUNET_NAT_test_start (const struct GNUNET_CONFIGURATION_Handle *cfg, sa.sin_len = sizeof (sa); #endif - ret = GNUNET_new (struct GNUNET_NAT_Test); - ret->cfg = cfg; - ret->is_tcp = is_tcp; - ret->data = bnd_port; - ret->adv_port = adv_port; - ret->report = report; - ret->report_cls = report_cls; + nh = GNUNET_new (struct GNUNET_NAT_Test); + nh->cfg = cfg; + nh->is_tcp = is_tcp; + nh->data = bnd_port; + nh->adv_port = adv_port; + nh->report = report; + nh->report_cls = report_cls; if (0 == bnd_port) { - ret->nat = + nh->nat = GNUNET_NAT_register (cfg, is_tcp, 0, 0, NULL, NULL, &addr_cb, - &reversal_cb, ret); + &reversal_cb, nh); } else { - ret->lsock = + nh->lsock = GNUNET_NETWORK_socket_create (AF_INET, (is_tcp == GNUNET_YES) ? SOCK_STREAM : SOCK_DGRAM, 0); - if ((ret->lsock == NULL) || + if ((nh->lsock == NULL) || (GNUNET_OK != - GNUNET_NETWORK_socket_bind (ret->lsock, (const struct sockaddr *) &sa, + GNUNET_NETWORK_socket_bind (nh->lsock, (const struct sockaddr *) &sa, sizeof (sa)))) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Failed to create listen socket bound to `%s' for NAT test: %s\n"), GNUNET_a2s ((const struct sockaddr *) &sa, sizeof (sa)), STRERROR (errno)); - if (NULL != ret->lsock) - GNUNET_NETWORK_socket_close (ret->lsock); - GNUNET_free (ret); + if (NULL != nh->lsock) + GNUNET_NETWORK_socket_close (nh->lsock); + GNUNET_free (nh); return NULL; } if (GNUNET_YES == is_tcp) { - GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_listen (ret->lsock, 5)); - ret->ltask = + GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_listen (nh->lsock, 5)); + nh->ltask = GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, - ret->lsock, &do_accept, ret); + nh->lsock, &do_accept, nh); } else { - ret->ltask = + nh->ltask = GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, - ret->lsock, &do_udp_read, ret); + nh->lsock, &do_udp_read, nh); } LOG (GNUNET_ERROR_TYPE_DEBUG, "NAT test listens on port %u (%s)\n", bnd_port, (GNUNET_YES == is_tcp) ? "tcp" : "udp"); - ret->nat = GNUNET_NAT_register (cfg, is_tcp, adv_port, 1, addrs, addrlens, - &addr_cb, NULL, ret); - if (NULL == ret->nat) + nh->nat = GNUNET_NAT_register (cfg, is_tcp, adv_port, 1, addrs, addrlens, + &addr_cb, NULL, nh); + if (NULL == nh->nat) { LOG (GNUNET_ERROR_TYPE_ERROR, _("NAT test failed to start NAT library\n")); - if (GNUNET_SCHEDULER_NO_TASK != ret->ltask) - GNUNET_SCHEDULER_cancel (ret->ltask); - if (NULL != ret->lsock) - GNUNET_NETWORK_socket_close (ret->lsock); - GNUNET_free (ret); + if (GNUNET_SCHEDULER_NO_TASK != nh->ltask) + GNUNET_SCHEDULER_cancel (nh->ltask); + if (NULL != nh->lsock) + GNUNET_NETWORK_socket_close (nh->lsock); + GNUNET_free (nh); return NULL; } } - return ret; + return nh; } -- 2.25.1