Use wrapped getters for close/dpd action
authorMartin Willi <martin@revosec.ch>
Wed, 2 Jun 2010 09:41:46 +0000 (11:41 +0200)
committerMartin Willi <martin@revosec.ch>
Wed, 2 Jun 2010 09:48:51 +0000 (11:48 +0200)
src/libcharon/sa/ike_sa.c
src/libcharon/sa/tasks/child_delete.c

index 023f074..0b77f5f 100644 (file)
@@ -1636,14 +1636,13 @@ static status_t reestablish(private_ike_sa_t *this)
        iterator = create_child_sa_iterator(this);
        while (iterator->iterate(iterator, (void**)&child_sa))
        {
-               child_cfg = child_sa->get_config(child_sa);
                if (this->state == IKE_DELETING)
                {
-                       action = child_cfg->get_close_action(child_cfg);
+                       action = child_sa->get_close_action(child_sa);
                }
                else
                {
-                       action = child_cfg->get_dpd_action(child_cfg);
+                       action = child_sa->get_dpd_action(child_sa);
                }
                switch (action)
                {
@@ -1651,7 +1650,8 @@ static status_t reestablish(private_ike_sa_t *this)
                                restart = TRUE;
                                break;
                        case ACTION_ROUTE:
-                               charon->traps->install(charon->traps, this->peer_cfg, child_cfg);
+                               charon->traps->install(charon->traps, this->peer_cfg,
+                                                                          child_sa->get_config(child_sa));
                                break;
                        default:
                                break;
@@ -1707,18 +1707,18 @@ static status_t reestablish(private_ike_sa_t *this)
                iterator = create_child_sa_iterator(this);
                while (iterator->iterate(iterator, (void**)&child_sa))
                {
-                       child_cfg = child_sa->get_config(child_sa);
                        if (this->state == IKE_DELETING)
                        {
-                               action = child_cfg->get_close_action(child_cfg);
+                               action = child_sa->get_close_action(child_sa);
                        }
                        else
                        {
-                               action = child_cfg->get_dpd_action(child_cfg);
+                               action = child_sa->get_dpd_action(child_sa);
                        }
                        switch (action)
                        {
                                case ACTION_RESTART:
+                                       child_cfg = child_sa->get_config(child_sa);
                                        DBG1(DBG_IKE, "restarting CHILD_SA %s",
                                                 child_cfg->get_name(child_cfg));
                                        child_cfg->get_ref(child_cfg);
index d7c6b05..b0cd30e 100644 (file)
@@ -191,6 +191,7 @@ static status_t destroy_and_reestablish(private_child_delete_t *this)
        child_cfg_t *child_cfg;
        protocol_id_t protocol;
        u_int32_t spi;
+       action_t action;
        status_t status = SUCCESS;
 
        iterator = this->child_sas->create_iterator(this->child_sas, TRUE);
@@ -205,10 +206,11 @@ static status_t destroy_and_reestablish(private_child_delete_t *this)
                protocol = child_sa->get_protocol(child_sa);
                child_cfg = child_sa->get_config(child_sa);
                child_cfg->get_ref(child_cfg);
+               action = child_sa->get_close_action(child_sa);
                this->ike_sa->destroy_child_sa(this->ike_sa, protocol, spi);
                if (this->check_delete_action)
                {       /* enforce child_cfg policy if deleted passively */
-                       switch (child_cfg->get_close_action(child_cfg))
+                       switch (action)
                        {
                                case ACTION_RESTART:
                                        child_cfg->get_ref(child_cfg);