aboutsummaryrefslogtreecommitdiffstats
path: root/Source/charon/payloads/proposal_substructure.c
diff options
context:
space:
mode:
Diffstat (limited to 'Source/charon/payloads/proposal_substructure.c')
-rw-r--r--Source/charon/payloads/proposal_substructure.c18
1 files changed, 14 insertions, 4 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;