Summary: | ASTERISK-14033: [patch] [regression] #0013747 not fixed for local channel (Indications are not passed from old peer to new peer during masquerad | ||
Reporter: | David Woolley (davidw) | Labels: | |
Date Opened: | 2009-04-29 06:38:49 | Date Closed: | 2010-02-16 17:07:00.000-0600 |
Priority: | Major | Regression? | Yes |
Status: | Closed/Complete | Components: | Channels/chan_local |
Versions: | Frequency of Occurrence | ||
Related Issues: | |||
Environment: | Attachments: | ( 0) Issue14992-trunk.patch | |
Description: | The lack of ring back tone on a ringing call transferred to a parking call is still not working in the case that interests us, and for which we produced a test case in comment 94129 of issues ASTERISK-12930. Looking at http://reviewboard.digium.com/r/90/ it seems that it was only tested in the simpler case, where the ringing channel is a real channel. Our case uses a local channel. ****** ADDITIONAL INFORMATION ****** The basic problem is that the -1 side of the local channel is left in a Down state, rather than a Ringing state, but the fix only checks the immediate peer for a Ringing state before regenerating the indication. These are the channel states, for the test case, just before the transfer: Channel Location State Application(Data) SIP/xxxxxxxxxxxxx-08 *6185@yyyyyyyyyyyyyy Ringing AppDial((Outgoing Line)) Local/£6185@default- £6185@default:1 Ring Wait(3) Local/£6185@default- 6185@default:1 Down AppDial((Outgoing Line)) Local/*6185@default- *6185@default:2 Ring Dial(SIP/xxxxxxxxxxxxx,15) Local/*6185@default- 6185@default:1 Down AppDial((Outgoing Line)) SIP/6106-08473608 6185@internal:1 Ring Dial(Local/*6185@default&Local SIP/6105-08487740 s@yyyyyyyyyyyyyyyy:1 Up Parked Call() xxxxxxxxxxxxx corresponds to 4222 in the test case. 6105 is the parked extension and 6106 is the one calling 6185 to run the test. hash has been replaced by pounds to avoid being treated as an issue number marker. Our original reason for using a local channel here was as a workround for ASTERISK-1247548, however, we have subsequently come to rely on the extra level of indirection to keep control of the call. | ||
Comments: | By: Leif Madsen (lmadsen) 2009-06-01 14:03:54 Just wanted to ping this issue as it's target release is 1.6.0.10. Thanks! By: David Woolley (davidw) 2009-10-29 13:45:46 I think that the patch for ASTERISK-13788 adds a new case where the presence of a local channel may prevent an indication, in this case music on hold, being re-instated on a new channel when a local channel is masqueraded. I would expect if you connected through a, non-optimised, local channel, using the new m option, the destination channel went into hold, and you then transferred the ;1 side of the local channel to another channel, the new peer of the ;1 side would not receive MOH. In fact, I think they would receive no RTP at all, so might timeout. By: David Woolley (davidw) 2009-10-30 06:32:47 I think, in the MOH case, one has to transfer the ;2 side for things to go funny. By: Digium Subversion (svnbot) 2010-02-04 17:20:23.000-0600 Repository: asterisk Revision: 244785 U branches/1.4/channels/chan_local.c ------------------------------------------------------------------------ r244785 | jpeeler | 2010-02-04 17:20:22 -0600 (Thu, 04 Feb 2010) | 22 lines Change channel state on local channels for busy,answer,ring. Previously local channels channel state never changed. This became problematic when the state of the other side of the local channel was lost, for example during a masquerade. Changing the state of the local channel allows for the scenario to be detected when the channel state is set to ringing, but the peer isn't ringing. The specific problem scenario is described in 164201. Although this was noted on one of the issues, here is the tested dialplan verified to work: exten => 9700,1,Dial(Local/*9700@default&Local/ASTERISK-9414@default) exten => *9700,1,Set(GLOBAL(TESTCHAN)=${CHANNEL:0:${MATH(${LEN(${CHANNEL})}-1):0:2}}1) exten => *9700,n,wait(3) ;3 works, 1 did not exten => *9700,n,Dial(SIP/5001) exten => ASTERISK-9414,1,Wait(1) ;1 works, 3 did not exten => ASTERISK-9414,n,ChannelRedirect(${TESTCHAN},parkedcalls,701,1) (closes issue ASTERISK-14033) Reported by: davidw ------------------------------------------------------------------------ http://svn.digium.com/view/asterisk?view=rev&revision=244785 By: Digium Subversion (svnbot) 2010-02-04 17:21:51.000-0600 Repository: asterisk Revision: 244792 _U trunk/ ------------------------------------------------------------------------ r244792 | jpeeler | 2010-02-04 17:21:50 -0600 (Thu, 04 Feb 2010) | 28 lines Blocked revisions 244785 via svnmerge ........ r244785 | jpeeler | 2010-02-04 17:20:21 -0600 (Thu, 04 Feb 2010) | 22 lines Change channel state on local channels for busy,answer,ring. Previously local channels channel state never changed. This became problematic when the state of the other side of the local channel was lost, for example during a masquerade. Changing the state of the local channel allows for the scenario to be detected when the channel state is set to ringing, but the peer isn't ringing. The specific problem scenario is described in 164201. Although this was noted on one of the issues, here is the tested dialplan verified to work: exten => 9700,1,Dial(Local/*9700@default&Local/ASTERISK-9414@default) exten => *9700,1,Set(GLOBAL(TESTCHAN)=${CHANNEL:0:${MATH(${LEN(${CHANNEL})}-1):0:2}}1) exten => *9700,n,wait(3) ;3 works, 1 did not exten => *9700,n,Dial(SIP/5001) exten => ASTERISK-9414,1,Wait(1) ;1 works, 3 did not exten => ASTERISK-9414,n,ChannelRedirect(${TESTCHAN},parkedcalls,701,1) (closes issue ASTERISK-14033) Reported by: davidw ........ ------------------------------------------------------------------------ http://svn.digium.com/view/asterisk?view=rev&revision=244792 By: David Woolley (davidw) 2010-02-09 11:13:55.000-0600 The change failed to merge into trunk. A patch from the change applies OK, but it won't compile and, in the SVN, only the revision history meta data was updated: chan_local.c:261: error: switch quantity not an integer on this line: switch (f->subclass) { By: David Woolley (davidw) 2010-02-09 11:44:38.000-0600 I've uploaded a tweaked patch that does compile on trunk. The only change I've made is to account for subclass being a union. I haven't tested it beyond confirming that it will compile. By: David Woolley (davidw) 2010-02-09 12:00:30.000-0600 Note that 1.6.0 and 1.6.1 need to be merged from 1.4, not from trunk, as they do not have the union. I haven't checked 1.6.2. By: Jeff Peeler (jpeeler) 2010-02-09 13:18:54.000-0600 I thought I tested trunk and the change did not need to be applied there, which is why I blocked the change from trunk. Are you seeing a problem present for sure in trunk as well? By: David Woolley (davidw) 2010-02-09 13:30:34.000-0600 No. I haven't tested on trunk. I think I may not have understood the significance of "blocked" on the svnbot output. (It is confusing when you still get the full details in the log.) The problem definitely applies on 1.6.1.x, and it looks like the block on trunk has stopped it being propagated to that branch. If it really isn't needed for trunk, it would have helped if that had been included as a bug note, as I've found several cases where changes appear not to have propagated purely due to conflicting changes, unrelated to the issue in question. By: Jeff Peeler (jpeeler) 2010-02-09 14:00:34.000-0600 Ok, apparently I messed this up. All the branches need it after all. So I'll fix it right up. Thanks for letting me know. The merging process is manual. There are no automatic changes propagated to the other branches, so it's entirely my fault. However, when a change is blocked that information is logged to the bug note as you see above. By: Digium Subversion (svnbot) 2010-02-10 10:47:39.000-0600 Repository: asterisk Revision: 246070 U trunk/channels/chan_local.c ------------------------------------------------------------------------ r246070 | jpeeler | 2010-02-10 10:47:38 -0600 (Wed, 10 Feb 2010) | 22 lines Change channel state on local channels for busy,answer,ring. Previously local channels channel state never changed. This became problematic when the state of the other side of the local channel was lost, for example during a masquerade. Changing the state of the local channel allows for the scenario to be detected when the channel state is set to ringing, but the peer isn't ringing. The specific problem scenario is described in 164201. Although this was noted on one of the issues, here is the tested dialplan verified to work: exten => 9700,1,Dial(Local/*9700@default&Local/0009700@default) exten => *9700,1,Set(GLOBAL(TESTCHAN)=${CHANNEL:0:${MATH(${LEN(${CHANNEL})}-1):0:2}}1) exten => *9700,n,wait(3) ;3 works, 1 did not exten => *9700,n,Dial(SIP/5001) exten => 0009700,1,Wait(1) ;1 works, 3 did not exten => 0009700,n,ChannelRedirect(${TESTCHAN},parkedcalls,701,1) (closes issue ASTERISK-14033) Reported by: davidw ------------------------------------------------------------------------ http://svn.digium.com/view/asterisk?view=rev&revision=246070 By: Digium Subversion (svnbot) 2010-02-10 10:53:01.000-0600 Repository: asterisk Revision: 246071 _U branches/1.6.0/ U branches/1.6.0/channels/chan_local.c ------------------------------------------------------------------------ r246071 | jpeeler | 2010-02-10 10:53:00 -0600 (Wed, 10 Feb 2010) | 29 lines Merged revisions 246070 via svnmerge from https://origsvn.digium.com/svn/asterisk/trunk ........ r246070 | jpeeler | 2010-02-10 10:47:37 -0600 (Wed, 10 Feb 2010) | 22 lines Change channel state on local channels for busy,answer,ring. Previously local channels channel state never changed. This became problematic when the state of the other side of the local channel was lost, for example during a masquerade. Changing the state of the local channel allows for the scenario to be detected when the channel state is set to ringing, but the peer isn't ringing. The specific problem scenario is described in 164201. Although this was noted on one of the issues, here is the tested dialplan verified to work: exten => 9700,1,Dial(Local/*9700@default&Local/0009700@default) exten => *9700,1,Set(GLOBAL(TESTCHAN)=${CHANNEL:0:${MATH(${LEN(${CHANNEL})}-1):0:2}}1) exten => *9700,n,wait(3) ;3 works, 1 did not exten => *9700,n,Dial(SIP/5001) exten => 0009700,1,Wait(1) ;1 works, 3 did not exten => 0009700,n,ChannelRedirect(${TESTCHAN},parkedcalls,701,1) (closes issue ASTERISK-14033) Reported by: davidw ........ ------------------------------------------------------------------------ http://svn.digium.com/view/asterisk?view=rev&revision=246071 By: Digium Subversion (svnbot) 2010-02-10 10:55:28.000-0600 Repository: asterisk Revision: 246072 _U branches/1.6.1/ U branches/1.6.1/channels/chan_local.c ------------------------------------------------------------------------ r246072 | jpeeler | 2010-02-10 10:55:28 -0600 (Wed, 10 Feb 2010) | 29 lines Merged revisions 246070 via svnmerge from https://origsvn.digium.com/svn/asterisk/trunk ........ r246070 | jpeeler | 2010-02-10 10:47:37 -0600 (Wed, 10 Feb 2010) | 22 lines Change channel state on local channels for busy,answer,ring. Previously local channels channel state never changed. This became problematic when the state of the other side of the local channel was lost, for example during a masquerade. Changing the state of the local channel allows for the scenario to be detected when the channel state is set to ringing, but the peer isn't ringing. The specific problem scenario is described in 164201. Although this was noted on one of the issues, here is the tested dialplan verified to work: exten => 9700,1,Dial(Local/*9700@default&Local/0009700@default) exten => *9700,1,Set(GLOBAL(TESTCHAN)=${CHANNEL:0:${MATH(${LEN(${CHANNEL})}-1):0:2}}1) exten => *9700,n,wait(3) ;3 works, 1 did not exten => *9700,n,Dial(SIP/5001) exten => 0009700,1,Wait(1) ;1 works, 3 did not exten => 0009700,n,ChannelRedirect(${TESTCHAN},parkedcalls,701,1) (closes issue ASTERISK-14033) Reported by: davidw ........ ------------------------------------------------------------------------ http://svn.digium.com/view/asterisk?view=rev&revision=246072 By: Digium Subversion (svnbot) 2010-02-10 10:58:55.000-0600 Repository: asterisk Revision: 246073 _U branches/1.6.2/ U branches/1.6.2/channels/chan_local.c ------------------------------------------------------------------------ r246073 | jpeeler | 2010-02-10 10:58:55 -0600 (Wed, 10 Feb 2010) | 29 lines Merged revisions 246070 via svnmerge from https://origsvn.digium.com/svn/asterisk/trunk ........ r246070 | jpeeler | 2010-02-10 10:47:37 -0600 (Wed, 10 Feb 2010) | 22 lines Change channel state on local channels for busy,answer,ring. Previously local channels channel state never changed. This became problematic when the state of the other side of the local channel was lost, for example during a masquerade. Changing the state of the local channel allows for the scenario to be detected when the channel state is set to ringing, but the peer isn't ringing. The specific problem scenario is described in 164201. Although this was noted on one of the issues, here is the tested dialplan verified to work: exten => 9700,1,Dial(Local/*9700@default&Local/0009700@default) exten => *9700,1,Set(GLOBAL(TESTCHAN)=${CHANNEL:0:${MATH(${LEN(${CHANNEL})}-1):0:2}}1) exten => *9700,n,wait(3) ;3 works, 1 did not exten => *9700,n,Dial(SIP/5001) exten => 0009700,1,Wait(1) ;1 works, 3 did not exten => 0009700,n,ChannelRedirect(${TESTCHAN},parkedcalls,701,1) (closes issue ASTERISK-14033) Reported by: davidw ........ ------------------------------------------------------------------------ http://svn.digium.com/view/asterisk?view=rev&revision=246073 |