diff options
author | Christian Fuchs <christian.fuchs@cfuchs.net> | 2014-06-04 17:31:39 +0000 |
---|---|---|
committer | Christian Fuchs <christian.fuchs@cfuchs.net> | 2014-06-04 17:31:39 +0000 |
commit | f32b0bc6605984cf1766bc106f6f6d054cf26e06 (patch) | |
tree | 7b594e3881a422af501c43c438262635fd1e5457 /src/nat | |
parent | d00e1d68624dc1576284a0a4fbc15a6140401960 (diff) | |
download | gnunet-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.c | 52 | ||||
-rw-r--r-- | 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: | |||
506 | static void | 506 | static void |
507 | test_icmp_client (struct GNUNET_NAT_AutoHandle *ah) | 507 | test_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 | } | ||
545 | err: | ||
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 | ||