diff options
author | daurnimator <quae@daurnimator.com> | 2014-03-20 15:22:02 -0400 |
---|---|---|
committer | daurnimator <quae@daurnimator.com> | 2014-03-20 15:22:02 -0400 |
commit | 513bef46c407735b98e45cf49aec968f0ec1019e (patch) | |
tree | 5ebf77d9fcceed6e586e540e4fb3ce5e2453c1a9 | |
parent | 99fb14cb63c5c85ef0e087a393720d3f5d0760ad (diff) | |
download | prosody-513bef46c407735b98e45cf49aec968f0ec1019e.tar.gz prosody-513bef46c407735b98e45cf49aec968f0ec1019e.zip |
plugins/muc/muc.lib: Add route_to_occupant function to send a stanza to all occupant sessions
-rw-r--r-- | plugins/muc/muc.lib.lua | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/plugins/muc/muc.lib.lua b/plugins/muc/muc.lib.lua index 746814ca..af9bd162 100644 --- a/plugins/muc/muc.lib.lua +++ b/plugins/muc/muc.lib.lua @@ -96,6 +96,15 @@ function room_mt:is_locked() return not not self.locked end +function room_mt:route_to_occupant(o_data, stanza) + local to = stanza.attr.to; + for jid in pairs(o_data.sessions) do + stanza.attr.to = jid; + self:_route_stanza(stanza); + end + stanza.attr.to = to; +end + function room_mt:broadcast_presence(stanza, sid, code, nick) stanza = get_filtered_presence(stanza); local occupant = self._occupants[stanza.attr.from]; @@ -113,14 +122,9 @@ function room_mt:broadcast_presence(stanza, sid, code, nick) end end function room_mt:broadcast_message(stanza, historic) - local to = stanza.attr.to; - for occupant, o_data in pairs(self._occupants) do - for jid in pairs(o_data.sessions) do - stanza.attr.to = jid; - self:_route_stanza(stanza); - end + for occupant_jid, o_data in pairs(self._occupants) do + self:route_to_occupant(o_data, stanza) end - stanza.attr.to = to; if historic then -- add to history return self:save_to_history(stanza) end @@ -660,11 +664,8 @@ function room_mt:handle_message_to_occupant(origin, stanza) log("debug", "%s sent private message stanza to %s (%s)", from, to, o_data.jid); stanza:tag("x", { xmlns = "http://jabber.org/protocol/muc#user" }):up(); stanza.attr.from = current_nick; - for jid in pairs(o_data.sessions) do - stanza.attr.to = jid; - self:_route_stanza(stanza); - end - stanza.attr.from, stanza.attr.to = from, to; + self:route_to_occupant(o_data, stanza) + stanza.attr.from = from; return true; end |