refined overlay connect and extended test case
[oweals/gnunet.git] / src / testbed / testbed_api_peers.h
1 /*
2       This file is part of GNUnet
3       (C) 2008--2012 Christian Grothoff (and other contributing authors)
4
5       GNUnet is free software; you can redistribute it and/or modify
6       it under the terms of the GNU General Public License as published
7       by the Free Software Foundation; either version 3, or (at your
8       option) any later version.
9
10       GNUnet is distributed in the hope that it will be useful, but
11       WITHOUT ANY WARRANTY; without even the implied warranty of
12       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13       General Public License for more details.
14
15       You should have received a copy of the GNU General Public License
16       along with GNUnet; see the file COPYING.  If not, write to the
17       Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18       Boston, MA 02111-1307, USA.
19  */
20
21 /**
22  * @file testbed/testbed_api_peers.h
23  * @brief internal API to access the 'peers' subsystem
24  * @author Christian Grothoff
25  * @author Sree Harsha Totakura
26  */
27
28 #ifndef NEW_TESTING_API_PEERS_H
29 #define NEW_TESTING_API_PEERS_H
30
31 #include "gnunet_testbed_service.h"
32 #include "gnunet_helper_lib.h"
33
34
35 /**
36  * Enumeration of possible states a peer could be in
37  */
38 enum PeerState 
39   {
40     /**
41      * State to signify that this peer is invalid
42      */
43     PS_INVALID,
44
45     /**
46      * The peer has been created
47      */
48     PS_CREATED,
49     
50     /**
51      * The peer is running
52      */
53     PS_STARTED,
54
55     /**
56      * The peer is stopped
57      */
58     PS_STOPPED,    
59   };
60
61
62 /**
63  * A peer controlled by the testing framework.  A peer runs
64  * at a particular host.
65  */ 
66 struct GNUNET_TESTBED_Peer
67 {
68   /**
69    * Our controller context (not necessarily the controller
70    * that is responsible for starting/running the peer!).
71    */
72   struct GNUNET_TESTBED_Controller *controller;
73                            
74   /**
75    * Which host does this peer run on?
76    */
77   struct GNUNET_TESTBED_Host *host;
78
79   /**
80    * Globally unique ID of the peer.
81    */
82   uint32_t unique_id;
83
84   /**
85    * Peer's state
86    */
87   enum PeerState state;
88 };
89
90
91 /**
92  * Data for the OperationType OP_PEER_CREATE
93  */
94 struct PeerCreateData
95 {
96   /**
97    * The host where the peer has to be created
98    */
99   struct GNUNET_TESTBED_Host *host;
100
101   /**
102    * The template configuration of the peer
103    */
104   const struct GNUNET_CONFIGURATION_Handle *cfg;
105     
106   /**
107    * The call back to call when we receive peer create success message
108    */
109   GNUNET_TESTBED_PeerCreateCallback cb;
110   
111   /**
112    * The closure for the above callback
113    */
114   void *cls;
115
116   /**
117    * The peer structure to return when we get success message
118    */
119   struct GNUNET_TESTBED_Peer *peer;
120
121 };
122
123
124 /**
125  * Data for the OperationType OP_PEER_DESTROY;
126  */
127 struct PeerDestroyData
128 {
129   /**
130    * The peer structure
131    */
132   struct GNUNET_TESTBED_Peer *peer;
133
134   //PEERDESTROYDATA
135 };
136
137
138 /**
139  * Data for the OperationType OP_PEER_INFO
140  */
141 struct PeerInfoData
142 {
143   /**
144    * The peer whose information has been requested
145    */
146   struct GNUNET_TESTBED_Peer *peer;
147   
148   /**
149    * The type of peer information requested
150    */
151   enum GNUNET_TESTBED_PeerInformationType pit;
152 };
153
154
155 /**
156  * Data for the OperationType OP_PEER_INFO
157  */
158 struct PeerInfoData2
159 {
160   /**
161    * The type of peer information requested
162    */
163   enum GNUNET_TESTBED_PeerInformationType pit;
164
165   /**
166    * The data from reply
167    */
168   union
169   {
170     /**
171      * Configuration handle
172      */
173     struct GNUNET_CONFIGURATION_Handle *cfg;
174
175     /**
176      * Peer Identity
177      */
178     struct GNUNET_PeerIdentity *peer_identity;
179   } details;
180 };
181
182
183 /**
184  * Data structure for OperationType OP_OVERLAY_CONNECT
185  */
186 struct OverlayConnectData
187 {
188   /**
189    * Peer A to connect to peer B
190    */
191   struct GNUNET_TESTBED_Peer *p1;
192
193   /**
194    * Peer B
195    */
196   struct GNUNET_TESTBED_Peer *p2;
197
198 };
199
200
201
202 /**
203  * Create the given peer at the specified host using the given
204  * controller.  If the given controller is not running on the target
205  * host, it should find or create a controller at the target host and
206  * delegate creating the peer.  Explicit delegation paths can be setup
207  * using 'GNUNET_TESTBED_controller_link'.  If no explicit delegation
208  * path exists, a direct link with a subordinate controller is setup
209  * for the first delegated peer to a particular host; the subordinate
210  * controller is then destroyed once the last peer that was delegated
211  * to the remote host is stopped.  This function is used in particular
212  * if some other controller has already assigned a unique ID to the
213  * peer.
214  *
215  * Creating the peer only creates the handle to manipulate and further
216  * configure the peer; use "GNUNET_TESTBED_peer_start" and
217  * "GNUNET_TESTBED_peer_stop" to actually start/stop the peer's
218  * processes.
219  *
220  * Note that the given configuration will be adjusted by the
221  * controller to avoid port/path conflicts with other peers.
222  * The "final" configuration can be obtained using
223  * 'GNUNET_TESTBED_peer_get_information'.
224  *
225  * @param unique_id unique ID for this peer
226  * @param controller controller process to use
227  * @param host host to run the peer on
228  * @param cfg configuration to use for the peer
229  * @param cb the callback to call when the peer has been created
230  * @param cls the closure to the above callback
231  * @return the operation handle
232  */
233 struct GNUNET_TESTBED_Operation *
234 GNUNET_TESTBED_peer_create_with_id_ (uint32_t unique_id,
235                                      struct GNUNET_TESTBED_Controller *controller,
236                                      struct GNUNET_TESTBED_Host *host,
237                                      const struct GNUNET_CONFIGURATION_Handle *cfg,
238                                      GNUNET_TESTBED_PeerCreateCallback cb,
239                                      void *cls);
240
241
242
243 #endif
244 /* end of testbed_api_peers.h */