From ee0b8ee838e307b63533ee6297af3286e11be746 Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Thu, 8 Dec 2011 12:14:13 +0100 Subject: [PATCH 1/2] Fixed RIE for components --- src/rostermanager.cpp | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/rostermanager.cpp b/src/rostermanager.cpp index db888909..23b19a7f 100644 --- a/src/rostermanager.cpp +++ b/src/rostermanager.cpp @@ -116,9 +116,18 @@ void RosterManager::sendBuddyRosterPush(Buddy *buddy) { payload->addItem(item); - std::vector presences = m_component->getPresenceOracle()->getAllPresence(m_user->getJID().toBare()); - BOOST_FOREACH(Swift::Presence::ref presence, presences) { - Swift::SetRosterRequest::ref request = Swift::SetRosterRequest::create(payload, presence->getFrom(), m_component->getIQRouter()); + // In server mode we have to send pushes to all resources, but in gateway-mode we send it only to bare JID + if (m_component->inServerMode()) { + std::vector presences = m_component->getPresenceOracle()->getAllPresence(m_user->getJID().toBare()); + BOOST_FOREACH(Swift::Presence::ref presence, presences) { + Swift::SetRosterRequest::ref request = Swift::SetRosterRequest::create(payload, presence->getFrom(), m_component->getIQRouter()); + request->onResponse.connect(boost::bind(&RosterManager::handleBuddyRosterPushResponse, this, _1, request, buddy->getName())); + request->send(); + m_requests.push_back(request); + } + } + else { + Swift::SetRosterRequest::ref request = Swift::SetRosterRequest::create(payload, m_user->getJID().toBare(), m_component->getIQRouter()); request->onResponse.connect(boost::bind(&RosterManager::handleBuddyRosterPushResponse, this, _1, request, buddy->getName())); request->send(); m_requests.push_back(request); @@ -332,8 +341,8 @@ void RosterManager::handleSubscription(Swift::Presence::ref presence) { else { Swift::Presence::ref response = Swift::Presence::create(); Swift::Presence::ref currentPresence; - response->setTo(presence->getFrom()); - response->setFrom(presence->getTo()); + response->setTo(presence->getFrom().toBare()); + response->setFrom(presence->getTo().toBare().toString() + "/bot"); Buddy *buddy = getBuddy(Buddy::JIDToLegacyName(presence->getTo())); if (buddy) { @@ -355,7 +364,7 @@ void RosterManager::handleSubscription(Swift::Presence::ref presence) { break; // just send response case Swift::Presence::Unsubscribed: -// response->setType(Swift::Presence::Unsubscribe); + response->setType(Swift::Presence::Unsubscribe); break; default: return; From 29888fae6e1eb19f71f82b0ad9f779c56159d040 Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Thu, 8 Dec 2011 12:20:35 +0100 Subject: [PATCH 2/2] Windows compilation fixes --- spectrum/src/main.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spectrum/src/main.cpp b/spectrum/src/main.cpp index a300a709..c0b8fb9b 100644 --- a/spectrum/src/main.cpp +++ b/spectrum/src/main.cpp @@ -211,6 +211,7 @@ int main(int argc, char **argv) return 1; } +#ifndef WIN32 if (!CONFIG_STRING(&config, "service.group").empty() ||!CONFIG_STRING(&config, "service.user").empty() ) { struct group *gr; if ((gr = getgrnam(CONFIG_STRING(&config, "service.group").c_str())) == NULL) { @@ -225,7 +226,6 @@ int main(int argc, char **argv) chown(CONFIG_STRING(&config, "service.working_dir").c_str(), pw->pw_uid, gr->gr_gid); } -#ifndef WIN32 if (!no_daemon) { // daemonize daemonize(CONFIG_STRING(&config, "service.working_dir").c_str(), CONFIG_STRING(&config, "service.pidfile").c_str()); @@ -260,7 +260,7 @@ int main(int argc, char **argv) std::string dir; BOOST_FOREACH(const log4cxx::LogString &prop, p.propertyNames()) { if (boost::ends_with(prop, ".File")) { - dir = p.get(prop); + log4cxx::helpers::Transcoder::encode(p.get(prop), dir); boost::replace_all(dir, "${jid}", jid); break; }