Annotation of embedaddon/strongswan/src/libcharon/encoding/payloads/encodings.h, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (C) 2005-2006 Martin Willi
3: * Copyright (C) 2005 Jan Hutter
4: * HSR Hochschule fuer Technik Rapperswil
5: *
6: * This program is free software; you can redistribute it and/or modify it
7: * under the terms of the GNU General Public License as published by the
8: * Free Software Foundation; either version 2 of the License, or (at your
9: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
10: *
11: * This program is distributed in the hope that it will be useful, but
12: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14: * for more details.
15: */
16:
17: /**
18: * @defgroup encodings encodings
19: * @{ @ingroup payloads
20: */
21:
22: #ifndef ENCODINGS_H_
23: #define ENCODINGS_H_
24:
25: typedef enum encoding_type_t encoding_type_t;
26: typedef struct encoding_rule_t encoding_rule_t;
27:
28: #include <library.h>
29:
30: /**
31: * All different kinds of encoding types.
32: *
33: * Each field of an IKEv2-Message (in header or payload)
34: * which has to be parsed or generated differently has its own
35: * type defined here.
36: *
37: * Header is parsed like a payload and gets its one payload_id
38: * from PRIVATE USE space. Also the substructures
39: * of specific payload types get their own payload_id
40: * from PRIVATE_USE space. See IKEv2-Draft for more information.
41: */
42: enum encoding_type_t {
43:
44: /**
45: * Representing a 4 Bit unsigned int value.
46: *
47: *
48: * When generating it must be changed from host to network order.
49: * The value is read from the associated data struct.
50: * The current write position is moved 4 bit forward afterwards.
51: *
52: * When parsing it must be changed from network to host order.
53: * The value is written to the associated data struct.
54: * The current read pointer is moved 4 bit forward afterwards.
55: */
56: U_INT_4,
57:
58: /**
59: * Representing a 8 Bit unsigned int value.
60: *
61: *
62: * When generating it must be changed from host to network order.
63: * The value is read from the associated data struct.
64: * The current write position is moved 8 bit forward afterwards.
65: *
66: * When parsing it must be changed from network to host order.
67: * The value is written to the associated data struct.
68: * The current read pointer is moved 8 bit forward afterwards.
69: */
70: U_INT_8,
71:
72: /**
73: * Representing a 16 Bit unsigned int value.
74: *
75: *
76: * When generating it must be changed from host to network order.
77: * The value is read from the associated data struct.
78: * The current write position is moved 16 bit forward afterwards.
79: *
80: * When parsing it must be changed from network to host order.
81: * The value is written to the associated data struct.
82: * The current read pointer is moved 16 bit forward afterwards.
83: */
84: U_INT_16,
85:
86: /**
87: * Representing a 32 Bit unsigned int value.
88: *
89: * When generating it must be changed from host to network order.
90: * The value is read from the associated data struct.
91: * The current write position is moved 32 bit forward afterwards.
92: *
93: * When parsing it must be changed from network to host order.
94: * The value is written to the associated data struct.
95: * The current read pointer is moved 32 bit forward afterwards.
96: */
97: U_INT_32,
98:
99: /**
100: * represents a RESERVED_BIT used in FLAG-Bytes.
101: *
102: * When generating, the next bit is set to zero and the current write
103: * position is moved one bit forward.
104: * No value is read from the associated data struct.
105: * The current write position is moved 1 bit forward afterwards.
106: *
107: * When parsing, the current read pointer is moved one bit forward.
108: * No value is written to the associated data struct.
109: * The current read pointer is moved 1 bit forward afterwards.
110: */
111: RESERVED_BIT,
112:
113: /**
114: * represents a RESERVED_BYTE.
115: *
116: * When generating, the next byte is set to zero and the current write
117: * position is moved one byte forward.
118: * No value is read from the associated data struct.
119: * The current write position is moved 1 byte forward afterwards.
120: *
121: * When parsing, the current read pointer is moved one byte forward.
122: * No value is written to the associated data struct.
123: * The current read pointer is moved 1 byte forward afterwards.
124: */
125: RESERVED_BYTE,
126:
127: /**
128: * Representing a 1 Bit flag.
129: *
130: * When generation, the next bit is set to 1 if the associated value
131: * in the data struct is TRUE, 0 otherwise. The current write position
132: * is moved 1 bit forward afterwards.
133: *
134: * When parsing, the next bit is read and stored in the associated data
135: * struct. 0 means FALSE, 1 means TRUE, The current read pointer
136: * is moved 1 bit forward afterwards
137: */
138: FLAG,
139:
140: /**
141: * Representing a length field of a payload.
142: *
143: * When generating it must be changed from host to network order.
144: * The value is read from the associated data struct.
145: * The current write position is moved 16 bit forward afterwards.
146: *
147: * When parsing it must be changed from network to host order.
148: * The value is written to the associated data struct.
149: * The current read pointer is moved 16 bit forward afterwards.
150: */
151: PAYLOAD_LENGTH,
152:
153: /**
154: * Representing a length field of a header.
155: *
156: * When generating it must be changed from host to network order.
157: * The value is read from the associated data struct.
158: * The current write position is moved 32 bit forward afterwards.
159: *
160: * When parsing it must be changed from network to host order.
161: * The value is written to the associated data struct.
162: * The current read pointer is moved 32 bit forward afterwards.
163: */
164: HEADER_LENGTH,
165:
166: /**
167: * Representing a spi size field.
168: *
169: * When generating it must be changed from host to network order.
170: * The value is read from the associated data struct.
171: * The current write position is moved 8 bit forward afterwards.
172: *
173: * When parsing it must be changed from network to host order.
174: * The value is written to the associated data struct.
175: * The current read pointer is moved 8 bit forward afterwards.
176: */
177: SPI_SIZE,
178:
179: /**
180: * Representing a spi field.
181: *
182: * When generating the content of the chunk pointing to
183: * is written.
184: *
185: * When parsing SPI_SIZE bytes are read and written into the chunk pointing to.
186: */
187: SPI,
188:
189: /**
190: * Representing a 1 Bit flag specifying the format of a transform attribute.
191: *
192: * When generation, the next bit is set to 1 if the associated value
193: * in the data struct is TRUE, 0 otherwise. The current write position
194: * is moved 1 bit forward afterwards.
195: *
196: * When parsing, the next bit is read and stored in the associated data
197: * struct. 0 means FALSE, 1 means TRUE, The current read pointer
198: * is moved 1 bit forward afterwards.
199: */
200: ATTRIBUTE_FORMAT,
201:
202: /**
203: * Representing a 15 Bit unsigned int value used as attribute type
204: * in an attribute transform.
205: *
206: *
207: * When generating it must be changed from host to network order.
208: * The value is read from the associated data struct.
209: * The current write position is moved 15 bit forward afterwards.
210: *
211: * When parsing it must be changed from network to host order.
212: * The value is written to the associated data struct.
213: * The current read pointer is moved 15 bit forward afterwards.
214: */
215: ATTRIBUTE_TYPE,
216:
217: /**
218: * Depending on the field of type ATTRIBUTE_FORMAT
219: * this field contains the length or the value of an transform attribute.
220: * Its stored in a 16 unsigned integer field.
221: *
222: * When generating it must be changed from host to network order.
223: * The value is read from the associated data struct.
224: * The current write position is moved 16 bit forward afterwards.
225: *
226: * When parsing it must be changed from network to host order.
227: * The value is written to the associated data struct.
228: * The current read pointer is moved 16 bit forward afterwards.
229: */
230: ATTRIBUTE_LENGTH_OR_VALUE,
231:
232: /**
233: * This field contains the length or the value of an configuration attribute.
234: * Its stored in a 16 unsigned integer field.
235: *
236: * When generating it must be changed from host to network order.
237: * The value is read from the associated data struct.
238: * The current write position is moved 16 bit forward afterwards.
239: *
240: * When parsing it must be changed from network to host order.
241: * The value is written to the associated data struct.
242: * The current read pointer is moved 16 bit forward afterwards.
243: */
244: ATTRIBUTE_LENGTH,
245:
246: /**
247: * Depending on the field of type ATTRIBUTE_FORMAT
248: * this field is available or missing and so parsed/generated
249: * or not parsed/not generated.
250: *
251: * When generating the content of the chunk pointing to
252: * is written.
253: *
254: * When parsing SPI_SIZE bytes are read and written into the chunk pointing to.
255: */
256: ATTRIBUTE_VALUE,
257:
258: /**
259: * Representing a Traffic selector type field.
260: *
261: * When generating it must be changed from host to network order.
262: * The value is read from the associated data struct.
263: * The current write position is moved 16 bit forward afterwards.
264: *
265: * When parsing it must be changed from network to host order.
266: * The value is written to the associated data struct.
267: * The current read pointer is moved 16 bit forward afterwards.
268: */
269: TS_TYPE,
270:
271: /**
272: * Representing an address field in a traffic selector.
273: *
274: * Depending on the last field of type TS_TYPE
275: * this field is either 4 or 16 byte long.
276: *
277: * When generating the content of the chunk pointing to
278: * is written.
279: *
280: * When parsing 4 or 16 bytes are read and written into the chunk pointing to.
281: */
282: ADDRESS,
283:
284: /**
285: * Representing a variable length byte field.
286: */
287: CHUNK_DATA,
288:
289: /**
290: * Representing an IKE_SPI field in an IKEv2 Header.
291: *
292: * When generating the value of the uint64_t pointing to
293: * is written (host and network order is not changed).
294: *
295: * When parsing 8 bytes are read and written into the uint64_t pointing to.
296: */
297: IKE_SPI,
298:
299: /**
300: * Representing an encrypted IKEv1 message.
301: */
302: ENCRYPTED_DATA,
303:
304: /**
305: * Representing a field containing a set of wrapped payloads.
306: *
307: * This type is not used directly, but as an offset to the wrapped payloads.
308: * The type of the wrapped payload is added to this encoding type.
309: *
310: * @note As payload types are added to this encoding type, it has
311: * to be the last in encoding_type_t.
312: */
313: PAYLOAD_LIST = 1000 /* no comma, read above! */
314: };
315:
316: /**
317: * enum name for encoding_type_t
318: */
319: extern enum_name_t *encoding_type_names;
320:
321: /**
322: * Rule how to en-/decode a payload field.
323: *
324: * An encoding rule is a mapping of a specific encoding type to
325: * a location in the data struct where the current field is stored to
326: * or read from.
327: * This rules are used by parser and generator.
328: */
329: struct encoding_rule_t {
330:
331: /**
332: * Encoding type.
333: */
334: encoding_type_t type;
335:
336: /**
337: * Offset in the data struct.
338: *
339: * When parsing, data are written to this offset of the
340: * data struct.
341: *
342: * When generating, data are read from this offset in the
343: * data struct.
344: */
345: uint32_t offset;
346: };
347:
348: #endif /** ENCODINGS_H_ @}*/
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>