]> gitweb @ CieloNegro.org - haskell-dns.git/blob - ExampleDNSServer.hs
Code cleanup
[haskell-dns.git] / ExampleDNSServer.hs
1 import           Network.DNS.Message
2 import           Network.DNS.Named
3 import           Network.DNS.Named.Config
4 import           Network.DNS.Named.Responder
5 import           Network.DNS.Named.Zone
6 import           Network.Socket
7 import           System.IO.Unsafe
8
9 main :: IO ()
10 main = runNamed cnf zoneFor
11     where
12       cnf :: Config
13       cnf = Config {
14               cnfServerAddress = SockAddrInet 9090 iNADDR_ANY
15             }
16
17       zoneFor :: DomainName -> Maybe Zone
18       zoneFor name
19           | name `isInZone` zone = Just zone
20           | otherwise            = Nothing
21
22       zone :: Zone
23       zone = Zone {
24                zoneName            = mkDN "cielonegro.org."
25              , zoneResponders      = [ wrapResponder responderA
26                                      ]
27              , zoneIsAuthoritative = True
28              }
29
30       responderA :: Responder A IN ()
31       responderA = do name <- getQueryName
32                       if name == mkDN "ns.cielonegro.org." then
33                           respond ResourceRecord {
34                                         rrName  = name
35                                       , rrType  = A
36                                       , rrClass = IN
37                                       , rrTTL   = 9600
38                                       , rrData  = inetAddr "127.0.0.1"
39                                       }
40                         else
41                           fail "FIXME: we want to throw NameError but we can't for now"
42
43
44 inetAddr :: String -> HostAddress
45 inetAddr = unsafePerformIO . inet_addr