}
/**
- * dummy callback
- */
-static bool dummy_callback(void *param, signal_t signal, level_t level,
- ike_sa_t *ike_sa, char *format, va_list args)
-{
- return TRUE;
-}
-
-/**
* remove a previously registered listener from the bus
*/
static void remove_listener(interface_bus_listener_t *listener)
peer_cfg->destroy(peer_cfg);
listener.listener.signal = (void*)initiate_listener;
- listener.callback = callback ? callback : (interface_manager_cb_t)dummy_callback;
+ listener.callback = callback;
listener.ike_sa = ike_sa;
listener.param = param;
listener.cancelled = FALSE;
/* we listen passively to catch the signals we are raising in
- * ike_sa->initiate(). */
- charon->bus->add_listener(charon->bus, &listener.listener);
+ * ike_sa->delete(). */
+ if (callback)
+ {
+ charon->bus->add_listener(charon->bus, &listener.listener);
+ }
charon->bus->set_listen_state(charon->bus, TRUE);
if (ike_sa->initiate(ike_sa, child_cfg) != SUCCESS)
{
interface_manager_cb_t callback, void *param)
{
ike_sa_t *ike_sa;
- status_t status = FAILED;
+ status_t status = FAILED;;
interface_bus_listener_t listener;
ike_sa = charon->ike_sa_manager->checkout_by_id(charon->ike_sa_manager,
/* we listen passively to catch the signals we are raising in
* ike_sa->delete(). */
listener.listener.signal = (void*)terminate_ike_listener;
- listener.callback = callback ? callback : (interface_manager_cb_t)dummy_callback;
+ listener.callback = callback;
listener.ike_sa = ike_sa;
listener.param = param;
listener.cancelled = FALSE;
-
- charon->bus->add_listener(charon->bus, &listener.listener);
+ if (callback)
+ {
+ charon->bus->add_listener(charon->bus, &listener.listener);
+ }
charon->bus->set_listen_state(charon->bus, TRUE);
status = ike_sa->delete(ike_sa);
if (status == DESTROY_ME)
}
listener.listener.signal = (void*)terminate_child_listener;
- listener.callback = callback ? callback : (interface_manager_cb_t)dummy_callback;
+ listener.callback = callback;
listener.ike_sa = ike_sa;
listener.param = param;
listener.cancelled = FALSE;
/* we listen passively to catch the signals we are raising */
- charon->bus->add_listener(charon->bus, &listener.listener);
+ if (callback)
+ {
+ charon->bus->add_listener(charon->bus, &listener.listener);
+ }
charon->bus->set_listen_state(charon->bus, TRUE);
status = ike_sa->delete_child_sa(ike_sa, child_sa->get_protocol(child_sa),
child_sa->get_spi(child_sa, TRUE));
}
/* we listen passively only, as routing is done by one thread only */
- interface_bus_listener_t listener;
+ if (callback)
+ {
+ interface_bus_listener_t listener;
- listener.listener.signal = (void*)route_listener;
- listener.callback = callback ? callback : (interface_manager_cb_t)dummy_callback;
- listener.ike_sa = ike_sa;
- listener.param = param;
- listener.cancelled = FALSE;
- charon->bus->add_listener(charon->bus, &listener.listener);
+ listener.listener.signal = (void*)route_listener;
+ listener.callback = callback;
+ listener.ike_sa = ike_sa;
+ listener.param = param;
+ listener.cancelled = FALSE;
+ charon->bus->add_listener(charon->bus, &listener.listener);
+ }
if (ike_sa->route(ike_sa, child_cfg) != SUCCESS)
{
}
/* we listen passively only, as routing is done by one thread only */
- interface_bus_listener_t listener;
-
- listener.listener.signal = (void*)unroute_listener;
- listener.callback = callback ? callback : (interface_manager_cb_t)dummy_callback;
- listener.ike_sa = ike_sa;
- listener.param = param;
- listener.cancelled = FALSE;
- charon->bus->add_listener(charon->bus, &listener.listener);
+ if (callback)
+ {
+ interface_bus_listener_t listener;
+ listener.listener.signal = (void*)unroute_listener;
+ listener.callback = callback;
+ listener.ike_sa = ike_sa;
+ listener.param = param;
+ listener.cancelled = FALSE;
+ charon->bus->add_listener(charon->bus, &listener.listener);
+ }
status = ike_sa->unroute(ike_sa, reqid);
if (status == DESTROY_ME)
{
closedir(dir);
}
+/**
+ * See header
+ */
+bool interface_manager_cb_empty(void *param, signal_t signal, level_t level,
+ ike_sa_t *ike_sa, char *format, va_list args)
+{
+ return TRUE;
+}
/**
* Implementation of stroke_t.destroy.
typedef bool(*interface_manager_cb_t)(void* param, signal_t signal, level_t level,
ike_sa_t* ike_sa, char* format, va_list args);
+/**
+ * @brief Empty callback function for interface_manager_t functions.
+ *
+ * If you wan't to do a syncrhonous call, but don't need a callback, pass
+ * this function to the interface_managers methods.
+ */
+bool interface_manager_cb_empty(void *param, signal_t signal, level_t level,
+ ike_sa_t *ike_sa, char *format, va_list args);
+
typedef struct interface_manager_t interface_manager_t;
/**
* use the manager to fullfill their tasks (initiating, terminating, ...).
* The interface_manager starts actions by creating jobs. It then tries to
* evaluate the result of the operation by listening on the bus.
+ *
+ * Passing NULL as callback to the managers function calls them asynchronously.
+ * If a callback is specified, they are called synchronoulsy. There is a default
+ * callback "interface_manager_cb_empty" if you wan't to call a function
+ * synchronously, but don't need a callback.
*
* @b Constructors:
* - interface_manager_create()