~singpolyma/biboumi

dfc0793ef2fec12d2613b53b27f1a7f85dae2688 — louiz’ 6 years ago 548e4ad
Include a private and no-copy nodes in private <message/> to avoid carbon duplication
3 files changed, 19 insertions(+), 7 deletions(-)

M louloulibs/xmpp/xmpp_component.cpp
M louloulibs/xmpp/xmpp_component.hpp
M src/bridge/bridge.cpp
M louloulibs/xmpp/xmpp_component.cpp => louloulibs/xmpp/xmpp_component.cpp +14 -1
@@ 273,7 273,8 @@ void* XmppComponent::get_receive_buffer(const size_t size) const
  return this->parser.get_buffer(size);
}

void XmppComponent::send_message(const std::string& from, Xmpp::body&& body, const std::string& to, const std::string& type, const bool fulljid)
void XmppComponent::send_message(const std::string& from, Xmpp::body&& body, const std::string& to,
                                 const std::string& type, const bool fulljid, const bool nocopy)
{
  XmlNode node("message");
  node["to"] = to;


@@ 294,6 295,18 @@ void XmppComponent::send_message(const std::string& from, Xmpp::body&& body, con
      html.add_child(std::move(std::get<1>(body)));
      node.add_child(std::move(html));
    }

  if (nocopy)
    {
      XmlNode private_node("private");
      private_node["xmlns"] = "urn:xmpp:carbons:2";
      node.add_child(std::move(private_node));

      XmlNode nocopy("no-copy");
      nocopy["xmlns"] = "urn:xmpp:hints";
      node.add_child(std::move(nocopy));
    }

  this->send_stanza(node);
}


M louloulibs/xmpp/xmpp_component.hpp => louloulibs/xmpp/xmpp_component.hpp +2 -3
@@ 109,9 109,8 @@ public:
   * If fulljid is false, the provided 'from' doesn't contain the
   * server-part of the JID and must be added.
   */
  void send_message(const std::string& from, Xmpp::body&& body,
                    const std::string& to, const std::string& type,
                    const bool fulljid=false);
  void send_message(const std::string& from, Xmpp::body&& body, const std::string& to,
                    const std::string& type, const bool fulljid, const bool nocopy=false);
  /**
   * Send a join from a new participant
   */

M src/bridge/bridge.cpp => src/bridge/bridge.cpp +3 -3
@@ 771,13 771,13 @@ void Bridge::send_message(const Iid& iid, const std::string& nick, const std::st
          const auto chan_name = Iid(Jid(it->second).local, {}).get_local();
          for (const auto& resource: this->resources_in_chan[ChannelKey{chan_name, iid.get_server()}])
            this->xmpp.send_message(it->second, this->make_xmpp_body(body, encoding),
                                    this->user_jid + "/" + resource, "chat", true);
                                    this->user_jid + "/" + resource, "chat", true, true);
        }
      else
        {
          for (const auto& resource: this->resources_in_server[iid.get_server()])
            this->xmpp.send_message(std::to_string(iid), this->make_xmpp_body(body, encoding),
                                    this->user_jid + "/" + resource, "chat", false);
                                    this->user_jid + "/" + resource, "chat", false, true);
        }
    }
}


@@ 835,7 835,7 @@ void Bridge::send_xmpp_message(const std::string& from, const std::string& autho
  const auto encoding = in_encoding_for(*this, {from, this});
  for (const auto& resource: this->resources_in_server[from])
    {
        this->xmpp.send_message(from, this->make_xmpp_body(body, encoding), this->user_jid + "/" + resource, "chat");
      this->xmpp.send_message(from, this->make_xmpp_body(body, encoding), this->user_jid + "/" + resource, "chat", false, false);
    }
}