Annotate

mod_addressing/mod_addressing.lua @ 4876:0f5f2d4475b9

mod_http_xep227: Add support for import via APIs rather than direct store manipulation In particular this transitions PEP nodes and data to be imported via mod_pep's APIs, fixing issues with importing at runtime while PEP data may already be live in RAM. Next obvious candidate for this approach is rosters, so clients get immediate roster pushes and other special handling (such as emitting subscribes to reach the desired subscription state).
author Matthew Wild <mwild1@gmail.com>
date Tue, 18 Jan 2022 17:01:18 +0000
parent 935:f66a08f208ad
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
415
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1 -- TODO Querying other servers for support, needs to keep track of remote
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
2 -- server disco features
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
4 local xmlns_address = 'http://jabber.org/protocol/address';
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
5
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
6 local function handle_extended_addressing(data)
935
f66a08f208ad mod_addressing: Optimization
Kim Alvefur <zash@zash.se>
parents: 760
diff changeset
7 local stanza = data.stanza;
415
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
8 if stanza.attr.type == "error" then
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
9 return -- so we don't process bounces
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10 end
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 local orig_to = stanza.attr.to;
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12 local addresses = stanza:get_child("addresses", xmlns_address);
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13 if addresses then
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14 module:log("debug", "Extended addressing found");
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15 local destinations = {};
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16 addresses:maptags(function(address)
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 if address.attr.xmlns == xmlns_address and address.name == "address" then
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 local type, jid, delivered = address.attr.type, address.attr.jid, address.attr.delivered;
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19 if (type == "cc" or type == "bcc" or type == "to")
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 and jid and not delivered then
935
f66a08f208ad mod_addressing: Optimization
Kim Alvefur <zash@zash.se>
parents: 760
diff changeset
21 destinations[#destinations+1] = jid;
415
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22 module:log("debug", "%s to %s", type, jid)
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23 if type == "to" or type == "cc" then
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 address.attr.delivered = "true";
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 return address;
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 elseif type == "bcc" then
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27 return nil;
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
28 end
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 end
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30 end
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 return address; -- unsupported stuff goes right back
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32 end);
935
f66a08f208ad mod_addressing: Optimization
Kim Alvefur <zash@zash.se>
parents: 760
diff changeset
33 for i=1,#destinations do
f66a08f208ad mod_addressing: Optimization
Kim Alvefur <zash@zash.se>
parents: 760
diff changeset
34 stanza.attr.to = destinations[i];
f66a08f208ad mod_addressing: Optimization
Kim Alvefur <zash@zash.se>
parents: 760
diff changeset
35 module:log("debug", "posting stanza to %s", destinations[i])
760
442f88b49d9b mod_addressing: Replace use of core_post_stanza() with module:send()
Kim Alvefur <zash@zash.se>
parents: 415
diff changeset
36 module:send(stanza);
415
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37 end
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38 stanza.attr.to = orig_to;
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39 return stanza.attr.to == module.host or nil;
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
40 end
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
41 end
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
42
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
43 module:hook("message/host", handle_extended_addressing, 10);
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
44 module:hook("message/bare", handle_extended_addressing, 10);
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
45 module:hook("message/full", handle_extended_addressing, 10);
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
46
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
47 module:hook("presence/host", handle_extended_addressing, 10);
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
48 module:hook("presence/bare", handle_extended_addressing, 10);
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
49 module:hook("presence/full", handle_extended_addressing, 10);
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
50
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
51 -- IQ stanzas makes no sense
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
52
3ba1a5b9d657 mod_addressing: Add partial implementation of Extended Stanza Addressing, XEP-33.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
53 module:add_feature(xmlns_address);