diff options
Diffstat (limited to 'src/charon/sa/transactions/ike_auth.c')
-rw-r--r-- | src/charon/sa/transactions/ike_auth.c | 53 |
1 files changed, 11 insertions, 42 deletions
diff --git a/src/charon/sa/transactions/ike_auth.c b/src/charon/sa/transactions/ike_auth.c index bacc6d0b2..44cd8079d 100644 --- a/src/charon/sa/transactions/ike_auth.c +++ b/src/charon/sa/transactions/ike_auth.c @@ -183,37 +183,6 @@ static void set_init_messages(private_ike_auth_t *this, chunk_t init_request, ch } /** - * destroy a list of traffic selectors - */ -static void destroy_ts_list(linked_list_t *list) -{ - if (list) - { - traffic_selector_t *ts; - - while (list->remove_last(list, (void**)&ts) == SUCCESS) - { - ts->destroy(ts); - } - list->destroy(list); - } -} - -/** - * destroy a list of proposals - */ -static void destroy_proposal_list(linked_list_t *list) -{ - proposal_t *proposal; - - while (list->remove_last(list, (void**)&proposal) == SUCCESS) - { - proposal->destroy(proposal); - } - list->destroy(list); -} - -/** * Implementation of transaction_t.get_request. */ static status_t get_request(private_ike_auth_t *this, message_t **result) @@ -330,7 +299,7 @@ static status_t get_request(private_ike_auth_t *this, message_t **result) return DESTROY_ME; } sa_payload = sa_payload_create_from_proposal_list(proposal_list); - destroy_proposal_list(proposal_list); + proposal_list->destroy_offset(proposal_list, offsetof(proposal_t, destroy)); request->add_payload(request, (payload_t*)sa_payload); } @@ -340,7 +309,7 @@ static status_t get_request(private_ike_auth_t *this, message_t **result) ts_list = this->policy->get_my_traffic_selectors(this->policy, me); ts_payload = ts_payload_create_from_traffic_selectors(TRUE, ts_list); - destroy_ts_list(ts_list); + ts_list->destroy_offset(ts_list, offsetof(traffic_selector_t, destroy)); request->add_payload(request, (payload_t*)ts_payload); } @@ -351,7 +320,7 @@ static status_t get_request(private_ike_auth_t *this, message_t **result) ts_list = this->policy->get_other_traffic_selectors(this->policy, other); ts_payload = ts_payload_create_from_traffic_selectors(FALSE, ts_list); - destroy_ts_list(ts_list); + ts_list->destroy_offset(ts_list, offsetof(traffic_selector_t, destroy)); request->add_payload(request, (payload_t*)ts_payload); } @@ -663,8 +632,8 @@ static status_t get_response(private_ike_auth_t *this, message_t *request, this->tsr = this->policy->select_my_traffic_selectors(this->policy, my_ts, me); this->tsi = this->policy->select_other_traffic_selectors(this->policy, other_ts, other); } - destroy_ts_list(my_ts); - destroy_ts_list(other_ts); + my_ts->destroy_offset(my_ts, offsetof(traffic_selector_t, destroy)); + other_ts->destroy_offset(other_ts, offsetof(traffic_selector_t, destroy)); /* TODO: We should check somehow if we have a policy, but with other * traffic selectors. Then we would create a IKE_SA without a CHILD_SA. */ @@ -762,7 +731,7 @@ static status_t get_response(private_ike_auth_t *this, message_t *request, proposal_list = sa_request->get_proposals(sa_request); DBG2(SIG_DBG_IKE, "selecting proposals:"); this->proposal = this->policy->select_proposal(this->policy, proposal_list); - destroy_proposal_list(proposal_list); + proposal_list->destroy_offset(proposal_list, offsetof(proposal_t, destroy)); /* do we have a proposal? */ if (this->proposal == NULL) @@ -947,13 +916,13 @@ static status_t conclude(private_ike_auth_t *this, message_t *response, { /* process traffic selectors for us */ linked_list_t *ts_received = tsi_payload->get_traffic_selectors(tsi_payload); this->tsi = this->policy->select_my_traffic_selectors(this->policy, ts_received, me); - destroy_ts_list(ts_received); + ts_received->destroy_offset(ts_received, offsetof(traffic_selector_t, destroy)); } { /* process traffic selectors for other */ linked_list_t *ts_received = tsr_payload->get_traffic_selectors(tsr_payload); this->tsr = this->policy->select_other_traffic_selectors(this->policy, ts_received, other); - destroy_ts_list(ts_received); + ts_received->destroy_offset(ts_received, offsetof(traffic_selector_t, destroy)); } { /* process sa payload */ @@ -962,7 +931,7 @@ static status_t conclude(private_ike_auth_t *this, message_t *response, proposal_list = sa_payload->get_proposals(sa_payload); /* we have to re-check here if other's selection is valid */ this->proposal = this->policy->select_proposal(this->policy, proposal_list); - destroy_proposal_list(proposal_list); + proposal_list->destroy_offset(proposal_list, offsetof(proposal_t, destroy)); /* everything fine to create CHILD? */ if (this->proposal == NULL || @@ -995,8 +964,8 @@ static void destroy(private_ike_auth_t *this) DESTROY_IF(this->child_sa); DESTROY_IF(this->policy); DESTROY_IF(this->connection); - destroy_ts_list(this->tsi); - destroy_ts_list(this->tsr); + this->tsi->destroy_offset(this->tsi, offsetof(traffic_selector_t, destroy)); + this->tsr->destroy_offset(this->tsr, offsetof(traffic_selector_t, destroy)); chunk_free(&this->nonce_i); chunk_free(&this->nonce_r); chunk_free(&this->init_request); |