--- a/mod_mam/mamprefsxml.lib.lua Mon Feb 20 00:44:27 2017 +0100
+++ b/mod_mam/mamprefsxml.lib.lua Mon Feb 20 00:41:13 2017 +0100
@@ -4,7 +4,6 @@
-- This file is MIT/X11 licensed.
local st = require"util.stanza";
-local xmlns_mam = "urn:xmpp:mam:0";
local default_attrs = {
always = true, [true] = "always",
@@ -12,7 +11,7 @@
roster = "roster",
}
-local function tostanza(prefs)
+local function tostanza(prefs, xmlns_mam)
local default = prefs[false];
default = default_attrs[default];
local prefstanza = st.stanza("prefs", { xmlns = xmlns_mam, default = default });
--- a/mod_mam/mod_mam.lua Mon Feb 20 00:44:27 2017 +0100
+++ b/mod_mam/mod_mam.lua Mon Feb 20 00:41:13 2017 +0100
@@ -3,7 +3,8 @@
--
-- This file is MIT/X11 licensed.
-local xmlns_mam = "urn:xmpp:mam:0";
+local xmlns_mam0 = "urn:xmpp:mam:0";
+local xmlns_mam1 = "urn:xmpp:mam:1";
local xmlns_delay = "urn:xmpp:delay";
local xmlns_forward = "urn:xmpp:forward:0";
@@ -54,11 +55,12 @@
local cleanup;
-- Handle prefs.
-module:hook("iq/self/"..xmlns_mam..":prefs", function(event)
+local function handle_prefs(event)
local origin, stanza = event.origin, event.stanza;
+ local xmlns_mam = stanza.tags[1].attr.xmlns;
local user = origin.username;
if stanza.attr.type == "get" then
- local prefs = prefs_to_stanza(get_prefs(user));
+ local prefs = prefs_to_stanza(get_prefs(user), xmlns_mam);
local reply = st.reply(stanza):add_child(prefs);
origin.send(reply);
else -- type == "set"
@@ -72,25 +74,34 @@
end
end
return true;
-end);
+end
+
+module:hook("iq/self/"..xmlns_mam0..":prefs", handle_prefs);
+module:hook("iq/self/"..xmlns_mam1..":prefs", handle_prefs);
local query_form = dataform {
- { name = "FORM_TYPE"; type = "hidden"; value = xmlns_mam; };
+ { name = "FORM_TYPE"; type = "hidden"; value = xmlns_mam0; };
{ name = "with"; type = "jid-single"; };
{ name = "start"; type = "text-single" };
{ name = "end"; type = "text-single"; };
};
-- Serve form
-module:hook("iq-get/self/"..xmlns_mam..":query", function(event)
+local function handle_get_form(event)
local origin, stanza = event.origin, event.stanza;
+ local xmlns_mam = stanza.tags[1].attr.xmlns;
+ query_form[1].value = xmlns_mam;
origin.send(st.reply(stanza):query(xmlns_mam):add_child(query_form:form()));
return true;
-end);
+end
+
+module:hook("iq-get/self/"..xmlns_mam0..":query", handle_get_form);
+module:hook("iq-get/self/"..xmlns_mam1..":query", handle_get_form);
-- Handle archive queries
-module:hook("iq-set/self/"..xmlns_mam..":query", function(event)
+local function handle_mam_query(event)
local origin, stanza = event.origin, event.stanza;
+ local xmlns_mam = stanza.tags[1].attr.xmlns;
local query = stanza.tags[1];
local qid = query.attr.queryid;
@@ -101,6 +112,7 @@
local form = query:get_child("x", "jabber:x:data");
if form then
local err;
+ query_form[1].value = xmlns_mam;
form, err = query_form:data(form);
if err then
origin.send(st.error_reply(stanza, "modify", "bad-request", select(2, next(err))));
@@ -146,7 +158,9 @@
end
local total = tonumber(err);
- origin.send(st.reply(stanza));
+ if xmlns_mam == xmlns_mam0 then
+ origin.send(st.reply(stanza));
+ end
local msg_reply_attr = { to = stanza.attr.from, from = stanza.attr.to };
local results = {};
@@ -192,12 +206,22 @@
-- That's all folks!
module:log("debug", "Archive query %s completed", tostring(qid));
- origin.send(st.message(msg_reply_attr)
- :tag("fin", { xmlns = xmlns_mam, queryid = qid, complete = complete })
+ local fin;
+ if xmlns_mam == xmlns_mam0 then
+ fin = st.message(msg_reply_attr);
+ else
+ fin = st.reply(stanza);
+ end
+ do
+ fin:tag("fin", { xmlns = xmlns_mam, queryid = qid, complete = complete })
:add_child(rsm.generate {
- first = first, last = last, count = total }));
+ first = first, last = last, count = total })
+ end
+ origin.send(fin);
return true;
-end);
+end
+module:hook("iq-set/self/"..xmlns_mam0..":query", handle_mam_query);
+module:hook("iq-set/self/"..xmlns_mam1..":query", handle_mam_query);
local function has_in_roster(user, who)
local roster = rm_load_roster(user, host);
@@ -330,9 +354,10 @@
module:hook("message/bare", message_handler, 2);
module:hook("message/full", message_handler, 2);
-module:add_feature(xmlns_mam); -- COMPAT with XEP-0313 v 0.1
+module:add_feature(xmlns_mam0); -- COMPAT with XEP-0313 v 0.1
module:hook("account-disco-info", function(event)
- (event.reply or event.stanza):tag("feature", {var=xmlns_mam}):up();
+ (event.reply or event.stanza):tag("feature", {var=xmlns_mam0}):up();
+ (event.reply or event.stanza):tag("feature", {var=xmlns_mam1}):up();
end);