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

Richard Mudgett rmudgett at digium.com
Mon Mar 19 09:57:36 CDT 2012


> On Fri, Mar 16, 2012 at 11:43 AM, Richard Mudgett
> <rmudgett at digium.com> wrote:
> > <snip>
> >
> >> >> 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
> >
> > <snip>
> >
> >> I'm looking for the information contained in the
> >> ROSE_QSIG_CallTransferComplete section. I have attached a complete
> >> log
> >> of the call (with intense debug on unfortunately). An additional
> >> note:
> >>
> >> 1. The Strata system initially sends through a virtual internal
> >> extension number ('1607' in the log) as the originating number. In
> >> the
> >> dial plan I immediately play back a ringing sound to the Strata
> >> which
> >> causes it to then send through the real external callerid
> >> information.
> >> As such my original email was a bit off the mark, I get a blank
> >> callerid name and the callerid number is the virtual internal
> >> extension. Apologies for the confusion.
> >
> > The ROSE_QSIG_CallTransferComplete message has the callStatus set
> > to 1
> > which indicates that the peer is ringing.  Libpri is waiting for a
> > ROSE_QSIG_CallTransferActive to post the connected line information
> > because the ROSE_QSIG_CallTransferComplete connected line
> > information
> > may not have the correct presentation value available.  I suspect
> > that the Strata is sending the wrong value for that parameter
> > because
> > it seems to be telling Asterisk that it is ringing instead.
> >
> > You could try this hack:
> >
> > Index: pri_facility.c
> > ===================================================================
> > --- pri_facility.c      (revision 2283)
> > +++ pri_facility.c      (working copy)
> > @@ -5194,12 +5194,7 @@
> >                 */
> >                q931_party_subaddress_init(&call->remote_id.subaddress);
> >
> > -               if
> > (invoke->args.qsig.CallTransferComplete.call_status == 1) {
> > -                       /* The remote party for the transfer has
> > not answered yet. */
> > -                       call->incoming_ct_state =
> > INCOMING_CT_STATE_EXPECT_CT_ACTIVE;
> > -               } else {
> > -                       call->incoming_ct_state =
> > INCOMING_CT_STATE_POST_CONNECTED_LINE;
> > -               }
> > +               call->incoming_ct_state =
> > INCOMING_CT_STATE_POST_CONNECTED_LINE;
> >
> >                /* Send our subaddress back if we have one. */
> >                if (call->local_id.subaddress.valid) {
> >
> > Richard
> >
> > --
> > _____________________________________________________________________
> > -- Bandwidth and Colocation Provided by http://www.api-digital.com
> > --
> > New to Asterisk? Join us for a live introductory webinar every
> > Thurs:
> >               http://www.asterisk.org/hello
> >
> > asterisk-users mailing list
> > To UNSUBSCRIBE or update options visit:
> >   http://lists.digium.com/mailman/listinfo/asterisk-users
> 
> I can confirm that the provided patch allows Asterisk to pickup both
> the external callerid name and number.
> 
> Going forward is there a clean way to handle this issue, or can it
> really only live as a hack?

It will have to stay a hack because I think the Strata is sending the
wrong value for the callStatus parameter.  Asterisk already knows that
it is ringing so why is the Strata telling Asterisk that it is ringing.
The callStatus parameter is supposed to tell Asterisk the call state
of the connected peer so it can expect a future message when the peer
actually answers.

Richard



More information about the asterisk-users mailing list