aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/testbed/gnunet-service-testbed.c3
-rw-r--r--src/testbed/gnunet-service-testbed_links.c20
-rw-r--r--src/testbed/testbed.h8
-rw-r--r--src/testbed/testbed_api.c198
4 files changed, 31 insertions, 198 deletions
diff --git a/src/testbed/gnunet-service-testbed.c b/src/testbed/gnunet-service-testbed.c
index 9c66634dc..3d4a54db3 100644
--- a/src/testbed/gnunet-service-testbed.c
+++ b/src/testbed/gnunet-service-testbed.c
@@ -929,7 +929,8 @@ testbed_run (void *cls, struct GNUNET_SERVER_Handle *server,
929 {&handle_configure_shared_service, NULL, 929 {&handle_configure_shared_service, NULL,
930 GNUNET_MESSAGE_TYPE_TESTBED_SHARE_SERVICE, 0}, 930 GNUNET_MESSAGE_TYPE_TESTBED_SHARE_SERVICE, 0},
931 {&GST_handle_link_controllers, NULL, 931 {&GST_handle_link_controllers, NULL,
932 GNUNET_MESSAGE_TYPE_TESTBED_LINK_CONTROLLERS, 0}, 932 GNUNET_MESSAGE_TYPE_TESTBED_LINK_CONTROLLERS,
933 sizeof (struct GNUNET_TESTBED_ControllerLinkRequest)},
933 {&GST_handle_peer_create, NULL, GNUNET_MESSAGE_TYPE_TESTBED_CREATE_PEER, 0}, 934 {&GST_handle_peer_create, NULL, GNUNET_MESSAGE_TYPE_TESTBED_CREATE_PEER, 0},
934 {&GST_handle_peer_destroy, NULL, GNUNET_MESSAGE_TYPE_TESTBED_DESTROY_PEER, 935 {&GST_handle_peer_destroy, NULL, GNUNET_MESSAGE_TYPE_TESTBED_DESTROY_PEER,
935 sizeof (struct GNUNET_TESTBED_PeerDestroyMessage)}, 936 sizeof (struct GNUNET_TESTBED_PeerDestroyMessage)},
diff --git a/src/testbed/gnunet-service-testbed_links.c b/src/testbed/gnunet-service-testbed_links.c
index 6ed57dd02..69cc5dddd 100644
--- a/src/testbed/gnunet-service-testbed_links.c
+++ b/src/testbed/gnunet-service-testbed_links.c
@@ -946,17 +946,15 @@ neighbour_connect_cb (void *cls, struct GNUNET_TESTBED_Controller *c)
946 */ 946 */
947void 947void
948GST_handle_link_controllers (void *cls, struct GNUNET_SERVER_Client *client, 948GST_handle_link_controllers (void *cls, struct GNUNET_SERVER_Client *client,
949 const struct GNUNET_MessageHeader *message) 949 const struct GNUNET_MessageHeader *message)
950{ 950{
951 const struct GNUNET_TESTBED_ControllerLinkRequest *msg; 951 const struct GNUNET_TESTBED_ControllerLinkRequest *msg;
952 struct GNUNET_CONFIGURATION_Handle *cfg;
953 struct LCFContextQueue *lcfq; 952 struct LCFContextQueue *lcfq;
954 struct Route *route; 953 struct Route *route;
955 struct Route *new_route; 954 struct Route *new_route;
956 uint64_t op_id; 955 uint64_t op_id;
957 uint32_t delegated_host_id; 956 uint32_t delegated_host_id;
958 uint32_t slave_host_id; 957 uint32_t slave_host_id;
959 uint16_t msize;
960 958
961 if (NULL == GST_context) 959 if (NULL == GST_context)
962 { 960 {
@@ -964,13 +962,6 @@ GST_handle_link_controllers (void *cls, struct GNUNET_SERVER_Client *client,
964 GNUNET_SERVER_receive_done (client, GNUNET_SYSERR); 962 GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
965 return; 963 return;
966 } 964 }
967 msize = ntohs (message->size);
968 if (sizeof (struct GNUNET_TESTBED_ControllerLinkRequest) >= msize)
969 {
970 GNUNET_break (0);
971 GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
972 return;
973 }
974 msg = (const struct GNUNET_TESTBED_ControllerLinkRequest *) message; 965 msg = (const struct GNUNET_TESTBED_ControllerLinkRequest *) message;
975 delegated_host_id = ntohl (msg->delegated_host_id); 966 delegated_host_id = ntohl (msg->delegated_host_id);
976 if (delegated_host_id == GST_context->host_id) 967 if (delegated_host_id == GST_context->host_id)
@@ -1003,15 +994,6 @@ GST_handle_link_controllers (void *cls, struct GNUNET_SERVER_Client *client,
1003 GNUNET_SERVER_receive_done (client, GNUNET_SYSERR); 994 GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
1004 return; 995 return;
1005 } 996 }
1006 cfg = GNUNET_TESTBED_extract_config_ (message); /* destroy cfg here or in lcfcontext */
1007 if (NULL == cfg)
1008 {
1009 GNUNET_break (0); /* Configuration parsing error */
1010 GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
1011 return;
1012 }
1013 GNUNET_CONFIGURATION_destroy (cfg);
1014 cfg = NULL;
1015 op_id = GNUNET_ntohll (msg->operation_id); 997 op_id = GNUNET_ntohll (msg->operation_id);
1016 if (slave_host_id == GST_context->host_id) /* Link from us */ 998 if (slave_host_id == GST_context->host_id) /* Link from us */
1017 { 999 {
diff --git a/src/testbed/testbed.h b/src/testbed/testbed.h
index 323f9c5cc..933e1b8ee 100644
--- a/src/testbed/testbed.h
+++ b/src/testbed/testbed.h
@@ -190,19 +190,11 @@ struct GNUNET_TESTBED_ControllerLinkRequest
190 uint32_t slave_host_id GNUNET_PACKED; 190 uint32_t slave_host_id GNUNET_PACKED;
191 191
192 /** 192 /**
193 * The size of the uncompressed configuration
194 */
195 uint16_t config_size GNUNET_PACKED;
196
197 /**
198 * Set to 1 if the receiving controller is the master controller for 193 * Set to 1 if the receiving controller is the master controller for
199 * the slave host (and thus responsible for starting it?). 0 if not 194 * the slave host (and thus responsible for starting it?). 0 if not
200 */ 195 */
201 uint8_t is_subordinate; 196 uint8_t is_subordinate;
202 197
203 /* followed by serialized slave configuration;
204 * gzip'ed configuration file in INI format */
205
206}; 198};
207 199
208 200
diff --git a/src/testbed/testbed_api.c b/src/testbed/testbed_api.c
index 7f1e3d8f7..869fa2fad 100644
--- a/src/testbed/testbed_api.c
+++ b/src/testbed/testbed_api.c
@@ -1516,113 +1516,6 @@ GNUNET_TESTBED_controller_disconnect (struct GNUNET_TESTBED_Controller
1516 1516
1517 1517
1518/** 1518/**
1519 * Same as the GNUNET_TESTBED_controller_link_2, but with ids for delegated host
1520 * and slave host
1521 *
1522 * @param op_cls the operation closure for the event which is generated to
1523 * signal success or failure of this operation
1524 * @param master handle to the master controller who creates the association
1525 * @param delegated_host_id id of the host to which requests should be delegated
1526 * @param slave_host_id id of the host which is used to run the slave controller
1527 * @param sxcfg serialized and compressed configuration
1528 * @param sxcfg_size the size sxcfg
1529 * @param scfg_size the size of uncompressed serialized configuration
1530 * @param is_subordinate GNUNET_YES if the controller at delegated_host should
1531 * be started by the slave controller; GNUNET_NO if the slave
1532 * controller has to connect to the already started delegated
1533 * controller via TCP/IP
1534 * @return the operation handle
1535 */
1536struct GNUNET_TESTBED_Operation *
1537GNUNET_TESTBED_controller_link_2_ (void *op_cls,
1538 struct GNUNET_TESTBED_Controller *master,
1539 uint32_t delegated_host_id,
1540 uint32_t slave_host_id, const char *sxcfg,
1541 size_t sxcfg_size, size_t scfg_size,
1542 int is_subordinate)
1543{
1544 struct OperationContext *opc;
1545 struct GNUNET_TESTBED_ControllerLinkRequest *msg;
1546 struct ControllerLinkData *data;
1547 uint16_t msg_size;
1548
1549 msg_size = sxcfg_size + sizeof (struct GNUNET_TESTBED_ControllerLinkRequest);
1550 msg = GNUNET_malloc (msg_size);
1551 msg->header.type = htons (GNUNET_MESSAGE_TYPE_TESTBED_LINK_CONTROLLERS);
1552 msg->header.size = htons (msg_size);
1553 msg->delegated_host_id = htonl (delegated_host_id);
1554 msg->slave_host_id = htonl (slave_host_id);
1555 msg->config_size = htons ((uint16_t) scfg_size);
1556 msg->is_subordinate = (GNUNET_YES == is_subordinate) ? 1 : 0;
1557 memcpy (&msg[1], sxcfg, sxcfg_size);
1558 data = GNUNET_malloc (sizeof (struct ControllerLinkData));
1559 data->msg = msg;
1560 data->host_id = delegated_host_id;
1561 opc = GNUNET_malloc (sizeof (struct OperationContext));
1562 opc->c = master;
1563 opc->data = data;
1564 opc->type = OP_LINK_CONTROLLERS;
1565 opc->id = GNUNET_TESTBED_get_next_op_id (opc->c);
1566 opc->state = OPC_STATE_INIT;
1567 opc->op_cls = op_cls;
1568 msg->operation_id = GNUNET_htonll (opc->id);
1569 opc->op =
1570 GNUNET_TESTBED_operation_create_ (opc, &opstart_link_controllers,
1571 &oprelease_link_controllers);
1572 GNUNET_TESTBED_operation_queue_insert_ (master->opq_parallel_operations,
1573 opc->op);
1574 GNUNET_TESTBED_operation_begin_wait_ (opc->op);
1575 return opc->op;
1576}
1577
1578
1579/**
1580 * Same as the GNUNET_TESTBED_controller_link, however expects configuration in
1581 * serialized and compressed
1582 *
1583 * @param op_cls the operation closure for the event which is generated to
1584 * signal success or failure of this operation
1585 * @param master handle to the master controller who creates the association
1586 * @param delegated_host requests to which host should be delegated; cannot be NULL
1587 * @param slave_host which host is used to run the slave controller; use NULL to
1588 * make the master controller connect to the delegated host
1589 * @param sxcfg serialized and compressed configuration
1590 * @param sxcfg_size the size sxcfg
1591 * @param scfg_size the size of uncompressed serialized configuration
1592 * @param is_subordinate GNUNET_YES if the controller at delegated_host should
1593 * be started by the slave controller; GNUNET_NO if the slave
1594 * controller has to connect to the already started delegated
1595 * controller via TCP/IP
1596 * @return the operation handle
1597 */
1598struct GNUNET_TESTBED_Operation *
1599GNUNET_TESTBED_controller_link_2 (void *op_cls,
1600 struct GNUNET_TESTBED_Controller *master,
1601 struct GNUNET_TESTBED_Host *delegated_host,
1602 struct GNUNET_TESTBED_Host *slave_host,
1603 const char *sxcfg, size_t sxcfg_size,
1604 size_t scfg_size, int is_subordinate)
1605{
1606 uint32_t delegated_host_id;
1607 uint32_t slave_host_id;
1608
1609 GNUNET_assert (GNUNET_YES ==
1610 GNUNET_TESTBED_is_host_registered_ (delegated_host, master));
1611 delegated_host_id = GNUNET_TESTBED_host_get_id_ (delegated_host);
1612 slave_host_id =
1613 GNUNET_TESTBED_host_get_id_ ((NULL !=
1614 slave_host) ? slave_host : master->host);
1615 if ((NULL != slave_host) && (0 != GNUNET_TESTBED_host_get_id_ (slave_host)))
1616 GNUNET_assert (GNUNET_YES ==
1617 GNUNET_TESTBED_is_host_registered_ (slave_host, master));
1618
1619 return GNUNET_TESTBED_controller_link_2_ (op_cls, master, delegated_host_id,
1620 slave_host_id, sxcfg, sxcfg_size,
1621 scfg_size, is_subordinate);
1622}
1623
1624
1625/**
1626 * Compresses given configuration using zlib compress 1519 * Compresses given configuration using zlib compress
1627 * 1520 *
1628 * @param config the serialized configuration 1521 * @param config the serialized configuration
@@ -1671,54 +1564,6 @@ GNUNET_TESTBED_compress_cfg_ (const struct GNUNET_CONFIGURATION_Handle *cfg,
1671 *size = size_; 1564 *size = size_;
1672 *xsize = xsize_; 1565 *xsize = xsize_;
1673 return xconfig; 1566 return xconfig;
1674}
1675
1676
1677/**
1678 * Same as the GNUNET_TESTBED_controller_link, but with ids for delegated host
1679 * and slave host
1680 *
1681 * @param op_cls the operation closure for the event which is generated to
1682 * signal success or failure of this operation
1683 * @param master handle to the master controller who creates the association
1684 * @param delegated_host_id id of the host to which requests should be
1685 * delegated; cannot be NULL
1686 * @param slave_host_id id of the host which should connect to controller
1687 * running on delegated host ; use NULL to make the master controller
1688 * connect to the delegated host
1689 * @param slave_cfg configuration to use for the slave controller
1690 * @param is_subordinate GNUNET_YES if the controller at delegated_host should
1691 * be started by the slave controller; GNUNET_NO if the slave
1692 * controller has to connect to the already started delegated
1693 * controller via TCP/IP
1694 * @return the operation handle
1695 */
1696struct GNUNET_TESTBED_Operation *
1697GNUNET_TESTBED_controller_link_ (void *op_cls,
1698 struct GNUNET_TESTBED_Controller *master,
1699 uint32_t delegated_host_id,
1700 uint32_t slave_host_id,
1701 const struct GNUNET_CONFIGURATION_Handle
1702 *slave_cfg, int is_subordinate)
1703{
1704 struct GNUNET_TESTBED_Operation *op;
1705 char *config;
1706 char *cconfig;
1707 size_t cc_size;
1708 size_t config_size;
1709
1710 config = GNUNET_CONFIGURATION_serialize (slave_cfg, &config_size);
1711 cc_size = GNUNET_TESTBED_compress_config_ (config, config_size, &cconfig);
1712 GNUNET_free (config);
1713 /* Configuration doesn't fit in 1 message */
1714 GNUNET_assert ((UINT16_MAX -
1715 sizeof (struct GNUNET_TESTBED_ControllerLinkRequest)) >=
1716 cc_size);
1717 op = GNUNET_TESTBED_controller_link_2_ (op_cls, master, delegated_host_id,
1718 slave_host_id, (const char *) cconfig,
1719 cc_size, config_size, is_subordinate);
1720 GNUNET_free (cconfig);
1721 return op;
1722} 1567}
1723 1568
1724 1569
@@ -1759,8 +1604,12 @@ GNUNET_TESTBED_controller_link (void *op_cls,
1759 const struct GNUNET_CONFIGURATION_Handle 1604 const struct GNUNET_CONFIGURATION_Handle
1760 *slave_cfg, int is_subordinate) 1605 *slave_cfg, int is_subordinate)
1761{ 1606{
1607 struct OperationContext *opc;
1608 struct GNUNET_TESTBED_ControllerLinkRequest *msg;
1609 struct ControllerLinkData *data;
1762 uint32_t slave_host_id; 1610 uint32_t slave_host_id;
1763 uint32_t delegated_host_id; 1611 uint32_t delegated_host_id;
1612 uint16_t msg_size;
1764 1613
1765 GNUNET_assert (GNUNET_YES == 1614 GNUNET_assert (GNUNET_YES ==
1766 GNUNET_TESTBED_is_host_registered_ (delegated_host, master)); 1615 GNUNET_TESTBED_is_host_registered_ (delegated_host, master));
@@ -1771,11 +1620,30 @@ GNUNET_TESTBED_controller_link (void *op_cls,
1771 if ((NULL != slave_host) && (0 != slave_host_id)) 1620 if ((NULL != slave_host) && (0 != slave_host_id))
1772 GNUNET_assert (GNUNET_YES == 1621 GNUNET_assert (GNUNET_YES ==
1773 GNUNET_TESTBED_is_host_registered_ (slave_host, master)); 1622 GNUNET_TESTBED_is_host_registered_ (slave_host, master));
1774 return GNUNET_TESTBED_controller_link_ (op_cls, master, delegated_host_id, 1623 msg_size = sizeof (struct GNUNET_TESTBED_ControllerLinkRequest);
1775 slave_host_id, 1624 msg = GNUNET_malloc (msg_size);
1776 GNUNET_TESTBED_host_get_cfg_ (delegated_host), 1625 msg->header.type = htons (GNUNET_MESSAGE_TYPE_TESTBED_LINK_CONTROLLERS);
1777 is_subordinate); 1626 msg->header.size = htons (msg_size);
1778 1627 msg->delegated_host_id = htonl (delegated_host_id);
1628 msg->slave_host_id = htonl (slave_host_id);
1629 msg->is_subordinate = (GNUNET_YES == is_subordinate) ? 1 : 0;data = GNUNET_malloc (sizeof (struct ControllerLinkData));
1630 data->msg = msg;
1631 data->host_id = delegated_host_id;
1632 opc = GNUNET_malloc (sizeof (struct OperationContext));
1633 opc->c = master;
1634 opc->data = data;
1635 opc->type = OP_LINK_CONTROLLERS;
1636 opc->id = GNUNET_TESTBED_get_next_op_id (opc->c);
1637 opc->state = OPC_STATE_INIT;
1638 opc->op_cls = op_cls;
1639 msg->operation_id = GNUNET_htonll (opc->id);
1640 opc->op =
1641 GNUNET_TESTBED_operation_create_ (opc, &opstart_link_controllers,
1642 &oprelease_link_controllers);
1643 GNUNET_TESTBED_operation_queue_insert_ (master->opq_parallel_operations,
1644 opc->op);
1645 GNUNET_TESTBED_operation_begin_wait_ (opc->op);
1646 return opc->op;
1779} 1647}
1780 1648
1781 1649
@@ -2009,16 +1877,6 @@ GNUNET_TESTBED_extract_config_ (const struct GNUNET_MessageHeader *msg)
2009 xdata = (const Bytef *) &imsg[1]; 1877 xdata = (const Bytef *) &imsg[1];
2010 } 1878 }
2011 break; 1879 break;
2012 case GNUNET_MESSAGE_TYPE_TESTBED_LINK_CONTROLLERS:
2013 {
2014 const struct GNUNET_TESTBED_ControllerLinkRequest *imsg;
2015 imsg = (const struct GNUNET_TESTBED_ControllerLinkRequest *) msg;
2016 data_len = ntohs (imsg->config_size);
2017 xdata_len = ntohs (imsg->header.size) - sizeof (const struct
2018 GNUNET_TESTBED_ControllerLinkRequest);
2019 xdata = (const Bytef *) &imsg[1];
2020 }
2021 break;
2022 default: 1880 default:
2023 GNUNET_assert (0); 1881 GNUNET_assert (0);
2024 } 1882 }