use proper escaping for MUCs when forwarding raw xml stanzas

This commit is contained in:
HanzZ 2013-02-10 14:12:03 +01:00
parent 57a728834d
commit 3db69407e8

View file

@ -1003,6 +1003,8 @@ void NetworkPluginServer::handleElement(boost::shared_ptr<Swift::Element> 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<Swift::Element> 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<Swift::Element> elemen
boost::shared_ptr<Swift::Message> message = boost::dynamic_pointer_cast<Swift::Message>(stanza);
if (message) {
NetworkConversation *conv = (NetworkConversation *) user->getConversationManager()->getConversation(originalJID.toBare());
if (conv) {
conv->handleRawMessage(message);
return;