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>