X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Ftestbed%2Ftestbed_api_peers.h;h=50fb29bf6adc3e40712d7abff1fdc2df05adf133;hb=a900b29ddaa9ea46c731b054b5e3ef3e725b95a8;hp=17db0d3b44f8f67b8274b3bce2189861755a7aef;hpb=c889aa7d68b052637ba7ddf6d4d2606214670ca1;p=oweals%2Fgnunet.git diff --git a/src/testbed/testbed_api_peers.h b/src/testbed/testbed_api_peers.h index 17db0d3b4..50fb29bf6 100644 --- a/src/testbed/testbed_api_peers.h +++ b/src/testbed/testbed_api_peers.h @@ -1,6 +1,6 @@ /* This file is part of GNUnet - (C) 2008--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 @@ -35,42 +35,52 @@ /** * Enumeration of possible states a peer could be in */ -enum PeerState - { +enum PeerState +{ /** * State to signify that this peer is invalid */ - PS_INVALID, + PS_INVALID, /** * The peer has been created */ - PS_CREATED, - + PS_CREATED, + /** * The peer is running */ - PS_STARTED, + PS_STARTED, /** * The peer is stopped */ - PS_STOPPED, - }; + PS_STOPPED, +}; /** * A peer controlled by the testing framework. A peer runs * at a particular host. - */ + */ struct GNUNET_TESTBED_Peer { + /** + * peer list DLL + */ + struct GNUNET_TESTBED_Peer *next; + + /** + * peer list DLL + */ + struct GNUNET_TESTBED_Peer *prev; + /** * Our controller context (not necessarily the controller * that is responsible for starting/running the peer!). */ struct GNUNET_TESTBED_Controller *controller; - + /** * Which host does this peer run on? */ @@ -102,12 +112,12 @@ struct PeerCreateData * The template configuration of the peer */ const struct GNUNET_CONFIGURATION_Handle *cfg; - + /** * The call back to call when we receive peer create success message */ GNUNET_TESTBED_PeerCreateCallback cb; - + /** * The closure for the above callback */ @@ -121,6 +131,29 @@ struct PeerCreateData }; +/** + * Data for OperationType OP_PEER_START and OP_PEER_STOP + */ +struct PeerEventData +{ + /** + * The handle of the peer to start + */ + struct GNUNET_TESTBED_Peer *peer; + + /** + * The Peer churn callback to call when this operation is completed + */ + GNUNET_TESTBED_PeerChurnCallback pcc; + + /** + * Closure for the above callback + */ + void *pcc_cls; + +}; + + /** * Data for the OperationType OP_PEER_DESTROY; */ @@ -144,7 +177,17 @@ struct PeerInfoData * The peer whose information has been requested */ struct GNUNET_TESTBED_Peer *peer; - + + /** + * The Peer info callback to call when this operation has completed + */ + GNUNET_TESTBED_PeerInfoCallback cb; + + /** + * The closure for peer info callback + */ + void *cb_cls; + /** * The type of peer information requested */ @@ -153,30 +196,24 @@ struct PeerInfoData /** - * Data for the OperationType OP_PEER_INFO + * Data for the operations of type OP_PEER_RECONFIGURE */ -struct PeerInfoData2 +struct PeerReconfigureData { /** - * The type of peer information requested + * The peer whose information has been requested */ - enum GNUNET_TESTBED_PeerInformationType pit; + struct GNUNET_TESTBED_Peer *peer; /** - * The data from reply + * The serialized new configuration template */ - union - { - /** - * Configuration handle - */ - struct GNUNET_CONFIGURATION_Handle *cfg; + char *config; - /** - * Peer Identity - */ - struct GNUNET_PeerIdentity *peer_identity; - } details; + /** + * the size of the serialized configuration + */ + uint16_t cfg_size; }; @@ -185,6 +222,7 @@ struct PeerInfoData2 */ struct OverlayConnectData { + /** * Peer A to connect to peer B */ @@ -195,50 +233,93 @@ struct OverlayConnectData */ struct GNUNET_TESTBED_Peer *p2; + /** + * The operation completion callback to call once this operation is done + */ + GNUNET_TESTBED_OperationCompletionCallback cb; + + /** + * The closure for the above callback + */ + void *cb_cls; + + /** + * OperationContext for forwarded operations generated when peer1's controller doesn't have the + * configuration of peer2's controller for linking laterally to attemp an + * overlay connection between peer 1 and peer 2. + */ + struct OperationContext *sub_opc; + + /** + * The starting time of this operation + */ + struct GNUNET_TIME_Absolute tstart; + + /** + * Has this operation failed + */ + int failed; + + /** + * The timing slot index for this operation + */ + unsigned int tslot_index; + }; +struct ManageServiceData { + GNUNET_TESTBED_OperationCompletionCallback cb; + + void *cb_cls; + + struct GNUNET_TESTBED_Peer *peer; + + char *service_name; + + unsigned int start; + + uint16_t msize; + +}; + /** - * Create the given peer at the specified host using the given - * controller. If the given controller is not running on the target - * host, it should find or create a controller at the target host and - * delegate creating the peer. Explicit delegation paths can be setup - * using 'GNUNET_TESTBED_controller_link'. If no explicit delegation - * path exists, a direct link with a subordinate controller is setup - * for the first delegated peer to a particular host; the subordinate - * controller is then destroyed once the last peer that was delegated - * to the remote host is stopped. This function is used in particular - * if some other controller has already assigned a unique ID to the - * peer. + * Generate PeerGetConfigurationMessage * - * Creating the peer only creates the handle to manipulate and further - * configure the peer; use "GNUNET_TESTBED_peer_start" and - * "GNUNET_TESTBED_peer_stop" to actually start/stop the peer's - * processes. + * @param peer_id the id of the peer whose information we have to get + * @param operation_id the ip of the operation that should be represented in + * the message + * @return the PeerGetConfigurationMessage + */ +struct GNUNET_TESTBED_PeerGetConfigurationMessage * +GNUNET_TESTBED_generate_peergetconfig_msg_ (uint32_t peer_id, + uint64_t operation_id); + + +/** + * Adds a peer to the peer list * - * Note that the given configuration will be adjusted by the - * controller to avoid port/path conflicts with other peers. - * The "final" configuration can be obtained using - * 'GNUNET_TESTBED_peer_get_information'. + * @param peer the peer to add to the peer list + */ +void +GNUNET_TESTBED_peer_register_ (struct GNUNET_TESTBED_Peer *peer); + + +/** + * Removes a peer from the peer list * - * @param unique_id unique ID for this peer - * @param controller controller process to use - * @param host host to run the peer on - * @param cfg configuration to use for the peer - * @param cb the callback to call when the peer has been created - * @param cls the closure to the above callback - * @return the operation handle + * @param peer the peer to remove */ -struct GNUNET_TESTBED_Operation * -GNUNET_TESTBED_peer_create_with_id_ (uint32_t unique_id, - struct GNUNET_TESTBED_Controller *controller, - struct GNUNET_TESTBED_Host *host, - const struct GNUNET_CONFIGURATION_Handle *cfg, - GNUNET_TESTBED_PeerCreateCallback cb, - void *cls); +void +GNUNET_TESTBED_peer_deregister_ (struct GNUNET_TESTBED_Peer *peer); +/** + * Frees all peers + */ +void +GNUNET_TESTBED_cleanup_peers_ (void); #endif /* end of testbed_api_peers.h */