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-0600 | Date Closed: | 2005-11-07 20:49:31.000-0600 |
Priority: | Minor | Regression? | No |
Status: | Closed/Complete | Components: | 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. |