diff options
author | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-06-03 21:04:04 +0000 |
---|---|---|
committer | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-06-03 21:04:04 +0000 |
commit | ca10c312b67c21ff0fc454989e65444150d9bed4 (patch) | |
tree | 2ee9a4e077242d958974deaba5029ead04518f5b /funcs/func_logic.c | |
parent | 9219fe2898bd796dfaa440a60dd78413de3ee494 (diff) |
clean up logic functions code and help texts
add IFTIME function (bug #4394, with mods)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@5836 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'funcs/func_logic.c')
-rwxr-xr-x | funcs/func_logic.c | 165 |
1 files changed, 104 insertions, 61 deletions
diff --git a/funcs/func_logic.c b/funcs/func_logic.c index d4e6cdfb7..12402637b 100755 --- a/funcs/func_logic.c +++ b/funcs/func_logic.c @@ -23,82 +23,114 @@ static char *builtin_function_isnull(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) { - char *ret_true = "1", *ret_false = "0"; - - return data && *data ? ret_false : ret_true; + return data && *data ? "0" : "1"; } static char *builtin_function_exists(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) { - char *ret_true = "1", *ret_false = "0"; + return data && *data ? "1" : "0"; +} - return data && *data ? ret_true : ret_false; +static char *builtin_function_iftime(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) +{ + struct ast_timing timing; + char *ret; + char *expr; + char *iftrue; + char *iffalse; + + if (!(data = ast_strdupa(data))) { + ast_log(LOG_WARNING, "Memory Error!\n"); + return NULL; + } + + data = ast_strip_quoted(data, "\"", "\""); + expr = strsep(&data, "?"); + iftrue = strsep(&data, ":"); + iffalse = data; + + if (!expr || ast_strlen_zero(expr) || !(iftrue || iffalse)) { + ast_log(LOG_WARNING, "Syntax IFTIME(<timespec>?[<true>][:<false>])\n"); + return NULL; + } + + if (!ast_build_timing(&timing, expr)) { + ast_log(LOG_WARNING, "Invalid Time Spec.\n"); + return NULL; + } + + if (iftrue) + iftrue = ast_strip_quoted(iftrue, "\"", "\""); + if (iffalse) + iffalse = ast_strip_quoted(iffalse, "\"", "\""); + + if ((ret = ast_check_timing(&timing) ? iftrue : iffalse)) { + ast_copy_string(buf, ret, len); + ret = buf; + } + + return ret; } static char *builtin_function_if(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) { - char *ret = NULL; - char *mydata = NULL; - char *expr = NULL; - char *iftrue = NULL; - char *iffalse = NULL; - - if((mydata = ast_strdupa(data))) { - expr = mydata; - if ((iftrue = strchr(mydata, '?'))) { - *iftrue = '\0'; - iftrue++; - if ((iffalse = strchr(iftrue, ':'))) { - *iffalse = '\0'; - iffalse++; - } - } - - if (expr && iftrue) { - expr = ast_strip_quoted(expr, "\"", "\""); - iftrue = ast_strip_quoted(iftrue, "\"", "\""); - - if (iffalse) { - iffalse = ast_strip_quoted(iffalse, "\"", "\""); - } - ret = ast_true(expr) ? iftrue : iffalse; - if (ret) { - ast_copy_string(buf, ret, len); - ret = buf; - } - } else { - ast_log(LOG_WARNING, "Syntax $(if <expr>?[<truecond>][:<falsecond>])\n"); - ret = NULL; - } - } else { + char *ret; + char *expr; + char *iftrue; + char *iffalse; + + if (!(data = ast_strdupa(data))) { ast_log(LOG_WARNING, "Memory Error!\n"); - ret = NULL; + return NULL; } + data = ast_strip_quoted(data, "\"", "\""); + expr = strsep(&data, "?"); + iftrue = strsep(&data, ":"); + iffalse = data; + + if (!expr || ast_strlen_zero(expr) || !(iftrue || iffalse)) { + ast_log(LOG_WARNING, "Syntax IF(<timespec>?[<true>][:<false>])\n"); + return NULL; + } + + if (iftrue) + iftrue = ast_strip_quoted(iftrue, "\"", "\""); + if (iffalse) + iffalse = ast_strip_quoted(iffalse, "\"", "\""); + + if ((ret = ast_true(expr) ? iftrue : iffalse)) { + ast_copy_string(buf, ret, len); + ret = buf; + } + return ret; } static char *builtin_function_set(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) { - char *ret = NULL, *varname, *val; - - if ((varname = ast_strdupa(data))) { - if ((val = strchr(varname, '='))) { - *val = '\0'; - val++; - varname = ast_strip(varname); - val = ast_strip(val); - pbx_builtin_setvar_helper(chan, varname, val); - ast_copy_string(buf, val, len); - } else { - ast_log(LOG_WARNING, "Syntax Error!\n"); - } - - } else { - ast_log(LOG_WARNING, "Memory Error!\n"); - } + char *varname; + char *val; - return ret; + if (!(data = ast_strdupa(data))) { + ast_log(LOG_WARNING, "Memory Error!\n"); + return NULL; + } + + varname = strsep(&data, "="); + val = data; + + if (!varname || ast_strlen_zero(varname) || !val) { + ast_log(LOG_WARNING, "Syntax SET(<varname>=[<value>])\n"); + return NULL; + } + + varname = ast_strip(varname); + val = ast_strip(val); + pbx_builtin_setvar_helper(chan, varname, val); + ast_copy_string(buf, val, len); + + return buf; } #ifndef BUILTIN_FUNC @@ -116,8 +148,8 @@ static #endif struct ast_custom_function set_function = { .name = "SET", - .synopsis = "SET assigns a value to a function call.", - .syntax = "SET(<varname>=<value>)", + .synopsis = "SET assigns a value to a channel variable", + .syntax = "SET(<varname>=[<value>])", .read = builtin_function_set, }; @@ -137,6 +169,17 @@ static struct ast_custom_function if_function = { .name = "IF", .synopsis = "Conditional: Returns the data following '?' if true else the data following ':'", - .syntax = "IF(<expr>?<true>:<false>)", + .syntax = "IF(<expr>?[<true>][:<false>])", .read = builtin_function_if, }; + + +#ifndef BUILTIN_FUNC +static +#endif +struct ast_custom_function if_time_function = { + .name = "IFTIME", + .synopsis = "Temporal Conditional: Returns the data following '?' if true else the data following ':'", + .syntax = "IFTIME(<timespec>?[<true>][:<false>])", + .read = builtin_function_iftime, +}; |