diff --git a/src/user.cpp b/src/user.cpp index 5452ddc420f35b6832814fe798453038c9b99457..fcc53d67cdafd4fda3d15a1f07ccd44353718294 100644 --- a/src/user.cpp +++ b/src/user.cpp @@ -29,8 +29,12 @@ #include "Swiften/Elements/StreamError.h" #include "Swiften/Elements/MUCPayload.h" #include "log4cxx/logger.h" +#include using namespace log4cxx; +using namespace boost; + +#define foreach BOOST_FOREACH namespace Transport { @@ -66,6 +70,28 @@ const Swift::JID &User::getJID() { return m_jid; } +Swift::JID User::getJIDWithFeature(const std::string &feature) { + Swift::JID jid; + std::vector presences = m_presenceOracle->getAllPresence(m_jid); + + foreach(Swift::Presence::ref presence, presences) { + if (presence->getType() == Swift::Presence::Unavailable) + continue; + + Swift::DiscoInfo::ref discoInfo = m_entityCapsManager->getCaps(presence->getFrom()); + if (discoInfo) + continue; + + if (discoInfo->hasFeature(feature)) { + 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"); + return jid; +} + void User::handlePresence(Swift::Presence::ref presence) { std::cout << "PRESENCE " << presence->getFrom().toString() << "\n"; if (!m_connected) {