Mercurial > prosody-modules
comparison mod_smacks/mod_smacks.lua @ 3956:ebc1f1d962c5
mod_stanzas: tighten up stanza check and add explanatory text
| author | JC Brand <jc@opkode.com> |
|---|---|
| date | Fri, 27 Mar 2020 11:56:14 +0100 |
| parents | 017f60608fc8 |
| children | bf5d91769f99 |
comparison
equal
deleted
inserted
replaced
| 3955:017f60608fc8 | 3956:ebc1f1d962c5 |
|---|---|
| 197 session.log("debug", "Calling delayed_ack_function directly (still waiting for ack)"); | 197 session.log("debug", "Calling delayed_ack_function directly (still waiting for ack)"); |
| 198 delayed_ack_function(session); | 198 delayed_ack_function(session); |
| 199 end | 199 end |
| 200 end | 200 end |
| 201 | 201 |
| 202 local function is_stanza(stanza) | |
| 203 return stanza.attr and | |
| 204 ( not stanza.attr.xmlns or | |
| 205 stanza.attr.xmlns == 'jabber:client' or | |
| 206 stanza.attr.xmlns == 'jabber:server' | |
| 207 ) and not stanza.name:find":"; | |
| 208 end | |
| 209 | |
| 210 local function outgoing_stanza_filter(stanza, session) | 202 local function outgoing_stanza_filter(stanza, session) |
| 211 if is_stanza(stanza) and not stanza._cached then | 203 -- XXX: Normally you wouldn't have to check the xmlns for a stanza as it's |
| 204 -- supposed to be nil. | |
| 205 -- However, when using mod_smacks with mod_websocket, then mod_websocket's | |
| 206 -- stanzas/out filter can get called before this one and adds the xmlns. | |
| 207 local is_stanza = stanza.attr and | |
| 208 (not stanza.attr.xmlns or stanza.attr.xmlns == 'jabber:client') | |
| 209 and not stanza.name:find":"; | |
| 210 | |
| 211 if is_stanza and not stanza._cached then | |
| 212 local queue = session.outgoing_stanza_queue; | 212 local queue = session.outgoing_stanza_queue; |
| 213 local cached_stanza = st.clone(stanza); | 213 local cached_stanza = st.clone(stanza); |
| 214 cached_stanza._cached = true; | 214 cached_stanza._cached = true; |
| 215 | 215 |
| 216 if cached_stanza and cached_stanza.name ~= "iq" and cached_stanza:get_child("delay", xmlns_delay) == nil then | 216 if cached_stanza and cached_stanza.name ~= "iq" and cached_stanza:get_child("delay", xmlns_delay) == nil then |
| 231 end | 231 end |
| 232 return stanza; | 232 return stanza; |
| 233 end | 233 end |
| 234 | 234 |
| 235 local function count_incoming_stanzas(stanza, session) | 235 local function count_incoming_stanzas(stanza, session) |
| 236 if is_stanza(stanza) then | 236 if not stanza.attr.xmlns then |
| 237 session.handled_stanza_count = session.handled_stanza_count + 1; | 237 session.handled_stanza_count = session.handled_stanza_count + 1; |
| 238 session.log("debug", "Handled %d incoming stanzas", session.handled_stanza_count); | 238 session.log("debug", "Handled %d incoming stanzas", session.handled_stanza_count); |
| 239 end | 239 end |
| 240 return stanza; | 240 return stanza; |
| 241 end | 241 end |
