From d8e81d63c89c2e3e182b09ebaa55cdd7f8bb5758 Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Tue, 6 Mar 2018 12:30:24 +0100 Subject: [PATCH] When a call session of a ClientGroupChatRoom is released, destroy the chat room only if the state is TerminationPending and there was no error during the termination. --- src/chat/chat-room/client-group-chat-room.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/chat/chat-room/client-group-chat-room.cpp b/src/chat/chat-room/client-group-chat-room.cpp index a3de641a3..a5ea59cb4 100644 --- a/src/chat/chat-room/client-group-chat-room.cpp +++ b/src/chat/chat-room/client-group-chat-room.cpp @@ -143,8 +143,17 @@ void ClientGroupChatRoomPrivate::onCallSessionStateChanged ( qConference->getPrivate()->eventHandler->subscribe(q->getChatRoomId()); } else if (q->getState() == ChatRoom::State::TerminationPending) qConference->getPrivate()->focus->getPrivate()->getSession()->terminate(); - } else if ((newState == CallSession::State::Released) && (q->getState() == ChatRoom::State::TerminationPending)) { - q->onConferenceTerminated(q->getConferenceAddress()); + } else if (newState == CallSession::State::Released) { + if (q->getState() == ChatRoom::State::TerminationPending) { + if (session->getReason() == LinphoneReasonNone) { + // Everything is fine, the chat room has been left on the server side + q->onConferenceTerminated(q->getConferenceAddress()); + } else { + // Go to state TerminationFailed and then back to Created since it has not been terminated + setState(ChatRoom::State::TerminationFailed); + setState(ChatRoom::State::Created); + } + } } else if (newState == CallSession::State::Error) { if (q->getState() == ChatRoom::State::CreationPending) setState(ChatRoom::State::CreationFailed);