[asterisk-commits] tilghman: trunk r244393 - in /trunk: CHANGES apps/app_dial.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Feb 2 14:32:33 CST 2010


Author: tilghman
Date: Tue Feb  2 14:32:29 2010
New Revision: 244393

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=244393
Log:
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)


Modified:
    trunk/CHANGES
    trunk/apps/app_dial.c

Modified: trunk/CHANGES
URL: http://svnview.digium.com/svn/asterisk/trunk/CHANGES?view=diff&rev=244393&r1=244392&r2=244393
==============================================================================
--- trunk/CHANGES (original)
+++ trunk/CHANGES Tue Feb  2 14:32:29 2010
@@ -131,6 +131,8 @@
    argument is provided, the 'f' option works as it always has. If an argument is
    provided, then the connected party information of all outgoing channels created
    during the Dial will be set to the argument passed to the 'f' option.
+ * Dial now inherits the GOSUB_RETVAL from the peer, when the U() option runs a
+   Gosub on the peer.
 
 Dialplan Functions
 ------------------

Modified: trunk/apps/app_dial.c
URL: http://svnview.digium.com/svn/asterisk/trunk/apps/app_dial.c?view=diff&rev=244393&r1=244392&r2=244393
==============================================================================
--- trunk/apps/app_dial.c (original)
+++ trunk/apps/app_dial.c Tue Feb  2 14:32:29 2010
@@ -2319,27 +2319,33 @@
 
 			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);




More information about the asterisk-commits mailing list