X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=haskell-dns.git;a=blobdiff_plain;f=Network%2FDNS%2FNamed.hs;h=57d9ea4b78b6a765bce5a044444503211c1a8b21;hp=137bdd52f2994af1f4ab4e350d10f88a820da186;hb=5015e5caa39e015e6ffa28a87fc5f189e7ba3c71;hpb=7a09a987b0369db0c013fb10272329c733ffc8a1 diff --git a/Network/DNS/Named.hs b/Network/DNS/Named.hs index 137bdd5..57d9ea4 100644 --- a/Network/DNS/Named.hs +++ b/Network/DNS/Named.hs @@ -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