mirror of
https://github.com/strongswan/strongswan.git
synced 2025-11-28 00:00:40 -05:00
backend-manager: Simplify sorting peer configs
This commit is contained in:
parent
80c9ae4521
commit
82e237c04e
@ -1,4 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
|
* Copyright (C) 2018 Tobias Brunner
|
||||||
* Copyright (C) 2007-2009 Martin Willi
|
* Copyright (C) 2007-2009 Martin Willi
|
||||||
* HSR Hochschule fuer Technik Rapperswil
|
* HSR Hochschule fuer Technik Rapperswil
|
||||||
*
|
*
|
||||||
@ -295,34 +296,26 @@ CALLBACK(peer_enum_filter_destroy, void,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Insert entry into match-sorted list, using helper
|
* Insert entry into match-sorted list
|
||||||
*/
|
*/
|
||||||
static void insert_sorted(match_entry_t *entry, linked_list_t *list,
|
static void insert_sorted(match_entry_t *entry, linked_list_t *list)
|
||||||
linked_list_t *helper)
|
|
||||||
{
|
{
|
||||||
|
enumerator_t *enumerator;
|
||||||
match_entry_t *current;
|
match_entry_t *current;
|
||||||
|
|
||||||
while (list->remove_first(list, (void**)¤t) == SUCCESS)
|
enumerator = list->create_enumerator(list);
|
||||||
|
while (enumerator->enumerate(enumerator, ¤t))
|
||||||
{
|
{
|
||||||
helper->insert_last(helper, current);
|
if ((entry->match_ike > current->match_ike &&
|
||||||
}
|
entry->match_peer >= current->match_peer) ||
|
||||||
while (helper->remove_first(helper, (void**)¤t) == SUCCESS)
|
(entry->match_ike >= current->match_ike &&
|
||||||
{
|
entry->match_peer > current->match_peer))
|
||||||
if (entry && (
|
|
||||||
(entry->match_ike > current->match_ike &&
|
|
||||||
entry->match_peer >= current->match_peer) ||
|
|
||||||
(entry->match_ike >= current->match_ike &&
|
|
||||||
entry->match_peer > current->match_peer)))
|
|
||||||
{
|
{
|
||||||
list->insert_last(list, entry);
|
break;
|
||||||
entry = NULL;
|
|
||||||
}
|
}
|
||||||
list->insert_last(list, current);
|
|
||||||
}
|
|
||||||
if (entry)
|
|
||||||
{
|
|
||||||
list->insert_last(list, entry);
|
|
||||||
}
|
}
|
||||||
|
list->insert_before(list, enumerator, entry);
|
||||||
|
enumerator->destroy(enumerator);
|
||||||
}
|
}
|
||||||
|
|
||||||
METHOD(backend_manager_t, create_peer_cfg_enumerator, enumerator_t*,
|
METHOD(backend_manager_t, create_peer_cfg_enumerator, enumerator_t*,
|
||||||
@ -332,7 +325,7 @@ METHOD(backend_manager_t, create_peer_cfg_enumerator, enumerator_t*,
|
|||||||
enumerator_t *enumerator;
|
enumerator_t *enumerator;
|
||||||
peer_data_t *data;
|
peer_data_t *data;
|
||||||
peer_cfg_t *cfg;
|
peer_cfg_t *cfg;
|
||||||
linked_list_t *configs, *helper;
|
linked_list_t *configs;
|
||||||
|
|
||||||
INIT(data,
|
INIT(data,
|
||||||
.lock = this->lock,
|
.lock = this->lock,
|
||||||
@ -352,8 +345,6 @@ METHOD(backend_manager_t, create_peer_cfg_enumerator, enumerator_t*,
|
|||||||
}
|
}
|
||||||
|
|
||||||
configs = linked_list_create();
|
configs = linked_list_create();
|
||||||
/* only once allocated helper list for sorting */
|
|
||||||
helper = linked_list_create();
|
|
||||||
while (enumerator->enumerate(enumerator, &cfg))
|
while (enumerator->enumerate(enumerator, &cfg))
|
||||||
{
|
{
|
||||||
id_match_t match_peer_me, match_peer_other;
|
id_match_t match_peer_me, match_peer_other;
|
||||||
@ -376,11 +367,10 @@ METHOD(backend_manager_t, create_peer_cfg_enumerator, enumerator_t*,
|
|||||||
.match_ike = match_ike,
|
.match_ike = match_ike,
|
||||||
.cfg = cfg->get_ref(cfg),
|
.cfg = cfg->get_ref(cfg),
|
||||||
);
|
);
|
||||||
insert_sorted(entry, configs, helper);
|
insert_sorted(entry, configs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
enumerator->destroy(enumerator);
|
enumerator->destroy(enumerator);
|
||||||
helper->destroy(helper);
|
|
||||||
|
|
||||||
return enumerator_create_filter(configs->create_enumerator(configs),
|
return enumerator_create_filter(configs->create_enumerator(configs),
|
||||||
peer_enum_filter, configs,
|
peer_enum_filter, configs,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user