Comparison

plugins/mod_muc.lua @ 833:5da1130054d1

MUC: Removed commented and unused code
author Waqas Hussain <waqas20@gmail.com>
date Sat, 21 Feb 2009 01:24:23 +0500
parent 831:e2d2095705dc
child 834:596a6b425eb9
comparison
equal deleted inserted replaced
832:282ae70db19f 833:5da1130054d1
117 rooms_info:set(room, 'subject', subject); 117 rooms_info:set(room, 'subject', subject);
118 save_room(); 118 save_room();
119 local msg = st.message({type='groupchat', from=current_nick}) 119 local msg = st.message({type='groupchat', from=current_nick})
120 :tag('subject'):text(subject):up(); 120 :tag('subject'):text(subject):up();
121 broadcast_message_stanza(room, msg, false); 121 broadcast_message_stanza(room, msg, false);
122 --broadcast_message(current_nick, room, subject or "", nil);
123 return true; 122 return true;
124 end 123 end
125 124
126 function broadcast_presence(type, from, room, code, newnick)
127 local data = rooms:get(room, from);
128 local stanza = st.presence({type=type, from=from})
129 :tag("x", {xmlns='http://jabber.org/protocol/muc#user'})
130 :tag("item", {affiliation=data.affiliation, role=data.role, nick = newnick}):up();
131 if code then
132 stanza:tag("status", {code=code}):up();
133 end
134 local me;
135 local r = rooms:get(room);
136 if r then
137 for occupant, o_data in pairs(r) do
138 if occupant ~= from then
139 stanza.attr.to = o_data.jid;
140 core_route_stanza(component, stanza);
141 else
142 me = o_data.jid;
143 end
144 end
145 end
146 if me then
147 stanza:tag("status", {code='110'});
148 stanza.attr.to = me;
149 core_route_stanza(component, stanza);
150 end
151 end
152 function broadcast_message(from, room, subject, body)
153 local stanza = st.message({type='groupchat', from=from});
154 if subject then stanza:tag('subject'):text(subject):up(); end
155 if body then stanza:tag('body'):text(body):up(); end
156 local r = rooms:get(room);
157 if r then
158 for occupant, o_data in pairs(r) do
159 stanza.attr.to = o_data.jid;
160 core_route_stanza(component, stanza);
161 end
162 if not subject and body then -- add to history
163 local history = rooms_info:get(room, 'history');
164 if not history then history = {}; rooms_info:set(room, 'history', history); end
165 -- stanza = st.clone(stanza);
166 stanza:tag("delay", {xmlns = "urn:xmpp:delay", from = muc_domain, stamp = datetime.datetime()}):up(); -- XEP-0203
167 stanza:tag("x", {xmlns = "jabber:x:delay", from = muc_domain, stamp = datetime.legacy()}):up(); -- XEP-0091 (deprecated)
168 t_insert(history, st.clone(st.preserialize(stanza)));
169 while #history > history_length do t_remove(history, 1) end
170 end
171 end
172 end
173 function broadcast_message_stanza(room, stanza, historic) 125 function broadcast_message_stanza(room, stanza, historic)
174 local r = rooms:get(room); 126 local r = rooms:get(room);
175 if r then 127 if r then
176 for occupant, o_data in pairs(r) do 128 for occupant, o_data in pairs(r) do
177 for jid in pairs(o_data.sessions) do 129 for jid in pairs(o_data.sessions) do
235 if current_nick then 187 if current_nick then
236 log("debug", "kicking %s from %s", current_nick, room); 188 log("debug", "kicking %s from %s", current_nick, room);
237 local data = rooms:get(room, current_nick); 189 local data = rooms:get(room, current_nick);
238 data.role = 'none'; 190 data.role = 'none';
239 local pr = st.presence({type='unavailable', from=current_nick}):tag('status'):text('This participant is kicked from the room because he sent an error presence'):up() 191 local pr = st.presence({type='unavailable', from=current_nick}):tag('status'):text('This participant is kicked from the room because he sent an error presence'):up()
240 --:tag("x", {xmlns='http://jabber.org/protocol/muc#user'})
241 --:tag("item", {affiliation=data.affiliation, role=data.role}):up();
242 broadcast_presence_stanza(room, pr); 192 broadcast_presence_stanza(room, pr);
243 --broadcast_presence('unavailable', current_nick, room); -- TODO also add <status>This participant is kicked from the room because he sent an error presence: badformed error stanza</status>
244 rooms:remove(room, current_nick); 193 rooms:remove(room, current_nick);
245 jid_nick:remove(from, room); 194 jid_nick:remove(from, room);
246 end 195 end
247 elseif type == "unavailable" then -- unavailable 196 elseif type == "unavailable" then -- unavailable
248 if current_nick then 197 if current_nick then
249 log("debug", "%s leaving %s", current_nick, room); 198 log("debug", "%s leaving %s", current_nick, room);
250 -- log("debug", "rooms: %s", require "util.serialization".serialize(rooms.data));
251 -- log("debug", "jid_nick: %s", require "util.serialization".serialize(jid_nick.data));
252 local data = rooms:get(room, current_nick); 199 local data = rooms:get(room, current_nick);
253 data.role = 'none'; 200 data.role = 'none';
254 broadcast_presence_stanza(room, pr); 201 broadcast_presence_stanza(room, pr);
255 --broadcast_presence('unavailable', current_nick, room);
256 rooms:remove(room, current_nick); 202 rooms:remove(room, current_nick);
257 jid_nick:remove(from, room); 203 jid_nick:remove(from, room);
258 end 204 end
259 elseif not type then -- available 205 elseif not type then -- available
260 if current_nick then 206 if current_nick then
270 else 216 else
271 local data = rooms:get(room, current_nick); 217 local data = rooms:get(room, current_nick);
272 local to_nick = select(3, jid_split(to)); 218 local to_nick = select(3, jid_split(to));
273 if to_nick then 219 if to_nick then
274 log("debug", "%s (%s) changing nick to %s", current_nick, data.jid, to); 220 log("debug", "%s (%s) changing nick to %s", current_nick, data.jid, to);
275 -- log("debug", "rooms: %s", require "util.serialization".serialize(rooms.data));
276 -- log("debug", "jid_nick: %s", require "util.serialization".serialize(jid_nick.data));
277 local p = st.presence({type='unavailable', from=current_nick}); 221 local p = st.presence({type='unavailable', from=current_nick});
278 --[[:tag('x', {xmlns='http://jabber.org/protocol/muc#user'})
279 :tag('item', {affiliation=data.affiliation, role=data.role, nick=to_nick}):up()
280 :tag('status', {code='303'});]]
281 broadcast_presence_stanza(room, p, '303', to_nick); 222 broadcast_presence_stanza(room, p, '303', to_nick);
282 --broadcast_presence('unavailable', current_nick, room, '303', to_nick);
283 rooms:remove(room, current_nick); 223 rooms:remove(room, current_nick);
284 rooms:set(room, to, data); 224 rooms:set(room, to, data);
285 jid_nick:set(from, room, to); 225 jid_nick:set(from, room, to);
286 pr.attr.from = to; 226 pr.attr.from = to;
287 rooms:get(room, to).sessions[from] = pr; 227 rooms:get(room, to).sessions[from] = pr;
288 broadcast_presence_stanza(room, pr); 228 broadcast_presence_stanza(room, pr);
289 -- log("debug", "rooms: %s", require "util.serialization".serialize(rooms.data));
290 -- log("debug", "jid_nick: %s", require "util.serialization".serialize(jid_nick.data));
291 --broadcast_presence(nil, to, room, nil);
292 else 229 else
293 --TODO malformed-jid 230 --TODO malformed-jid
294 end 231 end
295 end 232 end
296 end 233 end
323 if r then 260 if r then
324 for occupant, o_data in pairs(r) do 261 for occupant, o_data in pairs(r) do
325 if occupant ~= to then 262 if occupant ~= to then
326 local pres = get_filtered_presence(o_data.sessions[o_data.jid]); 263 local pres = get_filtered_presence(o_data.sessions[o_data.jid]);
327 pres.attr.to, pres.attr.from = from, occupant; 264 pres.attr.to, pres.attr.from = from, occupant;
328 pres 265 pres:tag("x", {xmlns='http://jabber.org/protocol/muc#user'})
329 --local pres = st.presence({to=from, from=occupant})
330 :tag("x", {xmlns='http://jabber.org/protocol/muc#user'})
331 :tag("item", {affiliation=o_data.affiliation, role=o_data.role}):up(); 266 :tag("item", {affiliation=o_data.affiliation, role=o_data.role}):up();
332 core_route_stanza(component, pres); 267 core_route_stanza(component, pres);
333 end 268 end
334 end 269 end
335 end 270 end
336 pr.attr.from = to; 271 pr.attr.from = to;
337 broadcast_presence_stanza(room, pr); 272 broadcast_presence_stanza(room, pr);
338 --broadcast_presence(nil, to, room);
339 local history = rooms_info:get(room, 'history'); -- send discussion history 273 local history = rooms_info:get(room, 'history'); -- send discussion history
340 if history then 274 if history then
341 for _, msg in ipairs(history) do 275 for _, msg in ipairs(history) do
342 msg = st.deserialize(msg); 276 msg = st.deserialize(msg);
343 msg.attr.to=from; 277 msg.attr.to=from;
404 stanza.attr.from = current_nick; 338 stanza.attr.from = current_nick;
405 local subject = getText(stanza, {"subject"}); 339 local subject = getText(stanza, {"subject"});
406 if subject then 340 if subject then
407 set_subject(current_nick, room, subject); -- TODO use broadcast_message_stanza 341 set_subject(current_nick, room, subject); -- TODO use broadcast_message_stanza
408 else 342 else
409 --broadcast_message(current_nick, room, nil, getText(stanza, {"body"}));
410 broadcast_message_stanza(room, stanza, true); 343 broadcast_message_stanza(room, stanza, true);
411 end 344 end
412 end 345 end
413 elseif stanza.name == "presence" then -- hack - some buggy clients send presence updates to the room rather than their nick 346 elseif stanza.name == "presence" then -- hack - some buggy clients send presence updates to the room rather than their nick
414 local to = stanza.attr.to; 347 local to = stanza.attr.to;