author | aidan@jmad.org |
Sun, 25 Feb 2024 18:20:04 -0800 | |
changeset 5880 | c5df6d53f17f |
parent 5167 | 41fbed2de482 |
permissions | -rw-r--r-- |
3346
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) |
3347
2e65160187a4
mod_bob: Simplify check_cid using string.match. (thanks Zash!)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3346
diff
changeset
|
15 |
return src:match("^cid:(%w+%+%w+@bob%.xmpp%.org)$"); |
3346
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
16 |
end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
17 |
|
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
18 |
local function handle_data_carrier(tag) |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
19 |
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
|
20 |
return tag; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
21 |
end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
22 |
local cid = tag.attr.cid; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
23 |
local media_type = tag.attr.type; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
24 |
local max_age = tag.attr['max-age']; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
25 |
local b64_content = tag:get_text(); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
26 |
local content = b64_decode(b64_content); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
27 |
local hash = sha1(content, true); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
28 |
if cid ~= "sha1+"..hash.."@bob.xmpp.org" then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
29 |
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
|
30 |
return nil; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
31 |
end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
32 |
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
|
33 |
if in_flight[cid] then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
34 |
local iq = st.iq({ type = "result", id = "fixme" }); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
35 |
iq:add_direct_child(tag); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
36 |
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
|
37 |
iq.attr.from = data.from; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
38 |
iq.attr.to = jid; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
39 |
iq.attr.id = data.id; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
40 |
module:send(iq); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
41 |
end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
42 |
in_flight[cid] = nil; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
43 |
end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
44 |
return nil; |
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 |
|
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
47 |
local current_id = 0; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
48 |
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
|
49 |
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
|
50 |
:tag("data", { xmlns = "urn:xmpp:bob", cid = cid }); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
51 |
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
|
52 |
module:send(iq); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
53 |
in_flight[cid] = {}; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
54 |
end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
55 |
|
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
56 |
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
|
57 |
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
|
58 |
local src = tag.attr.src; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
59 |
local cid = check_cid(src); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
60 |
if not cid then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
61 |
return; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
62 |
end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
63 |
if cache[cid] then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
64 |
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
|
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 in_flight[cid] then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
68 |
log("debug", "cid %s already queried", 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 |
send_iq(room_jid, jid, cid, log); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
72 |
return; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
73 |
end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
74 |
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
|
75 |
find_images(child, jid, room_jid, log); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
76 |
end |
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 |
|
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
79 |
local function message_handler(event) |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
80 |
local stanza, origin = event.stanza, event.origin; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
81 |
local jid = stanza.attr.from; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
82 |
local room_jid = stanza.attr.to; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
83 |
local log = origin.log or module._log; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
84 |
|
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
85 |
-- Remove and cache all <data/> elements embedded here. |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
86 |
stanza:maptags(handle_data_carrier); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
87 |
|
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
88 |
-- 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
|
89 |
local tag = stanza:get_child("html", "http://jabber.org/protocol/xhtml-im"); |
3372
76fc915647ab
mod_bob: Don’t try to access XHTML-IM when it isn’t present.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3347
diff
changeset
|
90 |
if not tag then |
76fc915647ab
mod_bob: Don’t try to access XHTML-IM when it isn’t present.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3347
diff
changeset
|
91 |
return; |
76fc915647ab
mod_bob: Don’t try to access XHTML-IM when it isn’t present.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3347
diff
changeset
|
92 |
end |
3346
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
93 |
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
|
94 |
find_images(body, jid, room_jid, log); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
95 |
end |
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 |
|
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
98 |
local function handle_data_get(stanza, cid, log) |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
99 |
local data = cache[cid]; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
100 |
if not data then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
101 |
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
|
102 |
if in_flight[cid] then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
103 |
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
|
104 |
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
|
105 |
return true; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
106 |
end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
107 |
return nil; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
108 |
end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
109 |
|
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
110 |
local iq = st.reply(stanza); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
111 |
iq:text_tag("data", b64_encode(data.content), { |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
112 |
xmlns = "urn:xmpp:bob", |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
113 |
cid = cid, |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
114 |
type = data.media_type, |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
115 |
['max-age'] = data.max_age, |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
116 |
}); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
117 |
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
|
118 |
module:send(iq); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
119 |
return true; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
120 |
end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
121 |
|
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
122 |
local function iq_handler(event) |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
123 |
local stanza, origin = event.stanza, event.origin; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
124 |
local tag = stanza.tags[1]; |
5167
41fbed2de482
mod_bob: Fix traceback when iq has no payload (thanks meaz)
Matthew Wild <mwild1@gmail.com>
parents:
3372
diff
changeset
|
125 |
if not tag or tag.name ~= "data" or tag.attr.xmlns ~= "urn:xmpp:bob" then |
3346
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
126 |
return nil; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
127 |
end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
128 |
local log = origin.log or module._log; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
129 |
local cid = tag.attr.cid; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
130 |
if not cid then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
131 |
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
|
132 |
return; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
133 |
end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
134 |
if stanza.attr.type == "get" then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
135 |
return handle_data_get(stanza, cid, log); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
136 |
elseif stanza.attr.type == "result" then |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
137 |
handle_data_carrier(tag); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
138 |
return true; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
139 |
end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
140 |
-- TODO: also handle error iqs. |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
141 |
end |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
142 |
|
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
143 |
module:hook("message/bare", message_handler, 1); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
144 |
module:hook("iq/full", iq_handler, 1); |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
145 |
module:hook("iq/bare", iq_handler, 1); |