diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2013-02-04 10:52:51 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2013-02-04 10:52:51 +0000 |
commit | 5b74bf1d7069412dfa34b051f1015f9ed3fd0087 (patch) | |
tree | 601b132a5183361812a8e7ca759ce722fba08ed4 /src | |
parent | 90a2eb8e2bd735ddfaac2171fbf2f62f8ed2c91e (diff) | |
download | gnunet-5b74bf1d7069412dfa34b051f1015f9ed3fd0087.tar.gz gnunet-5b74bf1d7069412dfa34b051f1015f9ed3fd0087.zip |
implemented 0002773
Diffstat (limited to 'src')
-rw-r--r-- | src/transport/gnunet-transport.c | 57 |
1 files changed, 37 insertions, 20 deletions
diff --git a/src/transport/gnunet-transport.c b/src/transport/gnunet-transport.c index 99724c0a4..8dd7bdaf0 100644 --- a/src/transport/gnunet-transport.c +++ b/src/transport/gnunet-transport.c | |||
@@ -59,6 +59,10 @@ static char *cpid; | |||
59 | */ | 59 | */ |
60 | static struct GNUNET_TRANSPORT_Handle *handle; | 60 | static struct GNUNET_TRANSPORT_Handle *handle; |
61 | 61 | ||
62 | /** | ||
63 | * Configuration handle | ||
64 | */ | ||
65 | static struct GNUNET_CONFIGURATION_Handle *cfg; | ||
62 | 66 | ||
63 | /** | 67 | /** |
64 | * Try_connect handle | 68 | * Try_connect handle |
@@ -668,6 +672,10 @@ notify_receive (void *cls, const struct GNUNET_PeerIdentity *peer, | |||
668 | } | 672 | } |
669 | 673 | ||
670 | 674 | ||
675 | static void resolve_address (const struct GNUNET_HELLO_Address *address, | ||
676 | int numeric); | ||
677 | |||
678 | |||
671 | static void | 679 | static void |
672 | process_string (void *cls, const char *address) | 680 | process_string (void *cls, const char *address) |
673 | { | 681 | { |
@@ -685,7 +693,14 @@ process_string (void *cls, const char *address) | |||
685 | GNUNET_assert (address_resolutions > 0); | 693 | GNUNET_assert (address_resolutions > 0); |
686 | address_resolutions --; | 694 | address_resolutions --; |
687 | if (GNUNET_NO == rc->printed) | 695 | if (GNUNET_NO == rc->printed) |
688 | FPRINTF (stdout, _("Peer `%s': %s <unable to resolve address>\n"), GNUNET_i2s (&addrcp->peer), addrcp->transport_name); | 696 | { |
697 | if (numeric == GNUNET_NO) | ||
698 | { | ||
699 | resolve_address (rc->addrcp, GNUNET_YES ); /* Failed to resolve address, try numeric lookup */ | ||
700 | } | ||
701 | else | ||
702 | FPRINTF (stdout, _("Peer `%s': %s <unable to resolve address>\n"), GNUNET_i2s (&addrcp->peer), addrcp->transport_name); | ||
703 | } | ||
689 | GNUNET_free (rc->addrcp); | 704 | GNUNET_free (rc->addrcp); |
690 | GNUNET_CONTAINER_DLL_remove (rc_head, rc_tail, rc); | 705 | GNUNET_CONTAINER_DLL_remove (rc_head, rc_tail, rc); |
691 | GNUNET_free (rc); | 706 | GNUNET_free (rc); |
@@ -705,7 +720,24 @@ process_string (void *cls, const char *address) | |||
705 | end = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL); | 720 | end = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL); |
706 | } | 721 | } |
707 | } | 722 | } |
723 | } | ||
724 | |||
725 | static void resolve_address (const struct GNUNET_HELLO_Address *address, | ||
726 | int numeric) | ||
727 | { | ||
728 | struct ResolutionContext *rc; | ||
708 | 729 | ||
730 | rc = GNUNET_malloc(sizeof (struct ResolutionContext)); | ||
731 | GNUNET_assert (NULL != rc); | ||
732 | GNUNET_CONTAINER_DLL_insert (rc_head, rc_tail, rc); | ||
733 | address_resolutions ++; | ||
734 | |||
735 | rc->addrcp = GNUNET_HELLO_address_copy(address); | ||
736 | rc->printed = GNUNET_NO; | ||
737 | /* Resolve address to string */ | ||
738 | rc->asc = GNUNET_TRANSPORT_address_to_string (cfg, address, numeric, | ||
739 | RESOLUTION_TIMEOUT, &process_string, | ||
740 | rc); | ||
709 | } | 741 | } |
710 | 742 | ||
711 | /** | 743 | /** |
@@ -719,9 +751,6 @@ static void | |||
719 | process_address (void *cls, const struct GNUNET_PeerIdentity *peer, | 751 | process_address (void *cls, const struct GNUNET_PeerIdentity *peer, |
720 | const struct GNUNET_HELLO_Address *address) | 752 | const struct GNUNET_HELLO_Address *address) |
721 | { | 753 | { |
722 | const struct GNUNET_CONFIGURATION_Handle *cfg = cls; | ||
723 | struct ResolutionContext *rc; | ||
724 | |||
725 | if (peer == NULL) | 754 | if (peer == NULL) |
726 | { | 755 | { |
727 | /* done */ | 756 | /* done */ |
@@ -745,19 +774,7 @@ process_address (void *cls, const struct GNUNET_PeerIdentity *peer, | |||
745 | 774 | ||
746 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received address for peer `%s': %s\n", | 775 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received address for peer `%s': %s\n", |
747 | GNUNET_i2s (peer), address->transport_name); | 776 | GNUNET_i2s (peer), address->transport_name); |
748 | 777 | resolve_address (address, numeric); | |
749 | rc = GNUNET_malloc(sizeof (struct ResolutionContext)); | ||
750 | GNUNET_assert (NULL != rc); | ||
751 | GNUNET_CONTAINER_DLL_insert (rc_head, rc_tail, rc); | ||
752 | address_resolutions ++; | ||
753 | |||
754 | rc->addrcp = GNUNET_HELLO_address_copy(address); | ||
755 | rc->printed = GNUNET_NO; | ||
756 | /* Resolve address to string */ | ||
757 | rc->asc = GNUNET_TRANSPORT_address_to_string (cfg, address, numeric, | ||
758 | RESOLUTION_TIMEOUT, &process_string, | ||
759 | rc); | ||
760 | |||
761 | } | 778 | } |
762 | 779 | ||
763 | void try_connect_cb (void *cls, | 780 | void try_connect_cb (void *cls, |
@@ -788,7 +805,6 @@ static void | |||
788 | testservice_task (void *cls, | 805 | testservice_task (void *cls, |
789 | const struct GNUNET_SCHEDULER_TaskContext *tc) | 806 | const struct GNUNET_SCHEDULER_TaskContext *tc) |
790 | { | 807 | { |
791 | struct GNUNET_CONFIGURATION_Handle *cfg = cls; | ||
792 | int counter = 0; | 808 | int counter = 0; |
793 | ret = 1; | 809 | ret = 1; |
794 | 810 | ||
@@ -955,9 +971,10 @@ testservice_task (void *cls, | |||
955 | */ | 971 | */ |
956 | static void | 972 | static void |
957 | run (void *cls, char *const *args, const char *cfgfile, | 973 | run (void *cls, char *const *args, const char *cfgfile, |
958 | const struct GNUNET_CONFIGURATION_Handle *cfg) | 974 | const struct GNUNET_CONFIGURATION_Handle *mycfg) |
959 | { | 975 | { |
960 | if (test_configuration) | 976 | cfg = (struct GNUNET_CONFIGURATION_Handle *) mycfg; |
977 | if (test_configuration) | ||
961 | { | 978 | { |
962 | do_test_configuration (cfg); | 979 | do_test_configuration (cfg); |
963 | return; | 980 | return; |