Mercurial > prosody-hg
comparison plugins/muc/muc.lib.lua @ 2005:478ba7e85862
MUC: Rewrote code for mediated invites to be more robust, and to support legacy clients.
| author | Waqas Hussain <waqas20@gmail.com> |
|---|---|
| date | Sun, 18 Oct 2009 15:28:00 +0500 |
| parents | 05054e360d89 |
| children | 0c62bed9d338 |
comparison
equal
deleted
inserted
replaced
| 2004:5033348feba8 | 2005:478ba7e85862 |
|---|---|
| 537 stanza.attr.to = to; | 537 stanza.attr.to = to; |
| 538 elseif type ~= "error" and type ~= "result" then | 538 elseif type ~= "error" and type ~= "result" then |
| 539 origin.send(st.error_reply(stanza, "cancel", "service-unavailable")); | 539 origin.send(st.error_reply(stanza, "cancel", "service-unavailable")); |
| 540 end | 540 end |
| 541 elseif stanza.name == "message" and not stanza.attr.type and #stanza.tags == 1 and self._jid_nick[stanza.attr.from] | 541 elseif stanza.name == "message" and not stanza.attr.type and #stanza.tags == 1 and self._jid_nick[stanza.attr.from] |
| 542 and stanza.tags[1].name == "x" and stanza.tags[1].attr.xmlns == "http://jabber.org/protocol/muc#user" and #stanza.tags[1].tags == 1 | 542 and stanza.tags[1].name == "x" and stanza.tags[1].attr.xmlns == "http://jabber.org/protocol/muc#user" then |
| 543 and stanza.tags[1].tags[1].name == "invite" and stanza.tags[1].tags[1].attr.to then | 543 local x = stanza.tags[1]; |
| 544 local _from, _to = stanza.attr.from, stanza.attr.to; | 544 local payload = (#x.tags == 1 and x.tags[1]); |
| 545 local _invitee = stanza.tags[1].tags[1].attr.to; | 545 if payload and payload.name == "invite" and payload.attr.to then |
| 546 stanza.attr.from, stanza.attr.to = _to, _invitee; | 546 local _from, _to = stanza.attr.from, stanza.attr.to; |
| 547 stanza.tags[1].tags[1].attr.from, stanza.tags[1].tags[1].attr.to = _from, nil; | 547 local _invitee = jid_prep(payload.attr.to); |
| 548 self:route_stanza(stanza); | 548 if _invitee then |
| 549 stanza.tags[1].tags[1].attr.from, stanza.tags[1].tags[1].attr.to = nil, _invitee; | 549 local _reason = payload.tags[1] and payload.tags[1].name == 'reason' and #payload.tags[1].tags == 0 and payload.tags[1][1]; |
| 550 stanza.attr.from, stanza.attr.to = _from, _to; | 550 local invite = st.message({from = _to, to = _invitee, id = stanza.attr.id}) |
| 551 :tag('x', {xmlns='http://jabber.org/protocol/muc#user'}) | |
| 552 :tag('invite', {from=_from}) | |
| 553 :tag('reason'):text(_reason or ""):up() | |
| 554 :up() | |
| 555 :up() | |
| 556 :tag('x', {xmlns="jabber:x:conference", jid=_to}) -- COMPAT: Some older clients expect this | |
| 557 :text(_reason or "") | |
| 558 :up() | |
| 559 :tag('body') -- Add a plain message for clients which don't support invites | |
| 560 :text(_from..' invited you to the room '.._to..(_reason and (' ('.._reason..')') or "")) | |
| 561 :up(); | |
| 562 self:route_stanza(invite); | |
| 563 else | |
| 564 origin.send(st.error_reply(stanza, "cancel", "jid-malformed")); | |
| 565 end | |
| 566 else | |
| 567 origin.send(st.error_reply(stanza, "cancel", "bad-request")); | |
| 568 end | |
| 551 else | 569 else |
| 552 if type == "error" or type == "result" then return; end | 570 if type == "error" or type == "result" then return; end |
| 553 origin.send(st.error_reply(stanza, "cancel", "service-unavailable")); | 571 origin.send(st.error_reply(stanza, "cancel", "service-unavailable")); |
| 554 end | 572 end |
| 555 end | 573 end |
