From 751eaaaf32163c8693ff06b1d0d8972363f74cbf Mon Sep 17 00:00:00 2001 From: HanzZ Date: Tue, 12 Jul 2011 21:18:56 +0200 Subject: [PATCH] Fixed 3 crashes in gateway mode --- src/rostermanager.cpp | 13 ++++++++----- src/transport.cpp | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/rostermanager.cpp b/src/rostermanager.cpp index 369a4a00..a2d76784 100644 --- a/src/rostermanager.cpp +++ b/src/rostermanager.cpp @@ -151,6 +151,9 @@ void RosterManager::sendRIE() { Swift::RosterItemExchangePayload::ref payload = Swift::RosterItemExchangePayload::ref(new Swift::RosterItemExchangePayload()); for (std::map::const_iterator it = m_buddies.begin(); it != m_buddies.end(); it++) { Buddy *buddy = (*it).second; + if (!buddy) { + continue; + } Swift::RosterItemExchangePayload::Item item; item.setJID(buddy->getJID().toBare()); item.setName(buddy->getAlias()); @@ -217,7 +220,7 @@ void RosterManager::handleSubscription(Swift::Presence::ref presence) { } else { Swift::Presence::ref response = Swift::Presence::create(); - Swift::Presence::ref presence; + Swift::Presence::ref currentPresence; response->setTo(presence->getFrom()); response->setFrom(presence->getTo()); @@ -227,10 +230,10 @@ 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); + currentPresence = buddy->generatePresenceStanza(255); + if (currentPresence) { + currentPresence->setTo(presence->getFrom()); + m_component->getStanzaChannel()->sendPresence(currentPresence); } break; // remove buddy diff --git a/src/transport.cpp b/src/transport.cpp index 3fc63aec..20f82807 100644 --- a/src/transport.cpp +++ b/src/transport.cpp @@ -159,7 +159,7 @@ void Component::setBuddyFeatures(std::list &features) { } void Component::start() { - if (m_component) { + if (m_component && !m_component->isAvailable()) { LOG4CXX_INFO(logger, "Connecting XMPP server " << CONFIG_STRING(m_config, "service.server") << " port " << CONFIG_INT(m_config, "service.port")); m_reconnectCount++; m_component->connect(CONFIG_STRING(m_config, "service.server"), CONFIG_INT(m_config, "service.port"));