annotate mod_addressing/mod_addressing.lua @ 935:f66a08f208ad

mod_addressing: Optimization
author Kim Alvefur <zash@zash.se>
date Mon, 25 Mar 2013 00:43:30 +0100
parents 442f88b49d9b
children
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);