diff --git a/libtransport/NetworkPluginServer.cpp b/libtransport/NetworkPluginServer.cpp index 8a5242f6f5d2506fd195a398f2d845645f5e6351..786675056bbb7db9867b384c6bb0a96bbe741123 100644 --- a/libtransport/NetworkPluginServer.cpp +++ b/libtransport/NetworkPluginServer.cpp @@ -994,9 +994,23 @@ void NetworkPluginServer::handleRoomListPayload(const std::string &data) { return; } - 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 (!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