Include a private and no-copy nodes in private <message/> to avoid carbon duplication
This commit is contained in:
@@ -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
|
|||||||
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:
|
|||||||
* 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
|
|||||||
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
|
|||||||
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user