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);