Software /
code /
prosody
Annotate
plugins/mod_admin_telnet.lua @ 13134:638f627e707f
util.datamanager: Add O(1) list indexing with on-disk index
Index file contains offsets and lengths of each item() which allows
seeking directly to each item and reading it without parsing the entire
file.
Also allows tricks like binary search, assuming items have some defined
order.
We take advantage of the 1-based indexing in tables to store a magic
header in the 0 position, so that table index 1 ends up at file index 1.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Tue, 11 May 2021 02:09:56 +0200 |
parent | 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 |
12977
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
10859
diff
changeset
|
15 local async = require "prosody.util.async"; |
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
10859
diff
changeset
|
16 local st = require "prosody.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 }); |