packages feed

henet-1.3.8.0: src/Network/ENet/Internal.hs

module Network.ENet.Internal where

import Network.Socket.Internal

import Foreign

import Data.Endian
import Data.Endian.Unsafe( unsafeUnwrapBigEndian
                         , unsafeAssertBigEndian)

import Network.ENet.Bindings

toENetAddress :: SockAddr -> Address
toENetAddress (SockAddrInet (PortNum port) ip) =
  Address ip $ fromBigEndian $ unsafeAssertBigEndian port

toSockAddr :: Address -> SockAddr
toSockAddr (Address ip port) =
  SockAddrInet (PortNum $ unsafeUnwrapBigEndian $ toBigEndian $ port) ip

withMaybeDo :: Storable a => Maybe a -> (Ptr a -> IO b) -> IO b
withMaybeDo (Just val) f = alloca $ \ptr -> poke ptr val >> f ptr
withMaybeDo Nothing    f = f nullPtr