created class init_config_t encapsulating configuration issues of
[strongswan.git] / Source / charon / config / init_config.h
index 4cf9860..876ead8 100644 (file)
@@ -1,4 +1,169 @@
+/**
+ * @file init_config.h
+ * 
+ * @brief Interface of init_config_t.
+ *  
+ */
+
+/*
+ * Copyright (C) 2005 Jan Hutter, Martin Willi
+ * Hochschule fuer Technik Rapperswil
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * for more details.
+ */
 #ifndef _INIT_CONFIG_H_
 #define _INIT_CONFIG_H_
 
+#include <types.h>
+#include <network/host.h>
+#include <encoding/payloads/sa_payload.h>
+#include <utils/iterator.h>
+
+typedef struct ike_proposal_t ike_proposal_t;
+
+/**
+ * Represents a Proposal used in IKE_SA_INIT phase.
+ */
+struct ike_proposal_t {
+       /**
+        * Encryption algorithm.
+        * */
+       encryption_algorithm_t encryption_algorithm;
+       
+       /**
+        * Key length of encryption algorithm in bytes.
+        */
+       u_int16_t encryption_algorithm_key_length;
+       
+       /**
+        * Integrity algorithm.
+        */
+       integrity_algorithm_t integrity_algorithm;
+       
+       /**
+        * Key length of integrity algorithm
+        */
+       u_int16_t integrity_algorithm_key_length;
+       
+       /**
+        * Pseudo random function (prf).
+        */
+       pseudo_random_function_t pseudo_random_function;
+       
+       /**
+        * Key length of prf.
+        */
+       u_int16_t pseudo_random_function_key_length;
+       
+       /**
+        * Diffie hellman group
+        */
+       diffie_hellman_group_t diffie_hellman_group;
+};
+
+typedef struct init_config_t init_config_t;
+
+/**
+ * Represents a configuration class holding all needed informations for IKE_SA_INIT phase.
+ * 
+ * @ingroup config
+ * 
+ */
+struct init_config_t { 
+
+       /**
+        * Get my host information as host_t object.
+        * 
+        * @warning Object is getting cloned and has to get destroyed by caller.
+        * 
+        * @param this  calling object
+        * @return              host information as host_t object
+        */
+       host_t * (*get_my_host) (init_config_t *this);
+
+       /**
+        * Get other host information as host_t object.
+        * 
+        * @warning Object is getting cloned and has to get destroyed by caller.
+        * 
+        * @param this  calling object
+        * @return              host information as host_t object
+        */
+       host_t * (*get_other_host) (init_config_t *this);
+       
+       /**
+        * Get the diffie hellman group to use as initiator with given priority.
+        * 
+        * 
+        * @param this          calling object
+        * @param priority      priority of dh group number (starting at 1)
+        * @return                      diffie hellman group number for given priority or 
+        *                                      MODP_UNDEFINED for not supported priorities
+        */
+       diffie_hellman_group_t (*get_dh_group_number) (init_config_t *this,size_t priority);
+       
+       /**
+        * Returns a list of all supported ike_proposals of type ike_proposal_t *.
+        * 
+        * @warning array of ike_proposal_t has to get destroyed by the caller
+        * 
+        * @param this                          calling object
+        * @param proposals                     first proposal in a array
+        * @return                                      number of proposals in array
+        */
+       size_t (*get_proposals) (init_config_t *this,ike_proposal_t **proposals);
+       
+       /**
+        * Adds a proposal with given priority to the current stored proposals
+        * 
+        * If allready a proposal with given priority is stored the other one is 
+        * moved one priority back. If priority is higher then all other stored 
+        * proposals, it is inserted as last one.
+        * 
+        * @param this                          calling object
+        * @param priority                      priority of adding proposal
+        * @param proposal                      proposal to add
+        */
+       void (*add_proposal) (init_config_t *this,size_t priority, ike_proposal_t proposal);
+       
+       /**
+        * Select a proposed from suggested proposals.
+        * 
+        * 
+        * @param this                                  calling object
+        * @param suggested_proposals   first proposal in a array
+        * @param proposal_count                number of suggested proposals in array
+        * @param selected_proposal             the ike_proposal_t pointing to is set
+        * @return                                              
+        *                                                              - SUCCESS if a proposal was selected
+        *                                                              - NOT_FOUND if none of suggested proposals is supported
+        */
+       status_t (*select_proposal) (init_config_t *this, ike_proposal_t *proposals, size_t proposal_count, ike_proposal_t *selected_proposal);
+       
+       /**
+        * Destroys a init_config_t object.
+        * 
+        * @param this  calling object
+        */
+       void (*destroy) (init_config_t *this);
+};
+
+/**
+ * Creates a init_config_t object.
+ * 
+ * @return  pointer to created init_config_t object.
+ * 
+ * @ingroup config
+ */
+init_config_t * init_config_create(char * my_ip, char *other_ip, u_int16_t my_port, u_int16_t other_port);
+
 #endif //_INIT_CONFIG_H_