]> gitweb @ CieloNegro.org - haskell-dns.git/blobdiff - Network/DNS/Named.hs
Response builder
[haskell-dns.git] / Network / DNS / Named.hs
index 137bdd52f2994af1f4ab4e350d10f88a820da186..57d9ea4b78b6a765bce5a044444503211c1a8b21 100644 (file)
@@ -15,6 +15,7 @@ import qualified Network.Socket.ByteString as NB
 import           Network.DNS.Message
 import           Network.DNS.Named.Config
 import           Network.DNS.Named.Responder
+import           Network.DNS.Named.ResponseBuilder
 import           Network.DNS.Named.Zone
 import           System.Posix.Signals
 
@@ -56,14 +57,22 @@ runNamed cnf zf
       handleMessage msg
           = case validateQuery msg of
               NoError
-                  -> fail "FIXME: not impl" -- msgQuestions msg
+                  -> do builders <- mapM handleQuestion $ msgQuestions msg
+
+                        let builder = foldl (>>) (return ()) builders
+                            msg'    = runBuilder msg builder
+
+                        return msg'
+
               err -> return $ mkErrorReply err msg
 
-      handleQuestion :: SomeQ -> IO [SomeRR]
+      handleQuestion :: SomeQ -> IO (Builder ())
       handleQuestion (SomeQ q)
-          = do zone       <- findZone zf (qName q)
-               results    <- mapM (runResponder' q) (zoneResponders zone)
-               return $ concat results
+          = do zone    <- findZone zf (qName q)
+               -- FIXME: this is merely a bogus implementation.
+               -- It considers no additional or authoritative sections.
+               results <- mapM (runResponder' q) (zoneResponders zone)
+               return $ mapM_ addAnswer $ concat results
 
 
 validateQuery :: Message -> ResponseCode