From fd4946efe48c65a3737f35b24ca107b532c84452 2013-02-11 21:24:19 From: HanzZ Date: 2013-02-11 21:24:19 Subject: [PATCH] Libcommuni: Do not enable JID escaping for IRC --- diff --git a/backends/libcommuni/ircnetworkplugin.cpp b/backends/libcommuni/ircnetworkplugin.cpp index 85182c67608944c30ff94156a96422b8532884ad..e520ed6c70f511a31dfe01014a3dbe8437541890 100644 --- a/backends/libcommuni/ircnetworkplugin.cpp +++ b/backends/libcommuni/ircnetworkplugin.cpp @@ -53,12 +53,13 @@ void IRCNetworkPlugin::readData() { m_firstPing = false; // Users can join the network without registering if we allow // one user to connect multiple IRC networks. + NetworkPlugin::PluginConfig cfg; if (m_servers.empty()) { - NetworkPlugin::PluginConfig cfg; cfg.setNeedRegistration(false); - cfg.setSupportMUC(true); - sendConfig(cfg); } + cfg.setSupportMUC(true); + cfg.disableJIDEscaping(); + sendConfig(cfg); } std::string d = std::string(m_socket->readAll().data(), availableBytes); diff --git a/include/transport/networkplugin.h b/include/transport/networkplugin.h index 7afe3358e5ecc1e586ce56dda7888bfdd4f9a82d..3230ddb6f726a2e99181a92fa6b0f79a29bdb255 100644 --- a/include/transport/networkplugin.h +++ b/include/transport/networkplugin.h @@ -39,7 +39,8 @@ class NetworkPlugin { class PluginConfig { public: - PluginConfig() : m_needPassword(true), m_needRegistration(false), m_supportMUC(false), m_rawXML(false) {} + PluginConfig() : m_needPassword(true), m_needRegistration(false), m_supportMUC(false), m_rawXML(false), + m_disableJIDEscaping(false) {} virtual ~PluginConfig() {} void setNeedRegistration(bool needRegistration = false) { m_needRegistration = needRegistration; } @@ -47,12 +48,14 @@ class NetworkPlugin { void setSupportMUC(bool supportMUC = true) { m_supportMUC = supportMUC; } void setExtraFields(const std::vector &fields) { m_extraFields = fields; } void setRawXML(bool rawXML = false) { m_rawXML = rawXML; } + void disableJIDEscaping() { m_disableJIDEscaping = true; } private: bool m_needPassword; bool m_needRegistration; bool m_supportMUC; bool m_rawXML; + bool m_disableJIDEscaping; std::vector m_extraFields; friend class NetworkPlugin; diff --git a/plugin/cpp/networkplugin.cpp b/plugin/cpp/networkplugin.cpp index fb660b1f02102089ec43d5d0234f3ee953370197..978d3e5647799d4822a89245f0113077323ad700 100644 --- a/plugin/cpp/networkplugin.cpp +++ b/plugin/cpp/networkplugin.cpp @@ -74,6 +74,8 @@ void NetworkPlugin::sendConfig(const PluginConfig &cfg) { data += "[features]\n"; data += std::string("muc=") + (cfg.m_supportMUC ? "1" : "0") + "\n"; data += std::string("rawxml=") + (cfg.m_rawXML ? "1" : "0") + "\n"; + data += std::string("disable_jid_escaping=") + (cfg.m_disableJIDEscaping ? "1" : "0") + "\n"; + pbnetwork::BackendConfig m; m.set_config(data); diff --git a/src/config.cpp b/src/config.cpp index f1a476ae68cb821e001aa661f95d14049349e1b6..7df60defa0de9d2cc79239adad349d27659468b1 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -316,6 +316,7 @@ void Config::updateBackendConfig(const std::string &backendConfig) { ("features.receipts", value()->default_value(false), "") ("features.muc", value()->default_value(false), "") ("features.rawxml", value()->default_value(false), "") + ("features.disable_jid_escaping", value()->default_value(false), "") ; std::stringstream ifs(backendConfig); @@ -325,6 +326,12 @@ void Config::updateBackendConfig(const std::string &backendConfig) { notify(m_backendConfig); onBackendConfigUpdated(); + + if (CONFIG_BOOL_DEFAULTED(this, "features.disable_jid_escaping", false)) { + Variables::iterator it(m_variables.find("service.jid_escaping")); + boost::program_options::variable_value& vx(it->second); + vx.value() = false; + } } Config *Config::createFromArgs(int argc, char **argv, std::string &error, std::string &host, int &port) { diff --git a/src/tests/config.cpp b/src/tests/config.cpp index 24776a7437a5d9d61f390b28e41d4d99a8029649..a53fc11f0cd99f502d1823648bd60ee306a94261 100644 --- a/src/tests/config.cpp +++ b/src/tests/config.cpp @@ -26,6 +26,7 @@ class ConfigTest : public CPPUNIT_NS :: TestFixture{ CPPUNIT_TEST_SUITE(ConfigTest); CPPUNIT_TEST(setStringTwice); CPPUNIT_TEST(updateBackendConfig); + CPPUNIT_TEST(updateBackendConfigJIDEscaping); CPPUNIT_TEST(unregisteredList); CPPUNIT_TEST(unregisteredString); CPPUNIT_TEST(unregisteredListAsString); @@ -57,6 +58,16 @@ class ConfigTest : public CPPUNIT_NS :: TestFixture{ CPPUNIT_ASSERT_EQUAL(false, CONFIG_BOOL(&cfg, "registration.needPassword")); } + void updateBackendConfigJIDEscaping() { + Config cfg; + std::istringstream ifs("service.jids = irc.freenode.org\n"); + cfg.load(ifs); + CPPUNIT_ASSERT_EQUAL(true, CONFIG_BOOL(&cfg, "service.jid_escaping")); + + cfg.updateBackendConfig("[features]\ndisable_jid_escaping=1\n"); + CPPUNIT_ASSERT_EQUAL(false, CONFIG_BOOL(&cfg, "service.jid_escaping")); + } + void unregisteredList() { Config cfg; std::istringstream ifs("service.irc_server = irc.freenode.org\nservice.irc_server=localhost\n");