Mercurial > prosody-hg
comparison plugins/muc/mod_muc.lua @ 4370:be14f96290a4
MUC: A little cleanup.
| author | Waqas Hussain <waqas20@gmail.com> |
|---|---|
| date | Wed, 31 Aug 2011 23:53:55 +0500 |
| parents | 403aba5e49d5 |
| children | 875b90d5ce0f |
comparison
equal
deleted
inserted
replaced
| 4369:3578ff5d3674 | 4370:be14f96290a4 |
|---|---|
| 98 end | 98 end |
| 99 end | 99 end |
| 100 return reply; -- TODO cache disco reply | 100 return reply; -- TODO cache disco reply |
| 101 end | 101 end |
| 102 | 102 |
| 103 local function handle_to_domain(origin, stanza) | 103 local function handle_to_domain(event) |
| 104 local origin, stanza = event.origin, event.stanza; | |
| 104 local type = stanza.attr.type; | 105 local type = stanza.attr.type; |
| 105 if type == "error" or type == "result" then return; end | 106 if type == "error" or type == "result" then return; end |
| 106 if stanza.name == "iq" and type == "get" then | 107 if stanza.name == "iq" and type == "get" then |
| 107 local xmlns = stanza.tags[1].attr.xmlns; | 108 local xmlns = stanza.tags[1].attr.xmlns; |
| 108 if xmlns == "http://jabber.org/protocol/disco#info" then | 109 if xmlns == "http://jabber.org/protocol/disco#info" then |
| 116 end | 117 end |
| 117 else | 118 else |
| 118 host_room:handle_stanza(origin, stanza); | 119 host_room:handle_stanza(origin, stanza); |
| 119 --origin.send(st.error_reply(stanza, "cancel", "service-unavailable", "The muc server doesn't deal with messages and presence directed at it")); | 120 --origin.send(st.error_reply(stanza, "cancel", "service-unavailable", "The muc server doesn't deal with messages and presence directed at it")); |
| 120 end | 121 end |
| 122 return true; | |
| 121 end | 123 end |
| 122 | 124 |
| 123 function stanza_handler(event) | 125 function stanza_handler(event) |
| 124 local origin, stanza = event.origin, event.stanza; | 126 local origin, stanza = event.origin, event.stanza; |
| 125 local to_node, to_host, to_resource = jid_split(stanza.attr.to); | 127 local bare = jid_bare(stanza.attr.to); |
| 126 if to_node then | 128 local room = rooms[bare]; |
| 127 local bare = to_node.."@"..to_host; | 129 if not room then |
| 128 if to_host == muc_host or bare == muc_host then | 130 if not(restrict_room_creation) or |
| 129 local room = rooms[bare]; | 131 (restrict_room_creation == "admin" and is_admin(stanza.attr.from)) or |
| 130 if not room then | 132 (restrict_room_creation == "local" and select(2, jid_split(stanza.attr.from)) == module.host:gsub("^[^%.]+%.", "")) then |
| 131 if not(restrict_room_creation) or | 133 room = muc_new_room(bare, { |
| 132 (restrict_room_creation == "admin" and is_admin(stanza.attr.from)) or | 134 history_length = max_history_messages; |
| 133 (restrict_room_creation == "local" and select(2, jid_split(stanza.attr.from)) == module.host:gsub("^[^%.]+%.", "")) then | 135 }); |
| 134 room = muc_new_room(bare, { | 136 room.route_stanza = room_route_stanza; |
| 135 history_length = max_history_messages; | 137 room.save = room_save; |
| 136 }); | 138 rooms[bare] = room; |
| 137 room.route_stanza = room_route_stanza; | 139 end |
| 138 room.save = room_save; | |
| 139 rooms[bare] = room; | |
| 140 end | |
| 141 end | |
| 142 if room then | |
| 143 room:handle_stanza(origin, stanza); | |
| 144 if not next(room._occupants) and not persistent_rooms[room.jid] then -- empty, non-persistent room | |
| 145 rooms[bare] = nil; -- discard room | |
| 146 end | |
| 147 else | |
| 148 origin.send(st.error_reply(stanza, "cancel", "not-allowed")); | |
| 149 end | |
| 150 else --[[not for us?]] end | |
| 151 return true; | |
| 152 end | 140 end |
| 153 -- to the main muc domain | 141 if room then |
| 154 handle_to_domain(origin, stanza); | 142 room:handle_stanza(origin, stanza); |
| 143 if not next(room._occupants) and not persistent_rooms[room.jid] then -- empty, non-persistent room | |
| 144 rooms[bare] = nil; -- discard room | |
| 145 end | |
| 146 else | |
| 147 origin.send(st.error_reply(stanza, "cancel", "not-allowed")); | |
| 148 end | |
| 155 return true; | 149 return true; |
| 156 end | 150 end |
| 157 module:hook("iq/bare", stanza_handler, -1); | 151 module:hook("iq/bare", stanza_handler, -1); |
| 158 module:hook("message/bare", stanza_handler, -1); | 152 module:hook("message/bare", stanza_handler, -1); |
| 159 module:hook("presence/bare", stanza_handler, -1); | 153 module:hook("presence/bare", stanza_handler, -1); |
| 160 module:hook("iq/full", stanza_handler, -1); | 154 module:hook("iq/full", stanza_handler, -1); |
| 161 module:hook("message/full", stanza_handler, -1); | 155 module:hook("message/full", stanza_handler, -1); |
| 162 module:hook("presence/full", stanza_handler, -1); | 156 module:hook("presence/full", stanza_handler, -1); |
| 163 module:hook("iq/host", stanza_handler, -1); | 157 module:hook("iq/host", handle_to_domain, -1); |
| 164 module:hook("message/host", stanza_handler, -1); | 158 module:hook("message/host", handle_to_domain, -1); |
| 165 module:hook("presence/host", stanza_handler, -1); | 159 module:hook("presence/host", handle_to_domain, -1); |
| 166 | 160 |
| 167 hosts[module.host].send = function(stanza) -- FIXME do a generic fix | 161 hosts[module.host].send = function(stanza) -- FIXME do a generic fix |
| 168 if stanza.attr.type == "result" or stanza.attr.type == "error" then | 162 if stanza.attr.type == "result" or stanza.attr.type == "error" then |
| 169 core_post_stanza(component, stanza); | 163 core_post_stanza(component, stanza); |
| 170 else error("component.send only supports result and error stanzas at the moment"); end | 164 else error("component.send only supports result and error stanzas at the moment"); end |
