More API function tests...
[oweals/gnunet.git] / src / set / set.h
1 /*
2      This file is part of GNUnet.
3      Copyright (C) 2012-2014 GNUnet e.V.
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., 51 Franklin Street, Fifth Floor,
18      Boston, MA 02110-1301, USA.
19 */
20 /**
21  * @file set/set.h
22  * @brief messages used for the set api
23  * @author Florian Dold
24  * @author Christian Grothoff
25  */
26 #ifndef SET_H
27 #define SET_H
28
29 #include "platform.h"
30 #include "gnunet_common.h"
31 #include "gnunet_set_service.h"
32
33 GNUNET_NETWORK_STRUCT_BEGIN
34
35 /**
36  * Message sent by the client to the service to ask starting
37  * a new set to perform operations with.  Includes the desired
38  * set operation type.
39  */
40 struct GNUNET_SET_CreateMessage
41 {
42   /**
43    * Type: #GNUNET_MESSAGE_TYPE_SET_CREATE
44    */
45   struct GNUNET_MessageHeader header;
46
47   /**
48    * Operation type, values of `enum GNUNET_SET_OperationType`
49    */
50   uint32_t operation GNUNET_PACKED;
51 };
52
53
54 /**
55  * Message sent by the client to the service to start listening for
56  * incoming requests to perform a certain type of set operation for a
57  * certain type of application.
58  */
59 struct GNUNET_SET_ListenMessage
60 {
61   /**
62    * Type: #GNUNET_MESSAGE_TYPE_SET_LISTEN
63    */
64   struct GNUNET_MessageHeader header;
65
66   /**
67    * Operation type, values of `enum GNUNET_SET_OperationType`
68    */
69   uint32_t operation GNUNET_PACKED;
70
71   /**
72    * application id
73    */
74   struct GNUNET_HashCode app_id;
75
76 };
77
78
79 /**
80  * Message sent by a listening client to the service to accept
81  * performing the operation with the other peer.
82  */
83 struct GNUNET_SET_AcceptMessage
84 {
85   /**
86    * Type: #GNUNET_MESSAGE_TYPE_SET_ACCEPT
87    */
88   struct GNUNET_MessageHeader header;
89
90   /**
91    * ID of the incoming request we want to accept.
92    */
93   uint32_t accept_reject_id GNUNET_PACKED;
94
95   /**
96    * Request ID to identify responses.
97    */
98   uint32_t request_id GNUNET_PACKED;
99
100   /**
101    * How should results be sent to us?
102    * See `enum GNUNET_SET_ResultMode`.
103    */
104   uint32_t result_mode GNUNET_PACKED;
105 };
106
107
108 /**
109  * Message sent by a listening client to the service to reject
110  * performing the operation with the other peer.
111  */
112 struct GNUNET_SET_RejectMessage
113 {
114   /**
115    * Type: #GNUNET_MESSAGE_TYPE_SET_REJECT
116    */
117   struct GNUNET_MessageHeader header;
118
119   /**
120    * ID of the incoming request we want to reject.
121    */
122   uint32_t accept_reject_id GNUNET_PACKED;
123
124 };
125
126
127 /**
128  * A request for an operation with another client.
129  */
130 struct GNUNET_SET_RequestMessage
131 {
132   /**
133    * Type: #GNUNET_MESSAGE_TYPE_SET_REQUEST.
134    */
135   struct GNUNET_MessageHeader header;
136
137   /**
138    * ID of the to identify the request when accepting or
139    * rejecting it.
140    */
141   uint32_t accept_id GNUNET_PACKED;
142
143   /**
144    * Identity of the requesting peer.
145    */
146   struct GNUNET_PeerIdentity peer_id;
147
148   /* rest: context message, that is, application-specific
149      message to convince listener to pick up */
150 };
151
152
153 /**
154  * Message sent by client to service to initiate a set operation as a
155  * client (not as listener).  A set (which determines the operation
156  * type) must already exist in association with this client.
157  */
158 struct GNUNET_SET_EvaluateMessage
159 {
160   /**
161    * Type: #GNUNET_MESSAGE_TYPE_SET_EVALUATE
162    */
163   struct GNUNET_MessageHeader header;
164
165   /**
166    * How should results be sent to us?
167    * See `enum GNUNET_SET_ResultMode`.
168    */
169   uint32_t result_mode GNUNET_PACKED;
170
171   /**
172    * Peer to evaluate the operation with
173    */
174   struct GNUNET_PeerIdentity target_peer;
175
176   /**
177    * Application id
178    */
179   struct GNUNET_HashCode app_id;
180
181   /**
182    * Id of our set to evaluate, chosen implicitly by the client when it
183    * calls #GNUNET_SET_commit().
184    */
185   uint32_t request_id GNUNET_PACKED;
186
187   /* rest: context message, that is, application-specific
188      message to convince listener to pick up */
189 };
190
191
192 /**
193  * Message sent by the service to the client to indicate an
194  * element that is removed (set intersection) or added
195  * (set union) or part of the final result, depending on
196  * options specified for the operation.
197  */
198 struct GNUNET_SET_ResultMessage
199 {
200   /**
201    * Type: #GNUNET_MESSAGE_TYPE_SET_RESULT
202    */
203   struct GNUNET_MessageHeader header;
204
205   /**
206    * id the result belongs to
207    */
208   uint32_t request_id GNUNET_PACKED;
209
210   /**
211    * Was the evaluation successful? Contains
212    * an `enum GNUNET_SET_Status` in NBO.
213    */
214   uint16_t result_status GNUNET_PACKED;
215
216   /**
217    * Type of the element attachted to the message, if any.
218    */
219   uint16_t element_type GNUNET_PACKED;
220
221   /* rest: the actual element */
222 };
223
224
225 /**
226  * Message sent by client to the service to add or remove
227  * an element to/from the set.
228  */
229 struct GNUNET_SET_ElementMessage
230 {
231   /**
232    * Type: #GNUNET_MESSAGE_TYPE_SET_ADD or
233    *       #GNUNET_MESSAGE_TYPE_SET_REMOVE
234    */
235   struct GNUNET_MessageHeader header;
236
237   /**
238    * Type of the element to add or remove.
239    */
240   uint16_t element_type GNUNET_PACKED;
241
242   /**
243    * For alignment, always zero.
244    */
245   uint16_t reserved GNUNET_PACKED;
246
247   /* rest: the actual element */
248 };
249
250
251 /**
252  * Sent to the service by the client
253  * in order to cancel a set operation.
254  */
255 struct GNUNET_SET_CancelMessage
256 {
257   /**
258    * Type: #GNUNET_MESSAGE_TYPE_SET_CANCEL
259    */
260   struct GNUNET_MessageHeader header;
261
262   /**
263    * ID of the request we want to cancel.
264    */
265   uint32_t request_id GNUNET_PACKED;
266 };
267
268
269 /**
270  * Set element transmitted by service to client in response to a set
271  * iteration request.
272  */
273 struct GNUNET_SET_IterResponseMessage
274 {
275   /**
276    * Type: #GNUNET_MESSAGE_TYPE_SET_ITER_ELEMENT
277    */
278   struct GNUNET_MessageHeader header;
279
280   /**
281    * To which set iteration does this reponse belong to?  First
282    * iteration (per client) has counter zero. Wraps around.
283    */
284   uint16_t iteration_id GNUNET_PACKED;
285
286   /**
287    * Type of the element attachted to the message,
288    * if any.
289    */
290   uint16_t element_type GNUNET_PACKED;
291
292   /* rest: element */
293 };
294
295
296 /**
297  * Client acknowledges receiving element in iteration.
298  */
299 struct GNUNET_SET_IterAckMessage
300 {
301   /**
302    * Type: #GNUNET_MESSAGE_TYPE_SET_ITER_ACK
303    */
304   struct GNUNET_MessageHeader header;
305
306   /**
307    * Non-zero if the service should continue sending elements.
308    */
309   uint32_t send_more;
310 };
311
312
313 /**
314  * Server responds to a lazy copy request.
315  */
316 struct GNUNET_SET_CopyLazyResponseMessage
317 {
318   /**
319    * Type: #GNUNET_MESSAGE_TYPE_SET_COPY_LAZY_RESPONSE
320    */
321   struct GNUNET_MessageHeader header;
322
323   /**
324    * Temporary name for the copied set.
325    */
326   uint32_t cookie;
327 };
328
329
330 /**
331  * Client connects to a lazily copied set.
332  */
333 struct GNUNET_SET_CopyLazyConnectMessage
334 {
335   /**
336    * Type: #GNUNET_MESSAGE_TYPE_SET_COPY_LAZY_CONNECT
337    */
338   struct GNUNET_MessageHeader header;
339
340   /**
341    * Temporary name for the copied set.
342    */
343   uint32_t cookie;
344 };
345
346
347 GNUNET_NETWORK_STRUCT_END
348
349 #endif