prosodyctl: Add message describing the distinguished name input expected
[prosody.git] / plugins / mod_message.lua
index 6ac23ab23b7ad5c6ba07e637e32faac50ae12e2c..e85da613198d2a17a52e3b5acc7c8a00e4b8aa4e 100644 (file)
@@ -7,14 +7,13 @@
 --
 
 
-local full_sessions = full_sessions;
-local bare_sessions = bare_sessions;
+local full_sessions = prosody.full_sessions;
+local bare_sessions = prosody.bare_sessions;
 
 local st = require "util.stanza";
 local jid_bare = require "util.jid".bare;
 local jid_split = require "util.jid".split;
 local user_exists = require "core.usermanager".user_exists;
-local t_insert = table.insert;
 
 local function process_to_bare(bare, origin, stanza)
        local user = bare_sessions[bare];
@@ -36,22 +35,28 @@ local function process_to_bare(bare, origin, stanza)
                if user then -- some resources are connected
                        local recipients = user.top_resources;
                        if recipients then
+                               local sent;
                                for i=1,#recipients do
-                                       recipients[i].send(stanza);
+                                       sent = recipients[i].send(stanza) or sent;
+                               end
+                               if sent then
+                                       return true;
                                end
-                               return true;
                        end
                end
                -- no resources are online
                local node, host = jid_split(bare);
+               local ok
                if user_exists(node, host) then
                        -- TODO apply the default privacy list
 
-                        module:fire_event('message/offline/store', {
-                            origin = origin,
-                            stanza = stanza,
-                        });
-               else
+                       ok = module:fire_event('message/offline/handle', {
+                           origin = origin,
+                           stanza = stanza,
+                       });
+               end
+
+               if not ok then
                        origin.send(st.error_reply(stanza, "cancel", "service-unavailable"));
                end
        end
@@ -63,9 +68,7 @@ module:hook("message/full", function(data)
        local origin, stanza = data.origin, data.stanza;
        
        local session = full_sessions[stanza.attr.to];
-       if session then
-               -- TODO fire post processing event
-               session.send(stanza);
+       if session and session.send(stanza) then
                return true;
        else -- resource not online
                return process_to_bare(jid_bare(stanza.attr.to), origin, stanza);