]> gitweb @ CieloNegro.org - haskell-dns.git/blobdiff - Network/DNS/Named/Zone.hs
Farewell to the Sanity.hs
[haskell-dns.git] / Network / DNS / Named / Zone.hs
index 6cde400e8f5ce6fdbe49e6575d03468e456f0776..c02ff4b78ec7a4b47f8a048a84e7ac655c26806e 100644 (file)
@@ -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
+                      }