aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2012-05-24 14:40:12 +0200
committerTobias Brunner <tobias@strongswan.org>2012-05-24 15:32:28 +0200
commit6695b48582345f65b3c026e5011fd0ed448666fb (patch)
tree129a7580a94fc6fed951f0baa5db3708cef498f1 /src
parent3451ecd7accc2f6ab3f4f27d0f0638955aa44ac7 (diff)
downloadstrongswan-6695b48582345f65b3c026e5011fd0ed448666fb.tar.bz2
strongswan-6695b48582345f65b3c026e5011fd0ed448666fb.tar.xz
Add an additional proposal without IPComp to SA payload.
Diffstat (limited to 'src')
-rw-r--r--src/libcharon/encoding/payloads/sa_payload.c32
1 files changed, 15 insertions, 17 deletions
diff --git a/src/libcharon/encoding/payloads/sa_payload.c b/src/libcharon/encoding/payloads/sa_payload.c
index 4fb1bc63a..92c1a9b86 100644
--- a/src/libcharon/encoding/payloads/sa_payload.c
+++ b/src/libcharon/encoding/payloads/sa_payload.c
@@ -568,8 +568,16 @@ sa_payload_t *sa_payload_create_from_proposals_v1(linked_list_t *proposals,
substruct->set_is_last_proposal(substruct, FALSE);
if (cpi)
{
+ u_int8_t proposal_number = substruct->get_proposal_number(substruct);
+
substruct = proposal_substructure_create_for_ipcomp_v1(lifetime,
- lifebytes, cpi, substruct->get_proposal_number(substruct));
+ lifebytes, cpi, proposal_number);
+ this->proposals->insert_last(this->proposals, substruct);
+ substruct->set_is_last_proposal(substruct, FALSE);
+ /* add the proposals again without IPComp */
+ substruct = proposal_substructure_create_from_proposals_v1(proposals,
+ lifetime, lifebytes, auth, mode, udp);
+ substruct->set_proposal_number(substruct, proposal_number + 1);
this->proposals->insert_last(this->proposals, substruct);
}
substruct->set_is_last_proposal(substruct, TRUE);
@@ -586,23 +594,13 @@ sa_payload_t *sa_payload_create_from_proposal_v1(proposal_t *proposal,
auth_method_t auth, ipsec_mode_t mode, bool udp,
u_int16_t cpi)
{
- proposal_substructure_t *substruct;
private_sa_payload_t *this;
+ linked_list_t *proposals;
- this = (private_sa_payload_t*)sa_payload_create(SECURITY_ASSOCIATION_V1);
-
- substruct = proposal_substructure_create_from_proposal_v1(proposal,
- lifetime, lifebytes, auth, mode, udp);
- this->proposals->insert_last(this->proposals, substruct);
- substruct->set_is_last_proposal(substruct, FALSE);
- if (cpi)
- {
- substruct = proposal_substructure_create_for_ipcomp_v1(lifetime,
- lifebytes, cpi, substruct->get_proposal_number(substruct));
- this->proposals->insert_last(this->proposals, substruct);
- }
- substruct->set_is_last_proposal(substruct, TRUE);
- compute_length(this);
-
+ proposals = linked_list_create();
+ proposals->insert_last(proposals, proposal);
+ this = (private_sa_payload_t*)sa_payload_create_from_proposals_v1(proposals,
+ lifetime, lifebytes, auth, mode, udp, cpi);
+ proposals->destroy(proposals);
return &this->public;
}