Software /
code /
prosody
Annotate
plugins/muc/hats.lib.lua @ 10813:4a9ff4f61796
mod_presence: Send unavailable presence in current thread run
`session:dispatch_stanza(pres)` enqueues processing of the stanza in the
sessions async thread, but becasue the entire stream close handling is
now in that thread it would process the presence after the stream and
session was completely closed, leading to weird errors "sent to a
resting session".
We call core_process_stanza() since this is what :dispatch_stanza calls
in the end.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 09 May 2020 00:28:10 +0200 |
parent | 10714:9ecad2304297 |
child | 11245:43b43e7156b8 |
rev | line source |
---|---|
10693
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 local st = require "util.stanza"; |
10714
9ecad2304297
MUC: Switch hats to new presence APIs
Matthew Wild <mwild1@gmail.com>
parents:
10693
diff
changeset
|
2 local muc_util = module:require "muc/util"; |
10693
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 |
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 local xmlns_hats = "xmpp:prosody.im/protocol/hats:1"; |
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 |
10714
9ecad2304297
MUC: Switch hats to new presence APIs
Matthew Wild <mwild1@gmail.com>
parents:
10693
diff
changeset
|
6 -- Strip any hats claimed by the client (to prevent spoofing) |
9ecad2304297
MUC: Switch hats to new presence APIs
Matthew Wild <mwild1@gmail.com>
parents:
10693
diff
changeset
|
7 muc_util.add_filtered_namespace(xmlns_hats); |
10693
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 |
10714
9ecad2304297
MUC: Switch hats to new presence APIs
Matthew Wild <mwild1@gmail.com>
parents:
10693
diff
changeset
|
9 module:hook("muc-build-occupant-presence", function (event) |
10693
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 local aff_data = event.room:get_affiliation_data(event.occupant.bare_jid); |
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 local hats = aff_data and aff_data.hats; |
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 if not hats then return; end |
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 local hats_el; |
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 for hat_id, hat_data in pairs(hats) do |
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 if hat_data.active then |
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 if not hats_el then |
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 hats_el = st.stanza("hats", { xmlns = xmlns_hats }); |
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 end |
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 hats_el:tag("hat", { uri = hat_id, title = hat_data.title }):up(); |
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 end |
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 end |
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 if not hats_el then return; end |
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 event.stanza:add_direct_child(hats_el); |
76bb806cdd4b
MUC: Add initial hats support (broadcast only)
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 end); |