Consider the nick change only if it is NOT a join
This commit is contained in:
@@ -159,18 +159,6 @@ void BiboumiComponent::handle_presence(const Stanza& stanza)
|
|||||||
const std::string own_nick = bridge->get_own_nick(iid);
|
const std::string own_nick = bridge->get_own_nick(iid);
|
||||||
const XmlNode* x = stanza.get_child("x", MUC_NS);
|
const XmlNode* x = stanza.get_child("x", MUC_NS);
|
||||||
const IrcClient* irc = bridge->find_irc_client(iid.get_server());
|
const IrcClient* irc = bridge->find_irc_client(iid.get_server());
|
||||||
if (irc)
|
|
||||||
{
|
|
||||||
const auto chan = irc->find_channel(iid.get_local());
|
|
||||||
if (chan->joined)
|
|
||||||
bridge->send_irc_nick_change(iid, to.resource, from.resource);
|
|
||||||
else if (!x)
|
|
||||||
{ // send an error if we are not joined yet, instead of treating it as a join
|
|
||||||
this->send_stanza_error("presence", from_str, to_str, id,
|
|
||||||
"modify", "not-acceptable",
|
|
||||||
"You are not joined to this MUC.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// if there is no <x/>, this is a presence status update, we don’t care about those
|
// if there is no <x/>, this is a presence status update, we don’t care about those
|
||||||
if (x)
|
if (x)
|
||||||
{
|
{
|
||||||
@@ -202,6 +190,19 @@ void BiboumiComponent::handle_presence(const Stanza& stanza)
|
|||||||
bridge->join_irc_channel(iid, to.resource, password ? password->get_inner(): "",
|
bridge->join_irc_channel(iid, to.resource, password ? password->get_inner(): "",
|
||||||
from.resource, history_limit);
|
from.resource, history_limit);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (irc)
|
||||||
|
{
|
||||||
|
const auto chan = irc->find_channel(iid.get_local());
|
||||||
|
if (chan && chan->joined)
|
||||||
|
bridge->send_irc_nick_change(iid, to.resource, from.resource);
|
||||||
|
else
|
||||||
|
{ // send an error if we are not joined yet, instead of treating it as a join
|
||||||
|
this->send_stanza_error("presence", from_str, to_str, id, "modify", "not-acceptable", "You are not joined to this MUC.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (type == "unavailable")
|
else if (type == "unavailable")
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user