Mercurial > prosody-hg
comparison plugins/muc/muc.lib.lua @ 2053:f5a198127dd3
MUC: Fixed: affiliation='none' was omitted from some presence broadcasts.
| author | Waqas Hussain <waqas20@gmail.com> |
|---|---|
| date | Sun, 25 Oct 2009 21:07:32 +0500 |
| parents | 2567f4bf0085 |
| children | 1ee862fd1afe |
comparison
equal
deleted
inserted
replaced
| 2052:161db352822c | 2053:f5a198127dd3 |
|---|---|
| 113 | 113 |
| 114 function room_mt:broadcast_presence(stanza, sid, code, nick) | 114 function room_mt:broadcast_presence(stanza, sid, code, nick) |
| 115 stanza = get_filtered_presence(stanza); | 115 stanza = get_filtered_presence(stanza); |
| 116 local occupant = self._occupants[stanza.attr.from]; | 116 local occupant = self._occupants[stanza.attr.from]; |
| 117 stanza:tag("x", {xmlns='http://jabber.org/protocol/muc#user'}) | 117 stanza:tag("x", {xmlns='http://jabber.org/protocol/muc#user'}) |
| 118 :tag("item", {affiliation=occupant.affiliation, role=occupant.role, nick=nick}):up(); | 118 :tag("item", {affiliation=occupant.affiliation or "none", role=occupant.role or "none", nick=nick}):up(); |
| 119 if code then | 119 if code then |
| 120 stanza:tag("status", {code=code}):up(); | 120 stanza:tag("status", {code=code}):up(); |
| 121 end | 121 end |
| 122 self:broadcast_except_nick(stanza, stanza.attr.from); | 122 self:broadcast_except_nick(stanza, stanza.attr.from); |
| 123 local me = self._occupants[stanza.attr.from]; | 123 local me = self._occupants[stanza.attr.from]; |
| 160 for occupant, o_data in pairs(self._occupants) do | 160 for occupant, o_data in pairs(self._occupants) do |
| 161 if occupant ~= current_nick then | 161 if occupant ~= current_nick then |
| 162 local pres = get_filtered_presence(o_data.sessions[o_data.jid]); | 162 local pres = get_filtered_presence(o_data.sessions[o_data.jid]); |
| 163 pres.attr.to, pres.attr.from = to, occupant; | 163 pres.attr.to, pres.attr.from = to, occupant; |
| 164 pres:tag("x", {xmlns='http://jabber.org/protocol/muc#user'}) | 164 pres:tag("x", {xmlns='http://jabber.org/protocol/muc#user'}) |
| 165 :tag("item", {affiliation=o_data.affiliation, role=o_data.role}):up(); | 165 :tag("item", {affiliation=o_data.affiliation or "none", role=o_data.role or "none"}):up(); |
| 166 self:route_stanza(pres); | 166 self:route_stanza(pres); |
| 167 end | 167 end |
| 168 end | 168 end |
| 169 end | 169 end |
| 170 function room_mt:send_history(to) | 170 function room_mt:send_history(to) |
| 230 local jid = occupant.jid; | 230 local jid = occupant.jid; |
| 231 occupant.jid = new_jid; | 231 occupant.jid = new_jid; |
| 232 occupant.sessions[from] = nil; | 232 occupant.sessions[from] = nil; |
| 233 pr.attr.to = from; | 233 pr.attr.to = from; |
| 234 pr:tag("x", {xmlns='http://jabber.org/protocol/muc#user'}) | 234 pr:tag("x", {xmlns='http://jabber.org/protocol/muc#user'}) |
| 235 :tag("item", {affiliation=occupant.affiliation, role='none'}):up() | 235 :tag("item", {affiliation=occupant.affiliation or "none", role='none'}):up() |
| 236 :tag("status", {code='110'}); | 236 :tag("status", {code='110'}); |
| 237 self:route_stanza(pr); | 237 self:route_stanza(pr); |
| 238 if jid ~= new_jid then | 238 if jid ~= new_jid then |
| 239 pr = st.clone(occupant.sessions[new_jid]) | 239 pr = st.clone(occupant.sessions[new_jid]) |
| 240 :tag("x", {xmlns='http://jabber.org/protocol/muc#user'}) | 240 :tag("x", {xmlns='http://jabber.org/protocol/muc#user'}) |
| 241 :tag("item", {affiliation=occupant.affiliation, role=occupant.role}); | 241 :tag("item", {affiliation=occupant.affiliation or "none", role=occupant.role or "none"}); |
| 242 pr.attr.from = current_nick; | 242 pr.attr.from = current_nick; |
| 243 self:broadcast_except_nick(pr, current_nick); | 243 self:broadcast_except_nick(pr, current_nick); |
| 244 end | 244 end |
| 245 else | 245 else |
| 246 occupant.role = 'none'; | 246 occupant.role = 'none'; |
| 321 if not is_merge then | 321 if not is_merge then |
| 322 self:broadcast_presence(pr, from); | 322 self:broadcast_presence(pr, from); |
| 323 else | 323 else |
| 324 pr.attr.to = from; | 324 pr.attr.to = from; |
| 325 self:route_stanza(pr:tag("x", {xmlns='http://jabber.org/protocol/muc#user'}) | 325 self:route_stanza(pr:tag("x", {xmlns='http://jabber.org/protocol/muc#user'}) |
| 326 :tag("item", {affiliation=affiliation, role=role}):up() | 326 :tag("item", {affiliation=affiliation or "none", role=role or "none"}):up() |
| 327 :tag("status", {code='110'})); | 327 :tag("status", {code='110'})); |
| 328 end | 328 end |
| 329 self:send_history(from); | 329 self:send_history(from); |
| 330 else -- banned | 330 else -- banned |
| 331 local reply = st.error_reply(stanza, "auth", "forbidden"):up(); | 331 local reply = st.error_reply(stanza, "auth", "forbidden"):up(); |
