| 
									
										
										
										
											2013-05-14 21:45:08 +00:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Asterisk -- An open source telephony toolkit. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Copyright (C) 2013, Digium, Inc. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * David M. Lee, II <dlee@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_RES_STASIS_CONTROL_H
 | 
					
						
							|  |  |  | #define _ASTERISK_RES_STASIS_CONTROL_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*! \file
 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \brief Internal API for the Stasis application controller. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \author David M. Lee, II <dlee@digium.com> | 
					
						
							|  |  |  |  * \since 12 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "asterisk/stasis_app.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*!
 | 
					
						
							|  |  |  |  * \brief Create a control object. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \param channel Channel to control. | 
					
						
							| 
									
										
										
										
											2014-03-13 19:33:22 +00:00
										 |  |  |  * \param app stasis_app for which this control is being created. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2013-05-14 21:45:08 +00:00
										 |  |  |  * \return New control object. | 
					
						
							| 
									
										
										
										
											2021-11-16 17:26:23 +01:00
										 |  |  |  * \retval NULL on error. | 
					
						
							| 
									
										
										
										
											2013-05-14 21:45:08 +00:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2014-03-13 19:33:22 +00:00
										 |  |  | struct stasis_app_control *control_create(struct ast_channel *channel, struct stasis_app *app); | 
					
						
							| 
									
										
										
										
											2013-05-14 21:45:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-29 13:47:08 -05:00
										 |  |  | /*!
 | 
					
						
							|  |  |  |  * \brief Flush the control command queue. | 
					
						
							|  |  |  |  * \since 13.9.0 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \param control Control object to flush command queue. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | void control_flush_queue(struct stasis_app_control *control); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-14 21:45:08 +00:00
										 |  |  | /*!
 | 
					
						
							|  |  |  |  * \brief Dispatch all commands enqueued to this control. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \param control Control object to dispatch. | 
					
						
							|  |  |  |  * \param chan Associated channel. | 
					
						
							|  |  |  |  * \return Number of commands executed | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | int control_dispatch_all(struct stasis_app_control *control, | 
					
						
							|  |  |  | 	struct ast_channel *chan); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-13 15:27:32 +00:00
										 |  |  | /*!
 | 
					
						
							|  |  |  |  * \brief Blocks until \a control's command queue has a command available. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \param control Control to block on. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | void control_wait(struct stasis_app_control *control); | 
					
						
							| 
									
										
										
										
											2013-05-14 21:45:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-18 20:09:24 +00:00
										 |  |  | /*!
 | 
					
						
							|  |  |  |  * \brief Returns the count of items in a control's command queue. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \param control Control to count commands on | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2021-11-16 17:26:23 +01:00
										 |  |  |  * \return number of commands in the command que | 
					
						
							| 
									
										
										
										
											2014-04-18 20:09:24 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | int control_command_count(struct stasis_app_control *control); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-13 15:27:32 +00:00
										 |  |  | /*!
 | 
					
						
							|  |  |  |  * \brief Returns true if control_continue() has been called on this \a control. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \param control Control to query. | 
					
						
							| 
									
										
										
										
											2021-11-16 17:26:23 +01:00
										 |  |  |  * \retval True (non-zero) if control_continue() has been called. | 
					
						
							|  |  |  |  * \retval False (zero) otherwise. | 
					
						
							| 
									
										
										
										
											2013-08-13 15:27:32 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | int control_is_done(struct stasis_app_control *control); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-18 20:09:24 +00:00
										 |  |  | void control_mark_done(struct stasis_app_control *control); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-07 15:30:19 +00:00
										 |  |  | /*!
 | 
					
						
							|  |  |  |  * \brief Dispatch all queued prestart commands | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \param control The control for chan | 
					
						
							| 
									
										
										
										
											2021-11-16 17:26:23 +01:00
										 |  |  |  * \param chan The channel on which commands should be executed | 
					
						
							| 
									
										
										
										
											2014-08-07 15:30:19 +00:00
										 |  |  |  * | 
					
						
							|  |  |  |  * \return The number of commands executed | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | int control_prestart_dispatch_all(struct stasis_app_control *control, | 
					
						
							|  |  |  | 	struct ast_channel *chan); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*!
 | 
					
						
							|  |  |  |  * \brief Returns the pointer (non-reffed) to the app associated with this control | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \param control Control to query. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2021-11-16 17:26:23 +01:00
										 |  |  |  * \return A pointer to the associated stasis_app | 
					
						
							| 
									
										
										
										
											2014-08-07 15:30:19 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | struct stasis_app *control_app(struct stasis_app_control *control); | 
					
						
							| 
									
										
										
										
											2019-03-07 07:52:20 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | /*!
 | 
					
						
							|  |  |  |  * \brief Set the application the control object belongs to | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \param control The control for the channel | 
					
						
							|  |  |  |  * \param app The application this control will now belong to | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \note This will unref control's previous app by 1, and bump app by 1 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | void control_set_app(struct stasis_app_control *control, struct stasis_app *app); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*!
 | 
					
						
							|  |  |  |  * \brief Returns the name of the application we are moving to | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \param control The control for the channel | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \return The name of the application we are moving to | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | char *control_next_app(struct stasis_app_control *control); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*!
 | 
					
						
							|  |  |  |  * \brief Free any memory that was allocated for switching applications via | 
					
						
							|  |  |  |  * /channels/{channelId}/move | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \param control The control for the channel | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | void control_move_cleanup(struct stasis_app_control *control); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*!
 | 
					
						
							|  |  |  |  * \brief Returns the list of arguments to pass to the application we are moving to | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \note If you wish to get the size of the list, control_next_app_args_size should be | 
					
						
							|  |  |  |  * called before this, as this function will steal the elements from the string vector | 
					
						
							|  |  |  |  * and set the size to 0. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \param control The control for the channel | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \return The arguments to pass to the application we are moving to | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | char **control_next_app_args(struct stasis_app_control *control); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*!
 | 
					
						
							|  |  |  |  * \brief Returns the number of arguments to be passed to the application we are moving to | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \note This should always be called before control_next_app_args, as calling that function | 
					
						
							|  |  |  |  * will steal all elements from the string vector and set the size to 0. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \param control The control for the channel | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \return The number of arguments to be passed to the application we are moving to | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | int control_next_app_args_size(struct stasis_app_control *control); | 
					
						
							| 
									
										
										
										
											2014-08-07 15:30:19 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /*!
 | 
					
						
							|  |  |  |  * \brief Command callback for adding a channel to a bridge | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \param control The control for chan | 
					
						
							| 
									
										
										
										
											2016-04-15 14:36:59 -05:00
										 |  |  |  * \param chan The channel on which commands should be executed | 
					
						
							|  |  |  |  * \param data Bridge to be passed to the callback | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | int control_add_channel_to_bridge(struct stasis_app_control *control, struct ast_channel *chan, void *data); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*!
 | 
					
						
							|  |  |  |  * \brief Command for swapping a channel in a bridge | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \param control The control for chan | 
					
						
							|  |  |  |  * \param chan The channel on which commands should be executed | 
					
						
							|  |  |  |  * \param bridge Bridge to be passed to the callback | 
					
						
							|  |  |  |  * \param swap Channel to swap with when joining the bridge | 
					
						
							| 
									
										
										
										
											2014-08-07 15:30:19 +00:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2016-04-15 14:36:59 -05:00
										 |  |  | int control_swap_channel_in_bridge(struct stasis_app_control *control, struct ast_bridge *bridge, struct ast_channel *chan, struct ast_channel *swap); | 
					
						
							| 
									
										
										
										
											2014-08-07 15:30:19 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-28 18:10:40 -05:00
										 |  |  | /*!
 | 
					
						
							|  |  |  |  * \brief Stop playing silence to a channel right now. | 
					
						
							|  |  |  |  * \since 13.9.0 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * \param control The control for chan | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | void control_silence_stop_now(struct stasis_app_control *control); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-13 15:27:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-14 21:45:08 +00:00
										 |  |  | #endif /* _ASTERISK_RES_STASIS_CONTROL_H */
 |