{-# LANGUAGE CPP #-}
{-# LANGUAGE StrictData #-}

module Network.QUIC.Common where

import qualified Network.Socket as NS

import Control.Concurrent
import GHC.Conc.Sync

import Network.QUIC.Connection
import Network.QUIC.Parameters
import Network.QUIC.Types

----------------------------------------------------------------

data ConnRes = ConnRes Connection AuthCIDs ~(IO ())

connResConnection :: ConnRes -> Connection
connResConnection :: ConnRes -> Connection
connResConnection (ConnRes Connection
conn AuthCIDs
_ IO ()
_) = Connection
conn

defaultPacketSize :: NS.SockAddr -> Int
defaultPacketSize :: SockAddr -> Int
defaultPacketSize NS.SockAddrInet6{} = Int
defaultQUICPacketSizeForIPv6
defaultPacketSize SockAddr
_ = Int
defaultQUICPacketSizeForIPv4

maximumPacketSize :: NS.SockAddr -> Int
maximumPacketSize :: SockAddr -> Int
maximumPacketSize NS.SockAddrInet6{} = Int
1500 Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
40 Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
8 -- fixme
maximumPacketSize SockAddr
_ = Int
1500 Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
20 Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
8 -- fixme

labelMe :: String -> IO ()
#if MIN_VERSION_base(4,18,0)
labelMe :: String -> IO ()
labelMe String
name = do
    ThreadId
tid <- IO ThreadId
myThreadId
    Maybe String
mlabel <- ThreadId -> IO (Maybe String)
threadLabel ThreadId
tid
    case Maybe String
mlabel of
        Maybe String
Nothing -> ThreadId -> String -> IO ()
labelThread ThreadId
tid String
name
        Just String
_ -> () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
#else
labelMe name = do
    tid <- myThreadId
    labelThread tid name
#endif