Software /
code /
prosody
Changeset
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 |
parents | 10810:8a0a923e1ced |
children | 10812:3bd846c76701 |
files | plugins/mod_c2s.lua |
diffstat | 1 files changed, 18 insertions(+), 2 deletions(-) [+] |
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;