{-# LINE 1 "src/System/Posix/Socket/Inet.hsc" #-} {-# LANGUAGE UnicodeSyntax #-} {-# LINE 2 "src/System/Posix/Socket/Inet.hsc" #-} {-# LANGUAGE CPP #-} {-# LANGUAGE ForeignFunctionInterface #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE TypeSynonymInstances #-} {-# OPTIONS_GHC -fno-warn-orphans #-} -- | Internet address families. module System.Posix.Socket.Inet ( AF_INET(..) , AF_INET6(..) ) where import Data.Typeable (Typeable) import Network.IP.Addr import Control.Applicative ((<$>), (<*>)) import Foreign.C.Types (CSize) import Foreign.Storable (Storable(..)) import System.Posix.Socket {-# LINE 24 "src/System/Posix/Socket/Inet.hsc" #-} {-# LINE 25 "src/System/Posix/Socket/Inet.hsc" #-} {-# LINE 26 "src/System/Posix/Socket/Inet.hsc" #-} -- | IPv4 socket family. data AF_INET = AF_INET deriving (Typeable, Eq, Show) instance SockAddr Inet4Addr where sockAddrMaxSize _ = (16) {-# LINE 32 "src/System/Posix/Socket/Inet.hsc" #-} sockAddrSize _ = (16) {-# LINE 33 "src/System/Posix/Socket/Inet.hsc" #-} peekSockAddr p sz = if sz /= (16) {-# LINE 35 "src/System/Posix/Socket/Inet.hsc" #-} then ioError $ userError $ "peekSockAddr(Inet4Addr): invalid size " ++ show sz ++ " (expected " ++ show ((16) ∷ CSize) ++ ")" {-# LINE 38 "src/System/Posix/Socket/Inet.hsc" #-} else InetAddr <$> (\hsc_ptr -> peekByteOff hsc_ptr 4) p {-# LINE 39 "src/System/Posix/Socket/Inet.hsc" #-} <*> (\hsc_ptr -> peekByteOff hsc_ptr 2) p {-# LINE 40 "src/System/Posix/Socket/Inet.hsc" #-} pokeSockAddr p (InetAddr addr port) = do (\hsc_ptr -> pokeByteOff hsc_ptr 2) p port {-# LINE 42 "src/System/Posix/Socket/Inet.hsc" #-} (\hsc_ptr -> pokeByteOff hsc_ptr 4) p addr {-# LINE 43 "src/System/Posix/Socket/Inet.hsc" #-} instance SockFamily AF_INET where type SockFamilyAddr AF_INET = Inet4Addr sockFamilyCode _ = 2 {-# LINE 47 "src/System/Posix/Socket/Inet.hsc" #-} -- | IPv6 socket family. data AF_INET6 = AF_INET6 deriving (Typeable, Eq, Show) instance SockAddr Inet6Addr where sockAddrMaxSize _ = (28) {-# LINE 53 "src/System/Posix/Socket/Inet.hsc" #-} sockAddrSize _ = (28) {-# LINE 54 "src/System/Posix/Socket/Inet.hsc" #-} peekSockAddr p sz = if sz /= (28) {-# LINE 56 "src/System/Posix/Socket/Inet.hsc" #-} then ioError $ userError $ "peekSockAddr(Inet6Addr): invalid size " ++ show sz ++ " (expected " ++ show ((28) ∷ CSize) ++ ")" {-# LINE 59 "src/System/Posix/Socket/Inet.hsc" #-} else InetAddr <$> (\hsc_ptr -> peekByteOff hsc_ptr 8) p {-# LINE 60 "src/System/Posix/Socket/Inet.hsc" #-} <*> (\hsc_ptr -> peekByteOff hsc_ptr 2) p {-# LINE 61 "src/System/Posix/Socket/Inet.hsc" #-} pokeSockAddr p (InetAddr addr port) = do (\hsc_ptr -> pokeByteOff hsc_ptr 2) p port {-# LINE 63 "src/System/Posix/Socket/Inet.hsc" #-} (\hsc_ptr -> pokeByteOff hsc_ptr 8) p addr {-# LINE 64 "src/System/Posix/Socket/Inet.hsc" #-} instance SockFamily AF_INET6 where type SockFamilyAddr AF_INET6 = Inet6Addr sockFamilyCode _ = 10 {-# LINE 68 "src/System/Posix/Socket/Inet.hsc" #-}