proposal-substructure: Encode transform number of selected IKEv1 proposal

This commit is contained in:
Tobias Brunner
2020-03-06 10:31:30 +01:00
parent 7da3143aac
commit 859f9c8c83
2 changed files with 10 additions and 23 deletions
@@ -1552,11 +1552,11 @@ proposal_substructure_t *proposal_substructure_create_from_proposal_v2(
}
/**
* See header.
* Creates an IKEv1 proposal_substructure_t from a proposal_t.
*/
proposal_substructure_t *proposal_substructure_create_from_proposal_v1(
static proposal_substructure_t *proposal_substructure_create_from_proposal_v1(
proposal_t *proposal, uint32_t lifetime, uint64_t lifebytes,
auth_method_t auth, ipsec_mode_t mode, encap_t udp)
auth_method_t auth, ipsec_mode_t mode, encap_t udp, uint8_t number)
{
private_proposal_substructure_t *this;
@@ -1565,12 +1565,12 @@ proposal_substructure_t *proposal_substructure_create_from_proposal_v1(
switch (proposal->get_protocol(proposal))
{
case PROTO_IKE:
set_from_proposal_v1_ike(this, proposal, lifetime, auth, 1);
set_from_proposal_v1_ike(this, proposal, lifetime, auth, number);
break;
case PROTO_ESP:
case PROTO_AH:
set_from_proposal_v1(this, proposal, lifetime,
lifebytes, mode, udp, 1);
lifebytes, mode, udp, number);
break;
default:
break;
@@ -1590,17 +1590,18 @@ proposal_substructure_t *proposal_substructure_create_from_proposals_v1(
private_proposal_substructure_t *this = NULL;
enumerator_t *enumerator;
proposal_t *proposal;
int number = 0;
int number = 1;
enumerator = proposals->create_enumerator(proposals);
while (enumerator->enumerate(enumerator, &proposal))
{
if (!this)
{
{ /* as responder the transform number is set and we only have a
* single proposal, start with 1 otherwise */
this = (private_proposal_substructure_t*)
proposal_substructure_create_from_proposal_v1(
proposal, lifetime, lifebytes, auth, mode, udp);
++number;
proposal, lifetime, lifebytes, auth, mode, udp,
proposal->get_transform_number(proposal) ?: number);
}
else
{
@@ -181,20 +181,6 @@ proposal_substructure_t *proposal_substructure_create(payload_type_t type);
*/
proposal_substructure_t *proposal_substructure_create_from_proposal_v2(
proposal_t *proposal);
/**
* Creates an IKEv1 proposal_substructure_t from a proposal_t.
*
* @param proposal proposal to build a substruct out of it
* @param lifetime lifetime in seconds
* @param lifebytes lifebytes, in bytes
* @param auth authentication method to use, or AUTH_NONE
* @param mode IPsec encapsulation mode, TRANSPORT or TUNNEL
* @param udp ENCAP_UDP to use UDP encapsulation
* @return proposal_substructure_t object PLV1_PROPOSAL_SUBSTRUCTURE
*/
proposal_substructure_t *proposal_substructure_create_from_proposal_v1(
proposal_t *proposal, uint32_t lifetime, uint64_t lifebytes,
auth_method_t auth, ipsec_mode_t mode, encap_t udp);
/**
* Creates an IKEv1 proposal_substructure_t from a list of proposal_t.