local tA = {...} local nport = tonumber(tA[1]) local fpath = tostring(tA[2]) for m in component.list("modem") do log("[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() log(xpcall(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) log("[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,".") log("[nbsrv] served request from "..sraddress.."/"..spayload) end end end end)) end) log("[nbsrv] nbsrv started.")