accepting stroke initiation by a name of a child_cfg
This commit is contained in:
parent
90faff8e5a
commit
de55c6895f
|
@ -171,20 +171,38 @@ static peer_cfg_t *get_peer_cfg(private_local_backend_t *this,
|
||||||
static peer_cfg_t *get_peer_cfg_by_name(private_local_backend_t *this,
|
static peer_cfg_t *get_peer_cfg_by_name(private_local_backend_t *this,
|
||||||
char *name)
|
char *name)
|
||||||
{
|
{
|
||||||
iterator_t *iterator;
|
iterator_t *i1, *i2;
|
||||||
peer_cfg_t *current, *found = NULL;
|
peer_cfg_t *current, *found = NULL;
|
||||||
|
child_cfg_t *child;
|
||||||
|
|
||||||
iterator = this->cfgs->create_iterator(this->cfgs, TRUE);
|
i1 = this->cfgs->create_iterator(this->cfgs, TRUE);
|
||||||
while (iterator->iterate(iterator, (void**)¤t))
|
while (i1->iterate(i1, (void**)¤t))
|
||||||
{
|
{
|
||||||
|
/* compare peer_cfgs name first */
|
||||||
if (streq(current->get_name(current), name))
|
if (streq(current->get_name(current), name))
|
||||||
{
|
{
|
||||||
found = current;
|
found = current;
|
||||||
found->get_ref(found);
|
found->get_ref(found);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
/* compare all child_cfg names otherwise */
|
||||||
|
i2 = current->create_child_cfg_iterator(current);
|
||||||
|
while (i2->iterate(i2, (void**)&child))
|
||||||
|
{
|
||||||
|
if (streq(child->get_name(child), name))
|
||||||
|
{
|
||||||
|
found = current;
|
||||||
|
found->get_ref(found);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
i2->destroy(i2);
|
||||||
|
if (found)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
iterator->destroy(iterator);
|
i1->destroy(i1);
|
||||||
return found;
|
return found;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -224,8 +242,8 @@ local_backend_t *local_backend_create(void)
|
||||||
|
|
||||||
this->public.backend.get_ike_cfg = (ike_cfg_t*(*)(backend_t*, host_t *, host_t *))get_ike_cfg;
|
this->public.backend.get_ike_cfg = (ike_cfg_t*(*)(backend_t*, host_t *, host_t *))get_ike_cfg;
|
||||||
this->public.backend.get_peer_cfg = (peer_cfg_t*(*)(backend_t*, identification_t *, identification_t *))get_peer_cfg;
|
this->public.backend.get_peer_cfg = (peer_cfg_t*(*)(backend_t*, identification_t *, identification_t *))get_peer_cfg;
|
||||||
this->public.backend.get_peer_cfg_by_name = (peer_cfg_t*(*)(backend_t*, char *))get_peer_cfg_by_name;
|
this->public.create_peer_cfg_iterator = (iterator_t*(*)(local_backend_t*))create_peer_cfg_iterator;
|
||||||
this->public.create_peer_cfg_iterator = (iterator_t*(*)(local_backend_t*))create_peer_cfg_iterator;
|
this->public.get_peer_cfg_by_name = (peer_cfg_t*(*)(local_backend_t*, char *))get_peer_cfg_by_name;
|
||||||
this->public.add_peer_cfg = (void(*)(local_backend_t*, peer_cfg_t *))add_peer_cfg;
|
this->public.add_peer_cfg = (void(*)(local_backend_t*, peer_cfg_t *))add_peer_cfg;
|
||||||
this->public.destroy = (void(*)(local_backend_t*))destroy;
|
this->public.destroy = (void(*)(local_backend_t*))destroy;
|
||||||
|
|
||||||
|
|
|
@ -54,6 +54,15 @@ struct local_backend_t {
|
||||||
*/
|
*/
|
||||||
void (*add_peer_cfg)(local_backend_t *this, peer_cfg_t *config);
|
void (*add_peer_cfg)(local_backend_t *this, peer_cfg_t *config);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get a peer_config identified by name, or a name of its child_cfgs.
|
||||||
|
*
|
||||||
|
* @param this calling object
|
||||||
|
* @param name name of the peer config
|
||||||
|
* @return matching peer_config, or NULL if none found
|
||||||
|
*/
|
||||||
|
peer_cfg_t *(*get_peer_cfg_by_name)(local_backend_t *this, char *name);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Create an iterator over all peer configs.
|
* @brief Create an iterator over all peer configs.
|
||||||
*
|
*
|
||||||
|
|
|
@ -88,23 +88,6 @@ static peer_cfg_t *get_peer_cfg(private_cfg_store_t *this,
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* implements cfg_store_t.get_peer_by_name.
|
|
||||||
*/
|
|
||||||
static peer_cfg_t *get_peer_cfg_by_name(private_cfg_store_t *this, char *name)
|
|
||||||
{
|
|
||||||
backend_t *backend;
|
|
||||||
peer_cfg_t *config = NULL;
|
|
||||||
iterator_t *iterator = this->backends->create_iterator_locked(
|
|
||||||
this->backends, &this->mutex);
|
|
||||||
while (config == NULL && iterator->iterate(iterator, (void**)&backend))
|
|
||||||
{
|
|
||||||
config = backend->get_peer_cfg_by_name(backend, name);
|
|
||||||
}
|
|
||||||
iterator->destroy(iterator);
|
|
||||||
return config;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* implements cfg_store_t.register_backend.
|
* implements cfg_store_t.register_backend.
|
||||||
*/
|
*/
|
||||||
|
@ -152,7 +135,6 @@ cfg_store_t *cfg_store_create()
|
||||||
|
|
||||||
this->public.get_ike_cfg = (ike_cfg_t*(*)(cfg_store_t*, host_t *, host_t *))get_ike_cfg;
|
this->public.get_ike_cfg = (ike_cfg_t*(*)(cfg_store_t*, host_t *, host_t *))get_ike_cfg;
|
||||||
this->public.get_peer_cfg = (peer_cfg_t*(*)(cfg_store_t*, identification_t *, identification_t *))get_peer_cfg;
|
this->public.get_peer_cfg = (peer_cfg_t*(*)(cfg_store_t*, identification_t *, identification_t *))get_peer_cfg;
|
||||||
this->public.get_peer_cfg_by_name = (peer_cfg_t*(*)(cfg_store_t*, char *name))get_peer_cfg_by_name;
|
|
||||||
this->public.register_backend = (void(*)(cfg_store_t*, backend_t *))register_backend;
|
this->public.register_backend = (void(*)(cfg_store_t*, backend_t *))register_backend;
|
||||||
this->public.unregister_backend = (void(*)(cfg_store_t*, backend_t *))unregister_backend;
|
this->public.unregister_backend = (void(*)(cfg_store_t*, backend_t *))unregister_backend;
|
||||||
this->public.destroy = (void(*)(cfg_store_t*))destroy;
|
this->public.destroy = (void(*)(cfg_store_t*))destroy;
|
||||||
|
|
|
@ -90,15 +90,6 @@ struct cfg_store_t {
|
||||||
peer_cfg_t *(*get_peer_cfg)(cfg_store_t *this, identification_t *my_id,
|
peer_cfg_t *(*get_peer_cfg)(cfg_store_t *this, identification_t *my_id,
|
||||||
identification_t *other_id);
|
identification_t *other_id);
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Get a peer_config identified by its name.
|
|
||||||
*
|
|
||||||
* @param this calling object
|
|
||||||
* @param name name of the peer config
|
|
||||||
* @return matching peer_config, or NULL if none found
|
|
||||||
*/
|
|
||||||
peer_cfg_t *(*get_peer_cfg_by_name)(cfg_store_t *this, char *name);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Register a backend to be queried by the calls above.
|
* @brief Register a backend to be queried by the calls above.
|
||||||
*
|
*
|
||||||
|
|
|
@ -617,7 +617,7 @@ static void stroke_del_conn(private_stroke_interface_t *this,
|
||||||
/**
|
/**
|
||||||
* get the child_cfg with the same name as the peer cfg
|
* get the child_cfg with the same name as the peer cfg
|
||||||
*/
|
*/
|
||||||
static child_cfg_t* get_child_from_peer(peer_cfg_t *peer_cfg)
|
static child_cfg_t* get_child_from_peer(peer_cfg_t *peer_cfg, char *name)
|
||||||
{
|
{
|
||||||
child_cfg_t *current, *found = NULL;
|
child_cfg_t *current, *found = NULL;
|
||||||
iterator_t *iterator;
|
iterator_t *iterator;
|
||||||
|
@ -625,7 +625,7 @@ static child_cfg_t* get_child_from_peer(peer_cfg_t *peer_cfg)
|
||||||
iterator = peer_cfg->create_child_cfg_iterator(peer_cfg);
|
iterator = peer_cfg->create_child_cfg_iterator(peer_cfg);
|
||||||
while (iterator->iterate(iterator, (void**)¤t))
|
while (iterator->iterate(iterator, (void**)¤t))
|
||||||
{
|
{
|
||||||
if (streq(current->get_name(current), peer_cfg->get_name(peer_cfg)))
|
if (streq(current->get_name(current), name))
|
||||||
{
|
{
|
||||||
found = current;
|
found = current;
|
||||||
found->get_ref(found);
|
found->get_ref(found);
|
||||||
|
@ -651,8 +651,8 @@ static void stroke_initiate(private_stroke_interface_t *this,
|
||||||
pop_string(msg, &(msg->initiate.name));
|
pop_string(msg, &(msg->initiate.name));
|
||||||
DBG1(DBG_CFG, "received stroke: initiate '%s'", msg->initiate.name);
|
DBG1(DBG_CFG, "received stroke: initiate '%s'", msg->initiate.name);
|
||||||
|
|
||||||
peer_cfg = charon->cfg_store->get_peer_cfg_by_name(charon->cfg_store,
|
peer_cfg = this->backend->get_peer_cfg_by_name(this->backend,
|
||||||
msg->initiate.name);
|
msg->initiate.name);
|
||||||
if (peer_cfg == NULL)
|
if (peer_cfg == NULL)
|
||||||
{
|
{
|
||||||
if (msg->output_verbosity >= 0)
|
if (msg->output_verbosity >= 0)
|
||||||
|
@ -669,7 +669,7 @@ static void stroke_initiate(private_stroke_interface_t *this,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
child_cfg = get_child_from_peer(peer_cfg);
|
child_cfg = get_child_from_peer(peer_cfg, msg->initiate.name);
|
||||||
if (child_cfg == NULL)
|
if (child_cfg == NULL)
|
||||||
{
|
{
|
||||||
if (msg->output_verbosity >= 0)
|
if (msg->output_verbosity >= 0)
|
||||||
|
@ -743,8 +743,7 @@ static void stroke_route(private_stroke_interface_t *this,
|
||||||
DBG1(DBG_CFG, "received stroke: %s '%s'",
|
DBG1(DBG_CFG, "received stroke: %s '%s'",
|
||||||
route ? "route" : "unroute", msg->route.name);
|
route ? "route" : "unroute", msg->route.name);
|
||||||
|
|
||||||
peer_cfg = charon->cfg_store->get_peer_cfg_by_name(charon->cfg_store,
|
peer_cfg = this->backend->get_peer_cfg_by_name(this->backend, msg->route.name);
|
||||||
msg->route.name);
|
|
||||||
if (peer_cfg == NULL)
|
if (peer_cfg == NULL)
|
||||||
{
|
{
|
||||||
fprintf(out, "no config named '%s'\n", msg->route.name);
|
fprintf(out, "no config named '%s'\n", msg->route.name);
|
||||||
|
@ -756,7 +755,7 @@ static void stroke_route(private_stroke_interface_t *this,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
child_cfg = get_child_from_peer(peer_cfg);
|
child_cfg = get_child_from_peer(peer_cfg, msg->route.name);
|
||||||
if (child_cfg == NULL)
|
if (child_cfg == NULL)
|
||||||
{
|
{
|
||||||
fprintf(out, "no child config named '%s'\n", msg->route.name);
|
fprintf(out, "no child config named '%s'\n", msg->route.name);
|
||||||
|
|
Loading…
Reference in New Issue