]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
child-cfg: Add method to check if an algorithm is proposed
authorTobias Brunner <tobias@strongswan.org>
Fri, 20 Jul 2018 15:43:24 +0000 (17:43 +0200)
committerTobias Brunner <tobias@strongswan.org>
Tue, 14 May 2019 09:09:13 +0000 (11:09 +0200)
src/libcharon/config/child_cfg.c
src/libcharon/config/child_cfg.h

index 53fd3461ef800b9b4c0e63d7491c270daf8cf0a4..479aaf5791b036fc0d63d0bafae136dd3fc897da 100644 (file)
@@ -552,6 +552,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)
 {
@@ -714,6 +733,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,
index 9ced08885ac7b3e44611f81bf867554428669317..a245b0a26903a453273f90b4797da40c1fddbb33 100644 (file)
@@ -217,6 +217,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.
         *