Piorjade

OpenComputers - NET API (DNS Server)

Mar 31st, 2017
232
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.18 KB | None | 0 0
  1. --[[
  2.     Wireless-Modem-API (DNS SERVER)
  3.  
  4.     This server picks requests up and registering associates
  5.     their wished address with their modem address (rejects if address
  6.     is taken.) (NOTE: They aren't deleted until restart)
  7.  
  8.     Performance probably not great.
  9.  
  10.     It also constantly sends a broadcast to let clients know of it's
  11.     modem-address. (I may change that in the future, so stay tuned! :) )
  12.    
  13.     INFORMATION:
  14.     You need a computer and screen with color support AND you need my
  15.     multitasking API, which should be located at /lib/oc_multitasking_api.lua
  16.  
  17.   By Piorjade
  18.  
  19. ]]
  20.  
  21. conf = {
  22.     _PORT = 8080,                 ----Clients must have the same
  23. }
  24.  
  25. component = require("component")
  26. computer = require("computer")
  27. ser = require("serialization")
  28. multitask = require("oc_multitasking_api")
  29. os = require("os")
  30. term = require("term")
  31. event = require("event")
  32. net = {}
  33. card = nil
  34. c = 0
  35. gpu = term.gpu()
  36. function log(str)
  37.   local tCol = gpu.getForeground()
  38.   gpu.setForeground(0x66ff66)
  39.   term.write("[LOG] ")
  40.   gpu.setForeground(tCol)
  41.   print(str)
  42. end
  43. function err(str)
  44.   local tCol = gpu.getForeground()
  45.   gpu.setForeground(0xff3300)
  46.   term.write("[ERROR] ")
  47.   gpu.setForeground(tCol)
  48.   print(str)
  49. end
  50.  
  51. for addr, b in component.list("modem") do
  52.   card = component.proxy(addr)
  53.   break
  54. end
  55. if not card then return false, "no modem found" end
  56. card.open(conf._PORT)
  57. if card.isOpen(conf._PORT) then
  58.   log("Opened on port: "..tostring(conf._PORT))
  59. else
  60.   err("FAILED TO OPEN PORT: "..tostring(conf._PORT))
  61. end
  62.  
  63. print("DNS server is running, press enter to quit properly.")
  64.  
  65. meta = {
  66.   type = "dns_server",
  67.   host = "Piorjade",
  68. }
  69.  
  70. list = {        ----List of all currently registered URLs
  71.   --[[ EXAMPLE
  72.   0abc-blah-blah-blah = "ww2.google.co.uk"
  73.   ]]
  74. }
  75.  
  76. cmds = {             ----Short commands
  77.   rURL = function(url, addr)
  78.     for each, addr in pairs(list) do
  79.       if addr == url then
  80.         return false
  81.       end
  82.     end
  83.     list[addr] = url
  84.     return true
  85.   end,
  86.   dURL = function(url, addr)
  87.     if list[addr] == url then
  88.       list[addr] = nil
  89.       return true
  90.     else
  91.       return false
  92.     end
  93.   end,
  94.   gADDR = function(url)
  95.     for each, addr in pairs(list) do
  96.       if addr == url then
  97.         return each
  98.       end
  99.     end
  100.   end,
  101.   gURL = function(addr)
  102.     return list[addr]
  103.   end,
  104.   gAll = function()
  105.     return list
  106.   end
  107. }
  108.  
  109. local astr = [[
  110.   while true do
  111.     card.broadcast(conf._PORT, "DNS_SERVER", ser.serialize(meta))
  112.     for a, b in ipairs(list.errorLog) do
  113.       err("internal_function: "..b)
  114.     end
  115.     sleep(2)
  116.   end]]
  117.  
  118. local bstr = [[
  119.   while true do
  120.     local _, myAddr, sAddr, port, distance, command, arg1, arg2 = event.pull("modem_message")
  121.     if port == conf._PORT then
  122.       if command == "rURL" then
  123.         local ok, msg = cmds[command](arg1, sAddr)
  124.         log(tostring(sAddr).." requested register for "..arg1..".")
  125.         if not ok then
  126.           err("Registration of "..arg1.." failed.")
  127.           card.send(sAddr, conf._PORT, "DNS_REGISTER_FAILED")
  128.         else
  129.           log("Registration of "..arg1.." succeeded.")
  130.           card.send(sAddr, conf._PORT, "DNS_REGISTER_SUCCESS")
  131.         end
  132.       elseif command == "dURL" then
  133.         local ok, msg = cmds[command](arg1, sAddr)
  134.         log(tostring(sAddr).." requested delete for "..arg1..".")
  135.         if not ok then
  136.           err("Deletion of "..arg1.." failed.")
  137.           card.send(sAddr, conf._PORT, "DNS_DELETE_FAILED")
  138.         else
  139.           log("Deletion of "..arg1.." succeeded.")
  140.           card.send(sAddr, conf._PORT, "DNS_DELETE_SUCCESS")
  141.         end
  142.       elseif command == "gADDR" then
  143.         local ok, msg = cmds[command](arg1)
  144.         log(tostring(sAddr).." requested address of "..arg1)
  145.         if not ok then
  146.           err("Address of "..arg1.." not found.")
  147.           card.send(sAddr, conf._PORT, "DNS_URL_NOT_FOUND")
  148.         else
  149.           log("Address of "..arg1.." found.")
  150.           card.send(sAddr, conf._PORT, ok)
  151.         end
  152.       elseif command == "gURL" then
  153.         local ok, msg = cmds[command](arg1)
  154.         log(tostring(sAddr).." requested URL of "..arg1)
  155.         if not ok then
  156.           err("URL of "..arg1.." not found.")
  157.           card.send(sAddr, conf._PORT, "DNS_ADDR_NOT_FOUND")
  158.         else
  159.           log("URL of "..arg1.." found.")
  160.           card.send(sAddr, conf._PORT, ok)
  161.         end
  162.       elseif command == "gAll" then
  163.         local list = cmds[command]()
  164.         list = ser.serialize(list)
  165.         log(tostring(sAddr).." requested list of all URLs")
  166.         card.send(sAddr, conf._PORT, list)
  167.       end
  168.     end
  169.   end]]
  170. local env = {}
  171. setmetatable(env, {__index = _ENV})
  172.  
  173. local cstr = [[
  174.   local keyboard = require("keyboard")
  175.   while true do
  176.     local _, addr, char, code, pn = event.pull()
  177.     if _ == "key_down" and keyboard.keys[code] == "enter" then
  178.       log("QUIT BY USER")
  179.       multitask.quit()
  180.       break
  181.     end
  182.   end
  183. ]]
  184.  
  185. list = multitask.createTasklist()
  186. multitask.createTask(list, "function a", astr, env)
  187. multitask.createTask(list, "function b", bstr, env)
  188. multitask.createTask(list, "function c", cstr, env)
  189. multitask.runAll(list)
  190. card.close(conf._PORT)
Advertisement
Add Comment
Please, Sign In to add comment