[asterisk-users] External callerid issues using Q931 against Toshiba Strata

Justin Chevrier jchevrier at gmail.com
Thu Mar 15 10:29:07 CDT 2012


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);



More information about the asterisk-users mailing list