Files
asterisk/res/stasis/control.h
David M. Lee 987fdfb444 ARI: allow other operations to happen while bridged
This patch changes ARI bridging to allow other channel operations to
happen while the channel is bridged.

ARI channel operations are designed to queue up and execute
sequentially. This meant, though, that while a channel was bridged,
any other channel operations would queue up and execute only after the
channel left the bridge.

This patch changes ARI bridging so that channel commands can execute
while the channel is bridged. For most operations, things simply work
as expected. The one thing that ended up being a bit odd is recording.

The current recording implementation will fail when one attempts to
record a channel that's in a bridge. Note that the bridge itself may
be recording; it's recording a specific channel in the bridge that
fails. While this is an annoying limitation, channel recording is
still very useful for use cases such as voice mail, and bridge
recording makes up much of the difference for other use cases.

(closes issue ASTERISK-22084)
Review: https://reviewboard.asterisk.org/r/2726/


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@396568 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2013-08-13 15:27:32 +00:00

77 lines
2.0 KiB
C

/*
* 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.
* \return New control object.
* \return \c NULL on error.
*/
struct stasis_app_control *control_create(struct ast_channel *channel);
/*!
* \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);
/*!
* \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);
/*!
* \brief Signals that a control object should finish and exit back to the
* dialplan.
*
* \param control Control object to continue.
*/
void control_continue(struct stasis_app_control *control);
/*!
* \brief Returns true if control_continue() has been called on this \a control.
*
* \param control Control to query.
* \return True (non-zero) if control_continue() has been called.
* \return False (zero) otherwise.
*/
int control_is_done(struct stasis_app_control *control);
#endif /* _ASTERISK_RES_STASIS_CONTROL_H */