aboutsummaryrefslogtreecommitdiff
path: root/src/testbed/gnunet-service-testbed.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/testbed/gnunet-service-testbed.c')
-rw-r--r--src/testbed/gnunet-service-testbed.c56
1 files changed, 54 insertions, 2 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