From 3db69407e869bbc913712fbed1722c688309ac29 Mon Sep 17 00:00:00 2001 From: HanzZ Date: Sun, 10 Feb 2013 14:12:03 +0100 Subject: [PATCH] use proper escaping for MUCs when forwarding raw xml stanzas --- src/networkpluginserver.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/networkpluginserver.cpp b/src/networkpluginserver.cpp index 3b189abb..db177f78 100644 --- a/src/networkpluginserver.cpp +++ b/src/networkpluginserver.cpp @@ -1003,6 +1003,8 @@ void NetworkPluginServer::handleElement(boost::shared_ptr elemen return; Swift::JID originalJID = stanza->getFrom(); + NetworkConversation *conv = (NetworkConversation *) user->getConversationManager()->getConversation(originalJID.toBare()); + LocalBuddy *buddy = (LocalBuddy *) user->getRosterManager()->getBuddy(stanza->getFrom().toBare()); if (buddy) { const Swift::JID &jid = buddy->getJID(); @@ -1015,14 +1017,21 @@ void NetworkPluginServer::handleElement(boost::shared_ptr elemen } else { std::string name = stanza->getFrom().toBare(); - if (CONFIG_BOOL_DEFAULTED(m_config, "service.jid_escaping", true)) { - name = Swift::JID::getEscapedNode(name); - } - else { + if (conv && conv->isMUC()) { if (name.find_last_of("@") != std::string::npos) { name.replace(name.find_last_of("@"), 1, "%"); } } + else { + if (CONFIG_BOOL_DEFAULTED(m_config, "service.jid_escaping", true)) { + name = Swift::JID::getEscapedNode(name); + } + else { + if (name.find_last_of("@") != std::string::npos) { + name.replace(name.find_last_of("@"), 1, "%"); + } + } + } if (stanza->getFrom().getResource().empty()) { stanza->setFrom(Swift::JID(name, m_component->getJID().toString())); } @@ -1033,7 +1042,6 @@ void NetworkPluginServer::handleElement(boost::shared_ptr elemen boost::shared_ptr message = boost::dynamic_pointer_cast(stanza); if (message) { - NetworkConversation *conv = (NetworkConversation *) user->getConversationManager()->getConversation(originalJID.toBare()); if (conv) { conv->handleRawMessage(message); return;