aboutsummaryrefslogtreecommitdiff
path: root/src/testbed
diff options
context:
space:
mode:
authorSree Harsha Totakura <totakura@in.tum.de>2012-07-22 18:34:25 +0000
committerSree Harsha Totakura <totakura@in.tum.de>2012-07-22 18:34:25 +0000
commit8ee0404fc1a3ef3fc75ba3b558f46f90dded4cfa (patch)
treedfd5c77163ad541301f9aef7a71fd1dd51a7332a /src/testbed
parent2539b823a55dca1e8fd760d86103591b56f6d153 (diff)
downloadgnunet-8ee0404fc1a3ef3fc75ba3b558f46f90dded4cfa.tar.gz
gnunet-8ee0404fc1a3ef3fc75ba3b558f46f90dded4cfa.zip
-get peer config & info
Diffstat (limited to 'src/testbed')
-rw-r--r--src/testbed/gnunet-service-testbed.c56
-rw-r--r--src/testbed/testbed.h11
-rw-r--r--src/testbed/testbed_api.h7
-rw-r--r--src/testbed/testbed_api_peers.c24
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 */
1399static void
1400handle_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 *
240GNUNET_TESTBED_peer_get_information (struct GNUNET_TESTBED_Peer *peer, 240GNUNET_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