Run predial routine on local;2 channel where you would expect.

Before this patch, the predial routine executes on the ;1 channel of a
local channel pair.  Executing predial on the ;1 channel of a local
channel pair is of limited utility.  Any channel variables set by the
predial routine executing on the ;1 channel will not be available when the
local channel executes dialplan on the ;2 channel.

* Create ast_pre_call() and an associated pre_call() technology callback
to handle running the predial routine.  If a channel technology does not
provide the callback, the predial routine is simply run on the channel.

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


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@366183 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Richard Mudgett
2012-05-10 21:29:41 +00:00
parent dd81b047db
commit 4ea636c776
4 changed files with 80 additions and 1 deletions

View File

@@ -676,6 +676,20 @@ struct ast_channel_tech {
* parameters as a parameter.
*/
int (* cc_callback)(struct ast_channel *inbound, const char *dest, ast_cc_callback_fn callback);
/*!
* \brief Execute a Gosub call on the channel in a technology specific way before a call is placed.
* \since 11.0
*
* \param chan Channel to execute Gosub in a tech specific way.
* \param sub_args Gosub application parameter string.
*
* \note The chan is locked before calling.
*
* \retval 0 on success.
* \retval -1 on error.
*/
int (*pre_call)(struct ast_channel *chan, const char *sub_args);
};
/*! Kill the channel channel driver technology descriptor. */
@@ -1526,6 +1540,24 @@ int ast_raw_answer(struct ast_channel *chan, int cdr_answer);
*/
int __ast_answer(struct ast_channel *chan, unsigned int delay, int cdr_answer);
/*!
* \brief Execute a Gosub call on the channel before a call is placed.
* \since 11.0
*
* \details
* This is called between ast_request() and ast_call() to
* execute a predial routine on the newly created channel.
*
* \param chan Channel to execute Gosub.
* \param sub_args Gosub application parameter string.
*
* \note Absolutely _NO_ channel locks should be held before calling this function.
*
* \retval 0 on success.
* \retval -1 on error.
*/
int ast_pre_call(struct ast_channel *chan, const char *sub_args);
/*!
* \brief Make a call
* \note Absolutely _NO_ channel locks should be held before calling this function.