aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGES2
-rw-r--r--apps/app_externalivr.c14
-rw-r--r--doc/externalivr.txt10
3 files changed, 18 insertions, 8 deletions
diff --git a/CHANGES b/CHANGES
index d30f4d154..052c37089 100644
--- a/CHANGES
+++ b/CHANGES
@@ -399,6 +399,8 @@ Other Dialplan Application Changes
or NOCHANNEL if the given channel was not found.
* The silencethreshold setting that was previously configurable in multiple
applications is now settable globally via dsp.conf.
+ * Added ability to communicate over a TCP socket instead of forking a child process for the
+ ExternalIVR application.
Music On Hold Changes
---------------------
diff --git a/apps/app_externalivr.c b/apps/app_externalivr.c
index 5c63fb685..b01253d5c 100644
--- a/apps/app_externalivr.c
+++ b/apps/app_externalivr.c
@@ -52,13 +52,13 @@ static const char *app = "ExternalIVR";
static const char *synopsis = "Interfaces with an external IVR application";
static const char *descrip =
-" ExternalIVR(command[,arg[,arg...]]): Forks a process to run the supplied command,\n"
-"and starts a generator on the channel. The generator's play list is\n"
-"controlled by the external application, which can add and clear entries\n"
-"via simple commands issued over its stdout. The external application\n"
-"will receive all DTMF events received on the channel, and notification\n"
-"if the channel is hung up. The application will not be forcibly terminated\n"
-"when the channel is hung up.\n"
+" ExternalIVR(command|ivr://ivrhost[,arg[,arg...]]): Either forks a process\n"
+"to run given command or makes a socket to connect to given host and starts\n"
+"a generator on the channel. The generator's play list is controlled by the\n"
+"external application, which can add and clear entries via simple commands\n"
+"issued over its stdout. The external application will receive all DTMF events\n"
+"received on the channel, and notification if the channel is hung up. The\n"
+"application will not be forcibly terminated when the channel is hung up.\n"
"See doc/externalivr.txt for a protocol specification.\n";
/* XXX the parser in gcc 2.95 gets confused if you don't put a space between 'name' and the comma */
diff --git a/doc/externalivr.txt b/doc/externalivr.txt
index 73fb5820f..b17ed8852 100644
--- a/doc/externalivr.txt
+++ b/doc/externalivr.txt
@@ -10,7 +10,7 @@ blocking).
The arguments to ExternalIVR() consist of the command to execute and
any arguments to pass to it, the same as the System() application
-accepts. The external command will be executed in a child process,
+accepts. The external command can be executed in a child process,
with its standard file handles connected to the Asterisk process as
follows:
@@ -18,6 +18,14 @@ stdin (0) - DTMF and hangup events will be received on this handle
stdout (1) - Playback and hangup commands can be sent on this handle
stderr (2) - Error messages can be sent on this handle
+The external command can also be executed on another host entirely
+(specified by the ivr:// prefix), with its standard file handles
+connected to the Asterisk process as follows:
+
+stdin (0) - DTMF and hangup events will be received on this handle
+stdout (1) - Playback and hangup commands can be sent on this handle
+There are no error messages available when using ExternalIVR over TCP.
+
The application will also create an audio generator to play audio to
the channel, and will start playing silence. When your application
wants to send audio to the channel, it can send a command (see below)