diff --git a/CHANGES b/CHANGES index 1630f587d5a48d90525b542d1cd3c076755f3426..9c5e55f871634e6c2272c62847d2f1fdd858d201 100644 --- a/CHANGES +++ b/CHANGES @@ -65,6 +65,7 @@ Changes since Asterisk 1.4-beta was branched: * Added the parkedcalltransfers option to features.conf * Added 's' option to Page application. * Added the srvlookup option to iax.conf + * Added 'E' and 'V' commands to ExternalIVR. SIP changes ----------- diff --git a/apps/app_externalivr.c b/apps/app_externalivr.c index 5e81445836ec2c118ba10ecce39af9d8d8031f8e..7f2071630d93b2024124f43deb48b5be5631cf26 100644 --- a/apps/app_externalivr.c +++ b/apps/app_externalivr.c @@ -487,9 +487,15 @@ static int app_exec(struct ast_channel *chan, void *data) AST_LIST_INSERT_TAIL(&u->playlist, entry, list); AST_LIST_UNLOCK(&u->playlist); } + } else if (input[0] == 'E') { + ast_chan_log(LOG_NOTICE, chan, "Exiting: %s\n", &input[2]); + send_child_event(child_events, 'E', NULL, chan); + res = 0; + break; } else if (input[0] == 'H') { ast_chan_log(LOG_NOTICE, chan, "Hanging up: %s\n", &input[2]); send_child_event(child_events, 'H', NULL, chan); + res = -1; break; } else if (input[0] == 'O') { if (!strcasecmp(&input[2], "autoclear")) @@ -498,6 +504,15 @@ static int app_exec(struct ast_channel *chan, void *data) u->option_autoclear = 0; else ast_chan_log(LOG_WARNING, chan, "Unknown option requested '%s'\n", &input[2]); + } else if (input[0] == 'V') { + char *c; + c = strchr(&input[2], '='); + if (!c) { + send_child_event(child_events, 'Z', NULL, chan); + } else { + *c++ = '\0'; + pbx_builtin_setvar_helper(chan, &input[2], c); + } } } else if (ready_fd == child_errors_fd) { char input[1024]; diff --git a/doc/externalivr.txt b/doc/externalivr.txt index a1d4757e7aad133982dd452f26b55d828da087bd..73fb5820fa3296d1461564265709c4e0e8800db2 100644 --- a/doc/externalivr.txt +++ b/doc/externalivr.txt @@ -55,6 +55,7 @@ A-D: DTMF event for keys A through D *: DTMF event for key * #: DTMF event for key # H: the channel was hung up by the connected party +E: the script requested an exit Z: the previous command was unable to be executed (file does not exist, etc.) T: the play list was interrupted (see below) @@ -76,7 +77,9 @@ The child process can send commands on stdout in the following formats: S,filename A,filename H,message +E,message O,option +V,name=value The 'S' command checks to see if there is a playable audio file with the specified name, and if so, clear's the generator's playlist and @@ -93,6 +96,9 @@ the specified name, and if so, adds it to the generator's playlist. The same playability and exception rules apply as for the 'S' command. +The 'E' command stops the generator and continues execution in the dialplan, +and logs the supplied message to the Asterisk log. + The 'H' command stops the generator and hangs up the channel, and logs the supplied message to the Asterisk log. @@ -102,6 +108,8 @@ ExternalIVR() application. The supported options are: Automatically interrupt and clear the playlist upon reception of DTMF input. +The 'V' command sets the specified channel variable to the specified value. + Errors ------