From 08b23695b414041dd8da6b9cb84aefcc9adeb89c Mon Sep 17 00:00:00 2001 From: Joshua Colp <jcolp@digium.com> Date: Thu, 17 Aug 2006 16:29:44 +0000 Subject: [PATCH] Add 'l' option to CDR dialplan function which will cause it to pass the last CDR record to getvar instead of the first. (issue #7689 reported by voipgate) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@40226 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- funcs/func_cdr.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/funcs/func_cdr.c b/funcs/func_cdr.c index 96a8f7f17f..f3606662ba 100644 --- a/funcs/func_cdr.c +++ b/funcs/func_cdr.c @@ -42,9 +42,11 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") enum { OPT_RECURSIVE = (1 << 0), OPT_UNPARSED = (1 << 1), + OPT_LAST = (1 << 2), } cdr_option_flags; AST_APP_OPTIONS(cdr_func_options, { + AST_APP_OPTION('l', OPT_LAST), AST_APP_OPTION('r', OPT_RECURSIVE), AST_APP_OPTION('u', OPT_UNPARSED), }); @@ -54,6 +56,7 @@ static int cdr_read(struct ast_channel *chan, char *cmd, char *parse, { char *ret; struct ast_flags flags = { 0 }; + struct ast_cdr *cdr = chan->cdr; AST_DECLARE_APP_ARGS(args, AST_APP_ARG(variable); AST_APP_ARG(options); @@ -62,7 +65,7 @@ static int cdr_read(struct ast_channel *chan, char *cmd, char *parse, if (ast_strlen_zero(parse)) return -1; - if (!chan->cdr) + if (!cdr) return -1; AST_STANDARD_APP_ARGS(args, parse); @@ -70,7 +73,11 @@ static int cdr_read(struct ast_channel *chan, char *cmd, char *parse, if (!ast_strlen_zero(args.options)) ast_app_parse_options(cdr_func_options, &flags, NULL, args.options); - ast_cdr_getvar(chan->cdr, args.variable, &ret, buf, len, + if (ast_test_flag(&flags, OPT_LAST)) + while (cdr->next) + cdr = cdr->next; + + ast_cdr_getvar(cdr, args.variable, &ret, buf, len, ast_test_flag(&flags, OPT_RECURSIVE), ast_test_flag(&flags, OPT_UNPARSED)); -- GitLab