Files
@ 62f3fbf99c88
Branch filter:
Location: libtransport.git/src/rostermanager.cpp - annotation
62f3fbf99c88
4.2 KiB
text/x-c++hdr
Buddy::JIDToLegacyName
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | 04c0598d9790 04c0598d9790 04c0598d9790 04c0598d9790 04c0598d9790 04c0598d9790 04c0598d9790 04c0598d9790 04c0598d9790 04c0598d9790 04c0598d9790 04c0598d9790 04c0598d9790 04c0598d9790 04c0598d9790 04c0598d9790 04c0598d9790 04c0598d9790 04c0598d9790 04c0598d9790 04c0598d9790 b5c026470f07 04c0598d9790 b5c026470f07 04c0598d9790 18a72df6850b 18a72df6850b 18a72df6850b 5438bada5dbb 04c0598d9790 04c0598d9790 04c0598d9790 04c0598d9790 04c0598d9790 04c0598d9790 18a72df6850b 5438bada5dbb 5438bada5dbb 04c0598d9790 04c0598d9790 04c0598d9790 5438bada5dbb 5438bada5dbb 04c0598d9790 04c0598d9790 b5c026470f07 132dfb379d42 132dfb379d42 132dfb379d42 132dfb379d42 b5c026470f07 18a72df6850b 18a72df6850b 18a72df6850b 18a72df6850b 18a72df6850b 18a72df6850b 18a72df6850b 18a72df6850b 18a72df6850b 76c678dd6f1d 18a72df6850b 18a72df6850b 18a72df6850b b5c026470f07 132dfb379d42 132dfb379d42 76c678dd6f1d 04c0598d9790 132dfb379d42 5438bada5dbb 5438bada5dbb 18a72df6850b 18a72df6850b 18a72df6850b 5438bada5dbb 5438bada5dbb 5438bada5dbb 18a72df6850b 132dfb379d42 132dfb379d42 5438bada5dbb 5438bada5dbb 5438bada5dbb 132dfb379d42 04c0598d9790 04c0598d9790 b5c026470f07 76c678dd6f1d 04c0598d9790 04c0598d9790 04c0598d9790 18a72df6850b 18a72df6850b 18a72df6850b 18a72df6850b 18a72df6850b 18a72df6850b b5c026470f07 76c678dd6f1d 76c678dd6f1d 76c678dd6f1d 5438bada5dbb 5438bada5dbb 5438bada5dbb 5438bada5dbb 5438bada5dbb 5438bada5dbb 5438bada5dbb 5438bada5dbb 5438bada5dbb 5438bada5dbb 5438bada5dbb 5438bada5dbb 5438bada5dbb 5438bada5dbb 5438bada5dbb 5438bada5dbb 5438bada5dbb 5438bada5dbb 5438bada5dbb 5797b554ea69 62f3fbf99c88 5797b554ea69 5797b554ea69 62f3fbf99c88 | /**
* XMPP - libpurple transport
*
* Copyright (C) 2009, Jan Kaluza <hanzz@soc.pidgin.im>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
*/
#include "transport/rostermanager.h"
#include "transport/buddy.h"
#include "transport/usermanager.h"
#include "transport/buddy.h"
#include "transport/user.h"
#include "Swiften/Roster/SetRosterRequest.h"
#include "Swiften/Elements/RosterPayload.h"
#include "Swiften/Elements/RosterItemPayload.h"
#include "Swiften/Elements/RosterItemExchangePayload.h"
namespace Transport {
RosterManager::RosterManager(User *user, Component *component){
m_user = user;
m_component = component;
m_setBuddyTimer = m_component->getFactories()->getTimerFactory()->createTimer(1000);
m_RIETimer = m_component->getFactories()->getTimerFactory()->createTimer(3000);
m_RIETimer->onTick.connect(boost::bind(&RosterManager::sendRIE, this));
}
RosterManager::~RosterManager() {
m_setBuddyTimer->stop();
m_RIETimer->stop();
}
void RosterManager::setBuddy(Buddy *buddy) {
m_setBuddyTimer->onTick.connect(boost::bind(&RosterManager::setBuddyCallback, this, buddy));
m_setBuddyTimer->start();
}
void RosterManager::sendBuddyRosterPush(Buddy *buddy) {
Swift::RosterPayload::ref payload = Swift::RosterPayload::ref(new Swift::RosterPayload());
Swift::RosterItemPayload item;
item.setJID(buddy->getJID().toBare());
item.setName(buddy->getAlias());
item.setGroups(buddy->getGroups());
payload->addItem(item);
Swift::SetRosterRequest::ref request = Swift::SetRosterRequest::create(payload, m_component->getIQRouter(), m_user->getJID().toBare());
request->onResponse.connect(boost::bind(&RosterManager::handleBuddyRosterPushResponse, this, _1, buddy->getName()));
request->send();
}
void RosterManager::setBuddyCallback(Buddy *buddy) {
m_setBuddyTimer->onTick.disconnect(boost::bind(&RosterManager::setBuddyCallback, this, buddy));
m_buddies[buddy->getName()] = buddy;
onBuddySet(buddy);
// In server mode the only way is to send jabber:iq:roster push.
// In component mode we send RIE or Subscribe presences, based on features.
if (m_component->inServerMode()) {
sendBuddyRosterPush(buddy);
}
else {
}
if (m_setBuddyTimer->onTick.empty()) {
m_setBuddyTimer->stop();
if (true /*&& rie_is_supported*/) {
m_RIETimer->start();
}
}
}
void RosterManager::unsetBuddy(Buddy *buddy) {
m_buddies.erase(buddy->getName());
onBuddyUnset(buddy);
}
void RosterManager::handleBuddyRosterPushResponse(Swift::ErrorPayload::ref error, const std::string &key) {
if (m_buddies[key] != NULL) {
m_buddies[key]->buddyChanged();
}
}
Buddy *RosterManager::getBuddy(const std::string &name) {
return m_buddies[name];
}
void RosterManager::sendRIE() {
m_RIETimer->stop();
Swift::RosterItemExchangePayload::ref payload = Swift::RosterItemExchangePayload::ref(new Swift::RosterItemExchangePayload());
for (std::map<std::string, Buddy *>::const_iterator it = m_buddies.begin(); it != m_buddies.end(); it++) {
Buddy *buddy = (*it).second;
Swift::RosterItemExchangePayload::Item item;
item.jid = buddy->getJID().toBare();
item.name = buddy->getAlias();
item.action = Swift::RosterItemExchangePayload::Add;
item.groups = buddy->getGroups();
payload->addItem(item);
}
boost::shared_ptr<Swift::GenericRequest<Swift::RosterItemExchangePayload> > request(new Swift::GenericRequest<Swift::RosterItemExchangePayload>(Swift::IQ::Set, m_user->getJID(), payload, m_component->getIQRouter()));
request->send();
}
void RosterManager::handleSubscription(Swift::Presence::ref presence) {
std::string legacyName = Buddy::JIDToLegacyName(presence->getTo());
}
}
|