X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=haskell-dns.git;a=blobdiff_plain;f=Network%2FDNS%2FNamed%2FZone.hs;fp=Network%2FDNS%2FNamed%2FZone.hs;h=c02ff4b78ec7a4b47f8a048a84e7ac655c26806e;hp=6cde400e8f5ce6fdbe49e6575d03468e456f0776;hb=957d3f466cea2fa642f67f477ec4ad9a0d535a9b;hpb=68e58e5c4aaf0279f041c251e73e4aaccf616286 diff --git a/Network/DNS/Named/Zone.hs b/Network/DNS/Named/Zone.hs index 6cde400..c02ff4b 100644 --- a/Network/DNS/Named/Zone.hs +++ b/Network/DNS/Named/Zone.hs @@ -1,49 +1,47 @@ module Network.DNS.Named.Zone ( Zone(..) - , ZoneFinder(..) - , isInZone - , defaultRootZone + , zoneSOARecord + , zoneNSRecord ) where import Data.Maybe import Network.DNS.Message -import Network.DNS.Named.Responder data Zone = Zone { - zoneName :: !DomainName - , zoneResponders :: ![SomeResponder] - , zoneIsAuthoritative :: !Bool + zoneName :: !DomainName + , zoneSOA :: !(Maybe SOAFields) + , zoneRecordNames :: !(IO [DomainName]) + , zoneResponder :: !(DomainName -> IO [SomeRR]) } -class ZoneFinder a where - findZone :: a -> DomainName -> IO Zone - -instance ZoneFinder (DomainName -> Zone) where - findZone = (return .) - -instance ZoneFinder (DomainName -> IO Zone) where - findZone = id - -instance ZoneFinder (DomainName -> Maybe Zone) where - findZone = ((return . fromMaybe defaultRootZone) .) - -instance ZoneFinder (DomainName -> IO (Maybe Zone)) where - findZone = (fmap (fromMaybe defaultRootZone) .) - - isInZone :: DomainName -> Zone -> Bool isInZone name zone = zoneName zone `isZoneOf` name - -defaultRootZone :: Zone -defaultRootZone - = Zone { - zoneName = mkDomainName "." - , zoneResponders = [] -- FIXME - , zoneIsAuthoritative = False - } +zoneSOARecord :: Zone -> Maybe SomeRR +zoneSOARecord zone + = do soa <- zoneSOA zone + return $ wrapRecord + $ ResourceRecord { + rrName = zoneName zone + , rrType = SOA + , rrClass = IN + , rrTTL = soaMinimumTTL soa + , rrData = soa + } + +zoneNSRecord :: Zone -> Maybe SomeRR +zoneNSRecord zone + = do soa <- zoneSOA zone + return $ wrapRecord + $ ResourceRecord { + rrName = zoneName zone + , rrType = NS + , rrClass = IN + , rrTTL = soaMinimumTTL soa + , rrData = soaMasterNameServer soa + }