summaryrefslogtreecommitdiff
path: root/include/asterisk/bridge_channel_internal.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/asterisk/bridge_channel_internal.h')
-rw-r--r--include/asterisk/bridge_channel_internal.h193
1 files changed, 193 insertions, 0 deletions
diff --git a/include/asterisk/bridge_channel_internal.h b/include/asterisk/bridge_channel_internal.h
new file mode 100644
index 000000000..6c3add13b
--- /dev/null
+++ b/include/asterisk/bridge_channel_internal.h
@@ -0,0 +1,193 @@
+/*
+ * Asterisk -- An open source telephony toolkit.
+ *
+ * Copyright (C) 2013 Digium, Inc.
+ *
+ * Matt Jordan <mjordan@digium.com>
+ *
+ * See http://www.asterisk.org for more information about
+ * the Asterisk project. Please do not directly contact
+ * any of the maintainers of this project for assistance;
+ * the project provides a web site, mailing lists and IRC
+ * channels for your use.
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License Version 2. See the LICENSE file
+ * at the top of the source tree.
+ */
+
+#ifndef _ASTERISK_PRIVATE_BRIDGING_CHANNEL_H
+#define _ASTERISK_PRIVATE_BRIDGING_CHANNEL_H
+
+/*!
+ * \file
+ * \brief Private Bridging Channel API
+ *
+ * \author Matt Jordan <mjordan@digium.com>
+ *
+ * A private API to manipulate channels in a bridge. These can be called on a channel in
+ * a bridge by \ref bridging.c. These functions should not be called elsewhere, including
+ * by other members of the Bridging API.
+ *
+ * See Also:
+ * \arg \ref AstCREDITS
+ * \arg \ref Ast
+ */
+
+/*!
+ * \internal
+ * \brief Actions that can be taken on a channel in a bridge
+ */
+enum bridge_channel_action_type {
+ /*! Bridged channel is to detect a feature hook */
+ BRIDGE_CHANNEL_ACTION_FEATURE,
+ /*! Bridged channel is to send a DTMF stream out */
+ BRIDGE_CHANNEL_ACTION_DTMF_STREAM,
+ /*! Bridged channel is to indicate talking start */
+ BRIDGE_CHANNEL_ACTION_TALKING_START,
+ /*! Bridged channel is to indicate talking stop */
+ BRIDGE_CHANNEL_ACTION_TALKING_STOP,
+ /*! Bridge channel is to play the indicated sound file. */
+ BRIDGE_CHANNEL_ACTION_PLAY_FILE,
+ /*! Bridge channel is to run the indicated application. */
+ BRIDGE_CHANNEL_ACTION_RUN_APP,
+ /*! Bridge channel is to run the custom callback routine. */
+ BRIDGE_CHANNEL_ACTION_CALLBACK,
+ /*! Bridge channel is to get parked. */
+ BRIDGE_CHANNEL_ACTION_PARK,
+ /*! Bridge channel is to execute a blind transfer. */
+ BRIDGE_CHANNEL_ACTION_BLIND_TRANSFER,
+ /*! Bridge channel is to execute an attended transfer */
+ BRIDGE_CHANNEL_ACTION_ATTENDED_TRANSFER,
+
+ /*
+ * Bridge actions put after this comment must never be put onto
+ * the bridge_channel wr_queue because they have other resources
+ * that must be freed.
+ */
+
+ /*! Bridge reconfiguration deferred technology destruction. */
+ BRIDGE_CHANNEL_ACTION_DEFERRED_TECH_DESTROY = 1000,
+ /*! Bridge deferred dissolving. */
+ BRIDGE_CHANNEL_ACTION_DEFERRED_DISSOLVING,
+};
+
+/*!
+ * \internal
+ * \brief Allocate a new ao2 ref counted bridge_channel
+ * \since 12.0.0
+ *
+ * \param bridge The bridge to make the bridge_channel for
+ *
+ * \retval NULL on error
+ * \retval ao2 ref counted object on success
+ */
+struct ast_bridge_channel *bridge_channel_internal_alloc(struct ast_bridge *bridge);
+
+/*!
+ * \internal
+ * \brief Push the bridge channel into its specified bridge.
+ * \since 12.0.0
+ *
+ * \param bridge_channel Channel to push.
+ *
+ * \note On entry, bridge_channel->bridge is already locked.
+ *
+ * \retval 0 on success.
+ * \retval -1 on failure. The channel did not get pushed.
+ */
+int bridge_channel_internal_push(struct ast_bridge_channel *bridge_channel);
+
+/*!
+ * \internal
+ * \brief Pull the bridge channel out of its current bridge.
+ * \since 12.0.0
+ *
+ * \param bridge_channel Channel to pull.
+ *
+ * \note On entry, bridge_channel->bridge is already locked.
+ *
+ * \return Nothing
+ */
+void bridge_channel_internal_pull(struct ast_bridge_channel *bridge_channel);
+
+/*!
+ * \internal
+ * \brief Join the bridge_channel to the bridge
+ *
+ * \param bridge_channel The Channel in the bridge
+ *
+ * \note This API call starts the bridge_channel's processing of events while
+ * it is in the bridge. It will return when the channel has been instructed to
+ * leave the bridge.
+ */
+void bridge_channel_internal_join(struct ast_bridge_channel *bridge_channel);
+
+/*!
+ * \internal
+ * \brief Temporarily suspend a channel from a bridge, handing control over to some
+ * other system
+ *
+ * \param bridge_channel The channel in the bridge
+ * \note This function assumes that \ref bridge_channel is already locked
+ */
+void bridge_channel_internal_suspend_nolock(struct ast_bridge_channel *bridge_channel);
+
+/*!
+ * \internal
+ * \brief Unsuspend a channel that was previously suspended
+ *
+ * \param bridge_channel The channel in the bridge
+ * \note This function assumes that \ref bridge_channel is already locked
+ */
+void bridge_channel_internal_unsuspend_nolock(struct ast_bridge_channel *bridge_channel);
+
+/*!
+ * \internal
+ * \brief Queue a blind transfer action on a transferee bridge channel
+ *
+ * This is only relevant for when a blind transfer is performed on a two-party
+ * bridge. The transferee's bridge channel will have a blind transfer bridge
+ * action queued onto it, resulting in the party being redirected to a new
+ * destination
+ *
+ * \param transferee The channel to have the action queued on
+ * \param exten The destination extension for the transferee
+ * \param context The destination context for the transferee
+ * \param hook Frame hook to attach to transferee
+ *
+ * \retval 0 on success.
+ * \retval -1 on error.
+ */
+int bridge_channel_internal_queue_blind_transfer(struct ast_channel *transferee,
+ const char *exten, const char *context,
+ transfer_channel_cb new_channel_cb, void *user_data);
+
+/*!
+ * \internal
+ * \brief Queue an attended transfer action on a transferee bridge channel
+ *
+ * This is only relevant for when an attended transfer is performed on a two-party
+ * bridge. The transferee's bridge channel will have an attended transfer bridge
+ * action queued onto it.
+ *
+ * \param transferee The channel to have the action queued on
+ * \param unbridged_chan The unbridged channel who is the target of the attended
+ * transfer
+ *
+ * \retval 0 on success.
+ * \retval -1 on error.
+ */
+int bridge_channel_internal_queue_attended_transfer(struct ast_channel *transferee,
+ struct ast_channel *unbridged_chan);
+
+/*!
+ * \internal
+ * \brief Return whether or not the bridge_channel would allow optimization
+ *
+ * \retval 0 if optimization is not allowed
+ * \retval non-zero if optimization is allowed
+ */
+int bridge_channel_internal_allows_optimization(struct ast_bridge_channel *bridge_channel);
+
+#endif /* _ASTERISK_PRIVATE_BRIDGING_H */