mod_auth_anonymous: Fixed a syntax error.
[prosody.git] / plugins / mod_iq.lua
index 10960684218910bf64d0207faf38f036ce5684bd..e90af7814d7c8088f05b7ee925a17eed2b304459 100644 (file)
@@ -1,3 +1,17 @@
+-- Prosody IM
+-- Copyright (C) 2008-2010 Matthew Wild
+-- Copyright (C) 2008-2010 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;
+
+local full_sessions = full_sessions;
+local bare_sessions = bare_sessions;
 
 module:hook("iq/full", function(data)
        -- IQ to full JID recieved
@@ -7,24 +21,47 @@ module:hook("iq/full", function(data)
        if session then
                -- TODO fire post processing event
                session.send(stanza);
-               return true;
        else -- resource not online
-               -- TODO error reply
+               if stanza.attr.type == "get" or stanza.attr.type == "set" then
+                       origin.send(st.error_reply(stanza, "cancel", "service-unavailable"));
+               end
        end
+       return true;
 end);
 
 module:hook("iq/bare", function(data)
        -- IQ to bare JID recieved
        local origin, stanza = data.origin, data.stanza;
 
-       -- TODO if not user exists, return an error
        -- TODO fire post processing events
-       -- TODO fire event with the xmlns:tag of the child, or with the id of errors and results
+       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
+               module:fire_event("iq/bare/"..stanza.attr.id, data);
+               return true;
+       end
+end);
+
+module:hook("iq/self", function(data)
+       -- IQ to bare JID recieved
+       local origin, stanza = data.origin, data.stanza;
+
+       if stanza.attr.type == "get" or stanza.attr.type == "set" then
+               return module:fire_event("iq/self/"..stanza.tags[1].attr.xmlns..":"..stanza.tags[1].name, data);
+       else
+               module:fire_event("iq/self/"..stanza.attr.id, data);
+               return true;
+       end
 end);
 
 module:hook("iq/host", function(data)
        -- IQ to a local host recieved
        local origin, stanza = data.origin, data.stanza;
 
-       -- TODO fire event with the xmlns:tag of the child, or with the id of errors and results
+       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
+               module:fire_event("iq/host/"..stanza.attr.id, data);
+               return true;
+       end
 end);