This function can be useful to many parts of the code to convert the string representation of an IP (v4 or v6) address into the proper data type.
Signed-off-by: Michele Tartara <[email protected]> --- src/Ganeti/Daemon.hs | 14 -------------- src/Ganeti/Utils.hs | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/Ganeti/Daemon.hs b/src/Ganeti/Daemon.hs index 73bdb16..e0dfc5f 100644 --- a/src/Ganeti/Daemon.hs +++ b/src/Ganeti/Daemon.hs @@ -263,20 +263,6 @@ defaultBindAddr port Socket.AF_INET6 = Socket.SockAddrInet6 (fromIntegral port) 0 Socket.iN6ADDR_ANY 0) defaultBindAddr _ fam = Bad $ "Unsupported address family: " ++ show fam --- | Default hints for the resolver -resolveAddrHints :: Maybe Socket.AddrInfo -resolveAddrHints = - Just Socket.defaultHints { Socket.addrFlags = [Socket.AI_NUMERICHOST, - Socket.AI_NUMERICSERV] } - --- | Resolves a numeric address. -resolveAddr :: Int -> String -> IO (Result (Socket.Family, Socket.SockAddr)) -resolveAddr port str = do - resolved <- Socket.getAddrInfo resolveAddrHints (Just str) (Just (show port)) - return $ case resolved of - [] -> Bad "Invalid results from lookup?" - best:_ -> Ok (Socket.addrFamily best, Socket.addrAddress best) - -- | Based on the options, compute the socket address to use for the -- daemon. parseAddress :: DaemonOptions -- ^ Command line options diff --git a/src/Ganeti/Utils.hs b/src/Ganeti/Utils.hs index 89a054d..f8fc3bf 100644 --- a/src/Ganeti/Utils.hs +++ b/src/Ganeti/Utils.hs @@ -56,6 +56,7 @@ module Ganeti.Utils , exitIfEmpty , splitEithers , recombineEithers + , resolveAddr ) where import Data.Char (toUpper, isAlphaNum, isDigit, isSpace) @@ -64,6 +65,7 @@ import Data.List import Control.Monad (foldM) import Debug.Trace +import Network.Socket import Ganeti.BasicTypes import qualified Ganeti.Constants as C @@ -431,3 +433,16 @@ recombineEithers lefts rights trail = recombiner (_, ls, rs) t = Bad $ "Inconsistent trail log: l=" ++ show ls ++ ", r=" ++ show rs ++ ",t=" ++ show t + +-- | Default hints for the resolver +resolveAddrHints :: Maybe AddrInfo +resolveAddrHints = + Just defaultHints { addrFlags = [AI_NUMERICHOST, AI_NUMERICSERV] } + +-- | Resolves a numeric address. +resolveAddr :: Int -> String -> IO (Result (Family, SockAddr)) +resolveAddr port str = do + resolved <- getAddrInfo resolveAddrHints (Just str) (Just (show port)) + return $ case resolved of + [] -> Bad "Invalid results from lookup?" + best:_ -> Ok (addrFamily best, addrAddress best) -- 1.7.10.4
