From 8e1c2b43a6e39a3e4fb0e1b642ca126a2595df5b 2011-11-10 13:55:14 From: Jan Kaluza Date: 2011-11-10 13:55:14 Subject: [PATCH] Send unavailable presences to particular resource which disconnects --- diff --git a/src/user.cpp b/src/user.cpp index c66da59591e93995411f4e4a5accc02fcdf819f7..600547336dc9441c77c7f9e0c596de97d3101349 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