Basic gateway mode with RIE
This commit is contained in:
parent
3fe27413f5
commit
de4e6f57c5
6 changed files with 39 additions and 22 deletions
|
@ -70,7 +70,8 @@ int main(int argc, char **argv)
|
|||
|
||||
UserManager userManager(&transport, &userRegistry, storageBackend);
|
||||
if (storageBackend) {
|
||||
UserRegistration userRegistration(&transport, &userManager, storageBackend);
|
||||
UserRegistration *userRegistration = new UserRegistration(&transport, &userManager, storageBackend);
|
||||
userRegistration->start();
|
||||
// logger.setUserRegistration(&userRegistration);
|
||||
}
|
||||
// logger.setUserManager(&userManager);
|
||||
|
|
|
@ -59,6 +59,9 @@ RosterManager::~RosterManager() {
|
|||
|
||||
for (std::map<std::string, Buddy *>::const_iterator it = m_buddies.begin(); it != m_buddies.end(); it++) {
|
||||
Buddy *buddy = (*it).second;
|
||||
if (!buddy) {
|
||||
continue;
|
||||
}
|
||||
delete buddy;
|
||||
}
|
||||
if (m_rosterStorage)
|
||||
|
@ -141,7 +144,10 @@ Buddy *RosterManager::getBuddy(const std::string &name) {
|
|||
void RosterManager::sendRIE() {
|
||||
m_RIETimer->stop();
|
||||
|
||||
LOG4CXX_INFO(logger, "Sending RIE stanza to " << m_user->getJID().toString());
|
||||
Swift::Presence::ref highest = m_component->getPresenceOracle()->getHighestPriorityPresence(m_user->getJID().toBare());
|
||||
|
||||
LOG4CXX_INFO(logger, "Sending RIE stanza to " << highest->getFrom().toString());
|
||||
|
||||
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;
|
||||
|
@ -154,7 +160,7 @@ void RosterManager::sendRIE() {
|
|||
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()));
|
||||
boost::shared_ptr<Swift::GenericRequest<Swift::RosterItemExchangePayload> > request(new Swift::GenericRequest<Swift::RosterItemExchangePayload>(Swift::IQ::Set, highest->getFrom(), payload, m_component->getIQRouter()));
|
||||
request->send();
|
||||
}
|
||||
|
||||
|
@ -211,6 +217,7 @@ void RosterManager::handleSubscription(Swift::Presence::ref presence) {
|
|||
}
|
||||
else {
|
||||
Swift::Presence::ref response = Swift::Presence::create();
|
||||
Swift::Presence::ref presence;
|
||||
response->setTo(presence->getFrom());
|
||||
response->setFrom(presence->getTo());
|
||||
|
||||
|
@ -220,6 +227,11 @@ void RosterManager::handleSubscription(Swift::Presence::ref presence) {
|
|||
// buddy is already there, so nothing to do, just answer
|
||||
case Swift::Presence::Subscribe:
|
||||
response->setType(Swift::Presence::Subscribed);
|
||||
presence = buddy->generatePresenceStanza(255);
|
||||
if (presence) {
|
||||
presence->setTo(presence->getFrom());
|
||||
m_component->getStanzaChannel()->sendPresence(presence);
|
||||
}
|
||||
break;
|
||||
// remove buddy
|
||||
case Swift::Presence::Unsubscribe:
|
||||
|
@ -228,11 +240,7 @@ void RosterManager::handleSubscription(Swift::Presence::ref presence) {
|
|||
break;
|
||||
// just send response
|
||||
case Swift::Presence::Unsubscribed:
|
||||
response->setType(Swift::Presence::Unsubscribe);
|
||||
break;
|
||||
// just send response
|
||||
case Swift::Presence::Subscribed:
|
||||
response->setType(Swift::Presence::Subscribe);
|
||||
// response->setType(Swift::Presence::Unsubscribe);
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
|
@ -263,9 +271,6 @@ void RosterManager::handleSubscription(Swift::Presence::ref presence) {
|
|||
response->setType(Swift::Presence::Unsubscribe);
|
||||
break;
|
||||
// just send response
|
||||
case Swift::Presence::Subscribed:
|
||||
response->setType(Swift::Presence::Subscribe);
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
@ -312,6 +317,9 @@ Swift::RosterPayload::ref RosterManager::generateRosterPayload() {
|
|||
|
||||
for (std::map<std::string, Buddy *>::const_iterator it = m_buddies.begin(); it != m_buddies.end(); it++) {
|
||||
Buddy *buddy = (*it).second;
|
||||
if (!buddy) {
|
||||
continue;
|
||||
}
|
||||
Swift::RosterItemPayload item;
|
||||
item.setJID(buddy->getJID().toBare());
|
||||
item.setName(buddy->getAlias());
|
||||
|
@ -325,6 +333,9 @@ Swift::RosterPayload::ref RosterManager::generateRosterPayload() {
|
|||
void RosterManager::sendCurrentPresences(const Swift::JID &to) {
|
||||
for (std::map<std::string, Buddy *>::const_iterator it = m_buddies.begin(); it != m_buddies.end(); it++) {
|
||||
Buddy *buddy = (*it).second;
|
||||
if (!buddy) {
|
||||
continue;
|
||||
}
|
||||
Swift::Presence::ref presence = buddy->generatePresenceStanza(255);
|
||||
if (presence) {
|
||||
presence->setTo(to);
|
||||
|
|
|
@ -272,7 +272,7 @@ long SQLite3Backend::addBuddy(long userId, const BuddyInfo &buddyInfo) {
|
|||
void SQLite3Backend::updateBuddy(long userId, const BuddyInfo &buddyInfo) {
|
||||
// UPDATE " + m_prefix + "buddies SET groups=?, nickname=?, flags=?, subscription=? WHERE user_id=? AND uin=?
|
||||
BEGIN(m_updateBuddy);
|
||||
BIND_STR(m_updateBuddy, buddyInfo.groups[0]); // TODO: serialize groups
|
||||
BIND_STR(m_updateBuddy, buddyInfo.groups.size() == 0 ? "" : buddyInfo.groups[0]); // TODO: serialize groups
|
||||
BIND_STR(m_updateBuddy, buddyInfo.alias);
|
||||
BIND_INT(m_updateBuddy, buddyInfo.flags);
|
||||
BIND_STR(m_updateBuddy, buddyInfo.subscription);
|
||||
|
|
11
src/user.cpp
11
src/user.cpp
|
@ -115,11 +115,12 @@ void User::handlePresence(Swift::Presence::ref presence) {
|
|||
|
||||
Swift::Presence::ref highest = m_presenceOracle->getHighestPriorityPresence(m_jid.toBare());
|
||||
if (highest) {
|
||||
highest->setTo(presence->getFrom().toBare());
|
||||
highest->setFrom(m_component->getJID());
|
||||
m_component->getStanzaChannel()->sendPresence(highest);
|
||||
LOG4CXX_INFO(logger, m_jid.toString() << ": Changing legacy network presence to " << highest->getType());
|
||||
onPresenceChanged(highest);
|
||||
Swift::Presence::ref response = Swift::Presence::create(highest);
|
||||
response->setTo(presence->getFrom().toBare());
|
||||
response->setFrom(m_component->getJID());
|
||||
m_component->getStanzaChannel()->sendPresence(response);
|
||||
LOG4CXX_INFO(logger, m_jid.toString() << ": Changing legacy network presence to " << response->getType());
|
||||
onPresenceChanged(response);
|
||||
}
|
||||
else {
|
||||
Swift::Presence::ref response = Swift::Presence::create();
|
||||
|
|
|
@ -229,11 +229,11 @@ void UserManager::handleSubscription(Swift::Presence::ref presence) {
|
|||
response->setType(Swift::Presence::Subscribed);
|
||||
m_component->getStanzaChannel()->sendPresence(response);
|
||||
|
||||
response = Swift::Presence::create();
|
||||
response->setFrom(presence->getTo());
|
||||
response->setTo(presence->getFrom());
|
||||
response->setType(Swift::Presence::Subscribe);
|
||||
m_component->getStanzaChannel()->sendPresence(response);
|
||||
// response = Swift::Presence::create();
|
||||
// response->setFrom(presence->getTo());
|
||||
// response->setTo(presence->getFrom());
|
||||
// response->setType(Swift::Presence::Subscribe);
|
||||
// m_component->getStanzaChannel()->sendPresence(response);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -25,11 +25,15 @@
|
|||
#include "transport/user.h"
|
||||
#include "Swiften/Elements/ErrorPayload.h"
|
||||
#include <boost/shared_ptr.hpp>
|
||||
#include "log4cxx/logger.h"
|
||||
|
||||
using namespace Swift;
|
||||
using namespace log4cxx;
|
||||
|
||||
namespace Transport {
|
||||
|
||||
static LoggerPtr logger = Logger::getLogger("UserRegistration");
|
||||
|
||||
UserRegistration::UserRegistration(Component *component, UserManager *userManager, StorageBackend *storageBackend) : Swift::Responder<Swift::InBandRegistrationPayload>(component->m_iqRouter) {
|
||||
m_component = component;
|
||||
m_config = m_component->m_config;
|
||||
|
|
Loading…
Add table
Reference in a new issue