aboutsummaryrefslogtreecommitdiff
path: root/src/nat
diff options
context:
space:
mode:
authorChristian Fuchs <christian.fuchs@cfuchs.net>2014-06-04 17:31:39 +0000
committerChristian Fuchs <christian.fuchs@cfuchs.net>2014-06-04 17:31:39 +0000
commitf32b0bc6605984cf1766bc106f6f6d054cf26e06 (patch)
tree7b594e3881a422af501c43c438262635fd1e5457 /src/nat
parentd00e1d68624dc1576284a0a4fbc15a6140401960 (diff)
downloadgnunet-f32b0bc6605984cf1766bc106f6f6d054cf26e06.tar.gz
gnunet-f32b0bc6605984cf1766bc106f6f6d054cf26e06.zip
- disentangled test_icmp_client and test_icmp_server's logics
- integrated more error-reporting changes for nat_test.c
Diffstat (limited to 'src/nat')
-rw-r--r--src/nat/nat_auto.c52
-rw-r--r--src/nat/nat_test.c60
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:
506static void 506static void
507test_icmp_client (struct GNUNET_NAT_AutoHandle *ah) 507test_icmp_client (struct GNUNET_NAT_AutoHandle *ah)
508{ 508{
509 int hnc; 509 int ext_ip;
510 int nated;
511 int binary;
510 char *tmp; 512 char *tmp;
511 char *binary; 513 char *helper;
514
515 ext_ip = GNUNET_NO;
516 nated = GNUNET_NO;
517 binary = GNUNET_NO;
512 518
513 tmp = NULL; 519 tmp = NULL;
514 binary = GNUNET_OS_get_libexec_binary_path ("gnunet-helper-nat-client"); 520 helper = GNUNET_OS_get_libexec_binary_path ("gnunet-helper-nat-client");
515 hnc = 521 if ((GNUNET_OK ==
516 ((GNUNET_OK ==
517 GNUNET_CONFIGURATION_get_value_string (ah->cfg, "nat", "INTERNAL_ADDRESS", 522 GNUNET_CONFIGURATION_get_value_string (ah->cfg, "nat", "INTERNAL_ADDRESS",
518 &tmp)) && (0 < strlen (tmp)) && 523 &tmp)) && (0 < strlen (tmp)))
519 (GNUNET_YES != 524 {
520 GNUNET_CONFIGURATION_get_value_yesno (ah->cfg, "nat", "BEHIND_NAT")) && 525 ext_ip = GNUNET_OK;
521 (GNUNET_YES == 526 GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("test_icmp_client not possible, as we have no internal IPv4 address\n"));
522 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 527 }
528 else
529 goto err;
530
531 if (GNUNET_YES !=
532 GNUNET_CONFIGURATION_get_value_yesno (ah->cfg, "nat", "BEHIND_NAT")){
533 nated = GNUNET_YES;
534 GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("test_icmp_server not possible, as we are not behind NAT\n"));
535 }
536 else
537 goto err;
538
539 if (GNUNET_YES ==
540 GNUNET_OS_check_helper_binary (helper, GNUNET_YES, "-d 127.0.0.1 127.0.0.2 42")){
541 // none of these parameters are actually used in privilege testing mode
542 binary = GNUNET_OK;
543 GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("No working gnunet-helper-nat-server found\n"));
544 }
545err:
523 GNUNET_free_non_null (tmp); 546 GNUNET_free_non_null (tmp);
524 GNUNET_free (binary); 547 GNUNET_free (helper);
525 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 548
526 (hnc)
527 ? _("gnunet-helper-nat-client found, enabling it\n")
528 : _("gnunet-helper-nat-client not found or behind NAT, disabling it\n"));
529 next_phase (ah); 549 next_phase (ah);
530} 550}
531 551
@@ -570,7 +590,7 @@ next_phase (struct GNUNET_NAT_AutoHandle *ah)
570 ah->cfg); 590 ah->cfg);
571 ah->fin_cb (ah->fin_cb_cls, 591 ah->fin_cb (ah->fin_cb_cls,
572 diff, 592 diff,
573 GNUNET_NAT_ERROR_SUCCESS); 593 ah->ret);
574 GNUNET_CONFIGURATION_destroy (diff); 594 GNUNET_CONFIGURATION_destroy (diff);
575 GNUNET_NAT_autoconfig_cancel (ah); 595 GNUNET_NAT_autoconfig_cancel (ah);
576 return; 596 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,
382 GNUNET_NAT_TestCallback report, 382 GNUNET_NAT_TestCallback report,
383 void *report_cls) 383 void *report_cls)
384{ 384{
385 struct GNUNET_NAT_Test *ret; 385 struct GNUNET_NAT_Test *nh;
386 struct sockaddr_in sa; 386 struct sockaddr_in sa;
387 const struct sockaddr *addrs[] = { (const struct sockaddr *) &sa }; 387 const struct sockaddr *addrs[] = { (const struct sockaddr *) &sa };
388 const socklen_t addrlens[] = { sizeof (sa) }; 388 const socklen_t addrlens[] = { sizeof (sa) };
@@ -394,72 +394,72 @@ GNUNET_NAT_test_start (const struct GNUNET_CONFIGURATION_Handle *cfg,
394 sa.sin_len = sizeof (sa); 394 sa.sin_len = sizeof (sa);
395#endif 395#endif
396 396
397 ret = GNUNET_new (struct GNUNET_NAT_Test); 397 nh = GNUNET_new (struct GNUNET_NAT_Test);
398 ret->cfg = cfg; 398 nh->cfg = cfg;
399 ret->is_tcp = is_tcp; 399 nh->is_tcp = is_tcp;
400 ret->data = bnd_port; 400 nh->data = bnd_port;
401 ret->adv_port = adv_port; 401 nh->adv_port = adv_port;
402 ret->report = report; 402 nh->report = report;
403 ret->report_cls = report_cls; 403 nh->report_cls = report_cls;
404 if (0 == bnd_port) 404 if (0 == bnd_port)
405 { 405 {
406 ret->nat = 406 nh->nat =
407 GNUNET_NAT_register (cfg, is_tcp, 0, 0, NULL, NULL, &addr_cb, 407 GNUNET_NAT_register (cfg, is_tcp, 0, 0, NULL, NULL, &addr_cb,
408 &reversal_cb, ret); 408 &reversal_cb, nh);
409 } 409 }
410 else 410 else
411 { 411 {
412 ret->lsock = 412 nh->lsock =
413 GNUNET_NETWORK_socket_create (AF_INET, 413 GNUNET_NETWORK_socket_create (AF_INET,
414 (is_tcp == 414 (is_tcp ==
415 GNUNET_YES) ? SOCK_STREAM : SOCK_DGRAM, 415 GNUNET_YES) ? SOCK_STREAM : SOCK_DGRAM,
416 0); 416 0);
417 if ((ret->lsock == NULL) || 417 if ((nh->lsock == NULL) ||
418 (GNUNET_OK != 418 (GNUNET_OK !=
419 GNUNET_NETWORK_socket_bind (ret->lsock, (const struct sockaddr *) &sa, 419 GNUNET_NETWORK_socket_bind (nh->lsock, (const struct sockaddr *) &sa,
420 sizeof (sa)))) 420 sizeof (sa))))
421 { 421 {
422 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 422 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
423 _("Failed to create listen socket bound to `%s' for NAT test: %s\n"), 423 _("Failed to create listen socket bound to `%s' for NAT test: %s\n"),
424 GNUNET_a2s ((const struct sockaddr *) &sa, sizeof (sa)), 424 GNUNET_a2s ((const struct sockaddr *) &sa, sizeof (sa)),
425 STRERROR (errno)); 425 STRERROR (errno));
426 if (NULL != ret->lsock) 426 if (NULL != nh->lsock)
427 GNUNET_NETWORK_socket_close (ret->lsock); 427 GNUNET_NETWORK_socket_close (nh->lsock);
428 GNUNET_free (ret); 428 GNUNET_free (nh);
429 return NULL; 429 return NULL;
430 } 430 }
431 if (GNUNET_YES == is_tcp) 431 if (GNUNET_YES == is_tcp)
432 { 432 {
433 GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_listen (ret->lsock, 5)); 433 GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_listen (nh->lsock, 5));
434 ret->ltask = 434 nh->ltask =
435 GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, 435 GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL,
436 ret->lsock, &do_accept, ret); 436 nh->lsock, &do_accept, nh);
437 } 437 }
438 else 438 else
439 { 439 {
440 ret->ltask = 440 nh->ltask =
441 GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, 441 GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL,
442 ret->lsock, &do_udp_read, ret); 442 nh->lsock, &do_udp_read, nh);
443 } 443 }
444 LOG (GNUNET_ERROR_TYPE_DEBUG, 444 LOG (GNUNET_ERROR_TYPE_DEBUG,
445 "NAT test listens on port %u (%s)\n", 445 "NAT test listens on port %u (%s)\n",
446 bnd_port, 446 bnd_port,
447 (GNUNET_YES == is_tcp) ? "tcp" : "udp"); 447 (GNUNET_YES == is_tcp) ? "tcp" : "udp");
448 ret->nat = GNUNET_NAT_register (cfg, is_tcp, adv_port, 1, addrs, addrlens, 448 nh->nat = GNUNET_NAT_register (cfg, is_tcp, adv_port, 1, addrs, addrlens,
449 &addr_cb, NULL, ret); 449 &addr_cb, NULL, nh);
450 if (NULL == ret->nat) 450 if (NULL == nh->nat)
451 { 451 {
452 LOG (GNUNET_ERROR_TYPE_ERROR, 452 LOG (GNUNET_ERROR_TYPE_ERROR,
453 _("NAT test failed to start NAT library\n")); 453 _("NAT test failed to start NAT library\n"));
454 if (GNUNET_SCHEDULER_NO_TASK != ret->ltask) 454 if (GNUNET_SCHEDULER_NO_TASK != nh->ltask)
455 GNUNET_SCHEDULER_cancel (ret->ltask); 455 GNUNET_SCHEDULER_cancel (nh->ltask);
456 if (NULL != ret->lsock) 456 if (NULL != nh->lsock)
457 GNUNET_NETWORK_socket_close (ret->lsock); 457 GNUNET_NETWORK_socket_close (nh->lsock);
458 GNUNET_free (ret); 458 GNUNET_free (nh);
459 return NULL; 459 return NULL;
460 } 460 }
461 } 461 }
462 return ret; 462 return nh;
463} 463}
464 464
465 465