diff --git a/CHANGES b/CHANGES index 37144e0513..f18e918d87 100644 --- a/CHANGES +++ b/CHANGES @@ -77,6 +77,10 @@ Applications regardless if the call has been answered or not. * Added functionality to the app_dial F() option to continue with execution at the current location when no parameters are provided. + * Added the 'a' option to app_dial to answer the calling channel before any + announcements or macros are executed. + * Modified app_dial to set answertime when the called channel answers even if + the called channel hangs up during playback of an announcement. * Added c() option to app_chanspy. This option allows custom DTMF to be set to cycle through the next available channel. By default this is still '*'. * Added x() option to app_chanspy. This option allows DTMF to be set to diff --git a/apps/app_dial.c b/apps/app_dial.c index 7a74d8d224..c6747bffc3 100644 --- a/apps/app_dial.c +++ b/apps/app_dial.c @@ -94,6 +94,15 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") Play an announcement to the called party, where x is the prompt to be played + @@ -508,6 +517,7 @@ enum { OPT_CALLEE_GOSUB = (1 << 28), OPT_CALLEE_MIXMONITOR = (1 << 29), OPT_CALLER_MIXMONITOR = (1 << 30), + OPT_CALLER_ANSWER = (1 << 31), }; #define DIAL_STILLGOING (1 << 31) @@ -537,6 +547,7 @@ enum { AST_APP_OPTIONS(dial_exec_options, BEGIN_OPTIONS AST_APP_OPTION_ARG('A', OPT_ANNOUNCE, OPT_ARG_ANNOUNCE), + AST_APP_OPTION('a', OPT_CALLER_ANSWER), AST_APP_OPTION('C', OPT_RESETCDR), AST_APP_OPTION('c', OPT_CANCEL_ELSEWHERE), AST_APP_OPTION('d', OPT_DTMF_EXIT), @@ -1987,6 +1998,9 @@ static int dial_exec_full(struct ast_channel *chan, const char *data, struct ast } else { const char *number; + if (ast_test_flag64(&opts, OPT_CALLER_ANSWER)) + ast_answer(chan); + strcpy(pa.status, "ANSWER"); pbx_builtin_setvar_helper(chan, "DIALSTATUS", pa.status); /* Ah ha! Someone answered within the desired timeframe. Of course after this @@ -1994,9 +2008,11 @@ static int dial_exec_full(struct ast_channel *chan, const char *data, struct ast conversation. */ hanguptree(outgoing, peer, 1); outgoing = NULL; - /* If appropriate, log that we have a destination channel */ - if (chan->cdr) + /* If appropriate, log that we have a destination channel and set the answer time */ + if (chan->cdr) { ast_cdr_setdestchan(chan->cdr, peer->name); + ast_cdr_setanswer(chan->cdr, peer->cdr->answer); + } if (peer->name) pbx_builtin_setvar_helper(chan, "DIALEDPEERNAME", peer->name);