From e91e25f449ee452b840a882af7d84c41b7af5e36 Mon Sep 17 00:00:00 2001 From: HanzZ Date: Thu, 7 Mar 2013 12:45:47 +0100 Subject: [PATCH] Allow setting libpurple proxy --- backends/libpurple/main.cpp | 33 +++++++++++++++++++++++++++++++++ include/transport/config.h | 1 + 2 files changed, 34 insertions(+) diff --git a/backends/libpurple/main.cpp b/backends/libpurple/main.cpp index 7dcf0cb8..182e21c2 100644 --- a/backends/libpurple/main.cpp +++ b/backends/libpurple/main.cpp @@ -298,6 +298,39 @@ class SpectrumNetworkPlugin : public NetworkPlugin { purple_account_set_int_wrapped(account, "port", atoi(s.back().c_str())); } + if (!CONFIG_STRING_DEFAULTED(config, "proxy.type", "").empty()) { + PurpleProxyInfo *info = purple_proxy_info_new(); + if (CONFIG_STRING_DEFAULTED(config, "proxy.type", "") == "http") { + purple_proxy_info_set_type(info, PURPLE_PROXY_HTTP); + } + else if (CONFIG_STRING_DEFAULTED(config, "proxy.type", "") == "socks4") { + purple_proxy_info_set_type(info, PURPLE_PROXY_SOCKS4); + } + else if (CONFIG_STRING_DEFAULTED(config, "proxy.type", "") == "socks5") { + purple_proxy_info_set_type(info, PURPLE_PROXY_SOCKS5); + } + else { + LOG4CXX_ERROR(logger, "Unknown proxy.type " << CONFIG_STRING_DEFAULTED(config, "proxy.type", "")); + } + + info->username = NULL; + info->password = NULL; + + purple_proxy_info_set_type(info, PURPLE_PROXY_SOCKS5); + purple_proxy_info_set_host(info, CONFIG_STRING_DEFAULTED(config, "proxy.host", "").c_str()); + if (CONFIG_INT_DEFAULTED(config, "proxy.port", 0)) { + purple_proxy_info_set_port(info, CONFIG_INT_DEFAULTED(config, "proxy.port", 0)); + } + if (!CONFIG_STRING_DEFAULTED(config, "proxy.username", "").empty()) { + purple_proxy_info_set_username(info, CONFIG_STRING_DEFAULTED(config, "proxy.username", "").c_str()); + } + + if (!CONFIG_STRING_DEFAULTED(config, "proxy.password", "").empty()) { + purple_proxy_info_set_password(info, CONFIG_STRING_DEFAULTED(config, "proxy.password", "").c_str()); + } + + purple_account_set_proxy_info(account, info); + } } void handleLoginRequest(const std::string &user, const std::string &legacyName, const std::string &password) { diff --git a/include/transport/config.h b/include/transport/config.h index 8f760fea..97044a1d 100644 --- a/include/transport/config.h +++ b/include/transport/config.h @@ -52,6 +52,7 @@ const myType &safeAs(const boost::program_options::variable_value &var, const my #define CONFIG_STRING_DEFAULTED(PTR, KEY, DEF) ((*PTR).hasKey(KEY) ? Transport::safeAs((*PTR)[KEY], DEF) : DEF) #define CONFIG_BOOL_DEFAULTED(PTR, KEY, DEF) ((*PTR).hasKey(KEY) ? Transport::safeAs((*PTR)[KEY], DEF) : DEF) #define CONFIG_LIST_DEFAULTED(PTR, KEY, DEF) ((*PTR).hasKey(KEY) ? Transport::safeAs >((*PTR)[KEY], DEF) : DEF) +#define CONFIG_INT_DEFAULTED(PTR, KEY, DEF) ((*PTR).hasKey(KEY) ? Transport::safeAs((*PTR)[KEY], DEF) : DEF) namespace Transport {