mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	Fix CLI "bridge kick <bridge> <channel>" to check if the bridge needs dissolving.
SIP/foo -- Local;1==Local;2 -- .... -- Local;1==Local;2 -- SIP/bar Kick a ;1 channel and the chain toward SIP/foo goes away. Kick a ;2 channel and the chain toward SIP/bar goes away. This can leave a local channel chain between the kicked ;1 and ;2 channels that are orphaned until you manually request one of those channels to hangup or request the bridge to dissolve. * Added ast_bridge_kick() as a companion to ast_bridge_remove(). The functional difference is that ast_bridge_kick() may dissolve the bridge as a result of the channel leaving the bridge. * Made CLI "bridge kick <bridge> <channel>" use ast_bridge_kick() instead of ast_bridge_remove() so the bridge can dissolve if needed. * Renamed bridge_channel_handle_hangup() to ast_bridge_channel_kick() and made it accessible to other files. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@396877 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		| @@ -562,6 +562,37 @@ int ast_bridge_depart(struct ast_channel *chan); | ||||
|  */ | ||||
| int ast_bridge_remove(struct ast_bridge *bridge, struct ast_channel *chan); | ||||
|  | ||||
| /*! | ||||
|  * \brief Kick a channel from a bridge | ||||
|  * | ||||
|  * \param bridge Bridge that the channel is to be kicked from | ||||
|  * \param chan Channel to kick | ||||
|  * | ||||
|  * \retval 0 on success | ||||
|  * \retval -1 on failure | ||||
|  * | ||||
|  * Example usage: | ||||
|  * | ||||
|  * \code | ||||
|  * ast_bridge_kick(bridge, chan); | ||||
|  * \endcode | ||||
|  * | ||||
|  * \details | ||||
|  * This kicks the channel pointed to by the chan pointer from | ||||
|  * the bridge pointed to by the bridge pointer and requests that | ||||
|  * it be hung up.  Control over the channel will NOT be given to | ||||
|  * the calling thread. | ||||
|  * | ||||
|  * \note The functional difference between ast_bridge_kick() and | ||||
|  * ast_bridge_remove() is that the bridge may dissolve as a | ||||
|  * result of the channel being kicked. | ||||
|  * | ||||
|  * \note This API call can be used on channels that were added | ||||
|  * to the bridge using both ast_bridge_join and | ||||
|  * ast_bridge_impart. | ||||
|  */ | ||||
| int ast_bridge_kick(struct ast_bridge *bridge, struct ast_channel *chan); | ||||
|  | ||||
| /*! | ||||
|  * \brief Merge two bridges together | ||||
|  * | ||||
|   | ||||
| @@ -583,6 +583,19 @@ int ast_bridge_channel_queue_callback(struct ast_bridge_channel *bridge_channel, | ||||
| int ast_bridge_channel_write_park(struct ast_bridge_channel *bridge_channel, const char *parkee_uuid, | ||||
| 	const char *parker_uuid, const char *app_data); | ||||
|  | ||||
| /*! | ||||
|  * \brief Kick the channel out of the bridge. | ||||
|  * \since 12.0.0 | ||||
|  * | ||||
|  * \param bridge_channel Which channel is being kicked or hungup. | ||||
|  * | ||||
|  * \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); | ||||
|  | ||||
| #if defined(__cplusplus) || defined(c_plusplus) | ||||
| } | ||||
| #endif | ||||
|   | ||||
		Reference in New Issue
	
	Block a user