Do not reply with an error when receiving a presence for a user JID
fix #3224
This commit is contained in:
@@ -210,11 +210,8 @@ void BiboumiComponent::handle_presence(const Stanza& stanza)
|
|||||||
this->send_presence_to_contact(to_str, from.bare(), "");
|
this->send_presence_to_contact(to_str, from.bare(), "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else if (iid.type == Iid::Type::User)
|
||||||
{
|
{ // Do nothing yet
|
||||||
// A user wants to join an invalid IRC channel, return a presence error to him/her
|
|
||||||
if (type.empty())
|
|
||||||
this->send_invalid_room_error(to.local, to.resource, from_str);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (const IRCNotConnected& ex)
|
catch (const IRCNotConnected& ex)
|
||||||
|
|||||||
@@ -261,7 +261,6 @@ void XmppComponent::handle_error(const Stanza& stanza)
|
|||||||
if (!this->ever_auth)
|
if (!this->ever_auth)
|
||||||
sd_notifyf(0, "STATUS=Failed to authenticate to the XMPP server: %s", error_message.data());
|
sd_notifyf(0, "STATUS=Failed to authenticate to the XMPP server: %s", error_message.data());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void* XmppComponent::get_receive_buffer(const size_t size) const
|
void* XmppComponent::get_receive_buffer(const size_t size) const
|
||||||
@@ -338,35 +337,6 @@ void XmppComponent::send_user_join(const std::string& from,
|
|||||||
this->send_stanza(presence);
|
this->send_stanza(presence);
|
||||||
}
|
}
|
||||||
|
|
||||||
void XmppComponent::send_invalid_room_error(const std::string& muc_name,
|
|
||||||
const std::string& nick,
|
|
||||||
const std::string& to)
|
|
||||||
{
|
|
||||||
Stanza presence("presence");
|
|
||||||
{
|
|
||||||
if (!muc_name.empty ())
|
|
||||||
presence["from"] = muc_name + "@" + this->served_hostname + "/" + nick;
|
|
||||||
else
|
|
||||||
presence["from"] = this->served_hostname;
|
|
||||||
presence["to"] = to;
|
|
||||||
presence["type"] = "error";
|
|
||||||
XmlSubNode x(presence, "x");
|
|
||||||
x["xmlns"] = MUC_NS;
|
|
||||||
XmlSubNode error(presence, "error");
|
|
||||||
error["by"] = muc_name + "@" + this->served_hostname;
|
|
||||||
error["type"] = "cancel";
|
|
||||||
XmlSubNode item_not_found(error, "item-not-found");
|
|
||||||
item_not_found["xmlns"] = STANZA_NS;
|
|
||||||
XmlSubNode text(error, "text");
|
|
||||||
text["xmlns"] = STANZA_NS;
|
|
||||||
text["xml:lang"] = "en";
|
|
||||||
text.set_inner(muc_name +
|
|
||||||
" is not a valid IRC channel name. A correct room jid is of the form: #<chan>%<server>@" +
|
|
||||||
this->served_hostname);
|
|
||||||
}
|
|
||||||
this->send_stanza(presence);
|
|
||||||
}
|
|
||||||
|
|
||||||
void XmppComponent::send_topic(const std::string& from, Xmpp::body&& topic, const std::string& to, const std::string& who)
|
void XmppComponent::send_topic(const std::string& from, Xmpp::body&& topic, const std::string& to, const std::string& who)
|
||||||
{
|
{
|
||||||
Stanza message("message");
|
Stanza message("message");
|
||||||
|
|||||||
@@ -123,12 +123,6 @@ public:
|
|||||||
const std::string& role,
|
const std::string& role,
|
||||||
const std::string& to,
|
const std::string& to,
|
||||||
const bool self);
|
const bool self);
|
||||||
/**
|
|
||||||
* Send an error to indicate that the user tried to join an invalid room
|
|
||||||
*/
|
|
||||||
void send_invalid_room_error(const std::string& muc_jid,
|
|
||||||
const std::string& nick,
|
|
||||||
const std::string& to);
|
|
||||||
/**
|
/**
|
||||||
* Send the MUC topic to the user
|
* Send the MUC topic to the user
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -2696,22 +2696,6 @@ if __name__ == '__main__':
|
|||||||
partial(send_stanza, "<iq type='set' id='command2' from='{jid_one}/{resource_one}' to='{biboumi_host}'><command xmlns='http://jabber.org/protocol/commands' node='get-irc-connection-info' action='execute' /></iq>"),
|
partial(send_stanza, "<iq type='set' id='command2' from='{jid_one}/{resource_one}' to='{biboumi_host}'><command xmlns='http://jabber.org/protocol/commands' node='get-irc-connection-info' action='execute' /></iq>"),
|
||||||
partial(expect_stanza, r"/iq/commands:command/commands:note[re:test(text(), 'Connected to IRC server irc.localhost on port 6667 since \d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d \(\d+ seconds ago\)\.\n#foo from 1 resource: {resource_one}.*')]"),
|
partial(expect_stanza, r"/iq/commands:command/commands:note[re:test(text(), 'Connected to IRC server irc.localhost on port 6667 since \d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d \(\d+ seconds ago\)\.\n#foo from 1 resource: {resource_one}.*')]"),
|
||||||
], conf='fixed_server'),
|
], conf='fixed_server'),
|
||||||
Scenario("invalid_room_jid",
|
|
||||||
[
|
|
||||||
handshake_sequence(),
|
|
||||||
partial(send_stanza, "<presence from='{jid_one}/{resource_one}' to='invalid%{irc_server_one}/{nick_one}' />"),
|
|
||||||
partial(expect_stanza, ("/presence[@type='error'][@to='{jid_one}/{resource_one}'][@from='invalid%{irc_server_one}/{nick_one}']/error[@type='cancel']/stanza:item-not-found",
|
|
||||||
"/presence/muc:x",
|
|
||||||
"/presence/error/stanza:text")),
|
|
||||||
]),
|
|
||||||
Scenario("invalid_room_jid_fixed",
|
|
||||||
[
|
|
||||||
handshake_sequence(),
|
|
||||||
partial(send_stanza, "<presence from='{jid_one}/{resource_one}' to='invalid@{biboumi_host}/{nick_one}' />"),
|
|
||||||
partial(expect_stanza, ("/presence[@type='error'][@to='{jid_one}/{resource_one}'][@from='invalid@{biboumi_host}/{nick_one}']/error[@type='cancel']/stanza:item-not-found",
|
|
||||||
"/presence/muc:x",
|
|
||||||
"/presence/error/stanza:text")),
|
|
||||||
], conf='fixed_server'),
|
|
||||||
Scenario("irc_server_presence_subscription",
|
Scenario("irc_server_presence_subscription",
|
||||||
[
|
[
|
||||||
handshake_sequence(),
|
handshake_sequence(),
|
||||||
|
|||||||
Reference in New Issue
Block a user