ike-cfg: Add method to check if config contains matching proposal

This way we can check whether the config should be considered or not if
we have a selected proposal.
This commit is contained in:
Tobias Brunner 2018-05-29 16:51:48 +02:00
parent f72aa13a29
commit 29e7fe63c3
2 changed files with 31 additions and 2 deletions

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2012-2017 Tobias Brunner * Copyright (C) 2012-2018 Tobias Brunner
* Copyright (C) 2005-2007 Martin Willi * Copyright (C) 2005-2007 Martin Willi
* Copyright (C) 2005 Jan Hutter * Copyright (C) 2005 Jan Hutter
* HSR Hochschule fuer Technik Rapperswil * HSR Hochschule fuer Technik Rapperswil
@ -309,6 +309,25 @@ METHOD(ike_cfg_t, get_proposals, linked_list_t*,
return proposals; return proposals;
} }
METHOD(ike_cfg_t, has_proposal, bool,
private_ike_cfg_t *this, proposal_t *match, bool private)
{
enumerator_t *enumerator;
proposal_t *proposal;
enumerator = this->proposals->create_enumerator(this->proposals);
while (enumerator->enumerate(enumerator, &proposal))
{
if (proposal->matches(proposal, match, private))
{
enumerator->destroy(enumerator);
return TRUE;
}
}
enumerator->destroy(enumerator);
return FALSE;
}
METHOD(ike_cfg_t, select_proposal, proposal_t*, METHOD(ike_cfg_t, select_proposal, proposal_t*,
private_ike_cfg_t *this, linked_list_t *proposals, bool private, private_ike_cfg_t *this, linked_list_t *proposals, bool private,
bool prefer_self) bool prefer_self)
@ -618,6 +637,7 @@ ike_cfg_t *ike_cfg_create(ike_version_t version, bool certreq, bool force_encap,
.add_proposal = _add_proposal, .add_proposal = _add_proposal,
.get_proposals = _get_proposals, .get_proposals = _get_proposals,
.select_proposal = _select_proposal, .select_proposal = _select_proposal,
.has_proposal = _has_proposal,
.get_dh_group = _get_dh_group, .get_dh_group = _get_dh_group,
.equals = _equals, .equals = _equals,
.get_ref = _get_ref, .get_ref = _get_ref,

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2012-2017 Tobias Brunner * Copyright (C) 2012-2018 Tobias Brunner
* Copyright (C) 2005-2007 Martin Willi * Copyright (C) 2005-2007 Martin Willi
* Copyright (C) 2005 Jan Hutter * Copyright (C) 2005 Jan Hutter
* HSR Hochschule fuer Technik Rapperswil * HSR Hochschule fuer Technik Rapperswil
@ -179,6 +179,15 @@ struct ike_cfg_t {
proposal_t *(*select_proposal) (ike_cfg_t *this, linked_list_t *proposals, proposal_t *(*select_proposal) (ike_cfg_t *this, linked_list_t *proposals,
bool private, bool prefer_self); bool private, bool prefer_self);
/**
* Check if the config has a matching proposal.
*
* @param match proposal to check
* @param private accept algorithms from a private range
* @return TRUE if a matching proposal is contained
*/
bool(*has_proposal)(ike_cfg_t *this, proposal_t *match, bool private);
/** /**
* Should we send a certificate request in IKE_SA_INIT? * Should we send a certificate request in IKE_SA_INIT?
* *