diff options
author | Richard Mudgett <rmudgett@digium.com> | 2014-10-17 02:49:57 +0000 |
---|---|---|
committer | Richard Mudgett <rmudgett@digium.com> | 2014-10-17 02:49:57 +0000 |
commit | f91cb1207c7e7d6f0f3db6e207fd34ce3c6e5416 (patch) | |
tree | 3f165f34f1df09dafe2b9cf6bc2984a8464cfecb /main/channel.c | |
parent | df59a71b83d1c469717193db52d91f2fa6f2507f (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.c | 33 |
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)); } } } |