-avoid side-effect in assertion
[oweals/gnunet.git] / src / testbed / testbed.h
index 9c2103f3f1b282761772118298159d9a69fb3e45..904e7acbaa1a568df40d8e03babcb5d224ce0226 100644 (file)
@@ -1,6 +1,6 @@
 /*
       This file is part of GNUnet
-      (C) 2012 Christian Grothoff (and other contributing authors)
+      (C) 2008--2013 Christian Grothoff (and other contributing authors)
 
       GNUnet is free software; you can redistribute it and/or modify
       it under the terms of the GNU General Public License as published
 
 #include "gnunet_util_lib.h"
 
-
+GNUNET_NETWORK_STRUCT_BEGIN
 /**
  * Initial message from a client to a testing control service.
  */
-struct GNUNET_TESTBED_InitMessage
+    struct GNUNET_TESTBED_InitMessage
 {
 
   /**
@@ -66,7 +66,7 @@ struct GNUNET_TESTBED_AddHostMessage
 {
 
   /**
-   * Type is GNUNET_MESSAGE_TYPE_TESTBED_ADDHOST
+   * Type is GNUNET_MESSAGE_TYPE_TESTBED_ADD_HOST
    */
   struct GNUNET_MessageHeader header;
 
@@ -85,11 +85,26 @@ struct GNUNET_TESTBED_AddHostMessage
    * 0 to use no user name; otherwise 'strlen (username)',
    * excluding 0-termination!
    */
-  uint16_t user_name_length GNUNET_PACKED;
+  uint16_t username_length GNUNET_PACKED;
 
-  /* followed by 0-terminated user name */
+  /**
+   * Number of bytes in the host name (excluding 0-termination) that follows the
+   * user name; cannot be 0
+   */
+  uint16_t hostname_length GNUNET_PACKED;
 
-  /* followed by 0-terminated host name */
+  /**
+   * The length of the uncompressed configuration
+   */
+  uint16_t config_size GNUNET_PACKED;
+
+  /* followed by non 0-terminated user name */
+
+  /* followed by non 0-terminated host name */
+
+  /* followed by gzip compressed configuration to start or connect to a
+     controller on this host.  While starting the controller this configration
+     is used as a template */
 
 };
 
@@ -103,7 +118,7 @@ struct GNUNET_TESTBED_HostConfirmedMessage
 {
 
   /**
-   * Type is GNUNET_MESSAGE_TYPE_TESTBED_ADDHOSTSUCCESS
+   * Type is GNUNET_MESSAGE_TYPE_TESTBED_ADD_HOST_SUCCESS
    */
   struct GNUNET_MessageHeader header;
 
@@ -113,81 +128,80 @@ struct GNUNET_TESTBED_HostConfirmedMessage
   uint32_t host_id GNUNET_PACKED;
 
   /* followed by the 0-terminated error message (on failure)
-   * (typical errors include failure to login and
-   * host-id already in use) */
+   * (typical errors include host-id already in use) */
 
 };
 
 
 /**
- * Message to testing service: configure service sharing
- * at a host.
+ * Client notifies controller that it should delegate
+ * requests for a particular client to a particular
+ * sub-controller.
  */
-struct GNUNET_TESTBED_ConfigureSharedServiceMessage
+struct GNUNET_TESTBED_ControllerLinkRequest
 {
 
   /**
-   * Type is GNUNET_MESSAGE_TYPE_TESTBED_SERVICESHARE
+   * Type is GNUNET_MESSAGE_TYPE_TESTBED_LINK_CONTROLLERS
    */
   struct GNUNET_MessageHeader header;
 
   /**
-   * Host that is being configured.
+   * For which host should requests be delegated? NBO.
    */
-  uint32_t host_id GNUNET_PACKED;
+  uint32_t delegated_host_id GNUNET_PACKED;
+
+  /**
+   * The id of the operation which created this message
+   */
+  uint64_t operation_id GNUNET_PACKED;
 
   /**
-   * Number of peers that should share a service instance;
-   * 1 for no sharing, 0 to forcefully disable the service.
+   * Which host is responsible for managing the delegation? NBO
    */
-  uint32_t num_peers GNUNET_PACKED;
+  uint32_t slave_host_id GNUNET_PACKED;
 
-  /* followed by 0-terminated name of the service */
+  /**
+   * Set to 1 if the receiving controller is the master controller for
+   * the slave host (and thus responsible for starting it?). 0 if not
+   */
+  uint8_t is_subordinate;
 
 };
 
 
 /**
- * Client notifies controller that it should delegate
- * requests for a particular client to a particular
- * sub-controller.
+ * Response message for ControllerLinkRequest message
  */
-struct GNUNET_TESTBED_ControllerLinkMessage
+struct GNUNET_TESTBED_ControllerLinkResponse
 {
-
+  
   /**
-   * Type is GNUNET_MESSAGE_TYPE_TESTBED_LCONTROLLERS
+   * Type is GNUNET_MESSAGE_TYPE_TESTBED_LINK_CONTROLLERS_RESULT
    */
   struct GNUNET_MessageHeader header;
 
   /**
-   * For which host should requests be delegated? NBO.
+   * The size of the compressed configuration. Can be ZERO if the controller is
+   * not started (depends on the ControllerLinkRequest). NBO.
    */
-  uint32_t delegated_host_id GNUNET_PACKED;
-
-  /**
-   * The id of the operation which created this message
-   */
-  uint64_t operation_id GNUNET_PACKED;
+  uint16_t config_size GNUNET_PACKED;
 
   /**
-   * Which host is responsible for managing the delegation? NBO
+   * Set to GNUNET_YES to signify SUCCESS; GNUNET_NO to signify failure
    */
-  uint32_t slave_host_id GNUNET_PACKED;
+  uint16_t success GNUNET_PACKED;
 
   /**
-   * The size of the uncompressed configuration
+   * The id of the operation which created this message. NBO
    */
-  uint16_t config_size GNUNET_PACKED;
+  uint64_t operation_id GNUNET_PACKED;
 
-  /**
-   * Set to 1 if the receiving controller is the master controller for
-   * the slave host (and thus responsible for starting it?). 0 if not
-   */
-  uint8_t is_subordinate;
+  /* If controller linking is successful and configuration is present, then here
+   * comes the serialized gzip configuration with which the controller is
+   * running at the delegate host */
 
-  /* followed by serialized slave configuration;
-   * gzip'ed configuration file in INI format */
+  /* In case of failure, here comes the error message (without \0 termination)*/
 
 };
 
@@ -200,19 +214,19 @@ struct GNUNET_TESTBED_PeerCreateMessage
 {
 
   /**
-   * Type is GNUNET_MESSAGE_TYPE_TESTBED_CREATEPEER
+   * Type is GNUNET_MESSAGE_TYPE_TESTBED_CREATE_PEER
    */
   struct GNUNET_MessageHeader header;
 
   /**
-   * Unique operation id
+   * On which host should the peer be started?
    */
-  uint64_t operation_id GNUNET_PACKED;
+  uint32_t host_id GNUNET_PACKED;
 
   /**
-   * On which host should the peer be started?
+   * Unique operation id
    */
-  uint32_t host_id GNUNET_PACKED;
+  uint64_t operation_id GNUNET_PACKED;
 
   /**
    * Unique ID for the peer.
@@ -222,7 +236,7 @@ struct GNUNET_TESTBED_PeerCreateMessage
   /**
    * Size of the uncompressed configuration
    */
-  uint32_t config_size GNUNET_PACKED;
+  uint16_t config_size GNUNET_PACKED;
 
   /* followed by serialized peer configuration;
    * gzip'ed configuration file in INI format */
@@ -238,7 +252,7 @@ struct GNUNET_TESTBED_PeerReconfigureMessage
 {
 
   /**
-   * Type is GNUNET_MESSAGE_TYPDE_TESTBED_PEERRECONF
+   * Type is GNUNET_MESSAGE_TYPE_TESTBED_RECONFIGURE_PEER
    */
   struct GNUNET_MessageHeader header;
 
@@ -252,6 +266,11 @@ struct GNUNET_TESTBED_PeerReconfigureMessage
    */
   uint64_t operation_id GNUNET_PACKED;
 
+  /**
+   * The length of the serialized configuration when uncompressed
+   */
+  uint16_t config_size GNUNET_PACKED;
+
   /* followed by serialized peer configuration;
    * gzip'ed configuration file in INI format */
 
@@ -266,7 +285,7 @@ struct GNUNET_TESTBED_PeerStartMessage
 {
 
   /**
-   * Type is GNUNET_MESSAGE_TYPE_TESTBED_STARTPEER
+   * Type is GNUNET_MESSAGE_TYPE_TESTBED_START_PEER
    */
   struct GNUNET_MessageHeader header;
 
@@ -291,7 +310,7 @@ struct GNUNET_TESTBED_PeerStopMessage
 {
 
   /**
-   * Type is GNUNET_MESSAGE_TYPE_TESTBED_STOPPEER
+   * Type is GNUNET_MESSAGE_TYPE_TESTBED_STOP_PEER
    */
   struct GNUNET_MessageHeader header;
 
@@ -316,7 +335,7 @@ struct GNUNET_TESTBED_PeerDestroyMessage
 {
 
   /**
-   * Type is GNUNET_MESSAGE_TYPE_TESTBED_DESTROYPEER
+   * Type is GNUNET_MESSAGE_TYPE_TESTBED_DESTROY_PEER
    */
   struct GNUNET_MessageHeader header;
 
@@ -341,7 +360,7 @@ struct GNUNET_TESTBED_ConfigureUnderlayLinkMessage
 {
 
   /**
-   * Type is GNUNET_MESSAGE_TYPE_TESTBED_CONFIGULLINK
+   * Type is GNUNET_MESSAGE_TYPE_TESTBED_CONFIGURE_UNDERLAY_LINK
    */
   struct GNUNET_MessageHeader header;
 
@@ -378,7 +397,7 @@ struct GNUNET_TESTBED_OverlayConnectMessage
 {
 
   /**
-   * Type is GNUNET_MESSAGE_TYPE_TESTBED_OLCONNECT
+   * Type is GNUNET_MESSAGE_TYPE_TESTBED_OVERLAY_CONNECT
    */
   struct GNUNET_MessageHeader header;
 
@@ -397,6 +416,45 @@ struct GNUNET_TESTBED_OverlayConnectMessage
    */
   uint32_t peer2 GNUNET_PACKED;
 
+  /**
+   * The ID of the host which runs peer2
+   */
+  uint32_t peer2_host_id GNUNET_PACKED;
+
+};
+
+
+/**
+ * Message sent from host controller of a peer(A) to the host controller of
+ * another peer(B) to request B to connect to A
+ */
+struct GNUNET_TESTBED_RemoteOverlayConnectMessage
+{
+  /**
+   * Type is GNUNET_MESSAGE_TYPE_TESTBED_REMOTE_OVERLAY_CONNECT
+   */
+  struct GNUNET_MessageHeader header;
+
+  /**
+   * The Unique ID of B
+   */
+  uint32_t peer GNUNET_PACKED;
+
+  /**
+   * The Operation ID that is used to identify this operation
+   */
+  uint64_t operation_id GNUNET_PACKED;
+
+  /**
+   * Identity of A
+   */
+  struct GNUNET_PeerIdentity peer_identity;
+
+  /**
+   * To be followed by the HELLO message of A
+   */
+  struct GNUNET_MessageHeader hello[0];
+
 };
 
 
@@ -407,7 +465,7 @@ struct GNUNET_TESTBED_PeerEventMessage
 {
 
   /**
-   * Type is GNUNET_MESSAGE_TYPE_TESTBED_PEEREVENT
+   * Type is GNUNET_MESSAGE_TYPE_TESTBED_PEER_EVENT
    */
   struct GNUNET_MessageHeader header;
 
@@ -442,7 +500,7 @@ struct GNUNET_TESTBED_ConnectionEventMessage
 {
 
   /**
-   * Type is GNUNET_MESSAGE_TYPE_TESTBED_PEERCONEVENT
+   * Type is GNUNET_MESSAGE_TYPE_TESTBED_PEER_CONNECT_EVENT
    */
   struct GNUNET_MessageHeader header;
 
@@ -477,7 +535,7 @@ struct GNUNET_TESTBED_OperationFailureEventMessage
 {
 
   /**
-   * Type is GNUNET_MESSAGE_TYPE_TESTBED_OPERATIONFAILEVENT
+   * Type is GNUNET_MESSAGE_TYPE_TESTBED_OPERATION_FAIL_EVENT
    */
   struct GNUNET_MessageHeader header;
 
@@ -504,7 +562,7 @@ struct GNUNET_TESTBED_PeerCreateSuccessEventMessage
 {
 
   /**
-   * Type is GNUNET_MESSAGE_TYPE_TESTBED_PEERCREATESUCCESS
+   * Type is GNUNET_MESSAGE_TYPE_TESTBED_CREATE_PEER_SUCCESS
    */
   struct GNUNET_MessageHeader header;
 
@@ -530,7 +588,7 @@ struct GNUNET_TESTBED_GenericOperationSuccessEventMessage
 {
 
   /**
-   * Type is GNUNET_MESSAGE_TYPE_TESTBED_GENERICOPSUCCESS
+   * Type is GNUNET_MESSAGE_TYPE_TESTBED_GENERIC_OPERATION_SUCCESS
    */
   struct GNUNET_MessageHeader header;
 
@@ -556,7 +614,7 @@ struct GNUNET_TESTBED_PeerGetConfigurationMessage
 {
 
   /**
-   * Type is GNUNET_MESSAGE_TYPE_TESTBED_GETPEERCONFIG
+   * Type is GNUNET_MESSAGE_TYPE_TESTBED_GET_PEER_CONFIGURATION
    */
   struct GNUNET_MessageHeader header;
 
@@ -580,7 +638,7 @@ struct GNUNET_TESTBED_PeerConfigurationInformationMessage
 {
 
   /**
-   * Type is GNUNET_MESSAGE_TYPE_TESTBED_PEERCONFIG
+   * Type is GNUNET_MESSAGE_TYPE_TESTBED_PEER_CONFIGURATION
    */
   struct GNUNET_MessageHeader header;
 
@@ -602,11 +660,114 @@ struct GNUNET_TESTBED_PeerConfigurationInformationMessage
   /**
    * The size of configuration when uncompressed
    */
-  uint16_t config_size;
+  uint16_t config_size GNUNET_PACKED;
+
+  /* followed by gzip-compressed configuration of the peer */
+
+};
+
+
+/**
+ * Message to request configuration of a slave controller
+ */
+struct GNUNET_TESTBED_SlaveGetConfigurationMessage
+{
+  /**
+   * Type is GNUNET_MESSAGE_TYPE_TESTBED_GET_SLAVE_CONFIGURATION
+   */
+  struct GNUNET_MessageHeader header;
+
+  /**
+   * The id of the slave host
+   */
+  uint32_t slave_id GNUNET_PACKED;
+
+  /**
+   * Operation ID
+   */
+  uint64_t operation_id GNUNET_PACKED;
+
+};
+
+
+/**
+ * Reply to GNUNET_MESSAGE_TYPE_TESTBED_GET_SLAVE_CONFIG message
+ */
+struct GNUNET_TESTBED_SlaveConfiguration
+{
+  /**
+   * Type is GNUNET_MESSAGE_TYPE_TESTBED_SLAVE_CONFIGURATION
+   */
+  struct GNUNET_MessageHeader header;
+
+  /**
+   * The id of the host where the slave is running
+   */
+  uint32_t slave_id GNUNET_PACKED;
+
+  /**
+   * Operation ID
+   */
+  uint64_t operation_id GNUNET_PACKED;
+
+  /**
+   * The size of the configuration when uncompressed
+   */
+  uint16_t config_size GNUNET_PACKED;
 
   /* followed by gzip-compressed configuration of the peer */
 
 };
 
 
+/**
+ * Shutdown peers message
+ */
+struct GNUNET_TESTBED_ShutdownPeersMessage
+{
+  /**
+   * Type is GNUNET_MESSAGE_TYPE_TESTBED_SHUTDOWN_PEERS
+   */
+  struct GNUNET_MessageHeader header;
+
+  /**
+   * Operation ID
+   */
+  uint64_t operation_id GNUNET_PACKED;
+};
+
+
+/**
+ * Message to start/stop services of a peer
+ */
+struct GNUNET_TESTBED_ManagePeerServiceMessage
+{
+  /**
+   * Type is GNUNET_MESSAGE_TYPE_TESTBED_SHUTDOWN_PEERS
+   */
+  struct GNUNET_MessageHeader header;
+
+  /**
+   * Unique ID of the peer whose service has to be managed.
+   */
+  uint32_t peer_id GNUNET_PACKED;
+
+  /**
+   * Operation ID
+   */
+  uint64_t operation_id GNUNET_PACKED;
+
+  /**
+   * set this to 1 to start the service; 0 to stop the service
+   */
+  uint8_t start;
+  
+  /**
+   * The NULL-terminated name of the service to start/stop follows here
+   */
+};
+
+
+GNUNET_NETWORK_STRUCT_END
 #endif
+/* end of testbed.h */