child_cfg = create_child_cfg(this, peer_cfg);
if (charon->controller->initiate(charon->controller, peer_cfg, child_cfg,
- controller_cb_empty, NULL, 0, FALSE) != SUCCESS)
+ controller_cb_empty, NULL, LEVEL_SILENT, 0, FALSE) != SUCCESS)
{
terminate(pid);
}
if (id)
{
charon->controller->terminate_ike(charon->controller, id, FALSE,
- controller_cb_empty, NULL, 0);
+ controller_cb_empty, NULL, LEVEL_SILENT, 0);
}
else
{
{
DBG1(DBG_CFG, "initiating IKE_SA for CHILD_SA config '%s'", config);
charon->controller->initiate(charon->controller, peer_cfg, child_cfg,
- NULL, NULL, 0, FALSE);
+ NULL, NULL, 0, 0, FALSE);
}
else
{
{
DBG1(DBG_CFG, "closing IKE_SA '%s'", config);
charon->controller->terminate_ike(charon->controller, id, FALSE, NULL,
- NULL, 0);
+ NULL, 0, 0);
}
else
{
{
DBG1(DBG_CFG, "closing CHILD_SA '%s'", config);
charon->controller->terminate_child(charon->controller, id,
- NULL, NULL, 0);
+ NULL, NULL, 0, 0);
}
else
{
uint32_t *id)
{
charon->controller->terminate_ike(charon->controller, *id, FALSE,
- controller_cb_empty, NULL, 0);
+ controller_cb_empty, NULL, LEVEL_SILENT, 0);
return JOB_REQUEUE_NONE;
}
status_t status;
status = charon->controller->terminate_ike(charon->controller, ike_sa, FALSE,
- NULL, NULL, 0);
+ NULL, NULL, 0, 0);
xpc_dictionary_set_bool(reply, "success", status != NOT_FOUND);
}
peer_cfg->add_child_cfg(peer_cfg, child_cfg->get_ref(child_cfg));
if (charon->controller->initiate(charon->controller, peer_cfg, child_cfg,
- (controller_cb_t)initiate_cb, &ike_sa, 0, FALSE) == NEED_MORE)
+ (controller_cb_t)initiate_cb, &ike_sa, LEVEL_CTRL, 0, FALSE) == NEED_MORE)
{
this->channels->add(this->channels, channel, ike_sa);
success = TRUE;
/*
- * Copyright (C) 2011-2019 Tobias Brunner
+ * Copyright (C) 2011-2023 Tobias Brunner
* Copyright (C) 2007-2011 Martin Willi
*
* Copyright (C) secunet Security Networks AG
*/
interface_listener_t *listener;
+ /**
+ * Maximum log level to pass to callback
+ */
+ level_t max_level;
+
/**
* interface callback (listener gets redirected to here)
*/
METHOD(logger_t, listener_get_level, level_t,
interface_logger_t *this, debug_t group)
{
- /* in order to allow callback listeners to decide what they want to log
- * we request any log message, but only if we actually want logging */
- return this->callback == controller_cb_empty ? LEVEL_SILENT : LEVEL_PRIVATE;
+ return this->max_level;
}
METHOD(job_t, get_priority_medium, job_priority_t,
METHOD(controller_t, initiate, status_t,
private_controller_t *this, peer_cfg_t *peer_cfg, child_cfg_t *child_cfg,
- controller_cb_t callback, void *param, u_int timeout, bool limits)
+ controller_cb_t callback, void *param, level_t max_level, u_int timeout,
+ bool limits)
{
interface_job_t *job;
status_t status;
.log = _listener_log,
.get_level = _listener_get_level,
},
+ .max_level = max_level,
.callback = callback,
.param = param,
},
METHOD(controller_t, terminate_ike, status_t,
controller_t *this, uint32_t unique_id, bool force,
- controller_cb_t callback, void *param, u_int timeout)
+ controller_cb_t callback, void *param, level_t max_level, u_int timeout)
{
interface_job_t *job;
status_t status;
.log = _listener_log,
.get_level = _listener_get_level,
},
+ .max_level = max_level,
.callback = callback,
.param = param,
},
METHOD(controller_t, terminate_child, status_t,
controller_t *this, uint32_t unique_id,
- controller_cb_t callback, void *param, u_int timeout)
+ controller_cb_t callback, void *param, level_t max_level, u_int timeout)
{
interface_job_t *job;
status_t status;
.log = _listener_log,
.get_level = _listener_get_level,
},
+ .max_level = max_level,
.callback = callback,
.param = param,
},
/*
+ * Copyright (C) 2012-2023 Tobias Brunner
* Copyright (C) 2007 Martin Willi
*
* Copyright (C) secunet Security Networks AG
* @param child_cfg optional child_cfg to set up CHILD_SA from
* @param cb logging callback
* @param param parameter to include in each call of cb
+ * @param max_level maximum log level for which cb is invoked
* @param timeout timeout in ms to wait for callbacks, 0 to disable
* @param limits whether to check limits regarding IKE_SA initiation
* @return
*/
status_t (*initiate)(controller_t *this,
peer_cfg_t *peer_cfg, child_cfg_t *child_cfg,
- controller_cb_t callback, void *param, u_int timeout,
- bool limits);
+ controller_cb_t callback, void *param,
+ level_t max_level, u_int timeout, bool limits);
/**
* Terminate an IKE_SA and all of its CHILD_SAs.
* retransmits are sent until then
* @param cb logging callback
* @param param parameter to include in each call of cb
+ * @param max_level maximum log level for which cb is invoked
* @param timeout timeout in ms to wait for callbacks, 0 to disable
* @return
* - SUCCESS, if CHILD_SA terminated
*/
status_t (*terminate_ike)(controller_t *this, uint32_t unique_id,
bool force, controller_cb_t callback, void *param,
- u_int timeout);
+ level_t max_level, u_int timeout);
/**
* Terminate a CHILD_SA.
* @param unique_id CHILD_SA unique ID to terminate
* @param cb logging callback
* @param param parameter to include in each call of cb
+ * @param max_level maximum log level for which cb is invoked
* @param timeout timeout in ms to wait for callbacks, 0 to disable
* @return
* - SUCCESS, if CHILD_SA terminated
*/
status_t (*terminate_child)(controller_t *this, uint32_t unique_id,
controller_cb_t callback, void *param,
- u_int timeout);
+ level_t max_level, u_int timeout);
/**
* Destroy a controller_t instance.
enumerator->destroy(enumerator);
switch (charon->controller->initiate(charon->controller,
- peer_cfg, child_cfg->get_ref(child_cfg),
- (void*)initiate_cb, listener, 0, FALSE))
+ peer_cfg, child_cfg->get_ref(child_cfg),
+ (void*)initiate_cb, listener, LEVEL_CTRL, 0, FALSE))
{
case NEED_MORE:
/* Callback returns FALSE once it got track of this IKE_SA.
charon->controller->initiate(charon->controller,
peer_cfg, child_cfg->get_ref(child_cfg),
- NULL, NULL, 0, FALSE);
+ NULL, NULL, 0, 0, FALSE);
if (s)
{
sleep(s);
child_cfg->get_ref(child_cfg);
peer_cfg->get_ref(peer_cfg);
enumerator->destroy(enumerator);
- charon->controller->initiate(charon->controller,
- peer_cfg, child_cfg, NULL, NULL, 0, FALSE);
+ charon->controller->initiate(charon->controller, peer_cfg, child_cfg,
+ NULL, NULL, 0, 0, FALSE);
}
else
{
{
status = charon->controller->terminate_ike(
charon->controller, id, FALSE,
- (controller_cb_t)xml_callback, writer, 0);
+ (controller_cb_t)xml_callback, writer, LEVEL_CTRL, 0);
}
else
{
status = charon->controller->terminate_child(
charon->controller, id,
- (controller_cb_t)xml_callback, writer, 0);
+ (controller_cb_t)xml_callback, writer, LEVEL_CTRL, 0);
}
/* </log> */
xmlTextWriterEndElement(writer);
{
status = charon->controller->initiate(charon->controller,
peer, child, (controller_cb_t)xml_callback,
- writer, 0, FALSE);
+ writer, LEVEL_CTRL, 0, FALSE);
}
else
{
if (msg->output_verbosity < 0)
{
charon->controller->initiate(charon->controller, peer_cfg, child_cfg,
- NULL, NULL, 0, FALSE);
+ NULL, NULL, 0, 0, FALSE);
}
else
{
status = charon->controller->initiate(charon->controller,
peer_cfg, child_cfg, (controller_cb_t)stroke_log,
- &info, this->timeout, FALSE);
+ &info, msg->output_verbosity, this->timeout, FALSE);
switch (status)
{
case SUCCESS:
if (child)
{
status = charon->controller->terminate_child(charon->controller, id,
- (controller_cb_t)stroke_log, &info, this->timeout);
+ (controller_cb_t)stroke_log, &info,
+ msg->output_verbosity, this->timeout);
}
else
{
status = charon->controller->terminate_ike(charon->controller, id,
- FALSE, (controller_cb_t)stroke_log, &info,
- this->timeout);
+ FALSE, (controller_cb_t)stroke_log, &info,
+ msg->output_verbosity, this->timeout);
}
report_terminate_status(this, status, out, id, child);
}
else if (child)
{
charon->controller->terminate_child(charon->controller, id,
- NULL, NULL, 0);
+ NULL, NULL, 0, 0);
}
else
{
charon->controller->terminate_ike(charon->controller, id, FALSE,
- NULL, NULL, 0);
+ NULL, NULL, 0, 0);
}
}
enumerator = peer_cfg->create_child_cfg_enumerator(peer_cfg);
if (enumerator->enumerate(enumerator, &child_cfg) &&
charon->controller->initiate(charon->controller, peer_cfg,
- child_cfg->get_ref(child_cfg),
- controller_cb_empty, NULL, 0, FALSE) == SUCCESS)
+ child_cfg->get_ref(child_cfg), controller_cb_empty,
+ NULL, LEVEL_SILENT, 0, FALSE) == SUCCESS)
{
write_fifo(this, "connection '%s' established\n", name);
}
id = ike_sa->get_unique_id(ike_sa);
enumerator->destroy(enumerator);
charon->controller->terminate_ike(charon->controller, id, FALSE,
- controller_cb_empty, NULL, 0);
+ controller_cb_empty, NULL,
+ LEVEL_SILENT, 0);
write_fifo(this, "connection '%s' terminated\n", name);
return;
}
DBG1(DBG_CFG, "initiating '%s'", child_cfg->get_name(child_cfg));
charon->controller->initiate(charon->controller,
peer_cfg->get_ref(peer_cfg), child_cfg->get_ref(child_cfg),
- NULL, NULL, 0, FALSE);
+ NULL, NULL, 0, 0, FALSE);
}
}
{
DBG1(DBG_CFG, "closing '%s' #%u", name, id);
charon->controller->terminate_child(charon->controller,
- id, NULL, NULL, 0);
+ id, NULL, NULL, 0, 0);
}
array_destroy(ids);
}
{
DBG1(DBG_CFG, "closing IKE_SA #%u", id);
charon->controller->terminate_ike(charon->controller, id,
- FALSE, NULL, NULL, 0);
+ FALSE, NULL, NULL, 0, 0);
}
array_destroy(ikeids);
}
{
return send_reply(this, "%s config '%s' not found", type, sa);
}
- switch (charon->controller->initiate(charon->controller, peer_cfg,
- child_cfg, log_cb, &log, timeout, limits))
+ switch (charon->controller->initiate(charon->controller, peer_cfg, child_cfg,
+ log_cb, &log, log.level, timeout, limits))
{
case SUCCESS:
return send_reply(this, NULL);
if (child || child_id)
{
if (charon->controller->terminate_child(charon->controller, *del,
- log_cb, &log, timeout) == SUCCESS)
+ log_cb, &log, log.level, timeout) == SUCCESS)
{
done++;
}
else
{
if (charon->controller->terminate_ike(charon->controller, *del, force,
- log_cb, &log, timeout) == SUCCESS)
+ log_cb, &log, log.level, timeout) == SUCCESS)
{
done++;
}
mediation_cfg->get_ref(mediation_cfg);
if (charon->controller->initiate(charon->controller, mediation_cfg, NULL,
- (controller_cb_t)initiate_callback, this, 0, FALSE) != SUCCESS)
+ (controller_cb_t)initiate_callback, this, LEVEL_CTRL,
+ 0, FALSE) != SUCCESS)
{
mediation_cfg->destroy(mediation_cfg);
mediated_cfg->destroy(mediated_cfg);
charon->controller->initiate(charon->controller,
peer_cfg->get_ref(peer_cfg),
child_cfg->get_ref(child_cfg),
- NULL, NULL, 0, FALSE);
+ NULL, NULL, 0, 0, FALSE);
}
}
children->destroy(children);