Handle forced-join by just sending an invitation

fix #3116
This commit is contained in:
louiz’
2016-10-23 23:59:21 +02:00
parent 00eb18bae8
commit c3bb9fe2e2
2 changed files with 17 additions and 3 deletions
+12 -1
View File
@@ -839,9 +839,20 @@ void Bridge::send_xmpp_message(const std::string& from, const std::string& autho
void Bridge::send_user_join(const std::string& hostname, const std::string& chan_name,
const IrcUser* user, const char user_mode, const bool self)
{
for (const auto& resource: this->resources_in_chan[ChannelKey{chan_name, hostname}])
const auto resources = this->resources_in_chan[ChannelKey{chan_name, hostname}];
if (self && resources.empty())
{ // This was a forced join: no client ever asked to join this room,
// but the server tells us we are in that room anyway. XMPP can’t
// do that, so we invite all the resources to join that channel.
const Iid iid(chan_name, hostname, Iid::Type::Channel);
this->send_xmpp_invitation(iid, "");
}
else
{
for (const auto& resource: resources)
this->send_user_join(hostname, chan_name, user, user_mode, self, resource);
}
}
void Bridge::send_user_join(const std::string& hostname, const std::string& chan_name,
const IrcUser* user, const char user_mode,
+3
View File
@@ -855,6 +855,9 @@ void BiboumiComponent::send_invitation(const std::string& room_target,
XmlNode x("x");
x["xmlns"] = MUC_USER_NS;
XmlNode invite("invite");
if (author_nick.empty())
invite["from"] = room_target + "@" + this->served_hostname;
else
invite["from"] = room_target + "@" + this->served_hostname + "/" + author_nick;
x.add_child(std::move(invite));
message.add_child(std::move(x));