]> gitweb @ CieloNegro.org - haskell-dns.git/blob - Network/DNS/Named/Zone.hs
The server started somewhat working...
[haskell-dns.git] / Network / DNS / Named / Zone.hs
1 module Network.DNS.Named.Zone
2     ( Zone(..)
3     , ZoneFinder(..)
4
5     , isInZone
6
7     , defaultRootZone
8     )
9     where
10
11 import Data.Maybe
12 import Network.DNS.Message
13 import Network.DNS.Named.Responder
14
15
16 data Zone
17     = Zone {
18         zoneName            :: !DomainName
19       , zoneResponders      :: ![SomeResponder]
20       , zoneIsAuthoritative :: !Bool
21       }
22
23 class ZoneFinder a where
24     findZone :: a -> DomainName -> IO Zone
25
26 instance ZoneFinder (DomainName -> Zone) where
27     findZone = (return .)
28
29 instance ZoneFinder (DomainName -> IO Zone) where
30     findZone = id
31
32 instance ZoneFinder (DomainName -> Maybe Zone) where
33     findZone = ((return . fromMaybe defaultRootZone) .)
34
35 instance ZoneFinder (DomainName -> IO (Maybe Zone)) where
36     findZone = (fmap (fromMaybe defaultRootZone) .)
37
38
39 isInZone :: DomainName -> Zone -> Bool
40 isInZone name zone = zoneName zone `isZoneOf` name
41
42
43 defaultRootZone :: Zone
44 defaultRootZone
45     = Zone {
46         zoneName            = mkDomainName "."
47       , zoneResponders      = [] -- FIXME
48       , zoneIsAuthoritative = False
49       }