controller: Make child config optional for initiate()

This commit is contained in:
Tobias Brunner
2019-04-25 15:23:19 +02:00
parent ed521a7470
commit 6b00d34b42
2 changed files with 15 additions and 10 deletions
+14 -9
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2011-2015 Tobias Brunner * Copyright (C) 2011-2019 Tobias Brunner
* Copyright (C) 2007-2011 Martin Willi * Copyright (C) 2007-2011 Martin Willi
* Copyright (C) 2011 revosec AG * Copyright (C) 2011 revosec AG
* HSR Hochschule fuer Technik Rapperswil * HSR Hochschule fuer Technik Rapperswil
@@ -265,19 +265,24 @@ METHOD(listener_t, ike_state_change, bool,
{ {
switch (state) switch (state)
{ {
#ifdef ME
case IKE_ESTABLISHED: case IKE_ESTABLISHED:
{ /* mediation connections are complete without CHILD_SA */ {
#ifdef ME
peer_cfg_t *peer_cfg = ike_sa->get_peer_cfg(ike_sa); peer_cfg_t *peer_cfg = ike_sa->get_peer_cfg(ike_sa);
#endif /* ME */
if (peer_cfg->is_mediation(peer_cfg)) /* we're done if we didn't initiate a CHILD_SA */
if (!this->child_cfg
#ifdef ME
/* the same is always true for mediation connections */
|| peer_cfg->is_mediation(peer_cfg)
#endif /* ME */
)
{ {
this->status = SUCCESS; this->status = SUCCESS;
return listener_done(this); return listener_done(this);
} }
break; break;
} }
#endif /* ME */
case IKE_DESTROYING: case IKE_DESTROYING:
return listener_done(this); return listener_done(this);
default: default:
@@ -414,7 +419,7 @@ METHOD(job_t, initiate_execute, job_requeue_t,
peer_cfg); peer_cfg);
if (!ike_sa) if (!ike_sa)
{ {
listener->child_cfg->destroy(listener->child_cfg); DESTROY_IF(listener->child_cfg);
peer_cfg->destroy(peer_cfg); peer_cfg->destroy(peer_cfg);
listener->status = FAILED; listener->status = FAILED;
listener_done(listener); listener_done(listener);
@@ -446,7 +451,7 @@ METHOD(job_t, initiate_execute, job_requeue_t,
"%d exceeds limit of %d", half_open, limit_half_open); "%d exceeds limit of %d", half_open, limit_half_open);
charon->ike_sa_manager->checkin_and_destroy(charon->ike_sa_manager, charon->ike_sa_manager->checkin_and_destroy(charon->ike_sa_manager,
ike_sa); ike_sa);
listener->child_cfg->destroy(listener->child_cfg); DESTROY_IF(listener->child_cfg);
listener->status = INVALID_STATE; listener->status = INVALID_STATE;
listener_done(listener); listener_done(listener);
return JOB_REQUEUE_NONE; return JOB_REQUEUE_NONE;
@@ -465,7 +470,7 @@ METHOD(job_t, initiate_execute, job_requeue_t,
"limit of %d", jobs, limit_job_load); "limit of %d", jobs, limit_job_load);
charon->ike_sa_manager->checkin_and_destroy( charon->ike_sa_manager->checkin_and_destroy(
charon->ike_sa_manager, ike_sa); charon->ike_sa_manager, ike_sa);
listener->child_cfg->destroy(listener->child_cfg); DESTROY_IF(listener->child_cfg);
listener->status = INVALID_STATE; listener->status = INVALID_STATE;
listener_done(listener); listener_done(listener);
return JOB_REQUEUE_NONE; return JOB_REQUEUE_NONE;
+1 -1
View File
@@ -78,7 +78,7 @@ struct controller_t {
* until the IKE_SA is established or failed. * until the IKE_SA is established or failed.
* *
* @param peer_cfg peer_cfg to use for IKE_SA setup * @param peer_cfg peer_cfg to use for IKE_SA setup
* @param child_cfg child_cfg to set up CHILD_SA from * @param child_cfg optional child_cfg to set up CHILD_SA from
* @param cb logging callback * @param cb logging callback
* @param param parameter to include in each call of cb * @param param parameter to include in each call of cb
* @param timeout timeout in ms to wait for callbacks, 0 to disable * @param timeout timeout in ms to wait for callbacks, 0 to disable