fixed bad cast which resulted in a crash on "ipsec update"
[strongswan.git] / src / charon / control / interface_manager.h
index 3c1613a..3ee1f0e 100644 (file)
 typedef bool(*interface_manager_cb_t)(void* param, signal_t signal, level_t level,
                                                           ike_sa_t* ike_sa, char* format, va_list args);
 
 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;
 
 /**
 typedef struct interface_manager_t interface_manager_t;
 
 /**
@@ -62,6 +71,11 @@ 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.
  * 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()
  * 
  * @b Constructors:
  * - interface_manager_create()
@@ -84,6 +98,10 @@ struct interface_manager_t {
        /**
         * @brief Initiate a CHILD_SA, and if required, an IKE_SA.
         *
        /**
         * @brief Initiate a CHILD_SA, and if required, an IKE_SA.
         *
+        * The inititate() function is synchronous and thus blocks until the
+        * IKE_SA is established or failed. Because of this, the initiate() function
+        * contains a thread cancellation point.
+        *
         * @param this                  calling object
         * @param peer_cfg              peer_cfg to use for IKE_SA setup
         * @param child_cfg             child_cfg to set up CHILD_SA from
         * @param this                  calling object
         * @param peer_cfg              peer_cfg to use for IKE_SA setup
         * @param child_cfg             child_cfg to set up CHILD_SA from
@@ -101,6 +119,10 @@ struct interface_manager_t {
        /**
         * @brief Terminate an IKE_SA and all of its CHILD_SAs.
         *
        /**
         * @brief Terminate an IKE_SA and all of its CHILD_SAs.
         *
+        * The terminate() function is synchronous and thus blocks until the
+        * IKE_SA is properly deleted, or the delete timed out. 
+        * The terminate() function contains a thread cancellation point.
+        *
         * @param this                  calling object
         * @param unique_id             unique id of the IKE_SA to terminate.
         * @param cb                    logging callback
         * @param this                  calling object
         * @param unique_id             unique id of the IKE_SA to terminate.
         * @param cb                    logging callback