]> 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 da27c3e694ab13c669bb5b2d8ee3d0c649fcceae..c02ff4b78ec7a4b47f8a048a84e7ac655c26806e 100644 (file)
@@ -1,37 +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]
+        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) .)
-
-
-defaultRootZone :: Zone
-defaultRootZone = error "FIXME: defaultRootZone is not implemented yet"
\ No newline at end of file
+isInZone :: DomainName -> Zone -> Bool
+isInZone name zone = zoneName zone `isZoneOf` name
+
+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
+                      }