diff options
author | Sree Harsha Totakura <totakura@in.tum.de> | 2012-07-18 21:55:13 +0000 |
---|---|---|
committer | Sree Harsha Totakura <totakura@in.tum.de> | 2012-07-18 21:55:13 +0000 |
commit | effc873310f9717c7e8d098e6b8bad147b0ebba4 (patch) | |
tree | 27531349401d06c7203949d793458d47cac867e6 | |
parent | f2c25595325c2a9802bf39e393104676621c24e5 (diff) | |
download | gnunet-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.c | 51 | ||||
-rw-r--r-- | src/testbed/testbed_api.h | 5 | ||||
-rw-r--r-- | src/testbed/testbed_api_peers.c | 20 |
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 | */ | ||
1336 | static void | ||
1337 | handle_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) | |||
189 | struct GNUNET_TESTBED_Operation * | 188 | struct GNUNET_TESTBED_Operation * |
190 | GNUNET_TESTBED_peer_stop (struct GNUNET_TESTBED_Peer *peer) | 189 | GNUNET_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 | ||