liblinphone icon indicating copy to clipboard operation
liblinphone copied to clipboard

Local conference not being properly terminated

Open attermann opened this issue 4 years ago • 0 comments

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.

attermann avatar Sep 10 '21 22:09 attermann