From 04fc29c8b2e7db9b66a138f47412770867819f7f Mon Sep 17 00:00:00 2001 From: Mark Spencer Date: Sat, 2 Oct 2004 00:58:31 +0000 Subject: Huge callerid rework (might break H.323, others) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3874 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- cdr.c | 97 +++++++++++++++++++++++++++++++++++++++---------------------------- 1 file changed, 56 insertions(+), 41 deletions(-) (limited to 'cdr.c') diff --git a/cdr.c b/cdr.c index f4e97efce..4b9eec855 100755 --- a/cdr.c +++ b/cdr.c @@ -251,23 +251,28 @@ void ast_cdr_setapp(struct ast_cdr *cdr, char *app, char *data) int ast_cdr_setcid(struct ast_cdr *cdr, struct ast_channel *c) { char tmp[AST_MAX_EXTENSION] = ""; - char *num, *name; + char *num; while (cdr) { if(!ast_cdr_has_flag(cdr,AST_CDR_FLAG_LOCKED)) { /* Grab source from ANI or normal Caller*ID */ - if (c->ani) - strncpy(tmp, c->ani, sizeof(tmp) - 1); - else if (c->callerid) - strncpy(tmp, c->callerid, sizeof(tmp) - 1); - if (c->callerid) - strncpy(cdr->clid, c->callerid, sizeof(cdr->clid) - 1); - name = NULL; - num = NULL; - ast_callerid_parse(tmp, &name, &num); - if (num) { - ast_shrink_phone_number(num); + if (c->cid.cid_ani) + num = c->cid.cid_ani; + else + num = c->cid.cid_num; + + if (c->cid.cid_name && num) + snprintf(tmp, sizeof(tmp), "\"%s\" <%s>", c->cid.cid_name, num); + else if (c->cid.cid_name) + strncpy(tmp, c->cid.cid_name, sizeof(tmp) - 1); + else if (num) + strncpy(tmp, num, sizeof(tmp) - 1); + else + strcpy(tmp, ""); + strncpy(cdr->clid, tmp, sizeof(cdr->clid) - 1); + if (num) strncpy(cdr->src, num, sizeof(cdr->src) - 1); - } + else + strcpy(cdr->src, ""); } cdr = cdr->next; } @@ -277,7 +282,7 @@ int ast_cdr_setcid(struct ast_cdr *cdr, struct ast_channel *c) int ast_cdr_init(struct ast_cdr *cdr, struct ast_channel *c) { char *chan; - char *num, *name; + char *num; char tmp[AST_MAX_EXTENSION] = ""; while (cdr) { if(!ast_cdr_has_flag(cdr,AST_CDR_FLAG_LOCKED)) { @@ -286,20 +291,25 @@ int ast_cdr_init(struct ast_cdr *cdr, struct ast_channel *c) ast_log(LOG_WARNING, "CDR already initialized on '%s'\n", chan); strncpy(cdr->channel, c->name, sizeof(cdr->channel) - 1); /* Grab source from ANI or normal Caller*ID */ - if (c->ani) - strncpy(tmp, c->ani, sizeof(tmp) - 1); - else if (c->callerid) - strncpy(tmp, c->callerid, sizeof(tmp) - 1); - if (c->callerid) - strncpy(cdr->clid, c->callerid, sizeof(cdr->clid) - 1); - name = NULL; - num = NULL; - ast_callerid_parse(tmp, &name, &num); - if (num) { - ast_shrink_phone_number(num); - strncpy(cdr->src, num, sizeof(cdr->src) - 1); - } + if (c->cid.cid_ani) + num = c->cid.cid_ani; + else + num = c->cid.cid_num; + if (c->cid.cid_name && num) + snprintf(tmp, sizeof(tmp), "\"%s\" <%s>", c->cid.cid_name, num); + else if (c->cid.cid_name) + strncpy(tmp, c->cid.cid_name, sizeof(tmp) - 1); + else if (num) + strncpy(tmp, num, sizeof(tmp) - 1); + else + strcpy(tmp, ""); + strncpy(cdr->clid, tmp, sizeof(cdr->clid) - 1); + if (num) + strncpy(cdr->src, num, sizeof(cdr->src) - 1); + else + strcpy(cdr->src, ""); + if (c->_state == AST_STATE_UP) cdr->disposition = AST_CDR_ANSWERED; else @@ -419,26 +429,31 @@ int ast_cdr_appenduserfield(struct ast_channel *chan, char *userfield) int ast_cdr_update(struct ast_channel *c) { struct ast_cdr *cdr = c->cdr; - char *name, *num; + char *num; char tmp[AST_MAX_EXTENSION] = ""; /* Grab source from ANI or normal Caller*ID */ while (cdr) { if(!ast_cdr_has_flag(cdr,AST_CDR_FLAG_LOCKED)) { - if (c->ani) - strncpy(tmp, c->ani, sizeof(tmp) - 1); - else if (c->callerid && !ast_strlen_zero(c->callerid)) - strncpy(tmp, c->callerid, sizeof(tmp) - 1); - if (c->callerid && !ast_strlen_zero(c->callerid)) - strncpy(cdr->clid, c->callerid, sizeof(cdr->clid) - 1); + /* Grab source from ANI or normal Caller*ID */ + if (c->cid.cid_ani) + num = c->cid.cid_ani; else - cdr->clid[0] = '\0'; - name = NULL; - num = NULL; - ast_callerid_parse(tmp, &name, &num); - if (num) { - ast_shrink_phone_number(num); + num = c->cid.cid_num; + + if (c->cid.cid_name && num) + snprintf(tmp, sizeof(tmp), "\"%s\" <%s>", c->cid.cid_name, num); + else if (c->cid.cid_name) + strncpy(tmp, c->cid.cid_name, sizeof(tmp) - 1); + else if (num) + strncpy(tmp, num, sizeof(tmp) - 1); + else + strcpy(tmp, ""); + strncpy(cdr->clid, tmp, sizeof(cdr->clid) - 1); + if (num) strncpy(cdr->src, num, sizeof(cdr->src) - 1); - } + else + strcpy(cdr->src, ""); + /* Copy account code et-al */ strncpy(cdr->accountcode, c->accountcode, sizeof(cdr->accountcode) - 1); /* Destination information */ -- cgit v1.2.3