testbed api peer start
authorSree Harsha Totakura <totakura@in.tum.de>
Wed, 18 Jul 2012 15:25:26 +0000 (15:25 +0000)
committerSree Harsha Totakura <totakura@in.tum.de>
Wed, 18 Jul 2012 15:25:26 +0000 (15:25 +0000)
src/testbed/test_testbed_api_2peers.c
src/testbed/testbed_api.c
src/testbed/testbed_api.h
src/testbed/testbed_api_peers.c

index 6378fd9cc288b2d07a29c9959857edd3cef317f5..9f55b61eb3e8145030e631510ad0200711fadbb3 100644 (file)
@@ -19,8 +19,9 @@
  */
 
 /**
- * @file testbed/test_testbed_api.c
- * @brief testcases for the testbed api
+ * @file testbed/test_testbed_api_2peers.c
+ * @brief testcases for the testbed api: 2 peers are configured, started and
+ *          connected together
  * @author Sree Harsha Totakura
  */
 
index e03c0e87f149ce544c5e7fea660585b649fc8840..e343daa31108d01c503ffa97e8719a4d70bfbab7 100644 (file)
@@ -285,6 +285,51 @@ handle_opsuccess (struct GNUNET_TESTBED_Controller *c,
 }
 
 
+/**
+ * Handler for GNUNET_MESSAGE_TYPE_TESTBED_PEERCREATESUCCESS 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_create_success (struct GNUNET_TESTBED_Controller *c,
+                           const struct
+                           GNUNET_TESTBED_PeerCreateSuccessEventMessage *msg)
+{
+  struct GNUNET_TESTBED_Operation *op;
+  struct GNUNET_TESTBED_Peer *peer;
+  uint64_t op_id;
+
+  GNUNET_assert (sizeof (struct GNUNET_TESTBED_PeerCreateSuccessEventMessage)
+                == 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;
+  }
+  GNUNET_assert (NULL != op);
+  peer = op->data;
+  GNUNET_assert (NULL != peer);
+  GNUNET_assert (peer->unique_id == ntohl (msg->peer_id));
+  if (0 != (c->event_mask & (1L << GNUNET_TESTBED_ET_PEER_START)))
+  {
+    struct GNUNET_TESTBED_EventInformation info;
+    
+    info.details.peer_start.host = peer->host;
+    info.details.peer_start.peer = peer;
+    if (NULL != c->cc)
+      c->cc (c->cc_cls, &info);
+  }
+  GNUNET_CONTAINER_DLL_remove (c->op_head, c->op_tail, op);
+  GNUNET_free (op);
+  return GNUNET_YES;
+}
+
+
 /**
  * Handler for messages from controller (testbed service)
  *
@@ -318,6 +363,11 @@ message_handler (void *cls, const struct GNUNET_MessageHeader *msg)
                             GNUNET_TESTBED_GenericOperationSuccessEventMessage
                             *) msg);
     break;
+  case GNUNET_MESSAGE_TYPE_TESTBED_PEERCREATESUCCESS:
+    status =
+      handle_peer_create_success 
+      (c, (const struct GNUNET_TESTBED_PeerCreateSuccessEventMessage *)msg);
+    break;
   default:
     GNUNET_break (0);
   }
index 2eaf0227b56adb88435450a14e57e59ec26c0a22..994caae8b7b34f2fe65554f1945f323e6f550a13 100644 (file)
  */
 enum OperationType
   {
+    /**
+     * Peer start operation
+     */
+    OP_PEER_START,
+
     /**
      * Peer destroy operation
      */
index f2dc4dbe2ce4d7136410e00409fcb0bc3fea385a..8574a0432975ba326b6fdfdcc707a72ed7a5c73b 100644 (file)
@@ -158,8 +158,22 @@ GNUNET_TESTBED_peer_create (struct GNUNET_TESTBED_Controller *controller,
 struct GNUNET_TESTBED_Operation *
 GNUNET_TESTBED_peer_start (struct GNUNET_TESTBED_Peer *peer)
 {
-  // FIXME: start locally or delegate...
-  GNUNET_break (0);
+  struct GNUNET_TESTBED_Operation *op;
+  struct GNUNET_TESTBED_PeerStartMessage *msg;
+
+  op = GNUNET_malloc (sizeof (struct GNUNET_TESTBED_Operation));
+  op->operation_id = peer->controller->operation_counter++;
+  op->type = OP_PEER_START;
+  op->data = peer;
+  msg = GNUNET_malloc (sizeof (struct GNUNET_TESTBED_PeerStartMessage));
+  msg->header.size = htons (sizeof (struct GNUNET_TESTBED_PeerStartMessage));
+  msg->header.type = htons (GNUNET_MESSAGE_TYPE_TESTBED_STARTPEER);
+  msg->peer_id = htonl (peer->unique_id);
+  msg->operation_id = GNUNET_htonll (op->operation_id);
+  GNUNET_CONTAINER_DLL_insert_tail (peer->controller->op_head,
+                                    peer->controller->op_tail, op);
+  GNUNET_TESTBED_queue_message_ (peer->controller, 
+                                (struct GNUNET_MessageHeader *) msg);
   return NULL;
 }