Commit 131ef994 authored by louiz’'s avatar louiz’

Include the <fin><set><first/><last/></></> nodes in the MAM iq result

fix #3322
parent 37340e59
...@@ -725,7 +725,24 @@ bool BiboumiComponent::handle_mam_request(const Stanza& stanza) ...@@ -725,7 +725,24 @@ bool BiboumiComponent::handle_mam_request(const Stanza& stanza)
if (!line.col<Database::Nick>().empty()) if (!line.col<Database::Nick>().empty())
this->send_archived_message(line, to.full(), from.full(), query_id); this->send_archived_message(line, to.full(), from.full(), query_id);
} }
this->send_iq_result_full_jid(id, from.full(), to.full()); {
auto fin_ptr = std::make_unique<XmlNode>("fin");
{
XmlNode& fin = *(fin_ptr.get());
fin["xmlns"] = MAM_NS;
XmlSubNode set(fin, "set");
set["xmlns"] = RSM_NS;
if (!lines.empty())
{
XmlSubNode first(set, "first");
first["index"] = "0";
first.set_inner(lines[0].col<Database::Uuid>());
XmlSubNode last(set, "last");
last.set_inner(lines[lines.size() - 1].col<Database::Uuid>());
}
}
this->send_iq_result_full_jid(id, from.full(), to.full(), std::move(fin_ptr));
}
return true; return true;
} }
return false; return false;
......
...@@ -640,13 +640,15 @@ void XmppComponent::send_iq_version_request(const std::string& from, ...@@ -640,13 +640,15 @@ void XmppComponent::send_iq_version_request(const std::string& from,
this->send_stanza(iq); this->send_stanza(iq);
} }
void XmppComponent::send_iq_result_full_jid(const std::string& id, const std::string& to_jid, const std::string& from_full_jid) void XmppComponent::send_iq_result_full_jid(const std::string& id, const std::string& to_jid, const std::string& from_full_jid, std::unique_ptr<XmlNode> inner)
{ {
Stanza iq("iq"); Stanza iq("iq");
iq["from"] = from_full_jid; iq["from"] = from_full_jid;
iq["to"] = to_jid; iq["to"] = to_jid;
iq["id"] = id; iq["id"] = id;
iq["type"] = "result"; iq["type"] = "result";
if (inner)
iq.add_child(std::move(inner));
this->send_stanza(iq); this->send_stanza(iq);
} }
......
...@@ -203,7 +203,7 @@ public: ...@@ -203,7 +203,7 @@ public:
*/ */
void send_iq_result(const std::string& id, const std::string& to_jid, const std::string& from); void send_iq_result(const std::string& id, const std::string& to_jid, const std::string& from);
void send_iq_result_full_jid(const std::string& id, const std::string& to_jid, void send_iq_result_full_jid(const std::string& id, const std::string& to_jid,
const std::string& from_full_jid); const std::string& from_full_jid, std::unique_ptr<XmlNode> inner=nullptr);
void handle_handshake(const Stanza& stanza); void handle_handshake(const Stanza& stanza);
void handle_error(const Stanza& stanza); void handle_error(const Stanza& stanza);
......
...@@ -130,6 +130,7 @@ def match(stanza, xpath): ...@@ -130,6 +130,7 @@ def match(stanza, xpath):
'dataform': 'jabber:x:data', 'dataform': 'jabber:x:data',
'version': 'jabber:iq:version', 'version': 'jabber:iq:version',
'mam': 'urn:xmpp:mam:2', 'mam': 'urn:xmpp:mam:2',
'rms': 'http://jabber.org/protocol/rsm',
'delay': 'urn:xmpp:delay', 'delay': 'urn:xmpp:delay',
'forward': 'urn:xmpp:forward:0', 'forward': 'urn:xmpp:forward:0',
'client': 'jabber:client', 'client': 'jabber:client',
...@@ -1852,7 +1853,9 @@ if __name__ == '__main__': ...@@ -1852,7 +1853,9 @@ if __name__ == '__main__':
), ),
partial(expect_stanza, partial(expect_stanza,
"/iq[@type='result'][@id='id1'][@from='#foo%{irc_server_one}'][@to='{jid_one}/{resource_one}']"), ("/iq[@type='result'][@id='id1'][@from='#foo%{irc_server_one}'][@to='{jid_one}/{resource_one}']",
"/iq/mam:fin/rms:set/rsm:last",
"/iq/mam:fin/rsm:set/rsm:first")),
# Retrieve an empty archive by specifying an early “end” date # Retrieve an empty archive by specifying an early “end” date
partial(send_stanza, """<iq to='#foo%{irc_server_one}' from='{jid_one}/{resource_one}' type='set' id='id2'> partial(send_stanza, """<iq to='#foo%{irc_server_one}' from='{jid_one}/{resource_one}' type='set' id='id2'>
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment