- local to_node, to_host, to_resource = jid_split(stanza.attr.to);
- if to_node then
- local bare = to_node.."@"..to_host;
- if to_host == muc_host or bare == muc_host then
- local room = rooms[bare];
- if not room then
- if not(restrict_room_creation) or
- (restrict_room_creation == "admin" and is_admin(stanza.attr.from)) or
- (restrict_room_creation == "local" and select(2, jid_split(stanza.attr.from)) == module.host:gsub("^[^%.]+%.", "")) then
- room = muc_new_room(bare, {
- history_length = max_history_messages;
- });
- room.route_stanza = room_route_stanza;
- room.save = room_save;
- rooms[bare] = room;
- end
- end
- if room then
- room:handle_stanza(origin, stanza);
- if not next(room._occupants) and not persistent_rooms[room.jid] then -- empty, non-persistent room
- rooms[bare] = nil; -- discard room
- end
- else
- origin.send(st.error_reply(stanza, "cancel", "not-allowed"));
- end
- else --[[not for us?]] end
- return true;
+ local bare = jid_bare(stanza.attr.to);
+ local room = rooms[bare];
+ if not room then
+ if not(restrict_room_creation) or
+ (restrict_room_creation == "admin" and is_admin(stanza.attr.from)) or
+ (restrict_room_creation == "local" and select(2, jid_split(stanza.attr.from)) == module.host:gsub("^[^%.]+%.", "")) then
+ room = muc_new_room(bare, {
+ history_length = max_history_messages;
+ });
+ room.route_stanza = room_route_stanza;
+ room.save = room_save;
+ rooms[bare] = room;
+ end
+ end
+ if room then
+ room:handle_stanza(origin, stanza);
+ if not next(room._occupants) and not persistent_rooms[room.jid] then -- empty, non-persistent room
+ rooms[bare] = nil; -- discard room
+ end
+ else
+ origin.send(st.error_reply(stanza, "cancel", "not-allowed"));