diff options
author | David M. Lee <dlee@digium.com> | 2013-05-14 21:45:08 +0000 |
---|---|---|
committer | David M. Lee <dlee@digium.com> | 2013-05-14 21:45:08 +0000 |
commit | e8f4ac6c610265b46014da9259062bb74d3892d1 (patch) | |
tree | 1a891ebe67da746feef4733618da502f43efe8d3 /include/asterisk/stasis_app_impl.h | |
parent | d1d1425327378e16e77e7de6e64daccf289b4cc3 (diff) |
Break res_stasis into smaller files.
When implementing playback for stasis-http, the monolithicedness of
res_stasis really started to get in my way.
This patch breaks the major components of res_stasis.c into individual
files.
* res/stasis/app.c - Stasis application tracking
* res/stasis/control.c - Channel control objects
* res/stasis/command.c - Channel command object
This refactoring also allows res_stasis applications to be loaded as
independent modules, such as the new res_stasis_answer module.
The bulk of this patch is simply moving code from one file to another,
adjusting names and adding accessors as necessary.
Review: https://reviewboard.asterisk.org/r/2530/
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@388729 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'include/asterisk/stasis_app_impl.h')
-rw-r--r-- | include/asterisk/stasis_app_impl.h | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/include/asterisk/stasis_app_impl.h b/include/asterisk/stasis_app_impl.h new file mode 100644 index 000000000..d4b467756 --- /dev/null +++ b/include/asterisk/stasis_app_impl.h @@ -0,0 +1,88 @@ +/* + * 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_H +#define _ASTERISK_RES_STASIS_H + +/*! \file + * + * \brief Backend API for implementing components of res_stasis. + * + * \author David M. Lee, II <dlee@digium.com> + * \since 12 + * + * This file defines functions useful for defining new commands to execute + * on channels while they are in Stasis. + */ + +#include "asterisk/stasis_app.h" + +/*! + * \since 12 + * \brief Control a channel using \c stasis_app. + * + * This function blocks until the channel hangs up, or + * stasis_app_control_continue() is called on the channel's \ref + * stasis_app_control struct. + * + * \param chan Channel to control with Stasis. + * \param app_name Application controlling the channel. + * \param argc Number of arguments for the application. + * \param argv Arguments for the application. + */ +int stasis_app_exec(struct ast_channel *chan, const char *app_name, int argc, + char *argv[]); + +/*! Callback type for stasis app commands */ +typedef void *(*stasis_app_command_cb)(struct stasis_app_control *control, + struct ast_channel *chan, void *data); + +/*! + * \since 12 + * \brief Invokes a \a command on a \a control's channel. + * + * This function dispatches the command to be executed in the context of + * stasis_app_exec(), so this command will block waiting for the results of + * the command. + * + * \param control Control object for the channel to send the command to. + * \param command Command function to execute. + * \param data Optional data to pass along with the control function. + * \return Return value from \a command. + * \return \c NULL on error. + */ +void *stasis_app_send_command(struct stasis_app_control *control, + stasis_app_command_cb command, void *data); + +/*! + * \since 12 + * \brief Asynchronous version of stasis_app_send(). + * + * This function enqueues a command for execution, but returns immediately + * without waiting for the response. + * + * \param control Control object for the channel to send the command to. + * \param command Command function to execute. + * \param data Optional data to pass along with the control function. + * \return 0 on success. + * \return Non-zero on error. + */ +int stasis_app_send_command_async(struct stasis_app_control *control, + stasis_app_command_cb command, void *data); + +#endif /* _ASTERISK_RES_STASIS_H */ |