diff options
Diffstat (limited to 'main/cdr.c')
-rw-r--r-- | main/cdr.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/main/cdr.c b/main/cdr.c index 83af2fb2f..512f355ce 100644 --- a/main/cdr.c +++ b/main/cdr.c @@ -312,6 +312,8 @@ int ast_cdr_setvar(struct ast_cdr *cdr, const char *name, const char *value, int } for (; cdr; cdr = recur ? cdr->next : NULL) { + if (ast_test_flag(cdr, AST_CDR_FLAG_DONT_TOUCH) && ast_test_flag(cdr, AST_CDR_FLAG_LOCKED)) + continue; headp = &cdr->varshead; AST_LIST_TRAVERSE_SAFE_BEGIN(headp, newvariable, entries) { if (!strcasecmp(ast_var_name(newvariable), name)) { @@ -695,6 +697,10 @@ void ast_cdr_answer(struct ast_cdr *cdr) { for (; cdr; cdr = cdr->next) { + if (ast_test_flag(cdr, AST_CDR_FLAG_ANSLOCKED)) + continue; + if (ast_test_flag(cdr, AST_CDR_FLAG_DONT_TOUCH) && ast_test_flag(cdr, AST_CDR_FLAG_LOCKED)) + continue; check_post(cdr); if (cdr->disposition < AST_CDR_ANSWERED) cdr->disposition = AST_CDR_ANSWERED; @@ -707,6 +713,10 @@ void ast_cdr_busy(struct ast_cdr *cdr) { for (; cdr; cdr = cdr->next) { + if (ast_test_flag(cdr, AST_CDR_FLAG_ANSLOCKED)) + continue; + if (ast_test_flag(cdr, AST_CDR_FLAG_DONT_TOUCH) && ast_test_flag(cdr, AST_CDR_FLAG_LOCKED)) + continue; if (!ast_test_flag(cdr, AST_CDR_FLAG_LOCKED)) { check_post(cdr); if (cdr->disposition < AST_CDR_BUSY) @@ -718,6 +728,10 @@ void ast_cdr_busy(struct ast_cdr *cdr) void ast_cdr_failed(struct ast_cdr *cdr) { for (; cdr; cdr = cdr->next) { + if (ast_test_flag(cdr, AST_CDR_FLAG_ANSLOCKED)) + continue; + if (ast_test_flag(cdr, AST_CDR_FLAG_DONT_TOUCH) && ast_test_flag(cdr, AST_CDR_FLAG_LOCKED)) + continue; check_post(cdr); if (!ast_test_flag(cdr, AST_CDR_FLAG_LOCKED)) { if (cdr->disposition < AST_CDR_FAILED) @@ -731,6 +745,10 @@ void ast_cdr_noanswer(struct ast_cdr *cdr) char *chan; while (cdr) { + if (ast_test_flag(cdr, AST_CDR_FLAG_ANSLOCKED)) + continue; + if (ast_test_flag(cdr, AST_CDR_FLAG_DONT_TOUCH) && ast_test_flag(cdr, AST_CDR_FLAG_LOCKED)) + continue; chan = !ast_strlen_zero(cdr->channel) ? cdr->channel : "<unknown>"; if (ast_test_flag(cdr, AST_CDR_FLAG_POSTED)) ast_log(LOG_WARNING, "CDR on channel '%s' already posted\n", chan); @@ -852,6 +870,8 @@ int ast_cdr_init(struct ast_cdr *cdr, struct ast_channel *c) void ast_cdr_end(struct ast_cdr *cdr) { for ( ; cdr ; cdr = cdr->next) { + if (ast_test_flag(cdr, AST_CDR_FLAG_DONT_TOUCH) && ast_test_flag(cdr, AST_CDR_FLAG_LOCKED)) + continue; check_post(cdr); if (ast_tvzero(cdr->end)) cdr->end = ast_tvnow(); |