liblinphone
liblinphone copied to clipboard
Local conference not being properly terminated
In latest master, local conferences are not being terminated properly causing the second conference attempt to fail.
I have traced this issue back to a call to Call::attachedToLocalConference made from Call::exitFromConference that checks if the CallSession is in a local conference or not.
In attachedToLocalConference() a comparison is made like follows:
const ConferenceId localConferenceId = ConferenceId(session->getLocalAddress(), session->getLocalAddress());
return (localConferenceId == conference->getConferenceId());
Even though the CallSession is indeed in a local conference, it is returning false because the conference Ids do not match. The dump value of localConferenceId looks like:
ConferenceId(peer=IdentityAddress(sip:[email protected]), local=IdentityAddress(sip:[email protected]))
And the dump value of conference->getConferenceId() looks like:
ConferenceId(peer=IdentityAddress(sip:[email protected];conf-id=gIz~T;transport=tcp), local=IdentityAddress(sip:[email protected];conf-id=gIz~T;transport=tcp))
I assume that this is broken due to some signaling difference between my SIP servers and those at linphone.org but I haven't confirmed this.
As a stop-gap I have replaced the ConferenceId comparison with a call to session->getParams()->getPrivate()->getInConference() instead which is the same method that is ultimately called by linphone_call_params_get_local_conference_mode() in order to determine if the CallSession is in a local conference.
I'm not familiar enough with the SDK though to judge if this is an acceptable replacement or if there's a better fix for this. Would really appreciate some advice.