Software /
code /
prosody-modules
Annotate
mod_bob/mod_bob.lua @ 3342:3aa5419e3576
mod_bob: Add this new module.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Fri, 28 Sep 2018 16:12:18 +0200 |
child | 3343:2e65160187a4 |
rev | line source |
---|---|
3342
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
1 module:depends("cache_c2s_caps"); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
2 |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
3 local st = require "util.stanza"; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
4 local encodings = require "util.encodings"; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
5 local b64_encode = encodings.base64.encode; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
6 local b64_decode = encodings.base64.decode; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
7 local sha1 = require"util.hashes".sha1; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
8 |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
9 -- TODO: Move that to storage. |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
10 local cache = {}; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
11 -- TODO: use util.cache for this. |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
12 local in_flight = {}; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
13 |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
14 local function check_cid(src) |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
15 -- TODO: figure out why ^ can’t be used at the beginning of the pattern. |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
16 for cid in src:gmatch("cid:(%w+%+%w+@bob%.xmpp%.org)$") do |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
17 return cid; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
18 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
19 return nil; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
20 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
21 |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
22 local function handle_data_carrier(tag) |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
23 if tag.name ~= "data" or tag.attr.xmlns ~= "urn:xmpp:bob" then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
24 return tag; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
25 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
26 local cid = tag.attr.cid; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
27 local media_type = tag.attr.type; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
28 local max_age = tag.attr['max-age']; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
29 local b64_content = tag:get_text(); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
30 local content = b64_decode(b64_content); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
31 local hash = sha1(content, true); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
32 if cid ~= "sha1+"..hash.."@bob.xmpp.org" then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
33 module:log("debug", "Invalid BoB cid, %s ~= %s", cid, "sha1+"..hash.."@bob.xmpp.org"); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
34 return nil; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
35 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
36 cache[cid] = { media_type = media_type, max_age = max_age, content = content }; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
37 if in_flight[cid] then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
38 local iq = st.iq({ type = "result", id = "fixme" }); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
39 iq:add_direct_child(tag); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
40 for jid, data in pairs(in_flight[cid]) do |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
41 iq.attr.from = data.from; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
42 iq.attr.to = jid; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
43 iq.attr.id = data.id; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
44 module:send(iq); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
45 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
46 in_flight[cid] = nil; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
47 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
48 return nil; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
49 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
50 |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
51 local current_id = 0; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
52 local function send_iq(room_jid, jid, cid, log) |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
53 local iq = st.iq({ type = "get", from = room_jid, to = jid, id = "bob-"..current_id }) |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
54 :tag("data", { xmlns = "urn:xmpp:bob", cid = cid }); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
55 log("debug", "found BoB image in XHTML-IM, asking %s for cid %s", jid, cid); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
56 module:send(iq); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
57 in_flight[cid] = {}; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
58 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
59 |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
60 local function find_images(tag, jid, room_jid, log) |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
61 if tag.name == "img" and tag.attr.xmlns == "http://www.w3.org/1999/xhtml" then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
62 local src = tag.attr.src; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
63 local cid = check_cid(src); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
64 if not cid then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
65 return; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
66 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
67 if cache[cid] then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
68 log("debug", "cid %s already found in cache", cid); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
69 return; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
70 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
71 if in_flight[cid] then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
72 log("debug", "cid %s already queried", cid); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
73 return; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
74 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
75 send_iq(room_jid, jid, cid, log); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
76 return; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
77 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
78 for child in tag:childtags(nil, "http://www.w3.org/1999/xhtml") do |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
79 find_images(child, jid, room_jid, log); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
80 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
81 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
82 |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
83 local function message_handler(event) |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
84 local stanza, origin = event.stanza, event.origin; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
85 local jid = stanza.attr.from; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
86 local room_jid = stanza.attr.to; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
87 local log = origin.log or module._log; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
88 |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
89 -- Remove and cache all <data/> elements embedded here. |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
90 stanza:maptags(handle_data_carrier); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
91 |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
92 -- Find and query all of the cids not already cached. |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
93 local tag = stanza:get_child("html", "http://jabber.org/protocol/xhtml-im"); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
94 for body in tag:childtags("body", "http://www.w3.org/1999/xhtml") do |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
95 find_images(body, jid, room_jid, log); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
96 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
97 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
98 |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
99 local function handle_data_get(stanza, cid, log) |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
100 local data = cache[cid]; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
101 if not data then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
102 log("debug", "BoB requested for data not in cache (cid %s), falling through.", cid); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
103 if in_flight[cid] then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
104 log("debug", "But an iq has already been sent, let’s wait…"); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
105 in_flight[cid][stanza.attr.from] = { id = stanza.attr.id, from = stanza.attr.to }; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
106 return true; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
107 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
108 return nil; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
109 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
110 |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
111 local iq = st.reply(stanza); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
112 iq:text_tag("data", b64_encode(data.content), { |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
113 xmlns = "urn:xmpp:bob", |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
114 cid = cid, |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
115 type = data.media_type, |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
116 ['max-age'] = data.max_age, |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
117 }); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
118 log("debug", "Answering BoB request for cid %s on the behalf of %s", cid, stanza.attr.to); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
119 module:send(iq); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
120 return true; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
121 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
122 |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
123 local function iq_handler(event) |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
124 local stanza, origin = event.stanza, event.origin; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
125 local tag = stanza.tags[1]; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
126 if tag.name ~= "data" or tag.attr.xmlns ~= "urn:xmpp:bob" then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
127 return nil; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
128 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
129 local log = origin.log or module._log; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
130 local cid = tag.attr.cid; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
131 if not cid then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
132 log("debug", "BoB iq doesn’t contain a cid attribute."); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
133 return; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
134 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
135 if stanza.attr.type == "get" then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
136 return handle_data_get(stanza, cid, log); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
137 elseif stanza.attr.type == "result" then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
138 handle_data_carrier(tag); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
139 return true; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
140 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
141 -- TODO: also handle error iqs. |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
142 end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
143 |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
144 module:hook("message/bare", message_handler, 1); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
145 module:hook("iq/full", iq_handler, 1); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
146 module:hook("iq/bare", iq_handler, 1); |