[Home]

Summary:ASTERISK-05452: Dial statuses are not well reported to 'parent' channel for local dial:
Reporter:Manuel Guesdon (mguesdon)Labels:
Date Opened:2005-11-04 09:46:14.000-0600Date Closed:2005-11-07 20:49:31.000-0600
Priority:MinorRegression?No
Status:Closed/CompleteComponents:Channels/chan_local
Versions:Frequency of
Occurrence
Related
Issues:
Environment:Attachments:( 0) cvs-head-demo.txt
Description:[TEST]
exten => 103,1,NoOp(===========103===========)
exten => 103,2,Dial(Local/110@TEST&Local/120@TEST)
exten => 103,3,NoOp(In 103 Success DIALSTATUS=${DIALSTATUS})
exten => 103,103,NoOp(In 103 Failure DIALSTATUS=${DIALSTATUS})

exten => 120,1,NoOp(=== 120 ===)
exten => 120,2,Dial(SIP/012345@NotExistingPeer)
exten => 120,3,NoOp(In 120 Success-DIALSTATUS=${DIALSTATUS})
exten => 120,103,NoOp(In 120 Failure-DIALSTATUS=${DIALSTATUS})

Dialing 103 give this:
   -- Executing NoOp("SIP/oxy_stdphone2-344b", "===========103===========") in new stack
   -- Executing Dial("SIP/oxy_stdphone2-344b", "Local/110@TEST&Local/120@TEST") in new stack
Nov  4 16:27:12 NOTICE[8499]: chan_local.c:476 local_alloc: No such extension/context 110@TEST creating local channel
Nov  4 16:27:12 NOTICE[8499]: app_dial.c:978 dial_exec_full: Unable to create channel of type 'Local' (cause 0 - Unknown)
   -- Called 120@TEST
   -- Executing NoOp("Local/120@TEST-e9fb,2", "=== 120 ===") in new stack
   -- Executing Dial("Local/120@TEST-e9fb,2", "SIP/012345@NotExistingPeer") in new stack
Nov  4 16:27:12 WARNING[8502]: chan_sip.c:1947 create_addr: No such host: NotExistingPeer
Nov  4 16:27:12 NOTICE[8502]: app_dial.c:978 dial_exec_full: Unable to create channel of type 'SIP' (cause 3 - No route to destination)
 == Everyone is busy/congested at this time (1:0/0/1)
   -- Executing NoOp("Local/120@TEST-e9fb,2", "In 120 Failure-DIALSTATUS=CHANUNAVAIL") in new stack
Nov  4 16:27:22 WARNING[8502]: pbx.c:2420 __ast_pbx_run: Timeout, but no rule 't' in context 'TEST'
 == No one is available to answer at this time (2:0/0/1)
   -- Executing NoOp("SIP/oxy_stdphone2-344b", "In 103 Success DIALSTATUS=NOANSWER") in new stack

In exten 120 dial status is CHANUNAVAIL but in exten 103 it become NOANSWER

As exten 110 is non existing (CHANUNAVAIL) and exten 120 get a CHANUNAVAIL, we should have a CHANUNAVAIL in exten 103 instead of NOANSWER.
The 'problem' is not "No one is available to answer at this time" but there's an error :-)


Comments:By: BJ Weschke (bweschke) 2005-11-04 10:47:41.000-0600

I agree with your assesment of the problem. If chan_local is defined as the "Local Proxy Channel" in the true definition of Proxy, it should be reporting back the same DIALSTATUS that underlying channel driver reported. I will take a look at a couple ways to address this.

By: Olle Johansson (oej) 2005-11-04 13:04:17.000-0600

Should look at CAUSECODES as well.

By: BJ Weschke (bweschke) 2005-11-04 14:23:11.000-0600

Can you send us your full extensions.conf that you used to produce the output from above? I tried with your exact dialplan from the bug you posted, and as you can see from the attachment, I came up with quite different results. Though the DIALSTATUS didn't match, both extensions returned failure (as they should) instead of one returning failure and one returning success. I'm interested to see how you're getting one of the dial attempts to return "NOANSWER". I'm assuming it's related to the timeout but no 't' extension within the context error msg you're also showing, but I've been unable to reproduce that through various attempts to do so.

By: Manuel Guesdon (mguesdon) 2005-11-05 06:54:27.000-0600

This is the full extension.conf :-)

By: Manuel Guesdon (mguesdon) 2005-11-05 07:02:52.000-0600

The difference between your result and mine is that you get:
 == Auto fallthrough, channel 'Local/104@TEST-9dd4,2' status is 'CHANUNAVAIL'
   -- Local/104@TEST-9dd4,1 is circuit-busy
 == Everyone is busy/congested at this time (2:0/1/1)
   -- Executing NoOp("SIP/250-6d33", "In 103 Failure DIALSTATUS=CONGESTION") in new stack
 == Auto fallthrough, channel 'SIP/250-6d33' status is 'CONGESTION'

where I get:
Nov  5 13:52:59 WARNING[15395]: pbx.c:2420 __ast_pbx_run: Timeout, but no rule 't' in context 'TEST'
 == No one is available to answer at this time (2:0/0/1)
   -- Executing NoOp("SIP/oxy_stdphone2-d137", "In 103 Success DIALSTATUS=NOANSWER") in new stack
Nov  5 13:53:10 WARNING[15392]: pbx.c:2420 __ast_pbx_run: Timeout, but no rule 't' in context 'TEST'

I have no autofallthrough=yes in my extensions.conf but I guess you have it in your extensions.conf. This will probably explain the difference

By: Mark Spencer (markster) 2005-11-05 23:57:58.000-0600

The correct behavior is only expected to occur with "autofallthrough=yes"

By: Manuel Guesdon (mguesdon) 2005-11-06 06:43:14.000-0600

Thank you. I've retried with autofallthrough=yes:
Here is my extensions .conf

[general]
autofallthrough=yes


[TEST]
exten => 103,1,NoOp(===========103===========)
exten => 103,2,Dial(Local/110@TEST&Local/120@TEST)
exten => 103,3,NoOp(In 103 Success DIALSTATUS=${DIALSTATUS})
exten => 103,103,NoOp(In 103 Failure DIALSTATUS=${DIALSTATUS})

exten => 120,1,NoOp(=== 120 ===)
exten => 120,2,Dial(SIP/012345@NotExistingPeer)
exten => 120,3,NoOp(In 120 Success-DIALSTATUS=${DIALSTATUS})
exten => 120,103,NoOp(In 120 Failure-DIALSTATUS=${DIALSTATUS})

Calling 103 give:
   -- Executing NoOp("SIP/oxy_stdphone2-f314", "===========103===========") in new stack
   -- Executing Dial("SIP/oxy_stdphone2-f314", "Local/110@TEST&Local/120@TEST") in new stack
Nov  6 13:33:14 NOTICE[28650]: chan_local.c:476 local_alloc: No such extension/context 110@TEST creating local channel
Nov  6 13:33:14 NOTICE[28650]: app_dial.c:978 dial_exec_full: Unable to create channel of type 'Local' (cause 0 - Unknown)
   -- Called 120@TEST
   -- Executing NoOp("Local/120@TEST-268d,2", "=== 120 ===") in new stack
   -- Executing Dial("Local/120@TEST-268d,2", "SIP/012345@NotExistingPeer") in new stack
Nov  6 13:33:14 WARNING[28653]: chan_sip.c:1947 create_addr: No such host: NotExistingPeer
Nov  6 13:33:14 NOTICE[28653]: app_dial.c:978 dial_exec_full: Unable to create channel of type 'SIP' (cause 3 - No route to destination)
 == Everyone is busy/congested at this time (1:0/0/1)
   -- Executing NoOp("Local/120@TEST-268d,2", "In 120 Failure-DIALSTATUS=CHANUNAVAIL") in new stack
 == Auto fallthrough, channel 'Local/120@TEST-268d,2' status is 'CHANUNAVAIL'
   -- Local/120@TEST-268d,1 is circuit-busy
 == Everyone is busy/congested at this time (2:0/1/1)
   -- Executing NoOp("SIP/oxy_stdphone2-f314", "In 103 Failure DIALSTATUS=CONGESTION") in new stack
 == Auto fallthrough, channel 'SIP/oxy_stdphone2-f314' status is 'CONGESTION'


So I have inexisting 110 exten (CHANUNAVAIL ?) and CHANUNAVAIL for 120 but this become CONGESTION in 103.

And in my cdr record, I have a disposition=BUSY for 103 & 120:
dst | calldate               | answer   | disposition | lastdata                  

103 | 2005-11-06 13:33:14+01 |          | BUSY        | In 103 Failure DIALSTATUS=CONGESTION

120 | 2005-11-06 13:33:14+01 |          | BUSY        | In 120 Failure-DIALSTATUS=CHANUNAVAIL


See also bug report ASTERISK-5454
At the

By: Kevin P. Fleming (kpfleming) 2005-11-07 20:49:17.000-0600

Please don't report multiple problems in the same note... the CDR disposition issues are completely separate.

There is not currently any way for chan_local to report 'CHANUNAVAIL' up to the channel that created it. The cause code interface between channels has no way to express that the channel could not be created, becuase it must exist for the communication to happen in the first place :-)

This is an artifact of using chan_local; it will never be able to carry all the possible DIALSTATUS results back to the calling channel.