attribute-manager: Pass full IKE_SA to handler methods
This commit is contained in:
parent
a16058a491
commit
a12f357b40
|
@ -162,13 +162,16 @@ METHOD(attribute_manager_t, remove_provider, void,
|
|||
}
|
||||
|
||||
METHOD(attribute_manager_t, handle, attribute_handler_t*,
|
||||
private_attribute_manager_t *this, identification_t *server,
|
||||
private_attribute_manager_t *this, ike_sa_t *ike_sa,
|
||||
attribute_handler_t *handler, configuration_attribute_type_t type,
|
||||
chunk_t data)
|
||||
{
|
||||
enumerator_t *enumerator;
|
||||
identification_t *server;
|
||||
attribute_handler_t *current, *handled = NULL;
|
||||
|
||||
server = ike_sa->get_other_id(ike_sa);
|
||||
|
||||
this->lock->read_lock(this->lock);
|
||||
|
||||
/* try to find the passed handler */
|
||||
|
@ -207,10 +210,13 @@ METHOD(attribute_manager_t, handle, attribute_handler_t*,
|
|||
|
||||
METHOD(attribute_manager_t, release, void,
|
||||
private_attribute_manager_t *this, attribute_handler_t *handler,
|
||||
identification_t *server, configuration_attribute_type_t type, chunk_t data)
|
||||
ike_sa_t *ike_sa, configuration_attribute_type_t type, chunk_t data)
|
||||
{
|
||||
enumerator_t *enumerator;
|
||||
attribute_handler_t *current;
|
||||
identification_t *server;
|
||||
|
||||
server = ike_sa->get_other_id(ike_sa);
|
||||
|
||||
this->lock->read_lock(this->lock);
|
||||
enumerator = this->handlers->create_enumerator(this->handlers);
|
||||
|
@ -240,8 +246,8 @@ typedef struct {
|
|||
enumerator_t *outer;
|
||||
/** inner enumerator over current handlers attributes */
|
||||
enumerator_t *inner;
|
||||
/** server ID we want attributes for */
|
||||
identification_t *id;
|
||||
/** IKE_SA to request attributes for */
|
||||
ike_sa_t *ike_sa;
|
||||
/** virtual IPs we are requesting along with attriubutes */
|
||||
linked_list_t *vips;
|
||||
} initiator_enumerator_t;
|
||||
|
@ -254,6 +260,10 @@ static bool initiator_enumerate(initiator_enumerator_t *this,
|
|||
configuration_attribute_type_t *type,
|
||||
chunk_t *value)
|
||||
{
|
||||
identification_t *id;
|
||||
|
||||
id = this->ike_sa->get_other_id(this->ike_sa);
|
||||
|
||||
/* enumerate inner attributes using outer handler enumerator */
|
||||
while (!this->inner || !this->inner->enumerate(this->inner, type, value))
|
||||
{
|
||||
|
@ -263,7 +273,7 @@ static bool initiator_enumerate(initiator_enumerator_t *this,
|
|||
}
|
||||
DESTROY_IF(this->inner);
|
||||
this->inner = this->handler->create_attribute_enumerator(this->handler,
|
||||
this->id, this->vips);
|
||||
id, this->vips);
|
||||
}
|
||||
/* inject the handler as additional attribute */
|
||||
*handler = this->handler;
|
||||
|
@ -282,7 +292,7 @@ static void initiator_destroy(initiator_enumerator_t *this)
|
|||
}
|
||||
|
||||
METHOD(attribute_manager_t, create_initiator_enumerator, enumerator_t*,
|
||||
private_attribute_manager_t *this, identification_t *id, linked_list_t *vips)
|
||||
private_attribute_manager_t *this, ike_sa_t *ike_sa, linked_list_t *vips)
|
||||
{
|
||||
initiator_enumerator_t *enumerator;
|
||||
|
||||
|
@ -294,7 +304,7 @@ METHOD(attribute_manager_t, create_initiator_enumerator, enumerator_t*,
|
|||
.destroy = (void*)initiator_destroy,
|
||||
},
|
||||
.this = this,
|
||||
.id = id,
|
||||
.ike_sa = ike_sa,
|
||||
.vips = vips,
|
||||
.outer = this->handlers->create_enumerator(this->handlers),
|
||||
);
|
||||
|
|
|
@ -92,38 +92,37 @@ struct attribute_manager_t {
|
|||
/**
|
||||
* Handle a configuration attribute by passing them to the handlers.
|
||||
*
|
||||
* @param server server from which the attribute was received
|
||||
* @param ike_sa associated IKE_SA to handle an attribute for
|
||||
* @param handler handler we requested the attribute for, if any
|
||||
* @param type type of configuration attribute
|
||||
* @param data associated attribute data
|
||||
* @return handler which handled this attribute, NULL if none
|
||||
*/
|
||||
attribute_handler_t* (*handle)(attribute_manager_t *this,
|
||||
identification_t *server, attribute_handler_t *handler,
|
||||
ike_sa_t *ike_sa, attribute_handler_t *handler,
|
||||
configuration_attribute_type_t type, chunk_t data);
|
||||
|
||||
/**
|
||||
* Release an attribute previously handle()d by a handler.
|
||||
*
|
||||
* @param handler handler returned by handle() for this attribute
|
||||
* @param ike_sa associated IKE_SA to release an attribute for
|
||||
* @param server server from which the attribute was received
|
||||
* @param type type of attribute to release
|
||||
* @param data associated attribute data
|
||||
*/
|
||||
void (*release)(attribute_manager_t *this, attribute_handler_t *handler,
|
||||
identification_t *server,
|
||||
configuration_attribute_type_t type,
|
||||
ike_sa_t *ike_sa, configuration_attribute_type_t type,
|
||||
chunk_t data);
|
||||
|
||||
/**
|
||||
* Create an enumerator over attributes to request from server.
|
||||
*
|
||||
* @param id server identity to hand out attributes to
|
||||
* @param ike_sa associated IKE_SA to request attributes for
|
||||
* @param vip list of virtual IPs (host_t*) going to request
|
||||
* @return enumerator (attribute_handler_t, ca_type_t, chunk_t)
|
||||
*/
|
||||
enumerator_t* (*create_initiator_enumerator)(attribute_manager_t *this,
|
||||
identification_t *id, linked_list_t *vips);
|
||||
ike_sa_t *ike_sa, linked_list_t *vips);
|
||||
|
||||
/**
|
||||
* Register an attribute handler to the manager.
|
||||
|
|
|
@ -2347,7 +2347,7 @@ METHOD(ike_sa_t, destroy, void,
|
|||
if (entry.handler)
|
||||
{
|
||||
charon->attributes->release(charon->attributes, entry.handler,
|
||||
this->other_id, entry.type, entry.data);
|
||||
&this->public, entry.type, entry.data);
|
||||
}
|
||||
free(entry.data.ptr);
|
||||
}
|
||||
|
|
|
@ -136,8 +136,7 @@ static void handle_attribute(private_mode_config_t *this,
|
|||
|
||||
/* and pass it to the handle function */
|
||||
handler = charon->attributes->handle(charon->attributes,
|
||||
this->ike_sa->get_other_id(this->ike_sa), handler,
|
||||
ca->get_type(ca), ca->get_chunk(ca));
|
||||
this->ike_sa, handler, ca->get_type(ca), ca->get_chunk(ca));
|
||||
this->ike_sa->add_configuration_attribute(this->ike_sa,
|
||||
handler, ca->get_type(ca), ca->get_chunk(ca));
|
||||
}
|
||||
|
@ -326,8 +325,7 @@ static status_t build_request(private_mode_config_t *this, message_t *message)
|
|||
}
|
||||
|
||||
enumerator = charon->attributes->create_initiator_enumerator(
|
||||
charon->attributes,
|
||||
this->ike_sa->get_other_id(this->ike_sa), vips);
|
||||
charon->attributes, this->ike_sa, vips);
|
||||
while (enumerator->enumerate(enumerator, &handler, &type, &data))
|
||||
{
|
||||
add_attribute(this, cp, type, data, handler);
|
||||
|
|
|
@ -127,8 +127,7 @@ static void handle_attribute(private_ike_config_t *this,
|
|||
|
||||
/* and pass it to the handle function */
|
||||
handler = charon->attributes->handle(charon->attributes,
|
||||
this->ike_sa->get_other_id(this->ike_sa), handler,
|
||||
ca->get_type(ca), ca->get_chunk(ca));
|
||||
this->ike_sa, handler, ca->get_type(ca), ca->get_chunk(ca));
|
||||
this->ike_sa->add_configuration_attribute(this->ike_sa,
|
||||
handler, ca->get_type(ca), ca->get_chunk(ca));
|
||||
}
|
||||
|
@ -274,8 +273,7 @@ METHOD(task_t, build_i, status_t,
|
|||
}
|
||||
|
||||
enumerator = charon->attributes->create_initiator_enumerator(
|
||||
charon->attributes,
|
||||
this->ike_sa->get_other_id(this->ike_sa), vips);
|
||||
charon->attributes, this->ike_sa, vips);
|
||||
while (enumerator->enumerate(enumerator, &handler, &type, &data))
|
||||
{
|
||||
configuration_attribute_t *ca;
|
||||
|
|
Loading…
Reference in New Issue