From: Mark Spencer Date: Sun, 6 Jun 2004 07:01:37 +0000 (+0000) Subject: Try to parse callerid properly on /dev/phone (bug #1788) X-Git-Tag: 1.0.0-rc1~301 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e325aa312f85487a8f48d5aeabf88dfd70a3c0e1;p=thirdparty%2Fasterisk.git Try to parse callerid properly on /dev/phone (bug #1788) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3154 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_phone.c b/channels/chan_phone.c index 54e31c24bc..0f5ecfc203 100755 --- a/channels/chan_phone.c +++ b/channels/chan_phone.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -156,7 +157,6 @@ static int phone_call(struct ast_channel *ast, char *dest, int timeout) PHONE_CID cid; time_t UtcTime; struct tm tm; - char *s; /* display caller id if present */ if (ast->callerid) { @@ -170,14 +170,23 @@ static int phone_call(struct ast_channel *ast, char *dest, int timeout) sprintf(cid.min, "%02d", tm.tm_min); } /* the format of ast->callerid is always: "name" */ - if(ast_strlen_zero(ast->callerid)){ + if(!ast->callerid || ast_strlen_zero(ast->callerid)){ strcpy(cid.name,DEFAULT_CALLER_ID); cid.number[0]='\0'; } else { - s=strncpy(cid.name,ast->callerid+1,sizeof(cid.name)); - (void)strsep(&s,"\""); - s=strncpy(cid.number,strrchr(ast->callerid,'<')+1,sizeof(cid.number)); - (void)strsep(&s,">"); + char *n, *l; + char callerid[256] = ""; + strncpy(callerid, ast->callerid, sizeof(callerid) - 1); + ast_callerid_parse(ast->callerid, &n, &l); + if (l) { + ast_shrink_phone_number(l); + if (!ast_isphonenumber(l)) + l = NULL; + } + if (l) + strncpy(cid.number, l, sizeof(cid.number) - 1); + if (n) + strncpy(cid.name, n, sizeof(cid.name) - 1); } }