Skip to content
Snippets Groups Projects
Commit f6b5cf96 authored by Tilghman Lesher's avatar Tilghman Lesher
Browse files

Make HASHes inheritable across channel creation.

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@241012 65c4cc65-6c06-0410-ace0-fbb531ad65f3
parent 1649ae07
Branches
Tags
No related merge requests found
...@@ -183,6 +183,9 @@ Dialplan Functions ...@@ -183,6 +183,9 @@ Dialplan Functions
* Added PASSTHRU, which literally passes the same argument back as its return * Added PASSTHRU, which literally passes the same argument back as its return
value. The intent is to be able to use a literal string argument to value. The intent is to be able to use a literal string argument to
functions that currently require a variable name as an argument. functions that currently require a variable name as an argument.
* HASH-associated variables now can be inherited across channel creation, by
prefixing the name of the hash at assignment with the appropriate number of
underscores, just like variables.
Dialplan Variables Dialplan Variables
------------------ ------------------
......
...@@ -831,7 +831,16 @@ static int array(struct ast_channel *chan, const char *cmd, char *var, ...@@ -831,7 +831,16 @@ static int array(struct ast_channel *chan, const char *cmd, char *var,
arg2.val[i]); arg2.val[i]);
if (i < arg2.argc) { if (i < arg2.argc) {
if (ishash) { if (ishash) {
snprintf(varname, sizeof(varname), HASH_FORMAT, origvar, arg1.var[i]); if (origvar[0] == '_') {
if (origvar[1] == '_') {
snprintf(varname, sizeof(varname), "__" HASH_FORMAT, origvar + 2, arg1.var[i]);
} else {
snprintf(varname, sizeof(varname), "_" HASH_FORMAT, origvar + 1, arg1.var[i]);
}
} else {
snprintf(varname, sizeof(varname), HASH_FORMAT, origvar, arg1.var[i]);
}
pbx_builtin_setvar_helper(chan, varname, arg2.val[i]); pbx_builtin_setvar_helper(chan, varname, arg2.val[i]);
} else { } else {
pbx_builtin_setvar_helper(chan, arg1.var[i], arg2.val[i]); pbx_builtin_setvar_helper(chan, arg1.var[i], arg2.val[i]);
...@@ -909,7 +918,15 @@ static int hash_write(struct ast_channel *chan, const char *cmd, char *var, cons ...@@ -909,7 +918,15 @@ static int hash_write(struct ast_channel *chan, const char *cmd, char *var, cons
} }
AST_STANDARD_APP_ARGS(arg, var); AST_STANDARD_APP_ARGS(arg, var);
snprintf(varname, sizeof(varname), HASH_FORMAT, arg.hashname, arg.hashkey); if (arg.hashname[0] == '_') {
if (arg.hashname[1] == '_') {
snprintf(varname, sizeof(varname), "__" HASH_FORMAT, arg.hashname + 2, arg.hashkey);
} else {
snprintf(varname, sizeof(varname), "_" HASH_FORMAT, arg.hashname + 1, arg.hashkey);
}
} else {
snprintf(varname, sizeof(varname), HASH_FORMAT, arg.hashname, arg.hashkey);
}
pbx_builtin_setvar_helper(chan, varname, value); pbx_builtin_setvar_helper(chan, varname, value);
return 0; return 0;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment