diff options
author | twilson <twilson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2010-09-10 19:25:08 +0000 |
---|---|---|
committer | twilson <twilson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2010-09-10 19:25:08 +0000 |
commit | 2d7639134c53e53ef345904913933b3eead99694 (patch) | |
tree | 26999f806d1bba5e9f5df58d7485d0ba25e77974 /funcs | |
parent | 6368131c6cbe811d9348bf387b9f62ae40b9fb37 (diff) |
Inherit CHANNEL() writes to both sides of a Local channel
Having Local (/n) channels as queue members and setting the language in the
extension with Set(CHANNEL(language)=fr) sets the language on the Local/...,2
channel. Hold time report playbacks happen on the Local/...,1 channel and
therefor do not play in the specified language.
This patch modifies func_channel_write to call the setoption callback and pass
the CHANNEL() write info to the callback. chan_local uses this information to
look up the other side of the channel and apply the same changes to it.
(closes issue #17673)
Reported by: Guggemand
Review: https://reviewboard.asterisk.org/r/903/
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@286059 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'funcs')
-rw-r--r-- | funcs/func_channel.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/funcs/func_channel.c b/funcs/func_channel.c index 99f6d1e61..c0ca62ec8 100644 --- a/funcs/func_channel.c +++ b/funcs/func_channel.c @@ -96,7 +96,7 @@ static int func_channel_read(struct ast_channel *chan, char *function, return ret; } -static int func_channel_write(struct ast_channel *chan, char *function, +static int func_channel_write_real(struct ast_channel *chan, char *function, char *data, const char *value) { int ret = 0; @@ -139,6 +139,24 @@ static int func_channel_write(struct ast_channel *chan, char *function, return ret; } +static int func_channel_write(struct ast_channel *chan, char *function, char *data, const char *value) +{ + int res; + ast_chan_write_info_t write_info = { + .version = AST_CHAN_WRITE_INFO_T_VERSION, + .write_fn = func_channel_write_real, + .chan = chan, + .function = function, + .data = data, + .value = value, + }; + + res = func_channel_write_real(chan, function, data, value); + ast_channel_setoption(chan, AST_OPTION_CHANNEL_WRITE, &write_info, sizeof(write_info), 0); + + return res; +} + static struct ast_custom_function channel_function = { .name = "CHANNEL", .synopsis = "Gets/sets various pieces of information about the channel.", |