Mercurial > prosody-modules
comparison mod_smacks/mod_smacks.lua @ 1518:9475fe14d58d
mod_smacks: Correctly check if what is being sent is a stanza
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Wed, 08 Oct 2014 12:56:21 +0200 |
| parents | 8ac4438925cf |
| children | 2881d532f385 |
comparison
equal
deleted
inserted
replaced
| 1517:8ac4438925cf | 1518:9475fe14d58d |
|---|---|
| 80 queue = session.outgoing_stanza_queue; | 80 queue = session.outgoing_stanza_queue; |
| 81 end | 81 end |
| 82 | 82 |
| 83 local _send = session.sends2s or session.send; | 83 local _send = session.sends2s or session.send; |
| 84 local function new_send(stanza) | 84 local function new_send(stanza) |
| 85 local xmlns = stanza.attr and stanza.attr.xmlns; | 85 local is_stanza = stanza.attr and not stanza.attr.xmlns; |
| 86 if not xmlns then -- Stanza in default stream namespace | 86 if is_stanza then -- Stanza in default stream namespace |
| 87 module:log("debug", "st.clone( %s ) -- %s a stanza", tostring(stanza), is_stanza and "is" or "is not"); | |
| 87 local cached_stanza = st.clone(stanza); | 88 local cached_stanza = st.clone(stanza); |
| 88 | 89 |
| 89 if cached_stanza and cached_stanza:get_child("delay", xmlns_delay) == nil then | 90 if cached_stanza and cached_stanza:get_child("delay", xmlns_delay) == nil then |
| 90 cached_stanza = cached_stanza:tag("delay", { xmlns = xmlns_delay, from = session.host, stamp = datetime.datetime()}); | 91 cached_stanza = cached_stanza:tag("delay", { xmlns = xmlns_delay, from = session.host, stamp = datetime.datetime()}); |
| 91 end | 92 end |
| 98 -- The session is hibernating, no point in sending the stanza | 99 -- The session is hibernating, no point in sending the stanza |
| 99 -- over a dead connection. It will be delivered upon resumption. | 100 -- over a dead connection. It will be delivered upon resumption. |
| 100 return true; | 101 return true; |
| 101 end | 102 end |
| 102 local ok, err = _send(stanza); | 103 local ok, err = _send(stanza); |
| 103 if ok and #queue > max_unacked_stanzas and not session.awaiting_ack and not xmlns then | 104 if ok and #queue > max_unacked_stanzas and not session.awaiting_ack and is_stanza then |
| 104 session.awaiting_ack = true; | 105 session.awaiting_ack = true; |
| 105 return _send(st.stanza("r", sm_attr)); | 106 return _send(st.stanza("r", sm_attr)); |
| 106 end | 107 end |
| 107 return ok, err; | 108 return ok, err; |
| 108 end | 109 end |
