ike-cfg: Add method to check if config contains matching proposal
authorTobias Brunner <tobias@strongswan.org>
Tue, 29 May 2018 14:51:48 +0000 (16:51 +0200)
committerTobias Brunner <tobias@strongswan.org>
Thu, 28 Jun 2018 16:46:41 +0000 (18:46 +0200)
This way we can check whether the config should be considered or not if
we have a selected proposal.

src/libcharon/config/ike_cfg.c
src/libcharon/config/ike_cfg.h

index 878643a..357c4a7 100644 (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 Jan Hutter
  * HSR Hochschule fuer Technik Rapperswil
@@ -309,6 +309,25 @@ METHOD(ike_cfg_t, get_proposals, linked_list_t*,
        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*,
        private_ike_cfg_t *this, linked_list_t *proposals, bool private,
        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,
                        .get_proposals = _get_proposals,
                        .select_proposal = _select_proposal,
+                       .has_proposal = _has_proposal,
                        .get_dh_group = _get_dh_group,
                        .equals = _equals,
                        .get_ref = _get_ref,
index ac2deef..49690c8 100644 (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 Jan Hutter
  * HSR Hochschule fuer Technik Rapperswil
@@ -180,6 +180,15 @@ struct ike_cfg_t {
                                                                        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?
         *
         * @return                              certificate request sending policy