aboutsummaryrefslogtreecommitdiff
path: root/src/transport/gnunet-transport.c
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2013-02-04 10:52:51 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2013-02-04 10:52:51 +0000
commit5b74bf1d7069412dfa34b051f1015f9ed3fd0087 (patch)
tree601b132a5183361812a8e7ca759ce722fba08ed4 /src/transport/gnunet-transport.c
parent90a2eb8e2bd735ddfaac2171fbf2f62f8ed2c91e (diff)
downloadgnunet-5b74bf1d7069412dfa34b051f1015f9ed3fd0087.tar.gz
gnunet-5b74bf1d7069412dfa34b051f1015f9ed3fd0087.zip
implemented 0002773
Diffstat (limited to 'src/transport/gnunet-transport.c')
-rw-r--r--src/transport/gnunet-transport.c57
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 */
60static struct GNUNET_TRANSPORT_Handle *handle; 60static struct GNUNET_TRANSPORT_Handle *handle;
61 61
62/**
63 * Configuration handle
64 */
65static 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
675static void resolve_address (const struct GNUNET_HELLO_Address *address,
676 int numeric);
677
678
671static void 679static void
672process_string (void *cls, const char *address) 680process_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
725static 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
719process_address (void *cls, const struct GNUNET_PeerIdentity *peer, 751process_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
763void try_connect_cb (void *cls, 780void try_connect_cb (void *cls,
@@ -788,7 +805,6 @@ static void
788testservice_task (void *cls, 805testservice_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 */
956static void 972static void
957run (void *cls, char *const *args, const char *cfgfile, 973run (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;