From 8e1c2b43a6e39a3e4fb0e1b642ca126a2595df5b Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Thu, 10 Nov 2011 13:55:14 +0100 Subject: [PATCH] Send unavailable presences to particular resource which disconnects --- src/user.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/user.cpp b/src/user.cpp index c66da595..60054733 100644 --- a/src/user.cpp +++ b/src/user.cpp @@ -215,7 +215,24 @@ void User::handlePresence(Swift::Presence::ref presence) { return; } - sendCurrentPresence(); + + // User wants to disconnect this resource + if (!m_component->inServerMode()) { + if (presence->getType() == Swift::Presence::Unavailable) { + // Send unavailable presences for online contacts + m_rosterManager->sendUnavailablePresences(presence->getFrom()); + + // Send unavailable presence for transport contact itself + Swift::Presence::ref response = Swift::Presence::create(); + response->setTo(presence->getFrom()); + response->setFrom(m_component->getJID()); + response->setType(Swift::Presence::Unavailable); + m_component->getStanzaChannel()->sendPresence(response); + } + else { + sendCurrentPresence(); + } + } // Change legacy network presence