# HG changeset patch
# User daurnimator <quae@daurnimator.com>
# Date 1393023160 18000
# Node ID c8a749298d514abf7fab04878481f435b047d566
# Parent  1d7e5d091980b3d0d4300c459c55618bf94fa8fc
plugins/muc/muc.lib: Make use of return values to send service-unavailable errors

diff -r 1d7e5d091980 -r c8a749298d51 plugins/muc/muc.lib.lua
--- a/plugins/muc/muc.lib.lua	Fri Feb 21 17:40:16 2014 -0500
+++ b/plugins/muc/muc.lib.lua	Fri Feb 21 17:52:40 2014 -0500
@@ -982,9 +982,8 @@
 		elseif stanza.attr.type == "set" then
 			return self:handle_owner_query_set_to_room(origin, stanza)
 		end
-	elseif type == "set" or type == "get" then
-		origin.send(st.error_reply(stanza, "cancel", "service-unavailable"));
-		return true;
+	else
+		return nil;
 	end
 end
 
@@ -1035,9 +1034,8 @@
 		self:handle_to_occupant(origin, stanza);
 		stanza.attr.to = to;
 		return true;
-	elseif type ~= "error" and type ~= "result" then
-		origin.send(st.error_reply(stanza, "cancel", "service-unavailable"));
-		return true;
+	else
+		return nil;
 	end
 end
 
@@ -1090,9 +1088,7 @@
 			return true;
 		end
 	else
-		if type == "error" or type == "result" then return; end
-		origin.send(st.error_reply(stanza, "cancel", "service-unavailable"));
-		return true;
+		return nil;
 	end
 end
 
@@ -1108,10 +1104,18 @@
 
 function room_mt:handle_stanza(origin, stanza)
 	local to_node, to_host, to_resource = jid_split(stanza.attr.to);
+	local handled
 	if to_resource then
-		self:handle_to_occupant(origin, stanza);
+		handled = self:handle_to_occupant(origin, stanza);
 	else
-		self:handle_to_room(origin, stanza);
+		handled = self:handle_to_room(origin, stanza);
+	end
+
+	if not handled then
+		local type = stanza.attr.type
+		if stanza.name ~= "iq" or type == "get" or type == "set" then
+			origin.send(st.error_reply(stanza, "cancel", "service-unavailable"));
+		end
 	end
 end