History | Log In     View a printable version of the current page.  
Issue Details (XML | Word | Printable)

Key: XCL-126
Type: Bug Bug
Status: Reopened Reopened
Priority: Major Major
Assignee: Unassigned
Reporter: Jaroslav Libak
Votes: 0
Watchers: 1
Operations

If you were logged in you would be able to see more operations.
sipXtapi: sipXcallLib

unhold for conference call doesn't engage mic/speaker

Created: 2007-02-19 15:55   Updated: 2007-03-17 11:39
Component/s: sipXtapi
Affects Version/s: None
Fix Version/s: None

Original Estimate: Unknown Remaining Estimate: Unknown Time Spent: Unknown
File Attachments: 1. File sipxtapipatch.tar.bz2 (1 kb)
2. Zip Archive unholdconferencecall.zip (1 kb)



 Description  « Hide
When I create a new conference using sipxConferenceCreate, make a call and put it in full hold using sipxCallHold, call sipxConferenceJoin to add it to conference and call sipxCallUnhold, call is put into bridged state, not engaging mic/speaker.

It is probably assumed that the first call will be added to conference without putting it on hold first, thus mic/speaker will already be in focus on the single call in conference, so when 2nd call is added it will be in bridged state after calling unhold on it which should be ok since the 1st conference call is in focus.

But if the 1st call is added to the conference by putting it on hold first, then we cannot unhold it properly anymore. Unhold can put a conference call only into bridged state.

Therefore I added a new bool parameter to sipxCallUnhold, meaning whether we want the call to take focus. It is true by default.
sipxCallUnhold function is also rewritten to be more safe and strict.

 All   Comments   Work Log   Change History      Sort Order:
Jaroslav Libak - 2007-02-19 18:13
The first patch had a bug with pCallData->bInFocus, it was always set to true.

Jaroslav Libak - 2007-02-20 04:49
I should also add that sipxCallUnhold with true should be called only for the first conference call, for other calls it should be called with false, in case we have more conferences and don't want to switch focus. Application needs to decide whether it wants to switch focus or not.

Dan Petrie - 2007-03-09 14:09
If I understand this correctly, call 1 is part of conference A which is in focus. call 1 is put on hold and then joined to conference B which is in bridged mode. call 1 is then taken off hold and becomes in a BRIDGED state. This is the correct behavior. Conference A has focus and as such B cannot have focus it must stay in bridged mode until conference B is explicity put in focus using sipxConferenceUnhold.

Please clarify if I have misunderstood this problem. The best way to illustrate the problem is to provide a unit test.

Jaroslav Libak - 2007-03-09 15:22
No you misunderstood it.

There is only 1 conference A in this scenario and only 1 call.

1.) you create new conference A

2.) you make a call and connect it

3.) you put call into full hold

4.) you join the call into conference

5.) you try to unhold the call directly

6.) call ends up in bridged state

You cant change this bridged state by calling unhold on the call, you must use sipxconferenceunhold. (this is according to .h file, so this isnt a bug, but weird behaviour at least)

This behaviour of hold makes it more difficult for user to talk to single participant in a conference. Lets assume you have 3 people in conference and you want to talk to 1 of them only. You might try to put the whole conference on hold, and then unhold the single call. This will not work. Call will stay in bridged state. Or you might just put individual calls on hold, except the one you want to speak to. This will succeed, you can talk to single participant only, but then, unhold on those individual calls wont work, and they will end up in bridged state (instead of connected). You will have to use unhold on the whole conference (but how do you want to realize this with a toggle button? conference wasnt put on hold before, so it will look like you are putting it on hold and then on unhold again, which looks like a bug in software). This is weird behaviour, if user puts a call into hold, he expects the same function / button to enable it again, and not some other button.

If enabling unhold taking focus in a conference doesnt break something in the code it should be enabled even if it can cause focus shift between conferences.