From 2638192439d2dcd65576b685d82f8a90747247ac Mon Sep 17 00:00:00 2001 From: "Kevin P. Fleming" Date: Sun, 15 May 2005 23:53:11 +0000 Subject: [PATCH] add EVAL function, deprecate Eval application (bug #4277) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5689 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- apps/app_eval.c | 6 ++++++ funcs/func_strings.c | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/apps/app_eval.c b/apps/app_eval.c index 9d9620774d..73b99c085f 100755 --- a/apps/app_eval.c +++ b/apps/app_eval.c @@ -49,6 +49,12 @@ static int eval_exec(struct ast_channel *chan, void *data) int res=0; struct localuser *u; char *s, *newvar=NULL, tmp[MAXRESULT]; + static int dep_warning = 0; + + if (!dep_warning) { + ast_log(LOG_WARNING, "This application has been deprecated in favor of the dialplan function, EVAL\n"); + dep_warning = 1; + } LOCAL_USER_ADD(u); diff --git a/funcs/func_strings.c b/funcs/func_strings.c index 4d571bf9f4..0385fc5ddb 100755 --- a/funcs/func_strings.c +++ b/funcs/func_strings.c @@ -171,3 +171,35 @@ struct ast_custom_function strftime_function = { .syntax = "STRFTIME([][,[timezone][,format]])", .read = acf_strftime, }; + +static char *function_eval(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) +{ + if (!data || ast_strlen_zero(data)) { + ast_log(LOG_WARNING, "EVAL requires an argument: EVAL()\n"); + return buf; + } + + pbx_substitute_variables_helper(chan, data, buf, len - 1); + + return buf; +} + +#ifndef BUILTIN_FUNC +static +#endif +struct ast_custom_function eval_function = { + .name = "EVAL", + .synopsis = "Evaluate stored variables.", + .syntax = "EVAL()", + .desc = "Using EVAL basically causes a string to be evaluated twice.\n" + "When a variable or expression is in the dialplan, it will be\n" + "evaluated at runtime. However, if the result of the evaluation\n" + "is in fact a variable or expression, using EVAL will have it\n" + "evaluated a second time. For example, if the variable ${MYVAR}\n" + "contains \"${OTHERVAR}\", then the result of putting ${EVAL(${MYVAR})}\n" + "in the dialplan will be the contents of the variable, OTHERVAR.\n" + "Normally, by just putting ${MYVAR} in the dialplan, you would be\n" + "left with \"${OTHERVAR}\".\n", + .read = function_eval, +}; +