Better unregistering in gateway mode + other gateway mode fixes
This commit is contained in:
parent
4095ec6904
commit
ab6a0ecf30
3 changed files with 24 additions and 16 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -199,12 +199,14 @@ void RosterManager::handleRemoteRosterResponse(boost::shared_ptr<Swift::RosterPa
|
|||
|
||||
LOG4CXX_INFO(logger, m_user->getJID().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;
|
||||
|
|
|
@ -88,34 +88,36 @@ void UserRegistration::handleUnregisterRemoteRosterResponse(boost::shared_ptr<Sw
|
|||
if (!registered)
|
||||
return;
|
||||
|
||||
std::list <BuddyInfo> roster;
|
||||
m_storageBackend->getBuddies(userInfo.id, roster);
|
||||
for(std::list<BuddyInfo>::iterator u = roster.begin(); u != roster.end() ; u++){
|
||||
std::string name = (*u).legacyName;
|
||||
if (remoteRosterNotSupported) {
|
||||
std::list <BuddyInfo> roster;
|
||||
m_storageBackend->getBuddies(userInfo.id, roster);
|
||||
for(std::list<BuddyInfo>::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();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue