{-# LINE 1 "Z/IO/Network/SocketAddr.hsc" #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE UnliftedFFITypes #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE UnboxedTuples #-}
{-# LANGUAGE MagicHash #-}
module Z.IO.Network.SocketAddr
(
SocketAddr(..)
, ipv4, ipv6
, sockAddrFamily
, withSocketAddr
, withSocketAddrUnsafe
, sizeOfSocketAddr
, withSocketAddrStorage
, withSocketAddrStorageUnsafe
, sizeOfSocketAddrStorage
, InetAddr(..)
, inetAny
, inetBroadcast
, inetNone
, inetLoopback
, inetUnspecificGroup
, inetAllHostsGroup
, inetMaxLocalGroup
, inetAddrToTuple
, tupleToInetAddr
, Inet6Addr(..)
, inet6Any
, inet6Loopback
, inet6AddrToTuple
, tupleToInet6Addr
, FlowInfo
, ScopeID
, PortNumber(..)
, portAny
, SocketFamily(AF_UNSPEC, AF_INET, AF_INET6)
, SocketType(SOCK_DGRAM, SOCK_STREAM, SOCK_SEQPACKET, SOCK_RAW, SOCK_RDM, SOCK_ANY)
, ProtocolNumber(IPPROTO_DEFAULT, IPPROTO_IP, IPPROTO_TCP, IPPROTO_UDP)
, peekSocketAddr
, pokeSocketAddr
, peekSocketAddrMBA
, pokeSocketAddrMBA
, htons
, ntohs
, ntohl
, htonl
) where
import Data.Bits
import qualified Data.List as List
import Data.Typeable
import Foreign
import Foreign.C
import Numeric (showHex)
import System.IO.Unsafe
import Text.Read
import Z.Data.CBytes
import Z.IO.Exception
import Z.IO.UV.Errno
import Z.Foreign
{-# LINE 88 "Z/IO/Network/SocketAddr.hsc" #-}
{-# LINE 90 "Z/IO/Network/SocketAddr.hsc" #-}
{-# LINE 98 "Z/IO/Network/SocketAddr.hsc" #-}
type CSaFamily = (Word16)
{-# LINE 99 "Z/IO/Network/SocketAddr.hsc" #-}
{-# LINE 100 "Z/IO/Network/SocketAddr.hsc" #-}
data SocketAddr
= SocketAddrInet
{-# UNPACK #-} !PortNumber
{-# UNPACK #-} !InetAddr
| SocketAddrInet6
{-# UNPACK #-} !PortNumber
{-# UNPACK #-} !FlowInfo
{-# UNPACK #-} !Inet6Addr
{-# UNPACK #-} !ScopeID
deriving (SocketAddr -> SocketAddr -> Bool
(SocketAddr -> SocketAddr -> Bool)
-> (SocketAddr -> SocketAddr -> Bool) -> Eq SocketAddr
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SocketAddr -> SocketAddr -> Bool
$c/= :: SocketAddr -> SocketAddr -> Bool
== :: SocketAddr -> SocketAddr -> Bool
$c== :: SocketAddr -> SocketAddr -> Bool
Eq, Eq SocketAddr
Eq SocketAddr
-> (SocketAddr -> SocketAddr -> Ordering)
-> (SocketAddr -> SocketAddr -> Bool)
-> (SocketAddr -> SocketAddr -> Bool)
-> (SocketAddr -> SocketAddr -> Bool)
-> (SocketAddr -> SocketAddr -> Bool)
-> (SocketAddr -> SocketAddr -> SocketAddr)
-> (SocketAddr -> SocketAddr -> SocketAddr)
-> Ord SocketAddr
SocketAddr -> SocketAddr -> Bool
SocketAddr -> SocketAddr -> Ordering
SocketAddr -> SocketAddr -> SocketAddr
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: SocketAddr -> SocketAddr -> SocketAddr
$cmin :: SocketAddr -> SocketAddr -> SocketAddr
max :: SocketAddr -> SocketAddr -> SocketAddr
$cmax :: SocketAddr -> SocketAddr -> SocketAddr
>= :: SocketAddr -> SocketAddr -> Bool
$c>= :: SocketAddr -> SocketAddr -> Bool
> :: SocketAddr -> SocketAddr -> Bool
$c> :: SocketAddr -> SocketAddr -> Bool
<= :: SocketAddr -> SocketAddr -> Bool
$c<= :: SocketAddr -> SocketAddr -> Bool
< :: SocketAddr -> SocketAddr -> Bool
$c< :: SocketAddr -> SocketAddr -> Bool
compare :: SocketAddr -> SocketAddr -> Ordering
$ccompare :: SocketAddr -> SocketAddr -> Ordering
$cp1Ord :: Eq SocketAddr
Ord, Typeable)
instance Show SocketAddr where
showsPrec :: Int -> SocketAddr -> ShowS
showsPrec Int
_ (SocketAddrInet PortNumber
port InetAddr
ia)
= InetAddr -> ShowS
forall a. Show a => a -> ShowS
shows InetAddr
ia ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString String
":" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PortNumber -> ShowS
forall a. Show a => a -> ShowS
shows PortNumber
port
showsPrec Int
_ (SocketAddrInet6 PortNumber
port FlowInfo
_ Inet6Addr
ia6 FlowInfo
_)
= (Char
'['Char -> ShowS
forall a. a -> [a] -> [a]
:) ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Inet6Addr -> ShowS
forall a. Show a => a -> ShowS
shows Inet6Addr
ia6 ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString String
"]:" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PortNumber -> ShowS
forall a. Show a => a -> ShowS
shows PortNumber
port
sockAddrFamily :: SocketAddr -> SocketFamily
sockAddrFamily :: SocketAddr -> SocketFamily
sockAddrFamily (SocketAddrInet PortNumber
_ InetAddr
_) = SocketFamily
AF_INET
sockAddrFamily (SocketAddrInet6 PortNumber
_ FlowInfo
_ Inet6Addr
_ FlowInfo
_) = SocketFamily
AF_INET6
type FlowInfo = Word32
type ScopeID = Word32
ipv4:: HasCallStack => CBytes -> PortNumber -> SocketAddr
ipv4 :: CBytes -> PortNumber -> SocketAddr
ipv4 CBytes
str (PortNumber Word16
port) = IO SocketAddr -> SocketAddr
forall a. IO a -> a
unsafeDupablePerformIO (IO SocketAddr -> SocketAddr)
-> ((MBA# SocketAddr -> IO ()) -> IO SocketAddr)
-> (MBA# SocketAddr -> IO ())
-> SocketAddr
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (MBA# SocketAddr -> IO ()) -> IO SocketAddr
withSocketAddrStorageUnsafe ((MBA# SocketAddr -> IO ()) -> SocketAddr)
-> (MBA# SocketAddr -> IO ()) -> SocketAddr
forall a b. (a -> b) -> a -> b
$ \ MBA# SocketAddr
p ->
CBytes -> (CString -> IO ()) -> IO ()
forall a. CBytes -> (CString -> IO a) -> IO a
withCBytes CBytes
str ((CString -> IO ()) -> IO ()) -> (CString -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \ CString
cstr -> IO CInt -> IO ()
forall a. (HasCallStack, Integral a) => IO a -> IO ()
throwUVIfMinus_ (IO CInt -> IO ()) -> IO CInt -> IO ()
forall a b. (a -> b) -> a -> b
$ CString -> CInt -> MBA# SocketAddr -> IO CInt
uv_ip4_addr CString
cstr (Word16 -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word16
port) MBA# SocketAddr
p
ipv6:: HasCallStack => CBytes -> PortNumber -> SocketAddr
ipv6 :: CBytes -> PortNumber -> SocketAddr
ipv6 CBytes
str (PortNumber Word16
port) = IO SocketAddr -> SocketAddr
forall a. IO a -> a
unsafeDupablePerformIO (IO SocketAddr -> SocketAddr)
-> ((MBA# SocketAddr -> IO ()) -> IO SocketAddr)
-> (MBA# SocketAddr -> IO ())
-> SocketAddr
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (MBA# SocketAddr -> IO ()) -> IO SocketAddr
withSocketAddrStorageUnsafe ((MBA# SocketAddr -> IO ()) -> SocketAddr)
-> (MBA# SocketAddr -> IO ()) -> SocketAddr
forall a b. (a -> b) -> a -> b
$ \ MBA# SocketAddr
p ->
CBytes -> (CString -> IO ()) -> IO ()
forall a. CBytes -> (CString -> IO a) -> IO a
withCBytes CBytes
str ((CString -> IO ()) -> IO ()) -> (CString -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \ CString
cstr -> IO CInt -> IO ()
forall a. (HasCallStack, Integral a) => IO a -> IO ()
throwUVIfMinus_ (IO CInt -> IO ()) -> IO CInt -> IO ()
forall a b. (a -> b) -> a -> b
$ CString -> CInt -> MBA# SocketAddr -> IO CInt
uv_ip6_addr CString
cstr (Word16 -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word16
port) MBA# SocketAddr
p
newtype InetAddr = InetAddr { InetAddr -> FlowInfo
getInetAddr :: Word32 } deriving (InetAddr -> InetAddr -> Bool
(InetAddr -> InetAddr -> Bool)
-> (InetAddr -> InetAddr -> Bool) -> Eq InetAddr
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: InetAddr -> InetAddr -> Bool
$c/= :: InetAddr -> InetAddr -> Bool
== :: InetAddr -> InetAddr -> Bool
$c== :: InetAddr -> InetAddr -> Bool
Eq, Eq InetAddr
Eq InetAddr
-> (InetAddr -> InetAddr -> Ordering)
-> (InetAddr -> InetAddr -> Bool)
-> (InetAddr -> InetAddr -> Bool)
-> (InetAddr -> InetAddr -> Bool)
-> (InetAddr -> InetAddr -> Bool)
-> (InetAddr -> InetAddr -> InetAddr)
-> (InetAddr -> InetAddr -> InetAddr)
-> Ord InetAddr
InetAddr -> InetAddr -> Bool
InetAddr -> InetAddr -> Ordering
InetAddr -> InetAddr -> InetAddr
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: InetAddr -> InetAddr -> InetAddr
$cmin :: InetAddr -> InetAddr -> InetAddr
max :: InetAddr -> InetAddr -> InetAddr
$cmax :: InetAddr -> InetAddr -> InetAddr
>= :: InetAddr -> InetAddr -> Bool
$c>= :: InetAddr -> InetAddr -> Bool
> :: InetAddr -> InetAddr -> Bool
$c> :: InetAddr -> InetAddr -> Bool
<= :: InetAddr -> InetAddr -> Bool
$c<= :: InetAddr -> InetAddr -> Bool
< :: InetAddr -> InetAddr -> Bool
$c< :: InetAddr -> InetAddr -> Bool
compare :: InetAddr -> InetAddr -> Ordering
$ccompare :: InetAddr -> InetAddr -> Ordering
$cp1Ord :: Eq InetAddr
Ord, Typeable)
instance Show InetAddr where
showsPrec :: Int -> InetAddr -> ShowS
showsPrec Int
_ InetAddr
ia =
let (Word8
a,Word8
b,Word8
c,Word8
d) = InetAddr -> (Word8, Word8, Word8, Word8)
inetAddrToTuple InetAddr
ia
in Word8 -> ShowS
forall a. Show a => a -> ShowS
shows Word8
a ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char
'.'Char -> ShowS
forall a. a -> [a] -> [a]
:) ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word8 -> ShowS
forall a. Show a => a -> ShowS
shows Word8
b ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char
'.'Char -> ShowS
forall a. a -> [a] -> [a]
:) ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word8 -> ShowS
forall a. Show a => a -> ShowS
shows Word8
c ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char
'.'Char -> ShowS
forall a. a -> [a] -> [a]
:) ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word8 -> ShowS
forall a. Show a => a -> ShowS
shows Word8
d
inetAny :: InetAddr
inetAny :: InetAddr
inetAny = FlowInfo -> InetAddr
InetAddr FlowInfo
0
inetBroadcast :: InetAddr
inetBroadcast :: InetAddr
inetBroadcast = (Word8, Word8, Word8, Word8) -> InetAddr
tupleToInetAddr (Word8
255,Word8
255,Word8
255,Word8
255)
inetNone :: InetAddr
inetNone :: InetAddr
inetNone = (Word8, Word8, Word8, Word8) -> InetAddr
tupleToInetAddr (Word8
255,Word8
255,Word8
255,Word8
255)
inetLoopback :: InetAddr
inetLoopback :: InetAddr
inetLoopback = (Word8, Word8, Word8, Word8) -> InetAddr
tupleToInetAddr (Word8
127, Word8
0, Word8
0, Word8
1)
inetUnspecificGroup :: InetAddr
inetUnspecificGroup :: InetAddr
inetUnspecificGroup = (Word8, Word8, Word8, Word8) -> InetAddr
tupleToInetAddr (Word8
224, Word8
0, Word8
0, Word8
0)
inetAllHostsGroup :: InetAddr
inetAllHostsGroup :: InetAddr
inetAllHostsGroup = (Word8, Word8, Word8, Word8) -> InetAddr
tupleToInetAddr (Word8
224, Word8
0, Word8
0, Word8
1)
inetMaxLocalGroup :: InetAddr
inetMaxLocalGroup :: InetAddr
inetMaxLocalGroup = (Word8, Word8, Word8, Word8) -> InetAddr
tupleToInetAddr (Word8
224, Word8
0, Word8
0,Word8
255)
instance Storable InetAddr where
sizeOf :: InetAddr -> Int
sizeOf InetAddr
_ = FlowInfo -> Int
forall a. Storable a => a -> Int
sizeOf (FlowInfo
forall a. HasCallStack => a
undefined :: Word32)
alignment :: InetAddr -> Int
alignment InetAddr
_ = FlowInfo -> Int
forall a. Storable a => a -> Int
alignment (FlowInfo
forall a. HasCallStack => a
undefined :: Word32)
peek :: Ptr InetAddr -> IO InetAddr
peek Ptr InetAddr
p = (FlowInfo -> InetAddr
InetAddr (FlowInfo -> InetAddr)
-> (FlowInfo -> FlowInfo) -> FlowInfo -> InetAddr
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FlowInfo -> FlowInfo
ntohl) (FlowInfo -> InetAddr) -> IO FlowInfo -> IO InetAddr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
`fmap` Ptr InetAddr -> Int -> IO FlowInfo
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOff Ptr InetAddr
p Int
0
poke :: Ptr InetAddr -> InetAddr -> IO ()
poke Ptr InetAddr
p (InetAddr FlowInfo
ia) = Ptr InetAddr -> Int -> FlowInfo -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr InetAddr
p Int
0 (FlowInfo -> FlowInfo
htonl FlowInfo
ia)
instance UnalignedAccess InetAddr where
unalignedSize :: UnalignedSize InetAddr
unalignedSize = Int -> UnalignedSize InetAddr
forall a. Int -> UnalignedSize a
UnalignedSize Int
4
pokeMBA :: MBA# SocketAddr -> Int -> InetAddr -> IO ()
pokeMBA MBA# SocketAddr
p Int
off InetAddr
x = MBA# SocketAddr -> Int -> FlowInfo -> IO ()
forall a. UnalignedAccess a => MBA# SocketAddr -> Int -> a -> IO ()
pokeMBA MBA# SocketAddr
p Int
off (FlowInfo -> FlowInfo
htonl (InetAddr -> FlowInfo
getInetAddr InetAddr
x))
peekMBA :: MBA# SocketAddr -> Int -> IO InetAddr
peekMBA MBA# SocketAddr
p Int
off = FlowInfo -> InetAddr
InetAddr (FlowInfo -> InetAddr)
-> (FlowInfo -> FlowInfo) -> FlowInfo -> InetAddr
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FlowInfo -> FlowInfo
ntohl (FlowInfo -> InetAddr) -> IO FlowInfo -> IO InetAddr
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> MBA# SocketAddr -> Int -> IO FlowInfo
forall a. UnalignedAccess a => MBA# SocketAddr -> Int -> IO a
peekMBA MBA# SocketAddr
p Int
off
indexBA :: ByteArray# -> Int -> InetAddr
indexBA ByteArray#
p Int
off = FlowInfo -> InetAddr
InetAddr (FlowInfo -> FlowInfo
ntohl (ByteArray# -> Int -> FlowInfo
forall a. UnalignedAccess a => ByteArray# -> Int -> a
indexBA ByteArray#
p Int
off))
inetAddrToTuple :: InetAddr -> (Word8, Word8, Word8, Word8)
inetAddrToTuple :: InetAddr -> (Word8, Word8, Word8, Word8)
inetAddrToTuple (InetAddr FlowInfo
ia) =
let byte :: Int -> Word8
byte Int
i = FlowInfo -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegral (FlowInfo
ia FlowInfo -> Int -> FlowInfo
forall a. Bits a => a -> Int -> a
`shiftR` Int
i) :: Word8
in (Int -> Word8
byte Int
24, Int -> Word8
byte Int
16, Int -> Word8
byte Int
8, Int -> Word8
byte Int
0)
tupleToInetAddr :: (Word8, Word8, Word8, Word8) -> InetAddr
tupleToInetAddr :: (Word8, Word8, Word8, Word8) -> InetAddr
tupleToInetAddr (Word8
b3, Word8
b2, Word8
b1, Word8
b0) =
let a
x sl :: a -> Int -> FlowInfo
`sl` Int
i = a -> FlowInfo
forall a b. (Integral a, Num b) => a -> b
fromIntegral a
x FlowInfo -> Int -> FlowInfo
forall a. Bits a => a -> Int -> a
`shiftL` Int
i :: Word32
in FlowInfo -> InetAddr
InetAddr (FlowInfo -> InetAddr) -> FlowInfo -> InetAddr
forall a b. (a -> b) -> a -> b
$ (Word8
b3 Word8 -> Int -> FlowInfo
forall a. Integral a => a -> Int -> FlowInfo
`sl` Int
24) FlowInfo -> FlowInfo -> FlowInfo
forall a. Bits a => a -> a -> a
.|. (Word8
b2 Word8 -> Int -> FlowInfo
forall a. Integral a => a -> Int -> FlowInfo
`sl` Int
16) FlowInfo -> FlowInfo -> FlowInfo
forall a. Bits a => a -> a -> a
.|. (Word8
b1 Word8 -> Int -> FlowInfo
forall a. Integral a => a -> Int -> FlowInfo
`sl` Int
8) FlowInfo -> FlowInfo -> FlowInfo
forall a. Bits a => a -> a -> a
.|. (Word8
b0 Word8 -> Int -> FlowInfo
forall a. Integral a => a -> Int -> FlowInfo
`sl` Int
0)
data Inet6Addr = Inet6Addr {-# UNPACK #-}!Word32
{-# UNPACK #-}!Word32
{-# UNPACK #-}!Word32
{-# UNPACK #-}!Word32 deriving (Inet6Addr -> Inet6Addr -> Bool
(Inet6Addr -> Inet6Addr -> Bool)
-> (Inet6Addr -> Inet6Addr -> Bool) -> Eq Inet6Addr
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Inet6Addr -> Inet6Addr -> Bool
$c/= :: Inet6Addr -> Inet6Addr -> Bool
== :: Inet6Addr -> Inet6Addr -> Bool
$c== :: Inet6Addr -> Inet6Addr -> Bool
Eq, Eq Inet6Addr
Eq Inet6Addr
-> (Inet6Addr -> Inet6Addr -> Ordering)
-> (Inet6Addr -> Inet6Addr -> Bool)
-> (Inet6Addr -> Inet6Addr -> Bool)
-> (Inet6Addr -> Inet6Addr -> Bool)
-> (Inet6Addr -> Inet6Addr -> Bool)
-> (Inet6Addr -> Inet6Addr -> Inet6Addr)
-> (Inet6Addr -> Inet6Addr -> Inet6Addr)
-> Ord Inet6Addr
Inet6Addr -> Inet6Addr -> Bool
Inet6Addr -> Inet6Addr -> Ordering
Inet6Addr -> Inet6Addr -> Inet6Addr
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Inet6Addr -> Inet6Addr -> Inet6Addr
$cmin :: Inet6Addr -> Inet6Addr -> Inet6Addr
max :: Inet6Addr -> Inet6Addr -> Inet6Addr
$cmax :: Inet6Addr -> Inet6Addr -> Inet6Addr
>= :: Inet6Addr -> Inet6Addr -> Bool
$c>= :: Inet6Addr -> Inet6Addr -> Bool
> :: Inet6Addr -> Inet6Addr -> Bool
$c> :: Inet6Addr -> Inet6Addr -> Bool
<= :: Inet6Addr -> Inet6Addr -> Bool
$c<= :: Inet6Addr -> Inet6Addr -> Bool
< :: Inet6Addr -> Inet6Addr -> Bool
$c< :: Inet6Addr -> Inet6Addr -> Bool
compare :: Inet6Addr -> Inet6Addr -> Ordering
$ccompare :: Inet6Addr -> Inet6Addr -> Ordering
$cp1Ord :: Eq Inet6Addr
Ord, Typeable)
instance Show Inet6Addr where
showsPrec :: Int -> Inet6Addr -> ShowS
showsPrec Int
_ ia6 :: Inet6Addr
ia6@(Inet6Addr FlowInfo
a1 FlowInfo
a2 FlowInfo
a3 FlowInfo
a4)
| FlowInfo
a1 FlowInfo -> FlowInfo -> Bool
forall a. Eq a => a -> a -> Bool
== FlowInfo
0 Bool -> Bool -> Bool
&& FlowInfo
a2 FlowInfo -> FlowInfo -> Bool
forall a. Eq a => a -> a -> Bool
== FlowInfo
0 Bool -> Bool -> Bool
&& FlowInfo
a3 FlowInfo -> FlowInfo -> Bool
forall a. Eq a => a -> a -> Bool
== FlowInfo
0xffff =
String -> ShowS
showString String
"::ffff:" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. InetAddr -> ShowS
forall a. Show a => a -> ShowS
shows (FlowInfo -> InetAddr
InetAddr FlowInfo
a4)
| FlowInfo
a1 FlowInfo -> FlowInfo -> Bool
forall a. Eq a => a -> a -> Bool
== FlowInfo
0 Bool -> Bool -> Bool
&& FlowInfo
a2 FlowInfo -> FlowInfo -> Bool
forall a. Eq a => a -> a -> Bool
== FlowInfo
0 Bool -> Bool -> Bool
&& FlowInfo
a3 FlowInfo -> FlowInfo -> Bool
forall a. Eq a => a -> a -> Bool
== FlowInfo
0 Bool -> Bool -> Bool
&& FlowInfo
a4 FlowInfo -> FlowInfo -> Bool
forall a. Ord a => a -> a -> Bool
>= FlowInfo
0x10000 =
String -> ShowS
showString String
"::" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. InetAddr -> ShowS
forall a. Show a => a -> ShowS
shows (FlowInfo -> InetAddr
InetAddr FlowInfo
a4)
| Int
end Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
begin Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> Int
1 =
[Word16] -> ShowS
showFields [Word16]
prefix ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString String
"::" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Word16] -> ShowS
showFields [Word16]
suffix
| Bool
otherwise =
[Word16] -> ShowS
showFields [Word16]
fields
where
fields :: [Word16]
fields =
let (Word16
u7, Word16
u6, Word16
u5, Word16
u4, Word16
u3, Word16
u2, Word16
u1, Word16
u0) = Inet6Addr
-> (Word16, Word16, Word16, Word16, Word16, Word16, Word16, Word16)
inet6AddrToTuple Inet6Addr
ia6 in
[Word16
u7, Word16
u6, Word16
u5, Word16
u4, Word16
u3, Word16
u2, Word16
u1, Word16
u0]
showFields :: [Word16] -> ShowS
showFields = (ShowS -> ShowS -> ShowS) -> ShowS -> [ShowS] -> ShowS
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
(.) ShowS
forall a. a -> a
id ([ShowS] -> ShowS) -> ([Word16] -> [ShowS]) -> [Word16] -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShowS -> [ShowS] -> [ShowS]
forall a. a -> [a] -> [a]
List.intersperse (Char
':'Char -> ShowS
forall a. a -> [a] -> [a]
:) ([ShowS] -> [ShowS])
-> ([Word16] -> [ShowS]) -> [Word16] -> [ShowS]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Word16 -> ShowS) -> [Word16] -> [ShowS]
forall a b. (a -> b) -> [a] -> [b]
map Word16 -> ShowS
forall a. (Integral a, Show a) => a -> ShowS
showHex
prefix :: [Word16]
prefix = Int -> [Word16] -> [Word16]
forall a. Int -> [a] -> [a]
take Int
begin [Word16]
fields
suffix :: [Word16]
suffix = Int -> [Word16] -> [Word16]
forall a. Int -> [a] -> [a]
drop Int
end [Word16]
fields
begin :: Int
begin = Int
end Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
diff
(Int
diff, Int
end) = [(Int, Int)] -> (Int, Int)
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum ([(Int, Int)] -> (Int, Int)) -> [(Int, Int)] -> (Int, Int)
forall a b. (a -> b) -> a -> b
$
(Int -> Word16 -> Int) -> Int -> [Word16] -> [Int]
forall b a. (b -> a -> b) -> b -> [a] -> [b]
scanl (\Int
c Word16
i -> if Word16
i Word16 -> Word16 -> Bool
forall a. Eq a => a -> a -> Bool
== Word16
0 then Int
c Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1 else Int
0) Int
0 [Word16]
fields [Int] -> [Int] -> [(Int, Int)]
forall a b. [a] -> [b] -> [(a, b)]
`zip` [Int
0..]
inet6Any :: Inet6Addr
inet6Any :: Inet6Addr
inet6Any = FlowInfo -> FlowInfo -> FlowInfo -> FlowInfo -> Inet6Addr
Inet6Addr FlowInfo
0 FlowInfo
0 FlowInfo
0 FlowInfo
0
inet6Loopback :: Inet6Addr
inet6Loopback :: Inet6Addr
inet6Loopback = FlowInfo -> FlowInfo -> FlowInfo -> FlowInfo -> Inet6Addr
Inet6Addr FlowInfo
0 FlowInfo
0 FlowInfo
0 FlowInfo
1
inet6AddrToTuple :: Inet6Addr -> (Word16, Word16, Word16, Word16,
Word16, Word16, Word16, Word16)
inet6AddrToTuple :: Inet6Addr
-> (Word16, Word16, Word16, Word16, Word16, Word16, Word16, Word16)
inet6AddrToTuple (Inet6Addr FlowInfo
w3 FlowInfo
w2 FlowInfo
w1 FlowInfo
w0) =
let high, low :: Word32 -> Word16
high :: FlowInfo -> Word16
high FlowInfo
w = FlowInfo -> Word16
forall a b. (Integral a, Num b) => a -> b
fromIntegral (FlowInfo
w FlowInfo -> Int -> FlowInfo
forall a. Bits a => a -> Int -> a
`shiftR` Int
16)
low :: FlowInfo -> Word16
low FlowInfo
w = FlowInfo -> Word16
forall a b. (Integral a, Num b) => a -> b
fromIntegral FlowInfo
w
in (FlowInfo -> Word16
high FlowInfo
w3, FlowInfo -> Word16
low FlowInfo
w3, FlowInfo -> Word16
high FlowInfo
w2, FlowInfo -> Word16
low FlowInfo
w2, FlowInfo -> Word16
high FlowInfo
w1, FlowInfo -> Word16
low FlowInfo
w1, FlowInfo -> Word16
high FlowInfo
w0, FlowInfo -> Word16
low FlowInfo
w0)
tupleToInet6Addr :: (Word16, Word16, Word16, Word16,
Word16, Word16, Word16, Word16) -> Inet6Addr
tupleToInet6Addr :: (Word16, Word16, Word16, Word16, Word16, Word16, Word16, Word16)
-> Inet6Addr
tupleToInet6Addr (Word16
w7, Word16
w6, Word16
w5, Word16
w4, Word16
w3, Word16
w2, Word16
w1, Word16
w0) =
let add :: Word16 -> Word16 -> Word32
Word16
high add :: Word16 -> Word16 -> FlowInfo
`add` Word16
low = (Word16 -> FlowInfo
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word16
high FlowInfo -> Int -> FlowInfo
forall a. Bits a => a -> Int -> a
`shiftL` Int
16) FlowInfo -> FlowInfo -> FlowInfo
forall a. Bits a => a -> a -> a
.|. (Word16 -> FlowInfo
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word16
low)
in FlowInfo -> FlowInfo -> FlowInfo -> FlowInfo -> Inet6Addr
Inet6Addr (Word16
w7 Word16 -> Word16 -> FlowInfo
`add` Word16
w6) (Word16
w5 Word16 -> Word16 -> FlowInfo
`add` Word16
w4) (Word16
w3 Word16 -> Word16 -> FlowInfo
`add` Word16
w2) (Word16
w1 Word16 -> Word16 -> FlowInfo
`add` Word16
w0)
instance Storable Inet6Addr where
sizeOf :: Inet6Addr -> Int
sizeOf Inet6Addr
_ = (Int
16)
{-# LINE 278 "Z/IO/Network/SocketAddr.hsc" #-}
alignment _ = 4
{-# LINE 279 "Z/IO/Network/SocketAddr.hsc" #-}
peek p = do
a <- peek32 p 0
b <- peek32 p 1
c <- peek32 p 2
d <- peek32 p 3
return $ Inet6Addr a b c d
poke :: Ptr Inet6Addr -> Inet6Addr -> IO ()
poke Ptr Inet6Addr
p (Inet6Addr FlowInfo
a FlowInfo
b FlowInfo
c FlowInfo
d) = do
Ptr Inet6Addr -> Int -> FlowInfo -> IO ()
forall a. Ptr a -> Int -> FlowInfo -> IO ()
poke32 Ptr Inet6Addr
p Int
0 FlowInfo
a
Ptr Inet6Addr -> Int -> FlowInfo -> IO ()
forall a. Ptr a -> Int -> FlowInfo -> IO ()
poke32 Ptr Inet6Addr
p Int
1 FlowInfo
b
Ptr Inet6Addr -> Int -> FlowInfo -> IO ()
forall a. Ptr a -> Int -> FlowInfo -> IO ()
poke32 Ptr Inet6Addr
p Int
2 FlowInfo
c
Ptr Inet6Addr -> Int -> FlowInfo -> IO ()
forall a. Ptr a -> Int -> FlowInfo -> IO ()
poke32 Ptr Inet6Addr
p Int
3 FlowInfo
d
s6_addr_offset :: Int
s6_addr_offset :: Int
s6_addr_offset = ((Int
0))
{-# LINE 294 "Z/IO/Network/SocketAddr.hsc" #-}
peek32 :: Ptr a -> Int -> IO Word32
peek32 :: Ptr a -> Int -> IO FlowInfo
peek32 Ptr a
p Int
i0 = do
let i' :: Int
i' = Int
i0 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
4
peekByte :: Int -> IO Word8
peekByte Int
n = Ptr a -> Int -> IO Word8
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOff Ptr a
p (Int
s6_addr_offset Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
i' Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
n) :: IO Word8
a
a sl :: a -> Int -> a
`sl` Int
i = a -> a
forall a b. (Integral a, Num b) => a -> b
fromIntegral a
a a -> Int -> a
forall a. Bits a => a -> Int -> a
`shiftL` Int
i
Word8
a0 <- Int -> IO Word8
peekByte Int
0
Word8
a1 <- Int -> IO Word8
peekByte Int
1
Word8
a2 <- Int -> IO Word8
peekByte Int
2
Word8
a3 <- Int -> IO Word8
peekByte Int
3
FlowInfo -> IO FlowInfo
forall (m :: * -> *) a. Monad m => a -> m a
return ((Word8
a0 Word8 -> Int -> FlowInfo
forall a a. (Bits a, Integral a, Num a) => a -> Int -> a
`sl` Int
24) FlowInfo -> FlowInfo -> FlowInfo
forall a. Bits a => a -> a -> a
.|. (Word8
a1 Word8 -> Int -> FlowInfo
forall a a. (Bits a, Integral a, Num a) => a -> Int -> a
`sl` Int
16) FlowInfo -> FlowInfo -> FlowInfo
forall a. Bits a => a -> a -> a
.|. (Word8
a2 Word8 -> Int -> FlowInfo
forall a a. (Bits a, Integral a, Num a) => a -> Int -> a
`sl` Int
8) FlowInfo -> FlowInfo -> FlowInfo
forall a. Bits a => a -> a -> a
.|. (Word8
a3 Word8 -> Int -> FlowInfo
forall a a. (Bits a, Integral a, Num a) => a -> Int -> a
`sl` Int
0))
poke32 :: Ptr a -> Int -> Word32 -> IO ()
poke32 :: Ptr a -> Int -> FlowInfo -> IO ()
poke32 Ptr a
p Int
i0 FlowInfo
a = do
let i' :: Int
i' = Int
i0 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
4
pokeByte :: Int -> a -> IO ()
pokeByte Int
n = Ptr a -> Int -> a -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr a
p (Int
s6_addr_offset Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
i' Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
n)
a
x sr :: a -> Int -> Word8
`sr` Int
i = a -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegral (a
x a -> Int -> a
forall a. Bits a => a -> Int -> a
`shiftR` Int
i) :: Word8
Int -> Word8 -> IO ()
forall a. Storable a => Int -> a -> IO ()
pokeByte Int
0 (FlowInfo
a FlowInfo -> Int -> Word8
forall a. (Integral a, Bits a) => a -> Int -> Word8
`sr` Int
24)
Int -> Word8 -> IO ()
forall a. Storable a => Int -> a -> IO ()
pokeByte Int
1 (FlowInfo
a FlowInfo -> Int -> Word8
forall a. (Integral a, Bits a) => a -> Int -> Word8
`sr` Int
16)
Int -> Word8 -> IO ()
forall a. Storable a => Int -> a -> IO ()
pokeByte Int
2 (FlowInfo
a FlowInfo -> Int -> Word8
forall a. (Integral a, Bits a) => a -> Int -> Word8
`sr` Int
8)
Int -> Word8 -> IO ()
forall a. Storable a => Int -> a -> IO ()
pokeByte Int
3 (FlowInfo
a FlowInfo -> Int -> Word8
forall a. (Integral a, Bits a) => a -> Int -> Word8
`sr` Int
0)
instance UnalignedAccess Inet6Addr where
unalignedSize :: UnalignedSize Inet6Addr
unalignedSize = Int -> UnalignedSize Inet6Addr
forall a. Int -> UnalignedSize a
UnalignedSize ((Int
16))
{-# LINE 318 "Z/IO/Network/SocketAddr.hsc" #-}
indexBA :: ByteArray# -> Int -> Inet6Addr
indexBA ByteArray#
p Int
off =
let a :: BE FlowInfo
a = ByteArray# -> Int -> BE FlowInfo
forall a. UnalignedAccess a => ByteArray# -> Int -> a
indexBA ByteArray#
p (Int
off Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
s6_addr_offset Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
0)
b :: BE FlowInfo
b = ByteArray# -> Int -> BE FlowInfo
forall a. UnalignedAccess a => ByteArray# -> Int -> a
indexBA ByteArray#
p (Int
off Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
s6_addr_offset Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
4)
c :: BE FlowInfo
c = ByteArray# -> Int -> BE FlowInfo
forall a. UnalignedAccess a => ByteArray# -> Int -> a
indexBA ByteArray#
p (Int
off Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
s6_addr_offset Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
8)
d :: BE FlowInfo
d = ByteArray# -> Int -> BE FlowInfo
forall a. UnalignedAccess a => ByteArray# -> Int -> a
indexBA ByteArray#
p (Int
off Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
s6_addr_offset Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
12)
in FlowInfo -> FlowInfo -> FlowInfo -> FlowInfo -> Inet6Addr
Inet6Addr (BE FlowInfo -> FlowInfo
forall a. BE a -> a
getBE BE FlowInfo
a) (BE FlowInfo -> FlowInfo
forall a. BE a -> a
getBE BE FlowInfo
b) (BE FlowInfo -> FlowInfo
forall a. BE a -> a
getBE BE FlowInfo
c) (BE FlowInfo -> FlowInfo
forall a. BE a -> a
getBE BE FlowInfo
d)
peekMBA :: MBA# SocketAddr -> Int -> IO Inet6Addr
peekMBA MBA# SocketAddr
p Int
off = do
BE FlowInfo
a <- MBA# SocketAddr -> Int -> IO (BE FlowInfo)
forall a. UnalignedAccess a => MBA# SocketAddr -> Int -> IO a
peekMBA MBA# SocketAddr
p (Int
off Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
s6_addr_offset Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
0)
BE FlowInfo
b <- MBA# SocketAddr -> Int -> IO (BE FlowInfo)
forall a. UnalignedAccess a => MBA# SocketAddr -> Int -> IO a
peekMBA MBA# SocketAddr
p (Int
off Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
s6_addr_offset Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
4)
BE FlowInfo
c <- MBA# SocketAddr -> Int -> IO (BE FlowInfo)
forall a. UnalignedAccess a => MBA# SocketAddr -> Int -> IO a
peekMBA MBA# SocketAddr
p (Int
off Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
s6_addr_offset Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
8)
BE FlowInfo
d <- MBA# SocketAddr -> Int -> IO (BE FlowInfo)
forall a. UnalignedAccess a => MBA# SocketAddr -> Int -> IO a
peekMBA MBA# SocketAddr
p (Int
off Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
s6_addr_offset Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
12)
Inet6Addr -> IO Inet6Addr
forall (m :: * -> *) a. Monad m => a -> m a
return (Inet6Addr -> IO Inet6Addr) -> Inet6Addr -> IO Inet6Addr
forall a b. (a -> b) -> a -> b
$ FlowInfo -> FlowInfo -> FlowInfo -> FlowInfo -> Inet6Addr
Inet6Addr (BE FlowInfo -> FlowInfo
forall a. BE a -> a
getBE BE FlowInfo
a) (BE FlowInfo -> FlowInfo
forall a. BE a -> a
getBE BE FlowInfo
b) (BE FlowInfo -> FlowInfo
forall a. BE a -> a
getBE BE FlowInfo
c) (BE FlowInfo -> FlowInfo
forall a. BE a -> a
getBE BE FlowInfo
d)
pokeMBA :: MBA# SocketAddr -> Int -> Inet6Addr -> IO ()
pokeMBA MBA# SocketAddr
p Int
off (Inet6Addr FlowInfo
a FlowInfo
b FlowInfo
c FlowInfo
d) = do
MBA# SocketAddr -> Int -> BE FlowInfo -> IO ()
forall a. UnalignedAccess a => MBA# SocketAddr -> Int -> a -> IO ()
pokeMBA MBA# SocketAddr
p (Int
off Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
s6_addr_offset) (FlowInfo -> BE FlowInfo
forall a. a -> BE a
BE FlowInfo
a)
MBA# SocketAddr -> Int -> BE FlowInfo -> IO ()
forall a. UnalignedAccess a => MBA# SocketAddr -> Int -> a -> IO ()
pokeMBA MBA# SocketAddr
p (Int
off Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
4 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
s6_addr_offset) (FlowInfo -> BE FlowInfo
forall a. a -> BE a
BE FlowInfo
b)
MBA# SocketAddr -> Int -> BE FlowInfo -> IO ()
forall a. UnalignedAccess a => MBA# SocketAddr -> Int -> a -> IO ()
pokeMBA MBA# SocketAddr
p (Int
off Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
s6_addr_offset) (FlowInfo -> BE FlowInfo
forall a. a -> BE a
BE FlowInfo
c)
MBA# SocketAddr -> Int -> BE FlowInfo -> IO ()
forall a. UnalignedAccess a => MBA# SocketAddr -> Int -> a -> IO ()
pokeMBA MBA# SocketAddr
p (Int
off Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
12 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
s6_addr_offset) (FlowInfo -> BE FlowInfo
forall a. a -> BE a
BE FlowInfo
d)
peekSocketAddr :: HasCallStack => Ptr SocketAddr -> IO SocketAddr
peekSocketAddr :: Ptr SocketAddr -> IO SocketAddr
peekSocketAddr Ptr SocketAddr
p = do
Word16
family <- ((\Ptr SocketAddr
hsc_ptr -> Ptr SocketAddr -> Int -> IO Word16
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOff Ptr SocketAddr
hsc_ptr Int
0)) Ptr SocketAddr
p
{-# LINE 344 "Z/IO/Network/SocketAddr.hsc" #-}
case family :: CSaFamily of
(2) -> do
{-# LINE 346 "Z/IO/Network/SocketAddr.hsc" #-}
addr <- ((\hsc_ptr -> peekByteOff hsc_ptr 4)) p
{-# LINE 347 "Z/IO/Network/SocketAddr.hsc" #-}
port <- ((\hsc_ptr -> peekByteOff hsc_ptr 2)) p
{-# LINE 348 "Z/IO/Network/SocketAddr.hsc" #-}
return (SocketAddrInet port addr)
(10) -> do
{-# LINE 350 "Z/IO/Network/SocketAddr.hsc" #-}
port <- ((\hsc_ptr -> peekByteOff hsc_ptr 2)) p
{-# LINE 351 "Z/IO/Network/SocketAddr.hsc" #-}
flow <- ((\hsc_ptr -> peekByteOff hsc_ptr 4)) p
{-# LINE 352 "Z/IO/Network/SocketAddr.hsc" #-}
addr <- ((\hsc_ptr -> peekByteOff hsc_ptr 8)) p
{-# LINE 353 "Z/IO/Network/SocketAddr.hsc" #-}
scope <- ((\hsc_ptr -> peekByteOff hsc_ptr 24)) p
{-# LINE 354 "Z/IO/Network/SocketAddr.hsc" #-}
return (SocketAddrInet6 port flow addr scope)
_ -> do let errno = UV_EAI_ADDRFAMILY
name <- uvErrName errno
desc <- uvStdError errno
throwUVError errno (IOEInfo name desc callStack)
pokeSocketAddr :: Ptr SocketAddr -> SocketAddr -> IO ()
pokeSocketAddr :: Ptr SocketAddr -> SocketAddr -> IO ()
pokeSocketAddr Ptr SocketAddr
p (SocketAddrInet PortNumber
port InetAddr
addr) = do
{-# LINE 365 "Z/IO/Network/SocketAddr.hsc" #-}
{-# LINE 368 "Z/IO/Network/SocketAddr.hsc" #-}
((\Ptr SocketAddr
hsc_ptr -> Ptr SocketAddr -> Int -> Word16 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr SocketAddr
hsc_ptr Int
0)) Ptr SocketAddr
p ((Word16
2) :: CSaFamily)
{-# LINE 369 "Z/IO/Network/SocketAddr.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 2)) p port
{-# LINE 370 "Z/IO/Network/SocketAddr.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 4)) p addr
{-# LINE 371 "Z/IO/Network/SocketAddr.hsc" #-}
pokeSocketAddr p (SocketAddrInet6 port flow addr scope) = do
{-# LINE 375 "Z/IO/Network/SocketAddr.hsc" #-}
{-# LINE 378 "Z/IO/Network/SocketAddr.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 0)) p ((10) :: CSaFamily)
{-# LINE 379 "Z/IO/Network/SocketAddr.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 2)) p port
{-# LINE 380 "Z/IO/Network/SocketAddr.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 4)) p flow
{-# LINE 381 "Z/IO/Network/SocketAddr.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 8)) p (addr)
{-# LINE 382 "Z/IO/Network/SocketAddr.hsc" #-}
((\hsc_ptr -> pokeByteOff hsc_ptr 24)) p scope
{-# LINE 383 "Z/IO/Network/SocketAddr.hsc" #-}
withSocketAddr :: SocketAddr -> (Ptr SocketAddr -> IO a) -> IO a
withSocketAddr :: SocketAddr -> (Ptr SocketAddr -> IO a) -> IO a
withSocketAddr sa :: SocketAddr
sa@(SocketAddrInet PortNumber
_ InetAddr
_) Ptr SocketAddr -> IO a
f = do
Int -> Int -> (Ptr SocketAddr -> IO a) -> IO a
forall a b. Int -> Int -> (Ptr a -> IO b) -> IO b
allocaBytesAligned
((Int
16))
{-# LINE 391 "Z/IO/Network/SocketAddr.hsc" #-}
(Int
4) ((Ptr SocketAddr -> IO a) -> IO a)
-> (Ptr SocketAddr -> IO a) -> IO a
forall a b. (a -> b) -> a -> b
$ \ Ptr SocketAddr
p -> Ptr SocketAddr -> SocketAddr -> IO ()
pokeSocketAddr Ptr SocketAddr
p SocketAddr
sa IO () -> IO a -> IO a
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Ptr SocketAddr -> IO a
f Ptr SocketAddr
p
{-# LINE 392 "Z/IO/Network/SocketAddr.hsc" #-}
withSocketAddr sa@(SocketAddrInet6 _ _ _ _) f = do
allocaBytesAligned
((28))
{-# LINE 395 "Z/IO/Network/SocketAddr.hsc" #-}
(4) $ \ p -> pokeSocketAddr p sa >> f p
{-# LINE 396 "Z/IO/Network/SocketAddr.hsc" #-}
withSocketAddrUnsafe :: SocketAddr -> (MBA# SocketAddr -> IO a) -> IO a
withSocketAddrUnsafe :: SocketAddr -> (MBA# SocketAddr -> IO a) -> IO a
withSocketAddrUnsafe sa :: SocketAddr
sa@(SocketAddrInet PortNumber
_ InetAddr
_) MBA# SocketAddr -> IO a
f = do
Int -> (MBA# SocketAddr -> IO a) -> IO a
forall a b. Int -> (MBA# SocketAddr -> IO b) -> IO b
allocMutableByteArrayUnsafe ((Int
16)) ((MBA# SocketAddr -> IO a) -> IO a)
-> (MBA# SocketAddr -> IO a) -> IO a
forall a b. (a -> b) -> a -> b
$ \ MBA# SocketAddr
p ->
{-# LINE 404 "Z/IO/Network/SocketAddr.hsc" #-}
MBA# SocketAddr -> SocketAddr -> IO ()
pokeSocketAddrMBA MBA# SocketAddr
p SocketAddr
sa IO () -> IO a -> IO a
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> MBA# SocketAddr -> IO a
f MBA# SocketAddr
p
withSocketAddrUnsafe sa :: SocketAddr
sa@(SocketAddrInet6 PortNumber
_ FlowInfo
_ Inet6Addr
_ FlowInfo
_) MBA# SocketAddr -> IO a
f = do
Int -> (MBA# SocketAddr -> IO a) -> IO a
forall a b. Int -> (MBA# SocketAddr -> IO b) -> IO b
allocMutableByteArrayUnsafe ((Int
28)) ((MBA# SocketAddr -> IO a) -> IO a)
-> (MBA# SocketAddr -> IO a) -> IO a
forall a b. (a -> b) -> a -> b
$ \ MBA# SocketAddr
p ->
{-# LINE 407 "Z/IO/Network/SocketAddr.hsc" #-}
MBA# SocketAddr -> SocketAddr -> IO ()
pokeSocketAddrMBA MBA# SocketAddr
p SocketAddr
sa IO () -> IO a -> IO a
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> MBA# SocketAddr -> IO a
f MBA# SocketAddr
p
sizeOfSocketAddr :: SocketAddr -> CSize
sizeOfSocketAddr :: SocketAddr -> CSize
sizeOfSocketAddr (SocketAddrInet PortNumber
_ InetAddr
_) = (CSize
16)
{-# LINE 411 "Z/IO/Network/SocketAddr.hsc" #-}
sizeOfSocketAddr (SocketAddrInet6 _ _ _ _) = (28)
{-# LINE 412 "Z/IO/Network/SocketAddr.hsc" #-}
withSocketAddrStorage :: (Ptr SocketAddr -> IO ()) -> IO SocketAddr
withSocketAddrStorage :: (Ptr SocketAddr -> IO ()) -> IO SocketAddr
withSocketAddrStorage Ptr SocketAddr -> IO ()
f = do
Int -> Int -> (Ptr SocketAddr -> IO SocketAddr) -> IO SocketAddr
forall a b. Int -> Int -> (Ptr a -> IO b) -> IO b
allocaBytesAligned
((Int
128))
{-# LINE 418 "Z/IO/Network/SocketAddr.hsc" #-}
(Int
8) ((Ptr SocketAddr -> IO SocketAddr) -> IO SocketAddr)
-> (Ptr SocketAddr -> IO SocketAddr) -> IO SocketAddr
forall a b. (a -> b) -> a -> b
$ \ Ptr SocketAddr
p -> Ptr SocketAddr -> IO ()
f Ptr SocketAddr
p IO () -> IO SocketAddr -> IO SocketAddr
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> HasCallStack => Ptr SocketAddr -> IO SocketAddr
Ptr SocketAddr -> IO SocketAddr
peekSocketAddr Ptr SocketAddr
p
{-# LINE 419 "Z/IO/Network/SocketAddr.hsc" #-}
withSocketAddrStorageUnsafe :: (MBA# SocketAddr -> IO ()) -> IO SocketAddr
withSocketAddrStorageUnsafe :: (MBA# SocketAddr -> IO ()) -> IO SocketAddr
withSocketAddrStorageUnsafe MBA# SocketAddr -> IO ()
f = do
Int -> (MBA# SocketAddr -> IO SocketAddr) -> IO SocketAddr
forall a b. Int -> (MBA# SocketAddr -> IO b) -> IO b
allocMutableByteArrayUnsafe ((Int
128)) ((MBA# SocketAddr -> IO SocketAddr) -> IO SocketAddr)
-> (MBA# SocketAddr -> IO SocketAddr) -> IO SocketAddr
forall a b. (a -> b) -> a -> b
$ \ MBA# SocketAddr
p ->
{-# LINE 427 "Z/IO/Network/SocketAddr.hsc" #-}
MBA# SocketAddr -> IO ()
f MBA# SocketAddr
p IO () -> IO SocketAddr -> IO SocketAddr
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> HasCallStack => MBA# SocketAddr -> IO SocketAddr
MBA# SocketAddr -> IO SocketAddr
peekSocketAddrMBA MBA# SocketAddr
p
sizeOfSocketAddrStorage :: CSize
sizeOfSocketAddrStorage :: CSize
sizeOfSocketAddrStorage = ((CSize
128))
{-# LINE 431 "Z/IO/Network/SocketAddr.hsc" #-}
peekSocketAddrMBA :: HasCallStack => MBA# SocketAddr -> IO SocketAddr
peekSocketAddrMBA :: MBA# SocketAddr -> IO SocketAddr
peekSocketAddrMBA MBA# SocketAddr
p = do
Word16
family <- MBA# SocketAddr -> Int -> IO Word16
forall a. UnalignedAccess a => MBA# SocketAddr -> Int -> IO a
peekMBA MBA# SocketAddr
p ((Int
0))
{-# LINE 435 "Z/IO/Network/SocketAddr.hsc" #-}
case family :: CSaFamily of
(2) -> do
{-# LINE 437 "Z/IO/Network/SocketAddr.hsc" #-}
addr <- peekMBA p ((4))
{-# LINE 438 "Z/IO/Network/SocketAddr.hsc" #-}
port <- peekMBA p ((2))
{-# LINE 439 "Z/IO/Network/SocketAddr.hsc" #-}
return (SocketAddrInet port addr)
(10) -> do
{-# LINE 441 "Z/IO/Network/SocketAddr.hsc" #-}
port <- peekMBA p ((2))
{-# LINE 442 "Z/IO/Network/SocketAddr.hsc" #-}
flow <- peekMBA p ((4))
{-# LINE 443 "Z/IO/Network/SocketAddr.hsc" #-}
addr <- peekMBA p ((8))
{-# LINE 444 "Z/IO/Network/SocketAddr.hsc" #-}
scope <- peekMBA p ((24))
{-# LINE 445 "Z/IO/Network/SocketAddr.hsc" #-}
return (SocketAddrInet6 port flow addr scope)
_ -> do let errno = UV_EAI_ADDRFAMILY
name <- uvErrName errno
desc <- uvStdError errno
throwUVError errno (IOEInfo name desc callStack)
pokeSocketAddrMBA :: MBA# SocketAddr -> SocketAddr -> IO ()
pokeSocketAddrMBA :: MBA# SocketAddr -> SocketAddr -> IO ()
pokeSocketAddrMBA MBA# SocketAddr
p (SocketAddrInet PortNumber
port InetAddr
addr) = do
{-# LINE 456 "Z/IO/Network/SocketAddr.hsc" #-}
{-# LINE 459 "Z/IO/Network/SocketAddr.hsc" #-}
MBA# SocketAddr -> Int -> Word16 -> IO ()
forall a. UnalignedAccess a => MBA# SocketAddr -> Int -> a -> IO ()
pokeMBA MBA# SocketAddr
p ((Int
0)) ((Word16
2) :: CSaFamily)
{-# LINE 460 "Z/IO/Network/SocketAddr.hsc" #-}
pokeMBA p ((2)) port
{-# LINE 461 "Z/IO/Network/SocketAddr.hsc" #-}
pokeMBA p ((4)) addr
{-# LINE 462 "Z/IO/Network/SocketAddr.hsc" #-}
pokeSocketAddrMBA p (SocketAddrInet6 port flow addr scope) = do
{-# LINE 466 "Z/IO/Network/SocketAddr.hsc" #-}
{-# LINE 469 "Z/IO/Network/SocketAddr.hsc" #-}
pokeMBA p ((0)) ((10) :: CSaFamily)
{-# LINE 470 "Z/IO/Network/SocketAddr.hsc" #-}
pokeMBA p ((2)) port
{-# LINE 471 "Z/IO/Network/SocketAddr.hsc" #-}
pokeMBA p ((4)) flow
{-# LINE 472 "Z/IO/Network/SocketAddr.hsc" #-}
pokeMBA p ((8)) (addr)
{-# LINE 473 "Z/IO/Network/SocketAddr.hsc" #-}
pokeMBA p ((24)) scope
{-# LINE 474 "Z/IO/Network/SocketAddr.hsc" #-}
newtype PortNumber = PortNumber Word16 deriving (PortNumber -> PortNumber -> Bool
(PortNumber -> PortNumber -> Bool)
-> (PortNumber -> PortNumber -> Bool) -> Eq PortNumber
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PortNumber -> PortNumber -> Bool
$c/= :: PortNumber -> PortNumber -> Bool
== :: PortNumber -> PortNumber -> Bool
$c== :: PortNumber -> PortNumber -> Bool
Eq, Eq PortNumber
Eq PortNumber
-> (PortNumber -> PortNumber -> Ordering)
-> (PortNumber -> PortNumber -> Bool)
-> (PortNumber -> PortNumber -> Bool)
-> (PortNumber -> PortNumber -> Bool)
-> (PortNumber -> PortNumber -> Bool)
-> (PortNumber -> PortNumber -> PortNumber)
-> (PortNumber -> PortNumber -> PortNumber)
-> Ord PortNumber
PortNumber -> PortNumber -> Bool
PortNumber -> PortNumber -> Ordering
PortNumber -> PortNumber -> PortNumber
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: PortNumber -> PortNumber -> PortNumber
$cmin :: PortNumber -> PortNumber -> PortNumber
max :: PortNumber -> PortNumber -> PortNumber
$cmax :: PortNumber -> PortNumber -> PortNumber
>= :: PortNumber -> PortNumber -> Bool
$c>= :: PortNumber -> PortNumber -> Bool
> :: PortNumber -> PortNumber -> Bool
$c> :: PortNumber -> PortNumber -> Bool
<= :: PortNumber -> PortNumber -> Bool
$c<= :: PortNumber -> PortNumber -> Bool
< :: PortNumber -> PortNumber -> Bool
$c< :: PortNumber -> PortNumber -> Bool
compare :: PortNumber -> PortNumber -> Ordering
$ccompare :: PortNumber -> PortNumber -> Ordering
$cp1Ord :: Eq PortNumber
Ord, Integer -> PortNumber
PortNumber -> PortNumber
PortNumber -> PortNumber -> PortNumber
(PortNumber -> PortNumber -> PortNumber)
-> (PortNumber -> PortNumber -> PortNumber)
-> (PortNumber -> PortNumber -> PortNumber)
-> (PortNumber -> PortNumber)
-> (PortNumber -> PortNumber)
-> (PortNumber -> PortNumber)
-> (Integer -> PortNumber)
-> Num PortNumber
forall a.
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (Integer -> a)
-> Num a
fromInteger :: Integer -> PortNumber
$cfromInteger :: Integer -> PortNumber
signum :: PortNumber -> PortNumber
$csignum :: PortNumber -> PortNumber
abs :: PortNumber -> PortNumber
$cabs :: PortNumber -> PortNumber
negate :: PortNumber -> PortNumber
$cnegate :: PortNumber -> PortNumber
* :: PortNumber -> PortNumber -> PortNumber
$c* :: PortNumber -> PortNumber -> PortNumber
- :: PortNumber -> PortNumber -> PortNumber
$c- :: PortNumber -> PortNumber -> PortNumber
+ :: PortNumber -> PortNumber -> PortNumber
$c+ :: PortNumber -> PortNumber -> PortNumber
Num, Int -> PortNumber
PortNumber -> Int
PortNumber -> [PortNumber]
PortNumber -> PortNumber
PortNumber -> PortNumber -> [PortNumber]
PortNumber -> PortNumber -> PortNumber -> [PortNumber]
(PortNumber -> PortNumber)
-> (PortNumber -> PortNumber)
-> (Int -> PortNumber)
-> (PortNumber -> Int)
-> (PortNumber -> [PortNumber])
-> (PortNumber -> PortNumber -> [PortNumber])
-> (PortNumber -> PortNumber -> [PortNumber])
-> (PortNumber -> PortNumber -> PortNumber -> [PortNumber])
-> Enum PortNumber
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: PortNumber -> PortNumber -> PortNumber -> [PortNumber]
$cenumFromThenTo :: PortNumber -> PortNumber -> PortNumber -> [PortNumber]
enumFromTo :: PortNumber -> PortNumber -> [PortNumber]
$cenumFromTo :: PortNumber -> PortNumber -> [PortNumber]
enumFromThen :: PortNumber -> PortNumber -> [PortNumber]
$cenumFromThen :: PortNumber -> PortNumber -> [PortNumber]
enumFrom :: PortNumber -> [PortNumber]
$cenumFrom :: PortNumber -> [PortNumber]
fromEnum :: PortNumber -> Int
$cfromEnum :: PortNumber -> Int
toEnum :: Int -> PortNumber
$ctoEnum :: Int -> PortNumber
pred :: PortNumber -> PortNumber
$cpred :: PortNumber -> PortNumber
succ :: PortNumber -> PortNumber
$csucc :: PortNumber -> PortNumber
Enum, PortNumber
PortNumber -> PortNumber -> Bounded PortNumber
forall a. a -> a -> Bounded a
maxBound :: PortNumber
$cmaxBound :: PortNumber
minBound :: PortNumber
$cminBound :: PortNumber
Bounded, Num PortNumber
Ord PortNumber
Num PortNumber
-> Ord PortNumber -> (PortNumber -> Rational) -> Real PortNumber
PortNumber -> Rational
forall a. Num a -> Ord a -> (a -> Rational) -> Real a
toRational :: PortNumber -> Rational
$ctoRational :: PortNumber -> Rational
$cp2Real :: Ord PortNumber
$cp1Real :: Num PortNumber
Real, Enum PortNumber
Real PortNumber
Real PortNumber
-> Enum PortNumber
-> (PortNumber -> PortNumber -> PortNumber)
-> (PortNumber -> PortNumber -> PortNumber)
-> (PortNumber -> PortNumber -> PortNumber)
-> (PortNumber -> PortNumber -> PortNumber)
-> (PortNumber -> PortNumber -> (PortNumber, PortNumber))
-> (PortNumber -> PortNumber -> (PortNumber, PortNumber))
-> (PortNumber -> Integer)
-> Integral PortNumber
PortNumber -> Integer
PortNumber -> PortNumber -> (PortNumber, PortNumber)
PortNumber -> PortNumber -> PortNumber
forall a.
Real a
-> Enum a
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> (a, a))
-> (a -> a -> (a, a))
-> (a -> Integer)
-> Integral a
toInteger :: PortNumber -> Integer
$ctoInteger :: PortNumber -> Integer
divMod :: PortNumber -> PortNumber -> (PortNumber, PortNumber)
$cdivMod :: PortNumber -> PortNumber -> (PortNumber, PortNumber)
quotRem :: PortNumber -> PortNumber -> (PortNumber, PortNumber)
$cquotRem :: PortNumber -> PortNumber -> (PortNumber, PortNumber)
mod :: PortNumber -> PortNumber -> PortNumber
$cmod :: PortNumber -> PortNumber -> PortNumber
div :: PortNumber -> PortNumber -> PortNumber
$cdiv :: PortNumber -> PortNumber -> PortNumber
rem :: PortNumber -> PortNumber -> PortNumber
$crem :: PortNumber -> PortNumber -> PortNumber
quot :: PortNumber -> PortNumber -> PortNumber
$cquot :: PortNumber -> PortNumber -> PortNumber
$cp2Integral :: Enum PortNumber
$cp1Integral :: Real PortNumber
Integral)
portAny :: PortNumber
portAny :: PortNumber
portAny = Word16 -> PortNumber
PortNumber Word16
0
instance Show PortNumber where
showsPrec :: Int -> PortNumber -> ShowS
showsPrec Int
p (PortNumber Word16
pn) = Int -> Word16 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec Int
p Word16
pn
instance Read PortNumber where
readPrec :: ReadPrec PortNumber
readPrec = Word16 -> PortNumber
PortNumber (Word16 -> PortNumber) -> ReadPrec Word16 -> ReadPrec PortNumber
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReadPrec Word16
forall a. Read a => ReadPrec a
readPrec
instance Storable PortNumber where
sizeOf :: PortNumber -> Int
sizeOf PortNumber
_ = Word16 -> Int
forall a. Storable a => a -> Int
sizeOf (Word16
0 :: Word16)
alignment :: PortNumber -> Int
alignment PortNumber
_ = Word16 -> Int
forall a. Storable a => a -> Int
alignment (Word16
0 :: Word16)
poke :: Ptr PortNumber -> PortNumber -> IO ()
poke Ptr PortNumber
p (PortNumber Word16
po) = Ptr Word16 -> Word16 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr PortNumber -> Ptr Word16
forall a b. Ptr a -> Ptr b
castPtr Ptr PortNumber
p) (Word16 -> Word16
htons Word16
po)
peek :: Ptr PortNumber -> IO PortNumber
peek Ptr PortNumber
p = Word16 -> PortNumber
PortNumber (Word16 -> PortNumber)
-> (Word16 -> Word16) -> Word16 -> PortNumber
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word16 -> Word16
ntohs (Word16 -> PortNumber) -> IO Word16 -> IO PortNumber
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr Word16 -> IO Word16
forall a. Storable a => Ptr a -> IO a
peek (Ptr PortNumber -> Ptr Word16
forall a b. Ptr a -> Ptr b
castPtr Ptr PortNumber
p)
instance UnalignedAccess PortNumber where
unalignedSize :: UnalignedSize PortNumber
unalignedSize = Int -> UnalignedSize PortNumber
forall a. Int -> UnalignedSize a
UnalignedSize Int
2
indexBA :: ByteArray# -> Int -> PortNumber
indexBA ByteArray#
p Int
off = Word16 -> PortNumber
PortNumber (Word16 -> PortNumber)
-> (Word16 -> Word16) -> Word16 -> PortNumber
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word16 -> Word16
ntohs (Word16 -> PortNumber) -> Word16 -> PortNumber
forall a b. (a -> b) -> a -> b
$ ByteArray# -> Int -> Word16
forall a. UnalignedAccess a => ByteArray# -> Int -> a
indexBA ByteArray#
p Int
off
pokeMBA :: MBA# SocketAddr -> Int -> PortNumber -> IO ()
pokeMBA MBA# SocketAddr
p Int
off (PortNumber Word16
po) = MBA# SocketAddr -> Int -> Word16 -> IO ()
forall a. UnalignedAccess a => MBA# SocketAddr -> Int -> a -> IO ()
pokeMBA MBA# SocketAddr
p Int
off (Word16 -> Word16
htons Word16
po)
peekMBA :: MBA# SocketAddr -> Int -> IO PortNumber
peekMBA MBA# SocketAddr
p Int
off = Word16 -> PortNumber
PortNumber (Word16 -> PortNumber)
-> (Word16 -> Word16) -> Word16 -> PortNumber
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word16 -> Word16
ntohs (Word16 -> PortNumber) -> IO Word16 -> IO PortNumber
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> MBA# SocketAddr -> Int -> IO Word16
forall a. UnalignedAccess a => MBA# SocketAddr -> Int -> IO a
peekMBA MBA# SocketAddr
p Int
off
newtype SocketFamily = SocketFamily CInt
deriving (SocketFamily -> SocketFamily -> Bool
(SocketFamily -> SocketFamily -> Bool)
-> (SocketFamily -> SocketFamily -> Bool) -> Eq SocketFamily
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SocketFamily -> SocketFamily -> Bool
$c/= :: SocketFamily -> SocketFamily -> Bool
== :: SocketFamily -> SocketFamily -> Bool
$c== :: SocketFamily -> SocketFamily -> Bool
Eq, Eq SocketFamily
Eq SocketFamily
-> (SocketFamily -> SocketFamily -> Ordering)
-> (SocketFamily -> SocketFamily -> Bool)
-> (SocketFamily -> SocketFamily -> Bool)
-> (SocketFamily -> SocketFamily -> Bool)
-> (SocketFamily -> SocketFamily -> Bool)
-> (SocketFamily -> SocketFamily -> SocketFamily)
-> (SocketFamily -> SocketFamily -> SocketFamily)
-> Ord SocketFamily
SocketFamily -> SocketFamily -> Bool
SocketFamily -> SocketFamily -> Ordering
SocketFamily -> SocketFamily -> SocketFamily
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: SocketFamily -> SocketFamily -> SocketFamily
$cmin :: SocketFamily -> SocketFamily -> SocketFamily
max :: SocketFamily -> SocketFamily -> SocketFamily
$cmax :: SocketFamily -> SocketFamily -> SocketFamily
>= :: SocketFamily -> SocketFamily -> Bool
$c>= :: SocketFamily -> SocketFamily -> Bool
> :: SocketFamily -> SocketFamily -> Bool
$c> :: SocketFamily -> SocketFamily -> Bool
<= :: SocketFamily -> SocketFamily -> Bool
$c<= :: SocketFamily -> SocketFamily -> Bool
< :: SocketFamily -> SocketFamily -> Bool
$c< :: SocketFamily -> SocketFamily -> Bool
compare :: SocketFamily -> SocketFamily -> Ordering
$ccompare :: SocketFamily -> SocketFamily -> Ordering
$cp1Ord :: Eq SocketFamily
Ord, ReadPrec [SocketFamily]
ReadPrec SocketFamily
Int -> ReadS SocketFamily
ReadS [SocketFamily]
(Int -> ReadS SocketFamily)
-> ReadS [SocketFamily]
-> ReadPrec SocketFamily
-> ReadPrec [SocketFamily]
-> Read SocketFamily
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [SocketFamily]
$creadListPrec :: ReadPrec [SocketFamily]
readPrec :: ReadPrec SocketFamily
$creadPrec :: ReadPrec SocketFamily
readList :: ReadS [SocketFamily]
$creadList :: ReadS [SocketFamily]
readsPrec :: Int -> ReadS SocketFamily
$creadsPrec :: Int -> ReadS SocketFamily
Read, Int -> SocketFamily -> ShowS
[SocketFamily] -> ShowS
SocketFamily -> String
(Int -> SocketFamily -> ShowS)
-> (SocketFamily -> String)
-> ([SocketFamily] -> ShowS)
-> Show SocketFamily
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SocketFamily] -> ShowS
$cshowList :: [SocketFamily] -> ShowS
show :: SocketFamily -> String
$cshow :: SocketFamily -> String
showsPrec :: Int -> SocketFamily -> ShowS
$cshowsPrec :: Int -> SocketFamily -> ShowS
Show, Typeable)
newtype SocketType = SocketType CInt
deriving (SocketType -> SocketType -> Bool
(SocketType -> SocketType -> Bool)
-> (SocketType -> SocketType -> Bool) -> Eq SocketType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SocketType -> SocketType -> Bool
$c/= :: SocketType -> SocketType -> Bool
== :: SocketType -> SocketType -> Bool
$c== :: SocketType -> SocketType -> Bool
Eq, Eq SocketType
Eq SocketType
-> (SocketType -> SocketType -> Ordering)
-> (SocketType -> SocketType -> Bool)
-> (SocketType -> SocketType -> Bool)
-> (SocketType -> SocketType -> Bool)
-> (SocketType -> SocketType -> Bool)
-> (SocketType -> SocketType -> SocketType)
-> (SocketType -> SocketType -> SocketType)
-> Ord SocketType
SocketType -> SocketType -> Bool
SocketType -> SocketType -> Ordering
SocketType -> SocketType -> SocketType
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: SocketType -> SocketType -> SocketType
$cmin :: SocketType -> SocketType -> SocketType
max :: SocketType -> SocketType -> SocketType
$cmax :: SocketType -> SocketType -> SocketType
>= :: SocketType -> SocketType -> Bool
$c>= :: SocketType -> SocketType -> Bool
> :: SocketType -> SocketType -> Bool
$c> :: SocketType -> SocketType -> Bool
<= :: SocketType -> SocketType -> Bool
$c<= :: SocketType -> SocketType -> Bool
< :: SocketType -> SocketType -> Bool
$c< :: SocketType -> SocketType -> Bool
compare :: SocketType -> SocketType -> Ordering
$ccompare :: SocketType -> SocketType -> Ordering
$cp1Ord :: Eq SocketType
Ord, ReadPrec [SocketType]
ReadPrec SocketType
Int -> ReadS SocketType
ReadS [SocketType]
(Int -> ReadS SocketType)
-> ReadS [SocketType]
-> ReadPrec SocketType
-> ReadPrec [SocketType]
-> Read SocketType
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [SocketType]
$creadListPrec :: ReadPrec [SocketType]
readPrec :: ReadPrec SocketType
$creadPrec :: ReadPrec SocketType
readList :: ReadS [SocketType]
$creadList :: ReadS [SocketType]
readsPrec :: Int -> ReadS SocketType
$creadsPrec :: Int -> ReadS SocketType
Read, Int -> SocketType -> ShowS
[SocketType] -> ShowS
SocketType -> String
(Int -> SocketType -> ShowS)
-> (SocketType -> String)
-> ([SocketType] -> ShowS)
-> Show SocketType
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SocketType] -> ShowS
$cshowList :: [SocketType] -> ShowS
show :: SocketType -> String
$cshow :: SocketType -> String
showsPrec :: Int -> SocketType -> ShowS
$cshowsPrec :: Int -> SocketType -> ShowS
Show, Typeable)
newtype ProtocolNumber = ProtocolNumber CInt
deriving (ProtocolNumber -> ProtocolNumber -> Bool
(ProtocolNumber -> ProtocolNumber -> Bool)
-> (ProtocolNumber -> ProtocolNumber -> Bool) -> Eq ProtocolNumber
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ProtocolNumber -> ProtocolNumber -> Bool
$c/= :: ProtocolNumber -> ProtocolNumber -> Bool
== :: ProtocolNumber -> ProtocolNumber -> Bool
$c== :: ProtocolNumber -> ProtocolNumber -> Bool
Eq, Eq ProtocolNumber
Eq ProtocolNumber
-> (ProtocolNumber -> ProtocolNumber -> Ordering)
-> (ProtocolNumber -> ProtocolNumber -> Bool)
-> (ProtocolNumber -> ProtocolNumber -> Bool)
-> (ProtocolNumber -> ProtocolNumber -> Bool)
-> (ProtocolNumber -> ProtocolNumber -> Bool)
-> (ProtocolNumber -> ProtocolNumber -> ProtocolNumber)
-> (ProtocolNumber -> ProtocolNumber -> ProtocolNumber)
-> Ord ProtocolNumber
ProtocolNumber -> ProtocolNumber -> Bool
ProtocolNumber -> ProtocolNumber -> Ordering
ProtocolNumber -> ProtocolNumber -> ProtocolNumber
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: ProtocolNumber -> ProtocolNumber -> ProtocolNumber
$cmin :: ProtocolNumber -> ProtocolNumber -> ProtocolNumber
max :: ProtocolNumber -> ProtocolNumber -> ProtocolNumber
$cmax :: ProtocolNumber -> ProtocolNumber -> ProtocolNumber
>= :: ProtocolNumber -> ProtocolNumber -> Bool
$c>= :: ProtocolNumber -> ProtocolNumber -> Bool
> :: ProtocolNumber -> ProtocolNumber -> Bool
$c> :: ProtocolNumber -> ProtocolNumber -> Bool
<= :: ProtocolNumber -> ProtocolNumber -> Bool
$c<= :: ProtocolNumber -> ProtocolNumber -> Bool
< :: ProtocolNumber -> ProtocolNumber -> Bool
$c< :: ProtocolNumber -> ProtocolNumber -> Bool
compare :: ProtocolNumber -> ProtocolNumber -> Ordering
$ccompare :: ProtocolNumber -> ProtocolNumber -> Ordering
$cp1Ord :: Eq ProtocolNumber
Ord, ReadPrec [ProtocolNumber]
ReadPrec ProtocolNumber
Int -> ReadS ProtocolNumber
ReadS [ProtocolNumber]
(Int -> ReadS ProtocolNumber)
-> ReadS [ProtocolNumber]
-> ReadPrec ProtocolNumber
-> ReadPrec [ProtocolNumber]
-> Read ProtocolNumber
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ProtocolNumber]
$creadListPrec :: ReadPrec [ProtocolNumber]
readPrec :: ReadPrec ProtocolNumber
$creadPrec :: ReadPrec ProtocolNumber
readList :: ReadS [ProtocolNumber]
$creadList :: ReadS [ProtocolNumber]
readsPrec :: Int -> ReadS ProtocolNumber
$creadsPrec :: Int -> ReadS ProtocolNumber
Read, Int -> ProtocolNumber -> ShowS
[ProtocolNumber] -> ShowS
ProtocolNumber -> String
(Int -> ProtocolNumber -> ShowS)
-> (ProtocolNumber -> String)
-> ([ProtocolNumber] -> ShowS)
-> Show ProtocolNumber
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ProtocolNumber] -> ShowS
$cshowList :: [ProtocolNumber] -> ShowS
show :: ProtocolNumber -> String
$cshow :: ProtocolNumber -> String
showsPrec :: Int -> ProtocolNumber -> ShowS
$cshowsPrec :: Int -> ProtocolNumber -> ShowS
Show, Typeable)
instance Storable SocketFamily where
sizeOf :: SocketFamily -> Int
sizeOf SocketFamily
_ = CInt -> Int
forall a. Storable a => a -> Int
sizeOf (CInt
forall a. HasCallStack => a
undefined :: CInt)
alignment :: SocketFamily -> Int
alignment SocketFamily
_ = CInt -> Int
forall a. Storable a => a -> Int
alignment (CInt
forall a. HasCallStack => a
undefined :: CInt)
peek :: Ptr SocketFamily -> IO SocketFamily
peek Ptr SocketFamily
ptr = CInt -> SocketFamily
SocketFamily (CInt -> SocketFamily) -> IO CInt -> IO SocketFamily
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
`fmap` Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek (Ptr SocketFamily -> Ptr CInt
forall a b. Ptr a -> Ptr b
castPtr Ptr SocketFamily
ptr)
poke :: Ptr SocketFamily -> SocketFamily -> IO ()
poke Ptr SocketFamily
ptr (SocketFamily CInt
v) = Ptr CInt -> CInt -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr SocketFamily -> Ptr CInt
forall a b. Ptr a -> Ptr b
castPtr Ptr SocketFamily
ptr) CInt
v
instance Storable SocketType where
sizeOf :: SocketType -> Int
sizeOf SocketType
_ = CInt -> Int
forall a. Storable a => a -> Int
sizeOf (CInt
forall a. HasCallStack => a
undefined :: CInt)
alignment :: SocketType -> Int
alignment SocketType
_ = CInt -> Int
forall a. Storable a => a -> Int
alignment (CInt
forall a. HasCallStack => a
undefined :: CInt)
peek :: Ptr SocketType -> IO SocketType
peek Ptr SocketType
ptr = CInt -> SocketType
SocketType (CInt -> SocketType) -> IO CInt -> IO SocketType
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
`fmap` Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek (Ptr SocketType -> Ptr CInt
forall a b. Ptr a -> Ptr b
castPtr Ptr SocketType
ptr)
poke :: Ptr SocketType -> SocketType -> IO ()
poke Ptr SocketType
ptr (SocketType CInt
v) = Ptr CInt -> CInt -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr SocketType -> Ptr CInt
forall a b. Ptr a -> Ptr b
castPtr Ptr SocketType
ptr) CInt
v
instance Storable ProtocolNumber where
sizeOf :: ProtocolNumber -> Int
sizeOf ProtocolNumber
_ = CInt -> Int
forall a. Storable a => a -> Int
sizeOf (CInt
forall a. HasCallStack => a
undefined :: CInt)
alignment :: ProtocolNumber -> Int
alignment ProtocolNumber
_ = CInt -> Int
forall a. Storable a => a -> Int
alignment (CInt
forall a. HasCallStack => a
undefined :: CInt)
peek :: Ptr ProtocolNumber -> IO ProtocolNumber
peek Ptr ProtocolNumber
ptr = CInt -> ProtocolNumber
ProtocolNumber (CInt -> ProtocolNumber) -> IO CInt -> IO ProtocolNumber
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
`fmap` Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek (Ptr ProtocolNumber -> Ptr CInt
forall a b. Ptr a -> Ptr b
castPtr Ptr ProtocolNumber
ptr)
poke :: Ptr ProtocolNumber -> ProtocolNumber -> IO ()
poke Ptr ProtocolNumber
ptr (ProtocolNumber CInt
v) = Ptr CInt -> CInt -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr ProtocolNumber -> Ptr CInt
forall a b. Ptr a -> Ptr b
castPtr Ptr ProtocolNumber
ptr) CInt
v
pattern AF_UNSPEC :: SocketFamily
pattern $bAF_UNSPEC :: SocketFamily
$mAF_UNSPEC :: forall r. SocketFamily -> (Void# -> r) -> (Void# -> r) -> r
AF_UNSPEC = SocketFamily (0)
{-# LINE 550 "Z/IO/Network/SocketAddr.hsc" #-}
pattern AF_INET :: SocketFamily
pattern $bAF_INET :: SocketFamily
$mAF_INET :: forall r. SocketFamily -> (Void# -> r) -> (Void# -> r) -> r
AF_INET = SocketFamily (2)
{-# LINE 553 "Z/IO/Network/SocketAddr.hsc" #-}
pattern AF_INET6 :: SocketFamily
pattern $bAF_INET6 :: SocketFamily
$mAF_INET6 :: forall r. SocketFamily -> (Void# -> r) -> (Void# -> r) -> r
AF_INET6 = SocketFamily (10)
{-# LINE 556 "Z/IO/Network/SocketAddr.hsc" #-}
pattern SOCK_STREAM :: SocketType
pattern $bSOCK_STREAM :: SocketType
$mSOCK_STREAM :: forall r. SocketType -> (Void# -> r) -> (Void# -> r) -> r
SOCK_STREAM = SocketType (1)
{-# LINE 559 "Z/IO/Network/SocketAddr.hsc" #-}
pattern SOCK_DGRAM :: SocketType
pattern $bSOCK_DGRAM :: SocketType
$mSOCK_DGRAM :: forall r. SocketType -> (Void# -> r) -> (Void# -> r) -> r
SOCK_DGRAM = SocketType (2)
{-# LINE 561 "Z/IO/Network/SocketAddr.hsc" #-}
pattern SOCK_RAW :: SocketType
pattern $bSOCK_RAW :: SocketType
$mSOCK_RAW :: forall r. SocketType -> (Void# -> r) -> (Void# -> r) -> r
SOCK_RAW = SocketType (3)
{-# LINE 563 "Z/IO/Network/SocketAddr.hsc" #-}
pattern SOCK_RDM :: SocketType
pattern $bSOCK_RDM :: SocketType
$mSOCK_RDM :: forall r. SocketType -> (Void# -> r) -> (Void# -> r) -> r
SOCK_RDM = SocketType (4)
{-# LINE 565 "Z/IO/Network/SocketAddr.hsc" #-}
pattern SOCK_SEQPACKET :: SocketType
pattern $bSOCK_SEQPACKET :: SocketType
$mSOCK_SEQPACKET :: forall r. SocketType -> (Void# -> r) -> (Void# -> r) -> r
SOCK_SEQPACKET = SocketType (5)
{-# LINE 567 "Z/IO/Network/SocketAddr.hsc" #-}
pattern SOCK_ANY :: SocketType
pattern $bSOCK_ANY :: SocketType
$mSOCK_ANY :: forall r. SocketType -> (Void# -> r) -> (Void# -> r) -> r
SOCK_ANY = SocketType 0
pattern IPPROTO_DEFAULT :: ProtocolNumber
pattern $bIPPROTO_DEFAULT :: ProtocolNumber
$mIPPROTO_DEFAULT :: forall r. ProtocolNumber -> (Void# -> r) -> (Void# -> r) -> r
IPPROTO_DEFAULT = ProtocolNumber 0
pattern IPPROTO_IP :: ProtocolNumber
pattern $bIPPROTO_IP :: ProtocolNumber
$mIPPROTO_IP :: forall r. ProtocolNumber -> (Void# -> r) -> (Void# -> r) -> r
IPPROTO_IP = ProtocolNumber (0)
{-# LINE 575 "Z/IO/Network/SocketAddr.hsc" #-}
pattern IPPROTO_TCP :: ProtocolNumber
pattern $bIPPROTO_TCP :: ProtocolNumber
$mIPPROTO_TCP :: forall r. ProtocolNumber -> (Void# -> r) -> (Void# -> r) -> r
IPPROTO_TCP = ProtocolNumber (6)
{-# LINE 577 "Z/IO/Network/SocketAddr.hsc" #-}
pattern IPPROTO_UDP :: ProtocolNumber
pattern $bIPPROTO_UDP :: ProtocolNumber
$mIPPROTO_UDP :: forall r. ProtocolNumber -> (Void# -> r) -> (Void# -> r) -> r
IPPROTO_UDP = ProtocolNumber (17)
{-# LINE 579 "Z/IO/Network/SocketAddr.hsc" #-}
foreign import ccall unsafe "ntohs" ntohs :: Word16 -> Word16
{-# LINE 583 "Z/IO/Network/SocketAddr.hsc" #-}
foreign import ccall unsafe "htons" htons :: Word16 -> Word16
{-# LINE 584 "Z/IO/Network/SocketAddr.hsc" #-}
foreign import ccall unsafe "ntohl" ntohl :: Word32 -> Word32
{-# LINE 585 "Z/IO/Network/SocketAddr.hsc" #-}
foreign import ccall unsafe "htonl" htonl :: Word32 -> Word32
{-# LINE 586 "Z/IO/Network/SocketAddr.hsc" #-}
foreign import ccall unsafe uv_ip4_addr :: CString -> CInt -> MBA# SocketAddr -> IO CInt
foreign import ccall unsafe uv_ip6_addr :: CString -> CInt -> MBA# SocketAddr -> IO CInt