aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Cirillo <maranda@lightwitch.org>2012-07-09 19:50:11 +0000
committerMarco Cirillo <maranda@lightwitch.org>2012-07-09 19:50:11 +0000
commit0035673eee9bac398e503bdcf410f482c140098f (patch)
tree5ddb334bc17920c1f1c8b9ceebe7e157fe99d90e
parent9462cf30c6b16db4b6ac9814f8b06ede8611ccae (diff)
downloadprosody-0035673eee9bac398e503bdcf410f482c140098f.tar.gz
prosody-0035673eee9bac398e503bdcf410f482c140098f.zip
mod_admin_telnet: add s2s:closeall command and relative help entry.
-rw-r--r--plugins/mod_admin_telnet.lua35
1 files changed, 35 insertions, 0 deletions
diff --git a/plugins/mod_admin_telnet.lua b/plugins/mod_admin_telnet.lua
index b56f9291..d378edf4 100644
--- a/plugins/mod_admin_telnet.lua
+++ b/plugins/mod_admin_telnet.lua
@@ -198,6 +198,7 @@ function commands.help(session, data)
elseif section == "s2s" then
print [[s2s:show(domain) - Show all s2s connections for the given domain (or all if no domain given)]]
print [[s2s:close(from, to) - Close a connection from one domain to another]]
+ print [[s2s:closeall(host) - Close all the incoming/outgoing s2s sessions to specified host]]
elseif section == "module" then
print [[module:load(module, host) - Load the specified module on the specified host (or all hosts if none given)]]
print [[module:reload(module, host) - The same, but unloads and loads the module (saving state if the module supports it)]]
@@ -769,6 +770,40 @@ function def_env.s2s:close(from, to)
return true, "Closed "..count.." s2s session"..((count == 1 and "") or "s");
end
+function def_env.s2s:closeall(host)
+ local count = 0;
+
+ if not host or type(host) ~= "string" then return false, "wrong syntax: please use s2s:closeall('hostname.tld')"; end
+ if hosts[host] then
+ for session in pairs(incoming_s2s) do
+ if session.to_host == host then
+ (session.close or s2smanager.destroy_session)(session);
+ count = count + 1;
+ end
+ end
+ for _, session in pairs(hosts[host].s2sout) do
+ (session.close or s2smanager.destroy_session)(session);
+ count = count + 1;
+ end
+ else
+ for session in pairs(incoming_s2s) do
+ if session.from_host == host then
+ (session.close or s2smanager.destroy_session)(session);
+ count = count + 1;
+ end
+ end
+ for _, h in pairs(hosts) do
+ if h.s2sout[host] then
+ (h.s2sout[host].close or s2smanager.destroy_session)(h.s2sout[host]);
+ count = count + 1;
+ end
+ end
+ end
+
+ if count == 0 then return false, "No sessions to close.";
+ else return true, "Closed "..count.." s2s session"..((count == 1 and "") or "s"); end
+end
+
def_env.host = {}; def_env.hosts = def_env.host;
function def_env.host:activate(hostname, config)