summaryrefslogtreecommitdiff
path: root/cdr/cdr_manager.c
diff options
context:
space:
mode:
authorSean Bright <sean@malleable.com>2009-05-26 12:14:14 +0000
committerSean Bright <sean@malleable.com>2009-05-26 12:14:14 +0000
commitb5438876645077179de605dda6557c816d92945b (patch)
tree458b0c404cc29ffd6be6bc43e5a2ee677e956f18 /cdr/cdr_manager.c
parent5518c1b1714897d1e0aa7965ed10735af1fdd1f5 (diff)
Use a properly allocated channel for substitution in cdr_manager.
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@196622 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'cdr/cdr_manager.c')
-rw-r--r--cdr/cdr_manager.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/cdr/cdr_manager.c b/cdr/cdr_manager.c
index 8a4a43e1f..aff60d355 100644
--- a/cdr/cdr_manager.c
+++ b/cdr/cdr_manager.c
@@ -127,7 +127,6 @@ static int manager_log(struct ast_cdr *cdr)
char strAnswerTime[80] = "";
char strEndTime[80] = "";
char buf[CUSTOM_FIELDS_BUF_SIZE];
- struct ast_channel dummy;
if (!enablecdr)
return 0;
@@ -146,9 +145,14 @@ static int manager_log(struct ast_cdr *cdr)
buf[0] = 0;
/* Custom fields handling */
if (customfields != NULL && ast_str_strlen(customfields)) {
- memset(&dummy, 0, sizeof(dummy));
- dummy.cdr = cdr;
- pbx_substitute_variables_helper(&dummy, ast_str_buffer(customfields), buf, sizeof(buf) - 1);
+ struct ast_channel *dummy = ast_channel_alloc(0, 0, "", "", "", "", "", 0, "Substitution/%p", cdr);
+ if (!dummy) {
+ ast_log(LOG_ERROR, "Unable to allocate channel for variable substitution.\n");
+ return 0;
+ }
+ dummy->cdr = ast_cdr_dup(cdr);
+ pbx_substitute_variables_helper(dummy, ast_str_buffer(customfields), buf, sizeof(buf) - 1);
+ ast_channel_release(dummy);
}
manager_event(EVENT_FLAG_CDR, "Cdr",