From 21c013c7f657155744ebc321f79cdce3ccfcbb76 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Fri, 20 Jul 2018 17:43:24 +0200 Subject: [PATCH] child-cfg: Add method to check if an algorithm is proposed --- src/libcharon/config/child_cfg.c | 20 ++++++++++++++++++++ src/libcharon/config/child_cfg.h | 11 +++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/libcharon/config/child_cfg.c b/src/libcharon/config/child_cfg.c index 8b69e231d2..d38818b368 100644 --- a/src/libcharon/config/child_cfg.c +++ b/src/libcharon/config/child_cfg.c @@ -492,6 +492,25 @@ METHOD(child_cfg_t, get_algorithm, uint16_t, return alg; } +METHOD(child_cfg_t, has_transform, bool, + private_child_cfg_t *this, transform_type_t type, uint16_t algorithm) +{ + enumerator_t *enumerator; + proposal_t *proposal; + + enumerator = this->proposals->create_enumerator(this->proposals); + while (enumerator->enumerate(enumerator, &proposal)) + { + if (proposal->has_transform(proposal, type, algorithm)) + { + enumerator->destroy(enumerator); + return TRUE; + } + } + enumerator->destroy(enumerator); + return FALSE; +} + METHOD(child_cfg_t, get_inactivity, uint32_t, private_child_cfg_t *this) { @@ -654,6 +673,7 @@ child_cfg_t *child_cfg_create(char *name, child_cfg_create_t *data) .get_close_action = _get_close_action, .get_lifetime = _get_lifetime, .get_algorithm = _get_algorithm, + .has_transform = _has_transform, .get_inactivity = _get_inactivity, .get_reqid = _get_reqid, .get_if_id = _get_if_id, diff --git a/src/libcharon/config/child_cfg.h b/src/libcharon/config/child_cfg.h index 2717b2c599..10c76ce735 100644 --- a/src/libcharon/config/child_cfg.h +++ b/src/libcharon/config/child_cfg.h @@ -214,6 +214,17 @@ struct child_cfg_t { */ uint16_t (*get_algorithm)(child_cfg_t *this, transform_type_t type); + /** + * Check if any of the configured proposals has a specific transform. + * + * @param type transform type to check for + * @param algorithm algorithm to check for (if 0, TRUE is returned if + * no transform of the given type is found) + * @return TRUE if algorithm included + */ + bool (*has_transform)(child_cfg_t *this, transform_type_t type, + uint16_t algorithm); + /** * Get the inactivity timeout value. * -- 2.47.2