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/libcharon/plugins/dhcp/dhcp_provider.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/libcharon/plugins/dhcp/dhcp_provider.c')
-rw-r--r-- | src/libcharon/plugins/dhcp/dhcp_provider.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/libcharon/plugins/dhcp/dhcp_provider.c b/src/libcharon/plugins/dhcp/dhcp_provider.c index a6a887780..705063493 100644 --- a/src/libcharon/plugins/dhcp/dhcp_provider.c +++ b/src/libcharon/plugins/dhcp/dhcp_provider.c @@ -130,17 +130,24 @@ METHOD(attribute_provider_t, release_address, bool, METHOD(attribute_provider_t, create_attribute_enumerator, enumerator_t*, private_dhcp_provider_t *this, char *pool, identification_t *id, - host_t *vip) + linked_list_t *vips) { - dhcp_transaction_t *transaction; + dhcp_transaction_t *transaction = NULL; + enumerator_t *enumerator; + host_t *vip; - if (!vip) + this->mutex->lock(this->mutex); + enumerator = vips->create_enumerator(vips); + while (enumerator->enumerate(enumerator, &vip)) { - return NULL; + transaction = this->transactions->get(this->transactions, + (void*)hash_id_host(id, vip)); + if (transaction) + { + break; + } } - this->mutex->lock(this->mutex); - transaction = this->transactions->get(this->transactions, - (void*)hash_id_host(id, vip)); + enumerator->destroy(enumerator); if (!transaction) { this->mutex->unlock(this->mutex); |