mod_admin_adhoc: Implement global module reloading
[prosody.git] / plugins / mod_s2s / mod_s2s.lua
index 321ed0d7f165c899f24014453bce038fbbbfe4bb..15c89ceddface713754e7a0761e74301e2831b03 100644 (file)
@@ -184,6 +184,14 @@ function stream_callbacks.streamopened(session, attr)
        -- TODO: Rename session.secure to session.encrypted
        if session.secure == false then
                session.secure = true;
+
+               -- Check if TLS compression is used
+               local sock = session.conn:socket();
+               if sock.info then
+                       session.compressed = sock:info"compression";
+               elseif sock.compression then
+                       session.compressed = sock:compression(); --COMPAT mw/luasec-hg
+               end
        end
 
        if session.direction == "incoming" then
@@ -421,6 +429,8 @@ local function initialize_session(session)
        add_task(connect_timeout, function ()
                if session.type == "s2sin" or session.type == "s2sout" then
                        return; -- Ok, we're connected
+               elseif session.type == "s2s_destroyed" then
+                       return; -- Session already destroyed
                end
                -- Not connected, need to close session and clean up
                (session.log or log)("debug", "Destroying incomplete session %s->%s due to inactivity",
@@ -477,6 +487,7 @@ end
 function listener.ondisconnect(conn, err)
        local session = sessions[conn];
        if session then
+               sessions[conn] = nil;
                if err and session.direction == "outgoing" and session.notopen then
                        (session.log or log)("debug", "s2s connection attempt failed: %s", err);
                        if s2sout.attempt_connection(session, err) then
@@ -486,7 +497,6 @@ function listener.ondisconnect(conn, err)
                end
                (session.log or log)("debug", "s2s disconnected: %s->%s (%s)", tostring(session.from_host), tostring(session.to_host), tostring(err or "connection closed"));
                s2s_destroy_session(session, err);
-               sessions[conn] = nil;
        end
 end
 
@@ -498,7 +508,16 @@ end
 
 s2sout.set_listener(listener);
 
-module:add_item("net-provider", {
+module:hook("server-stopping", function(event)
+       local reason = event.reason;
+       for _, session in pairs(sessions) do
+               session:close{ condition = "system-shutdown", text = reason };
+       end
+end,500);
+
+
+
+module:provides("net", {
        name = "s2s";
        listener = listener;
        default_port = 5269;