{-# 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 #-}
{-# OPTIONS_GHC -fno-warn-unticked-promoted-constructors #-}
module Linux.Socket.Types
( SocketFlags(..)
, dontWait
, truncate
, controlTruncate
, closeOnExec
, nonblocking
, headerInclude
, pokeMultipleMessageHeaderName
, pokeMultipleMessageHeaderNameLength
, pokeMultipleMessageHeaderIOVector
, pokeMultipleMessageHeaderIOVectorLength
, pokeMultipleMessageHeaderControl
, pokeMultipleMessageHeaderControlLength
, pokeMultipleMessageHeaderFlags
, pokeMultipleMessageHeaderLength
, peekMultipleMessageHeaderLength
, peekMultipleMessageHeaderNameLength
, sizeofMultipleMessageHeader
, sizeofUdpHeader
, pokeUdpHeaderSourcePort
, pokeUdpHeaderDestinationPort
, pokeUdpHeaderLength
, pokeUdpHeaderChecksum
, 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)
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
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" #-}
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" #-}
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" #-}
closeOnExec :: SocketFlags
closeOnExec :: SocketFlags
closeOnExec = CInt -> SocketFlags
SocketFlags CInt
524288
{-# LINE 122 "src/Linux/Socket/Types.hsc" #-}
nonblocking :: SocketFlags
nonblocking :: SocketFlags
nonblocking = CInt -> SocketFlags
SocketFlags CInt
2048
{-# LINE 126 "src/Linux/Socket/Types.hsc" #-}
headerInclude :: OptionName
= CInt -> OptionName
OptionName CInt
3
{-# LINE 131 "src/Linux/Socket/Types.hsc" #-}
sizeofMultipleMessageHeader :: CInt
= (CInt
64)
{-# LINE 135 "src/Linux/Socket/Types.hsc" #-}
pokeMultipleMessageHeaderName :: Addr -> Addr -> IO ()
(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 ()
(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 ()
(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 ()
(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 ()
(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 ()
(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 ()
(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 ()
(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
(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
(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" #-}
sizeofUdpHeader :: CInt
= (CInt
8)
{-# LINE 169 "src/Linux/Socket/Types.hsc" #-}
pokeUdpHeaderSourcePort :: Addr -> Word16 -> IO ()
(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 ()
(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 ()
(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 ()
(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" #-}
sizeofIpHeader :: CInt
= (CInt
20)
{-# LINE 185 "src/Linux/Socket/Types.hsc" #-}
pokeIpHeaderVersionIhl :: Addr -> Word8 -> IO ()
pokeIpHeaderVersionIhl p _ = writeOffAddr p 0 (0b01000101 :: Word8)
{-# LINE 201 "src/Linux/Socket/Types.hsc" #-}
pokeIpHeaderTypeOfService :: Addr -> Word8 -> IO ()
(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 ()
(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 ()
(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 ()
(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 ()
(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 ()
(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 ()
(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 ()
(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 ()
(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" #-}