Refactor check_for_rekeyed_child() in quick_mode task

This commit is contained in:
Martin Willi
2013-04-03 17:08:00 +02:00
parent ac48d9e458
commit bee8b5e385
+16 -10
View File
@@ -921,22 +921,25 @@ static void check_for_rekeyed_child(private_quick_mode_t *this)
enumerator_t *enumerator, *policies; enumerator_t *enumerator, *policies;
traffic_selector_t *local, *remote; traffic_selector_t *local, *remote;
child_sa_t *child_sa; child_sa_t *child_sa;
proposal_t *proposal;
char *name;
name = this->config->get_name(this->config);
enumerator = this->ike_sa->create_child_sa_enumerator(this->ike_sa); enumerator = this->ike_sa->create_child_sa_enumerator(this->ike_sa);
while (this->reqid == 0 && enumerator->enumerate(enumerator, &child_sa)) while (this->reqid == 0 && enumerator->enumerate(enumerator, &child_sa))
{ {
if ((child_sa->get_state(child_sa) == CHILD_INSTALLED || if (streq(child_sa->get_name(child_sa), name))
child_sa->get_state(child_sa) == CHILD_REKEYING) &&
streq(child_sa->get_name(child_sa),
this->config->get_name(this->config)))
{ {
proposal = child_sa->get_proposal(child_sa);
switch (child_sa->get_state(child_sa))
{
case CHILD_INSTALLED:
case CHILD_REKEYING:
policies = child_sa->create_policy_enumerator(child_sa); policies = child_sa->create_policy_enumerator(child_sa);
if (policies->enumerate(policies, &local, &remote)) if (policies->enumerate(policies, &local, &remote) &&
{ local->equals(local, this->tsr) &&
if (local->equals(local, this->tsr) &&
remote->equals(remote, this->tsi) && remote->equals(remote, this->tsi) &&
this->proposal->equals(this->proposal, this->proposal->equals(this->proposal, proposal))
child_sa->get_proposal(child_sa)))
{ {
this->reqid = child_sa->get_reqid(child_sa); this->reqid = child_sa->get_reqid(child_sa);
this->rekey = child_sa->get_spi(child_sa, TRUE); this->rekey = child_sa->get_spi(child_sa, TRUE);
@@ -944,8 +947,11 @@ static void check_for_rekeyed_child(private_quick_mode_t *this)
DBG1(DBG_IKE, "detected rekeying of CHILD_SA %s{%u}", DBG1(DBG_IKE, "detected rekeying of CHILD_SA %s{%u}",
child_sa->get_name(child_sa), this->reqid); child_sa->get_name(child_sa), this->reqid);
} }
}
policies->destroy(policies); policies->destroy(policies);
break;
default:
break;
}
} }
} }
enumerator->destroy(enumerator); enumerator->destroy(enumerator);