Use generic send_presence_error() instead of almost identical specializations
This commit is contained in:
@@ -331,9 +331,11 @@ void Bridge::send_message(const Iid& iid, const std::string& nick, const std::st
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Bridge::send_join_failed(const Iid& iid, const std::string& nick, const std::string& type, const std::string& condition, const std::string& text)
|
void Bridge::send_presence_error(const Iid& iid, const std::string& nick,
|
||||||
|
const std::string& type, const std::string& condition,
|
||||||
|
const std::string& error_code, const std::string& text)
|
||||||
{
|
{
|
||||||
this->xmpp->send_presence_error(std::to_string(iid), nick, this->user_jid, type, condition, text);
|
this->xmpp->send_presence_error(std::to_string(iid), nick, this->user_jid, type, condition, error_code, text);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Bridge::send_muc_leave(Iid&& iid, std::string&& nick, const std::string& message, const bool self)
|
void Bridge::send_muc_leave(Iid&& iid, std::string&& nick, const std::string& message, const bool self)
|
||||||
@@ -412,7 +414,7 @@ void Bridge::kick_muc_user(Iid&& iid, const std::string& target, const std::stri
|
|||||||
|
|
||||||
void Bridge::send_nickname_conflict_error(const Iid& iid, const std::string& nickname)
|
void Bridge::send_nickname_conflict_error(const Iid& iid, const std::string& nickname)
|
||||||
{
|
{
|
||||||
this->xmpp->send_nickname_conflict_error(std::to_string(iid), nickname, this->user_jid);
|
this->xmpp->send_presence_error(std::to_string(iid), nickname, this->user_jid, "cancel", "conflict", "409", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
void Bridge::send_affiliation_role_change(const Iid& iid, const std::string& target, const char mode)
|
void Bridge::send_affiliation_role_change(const Iid& iid, const std::string& target, const char mode)
|
||||||
|
|||||||
@@ -100,10 +100,9 @@ public:
|
|||||||
*/
|
*/
|
||||||
void send_message(const Iid& iid, const std::string& nick, const std::string& body, const bool muc);
|
void send_message(const Iid& iid, const std::string& nick, const std::string& body, const bool muc);
|
||||||
/**
|
/**
|
||||||
* Send a presence of type error, from a room. This is used to indicate
|
* Send a presence of type error, from a room.
|
||||||
* why joining a room failed.
|
|
||||||
*/
|
*/
|
||||||
void send_join_failed(const Iid& iid, const std::string& nick, const std::string& type, const std::string& condition, const std::string& text);
|
void send_presence_error(const Iid& iid, const std::string& nick, const std::string& type, const std::string& condition, const std::string& error_code, const std::string& text);
|
||||||
/**
|
/**
|
||||||
* Send an unavailable presence from this participant
|
* Send an unavailable presence from this participant
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -77,8 +77,9 @@ void IrcClient::on_connection_failed(const std::string& reason)
|
|||||||
for (const std::string& channel: this->channels_to_join)
|
for (const std::string& channel: this->channels_to_join)
|
||||||
{
|
{
|
||||||
Iid iid(channel + "%" + this->hostname);
|
Iid iid(channel + "%" + this->hostname);
|
||||||
this->bridge->send_join_failed(iid, this->current_nick,
|
this->bridge->send_presence_error(iid, this->current_nick,
|
||||||
"cancel", "item-not-found", reason);
|
"cancel", "item-not-found",
|
||||||
|
"", reason);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // try the next port
|
else // try the next port
|
||||||
|
|||||||
@@ -911,38 +911,13 @@ void XmppComponent::kick_user(const std::string& muc_name,
|
|||||||
this->send_stanza(presence);
|
this->send_stanza(presence);
|
||||||
}
|
}
|
||||||
|
|
||||||
void XmppComponent::send_nickname_conflict_error(const std::string& muc_name,
|
|
||||||
const std::string& nickname,
|
|
||||||
const std::string& jid_to)
|
|
||||||
{
|
|
||||||
Stanza presence("presence");
|
|
||||||
presence["from"] = muc_name + "@" + this->served_hostname + "/" + nickname;
|
|
||||||
presence["to"] = jid_to;
|
|
||||||
presence["type"] = "error";
|
|
||||||
XmlNode x("x");
|
|
||||||
x["xmlns"] = MUC_NS;
|
|
||||||
x.close();
|
|
||||||
presence.add_child(std::move(x));
|
|
||||||
XmlNode error("error");
|
|
||||||
error["by"] = muc_name + "@" + this->served_hostname;
|
|
||||||
error["type"] = "cancel";
|
|
||||||
error["code"] = "409";
|
|
||||||
XmlNode conflict("conflict");
|
|
||||||
conflict["xmlns"] = STANZA_NS;
|
|
||||||
conflict.close();
|
|
||||||
error.add_child(std::move(conflict));
|
|
||||||
error.close();
|
|
||||||
presence.add_child(std::move(error));
|
|
||||||
presence.close();
|
|
||||||
this->send_stanza(presence);
|
|
||||||
}
|
|
||||||
|
|
||||||
void XmppComponent::send_presence_error(const std::string& muc_name,
|
void XmppComponent::send_presence_error(const std::string& muc_name,
|
||||||
const std::string& nickname,
|
const std::string& nickname,
|
||||||
const std::string& jid_to,
|
const std::string& jid_to,
|
||||||
const std::string& type,
|
const std::string& type,
|
||||||
const std::string& condition,
|
const std::string& condition,
|
||||||
const std::string&)
|
const std::string& error_code,
|
||||||
|
const std::string& /* text */)
|
||||||
{
|
{
|
||||||
Stanza presence("presence");
|
Stanza presence("presence");
|
||||||
presence["from"] = muc_name + "@" + this->served_hostname + "/" + nickname;
|
presence["from"] = muc_name + "@" + this->served_hostname + "/" + nickname;
|
||||||
@@ -955,6 +930,8 @@ void XmppComponent::send_presence_error(const std::string& muc_name,
|
|||||||
XmlNode error("error");
|
XmlNode error("error");
|
||||||
error["by"] = muc_name + "@" + this->served_hostname;
|
error["by"] = muc_name + "@" + this->served_hostname;
|
||||||
error["type"] = type;
|
error["type"] = type;
|
||||||
|
if (!error_code.empty())
|
||||||
|
error["code"] = error_code;
|
||||||
XmlNode subnode(condition);
|
XmlNode subnode(condition);
|
||||||
subnode["xmlns"] = STANZA_NS;
|
subnode["xmlns"] = STANZA_NS;
|
||||||
subnode.close();
|
subnode.close();
|
||||||
|
|||||||
@@ -171,21 +171,16 @@ public:
|
|||||||
const std::string& reason,
|
const std::string& reason,
|
||||||
const std::string& author,
|
const std::string& author,
|
||||||
const std::string& jid_to);
|
const std::string& jid_to);
|
||||||
/**
|
|
||||||
* Send a presence type=error with a conflict element
|
|
||||||
*/
|
|
||||||
void send_nickname_conflict_error(const std::string& muc_name,
|
|
||||||
const std::string& nickname,
|
|
||||||
const std::string& jid_to);
|
|
||||||
/**
|
/**
|
||||||
* Send a generic presence error
|
* Send a generic presence error
|
||||||
*/
|
*/
|
||||||
void send_presence_error(const std::string& muc_name,
|
void send_presence_error(const std::string& muc_name,
|
||||||
const std::string& nickname,
|
const std::string& nickname,
|
||||||
const std::string& jid_to,
|
const std::string& jid_to,
|
||||||
const std::string& type,
|
const std::string& type,
|
||||||
const std::string& condition,
|
const std::string& condition,
|
||||||
const std::string& text);
|
const std::string& error_code,
|
||||||
|
const std::string& text);
|
||||||
/**
|
/**
|
||||||
* Send a presence from the MUC indicating a change in the role and/or
|
* Send a presence from the MUC indicating a change in the role and/or
|
||||||
* affiliation of a participant
|
* affiliation of a participant
|
||||||
|
|||||||
Reference in New Issue
Block a user