X-Git-Url: http://www.average.org/gitweb/?p=pdns-pipe-nmc.git;a=blobdiff_plain;f=pdns-pipe-nmc.hs;h=4d47e5045bcc10c70b5d8c3bfcd56d99f432a669;hp=a3fc8c7c5b2a5a414388c4f4ede60d1f6c94e1a5;hb=35cea210f8d3a22afd24848441b5d34702d83239;hpb=b2f5f20509c12bb94783f7035042aed1e0d99c58 diff --git a/pdns-pipe-nmc.hs b/pdns-pipe-nmc.hs index a3fc8c7..4d47e50 100644 --- a/pdns-pipe-nmc.hs +++ b/pdns-pipe-nmc.hs @@ -2,10 +2,11 @@ module Main where +import System.IO import Control.Monad import qualified Data.ByteString.Char8 as C (pack, unpack) import qualified Data.ByteString.Lazy.Char8 as L (pack, unpack) -import Data.ByteString.Lazy as BS hiding (reverse, putStrLn) +import Data.ByteString.Lazy as BS hiding (reverse, putStr, putStrLn) import Data.List.Split import Data.Aeson (encode, decode, Value(..)) import Network.HTTP.Types @@ -15,7 +16,8 @@ import Network.HTTP.Conduit import JsonRpcClient import Config import PowerDns -import NmcJson +import NmcRpc +import NmcDom confFile = "/etc/namecoin.conf" @@ -62,7 +64,9 @@ queryNmc mgr cfg fqdn qid = do "bit":dn:xs -> do rsp <- runResourceT $ httpLbs (qReq cfg (L.pack ("d/" ++ dn)) (L.pack qid)) mgr - return $ qRsp rsp + return $ case qRsp rsp of + Left err -> Left err + Right dom -> Right $ descendNmc xs dom _ -> return $ Left "Only \".bit\" domain is supported" @@ -72,6 +76,8 @@ main = do cfg <- readConfig confFile + hSetBuffering stdin LineBuffering + hSetBuffering stdout LineBuffering ver <- do let loopErr e = forever $ do @@ -92,24 +98,18 @@ main = do forever $ do l <- getLine case pdnsParse ver l of - Left e -> putStrLn $ "ERROR\t" ++ e + Left e -> putStr $ pdnsReport 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 + PdnsRequestQ qname qtype id _ _ _ -> + queryNmc mgr cfg qname id >>= putStr . (pdnsOut ver id qname qtype) PdnsRequestAXFR xfrreq -> - putStrLn ("ERROR\tNo support for AXFR " ++ xfrreq) - PdnsRequestPing -> putStrLn "OK" + putStr $ pdnsReport ("No support for AXFR " ++ xfrreq) + PdnsRequestPing -> putStrLn "END" -- 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 + queryNmc mgr cfg str "askid" >>= putStr . (pdnsOut 1 "askid" str RRTypeANY)