diff options
author | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-12-17 23:39:48 +0000 |
---|---|---|
committer | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-12-17 23:39:48 +0000 |
commit | d0681f1e728b785814d83ec425c87302f738dba2 (patch) | |
tree | d3a972a4ba92ec54045463d2387dcee6313ce4b9 | |
parent | 2af0b389616a84aa7526b3cf07e35b530d642771 (diff) |
Add RECORD_STATUS variable, as requested on the -users list.
Patch by me (license 14)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@165397 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r-- | apps/app_record.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/apps/app_record.c b/apps/app_record.c index ce6736d89..11a32e04c 100644 --- a/apps/app_record.c +++ b/apps/app_record.c @@ -88,6 +88,15 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") <variable name="RECORDED_FILE"> <para>Will be set to the final filename of the recording.</para> </variable> + <variable name="RECORD_STATUS"> + <para>This is the final status of the command</para> + <value name="DTMF"><para>A terminating DTMF was received ('#' or '*', depending upon option 't')</para></value> + <value name="SILENCE"><para>The maximum silence occurred in the recording.</para></value> + <value name="SKIP"><para>The line was not yet answered and the 's' option was specified.</para></value> + <value name="TIMEOUT"><para>The maximum length was reached.</para></value> + <value name="HANGUP"><para>The channel was hung up.</para></value> + <value name="ERROR"><para>An unrecoverable error occurred, which resulted in a WARNING to the logs.</para></value> + </variable> </variablelist> </description> </application> @@ -150,6 +159,7 @@ static int record_exec(struct ast_channel *chan, void *data) /* The next few lines of code parse out the filename and header from the input string */ if (ast_strlen_zero(data)) { /* no data implies no filename or anything is present */ ast_log(LOG_WARNING, "Record requires an argument (filename)\n"); + pbx_builtin_setvar_helper(chan, "RECORD_STATUS", "ERROR"); return -1; } @@ -171,6 +181,7 @@ static int record_exec(struct ast_channel *chan, void *data) } if (!ext) { ast_log(LOG_WARNING, "No extension specified to filename!\n"); + pbx_builtin_setvar_helper(chan, "RECORD_STATUS", "ERROR"); return -1; } if (args.silence) { @@ -237,6 +248,7 @@ static int record_exec(struct ast_channel *chan, void *data) if (chan->_state != AST_STATE_UP) { if (ast_test_flag(&flags, OPTION_SKIP)) { /* At the user's option, skip if the line is not up */ + pbx_builtin_setvar_helper(chan, "RECORD_STATUS", "SKIP"); return 0; } else if (!ast_test_flag(&flags, OPTION_NOANSWER)) { /* Otherwise answer unless we're supposed to record while on-hook */ @@ -246,6 +258,7 @@ static int record_exec(struct ast_channel *chan, void *data) if (res) { ast_log(LOG_WARNING, "Could not answer channel '%s'\n", chan->name); + pbx_builtin_setvar_helper(chan, "RECORD_STATUS", "ERROR"); goto out; } @@ -267,11 +280,13 @@ static int record_exec(struct ast_channel *chan, void *data) res = ast_set_read_format(chan, AST_FORMAT_SLINEAR); if (res < 0) { ast_log(LOG_WARNING, "Unable to set to linear mode, giving up\n"); + pbx_builtin_setvar_helper(chan, "RECORD_STATUS", "ERROR"); return -1; } sildet = ast_dsp_new(); if (!sildet) { ast_log(LOG_WARNING, "Unable to create silence detector :(\n"); + pbx_builtin_setvar_helper(chan, "RECORD_STATUS", "ERROR"); return -1; } ast_dsp_set_threshold(sildet, ast_dsp_get_threshold_from_settings(THRESHOLD_SILENCE)); @@ -288,6 +303,7 @@ static int record_exec(struct ast_channel *chan, void *data) if (!s) { ast_log(LOG_WARNING, "Could not create file %s\n", args.filename); + pbx_builtin_setvar_helper(chan, "RECORD_STATUS", "ERROR"); goto out; } @@ -304,6 +320,7 @@ static int record_exec(struct ast_channel *chan, void *data) if (maxduration > 0) { if (waitres == 0) { gottimeout = 1; + pbx_builtin_setvar_helper(chan, "RECORD_STATUS", "TIMEOUT"); break; } maxduration = waitres; @@ -320,6 +337,7 @@ static int record_exec(struct ast_channel *chan, void *data) if (res) { ast_log(LOG_WARNING, "Problem writing frame\n"); ast_frfree(f); + pbx_builtin_setvar_helper(chan, "RECORD_STATUS", "ERROR"); break; } @@ -335,6 +353,7 @@ static int record_exec(struct ast_channel *chan, void *data) /* Ended happily with silence */ ast_frfree(f); gotsilence = 1; + pbx_builtin_setvar_helper(chan, "RECORD_STATUS", "SILENCE"); break; } } @@ -343,12 +362,14 @@ static int record_exec(struct ast_channel *chan, void *data) if (res) { ast_log(LOG_WARNING, "Problem writing frame\n"); + pbx_builtin_setvar_helper(chan, "RECORD_STATUS", "ERROR"); ast_frfree(f); break; } } else if ((f->frametype == AST_FRAME_DTMF) && (f->subclass == terminator)) { ast_frfree(f); + pbx_builtin_setvar_helper(chan, "RECORD_STATUS", "DTMF"); break; } ast_frfree(f); @@ -356,6 +377,7 @@ static int record_exec(struct ast_channel *chan, void *data) if (!f) { ast_debug(1, "Got hangup\n"); res = -1; + pbx_builtin_setvar_helper(chan, "RECORD_STATUS", "HANGUP"); ast_filedelete(args.filename, NULL); } |