+{-# LANGUAGE CPP #-}
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Data.Aeson (encode, decode, Value(..))
import Network.HTTP.Types
import Network.HTTP.Client
+#if MIN_VERSION_http_client(0,3,0)
import Data.Default.Class (def)
--- if you have data-default-0.5.1 import this instead of Data.Default.Class:
--- import Data.Default (def)
+#else
+import Data.Default (def)
+#endif
import JsonRpcClient
import Config
["HELO", "1"] -> return 1
["HELO", "2"] -> return 2
["HELO", "3"] -> return 3
+ ["HELO", "4"] -> return 4
["HELO", x ] -> loopErr $ "unsupported ABI version " ++ (show x)
_ -> loopErr $ "bad HELO " ++ (show s)
-- end debug
-}
put $ stow qname (count, cache)
- PdnsRequestAXFR xrq ->
- case fetch xrq cache of
- Nothing ->
- io $ putStr $
- pdnsReport ("AXFR for unknown id: " ++ (show xrq))
+ PdnsRequestAXFR xrq zid -> do
+ {-
+ -- debug
+ io $ putStrLn $ "LOG\tAXFR request id=" ++ (show xrq)
+ ++ ", zone name: " ++ (show zid)
+ -- end debug
+ -}
+ let
+ czone = fetch xrq cache
+ zone = case zid of
+ Nothing -> czone
+ Just qname -> Just qname
+ -- if zid == czone then zid else Nothing -- paranoid
+ case zone of
Just qname ->
io $ queryDom (queryOpNmc cfg mgr xrq) qname
- >>= putStr . (pdnsOutXfr ver count gen qname)
+ >>= putStr . (pdnsOutXfr ver count gen qname)
+ Nothing ->
+ io $ putStr $ pdnsReport $ "AXFR cannot determine zone: "
+ ++ (show xrq) ++ ", " ++ (show zid)
PdnsRequestPing -> io $ putStrLn "END"
runStateT mainloop (0, empty) >> return ()