[asterisk-bugs] [JIRA] Created: (ASTERISK-20352) Incorrect handling of SIP 484 Address incomplete

Alain RICHARD (JIRA) noreply at issues.asterisk.org
Mon Sep 3 05:14:07 CDT 2012


Incorrect handling of SIP 484 Address incomplete
------------------------------------------------

                 Key: ASTERISK-20352
                 URL: https://issues.asterisk.org/jira/browse/ASTERISK-20352
             Project: Asterisk
          Issue Type: Bug
      Security Level: None
          Components: Channels/chan_sip/General
    Affects Versions: 1.8.15.1, 1.8.15.0
         Environment: Linux with asterisk 1.8.15.0
SIP provider trunk
SIP consummer trunk
            Reporter: Alain RICHARD


In my setup, asterisk is used only as a SIP router between a provider and a consummer.

On an incoming call (from the provider to the consumer), if the consumer trunk return a SIP 484 Address incomplete (q.850 code 28), the error is forwarded by asterisk to the provider trunk as a SIP 503 Service unavail, although the included q.850 code is 28.

This is a violation of RFC 3398 :

   Response received                     Cause value in the REL
   -----------------                     ----------------------
...
   484 Address incomplete                28 Invalid Number Format (+)
...


The problem is 100% reproductible. With the following code :

sip.conf :

[general]
use_q850_reason=yes

[provider]
context=fromprovider

[consumer]


extensions.Conf :

[fromprovider]

exten => _123456,1,Nop(Call the consumer)
    same => n,Dial(SIP/${EXTEN}@comsumer)
    same => n,Verbose(2,DIALSTATUS = ${DIALSTATUS})
    same => n,Verbose(2,HANGUPCAUSE = ${HANGUPCAUSE})


When the call is coming, I get the following process :

1 Call is ringging from provider to consumer
2 Consumer returns a SIP 484 Address incomplete
3 The verbose output shows : DIALSTATUS=CHANUNAVAIL, HANGUPCAUSE=28
4 asterisk returns to the provider : 503 Service unavailable, q.850 code=28

So here it seams to be at least two error :

- On step 4, the returned code for HANGUPCAUSE 28 to the provider is SIP 503 instead of SIP 484 as requested by RFC 3398.
- On step 3, the DIAL app should have returned DIALSTATUS=CONGESTION instead of CHANUNAVAIL


I have succeed to implement a counter measure :

exten => _123456,1,Nop(Call the consumer)
    same => n,Dial(SIP/${EXTEN}@comsumer)
    same => n,Verbose(2,DIALSTATUS = ${DIALSTATUS})
    same => n,GotoIf($[${HANGUPCAUSE}=28] & $[${DIALSTATUS}!="CONGESTION"]?setcongestion:continue)
    same => n(setcongestion),Set(DIALSTATUS="CONGESTION")
    same => n,Verbose(2,DIALSTATUS = ${DIALSTATUS})
    same => n(continue),Verbose(2,HANGUPCAUSE = ${HANGUPCAUSE})

In that case, the provider will receive the correct SIP response (SIP 484 and q.850 code 28).


I don't know if the problem is within dial_app, chan_sip or on the generic handling of HANGUP CAUSE 28, but this violate the RFCs.

Regards,

Alain RICHARD

 

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira



More information about the asterisk-bugs mailing list