* @param call call to reconnect
*/
static void
-reconnect_call (struct GNUNET_CONVERSATION_Call *call);
+fail_call (struct GNUNET_CONVERSATION_Call *call);
/**
{
case CS_LOOKUP:
GNUNET_break (0);
- reconnect_call (call);
+ fail_call (call);
break;
case CS_RINGING:
GNUNET_break_op (0);
- reconnect_call (call);
+ fail_call (call);
break;
case CS_SUSPENDED_CALLER:
call->state = CS_SUSPENDED_BOTH;
{
case CS_LOOKUP:
GNUNET_break (0);
- reconnect_call (call);
+ fail_call (call);
break;
case CS_RINGING:
GNUNET_break_op (0);
- reconnect_call (call);
+ fail_call (call);
break;
case CS_SUSPENDED_CALLER:
GNUNET_break_op (0);
{
case CS_LOOKUP:
GNUNET_break (0);
- reconnect_call (call);
+ fail_call (call);
break;
case CS_RINGING:
call->state = CS_ACTIVE;
case CS_SUSPENDED_BOTH:
case CS_ACTIVE:
GNUNET_break (0);
- reconnect_call (call);
+ fail_call (call);
break;
case CS_SHUTDOWN:
GNUNET_CONVERSATION_call_stop (call);
{
case CS_LOOKUP:
GNUNET_break (0);
- reconnect_call (call);
+ fail_call (call);
break;
case CS_RINGING:
case CS_SUSPENDED_CALLER:
{
case CS_LOOKUP:
GNUNET_break (0);
- reconnect_call (call);
+ fail_call (call);
break;
case CS_RINGING:
GNUNET_break (0);
- reconnect_call (call);
+ fail_call (call);
break;
case CS_SUSPENDED_CALLER:
/* can happen: we suspended, other peer did not yet
}
GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
_("Connection to conversation service lost, trying to reconnect\n"));
- reconnect_call (call);
+ fail_call (call);
}
/**
- * The call got disconnected, reconnect to the service.
+ * The call got disconnected, destroy the handle.
*
* @param call call to reconnect
*/
static void
-reconnect_call (struct GNUNET_CONVERSATION_Call *call)
+fail_call (struct GNUNET_CONVERSATION_Call *call)
{
if (CS_ACTIVE == call->state)
{
static void *call_rdc_cls;
-static struct GNUNET_SCHEDULER_Task * phone_task;
+static struct GNUNET_SCHEDULER_Task *phone_task;
-static struct GNUNET_SCHEDULER_Task * call_task;
+static struct GNUNET_SCHEDULER_Task *call_task;
static void
case GNUNET_CONVERSATION_EC_PHONE_HUNG_UP:
GNUNET_break (caller == active_caller);
active_caller = NULL;
- ok = 0;
+ if (1 == ok)
+ ok = 0;
GNUNET_SCHEDULER_shutdown ();
break;
default:
- fprintf (stderr, "Unexpected phone code: %d\n", code);
+ fprintf (stderr,
+ "Unexpected phone code: %d\n",
+ code);
break;
}
}
case GNUNET_CONVERSATION_EC_CALL_GNS_FAIL:
case GNUNET_CONVERSATION_EC_CALL_HUNG_UP:
call = NULL;
+ ok = 2;
+ GNUNET_break (0);
fprintf (stderr, "Unexpected call code: %d\n", code);
break;
case GNUNET_CONVERSATION_EC_CALL_SUSPENDED:
case GNUNET_CONVERSATION_EC_CALL_RESUMED:
+ GNUNET_break (0);
+ fprintf (stderr, "Unexpected call code: %d\n", code);
+ ok = 2;
+ break;
case GNUNET_CONVERSATION_EC_CALL_ERROR:
+ GNUNET_break (0);
fprintf (stderr, "Unexpected call code: %d\n", code);
+ call = NULL;
+ ok = 2;
break;
}
}
static void *phone_rdc_cls;
-static struct GNUNET_SCHEDULER_Task * phone_task;
+static struct GNUNET_SCHEDULER_Task *phone_task;
+
+static struct GNUNET_SCHEDULER_Task *timeout_task;
/**
* Variable for recognizing caller1
/**
- * Signature of the main function of a task.
+ * Function run on timeout.
*
* @param cls closure
*/
static void
end_test (void *cls)
{
+ timeout_task = NULL;
+ fprintf (stderr,
+ "Timeout!\n");
GNUNET_SCHEDULER_shutdown ();
+}
+
+
+/**
+ * Function run on shutdown.
+ *
+ * @param cls closure
+ */
+static void
+do_shutdown (void *cls)
+{
+ if (NULL != timeout_task)
+ {
+ GNUNET_SCHEDULER_cancel (timeout_task);
+ timeout_task = NULL;
+ }
if (NULL != op)
{
GNUNET_IDENTITY_cancel (op);
break;
case GNUNET_CONVERSATION_EC_CALL_ERROR:
GNUNET_break (0);
+ if (0 == strcmp (cid, "call1"))
+ call1 = NULL;
+ else
+ call2 = NULL;
+ GNUNET_SCHEDULER_shutdown ();
break;
}
}
struct GNUNET_TESTING_Peer *peer)
{
cfg = c;
- GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_test,
- NULL);
+ timeout_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT,
+ &end_test,
+ NULL);
+ GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
+ NULL);
id = GNUNET_IDENTITY_connect (cfg,
&identity_cb,
NULL);