diff options
author | Martin Willi <martin@revosec.ch> | 2012-08-27 14:09:47 +0200 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2012-08-30 16:43:42 +0200 |
commit | feb8550401c85218523c007f0d52a1c9bf006342 (patch) | |
tree | 71b28e039b7f2e1cc574b977c5952b2af8bc2a41 /src/libhydra/attributes/attribute_manager.c | |
parent | 96c2b3cf89aa1825d70c51ddb3d800ed4720d6c0 (diff) | |
download | strongswan-feb8550401c85218523c007f0d52a1c9bf006342.tar.bz2 strongswan-feb8550401c85218523c007f0d52a1c9bf006342.tar.xz |
Pass a list instead of a single virtual IP to attribute enumerators
Diffstat (limited to 'src/libhydra/attributes/attribute_manager.c')
-rw-r--r-- | src/libhydra/attributes/attribute_manager.c | 46 |
1 files changed, 25 insertions, 21 deletions
diff --git a/src/libhydra/attributes/attribute_manager.c b/src/libhydra/attributes/attribute_manager.c index 250302356..b1c2c9555 100644 --- a/src/libhydra/attributes/attribute_manager.c +++ b/src/libhydra/attributes/attribute_manager.c @@ -55,8 +55,8 @@ typedef struct { char *pool; /** server/peer identity */ identification_t *id; - /** requesting/assigned virtual IP */ - host_t *vip; + /** requesting/assigned virtual IPs */ + linked_list_t *vips; } enum_data_t; METHOD(attribute_manager_t, acquire_address, host_t*, @@ -118,18 +118,20 @@ static enumerator_t *responder_enum_create(attribute_provider_t *provider, enum_data_t *data) { return provider->create_attribute_enumerator(provider, data->pool, - data->id, data->vip); + data->id, data->vips); } METHOD(attribute_manager_t, create_responder_enumerator, enumerator_t*, private_attribute_manager_t *this, char *pool, identification_t *id, - host_t *vip) + linked_list_t *vips) { - enum_data_t *data = malloc_thing(enum_data_t); + enum_data_t *data; - data->pool = pool; - data->id = id; - data->vip = vip; + INIT(data, + .pool = pool, + .id = id, + .vips = vips, + ); this->lock->read_lock(this->lock); return enumerator_create_cleaner( enumerator_create_nested( @@ -235,8 +237,8 @@ typedef struct { enumerator_t *inner; /** server ID we want attributes for */ identification_t *id; - /** virtual IP we are requesting along with attriubutes */ - host_t *vip; + /** virtual IPs we are requesting along with attriubutes */ + linked_list_t *vips; } initiator_enumerator_t; /** @@ -256,7 +258,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->vip); + this->id, this->vips); } /* inject the handler as additional attribute */ *handler = this->handler; @@ -275,20 +277,22 @@ 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, host_t *vip) + private_attribute_manager_t *this, identification_t *id, linked_list_t *vips) { - initiator_enumerator_t *enumerator = malloc_thing(initiator_enumerator_t); + initiator_enumerator_t *enumerator; this->lock->read_lock(this->lock); - enumerator->public.enumerate = (void*)initiator_enumerate; - enumerator->public.destroy = (void*)initiator_destroy; - enumerator->this = this; - enumerator->id = id; - enumerator->vip = vip; - enumerator->outer = this->handlers->create_enumerator(this->handlers); - enumerator->inner = NULL; - enumerator->handler = NULL; + INIT(enumerator, + .public = { + .enumerate = (void*)initiator_enumerate, + .destroy = (void*)initiator_destroy, + }, + .this = this, + .id = id, + .vips = vips, + .outer = this->handlers->create_enumerator(this->handlers), + ); return &enumerator->public; } |