Files
asterisk/include/asterisk/core_local.h
Matthew Jordan 30d379851e Create Local channel messages on the Stasis message bus and produce AMI events
This patch does the following:

* It adds a virtual table of callbacks to core_unreal. These callbacks can be
  supplied by concrete implementations of "unreal" channel drivers, which lets
  the unreal channel driver call specific functionality when it performs some
  action. Currently, this is done to notify implementations when an
  optimization operation has begun, and when an optimization operation has
  succeeded.

* It adds Stasis-Core messages for Local channel bridging and Local channel
  optimization. Local channel optimization is now two events: a Begin and an
  End. Some consumers of Stasis-Core may want to know when an operation is
  beginning so that they can 'prepare' their information; others will be more
  concerned about when the operation has completed, so that they can 'fix up'
  information. Stasis-Core allows for both, as does AMI.

Review: https://reviewboard.asterisk.org/r/2552



git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@393801 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2013-07-08 14:26:40 +00:00

138 lines
4.1 KiB
C

/*
* Asterisk -- An open source telephony toolkit.
*
* Copyright (C) 2013 Digium, Inc.
*
* Richard Mudgett <rmudgett@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.
*/
/*!
* \file
* \brief Local proxy channel special access.
*
* \author Richard Mudgett <rmudgett@digium.com>
*
* See Also:
* \arg \ref AstCREDITS
*/
#ifndef _ASTERISK_CORE_LOCAL_H
#define _ASTERISK_CORE_LOCAL_H
#if defined(__cplusplus) || defined(c_plusplus)
extern "C" {
#endif
/* Forward declare some struct names */
struct ast_channel;
struct ast_bridge;
struct ast_bridge_features;
struct stasis_message_type;
/* ------------------------------------------------------------------- */
/*!
* \brief Get the other local channel in the pair.
* \since 12.0.0
*
* \param ast Local channel to get peer.
*
* \note On entry, ast must be locked.
*
* \retval peer reffed on success.
* \retval NULL if no peer or error.
*/
struct ast_channel *ast_local_get_peer(struct ast_channel *ast);
/*!
* \brief Setup the outgoing local channel to join a bridge on ast_call().
* \since 12.0.0
*
* \param ast Either channel of a local channel pair.
* \param bridge Bridge to join.
* \param swap Channel to swap with when joining.
* \param features Bridge features structure.
*
* \note The features parameter must be NULL or obtained by
* ast_bridge_features_new(). You must not dereference features
* after calling even if the call fails.
*
* \note Intended to be called after ast_request() and before
* ast_call() on a local channel.
*
* \retval 0 on success.
* \retval -1 on error.
*/
int ast_local_setup_bridge(struct ast_channel *ast, struct ast_bridge *bridge, struct ast_channel *swap, struct ast_bridge_features *features);
/*!
* \brief Setup the outgoing local channel to masquerade into a channel on ast_call().
* \since 12.0.0
*
* \param ast Either channel of a local channel pair.
* \param masq Channel to masquerade into.
*
* \note Intended to be called after ast_request() and before
* ast_call() on a local channel.
*
* \retval 0 on success.
* \retval -1 on error.
*/
int ast_local_setup_masquerade(struct ast_channel *ast, struct ast_channel *masq);
/* ------------------------------------------------------------------- */
/*!
* \brief Message type for when two local channel halves are bridged together
* \since 12.0.0
*
* \note Payloads for the \ref ast_local_bridge_type are a \ref ast_multi_channel_blob.
* Roles for the channels in the \ref ast_multi_channel_blob are "1" and "2", reflecting
* the two halves. Unlike most other bridges, the 'bridge' between two local channels is
* not part of the bridge framework; as such, the message simply references the two local
* channel halves that are now bridged.
*
* \retval A \ref stasis message type
*/
struct stasis_message_type *ast_local_bridge_type(void);
/*!
* \brief Message type for when a local channel optimization begins
* \since 12.0.0
*
* \note Payloads for the \ref ast_local_optimization_begin_type are a
* \ref ast_multi_channel_blob. Roles for the channels in the \ref ast_multi_channel_blob
* are "1" and "2", reflecting the two halves.
*
* \retval A \ref stasis message type
*/
struct stasis_message_type *ast_local_optimization_begin_type(void);
/*!
* \brief Message type for when a local channel optimization completes
* \since 12.0.0
*
* \note Payloads for the \ref ast_local_optimization_end_type are a
* \ref ast_multi_channel_blob. Roles for the channels in the \ref ast_multi_channel_blob
* are "1" and "2", reflecting the two halves.
*
* \retval A \ref stasis message type
*/
struct stasis_message_type *ast_local_optimization_end_type(void);
#if defined(__cplusplus) || defined(c_plusplus)
}
#endif
#endif /* _ASTERISK_CORE_LOCAL_H */