-- | -- Module: Main -- Copyright: (c) 2010 Ertugrul Soeylemez -- License: BSD3 -- Maintainer: Ertugrul Soeylemez -- Stability: experimental module Main where import qualified Data.ByteString.Char8 as Bc import Control.ContStuff import Network.DnsCache import System.Environment import System.IO import Text.Printf printEntry :: Domain -> String -> [String] -> IO () printEntry _ _ [] = return () printEntry d t es = printf "%s %s %s\n" (Bc.unpack d) t (unwords es) printDns :: Int -> MassType -> [Domain] -> IO () printDns numThreads mtype domains = seq mtype . withDnsStateT numThreads 300 . massLookupReport mtype domains $ \res -> do let dom = massDomain res liftIO $ do printEntry dom "A" $ map show (massA res) printEntry dom "AAAA" $ map show (massAAAA res) printEntry dom "MX" $ map show (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 (map Bc.pack . lines) getContents >>= printDns (read ntStr) (toMassType typeStr) ntStr:typeStr:doms -> printDns (read ntStr) (toMassType typeStr) (map Bc.pack doms) _ -> putHelp