Software /
code /
prosody
Comparison
plugins/mod_admin_telnet.lua @ 5710:e66bbfdf588e
mod_admin_telnet: Refactor s2s:show()
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 20 Jun 2013 21:47:38 +0200 |
parent | 5709:5557b4a4cb49 |
child | 5770:7722372aa087 |
comparison
equal
deleted
inserted
replaced
5709:5557b4a4cb49 | 5710:e66bbfdf588e |
---|---|
15 | 15 |
16 local _G = _G; | 16 local _G = _G; |
17 | 17 |
18 local prosody = _G.prosody; | 18 local prosody = _G.prosody; |
19 local hosts = prosody.hosts; | 19 local hosts = prosody.hosts; |
20 local incoming_s2s = prosody.incoming_s2s; | |
21 | 20 |
22 local console_listener = { default_port = 5582; default_mode = "*a"; interface = "127.0.0.1" }; | 21 local console_listener = { default_port = 5582; default_mode = "*a"; interface = "127.0.0.1" }; |
23 | 22 |
24 local iterators = require "util.iterators"; | 23 local iterators = require "util.iterators"; |
25 local keys, values = iterators.keys, iterators.values; | 24 local keys, values = iterators.keys, iterators.values; |
580 end | 579 end |
581 | 580 |
582 | 581 |
583 def_env.s2s = {}; | 582 def_env.s2s = {}; |
584 function def_env.s2s:show(match_jid) | 583 function def_env.s2s:show(match_jid) |
585 local _print = self.session.print; | |
586 local print = self.session.print; | 584 local print = self.session.print; |
587 | 585 |
588 local count_in, count_out = 0,0; | 586 local count_in, count_out = 0,0; |
589 | 587 local s2s_list = { }; |
590 for host, host_session in pairs(hosts) do | 588 |
591 print = function (...) _print(host); _print(...); print = _print; end | 589 local s2s_sessions = module:shared"/*/s2s/sessions"; |
592 for remotehost, session in pairs(host_session.s2sout) do | 590 for _, session in pairs(s2s_sessions) do |
593 if (not match_jid) or remotehost:match(match_jid) or host:match(match_jid) then | 591 local remotehost, localhost, direction; |
594 count_out = count_out + 1; | 592 if session.direction == "outgoing" then |
595 print(session_flags(session, {" ", host, "->", remotehost})); | 593 direction = "->"; |
596 if session.sendq then | 594 count_out = count_out + 1; |
597 print(" There are "..#session.sendq.." queued outgoing stanzas for this connection"); | 595 remotehost, localhost = session.to_host or "?", session.from_host or "?"; |
596 else | |
597 direction = "<-"; | |
598 count_in = count_in + 1; | |
599 remotehost, localhost = session.from_host or "?", session.to_host or "?"; | |
600 end | |
601 local sess_lines = { l = localhost, r = remotehost, | |
602 session_flags(session, { "", direction, remotehost or "?", | |
603 "["..session.type..tostring(session):match("[a-f0-9]*$").."]" })}; | |
604 | |
605 if (not match_jid) or remotehost:match(match_jid) or localhost:match(match_jid) then | |
606 table.insert(s2s_list, sess_lines); | |
607 local print = function (s) table.insert(sess_lines, " "..s); end | |
608 if session.sendq then | |
609 print("There are "..#session.sendq.." queued outgoing stanzas for this connection"); | |
610 end | |
611 if session.type == "s2sout_unauthed" then | |
612 if session.connecting then | |
613 print("Connection not yet established"); | |
614 if not session.srv_hosts then | |
615 if not session.conn then | |
616 print("We do not yet have a DNS answer for this host's SRV records"); | |
617 else | |
618 print("This host has no SRV records, using A record instead"); | |
619 end | |
620 elseif session.srv_choice then | |
621 print("We are on SRV record "..session.srv_choice.." of "..#session.srv_hosts); | |
622 local srv_choice = session.srv_hosts[session.srv_choice]; | |
623 print("Using "..(srv_choice.target or ".")..":"..(srv_choice.port or 5269)); | |
624 end | |
625 elseif session.notopen then | |
626 print("The <stream> has not yet been opened"); | |
627 elseif not session.dialback_key then | |
628 print("Dialback has not been initiated yet"); | |
629 elseif session.dialback_key then | |
630 print("Dialback has been requested, but no result received"); | |
598 end | 631 end |
599 if session.type == "s2sout_unauthed" then | 632 end |
600 if session.connecting then | 633 if session.type == "s2sin_unauthed" then |
601 print(" Connection not yet established"); | 634 print("Connection not yet authenticated"); |
602 if not session.srv_hosts then | 635 elseif session.type == "s2sin" then |
603 if not session.conn then | 636 for name in pairs(session.hosts) do |
604 print(" We do not yet have a DNS answer for this host's SRV records"); | 637 if name ~= session.from_host then |
605 else | 638 print("also hosts "..tostring(name)); |
606 print(" This host has no SRV records, using A record instead"); | |
607 end | |
608 elseif session.srv_choice then | |
609 print(" We are on SRV record "..session.srv_choice.." of "..#session.srv_hosts); | |
610 local srv_choice = session.srv_hosts[session.srv_choice]; | |
611 print(" Using "..(srv_choice.target or ".")..":"..(srv_choice.port or 5269)); | |
612 end | |
613 elseif session.notopen then | |
614 print(" The <stream> has not yet been opened"); | |
615 elseif not session.dialback_key then | |
616 print(" Dialback has not been initiated yet"); | |
617 elseif session.dialback_key then | |
618 print(" Dialback has been requested, but no result received"); | |
619 end | 639 end |
620 end | 640 end |
621 end | 641 end |
622 end | 642 end |
623 local subhost_filter = function (h) | 643 end |
624 return (match_jid and h:match(match_jid)); | 644 |
625 end | 645 -- Sort by local host, then remote host |
626 for session in pairs(incoming_s2s) do | 646 table.sort(s2s_list, function(a,b) |
627 if session.to_host == host and ((not match_jid) or host:match(match_jid) | 647 if a.l == b.l then return a.r < b.r; end |
628 or (session.from_host and session.from_host:match(match_jid)) | 648 return a.l < b.l; |
629 -- Pft! is what I say to list comprehensions | 649 end); |
630 or (session.hosts and #array.collect(keys(session.hosts)):filter(subhost_filter)>0)) then | 650 local lasthost; |
631 count_in = count_in + 1; | 651 for _, sess_lines in ipairs(s2s_list) do |
632 print(session_flags(session, {" ", host, "<-", session.from_host or "(unknown)"})); | 652 if sess_lines.l ~= lasthost then print(sess_lines.l); lasthost=sess_lines.l end |
633 if session.type == "s2sin_unauthed" then | 653 for _, line in ipairs(sess_lines) do print(line); end |
634 print(" Connection not yet authenticated"); | 654 end |
635 end | |
636 for name in pairs(session.hosts) do | |
637 if name ~= session.from_host then | |
638 print(" also hosts "..tostring(name)); | |
639 end | |
640 end | |
641 end | |
642 end | |
643 | |
644 print = _print; | |
645 end | |
646 | |
647 for session in pairs(incoming_s2s) do | |
648 if not session.to_host and ((not match_jid) or session.from_host and session.from_host:match(match_jid)) then | |
649 count_in = count_in + 1; | |
650 print("Other incoming s2s connections"); | |
651 print(" (unknown) <- "..(session.from_host or "(unknown)")); | |
652 end | |
653 end | |
654 | |
655 return true, "Total: "..count_out.." outgoing, "..count_in.." incoming connections"; | 655 return true, "Total: "..count_out.." outgoing, "..count_in.." incoming connections"; |
656 end | 656 end |
657 | 657 |
658 local function print_subject(print, subject) | 658 local function print_subject(print, subject) |
659 for _, entry in ipairs(subject) do | 659 for _, entry in ipairs(subject) do |