Commit dfc0793e authored by louiz’'s avatar louiz’

Include a private and no-copy nodes in private <message/> to avoid carbon duplication

parent 548e4ad4
...@@ -273,7 +273,8 @@ void* XmppComponent::get_receive_buffer(const size_t size) const ...@@ -273,7 +273,8 @@ void* XmppComponent::get_receive_buffer(const size_t size) const
return this->parser.get_buffer(size); 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"); XmlNode node("message");
node["to"] = to; node["to"] = to;
...@@ -294,6 +295,18 @@ void XmppComponent::send_message(const std::string& from, Xmpp::body&& body, con ...@@ -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))); html.add_child(std::move(std::get<1>(body)));
node.add_child(std::move(html)); 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); this->send_stanza(node);
} }
......
...@@ -109,9 +109,8 @@ public: ...@@ -109,9 +109,8 @@ public:
* If fulljid is false, the provided 'from' doesn't contain the * If fulljid is false, the provided 'from' doesn't contain the
* server-part of the JID and must be added. * server-part of the JID and must be added.
*/ */
void send_message(const std::string& from, Xmpp::body&& body, void send_message(const std::string& from, Xmpp::body&& body, const std::string& to,
const std::string& to, const std::string& type, const std::string& type, const bool fulljid, const bool nocopy=false);
const bool fulljid=false);
/** /**
* Send a join from a new participant * Send a join from a new participant
*/ */
......
...@@ -771,13 +771,13 @@ void Bridge::send_message(const Iid& iid, const std::string& nick, const std::st ...@@ -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(); 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()}]) 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->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 else
{ {
for (const auto& resource: this->resources_in_server[iid.get_server()]) 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->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 ...@@ -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}); const auto encoding = in_encoding_for(*this, {from, this});
for (const auto& resource: this->resources_in_server[from]) 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);
} }
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment