diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/asterisk/bridging.h | 6 | ||||
-rw-r--r-- | include/asterisk/core_local.h | 39 | ||||
-rw-r--r-- | include/asterisk/core_unreal.h | 36 |
3 files changed, 75 insertions, 6 deletions
diff --git a/include/asterisk/bridging.h b/include/asterisk/bridging.h index e03bfd0cd..08d0023e5 100644 --- a/include/asterisk/bridging.h +++ b/include/asterisk/bridging.h @@ -870,19 +870,23 @@ int ast_bridge_suspend(struct ast_bridge *bridge, struct ast_channel *chan); */ int ast_bridge_unsuspend(struct ast_bridge *bridge, struct ast_channel *chan); +struct ast_unreal_pvt; + /*! * \brief Check and optimize out the unreal channels between bridges. * \since 12.0.0 * * \param chan Unreal channel writing a frame into the channel driver. * \param peer Other unreal channel in the pair. + * \param pvt Private data provided by an implementation of the unreal driver that + * contains the callbacks that should be called when optimization begins/ends * * \note It is assumed that chan is already locked. * * \retval 0 if unreal channels were not optimized out. * \retval non-zero if unreal channels were optimized out. */ -int ast_bridge_unreal_optimized_out(struct ast_channel *chan, struct ast_channel *peer); +int ast_bridge_unreal_optimize_out(struct ast_channel *chan, struct ast_channel *peer, struct ast_unreal_pvt *pvt); /*! * \brief Tells, if optimization is allowed, how the optimization would be performed diff --git a/include/asterisk/core_local.h b/include/asterisk/core_local.h index 693c93b46..491112d2b 100644 --- a/include/asterisk/core_local.h +++ b/include/asterisk/core_local.h @@ -37,6 +37,7 @@ extern "C" { struct ast_channel; struct ast_bridge; struct ast_bridge_features; +struct stasis_message_type; /* ------------------------------------------------------------------- */ @@ -91,6 +92,44 @@ int ast_local_setup_masquerade(struct ast_channel *ast, struct ast_channel *masq /* ------------------------------------------------------------------- */ +/*! + * \brief Message type for when two local channel halves are bridged together + * \since 12.0.0 + * + * \note Payloads for the \ref ast_local_bridge_type are a \ref ast_multi_channel_blob. + * Roles for the channels in the \ref ast_multi_channel_blob are "1" and "2", reflecting + * the two halves. Unlike most other bridges, the 'bridge' between two local channels is + * not part of the bridge framework; as such, the message simply references the two local + * channel halves that are now bridged. + * + * \retval A \ref stasis message type + */ +struct stasis_message_type *ast_local_bridge_type(void); + +/*! + * \brief Message type for when a local channel optimization begins + * \since 12.0.0 + * + * \note Payloads for the \ref ast_local_optimization_begin_type are a + * \ref ast_multi_channel_blob. Roles for the channels in the \ref ast_multi_channel_blob + * are "1" and "2", reflecting the two halves. + * + * \retval A \ref stasis message type + */ +struct stasis_message_type *ast_local_optimization_begin_type(void); + +/*! + * \brief Message type for when a local channel optimization completes + * \since 12.0.0 + * + * \note Payloads for the \ref ast_local_optimization_end_type are a + * \ref ast_multi_channel_blob. Roles for the channels in the \ref ast_multi_channel_blob + * are "1" and "2", reflecting the two halves. + * + * \retval A \ref stasis message type + */ +struct stasis_message_type *ast_local_optimization_end_type(void); + #if defined(__cplusplus) || defined(c_plusplus) } #endif diff --git a/include/asterisk/core_unreal.h b/include/asterisk/core_unreal.h index 7cb68f162..a6e98895a 100644 --- a/include/asterisk/core_unreal.h +++ b/include/asterisk/core_unreal.h @@ -43,6 +43,30 @@ struct ast_callid; /* ------------------------------------------------------------------- */ +struct ast_unreal_pvt; + +/*! + * \brief Callbacks that can be provided by concrete implementations of the unreal + * channel driver that will be called when events occur in the unreal layer + */ +struct ast_unreal_pvt_callbacks { + /*! + * \brief Called when an optimization attempt has started + * \note p is locked when this callback is called + * \param p The \ref ast_unreal_pvt object + */ + void (* const optimization_started)(struct ast_unreal_pvt *p); + + /*! + * \brief Called when an optimization attempt completed successfully + * \note p is locked when this callback is called + * \param p The \ref ast_unreal_pvt object + * \param success Non-zero if the optimization succeeded, zero if the optimization + * met with fatal and permanent error + */ + void (* const optimization_finished)(struct ast_unreal_pvt *p); +}; + /*! * \brief The base pvt structure for local channel derivatives. * @@ -51,11 +75,12 @@ struct ast_callid; * ast_chan owner -> ast_unreal_pvt -> ast_chan chan */ struct ast_unreal_pvt { - struct ast_channel *owner; /*!< Master Channel - ;1 side */ - struct ast_channel *chan; /*!< Outbound channel - ;2 side */ - struct ast_format_cap *reqcap; /*!< Requested format capabilities */ - struct ast_jb_conf jb_conf; /*!< jitterbuffer configuration */ - unsigned int flags; /*!< Private option flags */ + struct ast_unreal_pvt_callbacks *callbacks; /*!< Event callbacks */ + struct ast_channel *owner; /*!< Master Channel - ;1 side */ + struct ast_channel *chan; /*!< Outbound channel - ;2 side */ + struct ast_format_cap *reqcap; /*!< Requested format capabilities */ + struct ast_jb_conf jb_conf; /*!< jitterbuffer configuration */ + unsigned int flags; /*!< Private option flags */ /*! Base name of the unreal channels. exten@context or other name. */ char name[AST_MAX_EXTENSION + AST_MAX_CONTEXT + 2]; }; @@ -65,6 +90,7 @@ struct ast_unreal_pvt { #define AST_UNREAL_CARETAKER_THREAD (1 << 0) /*!< The ;2 side launched a PBX, was pushed into a bridge, or was masqueraded into an application. */ #define AST_UNREAL_NO_OPTIMIZATION (1 << 1) /*!< Do not optimize out the unreal channels */ #define AST_UNREAL_MOH_INTERCEPT (1 << 2) /*!< Intercept and act on hold/unhold control frames */ +#define AST_UNREAL_OPTIMIZE_BEGUN (1 << 3) /*!< Indicates that an optimization attempt has been started */ /*! * \brief Send an unreal pvt in with no locks held and get all locks |