]> gitweb @ CieloNegro.org - haskell-dns.git/blob - Network/DNS/Named/Zone.hs
Farewell to the Sanity.hs
[haskell-dns.git] / Network / DNS / Named / Zone.hs
1 module Network.DNS.Named.Zone
2     ( Zone(..)
3     , isInZone
4
5     , zoneSOARecord
6     , zoneNSRecord
7     )
8     where
9
10 import Data.Maybe
11 import Network.DNS.Message
12
13
14 data Zone
15     = Zone {
16         zoneName        :: !DomainName
17       , zoneSOA         :: !(Maybe SOAFields)
18       , zoneRecordNames :: !(IO [DomainName])
19       , zoneResponder   :: !(DomainName -> IO [SomeRR])
20       }
21
22 isInZone :: DomainName -> Zone -> Bool
23 isInZone name zone = zoneName zone `isZoneOf` name
24
25 zoneSOARecord :: Zone -> Maybe SomeRR
26 zoneSOARecord zone
27     = do soa <- zoneSOA zone
28          return $ wrapRecord
29                 $ ResourceRecord {
30                         rrName  = zoneName zone
31                       , rrType  = SOA
32                       , rrClass = IN
33                       , rrTTL   = soaMinimumTTL soa
34                       , rrData  = soa
35                       }
36
37 zoneNSRecord :: Zone -> Maybe SomeRR
38 zoneNSRecord zone
39     = do soa <- zoneSOA zone
40          return $ wrapRecord
41                 $ ResourceRecord {
42                         rrName  = zoneName zone
43                       , rrType  = NS
44                       , rrClass = IN
45                       , rrTTL   = soaMinimumTTL soa
46                       , rrData  = soaMasterNameServer soa
47                       }