예제 #1
0
/**
 * Shutdown nicely
 */
static void
do_close (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
{
  switch (test_step)
  {
  case TEST_STEP_1_HOP:
    if (NULL != peer_data[0].socket)
      GNUNET_STREAM_close (peer_data[0].socket);
    if (NULL != peer_data[1].socket)
      GNUNET_STREAM_close (peer_data[1].socket);
    if (NULL != peer2_listen_socket)
      GNUNET_STREAM_listen_close (peer2_listen_socket); /* Close listen socket */
    break;
  case TEST_STEP_2_HOP:
    if (NULL != peer_data[1].socket)
      GNUNET_STREAM_close (peer_data[1].socket);
    if (NULL != peer_data[0].op)
      GNUNET_TESTBED_operation_done (peer_data[0].op);
    if (NULL != peer_data[1].op)
      GNUNET_TESTBED_operation_done (peer_data[1].op);
    break;
  case TEST_STEP_3_HOP:
    GNUNET_break (0);    
  }  
  if (GNUNET_SCHEDULER_NO_TASK != abort_task)
    GNUNET_SCHEDULER_cancel (abort_task);
  if (GNUNET_SCHEDULER_NO_TASK != write_task)
    GNUNET_SCHEDULER_cancel (write_task);
  GNUNET_SCHEDULER_shutdown (); /* Shutdown this testcase */
  if (NULL != meter)
  {
    free_meter (meter);
    meter = NULL;
  }
}
예제 #2
0
/**
 * Shutdown nicely
 */
static void
do_shutdown (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
{
  GNUNET_STREAM_close (peer1.socket);
  if (NULL != peer2.socket)
    GNUNET_STREAM_close (peer2.socket);
  if (NULL != peer2_listen_socket)
    GNUNET_STREAM_listen_close (peer2_listen_socket);
  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test: shutdown\n");
  if (0 != abort_task)
  {
    GNUNET_SCHEDULER_cancel (abort_task);
  }
  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test: arm\n");
  if (0 != GNUNET_OS_process_kill (arm_pid, SIGTERM))
  {
    GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "kill");
  }
  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test: Wait\n");
  /* Free the duplicated configuration */
  GNUNET_CONFIGURATION_destroy (config_peer1);
  GNUNET_CONFIGURATION_destroy (config_peer2);
  GNUNET_assert (GNUNET_OK == GNUNET_OS_process_wait (arm_pid));
  GNUNET_OS_process_destroy (arm_pid);
}
예제 #3
0
/**
 * Shutdown nicely
 */
static void
do_close (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
{
    if (GNUNET_SCHEDULER_NO_TASK != abort_task)
        GNUNET_SCHEDULER_cancel (abort_task);
    if (NULL != peer1.socket)
        GNUNET_STREAM_close (peer1.socket);
    if (NULL != peer2.socket)
        GNUNET_STREAM_close (peer2.socket);
    if (NULL != peer2_listen_socket)
        GNUNET_STREAM_listen_close (peer2_listen_socket); /* Close listen socket */
}
/**
 * Destroy a stream handle.
 *
 * @param sh stream to process
 */
static void
destroy_stream_handle (struct StreamHandle *sh)
{
  struct GSF_StreamRequest *sr;

  while (NULL != (sr = sh->pending_head))
  {
    sr->proc (sr->proc_cls, GNUNET_BLOCK_TYPE_ANY,
	      GNUNET_TIME_UNIT_FOREVER_ABS,
	      0, NULL);
    GSF_stream_query_cancel (sr);
  }
  GNUNET_CONTAINER_multihashmap_iterate (sh->waiting_map,
					 &free_waiting_entry,
					 sh);
  if (NULL != sh->wh)
    GNUNET_STREAM_io_write_cancel (sh->wh);
  if (NULL != sh->rh)
    GNUNET_STREAM_io_read_cancel (sh->rh);
  if (GNUNET_SCHEDULER_NO_TASK != sh->timeout_task)
    GNUNET_SCHEDULER_cancel (sh->timeout_task);
  GNUNET_STREAM_close (sh->stream);
  GNUNET_assert (GNUNET_OK ==
		 GNUNET_CONTAINER_multihashmap_remove (stream_map,
						       &sh->target.hashPubKey,
						       sh));
  GNUNET_CONTAINER_multihashmap_destroy (sh->waiting_map);
  GNUNET_free (sh);
}
예제 #5
0
/**
 * Adapter function called to destroy a connection to
 * a service.
 * 
 * @param cls closure
 * @param op_result service handle returned from the connect adapter
 */
static void
stream_da (void *cls, void *op_result)
{
  if (&peer_data[1] == cls)
  {
    GNUNET_STREAM_listen_close (op_result);
    return;
  }
  else if (&peer_data[0] == cls)
  {
    GNUNET_STREAM_close (op_result);
    return;
  }
  GNUNET_assert (0);
}
/**
 * We had a serious error, tear down and re-create stream from scratch.
 *
 * @param sh stream to reset
 */
static void
reset_stream (struct StreamHandle *sh)
{
  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
	      "Resetting stream to %s\n",
	      GNUNET_i2s (&sh->target));
  if (NULL != sh->rh)
    GNUNET_STREAM_io_read_cancel (sh->rh);
  GNUNET_STREAM_close (sh->stream);
  sh->is_ready = GNUNET_NO;
  GNUNET_CONTAINER_multihashmap_iterate (sh->waiting_map,
					 &move_to_pending,
					 sh);
  sh->stream = GNUNET_STREAM_open (GSF_cfg,
				   &sh->target,
				   GNUNET_APPLICATION_TYPE_FS_BLOCK_TRANSFER,
				   &stream_ready_cb, sh,
				   GNUNET_STREAM_OPTION_END);
}
/**
 * We're done with a particular client, clean up.
 *
 * @param sc client to clean up
 */
static void
terminate_stream (struct StreamClient *sc)
{
  GNUNET_STATISTICS_update (GSF_stats,
			    gettext_noop ("# stream connections active"), -1,
			    GNUNET_NO);
  if (GNUNET_SCHEDULER_NO_TASK != sc->terminate_task)
    GNUNET_SCHEDULER_cancel (sc->terminate_task); 
  if (GNUNET_SCHEDULER_NO_TASK != sc->timeout_task)
    GNUNET_SCHEDULER_cancel (sc->timeout_task); 
 if (NULL != sc->rh)
    GNUNET_STREAM_io_read_cancel (sc->rh);
  if (NULL != sc->wh)
    GNUNET_STREAM_io_write_cancel (sc->wh);
  if (NULL != sc->qe)
    GNUNET_DATASTORE_cancel (sc->qe);
  GNUNET_SERVER_mst_destroy (sc->mst);
  GNUNET_STREAM_close (sc->socket);
  GNUNET_CONTAINER_DLL_remove (sc_head,
			       sc_tail,
			       sc);
  sc_count--;
  GNUNET_free (sc);
}