diff --git a/channels/chan_brcm.c b/channels/chan_brcm.c index ad9b5f5af25980ab662bd77c1e5a5fbb91af5140..8766ae7aa50a5d6b2d7d14387d2c46968d9beee1 100644 --- a/channels/chan_brcm.c +++ b/channels/chan_brcm.c @@ -4026,8 +4026,8 @@ static int brcm_signal_callerid(struct ast_channel *chan, struct brcm_subchannel CLID_STRING clid_string; struct timeval utc_time; struct ast_tm local_time; - char number[CLID_MAX_NUMBER]; - char name[CLID_MAX_NAME]; + char number[CLID_MAX_NUMBER] = ""; + char name[CLID_MAX_NAME] = ""; /* Add datetime to caller id string, format: MMDDHHMM */ utc_time = ast_tvnow(); @@ -4048,19 +4048,31 @@ static int brcm_signal_callerid(struct ast_channel *chan, struct brcm_subchannel } else { strcpy(number, "O\0"); } - - if (ast_channel_connected(chan)->id.name.valid) { - strncpy(name, ast_channel_connected(chan)->id.name.str, CLID_MAX_NAME); - name[CLID_MAX_NAME - 1] = '\0'; - } else { - strcpy(name, "O\0"); + if (ast_channel_connected(chan)->id.name.valid) { + if(!ast_channel_caller(chan)->id.number.presentation) //if clir is not set + { /*We have received a request with userinfo portion as "anonymous",but clir=0 ,no calling party name is sent */ + if(strcasecmp("anonymous",ast_channel_connected(chan)->id.number.str)==0) + ast_debug(2,"Caller number is %s and clir=0 ",ast_channel_connected(chan)->id.number.str); + else if(ast_channel_connected(chan)->id.name.str) + { + /*if "userinfo" comes as "unsubscribed",no calling party number and name is displayed */ + if(strcasecmp("unsubscribed",ast_channel_connected(chan)->id.number.str)!=0){ + strncpy(name, ast_channel_connected(chan)->id.name.str, CLID_MAX_NAME-1); + } + } + else + { + strncpy(name, ast_channel_connected(chan)->id.name.str, CLID_MAX_NAME-1); + } } - } else { + } else + strcpy(name, "O\0"); + } else { /* Number and/or name available but presentation is not allowed */ strcpy(number, "P\0"); strcpy(name, "P\0"); - } - } else { + } + } else { /* Name and number not available. Will probably not be reached */ strcpy(number, "0\0"); strcpy(name, "0\0"); diff --git a/channels/chan_brcm.h b/channels/chan_brcm.h index 375d1dd78c4f7157e28ff7e5ac350660d32d733e..bfb7867ce864f96a858dcdd65b3e1822a6824a53 100644 --- a/channels/chan_brcm.h +++ b/channels/chan_brcm.h @@ -224,7 +224,7 @@ typedef struct { /* Caller ID */ #define CLID_MAX_DATE 10 -#define CLID_MAX_NUMBER 16 +#define CLID_MAX_NUMBER 21 #define CLID_MAX_NAME 16 typedef struct CLID_STRING {