Index: chan_zap.c =================================================================== RCS file: /usr/cvsroot/asterisk/channels/chan_zap.c,v retrieving revision 1.468 diff -u -r1.468 chan_zap.c --- chan_zap.c 5 Jul 2005 17:16:17 -0000 1.468 +++ chan_zap.c 7 Jul 2005 11:57:04 -0000 @@ -567,6 +567,9 @@ char exten[AST_MAX_EXTENSION]; char language[MAX_LANGUAGE]; char musicclass[MAX_MUSICCLASS]; +#ifdef PRI_ANI + char cid_ani[AST_MAX_EXTENSION]; +#endif char cid_num[AST_MAX_EXTENSION]; int cid_ton; /* Type Of Number (TON) */ char cid_name[AST_MAX_EXTENSION]; @@ -4836,7 +4839,11 @@ if (!ast_strlen_zero(i->dnid)) tmp->cid.cid_dnid = strdup(i->dnid); +#ifdef PRI_ANI + ast_set_callerid(tmp, i->cid_num, i->cid_name, ast_strlen_zero(i->cid_ani) ? i->cid_num : i->cid_ani); +#else ast_set_callerid(tmp, i->cid_num, i->cid_name, i->cid_num); +#endif tmp->cid.cid_pres = i->callingpres; tmp->cid.cid_ton = i->cid_ton; #ifdef ZAPATA_PRI @@ -7675,6 +7682,7 @@ pthread_attr_t attr; char ani2str[6]; char plancallingnum[256]; + char plancallingani[256]; char calledtonstr[10]; pthread_attr_init(&attr); @@ -8100,10 +8108,37 @@ if (pri->pvts[chanpos]->use_callerid) { ast_shrink_phone_number(plancallingnum); ast_copy_string(pri->pvts[chanpos]->cid_num, plancallingnum, sizeof(pri->pvts[chanpos]->cid_num)); +#ifdef PRI_ANI + if (!ast_strlen_zero(e->ring.callingani)) { + switch (e->ring.callingplanani) { + case PRI_INTERNATIONAL_ISDN: /* Q.931 dialplan == 0x11 international dialplan => prepend international prefix digits */ + snprintf(plancallingani, sizeof(plancallingani), "%s%s", pri->internationalprefix, e->ring.callingani); + break; + case PRI_NATIONAL_ISDN: /* Q.931 dialplan == 0x21 national dialplan => prepend national prefix digits */ + snprintf(plancallingani, sizeof(plancallingani), "%s%s", pri->nationalprefix, e->ring.callingani); + break; + case PRI_LOCAL_ISDN: /* Q.931 dialplan == 0x41 local dialplan => prepend local prefix digits */ + snprintf(plancallingani, sizeof(plancallingani), "%s%s", pri->localprefix, e->ring.callingani); + break; + case PRI_PRIVATE: /* Q.931 dialplan == 0x49 private dialplan => prepend private prefix digits */ + snprintf(plancallingani, sizeof(plancallingani), "%s%s", pri->privateprefix, e->ring.callingani); + break; + case PRI_UNKNOWN: /* Q.931 dialplan == 0x00 unknown dialplan => prepend unknown prefix digits */ + snprintf(plancallingani, sizeof(plancallingani), "%s%s", pri->unknownprefix, e->ring.callingani); + break; + default: /* other Q.931 dialplan => don't twiddle with callingani */ + snprintf(plancallingani, sizeof(plancallingani), "%s", e->ring.callingani); + break; + } + ast_shrink_phone_number(plancallingani); + ast_copy_string(pri->pvts[chanpos]->cid_ani, plancallingani, sizeof(pri->pvts[chanpos]->cid_ani)); + } +#endif ast_copy_string(pri->pvts[chanpos]->cid_name, e->ring.callingname, sizeof(pri->pvts[chanpos]->cid_name)); pri->pvts[chanpos]->cid_ton = e->ring.callingplan; /* this is the callingplan (TON/NPI), e->ring.callingplan>>4 would be the TON */ } else { pri->pvts[chanpos]->cid_num[0] = '\0'; + pri->pvts[chanpos]->cid_ani[0] = '\0'; pri->pvts[chanpos]->cid_name[0] = '\0'; pri->pvts[chanpos]->cid_ton = 0; }