aboutsummaryrefslogtreecommitdiffstats
path: root/funcs/func_channel.c
diff options
context:
space:
mode:
authortwilson <twilson@f38db490-d61c-443f-a65b-d21fe96a405b>2010-09-10 22:15:47 +0000
committertwilson <twilson@f38db490-d61c-443f-a65b-d21fe96a405b>2010-09-10 22:15:47 +0000
commit83c8d81101f39121a525a2f31e63c7e9302d6f3c (patch)
tree4c88adbabae477066be2fb66ab59069f84ce1d44 /funcs/func_channel.c
parent77ff702687d4dbe6b63ecc0c50880f3db3ef8727 (diff)
Merged revisions 286189 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.8 ................ r286189 | twilson | 2010-09-10 17:04:53 -0500 (Fri, 10 Sep 2010) | 30 lines Merged revisions 286115 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.6.2 ................ r286115 | twilson | 2010-09-10 15:35:25 -0500 (Fri, 10 Sep 2010) | 23 lines Merged revisions 286059 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r286059 | twilson | 2010-09-10 14:25:08 -0500 (Fri, 10 Sep 2010) | 16 lines 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/trunk@286190 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'funcs/func_channel.c')
-rw-r--r--funcs/func_channel.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/funcs/func_channel.c b/funcs/func_channel.c
index 69fb72fb3..c0f85d372 100644
--- a/funcs/func_channel.c
+++ b/funcs/func_channel.c
@@ -378,7 +378,7 @@ static int func_channel_read(struct ast_channel *chan, const char *function,
return ret;
}
-static int func_channel_write(struct ast_channel *chan, const char *function,
+static int func_channel_write_real(struct ast_channel *chan, const char *function,
char *data, const char *value)
{
int ret = 0;
@@ -496,6 +496,24 @@ static int func_channel_write(struct ast_channel *chan, const char *function,
return ret;
}
+static int func_channel_write(struct ast_channel *chan, const 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",
.read = func_channel_read,