123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- /*
- * Asterisk -- An open source telephony toolkit.
- *
- * Copyright (C) 2013 Digium, Inc.
- *
- * Richard Mudgett <rmudgett@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.
- */
- /*!
- * \file
- * \brief After Bridge Execution API
- *
- * \author Richard Mudgett <rmudgett@digium.com>
- *
- * See Also:
- * \arg \ref AstCREDITS
- */
- #ifndef _ASTERISK_BRIDGING_AFTER_H
- #define _ASTERISK_BRIDGING_AFTER_H
- #if defined(__cplusplus) || defined(c_plusplus)
- extern "C" {
- #endif
- /*! Reason the after bridge callback will not be called. */
- enum ast_bridge_after_cb_reason {
- /*! The datastore is being destroyed. Likely due to hangup. (Enum value must be zero.) */
- AST_BRIDGE_AFTER_CB_REASON_DESTROY,
- /*! Something else replaced the callback with another. */
- AST_BRIDGE_AFTER_CB_REASON_REPLACED,
- /*! The callback was removed because of a masquerade. (fixup) */
- AST_BRIDGE_AFTER_CB_REASON_MASQUERADE,
- /*! The channel was departed from the bridge. */
- AST_BRIDGE_AFTER_CB_REASON_DEPART,
- /*! Was explicitly removed by external code. */
- AST_BRIDGE_AFTER_CB_REASON_REMOVED,
- /*! The channel failed to enter the bridge. */
- AST_BRIDGE_AFTER_CB_REASON_IMPART_FAILED,
- };
- /*!
- * \brief Set channel to goto specific location after the bridge.
- * \since 12.0.0
- *
- * \param chan Channel to setup after bridge goto location.
- * \param context Context to goto after bridge.
- * \param exten Exten to goto after bridge.
- * \param priority Priority to goto after bridge.
- *
- * \note chan is locked by this function.
- *
- * \details Add a channel datastore to setup the goto location
- * when the channel leaves the bridge and run a PBX from there.
- *
- * \return Nothing
- */
- void ast_bridge_set_after_goto(struct ast_channel *chan, const char *context, const char *exten, int priority);
- /*!
- * \brief Set channel to run the h exten after the bridge.
- * \since 12.0.0
- *
- * \param chan Channel to setup after bridge goto location.
- * \param context Context to goto after bridge.
- *
- * \note chan is locked by this function.
- *
- * \details Add a channel datastore to setup the goto location
- * when the channel leaves the bridge and run a PBX from there.
- *
- * \return Nothing
- */
- void ast_bridge_set_after_h(struct ast_channel *chan, const char *context);
- /*!
- * \brief Set channel to go on in the dialplan after the bridge.
- * \since 12.0.0
- *
- * \param chan Channel to setup after bridge goto location.
- * \param context Current context of the caller channel.
- * \param exten Current exten of the caller channel.
- * \param priority Current priority of the caller channel
- * \param parseable_goto User specified goto string from dialplan.
- *
- * \note chan is locked by this function.
- *
- * \details Add a channel datastore to setup the goto location
- * when the channel leaves the bridge and run a PBX from there.
- *
- * If parseable_goto then use the given context/exten/priority
- * as the relative position for the parseable_goto.
- * Else goto the given context/exten/priority+1.
- *
- * \return Nothing
- */
- void ast_bridge_set_after_go_on(struct ast_channel *chan, const char *context, const char *exten, int priority, const char *parseable_goto);
- /*!
- * \brief Setup any after bridge goto location to begin execution.
- * \since 12.0.0
- *
- * \param chan Channel to setup after bridge goto location.
- *
- * \note chan is locked by this function.
- *
- * \details Pull off any after bridge goto location datastore and
- * setup for dialplan execution there.
- *
- * \retval 0 on success. The goto location is set for a PBX to run it.
- * \retval non-zero on error or no goto location.
- *
- * \note If the after bridge goto is set to run an h exten it is
- * run here immediately.
- */
- int ast_bridge_setup_after_goto(struct ast_channel *chan);
- /*!
- * \brief Run any after bridge callback.
- * \since 12.0.0
- *
- * \param chan Channel to run after bridge callback.
- *
- * \return Nothing
- */
- void ast_bridge_run_after_callback(struct ast_channel *chan);
- /*!
- * \brief Run discarding any after bridge callbacks.
- * \since 12.0.0
- *
- * \param chan Channel to run after bridge callback.
- *
- * \return Nothing
- */
- void ast_bridge_discard_after_callback(struct ast_channel *chan, enum ast_bridge_after_cb_reason reason);
- /*!
- * \brief Run a PBX on any after bridge goto location.
- * \since 12.0.0
- *
- * \param chan Channel to execute after bridge goto location.
- *
- * \note chan is locked by this function.
- *
- * \details Pull off any after bridge goto location datastore
- * and run a PBX at that location.
- *
- * \note On return, the chan pointer is no longer valid because
- * the channel has hung up.
- *
- * \return Nothing
- */
- void ast_bridge_run_after_goto(struct ast_channel *chan);
- /*!
- * \brief Discard channel after bridge goto location.
- * \since 12.0.0
- *
- * \param chan Channel to discard after bridge goto location.
- *
- * \note chan is locked by this function.
- *
- * \return Nothing
- */
- void ast_bridge_discard_after_goto(struct ast_channel *chan);
- /*!
- * \brief Read after bridge goto if it exists
- * \since 12.0.0
- *
- * \param chan Channel to read the after bridge goto parseable goto string from
- * \param buffer Buffer to write the after bridge goto data to
- * \param buf_size size of the buffer being written to
- */
- void ast_bridge_read_after_goto(struct ast_channel *chan, char *buffer, size_t buf_size);
- /*!
- * \brief After bridge callback failed.
- * \since 12.0.0
- *
- * \param reason Reason callback is failing.
- * \param data Extra data what setup the callback wanted to pass.
- *
- * \note Called when the channel leaves the bridging system or
- * is destroyed.
- *
- * \return Nothing
- */
- typedef void (*ast_bridge_after_cb_failed)(enum ast_bridge_after_cb_reason reason, void *data);
- /*!
- * \brief After bridge callback function.
- * \since 12.0.0
- *
- * \param chan Channel just leaving bridging system.
- * \param data Extra data what setup the callback wanted to pass.
- *
- * \return Nothing
- */
- typedef void (*ast_bridge_after_cb)(struct ast_channel *chan, void *data);
- /*!
- * \brief Setup an after bridge callback for when the channel leaves the bridging system.
- * \since 12.0.0
- *
- * \param chan Channel to setup an after bridge callback on.
- * \param callback Function to call when the channel leaves the bridging system.
- * \param failed Function to call when it will not be calling the callback.
- * \param data Extra data to pass with the callback.
- *
- * \note chan is locked by this function.
- *
- * \note failed is called when the channel leaves the bridging
- * system or is destroyed.
- *
- * \retval 0 on success.
- * \retval -1 on error.
- */
- int ast_bridge_set_after_callback(struct ast_channel *chan, ast_bridge_after_cb callback, ast_bridge_after_cb_failed failed, void *data);
- /*!
- * \brief Get a string representation of an after bridge callback reason
- * \since 12.0.0
- *
- * \param reason The reason to interpret to a string
- * \retval NULL Unrecognized reason
- * \retval non-NULL String representation of reason
- */
- const char *ast_bridge_after_cb_reason_string(enum ast_bridge_after_cb_reason reason);
- #if defined(__cplusplus) || defined(c_plusplus)
- }
- #endif
- #endif /* _ASTERISK_BRIDGING_H */
|