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 XMPPFrontend::sendPresence(Swift::Presence::ref presence) { if (!presence->getFrom().getNode().empty()) { presence->addPayload(boost::shared_ptr<Swift::Payload>(new Swift::CapsInfo(m_discoItemsResponder->getBuddyCapsInfo()))); } m_stanzaChannel->sendPresence(presence); }
void Conversation::destroyRoom() { if (m_muc) { Swift::Presence::ref presence = Swift::Presence::create(); std::string legacyName = m_legacyName; if (!m_mucEscaping && legacyName.find_last_of("@") != std::string::npos) { legacyName.replace(legacyName.find_last_of("@"), 1, "%"); // OK } legacyName = Swift::JID::getEscapedNode(legacyName); presence->setFrom(Swift::JID(legacyName, m_conversationManager->getComponent()->getJID().toBare(), m_nickname)); presence->setType(Swift::Presence::Unavailable); Swift::MUCItem item; item.affiliation = Swift::MUCOccupant::NoAffiliation; item.role = Swift::MUCOccupant::NoRole; item.actor = "Transport"; item.reason = "Spectrum 2 transport is being shut down."; Swift::MUCUserPayload *p = new Swift::MUCUserPayload (); p->addItem(item); Swift::MUCUserPayload::StatusCode c; c.code = 332; p->addStatusCode(c); Swift::MUCUserPayload::StatusCode c2; c2.code = 307; p->addStatusCode(c2); presence->addPayload(boost::shared_ptr<Swift::Payload>(p)); BOOST_FOREACH(const Swift::JID &jid, m_jids) { presence->setTo(jid); m_conversationManager->getComponent()->getFrontend()->sendPresence(presence); } }
void RosterManager::sendBuddySubscribePresence(Buddy *buddy) { Swift::Presence::ref response = Swift::Presence::create(); response->setTo(m_user->getJID()); response->setFrom(buddy->getJID().toBare()); response->setType(Swift::Presence::Subscribe); if (!buddy->getAlias().empty()) { response->addPayload(boost::make_shared<Swift::Nickname>(buddy->getAlias())); } m_component->getFrontend()->sendPresence(response); }
void handlePresenceLeaveRoom() { Swift::Presence::ref response = Swift::Presence::create(); response->setTo("#room@localhost/hanzz"); response->setFrom("user@localhost/resource"); response->setType(Swift::Presence::Unavailable); Swift::MUCPayload *payload = new Swift::MUCPayload(); payload->setPassword("password"); response->addPayload(boost::shared_ptr<Swift::Payload>(payload)); injectPresence(response); loop->processEvents(); CPPUNIT_ASSERT_EQUAL(0, (int) received.size()); CPPUNIT_ASSERT_EQUAL(std::string("#room"), room); CPPUNIT_ASSERT_EQUAL(std::string(""), roomNickname); CPPUNIT_ASSERT_EQUAL(std::string(""), roomPassword); }
void handlePresenceJoinRoom() { Swift::Presence::ref response = Swift::Presence::create(); response->setTo("#room@localhost/hanzz"); response->setFrom("user@localhost/resource"); Swift::MUCPayload *payload = new Swift::MUCPayload(); payload->setPassword("password"); response->addPayload(boost::shared_ptr<Swift::Payload>(payload)); 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_EQUAL(std::string("#room"), room); CPPUNIT_ASSERT_EQUAL(std::string("hanzz"), roomNickname); CPPUNIT_ASSERT_EQUAL(std::string("password"), roomPassword); }