XmlNodes are now always closed

Remove the close() method and closed attribute. Remove all the calls to
close().  (Save one bool per XmlNode, yay, and save a few ifs and some
useless function calls. At best it should be unnoticeably faster and lighter
and save a few keystrokes in the future)
This commit is contained in:
Florent Le Coz
2015-09-01 04:42:12 +02:00
parent df006a1916
commit e8f22efe34
9 changed files with 10 additions and 145 deletions
-10
View File
@@ -25,7 +25,6 @@ void PingStep1(XmppComponent*, AdhocSession&, XmlNode& command_node)
XmlNode note("note"); XmlNode note("note");
note["type"] = "info"; note["type"] = "info";
note.set_inner("Pong"); note.set_inner("Pong");
note.close();
command_node.add_child(std::move(note)); command_node.add_child(std::move(note));
} }
@@ -35,22 +34,17 @@ void HelloStep1(XmppComponent*, AdhocSession&, XmlNode& command_node)
x["type"] = "form"; x["type"] = "form";
XmlNode title("title"); XmlNode title("title");
title.set_inner("Configure your name."); title.set_inner("Configure your name.");
title.close();
x.add_child(std::move(title)); x.add_child(std::move(title));
XmlNode instructions("instructions"); XmlNode instructions("instructions");
instructions.set_inner("Please provide your name."); instructions.set_inner("Please provide your name.");
instructions.close();
x.add_child(std::move(instructions)); x.add_child(std::move(instructions));
XmlNode name_field("field"); XmlNode name_field("field");
name_field["var"] = "name"; name_field["var"] = "name";
name_field["type"] = "text-single"; name_field["type"] = "text-single";
name_field["label"] = "Your name"; name_field["label"] = "Your name";
XmlNode required("required"); XmlNode required("required");
required.close();
name_field.add_child(std::move(required)); name_field.add_child(std::move(required));
name_field.close();
x.add_child(std::move(name_field)); x.add_child(std::move(name_field));
x.close();
command_node.add_child(std::move(x)); command_node.add_child(std::move(x));
} }
@@ -75,7 +69,6 @@ void HelloStep2(XmppComponent*, AdhocSession& session, XmlNode& command_node)
XmlNode note("note"); XmlNode note("note");
note["type"] = "info"; note["type"] = "info";
note.set_inner("Hello "s + value->get_inner() + "!"s); note.set_inner("Hello "s + value->get_inner() + "!"s);
note.close();
command_node.delete_all_children(); command_node.delete_all_children();
command_node.add_child(std::move(note)); command_node.add_child(std::move(note));
return; return;
@@ -86,9 +79,7 @@ void HelloStep2(XmppComponent*, AdhocSession& session, XmlNode& command_node)
XmlNode error(ADHOC_NS":error"); XmlNode error(ADHOC_NS":error");
error["type"] = "modify"; error["type"] = "modify";
XmlNode condition(STANZA_NS":bad-request"); XmlNode condition(STANZA_NS":bad-request");
condition.close();
error.add_child(std::move(condition)); error.add_child(std::move(condition));
error.close();
command_node.add_child(std::move(error)); command_node.add_child(std::move(error));
session.terminate(); session.terminate();
} }
@@ -100,6 +91,5 @@ void Reload(XmppComponent*, AdhocSession&, XmlNode& command_node)
XmlNode note("note"); XmlNode note("note");
note["type"] = "info"; note["type"] = "info";
note.set_inner("Configuration reloaded."); note.set_inner("Configuration reloaded.");
note.close();
command_node.add_child(std::move(note)); command_node.add_child(std::move(note));
} }
@@ -36,9 +36,7 @@ XmlNode AdhocCommandsHandler::handle_request(const std::string& executor_jid, Xm
XmlNode error(ADHOC_NS":error"); XmlNode error(ADHOC_NS":error");
error["type"] = "cancel"; error["type"] = "cancel";
XmlNode condition(STANZA_NS":item-not-found"); XmlNode condition(STANZA_NS":item-not-found");
condition.close();
error.add_child(std::move(condition)); error.add_child(std::move(condition));
error.close();
command_node.add_child(std::move(error)); command_node.add_child(std::move(error));
} }
else if (command_it->second.is_admin_only() && else if (command_it->second.is_admin_only() &&
@@ -47,9 +45,7 @@ XmlNode AdhocCommandsHandler::handle_request(const std::string& executor_jid, Xm
XmlNode error(ADHOC_NS":error"); XmlNode error(ADHOC_NS":error");
error["type"] = "cancel"; error["type"] = "cancel";
XmlNode condition(STANZA_NS":forbidden"); XmlNode condition(STANZA_NS":forbidden");
condition.close();
error.add_child(std::move(condition)); error.add_child(std::move(condition));
error.close();
command_node.add_child(std::move(error)); command_node.add_child(std::move(error));
} }
else else
@@ -72,9 +68,7 @@ XmlNode AdhocCommandsHandler::handle_request(const std::string& executor_jid, Xm
XmlNode error(ADHOC_NS":error"); XmlNode error(ADHOC_NS":error");
error["type"] = "modify"; error["type"] = "modify";
XmlNode condition(STANZA_NS":bad-request"); XmlNode condition(STANZA_NS":bad-request");
condition.close();
error.add_child(std::move(condition)); error.add_child(std::move(condition));
error.close();
command_node.add_child(std::move(error)); command_node.add_child(std::move(error));
} }
else if (action == "execute" || action == "next" || action == "complete") else if (action == "execute" || action == "next" || action == "complete")
@@ -95,9 +89,7 @@ XmlNode AdhocCommandsHandler::handle_request(const std::string& executor_jid, Xm
command_node["status"] = "executing"; command_node["status"] = "executing";
XmlNode actions("actions"); XmlNode actions("actions");
XmlNode next("next"); XmlNode next("next");
next.close();
actions.add_child(std::move(next)); actions.add_child(std::move(next));
actions.close();
command_node.add_child(std::move(actions)); command_node.add_child(std::move(actions));
} }
} }
@@ -112,9 +104,7 @@ XmlNode AdhocCommandsHandler::handle_request(const std::string& executor_jid, Xm
XmlNode error(ADHOC_NS":error"); XmlNode error(ADHOC_NS":error");
error["type"] = "modify"; error["type"] = "modify";
XmlNode condition(STANZA_NS":bad-request"); XmlNode condition(STANZA_NS":bad-request");
condition.close();
error.add_child(std::move(condition)); error.add_child(std::move(condition));
error.close();
command_node.add_child(std::move(error)); command_node.add_child(std::move(error));
} }
} }
+6 -72
View File
@@ -89,12 +89,9 @@ void XmppComponent::on_connected()
{ {
log_info("connected to XMPP server"); log_info("connected to XMPP server");
this->first_connection_try = true; this->first_connection_try = true;
XmlNode node("", nullptr); this->send_data("<stream:stream to='");
node.set_name("stream:stream"); this->send_data(std::string{this->served_hostname});
node["xmlns"] = COMPONENT_NS; this->send_data("' xmlns:stream='http://etherx.jabber.org/streams' xmlns='" COMPONENT_NS "'>");
node["xmlns:stream"] = STREAM_NS;
node["to"] = this->served_hostname;
this->send_stanza(node);
this->doc_open = true; this->doc_open = true;
// We may have some pending data to send: this happens when we try to send // We may have some pending data to send: this happens when we try to send
// some data before we are actually connected. We send that data right now, if any // some data before we are actually connected. We send that data right now, if any
@@ -152,10 +149,9 @@ void XmppComponent::on_remote_stream_open(const XmlNode& node)
sprintf(digest + (i*2), "%02x", result[i]); sprintf(digest + (i*2), "%02x", result[i]);
digest[HASH_LENGTH * 2] = '\0'; digest[HASH_LENGTH * 2] = '\0';
Stanza handshake(COMPONENT_NS":handshake"); this->send_data("<handshake xmlns='" COMPONENT_NS "'>");
handshake.set_inner(digest); this->send_data(digest);
handshake.close(); this->send_data("</handshake>");
this->send_stanza(handshake);
} }
void XmppComponent::on_remote_stream_close(const XmlNode& node) void XmppComponent::on_remote_stream_close(const XmlNode& node)
@@ -192,9 +188,7 @@ void XmppComponent::send_stream_error(const std::string& name, const std::string
error["xmlns"] = STREAM_NS; error["xmlns"] = STREAM_NS;
if (!explanation.empty()) if (!explanation.empty())
error.set_inner(explanation); error.set_inner(explanation);
error.close();
node.add_child(std::move(error)); node.add_child(std::move(error));
node.close();
this->send_stanza(node); this->send_stanza(node);
} }
@@ -220,19 +214,15 @@ void XmppComponent::send_stanza_error(const std::string& kind, const std::string
error["type"] = error_type; error["type"] = error_type;
XmlNode inner_error(defined_condition); XmlNode inner_error(defined_condition);
inner_error["xmlns"] = STANZA_NS; inner_error["xmlns"] = STANZA_NS;
inner_error.close();
error.add_child(std::move(inner_error)); error.add_child(std::move(inner_error));
if (!text.empty()) if (!text.empty())
{ {
XmlNode text_node("text"); XmlNode text_node("text");
text_node["xmlns"] = STANZA_NS; text_node["xmlns"] = STANZA_NS;
text_node.set_inner(text); text_node.set_inner(text);
text_node.close();
error.add_child(std::move(text_node)); error.add_child(std::move(text_node));
} }
error.close();
node.add_child(std::move(error)); node.add_child(std::move(error));
node.close();
this->send_stanza(node); this->send_stanza(node);
} }
@@ -295,7 +285,6 @@ void XmppComponent::send_message(const std::string& from, Xmpp::body&& body, con
node["type"] = type; node["type"] = type;
XmlNode body_node("body"); XmlNode body_node("body");
body_node.set_inner(std::get<0>(body)); body_node.set_inner(std::get<0>(body));
body_node.close();
node.add_child(std::move(body_node)); node.add_child(std::move(body_node));
if (std::get<1>(body)) if (std::get<1>(body))
{ {
@@ -303,10 +292,8 @@ void XmppComponent::send_message(const std::string& from, Xmpp::body&& body, con
html["xmlns"] = XHTMLIM_NS; html["xmlns"] = XHTMLIM_NS;
// Pass the ownership of the pointer to this xmlnode // Pass the ownership of the pointer to this xmlnode
html.add_child(std::get<1>(body).release()); html.add_child(std::get<1>(body).release());
html.close();
node.add_child(std::move(html)); node.add_child(std::move(html));
} }
node.close();
this->send_stanza(node); this->send_stanza(node);
} }
@@ -336,19 +323,15 @@ void XmppComponent::send_user_join(const std::string& from,
if (!preped_jid.empty()) if (!preped_jid.empty())
item["jid"] = preped_jid; item["jid"] = preped_jid;
} }
item.close();
x.add_child(std::move(item)); x.add_child(std::move(item));
if (self) if (self)
{ {
XmlNode status("status"); XmlNode status("status");
status["code"] = "110"; status["code"] = "110";
status.close();
x.add_child(std::move(status)); x.add_child(std::move(status));
} }
x.close();
node.add_child(std::move(x)); node.add_child(std::move(x));
node.close();
this->send_stanza(node); this->send_stanza(node);
} }
@@ -365,14 +348,12 @@ void XmppComponent::send_invalid_room_error(const std::string& muc_name,
presence["type"] = "error"; presence["type"] = "error";
XmlNode x("x"); XmlNode x("x");
x["xmlns"] = MUC_NS; x["xmlns"] = MUC_NS;
x.close();
presence.add_child(std::move(x)); presence.add_child(std::move(x));
XmlNode error("error"); XmlNode error("error");
error["by"] = muc_name + "@" + this->served_hostname; error["by"] = muc_name + "@" + this->served_hostname;
error["type"] = "cancel"; error["type"] = "cancel";
XmlNode item_not_found("item-not-found"); XmlNode item_not_found("item-not-found");
item_not_found["xmlns"] = STANZA_NS; item_not_found["xmlns"] = STANZA_NS;
item_not_found.close();
error.add_child(std::move(item_not_found)); error.add_child(std::move(item_not_found));
XmlNode text("text"); XmlNode text("text");
text["xmlns"] = STANZA_NS; text["xmlns"] = STANZA_NS;
@@ -380,11 +361,8 @@ void XmppComponent::send_invalid_room_error(const std::string& muc_name,
text.set_inner(muc_name + text.set_inner(muc_name +
" is not a valid IRC channel name. A correct room jid is of the form: #<chan>%<server>@" + " is not a valid IRC channel name. A correct room jid is of the form: #<chan>%<server>@" +
this->served_hostname); this->served_hostname);
text.close();
error.add_child(std::move(text)); error.add_child(std::move(text));
error.close();
presence.add_child(std::move(error)); presence.add_child(std::move(error));
presence.close();
this->send_stanza(presence); this->send_stanza(presence);
} }
@@ -396,13 +374,11 @@ void XmppComponent::send_invalid_user_error(const std::string& user_name, const
message["type"] = "error"; message["type"] = "error";
XmlNode x("x"); XmlNode x("x");
x["xmlns"] = MUC_NS; x["xmlns"] = MUC_NS;
x.close();
message.add_child(std::move(x)); message.add_child(std::move(x));
XmlNode error("error"); XmlNode error("error");
error["type"] = "cancel"; error["type"] = "cancel";
XmlNode item_not_found("item-not-found"); XmlNode item_not_found("item-not-found");
item_not_found["xmlns"] = STANZA_NS; item_not_found["xmlns"] = STANZA_NS;
item_not_found.close();
error.add_child(std::move(item_not_found)); error.add_child(std::move(item_not_found));
XmlNode text("text"); XmlNode text("text");
text["xmlns"] = STANZA_NS; text["xmlns"] = STANZA_NS;
@@ -410,11 +386,8 @@ void XmppComponent::send_invalid_user_error(const std::string& user_name, const
text.set_inner(user_name + text.set_inner(user_name +
" is not a valid IRC user name. A correct user jid is of the form: <nick>!<server>@" + " is not a valid IRC user name. A correct user jid is of the form: <nick>!<server>@" +
this->served_hostname); this->served_hostname);
text.close();
error.add_child(std::move(text)); error.add_child(std::move(text));
error.close();
message.add_child(std::move(error)); message.add_child(std::move(error));
message.close();
this->send_stanza(message); this->send_stanza(message);
} }
@@ -426,9 +399,7 @@ void XmppComponent::send_topic(const std::string& from, Xmpp::body&& topic, cons
message["type"] = "groupchat"; message["type"] = "groupchat";
XmlNode subject("subject"); XmlNode subject("subject");
subject.set_inner(std::get<0>(topic)); subject.set_inner(std::get<0>(topic));
subject.close();
message.add_child(std::move(subject)); message.add_child(std::move(subject));
message.close();
this->send_stanza(message); this->send_stanza(message);
} }
@@ -443,7 +414,6 @@ void XmppComponent::send_muc_message(const std::string& muc_name, const std::str
message["type"] = "groupchat"; message["type"] = "groupchat";
XmlNode body("body"); XmlNode body("body");
body.set_inner(std::get<0>(xmpp_body)); body.set_inner(std::get<0>(xmpp_body));
body.close();
message.add_child(std::move(body)); message.add_child(std::move(body));
if (std::get<1>(xmpp_body)) if (std::get<1>(xmpp_body))
{ {
@@ -451,10 +421,8 @@ void XmppComponent::send_muc_message(const std::string& muc_name, const std::str
html["xmlns"] = XHTMLIM_NS; html["xmlns"] = XHTMLIM_NS;
// Pass the ownership of the pointer to this xmlnode // Pass the ownership of the pointer to this xmlnode
html.add_child(std::get<1>(xmpp_body).release()); html.add_child(std::get<1>(xmpp_body).release());
html.close();
message.add_child(std::move(html)); message.add_child(std::move(html));
} }
message.close();
this->send_stanza(message); this->send_stanza(message);
} }
@@ -471,19 +439,15 @@ void XmppComponent::send_muc_leave(const std::string& muc_name, std::string&& ni
{ {
XmlNode status("status"); XmlNode status("status");
status["code"] = "110"; status["code"] = "110";
status.close();
x.add_child(std::move(status)); x.add_child(std::move(status));
} }
x.close();
presence.add_child(std::move(x)); presence.add_child(std::move(x));
if (!message_str.empty()) if (!message_str.empty())
{ {
XmlNode status("status"); XmlNode status("status");
status.set_inner(message_str); status.set_inner(message_str);
status.close();
presence.add_child(std::move(status)); presence.add_child(std::move(status));
} }
presence.close();
this->send_stanza(presence); this->send_stanza(presence);
} }
@@ -503,22 +467,17 @@ void XmppComponent::send_nick_change(const std::string& muc_name,
x["xmlns"] = MUC_USER_NS; x["xmlns"] = MUC_USER_NS;
XmlNode item("item"); XmlNode item("item");
item["nick"] = new_nick; item["nick"] = new_nick;
item.close();
x.add_child(std::move(item)); x.add_child(std::move(item));
XmlNode status("status"); XmlNode status("status");
status["code"] = "303"; status["code"] = "303";
status.close();
x.add_child(std::move(status)); x.add_child(std::move(status));
if (self) if (self)
{ {
XmlNode status2("status"); XmlNode status2("status");
status2["code"] = "110"; status2["code"] = "110";
status2.close();
x.add_child(std::move(status2)); x.add_child(std::move(status2));
} }
x.close();
presence.add_child(std::move(x)); presence.add_child(std::move(x));
presence.close();
this->send_stanza(presence); this->send_stanza(presence);
this->send_user_join(muc_name, new_nick, "", affiliation, role, jid_to, self); this->send_user_join(muc_name, new_nick, "", affiliation, role, jid_to, self);
@@ -542,21 +501,15 @@ void XmppComponent::kick_user(const std::string& muc_name,
XmlNode actor("actor"); XmlNode actor("actor");
actor["nick"] = author; actor["nick"] = author;
actor["jid"] = author; // backward compatibility with old clients actor["jid"] = author; // backward compatibility with old clients
actor.close();
item.add_child(std::move(actor)); item.add_child(std::move(actor));
XmlNode reason("reason"); XmlNode reason("reason");
reason.set_inner(txt); reason.set_inner(txt);
reason.close();
item.add_child(std::move(reason)); item.add_child(std::move(reason));
item.close();
x.add_child(std::move(item)); x.add_child(std::move(item));
XmlNode status("status"); XmlNode status("status");
status["code"] = "307"; status["code"] = "307";
status.close();
x.add_child(std::move(status)); x.add_child(std::move(status));
x.close();
presence.add_child(std::move(x)); presence.add_child(std::move(x));
presence.close();
this->send_stanza(presence); this->send_stanza(presence);
} }
@@ -574,7 +527,6 @@ void XmppComponent::send_presence_error(const std::string& muc_name,
presence["type"] = "error"; presence["type"] = "error";
XmlNode x("x"); XmlNode x("x");
x["xmlns"] = MUC_NS; x["xmlns"] = MUC_NS;
x.close();
presence.add_child(std::move(x)); presence.add_child(std::move(x));
XmlNode error("error"); XmlNode error("error");
error["by"] = muc_name + "@" + this->served_hostname; error["by"] = muc_name + "@" + this->served_hostname;
@@ -583,11 +535,8 @@ void XmppComponent::send_presence_error(const std::string& muc_name,
error["code"] = error_code; error["code"] = error_code;
XmlNode subnode(condition); XmlNode subnode(condition);
subnode["xmlns"] = STANZA_NS; subnode["xmlns"] = STANZA_NS;
subnode.close();
error.add_child(std::move(subnode)); error.add_child(std::move(subnode));
error.close();
presence.add_child(std::move(error)); presence.add_child(std::move(error));
presence.close();
this->send_stanza(presence); this->send_stanza(presence);
} }
@@ -605,11 +554,8 @@ void XmppComponent::send_affiliation_role_change(const std::string& muc_name,
XmlNode item("item"); XmlNode item("item");
item["affiliation"] = affiliation; item["affiliation"] = affiliation;
item["role"] = role; item["role"] = role;
item.close();
x.add_child(std::move(item)); x.add_child(std::move(item));
x.close();
presence.add_child(std::move(x)); presence.add_child(std::move(x));
presence.close();
this->send_stanza(presence); this->send_stanza(presence);
} }
@@ -627,27 +573,21 @@ void XmppComponent::send_version(const std::string& id, const std::string& jid_t
{ {
XmlNode name("name"); XmlNode name("name");
name.set_inner("biboumi"); name.set_inner("biboumi");
name.close();
query.add_child(std::move(name)); query.add_child(std::move(name));
XmlNode version("version"); XmlNode version("version");
version.set_inner(SOFTWARE_VERSION); version.set_inner(SOFTWARE_VERSION);
version.close();
query.add_child(std::move(version)); query.add_child(std::move(version));
XmlNode os("os"); XmlNode os("os");
os.set_inner(SYSTEM_NAME); os.set_inner(SYSTEM_NAME);
os.close();
query.add_child(std::move(os)); query.add_child(std::move(os));
} }
else else
{ {
XmlNode name("name"); XmlNode name("name");
name.set_inner(version); name.set_inner(version);
name.close();
query.add_child(std::move(name)); query.add_child(std::move(name));
} }
query.close();
iq.add_child(std::move(query)); iq.add_child(std::move(query));
iq.close();
this->send_stanza(iq); this->send_stanza(iq);
} }
@@ -669,12 +609,9 @@ void XmppComponent::send_adhoc_commands_list(const std::string& id, const std::s
item["jid"] = this->served_hostname; item["jid"] = this->served_hostname;
item["node"] = kv.first; item["node"] = kv.first;
item["name"] = kv.second.name; item["name"] = kv.second.name;
item.close();
query.add_child(std::move(item)); query.add_child(std::move(item));
} }
query.close();
iq.add_child(std::move(query)); iq.add_child(std::move(query));
iq.close();
this->send_stanza(iq); this->send_stanza(iq);
} }
@@ -688,9 +625,7 @@ void XmppComponent::send_iq_version_request(const std::string& from,
iq["to"] = jid_to; iq["to"] = jid_to;
XmlNode query("query"); XmlNode query("query");
query["xmlns"] = VERSION_NS; query["xmlns"] = VERSION_NS;
query.close();
iq.add_child(std::move(query)); iq.add_child(std::move(query));
iq.close();
this->send_stanza(iq); this->send_stanza(iq);
} }
@@ -704,7 +639,6 @@ void XmppComponent::send_iq_result(const std::string& id, const std::string& to_
iq["to"] = to_jid; iq["to"] = to_jid;
iq["id"] = id; iq["id"] = id;
iq["type"] = "result"; iq["type"] = "result";
iq.close();
this->send_stanza(iq); this->send_stanza(iq);
} }
-1
View File
@@ -104,7 +104,6 @@ void XmppParser::end_element(const XML_Char* name)
{ {
(void)name; (void)name;
level--; level--;
this->current_node->close();
if (level == 1) if (level == 1)
{ {
this->stanza_event(*this->current_node); this->stanza_event(*this->current_node);
+2 -13
View File
@@ -84,8 +84,7 @@ std::string xml_unescape(const std::string& data)
} }
XmlNode::XmlNode(const std::string& name, XmlNode* parent): XmlNode::XmlNode(const std::string& name, XmlNode* parent):
parent(parent), parent(parent)
closed(false)
{ {
// split the namespace and the name // split the namespace and the name
auto n = name.rfind(":"); auto n = name.rfind(":");
@@ -191,13 +190,6 @@ XmlNode* XmlNode::get_last_child() const
return this->children.back(); return this->children.back();
} }
void XmlNode::close()
{
if (this->closed)
throw std::runtime_error("Closing an already closed XmlNode");
this->closed = true;
}
XmlNode* XmlNode::get_parent() const XmlNode* XmlNode::get_parent() const
{ {
return this->parent; return this->parent;
@@ -219,18 +211,15 @@ std::string XmlNode::to_string() const
res += this->name; res += this->name;
for (const auto& it: this->attributes) for (const auto& it: this->attributes)
res += " " + it.first + "='" + sanitize(it.second) + "'"; res += " " + it.first + "='" + sanitize(it.second) + "'";
if (this->closed && !this->has_children() && this->inner.empty()) if (!this->has_children() && this->inner.empty())
res += "/>"; res += "/>";
else else
{ {
res += ">" + sanitize(this->inner); res += ">" + sanitize(this->inner);
for (const auto& child: this->children) for (const auto& child: this->children)
res += child->to_string(); res += child->to_string();
if (this->closed)
{
res += "</" + this->get_name() + ">"; res += "</" + this->get_name() + ">";
} }
}
res += sanitize(this->tail); res += sanitize(this->tail);
return res; return res;
} }
-7
View File
@@ -27,7 +27,6 @@ public:
XmlNode(XmlNode&& node): XmlNode(XmlNode&& node):
name(std::move(node.name)), name(std::move(node.name)),
parent(node.parent), parent(node.parent),
closed(node.closed),
attributes(std::move(node.attributes)), attributes(std::move(node.attributes)),
children(std::move(node.children)), children(std::move(node.children)),
inner(std::move(node.inner)), inner(std::move(node.inner)),
@@ -42,7 +41,6 @@ public:
XmlNode(const XmlNode& node): XmlNode(const XmlNode& node):
name(node.name), name(node.name),
parent(nullptr), parent(nullptr),
closed(node.closed),
attributes(node.attributes), attributes(node.attributes),
children{}, children{},
inner(node.inner), inner(node.inner),
@@ -106,10 +104,6 @@ public:
* by calling has_children() for example. * by calling has_children() for example.
*/ */
XmlNode* get_last_child() const; XmlNode* get_last_child() const;
/**
* Mark this node as closed, nothing else
*/
void close();
XmlNode* get_parent() const; XmlNode* get_parent() const;
void set_name(const std::string& name); void set_name(const std::string& name);
const std::string get_name() const; const std::string get_name() const;
@@ -140,7 +134,6 @@ public:
private: private:
std::string name; std::string name;
XmlNode* parent; XmlNode* parent;
bool closed;
std::unordered_map<std::string, std::string> attributes; std::unordered_map<std::string, std::string> attributes;
std::vector<XmlNode*> children; std::vector<XmlNode*> children;
std::string inner; std::string inner;
-6
View File
@@ -80,7 +80,6 @@ Xmpp::body irc_format_to_xhtmlim(const std::string& s)
else if (s[pos_end] == IRC_FORMAT_NEWLINE_CHAR) else if (s[pos_end] == IRC_FORMAT_NEWLINE_CHAR)
{ {
XmlNode* br_node = new XmlNode("br"); XmlNode* br_node = new XmlNode("br");
br_node->close();
current_node->add_child(br_node); current_node->add_child(br_node);
cleaned += '\n'; cleaned += '\n';
} }
@@ -126,7 +125,6 @@ Xmpp::body irc_format_to_xhtmlim(const std::string& s)
// close opened span, if any // close opened span, if any
if (current_node != result.get()) if (current_node != result.get())
{ {
current_node->close();
result->add_child(current_node); result->add_child(current_node);
current_node = result.get(); current_node = result.get();
} }
@@ -163,12 +161,8 @@ Xmpp::body irc_format_to_xhtmlim(const std::string& s)
current_node->add_to_inner(txt); current_node->add_to_inner(txt);
if (current_node != result.get()) if (current_node != result.get())
{
current_node->close();
result->add_child(current_node); result->add_child(current_node);
}
result->close();
Xmpp::body body_res = std::make_tuple(cleaned, std::move(result)); Xmpp::body body_res = std::make_tuple(cleaned, std::move(result));
return body_res; return body_res;
} }
-12
View File
@@ -10,18 +10,15 @@ void DisconnectUserStep1(XmppComponent* xmpp_component, AdhocSession&, XmlNode&
x["type"] = "form"; x["type"] = "form";
XmlNode title("title"); XmlNode title("title");
title.set_inner("Disconnect a user from the gateway"); title.set_inner("Disconnect a user from the gateway");
title.close();
x.add_child(std::move(title)); x.add_child(std::move(title));
XmlNode instructions("instructions"); XmlNode instructions("instructions");
instructions.set_inner("Choose a user JID and a quit message"); instructions.set_inner("Choose a user JID and a quit message");
instructions.close();
x.add_child(std::move(instructions)); x.add_child(std::move(instructions));
XmlNode jids_field("field"); XmlNode jids_field("field");
jids_field["var"] = "jids"; jids_field["var"] = "jids";
jids_field["type"] = "list-multi"; jids_field["type"] = "list-multi";
jids_field["label"] = "The JIDs to disconnect"; jids_field["label"] = "The JIDs to disconnect";
XmlNode required("required"); XmlNode required("required");
required.close();
jids_field.add_child(std::move(required)); jids_field.add_child(std::move(required));
for (Bridge* bridge: biboumi_component->get_bridges()) for (Bridge* bridge: biboumi_component->get_bridges())
{ {
@@ -29,12 +26,9 @@ void DisconnectUserStep1(XmppComponent* xmpp_component, AdhocSession&, XmlNode&
option["label"] = bridge->get_jid(); option["label"] = bridge->get_jid();
XmlNode value("value"); XmlNode value("value");
value.set_inner(bridge->get_jid()); value.set_inner(bridge->get_jid());
value.close();
option.add_child(std::move(value)); option.add_child(std::move(value));
option.close();
jids_field.add_child(std::move(option)); jids_field.add_child(std::move(option));
} }
jids_field.close();
x.add_child(std::move(jids_field)); x.add_child(std::move(jids_field));
XmlNode message_field("field"); XmlNode message_field("field");
@@ -43,11 +37,8 @@ void DisconnectUserStep1(XmppComponent* xmpp_component, AdhocSession&, XmlNode&
message_field["label"] = "Quit message"; message_field["label"] = "Quit message";
XmlNode message_value("value"); XmlNode message_value("value");
message_value.set_inner("Disconnected by admin"); message_value.set_inner("Disconnected by admin");
message_value.close();
message_field.add_child(std::move(message_value)); message_field.add_child(std::move(message_value));
message_field.close();
x.add_child(std::move(message_field)); x.add_child(std::move(message_field));
x.close();
command_node.add_child(std::move(x)); command_node.add_child(std::move(x));
} }
@@ -95,7 +86,6 @@ void DisconnectUserStep2(XmppComponent* xmpp_component, AdhocSession& session, X
note.set_inner("1 user has been disconnected."); note.set_inner("1 user has been disconnected.");
else else
note.set_inner(std::to_string(num) + " users have been disconnected."); note.set_inner(std::to_string(num) + " users have been disconnected.");
note.close();
command_node.add_child(std::move(note)); command_node.add_child(std::move(note));
return; return;
} }
@@ -103,9 +93,7 @@ void DisconnectUserStep2(XmppComponent* xmpp_component, AdhocSession& session, X
XmlNode error(ADHOC_NS":error"); XmlNode error(ADHOC_NS":error");
error["type"] = "modify"; error["type"] = "modify";
XmlNode condition(STANZA_NS":bad-request"); XmlNode condition(STANZA_NS":bad-request");
condition.close();
error.add_child(std::move(condition)); error.add_child(std::move(condition));
error.close();
command_node.add_child(std::move(error)); command_node.add_child(std::move(error));
session.terminate(); session.terminate();
} }
-12
View File
@@ -321,7 +321,6 @@ void BiboumiComponent::handle_iq(const Stanza& stanza)
else else
response["type"] = "result"; response["type"] = "result";
response.add_child(std::move(inner_node)); response.add_child(std::move(inner_node));
response.close();
this->send_stanza(response); this->send_stanza(response);
stanza_error.disable(); stanza_error.disable();
} }
@@ -494,18 +493,14 @@ void BiboumiComponent::send_self_disco_info(const std::string& id, const std::st
identity["category"] = "conference"; identity["category"] = "conference";
identity["type"] = "irc"; identity["type"] = "irc";
identity["name"] = "Biboumi XMPP-IRC gateway"; identity["name"] = "Biboumi XMPP-IRC gateway";
identity.close();
query.add_child(std::move(identity)); query.add_child(std::move(identity));
for (const std::string& ns: {DISCO_INFO_NS, MUC_NS, ADHOC_NS}) for (const std::string& ns: {DISCO_INFO_NS, MUC_NS, ADHOC_NS})
{ {
XmlNode feature("feature"); XmlNode feature("feature");
feature["var"] = ns; feature["var"] = ns;
feature.close();
query.add_child(std::move(feature)); query.add_child(std::move(feature));
} }
query.close();
iq.add_child(std::move(query)); iq.add_child(std::move(query));
iq.close();
this->send_stanza(iq); this->send_stanza(iq);
} }
@@ -519,9 +514,7 @@ void BiboumiComponent::send_iq_version_request(const std::string& from,
iq["to"] = jid_to; iq["to"] = jid_to;
XmlNode query("query"); XmlNode query("query");
query["xmlns"] = VERSION_NS; query["xmlns"] = VERSION_NS;
query.close();
iq.add_child(std::move(query)); iq.add_child(std::move(query));
iq.close();
this->send_stanza(iq); this->send_stanza(iq);
} }
@@ -536,9 +529,7 @@ void BiboumiComponent::send_ping_request(const std::string& from,
iq["to"] = jid_to; iq["to"] = jid_to;
XmlNode ping("ping"); XmlNode ping("ping");
ping["xmlns"] = PING_NS; ping["xmlns"] = PING_NS;
ping.close();
iq.add_child(std::move(ping)); iq.add_child(std::move(ping));
iq.close();
this->send_stanza(iq); this->send_stanza(iq);
auto result_cb = [from, id](Bridge* bridge, const Stanza& stanza) auto result_cb = [from, id](Bridge* bridge, const Stanza& stanza)
@@ -571,11 +562,8 @@ void BiboumiComponent::send_iq_room_list_result(const std::string& id,
{ {
XmlNode item("item"); XmlNode item("item");
item["jid"] = room.channel + "%" + from + "@" + this->served_hostname; item["jid"] = room.channel + "%" + from + "@" + this->served_hostname;
item.close();
query.add_child(std::move(item)); query.add_child(std::move(item));
} }
query.close();
iq.add_child(std::move(query)); iq.add_child(std::move(query));
iq.close();
this->send_stanza(iq); this->send_stanza(iq);
} }