* @brief Testcases for Stream API halfclosed connections between 2 peers
* @author Sree Harsha Totakura
*/
-
-#include <string.h>
-
#include "platform.h"
#include "gnunet_util_lib.h"
#include "gnunet_testbed_service.h"
#include "gnunet_mesh_service.h"
#include "gnunet_stream_lib.h"
-#define VERBOSE 1
-
/**
* Number of peers
*/
/**
* Peer's io write handle
*/
- struct GNUNET_STREAM_IOWriteHandle *io_write_handle;
+ struct GNUNET_STREAM_WriteHandle *io_write_handle;
/**
* Peer's io read handle
*/
- struct GNUNET_STREAM_IOReadHandle *io_read_handle;
+ struct GNUNET_STREAM_ReadHandle *io_read_handle;
/**
* Peer's shutdown handle
*/
enum SetupState
{
- /**
- * The initial state
- */
- INIT,
-
/**
* Get the identity of peer 1
*/
case PEER1_WRITE_SHUTDOWN:
GNUNET_assert (&peer2 == peer);
GNUNET_assert (NULL == peer->io_read_handle);
+ peer2.test_ok = GNUNET_YES;
transition (); /* to PEER1_HALFCLOSE_READ */
break;
default:
GNUNET_STREAM_close (peer2.socket);
if (GNUNET_SCHEDULER_NO_TASK != abort_task)
GNUNET_SCHEDULER_cancel (abort_task);
- GNUNET_TESTBED_operation_done (peer2.op);
+ if (NULL != peer2.op)
+ GNUNET_TESTBED_operation_done (peer2.op);
+ else
+ GNUNET_SCHEDULER_shutdown (); /* For shutting down testbed */
}
}
break;
case PEER1_WRITE_SHUTDOWN:
- GNUNET_assert (GNUNET_STREAM_SHUTDOWN == status);
- peer2.test_ok = GNUNET_YES;
+ GNUNET_assert (0); /* This callback will not be called when stream
+ is shutdown */
break;
case PEER1_HALFCLOSE_WRITE_FAIL:
case PEER1_READ_SHUTDOWN:
struct GNUNET_STREAM_Socket *socket,
const struct GNUNET_PeerIdentity *initiator)
{
- GNUNET_assert (NULL != socket);
- GNUNET_assert (NULL != initiator);
+ if ((NULL == socket) || (NULL == initiator))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Binding error\n");
+ if (GNUNET_SCHEDULER_NO_TASK != abort_task)
+ GNUNET_SCHEDULER_cancel (abort_task);
+ abort_task = GNUNET_SCHEDULER_add_now (&do_abort, NULL);
+ return GNUNET_OK;
+ }
GNUNET_assert (socket != peer1.socket);
-
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"%s: Peer connected: %s\n",
GNUNET_i2s (&peer2.our_id),
GNUNET_i2s(initiator));
-
peer2.socket = socket;
/* FIXME: reading should be done right now instead of a scheduled call */
read_task = GNUNET_SCHEDULER_add_now (&stream_read, (void *) socket);
{
lsocket = op_result;
GNUNET_STREAM_listen_close (lsocket);
- GNUNET_TESTBED_operation_done (peer1.op);
+ if (NULL != peer1.op)
+ GNUNET_TESTBED_operation_done (peer1.op);
+ else
+ GNUNET_SCHEDULER_shutdown ();
return;
}
if (&peer1 == cls)
{
switch (event->type)
{
- case GNUNET_TESTBED_ET_CONNECT:
- GNUNET_assert (INIT == setup_state);
- GNUNET_TESTBED_operation_done (op);
- op = GNUNET_TESTBED_peer_get_information (peer1.peer,
- GNUNET_TESTBED_PIT_IDENTITY,
- &peerinfo_cb, NULL);
- setup_state = PEER1_GET_IDENTITY;
- break;
case GNUNET_TESTBED_ET_OPERATION_FINISHED:
switch (setup_state)
{
GNUNET_assert (NULL != peers[1]);
peer1.peer = peers[0];
peer2.peer = peers[1];
- op = GNUNET_TESTBED_overlay_connect (NULL, NULL, NULL, peer2.peer, peer1.peer);
- setup_state = INIT;
+ op = GNUNET_TESTBED_peer_get_information (peer1.peer,
+ GNUNET_TESTBED_PIT_IDENTITY,
+ &peerinfo_cb, NULL);
+ setup_state = PEER1_GET_IDENTITY;
abort_task =
GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
- (GNUNET_TIME_UNIT_SECONDS, 40), &do_abort,
+ (GNUNET_TIME_UNIT_SECONDS, 1000), &do_abort,
NULL);
}
result = GNUNET_NO;
event_mask = 0;
- event_mask |= (1LL << GNUNET_TESTBED_ET_CONNECT);
event_mask |= (1LL << GNUNET_TESTBED_ET_OPERATION_FINISHED);
- GNUNET_TESTBED_test_run ("test_stream_2peers_halfclose",
- "test_stream_local.conf", NUM_PEERS, event_mask,
- &controller_event_cb, NULL, &test_master, NULL);
+ (void) GNUNET_TESTBED_test_run ("test_stream_2peers_halfclose",
+ "test_stream_local.conf", NUM_PEERS,
+ event_mask,
+ &controller_event_cb, NULL, &test_master,
+ NULL);
if (GNUNET_SYSERR == result)
return 1;
return 0;