Software /
code /
prosody
Annotate
plugins/mod_admin_telnet.lua @ 11471:ab03de8e503e
util.datamapper: Handle nested arrays or objects in arrays
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Mon, 22 Mar 2021 10:05:41 +0100 |
parent | 10859:8de0057b4279 |
child | 12977:74b9e05af71e |
rev | line source |
---|---|
1523
841d61be198f
Remove version number from copyright headers
Matthew Wild <mwild1@gmail.com>
parents:
1506
diff
changeset
|
1 -- Prosody IM |
2923
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2870
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2870
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5770
diff
changeset
|
4 -- |
758 | 5 -- This project is MIT/X11 licensed. Please see the |
6 -- COPYING file in the source package for more information. | |
519
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
461
diff
changeset
|
7 -- |
9404
f40b0cd41a87
mod_admin_telnet: Remove or rename various unused arguments and variables [luacheck]
Kim Alvefur <zash@zash.se>
parents:
9403
diff
changeset
|
8 -- luacheck: ignore 212/self |
519
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
461
diff
changeset
|
9 |
4623
403b56b78018
mod_posix, mod_bosh, mod_admin_telnet: Use module:set_global()
Kim Alvefur <zash@zash.se>
parents:
4582
diff
changeset
|
10 module:set_global(); |
10857
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
11 module:depends("admin_shell"); |
736 | 12 |
4989
573123ff2ab0
mod_admin_telnet: Always handle commands terminated by line feeds - ensures consistency even when packets are joined or split on the network
Matthew Wild <mwild1@gmail.com>
parents:
4979
diff
changeset
|
13 local console_listener = { default_port = 5582; default_mode = "*a"; interface = "127.0.0.1" }; |
736 | 14 |
9735
2d8ca54ecbc6
mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents:
9734
diff
changeset
|
15 local async = require "util.async"; |
10857
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
16 local st = require "util.stanza"; |
1315
bfcd3f0a49df
mod_console: Much improved module load/unload/reload commands
Matthew Wild <mwild1@gmail.com>
parents:
1241
diff
changeset
|
17 |
10857
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
18 local def_env = module:shared("admin_shell/env"); |
736 | 19 local default_env_mt = { __index = def_env }; |
20 | |
10857
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
21 local function printbanner(session) |
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
22 local option = module:get_option_string("console_banner", "full"); |
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
23 if option == "full" or option == "graphic" then |
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
24 session.print [[ |
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
25 ____ \ / _ |
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
26 | _ \ _ __ ___ ___ _-_ __| |_ _ |
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
27 | |_) | '__/ _ \/ __|/ _ \ / _` | | | | |
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
28 | __/| | | (_) \__ \ |_| | (_| | |_| | |
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
29 |_| |_| \___/|___/\___/ \__,_|\__, | |
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
30 A study in simplicity |___/ |
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
31 |
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
32 ]] |
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
33 end |
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
34 if option == "short" or option == "full" then |
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
35 session.print("Welcome to the Prosody administration console. For a list of commands, type: help"); |
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
36 session.print("You may find more help on using this console in our online documentation at "); |
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
37 session.print("https://prosody.im/doc/console\n"); |
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
38 end |
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
39 if option ~= "short" and option ~= "full" and option ~= "graphic" then |
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
40 session.print(option); |
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
41 end |
1342
947d94e3619f
mod_console: Redirect print() to console session when executing commands in global environment
Matthew Wild <mwild1@gmail.com>
parents:
1341
diff
changeset
|
42 end |
947d94e3619f
mod_console: Redirect print() to console session when executing commands in global environment
Matthew Wild <mwild1@gmail.com>
parents:
1341
diff
changeset
|
43 |
736 | 44 console = {}; |
45 | |
9735
2d8ca54ecbc6
mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents:
9734
diff
changeset
|
46 local runner_callbacks = {}; |
2d8ca54ecbc6
mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents:
9734
diff
changeset
|
47 |
2d8ca54ecbc6
mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents:
9734
diff
changeset
|
48 function runner_callbacks:ready() |
2d8ca54ecbc6
mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents:
9734
diff
changeset
|
49 self.data.conn:resume(); |
2d8ca54ecbc6
mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents:
9734
diff
changeset
|
50 end |
2d8ca54ecbc6
mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents:
9734
diff
changeset
|
51 |
2d8ca54ecbc6
mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents:
9734
diff
changeset
|
52 function runner_callbacks:waiting() |
2d8ca54ecbc6
mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents:
9734
diff
changeset
|
53 self.data.conn:pause(); |
2d8ca54ecbc6
mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents:
9734
diff
changeset
|
54 end |
2d8ca54ecbc6
mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents:
9734
diff
changeset
|
55 |
2d8ca54ecbc6
mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents:
9734
diff
changeset
|
56 function runner_callbacks:error(err) |
2d8ca54ecbc6
mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents:
9734
diff
changeset
|
57 module:log("error", "Traceback[telnet]: %s", err); |
10068
73a8192058f9
mod_admin_telnet: Move error handling to thread callback (fixes #1391)
Kim Alvefur <zash@zash.se>
parents:
10067
diff
changeset
|
58 |
73a8192058f9
mod_admin_telnet: Move error handling to thread callback (fixes #1391)
Kim Alvefur <zash@zash.se>
parents:
10067
diff
changeset
|
59 self.data.print("Fatal error while running command, it did not complete"); |
73a8192058f9
mod_admin_telnet: Move error handling to thread callback (fixes #1391)
Kim Alvefur <zash@zash.se>
parents:
10067
diff
changeset
|
60 self.data.print("Error: "..tostring(err)); |
9735
2d8ca54ecbc6
mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents:
9734
diff
changeset
|
61 end |
2d8ca54ecbc6
mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents:
9734
diff
changeset
|
62 |
2d8ca54ecbc6
mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents:
9734
diff
changeset
|
63 |
736 | 64 function console:new_session(conn) |
2145
daeb6ebf304c
mod_console: Update for new net.server API
Matthew Wild <mwild1@gmail.com>
parents:
2087
diff
changeset
|
65 local w = function(s) conn:write(s:gsub("\n", "\r\n")); end; |
736 | 66 local session = { conn = conn; |
10857
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
67 send = function (t) |
10859
8de0057b4279
mod_admin_shell, mod_admin_telnet, util.prosodyctl.shell: Separate output from final result
Matthew Wild <mwild1@gmail.com>
parents:
10857
diff
changeset
|
68 if st.is_stanza(t) and (t.name == "repl-result" or t.name == "repl-output") then |
10857
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
69 t = "| "..t:get_text().."\n"; |
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
70 end |
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
71 w(tostring(t)); |
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
72 end; |
3404
33c81ee280e3
mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents:
3044
diff
changeset
|
73 print = function (...) |
33c81ee280e3
mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents:
3044
diff
changeset
|
74 local t = {}; |
33c81ee280e3
mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents:
3044
diff
changeset
|
75 for i=1,select("#", ...) do |
33c81ee280e3
mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents:
3044
diff
changeset
|
76 t[i] = tostring(select(i, ...)); |
33c81ee280e3
mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents:
3044
diff
changeset
|
77 end |
33c81ee280e3
mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents:
3044
diff
changeset
|
78 w("| "..table.concat(t, "\t").."\n"); |
33c81ee280e3
mod_console: Added support for multiple arguments to print().
Waqas Hussain <waqas20@gmail.com>
parents:
3044
diff
changeset
|
79 end; |
10796
89d810a23ee0
mod_admin_telnet: Reuse existing pretty printing setup
Kim Alvefur <zash@zash.se>
parents:
10795
diff
changeset
|
80 serialize = tostring; |
2253
a3537266a916
mod_console: Update for new server API, fixes traceback when closing console sessions
Matthew Wild <mwild1@gmail.com>
parents:
2145
diff
changeset
|
81 disconnect = function () conn:close(); end; |
736 | 82 }; |
83 session.env = setmetatable({}, default_env_mt); | |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5770
diff
changeset
|
84 |
9735
2d8ca54ecbc6
mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents:
9734
diff
changeset
|
85 session.thread = async.runner(function (line) |
2d8ca54ecbc6
mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents:
9734
diff
changeset
|
86 console:process_line(session, line); |
2d8ca54ecbc6
mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents:
9734
diff
changeset
|
87 session.send(string.char(0)); |
2d8ca54ecbc6
mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents:
9734
diff
changeset
|
88 end, runner_callbacks, session); |
2d8ca54ecbc6
mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents:
9734
diff
changeset
|
89 |
736 | 90 -- Load up environment with helper objects |
91 for name, t in pairs(def_env) do | |
92 if type(t) == "table" then | |
93 session.env[name] = setmetatable({ session = session }, { __index = t }); | |
94 end | |
95 end | |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5770
diff
changeset
|
96 |
10796
89d810a23ee0
mod_admin_telnet: Reuse existing pretty printing setup
Kim Alvefur <zash@zash.se>
parents:
10795
diff
changeset
|
97 session.env.output:configure(); |
89d810a23ee0
mod_admin_telnet: Reuse existing pretty printing setup
Kim Alvefur <zash@zash.se>
parents:
10795
diff
changeset
|
98 |
736 | 99 return session; |
100 end | |
101 | |
5186
ad898e50b8f3
mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents:
5168
diff
changeset
|
102 function console:process_line(session, line) |
10857
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
103 line = line:gsub("\r?\n$", ""); |
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
104 if line == "bye" or line == "quit" or line == "exit" or line:byte() == 4 then |
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
105 session.print("See you!"); |
826023c3322b
mod_admin_telnet: Become a front for mod_admin_shell
Matthew Wild <mwild1@gmail.com>
parents:
10845
diff
changeset
|
106 session:disconnect(); |
10067
598befab492e
mod_admin_telnet: Check for simple commands before executing in sandbox
Kim Alvefur <zash@zash.se>
parents:
10044
diff
changeset
|
107 return; |
598befab492e
mod_admin_telnet: Check for simple commands before executing in sandbox
Kim Alvefur <zash@zash.se>
parents:
10044
diff
changeset
|
108 end |
10859
8de0057b4279
mod_admin_shell, mod_admin_telnet, util.prosodyctl.shell: Separate output from final result
Matthew Wild <mwild1@gmail.com>
parents:
10857
diff
changeset
|
109 return module:fire_event("admin/repl-input", { origin = session, stanza = st.stanza("repl-input"):text(line) }); |
5186
ad898e50b8f3
mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents:
5168
diff
changeset
|
110 end |
ad898e50b8f3
mod_admin_telnet: Refactor so that command processing is performed in a separate function (usable from other modules)
Matthew Wild <mwild1@gmail.com>
parents:
5168
diff
changeset
|
111 |
736 | 112 local sessions = {}; |
113 | |
10845
785fa0112411
mod_admin_telnet: Update existing sessions on reload
Kim Alvefur <zash@zash.se>
parents:
10798
diff
changeset
|
114 function module.save() |
785fa0112411
mod_admin_telnet: Update existing sessions on reload
Kim Alvefur <zash@zash.se>
parents:
10798
diff
changeset
|
115 return { sessions = sessions } |
785fa0112411
mod_admin_telnet: Update existing sessions on reload
Kim Alvefur <zash@zash.se>
parents:
10798
diff
changeset
|
116 end |
785fa0112411
mod_admin_telnet: Update existing sessions on reload
Kim Alvefur <zash@zash.se>
parents:
10798
diff
changeset
|
117 |
785fa0112411
mod_admin_telnet: Update existing sessions on reload
Kim Alvefur <zash@zash.se>
parents:
10798
diff
changeset
|
118 function module.restore(data) |
785fa0112411
mod_admin_telnet: Update existing sessions on reload
Kim Alvefur <zash@zash.se>
parents:
10798
diff
changeset
|
119 if data.sessions then |
785fa0112411
mod_admin_telnet: Update existing sessions on reload
Kim Alvefur <zash@zash.se>
parents:
10798
diff
changeset
|
120 for conn in pairs(data.sessions) do |
785fa0112411
mod_admin_telnet: Update existing sessions on reload
Kim Alvefur <zash@zash.se>
parents:
10798
diff
changeset
|
121 conn:setlistener(console_listener); |
785fa0112411
mod_admin_telnet: Update existing sessions on reload
Kim Alvefur <zash@zash.se>
parents:
10798
diff
changeset
|
122 local session = console:new_session(conn); |
785fa0112411
mod_admin_telnet: Update existing sessions on reload
Kim Alvefur <zash@zash.se>
parents:
10798
diff
changeset
|
123 sessions[conn] = session; |
785fa0112411
mod_admin_telnet: Update existing sessions on reload
Kim Alvefur <zash@zash.se>
parents:
10798
diff
changeset
|
124 end |
785fa0112411
mod_admin_telnet: Update existing sessions on reload
Kim Alvefur <zash@zash.se>
parents:
10798
diff
changeset
|
125 end |
785fa0112411
mod_admin_telnet: Update existing sessions on reload
Kim Alvefur <zash@zash.se>
parents:
10798
diff
changeset
|
126 end |
785fa0112411
mod_admin_telnet: Update existing sessions on reload
Kim Alvefur <zash@zash.se>
parents:
10798
diff
changeset
|
127 |
3009
06f7d8054065
mod_console: Make use of the new onconnect callback to initialise session and send banner
Matthew Wild <mwild1@gmail.com>
parents:
2925
diff
changeset
|
128 function console_listener.onconnect(conn) |
06f7d8054065
mod_console: Make use of the new onconnect callback to initialise session and send banner
Matthew Wild <mwild1@gmail.com>
parents:
2925
diff
changeset
|
129 -- Handle new connection |
06f7d8054065
mod_console: Make use of the new onconnect callback to initialise session and send banner
Matthew Wild <mwild1@gmail.com>
parents:
2925
diff
changeset
|
130 local session = console:new_session(conn); |
06f7d8054065
mod_console: Make use of the new onconnect callback to initialise session and send banner
Matthew Wild <mwild1@gmail.com>
parents:
2925
diff
changeset
|
131 sessions[conn] = session; |
06f7d8054065
mod_console: Make use of the new onconnect callback to initialise session and send banner
Matthew Wild <mwild1@gmail.com>
parents:
2925
diff
changeset
|
132 printbanner(session); |
669
9255abbb3068
mod_console: replace all \n with \r\n in the output, and send \0 as a marker character after every response
Waqas Hussain <waqas20@gmail.com>
parents:
615
diff
changeset
|
133 session.send(string.char(0)); |
736 | 134 end |
135 | |
2145
daeb6ebf304c
mod_console: Update for new net.server API
Matthew Wild <mwild1@gmail.com>
parents:
2087
diff
changeset
|
136 function console_listener.onincoming(conn, data) |
736 | 137 local session = sessions[conn]; |
1317
f6e56a555c37
mod_console: Allow running code in the global environment by prefixing with '>'
Matthew Wild <mwild1@gmail.com>
parents:
1316
diff
changeset
|
138 |
4989
573123ff2ab0
mod_admin_telnet: Always handle commands terminated by line feeds - ensures consistency even when packets are joined or split on the network
Matthew Wild <mwild1@gmail.com>
parents:
4979
diff
changeset
|
139 local partial = session.partial_data; |
573123ff2ab0
mod_admin_telnet: Always handle commands terminated by line feeds - ensures consistency even when packets are joined or split on the network
Matthew Wild <mwild1@gmail.com>
parents:
4979
diff
changeset
|
140 if partial then |
573123ff2ab0
mod_admin_telnet: Always handle commands terminated by line feeds - ensures consistency even when packets are joined or split on the network
Matthew Wild <mwild1@gmail.com>
parents:
4979
diff
changeset
|
141 data = partial..data; |
573123ff2ab0
mod_admin_telnet: Always handle commands terminated by line feeds - ensures consistency even when packets are joined or split on the network
Matthew Wild <mwild1@gmail.com>
parents:
4979
diff
changeset
|
142 end |
573123ff2ab0
mod_admin_telnet: Always handle commands terminated by line feeds - ensures consistency even when packets are joined or split on the network
Matthew Wild <mwild1@gmail.com>
parents:
4979
diff
changeset
|
143 |
573123ff2ab0
mod_admin_telnet: Always handle commands terminated by line feeds - ensures consistency even when packets are joined or split on the network
Matthew Wild <mwild1@gmail.com>
parents:
4979
diff
changeset
|
144 for line in data:gmatch("[^\n]*[\n\004]") do |
5278
f79be67e5666
mod_admin_telnet: Stop processing lines when session is closed
Kim Alvefur <zash@zash.se>
parents:
5270
diff
changeset
|
145 if session.closed then return end |
9735
2d8ca54ecbc6
mod_admin_telnet: Enable async processing using util.async
Kim Alvefur <zash@zash.se>
parents:
9734
diff
changeset
|
146 session.thread:run(line); |
4989
573123ff2ab0
mod_admin_telnet: Always handle commands terminated by line feeds - ensures consistency even when packets are joined or split on the network
Matthew Wild <mwild1@gmail.com>
parents:
4979
diff
changeset
|
147 end |
573123ff2ab0
mod_admin_telnet: Always handle commands terminated by line feeds - ensures consistency even when packets are joined or split on the network
Matthew Wild <mwild1@gmail.com>
parents:
4979
diff
changeset
|
148 session.partial_data = data:match("[^\n]+$"); |
736 | 149 end |
150 | |
6169
cb15eac75b50
mod_admin_telnet: Send NUL byte as keepalive on read timeouts
Kim Alvefur <zash@zash.se>
parents:
6067
diff
changeset
|
151 function console_listener.onreadtimeout(conn) |
cb15eac75b50
mod_admin_telnet: Send NUL byte as keepalive on read timeouts
Kim Alvefur <zash@zash.se>
parents:
6067
diff
changeset
|
152 local session = sessions[conn]; |
cb15eac75b50
mod_admin_telnet: Send NUL byte as keepalive on read timeouts
Kim Alvefur <zash@zash.se>
parents:
6067
diff
changeset
|
153 if session then |
cb15eac75b50
mod_admin_telnet: Send NUL byte as keepalive on read timeouts
Kim Alvefur <zash@zash.se>
parents:
6067
diff
changeset
|
154 session.send("\0"); |
cb15eac75b50
mod_admin_telnet: Send NUL byte as keepalive on read timeouts
Kim Alvefur <zash@zash.se>
parents:
6067
diff
changeset
|
155 return true; |
cb15eac75b50
mod_admin_telnet: Send NUL byte as keepalive on read timeouts
Kim Alvefur <zash@zash.se>
parents:
6067
diff
changeset
|
156 end |
cb15eac75b50
mod_admin_telnet: Send NUL byte as keepalive on read timeouts
Kim Alvefur <zash@zash.se>
parents:
6067
diff
changeset
|
157 end |
cb15eac75b50
mod_admin_telnet: Send NUL byte as keepalive on read timeouts
Kim Alvefur <zash@zash.se>
parents:
6067
diff
changeset
|
158 |
9404
f40b0cd41a87
mod_admin_telnet: Remove or rename various unused arguments and variables [luacheck]
Kim Alvefur <zash@zash.se>
parents:
9403
diff
changeset
|
159 function console_listener.ondisconnect(conn, err) -- luacheck: ignore 212/err |
2054
a43aea9b0bd1
mod_console: Added proper cleanup for disconnected console sessions.
Waqas Hussain <waqas20@gmail.com>
parents:
2010
diff
changeset
|
160 local session = sessions[conn]; |
a43aea9b0bd1
mod_console: Added proper cleanup for disconnected console sessions.
Waqas Hussain <waqas20@gmail.com>
parents:
2010
diff
changeset
|
161 if session then |
a43aea9b0bd1
mod_console: Added proper cleanup for disconnected console sessions.
Waqas Hussain <waqas20@gmail.com>
parents:
2010
diff
changeset
|
162 session.disconnect(); |
a43aea9b0bd1
mod_console: Added proper cleanup for disconnected console sessions.
Waqas Hussain <waqas20@gmail.com>
parents:
2010
diff
changeset
|
163 sessions[conn] = nil; |
a43aea9b0bd1
mod_console: Added proper cleanup for disconnected console sessions.
Waqas Hussain <waqas20@gmail.com>
parents:
2010
diff
changeset
|
164 end |
736 | 165 end |
166 | |
6380
4220ffb87b22
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)
Matthew Wild <mwild1@gmail.com>
parents:
6311
diff
changeset
|
167 function console_listener.ondetach(conn) |
4220ffb87b22
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)
Matthew Wild <mwild1@gmail.com>
parents:
6311
diff
changeset
|
168 sessions[conn] = nil; |
4220ffb87b22
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)
Matthew Wild <mwild1@gmail.com>
parents:
6311
diff
changeset
|
169 end |
4220ffb87b22
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)
Matthew Wild <mwild1@gmail.com>
parents:
6311
diff
changeset
|
170 |
5120
bcabea740c00
mod_{admin_telnet,c2s,component,http,net_multiplex,s2s}: Use module:provides() instead of module:add_item().
Waqas Hussain <waqas20@gmail.com>
parents:
5030
diff
changeset
|
171 module:provides("net", { |
4674
f44726a910a0
mod_admin_telnet: Add initial port:list() and port:close() commands
Matthew Wild <mwild1@gmail.com>
parents:
4647
diff
changeset
|
172 name = "console"; |
4550
1c41e4a846a2
mod_admin_telnet: Port to portmanager
Matthew Wild <mwild1@gmail.com>
parents:
4540
diff
changeset
|
173 listener = console_listener; |
1c41e4a846a2
mod_admin_telnet: Port to portmanager
Matthew Wild <mwild1@gmail.com>
parents:
4540
diff
changeset
|
174 default_port = 5582; |
4571
32d532b95dc7
mod_admin_telnet: make service private.
Marco Cirillo <maranda@lightwitch.org>
parents:
4550
diff
changeset
|
175 private = true; |
4550
1c41e4a846a2
mod_admin_telnet: Port to portmanager
Matthew Wild <mwild1@gmail.com>
parents:
4540
diff
changeset
|
176 }); |