Index: asterisk/pbx.c =================================================================== RCS file: /usr/cvsroot/asterisk/pbx.c,v retrieving revision 1.144 diff -u -p -r1.144 pbx.c --- asterisk/pbx.c 8 Aug 2004 17:15:01 -0000 1.144 +++ asterisk/pbx.c 11 Aug 2004 16:17:01 -0000 @@ -896,6 +896,22 @@ static void pbx_substitute_variables_tem *ret = workspace; } else *ret = NULL; + } else if (c && !strcmp(var, "CPN_TON")) { + snprintf(workspace, workspacelen, "%d", c->callerton); + *ret = workspace; + } else if (c && !strcmp(var, "CPN_NPI")) { + snprintf(workspace, workspacelen, "%d", c->callernpi); + *ret = workspace; + } else if (c && !strcmp(var, "CPN_PRES")) { + snprintf(workspace, workspacelen, "%d", c->callerpres); + *ret = workspace; + } else if (c && !strcmp(var, "CLD_TON")) { + snprintf(workspace, workspacelen, "%d", c->calledton); + *ret = workspace; + } else if (c && !strcmp(var, "CLD_NPI")) { + snprintf(workspace, workspacelen, "%d", c->callednpi); + *ret = workspace; + } else if (c && !strcmp(var, "DNID")) { if (c->dnid) { strncpy(workspace, c->dnid, workspacelen - 1); Index: asterisk/channels/chan_zap.c =================================================================== RCS file: /usr/cvsroot/asterisk/channels/chan_zap.c,v retrieving revision 1.321 diff -u -p -r1.321 chan_zap.c --- asterisk/channels/chan_zap.c 8 Aug 2004 17:15:02 -0000 1.321 +++ asterisk/channels/chan_zap.c 11 Aug 2004 16:17:07 -0000 @@ -443,6 +443,11 @@ static struct zt_pvt { char language[MAX_LANGUAGE]; char musicclass[MAX_LANGUAGE]; char callerid[AST_MAX_EXTENSION]; + int callerton; + int callernpi; + int callerpres; + int calledton; + int callednpi; char lastcallerid[AST_MAX_EXTENSION]; char *origcallerid; /* malloced original callerid */ char callwaitcid[AST_MAX_EXTENSION]; @@ -4423,6 +4428,11 @@ static struct ast_channel *zt_new(struct tmp->callerid = strdup(i->callerid); tmp->ani = strdup(i->callerid); } + tmp->callerton = i->callerton; + tmp->callernpi = i->callernpi; + tmp->callerpres = i->callerpres; + tmp->calledton = i->calledton; + tmp->callednpi = i->callednpi; tmp->restrictcid = i->restrictcid; tmp->callingpres = i->callingpres; #ifdef ZAPATA_PRI @@ -7250,6 +7260,14 @@ static void *pri_dchannel(void *vpri) strncpy(pri->pvts[chanpos]->callerid, e->ring.callingnum, sizeof(pri->pvts[chanpos]->callerid)-1); } else pri->pvts[chanpos]->callerid[0] = '\0'; + + /* setting ton, npi and presentation */ + pri->pvts[chanpos]->callerton = pri_cpn_ton ; + pri->pvts[chanpos]->callernpi = pri_cpn_npi ; + pri->pvts[chanpos]->callerpres = pri_cpn_pres ; + pri->pvts[chanpos]->calledton = pri_cld_ton ; + pri->pvts[chanpos]->callednpi = pri_cld_npi; + strncpy(pri->pvts[chanpos]->rdnis, e->ring.redirectingnum, sizeof(pri->pvts[chanpos]->rdnis) - 1); /* If immediate=yes go to s|1 */ if (pri->pvts[chanpos]->immediate) { Index: asterisk/include/asterisk/channel.h =================================================================== RCS file: /usr/cvsroot/asterisk/include/asterisk/channel.h,v retrieving revision 1.54 diff -u -p -r1.54 channel.h --- asterisk/include/asterisk/channel.h 6 Aug 2004 14:43:25 -0000 1.54 +++ asterisk/include/asterisk/channel.h 11 Aug 2004 16:17:11 -0000 @@ -153,6 +153,15 @@ struct ast_channel { char *ani; /*! Malloc'd RDNIS */ char *rdnis; + + /* TON, NPI, Presentation */ + int callerton; + int callernpi; + int callerpres; + int calledton; + int callednpi; + + /*! Hide callerid from user */ int restrictcid; /*! Callerid presentation/screening */ Index: libpri/libpri.h =================================================================== RCS file: /usr/cvsroot/libpri/libpri.h,v retrieving revision 1.31 diff -u -p -r1.31 libpri.h --- libpri/libpri.h 26 Jun 2004 04:37:09 -0000 1.31 +++ libpri/libpri.h 11 Aug 2004 16:17:43 -0000 @@ -339,6 +339,11 @@ typedef union { struct pri; struct pri_sr; +int pri_cpn_ton; +int pri_cpn_npi; +int pri_cpn_pres; +int pri_cld_ton; +int pri_cld_npi; /* Create a D-channel on a given file descriptor. The file descriptor must be a channel operating in HDLC mode with FCS computed by the fd's driver. Also it Index: libpri/q931.c =================================================================== RCS file: /usr/cvsroot/libpri/q931.c,v retrieving revision 1.83 diff -u -p -r1.83 q931.c --- libpri/q931.c 23 Jul 2004 16:20:06 -0000 1.83 +++ libpri/q931.c 11 Aug 2004 16:17:43 -0000 @@ -894,9 +894,16 @@ static FUNC_RECV(receive_calling_party_s static FUNC_RECV(receive_called_party_number) { + char cnum[256]; + /* copy digits to call->callednum */ q931_get_number(call->callednum, sizeof(call->callednum), ie->data + 1, len - 3); call->calledplan = ie->data[0] & 0x7f; + + q931_get_number(cnum, sizeof(cnum), ie->data + 1, len - 3); + pri_cld_ton = (ie->data[0] >> 4) & 0x07 ; + pri_cld_npi = ie->data[0] & 0x0f ; + return 0; } @@ -911,6 +918,7 @@ static FUNC_SEND(transmit_called_party_n static FUNC_RECV(receive_calling_party_number) { int extbit; + char cnum[256]; call->callerplan = ie->data[0] & 0x7f; extbit = (ie->data[0] >> 7) & 0x01; @@ -923,6 +931,18 @@ static FUNC_RECV(receive_calling_party_n q931_get_number(call->callernum, sizeof(call->callernum), ie->data + 2, len - 4); call->callerpres = ie->data[1] & 0x7f; } + + + if (ie->data[0] & 0x80) + q931_get_number(cnum, sizeof(cnum), ie->data + 1, len - 3); + else + q931_get_number(cnum, sizeof(cnum), ie->data + 2, len - 4); + + pri_message("########### Setting caller_npi !!!!\n"); + pri_cpn_ton = (ie->data[0] >> 4) & 0x07; + pri_cpn_npi = ie->data[0] & 0x0f ; + pri_cpn_pres = ie->data[1] & 0x7f; + return 0; }