diff options
author | Tobias Brunner <tobias@strongswan.org> | 2012-05-24 14:40:12 +0200 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2012-05-24 15:32:28 +0200 |
commit | 6695b48582345f65b3c026e5011fd0ed448666fb (patch) | |
tree | 129a7580a94fc6fed951f0baa5db3708cef498f1 /src | |
parent | 3451ecd7accc2f6ab3f4f27d0f0638955aa44ac7 (diff) | |
download | strongswan-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.c | 32 |
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; } |