From 02df69b8318f866a70b3991b4bc169e549444156 Mon Sep 17 00:00:00 2001 From: Darchigh Date: Fri, 18 Jan 2013 17:42:19 +0100 Subject: [PATCH 1/3] Make Spectrum2 send full roster after receiving empty RemoteRoster-Payload --- src/rostermanager.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/rostermanager.cpp b/src/rostermanager.cpp index 0967fe56..449cd744 100644 --- a/src/rostermanager.cpp +++ b/src/rostermanager.cpp @@ -280,6 +280,15 @@ void RosterManager::handleRemoteRosterResponse(boost::shared_ptrgetJID().toString() << ": This server supports remote roster protoXEP"); m_supportRemoteRoster = true; + + //If we receive empty RosterPayload initiate full RosterPush + if(payload->getItems().empty()){ + LOG4CXX_INFO(logger, "Received empty Roster. Pushing full Roster."); + for(std::map, boost::pool_allocator< std::pair > >::const_iterator c_it = m_buddies.begin(); + c_it != m_buddies.end(); c_it++) { + sendBuddyRosterPush(c_it->second); + } + } return; BOOST_FOREACH(const Swift::RosterItemPayload &item, payload->getItems()) { From 5a0f94d26e4567ab57c2ee32376a375ab83c3498 Mon Sep 17 00:00:00 2001 From: Darchigh Date: Tue, 22 Jan 2013 09:49:18 +0100 Subject: [PATCH 2/3] Check if just being registered or normal login before doing remoteRosterPush --- src/rostermanager.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/rostermanager.cpp b/src/rostermanager.cpp index 449cd744..daabf440 100644 --- a/src/rostermanager.cpp +++ b/src/rostermanager.cpp @@ -281,12 +281,14 @@ void RosterManager::handleRemoteRosterResponse(boost::shared_ptrgetJID().toString() << ": This server supports remote roster protoXEP"); m_supportRemoteRoster = true; - //If we receive empty RosterPayload initiate full RosterPush - if(payload->getItems().empty()){ - LOG4CXX_INFO(logger, "Received empty Roster. Pushing full Roster."); - for(std::map, boost::pool_allocator< std::pair > >::const_iterator c_it = m_buddies.begin(); - c_it != m_buddies.end(); c_it++) { - sendBuddyRosterPush(c_it->second); + //If we receive empty RosterPayload on login (not register) initiate full RosterPush + if(!m_buddies.empty()){ + if(payload->getItems().empty()){ + LOG4CXX_INFO(logger, "Received empty Roster upon login. Pushing full Roster."); + for(std::map, boost::pool_allocator< std::pair > >::const_iterator c_it = m_buddies.begin(); + c_it != m_buddies.end(); c_it++) { + sendBuddyRosterPush(c_it->second); + } } } return; From 799350e23fbf09f2dd15b1db378e7b898b0d88e8 Mon Sep 17 00:00:00 2001 From: Darchigh Date: Tue, 22 Jan 2013 10:29:36 +0100 Subject: [PATCH 3/3] Small change... --- src/rostermanager.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/rostermanager.cpp b/src/rostermanager.cpp index daabf440..1cfedd0f 100644 --- a/src/rostermanager.cpp +++ b/src/rostermanager.cpp @@ -282,14 +282,12 @@ void RosterManager::handleRemoteRosterResponse(boost::shared_ptrgetItems().empty()){ + if(!m_buddies.empty() && payload->getItems().empty()){ LOG4CXX_INFO(logger, "Received empty Roster upon login. Pushing full Roster."); for(std::map, boost::pool_allocator< std::pair > >::const_iterator c_it = m_buddies.begin(); c_it != m_buddies.end(); c_it++) { sendBuddyRosterPush(c_it->second); } - } } return;