{-# OPTIONS_GHC -optc-D_GNU_SOURCE #-}
{-# LINE 1 "src/Linux/Socket/Types.hsc" #-}
{-# language DataKinds #-}
{-# language DerivingStrategies #-}
{-# language DuplicateRecordFields #-}
{-# language GeneralizedNewtypeDeriving #-}
{-# language BinaryLiterals #-}
{-# language TypeApplications #-}

-- This is needed because hsc2hs does not currently handle ticked
-- promoted data constructors correctly.
{-# OPTIONS_GHC -fno-warn-unticked-promoted-constructors #-}









-- | All of the data constructors provided by this module are unsafe.
--   Only use them if you really know what you are doing.
module Linux.Socket.Types
  ( SocketFlags(..)
  , dontWait
  , truncate
  , controlTruncate
  , closeOnExec
  , nonblocking
  , headerInclude
    -- * Multiple Message Header
  , pokeMultipleMessageHeaderName
  , pokeMultipleMessageHeaderNameLength
  , pokeMultipleMessageHeaderIOVector
  , pokeMultipleMessageHeaderIOVectorLength
  , pokeMultipleMessageHeaderControl
  , pokeMultipleMessageHeaderControlLength
  , pokeMultipleMessageHeaderFlags
  , pokeMultipleMessageHeaderLength
  , peekMultipleMessageHeaderLength
  , peekMultipleMessageHeaderNameLength
  , sizeofMultipleMessageHeader
    -- * UDP Header
  , sizeofUdpHeader
  , pokeUdpHeaderSourcePort
  , pokeUdpHeaderDestinationPort
  , pokeUdpHeaderLength
  , pokeUdpHeaderChecksum
    -- * IPv4 Header
  , sizeofIpHeader
  , pokeIpHeaderVersionIhl
  , pokeIpHeaderTypeOfService
  , pokeIpHeaderTotalLength
  , pokeIpHeaderIdentifier
  , pokeIpHeaderFragmentOffset
  , pokeIpHeaderTimeToLive
  , pokeIpHeaderProtocol
  , pokeIpHeaderChecksum
  , pokeIpHeaderSourceAddress
  , pokeIpHeaderDestinationAddress
  ) where

import Prelude hiding (truncate)

import Data.Bits (Bits((.|.)))
import Data.Word (Word8,Word16,Word32)
import Data.Primitive.Addr (Addr(..),writeOffAddr)
import Foreign.C.Types (CInt(..),CSize,CUInt)
import Posix.Socket (MessageFlags(..),Message(Receive),OptionName(..))
import Foreign.Storable (peekByteOff,pokeByteOff)
import GHC.Ptr (Ptr(..))

newtype SocketFlags = SocketFlags CInt
  deriving stock (SocketFlags -> SocketFlags -> Bool
(SocketFlags -> SocketFlags -> Bool)
-> (SocketFlags -> SocketFlags -> Bool) -> Eq SocketFlags
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SocketFlags -> SocketFlags -> Bool
== :: SocketFlags -> SocketFlags -> Bool
$c/= :: SocketFlags -> SocketFlags -> Bool
/= :: SocketFlags -> SocketFlags -> Bool
Eq)
  deriving newtype (Eq SocketFlags
SocketFlags
Eq SocketFlags =>
(SocketFlags -> SocketFlags -> SocketFlags)
-> (SocketFlags -> SocketFlags -> SocketFlags)
-> (SocketFlags -> SocketFlags -> SocketFlags)
-> (SocketFlags -> SocketFlags)
-> (SocketFlags -> Int -> SocketFlags)
-> (SocketFlags -> Int -> SocketFlags)
-> SocketFlags
-> (Int -> SocketFlags)
-> (SocketFlags -> Int -> SocketFlags)
-> (SocketFlags -> Int -> SocketFlags)
-> (SocketFlags -> Int -> SocketFlags)
-> (SocketFlags -> Int -> Bool)
-> (SocketFlags -> Maybe Int)
-> (SocketFlags -> Int)
-> (SocketFlags -> Bool)
-> (SocketFlags -> Int -> SocketFlags)
-> (SocketFlags -> Int -> SocketFlags)
-> (SocketFlags -> Int -> SocketFlags)
-> (SocketFlags -> Int -> SocketFlags)
-> (SocketFlags -> Int -> SocketFlags)
-> (SocketFlags -> Int -> SocketFlags)
-> (SocketFlags -> Int)
-> Bits SocketFlags
Int -> SocketFlags
SocketFlags -> Bool
SocketFlags -> Int
SocketFlags -> Maybe Int
SocketFlags -> SocketFlags
SocketFlags -> Int -> Bool
SocketFlags -> Int -> SocketFlags
SocketFlags -> SocketFlags -> SocketFlags
forall a.
Eq a =>
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
$c.&. :: SocketFlags -> SocketFlags -> SocketFlags
.&. :: SocketFlags -> SocketFlags -> SocketFlags
$c.|. :: SocketFlags -> SocketFlags -> SocketFlags
.|. :: SocketFlags -> SocketFlags -> SocketFlags
$cxor :: SocketFlags -> SocketFlags -> SocketFlags
xor :: SocketFlags -> SocketFlags -> SocketFlags
$ccomplement :: SocketFlags -> SocketFlags
complement :: SocketFlags -> SocketFlags
$cshift :: SocketFlags -> Int -> SocketFlags
shift :: SocketFlags -> Int -> SocketFlags
$crotate :: SocketFlags -> Int -> SocketFlags
rotate :: SocketFlags -> Int -> SocketFlags
$czeroBits :: SocketFlags
zeroBits :: SocketFlags
$cbit :: Int -> SocketFlags
bit :: Int -> SocketFlags
$csetBit :: SocketFlags -> Int -> SocketFlags
setBit :: SocketFlags -> Int -> SocketFlags
$cclearBit :: SocketFlags -> Int -> SocketFlags
clearBit :: SocketFlags -> Int -> SocketFlags
$ccomplementBit :: SocketFlags -> Int -> SocketFlags
complementBit :: SocketFlags -> Int -> SocketFlags
$ctestBit :: SocketFlags -> Int -> Bool
testBit :: SocketFlags -> Int -> Bool
$cbitSizeMaybe :: SocketFlags -> Maybe Int
bitSizeMaybe :: SocketFlags -> Maybe Int
$cbitSize :: SocketFlags -> Int
bitSize :: SocketFlags -> Int
$cisSigned :: SocketFlags -> Bool
isSigned :: SocketFlags -> Bool
$cshiftL :: SocketFlags -> Int -> SocketFlags
shiftL :: SocketFlags -> Int -> SocketFlags
$cunsafeShiftL :: SocketFlags -> Int -> SocketFlags
unsafeShiftL :: SocketFlags -> Int -> SocketFlags
$cshiftR :: SocketFlags -> Int -> SocketFlags
shiftR :: SocketFlags -> Int -> SocketFlags
$cunsafeShiftR :: SocketFlags -> Int -> SocketFlags
unsafeShiftR :: SocketFlags -> Int -> SocketFlags
$crotateL :: SocketFlags -> Int -> SocketFlags
rotateL :: SocketFlags -> Int -> SocketFlags
$crotateR :: SocketFlags -> Int -> SocketFlags
rotateR :: SocketFlags -> Int -> SocketFlags
$cpopCount :: SocketFlags -> Int
popCount :: SocketFlags -> Int
Bits)

-- newtype Collection :: Type -> Type where
--   Collection :: !(Ptr a) -> Collection a
--
-- indexCollection :: Ptr a
--   => Collection a -> Int -> IO (Ptr a)
-- indexCollection (Collection p) n = advancePtr p n
-- data MessageHeader = MessageHeader
--   { name :: !Addr
--   , nameLength :: !CInt
--   , vector :: !(Ptr InputOutputVector)
--   , vectorLength :: !CSize
--   , control :: !(Ptr ControlMessageHeader)
--   , controlLength :: !CSize
--   , flags :: !(MessageFlags Receive)
--   }
--
-- data IOVector = IOVector
--   { base :: !Addr
--   , length :: !CSize
--   }
--
-- data ControlMessageHeader = ControlMessageHeader
--   { length :: !CInt
--   , level :: !CInt
--   , type_ :: !CInt
--   , data_ :: !Addr
--   }

instance Semigroup SocketFlags where <> :: SocketFlags -> SocketFlags -> SocketFlags
(<>) = SocketFlags -> SocketFlags -> SocketFlags
forall a. Bits a => a -> a -> a
(.|.)
instance Monoid SocketFlags where mempty :: SocketFlags
mempty = CInt -> SocketFlags
SocketFlags CInt
0

-- | The @MSG_DONTWAIT@ receive flag or send flag.
dontWait :: MessageFlags m
dontWait :: forall (m :: Message). MessageFlags m
dontWait = CInt -> MessageFlags m
forall (a :: Message). CInt -> MessageFlags a
MessageFlags CInt
64
{-# LINE 110 "src/Linux/Socket/Types.hsc" #-}

-- | The @MSG_TRUNC@ receive flag.
truncate :: MessageFlags Receive
truncate :: MessageFlags 'Receive
truncate = CInt -> MessageFlags 'Receive
forall (a :: Message). CInt -> MessageFlags a
MessageFlags CInt
32
{-# LINE 114 "src/Linux/Socket/Types.hsc" #-}

-- | The @MSG_CTRUNC@ receive flag.
controlTruncate :: MessageFlags Receive
controlTruncate :: MessageFlags 'Receive
controlTruncate = CInt -> MessageFlags 'Receive
forall (a :: Message). CInt -> MessageFlags a
MessageFlags CInt
8
{-# LINE 118 "src/Linux/Socket/Types.hsc" #-}

-- | The @SOCK_CLOEXEC@ receive flag or send flag.
closeOnExec :: SocketFlags
closeOnExec :: SocketFlags
closeOnExec = CInt -> SocketFlags
SocketFlags CInt
524288
{-# LINE 122 "src/Linux/Socket/Types.hsc" #-}

-- | The @SOCK_NONBLOCK@ receive flag or send flag.
nonblocking :: SocketFlags
nonblocking :: SocketFlags
nonblocking = CInt -> SocketFlags
SocketFlags CInt
2048
{-# LINE 126 "src/Linux/Socket/Types.hsc" #-}

-- | If enabled, the user supplies an IP header in front of the
-- user data.  Valid only for @SOCK_RAW@ sockets.
headerInclude :: OptionName
headerInclude :: OptionName
headerInclude = CInt -> OptionName
OptionName CInt
3
{-# LINE 131 "src/Linux/Socket/Types.hsc" #-}

-- | The size of a @mmsghdr@ struct.
sizeofMultipleMessageHeader :: CInt
sizeofMultipleMessageHeader :: CInt
sizeofMultipleMessageHeader = (CInt
64)
{-# LINE 135 "src/Linux/Socket/Types.hsc" #-}

pokeMultipleMessageHeaderName :: Addr -> Addr -> IO ()
pokeMultipleMessageHeaderName :: Addr -> Addr -> IO ()
pokeMultipleMessageHeaderName (Addr Addr#
p) (Addr Addr#
x) = (\Ptr Any
hsc_ptr -> Ptr Any -> Int -> Ptr Any -> IO ()
forall b. Ptr b -> Int -> Ptr Any -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr Any
hsc_ptr Int
0) (Addr# -> Ptr Any
forall a. Addr# -> Ptr a
Ptr Addr#
p) (Addr# -> Ptr Any
forall a. Addr# -> Ptr a
Ptr Addr#
x)
{-# LINE 138 "src/Linux/Socket/Types.hsc" #-}

pokeMultipleMessageHeaderNameLength :: Addr -> CInt -> IO ()
pokeMultipleMessageHeaderNameLength :: Addr -> CInt -> IO ()
pokeMultipleMessageHeaderNameLength (Addr Addr#
p) = (\Ptr Any
hsc_ptr -> Ptr Any -> Int -> CInt -> IO ()
forall b. Ptr b -> Int -> CInt -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr Any
hsc_ptr Int
8) (Addr# -> Ptr Any
forall a. Addr# -> Ptr a
Ptr Addr#
p)
{-# LINE 141 "src/Linux/Socket/Types.hsc" #-}

pokeMultipleMessageHeaderIOVector :: Addr -> Addr -> IO ()
pokeMultipleMessageHeaderIOVector :: Addr -> Addr -> IO ()
pokeMultipleMessageHeaderIOVector (Addr Addr#
p) (Addr Addr#
x) = (\Ptr Any
hsc_ptr -> Ptr Any -> Int -> Ptr Any -> IO ()
forall b. Ptr b -> Int -> Ptr Any -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr Any
hsc_ptr Int
16) (Addr# -> Ptr Any
forall a. Addr# -> Ptr a
Ptr Addr#
p) (Addr# -> Ptr Any
forall a. Addr# -> Ptr a
Ptr Addr#
x)
{-# LINE 144 "src/Linux/Socket/Types.hsc" #-}

pokeMultipleMessageHeaderIOVectorLength :: Addr -> CSize -> IO ()
pokeMultipleMessageHeaderIOVectorLength :: Addr -> CSize -> IO ()
pokeMultipleMessageHeaderIOVectorLength (Addr Addr#
p) = (\Ptr Any
hsc_ptr -> Ptr Any -> Int -> CSize -> IO ()
forall b. Ptr b -> Int -> CSize -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr Any
hsc_ptr Int
24) (Addr# -> Ptr Any
forall a. Addr# -> Ptr a
Ptr Addr#
p)
{-# LINE 147 "src/Linux/Socket/Types.hsc" #-}

pokeMultipleMessageHeaderControl :: Addr -> Addr -> IO ()
pokeMultipleMessageHeaderControl :: Addr -> Addr -> IO ()
pokeMultipleMessageHeaderControl (Addr Addr#
p) (Addr Addr#
x) = (\Ptr Any
hsc_ptr -> Ptr Any -> Int -> Ptr Any -> IO ()
forall b. Ptr b -> Int -> Ptr Any -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr Any
hsc_ptr Int
32) (Addr# -> Ptr Any
forall a. Addr# -> Ptr a
Ptr Addr#
p) (Addr# -> Ptr Any
forall a. Addr# -> Ptr a
Ptr Addr#
x)
{-# LINE 150 "src/Linux/Socket/Types.hsc" #-}

pokeMultipleMessageHeaderControlLength :: Addr -> CSize -> IO ()
pokeMultipleMessageHeaderControlLength :: Addr -> CSize -> IO ()
pokeMultipleMessageHeaderControlLength (Addr Addr#
p) = (\Ptr Any
hsc_ptr -> Ptr Any -> Int -> CSize -> IO ()
forall b. Ptr b -> Int -> CSize -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr Any
hsc_ptr Int
40) (Addr# -> Ptr Any
forall a. Addr# -> Ptr a
Ptr Addr#
p)
{-# LINE 153 "src/Linux/Socket/Types.hsc" #-}

pokeMultipleMessageHeaderFlags :: Addr -> MessageFlags Receive -> IO ()
pokeMultipleMessageHeaderFlags :: Addr -> MessageFlags 'Receive -> IO ()
pokeMultipleMessageHeaderFlags (Addr Addr#
p) (MessageFlags CInt
i) = (\Ptr Any
hsc_ptr -> Ptr Any -> Int -> CInt -> IO ()
forall b. Ptr b -> Int -> CInt -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr Any
hsc_ptr Int
48) (Addr# -> Ptr Any
forall a. Addr# -> Ptr a
Ptr Addr#
p) CInt
i
{-# LINE 156 "src/Linux/Socket/Types.hsc" #-}

pokeMultipleMessageHeaderLength :: Addr -> CUInt -> IO ()
pokeMultipleMessageHeaderLength :: Addr -> CUInt -> IO ()
pokeMultipleMessageHeaderLength (Addr Addr#
p) CUInt
i = (\Ptr Any
hsc_ptr -> Ptr Any -> Int -> CUInt -> IO ()
forall b. Ptr b -> Int -> CUInt -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr Any
hsc_ptr Int
56) (Addr# -> Ptr Any
forall a. Addr# -> Ptr a
Ptr Addr#
p) CUInt
i
{-# LINE 159 "src/Linux/Socket/Types.hsc" #-}

peekMultipleMessageHeaderNameLength :: Addr -> IO CInt
peekMultipleMessageHeaderNameLength :: Addr -> IO CInt
peekMultipleMessageHeaderNameLength (Addr Addr#
p) = (\Ptr Any
hsc_ptr -> Ptr Any -> Int -> IO CInt
forall b. Ptr b -> Int -> IO CInt
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOff Ptr Any
hsc_ptr Int
8) (Addr# -> Ptr Any
forall a. Addr# -> Ptr a
Ptr Addr#
p)
{-# LINE 162 "src/Linux/Socket/Types.hsc" #-}

peekMultipleMessageHeaderLength :: Addr -> IO CUInt
peekMultipleMessageHeaderLength :: Addr -> IO CUInt
peekMultipleMessageHeaderLength (Addr Addr#
p) = (\Ptr Any
hsc_ptr -> Ptr Any -> Int -> IO CUInt
forall b. Ptr b -> Int -> IO CUInt
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOff Ptr Any
hsc_ptr Int
56) (Addr# -> Ptr Any
forall a. Addr# -> Ptr a
Ptr Addr#
p)
{-# LINE 165 "src/Linux/Socket/Types.hsc" #-}

-- | The size of a @udphdr@ struct.
sizeofUdpHeader :: CInt
sizeofUdpHeader :: CInt
sizeofUdpHeader = (CInt
8)
{-# LINE 169 "src/Linux/Socket/Types.hsc" #-}

pokeUdpHeaderSourcePort :: Addr -> Word16 -> IO ()
pokeUdpHeaderSourcePort :: Addr -> Word16 -> IO ()
pokeUdpHeaderSourcePort (Addr Addr#
p) = (\Ptr Any
hsc_ptr -> Ptr Any -> Int -> Word16 -> IO ()
forall b. Ptr b -> Int -> Word16 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr Any
hsc_ptr Int
0) (Addr# -> Ptr Any
forall a. Addr# -> Ptr a
Ptr Addr#
p)
{-# LINE 172 "src/Linux/Socket/Types.hsc" #-}

pokeUdpHeaderDestinationPort :: Addr -> Word16 -> IO ()
pokeUdpHeaderDestinationPort :: Addr -> Word16 -> IO ()
pokeUdpHeaderDestinationPort (Addr Addr#
p) = (\Ptr Any
hsc_ptr -> Ptr Any -> Int -> Word16 -> IO ()
forall b. Ptr b -> Int -> Word16 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr Any
hsc_ptr Int
2) (Addr# -> Ptr Any
forall a. Addr# -> Ptr a
Ptr Addr#
p)
{-# LINE 175 "src/Linux/Socket/Types.hsc" #-}

pokeUdpHeaderLength :: Addr -> Word16 -> IO ()
pokeUdpHeaderLength :: Addr -> Word16 -> IO ()
pokeUdpHeaderLength (Addr Addr#
p) = (\Ptr Any
hsc_ptr -> Ptr Any -> Int -> Word16 -> IO ()
forall b. Ptr b -> Int -> Word16 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr Any
hsc_ptr Int
4) (Addr# -> Ptr Any
forall a. Addr# -> Ptr a
Ptr Addr#
p)
{-# LINE 178 "src/Linux/Socket/Types.hsc" #-}

pokeUdpHeaderChecksum :: Addr -> Word16 -> IO ()
pokeUdpHeaderChecksum :: Addr -> Word16 -> IO ()
pokeUdpHeaderChecksum (Addr Addr#
p) = (\Ptr Any
hsc_ptr -> Ptr Any -> Int -> Word16 -> IO ()
forall b. Ptr b -> Int -> Word16 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr Any
hsc_ptr Int
6) (Addr# -> Ptr Any
forall a. Addr# -> Ptr a
Ptr Addr#
p)
{-# LINE 181 "src/Linux/Socket/Types.hsc" #-}

-- | The size of an @iphdr@ struct.
sizeofIpHeader :: CInt
sizeofIpHeader :: CInt
sizeofIpHeader = (CInt
20)
{-# LINE 185 "src/Linux/Socket/Types.hsc" #-}

-- | This poke function requires the user to pack the version and the
-- internet header length (IHL), each 4 bits, into a single 8-bit word.
-- The version should be in the most significant bits. This function
-- will marshal the value appropriately depending on the platform's
-- bit-endianness.
pokeIpHeaderVersionIhl :: Addr -> Word8 -> IO ()
-- TODO: Verify if this is correct. Also, something bad is going
-- on here. Fix this.

{-# LINE 195 "src/Linux/Socket/Types.hsc" #-}
pokeIpHeaderVersionIhl p _ = writeOffAddr p 0 (0b01000101 :: Word8)

{-# LINE 201 "src/Linux/Socket/Types.hsc" #-}

pokeIpHeaderTypeOfService :: Addr -> Word8 -> IO ()
pokeIpHeaderTypeOfService :: Addr -> Word8 -> IO ()
pokeIpHeaderTypeOfService (Addr Addr#
p) = (\Ptr Any
hsc_ptr -> Ptr Any -> Int -> Word8 -> IO ()
forall b. Ptr b -> Int -> Word8 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr Any
hsc_ptr Int
1) (Addr# -> Ptr Any
forall a. Addr# -> Ptr a
Ptr Addr#
p)
{-# LINE 204 "src/Linux/Socket/Types.hsc" #-}

pokeIpHeaderTotalLength :: Addr -> Word16 -> IO ()
pokeIpHeaderTotalLength :: Addr -> Word16 -> IO ()
pokeIpHeaderTotalLength (Addr Addr#
p) = (\Ptr Any
hsc_ptr -> Ptr Any -> Int -> Word16 -> IO ()
forall b. Ptr b -> Int -> Word16 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr Any
hsc_ptr Int
2) (Addr# -> Ptr Any
forall a. Addr# -> Ptr a
Ptr Addr#
p)
{-# LINE 207 "src/Linux/Socket/Types.hsc" #-}

pokeIpHeaderIdentifier :: Addr -> Word16 -> IO ()
pokeIpHeaderIdentifier :: Addr -> Word16 -> IO ()
pokeIpHeaderIdentifier (Addr Addr#
p) = (\Ptr Any
hsc_ptr -> Ptr Any -> Int -> Word16 -> IO ()
forall b. Ptr b -> Int -> Word16 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr Any
hsc_ptr Int
4) (Addr# -> Ptr Any
forall a. Addr# -> Ptr a
Ptr Addr#
p)
{-# LINE 210 "src/Linux/Socket/Types.hsc" #-}

pokeIpHeaderFragmentOffset :: Addr -> Word16 -> IO ()
pokeIpHeaderFragmentOffset :: Addr -> Word16 -> IO ()
pokeIpHeaderFragmentOffset (Addr Addr#
p) = (\Ptr Any
hsc_ptr -> Ptr Any -> Int -> Word16 -> IO ()
forall b. Ptr b -> Int -> Word16 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr Any
hsc_ptr Int
6) (Addr# -> Ptr Any
forall a. Addr# -> Ptr a
Ptr Addr#
p)
{-# LINE 213 "src/Linux/Socket/Types.hsc" #-}

pokeIpHeaderTimeToLive :: Addr -> Word8 -> IO ()
pokeIpHeaderTimeToLive :: Addr -> Word8 -> IO ()
pokeIpHeaderTimeToLive (Addr Addr#
p) = (\Ptr Any
hsc_ptr -> Ptr Any -> Int -> Word8 -> IO ()
forall b. Ptr b -> Int -> Word8 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr Any
hsc_ptr Int
8) (Addr# -> Ptr Any
forall a. Addr# -> Ptr a
Ptr Addr#
p)
{-# LINE 216 "src/Linux/Socket/Types.hsc" #-}

pokeIpHeaderProtocol :: Addr -> Word8 -> IO ()
pokeIpHeaderProtocol :: Addr -> Word8 -> IO ()
pokeIpHeaderProtocol (Addr Addr#
p) = (\Ptr Any
hsc_ptr -> Ptr Any -> Int -> Word8 -> IO ()
forall b. Ptr b -> Int -> Word8 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr Any
hsc_ptr Int
9) (Addr# -> Ptr Any
forall a. Addr# -> Ptr a
Ptr Addr#
p)
{-# LINE 219 "src/Linux/Socket/Types.hsc" #-}

pokeIpHeaderChecksum :: Addr -> Word16 -> IO ()
pokeIpHeaderChecksum :: Addr -> Word16 -> IO ()
pokeIpHeaderChecksum (Addr Addr#
p) = (\Ptr Any
hsc_ptr -> Ptr Any -> Int -> Word16 -> IO ()
forall b. Ptr b -> Int -> Word16 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr Any
hsc_ptr Int
10) (Addr# -> Ptr Any
forall a. Addr# -> Ptr a
Ptr Addr#
p)
{-# LINE 222 "src/Linux/Socket/Types.hsc" #-}

pokeIpHeaderSourceAddress :: Addr -> Word32 -> IO ()
pokeIpHeaderSourceAddress :: Addr -> Word32 -> IO ()
pokeIpHeaderSourceAddress (Addr Addr#
p) = (\Ptr Any
hsc_ptr -> Ptr Any -> Int -> Word32 -> IO ()
forall b. Ptr b -> Int -> Word32 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr Any
hsc_ptr Int
12) (Addr# -> Ptr Any
forall a. Addr# -> Ptr a
Ptr Addr#
p)
{-# LINE 225 "src/Linux/Socket/Types.hsc" #-}

pokeIpHeaderDestinationAddress :: Addr -> Word32 -> IO ()
pokeIpHeaderDestinationAddress :: Addr -> Word32 -> IO ()
pokeIpHeaderDestinationAddress (Addr Addr#
p) = (\Ptr Any
hsc_ptr -> Ptr Any -> Int -> Word32 -> IO ()
forall b. Ptr b -> Int -> Word32 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr Any
hsc_ptr Int
16) (Addr# -> Ptr Any
forall a. Addr# -> Ptr a
Ptr Addr#
p)
{-# LINE 228 "src/Linux/Socket/Types.hsc" #-}