packages feed

iproute-0.1: test/IPv4Search.hs

module Main where

import Control.Exception
import Data.IP
import Data.IP.RouteTable
import Prelude hiding (lookup, catch)
import System.Environment

main :: IO ()
main = flip catch handler $ do
    as <- getArgs
    let file = as !! 0
        ip = as !! 1
        range = ip ++ "/32"
        target = readIPv4Range range
    rt <- loadRoutes file
    let res = lookup target rt
    putStrLn $ show res
  where
    handler :: ErrorCall -> IO ()
    handler _ = help

loadRoutes :: FilePath -> IO (IPRTable IPv4 (IPRange IPv4))
loadRoutes file = do
    cs <- readFile file
    let ls = lines cs
        rs = map readIPv4Range ls
        kvs = zip rs rs -- value is IPRange itself in this test
        radish = fromList kvs
    return radish

readIPv4Range :: String -> IPRange IPv4
readIPv4Range = read

help :: IO ()
help = do
  putStrLn "Usage:"
  putStrLn "        ipv4_search file IPv4"