Advertisement
Guest User

dnsserver.lua

a guest
Jun 28th, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.41 KB | None | 0 0
  1. local version=1.0
  2. local args={...}
  3. local fs=require("filesystem")
  4. local serial=require("serialization")
  5. local component=require("component")
  6. local computer=require("computer")
  7. local modem=component.modem
  8. local event=require("event")
  9. local liste={}
  10. local runing=false
  11. local config={}
  12. local net=require("network")
  13. local me=""
  14. modem.open(100)
  15.  
  16. function cleanOld(name, addr)
  17.   for k, v in pairs(liste) do
  18.     if v==addr and k~=name then
  19.       liste[k]=nil
  20.       liste.remove(k)
  21.     end
  22.   end
  23. end
  24.  
  25. function register(name, addr)
  26.   if liste[name]==nil or liste[name]~=addr then
  27.     liste[name]=addr  
  28.     cleanOld(name, addr)
  29.     save()
  30.   end
  31. end
  32.  
  33. function save()
  34.   local file=io.open("/etc/dnsTable","w")
  35.   file:write(serial.serialize(liste))
  36.   file:close()
  37. end
  38.  
  39. function loadConfig()
  40.   local file=io.open("/etc/dns.cfg", "r")
  41.   local text=file:read("*all")
  42.   file:close()
  43.   config=serial.unserialize(text)
  44. end
  45.  
  46. function load()
  47.   if fs.exists("/etc/dnsTable") then
  48.     local file=io.open("/etc/dnsTable","r")
  49.     local text=file:read("*all")
  50.     file:close()
  51.     liste={}
  52.     liste=serial.unserialize(text)  
  53.   end
  54. end
  55.  
  56. function dnsDrop()
  57.   liste={}
  58.   save()
  59. end
  60.  
  61. function isRuning()
  62.   if runing then
  63.     computer.pushSignal("dnsServerRuning")  
  64.   end
  65.   return runing
  66. end
  67.  
  68. function getAddr(name)
  69.   if name==config["dnsserver"] then
  70.    return me
  71.   else
  72.     return liste[name]
  73.   end
  74. end
  75.  
  76. function get(name, addr)  
  77.   modem.send(addr, 100, "req", addr, name)
  78. end
  79.  
  80. function handler(event, me, from, port, distance, command, value)
  81.   if port==100 then
  82.     if command~=null then
  83.       if command=="set" then      
  84.         register(value, from)        
  85.       elseif command=="req" then
  86.         --ignore
  87.       else
  88.         get(command, from)
  89.       end
  90.     end
  91.   end
  92. end
  93.  
  94. function printTable()
  95.   for k, v in pairs(liste) do
  96.     print(k,v)
  97.   end
  98. end
  99.  
  100. function localGet(e,name, n)
  101.   addr=getAddr(name)
  102.   computer.pushSignal("dnsReq", addr, name)
  103. end
  104.  
  105. function restart()
  106.   stop()
  107.   start()
  108. end
  109.  
  110. function start()
  111.   me=modem.address
  112.   os.sleep(1)
  113.   loadConfig()
  114.   if not getServerState() then
  115.     load()
  116.     event.listen("modem_message", handler)
  117.     event.listen("dnsServerStop", stop)
  118.     event.listen("dnsServerPrintTable", printTable)
  119.     event.listen("dnsServerStatus", isRuning)
  120.     event.listen("dnsServerDrop", dnsDrop)
  121.     event.listen("dnsGet", localGet)
  122.     runing=true
  123.     print("DNS-Server auf "..me.." gestartet.")
  124.   else
  125.     print("DNS-Server läuft bereits")
  126.   end
  127. end
  128.  
  129. function getServerState()
  130.   computer.pushSignal("dnsServerStatus")
  131.   local state=event.pull(1, "dnsServerRuning")
  132.   if state~=nil then
  133.      return true
  134.   else
  135.     return false
  136.   end
  137. end
  138.  
  139. function stop()
  140.   runing=false
  141.   event.ignore("modem_message", handler)
  142.   event.ignore("dnsServerStop", stop)
  143.   event.ignore("dnsServerPrintTable", printTable)
  144.   event.ignore("dnsServerStatus", isRuning)
  145.   event.ignore("dnsServerDrop", dnsDrop)
  146.   event.ignore("dnsGet", localGet)
  147.   save()
  148.   list={}
  149.   config={}
  150. end
  151.  
  152. if args[1]~=null then
  153.   if args[1]=="run" then
  154.     start()
  155.   elseif args[1]=="print" then
  156.     computer.pushSignal("dnsServerPrintTable")
  157.   elseif args[1]=="stop" then
  158.     computer.pushSignal("dnsServerStop")
  159.   elseif args[1]=="restart" then
  160.     computer.pushSignal("dnsServerStop")
  161.     start()
  162.   elseif args[1]=="drop" then
  163.     computer.pushSignal("dnsServerDrop")
  164.   elseif args[1]=="status" then
  165.     if getServerState() then
  166.       print("DNS läuft")
  167.     else
  168.       print("DNS läuft nicht")
  169.     end
  170.   end
  171. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement