From e8f4ac6c610265b46014da9259062bb74d3892d1 Mon Sep 17 00:00:00 2001 From: "David M. Lee" Date: Tue, 14 May 2013 21:45:08 +0000 Subject: 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 --- include/asterisk/stasis_app_impl.h | 88 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 include/asterisk/stasis_app_impl.h (limited to 'include/asterisk/stasis_app_impl.h') 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 + * + * 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 + * \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 */ -- cgit v1.2.3