Swift::Presence::ref Buddy::generatePresenceStanza(int features, bool only_new) { std::string alias = getAlias(); std::string name = getSafeName(); Swift::StatusShow s; std::string statusMessage; if (!getStatus(s, statusMessage)) return Swift::Presence::ref(); if (m_jid.getNode().empty()) { generateJID(); } Swift::Presence::ref presence = Swift::Presence::create(); presence->setFrom(m_jid); presence->setTo(m_rosterManager->getUser()->getJID().toBare()); presence->setType(Swift::Presence::Available); if (!statusMessage.empty()) presence->setStatus(statusMessage); if (s.getType() == Swift::StatusShow::None) presence->setType(Swift::Presence::Unavailable); presence->setShow(s.getType()); if (presence->getType() != Swift::Presence::Unavailable) { // caps presence->addPayload(boost::shared_ptr<Swift::Payload>(new Swift::CapsInfo(m_rosterManager->getUser()->getComponent()->getBuddyCapsInfo()))); // if (features & 0/*TRANSPORT_FEATURE_AVATARS*/) { presence->addPayload(boost::shared_ptr<Swift::Payload>(new Swift::VCardUpdate (getIconHash()))); // } if (isBlocked()) { presence->addPayload(boost::shared_ptr<Swift::Payload>(new Transport::BlockPayload ())); } } // if (only_new) { // if (m_lastPresence) // m_lastPresence->setTo(Swift::JID("")); // if (m_lastPresence == presence) { // return Swift::Presence::ref(); // } // m_lastPresence = presence; // } return presence; }
void handlePresence() { Swift::Presence::ref response = Swift::Presence::create(); response->setTo("localhost"); response->setFrom("user@localhost/resource"); response->setShow(Swift::StatusShow::Away); injectPresence(response); loop->processEvents(); // no presence received in server mode, just disco#info CPPUNIT_ASSERT_EQUAL(1, (int) received.size()); CPPUNIT_ASSERT(getStanza(received[0])->getPayload<Swift::DiscoInfo>()); CPPUNIT_ASSERT(changedPresence); CPPUNIT_ASSERT_EQUAL(Swift::StatusShow::Away, changedPresence->getShow()); }