Mercurial > prosody-modules
annotate mod_bob/mod_bob.lua @ 3866:c0df50ce96f0
mod_rest: Handle internal http request errors early and then return
Skips over attempted parsing of the payload which usually failed since
the body is an error string like "connection refused", so this produced
useless errors.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 25 Jan 2020 20:22:12 +0100 |
parents | 76fc915647ab |
children | 41fbed2de482 |
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) |
3343
2e65160187a4
mod_bob: Simplify check_cid using string.match. (thanks Zash!)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3342
diff
changeset
|
15 return src:match("^cid:(%w+%+%w+@bob%.xmpp%.org)$"); |
3342
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"); |
3368
76fc915647ab
mod_bob: Don’t try to access XHTML-IM when it isn’t present.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
3343
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:
3343
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:
3343
diff
changeset
|
92 end |
3342
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]; |
3aa5419e3576
mod_bob: Add this new module.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
125 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
|
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); |