Forward transport presence in User::setConnected call
This commit is contained in:
parent
3daa381077
commit
36f4fb8870
2 changed files with 47 additions and 22 deletions
|
@ -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);
|
||||
|
||||
|
|
61
src/user.cpp
61
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) {
|
||||
|
|
Loading…
Add table
Reference in a new issue