qRsp :: Response ByteString -> Either String NmcDom
qRsp rsp =
case parseJsonRpc (responseBody rsp) :: Either JsonRpcError NmcRes of
- Left jerr -> Left $ "Unparseable response: " ++ (show (responseBody rsp))
+ Left jerr ->
+ case (jrpcErrCode jerr) of
+ -4 -> Right emptyNmcDom
+ _ -> Left $ "JsonRpc error response: " ++ (show jerr)
Right jrsp ->
- case decode (resValue jrsp) :: Maybe NmcDom of
- Nothing -> Left $ "Unparseable value: " ++ (show (resValue jrsp))
- Just dom -> Right dom
+ case resValue jrsp of
+ "" -> Right emptyNmcDom
+ vstr ->
+ case decode vstr :: Maybe NmcDom of
+ Nothing -> Left $ "Unparseable value: " ++ (show vstr)
+ Just dom -> Right dom
-- NMC interface
-queryNmc :: Manager -> Config -> String -> RRType -> String
+queryNmc :: Manager -> Config -> String -> String
-> IO (Either String NmcDom)
-queryNmc mgr cfg fqdn qtype qid = do
+queryNmc mgr cfg fqdn qid = do
case reverse (splitOn "." fqdn) of
"bit":dn:xs -> do
rsp <- runResourceT $
putStrLn $ "OK\tDnsNmc ready to serve, protocol v." ++ (show ver)
mgr <- newManager def
-
- print $ qReq cfg "d/nosuchdomain" "query-nmc"
- rsp <- runResourceT $ httpLbs (qReq cfg "d/nosuchdomain" "query-nmc") mgr
- print $ (statusCode . responseStatus) rsp
- putStrLn "===== complete response is:"
- print rsp
- let rbody = responseBody rsp
- putStrLn "===== response body is:"
- print rbody
- let result = parseJsonRpc rbody :: Either JsonRpcError NmcRes
- putStrLn "===== parsed response is:"
- print result
--- print $ parseJsonRpc (responseBody rsp)
-
- --forever $ getLine >>= (pdnsOut uri) . (pdnsParse ver)
+ forever $ do
+ l <- getLine
+ case pdnsParse ver l of
+ Left e -> putStrLn $ "ERROR\t" ++ e
+ Right preq -> do
+ case preq of
+ PdnsRequestQ qname qtype id _ _ _ -> do
+ ncres <- queryNmc mgr cfg qname id
+ case ncres of
+ Left e -> putStrLn $ "ERROR\t" ++ e
+ Right dom -> putStrLn $ pdnsOut qtype dom
+ PdnsRequestAXFR xfrreq ->
+ putStrLn ("ERROR\tNo support for AXFR " ++ xfrreq)
+ PdnsRequestPing -> putStrLn "OK"
+
+-- for testing
+
+ask str = do
+ cfg <- readConfig confFile
+ mgr <- newManager def
+ ncres <- queryNmc mgr cfg str "test-req-id"
+ case ncres of
+ Left e -> putStrLn $ "ERROR\t" ++ e
+ Right dom -> putStrLn $ pdnsOut RRTypeANY dom