diff options
-rw-r--r-- | Source/charon/payloads/proposal_substructure.c | 18 | ||||
-rw-r--r-- | Source/charon/payloads/transform_substructure.c | 8 |
2 files changed, 19 insertions, 7 deletions
diff --git a/Source/charon/payloads/proposal_substructure.c b/Source/charon/payloads/proposal_substructure.c index e6472ed0e..ce9e2047c 100644 --- a/Source/charon/payloads/proposal_substructure.c +++ b/Source/charon/payloads/proposal_substructure.c @@ -208,8 +208,20 @@ static status_t create_transform_substructure_iterator (private_proposal_substru */ static status_t add_transform_substructure (private_proposal_substructure_t *this,transform_substructure_t *transform) { - return (this->transforms->insert_last(this->transforms,(void *) transform)); + status_t status; + if (this->transforms->get_count(this->transforms) > 0) + { + transform_substructure_t *last_transform; + status = this->transforms->get_last(this->transforms,(void **) &last_transform); + /* last transform is now not anymore last one */ + last_transform->set_is_last_transform(last_transform,FALSE); + + } + transform->set_is_last_transform(transform,TRUE); + + status = this->transforms->insert_last(this->transforms,(void *) transform); this->compute_length(this); + return status; } /** @@ -313,11 +325,9 @@ static status_t compute_length (private_proposal_substructure_t *this) length += current_transform->get_length(current_transform); transforms_count++; } - + iterator->destroy(iterator); length += this->spi.len; - - this->transforms_count= transforms_count; this->proposal_length = length; diff --git a/Source/charon/payloads/transform_substructure.c b/Source/charon/payloads/transform_substructure.c index b8574e731..995f96ec7 100644 --- a/Source/charon/payloads/transform_substructure.c +++ b/Source/charon/payloads/transform_substructure.c @@ -187,9 +187,10 @@ static status_t create_transform_attribute_iterator (private_transform_substruct */ static status_t add_transform_attribute (private_transform_substructure_t *this,transform_attribute_t *attribute) { - return (this->attributes->insert_last(this->attributes,(void *) attribute)); + status_t status; + status = this->attributes->insert_last(this->attributes,(void *) attribute); this->compute_length(this); - return SUCCESS; + return status; } /** @@ -198,7 +199,7 @@ static status_t add_transform_attribute (private_transform_substructure_t *this, */ static status_t set_is_last_transform (private_transform_substructure_t *this, bool is_last) { - this->next_payload = (is_last) ? 0 : TRANSFORM_TYPE_VALUE; + this->next_payload = (is_last) ? 0: TRANSFORM_TYPE_VALUE; return SUCCESS; } @@ -269,6 +270,7 @@ static status_t compute_length (private_transform_substructure_t *this) iterator->current(iterator,(void **) ¤t_attribute); length += current_attribute->get_length(current_attribute); } + iterator->destroy(iterator); return SUCCESS; } |