Advertisement
Guest User

dnsserver.lua

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