Answer probe presences

This commit is contained in:
HanzZ 2011-08-05 09:30:24 +02:00
parent cbf6db2a61
commit 16340590b4
5 changed files with 35 additions and 4 deletions

View file

@ -88,6 +88,8 @@ class RosterManager {
void sendCurrentPresences(const Swift::JID &to);
void sendCurrentPresence(const Swift::JID &from, const Swift::JID &to);
void sendUnavailablePresences(const Swift::JID &to);
private:

View file

@ -8,7 +8,7 @@ backend_host=localhost # < this option doesn't work yet
backend_port=10001
admin_username=admin
admin_password=test
idle_reconnect_time=10
#idle_reconnect_time=10
#cert= #patch to PKCS#12 certificate
#cert_password= #password to that certificate if any
users_per_backend=10

View file

@ -377,6 +377,24 @@ void RosterManager::sendCurrentPresences(const Swift::JID &to) {
}
}
void RosterManager::sendCurrentPresence(const Swift::JID &from, const Swift::JID &to) {
Buddy *buddy = getBuddy(Buddy::JIDToLegacyName(from));
if (buddy) {
Swift::Presence::ref presence = buddy->generatePresenceStanza(255);
if (presence) {
presence->setTo(to);
m_component->getStanzaChannel()->sendPresence(presence);
}
}
else {
Swift::Presence::ref response = Swift::Presence::create();
response->setTo(to);
response->setFrom(from);
response->setType(Swift::Presence::Unavailable);
m_component->getStanzaChannel()->sendPresence(response);
}
}
void RosterManager::sendUnavailablePresences(const Swift::JID &to) {
for (std::map<std::string, Buddy *>::const_iterator it = m_buddies.begin(); it != m_buddies.end(); it++) {
Buddy *buddy = (*it).second;

View file

@ -90,12 +90,12 @@ Swift::JID User::getJIDWithFeature(const std::string &feature) {
continue;
if (discoInfo->hasFeature(feature)) {
LOG4CXX_INFO(logger, m_jid.toString() << ": Found JID with " << feature << "feature: " << presence->getFrom().toString());
LOG4CXX_INFO(logger, m_jid.toString() << ": Found JID with " << feature << " feature: " << presence->getFrom().toString());
return presence->getFrom();
}
}
LOG4CXX_INFO(logger, m_jid.toString() << ": No JID with " << feature << "feature");
LOG4CXX_INFO(logger, m_jid.toString() << ": No JID with " << feature << " feature");
return jid;
}

View file

@ -236,7 +236,18 @@ void UserManager::handleGeneralPresenceReceived(Swift::Presence::ref presence) {
}
void UserManager::handleProbePresence(Swift::Presence::ref presence) {
User *user = getUser(presence->getFrom().toBare().toString());
if (user) {
user->getRosterManager()->sendCurrentPresence(presence->getTo(), presence->getFrom());
}
else {
Swift::Presence::ref response = Swift::Presence::create();
response->setFrom(presence->getTo());
response->setTo(presence->getFrom());
response->setType(Swift::Presence::Unavailable);
m_component->getStanzaChannel()->sendPresence(response);
}
}
void UserManager::handleSubscription(Swift::Presence::ref presence) {