gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r22798 - gnunet/src/testbed


From: gnunet
Subject: [GNUnet-SVN] r22798 - gnunet/src/testbed
Date: Fri, 20 Jul 2012 16:49:06 +0200

Author: harsha
Date: 2012-07-20 16:49:06 +0200 (Fri, 20 Jul 2012)
New Revision: 22798

Modified:
   gnunet/src/testbed/gnunet-service-testbed.c
   gnunet/src/testbed/test_testbed_api.c
   gnunet/src/testbed/testbed_api.c
   gnunet/src/testbed/testbed_api_peers.c
Log:
peer start and stop

Modified: gnunet/src/testbed/gnunet-service-testbed.c
===================================================================
--- gnunet/src/testbed/gnunet-service-testbed.c 2012-07-20 14:48:47 UTC (rev 
22797)
+++ gnunet/src/testbed/gnunet-service-testbed.c 2012-07-20 14:49:06 UTC (rev 
22798)
@@ -789,6 +789,7 @@
         "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 @@
   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 */

Modified: gnunet/src/testbed/test_testbed_api.c
===================================================================
--- gnunet/src/testbed/test_testbed_api.c       2012-07-20 14:48:47 UTC (rev 
22797)
+++ gnunet/src/testbed/test_testbed_api.c       2012-07-20 14:49:06 UTC (rev 
22798)
@@ -140,15 +140,29 @@
 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 @@
   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);
 }
 

Modified: gnunet/src/testbed/testbed_api.c
===================================================================
--- gnunet/src/testbed/testbed_api.c    2012-07-20 14:48:47 UTC (rev 22797)
+++ gnunet/src/testbed/testbed_api.c    2012-07-20 14:49:06 UTC (rev 22798)
@@ -272,15 +272,15 @@
     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;  
 }
 
@@ -337,6 +337,65 @@
 
 
 /**
+ * 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)
  *
  * @param cls the controller handler
@@ -374,6 +433,10 @@
       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);
   }

Modified: gnunet/src/testbed/testbed_api_peers.c
===================================================================
--- gnunet/src/testbed/testbed_api_peers.c      2012-07-20 14:48:47 UTC (rev 
22797)
+++ gnunet/src/testbed/testbed_api_peers.c      2012-07-20 14:49:06 UTC (rev 
22798)
@@ -195,7 +195,7 @@
   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;
 }
 
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]