+-- 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;
+local user_exists = require "core.usermanager".user_exists;
local full_sessions = full_sessions;
local bare_sessions = bare_sessions;
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
+ 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"));
+ end
+ return true;
+ end
+ end
-- TODO fire post processing events
- if #stanza.tags == 1 then
- return module:fire_event("iq/bare/"..stanza.tags[1].attr.xmlns..":"..stanza.tags[1].name);
+ 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);
-- IQ to a local host recieved
local origin, stanza = data.origin, data.stanza;
- if #stanza.tags == 1 then
- return module:fire_event("iq/host/"..stanza.tags[1].attr.xmlns..":"..stanza.tags[1].name);
+ 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);