Changeset - af75453834dd
[Not reviewed]
0 13 0
Jan Kaluza - 10 years ago 2016-01-22 15:17:51
jkaluza@redhat.com
Fix #86 - Support case-sensitive buddy names transparently. When lower-cased name is received from frontend, it is mapped to case-sensitive name sent by the backend originally.
13 files changed with 120 insertions and 46 deletions:
0 comments (0 inline, 0 general)
backends/libpurple/main.cpp
Show inline comments
 
@@ -1259,7 +1259,6 @@ static PurpleConnectionUiOps conn_ui_ops =
 
static void *notify_user_info(PurpleConnection *gc, const char *who, PurpleNotifyUserInfo *user_info) {
 
	PurpleAccount *account = purple_connection_get_account_wrapped(gc);
 
	std::string name(purple_normalize_wrapped(account, who));
 
	std::transform(name.begin(), name.end(), name.begin(), ::tolower);
 

	
 
	size_t pos = name.find("/");
 
	if (pos != std::string::npos)
include/transport/Buddy.h
Show inline comments
 
@@ -28,6 +28,7 @@
 
namespace Transport {
 

	
 
class RosterManager;
 
class User;
 

	
 
typedef enum { 	BUDDY_NO_FLAG = 0,
 
				BUDDY_JID_ESCAPING = 2,
 
@@ -164,7 +165,8 @@ class Buddy {
 

	
 
		/// \param jid Jabber ID.
 
		/// \return legacy name of buddy from JID.
 
		static std::string JIDToLegacyName(const Swift::JID &jid);
 
		static std::string JIDToLegacyName(const Swift::JID &jid, User *user = NULL);
 
		static Buddy *JIDToBuddy(const Swift::JID &jid, User *user);
 
		static BuddyFlag buddyFlagsFromJID(const Swift::JID &jid);
 

	
 
	protected:
libtransport/Buddy.cpp
Show inline comments
 
@@ -189,7 +189,7 @@ void Buddy::handleVCardReceived(const std::string &id, Swift::VCard::ref vcard)
 
	m_rosterManager->getUser()->getComponent()->getFrontend()->sendVCard(vcard, m_rosterManager->getUser()->getJID());
 
}
 

	
 
std::string Buddy::JIDToLegacyName(const Swift::JID &jid) {
 
std::string Buddy::JIDToLegacyName(const Swift::JID &jid, User *user) {
 
	std::string name;
 
	if (jid.getUnescapedNode() == jid.getNode()) {
 
		name = jid.getNode();
 
@@ -199,14 +199,48 @@ std::string Buddy::JIDToLegacyName(const Swift::JID &jid) {
 
	}
 
	else {
 
		name = jid.getUnescapedNode();
 
		// Psi sucks...
 
// 		if (name.find_last_of("\\40") != std::string::npos) {
 
// 			name.replace(name.find_last_of("\\40"), 1, "@"); // OK
 
// 		}
 
	}
 

	
 
	// If we have User associated with this request, we will find the
 
	// buddy in his Roster, because JID received from network can be lower-case
 
	// version of the original legacy name, but in the roster, we store the
 
	// case-sensitive version of the legacy name.
 
	if (user) {
 
		Buddy *b = user->getRosterManager()->getBuddy(name);
 
		if (b) {
 
			return b->getName();
 
		}
 
	}
 

	
 
	return name;
 
}
 

	
 
Buddy *Buddy::JIDToBuddy(const Swift::JID &jid, User *user) {
 
	std::string name;
 
	if (jid.getUnescapedNode() == jid.getNode()) {
 
		name = jid.getNode();
 
		if (name.find_last_of("%") != std::string::npos) {
 
			name.replace(name.find_last_of("%"), 1, "@"); // OK
 
		}
 
	}
 
	else {
 
		name = jid.getUnescapedNode();
 
	}
 

	
 
	// If we have User associated with this request, we will find the
 
	// buddy in his Roster, because JID received from network can be lower-case
 
	// version of the original legacy name, but in the roster, we store the
 
	// case-sensitive version of the legacy name.
 
	if (user) {
 
		Buddy *b = user->getRosterManager()->getBuddy(name);
 
		if (b) {
 
			return b;
 
		}
 
	}
 

	
 
	return NULL;
 
}
 

	
 
BuddyFlag Buddy::buddyFlagsFromJID(const Swift::JID &jid) {
 
	if (jid.getUnescapedNode() == jid.getNode()) {
 
		return BUDDY_NO_FLAG;
libtransport/ConversationManager.cpp
Show inline comments
 
@@ -119,7 +119,7 @@ void ConversationManager::handleMessageReceived(Swift::Message::ref message) {
 
// 	if (name.find_last_of("%") != std::string::npos) { // OK when commented
 
// 		name.replace(name.find_last_of("%"), 1, "@"); // OK when commented
 
// 	}
 
	std::string name = Buddy::JIDToLegacyName(message->getTo());
 
	std::string name = Buddy::JIDToLegacyName(message->getTo(), m_user);
 
	if (name.empty()) {
 
		LOG4CXX_WARN(logger, m_user->getJID().toString() << ": Tried to create empty conversation");
 
		return;
libtransport/RosterManager.cpp
Show inline comments
 
@@ -33,6 +33,7 @@
 
#include "Swiften/Elements/Nickname.h"
 
#include <boost/foreach.hpp>
 
#include <boost/make_shared.hpp>
 
#include <boost/algorithm/string.hpp>
 

	
 
#include <map>
 
#include <iterator>
 
@@ -68,7 +69,9 @@ RosterManager::~RosterManager() {
 
		delete m_rosterStorage;
 
}
 

	
 
void RosterManager::removeBuddy(const std::string &name) {
 
void RosterManager::removeBuddy(const std::string &_name) {
 
	std::string name = _name;
 
	boost::algorithm::to_lower(name);
 
	Buddy *buddy = getBuddy(name);
 
	if (!buddy) {
 
		LOG4CXX_WARN(logger, m_user->getJID().toString() << ": Tried to remove unknown buddy " << name);
 
@@ -114,8 +117,10 @@ void RosterManager::handleBuddyChanged(Buddy *buddy) {
 
}
 

	
 
void RosterManager::setBuddy(Buddy *buddy) {
 
	LOG4CXX_INFO(logger, "Associating buddy " << buddy->getName() << " with " << m_user->getJID().toString());
 
	m_buddies[buddy->getName()] = buddy;
 
	std::string name = buddy->getName();
 
	boost::algorithm::to_lower(name);
 
	LOG4CXX_INFO(logger, "Associating buddy " << name << " with " << m_user->getJID().toString());
 
	m_buddies[name] = buddy;
 
	onBuddySet(buddy);
 

	
 
	doAddBuddy(buddy);
 
@@ -125,7 +130,9 @@ void RosterManager::setBuddy(Buddy *buddy) {
 
}
 

	
 
void RosterManager::unsetBuddy(Buddy *buddy) {
 
	m_buddies.erase(buddy->getName());
 
	std::string name = buddy->getName();
 
	boost::algorithm::to_lower(name);
 
	m_buddies.erase(name);
 
	if (m_rosterStorage)
 
		m_rosterStorage->removeBuddyFromQueue(buddy);
 
	onBuddyUnset(buddy);
 
@@ -137,13 +144,15 @@ void RosterManager::storeBuddy(Buddy *buddy) {
 
	}
 
}
 

	
 
Buddy *RosterManager::getBuddy(const std::string &name) {
 
Buddy *RosterManager::getBuddy(const std::string &_name) {
 
	std::string name = _name;
 
	boost::algorithm::to_lower(name);
 
	return m_buddies[name];
 
}
 

	
 

	
 
void RosterManager::handleSubscription(Swift::Presence::ref presence) {
 
	std::string legacyName = Buddy::JIDToLegacyName(presence->getTo());
 
	std::string legacyName = Buddy::JIDToLegacyName(presence->getTo(), m_user);
 
	if (legacyName.empty()) {
 
		return;
 
	}
 
@@ -154,9 +163,9 @@ void RosterManager::handleSubscription(Swift::Presence::ref presence) {
 
		Swift::Presence::ref response = Swift::Presence::create();
 
		response->setTo(presence->getFrom().toBare());
 
		response->setFrom(presence->getTo().toBare());
 
		Buddy *buddy = getBuddy(Buddy::JIDToLegacyName(presence->getTo()));
 
		Buddy *buddy = getBuddy(legacyName);
 
		if (buddy) {
 
			LOG4CXX_INFO(logger, m_user->getJID().toString() << ": Subscription received and buddy " << Buddy::JIDToLegacyName(presence->getTo()) << " is already there => answering");
 
			LOG4CXX_INFO(logger, m_user->getJID().toString() << ": Subscription received and buddy " << legacyName << " is already there => answering");
 
			switch (presence->getType()) {
 
				case Swift::Presence::Subscribe:
 
					onBuddyAdded(buddy);
 
@@ -184,7 +193,7 @@ void RosterManager::handleSubscription(Swift::Presence::ref presence) {
 
				case Swift::Presence::Subscribe:
 
					buddyInfo.id = -1;
 
					buddyInfo.alias = "";
 
					buddyInfo.legacyName = Buddy::JIDToLegacyName(presence->getTo());
 
					buddyInfo.legacyName = legacyName;
 
					buddyInfo.subscription = "both";
 
					buddyInfo.flags = Buddy::buddyFlagsFromJID(presence->getTo());
 
					LOG4CXX_INFO(logger, m_user->getJID().toString() << ": Subscription received for new buddy " << buddyInfo.legacyName << " => adding to legacy network");
 
@@ -201,7 +210,7 @@ void RosterManager::handleSubscription(Swift::Presence::ref presence) {
 
				case Swift::Presence::Unsubscribe:
 
					buddyInfo.id = -1;
 
					buddyInfo.alias = "";
 
					buddyInfo.legacyName = Buddy::JIDToLegacyName(presence->getTo());
 
					buddyInfo.legacyName = legacyName;
 
					buddyInfo.subscription = "both";
 
					buddyInfo.flags = Buddy::buddyFlagsFromJID(presence->getTo());
 

	
 
@@ -222,7 +231,7 @@ void RosterManager::handleSubscription(Swift::Presence::ref presence) {
 
		response->setTo(presence->getFrom().toBare());
 
		response->setFrom(presence->getTo().toBare());
 

	
 
		Buddy *buddy = getBuddy(Buddy::JIDToLegacyName(presence->getTo()));
 
		Buddy *buddy = getBuddy(legacyName);
 
		if (buddy) {
 
			std::vector<Swift::Presence::ref> &presences = buddy->generatePresenceStanzas(255);
 
			switch (presence->getType()) {
 
@@ -274,7 +283,7 @@ void RosterManager::handleSubscription(Swift::Presence::ref presence) {
 
				case Swift::Presence::Subscribe:
 
					buddyInfo.id = -1;
 
					buddyInfo.alias = "";
 
					buddyInfo.legacyName = Buddy::JIDToLegacyName(presence->getTo());
 
					buddyInfo.legacyName = legacyName;
 
					buddyInfo.subscription = "both";
 
					buddyInfo.flags = Buddy::buddyFlagsFromJID(presence->getTo());
 

	
 
@@ -287,7 +296,7 @@ void RosterManager::handleSubscription(Swift::Presence::ref presence) {
 
				case Swift::Presence::Unsubscribe:
 
					buddyInfo.id = -1;
 
					buddyInfo.alias = "";
 
					buddyInfo.legacyName = Buddy::JIDToLegacyName(presence->getTo());
 
					buddyInfo.legacyName = legacyName;
 
					buddyInfo.subscription = "both";
 
					buddyInfo.flags = Buddy::buddyFlagsFromJID(presence->getTo());
 

	
 
@@ -339,7 +348,9 @@ void RosterManager::setStorageBackend(StorageBackend *storageBackend) {
 
		Buddy *buddy = m_component->getFactory()->createBuddy(this, *it);
 
		if (buddy) {
 
			LOG4CXX_INFO(logger, m_user->getJID().toString() << ": Adding cached buddy " << buddy->getName() << " fom database");
 
			m_buddies[buddy->getName()] = buddy;
 
			std::string name = buddy->getName();
 
			boost::algorithm::to_lower(name);
 
			m_buddies[name] = buddy;
 
			onBuddySet(buddy);
 
		}
 
	}
 
@@ -383,7 +394,7 @@ void RosterManager::sendCurrentPresences(const Swift::JID &to) {
 
}
 

	
 
void RosterManager::sendCurrentPresence(const Swift::JID &from, const Swift::JID &to) {
 
	Buddy *buddy = getBuddy(Buddy::JIDToLegacyName(from));
 
	Buddy *buddy = Buddy::JIDToBuddy(from, m_user);
 
	if (buddy) {
 
		std::vector<Swift::Presence::ref> &presences = buddy->generatePresenceStanzas(255);
 
		BOOST_FOREACH(Swift::Presence::ref &presence, presences) {
spectrum/src/frontends/slack/SlackSession.cpp
Show inline comments
 
@@ -125,7 +125,7 @@ void SlackSession::sendMessage(boost::shared_ptr<Swift::Message> message) {
 
			return;
 
		}
 
		channel = m_slackChannel;
 
		from = Buddy::JIDToLegacyName(message->getFrom());
 
		from = Buddy::JIDToLegacyName(message->getFrom(), m_user);
 

	
 
		Buddy *b;
 
		if (m_user && (b = m_user->getRosterManager()->getBuddy(from)) != NULL) {
spectrum/src/frontends/xmpp/XMPPRosterManager.cpp
Show inline comments
 
@@ -177,9 +177,10 @@ void XMPPRosterManager::doUpdateBuddy(Buddy *buddy) {
 

	
 
void XMPPRosterManager::handleBuddyRosterPushResponse(Swift::ErrorPayload::ref error, Swift::SetRosterRequest::ref request, const std::string &key) {
 
	LOG4CXX_INFO(logger, "handleBuddyRosterPushResponse called for buddy " << key);
 
	if (m_buddies[key] != NULL) {
 
		if (m_buddies[key]->isAvailable()) {
 
			std::vector<Swift::Presence::ref> &presences = m_buddies[key]->generatePresenceStanzas(255);
 
	Buddy *b = getBuddy(key);
 
	if (b) {
 
		if (b->isAvailable()) {
 
			std::vector<Swift::Presence::ref> &presences = b->generatePresenceStanzas(255);
 
			BOOST_FOREACH(Swift::Presence::ref &presence, presences) {
 
				m_component->getFrontend()->sendPresence(presence);
 
			}
 
@@ -215,8 +216,9 @@ void XMPPRosterManager::handleRemoteRosterResponse(boost::shared_ptr<Swift::Rost
 
	return;
 

	
 
	BOOST_FOREACH(const Swift::RosterItemPayload &item, payload->getItems()) {
 
		std::string legacyName = Buddy::JIDToLegacyName(item.getJID());
 
		if (m_buddies.find(legacyName) != m_buddies.end()) {
 
		std::string legacyName = Buddy::JIDToLegacyName(item.getJID(), m_user);
 
		Buddy *b = getBuddy(legacyName);
 
		if (b) {
 
			continue;
 
		}
 

	
spectrum/src/frontends/xmpp/blockresponder.cpp
Show inline comments
 
@@ -52,17 +52,17 @@ bool BlockResponder::handleSetRequest(const Swift::JID& from, const Swift::JID&
 
		return true;
 
	}
 

	
 
	Buddy *buddy = user->getRosterManager()->getBuddy(Buddy::JIDToLegacyName(to));
 
	Buddy *buddy = Buddy::JIDToBuddy(to, user);
 
	if (!buddy) {
 
		LOG4CXX_WARN(logger, from.toBare().toString() << ": Buddy " << Buddy::JIDToLegacyName(to) << " does not exist");
 
		LOG4CXX_WARN(logger, from.toBare().toString() << ": Buddy " << Buddy::JIDToLegacyName(to, user) << " does not exist");
 
		return true;
 
	}
 

	
 
	if (buddy->isBlocked()) {
 
		LOG4CXX_INFO(logger, from.toBare().toString() << ": Unblocking buddy " << Buddy::JIDToLegacyName(to));
 
		LOG4CXX_INFO(logger, from.toBare().toString() << ": Unblocking buddy " << buddy->getName());
 
	}
 
	else {
 
		LOG4CXX_INFO(logger, from.toBare().toString() << ": Blocking buddy " << Buddy::JIDToLegacyName(to));
 
		LOG4CXX_INFO(logger, from.toBare().toString() << ": Blocking buddy " << buddy->getName());
 
	}
 

	
 
	onBlockToggled(buddy);
spectrum/src/frontends/xmpp/rosterresponder.cpp
Show inline comments
 
@@ -82,7 +82,7 @@ bool RosterResponder::handleSetRequest(const Swift::JID& from, const Swift::JID&
 
		return true;
 
	}
 

	
 
	Buddy *buddy = user->getRosterManager()->getBuddy(Buddy::JIDToLegacyName(item.getJID()));
 
	Buddy *buddy = Buddy::JIDToBuddy(item.getJID(), user);
 
	if (buddy) {
 
		if (item.getSubscription() == Swift::RosterItemPayload::Remove) {
 
			LOG4CXX_INFO(logger, from.toBare().toString() << ": Removing buddy " << buddy->getName());
 
@@ -102,7 +102,7 @@ bool RosterResponder::handleSetRequest(const Swift::JID& from, const Swift::JID&
 
		BuddyInfo buddyInfo;
 
		buddyInfo.id = -1;
 
		buddyInfo.alias = item.getName();
 
		buddyInfo.legacyName = Buddy::JIDToLegacyName(item.getJID());
 
		buddyInfo.legacyName = Buddy::JIDToLegacyName(item.getJID(), user);
 
		buddyInfo.subscription = "both";
 
		buddyInfo.flags = Buddy::buddyFlagsFromJID(item.getJID());
 
		LOG4CXX_INFO(logger, from.toBare().toString() << ": Adding buddy " << buddyInfo.legacyName);
spectrum/src/frontends/xmpp/vcardresponder.cpp
Show inline comments
 
@@ -94,7 +94,7 @@ bool VCardResponder::handleGetRequest(const Swift::JID& from, const Swift::JID&
 
		to_ = user->getJID();
 
	}
 

	
 
	name = Buddy::JIDToLegacyName(to_);
 
	name = Buddy::JIDToLegacyName(to_, user);
 

	
 
	LOG4CXX_INFO(logger, from.toBare().toString() << ": Requested VCard of " << name);
 

	
tests/libtransport/basictest.cpp
Show inline comments
 
@@ -255,7 +255,7 @@ void BasicTest::add2Buddies() {
 

	
 
	std::vector<std::string> grp;
 
	grp.push_back("group1");
 
	LocalBuddy *buddy = new LocalBuddy(user->getRosterManager(), -1, "buddy1", "Buddy 1", grp, BUDDY_JID_ESCAPING);
 
	LocalBuddy *buddy = new LocalBuddy(user->getRosterManager(), -1, "BuddY1", "Buddy 1", grp, BUDDY_JID_ESCAPING);
 
	user->getRosterManager()->setBuddy(buddy);
 
	buddy->setStatus(Swift::StatusShow(Swift::StatusShow::Away), "status1");
 

	
tests/libtransport/conversationmanager.cpp
Show inline comments
 
@@ -16,6 +16,7 @@ class ConversationManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTe
 
	CPPUNIT_TEST_SUITE(ConversationManagerTest);
 
	CPPUNIT_TEST(conversationSize);
 
	CPPUNIT_TEST(handleNormalMessages);
 
	CPPUNIT_TEST(handleNormalMessagesInitiatedFromXMPP);
 
	CPPUNIT_TEST(handleNormalMessagesHeadline);
 
	CPPUNIT_TEST(handleGroupchatMessages);
 
	CPPUNIT_TEST(handleGroupchatMessagesBouncer);
 
@@ -206,6 +207,28 @@ class ConversationManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTe
 
		received.clear();
 
	}
 

	
 
	void handleNormalMessagesInitiatedFromXMPP() {
 
		User *user = userManager->getUser("user@localhost");
 

	
 
		boost::shared_ptr<Swift::Message> msg(new Swift::Message());
 
		msg->setFrom("user@localhost/resource");
 
		msg->setTo("buddy1@localhost/bot");
 
		msg->setBody("hi there<>!");
 
		injectMessage(msg);
 

	
 
		// Forward it
 
		loop->processEvents();
 
		
 
		CPPUNIT_ASSERT_EQUAL(0, (int) received.size());
 
		CPPUNIT_ASSERT(m_msg);
 
		CPPUNIT_ASSERT_EQUAL(std::string("hi there<>!"), m_msg->getBody());
 
		CPPUNIT_ASSERT_EQUAL(std::string("BuddY1"), m_conv->getLegacyName());
 
		
 
		TestingConversation *conv = (TestingConversation *) user->getConversationManager()->getConversation("BuddY1");
 
		CPPUNIT_ASSERT(conv);
 
		CPPUNIT_ASSERT_EQUAL(std::string("BuddY1"), conv->getLegacyName());
 
	}
 

	
 
	void handleNormalMessagesHeadline() {
 
		User *user = userManager->getUser("user@localhost");
 
		user->addUserSetting("send_headlines", "1");
tests/libtransport/rostermanager.cpp
Show inline comments
 
@@ -81,11 +81,12 @@ class RosterManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest {
 
		CPPUNIT_ASSERT(payload1);
 
		CPPUNIT_ASSERT_EQUAL(1, (int) payload1->getItems().size());
 
		Swift::RosterItemPayload item = payload1->getItems()[0];
 
		CPPUNIT_ASSERT_EQUAL(std::string("buddy1"), Buddy::JIDToLegacyName(item.getJID()));
 
		CPPUNIT_ASSERT_EQUAL(std::string("buddy1"), Buddy::JIDToLegacyName(item.getJID(), user));
 
		CPPUNIT_ASSERT_EQUAL(std::string(""), item.getName());
 
	}
 

	
 
	void setBuddy() {
 
		User *user = userManager->getUser("user@localhost");
 
		add2Buddies();
 
		CPPUNIT_ASSERT_EQUAL(4, (int) received.size());
 

	
 
@@ -93,7 +94,7 @@ class RosterManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest {
 
		CPPUNIT_ASSERT(payload1);
 
		CPPUNIT_ASSERT_EQUAL(1, (int) payload1->getItems().size());
 
		Swift::RosterItemPayload item = payload1->getItems()[0];
 
		CPPUNIT_ASSERT_EQUAL(std::string("buddy1"), Buddy::JIDToLegacyName(item.getJID()));
 
		CPPUNIT_ASSERT_EQUAL(std::string("BuddY1"), Buddy::JIDToLegacyName(item.getJID(), user));
 
		CPPUNIT_ASSERT_EQUAL(std::string("Buddy 1"), item.getName());
 
		CPPUNIT_ASSERT_EQUAL(std::string("localhost"), getStanza(received[0])->getFrom().toString());
 

	
 
@@ -101,7 +102,7 @@ class RosterManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest {
 
		CPPUNIT_ASSERT(payload2);
 
		CPPUNIT_ASSERT_EQUAL(1, (int) payload2->getItems().size());
 
		item = payload2->getItems()[0];
 
		CPPUNIT_ASSERT_EQUAL(std::string("buddy2"), Buddy::JIDToLegacyName(item.getJID()));
 
		CPPUNIT_ASSERT_EQUAL(std::string("buddy2"), Buddy::JIDToLegacyName(item.getJID(), user));
 
		CPPUNIT_ASSERT_EQUAL(std::string("Buddy 2"), item.getName());
 

	
 
		// send responses back
 
@@ -172,11 +173,11 @@ class RosterManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest {
 
	}
 

	
 
	void removeBuddy() {
 
		User *user = userManager->getUser("user@localhost");
 
		add2Buddies();
 
		CPPUNIT_ASSERT_EQUAL(4, (int) received.size());
 

	
 
		received.clear();
 
		User *user = userManager->getUser("user@localhost");
 
		user->getRosterManager()->removeBuddy("buddy1");
 
		CPPUNIT_ASSERT_EQUAL(1, (int) received.size());
 

	
 
@@ -184,7 +185,7 @@ class RosterManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest {
 
		CPPUNIT_ASSERT(payload1);
 
		CPPUNIT_ASSERT_EQUAL(1, (int) payload1->getItems().size());
 
		Swift::RosterItemPayload item = payload1->getItems()[0];
 
		CPPUNIT_ASSERT_EQUAL(std::string("buddy1"), Buddy::JIDToLegacyName(item.getJID()));
 
		CPPUNIT_ASSERT_EQUAL(std::string("buddy1"), Buddy::JIDToLegacyName(item.getJID(), user));
 
		CPPUNIT_ASSERT_EQUAL(Swift::RosterItemPayload::Remove, item.getSubscription());
 
	}
 

	
 
@@ -203,10 +204,11 @@ class RosterManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest {
 
		CPPUNIT_ASSERT_EQUAL(1, (int) received.size());
 
		CPPUNIT_ASSERT(dynamic_cast<Swift::Presence *>(getStanza(received[0])));
 
		CPPUNIT_ASSERT_EQUAL(Swift::Presence::Subscribed, dynamic_cast<Swift::Presence *>(getStanza(received[0]))->getType());
 
		CPPUNIT_ASSERT_EQUAL(std::string("buddy1"), m_buddy);
 
		CPPUNIT_ASSERT_EQUAL(std::string("BuddY1"), m_buddy);
 
	}
 

	
 
	void subscribeNewBuddy() {
 
		User *user = userManager->getUser("user@localhost");
 
		Swift::Presence::ref response = Swift::Presence::create();
 
		response->setTo("buddy1@localhost");
 
		response->setFrom("user@localhost/resource");
 
@@ -220,7 +222,7 @@ class RosterManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest {
 
		Swift::RosterPayload::ref payload1 = getStanza(received[0])->getPayload<Swift::RosterPayload>();
 
		CPPUNIT_ASSERT_EQUAL(1, (int) payload1->getItems().size());
 
		Swift::RosterItemPayload item = payload1->getItems()[0];
 
		CPPUNIT_ASSERT_EQUAL(std::string("buddy1"), Buddy::JIDToLegacyName(item.getJID()));
 
		CPPUNIT_ASSERT_EQUAL(std::string("buddy1"), Buddy::JIDToLegacyName(item.getJID(), user));
 

	
 
		CPPUNIT_ASSERT(dynamic_cast<Swift::Presence *>(getStanza(received[1])));
 
		CPPUNIT_ASSERT_EQUAL(Swift::Presence::Subscribed, dynamic_cast<Swift::Presence *>(getStanza(received[1]))->getType());
 
@@ -229,6 +231,7 @@ class RosterManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest {
 
	}
 

	
 
	void unsubscribeExistingBuddy() {
 
		User *user = userManager->getUser("user@localhost");
 
		add2Buddies();
 
		received.clear();
 

	
 
@@ -245,13 +248,13 @@ class RosterManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest {
 
		Swift::RosterPayload::ref payload1 = getStanza(received[0])->getPayload<Swift::RosterPayload>();
 
		CPPUNIT_ASSERT_EQUAL(1, (int) payload1->getItems().size());
 
		Swift::RosterItemPayload item = payload1->getItems()[0];
 
		CPPUNIT_ASSERT_EQUAL(std::string("buddy1"), Buddy::JIDToLegacyName(item.getJID()));
 
		CPPUNIT_ASSERT_EQUAL(std::string("buddy1"), Buddy::JIDToLegacyName(item.getJID(), user));
 

	
 

	
 
		CPPUNIT_ASSERT(dynamic_cast<Swift::Presence *>(getStanza(received[1])));
 
		CPPUNIT_ASSERT_EQUAL(Swift::Presence::Unsubscribed, dynamic_cast<Swift::Presence *>(getStanza(received[1]))->getType());
 

	
 
		CPPUNIT_ASSERT_EQUAL(std::string("buddy1"), m_buddy);
 
		CPPUNIT_ASSERT_EQUAL(std::string("BuddY1"), m_buddy);
 
	}
 

	
 
	void unsubscribeNewBuddy() {
0 comments (0 inline, 0 general)