From ab6a0ecf307b88e9170ff8958b5977bd8e8cf637 Mon Sep 17 00:00:00 2001 From: HanzZ Date: Sun, 18 Sep 2011 16:59:05 +0200 Subject: [PATCH] Better unregistering in gateway mode + other gateway mode fixes --- src/buddy.cpp | 12 ++++++++---- src/rostermanager.cpp | 2 ++ src/userregistration.cpp | 26 ++++++++++++++------------ 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/src/buddy.cpp b/src/buddy.cpp index fe7f906b..e106e093 100644 --- a/src/buddy.cpp +++ b/src/buddy.cpp @@ -58,7 +58,7 @@ BuddyFlag Buddy::getFlags() { } const Swift::JID &Buddy::getJID() { - if (!m_jid.isValid()) { + if (!m_jid.isValid() || m_jid.getNode().empty()) { generateJID(); } return m_jid; @@ -81,6 +81,10 @@ Swift::Presence::ref Buddy::generatePresenceStanza(int features, bool only_new) if (!getStatus(s, statusMessage)) return Swift::Presence::ref(); + if (m_jid.getNode().empty()) { + generateJID(); + } + Swift::Presence::ref presence = Swift::Presence::create(); presence->setFrom(m_jid); presence->setTo(m_rosterManager->getUser()->getJID().toBare()); @@ -163,9 +167,9 @@ 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 (name.find_last_of("\\40") != std::string::npos) { +// name.replace(name.find_last_of("\\40"), 1, "@"); // OK +// } } return name; } diff --git a/src/rostermanager.cpp b/src/rostermanager.cpp index 8892d632..5f397ba8 100644 --- a/src/rostermanager.cpp +++ b/src/rostermanager.cpp @@ -199,12 +199,14 @@ void RosterManager::handleRemoteRosterResponse(boost::shared_ptrgetJID().toString() << ": This server supports remote roster protoXEP"); m_supportRemoteRoster = true; + return; BOOST_FOREACH(const Swift::RosterItemPayload &item, payload->getItems()) { std::string legacyName = Buddy::JIDToLegacyName(item.getJID()); if (m_buddies.find(legacyName) != m_buddies.end()) { continue; } + std::cout << "LEGACYNAME " << legacyName << "\n"; BuddyInfo buddyInfo; buddyInfo.id = -1; diff --git a/src/userregistration.cpp b/src/userregistration.cpp index 3f883f43..bb4bc89a 100644 --- a/src/userregistration.cpp +++ b/src/userregistration.cpp @@ -88,34 +88,36 @@ void UserRegistration::handleUnregisterRemoteRosterResponse(boost::shared_ptr roster; - m_storageBackend->getBuddies(userInfo.id, roster); - for(std::list::iterator u = roster.begin(); u != roster.end() ; u++){ - std::string name = (*u).legacyName; + if (remoteRosterNotSupported) { + std::list roster; + m_storageBackend->getBuddies(userInfo.id, roster); + for(std::list::iterator u = roster.begin(); u != roster.end() ; u++){ + std::string name = Swift::JID::getEscapedNode((*u).legacyName); - if (remoteRosterNotSupported) { Swift::Presence::ref response; response = Swift::Presence::create(); response->setTo(Swift::JID(barejid)); - response->setFrom(Swift::JID(name + "@" + m_component->getJID().toString())); + response->setFrom(Swift::JID(name, m_component->getJID().toString())); response->setType(Swift::Presence::Unsubscribe); m_component->getStanzaChannel()->sendPresence(response); response = Swift::Presence::create(); response->setTo(Swift::JID(barejid)); - response->setFrom(Swift::JID(name + "@" + m_component->getJID().toString())); + response->setFrom(Swift::JID(name, m_component->getJID().toString())); response->setType(Swift::Presence::Unsubscribed); m_component->getStanzaChannel()->sendPresence(response); } - else { - Swift::RosterPayload::ref payload = Swift::RosterPayload::ref(new Swift::RosterPayload()); + } + else { + BOOST_FOREACH(Swift::RosterItemPayload it, payload->getItems()) { + Swift::RosterPayload::ref p = Swift::RosterPayload::ref(new Swift::RosterPayload()); Swift::RosterItemPayload item; - item.setJID(Swift::JID(name + "@" + m_component->getJID().toString())); + item.setJID(it.getJID()); item.setSubscription(Swift::RosterItemPayload::Remove); - payload->addItem(item); + p->addItem(item); - Swift::SetRosterRequest::ref request = Swift::SetRosterRequest::create(payload, barejid, m_component->getIQRouter()); + Swift::SetRosterRequest::ref request = Swift::SetRosterRequest::create(p, barejid, m_component->getIQRouter()); request->send(); } }