]> gitweb @ CieloNegro.org - haskell-dns.git/blobdiff - ExampleDNSServer.hs
The server started somewhat working...
[haskell-dns.git] / ExampleDNSServer.hs
index e1aaa22e1cf56b86d9c9ce38700073a6bfbadcae..f590caab054b7d58240b9ae1c0e9d208682c42fc 100644 (file)
@@ -1,8 +1,10 @@
 import           Network.DNS.Message
 import           Network.DNS.Named
 import           Network.DNS.Named.Config
+import           Network.DNS.Named.Responder
 import           Network.DNS.Named.Zone
 import           Network.Socket
+import           System.IO.Unsafe
 
 main :: IO ()
 main = runNamed cnf zoneFor
@@ -13,4 +15,32 @@ main = runNamed cnf zoneFor
             }
 
       zoneFor :: DomainName -> Maybe Zone
-      zoneFor = const Nothing -- FIXME
\ No newline at end of file
+      zoneFor name
+          | name `isInZone` zone = Just zone
+          | otherwise            = Nothing
+
+      zone :: Zone
+      zone = Zone {
+               zoneName       = mkDN "cielonegro.org."
+             , zoneResponders = [ wrapResponder' $
+                                  do name <- getQueryName
+                                     if name == mkDN "ns.cielonegro.org." then
+                                         respond ResourceRecord {
+                                                       rrName  = name
+                                                     , rrType  = A
+                                                     , rrClass = IN
+                                                     , rrTTL   = 9600
+                                                     , rrData  = inetAddr "127.0.0.1"
+                                                     }
+                                       else
+                                         fail "FIXME: we want to throw NameError but we can't for now"
+                                ]
+             , zoneIsAuthoritative = True
+             }
+
+      wrapResponder' :: Responder A IN () -> SomeResponder
+      wrapResponder' = wrapResponder
+
+
+inetAddr :: String -> HostAddress
+inetAddr = unsafePerformIO . inet_addr