From: Sree Harsha Totakura Date: Sun, 8 Jul 2012 21:11:06 +0000 (+0000) Subject: -added handler for peer_destroy X-Git-Tag: initial-import-from-subversion-38251~12589 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=0f08490003a273621af504758fb76fc036786bbf;p=oweals%2Fgnunet.git -added handler for peer_destroy --- diff --git a/src/testbed/gnunet-service-testbed.c b/src/testbed/gnunet-service-testbed.c index d9eb9d617..b947ee7d6 100644 --- a/src/testbed/gnunet-service-testbed.c +++ b/src/testbed/gnunet-service-testbed.c @@ -1156,6 +1156,57 @@ handle_peer_create (void *cls, } +/** + * Message handler for GNUNET_MESSAGE_TYPE_TESTBED_DESTROYPEER messages + * + * @param cls NULL + * @param client identification of the client + * @param message the actual message + */ +static void +handle_peer_destroy (void *cls, + struct GNUNET_SERVER_Client *client, + const struct GNUNET_MessageHeader *message) +{ + const struct GNUNET_TESTBED_PeerDestroyMessage *msg; + struct GNUNET_TESTBED_GenericOperationSuccessEventMessage *reply; + uint32_t peer_id; + uint32_t id; + uint16_t reply_size; + + msg = (const struct GNUNET_TESTBED_PeerDestroyMessage *) message; + peer_id = ntohl (msg->peer_id); + if ((peer_list_size <= peer_id) || (NULL == peer_list[peer_id])) + { + GNUNET_break (0); + /* Reply with failure event message */ + } + GNUNET_TESTING_peer_destroy (peer_list[peer_id]->peer); + GNUNET_CONFIGURATION_destroy (peer_list[peer_id]->cfg); + GNUNET_free (peer_list[peer_id]); + peer_list[peer_id] = NULL; + for (id = 0; id < LIST_GROW_STEP; id++) + { + if (((peer_id + id >= peer_list_size) || + (NULL != peer_list[peer_id]))) + break; + } + if (LIST_GROW_STEP == id) + { + peer_list_size -= LIST_GROW_STEP; + peer_list = GNUNET_realloc (peer_list, peer_list_size); + } + reply_size = + sizeof (struct GNUNET_TESTBED_GenericOperationSuccessEventMessage); + reply = GNUNET_malloc (reply_size); + reply->header.type = htons (GNUNET_MESSAGE_TYPE_TESTBED_GENERICOPSUCCESS); + reply->header.size = htons (reply_size); + reply->operation_id = msg->operation_id; + queue_message (client, (struct GNUNET_MessageHeader *) reply); + +} + + /** * Iterator over hash map entries. * @@ -1223,6 +1274,15 @@ shutdown_task (void *cls, GNUNET_CONTAINER_DLL_remove (lcfq_head, lcfq_tail, lcfq); GNUNET_free (lcfq); } + /* Clear peer list */ + for (id = 0; id < peer_list_size; id++) + if (NULL != peer_list[id]) + { + GNUNET_TESTING_peer_destroy (peer_list[id]->peer); + GNUNET_CONFIGURATION_destroy (peer_list[id]->cfg); + GNUNET_free (peer_list[id]); + } + GNUNET_free_non_null (peer_list); /* Clear host list */ for (id = 0; id < host_list_size; id++) if (NULL != host_list[id]) @@ -1293,6 +1353,8 @@ testbed_run (void *cls, {&handle_link_controllers, NULL, GNUNET_MESSAGE_TYPE_TESTBED_LCONTROLLERS, 0}, {&handle_peer_create, NULL, GNUNET_MESSAGE_TYPE_TESTBED_CREATEPEER, 0}, + {&handle_peer_destroy, NULL, GNUNET_MESSAGE_TYPE_TESTBED_DESTROYPEER, + sizeof (struct GNUNET_TESTBED_PeerDestroyMessage)}, {NULL} }; diff --git a/src/testbed/testbed_api_peers.c b/src/testbed/testbed_api_peers.c index c225c7d12..2fe8ce26d 100644 --- a/src/testbed/testbed_api_peers.c +++ b/src/testbed/testbed_api_peers.c @@ -295,7 +295,7 @@ GNUNET_TESTBED_peer_destroy (struct GNUNET_TESTBED_Peer *peer) msg = GNUNET_malloc (sizeof (struct GNUNET_TESTBED_PeerDestroyMessage)); msg->header.size = htons (sizeof (struct GNUNET_TESTBED_PeerDestroyMessage)); msg->header.type = htons (GNUNET_MESSAGE_TYPE_TESTBED_DESTROYPEER); - msg->peer_id = peer->unique_id; + msg->peer_id = htonl (peer->unique_id); msg->operation_id = GNUNET_htonll (op->operation_id); GNUNET_TESTBED_operation_add (op); GNUNET_TESTBED_queue_message (peer->controller,