/** * @file transform_attribute.h * * @brief Declaration of the class transform_attribute_t. * * An object of this type represents an IKEv2 TRANSFORM attribute. * */ /* * Copyright (C) 2005 Jan Hutter, Martin Willi * Hochschule fuer Technik Rapperswil * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. See . * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. */ #ifndef TRANSFORM_ATTRIBUTE_H_ #define TRANSFORM_ATTRIBUTE_H_ #include #include typedef enum transform_attribute_type_t transform_attribute_type_t; /** * Type of the attribute, as in IKEv2 draft 3.3.5 */ enum transform_attribute_type_t { ATTRIBUTE_UNDEFINED = 16384, KEY_LENGTH = 14 }; /** * string mappings for transform_attribute_type_t */ extern mapping_t transform_attribute_type_m[]; typedef struct transform_attribute_t transform_attribute_t; /** * Object representing an IKEv2- TRANSFORM Attribute * * The TRANSFORM ATTRIBUTE format is described in RFC section 3.3.5. * */ struct transform_attribute_t { /** * implements payload_t interface */ payload_t payload_interface; /** * @brief Returns the currently set value of the attribute * * @warning Returned data are not copied * * @param this calling transform_attribute_t object * @return chunk_t pointing to the value */ chunk_t (*get_value_chunk) (transform_attribute_t *this); /** * @brief Returns the currently set value of the attribute * * @warning Returned data are not copied * * @param this calling transform_attribute_t object * @return value */ u_int16_t (*get_value) (transform_attribute_t *this); /** * @brief Sets the value of the attribute. * * @warning Value is getting copied * * @param this calling transform_attribute_t object * @param value chunk_t pointing to the value to set * @return * - SUCCESS or * - OUT_OF_RES */ status_t (*set_value_chunk) (transform_attribute_t *this, chunk_t value); /** * @brief Sets the value of the attribute. * * @param this calling transform_attribute_t object * @param value value to set * @return * - SUCCESS or * - OUT_OF_RES */ status_t (*set_value) (transform_attribute_t *this, u_int16_t value); /** * @brief Sets the type of the attribute. * * @param this calling transform_attribute_t object * @param type type to set (most significant bit is set to zero) * @return SUCCESS */ status_t (*set_attribute_type) (transform_attribute_t *this, u_int16_t type); /** * @brief get the type of the attribute. * * @param this calling transform_attribute_t object * @return type of the value */ u_int16_t (*get_attribute_type) (transform_attribute_t *this); /** * @brief Clones an transform_attribute_t object. * * @param this transform_attribute_t object to clone * @param clone the new clone will be written there * @return * - OUT_OF_RES * - SUCCESS */ status_t (*clone) (transform_attribute_t *this,transform_attribute_t **clone); /** * @brief Destroys an transform_attribute_t object. * * @param this transform_attribute_t object to destroy * @return * SUCCESS in any case */ status_t (*destroy) (transform_attribute_t *this); }; /** * @brief Creates an empty transform_attribute_t object * * @return * - created transform_attribute_t object, or * - NULL if failed */ transform_attribute_t *transform_attribute_create(); #endif /*TRANSFORM_ATTRIBUTE_H_*/