1 module Network.DNS.Named.Zone
14 import Network.DNS.Message
15 import Network.DNS.DomainMap
18 class ZoneFinder a where
19 findZone :: a -> DomainName -> IO (Maybe Zone)
21 instance ZoneFinder (DomainMap Zone) where
22 findZone = (return .) . flip nearest
24 instance ZoneFinder (IO (DomainMap Zone)) where
25 findZone = flip (fmap . nearest)
27 instance ZoneFinder (DomainName -> Maybe Zone) where
30 instance ZoneFinder (DomainName -> IO (Maybe Zone)) where
34 fromZones :: [Zone] -> DomainMap Zone
35 fromZones = fromList . map toPair
37 toPair z = (zoneName z, z)
42 zoneName :: !DomainName
43 , zoneSOA :: !(Maybe SOAFields)
44 , zoneRecordNames :: !(IO [DomainName])
45 , zoneResponder :: !(DomainName -> IO [SomeRR])
48 isInZone :: DomainName -> Zone -> Bool
49 isInZone name zone = zoneName zone `isZoneOf` name
51 zoneSOARecord :: Zone -> Maybe SomeRR
53 = do soa <- zoneSOA zone
56 rrName = zoneName zone
59 , rrTTL = soaMinimumTTL soa
63 zoneNSRecord :: Zone -> Maybe SomeRR
65 = do soa <- zoneSOA zone
68 rrName = zoneName zone
71 , rrTTL = soaMinimumTTL soa
72 , rrData = soaMasterNameServer soa