Software /
code /
prosody
Diff
plugins/mod_c2s.lua @ 10811:16bcbd574801
mod_c2s: Run stream open and close events in async thread, fixes #1103
Enables async processing during stream opening and closing.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 08 May 2020 23:58:24 +0200 |
parent | 10727:fa2a89132dfb |
child | 10849:19e7092e062c |
line wrap: on
line diff
--- a/plugins/mod_c2s.lua Fri May 08 23:55:51 2020 +0200 +++ b/plugins/mod_c2s.lua Fri May 08 23:58:24 2020 +0200 @@ -55,6 +55,11 @@ local stream_xmlns_attr = {xmlns='urn:ietf:params:xml:ns:xmpp-streams'}; function stream_callbacks.streamopened(session, attr) + -- run _streamopened in async context + session.thread:run({ stream = "opened", attr = attr }); +end + +function stream_callbacks._streamopened(session, attr) local send = session.send; if not attr.to then session:close{ condition = "improper-addressing", @@ -121,7 +126,12 @@ end end -function stream_callbacks.streamclosed(session) +function stream_callbacks.streamclosed(session, attr) + -- run _streamclosed in async context + session.thread:run({ stream = "closed", attr = attr }); +end + +function stream_callbacks._streamclosed(session) session.log("debug", "Received </stream:stream>"); session:close(false); end @@ -280,7 +290,13 @@ end session.thread = runner(function (stanza) - core_process_stanza(session, stanza); + if st.is_stanza(stanza) then + core_process_stanza(session, stanza); + elseif stanza.stream == "opened" then + stream_callbacks._streamopened(session, stanza.attr); + elseif stanza.stream == "closed" then + stream_callbacks._streamclosed(session, stanza.attr); + end end, runner_callbacks, session); local filter = session.filter;