c598d3ec27e401a8c99ff2f5e78d44b82cc1ef99
[oweals/gnunet.git] / src / testbed / testbed_api.h
1 /*
2       This file is part of GNUnet
3       (C) 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.h
23  * @brief Interface for functions internally exported from testbed_api.c
24  * @author Sree Harsha Totakura
25  */
26
27 #ifndef TESTBED_API_H
28 #define TESTBED_API_H
29
30
31 /**
32  * Enumeration of operations
33  */
34 enum OperationType
35   {
36     /**
37      * Peer destroy operation
38      */
39     OP_PEER_DESTROY
40   };
41
42
43 /**
44  * Testbed operation structure
45  */
46 struct GNUNET_TESTBED_Operation
47 {
48   /**
49    * next pointer for DLL
50    */
51   struct GNUNET_TESTBED_Operation *next;
52
53   /**
54    * prev pointer for DLL
55    */
56   struct GNUNET_TESTBED_Operation *prev;
57
58   /**
59    * The ID for the operation;
60    */
61   uint64_t operation_id;
62
63   /**
64    * The type of operation
65    */
66   enum OperationType type;
67
68   /**
69    * Data specific to OperationType
70    */
71   void *data;
72 };
73
74
75 /**
76  * The message queue for sending messages to the controller service
77  */
78 struct MessageQueue;
79
80
81 /**
82  * Structure for a controller link
83  */
84 struct ControllerLink;
85
86
87 /**
88  * Handle to interact with a GNUnet testbed controller.  Each
89  * controller has at least one master handle which is created when the
90  * controller is created; this master handle interacts with the
91  * controller process, destroying it destroys the controller (by
92  * closing stdin of the controller process).  Additionally,
93  * controllers can interact with each other (in a P2P fashion); those
94  * links are established via TCP/IP on the controller's service port.
95  */
96 struct GNUNET_TESTBED_Controller
97 {
98
99   /**
100    * The host where the controller is running
101    */
102   struct GNUNET_TESTBED_Host *host;
103
104   /**
105    * The controller callback
106    */
107   GNUNET_TESTBED_ControllerCallback cc;
108
109   /**
110    * The closure for controller callback
111    */
112   void *cc_cls;
113
114   /**
115    * The configuration to use while connecting to controller
116    */
117   struct GNUNET_CONFIGURATION_Handle *cfg;
118
119   /**
120    * The client connection handle to the controller service
121    */
122   struct GNUNET_CLIENT_Connection *client;
123   
124   /**
125    * The head of the message queue
126    */
127   struct MessageQueue *mq_head;
128
129   /**
130    * The tail of the message queue
131    */
132   struct MessageQueue *mq_tail;
133
134   /**
135    * The head of the ControllerLink list
136    */
137   struct ControllerLink *cl_head;
138
139   /**
140    * The tail of the ControllerLink list
141    */
142   struct ControllerLink *cl_tail;
143
144   /**
145    * The client transmit handle
146    */
147   struct GNUNET_CLIENT_TransmitHandle *th;
148
149   /**
150    * The host registration handle; NULL if no current registration requests are
151    * present 
152    */
153   struct GNUNET_TESTBED_HostRegistrationHandle *rh;
154
155   /**
156    * The head of the operation queue
157    */
158   struct GNUNET_TESTBED_Operation *op_head;
159   
160   /**
161    * The tail of the operation queue
162    */
163   struct GNUNET_TESTBED_Operation *op_tail;
164
165   /**
166    * The operation id counter. use current value and increment
167    */
168   uint64_t operation_counter;
169   
170   /**
171    * The controller event mask
172    */
173   uint64_t event_mask;
174
175   /**
176    * Did we start the receive loop yet?
177    */
178   int in_receive;
179
180   /**
181    * Did we create the host for this?
182    */
183   int aux_host;
184 };
185
186
187 /**
188  * Queues a message in send queue for sending to the service
189  *
190  * @param controller the handle to the controller
191  * @param msg the message to queue
192  */
193 void
194 GNUNET_TESTBED_queue_message (struct GNUNET_TESTBED_Controller *controller,
195                               struct GNUNET_MessageHeader *msg);
196
197
198 /**
199  * Compresses given configuration using zlib compress
200  *
201  * @param config the serialized configuration
202  * @param size the size of config
203  * @param xconfig will be set to the compressed configuration (memory is fresly
204  *          allocated) 
205  * @return the size of the xconfig
206  */
207 size_t
208 GNUNET_TESTBED_compress_config (const char *config, size_t size,
209                                 char **xconfig);
210
211
212 /**
213  * Adds an operation to the queue of operations
214  *
215  * @param op the operation to add
216  */
217 void
218 GNUNET_TESTBED_operation_add (struct GNUNET_TESTBED_Operation *op);
219
220 #endif