Changeset - 39c8618da638
backends/libpurple/main.cpp
Show inline comments
 
@@ -1599,7 +1599,17 @@ static void RoomlistProgress(PurpleRoomlist *list, gboolean in_progress)
 
			PurpleRoomlistRoom *room = (PurpleRoomlistRoom *)rooms->data;	
 
			m_rooms.push_back(room->name);
 
		}
 
		np->handleRoomList("", m_rooms, m_rooms);
 

	
 
		std::string user = "";
 
		if (list->account) {
 
			user = np->m_accounts[list->account];
 
		}
 

	
 
		LOG4CXX_INFO(logger, "RoomList is fetched for user " << user);
 
		np->handleRoomList(user, m_rooms, m_rooms);
 
	}
 
	else {
 
		LOG4CXX_INFO(logger, "RoomList is still in progress");
 
	}
 
}
 

	
include/transport/User.h
Show inline comments
 
@@ -76,6 +76,8 @@ class User {
 
		UserManager *getUserManager() { return m_userManager; }
 
		
 
		virtual void disconnectUser(const std::string &error, Swift::SpectrumErrorPayload::Error e) = 0;
 
		virtual void clearRoomList() {}
 
		virtual void addRoomToRoomList(const std::string &handle, const std::string &name) {}
 
		virtual void requestVCard() {}
 

	
 
		void setData(void *data) { m_data = data; }
include/transport/protocol.proto
Show inline comments
 
@@ -89,6 +89,7 @@ message Room {
 
message RoomList {
 
	repeated string room = 1;
 
	repeated string name = 2;
 
	optional string user = 3;
 
}
 

	
 
enum ParticipantFlag {
libtransport/NetworkPluginServer.cpp
Show inline comments
 
@@ -994,11 +994,25 @@ void NetworkPluginServer::handleRoomListPayload(const std::string &data) {
 
		return;
 
	}
 

	
 
	if (!payload.user().empty()) {
 
		User *user = m_userManager->getUser(payload.user());
 
		if (!user) {
 
			LOG4CXX_ERROR(logger, "Room list payload received for unknown user " << payload.user());
 
			return;
 
		}
 

	
 
		user->clearRoomList();
 
		for (int i = 0; i < payload.room_size() && i < payload.name_size(); i++) {
 
			user->addRoomToRoomList(Swift::JID::getEscapedNode(payload.room(i)) + "@" + m_component->getJID().toString(), payload.name(i));
 
		}
 
	}
 
	else {
 
		m_component->getFrontend()->clearRoomList();
 
		for (int i = 0; i < payload.room_size() && i < payload.name_size(); i++) {
 
			m_component->getFrontend()->addRoomToRoomList(Swift::JID::getEscapedNode(payload.room(i)) + "@" + m_component->getJID().toString(), payload.name(i));
 
		}
 
	}
 
}
 
#if HAVE_SWIFTEN_3
 
void NetworkPluginServer::handleElement(boost::shared_ptr<Swift::ToplevelElement> element) {
 
#else
plugin/cpp/networkplugin.cpp
Show inline comments
 
@@ -376,6 +376,8 @@ void NetworkPlugin::handleRoomList(const std::string &user, const std::list<std:
 
		d.add_name(*it);
 
	}
 

	
 
	d.set_user(user);
 

	
 
	std::string message;
 
	d.SerializeToString(&message);
 

	
spectrum/src/frontends/xmpp/XMPPFrontend.cpp
Show inline comments
 
@@ -31,7 +31,6 @@
 
#include "transport/Logging.h"
 
#include "transport/Config.h"
 
#include "transport/Transport.h"
 
#include "discoitemsresponder.h"
 
#include "storageparser.h"
 
#ifdef _WIN32
 
#include <Swiften/TLS/CAPICertificate.h>
 
@@ -63,6 +62,7 @@
 
#include "Swiften/Parser/GenericPayloadParserFactory.h"
 
#include "Swiften/Queries/IQRouter.h"
 
#include "Swiften/Elements/RosterPayload.h"
 
#include "discoitemsresponder.h"
 
#include "Swiften/Elements/InBandRegistrationPayload.h"
 

	
 
using namespace Swift;
 
@@ -81,6 +81,7 @@ void XMPPFrontend::init(Component *transport, Swift::EventLoop *loop, Swift::Net
 
	m_server = NULL;
 
	m_rawXML = false;
 
	m_config = transport->getConfig();
 
	m_userManager = NULL;
 
	m_jid = Swift::JID(CONFIG_STRING(m_config, "service.jid"));
 

	
 
	m_config->onBackendConfigUpdated.connect(boost::bind(&XMPPFrontend::handleBackendConfigChanged, this));
 
@@ -173,9 +174,6 @@ void XMPPFrontend::init(Component *transport, Swift::EventLoop *loop, Swift::Net
 

	
 
	m_stanzaChannel->onPresenceReceived.connect(bind(&XMPPFrontend::handleGeneralPresence, this, _1));
 
	m_stanzaChannel->onMessageReceived.connect(bind(&XMPPFrontend::handleMessage, this, _1));
 

	
 
	m_discoItemsResponder = new DiscoItemsResponder(transport);
 
	m_discoItemsResponder->start();
 
}
 

	
 
XMPPFrontend::~XMPPFrontend() {
 
@@ -200,16 +198,16 @@ void XMPPFrontend::handleMessage(boost::shared_ptr<Swift::Message> message) {
 

	
 

	
 
void XMPPFrontend::clearRoomList() {
 
	m_discoItemsResponder->clearRooms();
 
	static_cast<XMPPUserManager *>(m_userManager)->getDiscoItemsResponder()->clearRooms();
 
}
 

	
 
void XMPPFrontend::addRoomToRoomList(const std::string &handle, const std::string &name) {
 
	m_discoItemsResponder->addRoom(handle, name);
 
	static_cast<XMPPUserManager *>(m_userManager)->getDiscoItemsResponder()->addRoom(handle, name);
 
}
 

	
 
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())));
 
		presence->addPayload(boost::shared_ptr<Swift::Payload>(new Swift::CapsInfo(static_cast<XMPPUserManager *>(m_userManager)->getDiscoItemsResponder()->getBuddyCapsInfo())));
 
	}
 

	
 
	m_stanzaChannel->sendPresence(presence);
 
@@ -277,7 +275,8 @@ User *XMPPFrontend::createUser(const Swift::JID &jid, UserInfo &userInfo, Compon
 
}
 

	
 
UserManager *XMPPFrontend::createUserManager(Component *component, UserRegistry *userRegistry, StorageBackend *storageBackend) {
 
	return new XMPPUserManager(component, userRegistry, storageBackend);
 
	m_userManager = new XMPPUserManager(component, userRegistry, storageBackend);
 
	return m_userManager;
 
}
 

	
 
bool XMPPFrontend::handleIQ(boost::shared_ptr<Swift::IQ> iq) {
spectrum/src/frontends/xmpp/XMPPFrontend.h
Show inline comments
 
@@ -47,7 +47,6 @@ namespace Transport {
 
	class UserRegistry;
 
	class Frontend;
 
	class Config;
 
	class DiscoItemsResponder;
 
	class VCardResponder;
 

	
 
	class XMPPFrontend : public Frontend, Swift::IQHandler {
 
@@ -95,10 +94,6 @@ namespace Transport {
 
				return m_rawXML;
 
			}
 

	
 
			DiscoItemsResponder *getDiscoItemsResponder() {
 
				return m_discoItemsResponder;
 
			}
 

	
 
		private:
 
			void handleConnected();
 
			void handleConnectionError(const Swift::ComponentError &error);
 
@@ -121,13 +116,13 @@ namespace Transport {
 
			Swift::CapsMemoryStorage *m_capsMemoryStorage;
 
			Swift::StanzaChannel *m_stanzaChannel;
 
			Swift::IQRouter *m_iqRouter;
 
			DiscoItemsResponder *m_discoItemsResponder;
 
			VCardResponder *m_vcardResponder;
 
			
 
			Config* m_config;
 
			Swift::JID m_jid;
 
			bool m_rawXML;
 
			Component *m_transport;
 
			UserManager *m_userManager;
 

	
 
		friend class XMPPUser;
 
		friend class UserRegistration;
spectrum/src/frontends/xmpp/XMPPUser.cpp
Show inline comments
 
@@ -45,6 +45,7 @@ XMPPUser::XMPPUser(const Swift::JID &jid, UserInfo &userInfo, Component *compone
 
	m_component = component;
 
	m_userManager = userManager;
 
	m_userInfo = userInfo;
 
	m_rooms = boost::shared_ptr<Swift::DiscoItems>(new Swift::DiscoItems());
 
}
 

	
 
XMPPUser::~XMPPUser(){
 
@@ -98,5 +99,13 @@ void XMPPUser::requestVCard() {
 
	m_vcardRequests.push_back(request);
 
}
 

	
 
void XMPPUser::clearRoomList() {
 
	m_rooms = boost::shared_ptr<Swift::DiscoItems>(new Swift::DiscoItems());
 
}
 

	
 
void XMPPUser::addRoomToRoomList(const std::string &handle, const std::string &name) {
 
	m_rooms->addItem(Swift::DiscoItems::Item(name, handle));
 
}
 

	
 

	
 
}
spectrum/src/frontends/xmpp/XMPPUser.h
Show inline comments
 
@@ -30,6 +30,7 @@
 
#include "Swiften/Network/Timer.h"
 
#include "Swiften/Network/Connection.h"
 
#include "Swiften/VCards/GetVCardRequest.h"
 
#include "Swiften/Elements/DiscoItems.h"
 

	
 
namespace Transport {
 

	
 
@@ -57,6 +58,14 @@ class XMPPUser : public User {
 

	
 
		void requestVCard();
 

	
 
		void clearRoomList();
 

	
 
		void addRoomToRoomList(const std::string &handle, const std::string &name);
 

	
 
		boost::shared_ptr<Swift::DiscoItems> getRoomList() {
 
			return m_rooms;
 
		}
 

	
 
	private:
 
		void onConnectingTimeout();
 
		void handleVCardReceived(boost::shared_ptr<Swift::VCard> vcard, Swift::ErrorPayload::ref error, Swift::GetVCardRequest::ref request);
 
@@ -66,6 +75,7 @@ class XMPPUser : public User {
 
		UserManager *m_userManager;
 
		UserInfo m_userInfo;
 
		std::list <Swift::GetVCardRequest::ref> m_vcardRequests;
 
		boost::shared_ptr<Swift::DiscoItems> m_rooms;
 
};
 

	
 
}
spectrum/src/frontends/xmpp/XMPPUserManager.cpp
Show inline comments
 
@@ -32,6 +32,7 @@
 
#include "adhocmanager.h"
 
#include "settingsadhoccommand.h"
 
#include "RosterResponder.h"
 
#include "discoitemsresponder.h"
 

	
 
#include "Swiften/Server/ServerStanzaChannel.h"
 
#include "Swiften/Elements/StreamError.h"
 
@@ -82,7 +83,10 @@ XMPPUserManager::XMPPUserManager(Component *component, UserRegistry *userRegistr
 
	m_rosterResponder = new RosterResponder(frontend->getIQRouter(), this);
 
	m_rosterResponder->start();
 

	
 
	m_adHocManager = new AdHocManager(component, frontend->getDiscoItemsResponder(), this, storageBackend);
 
	m_discoItemsResponder = new DiscoItemsResponder(component, this);
 
	m_discoItemsResponder->start();
 

	
 
	m_adHocManager = new AdHocManager(component, m_discoItemsResponder, this, storageBackend);
 
	m_adHocManager->start();
 

	
 
	SettingsAdHocCommandFactory *m_settings = new SettingsAdHocCommandFactory();
 
@@ -111,6 +115,9 @@ XMPPUserManager::~XMPPUserManager() {
 

	
 
	m_rosterResponder->stop();
 
	delete m_rosterResponder;
 

	
 
	m_discoItemsResponder->stop();
 
	delete m_discoItemsResponder;
 
}
 

	
 
void XMPPUserManager::sendVCard(unsigned int id, Swift::VCard::ref vcard) {
spectrum/src/frontends/xmpp/XMPPUserManager.h
Show inline comments
 
@@ -40,6 +40,7 @@ class GatewayResponder;
 
class AdHocManager;
 
class SettingsAdHocCommandFactory;
 
class RosterResponder;
 
class DiscoItemsResponder;
 

	
 
class XMPPUserManager : public UserManager {
 
	public:
 
@@ -51,6 +52,10 @@ class XMPPUserManager : public UserManager {
 

	
 
		UserRegistration *getUserRegistration();
 

	
 
		DiscoItemsResponder *getDiscoItemsResponder() {
 
			return m_discoItemsResponder;
 
		}
 

	
 
	private:
 
		void handleVCardRequired(User *, const std::string &name, unsigned int id);
 
		void handleVCardUpdated(User *, boost::shared_ptr<Swift::VCard> vcard);
 
@@ -63,6 +68,7 @@ class XMPPUserManager : public UserManager {
 
		AdHocManager *m_adHocManager;
 
		SettingsAdHocCommandFactory *m_settings;
 
		RosterResponder *m_rosterResponder;
 
		DiscoItemsResponder *m_discoItemsResponder;
 
};
 

	
 
}
spectrum/src/frontends/xmpp/discoinforesponder.cpp
Show inline comments
 
@@ -30,6 +30,8 @@
 
#include "transport/Logging.h"
 
#include "Swiften/Disco/CapsInfoGenerator.h"
 
#include "XMPPFrontend.h"
 
#include "transport/UserManager.h"
 
#include "XMPPUser.h"
 

	
 
using namespace Swift;
 
using namespace boost;
 
@@ -38,7 +40,7 @@ DEFINE_LOGGER(logger, "DiscoInfoResponder");
 

	
 
namespace Transport {
 

	
 
DiscoInfoResponder::DiscoInfoResponder(Swift::IQRouter *router, Config *config) : Swift::GetResponder<DiscoInfo>(router) {
 
DiscoInfoResponder::DiscoInfoResponder(Swift::IQRouter *router, Config *config, UserManager *userManager) : Swift::GetResponder<DiscoInfo>(router) {
 
	m_config = config;
 
	m_config->onBackendConfigUpdated.connect(boost::bind(&DiscoInfoResponder::updateFeatures, this));
 
	m_buddyInfo = NULL;
 
@@ -50,6 +52,7 @@ DiscoInfoResponder::DiscoInfoResponder(Swift::IQRouter *router, Config *config)
 
#endif
 

	
 
	updateFeatures();
 
	m_userManager = userManager;
 
}
 

	
 
DiscoInfoResponder::~DiscoInfoResponder() {
 
@@ -148,21 +151,39 @@ bool DiscoInfoResponder::handleGetRequest(const Swift::JID& from, const Swift::J
 
			res->setNode(info->getNode());
 
			sendResponse(from, id, res);
 
		}
 
		return true;
 
	}
 

	
 
	// disco#info for room
 
	else if (m_rooms.find(to.toBare().toString()) != m_rooms.end()) {
 
	if (m_rooms.find(to.toBare().toString()) != m_rooms.end()) {
 
		boost::shared_ptr<DiscoInfo> res(new DiscoInfo());
 
		res->addIdentity(DiscoInfo::Identity(m_rooms[to.toBare().toString()], "conference", "text"));
 
		res->addFeature("http://jabber.org/protocol/muc");
 
		res->setNode(info->getNode());
 
		sendResponse(from, to, id, res);
 
		return true;
 
	}
 

	
 
	// disco#info for per-user rooms (like Skype/Facebook groupchats)
 
	XMPPUser *user = static_cast<XMPPUser *>(m_userManager->getUser(from.toBare().toString()));
 
	if (user) {
 
		BOOST_FOREACH(const DiscoItems::Item &item, user->getRoomList()->getItems()) {
 
			LOG4CXX_INFO(logger, "XXX " << item.getNode() << " " << to.toBare().toString());
 
			if (item.getJID().toString() == to.toBare().toString()) {
 
				boost::shared_ptr<DiscoInfo> res(new DiscoInfo());
 
				res->addIdentity(DiscoInfo::Identity(item.getName(), "conference", "text"));
 
				res->addFeature("http://jabber.org/protocol/muc");
 
				res->setNode(info->getNode());
 
				sendResponse(from, to, id, res);
 
				return true;
 
			}
 
		}
 
	}
 

	
 
	// disco#info for buddy
 
	else {
 
	boost::shared_ptr<DiscoInfo> res(new DiscoInfo(*m_buddyInfo));
 
	res->setNode(info->getNode());
 
	sendResponse(from, to, id, res);
 
	}
 
	return true;
 
}
 

	
spectrum/src/frontends/xmpp/discoinforesponder.h
Show inline comments
 
@@ -37,10 +37,11 @@
 
namespace Transport {
 

	
 
class Config;
 
class UserManager;
 

	
 
class DiscoInfoResponder : public Swift::GetResponder<Swift::DiscoInfo> {
 
	public:
 
		DiscoInfoResponder(Swift::IQRouter *router, Config *config);
 
		DiscoInfoResponder(Swift::IQRouter *router, Config *config, UserManager *userManager);
 
		~DiscoInfoResponder();
 

	
 
		void setTransportFeatures(std::list<std::string> &features);
 
@@ -70,6 +71,7 @@ class DiscoInfoResponder : public Swift::GetResponder<Swift::DiscoInfo> {
 
#if HAVE_SWIFTEN_3
 
		boost::shared_ptr<Swift::CryptoProvider> crypto;
 
#endif
 
		UserManager *m_userManager;
 
};
 

	
 
}
spectrum/src/frontends/xmpp/discoitemsresponder.cpp
Show inline comments
 
@@ -29,6 +29,8 @@
 
#include "discoinforesponder.h"
 
#include "XMPPFrontend.h"
 
#include "transport/Frontend.h"
 
#include "transport/UserManager.h"
 
#include "XMPPUser.h"
 

	
 
using namespace Swift;
 
using namespace boost;
 
@@ -37,14 +39,16 @@ namespace Transport {
 

	
 
DEFINE_LOGGER(logger, "DiscoItemsResponder");
 

	
 
DiscoItemsResponder::DiscoItemsResponder(Component *component) : Swift::GetResponder<DiscoItems>(static_cast<XMPPFrontend *>(component->getFrontend())->getIQRouter()) {
 
DiscoItemsResponder::DiscoItemsResponder(Component *component, UserManager *userManager) : Swift::GetResponder<DiscoItems>(static_cast<XMPPFrontend *>(component->getFrontend())->getIQRouter()) {
 
	m_component = component;
 
	m_commands = boost::shared_ptr<DiscoItems>(new DiscoItems());
 
	m_commands->setNode("http://jabber.org/protocol/commands");
 

	
 
	m_rooms = boost::shared_ptr<DiscoItems>(new DiscoItems());
 
	m_discoInfoResponder = new DiscoInfoResponder(static_cast<XMPPFrontend *>(component->getFrontend())->getIQRouter(), component->getConfig());
 
	m_discoInfoResponder = new DiscoInfoResponder(static_cast<XMPPFrontend *>(component->getFrontend())->getIQRouter(), component->getConfig(), userManager);
 
	m_discoInfoResponder->start();
 

	
 
	m_userManager = userManager;
 
}
 

	
 
DiscoItemsResponder::~DiscoItemsResponder() {
 
@@ -80,7 +84,21 @@ bool DiscoItemsResponder::handleGetRequest(const Swift::JID& from, const Swift::
 
		sendResponse(from, id, m_commands);
 
	}
 
	else if (to.getNode().empty()) {
 
		XMPPUser *user = static_cast<XMPPUser *>(m_userManager->getUser(from.toBare().toString()));
 
		if (!user) {
 
			sendResponse(from, id, m_rooms);
 
			return true;
 
		}
 

	
 
		boost::shared_ptr<DiscoItems> rooms = boost::shared_ptr<DiscoItems>(new DiscoItems());
 
		BOOST_FOREACH(const DiscoItems::Item &item, m_rooms->getItems()) {
 
			rooms->addItem(item);
 
		}
 
		BOOST_FOREACH(const DiscoItems::Item &item, user->getRoomList()->getItems()) {
 
			rooms->addItem(item);
 
		}
 

	
 
		sendResponse(from, id, rooms);
 
	}
 
	else {
 
		sendResponse(from, id, boost::shared_ptr<DiscoItems>(new DiscoItems()));
spectrum/src/frontends/xmpp/discoitemsresponder.h
Show inline comments
 
@@ -29,10 +29,11 @@ namespace Transport {
 

	
 
class Component;
 
class DiscoInfoResponder;
 
class UserManager;
 

	
 
class DiscoItemsResponder : public Swift::GetResponder<Swift::DiscoItems> {
 
	public:
 
		DiscoItemsResponder(Component *component);
 
		DiscoItemsResponder(Component *component, UserManager *userManager);
 
		~DiscoItemsResponder();
 

	
 
		Swift::CapsInfo &getBuddyCapsInfo();
 
@@ -52,6 +53,7 @@ class DiscoItemsResponder : public Swift::GetResponder<Swift::DiscoItems> {
 
		boost::shared_ptr<Swift::DiscoItems> m_commands;
 
		boost::shared_ptr<Swift::DiscoItems> m_rooms;
 
		DiscoInfoResponder *m_discoInfoResponder;
 
		UserManager *m_userManager;
 
};
 

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

	
 
	userManager = frontend->createUserManager(component, userRegistry, storage);
 

	
 
	itemsResponder = frontend->getDiscoItemsResponder();
 
	itemsResponder = static_cast<XMPPUserManager *>(userManager)->getDiscoItemsResponder();
 

	
 
	payloadSerializers = new Swift::FullPayloadSerializerCollection();
 
	payloadParserFactories = new Swift::FullPayloadParserFactoryCollection();
tests/libtransport/discoitemsresponder.cpp
Show inline comments
 
@@ -15,7 +15,9 @@ using namespace Transport;
 
class DiscoItemsResponderTest : public CPPUNIT_NS :: TestFixture, public BasicTest {
 
	CPPUNIT_TEST_SUITE(DiscoItemsResponderTest);
 
	CPPUNIT_TEST(roomList);
 
	CPPUNIT_TEST(roomListUser);
 
	CPPUNIT_TEST(roomInfo);
 
	CPPUNIT_TEST(roomInfoUser);
 
	CPPUNIT_TEST(roomListEscaping);
 
	CPPUNIT_TEST(roomInfoEscaping);
 
	CPPUNIT_TEST(clearRooms);
 
@@ -50,6 +52,50 @@ class DiscoItemsResponderTest : public CPPUNIT_NS :: TestFixture, public BasicTe
 
		CPPUNIT_ASSERT_EQUAL(std::string("#room"), getStanza(received[0])->getPayload<Swift::DiscoItems>()->getItems()[0].getName());
 
	}
 

	
 
	void roomListUser() {
 
		connectUser();
 
		User *user = userManager->getUser("user@localhost");
 
		user->addRoomToRoomList("#room2@localhost", "#room2");
 
		itemsResponder->addRoom("#room@localhost", "#room");
 

	
 
		boost::shared_ptr<Swift::DiscoItems> payload(new Swift::DiscoItems());
 
		boost::shared_ptr<Swift::IQ> iq = Swift::IQ::createRequest(Swift::IQ::Get, Swift::JID("localhost"), "id", payload);
 
		iq->setFrom("user@localhost");
 
		injectIQ(iq);
 
		loop->processEvents();
 

	
 
		CPPUNIT_ASSERT_EQUAL(1, (int) received.size());
 
		CPPUNIT_ASSERT(dynamic_cast<Swift::IQ *>(getStanza(received[0])));
 
		CPPUNIT_ASSERT_EQUAL(Swift::IQ::Result, dynamic_cast<Swift::IQ *>(getStanza(received[0]))->getType());
 
		CPPUNIT_ASSERT(getStanza(received[0])->getPayload<Swift::DiscoItems>());
 
		CPPUNIT_ASSERT_EQUAL(std::string("#room@localhost"), getStanza(received[0])->getPayload<Swift::DiscoItems>()->getItems()[0].getJID().toString());
 
		CPPUNIT_ASSERT_EQUAL(std::string("#room"), getStanza(received[0])->getPayload<Swift::DiscoItems>()->getItems()[0].getName());
 
		CPPUNIT_ASSERT_EQUAL(std::string("#room2@localhost"), getStanza(received[0])->getPayload<Swift::DiscoItems>()->getItems()[1].getJID().toString());
 
		CPPUNIT_ASSERT_EQUAL(std::string("#room2"), getStanza(received[0])->getPayload<Swift::DiscoItems>()->getItems()[1].getName());
 
	}
 

	
 
	void roomInfoUser() {
 
		connectUser();
 
		User *user = userManager->getUser("user@localhost");
 
		user->addRoomToRoomList("#room2@localhost", "#room2");
 
		itemsResponder->addRoom("#room@localhost", "#room");
 

	
 
		boost::shared_ptr<Swift::DiscoInfo> payload(new Swift::DiscoInfo());
 
		boost::shared_ptr<Swift::IQ> iq = Swift::IQ::createRequest(Swift::IQ::Get, Swift::JID("localhost"), "id", payload);
 
		iq->setFrom("user@localhost");
 
		iq->setTo("#room2@localhost");
 
		injectIQ(iq);
 
		loop->processEvents();
 

	
 
		CPPUNIT_ASSERT_EQUAL(1, (int) received.size());
 
		CPPUNIT_ASSERT(dynamic_cast<Swift::IQ *>(getStanza(received[0])));
 
		CPPUNIT_ASSERT_EQUAL(Swift::IQ::Result, dynamic_cast<Swift::IQ *>(getStanza(received[0]))->getType());
 
		CPPUNIT_ASSERT(getStanza(received[0])->getPayload<Swift::DiscoInfo>());
 
		CPPUNIT_ASSERT_EQUAL(std::string("#room2"), getStanza(received[0])->getPayload<Swift::DiscoInfo>()->getIdentities()[0].getName());
 
		CPPUNIT_ASSERT_EQUAL(std::string("conference"), getStanza(received[0])->getPayload<Swift::DiscoInfo>()->getIdentities()[0].getCategory());
 
		CPPUNIT_ASSERT_EQUAL(std::string("text"), getStanza(received[0])->getPayload<Swift::DiscoInfo>()->getIdentities()[0].getType());
 
	}
 

	
 
	void roomInfo() {
 
		itemsResponder->addRoom("#room@localhost", "#room");
 

	
0 comments (0 inline, 0 general)