diff --git a/exec/nbsrv.lua b/exec/nbsrv.lua new file mode 100644 index 0000000..fa9043e --- /dev/null +++ b/exec/nbsrv.lua @@ -0,0 +1,27 @@ +local tA = {...} +local nport = tonumber(tA[1]) +local fpath = tostring(tA[2]) +for m in component.list("modem") do + print("[nbsrv] opening port on "..m) + component.invoke(m,"open",nport) +end +local f=io.open(fpath,"rb") +local nbdata = f:read("*a") +f:close() +spawn("nbsrv: "..tostring(nport)..","..fpath,function() + while true do + local _, laddress, raddress, port, _, payload = event.pull("modem_message") + if port == nport and type(payload) == "string" then + if payload:len() == 36 then + local sraddress,spayload = raddress:sub(1,8),payload:sub(1,8) + print("[nbsrv] request from "..sraddress.."/"..spayload.." on port "..tostring(port)) + for i = 1, nbdata:len(), 2048 do + component.invoke(laddress,"send",raddress,port,nbdata:sub(i,i+2047)) + end + component.invoke(laddress,"send",raddress,port,".") + print("[nbsrv] served request from "..sraddress.."/"..spayload) + end + end + end +end) +print("[nbsrv] nbsrv started.")