dnscache-0.1.0: MassDns.hs
-- |
-- Module: Main
-- Copyright: (c) 2010 Ertugrul Soeylemez
-- License: BSD3
-- Maintainer: Ertugrul Soeylemez <es@ertes.de>
-- Stability: experimental
module Main where
import Network.DnsCache
import System.Environment
import System.IO
import Text.Printf
printEntry :: String -> String -> [String] -> IO ()
printEntry _ _ [] = return ()
printEntry d t es = printf "%s %s %s\n" d t (unwords es)
printDns :: Int -> MassType -> [String] -> IO ()
printDns numThreads mtype domains =
seq mtype . withDnsCache numThreads 300 $ \dns ->
massLookupReport dns mtype domains $ \res -> do
let dom = massDomain res
printEntry dom "A" $ map show (massA res)
printEntry dom "AAAA" $ map show (massAAAA res)
printEntry dom "MX" $ massMX res
putHelp :: IO ()
putHelp = do
progName <- getProgName
hPrintf stderr "Usage: %s NUMTHREADS TYPE [DOMAINS]\n\n" progName
hPutStrLn stderr "If no domains are specified, domain list is read from stdin."
hPutStrLn stderr "TYPE can be one of 'A', 'AAAA', 'MX' and 'all'."
toMassType :: String -> MassType
toMassType "A" = MassA
toMassType "AAAA" = MassAAAA
toMassType "MX" = MassMX
toMassType "all" = MassAll
toMassType _ = error "Unknown resource type."
main :: IO ()
main = do
args <- getArgs
case args of
["-h"] -> putHelp
["--help"] -> putHelp
[ntStr,typeStr] -> fmap lines getContents >>=
printDns (read ntStr) (toMassType typeStr)
ntStr:typeStr:doms -> printDns (read ntStr) (toMassType typeStr) doms
_ -> putHelp