Connect just from one resource (can be changed in config)
This commit is contained in:
parent
c64e5768a8
commit
d94de26489
6 changed files with 21 additions and 11 deletions
|
@ -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> 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;
|
||||
|
|
|
@ -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<Swift::DiscoInfo> info, Swift::ErrorPayload::ref error, const Swift::JID& jid);
|
||||
void addUser(User *user);
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -48,6 +48,7 @@ bool Config::load(const std::string &configfile, boost::program_options::options
|
|||
("service.admin_password", value<std::string>()->default_value(""), "Administrator password.")
|
||||
("service.reuse_old_backends", value<bool>()->default_value(true), "True if Spectrum should use old backends which were full in the past.")
|
||||
("service.idle_reconnect_time", value<int>()->default_value(4*3600), "Time in seconds after which idle users are reconnected to let their backend die.")
|
||||
("service.more_resources", value<bool>()->default_value(false), "Allow more resources to be connected in server mode at the same time.")
|
||||
("identity.name", value<std::string>()->default_value("Spectrum 2 Transport"), "Name showed in service discovery.")
|
||||
("identity.category", value<std::string>()->default_value("gateway"), "Disco#info identity category. 'gateway' by default.")
|
||||
("identity.type", value<std::string>()->default_value(""), "Type of transport ('icq','msn','gg','irc', ...)")
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue