diff options
-rw-r--r-- | src/libcharon/encoding/payloads/transform_attribute.c | 73 | ||||
-rw-r--r-- | src/libcharon/encoding/payloads/transform_attribute.h | 32 |
2 files changed, 13 insertions, 92 deletions
diff --git a/src/libcharon/encoding/payloads/transform_attribute.c b/src/libcharon/encoding/payloads/transform_attribute.c index 0be39316a..50b5b77cc 100644 --- a/src/libcharon/encoding/payloads/transform_attribute.c +++ b/src/libcharon/encoding/payloads/transform_attribute.c @@ -174,31 +174,6 @@ METHOD(payload_t, get_length, size_t, return this->attribute_length_or_value + 4; } -METHOD(transform_attribute_t, set_value_chunk, void, - private_transform_attribute_t *this, chunk_t value) -{ - chunk_free(&this->attribute_value); - - if (value.len != 2) - { - this->attribute_value = chunk_clone(value); - this->attribute_length_or_value = value.len; - this->attribute_format = FALSE; - } - else - { - memcpy(&this->attribute_length_or_value, value.ptr, value.len); - } -} - -METHOD(transform_attribute_t, set_value, void, - private_transform_attribute_t *this, u_int16_t value) -{ - chunk_free(&this->attribute_value); - this->attribute_length_or_value = value; - this->attribute_format = TRUE; -} - METHOD(transform_attribute_t, get_value_chunk, chunk_t, private_transform_attribute_t *this) { @@ -227,36 +202,12 @@ METHOD(transform_attribute_t, get_value, u_int64_t, return be64toh(value); } -METHOD(transform_attribute_t, set_attribute_type, void, - private_transform_attribute_t *this, u_int16_t type) -{ - this->attribute_type = type & 0x7FFF; -} - METHOD(transform_attribute_t, get_attribute_type, u_int16_t, private_transform_attribute_t *this) { return this->attribute_type; } -METHOD(transform_attribute_t, clone_, transform_attribute_t*, - private_transform_attribute_t *this) -{ - private_transform_attribute_t *new; - - new = (private_transform_attribute_t*)transform_attribute_create(this->type); - - new->attribute_format = this->attribute_format; - new->attribute_type = this->attribute_type; - new->attribute_length_or_value = this->attribute_length_or_value; - - if (!new->attribute_format) - { - new->attribute_value = chunk_clone(this->attribute_value); - } - return &new->public; -} - METHOD2(payload_t, transform_attribute_t, destroy, void, private_transform_attribute_t *this) { @@ -283,16 +234,12 @@ transform_attribute_t *transform_attribute_create(payload_type_t type) .get_type = _get_type, .destroy = _destroy, }, - .set_value_chunk = _set_value_chunk, - .set_value = _set_value, .get_value_chunk = _get_value_chunk, .get_value = _get_value, - .set_attribute_type = _set_attribute_type, .get_attribute_type = _get_attribute_type, - .clone = _clone_, .destroy = _destroy, }, - .attribute_format = TRUE, + .attribute_format = FALSE, .type = type, ); return &this->public; @@ -304,26 +251,30 @@ transform_attribute_t *transform_attribute_create(payload_type_t type) transform_attribute_t *transform_attribute_create_value(payload_type_t type, transform_attribute_type_t kind, u_int64_t value) { - transform_attribute_t *attribute; + private_transform_attribute_t *this; + + this = (private_transform_attribute_t*)transform_attribute_create(type); - attribute = transform_attribute_create(type); - attribute->set_attribute_type(attribute, kind); + this->attribute_type = kind & 0x7FFF; if (value <= UINT16_MAX) { - attribute->set_value(attribute, value); + this->attribute_length_or_value = value; + this->attribute_format = TRUE; } else if (value <= UINT32_MAX) { u_int32_t val32; val32 = htonl(value); - attribute->set_value_chunk(attribute, chunk_from_thing(val32)); + this->attribute_value = chunk_clone(chunk_from_thing(val32)); + this->attribute_length_or_value = sizeof(val32); } else { value = htobe64(value); - attribute->set_value_chunk(attribute, chunk_from_thing(value)); + this->attribute_value = chunk_clone(chunk_from_thing(value)); + this->attribute_length_or_value = sizeof(value); } - return attribute; + return &this->public; } diff --git a/src/libcharon/encoding/payloads/transform_attribute.h b/src/libcharon/encoding/payloads/transform_attribute.h index 7eed40b3e..23897a50a 100644 --- a/src/libcharon/encoding/payloads/transform_attribute.h +++ b/src/libcharon/encoding/payloads/transform_attribute.h @@ -98,7 +98,7 @@ struct transform_attribute_t { * * Returned data are not copied. * - * @return chunk_t pointing to the value + * @return chunk_t pointing to internal value */ chunk_t (*get_value_chunk) (transform_attribute_t *this); @@ -112,29 +112,6 @@ struct transform_attribute_t { u_int64_t (*get_value) (transform_attribute_t *this); /** - * Sets the value of the attribute. - * - * Value is getting copied. - * - * @param value chunk_t pointing to the value to set - */ - void (*set_value_chunk) (transform_attribute_t *this, chunk_t value); - - /** - * Sets the value of the attribute. - * - * @param value value to set - */ - void (*set_value) (transform_attribute_t *this, u_int16_t value); - - /** - * Sets the type of the attribute. - * - * @param type type to set (most significant bit is set to zero) - */ - void (*set_attribute_type) (transform_attribute_t *this, u_int16_t type); - - /** * get the type of the attribute. * * @return type of the value @@ -142,13 +119,6 @@ struct transform_attribute_t { u_int16_t (*get_attribute_type) (transform_attribute_t *this); /** - * Clones an transform_attribute_t object. - * - * @return cloned transform_attribute_t object - */ - transform_attribute_t * (*clone) (transform_attribute_t *this); - - /** * Destroys an transform_attribute_t object. */ void (*destroy) (transform_attribute_t *this); |