Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local serverdir = "/servers/"
- local notfounddata = [[cPrint("404") cPrint("Page Not Found")]]
- for i,v in pairs(rs.getSides()) do
- if peripheral.getType(v) == "modem" then
- rednet.open(v)
- break
- end
- end
- local function server()
- while true do
- local event = {os.pullEvent()}
- if event[1] == "rednet_message" then
- if event[3] == "firewolf.broadcast.dns.list" then
- for i,v in pairs(fs.list(serverdir)) do
- if fs.isDir(serverdir..v) then
- rednet.send(event[2], "firewolf-site:"..v)
- end
- end
- else
- local url = event[3]
- _GET = {}
- local site, path
- if url:find("?") then
- local getdata
- url, getdata = url:match("(.-)%?(.+)")
- --print(url)
- for key, val in getdata:gmatch("(.-)=([^&]+)") do
- _GET[key] = val
- --print(key.."="..val)
- end
- end
- if url:find("/") then
- site, path = url:match("(.-)(/.*)")
- if path == "/" then path = "/home" end
- else
- site, path = url, "/home"
- end
- if fs.exists(serverdir..site) then
- if fs.exists(serverdir..site..path) then
- local f = io.open(serverdir..site..path, "r")
- local data = f:read("*a")
- f:close()
- if data:find("^!SERVER") then
- local func = loadstring(data:sub(8))
- local env = {_GET=_GET}
- for i,v in pairs(_G) do
- if i~="os.pullEventRaw" then
- env[i] = v
- end
- end
- setfenv(func, env)
- if func then
- local ok, d = pcall(func)
- if not ok then print("ERROR: "..d) end
- data = (ok and d) or "cPrint('Server Error 1')"
- else
- data = "cPrint('Server Error 2')"
- end
- end
- rednet.send(event[2], data)
- else
- rednet.send(event[2], notfounddata)
- end
- else
- end
- end
- end
- end
- end
- function sh()
- shell.run("rom/programs/shell")
- end
- parallel.waitForAny(sh, server)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement