- typo
[oweals/gnunet.git] / src / mesh / mesh_protocol_enc.h
1 /*
2      This file is part of GNUnet.
3      (C) 2001 - 2011 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  * @author Bartlomiej Polot
23  * @file mesh/mesh_protocol_enc.h
24  */
25
26 #ifndef MESH_PROTOCOL_ENC_H_
27 #define MESH_PROTOCOL_ENC_H_
28
29 #ifdef __cplusplus
30 extern "C"
31 {
32 #if 0
33   /* keep Emacsens' auto-indent happy */
34 }
35 #endif
36 #endif
37
38 /******************************************************************************/
39 /********************      MESH NETWORK MESSAGES     **************************/
40 /******************************************************************************/
41
42 GNUNET_NETWORK_STRUCT_BEGIN
43
44 /**
45  * Message for mesh connection creation.
46  */
47 struct GNUNET_MESH_ConnectionCreate
48 {
49     /**
50      * Type: GNUNET_MESSAGE_TYPE_MESH_CONNECTION_CREATE
51      *
52      * Size: sizeof(struct GNUNET_MESH_ManipulatePath) +
53      *       path_length * sizeof (struct GNUNET_PeerIdentity)
54      */
55   struct GNUNET_MessageHeader header;
56
57     /**
58      * ID of the connection for that tunnel.
59      */
60   uint32_t cid GNUNET_PACKED;
61
62     /**
63      * Tunnel options (GNUNET_MESH_OPTION_*).
64      */
65   uint32_t opt GNUNET_PACKED;
66
67     /**
68      * Reserved, always 0.
69      */
70   uint32_t reserved GNUNET_PACKED;
71
72     /**
73      * path_length structs defining the *whole* path from the origin [0] to the
74      * final destination [path_length-1].
75      */
76   /* struct GNUNET_PeerIdentity peers[path_length]; */
77 };
78
79 /**
80  * Message for ack'ing a connection
81  */
82 struct GNUNET_MESH_ConnectionACK
83 {
84     /**
85      * Type: GNUNET_MESSAGE_TYPE_MESH_CONNECTION_ACK
86      */
87   struct GNUNET_MessageHeader header;
88
89     /**
90      * CID of the connection
91      */
92   uint32_t cid GNUNET_PACKED;
93
94     /**
95      * TID of the tunnel
96      */
97   struct GNUNET_PeerIdentity tid;
98
99   /* TODO: signature */
100 };
101
102
103 /**
104  * Message for mesh data traffic.
105  */
106 struct GNUNET_MESH_Data
107 {
108     /**
109      * Type: GNUNET_MESSAGE_TYPE_MESH_UNICAST,
110      *       GNUNET_MESSAGE_TYPE_MESH_TO_ORIGIN
111      */
112   struct GNUNET_MessageHeader header;
113
114     /**
115      * TID of the tunnel
116      */
117   uint32_t tid GNUNET_PACKED;
118
119     /**
120      * Number of hops to live
121      */
122   uint32_t ttl GNUNET_PACKED;
123
124     /**
125      * ID of the packet
126      */
127   uint32_t pid GNUNET_PACKED;
128
129     /**
130      * OID of the tunnel
131      */
132   struct GNUNET_PeerIdentity oid;
133
134   /**
135    * Unique ID of the payload message
136    */
137   uint32_t mid GNUNET_PACKED;
138
139     /**
140      * Payload follows
141      */
142 };
143
144
145 /**
146  * Message to acknowledge end-to-end data.
147  */
148 struct GNUNET_MESH_DataACK
149 {
150   /**
151    * Type: GNUNET_MESSAGE_TYPE_MESH_DATA_ACK
152    */
153   struct GNUNET_MessageHeader header;
154
155   /**
156    * TID of the tunnel
157    */
158   uint32_t tid GNUNET_PACKED;
159
160   /**
161    * OID of the tunnel
162    */
163   struct GNUNET_PeerIdentity oid;
164
165   /**
166    * Bitfield of already-received newer messages
167    * pid +  1 @ LSB
168    * pid + 64 @ MSB
169    */
170   uint64_t futures GNUNET_PACKED;
171
172   /**
173    * Last message ID received.
174    */
175   uint32_t mid GNUNET_PACKED;
176 };
177
178
179 /**
180  * Message to acknowledge mesh data traffic.
181  */
182 struct GNUNET_MESH_ACK
183 {
184     /**
185      * Type: GNUNET_MESSAGE_TYPE_MESH_ACK
186      */
187   struct GNUNET_MessageHeader header;
188
189     /**
190      * TID of the tunnel
191      */
192   uint32_t tid GNUNET_PACKED;
193
194     /**
195      * OID of the tunnel
196      */
197   struct GNUNET_PeerIdentity oid;
198
199     /**
200      * Maximum packet ID authorized.
201      */
202   uint32_t pid GNUNET_PACKED;
203 };
204
205
206 /**
207  * Message to query a peer about its Flow Control status regarding a tunnel.
208  */
209 struct GNUNET_MESH_Poll
210 {
211   /**
212    * Type: GNUNET_MESSAGE_TYPE_MESH_POLL
213    */
214   struct GNUNET_MessageHeader header;
215
216   /**
217    * TID of the tunnel
218    */
219   uint32_t tid GNUNET_PACKED;
220
221   /**
222    * OID of the tunnel
223    */
224   struct GNUNET_PeerIdentity oid;
225
226   /**
227    * Last packet sent.
228    */
229   uint32_t pid GNUNET_PACKED;
230 };
231
232
233 /**
234  * Message for notifying a disconnection in a path
235  */
236 struct GNUNET_MESH_ConnectionBroken
237 {
238     /**
239      * Type: GNUNET_MESSAGE_TYPE_MESH_CONNECTION_BROKEN
240      */
241   struct GNUNET_MessageHeader header;
242
243     /**
244      * TID of the tunnel
245      */
246   uint32_t tid GNUNET_PACKED;
247
248     /**
249      * OID of the tunnel
250      */
251   struct GNUNET_PeerIdentity oid;
252
253     /**
254      * ID of the endpoint
255      */
256   struct GNUNET_PeerIdentity peer1;
257
258     /**
259      * ID of the endpoint
260      */
261   struct GNUNET_PeerIdentity peer2;
262
263   /* TODO: signature */
264 };
265
266
267 /**
268  * Message to destroy a tunnel
269  */
270 struct GNUNET_MESH_ConnectionDestroy
271 {
272     /**
273      * Type: GNUNET_MESSAGE_TYPE_MESH_CONNECTION_DESTROY
274      */
275   struct GNUNET_MessageHeader header;
276
277     /**
278      * TID of the tunnel
279      */
280   uint32_t tid GNUNET_PACKED;
281
282     /**
283      * OID of the tunnel
284      */
285   struct GNUNET_PeerIdentity oid;
286
287   /* TODO: signature */
288 };
289
290
291 /**
292  * Message to destroy a tunnel
293  */
294 struct GNUNET_MESH_ConnectionKeepAlive
295 {
296   /**
297    * Type: GNUNET_MESSAGE_TYPE_MESH_CONNECTION_(FWD|BCK)_KEEPALIVE
298    */
299   struct GNUNET_MessageHeader header;
300   
301   /**
302    * TID of the tunnel
303    */
304   uint32_t tid GNUNET_PACKED;
305   
306   /**
307    * OID of the tunnel
308    */
309   struct GNUNET_PeerIdentity oid;
310 };
311
312
313
314 GNUNET_NETWORK_STRUCT_END
315
316 #if 0                           /* keep Emacsens' auto-indent happy */
317 {
318 #endif
319 #ifdef __cplusplus
320 }
321 #endif
322
323 /* ifndef MESH_PROTOCOL_H */
324 #endif
325 /* end of mesh_protocol.h */