Software /
code /
prosody
Comparison
plugins/mod_admin_telnet.lua @ 5708:667cf4e45356
mod_admin_telnet: Refactor s2s:close and s2s:closeall
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 20 Jun 2013 20:53:29 +0200 |
parent | 5706:896094da72e4 |
child | 5709:5557b4a4cb49 |
comparison
equal
deleted
inserted
replaced
5707:36a289e9244c | 5708:667cf4e45356 |
---|---|
774 .." presented by "..domain.."."); | 774 .." presented by "..domain.."."); |
775 end | 775 end |
776 | 776 |
777 function def_env.s2s:close(from, to) | 777 function def_env.s2s:close(from, to) |
778 local print, count = self.session.print, 0; | 778 local print, count = self.session.print, 0; |
779 | 779 local s2s_sessions = module:shared"/*/s2s/sessions"; |
780 if not (from and to) then | 780 |
781 local match_id; | |
782 if from and not to then | |
783 match_id, from = from; | |
784 elseif not to then | |
781 return false, "Syntax: s2s:close('from', 'to') - Closes all s2s sessions from 'from' to 'to'"; | 785 return false, "Syntax: s2s:close('from', 'to') - Closes all s2s sessions from 'from' to 'to'"; |
782 elseif from == to then | 786 elseif from == to then |
783 return false, "Both from and to are the same... you can't do that :)"; | 787 return false, "Both from and to are the same... you can't do that :)"; |
784 end | 788 end |
785 | 789 |
786 if hosts[from] and not hosts[to] then | 790 for _, session in pairs(s2s_sessions) do |
787 -- Is an outgoing connection | 791 local id = session.type..tostring(session):sub(10); |
788 local session = hosts[from].s2sout[to]; | 792 if (match_id and match_id == id) |
789 if not session then | 793 or (session.from_host == from and session.to_host == to) then |
790 print("No outgoing connection from "..from.." to "..to) | 794 print(("Closing connection from %s to %s [%s]"):format(session.from_host, session.to_host, id)); |
791 else | |
792 (session.close or s2smanager.destroy_session)(session); | 795 (session.close or s2smanager.destroy_session)(session); |
793 count = count + 1; | 796 count = count + 1 ; |
794 print("Closed outgoing session from "..from.." to "..to); | 797 end |
795 end | 798 end |
796 elseif hosts[to] and not hosts[from] then | |
797 -- Is an incoming connection | |
798 for session in pairs(incoming_s2s) do | |
799 if session.to_host == to and session.from_host == from then | |
800 (session.close or s2smanager.destroy_session)(session); | |
801 count = count + 1; | |
802 end | |
803 end | |
804 | |
805 if count == 0 then | |
806 print("No incoming connections from "..from.." to "..to); | |
807 else | |
808 print("Closed "..count.." incoming session"..((count == 1 and "") or "s").." from "..from.." to "..to); | |
809 end | |
810 elseif hosts[to] and hosts[from] then | |
811 return false, "Both of the hostnames you specified are local, there are no s2s sessions to close"; | |
812 else | |
813 return false, "Neither of the hostnames you specified are being used on this server"; | |
814 end | |
815 | |
816 return true, "Closed "..count.." s2s session"..((count == 1 and "") or "s"); | 799 return true, "Closed "..count.." s2s session"..((count == 1 and "") or "s"); |
817 end | 800 end |
818 | 801 |
819 function def_env.s2s:closeall(host) | 802 function def_env.s2s:closeall(host) |
820 local count = 0; | 803 local count = 0; |
821 | 804 local s2s_sessions = module:shared"/*/s2s/sessions"; |
822 if not host or type(host) ~= "string" then return false, "wrong syntax: please use s2s:closeall('hostname.tld')"; end | 805 for _,session in pairs(s2s_sessions) do |
823 if hosts[host] then | 806 if not host or session.from_host == host or session.to_host == host then |
824 for session in pairs(incoming_s2s) do | 807 session:close(); |
825 if session.to_host == host then | |
826 (session.close or s2smanager.destroy_session)(session); | |
827 count = count + 1; | 808 count = count + 1; |
828 end | 809 end |
829 end | 810 end |
830 for _, session in pairs(hosts[host].s2sout) do | |
831 (session.close or s2smanager.destroy_session)(session); | |
832 count = count + 1; | |
833 end | |
834 else | |
835 for session in pairs(incoming_s2s) do | |
836 if session.from_host == host then | |
837 (session.close or s2smanager.destroy_session)(session); | |
838 count = count + 1; | |
839 end | |
840 end | |
841 for _, h in pairs(hosts) do | |
842 if h.s2sout[host] then | |
843 (h.s2sout[host].close or s2smanager.destroy_session)(h.s2sout[host]); | |
844 count = count + 1; | |
845 end | |
846 end | |
847 end | |
848 | |
849 if count == 0 then return false, "No sessions to close."; | 811 if count == 0 then return false, "No sessions to close."; |
850 else return true, "Closed "..count.." s2s session"..((count == 1 and "") or "s"); end | 812 else return true, "Closed "..count.." s2s session"..((count == 1 and "") or "s"); end |
851 end | 813 end |
852 | 814 |
853 def_env.host = {}; def_env.hosts = def_env.host; | 815 def_env.host = {}; def_env.hosts = def_env.host; |