Factor out resolveAddr function
authorMichele Tartara <mtartara@google.com>
Tue, 14 May 2013 15:52:06 +0000 (16:52 +0100)
committerMichele Tartara <mtartara@google.com>
Tue, 14 May 2013 17:06:53 +0000 (18:06 +0100)
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 <mtartara@google.com>
Reviewed-by: Helga Velroyen <helgav@google.com>

src/Ganeti/Daemon.hs
src/Ganeti/Utils.hs

index 73bdb16..e0dfc5f 100644 (file)
@@ -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
index 89a054d..f8fc3bf 100644 (file)
@@ -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)