diff options
author | Sree Harsha Totakura <totakura@in.tum.de> | 2012-07-22 18:34:25 +0000 |
---|---|---|
committer | Sree Harsha Totakura <totakura@in.tum.de> | 2012-07-22 18:34:25 +0000 |
commit | 8ee0404fc1a3ef3fc75ba3b558f46f90dded4cfa (patch) | |
tree | dfd5c77163ad541301f9aef7a71fd1dd51a7332a /src/testbed | |
parent | 2539b823a55dca1e8fd760d86103591b56f6d153 (diff) | |
download | gnunet-8ee0404fc1a3ef3fc75ba3b558f46f90dded4cfa.tar.gz gnunet-8ee0404fc1a3ef3fc75ba3b558f46f90dded4cfa.zip |
-get peer config & info
Diffstat (limited to 'src/testbed')
-rw-r--r-- | src/testbed/gnunet-service-testbed.c | 56 | ||||
-rw-r--r-- | src/testbed/testbed.h | 11 | ||||
-rw-r--r-- | src/testbed/testbed_api.h | 7 | ||||
-rw-r--r-- | src/testbed/testbed_api_peers.c | 24 |
4 files changed, 88 insertions, 10 deletions
diff --git a/src/testbed/gnunet-service-testbed.c b/src/testbed/gnunet-service-testbed.c index f58757596..a9a1f1147 100644 --- a/src/testbed/gnunet-service-testbed.c +++ b/src/testbed/gnunet-service-testbed.c | |||
@@ -29,8 +29,9 @@ | |||
29 | #include "gnunet_server_lib.h" | 29 | #include "gnunet_server_lib.h" |
30 | #include <zlib.h> | 30 | #include <zlib.h> |
31 | 31 | ||
32 | #include "testbed.h" | ||
33 | #include "gnunet_testbed_service.h" | 32 | #include "gnunet_testbed_service.h" |
33 | #include "testbed.h" | ||
34 | #include "testbed_api.h" | ||
34 | #include "testbed_api_hosts.h" | 35 | #include "testbed_api_hosts.h" |
35 | #include "gnunet_testing_lib-new.h" | 36 | #include "gnunet_testing_lib-new.h" |
36 | 37 | ||
@@ -1389,6 +1390,55 @@ handle_peer_stop (void *cls, | |||
1389 | 1390 | ||
1390 | 1391 | ||
1391 | /** | 1392 | /** |
1393 | * Handler for GNUNET_MESSAGE_TYPE_TESTBED_GETPEERCONFIG messages | ||
1394 | * | ||
1395 | * @param cls NULL | ||
1396 | * @param client identification of the client | ||
1397 | * @param message the actual message | ||
1398 | */ | ||
1399 | static void | ||
1400 | handle_peer_get_config (void *cls, | ||
1401 | struct GNUNET_SERVER_Client *client, | ||
1402 | const struct GNUNET_MessageHeader *message) | ||
1403 | { | ||
1404 | const struct GNUNET_TESTBED_PeerGetConfigurationMessage *msg; | ||
1405 | struct GNUNET_TESTBED_PeerConfigurationInformationMessage *reply; | ||
1406 | char *config; | ||
1407 | char *xconfig; | ||
1408 | size_t c_size; | ||
1409 | size_t xc_size; | ||
1410 | uint32_t peer_id; | ||
1411 | uint16_t msize; | ||
1412 | |||
1413 | msg = (const struct GNUNET_TESTBED_PeerGetConfigurationMessage *) message; | ||
1414 | peer_id = ntohl (msg->peer_id); | ||
1415 | if ((peer_id >= peer_list_size) || (NULL == peer_list[peer_id])) | ||
1416 | { | ||
1417 | /* FIXME: return FAILURE message */ | ||
1418 | GNUNET_break (0); | ||
1419 | GNUNET_SERVER_receive_done (client, GNUNET_OK); | ||
1420 | } | ||
1421 | config = GNUNET_CONFIGURATION_serialize (peer_list[peer_id]->cfg, | ||
1422 | &c_size); | ||
1423 | xc_size = GNUNET_TESTBED_compress_config_ (config, c_size, &xconfig); | ||
1424 | GNUNET_free (config); | ||
1425 | msize = xc_size + sizeof (struct | ||
1426 | GNUNET_TESTBED_PeerConfigurationInformationMessage); | ||
1427 | reply = GNUNET_realloc (xconfig, msize); | ||
1428 | (void) memmove (&reply[1], reply, xc_size); | ||
1429 | reply->header.size = htons (msize); | ||
1430 | reply->header.type = htons (GNUNET_MESSAGE_TYPE_TESTBED_PEERCONFIG); | ||
1431 | reply->peer_id = msg->peer_id; | ||
1432 | reply->operation_id = msg->operation_id; | ||
1433 | GNUNET_TESTING_peer_get_identity (peer_list[peer_id]->peer, | ||
1434 | &reply->peer_identity); | ||
1435 | reply->config_size = htons ((uint16_t) c_size); | ||
1436 | queue_message (client, &reply->header); | ||
1437 | GNUNET_SERVER_receive_done (client, GNUNET_OK); | ||
1438 | } | ||
1439 | |||
1440 | |||
1441 | /** | ||
1392 | * Iterator over hash map entries. | 1442 | * Iterator over hash map entries. |
1393 | * | 1443 | * |
1394 | * @param cls closure | 1444 | * @param cls closure |
@@ -1557,7 +1607,9 @@ testbed_run (void *cls, | |||
1557 | {&handle_peer_start, NULL, GNUNET_MESSAGE_TYPE_TESTBED_STARTPEER, | 1607 | {&handle_peer_start, NULL, GNUNET_MESSAGE_TYPE_TESTBED_STARTPEER, |
1558 | sizeof (struct GNUNET_TESTBED_PeerStartMessage)}, | 1608 | sizeof (struct GNUNET_TESTBED_PeerStartMessage)}, |
1559 | {&handle_peer_stop, NULL, GNUNET_MESSAGE_TYPE_TESTBED_STOPPEER, | 1609 | {&handle_peer_stop, NULL, GNUNET_MESSAGE_TYPE_TESTBED_STOPPEER, |
1560 | sizeof (struct GNUNET_TESTBED_PeerStopMessage)}, | 1610 | sizeof (struct GNUNET_TESTBED_PeerStopMessage)}, |
1611 | {&handle_peer_get_config, NULL, GNUNET_MESSAGE_TYPE_TESTBED_GETPEERCONFIG, | ||
1612 | sizeof (struct GNUNET_TESTBED_PeerGetConfigurationMessage)}, | ||
1561 | {NULL} | 1613 | {NULL} |
1562 | }; | 1614 | }; |
1563 | 1615 | ||
diff --git a/src/testbed/testbed.h b/src/testbed/testbed.h index a2bb77e3d..47a3df5db 100644 --- a/src/testbed/testbed.h +++ b/src/testbed/testbed.h | |||
@@ -581,9 +581,9 @@ struct GNUNET_TESTBED_PeerConfigurationInformationMessage | |||
581 | struct GNUNET_MessageHeader header; | 581 | struct GNUNET_MessageHeader header; |
582 | 582 | ||
583 | /** | 583 | /** |
584 | * Peer number of the peer that was created. | 584 | * The id of the peer relevant to this information |
585 | */ | 585 | */ |
586 | uint32_t peer_number GNUNET_PACKED; | 586 | uint32_t peer_id GNUNET_PACKED; |
587 | 587 | ||
588 | /** | 588 | /** |
589 | * Operation ID of the operation that created this event. | 589 | * Operation ID of the operation that created this event. |
@@ -593,7 +593,12 @@ struct GNUNET_TESTBED_PeerConfigurationInformationMessage | |||
593 | /** | 593 | /** |
594 | * Identity of the peer. | 594 | * Identity of the peer. |
595 | */ | 595 | */ |
596 | struct GNUNET_PeerIdentity peer_id; | 596 | struct GNUNET_PeerIdentity peer_identity; |
597 | |||
598 | /** | ||
599 | * The size of configuration when uncompressed | ||
600 | */ | ||
601 | uint16_t config_size; | ||
597 | 602 | ||
598 | /* followed by gzip-compressed configuration of the peer */ | 603 | /* followed by gzip-compressed configuration of the peer */ |
599 | 604 | ||
diff --git a/src/testbed/testbed_api.h b/src/testbed/testbed_api.h index e83e21b52..fcfb5008c 100644 --- a/src/testbed/testbed_api.h +++ b/src/testbed/testbed_api.h | |||
@@ -51,7 +51,12 @@ enum OperationType | |||
51 | /** | 51 | /** |
52 | * Peer destroy operation | 52 | * Peer destroy operation |
53 | */ | 53 | */ |
54 | OP_PEER_DESTROY | 54 | OP_PEER_DESTROY, |
55 | |||
56 | /** | ||
57 | * Get peer information operation | ||
58 | */ | ||
59 | OP_PEER_INFO | ||
55 | }; | 60 | }; |
56 | 61 | ||
57 | 62 | ||
diff --git a/src/testbed/testbed_api_peers.c b/src/testbed/testbed_api_peers.c index 2abf4ade1..a1a8a76a3 100644 --- a/src/testbed/testbed_api_peers.c +++ b/src/testbed/testbed_api_peers.c | |||
@@ -225,7 +225,7 @@ GNUNET_TESTBED_peer_stop (struct GNUNET_TESTBED_Peer *peer) | |||
225 | GNUNET_CONTAINER_DLL_insert_tail (peer->controller->op_head, | 225 | GNUNET_CONTAINER_DLL_insert_tail (peer->controller->op_head, |
226 | peer->controller->op_tail, op); | 226 | peer->controller->op_tail, op); |
227 | GNUNET_TESTBED_queue_message_ (peer->controller, &msg->header); | 227 | GNUNET_TESTBED_queue_message_ (peer->controller, &msg->header); |
228 | return NULL; | 228 | return op; |
229 | } | 229 | } |
230 | 230 | ||
231 | 231 | ||
@@ -240,9 +240,25 @@ struct GNUNET_TESTBED_Operation * | |||
240 | GNUNET_TESTBED_peer_get_information (struct GNUNET_TESTBED_Peer *peer, | 240 | GNUNET_TESTBED_peer_get_information (struct GNUNET_TESTBED_Peer *peer, |
241 | enum GNUNET_TESTBED_PeerInformationType pit) | 241 | enum GNUNET_TESTBED_PeerInformationType pit) |
242 | { | 242 | { |
243 | // FIXME: handle locally or delegate... | 243 | struct GNUNET_TESTBED_PeerGetConfigurationMessage *msg; |
244 | GNUNET_break (0); | 244 | struct GNUNET_TESTBED_Operation *op; |
245 | return NULL; | 245 | |
246 | GNUNET_assert (GNUNET_TESTBED_PIT_GENERIC != pit); | ||
247 | op = GNUNET_malloc (sizeof (struct GNUNET_TESTBED_Operation)); | ||
248 | op->type = OP_PEER_INFO; | ||
249 | op->operation_id = peer->controller->operation_counter++; | ||
250 | op->data = peer; | ||
251 | msg = GNUNET_malloc (sizeof (struct | ||
252 | GNUNET_TESTBED_PeerGetConfigurationMessage)); | ||
253 | msg->header.size = htons | ||
254 | (sizeof (struct GNUNET_TESTBED_PeerGetConfigurationMessage)); | ||
255 | msg->header.type = htons (GNUNET_MESSAGE_TYPE_TESTBED_GETPEERCONFIG); | ||
256 | msg->peer_id = htonl (peer->unique_id); | ||
257 | msg->operation_id = GNUNET_htonll (op->operation_id); | ||
258 | GNUNET_CONTAINER_DLL_insert_tail (peer->controller->op_head, | ||
259 | peer->controller->op_tail, op); | ||
260 | GNUNET_TESTBED_queue_message_ (peer->controller, &msg->header); | ||
261 | return op; | ||
246 | } | 262 | } |
247 | 263 | ||
248 | 264 | ||