/**
 * 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);
    op = NULL;
  }
  if (NULL != call1)
  {
    GNUNET_CONVERSATION_call_stop (call1);
    call1 = NULL;
  }
  if (NULL != call2)
  {
    GNUNET_CONVERSATION_call_stop (call2);
    call2 = NULL;
  }
  if (NULL != phone)
  {
    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Disconnecting from PHONE service.\n");
    GNUNET_CONVERSATION_phone_destroy (phone);
    phone = NULL;
  }
  if (NULL != id)
  {
    GNUNET_IDENTITY_disconnect (id);
    id = NULL;
  }
  if (NULL != qe)
  {
    GNUNET_NAMESTORE_cancel (qe);
    qe = NULL;
  }
  if (NULL != ns)
  {
    GNUNET_NAMESTORE_disconnect (ns);
    ns = NULL;
  }
}
static void
play (void *cls,
      size_t data_size,
      const void *data)
{
  static unsigned int phone_i;
  static unsigned int call_i;

  if (0 == strncmp ("call", data, data_size))
    call_i++;
  else if (0 == strncmp ("phone", data, data_size))
    phone_i++;
  else
  {
    LOG_DEBUG ("Received unexpected data %.*s\n",
               (int) data_size,
               (const char *) data);
  }

  if ( (20 < call_i) &&
       (20 < phone_i) &&
       (CALLER2 == cls) )
  {
    /* time to hang up ... */
    GNUNET_CONVERSATION_call_stop (call2);
    call2 = NULL;
    /* reset counters */
    call_i = 0;
    phone_i = 0;
    call2_finished = GNUNET_YES;
  }
  if ( (20 < call_i) &&
       (20 < phone_i) &&
       (CALLER1 == cls) )
  {
    /* time to hang up ... */
    GNUNET_CONVERSATION_call_stop (call1);
    call1 = NULL;
    call_i = 0;
    phone_i = 0;
    call1_finished = GNUNET_YES;
  }
}
/**
 * Signature of the main function of a task.
 *
 * @param cls closure
 * @param tc context information (why was this task triggered now)
 */
static void
end_test (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
{
    GNUNET_SCHEDULER_shutdown ();
    if (NULL != op)
    {
        GNUNET_IDENTITY_cancel (op);
        op = NULL;
    }
    if (NULL != call)
    {
        GNUNET_CONVERSATION_call_stop (call);
        call = NULL;
    }
    if (NULL != phone)
    {
        GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Disconnecting from PHONE service.\n");
        GNUNET_CONVERSATION_phone_destroy (phone);
        phone = NULL;
    }
    if (NULL != id)
    {
        GNUNET_IDENTITY_disconnect (id);
        id = NULL;
    }
    if (NULL != qe)
    {
        GNUNET_NAMESTORE_cancel (qe);
        qe = NULL;
    }
    if (NULL != ns)
    {
        GNUNET_NAMESTORE_disconnect (ns);
        ns = NULL;
    }
}