summaryrefslogtreecommitdiff
path: root/apps/app_stasis.c
diff options
context:
space:
mode:
authorAshley Sanders <asanders@digium.com>2015-03-31 22:00:17 +0000
committerAshley Sanders <asanders@digium.com>2015-03-31 22:00:17 +0000
commit7293ecd90b6ac88fda2908ddb48289070e15fd8f (patch)
tree2ef69fd919601380d1348e3dd0d0f50356313b25 /apps/app_stasis.c
parent94949e7f2f8cdd23b44b108348c5f3642964a367 (diff)
stasis: set a channel variable on websocket disconnect error
When an error occurs while writing to a web socket, the web socket is disconnected and the event is logged. A side-effect of this, however, is that any application on the other side waiting for a response from Stasis is left hanging indefinitely (as there is no mechanism presently available for notifying interested parties about web socket error states in Stasis). To remedy this scenario, this patch introduces a new channel variable: STASISSTATUS. The possible values for STASISSTATUS are: SUCCESS - The channel has exited Stasis without any failures FAILED - Something caused Stasis to croak. Some (not all) possible reasons for this: - The app registry is not instantiated; - The app requested is not registered; - The app requested is not active; - Stasis couldn't send a start message ASTERISK-24802 Reported By: Kevin Harwell Review: https://reviewboard.asterisk.org/r/4519/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433839 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'apps/app_stasis.c')
-rw-r--r--apps/app_stasis.c37
1 files changed, 34 insertions, 3 deletions
diff --git a/apps/app_stasis.c b/apps/app_stasis.c
index f0389947a..1e7b7f9c9 100644
--- a/apps/app_stasis.c
+++ b/apps/app_stasis.c
@@ -54,6 +54,25 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
Invoke a Stasis application.
</para>
</description>
+ <para>This application will set the following channel variable upon
+ completion:</para>
+ <variablelist>
+ <variable name="STASISSTATUS">
+ <para>This indicates the status of the execution of the
+ Stasis application.</para>
+ <value name="SUCCESS">
+ The channel has exited Stasis without any failures in Stasis
+ </value>
+ <value name="FAILED">
+ A failure occurred when executing the Stasis application.
+ Some (not all) possible reasons for this:
+ <para>The app registry is not instantiated</para>
+ <para>The app requested is not registered</para>
+ <para>The app requested is not active</para>
+ <para>Stasis couldn't send a start message</para>
+ </value>
+ </variable>
+ </variablelist>
</application>
***/
@@ -67,6 +86,7 @@ static const char *stasis = "Stasis";
static int app_exec(struct ast_channel *chan, const char *data)
{
char *parse = NULL;
+ int ret = -1;
AST_DECLARE_APP_ARGS(args,
AST_APP_ARG(app_name);
@@ -76,17 +96,28 @@ static int app_exec(struct ast_channel *chan, const char *data)
ast_assert(chan != NULL);
ast_assert(data != NULL);
+ pbx_builtin_setvar_helper(chan, "STASISSTATUS", "");
+
/* parse the arguments */
parse = ast_strdupa(data);
AST_STANDARD_APP_ARGS(args, parse);
if (args.argc < 1) {
ast_log(LOG_WARNING, "Stasis app_name argument missing\n");
- return -1;
+ } else {
+ ret = stasis_app_exec(chan,
+ args.app_name,
+ args.argc - 1,
+ args.app_argv);
+ }
+
+ if (ret == -1) {
+ pbx_builtin_setvar_helper(chan, "STASISSTATUS", "FAILED");
+ } else {
+ pbx_builtin_setvar_helper(chan, "STASISSTATUS", "SUCCESS");
}
- return stasis_app_exec(
- chan, args.app_name, args.argc - 1, args.app_argv);
+ return ret;
}
static int load_module(void)