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
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