X-Git-Url: https://git.sesse.net/?p=vlc;a=blobdiff_plain;f=share%2Flua%2Fintf%2Ftelnet.lua;h=67cc0cc0f1295caaaeac0eaba67dd7dd634b7423;hp=a72d4b17904087fc79d3e464fa6900ac0215b8e0;hb=71ed5a7b8e5844d54c2279e06993b5161b6f2689;hpb=41297efb1b500434e8a8902b315290c4c516f67c diff --git a/share/lua/intf/telnet.lua b/share/lua/intf/telnet.lua index a72d4b1790..67cc0cc0f1 100644 --- a/share/lua/intf/telnet.lua +++ b/share/lua/intf/telnet.lua @@ -183,27 +183,33 @@ while not vlc.misc.should_die() do -- Handle reads for _, client in pairs(r) do - local str = client:recv(1000) - local done = false + local str = client.cmds .. string.gsub(client:recv(1000), "\r", "\n") + if not str then -- the telnet client program has leave - client.buffer = "quit" - done = true - elseif string.match(str,"\n$") then - client.buffer = string.gsub(client.buffer..str,"\r?\n$","") - done = true + client.cmds = "quit" + elseif string.match(str,"\n") then + client.cmds = str elseif client.buffer == "" and ((client.type == host.client_type.stdio and str == "") or (client.type == host.client_type.net and str == "\004")) then -- Caught a ^D - client.buffer = "quit" - done = true - else - client.buffer = client.buffer .. str + client.cmds = "quit" end if client.type == host.client_type.net then telnet_commands( client ) 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.buffer == password then client:send( IAC..WONT..ECHO.."\r\nWelcome, Master\r\n" ) @@ -216,6 +222,7 @@ while not vlc.misc.should_die() do elseif client_command( client ) then client:switch_status( host.status.write ) end + client.buffer = saved_buffer .. client.buffer end end end