Merge 0.6.2/waqas with 0.6.2/MattJ
[prosody.git] / plugins / mod_iq.lua
index 046bebd6cf0bc339fbcd8ab84338ab860023fd08..5be045335c478e256913228207d31fc76b6f3719 100644 (file)
@@ -1,3 +1,11 @@
+-- Prosody IM
+-- Copyright (C) 2008-2009 Matthew Wild
+-- Copyright (C) 2008-2009 Waqas Hussain
+-- 
+-- This project is MIT/X11 licensed. Please see the
+-- COPYING file in the source package for more information.
+--
+
 
 local st = require "util.stanza";
 local jid_split = require "util.jid".split;
@@ -26,8 +34,9 @@ module:hook("iq/bare", function(data)
        -- IQ to bare JID recieved
        local origin, stanza = data.origin, data.stanza;
 
-       if not bare_sessions[stanza.attr.to] then -- quick check for account existance
-               local node, host = jid_split(stanza.attr.to);
+       local to = stanza.attr.to;
+       if to and not bare_sessions[to] then -- quick check for account existance
+               local node, host = jid_split(to);
                if not user_exists(node, host) then -- full check for account existance
                        if stanza.attr.type == "get" or stanza.attr.type == "set" then
                                origin.send(st.error_reply(stanza, "cancel", "service-unavailable"));
@@ -36,10 +45,11 @@ module:hook("iq/bare", function(data)
                end
        end
        -- TODO fire post processing events
-       if #stanza.tags == 1 then
+       if stanza.attr.type == "get" or stanza.attr.type == "set" then
                return module:fire_event("iq/bare/"..stanza.tags[1].attr.xmlns..":"..stanza.tags[1].name, data);
        else
-               return true; -- TODO do something with results and errors
+               module:fire_event("iq/bare/"..stanza.attr.id, data);
+               return true;
        end
 end);
 
@@ -47,9 +57,10 @@ module:hook("iq/host", function(data)
        -- IQ to a local host recieved
        local origin, stanza = data.origin, data.stanza;
 
-       if #stanza.tags == 1 then
+       if stanza.attr.type == "get" or stanza.attr.type == "set" then
                return module:fire_event("iq/host/"..stanza.tags[1].attr.xmlns..":"..stanza.tags[1].name, data);
        else
-               return true; -- TODO do something with results and errors
+               module:fire_event("iq/host/"..stanza.attr.id, data);
+               return true;
        end
 end);