20 local jid_prep = require"util.jid".prep; |
20 local jid_prep = require"util.jid".prep; |
21 local jid_split = require"util.jid".split; |
21 local jid_split = require"util.jid".split; |
22 |
22 |
23 local storage = module:open_store(); |
23 local storage = module:open_store(); |
24 local sessions = prosody.hosts[module.host].sessions; |
24 local sessions = prosody.hosts[module.host].sessions; |
|
25 local full_sessions = prosody.full_sessions; |
25 |
26 |
26 -- First level cache of blocklists by username. |
27 -- First level cache of blocklists by username. |
27 -- Weak table so may randomly expire at any time. |
28 -- Weak table so may randomly expire at any time. |
28 local cache = setmetatable({}, { __mode = "v" }); |
29 local cache = setmetatable({}, { __mode = "v" }); |
29 |
30 |
269 end |
270 end |
270 return drop_stanza(event); -- result or error |
271 return drop_stanza(event); -- result or error |
271 end |
272 end |
272 |
273 |
273 local function bounce_message(event) |
274 local function bounce_message(event) |
274 local type = event.stanza.attr.type; |
275 local stanza = event.stanza; |
|
276 local type = stanza.attr.type; |
275 if type == "chat" or not type or type == "normal" then |
277 if type == "chat" or not type or type == "normal" then |
|
278 if full_sessions[stanza.attr.to] then |
|
279 -- See #690 |
|
280 return drop_stanza(event); |
|
281 end |
276 return bounce_stanza(event); |
282 return bounce_stanza(event); |
277 end |
283 end |
278 return drop_stanza(event); -- drop headlines, groupchats etc |
284 return drop_stanza(event); -- drop headlines, groupchats etc |
279 end |
285 end |
280 |
286 |
303 -- Hook all the events! |
309 -- Hook all the events! |
304 local prio_in, prio_out = 100, 100; |
310 local prio_in, prio_out = 100, 100; |
305 module:hook("presence/bare", drop_stanza, prio_in); |
311 module:hook("presence/bare", drop_stanza, prio_in); |
306 module:hook("presence/full", drop_stanza, prio_in); |
312 module:hook("presence/full", drop_stanza, prio_in); |
307 |
313 |
308 -- FIXME See #690 |
|
309 module:hook("message/bare", bounce_message, prio_in); |
314 module:hook("message/bare", bounce_message, prio_in); |
310 module:hook("message/full", bounce_message, prio_in); |
315 module:hook("message/full", bounce_message, prio_in); |
311 |
316 |
312 module:hook("iq/bare", bounce_iq, prio_in); |
317 module:hook("iq/bare", bounce_iq, prio_in); |
313 module:hook("iq/full", bounce_iq, prio_in); |
318 module:hook("iq/full", bounce_iq, prio_in); |