Changeset

2214:a4c8b5763d0a

Merge with trunk
author Matthew Wild <mwild1@gmail.com>
date Wed, 25 Nov 2009 17:40:24 +0000
parents 2213:141896297cea (current diff) 2174:13375e6c4ecb (diff)
children 2215:4678aa4567c8
files doc/lxmppd_core_rostermanager.txt doc/lxmppd_core_stanz_dispatch.txt
diffstat 3 files changed, 15 insertions(+), 40 deletions(-) [+]
line wrap: on
line diff
--- a/doc/lxmppd_core_rostermanager.txt	Wed Nov 25 17:39:23 2009 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-lxmppd -> core -> rostermanager.lua
-	requires	"util.datamanager"
-	module		"rostermanager"
-	
-function log(type, message)
-	logs a message of type "rostermanager"
-
-function getroster(username, host)
-	Retrieves the user's roster from the server and loads it with the datamanager
\ No newline at end of file
--- a/doc/lxmppd_core_stanz_dispatch.txt	Wed Nov 25 17:39:23 2009 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-lxmppd -> core -> stanza_dispatch
-	requires	"util.stanza"
-	requires	"core.usermanager"
-	
-function init_stanza_dispatcher(session)
-	Initialises the stanza dispatcher which handles different stanza according
-	to their type and XML namespace, dispatching to required handlers.
-	
-	iq_handlers["jabber:iq:auth"]
-		A list of handlers for "jabber:iq:auth" stanzas -- authentication
-		(request) stanzas.
-		
-		function (stanza)
-			If one of username, password and resource are missing then it ????.
-			If not, then it validates the credentials and replies with the
-			appropriate stanza.
-			
-	iq_handlers["jabber:iq:roster"]
-		A list of handlers for "jabber:iq:roster" stanzas -- roster management
-		
-		function (stanza)
-			Parses the type of stanza for roster management and does what is
-			requested (roster retrieval, etc.)
-	
-	function (stanza)
-		Validates the stanza and calls the required handler
-
--- a/plugins/muc/muc.lib.lua	Wed Nov 25 17:39:23 2009 +0000
+++ b/plugins/muc/muc.lib.lua	Wed Nov 25 17:40:24 2009 +0000
@@ -128,19 +128,21 @@
 	end
 end
 function room_mt:broadcast_message(stanza, historic)
+	local to = stanza.attr.to;
 	for occupant, o_data in pairs(self._occupants) do
 		for jid in pairs(o_data.sessions) do
 			stanza.attr.to = jid;
 			self:_route_stanza(stanza);
 		end
 	end
+	stanza.attr.to = to;
 	if historic then -- add to history
 		local history = self._data['history'];
 		if not history then history = {}; self._data['history'] = history; end
-		-- stanza = st.clone(stanza);
+		stanza = st.clone(stanza);
 		stanza:tag("delay", {xmlns = "urn:xmpp:delay", from = muc_domain, stamp = datetime.datetime()}):up(); -- XEP-0203
 		stanza:tag("x", {xmlns = "jabber:x:delay", from = muc_domain, stamp = datetime.legacy()}):up(); -- XEP-0091 (deprecated)
-		t_insert(history, st.clone(st.preserialize(stanza)));
+		t_insert(history, st.preserialize(stanza));
 		while #history > history_length do t_remove(history, 1) end
 	end
 end
@@ -517,17 +519,26 @@
 		local from, to = stanza.attr.from, stanza.attr.to;
 		local room = jid_bare(to);
 		local current_nick = self._jid_nick[from];
-		if not current_nick then -- not in room
+		local occupant = self._occupants[current_nick];
+		if not occupant then -- not in room
 			origin.send(st.error_reply(stanza, "cancel", "not-acceptable"));
+		elseif occupant.role == "visitor" then
+			origin.send(st.error_reply(stanza, "cancel", "forbidden"));
 		else
 			local from = stanza.attr.from;
 			stanza.attr.from = current_nick;
 			local subject = getText(stanza, {"subject"});
 			if subject then
-				self:set_subject(current_nick, subject); -- TODO use broadcast_message_stanza
+				if occupant.role == "moderator" then
+					self:set_subject(current_nick, subject); -- TODO use broadcast_message_stanza
+				else
+					stanza.attr.from = from;
+					origin.send(st.error_reply(stanza, "cancel", "forbidden"));
+				end
 			else
 				self:broadcast_message(stanza, true);
 			end
+			stanza.attr.from = from;
 		end
 	elseif stanza.name == "message" and type == "error" and is_kickable_error(stanza) then
 		local current_nick = self._jid_nick[stanza.attr.from];