[Asterisk-cvs] asterisk/channels chan_zap.c,1.471,1.472

kpfleming at lists.digium.com kpfleming at lists.digium.com
Mon Jul 11 22:25:43 CDT 2005


Update of /usr/cvsroot/asterisk/channels
In directory mongoose.digium.com:/tmp/cvs-serv13074/channels

Modified Files:
	chan_zap.c 
Log Message:
pick up calling ANI information from libpri (bug #4571)


Index: chan_zap.c
===================================================================
RCS file: /usr/cvsroot/asterisk/channels/chan_zap.c,v
retrieving revision 1.471
retrieving revision 1.472
diff -u -d -r1.471 -r1.472
--- chan_zap.c	11 Jul 2005 19:23:02 -0000	1.471
+++ chan_zap.c	12 Jul 2005 02:33:57 -0000	1.472
@@ -31,7 +31,7 @@
 #include <ctype.h>
 #ifdef ZAPATA_PRI
 #include <libpri.h>
-#ifndef PRI_PROGRESS_CAUSE
+#ifndef PRI_CALLINGPLANANI
 #error "You need newer libpri"
 #endif
 #endif
@@ -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
@@ -7687,6 +7694,7 @@
 	pthread_attr_t attr;
 	char ani2str[6];
 	char plancallingnum[256];
+	char plancallingani[256];
 	char calledtonstr[10];
 	
 	pthread_attr_init(&attr);
@@ -8112,10 +8120,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;
 					}




More information about the svn-commits mailing list