X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=ExampleDNSServer.hs;h=b366e14e1a9dc5d5b07b2ee57ced84ead301e358;hb=68e58e5c4aaf0279f041c251e73e4aaccf616286;hp=9e1b4cd9393f846c304d641394c9206741880f94;hpb=5d250da422c01c7aab948ebdda5ef618f18e0f39;p=haskell-dns.git diff --git a/ExampleDNSServer.hs b/ExampleDNSServer.hs index 9e1b4cd..b366e14 100644 --- a/ExampleDNSServer.hs +++ b/ExampleDNSServer.hs @@ -1,7 +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 @@ -12,4 +15,31 @@ 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 responderA + ] + , zoneIsAuthoritative = True + } + + responderA :: Responder A IN () + responderA = 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" + + +inetAddr :: String -> HostAddress +inetAddr = unsafePerformIO . inet_addr