[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r23723 - gnunet/src/testbed
From: |
gnunet |
Subject: |
[GNUnet-SVN] r23723 - gnunet/src/testbed |
Date: |
Sun, 9 Sep 2012 15:46:21 +0200 |
Author: harsha
Date: 2012-09-09 15:46:21 +0200 (Sun, 09 Sep 2012)
New Revision: 23723
Modified:
gnunet/src/testbed/testbed_api.c
gnunet/src/testbed/testbed_api_peers.c
gnunet/src/testbed/testbed_api_peers.h
Log:
implemented continuations to testbed peer start/stop API
Modified: gnunet/src/testbed/testbed_api.c
===================================================================
--- gnunet/src/testbed/testbed_api.c 2012-09-09 13:41:00 UTC (rev 23722)
+++ gnunet/src/testbed/testbed_api.c 2012-09-09 13:46:21 UTC (rev 23723)
@@ -410,6 +410,9 @@
{
struct OperationContext *opc;
struct GNUNET_TESTBED_Peer *peer;
+ struct PeerEventData *data;
+ GNUNET_TESTBED_PeerChurnCallback pcc;
+ void *pcc_cls;
struct GNUNET_TESTBED_EventInformation event;
uint64_t op_id;
@@ -434,7 +437,9 @@
return GNUNET_YES;
}
GNUNET_assert ((OP_PEER_START == opc->type) || (OP_PEER_STOP == opc->type));
- peer = opc->data;
+ data = opc->data;
+ GNUNET_assert (NULL != data);
+ peer = data->peer;
GNUNET_assert (NULL != peer);
event.type = (enum GNUNET_TESTBED_EventType) ntohl (msg->event_type);
switch (event.type)
@@ -451,6 +456,9 @@
default:
GNUNET_assert (0); /* We should never reach this state */
}
+ pcc = data->pcc;
+ pcc_cls = data->pcc_cls;
+ GNUNET_free (data);
GNUNET_CONTAINER_DLL_remove (opc->c->ocq_head, opc->c->ocq_tail, opc);
opc->state = OPC_STATE_FINISHED;
if (0 !=
@@ -460,6 +468,8 @@
if (NULL != c->cc)
c->cc (c->cc_cls, &event);
}
+ if (NULL != pcc)
+ pcc (pcc_cls, NULL);
return GNUNET_YES;
}
Modified: gnunet/src/testbed/testbed_api_peers.c
===================================================================
--- gnunet/src/testbed/testbed_api_peers.c 2012-09-09 13:41:00 UTC (rev
23722)
+++ gnunet/src/testbed/testbed_api_peers.c 2012-09-09 13:46:21 UTC (rev
23723)
@@ -146,11 +146,14 @@
{
struct OperationContext *opc = cls;
struct GNUNET_TESTBED_PeerStartMessage *msg;
+ struct PeerEventData *data;
struct GNUNET_TESTBED_Peer *peer;
GNUNET_assert (OP_PEER_START == opc->type);
GNUNET_assert (NULL != opc->data);
- peer = opc->data;
+ data = opc->data;
+ GNUNET_assert (NULL != data->peer);
+ peer = data->peer;
GNUNET_assert ((PS_CREATED == peer->state) || (PS_STOPPED == peer->state));
opc->state = OPC_STATE_STARTED;
msg = GNUNET_malloc (sizeof (struct GNUNET_TESTBED_PeerStartMessage));
@@ -174,7 +177,10 @@
struct OperationContext *opc = cls;
if (OPC_STATE_FINISHED != opc->state)
+ {
+ GNUNET_free (opc->data);
GNUNET_CONTAINER_DLL_remove (opc->c->ocq_head, opc->c->ocq_tail, opc);
+ }
GNUNET_free (opc);
}
@@ -189,10 +195,13 @@
{
struct OperationContext *opc = cls;
struct GNUNET_TESTBED_PeerStopMessage *msg;
+ struct PeerEventData *data;
struct GNUNET_TESTBED_Peer *peer;
GNUNET_assert (NULL != opc->data);
- peer = opc->data;
+ data = opc->data;
+ GNUNET_assert (NULL != data->peer);
+ peer = data->peer;
GNUNET_assert (PS_STARTED == peer->state);
opc->state = OPC_STATE_STARTED;
msg = GNUNET_malloc (sizeof (struct GNUNET_TESTBED_PeerStopMessage));
@@ -216,7 +225,10 @@
struct OperationContext *opc = cls;
if (OPC_STATE_FINISHED != opc->state)
+ {
+ GNUNET_free (opc->data);
GNUNET_CONTAINER_DLL_remove (opc->c->ocq_head, opc->c->ocq_tail, opc);
+ }
GNUNET_free (opc);
}
@@ -493,11 +505,15 @@
void *pcc_cls)
{
struct OperationContext *opc;
+ struct PeerEventData *data;
- // FIXME: keep and call pcc!
+ data = GNUNET_malloc (sizeof (struct PeerEventData));
+ data->peer = peer;
+ data->pcc = pcc;
+ data->pcc_cls = pcc_cls;
opc = GNUNET_malloc (sizeof (struct OperationContext));
opc->c = peer->controller;
- opc->data = peer;
+ opc->data = data;
opc->id = opc->c->operation_counter++;
opc->type = OP_PEER_START;
opc->op =
@@ -525,11 +541,15 @@
void *pcc_cls)
{
struct OperationContext *opc;
-
- // FIXME: keep and call pcc!
+ struct PeerEventData *data;
+
+ data = GNUNET_malloc (sizeof (struct PeerEventData));
+ data->peer = peer;
+ data->pcc = pcc;
+ data->pcc_cls = pcc_cls;
opc = GNUNET_malloc (sizeof (struct OperationContext));
opc->c = peer->controller;
- opc->data = peer;
+ opc->data = data;
opc->id = opc->c->operation_counter++;
opc->type = OP_PEER_STOP;
opc->op =
Modified: gnunet/src/testbed/testbed_api_peers.h
===================================================================
--- gnunet/src/testbed/testbed_api_peers.h 2012-09-09 13:41:00 UTC (rev
23722)
+++ gnunet/src/testbed/testbed_api_peers.h 2012-09-09 13:46:21 UTC (rev
23723)
@@ -122,6 +122,29 @@
/**
+ * Data for OperationType OP_PEER_START and OP_PEER_STOP
+ */
+struct PeerEventData
+{
+ /**
+ * The handle of the peer to start
+ */
+ struct GNUNET_TESTBED_Peer *peer;
+
+ /**
+ * The Peer churn callback to call when this operation is completed
+ */
+ GNUNET_TESTBED_PeerChurnCallback pcc;
+
+ /**
+ * Closure for the above callback
+ */
+ void *pcc_cls;
+
+};
+
+
+/**
* Data for the OperationType OP_PEER_DESTROY;
*/
struct PeerDestroyData
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r23723 - gnunet/src/testbed,
gnunet <=