mirror of
https://github.com/ShadowKatStudios/OC-Minitel.git
synced 2024-11-23 02:28:05 +11:00
Turned vtunnel into a daemon
This commit is contained in:
parent
372690f2f8
commit
90118de6ab
@ -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"] = ""
|
||||
|
79
vTunnel/OpenOS/etc/rc.d/vtunnel.lua
Normal file
79
vTunnel/OpenOS/etc/rc.d/vtunnel.lua
Normal 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
|
@ -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)
|
Loading…
Reference in New Issue
Block a user