diff --git a/backends/libpurple/main.cpp b/backends/libpurple/main.cpp index d01c2138..e06fdb2b 100644 --- a/backends/libpurple/main.cpp +++ b/backends/libpurple/main.cpp @@ -50,6 +50,21 @@ template std::string stringOf(T object) { return (os.str()); } +static std::vector &split(const std::string &s, char delim, std::vector &elems) { + std::stringstream ss(s); + std::string item; + while(std::getline(ss, item, delim)) { + elems.push_back(item); + } + return elems; +} + + +static std::vector split(const std::string &s, char delim) { + std::vector elems; + return split(s, delim, elems); +} + static void transportDataReceived(gpointer data, gint source, PurpleInputCondition cond); class SpectrumNetworkPlugin; @@ -296,6 +311,17 @@ class SpectrumNetworkPlugin : public NetworkPlugin { if (ret) { purple_account_set_int(account, "version", fromString(std::string(contents, length))); } + + + if (KEYFILE_STRING("service", "protocol") == "prpl-novell") { + std::string username(purple_account_get_username(account)); + std::vector u = split(username, '@'); + purple_account_set_username(account, (const char*) u.front().c_str()); + std::vector s = split(u.back(), ':'); + purple_account_set_string(account, "server", s.front().c_str()); + purple_account_set_int(account, "port", atoi(s.back().c_str())); + } + } void handleLoginRequest(const std::string &user, const std::string &legacyName, const std::string &password) {