diff options
Diffstat (limited to 'src/transport/gnunet-transport.c')
-rw-r--r-- | src/transport/gnunet-transport.c | 50 |
1 files changed, 48 insertions, 2 deletions
diff --git a/src/transport/gnunet-transport.c b/src/transport/gnunet-transport.c index b3a971b96..2f68ba893 100644 --- a/src/transport/gnunet-transport.c +++ b/src/transport/gnunet-transport.c | |||
@@ -59,6 +59,12 @@ static char *cpid; | |||
59 | */ | 59 | */ |
60 | static struct GNUNET_TRANSPORT_Handle *handle; | 60 | static struct GNUNET_TRANSPORT_Handle *handle; |
61 | 61 | ||
62 | |||
63 | /** | ||
64 | * Try_connect handle | ||
65 | */ | ||
66 | struct GNUNET_TRANSPORT_TryConnectHandle * tc_handle; | ||
67 | |||
62 | /** | 68 | /** |
63 | * Option -s. | 69 | * Option -s. |
64 | */ | 70 | */ |
@@ -225,6 +231,11 @@ shutdown_task (void *cls, | |||
225 | GNUNET_SCHEDULER_cancel (op_timeout); | 231 | GNUNET_SCHEDULER_cancel (op_timeout); |
226 | op_timeout = GNUNET_SCHEDULER_NO_TASK; | 232 | op_timeout = GNUNET_SCHEDULER_NO_TASK; |
227 | } | 233 | } |
234 | if (NULL != tc_handle) | ||
235 | { | ||
236 | GNUNET_TRANSPORT_try_connect_cancel (tc_handle); | ||
237 | tc_handle = NULL; | ||
238 | } | ||
228 | if (NULL != pic) | 239 | if (NULL != pic) |
229 | { | 240 | { |
230 | GNUNET_TRANSPORT_peer_get_active_addresses_cancel (pic); | 241 | GNUNET_TRANSPORT_peer_get_active_addresses_cancel (pic); |
@@ -696,6 +707,29 @@ process_address (void *cls, const struct GNUNET_PeerIdentity *peer, | |||
696 | rc); | 707 | rc); |
697 | } | 708 | } |
698 | 709 | ||
710 | void try_connect_cb (void *cls, | ||
711 | const int result) | ||
712 | { | ||
713 | static int retries = 0; | ||
714 | if (GNUNET_OK == result) | ||
715 | { | ||
716 | tc_handle = NULL; | ||
717 | return; | ||
718 | } | ||
719 | retries ++; | ||
720 | if (retries < 10) | ||
721 | tc_handle = GNUNET_TRANSPORT_try_connect (handle, &pid, try_connect_cb, NULL); | ||
722 | else | ||
723 | { | ||
724 | FPRINTF (stderr, "%s", _("Failed to send connect request to transport service\n")); | ||
725 | if (GNUNET_SCHEDULER_NO_TASK != end) | ||
726 | GNUNET_SCHEDULER_cancel (end); | ||
727 | ret = 1; | ||
728 | end = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL); | ||
729 | return; | ||
730 | } | ||
731 | } | ||
732 | |||
699 | 733 | ||
700 | static void | 734 | static void |
701 | testservice_task (void *cls, | 735 | testservice_task (void *cls, |
@@ -752,7 +786,13 @@ testservice_task (void *cls, | |||
752 | ret = 1; | 786 | ret = 1; |
753 | return; | 787 | return; |
754 | } | 788 | } |
755 | GNUNET_TRANSPORT_try_connect (handle, &pid, NULL, NULL); /*FIXME TRY_CONNECT change */ | 789 | tc_handle = GNUNET_TRANSPORT_try_connect (handle, &pid, try_connect_cb, NULL); |
790 | if (NULL == tc_handle) | ||
791 | { | ||
792 | FPRINTF (stderr, "%s", _("Failed to send request to transport service\n")); | ||
793 | ret = 1; | ||
794 | return; | ||
795 | } | ||
756 | op_timeout = GNUNET_SCHEDULER_add_delayed (OP_TIMEOUT, | 796 | op_timeout = GNUNET_SCHEDULER_add_delayed (OP_TIMEOUT, |
757 | &operation_timeout, NULL); | 797 | &operation_timeout, NULL); |
758 | 798 | ||
@@ -776,7 +816,13 @@ testservice_task (void *cls, | |||
776 | ret = 1; | 816 | ret = 1; |
777 | return; | 817 | return; |
778 | } | 818 | } |
779 | GNUNET_TRANSPORT_try_connect (handle, &pid, NULL, NULL); /*FIXME TRY_CONNECT change */ | 819 | tc_handle = GNUNET_TRANSPORT_try_connect (handle, &pid, try_connect_cb, NULL); |
820 | if (NULL == tc_handle) | ||
821 | { | ||
822 | FPRINTF (stderr, "%s", _("Failed to send request to transport service\n")); | ||
823 | ret = 1; | ||
824 | return; | ||
825 | } | ||
780 | start_time = GNUNET_TIME_absolute_get (); | 826 | start_time = GNUNET_TIME_absolute_get (); |
781 | op_timeout = GNUNET_SCHEDULER_add_delayed (OP_TIMEOUT, | 827 | op_timeout = GNUNET_SCHEDULER_add_delayed (OP_TIMEOUT, |
782 | &operation_timeout, NULL); | 828 | &operation_timeout, NULL); |