diff options
Diffstat (limited to 'Source/charon/config/init_config.c')
-rw-r--r-- | Source/charon/config/init_config.c | 38 |
1 files changed, 33 insertions, 5 deletions
diff --git a/Source/charon/config/init_config.c b/Source/charon/config/init_config.c index 495feb7ab..27f669b9d 100644 --- a/Source/charon/config/init_config.c +++ b/Source/charon/config/init_config.c @@ -24,6 +24,7 @@ #include <utils/allocator.h> #include <utils/linked_list.h> +#include <utils/logger.h> typedef struct private_init_config_t private_init_config_t; @@ -58,7 +59,7 @@ struct private_init_config_t { */ static host_t * get_my_host (private_init_config_t *this) { - return this->my_host->clone(this->my_host); + return this->my_host; } /** @@ -66,6 +67,22 @@ static host_t * get_my_host (private_init_config_t *this) */ static host_t * get_other_host (private_init_config_t *this) { + return this->other_host; +} + +/** + * Implementation of init_config_t.get_my_host_clone. + */ +static host_t * get_my_host_clone (private_init_config_t *this) +{ + return this->my_host->clone(this->my_host); +} + +/** + * Implementation of init_config_t.get_other_host_clone. + */ +static host_t * get_other_host_clone (private_init_config_t *this) +{ return this->other_host->clone(this->other_host); } @@ -131,13 +148,21 @@ static status_t select_proposal (private_init_config_t *this, ike_proposal_t *pr { my_iterator->current(my_iterator,(void **) &my_current_proposal); - if (memcmp(my_current_proposal,&proposals[i],sizeof(ike_proposal_t)) == 0) + /* memcmp doesn't work here */ + if ((proposals[i].encryption_algorithm == my_current_proposal->encryption_algorithm) && + (proposals[i].encryption_algorithm_key_length == my_current_proposal->encryption_algorithm_key_length) && + (proposals[i].integrity_algorithm == my_current_proposal->integrity_algorithm) && + (proposals[i].integrity_algorithm_key_length == my_current_proposal->integrity_algorithm_key_length) && + (proposals[i].pseudo_random_function == my_current_proposal->pseudo_random_function) && + (proposals[i].pseudo_random_function_key_length == my_current_proposal->pseudo_random_function_key_length) && + (proposals[i].diffie_hellman_group == my_current_proposal->diffie_hellman_group)) { /* found a matching proposal */ *selected_proposal = *my_current_proposal; my_iterator->destroy(my_iterator); return SUCCESS; } + } } @@ -151,6 +176,7 @@ static status_t select_proposal (private_init_config_t *this, ike_proposal_t *pr static void add_proposal (private_init_config_t *this,size_t priority, ike_proposal_t proposal) { ike_proposal_t * new_proposal = allocator_alloc(sizeof(ike_proposal_t)); + status_t status; *new_proposal = proposal; @@ -161,7 +187,8 @@ static void add_proposal (private_init_config_t *this,size_t priority, ike_propo return; } - this->proposals->insert_at_position(this->proposals,(priority - 1),new_proposal); + status = this->proposals->insert_at_position(this->proposals,(priority - 1),new_proposal); + } /** @@ -180,7 +207,6 @@ static void destroy (private_init_config_t *this) this->my_host->destroy(this->my_host); this->other_host->destroy(this->other_host); - allocator_free(this); } @@ -194,6 +220,8 @@ init_config_t * init_config_create(char * my_ip, char *other_ip, u_int16_t my_po /* public functions */ this->public.get_my_host = (host_t*(*)(init_config_t*))get_my_host; this->public.get_other_host = (host_t*(*)(init_config_t*))get_other_host; + this->public.get_my_host_clone = (host_t*(*)(init_config_t*))get_my_host_clone; + this->public.get_other_host_clone = (host_t*(*)(init_config_t*))get_other_host_clone; this->public.get_dh_group_number = (diffie_hellman_group_t (*)(init_config_t*,size_t))get_dh_group_number; this->public.get_proposals = (size_t(*)(init_config_t*,ike_proposal_t**))get_proposals; this->public.select_proposal = (status_t(*)(init_config_t*,ike_proposal_t*,size_t,ike_proposal_t*))select_proposal; @@ -203,7 +231,7 @@ init_config_t * init_config_create(char * my_ip, char *other_ip, u_int16_t my_po /* private variables */ this->my_host = host_create(AF_INET,my_ip, my_port); this->other_host = host_create(AF_INET,other_ip, other_port); - + this->proposals = linked_list_create(); return (&this->public); |