aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSree Harsha Totakura <totakura@in.tum.de>2012-07-18 21:55:13 +0000
committerSree Harsha Totakura <totakura@in.tum.de>2012-07-18 21:55:13 +0000
commiteffc873310f9717c7e8d098e6b8bad147b0ebba4 (patch)
tree27531349401d06c7203949d793458d47cac867e6
parentf2c25595325c2a9802bf39e393104676621c24e5 (diff)
downloadgnunet-effc873310f9717c7e8d098e6b8bad147b0ebba4.tar.gz
gnunet-effc873310f9717c7e8d098e6b8bad147b0ebba4.zip
peer_stop and service handle for peerstop message: TODO: handler for peer stop success
-rw-r--r--src/testbed/gnunet-service-testbed.c51
-rw-r--r--src/testbed/testbed_api.h5
-rw-r--r--src/testbed/testbed_api_peers.c20
3 files changed, 67 insertions, 9 deletions
diff --git a/src/testbed/gnunet-service-testbed.c b/src/testbed/gnunet-service-testbed.c
index 3fef52354..ef4a5838f 100644
--- a/src/testbed/gnunet-service-testbed.c
+++ b/src/testbed/gnunet-service-testbed.c
@@ -1228,7 +1228,7 @@ handle_peer_create (void *cls,
1228 return; 1228 return;
1229 } 1229 }
1230 1230
1231 /* Forward the peer to other host */ 1231 /* FIXME: Forward the peer to other host */
1232 GNUNET_break (0); 1232 GNUNET_break (0);
1233 GNUNET_SERVER_receive_done (client, GNUNET_OK); 1233 GNUNET_SERVER_receive_done (client, GNUNET_OK);
1234} 1234}
@@ -1259,7 +1259,7 @@ handle_peer_destroy (void *cls,
1259 if ((peer_list_size <= peer_id) || (NULL == peer_list[peer_id])) 1259 if ((peer_list_size <= peer_id) || (NULL == peer_list[peer_id]))
1260 { 1260 {
1261 GNUNET_break (0); 1261 GNUNET_break (0);
1262 /* Reply with failure event message */ 1262 /* FIXME: Reply with failure event message or forward to slave controller */
1263 GNUNET_SERVER_receive_done (client, GNUNET_OK); 1263 GNUNET_SERVER_receive_done (client, GNUNET_OK);
1264 return; 1264 return;
1265 } 1265 }
@@ -1305,8 +1305,6 @@ handle_peer_start (void *cls,
1305 struct GNUNET_TESTBED_PeerCreateSuccessEventMessage *reply; 1305 struct GNUNET_TESTBED_PeerCreateSuccessEventMessage *reply;
1306 uint32_t peer_id; 1306 uint32_t peer_id;
1307 1307
1308 GNUNET_assert (ntohs (message->size)
1309 == sizeof (struct GNUNET_TESTBED_PeerStartMessage));
1310 msg = (const struct GNUNET_TESTBED_PeerStartMessage *) message; 1308 msg = (const struct GNUNET_TESTBED_PeerStartMessage *) message;
1311 peer_id = ntohl (msg->peer_id); 1309 peer_id = ntohl (msg->peer_id);
1312 if ((peer_id >= peer_list_size) 1310 if ((peer_id >= peer_list_size)
@@ -1314,7 +1312,7 @@ handle_peer_start (void *cls,
1314 || (GNUNET_OK != GNUNET_TESTING_peer_start (peer_list[peer_id]->peer))) 1312 || (GNUNET_OK != GNUNET_TESTING_peer_start (peer_list[peer_id]->peer)))
1315 { 1313 {
1316 GNUNET_break (0); 1314 GNUNET_break (0);
1317 /* FIXME: reply with failure message */ 1315 /* FIXME: reply with failure message or forward to slave controller */
1318 GNUNET_SERVER_receive_done (client, GNUNET_OK); 1316 GNUNET_SERVER_receive_done (client, GNUNET_OK);
1319 return; 1317 return;
1320 } 1318 }
@@ -1329,6 +1327,47 @@ handle_peer_start (void *cls,
1329 1327
1330 1328
1331/** 1329/**
1330 * Message handler for GNUNET_MESSAGE_TYPE_TESTBED_DESTROYPEER messages
1331 *
1332 * @param cls NULL
1333 * @param client identification of the client
1334 * @param message the actual message
1335 */
1336static void
1337handle_peer_stop (void *cls,
1338 struct GNUNET_SERVER_Client *client,
1339 const struct GNUNET_MessageHeader *message)
1340{
1341 const struct GNUNET_TESTBED_PeerStopMessage *msg;
1342 struct GNUNET_TESTBED_GenericOperationSuccessEventMessage *reply;
1343 uint32_t peer_id;
1344
1345 msg = (const struct GNUNET_TESTBED_PeerStopMessage *) message;
1346 peer_id = ntohl (msg->peer_id);
1347 if ((peer_id >= peer_list_size) || (NULL == peer_list[peer_id]))
1348 {
1349 GNUNET_break (0); /* FIXME: route to slave? */
1350 GNUNET_SERVER_receive_done (client, GNUNET_OK);
1351 return;
1352 }
1353 if (GNUNET_OK != GNUNET_TESTING_peer_stop (peer_list[peer_id]->peer))
1354 {
1355 /* FIXME: return FAILURE message */
1356 GNUNET_break (0);
1357 GNUNET_SERVER_receive_done (client, GNUNET_OK);
1358 return;
1359 }
1360 reply = GNUNET_malloc (sizeof (struct GNUNET_TESTBED_GenericOperationSuccessEventMessage));
1361 reply->header.type = htons (GNUNET_MESSAGE_TYPE_TESTBED_GENERICOPSUCCESS);
1362 reply->header.size = htons (sizeof (struct GNUNET_TESTBED_GenericOperationSuccessEventMessage));
1363 reply->operation_id = msg->operation_id;
1364 reply->event_type = htonl (GNUNET_TESTBED_ET_PEER_STOP);
1365 queue_message (client, &reply->header);
1366 GNUNET_SERVER_receive_done (client, GNUNET_OK);
1367}
1368
1369
1370/**
1332 * Iterator over hash map entries. 1371 * Iterator over hash map entries.
1333 * 1372 *
1334 * @param cls closure 1373 * @param cls closure
@@ -1494,6 +1533,8 @@ testbed_run (void *cls,
1494 sizeof (struct GNUNET_TESTBED_PeerDestroyMessage)}, 1533 sizeof (struct GNUNET_TESTBED_PeerDestroyMessage)},
1495 {&handle_peer_start, NULL, GNUNET_MESSAGE_TYPE_TESTBED_STARTPEER, 1534 {&handle_peer_start, NULL, GNUNET_MESSAGE_TYPE_TESTBED_STARTPEER,
1496 sizeof (struct GNUNET_TESTBED_PeerStartMessage)}, 1535 sizeof (struct GNUNET_TESTBED_PeerStartMessage)},
1536 {&handle_peer_stop, NULL, GNUNET_MESSAGE_TYPE_TESTBED_STOPPEER,
1537 sizeof (struct GNUNET_TESTBED_PeerStopMessage)},
1497 {NULL} 1538 {NULL}
1498 }; 1539 };
1499 1540
diff --git a/src/testbed/testbed_api.h b/src/testbed/testbed_api.h
index 994caae8b..a01ea1c29 100644
--- a/src/testbed/testbed_api.h
+++ b/src/testbed/testbed_api.h
@@ -39,6 +39,11 @@ enum OperationType
39 OP_PEER_START, 39 OP_PEER_START,
40 40
41 /** 41 /**
42 * Peer stop operation
43 */
44 OP_PEER_STOP,
45
46 /**
42 * Peer destroy operation 47 * Peer destroy operation
43 */ 48 */
44 OP_PEER_DESTROY 49 OP_PEER_DESTROY
diff --git a/src/testbed/testbed_api_peers.c b/src/testbed/testbed_api_peers.c
index 8574a0432..8beae14f9 100644
--- a/src/testbed/testbed_api_peers.c
+++ b/src/testbed/testbed_api_peers.c
@@ -172,8 +172,7 @@ GNUNET_TESTBED_peer_start (struct GNUNET_TESTBED_Peer *peer)
172 msg->operation_id = GNUNET_htonll (op->operation_id); 172 msg->operation_id = GNUNET_htonll (op->operation_id);
173 GNUNET_CONTAINER_DLL_insert_tail (peer->controller->op_head, 173 GNUNET_CONTAINER_DLL_insert_tail (peer->controller->op_head,
174 peer->controller->op_tail, op); 174 peer->controller->op_tail, op);
175 GNUNET_TESTBED_queue_message_ (peer->controller, 175 GNUNET_TESTBED_queue_message_ (peer->controller, &msg->header);
176 (struct GNUNET_MessageHeader *) msg);
177 return NULL; 176 return NULL;
178} 177}
179 178
@@ -189,8 +188,21 @@ GNUNET_TESTBED_peer_start (struct GNUNET_TESTBED_Peer *peer)
189struct GNUNET_TESTBED_Operation * 188struct GNUNET_TESTBED_Operation *
190GNUNET_TESTBED_peer_stop (struct GNUNET_TESTBED_Peer *peer) 189GNUNET_TESTBED_peer_stop (struct GNUNET_TESTBED_Peer *peer)
191{ 190{
192 // FIXME: stop locally or delegate... 191 struct GNUNET_TESTBED_Operation *op;
193 GNUNET_break (0); 192 struct GNUNET_TESTBED_PeerStopMessage *msg;
193
194 op = GNUNET_malloc (sizeof (struct GNUNET_TESTBED_Operation));
195 op->operation_id = peer->controller->operation_counter++;
196 op->type = OP_PEER_STOP;
197 op->data = peer;
198 msg = GNUNET_malloc (sizeof (struct GNUNET_TESTBED_PeerStopMessage));
199 msg->header.type = htons (GNUNET_MESSAGE_TYPE_TESTBED_STOPPEER);
200 msg->header.size = htons (sizeof (struct GNUNET_TESTBED_PeerStopMessage));
201 msg->peer_id = htonl (peer->unique_id);
202 msg->operation_id = GNUNET_htonll (op->operation_id);
203 GNUNET_CONTAINER_DLL_insert_tail (peer->controller->op_head,
204 peer->controller->op_tail, op);
205 GNUNET_TESTBED_queue_message_ (peer->controller, &msg->header);
194 return NULL; 206 return NULL;
195} 207}
196 208