From 7146bdc3628390d64695a06582fdc73e3a0d2d85 Mon Sep 17 00:00:00 2001 From: HanzZ Date: Tue, 26 Jul 2011 21:19:21 +0200 Subject: [PATCH] support for protocol=any and prefix in JID --- backends/libpurple/main.cpp | 19 +++++++++++++------ spectrum/src/sample.cfg | 2 +- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/backends/libpurple/main.cpp b/backends/libpurple/main.cpp index 9306adaa..d06ae3bc 100644 --- a/backends/libpurple/main.cpp +++ b/backends/libpurple/main.cpp @@ -170,10 +170,18 @@ class SpectrumNetworkPlugin : public NetworkPlugin { void handleLoginRequest(const std::string &user, const std::string &legacyName, const std::string &password) { PurpleAccount *account = NULL; - const char *protocol = CONFIG_STRING(config, "service.protocol").c_str(); - if (purple_accounts_find(legacyName.c_str(), protocol) != NULL){ + + std::string name = legacyName; + std::string protocol = CONFIG_STRING(config, "service.protocol"); + if (CONFIG_STRING(config, "service.protocol") == "any") { + protocol = name.substr(0, name.find(".")); + name = name.substr(name.find(".") + 1); + } + + LOG4CXX_INFO(logger, "Creating account with name '" << name.c_str() << "' and protocol '" << protocol << "'"); + if (purple_accounts_find(name.c_str(), protocol.c_str()) != NULL){ // Log(user, "this account already exists"); - account = purple_accounts_find(legacyName.c_str(), protocol); + account = purple_accounts_find(name.c_str(), protocol.c_str()); // User *u = (User *) account->ui_data; // if (u && u != user) { // Log(userInfo.jid, "This account is already connected by another jid " << user->getJID()); @@ -182,7 +190,7 @@ class SpectrumNetworkPlugin : public NetworkPlugin { } else { // Log(user, "creating new account"); - account = purple_account_new(legacyName.c_str(), protocol); + account = purple_account_new(name.c_str(), protocol.c_str()); purple_accounts_add(account); } @@ -218,8 +226,7 @@ class SpectrumNetworkPlugin : public NetworkPlugin { } void handleLogoutRequest(const std::string &user, const std::string &legacyName) { - const char *protocol = CONFIG_STRING(config, "service.protocol").c_str(); - PurpleAccount *account = purple_accounts_find(legacyName.c_str(), protocol); + PurpleAccount *account = m_sessions[user]; if (account) { // VALGRIND_DO_LEAK_CHECK; m_sessions[user] = NULL; diff --git a/spectrum/src/sample.cfg b/spectrum/src/sample.cfg index 159f0d77..34bfee5b 100644 --- a/spectrum/src/sample.cfg +++ b/spectrum/src/sample.cfg @@ -14,7 +14,7 @@ users_per_backend=10 backend=../../backends/libpurple/spectrum_libpurple_backend #backend=../../backends/libircclient-qt/spectrum_libircclient-qt_backend #protocol=prpl-jabber -protocol=prpl-msn +protocol=any #protocol=prpl-icq [backend]