Justin Chevrier
2012-Mar-15 15:29 UTC
[asterisk-users] External callerid issues using Q931 against Toshiba Strata
Hi Guys, I currently have an Asterisk 1.6.2.18 server running a patched (see below) libpri 1.4.10.2 connected to a Toshiba Strata CTX670. All external calls come in via the Strata and then are routed to the Asterisk server over a single PRI link using Q931. This setup is working and has been working for some time (with various earlier versions of Asterisk) and with a patch (read hack) to libpri I've managed to successfully pass through the numerical portion of the callerid from the Strata. I would like to upgrade to Asterisk 1.8 or 10 and use libpri 1.4.12 but am having difficulties picking up the callerid from the Strata and due to significant changes in libpri my patch no longer applies. Below is a pri intense debug capturing the Strata sending through the callerid with libpri upgraded to 1.4.12 (running Dahdi 2.4.1). Libpri obviously receives the callerid information, but I am unsure of how to actually access it in Asterisk. I expect that if the callerid information is properly acquired and recognized in libpri it would simply be accessible in Asterisk in the 'CALLERID(all)' variable, but it is always empty. Internal calls from an extension on the Strata to an Asterisk extension show the callerid as expected. Does anyone have any tips on how to get Asterisk to use the callerid passed through by the Strata? Thanks! Justin chan_dahdi.conf (group 2 is used outgoing only): [trunkgroups] [channels] usecallerid=yes hidecallerid=no callwaiting=yes usecallingpres=yes callwaitingcallerid=yes transfer=yes cancallforward=yes echocancel=128 echocancelwhenbridged=yes echotraining=no rxgain=0.0 txgain=-10 context=from-toshiba overlapdial=no facilityenable=yes switchtype=qsig signalling=pri_net group=1 channel => 1-23 switchtype=national signalling=pri_cpe group=2 channel => 25-47 pri intense debug: < TEI: 0 State 7(Multi-frame established) < V(A)=31, V(S)=31, V(R)=42 < K=7, RC=0, l3_initiated=0, reject_except=0, ack_pend=0 < T200_id=0, N200=3, T203_id=8192 < [ 00 01 54 3e 08 02 01 b3 62 1c 66 9f aa 06 80 01 00 82 01 00 a1 31 02 02 01 3a 02 01 0c 30 28 0a 01 01 a0 0f 80 0a 35 35 35 35 35 35 31 36 33 31 0a 01 00 80 0f 41 41 41 20 49 54 2d 44 41 54 41 00 00 00 00 0a 01 01 a1 28 02 02 01 3b 02 01 55 30 1f 86 01 00 a7 1a 06 0a 31 33 31 32 32 31 35 35 35 35 30 0c 81 01 07 8c 04 39 34 31 31 95 01 00 ] < Informational frame: < SAPI: 00 C/R: 0 EA: 0 < TEI: 000 EA: 1 < N(S): 042 0: 0 < N(R): 031 P: 0 < 109 bytes of data < Protocol Discriminator: Q.931 (8) len=109 < TEI=0 Call Ref: len= 2 (reference 435/0x1B3) (Sent from originator) < Message Type: FACILITY (98) < [1c 66 9f aa 06 80 01 00 82 01 00 a1 31 02 02 01 3a 02 01 0c 30 28 0a 01 01 a0 0f 80 0a 35 35 35 35 35 35 31 36 33 31 0a 01 00 80 0f 41 41 41 20 49 54 2d 44 41 54 41 00 00 00 00 0a 01 01 a1 28 02 02 01 3b 02 01 55 30 1f 86 01 00 a7 1a 06 0a 31 33 31 32 32 31 35 35 35 35 30 0c 81 01 07 8c 04 39 34 31 31 95 01 00] < Facility (len=104, codeset=0) [ 0x9F, 0xAA, 0x06, 0x80, 0x01, 0x00, 0x82, 0x01, 0x00, 0xA1, '1', 0x02, 0x02, 0x01, ':', 0x02, 0x01, 0x0C, '0(', 0x0A, 0x01, 0x01, 0xA0, 0x0F, 0x80, 0x0A, '5555551631', 0x0A, 0x01, 0x00, 0x80, 0x0F, 'AAA IT-DATA', 0x00, 0x00, 0x00, 0x00, 0x0A, 0x01, 0x01, 0xA1, '(', 0x02, 0x02, 0x01, ';', 0x02, 0x01, 'U0', 0x1F, 0x86, 0x01, 0x00, 0xA7, 0x1A, 0x06, 0x0A, '13122155550', 0x0C, 0x81, 0x01, 0x07, 0x8C, 0x04, '9411', 0x95, 0x01, 0x00 ] -- Got ACK for N(S)=31 to (but not including) N(S)=31 -- T200 requested to stop when not started T203 requested to start without stopping first -- Starting T203 timer Received message for call 0x7f5020283b80 on link 0xb2f010 TEI/SAPI 0/0 -- Processing IE 28 (cs0, Facility) -- Delayed processing IE 28 (cs0, Facility) ASN.1 dump Context Specific/C [10 0x0A] <AA> Len:6 <06> Context Specific [0 0x00] <80> Len:1 <01> <00> - "~" Context Specific [2 0x02] <82> Len:1 <01> <00> - "~" Context Specific/C [1 0x01] <A1> Len:49 <31> Integer(2 0x02) <02> Len:2 <02> <01 3A> - "~:" Integer(2 0x02) <02> Len:1 <01> <0C> - "~" Sequence/C(48 0x30) <30> Len:40 <28> Enumerated(10 0x0A) <0A> Len:1 <01> <01> - "~" Context Specific/C [0 0x00] <A0> Len:15 <0F> Context Specific [0 0x00] <80> Len:10 <0A> <35 35 35 35 35 35 31 36-33 31> - "5555551631" Enumerated(10 0x0A) <0A> Len:1 <01> <00> - "~" Context Specific [0 0x00] <80> Len:15 <0F> <41 41 41 20 49 54 2D 44-41 54 41 00 00 00 00> - "AAA IT-DATA~~~~" Enumerated(10 0x0A) <0A> Len:1 <01> <01> - "~" Context Specific/C [1 0x01] <A1> Len:40 <28> Integer(2 0x02) <02> Len:2 <02> <01 3B> - "~;" Integer(2 0x02) <02> Len:1 <01> <55> - "U" Sequence/C(48 0x30) <30> Len:31 <1F> Context Specific [6 0x06] <86> Len:1 <01> <00> - "~" Context Specific/C [7 0x07] <A7> Len:26 <1A> OID(6 0x06) <06> Len:10 <0A> <31 33 31 32 32 31 35 35-35 35> - "1312215555" Sequence/C(48 0x30) <30> Len:12 <0C> Context Specific [1 0x01] <81> Len:1 <01> <07> - "~" Context Specific [12 0x0C] <8C> Len:4 <04> <39 34 31 31> - "9411" Context Specific [21 0x15] <95> Len:1 <01> <00> - "~" ASN.1 end nfe NetworkFacilityExtension Context Specific/C [10 0x0A] sourceEntity Context Specific [0 0x00] = 0 0x0000 destinationEntity Context Specific [2 0x02] = 0 0x0000 INVOKE Component Context Specific/C [1 0x01] invokeId Integer(2 0x02) = 314 0x013A operationValue Integer(2 0x02) = 12 0x000C operationValue = ROSE_QSIG_CallTransferComplete CallTransferComplete Sequence/C(48 0x30) endDesignation Enumerated(10 0x0A) = 1 0x0001 redirectionNumber PresentedNumberScreened presentationAllowedNumber NumberScreened Context Specific/C [0 0x00] partyNumber PartyNumber unknownPartyNumber Context Specific [0 0x00] = "5555551631" screeningIndicator Enumerated(10 0x0A) = 0 0x0000 redirectionName Name namePresentationAllowedSimple Context Specific [0 0x00] <41 41 41 20 49 54 2D 44-41 54 41 00 00 00 00> - "AAA IT-DATA~~~~" callStatus Enumerated(10 0x0A) = 1 0x0001 INVOKE Component Context Specific/C [1 0x01] invokeId Integer(2 0x02) = 315 0x013B operationValue Integer(2 0x02) = 85 0x0055 operationValue = ROSE_Unknown Skipping unused constructed component octets! !! ROSE invoke operation not handled on switchtype:Q.SIG switch! ROSE_Unknown Old libpri 1.4.10.x patch: --- pri_facility.c.orig 2009-09-06 09:51:39.000000000 -0400 +++ pri_facility.c 2009-09-06 10:35:02.000000000 -0400 @@ -1819,6 +1819,18 @@ value->ton = PRI_TON_UNKNOWN; break; + case (ASN1_CONTEXT_SPECIFIC | ASN1_TAG_0): /* [0] Toshiba NumberDigits -- default: unknownPartyNumber */ + if (pri->debug & PRI_DEBUG_APDU) + pri_message(pri, " PartyNumber: UnknownPartyNumber len=%d\n", len); + size = len; + memcpy(value->partyaddress, comp->data, len-2); + value->partyaddress[len-2] = '\0'; + if (size < 0) + return -1; + value->npi = PRI_NPI_UNKNOWN; + value->ton = PRI_TON_UNKNOWN; + break; + case (ASN1_CONTEXT_SPECIFIC | ASN1_CONSTRUCTOR | ASN1_TAG_1): /* [1] IMPLICIT PublicPartyNumber */ if (pri->debug & PRI_DEBUG_APDU) pri_message(pri, " PartyNumber: PublicPartyNumber len=%d\n", len); @@ -1895,11 +1907,11 @@ if (size < 0) return -1; comp->len = size; - NEXT_COMPONENT(comp, i); +// NEXT_COMPONENT(comp, i); /* Screening Indicator */ GET_COMPONENT(comp, i, vdata, len); - CHECK_COMPONENT(comp, ASN1_ENUMERATED, "Don't know what to do with NumberScreened ROSE component type 0x%x\n"); +// CHECK_COMPONENT(comp, ASN1_ENUMERATED, "Don't know what to do with NumberScreened ROSE component type 0x%x\n"); ASN1_GET_INTEGER(comp, scrind); // Todo: scrind = screeningindicator_for_q931(pri, scrind); NEXT_COMPONENT(comp, i);
Richard Mudgett
2012-Mar-15 16:09 UTC
[asterisk-users] External callerid issues using Q931 against Toshiba Strata
> I currently have an Asterisk 1.6.2.18 server running a patched (see > below) libpri 1.4.10.2 connected to a Toshiba Strata CTX670. All > external calls come in via the Strata and then are routed to the > Asterisk server over a single PRI link using Q931. This setup is > working and has been working for some time (with various earlier > versions of Asterisk) and with a patch (read hack) to libpri I've > managed to successfully pass through the numerical portion of the > callerid from the Strata. > > I would like to upgrade to Asterisk 1.8 or 10 and use libpri 1.4.12 > but am having difficulties picking up the callerid from the Strata > and > due to significant changes in libpri my patch no longer applies. > > Below is a pri intense debug capturing the Strata sending through the > callerid with libpri upgraded to 1.4.12 (running Dahdi 2.4.1). Libpri > obviously receives the callerid information, but I am unsure of how > to > actually access it in Asterisk. I expect that if the callerid > information is properly acquired and recognized in libpri it would > simply be accessible in Asterisk in the 'CALLERID(all)' variable, but > it is always empty. Internal calls from an extension on the Strata to > an Asterisk extension show the callerid as expected. > > Does anyone have any tips on how to get Asterisk to use the callerid > passed through by the Strata? > > Thanks! > > Justin > > chan_dahdi.conf (group 2 is used outgoing only): > [trunkgroups] > > [channels] > usecallerid=yes > hidecallerid=no > callwaiting=yes > usecallingpres=yes > callwaitingcallerid=yes > transfer=yes > cancallforward=yes > echocancel=128 > echocancelwhenbridged=yes > echotraining=no > rxgain=0.0 > txgain=-10 > context=from-toshiba > overlapdial=no > facilityenable=yes > switchtype=qsig > signalling=pri_net > group=1 > channel => 1-23 > switchtype=national > signalling=pri_cpe > group=2 > channel => 25-47 > > > pri intense debug: > < TEI: 0 State 7(Multi-frame established) > < V(A)=31, V(S)=31, V(R)=42 > < K=7, RC=0, l3_initiated=0, reject_except=0, ack_pend=0 > < T200_id=0, N200=3, T203_id=8192 > < [ 00 01 54 3e 08 02 01 b3 62 1c 66 9f aa 06 80 01 00 82 01 00 a1 31 > 02 02 01 3a 02 01 0c 30 28 0a 01 01 a0 0f 80 0a 35 35 35 35 35 35 31 > 36 33 31 0a 01 00 80 0f 41 41 41 20 49 54 2d 44 41 54 41 00 00 00 00 > 0a 01 01 a1 28 02 02 01 3b 02 01 55 30 1f 86 01 00 a7 1a 06 0a 31 33 > 31 32 32 31 35 35 35 35 30 0c 81 01 07 8c 04 39 34 31 31 95 01 00 ] > < Informational frame: > < SAPI: 00 C/R: 0 EA: 0 > < TEI: 000 EA: 1 > < N(S): 042 0: 0 > < N(R): 031 P: 0 > < 109 bytes of data > < Protocol Discriminator: Q.931 (8) len=109 > < TEI=0 Call Ref: len= 2 (reference 435/0x1B3) (Sent from originator) > < Message Type: FACILITY (98) > < [1c 66 9f aa 06 80 01 00 82 01 00 a1 31 02 02 01 3a 02 01 0c 30 28 > 0a 01 01 a0 0f 80 0a 35 35 35 35 35 35 31 36 33 31 0a 01 00 80 0f 41 > 41 41 20 49 54 2d 44 41 54 41 00 00 00 00 0a 01 01 a1 28 02 02 01 3b > 02 01 55 30 1f 86 01 00 a7 1a 06 0a 31 33 31 32 32 31 35 35 35 35 30 > 0c 81 01 07 8c 04 39 34 31 31 95 01 00] > < Facility (len=104, codeset=0) [ 0x9F, 0xAA, 0x06, 0x80, 0x01, 0x00, > 0x82, 0x01, 0x00, 0xA1, '1', 0x02, 0x02, 0x01, ':', 0x02, 0x01, 0x0C, > '0(', 0x0A, 0x01, 0x01, 0xA0, 0x0F, 0x80, 0x0A, '5555551631', 0x0A, > 0x01, 0x00, 0x80, 0x0F, 'AAA IT-DATA', 0x00, 0x00, 0x00, 0x00, 0x0A, > 0x01, 0x01, 0xA1, '(', 0x02, 0x02, 0x01, ';', 0x02, 0x01, 'U0', 0x1F, > 0x86, 0x01, 0x00, 0xA7, 0x1A, 0x06, 0x0A, '13122155550', 0x0C, 0x81, > 0x01, 0x07, 0x8C, 0x04, '9411', 0x95, 0x01, 0x00 ] > -- Got ACK for N(S)=31 to (but not including) N(S)=31 > -- T200 requested to stop when not started > T203 requested to start without stopping first > -- Starting T203 timer > Received message for call 0x7f5020283b80 on link 0xb2f010 TEI/SAPI > 0/0 > -- Processing IE 28 (cs0, Facility) > -- Delayed processing IE 28 (cs0, Facility) > ASN.1 dump > Context Specific/C [10 0x0A] <AA> Len:6 <06> > Context Specific [0 0x00] <80> Len:1 <01> > <00> - "~" > Context Specific [2 0x02] <82> Len:1 <01> > <00> - "~" > Context Specific/C [1 0x01] <A1> Len:49 <31> > Integer(2 0x02) <02> Len:2 <02> > <01 3A> - "~:" > Integer(2 0x02) <02> Len:1 <01> > <0C> - "~" > Sequence/C(48 0x30) <30> Len:40 <28> > Enumerated(10 0x0A) <0A> Len:1 <01> > <01> - "~" > Context Specific/C [0 0x00] <A0> Len:15 <0F> > Context Specific [0 0x00] <80> Len:10 <0A> > <35 35 35 35 35 35 31 36-33 31> - "5555551631" > Enumerated(10 0x0A) <0A> Len:1 <01> > <00> - "~" > Context Specific [0 0x00] <80> Len:15 <0F> > <41 41 41 20 49 54 2D 44-41 54 41 00 00 00 00> - "AAA > IT-DATA~~~~" > Enumerated(10 0x0A) <0A> Len:1 <01> > <01> - "~" > Context Specific/C [1 0x01] <A1> Len:40 <28> > Integer(2 0x02) <02> Len:2 <02> > <01 3B> - "~;" > Integer(2 0x02) <02> Len:1 <01> > <55> - "U" > Sequence/C(48 0x30) <30> Len:31 <1F> > Context Specific [6 0x06] <86> Len:1 <01> > <00> - "~" > Context Specific/C [7 0x07] <A7> Len:26 <1A> > OID(6 0x06) <06> Len:10 <0A> > <31 33 31 32 32 31 35 35-35 35> - "1312215555" > Sequence/C(48 0x30) <30> Len:12 <0C> > Context Specific [1 0x01] <81> Len:1 <01> > <07> - "~" > Context Specific [12 0x0C] <8C> Len:4 <04> > <39 34 31 31> - "9411" > Context Specific [21 0x15] <95> Len:1 <01> > <00> - "~" > ASN.1 end > nfe NetworkFacilityExtension Context Specific/C [10 0x0A] > sourceEntity Context Specific [0 0x00] = 0 0x0000 > destinationEntity Context Specific [2 0x02] = 0 0x0000 > INVOKE Component Context Specific/C [1 0x01] > invokeId Integer(2 0x02) = 314 0x013A > operationValue Integer(2 0x02) = 12 0x000C > operationValue = ROSE_QSIG_CallTransferComplete > CallTransferComplete Sequence/C(48 0x30) > endDesignation Enumerated(10 0x0A) = 1 0x0001 > redirectionNumber PresentedNumberScreened > presentationAllowedNumber NumberScreened Context Specific/C [0 > 0x00] > partyNumber PartyNumber > unknownPartyNumber Context Specific [0 0x00] = "5555551631" > screeningIndicator Enumerated(10 0x0A) = 0 0x0000 > redirectionName Name > namePresentationAllowedSimple Context Specific [0 0x00] > <41 41 41 20 49 54 2D 44-41 54 41 00 00 00 00> - "AAA > IT-DATA~~~~" > callStatus Enumerated(10 0x0A) = 1 0x0001 > INVOKE Component Context Specific/C [1 0x01] > invokeId Integer(2 0x02) = 315 0x013B > operationValue Integer(2 0x02) = 85 0x0055 > operationValue = ROSE_Unknown > Skipping unused constructed component octets! > !! ROSE invoke operation not handled on switchtype:Q.SIG switch! > ROSE_UnknownIs the information you are interested in in the ROSE_QSIG_CallTransferComplete section of the FACILITY or the ROSE_Unknown section? Both contain numbers. If it is the ROSE_QSIG_CallTransferComplete section then I need to see more messages to know what is happening in the call. I also do not need to see intense output because your issue is in the Q.931 level and not the Q.921 level. Richard