From: Sree Harsha Totakura Date: Fri, 20 Jul 2012 14:49:06 +0000 (+0000) Subject: peer start and stop X-Git-Tag: initial-import-from-subversion-38251~12407 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=9bc7c8f647057e7861d086d9cfde4e68b24ac162;p=oweals%2Fgnunet.git peer start and stop --- diff --git a/src/testbed/gnunet-service-testbed.c b/src/testbed/gnunet-service-testbed.c index b0fb72228..7fc9ad219 100644 --- a/src/testbed/gnunet-service-testbed.c +++ b/src/testbed/gnunet-service-testbed.c @@ -789,6 +789,7 @@ handle_init (void *cls, "Cannot determine the ip of master controller: %s\n", STRERROR (errno)); GNUNET_assert (0); } + LOG_DEBUG ("Master Controller IP: %s\n", master_context->master_ip); master_context->system = GNUNET_TESTING_system_create ("testbed", master_context->master_ip); host = GNUNET_TESTBED_host_create_with_id (master_context->host_id, @@ -1316,8 +1317,7 @@ handle_peer_start (void *cls, msg = (const struct GNUNET_TESTBED_PeerStartMessage *) message; peer_id = ntohl (msg->peer_id); if ((peer_id >= peer_list_size) - || (NULL == peer_list[peer_id]) - || (GNUNET_OK != GNUNET_TESTING_peer_start (peer_list[peer_id]->peer))) + || (NULL == peer_list[peer_id])) { GNUNET_break (0); /* FIXME: reply with failure message or forward to slave controller */ diff --git a/src/testbed/test_testbed_api.c b/src/testbed/test_testbed_api.c index 3ae6dbd67..3bb45f730 100644 --- a/src/testbed/test_testbed_api.c +++ b/src/testbed/test_testbed_api.c @@ -140,15 +140,29 @@ do_abort (void *cls, const const struct GNUNET_SCHEDULER_TaskContext *tc) static void controller_cb(void *cls, const struct GNUNET_TESTBED_EventInformation *event) { - GNUNET_assert (GNUNET_TESTBED_ET_OPERATION_FINISHED == event->type); - GNUNET_assert (event->details.operation_finished.operation == operation); - GNUNET_assert (NULL == event->details.operation_finished.op_cls); - GNUNET_assert (NULL == event->details.operation_finished.emsg); - GNUNET_assert (GNUNET_TESTBED_PIT_GENERIC == - event->details.operation_finished.pit); - GNUNET_assert (NULL == event->details.operation_finished.op_result.generic); - result = GNUNET_YES; - GNUNET_SCHEDULER_add_now (&do_shutdown, NULL); + switch (event->type) + { + case GNUNET_TESTBED_ET_OPERATION_FINISHED: + GNUNET_assert (event->details.operation_finished.operation == operation); + GNUNET_assert (NULL == event->details.operation_finished.op_cls); + GNUNET_assert (NULL == event->details.operation_finished.emsg); + GNUNET_assert (GNUNET_TESTBED_PIT_GENERIC == + event->details.operation_finished.pit); + GNUNET_assert (NULL == event->details.operation_finished.op_result.generic); + break; + case GNUNET_TESTBED_ET_PEER_START: + GNUNET_assert (event->details.peer_start.host == host); + GNUNET_assert (event->details.peer_start.peer == peer); + operation = GNUNET_TESTBED_peer_stop (peer); + break; + case GNUNET_TESTBED_ET_PEER_STOP: + GNUNET_assert (event->details.peer_stop.peer == peer); + result = GNUNET_YES; + GNUNET_SCHEDULER_add_now (&do_shutdown, NULL); + break; + default: + GNUNET_assert (0); /* We should never reach this state */ + } } @@ -171,7 +185,7 @@ peer_create_cb (void *cls, GNUNET_assert (NULL != peer); GNUNET_assert (NULL != peer_ptr); *peer_ptr = peer; - operation = GNUNET_TESTBED_peer_destroy (peer); + operation = GNUNET_TESTBED_peer_start (peer); GNUNET_assert (NULL != operation); } diff --git a/src/testbed/testbed_api.c b/src/testbed/testbed_api.c index f7d58e9bb..e03f9d3c9 100644 --- a/src/testbed/testbed_api.c +++ b/src/testbed/testbed_api.c @@ -272,15 +272,15 @@ handle_opsuccess (struct GNUNET_TESTBED_Controller *c, break; default: GNUNET_break (0); - } + } + GNUNET_CONTAINER_DLL_remove (c->op_head, c->op_tail, op); + GNUNET_free (op); if (NULL != event) { if (NULL != c->cc) c->cc (c->cc_cls, event); GNUNET_free (event); } - GNUNET_CONTAINER_DLL_remove (c->op_head, c->op_tail, op); - GNUNET_free (op); return GNUNET_YES; } @@ -336,6 +336,65 @@ handle_peer_create_success (struct GNUNET_TESTBED_Controller *c, } +/** + * Handler for GNUNET_MESSAGE_TYPE_TESTBED_PEEREVENT message from + * controller (testbed service) + * + * @param c the controller handler + * @param msg message received + * @return GNUNET_YES if we can continue receiving from service; GNUNET_NO if + * not + */ +static int +handle_peer_event (struct GNUNET_TESTBED_Controller *c, + const struct GNUNET_TESTBED_PeerEventMessage *msg) +{ + struct GNUNET_TESTBED_Operation *op; + struct GNUNET_TESTBED_Peer *peer; + struct GNUNET_TESTBED_EventInformation event; + uint64_t op_id; + + GNUNET_assert (sizeof (struct GNUNET_TESTBED_PeerEventMessage) + == ntohs (msg->header.size)); + op_id = GNUNET_ntohll (msg->operation_id); + for (op = c->op_head; NULL != op; op = op->next) + { + if (op->operation_id == op_id) + break; + } + if (NULL == op) + { + LOG_DEBUG ("Operation not found\n"); + return GNUNET_YES; + } + GNUNET_assert ((OP_PEER_START == op->type) || (OP_PEER_STOP == op->type)); + peer = op->data; + GNUNET_assert (NULL != peer); + event.type = (enum GNUNET_TESTBED_EventType) ntohl (msg->event_type); + switch (event.type) + { + case GNUNET_TESTBED_ET_PEER_START: + event.details.peer_start.host = peer->host; + event.details.peer_start.peer = peer; + break; + case GNUNET_TESTBED_ET_PEER_STOP: + event.details.peer_stop.peer = peer; + break; + default: + GNUNET_assert (0); /* We should never reach this state */ + } + GNUNET_CONTAINER_DLL_remove (c->op_head, c->op_tail, op); + GNUNET_free (op); + if (0 != ((GNUNET_TESTBED_ET_PEER_START | GNUNET_TESTBED_ET_PEER_STOP) + & c->event_mask)) + { + if (NULL != c->cc) + c->cc (c->cc_cls, &event); + } + return GNUNET_YES; +} + + /** * Handler for messages from controller (testbed service) * @@ -374,6 +433,10 @@ message_handler (void *cls, const struct GNUNET_MessageHeader *msg) handle_peer_create_success (c, (const struct GNUNET_TESTBED_PeerCreateSuccessEventMessage *)msg); break; + case GNUNET_MESSAGE_TYPE_TESTBED_PEEREVENT: + status = + handle_peer_event (c, (const struct GNUNET_TESTBED_PeerEventMessage *) msg); + break; default: GNUNET_break (0); } diff --git a/src/testbed/testbed_api_peers.c b/src/testbed/testbed_api_peers.c index 0010105dc..2abf4ade1 100644 --- a/src/testbed/testbed_api_peers.c +++ b/src/testbed/testbed_api_peers.c @@ -195,7 +195,7 @@ GNUNET_TESTBED_peer_start (struct GNUNET_TESTBED_Peer *peer) GNUNET_CONTAINER_DLL_insert_tail (peer->controller->op_head, peer->controller->op_tail, op); GNUNET_TESTBED_queue_message_ (peer->controller, &msg->header); - return NULL; + return op; }