Turned vtunnel into a daemon

This commit is contained in:
Izaya 2018-04-15 22:16:15 +10:00
parent 372690f2f8
commit 90118de6ab
3 changed files with 80 additions and 48 deletions

View File

@ -49,7 +49,7 @@
["vtunnel"] = {
files = {
["master/vTunnel/interminitel.lua"] = "/lib",
["master/vTunnel/vtunnel.lua"] = "/bin",
["master/vTunnel/vtunnel.lua"] = "//etc/rc.d",
},
dependencies = {
["vcomponent"] = ""

View File

@ -0,0 +1,79 @@
local vcomp = require "vcomponent"
local component = require "component"
local computer = require "computer"
local imt = require "interminitel"
local event = require "event"
local internet = component.internet
local addr, raddr = vcomp.uuid(),vcomp.uuid()
local poll = 0.5
local listener, timer
-- dumb keepalive stuff
local keepalive = 30
local katimer
function start(iaddr,port)
if listener then return end
iaddr,port = iaddr or "shadowkat.net", tonumber(port) or 4096
local socket = internet.connect(iaddr,port)
print("Connecting to "..iaddr..":"..tostring(port).."...")
repeat
os.sleep(0.5)
until socket.finishConnect()
print("Connected!")
local proxy = {}
local rbuffer = ""
local timer = nil
function listener(t)
rbuffer=rbuffer..(socket.read(4096) or "")
if imt.decodePacket(rbuffer) then
computer.pushSignal("modem_message",addr,raddr,0,0,imt.decodePacket(rbuffer))
rbuffer = imt.getRemainder(rbuffer) or ""
end
if t == "internet_ready" and timer then
event.cancel(timer)
timer = nil
end
end
timer = event.timer(poll,listener,math.huge) -- this is only here because OCEmu doesn't do internet_ready
event.listen("internet_ready",listener)
-- also dumb keepalive stuff, fix this later
katimer = event.timer(keepalive,function()
socket.write("\0\1\0")
end,math.huge)
function proxy.send(...)
socket.write(imt.encodePacket(...))
end
function proxy.maxPacketSize()
return 12288
end
proxy.type = "tunnel"
proxy.slot = 4096
local docs = {
send = "function(data...) -- Sends the specified data to the card this one is linked to.",
maxPacketSize = "function():number -- Gets the maximum packet size (config setting)."
}
vcomp.register(addr,"tunnel",proxy,docs)
end
function stop()
if listener then
event.ignore("internet_ready",listener)
listener = nil
end
if timer then
event.cancel(timer)
timer = nil
end
if component.type(addr) then
vcomp.unregister(addr)
end
end

View File

@ -1,47 +0,0 @@
local vcomp = require "vcomponent"
local component = require "component"
local computer = require "computer"
local imt = require "interminitel"
local event = require "event"
local internet = component.internet
local tArgs = {...}
local addr, raddr = vcomp.uuid(),vcomp.uuid()
local poll, keepalive = tonumber(tArgs[3]) or 5, tonumber(tArgs[4]) or 30
local socket = internet.connect(tArgs[1],tonumber(tArgs[2]))
repeat
os.sleep(1)
until socket.finishConnect()
local proxy = {}
local rbuffer = ""
local timer = event.timer(poll,function()
rbuffer=rbuffer..(socket.read(4096) or "")
if imt.decodePacket(rbuffer) then
computer.pushSignal("modem_message",addr,raddr,0,0,imt.decodePacket(rbuffer))
rbuffer = imt.getRemainder(rbuffer) or ""
end
end,math.huge)
local katimer = event.timer(keepalive,function()
socket.write("\0\1\0")
end,math.huge)
function proxy.send(...)
socket.write(imt.encodePacket(...))
end
function proxy.maxPacketSize()
return 12288
end
proxy.type = "tunnel"
proxy.slot = 4096
local docs = {
send = "function(data...) -- Sends the specified data to the card this one is linked to.",
maxPacketSize = "function():number -- Gets the maximum packet size (config setting)."
}
vcomp.register(addr,"tunnel",proxy,docs)