summaryrefslogtreecommitdiff
path: root/main/manager.c
diff options
context:
space:
mode:
authorOlle Johansson <oej@edvina.net>2010-01-25 20:27:59 +0000
committerOlle Johansson <oej@edvina.net>2010-01-25 20:27:59 +0000
commit52b0cb912b19d80bb3c44af6049efe206b27015d (patch)
tree68d781278644101a896bd523ad22fd5c35c76358 /main/manager.c
parent245bd1861f236deb7a7e4cb5e2e400bf73f3afaa (diff)
Merged revisions 242850 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r242850 | oej | 2010-01-25 21:03:38 +0100 (Mån, 25 Jan 2010) | 2 lines Report error when writing to functions returns error in AMI setvar action ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@242904 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/manager.c')
-rw-r--r--main/manager.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/main/manager.c b/main/manager.c
index 3af61b37f..8f01ea278 100644
--- a/main/manager.c
+++ b/main/manager.c
@@ -2800,7 +2800,8 @@ static int action_setvar(struct mansession *s, const struct message *m)
const char *name = astman_get_header(m, "Channel");
const char *varname = astman_get_header(m, "Variable");
const char *varval = astman_get_header(m, "Value");
-
+ int res = 0;
+
if (ast_strlen_zero(varname)) {
astman_send_error(s, m, "No variable specified");
return 0;
@@ -2812,15 +2813,21 @@ static int action_setvar(struct mansession *s, const struct message *m)
return 0;
}
}
-
- pbx_builtin_setvar_helper(c, varname, S_OR(varval, ""));
+ if (varname[strlen(varname)-1] == ')') {
+ char *function = ast_strdupa(varname);
+ res = ast_func_write(c, function, varval);
+ } else {
+ pbx_builtin_setvar_helper(c, varname, S_OR(varval, ""));
+ }
if (c) {
c = ast_channel_unref(c);
}
-
- astman_send_ack(s, m, "Variable Set");
-
+ if (res == 0) {
+ astman_send_ack(s, m, "Variable Set");
+ } else {
+ astman_send_error(s, m, "Variable not set");
+ }
return 0;
}