support for XEP-0172

This commit is contained in:
HanzZ 2012-12-28 08:55:29 +01:00
parent 2ae5cba932
commit 9c48437b09
2 changed files with 16 additions and 9 deletions

View file

@ -204,7 +204,9 @@ void RosterManager::sendBuddySubscribePresence(Buddy *buddy) {
response->setTo(m_user->getJID());
response->setFrom(buddy->getJID());
response->setType(Swift::Presence::Subscribe);
// TODO: NICKNAME
if (!buddy->getAlias().empty()) {
response->addPayload(boost::make_shared<Swift::Nickname>(buddy->getAlias()));
}
m_component->getStanzaChannel()->sendPresence(response);
}
@ -231,14 +233,7 @@ void RosterManager::setBuddyCallback(Buddy *buddy) {
sendBuddyRosterPush(buddy);
}
else {
// Send RIE only if there's resource which supports it.
std::vector<Swift::JID> jidWithRIE = m_user->getJIDWithFeature("http://jabber.org/protocol/rosterx");
if (!jidWithRIE.empty()) {
m_RIETimer->start();
}
else {
sendBuddySubscribePresence(buddy);
}
m_RIETimer->start();
}
}

View file

@ -25,6 +25,7 @@ class RosterManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest {
CPPUNIT_TEST(setBuddy);
CPPUNIT_TEST(sendCurrentPresences);
CPPUNIT_TEST(sendCurrentPresence);
CPPUNIT_TEST(sendBuddySubscribePresence);
CPPUNIT_TEST(removeBuddy);
CPPUNIT_TEST(subscribeExistingBuddy);
CPPUNIT_TEST(subscribeNewBuddy);
@ -59,6 +60,17 @@ class RosterManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest {
m_buddy = buddy->getName();
}
void sendBuddySubscribePresence() {
add2Buddies();
received.clear();
User *user = userManager->getUser("user@localhost");
user->getRosterManager()->sendBuddySubscribePresence(user->getRosterManager()->getBuddy("buddy1"));
CPPUNIT_ASSERT_EQUAL(1, (int) received.size());
CPPUNIT_ASSERT(getStanza(received[0])->getPayload<Swift::Nickname>());
CPPUNIT_ASSERT_EQUAL(std::string("Buddy 1"), getStanza(received[0])->getPayload<Swift::Nickname>()->getNickname());
}
void setBuddy() {
add2Buddies();
CPPUNIT_ASSERT_EQUAL(2, (int) received.size());