Changeset - ddee629fe419
[Not reviewed]
0 3 0
Jan Kaluza - 10 years ago 2016-02-04 08:09:37
jkaluza@redhat.com
Libtransport: Fix crash in avatar handling code when storage backend is not set. Add extended_test for avatars using libpurple backend
3 files changed with 10 insertions and 3 deletions:
0 comments (0 inline, 0 general)
libtransport/User.cpp
Show inline comments
 
@@ -53,24 +53,25 @@ User::User(const Swift::JID &jid, UserInfo &userInfo, Component *component, User
 

	
 
	m_cacheMessages = false;
 
	m_component = component;
 
	m_presenceOracle = component->m_presenceOracle;
 
	m_userManager = userManager;
 
	m_userInfo = userInfo;
 
	m_connected = false;
 
	m_readyForConnect = false;
 
	m_ignoreDisconnect = false;
 
	m_resources = 0;
 
	m_reconnectCounter = 0;
 
	m_reconnectLimit = 3;
 
	m_storageBackend = NULL;
 

	
 
	m_reconnectTimer = m_component->getNetworkFactories()->getTimerFactory()->createTimer(5000);
 
	m_reconnectTimer->onTick.connect(boost::bind(&User::onConnectingTimeout, this)); 
 

	
 
	m_rosterManager = component->getFrontend()->createRosterManager(this, m_component);
 
	m_conversationManager = new ConversationManager(this, m_component);
 

	
 
	LOG4CXX_INFO(logger, m_jid.toString() << ": Created");
 
	updateLastActivity();
 
}
 

	
 
User::~User(){
 
@@ -164,35 +165,37 @@ void User::leaveRoom(const std::string &room) {
 
	}
 

	
 
	Conversation *conv = m_conversationManager->getConversation(room);
 
	if (conv) {
 
		m_conversationManager->removeConversation(conv);
 
		delete conv;
 
	}
 
}
 

	
 
void User::handlePresence(Swift::Presence::ref presence, bool forceJoin) {
 
	LOG4CXX_INFO(logger, "PRESENCE " << presence->getFrom().toString() << " " << presence->getTo().toString());
 

	
 
	if (m_storageBackend) {
 
	boost::shared_ptr<Swift::VCardUpdate> vcardUpdate = presence->getPayload<Swift::VCardUpdate>();
 
	if (vcardUpdate) {
 
		std::string value = "";
 
		int type = (int) TYPE_STRING;
 
		if (m_storageBackend) {
 
			m_storageBackend->getUserSetting(m_userInfo.id, "photohash", type, value);
 
		}
 
		if (value != vcardUpdate->getPhotoHash()) {
 
			LOG4CXX_INFO(logger, m_jid.toString() << ": Requesting VCard")
 
			if (m_storageBackend) {
 
				m_storageBackend->updateUserSetting(m_userInfo.id, "photohash", vcardUpdate->getPhotoHash());
 
				requestVCard();
 
			}
 
			requestVCard();
 
		}
 
	}
 

	
 
	if (!m_connected) {
 
		// we are not connected to legacy network, so we should do it when disco#info arrive :)
 
		if (m_readyForConnect == false) {
 
			boost::shared_ptr<Swift::CapsInfo> capsInfo = presence->getPayload<Swift::CapsInfo>();
 
			if (capsInfo && capsInfo->getHash() == "sha-1") {
 
				if (m_component->getFrontend()->sendCapabilitiesRequest(presence->getFrom()) != Swift::DiscoInfo::ref()) {
 
					LOG4CXX_INFO(logger, m_jid.toString() << ": Ready to be connected to legacy network");
 
					m_readyForConnect = true;
 
					onReadyToConnect();
spectrum/src/frontends/xmpp/vcardresponder.cpp
Show inline comments
 
@@ -98,25 +98,25 @@ bool VCardResponder::handleGetRequest(const Swift::JID& from, const Swift::JID&
 

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

	
 
	m_queries[m_id].from = from;
 
	m_queries[m_id].to = to;
 
	m_queries[m_id].id = id; 
 
	m_queries[m_id].received = time(NULL);
 
	onVCardRequired(user, name, m_id++);
 
	return true;
 
}
 

	
 
bool VCardResponder::handleSetRequest(const Swift::JID& from, const Swift::JID& to, const std::string& id, boost::shared_ptr<Swift::VCard> payload) {
 
	if (!to.getNode().empty()) {
 
	if (!to.getNode().empty() && from.toBare().toString() != to.toBare().toString()) {
 
		LOG4CXX_WARN(logger, from.toBare().toString() << ": Tried to set VCard of somebody else");
 
		return false;
 
	}
 

	
 
	User *user = m_userManager->getUser(from.toBare().toString());
 
	if (!user) {
 
		LOG4CXX_WARN(logger, from.toBare().toString() << ": User is not logged in");
 
		return false;
 
	}
 

	
 
	LOG4CXX_INFO(logger, from.toBare().toString() << ": Setting VCard");
 
	onVCardUpdated(user, payload);
tests/start.py
Show inline comments
 
@@ -37,41 +37,45 @@ class BaseTest:
 
	def skip_test(self, test):
 
		return False
 

	
 
	def start(self, Client, Responder):
 
		os.system("../../spectrum/src/spectrum2 -n ./" + self.config + " > spectrum2.log &")
 
		self.pre_test()
 
		time.sleep(1)
 

	
 
		responder = Responder(self.responder_jid, self.responder_password, self.responder_room, self.responder_roompassword, self.responder_nick)
 
		responder.register_plugin('xep_0030')  # Service Discovery
 
		responder.register_plugin('xep_0045')  # Multi-User Chat
 
		responder.register_plugin('xep_0199')  # XMPP Ping
 
		responder.register_plugin('xep_0153')
 
		responder.register_plugin('xep_0054')
 
		responder['feature_mechanisms'].unencrypted_plain = True
 

	
 
		to = ("127.0.0.1", 5223)
 
		if self.responder_password != "password":
 
			to = ()
 
		if responder.connect(to):
 
			responder.process(block=False)
 
		else:
 
			print "connect() failed"
 
			os.system("killall spectrum2")
 
			self.post_test()
 
			sys.exit(1)
 

	
 
		client = Client(self.client_jid, self.client_password, self.client_room, self.client_nick)
 
		client.register_plugin('xep_0030')  # Service Discovery
 
		client.register_plugin('xep_0045')  # Multi-User Chat
 
		client.register_plugin('xep_0199')  # XMPP Ping
 
		client.register_plugin('xep_0153')
 
		client.register_plugin('xep_0054')
 
		client['feature_mechanisms'].unencrypted_plain = True
 

	
 
		time.sleep(2)
 

	
 
		to = ("127.0.0.1", 5223)
 
		if self.responder_password != "password":
 
			to = ("127.0.0.1", 5222)
 
		if client.connect(to):
 
			client.process(block=False)
 
		else:
 
			print "connect() failed"
 
			os.system("killall spectrum2")
0 comments (0 inline, 0 general)