summaryrefslogtreecommitdiff
path: root/main/channel.c
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2014-10-17 02:49:57 +0000
committerRichard Mudgett <rmudgett@digium.com>2014-10-17 02:49:57 +0000
commitf91cb1207c7e7d6f0f3db6e207fd34ce3c6e5416 (patch)
tree3f165f34f1df09dafe2b9cf6bc2984a8464cfecb /main/channel.c
parentdf59a71b83d1c469717193db52d91f2fa6f2507f (diff)
AMI: Add missing VarSet events when a channel inherits variables.
There should be AMI VarSet events when channel variables are inherited by an outgoing channel. Also local;2 should generate VarSet events when it gets all of its channel variables from channel local;1. ASTERISK-24415 #close Reported by: Richard Mudgett Patches: jira_asterisk_24415_v12.patch (license #5621) patch uploaded by Richard Mudgett Review: https://reviewboard.asterisk.org/r/4074/ ........ Merged revisions 425782 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 425783 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@425784 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/channel.c')
-rw-r--r--main/channel.c33
1 files changed, 17 insertions, 16 deletions
diff --git a/main/channel.c b/main/channel.c
index 47d47b6b0..47a74b5f9 100644
--- a/main/channel.c
+++ b/main/channel.c
@@ -6333,41 +6333,42 @@ void ast_change_name(struct ast_channel *chan, const char *newname)
void ast_channel_inherit_variables(const struct ast_channel *parent, struct ast_channel *child)
{
- struct ast_var_t *current, *newvar;
+ struct ast_var_t *current;
+ struct ast_var_t *newvar;
const char *varname;
+ int vartype;
AST_LIST_TRAVERSE(ast_channel_varshead((struct ast_channel *) parent), current, entries) {
- int vartype = 0;
-
varname = ast_var_full_name(current);
- if (!varname)
+ if (!varname) {
continue;
+ }
+ vartype = 0;
if (varname[0] == '_') {
vartype = 1;
- if (varname[1] == '_')
+ if (varname[1] == '_') {
vartype = 2;
+ }
}
switch (vartype) {
case 1:
newvar = ast_var_assign(&varname[1], ast_var_value(current));
- if (newvar) {
- AST_LIST_INSERT_TAIL(ast_channel_varshead(child), newvar, entries);
- ast_debug(1, "Inheriting variable %s from %s to %s.\n",
- ast_var_name(newvar), ast_channel_name(parent), ast_channel_name(child));
- }
break;
case 2:
newvar = ast_var_assign(varname, ast_var_value(current));
- if (newvar) {
- AST_LIST_INSERT_TAIL(ast_channel_varshead(child), newvar, entries);
- ast_debug(1, "Inheriting variable %s from %s to %s.\n",
- ast_var_name(newvar), ast_channel_name(parent), ast_channel_name(child));
- }
break;
default:
- break;
+ continue;
+ }
+ if (newvar) {
+ ast_debug(1, "Inheriting variable %s from %s to %s.\n",
+ ast_var_full_name(newvar), ast_channel_name(parent),
+ ast_channel_name(child));
+ AST_LIST_INSERT_TAIL(ast_channel_varshead(child), newvar, entries);
+ ast_channel_publish_varset(child, ast_var_full_name(newvar),
+ ast_var_value(newvar));
}
}
}