s2smanager: Use unused local, reduce table indexing
[prosody.git] / core / s2smanager.lua
index c05f72292b067a1c4e926e25afeb9aea51d6ccd2..86389d8d99b5f03462900bea7fd2451471afe394 100644 (file)
@@ -9,46 +9,20 @@
 
 
 local hosts = hosts;
-local core_process_stanza = function(a, b) core_process_stanza(a, b); end
-local format = string.format;
-local t_insert, t_sort = table.insert, table.sort;
-local get_traceback = debug.traceback;
-local tostring, pairs, ipairs, getmetatable, newproxy, type, error, tonumber, setmetatable
-    = tostring, pairs, ipairs, getmetatable, newproxy, type, error, tonumber, setmetatable;
-
-local initialize_filters = require "util.filters".initialize;
-local wrapclient = require "net.server".wrapclient;
-local st = require "stanza";
-local stanza = st.stanza;
-local nameprep = require "util.encodings".stringprep.nameprep;
-local cert_verify_identity = require "util.x509".verify_identity;
-local new_ip = require "util.ip".new_ip;
-local rfc3484_dest = require "util.rfc3484".destination;
-
-local fire_event = prosody.events.fire_event;
-local uuid_gen = require "util.uuid".generate;
+local tostring, pairs, ipairs, getmetatable, newproxy, setmetatable
+    = tostring, pairs, ipairs, getmetatable, newproxy, setmetatable;
 
 local logger_init = require "util.logger".init;
 
 local log = logger_init("s2smanager");
 
-local sha256_hash = require "util.hashes".sha256;
-
-local adns, dns = require "net.adns", require "net.dns";
 local config = require "core.configmanager";
-local dns_timeout = config.get("*", "core", "dns_timeout") or 15;
-local max_dns_depth = config.get("*", "core", "dns_max_depth") or 3;
-local cfg_sources = config.get("*", "core", "s2s_interface")
-       or config.get("*", "core", "interface");
-local sources;
-
---FIXME: s2sout should create its own resolver w/ timeout
-dns.settimeout(dns_timeout);
 
 local prosody = _G.prosody;
 incoming_s2s = {};
 prosody.incoming_s2s = incoming_s2s;
 local incoming_s2s = incoming_s2s;
+local fire_event = prosody.events.fire_event;
 
 module "s2smanager"
 
@@ -61,7 +35,7 @@ function new_incoming(conn)
                getmetatable(session.trace).__gc = function () open_sessions = open_sessions - 1; end;
        end
        open_sessions = open_sessions + 1;
-       session.log = logger_init("s2sin"..tostring(conn):match("[a-f0-9]+$"));
+       session.log = logger_init("s2sin"..tostring(session):match("[a-f0-9]+$"));
        incoming_s2s[session] = true;
        return session;
 end
@@ -100,7 +74,7 @@ function make_authenticated(session, host)
        else
                return false;
        end
-       session.log("debug", "connection %s->%s is now authenticated", session.from_host or "(unknown)", session.to_host or "(unknown)");
+       session.log("debug", "connection %s->%s is now authenticated for %s", session.from_host, session.to_host, host);
        
        mark_connected(session);
        
@@ -113,20 +87,25 @@ function mark_connected(session)
        
        local from, to = session.from_host, session.to_host;
        
-       session.log("info", session.direction.." s2s connection "..from.."->"..to.." complete");
+       session.log("info", "%s s2s connection %s->%s complete", session.direction, from, to);
 
        local event_data = { session = session };
        if session.type == "s2sout" then
-               prosody.events.fire_event("s2sout-established", event_data);
-               hosts[session.from_host].events.fire_event("s2sout-established", event_data);
+               fire_event("s2sout-established", event_data);
+               hosts[from].events.fire_event("s2sout-established", event_data);
        else
-               prosody.events.fire_event("s2sin-established", event_data);
-               hosts[session.to_host].events.fire_event("s2sin-established", event_data);
+               local host_session = hosts[to];
+               session.send = function(stanza)
+                       return host_session.events.fire_event("route/remote", { from_host = to, to_host = from, stanza = stanza });
+               end;
+
+               fire_event("s2sin-established", event_data);
+               hosts[to].events.fire_event("s2sin-established", event_data);
        end
        
        if session.direction == "outgoing" then
                if sendq then
-                       session.log("debug", "sending "..#sendq.." queued stanzas across new outgoing connection to "..session.to_host);
+                       session.log("debug", "sending %d queued stanzas across new outgoing connection to %s", #sendq, session.to_host);
                        for i, data in ipairs(sendq) do
                                send(data[1]);
                                sendq[i] = nil;
@@ -154,7 +133,7 @@ local resting_session = { -- Resting, not dead
 function retire_session(session, reason)
        local log = session.log or log;
        for k in pairs(session) do
-               if k ~= "trace" and k ~= "log" and k ~= "id" then
+               if k ~= "trace" and k ~= "log" and k ~= "id" and k ~= "conn" then
                        session[k] = nil;
                end
        end
@@ -179,12 +158,12 @@ function destroy_session(session, reason)
        
        local event_data = { session = session, reason = reason };
        if session.type == "s2sout" then
-               prosody.events.fire_event("s2sout-destroyed", event_data);
+               fire_event("s2sout-destroyed", event_data);
                if hosts[session.from_host] then
                        hosts[session.from_host].events.fire_event("s2sout-destroyed", event_data);
                end
        elseif session.type == "s2sin" then
-               prosody.events.fire_event("s2sin-destroyed", event_data);
+               fire_event("s2sin-destroyed", event_data);
                if hosts[session.to_host] then
                        hosts[session.to_host].events.fire_event("s2sin-destroyed", event_data);
                end