summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorTilghman Lesher <tilghman@meg.abyt.es>2010-02-02 20:32:29 +0000
committerTilghman Lesher <tilghman@meg.abyt.es>2010-02-02 20:32:29 +0000
commitdd1c5f27ee6e4447e144c27305b4c88b4d4257a6 (patch)
tree8eb7064b171a4f617d3ace3f0d6841b0d9330578 /apps
parent5071b6debc596395a39115df0f76851fbb9afba6 (diff)
Properly respect GOSUB_RESULT as to what to do with the master channel.
Previously, we would parse GOSUB_RESULT, but not actually do anything with it. Also, allow GOSUB_RETVAL to be inherited back across a peer/master channel. (closes issue #16687) Reported by: bklang Patches: app_dial-preserve-gosub_retval.patch uploaded by bklang (license 919) (with modifications) (closes issue #16686) Reported by: bklang Patches: app_dial-respect-gosub_result.patch uploaded by bklang (license 919) (with modifications) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@244393 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'apps')
-rw-r--r--apps/app_dial.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/apps/app_dial.c b/apps/app_dial.c
index 95c0b359e..2ca2c4a95 100644
--- a/apps/app_dial.c
+++ b/apps/app_dial.c
@@ -2319,27 +2319,33 @@ static int dial_exec_full(struct ast_channel *chan, const char *data, struct ast
if (!res9 && (gosub_result = pbx_builtin_getvar_helper(peer, "GOSUB_RESULT"))) {
char *gosub_transfer_dest;
+ const char *gosub_retval = pbx_builtin_getvar_helper(peer, "GOSUB_RETVAL");
+
+ /* Inherit return value from the peer, so it can be used in the master */
+ if (gosub_retval) {
+ pbx_builtin_setvar_helper(chan, "GOSUB_RETVAL", gosub_retval);
+ }
if (!strcasecmp(gosub_result, "BUSY")) {
ast_copy_string(pa.status, gosub_result, sizeof(pa.status));
ast_set_flag64(peerflags, OPT_GO_ON);
- res9 = -1;
+ res = -1;
} else if (!strcasecmp(gosub_result, "CONGESTION") || !strcasecmp(gosub_result, "CHANUNAVAIL")) {
ast_copy_string(pa.status, gosub_result, sizeof(pa.status));
ast_set_flag64(peerflags, OPT_GO_ON);
- res9 = -1;
+ res = -1;
} else if (!strcasecmp(gosub_result, "CONTINUE")) {
/* hangup peer and keep chan alive assuming the macro has changed
the context / exten / priority or perhaps
the next priority in the current exten is desired.
*/
ast_set_flag64(peerflags, OPT_GO_ON);
- res9 = -1;
+ res = -1;
} else if (!strcasecmp(gosub_result, "ABORT")) {
/* Hangup both ends unless the caller has the g flag */
- res9 = -1;
+ res = -1;
} else if (!strncasecmp(gosub_result, "GOTO:", 5) && (gosub_transfer_dest = ast_strdupa(gosub_result + 5))) {
- res9 = -1;
+ res = -1;
/* perform a transfer to a new extension */
if (strchr(gosub_transfer_dest, '^')) { /* context^exten^priority*/
replace_macro_delimiter(gosub_transfer_dest);