Commit 62fccada authored by Rémi Duraffort's avatar Rémi Duraffort

luatelnet: really add the possibility to pipe commands into the telnet interface.

(cherry picked from commit 71ed5a7b)
Signed-off-by: default avatarRémi Duraffort <ivoire@videolan.org>
parent 0ef99578
...@@ -159,6 +159,7 @@ function host() ...@@ -159,6 +159,7 @@ function host()
wfd = wfd or fd, wfd = wfd or fd,
status = status.init, status = status.init,
buffer = "", buffer = "",
cmds = "",
type = t, type = t,
-- methods -- methods
fd = fd_client, fd = fd_client,
......
...@@ -183,27 +183,33 @@ while not vlc.misc.should_die() do ...@@ -183,27 +183,33 @@ while not vlc.misc.should_die() do
-- Handle reads -- Handle reads
for _, client in pairs(r) do for _, client in pairs(r) do
local str = client:recv(1000) local str = client.cmds .. string.gsub(client:recv(1000), "\r", "\n")
local done = false
if not str then -- the telnet client program has leave if not str then -- the telnet client program has leave
client.buffer = "quit" client.cmds = "quit"
done = true elseif string.match(str,"\n") then
elseif string.match(str,"\n$") then client.cmds = str
client.buffer = string.gsub(client.buffer..str,"\r?\n$","")
done = true
elseif client.buffer == "" elseif client.buffer == ""
and ((client.type == host.client_type.stdio and str == "") and ((client.type == host.client_type.stdio and str == "")
or (client.type == host.client_type.net and str == "\004")) then or (client.type == host.client_type.net and str == "\004")) then
-- Caught a ^D -- Caught a ^D
client.buffer = "quit" client.cmds = "quit"
done = true
else
client.buffer = client.buffer .. str
end end
if client.type == host.client_type.net then if client.type == host.client_type.net then
telnet_commands( client ) telnet_commands( client )
end end
if done then
client.buffer = ""
-- split the command at the first '\n'
while string.find(client.cmds, "\n") do
-- save the buffer to send to the client
local saved_buffer = client.buffer
-- get the next command
local index = string.find(client.cmds, "\n")
client.buffer = string.gsub(string.sub(client.cmds, 0, index - 1), "^%s*(.-)%s*$", "%1")
client.cmds = string.sub(client.cmds, index + 1)
if client.status == host.status.password then if client.status == host.status.password then
if client.buffer == password then if client.buffer == password then
client:send( IAC..WONT..ECHO.."\r\nWelcome, Master\r\n" ) client:send( IAC..WONT..ECHO.."\r\nWelcome, Master\r\n" )
...@@ -216,6 +222,7 @@ while not vlc.misc.should_die() do ...@@ -216,6 +222,7 @@ while not vlc.misc.should_die() do
elseif client_command( client ) then elseif client_command( client ) then
client:switch_status( host.status.write ) client:switch_status( host.status.write )
end end
client.buffer = saved_buffer .. client.buffer
end end
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment