Replaced ike_sa_t.create_additional_address_iterator with enumerator.

This commit is contained in:
Tobias Brunner
2011-07-06 09:43:45 +02:00
parent 4bbce1ef37
commit 572abc6cbd
4 changed files with 37 additions and 35 deletions
+4 -4
View File
@@ -143,7 +143,7 @@ METHOD(listener_t, ike_updown, bool,
if (up) if (up)
{ {
iterator_t *iterator; enumerator_t *enumerator;
peer_cfg_t *peer_cfg; peer_cfg_t *peer_cfg;
u_int32_t extension, condition; u_int32_t extension, condition;
host_t *addr; host_t *addr;
@@ -180,12 +180,12 @@ METHOD(listener_t, ike_updown, bool,
m->add_attribute(m, HA_CONDITIONS, condition); m->add_attribute(m, HA_CONDITIONS, condition);
m->add_attribute(m, HA_EXTENSIONS, extension); m->add_attribute(m, HA_EXTENSIONS, extension);
m->add_attribute(m, HA_CONFIG_NAME, peer_cfg->get_name(peer_cfg)); m->add_attribute(m, HA_CONFIG_NAME, peer_cfg->get_name(peer_cfg));
iterator = ike_sa->create_additional_address_iterator(ike_sa); enumerator = ike_sa->create_additional_address_enumerator(ike_sa);
while (iterator->iterate(iterator, (void**)&addr)) while (enumerator->enumerate(enumerator, (void**)&addr))
{ {
m->add_attribute(m, HA_ADDITIONAL_ADDR, addr); m->add_attribute(m, HA_ADDITIONAL_ADDR, addr);
} }
iterator->destroy(iterator); enumerator->destroy(enumerator);
} }
else else
{ {
+19 -4
View File
@@ -774,11 +774,25 @@ METHOD(ike_sa_t, add_additional_address, void,
this->additional_addresses->insert_last(this->additional_addresses, host); this->additional_addresses->insert_last(this->additional_addresses, host);
} }
METHOD(ike_sa_t, create_additional_address_iterator, iterator_t*, METHOD(ike_sa_t, create_additional_address_enumerator, enumerator_t*,
private_ike_sa_t *this) private_ike_sa_t *this)
{ {
return this->additional_addresses->create_iterator( return this->additional_addresses->create_enumerator(
this->additional_addresses, TRUE); this->additional_addresses);
}
METHOD(ike_sa_t, remove_additional_addresses, void,
private_ike_sa_t *this)
{
enumerator_t *enumerator = create_additional_address_enumerator(this);
host_t *host;
while (enumerator->enumerate(enumerator, (void**)&host))
{
this->additional_addresses->remove_at(this->additional_addresses,
enumerator);
host->destroy(host);
}
enumerator->destroy(enumerator);
} }
METHOD(ike_sa_t, has_mapping_changed, bool, METHOD(ike_sa_t, has_mapping_changed, bool,
@@ -2114,8 +2128,9 @@ ike_sa_t * ike_sa_create(ike_sa_id_t *ike_sa_id)
.has_condition = _has_condition, .has_condition = _has_condition,
.set_pending_updates = _set_pending_updates, .set_pending_updates = _set_pending_updates,
.get_pending_updates = _get_pending_updates, .get_pending_updates = _get_pending_updates,
.create_additional_address_iterator = _create_additional_address_iterator, .create_additional_address_enumerator = _create_additional_address_enumerator,
.add_additional_address = _add_additional_address, .add_additional_address = _add_additional_address,
.remove_additional_addresses = _remove_additional_addresses,
.has_mapping_changed = _has_mapping_changed, .has_mapping_changed = _has_mapping_changed,
.retransmit = _retransmit, .retransmit = _retransmit,
.delete = _delete_, .delete = _delete_,
+8 -3
View File
@@ -472,11 +472,16 @@ struct ike_sa_t {
void (*add_additional_address)(ike_sa_t *this, host_t *host); void (*add_additional_address)(ike_sa_t *this, host_t *host);
/** /**
* Create an iterator over all additional addresses of the peer. * Create an enumerator over all additional addresses of the peer.
* *
* @return iterator over addresses * @return enumerator over addresses
*/ */
iterator_t* (*create_additional_address_iterator)(ike_sa_t *this); enumerator_t* (*create_additional_address_enumerator)(ike_sa_t *this);
/**
* Remove all additional addresses of the peer.
*/
void (*remove_additional_addresses)(ike_sa_t *this);
/** /**
* Check if mappings have changed on a NAT for our source address. * Check if mappings have changed on a NAT for our source address.
+6 -24
View File
@@ -78,24 +78,6 @@ struct private_ike_mobike_t {
bool addresses_updated; bool addresses_updated;
}; };
/**
* flush the IKE_SAs list of additional addresses
*/
static void flush_additional_addresses(private_ike_mobike_t *this)
{
iterator_t *iterator;
host_t *host;
iterator = this->ike_sa->create_additional_address_iterator(this->ike_sa);
while (iterator->iterate(iterator, (void**)&host))
{
iterator->remove(iterator);
host->destroy(host);
}
iterator->destroy(iterator);
}
/** /**
* read notifys from message and evaluate them * read notifys from message and evaluate them
*/ */
@@ -152,7 +134,7 @@ static void process_payloads(private_ike_mobike_t *this, message_t *message)
{ {
if (first) if (first)
{ /* an ADDITIONAL_*_ADDRESS means replace, so flush once */ { /* an ADDITIONAL_*_ADDRESS means replace, so flush once */
flush_additional_addresses(this); this->ike_sa->remove_additional_addresses(this->ike_sa);
first = FALSE; first = FALSE;
} }
data = notify->get_notification_data(notify); data = notify->get_notification_data(notify);
@@ -169,7 +151,7 @@ static void process_payloads(private_ike_mobike_t *this, message_t *message)
} }
case NO_ADDITIONAL_ADDRESSES: case NO_ADDITIONAL_ADDRESSES:
{ {
flush_additional_addresses(this); this->ike_sa->remove_additional_addresses(this->ike_sa);
this->addresses_updated = TRUE; this->addresses_updated = TRUE;
break; break;
} }
@@ -296,7 +278,7 @@ METHOD(ike_mobike_t, transmit, void,
private_ike_mobike_t *this, packet_t *packet) private_ike_mobike_t *this, packet_t *packet)
{ {
host_t *me, *other, *me_old, *other_old; host_t *me, *other, *me_old, *other_old;
iterator_t *iterator; enumerator_t *enumerator;
ike_cfg_t *ike_cfg; ike_cfg_t *ike_cfg;
packet_t *copy; packet_t *copy;
@@ -320,8 +302,8 @@ METHOD(ike_mobike_t, transmit, void,
charon->sender->send(charon->sender, copy); charon->sender->send(charon->sender, copy);
} }
iterator = this->ike_sa->create_additional_address_iterator(this->ike_sa); enumerator = this->ike_sa->create_additional_address_enumerator(this->ike_sa);
while (iterator->iterate(iterator, (void**)&other)) while (enumerator->enumerate(enumerator, (void**)&other))
{ {
me = hydra->kernel_interface->get_source_addr( me = hydra->kernel_interface->get_source_addr(
hydra->kernel_interface, other, NULL); hydra->kernel_interface, other, NULL);
@@ -343,7 +325,7 @@ METHOD(ike_mobike_t, transmit, void,
charon->sender->send(charon->sender, copy); charon->sender->send(charon->sender, copy);
} }
} }
iterator->destroy(iterator); enumerator->destroy(enumerator);
} }
METHOD(task_t, build_i, status_t, METHOD(task_t, build_i, status_t,