Mercurial > prosody-modules
comparison mod_smacks/mod_smacks.lua @ 1530:fb7cd669f41b
mod_smacks: Initiate outgoing smacks on s2s when sending request and incoming when the remote says enabled
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Mon, 20 Oct 2014 13:15:14 +0200 |
| parents | 16893646a458 |
| children | 7d86fc477993 |
comparison
equal
deleted
inserted
replaced
| 1529:16893646a458 | 1530:fb7cd669f41b |
|---|---|
| 55 event.features:tag("sm", sm2_attr):tag("optional"):up():up(); | 55 event.features:tag("sm", sm2_attr):tag("optional"):up():up(); |
| 56 event.features:tag("sm", sm3_attr):tag("optional"):up():up(); | 56 event.features:tag("sm", sm3_attr):tag("optional"):up():up(); |
| 57 end | 57 end |
| 58 end); | 58 end); |
| 59 | 59 |
| 60 module:hook_stanza("http://etherx.jabber.org/streams", "features", | |
| 61 function (session, stanza) | |
| 62 if can_do_smacks(session) then | |
| 63 if stanza:get_child("sm", xmlns_sm3) then | |
| 64 session.sends2s(st.stanza("enable", sm3_attr)); | |
| 65 elseif stanza:get_child("sm", xmlns_sm2) then | |
| 66 session.sends2s(st.stanza("enable", sm2_attr)); | |
| 67 end | |
| 68 end | |
| 69 end); | |
| 70 | |
| 71 local function outgoing_stanza_filter(stanza, session) | 60 local function outgoing_stanza_filter(stanza, session) |
| 72 local is_stanza = stanza.attr and not stanza.attr.xmlns; | 61 local is_stanza = stanza.attr and not stanza.attr.xmlns; |
| 73 if is_stanza and not stanza._cached then -- Stanza in default stream namespace | 62 if is_stanza and not stanza._cached then -- Stanza in default stream namespace |
| 74 local queue = session.outgoing_stanza_queue; | 63 local queue = session.outgoing_stanza_queue; |
| 75 local cached_stanza = st.clone(stanza); | 64 local cached_stanza = st.clone(stanza); |
| 163 return true; | 152 return true; |
| 164 end | 153 end |
| 165 module:hook_stanza(xmlns_sm2, "enable", function (session, stanza) return handle_enable(session, stanza, xmlns_sm2); end, 100); | 154 module:hook_stanza(xmlns_sm2, "enable", function (session, stanza) return handle_enable(session, stanza, xmlns_sm2); end, 100); |
| 166 module:hook_stanza(xmlns_sm3, "enable", function (session, stanza) return handle_enable(session, stanza, xmlns_sm3); end, 100); | 155 module:hook_stanza(xmlns_sm3, "enable", function (session, stanza) return handle_enable(session, stanza, xmlns_sm3); end, 100); |
| 167 | 156 |
| 157 module:hook_stanza("http://etherx.jabber.org/streams", "features", | |
| 158 function (session, stanza) | |
| 159 if can_do_smacks(session) then | |
| 160 if stanza:get_child("sm", xmlns_sm3) then | |
| 161 session.sends2s(st.stanza("enable", sm3_attr)); | |
| 162 session.smacks = xmlns_sm3; | |
| 163 elseif stanza:get_child("sm", xmlns_sm2) then | |
| 164 session.sends2s(st.stanza("enable", sm2_attr)); | |
| 165 session.smacks = xmlns_sm2; | |
| 166 else | |
| 167 return; | |
| 168 end | |
| 169 wrap_session_out(session, false); | |
| 170 end | |
| 171 end); | |
| 172 | |
| 168 function handle_enabled(session, stanza, xmlns_sm) | 173 function handle_enabled(session, stanza, xmlns_sm) |
| 169 module:log("debug", "Enabling stream management"); | 174 module:log("debug", "Enabling stream management"); |
| 170 session.smacks = xmlns_sm; | 175 session.smacks = xmlns_sm; |
| 171 | 176 |
| 172 wrap_session(session, false); | 177 wrap_session_in(session, false); |
| 173 | 178 |
| 174 -- FIXME Resume? | 179 -- FIXME Resume? |
| 175 | 180 |
| 176 return true; | 181 return true; |
| 177 end | 182 end |
