From 36f4fb8870c9a5e8f98357d5abf419ec917418b8 Mon Sep 17 00:00:00 2001 From: HanzZ Date: Sun, 11 Sep 2011 18:26:18 +0200 Subject: [PATCH] Forward transport presence in User::setConnected call --- include/transport/user.h | 8 ++---- src/user.cpp | 61 +++++++++++++++++++++++++++++----------- 2 files changed, 47 insertions(+), 22 deletions(-) diff --git a/include/transport/user.h b/include/transport/user.h index 840736c8..dcf9a9fe 100644 --- a/include/transport/user.h +++ b/include/transport/user.h @@ -93,11 +93,9 @@ class User { return m_readyForConnect; } - void setConnected(bool connected) { - m_connected = connected; - setIgnoreDisconnect(false); - updateLastActivity(); - } + void setConnected(bool connected); + + void sendCurrentPresence(); void setIgnoreDisconnect(bool ignoreDisconnect); diff --git a/src/user.cpp b/src/user.cpp index 789d25e5..ff6a40cb 100644 --- a/src/user.cpp +++ b/src/user.cpp @@ -101,6 +101,49 @@ Swift::JID User::getJIDWithFeature(const std::string &feature) { return jid; } +void User::sendCurrentPresence() { + if (m_component->inServerMode()) { + return; + } + + if (m_connected) { + Swift::Presence::ref highest = m_presenceOracle->getHighestPriorityPresence(m_jid.toBare()); + if (highest) { + Swift::Presence::ref response = Swift::Presence::create(highest); + response->setTo(m_jid); + response->setFrom(m_component->getJID()); + m_component->getStanzaChannel()->sendPresence(response); + LOG4CXX_INFO(logger, m_jid.toString() << ": Changing legacy network presence to " << response->getType()); + onPresenceChanged(highest); + } + else { + Swift::Presence::ref response = Swift::Presence::create(); + response->setTo(m_jid.toBare()); + response->setFrom(m_component->getJID()); + response->setType(Swift::Presence::Unavailable); + m_component->getStanzaChannel()->sendPresence(response); + onPresenceChanged(response); + } + } + else { + Swift::Presence::ref response = Swift::Presence::create(); + response->setTo(m_jid.toBare()); + response->setFrom(m_component->getJID()); + response->setType(Swift::Presence::Unavailable); + response->setStatus("Connecting"); + m_component->getStanzaChannel()->sendPresence(response); + onPresenceChanged(response); + } +} + +void User::setConnected(bool connected) { + m_connected = connected; + setIgnoreDisconnect(false); + updateLastActivity(); + + sendCurrentPresence(); +} + void User::handlePresence(Swift::Presence::ref presence) { std::cout << "PRESENCE " << presence->getFrom().toString() << "\n"; if (!m_connected) { @@ -148,23 +191,7 @@ void User::handlePresence(Swift::Presence::ref presence) { return; } - Swift::Presence::ref highest = m_presenceOracle->getHighestPriorityPresence(m_jid.toBare()); - if (highest) { - Swift::Presence::ref response = Swift::Presence::create(highest); - response->setTo(presence->getFrom().toBare()); - response->setFrom(m_component->getJID()); - m_component->getStanzaChannel()->sendPresence(response); - LOG4CXX_INFO(logger, m_jid.toString() << ": Changing legacy network presence to " << response->getType()); - onPresenceChanged(highest); - } - else { - Swift::Presence::ref response = Swift::Presence::create(); - response->setTo(m_jid.toBare()); - response->setFrom(m_component->getJID()); - response->setType(Swift::Presence::Unavailable); - m_component->getStanzaChannel()->sendPresence(response); - onPresenceChanged(response); - } + sendCurrentPresence(); } void User::handleSubscription(Swift::Presence::ref presence) {