61 lines
1.2 KiB
Lua
61 lines
1.2 KiB
Lua
-- Despite the name it's not telnet
|
|
local component = require("component")
|
|
if not component.isAvailable("internet") then
|
|
terminal.write("telnet: this program requires an internet card to run\n")
|
|
return
|
|
end
|
|
|
|
local internet = component.internet
|
|
if not internet.isTcpEnabled() then
|
|
terminal.write("telnet: TCP disabled\n")
|
|
return
|
|
end
|
|
|
|
local arg = {...}
|
|
local host = arg[1]
|
|
local port = tonumber(arg[2])
|
|
|
|
local sock = internet.connect(host, port)
|
|
|
|
local connected = false
|
|
local err
|
|
for _ = 1, 5 do
|
|
local ok
|
|
ok, err = sock.finishConnect()
|
|
if ok then
|
|
connected = true
|
|
break
|
|
end
|
|
coroutine.yield()
|
|
end
|
|
if not connected then
|
|
print("telnet: " .. err)
|
|
return
|
|
end
|
|
|
|
print(("connected to %s:%d"):format(host, port))
|
|
|
|
while true do
|
|
local fromSocket = sock.read(math.maxinteger or math.huge)
|
|
if fromSocket == nil then
|
|
print("telnet: connection closed")
|
|
sock.close()
|
|
return
|
|
end
|
|
terminal.write(fromSocket)
|
|
terminal.flush()
|
|
local fromTerminal = terminal.read()
|
|
if fromTerminal == "" then
|
|
sock.close()
|
|
return
|
|
end
|
|
while fromTerminal ~= "" do
|
|
local nbytes, err = sock.write(fromTerminal .. "\r\n")
|
|
if err then
|
|
print("telnet: " .. err)
|
|
return
|
|
end
|
|
fromTerminal = fromTerminal:sub(nbytes + 1)
|
|
end
|
|
end
|