aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Wild <mwild1@gmail.com>2014-08-29 11:54:34 +0100
committerMatthew Wild <mwild1@gmail.com>2014-08-29 11:54:34 +0100
commita76091c611089e18bf72d13e306a798d16c35645 (patch)
treec4b452380f2980302effbdbb3e9cec75519d0944
parent0926e4557e9600392e4ad335239b399e0baa953f (diff)
downloadprosody-a76091c611089e18bf72d13e306a798d16c35645.tar.gz
prosody-a76091c611089e18bf72d13e306a798d16c35645.zip
net.http, net.http.server, mod_c2s, mod_s2s, mod_component, mod_admin_telnet, mod_net_multiplex: Add ondetach to release connection from 'sessions' table (or equivalent)
-rw-r--r--net/http.lua4
-rw-r--r--net/http/server.lua4
-rw-r--r--plugins/mod_admin_telnet.lua4
-rw-r--r--plugins/mod_c2s.lua4
-rw-r--r--plugins/mod_component.lua4
-rw-r--r--plugins/mod_net_multiplex.lua3
-rw-r--r--plugins/mod_s2s/mod_s2s.lua4
7 files changed, 26 insertions, 1 deletions
diff --git a/net/http.lua b/net/http.lua
index 6ddb1900..9dde6062 100644
--- a/net/http.lua
+++ b/net/http.lua
@@ -72,6 +72,10 @@ function listener.ondisconnect(conn, err)
requests[conn] = nil;
end
+function listener.ondetach(conn)
+ requests[conn] = nil;
+end
+
local function request_reader(request, data, err)
if not request.parser then
local function error_cb(reason)
diff --git a/net/http/server.lua b/net/http/server.lua
index 771adf10..7937f87c 100644
--- a/net/http/server.lua
+++ b/net/http/server.lua
@@ -142,6 +142,10 @@ function listener.ondisconnect(conn)
sessions[conn] = nil;
end
+function listener.ondetach(conn)
+ sessions[conn] = nil;
+end
+
function listener.onincoming(conn, data)
sessions[conn]:feed(data);
end
diff --git a/plugins/mod_admin_telnet.lua b/plugins/mod_admin_telnet.lua
index 671b6d89..e4b5a045 100644
--- a/plugins/mod_admin_telnet.lua
+++ b/plugins/mod_admin_telnet.lua
@@ -163,6 +163,10 @@ function console_listener.ondisconnect(conn, err)
end
end
+function console_listener.ondetach(conn)
+ sessions[conn] = nil;
+end
+
-- Console commands --
-- These are simple commands, not valid standalone in Lua
diff --git a/plugins/mod_c2s.lua b/plugins/mod_c2s.lua
index b6895f4b..3d6487c9 100644
--- a/plugins/mod_c2s.lua
+++ b/plugins/mod_c2s.lua
@@ -266,6 +266,10 @@ function listener.associate_session(conn, session)
sessions[conn] = session;
end
+function listener.ondetach(conn)
+ sessions[conn] = nil;
+end
+
module:hook("server-stopping", function(event)
local reason = event.reason;
for _, session in pairs(sessions) do
diff --git a/plugins/mod_component.lua b/plugins/mod_component.lua
index c5a1da81..7bc0f5b7 100644
--- a/plugins/mod_component.lua
+++ b/plugins/mod_component.lua
@@ -319,6 +319,10 @@ function listener.ondisconnect(conn, err)
end
end
+function listener.ondetach(conn)
+ sessions[conn] = nil;
+end
+
module:provides("net", {
name = "component";
private = true;
diff --git a/plugins/mod_net_multiplex.lua b/plugins/mod_net_multiplex.lua
index d666b907..0dd3dc67 100644
--- a/plugins/mod_net_multiplex.lua
+++ b/plugins/mod_net_multiplex.lua
@@ -34,7 +34,6 @@ end
function listener.onincoming(conn, data)
if not data then return; end
local buf = buffers[conn];
- buffers[conn] = nil;
buf = buf and buf..data or data;
for service, multiplex_pattern in pairs(available_services) do
if buf:match(multiplex_pattern) then
@@ -57,6 +56,8 @@ function listener.ondisconnect(conn, err)
buffers[conn] = nil; -- warn if no buffer?
end
+listener.ondetach = listener.ondisconnect;
+
module:provides("net", {
name = "multiplex";
config_prefix = "";
diff --git a/plugins/mod_s2s/mod_s2s.lua b/plugins/mod_s2s/mod_s2s.lua
index 834e6a1c..ee03987d 100644
--- a/plugins/mod_s2s/mod_s2s.lua
+++ b/plugins/mod_s2s/mod_s2s.lua
@@ -638,6 +638,10 @@ function listener.register_outgoing(conn, session)
initialize_session(session);
end
+function listener.ondetach(conn)
+ sessions[conn] = nil;
+end
+
function check_auth_policy(event)
local host, session = event.host, event.session;
local must_secure = secure_auth;