From 08ae164b58c23d45315f0572516bb67f079badef Mon Sep 17 00:00:00 2001 From: Tilghman Lesher Date: Wed, 17 Dec 2008 23:39:48 +0000 Subject: Add RECORD_STATUS variable, as requested on the -users list. Patch by me (license 14) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@165397 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- apps/app_record.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'apps') 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$") Will be set to the final filename of the recording. + + This is the final status of the command + A terminating DTMF was received ('#' or '*', depending upon option 't') + The maximum silence occurred in the recording. + The line was not yet answered and the 's' option was specified. + The maximum length was reached. + The channel was hung up. + An unrecoverable error occurred, which resulted in a WARNING to the logs. + @@ -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); } -- cgit v1.2.3