]> www.average.org Git - pdns-pipe-nmc.git/blobdiff - pdns-pipe-nmc.hs
wip reorg responsibilities
[pdns-pipe-nmc.git] / pdns-pipe-nmc.hs
index d37491114a9adbc91091b26a95bd1ba4b86f60eb..ee5bd3771a900dd880f2add5c7dcacff6a100ae9 100644 (file)
@@ -11,8 +11,8 @@ import Data.Aeson (encode, decode, Value(..))
 import Network.HTTP.Types
 import Data.Conduit
 import Network.HTTP.Conduit
-import Data.JsonRpcClient
 
+import JsonRpcClient
 import Config
 import PowerDns
 import NmcJson
@@ -49,9 +49,9 @@ qRsp rsp =
 
 -- 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 $
@@ -83,18 +83,17 @@ main = do
   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"