From d94de26489f1995d6299d1bb76326de8a26e0d0c Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Mon, 8 Aug 2011 15:04:08 +0200 Subject: [PATCH] Connect just from one resource (can be changed in config) --- .../Server/ServerFromClientSession.cpp | 5 +++-- include/transport/usermanager.h | 2 +- spectrum/src/sample.cfg | 2 +- src/config.cpp | 1 + src/networkpluginserver.cpp | 2 +- src/usermanager.cpp | 20 +++++++++++++------ 6 files changed, 21 insertions(+), 11 deletions(-) diff --git a/include/Swiften/Server/ServerFromClientSession.cpp b/include/Swiften/Server/ServerFromClientSession.cpp index d2062575..e6ef09b4 100644 --- a/include/Swiften/Server/ServerFromClientSession.cpp +++ b/include/Swiften/Server/ServerFromClientSession.cpp @@ -42,8 +42,6 @@ ServerFromClientSession::ServerFromClientSession( allowSASLEXTERNAL(false), tlsLayer(0), tlsConnected(false) { - userRegistry->onPasswordValid.connect(boost::bind(&ServerFromClientSession::handlePasswordValid, this, _1)); - userRegistry->onPasswordInvalid.connect(boost::bind(&ServerFromClientSession::handlePasswordInvalid, this, _1)); } ServerFromClientSession::~ServerFromClientSession() { @@ -93,6 +91,9 @@ void ServerFromClientSession::handleElement(boost::shared_ptr element) else { PLAINMessage plainMessage(authRequest->getMessage() ? *authRequest->getMessage() : createSafeByteArray("")); user_ = plainMessage.getAuthenticationID(); + userRegistry_->onPasswordInvalid(JID(plainMessage.getAuthenticationID(), getLocalJID().getDomain()).toBare().toString()); + userRegistry_->onPasswordValid.connect(boost::bind(&ServerFromClientSession::handlePasswordValid, this, _1)); + userRegistry_->onPasswordInvalid.connect(boost::bind(&ServerFromClientSession::handlePasswordInvalid, this, _1)); if (userRegistry_->isValidUserPassword(JID(plainMessage.getAuthenticationID(), getLocalJID().getDomain()), plainMessage.getPassword())) { // we're waiting for usermanager signal now // authenticated_ = true; diff --git a/include/transport/usermanager.h b/include/transport/usermanager.h index 076cb85b..2067552d 100644 --- a/include/transport/usermanager.h +++ b/include/transport/usermanager.h @@ -89,7 +89,7 @@ class UserManager { void handleGeneralPresenceReceived(Swift::Presence::ref presence); void handleProbePresence(Swift::Presence::ref presence); void handleSubscription(Swift::Presence::ref presence); - void handleRemoveTimeout(const std::string jid); + void handleRemoveTimeout(const std::string jid, bool reconnect); // void handleDiscoInfoResponse(boost::shared_ptr info, Swift::ErrorPayload::ref error, const Swift::JID& jid); void addUser(User *user); diff --git a/spectrum/src/sample.cfg b/spectrum/src/sample.cfg index 22358da5..e783d758 100644 --- a/spectrum/src/sample.cfg +++ b/spectrum/src/sample.cfg @@ -26,6 +26,6 @@ default_avatar=catmelonhead.jpg #backend_config=backend_logging.cfg # log4cxx/log4j logging configuration file for backends [database] -type = mysql # or "none" without database backend +#type = mysql # or "none" without database backend database = test.sql prefix=icq diff --git a/src/config.cpp b/src/config.cpp index b0a66c2e..bdf34bc2 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -48,6 +48,7 @@ bool Config::load(const std::string &configfile, boost::program_options::options ("service.admin_password", value()->default_value(""), "Administrator password.") ("service.reuse_old_backends", value()->default_value(true), "True if Spectrum should use old backends which were full in the past.") ("service.idle_reconnect_time", value()->default_value(4*3600), "Time in seconds after which idle users are reconnected to let their backend die.") + ("service.more_resources", value()->default_value(false), "Allow more resources to be connected in server mode at the same time.") ("identity.name", value()->default_value("Spectrum 2 Transport"), "Name showed in service discovery.") ("identity.category", value()->default_value("gateway"), "Disco#info identity category. 'gateway' by default.") ("identity.type", value()->default_value(""), "Type of transport ('icq','msn','gg','irc', ...)") diff --git a/src/networkpluginserver.cpp b/src/networkpluginserver.cpp index e5f35bfc..a9711faa 100644 --- a/src/networkpluginserver.cpp +++ b/src/networkpluginserver.cpp @@ -631,7 +631,7 @@ void NetworkPluginServer::pingTimeout() { if ((*it)->users.size() == 0) { LOG4CXX_INFO(logger, "Disconnecting backend " << (*it) << ". There are no users."); - (*it)->connection->disconnect(); +// (*it)->connection->disconnect(); (*it)->connection.reset(); } } diff --git a/src/usermanager.cpp b/src/usermanager.cpp index a645d5a1..ceee5a88 100644 --- a/src/usermanager.cpp +++ b/src/usermanager.cpp @@ -188,7 +188,7 @@ void UserManager::handlePresence(Swift::Presence::ref presence) { Swift::Presence::ref highest = m_component->getPresenceOracle()->getHighestPriorityPresence(presence->getFrom().toBare()); // There's no presence for this user, so disconnect if (!highest || (highest && highest->getType() == Swift::Presence::Unavailable)) { - m_removeTimer->onTick.connect(boost::bind(&UserManager::handleRemoveTimeout, this, user->getJID().toBare().toString())); + m_removeTimer->onTick.connect(boost::bind(&UserManager::handleRemoveTimeout, this, user->getJID().toBare().toString(), false)); m_removeTimer->start(); } } @@ -199,12 +199,16 @@ void UserManager::handlePresence(Swift::Presence::ref presence) { } } -void UserManager::handleRemoveTimeout(const std::string jid) { - m_removeTimer->onTick.disconnect(boost::bind(&UserManager::handleRemoveTimeout, this, jid)); +void UserManager::handleRemoveTimeout(const std::string jid, bool reconnect) { + m_removeTimer->onTick.disconnect(boost::bind(&UserManager::handleRemoveTimeout, this, jid, reconnect)); User *user = getUser(jid); if (user) { removeUser(user); } + + if (reconnect) { + connectUser(jid); + } } void UserManager::handleMessageReceived(Swift::Message::ref message) { @@ -286,11 +290,15 @@ void UserManager::handleSubscription(Swift::Presence::ref presence) { void UserManager::connectUser(const Swift::JID &user) { if (m_users.find(user.toBare().toString()) != m_users.end()) { - std::cout << "FOUND\n"; - m_userRegistry->onPasswordValid(user); + if (CONFIG_BOOL(m_component->getConfig(), "service.more_resources")) { + m_userRegistry->onPasswordValid(user); + } + else { + m_removeTimer->onTick.connect(boost::bind(&UserManager::handleRemoveTimeout, this, user.toBare().toString(), true)); + m_removeTimer->start(); + } } else { - std::cout << "NOT FOUND - PRESENCe\n"; Swift::Presence::ref response = Swift::Presence::create(); response->setTo(m_component->getJID()); response->setFrom(user);