aboutsummaryrefslogtreecommitdiffstats
path: root/main/pbx.c
diff options
context:
space:
mode:
Diffstat (limited to 'main/pbx.c')
-rw-r--r--main/pbx.c28
1 files changed, 25 insertions, 3 deletions
diff --git a/main/pbx.c b/main/pbx.c
index 39a3d8ba2..10792e5cd 100644
--- a/main/pbx.c
+++ b/main/pbx.c
@@ -97,6 +97,10 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
<para>Asterisk will wait this number of milliseconds before returning to
the dialplan after answering the call.</para>
</parameter>
+ <parameter name="nocdr">
+ <para>Asterisk will send an answer signal to the calling phone, but will not
+ set the disposition or answer time in the CDR for this call.
+ </parameter>
</syntax>
<description>
<para>If the call has not been answered, this application will
@@ -8310,15 +8314,33 @@ static int pbx_builtin_congestion(struct ast_channel *chan, void *data)
static int pbx_builtin_answer(struct ast_channel *chan, void *data)
{
int delay = 0;
+ int answer_cdr = 1;
+ char *parse;
+ AST_DECLARE_APP_ARGS(args,
+ AST_APP_ARG(delay);
+ AST_APP_ARG(answer_cdr);
+ );
+
+ if (ast_strlen_zero(data)) {
+ return __ast_answer(chan, 0, 1);
+ }
- if ((chan->_state != AST_STATE_UP) && !ast_strlen_zero(data))
+ parse = ast_strdupa(data);
+
+ AST_STANDARD_APP_ARGS(args, parse);
+
+ if (!ast_strlen_zero(args.delay) && (chan->_state != AST_STATE_UP))
delay = atoi(data);
if (delay < 0) {
delay = 0;
}
- return __ast_answer(chan, delay);
+ if (!ast_strlen_zero(args.answer_cdr) && !strcasecmp(args.answer_cdr, "nocdr")) {
+ answer_cdr = 0;
+ }
+
+ return __ast_answer(chan, delay, answer_cdr);
}
static int pbx_builtin_incomplete(struct ast_channel *chan, void *data)
@@ -8335,7 +8357,7 @@ static int pbx_builtin_incomplete(struct ast_channel *chan, void *data)
if (ast_check_hangup(chan)) {
return -1;
} else if (chan->_state != AST_STATE_UP && answer) {
- __ast_answer(chan, 0);
+ __ast_answer(chan, 0, 1);
}
return AST_PBX_INCOMPLETE;