* In general, anywhere else it is unsafe to use this API. Care should be
* taken when using this API to ensure that the locking order remains
* correct. The locking order must be:
- * \arg The \ref \c ast_bridge
- * \arg The \ref \c ast_bridge_channel
- * \arg The \ref \c ast_channel
+ * \arg The \ref ast_bridge "\c ast_bridge"
+ * \arg The \ref ast_bridge_channel "\c ast_bridge_channel"
+ * \arg The \ref ast_channel "\c ast_channel"
*
* \author Joshua Colp <jcolp@digium.com>
* \author Richard Mudgett <rmudgett@digium.com>
* \brief Lock the bridge_channel.
*
* \param bridge_channel What to lock
- *
- * \return Nothing
*/
#define ast_bridge_channel_lock(bridge_channel) _ast_bridge_channel_lock(bridge_channel, __FILE__, __PRETTY_FUNCTION__, __LINE__, #bridge_channel)
static inline void _ast_bridge_channel_lock(struct ast_bridge_channel *bridge_channel, const char *file, const char *function, int line, const char *var)
* \brief Unlock the bridge_channel.
*
* \param bridge_channel What to unlock
- *
- * \return Nothing
*/
#define ast_bridge_channel_unlock(bridge_channel) _ast_bridge_channel_unlock(bridge_channel, __FILE__, __PRETTY_FUNCTION__, __LINE__, #bridge_channel)
static inline void _ast_bridge_channel_unlock(struct ast_bridge_channel *bridge_channel, const char *file, const char *function, int line, const char *var)
*
* \note The bridge_channel->bridge pointer changes because of a
* bridge-merge/channel-move operation between bridges.
- *
- * \return Nothing
*/
void ast_bridge_channel_lock_bridge(struct ast_bridge_channel *bridge_channel);
* Empty if default MOH class.
*
* \note This is intended to be called by bridge hooks.
- *
- * \return Nothing
*/
void ast_bridge_channel_run_app(struct ast_bridge_channel *bridge_channel, const char *app_name, const char *app_args, const char *moh_class);
*
* \param bridge_channel Which channel to play the file on
* \param playfile Sound filename to play.
- *
- * \return Nothing
*/
typedef void (*ast_bridge_custom_play_fn)(struct ast_bridge_channel *bridge_channel, const char *playfile);
* Empty if default MOH class.
*
* \note This is intended to be called by bridge hooks.
- *
- * \return Nothing
*/
void ast_bridge_channel_playfile(struct ast_bridge_channel *bridge_channel, ast_bridge_custom_play_fn custom_play, const char *playfile, const char *moh_class);
* \param payload_size Size of the payload if payload is non-NULL. A number otherwise.
*
* \note The payload MUST NOT have any resources that need to be freed.
- *
- * \return Nothing
*/
typedef void (*ast_bridge_custom_callback_fn)(struct ast_bridge_channel *bridge_channel, const void *payload, size_t payload_size);
*
* \note This is intended to be called by bridge hooks and the
* bridge channel thread.
- *
- * \return Nothing
*/
void ast_bridge_channel_kick(struct ast_bridge_channel *bridge_channel, int cause);
*
* \param bridge_channel Channel that received a DTMF digit.
* \param digit DTMF digit to add to collected digits or 0 for timeout event.
- * \param clear_digits clear the digits array prior to calling hooks
*
* \note Neither the bridge nor the bridge_channel locks should be held
* when entering this function.
* \note This is intended to be called by non-DTMF bridge hooks and the bridge
* channel thread. Calling from a DTMF bridge hook can potentially cause
* unbounded recursion.
- *
- * \return Nothing
*/
void ast_bridge_channel_feature_digit(struct ast_bridge_channel *bridge_channel, int digit);
* \param bridge_channel Channel to map
*
* \note The bridge_channel's bridge must be locked prior to calling this function.
- *
- * \return Nothing
*/
void ast_bridge_channel_stream_map(struct ast_bridge_channel *bridge_channel);
static AST_RWLIST_HEAD_STATIC(sync_structs, bridge_sync);
/*!
- * \brief initialize a synchronous bridge object.
+ * \brief Initialize a synchronous bridge object.
*
* This both initializes the structure and adds it to the list of
* synchronization structures.
* \param src Channel to get accountcode from.
*
* \note Both channels are already locked.
- *
- * \return Nothing
*/
static void channel_fill_empty_peeraccount(struct ast_channel *dest, struct ast_channel *src)
{
* \param src Channel to get peeraccount from.
*
* \note Both channels are already locked.
- *
- * \return Nothing
*/
static void channel_fill_empty_accountcode(struct ast_channel *dest, struct ast_channel *src)
{
* \param c1 Second bridge channel to update.
*
* \note Both channels are already locked.
- *
- * \return Nothing
*/
static void channel_set_empty_accountcodes(struct ast_channel *c0, struct ast_channel *c1)
{
* \param src Channel to get accountcode from.
*
* \note Both channels are already locked.
- *
- * \return Nothing
*/
static void channel_update_peeraccount(struct ast_channel *dest, struct ast_channel *src)
{
* \param c1 Second channel to update.
*
* \note Both channels are already locked.
- *
- * \return Nothing
*/
static void channel_update_peeraccounts(struct ast_channel *c0, struct ast_channel *c1)
{
* \param swap Channel being replaced by the joining channel. May be NULL.
*
* \note The bridge must be locked prior to calling this function.
- *
- * \return Nothing
*/
static void bridge_channel_update_accountcodes_joining(struct ast_bridge_channel *joining, struct ast_bridge_channel *swap)
{
* \param leaving Channel leaving the bridge. (Has already been removed actually)
*
* \note The bridge must be locked prior to calling this function.
- *
- * \return Nothing
*/
static void bridge_channel_update_accountcodes_leaving(struct ast_bridge_channel *leaving)
{
* \param bridge_channel Channel that owes events to the bridge.
*
* \note On entry, the bridge_channel->bridge is already locked.
- *
- * \return Nothing
*/
static void bridge_channel_cancel_owed_events(struct ast_bridge_channel *bridge_channel)
{
* \param bridge_channel Channel to suspend.
*
* \note This function assumes bridge_channel->bridge is locked.
- *
- * \return Nothing
*/
void bridge_channel_internal_suspend_nolock(struct ast_bridge_channel *bridge_channel)
{
* \brief Suspend a channel from a bridge.
*
* \param bridge_channel Channel to suspend.
- *
- * \return Nothing
*/
static void bridge_channel_suspend(struct ast_bridge_channel *bridge_channel)
{
* \param bridge_channel Channel to unsuspend.
*
* \note This function assumes bridge_channel->bridge is locked.
- *
- * \return Nothing
*/
void bridge_channel_internal_unsuspend_nolock(struct ast_bridge_channel *bridge_channel)
{
* \brief Unsuspend a channel from a bridge.
*
* \param bridge_channel Channel to unsuspend.
- *
- * \return Nothing
*/
static void bridge_channel_unsuspend(struct ast_bridge_channel *bridge_channel)
{
*
* \param bridge_channel Which channel to run the application on.
* \param data Action frame data to run the application.
- *
- * \return Nothing
*/
static void bridge_channel_run_app(struct ast_bridge_channel *bridge_channel, struct bridge_run_app *data)
{
*
* \param bridge_channel Which channel to play a file on.
* \param payload Action frame payload to play a file.
- *
- * \return Nothing
*/
static void bridge_channel_playfile(struct ast_bridge_channel *bridge_channel, struct bridge_playfile *payload)
{
*
* \param bridge_channel Which channel to call the callback on.
* \param data Action frame data to call the callback.
- *
- * \return Nothing
*/
static void bridge_channel_do_callback(struct ast_bridge_channel *bridge_channel, struct bridge_custom_callback *data)
{
* \since 12.0.0
*
* \param bridge_channel Channel to run expired intervals on.
- *
- * \return Nothing
*/
static void bridge_channel_handle_interval(struct ast_bridge_channel *bridge_channel)
{
* \since 12.8.0
*
* \param bridge_channel Channel to check expired interdigit timer on.
- *
- * \return Nothing
*/
static void bridge_channel_handle_feature_timeout(struct ast_bridge_channel *bridge_channel)
{
ao2_iterator_destroy(&iter);
}
-/*! \brief Internal function that plays back DTMF on a bridge channel */
+/*!
+ * \internal
+ * \brief Play back DTMF on a bridge channel
+ */
static void bridge_channel_dtmf_stream(struct ast_bridge_channel *bridge_channel, const char *dtmf)
{
ast_debug(1, "Playing DTMF stream '%s' out to %p(%s)\n",
* \param bridge_channel Channel to execute the action on.
* \param action What to do.
* \param data data from the action.
- *
- * \return Nothing
*/
static void bridge_channel_handle_action(struct ast_bridge_channel *bridge_channel,
enum bridge_channel_action_type action, void *data)
* \param bridge_channel Channel causing the check.
*
* \note On entry, bridge_channel->bridge is already locked.
- *
- * \return Nothing
*/
static void bridge_channel_dissolve_check(struct ast_bridge_channel *bridge_channel)
{
*
* \param bridge_channel Channel to execute the control frame action on.
* \param fr Control frame to handle.
- *
- * \return Nothing
*/
static void bridge_channel_handle_control(struct ast_bridge_channel *bridge_channel, struct ast_frame *fr)
{
*
* \param chan Channel to send text to
* \param f The frame containing the text data to send
- *
- * \return Nothing
*/
static void sendtext_safe(struct ast_channel *chan, const struct ast_frame *f)
{
* \since 12.0.0
*
* \param bridge_channel Channel to write outgoing frame.
- *
- * \return Nothing
*/
static void bridge_channel_handle_write(struct ast_bridge_channel *bridge_channel)
{
bridge_frame_free(fr);
}
-/*! \brief Internal function to handle DTMF from a channel */
+/*!
+ * \internal
+ * \brief Handle DTMF from a channel
+ */
static struct ast_frame *bridge_handle_dtmf(struct ast_bridge_channel *bridge_channel, struct ast_frame *frame)
{
struct ast_bridge_features *features = bridge_channel->features;
* \param bridge_channel Channel to wait.
*
* \note Each channel does writing/reading in their own thread.
- *
- * \return Nothing
*/
static void bridge_channel_wait(struct ast_bridge_channel *bridge_channel)
{
*
* \param bridge_channel Which channel is involved.
* \param type Specified join/leave event.
- *
- * \return Nothing
*/
static void bridge_channel_event_join_leave(struct ast_bridge_channel *bridge_channel, enum ast_bridge_hook_type type)
{